Académique Documents
Professionnel Documents
Culture Documents
Linux
Guide de survie
2e édition
Chapitre 15 - Connectivité
Afficher l’état des interfaces réseau
Vérifier qu’un ordinateur fonctionne et accepte des requêtes
Suivre la route des paquets entre deux hôtes
Effectuer des recherches DNS
Configurer une interface réseau
Afficher l’état des interfaces réseau sans fil
Configurer une interface réseau sans fil
Obtenir une nouvelle adresse avec DHCP
Activer une connexion réseau
Désactiver une connexion réseau
Afficher la table de routage IP
Modifier la table de routage IP
Dépanner des problèmes réseau
Conclusion
Chapitre 16 - Travail sur le réseau
Se connecter de façon sécurisée à un autre ordinateur
Se connecter de façon sécurisée à un autre ordinateur sans mot de
passe
Sécuriser le transfert de fichiers entre deux machines
Copier de façon sécurisée des fichiers entre deux hôtes
Transférer et sauvegarder des fichiers de façon sécurisée
Télécharger des fichiers de façon non interactive
Télécharger des sites Web de façon non interactive
Télécharger des fichiers séquentiels et des ressources Internet
Conclusion
Index
Cet ouvrage est dédié aux utilisateurs de Linux,
Public visé
Info
Le lecteur attentif aura remarqué que, dans la première édition
de cet ouvrage, j’utilisais Ubuntu (ou K/Ubuntu, comme je
l’indiquais pour souligner que j’employais KDE avec Ubuntu). Je
suis à présent devenu plus générique et je me sers d’un Debian
conventionnel, une distribution sur laquelle se fonde Ubuntu.
Astuce
Une grande partie des informations que je fournis sur Linux
dans cet ouvrage peuvent également s’appliquer à d’autres
versions d’Unix, comme BSD et OS X. Vous remarquerez que je
n’ai pas précisé « toutes » ou « la plupart », mais « une grande
partie ». Sous condition que vous gardiez cela à l’esprit, cet
ouvrage se révèlera utile avec ces systèmes d’exploitation.
Conventions utilisées
Info
Note contenant des informations complémentaires sur le sujet
traité.
Astuce
Les astuces sont des conseils ou des techniques permettant de
faciliter une tâche.
Attention
Ce type de note permet de mettre en évidence des problèmes
potentiels et d’éviter certains désastres.
Chapitre 1
Les commandes : ce qu’il
faut savoir
Avant d’entrer dans le vif du sujet, il faut clarifier quelques
points pour faciliter la lecture de la suite. Il est
indispensable de connaître certains principes de base et
tous ne sont pas évidents. En revanche, dès que vous les
aurez assimilés, vous comprendrez mieux le fonctionnement
de votre ligne de commande.
Info
À strictement parler, tout n’est pas un fichier. Comme Linus
Torvalds l’a souligné, il est plus exact de dire « tout est un flux
d’octets ». Pour de plus amples informations sur ce concept,
consultez les articles « Everything is a file » sur Wikipédia
(http://en.wikipedia.org/wiki/Everything_is_a_file), et « What
‘Everything Is a File’ Means on Linux » sur How-To Geek
(http://www.howtogeek.com/117939/htg-explains-what-
everything-is-a-file-means-on-linux/).
Tableau 1.1 Comment utiliser les caractères spéciaux dans les noms de
fichiers
Caractère Conseil
/ Ne jamais utiliser. Ne peut être échappé.
\ Doit être précédé d'un caractère d'échappement. À éviter.
- Ne jamais utiliser au début d'un nom de fichier ou de
répertoire.
[] Doit être précédé d'un caractère d'échappement. À éviter.
{} Doit être précédé d'un caractère d'échappement. À éviter.
* Doit être précédé d'un caractère d'échappement. À éviter.
? Doit être précédé d'un caractère d'échappement. À éviter.
' Doit être précédé d'un caractère d'échappement. À éviter.
" Doit être précédé d'un caractère d'échappement. À éviter.
<espace> Doit être précédé d'un caractère d'échappement. Parfois
difficile à éviter, mais il faut essayer.
Info
Les accolades sont différentes des autres caractères. Pour bash,
les conversions effectuées par les trois premiers correspondent
à une expansion de nom de fichier, tandis que les accolades
donnent une expansion des accolades. Les trois premiers
effectuent simplement une correspondance avec des fichiers
existants ; les accolades peuvent servir pour une
correspondance avec des fichiers existants, mais également
pour créer de nouveaux fichiers.
Info
Si vous souhaitez voir mes dotfiles, consultez mon blog
(http://ChainsawOnATireSwing.com ou
https://github.com/rsgranne/syno-dotfiles). Grâce à GitHub, il
est très facile d’examiner les dotfiles d’autres personnes (plus
d’informations sur http://dotfiles.github.io). Avec peu d’effort et
un petit apprentissage, vous pourrez vous aussi stocker vos
dotfiles sur GitHub !
Info
Sachez que Mac OS X considère tous les shells comme des shells
de connexion et que vous pouvez donc simplement utiliser
.profile en place de tout le reste.
Info
Il est tout à fait possible qu’un script de shell travaille avec un
shell interactif, tout comme il est possible qu’un shell non
interactif réponde à des commandes, mais ces situations sont
plutôt rares et nous essayons plutôt de rester général.
if [ -f ~/.bash_aliases ]; then
source ~/.bash_aliases
fi
Astuce
Si vous souhaitez aller plus loin dans la personnalisation de
votre environnement bash, jetez un œil aux différentes options
de ~/.inputrc. Techniquement, la modification de ~/.inputrc ne
personnalise pas bash. En réalité, vous personnalisez la
bibliothèque Readline que bash utilise pour la modification des
lignes de commande. Quoi qu’il en soit, ce fichier permet des
choses très intéressantes. Pour vous en convaincre, consultez
mon billet publié à l’adresse
www.chainsawonatireswing.com/2012/05/13/fun-with-inputrc-
part-1/ ou les idées excellentes proposées par Brett Terpstra sur
http://brettterpstra.com/2015/07/09/shell-tricks-inputrc-binding-
fun/.
clear
Info
Au chapitre 12, nous verrons la commande history, qui permet
d’afficher des commandes précédentes et de les exécuter à
nouveau. N’oubliez pas que clear n’a aucun effet sur l’historique
et se contente d’effacer l’écran.
Conclusion
J’ai rappelé ici quelques points sur Linux qui ne sont sans
doute pas évidents pour un nouveau venu, mais ils sont
nécessaires pour comprendre le fonctionnement de
l’interpréteur de ligne de commande. Les informations
contenues dans ce chapitre vous permettront d’éviter des
migraines quand nous aborderons le passage à la pratique.
Vous ne serez pas obligé de vous demander pourquoi vous
ne pouvez pas copier un fichier dont le nom contient un
espace, comment supprimer mille fichiers à l’aide d’une
seule commande ou pourquoi la commande RM
livreàacheter.txt ne fonctionne pas. Ces connaissances de
base vous éviteront bien des erreurs.
Il est temps à présent de découvrir quelques commandes.
Allons-y !
Chapitre 2
Parcours du système de
fichiers
Ce chapitre décrit les commandes de base que vous
utiliserez quotidiennement. Si vous étiez charpentier, elles
seraient vos marteaux, vos tournevis et vos tenailles. Une
fois que vous les aurez assimilées, vous pourrez commencer
à contrôler l’interpréteur de ligne de commande et vous
découvrirez de nombreuses choses intéressantes à propos
des fichiers, des dossiers, des données et de
l’environnement. Vous découvrirez en particulier les
métadonnées – des données qui décrivent vos données –
que Linux doit conserver et vous serez probablement surpris
par leur nombre.
Info
Pour la deuxième édition de cet ouvrage, j’ai retiré les sections
qui concernent mkdir -v (qui affiche les actions effectuées par
mkdir) et rm -v (qui effectue la même chose, mais pour rm). Vous
les retrouverez sur mon site Web
(granneman.com/writing/books/linux-phrasebook). J’ai
également supprimé les sections sur touch, mkdir, cp, mv, rm et rmdir,
pour les placer dans un nouveau chapitre 3 intitulé « Création et
destruction ». Enfin, la section sur su a été déplacée au chapitre
8, « Propriétés et permissions », où elle avait plus sa place.
Info
La commande ls peut sembler simple, mais elle dispose de
nombreuses options qui lui confèrent une grande souplesse.
$ ls
alias Desktop iso pictures program_files todo
bin documents music podcasts src videos
ls [répertoire]
Buddy_Holly Clash Donald_Fagen new
$ ls /home/scott/music
Buddy_Holly Clash Donald_Fagen new
$ ls ~/videos
airhorn_surprise.wmv
apple_knowledge_navigator.mov
b-ball-e-mail.mov
carwreck.mpg
nerdtv_1_andy_hertzfeld
nerdtv_2_max_levchin_paypal
nerdtv_3_bill_joy
tiger.wmv
Ubuntu_Talk-Mark_Shuttleworth.mpeg
ls *
Vous venez de voir comment retrouver un fichier dans un
répertoire. Il existe cependant une méthode plus rapide,
mieux adaptée aux répertories qui contiennent de
nombreux fichiers. Si vous savez que la vidéo que vous
recherchez est au format Windows Media, son extension est
donc .wmv. Vous pouvez alors utiliser un caractère spécial
pour afficher tous les fichiers qui portent cette extension.
$ ls ~/videos
airhorn_surprise.wmv
apple_knowledge_navigator.mov
b-ball-e-mail.mov
carwreck.mpg
nerdtv_1_andy_hertzfeld
nerdtv_2_max_levchin_paypal
nerdtv_3_bill_joy
tiger.wmv
Ubuntu_Talk-Mark_Shuttleworth.mpeg
$ ls ~/videos/*.wmv
airhorn_surprise.wmv tiger.wmv
$ ls ~/videos/*tiger*
tiger.wmv
Info
Si le caractère spécial produit une correspondance avec un
répertoire, le contenu de celui-ci sera également affiché. Pour
éviter cette correspondance et l’affichage du contenu des sous-
répertoires, ajoutez l’option -d.
$ ls -R ~/iso
/home/scott/iso:
debian-6.0.4-i386-CD-1.iso knoppix ubuntu
/home/scott/iso/knoppix:
KNOPPIX_V7.2.0CD-2013-06-16-EN.iso
➥KNOPPIX_V7.4.2DVD-2014-09-28-EN.iso
/home/scott/iso/ubuntu:
kubuntu-15.04-desktop-amd64.iso ubuntu-15.04-desktop-
amd64.iso
ubuntu-14.04.3-server-amd64.iso
ls -1
$ ls -1 ~/bin
Desktop
documents
iso
music
pictures
podcaststodo
videos
ls -m
Pour ceux qui sont allergiques aux colonnes, que ce soit une
ou plusieurs, il existe l’option -m (ou --format=commas) pour
afficher le résultat sous la forme d’une suite de noms
séparés par des virgules.
$ ls -m ~/
ls -a
$ ls -a ~/
. .gimp-2.2 .openoffice.org1.9.95
.. .gksu.lock .openoffice.org1.9
.3ddesktop .glade2 .openoffice.org2
.abbrev_defs .gnome .opera
.acrorc .gnome2 .padminrc
.adobe .gnome2_private pictures
alias .gnome_private podcasts
Astuce
Nous venons d’expliquer que ls -a affiche tout ce qui débute par
un point, y compris les références aux dossiers . et ... Si vous
ne souhaitez pas voir apparaître ces deux entrées, utilisez
plutôt ls -A.
ls -F
En dehors de leur nom, la commande ls donne peu
d’informations sur les éléments d’un répertoire. Il est donc
difficile de savoir si un élément est un fichier, un répertoire
ou quelque chose d’autre. Pour résoudre ce problème,
utilisez l’option -F (ou --classify).
$ ls -F ~/bin
adblock_filters.txt fixm3u* pix2tn.pl*
addext* flash.xml* pop_login*
address_book.csv getip* procmail/
address_book.sxc homesize* programs_usual*
address_book.xls html2text.py* quickrename*
backup_to_chaucer* list-urls.py*
ls --color
En plus des symboles liés à l’option -F, vous pouvez aussi
demander au shell d’afficher les éléments à l’aide de
couleurs distinctives en fonction de leur type. Dans de
nombreuses distributions Linux, le shell affiche par défaut
les éléments à l’aide d’un code couleur. Si ce n’est pas le
cas pour votre installation, vous pouvez recourir à l’option --
color.
$ ls --color
adblock_filters.txt fixm3u pix2tn.pl
addext flash.xml pop_login
address_book.csv getip pnocmail
address_book.sxc homesize programs_kill
address_book.xls html2text.py programs_usual
backup_ssh_to_chaucer list-urls.py quickrename
$ ls -F --color
adblock_filters.txt fixm3u* pix2tn.pl*
addext* flash.xml* pop_login*
address_book.csv getip* pnocmail/
address_book.sxc homesize* programs_kill*
address_book.xls html2text.py* programs_usual*
backup_ssh_to_chaucer* list-urls.py* quickrename*
ls -l
$ ls -l ~/bin
total 2951
-rw-r--r-- 1 scott scott 15058 2015-10-03 18:49
➥adblock_filters.txt
-rwxr-xr-- 1 scott root 33 2015-04-19 09:45
➥addext
-rw-r--r-- 1 scott scott 84480 2015-04-19 09:45
➥addressbook.xls
-rwxr--r-- 1 scott scott 55 2015-04-19 09:45
➥batchprint_home
drwxr-xr-x 9 scott scott 1080 2015-09-22 14:42
➥bin_on_bacon
-rwxr-xr-- 1 scott scott 173 2015-04-19 09:45
➥changeext
-rwxr-xr-- 1 scott root 190 2015-04-19 09:45
➥convertsize
drwxr-xr-x 2 scott scott 48 2015-04-19 09:45
➥credentials
Info
Ces permissions devront être modifiées. Vous verrez comment
procéder au chapitre 8. Les commandes à employer seront chown
et chgrp.
Astuce
Pour afficher une liste de fichiers contenant pratiquement tous
les caractères du tableau précédent, essayez ls -l/dev.
$ ls -la ~/
drwxr-xr-x 2 scott scott 200 2015-07-28 01:31 alias
drwx------ 2 root root 72 2015-09-16 19:14 .aptitude
-rw------- 1 scott scott 8800 2015-10-18 19:55 .bash_history
-rw-r--r-- 1 scott scott 69 2015-04-20 11:00 .bash_logout
-rw-r--r-- 1 scott scott 428 2015-04-20 11:00 .bash_profile
-rw-r--r-- 1 scott scott 4954 2015-09-13 19:46 .bashrc
ls -r
$ ls -lar ~/
-rw-r--r-- 1 scott scott 4954 2015-09-13 19:46 .bashrc
-rw-r--r-- 1 scott scott 69 2015-04-20 11:00 .bash_logout
drwx------ 2 root root 72 2015-09-16 19:14 .aptitude
drwxr-xr-x 2 scott scott 200 2015-07-28 01:31 alias
Info
Souvenez-vous que -r est différent de -R. -r permet d’obtenir un
classement alphabétique inverse, tandis que -R permet
d’afficher la liste des éléments des sous-répertoires. La
confusion est facile.
Lorsqu’on utilise -l, les fichiers et répertoires sont
affichés par ordre alphabétique de leur nom. L’ajout de -r
inverse le classement, mais toujours en tenant compte du
nom des fichiers. Vous pouvez utiliser -r pratiquement
chaque fois que vous employez la commande ls pour
inverser l’ordre d’affichage du résultat de la commande
exécutée.
ls -t
$ ls -latr ~/
drwx------ 15 scott scott 1280 2015-10-18 20:07 .opera
drwx------ 2 scott scott 80 2015-10-18 20:07 .gconfd
drwxr-xr-x 2 scott scott 432 2015-10-18 23:11 .qt
drwxr-xr-x 116 scott scott 5680 2015-10-18 23:11 .
drwx------ 3 scott scott 368 2015-10-18 23:12 .gnupg
drwxr-xr-x 12 scott scott 2760 2015-10-18 23:14 bin
drwx------ 4 scott scott 168 2015-10-19 00:13 .Skype
ls -S
$ ls -laS ~/
-rw------- 1 scott scott 40122 2015-04-20 11:00 .nessusrc
-rw-r--r-- 1 scott scott 24988 2015-04-20 11:00 .abbrev_defs
-rwxr--r-- 1 scott scott 5465 2015-10-12 15:45 .vimrc
-rw------- 1 scott scott 1794 2015-10-19 10:59 .viminfo
-rw------- 1 scott scott 8757 2015-10-19 08:43 .bash_history
Lors d’un tri par taille, les éléments les plus volimineux
apparaissent en premier. Pour inverser cet ordre, utilisez
l’option -r.
Exprimer la taille des fichiers en ko, Mo
et Go
ls -h
$ ls -laSh ~/
-rw------- 1 scott scott 40K 2015-04-20 11:00 .nessusrc
-rw-r--r-- 1 scott scott 25K 2015-04-20 11:00 .abbrev_defs
-rwxr--r-- 1 scott scott 16K 2015-10-12 15:45 .vimrc
-rw------- 1 scott scott 12K 2015-10-19 10:59 .viminfo
-rw------- 1 scott scott 8.6K 2015-10-19 08:43 .bash_history
Info
Dans mon fichier ~/.bashrc, j’ai défini les alias suivants qui me
servent depuis des années. Utilisez ce que vous avez appris
dans cette section pour étendre ces exemples et créer des alias
qui répondent à vos besoins (pour plus d’informations sur les
alias, consultez le chapitre 12).
alias l=’ls -F’
pwd
Info
Le mot print dans l’expression print working directory signifie
afficher à l’écran, non imprimer sur une imprimante.
/home/scott/music/new
# ls -l
$ cd websites
$ pwd
/websites
$ pwd -P
/var/www
Changer de répertoire
cd
cd ~
/home/scott/music
$ cd ~
$ pwd
/home/scott
cd -
$ pwd
/home/scott
$ cd music/new
$ pwd
/home/scott/music/new
$ cd -
/home/scott
Conclusion
Si ce chapitre avait été un cours de droit, vous auriez appris
ce que sont les infractions, les délits et les crimes. S’il avait
été un cours de maintenance informatique, vous auriez
étudié la RAM, les disques durs et les cartes mères. Puisqu’il
s’agit d’un livre sur le shell de Linux, vous avez découvert
les commandes indispensables pour utiliser efficacement la
ligne de commande : ls, pwd et cd. Maintenant que vous
savez comment parcourir le système de fichiers, il est
temps de vous informer sur deux choses qui régissent
l’univers : la création et la destruction. Non seulement vous
saurez observer votre environnement, mais vous saurez
également le modifier à votre guise. Poursuivez votre
lecture !
Chapitre 3
Création et destruction
Dans chaque culture, des histoires se transmettent de
génération en génération pour expliquer comment le monde
s’est formé (cosmogonie) et comment il finira par
disparaître (eschatologie). Dans la mythologie nordique, les
deux lieux originaux de l’univers sont Muspellsheimr et
Niflheimr, tandis que Ragnarok renvoie à sa fin. Pour le
zoroastrisme, vous lirez le Bundahishn, puis vous vous
documenterez sur frashokereti. Pour les chrétiens, tout
commencerait avec la Genèse et finirait par l’Apocalypse.
Linux n’est pas une religion, mais ses adeptes ont bien la
capacité de créer et de détruire. Poursuivez votre lecture et
servezvous de votre nouveau pouvoir avec sagesse !
Info
Lorsque j’ai actualisé cet ouvrage pour sa deuxième édition, j’ai
retiré les sections qui concernent mkdir -v (qui montre les actions
de mkdir pendant son travail) et rm -v (qui fait de même, mais
pour rm). Vous les retrouverez sur mon site Web
(granneman.com/writing/books/linux-phrasebook).
touch
Info
Vous ne pourrez pas utiliser la commande touch pour changer
l’horodatage d’un fichier si vous ne possédez pas les
permissions d’écriture pour ce fichier.
$ ls -l ~/
drwxr-xr-x scott scott 2015-10-18 12:07 todo
$ touch wireless.log
$ ls -l ~/
touch -t
Caractères Signification
JJ Jour (01-31)
hh Heure (01-23)
mm Minutes (00-59)
ss Secondes (00-59)
$ ls -l
$ ls -l
$ ls -l
$ ls -l
touch
$ ls -l ~/
$ touch test.txt
$ ls -l ~/
mkdir
La commande touch permet de créer un fichier vide, mais
comment créer un nouveau répertoire ? Avec la commande
mkdir, tout simplement.
$ ls -l
$ mkdir test
$ ls -l
Info
Sur la plupart des systèmes, les propriétaires des nouveaux
répertoires créés avec mkdir se voient attribuer les permissions
en lecture, écriture et exécution, alors que les groupes et les
autres utilisateurs n’ont que les permissions de lecture et
d’exécution. Si vous souhaitez modifier ce comportement, lisez
ce qui concerne la commande chmod au chapitre 8, « Propriétés et
permissions ».
$ mkdir test
mkdir -p
Si vous souhaitez créer un sous-répertoire dans un sous-
répertoire dans un sous-répertoire, la tâche peut sembler
fastidieuse. Il faut créer le premier sous-répertoire, faire un
cd pour y accéder, créer un deuxième sous-répertoire,
refaire un cd, puis créer un troisième sous-répertoire.
Heureusement, mkdir est doté d’une option permettant de
rationaliser ce type de processus : -p (ou --parents).
$ ls -l
$ mkdir -p pictures/personal/family
$ ls -l
$ cd pictures
$ ls -l
$ cd personal
$ ls -l
cp
/home/scott/libby
$ ls
libby.jpg
$ cp libby.jpg libby_bak.jpg
$ ls
libby_bak.jpg libby.jpg
$ ls ~/libby
libby_bak.jpg libby.jpg
$ cp pictures/dogs/libby_arrowrock.jpg
~/libby/libby_arrowrock.jpg
$ ls ~/libby
libby_arrowrock.jpg libby_bak.jpg libby.jpg
libby_bak.jpg libby.jpg
$ cp pictures/dogs/libby_arrowrock.jpg .
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg
$ ls -l
$ ls libby
libby_arrowrock.jpg libby_bak.jpg libby.jpg
$ cp pictures/dogs/libby_on_couch.jpg libby
$ ls libby
libby_arrowrock.jpg libby_bak.jpg libby.jpg
➥libby_on_couch.jpg
cp *
$ pwd
/home/scott/libby
$ ls ~/pictures/dogs
libby_arrowrock.jpg libby_by_pool_03.jpg libby_on_floor_03.j
pg
libby_by_pool_01.jpg
libby_on_floor_01.jpg libby_on_floor_04.jpg
libby_by_pool_02.jpg libby_on_floor_02.jpg
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg
libby_on_couch.jpg
$ cp ~/pictures/dogs/libby_by_pool*.jpg .
$ ls
libby_arrowrock.jpg libby_by_pool_02.jpg libby_on_couch.jpg
libby_bak.jpg libby_by_pool_03.jpg libby_by_pool_01.jp
g
libby.jpg
$ pwd
/home/scott/libby
$ ls ~/pictures/dogs
libby_arrowrock.jpg libby_by_pool_03.jpg libby_on_floor_03.j
pg
libby_by_pool_01.jpg
libby_on_floor_01.jpg libby_on_floor_04.jpg
libby_by_pool_02.jpg libby_on_floor_02.jpg
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg libby_on_couch.
jpg
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg libby_on_couch.
jpg
$ cp ~/pictures/dogs/libby_on_floor_0[1-3].jpg .
$ ls
libby_arrowrock.jpg libby_on_couch.jpg libby_on_floor_03.j
pg
libby_bak.jpg libby_on_floor_01.jpg
libby.jpg libby_on_floor_02.jpg
cp -v
$ pwd
/home/scott/libby
$ ls ~/pictures/dogs
libby_arrowrock.jpg libby_by_pool_03.jpg libby_on_floor_03.j
pg
libby_by_pool_01.jpg
libby_on_floor_01.jpg libby_on_floor_04.jpg
libby_by_pool_02.jpg libby_on_floor_02.jpg
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg libby_on_couch.
jpg
$ cp -v ~/pictures/dogs/libby_on_floor_0[1-3].jpg .
‘/home/scott/pictures/dogs/libby_on_floor_01.jpg’ ->
➥’./libby_on_floor_01.jpg’
‘/home/scott/pictures/dogs/libby_on_floor_02.jpg’ ->
➥‘./libby_on_floor_02.jpg’
‘/home/scott/pictures/dogs/libby_on_floor_03.jpg’ ->
➥‘./libby_on_floor_03.jpg’
$ ls
libby_arrowrock.jpg libby_on_couch.jpg libby_on_floor_03.j
pg
Info
Plus vous gagnerez en expérience avec la ligne de commande
de Linux, plus vous constaterez que de nombreux programmes
utilisent l’option -v pour basculer en mode verbeux. Vous
retrouverez une cohérence similaire avec d’autres options. La
mémorisation des commandes n’est donc pas si difficile !
cp -i
$ pwd
/home/scott/libby
$ ls ~/pictures/dogs
libby_arrowrock.jpg libby_by_pool_03.jpg
libby_on_floor_03.jpg
libby_by_pool_01.jpg libby_on_floor_01.jpg
libby_on_floor_04.jpg
libby_by_pool_02.jpg libby_on_floor_02.jpg
$ ls
$ cp -i ~/pictures/dogs/libby_on_floor_0[1-3].jpg .
Attention
Pour les utilisateurs standard, le recours à l’option -i n’est
généralement pas nécessaire. En revanche, elle est cruciale
pour les utilisateurs root car ils risquent d’écraser un fichier
système, ce qui peut entraîner un désastre. Il peut donc être
intéressant de créer un alias dans le fichier .bashrc de
l’utilisateur root pour être certain d’exécuter cp -i et non
simplement cp.
alias cp=’cp -i’
$ pwd
/home/scott
$ cp libby libby_bak
$ pwd
/home/scott
$ ls -l
$ ls libby
libby_arrowrock.jpg libby_on_couch.jpg
libby_on_floor_03.jpg
libby_bak.jpg libby_on_floor_01.jpg libby.jpg
libby_on_floor_02.jpg
$ cp -R libby libby_bak
$ ls -l
cp -a
$ pwd
/home/scott
$ ls -l
$ ls -lR libby
libby:
total 312
libby/on_floor:
total 764
$ cp -a libby libby_bak
$ ls -l
$ ls -lR libby_bak
libby_bak/:
total 312
libby_bak/on_floor:
total 764
➥libby_on_floor_01.jpg
➥libby_on_floor_02.jpg
Info
Vous l’aurez compris, Libby est ma chienne, une adorable petite
shih-tzu, qui finit toujours par apparaître dans tout ce que
j’écris. Elle a quitté ce bas monde en août 2015.
mv
$ pwd
/home/scott/libby
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg libby_on_couch.
jpg
➥on_floor
$ ls ~/pictures/dogs
libby_on_floor_01.jpg libby_on_floor_03.jpg
libby_on_floor_02.jpg libby_on_floor_04.jpg
$ mv ~/pictures/dogs/libby_on_floor_04.jpg
libby_on_floor_04.jpg
$ ls
libby_arrowrock.jpg libby.jpg libby_on_floor_04.jpg
➥libby_bak.jpg libby_on_couch.jpg on_floor
$ ls ~/pictures/dogs
libby_on_floor_01.jpg libby_on_floor_02.jpg libby_on_floor_0
3. jpg
$ pwd
/home/scott/libby
$ ls
➥on_floor
$ ls ~/pictures/dogs
libby_on_floor_01.jpg libby_on_floor_03.jpg
libby_on_floor_02.jpg libby_on_floor_04.jpg
$ mv ~/pictures/dogs/libby_on_floor_04.jpg .
$ ls
libby_arrowrock.jpg libby.jpg libby_on_floor_04.jpg
➥libby_bak.jpg libby_on_couch.jpg on_floor
$ ls ~/pictures/dogs
libby_on_floor_01.jpg libby_on_floor_02.jpg libby_on_floor_0
3. jpg
$ pwd
/home/scott/libby
$ ls
libby_arrowrock.jpg libby.jpg libby_on_floor_04.jpg
➥libby_bak.jpg libby_on_couch.jpg on_floor
$ pwd
/home/scott/libby
$ ls
libby_arrowrock.jpg libby.jpg libby_on_floor_04.jpg
➥libby_bak.jpg libby_on_couch.jpg on_floor
$ ls on_floor
libby_on_floor_01.jpg libby_on_floor_02.jpg libby_on_floor_0
3. jpg
$ mv libby_on_floor_04.jpg on_floor
$ ls
libby_arrowrock.jpg libby_bak.jpg libby.jpg libby_on_couch.
jpg
➥on_floor
$ ls on_floor
libby_on_floor_01.jpg libby_on_floor_03.jpg
libby_on_floor_02.jpg libby_on_floor_04.jpg
Info
Les commandes cp et mv ont en commun de nombreuses options,
qui fonctionnent de la même façon. Par exemple, -v permet de
déplacer les fichiers en mode bavard et -i permet de déplacer
les fichiers en mode interactif.
Renommer des fichiers et des répertoires
mv
$ pwd
/home/scott/libby/by_pool
$ ls -F
libby_by_pool_02.jpg liebermans/
$ mv liebermans/ lieberman_pool/
$ ls -F
libby_by_pool_02.jpg lieberman_pool/
$ ls -i
49889 backup_daily.sh
49796 dotfiles/
49795 dotfiles.sh
49886 extra/
49291 wp_upgrade.sh
# df -h
/dev/sda 4.9G 742M 4.1G 16% /
$ df -i
ln
$ ls -l
$ cat moby_dick.txt
Call my Ishmael
$ ln moby_dick.txt white_whale.txt
$ ls -l
$ ls -i
40966 melville/
25689 moby_dick.txt
25689 white_whale.txt
$ cat white_whale.txt
Call my Ishmael
Info
La commande unlink est une autre manière de supprimer un lien
: unlink moby_dick.txt. Si vous avez fait attention, vous aurez
remarqué que j’ai employé unlink pour supprimer le fichier
original. Cela ne pose pas de problème car white_whale.txt reste
disponible, puisqu’il pointe sur le même inode et donc sur les
mêmes données.
$ cat white_whale.txt
Call me Ishmael
$ cat moby_dick.txt
Call me Ishmael
$ mv moby_dick.txt moby-dick.txt
$ cat while_whale.txt
Call me Ishmael
$ mv moby-dick.txt melville/
$ cat white_whale.txt
Call me Ishmael
$ ls -l /
$ cd /
$ sudo ln -s /var/www .
$ cd /
$ sudo ln -s /var/www
$ pwd
/home/scott
$ ln -s /var/www
$ ls -l
$ cd www
$ pwd -P
/var/www
$ ls -l
$ cat notes
$ ls -l
-rw-r--r-- 2 moby_dick.txt
-rw-r--r-- 2 white_whale.txt
$ ls -i
25689 moby_dick.txt
25372 webconf
25689 white_whale.txt
$ ls -i /etc
59948 apache2/
rm
$ pwd
/home/scott/libby/by_pool/lieberman_pool
$ ls
libby_by_pool_01.jpg libby_by_pool_03.jpg
libby_by_pool_01.jpg_bak libby_by_pool_03.jpg_bak $
rm libby_by_pool_01.jpg_bak
$ ls
libby_by_pool_01.jpg libby_by_pool_03.jpg
➥libby_by_pool_03.jpg_bak
rm *
$ pwd
/home/scott/libby/by_pool/lieberman_pool
$ ls
libby_by_pool_01.jpg libby_by_pool_03.jpg
libby_by_pool_01.jpg_bak libby_by_pool_03.jpg_bak
$ rm *_bak
$ ls
libby_by_pool_01.jpg libby_by_pool_03.jpg
Attention
Faites très très attention lorsque vous supprimez des fichiers à
l’aide des caractères spéciaux, car vous risquez de supprimer
beaucoup plus de choses que prévu. L’exemple classique est
l’exécution de rm * txt au lieu de rm *txt (avec une espace, dans
le premier cas, entre le * et txt). Au lieu d’effacer tous les
fichiers texte (ce qui se passe dans le second cas), l’astérisque
implique que tous les fichiers seront supprimés et rm cherchera
ensuite à détruire un fichier nommé txt. Oups !
rm -i
/home/scott/libby/by_pool/lieberman_pool
$ ls
libby_by_pool_01.jpg libby_by_pool_03.jpg
libby_by_pool_01.jpg_bak libby_by_pool_03.jpg_bak
$ rm -i *_bak
$ ls
libby_by_pool_01.jpg libby_by_pool_03.jpg
rmdir
$ pwd
/home/scott/libby/by_pool
$ ls
libby_by_pool_02.jpg lieberman_pool lieberman_pool_bak
$ ls lieberman_pool_bak
libby_by_pool_01.jpg libby_by_pool_03.jpg
libby_by_pool_01.jpg_bak libby_by_pool_03.jpg_bak
$ rm lieberman_pool_bak
rm -rf
$ pwd
/home/scott/libby/by_pool
$ ls
libby_by_pool_02.jpg lieberman_pool lieberman_pool_bak
$ ls lieberman_pool_bak
libby_by_pool_01.jpg libby_by_pool_03.jpg
libby_by_pool_01.jpg_bak libby_by_pool_03.jpg_bak
$ rm -rf lieberman_pool_bak
$ ls
libby_by_pool_02.jpg lieberman_pool
Attention
La commande rm -rf peut détruire des fichiers importants et
votre système avec. Vérifier à deux fois ce que vous supprimez
avant d’exécuter rm -rf !
$ ls
cousin harold.jpg -cousin_roy.jpg cousin_beth.jpg
$ rm cousin harold.jpg
$ rm "cousin harold.jpg"
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm -cousin_roy.jpg
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm -- -cousin_roy.jpg
$ ls
cousin_beth.jpg
$ ls
-cousin_roy.jpg cousin_beth.jpg
$ rm ./-cousin_roy.jpg
$ ls
cousin_beth.jpg
Conclusion
Info
Dans la deuxième édition de ce livre, j’ai retiré les informations
qui concernent man -u (reconstruction de la base de donnée des
commandes utilisée par man) et man -t (impression de pages de
manuel). Par ailleurs, whatis a été déplacée dans man -f, tandis
que apropos a rejoint man -k. Vous retrouverez les descriptions
d’origine sur mon site Web
(granneman.com/writing/books/linux-phrasebook).
man
$ man ls
LS(1) User Commands LS(1)
NAME
SYNOPSIS
DESCRIPTION
➥--sort is specified.
-a, --all
-A, --almost-all
Info
Par défaut, man affiche le contenu des pages de manuel avec less
(voir au chapitre 6). Les touches qui permettent de naviguer
dans ce contenu sont celles de less ; pour en savoir plus sur ces
touches, saississez man less. Si vous souhaitez utiliser un autre
outil que less, modifiez simplement la variable d’environnement
ou PAGER. Pour de plus en plus d’informations sur ce sujet,
MANPAGER
effectuez une recherche !
Astuce
Sur la plupart des distributions, les pages man sont en anglais.
Heureusement pour vous, il existe de nombreuses traductions
de ces pages en français sur Internet. Vous pouvez, entre
autres, consulter le site http://jp.barralis.com/linuxman/. Cela
dit, les versions anglaises seront toujours les plus à jour et
certaines traductions françaises sont incomplètes.
man -f
whatis
$ man -f ls
$ whatis ls
$ whatis -w ls*
$ whatis -r ^rm.*
Astuce
La place manque dans ce livre pour traiter des expressions
régulières. Pour plus d’informations sur le sujet, vous pouvez
lire Sams Teach Yourself Regular Expressions in 10 Minutes
(ISBN : 0672325667), de Ben Forta (non traduit) ou les ouvrages
disponibles en français dans toute bonne librairie. Je vous
conseille fortement d’apprendre à les utiliser car elles sont
réellement très pratiques (rendez-vous sur http://xkcd.com/208/
!).
apropos
$ man list
$ man -k list
Astuce
Si les résultats sont particulièrement longs et si vous ne
parvenez pas à trouver ce que vous cherchez, essayez de
rediriger man –k vers grep. (La redirection fera l’objet du prochain
chapitre, tandis que grep sera détaillé au chapitre 10, «
Recherche d’éléments ».) Pour le moment, voici un exemple
d’utilisation : man -k list | grep hardware. Vous pouvez aussi
essayer apropos.
$ apropos -e list
man [1-8]
NAME
SYNOPSIS
passwd [-x max] [-n min] [-w warn] [-i inact] login
DESCRIPTION
$ man 5 passwd
NAME
DESCRIPTION
info
Info
Personnellement, je n’aime pas vraiment les pages info. Si je
suis obligé d’en utiliser une, car il n’existe aucune bonne page
man, je me tourne habituellement vers Google.
$ info info
Typing "q" exits, "?" lists all Info commands, "d" returns
➥here,
* Menu:
Basics
whereis
$ whereis kword
➥/usr/bin/X11/kword usr/share/man/man1/kword.1.gz
$ whereis -b kword
$ whereis -m kword
kword: /usr/share/man/man1/kword.1.gz
$ whereis -s kword
kword: /usr/src/koffice-1.4.1/kword
which
$ which kword
/usr/bin/kword
$ which arglebargle
$ which -a kword
/usr/bin/kword
/usr/bin/X11/kword
type
$ type ls
$ type cd
cd is a shell builtin
$ type whereis
whereis is /usr/bin/whereis
$ type mark
mark is a function
mark ()
mkdir -p "$MARKPATH";
ln -s "$(pwd)" "$MARKPATH/$1"
$ type do
do is a shell keyword
$ type -t ls
alias
$ type -t cd
builtin
$ type -t mark
function
$ type -a ls
ls is /bin/ls
$ ls -l /home/scott/music
➥John_Coltrane.zip
$ unzip /home/scott/music/John_Coltrane.zip
$ mkdir -p /home/scott/music/coltrane
$ mv /home/scott/music/John_Coltrane*.mp3
➥/home/scott/music/coltrane/
$ rm /home/scott/music/John_Coltrane.zip
$ ls -l /home/scott/music
➥John_Coltrane.zip
$ unzip /home/scott/music/John_Coltrane.zip ;
➥mkdir -p /home/scott/music/coltrane ;
➥mv /home/scott/music/John_Coltrane*.mp3
➥/home/scott/music/coltrane/ ;
➥rm /home/scott/music/John_Coltrane.zip
Attention
Faites attention avec le chaînage des commandes, en particulier
lorsqu’il s’agit de déplacer ou de supprimer des fichiers. Vérifiez
que ce que vous avez tapé correspond bien à ce que vous
souhaitez faire, car les commandes vont s’exécuter les unes
après les autres et vous risquez d’obtenir un résultat
surprenant.
Exécuter des commandes uniquement en
cas de succès des précédentes
&&
$ unzip /home/scott/music/John_Coltrane.zip ;
➥mkdir -p /home/scott/music/coltrane ;
➥mv /home/scott/music/John_Coltrane*mp3
➥/home/scott/music/coltrane/ ;
➥rm /home/scott/music/John_Coltrane.zip
$ unzip /home/scott/John_Coltrane.zip ;
➥mkdir -p /home/scott/music/coltrane ;
➥mv /home/scott/music/John_Coltrane*mp3
➥/home/scott/music/coltrane/ ;
➥rm /home/scott/music/John_Coltrane.zip
Info
Vous ne croyez pas qu’un tel enchaînement d’événements
puisse se produire ? La chose m’est arrivée il y a quelques
années et je me suis senti particulièrement stupide.
➥mv /home/scott/music/John_Coltrane*mp3
➥/home/scott/music/coltrane/ &&
➥rm /home/scott/music/John_Coltrane.zip
||
ping -c 1 -w 15 -n 8.8.8.8 ||
{
Info
Vous vous demandez ce qu’est ce symbole | (avec une seule
barre) ? Consultez la section « Utiliser la sortie d’une commande
comme entrée d’une autre » dans la suite de ce chapitre pour
découvrir sa fonction.
$()
La substitution de commande prend la sortie d’une
commande et l’insère dans une autre commande, comme si
vous aviez saisi manuellement le résultat de la première
commande directement dans la suivante. La première
commande, celle dont on souhaite réutiliser la sortie
ailleurs, doit être entre parenthèses, comme ceci : $().
Prenons un exemple pour être plus clair.
Vous revenez d’un repas familial, connectez votre
appareil photo numérique à votre ordinateur Linux, en
extrayez les images et souhaitez les placer dans un dossier
portant la date du jour.
$ pwd
/home/scott/photos/family
$ ls -1F
2015-11-01/
2015-11-09/
2015-11-15/
$ date "+%Y-%m-%d"
2015-11-24
$ ls -1F
2015-11-01/
2015-11-09/
2015-11-15/
2015-11-24/
Info
Autrefois, on était supposé englober la commande initiale dans
une paire d’apostrophes inversées (symbole `). Aujourd’hui, il
est conseillé d’employer la syntaxe utilisée dans le code
précédent : $(). Il est possible d’imbriquer $(), c’est-à-dire avoir
$() à l’intérieur d’un autre $(), alors qu’il est beaucoup plus
complexe d’utiliser des apostrophes inversées dans d’autres
apostrophes inversées. Par ailleurs, $() est beaucoup plus
visible !
$ pwd
/usr/bin
$ ls -1
zipinfo
zipnote
zipsplit
zsoelim
zxpdf
$ ls -1 | less
7z
a2p
acidrip
aconnect
➥admin@davidhart.com
➥[wine-preloader] <defunct>
$ ps ux | grep firefox
➥/opt/firefox/firefox-bin
Info
La plupart des programmes peuvent fonctionner avec des tubes,
mais pas tous. L’éditeur de texte vim (ou pico, nano ou emacs), par
exemple, a un contrôle total du shell et tout ce qui est saisi au
clavier est donc redirigé vers vim. Les sorties, elles, s’affichent
dans le programme. vim ayant un contrôle total sur le shell, il est
impossible de rediriger sa sortie. Vous apprendrez à reconnaître
les programmes qui ne peuvent être utilisés avec des tubes à
mesure que vous emploierez le shell.
>
/home/scott/music
$ ls -1F
Hank_Mobley/
Horace_Silver/
John_Coltrane/
$ cat hank_mobley.txt
1958_Peckin’_Time/
1960_Roll_Call/
1960_Soul_Station/
1961_Workout/ 1963_No_Room_For_Squares/
$ ls -1F
Hank_Mobley/
hank_mobley.txt
Horace_Silver/
John_Coltrane/
Attention
Faites attention lorsque vous utilisez des redirections, car vous
pouvez détruire le contenu de fichiers importants.
set -o noclobber
$ pwd
/home/scott/music
$ ls -1F
Hank_Mobley/
hank_mobley.txt
Horace_Silver/
John_Coltrane/
ERROR
$ cat hank_mobley.txt
1958_Peckin’_Time/
1960_Roll_Call/
1960_Soul_Station/
1961_Workout/
1963_No_Room_For_Squares/
$ date
$ cat hank_mobley.txt
$ cat hank_mobley.txt
$ cat hank_mobley.txt
1958_Peckin’_Time/
1960_Roll_Call/
1960_Soul_Station/
1961_Workout/
1963_No_Room_For_Squares/
Attention
Faites attention avec >>. Si vous saisissez > par erreur, vous
n’ajouterez pas la sortie de la commande au fichier mais
l’écraserez.
$ cat commands.txt
CP
LS
MKDIR
RM
TR
cp
ls
mkdir
rm
tr
$ ls
commands.txt
$ cat commands.txt
CP
LS
MKDIR
RM
TR
$ ls
commands_lower.txt commands.txt
$ cat commands_lower.txt
cp
ls
mkdir
rm
tr
Info
Vous pensez peut-être pouvoir procéder de la manière suivante
:
tr ‘A-Z’ ‘a-z’ < commands.txt > commands.txt
tee
1958_Peckin’_Time
1960_Roll_Call
1960_Soul_Station
1961_Workout
1963_No_Room_For_Squares
$ ls
hank_mobley.txt
$ cat hank_mobley.txt
1958_Peckin’_Time
1960_Roll_Call
1960_Soul_Station
1961_Workout
1963_No_Room_For_Squares
1958_Peckin’_Time
1960_Roll_Call
1960_Soul_Station
1961_Workout 1963_No_Room_For_Squares
$ ls
hank_mobley_reverse.txt hank_mobley.txt
$ cat hank_mobley_reverse.txt
1963_No_Room_For_Squares
1961_Workout
1960_Soul_Station
1960_Roll_Call
1958_Peckin’_Time
Conclusion
file
$ ls -1F
838005x.docx
event.h
Lovecraft/
mtr*
Outline.md
Paper.doc
test
test.sh*
tix.jpg
www@
Yeats.txt
$ file *
Lovecraft: directory
➥2.6.8, stripped
Info
J’aurais préféré que Outline.md soit identifié comme un fichier
Markdown, mais ce n’est pas le cas. Cela dit, les fichiers
Markdown ne sont que des fichiers texte contenant Markdown.
file a donc raison, même s’il manque de précision. Pour de plus
amples informations sur Markdown, consultez Wikipédia
(https://fr.wikipedia.org/wiki/Markdown), Pandoc, un
convertisseur de document universel qui reconnaît Markdown
(http://johnmacfarlane.net/pandoc/index.html), et mes propres
articles sur ce sujet (www.chainsawonatireswing.com/?
s=markdown).
$ file -z 838005x.docx
➥to extract)
cat
$ ls
Oh_when_I_was_in_love.txt With_rue.txt
$ ls
5
10
15
Info
tac est une alternative intéressante à cat. Il s’agit bien de cat à
l’envers, et ce pour une bonne raison : tac permet de concaténer
des fichiers dans l’ordre inverse de cat.
La commande cat est utile, mais pas avec les longs fichiers
qui ne peuvent tenir sur un écran, car ils défilent trop vite
pour être lisibles. Si vous souhaitez afficher à l’écran un
fichier de plusieurs pages, utilisez non pas cat, mais less.
La commande less est un exemple de pager, un
programme affichant des fichiers texte page par page. Il en
existe d’autres, comme more, pg et most. En fait, less est une
version améliorée de more qui date de 1985. Pas de doute,
less is more, comme disent les anglophones.
Rien n’est plus facile que d’ouvrir un énorme fichier texte
avec less :
$ less Milton_-_Paradise_Lost.txt
Astuce
Voici une opération qui pourrait vous poser des problèmes :
vous utilisez ls --color (voir la section « Afficher le contenu avec
des couleurs » au chapitre 2) en redirigeant la sortie vers less,
avec le résultat suivant:
$ ls
$ ls --color | less
ESC[0mESC[01;34mBurroughsESC[0m
ESC[01;34mHowardESC[0m
ESC[01;34mLovecraftESC[0m
$ ls --color | less -R
Burroughs
Howard
Lovecraft
Info
Non, Milton ne désigne jamais explicitement le fruit défendu
comme une pomme, c’est juste un « fruit ». Oui, j’ai travaillé sur
un doctorat en littérature anglaise du e siècle. Non, je ne l’ai
jamais fini, ce qui explique pourquoi j’écris un livre sur Linux et
non sur Milton.
Info
J’aime beaucoup vim qui, avec son ancêtre vi, se trouve sur
pratiquement tous les systèmes Unix. S’il n’est pas décrit dans
cet ouvrage c’est simplement parce qu’il mérite son propre livre
! Les débutants peuvent commencer par l’ouvrage Learning the
vi and Vim Editors, pour ensuite passer à sa maîtrise grâce au
site http://zzapper.co.uk/vimtips.html.
head
General Prologue
General Prologue
Book I
head -n
General Prologue
Book I
Notez que les lignes vides sont comptées dans les cinq
lignes demandées. Cinq lignes, c’est cinq lignes, quel que
soit leur contenu.
Vous pouvez tout aussi facilement indiquer --lines=100
(par exemple) pour en voir plus que les 10 lignes par défaut.
head -c
General Prologue
General Prologue
tail
Si la commande head permet d’afficher les dix lignes de
début d’un fichier, tail commence à l’autre extrémité, en
permettant l’affichage des dix dernières.
$ tail Paradise_Lost.txt
Astuce
tail a beau être capable d’afficher plusieurs fichiers, multitail est
bien meilleur à cette tâche. En effet, au lieu de concaténer les
résultats et de les ressortir en masse comme le fait tail, multitail
affiche les dernières lignes des fichiers indiqués en même
temps, chacun dans sa propre petite sous-fenêtre de console.
Vous pouvez le télécharger depuis le dépôt de logiciels de votre
distribution (voir le chapitre 14, « Installation de logiciels ») ou
le récupérer sur www.vanheusden.com/multitail/. Pour en savoir
plus sur ce petit programme très pratique, consultez l’article «
Monitoring logs and command output » de William von Hagen
(https://www.ibm.com/developerworks/aix/library/au-monitor-
logs/).
tail -f
Astuce
En connaissant le PID du processus qui génère le fichier
examiné avec tail, nous pouvons nous servir de la commande
tail -f --pid=PID#. Voici son avantage : lorsque le processus
identifié par le PID meurt, tail arrête sa surveillance. Par
exemple, en supposant que le PID d’apache soit 2112, la
commande suivante permet d’examiner le fichier généré par ce
processus :
$ tail -f --pid=2112 /var/log/apache2/error.log
À l’arrêt du processus apache, tail termine son suivi du fichier
error.log. Pour profiter de cette commande, vous devez connaître
le fichier et le PID qui le génère (ps nous servira à cela !).
Conclusion
wc
15428
Quoi ! Bloqué !
Voici un autre exemple, que nous reverrons dans la
section « Mettre fin à un processus » du chapitre 13 :
83
Info
Si vous vous demandez pourquoi j’ai placé des crochets autour
de la première barre oblique ([/]usr/bin/cronolog), lisez la section «
Rechercher des mots spécifiques dans la sortie d’autres
commandes » du chapitre 10.
103
Info
La section « Activer et désactiver la permission suid » du
chapitre 8 donne un autre exemple de redirection d’une sortie
vers wc.
nl
4 —Algernon Blackwood.
5 I.
6 —Algernon Blackwood.
8 I.
cut
Movie Genre Hero Year
Aliens Sci-Fi Ellen Ripley 1986
The Thing Horror MacReady 1982
Movie Hero
Aliens Ellen Ripley
The Thing MacReady
images.granneman.com
Movie,Hero
Aliens,Ellen Ripley
The Thing,MacReady
$ echo $HOSTNAME
perseus.websanity.com
perseus
Info
Je fais preuve d’une certaine approximation lorsque j’écris «
nom réel de l’ordinateur » et « nom de domaine », mais, dans ce
cas, cela convient. Pour de plus amples informations sur le DNS
et ses différents aspects, pouvez consulter la page
https://fr.wikipedia.org/wiki/Nom_de_domaine.
www.granneman.com
sort
Movie Genre Hero Year
Aliens Sci-Fi Ellen Ripley 1986
The Thing Horror MacReady 1982
$ sort cool_movies.txt
Movie Genre Hero Year
The Thing Horror MacReady 1982
The Thing Horron MacReady 1982
The Thing Honnon MacReady 1982
Aliens Sci-Fi Ellen Ripley 1986
Aliens Sci-Fi Ellen Ripley 1986
The Thing Honnon MacReady 1982
sort -n
sort -h
$ cd /var
$ du -d 1 | sort
154272 ./cache
1724 ./backups
200976 ./lib
21624 ./mysql_import
2263216 ./log
34479828 ./www
$ du -d 1 | sort -n
1724 ./backups
21624 ./mysql_import
154272 ./cache
200976 ./lib
324204 ./shared_assets
2264292 ./log
34434904 ./www
$ du -d 1 -h | sort -n
1.7M ./backups
2.2G ./log
22M ./mysql_import
33G ./www
151M ./cache
197M ./lib
317M ./shared_assets
$ du -d 1 -h | sort -h
1.7M ./backups
22M ./mysql_import
151M ./cache
197M ./lib
317M ./shared_assets
2.2G ./log
33G ./www
uniq
Linux est en mesure de transformer les lignes en double
d’un fichier en une ligne unique pour chaque ensemble de
doublons. Autrement dit, trois lignes contenant l’expression
« Linux, Guide de survie » (et uniquement « Linux, Guide de
survie ») deviendraient une seule ligne « Linux, Guide de
survie ». La commande capable de cette prouesse se
nomme uniq.
À un moment donné, j’ai eu besoin de déterminer les
commandes qui étaient exécutées et à quelle fréquence.
Nous allons voir comment j’ai procédé et quel a été le rôle
de uniq. (Tous les exemples suivants ont été tronqués en
raison des milliers de lignes des résultats.)
$ history
12300 cd /var/www
12302 ln -s /var/shared_assets ~/
12303 cd bin
man
ps
ps
apt-cache
cat
cd
ln
cd
man
man
ps
apt-cache
cat
cd
ln
cd
man
apt-cache
cat
cd
ln
man
ps
14 apt-cache
50 cat
229 cd
249 ln
84 man
17 ps
14 apt-cache
17 ps
50 cat
84 man
229 cd
249 ln
tr
H.P. LOVECRAFT
H.P. LOVECRAFT
tr -s
tr -d
web_ready () {
➥tr -d ‘[:punct:]’ |
$ ls
what-they-know-what-you-dont.pdf
Info
J’ai mentionné brièvement UTF-8 au chapitre suivant, sans
vraiment expliquer ce que c’est et pourquoi c’est important. J’ai
préparé une page Web et quelques diapositives pour mes
étudiants afin d’expliquer les formats ASCII, UTF-8 et d’autres.
Si cela vous intéresse, vous pouvez consulter cette page à
l’adresse
www.granneman.com/webdev/coding/characterencoding/ et la
présentation à
http://files.granneman.com/presentations/webdev/Web-Dev-
Intro.pdf.
Info
Quelle est la différence entre ${extension} et $extension ? Il n’y en a
pas ; les deux expressions ont la même signification. Nous
utilisons ${extension} car cette expression est plus facile à lire et
à voir comme une variable.
$ extension=pdf
➥sed "s/${extension}/.$extension/"
sed
Info
La commande sed apparaît à plusieurs reprises dans cet ouvrage
:
• les sections « Dénombrer les mots, les lignes et les caractères
dans un fichier », « Trier le contenu d’un fichier » et
« Supprimer les caractères correspondants » de ce chapitre ;
• la section « Créer une nouvelle fonction permanente » du
chapitre 12.
Outre mes modestes contributions, je vous recommande les
lectures suivantes :
• « Sed - An Introduction and Tutorial » de Bruce Barnett
(www.grymoire.com/Unix/Sed.html) ;
• la série d’articles « Sed One-Liners Explained » de Peteris
Krumins (https://catonmat.net/archive?q=Sed%20One-
Liners%20Explained) ;
• le livre Sed One-Liners Explained de Peteris Krumins
(www.catonmat.net/blog/sed-book/) ;
• « Useful One-Line Scripts for sed » d’Eric Pement
(www.pement.org/sed/sed1line.txt) ;
• le livre sed & awk de Dale Dougherty et Arnold Robbins.
$ ls
$ ls
$ cat twisters.txt
➥chuck wud?
➥chuck wood?
$ cat twisters.txt
➥chuck wud?
$ cat twisters.txt
➥chuck wood?
$ cat handconv.sh
#!/bin/sh
# Set IFS to split on newlines, not spaces, but 1st save old
IFS
SAVEIFS=$IFS
IFS=$’\n’
for i in * ; do
extension=${i##*.}
➥--preset="Normal"
done
➥& <newline>
IFS=$SAVEIFS
$ cat handconv.sh
#!/bin/sh
SAVEIFS=$IFS
IFS=$’\n’
for i in * ; do
extension=${i##*.}
➥ --preset="Normal"
done
IFS=$SAVEIFS
awk
Info
Vous retrouverez la commande awk dans l’exemple de la section
« Créer une nouvelle fonction permanente » chapitre 12. Outre
mes modestes contributions, je vous recommande les lectures
suivantes :
• « Awk » de Bruce Barnett (www.grymoire.com/Unix/Awk.html)
;
• Eric Pement’s “Handy One-Line Scripts for awk”
(www.pement.org/awk/awk1line.txt) ;
• la série d’articles « Awk One-Liners Explained » de Peteris
Krumins (https://catonmat.net/archive?q=Awk%20One-
Liners%20Explained) ;
• le livre Awk One-Liners Explained de Peteris Krumins
(www.catonmat.net/blog/awk-book/) ;
• « Handy One-Line Scripts for awkd » d’Eric Pement
(www.pement.org/awk/awk1line.txt) ;
• le livre sed & awk de Dale Dougherty et Arnold Robbins.
• le livre The AWK Programming Language de Alfred Aho, Peter
J. Weinberger et Brian W. Kernighan (prêtez attention aux
initiales des noms de famille !).
$ wc -c /var/mail/mail
2780599 /var/mail/mail
2780599
mail is 2715.43 MB
Astuce
Il serait intéressant de transformer cette commande en
fonction, car elle est un peu longue et peu amusante à saisir.
Pour cela, consultez la section « Créer une nouvelle fonction
temporaire » au chapitre 12.
$ df -h
$ df -h | awk 'NR>1 { print $6 " has " $4 " of " $2 " left" }'
Info
En réfléchissant à l’exemple précédent, vous avez peut-être
imaginé ceci :
$ df -h | grep '^/' |
➥awk '{ print $6 " has " $4 " of " $2 " left" }'
C’est tout à fait correct ! Au lieu d’utiliser NR>1 dans awk, nous
pouvons demander à grep d’écarter toute ligne qui ne commence
pas par / ; cela permet effectivement de supprimer la première
ligne de la sortie produite par df. À vous de choisir la solution
qui vous convient. Une fois encore, cela montre que les
commandes de Linux offrent plusieurs manières d’effectuer un
travail.
Conclusion
Info
Pour la deuxième édition de cet ouvrage, j’ai retiré les sections
qui concernaient chgrp -v et chgrp -c (toutes deux affichent les
actions de chgrp pendant son travail). Les descriptions originales
se trouvent sur mon site Web
(granneman.com/writing/books/linux-phrasebook).
Changer d’utilisateur
su nom_utilisateur
La commande su (qui signifie switch user et non super user
comme le veut la légende) permet à un utilisateur d’agir
temporairement comme s’il était un autre utilisateur. On
l’utilise souvent lorsqu’on souhaite un accès rapide au shell
en tant que root pour exécuter une ou deux commandes,
puis revenir à son état antérieur d’utilisateur non root. C’est
un peu comme Clark Kent se transformant en Superman,
sauvant le monde, puis reprenant son statut de petit
journaliste.
Pour invoquer su, il suffit de saisir su suivi du nom de
l’utilisateur dont vous voulez emprunter l’identité, puis de
saisir son mot de passe.
$ ls
/home/scott/libby
$ whoami
scott
$ su gromit
Password:
$ whoami
gromit
$ ls
/home/scott/libby
su -l
La commande su ne fonctionne que si vous connaissez le
mot de passe de l’utilisateur. Pas de mot de passe, pas de
transformation. Si cela fonctionne, vous adoptez le shell que
l’utilisateur a défini dans son fichier /etc/passwd : sh, zsh ou
bash, par exemple. La plupart des utilisateurs Linux
emploient le shell bash, mais vous ne constaterez pas de
différences notables. Notez également dans l’exemple
précédent que vous n’avez pas changé de répertoire en
changeant d’utilisateur. Vous êtes devenu gromit, mais vous
utilisez toujours les variables d’environnement de scott.
C’est un peu comme si vous aviez trouvé les habits de
Superman et que vous les ayez enfilés : vous ressemblez à
Superman (cool !), mais vous n’avez aucun de ses pouvoirs.
Vous pouvez remédier à cette situation grâce à l’option -l
(ou --login).
$ ls
/home/scott/libby $
whoami
scott
$ su -l gromit
Password:
$ whoami
gromit
$ ls
/home/gromit
Devenir root
su
$ whoami
scott
$ su
Password:
$ whoami
root
su -
/home/scott/libby
$ whoami
scott
$ su
Password:
$ whoami
root
$ ls
/home/scott/libby
$ ls
/home/scott/libby $
whoami
scott
$ su -
Password:
$ whoami
root
$ ls
/root
$ touch script.sh
$ ls -l
Info
Le nom de l’utilisateur et le nom du groupe sont tous les deux
scott sur cette machine, mais ce n’est pas nécessairement le cas
sur tous les systèmes. Lorsqu’un fichier est créé, l’UID de
l’utilisateur (User ID number, numéro d’identifiant utilisateur)
devient le propriétaire du fichier, alors que le GID de
l’utilisateur (Group ID number, numéro d’identifiant de groupe)
devient le groupe du fichier.
$ ls -l
Info
Ce script ne fonctionnera pas, car il n’est pas exécutable. Vous
verrez plus loin comment modifier ses autorisations grâce à
chmod.
Vous devez savoir plusieurs choses à propos de chgrp.
Lorsque vous l’exécutez, vous pouvez utiliser le nom ou
l’identifiant numérique d’un groupe. Pour connaître le
numéro associé à un groupe, le plus simple consiste à
utiliser cat /etc/group pour visualiser le contenu du fichier
qui conserve la trace de tous les groupes sur votre machine
:
$ cat /etc/group
bind:x:118:
scott:x:1001:
admins:x:1002:scott,alice,bob
[liste coupée en raison de sa longueur]
chgrp -R
$ pwd
/home/scott/pictures/libby
$ ls -F
$ ls -lF *
by_pool/:
on_floor/:
$ ls -l *
by_pool:
on_floor:
Attention
Si vous aviez employé chgrp -R family *, vous n’auriez modifié
aucun des fichiers commençant par un point (.) dans le
répertoire /home/scott/pictures/ libby. Cependant, la forme chgrp -R
family .* ne doit pas non plus être utilisée. Elle traite tous les
fichiers commençant par un point dans le répertoire courant,
mais, comme .* correspond aussi à .., cela entraînera
également une modification des fichiers dans le répertoire
parent, ce qui n’est vraisemblablement pas ce que vous
souhaitez.
chown
Il est important de savoir modifier le groupe d’un fichier,
mais, le plus souvent, vous modifierez son propriétaire. Pour
modifier le groupe, on utilise chgrp ; pour modifier le
propriétaire, on emploie chown. Toutefois, nous devons faire
une mise en garde importante à propos de chown : seul
l’utilisateur root (ou en utilisant sudo, comme sur Ubuntu)
peut modifier le propriétaire des fichiers ! Si vous n’êtes pas
root, vous ne pouvez pas changer le propriétaire de vos
propres fichiers.
Astuce
Pour que d’autres utilisateurs aient accès à vos fichiers, vous
pouvez demander à root d’employer la commande useradd ou
usermod pour ajouter ces utilisateurs au groupe qui contrôle le
fichier. Mais même dans ce cas, l’utilisateur root (ou un
utilisateur avec sudo) doit faire cette opération.
# ls -l
# ls -l
bind:x:110:118::/var/cache/bind:/bin/false
scott:x:1001:1001:Scott,,,:/home/scott:/bin/bash
ntop:x:120:120::/var/lib/ntop:/bin/false
Le premier nombre à apparaître est l’identifiant
numérique de l’utilisateur (le second est l’identifiant
numérique du groupe de l’utilisateur).
Attention
À l’instar de chgrp -R, vous pouvez exécutez chown -R pour modifier
de façon récursive le propriétaire des fichiers et des
répertoires. Mais vous devez avoir conscience d’un petit
problème. Si vous utilisez la forme chown -R scott *, vous ne
modifierez pas le propriétaire des fichiers commençant par un
point (.) dans le répertoire courant. En revanche, la forme chown -
R scott .* ne doit pas être employée. Elle traite tous les fichiers
commençant par un point dans le répertoire courant, mais, .*
correspondant aussi à .., cela entraînera une modification des
fichiers dans le répertoire parent, ce qui n’est
vraisemblablement pas ce que vous souhaitez.
chown propriétaire:groupe
$ ls -l
$ ls –l
$ ls -l
$ ls –l
Astuce
Comment faire si le nom d’un groupe ou d’un utilisateur
contient le symbole deux-points ? Saisissez simplement une
barre oblique inversée (\) juste avant les deux-points, de
manière à « protéger » le caractère et à prévenir le système
qu’il s’agit d’un simple symbole deux-points, non d’un caractère
séparant un nom d’utilisateur d’un nom de groupe.
$ chown denise:family\:parents libby.jpg
Info
Pour séparer le nom d’utilisateur et le nom de groupe, vous
pouvez en fait utiliser indifféremment les symboles . et :. Les
recommandations les plus récentes encouragent toutefois
l’utilisation de : aux dépens de ..
Info
Les systèmes Linux disposent désormais d’un système de
permissions plus puissant nommé ACL (Access Control Lists). Au
moment de l’écriture de ces lignes, les ACL ne sont pas encore
largement utilisées et nous ne les présenterons donc pas dans
cet ouvrage. Vous trouverez toutes les informations nécessaires
en lisant http://lea-
linux.org/documentations/index.php/Gestion_des_ACL (Léa
Linux). Vous pouvez également consulter la page de manuel (man
acl) correspondante si votre système en dispose.
Info
L’utilisateur root peut faire tout ce qu’il souhaite avec n’importe
quel fichier, le tableau précédent ne le concerne donc pas.
(Évidemment, il ne peut pas exécuter par magie ce qui n’est pas
exécutable ; il ne peut donc pas tout faire.)
chmod [ugo][+-=][rwx]
$ ls –l
$ ls -l
$ ls –l
$ ls -l
$ ls –l
$ ls -l
$ ls –l
$ ls -l
$ ls -l
$ ls -l
$ chmod o= libby.jpg
$ ls -l
chmod [0-7][0-7][0-7]
1 --x
2 -w-
3 -wx
4 r--
5 r-x
6 rw-
7 rwx
Attention
Oui, il est possible de faire un chmod 000 sur un fichier ou un
répertoire, mais la seule personne qui pourra l’utiliser et
modifier ces permissions dans ce cas sera l’utilisateur root.
Cependant, root et le propriétaire du fichier pourront toujours
utiliser chmod pour remettre des permissions normales. chmod 000 a
changé qui pouvait agir sur le fichier, mais n’a pas changé qui
pouvait en fixer les autorisations.
$ ls –l
$ ls -l
$ ls –l
$ ls -l
$ ls –l
$ ls -l
Astuce
Si vous avez besoin d’aide avec les permissions en notation
octale, vous trouverez un outil très intéressant à l’adresse
permissions-calculator.org.
chmod -R
$ pwd
/home/scott/pictures/libby
$ ls -lF
$ ls -l *
by_pool:
on_floor:
$ chgrp -R family *
$ chmod -R 660 *
chmod u[+-]s
chmod 4[0-7][0-7][0-7]
$ ls -l /usr/bin/passwd
Info
L’activation de suid peut être signalée par un s ou un S. Vous
rencontrerez un s si le propriétaire a déjà les permissions
d’exécution (x) avant l’activation de suid et un S si le propriétaire
ne les avait pas. Le résultat est le même, la distinction
minuscule/majuscule permet simplement de savoir quel était
l’état de l’autorisation avant application de suid.
Astuce
La commande suivante permet de déterminer le nombre de
programmes qui possèdent la permission suid (sur mon serveur,
j’en trouve uniquement 22, ce qui n’est pas très grave) :
$ find / -xdev -perm -4000 -type f -print0 | xargs -0 ls -l |
wc -l
$ ls -l
$ ls -l
$ ls -l
$ ls -l
$ ls -l
$ ls -l
$ ls -l
$ ls -l
Astuce
Sachez que suid sera sans effet sur les programmes interprétés,
c’est-à-dire tout script qui commence par #!. En y réfléchissant,
cela constitue un pas important vers une meilleure sécurité.
Pour de plus amples informations, consultez la page
www.faqs.org/faqs/unix-faq/faq/part4/section-7.html.
chmod g[+-]s
chmod 2[0-7][0-7][0-7]
sgid est très semblable à suid. Elle peut s’appliquer aux
fichiers et aux répertoires. Pour les fichiers, sgid équivaut à
suid, sauf qu’un utilisateur peut maintenant exécuter un
fichier avec les permissions du groupe à la place de celles
du propriétaire. Par exemple, la commande crontab sur votre
système est probablement configurée avec sgid, de manière
que les utilisateurs puissent demander à cron d’exécuter des
programmes, mais en tant que membre du groupe crontab
avec sa puissance limitée et non en tant qu’utilisateur root
avec ses super-pouvoirs.
$ ls -l /usr/bin/crontab
$ ls -lF
$ ls -lF
Info
L’activation de sgid peut être signalée par un s ou un S. Vous
rencontrerez un s si le groupe avait déjà les permissions
d’exécution (x) avant l’activation de sgid et un S si le groupe ne
les avait pas. Le résultat est le même, la distinction
minuscule/majuscule permet simplement de savoir quel était
l’état de l’autorisation avant application de sgid.
$ ls -lF
$ ls -lF
$ ls -lF
$ ls -lF
$ ls -lF
Info
Vous savez ce que donne la création d’un nouveau fichier dans
un répertoire sgid, mais d’autres processus du système de
fichiers peuvent également être affectés par sgid. Si vous copiez
un fichier à l’aide de cp dans un répertoire sgid, il adopte le
groupe de ce répertoire. Si vous déplacez un fichier à l’aide de
mv, il conserve son groupe courant. Pour finir, si vous créez un
nouveau répertoire dans un répertoire sgid à l’aide de mkdir, il
hérite du groupe de son répertoire parent et devient sgid lui-
même.
chmod [+-]t
chmod 1[0-7][0-7][0-7]
$ ls -l /
Info
L’activation du sticky bit peut être signalée par un t ou un T.
Vous rencontrerez un t si l’ensemble des utilisateurs avait déjà
les permissions d’exécution (x) avant l’activation du sticky bit et
un T s’il ne les avait pas. Le résultat est le même, la distinction
minuscule/majuscule permet simplement de savoir quel était
l’état de l’autorisation avant application du sticky bit.
$ ls -lF
$ chmod +t libby_pix
$ ls -lF
$ ls -lF
$ chmod -t libby_pix
$ ls -lF
$ ls -lF
$ ls -lF
$ ls -lF
$ ls -lF
Astuce
Pour gagner du temps dans la saisie des commandes, il est
possible de configurer des combinaisons faisant appel à suid, à
sgid et au sticky bit simultanément. De même que vous ajoutez 4
(lecture), 2 (écriture) et 1 (exécution) pour définir une
permission selon la méthode octale, vous pouvez ajouter des
chiffres pour configurer suid, sgid et le sticky bit.
Chiffre Signification
0 Supprime le sticky bit, sgid, et suid
1 Active le sticky bit
2 Active sgid
3 Active le sticky bit et sgid
4 Active suid
5 Active le sticky bit et suid
6 Active sgid et suid
7 Active le sticky bit, sgid et suid
Info
Il peut même arriver que le résultat de la compression produise
un fichier plus volumineux que la somme des fichiers à
compresser initialement. Si le fichier est déjà compressé et que
vous le compressiez de nouveau, cette « surcompression »
entraîne une augmentation de sa taille.
Info
Wikipédia propose un bon article (« List of archive formats »)
qui compare un grand nombre de formats de compression
(http://en.wikipedia.org/wiki/List_of_archive_formats).
Info
Dans cette deuxième édition, j’ai retiré les sections qui
concernaient gzip -[0-9] (qui permet d’ajuster les taux de
compression avec gzip) et bzip2 -[0-9] (qui a la même fonction,
mais avec bzip). Les descriptions originales se trouvent sur mon
site Web (granneman.com/writing/books/linux-phrasebook).
Archiver et comprimer des fichiers avec
zip
zip
$ ls -lh
$ ls -lh
$ ls -l
➥young_edgar_scott.tif
$ ls -l
$ ls -lF
$ ls -lF
$ ls -l
$ ls -l
$ ls -l
$ ls -l
Info
Pour gagner du temps, créez un alias semblable à celui qui suit
dans votre fichier .bashrc :
alias zip='zip -9'
zip -i
zip -r
$ ls reading/*
Authors_and_Texts.txt
reading/lovecraft:
reading/machen:
$ cd reading/lovecraft
$ ls
lovecraft.zip
$ ls -F
reading/
➥(deflated 57%)
zip -P
zip -e
Enter password:
Verify password:
Attention
La sécurité offerte par la protection par mot de passe de zip
n’est pas très efficace. Il est facile de trouver sur Internet une
multitude d’outils destinés à cracker les protections par mot de
passe des fichiers zippés. Protéger ou non un fichier zip par mot
de passe revient un peu à choisir entre envoyer une carte
postale ou envoyer une lettre sous enveloppe. La mesure de
protection est efficace avec les gens ordinaires, mais elle
n’arrêtera pas quelqu’un de déterminé.
$ unzip moby.zip
Archive: moby.zip
inflating: job.txt
inflating: moby-dick.txt
inflating: paradise_lost.txt
$ unzip -v moby.zip
Archive: moby.zip
------- ------ --- -------
1848018 747304 60% 3 files
unzip -t
Il arrive que les archives zip soient abîmées. Le pire moment
pour le découvrir est juste après avoir extrait le contenu de
l’archive et l’avoir supprimée, avant de vous rendre compte
que certains des éléments extraits, voire tous, sont
endommagés et ne peuvent pas s’ouvrir. Il est donc
conseillé de tester ses archives avant de les unzipper. Pour
cela, utilisez l’option -t (pour test).
$ unzip -t moby.zip
Archive: moby.zip
Astuce
Pensez également à l’option -l (qui signifie « liste »). Avez-vous
avez oublié quel était le contenu d’un fichier zip ? Souhaitez-
vous vérifier que le fichier dont vous avez besoin se trouve dans
un fichier zip donné ? Vous demandezvous si l’extraction va
créer 100 fichiers dans votre répertoire courant au lieu d’un
répertoire contenant 100 fichiers ? Dans de telles situations,
essayez tout d’abord zip -l !
gzip
Par certains aspects, gzip est plus simple d’utilisation que
zip. Avec zip, il faut préciser le nom du fichier zip à créer ;
avec gzip, contentezvous de taper la commande suivie du
nom du fichier à compresser.
$ ls -l
$ gzip paradise_lost.txt
$ ls -l
Info
Nous l’avons indiqué précédemment, il est possible d’indiquer à
la commande zip le niveau de compression souhaité, sur une
échelle de 0 à 9. La commande gzip fonctionne exactement de la
même manière.
$ gzip -c paradise_lost.txt
w`
I
*blU/ llllGlll't(-llxlYz3-lo'~cnSlK
$ ls -l
$ ls -l
Astuce
Si vous utilisez accidentellement l’option -c sans préciser de
fichier de sortie, appuyez sur Ctrl+C plusieurs fois de suite
jusqu’à ce que gzip s’arrête.
gzip -r
$ ls -F
bible/ moby-dick.txt paradise_lost.txt
$ ls -l *
bible:
$ gzip *
$ ls -l *
bible:
$ ls -F
bible/ moby-dick.txt paradise_lost.txt
$ ls -l *
bible:
$ gzip -r *
$ ls -l *
bible:
gunzip
$ ls -l
$ gunzip paradise_lost.txt.gz
$ ls -l
$ ls -l
$ gunzip -c paradise_lost.txt.gz
> paradise_lost.txt
$ ls -l
Info
Si vous n’aimez pas la commande gunzip, vous pouvez aussi
utiliser gzip -d (ou --decompress ou --uncompress).
gunzip -t
$ gunzip -t paradise_lost.txt.gz
Info
Vous pouvez également employer l’option -t avec gzip pour
tester une archive au moment où vous la créez.
$ ls -l
$ bzip2 moby-dick.txt
$ ls -l
Info
Nous l’avons expliqué précédemment, il est possible d’indiquer
aux commandes zip et gzip le niveau de compression souhaité,
sur une échelle de 0 à 9. La commande bzip2 fonctionne
exactement de la même manière.
$ ls -l
$ bzip2 -k moby-dick.txt
$ ls -l
$ ls -l
$ bunzip2 moby-dick.txt.bz2
$ ls -l
$ ls -l
$ bunzip2 -k moby-dick.txt.bz2
$ ls -l
Info
Si vous n’aimez pas la commande bunzip2, vous pouvez aussi
utiliser bzip2 -d (ou --decompress ou --uncompress).
$ bunzip2 -t paradise_lost.txt.gz
tar -cf
$ ls -l
$ ls -l
$ ls -lF
$ ls -l moby-dick/*
moby-dick/bible:
$ ls -lF
Info
La commande tar a la réputation (quelque peu méritée) d’être
un peu obscure. La bande dessinée géniale xkcd est une bonne
blague aux dépens de tar (http://xkcd.com/1168/).
tar -pzcvf
$ ls -l moby-dick/*
moby-dick/bible:
$ ls -l
$ ls -l moby-dick/*
moby-dick/bible:
moby-dick/
moby-dick/job.txt
moby-dick/bible/
ncompressed 257
moby-dick/bible/genesis.txt
moby-dick/bible/job.txt
moby-dick/moby-dick.txt
moby-dick/paradise_lost.txt
$ ls -l
tar -zvtf
Info
Pour tester une archive compressée avec bzip2, utilisez cette
commande :
$ tar -jvtf moby.tar.bz2
tar -pzvxf
$ ls -l
moby-dick/
moby-dick/job.txt
moby-dick/bible/
moby-dick/bible/genesis.txt
moby-dick/bible/job.txt
moby-dick/moby-dick.txt
moby-dick/paradise_lost.txt
$ ls -l
Info
Si vous souhaitez ouvrir une archive compressée avec bzip2,
utilisez la commande suivante :
$ tar -jxvf moby.tar.bz2
Conclusion
Astuce
Si vous recherchez la commande find, consultez le chapitre
suivant.
Info
Dans la deuxième édition de cet ouvrage, j’ai retiré la section
qui décrivait locate -n (qui permet de fixer le nombre de résultats
retournés par locate). Vous pourrez retrouver ces explications
sur mon site Web (granneman.com/writing/books/linux-
phrasebook).
Info
Pour gagner de la place, j’ai remplacé la première partie du
chemin /home/ scott par des points de suspension.
$ locate haggard
…/txt/rider haggard
Info
Les distributions Linux sont toujours plus nombreuses à passer
de slocate à mlocate (qui signifie merging locate) ; vous la
trouverez donc peut-être sur votre ordinateur. Au lieu de
recommencer l’indexation de l’intégralité du disque dur, mlocate
se fonde sur des bases de données existantes afin d’accélérer
les opérations et de ne pas solliciter votre disque dur toutes les
nuits. Puisque mlocate est compatible avec slocate, tout mon
propos la concerne également.
$ locate slocate.db
$ su -
# locate slocate.db
/var/lib/slocate/slocate.db.tmp
/var/lib/slocate/slocate.db
locate -i
$ locate haggard
…/txt/rider haggard
$ locate -i haggard
…/txt/rider haggard
Info
Pour plus d’informations sur H. Rider Haggard, consultez les
articles à son sujet sur Wikipédia
(http://fr.wikipedia.org/wiki/Henry_Rider_Haggard).
updatedb
# exit
$ locate rkhunter
$ su -
# updatedb
# exit
$ locate rkhunter
/usr/local/rkhunter
/usr/local/rkhunter/bin
/usr/local/rkhunter/etc
Info
Si vous utilisez la nouvelle commande mlocate, updatedb sera plus
rapide que dans le cas d’une actualisation avec slocate, car elle
exploite des bases de données existantes. Si votre distribution
se fonde sur slocate, la commande updatedb équivaut totalement à
slocate -u et updatedb n’est qu’un lien vers slocate. Ce n’est pas le
cas pour la commande updatedb fournie avec mlocate ; cette version
de updatedb est un programme distinct.
grep
$ grep pain *
Astuce
Pour en apprendre plus sur les expressions régulières, vous
pouvez faire des recherches sur Internet ou lire Expressions
régulières de Bernard Desgraupes (ISBN : 9782744022531,
Pearson).
Info
Sauf mention contraire, nous utiliserons dans ce livre la version
de grep qui utilise les expressions régulières de base.
Astuce
Pour en apprendre davantage sur les différences entre
caractères jokers et expressions régulières, consultez les
articles suivants : « What is a Regular Expression »
(http://docs.kde.org/stable/en/kdeutils/KRegExpEditor/whatIsAR
egExp.html), « Regular Expressions Explained »
(http://www.castaglia.org/proftpd/doc/contrib/regexp.html), «
Wildcards Gone Wild » (http://www.linux-mag.com/2003-
12/power_01.html) et « Expression régulière » sur Wikipédia
(https://fr.wikipedia.org/wiki/Expression_régulière).
grep -R
$ grep -R hideous *
➥course of my practice
➥wrong, which
Astuce
Bien entendu, si les résultats sont trop nombreux, vous pouvez
les rediriger vers la commande less :
$ grep -R hideous * | less
Une autre solution consiste à rediriger le résultat de la
commande vers un fichier texte, puis d’ouvrir ce dernier dans
l’éditeur de votre choix :
$ grep -R hideous * > hideous_in_horror.txt
Cela permet de stocker le résultat d’une recherche pour pouvoir
le réutiliser par la suite.
grep --color=auto
$ grep -R hideous *
➥course of my practice
➥wrong, which
Astuce
Il est possible que grep affiche des couleurs sans que vous ayez
ajouté l’option --color=auto. Par exemple, sur mon système
Ubuntu, j’ai obtenu les résultats suivants (les mots en gras
correspondent aux mots colorés) :
$ grep Finny family.txt
grep -i
Par défaut, les recherches conduites avec grep sont
sensibles à la casse. Dans l’exemple précédent, vous avez
recherché le mot hideous dans les nouvelles de Lovecraft
(son préféré, sans doute). Mais qu’en est-il avec le mot
Hideous ?
$ grep pain *
$ grep -w pain *
grep -n
La commande grep affiche la ligne qui contient le terme de
la recherche, mais elle n’indique pas réellement où se
trouve ce terme dans le fichier. Pour afficher le numéro de la
ligne qui contient le ou les mots recherchés, utilisez l’option
-n (ou --line-number).
$ grep -n pain *
[commande] | grep
[liste coupée]
$ ls -1 | grep 1960
Info
Pour gagner de la place, j’ai supprimé certaines informations en
principe affichées par ps.
Astuce
Si vous vous sentez vraiment paresseux, consultez la commande
pgrep, qui regroupe les fonctions de ces derniers paragraphes en
un seul outil.
grep [-ABC]
Lorsqu’on traite des données, le contexte est important.
Comme vous l’avez vu, grep affiche la ligne qui contient les
termes trouvés lors d’une recherche. Si vous le souhaitez,
vous pouvez également lui demander d’afficher des lignes
avant et après les lignes contenant une occurrence des
termes recherchés. À la section « Rechercher des mots
spécifiques dans la sortie d’autres commandes », vous avez
utilisé grep pour afficher une liste d’albums de John Coltrane.
L’un d’eux était A Love Supreme. Quels sont les trois albums
qui ont été enregistrés avant celuici ? C’est très simple : il
suffit d’utiliser l’option -B (ou --before-context=#).
1963 Impressions
Si vous voulez savoir quels sont les trois albums qui ont
été enregistrés après A Love Supreme, utilisez l’option -A
(ou --after-context-#).
1964 Crescent
1965 Ascension
1963 Impressions
$ ls -1 | grep -C 1 Live
--
--
1965 Transition
1967 Expression
$ ls -1 | grep -n -C 1 Live
--
--
52-1965 Transition
55-1967 Expression
grep -v
$ ls -1
1976 Presence
1982 Coda
1976 Presence
1982 Coda
grep -l
La commande grep affiche la liste des lignes qui contiennent
le terme recherché. Parfois, au lieu des lignes, on préfère
connaître le nom des fichiers qui contiennent cette
occurrence. À la section « Rechercher du texte dans un
fichier en ignorant la casse », vous aviez recherché les
lignes des nouvelles de Lovecraft contenant le mot hideous.
Grâce à l’option -l (ou --files-with-matches), vous pouvez
afficher la liste des fichiers et non des lignes (n’oubliez pas
que l’option -i permet de ne pas tenir compte de la casse).
Lovecraft/From Beyond.txt
[liste coupée]
grep -c
Le mystique et poète britannique du xviiie siècle William
Blake a déclaré à propos du poème de Milton Le Paradis
perdu qu’il était « du parti du diable sans le savoir ».
Autrement dit, le personnage de Satan dans Le Paradis
perdu était beaucoup plus intéressant que celui de Dieu.
Pour participer pleinement au débat autour du commentaire
de Blake, vous devez lire de nombreux ouvrages, en
commençcant bien sûr par Le Paradis perdu (ce que j’ai fait
lorsque je préparais un doctorat sur la littérature
britannique du xviie siècle).
Nous n’avons pas assez de temps pour que tout le monde
fasse ses lectures, mais nous pouvons néanmoins contribuer
à la discussion, quoique de manière limitée. Utilisons
l’option -c (ou --count) de grep pour savoir combien de fois
Milton utilise les mots « Satan » et « Dieu » dans Le Paradis
perdu.
12
327
72
329
grep | grep
$ ls -1 | grep 196[6-7]
1967 Expression
1967 Expression
Conclusion
Info
Dans la deuxième édition de cet ouvrage, j’ai retiré les
informations sur find -fprint (qui imprime les résultats de la
commande find dans un fichier). Vous les retrouverez sur mon
site Web (granneman.com/writing/books/linux-phrasebook).
$ cd /media/music
./Outsider/Shaggs
./Outsider/Shaggs
./Outsider/Shaggs/I Love.mp3
./Outsider/Shaggs/Things I Wonder.mp3
/media/music/Outsider/Shaggs
/media/music/Outsider/Shaggs/I Love.mp3
/media/music/Outsider/Shaggs/Things I Wonder.mp3
Info
Pour en savoir plus sur The Shaggs, faites une recherche avec «
Shaggs » sur www.allmusic.com. Vous n’avez jamais vécu de
soirée réussie si vous n’avez pas passé au moins une fois My Pal
Foot Foot au cours de l’une d’elles.
find -group
file -size
$ cd Punk/Clash/1979_London_Calling
./09 - Clampdown.mp3
Astuce
Si vous souhaitez trouver de gros fichiers texte, placez un c
après la taille. Comme le montre le tableau 11.1, l’option c
correspond à une unité en nombre d’octets. Chaque caractère
dans un fichier texte est un octet, un moyen mnémotechnique
consiste donc à associer c au mot caractère.
find -type
Une des options les plus utiles de find est -type car elle
permet d’indiquer le type d’élément recherché. Souvenez-
vous que, dans un système UNIX, tout est fichier (voir la
section « Tout est fichier » du chapitre 1, « Les commandes :
ce qu’il faut savoir »), vous pouvez donc préciser le type de
fichier que vous souhaitez trouver. Le tableau 11.2 les
énumère tous.
find -amin|-cmin|-mmin
find -atime|-ctime|-mtime
find -anewer|-cnewer|-newer|-newerXY
Astuce
Vous pouvez voir tout cela vous-même sur n’importe quel fichier
de votre système Linux en exécutant la commande stat sur ce
fichier (seule les résultats pertinents sont donnés, mais sachez
que stat fournit de nombreuses informations très utiles) :
$ stat foobar.txt
Info
Vous vous demandez peut-être pourquoi l’heure de la création
ne dispose pas de son test. La raison en est simple : le noyau
Linux n’assure pas le suivi des dates de création des fichiers.
Info
find reconnaît d’autres expressions fondées sur la date, mais
nous n’avons pas assez de place pour les décrire. Puisque l’une
d’elles correspondra peut-être à vos besoins, consultez la page
de manuel pour les descriptions de -anewer, -cnewer, -newer et -
newerXY.
find -a
$ cd Rolling_Stones
$ cd Rolling_Stones
1323
find -o
$ cd Clash
➥G.I. Joe.m4a
Info
Pour en apprendre davantage sur l’album London Calling des
Clash, consultez les sites Allmusic
(www.allmusic.com/album/london-callingmw0000189413) ou
Wikipédia (https://fr.wikipedia.org/wiki/London_Calling).
105773
106666
➥-a -type f | wc -l
109709
Info
Dans l’édition précédente de cet ouvrage, je disposais des
fichiers et des formats suivants :
23 407 mp3
0 m4a
18 224 ogg (je n’en ai plus)
556 flac
Cela faisait au total 42 187 morceaux. J’ai clairement été très
actif depuis !
find -n
$ find . | wc -l
122255
➥-type d \)
➥Info.txt
➥Caballe/Libretto.pdf
➥Queen.MP3
Astuce
L’expression -name est sensible à la casse, contrairement à
l’expression -iname (le « i » signifie « insensible »). Par
conséquent, si nous voulons trouver tous les fichiers mp3 quelle
que soit la casse de l’extension, nous pouvons exécuter find . -
iname "*mp3*", qui trouvera tous les fichiers qui se terminent par
mp3, MP3, Mp3 ou mP3.
find -exec
➥Malted Milk.MP3
➥Terraplane Blues.MP3
Astuce
Il existe au moins deux versions différentes de la commande
rename, chacune avec une syntaxe et des options propres. Dans
cet exemple, j’utilise celle écrite par Larry Wall (inventeur du
langage de programmation Perl) dont la syntaxe de substitution
vient de Perl. Pour moi, le meilleur article sur ce sujet et « A
Tale of Two Renames » de Tim Heaney (http://chnsa.ws/68).
➥Malted Milk.mp3
➥Terraplane Blues.mp3
Astuce
Dans cet exemple, nous avons utilisé s/ancien/nouveau, mais il est
plus fréquent d’employer à la place s/ancien/nouveau/g (le g signifie
« global »). Si chaque nom de fichier ne comprend qu’une seule
instance de ancien à remplacer par new, comme dans « Terraplane
Blues.MP3 », alors s/MP3/mp3 convient parfaitement. Mais, si
Robert Johnson avait, dans un moment de devination futuriste,
écrit une chanson intitulée « Corrupted MP3 Blues », le fichier
aurait été « Corrupted MP3 Blues.MP3 ». Pour remplacer les
deux instances de MP3 par mp3, nous devons utiliser s/MP3/mp3/g.
Ainsi, rename sait que nous voulons changer MP3 en mp3, mais pas
uniquement la première occurrence, contrairement à s/MP3/mp3/.
./Holiday_-_Christmas/Christmas_With_The_Rat_Pack.m3u
./Holiday_-_Christmas/Boots_For_Your_Stockings.m3u
./Classical_-_Baroque/Handel/Chamber_Music.m3u
./Classical_-_Opera/Famous_Arias.m3u
./R&B_-_Doo_Wop/Doo_Wop_Box.m3u
./Electronica/Aphex_Twin/I_Care_Because_You_Do.m3u
Info
Avant d’exécuter des commandes sur des fichiers, vérifiez
toujours quels sont ceux qui vont être affectés par les
commandes. C’est une mesure de prudence qui permet d’éviter
des modifications accidentelles.
find +
find | xargs
$ ls | less
sess_000000001.txt
sess_000000002.txt
sess_000000003.txt
Info
Les tubes et xargs sont similaires en cela qu’ils prennent tous
deux la sortie d’une commande et l’utilise – et xargs se sert
presque toujours de tubes –, mais présentent également des
différences importantes. Un tube prend la sortie de la première
commande et l’utilise comme entrée de la seconde. En
revanche, la commande xargs prend la sortie de la première
commande (grâce au tube) et l’utilise comme arguments de la
seconde commande.
$ ls
Astuce
Si find est souvent associée à xargs, vous pouvez évidemment
employer xargs avec d’autres commandes. C’est juste que 90 %
des exemples proposés sur le Web semblent commencer avec
find !
^C
Conclusion
La commande find offre de nombreuses possibilités et
dispose d’un grand nombre d’autres fonctions qui n’ont pas
été abordées ici. Pour en savoir plus, je vous conseille de lire
les pages de manuel qui s’y rapportent et de consulter les
différents didacticiels à son sujet qu’on trouve sur le Web. Si
la commande find permet d’effectuer diverses recherches
sur des fichiers et des répertoires grâce à ses nombreuses
options, elle montre toute sa puissance avec l’option -exec
pour appliquer d’autres commandes aux résultats d’une
recherche. Vous pouvez aussi rediriger sa sortie vers
d’autres commandes grâce à un tube. C’est l’une des
commandes les plus intéressantes de Linux, alors, ne vous
privez pas de son utilisation.
Chapitre 12
Le shell
Jusqu’à présent, vous avez exécuté des commandes dans le
shell, mais vous ne vous êtes pas penché sur son
fonctionnement. Au cours de ce chapitre, vous allez
découvrir des commandes qui affectent son fonctionnement
: history, qui permet d’afficher la liste des commandes
saisies dans l’interpréteur de ligne de commande, alias, qui
permet de créer des raccourcis pour les commandes, et les
fonctions, qui sont comme les alias mais en vingt fois plus
puissant. Toutes sont utiles et peuvent vous faire gagner
beaucoup de temps lorsque vous travaillez en ligne de
commande. La paresse est une qualité lorsque l’on travaille
avec des ordinateurs et ces commandes vous permettront
d’être aussi paresseux que possible dans votre utilisation de
Linux.
history
$ history
496 ls
497 cd rsync_ssh
498 ls
499 cat linux
500 exit
Attention
Vous comprenez maintenant pourquoi vous devez être prudent
lorsque vous saisissez des mots de passe ou d’autres
informations importantes sur la ligne de commande. N’importe
qui peut afficher le contenu du fichier .bash_history pour
récupérer ces informations sensibles. Vous devez donc faire très
attention à ce que vous saisissez dans le shell.
$ history | less
Astuce
Si vous constatez un emploi fréquent de history | grep (c'est mon
cas), simplifiez-vous la vie en créant un alias pour cette
construction dans votre fichier .bash_aliases :
alias histg="history | grep"
Qu’est-ce qu’un alias ? Vous trouverez la réponse un peu plus
loin dans ce chapitre !
!!
$ pwd
/home/scott $
!!
pwd
/home/scott
shopt -s histverify
Astuce
Lorsque vous exécutez une commande occupant plusieurs
lignes, bash enregistre par défaut chaque ligne comme une
entrée séparée. Il est donc difficile d’exécuter une commande
multiligne à l’aide de la touche Flèche haut ou de !!. Toutefois,
en ajoutant les deux lignes suivantes à votre fichier .bashrc (la
première étant un commentaire, elle n’est pas indispensable
mais permettra de vous rappeler ce que vous faites), vous
résolvez ce problème particulier.
# Save each line of a multi-line command in the same history
entry shopt -s cmdhist
Rechargez votre fichier .bashrc (voir au chapitre 1, « Les
commandes : ce qu’il faut savoir ») et entrez dans le paradis de
la commande multiligne.
![numéro]
$ pwd
/home/scott
$ whoami
scott
$ !499
pwd
/home/scott
![chaîne]
$ cat /home/scott/todo.txt
Buy milk
$ cd /home/scott/pictures
$ !cat
cat /home/scott/todo.txt
Buy milk
$ !cat /etc
cat /etc/apt/sources.list
^-r (Ctrl-r)
^-s (Ctrl-s)
^-g (Ctrl-g)
1472 cd /var/www
1476 cd ~/bin
(reverse-i-search)' ':
➥com
➥expedition.com
➥com
➥expedition.com
Astuce
Si Ctrl-s n’a pas d’effet, vous rencontrez un conflit avec ce
raccourci clavier. Sur de nombreux ordinateurs Linux, Ctrl-s
émet un contrôle de flux XOFF (voir l’article
https://fr.wikipedia.org/wiki/Contrôle_de_flux), qui aujourd’hui
date un peu et se révèle rarement utile, à l’exception de
quelques cas très particuliers. Pour désactiver temporairement
XOFF, saisissez la commande suivante dans la console :
$ stty -ixon
Ctrl-s doit à présent fonctionner, mais si vous vous déconnectez
et ouvrez de nouveau une session, XOFF sera de retour. Pour le
désactiver de façon permanente, ajoutez les lignes suivantes
dans le fichier .bashrc :
# Disable XOFF flow control so that Ctrl-s does forward history
➥searching
stty -ixon
cat ~/.ssh/config
ssh hlp@nyarlathotep.miskatonic-expedition.com
cd ~/.ssh
man ssh
less intern-ssh-instructions.txt
"\e[A":history-search-backward
"\e[B":history-search-forward
$ ssh hlp@nyarlathotep.miskatonic-expedition.com
Info
Pour vérifier que le rechargement de .inputrc a fonctionné,
saisissez la commande suivante :
$ bind -P | grep history-search
alias
$ alias
$ alias wgetpage
➥--page-requisites --no-parent"
Info
Vous en apprendrez davantage sur wget au chapitre 16.
$ ls -d */
by_pool/ libby_pix/ on_floor/
$ lsd
by_pool/ libby_pix/ on_floor/
Info
Comment savoir quel fichier utiliser ? Saisissez simplement ls -a
~. Si vous voyez .bash_aliases, utilisez ce fichier ; sinon, regardez
dans .bashrc si des alias y sont définis. Si aucun alias ne figure
dans ce fichier, regardez dans .profile car il arrive que ce fichier
soit utilisé pour le stockage des alias.
Info
Certains déconseillent la création d’alias qui changent le
comportement normal d’une commande, comme alias rm="rm -i",
en expliquant que cela génère une dépendance envers un alias
non défini sur un autre ordinateur et une source d’erreurs
potentiellement désastreuses. Personnellement, je trouve cet
argument plutôt stupide. Si un alias vous simplifie la vie, je suis
certain que vous aurez suffisamment de cervelle pour vous
rappeler qu’il sera absent sur une autre machine.
Supprimer un alias
unalias
$ ls -d */
by_pool/ libby_pix/ on_floor/
$ lsd
by_pool/ libby_pix/ on_floor/
$ unalias lsd
$ lsd
[nom de fonction] () { }
$ mkcd lovecraft
$ pwd
/home/scott/lovecraft
Info
Vous l’avez probablement déjà deviné, le terme $1 dans la
fonction est un paramètre positionnel qui est remplacé par le
premier argument indiqué après le nom de la fonction. La
dernière section de ce chapitre, « Choisir entre un alias et une
fonction », reviendra en détail sur ces termes et leur
signification.
$ mkcd () {
> cd "$1"
> }
Astuce
Vous trouverez des fonctions très utiles et pédagogiques en
effectuant des recherches avec les termes « bash fonctions
utiles» (ou en anglais « bash useful functions ») ou équivalent.
[nom de fonction] () { }
Si vous souhaitez que vos fonctions soient conservées entre
les sessions du shell, vous devez les ajouter à un fichier
utilisé par le shell. En général, il s’agit de .bashrc ou de
.bash_aliases ; je préfère utiliser .bash_aliases car il existe
déjà et je le charge à partir de .bashrc.
Certaines personnes souffrent de dissonance cognitive
quand on leur dit d’utiliser un fichier nommé .bash_aliases
pour stocker des fonctions. Si c’est votre cas, vous pouvez
toujours créer un fichier .bash_functions dans votre répertoire
personnel et le charger depuis le fichier .bashrc :
if [ -f ~/.bash_functions ]; then
source ~/.bash_functions
fi
if [ -d ~/.bash_functions ]; then
source "$file"
done
fi
knownhosts () {
$ knownhosts 8
Info
J’utilise des accolades autour des variables. Elles sont
facultatives, mais elles permettent de bien distinguer les
variables du texte environnant. Comparez par exemple ${1}d et
$1d. Ces deux manières d’écrire sont équivalentes, mais la
première est beaucoup plus lisible.
listfunc () {
do
declare -f $func;
echo -e "\r";
done
Info
Si vous faites quelques recherches, vous découvrirez peut-être
que declare -f permet d’afficher toutes les fonctions. C’est vrai,
mais vous obtenez l’intégralité des fonctions disponibles dans
le shell, y compris celles fournies par la distribution Linux. Avec
listfunc, j’ai constaté que les fonctions que j’avais ajoutées moi-
même occupaient 59 lignes. Lorsque j’ai exécuté declare -f,
toutes les autres fonctions que je n’avais pas créées sur mon
système faisaient monter le total à 2 213 lignes !
$ mkcd lovecraft
$ pwd
/home/scott/lovecraft
$ unset -f mkcd
$ mkcd cthulhu
listfunc () {
do
declare -f $func;
echo -e "\r";
done
Info
Un argument est une entrée passée à une commande. Par
exemple, supposons que la fonction mkcd () { mkdir -p "$1"; cd "$1";
} soit définie. Lorsque vous saisissez mkcd cthulhu et appuyez sur
Entrée, cthulhu est un argument. Les paramètres sont définis par
la fonction ou le programme. Dans le cas de la fonction
précédente, $1 définit le paramètre. (De façon plus précise, $1
est un paramètre positionnel qui fait référence au premier
argument ; si la fonction l’exige, vous pouvez employer d’autres
paramètres positionnels numérotés pour faire référence aux
autres arguments.) La différence entre ces deux notions peut se
voir ainsi : lorsque vous le définissez, il s’agit d'un paramètre ;
lorsque vous l’utilisez, il s’agit d’un argument.
Vous voudrez peut-être essayer d’utiliser un paramètre
positionnel avec un alias, mais c’est une bataille perdue
d’avance. L’argument fourni à un alias de commande est
toujours utilisé à la fin :
$ lstest /bin
$ unalias lstest
$ lstest /bin
Conclusion
Un des objectifs de tout utilisateur Linux est de réduire
autant que possible le nombre de caractères nécessaires
pour exécuter des commandes. Les premiers développeurs
d’Unix étaient sensibles à ce principe, c’est pourquoi on
tape ls et non list, et mkdir et non make- Directory. Les
commandes que vous venez de découvrir, history, alias et
function, vous aideront dans ce sens. Vous en avez assez de
taper des commandes interminables ? Répétez-les grâce
aux informations contenues dans history, ou créez un alias
ou une fonction pour les invoquer plus rapidement. Cela
vous épargnera de la saisie et soulagera votre clavier (et
plus important, vos mains et vos poignets).
Chapitre 13
Surveillance des
ressources système
Un bon utilisateur d’ordinateur doit être un peu
administrateur système – il doit surveiller la santé de sa
machine pour s’assurer que tout fonctionne correctement.
Linux offre plusieurs commandes qui permettent de
surveiller les ressources du système. Vous en découvrirez
plusieurs au cours de ce chapitre. La plupart d’entre elles
ont de multiples utilisations, mais toutes ont une spécialité
en matière de surveillance. Ces commandes peuvent
conserver la trace des programmes en cours d’exécution (ps
et top), mettre fin à des processus (kill), énumérer tous les
fichiers ouverts (lsof) ou surveiller l’utilisation de la RAM
(free) et de l’espace disque (df et du). Apprenez à maîtriser
ces outils, car vous les utiliserez dans de nombreuses
situations.
uptime
ps aux
$ ps aux
➥ COMMAND
➥/home/scott/.cxoffice/bin/wine-preloader
➥ssh scott@humbug.machine.com
scott 14957 0.3 7.5 171144 78628
? Sl 13:01 0:35
➥/usr/lib/openoffice2/program/soffice.bin-writer
➥ wine-preloader] <defunct>
➥ ps aux
Astuce
Si vous exécutez ps aux, vous noterez que, par défaut, la sortie
est coupée au niveau du bord de la fenêtre de la console. Il est
donc possible que certaines informations très utiles ou
importantes ne soient pas visibles. Pour voir l’intégralité des
lignes de la sortie, ajoutez l’option -w (comme wrap, pour
passage à la ligne automatique) : ps aux -w.
La commande ps donne de nombreuses informations,
dont l’utilisateur propriétaire du processus, le numéro
d’identifiant unique du processus (PID), le pourcentage
d’utilisation du processeur (%CPU) et de la mémoire (%MEM),
l’état courant (STAT) du processus et le nom du programme
auquel il est attaché.
La colonne STAT affiche différentes lettres, celles qui
suivent sont les plus importantes :
➥/bin/sh /opt/firefox/firefox
scott 25213 1.1 10.9 189092 113272 ? Rl Feb08
29:42
➥/opt/firefox/firefox-bin
Astuce
Pourquoi avoir fait une recherche sur [f]irefox et non sur firefox ?
Vous trouverez la réponse à la section « Rechercher des mots
spécifiques dans la sortie d’autres commandes » du chapitre 10,
« Recherche d’éléments ».
ps axjf
$ ps axjf
PPID PID COMMAND
1 7558 /usr/sbin/gdm
7558 7561 \_ /usr/sbin/gdm
7561 7604 \_ /usr/X11R6/bin/X :0
8225 8279 \_ /usr/bin/ssh-agent
Info
Normalement, les colonnes suivantes sont affichées :
PPID PID PGID SID TTY TPGID STAT UID TIME COMMAND
Info
La commande pstree affiche elle aussi une arborescence des
processus. Puisqu’elle n’est pas fournie avec toutes les
distributions, vous devrez peutêtre l’installer vous-même (pour
savoir comment procéder, consultez le chapitre 14, «
Installation de logiciels »).
ps U [nom utilisateur]
Jusqu’à présent, nous avons affiché la liste de tous les
processus du système. Pour limiter cet affichage aux
processus d’un seul utilisateur, utilisez l’option U suivie du
nom ou de l’identifiant de l’utilisateur.
$ ps U scott
➥-writer
➥-writer
Astuce
Si vous ne connaissez pas l’identifiant d’un utilisateur, regardez
dans /etc/ passwd. Localisez le nom de l’utilisateur, son identifiant
figure dans la troisième colonne.
kill
killall
$ ps U scott
➥soffice -writer
$ kill 743
$ ps U scott
➥soffice -writer
Info
Pourquoi ne pas avoir éliminé le PID 26751 qui affiche l’état Z
(STAT) signifiant qu’il est considéré comme zombie ? Simplement
parce que -9 ne fonctionne pas sur un zombie ; comme il est
déjà « mort », la commande kill n’a aucun effet sur lui. Le seul
moyen de résoudre de problème (généralement peu important)
est de redémarrer.
Pour utiliser kill, nous devons indiquer un PID. Mais que
pouvonsnous faire lorsqu’un programme a plusieurs PID ?
Nous pourrions exécuter kill avec chaque PID, mais cette
méthode est fastidieuse, voire désagréable. Dans ce cas, il
est préférable d’employer killall à la place de kill. Cette
commande utilise non pas les PID mais les noms des
processus. Elle est donc d’un usage plus aisé dans ces
situations.
Supposons que cronolog (un programme qui permet de
contrôler la génération des journaux) est totalement
détraqué et que vous deviez l’arrêter. Sur l’un de mes
serveurs, il existe 84 processus pour cronolog et je n’ai
aucune envie d’arrêter chacun d’eux avec kill ! Voici
comment je vais les stopper tous, en un seul tir, avec
killall (cela dit, vous ne devriez procéder ainsi qu’en cas de
nécessité ; servez-vous de killall, et de kill, de manière
responsable).
84
$ killall cronolog
$ top
➥0.82, 0.97
➥4 zombie
➥0.1% hi, 0.7%
➥buffers
➥cached
➥COMMAND
➥firefox-bin
➥Xorg
➥kded
➥nautilus
➥kicker
Astuce
En appuyant sur ?, vous obtiendrez une aide qui vous permettra
de mieux contrôler top et de l’utiliser au meilleur de ses
capacités. Ces écrans d’aide sont vraiment utiles.
Info
L’utilitaire htop commence à prendre le pas sur la commande top
de base. Il propose un affichage déroulable, en couleur, avec des
menus et un joli graphique de l’utilisation de la mémoire. Pour
en savoir plus, consultez le site http://hisham.hm/htop/. Avec
ses fonctionnalités, htop est loin devant top (je l’utilise de
préférence sur le système Linux). Toutefois, il n’est pas toujours
présent sur les distributions standard et vous devrez l’installer
vous-même (voir le chapitre 14).
lsof
# lsof | less
➥i686/cmov/libc-2.3.5.so
➥ ld-2.3.5.so
Info
La commande lsof dispose d’un nombre conséquent d’options, si
nombreuses que des signes moins et plus sont utilisés avant les
mêmes options de lettre. En d’autres termes, il y a +c et -c, et +d
et -d, et toutes signifient des choses différentes. Cette
commande va peut-être se révéler un peu complexe si vous
commencer à entrer dans les détails. Préparez-vous.
lsof -u
Pour afficher les fichiers ouverts par un utilisateur donné
(n’oubliez pas que cela comprend, entre autres, les
connexions réseau et les périphériques), ajoutez l’option -u
à lsof, suivie du nom de l’utilisateur (souvenez-vous que
lsof doit être exécuté en tant que root).
# lsof -u scott
➥scott/.evolution/addressbook/local/system/addressbook.db
➥scott
➥lib/opera/9.0-20060206.1/opera
➥lib/X11/locale/common/xomGeneric.so.2.0.0
➥lib/opera/plugins/libnpp.so
➥tls/i686/cmov/libnss_dns-2.3.5.so
➥share/fonts/truetype/msttcorefonts/Arial_Bold.ttf
lsof [fichier]
# lsof /usr/sbin/sshd
➥sbin/sshd
➥sbin/sshd
➥sbin/sshd
Info
Oui, sshd est un programme mais, du point de vue de Linux, c’est
un fichier.
lsof -c [programme]
# lsof -c sshd
➥tls/i686/cmov/libnss_files-2.3.5.so
➥tls/i686/cmov/libnss_nis-2.3.5.so
➥ld-2.3.5.so
➥null
➥null
➥null
➥192.168.0.170:ssh->192.168.0.100:4577 (ESTABLISHED)
➥sbin/sshdp
➥192.168.0.170:ssh->192.168.0.100:4577 (ESTABLISHED)
Info
La commande lsof est dotée d’un nombre d’options assez
considérable dont nous n’avons présenté qu’un échantillon. Le
code source de lsof inclut un fichier nommé 00QUICKSTART (ce sont
des zéros au début), qui est un didacticiel pour certaines
fonctions plus puissantes de la commande. Vous pouvez aussi
rechercher des informations complémentaires à son sujet sur
Google.
free
$ free
total used free shared buffers cach
ed
$ free
total used free shared buffers cach
ed
Swap: 988 483 504
df
$ df
tmpfs 518068 0 518068 0% /dev/shm
tmpfs 518068 12588 505480 3% /lib/modules/
➥2.6.12-10-386/volatile
$ df -h
/dev/hda1 7.4G 5.0G 2.4G 68% /
➥volatile
Astuce
Pour plus d’informations sur tmpfs, consultez l’article Wikipédia à
l’adresse suivante : http://en.wikipedia.org/wiki/TMPFS.
$ cd music
$ du
36582 ./Donald_Fagen
593985 ./Clash
145962 ./Hank_Mobley/1958_Peckin’_Time
128200 ./Hank_Mobley/1963_No_Room_For_Squares
108445 ./Hank_Mobley/1961_Workout
382615 ./Hank_Mobley
2662185 .
$ cd music
$ du -h
36M ./Donald_Fagen
581M ./Clash
143M ./Hank_Mobley/1958_Peckin’_Time
126M ./Hank_Mobley/1963_No_Room_For_Squares
106M ./Hank_Mobley/1961_Workout
374M ./Hank_Mobley
2.6G .
Astuce
Pour obtenir les tailles des répertoires et des fichiers, utilisez -a
(ou --all). Si vous souhaitez des résultats triés en fonction de
l’espace, utilisez du | sort -rn (ou --reverse et --numeric-sort). La
commande du génère les valeurs, sort (voir au chapitre 7) les
ordonne. L’option -r place la valeur la plus élevée au début, puis
viennent les valeurs par ordre décroissant. L’option -n s’assure
que les nombres sont triés correctement (essayez sans et vous
comprendrez). Si vous avez envie de vous amuser, redirigez les
résultats vers un fichier (> toomuchcrap.txt) dont le contenu sera
délimité par des tabulations, prêt à être importé dans une
feuille de calcul créée avec LibreOffice.
du -s
$ du -hs
2.6G .
Concis et pratique.
Conclusion
Astuce
Pour plus d’informations sur les différents formats et les
distributions qui les utilisent, consultez la page « Package
Management Cheatsheet » sur le site DistroWatch
(http://distrowatch.com/dwres.php?resource=package-
management).
Preparing... ###################### [100%]
Updating / installing...
➥noarch.rpm
rpm -e [paquetage]
# rpm -e nmap
Info
Pour déterminer les paquetages installés sur votre système et
leur identification, utilisez rpm -qa. Outre le nom du paquetage,
vous obtenez également sa version, ce qui peut se révéler
pratique.
Installer un paquetage RPM et ses
dépendances
Info
YUM devrait finir par être remplacé par DNF. DNF, qui signifie
Dandified Yum, est conçu pour être un YUM amélioré,
notamment dans le domaine des performances. Développé
initialement sur Fedora, le temps dira si cette solution sera
adoptée par les autres distributions.
Resolving Dependencies
➥shotwell-0.14.1-5.el7.x86_64
--> Processing Dependency: libgexiv2.so.1()(64bit) for
package:
➥shotwell-0.14.1-5.el7.x86_64
--> Running transaction check
---> Package LibRaw.x86_64 0:0.14.8-5 will be installed
Package Version Repository Size
Installing:
shotwell 0.14.1-5.el7 base 2.8 M
LibRaw 0.14.8-5 base 250 k
libgexiv2 0.5.0-9.el7 base 61 k
Transaction Summary
Installed size: 13 M
Is this ok [y/d/N]:
Downloading packages:
Running transaction
Installing : LibRaw-0.14.8-5.el7.x86_64 1/3
Installing : libgexiv2-0.5.0-9.el7.x86_64 2/3
Installing : shotwell-0.14.1-5.el7.x86_64 3/3
Verifying : libgexiv2-0.5.0-9.el7.x86_64 1/3
Verifying : LibRaw-0.14.8-5.el7.x86_64 2/3
Verifying : shotwell-0.14.1-5.el7.x86_64 3/3
Installed:
shotwell.x86_64 0:0.14.1-5.el7
Dependency Installed:
LibRaw.x86_64 0:0.14.8-5.el7
libgexiv2.x86_64 0:0.5.0-9.el7
Complete!
Resolving Dependencies
Package Version Repository Size
Removing:
shotwell 0.14.1-5.el7 @base 11 M
Transaction Summary
Remove 1 Package
Installed size: 11 M
Is this ok [y/N]:
Downloading packages:
Running transaction
Erasing : shotwell-0.14.1-5.el7.x86_64 1/1
Verifying : shotwell-0.14.1-5.el7.x86_64 1/1
Removed:
shotwell.x86_64 0:0.14.1-5.el7
Complete!
Info
Pour déterminer les paquetages installés sur votre système et
leur identification par YUM, utilisez yum list installed. Outre le
nom du paquetage, vous obtenez également sa version, ce qui
peut se révéler pratique.
yum update
# yum update
Resolving Dependencies
Package Version Repository Size
Installing:
kernel 3.10.0-229.11.1.el7 updates 31 M
Updating:
openssl 1:1.0.1e-42.el7.9 updates 711 k
Transaction Summary
Install 1 Package
Upgrade 2 Packages
Total size: 32 M
Is this ok [y/d/N]:
wireshark.i686 1.10.3-12.el7_0 base
wireshark.x86_64 1.10.3-12.el7_0 base
wireshark-devel.i686 1.10.3-12.el7_0 base
wireshark-devel.x86_64 1.10.3-12.el7_0 base
wireshark-gnome.x86_64 1.10.3-12.el7_0 base
Astuce
Il existe également des gestionnaires de paquetages graphiques
(voir l’astuce donnée dans la section « Trouver les paquetages
DEB disponibles au téléchargement »). Nombre d’entre eux ont
été conçus pour les distributions fondées sur RPM ou
fonctionnement merveilleusement bien avec elles (et avec
d’autres formats de paquetage également !).
dpkg -i [paquetage]
Info
Sur la plupart des distributions Debian, toutes les commandes
dpkg sont à exécuter en tant que root. Avec Ubuntu, on n’utilise
pas le compte root – on lui préfère la commande sudo. En d’autres
termes, sous Debian, on a :
# dpkg -i skype_debian-4.3.0.37-1_i386.deb
$ ls
skype_debian-4.3.0.3-1_i386.deb
➥installed.)
dpkg -r [paquetage]
# dpkg -r skype
➥installed.)
Info
Pour déterminer les paquetages installés sur votre système et
leur identification par dpkg, utilisez dpkg -l. Outre le nom du
paquetage, vous obtenez également sa version, son
architecture (en général 32 ou 64 bits) et une courte
description.
Info
Bien que ce chapitre se focalise sur APT et son utilisation avec
Debian, vous pouvez l’employer avec certaines distributions qui
ont choisi RPM. Pour de plus amples informations, consultez le
site http://apt-rpm.org. L’article « Using apt in an RPM world »
(http://dag.wieers.com/blog/using-apt-in-an-rpm-world) de Dag
Wieers propose une justification pertinente et un bon
didacticiel. J’ai rédigé un article pour Linux Magazine en 2003
intitulé « A Very Apropos apt » (www.linux-mag.com/id/1476/). Il
est évidemment obsolète sur de nombreux points, mais il
regorge néanmoins de conseils utiles.
# apt-get update
➥[933 B]
➥ [63.5 kB]
bluefish-data bluefish-plugins
Suggested packages:
➥used.
Get:1 http://us.archive.ubuntu.com/ubuntu/trusty/universe
Get:2 http://us.archive.ubuntu.com/ubuntu/trusty/universe
Get:3 http://us.archive.ubuntu.com/ubuntu/trusty/universe
➥installed.)
Info
Pour ajouter de nouveaux dépôts, vous ne devez pas modifier
directement le fichier sources.list, car il sera écrasé à chaque
mise à jour logicielle. À la place, il est préférable de créer un
fichier de configuration distinct pour chaque serveur de dépôt
dans /etc/apt/sources.d. Par exemple, Dropbox est disponible en
téléchargement sous forme de paquetage deb, mais je veux
l’ajouter à l’aide d’APT afin d’obtenir automatiquement les
mises à jour. Le site Web de Dropbox (recherchez « dropbox apt
repo » sur Google) explique comment ajouter son dépôt.
Astuce
Si vous ne connaissez pas encore pandoc, je vous conseille de
combler vos lacunes en commençant par le site Web officiel à
l’adresse http://pandoc.org. Sur mon blog Chainsaw on a Tire
Swing (www.chainsawonatireswing.com), j’ai écrit quelques
mots sur son utilisation (faites une recherche, je l’ai cité à
plusieurs reprises).
sshfs
sshfs*
Info
Pour déterminer les paquetages installés sur votre système et
leur identification par APT, utilisez apt --installed list. Outre le
nom du paquetage, vous obtenez également sa version et son
architecture (en général 32 ou 64 bits).
Mettre à jour des paquetages DEB et
leurs dépendances
apt-get upgrade
➥[933 B]
➥[63.5 kB]
➥[933 B]
system-config-printer-gnome
The following packages will be upgraded:
➥used.
Info
Lorsque vous utilisez apt-get upgrade, vous êtes informé des
paquetages qui ont été conservés et non mis à jour ou installés.
Si vous souhaitez installer automatiquement un nouveau
logiciel et supprimer les paquetages installés devenus inutiles,
vous devez employer la commande apt-get dist-upgrade. Ne
l’exécutez pas à la légère ! Faites attention à ce qu’elle va faire,
simplement pour vous tenir au courant des actions sur votre
système.
apt-cache search
➥Ubuntu
apt-get clean
$ ls -1 /var/cache/apt/archives/
bluefish_2.2.5-1_amd64.deb
bluefish-data_2.2.5-1_all.deb
bluefish-plugins_2.2.5-1_amd64.deb
lock
partial/
$ ls -1 /var/cache/apt/archives/
lock
partial/
Info
Si vous utilisez Ubuntu ou une autre distribution qui préfère
l’utilisation de la commande sudo à une connexion du compte
root, le message d’erreur signifie que vous avez oublié de faire
précéder la commande de sudo. Vous avez exécuté :
$ apt-get-upgrade
alors que vous auriez dû saisir :
$ sudo apt-get upgrade
Conclusion
Astuce
Nous supposerons que vous utilisez un adressage IPv4 sous la
forme xxx.xxx. xxx.xxx. L’adressage IPv6 remplacera un jour
IPv4, mais on n’en est pas encore là (bien que cette évolution
soit désormais fortement amorcée). À ce momentlà, route et la
plupart des commandes que vous allez découvrir dans ce
chapitre changeront (sans surprise, la version la plus récente de
la commande ip prend en charge IPv6). Mais, pour l’instant,
vous pouvez vous contenter des informations contenues dans ce
chapitre. Pour plus d’informations sur l’adressage IPv6,
consultez Wikipédia (http://fr.wikipedia.org/wiki/Ipv6).
Info
Pour la deuxième édition de cet ouvrage, j’ai retiré le contenu
de la section qui concernait iwconfig (qui configure les interfaces
réseau sans fil). La section a néanmoins été conservé dans le
but d’expliquer pourquoi la description de la commande a été
enlevée. Le texte d’origine se trouve sur mon site Web
(granneman.com/writing/books/linux-phrasebook).
ifconfig
ip addr show
$ ifconfig
inet addr:192.168.0.101 Bcast:192.168.0.255
➥Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING NTU:16436 Metric:1
Astuce
Pour plus d’informations sur l’interface loopback et sur son
adresse, consultez la page Wikipédia correspondante
(http://en.wikipedia.org/wiki/Loopback).
Info
On peut trouver d’autres noms pour les interfaces réseau,
comme wlan0 pour certaines cartes sans fil.
ifconfig permet donc de vérifier rapidement l’état des
interfaces réseau, en particulier pour déterminer notre
adresse IP. Mais cette solution représente la méthode
ancienne. Voici la nouvelle, qui se fonde sur la commande
ip.
La commande ip ne s’utilise jamais seule en tant que
telle. Elle doit être suivie d’un objet – le périphérique réseau
ou les informations à afficher ou à modifier –, puis les
actions à appliquer sur cet objet. Par exemple, voici
comment obtenir les mêmes informations qu’avec ifconfig :
$ ip addr show up
ping
ping -c
La commande ping envoie un type de paquet spécial – un
message ICMP ECHO_REQUEST – à l’adresse indiquée. Si
une machine à cette adresse écoute les messages ICMP,
elle répondra avec un paquet ICMP ECHO_REPLY (certains
pare-feu peuvent bloquer les messages ICMP, ce qui rend
ping inutilisable mais, la plupart du temps, vous ne
rencontrerez pas de problème). Un ping réussi signifie
qu’une connexion a pu être établie entre les deux machines.
$ ping www.google.com
ping www.google.com
$ ping -c 3 www.granneman.com
traceroute
$ traceroute www.granneman.com
➥packets
➥ms
6 tbr2-p013501.sl9mo.ip.att.net (12.122.11.121) 51.625 ms
➥ 52.166 ms 50.156 ms
➥ms 69.334 ms
➥48.703 ms 49.636 ms
9 * * *
➥62.148 ms 51.337 ms
11 intelenet-3.border20.lax.pnap.net (216.52.253.234) 51.930
ms
➥53.054 ms 50.748 ms
13 * * *
14 * * *
15 * * *
Astuce
Mieux que traceroute, il existe mtr (pour Matt’s traceroute), qui
est un peu une combinaison de ping et de traceroute. Si mtr est
disponible pour votre distribution, téléchargez-le et testez-le.
Pour plus d’informations, consultez les pages
www.bitwizard.nl/mtr et
https://en.wikipedia.org/wiki/MTR_(software).
host
dig
$ host chainsawonatireswing.com
➥alt2.aspmx.l.google.com.
➥aspmx.l.google.com.
$ host www.chainsawonatireswing.com
➥gawain.websanity.com.
$ host 23.239.25.19
➥li708-19.members.linode.com
$ host 68.65.123.160
;; ANSWER SECTION:
;; AUTHORITY SECTION:
;; ANSWER SECTION:
➥3601
chainsawonatireswing.com. 600 IN MX 20
alt1.aspmx.l.google.com.
➥google.com ~all”
ifconfig
ip addr
Info
Bien que vous puissiez effectuer de nombreux réglages grâce à
ifconfig et ip, vous n’en verrez que quelques-uns ici. Pour plus
d’informations, consultez les pages de manuel de ces
commandes.
# ifconfig eth0
inet addr:192.168.0.143 Bcast:192.168.0.255
➥Mask:255.255.255.0
# ifconfig eth0
inet addr:192.168.0.143 Bcast:192.168.0.255
➥Mask:255.255.255.0
# ip addr show up
# ip addr show up
# ifdown eth0
# ifup eth0
iwconfig
nmcli
$ iwconfig
➥00:12:17:31:4F:C6
Power Management:off
➥dBm
======================================
Status of devices
======================================
DEVICE TYPE STATE CONNECTION
wlan0 wifi connected Home
eth0 ethernet unavailable --
lo loopback unmanaged --
GENERAL.DEVICE wlan0
GENERAL.TYPE wifi
GENERAL.VENDOR Intel Corporation
GENERAL.DRIVER iwlwifi
GENERAL.HWADDR 12:34:56:78:90:ab
GENERAL.STATE 100 (connected)
GENERAL.CONNECTION Home
IP4.ADDRESS ip=192.168.1.100/24, gw=192.168.1.1
IP4.DNS[1] 192.168.1.1
IP4.DNS[2] 208.67.220.220
WIFI-PROPERTIES.WEP yes
WIFI-PROPERTIES.WPA2 yes
Info
On suppose que vous avez déjà configuré votre périphérique
réseau pour utiliser DHCP et non des paramètres saisis
manuellement. En fonction des distributions de Linux, cette
information peut figurer dans différents fichiers de
configuration. Avec les distributions reposant sur Debian,
cherchez la ligne iface [interface] inet dhcp dans
/etc/network/interfaces. Avec les distributions reposant sur Red
Hat, recherchez BOOT-PROTO=dhcp dans /etc/syscon- fig/network-scripts-
ifcfg-[interface]. Dans ces exemples, remplacez [interface] par le
nom de votre interface. Pour de plus amples informations, faites
une recherche Google avec « dhcp votre-distribution ».
Listening on LPF/eth0/00:0b:cd:3b:20:e2
Sending on LPF/eth0/00:0b:cd:3b:20:e2
Sending on Socket/fallback
# ifconfig eth0
inet addr:192.168.0.104 Bcast:192.168.0.255
➥Mask:255.255.255.0
# dhclient -r eth0
Listening on LPF/eth0/00:0b:cd:3b:20:e2
Sending on LPF/eth0/00:0b:cd:3b:20:e2
Sending on Socket/fallback
ifup
ip link set
# ifconfig
inet addr:127.0.0.1 Mask:255.0.0.0
# ifup eth0
# ifconfig
inet addr:192.168.0.14 Bcast:192.168.0.255
➥Mask:255.255.255.0
inet addr:127.0.0.1 Mask:255.0.0.0
Info
Vous pouvez également utiliser ifconfig [interface] up ou iwconfig
[interface] up pour activer des connexions avec ou sans fil. Si
vous préférez la version en ligne de commande de
NetworkManager, l’équivalent est nmcli connection up id nom-de-
connexion ou nmcli connection down id nom-deconnexion.
# ip addr show up
# ip addr show up
ifdown
ip link set
La commande ifdown fait l’inverse de ifup : elle permet de
désactiver une connexion. Pourquoi désactiver une
connexion réseau ? La plupart du temps, parce que vous
essayez d’en activer une et que ifconfig signale qu’elle est
déjà activée, mais mal configurée. Il faut alors commencer
par l’éteindre pour pouvoir la reconfigurer en la réactivant.
# ifup eth0
# ifdown eth0
# ifup eth0
Info
Vous pouvez également utiliser ifconfig [interface] down ou iwconfig
[interface] down pour désactiver des connexions avec ou sans fil.
# ip addr show up
# ip addr show up
ip route
$ route
➥Iface
➥ eth0
default 192.168.0.1 0.0.0.0 UG 0 0 0
➥eth0
Info
La commande suivante fournit des résultats proches de ceux de
route : netstat -nr (ou --numeric et --route). La commande netstat est
incroyablement complète et quelque peu complexe. N’hésitez
pas à rechercher des didacticiels sur le Web.
Une adresse IP est constituée de quatre octets sous la
forme xxx. xxx.xxx.xxx, – 192.168.0.124, par exemple.
Lorsque vous envoyez un paquet à l’extérieur de votre
machine, l’adresse IP qui correspond à la destination du
paquet est comparée à la colonne Destination de la table de
routage. La colonne Genmask (masque de réseau) fonctionne
avec la colonne Destination pour déterminer lesquels des
quatre octets déterminent la destination du paquet.
Imaginons, par exemple, que vous saisissiez ping
192.168.0.124 dans votre shell. Le masque de réseau
255.255.255.0 signifie que seul le dernier octet (représenté
par 0) compte. Autrement dit, dans l’adresse 192.168.0.124,
seul 124 est important pour le routage des paquets vers
cette adresse. Tous les paquets à destination de 192.168.0.1
à 192.168.0.255 (les limites d’une adresse IP)
correspondent donc à Destination et Genmask ; ils resteront
donc sur le réseau local et éviteront le routeur. C’est pour
cela qu’on trouve un * dans la colonne Gateway, à côté de
192.168.0.0 : nous n’avons pas besoin de passerelle
puisque le trafic est local.
En revanche, tout le reste est destiné par défaut (default)
au routeur, qui dans cet exemple est à l’adresse
192.168.0.1 dans la colonne Gateway. Le masque de réseau
de cette colonne est 0.0.0.0, ce qui signifie que tout paquet
envoyé à une adresse autre que 192.168.0.1 à
192.168.0.255 doit l’être à 192.168.0.1 (car 192.168.0.1 est
la passerelle, c’est un cas particulier). 72.14.203.99,
82.211.81.166 et 216.35.180.5 passent tous trois le crible
du masque 0.0.0.0, ils sont donc destinés à être expédiés
sur Internet par le biais de la passerelle.
Un autre élément intéressant de la table de routage est la
colonne Flags qui donne des informations sur le routage. Il y
a plusieurs flags possibles, mais le plus commun est U (la
route est libre ou up) et G (utilisation de la passerelle ou
gateway). Dans l’exemple précédent, vous pouvez constater
que les deux routes sont « libres », mais que seule la
seconde est la passerelle.
Voyons à présent la nouvelle manière de procéder. Sur la
même machine, nous exécutons la commande suivante :
$ ip route show
➥192.168.0.10
ip route
# route
# route
➥Iface
default 192.168.0.1 0.0.0.0 UG 0 0 0
eth0
# ip route show
# route
➥Iface
default 192.168.0.1 0.0.0.0 UG 0 0 0
eth0
# route
➥Iface
10.1.0.0 * 255.255.0.0 U 0 0 0
ath0
default 192.168.0.1 0.0.0.0 UG 0 0 0
eth0
# route
➥Iface
10.1.0.0 * 255.255.0.0 U 0 0 0
ath0
default 192.168.0.1 0.0.0.0 UG 0 0 0
eth0
# route
➥Iface
default 192.168.0.1 0.0.0.0 UG 0 0 0
eth0
# ip route show
# ip route show
# ip route show
# ip route show
Info
Il est bien plus facile de diagnostiquer et de résoudre des
problèmes si vous disposez de repères. Lorsque le réseau est
opérationnel, exécutez route et enregistrez le résultat de
manière à disposer d’informations correctes au cas où vous
rencontreriez un problème de routage à l’avenir.
Info
Les utilisateurs de SUSE, Mint et Cinnamon trouveront les
instructions équivalentes à
https://support.opendns.com/forums/21618384-Computer-
Configuration.
Conclusion
ssh
$ ssh tom@192.168.0.25
tom@192.168.0.25’s password:
➥established.
➥23:ce:53.
➥known hosts.1
tom@192.168.0.25’s password:
192.168.0.25 ssh-rsa
SkxPUQLYqXSzknsstN6Bh2MHK5AmC6Epg4psdNL69R5
➥pHbQi3kRWNNNNO3AmnP1lp2RNNNNOVjNN9mu5FZel6zK0iKfJBbLh/Mh9KOhB
Nt
➥rX6prfcxO9vBEAHYITeLTMmYZLQHBxSr6ehj/9xFxkCHDYLdKFmxaffgA6Ou2
ZU
➥X5NzP6Rct4cfqAY69E 5cUoDv3xEJ/gj2zv0bh630zehrGc=
➥tWb5KiF/LLD4Zwbv2Z/j/0czCZIQNPwDUf6YiKUFFC6eagqpLDDB4T9qsOajO
PLN
➥inRZpcQoPlXf1u6j1agfJzqUJUYE+Lwv8yzmPidCvOuCZ0LQH4qfkVNXEQxmy
y6i
➥z6b2wp=?
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
➥attack)!
It is also possible that the RSA host key has just been
changed.
The fingerprint for the RSA key sent by the remote host is
19:85:59:5c:6a:24:85:53:07:7a:dc:34:37:c6:72:1b.
RSA host key for 192.168.0.125 has changed and you have
requested
➥strict checking.
Astuce
Dans la section « Créer une nouvelle fonction permanente » du
chapitre 12, je propose une fonction shell qui permet de retirer
très facilement la ligne problématique du fichier known_hosts.
ssh
$ ssh-keygen
d0:c8:8c:a3:6e:c5:bd:d5:e8:0f:c8:45:6c:75:09:25ezra@pound
Info
Vous avez le choix entre trois types de clé créée avec -t : dsa
(pour Digital Signature Algorithm), rsa (nommé d’après les noms
de famille ses créateurs) et ecdsa (pour Elliptic Curve Digital
Signature Algorithm). DSA a été déclaré obsolète par OpenSSH
en août 2015 en raison de problèmes de sécurité (voir
http://lists.mindrot.org/pipermail/openssh-unix-announce/2015-
August/000122.html) ; ne l’utilisez pas. ECDSA n’étant pas
encore très répandu, attendez encore un peu avant de l’utiliser.
Il ne reste plus que RSA, que l’on trouve partout et qui est
relativement sûr, pour peu que l’on utilise une clé de longueur
supérieure ou égale à 2 048 bits (la valeur indiquée après -t). Si
vous craignez pour votre sécurité, allez jusqu’à 3 072, voire 4
096, mais sachez que plus la clé est longue, plus le temps de
chiffrement et de déchiffrement sera long. Cependant, avec la
rapidité des ordinateurs actuels, vous ne remarquerez
probablement aucune différence. Par exemple, puisque ssh-keygen
crée par défaut des clés RSA, la génération d’une clé sur 4 096
bits se fait à l’aide de la commande ssh-keygen -b 4096.
$ ssh tom@192.168.0.25
Astuce
Si travailler avec une clé sans mot de passe vous donne des
sueurs froides, regardez du côté de ssh-agent. Ce programme
s’occupe de la gestion de vos clés à votre place. Vous saisissez
le mot de passe associé à votre clé et ssh-agent le conserve en
mémoire. Cette méthode est certainement plus sûre que les clés
sans mot de passe, mais elle soulève plusieurs problèmes dont
vous devez tenir compte. L’un des plus importants est son
exécution automatique ; pour une très bonne explication de ce
problème, consultez la page
http://unix.stackexchange.com/questions/90853/how-can-i-run-
ssh-add-automatically-without-password-prompt.
sftp
$ sftp tom@192.168.0.25
Connecting to 192.168.0.25...
tom@192.168.0.25’s password:
sftp>
$ sftp tom@192.168.0.25
Connecting to 192.168.0.25...
sftp>
Astuce
Lors de la configuration de serveurs SSH, les administrateurs
changent parfois le port utilisé par défaut par SSH. À la place du
port 22, ils en choisissent un autre de façon à améliorer la
sécurité. Cela n’a rien de magique, mais peut ralentir les pirates
débutants.
scp
Si vous êtes pressé et que vous devez copier un fichier
d’une machine vers une autre de façon sécurisée, utilisez
scp (secure copy). Voici sa syntaxe de base :
scp utilisateur@hote1:fichier1 utilisateur@hote2:fichier2
Elle est pratiquement identique à celle de cp, mais
étendue à un réseau. Prenons un exemple. Supposons que
vous souhaitiez copier backup.sh de pound (192.168.0.15 ;
nom d’utilisateur : ezra) vers eliot (192.168.0.25 ; nom
d’utilisateur : tom) à l’aide de scp :
$ pwd
/home/ezra
$ ls ~/bin
backup.sh
backup.sh 100% 8806 8.6KB/s 00:00
$ ls -1 ~/covers
earth_wind_&_fire.jpg
handel_-_chamber_music.jpg
smiths_best_1.jpg
strokes_-_is_this_it.jpg
u2_pop.jpg
earth_wind_&_fire.jpg 100% 44KB 43.8KB/s
handel_-_chamber_music.jpg 100% 12KB 12.3KB/s
smiths_best_1.jpg 100% 47KB 47.5KB/s
strokes_-_is_this_it.jpg 100% 38KB 38.3KB/s
u2_pop.jpg 100% 9222 9.0KB/s
$ scp tom@192.168.0.25:/home/tom/pictures/dog/libby*
~/pix/libby
rsync
rsync est l’une des commandes les plus intéressantes
inventées à ce jour ; de nombreuses personnes (dont moi)
l’utilisent quotidiennement. Elle permet d’effectuer une
myriade d’opérations (encore une fois, on pourrait écrire un
livre rien que sur cette commande), mais penchonsnous sur
l’une de ses utilisations particulièrement intéressante : la
possibilité de faire des sauvegardes efficaces et sécurisées
avec un minimum de trafic réseau.
Imaginons que vous souhaitiez sauvegarder 2 Go de
fichiers toutes les nuits depuis une machine nommée
coleridge (nom d’utilisateur : sam) vers un autre ordinateur
nommé wordsworth (nom d’utilisateur : will). Sans rsync, vous
seriez obligé d’effectuer un transfert de 2 Go toutes les
nuits, ce qui représente un trafic important, même sur un
réseau rapide. Avec rsync, le transfert sera beaucoup plus
rapide car cette commande ne transfère que les éléments
qui diffèrent entre les fichiers sur les deux machines. Si
seuls quelques centaines de kilooctets ont été modifiés sur
ces fichiers depuis la veille, rsync ne transférera que ces
quelques kilo-octets. Si la différence porte sur 100 Mo, rsync
copiera ces 100 Mo, ce qui est toujours mieux que de devoir
copier quotidiennement 2 Go.
Voici une commande exécutée sur coleridge qui transfère
l’intégralité du répertoire documents sur un disque de
sauvegarde connecté à wordsworth. Observez la commande
et son résultat, vous verrez alors les options (elles sont
affichées en version longue pour faciliter la compréhension
du processus, puis en version courte pour que vous
disposiez des deux syntaxes).
➥backup/documents
➥documents/will@wordsworth:/media/backup/documents
➥documents/will@wordsworth:/media/backup/documents
deleting
clientele/Linux_Magazine/do_it_yourself/13/gantt_chart.
➥txt~
deleting Security/diebold_voting/black_box_voting/bbv_chapter-
9.
deleting Security/diebold_voting/black_box_voting/bbv_chapter-
8.
➥txt
Security/electronic_voting/diebold/black_box_voting/bbv_
➥chapter-8.pdf
Security/electronic_voting/diebold/black_box_voting/bbv_
➥chapter-9.pdf
➥txt
connectivity/connectivity_info.txt
Info
Le slash n’est important que pour le répertoire source ; son
utilisation ou non avec le répertoire cible n’a aucune incidence.
Info
Si l’on utilise ssh, pourquoi n’a-t-il pas été nécessaire de fournir
un mot de passe ? Simplement parce que j’ai utilisé la technique
présentée à la section « Se connecter de façon sécurisée à un
autre ordinateur sans mot de passe », pour éviter d’avoir à
saisir un mot de passe.
Attention
Il existe une option qui n’a pas été utilisée précédemment, mais
qui peut être très utile pour déterminer si l’on a bien structuré
sa commande rsync : -n (ou --dry-run). Si vous incluez cette option,
rsync s’exécute, mais n’efface ni ne copie aucun fichier. Cela peut
vous sauver la vie au cas où une commande mal saisie aurait
effacé des fichiers importants. Avant d’exécuter une commande
rsync et, en particulier, si elle contient l’option --delete, lancez-la
avec l’option -n pour contrôler qu’elle fonctionnera comme
prévu.
Astuce
Si vous voulez avoir l’esprit totalement tranquille avec vos
sauvegardes, configurez rsync pour qu’il s’exécute
automatiquement grâce à une tâche cron. Créez, par exemple, un
fichier nommé backup.sh (que vous pouvez placer dans ~/bin) et
ajoutez-y les commandes à utiliser :
➥documents/will@wordsworth:/media/backup/documents
wget
http://www.oldtimeradioarchives.com/mp3/
season_10/
season_11/
season_12/
...
season_20/
season_21/
...
season_3/
season_4/
...
season_9/
Info
Les répertoires ne sont pas classés par ordre numérique, ce
qu’un humain aurait fait, mais par ordre alphabétique, qui est
celui utilisé par les machines à moins que l’on ne spécifie le
contraire. Après tout, « dix » vient avant « trois » dans l’ordre
alphabétique...
1944-12-24_532.mp3 06-Jul-2015 13:54 6.0M
1944-12-31_533.mp3 06-Jul-2015 14:28 6.5M
1945-01-07_534.mp3 06-Jul-2015 20:05 6.8M
1945-01-14_535.mp3 06-Jul-2015 19:53 6.9M
--12:58:12-- http://www.djbc.net/beastles/webcontent/djbc-
➥holdittogethernow.mp3
=> ‘djbc-holdittogethernow.mp3’
➥[4533083/4533083]
Info
Vous l’avez vu, wget sert à récupérer des fichiers. Mais comment
pouvez-vous envoyer des fichiers de façon interactive ? C’est la
fonction de wput (http://wput.sourceforge.net). Elle fonctionne
uniquement avec les serveurs FTP, mais reste un bon partenaire
de la puissante wget.
Info
N’abusez pas de wget pour télécharger des sites. N’oubliez pas
qu’ils ont été conçus par des gens et qu’ils leur appartiennent.
Ne copiez pas un site pour le « voler ».
$ wget -E -r -k -p -w 5 -np
➥http://www.neato.com/articles/index.htm
curl
Info
Ces programmes présentent de nombreuses autres différences.
La liste complète des fonctionnalités de curl sont recensées
dans l’article « Features - What can curl do? »
(http://curl.haxx.se/docs/features.html), tandis que certaines de
wget le sont dans « Overview »
(http://www.gnu.org/software/wget/manual/html_node/Overview
.html#Overview). Le site cURL
(http://curl.haxx.se/docs/comparison-table.html) propose un gra
phique intéressant qui compare curl à d’autres programmes
similaires, même s’il n’est pas totalement impartial et penche
assez nettement en faveur de curl.
$ curl -O http://www.wbez.org/ta/[1-10].rm
--_curl_--http://www.wbez.org/ta/1.rm
Info
Cet exemple est également obsolète et ne fonctionne plus, mais
il permet d’illustrer tout l’intérêt de curl.
Conclusion
A
Access Control List (ACL) 160
Accolades ({}), caractères jokers 12–15
ack (commande) 209
ACL (Access Control List) 160
Alias
afficher tous 254
comparés aux fonctions 264–266
permanents, créer 256
pour les options de ls 34
spécifiques, afficher 254
supprimer 257
temporaires, créer 255
alias (commande) 254–255, 256
AND, rechercher des expressions avec 232–233
Apostrophe inverse (`), substitution de commande 91
Apostrophe simple (‘), dans les expressions régulières 206–208
Apper 305
apropos (commande) 73–74
apt-cache search (commande) 304–306
apt-get clean (commande) 306–307
apt-get dist-upgrade (commande) 304
apt-get -f install (commande) 308
apt-get -f remove (commande) 308
apt-get install (commande) 298–301
apt-get remove (commande) 301–302
apt-get upgrade (commande) 302–304
apt --installed list (commande) 302
APT, résolution des problèmes 307–308
Arguments
alias comparés aux fonctions 265–266
comparés aux paramètres 265
Astérisque (*)
caractère joker 12
extensions de fichiers, risques de l’utilisation 157
types de fichiers 25
Attributs de fichiers, abréviations 160
awk (commande) 145–148
Cache 282
Capture d’écran 86
Caractère d’échappement (\) 159
Caractère de soulignement (_), dans les noms de fichiers 10
Caractères
compter 122–124
d’échappement 10
jokers 11–15
afficher le contenu d’un répertoire 21–22
comparés aux expressions régulières 206
copier des fichiers 46–47
rechercher la documentation d’une commande 74
recherches dans la base de données de man 72
supprimer des fichiers 63
supprimer des répertoires et des fichiers 66
remplacer 135
répétés, remplacer 136–137
spéciaux
dans les expressions régulières 206
dans les noms de fichiers 9, 67–68
supprimer 137–140
cat (commande) 104, 104–105, 105–106
cat -n (commande) 106–107
cd ~ (commande) 36
cd - (commande) 37
cd (commande) 36
Champs spécifiques, afficher 145–148
Changement, date de 230
Chemins
dans les résultats des recherches 224
absolus 225
relatifs 224
des commandes, rechercher 80–81
du répertoire de travail, afficher 35–36
chgrp -c (commande) 151
chgrp (commande) 155–156
chgrp -R (commande) 156–157
chgrp -v (commande) 151
Chiffrement
algorithmes 341
archives zip 183–184
chmod 000 (commande) 165
chmod (commande)
changer les permissions 162–166
sgid, activer et désactiver 171–173
sticky bit, activer et désactiver 173–176
suid, activer et désactiver 168–171
chmod -R (commande) 167–168
chown (commande) 157–159
chown -R (commande) 158
Classes de caractères 135
clear (commande) 18
Codage ASCII 139
Colonnes, sélectionner dans des fichiers 125–128
Commandes
ack 209
alias 254–256
comparés aux fonctions 264–266
annuler 23
apropos 73–74
apt-cache search 304–306
apt-get clean 306–307
apt-get dist-upgrade 304
apt-get -f install 308
apt-get -f remove 308
apt-get install 298–301
apt-get remove 301–302
apt-get upgrade 302–304
apt --installed list 302
awk 145–148
bunzip2 191–192
bunzip2 -t 192
bzip2 177, 190–191
bzip2 -[0-9] 178
bzip2 -d 192
cat 104–105, 105–106
cat -n 106–107
cd 36
cd - 37
cd ~ 36
chaîner 85–90
chgrp 155–156
chgrp -c 151
chgrp -R 156–157
chgrp -v 151
chmod 162–166, 168–176
chmod 000 165
chmod -R 167–168
chown 157–159
chown -R 158
clear 18
combiner des options 33
compress 177
cp 44–45
cp * 46–47
cp -a 50–51
cp -i 48–49
cp -v 47
cron 352
curl 358–359
cut 125–128
declare -f 263
df 55, 282–284
dhclient 324–325
dig 315–318
dircolors 27
dpkg -i 296–297
dpkg -l 297
dpkg -r 297
du 284–285
du -s 285
echo 58
egrep 205
en échec, chaînage de commandes 89–90
exécuter sur les résultats d’une recherche 237–239
fgrep 205
file 101–103
find 223–232, 237–239
find + 240–242
find -a 232–233
find -fprint 223
find -n 235–237
find -o 233–235
free 281–282
function 258–262
grep 93, 204–208, 212–214, 220
grep [-ABC] 214–217
grep -c 218–219
grep --color=auto 209–210
grep -i 210–211
grep -l 218
grep -n 212
grep -R 208–209
grep -v 217
grep -w 211–212
gunzip 189
gunzip -t 190
gzip 177, 186–187
gzip -[0-9] 178
gzip -d 189
gzip -r 187–189
head 111, 112
head -c 113–115
head -n 113
history 132, 245–246
host 315–318
htop 276
iconv 139–140
ifconfig 310–312, 318–320
ifdown 327–328
ifup 325–327
import 86
info 76–80
ip addr add 318–320
ip addr show 310–312
ip link set 318–320, 325–328
ip route 328–333
iwconfig 321–323
kill 272–274
killall 274
less 72, 92, 107–111
ln 56–62
locate 199–203, 223
locate -i 201–202
locate -n 199
ls 19–21
ls * 21–22
ls -1 23
ls -a 24–25
ls --color 26–27
ls -F 25–26
ls -h 34
ls -i 55–56
ls -l 28–31, 61–62
ls -m 24
lsof 276–277, 279
lsof -c 279–281
lsof -u 278–279
ls -r 31–32
ls -R 22–23
ls -S 33
ls -t 32–33
man 69–72
man [1-8] 75–76
man -f 72–73
man -k 73–74
man -t 69
man -u 69
mkdir 42–43
mkdir -p 43–44
mkdir -v 19, 39
mlocate 200, 203
mtr 315
multitail 117
mv 51–54
netstat 329
nl 124–125
nmcli 321–323
pgrep 214
ping 312–314, 333–336
ping -c 312–314
ps 93, 213–214
ps aux 268–270
ps axjf 270–271
pstree 271
ps U 271–272
pwd 35–36
rechercher les précédentes 250–253
rediriger
la sortie 92–96, 98–100
l’entrée 97, 98–99
rename 238
répéter 247–248, 250
avec des chaînes 249–250
avec des nombres 248
réseau obsolètes 309
réussies, chaînage de commandes 87–89
rm 62–63, 67–68
rm * 63
rmdir 65
rm -i 64
rm -rf 65–66
rm -v 19, 39
route 328–333
rpm -e 289
rpm -ihv 288–289
rpm -qa 289
rpm -Uhv 288–289
rsync 346–352
scp 345–346
sed 141–145
séquentielles
avec une esperluette double 87–89
avec un point-virgule 85–87
avec un tube double 89–90
set -o noclobber 95–96
sftp 343–344
shred 63
sleep 86
slocate 200, 203
sort 128–129
sort -h 130–132
sort -n 130–132
ssh 337–342
ssh-agent 342
stat 230
su 151–152, 153
su - 154
substitution 90–91
su -l 152–153
sur plusieurs lignes 248
tac 107
tail 115–116, 116–117
tail -f 118–119
tail -n 117–118
tar 178
tar -cf 192–193
tar -pzcvf 194–195
tar -pzvxf 197
tar -zvtf 196
tee 99–100
telnet 337
time 203
top 274–276
touch 39–40, 42
touch -t 40–42
tr 97, 135
traceroute 314–315
trash 63
tr -d 137–140
tr -s 136–137
type 82–83, 210
unalias 257
uniq 132–134
unlink 57
unset -f 263–264
unzip 185
unzip -l 186
unzip -t 185–186
updatedb 202–203
uptime 267–268
useradd 157
usermod 157
wc 122–124
wget 352–358
whatis 72–73
whereis 80–81
which 81–82
whoami 152
wput 356
xargs 241–242
yum install 290–292
yum list available 295
yum list installed 293
yum remove 292–293
yum search 295
yum update 294–295
zip 177, 178–179
zip -[0-9] 180–181
zip -e 183–184
zip -i 181–183
zip -P 183–184
zip -r 181–183
compress (commande) 177
Compter
mots/lignes/caractères 122–124
termes de recherche 218–219
Connexions réseau
activer 325–327
configurer 318–320
déconnecter 327–328
sans fil
afficher l’état 321–323
configurer 323
Consultation, date de 230
Correspondances négatives 217
cp -a (commande) 50–51
cp (commande) 44–45
cp * (commande) 46–47
cp -i (commande) 48–49
cp -v (commande) 47
Crochets ([]), caractères jokers 12–15, 46
cron (commande) 352
Ctrl+C 23
Ctrl-g 250–253
Ctrl-r 250–253
Ctrl-s 250–253
curl (commande) 358–359
cut (commande) 125–128
Date
des fichiers, changer 39–40
recherches en fonction 229–232
trier le contenu des répertoires 32–33
DEB, paquetages 287
installer 296–297
installés, afficher 297
mettre à jour avec les dépendances 302–304
rechercher 304–306
résoudre les problèmes d’APT 307–308
supprimer 297, 301–302
les programmes d’installation 306–307
declare -f (commande) 263
Décompression de fichiers
afficher la liste des fichiers 186
commandes
bunzip2 191–192
gunzip 189
tar -pzvxf 197
unzip 185
tester la corruption 185–186
Dépendances
paquetages
DEB 298–304
RPM 290–295
résoudre les problèmes d’APT 308
Déplacements
de fichiers 51–53
de liens symboliques 54
Dépôts 300
Désarchivage de fichiers 196
Deux-points (:)
commande chown 159
échappement 159
df (commande) 55, 282, 282–284
dhclient (commande) 324–325
DHCP (Dynamic Host Control Protocol), obtenir des adresses 324–325
dig (commande) 315–318
Digital Signature Algorithm (DSA) 341
dircolors (commande) 27
Directory (noeud) 78
Disques, surveiller l’utilisation 282–284
Distributions 287. Voir aussi DEB, paquetages ; RMP, paquetages
DNF (Dandified Yum) 290
DNS (Domain Name System)
effectuer des recherches 315–318
résoudre les problèmes 334
Documentation sur les commandes 69
afficher le synopsis d’une commande 72–73
commandes
info 76–80
man 69–72
type 82–83
whereis 80–81
which 81–82
lire des pages de manuel spécifiques 75–76
rechercher 73–74
Domain Name System (DNS)
effectuer des recherches 315–318
résoudre les problèmes 334
dotfiles 15–17
disponibles sur GitHub 15
dpkg -i (commande) 296–297
dpkg -l (commande) 297
dpkg -r (commande) 297
DSA (Digital Signature Algorithm) 341
du (commande) 284–285
du -s (commande) 285
Dynamic Host Control Protocol (DHCP), obtenir des addresses 324–325
E
ECDSA (Elliptic Curve Digital Signature Algorithm) 341
echo (commande) 58
Écran, effacer 18
Écrasement de fichiers
empêcher 95–96
éviter 48–49
Éditeurs de texte, changer 110
egrep (commande) 205
Elliptic Curve Digital Signature Algorithm (ECDSA) 341
Enregistrements DNS, rechercher 315–318
Entrée, redirection
avec inférieur à (<) 97
combiner à la redirection de la sortie 98–99
Espaces dans les noms de fichiers 10–11
exécution de commandes 242–243
Esperluettes doubles (&&), chaîner des commandes 87–89
Expansion
des accolades 12–15
des noms de fichiers 12
Expressions régulières
caractères spéciaux dans 206
commandes
grep 204–208
sed 143–145
whatis 73
comparées aux caractères jokers 206
guillemets et 206–208
ressources d’information 73
Extensions, déterminer le type de fichier 101–103
I
iconv (commande) 139
ID du processus parent (PPID), numéro 271
ifconfig (commande) 310–312, 318–320
ifdown (commande) 327–328
ifup (commande) 325–327
import (commande) 86
Inférieur à (<) 97
info (commande) 76–80
Inodes 54–56
afficher les numéros 55–56
.inputrc (fichier) 17
modifier 252–253
Installation
Bluefish 299
logiciels. Voir Gestion de paquetages
noyaux 289
Shotwell 290–292
Skype 296
Invites secondaires 259
ip addr add (commande) 318–320
ip addr show (commande) 310–312
ip link set (commande) 318–320, 325–328
ip route (commande) 328–333
IPv4, adresses 309–310
IPv6, adresses 309
iwconfig (commande) 321–323
J
Journaux, afficher les dernières lignes 119
K
killall (commande) 274
kill (commande) 272–274
known_hosts (fichier) 261
SSH 338–340
L
less (commande) 92
afficher les fichiers par page 107–109
avec la commande man 72
caractères de contrôle des couleurs 109
commandes principales 108
modifier des fichiers depuis 110–111
rechercher 109–110
Liens
afficher 61
créer 56–62
matériels 56–62
comparés aux liens symboliques 60–62
supprimer 57
symboliques 59–62
comparés aux liens matériels 60–62
déplacer 54
Lignes
compter 122–124
dupliquées, supprimer 132–134
numéros
ajouter aux fichiers 106–107, 124–125
dans les résultats de recherche 212
vides, supprimer 123
Linux, distributions 287. Voir aussi Paquetages DEB ; Paquetages RPM
LinuxMM 282
Liste. Voir aussi ls (commande)
fichiers dans les archives zip 186
fichiers ouverts 276–277
par un utilisateur 278–279
noms de fichiers comme résultats
d’une recherche 218
paquetages
DEB installés 297, 302
RPM installés 289
processus d’un programme 279–281
utilisateurs de fichiers 279
ln (commande) 56–62
locate (commande) 199–203, 223
mettre à jour la base de données 202–203
locate -i (commande) 201–202
locate -n (commande) 199
loopback, adresse 311
ls -1 (commande) 23
ls -a (commande) 24–25
ls --color (commande) 26–27
ls (commande) 19–20, 20–21
ls * (commande) 21–22
ls -F (commande) 25–26
ls -h (commande) 34
ls -i (commande) 55, 61
ls -l (commande) 28–31, 61
ls -m (commande) 24
lsof -c (commande) 279–281
lsof (commande) 276–277, 279
lsof -u (commande) 278–279
ls -r (commande) 31–32
ls -R (commande) 22–23
ls -S (commande) 33
ls -t (commande) 32–33
N
Navigateurs Web 356
textuels 356
netstat (commande) 329
nl (commande) 124–125
nmcli (commande) 321–323
noclobber (option) 95–96
Nœuds 77–80
secondaires 77
parcourir 77–80
Noms de fichiers
afficher comme résultats d’une recherche 218
caractères spéciaux 9–11
contenant des caractères spéciaux 10–11
supprimer des fichiers 67
contenant des espaces, exécuter des commandes sur 242–243
extension déterminant le type de fichier 101–103
longueur 8
rechercher avec 223–225
sensibilité à la casse 8–9
Notation
alphabétique
activer suid 169
modifier les permissions 162–163
octale
activer suid 170
modifier les permissions 163
NOT, rechercher des expressions avec 235–237
Noyaux, installer 289
NR (variable awk) 148
P
Pagers 72, 107
modifier des fichiers dans 110–111
recherches dans 109–110
Pages de manuel
parcourir 71
rechercher 71, 80–81
sections 71
spécifiques, consulter 75–76
pandoc 301
Paquets, suivre la route 314–315
Paramètres
comparés aux arguments 265
positionnels 258, 265
Permissions 151, 160–161
abréviations pour les attributs de fichiers 160
afficher 28–31
changer
avec la notation alphabétique 162–163
avec la notation octale 163–166
récursivement 167–168
sgid, activer et désactiver 171–173
sticky bit, activer et désactiver 173–176
suid, activer et désactiver 168–171
utilisateurs root 161
pgrep (commande) 214
PID, avec la commande tail 119
ping -c (commande) 312–314
ping (commande) 312–314, 333–336
Point (.)
commande chown 159
répertoire de travail 45
Point d’exclamation (!), dans les expressions régulières 207
Point d’interrogation (?), caractère joker 12–15
Points d’exclamation doubles (!!), répéter des commandes 247–248
Point-virgule (;), chaîner des commandes 85–87
PPID (ID du processus parent), numéro 271
Préfixes pour les octets 115
Problèmes, résoudre
APT 307–308
Ctrl-s 251
réseau 333–336
Processus
afficher l’arborescence 270–271
d’un programme, afficher 279–281
d’un utilisateur, afficher 271–272
en cours d’exécution, afficher 268–270
dynamiquement 274–276
terminer 272–274
zombie 269
tuer 273
.profile (fichier) 16
Programmes
afficher les processus 279
d’installation, supprimer 306–307
exécutables, rechercher 80–81
Propriétaire
afficher 28–31
des fichiers 151
changer 157–159
changer récursivement 158
dans les recherches 225–226
modifier le groupe 155–156
modifier le groupe
récursivement 156–157
ps aux (commande) 268–270
ps axjf (commande) 270–271
ps (commande) 93, 213–214
pstree (commande) 271
ps U (commande) 271–272
pwd (commande) 35–36
R
Readline (bibliothèque) 17
Recherches
chemins d’une commande 80–81
dans des fichiers
commande grep 204
compter les mots 218–219
contexte des mots 214–217
dans les résultats d’une recherche 220
expressions régulières 204–208
insensibles à la casse 210–211
mettre en exergue les résultats 209–210
noms comme résultats des recherches 218
non-correspondances 217
numéros de ligne dans les résultats 212
récursives 208–209
sur un mot entier 211–212
dans les pagers 109–110
de fichiers
avec des expressions AND 232–233
avec des expressions NOT 235–237
avec des expressions OR 233–235
commande locate 199–201
exécuter des commandes sur les résultats 237–239, 240–242
insensibles à la casse 201–202
mettre à jour la base de données de locate 202–203
par date 229
par nom 223–225
par propriétaire 225–226
par taille 226–228
par type 228–229
DNS inverses 316
documentation d’une commande 73–74
gestionnaires graphiques de paquetages 295
GID (ID de groupe) 155
historique de la ligne de commande 250–253
pages
info 79
man 71
paquetages
DEB 304–306
RPM 295
sortie d’une commande 212–214
surligner les résultats 209–210
versions d’une commande 81–82
Redirection
de la sortie. Voir Sortie, redirection
de l’entrée. Voir Entrée, redirection
de l’entrée et de la sortie, combiner 98–99
regexp. Voir Expressions régulières rename (commande) 238
Renommage
fichiers 53–54
répertoires 53–54
Répertoires 7
afficher le contenu. Voir ls (commande)
changer 36
créer 42–43
avec des sous-répertoires 43–44
des liens vers 56–62
inodes 55
liste séparée par des virgules 24
permissions 31, 151
propriétaire 151
renommer 53–54
répertoire de travail 45
déterminer 35–36
répertoire personnel 20, 36
aller dans 36
répertoire précédent, aller dans 37
supprimer
contenu et répertoire 65–66
répertoires vides 65
surveiller l’utilisation de l’espace 284–285
trier le contenu en fonction de la date 32–33
vides, supprimer 65
Réseaux 309
adresses
DHCP, obtenir 324–325
IPv6 309
loopback 311
commandes obsolètes 309
connexions
activer 325–327
afficher l’état 310–312
configurer 318–320
désactiver 327–328
sans fil 321–323
vérifier l’état 312–314
dépanner 333–336
recherches DNS 315–318
sécurité. Voir Sécurité
suivre le chemin des paquets 314–315
table de routage IP
afficher 328–330
modifier 330–333
télécharger des fichiers
sans interaction 352–356
séquentiellement 358–359
télécharger un site web sans interaction 357–358
rm (commande) 62–63, 67–68
rm * (commande) 63
rmdir (commande) 65
rm -i (commande) 64
rm -rf (commande) 65–66
rm -v (commande) 19, 39
root, utilisateur
devenir 153
avec les variables d’environnement 154
permissions 161
route (commande) 328–333
rpm -e (commande) 289
rpm -ihv (commande) 288–289
RPM, paquetages 287
APT et 298
installer 288–289
avec les dépendances 290–292
installés, afficher 289, 293
mettre à jour, avec les dépendances 294–295
rechercher 295
supprimer 289
avec les dépendances 292–293
rpm -qa (commande) 289
rpm -Uhv (commande) 288–289
RSA (chiffrement) 341
rsync (commande) 346–352
S
Sauvegardes
créer avec cp 50–51
sécurisées des fichiers 346–352
scp (commande) 345–346
Scripts de démarrage cachés. Voir dotfiles
Sections des pages man 75–76
Sécurité
copie de fichiers 345–346
fichier .bash_history 246
ouverture de session à distance 337–340
sans mot de passe 340–342
sauvegarde de fichiers 346–352
transfert de fichiers 343–344
sed (commande) 141–145
Serveurs SSH, port par défaut 344
Session, ouvrir à distance 337–340
sans mot de passe 340–342
set -o noclobber (commande) 95–96
sftp (commande) 343–344
sgid 160
activer et désactiver 171–173
Shells. Voir aussi bash (shell)
d’ouverture de session 15
interactifs 16
non d’ouverture de session 16
non interactifs 16
Shotwell
installer 290–292
supprimer 292–293
shred (commande) 63
Sites Web, télécharger 357–358
non interactivement 357–358
Skype, installer 296
sleep (commande) 86
slocate (commande) 200, 203
Smart 305
.so (objet partagé), fichiers 280
sort (commande) 128–129
sort -h (commande) 130–132
Sortie. Voir aussi Flux d’entrée-sortie
ajouter à des fichiers 96
des commandes, rechercher dans 212–214
en colonnes du contenu des répertoires 23
en couleur
affichage des répertoires 26–27
commande less 109
inverser l’ordre du contenu d’un répertoire 31–32
redirection
combiner à la redirection de l’entrée 98–99
commande tee 99–100
concaténer des fichiers 105–106
empêcher les écrasements 95–96
supérieur à (>) 94–95
très supérieur à (>>) 96
tube (|) 92–94
sort -n (commande) 130–132
Sous-répertoires
afficher le contenu 22–23
créer avec des répertoires 43–44
Sous-shells 16
SSH
clés, modifier le fichier known_hosts 261
serveurs, port par défaut 344
ssh-agent (commande) 342
ssh (commande) 337–340, 340–342
STAT (colonne de la commade ps) 269
stat (commande) 230
stderr 91–92
stdin 91–92
stdout 91–92
concaténer des fichiers vers 104–105
diviser le flux de sortie 99–100
sticky bit 160
activer et désactiver 173–176
su - (commande) 154
su (commande) 151–152, 153
suid 160
activer et désactiver 168–171
su -l (commande) 152–153
Supérieur à (>) 94–95
Suppressions
accidentelles, empêcher 64
alias 257
fonctions 263–264
liens 57
lignes dupliquées 132–134
paquetages DEB 297
avec les dépendances 301–302
programmes d’installation 306–307
paquetages RPM 289
avec les dépendances 292–293
Shotwell 292–293
Surveillance du système 267
durée d’activité du système 267–268
fichiers ouverts 276–277
d’un utilisateur 278–279
mémoire, utilisation de l’espace 281–282
processus
arborescence 270–271
d’un programme 279–281
d’un utilisateur 271–272
en cours d’exécution 268–270, 274–276
terminer 272–274
répertoires, utilisation de l’espace 284–285
systèmes de fichiers, utilisation de l’espace 282–284
Synaptic 306
Système de fichiers, afficher l’utilisation 282–284
Table de routage IP
afficher 328–330
modifier 330–333
tac (commande) 107
tail (commande) 115–117
tail -f (commande) 118–119
Taille
dans la recherche des fichiers 226–228
des fichiers 34
trier le contenu d’un répertoire 33
tail -n (commande) 117–118
Tampons 282
tar, archives 178, 192
décompresser 197
tester la corruption 196
tar -cf (commande) 192–193
tar (commande) 178
tar -pzcvf (commande) 194–195
tar -pzvxf (commande) 197
tar -zvtf (commande) 196
Taux de compression, ajuster 180–181
tee (commande) 99–100
telnet (commande) 337
Texte
éditeurs
changer 110
tube (|) et 94
navigateurs Web 356
transformer 141–145
Tilde (~), répertoire personnel 20
time (commande) 203
Tiret (-) 10
Tirets doubles (--), dans les commandes 67
top (commande) 274–276
touch (commande) 39–40, 42
touch -t (commande) 40–42
traceroute (commande) 314–315
trash (commande) 63
tr (commande) 97, 135
tr -d (commande) 137–140
Très supérieur à (>>), rediriger la sortie 96
Tri du contenu
des fichiers 128–129
des répertoires
par date 32–33
par taille 33
tr -s (commande) 136–137
Tube (|) 92–94
Tubes doubles (||), chaîner des commandes 89–90
type (commande) 82–83, 210
U
Ubuntu Software Center 306
UID (ID de l’utilisateur) 155
unalias (commande) 257
uniq (commande) 132–134
unlink (commande) 57
unset -f (commande) 263–264
unzip (commande) 185
unzip -l (commande) 186
unzip -t (commande) 185–186
updatedb (commande) 202–203
uptime (commande) 267–268
useradd (commande) 157
usermod (commande) 157
UTF-8 (encodage) 139
Utilisateurs
abréviations 160
afficher les fichiers ouverts 278–279
changer 151, 152
avec les variables d’environnement 152–153
devenir root 153
devenir root avec les variables d’environnement 154
des fichiers, afficher 279
propriétaires des fichiers, rechercher avec 225–226
V
Variables d’environnement
changer d’utilisateur 152–153
devenir root 154
Versions des commandes, rechercher 81–82
vi 111
vim 111
X
xargs (commande) 241–242
XOFF, désactiver le contrôle de flux 251
Yumex 306
yum install (commande) 290–292
yum list available (commande) 295
yum list installed (commande) 293
yum remove (commande) 292–293
yum search (commande) 295
yum update (commande) 294–295
Z
Zero Install 306
zip
archives
afficher les fichiers 186
décompresser 185
tester la corruption 185–186
commande 177–178, 178–179
zip -[0-9] (commande) 180–181
zip -e (commande) 183–184
zip -i (commande) 181–183
zip -P (commande) 183–184
zip -r (commande) 181–183