Grimoire-
Command
.es

GNU+Linux command memo

Memo_1 : parcourir les dossiers et lister les fichiers

D’après l’édition 11 des travaux d’Alain Leaper, 2018-04-10
Licence GPL

1. pwd : affiche le chemin du répertoire courant depuis la racine

$ pwd
/home/<utilisateur>

Indique le répertoire courant dans l’arborescence des répertoires

2. ls : liste le contenu du répertoire courant

L’intruse de ce mémo, la seule commande gravitant autour des répertoires mais sans « d » (pour "directory") dans son nom.

$ ls

Liste le contenu (sous-répertoires et fichiers) du répertoire courant

Quelques options : ls -l, ls -a, ls -R

$ ls -l
-rw-r--r--  1 alain alain   18 jan 28 10:38 monFichier

Premier caractère (ici -) :

  • - : fichier ordinaire

  • d : répertoire (directory)

  • l : lien symbolique

  • b : périphérique en mode bloc (exemple un disque dur)

  • c : périphérique en mode caractère (exemple un port série)

Ensuite, par groupes de 3 caractères (pris dans cet ordre), indiquent les droits :

  • r : lecture (read)

  • w : écriture (write)

  • x : exécution du fichier (pour un répertoire, droit d’y accéder)

  • - indique l’absence de droit (mis à la place d’un de ces 3 caractères)

Ensuite : le nombre de liens, le nom du propriétaire, le nom du groupe principal, la taille en octets (bytes), la date de création ou modification (mois jour heure) si l’année n’est pas précisée, il s’agit de l’année courante, le nom du fichier.

Sortie console Légende

-

type

rw-

droits du propriétaire (user)

r--

droits du groupe (group)

r--

droits des autres (other)

1

nombre de liens en dur (links)

alain

nom du propriétaire

alain

nom du groupe

4096

taille (size)

18 jan 28 10:38

date de dernière modification

monFichier

nom du fichier

Un fichier peux être présent dans plusieurs répertoires différents à la fois, et/ou donc avoir plusieurs noms. Il a alors un nombre de liens égal à son nombre de noms.

pour les périphériques la taille est remplacée par les numéros Majeur, mineur
En résumé

Le fichier monfichier a été créé/modifié le 28 janvier de cette année à 10h38, sa taille est de 18 octets. Son propriétaire est alain comme son groupe, il possède 1 lien.

C’est un fichier ordinaire, son propriétaire a les droits en lecture, écriture, mais pas de le faire exécuter, son groupe a les droits en lecture seulement (pas en écriture, ni exécution) les autres ont les droits en lecture seulement (pas en écriture, ni exécution).

☙❦❧

$ ls -a (1)
.  ..  monFichier
1 liste tous les fichiers, y compris les fichiers cachés commençant par "." (point)
  • . : indique le répertoire courant

  • .. : indique le répertoire parent

$ ls -R (1)
 .:
 monFichier  sous_rep

 ./sous_rep:
 fic1
1 liste de manière récursive les sous-répertoires et leurs fichiers

Ici : le répertoire courant contient monfichier et sous_rep qui lui-même est un répertoire puisqu’il contient le fichier fic1.

Il est possible de combiner ces options (ordre indifférent) :

$ ls -aRl
.:
total 16
drwxr-xr-x  3 alain alain 4096 mai  8 17:52 .
drwxr-xr-x 20 alain alain 4096 mai  8 10:41 ..
-rw-r--r--  1 alain alain   18 jan 28 10:38 monFichier
drwxr-xr-x  2 alain alain 4096 mai  8 19:20 sous_rep

./sous_rep:
total 28
drwxr-xr-x 2 alain alain 4096 mai  8 19:20 .
drwxr-xr-x 3 alain alain 4096 mai  8 17:52 ..
-rw-r--r-- 1 alain alain   11 mai  8 17:23 fic1
-rw-r--r-- 1 alain alain   13 mai  8 18:29 fic2
-rw-r--r-- 1 alain alain   38 mai  8 18:36 fic3
-rw-r--r-- 1 alain alain 5314 mai  8 19:19 fic4

Total indique un nombre de bloc de 1024 octets (1ko), sachant qu’un fichier entre 1 et 4096 octets occupe 4096 octets, soit 4 blocs. De 4097 à 8192 ⇒ 8 blocs, etc.

Petit calcul, sous_rep contient :

  • 2 répertoire (. et ..) 2 x 4 = 8 blocs

  • 3 "petits" fichier : 3 x 4 = 12 blocs

  • 1 "gros" fichier (4096 < fic4 < 8192) = 8 blocs

total: 8 + 12 + 8 = 28 blocs

l’option -R permet de repérer les gros fichiers, mais pas les gros répertoires ! Le répertoire parent de sous_rep n’indique que 16 blocs. Pour repérer l’espace disque effectivement occupé par un répertoire, la commande 'du' ci-dessous est plus pratique.

Autres options :

$ ls -sSRh
  • s : indiquer la taille

  • S : classement par taille de fichiers (ordre croissant, si -rS ⇒ ordre décroissant)

  • R : récursif (idem ci-dessus)

  • h : donne les tailles en Ko, Mo, Go

  • n : remplace les noms propriétaires et groupes par leur numéros (uid, gid)

3. cd : changement de répertoire (change directory)

$ cd ..

On passe alors dans le répertoire parent du répertoire courant.

$ cd (1)
$ pwd
/home/alain
1 sans argument

Sans argument, passage dans le répertoire personnel du propriétaire du compte.

$ cd /etc/default
$ pwd
/etc/default

4. pushd, popd et dirs : pour les allers et retours

pushd permet d’enregistrer le chemin d’un dossier dans une mémoire dédiée à cet usage.

popd permet de retourner au dernier dossier enregistré (un peu comme cd sans argument qui ramène dans le dossier de l’utilisateur, ou cd - qui renvoie dans le dossier précédent).

De plus, la mémoire utilisée est en fait une pile, sur laquelle s’ajoutent les chemins de dossier au gré des appels à pushd. La commande affiche d’ailleurs l’état de cette pile à chaque appel, et c’est également tout ce que fait la commande dirs.

$ pwd
/usr/share
$ pushd /tmp
/tmp /usr/share
$ pwd
/tmp
$ popd
/usr/share
$ pwd
/usr/share
Appelé sans argument, pushd déplace l’utilisateur dans le dossier qui se situe au sommet de la pile de dossiers, et ajoute le chemin qui était courant au moment de l’appel de la fonction au sommet de la pile. Ainsi, Appeler pushd sans arguments plusieurs fois de suite permet de basculer entre deux dossiers.

5. CDPATH : pour les allés directs

La variable d’environnement CDPATH permet d’avoir une liste de dossiers accessibles en permanence, sans avoir à taper le chemin complet (absolu ou relatif).

Dans cet exemple le dossier ~/projets contient les dossier boulot et asso :

$ mkdir cul-de-sac && cd cul-de-sac (1)
$ cd boulot (2)
cd: aucun fichier ou dossier de ce type: boulot
$ export CDPATH=$CDPATH:~/boulot:~/asso (3)
$ cd April (4)
~/asso/April
$ pwd
~/asso/April (5)
1 Ici on se place dans un nouveau dossier vide, ne contenant donc aucun sous dossiers
2 La commande échoue
3 Ici, on exporte, du terminal courant, la variable CDPATH vers les autres terminaux (présents et à venir). De plus, la variable est assignée à sa précédente valeur ($CDPATH) plus une liste de chemins séparés par des « : ». Deux dossiers ont donc été ajoutés à la liste courante.
4 On peut maintenant atteindre les sous-dossiers de ~/asso depuis n’importe où.
5 pwd confirme que nous nous sommes déplacés dans le dossier voulu.

6. file : renvoie la nature d’un fichier

$ file /bin/cat
/bin/cat: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, stripped

Donc un fichier binaire, inutile d’éditer un tel fichier avec un éditeur de texte !

$ file /var
/var: directory
$ file /etc/hosts
/etc/hosts: UTF-8 Unicode English text

7. df : renvoie l’occupation des partitions

$ df

La réponse dépend des choix faits à l’installation…

Quelques options :

  • -h : donne les tailles en Ko, Mo, Go

  • -T : donne les types des partitions

8. du : renvoie l’occupation du répertoire spécifié et de ses sous-répertoires

$ du -ch /tmp
4,0K	/tmp/.font-unix
4,0K	/tmp/ssh-73OnzW2HKqXX
4,0K	/tmp/.ICE-unix
4,0K	/tmp/systemd-private-b3aa6dce2e844352bed9c2217f80e08a-rtkit-daemon.service-VUtSSk
4,0K	/tmp/pip-gdb4_rzd-unpack
4,0K	/tmp/vFKyLyX
24K	/tmp
24K	total
$ du -ch (1)
1 sans argument, implique le répertoire courant

Quelques options :

  • -h : donne les tailles en Ko, Mo, Go

  • -c : totalise l’espace occupé