/home심지어 보편적인 협약도 아니다.

/home심지어 보편적인 협약도 아니다.

일반적으로 (Debian 및 Ubuntu와 같은 배포판에서) 할당되는 디렉터리의 기능을 /home대신 (전체적으로) 다른 디렉터리에 제공할 수 있습니까? 예를 들어, 이 작업을 수행할 수 있고 이를 다음으로 변경한 /xyz경우 모든 새로운 사람 소유 사용자 디렉토리가 아래에 설치됩니다 /xyz(예: Sally의 데스크탑 경로가 /xyz/Sally/Desktop대신에 존재 /home/Sally/Desktop하거나 /home존재할 필요가 없습니다).

저는 경로를 저장하고 로드하는 휴대용 프로그램을 개발 중입니다. 홈 디렉토리가 없는 다른 컴퓨터에서 사용되는 경우 /home(결과적으로 해당 기능이 있는 다른 경로가 없고 /home) 적절한 홈 디렉토리 위치를 갖도록 경로를 조정하고 싶습니다. 대신 경로가 로드되면 새 컴퓨터에 적용됩니다.

답변1

홈 디렉토리를 배치할 필요가 없으며 /home모든 홈 디렉토리가 공통 상위를 공유하거나 해당 상위가 명명된다는 가정을 하드와이어에 연결하면 프로그램에 오류가 발생합니다 /home.

/home심지어 보편적인 협약도 아니다.

/home유닉스가 발명된 후 박람회에서 고안된 아이디어였습니다. 초기 Unices에서는 다른 디렉토리가 사용되었습니다. 이는 /home기호 링크가 있고 사용자 디렉토리가 실제로 아래에 있는 FreeBSD(및 그 파생물)와 같은 운영 체제에서 오늘날에도 여전히 볼 수 있습니다 /usr/home.

Solaris도 마찬가지로 자동 NFS 마운트 등으로 가득 차 있을 수 /export/home있도록 "실제" 홈 디렉토리를 배치합니다 ./home

/home많은 공통 홈 디렉토리의 상위가 아닙니다.

에 거주하지 않는 홈 디렉토리가 많이 있습니다 /home.

  • 가장 확실한 것은 /root슈퍼유저의 홈 디렉토리가 이전 위치에서 이동되어 /루트의 개인 파일과 "점" 파일이 루트 디렉토리를 복잡하게 만들지 않고 슈퍼유저가 로그인할 수 있도록 루트 볼륨에 유지된다는 것입니다. 다른 디스크 볼륨을 마운트하는 데 실패합니다.
  • 다양한 데몬 소프트웨어는 해당 데몬이 실행하는 전용 계정에 대한 홈 디렉토리를 다른 위치에 가지고 있습니다.
    • 큐메일의 다양한 데몬 계정은 /var/qmail예를 들어 또는 를 사용합니다 /var/qmail/alias. 후자는 심지어 일반적으로 다음과 같이 언급됩니다 ~alias.디자인된~alias/.qmail다른 (실제) 사용자의 홈 디렉토리와 같은 파일이 있는 홈 디렉토리입니다 .
    • 다양한 HTTP(S) 및 FTP(들) 서버 소프트웨어에는 (공식 또는 비공식) 규칙이 있습니다. 예를 들어, 전용 시스템 계정이 있는 가상 호스트의 홈 디렉터리는 /var/www또는 일 수 있습니다 /var/www/$VHOST.
    • /var/unbound기타 소프트웨어는 , /var/db/mysql및 와 같은 개인이 아닌 사용자 계정의 홈 디렉토리를 사용하여 다양한 운영 체제에서 찾을 수 있습니다 /var/db/tor.
    • /sbin다양한 기존의 비개인 사용자 계정에는 , /var/adm, /var/spool/lpd, /var/spool/mail, /var/spool/news, /var/spool/uucp등과 같은 홈 디렉터리가 있습니다 .
  • OpenBSD에서 시스템 운영자 계정은 홈 디렉토리를 가지며 /operator다양한 비개인 사용자 계정은 /var/empty홈 디렉토리를 갖습니다.

홈 디렉토리는 에 남아 있을 필요가 없습니다 /home.

Linux 운영 체제에서는 명령 에 -d( --home) 및 -m( --move-home) 옵션을 사용하여 계정 생성 후 홈 디렉터리를 이동할 수 있습니다 .usermod

OpenBSD에도 usermod동일한 옵션이 있습니다. ( pw usermodFreeBSD, TrueOS/PC-BSD 등의 명령 에서는 동일한 작업을 수행하지 마십시오 . -m -d해당 조합의 의미는 미묘하게 다릅니다.)

에서는 홈 디렉토리를 만들 필요가 없습니다 /home.

계정을 만들 때 사용되는 기존 상위 디렉터리도 변경할 수 있지만 반드시 그럴 필요는 없습니다 /home.

Linux 운영 체제 및 OpenBSD에서 useradd명령의 -b( ) 옵션은 ( ) --base-dir로 명시적으로 이름이 지정되지 않은 경우 홈 디렉토리가 생성되는 상위 디렉토리를 지정합니다 . 그만큼-d--home기본기본 디렉토리는 OpenBSD base_dir의 변수 /etc/usermgmt.conf이고 많은 Linux HOME의 변수입니다 . /etc/default/useradd시스템 관리자는 이를 임의로 변경할 수 있습니다.

FreeBSD, TrueOS/PC-BSD 등에서. 명령 -b과 유사한 옵션이 있으며 의 변수를 pw useradd통해 수정할 수 있는 기본값이 있습니다 .home/etc/pw.conf

이에 대처

귀하의 프로그램은 홈 디렉토리나 상위 디렉토리의 위치에 대해 어떤 기대도 하지 말아야 합니다.

  • 현재 로그인한 사용자의 홈 디렉터리를 알고 싶다면 환경 HOME변수를 사용하세요. 등의 프로그램에 의해 설정되거나 , login로그인 된 계정으로 전환될 때 설정됩니다. 환경 변수 가 없으면 프로그램을 실행하려면 로그인 세션 환경 변수가 있어야 하기 때문에 그냥 중단하는 것이 유효한 디자인 선택입니다. 그렇지 않으면 프로세스의 유효/실제(적절한) UID를 얻고 비밀번호 데이터베이스를 쿼리하는 것으로 대체할 수 있습니다.userenvsystemdHOME
  • 특정 사용자의 홈 디렉토리를 알고 싶다면 getpwnam()/ getpwnam_r()또는 getpwuid()/ getpwiud_r()라이브러리 기능을 사용하여 비밀번호 데이터베이스를 쿼리하고 필드를 꺼내십시오 pw_dir. (참고하세요이 필드는 NULL이거나 길이가 0인 문자열을 가리킬 수 있습니다..)
  • 실제 위치와 무관한 방식으로 사용자의 홈 디렉토리를 상징적으로 표시하려면 쉘과 같은 물결표 확장 규칙을 채택할 수 있습니다 ~JdeBP. vim에서 까지 많은 프로그램에서 이 작업을 수행합니다 mailx.

추가 읽기

답변2

사용자 홈 디렉터리 위치를 다른 위치로 변경하려면 이 답변을 참조하세요.

https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user

관련 정보