shell基本命令教程

我的命令怎么没有了-细讲$PATH

2019-11-15 00:08:11 admin 662

经常有同学问,为什么我的命令没有了,比如cd,pkurun-cnlong等类似的命令没有,甚至ls都不行,什么原因呢,下面我们开始讲解。

这边还是以test_pkuhpc账号为例,路径:/lustre2/teach_pkuhpc/example/linux-shell/PATH

这里涉及到linux系统的环境变量(环境变量通常是全局的),我们先讲讲,

这边还是以test_pkuhpc账号为例,我们可以登录北极星终端,我们可以用export去查看已经设置的变量:

[test_pkuhpc@login12 PATH]$ export

declare -x HISTCONTROL="ignoredups"

declare -x HISTSIZE="18888"

.....

declare -x PATH="......"

这里有个变量declare -x PATH="......" 这个变量非常重要,系统会根据这个变量,去寻找可执行的命令。

对某个用户环境变量又分为两种

1、一种是临时的,重启后会消失

如在登录所在的终端输入,export PATH="$PATH:/opt/au1200_rm/build_tools/bin",这个仅仅在所在终端生效

2、一种是永久的

修改profile文件:
 所有用户(不安全,通常管理员去做)
 修 改/etc/profile(对所有用户都是有效的)
#vi /etc/profile
在里面加入:
export PATH="$PATH:/lustre2/teach_pkuhpc/example/linux-shell/PATH"

修改.bashrc文件:
# vi ~/.bashrc
 (单独用户)
 修改~/.bashrc文件
 cd ~
 vi .bashrc
在里面加入:
export PATH="$PATH:/lustre2/teach_pkuhpc/example/linux-shell/PATH"

然后,输入source  ~/.bashrc 。使其在终端生效


那么我们现在开始测试上面两种情况

1、现在/lustre2/teach_pkuhpc/example/linux-shell/PATH里创建可执行文件:

[test_pkuhpc@login12 PATH]$ echo '#!/bin/bash' >test.run     ###这里单引号是不执行命令,只是字符串,>表示创建新文件或者覆盖里面的内容

[test_pkuhpc@login12 PATH]$ echo pwd >>test.run                ###这里>>表示追加

[test_pkuhpc@login12 PATH]$ echo hostname  >>test.run

[test_pkuhpc@login12 PATH]$ echo date  >>test.run

[test_pkuhpc@login12 PATH]$ echo sleep 1  >>test.run

生成的文件

[test_pkuhpc@login12 PATH]$ cat test.run 

#!/bin/bash

pwd

hostname

date

sleep 1

更改权限

[test_pkuhpc@login12 PATH]$ chmod u+x test.run   ##chmod是更改权限的命令,u是用户,g是组,o是其他组;r是读权限,w是写,x是课执行

[test_pkuhpc@login12 PATH]$ ll

total 4

-rwxrw-r-- 1 test_pkuhpc test_pkuhpc 38 Nov 14 23:30 test.run    ##绿色表示可执行

测试程序,需要输入 ./test.run 需要加./因为要告诉系统,在当前路径,否则没有法执行

[test_pkuhpc@login12 PATH]$ ./test.run 

/lustre2/teach_pkuhpc/example/linux-shell/PATH

login12

Thu Nov 14 23:35:35 CST 2019

[test_pkuhpc@login12 PATH]$ test.run

bash: test.run: command not found...

那么如何让系统找到程序呢:

1、临时执行

[test_pkuhpc@login12 PATH]$ export PATH="$PATH:/lustre2/teach_pkuhpc/example/linux-shell/PATH"

[test_pkuhpc@login12 PATH]$ test.run 

/lustre2/teach_pkuhpc/example/linux-shell/PATH

login12

Thu Nov 14 23:39:21 CST 2019

2、永久执行

[test_pkuhpc@login12 PATH]$ source ~/.bashrc ###先source下恢复下PATH环境设置,否则这个终端还会执行上面跑的环境

[test_pkuhpc@login12 PATH]$ vi ~/.bashrc

[test_pkuhpc@login12 PATH]$ cat ~/.bashrc

# User specific aliases and functions

alias rm='rm -i'

alias cp='cp -i'

alias mv='mv -i'

# Source global definitions

if [ -f /etc/bashrc ]; then

. /etc/bashrc

fi

export PATH="$PATH:/lustre2/teach_pkuhpc/example/linux-shell/PATH"

[test_pkuhpc@login12 PATH]$ source  ~/.bashrc

[test_pkuhpc@login12 2019test]$ test.run 

/lustre1/test_pkuhpc/2019test

login12

Thu Nov 14 23:43:16 CST 2019   ###这里我们可以看到,可以在其他文件夹执行和路径没有关系

[test_pkuhpc@login12 2019test]$ 


几个容易出问题的地方:

1、export PATH="/lustre2/teach_pkuhpc/example/linux-shell/PATH"  这个结果是,系统只能找到/lustre2/teach_pkuhpc/example/linux-shell/PATH的路径:

[test_pkuhpc@login12 2019test]$ export PATH="/lustre2/teach_pkuhpc/example/linux-shell/PATH"

[test_pkuhpc@login12 2019test]$ ls

bash: ls: command not found...

Similar command is: 'lz'

怎么恢复?

[test_pkuhpc@login12 2019test]$ export PATH=$PATH:/usr/bin:/bin:

[test_pkuhpc@login12 2019test]$ ls

11571736816_.pic_hd.jpg 

然后:

[test_pkuhpc@login12 PATH]$ vi ~/.bashrc

export PATH="/lustre2/teach_pkuhpc/example/linux-shell/PATH"为export PATH="$PATH:/lustre2/teach_pkuhpc/example/linux-shell/PATH"

[test_pkuhpc@login12 PATH]$ source  ~/.bashrc

就恢复了

2、如何不使用系统默认的命令,可以把PATH放在后面,系统是按照先后顺序找命令的,如执行gcc8

[test_pkuhpc@login12 2019test]$ export PATH=/appsnew/usr/gcc/gcc-8.3.0/bin:$PATH

[test_pkuhpc@login12 2019test]$ which gcc

/appsnew/usr/gcc/gcc-8.3.0/bin/gcc

通常gcc8的动态库也需要先执行的,所以还需要加入:

export LD_LIBRARY_PATH=/appsnew/usr/gcc/gcc-8.3.0/lib64:$LD_LIBRARY_PATH

这个就可以完整执行gcc8

首页
资源&收费
集群
成果
问答