Tôi có thể dựa vào những bản phân phối Linux nào dựa trên sự hiện diện của / etc / os-release?


17

Tôi đang cố gắng tìm cách xác định tên và phiên bản phân phối Linux sẽ hoạt động trên hầu hết (hoặc lý tưởng nhất là tất cả) các bản phân phối hiện đại. Tôi nhận thấy /etc/os-releasecó chứa thông tin tôi cần trên các bản phân phối mà tôi đã thử (CentOS, Debian), nhưng nó an toàn đến mức nào khi dựa vào sự hiện diện của nó? Các lệnh như uname -akhông thực sự chứa cùng một thông tin và lsb_releasedường như không có trên ví dụ như CentOS tối thiểu.

Có một cách nhanh chóng để tìm ra chính xác những gì distro đi kèm /etc/os-release? Hơn nữa, được /etc/os-releaseđảm bảo để chứa NAME, VERSIONPRETTY_NAMEcác lĩnh vực?


1
Chắc chắn là Ubuntu, Debian, Arch. Dù sao tôi sẽ bỏ qua việc phát hiện distro theo cách đó. Lần trước tôi cần phân biệt các bản phân phối Tôi đã kiểm tra sự hiện diện của các trình quản lý gói cụ thể (ví dụ: pacman -> Arch, apt-get & no pacman -> hoặc Ubuntu hoặc Debian). Đó là một nhiệm vụ khó khăn và tôi cũng muốn biết liệu có giải pháp nào tốt hơn không.
ddnomad

1
Người ta tự hỏi tại sao bạn cần biết tên phân phối. Điều này có vẻ giống như một trường hợp phát hiện Trình duyệt khi bạn nên thực hiện Phát hiện tính năng .
xDaizu

@xDaizu Tôi đang chạy tập lệnh trên máy chủ từ xa để lấy thông tin khác nhau về chúng.
w128

@ w128 trong trường hợp đó, bạn không thể kiểm tra xem "tính năng" (/ etc / os-release) có tồn tại không (và dự phòng cho các phương thức khác nếu không) thay vì dựa vào danh sách phân phối có thể thay đổi tĩnh nơi nó hoạt động?
xDaizu

1
@xDaizu quay trở lại "các phương pháp khác" có thể liên quan đến công việc làm thêm có thể chứng minh là không cần thiết nếu tôi có thể đảm bảo giải pháp đơn giản được đề xuất trong câu hỏi là đáng tin cậy trên một số bản phân phối chính mà tôi cần hỗ trợ, vì vậy một danh sách các bản phân phối được hỗ trợ là ổn trong trường hợp này.
w128

Câu trả lời:


14

Bất kỳ hệ thống nào đang chạy systemd nên có /etc/os-release, được chỉ định là một phần của systemd. Một số hệ thống không có systemd cũng có thể có nó ( ví dụ Debian 8 trong đó systemd là tùy chọn nhưng /etc/os-releaseđược cài đặt trong mọi trường hợp).

Theo đặc tả, tất cả các trường là tùy chọn và một số có mặc định ("Linux" cho NAMEPRETTY_NAME).

Bạn sẽ tìm thấy nhiều nền tảng trong /etc/os-releasethông báo .

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.