Dans Ubuntu, pourquoi ne puis-je pas avoir un dossier nommé "MyFile" et un document nommé "MyFile" au même endroit? J'ai une item already used in this location
erreur. Ubuntu / Linux traite-t-il les dossiers et fichiers comme les mêmes objets (pointeurs vers le disque)?
15
.myfile
,?blog
contenant un dossier appelé avec des articles de blog et une page html appeléeblog
avec une liste d'articles de blog.Réponses:
Sous Linux, presque tout est un descripteur de fichier. Un répertoire est un type spécial de fichier qui, du point de vue de l'utilisateur, peut contenir d'autres fichiers.
Vous ne pouvez donc pas avoir les deux avec le même nom, dans le même répertoire en même temps.
Si vous le pouviez, la vie deviendrait misérable pour les codeurs. Que voudriez-vous que la commande "isDir" renvoie lorsque quelqu'un veut créer un répertoire et vérifier qu'il existe. IsDir ("/ home / shrodingers / cat") doit-il renvoyer true, false ou les deux? Et à quoi vous attendriez-vous si quelqu'un veut ouvrir un répertoire d'un fichier dans du code?
Et que doit faire le système lorsque vous lui dites d'ouvrir quelque chose? Supposons que vous vouliez le fichier? Cela signifie des ennuis ;)
Soit dit en passant: cela est vrai pour TOUS les systèmes d'exploitation, pas seulement Linux. Bien que du point de vue du bureau, un système d'exploitation puisse ajouter un identifiant unique au fichier ou au répertoire et le supprimer de la liste. Du point de vue de la ligne de commande, ce serait problématique.
Il y a une chose que nous avons sur Windows: nous utilisons des noms sensibles à la casse. Donc "MYFILE" et "myfile" sont des choses différentes.
la source
vous ne pouvez pas avoir deux entités portant le même nom au même emplacement. que se passera-t-il lorsque vous voudrez cat ou vi le fichier? quelle entité l'OS choisira-t-il? ainsi, en raison de la possibilité de confusion, vous ne pourrez pas avoir le même nom pour un fichier et un dossier au même emplacement. et par la façon dont un dossier est un fichier qui héberge d'autres fichiers.
la source
cat
ouvi
ce nom, alors, évidemment, le système d'exploitation devrait choisir le fichier. Pourquoi ça ne marche pas?vi
ce qui est généralementvim
sur Ubuntu est parfaitement heureux d'ouvrir et d'afficher un répertoire et même de le modifier. Essayez-le:vi .
cat
ouvi
est adressée à ce nom , l' interprétation logique consiste à l'invoquer dans le fichier plutôt que dans le sous-répertoire. Le fait qu'une commande (principalement) orientée fichier (vi
) fonctionne également sur un (sous-) répertoire n'est pas pertinent pour cette instruction.vim
ne traite pas les arguments des sous-répertoires avec naïveté; avec le même code avec lequel il gère les fichiers.vim
semble être (à un niveau très simpliste) deux programmes en un: s'il est invoqué sur un fichier, il agit comme un éditeur de texte, et s'il est invoqué sur un sous-répertoire, il agit comme un gestionnaire de fichiers.vi
. À votre santé.Je sais que c'est un vieux sujet, mais je viens d'avoir le même problème et je voulais partager.
Voici mon histoire (soyez patient, il y a une fin heureuse).
Environnement:
noyau Gentoo 4.12.5 64bits sur reiserfs
Comment cela a-t-il pu arriver?
J'ai plusieurs machines avec un dossier partagé en utilisant la synchronisation. À un certain moment dans le passé, j'ai supprimé un fichier nommé ".stfolder" et créé un répertoire avec ce nom à la place. Alors peut-être que le bogue est dû à la synchronisation de la synchronisation de cette opération sur une autre machine.
Examinons maintenant le bug: (j'opère en tant que root ici)
ressemble au fichier est un fantôme mais le dossier répond normalement (avec find)
Je sais, très bizarre ...
Je ne peux pas supprimer ce fichier fantôme!
Mais à la fin, je l'ai supprimé avec succès en le déplaçant sur un point de montage tmpfs
Je dois dire que le bug est toujours présent sur tmpfs, donc pas lié à reiserfs:
Comme vous pouvez le voir dans cette sortie bash, le fichier est présent et non présent en même temps. En raison de cette capacité de chat Schrödinger , nous pouvons créer un dossier avec le même nom.
Mais attendez, il y a plus (et vous devriez trouver cela évident): nous pouvons également créer un autre fichier avec le même nom.
Le fantôme peut être copié (donc je peux dupliquer le bogue), ou manipulé par chown, chmod, etc. la seule restriction est que vous ne pouvez pas le nommer donc vous devez le mettre dans un répertoire vide et utiliser ". *" Comme arguments pour ces commandes ... mais ça marche!
En raison de sa nature même, ce fichier était vide depuis le début (c'est juste un indicateur de synchronisation).
J'étais donc curieux de pouvoir mettre des données dans ce fichier.
Et ici, la solution m'est venue:
Oui, il y a un caractère invisible dans ce fichier, juste après le point.
Cela explique tout.
Dieu merci, je n'ai pas utilisé "test d'écho >>. *" Et chat ...
la source
U+200b
est un "espace de largeur nulle" , soit dit en passant. J'aime cette anecdote, même si je crains qu'elle ne soit pas entièrement considérée comme une réponse./unix//a/238056/139805
wow c'est vraiment bizarre mais je viens de faire ce que l'auteur a demandé. Voici comment, c'est donc une vraie réponse: P
cela a été fait par:
whoah alternent deux fichiers avec le même nom, même plus un répertoire et un fichier ce qui se passe ??? _
comportement totalement étrange
la source