
Я пытаюсь сохранить домашний каталог пользователя в файл 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
// вы не можете использовать этот подход, если имя пользователя находится в переменной. В зависимости от оболочкиtcsh
zsh
ls ~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