3.环境变量与文件查找

原文链接:https://www.shiyanlou.com/courses/reports/527972

变量定义

#定义变量
declare $变量名
#或者直接赋值也自动定义变量,注意变量之前不带"$"
变量名=值
#打印变量的值,"$"代表引用变量的值
echo $变量名

在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。

通常我们会涉及到的环境变量有三种:

  • 当前 Shell 进程私有用户自定义变量,如上面我们创建的 temp 变量,只在当前 Shell 中有效。
  • Shell 本身内建的变量。
  • 从自定义变量导出的环境变量。
相关命令 说明
set 显示当前 Shell 所有环境变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量
env 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
export 显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量

输出环境变量

#将普通变量输出为环境变量,能被子进程继承
export 变量名
#比较文件的命令
vimdiff 1.txt 2.txt 3.txt ....

命令的查找路径与顺序

$PATH环境变量设置命令搜索路径

#输出当前命令搜索路径的设置
echo $PATH

#./程序名 表示执行当前目录下的指定程序

$PATH中临时添加自定义路径,用冒号连接路径

PATH=$PATH:/home/shiyanlou/Code

如果永久添加需要修改配置文件
zsh是.zshrc bash是.bashrc
本次修改用户目录下的文件

$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc

变量修改

变量设置方式 说明
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串

变量的修改有以下几种方式:

变量设置方式 说明
${变量名#匹配字串} 从头向后开始匹配,删除符合匹配字串的最短数据
${变量名##匹配字串} 从头向后开始匹配,删除符合匹配字串的最长数据
${变量名%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最短数据
${变量名%%匹配字串} 从尾向前开始匹配,删除符合匹配字串的最长数据
${变量名/旧的字串/新的字串} 将符合旧字串的第一个字串替换为新的字串
${变量名//旧的字串/新的字串} 将符合旧字串的全部字串替换为新的字串

变量删除

可以使用unset命令删除一个环境变量:

$ unset temp

如何让环境变量立即生效

$ source .zshrc

或者

$ . ./.zshrc

注意第二种方式必须指定完整的绝对或相对路径

二、搜索文件

与搜索相关的命令常用的有如下几个whereis,which,find,locate

  • whereis
    简单快速

whereis搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis
只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。

  • locate
    快而全

通过"/var/lib/mlocate/mlocate.db"数据库查找,系统会使用定时任务每天自动执行updatedb
命令更新一次该数据库,有时需要手动执行一次updatedb
命令将新的文件数据添加进数据库,它可以用来查找指定目录下的不同文件类型,可以递归子目录进行查找,如查找 /etc 下所有以 sh 开头的文件:
$ locate /etc/sh$ locate /home/shiyanlou/Code/*.txt

经测试好像locate 后面要跟绝对路径,另外"*"必须用*来转义
-c 是仅统计数目 -i 是不区分大小写

  • which
    小而精

    它只从PATH
    环境变量指定的路径中去搜索命令

$ which man

  • find
    精而细
    find 命令非常强大,最好看专门的资料 推荐链接http://www.cnblogs.com/wanqieddy/archive/2011/06/09/2076785.html http://www.jz123.cn/text/1720453.html 以下列出几个例子
#查找系统中所有文件名中含D且在第三位的.txt文件
find / -name \?\?D\*.txt
#显示结果含有权限不够的信息,可以如下屏蔽
find / -name \?\?D\*.txt 2>/dev/null

#还可以加sudo执行
#另外,文件名加引号,可以直接用?或*,不用转义
#查找大小在10k-20k之间的*.txt
find / -name '*.txt' -size +10k -size -20k
#查找空目录和空文件
find . -empty
#查找实验楼组的文件
find . -group shiyanlou

#在/tmp目录中查找大于100000000字节并且在48小时内修改的某个文件
find /tmp -size +10000000c -and -mtime +2

#在/tmp目录中查找所有不属于panda的文件
find /tmp ! -user panda

#查找属于shiyanlou用户的文件并显示文件信息
find . -user shiyanlou -ls

#删除找到的*.txt
find . -name '*.txt' -exec rm {} \;
#以上 \; 是为了转义;字符



你可能感兴趣的:(3.环境变量与文件查找)