Przejdź do treści

Centrum Kształcenia Zawodowego i Ustawicznego w Mrągowie

Zadania: data i czas, sortowanie, filtrowanie

poniedziałek,

Zadania: data i czas, sortowanie, filtrowanie

Zadania wraz z odpowiedziami dotyczą dostępnych w Linuksie komend date, sort oraz grep. Zwróć uwagę, że podręczniki systemowe, o których mowa w komentarzu, są dostępne w systemie także na egzaminie potwierdzającym kwalifikacje zawodowe. Osoby, które ogólnie znają działanie danej komendy, są w stanie bardzo szybko odszukać odpowiednie opcje, a w niektórych wypadkach nawet przykłady ich stosowania.

Data i czas

Napisz komendę, która wyświetli:

  1. jutrzejszą datę;
  2. wczorajszą datę;
  3. datę, która wypadnie za rok;
  4. datę, która wypadnie za miesiąc;
  5. datę za cztery tygodnie w formacie ddXmmXYYYY (np. 02X11X2020);
  6. nazwę dnia tygodnia, w którym rozpoczął się rok szkolny (1 września 2020);
  7. nazwę dnia tygodnia, w którym zakończą się zajęcia w bieżącym roku szkolnym (25 czerwca 2021)
  8. nazwę dnia tygodnia, w którym rozpoczęła się druga wojna światowa (1 września 1939);
  9. kalendarz dla grudnia bieżącego roku;
  10. kalendarz dla 2021 roku;

Zadania 1-4 są bardzo podobne. Informacje i przykłady potrzebne do ich wykonania można odszukać w dostępnym w systemie podręczniku w formacie Info (komenda info date), w rozdziale „Date input formats” » „Relative items in date strings”. W tym samym podręczniku w rozdziale „Examples of date” znajdziesz kilka dodatkowych przykładów. Komendę należy trochę przemyśleć, np. jeśli chodzi o rok stosowanie "+365 days" jest błędem (są też lata przestępne). Odpowiedzi do pytań 1–4 (w kilku wariantach):

date --date='+1 day'
date --date='next day'
date --date='tomorrow'
date --date='-1 day'
date --date='1 days ago'
date --date='1 day ago'
date --date='yesterday'
date --date='+1 year'
date --date='next year'
date --date='+1 month'
date --date='next month'

Formatowanie daty potrzebne do rozwiązania zadania nr 5 jest dobrze opisane w podręcznikach systemowych, zastosowany jako separator znak X jest nietypowy w datach i uniemożliwia bezmyślne przyklejanie odpowiedzi znalezionych w Internecie, jednak jest takim samym znakiem jak np. minus czy dwukropek i obowiązują go te same reguły. Reszta wymaganych wiadomości została przedstawiona przy poprzednich pytaniach. Dwa warianty odpowiedzi:

date --date='+28 days' +%dX%mX%Y
date --date='+4 weeks' +%dX%mX%Y

Zadania 6–8 są bardzo podobne. Wszystkie informacje potrzebne do ich wykonania zostały przedstawione we wskazówkach do poprzednich pytań, szczegóły znajdziesz w podręcznikach systemowych. Odpowiedzi na pytania 6–8:

date --date='2020-09-01' +%A
date --date='2021-06-25' +%A
date --date='1939-09-01' +%A

# nieoptymalnie jednak pokazuje kolejne możliwości
date --date='1939-09-03 -2 days' +%A 

Ostatnie dwa pytania dotyczą programu cal. Wszystkie potrzebne opcje można uzyskać, zaglądając do pomocy systemowej, są one dość intuicyjne. Odpowiedzi na pytania 9–10:

cal 12 2020
cal 2020

Filtr grep

Napisz komendę, która wyświetli:

  1. pliki z katalogu /bin, w których nazwa kończy się ciągiem znaków zip;
  2. pliki z katalogu /bin, w których nazwa nie kończy się ciągiem znaków zip;
  3. liczbę plików z katalogu /bin, których nazwa rozpoczyna się literą l;
  4. liczbę plików z katalogu /bin, których nazwa kończy się literą s;
  5. liczbę plików z katalogu /bin, których nazwa kończy się literą p;
  6. liczbę plików z katalogu /bin, których nazwa kończy się literą e;
  7. liczbę plików z katalogu /bin, których nazwa kończy się ciągiem znaków zip;
  8. wiersze z informacją o nazwie procesora z pliku /proc/cpuinfo;
  9. wiersze z informacją o ilości rdzeni procesora z pliku /proc/cpuinfo;
  10. wiersze z informacją o częstotliwości taktowania procesora z pliku /proc/cpuinfo;
  11. wiersze z pliku /etc/passwd zawierające ciąg znaków root oraz trzy następujące po nim wiersze (ciąg root może się powtarzać w pliku, wtedy komenda wybierze nie cztery wiersze a 8, 12 itd.);

Filtr grep potrafi przeszukiwać na podstawie wzorca pliki lub standardowe wejście. Nie jest w stanie wyświetlić plików z katalogu, dlatego dwa pierwsze zadania wymagają zastosowania potoku, w którym wynik odpowiedniego polecenia trafia na wejście filtra grep. Standardowym narzędziem do wyświetlania plików jest program ls. We wzorcu należy zastosować wyrażenie regularne z metaznakiem oznaczającym koniec wiersza ($). Podstawowa składnia wyrażeń regularnych stosowanych w programie grep jest dobrze opisana w manualu systemowym (man grep). Drugie pytanie wymaga dołączenia jeszcze dodatkowego przełącznika odwracającego sens dopasowania. Informacja na ten temat także znajduje się w manualu. Odpowiedzi na pytania 1–2:

ls /bin | grep zip$
ls /bin | grep -v zip$

Pytania 3–7 są bardzo do siebie podobne. Metaznak oznaczający początek wiersza to ^, koniec wiersza został już omówiony wcześniej. Kluczowy element to opcja c, która wyłącza standardowe wyjście i wypisuje tylko liczbę dopasowanych wierszy. Wszystkie opcje programu grep znajdziesz w manualu systemowym. Odpowiedzi na pytania 3–7:

ls /bin | grep -c ^l
ls /bin | grep -c s$
ls /bin | grep -c p$
ls /bin | grep -c e$
ls /bin | grep -c zip$

Pytania 8–10 dotyczą tego samego pliku i wykorzystują ten sam mechanizm. W pliku /proc/cpuinfo przechowywane są informacje o zainstalowanych procesorach. W przypadku procesora wspierającego pracę wielowątkową, każdy wątek reprezentowany jest tak jak fizyczny procesor, np. układ obsługujący osiem wątków otrzyma w pliku /proc/cpuinfo osiem identycznych wpisów (różniących się tylko numerem procesora). Wpisy obejmują wiele wierszy zawierających opis właściwości procesora. Żeby odfiltrować wybraną własność, należy na początku przeanalizować zawartość pliku (cat /proc/cpuinfo). Na przykład nazwa modelu procesora znajduje się w wierszu rozpoczętym słowami model name. W tym momencie zadania 8–10 powinny stać się już proste, w pytaniach użyto słowa „wiersze”, więc mogą się one powtarzać i nie trzeba tym się przejmować. Odpowiedzi na pytania 8–10:

grep 'model name' /proc/cpuinfo
grep 'cpu cores' /proc/cpuinfo
grep 'cpu MHz' /proc/cpuinfo

Filtr grep potrafi uporać się z problemem duplikowania wierszy poprzednio omówionych zadań. Przełącznik m pozwala zatrzymać odczytywanie pliku po zadanej ilości dopasowań. Jeśli w pytaniach 8–10 miałby wyświetlić się tylko jeden wiersz, można zastosować komendę w stylu:

grep -m 1 'model name' /proc/cpuinfo

Nowością z pytania nr 11 jest konieczność wyświetlenia także kilku wierszy następujących po dopasowaniu. Jak łatwo się domyślić odpowiedni przełącznik można odszukać w dołączonej do programu pomocy. W pliku /etc/passwd fraza root może się powtarzać (np. wystąpi nazwa chroot), jednak pytanie pozwala zignorować taką możliwość. Odpowiedź na pytanie nr 11:

grep -A 3 root /etc/passwd

Możliwe jest zmodyfikowanie odpowiedzi na pytanie nr 11 w taki sposób, żeby obsłużyć tylko pierwsze wystąpienie poszukiwanej frazy.

grep -A 3 -m 1 root /etc/passwd

Sortowanie

Napisz komendę, która wyświetli:

  1. posortowany w odwrotnej kolejności plik /etc/mime.types;
  2. posortowany w odwrotnej kolejności plik /etc/hosts;
  3. odwrotnie posortowany plik /etc/passwd (z na początku, a na końcu);
  4. odwrotnie posortowany wynik komendy ls -1 /bin;
  5. plik /etc/passwd posortowany wg trzeciej kolumny;
  6. plik /etc/passwd posortowany numerycznie wg kolumny userID (numerycznie, czyli np. 2 przed 10);

Odwrotną kolejność sortowania wymusza opcja r. Odpowiedzi na pytania 1–3:

sort -r /etc/mime.types
sort -r /etc/hosts
sort -r /etc/passwd

Dzięki zastosowaniu potoku wynik komendy ls może być wejściem programu sort. Odwrotne sortowanie wymusza przedstawiona już opcja r. Odpowiedź na pytanie nr 4:

ls -1 /bin | sort -r

Zadanie nr 5 należy rozpocząć od wyświetlenia pliku /etc/passwd (cat /etc/passwd). Można wtedy zaobserwować, że w jego wierszach kolejne kolumny wyznaczone są przez znak dwukropka (:). Znak podziału można przekazać programowi sort za pomocą opcji t (zapis -t:). Parametr k oznacza numer kolumny, według której sortowane będą wiersze. Odpowiedź na pytanie nr 5:

sort -t: -k3 /etc/passwd

W zadaniu nr 6 początkowo należy ustalić, która kolumna zawiera userID. Taka informacja jest w odpowiednim manualu systemowym (man 5 passwd). Okazuje się, że jest to kolumna nr 3, podobnie jak w poprzednim zadaniu. Jedyna różnica to konieczność wymuszenia sortowania w sposób numeryczny (opcja n). Odpowiedź na pytanie nr 6:

sort -n -t: -k3 /etc/passwd
Artykuł: Olimpiada Zdrowia PCK

Olimpiada Zdrowia PCK

Artykuł: Zostań dawcą szpiku!

Zostań dawcą szpiku!

Artykuł: Przeglądarka Vivaldi

Przeglądarka Vivaldi

Artykuł: Lenovo

Lenovo

Artykuł: Światowy Dzień Oszczędzania

Światowy Dzień Oszczędzania

Nasze technikum

Technik informatyk

Szkoły dla dorosłych

Nasza szkoła

Pełna oferta edukacyjna

Oferta szkoły