7

sudo echo "что-то" >> /etc/привилегированныйФайл не работает

4

Заголовок: Проблема с использованием sudo для редиректа вывода в файл, на который нет разрешений

Текст вопроса:

Это довольно простая проблема, по крайней мере, так кажется. Я сталкиваюсь с ней, когда пытаюсь использовать sudo для изменения файловой системы в Linux, например, пытаюсь добавить информацию в файл <code>/etc/hosts</code> или в аналогичный файл.

Я часто пытаюсь выполнить команду с использованием <code>&gt;</code> или <code>&gt;&gt;</code> для перенаправления вывода, но в результате получаю сообщение об ошибке, даже если у меня есть привилегии root.

Вопрос: Есть ли способ осуществить редирект без необходимости переходить в режим root с помощью <code>su</code> или <code>sudo su</code>?

Спасибо за помощь!

5 ответ(ов)

11

Используйте tee --append или tee -a.

Для добавления строки в файл /etc/apt/sources.list вы можете использовать следующую команду:

echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list

Чтобы избежать вывода данных в консоль, перенаправьте вывод в /dev/null:

echo 'deb blah ... blah' | sudo tee -a /etc/apt/sources.list > /dev/null

Не забудьте про флаг (-a/--append)! Просто tee будет работать как >, и перезапишет ваш файл. tee -a работает как >> и добавляет данные в конец файла.

3

Проблема заключается в том, что перенаправление вывода выполняется оболочкой, а не командой sudo или echo, поэтому это происходит от имени вашего обычного пользователя.

Попробуйте следующий фрагмент кода:

sudo sh -c "echo 'что-то' >> /etc/privilegedfile"
0

Проблема в том, что редирект обрабатывает ваша оболочка; она пытается открыть файл с вашими правами доступа, а не с правами процесса, который вы запускаете с помощью sudo.

Попробуйте использовать что-то вроде этого:

sudo sh -c "echo 'что-то' >> /etc/privilegedFile"
0

Команда sudo sh -c "echo 127.0.0.1 localhost >> /etc/hosts" выполняет следующие действия:

  1. sudo — это команда, которая позволяет выполнять команды с привилегиями суперпользователя (root). Это необходимо, так как файл /etc/hosts может быть доступен только для чтения обычным пользователям.

  2. sh -c — это команда, которая запускает новую оболочку и выполняет указанный внутри неё скрипт или команду. В данном случае, это команда echo.

  3. echo 127.0.0.1 localhost — эта часть команды выводит строку 127.0.0.1 localhost, где 127.0.0.1 — это IP-адрес, а localhost — его стандартное имя.

  4. >> /etc/hosts — данный оператор >> используется для добавления (аппенда) вывода команды в конец указанного файла, в данном случае в файл /etc/hosts. Если файл не существует, он будет создан.

Таким образом, вся команда добавляет строку 127.0.0.1 localhost в файл /etc/hosts. Это может быть полезно, если вы хотите убедиться, что имя "localhost" всегда ссылается на ваш локальный компьютер. Однако, будьте внимательны: многократное выполнение этой команды может привести к дублированию этой строки в файле, что не рекомендуется.

0

Использование

sudo sh -c "echo >> somefile"

должно сработать. Проблема в том, что > и >> обрабатываются вашей оболочкой, а не командой, выполненной с помощью sudo. Поэтому права доступа будут определяться вашими правами, а не правами пользователя, в которых вы выполняете команду с помощью sudo.

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

echo "текст" | sudo tee -a somefile

Это поможет получить доступ к файлу с нужными правами. Команда tee перенаправляет текст в файл и работает с правами пользователя, под которым вы выполнили sudo, обеспечивая правильный доступ для записи в файл.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь