《LinuxProbe》—RHCE 学习 Day7
Posted myxxw2010
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《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 Apr 9 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 Apr 9 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
root 979 0.0 0.1 17172 2384 ? S 01:19 0:00 /bin/bash /usr/sbin/ksmtuned
root 2848 0.0 0.2 26668 5540 pts/0 Ss 01:25 0:00 bash
root 4095 0.0 0.2 26644 5280 pts/1 Ss+ 02:07 0:00 bash
root 4625 0.0 0.2 26540 5440 pts/2 Ss+ 02:31 0:00 bash
root 4787 0.0 0.0 12112 1096 pts/0 S+ 02:37 0: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、常用的转义字符
反斜杠(\\) | 使反斜杠后的一个变量变为单纯的字符。 |
单引号( ) | 转义其中所有为单纯的字符串。 |
双引号(" ") | 有空格则加上,做为一个整体。 |
反引号(` `) | 执行里面的命令,取返回结果。 |
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
total used free shared buff/cache available
Mem: 1966 1223 282 17 459 564
Swap: 2047 13 2034
[root@localhost etc]# free -m | grep Mem:
Mem: 1966 1224 282 17 459 563
[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 | 保存的历史命令记录条数 |
邮件保存路径 | |
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 (网卡重启命令)
以上是关于《LinuxProbe》—RHCE 学习 Day7的主要内容,如果未能解决你的问题,请参考以下文章