ファイル検索コマンド
Linux にはさまざまな検索コマンドが用意されている。検索の用途に応じて適切なコマンドを選択する。
find
指定したディレクトリ以下から、検索条件にマッチするファイルやディレクトリを検索する。
検索式 | 説明 |
---|---|
-name | ファイル名検索 |
-atime | 最終アクセス時刻検索 |
-mtime | 最終更新時刻検索 |
-perm | アクセス権検索 |
-size | ファイルサイズ (ブロック単位) 検索 |
-type | ファイルの種類検索。f: ファイル、l: シンボリックリンク、d: ディレクトリ |
-user | ファイルの所有者検索 |
マッチしたファイルを表示 | |
-exec | マッチしたファイルに対してコマンドを実行 |
-ok | マッチしたファイルに対してコマンドを実行 (確認あり) |
$ find /home/ -name "*.rpm"
/home/ec2-user/httpd-2.2.34-1.16.amzn1.src.rpm
$ find /home/ -type f -mtime -1
/home/ec2-user/.bash_history
$ find /usr/bin/ -type f -perm -u+s
/usr/bin/chfn
/usr/bin/passwd
/usr/bin/newgrp
/usr/bin/crontab
/usr/bin/sudo
/usr/bin/chage
/usr/bin/gpasswd
/usr/bin/chsh
/usr/bin/at
$ find -atime +30 -exec rm {} \;
locate
あらかじめ作成されたデータベースに基づいて指定されたパターンに一致するファイルを検索する。find よりも高速に動作する。
$ locate "*.h" | tail -10
/usr/src/linux-headers-4.13.0-43-generic/scripts/kconfig/list.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/kconfig/lkc.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/kconfig/lkc_proto.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/kconfig/nconf.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/kconfig/qconf.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/kconfig/lxdialog/dialog.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/mod/devicetable-offsets.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/mod/elfconfig.h
/usr/src/linux-headers-4.13.0-43-generic/scripts/mod/modpost.h
/var/awslogs/lib/python2.7/site-packages/wheel/test/headers.dist/header.h
updatedb
locate コマンドはあらかじめ作成されたファイル名データベースに基づいて検索するため、find よりも高速に動作する。
このデータベースを更新するためには updatedb コマンドを用いる。
-e を付随することで特定のディレクトリをアップデートの対象外とできる。
$ sudo updatedb -e /home/
updatedb コマンドの動作を変更するには、/etc/updatedb.conf ファイルを編集する。
$ cat /etc/updatedb.conf
PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 ncpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"
PRUNEPATHS はデータベースに登録しないディレクトリで、PRUNEFS はデータベースに登録しないファイルシステム。
whereis
指定されたコマンドのバイナリファイル、ソースコード、マニュアルファイルが置かれている場所を検索する。
$ whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
$ whereis -bm ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz