Ik wil bestanden zoeken met de opdracht grep in de map /var/run

/var/run slaat de processen op die in het systeem worden uitgevoerd en het heeft bestanden met pid extensie. Ik wil een lijst krijgen van alle bestanden met de extensie pid.

Commando dat ik gebruik sudo grep -nr "*.pid" . (ik voer dit commando uit vanuit de directory /var/run)

Het toont geen output. Ik gebruik Ubuntu 14.04 LTS.

Opmerkingen

Antwoord

TL; DR : grep is verkeerde tool, gebruik find met de juiste opties

Als je stat /var/run doet, “kom je er snel achter dat /var/run een symlink is naar /run directory.

$ 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 

Dus je hebt echt een /run directory nodig. voor het zoeken naar bestanden met een specifieke bestandsnaam, heb je find commando nodig:

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

Omdat sommige bestanden in die map behoren tot root of andere systeemgebruikers, moet u die opdracht mogelijk gebruiken met sudo .

Als alternatief kunt u de vlag -L gebruiken om volgende symlinks toe te staan en find op /var/run:

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

Houd er ook rekening mee dat grep is het verkeerde hulpmiddel voor de klus. grep is voor het zoeken naar tekstpatronen binnen tekstbestanden, niet in hun bestandsnamen.

Je noemde ook:

/ var / run slaat de processen op die in het systeem worden uitgevoerd en het heeft bestanden met de extensie pid

Dat is eigenlijk onjuist. Procesinformatie hoort thuis in /proc. De .pid -bestanden worden gewoon gebruikt door sommige programmas om te voorkomen dat meerdere kopieën van hetzelfde proces worden uitgevoerd (nou ja, een van de mogelijke manieren waarop deze bestanden kunnen worden gebruikt). Zie deze stackoverflow-post voor referentie, evenals dit sterk gestemde antwoord op unix.se. Hoewel de directory van de rootgebruiker is, mag u er niet van uitgaan dat het alleen voor startup- en daemon-apps is; scripts die zijn gestart met rootrechten van de gebruiker zouden net zo gemakkelijk naar de directory kunnen schrijven.

Reacties

  • Gebruik van /var/run/ zal de noodzaak van -L vermijden. Houd er ook rekening mee dat Ubuntu 14 LTS Upstart gebruikt, en het ding dat feitelijk voorkomt dat meerdere kopieën van hetzelfde programma worden uitgevoerd als meerdere processen, is dat Upstart weet ze niet te starten.
  • @JdeBP Sorry, find /var/run alleen werkt in mijn geval niet '. find --version rapporteert find (GNU findutils) 4.7.0-git. Dus met mijn versie van GNU find heeft het in ieder geval een -L vlag nodig. Ik weet niet zeker hoe BSD find dingen afhandelt. Leuk om te weten dat ongeveer 14.04 Ubuntu ' s Upstart-functie, hoewel dat ' niet helpt met scripts die meerdere kopieën van zichzelf willen vermijden draaien, dus in ieder geval op askubuntu hebben we voorgesteld om daarvoor .pid bestanden te gebruiken.
  • Je leest snel wat ik schreef. Lees het opnieuw langzaam en let op de exacte volgorde van de tekens. (-:
  • @JdeBP Oh … Laatste schuine strepen toevoegen …

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *