千家信息网

linux输入输出重定向使用的方法

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍"linux输入输出重定向使用的方法",在日常操作中,相信很多人在linux输入输出重定向使用的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"lin
千家信息网最后更新 2026年11月04日linux输入输出重定向使用的方法

这篇文章主要介绍"linux输入输出重定向使用的方法",在日常操作中,相信很多人在linux输入输出重定向使用的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"linux输入输出重定向使用的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

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
/

例如,如下操作,把 < temp.sh到最后eof之间的内容当作stdin,然后把stdout写入文件temp.sh

复制代码 代码如下:

[~]$cat < 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

到此,关于"linux输入输出重定向使用的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

代码 文件 输出 内容 输入 错误 方法 标准 命令 学习 接下来 实际 屏幕 更多 问题 复用 帮助 实用 特殊 中用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 互联网科技行业发展 疫情对互联网科技公司影响 远拓互联网科技 唐信互联网科技 大连 互联网 视角下的科技创新 互联网金融科技委员会 互联网实体化科技化 北京三清互联网科技 互联网科技中介 承德科技产业互联网发展 互联网金融科技公司干啥的 厦门比较好的科技互联网公司 世界互联网科技公司市值排名 注册互联网科技公司经营范围大全 互联网科技大奖都有哪些公司 米聚互联网科技南京有限公司排面 畅思互联网科技 互联网科技融合创新 福建互联网展示科技馆设计 云信互联网科技有限公司 鸠鸠互联网科技 科技企业和互联网企业 金融科技与互联网金融 上海卓越科技 互联网 哈尔滨新华互联网科技学院 晓花互联网科技有限公司网址 米聚互联网科技南京有限公司排面 翼展科技 首家互联网医院 科技互联网经济论坛
0