De la manière dont fonctionnent les systèmes de fichiers, un répertoire n'est pas réellement un dossier contenant des fichiers, mais un répertoire est un fichier contenant des pointeurs inodes vers des fichiers «enfants» qui y sont connectés. Cela signifie que, du point de vue du système de fichiers, un fichier est un fichier, mais un répertoire est simplement un fichier contenant une liste de fichiers connectés.
Donc, du point de vue de la ligne de commande, ceci:
$ cp dir1 copyDir1
Cela signifierait essentiellement copier le fichier nommé dir1
dans un nouveau fichier nommé copyDir1
. Et en ce qui concerne le système de fichiers, ce dir1
n’est de toute façon qu’un fichier; le fait qu'il s'agisse d'un «répertoire» n'apparaîtra que lorsque le système de fichiers vérifiera réellement dir1
ce qu'est réellement cette pile de bits.
L’ -r
indicateur indique au système de fichiers de dérouler de manière récursive l’arborescence de fichiers / répertoires et de copier tout contenu pouvant constituer un «enfant» de ce fichier dans un nouvel emplacement.
Maintenant, pour ce qui est de savoir pourquoi cela peut sembler superflu ou redondant, cela revient vraiment aux méthodes historiques de gestion des systèmes de fichiers. En plus de créer un système sûr de tous les types d'erreurs liées à l'utilisateur; accidentelle et intentionnelle.
Cela veut dire, disons que vous avez un ~/bin
fichier dans votre répertoire personnel que vous voulez copier mais que vous avez accidentellement laissé de côté ~
- parce que vous êtes un humain et que vous faites des erreurs - et que c'est /bin
comme ça:
cp /bin/ ~/copy_of_bin
Avec le «filet de sécurité» d’ /bin
être un répertoire associé à la nécessité du -r
drapeau, vous éviterez de copier accidentellement toute la racine binaire du système que vous utilisez dans votre répertoire personnel. Si ce filet de sécurité n'existait pas, un désastre mineur, voire majeur serait survenu.
La logique est que dans les jours qui précèdent les conventions logiques / comportementales pré-GUI (interfaces graphiques) doivent être définies pour éviter que des incidents créés par l'utilisateur puissent potentiellement tuer un système. Et utiliser le -r
drapeau en fait maintenant partie.
Si cela vous semble superflu, ne cherchez pas plus loin que le système graphique moderne que vous pouvez placer au-dessus des systèmes de fichiers Linux. Une interface graphique répond aux problèmes utilisateur de base comme celui-ci en permettant de glisser-déposer facilement des fichiers et des répertoires.
Mais dans le cas des interfaces textuelles, une bonne partie de «l'expérience utilisateur» au sein de ce monde n'est fondamentalement que des obstacles routiers logiques et hueristiques qui permettent de garder l'utilisateur sous 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 ne disposent pas d’ 777
autorisations et de sudo
droits définis par défaut et de la façon dont les véritables administrateurs système tremblent lorsqu'un utilisateur définit des 777
autorisations ou accorde des sudo
droits à tous . Ce sont les tâches de base que l’on fait pour s’assurer que le système est stable et aussi «résistant à l’utilisateur» que possible; quiconque se précipitera pour court-circuiter ces conventions causera très probablement des dommages à son système sans même le savoir.
INFORMATIONS SUPPLÉMENTAIRES: Une autre réponse ici sur le site Unix Stack Exchange explique bien pourquoi une copie non récursive d'un répertoire pose problème; l'emphase est à moi.
Eh bien, sans l'indicateur -R, il est uniquement possible de copier des fichiers, car il est plutôt inhabituel que quelqu'un veuille copier un répertoire de manière non récursive: une copie non récursive ne ferait que donner un deuxième nom au répertoire même structure de répertoire.
Parce que c'est rarement ce que les gens veulent, et qu'il existe en fait un programme distinct (ln), une copie non récursive de répertoires n'est pas autorisée.
Ainsi, si un répertoire est simplement un fichier contenant des éléments inode, créer une copie directe de ce fichier équivaudrait à la manière dont un lien réel fonctionnerait. Ce qui n'est pas ce que tout le monde veut.