从任何位置遍历根目录或主目录

从任何位置遍历根目录或主目录

param 是我的输入,它被添加到 cat 命令中,所以基本上
eval "cat /a/really/long/path/idk/how/long/$param1"将 param1 更改为其他内容后,我可以访问 home/root 而不必暴力破解../'s,是否有一种语法可以让我直接跳转到 root 或家就这样
cat '/a/really/long/path/idk/how/long' + $param1变成了
cat '/a/really/long/path/idk/how/long/SYNTAX-To-HOME/.bashrc

答案1

如果只能选择文件名的后缀,并且想要显示从根目录开始的路径,那么使用足够数量的后缀../是唯一的方法。无法中途从根目录“重新启动”路径。也没有办法引用文件中的主目录,因此您需要使用类似的东西../../../../../home/username(再次,使用足够的../),假设用户的主目录是/home/username

某些应用程序会对文件名执行额外的扩展,但这并不常见。一种比较常见的扩展交互的~/应用程序是在路径的一开始就扩展的。命令行应用程序甚至不这样做,因为这种扩展是 shell 的工作。

所需的数量../可能是也可能不是您无法控制的前缀中路径组件的数量,因为符号链接会更改有效深度。例如,如果/dir/foo/foo/bar是目录,并且/foo/sym是 的符号链接/dir/foo/bar/..则 是根目录。但如果/sym是 的符号链接/foo/bar,则/sym/../foo,并且您需要/sym/../..返回到根目录。

拥有太多../并没有什么坏处,除非你遇到路径长度的限制。

另一种可能的方法可能是依赖到更高目录的符号链接。但这需要这样一个象征的存在,并且你需要了解它。挂载点(例如mount --bind / /a/really/long/path/root)还可以让您转义目录树。

请注意,到目前为止我的回答讨论了文件名。如果你可以注入一个外壳命令,如 中所示eval "cat /a/really/long/path/idk/how/long/$param1",解析路径的方式是无关紧要的:只需注入 shell 特殊字符,例如设置param1nonexistent || true; cat /the/file/I/want

相关内容