0%

linux中最常用的用户信息命令

  • groups - show group memberships
  • finger - shows information about users
  • last - displays most recent user logins

linux中最常用的用户信息命令

仅个人想法,会持续不间断更新和改进。

用户信息,重中之重。

虽然21世纪最重要的是人才。

但对于我们个人而言,用户信息也是极其重要并特别需要留意的。


还有谁 last

Linux last 命令用于显示用户最近的登录信息。

官方定义为:

last, lastb - show listing of last logged in users

通过读取/var/log/wtmp文件来获取这些信息。

语法

1
$ last [-R] [-num] [ -n num ] [-adFiowx] [ -f file ] [ -t YYYYMMDDHHMMSS] [name...]  [tty...]

参数

  • -R 省略 hostname 的栏位

  • -n 展示前 num 个

  • username 展示 username 的登入讯息

  • tty 限制登入讯息包含终端机代号

一般使用方法

1
2
3
4
5
6
7
8
9
10
11
12
$ last
username2 pts/17 192.168.100.123 Wed Mar 23 22:14 still logged in
username3 pts/20 localhost:11.0 Wed Mar 23 14:26 - 15:48 (01:21)
username4 pts/23 localhost:11.0 Wed Mar 23 14:26 - 15:48 (01:21)
username4 pts/4 192.168.100.125 Thu Jun 10 18:37 - 22:57 (04:20)
username5 pts/4 192.168.100.125 Thu Jun 10 18:21 - 18:21 (00:00)
username6 pts/9 192.168.100.126 Thu Jun 10 18:11 - 18:20 (00:09)
username7 pts/15 192.168.100.122 Thu Jun 10 18:04 - 23:44 (1+05:40)
username8 pts/14 192.168.100.121 Thu Jun 10 17:59 - 07:50 (13:50)
username9 pts/9 192.168.100.126 Thu Jun 10 17:59 - 18:03 (00:04)

wtmp begins Thu Jun 10 17:33:14 2013

查看最近登陆的三个用户

1
2
3
4
5
6
7
$ last -3

username2 pts/17 192.168.100.123 Wed Mar 23 22:14 still logged in
username3 pts/20 localhost:11.0 Wed Mar 23 14:26 - 15:48 (01:21)
username4 pts/23 localhost:11.0 Wed Mar 23 14:26 - 15:48 (01:21)

wtmp begins Thu Jun 10 17:33:14 2013

省略hostname

1
2
3
4
5
6
$ last -3 -R
username2 pts/17 Wed Mar 23 22:14 still logged in
username3 pts/20 Wed Mar 23 14:26 - 15:48 (01:21)
username4 pts/23 Wed Mar 23 14:26 - 15:48 (01:21)

wtmp begins Thu Jun 10 17:33:14 2013

显示最后一列显示主机IP地址

1
2
3
4
5
6
7
8
$ last -n 5 -a -i
username3 pts/17 Wed Mar 23 22:14 still logged in 192.168.100.123
username5 pts/20 Wed Mar 23 14:26 - 15:48 (01:21) 0.0.0.0
username6 pts/23 Wed Mar 23 14:26 - 15:48 (01:21) 0.0.0.0
username7 pts/19 Wed Mar 23 13:46 - 15:48 (02:01) 192.168.100.123
username8 pts/17 Wed Mar 23 13:18 - 15:47 (02:29) 192.168.100.123

wtmp begins Thu Jun 10 17:33:14 2013

我是谁 whoami

我知道你是谁,但我不知道我是谁,此时whoami可以帮助你,哈哈。

whoami将打印当前用户的名字。与id -un类似。

官方定义为:

whoami - print effective userid

用法为:

1
$ whoami [option] ..

这命令,基本没有参数。

我暂时。。也没有想到为什么会有这个命令。

唯一的可能使你找管理员来配置个啥,然后他需要知道你是谁,不,我是谁。

我看了一下源码,果然简洁:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <config.h>
#include <stdio.h>
#include <sys/types.h>
#include <pwd.h>

#include "system.h"
#include "die.h"
#include "error.h"
#include "long-options.h"
#include "quote.h"

/* The official name of this program (e.g., no 'g' prefix). */
#define PROGRAM_NAME "whoami"

#define AUTHORS proper_name ("Richard Mlynarik")

void
usage (int status)
{
if (status != EXIT_SUCCESS)
emit_try_help ();
else
{
printf (_("Usage: %s [OPTION]...\n"), program_name);
fputs (_("\
Print the user name associated with the current effective user ID.\n\
Same as id -un.\n\
\n\
"), stdout);
fputs (HELP_OPTION_DESCRIPTION, stdout);
fputs (VERSION_OPTION_DESCRIPTION, stdout);
emit_ancillary_info (PROGRAM_NAME);
}
exit (status);
}

int
main (int argc, char **argv)
{
struct passwd *pw;
uid_t uid;
uid_t NO_UID = -1;

initialize_main (&argc, &argv);
set_program_name (argv[0]);
setlocale (LC_ALL, "");
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);

atexit (close_stdout);

parse_gnu_standard_options_only (argc, argv, PROGRAM_NAME, PACKAGE_NAME,
Version, true, usage, AUTHORS,
(char const *) NULL);

if (optind != argc)
{
error (0, 0, _("extra operand %s"), quote (argv[optind]));
usage (EXIT_FAILURE);
}

errno = 0;
uid = geteuid ();
pw = (uid == NO_UID && errno ? NULL : getpwuid (uid));
if (!pw)
die (EXIT_FAILURE, errno, _("cannot find name for user ID %lu"),
(unsigned long int) uid);
puts (pw->pw_name);
return EXIT_SUCCESS;
}

其中使用的即为uid = geteuid ();

谁?who

.. note::
物是人非事事休,欲语泪先流。
李清照《武陵春·春晚》

知道了我是谁,接下来就要知道谁是谁了。

who将显示谁在登录,显示的内容可能包括用户名、终端登录口,登录的时间等等信息。

官方定义为:

who - show who is logged on

用法为:

1
$ who [OPTION]... [ FILE | ARG1 ARG2 ]

常用的参数为:

  • -q , --count:只显示登入系统的帐号名称和总人数;
  • -s:此参数将忽略不予处理,仅负责解决who指令其他版本的兼容性问题;
  • -a, --all:效果为加上 -b -d --login -p -r -t -T -u
  • -b, --boot:上一次系统的重启时间
  • -d, --dead:打印dead进程
  • -H, --heading:打印每一列的表头
  • -q, --count:所有登录的用户名以及用户登录的数量
  • -s, --short:打印USER/LINE/WHEN(默认为这个参数)

默认使用

显示当前登录系统的用户

1
2
3
$ who       
user pts/0 2012-03-02 10:12
user2 pts/1 2012-03-10 09:12

系统的运行时间

这个信息显示系统自上一次重启后的运行时间。

1
2
$ who -b
system boot 2012-02-16 14:05

显示表头信息

使用-H或者--heading可以看到表头信息

1
2
3
4
$ who -H
USER LINE WHEN
user pts/0 2012-03-02 10:12
user2 pts/1 2012-03-10 09:12

显示登录的人员及总数

1
2
3
$ who -q
user1 user1 user2 user2 user3 user4
# users=6

什么?谁?w (who & what)

w可以认为是加强版的who,果然越简洁越强大,就比如lessmore是功能更多的。

w不仅可以显示谁在登录,还可以打印他们在做什么。w显示的信息如下:

  • 登录的用户;
  • 运行的程序;
  • 第一行显示的信息:当前时间、系统运行的时间、多少用户登录、系统的负载(分贝为1,5,15分钟)

官方定义为:

w - Show who is logged on and what they are doing.

用法为:

1
$ w [options] user [...]

常用的两个选项为:

  • -h  不显示各栏位的标题信息列。

  • -s  简洁格式列表,不显示用户登入时间,JCPU或者PCPU的时间

默认的显示

显示当前用户的登录信息及执行的命令

1
2
3
4
5
6
7
8
9
$ w
16:29:03 up 26 days, 2:49, 6 users, load average: 1.00, 0.97, 0.96
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/4 :1 07Sep21 20days 9:59 1:53m bash
user pts/0 :2 08Sep21 6days 0.70s 1:53m zsh
user pts/1 :3 08Sep21 20days 1:13m 1:53m bash
user :0 :0 15Sep21 6days 27days 21.36s zsh
user pts/2 :0 15Sep21 14days 0.25s 0.25s zsh
user pts/3 :3 16Sep21 24:45m 0.22s 0.22s bash

不显示标题行

1
2
3
4
5
6
7
8
9
$ w -h
16:29:16 up 26 days, 2:49, 6 users, load average: 1.20, 0.67, 0.76
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
user pts/4 :1 07Sep21 20days 9:59 1:53m bash
user pts/0 :2 08Sep21 6days 0.70s 1:53m zsh
user pts/1 :3 08Sep21 20days 1:13m 1:53m bash
user :0 :0 15Sep21 6days 27days 21.36s zsh
user pts/2 :0 15Sep21 14days 0.25s 0.25s zsh
user pts/3 :3 16Sep21 24:45m 0.22s 0.22s bash

简洁模式显示

1
2
3
4
5
6
7
8
9
$ w -s
16:29:26 up 26 days, 2:49, 6 users, load average: 1.50, 0.67, 0.36
USER TTY FROM IDLE WHAT
user pts/4 :1 20days bash
user pts/0 :2 6days zsh
user pts/1 :3 20days bash
user :0 :0 6days zsh
user pts/2 :0 14days zsh
user pts/3 :3 24:45m bash

不要告诉别人的passwd

passwd用于创建或者更新用户密码,是管理员必备的命令之一。

这个命令最终的实现是通过调用Linux-PAM 和Libuser API来实现的。

官方的定义为:

passwd - update user’s authentication tokens

使用的方法为:

1
$ passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warndays] [-i inactivedays] [-S] [--stdin] [username]

其中很常用的options为:

  • -S, --status:显示密码的状态信息
  • -d, --delete:删除用户密码,此时该用户将处于无密码状态

不太常用的options为:

  • --stdin:可以通过标准输入,亦可以为一个pipe
  • -l, --lock:锁定账号,不过也不是完全锁定,因为用户可以通过ssh key来继续访问
  • -u, --unlock:与上面的-l选项相反,属于解锁用户
  • -w, --warning DAYS:口令到期前通知用户,具备password lifetime的才支持

修改或更新密码

这个是最常用的用法,用于设置或者修改更新用户密码

1
2
3
4
5
$ sudo passwd user  		#设置用户user的密码
Enter new UNIX password: #输入新密码,输入的密码不显示
Retype new UNIX password: #再次输入确认密码
passwd: password updated successfully
# 此时设置成功

删除用户密码

1
2
$ sudo passwd -d user 
passwd: password expiry information changed.

此时用户处于无密码的状态,很类似最近说的,没有密码就是最安全的密码。

查看密码的状态

1
2
3
$ sudo passwd -S user
[sudo] password for oper:
user PS 2013-02-11 0 99999 7 -1 (Password set, SHA512 crypt.)

说到密码,有两个比较重要的原则

  1. 保护好你的密码,不写下来而是记在脑海里,定时修改;
  2. 选择一个很难猜的密码,而不是最容易被攻破的top密码;

处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道

Powered By Valine
v1.5.2