Vous êtes sur la page 1sur 42

TP n1

RETOUR

Infos systme
Quel est le systme install?
Quelle est la distribution installe?
Quels sont les utilisateurs en cours du
systme?
Ouvrir un nouveau terminal en utilisant un
autre compte.
Fermer ce terminal.
La commande man
Tester la commande man pour obtenir de
l'aide sur man.
Quelles sont les commandes susceptibles
d'tre documentes dans man?
Contenu de rpertoires et de fichiers ascii
(texte)
Lister le contenu du rpertoire /etc.
Lister de manire dtaille le contenu du
rpertoire /etc.
Les fichiers nomms "passwd", "shadow",
"group" et "gpasswd" sont-ils prsents dans
/etc?
Lister le contenu du rpertoire /dev.

Lister le contenu du fichier /etc/passwd.


Lister le contenu du fichier /etc/shadow.
Afficher par ordre alphabtique les
utilisateurs dfinis dans le fichier
/etc/passwd.
Rechercher tous les fichiers du rpertoire
/etc contenant la chaine de caractres "root".
Rechercher la localisation du fichier "stdio.h"
dans le systme de fichier de votre
installation.
A l'aide de la commande "od", illustrer la
diffrence majeure entre les types de fichier
ascii (texte) DOS, UNIX et Macintosh.
Utiliser le fichier ascii
Dos montexte.dos fourni en lien et crer les
fichiers ascii Unix "montexte.unix" et ascii
Macintosh "montexte.mac" avec le mme
contenu au moyen d'un diteur texte (Kate par
exemple) puis comparer (version Macintosh si
l'diteur le permet).
Quelle est la diffrence?
Utiliser les commandes de comparaison de
fichiers de Linux pour tester le contenu d'un
mme fichier texte en version Unix et Dos.
Combien de lignes, de mots et de caractres
comportent les fichiers "montexte.unix",
"montexte.dos" et "montexte.mac"?
Commandes

Dterminer les commandes permettant de raliser


les actions suivantes:
Dterminer le rpertoire par dfaut dans la
hirarchie des rpertoires?
Y a t-il des fichiers, des rpertoires dans ce
rpertoire?
Entrer du texte dans un fichier nomm
"Mon_fichier".
Lister le contenu de "Mon_fichier".
Lister le rpertoire courant.
Lister les rpertoires /bin et /dev.
Crer sous votre rpertoire deux sousrpertoires : "Source" et "Data".
Se positionner sous "Source".
Listez le rpertoire courant.
Revenir sous le rpertoire de dpart et
dtruire "Source".
Crer un deuxime fichier nomm
"Mon_fichier_2".
Copier chaque fichier en nom_de_fichier.old.
Crer un rpertoire "Old".
Dplacer les fichiers avec l'extension old vers
le rpertoire "Old".
Copiez les fichiers sans extension dans le

repertoire "Data".
Sous votre rpertoire de dpart, crez un lien
matriel "Mon_lien" quivalent
"Mon_fichier_2".
Lister les deux fichiers "Mon_lien" et
"Mon_fichier_2" en affichant leur numro
d'inode.
Que remarquez vous?
Supprimer "Mon_lien".
"Mon_fichier_2" a-t-il disparu?
Sous votre rpertoire de dpart, crez un lien
symbolique "Mon_nouveau_lien" sur
"Mon_fichier_2".
Lister les deux fichiers "Mon_nouveau_lien"
et "Mon_fichier_2".
Que remarquez vous?
Supprimer "Mon_fichier_2".
"Mon_nouveau_lien" a-t-il disparu?
Quelle est la taille totale des fichiers
contenus dans votre rpertoire?
Effacer tous les fichiers cres.
Mise en place d'un espace de travail pour 4
utilisateurs
Dfinir le lot de commandes excuter pour crer
4 utilisateurs en suivant les rgles suivantes:
Cration de 2 groupes.

Les premier et deuxime utilisateurs sont


membres du premier groupe.
Les troisime et quatrime utilisateurs sont
membres du second groupe.
Le deuxime utilisateur est aussi membre du
second groupe.
Le quatrime utilisateur est aussi membre du
premier groupe.
Outre leur rpertoire de travail, les
utilisateurs ont accs un rpertoire
commun /home/groupe1 et/ou /home/groupe2
suivant leur groupe. Dans ce rpertoire, ils
peuvent crire, crer des fichiers mais ne
peuvent pas effacer les fichiers.
1. Dtaillez les tapes de cration des groupes,
des utilisateurs et des rpertoires en
indiquant quels fichiers vous utilisez et quelles
commandes vous utilisez sur ces fichiers.
2. Modifiez les profils des utilisateurs pour
qu'au login, le rpertoire d'accueil sur lequel il
souhaite travailler lui soit demand (s'il entre
U, il sera sous son rpertoire, s'il entre G, il
sera sous le rpertoire de son groupe).
3. Parmi ces 3 valeurs: 066, 067, 077, quel umask
positionneriez vous? Expliquez pour chaque
valeur quelles sont les consquences de ce
choix.
RETOUR

Corrections des exercices


du TP n1
RE
Infos systme
TOUR

Quel est le
systme
install?

uname -a

Quelle est la
distribution
installe?

cat /etc/issue

Linux hector 2.6.15-27-386 #1 PREEMPT Fri Dec 8


17:51:56 UTC 2006 i686 GNU/Linux

Ubuntu 6.06.1 LTS \n \l

Quels sont les who


nico :0 2007-01-14
utilisateurs en
cours du
systme?
su user
Ouvrir un
nouveau
terminal en
utilisant un
autre compte.
Fermer ce
terminal.

exit

16:25

La commande man
man man
Tester la
man is the systems manual pager. Each
commande man argument given to man is normally the
program, utility or function.
pour obtenir de
l'aide sur man.
Quelles sont
les commandes
susceptibles
d'tre
documentes
dans man?

page
name of a

Contenu de rpertoires et de fichiers ascii (texte)


Lister le contenu du
rpertoire /etc.

ls /etc

ls -l /etc
Lister de manire
ls -la /etc
dtaille le contenu du
Tous ces fichiers sont bien prsents.
rpertoire /etc.
Les fichiers nomms
"passwd", "shadow",
"group" et "gpasswd"
sont-ils prsents
dans /etc?
Lister le contenu du ls /dev

rpertoire /dev.

Lister le contenu du
fichier /etc/passwd.

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
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/nico:/bin/b
ash

Lister le contenu du cat /etc/shadow


fichier /etc/shadow. Lecture refuse.
cat /etc/passwd | sort
Afficher par ordre
alphabtique les
utilisateurs dfinis
dans le fichier
/etc/passwd.

backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
cupsys:x:100:106::/home/cupsys:/bin/false
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
dhcp:x:101:101::/nonexistent:/bin/false
games:x:5:60:games:/usr/games:/bin/sh
...
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
syslog:x:102:102::/home/syslog:/bin/false
sys:x:3:3:sys:/dev:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh

Rechercher tous les grep root /etc/*


...
fichiers du
rpertoire /etc
contenant la chaine de
caractres "root".
find / -name stdio.h
Rechercher la
localisation du fichier
"stdio.h" dans le
systme de fichier de
votre installation.

...
find: /tmp/kde-root: Permission non
accorde
/usr/include/bits/stdio.h
/usr/include/stdio.h

od -x monfichier.dos
A l'aide de la
0000000 6e75 0a0d 6564 7875 0a0d 7274 696f
commande "od",
0d73
0000020 710a 6175 7274 0d65 630a 6e69 0d71
illustrer la diffrence 730a
0000040 7869 0a0d 6573 7470 0a0d 0a0d 0a0d
majeure existant
0a0d
0000060 0a0d 0a0d
entre les types de
0000064
fichier ascii (texte) od -c monfichier.dos
0000000 u n \r \n d e u x \r \n t r o i
DOS, UNIX et
s \r
Macintosh. Utiliser le 0000020 \n q u a t r e \r \n c i n q \r \n
s
fichier ascii
0000040 i x \r \n s e p t \r \n \r \n
\n \r \n
Dosmontexte.dos four \r
0000060 \r \n \r \n
ni en lien et crer les 0000064
od -x monfichier.unix
fichiers ascii Unix
0000000 6e75 640a 7565 0a78 7274 696f 0a73
7571
"montexte.unix" et

ascii Macintosh
6573
"montexte.mac" avec 0000040 7470 0a0a 0a0a 0a0a
0000050
le mme contenu au
od -c monfichier.unix
0000000 u n \n d e u x \n t r o i s \n q u
moyen d'un diteur
0000020 a t r e \n c i n q \n s i x \n s e
0000040 p t \n \n \n \n \n \n
texte (Kate par
0000050
exemple) puis
od -x monfichier.mac
0000000 6e75 640d 7565 0d78 7274 696f 0d73
comparer (version
7571
Macintosh si l'diteur 0000020 7461 6572 630d 6e69 0d71 6973 0d78
6573
le permet).
0000040 7470 0d0d 0d0d 0d0d
0000050
Quelle est la
od -c monfichier.unix
diffrence?
0000000 u n \r d e u x \r t r o i s \r q u
0000020 7461 6572 630a 6e69 0a71 6973 0a78

0000020 a t r e \r c i n q \r s i x \r s e
0000040 p t \r \r \r \r \r \r
0000050

Codage des fins de ligne sous Dos par


les deux caracteres 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.
cmp monfichier.unix
monfichier.dos

Utiliser les
commandes de
monfichier.unix monfichier.dos
sont diffrents: octet 3, ligne 1
comparaison de
fichiers de Linux pour diff monfichier.unix monfichier.dos
1,12c1,12
tester le contenu d'un < un
mme fichier texte en << deux
trois
<
quatre
version Unix et Dos.
< cinq
< six
< sept
<
<
<
<
<
--> un
> deux
> trois
> quatre
> cinq
> six
> sept

>
>
>
>
>

diff monfichier.unix
monfichier.mac
1,12c1
< un
< deux
< trois
< quatre
< cinq
< six
< sept
<
<
<
<
<
--septre
\ Pas de fin de ligne
fichier.

la fin du

Combien de lignes, de wc monfichier.unix


12 7 40 monfichier.unix
mots et de caractres wc monfichier.dos
12 7 52 monfichier.dos
comportent les
wc monfichier.mac
fichiers
0 7 40 monfichier.mac
"montexte.unix",
"montexte.dos" et
"montexte.mac"?
Commandes
Se localiser dans la
hirarchie.

pwd

Dtecter la prsence ls -la


total 8
de
drwxr-xr-x
11:25 .
fichiers/rpertoires. drwxr-xr-x
11:25 ..

nico nico 4096 2007-02-01

22 nico nico 4096 2007-02-01

Oui, mais ce sont les entres vers la


racine
du repertoire et la racine du rpertoire
pre

Entrer du texte dans echo aaaaaaaaaaaaaaaaaa


>Mon_fichier
Mon_fichier.
Lister le contenu de cat Mon_fichier
Mon_fichier.

aaaaaaaaaaaaaaaaaa

Lister son propre


rpertoire.

ls
Mon_fichier

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

Lister les
catalogues /bin et
/dev.

ls /bin
ls /dev

mkdir Source Data


Crer sous votre
rpertoire 2 sousrpertoires:
"Source" et "Data".
Se positionner sous cd source

"Source".

Lister le rpertoire. ls -la

total 8
drwxr-xr-x 2 nico nico 4096 2007-02-01
11:29 .
drwxr-xr-x 4 nico nico 4096 2007-02-01
11:29 ..

cd ..
Revenir sous le
rmdir Source
rpertoire de dpart
et dtruire "Source".
Crer un deuxime touch Mon_fichier_2

fichier
Mon_fichier_2.

ls -la
total 16
drwxr-xr-x 3 nico nico 4096 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

Copier chaque fichier cp Mon_fichier Mon_fichier.old


cp Mon_fichier_2
en fichier .old.
Mon_fichier_2.old
ls -la
total 20
drwxr-xr-x 3 nico nico 4096 2007-02-01
11:39 .
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
-rw-r--r-- 1 nico nico
0 2007-02-01
11:38 Mon_fichier_2.old
-rw-r--r-- 1 nico nico
19 2007-02-01
11:38 Mon_fichier.old

Crer un rpertoire mkdir old


"Old".
Dplacer les fichiers mv *.old Old
ls -la Old
avec lextension .old total 12
drwxr-xr-x 2 nico
dans le rpertoire
11:39 .
drwxr-xr-x 4 nico
"Old".

nico 4096 2007-02-01

nico 4096 2007-02-01


11:39 ..
-rw-r--r-- 1 nico nico
0 2007-02-01
11:38 Mon_fichier_2.old
-rw-r--r-- 1 nico nico
19 2007-02-01
11:38 Mon_fichier.old

ls -la
total 20
drwxr-xr-x 4 nico nico
11:39 .
drwxr-xr-x 22 nico nico
11:31 ..
drwxr-xr-x 2 nico nico
11:29 Data
-rw-r--r-- 1 nico nico
11:28 Mon_fichier
-rw-r--r-- 1 nico nico
11:31 Mon_fichier_2
drwxr-xr-x 2 nico nico
11:39 Old

Copier les fichiers cp * Data


cp: omission
sans extension dans cp: omission
ls -la Data
le rpertoire "Data". total 12
drwxr-xr-x
11:41 .
drwxr-xr-x
11:39 ..
-rw-r--r--

4096 2007-02-01
4096 2007-02-01
4096 2007-02-01
19 2007-02-01
0 2007-02-01
4096 2007-02-01

du rpertoire `Data'
du rpertoire `Old'

2 nico nico 4096 2007-02-01


4 nico nico 4096 2007-02-01
1 nico nico

19 2007-02-01

11:41 Mon_fichier
-rw-r--r-- 1 nico nico
11:41 Mon_fichier_2

0 2007-02-01

ls -la
total 20
drwxr-xr-x 4 nico nico
11:39 .
drwxr-xr-x 22 nico nico
11:31 ..
drwxr-xr-x 2 nico nico
11:41 Data
-rw-r--r-- 1 nico nico
11:28 Mon_fichier
-rw-r--r-- 1 nico nico
11:31 Mon_fichier_2
drwxr-xr-x 2 nico nico
11:39 Old

4096 2007-02-01
4096 2007-02-01
4096 2007-02-01
19 2007-02-01
0 2007-02-01
4096 2007-02-01

Sous le rpertoire de ln Mon_fichier_2 Mon_lien


ls -la
dpart, crer un lien total 20
matriel "Mon_lien" drwxr-xr-x 4 nico nico 4096 2007-02-01
11:54 .
drwxr-xr-x 22 nico nico 4096 2007-02-01
quivalent
11:43 ..
"Mon_fichier_2".
drwxr-xr-x 2 nico nico 4096 2007-02-01
11:41 Data
-rw-r--r-- 1 nico nico
19
11:28 Mon_fichier
-rw-r--r-- 2 nico nico
0
11:31 Mon_fichier_2
-rw-r--r-- 2 nico nico
0
11:31 Mon_lien
drwxr-xr-x 2 nico nico 4096
11:39 Old

ls -lai
Lister les deux
total 20
fichiers "Mon_lien" 16457 drwxr-xr-x 4 nico
02-01 11:54 .
et "Mon_fichier_2" 868403 drwxr-xr-x 22 nico
02-01 11:43 ..
en affichant leur
16619 drwxr-xr-x 2 nico
02-01 11:41 Data
numro dinode.
16624 -rw-r--r-- 1 nico
Que remarquez vous?02-01 11:28 Mon_fichier

2007-02-01
2007-02-01
2007-02-01
2007-02-01

nico 4096 2007nico 4096 2007nico 4096 2007nico

19 2007-

16597 -rw-r--r-- 2 nico nico


0 200702-01 11:31 Mon_fichier_2
16597 -rw-r--r-- 2 nico nico
0 200702-01 11:31 Mon_lien
16632 drwxr-xr-x 2 nico nico 4096 200702-01 11:39 Old

Supprimer
"Mon_lien".

Leurs numeros d'inode sont identiques


donc ces deux fichiers n'en sont
physiquement qu'un seul.
rm Mon_lien
ls -lai
total 20

"Mon_fichier_2" a-t- 02-01 11:56 .


868403 drwxr-xr-x
il disparu?
16457 drwxr-xr-x

4 nico nico 4096 2007-

22 nico
02-01 11:43 ..
16619 drwxr-xr-x 2 nico
02-01 11:41 Data
16624 -rw-r--r-- 1 nico
02-01 11:28 Mon_fichier
16597 -rw-r--r-- 1 nico
02-01 11:31 Mon_fichier_2
16632 drwxr-xr-x 2 nico
02-01 11:39 Old

Sous votre
rpertoire de
dpart, crez un lien
symbolique
"Mon_nouveau_lien"
sur "Mon_fichier_2".

nico 4096 2007nico 4096 2007nico

19 2007-

nico

0 2007-

nico 4096 2007-

"Mon_fichier_2" existe toujours.


ln -s Mon_fichier_2
Mon_nouveau_lien

ls -la
Lister les deux
total 20
fichiers
drwxr-xr-x
11:57 .
"Mon_nouveau_lien" drwxr-xr-x
..
et "Mon_fichier_2". 11:43
drwxr-xr-x
Que remarquez vous?11:41 Data

4 nico nico 4096 2007-02-01


22 nico nico 4096 2007-02-01
2 nico nico 4096 2007-02-01

-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
lrwxrwxrwx 1 nico nico
13 2007-02-01
11:57 Mon_nouveau_lien -> Mon_fichier_2
drwxr-xr-x 2 nico nico 4096 2007-02-01
11:39 Old

Supprimer
"Mon_fichier_2".
"Mon_nouveau_lien"
a-t-il disparu?

Le lien est clairement mis en evidence par


le caractere l et par l'affichage du nom
du fichier lie.
La taille n'est pas bonne.
rm Mon_fichier_2
ls -la
total 20
drwxr-xr-x 4 nico nico 4096 2007-02-01
11:59 .
drwxr-xr-x 22 nico nico 4096 2007-02-01
11:43 ..
drwxr-xr-x 2 nico nico 4096 2007-02-01
11:41 Data
-rw-r--r-- 1 nico nico 19 2007-02-01 11:28
Mon_fichier
lrwxrwxrwx 1 nico nico 13 2007-02-01 11:57

Mon_nouveau_lien -> Mon_fichier_2


drwxr-xr-x 2 nico nico 4096 2007-02-01
11:39 Old

Le lien existe toujours mais est brise.


Il est caracteris par un code couleur
spcifique dans le shell utilis.
du -b

Quelle est la taille


4115 ./Old
totale des fichiers 4115 ./Data
12358 .
contenus dans votre
La taille est approximative en raison de
rpertoire?
l'utilisation de blocs de 512 octets.
rm -r *
Effacer tous les
ls -la
fichiers crs.
total 8
drwxr-xr-x 2 nico nico 4096 2007-02-01
12:03 .
drwxr-xr-x 22 nico nico 4096 2007-02-01
11:43 ..

Mise en place d'un espace de travail pour 4 utilisateurs


1. Cration des groupes et des utilisateurs
Cration de 2 groupes
groupadd group1
groupadd group2
cat /etc/group
...
group1:x:1001:
group2:x:1002:

Cration des 4 utilisateurs avec cration de leurs


rpertoires home:
useradd -m u1
useradd -m u2
useradd -m u3
useradd -m u4
cat /etc/passwd
...
u1:x:1001:100::/home/u1:/bin/sh
u2:x:1002:100::/home/u2:/bin/sh
u3:x:1003:100::/home/u3:/bin/sh
u4:x:1004:100::/home/u4:/bin/sh
ls -l /home
total 20
...
drwxr-xr-x 2 u1 users 4096 2007-02-01 12:12 u1
drwxr-xr-x 2 u2 users 4096 2007-02-01 12:12 u2

drwxr-xr-x 2 u3 users 4096 2007-02-01 12:12 u3


drwxr-xr-x 2 u4 users 4096 2007-02-01 12:12 u4

Placement des utilisateurs dans leurs groupes


usermod -G group1 u1
usermod -G group1,group2 u2
usermod -G group2 u3
usermod -G group1,group2 u4
cat /etc/group
...
group1:x:1001:u1,u2,u4
group2:x:1002:u2,u3,u4

Changement de propritaire des rpertoires


chown u1:group1 /home/u1
chown u2:group1 /home/u2
chown u3:group2 /home/u3
chown u4:group2 /home/u4
Cration des rpertoires communs
mkdir /home/group1
mkdir /home/group2
Mise en place des permissions pour permettre aux
utilisateurs d'crire dans le rpertoire de leur
groupe
chgrp group1 /home/group1
chgrp group2 /home/group2
Mise en place de la permission pour protger de
l'effacement tout en autorisant l'criture:
A ce niveau du cours, on ne sait pas rsoudre la
dernire problmatique.
Soit on fait confiance aux utilisateurs,
soit on passe par root pour ajouter les fichiers et
on ne donne pas la permission w.
Cas le plus permissif:
chmod g=rwx /home/group1
ou
chmod 770 /home/group1
Cas le moins permissif:

chmod g=700 /home/group1

Activation d'un utilisateur


passwd u1
Enter new UNIX password:
Retype new UNIX password:
passwd : le mot de passe a t mis
jour avec succs
cat/etc/shadow
...
u1:$1$kiUUra9s$AxchvKz0J9OBJPXO8qNf./:13545:0:99999:7::
:
u2:!:13545:0:99999:7:::
u3:!:13545:0:99999:7:::
u4:!:13545:0:99999:7:::

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 conseilles 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 scurit et la souplesse. Elles permettent le parcours des
rpertoires sans en autoriser l'examen avec la commande "ls"
tout en autorisant l'accs des rpertoires fils dont les
droits seront plus permissifs, utiliss pour changer des
fichiers" dans "Unix utilisation administration systme et
rseau" par Christian Pellisier.
Dans notre exemple, on choisit plutt la valeur 067.
RETOUR

TP n2
RETOUR

Ecriture de shells
Travailler dans un rpertoire nomm "TP2" cr la
racine de votre HOME.
Exercice 1
Crer un script shell nomm "change" qui affichera
la date de dernire modification d'un fichier puis la
modifiera avec l'heure actuelle et enfin raffichera
la date de dernire modification du fichier.
Cette procdure acceptera 1 paramtre qui sera le
nom du fichier.
Lorsque vous excuterez "change mon_fic", le 8
octobre 15 heures 12 vous obtiendrez le rsultat:
avant
2001
aprs
15:12

: -r--r--r-- 1 user group 40 Fev 3


mon_fic
: -r--r--r-- 1 user group 40 Oct 8
mon_fic

Exercice 2
Crer un script shell nomm "nombreJours" qui
affichera le nombre de jours du mois courant.
"nombreJours" affichera pour fvrier 2007 le
message "28 jours en fvrier 2007".
Exercice 3

Crer un script shell ralisant la cration d'un


rpertoire "Exo3" contenant 10 fichiers nomms
"Un" "Dix". Chaque fichier contient une seule
ligne:
"Un" contient "Premire ligne"
"Deux" contient "Deuxime ligne"
...
"Dix" contient "Dixime ligne"
i.

Vrifier que le rpertoire crer n'existe pas


dj auquel cas il ne sera pas recr mais les
fichiers si.

Exercice 4
Crer un script shell qui ralise les oprations
suivantes:
Cration sous votre rpertoire "TP2" d'un
sous rpertoire nomm "annemoisjour"
(20070202 pour le 2 fvrier 2007).
Copie des fichiers de "Exo3" sous ce
rpertoire puis effacement de ces mmes
fichiers de "Exo3".
Cration de deux fichiers sous le rpertoire
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 concatn

des fichiers traits


o un fichier nomm
"Nom_du_script.numero_du_shell" dans
lequel se trouvera le nom des fichiers
traits.
i.

Vrifier que le rpertoire crer n'existe pas


dj.

Exercice 5
Crer un script permettant d'afficher la liste
des fichiers du rpertoire /etc accessibles en
lecture.
Crer un script permettant d'afficher la liste
des fichiers du rpertoire /etc accessibles en
criture.
Exercice 6
Crer un script nomm "table" permettant
d'afficher des tables de multiplication.
"table 5 10" aura pour rsultat 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
RETOUR

Corrections des exercices


du TP n2
RETOUR

Exercice 1
Crer un script shell nomm "change" qui affichera
la date de dernire modification d'un fichier puis la
modifiera avec l'heure actuelle et enfin raffichera
la date de dernire modification du fichier.
Cette procdure acceptera 1 paramtre qui sera le
nom du fichier.
Lorsque vous excuterez "change mon_fic", le 8
octobre 15 heures 12 vous obtiendrez le rsultat:
avant
2001
aprs
15:12

: -r--r--r-- 1 user group 40 Fev 3


mon_fic
: -r--r--r-- 1 user group 40 Oct 8
mon_fic

AVANT=$(ls -l $1) touch $1 APRES=$(ls -l


$1) echo "Avant : "$AVANT
echo "Apres : "$APRES
change.bash

Exercice 2
Crer un script shell nomm "nombreJours" qui
affichera le nombre de jours du mois courant.
"nombreJours" affichera pour fvrier 2007 le
message "28 jours en fvrier 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
Crer un script shell ralisant la cration d'un
rpertoire "Exo3" contenant 10 fichiers nomms
"Un" "Dix". Chaque fichier contient une seule
ligne:
"Un" contient "Premire ligne"
"Deux" contient "Deuxime ligne"
...
"Dix" contient "Dixime ligne"
i.

Vrifier que le rpertoire crer n'existe pas


dj auquel cas il ne sera pas recr mais les
fichiers si.

test -e Exo3 if [ $? != 0 ] then mkdir


Exo3 fi echo "Premiere ligne"
>Exo3/Un echo "Deuxieme
ligne" >Exo3/Deux echo "Troisieme ligne"
>Exo3/Trois echo "Quatrieme
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

Crer un script shell qui ralise les oprations


suivantes:
Cration sous votre rpertoire "TP2" d'un
sous rpertoire nomm "annemoisjour"
(20070202 pour le 2 fvrier 2007).
Copie des fichiers de "Exo3" sous ce
rpertoire puis effacement de ces mmes
fichiers de "Exo3".
Cration de deux fichiers sous le rpertoire
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 concatn
des fichiers traits
o un fichier nomm
"Nom_du_script.numero_du_shell" dans
lequel se trouvera le nom des fichiers
traits.
i.

Vrifier que le rpertoire crer n'existe pas


dj.

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
Crer un script permettant d'afficher la liste
des fichiers du rpertoire /etc accessibles en
lecture.
Crer un script permettant d'afficher la liste
des fichiers du rpertoire /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
Crer un script nomm "table" permettant
d'afficher des tables de multiplication.
"table 5 10" aura pour rsultat 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

TP n3

RET Droits daccs


OUR

Pour cet exercice, vous crerez 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?
Rpeter ces tentatives en tant qu'utilisateur root.
Expliquer la situation laide de la commande ls -l.
A laide de la commande id, vrifier votre identit et
le(s) groupe(s) au(x)quel(s) vous appartenez.
Crer un petit fichier texte (de contenu quelconque),
qui soit lisible par tout le monde, mais non modifiable
(mme pas par vous).
Crer un rpertoire nomm "Secret", dont le contenu
est visible uniquement par vous mme.
Les fichiers placs dans ce rpertoire sont-ils lisibles
par dautres membres de votre groupe?
Crer un rpertoire nomm "Connaisseurs" tel que les
autres utilisateurs ne puissent pas lister son contenu
mais puissent lire les fichiers qui y sont placs.
On obtiendra:
ls Connaisseurs
ls : Connaisseurs: Permission denied
cat Connaisseurs/toto
<...le contenu du fichier toto (sil
existe)...>
Chercher dans le rpertoire /usr/bin des exemples de
commandes ayant la permission SUID.
De quelle genre de commande sagit-il?

Les utilisateurs
Votre compte d'utilisateur est-il dfini dans le fichier
/etc/passwd? Pourquoi? Il y a-t-il d'autres
alternatives?
Quel est le rpertoire de connexion de lutilisateur
root?
Quel est le shell de lutilisateur root?
Quelle est la particularit de lutilisateur nobody? Et
de lutilisateur shutdown?
Quels sont les utilisateurs dfinis dans /etc/passwd
qui font partie du mme groupe que ladministrateur?
Redirections, mta-caractres
Le rpertoire /usr/include contient les fichiers dentte
standards en langage C (stdlib.h, ...).
Crer un rpertoire nomm inc dans votre rpertoire
de connexion (HOME).
En utilisant une seule commande, y copier les fichiers
du rpertoire /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 prcdente pour
qu'au lieu dafficher le rsultat, celui-ci soit plac
dans un fichier nomm "Abc.list" de votre rpertoire
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, crer un nouveau fichier nomm
"Double" form par la mise bout bout
(concatnation) des fichiers "Abc.list" et "Copie".
Vrifier que le nombre de lignes a bien doubl laide
de la commande wc.
Crer 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 situs sous le
rpertoire /usr/include.
Afficher la liste des fichiers plus vieux que 3 jours
situs sous votre rpertoire de connexion.
head, tail, tubes
Afficher les 5 premires, puis les 5 dernires lignes
du fichier /etc/passwd.
Afficher la 7ime ligne de ce fichier (et elle seule), en
une seule ligne de commande.
tr, more, tubes
Afficher le fichier /etc/passwd en remplaant les

caractres / par des X.


Obtenir le rsultat prcdent page par page.
Contrles d'accs
Un administrateur dsire sassurer chaque matin que tous
les fichiers placs sous $REPERTOIRE sont lisiblespar tout
le monde, mais non modifiables except par leur
propritaire.
Quel doit tre le mode de ces fichiers et rpertoires?
crire un script permettant dafficher la liste des
fichiers d'un rpertoire et le type de chacun
(utilisation de file et sort ) tri par type.
Flux dE/S standards
tudier la documentation de la commande tee.
crire une commande qui affiche "Bonjour" lcran et
en mme temps cre un fichier nomm
"Salutation.txt" dont le contenu est le mme message.
Ecrire un script qui lit une ligne de caractres sur son
entre standard et lcrit sur sa sortie, en passant
tous les caractres en majuscules.
Modifiez votre script pour quil affiche le nombre de
caractres traits sur sa sortie derreur.
Crer 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 lcran le nombre de
caractres traits.

grep, cut, uniq, sort et tubes


tudier la documentation des commandes cut et uniq.
Afficher la liste des rpertoires de connexion des
utilisateurs dclars dans le fichier /etc/passwd.
On rappelle qu chaque utilisateur est associ un
interprteur de commandes (shell) lanc lors de son
login. La commande correspondante est indique dans
le 7ime champ du fichier /etc/passwd.
Afficher en une ligne de commande
le nombre dinterprteurs de commandes
diffrents mentionns dans /etc/passwd.
On dispose d'un fichier texte telephone.txt contenant
un petit carnet dadresses.
Chaque ligne est de la forme "nom prenom
numerotelephone". Les champs sont spars par des
tabulations.
Rpondre aux questions suivantes en utilisant chaque
fois une ligne de commande shell:
o Afficher le carnet dadresse tri par ordre
alphabtique de noms.
o Afficher le nombre de personnes dans le
rpertoire.
o Afficher toutes les lignes concernant les
Dupond.
o Afficher toutes les lignes ne concernant pas les
Dupond.
o Afficher le numro de tlphone (sans le nom)
du premier Dupond apparaissant dans le

rpertoire.
o Afficher le numro de tlphone (sans le nom)
du premier Dupond dans lordre alphabtique
(ordre bas sur les prnoms).
RETOUR

Corrections des exercices


du TP n3
RETOUR

Droits daccs
Essayer de supprimer ou de modifier le fichier
/etc/passwd. Que se passe-t-il?
Expliquer la situation laide de la commande
ls -l.
Il est impossible de supprimer le fichier
/etc/passwd. Seul le propritaire (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 laide de la commande id, vrifier votre


identit et le(s) groupe(s) au(x)quel(s) vous
appartenez.
id
uid=1000(toto) gid=1000(toto)
groupes=1000(toto)

Crer un petit fichier texte nomm "Lecture"


(de contenu quelconque), qui soit lisible par
tout le monde, mais non modifiable (mme pas
par vous).
touch Lecture
chmod 444 Lecture
-r--r--r-- 1 toto toto 3 2004-12-09 09:55
Lecture

Crer un rpertoire nomm "Secret", dont le


contenu est visible uniquement par vous mme.
Les fichiers placs dans ce rpertoire sont-ils
lisibles par dautres membres de votre
groupe?
mkdir Secret
chmod 700 Secret
drwx------ 2 toto toto 4096 2004-12-09 09:55
Secret

Crer un rpertoire nomm "Connaisseurs" tel


que les autres utilisateurs ne puissent pas
lister son contenu mais puissent lire les
fichiers qui y sont placs.
On obtiendra:
ls Connaisseurs
ls : Connaisseurs: Permission denied
cat Connaisseurs/toto
<...le contenu du fichier toto (sil
existe)...>
mkdir Connaisseurs

chmod 711 Connaisseurs

Chercher dans le rpertoire /usr/bin trois


exemples de commandes ayant la permission
SUID.
De quelle genre de commande sagit-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 endosses par d'autres utilisateurs
Les utilisateurs
Votre compte d'utilisateur est-il dfini dans le
fichier /etc/passwd? Pourquoi?
Non, car les comptes sont dfinis globalement au
sein d'un "domaine" NIS.
Quel est le rpertoire de connexion de
lutilisateur root?
Le rpertoire de connexion de root est /root.
Quel est le shell de lutilisateur root?
Le shell est /bin/bash.
Quelle est la particularit de lutilisateur
nobody?
Et de lutilisateur shutdown?
L'utilisateur Nobody n'a pas de home valide, son
home devient /.

Quels sont les utilisateurs dfinis dans


/etc/passwd qui font partie du mme groupe
que ladministrateur?
sync, postfix, sshd, partimag et distccd.
Redirections, mta-caractres
Le rpertoire /usr/include contient les fichiers
dentte standards en langage C (stdlib.h, ...).
Crer un rpertoire nomm inc dans votre
rpertoire de connexion (HOME).
En utilisant une seule commande, y copier les
fichiers du rpertoire /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


prcdente pour qu'au lieu dafficher le
rsultat, celui-ci soit plac dans un fichier
nomm "Abc.list" de votre rpertoire 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, crer un nouveau fichier


nomm "Double" form par la mise bout bout
(concatnation) des fichiers "Abc.list" et
"Copie".
Vrifier que le nombre de lignes a bien doubl
laide de la commande wc.
cat Abc.list copie >double
wc double
900 900 29722 double

Crer 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 situs sous le
rpertoire /usr/include.

find /etc -name "*.conf"

Afficher la liste des fichiers plus vieux que 3


jours situs sous votre rpertoire de
connexion.
find $HOME -ctime +3

head, tail, tubes


Afficher les 5 premires, puis les 5 dernires
lignes du fichier /etc/passwd.
head -5 /etc/passwd
tail -5 /etc/passwd

Afficher la 7ime 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 remplaant
les caractres / par des X.
cat /etc/passwd | tr / X

Obtenir le rsultat prcdent page par page.


cat /etc/passwd | tr / X | more

Contrles d'accs
Un administrateur dsire sassurer chaque matin
que tous les fichiers placs sous $REPERTOIRE
sont lisiblespar tout le monde, mais non modifiables
except par leur propritaire.
Quel doit tre le mode de ces fichiers et

rpertoires?
fichiers: rwxr-xr-x
rpertoires: rwxr-xr-x
crire un script permettant dafficher la liste
des fichiers d'un rpertoire 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 dE/S standards


crire une commande qui affiche "Bonjour"
lcran et en mme temps cre un fichier
nomm "Salutation.txt" dont le contenu est le
mme message.
echo "Bonjour" |tee salutation.txt

Ecrire un script qui lise une ligne de


caractres sur son entre standard et lcrive
sur sa sortie, en passant tous les caractres
en majuscules.
#! /bin/bash
read a
echo $a|tr "[a-z]" "[A-Z]"

Modifiez votre script pour quil affiche le


nombre de caractres traits sur sa sortie
derreur.
read a

echo $a|tr "[a-z]" "[A-Z]"|tee text1

Crer 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
lcran le nombre de caractres traits.
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 rpertoires de connexion
des utilisateurs dclars dans le fichier
/etc/passwd.
cut -d: -f 6 passwd

On rappelle qu chaque utilisateur est associ


un interprteur de commandes (shell) lanc
lors de son login. La commande correspondante
est indique dans le 7ime champ du fichier
/etc/passwd.
Afficher en une ligne de commande
le nombre dinterprteurs de commandes
diffrents mentionns dans /etc/passwd.
cut -d: -f 7 passwd|sort|uniq|wc -l

On dispose d'un fichier


texte telephone.txt contenant un petit carnet
dadresses.
Chaque ligne est de la forme "nom prenom
numerotelephone" les champs tant spars
par des tabulations.

Rpondre aux questions suivantes en utilisant


chaque fois une ligne de commande shell:
o Afficher le carnet dadresse tri par
ordre alphabtique de noms.
sort telephone.txt

o Afficher le nombre de personnes dans le


rpertoire.
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 numro de tlphone (sans le


nom) du premier Dupond apparaissant
dans le rpertoire.
grep Dupond telephone.txt|uniq -f 1|
cut -d\; -f 3

o Afficher le numro de tlphone (sans le


nom) du premier Dupond dans lordre
alphabtique (ordre bas sur les
prnoms).
sort telephone.txt|grep Dupond |uniq -f 1|cut
-d\; -f 3
RETOUR