路径是否从根开始,是关键区别
在 Linux/POSIX 中,/var/log/app.log 是绝对路径,从文件系统根目录解析;logs/app.log 是相对路径,取决于进程当前工作目录。. 表示当前目录,.. 表示上级,~ 则由 shell 展开为用户主目录,不等于内核的路径语法。
pwd
realpath ./logs/../config/app.ini
cd /var/log
ls -l ./syslog
为什么脚本中相对路径会失效
交互式终端、systemd 服务、Cron 和容器的工作目录可能不同。需要稳定定位配置文件时,优先明确路径基准,或者由程序根据脚本/可执行文件所在目录生成绝对路径,而非假设启动目录永不改变。
符号链接与安全边界
realpath 会解析路径组件,路径中的符号链接可能把访问引向预期之外的目录。接受用户上传路径时不要仅靠字符串剔除 ../ 防穿越;应在受限目录中执行实际规范化与授权检查。Windows 的盘符和 UNC 路径规则与 POSIX 不同,不能直接照搬 Linux 判定。
用同一棵目录树理解两种路径
/srv/app/
├── config/
│ └── prod.yaml
└── scripts/
└── deploy.sh
当当前目录为 /srv/app 时,./config/prod.yaml 和 /srv/app/config/prod.yaml 指向同一个文件;如果从 /srv/app/scripts 运行脚本,则访问配置应是 ../config/prod.yaml。服务进程由 systemd、cron 或容器启动时,工作目录可能与交互式 shell 不同。
可用 pwd 核对当前工作目录,脚本内部使用固定配置根路径或明确初始化 WorkingDirectory=。realpath 能帮助查清符号链接最终路径,但在处理用户输入的相对路径时仍要限制允许访问的根目录,防止 ../ 越界。

相关教程与进一步检查
若需要继续处理实际环境中的关联问题,可阅读unzip 安全解压;Vim 行号设置可帮助补充不同的选型或验收视角。两者属于独立问题,按当前环境自行核对适用版本。
处理脚本与目录操作时,另见 Linux tree 目录查看。


交流与讨论1 条评论
评论已关闭。