Linux学习 —— 输入和输出

目录

输入输出

1. 输入

2. 输出 

3. 重定向

4. 追加

5. 管道

6. 输入重定向

6.1 一次输入重定向

6.2多行录入


输入输出

1. 输入

Stdin[标准输入流]:输入是指系统外接向系统中传递的信息。

输入数据的方式可以分为键盘、鼠标、输入命令等 。在这里要注意的是,并不是所有的输入一定有输出!

2. 输出 

stdout[标准正确输出]:对输入的命令执行完成之后产生的字符串,在Linux中正确的输出编号是1

stderr[标准错误输出]:在输入的命令执行失败后产生的字符串,在Linux中错误的输出编号是2

在这里就牵扯到字符设备,字符设备是指I/O传输的过程中以字符为单位进行传输的设备,通过我们的打印机、键盘等都是t通过字符传输的,并且字符设备在内存中所开启的虚拟设备中是真实存在的。

file /dev/pts/   ##输出pts目录下文件信息
/dev/pts/: directory

file /dev/pts/0  ##输出结果为character special
/dev/pts/0: character special (136/0)

其中的0表示采集所有输入,1表示收集所有的正确输出,2表示手机所有的错误输出。

下面是对输入以及内部处理还有输出过程的一个简单图解:

3. 重定向

符号 作用
> 或 1> 重定向正确输出
2> 重定向错误输出
&> 重定向全部输出
find /etc/ -name passwd                               ##寻找/etc目录下的passwd文件,从输出结果可以很清楚的看到普通用户的权限非常低,很多文件都不能够访问。
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied            ##错误输出
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
/etc/pam.d/passwd                                     ##正确输出
/etc/passwd
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied

find /etc/ -name passwd > dsd.out                     ##重定向正确的输出,将正确的输出存入dsd.out文件中
find: ‘/etc/pki/rsyslog’: Permission denied
find: ‘/etc/lvm/archive’: Permission denied
find: ‘/etc/lvm/backup’: Permission denied
find: ‘/etc/lvm/cache’: Permission denied
find: ‘/etc/dhcp’: Permission denied
find: ‘/etc/cups/ssl’: Permission denied
find: ‘/etc/grub.d’: Permission denied
find: ‘/etc/sssd’: Permission denied
find: ‘/etc/polkit-1/rules.d’: Permission denied
find: ‘/etc/polkit-1/localauthority’: Permission denied
find: ‘/etc/audit’: Permission denied
find: ‘/etc/libvirt’: Permission denied
find: ‘/etc/firewalld’: Permission denied
find: ‘/etc/sudoers.d’: Permission denied

find /etc/ -name passwd 2> dsd.err                   ##重定向错误的输出,将错误的输出存入dsd.err文件中
/etc/pam.d/passwd
/etc/passwd

find /etc/ -name passwd &> dsd.err                   ##重定向全部的输出,将所有的输出存入dsd.all文件中

在这里就又引申出来一个知识点,若我们想将其保存在一个已有内容的文件中,实践发现通过现在这种方式去输出内容会覆盖掉文件原内容,即重定向。那么该如何解决这个问题呢,这就引出了追加。

4. 追加

引出追加的缘由:重定向会覆盖掉文件的原本内容。追加动作不会覆盖原文件内容,并且会将追加的内容放到原文件的最后。

符号 作用
>> 追加正确输出
2>> 追加错误输出
&>> 追加所有输出

eg:

1、首先我们创建一个文件,写入hello dsd,如图:

echo hello dsd2333 > dsd2333          ##创建dsd2333,并向dsd2333文件中写入内容

2、通过find /etc/ -name passwd > dsd2333 将正确的输出重定向到文件中,如图:

3、通过find /etc/ -name passwd >> dsd2333 将正确的输出追加到文件中,如图:

通过上述实例,我们可以可以直观的看出重定向和追加的区别。

5. 管道

符号 作用
| 管道符
2>&1 将2中的数据重定向到1中

 由图可以看出该管道对错误的数据没有进行处理,只处理了正确的管道符,那么我们为了让管道符将所有数据都能够处理,就需要将错误的数据定向到正确的数据中,即进行如下操作:

find /etc/ -name passwd 2>&1

 但是由于此时,我们通过wc -l处理后数据就消失了,那么我们想把它保存在文件里怎么办,这个时候我们就需要用tee命令将数据先进行一个备份,再进行后续,即如下操作:

find /etc/ -name passwd 2>&1 | tee file | wc -l

6. 输入重定向

符号 作用
< 将命令中接收输入的途径由默认的键盘更改为指定的文件
<< 多行录入

6.1 一次输入重定向

command-line [n] < file或文件描述符 & 设备

将命令默认从键盘获得的输入,改成从文件,或者其它打开文件以及设备输入。执行这个命令,将标准输入0,将文件或设备绑定,由它输入。

[root@localhost Desktop]# echo haah iidh > file     ## 输入haah iidh到file文件中
[root@localhost Desktop]# cat file                  ## 读取file文件的内容
haah iidh
[root@localhost Desktop]# tr 'a-z' 'A-Z' < file     ## 将file作为输入传递给tr命令,tr将其由小写转换为大写
HAAH IIDH

6.2多行录入

新建test(root用户)文件,输入内容passwd,保存并运行。

[root@localhost Desktop]# sh test
Changing password for user root.
New password:                             ## 可以看到这里我们必须要输入两次密码

 这种需要多次输入来解决的我们可以通过多行录入来解决,修改内容如下:

passwd << EOF      ## EOF为多行录入起始
DSD2333
DSD2333
EOF                ## 再次出现EOF时输入结束
[root@localhost Desktop]# sh test
test: line 4: warning: here-document at line 1 delimited by end-of-file (wanted `EOF')
Changing password for user root.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: passwd: all authentication tokens updated successfully.

## 可以看到我们密码修改成功了,快鼓掌!!!
发布了50 篇原创文章 · 获赞 37 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/m0_37868230/article/details/103783595