En Ubuntu, ¿por qué no puedo tener una carpeta llamada "MyFile" y un documento llamado "MyFile" en la misma ubicación? Me sale un item already used in this location
error ¿Ubuntu / Linux trata las carpetas y los archivos como los mismos objetos (punteros al disco)?
15
.myfile
?blog
con publicaciones de blog, y una página html llamadablog
con una lista de publicaciones de blog.Respuestas:
En Linux, casi todo es un descriptor de archivo. Un directorio es un tipo especial de archivo que, desde la perspectiva del usuario, puede contener otros archivos.
Por lo tanto, no puede tener ambos con el mismo nombre, en el mismo directorio al mismo tiempo.
Si pudieras, la vida se volvería miserable para los codificadores. ¿Cuál sería el retorno del comando "isDir" cuando alguien quiere crear un directorio y verificar si existe? ¿Debería isDir ("/ home / shrodingers / cat") devolver verdadero, falso o ambos? ¿Y qué esperaría si alguien quiere abrir un directorio de un archivo en algún código?
¿Y qué debe hacer el sistema cuando le dices que abra algo? ¿Asume que quiere el archivo? Eso significa problemas ;)
Por cierto: esto es cierto para TODOS los sistemas operativos, no solo Linux. Aunque desde el punto de vista del escritorio, un sistema operativo podría agregar un identificador único al archivo o directorio y eliminarlo de la lista. Sin embargo, desde el punto de vista de la línea de comandos, sería problemático.
Hay una cosa que tenemos sobre Windows: utilizamos nombres que distinguen entre mayúsculas y minúsculas. Entonces "MYFILE" y "myfile" son cosas diferentes.
fuente
no puede tener dos entidades con el mismo nombre en la misma ubicación. ¿Qué sucederá cuando quieras capturar o vi el archivo? ¿Qué entidad elegirá el sistema operativo? así que debido a la posibilidad de confusión, no podrá tener el mismo nombre para un archivo y carpeta en la misma ubicación. y, por cierto, una carpeta es un archivo que aloja otros archivos.
fuente
cat
ovi
ese nombre, entonces, obviamente, el sistema operativo debería elegir el archivo. ¿Por qué no puede funcionar eso?vi
que generalmente estávim
en Ubuntu, está perfectamente feliz de abrir y mostrar un directorio e incluso editarlo. Pruébalo:vi .
cat
ovi
está dirigido a ese nombre , la interpretación lógica es invocarlo en el archivo en lugar de en el subdirectorio. El hecho de que un comando (principalmente) orientado a archivos (vi
) también funcione en un (sub) directorio es irrelevante para esa declaración.vim
no trata ingenuamente los argumentos de subdirectorios; con el mismo código con el que maneja los archivos.vim
parece ser (a un nivel muy simplista) dos programas en uno: si se invoca en un archivo, actúa como un editor de texto, y si se invoca en un subdirectorio, actúa como un administrador de archivos.vi
. Salud.Sé que este es un tema antiguo, pero tuve el mismo problema y quería compartirlo.
Aquí está mi historia (sea paciente, hay un final feliz).
Entorno:
Gentoo kernel 4.12.5 64bits en reiserfs
¿Cómo pudo pasar esto?
Tengo varias máquinas con una carpeta compartida usando sincronización. En algún momento en el pasado, eliminé un archivo llamado ".stfolder" y creé un directorio con ese nombre. Entonces, tal vez el error se deba a la sincronización sincronizando esta operación en otra máquina.
Ahora examinemos el error: (estoy operando como root aquí)
parece que el archivo es un fantasma, sin embargo, la carpeta responde normalmente (con find)
Lo sé, muy raro ...
¡No puedo eliminar ese archivo fantasma!
Pero al final, lo eliminé con éxito moviéndolo en un punto de montaje tmpfs
Debo decir que el error todavía está presente en tmpfs, por lo que no está relacionado con reiserfs:
Como puede ver en esta salida de bash, el archivo está presente y no presente al mismo tiempo. Debido a esta habilidad del gato Schrödinger , podemos crear una carpeta con el mismo nombre.
Pero espera, hay más (y deberías encontrar esto obvio): también podemos crear otro archivo con el mismo nombre.
El fantasma puede ser copiado (para que pueda duplicar el error), o manipulado por chown, chmod, etc. La única restricción es que no puedes nombrarlo, así que debes ponerlo en un directorio vacío y usar ". *" Como argumentos para esos comandos ... pero funciona!
Debido a la naturaleza misma de este, este archivo estaba vacío desde el principio (es solo una bandera para la sincronización).
Así que tenía curiosidad si podía poner algunos datos en ese archivo.
Y aquí, la solución vino a mí:
Sí, hay un carácter invisible en ese archivo, justo después del punto.
Esto explica todo.
Gracias a Dios, no usé "echo test >>. *" Y cat ...
fuente
U+200b
es un "espacio de ancho cero" , por cierto. Me gusta esta anécdota, aunque me temo que podría no contar completamente como una respuesta./unix//a/238056/139805
wow, esto es realmente extraño, pero acabo de hacer lo que me pidió el autor. Así es como, entonces es una respuesta real: P
esto fue hecho por:
whoah respuesta alternativa dos archivos con el mismo nombre, ni siquiera un directorio y un archivo más ¿qué está pasando ??? _
comportamiento totalmente extraño
fuente