关于LINUX CAT命令

有一个文件f1.c,这个命令#cat<f1.c>f1.c为什么能把文件f1清空了?不太明白,请各位赐教?... 有一个文件f1.c ,这个命令#cat < f1.c > f1.c 为什么能把文件f1清空了?不太明白,请各位赐教? 展开
 我来答
stablish
2009-07-02 · TA获得超过8784个赞
知道大有可为答主
回答量:5161
采纳率:50%
帮助的人:5014万
展开全部
楼上的 f1.c清空的原理讲的正确 但是
$ cat < f1.c >> f1.c
会造成死循环 ,瞬间会造成巨大的文件 , 不要误导人了 呵呵

lz 要想明白这个 一定要了解<的到底是干什么的
对于你的命令 cat < f1.c > f1.c 表示
cat 命令以 f1.c 文件作为 stdin,同时以 f1.c 文件作为 stdout
一般的 ,linux中的文件都有一个标记叫做EOF ,End of File ,此标记表示为文本结束符 ,这样一来 f1.c的文件尾部就是EOF , 执行最后一步的重定向时 就将EOF重定向到了 f1.c ,这样 直接将一个EOF重定向到文件的时候表示将文件清空

其实你的命令等效于

$ cat << EOF > f1.c
>EOF

对于stdin来讲 它是忠实的呈现来源的各个字节的

这个例子没什么实用价值 也就是让人了解 < >的功能以及特点, 逻辑上来讲 从一个文件读入在重新输出到文件本身有什么意思呢.
快又稳
2024-10-28 广告
在Linux环境下配置基于域名的虚拟主机,需安装Apache或Nginx等Web服务器,并编辑配置文件。以Apache为例,需创建虚拟主机配置文件,指定域名、文档根目录等,然后启用该配置文件并重启Apache服务。同样,Nginx也需在相应... 点击进入详情页
本回答由快又稳提供
百度网友e6586cb77
2009-07-02 · TA获得超过360个赞
知道小有建树答主
回答量:329
采纳率:0%
帮助的人:335万
展开全部
应该和cat命令的处理机制有关,cat一行行的读取f1.c,然后一行行的重定向到f1.c,到最后就是文件结尾的空标志重定向到了f1.c,没有其他内容了,所以空了。
#cat < f1.c >> f1.c,有可能就不会清空f1了,你可以试一下。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
titozhang
2009-07-02 · TA获得超过174个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:176万
展开全部
原因很简单,这个跟cat无关,是shell的问题:

> f1.c 表示如果f1.c不存在则创建该文件,如果存在就把该文件清空。也就是说shell在分析这个命令时,首先去判断f1.c存在否,在本例中它是存在的,所以shell把该文件清空,然后再把f1.c作为cat的标准输入和标准输出,其实cat拿到这个f1.c文件时,它已经是空的了

再说说 >> f1.c 这种,自己分析一下,先不要在电脑上面试,您能够分析出结果吗,分析出结果后再在电脑上面试,看分析结果是否跟实践结果一样,如果是,恭喜,搜获不小。如果没有分析对,也没啥,根据实践结果在回头来仔细理解,终会有所得!

参考资料: www.xueyusi.com

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
非绿有语2
2009-07-02 · TA获得超过129个赞
知道小有建树答主
回答量:269
采纳率:0%
帮助的人:191万
展开全部
linux啊,这么厉害!佩服啊!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
营成载霜
2019-09-30 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.4万
采纳率:30%
帮助的人:1009万
展开全部
cat
无法输出指定的最后10行的!
可以用tail,这个命令不加opt选项默认可以输出文件最后10行到标准输出!
你的要求可以这样写
tail
/etc/passwd
>
/etc/1.txt
上面的命令等价于:tail
-n
10
/etc/passwd
>
/etc/1.txt
其中选项-n
后面的10代表末尾的行数,可以根据需要修改!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式