Existe o benefício de criar um arquivo com toque antes da edição .. como:
touch foo
vi foo
versus obtê-lo para o editor imediatamente? Gostar:
vi foo
Eu vejo alguns tutoriais usando o primeiro ( touch
então vi
).
touch
primeiro, 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.
touch
permite que você façachmod +x
depois, antes da edição, o que faria sentido se você estivesse escrevendo um#!/bin/bash
shell script.:w
primeira coisa depois de iniciarvi
. (e:chmod +x %
se você quiser torná-lo executável)touch
pode falhar ondevi
's:w!
teria conseguido embora (por exemplo, sefile
existe, 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,touch
pode ter sucesso, masvi
's:w
ou: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 %
(algumasvi
implementações, comovim
pode 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.
Isso os alertaria, mesmo que você não tenha feito alterações em si e apenas tenha tocado o arquivo.
fonte
Além da resposta aceita:
Vale ressaltar que
touch
é usado para atualizar os registros de data e hora do arquivo. Se você usartouch
um 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.txt
não existiria.fonte
Sem
touch
, um novo arquivo não existirá até você pedirvi
para 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
touch
garantirá 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.fonte
Não há benefício em
touch
primeiro lugar;vi
criará 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
touch
todas as vezes. Não poder escrever em algum lugar é excepcional, comparado com a frequência com que apenas funcionará (desde que você lembre-sesudo
de 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 emcat
vez demv
oucp
é 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
vi
com Ctrl+ Zenquanto você corrigir o problema (ou o uso:suspend
, ou:sus
), e finalmentefg
novamente para executar o comando de escrita.Editar: postagem melhorada em resposta aos comentários de / u / G-Man . Obrigado!
fonte
/mnt/example.txt
nã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.txt
provavelmente 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)/tmp
pode impedir isso.) (3) O comandomv /tmp/asdf /mnt/example.txt
destruirá totalmente a corrente/mnt/example.txt
e a substituirá/tmp/asdf
. Você deseja substituir o conteúdo da/mnt/example.txt
com o conteúdo de/tmp/asdf
. Usandomv
, você configura/mnt/example.txt
a ter os mesmos atributos como/tmp/asdf
- provavelmente pertencentes a você e mundialmente legível. Pode ser melhorcp /tmp/asdf /mnt/example.txt
ou até mesmocat /tmp/asdf > /mnt/example.txt
. … PS (4) Você pode suspendervi
digitando: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 :)Não há benefício.
vi
criará um arquivo se não existir.fonte
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
touch
comando 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
:wq
para vi, teria o mesmo resultado que tocar nesse arquivo. Essa é a única maneira que os dois comandos são semelhantes.fonte
Especificamente para uso com
vi
, não há necessidade de criar o arquivo antes de editá-lo:vi
pode 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:Isso abriria
foo.txt
no 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.py
pode abri-lo no IDLE, o editor python; etc.) Ou posso solicitar explicitamente o emacs:Mas
open
exige que o arquivo já exista, caso contrário, gera um erro. Então eu tive que definiremacs
a seguinte função shell, o que me permite escreveremacs foo
para iniciar aemacs
GUI, mesmo quefoo
ela não exista.fonte
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 é:
fonte
zsh
, é idênticocat >newfile.txt
e 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.
fonte
touch
O comando altera a data e hora de um arquivo com carimbo de data / hora atual.se o arquivo for não existir, ele cria um novo arquivo com data e hora.
vi
editor é usado para editar arquivos, se o arquivo não existir, ele cria um novo arquivo, a menos que não salve o arquivo.fonte