Direction du numérique (DN)


Cours Unix - Linux

La ligne de commande 
L'organisation des données : arborescence 
Quelques commandes avancées 
Environnement Linux
Pour aller plus loin

 

La ligne de commande

 

1. Prise de contact

 

La ligne de commande est un moyen de passer des instructions au système d'exploitation. Elle existe dans tous les systèmes : GNU/Linux, MacOS ou Windows.

L'avantage des commandes est d'offrir toutes les options d'utilisation contrairement à l'interface graphique qui n'en utilise souvent qu'une partie.
Par défaut le terminal affiche une chaine de caractère appelée "prompt" :
[user@pyrene ~]$  

Le prompt est paramétrable et peut prendre des formes différentes : affichage du nom du serveur, du user, du répetoire courant ou encore se limiter à un seul caractère.

 

2. Mécanisme de complétion

 

Consiste à compléter automatiquement le début d'une commande : on utilise la touche <TAB>

Ex : hist<TAB> fait afficher history

Dans certaines distributions Linux, la complétion fonctionne également sur les options des commandes.

Par exemple, pour connaître les options de la commande ls :  ls --a<TAB>

 

3. Se promener dans l'historique de la ligne de commande

 

La méthode la plus simple pour retrouver une commande est d'utiliser les flèches "haut" et "bas"  pour balayer l'historique de vos commandes.

On peut visualiser l'historique de ses commandes avec la commande : history

 
La ligne de commande est gérée par un éditeur. Pour savoir quel éditeur est actif, taper : set -o
 

Pour activer emacs, tapez la commande : set -o emacs


Séquences de touches et fonction associée :
<CTRL-u> : efface tout ce qui est a gauche du curseur
<CTRL-a> : début de ligne.
<CTRL-e> : fin de ligne
<CTRL-w> : efface le mot à gauche du curseur
<Esc> puis b ou <Alt-b> : recule d'un mot
<CTRL-r> : recherche le mot en cours de frappe. Taper <esc> pour sortir du mode recherche
 
 

4. L'aide

 

Convention des commandes suivantes : les valeurs entre crochets sont optionnelles.

  • La commande 'man', abréviation de manual :  man nom_commande
  • La commande 'info' qui tend à remplacer man car elle offre plus de possibilités : info nom_commande



 

L'organisation des données : arborescence

Représentation graphique d'une arborescence de fichiers Linux :

 

1. Se déplacer et se repérer dans une arborescence

 

Sous Linux, un chemin commence par "/" lorqu'il est absolu. Dans ce cas on donne la liste des répertoires depuis la racine : "/home/user1/Subtopic1"

Il existe également des éléments relatifs pour évoluer dans l'arborescence :

  • "." représente le répertoire courant
  • ".." représente le répertoire parent
  • "~" représente le répertoire d'accueil (home directory)

 

commande action effectuée
pwd indique le répertoire où on se trouve avec son arborescence
(ex : /home/dupont/mesdocs)
cd permet de se déplacer dans l'arborescence.
ex : si on se trouve dans le répertoire '/home/user1/Subtopic1' :
cd  /home/user1' -> permet d'aller dans le répertoire '/home/user1'
Pour revenir au répertoire d'accueil : cd ~
Par remonter d'un niveau au répertoire parent : cd ..
Pour remonter de 2 niveaux : cd ../..

 

2. Opérations sur les répertoires et fichiers

 

  • Pour créer  et supprimer un répertoire ou un fichier

 

 commande
action effectuée
 mkdir nom_rep
crée le répertoire 'nom_rep'
rmdir nom_rep supprime le répertoire 'nom_rep' : le répertoire doit être vide !
rm -r nom_rep  efface le répertoire 'nom_rep' avec tous les fichiers et sous-répertoires qu'il contient.
L'option 'r' permet d'effacer récursivement.
On peut ajouter l'option 'f' pour forcer l'effacement : rm -rf nom_rep!! commande dangereuse !!
rm nom_fich1 efface le fichier 'nom_fich1'

 

  • Pour lister un ensemble de répertoires et fichiers 'ls'
commande   action effectuée
ls liste le nom des fichiers et sous-répertoires qui sont dans le répertoire où vous vous trouvez
ls -a idem que ls mais liste en plus les fichiers cachés
ls -l idem que ls mais donne plus de détails sur les fichiers et répertoires (droits, propriétaire, taille,date et heure, nom)
ex : -rw-r-xr--  user  uppa 1720 2007-12-19 14:31 nom_fich
-rw-r-xr-- représente les droits d'accès
user est le propriétaire
uppa est le groupe

 

  • Vous avez du mal à décrypter?
Séparons la chaîne de caractères -rwxr-xr-- en 4 sous-chaînes pour mieux comprendre

'-' rwx
r-x r--
indique le type du document  droits propriétaire (user) droits groupe (group) droits autres (other)
'-' pour fichier,  'd' pour répertoire (directory) ou 'l' pour lien symbolique (link). 'r' indique le droit de lecture (read), 'w' le droit d'écriture (write) et 'x' le droit d'exécution (execute)
Le symbole '-' à la place de 'r' (resp :  'w', 'x') dans 'rwx', ie : '-wx' indique une non-permission de droit de lecture (resp : écriture, exécution)

Dans notre exemple, le propriétaire a tous les droits, le groupe a droit de lecture et d'exécution mais ne peut pas modifier le fichier, les autres ont seulement le droit de lecture.
- dupont : nom du propriétaire du fichier
- team1 : nom du groupe auquel appartient dupont
- 1720 : taille du fichier 'nom_fich' en octets
- 2007-12-19 : date de création ou de dernière modification du fichier 'nom_fich'
- 14:31 : heure de création ou de dernière modification du fichier 'nom_fich'
- nom_fich : nom du fichier
  • Manipulation des droits d'accès
 commande  action effectuée
chmod  modifie les droits d'accès 
 chmod u+rwx 
 
 ajoute les droits R, W et X au propriétaire du fichier ou du répertoire 
chmod ugo+rx   ajoute les droits R et X au propriétaire, au groupe et à tous du fichier ou du répertoire 
  •  Visualiser le contenu d'un fichier
 
 commande  action effectuée
less 
 Affiche en mode paginée hors terminal.
 Taper <espace> pour aller à la page suivante
 Taper "/" pour chercher un terme
 Taper "q" pour sortir
 
more
 Affiche en mode paginée dans le terminal
 Taper <espace> pour aller à la page suivante
 Taper "q" pour sortir
 

 

Quelques commandes avancées

1. Le tube "|" (pipe en anglais)

 

Il s'agit d'un système de redirection des résultats d'une commande (sortie standard). Cela permet d'enchainer plusieurs commandes. Nous en verrons des exemples avec la commande suivante.

 

2. le filtre "grep"

 

grep est un filtre qui permet de choisir des éléments d'une liste selon un motif. grep s'appuie sur les expressions régulières : mécanismes de sélection très puissant.
Je souhaite lister les élément d'un répertoire qui contiennent la chaine de caractère "mo" :

[user@pyrene ~]$ ls ~/sge
accounting  commande.sge  ETHANE   gaussian  jobs  matlab  molekel  molpro.xml mpi scilab ...
[user@pyrene ~]$ ls ~/sge | grep mo

molekel molpro molpro.xml mopac 

Liste des éléments commençant par "mol"

[user@pyrene ~]$ ls ~/sge | grep ^mol

molekel molpro molpro.xml mopac  

Liste des éléments terminant par "lab"

[user@pyrene ~]$ ls ~/sge | grep lab$

matlab scilab

Autre exemple qui consiste à retrouver toutes les commandes qsub stockées dans l'historique :

[user@pyrene ~]$ history | grep qsub 
191  qsub G09-D01.sh test_court 338  qsub subjob.sh 609  history | grep qsub  
grep permet de fouiller un ensemble de fichiers :
[user@pyrene ~]$ grep motif * 
Cette commande recherche tous les fichiers du répertoire courant qui contiennent le mot "motif".
  • top : la commande 'top' permet de voir les processus qui tournent sur votre machine. Voici ce que vous obtenez :

  • Vous pouvez voir entre autre sur la ligne 'Mem' la mémoire de votre machine (total), celle utilisée (used) et celle libre (free).
  • PID : indique le numero du processus,
  • USER : est le nom de l'utilisateur,
  • VIRT : est la memoire virtuelle qu'utilise le processus,
  • RES : est la memoire résiduelle qu'utilise le processus,
  • TIME+ : indique le temps depuis lequel le processus tourne,
  • COMMAND : est le nom du processus.
Pour voir les processus qui vous appartiennent, vous pouvez taper 'u' (pour 'user'). La ligne 'which user' apparait :
 
Entrez votre login puis tapez sur la touche 'entrer':
 
Pour sortir du 'top', appuyez sur 'Ctrl' 'c'.
  • Vous pouvez aussi voir les processus qui tournent sur votre machine avec cette commande
[user@pyrene ~]$ ps -ef UID        PID  PPID  C STIME TTY          TIME CMD

root         1     0  0 Mar04 ?        00:00:25 /sbin/init 
root         2     0  0 Mar04 ?        00:00:01 [kthreadd]
root         3     2  0 Mar04 ?        00:01:17 [migration/0]
root         4     2  0 Mar04 ?        00:00:27 [ksoftirqd/0]
root         5     2  0 Mar04 ?        00:00:00 [migration/0]
root         6     2  0 Mar04 ?        00:00:03 [watchdog/0]
root         7     2  0 Mar04 ?        00:19:52 [migration/1]
root         8     2  0 Mar04 ?        00:00:00 [migration/1]
root         9     2  0 Mar04 ?        00:01:21 [ksoftirqd/1]
root        10     2  0 Mar04 ?        00:00:20 [watchdog/1]
 
Commande qui peut être filtrée avec votre user :
[user@pyrene ~]$ ps -ef | grep user
UID       PID  PPID  C STIME TTY          TIME CMD
user    30855     1  0 Mar05 ?        00:00:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
user    31111     1  0 Mar05 ?        00:00:00 /usr/libexec/e-calendar-factory
user    31179     1  0 Mar05 ?        00:00:00 /bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
...
  • La commande kill permet de tuer un processus avec son 'PID'.

[user@pyrene ~]$ kill -9 31111

La commande alias permet de créer une commande personnalisée : alias ll="ls -l"
 

Environnement Linux

 

1. Variables d’environnement

 

Principe de fonctionnement

Une variable est un mécanisme informatique permettant d’associer une valeur à un nom. Quand on connaît le nom, on a accès à la valeur : ex : HOME=/home/user/dupont [user@pyrene ~]$ echo $HOME Ces variables permettent de configurer sa session en donnant des indications de configuration. Par exemple, je choisis mon éditeur préféré : [user@pyrene ~]$ export EDITOR=vim   Certaines variables sont définies par défaut, d’autres peuvent être définies par l’utilisateur les variables d’environnement les plus courantes :

HOME
contient le répertoire d’utilisateur
USER
contient l'identifiant de l’utilisateur
PWD
contient le répertoire courant
SHELL
contient le nom du shell de connexion
PATH
contient la liste des répertoires où se trouvent les commandes que l’utilisateur peut exécuter
HOSTNAME
contient le nom de la machine
HISTSIZE
 contient la taille maximale des commandes exécutées contenues dans le fichier historique
PS1
 permet de mettre en forme le prompt

 

Pour connaître les variables positionnées :
[user@pyrene ~]$ env

Manipulation des variables

Pour affecter une valeur a une nouvelle variable :
[user@pyrene ~]$ MYVAR="Bonjour "
 
Pour affecter une valeur a une variable existante (pas d'espace autour des opérateurs) :
[user@pyrene ~]$ MYVAR=$MYVAR+"à tous"
!!! On affecte une variable avec son nom. Pour la manipuler, on préfixe le nom avec $ !!!
Pour afficher le contenu d'une variable :
[user@pyrene ~]$ echo $MYVAR
Bonjour à tous

 

2.  Fichiers de session bash

 

Le terminal permet d'interagir avec le shell. Le shell est un langage qui interpréte les commandes de l'utilisateur et transmet des ordres au système. Il existe plusieurs langages shell : bash, csh, ksh, tcsh,... Si une partie de leur syntaxe est commune, ils ont par ailleurs de nombreuses spécificités. Le cluster de l'UPPA fonctionne par défaut en BASH (Bourne Again SHell). On peut le visualiser avec la commande :

[user@pyrene ~]$ echo $SHELL
/bin/bash
Par défaut chaque user a accès à un fichier de configuration commun /etc/bashrc.
Il est possible de paramétrer le shell à l'aide des fichiers de session

Identification et rôle des fichiers de session :

~/.bash_profile : teste l'existence du .bashrc et l'exécute s'il le trouve
~/.bashrc : fichier de paramétrage utilisateur. Il permet de compléter les variables définies dans /etc/bashrc ou de les redéfinir. On intervient dans le .bashrc en l'éditant. Par exemple, si je veux créer une commande de raccourci pour lister les modules chargés dans ma session, il faut ajouter la ligne suivante dans le .bashrc : alias ml="module list"

Attention : pour que la modification soit prise en compte, il faut lancer un nouveau terminal ou relancer sa session VNC.

 

 

Pour aller plus loin