Tại sao không / etc / fstab sử dụng XML hoặc JSON?


22

Đây giống như một câu hỏi chung về Linux / lập trình, nhưng tôi đã lập trình được một thời gian và tôi đã quen sử dụng một định dạng như XML hoặc JSON trên bất kỳ tệp nào được sử dụng cho mục đích cấu hình.

Là người mới sử dụng Linux, tôi nhận ra rằng tệp cấu hình đầu tiên tôi tìm thấy ( /etc/fstab) sử dụng một số loại định dạng bảng. Vậy tại sao không phải là XML hay JSON?


7
Điều gì sẽ xảy ra nếu, giả sử, chúng tôi có thư viện phân tích cú pháp XML trong /usr/lib/libxml.so/usrtrên phân vùng riêng biệt? Để phân tích /etc/fstabhệ thống, sẽ phải gắn /usrz in order to load libxml , but to do so it would have to parse / etc / fstab` để biết hệ thống tập tin nào sẽ được gắn kết. Để tránh điều này, trình phân tích cú pháp XML có thể phải là một phần của kernel không giống như ý tưởng tuyệt vời.
el.pescado

4
@ V0R73X, nếu bạn cảm thấy câu hỏi này là một câu hỏi Linux tổng quát hơn, có một trang web Stack khác được gọi là UNIX & Linux Stack Exchangeunix.stackexchange.com. Cả hai có lẽ sẽ ổn, và đã có câu trả lời ở đây, nhưng chỉ cần ném nó ra cho tương lai.
phân chia

8
XML và tương tự không phải lúc nào cũng là định dạng tốt hơn. Một bảng là một bảng và nên được lưu trữ như vậy. Trong thực tế một số người nghĩ rằng XML là không tốt cho bất cứ điều gì plus.google.com/+LinusTorvalds/posts/X2XVf9Q7MfV
alfC

2
JSON không nên được sử dụng cho các tệp cấu hình. Nó không hỗ trợ các bình luận, rất cần thiết để giải thích các tùy chọn cấu hình và để thử mọi thứ bằng cách nhận xét các phần của cấu hình.
artbristol

2
XML là một định dạng vận chuyển tài liệu, không phải là một định dạng tệp cấu hình.
Matthew Ife

Câu trả lời:


82

/etc/fstab cũ hơn nhiều so với XML và JSON, và vì có khá nhiều chương trình sử dụng nên việc thay đổi định dạng của nó sẽ là một cơn ác mộng.

Bên cạnh đó, điều này /etc/fstabcần được phân tích cú pháp trước khi có một hệ thống chức năng vì nó được sử dụng để gắn kết tất cả các hệ thống tập tin cần thiết. Do đó định dạng của /etc/fstabcàng đơn giản càng tốt vì trình phân tích cú pháp không nên phụ thuộc vào bất kỳ lib bên ngoài nào.

Phân tích cú pháp XML khá khó khăn và bạn thực sự muốn tránh nó nếu bạn không thể chuyển tiếp trên các lib bên ngoài. JSON dễ hơn một chút nhưng vẫn khá khó.

Các ngữ nghĩa /etc/fstabkhá đơn giản, chúng không bao gồm bất kỳ cấu trúc dữ liệu giống như cây hoặc bất kỳ công cụ ưa thích nào khác. Tất cả bạn cần là hồ sơ bao gồm sáu giá trị.

Các giá trị được phân tách bằng Whitepace đủ tốt cho điều đó và chúng dễ dàng phân tích ngay cả khi tất cả những gì bạn có là các lib chuẩn C.

Vì vậy, không có lý do gì để sử dụng JSON, XML hoặc một cái gì đó tương tự.


các trường tách màu trắng là đủ cho những gì fstab cần làm. không muốn làm cho mọi thứ phức tạp hơn chỉ đơn giản là vì lợi ích của nó.
Michael Martinez

một CSV sẽ thậm chí còn đơn giản và dễ dàng hơn
Sled

3
@ArtB tại sao bạn nghĩ thay đổi dấu phân cách sẽ thay đổi độ phức tạp của việc phân tích tệp?
Dan Neely

Tùy thuộc vào các quy tắc trích dẫn, thoát, v.v. CSV có thể dễ dàng hơn một chút để phân tích vì dấu phân cách luôn luôn là một char thay vì dấu phân cách độ dài biến hiện đang sử dụng. Nhưng định dạng hiện tại cho phép khả năng đọc tốt hơn của con người, đó cũng là một giá trị quan trọng.
Florian Diesch

32

Thỉnh thoảng bạn nên đọc Nghệ thuật lập trình Unix của Eric Raymond . Bạn dường như đang đưa ra giả định rằng các nhà thiết kế Unix sẽ sử dụng XML /etc/fstabnếu họ biết về nó. Ngược lại, mặc dù XML đặc biệt chưa được phát minh, nhưng họ hoàn toàn biết về những người tiền nhiệm tương tự của nó và cố tình từ chối chúng cho các tệp cấu hình như thế nào /etc/fstab.

Trích dẫn từ tiểu mục của mình về XML :

XML rất phù hợp với các định dạng dữ liệu phức tạp (loại những thứ mà truyền thống Unix trường học cũ sẽ sử dụng định dạng khổ thơ giống RFC-822) mặc dù quá mức cho những thứ đơn giản hơn. Điều này đặc biệt thích hợp cho các định dạng có cấu trúc phức tạp lồng nhau hoặc đệ quy của loại mà metaformat RFC 822 không xử lý tốt.

và xa hơn:

Vấn đề nghiêm trọng nhất với XML là nó không chơi tốt với các công cụ Unix truyền thống. Phần mềm muốn đọc định dạng XML cần có trình phân tích cú pháp XML; điều này có nghĩa là các chương trình cồng kềnh, phức tạp. Ngoài ra, XML là khá cồng kềnh; có thể khó nhìn thấy dữ liệu giữa tất cả các đánh dấu.

Triết lý của Unix là làm cho cấu hình dễ dàng được viết thành kịch bản và con người có thể đọc được bất cứ nơi nào có thể. Bạn sẽ có thể xử lý các tệp cấu hình bằng các công cụ như awk, grep, sed, tr và cắt, và dễ dàng phân tích chúng trong các ngôn ngữ kịch bản mà không cần các thư viện cồng kềnh. Đây là một lý do lớn đằng sau thành công của Unix và không nên đánh giá thấp.

Mặc dù Eric Raymond ca ngợi XML về khả năng xử lý "các định dạng có cấu trúc đệ quy phức tạp hoặc đệ quy phức tạp", /etc/fstabchắc chắn không cần đến các định dạng đó và do đó, định dạng tệp đơn giản nhất có thể được chọn cho nó.

Vì vậy, mặc dù XML chắc chắn có công dụng của nó, bạn có thể muốn xem xét rằng một số lập trình viên thông minh nhất trên hành tinh tiên phong trong lĩnh vực này có thể đã biết họ đang làm gì. Có lẽ XML không phải lúc nào cũng phù hợp nhất cho các tệp cấu hình của riêng bạn.


18

Lý do chính mà tôi có thể nghĩ bây giờ là:


4
Câu trả lời này không thực sự cho thấy rằng fstabtệp / định dạng cũ như mountmà bạn dường như chỉ ngụ ý. Theo man fstab, " Tổ tiên của định dạng tệp fstab này đã xuất hiện trong 4.0BSD. " (Cụm từ BSDs " Định dạng tệp fstab xuất hiện trong 4.0BSD. "). 4.0BSD được phát hành vào năm 1980 .
Daniel Beck

@DanielBeck Vì vậy, dự đoán của tôi rất may là đúng, trước năm 1985.
Radu Rădeanu
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.