Я могу проанализировать / etc / passwd с помощью augtool:
myuser=bob usershome=`augtool -L -A --transform "Passwd incl /etc/passwd" print "/files/etc/passwd/$myuser/home" | sed -En 's/\/.* = (.*)/\1/p'`
… но это кажется слишком запутанным.
Есть ли простой, выделенный инструмент для отображения имени пользователя (например, usermod
можно использовать для его изменения )?
Вы никогда не должны разбирать /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
и double, вы фактически расширяете $user
сначала, а затем вызываете eval echo "~phemmer"
.
После того, как у вас есть домашний каталог, /.ssh
по /.ssh
до конца.
$ sshdir="$(eval echo "~$user/.ssh")" $ echo "$sshdir" /home/phemmer/.ssh
вы ищете домашний каталог $ 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 dir.