目录
前言
环境变量PATH
问题思考
总结
前言
Linux目录的配置都是依据FHS,FHS的标准文件指出,它们的主要目的是希望让用户可以了解到已安装软件通常放置于哪个目录下。也就是说,FHS的重点在于规范每个特定的目录下应该要放置什么样子的数据而已
经过FHS的说明后,我们可以知道查看文件属性命令ls完整文件名为:/bin/ls(绝对路径)
那为什么我们在任何目录下都可以使用ls这个命令?这是因为环境变量PATH
环境变量PATH
举例使用ls命令
当我们在执行命令时,系统会按照PATH的设置去每个PATH定义的目录下去查找文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查找到的同名命令先被执行
我使用了root与redhat账号来查询PATH变量,我们可以看出PATH变量的内容实际上一堆目录组成,每个目录之间使用冒号(:)来隔开,但无论是root还是redhat都有/bin或/usr/bin这个目录,因此我们才能够无论在哪个目录中都能使用ls命令
问题思考
问题一:假如你是root,你将ls由/bin/ls移动成为/root/ls,并且你在/root目录下(1)您能不能直接输入ls来执行?(2)若不能,该如何执行ls命令?(3)若要直接输入ls即可执行,该如何?
(1)无论在哪个目录下都无法使用ls命令,因为/root这个目录不在PATH指定的目录中,所以我们即使在/root目录下也无法查找到ls这个命令
(2)我们可以使用绝对路径或是相对路径来直接指定这个执行文件。例如/root/ls或./ls
(3)我们可以把/root加入到PATH中来达到我们无论在哪个目录下都可以使用ls命令下。
PATH="${PATH}:/root"
问题二:为什么${PATH}查找的目录不加入本目录(.)?加入本目录的查找不是也不错?
答:在PATH中加入本目录后,我们确实能够在命令所在目录进行命令的执行,但由于我们的工作目录并不固定,因此执行的命令也可能会不同,这对于我们来说并非好事。另外,如果有个别有用心的用户在目录下做了一些窃取数据的命令,可能会导致我们在使用命令时造成数据的泄露
总结
- 不同身份用户默认的PATH不同,默认能够随意执行的命令也不同(如root与redhat)
- PATH是可以修改的
- 使用绝对路径或相对路径直接指定某个命令的文件名来执行,会比查找PATH来的正确
- 本目录(.)最好不要放到PATH