Những lợi thế của cấu trúc hệ thống tệp Unix là gì


9

Nếu tôi cài đặt một ứng dụng trong Linux, ví dụ Debian / Gnu Linux, các tệp của ứng dụng sẽ được sao chép vào nhiều thư mục khác nhau trong hệ thống tệp.

Một số tập lệnh đi vào / usr / share .. / usr / local một số tệp khác vào / var .. / log .. etc / v.v.

Đối với tôi điều này là ổn bởi vì tôi đã học được điều gì đó về hệ thống tệp và hầu hết các thư mục đều ở đó để giữ các tệp cho một mục đích cụ thể. Điều này rất phù hợp với triết lý Unix "làm một việc và làm tốt"

Nhưng câu hỏi của tôi là những lợi thế của cấu trúc thư mục như vậy là gì? Hay đơn giản là di sản của những ngày xưa cũ. (ví dụ: so với một cửa sổ sử dụng, trong đó tất cả các tệp cho một ứng dụng nằm trong một "thư mục" cụ thể)

Câu trả lời:


9

Điều có vẻ với tôi là lợi thế dễ nghĩ nhất là các tệp tương tự nằm trong cùng một cây thư mục. Các tệp cấu hình trực tiếp /etc, các tệp nhật ký và / hoặc các tệp theo dõi thời gian chạy trực tiếp /var/log, các tệp thực thi trực tiếp /usr/bin, thông tin về thời gian chạy như các tệp PID tồn tại /var/run. Bạn muốn biết những gì trong tập tin cấu hình NTP? Thay đổi thư mục thành /etcvà làm ls ntp*. Bạn muốn có một số chương trình xem các tập tin thực thi để một số virus hệ thống tập tin truyền thống không lây nhiễm chúng? Tất cả mọi thứ trong /usr/bin/usr/local/bincần xem.

Ưu điểm thứ hai tôi có thể nghĩ đến là phong cách tổ chức Unix thúc đẩy sự phân tách dữ liệu và thực thi. Các tệp thực thi sống trong một thư mục cách xa nơi các mẫu sống ( /usr/sharecó thể) và cách xa nơi dữ liệu sống. Sự tách biệt đó có thể là một lý do tại sao Unix / Linux / * BSD có khả năng chống lại virus hệ thống hơn so với Windows, hoặc Mac Pre-OSX cũ đã có.


Đó là những điểm tốt. Tại sao việc tách các tệp thực thi và dữ liệu-, mẫu-, cấu hình lại là lý do để bảo vệ chống lại vi-rút nhiều hơn?
Jan Koester

3
Rất nhiều (nhưng không phải tất cả) các loại virus và sâu trên thế giới lan truyền do khả năng thay đổi dữ liệu thành có thể thực hiện được: ngăn xếp tràn và tiêm SQL và tiêm mã đều hoạt động theo cách này. Các virus macro "Word" được lan truyền ít nhất một phần vì các macro "Word" được bao gồm trong các tệp .doc. Tách dữ liệu khỏi tệp thực thi bằng tệp là một cấp độ bảo vệ, đưa dữ liệu vào một thư mục, có thể thực hiện được trong một giây, các mẫu trong thứ 3, cấu hình trong thứ 4 thậm chí còn gây ra nhiều rào cản hơn cho việc nhầm lẫn dữ liệu và có thể thực thi được.
Bruce Ediger

2
Đối số phân tách dữ liệu và thực thi là hoàn toàn vô nghĩa. Tổ chức hệ thống tập tin là vì lợi ích của con người; nó không giống như có một sự tách biệt vật lý giữa các bit ngăn chúng đưa ra các đồng xu cho nhau hoặc bất cứ thứ gì. Bảo mật của UNIX về mặt lịch sử tốt hơn vì mô hình cấp phép mạnh hơn, được thi hành chặt chẽ hơn nói chung.
lông mịn

hệ thống tập tin riêng biệt @fluffy cung cấp tách hơi mạnh hơn, nhưng thời điểm đó là một phần tranh luận vì nó không thể tách rời /bin, /etctừ /.
jw013

@fluffy - đồng ý, không tồn tại sự tách biệt "vật lý" hoặc có thể. Nhưng đó là một tên riêng biệt. Phần mềm độc hại phải tìm trong một số thư mục khác (thay vì "." Hoặc dirname $ 0 hoặc thứ gì đó) để tìm mẫu hoặc dữ liệu khác. Đó không phải là bảo mật tuyệt đối, bất kể việc đóng cửa sổ kính là bảo mật tuyệt đối. An ninh là một lợi ích kinh tế, với giá trị biên cho mỗi đơn vị công việc bổ sung. Giúp một ít.
Bruce Ediger

11

Bất kể tổ chức nào được chọn, nó sẽ làm cho một số điều dễ dàng hơn và một số điều khó khăn hơn.

Tổ chức các tập tin bằng các loại, cách Unix (vào bin, man, lib/python, ...), làm cho nó dễ dàng hơn để sử dụng tập tin. Nếu bạn muốn chạy một lệnh, bạn biết nơi tìm nó, bất kể gói nào cung cấp nó. Nếu bạn muốn tìm kiếm thông qua tài liệu, tất cả ở một nơi. Nếu một số chương trình cung cấp mô-đun tô sáng cú pháp Vim, hàm hoàn thành zsh hoặc các ràng buộc Python, thì tệp có liên quan sẽ ở nơi vim / zsh / python có thể tìm thấy nó.

Unix cũng tổ chức các tệp theo mô hình sử dụng. Các tệp cấu hình đi vào /etc, các tệp không thay đổi trong hoạt động bình thường đi vào /usrvà các tệp thay đổi tự động đi vào /var. Dữ liệu người dùng đi theo /home. Điều này rất hữu ích cho việc quản lý cấu hình (quản lý những gì /etccộng với danh sách các gói đã cài đặt). Nó cũng hữu ích để xác định các chiến lược sao lưu: những gì trong /etc/homecực kỳ quan trọng, trong khi những gì trong đó /usrcó thể dễ dàng được tải xuống lại.

Chi phí chính của cách Unix là cài đặt một phần mềm được trải đều trên nhiều thư mục. Tuy nhiên, các hệ thống unix hiện đại vẫn có trình quản lý gói; quản lý tập tin trong nhiều thư mục cho đến nay không phải là điều phức tạp nhất họ làm (theo dõi phụ thuộc là rất hữu ích và khó hơn).

Tương phản với Windows. Windows khởi đầu không có quản lý gói và mỗi ứng dụng tạo thư mục riêng ở đâu đó. Tất cả các tệp thường nằm trong thư mục đó: chương trình, dữ liệu tĩnh, dữ liệu người dùng, trừ khi đôi khi đối với các thư viện mà các chương trình sẽ thả vào một thư mục hệ thống chung mà không liên quan đến xung đột (vụ DLL hell hell). Theo thời gian, Windows trở thành đa người dùng, yêu cầu tách các thư mục người dùng khỏi các thư mục hệ thống. Windows cũng tạo một vị trí trung tâm cho các tệp cấu hình (Unix /etc) và một số dữ liệu hệ thống (Unix/var), đăng ký. Đây không chỉ là một tạo tác lịch sử phần lớn là do thiếu quản lý gói và lịch sử ban đầu là một hệ thống người dùng đơn lẻ. Cách tiếp cận Windows có rất nhiều hạn chế: nó không cho phép các gói phần mềm tương tác dễ dàng. Ví dụ: hầu hết các phần mềm được cài đặt không kết thúc trên đường dẫn tìm kiếm lệnh mặc định, vì vậy phần mềm này tương tác xấu với bất kỳ hình thức kịch bản lệnh nào. Trình cài đặt thường cung cấp một biểu tượng menu dưới dạng trường hợp đặc biệt - được thả vào một thư mục hệ thống riêng (à la Unix!).

Một hạn chế của phương pháp Unix là nó không dễ dàng cho phép cùng tồn tại nhiều phiên bản của một gói, điều này đặc biệt có vấn đề trong khi gói đang được nâng cấp. Một cách để có được điều tốt nhất của cả hai thế giới là giải nén từng gói trong thư mục riêng của nó (một /optcấu trúc) và tạo các rừng liên kết tượng trưng từ các thư mục gói đến một /usrcấu trúc. Đây là những gì phần mềm như stow làm.

Tóm lại, cách tiếp cận Unix giúp sử dụng tệp dễ dàng hơn, quản lý tệp và cho phép các gói tương tác; nó đòi hỏi phần mềm quản lý gói, nhưng dù sao đó cũng là điều mong muốn. Cách tiếp cận Windows giúp quản lý các gói theo cách thủ công dễ dàng hơn, nhưng phải hướng tới mô hình Unix để có được chức năng hữu ích.


1
Tuyệt vời. Tuy nhiên, theo tôi, nó chỉ được sử dụng để dễ dàng quản lý các gói riêng lẻ. Sự ra đời của sổ đăng ký windows đã thay đổi tất cả và sau đó một số. Không chỉ là khổng lồ và mê cung - nó còn có chủ ý như vậy - với một số giá trị trong mã byte trong khi các giá trị khác không và không có vần điệu hoặc lý do thực sự cho cấu trúc. Tôi đoán đó là cách nó phải như vậy nếu bạn muốn phát triển một hệ điều hành được quản lý bảo vệ bí mật thương mại và phương pháp độc quyền: khó hiểu.
mikeerv

3

Một lợi ích chính không được đề cập ở trên và một trong những lý do lịch sử cho cấu trúc là tách biệt vật lý trên nhiều ổ đĩa / đĩa có sẵn ở các giai đoạn khác nhau trong quy trình khởi động.

Một lợi ích khác là các thư mục khác nhau có thể được gắn trên các tập / hệ thống tập tin được tối ưu hóa cho dữ liệu của thư mục. Ví dụ, tmpfscho /run; và /sbintrên phương tiện / ROM chỉ đọc.

Ngoài ra, các tập có thể là cục bộ hoặc từ xa, cá nhân hoặc chia sẻ.

Cuối cùng, hãy xem Danh mục ứng dụng để biết cách tiếp cận khác (được đề cập bởi @fluffy) được sử dụng trong UNIX (OS X .app), Linux ( ROX Desktop ) và Windows ( PortableApps.com ).


1

Thực sự không có bất kỳ lợi thế nào cho bố cục này, ngoài việc dễ dàng đoán được các tệp được chia sẻ và cấu hình dành cho ứng dụng. UNIX có một di sản dài của kiểu bố trí này và để phá vỡ nó sẽ khá khó khăn. Tuy nhiên, một số bản phân phối UNIX đã thay đổi mô hình của họ - họ chỉ cung cấp các vị trí cũ cho mục đích cũ và các ứng dụng khác được gói vào thư mục / gói nhỏ của chính nó. Mac OS X là ví dụ nổi bật nhất về điều này và có một vài bản phân phối Linux tối nghĩa làm điều tương tự (và Android cũng làm điều tương tự, chỉ cần thêm một chút và cài đặt và khởi chạy mọi ứng dụng theo ID người dùng của riêng mình ).

Điều chính mà một quy ước hệ thống tập tin cung cấp chỉ là - một quy ước, để mọi người biết nơi tìm tệp (có thể là thủ công hoặc bằng mã). Không có lý do kỹ thuật thực sự cho nó là một cách hơn một cách khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.