1

Я новичок в Linux Shell Script. Я хочу изменить IP-адрес с помощью Linux Shell Script и вызывать его через веб-приложение PHP.

Я закончил свое веб-приложение PHP и сценарий оболочки. Прежде чем они объединятся и будут работать, я хотел бы проверить, может ли скрипт сценария работать правильно.

Мой Linux Shell Script будет хранить 7 переменных, исключая $ 0 (имя скрипта).:

  1. Файл сетевого интерфейса (/etc/sysconfig/network-scripts/ifcfg-{XXX})
  2. Старый IP-адрес
  3. Новый IP-адрес
  4. Маска старой подсети
  5. Новая маска подсети
  6. Старые Ворота
  7. Новые Ворота

Большинство проверок уже было выполнено моим PHP-приложением, так как я новичок в Linux Shell Script, я не хочу делать это в моем сценарии оболочки. Мое PHP-приложение может убедиться, что данные верны и заполнены значениями.

Таким образом, чтобы запустить этот сценарий оболочки, я набираю следующее, чтобы увидеть результаты:

sh ./ipchanger.sh /etc/sysconfig/network-scripts/ens32 192.168.1.18 192.168.1.201 32 24 192.168.1.1 192.168.1.1 

Имея в виду:

  1. Укажите целевой файл сетевых скриптов.
  2. Изменение IP с 192.168.1.18 на 192.168.1.201 .
  3. Изменение маски подсети с 255.255.255.255 на 255.255.255.0 .

На самом деле он будет запускать следующие команды:

sudo sed -i -r "s/$currentIpAddress/$newIpAddress/g" $fileName
sudo sed -i -r "s/$currentSubnetMask/$newSubnetMask/g" $fileName
sudo sed -i -r "s/$currentGateway/$newGateway/g" $fileName

Он не возвращает ошибку и выглядит хорошо, так как дата последнего изменения файла сетевого скрипта была обновлена. Но когда я открыл файл, ничего не изменилось.

Затем я echo команды, он возвращает именно ту команду, которую я хотел. Затем я запускаю все три строки в командной строке и снова проверяю файл, вся информация изменилась!

1 ответ1

0

Проблема, скорее всего, в том, что бит sudo в начале каждой строки. sudo подразумевает «беги как корень». Вы, вероятно, обнаружите, что, по сути, учетная запись, в которую вы вошли, как в командной строке, была настроена в /etc/sudoers для работы из командной строки, но не через скрипт PHP - и действительно, вам нужно учитывать последствия об этом, когда вы запускаете его через веб-пользователя - веб-пользователь, вероятно, не будет настроен в /etc/sudoers - и не должен быть!

Вы можете проверить эту теорию, изменив право собственности на файлы и запустив скрипт без sudo . Чтобы изменить владельца файла, просто выберите файл chown filename.ext

Я полагаю, что вам будет лучше

  1. Создание нового каталога в /var/www (или там, где вам удобно и у пользователя есть доступ)
  2. Перемещение соответствующих файлов конфигурации в этот каталог
  3. Ссылки на отдельные файлы или каталог, содержащий его, на www.
  4. ИЗМЕНИТЬ СОБСТВЕННОСТЬ ЭТИХ ФАЙЛОВ В WWW каталог
  5. Бросьте sudo в начале каждой команды. Лучше почему бы не бросить вызов скрипта и просто записать изменения в PHP.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .