Cvičenie z predmetu Úvod do UNIXu, Martin Dzurenko, Utorok 10:40, SU2
updated: 15.05.2018 19:30
Podmienky na zápočet
Odkazy a literatúra
Aktuálne výsledky
MenoA1.11.22.12.22.33.13.24.15.16.16.27.17.27.38.1T
Bělíček David5.511111120022000421.5
Brabec Matyáš011111122222000420
Břečka Vojtěch.511111112322100421.5
Chmel Petr2.5111.51122322000423
Kalva Tomáš011111122322000421
Kidenko Alina011111122322000421
Koblížek Jan1.5111.51122322000422
Kohout Ondřej00000000000000000
Kraus Ondřej2.511111120322000421.5
Mykiska Vojtěch2.5111.51002322000420
Nápravník David3.511111122322000424.5
Smelík Patrik00000000000000000
Surma David111111122322000422
Šelepova Alena00000000000000000
updated: 21.05.2018 23:28
1. cvičenie, 20.02.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Napíšte na obrazovku "Hello world!"
  2. echo 'Hello world!'
  3. Vypíšte podrobný obsah svojho domovského adresára.
  4. ls -l ~
  5. Vypíšte podrobný obsah svojho domovského adresára vrátane skrytých súborov.
  6. ls -la ~
  7. Vytvorte súbor test v domovskom adresári, premenujte ho na test-test a potom ho zmažte
  8. touch test; mv test test-test; rm test-test
  9. Vytvorte adresár blabla vo svojom domovskom adresári a vojdite doňho. Potom sa vráťte naspäť a adresár blabla zmažte.
  10. mkdir blabla; cd blabla; cd ..; rmdir blabla
  11. Vojdite do adresára /etc a potom vypíšte podrobné info o svojom domovskom adresári (ale nič navyše!). Potom vypíšte obsah súboru /etc/passwd kde navyše riadky budú očíslované. Nakoniec sa vráťte do svojho domovského adresára.
  12. cd /etc; ls -ld ~; cat -n /etc/passwd; cd ~
  13. Vypište všetky súbory a adresáre v /usr/include, ktoré začínajú na z, bez podrobného info, ale v jednom stĺpci
  14. ls -d1 /usr/include/z*
Domáce úlohy (deadline 06.03.2018 10:40):
  1. Vypište obsah svojho domovského adresára (klasický, bez skrytých súborov) BEZ použitia príkazu ls, stručne popíšte (max 2 vety) prečo a ako to funguje. [1b]
  2. V domovskom adresári vytvorte zložku mydir a skopírujte do nej všetky súbory z /usr/include, ktorých názov obsahuje aspoň dve písmená 'z' (kdekoľvek v názve) a končí na '.h'. Potom zložku mydir zmažte jedným použitím príkazu rm. [1b]
2. cvičenie, 27.02.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Vypíšte počet riadkov súboru /etc/passwd
  2. wc -l /etc/passwd
  3. Vypíšte prvých 15 riadkov súboru /etc/passwd
  4. head -n 15 /etc/passwd
  5. Vypíšte riadky 12 až 18 súboru /etc/passwd
  6. head -n 18 /etc/passwd | tail -n 7
  7. Nájdite spôsob ako jednoducho overiť správnosť riešenia predchádzajúcej úlohy
  8. cat -n /etc/passwd | head -n 18 | tail -n 7
  9. Vypíšte všetky riadky súboru /etc/passwd, okrem prvých 15
  10. tail +n 16 /etc/passwd
  11. Vytvorte súbor s názvom mytime, ktorý bude obsahovať jeden riadok, na ktorom bude aktuálny dátum vo formáte YYYY/mm/dd;HH:MM. Čas poslednej modifikácie tohto súboru potom nastavte na dátum 20.04.1999
  12. date +%Y/%m/%d\;%H:%M > mytime; touch -m -t '9904160000' mytime
  13. Zistite počet súborov v adresári /etc
  14. ls /etc | wc -l
  15. Zistite čo najjednoduchším spôsobom, ktoré podadresáre adresára /etc nemáte právo listovať (file permissions zatiaľ ignorujte)
  16. ls /etc/* > /dev/null
  17. Všetky výstupy predchádzajúceho príkazu uložte do súboru mylog
  18. ls /etc/* >mylog 2>&1
Domáce úlohy (deadline 18.03.2018 23:59):
  1. Vytvorte súbor myfiles, ktorý má na prvom riadku /var, na druhom /usr a na treťom /etc. Nepoužívajte príkaz cat ani žiadny editor (vi, nano, emacs, ...). [1b]
  2. Vypíšte celkový počet súborov/adresárov (aj skrytých), ktoré sa nachádzajú v adresároch z myfiles. K riešeniu budete potrebovať použiť príkaz xargs, ako ho presne použiť si preštudujte sami (man, google). V riešení využite presmerovanie obsahu súboru do stdin príkazu. [1b]
  3. Do súboru myfiles navyše pridajte štvrtý riadok, na ktorom bude jeden znak - skratka na domovský adresár. Opakované použitie príkazu z 2. úlohy na tomto novom riadku nebude fungovať a vypíše chybovú hlášku, popíšte 2-3 vetami prečo to nefunguje. Upravte príkaz z 2. úlohy tak, aby potláčal tento chybový výpis. [1b]
3. cvičenie, 06.03.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Vypíšte loginy aktuálne prihlásených užívateľov, každý iba raz
  2. Vypíšte login a celé meno všetkých užívateľov v sieti, oddelené medzerou
  3. Vypíšte info o všetkých užívateľoch, ale výpis bude utriedený numericky podľa UID
  4. Vypíšte loginy posledných prihlásených užívateľov aj s počtom prihlásení
  5. Vypíšte mená všetkých užívateľov v sieti v uppercase vo formáte PRIEZVISKO MENO
Domáce úlohy (deadline 25.03.2018 23:59):
  1. Riešenie príkladu 5 z cvičenia napíšte ako spustiteľný shell skript, vylepšite ho tak, aby za sebou aj upratal súbory, ktoré vytvoril. [1b]
  2. Napíšte skript, ktorý vypíše čas posledného loginu pre každého užívateľa z posledných prihlásených (vo formáte login datetime). [2b]
    hint: datetime prihlásenia/odhlásenia vo výpise z príkazu "last" píšte vo formáte "iso" (viď man page príkazu), bude sa vám ľahšie zoraďovať
4. cvičenie, 13.03.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Vypíšte tri najviac "hardlinkované" podadresáre koreňového adresára, vo formáte počet_hardlinkov názov_podadresára
  2. Vytvorte symlink mysymlink na adresár /etc, vypíšte veľkosť symlinku v bytoch, potom výpište počet súborov v adresári /etc s použitím symlinku.
  3. Symlink mysymlink presmerujte na váš domovský adresár, bez toho aby ste ho zmazali
  4. Vytvorte cyklus veľkosti 3 zo symlinkov a, b, c, skúste nejaký z nich dereferencovať.
  5. Vytvorte shell skript, ktorý vypíše Hello World!, nastavte mu práva na spúštanie a spustite ho.
  6. Upravte skript tak, že napíše Hello <message>!, kde message je parameter skriptu.
  7. Pripojte sa na vziadelný stroj pomocou ssh <login>@u-pl15.ms.mff.cuni.cz, vojdite do adresára /tmp/unix_cviko, vytvorte si vlastný adresár s názvom /tmp/unix_cviko/<login> a vojdite doňho, ten budete používať v ďalších príkladoch
  8. Vytvorte súbor mysecret a zapíšte doň nejaké tajné číslo. Nastavte mu práva tak, že si tento súbor nebude môcť prečítať (ani doň zapisovať) nikto iný, iba vy (vlastník). Otestujte si fungovanie s kamošom.
  9. Skúste súbor mysecret premenovať na thesecret. Potom zariadťe, aby sa už znova premenovať nedal.
  10. Vytvorte adresár messages, nastavte mu práva tak, že doň užívatelia vašej skupiny (students) budú mocť zapisovať, ale nebudú môcť vidieť jeho obsah ! Ostatní nebudú mať na ňom žiadne práva. Vytvorte súbor so správou pre kamaráta v jeho adresári messages, skontrolujte, že nemôžte vidiet obsah tohto adresára.
  11. Vytvorte súbor mywall v adresári messages, nastavte mu práva také isté ako má súbor thesecret (skutočne nájdite option, ktorý skopíruje nastavenie práv z existujúceho súboru). Navyše pridajte užívateľom skupiny právo na čítanie tohto súboru. Vo vašom adresári /tmp/unix_cviko/<login> vytvorte skript postOnWall.sh, ktorý dostane v parametri správu, ktorej obsah appenduje do súboru mywall. Skriptu nastavte práva iba na execute a navyše mu nastavte SUID bit. Skúste pomocou tohto skriptu pridať správu na "stenu" kamarátovi a potom skontrolovať, že tam naozaj pribudla.
  12. Napíšte kamarátovi správu pomocou write.
  13. Zmažte komplet adresár /tmp/unix_cviko/<login>, práva na to nastavte jedným použitím príkazu chmod(viď man pre rekurzívne nastavovanie)
Domáce úlohy (deadline 02.04.2018 23:59):
  1. (Táto úloha je super otravná a skorej obkecávacia, ale chcem aby ste sa trochu viac pohrali s oprávneniami a zopakovali si ako fungujú hardlinky)
    Vytvorte adresár /tmp/tmp a vojdite doň (bacha hlavne ak pracujete v labe ! V domovskom adresari fungujú ACLs a môžete naraziť na divné správanie práv). Vytvorte skript myscript.sh, ktorý vypíše jeho prvý parameter v upper case. Nastavte skriptu práva tak, že iba jeho owner ho môže čítať, nič iné (použite octalovú syntax príkazu chmod, tzn. trojica čísel 0 až 7). Skúste spustiť skript s nejakým argumentom pomocou príkazu sh a potom pomocou ./myscript.sh syntaxe. Prečo prvá varianta funguje a druhá nie ? Vytvorte hardlink scriptlink na súbor myscript.sh a skúste ho spustiť druhou variantou pomocou tohto hardlinku. Skriptu myscript.sh pridajte execution bit pre všetkých (použite symbolickú syntax príkazu chmod, tzn. cez znamienko +). Znova ho skúste spustiť použitím hardlinku. Prečo to zrazu funguje ked sme s hardlinkom nič nerobili ? Vytvorte súbor test, nastavte mu také isté práva ako má súbor myscript.sh (použite "referenčnú" syntax príkazu chmod). Nastavte práva adresára /tmp/tmp tak, aby sa nedali súbory zmazať a skripty spúštať (overte si to). Nakoniec rekurzívne nastavte neobmedzené práva (777) adresáru /tmp/tmp, a potom ho rekurzívne zmažte. [2b]
5. cvičenie, 20.03.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Dokončíme úlohy 10, 11, 12, 13 z minula
  2. Skopírujte si všetky súbory z adresára /tmp/unix_cviko_subory do svojho domovského adresára a zbežne si prezrite ich obsah
  3. Vypíšte názvy všetkých požičaných kníh a dátum požičania
  4. Vypíšte názvy všetkých nepožičaných kníh
  5. Pre každú požičanú knihu vypíšte názov knihy a meno čitateľa, ktorý ju má požičanú
Domáce úlohy (deadline 08.04.2018 23:59):
  1. Napíšte skript, ktorý vypíše na stdout zoznam užívateľov systému (len tí čo sú v /etc/passwd) a ku každému názov jeho primárnej skupiny (vo formáte login:skupina). Na stderr vypíše zoznam skupín (oddelených čiarkou), ktoré nie sú primárnou skupinou žiadneho užívateľa. [3b]
6. cvičenie, 27.03.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Zistite koľko súborov/adresárov v adresári /etc má názov s dĺžkou aspoň 3 znaky a končí číslicou.
  2. V adresárovom strome /usr nájdite všetky súbory (a vypíšte detailné informácie o nich), ktoré začínajú na x a majú príponu .txt
  3. V adresárovom strome /etc nájdite všetky súbory, ktoré majú veľkosť aspoň 1000B, ktorých ani vlastník ani primárna skupina nie je root
  4. Zistite koľko symlinkov obsahuje adresár /bin (využite ls a grep, nie find).
  5. Spočítajte všetky súbory a adresáre v celom podstrome /etc (využite ls a grep, nie find).
    • zbavte sa úvodných výpisov adresárov, napr. /etc/xml:
    • zbavte sa "hardlinkov" na aktuálny a parent adresár
    • zbavte sa prázdnych riadkov
Domáce úlohy (deadline 16.04.2018 23:59):
  1. Vypíšte mená všetkých študentov v labe, ktoré sa skladajú z 3 a viac slov (použite grep na výstup z príkazu getent passwd). [2b]
  2. Pomocou príkazu wget si stiahnite log súbor https://www.ms.mff.cuni.cz/~dzurenkm/mylog, vypíšte všetky error logy z roku 2016, ktoré nastali prvý deň v mesiaci. [2b]
7. cvičenie, 03.04.2018
Čo nové dnes budeme používať:
Úlohy:
  1. Z výstupu find /etc, vypíšte len tie súbory, ktoré sú na štvrtej a vyššej úrovni, ich názov má 5 znakov a má príponu conf
  2. Vypíšte mená všetkých študentov v labe v tvare Priezvisko Meno (použite výstup z príkazu getent passwd)
  3. Vypíšte prvý a posledný riadok z /etc/passwd
  4. Vypíšte riadky 5 až 15 (vrátane) z /etc/passwd
  5. Vypíšte riadky 1, 5 a 8 z /etc/passwd
  6. Vypíšte len liché riadky zo súboru /etc/passwd
  7. Vypíšte priezviská študentov, ktorých meno je Antonin (použite výstup z príkazu getent passwd)
  8. Vypíšte /etc/passwd s prehodeným poradím riadkov
  9. Vygenerujte a skopírujte jeden paragraf lorem ipsum a uložte ho do súboru. Použitím príkazu sed upravte tento súbor tak, že jeden riadok bude jedna veta.
Domáce úlohy (deadline koniec semestra, sry bol som dlho mimo a nestihol som spraviť domáce úlohy k tomuto cviku rozumne včas, takže je to na vás :-) ):
  1. Pomocou príkazu wget si stiahnite vygenerovaný lorem ipsum textový súbor https://www.ms.mff.cuni.cz/~dzurenkm/loremipsum (navyše obohatený o extra prázdne riadky), Napíšte príkaz sed, ktorý súbor upraví tak, že každá veta bude na samostatnom riadku (prázdne riadky zachovajte). Nepoužívajte dočasné súbory, použite prepínač -i, ktorý výstup príkazu uloží naspäť do vstupného súboru. [1b]
  2. Upravený súbor loremipsum z predchádzajúcej úlohy upravte pomocou príkazu sed tak, že odstavce obalí HTML značkami <p> a </p>. Jednotlivé odstavce sú oddelené jedným, alebo viac prázdnymi riadkami. Výstup si otestujte v prehliadači. [1b]
  3. Z pôvodného súboru loremipsum vymažte všetky slová, ktoré majú dĺžku 1 až 3 znaky. [1b]
8. cvičenie, 10.04.2018
Cviko zaskakoval cvičiaci Jirka Setnička.
Čo ste stihli prebrať:
Domáce úlohy (deadline 29.04.2018 23:59):
  1. Napíšte skript, ktorý vypíše prvých N prvočísel (jediný parameter) jednoduchým brute-force algoritmom (tzn. pre každé číslo cyklom overuje, či má nejakého deliteľa). Použite cykly, aritmetiku (modulo je %), subshell expanziu, podmienky, atd. [4b]
9. cvičenie, 17.04.2018
Cviko zaskakoval cvičiaci Jenda Hadrava.
10. cvičenie, 24.04.2018
Cviko zaskakoval cvičiaci Jenda Hadrava.
11. cvičenie, 15.05.2018
Pokračovanie AWK
Úlohy:
  1. Spočítajte priemer čísel na stdin (1 riadok = 1 číslo)
  2. Spočítajte výskyt slov v texte na stdin, výstupný formát bude slovo: počet_výskytov
  3. Preveďte výstup ls -ln na formát ls -l