Jeg vil søge i filer ved hjælp af grep -kommandoen i biblioteket /var/run

/var/run gemmer de processer, der kører i systemet, og det har filer med pid udvidelse. Jeg ønsker at få en liste over alle filerne med filtypenavnet pid.

Kommando Jeg bruger sudo grep -nr "*.pid" . (Jeg udfører denne kommando fra biblioteket /var/run)

Det viser ingen output. Jeg bruger Ubuntu 14.04 LTS.

Kommentarer

  • Det er ikke en korrekt beskrivelse af /var/run. I bedste fald arbejder du under den misforståelse, at PID-filer er en nødvendighed, når de faktisk de er en farlig og dybt fejlbehæftet mekanisme at verden er åh-så – endelig lærer du endelig visdommen i at slippe af med.

Svar

TL; DR : grep er forkert værktøj, brug find med korrekte indstillinger

Hvis du gør stat /var/run, vil du hurtigt finde ud af, at /var/run er symlink til /run -mappe.

$ 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 har virkelig brug for /run -mappe i stedet. for at søge efter filer med specifikt filnavn skal du have find kommando:

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

Fordi nogle filer i den mappe hører til root eller andre systembrugere, skal du muligvis bruge den kommando med sudo .

Alternativt kan du bruge -L til at tillade følgende symlinks og ringe til find/var/run:

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

Bemærk også, at grep er forkert værktøj til jobbet. grep er til søgning af tekstmønstre inde tekstfiler, ikke i deres filnavne.

Du nævnte også:

/ var / run gemmer de processer, der kører i systemet, og det har filer med pid-udvidelse

Det er faktisk forkert. Processoplysninger hører til /proc. .pid filerne bruges simpelthen af nogle programmer for at forhindre, at flere kopier af den samme proces kører (godt, en af de mulige måder, hvorpå disse filer kan bruges). Se dette stackoverflow-indlæg til reference såvel som dette meget stemt svar på unix.se. Mens biblioteket tilhører rodbrugeren, skal du ikke antage, at det kun er til opstarts- og dæmonapps; scripts startet med rodtilladelser fra bruger kunne skrive til biblioteket lige så let.

Kommentarer

  • Brug af /var/run/ undgår behovet for -L. Husk også, at Ubuntu 14 LTS bruger Upstart, og det der faktisk forhindrer flere kopier af det samme program, der kører som flere processer, er Upstart, der ved, at de ikke starter dem.
  • @JdeBP Undskyld, find /var/run alene fungerer ikke ' i mit tilfælde. find --version rapporter find (GNU findutils) 4.7.0-git. Så i det mindste med min version af GNU find behøver det -L flag. Jeg er ikke sikker på, hvordan BSD find håndterer ting. Rart at vide, at omkring 14.04 Ubuntu ' s Upstart-funktion, selvom det ikke hjælper ' med scripts, der ønsker at undgå flere kopier af selv kører, så i det mindste på askubuntu har vi foreslået at bruge .pid filer til det.
  • Du læser hurtigt, hvad jeg skrev. Læs det langsomt igen, og noter den nøjagtige rækkefølge af tegn. (-:
  • @JdeBP Åh … Tilføjelse af sidste skråstreg fungerer …

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *