Menu

Šesté cvičení (29. 3.)

Materiály

Příklady

Zobrazit řešení
  1. Najděte všechny soubory s příponou .txt v aktuálním adresáři i jeho podadresářích.
  2. find . -name '*.txt'
    
  3. Vypište soubory v aktuálním adresáři, jejichž velikost je větší, než $1 bajtů.
  4. find . -size +${1}c
    
  5. Zjistěte kolik existuje v /etc adresářů s názvem délky 3.
  6. find /etc/* -prune -type d -name '???' | wc -l
    
  7. Vypište poslední dva řádky z každého obyčejného souboru s příponou .txt, jehož velikost je alespoň 1024 bajtů. Prohledejte celou stromovou strukturu pod aktuálním adresářem.
  8. find . -name "*.txt" -size +1024c -type f -exec tail -n2 '{}' \;
    
  9. Přejmenujte všechny soubory v aktuálním adresáři a jeho podadresářích s příponou .JPG, .JPEG a .jpeg na soubor s příponou .jpg.
  10. find . -type f -name "*.JPG" -exec sh -c 'mv "$0" "${0%%.JPG}.jpg"' {} \;
    find . -type f -name "*.JPEG" -exec sh -c 'mv "$0" "${0%%.JPEG}.jpg"' {} \;
    find . -type f -name "*.jpeg" -exec sh -c 'mv "$0" "${0%%.jpeg}.jpg"' {} \;
    
    S tím, co jsme si zatím předvedli ještě neumíme provést hromadná přejmenování výše jen jedním příkazem, ale i to je samozřejmě možné.
  11. Vypište jména a příjmení všech uživatelů sítě (getent passwd), kteří mají stejné křestní jméno jako vy. Pozn.: Příkaz getent passwd funguje v labu, ale nejspíš nebude nainstalován na vašem domácím počítači. Místo něj použijte obsah souboru /etc/passwd.
  12. getent passwd | cut -d: -f5 | grep "^Jan "
    
  13. Vypište jména a příjmení všech uživatelů sítě, jejichž jméno se skládá z alespoň tří slov.
  14. getent passwd | cut -d: -f5 | egrep "[^ ]+ +[^ ]+ +[^ ]+"
    
  15. Vypište ze souboru /etc/php/apache2-php5.5/php.ini všechny řádky kromě těch, které jsou prázdné nebo zakomentované.
  16. cat /etc/php/apache2-php5.6/php.ini | grep '^[^;]'
    
  17. Stáhněte si access log Apache příkazem curl "http://kam.mff.cuni.cz/~stinovlas/materialy/unix/access.log" > access.log.
  18. Zjistěte ze souboru access.log, kolik přístupů bylo provedeno pomocí prohlížeče Firefox.
  19. grep Firefox access.log
    
  20. Zjistěte ze souboru access.log, kolik přístupů bylo provedeno pomocí prohlížeče Firefox ze systému Linux.
  21. < access.log egrep "(Linux.*Firefox|Firefox.*Linux)"
    
  22. Zjistěte ze souboru access.log, kolik přístupů bylo provedeno pomocí prohlížeče Firefox z jiného systému, než Linux.
  23. < access.log grep Firefox | grep -v Linux
    
  24. Nahraďte v souboru access.log všechny výskyty slova GET slovem NUGET.
  25. sed 's/GET/NUGET/g' access.log
    
  26. Zjistěte ze souboru access.log, kolik přístupů bylo provedeno 28. března 2016 mezi 6:00 a 12:00.
  27. egrep "28/Mar/2016:(0[6-9]|1[01]|12:00:00)" access.log | wc -l
    
  28. Napište skript, který vypíše informace o všech uživatelích sítě a to ve formátu UID-login-jméno.
  29. getent passwd | cut -d: -f1,5 > login-name
    getent passwd | cut -d: -f3 > uid
    paste uid login-name | tr "\t:" "-"
    
    Jednodušší řešení pomocí programu sed:
    getent passwd | cut -d: -f1,3,5 | sed -r 's#(.*):(.*):(.*)#\2-\1-\3#'
    
  30. Zjistěte ze souboru access.log všechny dny, ve kterých byl proveden přístup a vypište je ve formátu DD. Mes YYYY, kde Mes je trojpísmenné jméno měsíce v angličtině.
  31. < access.log cut -d\  -f4 | cut -d: -f1 | tr -d \[ | tr "/" " " | sed 's# #. #'
    
  32. Zjistěte ze souboru access.log, kolik HTTP/1.1 požadavků provedených metodou POST skončilo neúspěšně (tj. jiným kódem než 200).
  33. grep "HTTP/1.1" access.log | cut -d\" -f3 | grep -v "^ 200" | wc -l
    
  34. Vypište všechny řádky souboru, na kterých se nějaké slovo opakuje.
  35. egrep "\b([a-zA-Z]+)\b.*\b\1\b" access.log