Fiz longas alterações em um arquivo de configuração em um computador Ubuntu Linux com o editor vi. Infelizmente, esqueci o sudo primeiro, agora estou no editor, mas não posso salvar minhas alterações devido à falta de direitos. Posso retroativamente sudo o usuário nesse terminal ou qual seria o melhor curso de ação a ser seguido?
linux
permissions
sudo
vi
simon
fonte
fonte
Respostas:
Nesse caso, escrevo o arquivo com
:w /tmp/tmpfile
. Então eu saio e mudo/tmp/tmpfile
para o meu arquivo antigo com direitos sudo.fonte
vi
pelo padrão (que provavelmente é 666, ANDed pelo inverso do seu "umask"), substitui o proprietário do arquivo pelo seu UID (era "raiz", não era?), e quebra links físicos./tmp
diretório. (2) Se você tiver realmente usuários mal-intencionados em seu sistema, eles poderão substituí-/tmp/tmpfile
lo quando você o escreve (devi
) e quando você o copia no arquivo de configuração do sistema que você estava editando. É mais seguro colocar o arquivo temporário em um diretório ao qual apenas você tem acesso.De SO :
Na verdade, eu me vejo usando essa maneira de fazê-lo com mais frequência agora:
Eu acho que é um pouco mais intuitivo, como eu sei o que
:%!
faz, enquanto eu não tenho uma compreensão visceral:w !
. Além disso, é fácil perder o espaço muito importante entre ow
e o!
.fonte
vi
comandos podem ter várias letras; portanto, teoricamente, pode haver umwfoo
comando " "; portanto, se você deseja gravar em um arquivo chamado "foo
", deve dizer ":w foo
". Ou seja, você precisa de um espaço após ":w
". No que diz respeito a ":w !
" - você sabe o que é ":!
", certo? ":!date
" Executa umdate
comando " ". Então ":w !xyz
" escreve o buffer, mas em um comando, e não em um arquivo.%
embora?%
pode ser mais difícil.) (3) OK, eu vou ajudá-lo um pouco.tee
é um programa que permite gravar informações em vários locais. Por exemplo,date | tee cody
gravará a data e hora atuais em um arquivo chamadocody
… (continua)date | tee cody > bugstein
gravará a data e hora atuais em um arquivo chamadocody
e também em um arquivo chamadobugstein
. Você entendesudo
? Permite executar um comando com os privilégios de outro usuário (normalmente root). Por exemplo,ls /root
geralmente falhará, porque você não tem acesso/root
. Massudo ls /root
vai funcionar. - Um efeito colateral infeliz da maneira como o Unix funciona é quesudo ls /root > /root/cody
irá falhar, porque você não tem acesso e/root
, portanto, não pode escrever/root/cody
. … (Continua)Não foi possível abrir outro terminal e alterar temporariamente os direitos de acesso do arquivo?
fonte
:w !sudo tee % solution
wfaulk postou