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
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
på /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
rapporterfind (GNU findutils) 4.7.0-git
. Så i det minste med min versjon av GNUfind
trenger den-L
flagg. Jeg er ikke sikker på hvordan BSDfind
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 …
/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.