grep
コマンドを使用してファイルを検索したいディレクトリ/var/run
/var/run
には、システムで実行されているプロセスが格納され、pid
拡張子。拡張子がpid
のすべてのファイルのリストを取得したい。
コマンドsudo grep -nr "*.pid" .
を使用しています(このコマンドはディレクトリ/var/run
から実行しています)
出力が表示されません。 Ubuntu 14.04LTSを使用しています。
コメント
回答
TL; DR :grep
は間違ったツールです。find
を使用してください正しいオプションを使用
stat /var/run
を実行すると、/var/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
on /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
ファイルは単に一部のプログラムによって使用されます。同じプロセスの複数のコピーが実行されないようにするため(これらのファイルを使用できる方法の1つです)。このスタックオーバーフローの投稿と
unix.seでのこの非常に投票された回答。ディレクトリはrootユーザーに属していますが、起動アプリとデーモンアプリ専用であると想定しないでください。ユーザーによるroot権限は、同じように簡単にディレクトリに書き込むことができます。
コメント
-
/var/run/
は、-L
の必要性を回避します。また、Ubuntu 14 LTSはUpstartを使用し、同じプログラムの複数のコピーが複数のプロセスとして実行されるのを実際に防ぐのは、Upstartがそれらを開始しないことを認識していることです。 - @JdeBP申し訳ありませんが、
find /var/run
だけでは'私の場合は機能しません。find --version
はfind (GNU findutils) 4.7.0-git
を報告します。したがって、少なくとも私のバージョンのGNUfind
では、-L
フラグが必要です。 BSDfind
がどのように処理するかわかりません。 14.04 Ubuntu 'の起動機能について知っておくと便利ですが、'は、自分自身の複数のコピーを避けたいスクリプトには役立ちません。実行中なので、少なくともaskubuntuでは、そのために.pid
ファイルを使用することを提案しています。 - 私が書いたものを速読します。もう一度ゆっくり読んで、文字の正確な順序に注意してください。 (-:
- @JdeBPああ…最後のスラッシュを追加すると…
/var/run
の正しい説明ではありません。せいぜい、PIDファイルが必要であるという誤解の下で働いているのですが、実際にはそれらは危険で深刻な欠陥のあるメカニズムであり、世界はまあまあです。 -最後に、ついに駆除の知恵を学びました。