Как я передаю файлы по ssh и также изменяю их разрешение на удаленном сервере, не имея необходимость входить в систему дважды

Я протестировал перенос этого скрипта из /etc/rc0.d в /etc/rcS.d , /etc/rc1.d , /etc/rc2.d и /etc/rc3.d со следующими результатами:

  • /etc/rcS.d - то же поведение, что и / etc /rc0.d - / etc / DR_Network_Configured создается, но перезагрузки не происходит.
  • /etc/rc1.d - / etc / DR_Network_Configured не создается, и перезагрузки не происходит.
  • /etc/rc2.d - / etc / DR_Network_Configured создается, и система перезагружается.
  • /etc/rc3.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 система войдет в бесконечный цикл перезагрузки, то ее можно будет довольно легко перезагрузить. однопользовательский этап и вызывающий нарушение сценарий запуска отключены, вместо того, чтобы искать альтернативный загрузочный носитель для загрузки, смонтировать корневой том / диск и отключить вызывающий нарушение сценарий.

На основании вышеизложенного я изменил свой сценарий реконфигурации сети следующим образом:

  1. Я сохранил свой сценарий в /etc/rc0.d , чтобы изменить настройки сети.
  2. Добавлена ​​функция, позволяющая перезагрузить систему после перенастройки сети, создавался новый сценарий /etc/rc2.d/S99reboot , который перезагружал систему.
  3. Если существует файл / 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
1
04.09.2016, 00:28
1 ответ

Я думаю об этом следующим образом: 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.*'

в любом случае, я сомневаюсь Выполнение Разрешения необходимы, если они являются файлами.

1
27.01.2020, 23:51

Теги

Похожие вопросы