Newer
Older
cours-unix-shell / src / commandes / droits.md
# Gestion des droits

## ll (alias de ls -alF)

Cette commande permet d'obtenir la description complète d'un répertoire, y
compris les fichiers et répertoires cachés (qui commencent par un point) :

```bash
ll
```

L'affichage résultant se lit ligne par ligne, par exemple :

```bash
drwxrwxr-x  3 houdry   dps   1024 Apr 28 15:28 ./
drwxr-xr-x 16 houdry   dps    512 Apr 18 16:19 ../
-rw-rw-r--  1 parmentf dilib 2848 Apr 25 11:08 Make.gif
-rw-rw-r--  1 parmentf dilib 2631 Apr 25 11:08 Shell.gif
-rw-rw-r--  1 houdry   dps   7817 Apr 25 11:44 redirPipes.html
-rw-rw-r--  1 parmentf dilib 2405 Apr 24 17:36 make.html
-rwxrwxr--  1 houdry   dps    235 Apr 24 17:01 exotp.sh*
```

De nombreux éléments d'information sont visibles avec une commande de listing
long. Ils sont au nombre de sept, avec dans l'ordre des colonnes :

- la liste des droits sur 10 positions (ex.: drwxrwxrwx)
  - position 1    : le type d'entrée, fichier ou répertoire
  - positions 2-4 : les droits de l'utilisateur (user)
  - positions 5-7 : les droits du groupe de l'utilisateur
  - positions 8-10: les droits des autres groupes
  
    |     |                                              |
    | --- | :------------------------------------------- |
    | d   | entrée répertoire                            |
    | -   | entrée fichier                               |
    | r   | lecture autorisée                            |
    | w   | écriture autorisée (et écrasement)           |
    | x   | fichier exécutable ou répertoire parcourable |

- la taille en blocs de l'entrée (peu utile pour nous)
- le nom du propriétaire (user unix)
- le groupe du propriétaire attaché à l'entrée
- la taille de l'entrée en octets
- les date et heure de la création ou de la dernière mise à jour
- le nom du répertoire ou du fichier

> 💡 l'option `-h` vous donnera la taille de l'entrée dans un format plus...
> humain.

## who, whoami, id

Un utilisateur unix est identifié par deux choses :

1. son code utilisateur (ex.: parmentf ou houdry)
2. son ou ses groupes (ex.: dps)

Différentes commandes permettent de retrouver ces informations.

Identification de l'utilisateur courant :

```bash
whoami
```

Identification des utilisateurs du système :

```bash
who
```

Affichage des code et groupe de l'utilisateur :

```bash
id
```

## chmod

Cette commande permet de modifier les droits d'un fichier ou d'un répertoire.  
Pour pouvoir le faire, il faut en être propriétaire.  

Il y a deux façons d'utiliser cette commande : avec les groupes `ugoa` et les
droits `rwx` ou bien avec un profil octal.

Les droits des 3 entités propriétaire (`u`), groupe du propriétaire (`g`) et
autres groupes (`o`) doivent être précisés :

- `a=rx` pour mettre les droits `r` et `x` seulement, pour tous les groupes (`a`=`ugo`, all)
- `ug+w` pour ajouter le droit `w` aux groupes `u` et `g` seulement
- `775` est un masque en octal, équivalent de `a=rx,ug+w` - voir tableau qui suit

Le tableau suivant résume les cas possibles :

| lettres | binaire | octal |
| :-----: | :-----: | :---: |
|  `---`  |   000   |   0   |
|  `--x`  |   001   |   1   |
|  `-w-`  |   010   |   2   |
|  `-wx`  |   011   |   3   |
|  `r--`  |   100   |   4   |
|  `r-x`  |   101   |   5   |
|  `rw-`  |   110   |   6   |
|  `rwx`  |   111   |   7   |

Par exemple, pour positionner les droits d'un fichier `File` à `rwxr-xr--` :

```bash
chmod 754 [File]
chmod u=rwx,g=rx,o=r [File]
```

Pour modifier des droits positionnés à `r--r----x` en `rwxrw-r--`, on peut aussi écrire :

```bash
chmod ug+w,u+x,a+r,o-x [File]
```

## chgrp

Cette commande permet de changer le groupe attaché à un fichier ou à un répertoire.  
Par exemple, un fichier `File` est lié au groupe `dps` et il faut le changer
pour le lier au groupe `veille` (attention, il faut que le *user* appartienne aux
deux groupes) :

```bash
chgrp veille [File]
```

## newgrp

Cette commande permet de changer le groupe d'appartenance de l'utilisateur.  
Cela peut être nécessaire pour accéder à des fichiers dont l'emploi est limité à
certains groupes (par ex., `veille` par rapport à `dps`).  
Pour changer de groupe, il faut appartenir aux deux (l'ancien et le nouveau).

À partir du moment où cette commande est lancée, les fichiers et répertoires
créés le seront sous ce nouveau groupe.

```bash
newgrp veille
```