# Certification Linux LPI/Administrateur système débutant/Examen 101/GNU et commandes Unix/Gestion de base des fichiers
## Objectifs

Description : les candidats doivent être en mesure d’utiliser les commandes de base UNIX pour copier, déplacer, et retirer des fichiers et des répertoires. Ces taches regroupent les opérations avancées de gestion de fichier tel que la copie récursive de fichiers multiples, retirer des répertoires récursivement, et déplacer des fichiers qui rencontrent un "pattern wildcard". Cela inclus d’utiliser les spécifications simples et avancés de "wildcard" pour se référer aux fichiers, aussi bien que d’utiliser find pour localiser et agir sur les fichiers en se basant sur le type, la taille, et le temps.
Toutes les commandes Unix sont en minuscule.

## Commandes clés pour manipuler les fichiers
### Créer et supprimer des répertoires

Pour créer un répertoire, utiliser mkdir.
Options courantes :
    -m mode : définit le mode des permissions. Pas défaut umask.
    -p parent : créer le répertoire parent si c’est nécessaire.
Exemples :
Pour supprimer un répertoire vide, utiliser rmdir.
Options courantes :
    -p parent : supprimer les sous-répertoires vides.
Exemples :

### Copier des fichiers et des répertoires

Pour copier une fichier en un autre, ou vers un répertoire, utiliser la commande cp.
Source et destination peuvent être un fichier ou un répertoire.
Options courantes :
    -i interactive : demande confirmation pour écraser
    -r recursive : copie les sous répertoires et leur contenu. Utiliser -R pour les fichiers spéciaux.
    -f force : forcer l'écrasement
Par défaut, il écrase silencieusement le fichier de destination s'il existe.
Par ailleurs il n'affecte pas le fichier source.
Exemples :

### Déplacer et renommer des fichiers

Pour renommer un fichier, un répertoire ou pour déplacer un fichier ou un répertoire vers un autre endroit, utilisez mv.
Source et destination peuvent être un fichier ou un répertoire.
Options courantes :
    -i interactive : demande interactive d'écrasement
    -f force : force l'écrasement
    -v verbose : verbeux
Par défaut, il écrase silencieusement le fichier de destination s'il existe.
Par ailleurs il n'affecte pas le fichier source.
Exemples :

## Afficher une liste de fichiers et des informations

La commande pour lister les fichiers dans le répertoire courant est ls.
Options courantes :
    -l long : pour le format de nombre long.
    -F File : différencie les fichiers des répertoires dans la liste.
    -a all : montre tous les fichiers, y compris les cachés.
    -R recursive : listage récursif des sous-répertoires.
    -d directory : ne descend pas dans les répertoires : renvoie leurs noms au lieu de leurs contenus.
La commande ls est l'équivalent de la commande dir sur DOS.
Exemple de sortie de ls :

## Types de fichiers

Le format long signifie :

### Contenu des fichiers et emplacement

Unix (donc Linux) ne distingue pas un type de fichier par son extension, comme Windows. Pour déterminer le contenu d’un fichier, utiliser file.
Pour déterminer si une commande est un commande interne du shell ou un programme, utilisez type, et utilisez which pour trouver sa position.

## Créer et utiliser des fichiers

Les noms de fichiers peuvent être créé avec les redirections I/O :
Un éditeur comme vi :
Plein d'utilitaires UNIX :
Une application :
La commande touch, qui créée des fichiers vides :
Un nom de fichier valide :
    au maximum 255 caractères
    doit respecter la casse (majuscules, minuscules…)
    peut comporter tous les caractères sauf le slash '/' (car il sépare déjà les répertoires)
Sont recommandés les caractères alphanumériques ainsi que les caractères plus, moins et underscore.
* Caractères à éviter :
Le caractère tiret.
Espace blanc.
Beaucoup d'autres caractères spéciaux !@#$%^&*:;"'}{|\<,>.?~`

### Supprimer des fichiers et des répertoires

Pour supprimer des fichiers ou arborescences, utilisez rm.
Fichiers peut être un fichier ou un répertoire.
Options courantes :
    -i interactive : demande confirmation pour chaque suppression.
    -f force : force l'écrasement.
    -r recursive : supprime les sous-répertoires et leur contenu.
* Il n'y a pas de commande pour annuler la suppression (pas de corbeille).
Exemples :

## Trouver des fichiers dans le sous-répertoire d'une arborescence

Pour trouver un fichier dans une arborescence, utilisez find.
La commande comprend plusieurs conditions, et cherche récursivement dans les sous-répertoires.
Les conditions possibles sont :
    -name [exemple] : cherche le mot exemple.
    -type c : type de fichier [bcdfl].
    -size [+-]# : a plus ou moins la taille en blocs (c:bytes, k:kilo).
    -user [login] : appartient à l'utilisateur.
    -atime [+-]# : non modifié depuis au plus ou moins le nombre de jour spécifié.
    -mtime [+-]# : modifié depuis au plus ou moins le nombre de jour spécifié.
    -perm nnn : possède les permissions nnn.
Les conditions possibles sont :
    -print : montre le chemin complet des éléments du résultat.
    -exec cmd \; : exécute la commande cmd sur la liste du résultat.
    -ok cmd \; : idem que -exec mais en demandant avant.
Exemples :

### whereis and which

Pour localiser un binaire, un fichier source, ou une page de manuel, utilisez whereis.
Options courantes :
    -b: Chercher seulement les binaires.
    -m: Chercher seulement des sections de manuel.
    -s: Chercher seulement des sources.
Exemples :
Pour localiser un fichier qui se trouve quelque part défini par la variable d'environnement PATH, utilisez which.
-a cherche toutes les correspondances possibles dans la variable PATH.

## Exercices

* Écrivez une commande pour supprimer de façon interactive tous les fichiers .tmp dans votre répertoire personnel. Répondez y à chaque invite.
$ find . -name "*.tmp" -type f |rm -i
* Listez tous les fichiers dans les répertoires personnels des utilisateurs finissant par .pdf qui sont plus gros que 50 blocs et qui n'ont pas été accédés depuis un mois
* Créez un fichier file.h qui contiendra tous les noms de fichier se terminant par .h qui se trouvent dans le répertoire /usr.
* Faites un touch sur tous les fichiers c qui se trouvent dans le répertoire /usr/src/packages
* Quelles sont les permissions par défaut quand vous créez un nouveau fichier et un nouveau répertoire ?
* Comment pouvez vous créer un nouveau fichier ou répertoire qui contient un espace dans le nom ? (Exemple : 'new dir')
* Quelle est la commande pour supprimer tous les fichiers de type char et block dans votre répertoire personnel ?
* Comment trouver la position du programme find ?
* Supprimez tous les fichiers dans /tmp qui ne sont dont root n’est pas le propriétaire et qui n'ont pas été accédés depuis une semaine.
| Gérer des flux de textes en utilisant les filtres | Utiliser les streams, pipes, et redirections |