Sudo от имени другого пользователя, чтобы сохранить адрес его домашнего каталога в текстовом файле

Sudo от имени другого пользователя, чтобы сохранить адрес его домашнего каталога в текстовом файле

Я пытаюсь сохранить домашний каталог пользователя в файл users.txt, но я просто продолжаю сохранять свой собственный. Скрипт просит пользователя ввести его имя пользователя, которое я сохранил в $username. Когда я запускаю

ls ~ >> users.txt

Он показывает ls home/student/am1014(это мое имя пользователя)

Я предполагаю, что мне нужно использовать sudo для его сохранения, но я не уверен, как это сделать.

решение1

В:

sudo -u joe ls ~

~раскрывается вашей оболочкой перед запуском команды (здесь sudo), поэтому по сути это выполняется:

sudo -u joe ls /home/me

Чтобы вывести список содержимого joeдомашнего каталога:

ls ~joe

Или, если у вас нет прав на чтение его домашнего каталога:

sudo -u joe ls ~joe

Или для оболочки, работающейкакjoeдля расширения ~:

sudo -u joe sh -c 'ls ~'

Обратите внимание , что за исключением csh// вы не можете использовать этот подход, если имя пользователя находится в переменной. В зависимости от оболочкиtcshzshls ~joe

user=joe
echo ~$user

выведет либо , /home/mejoeлибо ~joe. В bash, если бы был вызван пользователь $user(буквально), это вернуло бы его домашний каталог.

Здесь вам понадобится:

eval "ls ~$user"

(Вы бы заранее убедились, что $userсодержит действительное имя пользователя).

решение2

Следующая команда прочитает /etc/passwdи выведетusername : home-dir

awk -F: '{print $1":" $6}' /etc/passwd

Вывод будет примерно таким:

root:/root
daemon:/usr/sbin
bin:/bin
sys:/dev
sync:/bin
games:/usr/games

Вы можете перенаправить вывод в файл, используя:

awk -F: '{print $1":" $6}' /etc/passwd > result.txt

Связанный контент