Programing

bash에서 현재 사용자의 사용자 이름을 얻습니까?

lottogame 2020. 3. 26. 08:19
반응형

bash에서 현재 사용자의 사용자 이름을 얻습니까?


사용자의 사용자 이름을 가져와야하는 프로그램을 bash로 작성 중입니다.

나는 무엇인가에 대해 들었지만 whoami그것이 무엇을 어떻게 사용하는지 전혀 모른다.

현재 사용자 이름을 얻기 위해 어떤 명령을 사용합니까?


명령 행에 다음을 입력하십시오.

echo "$USER"

또는

whoami

이 값을 변수에 저장하려면

myvariable=$(whoami)

또는

myvariable=$USER

물론 $USER변수가 목적 이기 때문에 변수를 만들 필요가 없습니다 .


의 대안은 whoami입니다 id -u -n.

id -u 사용자 ID를 반환합니다 (예 : 루트의 경우 0).


내가 솔라리스 9와 리눅스에서 사용한 해킹으로 둘 다 잘 작동합니다.

ps -o user= -p $$ | awk '{print $1}'

이 스 니펫은 현재 EUID를 가진 사용자 이름을 인쇄합니다.

참고 : 여기서 통역자로 bash가 필요합니다.

Solaris에서는 위에서 설명한 방법에 문제가 있습니다.

  • id-u-n매개 변수를 허용하지 않으므로 출력을 구문 분석해야합니다.
  • whoami 존재하지 않습니다 (기본적으로)
  • who am I 현재 터미널의 소유자를 인쇄합니다 (EUID 무시)
  • $USER변수 (예 : 전용 프로파일 파일을 읽은 후 올바르게 설정 /etc/profile)

표준 Unix / Linux / BSD / MacOS 명령 logname을 사용하여 로그인 한 사용자를 검색하십시오. 신뢰할 수없는 기자이기 때문에 이것은 sudo뿐만 아니라 환경을 무시합니다. 항상 로그인 한 사용자 이름을 인쇄 한 다음 종료합니다. 이 명령은 약 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

두 가지 명령 :

  1. id그룹과 함께 사용자 ID를 인쇄합니다. 체재:uid=usernumber(username) ...

  2. whoami 현재 사용자 이름을 제공합니다


스크립트를 사용할 때 일반적으로 90 % 이상인 루트 (스도) 권한이 필요한 경우 위의 방법으로 항상 root답을 얻을 수 있습니다 .

현재 "로그인 된"사용자를 얻는 것은 간단하지만 다른 변수에 액세스해야합니다 : $SUDO_UID$SUDO_USER.

그들은 반향 될 수 있습니다 :

echo $SUDO_UID
echo $SUDO_USER

또는 할당, 예 :

myuid=$SUDO_UID
myuname=$SUDO_USER

다음과 bash/ksh/sh같은 방법으로 많은 질문에 빠르게 답변 할 수 있습니다.

man [function]

사용중인 시스템에 대한 설명서를 얻을 수 있습니다.

또는 일반적으로 더 편리합니다 : google "man function"리눅스와 유닉스가 약간의 차이가있는 경우에는 다른 결과가 나올 수 있습니다.

이 질문에 대해서는 쉘에 "whoami"를 입력하십시오.

스크립트를 작성하려면 :

myvar=$(whoami)


Solaris OS-에서이 명령을 사용했습니다.

$ who am i     # remember to use it with space.

Linux에서-누군가가 이미 의견에 답변했습니다.

$ whoami       # without space

대부분의 Linux 시스템에서 명령 행에 whoami를 입력하면 사용자 ID가 제공됩니다.

그러나 Solaris에서는 아래 명령을 통해 로그인 한 사용자의 UID를 판별하여 사용자 ID를 판별해야합니다.

echo $UID

UID를 알고 나면 UID를 / etc / passwd와 일치시켜 사용자를 찾으십시오.

cat /etc/passwd | cut -d":" -f1,3

현재 사용자의 사용자 이름은 ${parameter@operator}Bash 4.4에서 소개 된 매개 변수 확장을 사용하여 순수한 Bash에서 얻을 수 있습니다 .

$ : \\u
$ printf '%s\n' "${_@P}"

저장된 마지막 인수를 설정하여 임시 변수 대신 :기본 제공 (의 동의어 true)이 사용됩니다 $_. 그런 다음 연산자를 \u사용하여 프롬프트 문자열 인 것처럼 확장합니다 ( ) P.

이것은 일반적인 환경 변수 $USER처럼을 사용하는 것보다 낫습니다 $USER. 의도적으로 변경되지 않았어도 여전히 잘못된 경우는 로그인 쉘을 시작하지 않고 사용자를 전환 할 때입니다 ( su기본값).


현재 작업의 user_struct를 가져옵니다

#define get_current_user()              \
({                                      \
    struct user_struct *__u;            \
    const struct cred *__cred;          \
    __cred = current_cred();            \
    __u = get_uid(__cred->user);        \
    __u;                                \
})

참고 URL : https://stackoverflow.com/questions/19306771/get-current-users-username-in-bash

반응형