awk
здесь будет лучшим выбором:
DB_NAME=test; export DB_NAME
file=$(awk -F: '$1 == ENVIRON["DB_NAME"] {print $2; exit}' < /etc/oratab)
printf '%s\n' "$file"
На Solaris обязательно выполните:
PATH=$(getconf PATH):$PATH
(и используйте #! /usr/xpg4/bin/sh -
, если на Solaris 10 и старше ), чтобы иметь стандартные утилиты. Или используйте command -p awk
. Иначе можно получить дедовский awk
из 70-х годов.
В RHEL 6 /etc/rc.d/init.d/
— это фактическое расположение сценариев запуска и завершения работы в стиле SysVinit -. /etc/init.d
является символической ссылкой на него.
Каталоги /etc/rc.d/rc[0-6].d
должны содержать только символические ссылки, указывающие на скрипты в /etc/rc.d/init.d/
. Существует также набор символических ссылок в /etc/rc[0-6].d
, указывающих на соответствующие каталоги в /etc/rc.d/
.
Лучше всего восстановить эти каталоги из резервной копии, которая изначально была взята с того же сервера, так как это гарантирует, что у вас будет точно такая же конфигурация, как и раньше.
Но если у вас есть несколько серверов, сконфигурированных одинаково (= установлены одни и те же RPM, запущены одни и те же службы ), то вы можете получить довольно хорошие (, но не обязательно идеальные )результаты, скопировав каталоги.
Я определенно рекомендую сначала скопировать /etc/rc.d/rc
, /etc/rc.d/rc.sysinit
с другого сервера, так как они, скорее всего, не изменятся между серверами. Без этих сценариев сервер, безусловно, перейдет в однопользовательский режим очень рано в процессе загрузки, что может сделать дальнейшее восстановление более неудобным.
/etc/rc.d/rc.local
могут изменяться или не изменяться вашими локальными администраторами; по умолчанию он ничего не делает, но лучше, чтобы он существовал. Так что скопируй и егоно если он имеет содержимое, отличное от -по умолчанию, убедитесь, что содержимое применимо.
Затем вы можете скопировать содержимое /etc/rc.d/init.d
с сервера, настроенного так же, как поврежденная система, а затем использовать эти команды для восстановления символических ссылок по умолчанию для сценариев:
cd /etc/rc.d/init.d
for i in *; do chkconfig --add $i; done
Это восстановит заводскую настройку по умолчанию с включенной/отключенной конфигурацией различных служб; после этого вы должны запустить chkconfig --list
как на поврежденном сервере, так и на другом идентично -сконфигурированном сервере, и использовать команды chkconfig <service name> on
/ chkconfig <service name> off
для настройки включенного/отключенного состояния различных служб, чтобы они соответствовали состоянию других идентично -сконфигурированный сервер на самом деле имеет (или что-то другое, имеющее смысл в отношении цели поврежденного сервера, если другой сервер не совсем идентичен ).
Затем вы можете использовать rpm -Va | grep /etc/rc.d/init.d
, чтобы убедиться, что все сценарии для программного обеспечения, установленного из пакетов RPM, присутствуют. В нем будут перечислены все сценарии, которые отсутствуют или изменены по сравнению с их состоянием по умолчанию, как доставленные в RPM. Если некоторые скрипты отсутствуют, yum reinstall <package name>
может быть простым способом их исправить.
Если у вас есть стороннее -программное обеспечение, которое не установлено из RPM-пакетов, вам необходимо ознакомиться с их инструкциями по установке и проверить, есть ли у них сценарии запуска -, которые нужно заменить вручную.