Я протестировал перенос этого скрипта из /etc/rc0.d
в /etc/rcS.d
, /etc/rc1.d
, /etc/rc2.d
и /etc/rc3.d
со следующими результатами:
/ etc /rc0.d
- / etc / DR_Network_Configured создается, но перезагрузки не происходит. Подводя итог, когда система загружается по умолчанию ( milestone / multi-user-server: default
, аналогично уровню выполнения 3), она выполняет сценарии запуска, расположенные в / etc /rc0.d
, /etc/rcS.d
, /etc/rc2.d
и /etc/rc3.d
, но не /etc/rc1.d
.
Команды перезагрузки и инициализации не работают при запуске из сценария запуска в /etc/rc0.d
, /etc/rcS.d
(и, возможно, / etc / rc1.d
, хотя я не могу подтвердить это, поскольку сценарий запуска в этом каталоге никогда не запускался). Они работают при запуске из сценариев запуска в /etc/rc2.d
и /etc/rc3.d
.
Я полагаю, что это сделано для предотвращения постоянной перезагрузки системы. Если из-за ошибочного сценария запуска в /etc/rc2.d
или /etc/rc3.d
система войдет в бесконечный цикл перезагрузки, то ее можно будет довольно легко перезагрузить. однопользовательский этап и вызывающий нарушение сценарий запуска отключены, вместо того, чтобы искать альтернативный загрузочный носитель для загрузки, смонтировать корневой том / диск и отключить вызывающий нарушение сценарий.
На основании вышеизложенного я изменил свой сценарий реконфигурации сети следующим образом:
/etc/rc0.d
, чтобы изменить настройки сети. /etc/rc2.d/S99reboot
, который перезагружал систему. / etc / DR_Network_Configured
и существует /etc/rc2.d/S99reboot
, удалите последний, чтобы избежать постоянной перезагрузки системы. Мой соответствующий код:
#!/sbin/sh
reboot_script="/etc/rc2.d/S99reboot"
Create_Reboot_File ()
{
echo "#!/sbin/sh" > $reboot_script
echo "case \"\$1\" in" >> $reboot_script
echo "start)" >> $reboot_script
echo " init 6" >> $reboot_script
echo " exit 0" >> $reboot_script
echo " ;;" >> $reboot_script
echo "esac" >> $reboot_script
echo "exit 0" >> $reboot_script
chmod 740 $reboot_script
chown root:root $reboot_file
}
case "$1" in
start)
if [ -f /etc/DR_Network_Configured ]; then
[ -f $reboot_script ] && rm $reboot_script
exit 0
else
# My reconfigure network functions are here
# ...
touch /etc/DR_Network_Configured
Create_Reboot_File
fi
exit 0
;;
*)
echo "Usage: $0 { start }"
exit 1
;;
esac
exit 0
Я думаю об этом следующим образом: Mount
- это инструмент, который говорит Система для интерпретации содержимого некоторых файлов как деревья каталогов.
/ dev / cdrom
- это файл, он представляет строку байтов, хранящихся на CD. Mount -T ISO9660 / DEV / CDROM / Media / CDROM
, вы говорите системе: «Возьми эту очень длинную строку байтов, которые у вас есть в / dev / CDROM
, интерпретируйте его как дерево каталога в формате ISO9660 и позвольте мне получить доступ к нему под местом / Media / CDRom
». , чтобы получить доступ
. Попробуйте это: dd if=/dev/zero of=fs-image bs=1M count=50 mke2fs fs-image sudo mount fs-image /some/mount/point
(первые две команды требуются только в первый раз, при подготовке файла изображения.)
-121--32267- SCP
имеет опцию -P
-P :
-p Preserves modification times, access times, and modes from the
original file.
, поэтому устанавливайте ваши разрешения локально, а затем выполните SCP
.
или, вы можете использовать TAR
:
tar -zc file.* | ssh guy@... 'tar -zx -C ~/public_html/kool-stuff; chmod 755 ~/public_html/kool-stuff/file.*'
в любом случае, я сомневаюсь Выполнение Разрешения необходимы, если они являются файлами.