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