linux中最常用的用户信息命令
仅个人想法,会持续不间断更新和改进。
用户信息,重中之重。
虽然21世纪最重要的是人才。
但对于我们个人而言,用户信息也是极其重要并特别需要留意的。
还有谁 last
Linux last
命令用于显示用户最近的登录信息。
官方定义为:
last, lastb – show listing of last logged in users
通过读取/var/log/wtmp文件来获取这些信息。
语法
$ last [-R] [-num] [ -n num ] [-adFiowx] [ -f file ] [ -t YYYYMMDDHHMMSS] [name…] [tty…]
参数:
-R
省略 hostname 的栏位-n
展示前 num 个username
展示 username 的登入讯息tty
限制登入讯息包含终端机代号
一般使用方法
$ lastusername2 pts/17 192.168.100.123 Wed Mar 23 22:14 still logged inusername3 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
查看最近登陆的三个用户
$ last -3
username2 pts/17 192.168.100.123 Wed Mar 23 22:14 still logged inusername3 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
$ last -3 -Rusername2 pts/17 Wed Mar 23 22:14 still logged inusername3 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地址
$ last -n 5 -a -iusername3 pts/17 Wed Mar 23 22:14 still logged in 192.168.100.123username5 pts/20 Wed Mar 23 14:26 – 15:48 (01:21) 0.0.0.0username6 pts/23 Wed Mar 23 14:26 – 15:48 (01:21) 0.0.0.0username7 pts/19 Wed Mar 23 13:46 – 15:48 (02:01) 192.168.100.123username8 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
用法为:$ whoami [option] ..
这命令,基本没有参数。
我暂时。。也没有想到为什么会有这个命令。
唯一的可能使你找管理员来配置个啥,然后他需要知道你是谁,不,我是谁。
我看了一下源码,果然简洁:#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”)
voidusage (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);}
intmain (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
用法为:$ 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(默认为这个参数)
默认使用
显示当前登录系统的用户$ who user pts/0 2012-03-02 10:12 user2 pts/1 2012-03-10 09:12
系统的运行时间
这个信息显示系统自上一次重启后的运行时间。$ who -bsystem boot 2012-02-16 14:05
显示表头信息
使用-H
或者--heading
可以看到表头信息$ who -HUSER LINE WHEN user pts/0 2012-03-02 10:12 user2 pts/1 2012-03-10 09:12
显示登录的人员及总数
$ who -quser1 user1 user2 user2 user3 user4# users=6
什么?谁?w (who & what)
w
可以认为是加强版的who
,果然越简洁越强大,就比如less
比more
是功能更多的。
w
不仅可以显示谁在登录,还可以打印他们在做什么。w
显示的信息如下:
- 登录的用户;
- 运行的程序;
- 第一行显示的信息:当前时间、系统运行的时间、多少用户登录、系统的负载(分贝为1,5,15分钟)
官方定义为:
w – Show who is logged on and what they are doing.
用法为:$ w [options] user […]
常用的两个选项为:
-h
不显示各栏位的标题信息列。-s
简洁格式列表,不显示用户登入时间,JCPU或者PCPU的时间
默认的显示
显示当前用户的登录信息及执行的命令$ w16:29:03 up 26 days, 2:49, 6 users, load average: 1.00, 0.97, 0.96USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATuser pts/4 :1 07Sep21 20days 9:59 1:53m bashuser pts/0 :2 08Sep21 6days 0.70s 1:53m zshuser pts/1 :3 08Sep21 20days 1:13m 1:53m bashuser :0 :0 15Sep21 6days 27days 21.36s zshuser pts/2 :0 15Sep21 14days 0.25s 0.25s zshuser pts/3 :3 16Sep21 24:45m 0.22s 0.22s bash
不显示标题行
$ w -h16:29:16 up 26 days, 2:49, 6 users, load average: 1.20, 0.67, 0.76USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATuser pts/4 :1 07Sep21 20days 9:59 1:53m bashuser pts/0 :2 08Sep21 6days 0.70s 1:53m zshuser pts/1 :3 08Sep21 20days 1:13m 1:53m bashuser :0 :0 15Sep21 6days 27days 21.36s zshuser pts/2 :0 15Sep21 14days 0.25s 0.25s zshuser pts/3 :3 16Sep21 24:45m 0.22s 0.22s bash
简洁模式显示
$ w -s16:29:26 up 26 days, 2:49, 6 users, load average: 1.50, 0.67, 0.36USER TTY FROM IDLE WHATuser pts/4 :1 20days bashuser pts/0 :2 6days zshuser pts/1 :3 20days bashuser :0 :0 6days zshuser pts/2 :0 14days zshuser pts/3 :3 24:45m bash
不要告诉别人的passwd
passwd
用于创建或者更新用户密码,是管理员必备的命令之一。
这个命令最终的实现是通过调用Linux-PAM 和Libuser API来实现的。
官方的定义为:
passwd – update user’s authentication tokens
使用的方法为:$ 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的才支持
修改或更新密码
这个是最常用的用法,用于设置或者修改更新用户密码$ sudo passwd user #设置用户user的密码Enter new UNIX password: #输入新密码,输入的密码不显示Retype new UNIX password: #再次输入确认密码passwd: password updated successfully# 此时设置成功
删除用户密码
$ sudo passwd -d user passwd: password expiry information changed.
此时用户处于无密码的状态,很类似最近说的,没有密码就是最安全的密码。
查看密码的状态
$ sudo passwd -S user[sudo] password for oper: user PS 2013-02-11 0 99999 7 -1 (Password set, SHA512 crypt.)
说到密码,有两个比较重要的原则:
- 保护好你的密码,不写下来而是记在脑海里,定时修改;
- 选择一个很难猜的密码,而不是最容易被攻破的top密码;
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/389727.html