導入
Linuxの使い方を初めて学ぶユーザーが直面する問題の一つは、探しているファイルを見つける方法です。このガイドでは、コマンドの使い方を説明します。 探す 適切な名前を網羅しています。様々なフィルターやパラメータを使ってシステム上のファイルを検索するのに役立ちます。また、コマンドについても簡単に説明します。 見つける これを使用して、別の方法でファイルを検索できます。.
前提条件
- このガイドを実行するには、Linuxベースのオペレーティングシステムを実行しているコンピューターが必要です。SSHで接続する仮想プライベートサーバーでも、ローカルマシンでも構いません。このチュートリアルはUbuntu 20.04を実行しているLinuxサーバーを使用して検証されていますが、提供されている例は、どのバージョンのLinuxディストリビューションを実行しているコンピューターでも動作するはずです。.
名前で検索
ファイルを検索する最も明白な方法は、名前で検索することです。コマンドで名前からファイルを検索するには、 探す、次のコマンドを使用する必要があります。
find -name "query"大文字と小文字が区別されるため、クエリを検索すると、 クエリ 違います。ファイル名でファイルを検索する場合、大文字と小文字を区別しないには、-iname オプションを使用します。
find -iname "query"特定のパターンに当てはまらないファイルをすべて検索したい場合は、 -ない 逆行する:
find -not -name "query_to_avoid"あるいは、次のように感嘆符 (!) を使用して検索を逆にすることもできます。
find \! -name "query_to_avoid"! を使用する場合は、その文字を使用する前にバックスラッシュ (\) でエスケープする必要があることに注意してください。 探す 解釈できる場合、シェルはそれを解釈しようとしません。.
タイプで検索
パラメータ付き -タイプ 検索したいファイルの種類を指定できます。手順は以下のとおりです。
find -type type_descriptor queryファイルの種類を判別するために使用できる記述子をいくつか示します。
- f: 通常ファイル
- d: ディレクトリ
- l: シンボリックリンク
- c: 文字デバイス
- b: デバイスをブロックする
たとえば、システム上のすべてのキャラクターデバイスを検索する場合は、次のコマンドを発行します。
find /dev -type cこのコマンドは、Linux システムでデバイス ファイルが通常インストールされているディレクトリである /dev フォルダ内のデバイスのみを検索します。
Output
/dev/vcsa5
/dev/vcsu5
/dev/vcs5
/dev/vcsa4
/dev/vcsu4
/dev/vcs4
/dev/vcsa3
/dev/vcsu3
/dev/vcs3
/dev/vcsa2
/dev/vcsu2
/dev/vcs2
. . .すべてのファイルを表示できます .conf で終わるファイルを検索します。この例では、フォルダ内の一致するファイルを検索します。 /usr 検索対象:
find /usr -type f -name "*.conf"Output
/usr/src/linux-headers-5.4.0-88-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-88-generic/include/config/tristate.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/auto.conf
/usr/src/linux-headers-5.4.0-90-generic/include/config/tristate.conf
/usr/share/adduser/adduser.conf
/usr/share/ufw/ufw.conf
/usr/share/popularity-contest/default.conf
/usr/share/byobu/keybindings/tmux-screen-keys.conf
/usr/share/libc-bin/nsswitch.conf
/usr/share/rsyslog/50-default.conf
. . .時間とサイズでフィルタリング
探す サイズと時間で結果をフィルタリングするさまざまな方法を提供します。.
サイズ
パラメータの使用 -サイズ ファイルをサイズでフィルタリングできます。これを行うには、数値サイズの末尾に特別なサフィックスを追加して、サイズをバイト、メガバイト、ギガバイト、またはその他の単位でカウントしているかどうかを示す必要があります。以下に、よく使用されるサイズサフィックスをいくつか示します。
- c: バイト
- k: キロバイト
- m: メガバイト
- g: ギガバイト
- b: 512バイトブロック
たとえば、次のコマンドは、/usr ディレクトリ内でちょうど 50 バイトの長さのファイルを検索します。
find /usr -size 50c50 バイト未満のファイルを検索するには、次の構文を使用できます。
find /usr -size -50c/usr フォルダ内で 700 MB を超えるファイルを検索するには、次のコマンドを使用します。
find /usr -size +700M時間
Linux は、システム上の各ファイルについて、アクセス時間、変更時間、修正時間のタイムスタンプを保存します。.
- アクセス時間: ファイルが最後に読み取られた、または書き込まれた時刻。.
- 変更時刻: ファイルの内容が最後に変更された時刻。.
- 変更時刻: ファイルの inode メタデータが最後に変更された時刻。.
オプションの使用 atime- 、mtime- そして -ctimeでは、これらのパラメータに基づいて検索を行うことができます。各オプションには、検索対象となる過去何日分まで遡るかを示す値を渡す必要があります。前述のサイズオプションと同様に、これらのオプションの前にプラス記号またはマイナス記号を付けることで、「より大きい」または「より小さい」を指定できます。.
たとえば、過去 1 日間に変更された /usr フォルダー内のファイルを検索するには、次のコマンドを実行します。
find /usr -mtime 11 日以内にアクセスしたファイルが必要な場合は、次のコマンドを実行します。
find /usr -atime -1メタデータが最後に変更されてから 3 日以上経ったファイルを見つけるには、次のコマンドを実行します。
find /usr -ctime +3これらのオプションには、日数ではなく分数を指定するために使用できる付随パラメータもあります。
find /usr -mmin -1これにより、前回変更されたファイルが表示されます。.
探す 参照ファイルと比較して、新しい項目を返すこともできます。
find / -newer reference_fileこの構文は、参照ファイルに対して最近作成または変更されたシステム上のすべてのファイルを返します。.
所有者と権限で検索
-user および -group パラメータを使用して、ファイルの所有者であるユーザーまたはグループでファイルを検索することもできます。/var ディレクトリ内の syslog ユーザーが所有するファイルを検索するには、次のコマンドを実行します。
find /var -user syslog同様に、次のように入力すると、/etc ディレクトリ内の shadow グループに属するファイルを一覧表示できます。
find /etc -group shadow特定の権限を持つファイルを検索することもできます。.
権限のセットを正確に一致させたい場合は、8 進表記を使用して権限を指定する次の構文を使用できます。
find / -perm 644これにより、指定された権限を持つファイルと正確に一致します。.
少なくともこれらの権限で何かを指定したい場合は、権限記号の前にマイナス記号を付けます。
find / -perm -644これは、追加の権限を持つすべてのファイルに一致します。この例では、権限が744のファイルが一致します。.
深度によるフィルタリング
このセクションでは、サンプルのディレクトリ構造を作成し、それを使用して、構造の深さに基づいてファイルをフィルタリングする方法を調べます。このチュートリアルの例に従う場合は、これらのファイルとディレクトリを /tmp/ フォルダーに作成することをお勧めします。 /tmp/ は一時ディレクトリであるため、このディレクトリ内のファイルとディレクトリは、サーバーの次回起動時に削除されます。これは、後でシステムをクラッシュさせる心配をすることなく、必要な数のディレクトリ、ファイル、およびリンクを作成できるため、このガイドの目的には役立ちます。このセクションのコマンドを実行すると、/tmp/ ディレクトリには 3 レベルのディレクトリが作成され、最初のレベルには 10 個のディレクトリが含まれます。各ディレクトリ (一時ディレクトリを含む) には、10 個のファイルと 10 個のサブディレクトリが含まれます。.
次のコマンドを使用して、/tmp/ フォルダーにサンプル ディレクトリ構造を作成します。
mkdir -p /tmp/test/level1dir{1..10}/level2dir{1..10}/level3dir{1..10}その後、touch コマンドを使用して、これらのディレクトリにいくつかのサンプル ファイルを追加します。
touch /tmp/test/{file{1..10},level1dir{1..10}/{file{1..10},level2dir{1..10}/{file{1..10},level3dir{1..10}/file{1..10}}}}これらのファイルとディレクトリを配置したら、先ほど作成した test/ ディレクトリに変更します。
cd /tmp/testこの構造からファイルを取得する方法の基本を理解するには、まず、file1 という名前のファイルに一致する通常の名前を検索することから始めます。
find -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
./level1dir7/level2dir8/level3dir6/file1
./level1dir7/level2dir8/level3dir5/file1
./level1dir7/level2dir8/file1
. . .大量の結果が生成されます。出力をカウンターにパイプすると、合計1111件の結果があることがわかります。
find -name file1 | wc -lOutput
1111おそらく、ほとんどの状況では結果が多すぎて役に立ちません。結果を制限するには、トップレベルの検索リストで最大検索深度を指定できます。
find -maxdepth num -name queryレベル 1 以上のディレクトリでのみ file1 を検索するには、最大深度 2 (最上位ディレクトリに 1、レベル 1 ディレクトリに 1) を指定します。
find -maxdepth 2 -name file1Output
./level1dir7/file1
./level1dir1/file1
./level1dir3/file1
./level1dir8/file1
./level1dir6/file1
./file1
./level1dir2/file1
./level1dir9/file1
./level1dir4/file1
./level1dir5/file1
./level1dir10/file1これは非常に扱いやすいリストです。.
特定の時点からのすべてのファイルが現在のディレクトリの下に存在することが分かっている場合は、最小ディレクトリを指定することもできます。
find -mindepth num -name queryこれを使用すると、ディレクトリ ブランチの末尾にあるファイルのみを見つけることができます。
find -mindepth 4 -name file1Output
./level1dir7/level2dir8/level3dir9/file1
./level1dir7/level2dir8/level3dir3/file1
./level1dir7/level2dir8/level3dir4/file1
./level1dir7/level2dir8/level3dir1/file1
./level1dir7/level2dir8/level3dir8/file1
./level1dir7/level2dir8/level3dir7/file1
./level1dir7/level2dir8/level3dir2/file1
. . .この場合も、ブランチ アンド ファイル構造のため、多数の結果 (1000) が返されます。.
最小深度パラメータと最大深度パラメータを組み合わせて、狭い範囲に焦点を絞ることができます。
find -mindepth 2 -maxdepth 3 -name file1Output
./level1dir7/level2dir8/file1
./level1dir7/level2dir5/file1
./level1dir7/level2dir7/file1
./level1dir7/level2dir2/file1
./level1dir7/level2dir10/file1
./level1dir7/level2dir6/file1
./level1dir7/level2dir3/file1
./level1dir7/level2dir4/file1
./level1dir7/file1
. . .このようにオプションを組み合わせると、結果が大幅に削減され、以前の 1000 行ではなく 110 行のみが返されます。.
結果を見つけるためのコマンドの実行
パラメータを使用することができます -exec 次のコマンドを使用して、一致するものに対してカスタム ヘルパー コマンドを実行します。
find find_parameters -exec command_and_options {} \;{} は一致するファイルのプレースホルダーとして使用されます。\; はコマンドの終了位置を知らせます。.
たとえば、前の手順で /tmp/ フォルダーに作成した /test/ ディレクトリ内にまだいると仮定すると、前のセクションの 644 権限を持つファイルを見つけて、664 権限を持つように変更できます。
find . -type f -perm 644 -exec chmod 664 {} \;同様の方法でディレクトリの権限を変更することもできます。
find . -type d -perm 755 -exec chmod 700 {} \;この例では、権限が 755 に設定されているディレクトリを検索し、権限を 700 に変更します。.
Locateを使用してファイルを検索する
代わりに 探す 注文 見つける このコマンドは多くの場合より高速であり、ファイルシステム全体を簡単に検索できます。.
パッケージ リストを更新し、molocate パッケージをインストールすることで、apt を使用して Debian または Ubuntu にコマンドをインストールできます。
sudo apt update sudo apt install mlocate
Rocky Linux、CentOS、およびその他の RedHat 由来のディストリビューションでは、dnf コマンドを使用して mlocate をインストールできます。
sudo dnf install mlocatelocate が find よりも高速な理由は、ファイルシステム上のすべてのファイルをリストするデータベースに依存しているためです。このデータベースは通常、cron スクリプトによって1日に1回更新されますが、updatedb コマンドを使って手動で更新することもできます。sudo 権限で次のコマンドを実行します。
sudo updatedb新しいファイルを検索するには、ロケーションデータベースを常に最新の状態にしておく必要があります。cronスクリプトの実行前、またはupdatedbコマンドの実行前に新しいファイルを追加した場合、クエリ結果には表示されません。.
Location を使用すると、さまざまな方法で結果をフィルタリングできます。ファイルを検索する最も基本的な方法は、次の構文を使用することです。
locate queryこれは、ファイルパスのどこかに文字列 query を含むファイルまたはディレクトリに一致します。クエリ自体を含むファイル名のみを返すようにし、クエリを含むディレクトリ内のファイルも返さないようにするには、-b フラグを追加して、「ベース名」がクエリに一致するファイルのみを検索します。
locate -b querylocate がファイルシステム上にまだ存在する結果(つまり、最後の updatedb 呼び出しと現在の locate 呼び出しの間に削除されていないファイル)のみを返すようにするには、-e を使用します。
locate -e query-S オプションを使用して、場所がリストされている情報に関する統計を取得できます。
locate -SOutput
Database /var/lib/mlocate/mlocate.db:
21015 directories
136787 files
7727763 bytes in file names
3264413 bytes used to store databaseこれは、システム上のファイルとディレクトリの数を大まかに把握するのに役立ちます。.
結果
find と locate はどちらもシステム上のファイルを見つけるのに便利なツールです。どちらも強力なコマンドであり、パイプラインを介して他のツールと組み合わせることで機能強化できますが、どちらのツールが状況に適しているかはご自身で判断してください。ここからは、find と locate を実際に使ってみることをおすすめします。このガイドで取り上げていないオプションについては、それぞれのマニュアルページをご覧ください。また、検索結果を wc、sort、grep などの他のコマンドに渡すことで、分析や操作を行うこともできます。.









