Quiero buscar archivos usando el comando grep en el directorio /var/run

/var/run almacena los procesos que se ejecutan en el sistema y tiene archivos con pid extensión. Quiero obtener una lista de todos los archivos con la extensión pid.

Comando Estoy usando sudo grep -nr "*.pid" . (estoy ejecutando este comando desde el directorio /var/run)

No muestra salida. Estoy usando Ubuntu 14.04 LTS.

Comentarios

  • Esa no es una descripción correcta de /var/run. En el mejor de los casos, está trabajando bajo la idea errónea de que los archivos PID son una necesidad, cuando en realidad son un mecanismo peligroso y profundamente defectuoso que el mundo está en oh-so -Por último, finalmente aprendiendo la sabiduría de deshacerse de.

Responder

TL; DR : grep es una herramienta incorrecta, use find con las opciones correctas

Si lo hace stat /var/run, rápidamente descubrirá que /var/run es un enlace simbólico a /run directorio.

$ 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 

Entonces realmente necesitas el directorio /run en su lugar. Como para buscar archivos con un nombre de archivo específico, necesita el comando find:

$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid 

Porque algunos archivos en ese directorio pertenecen a root u otros usuarios del sistema, es posible que deba usar ese comando con sudo .

Alternativamente , puede usar el indicador -L para permitir los siguientes enlaces simbólicos y llamar a find en /var/run:

$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid 

Tenga en cuenta también que grep es una herramienta incorrecta para el trabajo. grep es para buscar patrones de texto dentro archivos de texto, no en sus nombres de archivo.

También mencionaste:

/ var / run almacena los procesos que se ejecutan en el sistema y tiene archivos con extensión pid

Eso es realmente incorrecto. La información del proceso pertenece a /proc. Los archivos .pid simplemente los utilizan algunos programas para evitar que se ejecuten varias copias del mismo proceso (bueno, una de las posibles formas en que se pueden usar estos archivos). Consulte esta publicación de stackoverflow como referencia, así como esta respuesta altamente votada en unix.se. Si bien el directorio pertenece al usuario root, no asuma que es solo para aplicaciones de inicio y demonio; scripts iniciados con los permisos de root del usuario podrían escribir en el directorio con la misma facilidad.

Comentarios

  • Usando /var/run/ evitará la necesidad de -L. También tenga en cuenta que Ubuntu 14 LTS usa Upstart, y lo que en realidad impide que múltiples copias del mismo programa se ejecuten como múltiples procesos es que Upstart sabe que no debe iniciarlas.
  • @JdeBP Lo sentimos, find /var/run solo no ' no funciona en mi caso. find --version informa find (GNU findutils) 4.7.0-git. Entonces, al menos con mi versión de GNU find necesita la marca -L. No estoy seguro de cómo BSD find maneja las cosas. Es bueno saber que acerca de 14.04 Ubuntu ' s función Upstart, aunque eso no ' t ayuda con scripts que quieren evitar múltiples copias de sí mismo ejecutándose, así que al menos en askubuntu hemos sugerido utilizar archivos .pid para eso.
  • Lees rápidamente lo que escribí. Vuelva a leerlo lentamente y observe la secuencia exacta de caracteres. (-:
  • @JdeBP Oh … Añadiendo la barra final funciona …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *