\documentclass{article}
\usepackage[latin1]{inputenc}

\title{TD 1 d'Environnement Logiciel}
\date{Lundi 13 septembre 2004}

\begin{document}
\maketitle

\section{Fichiers et commandes de base}

\textbf{Répertoires}

\begin{itemize}

\item Tapez les commandes \verb+ls+, \verb+ls -l+, \verb+ls -a+ et
\verb+ls -i+. Combinez les options avec \verb+ls -lai+. Expliquez les
différentes sorties obtenues (en cas de doute, voir \verb+man ls+).

\item Créez un sous-répertoire \verb+Unix+ dans votre répertoire
\verb+travail+ avec les commandes \verb+mkdir+ et \verb+cd+.

\item Dans la sortie de \verb+ls+, que représentent les répertoires
\verb+.+ et \verb+..+ ?

\item Explorez le système. Par exemple regardez ce qui se trouve à la
racine \verb+/+. Revenez à votre répertoire en tapant \verb+cd+.

\end{itemize}

\textbf{Les fichiers}

\begin{itemize}

\item Allez dans votre répertoire \verb+travail/Unix+ et créez un
fichier \verb+test.txt+ avec votre éditeur de texte favori (si vous
n'avez pas d'éditeur favori, lancez \verb+emacs+...). Tapez quelques
lignes dans ce fichier.

\item Visualisez le contenu du fichier avec les commandes \verb+cat+,
\verb+more+ et \verb+less+.

\item Renommez votre fichier avec la commande \verb+mv test.txt test_2.txt+.
Observez le résultat en comparant les sorties avant et
après des commandes \verb+ls+ et \verb+ls -i+.

\item Créez un répertoire \verb+Test+ ainsi qu'un sous-répertoire
\verb+Test/Tst+ et déplacez-y le fichier avec la commande
\verb+mv test_2.txt Test/Tst/+. Tapez \verb+ls -l; ls -l Test/Tst+.

\item Tapez \verb+ls -Rlai+. Observez les numéros des \emph{inodes}
dans la colonne de gauche.

\item Déplacez/Renommez le répertoire \verb+Tst+ avec la commande
\verb+mv Test/Tst Nouveau_Tst+. Utilisez \verb+ls -Rlai+ pour observer
que les \emph{inodes} n'ont pas changé.

\item Dupliquez le fichier avec la commande
\verb+cp Nouveau_Tst/test_2.txt test_3.txt+. Utilisez \verb+ls -Rlai+ pour
vérifier que le fichier a bien un nouveau numéro.

\item Créez un lien physique sur le fichier \verb+test_3.txt+ avec la
commande \verb+ln test_3.txt phy_ln.txt+. Comparez les \emph{inodes}
de ces deux fichiers. Observez également la seconde colonne du
résultat de \verb+ls -l+.

\item Créez un lien symbolique sur le fichier \verb+test_3.txt+ avec
la commande \verb+ln -s test_3.txt sym_ln.txt+. Comparez les
\emph{inodes} de ces deux fichiers. Observez également comment ce
nouveau fichier apparaît au travers des commandes \verb+ls+ et
\verb+ls -l+.

\end{itemize}

\textbf{Utilisateurs, groupes}

\begin{itemize}

\item Quel est votre nom d'utilisateur (\emph{login}) ? Cf commande
\verb+whoami+.

\item En regardant le fichier \verb+/etc/passwd+ et la page de manuel
associée (\verb+man 5 passwd+) indiquez l'\emph{uid} de \verb+root+, son
shell, son répertoire de travail (\emph{home}).

\item En regardant le fichier \verb+/etc/group+ et la page de manuel
associée (\verb+man 5 group+) indiquez le ou les groupes dont
\verb+root+ fait parti.

\item En observant la sortie de \verb+ypcat passwd+ dont le format est
le même que celui de \verb+/etc/passwd+, indiquez votre \emph{uid},
votre nom réel dans le système, la localisation de votre répertoire de
travail dans le système de fichier, votre shell.

\item En observant la sortie de \verb+ypcat group+ dont le format est
le même que celui de \verb+/etc/group+, indiquez le ou les groupes
dont vous faites parti.

\item Y a-t-il des utilisateurs dont le shell est \verb+/bin/false+ ?
Lancez la commande \verb+false+ et regardez sa page de manuel. Quel
intérêt peut il y avoir à donner \verb+/bin/false+ comme shell de
login? (voir aussi \verb+man login+).

\end{itemize}

\textbf{Droits d'accès aux fichiers}

\begin{itemize}

\item Tapez \verb+ls -l+ dans le répertoire \verb+travail/Unix/Test+.
Observez les droits des fichiers et des répertoires. Ils sont classés
dans l'ordre \{utilisateur, groupe, autres\}, \verb+r+ étant le droit
de lecture, \verb+w+ le droit d'écriture et \verb+x+ le droit
d'exécution.

\item Tapez \verb+chmod -r test_3.txt; ls -l test_3.txt; more test_3.txt+.
Restaurez l'ancien état avec \verb-chmod +r test_3.txt-.

\item Dupliquez le fichier \verb+test_3.txt+, supprimez les droits
d'écriture et supprimez le fichier avec la commande \verb+rm+. Les
droits d'écritures sur un fichier ont-ils un effet sur la possibilité
de supprimer ce fichier?

\item Tapez \verb+chmod -w .; ls -l+. Essayez de créer un nouveau
fichier dans le répertoire \verb+Test+. Essayez de créer un nouveau
fichier dans le répertoire \verb+Nouveau_Tst+. Restaurez l'ancien état
par \verb-chmod +w .-.

\item Tapez \verb+chmod -x Nouveau_Tst; cd Nouveau_Tst+.

\item Tapez \verb+less Nouveau_Tst/test_2.txt+. Restaurez l'ancien
état par \verb-chmod +x Nouveau_Tst-.

\item Comment sont gérés les droits sur les liens physiques?

\item Créez à votre racine un répertoire \verb+incoming+ où n'importe
quel membre de votre groupe puisse déposer des fichiers mais sans
pouvoir lire le contenu ni du répertoire, ni des fichiers déposés.
Vous devez disposer de tous les droits sur ce répertoire et les
utilisateurs qui ne font pas partie de votre groupe ne doivent
disposer d'aucun droit.

\end{itemize}

\textbf{Commande} \verb+umask+

\begin{itemize}

\item La commande \verb+umask+ contrôle les droits par défaut des
fichiers créés. Sa syntaxe est \verb+umask 0ooo+ avec \verb+0ooo+ un
nombre octal commençant par 0 et comprenant les droits \emph{ugo} avec
\verb+read=4, write=2, execute=1+.

\item Tapez \verb+umask+ pour voir votre masque courant.

\item Tapez \verb+umask 124; mkdir T; ls -l+.

\item Créez et sauvegardez un nouveau fichier texte avec un éditeur de
texte lancé depuis le \emph{shell}. Observez ses droits.

\item Créez et sauvegardez un nouveau fichier mais avec un éditeur
texte lancé depuis un autre \emph{shell}.

\item Restaurez votre ancien \verb+umask+ (probablement
\verb+umask 022+).

\end{itemize}

\textbf{Les processus}

\begin{itemize}

\item Tapez \verb+ps+, puis \verb+ps ax+.

\item Écrivez un fichier \verb+C+ qui fait une boucle infinie
\verb+for (;;)+.

\item Interrompez le programme avec \verb+CTRL-c+.

\item Relancez le programme et interrompez le avec \verb+CTRL-z+.
Tapez \verb+ps+. Relancez le programme par \verb+fg+
(\emph{foreground}) puis interrompez le à nouveau par \verb+CTRL-z+.
Tapez \verb+bg+ (\emph{background}). Maintenant le programme s'exécute
en tâche de fond.

\item Tuez le programme par la commande \verb+kill -KILL+ \emph{numéro
du processus}.

\item Lancez le programme en tâche de fond en ajoutant \verb+&+ à la
ligne de commande.

\item Lancez la commande \verb+top+. Appuyez sur la touche \verb+h+
pour accéder à l'aide. Tuez le processus de fond à l'aide de
\verb+top+. Quittez \verb+top+ (touche \verb+q+).
\end{itemize}

\textbf{Édition de lien}, \verb+gcc+, \verb+ld+, \verb+make+.

Exemple d'un projet complet: \emph{ecm}.

Ecm pour \emph{Elliptic Curve Method} est un logiciel permettant de
factoriser des nombres entiers via la méthode des courbes elliptiques.
C'est surtout un projet contenant plusieurs modules en \verb+C+ que
l'on va utiliser pour illustrer la compilation séparée.

\begin{itemize}

\item Récupérez les sources du projet avec la commande:\\
\verb+cvs -d:pserver:cvs@cvs-sop.inria.fr:/CVS/spaces co ecm+.
Un répertoire \verb+ecm+ contenant le projet va être créé dans le
répertoire courant.

\item Combien de fichiers \verb+C+ composent le projet?

\item Où se trouve le point d'entrée du programme?

\item Tapez \verb+make+ et observez la sortie à l'écran. Avec
\verb+ls -la+ avant et après l'exécution de \verb+make+, regardez les
fichiers créés par la commande. \verb+make+ est une commande très
utile pour le développeur, voir\\
\verb+http://www.gnu.org/software/make/+ pour plus d'informations.

\item Tapez \verb+make clean+ et recommencez la compilation à la main
(sans utilisez \verb+make+) avec l'utilisation de \verb+gcc+ et
\verb+ld+.

\item Plus fort: observez les diverses étapes de la compilation d'un
fichier \verb+C+ de votre choix en utilisant \verb+gcc -E+,
\verb+gcc -S+, \verb+gas+...

\item Après avoir tapé \verb+make+, retapez \verb+make+. Normalement,
il ne se passe rien.

\item Exécutez \verb+touch median.o+ puis \verb+make+. Que se
passe-t-il? Pourquoi?

\item Éditez la fonction \verb+main+ du projet pour afficher un
message de bienvenu de votre choix à chaque démarrage et tapez
\verb+make+. Quels étapes de la création du fichier exécutable final
sont effectuées?

\end{itemize}

\end{document}
