管道符|重定向与环境变量
< 返回列表时间: 2020-02-22来源:OSCHINA
【围观】麒麟芯片遭打压成绝版,华为亿元投入又砸向了哪里?>>>
重定向 管道符 通配符 转义符 环境变量


重定向

重定向 (把命令和文件结合起来使用)
输入重定向 <
将文件重定向到命令里 ,让文件去匹配命令执行,与正常的名 命令对文件的执行方向相反 ,但结果一样 将数据流导入到命令中去跑! 给命令传参 ! 符号 作用
命令 < 文件 将文件作为命令的标准输入
命令 << 分界符 命令 < 文件1 > 文件2
从标准输入中读入,直到遇见分界符才停止 将文件1作为命令的标准输入并将标准输出到文件2




2. 输出重定向 > (用的比较多)
就是把原本要输出的屏幕上的东西输出到重定向的文件中 ,又分 =细分两种模式
符号 作用 命令 > 文件 将标准输出重定向到一个文件中(清空原有文件的数据)
命令 2> 文件 将错误输出重定向到一个文件中(清空原有文件的数据)
命令 >> 文件 将标准输出重定向到一个文件中(追加到原有内容的后面)
命令 2>> 文件 命令 &> 文件
将错误输出重定向到一个文件中(追加到原有内容的后面) 将标准输出与错误输出共同写 (逻辑和)




管道符

把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入做二次处理

命令A | 命令B
将A输出的信息交给B继续处理
例 :修改 linuxprobe用户的的 密码
echo redhat | passwd --stdin linuxprobe 通过管道符传送密码到下一步动作实现重置密码
grep bash /etc/passwd | wc -l 统计有多少用户能登录系统
grep "/sbin/nologin" /etc/passwd | wc -l 统计有多少用户被限制登录
通配符

* 表示空值 匹配所有
例 :ls /dev/sda* 匹配所有sda相关的值
ls /dev/sda? 只匹配sda后一位字符 ,但不会显示 dev/ sda因为不能匹配空值
ls /dev/sda???? 匹配后四位字符
ls /dev/sda[0-9] 只匹配数字后缀相关
ls /dev/sda[a-z] 匹配大写字母
ls /dev/sda[A-Z] 匹配大写字母
ls /dev/sda[a-z , A-Z] 匹配字母不区分大小写
ls /dev/sda[1,3,5] 针对性匹配 数字
ls /dev/sda[a,c,h] 针对性匹配 字母



转义符

如果变量 参数 对象之间有间隔的要用双引号引起

反斜杠(\):使反斜杠后面的一个变量变为单纯的字符串。
单引号(''):转义其中所有的变量为单纯的字符串全局转义。
双引号(""):保留其中的变量属性,不进行转义处理。
反引号(``):把其中的命令执行后返回结果。

例:
命令用反引号 =echo 'uname -a' 只取返回结果 如执行uname -a
PRRICE=5
echo "price is $PRICE" 输出变量信息
Price is 5
echo "price is \$$PRICE" 输出这个东西5$
Price is $5
如果不用转义符 两个$$显示的是pid号码 , 需要转义为\转换为单纯的文本 ,去掉其特殊功能




环境变量

分类
按照生命周期来分, Linux 环境变量可以分为两类:
1 、永久的:需要用户修改相关的配置文件,变量永久生效。
2 、临时的:用户利用 export 命令,在当前终端下声明环境变量,关闭 Shell 终端失效。

按照作用域来分, Linux 环境变量可以分为:
1 、系统环境变量:系统环境变量对该系统中所有用户都有效。
2 、用户环境变量:顾名思义,这种类型的环境变量只对特定的用户有效。



在Linux系统中,变量名称一般都是大写的,这是一种约定俗成的规范,我们可以直接通过变量名称来提取到对应的变量值。Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等,他告诉机器,你输入的命令到哪里去执行。指定命令执行的路径。shell必须搜索系统来找到对应的程序。 PATH环境变量定义了用于进行命令和程序查找的目录。
环境变量 存储各种工具、命令的路径,当使用工具或者命令的时候,系统回去PATH中查找对应的工具与命令
当自己下载了某个工具或者自己写了某个可执行程序,想要不加路径直接执行,则需要将该工具、程序的路径添加入PATH中

shell和操作系统 就像蜗牛壳和蜗牛的关系
在用户执行了一条命令之后,Linux系统中到底发生了什么事情呢?简单来说,命令在Linux中的执行分为4个步骤

第1步:判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行
相对路径是相对于程序当前所在的目录,当前目录随着程序的执行不断地发生变化。但是,绝对路径是相对于根路径/的,根路径是恒定不变的
例 : cd /root/usr/local/src 绝对路径 ( 路径的写法一定是由根目录 )
cd /local/src 相对路径 路径从local起


第2步:Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称
别名定义格式 alias= renetwork= ”sys d dretrsasda dasdas ssd “ 一次性的 ,如果需要永久要写入 etc策略文件夹
Alias 查看所有别名
Unalias renetworf 删除定义的别名


第3步:Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type命令名称”来判断用户输入的命令是内部命令还是外部命令
内部命令和外部命令最大的区别之处就是性能。内部命令由于构建在 shell 中而不必创建多余的进程,要比外部命令执行快得多。因此和执行更大的脚本道理一样,执行包含很多外部命令的脚本会损害脚本的性能。
1. 内部命令在系统启动时就调入内存,是常驻内存的,所以执行效率高。
2. 外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。

内部命令 (shell脚本自带的功能命令,用得很少)
内部命令实际上是shell程序的一部分,其中包含的是一些比较简单的linux系统命令,这些命令由shell程序识别并在shell程序内部完成运行,通常在linux系统加载运行时shell就被加载并驻留在系统内存中。内部命令是写在bashy源码里面的,其执行速度比外部命令快,因为解析内部命令shell不需要创建子进程。比如:exit,history,cd,echo等

外部命令 (用的很多)whereis ls 查看命令路径 , type查看命令类型内部外部
外部命令是linux系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。通常外部命令的实体并不包含在shell中,但是其命令执行过程是由shell程序控制的。shell程序管理外部命令执行的路径查找、加载存放,并控制命令的执行。外部命令是在bash之外额外安装的,通常放在/bin,/usr/bin,/sbin,/usr/sbin......等等。可通过“echo $PATH” 命令查看外部命令的存储路径,比如: ls 、 vi 等。



第4步:系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置,然后Bash解释器就会乖乖地在这些位置中逐个查找。PATH是由多个路径值组成的变量,每个路径值之间用冒号间隔,对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找

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


Echo "HOME" 显示HOME变量路径
Env 查询系统所有变量

dpjx=usr/bin/etc 创建dpjx变量
export dpjx 提升dpjx变量为全局变量
set | grep dpjx 查询dpjx变量


热门排行