首页   注册   登录
 vuuv 最近的时间轴更新

vuuv

V2EX 第 128981 号会员,加入于 2015-07-26 20:42:38 +08:00
今日活跃度排名 6530
根据 vuuv 的设置,主题列表只有在你登录之后才可查看
vuuv 最近回复了
前 2 位是语言,后面是地区。
en-HK 如果存在,指的是英语里的香港变种。
zh-hk 则是指香港目前的繁体中文。
有 4 处编码需要检查。URL 里的编码,文件名在文件系统里的编码,操作系统的编码,虚拟终端的编码。
之前截图能显示中文,那么操作系统和终端的正常,应该都是 UTF8。那么需要使用 locale -a 看下系统支持那些。我没有研究过 LANG=en_US.UTF-8 和 LANG=en_US.utf8 的区别。你可以逐个设置下看看效果。

至于文件名编码,这里的问号是 ls 替换显示的。忘了有无参数阻止这种替换,但是加管道后应该不会替换了。管道后使用 hexdump -C 查看具体的字节码。
URL 需要提供下包含文件名的部分,如果编码和文件名编码不一致,再排查起因吧。
@ThinkZ #5 rsync 默认根据大小及时间快速判断文件是否需要同步,有较低可能出现内容不一致的情况(主要是不敢赌)。
而-c 可以显著减小这个风险。如果还不放心,再上 md5+sha1 校验文件。
常规要求文件安稳的做法 rsync -c 即可满足。
rsync -c 即可检查。
177 天前
回复了 HeiXiaoBai 创建的主题 Linux cat file.txt > file.txt 导致 file.txt 被清空
@siteshen #35 文件真的没有被清空吗?看下文件的修改时间?
你写的的 hello.txt 是不是每行都恰好包含字母 a 呢?加一行不含字母 a 的内容试试?

例 1 里的圆括号“()”标记会 fork 一个 shell (暂称为子 shell )来执行。于是命令等价为这样的:
cat hello.txt | grep a | bash -c "sleep 1; cat > hello.txt"

如果没有 sleep 1,那么会立刻在子 shell 里发生文件清空。不过此时 cat 和子 shell 是同时 fork 的,而且子 shell 启动后的初始化及对命令的语法解析会花费一些时间(也就几十毫秒而已)。
如果 hello.txt 文件较小,等到子 shell 开始奉命清空文件时,cat 是有充足的时间读到文件全部内容的。如果文件超出了缓冲区大小(缓冲区默认是 4k,不过程序可以设置其他大小,内核也可能会多预读点内容。),就不保证 cat 能读到正确的内容了。

所以一些软件系统会设计为“对关键文件的修改加锁”,就是为了防止多个进程同时修改某个文件。
典型的代表就是 yum 的 install 子命令。
179 天前
回复了 HeiXiaoBai 创建的主题 Linux cat file.txt > file.txt 导致 file.txt 被清空
@HeiXiaoBai #6 是的。你先要求 bash 清空了文件。然后 cat 就读到空文件了。
如果你希望匹配的内容出现在原文件结尾,那么使用>>。追加写入是不会改变已有内容的。
如果你希望只出现匹配的内容,建议换下后面的文件名。
179 天前
回复了 HeiXiaoBai 创建的主题 Linux cat file.txt > file.txt 导致 file.txt 被清空
因为>是 bash 内部的 IO 重定向标记。当前登录的 bash 会先清空(如果是>>则不清空。)了 file.txt 然后才会 fork 出 cat grep sed 等三个进程。并根据管道符的指示把前一个命令的 stdout 重定向到后者的 stdin。最终把 sed 的 stdout 写入 file.txt 。
@tonywwwz #5 你投的是青云,做云计算的,在保利广场,可以考虑电话确认进度。
这家是青藤“云安全”,做安全的,在软件园。
关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2048 人在线   最高记录 5043   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.3 · 12ms · UTC 15:49 · PVG 23:49 · LAX 07:49 · JFK 10:49
♥ Do have faith in what you're doing.