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 --versionfind (GNU findutils) 4.7.0-gitを報告します。したがって、少なくとも私のバージョンのGNU findでは、-Lフラグが必要です。 BSD findがどのように処理するかわかりません。 14.04 Ubuntu 'の起動機能について知っておくと便利ですが、'は、自分自身の複数のコピーを避けたいスクリプトには役立ちません。実行中なので、少なくともaskubuntuでは、そのために.pidファイルを使用することを提案しています。
  • 私が書いたものを速読します。もう一度ゆっくり読んで、文字の正確な順序に注意してください。 (-:
  • @JdeBPああ…最後のスラッシュを追加すると…