touch
ing o arquivo primeiro confirma que você realmente tem a capacidade de criar o arquivo, ao invés de perder tempo em um editor apenas para descobrir que o sistema de arquivos é somente leitura ou algum outro problema.
Existe a vantagem de criar um arquivo com toque antes da edição, como:
touch foo
vi foo
versus acessar o editor imediatamente? Como:
vi foo
Eu vejo alguns tutoriais usando o antigo ( touch
then vi
).
Além das respostas dadas, uma vantagem do toque é que qualquer outro usuário / terminal que edite o mesmo arquivo enquanto você o tocou, receberá um aviso quando 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 nenhuma alteração e apenas tenha tocado no arquivo.
Além da resposta aceita:
Vale a pena notar que touch
é usado para atualizar registros de data e hora de arquivos. Se você usar touch
em um arquivo que existe, ele atualizará o registro de data e hora dos arquivos para a data e hora atuais. Se o arquivo não existir, ele cria um arquivo vazio com a data e a hora atuais como o registro de data e hora.
vi
, por outro lado, não cria um novo arquivo, a menos que você escreva nele.
Por exemplo, se eu digitei vi test.txt
, digitei algumas notas e digitei :q!
; test.txt
não existiria.
Sem touch
, um novo arquivo não existirá até que você informe vi
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 de touch
garantirá que você tenha o arquivo (e que possa gravar nele) e até atualize o registro de data e hora. Outro usuário que deseja criar esse arquivo verá que você é o proprietário. Se já existir e outro usuário quiser excluí-lo ou substituí-lo, ele verá que ele foi modificado recentemente e talvez pense duas vezes.
Não há benefício. vi
criará um arquivo se não existir.
Não há benefício para touch
ing primeiro; vi
criará o arquivo se ele não existir.
A resposta aceita diz que 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 ser capaz de escrever em algum lugar é bastante excepcional em comparação com a frequência com que ele irá funcionar (contanto que você se lembre de sudo
para arquivos fora de seu diretório home ou /tmp
, ou esteja logado como root).
Basta abrir o editor e fazer o que quiser, depois tentar salvar o arquivo. Se não funcionar, mesmo com :w!
, salve-o em outro lugar ( :w ~/asdf
) e corrija o problema. Uma vez corrigido, 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 cat
em vez de mv
ou cp
é porque isso preserva todos os atributos e permissões de arquivos.
Além disso, para um uso mais avançado da linha de comando, você pode usar background vi
com Ctrl + Z enquanto corrige o problema (ou use :suspend
, ou :sus
) e, finalmente, fg
novamente para executar o comando de gravação.
Editar: postagem aprimorada em resposta aos comentários de / u / G-Man . Obrigado!
vi
é um editor de texto visual (vi = visual) É visual comparado a "ed" de qualquer maneira, o que permite que você veja e altere uma linha de texto de cada vez.
O comando touch
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 que são altamente dependentes de timestamps.
Agora, se o seu arquivo é um arquivo de texto, ou ainda não existe, abri-lo com o vi e, em seguida, emitir o comando :wq
para vi teria o mesmo resultado que tocar esse arquivo. Essa é a única maneira de os dois comandos serem parecidos.
O vi é usado para editar um arquivo como usuário, enquanto o toque pode definir o registro de data e hora e é usado principalmente em scripts e assim por diante.
Outra maneira de criar um arquivo é:
>newfile.txt
Por man page of touch, seu principal trabalho é alterar os timestamps de arquivos.
Ofc também está criando o arquivo com o timestamp atual e então você pode editar o arquivo.
VI é editor de texto que faz o que diz editar texto aberto, salvar, editar arquivo etc.
Tudo é sabor de usuário e habbit: toque em seguida vi ou vi arquivo.txt mesma coisa cor diferente.
Especificamente para uso com vi
, não é necessário criar o arquivo antes de editá-lo: vi
pode ser usado para criar e salvar um novo arquivo. No entanto, há contextos de chamada em que o arquivo precisa existir. Por exemplo, no meu sistema (OS X) eu posso lançar um editor de GUI apropriado (determinado pelo tipo de arquivo) assim:
open foo.txt
Isso abriria foo.txt
no TextEdit, ou no emacs, ou o que quer que eu tenha especificado como meu editor de escolha para arquivos de texto, e desanexará o processo para que eu receba o prompt imediatamente. ( open bar.py
pode abri-lo em IDLE, o editor python, etc.) Ou eu posso solicitar explicitamente o emacs:
open -a emacs foo.txt
Mas open
requer que o arquivo já exista, caso contrário, gera um erro. Então eu tive que definir emacs
para ser a seguinte função shell, que me permite escrever emacs foo
para lançar a emacs
GUI mesmo se foo
não existir.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
touch
comando altera a data e a hora de um arquivo com o carimbo de data / hora atual.
Se o arquivo 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 salvemos o arquivo.