このチュートリアルでは、findおよびlocateコマンドを使用してLinuxでファイルを検索する方法に焦点を当てています。
システム管理者として、ファイルシステムで特定のファイルを探すことは非常に一般的なタスクです。 。
ただし、Linuxでファイルを見つけるのは難しい場合があります 特に数十人の異なるユーザーがいる場合はファイルシステム。
目標を達成するのに役立つ2つのコマンドがあります:検索と検索。
このチュートリアルでは、これらのコマンドを効果的に使用する方法と、探しているものを実現するためにコマンドを調整する方法を説明します。
[検索]コマンドを使用してファイルを検索する
Linuxホストでファイルを検索して見つける最初の方法は、findコマンドを使用することです。
デフォルトでは、findコマンドはすべてのディストリビューションで使用可能であり、次の構文があります
$ find <options> <path> <expression>
クイックヒント :パスまたは式が最初に来るかどうかを思い出すのに問題がありますか?
grEPについては覚えておいてください Eです xpression P ath、findは反対なので、 P ath E 表現!
検索は、検索コマンドよりもはるかに多くのオプションがあるため、非常に強力なコマンドです。
Linuxでの検索機能のすべての可能性は次のとおりです。
ファイル名で検索してファイルを検索
検索機能の最も一般的な使用法は、ファイル名を指定してファイルを検索することです。 。
$ find <path> -name <pattern>
ファイルの検索に関するfindとlocateの主な違いは、findはファイル名を検索し、locateはファイルへのパスを検索することです。
たとえば、前に使用したランレベルの例に戻ると、findコマンドを使用してランレベルファイルを検索する方法は次のとおりです。
$ find / -name runlevel*
「2>/dev / null」の部分は何ですか?
コンソールでのエラーメッセージを回避するために、出力リダイレクトを使用してエラー出力を/ dev/nullにリダイレクトしました。
ファイルタイプによる検索を使用してファイルを検索
ハードリンクとソフトリンクに関する記事で以前に説明したように、ファイルにはファイルタイプが割り当てられ、それらを区別する方法として使用されます。
Linuxで使用されるすべてのファイルタイプの要約を次に示します。
- f :標準ファイル
- d :フォルダまたはディレクトリ
- l :シンボリックリンクまたはソフトリンク
- b :ブロックデバイス(ハードドライブなど)
- c :キャラクターデバイス(シリアルポート、サウンドカード)
- p :名前付きパイプ li>
- s :ソケット
これらすべてのファイルタイプがわかっているので、ファイルタイプでファイルを検索できるようになりました。 検索コマンドを使用します。
$ find <path> -type <filetype>
たとえば、すべてのシンボリックリンクを検索する場合 ホストで、次のコマンドを発行します。
$ find / -type l
パラメータを組み合わせることができます。たとえば、ファイル名が「.service」で終わるすべてのシンボリックリンクを探している場合(たとえば、すべてのsystemdサービスを分離するため)、次のコマンドを実行します。
$ find / -type l -name *.service
パターンを使用してファイルを検索(拡張子用)
Locateコマンドと同様に、Linux上でパターンを使用してファイルを検索できます。
注意として、パターンは、グロビング文字(*、?、範囲など)を含む文字列です。
このオプションは、Javascriptファイルなどの拡張子が付いたファイルを検索する場合に特に適しています。
パターンを使用してLinux上のファイルを検索するには、次のコマンドを実行します
$ find <path> -name ".<extension>"
$ find / -name "*.js"
所有者がLinux上でファイルをファイルする
特定のユーザーによって作成されたファイルを分離したい場合があります 。
ホスト上のユーザーを削除する場合、たとえば、このユーザーに関連付けられているすべてのファイルを削除したい場合があります。
ユーザーがホームディレクトリからファイルを作成し、ユーザーのホームディレクトリを削除するだけでは不十分な場合があります。
結果として、Linuxで特定のユーザーによって作成されたファイルを見つけるには、次のコマンドを実行します
$ find <path> -user <user>
たとえば、ホスト上の「john」が所有するすべてのファイルを検索するには、次のコマンドを実行します。
$ find / -user john
簡単なコマンドでjohnが所有するすべてのファイルを削除したい場合はどうすればよいですか?
削除フラグを使用すると簡単に実行できます。
$ find / -user john -delete
権限によってLinux上のファイルを検索する
findコマンドを使用すると、ホスト上で特定の権限を持つファイルを検索して見つけることもできます。
$ find <path> -perm <permissions>
念のため、Linuxでファイルパーミッションがどのように機能するかを次に示します。
完全なアクセス許可(バイナリ表記で777)を持つすべてのファイルを検索するには、次のコマンドを実行できます。
$ find / -perm 777
セキュリティ上の理由から、システムに完全な権限で構成されているファイルがないかどうかを確認する場合は、非常に便利です。
サイズで検索してファイルを検索
Linuxでファイルを検索して検索するもう1つの非常に便利な方法は、サイズオプションを指定して検索コマンドを検索することです。
サイズオプションを使用すると、指定したサイズとまったく同じ、特定のサイズより大きい、または特定のサイズより小さいファイルを検索できます。
サイズでファイルを検索するには、次のコマンドを使用します
$ find <path> -size <size>
サイズは次のプレフィックスで定義されます:
- c :バイト
- b :512バイトのブロック
- k :キロバイト
- M :メガバイト
- G :ギガバイト
指定されたサイズより大きいファイルを探している場合は、「+」を指定できます。
たとえば、システム上で1 GBを超えるファイルを検索するには、次のコマンドを実行します
$ find / -size +1G
システム上で10MB未満のファイルを検索するには 、次のコマンドを実行します
$ find / -size -10M
最後に、正確にあるファイルを検索します クエリで指定されたサイズの場合、コマンドにプラスまたはマイナスのプレフィックスを追加しないでください。
$ find / -size 1024k
定義したコマンドは、ホスト上で正確に1024Kbsのサイズのすべてのファイルを検索します。
変更日でLinux上のファイルを検索
検索を使用すると、変更日が指定されているかどうかにかかわらず、ファイルを検索することもできます。
このコマンドは非常に便利で、システム管理者が最近変更されたファイルやディレクトリを見つけるために頻繁に使用します。
変更日による検索を使用してファイルを検索するには、次のコマンドを実行します
$ find <path> -mtime <time>
ここで、timeは、 24*に変更されたファイルを表します 。
結果として、時間は日数で表されます。
サイズオプションと同様に、「プラス」を追加できます 」または「マイナス 」演算子を使用して、
たとえば、正確に3時間前に変更されたファイルを探す 、次のコマンドを実行します。
$ find / -mtime 3
1週間以上前に変更されたファイルを検索するには 、次のコマンドを実行します
$ find / -mtime +7
2日以内に変更されたファイルを検索するには 、次のコマンドを実行します
$ find / -mtime -2
動的な深さのファイルを検索
お気づきかもしれませんが、このチュートリアルの開始以来、ルートディレクトリから開始するファイル検索の例を示しています。
結果として、すべてのフォルダーが再帰的に参照されます。
ただし、1つのディレクトリから再帰的に移動するディレクトリの数を制限することはできます。これを深度と呼びます。
ファイル検索を特定の深さに制限するには 、次のクエリを実行します
$ find <path> -maxdepth <depth>
例として、子ディレクトリを参照せずに、ファイル検索を現在のディレクトリに制限する方法を次に示します。
$ find / -maxdepth 1
明らかに、このコマンドを名前フラグと組み合わせて、現在のディレクトリで指定された名前のファイルを検索できます。
$ find . -maxdepth 1 -name *.tar
-execを使用した検索の連鎖
場合によっては、findコマンドをexecコマンドとチェーンすると便利なことがあります。
execオプションは、複数のコマンドをチェーン化するために使用できます。最初のコマンドの結果を2番目のコマンドの入力として取得します。
たとえば、1分以内に変更されたすべてのファイルを検索するとします
$ find /home/user -mmin -1
./file1
ここで、1分以内に変更されたすべてのファイルを削除するとします。
この構文を使用して、-execオプションを指定してfindコマンドをチェーンできます。
$ find /home/user -mmin -1 -exec echo rm -f '{}' \;
正しいファイルを削除していることを確認したいので、明らかに最初に結果を「エコー」します。
これらのファイルを削除する準備ができたら、echoコマンドを削除するだけです。
$ find /home/user -mmin -1 -exec rm -f '{}' \;
Locateコマンドを使用してLinux上のファイルを検索する
Linuxでファイルを見つけて見つけるもう1つの優れた方法は、locateを使用することです。 コマンド。
前提条件
システムでlocateコマンドを使用できない場合は、次のセクションを読んで、システムでlocateを実行してください。
a –APTおよびRPMベースのディストリビューションへのLocateのインストール
locateをインストールするには 、Linuxホストでsudo権限が必要になります。
Locateがホストにインストールされているかどうかを確認するには、コマンドラインでlocateコマンドを実行します。
$ locate
Locateがコンピューターにインストールされている場合、式が提供されることを期待します
Locateがホストにインストールされていない場合、エラーメッセージが表示されます
LocateをUbuntu18.04およびDebian10にインストールするには、次のコマンドを実行します。
$ sudo apt-get install mlocate
同様に、CentOSまたはFedoraベースのディストリビューションを使用している場合は、次のコマンドを実行してlocateをインストールします。
$ sudo yum install mlocate
b –mlocateデータベースの更新
検索 関数は、ホストのすべてのファイル名を格納するファイルシステムに格納されているローカルデータベースと連携します。
Locateコマンドを実行すると、locateはupdatedbによって準備されたデータベースを検索します。 検索しているファイルの場合。
定期的に、cronジョブ mlocate.dbを更新します 最新のエントリを探すためのファイル。
データベースは/var/lib/mlocate/mlocate.dbにあります デフォルトでは、updatedb構成ファイルは/etc/updatedb.confに保存されます 。
今のところ、デフォルトのオプションをそのままにして、データベースを更新するための簡単なupdatedbコマンドを実行できます。
$ sudo updatedb
名前パターンを指定してファイルを検索
Linuxでファイルを検索する最も基本的な方法は、locateコマンドにパターンを提供することです。 。
デフォルトでは、locateコマンドの構文は次のとおりです
$ locate [OPTION]... [PATTERN]...
システムで特定の構成ファイルを探している場合、それを見つける簡単な方法は、その完全なファイル名をlocateコマンドに提供することです。
$ locate updatedb.conf
ご覧のとおり、locateコマンドは、探しているファイルへの完全なパスを返しています。
制限されたディレクトリでファイルを検索する
システム上の一部のディレクトリにアクセスできない場合があります。
その結果、そこにあるファイルを見つけることができなくなります。
「restricted-file」という名前のファイルを含む禁止フォルダの例を見てみましょう。 「。
制限されたディレクトリにあるファイルを見つけるには、sudo権限でlocateコマンドを実行する必要があります。
$ sudo locate restricted-file
パターンを使用してファイルを検索する
Locateコマンドを使用すると、グロブ文字の形式で「パターン」を提供できます。 。
グロビングキャラクター 、ワイルドカードとも呼ばれ、1つまたは複数のエントリを簡略化された式と照合するために使用される文字です。
最も人気のあるものは「* 」は、なしを含むすべての文字に一致します。
グロブキャラクターとその機能の要約表は次のとおりです。
ワイルドカード | 説明 | 例 | 一致 | 一致しません |
---|---|---|---|---|
* | は任意の数の任意の文字に一致します なしを含む | devco* | devconnected, devcoco, devco.com | devdevco、 |
[abc] | 角かっこで指定された1文字に一致します | [ab]ab | aab、bab | cab |
[a-z] | 括弧内に指定された(ロケールに依存する)範囲の1文字に一致します | runlevel[0-9] | runlevel1, runlevel2, runlevel6 | ランレベル、ランレベル |
例として、システム上のすべてのテキストファイルを見つける方法を次に示します。
$ locate *.txt
正規表現を使用してファイルを検索する
Locateの公式マニュアルページに記載されているように、locateコマンドは入力としてパターンを受け入れます。
これは、locateコマンドに正規表現を提供できることを意味します。
正規表現を指定してファイルを検索および検索するには、 –regexを使用します Locateコマンドのオプション。
$ locate --regex <regex>
たとえば、runlevelで始まり、その後に数字が続くすべてのファイルを分離するには、次のコマンドを実行します。
$ locate --regex runlevel[0-9]+
正規表現を使用する場合、ファイルを検索するときに注意する必要がある重要な点が1つあります。
Locateコマンドは、ローカルデータベース内のファイルへのパスを探しています。
結果として、ファイルを検索するときは、正規表現がファイル名だけではなく、ファイルへのパスと一致する必要があることに注意する必要があります。
たとえば、「run」で始まるファイルを検索した場合、ファイルへのパスが「/ usr」で始まるため、結果は返されません。
大文字と小文字を区別しないオプションを使用してファイルを検索
ファイルシステムでファイルを検索するとき、特定のファイルの名前が付けられた方法がわからない場合があります。
大文字で書かれていましたか、それとも小文字で書かれていましたか?大文字が含まれていますか?
大文字と小文字を区別しないオプションを使用してファイルを検索および検索するには、検索コマンドに-iオプションを追加します。
$ locate -i <file_pattern>
grepを使用してコンテンツでファイルを検索
場合によっては、ファイル内にある特定の文の単語に一致するファイルを検索することに興味があるかもしれません。
これは、たとえば、特定のログイベントを含むファイルを検索しようとしている場合に発生する可能性があります。
特定の単語に一致するファイルを検索する最初の方法は、grepコマンドを使用することです
$ grep -r <pattern> <path>
注 :ディレクトリ全体でファイルを検索する場合は、「-r」オプションを忘れないでください。
例えば。ホームディレクトリにあるコンテンツに「エラー」が含まれるすべてのファイルを検索する場合は、「
」と入力します。$ grep -r error /home/user
場合によっては、正規表現が指定されたファイルを検索したいことがあります。
正規表現を使用してファイルを検索するには、「-E」オプションを使用します。
$ grep -r -E <expression> <path>
たとえば、ファイルの1つで「abc」パターンに一致するファイルを見つけたい場合は、次のように入力します
$ grep -r -E "abc.*" --color /home/user
注 :grepコマンドを使用して一致を強調表示するためにcolorオプションが使用されます。
どのファイルを使用してファイルを検索するか
Linuxでファイルを見つけるもう1つの優れた方法は、whichコマンドを使用することです。
whichコマンドは、特定のコマンドに関連付けられているファイルを見つけるために使用されます。
これは、コマンドのバイナリをどこに保存したかわからない場合や、コマンドをPATHに追加するためにコマンドを見つける必要がある場合に非常に便利です。
$ which <command>
たとえば、「ls」コマンドに関連付けられているファイルを検索するには、次のように入力します
$ which ls
/usr/bin/ls
ご覧のとおり、ファイルへの完全なパスが与えられています。
whereisを使用してバイナリを検索します
同様に、whereisコマンドを使用してファイルを検索することは完全に可能です。
「whereis」コマンドは、「which」コマンドのスーパーセットと見なすことができます。「whereis」は、コマンドの名前、ファイルの場所、およびマニュアルページの場所に関する情報を提供します。
whereisを実行するには、「whereis」と入力し、コマンドの名前を追加するだけです。
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
とても便利です!
結論
今日のチュートリアルでは、2つの重要なコマンドであるlocateとfindを使用してLinuxでファイルを検索および検索する方法を学習しました。
オプションが個別に提示された場合でも、探しているファイルをさらに指定できるように、それらを組み合わせることができることを覚えておく必要があります。
いつものように、Linuxシステム管理に興味がある場合は、当社のWebサイトにLinux専用の完全なセクションがあります。