Respostas:
touchprimeiro, o arquivo confirma que você realmente tem a capacidade de criar o arquivo, em vez de perder tempo em um editor apenas para descobrir que o sistema de arquivos é somente leitura ou algum outro problema.
:wprimeira coisa depois de iniciar vi. (e :chmod +x %se você quiser torná-lo executável)
touchpode falhar onde vi's :w!teria conseguido embora (por exemplo, se fileexiste, mas você não é seu dono e não tem acesso de gravação para que, enquanto você tem acesso de gravação para o diretório atual). Por outro lado, touchpode ter sucesso, mas vi's :wou :w!pode falhar se você é dono do arquivo, mas não têm acesso de gravação para ele, nem para o diretório atual (você seria capaz de trabalhar em torno dele com :!chmod +w %(algumas viimplementações, como vimpode fazer que automaticamente após :w!)).
"foo" [readonly]. E novamente ao entrar no modo de inserção:Warning: Changing a readonly file.
Além das respostas fornecidas, uma vantagem do toque é que qualquer outro usuário / terminal que edite o mesmo arquivo enquanto você o tocou receberá um aviso ao tentar salvar as alterações.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Isso os alertaria, mesmo que você não tenha feito alterações em si e apenas tenha tocado o arquivo.
Além da resposta aceita:
Vale ressaltar que touché usado para atualizar os registros de data e hora do arquivo. Se você usar touchum arquivo existente, ele atualizará o carimbo de data / hora dos arquivos para a data e hora atuais. Se o arquivo não existir, ele criará um arquivo vazio com a data e hora atuais como o carimbo de data / hora.
vi, por outro lado, não cria um novo arquivo, a menos que você grave nele.
Por exemplo, se eu digitei vi test.txt, digitei algumas notas e digitei :q!; test.txtnão existiria.
Sem touch, um novo arquivo não existirá até você pedir vipara escrevê-lo.
Considere um sistema multiusuário (talvez você esteja em um sistema de arquivos montado em rede compartilhado por muitos sistemas, cada um com muitos usuários). A execução touchgarantirá que você tenha o arquivo (e que possa gravá-lo) e até atualize o registro de data e hora. Outro usuário que deseja criar esse arquivo verá que você é o proprietário. Se ele já existir e outro usuário quiser excluí-lo ou substituí-lo, ele verá que foi modificado recentemente e talvez pense duas vezes.
Não há benefício em touchprimeiro lugar; vicriará o arquivo se ele não existir.
A resposta aceita diz que verifica se você pode escrever lá antes de perder tempo em um editor. É verdade, mas agora você estará perdendo tempo digitando touchtodas as vezes. Não poder escrever em algum lugar é excepcional, comparado com a frequência com que apenas funcionará (desde que você lembre-se sudode arquivos fora do diretório inicial ou /tmp, ou esteja logado como root).
Basta abrir o editor e fazer o que quiser, depois tente salvar o arquivo. Se não funcionar, mesmo com :w!, salve-o em outro lugar ( :w ~/asdf) e corrija o problema. Uma vez que é fixo, você pode copiar o conteúdo do arquivo do arquivo temporário para o original: cat ~/asdf > /mnt/example.txt && rm ~/asdf. O motivo pelo qual usamos em catvez de mvou cpé usar as permissões do destino e outros atributos.
Além disso, para alguns uso de linha de comando mais avançado, você poderia fundo vicom Ctrl+ Zenquanto você corrigir o problema (ou o uso :suspend, ou :sus), e finalmente fgnovamente para executar o comando de escrita.
Editar: postagem melhorada em resposta aos comentários de / u / G-Man . Obrigado!
/mnt/example.txtnão deve ser legível pelo mundo, mas o seu umask está definido como algo permissivo como 22, /tmp/asdf será legível pelo mundo. Se houver outras pessoas no sistema, elas poderão ler a cópia temporária do arquivo. (2) O arquivo /mnt/example.txtprovavelmente não deve ser gravável no mundo, mas, se houver pessoas mal-intencionadas no sistema, elas poderão ler a cópia temporária do arquivo e substituí-lo por uma versão modificada antes de mover / copiar de volta ao local certo. ... (continua)
/tmppode impedir isso.) (3) O comando mv /tmp/asdf /mnt/example.txtdestruirá totalmente a corrente /mnt/example.txte a substituirá /tmp/asdf. Você deseja substituir o conteúdo da /mnt/example.txtcom o conteúdo de /tmp/asdf. Usando mv, você configura /mnt/example.txta ter os mesmos atributos como /tmp/asdf- provavelmente pertencentes a você e mundialmente legível. Pode ser melhor cp /tmp/asdf /mnt/example.txtou até mesmo cat /tmp/asdf > /mnt/example.txt. … PS (4) Você pode suspender vidigitando :suspend(ou :sus, abreviado).
/tmp, mas não há desculpa para não escrever ~/. Eu também não tinha pensado que isso substituiria os atributos. Vou editar meu post, graças :)
vi é um editor de texto visual (vi = visual) É visual comparado com "ed" de qualquer maneira, o que permite ver e alterar uma linha de texto por vez.
O touchcomando atualiza o registro de data e hora em um arquivo existente ou cria um novo arquivo se o arquivo ainda não existir. É bom para testar coisas altamente dependentes de carimbos de data e hora.
Agora, se o seu arquivo é um arquivo de texto, ou ainda não existe, abri-lo com vi e, em seguida, emitir o comando :wqpara vi, teria o mesmo resultado que tocar nesse arquivo. Essa é a única maneira que os dois comandos são semelhantes.
Especificamente para uso com vi, não há necessidade de criar o arquivo antes de editá-lo: vipode ser usado para criar e salvar um novo arquivo. No entanto, existem contextos de chamada nos quais o arquivo precisa existir. Por exemplo, no meu sistema (OS X), posso iniciar um editor de GUI apropriado (determinado pelo tipo de arquivo) assim:
open foo.txt
Isso abriria foo.txtno TextEdit, no emacs, ou o que eu especificasse como meu editor de escolha para arquivos de texto, e desanexaria o processo para que eu recebesse meu prompt imediatamente. ( open bar.pypode abri-lo no IDLE, o editor python; etc.) Ou posso solicitar explicitamente o emacs:
open -a emacs foo.txt
Mas openexige que o arquivo já exista, caso contrário, gera um erro. Então eu tive que definir emacsa seguinte função shell, o que me permite escrever emacs foopara iniciar a emacsGUI, mesmo que fooela não exista.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
O vi é usado para editar um arquivo como usuário, enquanto o touch pode definir o carimbo de data e hora e é usado principalmente em scripts e afins.
Outra maneira de criar um arquivo é:
>newfile.txt
zsh, é idêntico cat >newfile.txte precisa que você pressione Ctrl + D.
Pela página de manual do toque, seu trabalho principal é alterar os registros de data e hora do arquivo.
Ofc também está criando o arquivo com o carimbo de data / hora atual e, em seguida, você pode editar o arquivo.
VI é um editor de texto que faz o que diz: editar texto aberto, salvar, editar arquivo, etc.
Tudo é uma característica do usuário e do habbit: toque em vi ou vi file.txt na mesma coisa em cores diferentes.
touchpermite que você façachmod +xdepois, antes da edição, o que faria sentido se você estivesse escrevendo um#!/bin/bashshell script.