Page suivante - Page précédente - Table des matières

4. Fichiers et Programmes

4.1 Fichiers : notions préliminaires

La structure des répertoires et des fichiers sous Linux est très similaire à celle de DOSWin. Les fichiers ont des noms qui doivent obéir à certaines règles, ils sont stockés dans des répertoires, certains d'entre eux sont exécutables et parmi ceux-ci, la plupart disposent d'options. De plus, il est possible d'utiliser les caractères joker, la redirection et les pipes. Seules quelques différences mineures existent :

  • sous DOS, les noms de fichier sont au format appelé 8.3 ; comme dans TROPCOUR.TXT. Linux peut faire mieux. Si vous avez installé Linux en utilisant un système de fichiers comme ext2 ou umsdos, vous avez le loisir d'utiliser des noms de fichier plus longs (jusqu'à 255 caractères), et avec plus d'un point : par exemple, Ceci_est.un.TRES_long.nom.de.fichier. Veuillez noter que j'ai utilisé aussi bien des majuscules que des minuscules : en fait...
  • majuscules et minuscules dans les noms de fichier ou les commandes sont différenciées. Par conséquent, NOMFIC.tar.tgz et nomfic.tar.gz sont deux fichiers différents. De même, ls est une commande mais LS est une erreur ;
  • utilisateurs de Windows, faites attention en utilisant les noms de fichier longs sous Linux. Si un nom de fichier contient des espaces (ce qui n'est pas recommandé mais néanmoins possible), vous devez l'entourer avec des guillemets à chaque fois que vous y faites référence. Par exemple :
    $ # la commande suivante cree un repertoire appele "Mes vieux fichiers"
    $ mkdir "Mes vieux fichiers"
    $ ls
    Mes vieux fichiers bin tmp
    
    De plus, l'usage de certains caractères est à éviter : parmi eux, il y a !*$&.
  • il n'existe pas d'extensions obligatoires comme .COM ou .EXE pour les programmes ou .BAT pour les fichiers de commandes. Les fichiers exécutables sont suivis d'un astérisque «*» lorsque vous faites la commande ls -F. Par exemple :
    $ ls -F
    Je_suis_un_rep/   cindy.jpg    cjpg*   lettre_a_Joe    mon_1er_script*  vieux
    
    Les fichiers cjpg* et mon_1er_script* sont des exécutables, autrement dit des «programmes». Sous DOS, les copies de sauvegarde se terminent en .BAK, alors que sous Linux elles se terminent par une tilde «~». De plus, un fichier commençant par un point est considéré comme étant caché. Exemple : le fichier .Je.suis.un.fichier.cache ne sera pas visible à la suite de la commande ls ;
  • sous DOS, les options des commandes sont obtenues avec /option, Linux utilise -option ou --option. Exemple : dir /s devient ls -R. Remarquez que de nombreux programmes DOS, comme PKZIP ou ARJ utilisent les options dans le style d'UNIX.

À présent, vous pouvez aborder la section Traduire les commandes DOS en Linux, mais à votre place, je poursuivrais ici.

4.2 Liens symboliques

UNIX est pourvu d'un type de fichier sans équivalent sous DOS : le lien symbolique. On peut l'imaginer comme un pointeur sur un fichier ou un répertoire, et on peut l'utiliser en lieu et place du fichier ou du répertoire sur lequel il pointe ; cela ressemble aux raccourcis de Windows. Des exemples de liens symboliques sont /usr/X11, qui pointe sur /usr/X11R6; /dev/modem, qui pointe ou bien sur /dev/ttyS0 ou bien sur /dev/ttyS1.

Pour fabriquer un lien symbolique :

$ ln -s <fic_ou_rep> <nomdulien>

Exemple :

$ ln -s /usr/doc/g77/DOC g77manual.txt

Il est alors possible de faire référence à g77manual.txt au lieu de /usr/doc/g77/DOC. Les liens apparaissent de la manière suivante dans l'affichage du contenu des répertoires :

$ ls -F
g77manual.txt@
$ ls -l
(des choses et d'autres...)           g77manual.txt -> /usr/doc/g77/DOC

4.3 Droits d'accès et propriété

Sous DOS, les fichiers et les répertoires disposent des attributs suivants : A (archive), H (caché : hidden), R (lecture seule : read-only) et S (système). Seuls H et R ont un sens sous Linux : les fichiers cachés sont ceux qui commencent par un point, et pour ce qui est de l'attribut R, lisez ce qui suit.

Sous UNIX un fichier possède des «droits d'accès» et un propriétaire, qui, à son tour, fait partie d'un «groupe». Regardez cet exemple :

$ ls -l /bin/ls
-rwxr-xr-x  1  root  bin  27281 Aug 15 1995 /bin/ls*

Le premier champ contient les droits d'accès au fichier /bin/ls, qui appartient à root et au groupe bin. En laissant de côté le reste de l'information, souvenez-vous que la signification de -rwxr-xr-x, de gauche à droite, est :

- est le type de fichier (- = fichier ordinaire, d = répertoire : directory, l = lien etc.) ; rwx sont les droits d'accès pour le propriétaire du fichier (lecture : read, écriture : write, exécution) ; r-x sont les droits d'accès pour le groupe auquel appartient le propriétaire du fichier (lecture, exécution) ; (je n'aborderai pas le concept de groupe, vous n'en avez pas besoin pour survivre, tant que vous êtes débutant ;-) r-x sont les droits d'accès pour tous les autres utilisateurs (lecture, exécution).

Le répertoire /bin dispose lui aussi de droits d'accès : cf. Droits d'accès aux répertoires pour plus d'informations. C'est la raison pour laquelle vous ne pouvez pas effacer le fichier /bin/ls à moins d'être root : vous n'avez pas les droits pour le faire. Pour changer les droits d'accès d'un fichier, la commande est :

$ chmod <quiXperm> <fic>

qui peut être u (utilisateur, ou propriétaire), g (groupe) o (autres, other), X vaut + ou -, et perm est à choisir parmi r (lecture, read), w (écriture, write) ou x (exécution). Les usages courants pour chmod sont les suivants :

$ chmod +x fichier

cela positionne le droit d'exécution pour le fichier.

$ chmod go-rw fichier

cela enlève les droits de lecture et d'écriture pour tous excepté le propriétaire.

$ chmod ugo+rwx fichier

cela donne les droits de lecture, d'écriture et d'exécution à tout le monde.

# chmod +s fichier

cela fabrique un fichier de type «setuid» ou «suid» -- un fichier que tout un chacun peut exécuter avec les privilèges de son propriétaire. Typiquement, vous rencontrerez des fichiers suid appartenant à root ; souvent, il s'agit de fichiers système importants, comme le serveur X.

Un moyen plus court de faire référence aux droits d'accès est d'utiliser les chiffres : rwxr-xr-x peut être exprimé comme 755 (chaque lettre correspond à un bit : --- vaut 0, --x vaut 1, -w- vaut 2, -wx vaut 3 etc.). Cela peut sembler difficile, mais avec un peu de pratique, vous comprendrez le concept. root, en tant que super-utilisateur, a la possibilité de changer les droits d'accès de quiconque. LPM.

4.4 Fichiers : traduction des commandes

À gauche, les commandes DOS, à droite, leurs correspondants Linux.

ATTRIB:         chmod
COPY:           cp
DEL:            rm
MOVE:           mv
REN:            mv
TYPE:           more, less, cat

Les redirections et la tuyauterie : <>>> |

Les jokers : * ?

nul: /dev/null

prn, lpt1: /dev/lp0 ou /dev/lp1; lpr

Exemples

DOS                                     Linux
---------------------------------------------------------------------
C:\GUIDO>ATTRIB +R FIC.TXT              $ chmod 400 fic.txt
C:\GUIDO>COPY JOE.TXT JOE.DOC           $ cp joe.txt joe.doc
C:\GUIDO>COPY *.* TOTAL                 $ cat *> total
C:\GUIDO>COPY FRACTALS.DOC PRN          $ lpr fractals.doc
C:\GUIDO>DEL TEMP                       $ rm temp
C:\GUIDO>DEL *.BAK                      $ rm *
C:\GUIDO>MOVE PAPIER.TXT TMP\           $ mv papier.txt tmp/
C:\GUIDO>REN PAPIER.TXT PAPIER.ASC      $ mv papier.txt papier.asc
C:\GUIDO>PRINT LETTRE.TXT               $ lpr lettre.txt
C:\GUIDO>TYPE LETTRE.TXT                $ more lettre.txt
C:\GUIDO>TYPE LETTRE.TXT                $ less lettre.txt
C:\GUIDO>TYPE LETTRE.TXT> NUL          $ cat lettre.txt> /dev/null
 n/a                             $ more *.txt *.asc
 n/a                             $ cat section*.txt | less

Notes:

  • * est plus malin sous Linux : * désigne tous les fichiers, sauf ceux qui sont cachés ; .* désigne tous les fichiers cachés (mais également le répertoire courant «.» et son répertoire parent «..» : attention !) ; *.* ne désigne que les fichiers qui contiennent, ou qui se terminent par un «.» ; p*r désigne aussi bien «papier» que «plier» ; *c* désigne aussi bien «ici» que «pacha» ;
  • lors de l'utilisation de more, tapez <ESPACE> pour parcourir le fichier, et «q» pour quitter. less est plus intuitif et vous permet d'employer les flèches ;
  • UNDELETE n'existe pas, alors pensez-y à deux fois avant d'effacer quoi que ce soit ;
  • en plus des < > >> du DOS, Linux dispose de 2> pour rediriger les messages d'erreur (stderr) ; de plus, 2>&1 redirige stderr vers stdout, alors que 1>&2 redirige stdout vers stderr ;
  • Linux possède un autre joker : les []. Utilisation : [abc]* désigne les fichiers commençant par a, b ou c ; *[I-N1-3] désigne les fichiers se terminant par I, J, K, L, M, N, 1, 2, ou 3 ;
  • lpr <fic> imprime un fichier en tâche de fond. Pour vérifier l'état de la file d'impressions, utilisez lpq ; pour retirer un fichier de la file, utilisez lprm ;
  • il n'existe pas de RENAME identique à celui du DOS ; en fait, mv *.xxx *.yyy ne marchera pas. Un commande du type REN est disponible à l'adresse ftp://sunsite.unc.edu/pub/Linux/utils/file;
  • utilisez cp -i et mv -i pour être averti lorsqu'un fichier est sur le point d'être écrasé.

4.5 Exécution de programmes : le multi-tâches et les sessions

Pour lancer un programme, entrez son nom comme vous le feriez sous DOS. Si le répertoire (cf. section Utilisation des répertoires) où se trouve le programme est inclus dans le PATH (cf. section Fichiers d'initialisation du système), le programme démarrera. Une exception : contrairement au DOS, sous Linux, un programme situé dans le répertoire courant ne s'exécutera pas à moins que ce répertoire ne soit inclus dans le PATH. Escamotage

NdT. : En français dans le texte.
: si prog est votre programme, tapez ./prog.

Voici à quoi ressemble une ligne de commande typique :

$ commande [-o1 [-o2] ... [-on]] [arg1 [arg2] ... [argn]] [< entree] [> sortie]

-o1,...,-on sont les options de la commande et arg1,...,argn sont les arguments de la commande. Il est possible de spécifier plusieurs commandes sur une seule ligne :

$ commande1 ; commande2 ; ... ; commanden

C'est tout au sujet de l'exécution des commandes, mais on peut facilement faire un pas de plus. L'une des principales motivations pour l'utilisation de Linux est qu'il s'agit d'un système d'exploitation multi-tâches -- il est capable de faire tourner plusieurs programmes (qu'on appellera des processus) en même temps. Vous pouvez lancer des processus en arrière-plan et continuer à travailler dans la foulée. De plus, Linux vous permet d'avoir plusieurs sessions : c'est comme si on travaillait sur plusieurs ordinateurs à la fois !

  • Pour passer à la session 1...6 parmi les consoles virtuelles, tapez <ALT-F1> ... <ALT-F6>
  • Pour démarrer une nouvelle session dans la même console virtuelle, sans quitter la session courante, tapez su - <nomdelogin>. Par exemple : su - root. Cela peut être utile pour effectuer une tâche que seul root peut accomplir, par exemple.
  • Pour clore une session, tapez exit. S'il reste des jobs arrêtés (cf. plus loin) vous en serez averti.
  • Pour lancer un processus en arrière-plan, ajoutez une éperluette «&» à la fin de la ligne de commande :
    $ nomduprog [-options] [arguments] [< entree] [> sortie] &
    [1] 123
    
    Le shell associe un numéro de job au processus (ex. : [1] ; cf. plus loin), ainsi qu'un PID (Process Identification Number
    numéro d'identification du processus
    ) ; 123 dans notre exemple).
  • Pour voir combien il y a de processus, tapez ps ax. Cela affichera la liste des processus qui tournent actuellement.
  • Pour tuer (terminate) un processus, tapez kill <PID>. Vous pouvez être obligé de tuer un processus lorsque vous ne savez pas comment le quitter proprement... À moins d'être root, il vous est impossible de tuer les processus d'autres personnes. Quelquefois, un processus ne pourra être tué qu'en faisant kill -SIGKILL <PID>. De plus, le shell vous permet d'arrêter ou de suspendre temporairement un processus, de l'envoyer en arrière-plan ou de le remettre au premier plan. Dans ce contexte, les processus sont appelés «jobs».
  • Pour voir combien il y a de jobs, tapez jobs. Dans ce cas, les jobs sont identifiés par leur numéro de job, et non pas par leur PID.
  • Pour arrêter un processus qui tourne au premier plan, tapez <CTRL-C> (cela peut ne pas marcher).
  • Pour suspendre un processus qui tourne au premier plan, tapez <CTRL-Z> (idem).
  • Pour envoyer un processus suspendu en arrière-plan, tapez bg <%job> (il devient alors un job).
  • Pour amener un job au premier plan, tapez fg <%job>. Pour ramener au premier plan le dernier job envoyé en arrière-plan, il suffit de taper fg.
  • Pour tuer un job, tapez kill <%job>, où <job>peut être 1, 2, 3,...

À l'aide de ces commandes, vous pouvez formater un disque, compresser une flopée de fichiers, compiler un programme, et décompresser et archiver le tout, tout cela en même temps, tout en gardant la main. Essayez-donc de faire cela avec Windows, rien que pour voir la différence de performance (si ça ne plante pas, bien sûr).

4.6 Exécution de programmes sur des ordinateurs distants

Pour lancer un programme sur une machine distante dont le nom est machine.distante.edu, il suffit de faire :

$ telnet machine.distante.edu

Après vous être connecté, démarrez votre programme préféré. Cela va sans dire, vous devez avoir un compte utilisateur sur la machine distante.

Si vous disposez de X11, il vous est même possible de faire tourner une application X sur une machine distante dont l'affichage se fera sur votre écran X. Soit machine.distante.edu la machine distante disposant de X, et machine.locale.linux votre machine Linux. Pour faire tourner à partir de machine.locale.linux une application X résidant sur machine.distante.edu, il faut faire ce qui suit :

  • démarrez X11, lancez un émulateur de terminal comme xterm ou ses équivalents, et tapez :
    $ xhost +machine.distante.edu
    $ telnet machine.distante.edu
    
  • après vous être connecté, tapez :
    remote:$ DISPLAY=machine.locale.linux:0.0
    remote:$ nomduprogramme &
    
    (au lieu de DISPLAY..., il se peut que vous ayez à taper setenv DISPLAY machine.locale.linux:0.0. Cela dépend du shell distant.)

Et voila ! nomduprogramme va maintenant démarrer sur machine.distante.edu et ses affichages se feront sur votre machine. Toutefois, il est inutile d'essayer de le faire par modem, ce serait trop lent pour être utilisable. De plus il s'agit d'une méthode fruste et non sécurisée : veuillez vous reporter au «Remote X Apps mini-HOWTO» disponible à l'adresse http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.


Page suivante - Page précédente - Table des matières