5.1
一、三种变量类型
- 当前Shell进程私有的用户自定义变量,只在当前的Shell中有效
- Shell本身内建的变量
- 从自定义变量中导出的环境变量
二、三个与变量有关的命令
- set:显示当前 Shell 所有变量,包括其内建环境变量(与 Shell 外观等相关);用户自定义变量及导出的环境变量。我的理解是:当前的环境变量+自定义变量
- env: 显示与当前用户相关的环境变量,还可以让命令在指定环境中运行。
- export:显示从 Shell 中导出成环境变量的变量,也能通过它将自定义变量导出为环境变量。
使用export的例子:
$ temp=shiyanlou
$ echo $temp
shiyanlou
$ zsh
$ echo $temp
无输出
$ exit
$ export temp
$ zsh
$ echo $temp
shiyanlou
三、永久生效
export的功能:对当前的shell里,将自定义变量转化成环境变量。关闭后打开就无效了。让变量永久生效,需要修改配置文件。
两个文件:/etc/bashrc(有的 Linux 没有这个文件) 和 /etc/profile ,它们分别存放的是 shell 变量和环境变量。每个用户目录(home/shiyanlou)下还有一个隐藏文件.profile,里面的配置只对当前用户有效。
需要变量永久生效,就打开etc/profile,添加环境变量。
5.2
一、环境变量PATH的用处:搜索shell输出的命令,让命令执行。PATH里面保存了执行命令的搜索路径。
5.3
一、添加路径的例子:
~
先在home/shiyanlou里建立两个可执行文件helloshell.sh(要修改权限 $ chmod 755)、helloworld.c(要使用 $ gcc -o helloworld helloworld.c 生成可执行文件)
~
然后建立目录 $ mkdir mybin
移动两个文件到这个目录 $ mv helloshell.sh helloworld mybin/
然后执行两个文件 $ ./helloshell.sh $./helloworld
会看到结果
~
返回到home/shiyanlou ,再执行两个文件,就找不到目录了。
于是添加PATH路径
$ PATH=$PATH:/home/shiyanlou/mybin
这样就可以在任何地点执行这两个命令了,但是要去掉./
但是这个方法,在退出shell之后再打开就失效了
二、永久生效的方法:
将命令直接添加到脚本配置文件中。
这个文件在home/shiyanlou里
zsh的配置名是.zshrc;bash的配置名是.bashrc
将命令添加到.zshrc中:
$ echo “PATH=$PATH:/home/shiyanlou/mybin” >> .zshrc
注:>>是追加 >是直接覆盖,若没有这个文件名,会新建一个进行覆盖
5.4
修改和删除已有变量
5.5
让环境变量立刻生效
通常,修改了脚本文件以后需要退出中断重新打开,或者是重启,才能生效。
但是使用 source,可以立刻生效
$ cd /home/shiyanlou
$ source .zshrc
5.6
搜索文件
一、whichis (在数据库中找文件,很快)
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
例子:
whichis svn :找出跟svn有关的所有文件
whichis -b svn :找出svn的二进制文件
whichis -m svn :找出svn的路径文件
whichis -s svn :找出svn的源代码文件
学习:https://www.cnblogs.com/peida/archive/2012/11/09/2761928.html
二、locate
locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。
这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令更新一次,所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令。
更新命令:
sudo apt-get update
sudo apt-get install locate
例子
查找pwd的所有相关文件
locate pwd
搜索etc目录下所有以sh开头的文件
locate /etc/sh
搜索etc中以.jpg结尾的文件
loacte /etc/*jpg
命令参数:
-e 将排除在寻找的范围之外。
-1 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的 权限资料。
-f 将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案 放在资料库中。
-q 安静模式,不会显示任何错误讯息。
-n 至多显示 n个输出。
-r 使用正规运算式 做寻找的条件。
-o 指定资料库存的名称。
-d 指定资料库的路径
-h 显示辅助讯息
-V 显示程式的版本讯息
学习:https://www.cnblogs.com/peida/archive/2012/11/12/2765750.html
三、which 只找path路径内的
which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的软件,因为它只从 PATH 环境变量指定的路径中去搜索命令。(实验楼)
我们经常在linux要查找某个文件,但不知道放在哪里了,可以使用下面的一些命令来搜索:
which 查看可执行文件的位置。
whereis 查看文件的位置。
locate 配合数据库查看文件位置。
find 实际搜寻硬盘查询文件名称。
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。 (竹子博客)
例子:
which lsmod
which cd
会找不到,因为cd是bash内自建的命令,在path内找不到
学习:https://www.cnblogs.com/peida/archive/2012/11/08/2759805.html
四、find
重开一篇笔记来记录