Sudo como outro usuário para salvar seu endereço de diretório inicial em um arquivo txt

0

Estou tentando salvar um diretório pessoal de usuários em um arquivo users.txt, mas continuo salvando o meu. O script pede ao usuário que insira seu nome de usuário, que salvei em $ username. Quando eu corro

ls ~ >> users.txt

Mostra ls home/student/am1014 (que é meu nome de usuário)

Eu suponho que preciso usar o sudo para armazená-lo, mas não sei como.

    
por Amber Martin 27.04.2017 / 15:53

2 respostas

4

Em:

sudo -u joe ls ~

~ é expandido pelo seu shell antes de executar o comando (aqui sudo ), portanto, em vigor, é executado:

sudo -u joe ls /home/me

Para listar o conteúdo do diretório inicial de joe :

ls ~joe

Ou se você não tiver acesso de leitura ao diretório inicial dele:

sudo -u joe ls ~joe

Ou para um shell executando como joe para expandir o ~ :

sudo -u joe sh -c 'ls ~'

Observe que, exceto em csh / tcsh / zsh , você não pode usar a abordagem ls ~joe se o nome do usuário estiver em uma variável. Dependendo do shell

user=joe
echo ~$user

produziria /home/mejoe ou ~joe . Em bash , se houvesse um usuário chamado $user (literalmente), isso retornaria seu diretório pessoal.

Aqui você precisaria:

eval "ls ~$user"

(você deve ter certeza de que $user contém um nome de usuário válido com antecedência).

    
por 27.04.2017 / 16:25
0

O comando a seguir irá ler /etc/passwd e produzirá username : home-dir

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

A saída será algo como:

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

Você pode redirecionar a saída para um arquivo usando:

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