7.输入输出重定向

1.输出重定向

命令-->文件

>标准信息输出     将标准输出重定向到一个文件中(清空原有文件的数据)  

将ls-l的内容输入到 haha文件中,如果haha里面有内容会清空

[root@localhost ~]# ls -l > haha
[root@localhost ~]# cat haha
total 2097176
drwxr-xr-x. 2 root root          6 Jan 19 11:41 123
drwxr-xr-x. 2 root root          6 Jan 19 11:24 2
-rw-r--r--. 1 root root         20 Jan 19 18:18 20Z_file
drwxr-xr-x. 2 root root          6 Jan 19 11:24 3
drwxr-xr-x. 2 root root          6 Jan 19 11:24 4
drwxr-xr-x. 2 root root          6 Jan 19 11:19 456
drwxr-xr-x. 2 root root          6 Jan 19 11:24 5
-rw-------. 1 root root       1376 Jan 15 23:29 anaconda-ks.cfg
-rw-r--r--. 1 root root        512 Jan 19 18:25 backup
-rw-r--r--. 1 root root         15 Jan 19 10:56 b.txt
-rw-r--r--. 1 root root 2147479552 Jan 19 18:31 ceshi
-rw-r--r--. 1 root root         21 Jan 19 11:01 c.txt
drwxr-xr-x. 2 root root          6 Jan 15 23:49 Desktop

2> 错误信息输出  将错误输出重定向到一个文件中(清空原有文件的数据)

因为xixi文件存在会报错,使用2>重定向输出到111

[root@localhost ~]# ls -l xixi 2> 111
[root@localhost ~]# cat 111
ls: cannot access 'xixi': No such file or directory

使用场景:安装脚本时,如果出现安装依赖等报错,可以输出出来,不看安装过程

>>标准信息输出     将标准输出重定向到(追加)一个文件中(不清空原有文件的数据)

[root@localhost ~]# ls -l >> haha
[root@localhost ~]# ls -l >> haha
[root@localhost ~]# ls -l >> haha
[root@localhost ~]# wc -l haha
161 haha

 2>> 错误信息输出  将错误输出重定向到(追加)一个文件中(不清空原有文件的数据)

[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# ls -l xixi 2>> 111
[root@localhost ~]# wc -l 111
6 111

命令 >> 文件2>&1 或者 &>> 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

[root@localhost ~]# ls -1 &>hoho
[root@localhost ~]# ls -l anaconda-ks.cfg &>>hoho
[root@localhost ~]#

2.输入重定向

命令 <--文件

<   将文件作为命令的标准输入

[root@localhost ~]# wc -l anaconda-ks.cfg
44 anaconda-ks.cfg
[root@localhost ~]# wc -l < anaconda-ks.cfg
44

则是将anaconda-ks.cfg 文件中的内容通过操作符导入到命令 中,没有被当作命令对象进行执行,因此wc命令只能读到信息流数据,而没有文件名称的信 息。 

<< 分界 符 从标准输入中读入,直到遇见分界符才停止

命令 < 文件1 > 文件2 将文件1作为命令的标准输入并将标准输出到文件2

3.tee

tee 命令可以将标准输入重定向到一个或多个文件,并将其复制到标准输出。这个命令通常用于同时在屏幕上显示输出并将其保存到一个或多个文件。

  • -a:追加到文件而不是覆盖;
  • -i:忽略中断信号;
  • -p:使用原始输出。

例如,以下命令会将 ls 命令的输出同时显示在屏幕上并保存到 file.txt 文件中:

ls | tee file.txt

如果需要将输出追加到文件末尾,可以使用 -a 选项:

ls | tee -a file.txt

4.管道命令符(任意门)

把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入

管道命令符能在一个命令组合中使用多次。我们完全可以 这样使用:“命令A | 命令B | 命令C”

查看几个用户可以登录服务器

[root@localhost ~]# grep /bin/bash /etc/passwd | wc -l
2

bin/bash 正常登录服务器
sbin/nologin 登录服务器不能

用翻页的形式查看/etc目录中的文件列表及属性信息

[root@localhost ~]# ll /etc | more
drwxr-xr-x.  2 root root        36 Jan 15 23:25 cron.daily
-rw-r--r--.  1 root root         0 Oct  2  2018 cron.deny
drwxr-xr-x.  2 root root        22 Jan 15 23:23 cron.hourly
drwxr-xr-x.  2 root root         6 Aug 12  2018 cron.monthly
-rw-r--r--.  1 root root       451 Aug 12  2018 crontab
drwxr-xr-x.  2 root root         6 Aug 12  2018 cron.weekly
drwxr-xr-x.  5 root root        65 Jan 15 23:23 crypto-policies
-rw-------.  1 root root         0 Jan 15 23:21 crypttab
-rw-r--r--.  1 root root      1602 Sep 10  2018 csh.cshrc
-rw-r--r--.  1 root root       841 Sep 10  2018 csh.login
drwxr-xr-x.  4 root lp        4096 Jan 20 10:59 cups
drwxr-xr-x.  2 root root        34 Jan 15 23:25 cupshelpers
drwxr-xr-x.  4 root root        78 Jan 15 23:23 dbus-1
--More--

通过把管道符和passwd命令的--stdin参数相结合,可以用一条命令 来完成密码重置操作: 

[root@localhost ~]# useradd xiaoming
[root@localhost ~]# echo "xiaoming" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.

搜索与bash有关的进程信息:

[root@localhost ~]# ps -aux | grep bash
root       1073  0.0  0.1  25384  2400 ?        S    10:58   0:00 /bin/bash /usr/sbin/ksmtuned
root       2423  0.0  0.2  26432  5060 pts/0    Ss   11:09   0:00 -bash
root       2446  0.1  0.1  12832  3252 ?        Ss   11:09   0:00 bash -c while true; do sleep

将显示系统中所有与bash相关的进程信息,并同时将输出到屏幕和文件中:

[root@localhost ~]# ps -aux | grep bash | tee A.txt

5.通配符

* 任意字符

? 单个任意字符

[a-z] 单个小写字母

 [A-Z] 单个大写字母

[a-Z] 单个字母

[0-9] 单个数字

[[:alpha:]] 任意字母

[[:upper:]] 任意大写字母

[[:lower:]] 任意小写字母

[[:digit:]] 所有数字

[[:alnum:]] 任意字母加数字

[[:punct:]] 标点符号

来匹配所有在/dev目录中且以sda 开头的文件:

[root@localhost ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 Jan 20 10:57 /dev/sda
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 20 10:57 /dev/sda2

查看文件名以 sda 开头,但是后面还紧跟其他某一个字符的文件的相关信息, 

[root@localhost ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 20 10:57 /dev/sda2

 使用[0-9]来匹配 0~9 之间的单个数字

[root@localhost ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1
brw-rw----. 1 root disk 8, 2 Jan 20 10:57 /dev/sda2

可以用[135]这样的方式仅匹配这 3 个指 定数字中的一个;

[root@localhost ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 Jan 20 10:57 /dev/sda1

通配符不一定非要放到最后面,也可以放到前面

搜索/etc/ 目录中所有以.conf结尾的配置文件

[root@localhost ~]# ls -l /etc/*.conf
-rw-r--r--. 1 root root       55 Feb  1  2019 /etc/asound.conf
-rw-r--r--. 1 root root    25696 Dec 12  2018 /etc/brltty.conf
-rw-r--r--. 1 root root     1083 Apr  4  2018 /etc/chrony.conf
-rw-r--r--. 1 root root     1174 Aug 12  2018 /etc/dleyna-server-service.conf
-rw-r--r--. 1 root dnsmasq 26843 Aug 12  2018 /etc/dnsmasq.conf
-rw-r--r--. 1 root root      117 Jan 16  2019 /etc/dracut.conf
-rw-r--r--. 1 root root       20 Aug 12  2018 /etc/fprintd.conf

单次创建多个文件时,需要使用大括号,并且字段之间用逗 号间隔:

[root@localhost ~]# touch {AA,BB,CC}.conf
[root@localhost ~]# ls -l *.conf
-rw-r--r--. 1 root root 0 Jan 20 15:41 AA.conf
-rw-r--r--. 1 root root 0 Jan 20 15:41 BB.conf
-rw-r--r--. 1 root root 0 Jan 20 15:41 CC.conf

也可以输出一些指定的信息:

[root@localhost ~]# echo txt{1,2,3}
txt1 txt2 txt3

6.转义字符

Shell解释器还提供了特别丰富的转义字符来处理输入 的特殊数据。

 \ :使反斜杠后面的一个变量变为单纯的字符。

  ' ':转义其中所有的变量为单纯的字符串。

" " :保留其中的变量属性,不进行转义处理。

` ` :把其中的命令执行后返回结果。

规范:变量大写,命令小写

输出以双引号括起来的字符串与变 量信息:

[root@localhost ~]# PRICE=5
[root@localhost ~]# echo "price is $PRICE"
price is 5

使用反斜杠(\)来进行转义,将 这个命令提取符转义成单纯的文本,去除其特殊功能

第一个$符经过\转义,变成了单纯的字符,第二个$符和后面的PRICE构成变量名

[root@localhost ~]# echo "price is \$$PRICE"
price is $5
[root@localhost ~]#

如果只需要某个命令的输出值,可以像`命令`这样,将命令用反引号括起来,达到预期的效果 

将反引号与uname -a命令结合,然后使用echo命令来查看本机的Linux版 本和内核信息:

[root@localhost ~]# echo `uname -a`
Linux localhost.Trick 4.18.0-80.el8.x86_64 #1 SMP Wed Mar 13 12:02:46 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

如果参数中出现了 空格,就加双引号;如果参数中没有空格,那就不用加双引号。

 

  • 30
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trick♂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值