CHAPITRE 1
Linux
&
Ses Lignes de Commandes
Bref historique de Linux
• Retour en août 1991... un étudiant finlandais envoie un message
sur comp.os.minix commençant par ces quelques mots :
• Hello everybody out there using minix
I'm doing a (free) operating system (just a hobby,
won't be big and professional like gnu) for
386 (486) AT clones.
• Cet étudiant est Linus Torvalds (né le 28 Décembre 1967), et le
hobby dont il parle est devenu ce que nous connaissons
aujourd'hui... Linux.
Bref historique de Linux
UNIX est l'un des systèmes d'exploitation les plus populaires au monde:
- Support d’un nombre important d'architectures.
- Multitâches pour mini-ordinateurs et grands systèmes.
- Le vrai système d‘exploitation (vision: programmeurs)
⇒ Développement de Linux, par un groupe de programmeurs UNIX
Linux est une version d'UNIX gratuite et librement diffusable
développée à l'origine par Linus Torvalds à l'université de Helsinki,
en Finlande.
Linux a été développé avec l'aide de nombreux programmeurs et
spécialistes UNIX, grâce au réseau mondial Internet, autorisant
quiconque ayant suffisamment de connaissances à participer
activement à l'évolution du système.
Quelques Lignes de commandes basiques
Possibilité d’utiliser plusieurs types de shell:
- bash (Bourne Again Shell) = le plus utilisé (par défaut)
- bsh (Bourne shell)
- tcsh basé sur le C shell (csh)
- ksh (Korn shell)
- zsh (Z shell)
Lancement du shell:
- démarrage en mode texte => shell par defaut
- démarrage en mode graphique(GUI= Graphical User Interface)
=> terminal,xterm ou console … (menu démarrer ou exécuter)
Quelques Lignes de commandes basiques
Commandes Internes et Commandes Externes:
- La commande interne est intégrée au processus shell (C’est le
shell qui exécute l’action). Ce n’est pas un fichier sur le disque.
- La commande externe correspond à un fichier présent sur le
disque.
Exemple:
# ls => le shell demande au noyau de charger en mémoire le
fichier correspondant.
# type ls => ls is /bin/ls
# type pwd => pwd is a shell built in
Initiation au shell
- commandes -
# cd /home/user = # cd ~
# pwd
# echo hello
# exec myprog = # myprog (+remplacement du
processus shell par un nouveau processus)
# time pwd =>temps d’exécution d’une commande
# type => Vérification de la nature d’une commande
Arrêt du Shell = exit ou logout
Initiation au shell
- commandes -
Confusion entre commandes internes et externes:
# pwd (interne)
/home/khalid/binlink
(binlink est un lien symbolique vers /usr/bin)
# /bin/pwd (externe => chemin complet)
/usr/bin
Initiation au shell
- commandes -
Le shell consulte le path lors du lancement d’une
commande qui n’est pas interne.
= liste des chemins définis dans la variable
d’environnement « PATH »
./myprog ou chemin/myprog => lancement de myprog
Saisie de commandes : Astuces
# partie de la commande ou du nom du fichier + tab
(supporté par les shells les plus populaires)
# history (~/bash_history pour le cas du bash)
(les 500 dernières commandes)
# history –c (par mesure de sécurité)
Manipulation:
Touches de direction (haut et bas) ou (ctrl+P =up et ctrl+N=down)
Ctrl+R = recherche inversée en commençant de la fin
=>(reverse-i-search)`‘:(liste de caractères se trouvant n’importe où au
niveau de la commande).
Ctrl+S=recherche de l’occurrence suivante en commençant du début.
Ctrl+G=Arrêt de la recherche.
Saisie de commandes : Astuces
Ctrl+A = début de la commande
Ctrl+E = fin de la commande
Ctrl+B = <=1 car
Ctrl+F = => 1 car
Ctrl+<=+B = ESC+B = <=1 mot
Ctrl+=>+F = ESC+F = =>1 mot
Ctrl+D = [Supp]
Ctrl+K = supp les caractère de la position du curseur jusqu’a la fin.
Ctrl+X puis backspace = supp les caractère de la position du
curseur jusqu’au début.
Saisie de commandes : Astuces
Ctrl+T=permute le caractère au dessus du curseur avec celui d’avant.
ESC puis T = permute les 2 mots au dessus du curseur ou avant celui ci.
ESC puis U = conversion en majuscule des caractère de la position du
curseur jusqu’à la fin du mot.
ESC puis L = conversion en minuscule des caractère de la position du
curseur jusqu’à la fin du mot.
ESC puis C = Conversion en majuscule du caractère au dessus du
curseur ou le 1er caractère mot suivant.
Saisie de commandes : Astuces
Exercice 1.1 (page 10)
Configuration du Shell
La configuration du Shell se fait à travers des fichiers:
Liés à l’utilisateur:
~/.bashrc
~/.profil
Globals : (s’exécutent en 1er)
/etc/bash.bashrc
/etc/profile
Attention:
penser à faire une sauvegarde avant de les modifier et ouvrir un 2ème
terminal pour tester.
Variables d’environnement
# NNTPSERVER=news.abigisp.com
# export NNTPSERVER
Ou
# export NNTPSERVER=news.abigisp.com
Pour le cas de la variable PATH :
# export PATH=$PATH:/home/user/mes_prog
# echo $NNTPSERVER
news.abigisp.com
# env =affichage de toutes les variables d’environnement.
#unset NNTPSERVER = suppression de la variable
HELP
# man ls
Utilise l’éditeur less (affichage page/page)
Manipulation:
La barre espace = passage à la page suivante
ESC puis V = passage à la page précédente.
L’utilisation des touches de direction pour changer de ligne
/ = recherche
q = quitter
HELP
Le manuel man est composé de plusieurs sections:
HELP
# man passwd
Nous envoie à la section 1
# man 5 passwd
Force l’envoie à la section 5
# info commande (certaines commandes sont passées
de man vers info)
# info info
Les redirections
Une commande ouvre
3 descripteurs de fichiers; par défaut :
stdin stdout
commande
stderr
La redirection = remplacer les canaux par
défaut, rediriger vers une autre commande ou
un fichier
Les redirections
> redirige la sortie standard (crée ou écrase un fichier
s’il est existe déjà)
>> concatène la sortie standard (crée un fichier s’il
n’est pas existe pas déjà)
2> redirige la sortie d’erreur(crée ou écrase un fichier
s’il existe déjà)
2>> redirige la sortie d’erreur(crée un fichier s’il n’est pas
existe pas déjà)
&> redirige la sortie standard et la sortie d’erreur (>+2>)
< redirige l’entrée standard (fichier)
<< redirige l’entrée standard (séquence de lignes)
<> redirige l’entrée et sortie standards (même fichier)
Les redirections
exemples:
# ls > liste
crée/écrase le fichier liste et y dirige la sortie de ‘ls‘
# date >> liste
ajoute à la fin du fichier liste la sortie de ‘date‘
# tac < toto.txt
affiche le texte à l’envers
( par défaut: # tac + [entrée]+saisie des lignes+(Ctrl+D))
# wc << EOF (un marqueur)
aa tt
bb
ccc
EOF
Resultat: 3 4 13
Les tubes (pipes)
Tube : |
Utilité : pour “connecter 2 commandes”
stdin stdout stdin stdout
commande commande
stderr stderr
Exemple : combien de fichiers dans le rep. courant ?
sans pipe:
ls > temp ; wc -l < temp ; rm temp
avec un pipe:
ls | wc –l (Compte le nbr de ligne)
Les tubes (pipes)
La commande « tee »
recopie la sortie standard sur la sortie standard et dans le
fichier passé en paramètre
C.a.d :
# someprog | tee outpout.txt
Sortie sur écran et le fichier outpout.txt
Un autre exemple :
# someprog | tee –a outpout.txt
Sortie sur écran et ajout à la fin du fichier outpout.txt
Les tubes (pipes)
La commande « xargs »
Exécution d’une série de commandes semblables
Exemple :
# find ./ -name “*~” | xargs rm
Une autre façon de faire:
# rm `find ./ -name “*~”`
Il faut utiliser le caractère backtick(`) = la touche[7] et non pas la
touche[5]
Les filtres
La commande « cat »
Affiche le contenu des fichiers passés en paramètres.
# cat fichier
Affiche le contenu d’un fichier
# cat first.txt second.txt ….> combined.txt
Concaténation du contenu de first.txt avec second.txt et ….
Les filtres
La commande « join » (séparateur par défaut = espace)
Listing 1.1:
555-2397 Beckett, Barry
555-5116 Carter, Gertrude
555-7929 Jones, Theresa
555-9871 Orwell, Samuel
Listing 1.2:
555-2397 unlisted
555-5116 listed
555-7929 listed
555-9871 unlisted
# join listing1.1.txt listing1.2.txt
555-2397 Beckett, Barry unlisted
555-5116 Carter, Gertrude listed
555-7929 Jones, Theresa listed
555-9871 Orwell, Samuel unlisted
Les filtres
La commande « paste »
Concaténation de la ième ligne du 1er fichier avec la ième du 2ème fichier.
Les 2 lignes vont être séparée par une tabulation.
Exemple :
# paste listing1.1.txt listing1.2.txt
555-2397 Beckett, Barry 555-2397 unlisted
555-5116 Carter, Gertrude 555-5116 listed
555-7929 Jones, Theresa 555-7929 listed
555-9871 Orwell, Samuel 555-9871 unlisted
Commandes de transformation des fichiers
La commande « expand »
Conversion des tabulation en espace
Par défaut tabulation = 8 caractère
-t num ou –tabs=num pour modifier la valeur par défaut.
Exemple: ?
# expand fichier1 > fichier2
# expand -t 20 fichier1 > fichier2 ou # expand -t 20 fichier1 > fichier2
⇒ Remplacement d’un tab par 20 espace.
Commandes de transformation des fichiers
La commande « od »
Affichage en octal du contenu d’un fichier
Exemple :
# od listing1.2.txt
0000000 032465 026465 031462 033471 072440 066156 071551 062564
0000020 005144 032465 026465 030465 033061 066040 071551 062564
0000040 005144 032465 026465 034467 034462 066040 071551 062564
0000060 005144 032465 026465 034071 030467 072440 066156 071551
0000100 062564 005144
0000104
Commandes de transformation des fichiers
La commande « sort »
trie l’entrée ligne par ligne (par défaut / à la1ère colonne)
Quelques Options:
-r : inverse l’ordre de tri
-k : colonne à utiliser pour le tri.
Exemple:
# sort -k 3 listing1.1.txt
555-2397 Beckett, Barry
555-5116 Carter, Gertrude
555-9871 Orwell, Samuel
555-7929 Jones, Theresa
# sort -k 2,3 listing1.1.txt
Trie multiple sur la 2ème et la 3ème colonne.
Commandes de transformation des fichiers
La commande « split »
Découpage d’un fichier en fichiers de tailles identiques.
Quelques options:
-b size: size= taille en octet des fichiers.
-C=size: ne pas découper de ligne
-l ou –line= nombre de lignes
Exemple :
# split -l 2 listing1.1.txt numbers
=> Creation de fichiers numbersaa, numbersab, numbersac …
Commandes de transformation des fichiers
La commande «tr»
– recopie stdin sur stdout en substituant des caractères
– syntaxe: tr [option] set1 [set2]
– exemple:
# tr BCJ bc < listing1.1.txt
555-2397 beckett, barry
555-5116 carter, Gertrude
555-7929 cones, Theresa
555-9871 Orwell, Samuel
Quelques options:
-t ou --truncate-set1: réduire la taille de set1 à la taille de set2
-d efface les car de set1 (set2 n’a plus aucune utilité)
Commandes de transformation des fichiers
Raccourcis:
– [:alnum:] (tous les chiffres et les lettres)
– [:upper:] (toutes les majuscules)
– [:lower:] (toutes les minuscules)
– [:digit:] (tous les chiffres)
– Vous pouvez spécifier une plage de caractère (exemple: A-M)
Exemple:
# tr A-Z a-z < listing1.1.txt
remplace les majuscules par des minuscules
ou
# tr "[:upper:]" "[:lower:]" <listing1.1.txt
Remarque: [:upper:] et [:lower:] s’utilisent en paire.
# tr "[:digit:]" ab <listing1.1.txt
Commandes de transformation des fichiers
La commande « unexpand »
C’est l’opposé de la commande expand.
Remplace les suites d’espaces par des tabulations.
Comme expand:
L’option: -t num ou --tabs=num permet de spécifier le nombre
d’espaces qui vont être remplacés par un tabulation.
Par défaut une tabulation remplace 8 espaces.
Commandes de transformation des fichiers
La commande « uniq »
détruit les lignes consécutives dupliquées
Exemple:
# sort shakespeare.txt | uniq
be
is
not
or
question
that
the
to
Commandes de formatage des fichiers
La commande « fmt »
obtenir des lignes de sortie ayant (jusqu'à) la largeur indiquée
(par défaut 75 caractères).
Pour spécifier la longueur maximale des ligne:
-w width, ou --width=width
Remarque: ne découpe pas les mots
Commandes de formatage des fichiers
La commande « nl »
Numérotation des lignes d'un fichier
nl= cat -b ( numérotation des lignes non-vide)
Quelques options:
-b ou --body-numbering=le style qui peut être:
a=numéroter toutes les lignes
t= ne numéroter que les lignes non-vide
n= ne pas numéroter les lignes
pregexp =ne numéroter que les lignes contenant une
correspondance avec l'expression régulière regexp.
-n ou --number-format={ln,rn,rz}
Sélection du format de numérotation des lignes :
ln : aligné à gauche, pas de 0 en début de nombre.
rn: aligné à droite, pas de 0 en début de nombre (attitude par défaut)
rz: aligné à droite, complété à gauche par des 0.
Exemple:
# nl -b a buggy > numbered-buggy.txt
Commandes de formatage des fichiers
La commande « pr »
Préparation d’un fichier pour l’impression (pagination).
# pr monfichier
Entête contenant la date et l’heure, nom du fichier et numéro de la
page.
Avant de passer à la page suivante:
Quelques options:
-numcols ou --columns =numcols: création d’un fichier en sortie
avec numcols colonnes.
Note: Ne reformate pas le fichier = si les lignes sont longues
elles seront coupées (les mots aussi) et les restes des lignes
seront ignoré.
Commandes de formatage des fichiers
-d ou --double-space: remplacement des espaces par des
espaces doubles.
-F, -f, ou --form-feed: Insertion du caractère form-feed (^L)entre les
pages. (au lieu d’un nombre fixe de lignes vides entre les pages(par
défaut))
-l lignes or --length=lignes: nombre de lignes par pages.
-h texte ou --header=texte: remplacement au niveau de l’entête du
nom du fichier (par défaut) par du texte. (--header=”texte”)
-t ou --omit-header: Enlève l’entête en entier.
-o chars ou --indent=chars: marge de gauche = chars caractères.
-w chars ou --width chars: nombre de caractères par ligne.(s’utilise
uniquement avec -numcols or --columns=numcols)
Exemple:
# cat -n /etc/profile | pr -d | lpr
# cat -n /etc/profile | pr -dfl 50 | lpr
Commandes de visualisation des fichiers
La commande « head »
Affiche les 10 premières lignes d’un seul ou plusieurs fichiers.
Dans le cas de plusieurs fichiers les 10 lignes correspondantes
à chaque fichier seront précédées par une entête (nom du fichier)
Quelques options:
-c num ou --bytes=num: nombre d’octets à afficher.
-n num or --lines=num: nombre de lignes à afficher.
Commandes de visualisation des fichiers
La commande « tail »
Affichage des 10 dernières lignes d’un fichier.
Quelques options:
-c num ou --bytes=num: nombre d’octets à afficher.
-n num or --lines=num: nombre de lignes à afficher.
-f or –follow: afficher les lignes nouvellement ajoutées (log)
--pid=pid: (s’utilise avec –f) arrêter le rafraîchissement des lignes
affichées suite à l’arrêt d’un processus qui a comme identifiant pid.
Commandes de réduction des fichiers
La commande « less »
Version évoluée de more.
Manipulation:
La barre espace=passage à la page suivante
ESC puis V= passage à la page précédente.
L’utilisation des touches de directions pour changer de ligne
/=recherche
?=recherche inversée
g puis numéro de la ligne: déplace le curseur vers la ligne
spécifiée(la 1ère ligne affichée en haut de l’ecran)
h=affichage de l’aide (q=quitter)
q=quitter
Note: less ne peut être utilisé avec les pipes qu’au niveau de la
dernière commande.
Commandes de réduction des fichiers
La commande « cut »
Extrait des portions des lignes fournies en entrée.
Quelques options:
-b list or --bytes=list: Afficher uniquement les octets aux positions
indiquées dans la list (1 octet par ligne)
-c list ou –characters: Afficher uniquement les caractères aux
positions indiquées dans la list
-f list ou --fields=list: N'afficher que les champs indiqués dans list.
tabulation est le séparateur par défaut.
-d char, --delim=char, ou –delimiter=char: pour définir char
comme séparateur
Exemple:
# ifconfig eth0 | grep HWaddr | cut -d “ “ -f 11
Commandes de réduction des fichiers
La commande « wc »
Affiche le nombre de lignes, de mots et d’octets d’un fichier donnée.
Exemple:
# wc file.txt
308 2343 15534 file.txt
Quelques options:
Vous pouvez utiliser les options suivantes:
--lines (-l):nombre de lignes (retour à la ligne)
--words (-w):nombre de mots
--bytes (-c):nombre d’octets
--chars(-m):nombre de caractères
--max-linelength(-L) : longueur de la plus longue ligne.
Les expressions régulières
Appelé aussi expression rationnelle: une chaîne de caractères qui
décrit un ensemble de chaînes de caractères possibles selon une
syntaxe précise.
[ ]: un seul des caractères listés entre les crochets [ et ].
Exemple: b[aeiou]g bag, beg, big, bog et bug.
-:un seul caractère appartenant à une plage donnée
Exemple: a[2-4]z a2z, a3z, et a4z. (autre exemple: [a-m])
.:n’importe quel caractère autre que le retour à la ligne.
Exemple: a.z a2z, abz, aQz …etc
^: le début de la ligne
$: la fin de la ligne
Les expressions régulières
*: 0 ou plusieurs fois ce qui précède
Exemple: ba* "b" ou "ba", "baa", "baaa", …etc.
+: 1 ou plusieurs fois ce qui précède
Exemple: [hc]+at "hat", "cat", "hhat", "chat", "hcat", "ccchat", …etc.
?: 0 ou 1 seule fois ce qui précède
Exemple: [hc]?at "hat", "cat" et "at".
|: choix entre plusieurs alternatives
Exemple: peu|prou|nombres? "peu", "prou", "nombre" ou "nombres".
Les expressions régulières
(): parenthèses des expressions
Exemple: ch(at|ien) correspond à "chat" ou "chien"
\: Pour traiter un caractère spécial comme étant un caractère normal.
Exemple: Pour désigner twain.example.com
il faut utiliser twain\.example\.com.
Les expressions régulières
La commande « grep »
recherche, dans le fichier passé en paramètre, les lignes vérifiant
une expression régulière donnée
– syntaxe : grep [options] regexp [files]
exemples:
# grep 'toto' essai
cherche dans essai toutes les lignes qui contiennent le
mot toto
# grep '^[A-Z]' essai
cherche dans essai toutes les lignes qui commencent
par une majuscule
Les expressions régulières
Quelques options:
-f file ou --file=file: motif contenu dans un fichier
-i, --ignore-case: Ignore la casse du motif pour la correspondance.
-r: recherche récursive dans le dossier (=rgrep).
Exemple:
# grep eth[01] /etc/*
Les expressions régulières
La commande « sed »
Permet la modification d’un fichier.
Syntaxe:
# sed [options] -f script-file [input-file]
# sed [options] script-text [input-file]
Exemple:
# sed ‘s/2008/2009/‘ cal-2008.txt > cal-2009.txt
remplace 2008 par 2009 (la 1ère occurrence sur chaque ligne)
# sed ‘s/2008/2009/g‘ cal-2008.txt > cal-2009.txt
remplace 2008 par 2009 (toutes les occurrences sur chaque ligne)
Les expressions régulières
Fin