Linux /MAC 下 vi 或 vim 的编辑再保存改变了文件的什么信息 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
JohnZorn
V2EX    Java

Linux /MAC 下 vi 或 vim 的编辑再保存改变了文件的什么信息

  •  
  •   JohnZorn Aug 7, 2022 2352 views
    This topic created in 1359 days ago, the information mentioned may be changed or developed.
    1. Java 存在一个线程周期性地向目标文件写入内容 OutputStreamWriter(FileOutputStream) , append 模式.
    2. 在过程中(不要求一定在写入中,可以为两个周期的间隔)使用 vi/vim 工具清空文件内容,如ggdG,保存退出.
    3. 此时如果在该终端使用 tail -f 持续输出该文件内容,无法得到任何结果.
    4. 文件清空后,Java 层面断点跟踪可以正常到达 FileOutputStream#writeBytes(byte[], int, int, boolean) 这个 native 方法,参数均正常,也不会抛出异常.
    5. 如果在保存退出该文件前,已经有一个终端被 tail -f 占用,那么这个终端是可以持续收到写入内容的.
    6. 以上现象我目前环境在 Linux/MacOS/Docker In Linux 稳定复现,Windows 暂未发现此问题(也可能是误测).
    7. 若使用 nano 编辑保存,或 > 重定向为空则不会影响目标文件的输出. 基于以上几点我认为可能 vi 或 vim 在保存退出后会影响文件的一些信息,而这些信息在 Linux/Macos 上用于严格区分文件的唯一性。请问有没有人了解这方便的信息? vi 或 vim 保存退出动作额外改变了文件的什么内容呢?
    7 replies    2022-08-08 10:20:12 +08:00
    momocraft
        1
    momocraft  
       Aug 7, 2022   1
    影响 inode
    vim 保存时会先保存到临时文件再 move

    http://vimdoc.sourceforge.net/htmldoc/options.html#'backupcopy'

    ------

    5 为什么能继续 tail 就不知道,可能我没理解
    msg7086
        2
    msg7086  
       Aug 7, 2022 via Android   1
    @momocraft tail -f 吃的是原来的 inode 呗。
    JohnZorn
        3
    JohnZorn  
    OP
       Aug 7, 2022
    看起来很大概率是这样的。
    dorothyREN
        4
    dorothyREN  
       Aug 7, 2022
    tail -F filename
    dorothyREN
        5
    dorothyREN  
       Aug 7, 2022
    @dorothyREN #4 可以用大写的 F 参数
    dorothyREN
        6
    dorothyREN  
       Aug 7, 2022
    @dorothyREN #5 看错东西了。。
    rev1si0n
        7
    rev1si0n  
       Aug 8, 2022
    好像是会删除重建文件,改变了 inode ,之前吃过这个亏,就是挂载单文件到 docker 上,本地改了以后 docker 里的不会变。
    About     Help     Advertise     Blog     API     FAQ     Solana     1603 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 179ms UTC 16:38 PVG 00:38 LAX 09:38 JFK 12:38
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86