Linuxでファイルを探す
Linuxはたくさんのファイルやディレクトリで構成されています。
実はこれまで紹介してきたlsコマンドやcpコマンド、cdコマンドなども実行ファイルと呼ばれるファイルとして配置されています。
これらのシステムファイルに加えて自分で作ったファイルなど多くのファイルを扱うことになってきます。
どこに配置したかを全て覚えておくのは困難なため、今回紹介するコマンドが役に立つはずです。
早速コマンドの紹介に移ります。
findコマンド
findコマンドはファイルを探すコマンドです。
findコマンドはたくさんのオプションがありますのでここで詳しく解説していきます。
まず、findコマンドの基本的な使い方です。
find <検索開始ディレクトリ> <検索条件> <アクション>
findコマンドを実行すると引数で指定した<検索開始ディレクトリ>を起点として、<検索条件>を満たすファイルを探して<アクション>を実行します。
<検索条件>に何も指定しなかった場合は、全てのファイルが対象になります。
例えば、カレントディレクトリを起点として、拡張子がtxtのファイルを探してそのパスを表示します。
$ find . -name file.txt -print
<検索条件>として-name file.txtを指定しています。
これでファイル名が「file.txt」のファイルを探すことができます。
また、<アクション>には-printを指定しています。
findコマンドは<アクション>を指定しなかった場合、-printが採用されますのでここは省略可能です。
$ mkdir dir
$ touch file.txt doc/file.txt
$ find . -name file.txt -print
./doc/file.txt
./file.txt
出力結果を見てみると、カレントディレクトリより下の階層の検索条件に一致するファイルを全て表示していることがわかります。
そのため、どんなに深い階層であっても簡単にファイルの場所を見つけることができます。
findコマンドでよく使う検索条件オプション
findコマンドで利用可能な検索条件にはいくつか種類がありますがここではよく使う3つを紹介します。
ファイル名で探す -nameと-iname
findコマンドでファいうr名を指定してファイルを探すには、検索条件に-nameか-inameを指定してファイル名を入力します。
- -name
ファイル名の大文字と小文字を区別します。
- -iname
ファイル名の大文字小文字を区別しません。
ファイル名の指定にはワイルドカードを使うことができます。
*は任意の文字列を表します。
?は任意の一文字を表します。
例えば、拡張子が.phpのファイルを探すときは次のように入力します。
find . -name '*.php' -print
ここでシングルクォートで囲っていることに注意してください。
これはbashのパス名展開と区別するためのものです。
ファイルの種類で探す -type
find . -type <ファイルタイプ> -print
と指定することでファイルの種類で検索することができるようになります。
ファイルタイプはたくさんの種類がありますが、とりあえず3つほど覚えておけば大丈夫です。
指定 | ファイル種別 |
-type f | 通常ファイル |
-type d | ディレクトリ |
-type l | シンボリックリンク |
$ ls
doc file2.txt file.txt
$ find . -type d -print
.
./doc
カレントディレクトリに存在するディレクトリが表示されました。
ファイルは表示されていないことがわかります。
複数の検索条件を組み合わせる -a
findコマンドで-aで区切って並べることでAND検索ができるようになります。
$ find . -name '*.txt' -a -type f
これでファイル名が*.txtかつファイルという条件で検索できます。
locateコマンド
locateコマンドはパス名の一部を指定してファイルを探すためのコマンドです。
専用のデータベースから検索するのでfindコマンドより高速に検索が可能です。
locateコマンドはLinuxに入っていない場合はインストールする必要があります。
locateコマンドがお持ちのLinuxに入っているかどうかを調べるには–versionオプションをつけて実行すればわかります。
$ locate --version
-bash: locate: command not found
not foundと表示されたらインストールされていません。
利用できるように準備しましょう。
locateコマンドのインストール
locateコマンドはCentOSの場合はmlocateというパッケージに含まれています。
rootユーザでyumコマンドを実行してインストールしてください。
# yum install locate
このコマンドを実行すると下の図のように処理が走ります。
「y」を入力して処理を続けてください。
インストールが完了したら先ほどと同様–versionを指定して実行してください。
バージョンが表示されたらインストール完了です。
ただし、このままではファイルパス一覧がデータベースに登録されていません。
そのため、rootユーザでupdatedbコマンドを実行してデータベースを作成します。
# updatedb
updatedbは定期的に自動実行されますのでこれ以降は手動で実行しなくても大丈夫です。
ファイルの検索
locateの書式は次の通りです。
locate [オプション] <検索パターン>
次の例はlocateを使って「postgresql」という文字列を含むパスを全て表示します。
$ locate postgresql
先ほども述べたようにlocateコマンドはデータベースに登録されている情報から結果を返します。
そのデータベースはデフォルトでは1日に1回作成されるように設定されています。
なので、locateコマンドで表示されないのにディスクにはファイルが存在する場合や、locateコマンドで表示されるのにディスクには存在しないということあるので注意が必要です。
検索方法の指定
ワイルドカードの使用
findと同様に*でワイルドカードを指定できます。
同じようにシングルクォートで囲みます。
$ locate '*.html'
大文字小文字の区別
検索パターンで大文字と小文字の区別をせずに検索したい場合、-iオプションを使います。
$ locate -i files
ファイル名だけ検索
ファイル名だけを検索対象にしたい場合は-bオプションを使います。
$ locate -b python
複数検索パターンの指定
OR検索
同時に複数のパターンを検索することができます。
その場合は、複数のパターンを渡します。
$ locate python postgresql
この場合、OR検索となり一致するものが出力されます。
AND検索
複数のパターンのどちらも一致するものを表示させたい場合は-Aオプションをつけます。
$ locate -A python .conf
Linuxコマンドの基本【ファイル探索編】まとめ
ファイルを探す方法について解説してきました。
これらのコマンドを使わずにファイルを探すのは大変です。
紹介したコマンドを使えば探す時間の短縮になりますのでぜひ覚えてください。
ここで紹介しているオプションは一部で他にもいろいろな機能がありますので、ぜひ他にも調べてみてください。
Linuxのテキストファイルの編集もできるようになっておきましょう。
「初心者向けLinuxのテキストエディタVimの基本」でvimエディタの使い方を解説しています。
ぜひご覧ください。
コメント