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)
$ 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
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
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.
Arthas
Ilidan
Tyrande
Furion
Jaina
Muradin
Takže setřídění souboru a následné vytažení jmen se dá tedy provést takto:
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
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.
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.)
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
Karamba! Koukám, že tu mám nějak sfušovaná terminálová okna… Zejtra na to mrknu, dnes není energie (vel. pondělí)