🕵️

CentOsでファイルを探すプロになる!

2020/12/28に公開

はじめに

どうやらくーばねてすをやっつけるには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