Linux 学习笔记--环境变量与文件查找
环境变量与文件查找
SHELL变量
计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。变量的作用域即变量的有效范围(比如一个函数中、一个源文件中或者全局范围),在该范围内只能有一个同名变量。一旦离开则该变量无效,如同不存在这个变量一般。
创建变量
在Linux系统中,我们可以使用 declare
命令来声明一个变量。在这里我们声明一个变量名为tmp,并赋值为 shiyanlou。
注意:使用 =
号赋值运算符,将变量 tmp 赋值为 shiyanlou。注意,与其他语言不同的是, Shell 中的赋值操作,=
两边不可以输入空格,否则会报错。
通常我们会涉及到的变量类型有三种:
- 当前 Shell 进程私有用户自定义变量,如上面我们创建的 tmp 变量,只在当前 Shell 中有效。
- Shell 本身内建的变量。
- 从自定义变量导出的环境变量。
环境变量的作用域比自定义变量的要大,如 Shell 的环境变量作用于自身和它的子进程。在所有的 UNIX 和类 UNIX 系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,除了创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。
也有三个与上述三种环境变量相关的命令:set
,env
,export
。这三个命令很相似,都是用于打印环境变量信息,区别在于涉及的变量范围不同。详见下表:
命 令 | 说 明 |
---|---|
set |
显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关),用户自定义变量及导出的环境变量。 |
env |
显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。 |
export |
显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。 |
修改变量
变量的修改有以下几种方式:
变量设置方式 | 说明 |
---|---|
${变量名#匹配字串} |
从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} |
从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} |
将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} |
将符合旧字串的全部字串替换为新的字串 |
可以看到,路径中匹配到 /bin 的字符都已经没有了。
删除变量
可以使用 unset
命令删除一个环境变量:
搜索文件
与搜索相关的命令常用的有 whereis
,which
,find
和 locate
。
whereis
简单快速
注意: whereis
只能搜索二进制文件(-b)、帮助文件(-m)和源代码文件(-s)。
locate
快而全
使用 locate
命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db
数据库来检索信息。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb
命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb
命令(在我们的环境中必须先执行一次该命令)。注意这个命令也不是内置的命令,例如在我们的环境中就需要手动安装,然后执行更新。
$ sudo apt-get update
$ sudo apt-get install locate
$ sudo updatedb
$ locate /etc/sh
他也可以使用正则来匹配文件。在使用*
号时要加反斜杆 \
。如果想只统计数目可以加上 -c 参数,-i 参数可以忽略大小写进行查找,whereis 的 -b、-m、-s 同样可以使用。
which
小而精
which
本身是 Shell 内建的一个命令,我们通常使用 which
来确定是否安装了某个指定的程序,因为它只从 PATH
环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。
find
精而细
$ find [path] [option] [action]
与时间相关的命令参数:
参数 | 说明 |
---|---|
-atime |
最后访问时间 |
-ctime |
最后修改文件内容的时间 |
-mtime |
最后修改文件属性的时间 |
下面以 -mtime
参数举例:
-mtime n
:n 为数字,表示为在 n 天之前的“一天之内”修改过的文件-mtime +n
:列出在 n 天之前(不包含 n 天本身)被修改过的文件-mtime -n
:列出在 n 天之内(包含 n 天本身)被修改过的文件-newer file
:file 为一个已存在的文件,列出比 file 还要新的文件名
本作品采用《CC 协议》,转载必须注明作者和本文链接