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

  • Aceasta nu este o descriere corectă a /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.

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 rapoarte find (GNU findutils) 4.7.0-git. Deci, cel puțin cu versiunea mea de GNU find are nevoie de steagul -L. Nu sunt sigur despre modul în care BSD find 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 …

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *