답변:
에서 환경 변수 ,
$LOGNAME$USER어느 것과 동일하다
현재 로그인 한 사용자의 이름입니다. 이 변수는 시스템에 의해 설정됩니다. 값을 수동으로 변경해서는 안됩니다.
에서 man logname
logname-사용자의 로그인 이름을 인쇄하십시오
다음 예제 에서는 다르게 사용 되었습니다.
pandya@pandya-desktop:~$ sudo su
root@pandya-desktop:/home/pandya# echo $LOGNAME
root
root@pandya-desktop:/home/pandya# logname
pandya
root@pandya-desktop:/home/pandya# exit
exit
pandya@pandya-desktop:~$
터미널에서 루트로 로그인 한 후 차이점을 볼 수 있습니다.
$LOGNAME현재의 이름 부여 로그인 한 사용자 단말기 (예를 root)logname인쇄 user's 로그인 이름 세션에서 로그인 (예 pandya)유틸리티 로그 이름은 16.04에서 깨졌습니다. 반환 된 값을 해킹 할 수 있기 때문에 보안 상 결함이있을 수 있습니다. https://bugzilla.gnome.org/show_bug.cgi?id=747046 일부 스크립트에서 logname을 사용하고 있었는데,에서 호출했는지 여부에 관계없이 항상 동일한 값 (내 로그인 이름)을 반환했기 때문에 유용하다는 것을 알았습니다. 환경 변수 $ USER 및 $ LOGNAME은 내 자신의 수준 또는 sudo 호출에서 가져옵니다. 누군가 내 컴퓨터를 해킹하고 그 가치를 수정하는 것에 대해 걱정하지 않았습니다. 아아 .... 해결 방법을 찾았습니다. 홈 디렉토리에 파일을 만들었습니다.
echo $USER > ~/.logname
내 로그 이름에 액세스하려면 (예 : Bash 변수 g_logname에 할당) 그렇게합니다.
declare g_logname="$(<~/.logname)";
이것은 나 자신이나 루트 레벨에서 sudo를 통해 작동하며, "~"를 내 홈 디렉토리로 할당합니다. 시스템에서 각 사용자의 홈 디렉토리에 대한 .logname 파일을 작성할 수 있습니다. 예, 누군가 내 컴퓨터를 해킹하여 파일을 변경할 수는 있지만 걱정할 필요는 없습니다. 스크립트가 작동하기를 원합니다.