Система Orphus
[]

четверг, 12 февраля 2009 г.

Узнать какой дистрибутив 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




UPD#1: Изменил тему, т.к. так более правильно :)
UPD#2: Из обсуждения данного поста на сайте ЛинСовет выяснилось, что lsb_release т.ж. есть и в RedHat подобный дистрибутивах. Так чтож "lsb_release -d | cut -f2" самый надежный метод :)
А вот
$ 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 '"'
на федоре, например, не прокатит, нужно юзать
$ cat /etc/*release*
т.к. тут просто строка в файле. Спасибо hubbitus'у =)
UPD#3: Все же вышел для меня жестокий облом с этой темой. Из обсуждений на сайте ЛинСовет выяснилось еще кое-что интересное:
$ cat /etc/issue
Ubuntu 8.04.1 \n \l
alexu утверждает что это работает во всех дистрибутивах Linux. Проверил на нескольких дистрах, которые мне доступны, + попросил нескольких знакомых, все подтвердилось. Для себя я это взял как оружее номер один, для выяснения дистра.
Ну а в *BSD системах - /etc/motd.

Похожие статьи

4 коммент.:

Анонимный комментирует... четверг, 12 февраля 2009 г. в 14:50:00 GMT+2

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

Angel 2S2 комментирует... четверг, 12 февраля 2009 г. в 15:04:00 GMT+2

Спасибо за информацию :)

Shad комментирует... понедельник, 10 августа 2009 г. в 21:31:00 GMT+3

никогда не пробывали смотреть /etc/issue ?

Unknown комментирует... вторник, 11 августа 2009 г. в 09:53:00 GMT+3

Посмотрите UPD#3, там как раз о нем речь и идет :)

Просто когда задался этим вопросом, я еще не знал про него :)

Отправить комментарий