¿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 ( touchentonces vi).
touchAl 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.
touchpermite hacerchmod +xdespués, antes de editar, lo que tendría sentido si está escribiendo un#!/bin/bashscript de shell.:wprimero después de comenzarvi. (y:chmod +x %si quieres que sea ejecutable)touchpuede fallar envi's:w!habrían tenido éxito, aunque (por ejemplo, sifileexiste 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,touchpuede tener éxito, perovi's:wo: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 %(algunasviimplementaciones comovimpuede 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
touchse utiliza para actualizar las marcas de tiempo del archivo. Si usatouchun 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.txtNo existiría.fuente
Sin
touch, un nuevo archivo no existirá hasta que le digavique 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
touchgarantizará 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
touching primero;vicreará 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
touchtodo 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 lossudoarchivos 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 encatlugar demvocpes 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
vicon Ctrl+ Zmientras soluciona el problema (o usar:suspend, o:sus), y finalmentefgvolver a ejecutar el comando de escritura.Editar: publicación mejorada en respuesta a / u / comentarios de G-Man . ¡Gracias!
fuente
/mnt/example.txtse supone que el archivo no es legible en todo el mundo, pero su umask está configurado en algo permisivo como 22, entonces/tmp/asdfserá legible en todo el mundo. Si hay otras personas en el sistema, pueden leer la copia temporal del archivo. (2)/mnt/example.txtEs 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)/tmppuede evitar esto). (3) El comandomv /tmp/asdf /mnt/example.txtdestruirá totalmente la corriente/mnt/example.txty la reemplazará por/tmp/asdf. Desea reemplazar el contenido de/mnt/example.txtcon el contenido de/tmp/asdf. Al usarlomv, usted configura/mnt/example.txtlos mismos atributos que/tmp/asdf, probablemente de su propiedad y legibles en todo el mundo. Podría ser mejorcp /tmp/asdf /mnt/example.txto inclusocat /tmp/asdf > /mnt/example.txt. … PS (4) Puede suspenderviescribiendo: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
vicreará un archivo si no existe.fuente
vies 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
touchcomando 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
:wqvi, 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:vise 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.txten 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.pypodría abrirlo en IDLE, el editor de Python; etc.) O puedo solicitar explícitamente emacs:Pero
openrequiere que el archivo ya exista, de lo contrario genera un error. Así que tuve que definiremacsla siguiente función de shell, lo que me permite escribiremacs foopara iniciar laemacsGUI incluso sifoono 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.txty 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
touchEl 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.
vieditor se usa para editar archivos si el archivo no existe, crea un archivo nuevo a menos que no lo guardemos.fuente