/home보편적인 협약도 아닙니다.

/home보편적인 협약도 아닙니다.

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

경로를 저장하고 로드하는 휴대용 프로그램을 개발 중입니다. 홈 디렉토리가 없는 다른 시스템에서 사용되는 경우 /home(따라서 해당 기능이 있는 다른 경로는 없지만 /home) 경로가 로드될 때 올바른 홈 디렉토리 위치를 갖도록 경로를 조정하고 싶습니다. 그것은 새로운 컴퓨터에서 작동합니다.

답변1

홈 디렉토리를 배치할 필요가 없으며 /home프로그램이 그러한 가정(예: 모든 홈 디렉토리가 공통 상위 디렉토리를 공유하거나 상위 디렉토리의 이름이 지정됨)을 하드와이어한다면 프로그램은 잘못된 것입니다 /home.

/home보편적인 협약도 아닙니다.

/home이 아이디어는 유닉스가 발명되고 얼마 후에 나왔습니다. 이전 Unices에서는 다른 디렉터리가 사용되었습니다. 이는 오늘날에도 FreeBSD(및 그 파생 버전)와 같은 운영 체제에서 볼 수 있으며, 여기서 /home심볼릭 링크와 사용자 디렉터리는 실제로 /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기본base_dir기본 디렉토리는 OpenBSD 및 많은 Linux 시스템의 변수입니다 . 시스템 관리자는 이 설정을 마음대로 변경할 수 있습니다./etc/usermgmt.confHOME/etc/default/useradd

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

이것을 처리하다

귀하의 프로그램은 홈 디렉토리나 상위 디렉토리의 위치에 대해 어떠한 기대도 가져서는 안 됩니다.

  • 현재 로그인한 사용자의 홈 디렉터리를 알고 싶다면 HOME환경 변수를 사용하세요. , 등의 프로그램에 의해 설정 login되거나 로그인 계정을 전환할 userenv때 설정됩니다 . 프로그램을 실행하려면 로그인 세션 환경 변수가 있어야 하므로 환경 변수가 systemd없으면 중단하는 것이 유효한 디자인 선택입니다. HOME그렇지 않으면 프로세스의 유효/실제(적절한) UID를 가져오고 비밀번호 데이터베이스를 쿼리하는 데 의존할 수 있습니다.
  • 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

관련 정보