Vreau să căutăm fișiere utilizând comanda grep
în directorul /var/run
/var/run
stochează procesele care rulează în sistem și are fișiere cu pid
extensie. Vreau să obțin o listă cu toate fișierele cu extensia pid
.
Comandă pe care o folosesc sudo grep -nr "*.pid" .
(execut această comandă din directorul /var/run
)
Nu afișează nicio ieșire. Folosesc Ubuntu 14.04 LTS.
Comentarii
Răspuns
TL; DR : grep
este un instrument greșit, utilizați find
cu opțiuni corecte
Dacă faceți stat /var/run
veți afla rapid că /var/run
este link simbolic către /run
director.
$ 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
Deci chiar aveți nevoie de director /run
. pentru căutarea fișierelor cu nume de fișier specific, aveți nevoie de comanda find
:
$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid
Deoarece unele fișiere din acel director aparțin root sau alți utilizatori ai sistemului, poate fi necesar să utilizați acea comandă cu sudo
.
Alternativ , puteți utiliza semnalizatorul -L
pentru a permite următoarele link-uri simbolice și să apelați find
pe /var/run
:
$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid
Rețineți, de asemenea, că grep
este un instrument greșit pentru job. grep
este pentru căutarea tiparelor de text în fișiere text, nu în numele fișierelor acestora.
De asemenea, ați menționat:
/ var / run stochează procesele care rulează în sistem și are fișiere cu extensie pid
Acest lucru este de fapt incorect. Informațiile despre proces aparțin /proc
. Fișierele .pid
sunt utilizate pur și simplu de unele programe pentru a preveni executarea mai multor copii ale aceluiași proces (ei bine, unul dintre modurile posibile în care aceste fișiere pot fi utilizate). Consultați această postare de flux stack pentru referință, precum și acest răspuns extrem de votat pe unix.se. În timp ce directorul aparține utilizatorului root, vă rugăm să nu presupuneți că este doar pentru aplicațiile de pornire și daemon; scripturi inițiate cu permisiunile root ale utilizatorului pot scrie în director la fel de ușor.
Comentarii
- Utilizarea
/var/run/
va evita necesitatea-L
. Rețineți, de asemenea, că Ubuntu 14 LTS folosește Upstart și că ceea ce împiedică de fapt să ruleze mai multe copii ale aceluiași program ca mai multe procese este Upstart știind să nu le pornească. - @JdeBP Ne pare rău,
find /var/run
singur nu funcționează ' în cazul meu.find --version
rapoartefind (GNU findutils) 4.7.0-git
. Deci, cel puțin cu versiunea mea de GNUfind
are nevoie de steagul-L
. Nu sunt sigur despre modul în care BSDfind
gestionează lucrurile. Mă bucur să știu că aproximativ 14.04 caracteristica Upstart a Ubuntu ' s, deși asta nu ' nu ajută cu scripturi care doresc să evite mai multe copii ale auto rulează, deci cel puțin pe askubuntu v-am sugerat să folosiți fișiere.pid
pentru asta. - Citiți rapid ceea ce am scris. Citiți-l din nou încet și notați secvența exactă a caracterelor. (-:
- @JdeBP Oh … Adăugarea lucrărilor finale oblice …
/var/run
. În cel mai bun caz, lucrați sub înțelegerea greșită că fișierele PID sunt o necesitate, atunci când de fapt sunt un mecanism periculos și profund defectuos la care lumea se află -în ultimul timp învățând în cele din urmă înțelepciunea de a scăpa.