このチュートリアルでは、findとlocateコマンドを使用してLinuxでファイルを検索する方法に焦点を当てています。
システム管理者として、ファイルシステム上の特定のファイルを検索するのは非常に一般的なタスクです。
ただし、Linuxファイルシステム上のファイルを見つけるのは難しい場合があります特に数十の異なるユーザーがいる場合。
あなたの目標を達成するのに役立つ二つのコマンドがあります:見つけると見つけます。,
このチュートリアルでは、これらのコマンドを効果的に使用する方法と、探しているものを達成するためにどのように調整できるかを見ていきます。
目次
Findコマンドを使用してファイルを検索
Linuxホスト上でファイルを検索および検索する最初の方法は、findコマンドを使用することです。,
デフォルトでは、findコマンドはすべてのディストリビューションで使用でき、次の構文を持っています
$ find <options> <path> <expression>
クイックヒント:パスまたは式が最初に来るかどうかを覚えておくのに問題がありますか?
grEPは式Pathであり、findは反対であるため、パス式であることを忘れないでください!
Findは、locateコマンドよりも多くのオプションがあるため、かなり強力なコマンドです。
Linuxでのfind関数のすべての可能性は次のとおりです。,
find by filenameでファイルを検索
find関数の最も一般的な使い方は、ファイル名を指定してファイルを検索することです。
$ find <path> -name <pattern>
ファイルを検索するときのfindとlocateの主な違いは、findがファイル名を検索し、locateがファイルへのパスを検索することです。
たとえば、前に使用したランレベルの例に戻ると、findコマンドを使用してランレベルファイルを検索する方法が次のとおりです。,
$ find / -name runlevel*
“2>/dev/null”パート? コンソール上のエラーメッセージを避けるために、出力リダイレクトを使用してエラー出力を/dev/nullにリダイレクトしました。
find by filetypeを使用してファイルを検索
以前にハードリンクとソフトリンクに関する記事で説明したように、ファイルにはファイルタイプが割り当てられており、それらを区別する方法として使用されています。,
ここでは、Linuxで使用されるすべてのファイルタイプの要約です。
- f:標準ファイル
- d:フォルダまたはディレクトリ
- l:シンボリックリンクまたはソフトリンク
- b:ブロックデバイス(ハードドライブなど)
- c:キャラクタデバイス(シリアルポート、サウンドカード)
- p:名前付きパイプ
- s:ソケット
これらのファイルタイプをすべて知っていれば、次のファイルタイプを検索できるようになりました。findコマンドでファイルタイプ別のファイル。
$ find <path> -type <filetype>
たとえば、ホスト上のすべてのシンボリックリンクを検索すると、次のコマンドを発行します。,
$ find / -type l
たとえば、ファイル名が”で終わるすべてのシンボリックリンクを探している場合など、パラメータを組み合わせることができます。サービス”(たとえば、すべてのsystemdサービスを分離するため)、次のコマンドを実行します。
$ find / -type l -name *.service
パターンを使用してファイルを検索します(拡張子用)
locateコマンドと同様に、Linuxではパターンを使用してファイルを検索することができます。
リマインダーとして、パターンはグロビング文字(*、?など)を含む文字列です,、または範囲)。
このオプションは、特に、Javascriptファイルなどの拡張子を指定したファイルを検索しようとしている場合に使用します。
パターンを使用してLinux上のファイルを検索するには、次のコマンドを実行します
$ find <path> -name ".<extension>"
$ find / -name "*.js"
ファイルファイルlinux by owner
場合によっては、特定のユーザーによって作成されたファイルを分離したい場合があります。
ホスト上のユーザーを削除するときは、このユーザーに関連付けられているすべてのファイルを削除することができます。,
時に、ユーザーが作成したファイルのホームディレクトリを削除したユーザのホームディレクトリなのに十分なによりそのものです。
結果として、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でファイルを検索して検索するもう一つの非常に便利な方法は、sizeオプションで検索コマンドを見つけることです。
sizeオプションを使用すると、指定したサイズのファイル、特定のサイズより大きいファイル、または特定のサイズより小さいファイルを検索できます。,
サイズでファイルを検索するには、次のコマンドを使用します
$ find <path> -size <size>
サイズは、次の接頭辞で定義されます。
- c:bytes
- b:512バイトブロック
- k:Kbytes
- m:Mbytes
- G:Gigabytes
指定したサイズより大きいファイルを探している場合は、”+”を指定します。,
たとえば、システムで1GBを超えるファイルを検索するには、次のコマンドを実行します
$ find / -size +1G
システムで10Mb未満のファイルを検索するには、次のコマンドを実行します
$ find / -size -10M
最後に、クエリで指定されたサイズのファイルを検索するには、コマンドにプラスまたはマイナスのプレフィックスを追加しないでください。
$ find / -size 1024k
先ほど定義したコマンドは、ホスト上のサイズが正確に1024Kbsのすべてのファイルを検索します。,
変更日によるLinux上のファイルの検索
検索を使用すると、変更日、最近のものかどうかを指定したファイルを見つけることもできます。
このコマンドは非常に便利で、最近変更されたファイルやディレクトリを見つけるためにシステム管理者がかなり頻繁に使用します。
find by modification dateを使用してファイルを検索するには、次のコマンドを実行します
$ find <path> -mtime <time>
timeは変更されたファイルを表します24*<time>時間前。
結果として、時間は日で表されます。,
sizeオプションと同様に、<time>days agoよりも前、または<time>days agoよりも前に変更されたファイルを探す時間に”plus”または”minus”演算子を追加することができます。
たとえば、正確に3時間前に変更されたファイルを検索するには、次のコマンドを実行します。,
$ find / -mtime 3
一週間以上前に変更されたファイルを見つけるには、次のコマンドを実行します
$ find / -mtime +7
二日前に変更されたファイルを見つけるには、次のコマンドを実行します
$ find / -mtime -2
動的深度のファイルを見つけます
おそらくお気づきのように、最初からこのチュートリアルでは、ルートディレクトリからのファイル検索の例を示します。
結果として、すべてのフォルダが再帰的に参照されます。,
しかし、あるディレクトリから再帰的に移動するディレクトリの数を制限することができます。
ファイルの検索を特定の深さに制限するには、次のクエリを実行します
$ find <path> -maxdepth <depth>
例として、ファイルの検索を現在のディレクトリに制限し、子ディレクトリを参照しないようにする方法を次に示します。
$ find / -maxdepth 1
このコマンドをnameフラグと組み合わせて、現在のディレクトリ内の指定された名前のファイルを検索することができます。,
$ find . -maxdepth 1 -name *.tar
-execで検索をチェーン化
場合によっては、findコマンドをexecでチェーン化すると便利です。
execオプションは、複数のコマンドを連鎖させるために使用することができます:最初のコマンドの結果を二番目のコマンドの入力として取る。,
たとえば、一分前に変更されたすべてのファイルを検索したいとしましょう
$ find /home/user -mmin -1./file1
次に、一分前に変更されたすべてのファイルを削除するとします。
この構文を使用して、findコマンドを-execオプションで連鎖させることができます。
$ find /home/user -mmin -1 -exec echo rm -f '{}' \;
正しいファイルを削除していることを確認するために、まず結果を”エコー”します。,
これらのファイルを削除する準備ができたら、echoコマンドを削除するだけです。
$ find /home/user -mmin -1 -exec rm -f '{}' \;
Locateコマンドを使用してLinux上でファイルを検索
Linux上でファイルを検索して検索するもう一つの素晴らしい方法は、locateコマンドを
前提条件
locateコマンドがシステムで使用できない場合は、次のセクションをお読みください。,
A–APTおよびRPMベースのディストリビューションへのLocateのインストール
locateをインストールするには、Linuxホストでsudo権限が必要です。ホストにlocateがインストールされているかどうかを確認するには、コマンドラインでlocateコマンドを実行します。,
$ locate
locateがコンピュータにインストールされている場合、式が提供されることが期待されます
locateがホストにインストールされていない場合、エラーメッセージが表示されます
ubuntu18.04およびdebian10にlocateをインストールするには、次のコマンドを実行します。,
$ sudo apt-get install mlocate
同様に、CentOSまたはFedoraベースのディストリビューションを使用している場合は、次のコマンドを実行してlocateをインストールします。
$ sudo yum install mlocate
b-mlocateデータベースの更新
locate関数は、ホストのすべてのファイル名を格納するファイルシステムに格納されているローカルデータベース
locateコマンドを実行すると、locateはupdatedbによって準備されたデータベースを検索して、検索しているファイルを検索します。
定期的に、cronジョブはmlocateを更新します。最新のエントリを探すためのdbファイル。,
データベースは/var/lib/mlocate/mlocateにあります。デフォルトではdbであり、updatedb設定ファイルは/etc/updatedbに保存されます。コンフ
今のところ、デフォルトのオプションを残して、データベースを更新するための単純なupdatedbコマンドを実行することができます。
$ sudo updatedb
Linuxでファイルを見つける最も基本的な方法は、locateコマンドにパターンを提供することです。,
デフォルトでは、locateコマンドの構文は次のとおりです
$ locate ... ...
システム上の特定の設定ファイルを探している場合、それを見つける簡単な方法は、locateコマンドにその完全なファイル名を提供することです。
$ locate updatedb.conf
ご覧のとおり、locateコマンドは私が探しているファイルへの完全なパスを返しています。,
制限されたディレクトリ内のファイルを探します
システム上の一部のディレクトリにアクセスできない場合があります。
結果として、あなたはそれにあるファイルを見つけることができません。
“restricted-file”という名前のファイルを含む禁止されたフォルダの例を見てみましょう。
制限されたディレクトリにあるファイルを見つけるには、sudo権限でlocateコマンドを実行する必要があります。,
$ sudo locate restricted-file
パターンを使用してファイルを検索
locateコマンドを使用すると、グロブ文字の形で”パターン”を指定できます。
グロビング文字は、ワイルドカードとも呼ばれ、一つまたは複数のエントリを簡略化された式と一致させるために使用される文字です。
最も人気のあるものは、noneを含む任意の文字に一致する”*”です。
ここでは、文字とその機能をグロブ化するための要約テーブルです。,6934f1″>
ab
cab
runlevel
runlevel1, runlevel2, runlevel6
As an example, here’s a way to locate all text files on your system.,
$ locate *.txt
正規表現を使用してファイルを検索
locateの公式マニュアルページに記載されているように、locateコマンドは入力としてパターンを受け入れます。
locateコマンドに正規表現を指定できることを意味します。正規表現を指定したファイルを検索および検索するには、locateコマンドに–regexオプションを使用します。,
$ locate --regex <regex>
たとえば、ランレベルの後に数字が続くすべてのファイルを分離するには、次のコマンドを実行します。
$ locate --regex runlevel+
正規表現を使用する場合、ファイルを見つけるときに注意する必要がある重要な点が一つあります。
locateコマンドは、ローカルデータベース内のファイルへのパスを探しています。,
その結果、ファイルを検索するときは、正規表現がファイル名だけではなくファイルへのパスと一致する必要があることに注意してください。
たとえば、”run”で始まるファイルを探すと、ファイルへのパスが”/usr”で始まるため、結果は返されません。
大文字と小文字を区別しないオプションを使用してファイルを検索します
ファイルシステム上のファイルを検索するとき、指定されたファイルの名前がわからない場合があります。,
それは大文字か小文字で書かれていましたか? それには大文字が含まれていますか?
大文字と小文字を区別しないオプションを使用してファイルを検索および検索するには、locateコマンドに-iオプションを追加します。,
$ locate -i <file_pattern>
grepを使用してコンテンツでファイルを検索
場合によっては、ファイル内にある特定の単語に一致するファイルを検索することに興味があるかもしれません。
これは、特定のログイベントを含むファイルを見つけようとしている場合などに発生する可能性があります。,
特定の単語に一致するファイルを検索する最初の方法は、grepコマンドを使用することです
$ grep -r <pattern> <path>
注:ディレクトリ全体でファイルを検索する場合は、”-r”オプションを忘れないでください。
たとえば。, ホームディレクトリにあるコンテンツに”エラー”があるすべてのファイルを検索する場合は、
$ grep -r error /home/user
場合によっては、正規表現を指定したファイルを見つけることができます。
正規表現を使用してファイルを検索するには、”-E”オプションを使用します。,
$ grep -r -E <expression> <path>
たとえば、ファイルのいずれかで’abc’パターンに一致するファイルを見つけたいとします。
$ grep -r -E "abc.*" --color /home/user
注:colorオプションは、grepコマンドを使用して一致を強調表示するために使用されます。,
whichを使用してファイルを見つける
Linux上でファイルを見つけるもう一つの素晴らしい方法は、whichコマンドを使用することです。
whichコマンドは、特定のコマンドに関連付けられているファイルを検索するために使用されます。
これは、コマンドのバイナリをどこに保存したのかわからない場合や、コマンドをパスに追加するためにコマンドを見つける必要がある場合に,
$ which <command>
たとえば、”ls”コマンドに関連付けられたファイルを検索するには、
$ which ls/usr/bin/ls
ご覧のとおり、ファイルへの完全なパスが与えられます。
whereisを使用してバイナリを検索します
同様に、whereisコマンドを使用してファイルを検索することは完全に可能です。
“whereis”コマンドは、”which”コマンドのスーパーセットと見なすことができます。”whereis”は、コマンドの名前、ファイルの場所、マニュアルページの場所に関する情報を提供します。,
whereisを実行するには、単に”whereis”と入力し、コマンドの名前を追加します。
$ whereis lsls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
かなり便利です!
結論
今日のチュートリアルでは、二つの重要なコマンドを使用してLinux上でファイルを見つけて見つける方法を学びました:locateとfind。
オプションが個別に提示された場合でも、探しているファイルをさらに指定できるようにするために組み合わせることができることを覚えて
いつものように、Linuxシステム管理に興味がある場合は、当社のウェブサイトにLinux専用の完全なセクションがあります。,
As always, here is a short video on the subject in case you prefer Youtube videos.