Я знаю команды для проверки имени машины Linux, работающей на моей машине. Например:
Ubuntu
cat /etc/version
CentOS
cat /etc/issue
Как мне получить выходные данные от терминала и сравнить, чтобы увидеть, является ли это UBUNTU или CENTOS и выполнить следующие команды?
apt-get install updates
или
yum update
Ubuntu 14.04
cat /etc/issue
command-line
bash
scripts
Шекхар
источник
источник
Ответы:
К сожалению, нет верного, простого способа получить название дистрибутива. Большинство крупных дистрибутивов движутся к системе, где они используют
/etc/os-release
для хранения этой информации. Большинство современных дистрибутивов также включаютlsb_release
инструменты, но они не всегда устанавливаются по умолчанию. Итак, вот несколько подходов, которые вы можете использовать:использование
/etc/os-release
Используйте
lsb_release
инструменты, если они доступныИспользуйте более сложный скрипт, который должен работать для большинства дистрибутивов:
Разобрать информацию о версии,
gcc
если установлена:CentOS 5.x
CentOS 6.x
Ubuntu 12.04
Ubuntu 14.04
Это было в основном скопировано из отличного ответа @ slm на мой вопрос здесь .
источник
<—
Это совсем не так. Сильвен Пино , например, продемонстрировал тривиальную однострочную строку, надежно опрашивающую текущий тип платформы путем переноса на Python - который предустановлен на большинстве платформ (включая Ubuntu). Сценарии оболочки никогда не должны пытаться вручную запрашивать метаданные платформы с помощью низкоуровневых непереносимых тестов, подобных тем, которые реализованы в этом ответе.awk
илиmawk
или ау другой реализации будет работать так же хорошо.lsb_release
:lsb_release -d | awk -F"\t" '{print $2}' | awk -F " " '{print $1}'
lsb_release -d | awk '{print $3}'
илиgrep -oP 'VERSION="\K\S+' /etc/os-release
, нет необходимости в двойном канале для awk.Вам не нужен bash для выполнения такой задачи, и я бы предложил использовать высокоуровневый подход, чтобы избежать работы с файлами типа
/etc/version
и/etc/issue
(у меня нет / etc / version в 13.10).Поэтому я рекомендую использовать эту команду вместо:
Модуль платформы python будет работать в обеих системах, остальная часть команды проверит, вернул ли Ubuntu python и запустил ли он
apt-get
ещеyum
.источник
-i
вgrep
может помочь.Вот простой ответ, который я нахожу работающим во всех версиях Ubuntu / CentOS / RHEL простым присутствием файлов (конечно, не безотказно, если кто-то случайно выбрасывает / etc / redhat-release на ваши коробки Ubuntu и т. Д.):
источник
/etc/lsb-release
существует в CloudLinux (CentOS) 6.8, поэтому он будет возвращатьyum
иapt-get
.Используйте Chef для этих задач. ;-)
В Chef вы можете использовать
platform?
метод:Или:
Или:
Или:
источник
lsb_release
,/etc/os-release
), это решение имеет отчетливый недостаток , что требует Chef - тяжеловес инфраструктуры как код (IAC) рамок не устанавливается по умолчанию на большинстве платформ и требующие использования свой собственный предметно-ориентированный язык (DSL). Короче говоря, большинство пользователей , вероятно , просто хотят перенести на Python , который будет установлен по умолчанию на большинстве платформ (включая Ubuntu) и интерфейсы также с помощью сценариев оболочки.Проверьте Ubuntu в имени ядра:
источник
если есть только два дистрибутива, то вы можете сделать его короче:
каким-то образом
yum -v
вернуть ненулевое значение в CentOS, поэтому используйтеwhich
вместо этого,конечно, вы должны рассмотреть сценарий, если он не
which
установлен.источник
Следующий скрипт должен сказать, если это Ubuntu. Если это не так, и единственный другой вариант, который у вас есть, это CentOS, вы должны указать его в
else
предложении:источник
lsb_release
инструмента, который должен считывать одни и те же файлы.lsb_release -i
сообщаетDistributor ID: Ubuntu
илиDistributor ID: CentOS
в этих случаях.Выполнить
/etc/os-release
в вложенной оболочке и повторить его значение:источник
Я бы использовал питон
источник
Использование этой команды работает в CentOS, Ubuntu и Debian:
grep "^NAME=" /etc/os-release |cut -d "=" -f 2 | sed -e 's/^"//' -e 's/"$//'
В Debian это даёт
Debian GNU/Linux
, в Ubuntu даёт,Ubuntu
а в CentOS даётCentOS Linux
.Преимущество использования grep, cut и sed вместо gawk очевидно: Debian не имеет gawk, установленного по умолчанию, поэтому вы не можете полагаться на него в произвольной коробке Debian.
источник