현재 사용자 홈 디렉토리에 대한 표준 기호 링크가 있습니까?


9

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

$HOME작동하는 구성 파일이 있지만 ~그 반대의 경우도 마찬가지입니다.

나는 퓨즈 같은이 라인을 따라 뭔가, 뭔가를 제공 할 수 있다고 생각 것 /var/myself->$HOME

이를 통해 구성 파일에 값을 배치하여 다음과 같은 것을 가리킬 수 있습니다. /var/myself/backdrops/pornography/wtf/yarly.jpg

이미 이와 같은 것이 있습니까? 그렇지 않다면, 이와 같은 것이 존재하지 않는 좋은 이유가 있습니까?


2
이것은 실제로 정말 좋은 생각처럼 보이고, 인터페이스를 올바르게 기억한다면 퓨즈가이 작업을 아주 간단하게 수행 할 수 있습니다.
Michael Mrozek

답변:


6

귀하의 우려를 이해하지만 답변은 "아니오"입니다.
일반적인 방법은 OS에 사용자의 홈 경로를 요청하거나 $ HOME 변수를 얻는 것입니다.

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

물론이를 위해 vfs 또는 퓨즈 모듈을 구현할 수 있습니다. 아마 그렇게 할 것이 있습니다, 나는 그것을 요청할 것입니다!

그러나 정말로 필요합니까? 다음과 같은 해결 방법을 사용할 수 있습니다.


나는 vfs 도구를 요청한다 : unix.stackexchange.com/questions/1811/…
Keymon

0

하나의 트릭 (적어도 Linux에서는)은 $HOME응용 프로그램을 실행 하기 전에 디렉토리를 변경 한 다음 /proc/self/cwd/...구성 파일에서 사용 하는 것입니다.


나는 이것의 해킹을 좋아하지만 아마도 프로세스가 현재 디렉토리를 변경하는 문제가 발생할 수 있습니다. 초기 작업 디렉토리를 위해 / proc / PID / iwd를 원합니다.
Lerc September

... 그리고 그 문제에 대해서는 / proc / PID / home
Lerc

이 설정 파일에 무슨 일 경우 @Lerc, 그것은 할 필요가 /proc/self없습니다 /proc/PID당신이 PID가 될 것입니다 무엇인지 미리 알 수 없기 때문에.
Neil Mayhew

@Lerc, 예. 프로세스가 디렉토리를 변경하면 실패하지만 일반적으로 프로그램은 시작할 때 구성 파일을 한 번 읽은 다음 메모리에 값을 캐시합니다. 그것은 모두 작업중 인 프로그램에 달려 있으며 프로그램이 명령 줄이나 구성 파일 구문에서 충분한 유연성을 제공하지 않으면 멈추는 것입니다.
Neil Mayhew

예, / proc / PID / home은 모든 proc / PID 디렉토리가이를 지원하고 따라서 / proc / self를 포함해야 함을 의미했습니다
Lerc

0

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


그렇게하면 효과적으로 사용자로부터 구성 파일의 경로를 지정하는 기능을 효과적으로 사용할 수 있습니다. 래퍼 exe로 집회를 꾸미면 가능할 수 있습니다.
Lerc

0

requestin 사용자의 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

getpwuid또는 사용 getpwuid_r.
Maciej Piechotka
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.