意外と便利なコマンド「find」

【連載】

にわか管理者のためのLinux運用入門

【第97回】意外と便利なコマンド「find」

[2017/10/24 08:00]後藤大地 ブックマーク ブックマーク

サーバ/ストレージ

どのシステムにもディレクトリとファイルの配置には一定のルールがある。システムに慣れてくるとどこに何が置いてあるかは手に取るようにわかるようになるが、ときにはど忘れしてしまうことだってある。今回は、そんなときに便利なコマンド「find」を紹介しよう。

名前を指定したら検索できるコマンド

findコマンドは、その名の通りファイルやディレクトリを探すためのコマンドだ。findコマンドにはさまざまなオプションが用意されており、さらにヒットした対象に対して別の処理を行うこともできる。このコマンド単体でもいろいろなことができるのだが、最初は「ファイル名を指定したら検索できるコマンド」、そんな程度に覚えておけばよいだろう。

例えば、サーバの設定ファイルには「.conf」という拡張子が付けられていることが多い。「あの設定ファイル、どこにあったっけ?」というときには、次のようにfindコマンドを実行すると設定ファイル一覧を表示できる。

[root@centos ~]# find /usr -name '*.conf'
/usr/lib/dracut/dracut.conf.d/50-nss-softokn.conf
/usr/lib/dracut/dracut.conf.d/01-dist.conf
/usr/lib/dracut/dracut.conf.d/02-rescue.conf
/usr/lib/dracut/dracut.conf.d/01-microcode.conf
/usr/lib/dracut/modules.d/98syslog/rsyslog.conf
...略...
/usr/share/alsa/firmware/usx2yloader/us122.conf
/usr/share/alsa/firmware/usx2yloader/us224.conf
/usr/share/alsa/firmware/usx2yloader/us428.conf
/usr/share/alsa/topology/broadwell/broadwell.conf
[root@centos ~]#

findコマンドの第1引数には、検索を開始するトップディレクトリ指定する。上記の例だと「find /usr」となっているので、/usr/以下のファイルやディレクトリが検索対象ということになる。

findコマンドでは、オプション「-name」で検索対象の名前を指定することができる。「-name ‘*.conf’」のように指定すれば、拡張子が「.conf」のパスを探すことができるわけだ。ほかにもオプションを指定していろいろな絞り込みが可能なのだが、findコマンドののオプションは覚えにくいので、パイプラインにつないでほかのコマンドでフィルタリングできるならそちらのほうが扱いやすいと思う。

例えば、先ほどの出力からさらにgrepコマンドでWPA関連のファイルを絞り込むと次のようになる。

[root@centos ~]# find /usr -name '*.conf' | grep -i wpa
/usr/share/doc/wpa_supplicant-2.0/examples/ieee8021x.conf
/usr/share/doc/wpa_supplicant-2.0/examples/openCryptoki.conf
/usr/share/doc/wpa_supplicant-2.0/examples/plaintext.conf
/usr/share/doc/wpa_supplicant-2.0/examples/udhcpd-p2p.conf
/usr/share/doc/wpa_supplicant-2.0/examples/wep.conf
/usr/share/doc/wpa_supplicant-2.0/examples/wpa-psk-tkip.conf
/usr/share/doc/wpa_supplicant-2.0/examples/wpa2-eap-ccmp.conf
/usr/share/doc/wpa_supplicant-2.0/wpa_supplicant.conf
[root@centos ~]#

いくつか覚えておくと便利なのは、-typeオプションで種類を指定できることと、-maxdepthオプションでパスの階層の深さを指定できることだろう。「-type f」だとファイルだけが出力されるようになり、「-type d」だとディレクトリだけが出力されるようになる。もしかしたら、「l」「p」「s」あたりを使うことがあるかもしれないが、とりあえずは「-type f」と「-type d」だけ覚えておけば、やりたいことは大体できると思う。

-maxdepthオプションはディレクトリの階層の最大の深さを指定するもので、例えばファイルのある場所は最大でもスタート地点から3ディレクトリ下までだとわかっていれば、それよりも下に関しては検索対象としない、といった絞り込みを行うことができる。データファイルの置いてあるパスの深さなどが概ねわかっている場合には便利なオプションだ。

検索を開始するディレクトリからその3階層下のディレクトリまでで、「.conf」の拡張子が付いたファイルを検索する場合は、以下のように指定して実行すればよい。

[root@centos ~]# find /usr -maxdepth 3 -type f -name '*.conf'

findコマンドの使い方としては、ヒットしたファイルのパーミッションを一括で変更するとか、コアダンプファイルや一時バックアップファイルのように削除しても問題のないゴミファイルを検出して削除する、更新時間の期間を指定して該当するファイルを取り出す……といったものが考えられる。

だが、実際の運用ではそういった使い方はあまりしない。自動削除やパーミッションの自動変換などは誤って実行されると困るので、結局いったんファイルに出力して確認してから作業したり、ほかのコマンドで置き換えて処理したりするからだ。

ただし、システムで定期的に動作するスクリプトではオプションがバリバリ指定されたfindコマンドが実行されていることも少なくない。findコマンドでどういったことができるかは知っておいたほうがよいだろう。findコマンドを使ったことがないという方は、ぜひ一度使ってみていただきたい。

※ 本記事は掲載時点の情報であり、最新のものとは異なる場合がございます。予めご了承ください。

関連リンク

この記事に興味を持ったら"いいね!"を Click
Facebook で IT Search+ の人気記事をお届けします
3180
2
【連載】にわか管理者のためのLinux運用入門 [97] 意外と便利なコマンド「find」
どのシステムにもディレクトリとファイルの配置には一定のルールがある。システムに慣れてくるとどこに何が置いてあるかは手に取るようにわかるようになるが、ときにはど忘れしてしまうことだってある。今回は、そんなときに便利なコマンド「find」を紹介しよう。
https://news.mynavi.jp/itsearch/2015/12/14/linux/mynavi20151210_linux_300-250.jpg
どのシステムにもディレクトリとファイルの配置には一定のルールがある。システムに慣れてくるとどこに何が置いてあるかは手に取るようにわかるようになるが、ときにはど忘れしてしまうことだってある。今回は、そんなときに便利なコマンド「find」を紹介しよう。

会員登録(無料)

セキュリティ・キャンプ2017 - 精彩を放つ若き人材の『今』に迫る
ぼくらのディープラーニング戦争
クラウドアンケート
マイナビニュース スペシャルセミナー 講演レポート/当日講演資料 まとめ
人事・経理・総務で役立つ! バックオフィス系ソリューション&解説/事例記事まとめ

一覧はこちら

今注目のIT用語の意味を事典でチェック!

一覧はこちら

ページの先頭に戻る