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

Linuxのfindコマンドの25の簡単な例

Linuxの検索コマンド

Linuxのfindコマンド コマンドラインからファイルを検索するための非常に便利で便利なコマンドです。権限、ユーザー所有権、変更日時、サイズなどのさまざまな検索条件に基づいてファイルを検索するために使用できます。この投稿では、findコマンドとそれがサポートするさまざまなオプションの使用方法を学習します。

findコマンドは、ほとんどのLinuxディストリビューションでデフォルトで使用できるため、パッケージをインストールする必要はありません。 Linuxのコマンドラインで非常に生産性を高めたい場合は、findコマンドを学ぶことが不可欠です。

findコマンドの基本的な構文は次のようになります

$ find location comparison-criteria search-term

1。現在のディレクトリとサブディレクトリにあるすべてのファイルを一覧表示する

このコマンドは、現在のディレクトリ内のすべてのファイルと、現在のディレクトリ内のサブディレクトリを一覧表示します。

$ find
.
./abc.txt
./subdir
./subdir/how.php
./cool.php

コマンドは次と同じです

$ find .
$ find . -print

2。特定のディレクトリまたはパスを検索する

次のコマンドは、現在のディレクトリのテストディレクトリでファイルを検索します。デフォルトですべてのファイルを一覧表示します。

$ find ./test
./test
./test/abc.txt
./test/subdir
./test/subdir/how.php
./test/cool.php

次のコマンドは、ファイルを名前で検索します。

$ find ./test -name "abc.txt"
./test/abc.txt

ワイルドカードも使用できます

$ find ./test -name "*.php"
./test/subdir/how.php
./test/cool.php

すべてのサブディレクトリが再帰的に検索されることに注意してください。したがって、これは特定の拡張子のすべてのファイルを見つけるための非常に強力な方法です。

ルートである「/」ディレクトリを検索しようとすると、マウントされたデバイスとネットワークストレージデバイスを含むファイルシステム全体が検索されます。ので注意してください。もちろん、いつでもCtrl+cを押してコマンドを停止できます。

When specifying the directory ("./test" in this example), its fine to omit the trailing slash. However, if the directory is actually a symlink to some other location then you MUST specify the trailing slash for it to work properly (find ./test/ ...)

ケースを無視する

ファイル名を検索するときは、大文字と小文字を区別しないと便利なことがよくあります。大文字と小文字を区別しない場合は、「name」オプションの代わりに「iname」オプションを使用してください。

$ find ./test -iname "*.Php"
./test/subdir/how.php
./test/cool.php
Its always better to wrap the search term (name parameter) in double or single quotes. Not doing so will seem to work sometimes and give strange results at other times.

3。ディレクトリトラバーサルの深さを制限する

デフォルトでは、findコマンドはディレクトリツリー全体を再帰的に移動します。これは時間とリソースを消費します。ただし、ディレクトリトラベサルの深さは指定できます。たとえば、サブディレクトリを2レベルまたは3レベル以上下げたくありません。これは、maxdepthオプションを使用して行われます。

$ find ./test -maxdepth 2 -name "*.php"
./test/subdir/how.php
./test/cool.php
$ find ./test -maxdepth 1 -name *.php
./test/cool.php

2番目の例では、maxdepth 1を使用しています。これは、現在のディレクトリでのみ、深さが1レベルを下回らないことを意味します。

これは、現在のディレクトリまたは最大1レベルのディープサブディレクトリでのみ限定検索を実行し、ディレクトリツリー全体ではなく、より時間がかかる場合に非常に役立ちます。

maxdepthと同様に、mindepthと呼ばれるオプションがあり、名前が示すとおりに機能します。つまり、ファイルを検索する前に、少なくともNレベルの深さになります。

4。一致を反転

特定の名前またはパターンに一致しないファイルを検索することもできます。これは、検索から除外するファイルがわかっている場合に役立ちます。

$ find ./test -not -name "*.php"
./test
./test/abc.txt
./test/subdir

したがって、上記の例では、phpの拡張子を持たないすべてのファイル(非phpファイル)が見つかりました。 findコマンドは、notの代わりに感嘆符もサポートします。

find ./test ! -name "*.php"

5。複数の検索条件を組み合わせる

名前を指定して反転するときに、複数の基準を使用することができます。例

$ find ./test -name 'abc*' ! -name '*.php'
./test/abc.txt
./test/abc

上記のfindコマンドは、名前がabcで始まり、php拡張子を持たないファイルを検索します。これは、findコマンドを使用して強力な検索式を作成する方法の例です。

OR演算子

複数の名前基準を使用する場合、findコマンドはそれらをAND演算子と組み合わせます。これは、すべての基準を満たすファイルのみが一致することを意味します。ただし、ORベースのマッチングを実行する必要がある場合は、findコマンドに「o」スイッチがあります。

$ find -name '*.php' -o -name '*.txt'
./abc.txt
./subdir/how.php
./abc.php
./cool.php

上記のコマンドは、php拡張子またはtxt拡張子のいずれかで終わるファイルを検索します。

6。ファイルのみまたはディレクトリのみを検索

特定の名前のファイルのみまたはディレクトリのみを検索したい場合があります。 Findもこれを簡単に行うことができます。

$ find ./test -name abc*
./test/abc.txt
./test/abc
Only files
$ find ./test -type f -name "abc*"
./test/abc.txt
Only directories
$ find ./test -type d -name "abc*"
./test/abc

とても便利で便利です!

7。複数のディレクトリを一緒に検索

したがって、2つの別々のディレクトリ内を検索するとします。繰り返しますが、コマンドは非常に単純です

$ find ./test ./dir2 -type f -name "abc*"
./test/abc.txt
./dir2/abcdefg.txt

2つの別々のディレクトリからのファイルがリストされていることを確認してください。

8。隠しファイルを探す

Linuxの隠しファイルは、ピリオドで始まります。そのため、名前の基準でそのことを簡単に説明し、すべての隠しファイルを一覧表示します。

$ find ~ -type f -name ".*"

9。特定の権限を持つファイルを検索する

findコマンドを使用すると、「perm」オプションを使用して特定の権限を持つファイルを検索できます。次のコマンドは、権限0664

を持つファイルを検索します
$ find . -type f -perm 0664
./abc.txt
./subdir/how.php
./abc.php
./cool.php

これは、セキュリティの問題につながる可能性のある間違った権限を持つファイルを見つけるのに役立ちます。反転は、権限チェックにも適用できます。

$ find . -type f ! -perm 0777
./abc.txt
./subdir/how.php
./abc.php
./cool.php

10。 sgid/suidビットが設定されているファイルを検索する

findコマンドの「perm」オプションは、chmodのような同じモード文字列を受け入れます。次のコマンドは、権限644とsgidビットが設定されているすべてのファイルを検索します。

# find / -perm 2644

同様に、スティッキービットには1664を使用します。 permオプションは、8進数の代わりに代替構文を使用することもサポートしています。

$ find / -maxdepth 2 -perm /u=s 2>/dev/null
/bin/mount
/bin/su
/bin/ping6
/bin/fusermount
/bin/ping
/bin/umount
/sbin/mount.ecryptfs_private

「2>/dev / null」は、「PermissionDenied」のエラーがあるエントリを削除することに注意してください

11。読み取り専用ファイルを検索する

すべての読み取り専用ファイルを検索します。

$ find /etc -maxdepth 1 -perm /u=r
/etc
/etc/thunderbird
/etc/brltty
/etc/dkms
/etc/phpmyadmin
... output truncated ...

12。実行可能ファイルを検索する

次のコマンドは実行可能ファイルを検索します

$ find /bin -maxdepth 2 -perm /a=x
/bin
/bin/preseed_command
/bin/mount
/bin/zfgrep
/bin/tempfile
... output truncated ...

13。特定のユーザーが所有するファイルを検索する

所有者ルートの/rootディレクトリの下にあるtecmint.txtという名前のすべてまたは単一のファイルを検索します。

$ find . -user bob
.
./abc.txt
./abc
./subdir
./subdir/how.php
./abc.php

ファイルの名前または名前に関連する基準をユーザー基準とともに指定することもできます

$ find . -user bob -name '*.php'

非常にわかりやすく、一致するファイルの検索を絞り込むために、基準の後に基準を構築する方法を説明します。

14。グループに属するファイルを検索する

特定のグループに属するすべてのファイルを検索します。

# find /var/www -group developer

〜記号を使用してホームディレクトリを検索できることをご存知ですか?

$ find ~ -name "hidden.php"

簡単!!

変更日時に基づいてファイルとディレクトリを検索

findコマンドがサポートするもう1つの優れた検索条件は、変更とアクセスされた日時です。これは、特定の時間または日付範囲として変更されたファイルを確認する場合に非常に便利です。いくつか例を見てみましょう

15。 N日前に変更されたファイルを検索

50日前に変更されたすべてのファイルを検索します。

# find / -mtime 50

16。過去N日間にアクセスされたファイルを検索する

過去50日間にアクセスされたすべてのファイルを検索します。

# find / -atime 50

17。ある範囲の日数で変更されたファイルを検索する

50〜100日前に変更されたすべてのファイルを検索します。

# find / -mtime +50 –mtime -100

18。過去N分間に変更されたファイルを検索します。

過去1時間以内に変更されたファイルを検索します。

$ find /home/bob -cmin -60

19。過去1時間に変更されたファイル

過去1時間に変更されたすべてのファイルを検索します。

# find / -mmin -60

20。過去1時間にアクセスされたファイルを検索

過去1時間にアクセスされたすべてのファイルを検索します。

# find / -amin -60

21。指定されたサイズのファイルを検索する

サイズに基づいてファイルとディレクトリを検索します。 50 MBのファイルをすべて検索するには、を使用します。

# find / -size 50M

22。サイズ範囲のファイルを検索する

50MBより大きく100MB未満のすべてのファイルを検索します。

$ find / -size +50M -size -100M

23。最大および最小のファイルを検索

findコマンドをlsおよびsortコマンドと組み合わせて使用​​すると、最大のファイルを一覧表示できます。
次のコマンドは、現在のディレクトリとそのサブディレクトリにある最大の5つのファイルを表示します。コマンドが処理する必要のあるファイルの総数によっては、実行に時間がかかる場合があります。

$ find . -type f -exec ls -s {} \; | sort -n -r | head -5

同様に、昇順で並べ替えると、最小のファイルが最初に表示されます

$ find . -type f -exec ls -s {} \; | sort -n | head -5

24。空のファイルとディレクトリを検索する

次のコマンドは、findコマンドの「empty」オプションを使用して、空のすべてのファイルを検索します。

# find /tmp -type f -empty

空のディレクトリをすべてファイルするには、「d」タイプを使用します。

$ find ~/ -type d -empty

本当にとてもシンプルで簡単

いくつかの高度な操作

findコマンドは、特定の基準に基づいてファイルを検索するだけでなく、任意のLinuxコマンドを使用してそれらのファイルに作用することもできます。たとえば、一部のファイルを削除したい場合があります。

ここにいくつかの簡単な例があります

25。見つかったファイルを一覧表示します

findコマンドを使用してファイルを見つけ、lsコマンドと同じようにそれらをリストしたいとします。これはとても簡単です。

$ find . -exec ls -ld {} \;
drwxrwxr-x 4 enlightened enlightened 4096 Aug 11 19:01 .
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./abc.txt
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:48 ./abc
drwxrwxr-x 2 enlightened enlightened 4096 Aug 11 16:26 ./subdir
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:26 ./subdir/how.php
-rw-rw-r-- 1 enlightened enlightened 29 Aug 11 19:13 ./abc.php
-rw-rw-r-- 1 enlightened enlightened 0 Aug 11 16:25 ./cool.php

26。一致するすべてのファイルまたはディレクトリを削除します

次のコマンドは、tmpディレクトリ内のすべてのテキストファイルを削除します。

$ find /tmp -type f -name "*.txt" -exec rm -f {} \;

同じ操作をディレクトリで実行できます。タイプfの代わりにタイプdを入力するだけです。

100MBを超えるファイルを削除する別の例を見てみましょう

$ find /home/bob/dir -type f -name *.log -size +10M -exec rm -f {} \;

概要

これは、linuxfindコマンドの簡単なチュートリアルでした。 。 findコマンドは、Linuxターミナルで最も重要なコマンドの1つであり、ファイルの検索を非常に簡単に行うことができます。それはすべてのシステム管理者の必需品です。だからそれを学びなさい。何か質問がある ?以下にコメントを残してください。


Linux
  1. Linux での sa コマンドの例

  2. Linux での ac コマンドの例

  3. Linux での df コマンドの例

  1. 25Linuxでの便利なfindコマンドの実用例

  2. 7 Linux df コマンドの例

  3. Linux での du コマンドの例

  1. 8 Linux TR コマンドの例

  2. Linux での rm コマンドの例

  3. Linux での find コマンドの例