augtool을 사용하여 /etc/passwd를 구문 분석할 수 있습니다.
myuser=bob
usershome=`augtool -L -A --transform "Passwd incl /etc/passwd" print "/files/etc/passwd/$myuser/home" | sed -En 's/\/.* = (.*)/\1/p'`
...하지만 좀 너무 복잡한 것 같습니다.
사용자의 홈페이지를 표시하는 간단한 전용 도구가 있습니까(예 usermod
:변화그것)?
답변1
절대 직접적으로 파싱 하면 안 됩니다 /etc/passwd
. 원격 사용자가 있는 시스템에 있을 수 있으며, 이 경우 /etc/passwd
해당 /etc/passwd
파일은 다른 곳에 있을 수 있습니다. 등.
사용자 데이터베이스에 직접 액세스해야 하는 경우 을 사용하십시오 getent
.
$ getent passwd phemmer
phemmer:*:1000:4:phemmer:/home/phemmer:/bin/zsh
$ getent passwd phemmer | awk -F: '{ print $6 }'
/home/phemmer
그러나 구문 분석을 포함하지 않는 또 다른 방법이 있습니다.
$ user=phemmer
$ eval echo "~$user"
/home/phemmer
~
셸의 운영자는 지정된 사용자의 홈 디렉터리로 확장됩니다. 하지만 eval
변수의 확장은 $user
의 확장 후에 발생하기 때문에 사용해야 합니다 ~
. 따라서 eval
및 큰따옴표를 사용하면 $user
효과적으로 먼저 확장한 다음 호출 할 수 있습니다 eval echo "~phemmer"
.
홈 디렉토리가 있으면 /.ssh
끝에 추가하기만 하면 됩니다.
$ sshdir="$(eval echo "~$user/.ssh")"
$ echo "$sshdir"
/home/phemmer/.ssh
답변2
$myuser의 홈 디렉토리를 찾고 계십니까?
awk -F: -v user=$myuser '$1==user { print $6 ;}' /etc/passwd
당신은 그것을 사용할 수 있습니다
awk -F: -v user=$myuser '$1==user { printf "%s/.ssh\n",$6;}' /etc/passwd
.ssh 디렉터리를 가져옵니다.