물결표 ( '~', 홈 디렉토리)를 재정의 할 수 있습니까?


13

홈 디렉토리를 재정의 할 수 있습니까? 들어 , /ext1/username대신 사용자의 홈 파일이있는 실제 홈 디렉토리를 변경하는 것과 달리 다른 디렉토리로 /home/username확장합니다 ~.

(이 질문은 나쁜 연습처럼 보이기 때문에 대부분 학문적입니다. 또한 cshTop 10을 읽었음에도 불구하고 사용에 대한 선택은 없습니다 .)


11
실제 홈 디렉토리를 변경 하시겠습니까 , 아니면 실제 홈 디렉토리 ~가 아닌 다른 쉘로 셸을 확장 하시겠습니까?
derobert

나는 ~다른 디렉토리로 확장하는 것을 의미 했다 (다른 대안을 올바르게 이해하면 모든 사용자의 홈 디렉토리가있는 곳을 변경하지 않음). @michas가 그의 답변에 설명 된 것처럼 ~짧은 형식으로 해석 된 것을 알지 못했습니다 $HOME.
Andrew Cheong

2
아니 모든 사용자의 홈 디렉토리, 당신은 그의 대답에서 SLM 쇼로, 하나를 변경할 수 있습니다.
derobert

답변:


28

물결표 ~는 쉘에서 해석됩니다. 쉘은 ~짧은 형식으로 해석 됩니다 $HOME.

시도하십시오 (echo ~; HOME=foo; echo ~). 먼저 설정 한대로 실제 홈 디렉토리를 인쇄 한 후 "foo"를 인쇄해야 $HOME합니다.

기본값 $HOME은 시스템 구성에서 제공됩니다. getent passwd알려진 모든 사용자 및 홈 디렉토리를 나열하는 데 사용하십시오 . 시스템 구성에 따라 이러한 항목은 /etc/passwd원격 디렉토리 서비스 에서 비롯된 것일 수 있습니다 .

홈 디렉토리를 임시로만 재정의하려면 다른 디렉토리를 설정하십시오 $HOME.

영구적으로 변경하려면 수동 편집 등을 통해 비밀번호 항목을 변경해야합니다 /etc/passwd.


감사합니다, @michas. 내가 그 변수를 놓쳤다는 것을 믿을 수 없다. (BTW, csh관련 변수의 결과는 $home소문자이며, 당신은 할 수 없습니다 setenv HOME /ext1/acheong-당신 만 할 수 set home=/ext1/acheong있고 그것은 나를 위해 일했습니다.)
Andrew Cheong

2
영구적으로 변경하려면 다음을 사용할 수도 있습니다.usermod -d
user606723

1
직접 vipw편집하지 말고 OS에서 제공하는 GUI를 사용하십시오 /etc/passwd. 직접 편집하면 파일이 손상되어 복구하기 어려울 수 있습니다.
Keith Thompson

11

사용되는 값은 여기에 정의 된 각 사용자의 홈 디렉토리에 대한 ~관리 데이터베이스 ( getent passwd) (일반적으로 /etc/passwd파일 ) 에서 얻는 값에서 결정됩니다 .

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

이 파일의 6 번째 열은 누군가 입력 할 때 사용되는 값 cd ~입니다.

nsswitch

다음 명령을 사용하여 시스템이 사용자의 홈 디렉토리에 사용하는 것을 볼 수 있습니다 getent passwd.

$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash

이를 제공하는 "데이터베이스"는에 정의 된 시스템 확인자를 통해 제어됩니다 /etc/nsswitch.conf.

$ grep passwd /etc/nsswitch.conf 
#passwd:    db files nisplus nis
passwd:     files

위의 파일은을 의미 /etc/passwd하지만 "데이터베이스"는 예를 들어 LDAP, NIS 또는 네트워크의 다른 위치에서 올 수 있습니다.

이동 / 정의?

계정을 만든 후이 작업을 수행하는 것은 약간 까다 롭습니다. 처음부터 계정을 작성하는 경우 사용자의 홈 디렉토리 위치를 재정의하는 것은 쉽지 않습니다. useradd명령을 실행할 때 사용자의 홈 디렉토리에 사용될 위치를 지정할 수 있습니다.

$ useradd -d /ext1/acheong ...

매뉴얼 페이지에서 발췌

-d, --home HOME_DIR
   The new user will be created using HOME_DIR as the value for the users 
   login directory. The default is to append the LOGIN name to BASE_DIR and 
   use that as the login directory name. The directory HOME_DIR does not 
   have to exist but will not be created if it is missing.

기존 계정의 경우

종종 사용자 홈 디렉토리의 경로가 구성 파일에 정적으로 포함되어 더 까다로워지기 때문에 이것은 외과 수술의 일이되었습니다.

$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"

이 문제는 해결되거나 /home/sam새로운 위치 로 연결되는 링크를 제공해야합니다 /ext1/sam.

"데이터베이스"가 아닌 경우 이동 /etc/passwd

시스템이 LDAP, NIS 등에서 홈 디렉토리를 가져 오는 경우 해당 시스템에서 재배치를 수행하고 파일을에서 /home/sam로 이동하는 작업을 조정 해야 /ext1/sam합니다.

참고 문헌


물론이를 변경하려면 사용자 파일을 이동해야합니다. 그리고 아마도 오래된 장소에 심볼릭 링크를 남길 것입니다 (그렇지 않으면 많은 것들이 깨질 것입니다 ...)
derobert

@derobert-네, 이것을 몇 번했는데 전염병처럼 피하려고합니다.
slm

@slm-자세한 답변과 역사에 감사드립니다. 더 간단한 작업을 수행 할까봐 두렵습니다. 세션의 홈 디렉토리를 나타내는 환경 변수가 있는지 무지했습니다. 그러나 앞으로 귀하의 답변이 다른 독자에게 도움이 될 것입니다. 다시 감사합니다.
Andrew Cheong

1

그 이유가 여러 파일 시스템에 사용자를 분산시키는 것이라면를 사용할 수도 있습니다 automounter. 또한 사용자를 위해 다른 "기본"디렉토리를 가질 수도 있습니다.

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