linux输入输出重定向使用详解
发布时间:2023-10-21 10:45:23
标签:输入输出重定向
1. 输出重定向:
默认条件下,标准输出和错误输出都是终端,可以把标准输出和错误内容进行重定向:
[~]# echo "hello\!"
hello\!
[~]# echo "hello!"
-bash: !": event not found "
把标准输出重定向到文件
[~]# echo "hello" > test.sh
[~]# cat test.sh
hello
'>'输出方式默认等价'1>'
[~]# echo "hello" 1> test.sh
[~]# cat test.sh
hello
但是错误内容还是会显示在屏幕上:
[~]$cat edit.sql /root/test.sh > temp.sh
cat: /root/test.sh: Permission denied
可以把错误内容也输出到文件中(利用文件描述符):
[~]$cat edit.sql /root/test.sh 1> temp.sh 2> error.sh
[~]$cat temp.sh
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
[~]$cat error.sh
cat: /root/test.sh: Permission denied
把标准输出和错误信息写入同一个文件:
[~]$cat edit.sql /root/test.sh > temp.sh 2>&1
[~]$cat temp.sh
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
cat: /root/test.sh: Permission denied
这个看起来比较麻烦,实际应用中可能用的最多的是:
[~]$cat edit.sql /root/test.sh &>temp.sh
[~]$cat temp.sh
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
cat: /root/test.sh: Permission denied
&>把所有输出都写入同一个文件
如果不想输出到文件,也不想在屏幕上显示,可以利用/dev/null这一特殊设备文件(bit bucket)
[~]$cat edit.sql /root/test.sh &>/dev/null
如果把标准输出写入到文件,就没法利用管道符号'|'把内容传给接下来的命令,可以利用tee命令解决这个问题:
[~]$cat edit.sql /root/test.sh | tee temp.sh | cat -n
cat: /root/test.sh: Permission denied
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
tee命令相当于把stdout副本写入文件,再把stdout传给下一个命令,但是错误内容是无法用tee传递的,如同使用>>追加内容,tee可以使用-a选项追加:
[~]$cat edit.sql /root/test.sh | tee -a temp.sh | cat -n
cat: /root/test.sh: Permission denied
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
[~]$cat temp.sh
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
2.输入重定向:
输入重定向,在一些场合,例如数据库监控中用的比较多,常见的是使用内联重定向
[~]$cat < edit.sql
select dbms_rowid.rowid_object('AAAZdQAAGAAATxjAAk') data_object_id#,
dbms_rowid.rowid_relative_fno('AAAZdQAAGAAATxjAAk') rfile#,
dbms_rowid.rowid_block_number('AAAZdQAAGAAATxjAAk') block#,
dbms_rowid.rowid_row_number('AAAZdQAAGAAATxjAAk') row# from dual
/
例如,如下操作,把 <<EOF > temp.sh到最后EOF之间的内容当作stdin,然后把stdout写入文件temp.sh
[~]$cat <<EOF > temp.s
this is my log
EOF
[~]$cat temp.sh
this is my log
3.自定义文件描述符:
自定义文件描述符的原理是使用基本的三种文件打开模式
只读(<)
截断(>)
追加(>>)
创建一个文件描述符3,用于打开文件
[~]# exec 3< test.sh
下面就可以直接使用文件描述符打开文件了,但是只能使用一次:
[~]# cat <&3
hello
hello
创建文件描述符4,用于写入文件(可以复用):
[~]# exec 4>test.sh
[~]# echo okok >&4
[~]# cat test.sh
okok
这个实际类似前面的:
[~]$cat edit.sql /root/test.sh > temp.sh 2>&1
创建文件描述符5,用于向文件追加内容(也可以复用,不像输入文件描述符那样只能使用1次):
[~]# exec 5>>test.sh
[~]# echo okokok >&5
[~]# cat test.sh
okokok
[~]# echo okokok >&5
[~]# cat test.sh
okokok
okokok


猜你喜欢
- 使用过嘀咕的“嘀神”插件的用户都知道,这个插件可以实现将嘀咕信息即时同步到其他微博客的功能。对于Twitter重度用户,可能也会需要将Twi
- 个人网站,通常意义上说是以个人的名义,单个人或几个人小作坊做的网站,也从另外的诠释上泛指草根网站。个人网站不缺创意,不缺流量,不缺技术,不缺
- 我们先给出几种主要的分页方法和核心语句,然后直接给出结论,有兴趣的读者可以看看后面的数据几种常用存储过程分页方法TopN方法select T
- 在Discuz! 7.0中发布多媒体,比如引用其他网站的视频、mp3 等。需要设置三个地方。首先,对编辑器设置。打开后台,界面=>编辑
- 在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号、语法高亮度显示、智能缩进等功能的。为了更好的在vim下进行工作,需要手
- 网站字体的选择,对于大多数中文网站设计人员来说,根本就不是什么问题。但是放到英文站点的设计上,呵呵,问题就不少了。经常看到一些外贸网站,英文
- PHPWind v7.3.2收藏夹分页链接错误问题解决方法:打开mode/o/m_article.php查找:$pages =&n
- 大概上过网的人对网络的一个最大印象就是免费,看绝大部分的新闻不要钱、看美女图片也不要钱、音乐也是随便下,反正大家尽可能的在网上享受免费的服务
- 很多人都知道URL对SEO的重要之处,但是很多站点却忽略了站点的路径优化。今天本人在这里写几点关于优化路径小篇! 本人结论出关于站点URL在
- ansibleansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、f
- 博客上经常出现一些Google的垃圾广告,诸如“减肥、战痘之类”,这些垃圾广告不仅粗制滥造,视觉污染不说,还影响经济收入。也尝试过在“AdS
- 首先,说一下我们的例子目的--一让数据库输出XML,并且在.net体系下调用出来。 这个系统的数据层
- 应部分GoDaddy用户要求,整理了解决GoDaddyLinux空间Java和Jsp常见的一些问题及解答,希望可以给GoDaddy用户带来更
- Flv文件不能播放的原因有种种,最近遇到了“Flv文件在本地能显示,上传到服务器上不能播放”,解决流程如下:首先是检查网页中FLV相关文件上
- 6、确定档案权限touch /var/log/procmail.log <--档案不存在时才touchchmod 644 /var/l
- 使用使用WordPress系统的blogger在不断的日增,我发现国内基本上还没有多少的blogger关于WordPress的安全性问题,当
- 在godaddy注册域名是一个痛苦的经历,太繁琐了,但由于他们提供的域名附加服务很多,域名还是超值的,推荐大家在godaddy注册域名。为了
- 开启Discuz!7.0论坛的“邀请注册”功能后,新用户需要邀请码才可以注册,这样就可以限制论坛注册的人数,一来可以减少论坛服务器负载,二来
- 淘宝推出B2C的淘宝商城已经有一段日子了,现在可能不少人在“淘宝”的同时也会偶尔到淘宝商城去逛逛。我们注意到淘宝商城跟淘宝个人网
- V5shop网络联盟系统:网商应突破平台壁垒 盈利为王最近,一些具有忧患意识的独立网商经常通过邮件或QQ向笔者咨询,归纳一下,问题基本集中在