### exercice L'arbre de notre système de fichier est fabriqué à partir de 2 éléments. 1. une feuille de l'arbre = des données stockées à une certaine adresse dans la mémoire 2. un noeud interne de l'arbre = des données stockées à une certaine adresse dans la mémoire qui associe un nom (de fichier ou de répertoire) à un élément de type 1. ou 2. identifiable par le système. En gros le fichier correspondant à un répertoire est une sorte de *livret de famille*. En pratique, le système utilise une structure de donnée particulière à la fois pour les fichiers et les répertoires (puisqu'il s'agit dans les deux cas de fichiers) qui s'appelle un [inode](https://en.wikipedia.org/wiki/Inode). En pratique vous pouvez utiliser l'option suivante pour affichier les numéros des inode. ```bash ls -i ``` ### exercice pour aller encore plus loin Nous avons évoqué les liens symboliques qui sont des raccourcis. Littéralement c'est juste un fichier texte un peu spécial qui contient comme données la chaîne de caractère du fichier vers lequel on pointe. Donc quand on a fait ci-dessus. ```bash ln -s ../folderA/grapevine.txt ``` On a fabriqué un fichier raccourci spécial qui contient essentiellement l'information ```bash ../folderA/grapevine.txt ``` Si vous utilisez la même commande mais en omettant l'option -s vous êtes en train de définir un nouveau nom pour l'inode du fichier grapevine.txt Donc la métaphore de l'arbre n'est pas tout à fait correcte puisque par plusieurs chemins dans les répertoires il est possible d'atteindre le même fichier. La commande de suppression de fichier rm (pour remove) ne supprime pas vraiment l'inode, elle va juste effacer le nom du fichier (et la référence vers l'inode associé à ce nom) dans le répertoire. [Détails sur stackoverflow](https://stackoverflow.com/questions/185899/what-is-the-difference-between-a-symbolic-link-and-a-hard-link) NB. Je n'ai pas testé sous WSL puisque je n'ai pas windows. Il serait amusant de regarder ce qui arrive aux fichiers linux avec plusieurs noms quand on les regarde en vue détaillée dans l'explorateur de fichier de windows. A priori NTFS a une notion compatible
## Manipulation de fichier Pour simplifier un texte, par exemple pour l'indexer ou pour normaliser un nom dans une base de données il est fréquent qu'on bascule un mot en majuscule. Nous allons travailler avec la commande tr qui permet de faire de tel changement caractère par caractère. Par exemple ceci permet de transformer les minuscules en majuscule. ```bash tr '[a-z]' '[A-Z]' ``` La commande tr attend un flux textuel en entrée et transmet un flux textuel en sortie. On parle de filtre pour ce genre de commande. On ne peut pas a priori lui passer de fichier en paramètre. Il faut *rediriger* le contenu du fichier vers la commande. ```bash tr '[a-z]' '[A-Z]' < grapevine.txt ``` Par défaut le résultat apparaît à l'écran. On peut rediriger ce résultat dans un fichier en utilisant > ```bash tr '[a-z]' '[A-Z]' < grapevine.txt > grapevineUp.txt ``` Vous pouvez consulter le contenu d'un fichier directement en utilisant la commande more ```bash more grapevineUp.txt ``` Attention toutefois avec > car le contenu du fichier si il existe est écrasé. Il existe une variante utile >> qui écrit à la fin du fichier. C'est utilisé par exemple pour créer des fichiers de log. ### exercice Redirigez le résultat de la commande history dans un fichier de sauveguarde myFirstDayWithTheCommandLine.txt. ```bash history > myFirstDayWithTheCommandLine.txt ``` Vous pouvez consulter ce fichier en utilisant more. Vous pouvez voir le haut du fichier en faisant head, la fin du fichier en faisant tail. ## Code de césar Cherchez à appliquer le code de césar (rot13) à un fichier contenant du texte non accentué (i.e. ascii historique). Envoyez le par mail à votre voisin. Ce dernier doit le décoder. ```bash tr '[A-Z]' '[N-ZA-M]' ```