Вопрос или проблема
У меня есть команда, которая правильно создает файл /etc/hosts, который я хочу создать. Однако я не могу записать его во 2-й форме из-за прав, конечно. Я попробовал варианты 3-й формы, но по-прежнему возникает ошибка с правами. Может кто-то подскажет, что попробовать?
cat hosts.tmp ; echo -n "myremotehost " ; cat ip.txt
cat hosts.tmp ; echo -n "myremotehost " ; cat ip.txt > /etc/hosts
cat hosts.tmp ; echo -n "myremotehost " ; echo mypassword | sudo -S cat ip.txt > /etc/hosts
Мне было сложно это выяснить! (Относительный новичок в Linux.)
В терминале введите sudo -i
, затем войдите, используя пароль пользователя.
Вы окажетесь в корневом каталоге с божественными полномочиями… :>)
Я также обнаружил, что bash filename.sh
запустит скрипт.
Простите меня, я испытываю огромное чувство удовлетворения,
написав скрипт (по предложениям в другом посте), который
убил все рекламы на YouTube!
Я бы поместил инструкции по изменению вашего файла /etc/hosts
в скрипт оболочки, скажем, modify-hosts.sh
, и затем выполнил
sudo modify-hosts.sh
Если вы настаиваете на запуске скрипта без ввода пароля, добавьте запись NOPASSWD
специально для этого скрипта и вашего имени пользователя в /etc/sudoers
.
Что касается содержимого файла, вы можете сделать:
cp hosts.tmp > /etc/hosts
echo "myremotehost $(cat /path/to/ip.txt)" >> /etc/hosts
Более удобно, если myhostname
уже имеет запись в /etc/hosts
, вы можете отредактировать его на месте:
sed -i -e 's/myhostname .*/myhostname '$(cat ip.txt)"https://askubuntu.com/" /etc/hosts
И это выражение вы даже можете sudo
выполнить в одной строке
sudo sed -i -e 's/myhostname .*/myhostname '$(cat ip.txt)"https://askubuntu.com/" /etc/hosts
без возникновения проблем с переадресацией.
Ответ или решение
Для обновления файла hosts
в операционной системе Linux, существует несколько способов, которые могут быть использованы в зависимости от требований к правам доступа и структуры вашей команды. Часто у пользователей возникают сложности из-за недостатка привилегий, поэтому я предлагаю несколько вариантов, как можно эффективно справиться с этой задачей.
1. Создание скрипта для обновления файла hosts
Первое, что стоит сделать, — это написать скрипт, который будет отвечать за обновление файла hosts
. Назовем его, например, modify-hosts.sh
. Этот скрипт должен включать следующие команды:
#!/bin/bash
# Сначала создаем резервную копию существующего файла hosts
cp /etc/hosts /etc/hosts.backup
# Объединяем содержимое hosts.tmp и IP-адрес из ip.txt, добавляя новую строку в файл hosts
cat hosts.tmp > /etc/hosts
echo "myremotehost $(cat ip.txt)" >> /etc/hosts
2. Запуск скрипта с правами администратора
Для того чтобы запустить скрипт и обновить файл hosts
, вам понадобятся права администратора. Это можно сделать с помощью команды:
sudo bash modify-hosts.sh
3. Настройка sudo без ввода пароля (по желанию)
Если вы хотите запускать этот скрипт без необходимости ввода пароля, вы можете добавить запись в файл /etc/sudoers
. Для этого используйте команду:
sudo visudo
Затем добавьте следующую строку, заменив your_username
на ваше имя пользователя:
your_username ALL=(ALL) NOPASSWD: /path/to/modify-hosts.sh
4. Прямое редактирование файла hosts
Еще один подход — это использовать команду sed
для редактирования файла hosts
без необходимости создания дополнительного скрипта. Это можно сделать так:
sudo sed -i -e 's/myhostname .*/myhostname '"$(cat ip.txt)"'/' /etc/hosts
Эта команда заменит существующую строку с myhostname
на новую строку, содержащую актуальный IP-адрес.
Заключение
В зависимости от ваших предпочтений, вы можете выбрать один из предложенных методов. Скрипт — отличный способ автоматизировать задачу, а использование команды sudo
вместе с sed
может сэкономить время, если нужно быстро обновить файл. Убедитесь, что у вас есть резервная копия файла hosts
, чтобы избежать возможных ошибок, которые могут привести к проблемам с сетью.
Эти методы помогут вам эффективно управлять файлом hosts
в вашей системе Linux. Не забывайте быть внимательными с правами доступа и изменениями в системных файлах.