如何:Linux / UNIX 删除或移除具有 Inode 号的文件
一个 inode 标识文件及其属性,如文件大小、所有者等。文件系统中唯一的inode 编号标识每个 inode。但是,为什么要通过 inode 编号删除文件呢?当然,您可以使用 rm 命令删除文件。有时您会不小心创建了带有控制字符或键盘无法输入的字符或特殊字符(如 ?、* ^ 等)的文件名。删除此类特殊字符文件名可能会有问题。使用以下方法删除名称中带有奇怪字符的文件:
请注意,下面概述的程序适用于 Solaris、FreeBSD、Linux 或任何其他 Unixish 操作系统:
查找文件 inode
首先使用以下任一命令找出文件 inode 编号:
stat {文件名}
或者
ls -il {文件名}
使用 find 命令删除文件:
使用 find 命令如下来查找并删除文件:
查找 . -inum [inode 编号] -exec rm -i {} \;
当提示确认时,按 Y 确认删除该文件。
删除或移除具有 inode 号的文件
让我们尝试使用 inode 编号删除文件。
(a)创建一个难以删除的文件名:
$ cd /tmp
$ touch "\+Xy \+\8"
$ ls
(b)尝试使用 rm 命令删除此文件:
$ rm \+Xy \+\8
(c)通过 inode 号删除文件,但首先找出文件 inode 号:
$ ls -il
输出:
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
注意:782263是 inode 编号。
(d)使用find命令按inode删除文件:
使用find命令查找并删除文件,输入命令如下:
$ find . -inum 782263 -exec rm -i {} \;
请注意,您也可以在文件名中的特殊字符前添加 \ 字符来直接将其删除,因此命令如下:
$ rm "\+Xy \+\8"
如果您有类似名称的文件,例如名称“2005/12/31”,则没有 UNIX 或 Linux 命令可以通过名称删除此文件。删除此类文件的唯一方法是通过 inode 编号删除文件。Linux 或 UNIX 绝不允许创建类似 2005/12/31 的文件名,但如果您使用 MAC OS 或 Windows 中的 NFS,则可以创建此类文件。