Cách thức hoạt động của các hệ thống tập tin, một thư mục không thực sự là một thư mục chứa các tệp mà là một thư mục là một tệp chứa các con trỏ inode để các tệp con con con được kết nối với nó. Có nghĩa, từ góc độ hệ thống tệp, tệp là tệp, nhưng thư mục chỉ là tệp chứa danh sách tệp được kết nối.
Vì vậy, từ quan điểm dòng lệnh, làm điều này:
$ cp dir1 copyDir1
Về cơ bản có nghĩa là sao chép tệp có tên, dir1
vào một tệp mới có tên copyDir1
. Và theo như hệ thống dir1
tập tin, dù sao cũng chỉ là một tập tin; thực tế đó là một thư mục của YouTube, chỉ có thể thấy rõ khi hệ thống tập tin thực sự kiểm tra dir1
xem đống bit đó thực sự là gì.
Các -r
lá cờ kể về hệ thống tập tin để cuộn đệ quy xuống các tập tin / cây thư mục và sao chép bất kỳ & tất cả các nội dung mà có thể là một “đứa trẻ” của tập tin đó đến một nơi mới.
Bây giờ là lý do tại sao điều đó có vẻ thừa hoặc thừa, điều này thực sự bắt nguồn từ các phương pháp lịch sử để xử lý các hệ thống tệp. Cũng như tạo ra một hệ thống an toàn khỏi tất cả các loại lỗi liên quan đến người dùng; Vô tình cũng như cố ý.
Có nghĩa là, giả sử bạn có một ~/bin
tập tin trong thư mục nhà của bạn mà bạn muốn sao chép nhưng vô tình bỏ qua phần mềm ~
vì bạn là một con người và mắc lỗi, vì vậy nó /bin
giống như thế này:
cp /bin/ ~/copy_of_bin
Với mạng an toàn của người dùng, mạng, /bin
là một thư mục kết hợp với nhu cầu -r
cờ, bạn sẽ tránh vô tình sao chép toàn bộ gốc nhị phân của hệ thống mà bạn đang truy cập vào thư mục chính của mình. Nếu mạng lưới an toàn đó không tồn tại, một thảm họa nhỏ hoặc có thể là thảm họa lớn sẽ xảy ra.
Logic ở đây là trong những ngày trước, các quy ước logic / hành vi của GUI (giao diện người dùng đồ họa) cần phải được đặt để tránh việc người dùng tạo ra các rủi ro có khả năng giết chết hệ thống. Và sử dụng -r
cờ bây giờ là một trong số họ.
Nếu điều đó có vẻ không cần thiết, thì không cần tìm đâu xa ngoài hệ thống GUI hiện đại, người ta có thể đặt phía trên các hệ thống tệp Linux. GUI giải quyết các vấn đề cơ bản của người dùng như thế này bằng cách cho phép một người kéo và thả các tệp và thư mục một cách dễ dàng.
Nhưng trong trường hợp của các giao diện dựa trên văn bản, rất nhiều trải nghiệm người dùng trên mạng trong thế giới đó về cơ bản chỉ là những va chạm trên đường dựa trên logic và săn bắn giúp giữ cho người dùng kiểm tra để thảm họa tiềm tàng có thể được đẩy lùi.
Tương tự, đây là lý do tại sao các hệ thống tệp Linux / Unix không có 777
quyền và sudo
quyền được đặt theo mặc định và cách quản trị viên hệ thống thực sự nhăn nhó khi người dùng đặt 777
quyền hoặc cấp cho mọi người sudo
quyền. Đây là những điều cơ bản mà người ta làm để đảm bảo hệ thống ổn định và càng chứng minh người dùng càng tốt; Bất cứ ai vội vã làm chập mạch những quy ước đó rất có thể sẽ gây ra thiệt hại cho hệ thống của họ mà không hề biết.
THÔNG TIN BỔ SUNG: Một câu trả lời khác ở đây trên trang web Unix Stack Exchange đưa ra một lời giải thích tốt về lý do tại sao một bản sao không đệ quy của một thư mục là có vấn đề; nhấn mạnh là của tôi.
Chà, không có cờ -R, chỉ có thể sao chép các tệp, vì điều bất thường là ai đó muốn sao chép một cách không đệ quy một thư mục: Một bản sao không đệ quy sẽ chỉ dẫn đến một tên thứ hai cho thư mục, chỉ vào trực tiếp cấu trúc thư mục giống nhau.
Bởi vì đó hiếm khi là những gì mọi người muốn, và thực sự có một chương trình riêng biệt thực hiện điều này (ln), một bản sao thư mục không đệ quy không được phép.
Vì vậy, nếu một thư mục thực sự là một tệp có các mục inode bên trong nó, thì việc tạo một bản sao thẳng của tệp đó sẽ tương đương với cách một liên kết cứng hoạt động. Đó không phải là bất cứ ai muốn.