An inode identifies the file and its attributes such as file size, owner, and so on. A unique inode number within the file system identifies each inode. But, why to delete file by an inode number? Sure, you can use rm command to delete file. Sometime accidentally you creates filename with control characters or characters which are unable to be input on a keyboard or special character such as ?, * ^ etc. Removing such special character filenames can be problem. Use following method to delete a file with strange characters in its name:
Please note that the procedure outlined below works with Solaris, FreeBSD, Linux, or any other Unixish oses out there:
Find out file inode
First find out file inode number with any one of the following command:
stat {file-name}
OR
ls -il {file-name}
Use find command to remove file:
Use find command as follows to find and remove a file:
find . -inum [inode-number] -exec rm -i {} \;
When prompted for confirmation, press Y to confirm removal of the file.
Delete or remove files with inode number
Let us try to delete file using inode number.
(a) Create a hard to delete file name:
$ cd /tmp
$ touch "\+Xy \+\8"
$ ls
(b) Try to remove this file with rm command:
$ rm \+Xy \+\8
(c) Remove file by an inode number, but first find out the file inode number:
$ ls -ilOutput:
781956 drwx------ 3 viv viv 4096 2006-01-27 15:05 gconfd-viv 781964 drwx------ 2 viv viv 4096 2006-01-27 15:05 keyring-pKracm 782049 srwxr-xr-x 1 viv viv 0 2006-01-27 15:05 mapping-viv 781939 drwx------ 2 viv viv 4096 2006-01-27 15:31 orbit-viv 781922 drwx------ 2 viv viv 4096 2006-01-27 15:05 ssh-cnaOtj4013 781882 drwx------ 2 viv viv 4096 2006-01-27 15:05 ssh-SsCkUW4013 782263 -rw-r--r-- 1 viv viv 0 2006-01-27 15:49 \+Xy \+\8
Note: 782263 is inode number.
(d) Use find command to delete file by inode:
Find and remove file using find command, type the command as follows:
$ find . -inum 782263 -exec rm -i {} \;
Note you can also use add \ character before special character in filename to remove it directly so the command would be:
$ rm "\+Xy \+\8"
If you have file like name like name "2005/12/31" then no UNIX or Linux command can delete this file by name. Only method to delete such file is delete file by an inode number. Linux or UNIX never allows creating filename like 2005/12/31 but if you are using NFS from MAC OS or Windows then it is possible to create a such file.
See also:
Featured Articles:
- 20 Linux System Monitoring Tools Every SysAdmin Should Know
- 20 Linux Server Hardening Security Tips
- 10 Greatest Open Source Software Of 2009
- My 10 UNIX Command Line Mistakes
- Top 5 Email Client For Linux, Mac OS X, and Windows Users
- Top 20 OpenSSH Server Best Security Practices
- Top 10 Open Source Web-Based Project Management Software
- Top 5 Linux Video Editor Software
- Email this to a friend
- Download PDF version
- Printable version
- Comment RSS feed
- Last Updated: Dec/14/2007



{ 29 comments… read them below or add one }
What I’m wondering is:”how to do that on a remote server via ftp?” :)
Very easy :) Login to your remote ftp server.
ftp http://ftp.some.com
Goto directory where special character files placed. And type command:
mdel *
mdel will ask you if you really wish to delete each file in the directory. Make sure you answer y (for yes) for each file containing the special character that you wish to delete. Hope this helps.
how about deleting the file using
rm ./”filename”
as in this case $ rm “+Xy +8″
./+Xy +8: ? (y/n) y
$
adding to my previous post there is an instance when your rm “filename” wont work.
say u created a file –help
it wont get deleted by using rm “–help”
so we have to rm ./”–help”
Anonymous: your tip won’t work if the filename has very weird characters (non-printable characters, that is)
“Anonymous: your tip won’t work if the filename has very weird characters (non-printable characters, that is)”
Um, yes it will, did you actually try it? Eg, go in to vi and save a file with :wq [ctrl-v backspace]q[ctrl-v backspace]
which would look like “^?q^?” and continue. Now you have:
-rw-r–r– 1 root wheel 0B Sep 12 00:55 ?q?
Where’s the ^!!!!
So now with ls -li:
516 -rw-r–r– 1 root wheel 0 Sep 12 00:55 ?q?
and:
[root@host ~]# find . -inum 516 -exec rm -i {} ;
remove ./q? y
[root@host ~]#
file is gone.
To make sure find only finds the files in the correct directory use the -mount switch to prevent it jumping across mount points.
This is a simple process:
root@liam # mkdir ^Hms^?
root@liam # ls -l
total 14
drwxr-xr-x 2 root other 512 Dec 22 12:59ms
list the directory using octal representation. So you know the control characters in the name.
root@liam # ls -lb
total 14
drwxr-xr-x 2 root other 512 Dec 22 12:59 10ms\177
Now simply rm “Control V”"Backspace”ms”Control V”"Delete”
Where Control V is a key combination and Backspace is a key. As is Delete. In the above example 10 is BS (BackSpace) and \177 is Delete.
Very simple…
I have a directory structure:
# ls -ila
total 20
2179132 drwxrwsr-x 2 www www 16384 2007-09-14 00:16 .
2081399 drwxrwsr-x 101 www www 4096 2007-06-27 14:32 ..
? ?——— ? ? ? ? ? 1a6b29c00be.jar
the last entry couldn’t remove (fsck.ext3 /dev/sd12, rm -f, rm -rf to parent dir, stb…), because no inode. I no idea how to remove it, only found format the partition :(
William, I’ve your problem too:
ls -lia
total 40
14663798 drwxr-xr-x 2 1001 1001 36864 2007-10-26 13:27 .
14663789 drwxr-xr-x 3 1001 1001 4096 2007-10-26 13:27 ..
? ?——— ? ? ? ? ? PROVA D’ABILIT? FF8.htm
? ?——— ? ? ? ? ? Prova d’abilit? ff9.htm
I can’t format the partition! There is more than 100Gb of backup file in it!!!!
someone have some further suggestions?
I was able to remove a weird file name with unlink in Linux.
I just inputted:
unlink ‘weird file !@#$%&.txt’
other way to remove files: try e2fsprogs
it is working on hardly not removing files with wrong attributes
debugfs
open -w /dev/…
rm File
close
q
be carefull!
Desi Style. Move all others which you can delete to a different folder.
Then rm -rf * & restore all those back
It is very useful command to delete files which contain special Characters..
what is rootkit
Thanks, that worked very well!
how about if removing a directory with special character with a file within it?
Hi,
I am trying to delete a file with inode number in hp ux but it is not prompting anything neither it is deleting teh file?
what can be the problem??
Thanks
MindGrill
http://mindgrillq.blogspot.com
So now the other way around, I want to put back in the directory structure file that is still used by some process (inode is hnown from the /proc//fd).
Hi All,
permission all files are: -rwxrw-rw-
I have 23982 total of files, I am triying to remove all of it but I alwasy got this error: “Permission denied”
what I have tried:
tried to change the permission on single file
chmod 777 filename
chmod: WARNING: can’t access 777
chmod: ERROR: invalid mode
(not working)
chown to my id (not working)
rm using inode (same error: Permission denied)
rm using wildcard (not working)
mv some files or single file to other directory (not working: Persmissin denied)
please help me to remove this junk files…
thanks,
Zimx
I have a file called winhelp.exe16. I can not delete it, neither by your method!
I am from Brazil, “Operação não permitida” means “Operation not allowed”.
[yr@localhost dlls]$ ls -l winhelp*
—–w—- 1 root 32784 98320 Jan 4 1970 winhelp.exe16
[yr@localhost dlls]$ stat winhelp*
File: `winhelp.exe16′
Size: 98320 Blocks: 16 IO Block: 4096 arquivo comum
Device: 308h/776d Inode: 289 Links: 1
Access: (0020/—–w—-) Uid: ( 0/ root) Gid: (32784/ UNKNOWN)
Access: 1970-01-02 18:30:56.000000000 -0300
Modify: 1970-01-04 06:55:28.000000000 -0300
Change: 1970-01-03 12:43:12.000000000 -0300
[yr@localhost dlls]$ find . -inum 289 -exec rm -i {} \;
rm: remove write-protected arquivo comum `./winhelp.exe16′? y
rm: imposível remover `./winhelp.exe16′: Operação não permitida
[yr@localhost dlls]$ su
Password:
[root@localhost dlls]# find . -inum 289 -exec rm -i {} \;
rm: remove write-protected arquivo comum `./winhelp.exe16′? y
rm: imposível remover `./winhelp.exe16′: Operação não permitida
[root@localhost dlls]#
Hi, people,
I got a way to delete this file. I ‘ve used debugfs. It has a rm command like the shell. Easy boys, read the man page.
normal people use rm — \\+Xy\ \\+\\8 , and that’s it :)
that long line is a double middle dash :\ rm “double dash” etc..
Hi friend,
Can any one teach me or tell me how to do backup using tape drive. currently i using “tar cMvf /dev/st0 /home” but not very sure on this. how to do complete backup for few directory using 1 command.
Thanks
thiru
How can I delete a picture in Linux?
Guys, for most cases you can just cd into another dir and do rm ../”-rf-file” and it works a charm. Only prob I had which brought me here was a file name “^M”
don’t ask how I got it but i could not delete it to save my life…
I have a server with a web app,
my inodes are all used up,
i see this tutorial to delete inodes,
but, i do not know which inodes/files to delete
i dont know where my web app is creating this innodes… how can i know this?’
got a 2gb+ file which refuses to delete because of file system does not like large files. sco openserver unix.
my question is: can i delete it using the inode thing. i don’t want to risk it by trying it before i know the concequences!.
Thanks for yor help