GNU/Linux >> Znalost Linux >  >> Linux

Jak používat a maximálně využívat příkaz fuser v Linuxu

Předpokládejme, že máte za úkol identifikovat procesy, které používají konkrétní soubor, a poté je jeden po druhém zabít – to vše je třeba provést z příkazového řádku. Co bys dělal? No, pokud jste nováček v příkazovém řádku, jsem si jistý, že byste byli bezradní a požádali vás o pomoc.

Ale profesionálové z příkazového řádku budou pravděpodobně mít představu, že v Linuxu existuje nástroj příkazového řádku, který vám umožní identifikovat procesy na základě souborů (nebo adresářů nebo soketů), ke kterým přistupují. Nejen, že vám tento nástroj také umožňuje zabít tyto procesy, takže nemusíte používat kill nebo zabít příkazy samostatně. Nástroj příkazového řádku, o kterém mluvíme, je fuser .

Pokud tento nástroj ještě neznáte a chcete pochopit, jak jej používat, nehledejte dál, protože v tomto článku probereme zapékací jednotku podrobně, prostřednictvím několika snadno pochopitelných příkladů.

Než však pokročíme dále, mějte prosím na paměti, že všechny příklady, příkazy a pokyny uvedené v tomto tutoriálu byly testovány na Ubuntu 16.04 LTS a zapékací jednotce verze příkazu, kterou jsme použili, je 22.21.

Příkaz fixačního zařízení Linux

fixační jednotka příkaz - jak jsem již uvedl výše - se primárně používá k identifikaci procesů pomocí souborů, adresářů nebo soketů. Nástroj v podstatě zobrazuje PID procesů, které používají soubor, jehož název je předán jako argument příkazu.

Zde je zapékací jednotka příkaz v akci ve své nejzákladnější podobě:

Jak je zřejmé z výše uvedeného snímku obrazovky, zkusili jsme použít zapékací jednotku abyste věděli, které procesy používají /home/himanshu adresář a příkaz - ve svém výstupu - vytvořil seznam ID procesů. Zatím je to dobré, ale je tu pár problémů.

Za prvé, co je to 'c' připojené ke každému PID? Rychlý pohled na manuálovou stránku příkazu odhalí, že ve výchozím režimu zobrazení je zapékací jednotka nejen zobrazí PID procesů přistupujících k souboru nebo adresáři, ale také zobrazí typ přístupu.

Každý typ přístupu je označen písmenem:

  • c – aktuální adresář.
  • e – spuštěný spustitelný soubor.
  • f - otevřít soubor. f je ve výchozím režimu zobrazení vynecháno.
  • F - otevření souboru pro zápis. F je ve výchozím režimu zobrazení vynecháno.
  • r – kořenový adresář.
  • m – mmapovaný soubor nebo sdílená knihovna.

Nyní, když se vrátíme k příkladu, o kterém jsme diskutovali, písmeno „c“ ve výstupu označuje, že všechny procesy, jejichž PID jsou uvedeny ve výstupu, přistupují k /home/himanshu adresář jako jejich aktuální adresář.

Mějte na paměti, že proces může mít více typů přístupů k souboru nebo adresáři. Například následující výstup ukazuje, že ke kořenovému (/) adresáři přistupuje mnoho procesů jako k jejich aktuálnímu i kořenovému adresáři.

Až dosud zapékací jednotka výstup, který vidíme, obsahuje pouze ID procesů a nic víc než to. Nebude lepší, když se zobrazí i názvy procesů? K tomu musíte použít -v možnost příkazového řádku. Následuje příklad:

Chcete-li ke každému PID připojit uživatelské jméno vlastníka procesu, použijte -u možnost příkazového řádku. Zde je příklad:

Poznámka:Pokud je příslušný soubor nebo adresář umístěn na připojeném souborovém systému nebo blokovém zařízení, použijte -m možnost příkazového řádku. „Jsou uvedeny všechny procesy, které přistupují k souborům v daném systému souborů,“ říká manuálová stránka. "Pokud je zadán soubor adresáře, automaticky se změní na NAME/. pro použití libovolného systému souborů, který může být připojen k tomuto adresáři."

Jak ukončit procesy pomocí fixační jednotky

Nyní, když jsme probrali zapékací jednotku základy, pojďme k úkolu, který jsem zmínil na začátku – jak zabít procesy pomocí fuseru ? Vezměme si pro tento případ jednodušší příklad. Udělám to tak, že spustím spustitelný soubor a zatímco běží, pokusím se proces ukončit pomocí fuseru .

Zde je tedy spustitelný soubor, který byl spuštěn:

A zde je zapékací jednotka příkaz, který by měl v ideálním případě ukončit proces iniciovaný test-fuser spustitelný.

fuser -v -k test-fuser

Než budu pokračovat a vykonám tento příkaz, dovolte mi, abych vám řekl, že -k možnost příkazového řádku říká zapékací jednotce zabít proces (nebo procesy) pomocí souboru nebo adresáře.

Zde je to, co se stalo, když byl výše zmíněný příkaz proveden:

Jak je zřejmé z výše uvedeného snímku obrazovky, pomocí -k možnost příkazového řádku s fixační jednotkou zabil test-fuser proces. Abyste se ujistili, že zapékací jednotka příkaz požaduje potvrzení uživatele před ukončením procesu, použijte -i volba. Viz příklad níže:

Následuje několik důležitých podrobností týkajících se fixační jednotky, které byste měli znát při používání volby -k:

  • Při použití -k odesílá příkaz fuser standardně signál SIGKILL. Toto chování však můžete změnit pomocí volby -SIGNAL.
  • Proces fixační jednotky se nikdy neukončí sám, ale může zabít jiné procesy fixační jednotky.

zapékací jednotka – další podrobnosti

Kromě dosud zmíněných informací je zde několik dalších detailů, které stojí za to mít na paměti. Všechny tyto informace jsou přístupné tak, že přejdete na manuálovou stránku příkazu. Následuje například informace, že zapékací jednotka seznam manuálových stránek v sekci 'Omezení':

       Processes accessing the same file or file system several times  in  the
       same way are only shown once.

       If the same object is specified several times on the command line, some
       of those entries may be ignored.

       fuser may only be able to gather partial information  unless  run  with
       privileges.   As  a consequence, files opened by processes belonging to
       other users may not be listed and  executables  may  be  classified  as
       mapped only.

       Installing  fuser SUID root will avoid problems associated with partial
       information, but may be undesirable for security and privacy reasons.

       udp and tcp name spaces, and UNIX domain sockets can't be searched with
       kernels older than 1.3.78.

       Accesses by the kernel are only shown with the -v option.

       The  -k  option  only  works  on processes.  If the user is the kernel,
       fuser will print an advice, but take no action beyond that.

Závěr

Jak jste již pochopili, zapékač je velmi užitečný nástroj příkazového řádku v Linuxu. Dobrá věc je, že nástroj není náročný na pochopení ani na používání, takže s ním mohou snadno začít i nováčci. Jedním aspektem, kterého jsme se zde nedotkli, je to, že příkaz umožňuje identifikovat a dokonce ukončit procesy běžící na konkrétních portech, což z něj dělá těžko ignorovatelný nástroj i pro správce sítě.


Linux
  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak používat příkaz id v Linuxu

  1. Jak vytvořit alias a používat příkaz Alias ​​v Linuxu

  2. Jak nainstalovat a používat příkaz Ping v Linuxu

  3. Jak používat příkaz „screen“ v Linuxu

  1. Jak používat příkaz historie Linuxu

  2. Jak používat příkaz xargs pro Linux

  3. Jak používat Linuxový příkaz tee