Linux运维初步---第三周


写作:N27_loong 2017-7-27
[TOC]

一 本周内容回顾

学习要点

第五天:
1、Linux文件权限rwx及文件属性讲解
2、Linux文件权限表示法:赋权表示、授权表示、数值表示法
3、Linux文件权限管理命令:chmod、chown、chgrp
4、Linux默认权限umask、隐藏属性chattr、lsattr、
5、bash编程基础之逻辑组合与或非
6、bash脚本编程配置文件profile类、bashrc类、以及logout类文件详解
7、基本正则表达式及扩展正则表达式精讲
8、文本搜索工具:grep, egrep, fgrep
9、文本查看及处理工具wc, cut, sort, uniq, diff, patch详解"

第六天:
1、vim编辑:vim的三种模式之命令模式、编辑模式、末行模式之间的切换,以及快捷键的使用
2、vim进阶:可视化模式、文件查找、多窗口模式
3、bash脚本编程之算术运算let VAR=算术表达式、VAR=$[算术表达式]、VAR=$((算术表达式))、VAR=$(expr $ARG1 $OP $ARG2)
4、文件查找非实时查找locate命令讲解
5、文件实时查找find命令查找条件:-name、-iname、-regex、-user、-group、-nouser、-type、-size、-perm,处理动作-print、-ls、-delete、-fls 、-ok 、-exe及xargs命令的学习
6、特殊权限SUID、SGID、SBIT和facl文件访问控制命令讲解"

二 练习题

1.列出当前系统上所有登录的用户的用户名,同一用户多次登录的只显示一次。
[root@centos ~]# who
root     tty1         2020-03-06 10:56
root     pts/0        2020-03-18 14:36 (172.16.7.186)
root     pts/1        2020-03-18 15:43 (172.16.7.186)
lw       pts/2        2020-03-18 15:48 (172.16.7.186)
[root@centos ~]# who |cut -d' ' -f1|sort -u
lw
root
[root@centos ~]# 
2.取出最后登录到当前系统的用户的相关信息
[root@centos ~]# who
root     tty1         2020-03-06 10:56
root     pts/0        2020-03-18 14:36 (172.16.7.186)
root     pts/1        2020-03-18 15:43 (172.16.7.186)
lw       pts/2        2020-03-18 15:48 (172.16.7.186)
[root@centos ~]# who |cut -d' ' -f1|tail -1|xargs id
uid=500(lw) gid=500(lw) 组=500(lw)
[root@centos ~]# 

扩展 :xargs命令:
功能:从标准输入读取命令参数或执行命令。上面的命令表示,用who列出所有用户登录信息,然后传送到cut进行截取,截取出用户名列表,再传送给tail命令取出最后一条信息,最后通过xargs命令将其做为id的命令参数。这样就读取了最后一个登录用户的信息。

3.取出当前系统上被用户当作其默认shell的最多的那个shell
pi@raspberrypi:~ $ cat /etc/passwd |cut -d: -f7|uniq -c|sort -n|tail -1
     13 /usr/sbin/nologin
pi@raspberrypi:~ $ 

说明
1、cat /etc/passwd |cut -d: -f7 :读出passwd文件的内容并传递给cut命令,在cut命令中-d指定以:做分隔符,显示第7个字段,即用户的默认shell
2、结果传递到uniq命令,使用-c选项对文本中重复的行(shell)出现的次数进行计数,可以统计出各个默认shell的使用次数。
3、结果再传递到sort命令,使用-n选项,按数字从小到大排序,使用次数最多的shell因为数字大,会排在最后一行。此时用tail -1输出最后一行结果即可。

4. 将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
pi@raspberrypi:~ $ cat /etc/passwd |sort -t : -k 3 -n|tail -10|cut -d : -f1|tr [a-z] [A-Z]>/tmp/maxuser.txt
pi@raspberrypi:~ $ cat /tmp/maxuser.txt 
SSHD
AVAHI
LIGHTDM
EPMD
COLORD
SANED
HPLIP
PI
MUDTEST
NOBODY
pi@raspberrypi:~ $

步骤说明
1、 cat /etc/passwd 读出文件内容,|传递给sort命令
2.、sort -t : -k 3 -n : -t参数指定passwd文件字段的分隔符,-k参数指定要排序的字段,-n参数指定以数字大小进行排序。sort命令会对passwd文件进行重新排序。
3、tail -10:仅显示文件尾部的最后10行,也就是第三个字段数字最大的后10个用户。
4、cut -d : -f1 :表示对上个结果文本剪切。-d 指定分隔符,-f指定字段
5、tr [a-z] [A-Z]:tr为对位转换命令,将小写字母一一对应的转换为大写字母
6、>/tmp/maxuser.txt:>表示重定向输出到文件,将上个命令结果存入指定文件中。

5. 取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
pi@raspberrypi:~ $ ifconfig|grep -E "\.*\.*"
        inet 192.168.31.47  netmask 255.255.255.0  broadcast 192.168.31.255
pi@raspberrypi:~ $ 
6 列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中
[root@MiWiFi-R3-srv ~]# cd /etc && ls *.conf|tr [a-z] [A-Z]>/tmp/etc.conf
[root@MiWiFi-R3-srv etc]# cat /tmp/etc.conf
ASOUND.CONF
CHRONY.CONF
DRACUT.CONF
E2FSCK.CONF
GEOIP.CONF
HOST.CONF

首先cd到etc目录,命令成功执行ls命令,将结果通过tr命令转换后重定向输出到指定文件。
也可以

[root@MiWiFi-R3-srv etc]# ls /etc|grep -o ".*\.conf\$"|tr [a-z] [A-Z]>/tmp/etc1.conf
[root@MiWiFi-R3-srv etc]# diff /tmp/etc.conf /tmp/etc1.conf 
[root@MiWiFi-R3-srv etc]# 

首先列出etc目录的文件列表,传送给grep命令,-o选项控制仅输出和模式匹配的文本,再用tr命令转换后保存到指定文件。用diff命令可以比较上个方法产生结果文件是否有差异,无输出则表示无差异。

7.显示/var目录下一级子目录或文件的总个数
[root@MiWiFi-R3-srv ~]# ls -a /var|sort |wc -l
23

wc 选项 -l:统计行数,-c:统计字节数,-d:统计单词数

8.取出/etc/group文件中第三个字段数值最小的10个组的名字
[root@MiWiFi-R3-srv ~]# cat /etc/group|sort -n -t : -k 3|cut -d : -f1|head -10
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem
[root@MiWiFi-R3-srv ~]# 
9.将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中
[root@MiWiFi-R3-srv ~]# cat /etc/fstab /etc/issue >> /tmp/etc.test
[root@MiWiFi-R3-srv ~]# cat /tmp/etc.test 
UUID=29b74cbb-382b-49ea-91c8-f1dcb9cae36c  / ext4    defaults,noatime 0 0
UUID=FE5A-B773  /boot vfat    defaults,noatime 0 0
UUID=b0c2039d-218d-47ba-9c9f-dffb7df77228  swap swap    defaults,noatime 0 0
\S
Kernel \r on an \m

10 请总结描述用户和组管理类命令的使用方法并完成以下练习
  • 1 创建组distro,其GID为2016
[root@centos ~]# groupadd -g 2016 distro
[root@centos ~]# tail  -1 /etc/group
distro:x:2016
  • 2 创建用户mandriva,其ID号为1005,基本组为distro
[root@centos ~]# useradd -u 1005 -g distro mandriva
[root@centos ~]# tail -2 /etc/passwd
gentoo:x:502:502::/home/gentoo:/bin/bash
mandriva:x:1005:2016::/home/manddriva:/bin/bash

  • 3 创建用户mageia,其id号为1100,家目录为/ home/linux;
[root@centos ~]# useradd -u 1100 -d /home/linux mageia
[root@centos ~]# tail -2 /etc/passwd
mandriva:x:1005:2016::/home/mandriva:/bin/bash
mageia:x:1100:1100::/home/linux:/bin/bash

  • 4 给用户mageia添加密码,为mageedu
[root@centos ~]# echo "mageedu"|passwd --stdin mageia
更改用户 mageia 的密码 。
passwd: 所有的身份验证令牌已经成功更新。
  • 5 删除mandriva,但是保留家目录
[root@centos ~]# userdel mandriva
[root@centos ~]# ls /home
c_primer6  gentoo  linux  lost+found  lw  mandriva

  • 6 创建用户slackware,其id号为2002,基本组为distro,附加组peguin;
[root@centos ~]# useradd -u 2002 -g distro -G peguin slackware
useradd: group 'peguin' does not exist
[root@centos ~]# groupadd peguin
[root@centos ~]# useradd -u 2002 -g distro -G peguin slackware
[root@centos ~]# tail -1 /etc/passwd
slackware:x:2002:2016::/home/slackware:/bin/bash
[root@centos ~]# tail -5 /etc/group
gentoo:x:502:
magedu:x:503:gentoo,fedora
distro:x:2016:
mageia:x:1100:
peguin:x:2017:slackware

  • 7 修改slackware的默认shell为/bin/tcsh;
[root@centos ~]# usermod -s /bin/tcsh slackware
[root@centos ~]# tail -2 /etc/passwd
mageia:x:1100:1100::/home/linux:/bin/bash
slackware:x:2002:2016::/home/slackware:/bin/tcsh
[root@centos ~]# 

  • 8 为用户slackware新增附加组admins;
[root@centos ~]# groupadd admins
[root@centos ~]# usermod -a -G admins slackware
[root@centos ~]# tail -2 /etc/group
peguin:x:2017:slackware
admins:x:2018:slackware
[root@centos ~]# id slackware
uid=2002(slackware) gid=2016(distro) 组=2016(distro),2017(peguin),2018(admins)
/*也可以通过gpasswd命令来给组添加用户
[root@centos ~]# gpasswd -a slackware admins
Adding user slackware to group admins


用户和组的管理命令:

一 用户和组管理:

  • linux用户分为管理员用户(root)和普通用户,普通用户又分为系统用户登录用户。系统用户仅用于运行服务程序,可以不用登录到系统上;登录用户是实际的系统资源的使用者。
  • 用户组:为一批用户统一授权的容器,相同权限用户的集合。组为管理员组和普通用户组。普通用户组也分为系统用户组和登录用户组。
  • 用户id和组id:linux系统使用16位二进制数字来标识用户和组。用户标识叫userid或UID,组标识为groupid或GID。可标识范围为0 ~ 65535。用户中root用户标识为0,系统用户标识占用1 ~ 999(centos7),普通用户占用1000+范围。管理员组标识号也为0,系统用户组占用1 ~ 999(centos7),登录用户组占用1000+范围。
  • 组类别:从用户上来看分为用户的主组(基本组)和附加组。从组中成员看可分用户私有组(组名与用户名相同且只有一个此用户)和公共组(包含了多个用户)
  • 用户信息库和组信息库:用户信息库保存在/etc/passwd文件中,分为 以下七个段内容。

name:password:UID:GID:GECOS:directory:shell
密码实际保存在/etc/shadow中,GID指用户基本组,gecos指用户注释,后面为用户家目录和默认shell

组信息库保存在/etc/group中,组密码保存在/etc/gshadow。组信息库分为以下内容:

GRGNAME:x:GID:user1,user2,...
user1,user2:表示以此组为附加组的用户列表。

  • 相关命令 useradd,usermod,userdel,groupmod,groupadd,groupdel,passwd.
    • 1 groupadd命令:添加组。
      -g,指明组id号;
      -r,创建系统组;
    • 2 groupmod:修改组信息
      -g,修改组gid;
      -n,修改组名;
    • 3 groupdel:删除组
    • 4 useradd:添加用户
      -c:用户注释,一般是用户全名;
      -d:指定用户家目录。目录不能事先存在,否则会有警告信息,不会得到skel相关文件给用户
      -g:设定用户的基本组组名或GID
      -G:设定用户所属的附加组列表,彼此间用逗号隔开,中间没有空格
      -m:强制创建用户家目录
      -M:不创建用户家目录
      -s:指定用户默认shell。安全shell列表为/etc/shells文件中的shell
      -u:设定用户的UID;用户 ID 的数字值。此值必须为唯一的,除非使用了 -o选项,此值必须非负,默认使用大于等于 UID_MIN,且大于任何其他用户ID 最小值
      -o:允许使用重复的UID创建用户账号
      useradd -D:显示创建用户时的默认设置,即显示的是/etc/default/useradd文件内容;
      useradd -D 选项:设置某默认选项;设置的也是/etc/default/useradd文件内容;
      例: ~]# useradd -D -s /bin/tcsh
      -e, --expiredate EXPIRE_DATE:设定禁用日期,用户账号的过期期限,过期后会被锁定;格式为YYYY-MM-DD;
      注意:这个与密码过期时间是没有关系的;
      -f, --inactive INACTIVE:设置非活动期,密码过期后,账户被彻底禁用之前的天数。0 表示密码过期后账户立即禁用,-1 表示禁用这个功能;
  • 5 userdel:删除用户命令
    userdel [选项] 登录名
    -r: 删除用户时,同时一并删除用户家目录和用户邮箱.用户邮箱在/var/spool/mail/目录下
  • 6 usermod命令:修改用户的帐户信息。用法:usermod [选项] 登录名
    -c, --comment COMMENT:修改注释信息;
    -d, --home HOME_DIR:修改家目录为新的位置,但一般应该同时使用-m选项以保证原家目录中的文件会移动到新目录中;
    -e, --expiredate EXPIRE_DATE:修改禁用日期;格式为YYYY-MM-DD;
    -f, --inactive INACTIVE:修改非活动期;
    -g, --gid GROUP:修改基本组GID;
    -G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改附加组,修改时会覆盖原有的附加组,一同使用-a选项,表示为用户追加添加新的附加组;
    -a, --append:将用户添加到附加组。只能和 -G 选项一起使用
    -l, --login NEW_LOGIN:修改当前用户的用户名;
    -s, --shell SHELL:修改用户登录的shell;
    -u, --uid UID:修改用户UID,这个值必须是唯一的,除非使用了-o选项,必须是非负值;
    -o,--non-unique:用户ID改为非唯一值;
    -L, --lock:锁定用户密码,这会在用户加密的密码之前放置一个!;
    -U, --unlock:解锁用户的密码;这将移除加密的密码之前的!;

创建用户时的默认配置文件:
/etc/login.defs
定义了:mail目录路径、密码相关的期限(最长、最小、警告)和密码最少长度、最小用户uid、最大用户uid、最小系统用户uid、最大系统用户uid、最小组gid、最大组gid、最小系统组gid、最大系统组gid、是否自动创建家目录等内容;
/etc/default/useradd
定义默认设置了:用户的家目录路径、默认shell、目录骨架等内容;
创建用户时家目录的环境配置文件:就是创建用户后,系统会自动创建用户家目录且会在里面自动创建几个固定文件即骨架目录(.bash_logout .bash_profile .bashrc .mozilla);是从/etc/skel里复制到家目录的;
/etc/skel:家目录骨架;

  • 7 用户影子口令文件/etc/shadow和passwd命令
    密码文件/etc/shadow格式:9个字段,用冒号分隔

登录名:加密了的密码:最近一次更改密码的日期:密码的最短使用期限:密码最长使用期限:密码过期提前警告天数:非活动期:账户禁用日期:保留字段

1、登录名:有效登录名;
2、加密的密码:密码格式为:
!!$加密算法$salt$加密的密码字符串
!!表示锁定;
3、最近一次更改密码的日期:表示从1970年1月1日开始的天数,0表示用户应该在下次登录系统时更改密码,空字段表示密码年龄功能被禁用;
4、密码最短使用期限:用户一次更改密码之后,要等多长时间才再次被允许更改密码;空或0表示随时可修改密码;
5、密码最长使用期限:就是有效期,相对于上次修改密码后的天数;99999天无限制,如果最大密码年龄小于最小密码年龄,用户将会不能更改密码;
6、最短警告期限:登录就警告;
7、非活动期:密码过期后账号禁用之前,就是宽限期;登录后必须先改密码;空为没限定;
禁用日期:
passwd命令:密码管理命令
常用选项:
-l:锁定密码;
-u:解锁密码;
-f:强制;
-d:清除密码;
-e:修改禁用日期:
-n:修改密码最短使用期限;
-x:修改密码最长使用期限;
-w:修改密码过期后警告期限;
-i:修改非活动期限;
--stdin:从标准输入设置密码
例: echo "PASSWD" | passwd --stdin USERNAME

  • 8 id 命令:查看用户相关id信息,显示结果包括UID、基本组GID和所有组(包括附加组和基本组)
    -u:仅查看UID;
    -g:仅查看基本组GID;
    -G:查看所属的所有组ID;
    -n:显示名称,而非ID;
  • 9 gpasswd:组密码修改命令
    组密码文件:/etc/gshadow
    /etc/gshadow文件格式:
    组名:加密了的组密码:管理员:成员

1、组名:必须是系统中已经存在的有效组;
2、加密了的组密码:密码格式为: !!$加密算法$salt$加密的密码字符串
为空时只有组成员可以获取组权限;以叹号开始意味着密码被锁定;
3、管理员:
4、成员:必须是一个逗号分隔的用户名列表,成员无需组密码;

gpasswd [选项] group
-a, --add USERNAME:向组中添加用户;
-d, --delete USERNAME:从此组中移除用户;

你可能感兴趣的:(Linux运维初步---第三周)