¿Existe la ventaja de crear un archivo con toque antes de editarlo?
touch foo
vi foo
versus llevarlo al editor de inmediato? Me gusta:
vi foo
Veo bastantes tutoriales usando el primero ( touch
entonces vi
).
touch
Al iniciar el archivo, primero confirma que realmente tiene la capacidad de crear el archivo, en lugar de perder el tiempo en un editor solo para descubrir que el sistema de archivos es de solo lectura o algún otro problema.
touch
permite hacerchmod +x
después, antes de editar, lo que tendría sentido si está escribiendo un#!/bin/bash
script de shell.:w
primero después de comenzarvi
. (y:chmod +x %
si quieres que sea ejecutable)touch
puede fallar envi
's:w!
habrían tenido éxito, aunque (por ejemplo, sifile
existe pero no eres su propietario y no tiene acceso de escritura a la misma, mientras que tiene acceso de escritura en el directorio actual). Por el contrario,touch
puede tener éxito, perovi
's:w
o:w!
puede fallar si usted es propietario del archivo, pero no tienen acceso de escritura a él ni al directorio actual (que sería capaz de trabajar alrededor de ella con:!chmod +w %
(algunasvi
implementaciones comovim
puede hacerlo que automáticamente sobre:w!
))."foo" [readonly]
. Y nuevamente al ingresar al modo de inserción:Warning: Changing a readonly file.
Además de las respuestas dadas, una ventaja del tacto es que cualquier otro usuario / terminal que edite el mismo archivo mientras lo toca, recibirá una advertencia cuando intente guardar cualquier cambio.
Esto los alertaría aunque no haya realizado ningún cambio per se y solo haya tocado el archivo.
fuente
Aparte de la respuesta aceptada:
Vale la pena señalar que
touch
se utiliza para actualizar las marcas de tiempo del archivo. Si usatouch
un archivo que existe, actualizará la marca de tiempo de los archivos a la fecha y hora actuales. Si el archivo no existe, crea un archivo vacío con la fecha y hora actuales como la marca de tiempo.vi
, por otro lado, no crea un nuevo archivo a menos que lo escriba.Por ejemplo, si escribí
vi test.txt
, escribí algunas notas, luego escribí:q!
;test.txt
No existiría.fuente
Sin
touch
, un nuevo archivo no existirá hasta que le digavi
que lo escriba.Considere un sistema multiusuario (quizás esté en un sistema de archivos montado en red compartido por muchos sistemas, cada uno con muchos usuarios). La ejecución
touch
garantizará que tenga el archivo (y que pueda escribir en él) e incluso actualizará la marca de tiempo. Otro usuario que desee crear dicho archivo verá que usted es el propietario. Si ya existe y otro usuario desea eliminarlo o reemplazarlo, verán que se modificó recientemente y tal vez lo piensen dos veces.fuente
No hay beneficio para
touch
ing primero;vi
creará el archivo si no existe.La respuesta aceptada dice que comprueba si puedes escribir allí antes de perder el tiempo en un editor. Es cierto, pero ahora perderás el tiempo escribiendo
touch
todo el tiempo. No poder escribir en algún lugar es bastante excepcional en comparación con la frecuencia con la que simplemente funcionará (siempre que recuerde lossudo
archivos fuera de su directorio de inicio o/tmp
, o estén conectados como root).Simplemente abra el editor y haga lo que quiera, luego intente guardar el archivo. Si no funciona, incluso con
:w!
, guárdelo en otro lugar (:w ~/asdf
) y solucione el problema. Una vez que se ha solucionado, puede copiar el contenido del archivo del archivo temporal a la original:cat ~/asdf > /mnt/example.txt && rm ~/asdf
. La razón que usamos encat
lugar demv
ocp
es para usar los permisos del destino y otros atributos.Además, para un uso más avanzado de la línea de comandos, puede usar el fondo
vi
con Ctrl+ Zmientras soluciona el problema (o usar:suspend
, o:sus
), y finalmentefg
volver a ejecutar el comando de escritura.Editar: publicación mejorada en respuesta a / u / comentarios de G-Man . ¡Gracias!
fuente
/mnt/example.txt
se supone que el archivo no es legible en todo el mundo, pero su umask está configurado en algo permisivo como 22, entonces/tmp/asdf
será legible en todo el mundo. Si hay otras personas en el sistema, pueden leer la copia temporal del archivo. (2)/mnt/example.txt
Es probable que el archivo no se pueda escribir en todo el mundo, pero, si hay personas maliciosas en el sistema, pueden leer la copia temporal del archivo y reemplazarlo con una versión modificada antes de mover / copiar Volver a la ubicación correcta. … (Continúa)/tmp
puede evitar esto). (3) El comandomv /tmp/asdf /mnt/example.txt
destruirá totalmente la corriente/mnt/example.txt
y la reemplazará por/tmp/asdf
. Desea reemplazar el contenido de/mnt/example.txt
con el contenido de/tmp/asdf
. Al usarlomv
, usted configura/mnt/example.txt
los mismos atributos que/tmp/asdf
, probablemente de su propiedad y legibles en todo el mundo. Podría ser mejorcp /tmp/asdf /mnt/example.txt
o inclusocat /tmp/asdf > /mnt/example.txt
. … PS (4) Puede suspendervi
escribiendo:suspend
(o:sus
, para abreviar)./tmp
, pero no hay excusa para no escribir en su~/
lugar. Tampoco había pensado en que reemplazaría los atributos. Editaré mi publicación, gracias :)No hay beneficio
vi
creará un archivo si no existe.fuente
vi
es un editor de texto visual (vi = visual) De todos modos, es visual en comparación con "ed", lo que simplemente le permite ver y cambiar una línea de texto a la vez.El
touch
comando actualiza la marca de tiempo en un archivo existente o crea un nuevo archivo si el archivo aún no existía. Es bueno para probar cosas que dependen mucho de las marcas de tiempo.Ahora, si su archivo es un archivo de texto, o aún no existe, abrirlo con vi y luego emitir el comando
:wq
vi, tendría el mismo resultado que tocar ese archivo. Esa es la única forma en que los dos comandos son similares.fuente
Específicamente para usar con
vi
, no hay necesidad de crear el archivo antes de editarlo:vi
se puede usar para crear y guardar un nuevo archivo. Sin embargo, hay contextos de llamada donde el archivo debe existir. Por ejemplo, en mi sistema (OS X) puedo iniciar un editor GUI apropiado (determinado por tipo de archivo) como este:Esto se abriría
foo.txt
en TextEdit, o en emacs, o lo que sea que haya especificado como mi editor de elección para archivos de texto, y desconectaría el proceso para que recibiera mi mensaje de inmediato. (open bar.py
podría abrirlo en IDLE, el editor de Python; etc.) O puedo solicitar explícitamente emacs:Pero
open
requiere que el archivo ya exista, de lo contrario genera un error. Así que tuve que definiremacs
la siguiente función de shell, lo que me permite escribiremacs foo
para iniciar laemacs
GUI incluso sifoo
no existe.fuente
vi se usa para editar un archivo como usuario, mientras que el toque puede establecer la marca de tiempo en él y se usa principalmente en scripts y demás.
Otra forma de crear un archivo es:
fuente
zsh
, es idénticocat >newfile.txt
y necesita presionar Ctrl + D.Por página de contacto, su trabajo principal es cambiar las marcas de tiempo del archivo.
Ofc también está creando el archivo con la marca de tiempo actual y luego puede editar el archivo.
VI es un editor de texto que hace lo que dice editar texto abierto, guardar, editar archivo, etc.
Todo es sabor del usuario y del habbit: toque luego vi o vi file.txt mismo color diferente.
fuente
touch
El comando cambia la fecha y la hora de un archivo con la marca de tiempo actual.Si el archivo no existe, crea un nuevo archivo con fecha y hora.
vi
editor se usa para editar archivos si el archivo no existe, crea un archivo nuevo a menos que no lo guardemos.fuente