|
(3356 mots dans ce texte ) -
lu : 1592 Fois

Syntaxe de la ligne de commande
Voici de quelle manière on lance une commande :
command --argument01 argument02
Les arguments : Ce sont des paramètres optionnels qui suivent une commande, par exemple :
less --help
transcode -V
mount -o loop a_clockwork_orange.iso
Ou encore tout simplement le nom d'un fichier :
cat /proc/cpuinfo
Ou rien du tout :
ls
Les espaces : il faut toujours laisser un espace entre une commande et ses arguments. C'est assez évident mais c'est une erreur commune :
cd/home/tux
Ceci vous renverra "bash: cd/home/tux: command not found", puisque vous n'avez pas mis d'espace entre cd et /home/tux. bash interprete donc l'expression dans son entier comme une commande, qu'il ne va pas trouver bien-entendu.
Une autre erreur consiste à inserer un espace là où il n'en faut pas :
ls /home /tux
Notez l'espace entre /home et /tux. Là encore, vous aurez une erreur. Il n'y a pas d'espace dans les chemins.
En revanche, lorsque l'insertion d'un espace est necessaire ou permise, vous pouvez en mettre deux, trois, ou dix, cela n'a aucune importance. L'utilité de ce détail ne vous parait peut-être pas évidente, sachez que c'est un point commun à beaucoup de langages de programmation, cela permet d'aérer le code avec des marges et des sauts de ligne.
Les astérisques et les points d'intérrogation : Les astérisque [*] remplacent un ou plusieurs caractères. Les points d'intérogation [?] remplacent, eux, un seul et unique caractère.
Ceci peut être pratique si vous cherchez un fichier d'un type particulier ou pour trier les fichiers. Par exemple, dans votre répertoire /home/tux/vrac, vous avez un certain nombre de fichiers jpg que vous voudriez ranger dans le répertoire /home/tux/fond-d-ecran/, vous pourrez employer la commande suivante:
mv /home/tux/vrac/*.jpg /home/tux/fonds-d-ecran/
Le & : employé à la fin d'une commande, lance le programme en arrière plan. Dans un script, permet au script de continuer son exécution sans attendre la fin d'une commande longue, par exemple :
/sbin/ldconfig &
deux && : employés entre deux commandes lance la deuxième commande à la suite de la première. Par exemple :
mount /dev/hdc && mc /mnt/hdc
La barre verticale | : envoie la sortie d'un programme vers un autre (on appelle ça un tube), par exemple:
ls /dev | less
Le signe supérieur > : envoie la sortie d'une commande vers un fichier plutôt que vers l'écran, ecrase le fichier si celui-ci existe; quand il est doublé, >>, n'écrase pas le fichier mais écris les données à la suite des données déjà présentes. Par exemple :
/sbin/lspci > lspci.txt
écira le résultat de la commande lspci dans le fichier lspci.txt
Et la commande suivante écrira à la suite dans ce même fichier la date suivit du résultat de la commande lspci :
(date && /sbin/lspci) >> lspci.txt
Ce qui peut être très utile pour mettre en place des journaux système.
-1-Les fichiers
Sous unix, tout est fichier. Les processus, les plages TCP/IP, les différentes composantes de vos interfaces graphiques, tout, tout est fichier. C'est pourquoi il faut commencer par détailler les fichiers, les répertoires, ce qui est, en réalité la base et la représentation physique de l'intégralité du système.
-1-0-Les répertoires et les dossiers
La différence n'est pas évidente à faire ni à saisir mais elle est essentielle pour bien comprendre la nature des fichiers sous GNU/Linux ou tout unix.
Un répertoire est un fichier. Il ne pèse qu'une poignée de kilo-octets, 4 en ext3, constatation assez frustrante quand on sait que l'on y a mis avec sa souris en glisser/deposer plusieurs fichier de taille nettement supérieure!
Contrairement à ce qu'on pourrait croire, un répertoire ne contient pas les fichiers qui apparaissent comme lui appartenant. Tout ce qu'il contient, ce sont les cordonnées physiques de ces fichiers (vous l'aurez compris, par fichier j'inclue aussi d'éventuels autres répertoires!). Un éventuel fichier qui ne serait adressé dans aucun répertoire n'apparaitrait tout simplement nulle part dans l'arborescence. C'est pourquoi, sous unix, tout part du répertoire "racine".
Maintenant que nous faisons bien la distinction, interessons nous au dossier. Les dossiers n'existent pas, c'est pourquoi on préfère utiliser le terme répertoire. La description des répertoire ci-dessus, des fichiers spéciaux contenant les adresses d'autres fichiers, est une description de ce que sont réellement les répertoires au niveau du système de fichier et au niveau du disque dur. "Dossier" va se référer à la représentation courante qu'on s'en fait, celle de conteneur: le dossier contient les fichiers dont il a les adresses. C'est une représentation abstraite. Une abstraction bien pratique toutefois, puisque sans elle, on ne pourait même pas parler d'arborescence!
On peut considérer un dossier comme un objet. Un objet, en informatique, n'est pas un fichier mais un conteneur qui contient d'autres objets. Linux est écrit en C, un langage qui brille par l'absence du concept d'objet. De plus, les disques durs ont une architecture linéaire, les données y sont stockée les une à côté des autres et non les unes dans les autres, chacune démarre à une adresse physique, un endroit précis, ce sont ces coordonnées qui servent à retrouver le fichier et ce sont elles qui sont stockées dans les répertoires.
On parle de fils et de parents pour désigner les répertoires et leurs sous-répertoires ainsi que les autres fichiers qu'ils contiennent. Dans l'expression :/home/tux/film/mes-vacances.mkvle répertoire : tux est le fils de :home et le parent de :film
1-1-Les différents types de fichiers
Tout fichier est binaire. L'ordinateur ne comprend que le langage binaire. Même les fichiers textes ou les fichiers vidéos sont des suites de 0 et de 1. Les premiers bits d'un fichier déterminent son type et suivant le type du fichier, le système saura comment les interpréter. Vous avez surement déjà fait l'expérience d'ouvrir un fichier quelconque avec un éditeur de texte et vous retrouver devant une suite incompréhensible de caractères. C'est que le logiciel traduit en texte un fichier qui n'est pas du texte. Le résultat est plutôt aléatoire.
Quand on parle de binaire, toutefois, on se réfère généralement aux fichiers executables.
On repère généralement un fichier du premier coup d'oeil, à son extention, les .txt .sh .html et compagnie mais sachez que sous GNU/linux, l'extension est totalement optionnelle, le format des fichiers est défini dans les premiers bits des fichiers et le système est assez intelligent pour les reconnaitre. Cependant, c'est une bonne habitude à prendre, de reperer ses fichiers à l'aide de l'extention, d'autant que vous pouvez mettre celle que vous voulez. J'ai par exemple l'habitude de reperer mes fichiers xhtml en utilisant l'extention .xhtml, ce qui n'est pas un standard mais tellement pratique pour les différencier des fichiers html.
Les fichiers textes : Les fichiers textes, comme tout fichier, sont donc constitués d'une suite de 1 et de zéros. Le début du fichier définit l'encodage de celui-ci. Par exemple, pour un fichier texte encodé en USCII, les caractère sont encodés sur 7 bits (un bit étant un zéro ou un 1), le logiciel que vous emploirez pour le lire traduira chaque tranche de 7bits par un caractère. Un fichier encodé en UTF-8, lui, sera encodé sur 16 bit, la lecture sera donc différente. Vous pouvez paramettrer certains logiciels pour qu'ils utilisent l'un ou l'autre des différents encodages par défaut. Ouvrir un fichier utf-8 comme un fichier USCII amène cependant quelques soucis d'affichage.
Si vous essayez d'ouvrir un fichier autre que texte, une vidéo par exemple, avec un éditeur de texte, l'éditeur fera la même chose, il traduira chaque série de bits par un caractère, ce qui explique le résultat plutôt étrange que vous obtiendrez et le message d'avertissement que vous obtiendrez en l'ouvrant. ce message s'affiche parceque le programme a reconnu que le fichier n'est pas un fichier texte.
Les scripts : Les scripts sont des fichiers textes encodés généralement en USCII, contenant des séries d'instructions en utilisant un langage de script, bash, python, php, javascript, etc. Les scripts bash sont très pratiques pour lancer une série de commandes en une seule fois au lieu de les rentrer à la main. Ils s'appellent avec la commande sh [nom du fichier] s'il ne sont pas executables. Il s'appellent simplement par leur nom si vous les rendez executables, par la commande : chmod +x [nom du fichier]
Les liens : Les liens sont des fichiers spéciaux qui pointent simplement vers un autre fichier ailleurs dans l'aborescence. On crée un lien avec la commande link [nom du fichier cible] [nom du lien]Par exemple, si vous voulez pouvoir utiliser la commande /sbin/halt en tant que simple utilisateur (pour pouvoir arrêter la machine sans avoir à demander à votre environement de bureau de la faire pour vous), vous devez d'abord demander à l'administrateur de donner les droits suid (qui permettent de lancer un programme ou d'ouvrir un fichier avec les droits du propriétaire) au fichier /sbin/halt: chmod +s /sbin/halt puis vous créez un lien dans /bin qui pointe vers /sbin/halt: link /sbin/halt /bin/halt Vous pourrez déshorsmais lancer halt depuis une console. Cette configuration est sujète à controverse, du fait de l'utilisation du suid, pas du tout recommandé pour la sécurité du système mais en ce qui concerne le simple arrêt de l'ordinateur, nous pouvons considérer que c'est "safely".
Nous reviendrons plus loin sur les permissions des fichiers.
Les binaires ELF : Les fichiers executables au format ELF correspondent aux programmes. Quand vous lancez xine, le player audio/vidéo, par exemple, vous lancez le binaire /usr/bin/xine, le lien dans le menu de votre environnement de bureau fait la même chose à votre place.
Les autres formats de fichier : Bien entendu, il existe bien d'autres formats de fichier, les fichiers des traitements de texte, odt ou doc, les fichiers audio/vidéo, ogg, mp3, mkv, avi, etc...
-1-3-Les zones interdites : les permissions des fichiers
Chaque fichier appartient à un utilisateur et à un groupe. Il possède en prime un jeu de permissions: lecture, écriture, exécution, et ce, pour le propriétaire du fichier, pour le groupe d'utilisateurs et pour les autres utilisateurs.
Par exemple le répertoire personnel d'un utilisateur n'est normalement pas accessible aux autres utilisateurs. Si vous essayez d'espionner le carnet intime de votre copine qui se trouve, vous le savez, dans son répertoire personnel, mais dont vous ignorez le nom, vous voudrez faire un cd /home/tuxette et vous vous heurterez à un message d'erreur:
tux@darkstar:~$ cd /home/tuxette
bash: cd: /home/tuxette: permission denied
Vous n'avez pas la permission d'accéder au répertoire personnel de tuxette! En revanche, si vous connaissez le nom du fichier, son chemin exact, et que celui-ci vous donne la permission de le lire, vous pourrez le lire sans problème.
En effet, les enfants n'héritent pas des permissions de leurs parents. Si /home/tuxette n'autorise pas la lecture ni l'écriture à tux, cela ne concerne que le répertoire en lui-même, un fichier présent dans le répertoire peut très bien donner le droit de lecture à tous. Ce qui veut dire que vous pourrez lire ce fichier même si vous n'avez pas le droit de lire le conteu du répertoire parent (souvenez-vous que les répertoires sont des fichiers qui contiennent la liste des fichiers enfants).
Toutefois, l'autocompletion (dont nous parlons plus bas) ne marchera pas dans les répertoires où vous n'avez pas l'accès en lecture car vous n'avez pas la permission pour lister le contenu de ces fichiers. (Rappelez-vous qu'un répertoire est un fichier et que c'est ce fichier qui indique le contenu du répertoire).
Vous contournerez donc la difficulté ainsi :
tux@darkstar:~$ cat /home/tuxette/journal
tux y fait chier, je préfère gnou (il est mieux foutu en plus et je parle pas que de ses muscles...)
tux@darkstar:~$
-2-Les partitions.
Le support physique des fichiers de l'arborescence sur un PC, c'est le disque dur. À l'installation de votre système, vous avez dû commencer par créer une table des partitions, puis vous avez formaté ces partitions avec un système de fichier, ext3, vfs ou reiserfs suivant les recommandations des developpeurs.
Tout comme les répertoires, les partitions ne sont que des points de repère gravés sur le disque dur. Ils sont toutefois plus restrictif puisqu'ils délimitent un espace physique sur le disque dur et les données qu'elles contiennent ne peuvent s'inscrire que dans cet espace. Le plan de partitionnement est inscrit dans le secteur d'amorcage du disque dur. On appelle ce plan la table des partitions. C'est grace à cette table que le système sera capable de retrouver les partitions.
Il y a deux types de partitions répertoriées dans cette table, les partitions primaire, qui ne peuvent exceder le nombre de quatre à cause de la limite en taille du secteur d'amorcage et les partitions étendues, des partitions qui peuvent contenir des partitions logiques et qui permettent de contourner la limite des quatre partitions.
Le premier secteur d'une partition contient les données necessaire pour que le système y retrouve les fichiers representant les répertoires fils et ceux-ci contiennent à leur tour les secteurs où sont contenus ses propres fils. Dans le cas d'une partition étendue, il contient la table des partitions dites logiques contenues à l'intérieur de cette partition étendue.
La première partition que vous avez crée était sûrement la partition de SWAP mais nous ne nous étendrons pas sur son rôle.
La plus importante partition, et elle peut être la seule (même la SWAP n'est qu'optionnelle) est la partition racine. Toutes les autres partitions doivent être montées dans les sous-repertoires de la racine. Cela signifie que chaque partition sera représentée par un répertoire normal dans l'arborescence qui renvoie le système aux secteurs du disque dur qui contient la partition. En conséquence, on peut monter une partition de 10 GO, par exemple dans une racine qui n'en fait que deux, le fichier representant cette partition ne remplit quant à lui que quelques kilo-octets.
La racine est représenté par un slash [/] , ce qui peut prêter à confusion car les autres répertoires fils sont séparés par ce même caractère. Ainsi, nous avons des répertoires représentés par des expressions, par exemple /home/documents/html/ dans lequel le premier slash représente le répertoire racine et le dernier signifie que html est lui-même un répertoire.
-3-Répertoires et fichiers
-3-1-Se situer sur le chemin.
Lorsque l'on navigue dans l'arorescence linux, on ne tient pas compte des partitions. On navigue de répertoire en partition montée sans que cela n'aparraisse à moins qu'on ne le demande expressément.
Le chemin d'un fichier ou path en anglais désigne un point précis de l'arborescence. On parle aussi de noeud mais la notion de noeud est légèrement plus complexe. Quand vous ouvrez une console, vous vous trouvez quelque part dans l'arborescence, de la même manière, si vous passez en mode terminal par ctrl+alt+F2, après vous être identifié, vous êtes propulsé en un point précis de l'arboresence. Si vous vous loguez avec votre utilisateur, vous êtes alors dans votre répertoire personel, /home/tux/ , si vous vous loguez en root, vous êtes alors dans le répertoire personel de l'utilisateur root: /root/ L'invite de commande vous signale généralement le chemin de l'arborescence où vous vous trouvez, par exemple :
tux@darkstar:~$
On retrouve : le nom de l'utilisateur [tux]@[le nom de l'ordinateur]:[le path courant]$
Le caractère spécial : ~ désigne le répertoire personnel de l'utilisateur. Pour avoir le path complet, utilisez la commande suivante:
tux@darkstar:~$ pwd
[tab]
tux@darkstar:~$ cd film
Supposons maintenant qu'il y ait deux dossiers commencant par la lettre f, la completion ne fonctionnera pas. Appuyez une deuxième fois sur [tab] et bash vous renverra la liste des fichiers en question:
tux@darkstar:~$ cd f
[tab]
[tab]
filles-sexy-en-string/
film/
tux@darkstar:~$cd f
-4-Manipulation des fichiers
-4-1-les noms de fichier sous linux
Les noms de fichier ne doivent pas contenir n'importe quel caractère. On l'a vu, un point devant un nom de fichier créera un fichier caché. Ce sont typiquement le fichiers de configuration créés par les applications dans votre répertoire personnel qui utilisent cette syntaxe, un petit ls -a vous les montrera. Les caractères spéciaux comme $ # " < , les caractères accentués ainsi que les espaces sont à proscrire. Si toutefois vous voulez absolument en créer, vous ferez précéder le caractère spécial d'un antislash et d'un espace.
Il est courant de trouver de tels fichiers sur le web, créés sous d'autres système d'exploitation. Sous unix, vous préférerez employer des tirets pour symboliser les espaces. De même, méfiez-vous des fichiers crées via une interface graphique, celles-ci permettent un peu trop facilement de déroger aux règles de propreté en ce qui concerne les noms de fichier, préférez chaque fois que c'est possible utiliser la console.
Si nous en avons le droit, nous pouvons donc créer un fichier, le supprimer, le déplacer, etc.
-4-2-Pour créer un répertoire
mkdir (make directory) [nom du répertoire] :
tux@darkstar:~$ mkdir film/mes_film_de_vacance/
tux@darkstar:~$
Pour faire cela, il faut avoir l'accès en écriture dans le répertoire où l'on veut créer le fichier!
-4-3-Pour effacer un fichier
rm (remove : effacer en français) [nom du fichier]:
tux@darkstar:~$ rm j-aime-tuxette.odt
Si il s'agit d'un répertoire, vous devrez ajouter l'argument -R (recursive) qui aura pour effet secondaire d'effacer le contenu du répertoire également:
tux@darkstar:~$ rm -R photo-de-tuxette
Si le répertoire est vide, vous pouvez utiliser rmdir. vous le devriez d'ailleurs, par sécurité. Petit retour d'expérience: j'ai effacé de la sorte le contenu d'une partition montée par inadvertance. J'avais modifié mon fichier fstab pour monter celle-ci dans un autre répertoire et j'ai lancer rm -R sur l'ancien point de montage. Le temps que je me rende compte de mon erreur, une bonne partie des fichiers avait disparu. Si j'avais employé rmdir, je n'aurais pas connu cette mésaventure...
rmdir peut être aussi employé pour nettoyer de tous ses dossiers vide un noeud de l'arborescence:
rmdir *
-4-4-Pour copier un fichier
Il suffit d'avoir l'accès en lecture. La commande est cp (copy) et la syntaxe est :
cp [nom du fichier à copier] [chemin où le copier]/[nom que l'on veut donner à la copie]
Par exemple, comme vous aimez souffrir :
tux@darkstar:~$ cp /home/tuxette/journal /home/tux/traitresse
Si vous voulez que le fichier garde le même nom, indiquez seulement le répertoire de destination sans spécifier le nom du fichier :
tux@darkstar:~$ cp /home/tuxette/journal /home/tux/
-4-5-Pour déplacer ou renommer un fichier
La commande est mv (move=deplacer) :
mv [fichier cible] /[repertoire de destination]/[nom du nouveau fichier]
Exemple de changement de nom:
tux@darkstar:~$ mv journal traitresse
Ce qui aura pour effet de changer le nom du fichier "journal" pour "traitresse". Tout se passe dans le répertoire courant. Pour faire la même manipulation depuis un autre répertoire, il faut indiquer les chemins complet.
Deuxième exemple, pour déplacer un fichier sans changer son nom:
tux@darkstar:~$ mv film/mes-vacances.mkv film/mes_films_de_vacance/
Vous serez peut-être étonnés de constater que les changement de répertoires ne s'accompagne pas de grattement incommodes du disque dur ni d'un certain temps de latence. Ceci parceque, à partir du moment où vous ne changer pas de partition, le fichier ne sera pas déplacé (c'est à dire recopié à un autre endroit puis effacé de l'endroit d'origine), seule l'indexation du fichier va changer. Le nom du fichier et sa localisation physique sur le disque dur vont être effacés du fichier film/ pour être ajoutés au fichier film/mes_films_de_vacance/ (là encore, souvenez-vous qu'un répertoire est un fichier qui contient un index).
En revanche, si vous décidez de déplacer ou de copier un fichier sur une autre partition, cela demandera effectivement de recopier intégralement le fichier à un autre emplacement du disque dur.
-6-La hiérarchie du système de fichiers
Les répertoires d'un système GNU/Linux peuvent varier considérablement d'une distribution à l'autre mais vous trouverez un plan général en tappant :
man hier
Avec le temps, si ce n'est déjà le cas, vous apprendrez à vous reperer dans la hiérarchie de votre système. Dans les grandes lignes, quelle que soit la distribution GNU que vous utilisez, vous retrouverez les répertoires décris dans le chapitre suivant.
-6-1- Les répertoires de la racine
Un petit listing pour savoir à quoi correspondent certains des répertoires de la racine.
/bin/ et /sbin/:répertoires contenant les commandes et les programmes système.
/usr/: répertoire contenant la plupart des autres programmes et leurs fichiers. À l'intérieur de ce répertoire, vous retrouverez des sous-répertoires bin, sbin, lib, etc, tmp qui ont les mêmes fonctions que ceux de la racine et d'autres répertoires importants pour les applications : local, share, src...
/mnt/ et /media/: pour monter les périfériques amovibles. Techniquement, vous pouvez les monter dans n'importe quel répertoire vide mais ces deux répertoires-là sont traditionnellement utilisés pour monter les disques et les partitions de données.
/dev/: Contient les fichiers block qui représentent les composants hardware
/root/: dossier personnel du superutilisateur
/home/: dosiers personnels des utilisateurs
/proc/ et /sys/: systèmes de fichier du noyau et des processus.
/tmp/: fichiers temporaires pouvant être effacés à chaque démarrage
/var/: pour variable (en taille), contient divers éléments variables appartenant à divers programmes, tels que les pages web du serveur apache, les informations sur les packages ou les fichiers sources, etc.
/boot/: contient le noyau et toute information utile au démarrage de l'ordinateur
/etc/: contient les fichiers de configuration du système et des applications système.
/lib/: contient les librairies du système
/opt/: programmes "optionnels".
Retour à la sous-rubrique :
Autres publications de la sous-rubrique :
|