Introduction à Linux et ses commandes
Introduction à Linux et ses commandes
Manipulation
1) définir un nouveau mot de passe
2)Essayer deux possibilités pour quitter une session
3)Trouver avec man d'autres options de la commande who
4)Donner le nom du jour de votre date de naissance
5) Est il possible la date système
6) Quels sont les répertoires placés directement dans la racine
7)Essayer de remonter à partir de la racine
8)En quoi le répertoire /dev se distingue
9) Afficher les fichiers cachés en couleur ls -a -color
10)Lister le contenu de répertoire /etc
11)Quels sont les utilisateurs en cours du système?
12)Fermer ce terminal.
13) afficher uniquement le nombre de bytes puis le nombre des mots et puis le nombre de lignes d'un fichier
14) Que renvoie la commande: wich ls
commande:
info@debian:~$ sed -f fich_commandes /etc/passwd
resultat :
------------------------------------------------------------------------------------
LOGIN USER
------------------------------------------------------------------------------------
root Operator
info genieInfo
S5 Section 5
Les autres commandes: q, = et w
q: quitte
=: écrit les numéro de ligne
w fichier:écrit dans un fichier
exemple :
fichier d'entrée :
Un,
deux.
Trois,
quatre.
commande :
info@debian:~$ sed -e "q" fichier
résultat à l'écran :
Un,
commande :
info@debian:~$ sed -e "/\./=/" -e "/[A-Z]/w capitale" fichier
résultat à l'écran :
Un,
2
deux.
Trois,
4
quatre.
résultat dans le fichier capitale :
Un,
Trois,
38)awk
Cette commande permet d'appliquer un certain nombre d'actions sur un fichier. La syntaxe est inspirée du C
syntaxe
awk [-Fs] [-v variable] [-f fichier de commandes] 'program' fichier
-F Spécifie les séparateurs de champs
-v Définie une variable utilisée à l'intérieur du programme.
-f Les commandes sont lu à partir d'un fichier.
principe de fonctionnement
Le programme awk est une suite d'action de la forme : motif { action } , le motif permet de déterminer sur
quels enregistrements est appliquée l'action.
Un enregistrement est :
une chaine de caractères séparée par un retour chariot, en général une ligne.
Un champs est :
une chaine de caractères séparées par un espace (ou par le caractère specifié par l'option -F), en générale un
mot. On accède à chaque champs de l'enregistrement courant par la variable $1, $2, ... $NF. $0 correspond
à l'enregistrement complet. La variable NF contient le nombre de champs de l'enregistrement courant, la
variable $NF correspond donc au dernier champs.
Exemples
info@debian:~$ awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd imprime chaque ligne du fichier /etc/passwd
après avoir effacé le deuxième champs
info@debian:~$ awk 'END {print NR}' fichier imprime le nombre total de lignes du fichiers
info@debian:~$ awk '{print $NF}' fichier imprime le dernier champs de chaque ligne
info@debian:~$ who | awk '{print $1,$5}' imprime le login et le temps de connexion.
info@debian:~$ awk 'length($0)>75 {print}' fichier imprime les lignes de plus de 75 caractères. (print
équivaurt à print $0)
info@debian:~$ cat >> myfile (contenant: Ceci est un test Ceci un deuxième test Ceci un troisième
test Ceci un quatrième test
info@debian:~$ awk '{print $1}' myfile ;
info@debian:~$ awk -F: '{print $1}' /etc/passwd le séparateur n'est un espace mais : (spécifié par -F":")
info@debian:~$ awk '{ print $1 " moyenne " ($2 +$3)/2 }' myfile
le fichier myfile
B1 18 5
B2 6 11
B3 84
B4 16 8
B5 16 18
39)locate
cette commande permet de localiser un fichier sur le disque dur. ex: info@debian:~$ locate monfichier.txt.
La commande locate est rapide, car elle retrouve le fichier en consultant une base de données. Elle ne
parcourt pas directement le disque dur à la recherche du fichier en question. L'inconvénient de ce procédé
est que si le fichier est tout récent, il risque de ne pas encore être indexé, et locate ne peut le trouver. On
peut forcer la mise à jour de la base de données avec la commande sudo updatedb.
On peut aussi utiliser la commande find
40)find
Les méta caractères sont des caractères génériques permettant de désigner un
ensemble d’objets et s’appliquent aux arguments des commandes qui désignent des noms de fichiers.
*: toutes chaînes de caractères, y compris la chaîne vide
ex : a*b tous les noms de fichiers commençant par a et finissant par b
?: caractère quelconque
ex : a?b tous les noms de fichier commençant par a, suivi d’un caractère et finissant par b
[. . .]: un caractère quelconque ∈ à la liste donnée entre crochets. Le - permet de représenter un intervalle.
ex : a[a-z0-9A-Z]b désigne tous les noms de fichiers commençant par a suivi d’un caractère
alphanumérique et finissant par b
[!. . .] une liste de caractères à exclure
ex : a[!a-z]b tous les noms de fichiers commençant par a suivi d’un caractère autre qu’un caractère
alphabétique en minuscule et finissant par b
Les expressions régulières sont aussi des suites de caractères permettant de faire des sélections.
Les différentes expressions régulières sont :
^ début de ligne
. un caractère quelconque
$ fin de ligne
x* zéro ou plus d'occurrences du caractère x
x+ une ou plus occurrences du caractère x
x? une occurrence unique du caractère x
[...] plage de caractères permis
[^...] plage de caractères interdits
\ {n\} pour définir le nombre de répétition n du caractère placé devant
Exemple l'expression [a-z][a-z] * cherche les lignes contenant au minimum un caractère en minuscule. [a-z]
caractère permis, [a-z]* recherche d'occurrence des lettres permises.
L'expression ^[0-9]\ {4\}$ a pour signification, du début à la fin du fichier $, recherche les nombres[0-9] de
4 chiffres \ {4\}.
La commande find permet de retrouver des fichiers à partir de critères de recherche. La syntaxe est:
find <répertoire de recherche> <critères de recherche>
Les critères de recherche sont les suivants :
-name recherche sur le nom du fichier,
-perm recherche sur les droits d'accès du fichier,
-links recherche sur le nombre de liens du fichier,
-user recherche sur le propriétaire du fichier,
-group recherche sur le groupe auquel appartient le fichier,
-type recherche sur le type (d=répertoire, c=caractère, f=fichier normal),
-size recherche sur la taille du fichier en nombre de blocs (1 bloc=512octets),
-atime recherche par date de dernier accès en lecture du fichier,
-mtime recherche par date de dernière modification du fichier,
-ctime recherche par date de création du fichier.
On peut combiner les critères avec des opérateurs logiques :
critère1 critère2 ou critère1 -a critère2 correspond au et logique,
!critère non logique,
\ (critère1 -o critère2\) ou logique,
La commande find doit être utilisé avec l'option -print. Sans l'utilisation de cette option, même en cas de
réussite dans la recherche, find n'affiche rien à la sortie standard (l'écran, plus précisément le shell).
La commande find est récursive, c'est à dire où que vous tapiez, il va aller scruter dans les répertoires, et les
sous répertoires qu'il contient, et ainsi de suite.
Pour chercher un fichier dont le nom contient la chaîne de caractères file1 à partir du répertoire /usr:
info@debian:~$ find /usr -name file1 -print
En cas de réussite, si le(s) fichier(s) existe(nt), vous aurez comme sortie :
file1
En cas d'échec, vous n'avez rien.
Pour rechercher tous les fichiers se terminant par .c dans le répertoire /usr :
info@debian:~$ find /usr -name " *.c " -print
on obtient toute la liste des fichiers se terminant par .c sous les répertoires contenus dans /usr (et dans /usr
lui même).
Pour connaître les derniers fichiers modifiés dans les 3 derniers jours dans toute l'arborescence (/):
info@debian:~$ find / -mtime 3 -print
Pour connaître dans toute l'arborescence, les fichiers dont la taille dépasse 1Mo (2000 blocs de 512Ko):
info@debian:~$ find / -size 2000 -print
Vous pouvez chercher dans toute l'arborescence, les fichiers ordinaires appartenant à olivier, dont la
permission est fixée à 755, on obtient :
info@debian:~$ find / -type f -user info -perm 755 -print
La commande find peut générer beaucoup de messages d'erreur (du genre permission denied. Pour éviter
ceci, on peut rediriger les messages d'erreur dans un fichier poubelle (comme /dev/null), les messages
d'erreur sont alors perdus (rien n'empêche de les sauvegarder dans un fichier, mais ça n'a aucune utilité avec
la commande find).
info@debian:~$ find . -name bobo -print
Si on veut connaitre les fichiers n'appartenant pas à l'utilisateur info:
info@debian:~$ find . ! -user info -print
! -user info, est la négation de -user info, c'est à dire c'est tous les utilisateurs sauf info.
Recherche des fichiers qui ont pour nom a.out et des fichiers se terminant par .c. On tape :
info@debian:~$ find . \ ( -name a.out -o -name " *.c " \ ) -print
On recherche donc les fichiers dont le nom est a.out ou les fichiers se terminant par *.c, une condition ou
l'autre.
Recherche des fichiers qui obéissent à la fois à la condition a pour nom core et à la condition a une taille
supérieure à 1Mo.
Cpp C
50) On est dans ~/Rapport/docs/ et on veut y déplacer le fichier Rapport.tex? (mv ../Rapport.tex .)
51) Le faire revenir à son premier emplacement? (mv Rapport.tex ..)
52) Comment peut-on déplacer le fichier Rapport.tex stage et changer son nom par "stage"?
53) Expliquer ces commandes
info@debian:~$ ls
file1 file2 Rapport/
info@debian:~$ alias mv
mv='mv -i'
info@debian:~$ mv file1 file2
mv: overwrite file2 (yes/no)? n
info@debian:~$ mv -f file1 file2
info@debian:~$ ls
file2 Rapport/
54) Quelles sont les options de grep qui permettent d'obtenir des lignes de contexte (qui précèdent et/ou suivent la
ligne où figure le mot) ?
(-num : le numéro indique le nombre de lignes de contexte que l'on veut voir figurer avant et après la ligne où figure
le mot recherché. Par exemple, si on veut trois lignes de contexte, avant et après la mot (soit sept lignes au total), on
tape :
grep -3 ...
-A num (after) : le numéro indique le nombre de lignes qui doivent suivre la ligne où figure le mot. Si on en veut
quatre, on tapera :
grep -A 4 ...
-B num (before) : le numéro indique le nombre de lignes qui doivent précéder la ligne où figure le mot. Si on en
veut dix, on tape :
grep -B 10 ...
-C num (context) : équivalent à -num. En fait, les trois lignes suivantes sont strictement équivalentes :
grep -2 ...
grep -C 2 ...
grep -A 2 -B 2 )
55)Comment faire apparaître le numéro de la ligne où figure le mot recherché ?
C'est avec l'option -n (number); le numéro figure tout au début de la ligne, suivi d'un deux-points (:) et du texte. Par
exemple :
info@debian:~$ grep -n violon verlaine.tex
12:des violons de l'automne
Quand on fait une recherche dans plusieurs fichiers, le nom du fichier figure d'abord, puis le numéro de la ligne, et
enfin le texte, le tout séparé par des deux-points. Par exemple :
59)Comment faire pour faire apparaître non pas les lignes où figurent le mot, mais les noms des fichiers ?
C'est l'option -l qui permet de faire cela : afficher les noms des fichiers où figure au moins une fois la chaîne de
caractères recherchée.
61)Comment faire apparaître les noms des fichiers ne contenant pas le mot recherché ?
On utilise l'option -L, qui affiche les noms de fichiers où ne figurent pas la chaîne de caractères recherchée. Il ne faut
bien sûr pas confondre les options -l et -L...
62)Comment faire pour que grep ne recherche que les lignes où figure le mot tel quel, et non pas ses variantes ?
C'est l'option -w (comme word) qui sert à cela : un mot complet est délimité comme suit :
Début : la chaîne de caractères est placée au début d'une ligne, ou précédée d'un blanc, d'une tabulation ou d'une
ponctuation.
Fin : la chaîne de caractère est placée en fin de ligne, ou suivie d'un blanc, d'une tabulation ou d'une ponctuation.
Si donc on veut chercher «travail» et aucune forme dérivée de ce mot, on écrit :
Syntaxe de grep : La structure \(mot1\|mot2\) permet de chercher plusieurs mots. Ici, on tape la ligne suivante :
grep '\(ciel\|terre\)' fichier
On met des apostrophes de part et d'autre de l'expression pour la protéger contre le shell, c'est-à-dire pour que le
shell ne cherche pas à interpréter l'expression.
Option «-f fichier» : dans un fichier quelconque, que nous appellerons liste, on indique les mots que l'on recherche :
«ciel» et «terre». Chaque ligne correspond à un mot recherché. Il ne faut donc pas mettre de ligne comme
terre ciel
car le programme chercherait la chaîne de caractères «terre ciel», qui est assez improbable en français. Il ne faut pas
non plus laisser de ligne blanche : le programme afficherait l'ensemble du texte.
64)Quelle que soit la solution retenue, on veut ensuite afficher le numéro des lignes (option -n); d'autre part, pour
que la recherche soit exhaustive, il vaut mieux que grep ne fasse pas de différence entre les majuscules et les
minuscules, avec l'option -i (ignore case, ignorer la casse des caractères). Il faut aussi décider si on cherche les mots
tels quels, sans leurs variantes (comme «terre» au pluriel), ou si on accepte ces variantes. Si on ne veut que le mot
sans ses dérivés, on utilise l'option -w.
Pour désigner les deux fichiers où faire la recherche, on peut les écrire littéralement :
zola1.txt zola2.txt
ou, mieux, utiliser les joker du shell :
zola[12].txt
[12] signifie «le caractère 1 ou le caractère 2».
(...)
Le résultat est un peu différent quand on n'utilise pas l'option -w.
grep recherche des chaînes de caractères, qui peuvent être un mot complet («terre»), une suite de lettres («tre»), ou
une expression régulière. Les expressions régulières sont des formules qui représentent des chaînes de caractères. On
cherche alors non pas un mot précis, mais des suites de caractères correspondant aux critères demandés. Elles sont
d'un usage fréquent avec grep bien sûr, mais aussi avec des commandes comme less, ou encore au sein d'un éditeur.
«Expressions régulières» (Regular expressions en anglais) se traduisent en bon français par «expressions
rationnelles», mais l'usage est de dire «régulières».
Ces exercices n'entendent pas remplacer un cours sur les expressions régulières, ni faire le tour de leurs possibilités.
Utiliser l'option -i qui fait ignorer la différence entre les majuscules et le minuscules.
Dire que l'on cherche un «a» ou un «A». C'est à cela que servent les crochets : [abc] signifie «a ou b ou c». Ici, ce
sera [aA].
Enfin, il faut protéger les signes contre le shell, pour qu'il ne les interprète pas; on met donc l'expression entre
apostrophes. Remarque : la protection des expressions régulières contre le shell est une question complexe....
grep 'a[^bct]'
Il y a une seconde difficulté, qui vient de ce que certains caractères sont spéciaux avec grep. Vous vous doutez que
le chapeau est spécial quand il est placé au début de l'expression, et que le dollar l'est quand il est placé en fin
d'expression. Dans notre cas :
Pour que grep interprète littéralement ces caractères, et ne les considère plus comme spéciaux, il faut les faire
précéder d'un backslash (\). Si par exemple vous cherchez toutes les lignes qui se terminent par un point, il faut taper
:
Il y a une petite subtilité avec l'emploi de classes du second type; elles désignent un groupe de caractères, et il faut
mettre une seconde paire de crochets pour dire «n'importe quel caractère de cette classe prédéfinie». On tape donc au
choix :
On va se servir du pipe (|) qui signifie «ou». Avec grep, il faut backslasher le pipe, avec egrep ce n'est pas
nécessaire. On écrit donc (avec grep) :
Flux de redirection
L redirection d'entrées/sorties est une caractéristique de shell. Les commandes vont soit lire des données (entrée)
soit les transmettre(sortie)
42) >
renvoie le résultat dans un fichier (si celui-ci existe, il sera écrasé).
ex: info@debian:~$ ls > file1 la sortie de ls est dirigé vers le fichier file1; désormais file1 contient le
résultat de la commande ls
43)>>
renvoie le résultat dans un fichier (si celui-ci existe déjà, ajoute le résultat à la fin) il existe deux sorties : 1
la sortie normale (écran), 2 la sortie d'erreurs
ex: info@debian:~$ who >> file2
info@debian:~$ date >> file2
l'affichage de la date est mis à la fin de file2
43) 2>
crée un fichier pour les erreurs.
info@debian:~$ rmdir dossier1
supposons que dossier1 n'est pas vide un message d'erreur sera affiché
info@debian:~$ rmdir 2> file1
le fichier file1 contiendra le message d'erreur, si file1 existe , il sera écraser
44) 2>>
crée un fichier pour les erreurs. (si le fichier existe déjà, la commande ajoute le résultat à la fin)
45) 2>&1
fusionner les sorties dans un seul et même fichier , rediriger la sortie d'erreur (2: stderr) au même
emplacement redirigé par la sortie standard (1: stdout)
supposons que le fichier test.txt n'existe pas
info@debian:~$ cat test.txt > err.txt 2>&1
va envoyer les erreurs dans le même fichier et de la même façon que la sortie standard
46)<
prend un fichier en entrée
47)<<
prend en entrée le clavier au fur et à mesure. Ceci nous permet de passer des données directement à
une commande sans avoir besoin de créer de fichier. Mettons que nous voulions trier des prénoms par
ordre alphabétique. Nous allons pour cela invoquer la commande sort, mais au lieu de créer un fichier
texte puis de le faire réorganiser par sort, nous allons directement lui soumettre les noms en les entrant
au clavier
info@debian:~$ sort nom_trie
khalid
ahmed
mohamed
info@debian:~$ nom_trie
ahmed
khalid
mohamed
Manipulation
1) Essayer d'utiliser 2>>&1
2) Compter les fichiers d'un répertoire (ls et wc)
3) Enregistrer dans un fichier les noms, terminaux et heures de connexion de tous les utilisateurs connectés
4)Rajouter la date du jour et le résultat de la commande whoami
5) Faites afficher les fichiers du répertoire /bin page par page
6) si on tape uniquement cat ?
7)quel est le résultat de : cat xyz > xyz
8) Que se passe t-il si on utilise >> au lieu de >
9) Comment peut-on utiliser cat pour placer un texte dans un fichier?
10) La séquence de commandes précédentes est-elle correcte sur le plan de la syntaxe? Quel est son effet?
11)Recherchez dans un fichier /etc/paswd une ligne contenant votre nom
12) Ecrire le message "Bonjour" dans un fichier appelé "test" en redirigeant la sortie de la commande echo.
13)Ecrire le message " au revoir " dans le même fichier " test " en redirigeant la sortie de la commande echo et sans
écraser le contenu de " test " vérifier avec cat
14)Exécuter la commande find /etc -name hosts, y a t-il des messages d'erreurs qui sont affichés? rediriger les
messages d'erreur de la commande précédente vers le fichier "err.txt "
15)Rediriger maintenant la sortie standard et la sortie d'erreur de la commande find /etc -name hosts vers deux
fichiers différents (std.out et std.err)
16) Exécuter les deux commandes suivantes:
info@debian:~$ find /etc -name hosts >find1.out 2>&1
info@debian:~$ find /etc -name hosts 2>find2.out >&2
(2>&1 signifie rediriger la sortie d'erreur vers le même emplacement que la sortie standard)
comparer le contenu des deux fichiers find1.out et find2.out,quelles sont vos remarques
17)Exécuter la commande tr 'a-z' 'A-Z' ,une fois exécutée la commande tr attend du texte à partir de l'entrée standard
saisissez 3 lignes de textes à faire passer comme argument à tr; pour arrêter la saisie pressez ctrl+d
18) Rediriger l'entrée de tr 'a-z' 'A-Z' depuis le fichier " test " de la question 13.
19)En utilisant la commande tr 'a-z' 'A-Z' convertir le contenu de « find1.out » en majuscule puis le placer dans un
fichier « FIND1.out » ,vérifier avec cat.
20) Rediriger la sortie de la commande ls -l /etc vers un fichier file1 avec la commande more.
21)le fichier /etc/passwd contient les informations sur tous les comptes utilisateurs du système
afficher le contenu de /etc/passwd avec more.
/etc/passwd contient plusieurs champs,le premier champ représente le nom de l'utilisateur, quel est le délimiteur qui
sépare ces champs
22) En utilisant la commande cut extraire depuis /etc/passwd les noms des utilisateurs
23) Trier la sortie de la commande cut précédente par ordre alphabétique puis afficher le résultat avec more
24) Numéroter les lignes de /etc/passwd avec nl
25)En utilisant la commande nl précédente et les commande head et tail afficher les lignes de /etc/passwd comprises
entre la ligne 7 et la ligne 12
26) (a) Exécuter ls dans un terminal. Taper ensuite ls > sorties, puis lister le contenu du répertoire courant. Un
nouveau fichier appelé sorties a été créé. Lire son contenu.
(b) Exécuter maintenant la commande ls -l > sorties. Consulter à nouveau le contenu de sorties.
(c) Concaténer le résultat de la commande ls >> sorties. à la fin du fichier sorties.
(d) Comparer les résultats de wc < sorties et wc sorties. Expliquer la différence.
(e) Ajouter le résultat de wc < sorties dans le fichier sortie.
(f) Exécuter la commande wc test1. Comme le fichier test1 n’existe pas, wc vous renvoie une erreur.
(g) Exécuter maintenant wc test1 > sortie. Regarder le contenu de sortie.
(h) Faire en sorte que le message d’erreur soit écrit dans un fichier nommé erreur
i)Dans le terminal, taper la commande cat puis saisir le texte suivant :
"Aujourd’hui, on étudie les redirections." (valider avec la touche enter)
j)La saisie est affichée deux fois. Expliquer.
k) Comment faire pour terminer cette commande?
l) Taper la commande suivante : cat > test et saisir le texte suivant :
"Un seul chevron, et le texte précédent disparaît. (enter) Mais avec deux, on écrit à la fin du fichier."
m) Le texte ne s’affiche plus qu’une fois. Pourquoi ?
n) Utiliser la commande cat pour copier le fichier sorties dans le fichier test.
o) Utiliser la commande cat pour concaténer les fichiers sorties et erreur dans le fichier exercice.
p) Ajouter à la fin du fichier sortie, le contenu du fichier erreur
q) En une commande, ajouter à la fin de sortie la phrase suivante : "Mais ces redirections, sont-elles assistées ?"
r) On veut maintenant ajouter au début du fichier sortie le texte suivant : “Les redirections, ça va dans tous les sens.”
s) A l’aide de cat et d’une redirection vers le fichier tmp1, stocker ce qui aura été saisi sur l’entrée standard.
t) Stocker dans tmp2 la concaténation de tmp1 et sortie.
u) Renommer le fichier tmp2 en sortie, puis détruire le fichier tmp1.
48)&
met & à la fin d'une commande permet d'en lancer une autre sans attendre la fin de la première
ex. : info@debian:~$ cp video.avi /home/info/copie-video.avi &.
Elle permet aussi de passer la commande en arrière-plan et redonne immédiatement accès au shell.
49)nohup
lance le programme et le maintient même une fois la console fermée. Les sorties 1 et 2 sont redirigées vers
nohup.out.
ex: info@debian:~$ nohup cp video.avi copie_video.avi
nohup: ajout à la sortie de `nohup.out
la commande continue de fonctionner sauf si on utilise la commande kill
50)Ctrl+z
met en pause le processus en cours
51) bg
passe le processus qui est en pause en arrière-plan.
52)fg
reprend un processus en premier plan (si plusieurs tournent en même temps, fg %n°).
53)at
programme une tâche à exécuter à une heure ultérieure ex. : info@debian:~$ at 18:22
info@debian:~$ at now + 5hours puis ctlr + d.
54) atq
cette commande permet de faire une pause entre l'exécution de deux commandes. Exemple : touch gt.txt
&& sleep 10 && rm gt.txt. La pause est exprimée en secondes par défaut, il est cependant possible de
changer cela en faisant suivre le nombre d'une unité : m, h, ou d pour respectivement les minutes, heures et
jours.
57)crontab
crontab est en fait une commande qui permet de lire et de modifier un fichier appelé la " crontab ".
e
modifie la crontab.
l
affiche la crontab actuelle.
r
supprime votre crontab. Attention, la suppression est immédiate et sans confirmation .
58)screen
multiplexeur de terminaux. Sous ce terme un peu barbare se cache en fait une sorte de terminal virtuel.
Vous êtes au boulot, vous ouvrez un terminal et vous le nommez, vous lancez une tâche (un script qui va
ré-encoder plusieurs GB de vidéos par ex., ce qui prend du temps), et vous vous déconnectez, vous arrivez
chez vous, vous rouvrez votre terminal et retrouvez votre tâche comme si tout était resté ouvert en face de
vous.
Manipulation
1) Quelle est la syntaxe utilisée par Linux pour exécuter un processus en arrière-plan?
2) Quel est le terme qui décrit un processus lancé dans un terminal shell?
3) Une commande est exécutée en arrière-plan, mais on veut que le processus soit exécuté au premier plan:
info@debian:~$ sleep 100 &
[1] 3180
info@debian:~$ jobs
[1]+ running sleep 100 &
4) Le processus est maintenant exécuté au premier plan. quelle est l'interruption utilisée pour l'arrêter (et non le
tuer)?
5) Le processus est maintenant interrompu. Comment reprendriez-vous l'exécution en arrière-plan?
6) Quelles touches utilisées pour envoyer un SIGINT à un processus au premier plan?
7) On exécute les commandes suivants dans un terminal:
info@debian:~$ ./script &
[1] 3450
L'exécution du processus prend beaucoup de temps, par conséquent on quitte le terminal actuel. Qu'est-il arrivé?
8) Quelles solutions pouvez-vous donner pour éviter ce qui vient de se passer?
(on utilise info@debian:~$ nohup ./script &)
9) Essayez la commande sleep 5. Que fait cette commande?
10)Exécutez la commande en arrière-plan en utilisant &.
11)Exécutez sleep 15 au premier plan, suspendez-le avec Ctrl-z puis placez-le à l'arrière-plan avec bg. Tapez jobs.
Tapez ps. Ramenez le travail au premier plan avec fg.
12)Exécutez sleep 15 en arrière-plan avec &, puis utilisez kill pour terminer le processus par son numéro de job.
Répéter, sauf que cette fois tuer le processus en spécifiant son PID.
13)Exécutez sleep 15 en arrière-plan à l'aide de &, puis utilisez kill pour suspendre le processus. Utilisez bg pour
continuer à exécuter le processus.
14)Démarrez un certain nombre de processus sleep 60 en arrière-plan et terminez-les tous en même temps à l'aide de
la commande pkill.
15)Utilisez ps, w et top pour afficher tous les processus en cours d'exécution.
16)Utilisez ps -aeH pour afficher la hiérarchie des processus. Recherchez le processus init. Voyez si vous pouvez
identifier des importants démons système. Pouvez-vous également identifier votre shell et ses sous-processus?
17)Combinez ps -fae avec grep pour afficher tous les processus que vous exécutez, à l'exception des commandes ps
-fae et grep.
18)Démarrez un processus sleep 300 exécuté en arrière-plan. Déconnectez le serveur et reconnectez-vous.
19)Répertoriez tous les processus que vous exécutez. Qu'est-il arrivé à votre processus sleep? Répétez maintenant,
sauf que cette fois, commencez par exécuter nohup sleep 300.
59)sudo
exécute une commande en tant que root.
60)sudo su
passe root (comme su)
61)chmod
change les droits sur un fichier un ou dossier (option -R pour la récursivité dans tous les fichiers et sous-
dossiers du dossier sur lequel on l'applique).
si on exécute: info@debian:~$ ls -l le système affiche les fichiers et dossiers avec le doit d'accés
La commande reconnaît :
user (u), l'usager propriétaire (le créateur du fichier ou du répertoire);
group (g), le groupe de l'usager propriétaire (groupe propriétaire);
other (o), les autres, sauf l'usager propriétaire et les membres de son groupe;
all (a), l'union des ensembles précédents
La commande permet 3 types d'accès aux fichiers (et répertoires) :
read (r), lecture;
write (w), écriture;
execute (x), exécution.
ex: info@debian:~$ chmod a-wx fichier.c (retire à tous les usagers le droit d'écrire(w)et d'exécuter(x) le
fichier.c;)
ex: info@debian:~$ chmod o+rw test.txt
Ajoute la permission aux usagers "autres (others)" de lire et modifier test.txt
ex: info@debian:~$ chmod u=r final.txt
L'usager propriétaire n'est autorisé qu'à lire le fichier final.txt.
En bref, le symbole " = " sert à fixer le type d'accès d'un ensemble d'usagers alors que les symboles " + " et
" - " servent, respectivement, à ajouter et à retirer un accès.
La syntaxe chiffrée peut être utilisée pour régler d'un trait l'accès de tous les ensembles d'usagers:
Le premier chiffre de la valeur numérique fixe l'accès de l'usager propriétaire, le deuxième fixe l'accès du
groupe propriétaire et le dernier fixe l'accès des " autres ". Chaque chiffre est la somme d'un ou plusieurs
chiffres correspondant à des accès différents :
4 : lecture
2 : écriture
1 : exécution
0 : aucun
ex: info@debian:~$ chmod 764 fichier.txt
(7=4+2+1 donc l'utilisateur a le droit de lecture, écriture et exécution, 6=4+2 donc le groupe a le droit de
lecture et d'écriture, 4=4 donc les autres ont le doit de lecture)
est équivalente à
info@debian:~$ chmod ug=rw fichier.txt;chmod o=r fichier.txt
une autre façon de voir les choses
u g o
r w x r w x r w x
1 1 1 1 1 0 1 0 0
111 représente 7 (décimal) 110 représente 6 100 représente 4
62)adduser
ajoute un utilisateur. (vérifier aussi useradd)
ex: info@debian:~$ sudo adduser info99
63)passwd
change le mot de passe d'un user | ex. : info@debian:~$ passwd info
Pour forcer l'utilisateur à changer de mot de passe lors de sa première connexion
ex. : info@debian:~$ sudo passwd -e info99
64)deluser
supprime un user (option --remove-home pour supprimer tous ses fichiers; verifier aussi:
deluser --remove-all-files nom-utilisateur).
info@debian:~$ sudo deluser info99
Malgré la suppression du compte, le répertoire personnel est conservé. L'ensemble des données qui y sont
stockées est donc conservé. Par conséquent n'importe quel nouvel utilisateur créé ou ajouté ultérieurement
avec le même UID/GID que le précédent propriétaire aura alors accès à ce répertoire et aux fichiers qui y
sont stockés. La suppression du répertoire personnel doit donc être effectuée manuellement. Si le répertoire
est /home/info99, la commande suivante fera le travail :
sudo rm -R /home/info99
65)addgroup
crée un groupe. (vérifier aussi groupadd)
ex: info@debian:~$ sudo addgroup ami
66)usermod
modifie un utilisateur (options : -l pour changer le nom, -g pour lui assigner un groupe, -G pour lui assigner
plusieurs groupes (séparés par des virgules), -a en complément de -g ou -G, ajouter des nouveaux groupes
au lieu de tout redéfinir) ex., ajouter le groupe OS à l'utilisateur info, sans supprimer les groupes auxquels il
appartenait avant : info@debian:~$ usermod -aG OS info.
67)delgroup
supprime un groupe. info@debian:~$ delgroup ami
68)groups
vérifie dans quels groupes est un utilisateur ex:info@debian:~$ groups info.
69)chown
change le propriétaire d'un fichier/dossier (ne peut s'utiliser qu'en root).
ex: chown info99 test.txt pour changer le groupe1 en groupe2 ex: chown info99:groupe2 test.txt
Le paramètre -h modifie uniquement les liens symboliques et pas leur cible.
Le paramètre -R modifie tous ses sous-répertoires et ses sous-fichiers d'une manière récursive.
70)chgrp
change le groupe propriétaire d'un fichier (équivalent à chown user:group).
Donner le groupe "audio" au fichier "fichier"
ex: $ chgrp audio fichier
Changer récursivement l'appartenance à un groupe. Le répertoire et les fichiers contenus dans ce répertoire
changeront de groupe.
ex: $ chgrp -R audio /home/info/repertoire
71)fichier passwd
Bien qu'il ne s'agisse pas, techniquement, d'une commande, il est important de connaître la structure du fichier
/etc/passwd. Lequel regroupe l'ensemble des utilisateurs du système et de leurs informations.
1 Nom de l'utilisateur ;
2 Mot de passe (x signifie que le mdp est chiffré dans le fichier /etc/shadow ;
3 L'id de l'utilisateur (0 est pour root et les id de 1 à 99 sont réservés pour les comptes prédéfinis) ;
4 lLid du groupe tel que défini dans /etc/group ;
5 Champ de commentaire ;
6 Répertoire « home » de l'utilisateur ;
7 Le shell par défaut (/bin/false et /usr/sbin/nologin signifient que l'utilisateur n'a pas de shell).
73)stat
La commande stat permet d'obtenir une information plus poussée sur un fichier.
stat /etc/rc.d/rc.sysinit
stat /etc/fstab
Le fichier de démarrage /etc/rc.d/rc.sysinit possède les droits rwx r-x r-x Tous les utilisateurs ont donc le droit de lire
et d'exécuter ce fichier (ce qui est à éviter); seul root peut le modifier
La table de montage /etc/fstab : rw-r--r-- peut être lue par tous, modifiée uniquement par root
74) Droits supplémentaires
Parallèlement aux droits standards, des droits étendus existent et répondent à des besoins spécifiques :
a) Pour un répertoire, restreindre la suppression au seul propriétaire : droit sticky bit.
b) Pour un fichier binaire, exécution sous l’identité du propriétaire : droit SUID (setuid) ou sous l’identité du
groupe : droit SGID (setgid).
Ce dernier point permet d’exécuter un programme (normalement un binaire et non un fichier de commandes) à
partir d’un utilisateur quelconque nécessitant les droits d’un autre.
Pour affecter ou retirer ces droits, on utilise la commande chmod avec cette fois-ci sur quatre bits, le premier
indiquant la nature du droit ou par une lettre spécifique en notation symbolique:
Droit En octal En symbolique
Sticky bit 1000 o+t
SUID 4000 u+s
SGID 2000 g+s
Le champ d’application du droit par la notation symbolique se fait clairement : u pour le SUID et g pour le SGID.
Dans le cas du sticky bit, l’application porte sur le "reste du monde" soit o, partant du principe qu’un fichier sous
Ubuntu appartient à un groupe du même nom que le propriétaire.
Exemples de commandes :
chmod o+t /home/info/programmes/
chmod 4755 liste.sh
ls -l /usr/bin/chage
La première commande positionne le droit sticky bit pour le répertoire programmes situé dans le répertoire de
l’utilisateur info. La deuxième commande met les droits en exécution pour le fichier comprenant des commandes
shell et positionne en même temps le droit SUID. Enfin la dernière commande montre que le droit SGID est mis
pour la commande chage (modifie les informations de validité d’un mot de passe) pour le groupe shadow (note : le
fichier /etc/shadow a pour propriétaire le root et comme groupe shadow).
Manipulation
1)Créez un fichier "Droit". Placez sur les valeurs suivantes les droits d'accès de votre fichier "Droit" :
a) rw-rw-r-- b)rw----- c) rwxr-x--x d) r-x-w---x e)--x--xr--
puis, utilisez la forme octale
2)Créez un nouveau répertoire "RepCat", dans ce répertoire créez un fichier "FileDat" modifiez les droits d'accès
avec : a) rwx b) rw- c)r-x d)--x e)-wx pour chaque lancer la commande ls et un editeur de texte
3)Un fichier peut-il appartenir à un groupe autre que celui dont fait partie le propriétaire? Est-il possible que le
numéro de groupe soit différent du numéro de groupe du proprietaire?
4)Rendre tous les nouveaux fichiers auront le droit rw-r----- et tous les répertoires rwxr-x--
5) Quelle est la différence entre :
cp fichier1 fichier2 et cat < fichier1 > fichier2
N.B: fichier2 n'existe pas
6) a)Est-il possible de faire une copie du fichier /etc/passwd? Est-il possible de supprimer ou de modifier le fichier
/etc/passwd?
b)Répeter ces tentatives en tant qu'utilisateur root.
c)A l’aide de la commande id, vérifier votre identité et le(s) groupe(s) au(x)quel(s) vous appartenez.
Créer un fichier texte (de contenu quelconque), qui soit lisible par tout le monde, mais non modifiable (même pas
par vous).
d)Créer un répertoire nommé "Secret", dont le contenu est visible uniquement par vous.
Les fichiers placés dans ce répertoire sont-ils lisibles par d’autres membres de votre groupe?
e)Créer un répertoire nommé "Connaisseurs" tel que les autres utilisateurs ne puissent pas lister son contenu mais
puissent lire les fichiers qui y sont placés.
On obtiendra:
ls Connaisseurs
ls : Connaisseurs: Permission denied
cat Connaisseurs/fichier1
<...le contenu du fichier fichier1 (s’il existe)...>
7) Vérifiez l’endroit où vous êtes, votre identité de compte avec notamment l’UID et le GID par la commande id.
Quelles sont les permissions en octal de votre répertoire personnel ? et celles du répertoire parent ?
À quel groupe appartenez-vous ?
Créez un fichier par la commande touch liste.sh.
À qui appartient-il ? À quel groupe ?
Quels sont les droits de ce fichier en octal ?
Ajoutez le droit en écriture pour le groupe par la méthode octale.
Enlevez le droit en écriture pour le groupe par la méthode symbolique.
Le fichier liste.sh contiendra des commandes shell. Aussi, donnez-lui les permissions que l’on donne
généralement à un programme, c’est-à-dire 755 et vérifiez-le.
8) Votre compte d'utilisateur est-il défini dans le fichier /etc/passwd? Pourquoi? Il y a-t-il d'autres alternatives?
Quel est le répertoire de connexion de l’utilisateur root?
Quel est le shell de l’utilisateur root?
Quelle est la particularité de l’utilisateur nobody? Et de l’utilisateur shutdown?
Quels sont les utilisateurs définis dans /etc/passwd qui font partie du même groupe que l’administrateur?
9) Un administrateur désire s’assurer chaque matin que tous les fichiers placés sous $REPERTOIRE sont lisibles par
tout le monde, mais non modifiables excepté par leur propriétaire. Quel doit être le mode de ces fichiers et
répertoires?
10) Créer avec un dossier appartenant au groupe “omega”.
Le dossier est partagé par deux utilisateurs “alfa” et “beta” appartenant au groupe secondaire “omega”.
Ce dossier partagé est leur dossier d’accueil et personnel.
Ces utilisateurs peuvent lire le contenu du dossier et ajouter ou modifier des fichiers. Fixer le “sticky bit” et le
“SGID” sur ce dossier en démontrant leur utilité.
En options :
Retirer à ces utilisateurs les droits d’accès à une console graphique.
Désactiver le compte de “beta” (plusieurs solutions)
11)
1.Comparer les permissions de /etc/passwd et /etc/shadow.Pourquoi a t-on nommé ainsi ce dernier fichier ? Info (un
utilisateur normal )peut-il le lire ? et voir sa présence ?
2.Par précaution, en faire une copie sous le nom shadow.bak dans /home/temp ! vérifier les droits de
/home/temp/shadow.bak
3.Pensez-vous tout de même pouvoir supprimer le fichier précédent ? Concluez !
4.root fait maintenant une copie de shadow dans /home/Info, sous le nom shadow.bak et vous accorde la propriété de
la copie .a) Comment fait-il ? b) vérifier le résultat
5.Vous éditez ce fichier avec un éditeur de texte, vous le modifiez, par exemple en supprimant des lignes, et vous
faites une mise à jour. Ecrivez le mode opératoire. La mise à jour sera t-e1le réalisée.
5.Vous éditez ce fichier avec un éditeur de texte , vous le modifiez, par exemple en supprimant des lignes, et vous
faites une mise à jour. Ecrivez le mode opératoire .La mise à jour sera t-elle réalisée ? pourquoi ?
6.Pensez vous que Info puisse supprimer ce fichier ? Essayez et expliquez !
12)
1.En tant que Info, pouvez vous créer le rép. temporaire /home/temp ? essayez ! pourquoi ?
2.Effectuez cette création comme root (pensez à la commande su ).
3.Accorder les permissions maximales sur /home/temp; vérifiez.
4.inf99 a un droit d'écriture, dans /home/temp essaie de copier les 2 fichiers système /etc/hosts et /etc/passwd dans
/home/temp ? y parviendra t-il ? pourquoi ? que donne [info99$ ] ls -l /home/temp ?
5.info99, essaie maintenant de supprimer ces 2 fichiers de /etc. Réussit-il ?
6.info99 veut que Info devienne propriétaire du fichier copié passwd. Comment s'y prend t-il ? Réussit-il ?
comment auriez vous fait ?
13)
Il s'agit de créer un rép. partagé par tous les membres Info du groupe stagiaire Normalement, ce groupe a déjà été
créé et rempli de comptes Info.
1.Créez dans /home un répertoire appelé rep-stagiaire. Rappelez pourquoi cette tâche relève des prérogatives de root
2.Faites-le appartenir au groupe stagiaire
3.Modifier les permissions sur le rép, pour que tous les membres du groupe stagiaire puissent y écrire et s'y déplacer.
4.En tant que Info, vous créez un fichier et vous le déposez dans /home/rep-stagiaire , mais en attribuant des droits
660
5.Vérifier le bon accès en lecture seulement pour les membres du groupe. Ainsi inf99 qui ne fait pas partie de
groupe groupe stagiaire ne doit pas pouvoir le lire. A vérifier.
6.Un autre utilisateur de votre groupe tente de supprimer ce fichier ou de le renommer
Y parvient-il ? Essayez !Pourtant, vérifiez que ce fichier appartient au groupe est-ce pas inquiétant ? Expliquez
comment cela est possible.
7.Demandez à root de positionner le "sticky bit" sur le répertoire partagé. Vérifiez bien que le problème est réglé et
protège le propriétaire des tentatives de suppression ou de changement de nom de ses fichiers. Prolongement :
vérifier que cette protection s'applique aussi à distance? pourquoi ?
14) Quels sont les droits sur les répertoires personnels (par exemple Info) ?
a.Un utilisateur un compte différent info99 peut-il y pénétrer ou seulement lister ses fichiers ? et l'utilisateur Genie,
le pourrait-il s'il faisait partie du groupe de Info ?
b. Quelles commandes devrait écrire Info pour accorder le droit de visite de son rép. perso seulement à Genie ?
14)
Création de 2 groupes.
Les premier et deuxième utilisateurs sont membres du premier groupe.
Les troisième et quatrième utilisateurs sont membres du second groupe.
Le deuxième utilisateur est aussi membre du second groupe.
Le quatrième utilisateur est aussi membre du premier groupe.
Outre leur répertoire de travail, les utilisateurs ont accès à un répertoire commun /home/groupe1 et/ou
/home/groupe2 suivant leur groupe. Dans ce répertoire, ils peuvent écrire, créer des fichiers mais ne peuvent pas
effacer les fichiers.
Détaillez les étapes de création des groupes, des utilisateurs et des répertoires en indiquant quels fichiers vous
utilisez et quelles commandes vous utilisez sur ces fichiers.
Modifiez les profils des utilisateurs pour qu’au login, le répertoire d’accueil sur lequel il souhaite travailler lui soit
demandé (s’il entre U, il sera sous son répertoire, s’il entre G, il sera sous le répertoire de son groupe).
Parmi ces 3 valeurs: 066, 067, 077, quel umask positionneriez vous? Expliquez pour chaque valeur quelles sont les
conséquences de ce choix.
15) Création d'une instance cloud Linux (https://aws.amazon.com/)
Comprendre le fonctionnement de PATH
-vous qu'il doit s'appeler $
PATH lorsque vous l'utilisez).
o Quels répertoires sont recherchés?
sur votre système de fichiers.
-a pour voir s’il existe un autre programme appelé figlet dans PATH
défaut.
n d'ajouter définitivement / opt / figlet à votre PATH.
Ouvrez un nouveau shell pour vérifier que cela fonctionne toujours
16)
Créez un compte Amazon AWS
Système
75)w
qui est connecté et fait quoi.
76)who
qui est connecté.
77)date
donne l'heure.
78)ntpdate
synchronise l'heure avec un serveur ntp. Il faut préciser le serveur à la commande ntpdate pool.ntp.org. Par
ailleurs, pensez que le port NTP (123 en UDP) doit être ouvert sur votre machine.
79)uptime
temps depuis mise en route + charge (charge moyenne 1 - 5 - 15 mn).
80)free
indique l'allocation de la ram et la mémoire libre restante.
81)vmstat
info ram, swap, cpu.
82)proc/meminfo
le fichier /proc/meminfo contient de nombreuses informations sur la mémoire. Il suffit d'en afficher la
sortie avec cat /proc/meminfo.
83)tload
affiche la charge CPU sous forme de graphique.
84)ps -ef
affiche tous les processus lancés. Alternativement, on peut utiliser la syntaxe BSD : ps aux.
85)ps -ejH
affiche processus en arbre.
86)ps -u
liste les processus lancés par un utilisateur donné ex. : ps -u info.
87)top
l'activité du système en temps réel : load, RAM, SWAP processus… top a l'avantage d'être installé presque
partout.
88)htop
c'est une version améliorée de top, un peu plus graphiques, les infos y sont plus claires et il est possible de
trier/ordonner l'affichage selon certains critères.
89)glances
similaire à top et htop, glances est le tableau de bord de votre machine, car il réunit en un coup d'œil toutes
les métriques importantes : cpu, load, ram, swap, i/o disques, remplissage des disques.
90)atop
on a parlé ci-dessus de top et htop, mais il y a aussi atop qui est très utile lorsqu'on doit faire un
diagnostique un peu plus poussé. plus de détail dans linuxpedia (https://www.linuxpedia.fr/)
91)iotop
dans la lignée des *top, voici iotop qui, comme son nom le laisse entendre, permet d'avoir un aperçu temps
réel de l'I/O disque.
92)swapoff
swapoff -a permet de désactiver le(s) swap(s) tandis que son pendant swapon -a permet d'activer le(s)
swap(s). L'exécution de swapoff -a && swapon -a permet donc de forcer la purge du swap.
93)kill
tue un processus (va demander son PID).
Pour forcer un processus à se terminer, on peut envoyer le signal TERM à l'aide de la commande kill. Ce
signal est passé au processus et le comportement par défaut est de terminer le processus à la réception du
signal. Le signal TERM (SIGTERM) est celui envoyé par défaut par kill, il suffit donc de donner le numéro
de processus (son PID) à fermer après le nom de la commande.
N.B: si on récupérer le pid d'un processus par exemple firefox
ex: $ pidof firefox
3143
pour le fermer correctement
$ kill 3143
Si on arrive pas à fermer un programme qui a par exemple planter, il est interressant d’utiliser kill avec une
option particulière permettant de forcer la fermeture du processus. La commande kill permet d’envoyer des
signaux à des processus, le signal utilisé pour forcer la fermeture d’un programme est SIGKILL. Sachez
également que les signaux sont numérotés, le signal SIGKILL a le numéro 9.
Pour forcer la fermeture d’un processus, utilisez la commande kill avec l’option -s, cette option permet de
spécifier le signal à envoyer.
Dans l’exemple ci-dessous, nous envoyons le signal SIGKILL à un processus ayant le PID 3143. Le
processus va être tuer immédiatement.
ex: $kill -s 9 3143
ou bien $ kill -s SIGKILL 3143
94)kill -9
force à quitter.
95)killall
quitte toutes les occurrences d'un programme.
95 a) kill -l
Donne la liste des signaux
Remarque :
Linux supporte supporte à la fois les signaux POSIX classiques (« signaux standards ») et les signaux
POSIX temps-réel.
Dispositions de signaux Chaque signal a une disposition courante qui détermine comment le processus se
comporte lorsqu'un signal lui est délivré.
Les symboles de la colonne « Action » des tables ci-dessous spécifient la disposition par défaut pour
chaque signal :
96)reboot
redémarre le système d'exploitation.
97)shutdown
programme un redémarrage ou un arrêt.
98)poweroff
bien qu'assez similaire à shutdown dans la mesure où elle permet d'éteindre le système, poweroff permet
aussi selon les arguments qui lui sont passés, de rebooter ou de changer de runlevel.
99)halt
permet « l'arrêt » du système. Je mets arrêt entre guillemets, car le système peut rester sous tension avec
cette commande (selon les options passées et les paramètres par défaut du système).
100)last
historique des connexions.
101)df
remplissage des disques (l'option -h permet d'obtenir les tailles en " human readable ").
102)mount
permet de monter le périphérique d'un système de fichiers sous un répertoire local. Par exemple, pour
monter la partition /dev/sdb1 au point de montage /home : mount /dev/sdb1 /home/.
103)umount
permet de demonter le périphérique d'un système de fichiers : umount /dev/sdb1
Un disque dur est généralement organisé de la façon suivante :
Le Master Boot Record (MBR) est situé dans les premiers secteurs du disque. Le mode de partitionnement MBR est
le mode historique des ordinateurs de type IBM PC-compatible et le plus répandu. Dans ce modèle, une zone de 512
octets appelée le Master Boot Record (MBR) est réservée en début de disque pour contenir l'information relative à
un maximum de 4 partitions.
Le MBR est constitué de 2 parties :
Dans un disque dur, plusieurs types de partitions peuvent coexister. On peut mentionner les partitions principales,
étendues et logiques.
incipales :
• Sont au maximum de 4
• Accepte tout type de système de fichiers.
104)fdisk
permet de gérer les partitions. Affiche la table des partitions si on utilise l'option -l. Pour créer ou modifier
des partitions, on utilisera le mode interactif fdisk /dev/sdx ou /dev/sdx est le chemin vers votre disque.
Ensuite, l'option m listera toutes les commandes possibles.
105)parted
semblable à fdisk, parted supporte les partitionsGPT (GUID Partition Table). L'option -l permet d'afficher
la table des partitions.
106)fsck
cet utilitaire permet de vérifier et de réparer le système de fichiers.
107)dd
l'outil permet d'effectuer des opérations sur les disques, notamment de les effacer, par exemple dd if=/dev/
zero of=/dev/sdc ou de cloner un disque ; ex. : dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync.
108)ddrescue
lorsqu'on fait face à un disque dur endommagé, il vaut mieux tenter de le cloner avec ddrescue qu'avec dd.
Le premier est en effet dédié à cet usage. Il peut effectuer une première passe pour récupérer le maximum
de données en ignorant les secteurs endommagés, puis dans une seconde passe il tentera de récupérer les
données endommagées. La doc d'Archlinux détaille bien le processus de recovery.(
https://wiki.archlinux.org/)
109)hdparm
la commande hdparm permet de récupérer des infos, de tester et de modifier la configuration - bas niveau -
des disques durs. On peut par exemple modifier la taille des buffers avant écriture, activer ou désactiver ou
modifier l'économie d'énergie, modifier la vitesse de mouvement des têtes de lecture
hdparm -I affiche toutes les infos sur le disque (type de disque, taille des caches, vitesse de rotation, options
supportées…).
hdparm -tT /dev/sda fournit la vitesse de lecture pour les contenus avec et sans cache (à répéter plusieurs
fois avec le serveur idle pour des résultats pertinents). Enfin, hdparm s'avère parfois intéressent en cas de
secteurs défectueux.
110)smartctl
smartctl permet d'afficher les informations smart d'un disque. smartctl -a /dev/sda affiche toutes les
informations à propos de sda. La fiche Wikipedia à propos du SMART fournit de bonnes explications sur
les différentes données et leur interprétation.
111)/proc/mdsat/
fichier qui contient les infos sur vos RAID logiciels. On peut afficher ces informations en faisant un cat :
cat / proc/mdstat. Lisez l'article sur les différents niveaux de RAID (simulateur intégré) pour trouver le
RAID qui vous correspond. Consulter ce wiki [en] pour des infos délivrées par mdadm.
112)mdadm
commande qui permet d'obtenir des infos sur les RAID soft et de les paramétrer (sortir un disque de l'array,
en rajouter un, le reconstruire en cas de disque défaillant…). Par exemple mdadm --detail /dev/md0
donnera tous les détails liés à un l'array. Notez que cette commande est assez proche de l'option --examine,
mais laquelle s'applique à un disque constitutif d'un raid --examine /dev/sd* et non au volume raid. Cette
commande étant très riche et servant de nombreuses fonctions
113)lsof
list open files, dresse la liste des fichiers ouverts. Comme le fait remarquer l'ami MagiCrazy dans les
commentaires, cette commande peut s'avérer bien utile pour voir quel fichier bloque le démontage d'un
filesystem par exemple.
114)hostname
affiche le nom d'hôte de la machine conformément à ce qui est écrit dans le fichier /etc/hostname.
115)uname
infos sur le système et le matos.
116)lsb_release
lsb_release -a donne toutes les infos sur la distrib.
117)lshw
donne une liste détaillée de l'hardware système, par exemple la configuration ram, la version du firmware,
la configuration de la carte mère… Avec l'option -short vous obtiendrez une sortie plus digeste. L'option -c
network s'avère aussi bien utile pour connaître le nom d'une interface réseau encore non configurée avec le
standard de nommage systemD [en].
118)lsblk
liste tous les devices de type bloc (disque dur).
119)lspci
liste tous les périphériques PCI.
120)lsusb
liste tous les périphériques USB.
121)/proc/version
fichier qui contient des infos sur le noyau. On peut afficher son contenu avec cat : cat /proc/version.
122)/proc/cupuinfo
fichier qui contient des infos sur le processeur. On peut afficher son contenu avec cat : cat /proc/cupuinfo.
123)sysctl
cette commande permet d'afficher et de configurer les paramètres du noyau . Très pratique avec un coup de
grep, sysctl -a vous donnera tous les paramètres du noyau. L'option -p est également intéressante, car elle
permet de recharger les paramètres soit depuis /etc/sysctl.conf par défaut, soit depuis un fichier passé en
paramètre.
124)dmidecode
lit les infos du bios.
125)dmesg
affiche les messages du buffer du noyau.
126)apt-cache
gestion des paquets. Deux options sont très utiles apt-cache search nom_paquet, permet de chercher un
paquet, et apt-cache show, permet d'obtenir des détails sur un paquet.
127)apt-get
gestion des paquets. Les commandes que l'on utilisera le plus sont update (MAJ des sources de paquets
dispos), upgrade (mise à jour du système et autres softs), install (apt-get intall truc-à-installer pour installer
un nouveau logiciel et ses dépendances), purge (permet de désinstaller un paquet de manière plus " propre "
que remove, car cela efface aussi les fichiers de configuration).
128)apt
apparue assez récemment, apt est décrit dans son man comme le front-end utilisateur pour un usage plus
interactif d'autres outils spécialisés tels que apt-get ou apt-cache. Il offre dans l'ensemble les mêmes
possibilités que apt-get. Je retiens une commande toute particulière : apt list --upgradable qui permet de
lister les packets qui seront mis à jour si l'on fait un upgrade (avec apt ou apt-get).
129)aptitude
c'est un autre utilitaire de paquets. Plus récent qu'apt-get, il est installé en parallèle de celui-ci sur Ubuntu et
Debian. Préférez-le à apt-get. Il s'utilise dans l'ensemble comme apt-get, mais est plus performant.
130)add-apt-repository
add-apt-repository permet d'ajouter des dépôts alternatifs aux dépôts officiels. C'est très utile, car les dépôts
officiels ont souvent du retard sur les versions de logiciels que sortent les développeurs et certains logiciels
en sont même absents. Ainsi, en ajoutant par exemple les dépôts des développeurs, vous pouvez bénéficier
des dernières versions juste en vous servant de apt-get ou aptitude, sans avoir besoin de compiler !
Par exemple, FFMPEG avait été supprimé des dépôts officiels d'Ubuntu (réintégré en version 15.04) au
profit de Libav, son fork. Pour profiter des dernières versions de FFMPEG sans avoir à compiler
manuellement à chaque fois :
sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next 2.
# on met notre liste de packets à jour
sudo apt-get update 5.
# si ffmpeg n'est pas installé, on l'installe
sudo apt-get install ffmpeg 8.
# s'il est déjà installé,
# un upgrade se chargera de le mettre à jour
sudo apt-get upgrade
131)une combinaison de commandes qui permettent de rechercher un dépôt sur le système :
grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep nom_du_ppa
132)apt-key
cette commande va bien souvent de pair avec l'ajout de dépôts puisqu'elle permet de gérer les clefs
cryptographiques en validant l'authenticité. On utilisera le plus souvent apt-key adv pour ajouter de
nouvelles clefs, Ubuntu-fr en détaille très bien l'usage. apt-key list permet de lister toutes les clefs installées
et apt-key del permet d'effacer une clef.
133)apt-cache madison
autre commande bien pratique, apt-cache madison nom_du_packet affiche les différents dépôts liés à un
packet donné et la version actuelle de chacun d'entre eux.
134)dpkg
info sur les paquets installés (options pour lister tous les paquets, désinstaller, etc.) ex. : liste des paquets
installés dpkg --get-selections. L'option -l fournit également une liste exhaustive et avec une petite
description de chaque packet, ce qui peut s'avérer très pratique. On constate parfois qu'un grand nombre de
paquets sont marqués pour être désinstallés avec le tag deinstall, pour tout enlever d'un coup
dpkg --purge `dpkg --get-selections | grep deinstall | cut -f1`
135)update kernel
si votre partition /boot est indépendante et qu'elle n'est pas très grande, il est probable qu'après un certain
temps, vous deviez faire un peu de ménage, sans quoi l'espace nécessaire à une mise à jour du kernel est
insuffisant. On devra donc supprimer les anciens noyaux, pour ce faire :
apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print $2}' | grep -ve "$(uname
-r | sed -r 's/-[a-z]+//')")
Il ne vous reste alors plus que le kernel actuellement utilisé et vous pouvez maintenant effectuer votre mise
à jour sans problème. Vous trouverez plus de détails sur cette commande sur le site de askubuntu.
136)service
cette commande permet de gérer les services. Lancer, arrêter, lister les services du système, etc. Par
exemple, pour relancer nginx après un changement dans le fichier de config, on fera service nginx restart
(notez que reload suffit dans certains cas). La commande service --status-all, bien pratique, permet de lister
tous les services disponibles sur le système.
Le paramètre status s'avère souvent fort utile puisqu'il donne des informations sur un service en particulier,
notamment s'il est actif ou non. Exemple service nginx status.
On peut également activer ou désactiver le démarrage automatique des services au boot, pour cela, on doit
troquer la commande service pour la commande native systemctl. Prenons apache2 pour exemple
# activer/désactiver un service
systemctl enable apache2
systemctl disable apache2
# vérifier si un service est lancé au boot systemctl is-enabled
systemctl is-enabled apache2
137)journalctl
cette commande, qui accompagne systemd, permet de visionner et requêter les journaux système. Nous ne
pourrons bien entendu pas aborder toutes les options ici, cependant, à vous d'aller fouiller le web pour
répondre à vos cas d'usage (requête sur un horaire donné, process, etc.). La commande journalctl seule,
affiche l'ensemble des logs que journald a collectés.
Que s'est-il passé durant le dernier boot, ou le précédent ?
# on commence par lister les différents boots présents dans les logs
# (il se peut qu'il n'y en ait qu'un)
journalctl --list-boots
0 3774424e8f5a45cb930b1eef3b8355dd Tue 2017-08-15 14:45:48 CEST—Wed 2017-08-16 12:54:57
CEST
# on demande ensuite à afficher les logs correspondants à ce boot
journalctl -b -0
- Logs begin at Tue 2017-08-15 14:45:48 CEST, end at Wed 2017-08-16 12:56:23 CEST. --
[…]
138)make
permet de compiler un programme dont on détient les sources. En général on fait tout d'abord ./configure [à
lancer avec --help pour voir les différentes options de compilation] (lance le script de configuration qui
vérifie la présence de toutes les dépendances, et écrit le fichier makefile qui contient les ordres de
compilation), make, et enfin make install (elle installe le logiciel).
139)update-rc.d
update-rc.d permet de configurer le démarrage ou l'arrêt automatique de service au démarrage de la
machine ou selon le runlevel. On donne en argument le nom du service et l'action (remove ou default pour
l'ajout) update-rc.d -f apache2 remove; -f permet de forcer l'effacement du lien symbolique même si le nom
existe encore. On peut aussi placer un script de démarrage dans répertoire /etc/init.d ou renseigner le fichier
/etc/ rc.local (qui a lui-même un lien symbolique dans /etc/init.d).
140)/etc/passwd
fichier qui contient les différents comptes utilisateurs de la machine (ce qui inclut les comptes utilisés par
les logiciels ex. : www-data pour Apache). On peut afficher les informations avec cat : cat /etc/passwd.
141)cat /etc/group
fichier qui contient les groupes utilisateurs de la machine (ce qui inclut les groupes utilisés par les logiciels
ex. : www-data pour Apache). On peut afficher les informations avec cat : cat /etc/group.
142)which
localise une commande ex. :which cat /bin/cat
143)whereis
localise un fichier binaire.
144) nice
permet de changer la priorité d'un programme/ (processus) (Niceness)
nice -PRIORITY COMMAND
ex: info@debian:~$ ps -lp
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 941 1 0 70 0 - 1713 poll_s ? 00:00:00 test
on change la priorité de test par la valeur 10
info@debian:~$ nice -10 ./test
si on veut une valeur négative
info@debian:~$ nice --10 ./test
145) renice
permet de changer la priorité d'un processus même après son lancement
info@debian:~$ ps -lp
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 941 1 0 70 20 - 1713 poll_s ? 00:00:00 ps
info@debian:~$ renice 30 941
aprés changement de processus ayant comme PID=941 on a :
info@debian:~$ ps -lp
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 941 1 0 70 30 - 1713 poll_s ? 00:00:00 ps
Manipulation
1)Que se passe t-il si vous envoyez à votre propre shell le signal 15 ? essayez avec les signaux 1,2 et 9
Les signaux seront envoyés par la commande kill avec indication de signal et le pid. Pour les signaux 1 et 9 le shell
termine immédiatement. Les signaux 2 et 15 n'entraînent pas de réaction du shell. Ces signaux sont ignorés par
défaut par le shell
2) Lancez la commande suivante avec nohup en tâche de fond:
ls -lR /fichier 2&1
Notez le numéro de ce processus en tâche de fond. Déconnectez puis reconnectez. Quelle est la valeur de PPID?
expliquez.
Après avoir noté le pid (par ex 815) déconnecter par exit et reconnecter de nouveau, ps indique pour le processus un
ppid=1 avec nohup le signal devrait être ignoré, le processus fils n'aurait pas de ppid valide le processus parent est
placé à 1
3) Lancez la commande de l'exercice précédent. Appelez ensuite la commande wait. Que se passe t-il? Comment
revenir au prompt de shell? envoyez au processus le signal 9
le processus fonctionne de manière asynchrone , avec wait le shell attend que le processus fils ait fini son travail;
appuyer sur Ctrl+D pour interrompre cette attente ; si on envoie le signal 9 au processus fils il s'arrête.
4) Relancez la commande de l'exercice 2 et mesurez sa durée avec time. Redirigez la sortie de la commande time
dans un fichier et essayez d'interpréter les valeurs
time ls -lR / > daliste
si on redirige le canal d'erreur standard, la sortie de la commande time ne se fera pas à l'écran.
5) Afficher les cinq derniers processus lancés (ceux avec les ID de processus les plus élevés) ordonnée , avec l'ID de
processus justifié à droite dans le premier champ séparé par des espaces.
ps -A | tac | head -5 | cut -b 0-5
6) Supposons que vous avez un programme en cours d'exécution appelé "myprog", qui est un enfant du shell actuel.
Vous souhaitez diminuer l'utilisation du processeur de ce programme. Laquelle des lignes de commande suivantes
pouvez-vous utiliser pour que "myprog" génère davantage de ressources CPU?
A. nice +1 myprog
B. ps h -o pid -C myprog | xargs nice +1 -
C. renice +1 -u `whoami` myprog
D. renice +1 -p `ps -a | grep myprog | cut -b 1-6`
7) Analyser correctement un fichier source C nécessite un analyseur complet (tel que celui intégré dans un
compilateur C). Néanmoins, les expressions régulières peuvent être utilisées pour fournir une assez bonne
description approximative de nombreuses constructions de programme. Laquelle des recherches suivantes localisera
au moins la plupart des fonctions C qui acceptent un int comme premier argument et renverra un int.
A. grep -E "int[ \t]+\w+[ \t]*\([ \t]*int" *.c
B. grep -E "^int\w+[A-Za-z_]+\w*\(\w*int" *.c
C. grep -E "int.+\([ \t]+int.*\) " *.c
D. grep -E "int[ \t]+[A-Za-z_][ \t]+\(int" *.c
8) Sur la base du système de nommage des partitions de Linux, lequel des noms de périphérique suivants pointe vers
des partitions "logiques" (en supposant que les partitions correspondantes existent sur le système en question)?
A. /dev/sda3
B. /dev/fd0
C. /dev/hdb7
D. /dev/hda4
E. /dev/fd7
F. /dev/sdc11
9) Laquelle des lignes de commande suivantes peut (éventuellement) être utilisée pour formater une partition?
Supposons que les partitions requises existent et que le partitionnement logique est utilisé sur chaque disque dur.
A. mkfs -t msdos /dev/sda1
B. mkfs.ext2 /dev/null
C. mkfs -t ext2 /dev/hda4
D. mkfs --type=ext2 /dev/hdb7
10) # jobs -l
[1] 5110 Running kedit &
[2]- 5382 Stopped (signal) pine
[3]+ 5457 Stopped (tty output) vi
Quelle est la commande qui permet de terminer l'application 'vi'?
A. bg %3
B. kill -9 5457
C. term -i %3
D. fg 5457
11) La commande qui permet de repairer une partition
A. chkdsk
B. scandisk
C. fsck
D. fdisk
12) Laquelle des lignes de commande suivantes produira un rapport sur l’espace disque total utilisé par l’utilisateur
actuel?
A. fsck ~
B. df ~/.
C. quota --used
D. du -hs ~
13) Quelle commande permet de donner l'espace disponible de disque utilisé
A. free
B. df
C. du
D. fdisk
14) Que contient le fichier '/ etc / fstab' du système
Le fichier /etc/fstab est une liste des systèmes de fichiers qui seront mountées automatiquement à l'initialisation du
système sauf en cas d'utilisation de l'option noauto. Il est possible d’éditer le fichier /etc/fstab pour ajouter vos
propres volumes et partitions et choisir dans quel dossier leur contenu apparaîtra.
15) Quelle commande Linux peut être utilisée pour limiter le quota d'utilisation de l'espace disque d'un utilisateur
particulier? Supposons pour cette question que les quotas sont activés pour le (s) système (s) de fichiers utilisé (s)
sur le système en question.
A. edquota
B. setquota
C. quotaon
D. repquota
16) Un avantage des liens durs sur les liens symboliques est:
A. Un lien dur peut s’étendre sur différents systèmes de fichiers
B. Un lien dur ne devient pas déconnecté du fichier principal si le fichier est déplacé.
C. Vous pouvez déterminer l’inode utilisé par un lien dur, mais pas pour un lien symbolique.
D. Un lien dur vous permet de modifier les autorisations sur le fichier principal.
17) Selon le standard de hiérarchie du système de fichiers Linux, lequel des répertoires suivants constitue-t-il un
emplacement approprié pour un utilisateur puisse installer une application partagée?
A. /sbin
B. /dev/user/bin
C. /usr/local/bin
D. /etc/bin
18) Parmi les lignes de commande Linux suivantes, laquelle peut être utilisée pour examiner les messages de
démarrage du noyau (kernel) après le temps de bootage?
A. dmesg | less
B. less /proc/kmsg
C. bootlog -v
D. vi /var/log/messages
19)Comment formater un USB?
20) Lister tous les fichiers cachés du répertoire de connexion sauf les répertoires
ls -aF | grep "^\." | grep " [^/]$"
ls -aF | grep "^\..*[^/]$"
ls -adF .*| grep "[^/]$"
21) Lister tous les fichiers ordinaires cachés du répertoire de connexion
ls -al | grep "^-" | tr -s " " ":" | cut -f9,9 -d: | grep "^\."
22) 1.Ecrire une commande qui donne le nombre de fichiers du répertoire courant
Rep : % ls -al | wc -l
2.Ecrire une commande qui donne le nombre de répertoires du répertoire courant
Rep:% ls -al | grep ^d | wc -l
3.Ecrire une commande qui donne le nombre de fichiers ordinaires du répertoire courant
Rep :%ls -al | grep ^- | wc -l
4. refaire 1 et 2 pour un répertoire donné
Rep:%ls -al rep | wc -l;.
5. Ecrire une commande qui permet d'afficher le nombre d’utilisateurs utilisant le « bash » comme shell
par défaut
Rep: % grep bash /etc/passwd | wc -l
6. Ecrire une commande qui permet d'afficher les utilisateurs qui utilisent le « bash » comme shell par
défaut.
Rep :%grep bash /etc/passwd | cut -f 1 -d":"
7. En utilisant la commande find « lister » tous les fichiers qui ne sont ni des fichiers ordinaires ni des
répertoires. Pour les tests, vous créez un répertoire nommé « rep », ensuite à l’aide de la commande « cat »
ou « touch », créez deux fichiers nommés « fiche1 » et « fiche2 », enfin vous créez deux liens symboliques
nommés « lien_fiche1» vers le fichier « fiche1 » et « lien_fiche2» vers le fichier « fiche2 »
Rep:find . ! \( -type f -o type d \) -ls
8. A l’aide de la commande grep, lister tous les fichiers du répertoire /etc/X11 dont le nom Contient le
caractère x.
Rep : ls /etc/X11 | grep x
9. Contient la lettre x ou X.
Rep : ls /etc/X11/ | grep "[x|X]" ou ls /etc/X11/ | grep "[x|X]"
10. Commence par la lettre X ou x et qui contient un ou plusieurs chiffres.
Rep1 :ls /etc/X11/ | grep "^[x|X].*[0-9]"
Rep2 :ls /etc/X11/ | grep "^[x|X]" | grep "[0-9]"
11.Commence par la lettre X ou x et qui finit par un chiffre.
Rep 1 : ls /etc/X11/ | grep "^[x|X].*[0-9]$ "
Rep 2 : ls /etc/X11/ | grep "^[x|X] " | grep " [0-9]$ "
12. Ecrire une commande qui donne la liste des fichiers du répertoire « /etc » qui commencent avec la lettre
« p » et qui sont triés par type.
Rep : ls -ld /etc/p* | sort
13. Ecrire une commande qui donne la liste des fichiers du répertoire « /etc » qui commencent avec la
lettre « p » triés suivant le nombre de liens (ordre croissant et ordre décroissant).
Rep : Ordre croissant : ls -ld /etc/p* | sort -n k2,2 ou ls -ld /etc/p* | sort -k2n,2n
Ordre décroissant : ls -ld /etc/p* | sort -n -r -k2,2 ou ls -ld /etc/p* | sort -k2nr,2nr
23) Créer le fichier « resultat.txt » qui a le contenu suivant :
Nom Résultat
----------------------------------------------
Omar 18
Ali 8
Fatima 15
Mohammed 18
Houcine 16
Zahra 5
Hassane 15
a. Afficher le contenu du fichier résultats sauf les deux lignes titres (les deux premières lignes).
Rep : tail -n +3
b. Trier le fichier par ordre alphabétique (les deux lignes titres ne figurent pas sur la sortie). Rep : tail -n +3
resultat.txt | sort
c. Trier le ficher par ordre croissants suivant le champ « Résultat » (les deux lignes titres ne figurent pas sur la
sortie).
Rep :
tail -n +3 resultat.txt | sort -n -k2 ou tail -n +3 resultat.txt | sort -n -k2,2 ou
tail -n +3 resultat.txt | sort -k2n ou tail -n +3 resultat.txt | sort -k2n,2n
Remarque : pour la commande « sort » on doit rajouter l’option « -n », sinon le trie se fait par ordre ASCII, dans ce
cas on a 18 < 5 < 8.
d. Trier le ficher par ordre décroissants suivant le champ « Résultat » (Les deux lignes titres ne figurent pas sur la
sortie).
Rep :tail -n +3 resultat.txt | sort -n -r -k2,2 ou tail -n +3 resultat.txt | sort -k2nr,2nr
e. Supposons maintenant que le contenu du fichier « resultat.txt » est comme suit : Nom Résultats
----------------------------------------------
Omar 18:10 :12
Ali 8 :19 :0
Fatima 15 :16 :12
Mohammed 18:10:20
Houcine 16:0:10
Zahra 5:13:10
Hassane 15 :16 :12
f. Trier le fichier par ordre croissant suivant le premier résultat
Rep 1 :
On doit unifier les séparateurs des champs, en transformant tous les séparateurs de champs en « : ». - Si on suppose
que les noms sont séparés des résultats par des tabulations alors on
transforme les tabulations en « : » avec la commande : tr -s "$\t" ":" Pour faire le tri suivant le deuxième champ, on
utilise la commande :
% tail -n +3 resultat.txt | tr -s "$\t" ":" | sort –n -k2,2 -t :
Si on suppose que les noms sont séparés des résultats par des espaces et par des tabulations alors on transforme, tous
d’abord, les tabulations en espaces ensuite on transforme les
espaces en « : » avec la commande : tr "$\t" " " | tr -s " " ":"
Pour faire le tri suivant le deuxième champ, on utilise la commande :
% tail -n +3 resultat.txt | tr "$\t" " " | tr -s " " ":" | sort -n -k2,2 -t :
Remarque : Dans ce cas Mohammed est affiché avant Omar
g. Trier le fichier par ordre croissants suivant le premier résultat, puis suivant le troisième. % tail -n +3 resultat.txt |
tr "$\t" " " | tr -s " " ":" | sort -n k2,2 –k4,4 -t :
Dans ce cas « Omar » sera classé avant « Mohammed » f. Afficher avec classement
% tail -n +3 resultat.txt | tr "$\t" " " | tr -s " " ":" | sort -n k2,2 –k4,4 -t : | cat -n
% tail -n +3 resultat.txt | tr "$\t" " " | tr -s " " ":" | sort -n k2,2 –k4,4 -t : | cat -b L’option « -b » identique à « -n » en
ignorant les lignes vides.
24). Donner la commande qui permet d’afficher la liste de tous les utilisateurs.
Rep 1: cut -d: -f1 /etc/passwd ou cut -d":" -f1 /etc/passwd
25) on a 4 fichiers st1.txt st2.txt st3.txt st4.txt
a)afficher successivement le contenu des 4 fchiers
rep: cat st*.txt
b)la forme générale de ces fchiers est : mot étiquette lemma (le séparateur est une tabulation \t). extraire la colonne
correspondant aux mots, puis en utilisant les commandes sort(1) (alphabétique et numérique) et uniq(1) (avec
l'option -c) calculer la liste de fréquence des mots de ce fchier
rep: $ cat st*.txt | cut -f1 | sort | uniq -c
c) Modifer la commande précédente de manière à n'affcher que les 20 mots les plus fréquents.
rep: $ cat st*.txt | cut -f1 | sort -f | uniq -c | sort -gr | head -20
d) Modifer la commande précédente de manière à affcher les 30 lemmes les plus fréquentes.
$ cat st*.txt | cut -f3 | sort -f | ? uniq -c | sort -gr -k 1 | head -30
e) Modifer la même commande de manière à affcher les 5 étiquettes les plus fréquentes.
$ cat st*.txt | cut -f2 |sort -f | ? uniq -c | sort -gr -k 1 | head -5
26) soit le fchier public_doc.html.
a) Y a-t-il des caractères en gras dans ce document ?
rep: $ egrep -o "<b>.+</b>" public_doc.html
b)Obtenez la liste des balises HTML de ce document.
$ egrep -o "<[[:alnum:]]+>" public_doc.html |sort |uniq
c)Quelle commande taper pour obtenir la liste des URLs se trouvant dans cette page ?
$ grep "<a href=" public_doc.html
Web
Un virtual hoste est un fichier de configuration d'apache 2 qui lui dira que s'il reçoit une requête d'un domaine donné
(par exemple : www.monsite.ma) il devra utiliser un dossier précis, avec une configuration particulière.
En plus d'avoir une url plus propre que http://localhost/monsite.ma, un vhost vous permettra d'activer des
configurations avancées, souvent nécessaire lors de l'installation d'un symfony 2 par exemple
La première étape est de dire à notre machine que le domaine monsite.ma doit pointer sur notre propre machine
(c'est à dire 127.0.0.1) pour cela, deux possibilités, soit vous modifier votre fichier hosts, soit vous redirigez
automatiquement tous les domaines en .dev vers votre machine.
Modification du fichier hosts
sudo gedit /etc/hosts
et ajoutez à la fin du fichier :
127.0.0.1 monsite.ma www.monsite.ma
Nous allons commencer par créer le dossier qui contiendra tous nos sources de sites. On peut créer des sous-dossiers
dans /var/www/html, mais cela pourrait porter à confusion. Mais on peut utiliser le dossier de base /var/vhosts
Créons ce dossier à l'aide de la commande mkdir
sudo mkdir /var/vhosts
146)a2ensite
active un vhost Apache : a2ensite monsite.ma.
147)a2dissite
désactive un vhost Apache : a2dissite monsite.ma.
148)a2enmod
active un module Apache : a2enmod rewrite.
149)a2dismod
désactive un module Apache : a2dismod rewrite.
150)a2enconf
sur le même modèle que pour les vhost et les modules, a2enconf et a2disconf permettent d'activer ou de
désactiver des configurations. Par exemple, lorsqu'on ne renseigne pas explicitement le fichier d'access.log
d'un vhost, Apache logue le tout dans un fichier dédié : other_vhosts_access.log. Dans le cas où l'on ne
voudrait pas de logs d'accès par exemple, on peut désactiver cette configuration : a2disconf other-
vhostsaccess-log.
151)apache2ctl
apache2ctl permet d'une part d'agir en tant que script init (ce qui n'a pas grand intérêt puisqu'on utilise en
général la commande service). Et d'autre part de contrôler le processus Apache et de récupérer des infos sur
ce dernier. apache2ctl -S est assez utile puisqu'elle permet de voir comment Apache interprète nos Vhost,
l'option -M liste les modules Apache activés. Enfin, l'option -help vous en dira plus sur les autres
commandes disponibles !
152)curl
curl permet, comme wget, de récupérer un fichier depuis une URL, mais s'il mérite sa place ici, c'est qu'il
permet bien plus. C'est en effet le couteau suisse du HTTP. On l'utilisera en effet pour tester des requêtes
dans différents formats, analyser les HEADERS, etc.
ex:
# requête get classique
curl https://monsite.ma
# afficher les headers
curl https://buzut.fr -D -
# faire une requête de type X (HEAD, POST, PUT, PATCH, DELETE…)
curl -X HEAD https://monsite.ma
# passer des paramètres au format form data
curl -X POST --data "[email protected]&passwd=azerty" https://monsite.com/login
# même requête avec les paramètres en request payload, JSON. (on ajoute ici un header)
curl -H "Content-Type: application/json" -X POST --data '{"email":"[email protected]","passwd":"azerty"}'
https://monsite.ma/login
Gestion réseau
153)iftop
comme top, iftop sert à surveiller toutes les connexions réseau. Attention, iftop nécessite les privilèges root
pour être lancé. Si vous n'êtes pas root, le faire précéder de sudo.
154)speedometer
un peu plus graphique que iftop, speedometer surveille le trafic de vos entrées/sorties, permet de surveiller
la progression d'un téléchargement, de savoir combien de temps il faudra pour transférer tel fichier ou
encore de connaître la vitesse d'écriture de votre système.
155)exim4
Exim est un MTA (Mail Transfer Agent) qui permet d'envoyer des e-mails depuis le serveur. Sans lui (ou
un autre MTA) la fonction mail() de PHP ou d'autres langages ne sera pas effective. Il en existe d'autres,
mais celui-ci est robuste, sécurisé, modulable et demande peu de ressources.
156)ifconfig
cette commande des plus indispensables permet d'obtenir des infos et de configurer les interfaces réseau.
Employée sans argument, elle fournit des infos sur les interfaces réseau. Mais elle permet aussi de modifier
la configuration. Par exemple pour changer une adresse mac, on utilisera la commande
ifconfig $INTERFACE ether $MAC. Donc pour changer l'adresse mac de la carte Ethernet, ce sera en
général ifconfig eth0 ether5E:FF:56:A2:AF:15
Notez cependant que cette commande, bien que toujours fonctionnelle, est dépréciée en faveur de la
commande ip ci-dessous.
157)ip
cette commande permet d'afficher et de manipuler le routage et les interfaces. On s'en sert souvent pour lier
ou supprimer une ip à une interface :
# lister toutes les adresses
ip addr
# ne lister que les informations ipv6
ip -6 addr
# lister une interface en particulier
ip addr show dev em2
# ajouter une adresse ipv4
ip addr add 192.168.0.7 dev eth0
4)Apache (httpd)
a)S’il n’est pas déjà présent, installer le package httpd (Fedora) ou apache2 (Debian).
b)Démarrer le serveur si nécessaire et s’y connecter à l’aide d’un navigateur.
c)En s’inspirant des fichiers présents dans le répertoire /etc/httpd/conf.d/ (Fedora) ou /etc/apache2/conf-available
(Debian), créer le fichier docpam.conf pour ajouter un alias /PAM pointant vers la documentation de PAM.
d)Redémarrer le serveur Apache et se connecter à l’URL http://votreip/PAM, puis à l’URL http://votre-
IP/PAM/Linux-PAM_SAG.html. Que se passe-t-il ?
e)Ajouter la directive DirectoryIndex Linux-PAM_SAG.html portant sur le chemin /usr/share/doc/pam/html et
redémarrer Apache. Que se passe-t-il ?
Pour Debian :
[root]# aptitude search apache2
p apache2 - Serveur HTTP Apache
Installer au moins le paquet libpam-doc pour la suite.
[root]# aptitude install apache2 libpam-doc
...
5)Serveur NFS
a)Créer le répertoire /export/distrib pour accueillir une copie du DVD-ROM de la distribution Fedora ou Debian.
b)Copier l’intégralité du DVD-ROM de la distribution dans le répertoire /export/distrib.
c)Rendre le répertoire accessible via NFS à toutes les machines du réseau.
d)Relancer le service NFS pour prendre en compte les modifications du fichier de configuration et vérifier la
présence de ce nouveau répertoire dans les partages réseau NFS actifs.
f)Monter le partage NFS sur /mnt/distrib et vérifier que l’accès est en lecture seule.
Indication
[root]# mkdir /export
[root]# mkdir /export/distrib
ou :
[root]# mkdir -p /export/distrib
2.
Pour copier le DVD-ROM de la distribution, effectuer les opérations suivantes :
[root]# mount /dev/cdrom /mnt
[root]# cp -dpr /mnt/* /export/distrib
[root]# umount /mnt
3.
[root]# vi /etc/exports
et ajouter la ligne suivante :
/export/distrib *(ro)
4.
[root]# systemctl restart nfs-server.service
[root]# systemctl status nfs-server.service
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor
Active: active (exited) since mar. 2016-12-27 17:08:46 CET; 33s ago
Process: 4549 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0
Process: 4545 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCES
Main PID: 4549 (code=exited, status=0/SUCCESS)
Tasks: 0 (limit: 4915)
CGroup: /system.slice/nfs-server.service
[root]# exportfs
/export/distrib
<world>
5.
On utilise localhost comme serveur.
[root]# mkdir -p /mnt/distrib
[root]# mount ...
Travail complémentaire
CONFIGURATION RESEAU STATIQUE
Objectif : acquérir l’adresse nécessaire à la configuration manuelle d’un réseau.
Configuration de départ : un système Linux qui utilise une configuration réseau dhcp.
Mise en situation : le serveur dhcp est en panne ! Vous devez mettre votre station de travail sur le réseau afin de
modifier manuellement les fichiers de configuration appropriés et définir une configuration réseau statique.
Sequence 1: définition de l’adresse IP
Mise en situation :
Le serveur dhcp sur votre réseau est en panne. Vous devez alors définir une adresse IP statique afin de pouvoir
remettre votre station de travail sur le réseau.
Tâches :
1. Premièrement, désactivez votre interface Ethernet à l’aide de la commande ifdown :
ifdown eth0
2. Ouvrez ensuite le fichier /etc/sysconfig/network-scripts/ifcfg-eth0 dans un éditeur de texte et modifiez son
contenu de la façon suivante (où X doit être remplacé par un numéro de votre réseau) :
3. Visualisez le contenu du fichier /etc/resolv.conf. Vous devriez y retrouver les réglages valides obtenus du
serveur dhcp. Si ce n’est pas le cas, faites les modifications nécessaires afin que le tout corresponde à ce qui suit :
Résultat :
Un système configuré de façon à pouvoir fonctionner avec des réglages de réseau statique.
Remise à l’état initial :
Une fois que votre instructeur aura réactivé le serveur dhcp, remettez vos fichiers de configuration à leur état initial,
désactivez eth0, puis réactivez-le. Le fichier ifcfg-eth0 devrait alors ressembler à ceci :
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
Pour récupérer les adresses IP, on lance un terminal sur chaque une des deux machines et on tape la commande
ifconfig, on regarde la ligne “inet adr”. On trouve par exemple pour le client : 192.168.108.2 et pour le serveur DNS
192.168.108.1.
domaine.com est le nom de domaine pour lequel le serveur sera primaire (c'est à dire où c'est ce serveur DNS qui
sera utilisé), domaine.com.zone désigne le fichier où seront stockés les enregistrements de la zone.
On crée le fichier domaine.com.zone et on ajoute les lignes suivantes :
$TTL 604800
domaine.com. IN SOA machine1 root.machine1.domaine.com. (
1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire
604800 ) ; Negative Cache TTL
;
domaine.com. IN NS machine1 machine1 IN A 192.168.108.1. machine2 IN A 192.168.108.2.
$TTL 604800
;$ORIGIN 108.168.192.in-addr.arpa.
@ IN SOA machine1 root.machine1.domaine.com (
1 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire
604800 ) ; Negative Cache TTL
;
IN NS machine1.domaine.com.
;
1 IN A machine1
2 IN A machine2
Matériel nécessaire :
Deux machines en dual boot Linux / Windows en réseau.
Les éléments sur l'analyse de trame, notamment les trames bootp, seront retraités lors des TP sur la métrologie.
Installation du serveur
Les paquets sont déjà installés.
Attention : vous pouvez avoir sur votre distribution, plusieurs serveurs DHCP.
dhcpd est conforme à la RFC 2131. Il fournit un exemple de configuration assez détaillé. dhcp3, intègre l'inscription
auprès d'un DNS Dynamique. C'est ce package que nous allons utiliser dans le TP. Par contre si vous n'avez pas de
DNS dynamique sur le réseau, vous devrez mettre en entête du fichier dhcpd.conf, la ligne :
ddns-update-style none;
Configuration du serveur
La configuration consiste à créer 2 fichiers :
• /etc/dhcp/dhcpd.conf, ce fichier sert à la configuration même du serveur (plage d'adresses, paramètres
distribués),
• /var/lib/dhcpd/dhcpd.leases, ce fichier va servir à l'inscription des clients. Chaque client DHCP, génère
l'écriture d'un enregistrement dans ce fichier. Cela permet le suivi, les statistiques de l'activité du serveur.
$>cat dhcpd.conf
default-lease-time 86400;
# Le bail à une durée de 86400 s par défaut, soit 24 h
# #OnOnpeut configurer
le laisse avec les clients de
un maximum pour qu'ils puissent demander
7 jours
# max-lease-time
une durée de bail spécifique
604800;
use-host-decl-names true ;
} # End m1
host m2 {
} # End m2
Le fichier /var/lib/dhcp3/dhcpd.leases peut contenir après l'inscription du premier client :
[root@master /etc]# more /var/lib/dhcpd/dhcpd.leases
lease 192.168.0.10 {
uid 01:00:40:33:2d:b5:dd;
source: http://www.epons.org/vi.php