ファイル検索

May 23, 2018

ファイル検索コマンド

Linux にはさまざまな検索コマンドが用意されている。検索の用途に応じて適切なコマンドを選択する。

find

指定したディレクトリ以下から、検索条件にマッチするファイルやディレクトリを検索する。

検索式 説明
-name ファイル名検索
-atime 最終アクセス時刻検索
-mtime 最終更新時刻検索
-perm アクセス権検索
-size ファイルサイズ (ブロック単位) 検索
-type ファイルの種類検索。f: ファイル、l: シンボリックリンク、d: ディレクトリ
-user ファイルの所有者検索
-print マッチしたファイルを表示
-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  

 © 2023, Dealing with Ambiguity