У тому, як файлові системи працюють, каталог насправді не є папкою, що містить файли, а скоріше каталог - це файл, який містить покажчики inode на підключені до нього «дочірні» файли. Значення, з точки зору файлової системи, файл - це файл, але каталог - це лише файл, що містить список підключених файлів.
Отже, з точки зору командного рядка, виконуючи це:
$ cp dir1 copyDir1
По суті, це означатиме скопіювати названий файл dir1
у новий ім'я copyDir1
. Що ж стосується файлової системи, то dir1
це все-таки лише файл; той факт, що це "каталог", стане очевидним лише тоді, коли файлова система насправді перевірить, чи є насправді dir1
ця купа біт.
-r
Прапор вказує файлову систему рекурсивно скочуються файл / дерево каталогів і копіювати будь-які і всі вміст , яке може бути «дитина» з цього файлу на нове місце.
Тепер, чому це може здатися зайвим або зайвим, це дійсно зводиться до історичних методів роботи з файловими системами. А також створення системи, захищеної від усіх типів помилок, пов’язаних з користувачем; випадкові, а також навмисні.
Тобто, скажімо, ~/bin
у вашому домашньому каталозі є файл, який ви хочете скопіювати, але випадково його ~
випало - тому що ви людина і помилитесь - так це саме /bin
так:
cp /bin/ ~/copy_of_bin
Завдяки тому, що «мережа безпеки» /bin
є каталогом у поєднанні з потребою у -r
прапорі, ви уникнете випадкового копіювання всього бінарного кореня системи, на якій ви перебуваєте, у свій домашній каталог. Якщо цієї мережі безпеки не існувало, трапилося б незначне - або, можливо, велике - катастрофа.
Логіка тут полягає в тому, що за днів до GUI (графічних інтерфейсів користувача) необхідно встановлювати логічні / поведінкові умови, щоб уникнути випадків, коли користувач може створити випадки, які потенційно можуть вбити систему. І використання -r
прапора зараз є одним із них.
Якщо це здається зайвим, то не потрібно шукати далі, ніж сучасну GUI-систему, яку можна розмістити над файловими системами Linux. Графічний інтерфейс вирішує основні проблеми користувачів, як це, дозволяючи перетягувати файли та каталоги з легкістю.
Але, що стосується сфери текстових інтерфейсів, багато «досвіду користувачів» у цьому світі є в основному просто логічними та ґеристськими дорожніми ударами, що допомагають контролювати користувача, щоб запобігти потенційній катастрофі.
Так само, тому у файлових системах Linux / Unix не встановлено 777
дозволів і sudo
прав, встановлених за замовчуванням, і як реальні системні адміністратори бажають, коли користувач встановлює 777
дозволи або надає всі sudo
права. Це основні речі, які потрібно зробити, щоб забезпечити стабільність системи та максимально «захист від користувачів»; той, хто поспішає на коротке замикання цих конвенцій, швидше за все, завдасть шкоди їхній системі, навіть не підозрюючи про це.
ДОДАТКОВІ ІНФОРМАЦІЇ: Ще одна відповідь тут, на сайті Unix Stack Exchange, дає хороші пояснення, чому нерекурсивна копія каталогу є проблематичною; акцент мій.
Ну а без прапора -R копіювати файли можливо лише тому, що досить незвично, що хтось хоче нерекурсивно копіювати каталог: Нерекурсивна копія просто призведе до другого імені для каталогу, вказуючи безпосередньо на та ж структура каталогів.
Оскільки це рідко те, чого хочуть люди, і насправді існує окрема програма, яка робить це (ln), нерекурсивна копія каталогів заборонена.
Отже, якщо каталог - це справді файл з елементами inode всередині нього, то пряма копія цього файлу буде просто еквівалентом того, як буде працювати жорстке посилання. Що не те, що хто хоче.