Linux环境变量与文件查找
环境变量
- 相关命令
命 令 说 明 set显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 env显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 export显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 - 示例
shiyanlou:Desktop/ $ declare tmp shiyanlou:Desktop/ $ tmp=shiyanlou shiyanlou:Desktop/ $ echo $tmp shiyanlou shiyanlou:Desktop/ $ zsh #创建子shell,从默认的bash切换到zsh shiyanlou:Desktop/ $ echo $tmp #值为空,表示该变量无效 shiyanlou:Desktop/ $ exit #退出 shiyanlou:Desktop/ $ export tmp #导出tmp为环境变量 shiyanlou:Desktop/ $ zsh shiyanlou:Desktop/ $ echo $tmp #变量有效 shiyanlou - 按变量的生存周期划分,Linux变量可分为两类:
- 永久的:需要修改配置文件,变量永久生效
- 临时的:使用 export 命令行声明即可,变量在关闭 shell 时失效
- 两个重要文件
/etc/bashrc(有的Linux没有这个文件):存放shell变量/etc/profile:存放shell变量和环境变量,对所有用户永久生效
注意:没有用户目录下的隐藏文件.profile只对当前用户永久生效
- 示例
- 添加自定义路径到“PATH”环境变量
- 添加自定义路径:
PATH=$PATH:/home/shiyanlou/mybin
- 每次启动Shell时自动添加自定义路径到PATH
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。实验楼的环境使用的 Shell 是 zsh,它的配置文件是 .zshrc,相应的如果使用的 Shell 是 Bash,则配置文件为 .bashrc。
echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
- 修改和删除已有变量
- 变量修改
变量设置方式 说明 ${变量名#匹配字串}从头向后开始匹配,删除符合匹配字串的最短数据 ${变量名##匹配字串}从头向后开始匹配,删除符合匹配字串的最长数据 ${变量名%匹配字串}从尾向前开始匹配,删除符合匹配字串的最短数据 ${变量名%%匹配字串}从尾向前开始匹配,删除符合匹配字串的最长数据 ${变量名/旧的字串/新的字串}将符合旧字串的第一个字串替换为新的字串 ${变量名//旧的字串/新的字串}将符合旧字串的全部字串替换为新的字串 - 变量删除
使用unset命令删除一个环境变量unset mypath
- 变量修改
- 让环境变量立即生效
- 在Shell中修改了一个配置脚本文件之后,每次都要退出终端重新打开甚至重启主机之后其才能生效。可以使用
source命令来让其立即生效:cd /home/shiyanlou source .zshrc source命令别名.,所以上条命令可替换成:. ./.zshrc #后面的文件必须指定完整的绝对或相对路径名,source则不需要
- 在Shell中修改了一个配置脚本文件之后,每次都要退出终端重新打开甚至重启主机之后其才能生效。可以使用
- 搜索文件
whereis简单快速shiyanlou:Desktop/ $ whereis who who: /usr/bin/who /usr/share/man/man1/who.1.gz
whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)locate快而全
这个命令不是内置命令,在部分环境中需要手动安装,然后执行更新sudo apt-get update sudo apt-get install locate sudo updatedb- 查找
usr/share/下所有jpg文件:locate /usr/share/*.jpg - 若想只统计数目可以加上
-c参数,-i参数可以忽略大小写进行查找,whereis的-b、-m和-s同样可以用
- 查找
which小而精which 本身是 Shell 内建的一个命令,我们通常使用
which来确定是否安装了某个指定的程序,因为它只从PATH环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果shiyanlou:Desktop/ $ which man /usr/bin/man shiyanlou:Desktop/ $ which nginx /usr/sbin/nginx shiyanlou:Desktop/ $ which ping /bin/pingfind精而细find应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索- 基本命令格式
find [path][option] [action]
- 基本命令格式