Answer-ID
  • Întrebări
  • Tag-uri
  • Categorii
Notificări
Recompense
Înregistrare
După înregistrare, veți primi notificări despre răspunsurile și comentariile la întrebările DVS.
Logare
Dacă aveţi deja un cont, autentificaţi-vă pentru a verifica notificările noi.
Aici vor fi recompensele pentru întrebările, răspunsurile și comentariile adăugate sau modificate.
Mai mult
Sursă
Editează
Paul Wicks
Paul Wicks

Obtinerea de permisiuni de root pe un fișier în interiorul vi?

De multe ori în timp ce editați fișiere de configurare, am'll deschide unul cu vi și atunci când mă duc să-l salveze dau seama că nu am't tip

Există vreo modalitate de a da vi sudo privilegii pentru a salva fișiere? Îmi amintesc că am văzut ceva despre asta în timp ce noi căutăm ceva despre vi un timp în urmă, dar acum nu pot't găsi.

239 2008-08-04T03:34:02+00:00 10
Programare
linux
unix
vi
Comentarii la întrebare (1)
Soluția
Utilizator anonim
31 august 2008 в 7:23
2008-08-31T19:23:48+00:00
Mai mult
Sursă
Editează
#8407198

% este înlocuit cu actualul nume de fișier, astfel puteti folosi:

(vim va detecta că fișierul a fost modificat și întreba dacă doriți să-l pentru a fi reîncărcate. Spune da prin alegerea [L], mai degrabă decât OK.)

Ca o comandă rapidă, puteți defini propriile comanda. Pune următoarele in .vimrc:

Cu cele de mai sus aveți posibilitatea să tastați `:W pentru a salva fișierul. De când am scris asta, am găsit o modalitate mai buna (in opinia mea) pentru a face acest lucru:

În acest fel aveți posibilitatea să tastați :w!! și acesta va fi extins la întreaga linie de comandă, lăsând cursorul la sfârșitul anului, astfel încât să puteți înlocui % cu un nume de fișier propriu, dacă vă place.

289
0
Comentarii (7)
Mark Harrison
Mark Harrison
4 august 2008 в 6:52
2008-08-04T06:52:32+00:00
Mai mult
Sursă
Editează
#8407195

În general, se poate't schimba eficiente id-ul de utilizator al vi-proces, dar puteți face acest lucru:

32
0
Comentarii (3)
 Zenexer
Zenexer
13 octombrie 2012 в 6:54
2012-10-13T06:54:18+00:00
Mai mult
Sursă
Editează
#8407203

Comun Limitări

Cea mai comună metodă de a obține în jurul valorii de fișier doar în citire problema este de a deschide o țeavă în fișierul curent ca super-utilizator, folosind o implementare de sudo tee. Cu toate acestea, toate dintre cele mai populare soluții care am găsit-o pe Internet au o combinație de mai multe potențiale limitări:

  • Întregul fisier este scris la terminal, precum și fișierul. Acest lucru poate fi lent pentru fișiere mari, în special pe conexiuni lente.
  • Fișierul își pierde moduri și atribute similare.
  • Căi de fișiere cu caractere neobișnuite sau spații ar putea să nu fie manipulat in mod corect.

Solutii

Pentru a obține în jurul valorii de toate aceste probleme, puteți utiliza următoarea comandă:

:silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >/dev/null'

" Depending on the implementation, you might need this on Windows:
:silent execute 'write !sudo tee ' . shellescape(@%, 1) . ' >NUL'

Acestea pot fi scurtat, cu respect:

:sil exec 'w !sudo tee ' . shellescape(@%, 1) . ' >NUL'

Explicatie

: începe la comanda; va trebui să introduceți acest personaj în modul normal să începeți să introduceți o comandă. Acesta ar trebui să fie omise în scripturi.

sil[ent] suprimă producția de comanda. În acest caz, vrem să oprim Apasati orice tasta pentru a continua-ca prompte, care apare după rularea :! comanda.

exec[ute] execută un șir de caractere ca o comandă. Putem't trebuie doar să rulați :scrie pentru't procesul necesare apel de funcție.

! reprezintă :! comanda: singura comanda asta:scrie acceptă. În mod normal, :scrie acceptă o cale de fișier în care să scrie.:!pe cont propriu execută o comandă într-o coajă (de exemplu, folosindbash -c). Cu:scrie, se va executa comanda în coajă, și apoi scrie întregul dosar să stdin.

"sudo" ar trebui să fie evident, din moment ce's de ce ai're aici. Rulați comanda ca super-utilizator. Nu's o mulțime de informații în jurul valorii de 'net despre modul în care funcționează.

tee conducte stdin a dat de fișier. :scrie va scriestdin, apoi super-usertee` va primi conținutul fișierului și scrie fișierul. Nu o't de a crea un fișier nou ... doar suprascrie conținutul-atât de fișier moduri și atribute vor fi conservate.

shellescape() scapă caractere speciale în calea de fișier, după caz, pentru shell-ul curent. Cu doar un singur parametru, de obicei doar încadrați calea citate după cum este necesar. Când ne-am're trimiterea la un plin de coajă de linie de comandă, am'll doresc să treacă o valoare diferită de zero ca al doilea argument pentru a permite backslash-evadarea de alte caractere speciale, care altfel s-ar putea excursie pe coajă.

@% citește conținutul % registru, care conține curent tampon's nume de fișier. L's nu neapărat o cale absolută, astfel asigurați-vă că am't s-a schimbat directorul curent. În unele soluții, veți vedea comerciale-de la simbol omise. În funcție de locație, % este o expresie validă, și are același efect ca și citirea % registru. Imbricată într-o altă exprimare mai rapidă este în general interzisă, cu toate acestea, cum ar fi: în acest caz.

>NUL " și " >/dev/null redirect stdout la platforma's nul dispozitiv. Chiar dacă ne-am'am redus la tăcere comanda, nu ne't doresc toate cheltuielile asociate cu conducte stdin înapoi la vim ... cel mai bun să scape de ea cât mai curând posibil.NUL` este nul dispozitiv pe DOS, MS-DOS și Windows, nu este un fișier valid. Ca de Windows 8 redirectionari de NUL nu't rezultatul într-un fișier numit NUL a fi scris. Încercați să creați un fișier de pe desktop, pe nume NUL, cu sau fără extensia de fișier: veți fi în măsură să facă acest lucru. (Există mai multe alte nume de dispozitive în Windows, care ar putea fi în valoare de a cunoaște.)

~/.vimrc

Dependente De Platformă

Desigur, încă nu't doriți să memoreze aceste și introduceți-le de fiecare dată. L's mult mai ușor să hartă comanda corespunzătoare pentru un simplu utilizator de comandă. Pentru a face acest lucru pe POSIX, ai putea să adăugați următoarea linie la ~/.vimrc de fișiere, crearea de ea, dacă nu't există deja:

Acest lucru vă va permite să tastați :W (case-sensitive) comandă pentru a scrie fișierul curent cu super-utilizator permisiuni-mult mai ușor.

Independent De Platforma

Eu folosesc o platformă independentă ~/.vimrc fișier care se sincronizează de pe computere, așa că am adăugat multi-platforma de funcționalitate a mea. Aici's a `~/.vimrc cu doar setările relevante:

" Use za (not a command; the keys) in normal mode to toggle a fold.
" META_COMMENT Modeline Definition: {{{1
" vim: ts=4 sw=4 sr sts=4 fdm=marker ff=unix fenc=utf-8
"  ts:     Actual tab character stops.
"  sw:     Indentation commands shift by this much.
"  sr:     Round existing indentation when using shift commands.
"  sts:    Virtual tab stops while using tab key.
"  fdm:    Folds are manually defined in file syntax.
"  ff:     Line endings should always be <NL> (line feed #09).
"  fenc:   Should always be UTF-8; #! must be first bytes, so no BOM.

" General Commands: User Ex commands. {{{1
    command W call WriteAsSuperUser(@%)         " Write file as super-user.

" Helper Functions: Used by user Ex commands. {{{1
    function GetNullDevice() " Gets the path to the null device. {{{2
        if filewritable(&#39;/dev/null&#39;)
            return &#39;/dev/null&#39;
        else
            return &#39;NUL&#39;
        endif
    endfunction

    function WriteAsSuperUser(file) " Write buffer to a:file as the super user (on POSIX, root). {{{2
        exec &#39;%write !sudo tee &#39; . shellescape(a:file, 1) . &#39; >&#39; . GetNullDevice()
    endfunction

" }}}1
" EOF
16
0
Comentarii (2)
 ephemient
ephemient
24 septembrie 2008 в 4:12
2008-09-24T04:12:25+00:00
Mai mult
Sursă
Editează
#8407200

Daca're folosind Vim, există un script disponibile pe nume sudo.vim. Dacă veți găsi pe care le'am deschis un fișier care ai nevoie de acces root pentru a citi, de tip

:e sudo:%
Vim înlocuiește % cu numele de fișier curent, și sudo: instruiește sudo.vim script-ul pentru a prelua de citire și scriere.

11
0
Comentarii (1)
Chris Jester-Young
Chris Jester-Young
4 august 2008 в 4:04
2008-08-04T04:04:52+00:00
Mai mult
Sursă
Editează
#8407194

Ryan's de consiliere este în general bună, cu toate acestea, dacă după pasul 3, don't a muta fișierul temporar; it'll au greșit proprietate și permisiuni. În schimb, sudoedit a fișierului corectă și citiți conținutul (folosind :r sau ca) din fișierul temporar.

Dacă după pasul 2, folosi :w! pentru a forța fișier pentru a fi scris.

7
0
Comentarii (0)
 dbr
dbr
12 august 2008 в 6:37
2008-08-12T18:37:53+00:00
Mai mult
Sursă
Editează
#8407197

Când te duci în modul inserare pe un fișier aveți nevoie de sudo acces pentru a edita, puteți primi un mesaj de stare spun

Dacă mi-e dor că, în general, să fac

:q

..atunci..

..sau..

Nu's, probabil, mai puțin sens giratoriu mod de a face asta, dar funcționează.

3
0
Comentarii (3)
James Snyder
James Snyder
29 ianuarie 2010 в 5:21
2010-01-29T17:21:29+00:00
Mai mult
Sursă
Editează
#8407202

Aici's un altul, care a apărut de la această întrebare s-a răspuns, un plugin numit SudoEdit care oferă SudoRead și SudoWrite funcții, care va implicit încercați să folosiți sudo primul și su cazul în care nu reușește: http://www.vim.org/scripts/script.php?script_id=2709

1
0
Comentarii (0)
Ryan Fox
Ryan Fox
4 august 2008 в 3:39
2008-08-04T03:39:31+00:00
Mai mult
Sursă
Editează
#8407193

Un Google rapid pare a da acest sfat:

  1. Don't încercați să editați dacă este's read-only.
  2. Ați putea fi capabil de a schimba permisiunile de fișiere. (Dacă este sau nu va permite să salvați până la experimentare.)
  3. Dacă încă editate oricum, salvați într-un fișier temporar și apoi mutați-l.

http://ubuntuforums.org/showthread.php?t=782136

1
0
Comentarii (0)
 pisswillis
pisswillis
19 martie 2009 в 12:51
2009-03-19T12:51:48+00:00
Mai mult
Sursă
Editează
#8407201

Am asta in ~/.bashrc:

Acum ori de câte ori am nevoie pentru a edita un fișier de configurare, doar am deschis-o cu vesta inot.

0
0
Comentarii (3)
 num1
num1
5 august 2008 в 10:20
2008-08-05T22:20:58+00:00
Mai mult
Sursă
Editează
#8407196

Un hack rapid puteți lua în considerare este de a face un chmod pe fișierul pe care're de editare, salvare cu vim, și apoi chmod înapoi la ceea ce dosarul a fost inițial.

chmod 777 test.file
[This is where you save in vim]
chmod xxx test.file (restore the permissions you found in the first step)

Desigur eu nu't recomandăm această abordare într-un sistem în care tu're îngrijorat de securitate, ca și pentru câteva secunde oricine poate citi/modifica fișierul fără să-ți dai seama.

-2
0
Comentarii (0)
Adăugati o întrebare
Categorii
Toate
Tehnologii
Cultură
Viață / Artă
Stiință
Profesii
Afaceri
ID
KO
RO
RU
© Answer-ID 2021
Sursă
stackoverflow.com
în cadrul licenței cc by-sa 3.0 cu atribuire