zoukankan      html  css  js  c++  java
  • Linux系统用户与属组管理

    该系列文章只是本人的学习笔记,文章中的文字描述提取自《Linux鸟哥私房菜》《Linux运维之道》等书中的重点内容,化繁为简能够在工作中快速复习掌握重点,并不代表个人立场,但转载请加出处,并注明参考文献。

    好了,终于要到了管理 Linux 账号的时刻了,对于 Linux 有一定的熟悉度之后,再来就是要管理连上 Linux 的账号问题了,这个账号的问题可大可小,大到可以限制他使用 Linux 主机的各项资源,小到甚至一般账号的密码订定守则都可以进行规定,管理员的工作中,相当重要的一环就是『管理账号』啦,因为整个系统都是你在管理的,并且所有一般用户的账号申请,都必须要透过你的协助才行,所以你就必须要了解一下如何管理好一个服务器主机的账号啦,在管理 Linux 主机的账号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的.

    关于Linux UID账号 (User Identity 用户标识号)

    超级用户: UID=0
    系统用户: UID=500-65535 最大:1000-65535
    普通用户: UID:500-65535 最大:1000-65535

    关于Linux GID账号 (Group Identify 组标识号)
    初始组(私有组),附加组(公共组)

    Linux 用户文件解析

    虽然我们登陆 Linux 主机的时候,输入的是我们的账号,但是其实 Linux 主机并不会直接认识你的『账号名称』的,他仅认识 ID (ID 就是一组号码),由于计算机仅认识 0 与 1,所以主机对于数字比较有概念的,至于账号只是为了让人们容易记忆而已,而你的 ID 与账号的对应就在 /etc/passwd 当中,为了安全起见 Linux 把用户密码单独放在了 /etc/shadow 目录下,且权限是只允许root能够访问,下面我们来介绍一下其这两个配置文件的具体参数吧.

    ◆/etc/passwd◆

    这个文件的构造是这样的,每一行都代表一个账号,有几行就代表有几个账号在你的系统中,不过需要特别留意的是,里头很多账号本来就是系统正常运行所必须要的,我们可以简称他为系统账号,例如 bin,daemon,adm,nobody 等,这些账号请不要随意的删除,这个文件的内容有点像下面这个样子.

    [root@localhost ~]# head -n 3 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    ....省略....
    

    我们先来看一下每个Linux系统都会有的第一行,就是root这个系统管理员那一行好了,你可以明显的看出来,每一行使用『:』分隔开,共有七个咚咚,分别是:

    列号码 本列作用
    第一列 用户名:就是账号,用来对应UID的:例如root的UID对应就是0
    第二列 密码位:密码占位符,这个字段的密码数据在/etc/shadow中
    第三列 用户UID:0=管理员,1-499=系统账户,500-65535=自定义账户
    第四列 用户GID:也就是用户的组ID号,这个GID与/etc/group有关
    第五列 用户描述信息:这一列可有可无,只是用来解释账号的意义而已
    第六列 用户家目录:指定了用户的家目录保存位置,系统默认生成
    第七列 登陆默认Shell:指明系统默认的登陆shell是什么

    ◆/etc/shadow◆

    我们知道很多程序的运行都与权限有关,而权限与 UID/GID 有关,因此各程序当然需要读取 /etc/passwd 来了解不同账号的权限,因此 /etc/passwd 的权限需配置为 -rw-r--r-- 这样的情况,虽然早期的口令也有加密过,但却放置到 /etc/passwd 的第二个字段上,这样一来很容易被有心人士所窃取的,加密过的口令也能够透过暴力破解法去 try and error (试误) 找出来.

    因为这样的关系,所以后来发展出将口令移动到 /etc/shadow 这个文件分隔开来的技术,而且还加入很多的口令限制参数在 /etc/shadow 里头,在这里,我们先来了解一下这个文件的构造吧,这个 /etc/shadow 文件有点像下面这样:

    [root@localhost ~]# head -n 3 /etc/shadow
    root:$6$TT4VWP5W$Libo7Yk8JzG15VQWKu:17699:0:99999:7:::
    bin:*:17110:0:99999:7:::
    daemon:*:17110:0:99999:7:::
    ....省略....
    

    基本上,shadow 同样以『:』作为分隔符,如果数一数,会发现共有九个字段,这九个字段的用途是这样的:

    列号码 本列作用
    第一列 用户名:这个文件的第一栏就是账号,必须要与/etc/passwd相同才行
    第二列 密码位:这个字段内的数据才是真正的口令,而且是经过加密的口令
    第三列 密码最近更改时间:这个字段记录了『更改系统口令那一天』的日期
    第四列 密码最短有效期:账号的口令在最近一次被更改后需要经过几天后才能再次更改
    第五列 密码最长有效期:指定在最近一次更改口令后,经过多久需要再次更改的时间
    第六列 密码到期前的警告天数:当账号口令过期时,系统会发出『警告』给这个账号
    第七列 密码过期后的宽限天数:口令有效日期为『升级日期(第3字段)』+『重新变更日期(第5字段)』
    第八列 密码失效时间:账号在此字段规定的日期之后,将无法再使用,默认是9999999
    第九列 系统保留:此配置没有被使用,属于系统保留字段

    ## Linux 属组文件解析

    认识了账号相关的两个文件 /etc/passwd 与 /etc/shadow 之后,你或许还是会觉得奇怪,那么群组的配置文件在哪里?还有在 /etc/passwd 的第四栏不是所谓的 GID 吗? 那又是啥? 此时就需要了解 /etc/group 与 /etc/gshadow 这两个配置文件喽.

    ◆/etc/group◆

    这个文件就是在记录 GID 与组名的对应了,他主要是实现组用户的记录工作, /etc/group 内容有点像以下这样:

    [root@localhost ~]# head -n 3 /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    ....省略....
    

    这个文件每一行代表一个群组,也是以冒号『:』作为字段的分隔符,共分为四栏,每一字段的意义如下:

    列号码 本列作用
    第一列 组名称:就是组名,在新建用户的时候系统会为用户分配一个默认组.
    第二列 密码占位符:通常不需要配置,这个配置通常是给『组管理员』使用的.
    第三列 组ID号(GID):就是群组的 ID 号码.
    第四列 成员列表:显示本组内的成员列表

    ◆/etc/gshadow◆

    本配置文件用于存储组的密码,等相关信息/etc/gshadow的内容有点像这样:

    [root@localhost ~]# head -n 3 /etc/gshadow
    root:::
    bin:::
    daemon:::
    ....省略....
    

    这个文件内同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个文件几乎与/etc/group一模一样,是这样没错不过,要注意的大概就是第二个字段,第二个字段是口令栏,如果口令栏上面是『!』时,表示该群组不具有群组管理员,至于第四个字段也就是支持的账号名称,这四个字段的意义为:

    列号码 本列作用
    第一列 用户组:就是组名,本配置文件必须与/etc/group文件相对应.
    第二列 组密码:这个段可以是空的或!,如果是空的或有!,表示没有密码
    第三列 组管理者:这个字段也可为空,如果有多个用户组管理者用,分割
    第四列 组内成员:如果有多个成员用,号分割

    以系统管理员的角度来说,这个 gshadow 最大的功能就是创建群组管理员啦,那么什么是群组管理员呢?由于系统上面的账号可能会很多,但是我们root可能平时太忙碌,所以当有使用者想要加入某些群组时,root或许会没有空管理,此时如果能够创建群组管理员的话,那么该群组管理员就能够将那个账号加入自己管理的群组中,可以免去root的忙碌啦.

    Linux 用户管理命令

    好啦!既然要管理账号,当然是由新增与移除使用者开始的啰~底下我们就分别来谈一谈如何新增、移除与更改用户的相关信息吧~

    ◆useradd 新建用户◆

    useradd命令用于Linux中创建的新的系统用户,useradd可用来建立用户帐号,帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号,使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中,在Slackware中,adduser指令是个script程序,利用交谈的方式取得输入的用户帐号资料,然后再交由真正建立帐号的useradd命令建立新用户,如此可方便管理员建立用户帐号.在Red Hat Linux中,adduser命令则是useradd命令的符号连接,两者实际上是同一个指令,其参数我们会在下面进行说明.

    [root@localhost ~]# useradd --help
    
    命令语法:[ user [选项] 用户名 ]
    
            -u UID          #创建用户时指定UID号
            -g 组名         #指定一个初始组
            -G 组名         #加入一个附加组
            -d 目录         #手动指定某目录为家目录
            -s 类型         #指定默认Shell,默认/bin/bash
            -M              #强制不创建家目录
            -D              #查询默认配置参数
            -m              #强制创建家目录
            -c              #指定说明信息,可随便写
            -r              #创建一个系统的账号
            -e              #指定账号失效日期,格式为『YYYY-MM-DD』
            -f              #指定口令是否会失效,0为立刻失效
            -1              #指定用户永远不失效
    

    实例1:使用 useradd -M -r -s /sbin/nologin 参数创建一个系统用户.

    [root@localhost ~]# useradd -M -r -s /sbin/nologin lyshark
    
    [root@localhost ~]# cat /etc/passwd |grep lyshark
    lyshark:x:997:995::/home/lyshark:/sbin/nologin
    

    实例2:使用 useradd -G 参数创建用户并指定组.

    [root@localhost ~]# groupadd admin
    [root@localhost ~]# useradd -G admin wang
    
    [root@localhost ~]# cat /etc/group |grep wang
    admin:x:1000:wang
    

    关于useradd命令的拓展

    其实系统已经帮我们规定好非常多的默认值了,所以我们可以简单的使用『 useradd 账号 』来创建使用者即可,这些默认值主要会帮我们处理几个项目:

    在 /etc/passwd 里面创建一行与账号相关的数据,包括创建UID/GID/家目录等.
    在 /etc/shadow 里面将此账号的口令相关参数填入,但是尚未有口令.
    在 /etc/group 里面加入一个与账号名称一模一样的组名.
    在 /home 底下创建一个与账号同名的目录作为用户家目录,且权限为700.

    那么我们在创建默认用户的时候也会参考一些配置文件,来完成默认参数的配置,现在我们可以使用下面的命令来直接获取默认配置参数.

    [root@localhost ~]# useradd -D
    
    GROUP=100
    HOME=/home
    INACTIVE=-1
    EXPIRE=
    SHELL=/bin/bash
    SKEL=/etc/skel
    CREATE_MAIL_SPOOL=yes
    

    这个数据其实是由/etc/default/useradd参数读取出来的,你可以自行用VIM去观察该文件的内容,搭配上头刚刚谈过的运行结果,上面这些配置项目所造成的行为分别是:

    [root@localhost ~]# vim /etc/default/useradd
    
    GROUP=100
    
    #新创建用户时默认初始组的GID号(公有组机制)
    #现在使用的是私有组机制(根据创建用户名称创建组)
    
    HOME=/home
    #新创建用户的家目录的默认位置
    
    INACTIVE=-1
    #密码过期后宽限天数(过期停权),用天数表示:0代表密码到期立刻失效;正数代表密码到期后的宽限天数;-1 表示密码永不失效。 
    
    EXPIRE=
    #密码失效时间,此处写时间戳,到达时间戳时间后立刻失效,不填写表示用户密码永不过期。
    
    SHELL=/bin/bash
    #此选项是创建用户时默认的shell类型,/bin/bash 表示可以登录系统
    
    SKEL=/etc/skel 
    #此选项是创建用户时使用的模板目录,/etc/skel中的文件在用户创建时都会被复制到用户家目录下。
    
    GREATE_MAIL_SPOOL=yes
    #此选项是是否给新用户创建邮件缓冲(即新邮箱)
    
    [root@localhost ~]# vim /etc/login.defs
    
    MAIL_DIR /var/spool/mail
    #指定新用户的默认邮箱位置。比如xdl用户的邮箱目录位置:/var/spool/mail/lyshark
    
    PASS_MAX_DAYS 99999
    #这行指定的是密码的有效期,也就是/etc/shadow文件的第五字段。代表多少天之后必须修改密码,默认值是99999
    
    PASS_MIN_DAYS 0
    #这行指定的是两次密码的修改间隔时间,也就是/etc/shadow文件的第四字段。代表第一次修改密码之后,几天后才能再次修改密码。默认值是0
    
    PASS_MIN_LEN 5
    #这行代表密码的最小长度,默认不小于5位。但是我们现在用户登录时验证已经被PAM模块取代,所以这个选项并不生效
    
    PASS_WARN_AGE 7
    #这行代表密码修改到期前的警告天数,也就是/etc/shadow文件的第六字段。代表密码到底有效期前多少天开始进行警告提醒,默认值是7天
    
    UID_MIN 500
    #创建普通用户的时候默认的起始UID号
    
    UID_MAX 60000
    #创建普通用户,不用-u 指定时,默认最大的UID号。
    #注:假如有一个用户创建时通过 -u 指定了 UID 为 550,那么下一次不指定-u 时,则起始UID 变成从551开始,500-549之间的那些会跳过不使用。
    
    GID_MIN 500
    #创建组的时候默认的起始GID号
    
    GID_MAX 60000
    #创建组的时候默认的最大的GID号
    
    CREATE_HOME yes
    #创建用户时是否创建用户家目录默认 yes 创建 
    
    UMASK 077
    #这行指定的是建立的用户家目录的默认权限,因为umask值是077,所以新建的用户家目录的权限是700
    
    USERGROUPS_ENAB yes
    #这行指定的是使用命令userdel删除用户时,是否删除用户的初始组,默认是删除
    
    ENCRYPT_METHOD SHA512 
    #这行指定Linux用户的密码使用SHA512散列模式加密,这是新的密码加密模式,原先的Linux只能用DES或MD5方式加密
    

    现在你知道啦,使用 useradd 这支程序在创建 Linux 上的账号时,至少会参考:

    /etc/default/useradd
    /etc/login.defs
    /etc/skel/*

    这些文件,不过最重要的其实是创建 /etc/passwd,/etc/shadow,/etc/group,/etc/gshadow还有用户家目录就是了~所以,如果你了解整个系统运行的状态,也是可以手动直接修改这几个文件就是了.

    ◆passwd 设置密码◆

    passwd命令用于设置用户的认证信息,包括用户密码、密码过期时间等,系统管理者则能用它管理系统用户的密码,只有管理者可以指定用户名称,一般用户只能变更自己的密码,其参数我们会在下面进行说明.

    [root@localhost ~]# passwd --help
    
    命令语法:[ passwd [选项] 用户名 ]
    
            -u UID          #创建用户时指定UID号
            --stdin         #非交互给予密码
            -l 用户名        #锁定用户,使之无法登陆,会将 /etc/shadow 第二栏最前面加上 ! 使口令失效.
            -u 用户名        #解锁用户,是 Unlock 的意思
            -S 用户名        #查看用户账号状态(是否被锁定).
            -n              #后面接天数,多久不可修改口令天数
            -x              #后面接天数,多久内必须要更动口令
            -w              #后面接天数,口令过期前的警告天数
            -i              #后面接『日期』,口令失效日期
    

    实例1:使用 echo |passwd --stdin 参数非交互设置密码.

    [root@localhost ~]# echo "lyshark" |passwd --stdin lyshark
    
    Changing password for user lyshark.
    passwd: all authentication tokens updated successfully.
    

    实例2:使用 passwd 参数修改lyshark用户的密码.

    [root@localhost ~]# passwd lyshark
    
    Changing password for user lyshark.
    New password: 123123
    BAD PASSWORD: The password is shorter than 8 characters
    Retype new password: 123123
    passwd: all authentication tokens updated successfully.
    

    root果然是最伟大的人物,当我们要给予用户口令时,通过root来配置即可,root可以配置各式各样的口令,系统几乎一定会接受,所以如同上面的范例,明明输入的口令太短了,但是系统依旧可接受123123这样的口令配置.

    ◆usermod 管理用户◆

    usermod命令用于修改用户的基本信息,usermod命令不允许你改变正在线上的使用者帐号名称,当usermod命令用来改变userid,必须确认这名user没在电脑上执行任何程序,你需手动更改使用者的crontab,也需手动更改使用者的at工作,采用NIS server须在server上更动相关的NIS设定,其参数我们会在下面进行说明.

    [root@localhost ~]# usermod --help
    
    命令语法:[ usermod [选项] 用户名 ]
    
            -u UID          #创建用户时指定UID号
            -c              #后面加账号说明
            -d 目录         #结合 -m 直接对家目录进行改名
            -e              #后面接日期,格式是 YYYY-MM-DD
            -f              #后面接天数
            -g 组名         #修改指定初始组
            -G              #修改指定附加组
            -a              #与 -G 合用,添加次要组
            -l 新名 旧名    #修改用户名
            -s shell        #修改默认Shell
            -u UID          #修改用户的指定UID
            -L              #冻结指定用户,让其无法登陆
            -U              #解除冻结
    

    如果你仔细的比对,会发现 usermod 的选项与 useradd 非常类似,这是因为 usermod 也是用来微调 useradd 添加的使用者参数嘛,不过 usermod 还是有新增的选项,那就是 -L 与 -U,不过这两个选项其实与 passwd 的 -l,-u 是相同的.

    实例1:使用 usermod -m -d /home/hello wang 参数将原wang家目录修改成hello.

    [root@localhost home]# ls
    wang
    [root@localhost home]# usermod -m -d /home/hello wang
    
    [root@localhost home]# ls
    hello
    

    实例2:使用 usermod -s /bin/bash 参数修改lyshark账户的默认shell.

    [root@localhost ~]# usermod -s /bin/bash lyshark
    

    ◆userdel 删除用户◆

    userdel命令用于删除给定的用户,以及与用户相关的文件,若不加选项,则仅删除用户帐号,而不删除相关文件,其参数我们会在下面进行说明.

    [root@localhost ~]# userdel --help
    
    命令语法:[ userdel [选项] 用户名 ]
    
            -f              #强制删除用户,即使用户已登陆
            -r              #同时删除家目录
    

    这个功能就太简单了,目的在删除用户的相关数据,而用户的数据有:

    用户账号/口令相关参数:/etc/passwd, /etc/shadow
    使用者群组相关参数:/etc/group, /etc/gshadow
    用户个人文件数据: /home/username, /var/spool/mail/username..

    这个命令下达的时候要小心了,通常我们要移除一个账号的时候,你可以手动的将 /etc/passwd 与 /etc/shadow 里头的该账号取消即可,一般而言,如果该账号只是『暂时不激活』的话,那么将 /etc/shadow 里头账号失效日期 (第八字段) 配置为 0 就可以让该账号无法使用,但是所有跟该账号相关的数据都会留下来,使用userdel的时候通常是『你真的确定不要让该用户在主机上面使用任何数据了』

    ◆chage 查询参数◆

    chage命令是用来修改帐号和密码的有效期限,其参数我们会在下面进行说明.

    [root@localhost ~]# chage --help
    
    命令语法:[ chage [选项] 用户名 ]
    
            -m              #密码可更改的最小天数
            -M              #密码保持有效的最大天数
            -w              #用户密码到期前警告天数
            -E              #帐号到期时间
            -d              #上一次更改的日期
            -l              #列出该账号的详细口令参数
            chage -d 0      #强制用户下次登陆修改密码
    

    实例1:使用 chage -d 0 lyshark 强制用户下次登陆修改密码.

    [root@localhost ~]# chage -l lyshark
    Last password change					: Nov 14, 2018
    Password expires					: never
    Password inactive					: never
    Account expires						: never
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    
    [root@localhost ~]# chage -d 0 lyshark
    
    [root@localhost ~]# chage -l lyshark
    Last password change					: password must be changed
    Password expires					: password must be changed
    Password inactive					: password must be changed
    Account expires						: never
    Minimum number of days between password change		: 0
    Maximum number of days between password change		: 99999
    Number of days of warning before password expires	: 7
    

    ## Linux 属组管理命令

    了解了账号的新增、删除、更动与查询后,再来我们可以聊一聊群组的相关内容了,基本上,群组的内容都与这两个文件有关:/etc/group,/etc/gshadow,群组的内容其实很简单,都是上面两个文件的新增、修改与移除而已,不过如果再加上有效群组的概念,那么gpasswd则不可不知呢.

    ◆groupadd 添加属组◆

    groupadd命令用于创建一个新的工作组,新工作组的信息将被添加到系统文件中,其参数我们会在下面进行说明.

    [root@localhost ~]# groupadd --help
    
    命令语法:[ groupadd [选项] 组名 ]
    
            -g              #指定组GID
            -r              #创建系统群组
    

    ◆groupmod 修改属组◆

    groupmod命令更改群组识别码或名称,需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作,其参数我们会在下面进行说明.

    [root@localhost ~]# groupmod --help
    
    命令语法:[ groupmod [选项] 组名 ]
    
            -g              #修改原有的GID数字
            -n              #修改原有的组名
    

    ◆groupdel 删除属组◆

    groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow,若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组,其参数我们会在下面进行说明.

    [root@localhost ~]# groupdel --help
    
    命令语法:[ groupdel [选项] 组名 ]
    

    ◆gpasswd 添加成员◆

    gpasswd命令是Linux下工作组文件/etc/group和/etc/gshadow管理工具,其参数我们会在下面进行说明.

    [root@localhost ~]# gpasswd --help
    
    命令语法:[ gpasswd [选项] 组名 ]
    
            -a              #添加用户到组
            -d              #从组删除用户
            -A              #指定管理员
            -M              #指定组成员
            -r              #删除密码
            -R              #限制用户登入组
    

    实例1:使用 gpasswd -a 添加lyshark用户到root组.

    [root@localhost ~]# gpasswd -a lyshark root
    
    Adding user lyshark to group root
    

    实例2:使用 gpasswd -d 从lyshark组中删除root.

    [root@localhost ~]# gpasswd -d lyshark root
    
    Removing user lyshark from group root
    

    实例3:使用 gpasswd -M 批量将用户 a1,a2,a3,a4 添加到test组.

    [root@localhost ~]# useradd a1
    [root@localhost ~]# useradd a2
    [root@localhost ~]# useradd a3
    [root@localhost ~]# useradd a4
    [root@localhost ~]# groupadd test
    
    [root@localhost ~]# gpasswd -M a1,a2,a3,a4 test
    
    root@localhost ~]# cat /etc/group |grep test
    test:x:1008:a1,a2,a3,a4
    

    ## Linux 用户查询命令

    谈了这么多的账号问题,总是该要谈一谈,那么如何针对系统上面的用户进行查询吧?想几个状态,如果你在Linux上面操作时,刚好有其他的用户也登陆主机,你想要跟他对谈,该如何是好,你想要知道某个账号的相关信息,该如何查阅,下面我们就来看一看具体的查询技巧吧.

    ◆su 切换身份命令◆

    su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码,其参数我们会在下面进行说明.

    [root@localhost ~]# su --help
    
    命令语法:[ su - [选项] 用户名 ]
    
            -c 指令          #执行完指定的指令后,即恢复原来的身份
            -f               #使shell不用去读取启动文件
            -l               #改变身份时连同环境变量一起切换
            -m               #改变身份不同步环境变量
            -s shell         #指定要执行的shell
    

    实例1:使用 su -c 执行指令后自动退出.

    [root@localhost ~]# su -c id lyshark
    
    uid=1000(lyshark) gid=1000(lyshark) groups=1000(lyshark)
    

    ◆id 查询用户信息◆

    id命令可以显示真实有效的用户ID(UID)和组ID(GID),UID 是对一个用户的单一身份标识,组ID(GID)则对应多个UID,id命令已经默认预装在大多数Linux系统中,要使用它,只需要在你的控制台输入id,其参数我们会在下面进行说明.

    [root@localhost ~]# id --help
    
    命令语法:[ id [选项] 用户名 ]
    
            -g              #显示用户所属群组的ID
            -G              #显示用户所属附加群组的ID
            -n              #显示用户,所属群组或附加群组的名称.
            -r              #显示实际ID
            -u              #显示用户ID
    

    实例1:使用 id 命令查询指定用户.

    [root@localhost ~]# id lyshark
    
    uid=1000(lyshark) gid=1000(lyshark) groups=1000(lyshark)
    

    ◆w 显示登陆用户列表◆

    w命令用于显示已经登陆系统的用户列表,并显示用户正在执行的指令,执行这个命令可得知目前登入系统的用户有那些人,以及他们正在执行的程序,单独执行w命令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息,其参数我们会在下面进行说明.

    [root@localhost ~]# w --help
    
    命令语法:[ w [选项] 用户名 ]
    
            -h              #不打印头信息
            -u              #当显示当前进程和cpu时间时忽略用户名
            -s              #使用短输出格式
            -f              #显示用户从哪登录
    

    实例1:使用 w 命令查看系统正在登陆的用户.

    [root@localhost ~]# w
    
     14:40:07 up 3 min,  2 users,  load average: 0.03, 0.09, 0.05
    USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
    root     pts/0    192.168.1.20     14:37    7.00s  0.10s  0.00s w
    lyshark  pts/1    192.168.1.20     14:38    1:59   0.01s  0.01s -bash
    

    实例2:使用 w -h lyshark 命令查看lyshark用户的登陆情况.

    [root@localhost ~]# w -h lyshark
    lyshark  pts/1    192.168.1.20     14:38    4:31   0.01s  0.01s -bash
    

    ◆who 显示登录系统信息◆

    who命令是显示目前登录系统的用户信息,执行who命令可得知目前有那些用户登入系统,单独执行who命令会列出登入帐号,使用的终端机,登入时间以及从何处登入或正在使用哪个显示器,其参数我们会在下面进行说明.

    [root@localhost ~]# who --help
    
    命令语法:[ who [选项] ]
    
            -H              #显示各栏位的标题信息列
            -u              #显示用户闲置时间(1分钟内无操作显示. 24小时不操作显示old)
            -m              #与 who am i 参数效果相同
            -q              #只显示登入系统的帐号名称和总人数
            -s              #只负责解决兼容性问题
            -w              #显示用户的信息状态栏
    

    实例1:使用 who -q 命令查看系统登录用户总人数.

    [root@localhost ~]# who -q
    
    root lyshark admin users wangrui 
    # users=5
    

    ◆last 显示用户最近登录信息◆

    last命令用于显示用户最近登录信息,单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来,其参数我们会在下面进行说明.

    [root@localhost ~]# last --help
    
    命令语法:[ last [选项] [文件目录] ]
    
            -H              #显示各栏位的标题信息列
            -a              #把从何处登入系统的主机名称或IP,显示在最后一行
            -d              #将IP地址转换成主机名称
            -f 记录文件      #指定记录文件
            -n 显示条数      #设置列出名单的显示列数
            -R              #不显示登入系统的主机名称或IP地址
            -x              #显示系统关机,重新开机,以及执行等级的改变等信息
    

    实例1:使用 last -f /var/log/wtmp 指定一个读取文件,来打印.

    [root@localhost ~]# last -f /var/log/wtmp
    
    lyshark  pts/1        192.168.1.20     Wed Nov 14 14:38   still logged in   
    root     pts/0        192.168.1.20     Wed Nov 14 14:37   still logged in   
    reboot   system boot  3.10.0-862.el7.x Wed Nov 14 14:36 - 14:57  (00:21)    
    root     pts/0        192.168.1.8      Tue Nov  6 11:02 - crash (8+03:34)   
    ....省略....
    wtmp begins Sat Oct 13 12:39:18 2018
    

    实例2:使用 last -n 4 命令显示前4行数据.

    [root@localhost ~]# last -n 4
    lyshark  pts/1        192.168.1.20     Wed Nov 14 14:38   still logged in   
    root     pts/0        192.168.1.20     Wed Nov 14 14:37   still logged in   
    reboot   system boot  3.10.0-862.el7.x Wed Nov 14 14:36 - 14:58  (00:22)    
    root     pts/0        192.168.1.8      Tue Nov  6 11:02 - crash (8+03:34)   
    
    wtmp begins Sat Oct 13 12:39:18 2018
    

    ◆lastlog 显示最后登陆信息◆

    lastlog命令用于显示系统中所有用户最近一次登录信息.

    lastlog文件在每次有用户登录时被查询,可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容,它根据UID排序显示登录名、端口号(tty)和上次登录时间,如果一个用户从未登录过,lastlog显示 Never logged,注意需要以root身份运行该命令,其参数我们会在下面进行说明.

    [root@localhost ~]# lastlog --help
    
    命令语法:[ lastlog [选项] [文件目录] ]
    
            -b 天数         #显示指定天数前的登录信息
            -t 天数         #显示指定天数以来的登录信息
            -u 用户名       #显示指定用户的最近登录信息
    

    实例1:使用 lastlog -u root 查询root的最后登录日期.

    [root@localhost ~]# lastlog -u root
    
    Username         Port     From             Latest
    root             pts/0    192.168.1.20     Wed Nov 14 14:37:27 -0500 2018
    

    ## Linux 用户对话命令

    ◆write 在线发送提示◆

    write命令用于向指定登录用户终端上发送信息,通过write命令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write命令就会将信息传给对方,如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号.

    实例1:使用 write 给lyshark用户发送消息.

    [root@localhost ~]# echo "hello lyshark" | write lyshark
    

    实例2:使用 write 给lyshark用户无线发送乱码.

    while true
    do
    cat /var/log/messages |base64 |write lyshark
    done
    

    注意:若对方设定mesg n 则此时信息将无法传给对方.

    ◆wall 给所有人通知◆

    wall命令用于向系统当前所有打开的终端上输出信息,通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户.

    实例1:使用 wall 给全部用户发送消息.

    [root@localhost ~]# wall hello linux admin
    [root@localhost ~]# 
    
    Broadcast message from root@localhost.localdomain (pts/0) (Wed Nov 14 15:28:01 2018):
    
    hello linux admin
    

    ◆mail 发送邮件◆

    mail命令是命令行的电子邮件发送和接收工具,操作的界面不像elm或pine那么容易使用,但功能非常完整,其参数我们会在下面进行说明.

    [root@localhost ~]# yum install -y mailx
    [root@localhost ~]# mail --help
    
    命令语法:[ mail [选项] [用户] ]
    
            -b 地址         #指定密件副本的收信人地址
            -c 地址         #指定副本的收信人地址
            -f 邮件文件     #读取指定邮件文件中的邮件
            -i             #不显示终端发出的信息
            -I             #使用互动模式
            -s 邮件主题     #指定邮件的主题
            -u 用户帐号     #读取指定用户的邮件
    
            h              #列出信件表头
            d              #删除邮件
            s              #将邮件保存成文件
            q              #退出
    

    实例1:使用 mail 使用管道进行邮件发送.

    [root@localhost ~]# echo "hello,this is the content of mail." |mail -s "by root" lyshark
    
    You have new mail in /var/spool/mail/root
    

    实例2:使用 mail 使用文件进行邮件发送.

    [root@localhost ~]# mail -s "by root" admin@mkdirs.com < mail.txt
    
    You have new mail in /var/spool/mail/root
    

    参考文献:Linux鸟哥私房菜,Linux运维之道

  • 相关阅读:
    微信小程序支付服务商版-发起支付
    count(1),count(*),count(主键) 性能对比
    SpringBoot_yml配置文件
    Java字符串加密,UUID+MD5进行加密
    WebSocket实现C#端和H5进行交互
    SpringBoot配置文件详解
    SQL中的limit
    SQL中的union简述
    数据库中的子查询
    数据库中的连接查询
  • 原文地址:https://www.cnblogs.com/LyShark/p/10221781.html
Copyright © 2011-2022 走看看