Le système d'exploitation GNU-Linux/Commandes de base



Éléments de syntaxe modifier

Les commandes présentées dans les sections qui suivent sont introduites juste après un message d'invite qui dépend de la configuration du shell utilisé. Celui-ci est représenté par un signe dollar $. Il ne doit donc pas être tapé.

Le caractère dièse # marque le début d'un commentaire qui se termine en fin de ligne. Il n'est pas nécessaire de le recopier pour exécuter la commande.

Exemple :

$ pwd   # affiche le répertoire courant

Pour tester cette commande, il suffit d'entrer p w d .

Les lignes qui ne sont pas marquées du signe dollar indiquent ce que la commande précédente doit/peut afficher.

Par ailleurs, il existe deux opérateurs de concaténation des commandes :

  • ";" : qui enchaine les commandes quelques soient leurs résultats. Exemple : pwd ; pwd.
  • "&" : qui stoppe l'enchainement si une commande renvoie une erreur. Exemple : pwd & pwd. De plus, si aucune commande ne figure après le "&", le terminal redonne le focus avant la fin de la première commande, de sorte que l'on peut en taper d'autres si elle est longue (en asynchrone).
    • "&&" : idem sans les informations sur les processus.

pwd (print working directory) modifier

Affiche le répertoire courant.

 $ pwd
 /home/alex

id modifier

Affiche les informations relatives à l'utilisateur connecté.

 $ id
 uid=1000(alex) gid=1000(alex) groupes=20(dialout), 24(cdrom), 25(floppy), 29(audio), 44(video), 46(plugdev), 106(netdev), 109(powerdev), 1000(alex)
 

passwd modifier

Permet de changer son mot de passe

  $ passwd
  Changing password for alex
  (current) UNIX password:
  Enter new UNIX password:
  Retype new UNIX password:
  passwd : le mot de passe a été mis à jour avec succès

 

Ne pas utiliser le symbole euros () dans les mots de passe, car il est potentiellement mal géré par Linux et pourrait se voir systématiquement refusé.

cd (change directory) modifier

Pour se placer dans un répertoire

 $ cd .                    # . désigne le répertoire courant
 $ cd ..                   # .. désigne le répertoire parent
 $ cd /                    # / désigne le répertoire racine
 $ cd /tmp                 # désigne le répertoire tmp appartenant à la racine
 $ cd tmp                  # désigne le répertoire tmp du répertoire courant
 $ cd ../tmp               # désigne le répertoire tmp du répertoire parent du répertoire courant
 $ cd ~                    # permet de revenir dans son répertoire de travail (home directory)
 $ cd                      # idem

Connecté en root, la commande cd m'amène au répertoire /root qui est le répertoire de travail de l'utilisateur root.

Connecté avec l'utilisateur alex, cd m'amène au répertoire de travail de l'utilisateur alex, à savoir /home/alex.

ls (list sorting) modifier

Liste les fichiers d'un répertoire

 $ ls                      # liste les fichiers non cachés du répertoire courant  
 $ ls -l                   # (l : long) : liste détaillée des fichiers du répertoire courant 
 $ ls -a                   # (a : all) : liste tous les fichiers, y compris les fichiers cachés

On peut combiner plusieurs options, l'ordre n'est pas important. Les quatre commandes suivantes sont identiques :

 $ ls -a -l
 $ ls -l -a
 $ ls -la
 $ ls -al

Lister de façon détaillée (-l) tous les fichiers, même cachés (-a), les plus récents (-t) en derniers (-r), avec leur taille en kilo-octets (-k) lisible facilement avec les unités K pour Kilo, M pour Mega, G pour Giga(-h).

$ ls -lartkh

Pour ne lister que les sous-dossiers :

ls -d */

Pour compter les éléments de la liste :

ls |wc -l

cat (concatenate) modifier

Affiche le contenu d'un fichier ou de plusieurs fichiers concaténés sur la sortie standard (l'écran)

 $ cat /etc/crontab                      # affiche le contenu du fichier /etc/crontab
 $ cat /etc/cron.daily /etc/cron.weekly  # concatène les deux fichiers et affiche leur contenu

Pour que les modifications de fichiers s'ajoutent en temps réel sur la sortie standard, utiliser :

tail -f /etc/crontab

mkdir (make directory) modifier

Permet de créer un répertoire

 $ mkdir rep1              # crée un répertoire rep1 dans le répertoire courant
 $ mkdir /rep1             # tente de créer un répertoire rep1 à la racine,
                           # le système refuse car je ne suis pas connecté en root

Exercice : je suis dans le répertoire /var/log, je souhaite créer un répertoire rep2 dans le répertoire /home/alex, comment faire ?

J'ai trois possibilités :

 $ mkdir ../../home/alex/rep2    # on utilise un adressage relatif à la position où je suis : 
                                 # on remonte dans l'arborescence jusqu'à la racine puis 
                                 # on redescend jusqu'au répertoire alex)
 $ mkdir /home/alex/rep2         # on utilise un adressage absolu en partant de la racine
 $ mkdir ~/rep2                  # on utilise ~ pour désigner le répertoire de travail

l'option -p permet de créer le(s) répertoire(s) parent(s).

 $ mkdir  -p rep1/rep2           # crée un répertoire parent rep1 si il n'existe pas,
                                 # et crée dans rep1 un répertoire rep2

rmdir (remove directory) modifier

Supprimer un répertoire vide

 $ rmdir rep1

cp (copy) modifier

Copier un fichier

 $ cp /etc/passwd /tmp                # copie le fichier /etc/passwd dans le répertoire /tmp
 $ cp /etc/passwd /tmp/nouveaunom     # copie le fichier /etc/passwd dans le répertoire /tmp 
                                      # et le renomme en nouveaunom

Attention, si le fichier destination existe déjà, il sera remplacé sans demande de confirmation !

Options courantes :

 -i : si le fichier destination existe, demande confirmation avant de remplacer le fichier

Copier un dossier (avec son contenu) modifier

cp -Rf mondossier /tmp

rm (remove) modifier

Effacer un fichier

 $ rm lefichier                      # efface le fichier lefichier

Attention, le fichier est effacé et sans demander confirmation !

Options courantes :

 -i : demande confirmation avant d'effacer le fichier
 -f : ne demande pas de confirmation (annule -i)
 -r : supprime les répertoires récursivement

Exemples modifier

  • Pour supprimer le répertoire "tmp" et son contenu :
rm -rf tmp
  • Pour supprimer les fichiers de log de plus de deux jours :
find /var/log* -mtime +2 -exec rm {} \;

mv (move) modifier

Déplacer ou renommer des fichiers

  $ mv [Option] Source Destination(répertoire)
  $ mv [Option] Répertoire Source

  $ mv fichier_source fichier_cible   # déplacer fichier_source dans fichier_cible
  
  $ mv fichier1 fichier2    # renomme le fichier fichier1 en fichier2
                            # Attention si fichier2 existe, son contenu sera écrasé et 
                            # remplacé par celui de fichier1

Par précaution, on utilise l'option -i qui permet d'être averti par le système avant l'écrasement du fichier destination si celui-ci existe.

  $ mv -i fichier1 fichier2 # demande la confirmation avant d'effacer la destination

  $ mv rep1/fic1 rep2/fic2  # déplace le fichier fic1 situé dans le répertoire ''rep1''
                            # sous le nouveau nom fic2 situé dans le répertoire rep2

  $ mv rep1 rep2            # déplace le répertoire rep1 dans le répertoire rep2
                            # si rep2 n'existe pas, renomme rep1 en rep2

 

Si le dossier n'est pas vide, utiliser "-f" pour forcer l'écrasement.

 

Pour inclure les fichiers cachés dans les déplacements *, exécuter avant shopt -s dotglob.

ln (link) modifier

La commande ln permet de créer des liens, c'est à dire des raccourcis vers des fichiers ou des répertoires.

 ln -s destination nom_du_lien

Exemple

 $ ln -s prog1.0 monprogramme

Cette commande crée le lien suivant :

 lrwxrwxrwx 1 alex alex   7 2007-10-26 14:25 monprogramme -> prog1.0

find : recherche par nom de fichier modifier

Par exemple pour trouver tous les fichiers .log dans le dossier courant récursivement :

find . -name "*.log"

grep : recherche par contenu de fichier modifier

Par exemple pour trouver tous les fichiers qui contiennent "mon texte" dans le dossier courant récursivement :

grep -r "mon texte" .

En regex en ignorant la casse :

grep -rPi "[a-z_]+" .

clear et reset modifier

  • clear masque les données affichées en console, et on peut les retrouver en remontant l'ascenseur.
  • reset efface complètement les données affichées en console.