Day-02-管道、重定向、环境变量

管道符、重定向与环境变量

3.1 输入输出重定向
输入重定向:是指把文件导入到命令中
输出重定向:是指把原本要输出到屏幕的数据信息写入到指定文件中

标准输入重定向(STDIN,文件描述符为 0):默认从键盘输入,也可从其他文件或命令中写入
标准输出重定向(STDOUT,文件描述符为 1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为 2):默认输出到屏幕。

输入重定向中用到的符号及其作用
符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 从标准输入中读入,直到遇见分界符才停止
命令 < 文件 1 > 文件 2 将文件 1 作为命令的标准输入并将标准输出到文件 2

输出重定向中用到的符号及其作用
符号 作用
命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 将错误输出重定向到一个文件中(追加到原有内容的后面)
命令 >> 文件 2>&1 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面
或命令 &>> 文件

3.2 管道命令符
管道命令符的作用“把前一个命令原本要输出到屏幕的标准正常数据当作后一个命令的标准输入”
[root@wen ~]# more /etc/passwd | grep ‘sbin/nologin’ | wc -l
//在/etc/passwd中过滤含有’sbin/nologin’的有多少行
echo ‘redhat’ | passwd –stdin root //用重定向、通道修改root密码

把编辑好的内容与标题一起“打包”,最终用这一条命令实现邮件的发送
[root@linuxprobe ~]# echo “Content” | mail -s “Subject” linuxprobe
[root@linuxprobe ~]# su - linuxprobe
Last login: Fri Jul 10 09:44:07 CST 2017 on :0
[linuxprobe@linuxprobe ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
“/var/spool/mail/linuxprobe”: 1 message 1 new

N 1 root Sun Aug 30 17:33 18/578 “Subject”

用了 mail 邮件命令与输入重定向的分界符,用户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入。
[root@linuxprobe ~]# mail -s “Readme” root@linuxprobe.com << over

I think linux is very practical
I hope to learn more
can you teach me ?
over

3.3 命令行的通配符
通配符就是通用的匹配信息的符号,比如:星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,中括号内加上数字[0-9]代表匹配 0~9 之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符。
实例: [root@wen ~]# ll /dev/sda* //(*)代表匹配零个或多个字符
brw-rw—-. 1 root disk 8, 0 Aug 12 09:28 /dev/sda
brw-rw—-. 1 root disk 8, 1 Aug 12 09:28 /dev/sda1
brw-rw—-. 1 root disk 8, 2 Aug 12 09:28 /dev/sda2
brw-rw—-. 1 root disk 8, 3 Aug 12 09:28 /dev/sda3

[root@wen ~]# ll /dev/sda? //(?)代表匹配单个字符
brw-rw—-. 1 root disk 8, 1 Aug 12 09:28 /dev/sda1
brw-rw—-. 1 root disk 8, 2 Aug 12 09:28 /dev/sda2
brw-rw—-. 1 root disk 8, 3 Aug 12 09:28 /dev/sda3

[root@wen ~]# ll /dev/sd[abc] //[abc]则是代表匹配 a、b、c 三个字符中的任意一个字符
brw-rw—-. 1 root disk 8, 0 Aug 12 09:28 /dev/sda

3.4 常用的转义字符
4 个最常用的转义字符如下所示。
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
单引号(’ ‘):转义其中所有的变量为单纯的字符串。
双引号(” “):保留其中的变量属性,不进行转义处理。
反引号():把其中的命令执行后返回结果。
实例:
定义一个名为 PRICE 的变量并赋值为 5,输出以双引号括起来的字符串与变量信息:
[root@wen ~]# PRICE=5
[root@wen ~]# echo “Price is PRICEPriceis5Priceis P R I C E ” P r i c e i s 5 输 出 “ P r i c e i s 5”,

作用是显示当前程序的进程 ID 号码,  
[root@wen ~]# PRICE=5  
[root@wen ~]# echo “Price is
作用是显示当前程序的进程 ID 号码,  [root@wen ~]# PRICE=5  [root@wen ~]# echo “Price is
PRICE”
Price is 6191PRICE
要使第一个“ ”乖乖地作为美元符号,那么就需要使用反斜杠(\)来进行转义  
[root@wen ~]# PRICE=5  
[root@wen ~]# echo “Price is \$
”乖乖地作为美元符号,那么就需要使用反斜杠(\)来进行转义  [root@wen ~]# PRICE=5  [root@wen ~]# echo “Price is \$
PRICE”
Price is $5

只需要某个命令的输出值时,可以像命令这样,将命令用反引号括起来,达到预期的效果。例如,将反引号与 uname -a 命令结合,然后使用 echo 命令来查看本机的 Linux 版本和内核信息:
[root@wen ~]# echo uname -a //反引号作用执行引号内命令
Linux wen 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

3.5 重要的环境变量
变量是计算机系统用于保存可变值的数据类型。变量名称一般为大写
Linux系统中的环境变量是用来定义系统运行环境的一些参数,通过环境变量帮助Linux系统构建起能够为用户提供服务的工作运行环境,需要数百变量协同工作完成。
用户执行命令,命令在Linux中执行分为四个步骤:
第 1 步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
第 2 步:Linux 系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。可以用 alias 命令来创建一个属于自己的命令别名,格式为“alias 别名=命令”。若要取消一个命令别名,则是用 unalias 命令,格式为“unalias 别名”。
[root@wen ~]# alias rm
alias rm=’rm -i’ //rm别名为rm -i
第 3 步:Bash 解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤 4 继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令。
第4 步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后 Bash 解释器就会乖乖地在这些位置中逐个查找。PATH 是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到 Bash 解释器对 Linux 命令的查找。
[root@wen ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@linuxprobe ~]# PATH=PATH:/root/bin  
[root@linuxprobe ~]# echo
PATH:/root/bin  [root@linuxprobe ~]# echo
PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
这里有比较经典的问题:“为什么不能将当前目录(.)添加到 PATH 中呢? ” 原因是,尽管可以将当前目录(.)添加到 PATH 变量中,从而在某些情况下可以让用户免去输入命令所在路径的麻烦。但是,如果黑客在比较常用的公共目录/tmp 中存放了一个与 ls 或 cd 命令同名的木马文件,而用户又恰巧在公共目录中执行了这些命令,那么就极有可能中招了。
变量是由固定的变量名与用户或系统设置的变量值两部分组成的,我们完全可以自行创建变量,来满足工作需求。例如设置一个名称为 WORKDIR 的变量,方便用户更轻松地进入一个层次较深的目录:
[root@linuxprobe ~]# mkdir /home/workdir
[root@linuxprobe ~]# WORKDIR=/home/workdir
[root@linuxprobe ~]# cd WORKDIR  
[root@linuxprobe workdir]# pwd  
/home/workdir’  
但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了:  
[root@linuxprobe workdir]# su linuxprobe  
Last login: Fri Mar 20 20:52:10 CST 2017 on pts/0  
[linuxprobe@linuxprobe ~]
WORKDIR  [root@linuxprobe workdir]# pwd  /home/workdir’  但是,这样的变量不具有全局性,作用范围也有限,默认情况下不能被其他用户使用。如果工作需要,可以使用 export 命令将其提升为全局变量,这样其他用户也就可以使用它了:  [root@linuxprobe workdir]# su linuxprobe  Last login: Fri Mar 20 20:52:10 CST 2017 on pts/0  [linuxprobe@linuxprobe ~]
cd WORKDIR[linuxprobe@linuxprobe ] W O R K D I R [ l i n u x p r o b e @ l i n u x p r o b e   ] echo WORKDIR[linuxprobe@linuxprobe ] W O R K D I R [ l i n u x p r o b e @ l i n u x p r o b e   ] exit
[root@linuxprobe ~]# export WORKDIR
[root@linuxprobe ~]# su linuxprobe
Last login: Fri Mar 20 21:52:10 CST 2017 on pts/0
[linuxprobe@linuxprobe ~] cd c d WORKDIR
[linuxprobe@linuxprobe workdir]$ pwd
/home/workdir

    Linux 系统中最重要的 10 个环境变量

变量名称 作用
HOME 用户的主目录(即家目录)
SHELL 用户在使用的 Shell 解释器名称
HISTSIZE 输出的历史命令记录条数
HISTFILESIZE 保存的历史命令记录条数
MAIL 邮件保存路径
LANG 系统语言、语系名称
RANDOM 生成一个随机数字
PS1 Bash 解释器的提示符
PATH 定义解释器搜索用户执行命令的路径
EDITOR 用户默认的文本编辑器

作业:
1.把 ls 命令的正常输出信息追加写入到 error.txt 文件中的命令是什么?
答:ls >> error.txt
2.请简单概述管道符的作用。
答:把前面命令的输出值作为后面命令的输入值,完成多个命令组合的使用。
3.Bash 解释器的通配符中,星号(*)代表几个字符?
答:零个或多个。
4.PATH 变量的作用是什么?
答:设定解释器搜索所执行的命令的路径。
5.使用什么命令可以把名为 LINUX 的一般变量转换成全局变量?
答:export LINUX。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值