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
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
på /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
rapporterfind (GNU findutils) 4.7.0-git
. Så i det mindste med min version af GNUfind
behøver det-L
flag. Jeg er ikke sikker på, hvordan BSDfind
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 …
/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.