`w` 명령은 유휴 시간과 실행 명령을 어떻게 알 수 있나요?

`w` 명령은 유휴 시간과 실행 명령을 어떻게 알 수 있나요?

w명령은 로그인한 사람과 그들이 무엇을 하고 있는지에 대한 다양한 정보를 표시합니다.

위키피디아:

$ w
 11:12am up 608 day(s), 19:56,  6 users,  load average: 0.36, 0.36, 0.37
User     tty       login@  idle  what
smithj   pts/5      8:52am       w
jonesm   pts/23    20Apr06    28 -bash
harry    pts/18     9:01am     9 pine
peterb   pts/19    21Apr06       emacs -nw html/index.html
janetmcq pts/8     10:12am 3days -csh
singh    pts/12    16Apr06  5:29 /usr/bin/perl -w perl/test/program.pl

나는 그것이 정보의 처음 3개 열을 얻는다는 것을 알고 있습니다.utmp와 wtmp, 모든 사람에게 읽기 액세스 권한이 있지만어디서 정보를 얻나요?게으른시간과무엇사용자가 현재 무엇을 하고 있는지?

ls -l $(which w)w이는 프로그램에 setuid 비트가 설정되어 있지 않으며 일반 사용자로서 해당 프로그램을 볼 수 있는 권한이 없음을 나타냅니다 /proc.

답변1

적어도 Linux에서는 터미널의 모든 사용자 입력이 현재 사용자 장치에 액세스하므로 로그인된 사용자를 호출 stat()하고 /dev/{tty,pts/}?*확인합니다 .atime

에서 w.c:

    /* stat the device file to get an idle time */
    static time_t idletime(const char *restrict const tty)
    {
            struct stat sbuf;
            if (stat(tty, &sbuf) != 0)
                    return 0;
            return time(NULL) - sbuf.st_atime;
    }

    static void showinfo(utmp_t * u, int formtype, int maxcmd, int from,
    ...
            print_time_ival7(idletime(tty), 0, stdout);
    ...

stat()x작동하려면 상위 디렉터리에 대한 실행() 권한 만 필요합니다 .

관련 정보