Sudo olarak çalıştırmayı unuttuktan sonra nano'dan sudo olarak kaydetmek mümkün mü?


49

Nano'lu bir dosyayı düzenlerken çoğu zaman, sudo olarak çalıştırmayı unuttuğum için kaydetmeye ve izin hatası almaya çalış. Dosyayı yeniden açıp yeniden düzenlemek zorunda kalmadan sudo olabilmemin hızlı bir yolu var mı?


bu soru ile birleşme önerildi. Temelde aynı problem, ama vim. Birleşmeyi düşünüyorum ... ama vim'e özgü talimatların işe yaramayacağını da düşünüyorum nano.
xenoterracide

1
@ xenaterracide - Bence vim sorusu bunun özel bir örneği, çünkü bunun bir çözümü var ve genel durumun da bir sorunu yok gibi görünüyor. Ben de sana kalmış emin değilim. :)
Kit Sunde

.Vimrc'nizde sudo tee işlevini kolayca çağırmak için bir eşleme yapabilirsiniz: <pre> <code> "Kök ayrıcalıklarına sahip dosyalara yazma izni verir w !! w! Sudo tee%> / dev / null </pre> < / code>
jasonwryan

@ xenoterracide: Caleb'in Nano hakkındaki cevabı yararlıdır, bu yüzden bunu sadece Nano ile ilgili tutmalıyız.
Mikel

1
@mikel Birleşmenin geçersiz olduğuna karar verdim. nanodeğildir vim... ve nanokendilerine benzer hiçbir çözüm vimsunmamıştır.
xenoterracide

Yanıtlar:


37

Hayır, başladığında sahip olmadığı, 'ayrıcalık yükselmesi' olarak bilinen güvenlik açığı olan çalışan bir program izni veremezsiniz.

Yapabileceğiniz iki şey:

  1. / Tmp veya nerede bir geçici dosyaya kaydedin, düzenleyiciyi kapatın, sonra temp dosyasının içeriğini düzenlediğiniz dosyaya boşaltın. sudo cp $TMPFILE $FILE. mvDosya mülkiyeti değişikliği ve buna neden olması muhtemel izinler nedeniyle bunun kullanılması tavsiye edilmez , sadece dosya yer tutucusu yerine dosya içeriğini değiştirmek istediğinizi unutmayın.
  2. Editöre Ctrl+ ile arka plan yapın, zdosya sahipliğini veya izinleri değiştirin, böylece ona yazabilirsiniz, ardından fgeditöre geri dönüp kaydetmek için kullanın. İzinleri düzeltmeyi unutma!

¹ Bazı editörler bunu, farklı izinlere sahip yeni bir işlem başlatarak ve verileri tasarruf için bu işleme erteleyerek gerçekleştirebilirler. Örneğin , dosya arabelleğini bir işlem borusuna yazmayı sağlayan gelişmiş düzenleyicilerdeki diğer çözümler için bu soruya bakın . Nano yeni bir işlem başlatma veya başka işlemlere veri aktarma yeteneğine sahip olmadığı için, bu tarafın dışında kalıyor.


Mükemmel. Teşekkürler Caleb. Sadece 30 dakika önce bu problemle karşılaştım. :)
boehj

2
@Caleb Tanımladığınız şeyi yapmak için tee komutunu vim içinden kullanabilirsiniz::w !sudo tee

@hellojesus Parlak bir numara. Bunu bir cevap olarak yazmak istiyorsan, onu benimkinden kaldırabilirim. Nano kullanıcıları dışındaki insanların bu duruma girdiğini ve kendilerini burada bulabileceğini düşünüyorum.
Caleb

4
Bu sorunun nano hakkında olması gerekiyordu. Buraya Vim hakkında cevaplar eklemeye başlarsak, bu sorunun amacı ne? Zaten Vim için Vim'in içinden kök olmak .
Mikel

2
/ Tmp geçici bir dosyaya kaydet - Nasıl iç nano ederken geçici dosyaya kaydedilir?
Anand Rockzz

7

Az önce denedim nanove en şaşırtıcı bulduğum şey, dosyayı düzenlemeye başladığınızda dosyanın salt okunur olduğu konusunda sizi uyarmamasıdır. ( GÜNCELLEME: Görünüşe göre nano 2.2 uyardı; 2.0 değil. )

İşte bunu yapan bir (temel) script.

Dosyayı düzenleyip düzenleyemeyeceğinizi kontrol eder ve eğer yapamazsanız, bunun yerine "nano" yu kök olarak çalıştırır.

/ usr / local / bin / edit (veya ~ / 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"

Ve aradığım bir komut, viewböylece herhangi bir değişiklik yapmayacağınızı bilirseniz istemi önleyebilirsiniz.

/ usr / yerel / bin / görünüm (veya ~ / bin / görünüm )

editor=nano
readonlyflag=-v

"$editor" $readonlyflag "$1"

viewVi / Vim'in bir parçası olan bir program zaten var, bu yüzden daha iyi bir isim önermekten çekinmeyin.
(Ancak, bu programın tam olarak uygulanmasının Vi'nin viewgereksiz hale geleceğini düşünüyorum .)


Tam sürümleri


1
Aslında seni uyarıyor. Soru o zaman kullanmakta olduğunuz sürümü olacaktır. Ayrıca, Debian tabanlı sistemlerde alternatif sistem önerdiğiniz şey için daha uygundur.
0xC0000022L

2
Başvuru için: [ Read ... lines (Warning: No write permission) ]kısayolları (ekranın alt) için iki yardım satırının hemen üstünde görünen şey. Nano versiyonu 2.2.4.
0xC0000022L

Ah, nano 2.0'da uyarmamıştım, ki bununla test ediyordum.
Mikel

serin biz sıraladı :)
0xC0000022L
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.