GNU/Linux >> Linux の 問題 >  >> Linux

Linuxでのコマンドの検索(ファイルとディレクトリの検索)

find コマンドは、Linuxシステム管理者の武器の中で最も強力なツールの1つです。ユーザーが指定した式に基づいてディレクトリ階層内のファイルとディレクトリを検索し、一致した各ファイルに対してユーザー指定のアクションを実行できます。

findを使用できます 権限、タイプ、日付、所有権、サイズなどに基づいてファイルとディレクトリを検索するコマンド。 grepなどの他のツールと組み合わせることもできます またはsed

find コマンド構文#

findの一般的な構文 コマンドは次のとおりです:

find [options] [path...] [expression]
  • options 属性は、シンボリックリンク、デバッグオプション、および最適化方法の処理を制御します。
  • path... 属性は、findがファイルを検索する開始ディレクトリを定義します。
  • expression 属性は、オプション、検索パターン、および演算子で区切られたアクションで構成されています。

ディレクトリ内のファイルを検索するには、ユーザーがfindを呼び出します。 コマンドには、そのディレクトリに対する読み取り権限が必要です。

次の例を見てみましょう:

find -L /var/www -name "*.js"
  • オプション-L (オプション)findに通知します シンボリックリンクをたどるコマンド。
  • /var/www (パス…)検索するディレクトリを指定します。
  • (式)-name "*.js findに通知します .jsで終わるファイルを検索するには (JavaScriptファイル)。
名前でファイルを検索#

名前でファイルを検索することは、おそらくfindの最も一般的な使用法です。 指図。名前でファイルを検索するには、-nameを使用します オプションの後に検索するファイルの名前が続きます。

たとえば、document.pdfという名前のファイルを検索するには /home/linuxizeにあります ディレクトリの場合、次のコマンドを使用します:

find /home/linuxize -type f -name document.pdf

大文字と小文字を区別しない検索を実行するには、-nameを変更します -inameのオプション :

find /home/linuxize -type f -iname document.pdf

上記のコマンドは、「Document.pdf」、「DOCUMENT.pdf」などと一致します。

拡張子でファイルを検索#

拡張子でファイルを検索することは、名前でファイルを検索することと同じです。たとえば、.log.gzで終わるすべてのファイルを検索するには /var/log/nginx内 ディレクトリには、次のように入力します。

find /var/log/nginx -type f -name '*.log.gz'

パターンを引用するか、アスタリスク*をエスケープする必要があることに注意してください。 バックスラッシュ付きの記号\ ワイルドカード文字を使用したときにシェルによって解釈されないようにします。

正規表現*.log.gzと一致しないすべてのファイルを検索するには -notを使用できます オプション。たとえば、*.log.gzで終わらないすべてのファイルを検索するには 使用するもの:

find /var/log/nginx -type f -not -name '*.log.gz'
タイプ番号でファイルを検索

通常のファイル、ディレクトリ、シンボリックリンクなどの特定のファイルタイプを検索する必要がある場合があります。 Linuxでは、すべてがファイルです。

タイプに基づいてファイルを検索するには、-typeを使用します オプションと、ファイルタイプを指定する次の記述子のいずれか:

  • f :通常のファイル
  • d :ディレクトリ
  • l :シンボリックリンク
  • c :キャラクターデバイス
  • b :デバイスをブロックする
  • p :名前付きパイプ(FIFO)
  • s :ソケット

たとえば、現在の作業ディレクトリ内のすべてのディレクトリを検索するには、次を使用します。

find . -type d

一般的な例は、Webサイトのファイル権限を644に再帰的に変更することです。 755へのディレクトリ権限 chmodを使用する コマンド:

find /var/www/my_website -type d -exec chmod 0755 {} \;find /var/www/my_website -type f -exec chmod 0644 {} \;
サイズでファイルを検索#

ファイルサイズに基づいてファイルを検索するには、-sizeを渡します サイズ基準とともにパラメータ。次のサフィックスを使用して、ファイルサイズを指定できます。

  • b :512バイトブロック(デフォルト)
  • c :バイト
  • w :2バイトの単語
  • k :キロバイト
  • M :メガバイト
  • G :ギガバイト

次のコマンドは、正確に1024のすべてのファイルを検索します /tmp内のバイト ディレクトリ:

find /tmp -type f -size 1024c

find このコマンドを使用すると、指定したサイズより大きいまたは小さいファイルを検索することもできます。

次の例では、1MB未満のすべてのファイルを検索します 現在の作業ディレクトリ内。マイナスの-に注意してください サイズ値の前の記号:

find . -type f -size -1M

1MBより大きいサイズのファイルを検索する場合 、次にプラスの+を使用する必要があります 記号:

find . -type f -size +1M

サイズ範囲内のファイルを検索することもできます。次のコマンドは、1の間のすべてのファイルを検索します および2MB

find . -type f -size +1M -size 21M
変更日でファイルを検索#

find コマンドは、最後の変更、アクセス、または変更時刻に基づいてファイルを検索することもできます。

サイズで検索する場合と同じように、「より大きい」または「より小さい」にはプラス記号とマイナス記号を使用します。

数日前に、dovecot構成ファイルの1つを変更したが、どれを忘れたかを考えてみましょう。 /etc/dovecot/conf.dの下にあるすべてのファイルを簡単にフィルタリングできます .confで終わるディレクトリ 過去5日間に変更されました:

find /etc/dovecot/conf.d -name "*.conf" -mtime 5

-daystartを使用して変更日に基づいてファイルをフィルタリングする別の例を次に示します。 オプション。以下のコマンドは、/home内のすべてのファイルを一覧表示します 変更されたディレクトリ30 以上:

find /home -mtime +30 -daystart

パーミッションでファイルを検索#

-perm オプションを使用すると、ファイルのアクセス許可に基づいてファイルを検索できます。

たとえば、正確に775の権限を持つすべてのファイルを検索するには /var/www/html内 ディレクトリの場合、次を使用します:

find /var/www/html -perm 644

数値モードの前にマイナス-を付けることができます またはスラッシュ/

/をスラッシュする場合 プレフィックスとしてが使用される場合、少なくとも1つのカテゴリ(ユーザー、グループ、またはその他)で、ファイルが一致するように少なくともそれぞれのビットが設定されている必要があります。

次のコマンド例について考えてみます。

find . -perm /444

上記のコマンドは、ユーザー、グループ、またはその他のいずれかに設定された読み取り権限を持つすべてのファイルを照合します。

マイナスの場合- プレフィックスとして使用され、ファイルが一致するためには、少なくとも指定されたビットが設定されている必要があります。次のコマンドは、所有者とグループの読み取りおよび書き込み権限があり、他のユーザーが読み取り可能なファイルを検索します。

find . -perm -664
所有者によるファイルの検索#

特定のユーザーまたはグループが所有するファイルを検索するには、-userを使用します および-group オプション。

たとえば、ユーザーlinuxizeが所有するすべてのファイルとディレクトリを検索するには 、実行します:

find / -user linuxize

これが実際の例です。ユーザーwww-dataが所有するすべてのファイルを検索するとします。 一致したファイルの所有権をwww-dataから変更します nginxへ :

find / -user www-data -type f  -exec chown nginx {} \;

ファイルの検索と削除#

一致するすべてのファイルを削除するには、-deleteを追加します 一致式の最後にオプションを追加します。

結果が削除するファイルと一致することが確実な場合にのみ、このオプションを使用していることを確認してください。 -deleteを使用する前に、一致したファイルを印刷することをお勧めします。 オプション。

たとえば、.tempで終わるすべてのファイルを削除するには /var/log/から 、次を使用します:

find /var/log/ -name `*.temp` -delete
-deleteを使用します 細心の注意を払ってオプション。 find コマンドは式として評価され、-deleteを追加すると オプションを最初に指定すると、コマンドは指定した開始点より下のすべてを削除します。

ディレクトリに関しては、find rmdirと同じように、空のディレクトリのみを削除できます 。

結論#

findの使用方法を説明しました さまざまなオプションと基準を備えたコマンド。

この記事では、Linuxシステムでファイルを見つける方法の基本を理解する必要があります。 findにアクセスすることもできます マンページとfindの他のすべての強力なオプションについて読む コマンド。

ご質問やご意見がございましたら、下にコメントを残してください。


Linux
  1. Linuxでファイルとディレクトリをコピーする

  2. Linux ファイルとディレクトリの削除

  3. Linux で空のディレクトリとファイルを見つけて削除する方法

  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. Linuxでトップディレクトリとファイル(ディスク容量)を見つける方法

  3. プロのようにLinuxでファイルとディレクトリを探す

  1. Linuxを使用してディレクトリとファイルを削除する方法

  2. Linuxでコマンドラインからファイルとディレクトリを削除する方法

  3. Linuxで最大のファイルとディレクトリを探す