是否有到当前用户主目录的标准符号链接?


9

该外壳程序可以扩展~到您的主目录。 $HOME通常具有相同的协议,但通常您希望从可能不支持此类扩展的上下文中引用当前用户的主目录。

我有配置文件在哪里$HOME工作,但~不能,反之亦然。

我想保险丝可以沿着这些思路提供某些东西,例如/var/myself->$HOME

这样我就可以将值放在配置文件中,以指向类似 /var/myself/backdrops/pornography/wtf/yarly.jpg

已经有这样的东西了吗?如果没有,是否有充分的理由不存在这种情况?


2
这实际上似乎是一个非常不错的主意,如果我正确记住界面,保险丝可以
轻松

Answers:


6

我了解您的担心,但答案是“不”,就没有这种事情。
通常的方法是询问操作系统用户的主路径,或获取$ HOME变量。

所有这些选项始终需要应用程序中的一些编码。许多应用程序,例如bash,都提供“别名”〜(open(2)不会翻译该别名)。

当然,可以使用vfs或保险丝模块来执行此操作。可能有要做的事情,我要问这个!

但是真的需要吗?您可以使用类似的解决方法:



0

一种技巧(至少在Linux上是这样)是$HOME在运行应用程序之前将目录更改为,然后/proc/self/cwd/...在配置文件中使用。


我喜欢此功能的强大功能,但是大概在过程更改当前目录时会遇到问题。我想要/ proc / PID / iwd作为初始工作目录。
Lerc 2010年

...并且就此而言,/ proc / PID / home
Lerc

@Lerc,如果要放在配置文件中,则/proc/self不必设置为/proc/PID,因为您无法提前知道PID的含义。
尼尔·梅

@Lerc,是的,如果进程更改目录会失败,但是通常程序在启动时会读取一次配置文件,然后将值缓存在内存中。这完全取决于您正在使用的程序,并且如果该程序在命令行或配置文件语法中没有提供足够的灵活性,那么您将陷入困境。
尼尔·梅

是的,我的意思是/ proc / PID / home,意思是所有proc / PID目录都应该支持这一点,因此包括/ proc / self
Lerc 2010年

0

大多数程序允许您在命令行上指定配置文件的路径。因此,您可以编写一个包含标准配置文件的包装程序,对其进行过滤以替代$HOME当前用户的东西,然后将修改后的临时配置文件传递给程序。


如果这样做,那么您实际上已经可以指定用户以外的配置文件的路径。如果使用包装程序exe集会,可能会可行。
Lerc

0

您可以获取用户的request的pid并询问其主目录的系统。因此有可能。

但是我不确定是否没有将FS视为静态的SUID程序。

编辑:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

上面的代码不是理想的,但是应该可以在常见情况下使用。


在知道用户名后,您将如何找到他的主目录?
WhyNotHugo 2010年

使用getpwuidgetpwuid_r
Maciej Piechotka 2010年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.