J'ai essayé d'enlever le '.' annuaire. Je pensais pouvoir supprimer mon répertoire de travail sans avoir à entrer dans un répertoire parent.
Le but de ma question est de vous aider à comprendre comment le système linux fonctionne pour supprimer des fichiers.
filesystems
directory
rm
Goldname
la source
la source
rm .
etrmdir .
ne fonctionne pas, mais pourquoi ils sont spécifiés comme ne fonctionnant pas, ce qui est indépendant de l'existence physique d'un lien solide.rm -rf .*
ne faire que trouver ceci, y compris non seulement,.
mais aussi..
, et ensuite../..
, et ensuite…Réponses:
La suppression du répertoire en cours n'affecte pas l'intégrité du système de fichiers ni son organisation logique. Pour empêcher la
.
suppression, il faut suivre la norme POSIX indiquée dans larmdir(2)
page de manuel:Une raison peut être trouvée dans la
rm
page de manuel:D'autre part, supprimer explicitement le répertoire en cours (c'est-à-dire en indiquant son chemin complet ou relatif) est une opération autorisée sous Unix, du moins depuis SVR3 car il était interdit avec Unix version 7 jusqu'à SVR2. Ceci est très similaire à ce qui se produit lorsque vous supprimez un fichier en cours de lecture ou d'écriture. Les processus accédant au fichier de suppression continuent leurs opérations de lecture et d'écriture comme si rien ne s'était passé. Une fois que vous avez supprimé un répertoire de processus en cours, ce répertoire n'est plus accessible par son chemin, mais son inode reste présent sur le système de fichiers jusqu'à la fin du processus ou la modification de son propre répertoire.
Notez que le processus ne pourra pas utiliser un chemin relatif à son répertoire actuel pour changer son cwd (par exemple
cd ..
) car il n'y a plus d'..
entrée dans son répertoire actuel.Lorsque le type de quelqu'un
rmdir .
, ils attendent probablement l'entrée du répertoire en cours à supprimer , mais quand un répertoire est supprimé ( en utilisant son chemin), trois entrées du répertoire sont effectivement supprimés,.
,..
et le répertoire lui - même.Supprimer uniquement
.
et pas l'entrée de répertoire de ce répertoire créerait un répertoire non conforme, mais comme déjà indiqué, il est interdit par la norme.Comme @Emmanuel l'a fait remarquer à juste titre, il y a une deuxième raison pour laquelle le retrait
.
n'est pas autorisé. Il existe au moins un système d'exploitation compatible POSIX (Mac OS X avec HFS +) qui, avec de fortes restrictions, prend en charge la création de liens durables vers des répertoires existants. Dans ce cas, il n’existe aucun moyen clair, à l’intérieur du répertoire, de savoir quel lien physique est celui qui doit être supprimé.la source
..
- répertoires y sont liés . C’est le cas unique delink count > 2
la majorité écrasante des systèmes d’exploitation et des systèmes de fichiers. Par conséquent, "certains systèmes de fichiers et / ou systèmes d’exploitation" est un euphémisme. La seule exception connue non historique est Mac OS X avec HFS +, qui ajoute des restrictions sur qui et quoi faire. Accordé le commentaire POSIX est dirigé vers cette bizarrerie. Voir unix.stackexchange.com/questions/22394/…rm -r .*
et tout a été balayé récursivement dans le répertoire parent… C’était il ya plus de dix ou deux ans, mais il est bon de savoir que celarm
n’est plus permis.C'est fait comme ça pour l'intégrité puisque vous êtes actuellement dans ce répertoire et que ce
.
n'est qu'une auto-référence.Vous devez soit aller dans son parent ou appeler
rmdir
avec son chemin, ce qui peut être fait avec:Si vous en avez souvent besoin, vous pouvez lui attribuer un alias tel que:
.. qui pourrait être appelé
rmc
seul pour supprimer le répertoire actuel.la source
rmdir .
intégrité du système de fichiers de compromis de commande d'une manièrermdir $(pwd)
ourmdir "$PWD"
ne fonctionne pas?rm *
et qu'entendez-vous par historique du shell? 2. La réponse a abordé la partie pourquoi , 3. Vous souhaitez élaborer?rmdir $(pwd)
,pwd
définit un nom logique pour le répertoire en cours, par exemple/foo/bar/baz
, puisrmdir
, voyant ce chemin, supprime l'baz
entrée du/foo/bar
répertoire, à condition que les conditions soient remplies. C'est logique. La commandermdir .
, en revanche, est une instruction pour supprimer l’.
entrée du répertoire actuel, ce qui n’est ni autorisé (cela violerait la contrainte que chaque répertoire ait une.
entrée pointant sur elle-même) ni utile (elle ne supprimerait pas le lien). tu voulais enlevé).