目次:
- Linuxの
find
コマンド構文 - 名前でファイルを検索
- 拡張子でファイルを検索
- タイプ別にファイルを検索
- サイズでファイルを検索
- 変更日によるファイルの検索
- 権限でファイルを検索
- 所有者によるファイルの検索
- ファイルの検索と削除
- 結論
find
コマンドは、Linuxシステム管理者の武器の中で最も強力なツールの1つです。 ユーザー指定の式に基づいてディレクトリ階層内のファイルとディレクトリを検索し、一致した各ファイルに対してユーザー指定のアクションを実行できます。
find
コマンドを使用して、アクセス許可、種類、日付、所有権、サイズなどに基づいてファイルとディレクトリを検索できます。
grep
や
sed
などの他のツールと組み合わせて使用することもできます。
Linuxの
find
コマンド構文
find
コマンドの一般的な構文は次のとおりです。
find
-
options
属性は、シンボリックリンク、デバッグオプション、および最適化方法の処理を制御します。pathpath…
属性は、findがファイルを検索する開始ディレクトリを定義します。expression属性は、オプション、検索パターン、および演算子で区切られたアクション。
ディレクトリ内のファイルを検索するには、
find
コマンドを呼び出すユーザーがそのディレクトリの読み取り権限を持っている必要があります。
次の例を見てみましょう。
find -L /var/www -name "*.js"
- オプション
-L
(オプション)は、シンボリックリンクをたどるようにfind
コマンドに指示します。/var/www(パス…)は、検索されるディレクトリを指定します。(式)-name "*.js
は、.js
(JavaScriptファイル)。
名前でファイルを検索
名前によるファイルの
find
は、おそらく
find
コマンドの最も一般的な使用方法です。 使用する名前でファイルを見つけるには、検索するファイルの名前の後に
-name
オプションを付けます。
たとえば、
/home/linuxize
ディレクトリで
document.pdf
という名前のファイルを検索するには、次のコマンドを使用します。
find /home/linuxize -type f -name document.pdf
大文字と小文字を区別しない検索を実行するには、
-name
オプションを
-iname
で変更します。
find /home/linuxize -type f -iname document.pdf
上記のコマンドは、「Document.pdf」、「DOCUMENT.pdf」などに一致します。
拡張子でファイルを検索
拡張子によるファイルの検索は、名前によるファイルの検索と同じです。 たとえば、
/var/log/nginx
ディレクトリ内で
.log.gz
終わるすべてのファイルを検索するには、次を使用できます。
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
一般的な例は、
chmod
コマンドを使用して、Webサイトのファイル許可を
644
、ディレクトリ許可を
755
に再帰的に変更することです。
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
:ギガバイト
次のコマンドは、
/tmp
ディレクトリ内で正確に
1024
バイトのすべてのファイルを検索します。
find /tmp -type f -size 1024c
find
コマンドを使用すると、指定したサイズよりも大きいまたは小さいファイルを検索することもできます。
次の例では、現在の作業ディレクトリ内で
1MB
未満のすべてのファイルを検索しています。 サイズ値の前のマイナス記号に注意してください。
find. -type f -size -1M
find. -type f -size +1M
サイズ範囲内のファイルを検索することもできます。 次のコマンドは、
2MB
すべてのファイルを検索します。
find. -type f -size +1M -size 21M
変更日によるファイルの検索
find
コマンドは、最後の変更、アクセス、または変更時間に基づいてファイルを検索することもできます。
サイズで検索する場合と同じように、「より大きい」または「より小さい」にプラス記号とマイナス記号を使用します。
数日前に、dovecot設定ファイルの1つを変更したが、どれを忘れたとしましょう。
/etc/dovecot/conf.d
で終わり、過去5日間に変更された
/etc/dovecot/conf.d
ディレクトリの下のすべてのファイルを簡単にフィルタリングできます。
find /etc/dovecot/conf.d -name "*.conf" -mtime 5
-daystart
オプションを使用して、変更日に基づいてファイルをフィルタリングする別の例を次に
-daystart
ます。 以下のコマンドは、
30
以上前に変更された
/home
ディレクトリ内のすべてのファイルをリストします。
find /home -mtime +30 -daystart
権限でファイルを検索
-perm
オプションを使用すると、ファイルの許可に基づいてファイルを検索できます。
たとえば、
/var/www/html
ディレクトリ内で正確に
775
アクセス許可を持つすべてのファイルを検索するには、次を使用します。
find /var/www/html -perm 644
数値モードの前にマイナス記号またはスラッシュ
/
を付けることができます。
スラッシュ
/
プレフィックスとして使用する場合、少なくとも1つのカテゴリ(ユーザー、グループ、またはその他)には、一致するファイルに対して少なくともそれぞれのビットが設定されている必要があります。
次のコマンド例を検討してください。
find. -perm /444
上記のコマンドは、ユーザー、グループ、またはその他のいずれかに設定された読み取り許可を持つすべてのファイルに一致します。
マイナス
-
がプレフィックスとして使用される場合、ファイルが少なくとも指定されたビットと一致するように設定する必要があります。 次のコマンドは、所有者とグループの読み取りおよび書き込み権限があり、他のユーザーが読み取り可能なファイルを検索します。
所有者によるファイルの検索
特定のユーザーまたはグループが所有するファイルを検索するには、
-user
および
-group
オプションを使用します。
たとえば、ユーザー
linuxize
が所有するすべてのファイルとディレクトリを検索するには、次を実行します。
find / -user linuxize
これが実際の例です。 ユーザー
www-data
が所有するすべてのファイルを検索し、一致したファイルの所有権を
www-data
から
nginx
変更するとします。
find / -user www-data -type f -exec chown nginx {} ;
ファイルの検索と削除
一致するすべてのファイルを削除するには、一致式の最後に
-delete
オプションを追加します。
結果が削除するファイルと一致すると確信できる場合にのみ、このオプションを使用していることを確認してください。
-delete
オプションを使用する前に、一致したファイルを印刷することを常にお勧めします。
たとえば、
/var/log/
から
.temp
終わるすべてのファイルを削除するには、次を使用します。
find /var/log/ -name `*.temp` -delete
-delete
オプションの使用には細心の注意を払ってください。 findコマンドラインは式として評価され、最初に
-delete
オプションを追加すると、コマンドは指定した開始点より下のすべてを削除します。
ディレクトリに関しては、
find
は
rmdir
と同じ空のディレクトリのみを削除でき
rmdir
。
結論
find
コマンドをさまざまなオプションと基準とともに使用する方法を示しました。
この記事では、Linuxシステム上のファイルを見つける方法の基本を理解する必要があります。 また、
find
manページにアクセスして、
find
コマンドの他のすべての強力なオプションについて読むことも
find
。