1. Báza znalostí
  2. Cloud a servery
  3. Nástroje
  4. GNU Coreutils – triedenie, štatistiky a bezpečnosť

GNU Coreutils – triedenie, štatistiky a bezpečnosť

V tejto časti seriálu o nástrojoch balíka GNU Coreutils sa zameriame na triedenie obsahu súboru, a tiež na štatistiky ohľadom počtu znakov, slov a riadkov v súbore. Keďže v linuxovom svete je všetko súbor, na praktickom príklade si ukáže, ako jednoznačne identifikovať konkrétny obsah konkrétneho súboru a výrazne tak znížiť riziko neoprávnenej zmeny obsahu súborov treťou stranou.

Tip: Všetky príkazy si jednoducho otestujte s WebSupport VPS. Vyskúšajte prémiový virtuálny server zdarma ešte dnes.

sort

Ako samotný názov nástroja napovedá, pôjde o triedenie. Konkrétnejšie podľa toho, či na začiatku riadku sú písmená, čísla alebo iné znaky. Prednastavené sú písmená, skúsme to teda najskôr s nimi:

printf 'raňajky\nobed\nvečera' | sort

Logicky správne poradie raňajky, obed, večera bolo usporiadané podľa abecedy na obed, raňajky, večera.

Pomocou prepínača -r (ako reverse, čiže opačne) triedime od konca abecedy:

printf 'raňajky\nobed\nvečera' | sort -r

Prepínač -n použijeme ak potrebujeme triediť čísla. Bez tohto prepínača by sa totiž čísla usporiadali takto:

printf '20\n2\n3' | sort

…no správne poradie vyzerá inak:

printf '20\n2\n3' | sort -n

Ak pred číslo pridáme znamienko plus (+) alebo mínus (-), musíme použiť prepínač -g takto:

echo -e '-20\n2\n3' > cisla.txt
sort -g cisla.txt

V prípade verzií programu potrebujeme triedenie čísiel opäť upraviť, pretože prepínač -n usporiada verzie nesprávne:

printf '1.10\n1.2' | sort -n

…na rozdiel od prepínača -V (veľké v):

printf '1.10\n1.2' | sort -V

Pomocou prepínača -o (ako output, čiže výstup) zapíšeme zoradený text aj do súboru:

sort -g cisla.txt -o zoradene_cisla.txt

shuf

Názov nástroja shuf je skratka od anglického slova shuffle, čiže zamiešať. V tomto prípade teda zoradíme riadky v náhodnom poradí najjednoduchšie takto:

echo -e '20\n2\n3\n5\n10' > cisla.txt
shuf cisla.txt

Pri každom novom spustení príkazu shuf cisla.txt by malo byť poradie iné.

Vybrať si však môžeme iba istý počet riadkov, ktorý chceme vypísať. Prepínačom -n tu napríklad zobrazíme iba jeden náhodne vybraný riadok:

shuf -n1 cisla.txt

Pri každom novom spustení príkazu shuf -n1 cisla.txt by sa malo zobraziť iné číslo.

Podobne ako nástroj sort, aj shuf má prepínač -o na uloženie výstupu do súboru:

shuf -n1 cisla.txt -o nahodny_riadok.txt

Vstup ale nemusí pochádzať iba zo súboru. Takto napríklad necháme vygenerovať jedno náhodné číslo (-n 1), ktoré sa bude nachádzať v intervale 1 až 10 (-i 1-10):

shuf -n 1 -i 1-10

uniq

Zatiaľ čo nástroje sort a shuf dávajú výstup kompletný, len upravia poradie, nástroj uniq vyberie iba tie riadky, ktoré sa (ne)opakujú (uniq = jedinečný).

Ako duplikáty nástroj uniq rozoznáva iba tie položky, ktoré nasledujú za sebou. Keďže sú teda jablko a hruška oddelené položkou pomaranč, musíme všetky položky najskôr nechať zoradiť (sort) a až potom vybrať iba tie unikátne položky (uniq):

printf 'jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq

Ak naopak potrebujeme vypísať iba tie položky, ktoré sa opakujú, pridáme prepínač -d (ako duplicate, čiže opakujúce sa) takto:

printf 'jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq -d

Pri použití prepínača -D (veľké d) zobrazíme všetky duplikáty:

printf 'jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq -D

Počet opakovaní môžeme zapísať pred každý riadok prepínačom -c takto:

printf 'jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq -c

No a niekedy potrebujeme, aby sa nebrali do úvahy veľké a malé písmená (prepínač -i), takže Jablko bude to isté ako jablko:

printf 'Jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq -ic

Inak sa malé a veľké písmená rozoznávajú:

printf 'Jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq -c

Podobne ako pri nástrojoch sort a shuf, aj výstup nástroja uniq môžeme zaznamenať do súboru:

printf 'Jablko\nhruška\npomaranč\njablko\nhruška' | sort | uniq -ic > ovocie-pocty.txt

wc

Nástroj uniq dokáže spočítať počty výskytov opakovaní jednotlivých položiek. S nástrojom wc (word count, čiže počet slov) však dokážeme spočítať aj znaky a slová, nie iba riadky:

printf 'Jablko a hruška\npomaranč\njablko a hruška\n' | wc

Výstup sú 3 čísla – v našom príklade 3 riadky (posledný prázdny sa nepočíta), 7 slov (znaky oddelené medzerou) a 44 bajtov v znakoch (špeciálne znaky ako š alebo č sa počítajú ako viacbajtové).

Keby sme špeciálne znaky š a č nahradili za s a c, počet bajtov v znakoch sa zníži na 41 takto:

printf 'Jablko a hruska\npomaranc\njablko a hruska\n' | wc

Ak však chceme každý znak počítať ako jednobajtový, použijeme prepínač -m a dostaneme vždy rovnaký počet znakov pri všetkých znakoch:

printf 'Jablko a hruška\npomaranč\njablko a hruška\n' | wc -m

Vďaka prepínaču -l (ako line, čiže riadok) vypíšeme iba počet riadkov a prepínač -w (ako word, čiže slovo) zobrazí iba číslo určujúci počet slov:

printf 'Jablko a hruška\npomaranč\njablko a hruška\n' | wc -l
printf 'Jablko a hruška\npomaranč\njablko a hruška\n' | wc -w

Prepínače je možné kombinovať v ľubovoľnom poradí napríklad takto:

printf 'Jablko a hruška\npomaranč\njablko a hruška\n' | wc -lwm

Počet znakov riadku s najväčším počtom znakov vypíšeme pomocou prepínača -L (veľké l) takto:

printf 'Jablko a hruška\npomaranč\njablko a hruška\n' | wc -L

Štatistiky nástroj wc zobrazí aj pre viacero súborov naraz (stačí ich názvy oddeliť medzerou), pričom výsledok môžeme zapísať do súboru s názvom statistiky.txt takto:

wc cisla.txt ovocie.txt > statistiky.txt

sha256sum

Nástroj sha256sum vypočíta kontrolný súčet (sum), ktorý je zabezpečený kryptografickým algoritmom SHA (Secure Hash Algorithm) s dĺžkou 256 bitov. Kontrolný súčet je niečo ako odtlačok prsta konkrétneho reťazca znakov či celého súboru. Takto ho vypočítame:

echo 'Toto je obsah súboru subor.txt' > subor.txt
sha256sum subor.txt

Vypísal sa nám textový reťazec, ktorý má vždy presne 64 znakov (kontrolný súčet). Nasledujú 2 medzery a názov súboru. Pomocou vytvoreného kontrolného súčtu sme jednoznačne identifikovali konkrétny súbor s konkrétnym obsahom. Keby sme obsah súboru zmenili, zmenil by sa aj kontrolný súčet:

echo 'Toto je zmenený obsah súboru subor.txt' > subor.txt
sha256sum subor.txt

Kontrolné súčty sa teda využívajú pri kontrole identity súborov. V praxi to znamená, že niektorí poskytovatelia softvéru zverejňujú na stiahnutie nielen samotné súbory, ale ku každému súboru priložia aj kontrolný súčet zabezpečený kryptografickým algoritmom ako je napríklad SHA-256. Takto si ktokoľvek môže ľahko overiť, či stiahol súbory, ktoré pochádzajú priamo od autora a že stiahnuté súbory neboli neoprávnene zmenené treťou stranou.

Ako ďalší príklad nech poslúži online služba virustotal.com, ktorá ponúka bezplatné skenovanie súborov na prítomnosť škodlivého kódu. Nemusíme ale nahrávať celý súbor, stačí iba jeho kontrolný súčet. Takto dokážeme rýchlo a jednoducho overiť bezpečnosť aj veľkého súboru (napríklad ISO obraz operačného systému Ubuntu Linux môže mať aj niekoľko gigabajtov).

Zhrnutie

V tejto časti seriálu o nástrojoch GNU Coreutils sme názorne prezentovali triedenie obsahu súborov, vypísali sme štatistiky obsahu súborov, a tiež sme demonštrovali, ako výrazne obmedziť priestor na neoprávnenú manipuláciu s obsahom súborov treťou stranou.

Aktualizované 9. augusta 2022

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu