2015-02-06 2 views
0

사용자가 root로 로그인했는지 확인하기 위해 스크립트가 사용하는 간단한 함수입니다.사용자를 찾는 방법은 bash 스크립트를 사용하여 Linux에서 root로 로그인 했습니까?

do_check_user(){ 
    id | grep root 1>/dev/null 2>&1 
    if test "$?" != "0" 
     then 
      echo "" 
      echo " Invalid login, Please logon as root and try again!" 
      exit 0 
    fi 
} 

이 기능의 작동 방식을 완전히 이해하지 못했습니다. 나는 비트와 부분이 어떻게 구현되는지 찾기 위해 온라인에서 검색을 시도했다. 그러나 나에게 아직도 명확하지 않다. 특히

이 라인 :

id | grep root 1>/dev/null 2>&1 
    if test "$?" != "0" 

나는 단계적으로 일을했습니다. 그러나 나는 당신이 나에게이 구문과 무엇을하고있다 설명 할 수 있다면, 그것은

감사

+0

그렙에 대한 두 번째 인수는 파일이 있어야한다. "1"이라는 파일은 현재 디렉토리에 없습니다. – fork0

+0

grep을 가진 라인은 stderr (표준 에러 출력 채널,'2>')와 stdout (표준 출력 채널,''2 ' 1>', 대개는'>')를/dev/null (일명 아무 데나)에 씁니다. – fork0

+0

그건 그렇고, 테스트를하는 끔찍한 방법입니다. 'grooten'이라는 사용자 또는 'arrowroot_biscuits'라는 그룹이 있다고 가정 해 보겠습니다. – rici

답변

2
  1. id -

  2. grep 검색 루트

  3. 1>/dev/null 2>&1위한 자료의 출력을 통해 실질적이고 효율적인 사용자 및 그룹 ID를 인쇄 stdout/stderror/dev/null에를 보낸다; 그러므로 출력 1>/dev/nullstdout to /dev/null

  4. if test "$?" != "0" 검사가 0 사점을 의미하는 경우, grep입니다 마지막으로 실행 된 명령의 상태를 전송하고 그렇지 0 경우, 당신은 메시지를 얻을 것이다 표시되지 않습니다.

+0

정교한 답변에 감사드립니다. 위의 3 번에서 grep에서 stdout 또는 stderr를'/ dev/null'으로 보냅니다. 그리고 마지막'2> & 1'은 무엇을 의미합니까? –

+0

1이 표준 출력입니다. 2는 stderr입니다. '2> & 1'은 stderr를 stdout으로 리다이렉트하고'1> \ dev \ null'을 보내면 양쪽 모두'\ dev \ null'으로 보내집니다; [차가운] (http://stackoverflow.com/questions/818255/in-the-shell-what-is-21) – Aman

2

당신은 단순히 whoami 명령을 사용할 수 있습니다 매우 도움이 될 것입니다 오류

id | grep root 1 
grep: 1: No such file or directory 

를 얻을. 만 bash에 대한

#!/bin/bashyou 
if [[ $(whoami) == 'root' ]] ; then 
    echo "it's root" 
fi 

편집 : 당신은 또한 당신이 $ EUID 루트의 경우는 0

(($EUID == 0)) && echo 'root' 
+1

은 누구에게도 속임수가되어서는 안됩니까? – EJK

+0

오케이, 편집으로이 문제를 해결했습니다. – EJK

+0

@EJK,이 답변은 현재 편집되지 않았으며'$ (..) '에 대한 백틱의 기존 사용법을 사용하는 비슷한 대답으로 혼란 스럽습니다. 현재보다 바람직한 방법. – user3439894

1

동일하므로, 사용자 식별자를 의미 변수가 시도 할 수 whoami :

do_check_user() { test $(whoami) = root; }

+0

위의 테스트는 무엇입니까? –

+0

[테스트 (1)] (http://man7.org/linux/man-pages/man1/test.1.html) – fork0

0

사용 whoami :

if [ `whoami` == "root" ] ; then 
    echo "root" 
fi 
2

bash에서, 당신은 단지 $UID을 테스트 할 수 있습니다

if ((UID==0)); then 
    # I'm root 
fi 
관련 문제