红联Linux门户
Linux帮助

rm 删除链接文件的问题

发布时间:2009-03-07 10:05:09来源:红联作者:微宝贝
今天安装mplayer皮肤的时候,发现/usr/share/mplayer/skins 文件夹下有两个文件
ls -l
drwxr-xr-x 2 root root 4096 03-07 09:32 Blue
lrwxrwxrwx 1 root root 3 03-07 09:37 default -> Blue
我发现default是个链接文件,所以我想把它删除了,然后再把我下载的新皮肤链接一个defaults。这样mplayer就可以自动使用我的新皮肤了。但是就在我删除default时遇到了问题。我执行下面的命令
#rm -Rf default/ (我是按tab补全链接名称的)执行完了,我发现default下面的内容是清空了,但是default本身还是没有删除。
于是我google了一下。发现有人遇到过这样的问题,直接输入#rm -Rf default就可以删除。(没有按tab补全,所以没有后面的 /,文件名是自己手动输入,或者按tab补全之后把 / 再删除)
我试着自己建立一个文件夹,然后在里面建立了几个文件,接着执行 rm -Rf 文件夹名
就可以删除 文件夹内容及其本身。
google给出解决办法的那个人说是rm的bug,可以要是真是bug的话为什么这么久了也没有解决?而且这个要是真是个bug的话,应该有很多人知道,那么早就该解决了阿。这个问题太小了,太好解决了吧?
所以我觉得是不是我疏忽了什么,是不是对于命令的使用还是不很熟悉,有些地方不知道。但是我查看了rm的man文件,似乎是没看见关于删除link文件需要注意的描述。
文章评论

共有 21 条评论

  1. xh_8998 于 2009-06-04 09:28:42发表:

    都是高手啊!

  2. 微宝贝 于 2009-03-12 11:58:14发表:

    锟斤拷锟斤拷:
    命令补全只是为了方便你的操作,
    不是为了培养只会按 RET 的bot,
    连 link、file、dir 都分不清的人,
    怎么学的linux。。。。。。。。。
    himila 发表于 2009-3-11 10:18

    不如你高明

  3. 相思爱文 于 2009-03-11 10:27:02发表:

    锟斤拷锟斤拷:
    问题是/是命令补全自己加上的。
    微宝贝 发表于 2009-3-10 14:15

    链接是一种特殊的文件,系统把当成所指的对象了。

  4. himila 于 2009-03-11 10:18:01发表:

    命令补全只是为了方便你的操作,
    不是为了培养只会按 RET 的bot,
    连 link、file、dir 都分不清的人,
    怎么学的linux。。。。。。。。。

  5. xiongda1016 于 2009-03-10 23:18:47发表:

    rm -rf
    用小r应该可以吧!

  6. 微宝贝 于 2009-03-10 14:15:02发表:

    问题是/是命令补全自己加上的。

  7. yourfriend 于 2009-03-10 09:50:27发表:

    [i=s] 本帖最后由 yourfriend 于 2009-3-10 09:51 编辑 [/i]

    试试把“default/” 写为 "default"

  8. 相思爱文 于 2009-03-10 03:21:17发表:

    链接代替一个路径,如果要删除目录下的文件,用链接和用原目录效果一样。

  9. 微宝贝 于 2009-03-09 22:01:04发表:

    我实验了一下,的确是如楼张所说。我建立了一个文件件,然后建立它的链接,rm a/
    确实会提示 无法删除 “a/”: 不是目录
    但是,既然这样,那么为什么命令补全的时候还会自动加上/呢,要是去掉/,什么事也没有,rm可以删除。

  10. 相思爱文 于 2009-03-09 03:45:16发表:

    [i=s] 本帖最后由 相思爱文 于 2009-3-9 03:59 编辑 [/i]

    链接不是目录,而是指向目录的链接。如果带路径/,那么就是对链接所指的目录操作
    链接代替一个路径。对链接所作的工作,相当于对链接所指向的文件操作。
    利用链接可以删除真实目录下的文件。
    链接不是目录,不能用删除目录的命令。
    这样操作相当于
    touch a
    rm -rf a/
    当然不行了,系统会提示

    锟斤拷锟斤拷:
    rm: 无法删除 “a/”: 不是目录

    之所以看不到是因为命令中有-f参数。可以试下不用-f或用-i看看效果。

  11. 微宝贝 于 2009-03-07 21:38:31发表:

    或许这是最好的解释了。我看是没什么好的解释

  12. wang7131984 于 2009-03-07 21:31:26发表:

    sorry,没注意到是个文件夹,在LINUX中rm只能删除软连接的本身,因为软连接本身也是一个文件,你后面加/就追踪到了指定的文件了。但是还是用unlink比较安全

  13. 微宝贝 于 2009-03-07 21:26:50发表:

    锟斤拷锟斤拷:

    直接rm default就能删除。
    相思爱文 发表于 2009-3-7 19:33

    是,的确是可以直接删除,但是我要是用tab补全即 命令这样执行
    #rm -Rf default/ (命令补全会多一个/)就不行了,只能删除下面的文件,目录本身删除不了

  14. 相思爱文 于 2009-03-07 20:01:13发表:

    [i=s] 本帖最后由 相思爱文 于 2009-3-7 20:38 编辑 [/i]

    锟斤拷锟斤拷:
    你好好看看你的BLUE,链接数是2,这是硬链接呀

    . 和 .. 也是链接啊,因为有.所以链接为2。如果里面再建个目录,那就有了..链接数就为3了。
    cd /tmp #转到昨晚目录
    mkdir test #建立目录
    ls -ld test #这时显示链接数为2
    mkdir test/d1 #建立子目录1
    ls -ld test #这时为3
    mkdir test/d2 #建立子目录2
    ls -ld test #这时为4
    ……
    rm -rf test #强制(不要求确认)删除测试的目录及子目录

  15. 相思爱文 于 2009-03-07 19:55:53发表:

    [i=s] 本帖最后由 相思爱文 于 2009-3-7 20:13 编辑 [/i]

    做个小脚本
    #!/bash
    echo '$cd /tmp'
    cd /tmp
    echo '$mkdir test'
    mkdir test
    echo '$cd test'
    cd test
    echo '$mkdir d1 d2'
    mkdir d1 d2
    echo '$ln -s d1 ln'
    ln -s d1 ln
    echo '$ls -l'
    ls -l
    echo '$ln -snf d2 ln'
    ln -snf d2 ln
    echo '$ls -l'
    ls -l
    echo '$rm ln'
    rm ln
    echo '$ls -l'
    ls -l
    echo '$cd ..'
    cd ..
    rm -rf test
    echo '$rm -rf test'[attach]12004[/attach]

  16. 相思爱文 于 2009-03-07 19:33:48发表:

    [i=s] 本帖最后由 相思爱文 于 2009-3-7 20:44 编辑 [/i]

    直接rm就能删除了,不用加选项
    而rm -rf是递规删除不需确认,尽量少用。
    如果是root身分,绝对路径时多一个空格(#rm -rf / abcd),那就:0w223dc


    直接rm default就能删除。软链接是一个独立的文件,用删文件的方法就能删除了。
    软链接当然也能移动到其他文件系统(分区),如果创建时用的是以/开头的绝对路径,那么移到哪里都一样有效。

  17. 微宝贝 于 2009-03-07 19:15:56发表:

    这是我把KDE皮肤复制到/usr/share/mplayer/skins/ 下面,并重新建立指向KDE的default软连接后
    #ls -l
    drwxr-xr-x 2 root root 4096 03-07 09:32 Blue
    lrwxrwxrwx 1 root root 3 03-07 09:37 default -> KDE
    drwxrwxr-x 2 root zhanghe 4096 03-07 09:33 KDE

  18. 微宝贝 于 2009-03-07 19:12:20发表:

    我的blue可是个文件夹,文件夹是不会存在硬连接的吧?
    而且一个目录,开始的时候就会有两个链接。
    所以那个default应该是blue的软连接。

  19. 微宝贝 于 2009-03-07 16:37:54发表:

    谢谢楼上的,我再仔细的研究一些ln 命令

  20. wang7131984 于 2009-03-07 11:15:51发表:

    这当然不可能是BUG!!!!!!!!,你好好看看你的BLUE,链接数是2,这是硬链接呀,硬链接只是一个文件条目它根本不占用任何空间(甚至不占用索引节点!),用rm删除它只能是删除硬链接的指向文件。有一个更好的删除方法。unlink
    unlink defaults
    ln red defaults#这样就可以使用不删除你blue的内容的情况下更改default,下次你要想换回blue只要再执行一次这一操作~

  21. 微宝贝 于 2009-03-07 11:00:29发表:

    没人说两句?查了半天,没发现有关于删除link文件需要注意的说明