Hapus file di Linux menggunakan nomor inode

14

Jika Anda membuat file di UNIX / Linux dengan karakter khusus, seperti touch \"la*, Anda tidak dapat menghapusnya dengan rm "la*. Anda harus menggunakan nomor inode (Anda bisa jika Anda menambahkan \sebelum nama, saya tahu, tetapi Anda harus menebak sebagai pengguna yang digunakan dalam pembuatan file).

Saya memeriksa halaman manual untuk rm, tetapi tidak disebutkan nomor inode. Melakukan rm inodenumbertidak berhasil juga.

Apa perintah untuk ini?

KdgDev
sumber

Jawaban:

23

Beberapa metode lain termasuk:

melarikan diri dari karakter khusus:

[~] $ rm \ "la \ *

gunakan perintah find dan hanya cari direktori saat ini. Perintah find dapat mencari nomor inode, dan memiliki -deletetombol praktis :

[~] $ ls -i
7404301 "la *

[~] $ find. -maxdepth 1 -type f -inum 7404301
./"la*

[~] $ find. -maxdepth 1 -type f -inum 7404301 -delete
[~] $ ls -i
[~] $
John T
sumber
Heh, menggunakan find tentu lebih mudah dari saran saya, saya tidak pernah memperhatikan -inum :)
Find memiliki banyak sakelar hebat untuk dieksplorasi, ini alat pisau tentara swiss saya untuk menjadi cukup jujur ​​:)
John T
t: oh begitu benar.
akira
Solaris tidak memiliki opsi "-delete" dari "-maxdepth".
guthrie
Anda harus membatasi pencarian dengan -xdevopsi karena sistem file lain yang terpasang mungkin juga memiliki file yang tidak terkait dengan nomor inode yang sama.
Jonas Berlin
5

Mungkin saya melewatkan sesuatu, tapi ...

rm '"la*'

Bagaimanapun, nama file tidak memiliki inode, file tidak. Mencoba menghapus file tanpa menghapus semua nama file yang mengarah ke itu akan merusak sistem file Anda.

Ignacio Vazquez-Abrams
sumber
yah, ini hanya akan berfungsi untuk direktori saat ini, tapi itu memang alasan yang perlu diperhatikan. Bodoh bahwa saya melewatkan itu. Masih tidak menghapus file.
KdgDev
3
Tentu saja tidak. File hanya dihapus ketika tidak ada lagi nama file yang menunjuk padanya dan tidak ada proses menahannya.
Ignacio Vazquez-Abrams
5

Jika Anda benar - benar ingin melakukan ini - dan use case Anda tidak benar-benar terlihat seperti Anda perlu sama sekali, Anda dapat mencoba alat debugging sistem file. Jika Anda rela kehilangan segalanya, itu saja.

Misalnya, untuk ext2 / debugfs3/4 perintah memiliki opsi "kill_file" yang tampaknya mengambil inode. Seperti disebutkan dalam respons lain, ini akan merusak sistem file Anda, karena akan ada entri direktori yang menunjuk ke file yang tidak ada. Berjalan fscksesudahnya mungkin dapat memperbaiki ini. Tidak mungkin Anda dapat melakukan ini pada sistem file yang dipasang.

Tapi saya sangat menyarankan Anda hanya menggunakan melarikan diri / mengutip dan menghapus file seperti itu dengan rmperintah biasa seperti yang disebutkan dalam respons sebelumnya - dan gunakan rm -iuntuk keamanan ekstra ketika berhadapan dengan nama file yang mengandung karakter globbing seperti *


sumber
1

Sementara saya sangat merekomendasikan pendekatan "escape the special karakter", selalu ada clriperintah ketika Anda benar-benar ingin memperbaiki filesystem yang diperbaiki.

mpez0
sumber
2
Perlu dicatat bahwa clribiasanya hanya ada pada sistem Oracle (misalnya SunOS).
can-ned_food
1

Anda dapat menghapus file yang dimulai dengan tanda hubung dengan memanggil rm -- filename.

uli42
sumber
1
Tampaknya ini merupakan komentar atas jawaban ini dan bukan jawaban untuk pertanyaan OP.
Saya katakan Reinstate Monica
1

Tantangan yang saya miliki adalah menghapus nama file yang dimulai dengan tanda hubung - rm selalu ingin menafsirkannya sebagai nama host. Saya memecahkan ini dengan menggunakan:

rm ./-g4xxx
Anthony V Edwards
sumber