Voglio cercare file utilizzando il comando grep
nella directory /var/run
/var/run
memorizza i processi in esecuzione nel sistema e ha file con pid
estensione. Voglio ottenere un elenco di tutti i file con lestensione pid
.
Comando che sto usando sudo grep -nr "*.pid" .
(sto eseguendo questo comando dalla directory /var/run
)
Non mostra alcun output. Uso Ubuntu 14.04 LTS.
Commenti
Risposta
TL; DR : grep
è uno strumento sbagliato, utilizza find
con le opzioni corrette
Se fai stat /var/run
scoprirai rapidamente che /var/run
è un collegamento simbolico a /run
directory.
$ 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
Quindi hai davvero bisogno della directory /run
. Come per cercare file con un nome file specifico, è necessario il find
comando:
$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid
Perché alcuni file in quella directory appartengono a root o altri utenti di sistema, potrebbe essere necessario utilizzare quel comando con sudo
.
In alternativa , puoi utilizzare il flag -L
per consentire i seguenti link simbolici e chiamare find
su /var/run
:
$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid
Tieni inoltre presente che grep
è uno strumento sbagliato per il lavoro. grep
serve per cercare schemi di testo allinterno di file di testo, non nei loro nomi di file.
Hai anche menzionato:
/ var / run memorizza i processi in esecuzione nel sistema e ha file con estensione pid
“In realtà è sbagliato. Le informazioni sul processo appartengono a /proc
. I file .pid
vengono semplicemente utilizzati da alcuni programmi per impedire lesecuzione di più copie dello stesso processo (beh, uno dei possibili modi in cui questi file possono essere utilizzati). Vedi questo post sullo stackoverflow per riferimento, oltre a questa risposta molto votata su unix.se. Sebbene la directory appartenga allutente root, non dare per scontato che sia solo per le app di avvio e daemon; script avviati con i permessi di root dellutente potrebbero scrivere nella directory altrettanto facilmente.
Commenti
- Utilizzando
/var/run/
eviterà la necessità di-L
. Tieni inoltre presente che Ubuntu 14 LTS utilizza Upstart e la cosa che impedisce effettivamente lesecuzione di più copie dello stesso programma come processi multipli è che Upstart sa di non avviarli. - @JdeBP Spiacenti,
find /var/run
da solo non ' funziona nel mio caso.find --version
segnalafind (GNU findutils) 4.7.0-git
. Quindi almeno con la mia versione di GNUfind
ha bisogno del flag-L
. Non sono sicuro di come BSDfind
gestisce le cose. Bello sapere che circa la 14.04 Ubuntu ' s funzione Upstart, anche se questo non ' aiuta con gli script che vogliono evitare copie multiple di self in esecuzione, quindi almeno su askubuntu abbiamo suggerito di utilizzare i file.pid
per questo. - Leggi velocemente quello che ho scritto. Leggilo di nuovo lentamente e osserva lesatta sequenza di caratteri. (-:
- @JdeBP Oh … Aggiunta di lavori con barra finale …
/var/run
. Nella migliore delle ipotesi stai lavorando sotto il malinteso che i file PID siano una necessità, quando in realtà sono un meccanismo pericoloso e profondamente imperfetto che il mondo è a oh-così -lungo ultimo finalmente imparare la saggezza di sbarazzarsi di.