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
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.
/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.