Chci prohledávat soubory pomocí příkazu grep
v adresáři /var/run
/var/run
ukládá procesy běžící v systému a má soubory s pid
přípona. Chci získat seznam všech souborů s příponou pid
.
Příkaz, který používám sudo grep -nr "*.pid" .
(tento příkaz provádím z adresáře /var/run
)
Nezobrazuje žádný výstup. Používám Ubuntu 14.04 LTS.
Komentáře
Odpovědět
TL; DR : grep
je nesprávný nástroj, použijte find
se správnými možnostmi
Pokud tak učiníte stat /var/run
, rychle zjistíte, že /var/run
je symbolický odkaz na /run
adresář.
$ 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
Takže místo toho opravdu potřebujete /run
adresář. pro vyhledávání souborů se specifickým názvem souboru potřebujete find
příkaz:
$ find /run -name "*.pid" /run/charon.pid /run/starter.charon.pid /run/dhclient-wlp2s0.pid
Protože některé soubory v tomto adresáři patří root nebo jiní uživatelé systému, možná budete muset použít tento příkaz s sudo
.
Alternativně můžete použít příznak -L
a povolit následující symbolické odkazy a volat find
on /var/run
:
$ find -L /var/run -name "*.pid" /var/run/charon.pid /var/run/starter.charon.pid /var/run/dhclient-wlp2s0.pid
Vezměte prosím na vědomí, že grep
je špatný nástroj pro práci. grep
slouží k vyhledávání textových vzorů uvnitř textových souborů, nikoli v jejich názvech souborů.
Také jste zmínili:
/ var / run ukládá procesy běžící v systému a má soubory s příponou pid
To je ve skutečnosti nesprávné. Informace o procesu patří do /proc
. Soubory .pid
jednoduše používají některé programy aby se zabránilo spuštění více kopií stejného procesu (dobře, jedním z možných způsobů, jak lze tyto soubory použít). Odkaz najdete v tomto příspěvku stackoverflow a také v tato vysoce hlasovaná odpověď na unix.se. I když adresář patří uživateli root, nepředpokládejte, že je určen pouze pro spouštěcí a démonové aplikace; skripty spuštěné pomocí oprávnění uživatele root mohla do adresáře zapisovat stejně snadno.
Komentáře
- Použití
/var/run/
vyhnete se potřebě-L
. Mějte také na paměti, že Ubuntu 14 LTS používá Upstart a věc, která ve skutečnosti brání spuštění více kopií stejného programu jako více procesů, je Upstart, který ví, že je nespustí. Samotný „e4b71a65eb“>
v mém případě nefunguje '. find --version
hlásí find (GNU findutils) 4.7.0-git
. Tedy alespoň u mé verze GNU find
je potřeba -L
příznak. Nejsem si jistý, jak BSD find
zachází s věcmi. Je hezké vědět, že asi 14.04 Ubuntu ' s funkcí Upstart, ačkoli to nepomůže ' pomoci se skripty, které se chtějí vyhnout více kopií sebe sama běží, takže alespoň na askubuntu navrhujeme použít soubory .pid
.
/var/run
. V nejlepším případě pracujete s nepochopením, že soubory PID jsou nutností, i když ve skutečnosti jsou nebezpečným a hluboce vadným mechanismem , kterým je svět oh-so -dlouho poslední konečně naučit se moudrosti zbavit se.