免费注册 查看新帖 |

Chinaunix

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

[文件目录] sed -i 是不是原子操作?看了man文档 按照其叙述应该是的 但是还有一些不明白的地方 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-15 18:58 |只看该作者 |倒序浏览
# man sed
-i[SUFFIX], --in-place[=SUFFIX]

              edit files in place (makes backup if extension sup-
              plied).  The default operation  mode  is  to  break
              symbolic  and hard links.  This can be changed with
              --follow-symlinks and --copy.

       -c, --copy

              use copy instead of rename when shuffling files  in
              -i  mode.   While  this  will  avoid breaking links
              (symbolic or hard), the resulting editing operation
              is  not  atomic.   This is rarely the desired mode;
              --follow-symlinks is usually enough, and it is both
              faster and more secure.

1. -i :The default operation  mode  is  to  break symbolic  and hard links.
  break symbolic  and hard links是什么意思?
  是不是这样的:
  sed -i PATTERN file
    sed先创建一个新空白文件 按照PATTERN过滤file到这个新空白文件 等待全部处理完成后 直接修改文件系统的file文件名指向这个新的文件 而老的file数据区域后来被sed删除掉(当没有备份要求时)在这种情况下 这个操作就是原子的!

2. -c : use copy instead of rename when shuffling files  in
              -i  mode.   While  this  will  avoid breaking links
              (symbolic or hard), the resulting editing operation
              is  not  atomic.
  这个是不是说 如果 sed -c PATTERN file 在其正在处理file的时候 若有人去读这个文件 他读到的就是正在处理中的文件?

  请各位朋友指教!

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
2 [报告]
发表于 2014-11-15 20:49 |只看该作者
sed先创建一个新空白文件 按照PATTERN过滤file到这个新空白文件 等待全部处理完成后 直接修改文件系统的file文件名指向这个新的文件 而老的file数据区域后来被sed删除掉(当没有备份要求时)在这种情况下 这个操作就是原子的!

分别查看修改之前和修改之后的inode就知道啦

论坛徽章:
0
3 [报告]
发表于 2014-11-16 22:55 |只看该作者
回复 2# Shell_HAT


    谢谢朋友了!
   
    我试了一下,下面是结果:

     sed -i PATTERN file  (文件名指向了新的inode 是原子操作!)

     sed -ci PATTERN file  (inode不变 说明不是原子操作)

     我还试了一下
       vim file
     用这种方式编辑file,file指向了新的inode,这也是原子操作
     
     但是如果用简单的 echo 'content' >> file 追加的方式 就不是原子操作了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP