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

  • To není správný popis /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.

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.

  • Rychle si přečtete, co jsem napsal. Pomalu si to znovu přečtěte a všimněte si přesného pořadí znaků. (-:
  • @JdeBP Oh … Přidávání závěrečných děl …
  • Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *