TP Réseau
TP Réseau
TP Réseau
Corrections des
exercices du TP n°1
RET Infos système
OUR Quel est le uname -a
Linux hector 2.6.15-27-386 #1 PREEMPT
système Fri Dec 8 17:51:56 UTC 2006 i686
GNU/Linux
installé?
Quelle est cat /etc/issue
Ubuntu 6.06.1 LTS \n \l
la
distribution
installée?
Quels sont who
nico :0 2007-01-14 16:25
les
utilisateurs
en cours du
système?
Ouvrir un su user
nouveau
terminal en
utilisant un
autre
compte.
Fermer ce exit
terminal.
La commande man
Tester la man man
man is the systems manual pager. Each
commande page argument given to man is normally
the name of a program, utility or
man pour function.
obtenir de
l'aide sur
man.
Quelles
sont les
commandes
susceptible
s d'être
documentée
s dans man?
Contenu de répertoires et de fichiers ascii
(texte)
Lister le contenu ls /etc
du répertoire
/etc.
Lister de manière ls -l /etc
ls -la /etc
détaillée le
Tous ces fichiers sont bien
contenu du
présents.
répertoire /etc.
Les fichiers
nommés "passwd",
"shadow", "group"
et "gpasswd"
sont-ils présents
dans /etc?
Lister le contenu ls /dev
du répertoire
/dev.
Lister le contenu cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
du fichier daemon:x:1:1:daemon:/usr/sbin:/bi
n/sh
/etc/passwd. bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/syn
c
games:x:5:60:games:/usr/games:/bi
n/sh
man:x:6:12:man:/var/cache/man:/bi
n/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/s
h
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/
bin/sh
...
user,,,:/var/run/hplip:/bin/false
nico:x:1000:1000:Nico,,,:/home/ni
co:/bin/bash
répertoire /etc
contenant la
chaine de
caractères "root".
Rechercher la find / -name stdio.h
...
localisation du find: /tmp/kde-root: Permission
non accordée
fichier "stdio.h" /usr/include/bits/stdio.h
dans le système /usr/include/stdio.h
de fichier de
votre installation.
A l'aide de la od -x monfichier.dos
0000000 6e75 0a0d 6564 7875 0a0d
commande "od", 7274 696f 0d73
0000020 710a 6175 7274 0d65 630a
illustrer la 6e69 0d71 730a
différence 0000040 7869 0a0d 6573 7470 0a0d
0a0d 0a0d 0a0d
majeure existant 0000060 0a0d 0a0d
0000064
entre les types de od -c monfichier.dos
fichier ascii 0000000 u n \r \n d e u x \r \n t
r o i s \r
(texte) DOS, 0000020 \n q u a t r e \r \n c i
n q \r \n s
UNIX et 0000040 i x \r \n s e p t \r
Macintosh. \n \r \n \r \n \r \n
0000060 \r \n \r \n
Utiliser le fichier 0000064
ascii od -x monfichier.unix
0000000 6e75 640a 7565 0a78 7274
Dos montexte.dos 696f 0a73 7571
0000020 7461 6572 630a 6e69 0a71
fourni en lien et 6973 0a78 6573
0000040 7470 0a0a 0a0a 0a0a
créer les fichiers 0000050
ascii Unix od -c monfichier.unix
0000000 u n \n d e u x \n t r o i
"montexte.unix" s \n q u
et ascii Macintosh 0000020
x \n s e
a t r e \n c i n q \n s i
"montexte.mac" 0000040 p t \n \n \n \n \n \n
0000050
avec le même od -x monfichier.mac
contenu au moyen 0000000 6e75 640d 7565 0d78 7274
696f 0d73 7571
d'un éditeur 0000020 7461 6572 630d 6e69 0d71
6973 0d78 6573
texte (Kate par 0000040 7470 0d0d 0d0d 0d0d
exemple) puis 0000050
od -c monfichier.unix
comparer (version s \r q u
0000000 u n \r d e u x \r t r o i
Macintosh si 0000020 a t r e \r c i n q \r s i
x \r s e
l'éditeur le 0000040 p t \r \r \r \r \r \r
0000050
permet).
Codage des fins de ligne sous
Quelle est la
Dos par les deux caracteres
différence?
0x0D et 0x0A.
Codage des fins de ligne sous
Unix par le seul caractere
0x0A.
Codage des fins de ligne sous
Macintosh par le seul
caractere 0x0D.
Utiliser les cmp monfichier.unix
monfichier.dos
commandes de monfichier.unix monfichier.dos
comparaison de sont différents: octet 3, ligne 1
diff monfichier.unix
monfichier.mac
1,12c1
< un
< deux
< trois
< quatre
< cinq
< six
< sept
<
<
<
<
<
---
septre
\ Pas de fin de ligne à la fin
du fichier.
Combien de wc monfichier.unix
12 7 40 monfichier.unix
lignes, de mots et wc monfichier.dos
de caractères 12 7 52 monfichier.dos
wc monfichier.mac
comportent les 0 7 40 monfichier.mac
fichiers
"montexte.unix",
"montexte.dos" et
"montexte.mac"?
Commandes
Se localiser dans pwd
la hiérarchie.
Détecter la ls -la
total 8
présence de drwxr-xr-x 2 nico nico 4096
2007-02-01 11:25 .
fichiers/répertoi drwxr-xr-x 22 nico nico 4096
res. 2007-02-01 11:25 ..
Oui, mais ce sont les entrées
vers la racine
du repertoire et la racine du
répertoire père
Entrer du texte echo aaaaaaaaaaaaaaaaaa
>Mon_fichier
dans
Mon_fichier.
Lister le contenu cat Mon_fichier
aaaaaaaaaaaaaaaaaa
de Mon_fichier.
Lister son propre ls
Mon_fichier
répertoire. ls -la
total 12
drwxr-xr-x 2 nico nico 4096
2007-02-01 11:28 .
drwxr-xr-x 22 nico nico 4096
2007-02-01 11:25 ..
-rw-r--r-- 1 nico nico 19
2007-02-01 11:28 Mon_fichier
Revenir sous le cd ..
rmdir Source
répertoire de
départ et
détruire
"Source".
Créer un touch Mon_fichier_2
ls -la
deuxième fichier total 16
drwxr-xr-x 3 nico nico 4096
Mon_fichier_2. 2007-02-01 11:31 .
drwxr-xr-x 22 nico nico 4096
2007-02-01 11:31 ..
drwxr-xr-x 2 nico nico 4096
2007-02-01 11:29 Data
-rw-r--r-- 1 nico nico 19
2007-02-01 11:28 Mon_fichier
-rw-r--r-- 1 nico nico 0
2007-02-01 11:31 Mon_fichier_2
2. Modification du profile
Exemple de script possible, dans /etc/profile
pour éviter de le recopier pour chaque
utilisateur:
echo "Bienvenue"
echo "entrez U pour travailler dans
votre repertoire"
echo "entrez G pour travailler dans le
repertoire de votre groupe"
read CHX
while [ $CHX != 'U' ] && [ $CHX !=
'G' ]
do
echo "Entrez U ou G ..."
read CHX
done
if [ $CHX == "G" ]
then
case $USER in
"u1") export HOME=/home/group1;;
"u2") export HOME=/home/group1;;
"u3") export HOME=/home/group2;;
"u4") export HOME=/home/group2;;
esac
cd $HOME
fi
3. Choix de la valeur du umask
Les valeurs conseillées sont:
- 066 pour échanger facilement des fichiers avec
l'ensemble des utilisateurs
- 067 pour échanger des fichiers seulement avec
les membres des groupes dont on est membre,
- 077 pour travailler seul.
"Les valeurs 066 et 067 offrent le meilleur
compromis entre la sécurité et la souplesse. Elles
permettent le parcours des répertoires sans en
autoriser l'examen avec la commande "ls" tout en
autorisant l'accès à des répertoires fils dont les
droits seront plus permissifs, utilisés pour
échanger des fichiers…" dans "Unix utilisation
administration système et réseau" par Christian
Pellisier.
Dans notre exemple, on choisit plutôt la valeur
067.
TP n°2
RET Ecriture de shells
OUR Travailler dans un répertoire nommé "TP2" créé à
la racine de votre HOME.
Exercice 1
Créer un script shell nommé "change" qui
affichera la date de dernière modification d'un
fichier puis la modifiera avec l'heure actuelle et
enfin réaffichera la date de dernière
modification du fichier.
Cette procédure acceptera 1 paramètre qui sera
le nom du fichier.
Lorsque vous exécuterez "change mon_fic", le
8 octobre à 15 heures 12 vous obtiendrez le
résultat:
avant : -r--r--r-- 1 user group 40 Fev
3 2001 mon_fic
après : -r--r--r-- 1 user group 40 Oct
8 15:12 mon_fic
Exercice 2
Créer un script shell nommé "nombreJours" qui
affichera le nombre de jours du mois courant.
"nombreJours" affichera pour février 2007 le
message "28 jours en février 2007".
Exercice 3
Créer un script shell réalisant la création d'un
répertoire "Exo3" contenant 10 fichiers nommés
"Un" à "Dix". Chaque fichier contient une seule
ligne:
"Un" contient "Première ligne"
"Deux" contient "Deuxième ligne"
...
"Dix" contient "Dixième ligne"
i. Vérifier que le répertoire à créer n'existe
pas déjà auquel cas il ne sera pas recréé
mais les fichiers si.
Exercice 4
Créer un script shell qui réalise les opérations
suivantes:
Création sous votre répertoire "TP2" d'un
sous répertoire nommé "annéemoisjour"
(20070202 pour le 2 février 2007).
Copie des fichiers de "Exo3" sous ce
répertoire puis effacement de ces mêmes
fichiers de "Exo3".
Création de deux fichiers sous le
répertoire d'accueil (HOME) de la personne
qui a lancé le shell:
o un fichier nommé
"Gros_fichier.numero_du_shell" dans
lequel se trouvera le contenu
concaténé des fichiers traités
o un fichier nommé
"Nom_du_script.numero_du_shell"
dans lequel se trouvera le nom des
fichiers traités.
i. Vérifier que le répertoire à créer n'existe
pas déjà.
Exercice 5
Créer un script permettant d'afficher la
liste des fichiers du répertoire /etc
accessibles en lecture.
Créer un script permettant d'afficher la
liste des fichiers du répertoire /etc
accessibles en écriture.
Exercice 6
Créer un script nommé "table" permettant
d'afficher des tables de multiplication.
"table 5 10" aura pour résultat l'affichage:
0 x 5 = 0
1 x 5 = 5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
10 x 5 = 50
Corrections
des exercices
du TP n°2
RETO Exercice 1
UR Créer un script shell nommé
"change" qui affichera la
date de dernière modification
d'un fichier puis la modifiera
avec l'heure actuelle et enfin
réaffichera la date de
dernière modification du
fichier.
Cette procédure acceptera 1
paramètre qui sera le nom du
fichier.
Lorsque vous exécuterez
"change mon_fic", le 8
octobre à 15 heures 12 vous
obtiendrez le résultat:
avant : -r--r--r-- 1
user group 40 Fev 3
2001 mon_fic
après : -r--r--r-- 1
user group 40 Oct 8
15:12 mon_fic
AVANT=$(ls -l $1) touch
$1 APRES=$(ls -l $1)
echo "Avant : "$AVANT
echo
"Apres : "$APRES
change.bash
Exercice 2
Créer un script shell nommé
"nombreJours" qui affichera
le nombre de jours du mois
courant.
"nombreJours" affichera
pour février 2007 le message
"28 jours en
février 2007".
MOIS=$(date +"%m") case
$MOIS in 01)
NOM="janvier";; 02)
NOM="fevrier";; 03)
NOM="mars";; 04)
NOM="avril";; 05)
NOM="mai";; 06)
NOM="juin";;
07)
NOM="juillet";; 08)
NOM="aout";; 09)
NOM="septembre";; 10)
NOM="octobre";; 11)
NOM="novembre";; 12)
NOM="decembre";; esac
ANNEE=$(date +"%Y")
case $MOIS in 01|03|05|
07|08|10|12)
echo
"31 jours en "$NOM"
"$ANNEE;; 04|06|09|11)
echo "30 jours en
"$NOM" "$ANNEE;;
02)
BISSEXTILITE=$(expr
$ANNEE % 4) if
[ $BISSEXTILITE != 0 ]
then echo "28 jours en
"$NOM" "$ANNEE
else
BISSEXTILITE=$(expr
$ANNEE % 100) if
[ $BISSEXTILITE != 0 ]
then echo "29 jours en
"$NOM" "*ANNEE
else
BISSEXTILITE=$(expr
$ANNEE % 400) if
[ $BISSEXTILITE != 0 ]
then echo "28 jours en
"$NOM" "$ANNEE
else
echo "29 jours en
"$NOM" "$ANNEE fi fi
fi;; esac
nombreJours.bash
Exercice 3
Créer un script shell réalisant
la création d'un répertoire
"Exo3" contenant 10 fichiers
nommés "Un" à "Dix". Chaque
fichier contient une seule
ligne:
"Un" contient "Première
ligne"
"Deux" contient
"Deuxième ligne"
...
"Dix" contient "Dixième
ligne"
i. Vérifier que le
répertoire à créer
n'existe pas déjà auquel
cas il ne sera pas recréé
mais les fichiers si.
test -e Exo3 if [ $? !=
0 ] then mkdir Exo3 fi
echo "Premiere ligne"
ligne" >Exo3/Quatre
echo "Cinquieme ligne"
>Exo3/Cinq echo
"Sixieme ligne"
>Exo3/Six echo
"Septieme ligne"
>Exo3/Sept echo
"Huitieme ligne"
>Exo3/Huit echo
"Neuvieme ligne"
>Exo3/Neuf
echo
"Dixieme ligne"
>Exo3/Dix
script3.bash
Exercice 4
Créer un script shell qui
réalise les opérations
suivantes:
Création sous votre
répertoire "TP2" d'un
sous répertoire nommé
"annéemoisjour"
(20070202 pour le 2
février 2007).
Copie des fichiers de
"Exo3" sous ce
répertoire puis
effacement de ces
mêmes fichiers de
"Exo3".
Création de deux
fichiers sous le
répertoire d'accueil
(HOME) de la personne
qui a lancé le shell:
o un fichier nommé
"Gros_fichier.num
ero_du_shell" dans
lequel se trouvera
le contenu
concaténé des
fichiers traités
o un fichier nommé
"Nom_du_script.nu
mero_du_shell"
dans lequel se
trouvera le nom
des fichiers
traités.
i. Vérifier que le
répertoire à créer
n'existe pas déjà.
REP=$(date +"%Y%m%d")
test -e $REP if [ $? !=
0 ] then mkdir $REP
fi cp
Exo3/* $REP rm Exo3/*
for file in $REP/* do
cat $file >>
~/Gros_fichier.$$ echo
$file >> ~/$0.$$ done
script4.bash
Exercice 5
Créer un script
permettant d'afficher
la liste des fichiers du
répertoire /etc
accessibles en lecture.
Créer un script
permettant d'afficher
la liste des fichiers du
répertoire /etc
accessibles en écriture.
for FILE in /etc/* do
if test -r $FILE then
echo $FILE fi done
script5a.bash
for FILE in /etc/* do
if test -w $FILE then
echo $FILE fi done
script5b.bash
Exercice 6
Créer un script nommé
"table" permettant
d'afficher des tables de
multiplication.
"table 5 10" aura pour
résultat l'affichage:
0 x 5 = 0
1 x 5 = 5
2 x 5 = 10
3 x 5 = 15
4 x 5 = 20
5 x 5 = 25
6 x 5 = 30
7 x 5 = 35
8 x 5 = 40
9 x 5 = 45
10 x 5 = 50
for V in $(seq 0 $2) do
echo $V" x "$1" = "$
(expr $V "*"
$1 )
done
table.bash
RETOUR
Droits d’accès
Pour cet exercice, vous créerez un utilisateur banalisé
Vous est-il possible de faire une copie du fichier
/etc/passwd? Vous est-il possible de supprimer ou de
modifier le fichier /etc/passwd?
Répeter ces tentatives en tant qu'utilisateur root.
Expliquer la situation à l’aide de la commande ls -l.
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 petit fichier texte (de contenu quelconque),
qui soit lisible par tout le monde, mais non modifiable
(même pas par vous).
Créer un répertoire nommé "Secret", dont le contenu
est visible uniquement par vous même.
Les fichiers placés dans ce répertoire sont-ils lisibles
par d’autres membres de votre groupe?
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/toto
<...le contenu du fichier toto (s’il
existe)...>
Chercher dans le répertoire /usr/bin des exemples
de commandes ayant la permission SUID.
De quelle genre de commande s’agit-il?
Les utilisateurs
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?
Redirections, méta-caractères
Le répertoire /usr/include contient les fichiers d’entête
standards en langage C (stdlib.h, ...).
Créer un répertoire nommé inc dans votre répertoire
de connexion (HOME).
En utilisant une seule commande, y copier les fichiers
du répertoire /usr/include dont le nom commence par
std.
Afficher la liste des fichiers de /usr/include dont le
nom commence par a, b ou c.
Modifier la commande de la question précédente pour
qu'au lieu d’afficher le résultat, celui-ci soit placé
dans un fichier nommé "Abc.list" de votre répertoire
de connexion.
Afficher le contenu de ce fichier en utilisant la
commande cat.
Copier avec cat son contenu dans un nouveau fichier
nommé "Copie".
Toujours avec cat, créer un nouveau fichier nommé
"Double" formé par la mise bout à bout
(concaténation) des fichiers "Abc.list" et "Copie".
Vérifier que le nombre de lignes a bien doublé à l’aide
de la commande wc.
Créer un fichier nommé "Temp" contenant une ligne
de texte.
Avec cat, ajouter la ligne "The end" à la fin du fichier
"Temp”.
En une seule ligne de commande, faire afficher le
nombre de fichiers de /usr/include dont le nom
contient la lettre t.
find
Afficher la liste des fichiers .h situés sous le
répertoire /usr/include.
Afficher la liste des fichiers plus vieux que 3 jours
situés sous votre répertoire de connexion.
head, tail, tubes
Afficher les 5 premières, puis les 5 dernières lignes
du fichier /etc/passwd.
Afficher la 7ième ligne de ce fichier (et elle seule),
en une seule ligne de commande.
tr, more, tubes
Afficher le fichier /etc/passwd en remplaçant les
caractères / par des X.
Obtenir le résultat précédent page par page.
Contrôles d'accès
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?
Écrire un script permettant d’afficher la liste des
fichiers d'un répertoire et le type de chacun
(utilisation de file et sort ) trié par type.
Flux d’E/S standards
Étudier la documentation de la commande tee.
Écrire une commande qui affiche "Bonjour" à l’écran
et en même temps crée un fichier nommé
"Salutation.txt" dont le contenu est le même message.
Ecrire un script qui lit une ligne de caractères sur son
entrée standard et l’écrit sur sa sortie, en passant
tous les caractères en majuscules.
Modifiez votre script pour qu’il affiche le nombre de
caractères traités sur sa sortie d’erreur.
Créer un fichier texte quelconque. Écrire une seule
commande shell qui recopie le contenu passé en
majuscule de ce fichier dans un nouveau fichier
nommé "Titre.txt" et affiche à l’écran le nombre de
caractères traités.
grep, cut, uniq, sort et tubes
Étudier la documentation des commandes cut et uniq.
Afficher la liste des répertoires de connexion des
utilisateurs déclarés dans le fichier /etc/passwd.
On rappelle qu’à chaque utilisateur est associé un
interpréteur de commandes (shell) lancé lors de son
login. La commande correspondante est indiquée dans
le 7ième champ du fichier /etc/passwd.
Afficher en une ligne de commande
le nombre d’interpréteurs de commandes
différents mentionnés dans /etc/passwd.
On dispose d'un fichier
texte telephone.txt contenant un petit carnet
d’adresses.
Chaque ligne est de la forme "nom prenom
numerotelephone". Les champs sont séparés par des
tabulations.
Répondre aux questions suivantes en utilisant à
chaque fois une ligne de commande shell:
o Afficher le carnet d’adresse trié par ordre
alphabétique de noms.
o Afficher le nombre de personnes dans le
répertoire.
o Afficher toutes les lignes concernant les
“Dupond”.
o Afficher toutes les lignes ne concernant pas les
“Dupond”.
o Afficher le numéro de téléphone (sans le nom)
du premier “Dupond” apparaissant dans le
répertoire.
o Afficher le numéro de téléphone (sans le nom)
du premier “Dupond” dans l’ordre alphabétique
(ordre basé sur les prénoms).
Corrections des
exercices du TP n°3
RET Droits d’accès
OUR Essayer de supprimer ou de modifier le
fichier /etc/passwd. Que se passe-t-il?
Expliquer la situation à l’aide de la
commande ls -l.
Il est impossible de supprimer le fichier
/etc/passwd. Seul le propriétaire (root) du
fichier peut le supprimer.
ls -l /etc/passwd
-rw-r--r-- 1 root root 1705 2004-12-09 09:55
/etc/passwd
A l’aide de la commande id, vérifier votre
identité et le(s) groupe(s) au(x)quel(s) vous
appartenez.
id
uid=1000(toto) gid=1000(toto)
groupes=1000(toto)
Créer un petit fichier texte nommé
"Lecture" (de contenu quelconque), qui soit
lisible par tout le monde, mais non
modifiable (même pas par vous).
touch Lecture
chmod 444 Lecture
-r--r--r-- 1 toto toto 3 2004-12-09 09:55
Lecture
Créer un répertoire nommé "Secret", dont
le contenu est visible uniquement par vous
même.
Les fichiers placés dans ce répertoire sont-
ils lisibles par d’autres membres de votre
groupe?
mkdir Secret
chmod 700 Secret
drwx------ 2 toto toto 4096 2004-12-09 09:55
Secret
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/toto
<...le contenu du fichier toto (s’il
existe)...>
mkdir Connaisseurs
chmod 711 Connaisseurs
Chercher dans le répertoire /usr/bin trois
exemples de commandes ayant la permission
SUID.
De quelle genre de commande s’agit-il?
/usr/bin/passwd pour modifier son mot de passe
/usr/bin/gpasswd pour administrer le fichier
/etc/group
/usr/bin/readcd pour lire et écrire des cd
Ces commandes "travaillent" en tant que root
mais peuvent être endossées par d'autres
utilisateurs
Les utilisateurs
Votre compte d'utilisateur est-il défini
dans le fichier /etc/passwd? Pourquoi?
Non, car les comptes sont définis globalement au
sein d'un "domaine" NIS.
Quel est le répertoire de connexion de
l’utilisateur root?
Le répertoire de connexion de root est /root.
Quel est le shell de l’utilisateur root?
Le shell est /bin/bash.
Quelle est la particularité de l’utilisateur
nobody?
Et de l’utilisateur shutdown?
L'utilisateur Nobody n'a pas de home valide, son
home devient /.
Quels sont les utilisateurs définis dans
/etc/passwd qui font partie du même
groupe que l’administrateur?
sync, postfix, sshd, partimag et distccd.
Redirections, méta-caractères
Le répertoire /usr/include contient les fichiers
d’entête standards en langage C (stdlib.h, ...).
Créer un répertoire nommé inc dans votre
répertoire de connexion (HOME).
En utilisant une seule commande, y copier
les fichiers du répertoire /usr/include dont
le nom commence par std.
mkdir inc
cp /usr/include/std* $HOME/inc
Afficher la liste des fichiers de
/usr/include dont le nom commence par a, b
ou c.
find /usr/include/ \( -name 'a*' -o -name
'b*' -o -name 'c*' \)
ou
find /usr/include/ -name [abc]*
Modifier la commande de la question
précédente pour qu'au lieu d’afficher le
résultat, celui-ci soit placé dans un fichier
nommé "Abc.list" de votre répertoire de
connexion.
find /usr/include/ \( -name 'a*' -o -name
'b*' -o -name 'c*' \) >$HOME/Abc.list
Afficher le contenu de ce fichier en
utilisant la commande cat.
Copier avec cat son contenu dans un
nouveau fichier nommé "Copie".
cat Abc.list > copie
wc Abc.list
450 450 14861 Abc.list
Toujours avec cat, créer un nouveau fichier
nommé "Double" formé par la mise bout à
bout (concaténation) des fichiers "Abc.list"
et "Copie".
Vérifier que le nombre de lignes a bien
doublé à l’aide de la commande wc.
cat Abc.list copie >double
wc double
900 900 29722 double
Créer un fichier nommé "Temp" contenant
une ligne de texte.
touch Temp
Avec cat, ajouter une ligne “The end” à la
fin du fichier “temp”.
cat >> temp
The end
CTRL-d
En une seule ligne, faire afficher le
nombre de fichiers de /usr/include dont le
nom contient la lettre t.
ls /usr/include/[t]* | wc
14 14 306
find
Afficher la liste des fichiers h situés sous
le répertoire /usr/include.
find /etc -name "*.conf"
Afficher la liste des fichiers plus vieux que
3 jours situés sous votre répertoire de
connexion.
find $HOME -ctime +3
head, tail, tubes
Afficher les 5 premières, puis les 5
dernières lignes du fichier /etc/passwd.
head -5 /etc/passwd
tail -5 /etc/passwd
Afficher la 7ième ligne de ce fichier (et
elle seule), en une seule ligne de commande.
head -n7 passwd | tail -n1
tr, more, tubes
Afficher le fichier /etc/passwd en
remplaçant les caractères / par des X.
cat /etc/passwd | tr / X
Obtenir le résultat précédent page par
page.
cat /etc/passwd | tr / X | more
Contrôles d'accès
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?
fichiers: rwxr-xr-x
répertoires: rwxr-xr-x
Écrire un script permettant d’afficher la
liste des fichiers d'un répertoire et le type
de chacun (utilisation de file et sort ) trié
par type.
#! /bin/bash
for i in `ls`
do
file $i >>text
done
more text| sort -t: +1
rm text
Flux d’E/S standards
Écrire une commande qui
affiche "Bonjour" à l’écran et en même
temps crée un fichier nommé
"Salutation.txt" dont le contenu est le
même message.
echo "Bonjour" |tee salutation.txt
Ecrire un script qui lise une ligne de
caractères sur son entrée standard et
l’écrive sur sa sortie, en passant tous les
caractères en majuscules.
#! /bin/bash
read a
echo $a|tr "[a-z]" "[A-Z]"
Modifiez votre script pour qu’il affiche le
nombre de caractères traités sur sa sortie
d’erreur.
read a
echo $a|tr "[a-z]" "[A-Z]"|tee text1
Créer un fichier texte quelconque. Écrire
une seule commande shell qui recopie le
contenu passé en majuscule de ce fichier
dans un nouveau fichier nommé "Titre.txt"
et affiche à l’écran le nombre de
caractères traités.
cat salutation.txt|tr "[a-z]" "[A-Z]"|tee
text1|wc -c
grep, cut, uniq, sort et tubes
Étudier la documentation des commandes cut et
uniq.
Afficher la liste des répertoires de
connexion des utilisateurs déclarés dans le
fichier /etc/passwd.
cut -d: -f 6 passwd
On rappelle qu’à chaque utilisateur est
associé un interpréteur de commandes
(shell) lancé lors de son login. La commande
correspondante est indiquée dans le 7ième
champ du fichier /etc/passwd.
Afficher en une ligne de commande
le nombre d’interpréteurs de commandes
différents mentionnés dans /etc/passwd.
cut -d: -f 7 passwd|sort|uniq|wc -l
On dispose d'un fichier
texte telephone.txt contenant un petit
carnet d’adresses.
Chaque ligne est de la forme "nom prenom
numerotelephone" les champs étant séparés
par des tabulations.
Répondre aux questions suivantes en
utilisant à chaque fois une ligne de
commande shell:
o Afficher le carnet d’adresse trié par
ordre alphabétique de noms.
sort telephone.txt
o Afficher le nombre de personnes dans
le répertoire.
wc -l telephone.txt
o Afficher toutes les lignes concernant
les “Dupond”.
grep Dupond telephone.txt
o Afficher toutes les lignes ne
concernant pas les “Dupond”.
cat telephone.txt | grep -v
"Dupond"
o Afficher le numéro de téléphone (sans
le nom) du premier “Dupond”
apparaissant dans le répertoire.
grep Dupond telephone.txt|uniq -f
1|cut -d\; -f 3
o Afficher le numéro de téléphone (sans
le nom) du premier “Dupond” dans
l’ordre alphabétique (ordre basé sur
les prénoms).
sort telephone.txt|grep Dupond |uniq -f 1|
cut -d\; -f 3
TP n°4
R cron
ETOUR Mettre en place un script qui, toutes les 5 minutes,
ajoute la date, l'heure et la liste des processus en
cours de fonctionnement dans un fichier nommé
"Processus.txt".
tar
Télécharger le fichier Fichiers.tar.
Il s'agit d'une archive au format tar non compressé
contenant les hardcopies de fenêtres Ubuntu-KDE.
Cette archive n'inclut pas de répertoire de
décompression.
"détarer" cette archive dans un sous
répertoire nommé "Fichiers" de votre
HOME.
"tarer" le répertoire "Fichiers" en une
archive nommée "MonArchive.tar".
"tarer" le répertoire "Fichiers" en une
archive compressée nommée
"MonArchiveCompressee.tar.gz".
Quel est le rapport de tailles entre ces
deux archives?
Calculer ce rapport de tailles pour une
archive de fichiers texte.
Installation de logiciels
Mesa3D
Télécharger les trois fichiers suivants:
http://raphaello.univ-
fcomte.fr/ftp/MesaOpenGL/MesaLib-
6.4.2.tar.gz
http://raphaello.univ-
fcomte.fr/ftp/MesaOpenGL/MesaGLUt-
6.4.2.tar.gz
http://raphaello.univ-
fcomte.fr/ftp/MesaOpenGL/MesaDemo
s-6.4.2.tar.gz
"Dégziper" ces trois fichiers.
"Détarer" les trois fichiers obtenus après
"dégzipage".
Un seul répertoire nommé Mesa-6.4.2 devrait avoir
été restoré.
Il contient la distribution Mesa3D (compatible
OpenGL) en version 6.4.2 sous la forme d'un
ensemble de fichiers source C et des fichiers de
gestionnaire de projet (workspace Visual C++,
makefile pour gcc, ...) permettant de compiler ces
sources sous la forme de binaires:
MesaLib : La librairie Mesa3D
MesaGLUt : Une bibliothèque de
construction d'interface graphique pour
programme OpenGL
MesaDemos : Des exemples d'utilisation
d'OpenGL et GLUt.
Réaliser la compilation de Mesa-6.4.2.
Tester l'installation de Mesa-6.4.2
réalisable après compilation.
Vérifier la bonne exécution de
programmes exemples compilés.
On donne le fichier source Anim.cpp.
Télécharger, compiler et exécuter ce
source en langage C.
JDK 1.6
Télécharger le fichier suivant:
http://raphaello.univ-
fcomte.fr/ftp/Java/Jdk/jdk-6-linux-
i586.bin
Il s'agit du fichier d'installation du kit de
développement Java version 6.
Réaliser l'installation de ce jdk.
Tester la version de compilateur
installée.
Tester la version de "runtime" installée.
Compiler et exécuter le programme
java Fibonacci.java
Informations système
Décrire l'environnement dans lequel vous évoluez:
nom de la machine
détail des disques
programmes en fonctionnement
o les votres
o ceux des autres utilisateurs
configuration réseau
place utilisée dans mon répertoire
processus les plus gourmands en
fonctionnement
mount
On considère un partage Windows nommé toto sur
le serveur fileserver.info.univ-fcomte.fr accessible
à l'utilisateur toto du domaine w2k3. Le mot de
passe associé à ce compte est "pw01toto10".
On souhaite monter ce partage en lecture/écriture
depuis une machine fonctionnant sous linux équipé
d'un client samba, pour l'utilisateur linux titi du
groupe linux titi de cette machine. Le point de
montage est /mnt/titi.
Quelle est la commande permettant de
réaliser une telle opération?
Exécutée par titi, cette commande est-elle
susceptible de fonctionner sur votre poste?
Réseau
Déterminer d'après le masque quel est le
réseau utilisé en utilisant la notation binaire
pour les trois adresses suivantes.
o adresse 125.24.6.2, masque par défaut
o adresse 130.14.28.2, masque par défaut
o adresse 125.24.6.2 cette fois avec le
masque 255.255.254.0
Considérons les deux adresses IP : 138.12.3.8
et 138.12.7.25
1. Sans autre indication ces deux machines
sont-elles sur le même réseau?
2. Le masque précisé est 255.255.255.0 :
ces deux machines sont-elles sur le
même réseau?
A quelle condition ces deux machines
communiquent elles dans le cas 1 et dans
le cas 2?
Quelle règle simple peut-on déduire pour
connaître le réseau sans passer par la
notation binaire pour un masque par
défaut?
Vous devez définir les masques pour une
administration réseau qui est structurée de la
façon suivante:
Des serveurs sur lesquels se trouvent des bases de
données ainsi que des postes banalisés sont
répartis à Paris, Lyon, Marseille et Toulouse
(environ 150 serveurs et postes locaux dans chaque
ville).
Dans chaque préfecture de département
métropolitain est présente une antenne locale.
Chaque antenne est composée d'un parc entre 12 et
25 postes (un peu moins de 100 départements).
La communication entre les villes principales et les
antennes départementales est assurée par des
réseaux comportant chacun 2 routeurs.
Vous disposez des adresses réseau 170.109.0.0 à
170.109.255.255
Déterminer les masques de sous réseau
mis en oeuvre .
Pour chaque masque, détailler un réseau
en mettant en évidence:
o son numéro de réseau
o l'adresse du premier host
o l'adresse du dernier host
o l'adresse de broadcast
Au hasard d'une connexion sur l'internet, la
commande "tracert
www.lesitequejeconsulte.com" est exécutée
avec pour résultat cette trace:
1 121 ms 118 ms 108 ms nsbes108.francetelecom.net
[193.251.96.170]
2 110 ms 104 ms 110 ms E5-0-
0.ncbes102.Besancon.francetelecom.net [193.251.115.34]
3 113 ms 113 ms 113 ms P3-
2.nrncy102.Nancy.francetelecom.net [193.252.100.158]
4 118 ms 119 ms 119 ms P1-
0.ntsta202.Paris.francetelecom.net [193.251.126.62]
5 117 ms 110 ms 109 ms P6-
0.ntaub201.Aubervilliers.francetelecom.net
[193.251.126.85]
6 124 ms 118 ms 120 ms P9-
0.nrpoi101.Poitiers.francetelecom.net [193.251.126.169]
7 128 ms 130 ms 128 ms P0-
0.nctou301.Toulouse.francetelecom.net [193.252.100.85]
8 129 ms 129 ms 128 ms POS-1-
0.TLSG1.Toulouse.raei.francetelecom.net [194.51.162.94]
9 134 ms 129 ms 130 ms ATM-11-0-0-
511.TLS5.Toulouse.raei.francetelecom.net [194.51.162.98]
Corrections
des exercices
du TP n°4
cron
RETO Mettre en place un script qui,
UR toutes les 5 minutes, ajoute la
date, l'heure et la liste des
processus en cours de
fonctionnement dans un fichier
nommé "Processus.txt".
On écrit un script nommé par
exemple "Trace.sh" avec la
permission d'exécution placé sous
le répertoire /home/nico et
contenant les deux commandes
date et ps avec leurs sorties
renvoyées en fin du fichier
/home/nico/Processus.txt:
date
>>/home/nico/Processus.txt
ps
>>/home/nico/Processus.txt
On écrit un fichier texte nommé
par exemple "ProgCron.txt"
contenant le descriptif de la
commande programmée:
0,5,10,15,20,25,30,35,40,45
,50,55 * * * *
/home/nico/Trace.sh
On programme ce fichier texte au
moyen de la commande crontab:
crontab ProgCron.txt
tar
Télécharger le
fichier Fichiers.tar.
Il s'agit d'une archive au format
tar non compressé contenant les
hardcopies de fenêtres Ubuntu-
KDE. Cette archive n'inclut pas de
répertoire de décompression.
"détarer" cette
archive dans un sous
répertoire nommé
"Fichiers" de votre
HOME.
mkdir Fichiers
tar -xvf
Fichiers.tar -C
Fichiers
"tarer" le répertoire
"Fichiers" en une
archive nommée
"MonArchive.tar".
tar -cvf
MonArchive.tar
Fichiers
"tarer" le répertoire
"Fichiers" en une
archive compressée
nommée
"MonArchiveCompress
ee.tar.gz".
tar -zcvf
MonArchiveCompress
ee.tar.gz Fichiers
Quel est le rapport de
tailles entre ces deux
archives?
L'archive non
compressée occupe
1003520 octets.
L'archive compressée
occupe 908384 octets.
Le gain est donc de
9,48%.
Calculer ce rapport de
tailles pour une archive
de fichiers texte.
Sur un exemple test on
obtient une taille non
compressée de
2580480 octets pour
une taille compressée
de 519117 octets. Le
gain est donc de
79,88%.
Installation de logiciels
Mesa3D
Télécharger les trois fichiers
suivants:
http://raphaello.univ-
fcomte.fr/ftp/MesaOp
enGL/MesaLib-
6.4.2.tar.gz
http://raphaello.univ-
fcomte.fr/ftp/MesaOp
enGL/MesaGLUt-
6.4.2.tar.gz
http://raphaello.univ-
fcomte.fr/ftp/MesaOp
enGL/MesaDemos-
6.4.2.tar.gz
"Dégziper" ces trois fichiers.
gunzip MesaLib-6.4.2.tar.gz
gunzip MesaGLUt-
6.4.2.tar.gz
gunzip MesaDemos-
6.4.2.tar.gz
"Détarer" les trois fichiers
obtenus après "dégzipage".
tar -xvf MesaLib-6.4.2.tar
tar -xvf MesaGLUt-6.4.2.tar
tar -xvf MesaDemos-
6.4.2.tar
Un seul répertoire nommé Mesa-
6.4.2 devrait avoir été restoré.
Il contient la distribution Mesa3D
(compatible OpenGL) en version
6.4.2 sous la forme d'un ensemble
de fichiers source C et des
fichiers de gestionnaire de projet
(workspace Visual C++, makefile
pour gcc, ...) permettant de
compiler ces sources sous la
forme de binaires:
MesaLib : La librairie
Mesa3D
MesaGLUt : Une
bibliothèque de
construction
d'interface graphique
pour programme
OpenGL
MesaDemos : Des
exemples d'utilisation
d'OpenGL et GLUt.
Réaliser la compilation
de Mesa-6.4.2.
Depuis le répertoire Mesa-6.4.2
make linux-x86
make install
La deuxième commande ne
fonctionnera peut-être pas
correctement car elle peut
nécessiter de posséder les
privilèges "root".
Tester l'installation de
Mesa-6.4.2 réalisable
après compilation
cf make install ci-dessus.
Vérifier la bonne
exécution des
programmes exemples
compilés.
Ils se trouvent dans
les sous-répertoires de
Mesa-6.4.2/Progs.
On donne le fichier
source Anim.cpp.
Télécharger, compiler
et exécuter ce source
en langage C.
gcc -I/home/nico/Mesa-
6.4.2/include -c Anim.cpp -o
Anim.o gcc -L/home/nico/Mesa-
6.4.2/lib
-lm -lGL -lglut
Anim.o -o Anim Anim
JDK 1.6
Télécharger le fichier suivant:
http://raphaello.univ-
fcomte.fr/ftp/Java/J
dk/jdk-6-linux-
i586.bin
Il s'agit du fichier d'installation
du kit de développement Java
version 6.
Réaliser l'installation
de ce jdk.
Le fichier télécharger est un
script shell d'installation.
Le rendre exécutable s'il ne l'est
pas a l'arrivée. Le lancer par son
nom.
Tester la version de
compilateur installée.
Dans le sous-répertoire bin du
répertoire d'installation.
javac -version
Tester la version de
"runtime" installée.
Dans le sous-répertoire bin du
répertoire d'installation.
java -version
Compiler et exécuter
le programme
java Fibonacci.java.
javac Fibonacci.java
java Fibonacci
Informations système
Décrire l'environnement dans
lequel vous évoluez:
nom de la machine
hostname
détail des disques
df
programmes en
fonctionnement
o les votres
ps
o ceux des autres
utilisateurs
ps -A
configuration réseau
ifconfig (ipconfig)
place utilisée dans mon
répertoire
du -b -c $HOME
processus les plus
gourmands en
fonctionnement
top
mount
On considère un partage Windows
nommé toto sur le serveur
fileserver.info.univ-fcomte.fr
accessible à l'utilisateur toto du
domaine w2k3. Le mot de passe
associé à ce compte est
"pw01toto10".
On souhaite monter ce partage en
lecture/écriture depuis une
machine fonctionnant sous linux
équipé d'un client samba, pour
l'utilisateur linux titi du groupe
linux titi de cette machine. Le
point de montage est /mnt/titi.
Quelle est la commande
permettant de réaliser une
telle opération?
mount -t smbfs -o
rw,uid=titi,gid=titi,username=w
2k3/toto,password=pw01toto10 //
fileserver.info.univ-
fcomte.fr/toto /mnt/titi
Exécutée par titi, cette
commande est-elle
susceptible de fonctionner
sur votre poste?
non, car la commande mount n'est,
par défaut, autorisée qu'à
l'utilisateur root.
Réseau
Déterminer d'après le
masque quel est le réseau
utilisé en utilisant la
notation binaire pour les
trois adresses suivantes.
o adresse 125.24.6.2,
masque par défaut
classe A 125.0.0.0 à
125.255.255.255 pour
le netmask 255.0.0.0
o adresse 130.14.28.2,
masque par défaut
classe B 130.14.0.0 à
130.14.255.255 pour le
netmask 255.255.0.0
o adresse 125.24.6.2
cette fois avec le
masque 255.255.254.0
125.24.6.0 à
125.24.7.255 pour le
netmask 255.0.0.0
Considérons les deux
adresses IP : 138.12.3.8 et
138.12.7.25
1. Sans autre indication
ces deux machines
sont-elles sur le même
réseau?
Oui
2. Le masque précisé est
255.255.255.0 : ces
deux machines sont-
elles sur le même
réseau?
Non
A quelle condition ces
deux machines
communiquent elles
dans le cas 1 et dans le
cas 2?
Cas 1, si elles sont
relièes par un routeur
correctement
configuré.
Cas 2, si elles sont
relièes par un
concentrateur ou un
commutateur.
Quelle règle simple
peut-on déduire pour
connaître le réseau
sans passer par la
notation binaire pour
un masque par défaut?
Pour le masque
255.0.0.0 : Même
premier nombre (à
gauche) dans l'adresse
IP.
Pour le masque
255.255.0.0 : Mêmes
deux premiers nombres
(à gauche) dans
l'adresse IP.
Pour le masque
255.255.255.0 :
Mêmes trois premiers
nombres (à gauche)
dans l'adresse IP.
Vous devez définir les
masques pour une
administration réseau qui
est structurée de la façon
suivante:
Des serveurs sur lesquels se
trouvent des bases de données
ainsi que des postes banalisés sont
répartis à Paris, Lyon, Marseille et
Toulouse (environ 150 serveurs et
postes locaux dans chaque ville).
Dans chaque préfecture de
département métropolitain est
présente une antenne locale.
Chaque antenne est composée
d'un parc entre 12 et 25 postes
(un peu moins de 100
départements).
La communication entre les villes
principales et les antennes
départementales est assurée par
des réseaux comportant chacun 2
routeurs.
Vous disposez des adresses
réseau 170.109.0.0 à
170.109.255.255
Déterminer les
masques de sous
réseau mis en oeuvre .
Pour chaque masque,
détailler un réseau en
mettant en évidence:
o son numéro de
réseau
o l'adresse du
premier host
o l'adresse du
dernier host
o l'adresse de
broadcast
Au hasard d'une connexion
sur l'internet, la commande
"tracert
www.lesitequejeconsulte.com
" est exécutée avec pour
résultat cette trace:
1 121 ms 118 ms 108 ms
nsbes108.francetelecom.net
[193.251.96.170]
2 110 ms 104 ms 110 ms E5-0-
0.ncbes102.Besancon.francetelecom.net
[193.251.115.34]
3 113 ms 113 ms 113 ms P3-
2.nrncy102.Nancy.francetelecom.net
[193.252.100.158]
4 118 ms 119 ms 119 ms P1-
0.ntsta202.Paris.francetelecom.net
[193.251.126.62]
5 117 ms 110 ms 109 ms P6-
0.ntaub201.Aubervilliers.franceteleco
m.net [193.251.126.85]
6 124 ms 118 ms 120 ms P9-
0.nrpoi101.Poitiers.francetelecom.net
[193.251.126.169]
7 128 ms 130 ms 128 ms P0-
0.nctou301.Toulouse.francetelecom.net
[193.252.100.85]
8 129 ms 129 ms 128 ms POS-1-
0.TLSG1.Toulouse.raei.francetelecom.n
et [194.51.162.94]
9 134 ms 129 ms 130 ms ATM-11-0-0-
511.TLS5.Toulouse.raei.francetelecom.
net [194.51.162.98]