это не работало в ubuntu (15.04 и 14.04). он работал на Fedora. и на Fedora. нужен ли вам --make-private или нет, вы также можете проверить
cat / proc / self / mountinfo | grep shared
если общий, это означает, что какое-то другое пространство имен все еще может видеть, что монтируется. Тогда это проблема, связанная с systemd. Вы можете использовать --make-private, чтобы заставить его работать
read -p "Enter a username: " username
if getent passwd "$username" > /dev/null
then
printf "Their home directory is: %s\n" "$(getent passwd "$username" | cut -d: -f6)"
else
printf "User not found!\n" >&2
fi
getent passwd <USERNAME>
— хороший способ чтения пользовательской базы данных. Он печатает запись из пользовательской базы данных для данного пользователя, если пользователь существует, или завершает работу не -нулем, если пользователь не существует.
Таким образом, мы можем просмотреть вывод, если он вышел из нуля, и напечатать сообщение об ошибке, если он вышел не из -нуля.
Домашний каталог — это 6-е поле записи пароля. Его можно извлечь с помощью стандартных инструментов обработки текста, например. awk
или cut
.
if passwd="$(getent passwd "$user")"; then
awk -F: '{print $6}' <<<"$passwd"
else
echo "No such user $user" >&2
fi
#!/bin/sh
username=$1
if ! getent passwd "$username" >/dev/null 2>&1; then
printf 'User %s does not exist\n' "$username"
exit 1
fi
homedir=$( getent passwd "$username" | cut -d: -f6 )
if [ -n "$homedir" ]; then
if [ -d "$homedir" ]; then
printf 'User %s has a valid (existing) home directory: %s\n' "$username" "$homedir"
else
printf 'User %s lacks a valid (existing) home directory: %s\n' "$username" "$homedir"
fi
else
printf 'User %s has no home directory\n' "$username"
fi
Скрипт берет имя пользователя из командной строки:
$./script.sh kk
User kk has a valid (existing) home directory: /home/kk
$./script.sh nobody
User nobody lacks a valid (existing) home directory: /nonexistent
$./script.sh aoae
User aoae does not exist