第一优先级
在绝对路径或相对路径指定的目录中查找
#相对路径
./test
#绝对路径
/home/lauf/test
例如:
创建一个.py文件,可以在其目录下执行。
vim a.py
#!/usr/bin/python3
#identify file type and must as first line
#this is a soft link
print("a.py is running....")
赋予当前文件可执行权限:
$ chmod u+x a.py
$ ./a.py #相对路径执行,需在当前目录
$ /home/lauf/a.py #绝对路径执行
那么怎么让a.py文件在哪个目录下都可以执行呢?
方法1. 指定别名
$ alias lauf='python3 /home/lauf/a.py'
$ lauf #到处都可以执行该lauf 命令
$ unalias lauf
方法2. Bash内部命令
#计划在/usr/bin内部创建软连接
$ sudo ln -s /home/lauf/a.py /usr/bin/lauf
$ lauf # 到处可以执行,通过Bash内部命令查找到
#删除软连接
$ sudo rm /usr/bin/lauf
普通用户,在bash中搜索命令时,只能到:
/usr/bin/xxxx
超级权限用户可以搜索:
/bin/xxxx
/sbin/xxxx
/usr/bin
/usr/local/bin/xxx
…
方法3. PATH环境变量
$ cd
$ vim .bashrc
export PATH=.:/home/lauf:$PATH
$ source .bashrc
$ a.py #到处可以执行,也可以在当前目录建立一个软链接,指向该文件
#最后搜索PATH 中的路径 /home/lauf。。。。。
第二优先级
别名指定的命令,让复杂的命令变简单,保护原来敏感的命令。
- 查看已有的别名
alias - 设置别名
alias myCMD=“ls -l ~/”
输入myCMD就可以执行字符串中的内容 - 取消别名
unalias myCMD
以上命令在终端输入,仅仅设置临时的别名,系统重启后即不存在;设置永久的别名,需在~/.bashrc中为当前用户配置上述命令(且source .bashrc生效)或者在/etc/profile为所有用户配置
然后就可以在终端中使用。
但是还不能在shell脚本中使用,shell脚本默认是不启动alias别名的。
#查看当前存在的别名
tarena@master:~/Lauf$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias lauf_spider='
cd /home/tarena/Lauf
scrapy crawl lauf
'
alias ll='ls -alF'
alias ls='ls --color=auto'
tarena@master:~/Lauf$ alias uu='ls -la'
tarena@master:~/Lauf$ uu
#取消别名
$ unalias uu
如下:在shell中使用别名
#!/bin/bash
#在shell中开启alias扩展,默认不开启
shopt -s expand_aliases
#查看
shopt expand_aliases
#使用别名
source /etc/profile
#source ~/.bashrc 目前没成功
#使用别名
lauf_spider
#成功
第三优先级
Bash内部命令
普通用户只能搜索/usr/bin/xxxx
/bin/xxx
/usr/bin
/usr/local/bin
第四优先级
PATH环境变量定义的目录,顺序查找,直到找到的第一个命令
$ cd ~
$ vim .bashrc
export PAHT=.:/usr/local/xxxx:$PATH
$ source .bashrc #使配置生效