Linux输入输出的那些事

管理linux中的输入输出

1.输入输出相关的一些定义

(1)重定向

  • 输入重定向
    允许用户不通过键盘,而是从文件中得到输入数据;
    一般输入设备是键盘,若想把文件作为输入数据,即为“输入重定向”;
    输入重定向只需将所有想执行的命令打包写入一个文件中,执行此文件即可!
  • 输出重定向
    将原本要输出到屏幕的数据信息写入指定的文件中;
    当不想将显示在shell脚本内,使用重定向,将输出内容放在指定文件中;
    同时,输出重定向可以将正确的输出和错误的输出分别放在不同的文件中。

(2)当运行一个shell时,通常会自动打开三个文件,分别是标准输入文件(stdin) 标准正确输出(stdout) 标准错误输出(stderr)
在这里插入图片描述
(3)字符设备:I/O传输过程中以字符为单位进行传输的设备(例如打印机和键盘) Linux中,字符设备(/dev/pts)是内存中开启的虚拟设备,并非真实存在。

2.重定向输出的一些符号

重定向会覆盖源文件的内容
系统的输出有两种结果:
stdout 命令顺利执行后产生的字符串 输出编号1
stderr 命令失败执行后产生的字符串 输出编号2

> 重定向正确输出(将正确结果定向到指定的文件)
2> 将错误结果定向到指定文件
&> 将全部的结果定向到指定的文件
>file1 2>file2 将正确结果定向到file1,将错误结果定向到file2
2> /dev/null 将错误的内容放在垃圾桶
>file 清空file文件

实验解析:以下实验必须在普通用户模式下进行
知识扩展:
(1)注销当前用户

[student@workstation Desktop]$ gnome-session-quit --force

(2)find 命令用法

[student@workstation Desktop]$ ls
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  a.text  b.text  c.text
[student@workstation Desktop]$ find *.txt

在这里插入图片描述

[student@workstation ~]$ find /home/student/Desktop/ -name *.txt

在这里插入图片描述

输出重定向
首先查找/etc/passwd文件

[student@workstation Desktop]$ find /etc/ -name passwd

在这里插入图片描述
在这里插入图片描述
将正确结果重定向到westos.out文件中,错误的结果在shell屏幕中显示

linux中错误输出产生的原因是由于权限的限制不能访问,因此会产生标准错误输出

[student@workstation Desktop]$ find /etc/ -name passwd > westos.out

在这里插入图片描述
将错误结果重定向到westos.out文件中,正确的结果在shell屏幕中显示

[student@workstation Desktop]$ find /etc/ -name passwd 2> westos.err

在这里插入图片描述
将所有的结果重定向到westos.all文件中,屏幕中将不再显示!

[student@workstation Desktop]$ find /etc/ -name passwd &> westos.all

在这里插入图片描述
将 westos.all文件清空

[student@workstation Desktop]$  > westos.all 

图8
将正确的结果定向到westos.out文件中,将错误的结果定向到westos.err文件中

[student@workstation Desktop]$ find /etc/ -name passwd > westos.out 2> westos.err

在这里插入图片描述
将错误的结果放在垃圾桶,正确的结果在shell屏幕输出

[student@workstation Desktop]$ find /etc/ -name passwd 2> /dev/null

在这里插入图片描述

重定向会覆盖源文件的内容

 [student@workstation Desktop]$ find /etc/ -name passwd 2> file
[student@workstation Desktop]$ echo jiayou > file
[student@workstation Desktop]$ cat file 
jiayou

在这里插入图片描述

3.追加

重定向会覆盖源文件的内容,如向实现重定向并且不覆盖源文件内容,应当使用追加
常见的追加符号:

>> 追加正确输出
2>> 追加错误输出
&>> 追加所有输出

实验解析:
在jiafile文件内容末尾追加正确的输出结果

[student@workstation Desktop]$ find /etc/ -name passwd >> jiafile 

在这里插入图片描述
在jiafile文件内容末尾追加错误的输出结果

[student@workstation Desktop]$ find /etc/ -name passwd >> jiafile 

在这里插入图片描述
在jiafile文件内容末尾追加所有的输出结果

[student@workstation Desktop]$ find /etc/ -name passwd &>> jiafile 

4.管道

管道的定义: 管道连接左右两个命令,将左侧命令的标准输出 交给 右侧的命令作为标准输入。

管道流程图15
管道把输出变成一条命令的的输入!
管道默认只看1正确的内容,错误2的内容被忽略

实验解析:
管道的引入:
以往查询文件的行数,首先需要建立此文件,随后使用命令进行文件内容行数的查看。但是,因为硬盘的读写速度慢,cpu的计算速度快,先建立文件再计算行数显然降低了系统的速度。于是引出了 管道 的概念,不用建立文件,将管道符左侧的输出 作为 管道符右侧的输入,直接计算文件内容的行数!

[student@workstation Desktop]$ ls /bin/ | wc -l

在这里插入图片描述
将file文件内容中的小写字母转化为大写字母

[root@workstation Desktop]# cat file | tr 'a-z' 'A-Z'

在这里插入图片描述

管道只识别正确的信息,只允许正确的信息通过

[student@workstation Desktop]$ find /etc/ -name passwd | wc -l

在这里插入图片描述
为了能让错误的信息也通过管道,采用2>&1命令

[student@workstation Desktop]$ find /etc/ -name passwd 2>&1 | wc -l

在这里插入图片描述

[student@workstation Desktop]$ find /etc/ -name passwd 2>&1 | cat

在这里插入图片描述
管道左侧的输出作为右侧的输入,但是左侧的输出内容内有被保留,如果需要保存输出的内容,需要保存一份在文件中
重定向和管道tee的区别:

  • 重定向直接将内容写在文件中
  • 执行管道左侧命令会输出至屏幕,但同时会保存一份在文件中
[student@workstation Desktop]$ find /etc/ -name passwd | tee file | wc -l

在这里插入图片描述
使用命令tee时,顺序不同,文件保存的内容不同。

[student@workstation Desktop]$ find /etc/ -name passwd |wc -l |tee jiafile

在这里插入图片描述

5.输入重定向

5.1 多行录入 <<

一般的输入设备是键盘,若允许从文件中得到输入数据,用到了“输入重定向”
知识拓展:
Linux中,passwd 命令用来更改使用者的密码

  • 若使用普通用户登陆进行passwd命令令,会重置当前用户的密码
  • 若是用root用户进行passwd命令,会重置root用户登陆密码。但是如运行passwd 普通用户 则修改的是此普通用户的登陆密码。

实验解析(实验使用root用户进行
实验一:
step1:使用root用户运行passwd 命令

[root@workstation Desktop]# passwd

图23

每次运行passwd都会要求重新设置密码,太繁琐了

采用输入重定向的方式,将文件内容输送到一个命令中作为输入
step2:从文件中得到输入数据(解决每次输入密码的繁琐问题)
一般文件以.sh 后缀结尾

[root@workstation Desktop]# vim westos.sh

在westos.sh 中写入:通常以EOF为起始标识

passwd << EOF
redhat
redhat
EOF
date

在这里插入图片描述
step3:运行文件westos.sh

[root@workstation Desktop]# bash westos.sh 

在这里插入图片描述

实验二:
step1:使用root用户运行passwd 命令

[root@workstation Desktop]# vim westos.sh

在westos.sh 中写入:通常以EOF为起始标识
将什么内容重定向到file文件中,这个什么内容就是输入,需要用到输入重定向符号 << 将后面的内容作出输入的内容送给前面的命令

cat > file << EOF
HELLO
WORLA
nihao
shijie
EOF

在这里插入图片描述
step2:运行文件westos.sh

[root@workstation Desktop]# bash westos.sh 

step3:查看file文件中的内容

[root@workstation Desktop]# cat file 
HELLO
WORLA
nihao
shijie

在这里插入图片描述

5.2 一次输入重定向 <

将文件的内容作为标准输入

[root@workstation Desktop]# wc -l < file 
[root@workstation Desktop]# cat  < file 

在这里插入图片描述

题目练习
1.在屏幕显示出历史命令的3~5行

[root@workstation Desktop]# history | sed -n 3,5p
[root@workstation Desktop]# history | head -5 |tail -3
发布了11 篇原创文章 · 获赞 3 · 访问量 537

猜你喜欢

转载自blog.csdn.net/baidu_40389082/article/details/103779548