현재 사용자의 홈 디렉토리에 대한 표준 심볼릭 링크가 있습니까?

현재 사용자의 홈 디렉토리에 대한 표준 심볼릭 링크가 있습니까?

쉘은 ~홈 디렉토리로 확장될 수 있습니다. $HOME일반적으로 동일한 처리가 있지만 이러한 확장을 지원하지 않을 수 있는 컨텍스트에서 현재 사용자의 홈 디렉터리를 참조하려는 경우가 많습니다.

내 프로필은 $HOME작동하지만 ~작동하지 않으며 그 반대도 마찬가지입니다.

퓨즈가 다음과 같은 것을 제공할 수 있을 것 같아요 /var/myself->$HOME

이렇게 하면 구성 파일에 값을 넣어 다음과 같은 항목을 가리킬 수 있습니다./var/myself/backdrops/pornography/wtf/yarly.jpg

벌써 그런 일이 있나요? 그렇지 않다면 이런 일이 일어나서는 안되는 타당한 이유가 있습니까?

답변1

귀하의 우려를 이해하지만 대답은 "아니오"입니다. 그런 것은 없습니다.
일반적인 접근 방식은 운영 체제에 사용자의 홈 경로를 요청하거나 $HOME 변수를 얻는 것입니다.

이러한 모든 옵션에는 항상 애플리케이션의 일부 코딩이 필요합니다. Bash와 같은 많은 응용 프로그램은 "별칭"을 제공합니다 ~ (open(2)에서는 이를 번역하지 않습니다).

물론 이 목적으로 vfs나 퓨즈 모듈을 사용할 수 있습니다. 할 일이 있을 수도 있으니 물어봐야겠어요!

하지만 정말 필요한가요? 다음 해결 방법을 사용할 수 있습니다.

답변2

한 가지 비결(적어도 Linux에서는)은 $HOME애플리케이션을 실행하기 전에 디렉토리를 변경한 다음 /proc/self/cwd/...구성 파일에서 사용하는 것입니다.

답변3

대부분의 프로그램에서는 명령줄에서 구성 파일의 경로를 지정할 수 있습니다. 따라서 표준 구성 파일을 사용하고 이를 필터링하여 $HOME현재 사용자와 같은 항목을 대체한 다음 수정된 임시 구성 파일을 프로그램에 전달하는 래퍼를 작성할 수 있습니다 .

답변4

요청하는 사용자의 pid를 얻고 시스템에 홈 디렉토리를 요청할 수 있습니다. 그래서 가능합니다.

그러나 SUID가 없는 프로그램이 FS를 정적이라고 가정하는지 확실하지 않습니다.

편집하다:

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
} 

위의 코드는 이상적이지는 않지만 일반적인 상황에서는 작동합니다.

관련 정보