Le système de fichiers racine (root file system), soit le système de fichiers primaire est associé au répertoire le plus haut / :
/bin commandes binaires utilisateur essentielles (pour tous les utilisateurs)
/boot fichiers statiques du chargeur de lancement
/dev fichiers de périphériques
/etc configuration système spécifique à la machine
/home répertoires personnels des utilisateurs (optionnel)
/lib bibliothèques partagées essentielles et modules du noyau
/mnt point de montage pour les systèmes de fichiers montés temporairement
/proc système de fichiers virtuel d'information du noyau et des processus
/root répertoire personnel de root (optionnel)
/sbin binaires système (binaires auparavant mis dans /etc)
/sys état des périphériques (model device) et sous-systèmes (subsystems)
/tmp fichiers temporaires
Le but de cette partie est la prise en main des commandes de base de l’environnement Linux.
C’est l’interpréteur de commandes (l'interface) entre l'utilisateur et le système d'exploitation, d'où son nom anglais « shell », qui signifie « coquille ».
Le shell est ainsi chargé de faire l'intermédiaire entre le système d'exploitation et l'utilisateur grâce aux lignes de commandes saisies par ce dernier. Son rôle consiste ainsi à lire la ligne de commande, interpréter sa signification, exécuter la commande, puis retourner le résultat sur les sorties.
Chaque utilisateur possède un shell par défaut, qui sera lancé à l'ouverture d'une invite de commande. Le shell par défaut est précisé dans le fichier de configuration /etc/passwd dans le dernier champ de la ligne correspondant à l'utilisateur. Il est possible de changer de shell dans une session en exécutant tout simplement le fichier exécutable correspondant, par exemple : /bin/bash
Avant de commencer, il faut savoir que Linux est sensible à la casse (case sensitive en anglais), c'est à dire qu'il distingue les majuscules des minuscules. Ainsi, pour créer un répertoire, la commande est 'mkdir', ce n'est pas la peine d'essayer MKDIR ou mKdiR, cela ne fonctionnera pas. De même, les noms de fichiers et de répertoires sont également sensibles à la casse.
De plus, sous Unix, les chemins sont séparés par des slash : /etc//init/xfs mais jamais etc\init\xfs.
. représente le répertoire courant,
.. représente le répertoire parent
~ représente le répertoire maison (home) de l'utilisateur
sous Unix, les fichiers cachés commencent par un point. Par exemple, ~/.bashrc est un fichier caché, dans le répertoire maison de l'utilisateur, qui contient la configuration de son shell.
Les caractères ? et * dans les noms de fichiers et de répertoires permettent de représenter des caractères quelconques. '?' représente un seul caractère, tandis que '*' en représente un nombre quelconque.
Par exemple, « *.jpg »représente tous les fichiers se terminant par jpg ; « *toto* »tous les fichiers contenant« toto ».
Il faut également savoir que c'est le shell qui interprète ces caractères avant de transmettre la ligne de commande.
... .... ... ... ...
Un éditeur de texte permet de rentrer du texte dans un fichier afin de le conserver.
vi (prononcez vie-aïe ou [vi:ai]) est l'éditeur de texte de base sous Linux, vous risquez bien d'avoir à vous en servir au plus mauvais moment, c'est à dire lorsque plus rien d'autre ne fonctionne.
vi nom_du_fichier
Si vous tentez d'ouvrir un fichier inexistant, vi créera ce fichier. Vous pouvez donc créer un nouveau fichier simplement en tapant
vi possède deux modes : le mode« Insert »et le mode commande. En mode commande, vous ne pouvez pas insérer de texte dans le fichier, mais les touches du clavier sont autant de touches de commandes. En mode Insert, les touches de commandes (notamment les lettres !) se transforment en vraies lettres que vous pouvez insérer dans le fichier.
Insérer du texte
Lorsque vi s'ouvre, il est en mode commande. Pour passer en mode Insert :
tapez [i] ou [Insert] pour insérer du texte à l'endroit où se trouve le curseur, tapez [A] pour ajouter du texte à la fin d'une ligne.
En mode Insert, vous pouvez taper du texte, effacer avec la touche [Suppr] ou [Bkspace]. Pour quitter le mode Insert, tapez [Esc].
Remarque : à la suite de votre fichier, vous voyez des lignes vides commençant par le caractère '~'. C'est normal : cela signifie juste que ces lignes sont vides, et les caractères '—' ne seront bien sûr pas enregistrés dans votre fichier.
Après avoir quitté le mode Insert, ou avant d'y être entré, les touches du clavier correspondent à des commandes.
Voici ci-dessous les commandes de base qui vous permettront de vous y retrouver :
:q! [Entrée] pour quitter sans sauver,
:w [Entrée] pour enregistrer,
:wq [Entrée] pour enregistrer et quitter,
x efface le caractère qui se trouve sous le curseur, dd efface la ligne sur laquelle se trouve le curseur,
:u[Entrée] permet d'annuler (ou :undo).
La commande cat constitue un éditeur (très) simplifié. Elle permet également d'afficher le contenu d'un fichier entier à l'écran.
Entrer le texte à stocker dans le fichier (Enter) CTRL D
Linux, comme tout système de type Unix, possède des mécanismes permettant de rediriger les entrées- sorties standards vers des fichiers.
ls -al /home/hk/ > toto.txt
echo« Toto »> /etc/monfichierdeconfiguration
Ainsi, l'utilisation du caractère « > » permet de rediriger la sortie standard d'une commande située à gauche vers le fichier situé à droite :
La commande suivante est équivalente à une copie de fichiers :
La redirection « > » a pour but de créer un nouveau fichier. Ainsi, si un fichier du même nom existait, celui-ci sera écrasé. La commande suivante crée tout simplement un fichier vide : > fichier
cat fich1.txt >> fich2.txt
L'emploi d'un double caractère « >> » permet de concaténer la sortie standard vers le fichier, c'est-à-dire ajouter la sortie à la suite du fichier, sans l'écraser.
De manière analogue, le caractère « < » indique une redirection de l'entrée standard. La commande suivante envoie le contenu du fichier toto.txt en entrée de la commande cat, dont le seul but est d'afficher le contenu sur la sortie standard (exemple inutile mais formateur) : cat < toto.txt
cat << STOP
Enfin l'emploi de la redirection « << » permet de lire sur l'entrée standard jusqu'à ce que la chaîne située à droite soit rencontrée. Ainsi, l'exemple suivant va lire l'entrée standard jusqu'à ce que le mot STOP soit rencontré, puis va afficher le résultat :
Les messages d'erreur peuvent être dirigés séparément dans un fichier avec 2> :
ou dirigés vers le même fichier que les messages normaux :
Le système identifie les fichiers (physiquement) par un identificateur unique qui s'appelle le numéro d' i- noeud.
# ls -i /root/anaconda-ks.cfg
L'i-noeud est en fait un numéro unique qui identifie le fichier : Par exemple, pour le fichier /root/anaconda-ks.cfg si vous faites :
vous obtiendrez son numéro i-noeud.
Pour créer un autre lien, on utilise la commande ln :
Vérification:
Nous obtenons le même numéro
La commande ls -l indique le nombre de liens que comporte un fichier : c'est le chiffre venant après les permissions.
# ln -s /root/anaconda-ks.cfg /root/anaconda
Cette sorte de lien permet de donner un autre nom au fichier, mais n'utilise pas l'i-noeud physique du fichier. Pour créer un lien symbolique, il suffit de passer l'option -s à la commande ln :
# ls -i /root/anaconda-ks.cfg /root/anaconda
Cela va créer un fichier /root/anaconda avec un autre i-noeud : Vérifiez avec :
Nous avons dans ce cas 2 numéros différents.
Indique que anaconda pointe (→) bien sur anaconda-ks.cfg
Avec le lien symbolique, les permissions de /root/anaconda-ks.cfg seront les mêmes que pour /root/anaconda.
Il est donc facile d'identifier le lien symbolique d'un fichier avec la commande ls -l, alors qu'il n'en va pas de même pour un lien physique.
Les fichiers comprimés utilisent moins d'espace disque et se téléchargent plus rapidement que les grands fichiers non comprimés. Vous pouvez comprimer les fichiers Linux à l'aide de l'instrument de compression open-source Gzip ou Zip, qui est reconnu par la plupart des systèmes d'exploitation.
Par convention, les fichiers comprimés se voient attribuer l'extension .gz. La commande Gzip crée un fichier comprimé terminant par .gz; Gunzip extrait les fichiers comprimés et efface le fichier .gz.
Pour comprimer un fichier, entrez la commande suivante à l'invite du shell :
Le fichier sera comprimé et sauvegardé comme filename.ext.gz. Pour décompresser un fichier comprimé, tapez :
gunzip filename.ext.gz
Le filename.ext.gz est effacé et remplacé par filename.ext.
Si vous échangez des fichiers avec des utilisateurs non LINUX, vous devriez utiliser zip pour éviter les problèmes de compatibilité. Linux peut facilement ouvrir des fichiers zip ou gzip, mais les systèmes d'exploitation non-Linux pourraient avoir des problèmes avec les gzip.
Pour comprimer un fichier à l'aide de zip, entrez ceci :
Dans cet exemple, filename représente le fichier que vous créez, et files représente les fichiers que vous voulez placer dans le nouveau fichier :
Pour extraire le contenu d'un fichier zip, entrez :
gzip filename.gz file1 file2 file3 /user/work/school
Vous pouvez compresser plusieurs fichiers en même temps avec zip ou gzip. Énumérez les fichiers en les séparant par un espace :
La commande ci-dessus compresse les file1, file2, file3, et le contenu du répertoire /user/work/school pour les placer dans filename.gz.
Les fichiers tar placent plusieurs fichiers ou le contenu d'un répertoire ou de plusieurs répertoires dans un seul fichier. Il s'agit d'une bonne manière de créer des sauvegardes et des archives. Généralement, les fichiers tar terminent par l'extension .tar.
Pour créer un fichier tar, tapez :
Dans cet exemple, filename.tar représente le fichier que vous créez et files/directories représente les fichiers ou répertoires que vous voulez placer dans le nouveau fichier.
Vous pouvez utiliser des noms d'accès absolus ou relatifs pour ces fichiers et répertoires. Séparez les noms de fichiers et de répertoires par un espace.
La saisie suivante créera un fichier tar en utilisant un nom d'accès absolu :
La commande ci-dessus placera tous les fichiers dans les sous-répertoires /work et /school dans un nouveau fichier appelé foo.tar dans le répertoire dans lequel vous travaillez actuellement.
Pour afficher la liste du contenu d'un fichier tar, entrez :
Pour extraire le contenu d'un fichier tar, entrez :
Cette commande n'élimine pas le fichier .tar, mais elle place des copies du contenu de .tar dans le répertoire dans lequel vous travaillez actuellement.
tar -czvf foo.tar
La commande tar ne compresse pas automatiquement les fichiers. Vous pouvez compresser les fichiers tar avec :
tar -xzvf foo.tgz
Les fichiers tar compressés se voient attribuer l'extension .tgz et sont comprimés avec gzip. Pour décompresser un fichier tar, entrez :
cat .bashrc # .bashrc
La commande cat permet de lire des fichiers. Nous avons vu dans le TD1 que le répertoire /root contenait des fichiers de configuration. Ces fichiers sont simplement des fichiers textes avec un agencement et une syntaxe particulière. Regardons le contenu du fichier .bashrc qui permet de configurer à souhait son shell :
cat -n .bashrc
Une option utile de cat est -n qui permet de numéroter les lignes (ne pas oublier que cat permet de lire et non de modifier un fichier. Ainsi la numérotation de ligne apparaît à l'écran mais le fichier .bashrc n'en est pas pour autant modifié).
Si vous souhaitez connaître les autres options de cat, tapez au prompt« cat –help ».
Vous pouvez utiliser la commande more pour visualiser un fichier. La commande more a l'avantage d'afficher le fichier page par page. Pour passer d'une page à l'autre, tapez sur la touche ESPACE.
La commande tail est tout simplement inévitable.
Elle permet d'afficher les dernières lignes d'un fichier. Jusque là, on pourrait se dire qu'après tout il suffit d'éditer le fichier et de se déplacer à la fin. D'une part c'est une méthode fastidieuse mais d'autre part, l'option -f va définitivement vous convaincre de l'utiliser :
L'option -f demande à tail de ne pas s'arrêter lorsqu'elle a affiché les dernières lignes du fichier et de continuer à afficher la suite du fichier au fur et à mesure que celui-ci grossit jusqu'à ce que l'utilisateur interrompe la commande avec la combinaison de touches d'interruption Ctrl-c.
tail -5 nom_du_fichier
La commande head réalise la même chose que tail mais elle affiche les premières lignes du fichier au lieu d'afficher les dernières. tail et head ont une option commune qui permet d'afficher le nombre de lignes que l'on souhaite :
affichera les 5 dernières lignes du fichier
affichera les 15 premières lignes du fichier. Par défaut, tail et head affichent 10 lignes.
find directory -name targetfile -print
La commande find permet de trouver des fichiers dans un répertoire. Exemple simple : comment trouver un fichier portant un nom donné ?
Par exemple :
Décomposition de la commande de l'exemple :
« / » indique que nous voulons chercher à partir de la racine notre fichier ;
« -name » est l'option qui indique que nous voulons spécifier le nom d'un fichier ;
« -print » demande à find d'afficher le résultat.
Un peu long n'est ce pas pour trouver la réponse dans tout cette grosse arborescence ? En général on recherche rarement un fichier depuis la racine.
find /home/user -name 'linux-tes*' -print
Le nombre d'options de find est impressionnant. En voici quelques unes :Pour chercher tous les fichiers commençant par« linux-tes »et définir à partir de quel répertoire on souhaite effectuer la recherche on utilise cette syntaxe :
find /usr -type d -name bin -print
Ici, on demande à find de trouver les répertoires (l'argument« d »(comme« directory") de l'option -type indique que l'on cherche un répertoire) du nom de« bin »à partir du répertoire /usr.
find -name 'linux-tes*' -print -ok rm {} \;
./linux-test
rm...... /linux-test ? y
-ok est que la deuxième vous demandera pour chaque fichier trouvé si vous souhaitez réellement réaliser l'opération :
Dans l'option -exec, la paire d'accolades se substitue aux fichiers trouvés, et l'anti-slash lié au point virgule forme une séquence d'échappement.
Dans le répertoire d’accueil, créez un répertoire rep. Dans ce sous répertoire, créez trois fichiers toto.c, tata.h et lala.o.
rep commencent par la lettre t.
La commande locate a la même mission que find. Pourtant vous verrez qu'en utilisant la commande locate, le fichier sera trouvé beaucoup plus rapidement. Pourquoi ? Parce que locate ne va pas chercher le fichier dans toute l'arborescence des répertoires mais va localiser la position du fichier dans une base de données qui contient la liste des fichiers existants. Cette base de données est en général automatiquement générée une fois par jour par le système grâce à une commande appelée updatedb.
locate nom_du_fichier
Sur un système Linux, cette base de donnée se trouve dans le répertoire /usr/lib et se nomme locatedb. La syntaxe est donc simple:
Bien que la commande locate soit très intéressante, elle ne possède pas la puissance des options de find. De plus, si vous créez des fichiers pendant la journée et que vous les recherchez avec la commande locate, il n'est pas sûr que la base de donnée ait été remise à jour. Bref, locate est un complément de find.
which vous permet simplement de connaître le chemin d'un exécutable. Exemple:
La commande file permet d’afficher le type du fichier (exécutable, répertoire, ASCII, ...)
grep ip_tables /var/log/messages
La commande grep est un pivot des commandes UNIX. Elle cherche une expression rationnelle dans un ou plusieurs fichiers, exemple :
grep est la commande qui vous fouille les fichiers
La commande a donc affiché la ligne qui contient le mot« ip_tables »dans le fichier /var/og/messages.
La richesse de la commande grep permet de faire des recherches sur plusieurs fichiers et d'avoir un format de sortie adéquat.
grep -n ip_tables /var/log/messages
Le fichier /var/og/messages est déjà assez important et il serait agréable de savoir où se trouve cette ligne qui contient le mot Netfilter dans le fichier :
grep -l ip_tables /var/log/*
Une autre option très utile est -l qui permet de n'afficher que les noms des fichiers contenant ce que l'on cherche :
Quelques-unes des autres options :