Commandes du système de fichiers UNIX

Un bref guide des commandes du système de fichiers UNIX

J'ai écrit ce manuel dans le but de faciliter l'apprentissage, la mémorisation et la référence des principaux utilitaires du système de fichiers UNIX. macOS et GNU / Linux sont tous deux des systèmes UNIX, en termes pratiques. macOS est un UNIX certifié, basé sur BSD UNIX, tandis que GNU / Linux est de type UNIX ou un dérivé d'UNIX.

Après une introduction au système de fichiers et à son fonctionnement, je couvrirai les détails des commandes suivantes:

Travailler avec des dossiers et des fichiers

  • mkdir
  • cd
  • pwd
  • rmdir
  • ls
  • touch
  • mv
  • cp
  • ln

Autorisations

  • chmod
  • chown
  • chgrp

Contenu des fichiers

  • cat
  • less
  • find
  • cpio
  • dd
  • wc

Comment fonctionne le système de fichiers

Chaque système informatique moderne repose sur un système de fichiers pour stocker et récupérer des programmes. Tout ne peut pas être conservé en mémoire, qui est une ressource précieuse et limitée, et nous avons besoin d’un endroit sûr où stocker les données lorsque l’ordinateur redémarre ou s’éteint. La mémoire est complètement effacée à chaque redémarrage de l'ordinateur, tandis que la structure du disque est persistante.

Dans ce guide, j'examine en particulier le système de fichiers UNIX, qui peut être trouvé sur les machines macOS et GNU / Linux. Le système de fichiers Windows est différent, bien que Windows 10 avec leSous-système Windows pour Linuxinstallé vous permet d'utiliser les mêmes utilitaires que je décris ici.

Un système de fichiers démarre à partir de/. C'est le nœud racine qui héberge les répertoires de premier niveau.

Les répertoires habituels que vous trouverez dans un système UNIX sont

  • /bincontient les principales commandes système
  • /etccontient la configuration du système
  • /devcontient les périphériques système
  • /usrcontient les fichiers utilisateurs
  • /tmpcontient les fichiers temporaires

… Il y en a plus, mais vous voyez l'idée.

Le nombre dépend du type de système utilisé. Linux a normalisé les dossiers en utilisant son effort Linux Standard Base, et vous avez généralement:

  • /binles principales commandes du système
  • /bootles fichiers utilisés pour démarrer la machine (n'existant pas sous macOS)
  • /devpériphériques système
  • /etcfichiers de configuration système
  • /etc/optfichiers de configuration des programmes utilisateur
  • /homeles répertoires personnels des utilisateurs (/ Users sous macOS)
  • /libles bibliothèques système (non existantes sur macOS)
  • /mntsystèmes de fichiers montés
  • /optprogrammes utilisateurs
  • /procutilisateur par noyau et processus (non existant sur macOS)
  • /rootle dossier d'accueil de l'utilisateur root (non existant sur macOS)
  • /run(n'existe pas sur macOS)
  • /sbinutilisateur de binaires système pour démarrer le système
  • /tmpfichiers temporaires
  • /usrcontient des logiciels utilisateur, des bibliothèques et des outils
  • /usr/binbinaires utilisateur
  • /usr/includefichiers d'en-tête utilisateur
  • /usr/libbibliothèques utilisateur
  • /usr/localutilisé par les logiciels utilisateur pour stocker les installations, comme Homebrew sur macOS
  • /usr/sbinbinaires système
  • /usr/sharecontient des données indépendantes de l'architecture. Il peut contenir beaucoup de choses diverses, y compris de la documentation et des pages de manuel
  • /usr/srccontient le code source des packages installés (non existant dans macOS)
  • /varcontient des fichiers temporaires, des journaux et plus

macOS a différents dossiers, y compris

  • /Applicationsstocke les applications des utilisateurs
  • /Librarycontient la bibliothèque (paramètres et ressources) utilisée globalement par les utilisateurs du système
  • /Systemcontient les fichiers système
  • /privatecontient les fichiers système, les journaux et plus encore

Chaque dossier contient des fichiers et des répertoires, qui à leur tour peuvent contenir d'autres fichiers et répertoires, etc.

Tous les fichiers et dossiers ont un nom.

Qu'est-ce qui fait un nom valide? Il peut comporter de 1 à 255 caractères et doit être composé de n'importe quel caractère alphanumérique (a-z/A-Z/0-9), le caractère de soulignement (_), point (.) et virgule (,) personnages.

Vous pouvez également utiliser de l'espace, bien que généralement déconseillé car l'espace doit être échappé avec une barre oblique inverse chaque fois que vous devez référencer le fichier / dossier.

Selon le système, le système de fichiers peut être sensible à la casse. Sur macOS, le système de fichiers estne passensible à la casse par défaut, vous ne pouvez donc pas avoir de fichier / dossier nommétestet un autre appeléTest. Ce sont les mêmes choses.

Je vais maintenant vous présenter les différentes commandes utilitaires. Ceux-ci sont exécutés dans le contexte d'un shell, comme Bash, Fish ou Zsh. Lorsque vous démarrez un shell, vous serez dans votre répertoire personnel. Dans macOS, cela se trouve dans le/Users/<yourname>/chemin.

Les commandes ne changent pas si vous changez le shell que vous utilisez, car ce sont les commandes fondamentales de base d'UNIX. Vous utiliserez probablement ces commandes pendant de nombreuses décennies à moins qu'une révolution dans le monde informatique ne se produise (et elles se produisent, mais ces choses côté serveur se déplacent généralement lentement). Pour vous donner un peu de recul, lemkdirLa commande que vous verrez maintenant a été introduite dans UNIX AT&T Version 1, au début des années 80.

Travailler avec des dossiers et des fichiers

mkdir

Vous créez des dossiers à l'aide dumkdircommander:

mkdir fruits

Vous pouvez créer plusieurs dossiers avec une seule commande:

mkdir dogs cars

Vous pouvez également créer plusieurs dossiers imbriqués en ajoutant le-poption:

mkdir -p fruits/apples

Les options des commandes UNIX prennent généralement cette forme. Vous les ajoutez juste après le nom de la commande et ils modifient le comportement de la commande. Vous pouvez souvent aussi combiner plusieurs options.

Vous pouvez trouver les options prises en charge par une commande en tapantman <commandname>. Essayez maintenant avecman mkdirpar exemple (appuyez sur leqpour accéder à la page de manuel). Les pages de manuel sont une aide intégrée incroyable pour UNIX.

cd

Une fois que vous avez créé un dossier, vous pouvez y accéder en utilisant lecdcommander.cdmoyenscaccrocherirectory. Vous l'appelez en spécifiant un dossier dans lequel vous déplacer. Vous pouvez spécifier un nom de dossier ou un chemin complet.

Exemple:

mkdir fruits
cd fruits

Maintenant vous êtes dans lefruitsdossier.

Vous pouvez utiliser le..chemin spécial pour indiquer le dossier parent:

cd .. #back to the home folder

Le caractère # indique le début du commentaire, qui dure toute la ligne une fois qu'il a été trouvé.

Vous pouvez l'utiliser pour former un chemin:

mkdir fruits
mkdir cars
cd fruits
cd ../cars

Il existe un autre indicateur de chemin spécial qui est., et indique leactueldossier.

Vous pouvez également utiliser des chemins absolus, qui partent du dossier racine/:

cd /etc

pwd

Chaque fois que vous vous sentez perdu dans le système de fichiers, appelez lepwdcommande pour savoir où vous êtes:

pwd

Il imprimera le chemin du dossier actuel.

rmdir

Tout comme vous pouvez créer un dossier en utilisantmkdir, vous pouvez supprimer un dossier en utilisantrmdir:

mkdir fruits
rmdir fruits

Vous pouvez également supprimer plusieurs dossiers à la fois:

mkdir fruits cars
rmdir fruits cars

Le dossier que vous supprimez doit être vide.

Pour supprimer des dossiers contenant des fichiers, nous utiliserons le plus génériquermcommande qui supprime les fichiers et les dossiers, en utilisant la-rfoptions:

rm -rf fruits cars

Soyez prudent car cette commande ne demande pas de confirmation et elle supprimera immédiatement tout ce que vous lui demandez de supprimer.

Il n'y a paspoubellelors de la suppression de fichiers de la ligne de commande et la récupération de fichiers perdus peut être difficile.

ls

Dans un dossier, vous pouvez lister tous les fichiers que le dossier contient en utilisant lelscommander:

ls

Si vous ajoutez un nom ou un chemin de dossier, il imprimera le contenu de ce dossier:

ls /bin

lsaccepte beaucoup d'options. L'une de mes combinaisons d'options préférées est-al. Essayez-le:

ls -al /bin

par rapport à la plainels, cela renvoie beaucoup plus d'informations.

Vous avez, de gauche à droite:

  • les autorisations de fichier (et si votre système prend en charge les ACL, vous obtenez également un indicateur ACL)
  • le nombre de liens vers ce fichier
  • le propriétaire du fichier
  • le groupe du fichier
  • la taille du fichier en octets
  • le fichier datetime modifié
  • le nom du fichier

Cet ensemble de données est généré par leloption. Leaà la place, l'option montre également les fichiers cachés.

Les fichiers cachés sont des fichiers qui commencent par un point (.).

touch

Vous pouvez créer un fichier vide en utilisant letouchcommander:

touch apple

Si le fichier existe déjà, il ouvre le fichier en mode écriture et l'horodatage du fichier est mis à jour.

mv

Une fois que vous avez un fichier, vous pouvez le déplacer en utilisant lemvcommander. Vous spécifiez le chemin actuel du fichier et son nouveau chemin:

touch test
mv pear new_pear

Lepearle fichier est maintenant déplacé versnew_pear. C'est comme ça que tuRenommerfichiers et dossiers.

Si le dernier paramètre est un dossier, le fichier situé au premier chemin de paramètre va être déplacé dans ce dossier. Dans ce cas, vous pouvez spécifier une liste de fichiers et ils seront tous déplacés dans le chemin du dossier identifié par le dernier paramètre:

touch pear
touch apple
mkdir fruits
mv pear apple fruits #pear and apple moved to the fruits folder

cp

Vous pouvez copier un fichier à l'aide ducpcommander:

touch test
cp apple another_apple

Pour copier des dossiers, vous devez ajouter le-roption pour copier récursivement tout le contenu du dossier:

mkdir fruits
cp -r fruits cars

ln

Introduisons maintenant le concept de liens. Un lien est un fichier qui pointe vers un autre fichier. Nous en avons dans tous les principaux systèmes d'exploitation.

Nous pouvons créer deux types de liens: les liens physiques et les liens symboliques (souples). Nous ne pouvons pas créer de lien physique vers un répertoire, mais nous pouvons en créer un symbolique. Pour cette raison, des liens symboliques (également appelésliens symboliques) sont beaucoup plus courants.

Nous créons un lien symbolique en utilisant cette syntaxe:ln -s original linkname. Exemple:

mkdir fruits
ln -s fruits newfruits

Remarquez comment j'ai utilisé lellcommander. Ce n'est pas une commande standard, mais unaliaspourls -al. Dans un shell, vous pouvez définir des alias qui sont des raccourcis vers des combinaisons de commandes et d'arguments courantes.

Autorisations

J'ai mentionné brièvement les autorisations auparavant, lors de l'introduction duls -alcommander.

La chaîne étrange que vous voyez sur chaque ligne de fichier, commedrwxr-xr-x, définit les autorisations du fichier ou du dossier.

Disséquons-le.

La première lettre indique le type de fichier:

  • -signifie que c'est un fichier normal
  • dsignifie que c'est un répertoire
  • lsignifie que c'est un lien

Ensuite, vous avez 3 ensembles de valeurs:

  • Le premier ensemble représente les autorisations dupropriétairedu dossier
  • Le deuxième ensemble représente les autorisations des membres dugrouperle fichier est associé à
  • Le troisième ensemble représente les autorisations dutous les autres

Ces ensembles sont composés de 3 valeurs.rwxsignifie que spécifiquepersonnagedispose d'un accès en lecture, en écriture et en exécution. Tout ce qui est supprimé est échangé avec un-, qui vous permet de former diverses combinaisons de valeurs et d'autorisations relatives:rw-,r--,r-x, etc.

Vous pouvez modifier les autorisations accordées à un fichier à l'aide de lachmodcommander.

chmodpeut être utilisé de 2 manières. Le premier utilise des arguments symboliques, le second utilise des arguments numériques. Commençons par les symboles, ce qui est plus intuitif.

Vous tapezchmodsuivi d'un espace et d'une lettre:

  • asignifietout
  • usignifieutilisateur
  • gsignifiegrouper
  • osignifieautres

Ensuite, vous tapez soit+ou-pour ajouter une autorisation ou pour la supprimer. Ensuite, vous entrez un ou plusieurs symboles d'autorisations (r,w,x).

Tous suivis du nom du fichier ou du dossier.

Voici quelques exemples:

chmod a+r filename #everyone can now read
chmod a+rw filename #everyone can now read and write
chmod o-rwx filename #others (not the owner, not in the same group of the file) cannot read, write or execute the file

Vous pouvez appliquer les mêmes autorisations à plusieurs personnes en ajoutant plusieurs lettres avant le+/-:

chmod og-r filename #other and group can't read any more

Si vous modifiez un dossier, vous pouvez appliquer les autorisations à chaque fichier contenu dans ce dossier à l'aide du-r(récursif) flag.

Les arguments numériques sont plus rapides, mais je les trouve difficiles à retenir lorsque vous ne les utilisez pas au jour le jour. Vous utilisez un chiffre qui représente les autorisations du personnage. Cette valeur numérique peut être un maximum de 7, et elle est calculée de cette manière:

  • 1si a l'autorisation d'exécution
  • 2si a l'autorisation d'écriture
  • 4si a l'autorisation de lecture

Cela nous donne 4 combinaisons:

  • 0pas de permissions
  • 1peut exécuter
  • 2peut écrire
  • 3peut écrire, exécuter
  • 4Peux lire
  • 5peut lire, exécuter
  • 6peut lire, écrire
  • 7peut lire, écrire et exécuter

Nous les utilisons par paires de 3, pour définir les autorisations de tous les 3 groupes au total:

chmod 777 filename
chmod 755 filename
chmod 644 filename

Propriétaire et groupe

Vous pouvez changer le propriétaire d'un fichier à l'aide de lachowncommander:

chown <username> <filename>

Vous pouvez modifier le groupe d'un fichier à l'aide de lachgrpcommander:

chgrp <group> <filename>

Gérer le contenu des fichiers

less

Lelessla commande est celle que j'utilise beaucoup. Il vous montre le contenu stocké dans un fichier, dans une interface utilisateur agréable et interactive.

Usage:less <filename>.

Une fois que vous êtes à l'intérieur d'unlesssession, vous pouvez quitter en appuyant surq.

Vous pouvez parcourir le contenu du fichier à l'aide duupetdowntouches, ou en utilisant lesspace baretbpour naviguer page par page. Vous pouvez également sauter à la fin du fichier en appuyant surGet revenez au début en appuyant surg.

Vous pouvez rechercher le contenu à l'intérieur du fichier en appuyant sur/et en tapant un mot à rechercher. Cette rechercheeffronté. Vous pouvez effectuer une recherche en arrière à l'aide du?symbole et en tapant un mot.

Cette commande visualise simplement le contenu du fichier. Vous pouvez ouvrir directement un éditeur en appuyant surv. Il utilisera l'éditeur système, qui dans la plupart des cas estvim.

En appuyant sur leFclé entremode de suivi, oumode montre. Lorsque le fichier est modifié par quelqu'un d'autre, comme à partir d'un autre programme, vous pouvez voir les modificationshabitent. Par défaut, cela ne se produit pas et vous ne voyez que la version du fichier au moment où vous l'avez ouvert. Vous devez appuyer surctrl-Cpour quitter ce mode. Dans ce cas, le comportement est similaire à l'exécution dutail -f <filename>commander.

Vous pouvez ouvrir plusieurs fichiers et les parcourir en utilisant:n(pour aller au fichier suivant) et:p(pour aller au précédent).

tail

Je viens de mentionnertaildans la commande précédente, profitons donc de cette opportunité pour expliquer ce qu'elle fait.

Son meilleur cas d'utilisation à mon avis est lorsqu'il est appelé avec le-foption. Il ouvre le fichier à la fin et surveille les modifications apportées au fichier. Chaque fois qu'il y a un nouveau contenu dans le fichier, il est imprimé dans la fenêtre. C'est idéal pour regarder les fichiers journaux, par exemple:

tail -f /var/log/system.log

Pour quitter, appuyez surctrl-C.

Vous pouvez imprimer les 10 dernières lignes d'un fichier:

tail -n 10 <filename>

Vous pouvez imprimer l'intégralité du contenu du fichier à partir d'une ligne spécifique en utilisant+avant le numéro de ligne:

tail -n +10 <filename>

tailpeut faire beaucoup plus et comme toujours, mon conseil est de vérifierman tail.

cat

Semblable àtaild'une certaine manière, nous avonscat. Saufcatpeut également ajouter du contenu à un fichier, ce qui le rend super puissant.

Dans son utilisation la plus simple,catimprime le contenu d'un fichier sur la sortie standard:

cat file

Vous pouvez imprimer le contenu de plusieurs fichiers:

cat file1 file2

et en utilisant l'opérateur de redirection de sortie>vous pouvez concaténer le contenu de plusieurs fichiers dans un nouveau fichier:

cat file1 file2 > file3

Utilisant>>vous pouvez ajouter le contenu de plusieurs fichiers dans un nouveau fichier, en le créant s'il n'existe pas:

cat file1 file2 >> file3

Lorsque vous regardez des fichiers de code source, il est bon de voir les numéros de ligne, et vous pouvez avoircatimprimez-les à l'aide du-noption:

cat -n file1

Vous ne pouvez ajouter un nombre aux lignes non vides qu'en utilisant-b, ou vous pouvez également supprimer toutes les lignes vides multiples en utilisant-s.

catest souvent utilisé en combinaison avec l'opérateur de canalisation|pour alimenter le contenu d'un fichier en entrée d'une autre commande:cat file1 | anothercommand.

wc

wcmoyensnombre de mots. Voici l'utilisation la plus courante:

  • wc -l file1compter les lignes
  • wc -w file1compter les mots
  • wc -c file1compter les caractères
  • wc -m file1compter les caractères avec prise en charge multi-octets (c'est-à-dire que les emojis comptent pour 1, pas comme plusieurs caractères)

Tu peux courirwcfournir plusieurs fichiers, auquel cas il effectuera les calculs sur chaque fichier séparément, puis imprimera un résumé:

find

LefindLa commande peut être utilisée pour trouver des fichiers ou des dossiers correspondant à un modèle de recherche particulier. Il recherche récursivement.

Apprenons-le par l'exemple.

Trouvez tous les fichiers sous l'arborescence actuelle qui ont.jsextension et affichez le chemin relatif de chaque fichier correspondant:

find . -name '*.js'

Il est important d'utiliser des guillemets autour des caractères spéciaux comme*pour éviter que le shell ne les interprète.

Trouvez les répertoires sous l'arborescence actuelle correspondant au nom «src»:

find . -type d -name src

Utilisation-type fpour rechercher uniquement des fichiers, ou-type lpour rechercher uniquement des liens symboliques.

-nameest sensible à la casse. utilisation-inamepour effectuer une recherche insensible à la casse.

Vous pouvez rechercher sous plusieurs arbres racines:

find folder1 folder2 -name filename.txt

Recherchez les répertoires sous l'arborescence actuelle correspondant au nom «node_modules» ou «public»:

find . -type d -name node_modules -or -name public

Vous pouvez également exclure un chemin en utilisant-not -path:

find . -type d -name '*.md' -not -path 'node_modules/*'

Vous pouvez rechercher des fichiers contenant plus de 100 caractères (octets):

find . -type f -size +100c

Rechercher des fichiers de plus de 100 Ko mais inférieurs à 1 Mo:

find . -type f -size +100k -size -1M

Fichiers de recherche modifiés il y a plus de 3 jours

find . -type f -mtime +3

Rechercher des fichiers modifiés au cours des dernières 24 heures

find . -type f -mtime -1

Vous pouvez supprimer tous les fichiers correspondant à une recherche en ajoutant le-deleteoption. Cela supprime tous les fichiers modifiés au cours des dernières 24 heures:

find . -type f -mtime -1 -delete

Vous pouvez exécuter une commande sur chaque résultat de la recherche. Dans cet exemple, nous exécutonscatpour imprimer le contenu du fichier:

find . -type f -exec cat {} \;

remarquez la fin\;.{}est rempli avec le nom du fichier au moment de l'exécution.

Téléchargez mon gratuitManuel des commandes Linux


Plus de tutoriels cli: