È concepibile che tale aberrazione possa essere creata se qualcuno ha detto
mkdir /tmp/strange_dir
in un momento in cui il filesystem era pieno (cioè non c'erano blocchi liberi).
Sarebbe ancora (probabilmente) stato possibile creare il strange_dir
voce di directory in /tmp
, perché ciò richiederebbe solo pochi byte di
spazio inutilizzato in uno dei blocchi già assegnati /tmp
.
Ma sarebbe stato impossibile assegnare un blocco per strange_dir
si,
e quindi sarebbe stato impossibile
creare il .
e ..
inserimenti. In tal caso,
Mi aspetterei che mkdir
programma da rimuovere (scollegare)
il strange_dir
voce di directory in /tmp
,
ma il software non sempre fa ciò che mi aspetto.
Altre possibilità:
mkdir
ottenuto interrotto (terminato)
tra la creazione del strange_dir
voce di directory in /tmp
e creando il .
e ..
voci in strange_dir
.
Mi aspetterei mkdir
per catturare il segnale di interruzione
(Cioè, Ctrl + C ) e ripulire se stesso,
ma vedi sopra per quanto riguarda il software e le mie aspettative su di esso.
E, naturalmente, non può catturare il segnale di uccisione o un crash del sistema.
rmdir
ottenuto interrotto (terminato)
tra lo scollegamento del .
e ..
voci in strange_dir
e scollegare il strange_dir
voce di directory in /tmp
.
Ci si potrebbe aspettare che il fsck
che corre dopo un incidente
rileverà il strange_dir
e fare qualcosa al riguardo, ma ....
Sì, certo, se una directory ha una dimensione pari a 0,
ciò significa che non ha nessun blocco ad esso assegnato,
e quindi non può avere alcun contenuto
(nemmeno quelli piccoli come .
e ..
).
Non capisco del tutto perché cd ..
funzionerebbe quando non c'è ..
,
ma vedi la discussione in Rimozione di una directory dall'interno
utilizzando l'interfaccia della riga di comando . Si scopre che
mkdir /tmp/strange_dir
cd /tmp/strange_dir
ls -lai ← Mostra normale . e .. , con numeri di inode. rmdir / tmp / strange_dir
pwd ← Ancora rapporti / Tmp / strange_dir
ls -lai ← Mostra la directory vuota: Totale 0
ls -ldi ← Spettacoli . con lo stesso numero di inode che aveva prima,
ma con una dimensione di 0 e un conteggio dei collegamenti pari a 0. cd .. ← Ti rimette in / tmp
Questa situazione non è perfettamente analoga a quella in questa domanda,
perché, in questo altro caso, strange_dir
viene rimosso da /tmp
.
Ma lo suggerisce cd ..
è speciale, e talvolta funziona quando non esiste un meccanismo ovvio con il quale potrebbe farlo.
Strana differenza tra pwd e / bin / pwd suggerisce una possibilità
su come questo potrebbe funzionare. La shell tiene traccia della tua directory attuale.
Cioè, tiene traccia di una migliore ipotesi su quale sia la directory corrente.
Può essere ingannato da link simbolici e trucchi come
mkdir /tmp/foo
cd /tmp/foo
mv /tmp/foo /tmp/foobar
vale a dire, penserà ancora che la directory corrente sia /tmp/foo
,
e così è quello pwd
riferirà,
ma pwd -P
e /bin/pwd
riferirà /tmp/foobar
.
Quindi, potrebbe essere quello, se chdir("..")
non riesce,
la shell calcola ciò che pensa debba essere la tua directory di livello superiore,
e ci va assolutamente
(Ma sospetto che ci sia dell'altro.)
stat
la directory; facd strange_dir; stat -l .
dare qualcosa?