作业1

编写一个脚本/root/bin/createuser.sh,脚本的执行语法必须是:createuser.sh -u username -m password,选项与参数间可支持多空格,但不能顺序颠倒。 

当未指定正确的选项或参数时,以错误输出方式提示“createuser.sh -u username -m password ”后退出脚本。

用户名必须以字母开头,可包括数字和_。否则不合法。以错误输出提示用户"用户名仅包含字母数据和下划线"

当用户名检测合法后,判断用户名是否已存在,若存在,再判断用户是否已设置过密码,若设置过密码,直接退出,未设置,则将密码设置为所指定的密码后以正确输出方式显示“username 密码已更新后退出”

当用户名不存在,则创建用户,并为该用户设置所指定的密码后以正确输出方式显示“用户username已创建并更新密码”

要求脚本执行过程中不能有非要求的其他输出结果出现。脚本在非正确方式退出时应反回给?参数非0值。

[ 4 -eq $# ] ||(echo 输入不合法,请输入createuser.sh -u username -m password ; exit 1)||exit 1

username=$2

[ -u == $1 ]&&[[ "$2" =~ ^[[:alpha:]][0-9a-z_]* ]]&&[ -m == $3 ]||(echo "输入不合法,用户名仅包括字母数字下划线";exit 1)||exit 1

mima=$4

id $2 &>/dev/null || (useradd $2 &&echo $4|passwd --stdin $2>/dev/null;echo "用户$2 已创建,密码为$4 ";set --;unset username mima;exit 1)||exit 0

id $2 &>/dev/null && (getent shadow $4 |egrep '\$'[[:digit:]]'\$' &>/dev/null && echo "用户名已存在且密码已创建 ";exit 2)

echo "$4" |passwd --stdin "$2">/dev/null

echo $2密码已更新

set --

unset username mima

exit 0

wKioL1mQc_-CMl6fAABvoYBeoaY665.png

作业2

[ 4 -eq $# ] ||(echo 输入不合法,请输入createuser.sh -u username -m password ; exit 1)||exit 1

username=$2

[ -u == $1 ]&&[[ "$2" =~ ^[[:alpha:]][0-9a-z_]* ]]&&[ -m == $3 ]||(echo "输入不合法,用户名仅包括字母数字下划线";exit 1)||exit 1

mima=$4

id $2 &>/dev/null || (useradd $2 &&echo $4|passwd --stdin $2>/dev/null;echo "用户$2 已创建,密码为$4 ";set --;unset username mima;exit 1)||exit 0

id $2 &>/dev/null && (getent shadow $4 |egrep '\$'[[:digit:]]'\$' &>/dev/null && echo "用户名已存在且密码已创建 ";exit 2)

echo "$4" |passwd --stdin "$2">/dev/null

echo $2密码已更新

set --

unset username mima

exit 0

wKiom1mQc_-BehpPAABCl5WUAhA168.png


交互式登录(登录shell)

使用终端通过用户名密码登录、su - username

执行顺序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

非交互登录 (非登录shell)

su username 、图形界面下打开终端、执行脚本、其他bash实例

执行顺序: ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


常用文件查找命令

find 

-maxdepth level 最大搜索深度

-minxdepth level  最小搜索深度

-name 基于名称的精确查找

-iname 基于名称忽略大小写的精确查找查找

-inum 基于inode查找

-samefile 基于相同inode号的查找(查找硬链接)

-links n 硬链接为n的文件

-regex 支持正则 默认为(emacs标准)

-regextype egrep -regex 支持egrep同标准的正则 

-user 用户名  基于文件owner的查找

-group 组名 基于文件group的查找

-uid userid 基于文件uid的查找

-gid groupid 基于文件gid的查找

-nouser 查找没有owner的文件

-nogroup 查找没有group的文件

-type 基于文件类型的查找

f: 普通文件 

d: 目录文件

l: 符号链接文件 

s:套接字文件 

b: 块设备文件 

c: 字符设备文件 

p: 管道文件

     -perm

      mode:精确权限匹配

      +mode[/mode] 任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+ 从centos7开始淘汰换为/

      -mode   每一类对象都必须同时拥有指定权限,与关系0 表示不关注


     -print 默认

     -delete 直接删除所查找到的文件,不询问。

     -ls 长列出所查找到的文件

     -fls file 将查找到的文件长列出导入到指定文件。

    > file 

     -ok command \; 对查找到的文件当做下一命令的参数去执行(交互式)

     -exec command \; 对查找到的文件当做下一命令的参数去执行(非交互式)执行cp命令不需要询问

文件压缩命令

compress(unncompress)、gzip(gunzip)、bzip2(bunzip)、zip(unzip)、xz

     -d 解压缩

     -k 保留原文件

-c 将结果打印到屏幕上,配合重定向,不会覆盖原文件,但权限会变。

-f 默认不对硬链接数为2及以上的文件压缩,加上f,强制压缩指定文件,而其他同inode的文件硬链接数减1.

-v 显示详细过程。

文件打包命令

tar

-cf 创建包名字  原文件(可以指定多个)

-tf 包名字   显示包中的文件名

-tvf 详细显示包中的文件名

-rf 包名字 新文件名(可以指定多个)

--delete -f 包名字 被删除的文件名(可以指定多个)

-xf 包名字 解出所有的文件到当前目录

-xf 包名字 文件名 解所指定的文件到当前目录

-C 解包到指定目录

-v 显示过程

-Jcf 创建包的名字(.tar.xz) 原文件(可以指定多个) 打包并用xz压缩

-jcf 创建包的名字(.tar.bz2) 原文件(可以指定多个) 打包并用bzip压缩

-zcf 创建包的名字(.tar.gz) 原文件(可以指定多个) 打包并用gzip压缩

-T 指定个列表,包含需要被打包的文件,以换行符为间隔

-X 指定个排除列表,以换行符为间隔

作业3

删除libc.so.6文件,并恢复。禁止用快照,重装。

重启虚拟机、快速按下ESC、选择CD光盘驱动、然后选择rescure installed systerm 救援模式(安装或升级所在的系统、安装系统用基本视频驱动、恢复安装的系统、从当地驱动器驱动、内存测试)选择语言、coutinue、然后有句话“chroot /mnt/sysp_w_picpath”这句话的意思是你的系统将会被挂载到/mnt/sysp_w_picpath目录下,选择OK就好了,接下来进入shall这时你进入的是光盘下的Linux,光盘中有一个完整的Linux系统,然后运行一条命令吧libc.so.6 复制到root下的lib64,注意此时的root是/mnt/sysp_w_picpath

wKioL1mQeeqiwVEdAAAF5anXhBA202.png