Как узнать версию дистрибутива GNU/Linux из терминала
Как-то мне постучался в аську один знакомый и спросил как поставить программу в линуксе (он купил ноут, а на нем уже линь стоял). Я долго тупил, но решение нашел. Но было бы куда проще дать человеку совет зная какая сборка линукса у него установлена.
Информация о версии линукса хранится в файле(-ах) /etc/*release*. В Ubuntu это /etc/lsb-release. В RedHat, на сколько я помню, 2 файла, поэтому я обрамил звездочками слово release.
Чтобы узнать что же за релиз, достаточно прочитать этот файл(-ы):
$ cat /etc/*release* DISTRIB_ID=Ubuntu DISTRIB_RELEASE=8.04 DISTRIB_CODENAME=hardy DISTRIB_DESCRIPTION="Ubuntu 8.04.1"
Думаю тут и так все понятно и комментировать нечего.
Если вы пишите скрипт, который должен что-либо сделать в зависимости от сборки линукса, то можете сделать это так (любой из вариантов на вкус и цвет):
$ cat /etc/*release* | grep DESCRIPTION | sed 's/^.*=//;s/"//g' $ cat /etc/*release* | grep DESCRIPTION | sed 's/^.*=//' | tr -d '"' $ cat /etc/*release* | awk -F= '/DESCRIPTION/{print $2}' | tr -d '"'
Теоретически это должно работать в любой сборке линукса.
Для убунту (и наверное для всех дистрибутивов собранных на Debian, проверить нет возможности) можно использовать команду:
$ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 8.04.1 Release: 8.04 Codename: hardy
Чтобы вывести только поле "Description":
$ lsb_release -d | cut -f2 Ubuntu 8.04.1
- 39267 просмотров


Анонсирован /etc/os-release, единый файл с информацией о релизах дистрибутивов
root@localhost:/home/dezdemona# uname -rs
GNU/kFreeBSD 8.1-1-686-smp
root@localhost:/home/dezdemona# cat /etc/issue
Debian GNU/kFreeBSD 6.0 \n \l
в slax 6.2.1
*cat /etc/slax-version*
cat /etc/issue
в Arch`е файл /etc/arch-release есть, но он пустой. Но система определяется по 'uname -r' результат будет примерно таким: 2.6.32-ARCH
в Slackware не один из ваших способов не работает =) Только так
cat /etc/slackware-version
Slackware 12.2.0
Спасибо
вот что у меня получилось (т.е. команда работает и в redhat-based дистрибах)
[arkady@sint ~]$ lsb_release -a
LSB Version: :core-3.1-ia32:core-3.1-noarch:graphics-3.1-ia32:graphics-3.1-noarch
Distributor ID: CentOS
Description: CentOS release 5.2 (Final)
Release: 5.2
Codename: Final
arkady@nixdev:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 8.04.2
Release: 8.04
Codename: hardy
arkady@km23255-03:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 4.0 (etch)
Release: 4.0
Codename: etch
т.е. знание данной команды спасет в большинстве случаев )
[root@gent ~]# lsb_release
-bash: lsb_release: command not found
[root@gent ~]# cat /etc/*release*
CentOS release 4.6 (Final)
Респект! Буду знать :)
Интересно, а в *BSD системах прокатит? Может кто проверить?
from man uname:
...
-r Write the current release level of the operating system to stan-
dard output.
-s Write the name of the operating system implementation to standard
output.
...
То ?
Взято на заметку, спасибо
а зачем BSD системам поддерживать спецификацию Linux Standard Base (lsb)? :-)
касательно lsb_release -a - такое не прокатит в том же Debian. Самый универсальный вариант, который я для себя нашел - это
на всех Linux-дистрах :)
в BSD можно поглядеть /etc/motd
да, у меня в арче ни одна из команд не пашет
а тут показало - арч линукс =)
пасиба!
зы
можно конечно и по имени образха ядра догадаться =\
cat /etc/issue - опаньки... действительно оно так и есть :)) Респект!
На счет BSD не знал, т.к. опыта с ними почти нет. Спасибо, за разъяснения :)
cat /etc/*release* | grep DESCRIPTION | sed 's/^.*=//;s/"//g'
Зачем???? Это же стандартный скрипт, чего не сделать-то тоже стандартно:
if [ -f /etc/lsb-release ]; then # Debian-Like
. /etc/lsb-release
echo $DESCRIPTION
fi
Почему с if. Потому что одно дело просто вывести содержимое файлов, но не во всех далеко дистрибутивах они такого содержания, на Федоре например далеко не так все:
# grep -H '' /etc/*release
/etc/fedora-release:Fedora release 10 (Cambridge)
/etc/redhat-release:Fedora release 10 (Cambridge)
/etc/system-release:Fedora release 10 (Cambridge)
То есть просто записано имя. Ну и почему 3 файла, так это просто симлинки именно для совместимости:
# ls -l /etc/*release
-rw-r--r-- 1 root root 30 Ноя 6 23:06 /etc/fedora-release
lrwxrwxrwx 1 root root 14 Ноя 12 12:31 /etc/redhat-release -> fedora-release
lrwxrwxrwx 1 root root 14 Ноя 12 12:31 /etc/system-release -> fedora-release
Спасибо за информацию.
Получается что
можно использовать далеко не везде... и, как сказано, ниже не везде есть этот файл... Тогда думаю оптимально будет так:
хотя некоторых новичков это может сбить с толку... но все же лучше чем ничего.
По видимости, речь идёт о сборке и версии чего-то вроде "дистрибутива ОС семейства GNU/Linux", а не о "версии и сборке Linux" ;)
Версию и сборку Linux можно узнать "из терминала" командой "uname -v" и "uname -r" соответственно.
> Версию и сборку Linux можно узнать "из терминала" командой "uname -v" и "uname -r" соответственно.
$ uname -v
#1 SMP Tue Dec 2 07:56:33 UTC 2008
Какая у меня версия линукса? :)
Да, ты прав, не корректно я озаглавил пост. :( Жаль нельзя поменять тему...
Модераторы, смените пожалуйста тему этого поста, если возможно,на "Узнать какой дистрибутив GNU/Linux из терминала".
Спасибо.
сделано :)
Спасибо большое :)
Поддержка LSB(Linux Stantart Base) в debian осуществлятся специальными пакетами lsb, lsb-base и подобные.
И по умолчанию они не ставятся. Зато есть /etc/debian_version. Помоему в Ubuntu этот файл тоже есть.
Но что интересно lsb_release есть и работает. Я посмотрел код (он на питоне), то информация узнается из разных источников (uname, /etc/debian_version, apt-cache policy), но может быть установлена принудительно в /etc/lsb-release.
Поставил все lsb* пакеты и файлик так и не появился
PS
кстати в sed тоже есть /паттерн/{ команды } как и в awk Ж:-P
Да, ты прав.
У меня в убунте /etc/debian_version такой:
А файл /etc/lsb-release и утилита lsb_release были с самого начала.
За sed спасибо, не знал (а может забыл?) :)
а вот и вывод
Отправить комментарий