Вы уже продемонстрировали с file *
то, что шарик оболочки (*
) может взять этот файл, поэтому теперь просто сделайте rm
на том шарике.
rm -i *
n
для всех файлов за исключением того с на вид невидимым именем файлаМожно также использовать lsb_release
команда. Если Вы уже уверены, что это - RHEL, получение номера основной версии:
majversion=$(lsb_release -rs | cut -f1 -d.)
if grep -q -i "release 6" /etc/redhat-release
then
echo "running RHEL 6.x"
fi
Это было бы самым простым способом, которым я могу думать.
lsb_release
который только, кажется, работает на 5.
– Dale Anderson
07.06.2017, 21:38
Вы могли подробно остановиться на этом для нескольких дистрибутивов Linux при помощи /etc/issue
файл вместо /etc/redhat-release
файл.
Я закончил тем, что использовал ответ jordanms, но добавил мое собственное скручивание.
Поскольку я не хотел иметь все свои команды rhel6 вместе и все мои команды rhel5 вместе, но чередованный в их собственном разделе, и я не хотел должным быть копировать этот код каждый раз I wated для переключения, вместо этого я сделал это:
if grep -q -i "release 6" /etc/redhat-release ; then
rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
rhel5only=1
else
echo "Running neither RHEL6.x nor RHEL 5.x !"
fi
Тем путем я мог сделать вещи как:
# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7
# Eclipse
module load eclipse
# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3
и т.д.
если Ваше дальнейшее намерение состоит в том, чтобы управлять modulefiles на на основание контекста, я предлагаю, чтобы Вы проверили EasyBuild и некоторую связанную логику, живущую в формате Python:
Все методы, упомянутые здесь, полагаются на текстовые файлы и, как таковые, могут вводить в заблуждение. Кто-то с правом доступа может изменить содержимое / etc / redhat-release, / etc / issue и т. Д. Даже для того, чтобы просто скрыть эту информацию. Более надежный метод предполагает знание выпусков ядра, обычно предоставляемых Red Hat для каждой версии RHEL:
до сих пор, вы можете узнать текущий выпуск ядра, выполнив uname -r
. Вы можете стать более интересным, выполнив что-то вроде
uname -r | awk -F- '{print $1}'
. Это даст конкретную информацию о ядре, как в приведенной выше таблице. Вы можете провести параллели с другими дистрибутивами, если они постоянно используют выпуски ядра.
Используйте rpm -q | grep redhat-release-server
Файл / etc / redhat-release
может были отредактированы администратором, который хочет установить стороннее программное обеспечение без выполнения фактического обновления ОС.
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)
rpm -q --queryformat '% {RELEASE}' rpm
выводит что-то вроде 25.el7
. Тогда просто нужно взять последнюю цифру (а). Проверено на RHEL 5,6,7 и Fedora 24.
Как указывали другие, lsb-version
не может быть установлена. Кроме того, существует по крайней мере одна система RHEL5, в которой не установлен пакет redhat-release-server
.
Начиная с RHEL 6, наиболее лаконичным способом будет:
cat /etc/system-release-cpe | cut -d ':' -f5
Вот еще один, более точный способ получить этот результат. В пакеты ядра в RHEL включена строка «elN», где N представляет основную версию ОС. Таким образом, можно запустить следующую команду, чтобы определить версию RHEL:
# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'
Это вернет строку «el5», «el6» или «el7», в зависимости от соответствующей строки на данном хосте.
Ответ пользователя 7610 работает, но он не будет работать, если в выпуске также есть второстепенная версия. Например, у меня Redhat 5 с el5 _11.
# rpm -q --queryformat '%{RELEASE}' rpm
36.el5_11
# rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$
11
Я попробовал решения user7610 и Brād одновременно. Это решило мою проблему с общим скриптом для всех версий RHEL.
# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/' | grep -o [[:digit:]]*\$
5
lsb_release
на моих машинах RHEL/CentOS 5. Это нигде не найти на 6 или 7. – Dale Anderson 07.06.2017, 21:38