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

  • Det är inte en korrekt beskrivning av /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.

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/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 rapporterar find (GNU findutils) 4.7.0-git. Så åtminstone med min version av GNU find behöver den -L flagga. Jag är inte säker på hur BSD find 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 …

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *