我想使用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
文件只是被使用一些程序来防止同一进程的多个副本运行(嗯,这是使用这些文件的可能方法之一)。看这个 stackoverflow 帖子供参考,以及这个高票答案在unix.se上。虽然该目录属于 root 用户,但请不要认为它仅用于启动和守护程序应用程序;用户使用 root 权限启动的脚本可以同样轻松地写入该目录。