Jeg vil søke i filer ved å bruke grep -kommandoen i katalogen /var/run

/var/run lagrer prosessene som kjører i systemet, og den har filer med pid utvidelse. Jeg ønsker å få en liste over alle filene med filendelsen pid.

Kommando jeg bruker sudo grep -nr "*.pid" . (jeg kjører denne kommandoen fra katalogen /var/run)

Det viser ingen utdata. Jeg bruker Ubuntu 14.04 LTS.

Kommentarer

  • Det er ikke en korrekt beskrivelse av /var/run. I beste fall arbeider du under misforståelsen om at PID-filer er en nødvendighet, mens de faktisk er en farlig og dypt feil mekanisme at verden er i oh-så -Last sist å lære visdommen i å bli kvitt.

Svar

TL; DR : grep er feil verktøy, bruk find med riktige valg

Hvis du gjør stat /var/run, vil du raskt finne ut at /var/run er symlink til /run katalog.

$ 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 

Så du trenger virkelig /run katalog i stedet. for å søke etter filer med spesifikt filnavn, trenger du find kommando:

$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid 

Fordi noen filer i den katalogen tilhører root eller andre systembrukere, må du kanskje bruke den kommandoen med sudo .

Alternativt kan du bruke -L -flagget for å tillate følgende symlenker og ringe find/var/run:

$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid 

Vær også oppmerksom på at grep er feil verktøy for jobben. grep er for å søke på tekstmønstre inne tekstfiler, ikke i filnavnene.

Du nevnte også:

/ var / run lagrer prosessene som kjører i systemet, og den har filer med pid-utvidelse

Det er faktisk feil. Prosessinformasjon hører til i /proc. .pid -filene brukes ganske enkelt av noen programmer for å forhindre at flere kopier av samme prosess kjører (vel, en av mulige måter disse filene kan brukes på.) Se dette stackoverflow-innlegget for referanse, samt dette høyst stemmede svaret på unix.se. Mens katalogen tilhører rotbrukeren, kan du ikke anta at den bare er for oppstarts- og demonapps; skript initiert med root-tillatelser fra bruker kan skrive til katalogen like enkelt.

Kommentarer

  • Bruk /var/run/ vil unngå behovet for -L. Husk også at Ubuntu 14 LTS bruker Upstart, og det som faktisk forhindrer at flere kopier av det samme programmet kjører som flere prosesser, er Upstart å vite ikke å starte dem.
  • @JdeBP Beklager, find /var/run alene fungerer ikke ' i mitt tilfelle. find --version rapporter find (GNU findutils) 4.7.0-git. Så i det minste med min versjon av GNU find trenger den -L flagg. Jeg er ikke sikker på hvordan BSD find håndterer ting. Fint å vite at omtrent 14.04 Ubuntu ' s Oppstartsfunksjon, selv om det ikke hjelper ' med skript som vil unngå flere kopier av selv. kjører, så i det minste på askubuntu har vi antydet å bruke .pid filer til det.
  • Du leser raskt det jeg skrev. Les det sakte igjen, og legg merke til den nøyaktige rekkefølgen av tegn. (-:
  • @JdeBP Oh … Legger til endelige skråstrek fungerer …

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *