grep
ディレクトリ内のコマンドを使用してファイルを検索したいと思います。/var/run
/var/run
システムで実行されているプロセスを保存するファイルにpid
拡張子があります。 pid
.
私が使用しているコマンドsudo grep -nr '*.pid' .
(ディレクトリでこのコマンドを実行しています/var/run
)
出力は表示されません。 Ubuntu 14.04 LTSを使用しています。
答え1
長い話を短く:間違ったツールです。正しいオプションをgrep
使用してください。find
これにより、これがディレクトリへのシンボリックリンクであることstat /var/run
がすぐにわかります。/var/run
/run
$ stat /var/run
File: /var/run -> /run
Size: 4 Blocks: 0 IO Block: 4096 symbolic link
Device: 801h/2049d Inode: 696874 Links: 1
Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-02-07 13:17:01.225178554 +0800
Modify: 2017-12-18 20:44:12.898113636 +0800
Change: 2017-12-18 20:44:12.898113636 +0800
したがって、ディレクトリが必要です/run
。特定のファイル名を持つファイルを検索するには、find
次のコマンドが必要です。
$ find /run -name "*.pid"
/run/charon.pid
/run/starter.charon.pid
/run/dhclient-wlp2s0.pid
このディレクトリの一部のファイルはrootまたは他のシステムユーザーに属しているため、このコマンドを組み合わせる必要がありますsudo
。
または、-L
フラグを使用して、次のシンボリックリンクとfind
呼び出しを許可できます/var/run
。
$ find -L /var/run -name "*.pid"
/var/run/charon.pid
/var/run/starter.charon.pid
/var/run/dhclient-wlp2s0.pid
また、これはgrep
作業に適したツールではありません。grep
テキストパターンを検索するために使用されます。~へファイル名ではなくテキストファイルです。
また、次のように言及しました。
/var/runは、pid拡張子を持つファイルを含む、システムで実行されているプロセスを保存します。
これは実際に間違っています。プロセス情報はに属します/proc
。.pid
このファイルは一部同じプロセスの複数のコピーが実行されないようにするプログラムです。バラよりこのスタックオーバーフロー投稿参考までにこの高い投票の答えunix.seで。このディレクトリはrootユーザーに属しますが、デーモンアプリケーションの実行にのみ使用されるとは思わないでください。 root権限を持つユーザーが起動したスクリプトは、このディレクトリに簡単に書き込むことができます。