Skip to content

重定向/环境变量

输入输出重定向

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

  • 标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
  • 标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
  • 错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
bash
命令 > 文件 ——#将标准输出重定向到一个文件中,覆盖
命令 2> 文件 ——#将错误输出重定向到一个文件中,覆盖
命令 >> 文件 ——#将标准输出重定向到一个文件中,追加
命令 2>> 文件 ——#将错误输出重定向到一个文件中,追加
命令 &>> 文件 ——#将标准输出与错误输出共同写入到文件中,追加
命令 < 文件	——#将文件作为命令的标准输入
命令 << 分界符	——#从标准输入中读入,直到遇见分界符才停止

例:
ls -l yage &>> readme.txt #全部追加写入到文件中,不区分错误

管道符

管道命令符的作用也可以用一句话概括为“把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入”

bash
ls ~ | wc -w ——#查看家目录ls有多少个单词
ps -ef | grep http ——#显示http相关进程

通配符

通配符含义
*任意字符
?单个任意字符
[a-z]单个小写字母
[A-Z]单个大写字母
[a-Z]单个字母
[0-9]单个数字
[[:alpha:]]任意字母
[[:upper:]]任意大写字母
[[:lower:]]任意小写字母
[[:digit:]]所有数字
[[:alnum:]]任意字母加数字
[[:punct:]]标点符号

环境变量

变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写的,命令则都是小写的,这是一种约定俗成的规范。Linux系统中的环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录、邮件存放位置等。可以直接通过变量名称来提取到对应的变量值。

用户执行了一条命令之后,命令在Linux中的执行分为4个步骤:

  1. 判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是绝对路径则直接执行。
  2. Linux系统检查用户输入的命令是否为“别名命令”,即用一个自定义的命令名称来替换原本的命令名称。
  3. Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;而用户在绝大部分时间输入的是外部命令,这些命令交由步骤4继续处理。可以使用“type 命令名称”来判断用户输入的命令是内部命令还是外部命令
  4. 系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH。
bash
env   #查看当前所有的全局环境变量

[root@yage ~] echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin
[root@yage ~] PATH=$PATH:/root/bin
[root@yage ~] echo $PATH
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/root/bin:/root/bin

[root@yage ~] alias nowdate='date "+%Y-%m-%d %H:%M:%S"'
[root@yage ~] nowdate
2023-12-03 19:03:31
[root@yage ~] unalias nowdate
变量名称作用
HOME用户的主目录(即家目录)
SHELL用户在使用的Shell解释器名称
HISTSIZE输出的历史命令记录条数
HISTFILESIZE保存的历史命令记录条数
MAIL邮件保存路径
LANG系统语言、语系名称
RANDOM生成一个随机数字
PS1Bash解释器的提示符
PATH定义解释器搜索用户执行命令的路径
EDITOR用户默认的文本编辑器

直接在终端设置的变量能够立即生效,但在重启服务器后就会失效,因此我们需要将变量和变量值写入到.bashrc或者.bash_profile文件中,以确保永久能使用它们。

.bashrc是home目录下的一个shell文件,用于储存用户的个性化设置。在bash每次启动时都会加载.bashrc文件中的内容,并根据内容定制当前bash的配置和环境。

.bash_profile.bashrc两者在登陆bash时都会被bash执行,但是.bash_profile只在会话开始时被读取,而.bashrc在每次打开新的终端时都会被读取。

bash
alias ll = "ls -lha"   #设置别名
alias nowdate='date "+%Y-%m-%d %H:%M:%S"'
export PATH=$PATH:路径 #在原来PATH的后面继续添加了新的路径。export将变量提升成环境变量
source ~/.bashrc  #立即生效

全局环境变量

  • /etc/profile 为系统的全局环境变量设置,此文件为系统的每个用户设置环境信息
  • /etc/bashrc 为每一个运行bash shell的用户执行此文件。当bash shell被打开时,该文件被读取,每次用户打开一个终端时,即执行此文件

用户私有环境变量

  • ~/.profile可以设定本用户专有的路径,环境变量等,它只在登入的时候执行一次
  • ~/.bashrc也是某用户专有设定文档,可以设定路径,命令别名,每次shell script的执行都会使用它一次
  • ~/.bash_logout当每次退出bash shell时, 执行该文件。

正则表达式

字符集合

字符描述
.匹配除了换行符的任意一个字符
\d匹配任何一个数字,相当于[0-9]的缩写
\D匹配任何一个非数字字符
\s匹配任何一个空白字符,包括空格、制表符、换页符等
\S匹配任何一个非空白字符
\w匹配任何一个字母、数字或下划线字符,相当于[a-za-z0-9_]的缩写
\W匹配任何一个非字母、数字或下划线字符

数量词

字符描述
*匹配零个或多个任意字符
+匹配一个或多个前面的字符
?匹配零个或一个前面的字符
{n}匹配确定的n个前面的字符
{n,}匹配至少n个前面的字符
{n,m}匹配n到m个前面的字符

元字符

字符描述
^匹配字符串的开始位置
$匹配字符串的结尾位置
\b匹配一个词的边界,即字母、数字或下划线与非字母、数字或下划线之间
[]用于定义字符集合
()用于分组
\1引用正则表达式中第1个括号内的子表达式所匹配到的内容,以此类推