Чи можна зберегти як судо від нано після того, як ви забули запустити як судо?


49

Багато часу я редагую файл з nano, намагаюся зберегти та отримати помилку дозволу, оскільки забув запустити його як sudo. Чи є якийсь швидкий спосіб я стати судо, не потребуючи повторного відкриття та редагування файла?


злиття з цим питанням було запропоновано. В основному та сама проблема, але vim. Я розглядаю питання про злиття ... хоча я також розглядаю той факт, що конкретні інструкції vim не працюватимуть nano.
ксенотеррацид

1
@xenaterracide - Я вважаю, що питання vim - це особливий випадок цього, оскільки він насправді має рішення, і, здається, загального випадку немає. Я навіть не впевнений, що залежить від вас. :)
Kit Sunde

Ви можете зробити відображення у вашому .vimrc, щоб легко викликати функцію sudo tee: <pre> <code> "Дозволяє записувати у файли з кореневими привілеями cmap w !! w! Sudo tee%> / dev / null </pre> < / code>
jasonwryan

@xenoterracide: Відповідь Калеба про Нано є корисною, тому я думаю, що ми повинні залишатися лише про Нано.
Мікель

1
@mikel Я вирішив, що об'єднання недійсне. nanoне є vim... і ніяких nanoрішень, подібних до vimросійських, не представлено.
ксенотерацид

Відповіді:


37

Ні, ви не можете надати доступній програмі дозволів, яких вона не має під час її запуску, це буде отвір у безпеці, відоме як "ескалація привілеїв".

Дві речі, які ви можете зробити:

  1. Збережіть у тимчасовому файлі в / tmp або куди завгодно, закрийте редактор, а потім скиньте вміст тимчасового файлу у файл, який ви редагували. sudo cp $TMPFILE $FILE. Зауважте, що використовувати його mvдля цього не рекомендується через зміну права власності на файли та дозволи, які це може спричинити, ви просто хочете замінити вміст файлу, а не сам заповнювач файлу.
  2. Виберіть фоновий редактор за допомогою Ctrl+ z, змініть право власності на файл або дозволи, щоб ви могли писати на ньому, а потім скористайтеся fgдля повернення до редактора та збереження. Не забудьте виправити дозволи!

¹ Деякі редактори насправді можуть це зробити, запустивши новий процес з різними дозволами та передавши дані в цей процес для збереження. Дивіться, наприклад, це пов'язане питання щодо інших рішень у розширених редакторах, які дозволяють записати файловий буфер у технологічну трубку. Nano не має можливості запускати новий процес або передавати дані іншим процесам, тому він залишається поза цією стороною.


Відмінно. Дякую Калебу. Я просто зіткнувся з цією проблемою близько 30 хвилин тому. :)
boehj

2
@Caleb Ви можете використовувати команду tee зсередини vim, щоб зробити те, що ви описуєте::w !sudo tee

@hellojesus Блискучий трюк. Якщо ви хочете написати це як відповідь, я можу його зняти з мого. Я вважаю, що люди, окрім нано користувачів, потрапляють у цю ситуацію і можуть опинитися тут.
Калеб

4
Це питання, як передбачається, стосується нано. Якщо ми почнемо включати відповіді про Vim тут, який сенс у цьому питанні? У нас вже є коріння з Vim для Vim для Vim.
Мікель

2
Зберегти у тимчасовому файлі в / tmp - Як зберегти тимчасовий файл, перебуваючи всередині nano?
Ананд Рокз

7

Я щойно спробував nano, і що мене найбільше дивує, це навіть не попереджає, що файл читається лише тоді, коли ви починаєте редагувати файл. ( ОНОВЛЕННЯ: Мабуть, нано 2.2 попереджає; 2.0 ні. )

Ось (базовий) сценарій, який робить це.

Він перевіряє, чи можете ви редагувати файл, а якщо ви не можете, замість цього він виконує "nano" як root.

/ 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, тому сміливо пропонуйте краще ім'я.
(Я думаю, що повне реалізація цієї програми зробить Ві viewзайвим.)


Повні версії


1
Це насправді попереджає вас. Питання буде тоді, яку версію ви використовуєте. Крім того, в системах на базі Debian альтернативна система краще підходить тому, що ви пропонуєте.
0xC0000022L

2
Для довідки: [ Read ... lines (Warning: No write permission) ]це те, що з’являється праворуч над двома рядками довідки для ярликів (внизу екрана). Версія нано - 2.2.4.
0xC0000022L

Ах, це не попереджає в nano 2.0, саме з цим я тестував.
Мікель

класно, ми це розібрали :)
0xC0000022L
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.