2010-03-05 30 views
7

Cách được khuyến nghị để giữ dữ liệu cấu hình người dùng trong Unix/Linux là gì? Ngôn ngữ lập trình của tôi là C++. Dữ liệu cấu hình sẽ được giữ ở định dạng XML/văn bản/nhị phân, tôi không gặp vấn đề gì với việc xử lý các tệp đó. Tôi muốn biết tôi có thể giữ chúng ở đâu. Ví dụ, trong dữ liệu cấu hình Windows OS có thể được lưu giữ trong Registry (cách cũ) hoặc trong thư mục dữ liệu ứng dụng người dùng. Còn Linux thì sao? Tôi cần quyền truy cập đọc/ghi vào các tệp cấu hình.Dữ liệu cấu hình chương trình trong Unix/Linux

Trả lời

9

Khái niệm về registry là đặc biệt cho Windows, và Microsoft một lần thừa nhận với nó được vô hình thành (xem this, this, this, this (see #2)this).

Trong UNIX và Linux, cấu hình cho các chương trình toàn hệ thống nằm trong/etc hoặc có thể là thư mục con dành riêng cho ứng dụng.

Mỗi dữ liệu cấu hình người dùng được lưu trong thư mục chính của người dùng trong tệp ẩn — ở định dạng văn bản — hoặc thư mục ẩn dành riêng cho ứng dụng trong thư mục chính của người dùng. Cách thích hợp để tham khảo thư mục chính là thông qua biến môi trường HOME. Các tệp và thư mục ẩn được tạo bằng cách tạo . ký tự đầu tiên của tên.

Ví dụ về cấu hình trên toàn hệ thống là /etc/wgetrc/etc/ssh/. Ví dụ về dữ liệu của mỗi người dùng là $HOME/.bashrc$HOME/.mozilla/.

+2

Bạn không nên dựa vào biến môi trường HOME. Vì chúng ta đang nói C++ có thể thực hiện các cuộc gọi hệ thống, bạn nên làm 'struct passwd * pw = getpwuid (getuid());' (hoặc 'getpwuid_r' nếu bạn cần an toàn luồng) và sau đó sử dụng giá trị' pw-> pw_dir' –

+0

Đề xuất tốt. Tôi chưa bao giờ gặp vấn đề khi sử dụng $ HOME. Tôi nhận thấy nhiều chương trình phải hoạt động theo cách đó, vì đôi khi tôi đã ghi đè HOME với các kết quả hữu ích, mong đợi. – wallyk

+0

Cảm ơn bạn, tôi nghĩ rằng tôi sẽ làm theo điều này.BTW, tôi có thể sử dụng "~" cho thư mục chính trong chương trình không? –

1

Điều đó phụ thuộc một chút vào hương vị của Linux nhưng theo quy tắc chung, hầu hết các chương trình đều có cấu hình mặc định của hệ thống ở đâu đó trong/etc với tệp .config trong thư mục chính có thể ghi đè các giá trị mặc định trong thư mục/etc.


Great điểm .config nên. [Tên của tập tin cấu hình]

+2

Bạn có thể muốn làm rõ rằng bằng ".config", bạn thực sự có nghĩa là một tệp có tên bắt đầu bằng ".", * Not * một tệp có đuôi ".config". Các "." tiền tố là giữ cho các tập tin "ẩn" theo mặc định. Các chương trình có một loạt các tập tin cấu hình đôi khi sẽ có một thư mục ".config", với các tập tin trong đó. Ngoài ra, các ứng dụng Unix cũ có thể sử dụng tên ". [Appname] rc" cho tệp/thư mục cấu hình của chúng. –

4

Các XDG cơ sở mục Đặc điểm kỹ thuật xác định nơi cấu hình và các tập tin khác cần được lưu trữ trong Linux và các hệ điều hành X-based khác:

http://freedesktop.org/wiki/Specifications/basedir-spec

Đây là cách hiện đại, và cuối cùng có thể làm giảm sự lộn xộn dotfile trong thư mục chính của người dùng điển hình.

2

Dotfiles là giải pháp Unix cổ điển. Nếu bạn muốn đối phó với việc đọc/viết tất cả mọi thứ cho mình, hãy tìm nó.

Tuy nhiên, hầu hết các chương trình hiện đại tôi sử dụng đã sử dụng GConf để lưu trữ tùy chọn. Nó làm cho rất nhiều điều dễ dàng hơn, cả hai như là một nhà phát triển và là một người sử dụng (và dường như là một quản trị viên, nhưng tôi không có kinh nghiệm ở đó).

+0

Điểm tốt về GConf, cảm ơn bạn. Trong trường hợp của tôi, tôi có mã đa nền tảng để quản lý các tệp cấu hình XML, đã chạy trong Windows. Việc này đã được thực hiện, tôi cần thêm mã nền tảng cụ thể để chọn đường dẫn tệp cấu hình. –

+1

http://api.kde.org/4.0-api/kdelibs-apidocs/kdecore/html/classKConfig.html cho sơ đồ cấu hình của * desktop phổ biến khác. – ephemient

Các vấn đề liên quan