1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
使用who命令查看
例子:
[[email protected] ~]# 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命令查看
[[email protected] ~]# 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。
[[email protected] 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文件中。
效果如下
[[email protected] etc]# sort -n -k 3 -t":" /etc/passwd | tail -n 10 | tr [a-z] [A-Z] > /tmp/maxusers.txt [[email protected] 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命令的结果进行切分。
效果如下,这里我使用两种方法截取地址,方法很多不一一演示,喜欢的朋友可以自己尝试。
[[email protected] 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 [[email protected] etc]# ifconfig | egrep "eno1677|eth0" -A1 |grep inet | awk ‘{print $2}‘ 192.168.2.104 [[email protected] 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目录下一级子目录或文件的总个数。
[[email protected] var]# ls -l | grep "^[d|-]" | wc -l 17
8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
[[email protected] 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 打印单词数
注:以上命令介绍均来源网络收集。