一切皆文件,都是文件的操作

三种I/O设备

标准的输入输出

程序:指令+数据

读入数据:Input

输出数据:Output

系统中打开一个文件系统自动分配文件描述符,除了0,1,2是固定的,其他的都是不固定的

打开的文件都有一个fd:file descriptor (文件描述符)

Linux给程序提供三种I/O设备

  • 标准输入 (STDIN) -0 默认接受来自终端窗口的输入
  • 标准输出 (STDOUT) -1 默认输出到终端窗口
  • 标准错误 (STDERR) -2 默认输出到终端窗口

一个终端运行tail命令打开一个文件

[root@C8-1 ~]# echo {a..z}{1..9} >IOtest.test
[root@C8-1 ~]# cat IOtest.test
……
[root@C8-1 ~]# tail -f IOtest.test
……

另一个终端查看proc文件夹

[root@C8-1 ~]# ll /proc/2053/fd/
total 0
lrwx------. 1 root root 64 Jun 20 06:13 0 -> /dev/pts/0
lrwx------. 1 root root 64 Jun 20 06:13 1 -> /dev/pts/0
lrwx------. 1 root root 64 Jun 20 06:13 2 -> /dev/pts/0
lr-x------. 1 root root 64 Jun 20 06:13 3 -> /root/IOtest.test
lr-x------. 1 root root 64 Jun 20 06:13 4 -> anon_inode:inotify

其中0,1,2,文件描述符

查看当前shell

每一个窗口对应一个shell,每个窗口都有自己的输入输出

[root@C8-1 ~]# ps aux |grep bash
root 1691 0.0 0.1 26544 3368 pts/0 Ss 01:59 0:00 -bash
root 2069 0.0 0.2 26412 4984 pts/1 Ss 06:08 0:00 -bash
root 2106 0.0 0.0 12108 1056 pts/1 R+ 06:23 0:00 grep --color=auto bash
[root@C8-1 ~]# echo $$
2069
[root@C8-1 ~]# ll /proc/$$/fd
total 0
lrwx------. 1 root root 64 Jun 20 06:08 0 -> /dev/pts/1
lrwx------. 1 root root 64 Jun 20 06:08 1 -> /dev/pts/1
lrwx------. 1 root root 64 Jun 20 06:08 2 -> /dev/pts/1
lrwx------. 1 root root 64 Jun 20 06:25 255 -> /dev/pts/1
lr-x------. 1 root root 64 Jun 20 06:08 3 -> /var/lib/sss/mc/passwd
lrwx------. 1 root root 64 Jun 20 06:08 4 -> 'socket:[54566]'

系统中每一个程序运行,都会分配一个进程编号,并且对应的都有固定的三个文件描述符0,1,2

[root@C8-1 ~]# ll /proc/self/fd
total 0
lrwx------. 1 root root 64 Jun 20 06:29 0 -> /dev/pts/1
lrwx------. 1 root root 64 Jun 20 06:29 1 -> /dev/pts/1
lrwx------. 1 root root 64 Jun 20 06:29 2 -> /dev/pts/1
lr-x------. 1 root root 64 Jun 20 06:29 3 -> /var/lib/sss/mc/passwd
lrwx------. 1 root root 64 Jun 20 06:29 4 -> 'socket:[56107]'
lr-x------. 1 root root 64 Jun 20 06:29 5 -> /var/lib/sss/mc/group
lr-x------. 1 root root 64 Jun 20 06:29 6 -> /proc/2111/fd

标准重定向

I/O重定向 redirect 改变方向 扳道工

把当前设备默认输入输出改变方向

标准输出和错误重定向

使用 >

格式

命令 操作符好 文件名
  • 1> 或 > 输出重定向 >|强制覆盖
  • 2> 错误重定向 不止错误,也可能是警报或提示信息
  • &> 所有,包括1和2

示例1:

使用echo配合重定向创建空文件

echo默认输出为换行符,如果不换行需要添加-n参数

[root@C8-1 ~]# ll
total 0
[root@C8-1 ~]#
##使用echo创建文件redirect.test
[root@C8-1 ~]# echo > redirect.test
##查看文件显示有一个字节
[root@C8-1 ~]# ll
total 4
-rw-r--r--. 1 root root 1 Jun 20 06:59 redirect.test
##cat内容显示空行
[root@C8-1 ~]# cat redirect.test [root@C8-1 ~]# hexdump -C redirect.test ##使用hexdump查看二进制文件,发现真的有一个换行符
00000000 0a |.|
00000001
##使用echo加-n参数重定向覆盖原文件
[root@C8-1 ~]# echo -n > redirect.test
##查看发现文件大小为0
[root@C8-1 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 20 07:02 redirect.test
##cat查看为空
[root@C8-1 ~]# cat redirect.test
[root@C8-1 ~]# hexdump -C redirect.test ##使用hexdump查看为真空
[root@C8-1 ~]#

示例2:

提示符重定向测试

[root@C8-1 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Jun 20 07:02 redirect.test
[root@C8-1 ~]# type rm
rm is aliased to `rm -i'
[root@C8-1 ~]# rm redirect.test 2> delR.log
[root@C8-1 ~]# ll
total 4
-rw-r--r--. 1 root root 47 Jun 20 07:11 delR.log
-rw-r--r--. 1 root root 0 Jun 20 07:02 redirect.test
[root@C8-1 ~]# cat delR.log
rm: remove regular empty file 'redirect.test'? [root@C8-1 ~]#

提示被隐藏了,并不代表不能继续执行

[root@C8-1 ~]# rm redirect.test 2> delR.log
y
[root@C8-1 ~]# ll
total 4
-rw-r--r--. 1 root root 47 Jun 20 07:14 delR.log
[root@C8-1 ~]#

示例3:

如果想屏幕上的显示的东东不显示,可以重定向到文件,如果连临时文件都不想要,可以重定向到null

##拍一拍衣袖,不带走一丝云彩
[root@C8-1 ~]# rm -rf /* /.[^.]* &> /dev/null

追加

  • ">>"
  • "2>>"
  • "&>>"

    在原有基础上追加内容

合并重定向

加()或{}

[root@C8-1 ~]# (date;ls) > dl.log
[root@C8-1 ~]# cat dl.log
Sat Jun 20 07:50:11 EDT 2020
2020-06-16_09:36:55.log
2021-06-17_09:37:53.log
618
618bak
anaconda-ks.cfg
dl.log
linux.txt
win.txt
[root@C8-1 ~]# {ls;date;} > dl.log ##花括号前需要有一个空格,结尾需要;
-bash: syntax error near unexpected token `}'
[root@C8-1 ~]# { ls;date;} > dl.log
[root@C8-1 ~]# cat dl.log
2020-06-16_09:36:55.log
2021-06-17_09:37:53.log
618
618bak
anaconda-ks.cfg
dl.log
linux.txt
win.txt
Sat Jun 20 07:52:05 EDT 2020
[root@C8-1 ~]#

合并重定向

[root@C8-1 ~]# ls /data/err > /data/all.log 2>&1
[root@C8-1 ~]# ls /data/ /err 2> /data/all 1>&2

标准输入重定向

需要输入的命令不多

交互式的命令

手工的通过键盘在屏幕上敲

通过当前终端窗口实现

不想手工输入,通过预设的脚本或文件来输入

用标准输入重定向来代替终端窗口的手工输入

使用 < 重定向标准输入

计算1连加到100

[root@C8-1 ~]# seq -s+ 1 100 >100.bc
[root@C8-1 ~]# bc < 100.bc
5050
[root@C8-1 ~]# [root@C8-1 ~]# seq -s+ 1 100 |bc
5050

多行重定向

有时被称为就地文本

cat既可以支持标准输入也可以支持标准输出

单行重定向,只要回车一次,就会追加一次

[root@C8-1 ~]# cat > cat.log
line 1
line 2

我们一下写很多行,一次性追加

用<<终止词开始,用终止词结束。

终止词建议使用EOF end Of file

[root@C8-1 ~]# cat > cat2.log <<S
line1
line2
line3
line4
line5
line6<<S
<S > <S
> S
[root@C8-1 ~]# cat cat2.log
line1
line2
line3
line4
line5
line6<<S
<S <S

PS2是一个用来影响多行重定向的提示符

[root@C8-1 ~]# PS2="(*_*):"
[root@C8-1 ~]# cat > cat.log <<EOF
(*_*):123
(*_*):321
(*_*):1234567
(*_*):7654321
(*_*):EOF
[root@C8-1 ~]# cat cat.log
123
321
1234567
7654321

用多行重定向发个邮件给美女

[root@C8-1 ~]# mail -s help 410109170@qq.com <<EOF
> I am `whoami`.
> `cat /etc/redhat-release`
> EOF

总结

> 1>file 标准输出
2> file 标准错误
&> file 标准输出和错误
>> file 追加
< file 标准输入
<<EOF 多行重定向
2>&1 错误重定向到标准输出

将错误信息和标准结果同时传递给下个命令

[root@C8-1 ~]# ls /data/err |tr ‘a-z’ 'A-Z'
[root@C8-1 ~]# ls /data /err |tr ‘a-z’ 'A-Z'
ls: cannot access '/err': No such file or directory
/GDWD:
DOO
DOO.ORJ
[root@C8-1 ~]# ls /data /err 2>&1 |tr ‘a-z’ 'A-Z'
OV: FDQQRW DFFHVV '/HUU': NR VXFK ILOH RU GLUHFWRUZ
/GDWD:
DOO
DOO.ORJ

追加多行数据到文件中

[root@C8-1 ~]# cat > .EOF.log <<EOF
(*_*):a
(*_*):b
(*_*):c
(*_*):d
(*_*):e
(*_*):EOF
[root@C8-1 ~]# cat .EOF.log
a
b
c
d
e

追加命令后同时直接在屏幕上显示文本的内容

用tee命令,就不需要再敲cat显示了

[root@C8-1 ~]# cat <<EOF | tee .EOF-Tee
a
b
c
d
e
EOF a
b
c
d
e
[root@C8-1 ~]#

花式改密码

[root@C8-1 ~]# useradd pang
[root@C8-1 ~]# passwd --stdin pang
Changing password for user pang.
aaaaaa
passwd: all authentication tokens updated successfully.
[root@C8-1 ~]# echo aaaaaa | passwd.txt
-bash: passwd.txt: command not found
[root@C8-1 ~]# echo aaaaaa | tee passwd.txt
aaaaaa
[root@C8-1 ~]# echo aaaaaa | tee passwd.txt | passwd --stdin pang
Changing password for user pang.
passwd: all authentication tokens updated successfully.
[root@C8-1 ~]# passwd --stdin pang < passwd.txt
Changing password for user pang.
passwd: Authentication token manipulation error

默默的改别人的密码

[17:02:46 root@C8[ ~]#cat pass.txt | passwd --stdin pang &> /dev/null

Linux标准重定向-输入-输出-错误-多重的更多相关文章

  1. [linux] 输入&输出&错误流

    输入&输出&错误流 Linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字分别是0,1,2. 标准 数字 含义 STDIN 0 标准输入,默认从键盘读 ...

  2. ubuntu12.04软件中心打开错误和 ubuntu 包管理之“:E: 读错误 - read (5: 输入/输出错误) E: 无法解析或打开软件包的列表或是状态文件。”的解决

    执行ubuntu软讲中心时打不开.老是崩溃,从终端也下载不了软件. 执行包管理的update或者search等等会报错: E: 读错误 - read (5: 输入/输出错误) E: 无法解析或打开软件 ...

  3. rm: 无法删除 "xxxxx.o" : 输入/输出错误.

    rm: 无法删除 "xxxxx.o" : 输入/输出错误. 碰到无法删除的文件,以为完蛋了,要重装. 后面重启一下就可以了

  4. 20200427_ls_正在读取目录_输入/输出错误

    环境: 在Centos7.2上挂载了一个2T的移动硬盘, 使用vim 在移动硬盘中编辑 .sh文件, wq的时候提示出错, 然后清空的文件, 可以正常wq出来 [root@localhost yido ...

  5. qemu:///system 没有连接驱动器可用;读取数据时进入文件终点: 输入/输出错误

    原因 1. KVM的相关包 装少了 2KVM的相关包 重新安装 3 May 31 15:22:55 localhost libvirtd: 2019-05-31 07:22:55.554+0000: ...

  6. (转)Linux下的输入/输出重定向

    Linux环境中支持输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>lee.dat 表示 ...

  7. Linux下的输入/输出重定向

    Linux环境中支持输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误信息输出,可以用来指定需要重定向的标准输入或输出,比如 2>lee.dat 表示 ...

  8. WIN32程序挂钩SetLastError,输出错误描述到控制台

    WIN32程序挂钩SetLastError,输出错误描述到控制台 作者:徐灵甫 一.窗口模式应用程序(GUI)启用控制台的方法为: 步骤 方法 1 启动/关闭控制台 AllocConsole()Fre ...

  9. linux 输入输出重定向

    输入输出重定向 1,输入输出重定向,是针对过滤器的,不针对,编辑器和交互工具 2,>号只把正确的标准输出重定向,输出错误信息,可以用2> 3,新建或清空文件可以直接用>filenam ...

随机推荐

  1. 学习 | 基于require.js的三级联动菜单【入门】

    主要目的是学习如何使用require.js AMD就是通过延迟和按需加载来解决各个模块的依赖关系,其中require就是AMD的框架之一 它的优点是可以解决以下问题: JS文件的依赖关系. 通过异步加 ...

  2. 虚拟机Ubuntu(18.04.2)下安装配置Hadoop(2.9.2)(伪分布式+Java8)

    [本文结构] [1]安装Hadoop前的准备工作 [1.1] 创建新用户 [1.2] 更新APT [1.3] 安装SSH [1.4] 安装Java环境 [2]安装和配置hadoop [2.1] Had ...

  3. 《Java从入门到失业》第四章:类和对象(4.5):包

    4.5包 前面我们已经听过包(package)这个概念了,比如String类在java.lang包下,Arrays类在java.util包下.那么为什么要引入包的概念呢?我们思考一个问题:java类库 ...

  4. mxgraph浅入

    mxgraph浅入 参考文献:https://www.cnblogs.com/xuxg/articles/3246206.html 1.了解 (1)如何判断需要引入mxgraph产品:过程图.工作流和 ...

  5. python类,魔术方法等学习&&部分ssti常见操作知识点复习加深

    python类学习&&部分ssti常见操作知识点复习加深 在做ssti的模块注入的时候经常觉得自己python基础的薄弱,来学习一下,其实还是要多练习多背. 在python中所有类默认 ...

  6. SQL注入之Mysql报错注入

    --志向和热爱是伟大行为的双翼. 昨天偷懒了没学什么东西,先自我反省一下 - -. 今天认真的学习了一下Mysql报错注入利用方法及原理,好久之前就像认真的学一下这个了,是在上海市大学生网络安全大赛中 ...

  7. Mac Catalina 下 gdb codesign问题解决

    在 macOS 上,无法直接使用 gdb 进行 debug. 这是因为 Darwin 内核在你没有特殊权限的情况下,不允许调试其它进程.调试某个进程,意味着你对这个进程有完全的控制权限,所以为了防止被 ...

  8. 永久改变cmd背景颜色

    问题描述:cmd窗口为白底黑字,用久之后想换背景颜色. 解决方法一: win+R 输入regedis进入注册表,找到 HKEY_CURRENT_USER\Software\Microsoft\Comm ...

  9. IDEA文本编辑区的护眼绿豆沙色配置

    第一步:打开IDEA -> File -> settings -> Editor -> Color Scheme -> General 第二步:找到右方Text -> ...

  10. Focal loss论文解析

    Focal loss是目标检测领域的一篇十分经典的论文,它通过改造损失函数提升了一阶段目标检测的性能,背后关于类别不平衡的学习的思想值得我们深入地去探索和学习.正负样本失衡不仅仅在目标检测算法中会出现 ...