1. Commandes et notions de bases

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.

1.1. chemins, chemins absolus et chemins relatifs

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

1.2. pwd

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

1.3. cd

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

1.4. Gérer les répertoires : mkdir, rmdir

mkdirCette 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:

rmdirCette 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.

Illustration - Répertoires

  1. Créer dans votre répertoire de domiciliation le répertoire ~/elementBase/

  2. Créer dans votre répertoire de domiciliation le répertoire ~/elementBase/part1/ en utilisant l'option -p

  3. à quelle condition est-ce que la ligne de commande mkdir ~elementBase/part1/exo1/com peut fonctionner et créer effectivement ce sous-répertoire ?

  4. 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/exo1 n'existe pas, le répertoire et son sous-répertoire soient créés; 2. Si ~/elementBase/part1/exo1 existe déjà , le sous-répertoire dir1/ soit créé, sans message d'erreur.

1.5. .. et .

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
...                                                                

1.6. ls (1)

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.

Illustration - ls

  1. Listez le répertoire au format long : ~/elementBase/part1/ et interprétez le résultat

  2. Créez le fichier ~/elementBase/part1/fic1 contenant une phrase de votre choix.

  3. Lister de nouveau le répertoire - Interprétez le résultat. Que représente total ?

  4. Créez un deuxième fichier, puis un sous répertoire et notez les changements.

1.7. Notion d'inode

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/).

1.8. Liens durs (ln (1))

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 :

  • On ne peut créer des liens durs que sur des fichiers (réguliers, caractère, bloc, socket, named pipe...) et non sur des (fichiers) répertoires[3].

  • Les liens ne traversent pas les limites d'un filesystem[4].

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].

Illustration - liens durs

  1. Créez le répertoire ~/elementBase/part1/links/.

  2. Créez le lien ~/elementBase/part1/links/link1 référençant le fichier ~/elementBase/part1/fic1 créé précédemment.

  3. Comparez les fichiers ~/elementBase/part1/links/link1 et ~/elementBase/part1/fic1 (inode, taille, résultat à  l'affichage)

  4. Supprimer~/elementBase/part1/fic1 Que constatez vous ?

1.9. Liens symboliques (ln -s)

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 -l ou 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 !

Illustration - liens symboliques

  1. Créez le lien symbolique ~/elementBase/part1/links/link2 référençant le fichier ~/elementBase/part1/fic2 créé précédemment.

  2. Comparez les fichiers ~/elementBase/part1/links/link2 et ~/elementBase/part1/fic2 . (inode, taille, résultat à  l'affichage)

  3. Supprimer ~/elementBase/part1/fic2 Que constatez vous ?

1.10. Manipuler les fichiers : file, cp, mv, rm

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é.

rmCette 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~

Illustration - Manipulation de fichiers

  1. Copiez ~/elementBase/part1/links/link2 vers le fichier ~/elementBase/part1/fic2 créé précédemment.

  2. Comparez les fichiers ~/elementBase/part1/links/link2 et ~/elementBase/part1/fic2 . (inode, taille, résultat à  l'affichage)

  3. Créez en une commande les fichiers ~/elementBase/part1/fic3 et ~/elementBase/part1/fic4 . Déplacez tous les fichiers commençant par fic vers le répertoire en une seule commande (utilisation des méta - caractères)

1.11. who, logname, whoami, hostname

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

1.12. id, tty, printenv

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

1.13. date, cal

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

1.14. Exercices

Exercice - 1 - Liens durs (ou physiques)

  1. Créer un fichier texte foo, contenant le seul mot foo, dans le répertoire ~/elementBase/part1/synth1/ .

  2. Créer ~/elementBase/part1/synth1/dir1/foo2 comme lien dur à  ~/foo. Comment vérifiee que ces deux désignations différentes référencent le même objet.

  3. Est-il possible de savoir si un fichier possède plusieurs désignations ?

  4. Modifier le contenu de ~/elementBase/part1/synth1/dir1/foo2 en lui ajoutant du texte (echo ... >>~elementBase/part1/synth1/dir1/foo2). Contenu prévisible de ~/elementBase/part1/synth1/foo ? Le vérifier.

  5. Supprimer la désignation ~/elementBase/part1/synth1/dir1/foo2. Que devient ~/elementBase/part1/synth1/dir1/foo2 ?

  6. Peut-on créer un lien dur ~/elementBase/part1/synth1/dir2 à  ~/elementBase/part1/synth1/dir1 ? Pourquoi ?

  7. Pourquoi les liens durs ne peuvent pas appartenir à  des filesystem différents ?

Exercice - 2 - Liens symboliques

  1. Créer un fichier texte ~/elementBase/part1/synth1/dir2/bar, contenant le seul mot bar, puis un lien symbolique ~/elementBase/part1/synth1/barls vers celui-ci. Contrôler avec la commande ls -liR, puis avec cat ~/elementBase/part1/synth1/barls. Renommer ~/elementBase/part1/synth1/dir2/bar en ~/elementBase/part1/synth1/dir3/bar. Contrôler le résultat et conclure.

  2. Tester la transitivité de la notion de lien symbolique (i.e. lien vers un lien vers une désignation d'un objet du filesystem).

  3. 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.

Skins :
Transparence
Simple
Page Accueil
Formation