Ajout des exercices sur les commandes Unix élémentaires
This commit is contained in:
parent
a7d6943b0d
commit
ec5f9ce3ac
3 changed files with 467 additions and 1 deletions
|
@ -131,7 +131,7 @@ en urgence ; inutile de dire qu'il ne l'appr
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div class="attention">
|
<div class="attention">
|
||||||
<h1>&icone.attention;Attention&icone.attention;</h1>
|
<h1>&icone.attention; Attention &icone.attention;</h1>
|
||||||
<p> Les choses se
|
<p> Les choses se
|
||||||
passent particulièrement mal avec <code>pine</code> : c'est pendant la
|
passent particulièrement mal avec <code>pine</code> : c'est pendant la
|
||||||
seconde qui s'écoule entre le moment où vous tapez <code>q</code> et le moment
|
seconde qui s'écoule entre le moment où vous tapez <code>q</code> et le moment
|
||||||
|
|
387
unix/exercices/solutions/unix_deb-sol.tml
Normal file
387
unix/exercices/solutions/unix_deb-sol.tml
Normal file
|
@ -0,0 +1,387 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<!DOCTYPE html
|
||||||
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
||||||
|
"tuteurs://DTD/tml.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Commandes Unix</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Corrigés des exercices sur les commandes Unix
|
||||||
|
élémentaires</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<p>&icone.note; Les paragraphes signalés par cette icône sont des
|
||||||
|
explications plus techniques pour donner une réponse exacte à certaines
|
||||||
|
questions. Si vous êtes débutant, ce n'est pas nécessaire de les lire
|
||||||
|
maintenant.</p>
|
||||||
|
|
||||||
|
<h2><a name="debut1">Exercice 1 (<code>joe</code>, <code>less</code>,
|
||||||
|
<code>ls</code>)</a></h2>
|
||||||
|
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
|
||||||
|
<li> <strong>Créez un fichier <code>premiertexte</code> contenant une ou
|
||||||
|
deux phrases</strong>.
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Pour créer un fichier et écrire du texte dedans, il faut l'éditer avec un
|
||||||
|
éditeur de votre choix. Nous proposons <code>nano</code> aux débutants. Il
|
||||||
|
faut donc taper </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> nano premiertexte
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p><strong>Utilisation de <code>nano</code></strong> : le prompt
|
||||||
|
affichant le nom de la machine disparaît; vous avez à la place une page
|
||||||
|
blanche où vous pouvez taper du texte. Le nom du fichier que vous éditez
|
||||||
|
et le nom de l'éditeur sont affichés en haut.
|
||||||
|
La liste des commandes disponibles est écrite en bas. Vous pouvez faire
|
||||||
|
<code>Ctrl-O</code> pour enregistrer et <code>Ctrl-X</code> pour
|
||||||
|
quitter.</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Vous pouvez maintenant taper ce que vous voulez et quitter en
|
||||||
|
enregistrant (<code>Ctrl-X</code> puis répondre <code>y</code> au moment
|
||||||
|
où <code>nano</code> vous demande si vous voulez enregistrer le texte).
|
||||||
|
</p></li>
|
||||||
|
|
||||||
|
<li> <strong>Visualisez le contenu de <code>premiertexte</code> sans
|
||||||
|
l'éditer</strong>
|
||||||
|
|
||||||
|
|
||||||
|
<p>C'est la commande <code>less</code> qui permet de faire cela (ou
|
||||||
|
<code>more</code>, si <code>less</code> n'est pas installée là où vous vous
|
||||||
|
trouvez). Pour lire le contenu de <code>premiertexte</code>, il faut taper
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> less premiertexte
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Pour quitter <code>less</code> ou <code>more</code>, taper <code>q</code>.
|
||||||
|
</p></li>
|
||||||
|
|
||||||
|
<li> <strong>Quelle est la taille de
|
||||||
|
<code>premiertexte</code> ?</strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
C'est l'option <code>-l</code> de <code>ls</code> qui permet de savoir la
|
||||||
|
taille d'un fichier, sa date de dernière modification, etc. Vous tapez
|
||||||
|
donc : </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> ls -l
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Cette commande sans arguments vous donne la liste de tous vos fichiers. Si
|
||||||
|
vous voulez connaître les caractéristiques de <code>premiertexte</code> et rien
|
||||||
|
d'autre, tapez
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> ls -l premiertexte
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
La config conscrits propose l'alias <code>ll</code> pour
|
||||||
|
<code>ls -l</code>.
|
||||||
|
</p></li>
|
||||||
|
|
||||||
|
<li> <strong>Éditez <code>PREMIERTEXTE</code>. Que
|
||||||
|
constatez-vous ?</strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Pour éditer <code>PREMIERTEXTE</code>, vous tapez
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> joe PREMIERTEXTE
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Vous constatez qu'il s'agit d'un nouveau fichier, et que vous ne retrouvez pas
|
||||||
|
le contenu de <code>premiertexte</code>. C'est normal : Unix est <em>case
|
||||||
|
sensitive</em>, c'est-à-dire sensible à la <em>casse</em> des
|
||||||
|
caractères : majuscules et minuscules ne sont pas interchangeables. C'est
|
||||||
|
pourquoi <code>premiertexte</code> et <code>PREMIERTEXTE</code> sont deux
|
||||||
|
fichiers différents.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h2> <a name="debut2">Exercice 2 (<code>cp</code>, <code>ls</code>,
|
||||||
|
<code>mv</code>)</a></h2>
|
||||||
|
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
|
||||||
|
<li> <strong>Faites une copie de <code>premiertexte</code> appelée
|
||||||
|
<code>double</code></strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
C'est la commande <code>cp</code> (<em>copy</em>) qui sert à faire une copie
|
||||||
|
d'un fichier, en indiquant le nom du fichier à copier puis nom du nouveau
|
||||||
|
fichier. Il faut donc taper : </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> cp premiertexte double
|
||||||
|
</pre></li>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<li> <strong>Comparez leurs tailles</strong>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Comme dans l'exercice 1, c'est l'option <code>-l</code> de <code>ls</code> qui
|
||||||
|
va servir. En tapant <code>ls -l</code> sans argument, vous affichez le
|
||||||
|
contenu du répertoire en entier. Si vous voulez limiter l'affichage aux deux
|
||||||
|
fichiers souhaités, tapez
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> ls -l premiertexte double
|
||||||
|
</pre></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li> <strong>Renommez <code>double</code> en
|
||||||
|
<code>introduction</code></strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
C'est la commande <code>mv</code> (<em>move</em>) qui sert à renommer un
|
||||||
|
fichier. Pour renommer <code>double</code>, il faut donc taper :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> mv double introduction
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
En tapant <code>ls</code>, vous pouvez vérifier que le fichier
|
||||||
|
<code>double</code> a disparu au profit d'un fichier
|
||||||
|
<code>introduction</code>.</p>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
<li> <strong>Quelle différence y a-t-il entre
|
||||||
|
<code>mv double introduction</code> et
|
||||||
|
<code>cp double introduction</code> ?</strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<code>mv</code> (<em>move</em>) renomme un fichier : seul son nom est
|
||||||
|
modifié, son contenu reste inchangé et aucun autre fichier n'est créé.
|
||||||
|
<code>double</code> disparaît au profit de <code>introduction</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<code>cp</code> (<em>copy</em>) fait une copie du premier fichier : un
|
||||||
|
nouveau fichier est créé, son contenu est identique à celui du fichier
|
||||||
|
d'origine, mais leurs noms sont différents. <code>double</code> et
|
||||||
|
<code>introduction</code> existent de façon parallèle.
|
||||||
|
</p>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h2> <a name="debut3">Exercice 3 (<code>mkdir</code>,
|
||||||
|
<code>mv</code>, <code>cp</code>, <code>ls</code>,
|
||||||
|
<code>cd</code>)</a></h2>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
|
||||||
|
<li> <strong>Créez un répertoire <code>essai/</code></strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Il faut taper
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> mkdir essai
|
||||||
|
</pre>
|
||||||
|
<p class="continue">(<em>make directory «essai»</em>) </p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Vous pouvez vérifier en tapant <code>ls</code> que le répertoire a bien été
|
||||||
|
créé.
|
||||||
|
</p></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li> <strong>Déplacez <code>double</code> dans <code>essai/</code></strong>
|
||||||
|
|
||||||
|
|
||||||
|
<p>C'est <code>mv</code> (<em>move</em>) qui sert à déplacer des fichiers, ainsi
|
||||||
|
qu'à les renommer : </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> mv double essai/
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Le slash (<code>/</code>) n'est pas obligatoire, c'est en fait un agrément
|
||||||
|
pour identifier plus vite les répertoires dans une liste de fichiers
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>&icone.note; C'est l'option <code>-F</code> de <code>ls</code> qui
|
||||||
|
fait apparaître ce symbole; vous avez en fait un alias de <code>ls</code>
|
||||||
|
sur <code>ls -F</code>). </p></li>
|
||||||
|
|
||||||
|
<li> <strong>Faites une copie de <code>premiertexte</code> appelée
|
||||||
|
<code>copie</code>, et placez-la également dans
|
||||||
|
<code>essai/</code>.</strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
On peut faire ça de plusieurs façons :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li> Faire la copie dans le répertoire courant, puis déplacer cette copie dans
|
||||||
|
le sous-répertoire <code>essai/</code> :
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> cp premiertexte copie
|
||||||
|
<span class="prompt">bireme ~ $</span> mv copie essai/
|
||||||
|
</pre></li>
|
||||||
|
|
||||||
|
<li> Faire directement la copie dans le sous-répertoire
|
||||||
|
<code>essai/</code> :
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> cp premier texte essai/copie
|
||||||
|
</pre></li>
|
||||||
|
|
||||||
|
<li> N'oublions pas le cas où nous ne serions pas dans le répertoire
|
||||||
|
d'accueil, mais dans <code>essai/</code>. On pourrait d'abord faire la copie
|
||||||
|
dans le répertoire père, puis amener cette copie là où on se trouve :
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~/essai $</span> cp ../premier texte ../copie
|
||||||
|
<span class="prompt">bireme ~/essai $</span> mv ../copie .
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p class="continue">Ou plus simplement, on pourrait copier le fichier du répertoire père
|
||||||
|
directement dans le répertoire courant :</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~/essai $</span> cp ../premiertexte copie
|
||||||
|
</pre></li>
|
||||||
|
</ul></li>
|
||||||
|
|
||||||
|
|
||||||
|
<li> <strong>Affichez une liste de ce que contient
|
||||||
|
<code>essai/</code></strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Si l'on est dans le répertoire personnel, on tape :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> ls essai
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p class="continue">
|
||||||
|
pour avoir une liste de ce que contient <code>essai</code>. Le résultat
|
||||||
|
ressemblera à ça :</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> ls essai
|
||||||
|
copie double
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p class="continue">
|
||||||
|
Et si vous vous trouvez alors dans <code>essai/</code>, le résultat sera le
|
||||||
|
suivant :</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~/essai $</span> ls
|
||||||
|
copie double
|
||||||
|
</pre></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<h2><a name="debut4">Exercice 4 (<code>rmdir</code>, <code>cd</code>,
|
||||||
|
<code>rm</code>)</a></h2>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
|
||||||
|
<li> <strong>Essayez de drétuire <code>essai/</code>. Que se
|
||||||
|
passe-t-il ? Que faut-il faire pour détruire un
|
||||||
|
répertoire ?</strong>
|
||||||
|
|
||||||
|
<p> C'est la commande <code>rmdir</code> (<em>remove directory</em>) qui
|
||||||
|
sert à détruire les répertoires. Cependant, on ne peut détruire un
|
||||||
|
répertoire qu'à condition qu'il soit entièrement vide, c'est pourquoi le
|
||||||
|
programme vous répond
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
rmdir: essai: directory not empty
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p class="continue">
|
||||||
|
Il faut donc vider le répertoire pour pouvoir le détruire.</p></li>
|
||||||
|
|
||||||
|
<li> <strong>Détruisez tout ce que contient <code>essai/</code></strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
C'est la commande <code>rm</code> qui permet de détruire des fichiers. Il faut
|
||||||
|
donc taper : </p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~/essai $</span> rm double copie
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Vous pouvez aussi vous servir de certains caractères spéciaux; ici, c'est
|
||||||
|
<code>*</code> (étoile) qui est utile. «Étoile» signifie «Tout chaîne de
|
||||||
|
caractères ne commençant pas par un point». Donc, pour effacer d'un seul coup
|
||||||
|
tous les fichiers du répertoire, vous pouvez taper :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~/essai $</span> rm *
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div class="attention">
|
||||||
|
<h1>&icone.attention; Attention &icone.attention;</h1>
|
||||||
|
<p> Il se trouve que votre configuration est ainsi faite
|
||||||
|
que le programme demande confirmation avant d'effacer des fichiers . Cela
|
||||||
|
vient de ce qu'il y a un <em>alias</em> de <code>rm</code> sur
|
||||||
|
<code>rm -i</code>; l'option <code>-i</code> est l'option «interactive»,
|
||||||
|
qui demande confirmation. </p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Soyez donc prudents : on a vite fait de confondre <code>mv</code>
|
||||||
|
(<em>move</em>) et <code>rm</code> (<em>remove</em>), et l'option
|
||||||
|
<code>-i</code> n'est pas systématiquement mise.
|
||||||
|
</p>
|
||||||
|
</div></li>
|
||||||
|
|
||||||
|
<li> <strong>Détruisez <code>essai/</code></strong>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Revenez dans le répertoire père (<code>cd ..</code>) et tapez :
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
<span class="prompt">bireme ~ $</span> rmdir essai/
|
||||||
|
</pre>
|
||||||
|
(<em>remove directory «essai»</em>)
|
||||||
|
</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="metainformation">
|
||||||
|
Auteur : Émilia Robin, Joël Riou. Dernière modification le 2002-11-04.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
79
unix/exercices/unix_deb.tml
Normal file
79
unix/exercices/unix_deb.tml
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||||
|
<!DOCTYPE html
|
||||||
|
PUBLIC "-//ENS/Tuteurs//DTD TML 1//EN"
|
||||||
|
"tuteurs://DTD/tml.dtd">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Commandes Unix</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h1>Exercices sur les commandes Unix élémentaires</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<h2> <a name="1">Exercice 1 (<code>joe</code>, <code>less</code>,
|
||||||
|
<code>ls</code>)</a></h2>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li> Créez un fichier <code>premiertexte</code> contenant une ou deux
|
||||||
|
phrases.</li>
|
||||||
|
<li> Visualisez le contenu de <code>premiertexte</code> sans
|
||||||
|
l'éditer.</li>
|
||||||
|
<li> Quelle est la taille de <code>premiertexte</code> ?</li>
|
||||||
|
<li> Éditez <code>PREMIERTEXTE</code>. Que constatez-vous ?</li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p><a href="solutions/unix_deb-sol.html#debut1">Solution
|
||||||
|
&icone.solution;</a> </p>
|
||||||
|
|
||||||
|
<h2> <a name="2">Exercice 2 (<code>cp</code>, <code>ls</code>,
|
||||||
|
<code>mv</code>)</a></h2>
|
||||||
|
|
||||||
|
<ol>
|
||||||
|
<li> Faites une copie de <code>premiertexte</code> appelée
|
||||||
|
<code>double</code>.</li>
|
||||||
|
<li> Comparez leurs tailles.</li>
|
||||||
|
<li> Renommez <code>double</code> en <code>introduction</code>.</li>
|
||||||
|
<li> Quelle différence y a-t-il entre
|
||||||
|
<pre>
|
||||||
|
mv double introduction
|
||||||
|
</pre>
|
||||||
|
<p class="continue">et</p>
|
||||||
|
<pre>
|
||||||
|
cp double introduction
|
||||||
|
</pre></li>
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<p><a href="solutions/unix_deb-sol.html#debut2">Solution &icone.solution;</a></p>
|
||||||
|
|
||||||
|
<h2> <a name="3">Exercice 3 (<code>mkdir</code>,
|
||||||
|
<code>mv</code>, <code>cp</code>, <code>ls</code>, <code>cd</code>)</a></h2>
|
||||||
|
<ol>
|
||||||
|
|
||||||
|
<li> Créez un répertoire <code>essai/</code>.</li>
|
||||||
|
<li> Déplacez <code>introduction</code> dans <code>essai/</code>.</li>
|
||||||
|
<li> Faites une copie de <code>premiertexte</code> appelée <code>copie</code>,
|
||||||
|
et placez-la également dans <code>essai/</code>.</li>
|
||||||
|
<li> Affichez une liste de ce que contient <code>essai/</code>.</li>
|
||||||
|
</ol>
|
||||||
|
<p> <a href="solutions/unix_deb-sol.html#debut3">Solution &icone.solution;</a></p>
|
||||||
|
|
||||||
|
<h2> <a name="4">Exercice 4 (<code>rmdir</code>,
|
||||||
|
<code>cd</code>, <code>rm</code>)</a></h2>
|
||||||
|
<ol>
|
||||||
|
<li> Essayez de détruire <code>essai/</code>. Que se passe-t-il ? Que
|
||||||
|
faut-il faire pour détruire un répertoire ?</li>
|
||||||
|
<li> Détruisez tout ce que contient <code>essai/</code>.</li>
|
||||||
|
<li> Détruisez <code>essai/</code>.</li>
|
||||||
|
</ol>
|
||||||
|
<p><a href="solutions/unix_deb-sol.html#debut4">Solution &icone.solution;</a></p>
|
||||||
|
|
||||||
|
|
||||||
|
<div class="metainformation">
|
||||||
|
Auteur : Émilia Robin, Joël Riou. Dernière modification le
|
||||||
|
2002-11-04.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue