初心者向けLinuxコマンドの基本【ファイル探索編】

Web技術
スポンサーリンク

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についてはこちらで解説しています。

# 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エディタの使い方を解説しています。

ぜひご覧ください。

コメント

タイトルとURLをコピーしました