コマンドリファレンス - パターンマッチ検索 grep, pgrep
1. パターンにマッチする行を表示する パターンにマッチする行を表示します。 grep [オプション] パターン [ファイル名|ディレクトリ名] grep は、 ファイル名で名前を指定された入力ファイル (ファイルが指定されてないか、ファイル名の部分に - が指定された場合は標準入力) を読み込み、与えられた パターンにマッチする部分を含む行を探します。 デフォルト動作では、grep はマッチした行を表示します。 2. 正規表現 パターンには正規表現が使用できます。 よく ps と組み合わせて ps ax | grep mysql とかやると 45684 - Is 0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local -- 45938 - I 15:49.89 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/ 6689 3 S+ 0:00.00 grep mysql のような結果となって、grep mysql はいらないんだけどなぁ。となっちゃいますが。 ps ax | grep '[m]ysql' とすれば、 45684 - Is 0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local -- 45938 - I 15:49.89 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/ となって grep の行は表示されません。 ただまぁこれも、下で述べる pgrep -l の方がスマートではあります。 3. オプション わたしが使う主なオプションは以下のものです。
grep [オプション] パターン [ファイル名|ディレクトリ名]
ps ax | grep mysql
45684 - Is 0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local -- 45938 - I 15:49.89 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/ 6689 3 S+ 0:00.00 grep mysql
ps ax | grep '[m]ysql'
45684 - Is 0:00.02 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local -- 45938 - I 15:49.89 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/
-d オプションは、$HOME の .cshrc 関係のファイルを grep するときに役に立ちます。 .* でかかるディレクトリが相当数ありますので。 --exclude=、--include= でワイルドカードを使う際は、"(ダブルコーテーション)で囲みます。 すなわち、あるディレクトリ以下を検索する際、同一ディレクトリに .c と .o が混在していて、当然 .o は除外したい場合 grep -r 検索語 * --exclude="*.o" とします。 .c のみを検索対象とする場合は grep -r 検索語 * --inlcude="*.c" 4. pgrep 名前によるプロセスの検索 grep の派生形? コマンド名は、間違いなく grep から来ていると思いますが、ソースコード的にどうなっているかは、読んでいないのでわかりませんが。 ps に grep をからめたものと思って間違いありません。 pgrep [オプション] パターン わたしが使っているオプションは以下のものです。
grep -r 検索語 * --exclude="*.o"
grep -r 検索語 * --inlcude="*.c"
pgrep [オプション] パターン
詳細を見るならば -lf がいいでしょう。 -l、-lf の表示例 > pgrep -l mysql 45938 mysqld > pgrep -lf mysql 45938 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin --log-error=/var/log/mysql/mysqld.log --pid-file=/var/db/mysql/ns.sing.ne.jp.pid 45684 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/ns.sing.ne.jp.pid --user=mysql
> pgrep -l mysql 45938 mysqld > pgrep -lf mysql 45938 /usr/local/libexec/mysqld --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --plugin-dir=/usr/local/lib/mysql/plugin --log-error=/var/log/mysql/mysqld.log --pid-file=/var/db/mysql/ns.sing.ne.jp.pid 45684 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/var/db/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql --pid-file=/var/db/mysql/ns.sing.ne.jp.pid --user=mysql