忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 52753 | 回复: 16

linux shell中,unlink和rm命令有什么区别呢? [复制链接]

论坛徽章:
0
发表于 2008-02-16 01:16 |显示全部楼层
大家好,
最近学习linux,看到文件系统的基本概念:硬链接,发现shell下两个命令,unlink和rm
比如:
shell> unlink test.txt
shell> rm      test.txt

如果test.txt这个文件不是软链接,而是硬链接,那么,在shell下,unlink和rm对test.txt的操作在本质上有什么区别呢?
谢谢!

论坛徽章:
0
发表于 2008-02-16 02:04 |显示全部楼层
如果是硬链接的话,感觉是没区别了

论坛徽章:
0
发表于 2008-02-16 02:36 |显示全部楼层
那如果是软链接呢?
我实现的效果好像也是一样

论坛徽章:
0
发表于 2008-02-16 02:57 |显示全部楼层
strace 跑 rm 與 unlink,結果有不同地方.

1. strace rm 1.txt 片段


  1. access("1.txt", W_OK)                   = 0
  2. unlinkat(AT_FDCWD, "1.txt", 0)          = 0
复制代码


2. strace unlink 2.txt 片段

  1. unlink("2.txt")                         = 0
复制代码


我想可以再看看 unlink 與 unlinkat 的 manpage 說明應該有答案 ?


  1.        The  unlinkat() system call operates in exactly the same way as either unlink(2) or rmdir(2) (depending on
  2.        whether or not flags includes the AT_REMOVEDIR flag) except for the differences described in  this  manual
  3.        page.

  4.        AT_REMOVEDIR
  5.               By default, unlinkat() performs the equivalent of unlink(2) on pathname.  If the AT_REMOVEDIR  flag
  6.               is specified, then performs the equivalent of rmdir(2) on pathname.
复制代码


測試用 strace rm -r testdir 方式刪除一個目錄與其下的檔案目錄,結果為:


  1. access("testdir", W_OK)                       = 0
  2. unlinkat(AT_FDCWD, "testdir", AT_REMOVEDIR)   = 0
复制代码


所以結論一般命令用 rm 或是 unlink 都可以刪除檔案,因為都是一樣的意思。系統面呼叫來說刪除檔案一般還是使用 unlink() 呼叫,只是有另外提供 unlinkat 提供相同機制,但是可以刪除檔案或是空目錄。

不過我想其他系統的 rm 與 unlink 是有差異的,比方 solaris 就不一樣。


  1. -bash-3.00$ uname -a
  2. SunOS solaris 5.10 Generic_118855-33 i86pc i386 i86pc
复制代码


man unlink :


  1. System Administration Commands                           link(1M)

  2. NAME
  3.      link, unlink - link and unlink files and directories

  4. SYNOPSIS
  5.      /usr/sbin/link  existing-file new-file

  6.      /usr/xpg4/bin/link  existing-file new-file

  7.      /usr/sbin/unlink  file

  8. DESCRIPTION
  9.      The link and unlink  commands  link  and  unlink  files  and
  10.      directories.  Only  super-users  can  use  these commands on
  11.      directories.
复制代码


我想詳細部份需要自行測試:p


--

[ 本帖最后由 kenduest 于 2008-2-16 03:10 编辑 ]

评分

参与人数 1可用积分 +15 收起 理由
零二年的夏天 + 15 精品文章

查看全部评分

论坛徽章:
0
发表于 2008-02-16 12:49 |显示全部楼层
非常感谢版主大人的回复!
学习ing.....

论坛徽章:
0
发表于 2008-04-02 16:33 |显示全部楼层
原来如此,长学问了哦哦
(不来只想打一个o,但是系统规定必须10个字以上)

论坛徽章:
0
发表于 2011-10-11 13:57 |显示全部楼层
果断锕

论坛徽章:
0
发表于 2011-10-27 21:14 |显示全部楼层
不是很明白

论坛徽章:
0
发表于 2011-12-16 22:48 |显示全部楼层
回复 1# new_learner


    unlink一般用于服务进程,进程在unlink时不会立刻删除文件,而是在进程终止时删除文件,一些服务程序通过文件及对文件加锁来保持进程的唯一性,为了保证程序没有正常结束下次再启动时能正常启动,程序会在开始时新建一个文件然后调用unlink,在CentOS下重启后会发现此文件已删除,但是用KILL -9 杀死进程时似乎不能删除文件(要重启才可以)

论坛徽章:
12
2015亚冠之北京国安
日期:2015-10-07 14:28:19NBA常规赛纪念章
日期:2015-05-04 22:32:03处女座
日期:2015-01-15 19:45:44卯兔
日期:2014-10-28 16:17:14白羊座
日期:2014-05-24 15:10:46白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56寅虎
日期:2014-05-10 09:50:35狮子座
日期:2013-09-08 08:37:5215-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:03
发表于 2012-04-22 13:17 |显示全部楼层
很有用的帖子,收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP