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