Many of you fellow Ubuntu users will be familiar with the “Search for Files” tool that can you look for files. Linux のほとんどのものに言えることですが、素晴らしいデスクトップ ツールもありますが、どんな合理的なデスクトップ ツールもかなわないほどの力をターミナルに見出すことができます。
本日は、ファイルを探すという面倒な作業を簡単にするいくつかのツールを紹介したいと思います。 locate
プログラムは、ほとんどのグラフィカルな検索ツールと同様の方法で動作します。
使用方法
例えば、ビデオのパフォーマンスを強化するために X を修正する方法を読み終えたとしましょう。 その文書には xorg.conf
ファイルを修正するように書かれていますが、その文書にはそれがどこにあるのか書かれておらず、どうやってそれを見つけたらいいのかわかりません。
$ locate xorg.conf/etc/X11/xorg.conf/usr/share/man/man5/xorg.conf.5.gz/var/lib/x11/xorg.conf.md5sum/var/lib/x11/xorg.conf.roster
/etc/X11/xorg.conf
が探しているファイルであることは明らかですが、何十、何百もの結果が返されたらどうでしょうか。 どうやってそのすべてを管理するのでしょうか? 正規表現について少し知っていれば(Linuxユーザは本当に基本を学ぶべきです)、正規表現を使ってディレクトリやファイルを簡単に検索することができます。 例えば、次のコマンドで xorg.conf
に完全に一致するものを検索できます:
$ locate -r '/xorg.conf$'/etc/X11/xorg.conf
もし、大文字小文字を区別せずにファイルを検索したい場合は、-i
オプションを使うことができます。 例:
$ locate -i 'monthly report'/home/chris/Documents/August Monthly Report.doc/home/chris/Documents/July Monthly Report.doc/home/chris/Downloads/latest monthly report.doc
初めて locate
を使うときに混乱するかもしれないことは、マッチを返すだけでなく、マッチがディレクトリであれば、そのディレクトリ以下のすべてのディレクトリとファイルもリストアップすることです。 たとえば、
$ locate Desktop/home/chris/Desktop/home/chris/Desktop/Head Shot.jpg/home/chris/Desktop/Skype.lnk/home/chris/Desktop/Steam.lnk...
このコマンドは、私のシステムで 1000 以上のエントリを返します。 検索結果を、含まれるすべてのファイルとディレクトリを除いた検索語に一致するエントリのリストに縮小するには、-b
オプションを使用します:
$ locate -b Desktop/home/chris/Desktop/home/chris/bin/recordSoundAndDesktop.sh/opt/HipChat4/lib/QtQuick/Controls/Styles/Desktop/usr/include/qt4/QtGui/QDesktopServices/usr/include/qt4/QtGui/QDesktopWidget/usr/lib/libreoffice/program/wizards/common/Desktop.py/usr/lib/libreoffice/share/gallery/computers/Computer-Desktop.png/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.py/usr/lib/python2.7/dist-packages/xdg/DesktopEntry.pyc/usr/lib/python3/dist-packages/xdg/DesktopEntry.py/usr/lib/python3/dist-packages/xdg/__pycache__/DesktopEntry.cpython-35.pyc/usr/lib/x86_64-linux-gnu/qt5/qml/QtQuick/Controls/Styles/Desktop/usr/share/kde4/apps/kio_desktop/DesktopLinks/usr/share/man/man3/File::DesktopEntry.3pm.gz/usr/share/perl5/File/DesktopEntry.pm/usr/share/sounds/KDE-Window-All-Desktops-Not.ogg/usr/share/sounds/KDE-Window-All-Desktops.ogg
まだかなりの数が一致しますが、探しているものを見つけるために余分な結果をすべてソートする必要はありません。 このデータベースはファイルシステムのディレクトリとファイル名をキャッシュし、locate
コマンドがファイルシステム全体を検索するのに長時間を要することなく、瞬時に動作することを可能にします。 デフォルトでは、システムはこのデータベースを更新するコマンドを 1 日 1 回、午前 6 時 25 分に実行します。 このコマンドは、前回の更新以降にファイル システムに加えられたすべての変更でデータベースを更新します。
最近、大量のファイルやディレクトリの追加や削除などの変更を行い、locate
コマンドを使ってこれらの新しいディレクトリやファイルを検索したい場合、次のコマンドでいつでも手動で slocate データベースを更新できます:
$ sudo updatedb
最後に slocate データベースが更新されてから行った変更の量によっては、更新に数秒から数分かかることがあります。 これが終わると、locate
.
which
locate
で再び検索できるようになり、ファイルシステム全体を検索するには最適な方法です。 しかし、時には、あるコマンドが存在する場所を見つけたいだけということもある。
which
はたった一つのことしかしませんが、よくできています。 コマンドの名前を与えると、そのコマンドのファイルがファイル システムのどこに存在するかを教えてくれます。
例えば、firefox
コマンドがどこに存在するかを見つけたいとしましょう。
$ which firefox/usr/bin/firefox
なぜ、あるコマンドを特定して検索したいのでしょうか。 古いコマンドを置き換える必要があるコードがあると想像してください。 新しいコマンドを実行する前に、古いコマンドを削除する必要があります (私は通常、必要な場合に備えて、同じ名前の後に “.bak” を付けてリネームしています)。
whereis
whereis
コマンドは which と似ていますが、もう一歩進んでいます。 実行ファイルがどこにあるか教えてくれるだけでなく、 ソース、man ページ、その他の関連するディレクトリも同様に探してくれる。
which
の例と同様に、whereis
に firefox
コマンドについて聞いてみましょう。
$ whereis firefoxfirefox: /usr/bin/firefox /usr/lib/firefox /etc/firefox /usr/share/man/man1/firefox.1.gz
以前 Flash のソリューションに取り組んでいたとき、Firefox のグローバルアドオンが格納されている場所が /usr/lib/firefox/plugins
でしたので、これは役に立ちました。 find
は、最終更新時刻、所有者とグループ、パーミッション、タイプ (ファイル、ディレクトリ、シンボリックリンクなど)、ファイルが現在のユーザーによって読み取り/書き込み/実行可能かどうか、ファイルサイズ、ファイルまたはディレクトリが空かどうか、その他多数に基づいてファイルを検索することからすべてを行うことが可能です。
このツールを xargs
コマンドと組み合わせて使用すると、コマンドラインで本当に驚くべきことを行うことができます (これは別の機会に説明する必要があります)。 100 日以上前に最終更新された “.bak” で終わるファイルを現在のディレクトリから再帰的に検索し、1 つのコマンドでそれらを削除できることを想像してみてください:
$ find . -name '*.bak' -type f -mtime +100 -print0 | xargs -0 /bin/rm -f
最初は非常に複雑に見えますが、find
の使い方をマスターすれば、自然にできるようになるでしょう。 率直に言って、私がカバーするよりもはるかに多くのものを見つけることができますし、私よりも優れた仕事をするツールの素晴らしい紹介がたくさんあります。
- Example uses of the Linux Command find
- (I apologize for the horrible colors in advance) Unix/Linux “find” Command Tutorial
- Using the find command
Happy searching.The Linuxコマンドの使用例
- 【参考文献3】「Find」を使って始めるための素晴らしい文献を紹介します。
- Paypal でチップを送る。
- 私の Linode リフェラルコードでこのサイトのホスティングを手伝う。
何かお役に立てましたか?