このセクションでは自宅サーバーとしてLinuxを操作するうえでよく使うコマンドについて初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
抜粋Linuxコマンドリファレンス

ディレクトリとファイルの操作

ディレクトリとファイルの作成
カレントディレクトリの変更
ディレクトリとファイルの表示
ディレクトリとファイルのコピーと移動
ディレクトリとファイルの削除
ディレクトリとファイルの検索
パーミッションの変更
解凍と圧縮

ディスクとパーティションの操作+

テキストの操作+

ユーザーとアカウント管理+

ネットワークの管理+

システム・プロセス管理+

その他のコマンド+


find〜ディレクトリやファイルを検索する

既存のディレクトリやファイルを検索する コマンド です。

コマンドの一般書式は、

find [検索対象の パス ] [検索または出力条件など] ... Enter

となります。

[検索対象のパス] は、 絶対パス または 相対パス を指定します。省略すると カレント ディレクトリが検索対象とみなされます。

[tanaka@web1 ~]$ find prog/ -name "*.zip"Enter
 カレントディレクトリ内の"prog/"以下の"*.zip"を検索します↑。 ワイルドカードの説明
prog/htmllint.zip
prog/xoops/xoops-2.0.13a-JP.zip
prog/xoops/TinyD-2.2.zip
prog/xoops/BluesBB_1.03.zip
prog/phpMyAdmin-2.9.0.3-all-languages-utf-8-only.zip
prog/lucky-clovers.zip
[tanaka@web1 ~]$

findは複数の検索条件を組み合わせて複雑な条件による検索が可能な強力な検索コマンドです。

またfindコマンドはコマンドとして単独で実行するだけではなく、 シェル スクリプト 内に記述して利用されることが多いため、非常に多くのオプションスイッチがあります。

ここではコマンド操作で一般的に扱うことの多いオプションについて簡単に説明します。

"-name"〜ファイル(ディレクトリ)名を指定して検索する

ファイル(ディレクトリ)名を指定して検索を行います。 ワイルドカード 正規表現 を利用して部分一致検索を行うこともできます。

find [検索対象の パス ] -name [ファイル名(条件式)] ... Enter

[tanaka@web1 ~]$ find prog/ -name "*.zip"Enter
 カレントディレクトリ内の"prog/"以下の"*.zip"を検索します↑。 ワイルドカードの説明
prog/htmllint.zip
prog/xoops/xoops-2.0.13a-JP.zip
prog/xoops/TinyD-2.2.zip
prog/xoops/BluesBB_1.03.zip
prog/phpMyAdmin-2.9.0.3-all-languages-utf-8-only.zip
prog/lucky-clovers.zip
[tanaka@web1 ~]$

"-type"〜種類を指定して検索する

検索対象をファイルやディレクトリなどに限定して検索を行います。

オプションスイッチ "-type" に続いて、 "f (ファイル)" "d (ディレクトリ)" "l ( シンボリックリンク )" などを指定できます。

find [検索対象の パス ] -type [種類を指定する引数] ... Enter

[tanaka@web1 ~]$ find . -type lEnter
 カレントディレクトリ内のシンボリックリンクを検索します↑。 .ドットの説明
./config/master.cf
[tanaka@web1 ~]$ find . -type d -name "my*"Enter
 カレントディレクトリ以下の"my"で始まるディレクトリを検索します↑。
./prog/mysql421
./prog/mysql420
[tanaka@web1 ~]$

タイムスタンプで検索する

検索対象に対して タイムスタンプ による検索を行うオプションです。もちろん複数のオプションを組み合わせて使用することもできます。

最終修正日: 新規に作成されたり、既存のものの内容が最後に上書きされた日時です。
最終アクセス日: 最後に「開かれた」日時です。内容が書き換えられたかどうかは無関係です。
最終状態変更日: 所有者や所有グループ、パーミッションなどに最後に変更が加えられた日時です。

LinuxOS のファイルやディレクトリには、最終修正日、最終アクセス日、最終状態変更日という三つのタイムスタンプがあり、それぞれについてオプションスイッチが異なります。

find コマンド でタイムスタンプによる検索を行う場合、 デフォルト 「現在時刻から何分(何日)経過したファイル(ディレクトリ)。」 を検索します。一般書式は、

find [検索対象の パス ] [オプション] [整数] ... Enter

となります。

以下にタイムスタンプのオプションの一覧を示します。

アクション 現在時刻からn分経過 現在時刻からn日経過
最終修正日で検索 -mmin n -mtime n
最終アクセス日で検索 -amin n -atime n
最終状態変更日で検索 -cmin n -ctime n

タイムスタンプオプションの一覧(抜粋)

一般にfindコマンドにおける整数の引数は、 n は、数値だけを入力すると「nと等しい」、前 + 記号を付けると「nよりも大きい」、 - 記号を付けると「nよりも小さい」という意味になります。

従って例えば、

find -atime -7 :現在から7日以内にアクセスされたものを検索。

find -atime 7 :現在からちょうど7日前にアクセスされたものを検索。

find -atime +7 :最後のアクセスから7日以上経過したものを検索。

となります。

[tanaka@web1 ~]$ find . -type f -ctime -7Enter
 カレントディレクトリ内で7日以内に状態変更されたファイルを検索↑。 .ドットの説明
./.bash_history
[tanaka@web1 ~]$

また、これらのタイムスタンプオプションを使用して検索を行う場合、 "-daystart" オプションを追加すると、コマンドを実行した日時ではなく、コマンドを実行した日の0時(つまりその日の始まり)を基準に判定を行わせることができます。

シェルスクリプトで用いるfindコマンドについて

find コマンド は、このパートで説明した以外にも非常に多くの検索オプションが用意されています。

例えば所有者やグループ、 パーミッション 、ファイルサイズなどを基準に検索をかけることもできますし、検索対象のディレクトリの階層を制限したり、特定のファイルの タイムスタンプ を基準にしてタイムスタンプ検索をかけることもできます。

更にこれらの検索オプションを複数併用し、論理演算を施すことで非常に複雑な条件検索行うこともできます。

またコマンドラインから検索して結果を画面に表示するだけではなく、検索結果に対して別のコマンドを実行したり、検索結果を様々な書式でファイルに出力したり、という特殊な振る舞いをさせることもできます。

findコマンドの更に詳しい扱い方については、コマンドラインから "man find" で参照してください。市販のコマンドリファレンスを参照するのも良いかもしれません。

findコマンドがこのような複雑な作りになっているのは、ファイル操作を自動化する シェル スクリプト での記述を便利にするためです。

例えば、

「ディレクトリ"/mylog"とその一つ下の任意のディレクトリ内で、最終修正日が7日以上経過した"*.log"を検索し、該当する"*.log"と、"*"の部分だけが同じ別名のファイルを最終修正日に関係なくすべて削除する。」

といった一見複雑そうに思える処理も、findコマンドの豊富なオプションを組み合わせることで、

#!/bin/bash
for fname in $(find /mylog -type f -maxdepth 2 -name "*.log" -mtime +7)
do
rm -f $fname.*
done

のように比較的短いシェルスクリプトで済ませることができるようになります。

locate〜ディレクトリやファイルを高速に検索する

予め os 上に作成されているファイルやディレクトリの データベース を利用し、ファイルやディレクトリを高速に検索する コマンド です。

コマンドの一般書式は、

locate [ファイル名(ディレクトリ名)] ... Enter

となります。

[ファイル名(ディレクトリ名)]には ワイルドカード を用いることもできます。

[tanaka@web1 ~]$ locate "/home/tanaka/x*.zip"Enter
 "/home/tanaka/以下の"x*.zip"を検索します↑。 ワイルドカードの説明
/home/tanaka/xoops-2.0.13a-JP.zip
[tanaka@web1 ~]$

find コマンドは、ファイルシステム上のファイルやディレクトリを検索する非常に強力で柔軟性のあるコマンドですが、検索対象が大きい場合には検索時間がかかってしまうのが難点です。

一方locateコマンドは予め作成されているデータベースを参照するだけですので非常に高速に検索を行うことができます。

ただし、検索の対象となるのは「名称」だけで、必ずルートディレクトリからの検索になります。 タイムスタンプ などの情報を利用した検索などはできません。

またlocateコマンドが参照するデータベースは一日に一回しか更新されませんので、一般的には現在作業中のファイル操作に対して検索を行っても正しい検索結果が得られない点に注意してください。

ちなみに最近の多くの ディストリビューション では、 crond を利用して毎日午前4時ごろ updatedb コマンドを実行し、索引データベースの更新を行うようになっています。

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。