Respuestas:
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.
:w
primero después de comenzar vi
. (y :chmod +x %
si quieres que sea ejecutable)
touch
puede fallar en vi
's :w!
habrían tenido éxito, aunque (por ejemplo, si file
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, pero vi
'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 %
(algunas vi
implementaciones como vim
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.
WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?
Esto los alertaría aunque no haya realizado ningún cambio per se y solo haya tocado el archivo.
Aparte de la respuesta aceptada:
Vale la pena señalar que touch
se utiliza para actualizar las marcas de tiempo del archivo. Si usa touch
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.
Sin touch
, un nuevo archivo no existirá hasta que le diga vi
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.
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 los sudo
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 en cat
lugar de mv
o cp
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 finalmente fg
volver a ejecutar el comando de escritura.
Editar: publicación mejorada en respuesta a / u / comentarios de G-Man . ¡Gracias!
/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 comando mv /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 usarlo mv
, usted configura /mnt/example.txt
los mismos atributos que /tmp/asdf
, probablemente de su propiedad y legibles en todo el mundo. Podría ser mejor cp /tmp/asdf /mnt/example.txt
o incluso cat /tmp/asdf > /mnt/example.txt
. … PS (4) Puede suspender vi
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 :)
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.
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:
open foo.txt
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:
open -a emacs foo.txt
Pero open
requiere que el archivo ya exista, de lo contrario genera un error. Así que tuve que definir emacs
la siguiente función de shell, lo que me permite escribir emacs foo
para iniciar la emacs
GUI incluso si foo
no existe.
function emacs ()
{
if [ -n "$1" -a ! -e "$1" ]; then
/usr/bin/touch "$1";
fi;
open -a emacs "$@"
}
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:
>newfile.txt
zsh
, es idéntico cat >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.
touch
permite hacerchmod +x
después, antes de editar, lo que tendría sentido si está escribiendo un#!/bin/bash
script de shell.