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
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) và 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
và /etc/ssh/
. Ví dụ về dữ liệu của mỗi người dùng là $HOME/.bashrc
và $HOME/.mozilla/
.
Đ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]
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. –
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.
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 ở đó).
Đ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. –
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
- 1. Lưu trữ dữ liệu cấu hình (json)
- 2. Nhúng dữ liệu vào chương trình C++
- 3. Chương trình và dữ liệu giống nhau trong Prolog?
- 4. thêm chú thích dữ liệu theo chương trình
- 5. Tạo cấu trúc dữ liệu như cấu trúc dữ liệu trong Java
- 6. nHibernate 3.2 cấu hình cơ sở dữ liệu trong mã?
- 7. cách tắt cấu hình cơ sở dữ liệu trong symfony2
- 8. Cấu hình cơ sở dữ liệu Symfony2 trong tệp PHP
- 9. Cấu hình nhiều cơ sở dữ liệu trong Django 1.2
- 10. Dữ liệu cấu hình trong Scala - tôi có nên sử dụng trình đơn Reader không?
- 11. Cấu trúc chương trình Java Swing
- 12. Loại dữ liệu cấu trúc trong Mathematica?
- 13. Mô hình xương sống: cấu trúc dữ liệu lồng nhau
- 14. Đọc cấu hình .NET từ cơ sở dữ liệu
- 15. Cấu hình nguồn dữ liệu Oracle cho Spring
- 16. Cách tốt nhất để quản lý dữ liệu cấu hình
- 17. Cấu trúc dữ liệu trong Python
- 18. Cấu hình mùa xuân từ cơ sở dữ liệu
- 19. Cách định cấu hình ExtJS 4 Store (proxy và trình đọc) để đọc siêu dữ liệu
- 20. Mybatis Spring cấu hình cơ sở dữ liệu Java
- 21. Cấu trúc của Chương trình Ruby
- 22. Định cấu hình nguồn dữ liệu ngoài cho Elastic MapReduce
- 23. Cấu trúc dữ liệu cho trình soạn thảo văn bản
- 24. Nhận cấu trúc hoàn chỉnh của một chương trình?
- 25. Cấu trúc dữ liệu cho Quy trình Quyết định Markov
- 26. Cấu hình toàn bộ chương trình Java Thực thi trong VisualVM
- 27. gì là việc sử dụng các lớp cấu hình trong các chương trình Hadoop
- 28. Tái cơ cấu dữ liệu trong R
- 29. Làm thế nào để thiết kế một chương trình với nhiều tùy chọn cấu hình?
- 30. Cấu trúc dữ liệu C#
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' –
Đề 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
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? –