Wyszukiwanie w witrynie

Zarządzaj plikami efektywnie za pomocą poleceń head, tail i cat w systemie Linux


Linux udostępnia kilka poleceń i programów do przeglądania zawartości pliku. Praca z plikami to jedno z trudnych zadań, które wykonuje większość użytkowników komputerów, zarówno nowicjuszy, zwykłych użytkowników, zaawansowanych użytkowników, programistów, administratorów itp. Efektywna i wydajna praca z plikami jest sztuką.

Dzisiaj w tym artykule omówimy najpopularniejsze polecenia: head, tail i cat, większość z nas zna już takie polecenia, ale bardzo niewielu z nas wdraża je w razie potrzeby.

1. szef Dowództwa

Polecenie head odczytuje pierwsze dziesięć wierszy dowolnej nazwy pliku. Podstawowa składnia polecenia head to:

head [options] [file(s)]

Na przykład poniższe polecenie wyświetli pierwsze dziesięć wierszy pliku o nazwie „/etc/passwd”.

head /etc/passwd 

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
lp:x:7:7:lp:/var/spool/lpd:/bin/sh 
mail:x:8:8:mail:/var/mail:/bin/sh 
news:x:9:9:news:/var/spool/news:/bin/sh

Jeśli podano więcej niż jeden plik, head wyświetli pierwsze dziesięć wierszy każdego pliku osobno. Na przykład poniższe polecenie wyświetli dziesięć wierszy każdego pliku.

head /etc/passwd /etc/shadow

==> /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 adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin ==> /etc/shadow <==
root:$6$85e1:15740:0:99999:7:::
bin:*:15513:0:99999:7:::
daemon:*:15513:0:99999:7:::
adm:*:15513:0:99999:7:::
lp:*:15513:0:99999:7:::
sync:*:15513:0:99999:7:::
shutdown:*:15513:0:99999:7:::
halt:*:15513:0:99999:7:::
mail:*:15513:0:99999:7:::
uucp:*:15513:0:99999:7:::

Jeśli wymagane jest pobranie większej liczby linii niż domyślne dziesięć, wówczas używana jest opcja „-n” wraz z liczbą całkowitą określającą liczbę linii do pobrania. Na przykład poniższe polecenie wyświetli pierwsze 5 wierszy z pliku „/var/log/yum.log”.

head -n5 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686
Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686
Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686
Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch
Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

W rzeczywistości nie ma potrzeby używania opcji „-n”. Wystarczy łącznik i podać liczbę całkowitą bez spacji, aby uzyskać taki sam wynik jak powyższe polecenie.

head  -5 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el6_5.4.i686
Jan 10 00:06:56 Updated: openssl-devel-1.0.1e-16.el6_5.4.i686
Jan 10 00:11:42 Installed: perl-Net-SSLeay-1.35-9.el6.i686
Jan 13 22:13:31 Installed: python-configobj-4.6.0-3.el6.noarch
Jan 13 22:13:36 Installed: terminator-0.95-3.el6.rf.noarch

Polecenie head może również wyświetlić dowolną żądaną liczbę bajtów za pomocą opcji „-c”, po której następuje liczba wyświetlanych bajtów. Na przykład poniższe polecenie wyświetli pierwsze 45 bajtów danego pliku.

head -c45 /var/log/yum.log

Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el

2. Komenda ogona

Polecenie tail umożliwia wyświetlenie ostatnich dziesięciu linii dowolnego pliku tekstowego. Podobnie do powyższego polecenia head, polecenie tail obsługuje również opcje „n” liczby linii i „n” liczby znaków.

Podstawowa składnia polecenia tail jest następująca:

tail [options] [filenames]

Na przykład poniższe polecenie wydrukuje dziesięć ostatnich wierszy pliku o nazwie „access.log”.

tail access.log 

1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html
1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html
1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 -
1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg 
1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

Jeśli podano więcej niż jeden plik, tail wydrukuje ostatnie dziesięć linii każdego pliku, jak pokazano poniżej.

tail access.log error.log

==> access.log <== 1390288226.042      0 172.16.18.71 TCP_DENIED/407 1771 GET http://download.newnext.me/spark.bin? - NONE/- text/html 1390288226.198      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.210   1182 172.16.20.44 TCP_MISS/200 70872 GET http://mahavat.gov.in/Mahavat/index.jsp pg DIRECT/61.16.223.197 text/html 1390288226.284     70 172.16.20.44 TCP_MISS/304 269 GET http://mahavat.gov.in/Mahavat/i/i-19.gif pg DIRECT/61.16.223.197 - 1390288226.362    570 172.16.176.139 TCP_MISS/200 694 GET http://p4-gayr4vyqxh7oa-3ekrqzjikvrczq44-if-v6exp3-v4.metric.gstatic.com/v6exp3/redir.html pg  1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html 1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html 1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html ==> error_log <==
[Sun Mar 30 03:16:03 2014] [notice] Digest: generating secret for digest authentication ...
[Sun Mar 30 03:16:03 2014] [notice] Digest: done
[Sun Mar 30 03:16:03 2014] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips configured -- resuming normal operations

Podobnie możesz wydrukować kilka ostatnich linii, używając opcji „-n”, jak pokazano poniżej.

tail -5 access.log

1390288226.402      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.437    145 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.445      0 172.16.18.53 TCP_DENIED/407 1723 OPTIONS http://172.16.25.252/ - NONE/- text/html
1390288226.605      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html
1390288226.808      0 172.16.16.55 TCP_DENIED/407 1753 CONNECT ent-shasta-rrs.symantec.com:443 - NONE/- text/html

Możesz także wydrukować liczbę znaków za pomocą argumentu „-c”, jak pokazano poniżej.

tail -c5 access.log

ymantec.com:443 - NONE/- text/html

3. Polecenie kota

Polecenie „cat” jest najczęściej używanym, uniwersalnym narzędziem. Kopiuje standardowe wejście na standardowe wyjście. Polecenie obsługuje przewijanie, jeśli plik tekstowy nie mieści się na bieżącym ekranie.

Podstawowa składnia polecenia cat jest następująca:

cat [options] [filenames] [-] [filenames]

Najczęstszym zastosowaniem cat jest odczytywanie zawartości plików. Aby otworzyć plik do odczytu, wystarczy wpisać cat, spację i nazwę pliku.

cat /etc/passwd 

root:x:0:0:root:/root:/bin/bash 
daemon:x:1:1:daemon:/usr/sbin:/bin/sh 
bin:x:2:2:bin:/bin:/bin/sh 
sys:x:3:3:sys:/dev:/bin/sh 
sync:x:4:65534:sync:/bin:/bin/sync 
games:x:5:60:games:/usr/games:/bin/sh 
man:x:6:12:man:/var/cache/man:/bin/sh 
lp:x:7:7:lp:/var/spool/lpd:/bin/sh 
…

Polecenie cat służy również do łączenia wielu plików.

echo 'Hi Tecmint-Team' > 1 
echo 'Keep connected' > 2 
echo 'Share your thought' > 3 
echo 'connect us [email ' > 4
cat 1 2 3 4 > 5
cat 5 

Hi Tecmint-Team 
Keep connected 
Share your thought 
connect us [email 

Można go również używać do tworzenia plików. Osiąga się to poprzez wykonanie cat, po którym następuje operator przekierowania wyjścia i nazwa pliku, który ma zostać utworzony.

cat > tecmint.txt

Tecmint is the only website fully dedicated to Linux.

Możemy mieć niestandardowego kreatora końcowego dla polecenia „cat”. Tutaj jest to realizowane.

cat > test.txt << end 

I am Avishek 
Here i am writing this post 
Hope your are enjoying 
end
# cat test.txt 

I am Avishek 
Here i am writing this post 
Hope your are enjoying

Nigdy nie lekceważ potęgi polecenia „cat”, które może być przydatne przy kopiowaniu plików.

cat avi.txt

I am a Programmer by birth and Admin by profession
cat avi.txt > avi1.txt
cat avi1.txt

I am a Programmer by birth and Admin by profession

Jakie jest zatem przeciwieństwo kota? Tak, to „tak”. „tac” to polecenie w systemie Linux. Lepiej pokazać przykład „tac”, niż cokolwiek o nim mówić.

Utwórz plik tekstowy z nazwami wszystkich miesięcy, tak aby w wierszu pojawiło się jedno słowo.

cat month

January
February
March
April
May
June
July
August
September
October
November
December
tac month

December
November
October
September
August
July
June
May
April
March
February
January

Więcej przykładów użycia polecenia cat można znaleźć w artykule 13 Użycie polecenia cat

To wszystko na teraz. Wrócę tu ponownie z kolejnym ciekawym artykułem, wartym poznania. Do tego czasu bądź na bieżąco i połącz się z Tecmint. Nie zapomnij podzielić się z nami swoją cenną opinią w sekcji komentarzy.