Действительно ли возможно сохранить как sudo от нано после того, как Вы забыли работать как sudo?

Ваш первый аргумент иллюстрирует различие вполне хорошо.

\ls | grep Cases | less позволяет Вам просмотреть список имен файлов, произведенных ls и grep. Не имеет значения, что они, оказывается, имена файлов, они - просто некоторый текст.

\ls | grep Cases | xargs less позволяет Вам просмотреть файлы, имена которых производятся первой частью команды. xargs берет список имен файлов, как введено и команды на ее командной строке, и выполняет команду с именами файлов на ее командной строке.

При рассматривании использование xargs, имейте в виду, что это ожидает вход, отформатированный странным способом: разграниченный пробелом, с \, ' и " используемый для заключения в кавычки (необычным способом, потому что \ не специальные внутренние кавычки). Только используйте xargs если Вы Ваши имена файлов не содержите пробел или \'".

52
25.04.2011, 11:13
3 ответа

Нет, Вы не можете дать под управлением программе полномочия, которые она не имеет, когда она запускается, который был бы дырой в системе безопасности, известной как 'расширение полномочий' ¹.

Две вещи можно сделать:

  1. Сохраните во временный файл в/tmp или везде, где, закройте редактора, затем выведите содержание временного файла в файл, который Вы редактировали. sudo cp $TMPFILE $FILE. Обратите внимание, что не рекомендуется использовать mv для этого из-за изменения в принадлежности файла и полномочиях это, вероятно, вызовет, Вы просто хотите заменить содержание файла не сам заполнитель файла.
  2. Фон редактор с Ctrl+z, измените принадлежность файла или полномочия, таким образом, можно записать в него, затем используйте fg возвратиться к редактору и сохранить. Не забывайте исправлять полномочия!

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

41
27.01.2020, 19:33
  • 1
    Превосходный. Спасибо Caleb. Я просто столкнулся с этой проблемой приблизительно 30 минут назад. :) –  boehj 23.04.2011, 21:33
  • 2
    @Caleb можно использовать команду мишени из энергии, чтобы сделать то, что Вы описываете: :w !sudo tee –   24.04.2011, 19:41
  • 3
    @hellojesus Brilliant. Если Вы хотите описать это как ответ, я могу удалить его из моего. Я полагаю, что люди кроме нано пользователей входят в эту ситуацию и могут оказаться здесь. системный журнал –  Caleb 25.04.2011, 09:14
  • 4
    Этот вопрос, как предполагается, о нано. Если мы запускаем включая ответы о Vim здесь, какой смысл этого вопроса? У нас уже есть корень Становления из Vim для Vim. –  Mikel 25.04.2011, 11:13
  • 5
    Сохраните во временный файл в/tmp - Как сохранить для временной работы файла в то время как в нано? –  Anand Rockzz 23.04.2018, 10:03

Я просто попробовал nano, и то, что я нашел самым удивительным, является этим, даже не предупреждает Вас, что файл только для чтения, когда Вы начинаете пытаться отредактировать файл. (ОБНОВЛЕНИЕ: По-видимому, нано 2.2 действительно предупреждает; 2.0 не делает.)

Вот (основной) сценарий, который делает это.

Это проверяет, можно ли отредактировать файл, и если Вы не можете, это выполнить "нано" как корень вместо этого.

/usr/local/bin/edit (или ~/bin/edit)

sudo=                       # empty is false, non-empty is true
editor=nano                 # XXX check $EDITOR and $VISUAL

if test -e "$1" && test ! -w "$1"; then
    if test -t 0 && test -t 2; then
        printf "%s is not writable.  Edit with sudo? [y/n] " "$1" 1>&2
        read -n 1
        case $REPLY in
        y|Y)
            sudo=true
            ;;
        n|N)
            sudo=
            ;;
        *)
            printf "\nExpected y or n.  Exiting.\n" 1>&2
            exit 1
            ;;
        esac
    else
        printf "%s is not writable.  Fix the permissions or run \"view\" instead." "$1" 1>&2
        exit 1
    fi
fi

${sudo:+sudo} "$editor" "$1"

И команда я звонил view так, чтобы можно было избежать подсказки, если Вы знаете, что не собираетесь вносить любые изменения.

/usr/local/bin/view (или ~/bin/view)

editor=nano
readonlyflag=-v

"$editor" $readonlyflag "$1"

Уже существует названная программа view это - часть Vi/Vim, поэтому не стесняйтесь предлагать лучшее имя.
(Но я думаю, что полное внедрение этой программы сделало бы Vi view избыточный.)


Полные версии

7
27.01.2020, 19:33
  • 1
    Это действительно на самом деле предупреждает Вас. Вопрос затем был бы, какую версию Вы используете. Кроме того, в находящихся в Debian системах система альтернатив лучше подходит для того, что Вы предлагаете. –  0xC0000022L 07.05.2011, 01:25
  • 2
    Для Вашей ссылки: [ Read ... lines (Warning: No write permission) ] то, что появляется прямо выше двух строк справки для ярлыков (нижняя часть экрана). Нано версия 2.2.4. –  0xC0000022L 07.05.2011, 01:28
  • 3
    , это не предупреждает в нано 2.0, который является тем, с чем я тестировал. –  Mikel 07.05.2011, 01:38
  • 4
    , прохладный, мы отсортировали это :) –  0xC0000022L 07.05.2011, 01:44

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

function nano () {
  if [ ! -f "${@: -1}" ] || [ -w "${@: -1}" ]; then
    /bin/nano $@
  else
   echo "Write permission is NOT granted on ${@: -1}"
  fi
}
0
22.05.2020, 20:14

Теги

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