Opérations sur les fichiers
1. Notion d’inode
- Un inode est un numéro unique qui référence un ou plusieurs fichiers dans le système de fichier.
- Ce numéro est l’élément de localisation du fichier sur le système de fichiers.
- L’inode représente la réalité physique du fichier auquel un ou des noms (des emplacements sur le système de fichiers) correspondent.
- http://fr.wikipedia.org/wiki/N%C5%93ud_d%27index
2. Commande ls
La commande ls liste les fichiers (par défaut le répertoire courant)
$ ls -lah /etc/
total 1,4M drwxr-xr-x. 122 root root 8,0K 11 jan 19:00 .
drwxr-xr-x. 18 root root 4,0K 11 jan 19:00 ..
-rw-r--r--. 1 root root 16 8 déc 20:44 adjtime
-rw-r--r--. 1 root root 1,5K 7 jun 2013 aliases
-rw-r--r--. 1 root root 12K 8 déc 20:48 aliases.db
drwxr-xr-x. 2 root root 4,0K 8 déc 21:04 alternatives
Elle donne des attributs POSIX :
- type de fichier :
-
fichier,d
répertoire,l
lien symbolique - droits :
-
,r
,w
etx
, propriétaire, groupe et autres. - nombre liens physique
- propriétaire, ici root
- groupe propriétaire, ici root
- taille du fichier, ici en octets
- date de modification,
- nom du fichier.
La commande ls -l
affiche par défaut une liste triée par ordre alphabétique. Les commandes dir
et vdir
sont des variantes de ls
.
Options de la commande ls
:
-r
: tri inversé-t
: tri sur la date de modification (du plus récent au plus ancien)-u
: tri sur la date d’accès avec l’option-lt
-c
: tri sur la date de changement de statuts des fichiers avec l’option-lt
-l
: présentation tabulaire détaillée-1
: présentation en liste continue-h
: avec l’option-l
affiche les valeurs de poids de fichier avec un multiplicateur (K, M, G, …)-i
: affiche le numéro d’inode-Z
: Affiche le contexte SeLinux
On trouvera encore plus d’options et détails dans la page man
: man ls
.
3. Création d’un répertoire
Un répertoire ou un dossier est une liste de descriptions de fichiers. Du point de vue du système de fichiers, il est traité comme un fichier dont le contenu est la liste des fichiers référencés. Un répertoire a donc les mêmes types de propriétés qu’un fichier comme le nom, la taille, la date, les droits d’accès et les divers autres attributs. (Wikipedia)
On peut définir les droits avec l’option -m
de mkdir
. Une autre option couramment utilisée et utile de mkdir
est -p
qui crée les sous-répertoires quand c’est nécessaire.
Par exemple :
$ mkdir labs/ex1/script1 mkdir: impossible de créer le répertoire `labs/ex1/script1`: Aucun fichier ou répertoire de ce type
$ mkdir -p labs/ex1/script1
$ tree labs labs
└── ex1
└── script1
2 directories, 0 files
4. Suppression des répertoires
On utilise soit rmdir
soit rm -r
pour supprimer les répertoires. En tant que root, vous devrez peut-être à spécifier l’option -f
pour forcer la suppression de tous les fichiers.
rmdir
supprime un répertoire vide alors que rm -r
supprime un répertoire et son contenu.
Cet exemple illustre la suppression de tous les fichiers et sous-répertoires et laisse le répertoire ex1
vide.
$ rm -rf labs/ex1/*
$ tree labs labs
└── ex1
1 directory, 0 files
Cet exemple illustre la suppression de tous les fichiers et sous-répertoires y compris ex1
$ rm -rf labs/ex1
$ tree labs
labs
supprime tous les fichiers et sous-répertoires y compris ex1
5. Commande touch
touch
est une commande qui permet de créer et de modifier les fichiers.
Syntaxe :
touch {options} fichier(s)
- Le fichier est créé s’il n’existait pas. Vous pouvez également changer la date d’accès avec l’option
-a
, la date de modification avec-m
; l’option-r
copie les attributs de date d’un autre fichier.
Exemples :
- Créer deux nouveaux fichiers
fichier1.txt
etfichier2.txt
:
$ touch labs/fichier1.txt labs/fichier2.txt
$ ls -i labs
69308775 fichier1.txt 69308776 fichier2.txt
- Copier les attributs de date de
/etc/hosts
surfichier2.txt
:
$ ls -l /etc/hosts
-rw-r--r--. 1 root root 83 10 déc 12:11 /etc/hosts
$ touch labs/fichier2.txt -r /etc/hosts
$ ls -l labs/fichier2.txt
-rw-rw-r--. 1 francois francois 0 10 déc 12:11 labs/fichier2.txt
6. Commande cp
Syntaxe :
cp [options] fichier1 fichier2
cp [options] fichiers répertoire
Il est important de noter que cp fichier1 fichier2
crée une nouvelle copie de fichier1 et laisse fichier1 inchangé.
Illustration : fichier1.txt
avec l’inode 69308775 est copié sur fichier3.txt
, en dupliquant les données sur un nouveau bloc et en créant une nouvelle inode 69308777 pour fichier3.txt.
$ cp labs/fichier1.txt labs/fichier3.txt
$ ls -i labs 69308775 fichier1.txt
69308776 fichier2.txt 69308777 fichier3.txt
On ira lire attentivement la page man de la commande cp
:
man cp
7. Copie récursive
On peut également copier plusieurs fichiers dans un répertoire, à partir d’une liste ou en utilisant des caractères génériques.
Exemples :
- Pour copier tout le contenu de
labs
dans un dossierbak
:
$ mkdir labs/rep1
$ cp -r labs bak
$ tree bak labs
bak
├── fichier1.txt
├── fichier2.txt
├── fichier3.txt
└── rep1 labs
├── fichier1.txt
├── fichier2.txt
├── fichier3.txt
└── rep1
2 directories, 6 files
$ ls bak fichier1.txt fichier2.txt fichier3.txt rep1
Notons que le dossier de destination bak
n’existait pas et a été créé.
Si on recommence l’opération alors que la destination existe déjà c’est le dossier source lui-même qui est copié.
$ cp -r labs bak
$ ls bak
fichier1.txt fichier2.txt fichier3.txt labs rep1
$ tree bak
bak
├── fichier1.txt
├── fichier2.txt
├── fichier3.txt
├── labs
│ ├── fichier1.txt
│ ├── fichier2.txt
│ ├── fichier3.txt
│ └── rep1
└── rep1
3 directories, 6 files
8. Commande mv
Syntaxe :
mv [options] anciennom nouveaunom
mv [options] source destination
mv [options] source répertoire
La commande mv
peut à la fois déplacer et renommer les fichiers et les répertoires.
- Si
anciennom
est un fichier etnouveaunom
un répertoire, le fichieranciennom
est déplacé dans ce répertoire. - Si la source et la destination sont sur le même système de fichiers, alors le fichier n’est pas copié, mais les informations de l’inode sont mises à jour pour tenir compte du nouveau chemin.
- Les options les plus courantes de
mv
sont-f
pour forcer l’écrasement et-i
pour demander confirmation à l’utilisateur.
9. Renommer et déplacer
- Renommer le répertoire
bak
enbak2
$ mv bak bak2
- Déplacer le
bak2
dans le répertoirelabs
$ mv bak2 labs
- renommer le répertoire
bak2
enbak
$ mv labs/bak2 labs/bak
10. Liens physiques
- Un lien physique est un nom supplémentaire pour un même inode. Ainsi, le nombre de références s’accroît de un à chaque nouveau lien physique créé.
- Dans la liste suivante, notez que le nombre de références est de 2 et que les deux fichiers ont la même taille (ainsi que la même valeur inode, ce que vous pouvez vérifier avec
ls -i
). Dans les faits, ces deux fichiers sont parfaitement identiques. - Les liens physiques ne peuvent être créés que sur le même système de fichier, une même partition.
$ ln labs/fichier1.txt labs/fichier5.txt
$ ls -li labs
total 0
69308779 -rw-rw-r--. 2 francois francois 0 21 fév 07:04 fichier1.txt 69308780 -rw-rw-r--. 1 francois francois 0 21 fév 07:04 fichier2.txt 69308781 -rw-rw-r--. 1 francois francois 0 21 fév 07:04 fichier3.txt 69308779 -rw-rw-r--. 2 francois francois 0 21 fév 07:04 fichier5.txt 3739518 drwxrwxr-x. 2 francois francois 6 21 fév 07:04 rep1
11. Liens symboliques
Un lien symbolique vers un fichier ou un répertoire crée un nouvel inode qui pointe vers le même bloc de données.
$ cd labs
$ ln -s fichier1.txt fichier4.txt
$ cd ..
$ ls -li labs
total 0
69308779 -rw-rw-r--. 2 francois francois 0 21 fév 07:04 fichier1.txt 69308780 -rw-rw-r--. 1 francois francois 0 21 fév 07:04 fichier2.txt 69308781 -rw-rw-r--. 1 francois francois 0 21 fév 07:04 fichier3.txt 69308774 lrwxrwxrwx. 1 francois francois 12 21 fév 07:21 fichier4.txt -> fichier1.txt
69308779 -rw-rw-r--. 2 francois francois 0 21 fév 07:04 fichier5.txt 3739518 drwxrwxr-x. 2 francois francois 6 21 fév 07:04 rep1
- Les liens symboliques peuvent pointer vers des fichiers ou répertoires présents sur un autre système de fichier.
$ echo $(date) > labs/fichier1.txt
$ cat labs/fichier4.txt
dim fév 21 07:22:01 CET 2017
12. Commande rm
La commande rm
permet de supprimer un fichier du système de fichiers. La commande rm
peut disposer d’alias selon les distributions. Enfin, cette commande est étudiée et améliorée dans la section Scripts Shell de l’ouvrage.
man rm
13. Copie par blocs
dd
est une commande unix permettant de copier un fichier (avec ou sans conversion au passage) notamment sur des périphériques blocs tel que des disques durs ou des lecteurs CD-ROM ou inversement.- Contrairement à
cp
, la commandedd
copie des portions de données brutes d’un périphérique. Par conséquent,dd
préserve le système de fichier sous-jacent.cp
se contente de traiter des données et les transfère d’un système de fichier à un autre.
14. Syntaxe de la commande dd
- La syntaxe de
dd
est différente des autres commandes unix traditionnelles.dd
utilise des options de la formeoption=valeur
au lieu des habituelles-o
valeur ou--option=valeur
. - Les principales options de dd sont les suivantes :
if=fichier_entree
(Input File) : lit ce fichier en entrée. Cela peut être un fichier régulier comme un périphérique de type bloc. Par défaut, c’est l’entrée standard qui est utilisée (par exemple le clavier).of=fichier_sortie
(Output File) : écrit dans ce fichier en sortie.bs=t_b
(Block Size) : copie les données par blocs det_b
octets.count=n_b
: ne copie quen_b
blocs.skip=n_e
: ignore lesn_e
premiers blocs du fichier d’entrée1 (Ne copie le fichier d’entrée qu’à partir du bloc de rangn_e+1
.)seek=n_s
: ignore lesn_s
premiers blocs du fichier de sortie1 (Ne commence à écrire dans le fichier de sortie qu’à partir du bloc de rangn_s+1
.)
15. Exemples dd
- Créer un fichier rempli de bits aléatoires de 1 Mo
dd if=/dev/urandom bs=1024 count=1000 of=fichier.bin
- Créer une clé bootable Centos 7 sur /dev/sdb
dd if=CentOS-7.0-1406-x86_64-DVD.iso of=/dev/sdb
- Créer une SD Card Raspberry Pi
dd bs=4M if=~/2012-12-16-wheezy-raspbian.img of=/dev/sdb
- Créer l’image d’un disque
dd if=/dev/sdb of=~/sdb.img
- Copier un disque sur l’autre
dd if=/dev/sdb of=/dev/sdc conv=noerror,sync
- Copier une partition
dd if=/dev/sdb1 of=~/sdb1.img
16. GNU Midnight Commander
- Utilitaire console graphique :
Sous Centos :
yum -y install mc
Sous Debian / Ubuntu :
apt-get -y install mc