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
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
informafind (GNU findutils) 4.7.0-git
. Entonces, al menos con mi versión de GNUfind
necesita la marca-L
. No estoy seguro de cómo BSDfind
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 …
/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.