Pages

Affichage des articles dont le libellé est Exercices corrigés Linux. Afficher tous les articles
Affichage des articles dont le libellé est Exercices corrigés Linux. Afficher tous les articles

samedi 8 février 2014

Les commandes Unix/Linux


Outils de partitionnement : 

Fdisk cfdisk pdisk Norton Partition Magic Les types de Partitions: Partition primaire (Principale): Nbre Max = 4 / Partition étendue: Nbre Max = 1
Kernel (noyau) : gestion du système de fichier,du processeur, de la mémoire centrale et despériphériques
Shell : interpréteur de commande (bash, ksh,csh, zsh, etc.)

Le système de fichiers:

- Ext3fs: Journalisé (récupération rapide en cas d'arrêt brutal).Utile pour gros disques durs
– Quotas disponibles
 – ACL supportés
– Passage d'Ext2fs à ext3fs facile / ReiserFS/ ext2fs

L'arborescence du système linux:

/bin contient les exécutables essentiels au système,employés par tous les utilisateurs
/boot contient les fichiers permettant à Linux dedémarrer (Modules du noyau)
/dev contient les points d'entrée des périphériques
/etc contient les commandes et les fichiers nécessairesà l'administateur du système
/home répertoire personnel des utilisateurs
/opt contient des packages d'applicationssupplémentaires

Commandes de Base :

«ls» : lister le contenu d’un répertoire
«rm» : supprimer un fichier
«cp» : copier un fichier
«ln» : créer un lien sur un fichier
«man» : afficher l’aide d’une commande
«mv» : déplacer un fichier
«cd» : changer de répertoire
«mkdir» : créer un répertoire
«rmdir» : supprimer un répertoire
«pwd» : afficher le répertoire courant
«cat» : afficher le contenu d’un fichier
«file» : afficher le type de contenu du fichier
«locate» : localiser un fichier sur le disque
«adduser» : ajouter un utilisateur
«deluser» : supprimer un utilisateur
«usermode» : changer les propriétés d’un compte
«passwd» : changer le mot de passe
cat nom_fichier affiche le contenu du fichier
cat fich1 fich2 Affiche deux fichiers à la fois
cat > nom_fichier créer un nouveau fichier si'il n'existe pas sinon son contenu sera écrasé fin de saisie par "ctrl+d"
cat fich1 > fich2 : envoie fich1 à fich2 si fich2 existe il sera ecrasé, sinon il sera créé
cat fich1 >> fich2 : ajoute le contenu de fich1 à celui de fich2
cat >> fich2 ajoute le texte saisie à fich2
more : visualisation par page (descente seule)
less : visualisation par page (montée et descente)
head : partie sup. d'un fichier
tail : Partie inf d'un fichier
wc : Comptage du nombre de mots, lignes ouCaractères
file : Afficher le type d'un fichier
diff : Différences entre deux fichiers
sort : Tri du contenu d'un fichier
file : Afficher le type d'un fichier
grep : Rechercher un mot dans un fichier
chmod : Changer les permissions
umask affiche le masque de l'utilisateur actif
umask Saffiche les permissions correspondantesau masque, sous forme symbolique.
umask masque fixe les permissions ultérieures decréation des fichiers de l'utilisateur actif,
chgrp : Changer le groupe
ls > essai– envoie le résultat de ls dans essai
ls >> essai2– envoie le résultat de ls dans essai2 avec concaténation
ls –z 2> essai3– le message d'erreur sera envoyé à essai 3
cat < essai4– affiche
cat < essai4 >> essai1
&> redirige la sortie standard et la sortie d’erreur
2> redirige la sortie d’erreur
>> concatène la sortie standard
> redirige la sortie standard
< redirige l’entrée standard

vi nom_fichier

APPELL

vi –R nom_fichier : pour éditer un fichier en
lecture seule
vi : Pour ouvrir un nouveau fichier sans nom

RENSIEGNEMENT

:se ts=n fixe la tabula
tion à n caractère
( par défaut = 8)
:se nu Affiche les numéros de ligne
:se nonu Supprime les numéros de lignes
:.= affiche le numéro de la ligne courante
<ctrl>+g ou :f affiche l’état du fichier
: e! réedite le fichier tel qu’il est sur le disque

DEPLACEMENT

<ctrl> + b Page précédente (back)
<ctrl> + f Page précédente ( Forward)
G Dernière ligne
nG Ligne n
H Haut de l’écran ( high )
M Milieu de l’écran ( Middle )
L Bas de l’écran
n <espace> n caractères vers la droite
0 Début de la ligne^ Premier caractère non blanc
$ dernier caractère de la ligne
ou k Ligne précédente
ou j Ligne suivante
ou l vers la droite
ou h vers la gauche
n <Return> n lignes vers
+ ou <Return> début de la ligne suivante / - début de la ligne précédente

RECHERCHE

/motif <return> Recherche motif vers l’avant
?motif <return> Recherche motif vers l’arrière
n Répète la dernière commande de recherche

INSERTION

i ….. <ESC> Avant le curseur
I ….. <ESC> Au début de la ligne courante
a ….. <ESC> Après le curseur
A ….. <ESC> En fin de la ligne courante
o ….. <ESC> Au dessous de la ligne courante
O ….. <ESC> Au dessus de la ligne courante

MODIF ET REMPLACEMENT

<ctrl>+u Annule le texte inséré de la ligne courante
<ctrl>+v Insère le caractère spécial qui suit
<ctrl>+l Insère un saut de page
r # Remplace le caractère courant par #
R ….<ESC> Remplace la chaine de caractères
courante par la chaine entre R et <ESC>
~ Bascule de Majuscule en minuscule et inversement
. Répète la dernière commande modifiant le texte

Effacements:

x Effacement du caractère sous le curseur
3x de 3 caractères à partir de la position ducurseur
dd de la ligne où se trouve le curseur
4dd de 4 lignes à partir de la ligne du curseur

Restitution :

u Restitution de la dernière modification(undo)
U La ligne courante avant modification (sauf dd)
P dernière commande d'effacement

MOUVEMENTS DE LIGNE

J joint la ligne courante et la suivante
r<Return> brise en 2 lignes à partir de la position du curseur
yy Place la ligne courante dans le tampon de travail
dd idem avec effacement de la ligne
10yy Place 10 lignes courante dans le tampon de travail
10dd idem avec effacement

DECALAGE

>> (ou <<) décalage vers la droite(ou vers la gauche) de toute la ligne de m positions, m étant définit par la commande set sw=m( par défaut m=8)
n>> (ou <<) décalage des n lignes suivantes
: n1, n2 >> ( ou n1,n2<<) décalage des lignes n1à n2

SUBSTITUTIONS

:s/old/new/p substitution du 1er "old" de la ligne courante par "new"
:s/old/new/gp Substitution de tous les old de la ligne courant par new
i,j s/old/new/p substitution des 1ers old des lignes i à j par new
i,j s/old/new/gp substitution de tous les old des lignes i à j par new
:u annule la plus récente substitution réalisée

INSERTIONS DE FICHIERS

:nr nom_fichier insère le fichier nommé après la ligne n
:r nom_fichier insère le fichier nommé après la ligne courante

shell

echo, affiche son argument texte la sortie standard.
l'option e pour insérer les caractères spéciaux : \n (saut ligne), \b (retour arrière), \t (tabulation), \a (alarme), \c (fin sans saut de ligne) echo"Bonjour à tous !" echo e"Bonjour \nà toutes \net à tous ! "
read, permet l'affectation directe par lecture de la valeur,
echo "Donnez votre nom et prénom "  read prenom nom  echo "Bonjour $prenom $nom"
set affichera la liste des variables actuelles ainsi que leurs valeurs
unset pour supprimer une variable (a=Bon b=jour  echo $a$b echo $asoir echo ${a}soir Bonjour)
alias: affiche la liste de tous les alias / alias la=‘ls –al’ : pour remplacer la commande « ls –al » par la
fonction shell Sortie() / { / clear / echo déconnexion / exit / } .
à appel d un Shell sh nom_script ./ nom_script
variables spéciales
$0 est le nom dans lequel le script est appelé
$# est le nombre de paramètres passés en argument
$* est la liste des paramètres passés en argument
$? est le code de retour de la dernière commande (0 :si la commande a été correctement exécutée
$1, $2, …, $9: représentent les arguments du script
Exemple ( <<vi my_script>> création : echo $0 a été appelé avec $# paramètres echo qui sont :$* )
Exécution :(<<sh my_script a b c d>> my_script a été appele avec 4 paramètre qui sont : a b c d )

L'instruction

If commande then commandes fi (exemple : if grep –i "tarik" /etc/passwd  then echo L\'utilsateur tarik est connu du système fi )
If commande then commandes else commande fi

Read More

dimanche 26 janvier 2014

Exercice corrigés Linux : Outils de manipulation de texte

Exercice 1:

Recherchez dans le fichier /etc/passwd :
- L’entrée correspondant à votre login (solution indépendante du login).
- Le nombre de lignes contenant la chaîne de caractères : MICHEL ou michel.
- Le nombre de lignes contenant la chaîne de caractères : /home/.

Correction exercice 1 :

§ Recherche dans /etc/passwd de:
§ mon login :
kyle> grep $LOGNAME /etc/passwd
kyle:!:201:200:Alberto XSTRA:/home/xstra:/bin/bash
§ Nombre de lignes contenant MICHEL ou michel
kyle> grep –i MICHEL /etc/passwd | wc –l
§ Nombre de lignes contenant /home/
kyle> grep –c '/home/' /etc/passwd
27
kyle>

Exercice 2:

Recherchez dans le fichier /etc/inetd.conf :
- Le nombre de lignes contenant un point .
- Le nombre de lignes ne commençant pas par # .
- Toutes les lignes de plus de 50 caractères.
- Toutes les lignes de plus de 50 caractères (hors commentaires).

Correction exercice 2 :

kyle> fgrep . /etc/inetd.conf
§ attention au point avec grep
kyle> grep –cv '^#' /etc/inetd.conf
kyle> awk 'length>50' /etc/inetd.conf
kyle> awk '!/^#/ && length>50' /etc/inetd.conf

Exercice 3:

Écrivez une commande awk permettant de lister le contenu d’un fichier sans les
lignes vides et en les numérotant. Testez votre solution avec l’entrée standard.

Correction exercice 3 :

La solution awk est la suivante:
kyle> awk '!/^$/ {n++;print n,$0}'
§ tapez plusieurs lignes dont des vides
§ terminez par <ctrl D>
§ observez le résultat
§ Sous linux, ce résultat est obtenu par :
kyle> cat b

Exercice 4:

Le fichier annuaire.txt contient des adresses sous la forme suivante :
Prénom NOM Date-de-naissance Sexe Numéro-de-téléphone
Le fichier est supposé très long, et il peut contenir des erreurs comme dans
l’exemple ci-dessous :
Georges TARTEMPION 12 2 1967 M 038898422524
Hortense HYABLANT 7 4 1944 F 0146872556
Adrien DUBOUCHON 27 11 1938 M 0154896372
Ludwig SCHMILLBLEERCK 28 12 1957 M 0258459887
Antonio VAVILDA 16 5 1937 M
Hughes CARPETTE 8 11 1958 M 0123568629
J'en ai assez de ce travail fastidieux!
Dagobert ELOY 14 7 1947 M 0225415487
ligne vide
Anatole SUISSE 1 2 1965 n 4
Antonino SZWPRESWKY 16 5 8937 M 0298358745
Écrire les trois commandes grep permettant de :
- supprimer les lignes vides ;
- trouver les gens qui n’ont pas le téléphone ;
- trouver les lignes non conformes ;
Écrire une solution awk pour le dernier cas.

Correction exercice 4 :

Supprimer les lignes vides
kyle> grep v '^$' <fich1 >fich2
Trouver les gens qui n’ont pas le téléphone
kyle> egrep '[^0 9]{8}$' fich1
Trouver les lignes non conformes
kyle> grep v '^[A Z][a z]+ [A Z]+ [0 9]{1,2} \
[1 9][0 2]? 19[0 9]{2} F|M [0 9]{8}$' fich1
Cette solution est approximative. awk permet une analyse beaucoup plus fine. Le
fichier check.awk contient :
{error=0
if (NF != 5) error++
if ($1 !~ /[A Z][a z]+/) error++
if ($2 !~ /[A Z]+/) error++
combien=split($3,ladat," ")
if (combien != 3) error++
if (ladat[1] < 1 || ladat[1] > 31 ) error++
if (ladat[2] < 1 || ladat[2] > 12 ) error++
if (ladat[3] < 1789 || ladat[3] > 2002 ) error++
if (length($4) != 1) error++
if ($4 !~ /[MF]/) error++
if (length($5) != 10) error++
if ($5 !~ /0[0 9]{9}/) error++
if (error != 0) print NR,error,$0
}
Ce qui signifie : pour chaque ligne (condition manquante) l’action à entreprendre
consiste à : mettre la variable error à zéro, variable qui sera incrémentée pour chaque
anomalie détectée. Les vérifications sont ensuite faites dans l’ordre.
Vérifier que la ligne comporte cinq champs
Le premier champ doit être une majuscule suivie de minuscules
Le deuxième champ doit être une suite de majuscules
Couper le troisième champ en sous-champs sur le caractère "-"
Vérifier qu’il y a trois sous-champs
Que ces trois sous-champs ont des valeurs plausibles
Vérifier que le quatrième champ contient un seul caractère
Et que ce caractère est "M" ou "F" et rien d’autre
Vérifier que le cinquième champ comporte dix caractères
Et qu’il contient 0 suivi de dix chiffres
La commande suivante liste les lignes non conformes, en les faisant précéder du
numéro de ligne et du nombre d’erreurs détectées :
kyle> awk –posix –f check.awk annuaire.txt
1 1 Georges TARTEMPION 12 2 1967 M 038898422524
5 3 Antonio VAVILDA 16 5 1937 M
7 11 J'en ai assez de ce travail fastidieux!
9 11 ligne vide
10 3 Anatole SUISSE 1 2 1965 n 4
11 1 Antonino SZWPRESWKY 16 5 8937 M 0298358745

Exercice 5:

Listez les noms de login de tous les utilisateurs de votre système qui n’ont pas de
programme de démarrage (dans /etc/passwd).

Correction exercice 5 :

Il faut tester si le septième champ du fichier /etc/passwd est vide.
kyle> awk –F: '$7 = "" {print $1}' /etc/passwd

Exercice 6:

Les messages électroniques SMTP sont constitués exclusivement de caractères
ASCII imprimables (pas de caractères spéciaux). Leur structure est simple : un entête
précède le corps du message.
L’en-tête commence toujours par une ligne : "From " (From suivi d’un espace). La
fin de l’en-tête est toujours signalée par une ligne vide. Vous savez que votre boite
d’entrée est le fichier /var/spool/mail/$LOGNAME. Vous savez donc tout ce
qu’il faut savoir pour écrire un shell script qui envoie sur sa sortie standard :
- le nombre de messages en attente dans votre boite d’entrée ;
- les champs "From: " et "Subject: " du dernier message.

Correction exercice 6 :

Le fichier chkmail.awk contient :
/^From / {n++}
/^From: / {FROM=$0}
/^Subject: / {SUBJ=$0}
END {print n," messages";print FROM;print SUBJ}
Le fichier checkmail contient le script suivant :
#!/bin/sh
awk f chkmail.awk /var/spool/mail/$USER
Le lancement de ce script donne le résultat suivant :
xstra> ./checkmail
3 messages
From: jpa@pinson.u strasbg.fr
Subject: ou en est le chapitre 14 ???

Exercice 7:

Améliorez le script précédent pour qu’il fasse son travail deux fois par minute.

Correction exercice 7 :

Le script checkmail est modifié de la façon suivante :
#!/bin/sh
while true ; do
awk f chkmail.awk /var/spool/mail/$USER
sleep 30
done
Et il est maintenant lancé en tâche de fond :
kyle> ./checkmail &

Exercice 8:

Améliorer le script précédent pour qu’il reste silencieux si aucun message n’est
arrivé dans la période qui précède.

Correction exercice 8 :

Le script checkmail est modifié de la façon suivante :
#! /bin/sh
MABOITE=/var/spool/mail/$USER
STAMP=/tmp/timestamp.$USER
# ce fichier sert a connaitre l'instant auquel j'ai
# remarque une modification de ma boite aux lettres
rm –f $STAMP
while true ; do
if [ s $MABOITE ] ; then
if [ $MABOITE –nt $STAMP ] ; then
clear;
awk f chkmail.awk $MABOITE
touch $STAMP
fi
fi
sleep 30
done

Exercice 9:

Si vous travaillez dans l’environnement X11, lancez ce script en background dans
une petite fenêtre dans un coin de votre écran. Il est supérieur au programme xbiff
à deux points de vue :
- vous savez si le message qui vient d’arriver mérite le dérangement ;
- vous avez la satisfaction de l’avoir fait vous-même.

Correction exercice 9 :

kyle> xterm –geometry 60x7 0+0 +sb e ./checkmail &

Exercice 10:

Écrire un script qui lit un message sur son entrée standard et recopie :
- l’en-tête du message dans le fichier "./_header" ;
- le corps du message dans le fichier "./_body".
Un tel script est l’outil de base permettant d’automatiser le traitement des messages
à l’arrivée. Écrire une solution sed et une solution awk.

Correction exercice 10:

Le fichier splitmail.sed contient :
#n
1,/^$/w _header
/^$/,$ {
 /^$/d
w _body
}
La commande sed traitant le message est :
kyle> cat message | sed –f splitmail.sed
Le fichier splitmail.awk contient :
BEGIN {FICH = "_header"}
/^$/ {FICH = "_body"}
{print > FICH }
La commande awk traitant le message est :
kyle> cat message | awk –f splitmail.awk

Exercice 11:

Chercher un motif dans un fichier avec egrep, c’est facile :
egrep 'ere' fichier
Remplacer une chaîne qui vérifie une expression régulière par une nouvelle chaîne,
c’est facile aussi, mais moins, et c’est surtout long à taper, et il faut rediriger, ... Ce
qu’il faudrait, c’est un sed simplifié "à la grep", nommé remplace, à utiliser dans
les cas tous simples, comme par exemple :
remplace 'pays' 'paysage' *.txt
Ce qui signifie : dans tous les fichiers d’extension .txt, remplacer toute occurrence
de la chaîne pays par paysage.
Bien sûr, comme pour egrep, le premier argument est une expression régulière.

Correction exercice 11 :

#!/bin/bash
if [ $# lt 3 ] ; then # Il faut au moins trois arguments
echo erreur : remplace 'ere' 'nchaine' file..
exit 1
fi
ERE="$1" # le premier arg est l'expression
REPLACE="$2" # le deuxieme arg est la nouvelle chaine
SEP='%' # nous utiliserons % comme separateur
# (le caractere / pourra apparaitre dans l'expression)
shift; shift
# maintenant, $1 contient le premier nom de fichier
# faire une boucle sur tous les fichiers passes
# en arguments
while [ z$1 != z ] # teste si $1 n'est pas vide
# (encore un fichier a traiter?)
do
if [ f $1 ] ; then # $1 est un fichier
sed "s${SEP}${ERE}${SEP}${REPLACE}${SEP}g" $1 \
>/tmp/replace.$$
# le resultat est dirige vers un fichier
# temporaire qui est recopie sur le fichier
# d'origine si sed a effectue au moins une modification
[ $? = 0 ] && cat /tmp/replace.$$ >$1
else
echo $1 n\'est pas un fichier, ignore
# $1 peut etre un repertoire
fi
shift # pour passer au suivant, decaler les
# arguments d'un pas vers la gauche
done # et passer au suivant : fin de la boucle.
rm f /tmp/replace.$$
# faire le menage quand tout est fini
Read More

Exercices corrigés Linux : Réseaux

Exercice 1:

Dans une équipe disposant de plusieurs machines Unix/Linux reliées en réseau, un
utilisateur a pour nom de login pierre sur la machine courlis et pierrot sur la machine
sapin. La machine sapin est équipée d’une unité de sauvegarde sur cartouche, mais
pas la machine courlis. Comment fait cet utilisateur pour sauvegarder sur l’unité de
sauvegarde de sapin toute son arborescence personnelle de la machine courlis.

Correction exercice 1:

kyle> cd;hostname
courlis
kyle> tar cf . | gzip | rsh sapin l pierrot \
dd of /dev/rmt0 obs 20b conv sync
Bien sûr, il faut aussi que la confiance mutuelle soit établie, c’est-à-dire que les
fichiers ~/.rhosts sur les machines sapin contiennent la ligne :
courlis pierre

Exercice 2:

Récupérez sur le ftp anonyme de leonardo.u-strasbg.fr dans le répertoire
/pub/linux/exemples le fichier tout.tar.gz.

Correction exercice 2:

kyle> ftp leonardo.u strasbg.fr
Connected to leonardo.u strasbg.fr.
220 leonardo FTP server (Version wu 2.5.0(1) Tue Sep 21 16:48:12
EDT 1999) ready.
Name (leonardo.u strasbg.fr:xstra): anonymous
331 Guest login ok, send your complete e mail address as pas
sword.
Password: § saisie de votre e mail comme mot de passe
230 Guest login ok, access restrictions apply.
ftp> cd /pub/ linux/examples
250 CWD command successful.
ftp> ls

200 PORT command successful.
150 Opening ASCII mode data connection for file list.
. . . . . § suit une liste de noms dont le dernier :
tout.tar.gz
226 Transfer complete.
ftp> bin
200 Type set to I.
ftp> get tout.tar.gz
200 PORT command successful.
150 Opening BINARY mode data connection for tout.tar.gz (5820
bytes).
226 Transfer complete.
5820 bytes received in 0.008273 seconds (687 Kbytes/s)
ftp> quit
221 You have transferred 5820 bytes in 1 files.
221 Total traffic for this session was 6407 bytes in 2 transfers.
221 Thank you for using the FTP service on leonardo.
221 Goodbye.
/home/kyle>

Exercice 3:

Man multi-plateforme.
Une équipe dispose de plusieurs machines unix de constructeurs différents, dont
Linux, et l’utilisateur Pierre Colin dispose d’un login sur chacune de ces machines.
Son nom de login n’est pas le même sur chaque machine. Cet utilisateur est enregistré
sur les machines suivantes :
machine : login : Version d’Unix :
-----------+----------+-----------------
courlis : pierre : HP-UX
sapin : pierrot : SUN Solaris
mickey : pierre : IBM AIX
dingo : pcolin : Linux
Les commandes de même nom n’ont pas exactement les mêmes options et comportements
sur ces différents Unix, et le man de chaque machine précise exactement
leur fonctionnement. L’utilisateur pierre travaille normalement sur mickey, mais il
veut pouvoir simplement consulter le man sur les autres machines, sans avoir à
suivre une fastidieuse procédure de login. Il aimerait disposer des commandes
suman, hpman, liman, lui permettant de consulter le man respectivement de SUN,
HP et Linux lorsqu’il travaille sur sa machine habituelle.
man ls : le man de ls sur la machine locale (AIX)
suman ls : le man de ls sur la machine SUN (sapin)
hpman ls : le man de ls sur la machine HP (courlis)
liman ls : le man de ls sur la machine Linux (dingo)
Écrivez ces commandes.
Rassurez-vous : la solution est beaucoup plus courte que l’énoncé.

Correction exercice 3 :

La solution pourrait être tout simplement :
rsh autre machine man commande | less
Il est également possible de rediriger le résultat de la commande man vers un
fichier temporaire et de le parcourir avec less.
Le fichier (script) suman contient :
#!/bin/bash
TEMPFILE=/tmp/remoteman.$$
rm f $TEMPFILE # par precaution
# Ce script aura pour nom suman et hpman et liman
# par des liens durs
# Il prendra une decision selon le nom sous lequel
# il est invoque
MONOM=$(basename $0) # sous quel nom suis je invoque?
case $MONOM in
suman) REMOTEHOST=sapin; REMOTELOGIN=pierrot;;
hpman) REMOTEHOST=courlis; REMOTELOGIN=pierre;;
liman) REMOTEHOST=dingo; REMOTELOGIN=pcolin;;
esac
echo "man $1 sur $REMOTEHOST" >$TEMPFILE
rsh $REMOTEHOST l $REMOTELOGIN man $1 >>$TEMPFILE 2>>&1
more wvs $TEMPFILE
rm f $TEMPFILE
Il suffit maintenant de créer des liens durs hpman et liman sur suman :
kyle> ln suman hpman
kyle> ln suman liman

Bien sûr, il faut aussi que la confiance mutuelle soit établie, c’est-à-dire que les
fichiers ~/.rhosts sur les machines sapin, courlis et dingo contiennent la ligne :
mickey pierre

Exercice 4:

Ftp en différé.
Si votre machine Linux est directement connectée à l’Internet, vous pouvez souvent
constater que les temps de transfert par ftp peuvent devenir très longs à certaines
heures de la journée. Il est très intéressant de lancer ce ftp à des heures moins chargées,
ce qui est possible par la commande at. Comment faites-vous pour récupérer
dans 8 heures et par un ftp anonyme, le fichier texte /pub/README et le fichier
binaire /pub/shell/prog.tar.gz sur la machine ftp.machine.domaine et
placer ces deux fichiers dans le répertoire /home/florent/bidon ?

Correction exercice 4 :

Dans cet exemple l’utilisateur a pour login : florent.
Première étape : création du fichier ~/.netrc ayant le contenu suivant :
(<TAB> représente le caractère tabulation, il ne doit pas être omis)
machine ftp.machine.domaine login anonymous password ftp
<TAB>macdef init
<TAB>lcd /home/florent/bidon
<TAB>cd /pub
<TAB>ascii
<TAB>get README
<TAB>cd /pub/shell
<TAB>binary
<TAB>get prog.tar.gz
<TAB>quit
Deuxième étape : lancer la commande ftp par at
kyle> at now + 8 hours
at> /usr/bin/ftp ftp.machine.domaine
at> <ctrl D>
Job florent.918048.a will be run at Wed Feb 3 03:14:08
kyle> at –l
florent.918048.a Wed Feb 3 03:14:08 NFT 1999
kyle>
La sortie standard et la sortie erreur standard de cette commande ftp seront
envoyées à l’utilisateur florent par mail.
Le programme ncftp est beaucoup plus pratique que le programme ftp de
base, et il est installé dans la plupart des distributions Linux. La solution avec
ncftp n’est pas différente.
Read More

Exercices corrigés Linux : Gestion des processus

Exercice 1:

Écrivez un shell script qui cherche dans votre arborescence personnelle tous les fichiers
de noms core, *.tmp, a.out qui n’ont pas été accédés depuis plus de 3 jours, les
supprime et vous envoie la liste par mail. Ce script sera exécuté tous les jours à trois
heures du matin, sauf les samedi et dimanche.

Correction exercice 1 :

Dans cet exemple l’utilisateur a pour login : xavier. Le fichier (script)
/home/xavier/bin/menage contient :
#!/bin/bash
# la commande xargs cmd construit une commande
# en combinant cmd et les parametres qu'elle
# lit sur son entree standard (voir man xargs)
# exemple :
# echo a b c d | xargs rm
# devient la ligne de commande
# rm a b c d
cd /home/xavier
TMP /tmp/menage.$$
rm f $TMP
find . type f name core atime +2 print >$TMP
find . type f name '*.tmp' atime +2 print >>$TMP
find . type f name 'a.out' atime +2 print >>$TMP
if [ s $TMP ] ; then
xargs rm <$TMP
mail s "fichiers effaces" xavier <$TMP
fi
rm f $TMP

Ce script est lancé en cron par la commande crontab e permettant d’écrire
dans la crontab l’entrée suivante :
# mn h jourdumois mois jourdelasemaine commande
0 3 * * 1,2,3,4,5 /home/xavier/bin/menage >/dev/null
Remarquez que la sortie erreur standard n’a pas été redirigée. Les messages
d’erreur, s’il y en a, seront envoyés à l’utilisateur par mail.

Exercice 2:

Écrivez le shell script killprog qui permet d’envoyer le signal SIGKILL à un
processus désigné non pas par son PID mais par son nom : killprog bash. Il
faudra prendre garde au fait que plusieurs processus différents peuvent porter le
même nom, en présenter clairement la liste, et toujours demander confirmation avant
d’envoyer le signal.

Correction exercice 2 :

Le shell script /home/xavier/bin/killprog contient :
#!/bin/bash
MOI $(basename $0) # le nom du script
TEMPO /tmp/$MOI.$$ # un nom de fichier temporaire
CLAVIER $(tty) # mon tty, servira plus tard
if [ $# ! 1 ] ; then # un argument obligatoire
ps fu $(id u) # sinon, lister les process
echo e "\nUsage : $MOI nom du process a tuer"
 exit 2 # et sortir en erreur
fi
if ps fC $1 >$TEMPO # liste des process candidats
then # si au moins 1 de ce nom
cat $TEMPO # montrer les candidats
awk 'NR>1' $TEMPO | while read MONUID PROCESSID RESTE
do # demander confirmation pour chacun
echo n "KILL KILL $PROCESSID ? : "
read REPONSE <$CLAVIER # ne PAS lire STDIN (pipe)
if [ $REPONSE 'oui' ] ; then
if kill KILL $PROCESSID ; then
echo $PROCESSID killed # il est bien mort !
fi
fi
done
else
echo aucun process ne porte le nom $1
rm f $TEMPO
exit 1
fi
rm f $TEMPO
Read More

Exercices corrigés Linux : Gestion de l’espace disque

Exercice 1:

Créez un fichier texte et un lien dur sur ce fichier dans le même répertoire.
Vérifiez que les deux noms correspondent au même inode.
Changez les permissions de l’un et vérifiez que les permissions de l’autre ont suivi.
Modifiez le contenu de l’un et relisez le contenu de l’autre.
Supprimez l’un, que devient l’autre ? Essayez de créer un nouveau lien entre un de
ces noms et un nouveau nom dans /tmp. Expliquez.

Correction exercice 1:

kyle> cd; echo tout va bien >fichtext
kyle> ln fichtext lientext
kyle> ls il fichtext lientext
13407 rw r r 2 kyle staff 13 Jan 11 15:26 fichtest
13407 rw r r 2 kyle staff 13 Jan 11 15:26 lientest
kyle> chmod ug=rwx,o= fichtext
kyle> ls il fichtext lientext
13407 rwxrwx 2 kyle staff 13 Jan 11 15:26 fichtest
13407 rwxrwx 2 kyle staff 13 Jan 11 15:26 lientest
kyle> echo tout va de mieux en mieux >>fichtext
kyle> cat lientext
tout va bien
tout va de mieux en mieux
kyle> rm fichtext
kyle> cat lientext
tout va bien
tout va de mieux en mieux
kyle> ln lientext /tmp/lientemp
ln: cannot create hard link '/tmp/lientemp' to
'lientetx': Invalid cross device link
Un lien dur correspond au fait que un seul inode porte deux noms différents.
Du fait que la numérotation des inodes est interne à chaque file system, il est impossible
de créer un lien dur entre deux noms appartenant à deux file system différents.

Exercice 2:

L’option -l de la commande ls permet de connaître le nombre de liens sur un
fichier régulier (deuxième champ). Curieusement, ce champ n’est pas égal à 1 pour
les répertoires, alors qu’il n’est pas possible de créer de liens durs sur des répertoires.
Expliquez la valeur de ce nombre sur votre répertoire d’accueil.

Correction exercice 2:

kyle> cd; ls –ld .
drwx x x 8 kyle staff 2560 Jan 11 14:14 ./
Mon répertoire d’accueil /home/xstra porte plusieurs noms, 8 dans cet
exemple, bien que je ne puisse pas créer de liens durs sur ce répertoire. En effet, il
porte les noms suivants :
kyle  dans le répertoire /home
. dans le répertoire /home/kyle
.. dans chaque sous-répertoire de /home/kyle
Le champ "reference count" de ls l vaut donc :
2 (kyle  et .) + le nombre de sous-répertoires de /home/kyle (.. dans
chaque sous-répertoire).

Exercice 3:

Créez un fichier texte et un lien symbolique sur ce fichier dans le même répertoire.
Quelles sont les permissions du lien symbolique ? Combien de liens possède le
fichier texte ? Avec la commande more, affichez le contenu du lien symbolique.
Effacez le fichier texte. Que devient le lien symbolique ?

Correction exercice 3 :

kyle> echo vive Linux >fich1
kyle> ln s fich1 sl
kyle> ls –ilF
total 8
398 rw r r 1 kyle staff 10 Jan 11 15:52 fich1
407 lrwxrwxrwx 1 kyle staff 5 Jan 11 15:52 sl@ > fich1
§ le lien porte un autre inode, sa longueur est de 5
§ (f.i.c.h.1), ses permissions n'ont pas de valeur.
kyle> more sl
vive Linux
kyle> rm fich1
kyle> ls ilF
407 lrwxrwxrwx 1 kyle staff 5 Jan 11 15:52 sl@ > fich1
kyle> more sl
sl: No such file or directory
§ Le lien pointe sur un nom inexistant (broken link)
kyle>

Exercice 4:

Le disque est plein de vide ! Écrire un petit script affichant sur la sortie standard la
taille cumulée de tous les fichiers réguliers situés sous le répertoire courant, et
l’espace disque total occupé par le répertoire courant et tout ce qu’il contient.do

Correction exercice 4 :

Il existe une différence entre l’occupation disque et la taille réelle des fichiers.
Ceci est dû à l’adressage en blocs (et fragments) sur le disque.
#!/bin/bash
declare i nbrbyte=0
declare i discused=0
declare i n
for i in $(find . type f print)
do
n=$(wc c <$i)
nbrbyte=$((nbrbyte+n))
done
echo Total bytes ... $nbrbyte
echo Disc used ......$(du ks | cut f1) Kbytes
Read More

Exercice corrigés Linux : Impression

Exercice 1:

Le répertoire courant contient, entre autres, les fichiers : bibal.h bibal.c et
README.
Pour imprimer ces trois fichiers en deux exemplaires, deux possibilités existent :
imprimer chaque fichier en deux exemplaires ou imprimer en deux exemplaires
l’ensemble des trois fichiers.
Quelles sont les commandes correspondantes ?

Correction exercice 1 :

Dans le premier cas, lpr est invoqué avec en paramètres les trois noms de fichier.
Dans le deuxième cas, la commande cat crée le flot à imprimer, ce flot est passé à
l’entrée standard de lpr.
kyle> lpr #2 bibal.h bibal.c README
kyle> cat bibal.h bibal.c README | lpr #2

Exercice 2:

Comment savoir combien de feuilles serait nécessaire pour imprimer, à raison de
deux ou trois pages par feuille, le résultat de la commande « ls l /usr/bin »
sur une imprimante PostScript ?

Correction exercice 2:

Il suffit d’imprimer sur l’imprimante « void » :
kyle> ls l /usr/bin | a2ps 2 –Pvoid
[stdin (plain): 42 pages on 21 sheets]
[Total: 42 pages on 21 sheets]
saved into the file `/dev/null'
[198 lines wrapped]
kyle> ls l /usr/bin | a2ps 3 –Pvoid
[stdin (plain): 28 pages on 10 sheets]
[Total: 28 pages on 10 sheets]
Read More

Exercices corrigés Linux : La programmation en shell

Exercice 1 :

Écrire un shell script qui écrit sur sa sortie standard les messages suivants :
mon nom est xxx
je suis appele avec yyy arguments
qui sont: 111 222 333 444
(xxx sera remplacé par le nom sous lequel ce shell script aura été invoqué, yyy par le
nombre d’arguments et 111, 222, etc. par les arguments en question). Quand ce
script fonctionnera correctement, invoquez le avec les cinq arguments :
Bienvenue dans le monde Linux
puis avec un seul argument contenant la chaîne de caractères : Bienvenue dans le
monde Linux

Correction exercice 1:

Le fichier monscript contient :
#!/bin/bash
echo mon nom est $0
echo je suis appele avec $# arguments
echo qui sont : $*
Et voilà comment on l’invoque :
kyle>./monscript Bienvenue dans le monde Linux
mon nom est ./monscript
je suis appele avec 5 arguments
qui sont : Bienvenue dans le monde Linux
kyle>./monscript 'Bienvenue dans le monde Linux'
mon nom est ./monscript
je suis appele avec 1 arguments
qui sont : Bienvenue dans le monde Linux

Exercice 2 :

Écrire un shell script démontrant que le shell fils hérite de son père, mais que le père
n’hérite pas de son fils.

Correction exercice 2 :

Le fichier papa contient :
#!/bin/bash
echo avant appel du fils
echo TERM = $TERM
echo PWD = $PWD
./fiston
echo apres appel du fils
echo TERM = $TERM
echo PWD = $PWD
Le fichier fiston contient :
#!/bin/bash
echo je suis le fils
echo mon heritage est:
echo TERM = $TERM
echo PWD = $PWD
echo je change
TERM='riendutout'
cd /tmp
 echo TERM = $TERM
echo PWD = $PWD
echo je me termine
L’exécution donne les résultats suivants :
kyle> ./papa
avant appel du fils
TERM vt100
PWD /home/moi/testunix
je suis le fils
mon heritage est:
TERM vt100
PWD /home/moi/testunix
je change
TERM riendutout
PWD /tmp
je me termine
apres appel du fils
TERM vt100
PWD /home/moi/testunix
Kyle>

Exercice 3 :

En utilisant exclusivement les commandes cd et echo, écrire le shell script
"recurls" réalisant la même fonction que la commande ls R. C’est à dire que
la commande recurls rep1 devra lister les noms de tous les fichiers et répertoires
situés sous le répertoire rep1, y compris les sous-répertoires et les fichiers
qu’ils contiennent. Une solution très simple consiste à rendre le script recurls
récursif. (un shell script est récursif s’il s’invoque lui-même).

Correction exercice 3 :

#!/bin/bash
exec 2>/dev/null # redirige stderr pour toute la suite
# au cas ou le script est invoque sans argument $1
# n'existe pas, la commande suivante devient cd .
# voir paragraphe 8.2.6b
cd ${1: .}
for i in * ; do
if [ d $i ] ; then
echo "$PWD/$i/ < repertoire"
$0 $i # le script s'invoque lui meme
else
echo $PWD/$i
fi
done

Exercice 4 :

Écrivez le script "rename" permettant de renommer un ensemble de fichiers. Par
exemple rename ’.c’ ’.bak’ aura pour effet de renommer tous les fichiers
d’extension .c en .bak. les fichiers f1.c et f2.c deviennent f1.bak et f2.bak.
Utilisez la commande basename.

Correction exercice 4 :

#!/bin/bash
# Si ce script a pour nom : rename
# rename .c .bak
# fait ce que DOS fait en : rename *.c *.bak
#
if [ $# ne 2 ] ;then
echo "invoque par rename '.c' '.bak'"
exit 0
fi
for i in *$1 ; do
mv $i $(basename $i $1)$2
done

Exercice 5 :

Et si vi gardait une copie de secours ?
vi est un peu délicat à maîtriser au début, et si on sort par :wq après avoir fait une
gaffe, tout est perdu. Ecrivez donc un petit script en Bash qui crée une copie de
secours. Appelons le svi, pour Safe VI. La commande svi fich1 devra invoquer
vi fich1, mais laisser derrière elle un fichier fich1.bak contenant la version
d’origine de fich1.
Pensez aux deux cas suivants :
Si je dis : svi tralala et que tralala n’existe pas?
Si je dis : svi fich1.bak, que se passe-t-il?

Correction exercice 5:

#!/bin/bash
# ce script doit etre invoque avec un seul argument
# svi fich
case $# in # Doit etre invoque avec un seul argument.
1) if [[ $1 != *.bak ]] ; then # vix fich1.bak ouvre
# fich1.bak en lecture seule
if [ ! s $1 ] ; then # si fich1 n'existe pas,
vi $1 # on le cree
exit
fi
if [ f $1 ] ; then # si fich1 est un nom
cp $1 $1.bak # de fichier on sauvegarde
if [ $? != 0 ] ; then # et on verifie
echo "Erreur : impossible de creer $1.bak" >2
exit 1
else
vi $1
exit
fi
else
echo "Erreur : $1 n\'est pas un fichier" >2
exit 1
fi
else
echo "ATTENTION : $1 est ouvert en lecture seule"
sleep 3
vi R $1
exit
fi;;
*) echo "Erreur : svi fichier" >2
exit 2;;
esac

Exercice 6 :

L’espace disque est précieux ! Une idée pour économiser : Ecrire un script qui
recherche dans toute mon arborescence tous les fichiers qui n’ont pas été accédés
depuis un temps T et dont la taille est supérieure a MIN, et les comprimer par l’utilitaire
gzip. T et MIN sont des constantes définies au début du script par des valeurs
judicieusement choisies. Au fait, a quoi sert MIN ?
Un tel script pourrait être lancé une fois par semaine.

Correction exercice 6 :

#!/bin/bash
# Pour lancer ce script une fois par semaine, (cron)
# voir corrige de l'exercice 12.6.1
# Les constantes T et MIN sont definies par des variables
typeset T=15 # Plus de 16 jours.
typeset i MIN=4096 # 4096 octets = 1 bloc pour AIX
# Il est inutile de comprimer un fichier dont la taille
# est inferieure a un bloc : il occupera toujours un
# bloc sur le disque (voir chapitre 10)
cd
for i in $(find . type f atime +$T size +$MINc print)
do
gzip $i
done

Exercice 7 :

Écrire un script dont le nom est process permettant de copier dans un tableau la liste
des processus de l’utilisateur exécutant ce script, puis afficher le nom de chaque
processus.

Correction exercice 7 :

#!/bin/bash
# ce script a pour nom process.
# Il montre l'utilisation de la substitution de commande
# et des tableaux.
# Ce script affiche les noms de vos processus.
# exemple: xstra> process
#
declare i i=7
declare i fin
declare a PROCESSTAB
PROCESSTAB=($(ps u $(id u)))
FIN=${#PROCESSTAB[*]}
until [ $i gt $FIN ] ;do
echo "programme=${PROCESSTAB[$i]}"
i=$i+4
done
Read More

Exercices corrigés Linux : Commandes Linux

Exercice 1 :

Quelles commandes Linux devez-vous exécuter pour obtenir à l’écran :
Il y a xxx utilisateurs de ce systeme dont le login shell est bash

Correction exercice 1 :

# Notez bien le "\" à la fin de certaines lignes
# Ce caractère indique que la ligne de commandes
# continue sur la ligne suivante.
kyle> echo Il y a $(grep bash /etc/passwd | wc –l) \
utilisateurs de ce systeme dont le login shell est bash

Exercice 2 :

En utilisant la commande find, trouvez et listez les noms de :
1) tous les fichiers sous le répertoire /etc dont les noms commencent par rc,
2) tous les fichiers réguliers vous appartenant ; mettez le résultat dans le fichier
/tmp/findmoi et les erreurs dans /dev/null,
3) tous les sous–répertoires de /etc,
4) tous les fichiers réguliers se trouvant sous votre répertoire d’accueil et qui n’ont
pas été modifiés dans les 10 derniers jours

Correction exercice 2 :

§ lister les fichiers sous le répertoire /etc
§ dont les noms commencent par rc
§ Ici, il y a un piège : il est certain qu'un
§ utilisateur n'ayant pas les privilèges de root ne peut
§ pas connaître la vraie réponse : des sous répertoires de
§ /etc sont rwx r x et l'utilisateur courant ne peut
§ pas y pénétrer.
§ ATTENTION : ligne suivante, remarquez bien : 'rc*'
kyle> find /etc –type f –name 'rc*' –print
/etc/rc
/etc/rc.net § Rien ne permet de savoir si cette
/etc/rc.powerfail § liste est exhaustive : des fichiers
/etc/rc.nfs § dont les noms commencent par rc
/etc/rc.tcpip § peuvent exister dans des répertoires
/etc/rc.local § auxquels je n'ai pas accès. Les
... § messages d’erreur permettront de
... § s’en convaincre.
kyle>
§ lister les fichiers réguliers qui m'appartiennent.
§ Ici, attention : des fichiers peuvent m'appartenir
§ sans se trouver dans mon arborescence personnelle.
§ Pour autant, il ne peut pas y en avoir partout !
§ Chercher à partir de / est inutile.
kyle> RACINE="$HOME /tmp /var/spool"
kyle> find $RACINE –type f –user kyle –print \
>/tmp/findmoi 2>/dev/null
... § > redirige le résultat vers /tmp/findmoi
§ 2> redirige les erreurs vers le fichier /dev/null
§ où les données vont disparaître.
kyle>
§ lister tous les sous répertoires de /etc
kyle> find /etc –type d –print
§ donnera un résultat incomplet. Les messages d'erreur
§ permettront de s'en convaincre.
§ lister tous les fichiers réguliers se trouvant sous
§ mon répertoire d'accueil et qui n'ont pas été modifiés
§ dans les 10 derniers jours.
kyle> cd
kyle> find . –type f –mtime +9 print

Exercice 3 :

Trouvez à partir de votre répertoire d’accueil, le nombre de fichiers ayant une taille
supérieure à 1 Mega-octets et stockez leurs noms dans un fichier (utilisez la
commande tee).

Correction exercice 3 :

§ Il suffit de rediriger le résultat de la commande find
§ dans le filtre tee pour stockage sur le disque puis
§ le filtre wc l pour compter
§ le nombre de lignes trouvées par find.
kyle> find $HOME –size 1000000c –print | tee \
/tmp/findres | wc l
10
kyle>

Exercice 4 :

Créez dans le répertoire rep1 le fichiers suivants : fich1, fich2, fich11,
fich12, fich1a, ficha1, fich33, .fich1, .fich2, toto, afich.
Listez les fichiers :
1) dont les noms commencent par fich,
2) dont les noms commencent par fich suivi d’un seul caractère,
 3) dont les noms commencent par fich suivi d’un chiffre,
4) dont les noms commencent par .,
5) dont les noms ne commencent pas par f,
6) dont les noms contiennent fich.

Correction exercice 4 :

kyle> mkdir rep1 ; cd rep1
kyle> touch fich1 fich2 fich11 fich12 ficha ficha1 \
fich33 .fich1 .fich2 toto afich
kyle> ls fich*
fich1 fich11 fich12 fich2 fich33 ficha ficha1
kyle> ls fich?
fich1 fich2 ficha
kyle> ls fich[0 9]
fich1 fich2
kyle> ls .??* § Ne pas prendre . et ..
.fich1 .fich2 § comparer à ls .*
kyle> ls [!f]*
afich toto
kyle> ls *fich*
afich fich1 fich11 fich12 fich2 fich33 ficha ficha1
kyle>

Exercice 5 :

Écrivez un alias en Bash permettant de lister page par page et dans l’ordre alphabétique
l’ensemble des variables d’environnement.

Correction exercice 5:

kyle> alias en="env|sort|less"
kyle>

Exercice 6 :

Créez un fichier de nom -i, puis supprimez-le.

Correction exercice 6 :

kyle> cat > i
Salut
<ctrl d>
kyle> rm i § Essayez rm i
Usage: rm [ Rfir] file
kyle> § Le fichier i est considéré par la commande rm
§ comme étant l’option i.
kyle> rm \ i § L’utilisation des caractères de
Usage: rm [ Rfir] file § neutralisation (voir paragraphe
§ 7.8) ne permet pas non plus
§ la suppression du fichier i.
kyle> rm ./ i § La solution consiste à définir le
§ fichier à supprimer en chemin relatif
§ ou absolu, ce qui évite de commencer
§ par le signe .
kyle>

Exercice 7 :

Il arrive souvent de lancer une commande Linux produisant plusieurs pages d’écran à
toute vitesse (par exemple : ls l /etc). Il faut alors relancer la même commande,
en envoyant sa sortie standard dans less, ce qui permet d’examiner le résultat page
par page. Si votre shell interactif est le Bash, cela ne doit pas être fastidieux : créez
l’alias p qui relance la dernière commande en envoyant sa sortie standard dans la
commande less.

Correction exercice 7 :

L’alias p est créé en utilisant le rappel de la dernière commande mémorisée et la
notion de tube :
kyle> alias p=”fc s | less”
Cet alias peut être placé dans votre fichier .bashrc.
Read More

Exercices corrigés Linux : L’interpréteur de commandes : Bash

Exercice 1 :

Écrivez votre propre commande "dir" affichant page par page les informations
données par la commande ls l, incluant les fichiers cachés (sauf . et ..).

Correction exercice 1 :

La solution la plus élégante en Bash consiste à créer une fonction.
kyle> dir ()
{ § cette fonction peut être
ls Al $* | more § définie dans un fichier "d’initialisation"
}
kyle> dir *.c
rw r r 1 kyle staff 146 Jan 11 17:41 hello.c
rw r r 1 kyle staff 198 Jan 11 17:47 plc.c
kyle>

Exercice 2 :

Écrivez un alias imposant la confirmation sur la suppression des fichiers.
Écrivez la commande "psmoi" permettant d’obtenir la liste de tous les processus
vous appartenant (utilisez la commande ps).

Correction exercice 2 :

kyle> alias rm="rm i"
kyle> alias psmoi="ps f u $LOGNAME"

Exercice 3 :

Vous souhaitez modifier :
1) l’invite afin qu’elle indique le nom de l’ordinateur sur lequel vous travaillez et
votre répertoire courant,
2) la valeur par défaut des protections des fichiers et répertoires que vous allez créer.
De plus vous souhaitez retrouver ces modifications lors de chacune de vos entrées en
session.

Correction exercice 3 :

kyle> PS1="\h:$PWD> "
courlis:/home/kyle> umask 027
§ Ces deux commandes doivent être placées dans
§ le fichier $HOME/.bash_profile ou le fichier .bashrc
§ afin d'être prise en compte lors de votre
§ prochaine entrée en session.

Exercice 4 :

Écrivez votre propre fonction "fd" permettant de rechercher à partir du répertoire
courant l’emplacement d’un répertoire. Testez votre fonction en recherchant tous les
répertoires commençant par r.

Correction exercice 4 :

La solution la plus élégante en Bash consiste à créer une fonction.
kyle> fd ()
{ § cette fonction peut être
find . name "$1" type d print § définie dans le
} § fichier .bashrc
kyle> fd ’r*’
./medimax/rendu3d
./prog/resultats
kyle>
Read More

Exercices corrigés Linux : Protection des fichiers

Exercice 1 :

En utilisant les commandes mkdir, echo et cat, créez dans un nouveau répertoire
de nom "reptest" le fichier "bienvenue" contenant la ligne de commandes :
echo Bienvenue dans le monde Linux
Exécutez ce fichier.

Correction exercice 1 :

kyle> mkdir reptest
kyle> cd reptest
kyle> cat >bienvenue
echo Bienvenue dans le monde Linux
<ctrl D>
kyle> chmod u+x bienvenue
kyle> ./bienvenue
Bienvenue dans le monde Linux
kyle>

Exercice 2 :

En utilisant les commandes mkdir, echo, cp, chmod, cat, créez un fichier que
vous pouvez lire, modifier et supprimer.

Correction exercice 2 :

kyle> mkdir rep
kyle> cd rep
kyle> echo lire modifier supprimer >ficha
kyle> ls l ficha
rw r r 1 xstra staff 24 Jan 28 16:08 ficha
kyle> cat ficha
lire modifier supprimer
kyle> echo et remodifier >>ficha § Permet de rajouter
§ (et remodifier) dans ficha.
kyle> cat ficha
lire modifier supprimer
et remodifier
kyle> rm ficha
kyle> ls
kyle>

Exercice 3 :

En utilisant les commandes mkdir, echo, cp, chmod, cat, créez un fichier que
vous pouvez lire et supprimer mais que vous ne pouvez modifier.

Correction exercice 3 :

kyle> mkdir rep
kyle> cd rep
kyle> echo lire supprimer >ficha
kyle> chmod u w ficha
kyle> ls –l ficha
r rw 1 kyle staff 15 Jan 28 11:54 ficha
kyle> cat ficha
lire supprimer
kyle> echo modifier >>ficha
ficha: permission denied
kyle> rm ficha
rm: Do you wish to override protection 460 for ficha? y
kyle>

Exercice 4 :

En utilisant les commandes mkdir, echo, cp, chmod, cat, créez un fichier que
vous pouvez lire mais que vous ne pouvez ni modifier, ni supprimer.

Correction exercice 4 :

kyle> mkdir rep
kyle> cd rep
kyle> echo lire >ficha
kyle> chmod u w ficha
kyle> chmod u w . § Modifie les protections du
§ répertoire courant (.) c’est à dire rep.
kyle> cat ficha
lire
kyle> echo modifier >>ficha
ficha: permission denied
kyle> rm ficha
rm: remove write protected file `ficha'? y
rm: cannot unlink `ficha': Permission denied
kyle> ls
ficha
kyle>

Exercice 5 :

Dans quel cas les permissions d’un fichier à sa création sont-elles différentes des
permissions fixées par umask ?

Correction exercice 5 :

Quand le nouveau fichier est créé par la commande :
cp fichier existant nouveau fichier, il prend les permissions du
fichier existant. Il ne faut pas oublier également que la permission x n'est
jamais attribuée à un fichier à sa création, même si umask le spécifie.
kyle> umask 007
kyle> touch fichtest
kyle> mkdir reptest
kyle> ls l reptest fichtest
total 8
rw rw 1 kyle staff 0 Jan 11 11:54 fichtest
drwxrwx 2 kyle staff 512 Jan 11 11:54 reptset
kyle>

Exercice 6 :

Si vous pouvez travailler avec un collègue appartenant au même groupe que vous,
modifiez les permissions du fichier créé à l’exercice "Bienvenue" ci-dessus de telle
façon que votre collègue puisse le lire et l’exécuter, mais ne puisse pas le modifier ni
le supprimer.
Pouvez-vous modifier les permissions de ce fichier de telle sorte que votre collègue
puisse le lire, le modifier et l’exécuter alors que vous-même ne pouvez pas le modifier?


Correction exercice 6 :

kyle> chmod g+x reptest
§ les membres de mon groupe peuvent faire cd reptest
kyle> cd reptest
kyle> chmod g=rx bienvenue
§ les membres de mon groupe peuvent lire et executer
§ le fichier bienvenue
kyle> ls l bienvenue
rwxr x 1 kyle staff 29 Jan 25 17:54 bienvenue
kyle> chmod u w,g+w bienvenue
§ Je ne peux plus modifier bienvenue, alors que
§ les membres de mon groupe peuvent le faire
kyle> ls l bienvenue
r xrwx 1 kyle staff 29 Jan 25 17:57 bienvenue
kyle>

Exercice 7 :

Comment est attribuée la permission d’effacer un fichier ? Créez un fichier que votre
collègue peut modifier mais pas supprimer et un autre qu’il peut supprimer mais pas
modifier. Est-il logique de pouvoir attribuer de tels droits ? Quelles sont les conséquences
pratiques de cette expérience ?

Correction exercice 7 :

La permission d’effacer un fichier n’est pas attribuée au fichier lui-même, mais
elle dépend uniquement du droit d’écriture dans le répertoire qui le contient. Voici
comment créer un fichier que les membres de mon groupe peuvent modifier mais
pas supprimer :
kyle> mkdir –m 750 rep1
kyle> cd rep1
kyle> echo bonjour >fich1
kyle> chmod g=rw fich1
Les membres de mon groupe ne peuvent pas supprimer fich1, mais ils peuvent
effacer tout son contenu par : cp /dev/null fich1
Maintenant, voici comment créer un fichier que les membres de mon groupe
peuvent supprimer mais pas modifier :
kyle> mkdir –m 770 rep2
kyle> cd rep2
kyle> echo bonjour >fich2
kyle> chmod g=r fich2
Les membres de mon groupe ne peuvent pas modifier fich2, mais ils peuvent le
supprimer ! Ceci est une gaffe techniquement faisable !
De telles permissions semblent illogiques. Les permissions linux sont codées sous la
forme rwx rwx rwx, ce qui conduit à 512 possibilités. Il est évident que parmi
les 512 possibilités, toutes ne correspondent pas à des permissions réellement intéressantes.
Tout ceci montre que l’utilisateur de Linux doit être vigilant non seulement
sur les permissions des fichiers, mais aussi sur les permissions des répertoires
dans lesquels il place des fichiers accessibles aux autres utilisateurs.
Read More

Exercices corrigés Linux : Système de fichiers

Exercice 1 :

Dans votre répertoire d’accueil, créez l’arborescence suivante, en n’utilisant que des
chemins relatifs :
rep1
|---fich11
|---fich12
|---rep2
| |---fich21
| |---fich22
|---rep3
| |---fich31
| |---fich32

Correction exercice 1 :

kyle> cd
kyle> mkdir rep1 rep1/rep2 rep1/rep3
kyle> cd rep1
kyle> cat >fich11
tout va bien
<ctrl d>
kyle> cp fich11 fich12
kyle> cp fich11 rep2/fich21
kyle> cp fich11 rep2/fich22
kyle> cp fich11 rep3/fich31
kyle> cp fich11 rep3/fich32

Exercice 2 :

Comment déplacer toute l’arborescence rep3 sous le répertoire rep2 ? Supprimez
tout sauf rep1, fich11 et fich12.

Correction exercice 2 :

kyle> cd rep1
kyle > mv rep3 rep2/rep3
kyle > cd ..
kyle> ls –RF rep1
rep1:
fich11 fich12 rep2/
rep1/rep2:
fich21 fich22 rep3/
rep1/rep2/rep3:
fich31 fich32
kyle> cd rep1/rep2/rep3
kyle> rm fich31 fich32
kyle> cd ..
kyle> rmdir rep3
kyle> ls fich2* § Vérifiez avant de supprimer
kyle> rm fich2*
kyle> cd ..
kyle> rmdir rep2
kyle>

Exercice 3 :

À l’aide de la commande id, déterminez votre UID et votre groupe (nom de
groupe et GID). Combien y a-t-il d’utilisateurs dans votre groupe ?

Correction exercice 3 :

La commande man vous permet de connaître la syntaxe et le résultat de la
commande id.
kyle> man id
§ affichage page par page de la documentation
§ relative à la commande id

kyle> id
uid 2001(kyle) gid 200(staff)
xstra> grep staff /etc/group
staff:!:200:benoit,jocelyne,martine,kyle
kyle> § Il y a 4 utilisateurs dans le groupe staff.
Read More

Exercices corrigés Linux : Connexion d’un utilisateur

Exercice 1 :

Après votre connexion au système, votre nom de login est « kyle », modifiez votre
mot de passe si vous estimez qu’il est trop facile à deviner.

Correction exercice 1 :

kyle> passwd
Changing password for kyle
Old password: § Saisie de votre ancien mot de passe
New password: § Saisie de votre nouveau mot de passe
Re enter new password: § Seconde saisie de votre
§ nouveau mot de passe
kyle>

Exercice 2 :

Vous exécutez la commande suivante :
kyle> sleep 60
L’exécution de cette commande dure 1 minute. Comment interrompre cette
commande et reprendre la main ?

Correction exercice 2:

kyle> sleep 60
§ Vous n’avez pas la main. Vous ne pouvez pas
§ executer un autre programme. Pour interrompre le
§ programme sleep il faut tapez <ctrl C>. Le prompt
§ apparait à nouveau.
<ctrl c>
kyle>
Read More

mercredi 16 novembre 2011

L'installation et la configuration de SAMBA sous Linux


Un des principaux intérêts des réseaux est la possibilité de partager des fichiers.
Il existe des protocoles (notamment le FTP, File Transfert Protocol) permettant de transférer des fichiers à l'aide de commandes à travers un réseau hétérogène.
Toutefois, ce type de manipulation est assez fastidieux. Ainsi, les réseaux Microsoft Windows offrent une manière totalement transparente de partager des fichiers, en permettant notamment la copie par simple glissé-déposer.
Cependant, ce type de réseau ne permet à la base qu'un partage de fichiers entre machines fonctionnant avec un système Microsoft Windows.

Read More

vendredi 11 novembre 2011

L'installation et la configuration du DNS sous fedora (distribution LINUX)


Le Domain Name System (ou DNS, système de noms de domaine) est un service permettant d'établir une correspondance entre une adresse IP et un nom de domaine et, plus généralement, de trouver une information à partir d'un  nom de domaine . Il fut crée en 1983 par Paul Mockpetris.
Avant le DNS, la résolution d'un nom sur Internet devait se faire grâce à un fichier texte appelé HOSTS.TXT maintenu par le NIC(Network Information Center) du Stanford Research Institute (SRI) et recopié sur chaque ordinateur par transfert de fichier.

Read More

Partenaires

Computers Blogs
Ajoutez votre site

Contactez-nous

Nom

E-mail *

Message *

Tous droits resérvés-www.exercices-corriges.com Seo Blogger Templates