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

  • Questa non è una descrizione corretta di /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.

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 segnala find (GNU findutils) 4.7.0-git. Quindi almeno con la mia versione di GNU find ha bisogno del flag -L. Non sono sicuro di come BSD find 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 …

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *