Wiersz poleceń: Przeglądanie plików 11


Linux-Magazine
Od Redakcji: artykuł pochodzi z październikowego wydania Linux Magazine. Kompletną listę artykułów możecie znaleźć na stronach miesięcznika.

Środowisko GNU/Linux umożliwia kontrolowanie na bieżąco pracy systemu operacyjnego. Z tego powodu większość plików konfiguracyjnych i plików dziennika ma format zwykłego tekstu, dzięki czemu możemy je łatwo odczytywać przy pomocy wiersza poleceń.

Jeżeli chcemy zmienić te pliki, gdy jesteśmy zalogowani jako administrator, możemy skorzystać z edytora plików, takiego jak vi, emacs lub nano. Jednak zwykle chodzi nam nie o wprowadzanie zmian, tylko o przejrzenie i zgromadzenie potrzebnych informacji lub sprawdzenie, czy system działa prawidłowo.

GNU/Linux oferuje szereg poleceń umożliwiających przeglądanie informacji. Jeśli chcemy tylko rzucić okiem na małe pliki, powinno wystarczyć polecenie cat. Jednak w większości preferowane są komendy more i less. Jeżeli interesuje nas szczególnie początek lub koniec pliku, powinniśmy użyć poleceń head lub less. Podstawy stosowania tego typu poleceń są łatwe do opanowania, ponieważ zawierają wiele podobnych opcji lub korzystają z analogicznych funkcji.

Polecenie cat

Nazwa polecenia (skrót od concatenate – łączyć) od razu wyjaśnia jego zastosowanie – do łączenia plików. Choć wiele źródeł wymienia to jako zastosowanie główne, w większości polecenie jest wykorzystywane wyłącznie z powodu drugiej oferowanej funkcji – odczytywania krótkich plików.

Być może główną przyczyną popularności polecenia cat jest bardzo prosta składnia (Rysunek 1). Aby obejrzeć plik, musimy tylko wprowadzić polecenie i nazwę interesującego nas pliku. Na przykład jeśli chcemy obejrzeć listę urządzeń zamontowanych w systemie, wpisujemy cat /etc/fstab.

cat-fstab
Rysunek 1: Polecenie cat jest proste w użyciu i nadaje się do przeglądania krótkich plików.

Polecenie cat oferuje również kilka innych opcji. Jeżeli przygotowaliśmy listę repozytoriów przeznaczonych dla Debiana lub Ubuntu i otrzymaliśmy komunikat błędu w konkretnej linii, możemy policzyć linie sami lub – jeśli wiemy jak – otworzyć w edytorze vi plik /etc/apt/sources.list. W wyniku tego otrzymujemy plik z ponumerowanymi liniami.

cat-b
Rysunek 2: Numerowanie linii przy pomocy polecenia cat może być pomocne w śledzeniu błędów.

Możemy też zastosować cat -b /etc/apt/sources.list (Rysunek 2). Polecenie to numeruje tylko linie zawierające treść i ignoruje puste. Jeżeli puste wiersze są istotne, zmieniamy -b na -n.

Inne opcje polecenia cat powodują zaznaczenie znaków formatujących tabulatory, końce linii oraz znaki, które nie są drukowane. Dodatkowo dostępne są opcje służące do pokazywania różnych kombinacji tych znaków, ale najczęściej jedyną przydatną okazuje się -A, która powoduje pokazanie wszystkich znaków.

Chociaż polecenie cat jest łatwe w użyciu, nie nadaje się do plików o długości przekraczającej dwadzieścia linii – i to jego jest główną wadą. Każdy dłuższy plik wymaga przewijania. Co więcej, jeśli plik ma więcej linii, niż zdoła wyświetlić terminal wirtualny, możemy nie zobaczyć początku pliku. Z tego powodu wiele osób woli przeglądać pliki przy pomocy innych poleceń.

Więcej oznacza mniej

Polecenie more jest bardziej skomplikowane od cat i lepiej sprawdza się w przypadku plików o długości powyżej dwudziestu linii. Jego główną zaletą jest to, że wyświetla całą informację na ekranie, a więc nie grozi nam, że nie zobaczymy części pliku, jak w przypadku polecenia cat.

Najprostszym zastosowaniem polecenia more jest bezpośrednie przeglądanie plików. Na przykład użytkownik allan może przejrzeć pocztę systemową, wprowadziwszy polecenie more /var/mail/allan.

Przez polecenie more inne polecenia mogą potokowo przekierowywać wynik działania. Jednym z typowych przykładów jest użycie polecenia wyszukiwania find lub grep, gdy oczekujemy dużej liczby wyników. Jeśli na przykład chcemy znaleźć w katalogu bieżącym wiele grafik PNG i przesłać wyniki przez more, wpisujemy find „.png” | more.

Gdy wyniki są pokazywane na ekranie, na dole listy pojawia się podświetlona wiadomość –More —. Aby przejść do następnego ekranu wyników, wciskamy klawisz [Enter]. Jeżeli podstawowy komunikat nie jest wystarczający, możemy rozszerzyć go przy pomocy opcji -d (Rysunek 3).

more-additional-message
Rysunek 3: Polecenie more możemy dostosować, na przykład z komunikatem pomocy.

Innymi użytecznymi opcjami są: +<number> – pozwala zastąpić numer <number> numerem linii, od jakiej tekst ma być wyświetlany, oraz +/<number>”<string>”<number> – powoduje wyświetlenie tylko tych linii, w których występuje ciąg tekstowy „<string>”.

Gdy polecenie more działa, mamy do dyspozycji kilka opcji nawigacyjnych dostępnych z klawiatury. Aby znaleźć ciąg tekstowy, używamy /”<string>” lub wciskamy klawisz [Spacji], jeśli chcemy wyświetlić następny ekran tekstu. Podczas przeglądania pliku klawisz [Enter] pozwala nam przesuwać tekst po jednej linii lub wprowadzić z<number>, by określić liczbę linii przeskoku do przodu. Możemy również wówczas podać nową wartość domyślną liczby linii do przemieszczenia (po wciśnięciu z wartość domyślna wynosi 1, chyba że została zmieniona). Po zakończeniu przeglądania pliku wciskamy [q], aby powrócić do wiersza poleceń.

Z uwagi na liczbę opcji oferowanych przez polecenie more wydaje się, że cat jest zbyt uproszczone. Jednak podczas stosowania more możemy dojść do wniosku, że ma ono jedną poważną wadę – nie pozwala przewijać tekstu do tyłu, dlatego po obejrzeniu całego tekstu ekran zostaje wyczyszczony, chyba że wyjdziemy z polecenia more i uruchomimy je ponownie.

Prawdę mówiąc, polecenie more nie jest już tak popularne. Data ostatniej aktualizacji na stronie głównej projektu – 29 czerwca 1988 roku – wywołuje wrażenie, że narzędzie jest dość prymitywne. Obecnie powszechniejsze jest bardziej skomplikowane polecenie less.

Ale mniej oznacza więcej

Nazwa polecenia less jest żartem komputerowym. Czasem zwrot mniej oznacza więcej sugeruje, że prostota jest często bardziej elegancka niż wysoki stopień skomplikowania. Nazwa polecenia dotyczy tego powiedzonka – i istotnie najlepiej sygnalizuje, że narzędzie powstało jako zamiennik polecenia more. W rzeczywistości, jeśli konkretne środowisko (a właśnie środowisko jest tu najważniejszym czynnikiem) uzasadnia taki wybór, możemy spróbować użyć more zamiast less.

Nazwa staje się nawet bardziej właściwa, gdy uświadomimy sobie fakt, że less jest ulepszeniem more w wielu miejscach. Chociaż oba korzystają z tego samego formatu, w przeciwieństwie do more polecenie less umożliwia przewijanie tekstu do tyłu. Oferuje również więcej opcji, a ponieważ przed wyświetleniem tekstu nie wczytuje całego pliku wejściowego do pamięci, działa znacznie szybciej.

Oba polecenia less i more mają wspólne funkcje, ale w celu uzyskania do nich dostępu nie zawsze stosują te same opcje. Podobnie jak w przypadku omawianego wcześniej polecenia more z poleceniem less możemy również używać opcji +<number> i +/”<string>”, ale w danych wyjściowych podświetlane są wyniki +/”<string>”.

Polecenie less oferuje również ogromną liczbę innych opcji. -I powoduje ignorowanie różnic między małymi i dużymi literami podczas wyszukiwania konkretnego ciągu tekstowego, -V podkreśla znaki tabulatorów, końce linii oraz znaki, które nie są drukowane. Opcja -w służy do podświetlania pierwszej linii po przemieszczeniu tekstu, jeśli został przesunięty do przodu o jedną linię, a -W powoduje podświetlenie pierwszej linii podczas przesuwania tekstu do przodu o więcej niż jedną linię. Powinniśmy jednak pamiętać o tym, że nie wszystkie te opcje są włączone w każdej wersji powłoki Bash.

Polecenia nawigacyjne stanowią mieszaninę starych i nowych narzędzi more. W przypadku obu poleceń klawisz [Spacji] służy do przewijania tekstu do przodu o jeden ekran, ale less pozwala na przewijanie tekstu o pół ekranu (w tym celu powinniśmy wcisnąć d). Dodatkowo, możemy stosować polecenie less z b (tekst zostanie przewinięty do tyłu o jeden ekran) lub z u (przewinięcie do tyłu o pół ekranu). Podobnie przy pomocy z<number> możemy podać liczbę linii, o które tekst ma zostać przewinięty (do przodu), a y<number> – do tyłu. Klawisze strzałek góra / dół umożliwiają przesuwanie tekstu po jednej linii do tyłu i do przodu, a klawisze w lewo / w prawo – przeskakiwanie z końca jednej linii do następnej.

Dodanie parametru /”<string>” powoduje przeszukanie wyników, tak jak robi to polecenie more, ale po wprowadzeniu znaku [Ctrl+k] na początku ciągu tekstowego, zostaną podświetlone wszystkie instancje ciągu tekstowego (Rysunek 4). Jeśli jest to konieczne, podświetlenie możemy wyłączyć przy pomocy kombinacji klawiszy [Esc+u].

less-highlighted-output
Rysunek 4: Polecenie „less” może spowodować podświetlenie wyników wyszukiwania.

Kolejną przydatną funkcją polecenia less jest możliwość pracy z większą liczbą plików. Między plikami możemy przełączać się przy pomocy :n oraz :p. Podobnie jak w przypadku more polecenie less możemy zamknąć poprzez q.

Nagłówki czy stopki?

Chociaż polecenie less może być skuteczne, bywa niedokładne lub przesadne. Dotyczy to również narzędzi more lub cat. Czasem bardziej przydatne są opcje nagłówka head lub stopki tail.

Zgodnie z nazwą, nagłówek head obejmuje domyślnie 10 pierwszych linii pliku. Prawdopodobnie najlepszym zastosowaniem nagłówka jest szybka identyfikacja pliku. Na przykład, jeśli jesteśmy zalogowani jako administrator i nie wiemy jakie informacje są zawarte w /var/log/scrollkeeper.log, odpowiedź możemy uzyskać sprawdzając nagłówek pliku.

Stopka tail obejmuje dziesięć ostatnich linii pliku i często zapisuje je w wierszu poleceń. Bardzo się to przydaje, ponieważ w przypadku plików dziennika systemowego najnowsze informacje są zwykle zapisywane w dolnej części pliku. Jest to nieoceniona pomoc podczas monitorowania w celu wyszukania i usunięcia usterek. Musimy tylko otworzyć terminal na nieużywanym pulpicie wirtualnym i możemy kontynuować pracę, sprawdzając od czasu do czasu stan aktualny w wynikach działania polecenia stopki tail.

Jeżeli dziesięć linii nie wystarcza, przy pomocy -<number> możemy zmienić liczbę linii wyświetlanych w nagłówku head lub stopce tail. Aby zobaczyć nagłówek pliku, który może zawierać informacje takie, jak nazwa pliku lub identyfikator formatu, korzystamy z opcji opisowej -v (Rysunek 5). Alternatywnie możemy ukryć nagłówek przy pomocy trybu cichego -q.

head-with-header
Rysunek 5: Polecenia nagłówka i stopki mają włączoną opcję opisową i tryb cichy.

Ponadto polecenie tail oferuje kilka dodatkowych opcji przydatnych podczas obsługi informacji do wykrywania i usuwania usterek. Jeśli użyjemy -f, informacje zostaną dodane do wyniku, od razu po jego pojawieniu się. Jeżeli monitorowany plik staje się niedostępny, możemy zastosować opcję –retry, aby upewnić się, że monitorowanie trwa nadal (lub stwierdzić, że brak danych nie jest spowodowany uszkodzeniem pliku). Aby kontrolować częstotliwość skanowania pliku i zredukować ilość zasobów systemowych wykorzystywanych przez polecenie tail, dodajemy opcję -s<SECONDS>.

Kolejna przydatna funkcja to –pid<PID>. Powoduje ona zatrzymanie polecenia tail, jeśli przestał działać proces o określonym identyfikatorze. Aby znaleźć PID procesu, który chcemy monitorować, najprawdopodobniej musimy uruchomić (jako administrator) polecenie top lub ps.

To dopiero początek

Poznaliśmy tylko część opcji, które możemy stosować z poleceniami służącymi do przeglądania plików. W szczególności dotyczy to polecenia less, które oferuje znacznie więcej możliwości. Niektóre z nich nie są zwykle używane, chyba że posiadamy zaawansowane umiejętności administracji systemami oraz wykrywania i usuwania usterek.

Niemniej, informacje te powinny pomóc w sprawnym stosowaniu poleceń bez konieczności zapamiętywania zbyt wielu informacji. Możemy oczywiście pozostać tylko przy opisanych tu opcjach do momentu, gdy uznamy, że chcemy wiedzieć więcej. Wtedy zajrzyjmy do podręcznika, aby zaleźć informacje na temat interesującego nas polecenia. Podręcznik polecenia less jest bardzo rozbudowany, ale nie zrażajmy się. Polecenia służące do przeglądania plików nie są skomplikowane – nawet jeśli opisy niektórych opcji w podręczniku czasami coś takiego sugerują.

Opracował: Bruce Byfield

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

11 komentarzy do “Wiersz poleceń: Przeglądanie plików

  • xaero

    Witam

    sory ale mamy XXI wiek 🙂 nikomu do szczęścia nie potrzeba trybu tekstowego.

    jestem przekonany, że żaden zwykły user linuksa nie przędzie przeglądał żadnych dokumentów w trybie tekstowym no bo i po co?

    takie teksty tylko odstraszają nieobeznanych

    pozdrawiam

  • thalcave

    Mamy XXI wiek i ja wolę edytor VIM niż Gedit. To że w domowych zastosowaniach tryb tekstowy nie jest potrzebny nie oznacza, że
    1) część użytkowników go woli
    2) że nie jest potrzebny w ogóle

    Wracając do tekstu – świetny. Każdy może wynieść coś z niego. Ja dodam, że fajną alternatywą dla less jest most – przykładowo koloruje składnie manuali w xterminalach bez dodatkowej konfiguracji.

  • DNADesigN

    @xaero, jasne… ale pamiętaj, że na serwerach standardowo nie instaluje się nawet X’ów. Ciekawe jak wtedy odpalisz sobie te wszystkie graficzne edytory. Desktop, wiadomo… tam można się bawić w edytory graficzne, aczkolwiek jestem podobnego zdania, co thalcave i Patologia.

    Co do samego tekstu, to artykuł jest super. Część użytkowników często nie ma pojęcia o istnieniu polecenia less (do more przyzwyczaił nas DOS), a jeszcze większa część nie zna head i tail. 😉 A te ostatnie właśnie często przydają się np. przy pisaniu skrytpów w Bash.

  • Ruri

    [quote comment=”39413″]

    takie teksty tylko odstraszają nieobeznanych

    pozdrawiam[/quote]
    No wybacz, ale tym zdaniem sugerujesz, że większość ludzi nie umie czytać. Systemy operacyjne nie polegają na klikaniu w obrazki.

    Ja wole konsole do przeglądania, moja żona też, moja siostra też, szwagier….. Jest to po prostu wygodne. Jak wolisz graficzne narzędzia to przedstaw je światu, omów, może nawet się przerzucę.

  • laybythesea

    [quote post=”9958″]I to nie tylko do przeglądania plików txtowych – DO WSZYSTKIEGO!!! (prawie ;))[/quote]
    Ha! Nie ma to jak film w ASCII 😀
    mplayer -vo caca film.avi