Jag vill söka efter filer med kommandot grep
i katalogen /var/run
/var/run
lagrar de processer som körs i systemet och den har filer med pid
tillägg. Jag vill få en lista över alla filer med tillägget pid
.
Kommando Jag använder sudo grep -nr "*.pid" .
(jag kör detta kommando från katalogen /var/run
)
Det visar ingen utdata. Jag använder Ubuntu 14.04 LTS.
Kommentarer
Svar
TL; DR : grep
är fel verktyg, använd find
med rätt alternativ
Om du gör stat /var/run
kommer du snabbt att upptäcka att /var/run
är symlink till /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 behöver verkligen /run
katalog istället. för att söka efter filer med specifikt filnamn behöver du find
kommando:
$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid
Eftersom vissa filer i den katalogen tillhör root eller andra systemanvändare, du kan behöva använda det kommandot med sudo
.
Alternativt kan du använda -L
-flaggan för att tillåta följande symlänkar och ringa find
på /var/run
:
$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid
Observera också att grep
är fel verktyg för jobbet. grep
är för att söka textmönster inuti textfiler, inte i deras filnamn.
Du nämnde också:
/ var / run lagrar de processer som körs i systemet och den har filer med pid-tillägg
Det är faktiskt felaktigt. Processinformation hör till /proc
. .pid
-filerna används helt enkelt av vissa program för att förhindra att flera kopior av samma process körs (ja, ett av möjliga sätt som dessa filer kan användas). Se detta stackoverflow-inlägg för referens, samt det här högt röstade svaret på unix.se. Även om katalogen tillhör root-användaren, vänligen anta inte att den bara är för start- och daemon-appar; skript initierade med rootbehörigheter från användare kan skriva till katalogen lika enkelt.
Kommentarer
- Använda
/var/run/
undviker behovet av-L
. Tänk också på att Ubuntu 14 LTS använder Upstart, och det som faktiskt förhindrar att flera kopior av samma program körs som flera processer är Upstart att inte starta dem. - @JdeBP Tyvärr,
find /var/run
ensam fungerar inte ' i mitt fall.find --version
rapporterarfind (GNU findutils) 4.7.0-git
. Så åtminstone med min version av GNUfind
behöver den-L
flagga. Jag är inte säker på hur BSDfind
hanterar saker. Trevligt att veta att cirka 14.04 Ubuntu ' s Uppstartsfunktion, men det hjälper inte ' med skript som vill undvika flera kopior av själv kör, så åtminstone på askubuntu har vi föreslagit att använda.pid
filer för det. - Du läser snabbt vad jag skrev. Läs det igen långsamt och notera den exakta sekvensen av tecken. (-:
- @JdeBP Åh … Lägga till sista snedstreck fungerar …
/var/run
. I bästa fall arbetar du under missförståndet att PID-filer är en nödvändighet, när de faktiskt de är en farlig och djupt bristfällig mekanism att världen är i oh-så – äntligen lära sig äntligen visdomen att bli av med.