Haluan etsiä tiedostoja komennolla grep
hakemistossa /var/run
/var/run
tallentaa järjestelmässä käynnissä olevat prosessit ja sillä on tiedostoja pid
-laajennus. Haluan saada luettelon kaikista tiedostoista, joiden tiedostotunniste on pid
.
Komento Käytän sudo grep -nr "*.pid" .
(Suoritan tämän komennon hakemistosta /var/run
)
Se ei näytä lähtöä. Käytän Ubuntu 14.04 LTS: ää.
Kommentit
Vastaa
TL; DR : grep
on väärä työkalu, käytä find
oikeilla vaihtoehdoilla
Jos teet stat /var/run
, huomaat nopeasti, että /var/run
on symlinkki osastoon /run
hakemisto.
$ 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
Joten tarvitset todella /run
hakemiston. Tiedostojen etsimiseen tietyllä tiedostonimellä tarvitset find
-komennon:
$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid
Koska jotkut hakemiston tiedostot kuuluvat pääkäyttäjän tai muiden järjestelmän käyttäjien kanssa, sinun on ehkä käytettävä komentoa sudo
.
Vaihtoehtoisesti voit käyttää -L
-merkkiä sallimaan seuraavien symlinkkien käyttö ja soittamalla find
päällä /var/run
:
$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid
Huomaa myös, että grep
on väärä työkalu työhön. grep
on tarkoitettu tekstimallien etsimiseen sisältä tekstitiedostoja, ei niiden tiedostonimissä.
Mainitsit myös:
/ var / run tallentaa järjestelmässä käynnissä olevat prosessit ja sillä on pid-tiedostotiedostoja
Se on oikeastaan virheellinen. Prosessitiedot kuuluvat /proc
-kansioon. jotkut ohjelmat käyttävät tiedostoja .pid
. estää useiden kopioiden suorittaminen samasta prosessista (hyvin, yksi mahdollisista tavoista käyttää näitä tiedostoja). Katso tämä pinonkulun viesti viitteeksi sekä tämä erittäin suosittu vastaus osoitteessa unix.se. Vaikka hakemisto kuuluu pääkäyttäjälle, älä oleta, että se koskee vain käynnistys- ja daemon-sovelluksia; komentosarjat aloitettu Käyttäjän juurioikeudet voisivat kirjoittaa hakemistoon yhtä helposti.
Kommentit
-
/var/run/
välttää tarvetta-L
. Muista myös, että Ubuntu 14 LTS käyttää Upstartia, ja asia, joka tosiasiassa estää saman ohjelman useita kopioita käynnissä useina prosesseina, on Upstart tietäen, ettei niitä aloiteta. - @JdeBP Anteeksi,
find /var/run
ei toimi ' minun tapauksessani.find --version
raportoifind (GNU findutils) 4.7.0-git
. Joten ainakin minun versiossani GNUfind
se tarvitsee-L
-lipun. En ole varma siitä, miten BSDfind
käsittelee asioita. Kiva tietää, että noin 14.04 Ubuntu ' s Upstart -ominaisuus, vaikka se ei auta ' apuna skripteissä, jotka haluavat välttää useita itsekopioita käynnissä, joten ainakin askubuntussa olemme ehdottaneet.pid
-tiedostojen käyttämistä siihen. - Luet nopeasti mitä kirjoitin. Lue se hitaasti uudelleen ja huomioi tarkka merkkijono. (-:
- @JdeBP Voi … Viimeisen kauttaviivan lisääminen toimii …
/var/run
. Parhaimmillaan työskentelet väärinkäsityksessä siitä, että PID-tiedostot ovat välttämättömyys, vaikka itse asiassa ne ovat vaarallinen ja erittäin puutteellinen mekanismi , jolla maailma on oh-so viimeinen oppinut viimein viisauden päästä eroon.