Linux-重定向、管道符、通配符、转义字符、环境变量

Linux-重定向、管道符、通配符、转义字符、环境变量

在学习了linux常见的命令之后,我们要学以致用!本篇博客就来介绍如何将linux常见的命令用起来,在这里我们假设常见的命令我们已经了如指掌,不熟悉的可以关注我,看我这篇博客Linux常见命令

1. 输入输出重定向

1.1 文件描述符和分界符EOF

文件描述符: 每一个被进程打开的文件,都会被赋予一个非负整数用以标识该文件,即文件标识符。

# 每个进程都会打开的三个文件,文件标识符为0、1、2
0 STDIN 标准输入 键盘
1 STDOUT  标准输出 显示器
2 STDERR  错误输出 显示器
# 在一个终端上打开/etc/passwd文件,在另一个终端上查看进程情况。
# 查看某个进程的PID
[root@master ~]# ps aux | grep passwd
root      18841  1.1  0.2 151664  5388 pts/0    S+   19:24   0:00 vim /etc/passwd
root      18856  0.0  0.0 112724   988 pts/1    S+   19:24   0:00 grep --color=auto passwd
# 查看一个进程打开了哪些文件?
[root@master ~]# ll /proc/18841/fd
总用量 0
lrwx------. 1 root root 64 7月  13 19:25 0 -> /dev/pts/0    # 标准输入
lrwx------. 1 root root 64 7月  13 19:25 1 -> /dev/pts/0    # 标准输出
lrwx------. 1 root root 64 7月  13 19:24 2 -> /dev/pts/0    # 错误输出
lrwx------. 1 root root 64 7月  13 19:25 4 -> /etc/.passwd.swp

# 查看一个进程最多可以打开多少个文件
[root@master ~]# ulimit -n
1024
[root@master ~]# ulimit -n 2048
[root@master ~]# ulimit -n
2048
[root@master ~]# ulimit -n 1024
[root@master ~]# ulimit -n
1024
# EOF(End Of File)即文件的结束,分界符
<<EOF  # 输入文档,当遇到EOF结束输入
<<aaa  # 输入文档,当遇到aaa结束输入
# 可将整个结构体写入shell脚本中,再执行。

# 以下的写入和追加操作,可以不用vim,直接写入内容。
# 将查看的内容写入a.txt,输入eof则保存退出。
[root@master ~]# cat > a.txt <<eof
hahah
xixi
hhha
EOF
HHHH
eof
[root@master ~]# cat a.txt
hahah
xixi
hhha
EOF
HHHH
# 将查看的内容追加到a.txt,输入eof则保存退出。
[root@master ~]# cat >> a.txt <<eof
> ddd
> asfksd
> adsfkjd
> ajkhf
> eof
[root@master ~]# cat a.txt
hahah
xixi
hhhach
EOF
HHHH
ddd
asfksd
adsfkjd
ajkhf

[root@master ~]# vim eof.sh
#!/bin/bash
cat > b.txt <<eof
=====
hahah
xixxixi
=====
eof
[root@master ~]# ll eof.sh 
-rw-r--r--. 1 root root 60 7月  14 00:06 eof.sh
[root@master ~]# chmod +x eof.sh 
[root@master ~]# ll eof.sh 
-rwxr-xr-x. 1 root root 60 7月  14 00:06 eof.sh
[root@master ~]# ./eof.sh 
[root@master ~]# cat b.txt 
=====
hahah
xixxixi
=====

# 以上说白了就是编辑文档,但是看起来很牛。用vim打开编辑保存退出也能达到同样的效果。。。。

1.2 输入重定向

标准输入重定向(STDIN,文件描述符0),是将文件作为输入,在工作中用的较少。
在这里插入图片描述

1.3 输出重定向

输出重定向分为两种,一种是标准输出重定向(STDOUT,文件描述符1),另一种是错误输出重定向(STDERR,文件描述符2)
一个命令的输出,默认输出在屏幕上,当命令正常执行时,我们称输出为标准输出,但是当命令执行不当时,会报错,这时我们称输出的内容为错误输出。如下图:
在这里插入图片描述
那么,现在问题来了, 我们想要把这些原本输出到屏幕上的内容,输出到一个文件里,这时就需要重新定位输出的位置,也即是所谓的输出重定向。常见的输出重定向的命令如下:

命令作用
命令 > 文件将标准输出写入文件
命令 2> 文件将错误输出写入文件【2和>之间无空格】
命令 >> 文件将标准输出追加到文件末尾
命令 2>> 文件将错误输出追加到文件末尾【2和>>之间无空格】
命令 >> 文件 2>&1或命令 &>> 文件将标准输出追加到文件末尾,错误输出和标准输出一样【即stdout和stderr都输出到文件】
命令 2>> 文件 1>&2或命令 &>> 文件将错误输出追加到文件末尾,标准输出和错误输出一样【即stdout和stderr都输出到文件】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.4 两个特殊文件:/dev/null文件和/dev/zero文件

# /dev/null   黑洞文件,查看无内容,可把不想输出到屏幕的输出重定向到该文件。
# 把错误输出写入到/dev/null
[root@master ~]# ll c.txt
ls: 无法访问c.txt: 没有那个文件或目录
[root@master ~]# ll c.txt 2> /dev/null


# /dev/zero   空文件,可以用来产生空白文件
[root@master ~]# dd if=/dev/zero of=c.txt bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00461717 秒,227 MB/秒
[root@master ~]# ll c.txt 
-rw-r--r--. 1 root root 1048576 7月  14 00:19 c.txt

2. 管道符

符号: | 【Shift + \】
作用:连接两个或者多个命令,如【命令A | 命令B | 命令C】
将前一个命令的输出,作为后一个命令的输入。
如:

  1. 找出所有被限制登录系统的用户,并统计该类用户数
    在这里插入图片描述

  2. 以分页方式查看/etc目录下的文件情况【Enter 下一行】
    在这里插入图片描述

  3. 重置root和abong的密码
    在这里插入图片描述
    在这里插入图片描述

  4. 发送邮件给abong用户,将正文和标题打包并发送【邮件=对象+标题+正文】
    在这里插入图片描述

  5. 发送邮件给abong,输入正文,直到输入over才发送邮件
    在这里插入图片描述
    在这里插入图片描述

# tee命令
# 格式:输出命令 | tee [-a] 文件名
# 将标准输出的内容写入到文件中,不写入错误输出,若文件不存在,则创建文件。
# 即文件内容要么是标准输出,要么为空。
[root@master ~]# free -h | tee a.txt
              total        used        free      shared  buff/cache   available
Mem:           1.8G        727M        361M         37M        730M        813M
Swap:          2.0G          0B        2.0G
[root@master ~]# cat a.txt
              total        used        free      shared  buff/cache   available
Mem:           1.8G        727M        361M         37M        730M        813M
Swap:          2.0G          0B        2.0G
[root@master ~]# df -h | tee -a a.txt
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  3.9G   44G    9% /
devtmpfs                 894M     0  894M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M   11M  900M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    182M  8.0K  182M    1% /run/user/42
tmpfs                    182M   24K  182M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64
[root@master ~]# cat a.txt
              total        used        free      shared  buff/cache   available
Mem:           1.8G        727M        361M         37M        730M        813M
Swap:          2.0G          0B        2.0G
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   47G  3.9G   44G    9% /
devtmpfs                 894M     0  894M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M   11M  900M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
tmpfs                    182M  8.0K  182M    1% /run/user/42
tmpfs                    182M   24K  182M    1% /run/user/0
/dev/sr0                 4.3G  4.3G     0  100% /run/media/root/CentOS 7 x86_64

3. 通配符

通配符,常用于查找文件,进行模糊查询。常见的通配符:

通配符作用
*匹配0个或者多个字符
匹配单个字符
[0-9]匹配0~9之间的单个数字的字符
[a-z]匹配a~z之间的单个字母的字符
[A-Z]匹配A~Z之间的单个字母的字符
[abc]匹配a、b、c三个字符中的任意一个字符

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4. 转义字符

在Linux中,提供了转义字符来处理特殊的输入数据。
常用的转义字符如下:

转义字符作用
\【转义单个字符】反斜杠后面的变量变为单纯的字符,如\$在这里插入图片描述
‘’【转义字符串】单引号,其中的变量变为单纯的字符串,如’\$$num’在这里插入图片描述
“”【不转义字符串】双引号,保留其中的变量属性,不进行转义在这里插入图片描述
``反引号,返回反引号中命令的结果`wc -l readme.txt`在这里插入图片描述

5. 环境变量

1、在Linux中,变量是计算机系统用于保存可变值的数据类型。一般都是大写的。使用变量时要加$。而环境变量,是用来定义系统运行环境的一些参数。
2、可通过env命令查询系统的环境变量。也可以和我这样通过命令env | cut -d= -f1 | more翻页查看环境变量名
在这里插入图片描述
在这里插入图片描述
3、PATH环境变量介绍
可通过以下两种方式查看PATH变量的值
在这里插入图片描述
在这里插入图片描述
可以看到,PATH的值是5个目录。
PATH的作用:告诉Bash解释器(Shell解释器的一种)待执行的命令可能存放在哪个目录,然后Bash解释器就会逐个目录查找该命令,找到了,就执行该命令。
可以修改PATH的值,如添加目录
在这里插入图片描述
4、命令的执行步骤

  • 判断命令是否以绝对路径或者相对路径执行,是的话,直接执行。
  • 若不是,则检查命令是否是“别名命令”,是的话,也直接执行。
    在这里插入图片描述
    定义别名alias 别名=命令
    取消别名unalias 别名
  • 若不是,则检查命令是内部命令还是外部命令【whereis 命令】。若是内部命令则直接执行。
    在这里插入图片描述
  • 若是外部命令,则在PATH环境变量所对应的目录中查找相应的命令名,找到再执行。否则不执行该命令。

注意:若PATH环境变量所对应的目录有根目录,则若是在根目录中存在与某些命令同名的木马文件,则在执行命令的时候即执行了这些木马文件,故不建议将根目录添加到PATH环境变量中。

5、自定义变量
用户可以自定义变量,通常用大写字母定义。自定义的变量可以是局部的,也可以是全局的。
局部变量:创建的用户可以使用,其他用户不能使用。
全局变量:所有用户都能使用。【可通过export 变量名将局部变量提升为全局变量】【可能由于权限不足导致普通用户无法使用】
用户可以通过变量名 = 变量值定义变量
在这里插入图片描述

在学习完本节内容后,结合linux常用命令,已经能够理解并写出较为复杂的命令了,加油,熊博主!!!

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值