Help us understand the problem. What is going on with this article?

Linux上での検索のまとめ

More than 1 year has passed since last update.

Linux上での検索のまとめ

Linux上で何か探したり、調べたりする手段のまとめ

マニュアルを探す

分からないコマンドや用語がでてきたら、とりあえずmanでマニュアルを引いてみる。
man 調べたい単語でマニュアルが表示される。
例えば、manコマンドそのものについて調べたい時

$ man man

カーソルの上下で行単位にスクロール。ctrl-fで次ページ、ctrl-bで前ページ
/キーワードで文中のキーワードの箇所にジャンプ、qで終了。
※この操作は後ででてくるlessをはじめ、多くのコマンドで似たような動作をする。

マニュアルがない場合はキーワード検索

該当する項目がなければ-k キーワードオプションをつけると
キーワードで指定した語句を含むマニュアルの一覧が表示される。

$ man password
password というマニュアルはありません
$ man -k password
vigr (8)             - password, group とそれぞれの shadow ファイルを編集する
vipw (8)             - password, group とそれぞれの shadow ファイルを編集する
crypt (3)            - password and data encryption
crypt_r (3)          - password and data encryption
endpwent (3)         - get password file entry
<省略>

一覧が流れてしまう場合は後ろに| lessをつける

$ man -k password | less

これも、カーソルの上下で行単位にスクロール。ctrl-fで次ページ、ctrl-bで前ページ
/キーワードで文中のキーワードの箇所にジャンプ、qで終了。

マニュアルの章

マニュアルの一覧に表示される(3)等の数字はマニュアルのsection、章を示す。
以下、man manから抜粋

1   実行プログラムまたはシェルコマンド
2   システムコール (カーネルが提供する関数)
3   ライブラリー呼び出し (プログラムライブラリーに含まれる関数)
4   特殊ファイル (通常 /dev 配下に存在するファイル)
5   ファイルの書式と慣習 (例: /etc/passwd)
6   ゲーム
7   その他いろいろなもの   (マクロパッケージや慣習などを含む)。  例えば  man(7)  や
    groff(7)。
8   システム管理コマンド (通常は root 用)
9   カーネルルーチン [非標準]

で、マニュアルを表示する場合、man 数字 キーワードで章を指定してマニュアルが表示される。

$ man passwd  # section1のpasswdのマニュアルが表示される
$ man 5 passwd  # section5のpasswdのマニュアルが表示される

ファイルを検索したい

LinuxのHDDの中から、ある特定のファイルを探し出す手順。

  • whichはコマンドを名前で検索する
  • locateはファイル名で検索する。ファイル名はバッチ処理でDB化されていて速い
  • findはファイルの名前や日付などメタ情報で検索する
  • grepはファイルの中身で検索する

コマンドを検索(which)

環境変数PATHで設定されているディレクトリから指定された名前のコマンドを検索する
同名のコマンドを複数インストールしている場合などに、実際に使われているのがどれかを調べるのに使う。

コマンド検索
$ which python
~/.pyenv/shims/python

ファイル名で検索(locate)

コマンドに限らず、名前からファイルを検索するにはlocateを使う。
locateはファイルの一覧を一日に一回程度のバッチ処理でDB化しているので、リアルタイムな検索はできない。
DBの更新はupdatedbでできるが、それよりは後述のfindを使う方がよい。

locateの例
$ locate syslog.conf
/etc/rsyslog.conf
/usr/lib/dracut/modules.d/98syslog/rsyslog.conf
/usr/share/doc/sudo-1.8.23/examples/syslog.conf
/usr/share/man/ja/man5/syslog.conf.5.gz
/usr/share/man/man5/rsyslog.conf.5.gz

ファイル名で検索(find)

下記の書式で検索。検索場所はパスを指定(今いる場所なら.)、ファイル名はワイルドカードが使える(*で任意の文字列など)

書式
find 検索場所 -name ファイル名
find /usr -name *zip*
>> /usr/bin/unzip
>> /usr/bin/zip
>> /usr/lib/klibc/bin/gunzip
<以下、略>

日時で検索(アクセス日、更新日など)

最後にアクセスしたのが何日前かで検索する。今日は0で昨日は1

書式
find ディレクトリ -atime 日数

カレントディレクトリ以下で今日アクセスしたファイルを表示する

find ./ -atime 0
>> ./log
>> ./README.md
>> ./sample.jpg

何日以内の場合は日数にマイナスをつける
同様に何日前より以前にという場合はプラスをつける

find ./ -atime -3  # 3日以内にアクセスしたファイル
find ./ -atime +3  # 最終アクセスが3日以前のファイル

オプションを変えることで、単位や検索項目を変更できる
詳細はman findを参照

  • 更新日で検索するには上記のatimeをmtimeに変更する
  • 日付でなく、分で検索したい場合はatimeをaminにする

ファイルの中身で検索

テキストファイルから文字列を検索するにはgrepコマンドを使う

基本形
$ grep 検索する文字列 対象のテキストファイル

/etc/以下の全てのファイルから'passwd'という文字列を検索して色付きで表示する例

色付きでサブディレクトリも検索
$ grep --color -sr passwd /etc/*
  • -s:エラー表示をしない
  • -r:サブディレクトリも検索する
  • --color:色付きで表示する

表示が画面外に流れる場合は後ろに| lessをつける

lessをつける
$ grep --color -sr passwd /etc/* | less

拡張子を指定する場合などはincludeを使う

拡張子を指定する
$ grep --color -sr passwd /etc --include="*.conf"

出力結果はファイル名:文字列を含む行

出力例
/etc/nsswitch.conf:passwd:     files sss

grepの亜種

man -k grepでgrepの亜種コマンドが表示される。
詳細はman コマンド名を参照

grepの亜種の例
bzgrep (1)           - bzip2 圧縮されている可能性のあるファイルで、正...
egrep (1)            - パターンにマッチする行を表示する
fgrep (1)            - パターンにマッチする行を表示する
grep (1)             - パターンにマッチする行を表示する
pgrep (1)            - 名前や各種属性に基づくプロセスの閲覧とシグナ...
zgrep (1)            - 圧縮されている可能性のあるファイルで、正規表...
git-grep (1)         - Print lines matching a pattern
grep (1p)            - search a file for a pattern
grepdiff (1)         - show files modified by a diff containing a regex
msggrep (1)          - pattern matching on message catalog
pm-utils-bugreport-info.sh (8) - Print pm-utils bug report
Tcl_InvalidateStringRep (3) - manipulate Tcl objects
xzegrep (1)          - search compressed files for a regular expression
xzfgrep (1)          - search compressed files for a regular expression
xzgrep (1)           - search compressed files for a regular expression
zipgrep (1)          - search files in a ZIP archive for lines matching a pattern

どこを探すか

どういうファイルがどの辺に置かれているのかの目安。

ファイルの種類 主な置き場所
設定ファイル /etc/, /usr/local/etc
ドキュメントやconf /usr/share, /usr/share/doc
通常のコマンド /bin, /usr/bin, /usr/local/bin
その他のコマンド /etc/rc.d, /usr/libexec
ライブラリのヘッダー(*.h) /usr/include, /usr/local/include
ライブラリ本体(*.so) /lib, /lib64, /usr/lib, /usr/lib64
ログ /var/log

※/usr/local以下はBSD系のOSの場合、非常によく使われる。

ログを探す

システムやサービスのエラーはログに記録される場合がおおい。そのログの探し方

ログの場所

一般的には/var/log以下に置かれる。
ls /var/logで大体どのようなログがあるか一覧できる。

システム標準のログファイルについては/etc/rsyslog.confで定義されており、下記のようなものがある。

/var/log/messages
/var/log/secure
/var/log/maillog
/var/log/cron
/var/log/spooler
/var/log/boot.log

他に下記のようなログもある

  • /var/log/dmesg:OS起動時のブートログ
  • /var/log/Xorg:Xwindow(GUI)のログ
  • /var/log/yum.log:yumのログ(CentOSの場合)

ログファイルから特定の語句を検索する

grep使う。検索語句にサービス名やログの種類(panic等)などを入れてみる
もしくはサービスのマニュアルや設定からログファイルを特定する
※ログファイルは一般ユーザーで読めない場合が多いので、sudoをつける

$ sudo grep httpd *

ログの種類(errやwarn等)はマニュアルを参照

$ man syslog.conf

ログの最初や最後を表示する

ログファイルの中身を軽く確認したい場合。

$ sudo head messages
$ sudo tail messages

ログをリアルタイムで監視する

ログファイルの更新をリアルタイムで検索したい場合

$ sudo tail -f /var/log/messages

更に、語句で絞り込みたい場合

$ sudo tail -f /var/log/messages | grep systemd
nab
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away