Quand on ouvre une console on se trouve généralement à la racine de notre répertoire personnel. En supposant que je sois l'utilisateur user je sais que mon répertoire personnel se trouve (en partant de la racine du disque dur) dans /home/user.
user@machine:~$
Vous remarquerez qu'il n'est pas indiqué
user@machine:/home/user$
(c'est pourtant la réalité) maisuser@machine:~$
, en fait le caractère tilde (~) représente le répertoire personnel de l'utilisateur connecté.
Tapez la commande pwd
(print working directory) affichera bien /home/user
, l'endroit où vous vous trouvez.
Le caractère dollar ($) signifie que nous sommes connecté en tant que simple utilisateur, quand nous nous connecterons en tant que super utilisateur (root) la console affichera un caractère dièse (#).
Quand on souhaite passer d'un répertoire à un autre on utilise la commande cd
(commande directory).
Sortir du répertoire courant vers le premier répertoire parent:
user@machine:~$ cd ..
user@machine:/home$
Retourner dans le répertoire enfant user (notre répertoire personnel)
user@machine:/home$ cd user
user@machine:~$
Notez bien que je n'ai pas écrit
/user
mais bienuser
sans/
, si j'avais fait cela Linux aurait compris que je souhaite partir de la racine du disque dur /. Ce genre d'erreur retourne un message très clair:bash: cd: /user: Aucun fichier ou dossier de ce type
on aurai aussi pu faire comme ça
user@machine:/home$ cd ~
user@machine:~$
Sortir du répertoire courant vers le répertoire racine (celui qui contient tout les autres)
user@machine:~$ cd ../..
user@machine:/$
on aurai aussi pu faire comme ça
user@machine:~$ cd /
user@machine:/$
Pour retourner dans notre répertoire personnel (sans utiliser ~)
user@machine:/$ cd /home/user
user@machine:~$
La touche [tab] (tabulation) permet d'auto compléter des commandes partiellement écrites, c'est très pratique quand les noms de fichiers ou de répertoires sont plus longs que ceux ci-dessus.
Quand vous effectuez des allez et retours d'un répertoire à un autre il peut être pratique d'utiliser la commande cd -
plutôt que de retaper les chemins chaque fois.
user@machine:~$ cd Vidéos/
user@machine:~/Vidéos$
user@machine:~/Vidéos$ cd ~/Téléchargements/
user@machine:~/Téléchargements$
user@machine:~/Téléchargements$ cd -
user@machine:~/Vidéos$
user@machine:~/Vidéos$ cd -
user@machine:~/Téléchargements$
Utilisée sans option ni argument ls
retournera sans distinction la liste des fichiers et des répertoires (non cachés) du répertoire courant
user@machine:~$ ls
bin images test.txt
documents music test2
downloads test
dans cet exemple il est difficile de distinguer les fichiers des répertoires (sous Linux les fichiers n'ont pas forcément d'extension) de plus on ne vois pas les fichiers et dossiers cachés (.fichier .dossier).
Voici quelques options indispensables (liste non exhaustive)
comme la plupart des options il est possible de les combiner:
ls -lar
ouls -l -a -r
sont équivalentes.
Il en existe bien d'autres mais ce sont selon moi les plus utilisées.
Exécutez la commande ls -l
et regardez le premier caractère de chaque ligne:
Les trois premiers types sont ceux que l'on manipule le plus fréquemment.
Exécutez la commande ls -F
et regardez le dernier caractère de chaque élément:
voir aussi ces 3 astuces qui combinent ls avec d'autres commandes.
Utilisée sans option sur un fichier, la commande touch appliquera à ce dernier la date courante du système comme date de dernière modification.
Grâce à l'option -t il est possible d'affecter une date choisie. La syntaxe est la suivante:
[[SS]AA]MMJJhhmm[.ss]
SS est le siècle (19 ou 20), peut être ignoré, dans ce cas utilisera le siècle courant.
AA est l'année de 00 à 99, peut être ignoré si SS à été ignoré.
MM le mois 01 à 12
JJ le jour 01 à 31
hh l'heure de 00 à 23
mm les minutes de 00 à 59
.ss les secondes de 00 à 59, peut être ignoré (00)
Il est impératif d'utiliser le zéro si le nombre est inférieur à 10 (01, 02, ...)
Les trois commandes ci-dessous sont équivalentes.
$ touch -t 202110050633.00 fichier.txt
$ touch -t 2110050633.00 fichier.txt
$ touch -t 2110050633 fichier.txt
$ ls -l
-rw-r--r-- 1 user user 1789 5 oct. 2021 fichier.txt
La commande touch n'a pas pour vocation de créer des fichiers mais elle peut le faire.
Cré le fichier txt1
$ touch txt1
Cré les fichiers txt1 et txt2
$ touch txt1 txt2
Cré un fichier dont le nom comporte un espace
$ touch "mon txt"
Cré le fichier txt1 avec le texte "bonjour tout le monde" comme contenu.
$ echo "bonjour tout le monde" > txt1
Crée un dossier nommé "folder"
$ mkdir folder
Crée deux dossiers d'un même coup au même niveau
$ mkdir folder1 folder2
Créer une arborescence de dossiers
$ mkdir -p fdr1/fdr2/fdr3
Lecture de tout un fichier
$ cat
Pareil mais avec les numéros de ligne
$ cat -n
cat > rep/fichier.txt << "EOF"
... ligne 1 ...
... ligne 2 ...
...
EOF
cat /proc/cpuinfo | grep -c ^processor
$ cat /dev/cdrom > ~/img.iso
Au besoin installer et utiliser
# lsscsi
pour trouver votre lecteur cd
lecture d'un fichier page par page
$ less grosFichier
raccourcis clavier:
Espace : page suivante
Entré : ligne suivante
d : demi page suivante
b : page précédente ( pg up )
y : une ligne en arrière ( flèche haut )
u : demi page précédente
q : quitter
= : affiche la position dans le fichier
h : aide ( q pour sortir )
/ : /motAchercher (regex possible)
n : suite à une recherche, recherche l'occurrence suivante
N : pareil que n mais en remontant le sens de lecture
Lire le début d'un fichier
$ head nom-fichier
Lire les 3 premières lignes d'un fichier
$ head -n 3 nom-fichier
Lire la fin d'un fichier
$ tail nom-fichier
Afficher les trois dernières lignes d'un fichier
$ tail -n 3 nom-fichier
Affiche si le fichier évolue (lecture en temps réel)
$ tail -f nom-fichier
Pareil mais avec un rafraîchissement de 2 secondes
$ tail -f -s 2 nom-fichier
Quitter tail
[CTRL]+[C]
Faire une copie de "fichier1" en "fichier2"
$ cp fichier1 fichier2
Fait une copie de "fichier1" vers "dossier1"
$ cp fichier1 dossier1/
Fait une copie de "fichier1" vers "dossier1" et renomme "fichier1" en "fichier2"
$ cp fichier1 dossier1/fichier2
Fait une copie de toutes les images .jpg dans "dossier1"
$ cp *.jpg dossier1/
Fait une copie de tous les fichiers qui commencent par "so" dans "dossier1"
$ cp so* dossier1
Fait une copie de "dossier1" et tout ses sous dossiers dans "dossier2"
$ cp -R dossier1 dossier2
Une manière un peu différente de faire une copie
$ cp fichier.txt{,.log}
$ ls
fichier.txt fichier.txt.log
Trois options me semblent importantes pour la commande cp:
-a : (archive) conserve les information d'horodatage du fichier
$ cp -a fichier1.txt fichier1.1.txt
$ cp fichier1.txt fichier1.2.txt
$ ls -l
-rw-r--r-- 1 user user 1789 5 oct. 06:33 fichier1.txt
-rw-r--r-- 1 user user 1789 5 oct. 06:33 fichier1.1.txt
-rw-r--r-- 1 user user 1789 9 déc. 18:16 fichier1.2.txt
-i : (interactive) Prévient l'écrasement accidentel de fichier.
-v : (ou --verbose) Qui affiche ce qui se passe, très appréciable quand on copie un gros volume de fichiers.
Créer une arborescence de répertoires (r1/r2/r3) et ajouter à la volée fichier.txt dans le dernier répertoire (r3)
$ mkdir -p r1/r2/r3 && cp fichier.txt $_
Lors d'un déplacement de fichier avec la commande mv l'horodatage est préservé.
Déplace fichier1 dans dossier1
$ mv fichier1 dossier1/
Déplace(renomme) dossier1 et ses sous dossiers dans dossier2
$ mv dossier1/ dossier2/
si dossier2 existe alors dossier1 sera déplacé dans dossier2
si dossier2 n'existe pas alors dossier1 est renommé en dossier2
Déplace toutes les images .jpg vers dossier1
$ mv *.jpg dossier1/
Renomme fich en fichier1
$ mv fich fichier1
déplace et renomme fich1
$ mv fich1 dossier/fichier
En supposant que le répertoire test soit en fait un lien symbolique pointant vers un répertoire à part entière. La commande
$ mv test /home/autre/rep/
déplacera le lien symbolique, alors que
$ mv test/ /home/autre/rep/
déplacera le répertoire où pointe le lien symbolique.
La commande rm supprime définitivement ce qui lui est passé en paramètre, il convient d'être extrêmement vigilent lors de son utilisation.
Supprime fichier1
$ rm fichier1
Supprime fichier1 et fichier2
$ rm fichier1 fichier2
Quelques options:
-i : demande confirmation
-f : opposé à i, supprime quoi qu'il arrive
-v : (mode verbeux) dit ce qu'il fait
-r ou -R : supprime un dossier et son contenu
Supposons un répertoire contenant cette liste de fichier:
$ ls
bob.01-01-2016.sql.gz
bob.02-01-2016.sql.gz
bob.01-01-2015.sql.gz
bob.02-01-2015.sql.gz
joe.01-01-2016.sql.gz
joe.02-01-2016.sql.gz
joe.01-01-2015.sql.gz
joe.02-01-2015.sql.gz
Si l'on souhaite supprimer les sauvegardes de Bob il suffit de faire ça:
$ rm bob*
de même si l'on souhaite supprimer tous les fichier de 2015 il suffit de faire ça:
$ rm *15.sql.gz
ou ça:
$ rm *2015*
Au risque de me répéter, manipulez la commande rm avec précaution. Par exemple si j'avais tapé
$ rm bob *
, avec un espace entre bob et *, la commande aurait compris (à juste titre) qu'il faut supprimer un fichier nommé bob ainsi que tout ce qui se trouve dans le répertoire courant.
Quand c'est possible évitez les caractères spéciaux avec rm.
Il n'est, à ma connaissance, pas possible d'utiliser rm et grep simplement avec un pipe, par contre il est possible de fournir une liste de fichiers que rm se chargera de supprimer.
Si l'on reprend l'exemple ci-dessus on peut refaire les mêmes opérations mais avec les expressions régulières.
$ ls | grep '^bob' | xargs rm
$ ls | grep '15.sql.gz$' | xargs rm
$ ls | grep '.2015.' | xargs rm
$ ls | grep '^[a-i]' | xargs rm
/!\ attention aux caractères spéciaux:
$ ls | grep -Z '^bob' | xargs -0 rm
Liens physiques: deux noms de fichiers différents pointent vers un même contenu. Ne fonctionne pas sur les répertoires.
Liens symboliques: le lien pointe vers le nom du fichier d'origine. Fonctionne sur les répertoires.
Crée un lien physique entre fichier2 et le contenu de fichier1.
$ ln fichier1 fichier2
Crée un lien symbolique de fichier2 vers fichier1.
$ ln -s fichier1 fichier2
Créer un lien symbolique entre une clé usb et un répertoire "ma_cle"
$ ln -s -T /media/usb0/ /home/user/ma_cle
/!\ le répertoire "ma_cle" est créé à la volée
Supprimer un lien
$ unlink nom_du_lien
Il existe plusieurs manières de paramétrer un programme pour qu'il prenne le pas sur un autre mais la solution commune à la plupart des distributions consiste à créer un lien symbolique vers le programme souhaité.
Commencer par repérer le nom exacte du programme
$ ls -al /usr/bin/
Les liens symboliques existants pointant vers les programmes par défaut du système sont stockés dans le répertoire /etc/alternatives/
$ cd /etc/alternatives/
$ ls -al
Il sera nécessaire de supprimer le lien s'il existe déjà, par exemple pour remplacer Google chrome par Opera comme navigateur par défaut la méthode est la suivante:
Supprimer le lien existant
# rm x-www-browser
ou
# unlink x-www-browser
Créer le nouveau lien
# ln -s /usr/bin/opera x-www-browser
et vérifier le résultat
$ ls -al | grep browser
$ echo "" > fichier.txt
ou plus court
$ > fichier.txt