Linux有关路径和环境变量的常见问题

绝对路径

总是从根路径开始的路径 /....

家目录~也可以认为是绝对路径

# 举例 我想执行kafka的安装目录下bin目录里面的kafka-server-start.sh
[hadoop@hadoop000 kafka_2.12-2.5.0]$ /home/hadoop/app/kafka_2.12-2.5.0/bin/kafka-server-start.sh
USAGE: /home/hadoop/app/kafka_2.12-2.5.0/bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*

[hadoop@hadoop000 kafka_2.12-2.5.0]$ ~/app/kafka_2.12-2.5.0/bin/kafka-server-start.sh
USAGE: /home/hadoop/app/kafka_2.12-2.5.0/bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*

缺点: 有时候会写很长

优点: 不受当前位置显示, 可以在任何位置使用相同的绝对路径找到相同的文件.


[hadoop@hadoop000 kafka_2.12-2.5.0]$ cd /
[hadoop@hadoop000 /]$ /home/hadoop/app/kafka_2.12-2.5.0/bin/kafka-server-start.sh
USAGE: /home/hadoop/app/kafka_2.12-2.5.0/bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*
[hadoop@hadoop000 /]$

相对路径

基于当前位置:

./或者../开始的路径(其中./可以省略)

. 表示当前目录

.. 表示上级目录


[hadoop@hadoop000 kafka_2.12-2.5.0]$ ls -alh
总用量 64K
drwxr-xr-x   7 hadoop hadoop  101 9月   6 15:51 .
drwxrwxr-x. 16 hadoop hadoop 4.0K 9月   7 08:26 ..

使用相对路径好处是, 当我们当前位置和目标路径近时,可以大大简化路径书写

[hadoop@hadoop000 kafka_2.12-2.5.0]$ ./bin/kafka-server-start.sh
USAGE: ./bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*

[hadoop@hadoop000 kafka_2.12-2.5.0]$ bin/kafka-server-start.sh
USAGE: bin/kafka-server-start.sh [-daemon] server.properties [--override property=value]*

坏处就是: 相对路径是基于当前位置和目标路径的相对位置的, 如果相对位置发生变化则路径会失效.

[hadoop@hadoop000 kafka_2.12-2.5.0]$ cd /
[hadoop@hadoop000 /]$ bin/ka-server-start.sh
-bash: bin/ka-server-start.sh: 没有那个文件或目录

环境变量

在Linux中$PATH变量是由:分割的多个路径, 将PATH通过export到当前执行环境中, 称为环境变量, 下面通过echo命令打印变量PATH的值如下:

[hadoop@hadoop000 /]$ echo $PATH
/home/hadoop/app/apache-maven-3.6.3/bin:/home/hadoop/app/kafka_2.12-2.5.0/bin:/home/hadoop/app/storm-2.1.0/bin:/home/hadoop/app/zookeeper-3.4.11/bin:/home/hadoop/app/hive-1.2.2/bin:/home/hadoop/app/hbase-1.2.4/bin:/home/hadoop/app/hadoop-2.7.3/bin:/home/hadoop/app/hadoop-2.7.3/sbin:/home/hadoop/app/jdk1.8.0_211/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/hadoop/.local/bin:/home/hadoop/bin

命令查找

当你输入一个控制台命令的时候.

  1. 首先从当前目录找
  2. 如果没找到, 就从$PATH里找

因此, 如果$PATH配置错误, 可能导致很多命令无法执行

比如:

vi ~/.bash_profile

# 在Linux里错把冒号打成分号
export PATH=$M2_HOME;$PATH

经过source之后发现很多命令无法使用了,如

[hadoop@hadoop000 /]$ source ~/.bash_profile
[hadoop@hadoop000 /]$ ls /bin
-bash: ls: 未找到命令

解决: 将常用命令的所在目录加入到PATH中, 并使用export导出到当前执行环境中即可:

[hadoop@hadoop000 /]$ export PATH=/bin:/sbin:/usr/bin:/usr/sbin

[hadoop@hadoop000 /]$ ls
bin   data  etc   lib    media  opt   root  sbin  sys  usr
boot  dev   home  lib64  mnt    proc  run   srv   tmp  var

[hadoop@hadoop000 /]$ vi ~/.bash_profile          #修改正确
[hadoop@hadoop000 /]$ source ~/.bash_profile

Views: 144