Na jakich dystrybucjach Linuksa mogę polegać na obecności / etc / os-release?

17

Próbuję znaleźć sposób na określenie nazwy i wersji dystrybucji Linuksa, która działałaby na większości (lub idealnie wszystkich) nowoczesnych dystrybucji. Zauważyłem, że /etc/os-releasezawiera informacje, których potrzebuję na temat wypróbowanych przeze mnie dystrybucji (CentOS, Debian), ale na ile bezpieczne jest poleganie na ich obecności? Polecenia takie jak uname -atak naprawdę nie zawierają tych samych informacji i lsb_releasenajwyraźniej nie występują np. W minimalnym CentOS.

Czy istnieje szybki sposób, aby dowiedzieć się dokładnie, z czym pochodzą dystrybucje /etc/os-release? Ponadto jest /etc/os-releasegwarancją zawierają NAME, VERSIONi PRETTY_NAMEpól?

w128
źródło
1
Ubuntu, Debian, Arch na pewno. W każdym razie pomijałbym wykrywanie dystrybucji w ten sposób. Ostatnim razem, gdy muszę rozróżnić dystrybucje, sprawdzałem obecność konkretnych menedżerów pakietów (tj. Pacman -> Arch, apt-get & no pacman -> albo Ubuntu lub Debian). To trochę trudne zadanie i chciałbym również wiedzieć, czy istnieje lepsze rozwiązanie.
ddnomad
1
Można się zastanawiać, dlaczego musisz znać nazwę dystrybucji. To brzmi jak przypadek wykrycia przeglądarki, kiedy powinieneś robić wykrywanie funkcji .
xDaizu,
@xDaizu Uruchamiam skrypty na zdalnych hostach, aby pobrać różne informacje na ich temat.
w128
@ w128 w takim przypadku, czy nie możesz sprawdzić, czy istnieje „funkcja” (/ etc / os-release) (i wrócić do innych metod, jeśli nie), zamiast polegać na statycznej, zmiennej liście dystrybucji, w której działa?
xDaizu,
1
@xDaizu powracając do „innych metod” może wymagać dodatkowej pracy, która może okazać się niepotrzebna, jeśli mogę zagwarantować, że proste rozwiązanie zaproponowane w pytaniu jest niezawodne w kilku głównych dystrybucjach, które muszę wspierać, więc zmienna lista obsługiwanych dystrybucji jest w porządku w tym przypadku.
w128

Odpowiedzi:

14

Każdy system z uruchomionym systemem powinien mieć taki /etc/os-release, który jest określony jako część systemd. Niektóre systemy bez systemd również mogą go mieć ( np. Debian 8, gdzie systemd jest opcjonalny, ale /etc/os-releasejest instalowany we wszystkich przypadkach).

Zgodnie ze specyfikacją wszystkie pola są opcjonalne, a niektóre mają wartości domyślne („Linux” dla NAMEi PRETTY_NAME).

Więcej informacji znajdziesz w /etc/os-releaseogłoszeniu .

Stephen Kitt
źródło