(最終更新月:2023年4月)
✔当記事はこのような方に向けて書かれています
「特定のファイルを検索したい」
「正確なファイル名がわからないので、関連情報を含むキーワードで検索できるの?」
「Linuxにおけるファイル検索の方法について知りたい」
✔当記事の主な内容は以下のとおり
- Linuxファイル検索の基本的なコマンドの紹介
- 便利なオプションやツールの活用法の解説
- 実践的な具体例を用いた手順やヒントの提供
当記事では、ファイル検索の基本についてはもちろん、初心者の方でもわかりやすいよう、具体的な使い方や便利なオプションなど、ファイル検索についてより詳しく解説しています。
ぜひ最後までご覧ください。
Linuxでのファイル検索における基礎知識
Linuxでのファイル検索について、最低限知っておくべき基本的なことをご覧ください。
いろいろな使い方まで知らなくても、ファイル検索は可能です。
- なぜLinuxでのファイル検索が重要?
- ファイル検索で使える3つのコマンドを簡単に解説
- 検索対象となるディレクトリの指定方法
- 複数の条件を組み合わせた高度なファイル検索方法
なぜLinuxでのファイル検索が重要?
LinuxOSは、さまざまな用途で使われていて、必ずしもGUIがあるとは限りません。
リモートサーバーやLinuxのディストリビューションによっては、デスクトップなどでの操作ができない場合もあるのです。
その中で、特定のファイルを見つけるためには、Linuxのファイル検索を使う必要があります。
ファイル検索の特徴として、以下を覚えておきましょう。
- 検索範囲が非常に広い
- リアルタイムでの結果表示
- 特定の拡張子のファイルだけを検索
- 特定の文字列を含むファイルのみを検索
高機能な検索が簡単に使えるLinuxのファイル検索は、作業効率の向上において、大きな役割を果たしています。
ファイル検索で使える3つのコマンドを簡単に解説
ファイル検索で使える3つのコマンドを見ていきましょう。
まずはどんなものがあるのかがイメージできれば、ファイル検索が簡単なことも理解いただけるはず。
- findコマンド
- grepコマンド
- locateコマンド
1. findコマンド
findコマンドは、特定の条件に合致するファイルを再帰的に検索できます。
使用例としては、以下のとおり。
find / -name itc.txt
ルートディレクトリからitc.txtファイルを探します。
-typeオプションを使えば、ファイル種類の指定も可能です。
詳しくはこちらで解説しています。
2. grepコマンド
grepコマンドでは、ファイル内で指定した文字列を検索できます。
以下が一例です。
grep 'keyword' itc.txt
itc.txtファイル内で’keyword’という文字列を検索します。
-rオプションを使えば、ディレクトリ内の全ファイルを再帰的に検索できます。
詳しくはこちらで解説しています。
3. locateコマンド
locateコマンドは、ファイル名の部分一致でファイルが検索が可能。
locate itc_test
ファイル名に’itc_test’を含むファイルを検索します。
事前にファイル名のデータベースを更新したうえでおこないましょう。
検索対象となるディレクトリの指定方法
検索対象となるディレクトリの指定は、以下のような2ステップで完了します。
- ディレクトリパスの確認
- コマンドの入力
ディレクトリパスの確認
まずは検索対象となるディレクトリの場所を確認します。
Linuxでは「/」以下にフォルダが配置されていることが多いため、この中から検索することがほとんどです。
コマンドの入力
ディレクトリが確認できたら以下のコマンドを入力します。
find [指定したいディレクトリ] -type [ファイルの種類] -name [検索したいファイル名]
例えば、デスクトップ上に配置されたファイルを検索したい場合、以下のようにコマンドを入力します。
$ find ~/Desktop -type f -name itc.txt
「~」はホームディレクトリを表します。検索対象となるディレクトリを指定する際に、ホームディレクトリからの相対パスでも指定できますよ。
複数の条件を組み合わせた高度なファイル検索方法
Linuxでのファイル検索は、複数の条件を組み合わせて、高度なファイル検索も可能。
端末(ターミナル)上でfindコマンドとgrepコマンドなどを組み合わせてる例はこちらです。
find . -name '*.txt' -exec grep -l 'keywordA' {} \; -exec grep -l 'keywordB' {} \;
このコマンドは、現在いるディレクトリから「*.txt」で終わるファイルを探し、grepコマンドで「keywordA」と「keywordB」が含まれるファイルの名前を出力します。
さらに、検索条件に規模や更新日時などの条件まで加えられます。
たとえば100MB以上のサイズで、1週間以内に更新された「*.conf」ファイルを検索するには以下のようにします。
find . -name '*.conf' -size +100M -mtime -7
findコマンドによるファイル検索方法
findコマンでの検索について、詳しく見ていきます。
findコマンドで検索するにもポイントがあるのです。
- findコマンドの基本的な使い方
- findコマンドのオプション
- findコマンドでファイル名やファイル属性、ファイル内容を検索する方法
- findコマンドの結果を他コマンドにパイプして処理する方法
findコマンドそのものについて詳しく知りたい方はこちら。
findコマンドの基本的な使い方とオプション
findコマンドは、Linuxにおいてファイル検索をおこなうもので、基本的な構文は以下のとおり。
find <検索対象のディレクトリ> <検索条件>
検索条件は以下のように指定できます。
- -name <ファイル名>:ファイル名が一致するファイルを検索
- -type <ファイルタイプ>:ファイルタイプ(ファイル、ディレクトリなど)で検索
- -mtime <日数>:最終更新日から指定した日数以内に更新されたファイルで検索
具体例として、~/Download以下で、ファイル名に「itc」が含まれ、最終更新日が1日以内のファイルを検索してみます。
find ~/Download -name ""*itc*"" -mtime -1 -type f
findコマンドでファイル名やファイル属性、ファイル内容を検索する方法
findコマンドを使って、具体的にファイル名や属性、内容を検索してみます。
以下の手順で検索をおこないます。
1. 検索範囲を指定する
findコマンドの基本的な構文は「find [検索範囲] [検索条件] [アクション]」です。
最初に検索範囲を指定するのです。
例えば、/home/linuxuserディレクトリ以下のファイルを対象とする場合は、「/home/linuxuser」と指定します。
2. 検索条件を指定する
次に、検索条件を指定します。
例えば、ファイル名が「itc.txt」であるファイルを対象とする場合は、「-name itc.txt」と指定します。
他にも、ファイルの更新日時やサイズなど、いくつかの条件を組み合わせることも可能。
複数の条件を指定する場合は、それらを丸括弧で括り、「-a」オプション(論理積)や「-o」オプション(論理和)で結合するのです。
3. アクションを指定する
最後に、検索結果に対するアクションを指定します。
例えば検索結果を表示する場合は、「-print」と指定します。また、特定のファイルを削除する場合は、「-delete」と指定します。
findコマンドの結果を他コマンドにパイプして処理する方法
findコマンドは、検索したファイルをそのまま表示するだけではなく、他のコマンドと組み合わせて、より複雑な検索が可能です。
ここではfindコマンドの結果を他のコマンドにパイプして処理する方法をお伝えします。
$ find ~/Documents -name "*.txt" -type f | grep "itc"
/home/yulikepython/Documents/itcdir/itc_zipped.txt
/home/yulikepython/Documents/itcdir/diffar/first/infirst.txt
/home/yulikepython/Documents/itcdir/diffar/second/insecond.txt
/home/yulikepython/Documents/itcdir/itc2.txt
/home/yulikepython/Documents/itcdir/itc.txt
もしくは下のように「wc」コマンドを使用して、検索結果の行数や単語数をカウントすることもできます。
$ find ~/Documents/itcdir -name "*.txt" -type f | xargs wc -l
1 /home/yulikepython/Documents/itcdir/itc_zipped.txt
2 /home/yulikepython/Documents/itcdir/diffar/first/infirst.txt
4 /home/yulikepython/Documents/itcdir/diffar/second/insecond.txt
3 /home/yulikepython/Documents/itcdir/itc2.txt
28 /home/yulikepython/Documents/itcdir/itc.txt
38 合計
wcコマンドは行数や単語数をカウントできるもので、詳しく知りたい方はこちらをどうぞ。
xargsコマンドは、検索結果を空白文字で分割して、複数の引数として渡すために利用されます。
findコマンドの結果を他のコマンドにパイプして処理すれば、効率的にファイル操作をおこなえます。
今後の作業に活用してみましょう。
locateコマンドによるファイル検索方法
locateコマンドでもファイル検索は可能です。
ひとつのやり方として、locateコマンドについても見ていきましょう。
- locateコマンドの基本的な使い方
- locateコマンドのオプション
- locateコマンドで高速にファイルを検索する方法
- locateコマンドのデータベースを更新する方法
locateコマンドの基本的な使い方
locateを利用すると、指定したファイル名や作成日時などの条件に合致するファイルを瞬時に検索できます。
具体的な使い方は以下のとおり。
locate [検索したいファイル名・パターン]
もし、「locateがt見つかりません」というエラーが出てしまう場合は、以下のコマンドでインストールしましょう。
sudo apt install mlocate
例として、「access」という単語付を含むファイルを探してみます。
$ locate /etc/*access*
/etc/apache2/conf-available/other-vhosts-access-log.conf
/etc/apache2/conf-enabled/other-vhosts-access-log.conf
/etc/apache2/mods-available/access_compat.load
/etc/apache2/mods-enabled/access_compat.load
/etc/apparmor.d/abstractions/dbus-accessibility
/etc/apparmor.d/abstractions/dbus-accessibility-strict
/etc/brltty/Contraction/latex-access.ctb
/etc/java-11-openjdk/accessibility.properties
/etc/java-11-openjdk/management/jmxremote.access
/etc/security/access.conf
かなり高速で検索ができたのではないでしょうか?
locateコマンドのオプション
locateコマンドのオプションについても見てみましょう。
代表的なものは以下のとおりです。
- -r:正規表現を使用してファイルを検索
- -q:locateが出力するエラーメッセージを抑止
- -i:大文字・小文字を区別せずに検索
オプションを効果的に使用することで、Linux上でのファイル検索をより効率的かつ正確におこなえます。
locateコマンドが高速に検索できる理由
locateコマンドは非常に高速です。
その理由は、ファイルシステム全体をスキャンするのではなく、データベースによるインデックス検索をおこなっているからです。
また、データベースによる検索により、正規表現を用いたパターンマッチングで、より柔軟な検索が可能。
ただしデータベースはリアルタイムで同期されているわけではないので、新しいファイルが反映されないこともあります。
もし新しいファイルも反映させたいのであれば、updatedbコマンドで手動更新をおこなわなければなりません。
locateコマンドのデータベースを更新する方法
locateコマンドでは、事前にデータベースを更新する必要があります。
データベースを更新しないと、新しいファイルが作成された際に、検索できない場合があるからです。
データベースの更新方法は簡単で、以下のコマンドを入力します。
sudo updatedb
このコマンドを入力することで、システム内の全てのファイル・ディレクトリの情報がデータベースにk書き込まれるのです。
更新処理には数分程度かかるものの、その後におこなうファイル検索はスムーズになります。
whereisコマンドによるファイル検索方法
whereisコマンドによるファイル検索方法もご紹介します。
whereisコマンドを使うと、プログラムファイルなどのパスが簡単に探せるのです。
- whereisコマンドの基本的な使い方
- whereisコマンドのオプション
- whereisコマンドでコマンドやライブラリの場所を検索する方法
- whereisコマンドと他のコマンドを組み合わせた応用的な使い方
whereisコマンドの基本的な使い方
whereisコマンドによる検索方法は以下のとおり。
whereis [検索したいファイルの名前]
たとえば、pythonパッケージのパスを確認したいときはこのようになります。
$ whereis python
python: /usr/bin/python3.8 /usr/bin/python /usr/bin/python2.7-config /usr/bin/python3.8-config /usr/bin/python2.7 /usr/lib/python3.8 /usr/lib/python3.9 /usr/lib/python2.7 /etc/python3.8 /etc/python2.7 /usr/local/lib/python3.8 /usr/local/lib/python2.7 /usr/include/python3.8 /usr/include/python2.7 /usr/share/python /home/yulikepython/.pyenv/shims/python3.10 /home/yulikepython/.pyenv/shims/python /home/yulikepython/.pyenv/shims/python3.10-config
また、Whereisコマンドは、複数のファイルを検索することも可能です。
whereis [検索したいファイルの名前1] [検索したいファイルの名前2]
$ whereis python php
python: /usr/bin/python3.8 /usr/bin/python /usr/bin/python2.7-config /usr/bin/python3.8-config /usr/bin/python2.7 /usr/lib/python3.8 /usr/lib/python3.9 /usr/lib/python2.7 /etc/python3.8 /etc/python2.7 /usr/local/lib/python3.8 /usr/local/lib/python2.7 /usr/include/python3.8 /usr/include/python2.7 /usr/share/python /home/yulikepython/.pyenv/shims/python3.10 /home/yulikepython/.pyenv/shims/python /home/yulikepython/.pyenv/shims/python3.10-config
php: /usr/bin/php7.4 /usr/bin/php /usr/lib/php /etc/php /usr/share/php7.4-json /usr/share/php7.4-readline /usr/share/php7.4-opcache /usr/share/php7.4-zip /usr/share/php7.4-mbstring /usr/share/php7.4-curl /usr/share/php7.4-mysql /usr/share/php7.4-intl /usr/share/php7.4-gd /usr/share/php7.4-xml /usr/share/php7.4-soap /usr/share/php7.4-common /usr/share/php7.4-xmlrpc /usr/share/man/man1/php.1.gz
whereisコマンドのオプション
whereisコマンドの代表的なオプションはこちらです。
- -bオプション :コマンドの実行ファイルのみを探す
- -mオプション:検索する場所を手動で指定
- -uオプション:キャッシュを更新
- -fオプション :パス名の代わりに実行ファイルやマニュアルファイルの名前のみを表示
- -Vオプション:whereisコマンドのバージョン情報を表示
オプションを使いこなすことで、デフォルトには備わっていない機能が使えます。
whereisコマンドでコマンドやライブラリの場所を検索する方法
whereisコマンドでは、指定されたファイルの実行可能ファイル、ソースコード、マニュアルページが格納されている場所を検索します。
whereisコマンドを使用してコマンドやライブラリの場所を検索するには、次のようにコマンドを入力します。
whereis [オプション] [検索するファイル]
例えば、Apacheの実行可能ファイルやマニュアルページの場所を検索する場合、次のように入力します。
whereis apache
whereisコマンドは、指定されたファイルがある場所を迅速に検索することができますが、ファイルシステムを網羅的に検索しないため、検索結果が正確ではない場合があります。
目的に合わせて使用しましょう。
whereisコマンドと他のコマンドを組み合わせた応用的な使い方
whereisコマンドはほかのコマンドと合わせることで、より効果的に使えます。
- whichコマンド
- findコマンド
- grepコマンド
whichコマンドと組み合わせる
whichコマンドは、指定されたコマンドの場所を検索するために使用されます。
whereisコマンドと組み合わせれば、指定されたコマンドの場所をさらに詳しく調べることができます。
例えば、以下のコマンドは、whichコマンドでlsコマンドの場所を特定し、whereisコマンドを使用して、lsコマンドのバイナリ、マニュアル、およびソースの場所を確認する方法です。
$ which ls /usr/bin/ls $ whereis -b -m -s ls ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
findコマンドと組み合わせる
findコマンドは、指定された条件に一致するファイルを検索するために使用されます。
whereisコマンドと組み合わせれば、特定のファイルの場所を検索できます。
例えば以下のコマンドは、/usr/share/manディレクトリ内で、gzip形式のマニュアルページファイルを検索し、whereisコマンドを使用してその場所を確認する方法です。
$ find /usr/share/man -type f -name '*.gz' | xargs whereis
kbookmarkmerger.1: /usr/share/man/man1/kbookmarkmerger.1.gz
wireless.7: /usr/share/man/man7/wireless.7.gz
iwevent.8: /usr/share/man/man8/iwevent.8.gz
iwlist.8: /usr/share/man/man8/iwlist.8.gz
grepコマンドと組み合わせる
grepコマンドは、指定されたパターンに一致する行を検索するためのもの。
whereisコマンドと組み合わせることで、特定のパスから特定のファイルのみを検索できます
たとえば、/usr/bin/以下にある、”zip”という文字列が含まれるコマンドを検索したい場合は、以下のようなコマンドを使用できます。
$ whereis zip | grep "/usr/bin" zip: /usr/bin/zip /usr/share/man/man1/zip.1.gz
grepのフィルタリング機能をうまく活用しましょう。
grepコマンドによるファイル検索方法
grepコマンドによるファイル検索も知っておくと便利です。
grepはほかのコマンドと組み合わせても使える便利なコマンドです。。
- grepコマンドの基本的な使い方
- grepコマンドのオプション
- grepコマンドで文字列や正規表現を使ってファイルを検索する方法
- grepコマンドと他のコマンドとの組み合わせ
grepコマンドの基本的な使い方
grepコマンドでは、特定の文字列を含むファイルや行を検索したり、正規表現を用いてパターンを検索したりできます。
grep [検索ワード] [検索対象ファイル名]
例えば、/var/www/htmlディレクトリ以下のファイルから、”hello”という文字列を検索する場合は、以下のようにコマンドを入力します。
grep "index" /var/www/html/*
詳しい使い方はこちらの記事でも解説しています。
grepコマンドのオプション
grepコマンドのオプションを使うことで、より精密にファイル検索が可能。
- -r:再帰的に検索する場合に利用
- -i:大文字小文字を区別せずに検索する場合に利用
- -E:細かな検索条件を指定
- -v:検索結果に含まれない文字列を指定
いろいろと使いこなせれば、より効率が上がります。
grepコマンドで文字列や正規表現を使ってファイルを検索する方法
具体的なgrepコマンドの使い方はこちら。
grep “検索文字列” ファイル名
検索文字列で、検索したい文字列を指定。
ファイル名に、検索対象のファイル名を入力します。
指定したファイル名に含まれるすべての行から、検索文字列に一致するものが検索されるのです。
また正規表現でも以下のとおりの構成となります。
grep -E “正規表現” ファイル名
-Eオプションを使用することで、正規表現を使用した検索が可能になります。
具体例をご覧いただきます。
#appleを探す
grep -E "^apple" itc_fruits.txt
#dogを探す
grep -E "\bdog\b" itc_pets.txt
#数値が含まれる行を探す
grep -E ""[0-9]"" ファイル名
grepコマンドと他のコマンドとの組み合わせ
grepコマンドは、ほかのこまんどと組み合わせで使われることも多いです。
その理由はほかのコマンドにはない機能をもっているから。
例えばfindコマンドとの組み合わせでは、指定したディレクトリ配下のすべてのファイルから文字列の検索ができます。
find ~/ -type f -exec grep "python" {} \;
grepコマンドとsedコマンドを組み合わせることで、テキストファイル内の文字列の置換も可能。
sed -i 's/検索したい文字列/置換したい文字列/g' ファイル名 | grep ""置換したい文字列""
まとめ:Linuxのファイル検索で作業効率を上げよう
当記事の内容をまとめます。
- Linuxのファイル検索に使えるコマンドはたくさんある
- 複数のコマンドを組み合わせればより精密な検索ができる
- それぞれの特徴をおさえて場面によって使い分けよう
Linuxでは、さまざまなコマンドで、ファイル検索が可能。
ただしそれぞれのコマンドには、特徴があります。
特徴をおさえたうえで、コマンドを使用したり、ときには組み合わせながら試したりしてみてください。