智慧并不产生于学历,而是来自对于知识的终生不懈的追求。这篇文章主要讲述《LinuxProbe》—RHCE 学习 Day7相关的知识,希望能为你提供帮助。
第三章 管道符、重定向与环境变量
一、输入输出重定向1)知识点简述
2)知识点详述
3)输入重定向中用到的符号及其作用符号
| 作用
|
命令 <
文件
| 将文件作为命令的标准输入
|
命令 <
<
分界符
| 从标准输入中读入,直到遇见分界符才停止
|
命令 <
文件1 >
文件2
| 将文件1作为命令的标准输入并将标准输出到文件2
|
4)输出重定向中用到的符号及其作用符号
| 作用
|
命令 >
文件
| 将标准输出重定向到一个文件中(清空原有文件的数据)
|
命令 2>
文件
| 将错误输出重定向到一个文件中(清空原有文件的数据)
|
命令 >
>
文件
| 将标准输出重定向到一个文件中(追加到原有内容的后面)
|
命令 2>
>
文件
| 将错误输出重定向到一个文件中(追加到原有内容的后面)
|
命令 >
>
文件 2>
&
1
或
命令 &
>
>
文件
| 将标准输出与错误输出共同写入
|
5)示例:[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" >
readme.txt
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" >
readme.txt
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" >
readme.txt
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" >
readme.txt
[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" >
readme.txt
[root@linuxprobe ~]# cat readme.txt
Welcome to LinuxProbe.Com
[root@linuxprobe ~]# echo "Quality linux learning materials" >
>
readme.txt
[root@linuxprobe ~]# cat readme.txt
Welcome to LinuxProbe.Com
Quality linux learning materials
[root@linuxprobe ~]# ls -l xxxxxx >
/root/stderr.txt
cannot access xxxxxx: No such file or directory
[root@linuxprobe ~]# ls -l xxxxxx 2>
/root/stderr.txt
[root@linuxprobe ~]# cat /root/stderr.txt
ls: cannot access xxxxxx: No such file or directory
[root@localhost ~]# ls -l linuxprobe
ls: cannot access linuxprobe: No such file or directory
[root@localhost ~]# ls anaconda-ks.cfg
anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg &
>
>
readme.txt
[root@localhost ~]# ls -l linuxprobe &
>
>
readme.txt
[root@localhost ~]# cat readme.txt
-rw-------. 1 root root 1395 Apr9 23:07 anaconda-ks.cfg
ls: cannot access linuxprobe: No such file or directory
[root@localhost ~]#
[root@localhost ~]# ls -l linux.probe
ls: cannot access linux.probe: No such file or directory
[root@localhost ~]# ls -l anaconda-ks.cfg
-rw-------. 1 root root 1395 Apr9 23:07 anaconda-ks.cfg
[root@localhost ~]# ls -l anaconda-ks.cfg &
>
readme.txt
[root@localhost ~]# ls -l linux.probe &
>
readme.txt
[root@localhost ~]# cat readme.txt
ls: cannot access linux.probe: No such file or directory
[root@localhost ~]#
命令 <
文件
[root@localhost ~]# wc -l <
readme.txt
1
[root@localhost ~]# wc -l readme.txt
1 readme.txt
[root@localhost ~]#
命令 <
文件1 >
(或>
>
) 文件2
[root@localhost ~]# cat readme.txt
ls: cannot access linux.probe: No such file or directory
abcdef
[root@localhost ~]# cat <
readme.txt >
linxu.probe
[root@localhost ~]# cat <
readme.txt >
linxu.probe
[root@localhost ~]# cat linxu.probe
ls: cannot access linux.probe: No such file or directory
abcdef
[root@localhost ~]# cat <
readme.txt >
>
linxu.probe
[root@localhost ~]# cat <
readme.txt >
>
linxu.probe
[root@localhost ~]# cat linxu.probe
ls: cannot access linux.probe: No such file or directory
abcdef
ls: cannot access linux.probe: No such file or directory
abcdef
ls: cannot access linux.probe: No such file or directory
abcdef
[root@localhost ~]#
命令 <
<
分界符
(注:分界符是EOF)
[root@localhost ~]# cat <
<
EOF
>
a
>
b
>
c
>
d
>
EOF
a
b
c
d
[root@localhost ~]#
命令 >
>
文件 <
<
EOF
[root@localhost ~]#
[root@localhost ~]# cat >
>
Cyril <
<
EOF
>
readme.txt
>
xiaogua
>
abcdefghijk
>
Linuxprobe.com
>
eof
>
EOF
[root@localhost ~]# cat Cyril
readme.txt
xiaogua
abcdefghijk
Linuxprobe.com
eof
[root@localhost ~]#
二、管道命令符 (|)1、格式:命令A | 命令B| 命令C把前一个命令原本要输出到屏幕的信息作为后1个命令的标准输入。
2、应用示例:1)统计有多少个用户可以登录到服务器?提示:/etc/passwd 文件中记录了所有的用户信息,其中最后1列决定了用户能否登录到服务器。
root:x:0:0:root:/root:/bin/bash
/bin/bash
可正常登录服务器
/sbin/nologin
不能登录,只能以该用户身份使用某些服务
[root@localhost ~]# grep /sbin/nologin /etc/passwd | wc -l
40
[root@localhost ~]# grep /bin/bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
linuxprobe:x:1000:1000:linuxprobe:/home/linuxprobe:/bin/bash
[root@localhost ~]# grep /bin/bash /etc/passwd | wc -l
2
[root@localhost ~]#
2)统计目录下有多少个文件ls -l 和 ls 统计的结果不一样是因为ls -l 可以看到. (汇总文件)
ls 命令执行后显示的列数与窗口大小有关,但不影响数量的统计
[root@localhost etc]# ls >
xiaomi
[root@localhost etc]# wc -l xiaomi
260 xiaomi
[root@localhost etc]# ls | wc -l
260
[root@localhost etc]# ls -l | wc -l
261
[root@localhost etc]#
3)为用户设定密码直接设定密码是必须配合管道符(|)使用--stdin参数
注:man passwd
--stdin
This option is used to indicate that passwd should read the new password from standard input, which can be a pipe.
[root@localhost etc]# echo redhat | passwd linuxprobe
Changing password for user linuxprobe.
New password: BAD PASSWORD: The password is shorter than 8 characters
Retype new password: Password change aborted.
passwd: Authentication token manipulation error
[root@localhost etc]# echo redhat | passwd --stdin linuxprobe
Changing password for user linuxprobe.
passwd: all authentication tokens updated successfully.
[root@localhost etc]#
4)从命令执行后显示的众多信息中过滤需要内容(px aux | grep bash)[root@localhost etc]# ps aux | wc -l
324
[root@localhost etc]# ps aux | grep bash
root9790.00.1171722384 ?S01:190:00 /bin/bash /usr/sbin/ksmtuned
root28480.00.2266685540 pts/0Ss01:250:00 bash
root40950.00.2266445280 pts/1Ss+02:070:00 bash
root46250.00.2265405440 pts/2Ss+02:310:00 bash
root47870.00.0121121096 pts/0S+02:370:00 grep --color=auto bash
[root@localhost etc]#
三、命令行通配符1、Linux系统中的通配符及含义通配符
| 含义
|
*
| 任意字符(空值、无穷多个)
|
?
| 单个任意字符
|
[a-z]
| 单个小写字母
|
[A-Z]
| 单个大写字母
|
[a-Z]
| 单个字母
|
[0-9]
| 单个数字
|
[a,b,c,d,e]
| a,b,c,d,e中的某个字母
|
[1,3,5]
| 1,3,5是的某个数字
|
[[:alpha:]]
| 任意字母
|
[[:upper:]]
| 任意大写字母
|
[[:lower:]]
| 任意小写字母
|
[[:digit:]]
| 所有数字
|
[[:alnum:]]
| 任意字母加数字
|
[[:punct:]]
| 标点符号
|
2、应用示例1)查看所有硬盘的相关权限属性[root@linuxprobe ~]# ls -l /dev/sda*
brw-rw----. 1 root disk 8, 0 May 4 15:55 /dev/sda
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda?
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda[0-9]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
brw-rw----. 1 root disk 8, 2 May 4 15:55 /dev/sda2
[root@linuxprobe ~]# ls -l /dev/sda[135]
brw-rw----. 1 root disk 8, 1 May 4 15:55 /dev/sda1
2)搜索/etc/目录中所有以.conf结尾的配置文件[root@linuxprobe ~]# 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
4)批量创建多个文件(需要使用大括号,并且字段之间用逗号间隔)[root@linuxprobe ~]# touch AA,BB,CC.conf
[root@linuxprobe ~]# ls -l *.conf
-rw-r--r--. 1 root root 0 Sep 22 01:54 AA.conf
-rw-r--r--. 1 root root 0 Sep 22 01:54 BB.conf
-rw-r--r--. 1 root root 0 Sep 22 01:54 CC.conf
5)批量输出指定信息[root@linuxprobe ~]# echo file1,2,3,4,5
file1 file2 file3 file4 file5
四、常用转义字符1、约定:命令:小写
变量:大写
(标准约定俗成)
$$: 显示当前命令的PID值
(确认一下)
$用于定义变量
2、常用的转义字符反斜杠(\\)
| 使反斜杠后的一个变量变为单纯的字符。
|
单引号( )
| 转义其中所有为单纯的字符串。
|
双引号(" ")
| 【《LinuxProbe》—RHCE 学习 Day7】有空格则加上,做为一个整体。
|
反引号(` `)
| 执行里面的命令,取返回结果。
|
3、应用示例1)转义字符 (\\)[root@linuxprobe ~]# PRICE=5
[root@linuxprobe ~]# echo "Price is $PRICE"
Price is 5
[root@linuxprobe ~]# echo "Price is $$PRICE"
Price is 3767PRICE
[root@linuxprobe ~]# echo "Price is \\$$PRICE"
Price is $5
2)转义字符( ``)[root@linuxprobe ~]# echo `uname -a`
Linux linuxprobe.com 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
3)转义字符("")[root@linuxprobe ~]# echo AA BB CC
AA BB CC
[root@linuxprobe ~]# echo "AA BB CC"
AA BB CC
解释:
echo AA BB CC 在执行时,可能把“AA BB CC”当作一个参数整体直接输出到屏幕,也有可能分别将AA、BB和CC输出到屏幕。
4)统计当前空闲内存值[root@localhost etc]# free -m
totalusedfreesharedbuff/cacheavailable
Mem:1966122328217459564
Swap:2047132034
[root@localhost etc]# free -m | grep Mem:
Mem:1966122428217459563
[root@localhost etc]# free -m | grep Mem: | awk print $4
281
[root@localhost etc]# HAHA=`free -m | grep Mem: | awk print $4`
[root@localhost etc]# echo $HAHA
281
[root@localhost etc]# HOHO=$(free -m | grep Mem: | awk print $4)
[root@localhost etc]# echo $HOHO
281
五、重要环境变量1、约定俗成在Linux系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。
2、Linux命令的执行过程步骤
| 解释
|
第1步
| /路径/命令 (命令路径及文件,如:/bin/ls)
|
第2步
| 别名命令 (Alias)
|
第3步
| 内部命令(built-in)
|
第4步
| 外部命令(超过99.99%的命令都是外部命令,保存在服务某个文件中,如何保证外部命令可以快速执行靠的是$PATH变量
|
1)命令别名创建别名:alias别名=命令
取消别名:unalias别名
[root@linuxprobe ~]# unalias rm
[root@linuxprobe ~]# rm initial-setup-ks.cfg
2)查看命令类型(内部、外部)[root@linuxprobe ~]# type echo
echo is a shell builtin
[root@linuxprobe ~]# type uptime
uptime is /usr/bin/uptime
3)关于$PATH变量(存放外部命令所在位置)PATH,可理解成“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会这些位置中逐个查找。PATH是由多个路径值组成的变量,路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
[root@linuxprobe ~]# PATH=$PATH:/root/bin
[root@linuxprobe ~]# echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin
4)为什么不能添加当前目录(.)到PATH中呢?,尽管可以将当前目录(.)添加到PATH变量中,从而在某些情况下可以让用户免去输入命令所在路径的麻烦。但是,如果hei客在比较常用的公共目录/tmp中存放了一个与ls或cd命令同名的muma文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招了。
3、最重要的10个环境变量变量名称
| 作用
|
HOME
| 用户的主目录(即家目录)
|
SHELL
| 用户在使用的Shell解释器名称
|
HISTSIZE
| 输出的历史命令记录条数
|
HISTFILESIZE
| 保存的历史命令记录条数
|
MAIL
| 邮件保存路径
|
LANG
| 系统语言、语系名称
|
RANDOM
| 生成一个随机数字
|
PS1
| Bash解释器的提示符
|
PATH
| 定义解释器搜索用户执行命令的路径
|
EDITOR
| 用户默认的文本编辑器
|
1)HOME变量[root@linuxprobe ~]# echo $HOME
/root
[root@linuxprobe ~]# su - linuxprobe
[linuxprobe@linuxprobe ~]$ echo $HOME
/home/linuxprobe
2)变量的方便之处[root@linuxprobe ~]# mkdir /home/workdir
[root@linuxprobe ~]# WORKDIR=/home/workdir
[root@linuxprobe ~]# cd $WORKDIR
[root@linuxprobe workdir]# pwd
/home/workdir
3)使用export 命令设置全局变量[root@linuxprobe ~]# export WORKDIR
[root@linuxprobe ~]# su linuxprobe
[linuxprobe@linuxprobe ~]$ cd $WORKDIR
[linuxprobe@linuxprobe workdir]$ pwd
/home/workdir
4)取消全局变量[root@linuxprobe ~]# unset WORKDIR
[root@linuxprobe ~]#
4、注意事项1)修改环境变量配置文件后,可使用source
配置文件路径 强制生效2)nmcli connection up ens160
(网卡重启命令)
推荐阅读