Linux 命令执行中为什么已经切换到当前目录了,还需要写”./”,而 windows不需要
来源:网络
点击数: 次
发布时间:2026年09月04日
在Linux中,执行当前目录的程序必须写 ./,核心原因是为了安全。
具体来说,是PATH环境变量的搜索机制导致了这种设计。
1. PATH环境变量:命令的“搜索名单”
当你输入一个命令(如 ls),Shell会按照 PATH 变量中定义的目录顺序,去这些目录里寻找同名可执行文件。PATH里通常包含 /bin、/usr/bin 等系统目录,但故意不包含当前目录(.)。
2. 如果PATH包含当前目录会怎样?
会很危险。假设你 cd /tmp 后,不小心下载了一个名为 ls 的恶意脚本。你本想用系统的 ls 看文件,但输入 ls 后,因为 . 在PATH中,Shell可能优先执行了当前目录的恶意脚本。同理,黑客也可能让你在 /tmp 运行 sudo cat,结果无意中运行了恶意程序。
3. 为什么./能解决问题?
./ 是一个明确的路径(相对路径)。只要你提供了任何路径信息,Shell就不会再去PATH里搜索,而是直接执行你指定的程序。
只用 ls:Shell在PATH中搜索。
用 ./ls:Shell直接执行“当前目录下名叫ls的文件”。
4. 总结:安全 vs 便利
· 安全是第一位:Linux将“执行当前目录程序”与“执行系统命令”清晰区分。写 ./ 意味着你清楚知道在运行什么,这可以有效防止恶意程序“隐藏”在常用目录里冒充系统命令。
· 避免歧义:如果允许 a 指代系统命令 a 或当前目录的 a,会造成混乱。
Windows为何不同?
Windows的CMD默认会把当前目录(.)也加入搜索路径。这虽然方便,但也更容易在执行命令时意外运行当前目录下的恶意同名程序。这也体现了两种设计哲学:Linux更注重安全和控制,Windows在早期更注重便利性。
