6.3 ファイルの探し方
Linux Essentials Online Text | 2021/07/21

ファイルやディレクトリの検索(find)

findはファイルやディレクトリを検索するコマンドです。
条件に一致するファイルを探すときに使用します。

書式:

find [検索場所] オプション 検索条件

主なオプション:

-name 文字列指定文字列を含むファイルやディレクトリを検索する。
-atime 日数指定日にアクセスしたファイルやディレクトリを検索する。
「0」が今日。「1」が昨日。
-mtime 日数指定日に更新したファイルやディレクトリを検索する。
「0」が今日。「1」が昨日。
-perm 権限指定した権限を持つファイルやディレクトリを検索。
指定は数字かアルファベット。
-size 容量指定サイズのファイルを検索する。単位はc(byte)やk(Kbyte)。
+-も使える。
-type {d/f/l}d=ディレクトリ、f=ファイル、l=シンボリックリンクを検索する。
-user ユーザ指定したユーザが所有者となるファイルやディレクトリを検索する。
-maxdepth 数指定した数の階層まで検索する。
-mindepth 数指定した数の階層は表示しない。
-print検索結果を標準出力する。(デフォルト動作)
-print0ファイルの区切りや空白にNULL文字を埋め込んで出力する。
-exec コマンド検索結果に対してコマンドを実行する。

<実習: findを使った検索>

$ find . -name "ls-*" -size -100c
./ls-output
$ find -name "ls-*" -size -100c
./ls-output

検索場所を省略した場合はカレントディレクトリを検索対象にします。複数の条件がある場合は、続けてオプションをつないでいきます。
上記は、カレントディレクト内で「ls-」で始まるファイル、且つ、100byte以下のものを検索しています。

また、「-user」オプションはオプションの後にユーザ名を指定しますが、ユーザIDでも実行できます。例えばrootユーザが所有者となるファイルを検索する場合、「-user root」でも「-user 0」でも同じ動作になります。

高速な検索(locate)

locateはファイルやディレクトリを高速検索するコマンドです。findコマンドは直接ファイルやディレクトリを探しますが、locateはあらかじめ検索しておいたファイルやディレクトリのリストのデータベースを検索するため、高速な検索を行うことができます。

書式:

locate 検索文字列

locateコマンドはあらかじめ用意されたデータベースを検索するため、直前に追加したファイルやディレクトリを検索することができません。そのため、データベースを更新するupdatedbコマンドを使用し、データベース情報を更新します。

書式:

updatedb [オプション]

主なオプション:

-e ディレクトリデータベースから除外したいディレクトリを指定します。
-o DB名更新したい対象のDB名を指定します。(独自DBを作成したい場合に使用。)

設定ファイルは、/etc/updatedb.confです。

なお、ファイルのデータベースの更新は、システム起動時や定期的に自動で行われるので長時間にわたり更新されていない状態が続くことはありません。

コマンドのパスを検索(type)

コマンドの実行パスを知るためのコマンドがいくつかありますが、その中の一つにtypeコマンドがあります。

書式:

type [オプション] コマンド名

主なオプション:

-a検索可能なものを全て表示
-t実行されるコマンドに応じてタイプ(「alias」「keyword」「function」「builtin」「file」)を表示

typeコマンドは、コマンドのタイプを調べるコマンドです。「エイリアス」→「ビルトインコマンド(組み込みコマンド)」→「環境変数PATH」の順に探し、見つけたものを表示します。
「-a」オプションを用いることで、コマンドのパスを知ることもできます。

<実習: typeコマンドの実行>

試しにlsコマンドを調べてみましょう。

$ type -a ls
ls is aliased to `ls --color=auto' ls is /usr/bin/ls

lsコマンドの実態は、「/usr/bin/ls」であるとわかります。
また、lsコマンドにはエイリアスが設定されていることがわかりました。lsコマンド実行時、ディレクトリや実行ファイルに色が付くのは、このエイリアスによるものです。colorのオリジナル設定は /etc/DIR_COLORS にあります。

今度はcdコマンドを調べてみましょう。

$ type -t cd
builtin

cdコマンドをtypeコマンドで確認してみるとビルトインコマンド(組み込みコマンド)であることがわかります。

通常、コマンドの実行は「人間がコマンドを入力する」→「シェルが受け付ける」→「実行プログラムに依頼する」というプロセスで実行されますが、実はシェル自身にコマンドが含まれているケースがあり、これに該当するものは実行プログラムに渡すことなくシェル自身で処理することができます。これをビルトインコマンドと言います。

エイリアス(alias)

bashでは、エイリアス機能を用いることで、コマンドに別名を付けたり、コマンドをひとまとめにして新しいコマンドのように実行できるようにします。

書式:

alias エイリアス名=エイリアスにしたい内容
unalias エイリアス名
unalias -a  

<実習:aliasコマンドの実行>

$ alias ls='ls -la'
$ ls
合計 1696 dr-xr-x---.  2 root root    180  7月 20 15:10 .
dr-xr-xr-x. 17 root root    224  5月 14 16:17 ..
-rw-------.  1 root root   2286  8月 26 14:44 .bash_history
-rw-r--r--.  1 root root     18 12月 29  2013 .bash_logout
-rw-r--r--.  1 root root    176 12月 29  2013 .bash_profile
$ \ls

$ unalias ls

上記は、lsコマンドを実行した時に、「-la」が自動付与されるように設定しています。この場合のエイリアス名は「ls」となり、「ls」を実行した時に実際に入力される値が「ls -la」になります。

なお、この状態でエイリアス名である「ls」の頭に「\(バックスラッシュ)」をつけるとエイリアスを無効にすることが出来ます。上記実行例では、rootユーザのホームディレクトリにはファイルが存在しないため、何も表示されません。

設定したエイリアスを解除する場合は「unelias」コマンドを使用します。「-a」オプションを付けてunaliasコマンドを実行すると、設定されている全てのエイリアスが解除されます。

PAGE TOP