Gérer efficacement les fichiers à l'aide des commandes head, tail et cat sous Linux
Il existe plusieurs commandes et programmes fournis par Linux pour afficher le contenu du fichier. Travailler avec des fichiers est l'une des tâches ardues que la plupart des utilisateurs d'ordinateurs, qu'ils soient débutants, utilisateurs réguliers, utilisateurs avancés, développeurs, administrateurs, etc., effectuent. Travailler avec des fichiers de manière efficace et efficiente est un art.
Aujourd'hui, dans cet article, nous allons discuter des commandes les plus populaires appelées head, tail et cat, la plupart d'entre nous connaissent déjà ces commandes, mais très peu d’entre nous le mettent en œuvre lorsque cela est nécessaire.
1. Commande principale
La commande head lit les dix premières lignes d'un nom de fichier donné. La syntaxe de base de la commande head est :
head [options] [file(s)]
Par exemple, la commande suivante affichera les dix premières lignes du fichier nommé « /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
Si plusieurs fichiers sont donnés, head affichera les dix premières lignes de chaque fichier séparément. Par exemple, la commande suivante affichera dix lignes de chaque fichier.
# 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:::
Si l'on souhaite récupérer plus de lignes que les dix par défaut, alors l'option '-n' est utilisée avec un nombre entier indiquant le nombre de lignes à récupérer. Par exemple, la commande suivante affichera les 5 premières lignes du fichier « /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
En fait, il n'est pas nécessaire d'utiliser l'option « -n ». Juste le trait d'union et spécifiez l'entier sans espaces pour obtenir le même résultat que la commande ci-dessus.
# 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
La commande head peut également afficher n'importe quel nombre d'octets souhaité en utilisant l'option '-c' suivie du nombre d'octets à afficher. Par exemple, la commande suivante affichera les 45 premiers octets du fichier donné.
# head -c45 /var/log/yum.log
Jan 10 00:06:49 Updated: openssl-1.0.1e-16.el
2. Commande de queue
La commande tail vous permet d'afficher les dix dernières lignes de n'importe quel fichier texte. Semblable à la commande head ci-dessus, la commande tail prend également en charge les options « n » nombre de lignes et « n » nombre de caractères.
La syntaxe de base de la commande tail est la suivante :
# tail [options] [filenames]
Par exemple, la commande suivante imprimera les dix dernières lignes d'un fichier appelé « 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
Si plusieurs fichiers sont fournis, tail imprimera les dix dernières lignes de chaque fichier comme indiqué ci-dessous.
# 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
De même, vous pouvez également imprimer les dernières lignes en utilisant l'option « -n », comme indiqué ci-dessous.
# 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
Vous pouvez également imprimer le nombre de caractères en utilisant l'argument '-c' comme indiqué ci-dessous.
# tail -c5 access.log
ymantec.com:443 - NONE/- text/html
3. Commande cat
La commande « cat » est l’outil universel le plus largement utilisé. Il copie l'entrée standard vers la sortie standard. La commande prend en charge le défilement si le fichier texte ne correspond pas à l'écran actuel.
La syntaxe de base de la commande cat est :
# cat [options] [filenames] [-] [filenames]
L'utilisation la plus fréquente de cat est de lire le contenu des fichiers. Il suffit de taper cat suivi d'un espace et du nom du fichier pour ouvrir un fichier en lecture.
# 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
…
La commande cat est également utilisée pour concaténer un certain nombre de fichiers ensemble.
# 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
Il peut également être utilisé pour créer des fichiers. Ceci est réalisé en exécutant cat suivi de l'opérateur de redirection de sortie et du nom du fichier à créer.
# cat > tecmint.txt
Tecmint is the only website fully dedicated to Linux.
Nous pouvons avoir un créateur final personnalisé pour la commande « chat ». Ici, il est mis en œuvre.
# 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
Ne sous-estimez jamais la puissance de la commande « cat » et peut être utile pour copier des fichiers.
# 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
Maintenant, quel est le contraire de chat ? Ouais, c'est du « tac ». 'tac' est une commande sous Linux. Il vaut mieux montrer un exemple de « tac » que d’en parler.
Créez un fichier texte avec les noms de tous les mois, de telle sorte qu'un mot apparaisse sur une ligne.
# 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
Pour plus d'exemples d'utilisation de la commande cat, reportez-vous à la section 13 Utilisation de la commande cat.
C'est tout pour l'instant. Je serai de nouveau ici avec un autre article intéressant, qui mérite d'être connu. D'ici là, restez à l'écoute et connecté à Tecmint. N'oubliez pas de nous faire part de vos précieux commentaires dans notre section commentaires.