当前位置: 技术问答>linux和unix
关于linux下PATH环境变量的问题???
来源: 互联网 发布时间:2016-03-19
本文导语: 对环境变量PATH有点不理解,比如说,我在当前目录下定义一个执行文件 读和执行权限都有,但是为什么直接用文件名来运行不行,而要用"./文件名"? 在PATH变量中定义的路径下查找后,会在当前路径下查找吗? ...
对环境变量PATH有点不理解,比如说,我在当前目录下定义一个执行文件
读和执行权限都有,但是为什么直接用文件名来运行不行,而要用"./文件名"?
在PATH变量中定义的路径下查找后,会在当前路径下查找吗?
还是怎样的一种查找机制呢??
下面是运行情况,大家帮忙解决一下!
[ming@localhost ming]$ ls -l my_script
-rwxrw-r-- 1 ming ming 30 5月 18 00:22 my_script
[ming@localhost ming]$ cat my_script
echo $TEMPDIR
cd $TEMPDIR
pwd
[ming@localhost ming]$ my_script
-bash: my_script: command not found
[ming@localhost ming]$ ./my_script
/home/ming
读和执行权限都有,但是为什么直接用文件名来运行不行,而要用"./文件名"?
在PATH变量中定义的路径下查找后,会在当前路径下查找吗?
还是怎样的一种查找机制呢??
下面是运行情况,大家帮忙解决一下!
[ming@localhost ming]$ ls -l my_script
-rwxrw-r-- 1 ming ming 30 5月 18 00:22 my_script
[ming@localhost ming]$ cat my_script
echo $TEMPDIR
cd $TEMPDIR
pwd
[ming@localhost ming]$ my_script
-bash: my_script: command not found
[ming@localhost ming]$ ./my_script
/home/ming
|
可执行文件可以直接执行,这种文件应该含有要执行的内容,并且这种文件要在你的查找路径中。查找路径是你事先指定的路径名列表,Linux查找该路径名列表以找到可执行文件。
如果你在PATH中设置了当前路径,那么就不需要加路径.
查找的时候会根据你PATH中设置的路径逐一查找.
如果你在PATH中设置了当前路径,那么就不需要加路径.
查找的时候会根据你PATH中设置的路径逐一查找.
|
inux下,当你使用./xxx运行一个程序时,首先是SHELL来接管你的输入,然后用fork派生子进程,最后用execv系列将你的那个程序的代码交给内核
1。检查你运行的文件的属性,其属性在它的I节点中描述,如果你的那个文件不是可执行的属性,结果就会拒绝执行,如果有可执行的属性,但可执行的权限高于你目前正在使用的用户的权限,拒绝执行
2。检查是SHELL文件吗?如果是,调用相应的SHELL来解析你的这个脚本文件
3。 是ELF文件格式吗??是coff文件格式吗?是a.out文件格式吗?如果是其中任何一种,并且当前的LINUX内核都支持这三种文件格式,那么就由操 作系统内核分析你的文件格式,去掉文件头信息,将真正的代码,数据等加载进内存(实际过程并不是这样的,只不过为了描述简单,所以省略了很多细节,更多详 细说明,请参见内核中的execv系统调用)...
4.等待系统的进程调度,当内核选中你的那个程序的时候,你的那个程序就得到运行了
1。检查你运行的文件的属性,其属性在它的I节点中描述,如果你的那个文件不是可执行的属性,结果就会拒绝执行,如果有可执行的属性,但可执行的权限高于你目前正在使用的用户的权限,拒绝执行
2。检查是SHELL文件吗?如果是,调用相应的SHELL来解析你的这个脚本文件
3。 是ELF文件格式吗??是coff文件格式吗?是a.out文件格式吗?如果是其中任何一种,并且当前的LINUX内核都支持这三种文件格式,那么就由操 作系统内核分析你的文件格式,去掉文件头信息,将真正的代码,数据等加载进内存(实际过程并不是这样的,只不过为了描述简单,所以省略了很多细节,更多详 细说明,请参见内核中的execv系统调用)...
4.等待系统的进程调度,当内核选中你的那个程序的时候,你的那个程序就得到运行了
|
Windows为普通用户考虑得多一些,但是UNIX考虑的是安全性,如果在UNIX的PATH中添加.,有人会在一些地方放一个ls或者pwd之类的脚本,如果root用户运行这些脚本,而不是原来的那些命令,就会执行一些危险的操作,如提升某个用户的权限等。
Windows是单用户系统而且面向个人用户,问题少一点。
|
推荐看Linux程序设计这本书,
里面讲的很详细,
楼主这个问题也讲到了.
./好像是担心在子目录存在同文件名的文件
具体我也不太清楚了
里面讲的很详细,
楼主这个问题也讲到了.
./好像是担心在子目录存在同文件名的文件
具体我也不太清楚了
|
执行可执行文件的时候不会.