网站运营
位置:首页>> 网站运营>> linux输入输出重定向使用详解

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
0
投稿

猜你喜欢

  • 使用过嘀咕的“嘀神”插件的用户都知道,这个插件可以实现将嘀咕信息即时同步到其他微博客的功能。对于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向笔者咨询,归纳一下,问题基本集中在
手机版 网站运营 asp之家 www.aspxhome.com