Я работаю в среде, где мы медленно переводим машины с Red Hat Enterprise Linux 5 на RHEL 6.
Мне нужно, чтобы некоторые из моих сценариев делали что-то немного отличающееся на машинах RHEL6 от того, что в настоящее время делается на машинах RHEL5.
Прагматичным решением является проверка во время выполнения и выполнение одних команд на RHEL5, других на RHEL6 и некоторых на обеих.
Практическим примером этого является то, что мы используем модули среды, и моя строка .bashrc
включает module load git
, но на машинах RHEL6 эта команда выдает ошибку:
RHEL6 system, git should be installed - not loading module
Глядя в файл модуля, я нахожу следующий код:
set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
...
}
Кажется, это делает то, что я хочу, но я надеялся на что-то более короткое.
Итак, как проще всего отличить RHEL5 от RHEL6 в bash-скрипте?
В идеале он должен быть устойчивым к разным основным версиям, но терпимо относиться к изменениям в младших номерах версий.
lsb_release
работу? (-r
должен дать вам только номер; попробуйте также-a
просмотреть все доступное) Если это так, то это также кросс-поставщик.git
модуль Bash, вы проверяете, существует ли он перед вызовом. Когда / если оно появится позже, результаты вашего чека изменяются, поэтому функция начинает работать без каких-либо дополнительных усилий.lsb_release -r
включен другой текст, напримерRelease: 5.8
. Как объясняет Деннис Каарсемакер , если вы используетеlsb_release -rs
вместо этого, вы получите только номер.Ответы:
Вы также можете использовать
lsb_release
команду. Если вы уже уверены, что это RHEL, то получите номер основной версии:источник
lsb_release
на моих машинах RHEL / CentOS 5. Его нигде не найти 6 или 7.Это был бы самый простой способ, о котором я могу думать.
источник
lsb_release
который работает только на 5.использование
rpm -q |grep redhat-release-server
/etc/redhat-release
Файл может быть отредактирован с помощью администратора , глядя установить программное обеспечение сторонних производителей без выполнения фактического обновления операционной системы.источник
rpm -qa
вместоrpm -q
? Использование-q
само по себе требует аргумента запроса.7.4
пока я не побежал с этим-qa
Вы можете расширить это для нескольких дистрибутивов Linux, используя
/etc/issue
файл вместо/etc/redhat-release
файла.источник
rpm -q --queryformat '%{RELEASE}' rpm
печатает что-то вроде25.el7
. Тогда нужно просто взять последнюю цифру (ы). Проверено на RHEL 5,6,7 и Fedora 24.Как отмечали другие,
lsb-version
возможно, не установлены. Кроме того, существует как минимум одна система RHEL5, в которой не установленredhat-release-server
пакет.источник
Вот еще один, более точный способ получить этот результат. В пакеты ядра в RHEL включена строка 'elN', где N будет представлять основную версию ОС. Таким образом, можно определить следующую команду, чтобы определить версию RHEL:
Это вернет строку «el5», «el6» или «el7», в зависимости от соответствия строки на данном хосте.
источник
Я закончил тем, что использовал ответ Джорданма , но добавил свой собственный поворот.
Потому что я не хотел, чтобы все мои команды rhel6 вместе и все мои команды rhel5 были вместе, а перемежался в их собственном разделе, и я не хотел повторять этот код каждый раз, когда захотел переключиться, вместо этого я сделал это:
Таким образом, я мог бы делать такие вещи, как:
и т.п.
источник
если ваше дальнейшее намерение заключается в управлении модульными файлами на основе контекста, я предлагаю вам ознакомиться с EasyBuild и некоторой связанной логикой, живущей в формате Python:
источник
Все упомянутые здесь методы основаны на текстовых файлах, и поэтому могут вводить в заблуждение. Кто-то с правом доступа может изменить содержимое / etc / redhat-release, / etc / issue и т. Д. Даже для того, чтобы просто запутать эту информацию. Более надежный метод предполагает знание версий ядра, обычно предоставляемых Red Hat для каждой версии RHEL:
неизменно до сих пор вы можете узнать работающую версию ядра, запустив
uname -r
. Вы можете полюбить что-то вродеЭто даст конкретную информацию о ядре, как в приведенной выше таблице. Возможно, вы сможете проводить параллели с другими дистрибутивами, если они постоянно используют версии ядра.
источник
RHEL 6 добавил файл / etc / system-release-cpe. Содержит
:
разделенную строку, которая может выглядеть примерно так:Теперь достаточно получить поля $ 5 и $ 7, чтобы получить версию RHEL и вариант RHEL.
источник
Начиная с RHEL 6, самый краткий способ будет:
источник
cut -d: -f5 /etc/system-release-cpu
и избегали UUOC. Однако задавался вопрос о переходе с RHEL 5 на 6. Если это работает только с RHEL 6 и далее, разве он не удовлетворяет требованиям вопроса?