Cette partie présente de manière très générale quelques commandes
des systèmes Unix sans rentrer dans le détail de
toutes les options. La plupart seront revues de manière plus approfondies
dans des chapitres ultérieurs et plus spécifiques. La consultation du
man est impérative (rappel : man
<commande>).
Note
Dans les extraits qui illustrent le comportement des commandes, j'utilise parfois le caractère #. Celui-ci est considéré comme un début de commentaire qui s'étend jusqu'à la fin de la ligne, le système ignore tout ce qui fait suite à ce caractère.
Dans tous les exemples, le symbole $ désigne un utilisateur standard, sans privilège particulier.
Enfin, dans les paragraphes qui suivent les termes référence et désignation sont des synonymes, ils sont donc interchangeables.
Le système de fichiers dans l'environnement Unix est organisé sous forme arborescente[1]. Les noeuds internes de l'arbre sont généralement des répertoires (i.e. des fichiers au sens Unix contenant eux mêmes des fichiers simples ou des répertoires), tandis que les feuilles sont les fichiers. La désignation qui permet de nommer une ressource est un chemin.
La racine de cette arborescence est dénotée par le symbole /, dit root. Tout chemin qui commence par ce symbole est dit absolu [absolute pathname] puisqu'il se réfère à l'origine de la structure arborescente. Ainsi, les désignations suivantes sont des chemins absolus :
/sbin,
/usr/local/bin,
/usr/X11R6/bin,
Un chemin absolu n'est autre qu'un chemin relatif à la racine (/)
de l'arborescence. Si maintenant on veut désigner une ressource
relativement à l'endroit o๠l'on se trouve, on obtient un chemin
relatif. Si, par exemple, je me trouve dans le répertoire
/usr, alors les désignations suivantes sont des
chemins relatifs [relatives pathnames] :
local/bin
X11R6/bin
L'utilitaire pwd (1) [print
working directory, situé dans /bin,
section (1) du man], indique le répertoire courant dans lequel on se
trouve.
EXEMPLE :
$ pwd
/home/pascal/lecture
La commande interne cd [change directory], permet de naviguer dans l'arborescence. Son argument optionnel qui est un chemin relatif ou absolu permet de changer de répertoire courant.
EXEMPLES :
$ pwd
/home/pascal/lecture
$ cd /usr
$ pwd
/usr
$ cd local/bin
$ pwd
/usr/local/bin
Sans argument, la commande cd nous ramène
dans notre répertoire de domiciliation (ce qui est équivalent à la
séquence cd ~, c.f.
shell).
EXEMPLE :
$ pwd
/usr/local/bin
$ cd
$ pwd
/home/pascal
mkdir. Cette commande permet de créer de nouveau(x) répertoire(s)
EXEMPLE :
$ ls -F
bin/ mytmp@ test/ tmp/
$ mkdir rep1 rep2 rep3 rep4
$ ls -F
bin/ mytmp@ rep1/ rep2/ rep3/ rep4/ test/ tmp/
L'option -p de la commande
mkdir permet de créer une hiérarchie en une seule
opération, dans l'exemple ci-après, on crée un répertoire
(rep5) contenant un répertoire
(facile) contenant ... :
EXEMPLE :
$ mkdir -p rep5/facile/a/faire
$ ls -R rep5
ls -FR rep5
rep5:
facile/
rep5/facile:
a/
rep5/facile/a:
faire/
rep5/facile/a/faire:
rmdir. Cette commande permet de supprimer un répertoire vide. Supprimer un répertoire revient explicitement à supprimer les objets qu'il contient. C'est logique, mais inefficace si la hiérarchie à supprimer contient beaucoup d'objets, c.f. la section consacrée à la commande rm pour une méthode radicalement efficace.
Créer dans votre répertoire de domiciliation le répertoire
~/elementBase/Créer dans votre répertoire de domiciliation le répertoire
~/elementBase/part1/en utilisant l'option-pà quelle condition est-ce que la ligne de commande
mkdir ~elementBase/part1/exo1/compeut fonctionner et créer effectivement ce sous-répertoire ?Vous voulez créer à la fois un répertoire
~/elementBase/part1/exo1/dir1/et un sous répertoire~/elementBase/part1/exo1/dir2. Quelle option faut-il utiliser pour que : 1. Si~/elementBase/part1/exo1n'existe pas, le répertoire et son sous-répertoire soient créés; 2. Si~/elementBase/part1/exo1existe déjà , le sous-répertoiredir1/soit créé, sans message d'erreur.
La désignation .. désigne le répertoire père du répertoire courant.
EXEMPLES :
$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/local
$ cd ../sbin
$ pwd
/usr/sbin
Important
Sous Unix, une commande est séparée de
ces arguments par les caractères d'espacement. Ainsi
cd.. n'a pas de sens ! Il faut
écrire cd .., noter bien l'espace
séparateur.
La désignation . désigne le répertoire courant, c'est donc une auto-référence. Ainsi l'opération suivante, ne modifie nullement le répertoire courant :
EXEMPLE :
$ pwd
/usr/sbin
$ cd .
$ pwd
/usr/sbin
Cette désignation est souvent utilisée pour exécuter un programme situé dans le répertoire courant, i.e. hors des localisations traditionnelles.
EXEMPLE :
$ pwd
/usr/sbin
$ cd
$ pwd
/home/pascal
$ cd mybin
$ pwd
/home/pascal/mybin
$ ./myprog
...
exécution de myprog
...
Cette commande (situé traditionnellement dans
/bin), permet de lister le contenu d'un répertoire.
Elle contient nombre d'options permettant d'avoir beaucoup de détails.
EXEMPLE :
$ cd /usr/local
$ ls
Acrobat5 bin lib ports work
GNUstep distfiles libdata proj www
OpenOffice.org1.0 etc libexec sbin
OpenOffice.org1.0.3 include linux-sun-jdk1.3.1 share
ant info man src
apps jdk1.3.1 pgsql sup
L'option -a permet de lister en plus les
dotfiles, i.e. les
fichiers cachés qui commencent toujours par un point (dans leur nom),
ici nous obtenons en plus les entrées spéciales . et
.. :
EXEMPLE :
$ pwd
/usr/local
$ ls -a
. ant info man src
.. apps jdk1.3.1 pgsql sup
Acrobat5 bin lib ports work
GNUstep distfiles libdata proj www
OpenOffice.org1.0 etc libexec sbin
OpenOffice.org1.0.3 include linux-sun-jdk1.3.1 share
L'option -l permet de lister au format long
le répertoire ou le fichier qui lui est éventuellement passé en
argument.
EXEMPLES :
$ ls -l /usr
total 41
drwxr-xr-x 13 root wheel 512 May 25 13:21 X11R6
drwxr-xr-x 2 root wheel 7168 May 24 10:19 bin
drwxr-xr-x 3 root wheel 512 Jan 8 2003 compat
drwxr-xr-x 3 root wheel 512 Jan 6 2003 games
drwxr-xr-x 41 root wheel 3584 May 24 10:18 include
drwxr-xr-x 4 root wheel 6144 May 24 10:19 lib
drwxr-xr-x 9 root wheel 512 Oct 9 2002 libdata
drwxr-xr-x 8 root wheel 1536 May 24 10:19 libexec
drwxr-xr-x 28 root wheel 512 Jul 10 08:23 local
drwxrwxrwt 44 root wheel 9216 May 24 14:48 lost+found
drwxr-xr-x 3 root wheel 512 May 24 09:23 obj
drwxr-xr-x 2 root wheel 4096 May 24 10:19 sbin
drwxr-xr-x 27 root wheel 512 May 24 10:17 share
drwxr-xr-x 21 root wheel 512 May 12 22:02 src
drwxr-xr-x 3 root wheel 512 Jan 8 2003 sup
$ ls -l /etc/passwd
-rw-r--r-- 1 root wheel 1527 Aug 7 01:50 /etc/passwd
Sans trop rentrer dans les détails, notons que les listings précédents, sont structurés en sept colonnes. De la gauche vers la droite, on trouve en première colonne les permissions sur l'objet, en seconde colonne le nombre de liens sur l'objet, puis en troisième et quatrième le propriétaire et le groupe de l'objet, en cinquième la taille en octet, en sixième la date de dernière modification (mtime) de l'objet. Enfin, la dernière colonne donne le nom de l'objet.
Nous examinerons plus tard la première colonne en détail, celle qui présente en détail les permisssions sur l'objet, mais nous pouvons déjà décomposer ces informations en quatre groupes - rwx rwx rwx. Le premier sous-groupe décrit le type de fichier : un fichier ordinaire est représenté par un -, et les répertoires par d. La liste suivante présente les différents types de fichiers exprimés dans le premier sous-groupe :
- : Fichier ordinaire
b : Fichier spécial en mode bloc
c : Fichier spécial en mode caractère
d : Répertoire
l : lien symbolique
p : tube nommé (pipe)
Il est possible de lister le/les répertoires sans leur(s)
contenu(s) (option -d). Il est évidement possible de
combiner les options :
EXEMPLE :
$ ls -ld /usr /usr/bin /usr/sbin
drwxr-xr-x 17 root wheel 512 Jan 8 2003 /usr
drwxr-xr-x 2 root wheel 7168 May 24 10:19 /usr/bin
drwxr-xr-x 2 root wheel 4096 May 24 10:19 /usr/sbin
De manière symétrique, on peut vouloir voir l'ensemble des
informations d'un répertoire donné, i.e. l'ensemble des
informations sur les répertoires et sous répertoires qu'il contient
(parcours récursif) avec l'option (-R). Attention cela
peut être volumineux !
Essayez-le dans votre HOME, puis dans
/home.
Listez le répertoire au format long :
~/elementBase/part1/et interprétez le résultatCréez le fichier
~/elementBase/part1/fic1contenant une phrase de votre choix.Lister de nouveau le répertoire - Interprétez le résultat. Que représente
total ?Créez un deuxième fichier, puis un sous répertoire et notez les changements.
Tout est fichier sous Unix (credo
Unixien , un répertoire est donc un fichier)
et chaque fichier se voit attribuer un index unique appelé
inode [index node]. Informellement, un
inode est une structure de données qui
décrit le contenu d'un fichier à l'exception notable de son nom (sa
désignation). Un fichier peut ainsi avoir plusieurs désignations
différentes, lesquelles sont stockées dans les répertoires[2]. La liste des inodes d'un
répertoire donné est obtenue avec la commande ls -i
<repertoire>. On peut évidemment combiner les
options :
EXEMPLE :
$ ls -ila /usr/X11R6/libexec
total 137
3984118 drwxr-xr-x 4 root wheel 512 Jun 22 19:11 .
3928896 drwxr-xr-x 13 root wheel 512 May 25 13:21 ..
3983621 -r-xr-xr-x 1 root wheel 8296 Jun 22 16:40 gconf-sanity-check-2
3983619 -r-xr-xr-x 1 root wheel 45752 Jun 22 16:40 gconfd-2
4005734 drwxr-xr-x 3 root wheel 512 May 25 15:48 gkrellm
3983624 -r-xr-xr-x 1 root wheel 5112 Jun 22 19:04 gnome2-db2html
3983625 -r-xr-xr-x 1 root wheel 21884 Jun 22 19:04 gnome2-info2html
3983623 -r-xr-xr-x 1 root wheel 43848 Jun 22 19:04 gnome2-man2html
3983626 -r-xr-xr-x 1 root wheel 8564 Jun 22 19:11 gnome_segv2
4017439 drwxr-xr-x 2 root wheel 512 May 29 15:36 sawfish
Observons que le répertoire
/usr/X11R6/libexec possède
l'inode 3984118 et qu'il est réréfencé 4
fois (i.e. bien qu'existant en un seul endroit cet
inode possède plusieurs références).
Quelles sont-elles (c.f. ci-après) ?
EXEMPLE :
$ ls -idl /usr/X11R6/libexec /usr/X11R6/libexec/. /usr/X11R6/libexec/gkrellm/.. /
usr/X11R6/libexec/sawfish/..
3984118 drwxr-xr-x 4 root wheel 512 Jun 22 19:11 /usr/X11R6/libexec
3984118 drwxr-xr-x 4 root wheel 512 Jun 22 19:11 /usr/X11R6/libexec/.
3984118 drwxr-xr-x 4 root wheel 512 Jun 22 19:11 /usr/X11R6/libexec/gkrellm/..
3984118 drwxr-xr-x 4 root wheel 512 Jun 22 19:11 /usr/X11R6/libexec/sawfish/..
Puisque .. est une référence au répertoire
père du répertoire courant,
/usr/X11R6/libexec/gkrellm/.. et
/usr/X11R6/libexec/sawfish/.. sont bien deux
désignations différentes du même objet (à savoir
/usr/X11R6/libexec, qui est aussi désigné par
/usr/X11R6/libexec/).
La désignation d'un inode est encore appelée : lien [link]. Un inode peut posséder plusieurs désignations qu'on appelle liens durs [hard links]. L'inode ainsi multi-référencé existe au sein du filesystem tant qu'il reste un lien dur le référençant. Pour créer un lien dur, on utilise la commande ln :
EXEMPLE :
$ touch toto
$ ls -i
96770 toto
$ ln toto titi # ln <src> <dst>
$ ls -i
96770 titi 96770 toto
Limitations classiques des liens durs :
Enfin, puisque chaque désignation pointe (ou référence) le même inode (objet) et que les droits d'accès sont stockés dans l'inode, les différentes désignations (liens durs) ont les mêmes droits d'accès[5].
Créez le répertoire
~/elementBase/part1/links/.Créez le lien
~/elementBase/part1/links/link1référençant le fichier~/elementBase/part1/fic1créé précédemment.Comparez les fichiers
~/elementBase/part1/links/link1et~/elementBase/part1/fic1(inode, taille, résultat à l'affichage)Supprimer
~/elementBase/part1/fic1Que constatez vous ?
Les limitations sur les liens durs
[symbolic links] ont conduit à
l'élaboration d'un nouveau type de fichier dit lien
symbolique. Un tel (type de) fichier se refère à un autre par
le nom plutôt que par l'inode, en fait le
contenu de ce fichier est un chemin absolu ou relatif qui conduit au
fichier référencé. Pour créer un lien symbolique,
on utilise la commande ln -s :
EXEMPLE :
$ ln -s ~/tmp mytmp # création d'un lien symb. sur le répertoire ~/tmp
$ ll # utilisation de l'alias
total 8
lrwxrwxrwx 1 pascal gnu 16 Aug 14 13:14 mytmp -> /home/pascal/tmp
drwx------ 2 pascal gnu 4096 Aug 14 09:45 test
drwx------ 2 pascal gnu 4096 Aug 14 13:14 tmp
$ cd mytmp ; pwd # vérification
/home/pascal/mytmp
$ ll -i . ~/tmp # contenu ~/mytmp qui est le contenu de ~/tmp
.:
total 1
96770 -rw------- 1 pascal gnu 24 Aug 14 13:19 toto
96771 lrwxrwxrwx 1 pascal gnu 4 Aug 14 11:14 tutu -> toto
/home/pascal/tmp:
total 1
96770 -rw------- 1 pascal gnu 24 Aug 14 13:19 toto
96771 lrwxrwxrwx 1 pascal gnu 4 Aug 14 11:14 tutu -> toto
Remarques :
un lien symbolique est dénoté par un l dans le listage au format long (ls
-lou son alias ll),la taille d'un lien symbolique (exprimée en octet) est la taille nécessaire au stockage du chemin d'accès (relatif ou absolu) à l'objet référencé (dans l'exemple précédent 4 octets pour la désignation relative toto ),
un lien symbolique peut référencer un fichier régulier, un répertoire, un fichier en mode bloc ou caractère...
puisqu'un lien symbolique s'appuie sur la notion de chemin (et non d'inode) il est possible d'en créer sur un objet d'un filesystem différent.
Les droits d'accès au lien symbolique sont, logiquement, les droits d'accès à l'objet référencé, ainsi sous GNU/Linux le lrwxrwxrwx qui apparaît lors d'un listage au format long n'a pas de signification, tandis que sous xBSD les droits qui s'affichent sont hérités de la valeur de l'umask de l'utilisateur (uid) qui créé le lien, cette valeur n'est pas mise à jour si les droits de l'objet référencé sont modifiés !
Créez le lien symbolique
~/elementBase/part1/links/link2référençant le fichier~/elementBase/part1/fic2créé précédemment.Comparez les fichiers
~/elementBase/part1/links/link2et~/elementBase/part1/fic2. (inode, taille, résultat à l'affichage)Supprimer
~/elementBase/part1/fic2Que constatez vous ?
file (1). Cette commande tente de déterminer le type du fichier qui lui est passé en argument.
EXEMPLES :
$ file ~/tmp/toto
/home/pascal/tmp/toto: ASCII text
$ file ~/test/C/bin/_crypt
_crypt: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux
2.0.0, dynamically linked (uses shared libs), not stripped
$ file ~/test/C/src/_crypt.c
/home/pascal/test/C/src/_crypt.c: ISO-8859 C program text
$ file ~/bin/_backup
/home/pascal/bin/_backup: C shell script text executable
$ file /bin/rm
/bin/rm: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBS
D 4.8, statically linked, stripped
$ file /usr/local/bin/xemacs
/usr/local/bin/xemacs: symbolic link to xemacs-21.1.14
cp (1). Cette commande permet de copier un fichier existant.
EXEMPLE :
$ pwd # o๠suis-je ?
/home/pascal/tmp
$ ls -i # quels sont les "objets" ?
96771 bookmarks.html # 1 "objet"
$ cp bookmarks.html bookmarks.html.SAV # en faire une copie de sauvegarde
$ ls -i # "objets" physiquement différents ?
96771 bookmarks.html 96770 bookmarks.html.SAV
Note
La commande cp créée bien un objet différent puisque les deux fichiers ont des inodes différents.
Noter le format : cp <src> <dst>, si <dst> existe il est écrasé par défaut.
mv (1). Cette commande permet de déplacer/renommer un fichier existant dans l'arborescence. Un déplacement ne change pas l'inode tant que l'on reste dans le même filesystem, mais sa localisation dans l'arborescence i.e. sa désignation (sa référence ou encore son nom).
EXEMPLES :
$ pwd # o๠suis-je ?
/home/pascal/tmp
$ ls -i # inodes des "objets"
96771 bookmarks.html 96770 bookmarks.html.SAV
$ mv bookmarks.html ~/test # déplacement de bookmarks.html dans le rép. ~/test
$ ls -i . ~/test # l'inode de bookmarks.html est toujours 96771
.:
96770 bookmarks.html.SAV
/home/pascal/test:
96771 bookmarks.html
$ mv ~/test/bookmarks.html /tmp # changement de filesystem
$ ls -i /tmp/bookmarks.html
14 /tmp/bookmarks.html
Rappel : /tmp réside sur une partition
séparée, or l'unicité des numéros
d'inodes est assuré uniquement dans un
filesystem donné.
rm. Cette commande permet d'enlever les objets d'un filesystem.
EXEMPLE :
$ pwd
/home/pascal
$ ls -F
bin/ file.txt file.txt~ test/ titi titi.o titi~ tmp/ tootoo toto toto.
o toto~
$ rm titi
/bin/rm: remove regular file `titi'? y
$ ls -F # plus de "titi"
bin/ file.txt file.txt~ test/ titi.o titi~ tmp/ tootoo toto toto.o tot
o~
$ rm * # effacer tous les fichiers !
/bin/rm: remove directory `bin'? y
/bin/rm: cannot remove directory `bin': Is a directory
/bin/rm: remove regular file `file.txt'? y
/bin/rm: remove regular file `file.txt~'? y
/bin/rm: remove directory `test'? y
/bin/rm: cannot remove directory `test': Is a directory
/bin/rm: remove regular empty file `titi.o'? y
/bin/rm: remove regular file `titi~'? y
/bin/rm: remove directory `tmp'?^C
$
Note
Dans l'exemple, il y a demande de confirmation avant d'enlever l'objet. Cela est dû au fait que nous avons défini un alias sur rm, qui active l'option
-i(pour interactif). Le comportement par défaut de rm est le comportement classique des commandes Unix : être silencieux quand il n'y a rien de spécial à signaler[6] .Le métacaractère * désigne tous les objets (i.e. tous les fichiers).
Sans argument(s) spécifique(s) la commande rm tente d'effacer les fichiers qui ne sont pas des répertoires.
Effacer un répertoire : un
répertoire n'est autre qu'un fichier contenant une liste de couple
<désignation, inode>. Effacer un
répertoire revient à effacer son contenu (récursivement) puis le
répertoire lui-même. Pour effectuer une telle action on utilise
l'option -r ou l'option synonyme -R
de la commande rm. Compte tenu de l'alias existant,
la séquence rm -r ~/tmp (dont la
sémantique est : effacer l'arborescence désignée par
~/tmp ) va demander confirmation de
l'effacement de chacun des objets. Si on est sûr de ce que l'on fait,
on utilisera plutôt la commande suivante rm -rf
~/tmp (dont la sémantique est : effacer
l'arborescence désignée par ~/tmp, sans me poser
de questions ), attention c'est radical !.
EXEMPLE :
$ pwd # o๠suis-je ?
/home/pascal
$ ls -F # quel est le contenu ?
bin/ test/ tmp/ tootoo toto toto.o toto~
$ ls -lR ~/tmp # quel est le contenu de ~/tmp ?
total 20 # 2 fichiers réguliers
-rw------- 1 pascal gnu 20341 Aug 14 09:18 bookmarks.html.SAV
-rw------- 1 pascal gnu 0 Aug 14 09:56 toto
$ rm -rf ~/tmp # "supprimer" le répertoire ~/tmp, sans confirmation
$ ls -F # ~/tmp n'existe plus
bin/ test/ tootoo toto toto.o toto~
Copiez
~/elementBase/part1/links/link2vers le fichier~/elementBase/part1/fic2créé précédemment.Comparez les fichiers
~/elementBase/part1/links/link2et~/elementBase/part1/fic2. (inode, taille, résultat à l'affichage)Créez en une commande les fichiers
~/elementBase/part1/fic3et~/elementBase/part1/fic4. Déplacez tous les fichiers commençant parficvers le répertoire en une seule commande (utilisation des méta - caractères)
who (1). Permet de connaître qui travaille actuellement sur cette machine.
EXEMPLE :
$ who
guest ttyv1 Aug 13 11:39
pascal ttyp0 Aug 10 11:26 (:0.0)
pascal ttyp1 Aug 13 11:39 (:0.0)
pascal ttyp2 Aug 11 12:01 (:0.0)
pascal ttyp3 Aug 7 08:15 (:0.0)
foo ttyp4 Aug 13 11:39 (Euler)
pascal ttyp5 Aug 11 12:00 (:0.0)
pascal ttyp6 Aug 9 08:32 (:0.0)
Indique ici :
que l'utilisateur guest est connecté sur le premier terminal non graphique (ttyv1).
que l'utilisateur pascal est connecté sur 6 terminaux (en interface graphique, la notation :0.0 de la dernière colonne indiquant le display graphique.
enfin, que l'utilisateur foo est connecté sur le terminal ttyp4, depuis la machine Euler (session distante ssh, par exemple).
logname (1) et whoami (1). Sans argument ces deux commandes donnent le nom de connexion de l'utilisateur courant.
EXEMPLE :
$ whoami
pascal
$ logname
pascal
hostname (1). Affiche le nom de la machine courante.
EXEMPLE :
$ hostname -s # nom court : xBSD
Godel
$ hostname # GNU/Linux
tux
id (1). Affiche l'identifiant de l'utilisateur (uid), son identifiant de groupe primaire (gid), les identifiants des groupes secondaires, ainsi que les nom associés.
EXEMPLE :
$ id
uid=666(pascal) gid=666(gnu) groups=666(gnu), 0(wheel), 5(operator), 88(mysql),
668(cvs), 70(pgsql)
tty (1). Affiche le nom du terminal courant
EXEMPLE :
$ tty
/dev/ttyp7
printenv (1). Affiche toute ou partie de l'environnement courant.
EXEMPLE :
$ printenv # FreeBSD
SSH_AGENT=/usr/bin/ssh-agent
USER=pascal
MAIL=/var/mail/pascal
HOME=/home/pascal
SSH_ASKPASS=/usr/X11R6/bin/ssh-askpass
LOGNAME=pascal
BLOCKSIZE=K
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin
:/home/pascal/bin
DISPLAY=:0.0
SHELL=/bin/tcsh
FTP_PASSIVE_MODE=YES
SSH_AUTH_SOCK=/tmp/ssh-isrTtwab/agent.463
SSH_AGENT_PID=478
WMAKER_BIN_NAME=/usr/X11R6/bin/wmaker
WRASTER_COLOR_RESOLUTION0=4
IFS=
ETERM_THEME_ROOT=/usr/X11R6/share/Eterm/themes/Eterm
ETERM_USER_ROOT=/home/pascal/.Eterm
COLORFGBG=default
WINDOWID=54526015
TERM=xterm-color
COLORTERM=rxvt
COLORTERM_BCE=Eterm
ETERM_VERSION=0.9.2
HOSTTYPE=FreeBSD
VENDOR=amd
OSTYPE=FreeBSD
MACHTYPE=i386
SHLVL=1
PWD=/home/pascal/bin
GROUP=gnu
HOST=Godel.corto.home
color=1
colorcat=1
LC_CTYPE=fr_FR.ISO8859-15
PAGER=less
MOZILLA_HOME=/usr/X11R6/bin/mozilla
EDITOR=emacs
CPUTYPE=k7
TEXEDIT=emacs
LSCOLORS=EhGxbxcxBxdxHBhbafhCad
CLICOLOR=1
CLICOLOR_FORCE=1
RSYNC_RSH=/usr/bin/ssh
CVSROOT=/home/cvsroot
$ printenv # GNU/Linux
LC_PAPER=a4
TERM=xterm-color
SHELL=/bin/bash
SSH_CLIENT=192.168.200.2 3878 22
SSH_TTY=/dev/pts/0
USER=pascal
LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;33;01:c
d=40;33;01:or=40;31;01:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:
*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.deb=01;31:*
.rpm=01;31:*.jar=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01
;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.ti
ff=01;35:*.png=01;35:*.mpg=01;35:*.mpeg=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35
:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.ogg=01;35:*.mp3=01;35:*.wav=01;35:
PAGER=less
MAIL=/var/mail/pascal
PATH=/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
PWD=/home/pascal
EDITOR=emacs
LANG=fr_FR@euro
SHLVL=1
HOME=/home/pascal
LOGNAME=pascal
LC_CTYPE=fr_FR.ISO8859-15
SSH_CONNECTION=192.168.200.2 3878 192.168.200.5 22
_=/usr/bin/printenv
date (1). Evoquée sans argument cette commande donne la date du jour.
EXEMPLE :
$ date
Wed Aug 13 11:31:51 RET 2003
cal (1). Evoquée sans argument cette commande affiche le calendrier du mois en cours.
EXEMPLE :
$ cal
August 2003
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Créer un fichier texte
foo, contenant le seul mot foo, dans le répertoire~/elementBase/part1/synth1/.Créer
~/elementBase/part1/synth1/dir1/foo2comme lien dur à~/foo. Comment vérifiee que ces deux désignations différentes référencent le même objet.Est-il possible de savoir si un fichier possède plusieurs désignations ?
Modifier le contenu de
~/elementBase/part1/synth1/dir1/foo2en lui ajoutant du texte (echo ... >>~elementBase/part1/synth1/dir1/foo2). Contenu prévisible de~/elementBase/part1/synth1/foo? Le vérifier.Supprimer la désignation
~/elementBase/part1/synth1/dir1/foo2. Que devient~/elementBase/part1/synth1/dir1/foo2?Peut-on créer un lien dur
~/elementBase/part1/synth1/dir2à~/elementBase/part1/synth1/dir1? Pourquoi ?Pourquoi les liens durs ne peuvent pas appartenir à des filesystem différents ?
Créer un fichier texte
~/elementBase/part1/synth1/dir2/bar, contenant le seul mot bar, puis un lien symbolique~/elementBase/part1/synth1/barlsvers celui-ci. Contrôler avec la commande ls -liR, puis avec cat ~/elementBase/part1/synth1/barls. Renommer~/elementBase/part1/synth1/dir2/baren~/elementBase/part1/synth1/dir3/bar. Contrôler le résultat et conclure.Tester la transitivité de la notion de lien symbolique (i.e. lien vers un lien vers une désignation d'un objet du filesystem).
Tester l'acyclicité du SGF en créant une circularité de liens symboliques..
[1] Plus exactement, il s'agit d'un graphe acyclique, plusieurs désignations différentes pouvant aboutir à la même ressource. L'acyclicité permettant de conserver des algorithmes simples pour la gestion de la structure de données.
[2] Tout aussi informellement, un répertoire est une liste de couple {inode de l'objet, nom de l'objet}.
[3] . et .. sont des liens durs sur des répertoires, mais aucun utilisateur, pas même le super-utlisateur root ne peut créer de tels liens.
[4] Au sens Unix un filesystem est une collection de fichiers. Il est organisé hiérarchiquement à l'aide de répertoires et se restreint en général à un type de support physique, typiquement le disque dur. Un filesystem est un aussi un espace de nommage et de contrôle d'accès aux fichiers qu'il contient.
[5] C'est quasi incorrect, en fait, la désignation ne possède aucun droit !
[6] Rule of silence : when a program has nothing surprising to say, it should say nothing.