Práce v terminálu – VI. kapitola

Terminál VI.

Další část, minule jsem byl celkem stručný, tak se Vám to pokusím teď vynahradit. Dnes tedy sort a cut a na závěr procesy.

Příkazy cut a sort

Mějme soubor name.txt naplněný náhodnými jmény a nějakou informací za dvojtečkou (Kdo pozná klíč podle jakého jsem to určoval já? Spell-check chyby mi odpusťte, prosím)

user@computer:$

$ cat name.txt

Lightbringer, Arthas: Holy light

Stormrage, Ilidan: Mana break

Shadowsong, Tyrande: Trueshoot aura

Stormrage, Furion: Force of Nature

Proudmoore, Jaina: Blizzard

Bronzebeard, Muradin: Avatar

Seřadit si tento soubor lze velmi snadno pomocí sort

user@computer:$ sort name.txt

Bronzebeard, Muradin: Avatar

Lightbringer, Arthas: Holy light

Proudmoore, Jaina: Blizzard

Shadowsong, Tyrande: Trueshoot aura

Stormrage, Furion: Force of Nature

Stormrage, Ilidan: Mana break

změny se samozřejmě v souboru neuloží, výsledek musíme „předat“ pomocí „> name.txt“ (nebudu ukazovat). Uvažujme situaci, že chceme znát pouze jména, pak použijeme program cut. Používáme takto

user@computer:$ cut -d: -f1 name.txt

Lightbringer, Arthas

Stormrage, Ilidan

Shadowsong, Tyrande

Stormrage, Furion

Proudmoore, Jaina

Bronzebeard, Muradin

Pokusím se vysvětlit jak tento příkaz vlastně fungoval, mám to trochu experimentálně vyzkoušené, takže to bude trochu neobratné vyjádření. -d určuje oddělovač, zde je to dvojtečka, a -f určuje počet polí, řekněme úseků, zde jeden. Zde se velmi hodí použít zase „|“ (pipe, trubku) a použít to jako zdroj pro sort, takže dostaneme jména setříděná podle abecedy.

Ale představme si situaci, kdy nás zajímají pouze křestní jména. Ty jak je vidět jsou oddělena čárkou, proto zvolíme možnost přes pipe.

user@computer:$ cut -d: -f1 name.txt | cut -d, -f2
Arthas

Ilidan

Tyrande

Furion

Jaina

Muradin

Takže setřídění souboru a následné vytažení jmen se dá tedy provést takto:

user@computer:$ cut -d: -f1 name.txt | sort > jmena.txt

ondrej@ondrej-Lenovo-IdeaPad-Y570 ~/test $ cat jmena.txt

Bronzebeard, Muradin

Lightbringer, Arthas

Proudmoore, Jaina

Shadowsong, Tyrande

Stormrage, Furion

Stormrage, Ilidan

První řádek provede „useknutí“ první části následné srovnání a nakonec uložení do nového souboru jmena.txt. Pomocí „cat“ obsah souboru jmena.txt pouze vypisuji. K příkazu sort se již vracet nebudu, tak zde řeknu nějaké přepínače zajímavé, které jsem vyčetl z „man sort“. Spoustu dalších (zajímavých) tam ještě zbylo, tak se podívejte. Můj výběr je: -r rezeverzní seřazení (Z → A), -f ingoruje velikost písmen, takže mezi s a S není rozdíl. A pokud by jste měli zájem na tom setřídit něco tak, aby to bylo nesetříděné, tak použijte přepínač -R, který způsobí nesystematičnost.

Příkaz cut může také sloužit k vypsání určitého počtu bajtů, neříkám znaků, protože některá kódování to tak nemají, ale lze to tak zjednodušeně říci. Uvedu příklad, protože na něm to půjde nejlépe poznat.

user@computer:$ cut -c 1-10 jmena.txt

Bronzebear

Lightbring

Proudmoore

Shadowsong

Stormrage,

Stormrage,

Přepínač -c a v kombinaci s číselným vyjádřením určuje kolik bajtů má být vypsáno. Já v příkladu užil 1-10 (první až desátý), ale lze také použít jedno číslo. Lze taková „tabulčička“ jak lze tento parametr použít. Všechny hodnoty jsou včetně.

N

Ntý bajt

N-

Od Ntého bajtu až do konce řádku

N-M

Ntý až Mtý znak

-M

Od prvního až k Mtému řádku

Procesy

Přerušení procesu

Jádro procesům posílám různé signály z mnoha roztodivných důvodů. Signál SIGINT je vyslán, pokud uživatel stiskne Ctrl + C. Předává se procesu, který je v spuštěn v terminálu v popředí. Pokud proces nemá nastavenou vlastní reakci na SIGINT, pak dojde přerušení procesu. Například já, pokud potřebuji zjistit, jestli jsem připojen k internetu, použiji ping atlas.cz a pak tento příkaz ukončím Ctrl + C.

Zobrazení běžících procesů a jejich ukončování

Příkaz ps (processes) zobrazuje běžící příkazy v aktuálním terminálu

user@computer: # ps
PID TTY TIME CMD
15775 pts/1 00:00:00 su
15783 pts/1 00:00:00 bash
15828 pts/1 00:00:00 ps

Vidíte, že já mám spuštěné su (super user), bash (samotný terminál) a příkaz ps, kterým jsem to logicky zjišťovat. Vidíme 4 sloupce, Process ID označuje číslo, TTY označuje terminál, ve kterém to probíhám (příkaz tty lze použít k dohledání, v jaké terminálu právě jsem). TIME, je čas, jak dlouho běží příkaz (tady si nejsem jist). CMD (Command) je jakým příkazem byl spuštěn. Při použití přepínače -e vypíše ps mnohem více procesů, včetně grafických.

user@computer:$ ps -e
PID TTY TIME CMD
1 ? 00:00:00 init
2 ? 00:00:00 kthreadd
3 ? 00:00:01 ksoftirqd/0
6 ? 00:00:00 migration/0
7 ? 00:00:00 watchdog/0
20 ? 00:00:00 cpuset
… spoustu vynechaných příkazů …
15981 ? 00:00:00 kworker/u:3
16043 ? 00:00:00 firefox
16078 pts/2 00:00:00 ps

V případě, že chcete nějaký příkaz ukončit je na místě použít kill a PID (Process ID). V ps jsem si našel, že firefox má PID 16043 (pokud něco cíleně hledám, tak se hodí použít ps -e | grep firefox, zde samozřejmě firefox, ale vy si dejte, co sami potřebujete.)

user@computer:$ kill 16043

Spouštění příkazu na pozadí

Dělat tomuhle samostatnou kapitolu… Jednoduše stačí za příkaz přidat znak ampersand „&“ (na mé české klávesnici Alt Gr + C). Terminál vypíše krátké hlášení obsahující PID nového procesu a kontrola se vrátí zpět terminálu, takže můžete dále zadávat příkazy. Pokud máte třeba více oken, tak terminál vás bude při každém novém spouštění informovat i o dalších procesech běžících v pozadí. O „zabíjení“ procesů napsal velmi pěkný článek napsal Satapouch

V příštím díle se sice „vrátíme“ zpět, ale rozšíříme informace a poznatky o příkazech, které jsme si již ukázali, budu to muset trochu nastudovat, už nám trochu přituhuje.

Odkaz na další díl

Štítky , , .Záložka pro permanentní odkaz.

Autor: Ondřej Kolín

Student MFF, spokojený uživatel Linux Mint a mám spoustu zajímavých koníčků, které sem raději nebudu ani psát...

Jedna reakce na Práce v terminálu – VI. kapitola

  1. Ondřej Kolín říká:

    Karamba! Koukám, že tu mám nějak sfušovaná terminálová okna… Zejtra na to mrknu, dnes není energie (vel. pondělí)