この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
機能するには、親ディレクトリに対する実行()権限のみが必要です。