Zoeken op website

Beheer bestanden effectief met behulp van head-, tail- en cat-opdrachten in Linux


Er zijn verschillende commando's en programma's voorzien door Linux voor het bekijken van de inhoud van het bestand. Werken met bestanden is een van de lastige taken die de meeste computergebruikers, of het nu een newbie, een gewone gebruiker, een gevorderde gebruiker, een ontwikkelaar, een beheerder, enz. is, uitvoeren. Effectief en efficiënt met bestanden omgaan is een kunst.

Vandaag zullen we in dit artikel de meest populaire commando's bespreken, genaamd head, tail en cat, waarbij de meesten van ons al op de hoogte zijn van dergelijke commando's. maar slechts weinigen van ons implementeren het wanneer dat nodig is.

1. hoofdcommando

Het hoofdcommando leest de eerste tien regels van een willekeurige bestandsnaam. De basissyntaxis van het hoofdcommando is:

head [options] [file(s)]

Met het volgende commando worden bijvoorbeeld de eerste tien regels van het bestand met de naam ‘/etc/passwd‘ weergegeven.

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

Als er meer dan één bestand wordt opgegeven, toont head de eerste tien regels van elk bestand afzonderlijk. Met de volgende opdracht worden bijvoorbeeld tien regels van elk bestand weergegeven.

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:::

Als het gewenst is om meer regels op te halen dan de standaard tien, dan wordt de optie ‘-n’ gebruikt samen met een geheel getal dat het aantal op te halen regels aangeeft. Met het volgende commando worden bijvoorbeeld de eerste 5 regels uit het bestand ‘/var/log/yum.log‘ weergegeven.

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

In feite is het niet nodig om de optie ‘-n’ te gebruiken. Alleen het koppelteken en specificeer het gehele getal zonder spaties om hetzelfde resultaat te krijgen als de bovenstaande opdracht.

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

Het head-commando kan ook elk gewenst aantal bytes weergeven met behulp van de optie ‘-c’, gevolgd door het aantal weer te geven bytes. Met de volgende opdracht worden bijvoorbeeld de eerste 45 bytes van een bepaald bestand weergegeven.

head -c45 /var/log/yum.log

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

2. staartcommando

Met het staartcommando kunt u de laatste tien regels van elk tekstbestand weergeven. Net als het hoofdcommando hierboven ondersteunt het staartcommando ook de opties ‘n‘ aantal regels en ‘n‘ aantal tekens.

De basissyntaxis van het staartcommando is:

tail [options] [filenames]

Met het volgende commando worden bijvoorbeeld de laatste tien regels van een bestand met de naam ‘access.log‘ afgedrukt.

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

Als er meer dan één bestand is opgegeven, zal tail de laatste tien regels van elk bestand afdrukken, zoals hieronder weergegeven.

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

Op dezelfde manier kunt u ook de laatste paar regels afdrukken met de optie ‘-n’, zoals hieronder weergegeven.

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

U kunt ook het aantal tekens afdrukken met het argument ‘-c’, zoals hieronder weergegeven.

tail -c5 access.log

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

3. kattenopdracht

Het commando ‘cat’ is het meest gebruikte, universele hulpmiddel. Het kopieert standaardinvoer naar standaarduitvoer. De opdracht ondersteunt scrollen als het tekstbestand niet op het huidige scherm past.

De basissyntaxis van het cat-commando is:

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

Het meest voorkomende gebruik van cat is het lezen van de inhoud van bestanden. Het enige dat nodig is om een bestand te openen om te lezen, is het typen van cat gevolgd door een spatie en de bestandsnaam.

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 
…

Het cat-commando wordt ook gebruikt om het aantal bestanden samen te voegen.

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 

Het kan ook worden gebruikt om bestanden te maken. Dit wordt bereikt door cat uit te voeren, gevolgd door de uitvoeromleidingsoperator en de aan te maken bestandsnaam.

cat > tecmint.txt

Tecmint is the only website fully dedicated to Linux.

We kunnen een aangepaste eindmaker hebben voor het ‘kat’-commando. Hier wordt het geïmplementeerd.

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

Onderschat nooit de kracht van het ‘cat’-commando en kan handig zijn voor het kopiëren van bestanden.

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

Wat is nu het tegenovergestelde van kat? Ja, het is ‘tac‘. ‘tac‘ is een commando onder Linux. Het is beter om een voorbeeld van ‘tac’ te laten zien dan er iets over te praten.

Maak een tekstbestand met de namen van de hele maand, zodat één woord op een regel verschijnt.

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

Voor meer voorbeelden van het gebruik van cat-opdrachten raadpleegt u 13 cat-opdrachtgebruik

Dat is het voor nu. Ik zal hier weer zijn met nog een interessant artikel, het weten waard. Blijf tot die tijd op de hoogte en verbonden met Tecmint. Vergeet niet om ons uw waardevolle feedback te geven in onze commentaarsectie.