和Windows一样,Linux中也有一个叫PATH
的环境变量,记录着各种可执行程序的路径,当你在控制台输入一些可执行程序/脚本文件名的时候,系统会按顺序自动从PATH环境变量中去查找这些文件。
我们使用echo $PATH
命令看看当前PATH变量中的内容
可以看到,都是一些 bin
、sbin
的路径,这些路径下一般放的都是一些可执行的程序/脚本,其路径放进PATH变量后可执行文件就可以在任意目录下直接调用了。
不同于windows的分号,各个路径之间是以**冒号:
**分隔的。
给PATH
变量附加一个值
$ PATH=$PATH:/home/shiyanlou/mybin
像这样直接给PATH变量赋新值就行了,注意不要把原来的部分丢了呀。
不过这样修改是只能在本程序(这个Shell程序)生效的,一旦关闭Shell窗口,下次再启动就不管用了。
在每个用户的 home 目录中有一个 Shell 每次启动时会默认执行一个配置脚本,以初始化环境,包括添加一些用户自定义环境变量等等。实验楼的环境使用的 Shell 是 zsh,它的配置文件是 .zshrc
我们只需要给这个配置文件添加一个变量设置语句就行了
$ echo "PATH=$PATH:/home/shiyanlou/mybin" >> .zshrc
可以重新载入配置脚本以使配置更改立即生效
$ source .zshrc
变量的修改有以下几种方式:
变量设置方式 | 说明 |
---|---|
${变量名#匹配字串} |
从头向后开始匹配,删除符合匹配字串的最短数据 |
${变量名##匹配字串} |
从头向后开始匹配,删除符合匹配字串的最长数据 |
${变量名%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最短数据 |
${变量名%%匹配字串} |
从尾向前开始匹配,删除符合匹配字串的最长数据 |
${变量名/旧的字串/新的字串} |
将符合旧字串的第一个字串替换为新的字串 |
${变量名//旧的字串/新的字串} |
将符合旧字串的全部字串替换为新的字串 |
比如我们我们前边给PATH变量附加了一个路径,现在我们想把这个附加的路径从PATH的值中去掉
我们只需
$ PATH=${PATH%:/home/shiyanlou/mybin} #从尾向前开始匹配,删除符合匹配字串的最短数据
可以使用 unset
命令删除一个环境变量:
$ unset mypath
whereis
whereis
只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)
$ whereis [文件名]
使用 locate
命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db
数据库来检索信息。
系统会使用定时任务每天自动执行 updatedb
命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb
命令
它可以用来查找指定目录下的不同文件类型,如查找 /etc 下所有以 sh 开头的文件
$ locate /etc/sh
查找 /usr/share/ 下所有 jpg 文件:
$ locate /usr/share/\*.jpg # 注意要添加 * 号前面的反斜杠转义
我们通常使用 which
来确定是否安装了某个指定的程序,因为它只从 PATH
环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令
$ which man
$ which nginx
$ which ping
find
应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。
find 基本命令格式为
$ find [path] [option] [action]
去 /etc/ 目录下面 ,搜索名字叫做 interfaces 的文件或者目录 (etc目录一般需要sudo
来提升权限)
$ sudo find /etc/ -name interfaces
找出 /etc/ 目录下的所有以 .list 结尾的文件
$ sudo find /etc/ -name \*.list