tipos - Obtener el nombre de usuario actual de los usuarios en bash?
listar usuarios linux (10)
Cuando se requieren permisos de root (sudo), que generalmente es del 90% o más cuando se usan scripts, los métodos anteriores siempre le dan a root
como la respuesta.
Obtener el usuario "registrado" actual es igual de simple, pero requiere acceder a diferentes variables: $SUDO_UID
y $SUDO_USER
.
Se pueden repetir:
echo $SUDO_UID
echo $SUDO_USER
o asignado, por ejemplo:
myuid=$SUDO_UID
myuname=$SUDO_USER
Estoy escribiendo un programa en bash que necesita obtener el nombre de usuario del usuario.
He oído hablar de una cosa llamada whoami
pero no tengo idea de lo que hace o cómo usarla.
¿Qué comando utilizo para obtener el nombre de usuario actual?
Dos comandos:
id
imprime la identificación de usuario junto con los grupos. Formato:uid=usernumber(username) ...
whoami
da el nombre de usuario actual
En el sistema operativo Solaris, utilicé este comando.
$ who am i # remember to use it with space.
En Linux- Alguien ya respondió esto en comentarios.
$ whoami # without space
En la línea de comando ingrese
echo $USER
o
whoami
Para guardar estos valores en una variable, haga
myvariable=$(whoami)
o
myvariable=$USER
Por supuesto, no necesita hacer una variable ya que para eso es la variable $USER
.
En la mayoría de los sistemas Linux, simplemente escribiendo whoami en la línea de comandos proporciona la ID de usuario.
Sin embargo, en Solaris, es posible que deba determinar el ID de usuario, al determinar el UID del usuario que inició sesión a través del comando a continuación.
echo $UID
Una vez que se conoce el UID, encuentre al usuario haciendo coincidir el UID con el / etc / passwd.
cat /etc/passwd | cut -d":" -f1,3
Obtener la tarea actual user_struct
#define get_current_user() /
({ /
struct user_struct *__u; /
const struct cred *__cred; /
__cred = current_cred(); /
__u = get_uid(__cred->user); /
__u; /
})
Para bash/ksh/sh
etc. Muchas de sus preguntas son respondidas rápidamente por:
man [function]
para obtener la documentación del sistema que está utilizando.
o usualmente más convenientemente: google "man function" Esto puede dar resultados diferentes para algunas cosas donde linux y unix tienen diferencias modestas.
Para esta pregunta, simplemente ingrese "whoami" en su shell.
Para escribirlo:
myvar=$(whoami)
Un truco que he usado en Solaris 9 y Linux y que funciona bien para ambos:
ps -o user= -p $$ | awk ''{print $1}''
Este fragmento imprime el nombre del usuario con EUID actual.
NOTA: Necesitas a bash como intérprete aquí.
En Solaris tiene problemas con los métodos descritos anteriormente:
-
id
no acepta los parámetros-u
y-n
(por lo que tendrá que analizar la salida) -
whoami
no existe (por defecto) -
who am I
imprime propietario de la terminal actual (ignora EUID) -
$USER
variable$USER
se establece correctamente solo después de leer los archivos de perfil (por ejemplo,/etc/profile
)
Utilice el comando logname
estándar de Unix / Linux / BSD / MacOS para recuperar el usuario que ha iniciado sesión. Esto ignora el entorno y el sudo, ya que estos son reporteros poco confiables. Siempre imprimirá el nombre de usuario registrado y luego saldrá. Este comando ha existido desde alrededor de 1981.
My-Mac:~ devin$ logname
devin
My-Mac:~ devin$ sudo logname
Password:
devin
My-Mac:~ devin$ sudo su -
My-Mac:~ root# logname
devin
My-Mac:~ root# echo $USER
root
alternativa a whoami
es id -u -n
.
id -u
devolverá el ID de usuario (por ejemplo, 0 para la raíz).