Debugfs dosyasında ext4 dosya sisteminde “filen / ame” (eğik çizgiyle) adlı bir dosyayı nasıl silebilirim?


26

E2fsprogs ile oynamak debugfs, değişiklik / kaza ile adlı bir dosya filen/ameyaratıldı. Açıkçası, eğik çizgi /karakteri, pathnamesindeki özel ayırıcı karakter olarak işlev görür.

Yine de kullanarak debugfs, adlandırılmış dosyayı kaldırmak istedim filen/ame, ancak /karakter dosya adının bir parçası olarak yorumlanmadığından çok az başarılı oldum.

Debugfs, eğik çizgiyi içeren bu dosyayı kaldırmak için bir yol sağlar mı? Öyleyse nasıl?

Kullandım:

cd /tmp
echo "content" > contentfile
dd if=/dev/zero of=/tmp/ext4fs bs=1M count=50
mkfs.ext4 /tmp/ext4fs
debugfs -w -R "write /tmp/contentfile filen/ame" /tmp/ext4fs
debugfs -w -R "ls" /tmp/ext4fs

hangi çıktılar:

debugfs 1.43.4 (31-Jan-2017)
 2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen/ame

filen/ameDosyayı kaldırmak için aşağıdakileri denedim :

debugfs -w -R "rm filen/ame" /tmp/ext4fs

ama bu işe yaramadı ve sadece üretti:

debugfs 1.43.4 (31-Jan-2017)
rm: File not found by ext2_lookup while trying to resolve filename

Dizin düğümünün içeriğinin manuel olarak değiştirilmesi dışında, dosyayı kullanarak dosyayı kaldırmanın bir yolu var debugfsmı?


Eğik çizgiden ( filen\/ame) kaçmak çalışmıyor mu?
JAB

17
+1 ve tebrikler. Sadece iki dosya adı "tuhaf karakter" durumundan birini bulmayı başarabildiniz, burada karakterden bir kabuk komutunda doğru bir şekilde alıntı yapmak ve / veya karakterden kaçmak sorunu çözmez. (Diğeri dosya adında boş bir bayt olur, ancak çoğu dosya sisteminde bu adı kısaltacağından şüpheliyim.)
Ilmari Karonen

Yanıtlar:


33

Düzeltme yapmak istiyor ve sadece denemek istemiyorsanız, fsck'in işi sizin için yapmasını debugfssağlayabilirsiniz . Dosya sistemini kirli olarak işaretleyin ve dosya adını değiştirmek için çalıştırın :fsck -y

$ debugfs -w -R "dirty" /tmp/ext4fs
$ fsck -y /tmp/ext4fs
 ...
/tmp/ext4fs was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Entry 'filen/ame' in / (2) has illegal characters in its name.
Fix? yes
 ...
$ debugfs -w -R "ls" /tmp/ext4fs
2  (12) .    2  (12) ..    11  (20) lost+found    12  (980) filen.ame   

3
e2fsck-f“dosya sistemi temiz görünse bile” tam kontrole götürecek bir orce seçeneğine sahiptir.
David Foerster

3

Fsck çalışması için tebrikler; nedense işe yaramadı eğer cevap olduğunu ls -i1takip umountve sonra clri.

Ref: http://docstore.mik.ua/orelly/unix/upt/ch23_13.htm

Aslında bu yöntemi test ettim.


Eğer bu Linux ise (ki gibi görünüyor), bunun clriayrı bir komut olmadığını (diğer bazı Unix sistemlerinde olduğu gibi) olmadığını belirtmeye değer , içinde bir alt komut var debugfs.
hobbs

@ hobbs: o zaman benim sıradışı yapmak gerekir. Bekle, nvm clri sadece "2 $ clri" yankılandı debugfs "$ 1"
Joshua

Talimatlarınız yine de fsck çalıştırılmasını gerektiriyor - bu da sorunu Entry 'filen/ame' in / (2) has deleted/unused inode 12. Clear<y>?giderecek, diğer cevapta yazılanın yerine mesajla - ama clri yapmak fazladan bir adım. Bunu tamamen debugfs içinden çözmenin bir yolu yok gibi görünüyor.
Random832

@ Random832: Geçmişte kendime tamir etmemiştim. :(
Joshua

-1

Dosyayı bir dizine taşırsanız, dizini içinde bulunan dosyayla silebilirsiniz.

mkdir foo 
mv filen* foo
rm -rf foo

1
Bu, diğer garip bir dosya adı için işe yarar, ancak içinde bulunan bir dosya adı için çalışmaz /.
zwol
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.