CentOsでファイルを探すプロになる!
はじめに
どうやらくーばねてすをやっつけるにはLinuxさんと仲良くしないといけないらしく、Linuxさんのディレクトリやファイルの操作を調べたのだが、ファイルをたくさん管理しないといけないことが分かった。全てのファイルの場所を記憶しておくことは無理なので、検索のプロを目指すことにした。くーばねてす倒す。
ファイルを探す
■findコマンド~ディレクトリツリーからファイルを探す~
findは名前の通りファイルを探すコマンド。オプションの指定方法が少し難しいらしい。
■↓基本のファイルを探すコマンド
$ find 検索開始ディレクトリ 検索条件 アクション
■↓ファイル名を指定して検索する例
$ find . -name file1.txt -print
-name ファイル名
でファイル名を指定できる。ちなみに-printは省略できる。
■↓ワイルドカード*,?で検索したい場合
$ find . -name '*.txt' -print
とシングルクォートやダブルクォートで囲まないといけない.
例えばカレントディレクトリにfile1.txtとfile2.txtがありました。
ワイルドカードで検索したい場合、次のようにシングルクォートやダブルクォートで囲まないと、
$ find . -name *.txt -print
Linuxさんは
$ find . -name file1.txt file2.txt -print
なのね!となってエラーになってしまうので、シングルクォートやダブルクォートで囲まないといけない!
■ファイルの種類を指定して探す~-type~
種類の指定は以下
・-type f ファイル
・-type d ディレクトリ
・-type l シンボリックリンク
↓カレントディレクトリの↓のディレクトリを表示する
$find . -type d -print
■複数の検索条件を指定
↓複数の検索条件は-aで指定
$ find -type f -a -name '*.txt' -print
でも-aは省略できるので
$ find -type f -a -name '*.txt' -print
でもOK。なら覚えなくていーじゃん!
locateコマンド~ファイル名データベースからファイルを探す!?~
ファイル名データベースってなんだ。そんなのあったの?ってシンプルに思いました。
locateはパスの一部を指定してファイルを探すコマンド。専用のデータベースから探すため、ディスクをスキャンしてファイル探すfindコマンドより高速になる。
locateコマンドはインストールされていないことがあるのでなかったらインストールする。
↓存在するのか確認
$ locate --version
バージョン名とかが書いてあればOK。
なかったら次でインストール
$ yum install mlocate
※locateはmlocateってプログラム名みたい。
locateコマンドをインストールした直後はファイルパス一覧がデータベースに登録されていないので、rootユーザでupdatedbコマンドでデータベースを作成する。以降は自動で更新されるのでupdatedbコマンドはしなくてもいい。
rootユーザで、
$ updatedb
でOK。
■locateコマンドでファイルを検索する
$ locate オプション 検索したいパスの一部
↓例えばbashという文字列を含むパス名を検索したい時
$ locate bash
locateは専用のデータベースから探すため、ディスクをスキャンしてファイル探すfindコマンドより高速になる。findだと数分かかる検索が数秒で終わる。早っ^^
■しかしlocateコマンドでも弱点があって
インストール時にファイルパスのデータベースを1日1回作成するように設定されている。
ので、
locateコマンドで表示されたコマンドが実際は存在しない
locateコマンドで表示されないのにファイルが存在する
といったことがあり得るので、たった今作成したファイルがlocateコマンドで検索できない。
なので作成してしばらくたったファイルを探すのに向いている。
ワイルドカードで検索もできるのでシングルクォート、ダブルクォートを忘れない。
■色んな検索方法の指定について
↓大文字小文字を指定しない
$ locate -i 検索したいパスの一部
検索したいパスの一部がnotesだった場合、Notesでもnotesでも拾ってくれる。
※大文字も小文字も愛してる!って覚えた。
↓ファイル名だけを対象に検索
$ locate -b 検索したいパスの一部
fじゃないのかよ!fじゃないのかよ!fじゃないのかよ!って覚えた!
-b python
で検索した場合、pythonという名前のディレクトリは表示されない。
また、例えば/usr/include/python2.7/pyconfig-64.hといったファイルも表示されない。
ファイル名そのものに一致したファイルだけが表示されるから。
↓ちなみに複数の検索パターンでも検索できる。
$ locate 検索したいパスの一部 検索したいパスの一部
複数指定するとor検索になる。どっちかが入ってれば表示される。
↓AND検索したい時は
$ locate -A 検索したいパスの一部 検索したいパスの一部
検索パターン全てが入るものが表示される。
※All!!!と覚えた!!!(多分andだけど!)
まとめ
とてもながくて疲れた。
findとlocateを勉強した。先輩方はさらに難しい組み合わせで検索していらっしゃるのかな、と思うと頭が爆発しそうになった。
Discussion