【问题标题】:how to get absolute path from relative path in command line如何从命令行中的相对路径获取绝对路径
【发布时间】:2018-03-12 00:24:51
【问题描述】:

我运行这个命令“httpd -d ./inst2 -k start”来启动Apache Server,我可以通过“ps -ef | grep httpd”看到这个命令行。我的问题是,如果我不知道绝对路径,有没有办法获得“./inst2”的绝对路径?

谢谢

【问题讨论】:

标签: linux path relative-path absolute-path


【解决方案1】:

您可以通过检查伪符号链接/proc/PID/cwd 尝试GUESS绝对路径,其中PID 可以从ps 输出中确定:ls -l /proc/PID/cwd。但请注意,它只是当前工作目录,您的路径可能会针对任何其他目录解析,所以这只是猜测

另一种选择,如果你的程序使用这个相对路径打开一些文件,实际上你需要确定这些文件的完整路径,你可以使用/proc/PID/fd伪目录:ls -l /proc/PID/fd枚举一些进程当前打开的文件。但是,当然,文件可能在执行ls 时已经关闭。而且我不知道如果打开的文件被移动到其他地方会显示什么。

【讨论】:

  • 谢谢,我试过了,但它只是显示“/”,然而,这与相对路径“./inst2”无关
  • 我做了一些研究,我认为 /proc/pid/environ 可以做到这一点,您可以在该文件中找到“PWD=xxx”部分
  • @sudo AFAIK /proc/pid/environ 列出进程的环境变量。我担心,PWD 这里只是在进程启动时由bash 或其他 shell 设置的一些变量。但是,至少,这是另一种猜测方式。
  • 你能给句子“但请注意,它只是当前的工作目录,你的路径可能会针对任何其他目录解析,所以这只是一个猜测”。在这种情况下,它可以是其他一些不相关的目录?
  • 参见我在 /proc/pid/environ 中提到的 PWD 可用于定位“./inst2”的绝对路径,因为它是在执行该 cmdline 时编写的。所以我认为它是可靠的
【解决方案2】:

要获取文件/目录的绝对路径,即使您可以在 linux 上执行以下命令。

  1. find $HOME -type f -name "inst2"(用于文件)
  2. find $HOME -type d -name "inst2"(用于目录)

这可以为您提供任何文件或目录的绝对路径。 如果文件不在您的家中,请在命令前使用 sudo 并将 $HOME 替换为 /

【讨论】:

  • 您好,谢谢您,但是,这不是一个有效且可靠的解决方案
  • 我做了一些研究,我认为 /proc/pid/environ 可以做到这一点,您可以在该文件中找到“PWD=xxx”部分
猜你喜欢
  • 2010-09-21
  • 1970-01-01
  • 2022-06-10
  • 2011-02-07
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多