Linuxにはいくつかの検索コマンドがあります。
ここでは、検索コマンドの中でもよく使われている find、which、type、localeコマンドを解説します。
findコマンドでのファイル検索
指定したディレクトリ配下で、条件にマッチするファイルとディレクトリを検索してリスト表示します。
ディレクトリ指定しない場合はカレントディレクトリ配下が検索対象になります。
検索条件にはファイル名以外にも、ファイルサイズや更新日時を指定して絞り込むことができます。
ただしアクセス権のないディレクトリ配下を検索することはできません。
例えば homeディレクトリ配下でファイル名末尾が「.txt」のファイルを検索する場合は下記のようにします。
find /home -name "*.txt"
検索式にメタキャラクタを使う場合はダブルクォーテーションで囲むようにします。
-name ファイル名 | ファイル名で検索 |
-type 種類 | 種類で検索 f=ファイル、d=ディレクトリ、l=シンボリックリンク |
-size サイズ | ファイルサイズで検索 |
-mtime 日時 | 最終更新日で検索 |
-atime 日時 | 最終アクセス日で検索 |
-perm アクセス権 | アクセス権で検索 |
-user ユーザ名 | ファイル所有者で検索 |
-exec コマンド {} \; | マッチしたファイルを引数にしてコマンド実行 |
-ok コマンド {} \; | マッチしたファイルを引数にして確認しながらコマンド実行 |
# home配下で過去3日以内に更新されたファイルを検索
find /home -mtime -3 -type f
# home配下で60日以上アクセスされていないファイルを検索して削除
find /home -atime +60 -exec rm {} \;
whichでコマンドのパスを探す
コマンドのディレクトリ位置(パス)を探すにはwhichコマンドが便利です。
which コマンド名
環境変数PATHに書かれているディレクトリ配下からのみ検索します。
いわゆる「パスが通っているコマンド」が対象です。
一般ユーザで管理者コマンドは検索できません。
whereisコマンドとの違いは?
whichに似ているコマンドにwhereisコマンドがあります。
こちらはコマンドのバイナリファイル以外に、コマンドのソースコードやマニュアルも併せて検索することができます。
whereis [オプション] コマンド名
-b | バイナリファイルを検索 |
-s | ソースファイルを検索 |
-m | マニュアルファイルを検索 |
typeコマンドでコマンドの種類を知る
コマンドが普通の実行ファイルなのか、シェルの組み込みコマンドなのか、エイリアスなのか、シェルの予約後なのかを判別して表示します。
$ type rm
rm is /bin/rm #rmは実行ファイル
$ type echo
echo is a shell builtin #echoはシェル組み込み関数
$ type ls
ls is aliased to `ls --color=auto' #lsはエイリアス
$ type if
if is a shell keyword #ifはシェルの予約後
locateコマンドで高速に検索
locateコマンドを使うとfindよりも高速に検索できます。
下記は末尾が「.txt」のファイルを検索します。
locate "*.txt"
ただし、locateで検索する為には、あらかじめデータベースを作成しておく必要があります。
updatedbでファイル名データベースを作成・更新
locateコマンドが参照するためのデータベースはupdatedbコマンドで作ることができます。
updatedb [オプション]
-e パス | 除外するパスを指定 |
下記の例は /tmp ディレクトリを除外してデータベース作成・更新します。
updatedb -e /tmp
CentOSやUbuntuなどのディストリビューションでは、updatedbコマンドはcronで定期的に実行されるようになっています。
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 devp
ts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse.glusterfs fuse.sshfs curlft
pfs ecryptfs fusesmb devtmpfs"
コメント