免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 86641 | 回复: 16
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(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
2 [报告]
发表于 2008-02-16 02:04 |只看该作者
如果是硬链接的话,感觉是没区别了

论坛徽章:
0
3 [报告]
发表于 2008-02-16 02:36 |只看该作者
那如果是软链接呢?
我实现的效果好像也是一样

论坛徽章:
0
4 [报告]
发表于 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
5 [报告]
发表于 2008-02-16 12:49 |只看该作者
非常感谢版主大人的回复!
学习ing.....

论坛徽章:
0
6 [报告]
发表于 2008-04-02 16:33 |只看该作者
原来如此,长学问了哦哦
(不来只想打一个o,但是系统规定必须10个字以上)

论坛徽章:
0
7 [报告]
发表于 2011-10-11 13:57 |只看该作者
果断锕

论坛徽章:
0
8 [报告]
发表于 2011-10-27 21:14 |只看该作者
不是很明白

论坛徽章:
0
9 [报告]
发表于 2011-12-16 22:48 |只看该作者
回复 1# new_learner


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

论坛徽章:
13
15-16赛季CBA联赛之同曦
日期:2016-01-28 19:52:032015亚冠之北京国安
日期: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-05-10 09:50:35白羊座
日期:2014-03-12 20:52:17午马
日期:2014-03-01 08:37:27射手座
日期:2014-02-19 19:26:54子鼠
日期:2013-11-30 09:03:56狮子座
日期:2013-09-08 08:37:52
10 [报告]
发表于 2012-04-22 13:17 |只看该作者
很有用的帖子,收藏了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP