fájlokban szeretnék keresni a grep paranccsal a /var/run

/var/run könyvtárban tárolja a rendszerben futó folyamatokat, és pid kiterjesztés. Szeretnék listát szerezni az összes fájlról, amelyek kiterjesztése pid.

Parancs a sudo grep -nr "*.pid" . parancsot használom (ezt a parancsot a /var/run könyvtárból hajtom végre)

Nem mutat kimenetet. Az Ubuntu 14.04 LTS-t használom.

Megjegyzések

  • Ez nem megfelelő leírás a /var/run -ről. Legjobb esetben azzal a félreértéssel küzd, hogy a PID fájlok szükségszerűek, miközben valójában veszélyes és mélyen hibás mechanizmusok , amelyeken a világ igen végül utoljára megtanulta a megszabadulás bölcsességét.

Válasz

TL; DR : grep nem megfelelő eszköz, használja a find helyes opciókkal

Ha stat /var/run műveletet hajt végre, akkor hamar kiderül, hogy a /var/run szimbólum a /run könyvtár.

$ 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 

Tehát valóban /run könyvtárra van szükséged. meghatározott fájlnévvel rendelkező fájlok kereséséhez find parancsra van szükség:

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

Mivel a könyvtárban található egyes fájlok root vagy más rendszerhasználók esetén előfordulhat, hogy ezt a parancsot a sudo .

Alternatív megoldásként használhatja a -L jelzőt a következő szimpla linkek engedélyezéséhez, és felhívhatja az find on /var/run:

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

Ne feledje, hogy grep nem megfelelő eszköz a munkához. A grep szövegminták keresésére szolgál belső szövegfájlokban, nem a fájlneveikben.

Említette:

/ var / run tárolja a rendszerben futó folyamatokat, és pid kiterjesztésű fájlokkal rendelkezik

Ez valójában helytelen. A folyamatinformációk a /proc fájlba tartoznak. A .pid fájlokat egyszerűen néhány program használja annak megakadályozása, hogy ugyanazon folyamat több példánya lefusson (nos, ezeknek a fájloknak az egyik lehetséges módja). Lásd ezt a stackoverflow bejegyzést , valamint ez a sok szavazatot kapott válasz az unix.se fájlon. Bár a könyvtár a root felhasználóhoz tartozik, kérjük, ne feltételezze, hogy csak indító és démonos alkalmazásokra vonatkozik; A felhasználó root engedélyei ugyanolyan egyszerűen írhatnak a könyvtárba.

Megjegyzések

  • A /var/run/ elkerüli a -L szükségességét. Ne feledje azt is, hogy az Ubuntu 14 LTS az Upstart szoftvert használja, és ami valójában megakadályozza, hogy ugyanazon program több példánya több folyamatként futjon, az az Upstart, hogy nem tudja elindítani őket. Az “e4b71a65eb”>

önmagában nem működik ' az én esetemben. find --version jelentések find (GNU findutils) 4.7.0-git. Tehát legalább a GNU find verziómnál -L zászlóra van szükség. Nem vagyok biztos abban, hogy a BSD find hogyan kezeli a dolgokat. Örülök, hogy körülbelül 14.04 Ubuntu ' s Upstart funkció, bár ez nem segít ' azokban a szkriptekben, amelyek el akarják kerülni az én többszörös másolatát fut, ezért legalább az askubuntuban javasoljuk, hogy ehhez használja .pid fájlokat.

  • Gyorsan olvassa el, amit írtam. Lassan olvassa el újra, és jegyezze fel a karakterek pontos sorrendjét. (-:
  • @JdeBP Ó … Végső perjel hozzáadása működik …
  • Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük