在 /var/run 中使用 grep 命令按文件扩展名搜索

在 /var/run 中使用 grep 命令按文件扩展名搜索

我想使用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 权限启动的脚本可以同样轻松地写入该目录。

相关内容