Aparentemente puede cambiar el nombre del archivo a...
.
Si estuviera loco, ¿cómo cambiaría el nombre del archivo ..
o .
? ¿Se permite incluso ese nombre de archivo?
La barra invertida no parece deshabilitar el significado especial de dot:
$ mv test \.
mv: `test' and `./test' are the same file
.
y..
ya existe Y punto no tiene un significado especial..
o..
desde Windows en medios externosFAT
oNTFS
medios, luego intente montarlos en un sistema basado en Unix. Hm ....
y..
realmente existe en NTFS y la API de NT o si solo son agregadas por la API de Win32. Sé que hay varias discrepancias entre la API de NT de nivel inferior y Win32, por ejemplo, Win32 oculta varios archivos de la raíz de la unidad.Respuestas:
..
no es especial, es solo que ya existe.En Unix, Dos y MS-Windows, cada directorio tiene un directorio que
.
se vincula a sí mismo, y un directorio..
que vincula a su directorio padre (o self si es el directorio raíz).Si
..
y.
son especiales es solo porque no puede eliminarlos (en realidad sí puede, simplemente elimine el directorio que los contiene).Por lo tanto, no puede nombrar ningún (otro) archivo
.
o..
.Sin embargo, puede crear archivos
...
,\
,…
,..
(nota que hay un espacio después de la..
, pero que difícilmente se puede ver aquí, o fácilmente en que el listado de directorios) o cualquier otro nombre que desee; El único carácter reservado es/
(Advertencia: detalles avanzados: y nulo, nulo es un carácter especial, no se utiliza para nada excepto para marcar el final de las cosas y, a veces, como separador)..
no tiene un significado especial: no tiene que archivar nombres, kernel o shell, no necesita escapar. En realidad, si un nombre de archivo comienza con un,.
entonces es especial, el archivo normalmente está oculto, pero aún así no necesita escapar.Aparte
Este comportamiento de archivo oculto se produjo en una implementación temprana de
ls
dónde quería ocultarse el autor.
y..
, por lo tanto, escribieron código para ocultar cualquier archivo que comience con a.
. Otros usuarios notaron este error / característica y comenzaron a crear archivos a partir de.
cuando querían que el archivo estuviera oculto.Explicación de la pregunta vinculada
En la pregunta que vincula al interrogador, está tratando de mover el archivo al directorio principal
..
pero termina renombrándolo...
, los archivos que comienzan con un punto están ocultos de forma predeterminada, es por eso que no pueden encontrarlo.Cuando se usa mv en el formulario
mv a b
.
él, efectivamente no es una operación, pero lomv
trata como un error...
él, moverá el archivo al directorio padre.fuente
If you move to . it is effectively a no operation
? No es un "no op", es un error si intenta mover un archivo de A a B cuando A y B son lo mismo. Una demostración más práctica de este error esmv foo ../some_dir/foo
omv foo some_subdir/../foo
./
NUL) y el nombre reservado (es decir,.
y..
) podría aclararse. También vale la pena señalar que.
al comienzo del nombre tiene un significado especial solo en la capa de aplicación y no en el núcleo o la API de llamada del sistema...
y.
son especiales: no puedes moverlos ni eliminarlos. Pero no son especiales al mover archivos a ellos.No puede cambiar el nombre de un archivo
.
ao..
porque todos los directorios ya contienen entradas para esos dos nombres. (Esas entradas apuntan a directorios, y no puede cambiar el nombre de un archivo a un directorio).mv
detecta el caso donde el destino es un directorio existente, y lo interpreta como una solicitud para mover el archivo a ese directorio (usando su nombre actual).Las barras invertidas no tienen nada que ver con esto, porque
.
no es un metacarácter de shell.\.
y.
son los mismos abash
.fuente
El problema es que está moviendo un archivo a un directorio. Esto está permitido fallar.
Te diré cómo fue una vez.
mkdir solía leer esto esencialmente (mientras escribo esto en sh, realmente estaba escrito en C y setuid-root).
Como puede ver, no tiene mucho de especial. y ... excepto por el hecho de que son creados para usted por mkdir y ya existen. Ahora hay un código que dice que no puedes eliminarlos, pero no siempre fue así.
rmdir solía verse así:
fuente