Les HOWTO Linux...
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
etnomfic.tar.gz
sont deux fichiers différents. De même,ls
est une commande maisLS
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 :
De plus, l'usage de certains caractères est à éviter : parmi eux, il y a$ # la commande suivante cree un repertoire appele "Mes vieux fichiers" $ mkdir "Mes vieux fichiers" $ ls Mes vieux fichiers bin tmp
!*$&
. - 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 commandels -F
. Par exemple :
Les fichiers$ ls -F Je_suis_un_rep/ cindy.jpg cjpg* lettre_a_Joe mon_1er_script* vieux
cjpg*
etmon_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 commandels
; - sous DOS, les options des commandes sont obtenues avec
/option
, Linux utilise-option
ou --option. Exemple :dir /s
devientls -R
. Remarquez que de nombreux programmes DOS, commePKZIP
ouARJ
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>
où 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 de2>
pour rediriger les messages d'erreur (stderr) ; de plus,2>&1
redirige stderr vers stdout, alors que1>&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, utilisezlpq
; pour retirer un fichier de la file, utilisezlprm
; - 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
etmv -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]
où -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 :
Le shell associe un numéro de job au processus (ex. :$ nomduprog [-options] [arguments] [< entree] [> sortie] & [1] 123
[1]
; cf. plus loin), ainsi qu'un PID (Process Identification Numbernumé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 faisantkill -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 taperfg
. - 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 :
(au lieu deremote:$ DISPLAY=machine.locale.linux:0.0 remote:$ nomduprogramme &
DISPLAY...
, il se peut que vous ayez à tapersetenv 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