# Autres commandes UNIX

## Manuels en ligne

### man

Cette commande permet d'obtenir le manuel unix en ligne de toute commande unix :

```bash
man [unixCommand]
```

Par exemple, on obtient l'aide en ligne (en anglais) sur la commande `ls` avec :

```bash
man ls
```

L'aide qui s'affiche se décompose en plusieurs parties, généralement (mais pas exclusivement) :

- NAME : Rappel du nom de la commande et son libellé en clair
- SYNOPSIS : Modèle générique de l'emploi de la commande
- DESCRIPTION : Explication du fonctionnement de la commande
- OPTIONS : Descriptions des différentes options supportées par la commande
- USAGE : Particularités (par exemple, comportement vis-à-vis de gros fichiers)
- EXAMPLES : Quelques exemples d'emploi, commentés
- ENVIRONMENT VARIABLES : Listing des variables d'environnement unix ayant une action sur la commande et devant éventuellement être convenablement positionnées avant emploi de la commande (les variables d'environnement seront traitées dans la partie suivante sur les shells)
- SEE ALSO : Renvois vers d'autres commandes unix ayant à voir avec la commande documentée
- NOTES : Commentaires complémentaires

**N'oubliez jamais de consulter le man quand vous voulez en connaître plus sur une
commande, une fonction C, ou n'importe quoi d'autre** (essayez man colors (obsolète)).

> 💡 Les _mans_ ont évolué jusqu'à ne presque plus contenir d'exemples, les
> rendant beaucoup plus hermétiques.  
> Utilisez [tldr](https://tldr.sh/) pour avoir les exemples principaux pour une
> commande: <https://tldr.sh/>

## Commandes sur les fichiers

### find

Cette commande permet de rechercher un fichier ou un groupe de fichiers dans une
arborescence unix. La recherche peut porter sur le nom du fichier, son
propriétaire ou un groupe d'utilisateurs (ou bien d'autres critères, voir le
man).

Pour retrouver un fichier par son nom ou par un masque (pattern) de celui-ci à
partir du répertoire courant :

```bash
find . -name table*
```

Pour retrouver un (des) fichier(s) appartenant à un utilisateur particulier ou à
un groupe particulier :

```bash
find . -user parmentf
find . -group dilib
```

Pour afficher la hiérarchie du répertoire courant :

```bash
find .
```

### diff

Cette commande permet de comparer deux fichiers `File1` et `File2` et d'afficher leurs différences éventuelles, ligne à ligne.

```bash
diff File1 File2
```

La commande `diff` signale les différences qu'elle trouve à l'aide des codes suivants :

- `a` : ligne en ajout dans `File2` par rapport à `File1`
- `d` : ligne en suppression dans `File2` par rapport à `File1`
- `c` : lignes changées entre `File2` et `File1`
- `<` : différence constatée dans `File1`
- `>` : différence constatée dans `File2`

À titre d'illustration, soient les fichiers `File1`, `File2` et `File3` suivants :

| File1 | File2 | File3 |
| :---: | :---: | :---: |
|   a   |   a   |   a   |
|   b   |   b   |   1   |
|   c   |   c   |   b   |
|       |   d   |   e   |

Les commandes `diff` qui suivent donneront pour rapports :

```bash
$ diff File1 File2
3a4
> d
$ diff File2 File1
4d3
< d
$ diff File1 File3
1a2
> 1
3c4
< c
---
> e
```

| Ligne | File1 | File2 | File3 |
| :---: | :---: | :---: | :---: |
|   1   |   a   |   a   |   a   |
|   2   |   b   |   b   |   1   |
|   3   |   c   |   c   |   b   |
|   4   |       |   d   |   e   |

L'option `-c` de la commande `diff` permet d'avoir un rapport plus lisible,
notamment dans le cas de comparaison de gros fichiers.

## Commandes sur les contenus

### cut

Cette commande permet de récupérer une ou plusieurs parties d'une chaîne de
caractères, par exemple en précisant le délimiteur séparant les parties à
extraire.

Pour récupérer le numéro de département d'un code postal :

```bash
$ echo 54500 | cut -c1-2
54
```

Pour récupérer une partie d'une ligne avec un délimiteur, avec une variable
`ligne="auteur,titre,descripteurs,id"` :

```bash
$ echo $ligne | cut -d, -f2,4
titre,id
```

À noter que si le délimiteur est un caractère spécial du shell, par exemple le pipe `|` ou le point-virgule, il faut le protéger entre guillemets.

```bash
$ echo $ligne | cut -d"|" -f2
titre
```

### sed

Sed (pour Stream EDitor) est un éditeur non interactif de texte.  
Il permet d'appliquer une certain nombre de commandes à un fichier puis d'en afficher le résultat (sans modifier le fichier de départ) sur la sortie standard.  
Comme avec toute commande unix, il est possible de rediriger la sortie vers un fichier résultat.

Voir [Sed](../sed/).
