<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link REL="STYLESHEET" TYPE="text/css" TITLE="Style DILIB" HREF="../../dilib.css">
<title>CORRIGÉS TRAVAUX PRATIQUES (Nouvelles commandes) - UNIX</title>
<style type="text/css">
Q { font-style: italic; }
TABLE { text-align: center; }
.reponse { font-style: italic; }
</style>
</head>
<body>
<h1>CORRIGÉS TRAVAUX PRATIQUES<br>(Nouvelles commandes)</h1>
<h3>Commandes utilisateurs</h3>
<ul><a name="passwd"></a>
<li>Changez votre mot de passe.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
<em>passwd: Changing password for [userid]<br>
Enter login password : </em>truc<br>
<em>New password : </em>machin<br>
<em>New password : </em>machin
</td></tr>
</table><br>
</li>
<a name="uid"></a>
<li>
Identifiez-vous : quel sont votre user id (uid) et votre
groupe (gid) ?
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">whoami<br>
<em>[votre username]</em><br>
id<br><em>uid=[votre username] gid=users</em>
</td></tr>
</table><br>
</li>
</ul>
<h3>Gestion des droits</h3>
<ul><a name="niv"></a>
<li>
En restant dans votre répertoire de travail
(<code>UnixShell</code>), listez complètement le
contenu de votre <code>home directory</code>. Décrivez
ce que vous y trouvez :
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
UnixShell est à 2 niveaux sous votre home directory :<br>
ll ../..
</td></tr>
</table><br>
<ul><a name="rep"></a>
<li>
quels sont les fichiers et répertoires
présents ?
<table bgcolor="yellow" border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Des répertoires comme : ./ ../ public_html/<br>
Des fichiers comme : .profile
</td></tr>
</table><br>
</li>
<a name="caches"></a>
<li>
lesquels sont cachés ?
<table border="1" class="commands" style="margin-left:0;">
<tr><td>Tous ceux qui commencent par un point comme .profile</td></tr>
</table><br>
</li>
<a name="proprietaire"></a>
<li>
quels sont leurs propriétaires et groupes
attachés ?
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Propriétaires : surtout vous, éventuellement l'utilisateur
root<br>Groupes : surtout users, éventuellement d'autres
</td></tr>
</table><br>
</li>
<a name="droits"></a>
<li>
quels sont les droits afférants ?
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Possiblement variable, mais dépendant surtout de votre umask (voir la suite)
</td></tr>
</table><br>
</li>
</ul>
</li>
<a name="umask"></a>
<li>
Copiez dans votre répertoire <code>UnixShell</code> le
fichier <a href="testUmask.txt"><code>testUmask.txt</code></a>
(par un clic droit sur ce lien). Ses droits initiaux sont
rwxrwxr-x. Quel est votre umask ?
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Dépend de votre configuration, mais s'observe
en faisant un ll pour afficher les droits pris par le
fichier testUmask.txt lors de la copie sous votre
compte. En prenant pour exemple les droits
présentés plus haut : rwxrwxr-x<br>
user (u) : rwx, binaire 111 octal 7<br>
group (g) : rwx, binaire 111 octal 7<br>
other (o) : r-x, binaire 101 octal 5<br>
Donc profil octal 775, d'où un umask de 002 (sa négation en octal).</br>
On peut aussi lancer <code>umask</code> comme commande en ligne...</td></tr>
</table><br>
</li>
<a name="chmod"></a>
<li>
Modifiez les droits de ce fichier de deux façons pour
obtenir ceux qui suivent et à traiter en
séquence de proche en proche pour les trois cas. La
première façon de procéder utilisera un
profil octal <em>(pas de négation de celui-ci comme
pour umask)</em>, la seconde des lettres. Contrôlez vos
actions à chaque étape.
<ul>
<li>rwx------<br>
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
chmod 700 testUmask.txt<br>
chmod go-rwx testUmask.txt<br>
ll<br>
<em>-rwx------ 1 [uid] users 36 May 5 13:04 testUmask.txt</em>
</td></tr>
</table>
</li>
<li>rwxrwxrwx<br>
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
chmod 777 testUmask.txt<br>
chmod a+rwx testUmask.txt<br>
ll<br>
<em>-rwxrwxrwx 1 [uid] users 36 May 5 13:05 testUmask.txt</em>
</td></tr>
</table>
</li>
<li>rwxr-xr--<br>
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
chmod 754 testUmask.txt<br>
chmod go-w,o-x testUmask.txt<br>
ll<br>
<em>-rwxr-xr-- 1 [uid] users 36 May 5 13:06 testUmask.txt</em>
</td></tr>
</table>
</li>
</ul><br>
</li>
<a name="find"></a>
<li>
Identifiez le chemin où se trouve votre fichier
<code>.profile</code>, à partir de votre <code>home
directory</code>.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
find ../.. -name .profile<br>
<em>/dps/users/[uid]/.profile</em>
</td></tr>
</table><br>
</li>
<a name="users"></a>
<li>
Affichez tous les fichiers du groupe <code>users</code> de
votre répertoire
<code>UnixShell</code>. Contrôlez ce résultat
avec un listing complet de son contenu.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
find /dps/users/[uid]/public_html/UnixShell -group users<br>
<em>/dps/users/[uid]/public_html/UnixShell/monHistorique.txt<br>
/dps/users/[uid]/public_html/UnixShell/testUmask.txt</em><br>
ll<br>
<em>drwxrwxr-x 4 [uid] users 1024 May 5 13:15 ./<br>
drwxrwxr-x 16 [uid] users 512 Apr 25 16:35 ../<br>
-rwxrwxr-x 1 [uid] users 212 May 5 10:10 monHistorique.txt<br>
-rwxrwxr-x 1 [uid] users 25 Apr 5 13:01 testUmask.txt</em>
</td></tr>
</table><br>
</li>
<a name="diff"></a>
<li>
Copiez dans votre répertoire <code>UnixShell</code> le
fichier <a href="testDiff1.txt"><code>testDiff1.txt</code></a>
(par un clic droit sur ce lien). Ouvrez-le dans xemacs et
modifiez-le selon les consignes qui s'y trouvent. Ensuite,
sauvegardez-le comme <code>testDiff2.txt</code>. Comparez les
deux fichiers, analysez le rapport obtenu en fonction de vos
actions.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
diff testDiff1.txt testDiff2.txt<br>
<em>3a4<br>
> LIGNE AJOUTEE<br>
6d6<br>
< LIGNE A SUPPRIMER<br>
9c9<br>
< Modifiez-moi !!!<br>
---<br>
> Modifiée</em>
</td></tr>
</table><br>
</li>
</ul>
<h3>Archivage et compression</h3>
<ul><a name="tarUnixShell"></a>
<li>
Archivez en un seul tarfile tout le contenu de votre
répertoire <code>UnixShell</code> (placez-vous
au-dessus). Contrôlez le fichier <code>.tar</code>
résultat.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Le plus simple est d'abord de vous déplacer dans le
répertoire parent de <code>UnixShell</code> pour
l'archiver :<br>
cd ..<br>
pwd<br>
<em>/dps/users/[uid]/public_html</em>
<br>ll<br>
<em>drwxrwxr-x 4 [uid] users 1024 Apr 5 13:15 ./<br>
drwxrwxr-x 16 [uid] users 512 Apr 25 16:35 ../<br>
drwxrwxr-x 4 [uid] users 1024 Apr 25 10:03 UnixShell</em><br><br>
tar -cvf Archives.tar UnixShell<br>
ll<br>
<em>drwxrwxr-x 4 [uid] users 1024 Apr 5 13:15 ./<br>
drwxrwxr-x 16 [uid] users 512 Apr 25 16:35 ../<br>
drwxrwxr-x 4 [uid] users 1024 Apr 25 10:03 UnixShell<br>
-rwxrwxr-x 1 [uid] users 10240 May 5 14:23 Archives.tar</em><br><br>
tar -tvf Archives.tar<br>
<em>drwxrwxr-x [uid]/users 0 2003-05-05 14:02 UnixShell/<br>
-rwxrwxr-x [uid]/users 212 2003-05-05 10:10 UnixShell/monHistorique.txt<br>
-rwxrwxr-x [uid]/users 261 2003-05-05 14:12 UnixShell/testDiff1.txt<br>
-rwxrwxr-x [uid]/users 249 2003-05-05 14:13 UnixShell/testDiff2.txt</em><br>
</td></tr>
</table><br>
</li>
<a name="tarzip"></a>
<li>
Créez le sous-répertoire <code>tarzip</code>
(sous <code>UnixShell</code> où vous revenez) et
déplacez-y votre tarfile. Sans vous déplacer
dans ce sous-répertoire, désarchivez le tarfile
et contrôlez le résultat.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
cd UnixShell<br>
pwd<br>
<em>/dps/users/[uid]/public_html/UnixShell</em><br><br>
mkdir tarzip<br>
mv ../Archives.tar tarzip<br><br>
tar -xvf tarzip/Archives.tar<br>
<em>UnixShell/<br>
UnixShell/monHistorique.txt<br>
UnixShell/testDiff1.txt<br>
UnixShell/testDiff2.txt<br></em><br>
ll<br>
<em>drwxrwxr-x 4 [uid] users 512 May 5 15:25 ./<br>
drwxrwxr-x 4 [uid] users 1024 Apr 25 10:03 ../<br>
drwxrwxr-x 4 [uid] users 1024 May 5 14:23 UnixShell/<br>
-rwxrwxr-x 1 [uid] users 212 May 5 10:10 monHistorique.txt<br>
drwxrwxr-x 2 [uid] users 512 May 5 15:18 tarzip/<br>
-rwxrwxr-x 1 [uid] users 261 May 5 14:12 testDiff1.txt<br>
-rwxrwxr-x 1 [uid] users 249 May 5 14:13 testDiff2.txt</em><br><br>
Si vous avez travaillé comme cela, vous devez
constater que le répertoire
<code>UnixShell</code> s'est désarchivé
sous lui-même... C'est bien sûr un exemple
se voulant surtout didactique. Dans une situation plus
concrète, le désarchivage doit
s'opérer aux bons endroits !
</td></tr>
</table><br>
</li>
<a name="gzip"></a>
<li>
Toujours en restant sous <code>UnixShell</code>, compressez le
tarfile en <code>.gz</code>. Affichez ensuite les informations
relatives aux tailles de fichiers et au ratio de
compression.<br>
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
gzip tarzip/Archives.tar<br>
ll tarzip<br>
<em>-rwxrwxr-x 1 [uid] users 612 May
5 16:23 Archives.tar.gz</em><br><br>
gzip -l tarzip/Archives.tar.gz<br>
<em>compressed uncompr. ratio uncompressed_name<br>
612
10240 94.3% tarzip/Archives.tar</em><br>
</td></tr>
</table><br>
</li>
<a name="gunzip"></a>
<li>
Toujours en restant sous <code>UnixShell</code>,
décompressez le tarfile.gz sur le disque. Puis
vérifiez le résultat en listing
complet. Recompressez le tarfile et contrôlez de
nouveau.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
gunzip tarzip/Archives.tar<br>
ll tarzip<br>
<em>-rwxrwxr-x 1 [uid] users 10240 May
5 14:23 Archives.tar</em><br><br>
gzip tarzip/Archives.tar<br>
<em>-rwxrwxr-x 1 [uid] users 612 May
5 16:48 Archives.tar.gz</em><br>
</td></tr>
</table><br>
</li>
<a name="gzcat"></a>
<li>
Toujours en restant sous <code>UnixShell</code>, et sans
décompresser le tarfile.gz sur le disque, comptez le
nombre de lignes non compressées qu'il renferme.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
gunzip -c tarzip/Archives.tar | wc -l
</td></tr>
</table><br>
</li>
</ul>
<h3>Gestion des processus</h3>
<ul>
<li>Activez plusieurs processus pour pouvoir travailler avec eux :
<ul><a name="T1"></a>
<li>Dans votre terminal courant, ouvrez un xemacs si ce
n'est pas déjà fait. Avec TeraTerm, omettez
ici le &. Ouvrez-y l'un de vos fichiers texte puis
quittez xemacs, SANS FERMER, avec
<code>control-z</code>. Vous récupérez la main
en conservant xemacs ouvert.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Ce premier terminal sera appelé T1 par la suite.
</td></tr>
</table><br>
</li>
<a name="T2"></a>
<li>
Ouvrez un second terminal (où vous pouvez rester en
<code>home directory</code>).
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Ce second terminal sera appelé T2 par la suite.
</td></tr>
</table><br>
</li>
</ul>
</li>
<a name="ps"></a>
<li>Affichez, dans chaque terminal, vos processus actifs.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Les numéros de processus qui suivent sont bien
sûr donnés à titre indicatif. Les
<code>PID</code> que vous aurez seront
différents lors de vos TP.<br><br>
<b>POUR T1 :</b><br>
ps<br>
<em> PID TTY TIME CMD<br>
14229 pts/19 0:01 xemacs-2<br>
13510 pts/19 0:00 ksh</em><br><br>
<b>POUR T2 :</b><br>
ps<br>
<em> PID TTY TIME CMD<br>
13843 pts/20 0:00 ksh</em>
</td></tr>
</table><br>
</li>
<a name="top"></a>
<li>
Affichez, dans votre terminal principal, la liste de tous les
processus du site (sans altération de
priorité). Comparez avec les deux commandes
précédentes. Qu'en déduire ?
<table bgcolor="yellow" border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
<b>POUR T1 :</b><br>
top<br><em>
last pid: 16210; load averages: 0.05,
0.09, 0.11 11:01:28<br>
260 processes: 257 sleeping, 1 zombie, 1
stopped, 1 on cpu<br>
CPU states: % idle,
% user, % kernel,
% iowait, % swap<br>
Memory: 2048M real, 1301M free, 318M swap in use, 5201M swap free<br><br>
PID USERNAME THR PRI NICE SIZE
RES STATE TIME CPU COMMAND<br>
16210 [uid] 1 38
0 1896K 1232K cpu/1 0:00 0.46% top<br>
19380 vidal 1 46
4 16M 13M sleep 0:36
0.24% xemacs-21.4.10<br>
14977 haumont 1 58
0 8496K 5920K sleep 0:00 0.21% vim<br>
14229 [uid] 1 42
4 17M 14M sleep 0:35
0.17% xemacs-2<br>
12720 stan 4 28
10 4424K 1960K sleep 0:10 0.05% httpd<br>
14292 zasadzin 1 58
0 5000K 3608K sleep 0:00 0.04% textedit<br>
29591 root 23 0
0 53M 23M sleep 9:13
0.01% java<br>
13469 morelc 1 38
0 1824K 1192K sleep 0:00 0.01% ksh<br>
17942 haumont 1 58
0 2864K 2248K sleep 0:00 0.01% olwm<br>
19317 vidal 8 58
0 9880K 7920K sleep 0:01 0.01% dtwm<br>
12719 stan 4
28 10 4424K 1792K sleep 0:10 0.00% httpd<br>
12724 stan 4
28 10 4424K 2064K sleep 0:09 0.00% httpd<br>
16200 morelc 1 48
0 1176K 888K sleep 0:00 0.00% more<br>
16199 morelc 1 58
0 976K 640K sleep 0:00 0.00% DamCat<br>
</em><br>
<b>Que déduire :</b><br>
<ul>
<li>
Tous vos processus ne sont pas
nécessairement visibles avec un
<code>top</code>. Ceci dépend des
priorités qui leur sont affectées
(col. PRI/NICE)
</li>
<li>
Vos principaux processus sont repérables
parmi l'ensemble de ceux du site. Cela permet de
savoir s'il faut altérer la priorité
de l'un (ou de plusieurs) de vos processus pour
laisser de la CPU à d'autres processus plus
importants
</li>
<li>
La place prise en mémoire par vos processus
vous permet d'en suivre l'exécution (en
laissant un <code>top</code> actif pendant
plusieurs secondes)
</li>
</ul>
</td></tr>
</table><br>
</li>
<a name="nice"></a>
<li>
La commande précédente étant toujours
active :
<ul>
<li>Altérez sa priorité en la passant à 10.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
renice 10 16210<br>
<em>[...]<br>
16210 [uid] 1 38
10 2760K 1736K cpu/1 0:00 0.32% top<br>
[...]</em>
</td></tr>
</table><br>
</li>
<a name="u"></a>
<li>Affichez vos seuls processus.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
u [uid]<br>
<em>[...]<br>
16210 [uid] 1 58
0 2760K 1744K cpu/0 0:00 0.49% top<br>
13510 [uid] 1 48
0 1800K 1120K sleep 0:00 0.03% ksh<br>
14229 [uid] 1 55
0 14M 10M
stop 0:00 0.00% xemacs-2<br>
13843 [uid] 1 48
0 1800K 1096K sleep 0:00 0.00% ksh<br>
[...]<br></em>
</td></tr>
</table><br>
</li>
<a name="kill"></a>
<li>
Terminez le processus correspondant à xemacs en
tâche de fond.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
kill -9 14229
</td></tr>
</table><br>
</li>
<a name="quit"></a>
<li>Observez ce qui se passe et commentez-le.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Pensez à quitter <code>top</code>.
</td></tr>
</table><br>
</li>
</ul>
</li>
<a name="ps2"></a>
<li>
Affichez de nouveau, dans votre terminal principal, vos
processus actifs.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Pour contrôler, faîtes un <code>ps</code>
car vous ne voyiez peut-être pas ce processus
par <code>top</code> précédemment. Le
processus 14229 correspondant à xemacs a bien
disparu.<br>
Mais le processus 13510 correspondant au
<code>ksh</code> du terminal T1 est lui toujours
là (ce qu'est ce <code>ksh</code> sera vu
dès le cours suivant).
</td></tr>
</table><br>
</li>
<a name="kill2"></a>
<li>
À partir de votre terminal principal, terminez le
processus correspondant au second terminal.
<table border="1" class="commands" style="margin-left:0;">
<tr><td style="text-align:left">
Ces <code>ksh</code> sont donc liés aux
terminaux ouverts. Au besoin, par un <code>ps</code>,
vous pouvez vérifier le <code>PID</code> du
<code>ksh</code> relié au terminal T2 (vu avant
ici : 13843).<br><br>
top<br>
kill -9 13843<br>
q<br><br>
Cela a bien pour effet de fermer votre terminal T2.
</td></tr>
</table><br>
</li>
</ul>
<hr>
<address><a href="mailto:philippe.houdry@inist.fr">Philippe.Houdry@inist.fr</a></address>
</body>
</html>