ホームページ  >  記事  >  php教程  >  Linuxのsearchコマンドとfindコマンドを詳しく解説

Linuxのsearchコマンドとfindコマンドを詳しく解説

高洛峰
高洛峰オリジナル
2016-12-14 17:13:241508ブラウズ

1. ファイル検索用のlocateコマンド

locate:
非リアルタイム、検索はシステムファイルデータベース全体に基づいており、あいまい検索、
更新はファイルデータベースを手動で生成します
高速

更新されたデータベースに依存します

#手动更新locate数据库
[root@lovelace scripts]# updatedb
#使用locate查找文件 (速度好快的说)
[root@lovelace scripts]# locate *.py
/home/scripts/factorial.py
/home/scripts/input.py
/usr/lib/python2.4/fileinput.py
/usr/lib/python2.4/fileinput.pyc
/usr/lib/python2.4/fileinput.pyo
/usr/lib/python2.4/site-packages/dogtail/rawinput.py
/usr/lib/python2.4/site-packages/dogtail/rawinput.pyc
/usr/lib/python2.4/site-packages/dogtail/rawinput.pyo
/usr/lib/python2.4/test/pyclbr_input.py
/usr/lib/python2.4/test/pyclbr_input.pyc
/usr/lib/python2.4/test/pyclbr_input.pyo
/usr/lib/python2.4/test/test_fileinput.py
/usr/lib/python2.4/test/test_fileinput.pyc
/usr/lib/python2.4/test/test_fileinput.pyo

2. ファイル検索の Find コマンド

find:
リアルタイム
正確
多くの検索ルールをサポート
指定されたディレクトリ内のすべてのファイルを走査して検索を完了します、低速

find 検索パス 検索条件 後の処理操作検索
検索パス: デフォルトは現在のディレクトリです
検索条件: デフォルトは指定されたパスの下にあるすべてのファイルです
検索後の処理操作: デフォルトは表示です

一致条件:
-name 'filename': ファイル名と完全に一致します
ファイル名ワイルドカード:
* 任意の長さの文字
?任意の 1 文字
[] オプション内の文字
-iname 'filename': ファイル名照合では大文字と小文字が区別されません
-regex pattern 正規表現に基づいてファイル名を照合します

-user username : 所有者に基づいて検索
- group groupname : グループに従って検索

-gid gid: gid に従って検索
-uid uid:: udi に従って検索

-nouser 所有者のないファイルを検索
-nogroup グループのないファイル

例: find /tmp -nouser

[root@lovelace scripts]# find /tmp -name test
/tmp/sources/httpd-2.2.17/srclib/apr-util/test
/tmp/sources/httpd-2.2.17/srclib/apr/test
/tmp/sources/httpd-2.2.17/modules/test
/tmp/sources/httpd-2.2.17/test
/tmp/test

ファイルタイプで探す

-type
f:通常ファイル
d:ディレクトリ
c:キャラクター
b:ブロックデバイス
l:リンク
p:パイプ
s:ソケット

example :find /etc -type d

#查找/tmp目录下名字为test 而且文件格式为目录的
[root@lovelace scripts]# find /tmp -type d -a -name test
/tmp/sources/httpd-2.2.17/srclib/apr-util/test
/tmp/sources/httpd-2.2.17/srclib/apr/test
/tmp/sources/httpd-2.2.17/modules/test
/tmp/sources/httpd-2.2.17/test
/tmp/test

ファイルサイズに応じて検索

-size
[+|-]#k +と-がない場合は完全一致を意味します
[+|-]#m
[+|-]# G

例:find /tmp -size +10M /etc ディレクトリで 10M を超えるファイルを検索します

組み合わせ条件: これにはモルガンの法則を理解する必要があります
-a: および Default
-o: または
-not: non
example :find /tmp -not -user user1 -o -not -type d

#查找/tmp目录下文件格式为目录,而且大小在26k到32k之间的目录
[root@lovelace scripts]# find /tmp -type d -a -size +16k -a -size -32k
/tmp/sources/httpd-2.2.17/docs/manual/mod
/tmp/sources/php-5.2.13/ext/reflection/tests
/tmp/sources/php-5.2.13/ext/date/tests
/tmp/sources/php-5.2.13/ext/spl/tests
/tmp/sources/php-5.2.13/tests/classes
/tmp/sources/php-5.2.13/Zend/tests

ファイルのタイムスタンプに基づいて検索します:
日数:

変更時間: -mtime
修正時間: -ctime
表示時間: -atime
[+| -]# デフォルトのタイムスタンプは 5 日です
-5: 5 日以内に訪問されました
+5: 少なくとも 5 日間訪問されていません
5: ちょうど 5 日前に訪問されました

分単位:
-mmin:
-cmin:
-amin:

find /tmp -amin –5 5分以内にアクセスされたファイル

長期間アクセスがなく、ファイルサイズが一定以上の場合は削除操作
find /tmp -atime +30 -a –size +100M -exec 'rm -rf *' ;

#查找home目录下至少5天没被访问过的文件
[root@lovelace scripts]# find /home/ -ctime -5
/home/scripts
/home/scripts/list
/home/scripts/for
/home/scripts/for/dir.sh
/home/scripts/for/three.sh
/home/scripts/for/checkbash.sh
/home/scripts/for/sorsum.sh
/home/scripts/while
/home/scripts/while/readpasswd.sh
/home/scripts/while/catwhile.sh
/home/scripts/case
/home/scripts/case/showmenu.sh
/home/scripts/case/showmenu
/home/scripts/case/2showmenu.sh
/home/scripts/if
/home/scripts/if/grade.sh
/home/scripts/51cto
/home/scripts/51cto/info.tt
/home/scripts/51cto/info.sh
/home/scripts/51cto/1.sh
/home/scripts/51cto/argument.sh
/home/scripts/51cto/sum.sh

権限に基づいて検索:
-perm モード: 完全一致
-perm -mode: すべての権限が必要です 完全一致:このモードを完全に含むファイル権限は、すべて標準
-perm /mode に準拠しています: 9 つの権限のいずれか 1 つが条件を満たします

例: find /tmp -perm –001 他のユーザーが書き込み権限を持っているファイルを検索します


find アクション:
-print デフォルト
-ls: ls -l に似た形式でファイルのすべての情報を表示します

-ok コマンド {} ; 毎回クエリ操作を実行し、ユーザーの確認が必要です
- exec コマンド {} ; 起動して操作を要求することはありません
元の名前を引用し、{} を使用します

例: find /tmp -perm -020 -exec mv {} {}.new ;

#找出home中大小为16k到32k之间的文件,然后传递给exec 并显示出来
[root@lovelace scripts]# find /home/ -size +16k -a -size -32k -exec ls -lh {} \;
-rw-r--r-- 1 root root 20K 05-03 03:04 /home/nick/etc/gconf/gconf.xml.defaults/%gconf-tree-li.xml
-rw-r--r-- 1 root root 20K 05-03 03:04 /home/nick/etc/gconf/gconf.xml.defaults/%gconf-tree-ug.xml
-rw-r--r-- 1 root root 25K 05-03 03:04 /home/nick/etc/gconf/schemas/drivemount.schemas
-rw-r--r-- 1 root root 20K 05-03 03:04 /home/nick/etc/gconf/schemas/gnome-volume-control.schemas
-rw-r--r-- 1 root root 21K 05-03 03:04 /home/nick/etc/gconf/schemas/system_smb.schemas
-rw-r--r-- 1 root root 22K 05-03 03:04 /home/nick/etc/gconf/schemas/desktop_gnome_thumbnailers.schemas
-rw-r--r-- 1 root root 17K 05-03 03:04 /home/nick/etc/gconf/schemas/apps_gnome_settings_daemon_default_editor.schemas

findおよび xargs コマンド

xargs : この機能は、パラメーター リストを小さな部分に変換し、セグメント内の他のコマンドに渡すことで、パラメーター リストが長すぎる問題を回避します。

-exec コマンドと比較して、このコマンドはより強力な機能を備えています。 find と一緒に使用すると、通常はパイプライン経由で xargs に渡されます

find /tmp –size +100M | コマンドのエイリアスを表示します

#使用which命令查找ls命令的完整路径
[root@lovelace scripts]# which ls
alias ls='ls --color=tty'
/bin/ls
#使用ldd命令查看ls所依赖的库文件(这里需要用到ls的完整路径)
[root@lovelace scripts]# ldd /bin/ls
linux-gate.so.1 =>  (0x00cf8000)
librt.so.1 => /lib/librt.so.1 (0x00d8d000)
libacl.so.1 => /lib/libacl.so.1 (0x00d62000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00de0000)
libc.so.6 => /lib/libc.so.6 (0x00110000)
libpthread.so.0 => /lib/libpthread.so.0 (0x00d71000)
/lib/ld-linux.so.2 (0x00baf000)
libattr.so.1 => /lib/libattr.so.1 (0x003a9000)
libdl.so.2 => /lib/libdl.so.2 (0x00d55000)
libsepol.so.1 => /lib/libsepol.so.1 (0x00d98000)

ここで、これに似ており、さらにマニュアルページへの完全なパスが与えられます。それはコマンド

#使用whereis查看命令的完整路径和相应的man文件
[root@lovelace scripts]# whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz
#man 查看对应的文件
[root@lovelace scripts]# man 1 ls
#man 查看对应的文件
[root@lovelace scripts]#
[root@lovelace scripts]# man 1p ls

whatisを与えます:システムコマンドを確認したいときにwhatisデータベース内のファイルをクエリします。重要な設定ファイルを扱うとき、このコマンドは非常に重要であり、単純なmanコマンドとして使用できます。

りー

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。