环境变量与文件查找
环境变量
- 变量
所谓shell变量,就是计算机中用于记录一个值(不一定是数值,也可以是字符或字符串)的符号,而这些符号将用于不同的运算处理中。通常变量与值是一对一的关系,可以通过表达式读取它的值赋值给其它变量,也可以直接指定数值赋值给任意变量。为了便于运算和处理,大部分的编程语言会区分变量的类型,用于分别记录数值、字符或者字符串等等数据类型。Shell中的变量也基本如此,有不同类型(但不用专门指定类型名),可以参与运算,有作用域限定。
如何创建变量、如何给变量赋值、如何读取变量的值
- declare命令创建变量
- = 赋值运算数为变量赋值
- echo和$读取变量的值
变量名只能是英文字母,数字或者下划线,且不能以数字作为开头
- 环境变量
环境变量的作用域比自定义变量的作用域大。在Linux系统中,每个进程都有其各自的环境变量设置,且默认情况下,当一个进程被创建时,处理创建过程中明确指定的话,它将继承其父进程的绝大部分环境设置。Shell程序也作为一个进程运行在操作系统之上,而我们在Shell中运行的大部分命令都将以Shell的子进程的方式运行。
三种环境变量:
- 当前 Shell 进程私有用户自定义变量,只在当前 Shell 中有效。
- Shell 本身内建的变量。
- 从自定义变量导出的环境变量。
三个命令:
- set:显示当前shell所有环境变量
- env:显示与当前用户相关的环境变量,还可以让命令在指定环境中运行
- export:显示从 Shell中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量
关于环境变量,可以简单的理解成在当前进程的子进程是否有效,有效则为环境变量。习惯将环境变量名设为大写。
- 命令的查找路径与顺序
在shell中通过环境变量PATH进行搜索,当我们在Shell中执行一个命令时,系统就会按照 PATH 中设定的路径按照顺序依次到目录中去查找,如果存在同名的命令,则执行先找到的那个。
练习创建一个最简单的可执行 Shell 脚本和一个使用 C 语言创建的"hello world"程序
本来教程中是用的vim编辑器,但不知道为什么我没办法退出vim编辑器,所以我用的gedit。
如何做到想使用系统命令一样执行自己创建的脚本文件或者程序呢?那就要将命令所在路径添加到PATH环境变量了。
- 添加自定义路径到“PATH”环境变量
PATH里面的路径是以:作为分割符,并且必须添加的是绝对路径。
但这样添加的路径,只是在当前Shell有效,一旦退出终端,再打开就又会失效。在每个用户的 home 目录中有一个Shell每次启动时会默认执行一个配置脚本,以及初始化环境,包括添加一些用户自定义环境变量等等。zsh的配置文件是.zshrc,相应 Bash 的配置文件为.bashrc。它们在etc下还都有一个或多个全局的配置文件,不过我们一般只修改用户目录下的配置文件。>>
表示将标准输出以追加的方式重定向到一个文件中,>是以覆盖的方式重定向到一个文件中,使用的时候一定要注意分辨。在指定文件不存在的情况下都会创建新的文件。
- 修改和删除已有变量
- 变量修改
- 变量删除
使用unset命令删除一个环境变量
- 如何让环境变量立即生效
用source命令(或者.
)让环境变量立即生效
搜索文件
- whereis简单快速
这个搜索很快,因为它并没有从硬盘中依次查找,而是直接从数据库中查询。whereis只能搜索二进制文件(-b),man帮助文件(-m)和源代码文件(-s)。
- locate
通过"/var/lib/mlocate/mlocate.db"数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行updatedb命令更新一次,所以有时候刚添加的文件,它可能会找不到。它可以用来查找指定目录下的不同文件类型。
如果想只统计数目可以加上-c参数,-i参数可以忽略大小写进行查找,whereis 的-b,-m,-s同样可以是使用。
- which
which本身是 Shell 内建的一个命令,我们通常使用which来确定是否安装了某个指定的软件,因为它只从PATH环境变量指定的路径中去搜索命令
- find
在指定目录下搜索指定文件名的文件