Sudo como otro usuario para guardar la dirección de su directorio personal en un archivo txt

Sudo como otro usuario para guardar la dirección de su directorio personal en un archivo txt

Estoy intentando guardar el directorio de inicio de un usuario en un archivo users.txt, pero sigo guardando el mío. El script le pide al usuario que ingrese su nombre de usuario, que guardé en $username. cuando corro

ls ~ >> users.txt

Muestra ls home/student/am1014(cuál es mi nombre de usuario)

Supongo que necesito usar sudo para almacenarlo pero no estoy seguro de cómo.

Respuesta1

En:

sudo -u joe ls ~

~su shell lo expande antes de ejecutar el comando (aquí sudo), por lo que, en efecto, se ejecuta:

sudo -u joe ls /home/me

Para enumerar el contenido del joedirectorio de inicio de:

ls ~joe

O si no tiene acceso de lectura a su directorio de inicio:

sudo -u joe ls ~joe

O para un shell en ejecucióncomojoepara ampliar el ~:

sudo -u joe sh -c 'ls ~'

Tenga en cuenta que, excepto en csh// tcsh, zshno puede utilizar este ls ~joeenfoque si el nombre del usuario está en una variable. Dependiendo del caparazón

user=joe
echo ~$user

daría salida /home/mejoeo ~joe. En bash, si se llamaba a un usuario $user(literalmente), eso devolvería su directorio de inicio.

Aquí necesitarías:

eval "ls ~$user"

(debe asegurarse de que $usercontenga un nombre de usuario válido de antemano).

Respuesta2

El siguiente comando leerá /etc/passwdy generaráusername : home-dir

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

La salida será algo como:

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

Puede redirigir la salida a un archivo usando:

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

información relacionada