1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。

使用who命令查看

例子:

[root@test ~]# who
root     pts/0        2016-08-19 10:41 (192.168.2.102)
developer pts/3        2016-08-19 10:41 (192.168.2.102)

上述输出结果解释:用户名、tty号、时间日期、主机地址


2、取出最后登录到当前系统的用户的相关信息。


 使用last命令查看

[root@test ~]# last -x -n 3 root
root     pts/0        192.168.2.102    Fri Aug 19 10:41   still logged in   
root     pts/2        192.168.2.102    Fri Aug 19 10:31 - 10:41  (00:09)    
root     pts/1        192.168.2.102    Fri Aug 19 09:43 - 10:41  (00:57)


上述输出结果解释:用户名、tty号、登录的IP地址、登录的时间日期、登出的时间 终端工作时长


3、取出当前系统上被用户当作其默认shell的最多的那个shell。

[root@bogon etc]#  cut -d: -f7 /etc/passwd|uniq -c|sort -n |tail -n 1 |awk '{print $2}'
/sbin/nologin


4、将/etc/passwd 中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。

效果如下

[root@bogon etc]# sort -n -k 3 -t":" /etc/passwd | tail -n 10 | tr [a-z] [A-Z] > /tmp/maxusers.txt
[root@bogon etc]# sort -n -k 3 -t":" /etc/passwd | tail -n 10 | tr [a-z] [A-Z] 
SYSTEMD-NETWORK:X:998:996:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
SYSTEMD-BUS-PROXY:X:999:997:SYSTEMD BUS PROXY:/:/SBIN/NOLOGIN
NGINX:X:1000:1000::/HOME/NGINX:/SBIN/NOLOGIN
MYSQL:X:1001:1001::/HOME/MYSQL:/BIN/FALSE
BSB:X:1002:1002::/HOME/BSB:/SBIN/NOLOGIN
SLACKWARE:X:2016:1004::/HOME/SLACKWARE:/BIN/BASH
BBB:X:2017:2017::/HOME/BBB:/BIN/BASH
BSBD:X:2018:2018::/HOME/BSBD:/BIN/BASH
OPENSTACK:X:2019:2019::/HOME/OPENSTACK:/BIN/BASH
NFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGIN


5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。


效果如下,这里我使用两种方法截取地址,方法很多不一一演示,喜欢的朋友可以自己尝试。

[root@bogon etc]# ifconfig 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.104  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::20c:29ff:fea3:b9d9  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:a3:b9:d9  txqueuelen 1000  (Ethernet)
        RX packets 86190  bytes 23306723 (22.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 26301  bytes 20574763 (19.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 7184  bytes 2394467 (2.2 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7184  bytes 2394467 (2.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@bogon etc]# ifconfig | egrep "eno1677|eth0" -A1 |grep inet | awk '{print $2}'
192.168.2.104
[root@bogon etc]#ifconfig eth0 | grep 'inet addr'| awk '{print $2}' | tr -d "addr:"


6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。

ls /etc/ | grep -E ".conf$" | tr [a-z] [A-Z] > /tmp/etc.conf


7、显示/var目录下一级子目录或文件的总个数。

[root@bogon var]# ls -l | grep "^[d|-]" | wc -l
17


8、取出/etc/group文件中第三个字段数值最小的10个组的名字。

[root@bogon var]# sort -n -t ":" -k 3 /etc/group | head -n 10 | cut -d: -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem


9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。

 cat /etc/fstab /etc/issue >>/tmp/etc/test
 讲解:如上操作是把cat查看到issue文件中的内容追加到test当中,>>表示追加不覆盖>清空原来内容并追加issue内容到test中,在使用过程中一定要注意区分。老鸟玩家可以略过,给新人给提个醒。


10、请总结描述用户和组管理类命令的使用方法并完成以下练习:


   (1)、创建组distro,其GID为2016;

   groupadd distro -g 2016

   (2)、创建用户mandriva, 其ID号为1005;基本组为distro;  

   useradd mandriva -u 1005 -g distro

   (3)、创建用户mageia,其ID号为1100,家目录为/home/linux;

   useradd mageia -u 1100 -s -d /home/linux

   (4)、给用户mageia添加密码,密码为mageedu;

    echo ‘mageedu’| passwd --stdin mageia

   (5)、删除mandriva,但保留其家目录;

   userdel mandriva

   (6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

   useradd slackware -u 2002 -g distro -G peguin

   (7)、修改slackware的默认shell为/bin/tcsh;

   usermod  -s slackware /bin/tcsh

   (8)、为用户slackware新增附加组admins;

     groupadd admins
   usermod slackware -a -G admins
   usermod slackware -G admins

   注:如上两条命令都是一样的效果的,-a一般跟着-G一起使用,默认可以去掉,这里提一下。

   

   (9)、为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天; 

   echo "5858888" |passwd --stdin slackware && chage -W 3 -E 180 -I 3 slackware

   注:&&简单点描述,表示执行完成上一个操作后,跟着执行后面的操作,老鸟忽略,提供给新手理解。

   (10)、添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova;

   useradd openstack -u 3003 -g clouds -G peguin,nova

   (11)、添加系统用户mysql,要求其shell为/sbin/nologin;  

     useradd test -s /sbin/nologin

   (12)、使用echo命令,非交互式为openstack添加密码。

   echo "5858888" |passwd --stdin openstack

总结:

       本章学习中,出现的命令有,tr ,sort ,useradd ,usermod ,ls ,groupadd ,echo ,tail ,cut ,awk ,head ,wc.等命令,因为在日常工作中时常会有所忘记,这里对部分命令的用法做个讲解,以备日后之需。 

1、tr

用法:tr [选项]... SET1 [SET2]
从标准输入中替换、缩减和/或删除字符,并将结果写到标准输出。
-c:首先补足SET1
-d:删除匹配SET1 的内容,并不作替换
-s:如果匹配于SET1 的字符在输入序列中存在连续的        
-t:先将SET1 的长度截为和SET2 相等
SET 是一组字符串,一般都可按照字面含义理解。解析序列如下:
  \NNN    八进制值为NNN 的字符(1 至3 个数位)
  \\        反斜杠
  \a        终端鸣响
  \b        退格
  \f        换页
  \n        换行
  \r        回车
  \t        水平制表符
  \v        垂直制表符

2、usermod

-a|--append     ##把用户追加到某些组中,仅和-G参数结合使用 
-c|--comment     ##修改/etc/passwd文件第五段comment 
-d|--home     ##修改用户的家目录通常和-m选项一起使用 
-e|--expiredate  ##指定用户帐号禁用的日期,格式YY-MM-DD 
-f|--inactive   ##用户密码过期多少天后采用就禁用该帐号,0表示密码已过期就禁用帐号,-1表示禁用此功能,默认值是-1
-g|--gid     ##修改用户的gid,改组一定存在
-G|--groups    ##把用户追加到某些组中,仅与-a选项一起使用 
-l|--login    ##修改用户的登录名称 
-L|--lock    ##锁定用户的密码 
-m|--move-home ##修改用户的家目录通常和-d选项一起使用 
-s|--shell   ##修改用户的shell 
-u|--uid    ##修改用户的uid,该uid必须唯一 
-U|--unlock  ##解锁用户的密码


3、useradd

useradd命令用来建立用户帐号和创建用户的起始目录,使用权限是终极用户。
2.格式
useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name
3.主要参数
-c:加上备注文字,备注文字保存在passwd的备注栏中。 
-d:指定用户登入时的启始目录。
-D:变更预设值。
-e:指定账号的有效期限,缺省表示永久有效。
-f:指定在密码过期后多少天即关闭该账号。
-g:指定用户所属的起始群组。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-n:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。
-u:指定用户ID号。

4、groupadd

groupadd [-g gid] [-o]] [-r] [-f] groupname
-g gid:指定组ID号。
-o:允许组ID号,不必惟一。
-r:加入组ID号,低于499系统账号。
-f:加入已经有的组时,发展程序退出。

5、cut

cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]
使用说明
cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。
主要参数
-b :以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除

6、awk

awk命令形式:
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file
 [-F|-f|-v]   大参数,-F指定分隔符,-f调用脚本,-v定义变量 var=value
'  '          引用代码块
BEGIN   初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置FS分隔符
//           匹配代码块,可以是字符串或正则表达式
{}           命令代码块,包含一条或多条命令
;          多条命令使用分号分隔
END      结尾代码块,在对每一行进行处理之后再执行的代码块,主要是进行最终计算或输出结尾摘要信息
 
特殊要点:
$0           表示整个当前行
$1           每行第一个字段
NF          字段数量变量
NR          每行的记录号,多文件记录递增
FNR        与NR类似,不过多文件记录不递增,每个文件都从1开始
\t            制表符
\n           换行符
FS          BEGIN时定义分隔符
RS       输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~            匹配,与==相比不是精确比较
!~           不匹配,不精确比较
==         等于,必须全部相等,精确比较
!=           不等于,精确比较
&&      逻辑与
||             逻辑或
+            匹配时表示1个或1个以上
/[0-9][0-9]+/   两个或两个以上数字
/[0-9][0-9]*/    一个或一个以上数字
FILENAME 文件名
OFS      输出字段分隔符, 默认也是空格,可以改为制表符等
ORS        输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]'   定义三个分隔符。

7、head

用法:head [选项]... [文件]...
长选项必须使用的参数对于短选项时也是必需使用的。
-c:显示每个文件的前K 字节内容;
                        如果附加"-"参数,则除了每个文件的最后K字节数据外
                        显示剩余全部内容
-n:显示每个文件的前K 行内容;
                        如果附加"-"参数,则除了每个文件的最后K 行外显示
                        剩余全部内容
-q:不显示包含给定文件名的文件头

8、wc

wc命令的功能为统计指定文件中的字节数、单词数、行数, 并将统计结果显示输出
-c, --bytes打印字节数
-m, --chars  打印字符数 
-l, --lines  打印行数 
-L, --max-line-length  打印最长行的长度
-w, --words 打印单词数

注:以上命令介绍均来源网络收集。