fbpx

Często podczas przeglądania plików lub automatyzacji pewnych czynności w Linuxie chcemy skrócić ilość operacji. W poniższym wpisie omówię komendy head, tail, sort, find, które ułatwiają życie.

  • head – wyświetlanie n linii na początku pliku (domyślnie 10)
  • tail – wyświetlanie n linii na końcu pliku (domyślnie 10)
  • sort – sortowanie zawartości na wyjściu
  • find – wyszukiwanie plików w danej lokalizacji

Odczyt zawartości pliku – head i tail

Zdarza się tak, że potrzebujesz odczytać tylko fragment pliku, a nie jego całość. Masz plik konfiguracyjny, którego interesująca dla Ciebie część jest na początku. W tej sytuacji możesz skorzystać z polecenia head. Aby przejrzeć zawartość na początku pliku wywołaj komendę:

# head -n 5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
admin:x:3:4:admin:/var/admin:/sbin/nologin
service:x:4:7:lp:/var/spool/serviced:/sbin/nologin 

Przełącznik -n 5 wskazuje, że zostanie wyświetlone pierwszych 5 linii. Możesz również użyć opcji po prostu -5 (bez n).
Analizując logi z aplikacji będziesz potrzebować ostatnich zdarzeń, a nie wyświetlania całego pliku, który ma 1200 linii. Co w takim razie możesz z tym zrobić? Użyj tail.

[root@hadoop-node log]# tail -5 secure
May 15 05:34:00 hadoop su: pam_unix(su-l:session): session opened for user ambari-qa by (uid=0)
May 15 05:34:01 hadoop su: pam_unix(su-l:session): session closed for user ambari-qa
May 15 05:34:01 hadoop su: pam_unix(su-l:session): session closed for user ambari-qa
May 15 05:34:01 hadoop su: pam_unix(su-l:session): session opened for user ambari-qa by (uid=0)
May 15 05:34:01 hadoop su: pam_unix(su-l:session): session opened for user ambari-qa by (uid=0) 

Tak jak w przykładzie powyżej możesz użyć przełącznika z liczbą wierszy, które ma wyświetlić. Domyślnie jest to 10 linii.


W tymi miejscu warto również wspomnieć o tailf. To nic innego jak „podążanie” za rosnącym plikiem. Krótko mówiąc na bieżąco widzimy dopisywaną zawartość do pliku. Dotyczy to logów aplikacji lub systemowych. Jest to bardzo przydatne podczas analizy logów w czasie rzeczywistym. Jej użycie ogranicza się do wpisania tailf nazwa_pliku.

Wyszukiwanie plików

Komenda find służy do wyszukiwania plików oraz katalogów. Składnia samego polecenia jest bardzo prosta i składa z komendy głównej find, ścieżki oraz kryterium wyszukiwania. Chcąc zdefiniować kryterium wyszukiwania możemy wybrać takie parametry jak:

  • -name – nazwa pliku
  • -type – określenie typu wyszukiwania f (pliku) lub d (katalogu)
  • -user – znalezienie plików należących do użytkownika x
  • -size – określony rozmiar bloku
  • -atime – czyli kiedy plik był ostatnio odczytywany lub wyświetlany. Nie mówimy tutaj o modyfikacji pliku
  • -mtime – kiedy ostatnio modyfikowany był plik

Do powyższych parametrów możemy również dodać:

  • -print – wyświetlenie ścieżki do każdego pliku, który jest wynikiem
  • – exec – wykonanie komendy w poleceniu find. Zadziała to trochę na zasadzie pętli while. Np. find / -size +100M -exec /bin/rm {} \; Znajdź wszystkie pliki, które ważą więcej niż 100M i usuń je.

Przykłady

  • Znajdź wszystkie pliki z rozszerzeniem .log w katalogu /var/log
    • # find /var/log -name „*.log”
  • Robisz porządki w systemie i chcesz usunąć wszystkie pliki, które zawierają w nazwie „.old”. Do tego ćwiczenia możesz podejść na dwa sposoby. Dobrze znasz już środowiska, na którym pracujesz tj. strukturę plików oraz katalogów i nie potrzebujesz potwierdzenia, więc usuwasz wszystko co spełnia warunke. Druga opcja, za każdym razem potwierdzasz usunięcie „y”.
    • # find / -name „*.old” -exec rm -f {} \;
    • # find / -name „*.old” -ok rm -f {} \;
  • Zmień uprawnienia dla wszystkich katalogów w systemie find . -type d -exec chmod 755 {} \;
  • Zmień uprawnienia dla wszystkich plików na 644, ale nie bierz pod uwagę katalogów find ./ -type f -exec chmod 644 {} \;
  • Znajdź pliki ważące więcej niż 50M find / -size +50M -print
  • Strzeż się wykonania tej komendy find . -exec /bin/rm {} \; w ramach testów na maszynie wirtualnej możesz ją odpalić.

Sortowanie plików

Sortowanie zawartości przydaje się szczególnie w sytuacji, w której do pliku konfiguracyjnego dopisywane są nowe wpisy, jak np. w pliku /etc/passwd. Po dodaniu użytkownika wpis dopisywany jest na końcu linii.

Kiedy chcesz przeanalizować zawartość lub wyszukać konkretny wpis komenda sort może okazać się bardzo pomocna (jest jeszcze opcja użycia grep). Tak na prawdę komenda sort daje szereg możliwości sortowania pliku:

  • -r – sortowanie odwrotne (z do a, zamiast a do z)
  • -n – sortowanie numeryczne zamiast ciągu znaków ASCII. Korzystam np. przy sortowaniu listy „ciężkich plików” w zadanej lokalizacji sort -n -r
  • -t [znak] -k[cyfra] – sortowanie konkretnej kolumny z określeniem znaku separatora. Np. sort -t: -k5 /etc/passwd

Przykłady

Sortowanie po 5. kolumnie w pliku /etc/passwd z uwzględnieniem separatora :
Zawartość pliku przed i po sortowaniu

[marcin@linux-host marcin]# cat fragment_passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
admin:x:3:4:admin:/var/admin:/sbin/nologin
service:x:4:7:lp:/var/spool/serviced:/sbin/nologin

[marcin@linux-host marcin]# sort -t: -k5 fragment_passwd
admin:x:3:4:admin:/var/admin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
service:x:4:7:lp:/var/spool/serviced:/sbin/nologin
root:x:0:0:root:/root:/bin/bash 

Sortowanie kilku plików i zapisanie wyniku do osobnego

[marcin@linux-host marcin]# cat plik1
A029S14
Fzkd@40a
Bodk314ak

[marcin@linux-host marcin]# cat plik2
2smZfkw
Godp1em
XMAkxozm
Fqowp3

[marcin@linux-host marcin]# sort plik1 plik2 -o plik3
[marcin@linux-host marcin]# cat plik3
2smZfkw
A029S14
Bodk314ak
Fqowp3
Fzkd@40a
Godp1em
XMAkxozm 

Może się zdarzyć, że w plikach powtarzają się zduplikowane wpisy. Aby wyświetlić unikalne wartości dodaj przełącznik -u do polecenia sort.

Komendy head, tail, sort, find pomagają w sprytny sposób wyciągnąć interesujące dla nas informacje. Jednocześnie nie musimy wkładać wiele wysiłku. Praca z Linuxem to sama przyjemność 🙂

Zobacz inny wpis, który przygotowałem – Lista 85 komend dla Linuxa.