Selon le mode de fonctionnement des systèmes de fichiers, un répertoire n'est pas un dossier contenant des fichiers, mais plutôt un ensemble de fichiers. qui contient des pointeurs d'inodes aux fichiers "enfants" qui lui sont connectés. En d'autres termes, du point de vue du système de fichiers, un fichier est un fichier, mais un répertoire n'est qu'un fichier contenant une liste de fichiers connectés.
Donc, du point de vue de la ligne de commande, en faisant ceci :
$ cp dir1 copyDir1
Il s'agirait en fait de copier le fichier nommé, dir1
dans un nouveau fichier nommé copyDir1
. Et en ce qui concerne le système de fichiers, dir1
n'est de toute façon qu'un fichier ; le fait qu'il s'agisse d'un "répertoire" ne sera apparent que lorsque le système de fichiers vérifiera effectivement dir1
pour voir ce qu'est réellement ce tas de morceaux.
En -r
indique au système de fichiers de parcourir récursivement l'arborescence des fichiers/répertoires et de copier tout le contenu qui pourrait être un "enfant" de ce fichier à un nouvel endroit.
Quant à savoir pourquoi cela peut sembler superflu ou redondant, il s'agit en fait de méthodes historiques de traitement des systèmes de fichiers. Il s'agit également de créer un système qui soit à l'abri de tous les types d'erreurs liées à l'utilisateur, qu'elles soient accidentelles ou intentionnelles.
En d'autres termes, disons que vous avez une ~/bin
dans votre répertoire personnel que vous souhaitez copier, mais que vous avez accidentellement omis le champ ~
-Parce que vous êtes un être humain et que vous faites des erreurs, alors c'est juste /bin
comme ceci :
cp /bin/ ~/copy_of_bin
Avec le "filet de sécurité" de /bin
étant un répertoire, combiné à la nécessité d'un -r
vous éviterez de copier accidentellement la racine binaire complète du système sur lequel vous vous trouvez dans votre répertoire personnel. Si ce filet de sécurité n'existait pas, un désastre mineur, voire majeur, se produirait.
La logique est la suivante : à l'époque pré-GUI (interfaces utilisateur graphiques), des conventions logiques/comportementales doivent être établies afin d'éviter que les utilisateurs ne créent des incidents qui peuvent potentiellement tuer un système. Et en utilisant l -r
est désormais l'un d'entre eux.
Si cela semble superflu, il suffit de regarder le système d'interface graphique moderne que l'on peut placer au-dessus des systèmes de fichiers Linux. Une interface graphique répond aux problèmes de base de l'utilisateur en lui permettant de glisser-déposer des fichiers et des répertoires en toute simplicité.
Mais dans le cas du domaine des interfaces textuelles, une grande partie de l'"expérience utilisateur" dans ce monde n'est en fait que des obstacles logiques et hérétiques qui aident l'utilisateur à garder le contrôle afin d'éviter un désastre potentiel.
De même, c'est la raison pour laquelle les systèmes de fichiers Linux/Unix n'ont pas de 777
les autorisations et sudo
droits définis par défaut et comment les administrateurs de systèmes réels font la grimace lorsqu'un utilisateur définit des droits d'accès à l'information. 777
ou accorde à chacun sudo
droits. Il s'agit là de mesures de base visant à garantir la stabilité du système et à le rendre aussi "à l'épreuve des utilisateurs" que possible ; toute personne s'empressant de court-circuiter ces conventions causera très probablement des dommages à son système sans même le savoir.
INFORMATIONS COMPLÉMENTAIRES : Une autre réponse ici sur le site Unix Stack Exchange explique bien pourquoi une copie non récursive d'un répertoire est problématique ; l'accent est mis par moi.
Eh bien, sans le drapeau -R, il est seulement possible de copier f il est plutôt inhabituel que quelqu'un veuille copier de manière non récursive un répertoire : Une copie non récursive aboutirait simplement à un deuxième n le répertoire, pointant directement vers la même structure de répertoire. Parce que c'est rarement ce que les gens veulent, et qu'il existe en fait un programme séparé qui fait cela (ln), une copie non récursive de n'est pas autorisée.
Ainsi, si un répertoire n'est en fait qu'un fichier contenant des éléments d'inode, la réalisation d'une copie directe de ce fichier serait l'équivalent du fonctionnement d'un lien en dur. Ce qui n'est pas ce que l'on souhaite.