1、知识回顾
1.1、userdel命令
作用:就是删除用户命令
语法:userdel+选项+用户名
选项:-r:彻底删除用户的相关配置
#删除用户-->如果不带参数的话就会遗留用户的文件
[root@Node1 ~]# userdel utest10
#查询-->可以直接查看到
[root@Node1 ~]# find / -name utest10
/var/spool/mail/utest10
/home/utest10
#如果加了-r选项会彻底删除
[root@Node1 ~]# userdel -r utest9
[root@Node1 ~]# find / -name utest9
[root@Node1 ~]#
1.2、useradd命令
作用:添加用户;
语法:useradd + 选项+ 用户名
选项
- -D:改变新建用户的预设值。
- -c:添加备注文字,
- -d:指定用户每次登陆时所使用的家目录,
- -e:用户终止日期,账号的有效期,账号的过期日期。日期的格式为YYYY-MM-DD
- -f:用户过期几日后永久停权。
- -g:指定用户所属的基本用户组
- -G:指定用户所属的附加用户组
- -k:设置框架目录
- -m:用户目录不存在时则自动创建
- -M 不建立用户家目录,
- -n 取消建立以用户名称为名的群组
- -r 建立系统帐号。
- -u 指定用户id,
- -s 指定用户登入后所使用的shell
#添加普通用户
[root@Node1 ~]# useradd jenny
[root@Node1 ~]#
#添加系统用户
[root@Node1 ~]# useradd -r -s /sbin/nologin mysql
#指定UID等等
[root@Node1 ~]# useradd -u 10225 jenny
1.3、for循环学习
for循环格式:
#语法书名:for循环是让循环直到匹配不到了才停止
#list是一个条件;
#do和done是双向格式,不缺缺少,否则就会报错
#do里面的list就是操作的事项
for 变量 in list
do
list
done
#list可以是命令,可以是脚本等等;
SHELL:可以直接当成一门编程语言
- for 循环:{1…14}–>这个可以表示从1到14
- 如果想选项是一个整体:需要加上双引号
- for i in “1.apple” “2.orange” “3.orange”
#编写一个脚本-->
[root@Node1 sh]# vim for.sh
#!/bin/bash
#把in后面的几个选项赋值给到前面的i,i就是变量;直到in后面的内容全部都赋值给到i了;循环就结束;
for i in CentOS Ubuntu Gentoo Opensuse Rocky
do
echo $i
done
#直接执行查看
[root@Node1 sh]# bash for.sh
CentOS
Ubuntu
Gentoo
Opensuse
Rocky
#如果想要赋值的时候变成
1.Centos
2.Ubuntu
3.Gentoo
这种效果呢?
#这里就需要在编写的时候引入一个双引号括住
[root@Node1 sh]# vim for.sh
#!/bin/bash
for i in "0.CentOS" "1.Ubuntu" "2.Gentoo" "3.Opensuse" "4.Rocky"
do
echo $i
done
#执行检查-->执行成功
[root@Node1 sh]# bash for.sh
0.CentOS
1.Ubuntu
2.Gentoo
3.Opensuse
4.Rocky
#如果在for循环中需要用到1..100这样的数据-->也可以使用中括号{1..100}来表示
[root@Node1 sh]# vim for.sh
#!/bin/bash
for i in {1..100}
do
echo $i
done
#执行起来就是1到100
2、脚本练习
2.1、思维拓展写脚本
要求:
- 编写一个检测ip存活的脚本;
#编写一个检测IP存活的脚本v1版本
[root@Node1 sh]# vim ip_check_v1.sh
#!/bin/bash
#2023年4月26日10:59:58
#Author By LiangGaRy
######################
#定义一个变量,这个变量就是自己的IP段
AA="192.168.75."
#然后把值赋予给变量i
for i in {130..135}
do
#定义一个ip,这个ip就是网段和ip组成的,{}可以把里面的内容看做整体
IP=${AA}${i}
#用if来判断是否能够执行成功,执行成功了,代表IP存活,不成功就是不存活;
if ping -c1 -w1 $IP &> /dev/null ;then
echo "$IP is online"
else
echo "$IP is off line;"
fi
done
#执行命令可以查看
[root@Node1 sh]# bash ip_check_v1.sh
192.168.75.130 is off line;
192.168.75.131 is online
192.168.75.132 is off line;
192.168.75.133 is off line;
192.168.75.134 is off line;
192.168.75.135 is off line;
2.2、编写一个创建用户的脚本
要求:
- 创建10个用户,并且用户名和密码要一致
- 需要显示用户是否创建成功
- 统计总共创建了多少个用户
- 用户名分别是什么
#直接编写一个脚本
[root@Node1 sh]# vim useradd.sh
#首先先统计一下用户数量多少
A1=`cat /etc/passwd | wc -l`
#使用变量,指定创建多少个用户
for i in {1..5}
do
#添加用户,并且设置密码
useradd user$i &> /dev/null
echo user$i | passwd --stdin user$i &> /dev/null
#判断一下用户是否存在,如果存在就输出显示,不存在也输出显示
#这里用了一个否定的非语句,使用了感叹号
if [ !id user$i &> /dev/null ];then
echo "用户创建失败;请重新执行"
else
echo "恭喜你,用户创建成功"
fi
done
#循环结束后需要统计一下创建了多少个
#定义执行过后/etc/passwd文件的多了多少行,并且与A1相减得出
A2=`cat /etc/passwd | wc -l`
AA=$(( $A2 - $A1 ))
echo "总共创建了$AA个用户"
#还有一个需求就是要提取用户名
UU=`grep "user*" /etc/passwd | awk -F: '{print $1}'`
echo "用户名分别是:\n$UU"
#执行查看
[root@Node1 sh]# bash useradd.sh
恭喜你,用户创建成功
恭喜你,用户创建成功
恭喜你,用户创建成功
恭喜你,用户创建成功
恭喜你,用户创建成功
总共创建了5个用户
用户名分别是:
user1
user2
user3
user4
user5
shell脚本的基础语法是固定的,因此;我们需要开拓自己的思维
如何修改脚本达到目录就是我们运维要想的事情
同样的要求
- 创建10个用户,并且用户名和密码要一致
- 需要显示用户是否创建成功
- 统计总共创建了多少个用户
- 用户名分别是什么
#编写一个脚本
[root@Node1 sh]# vim useradd_v1.sqh
for i in user{1..5}
do
#删除,原来可能存在的用户;避免影响统计结果
userdel -r ${i}
done
#然后再来一个for循环,这个循环才是要求添加的
for j in user{1..5}
do
useradd $j
#接着就是判断,判断执行的命令是否成功
if [ $? -eq 0 ];then
#成功就输出成功
echo "创建用户:$j 成功"
#然后统计num的值
let num++
#给用户赋值密码
echo $i | passwd --stdin $j &> /dev/null
else
echo "创建用户:$j 失败"
fi
done
echo "总共创建用户数量为: $num"
#执行脚本
[root@Node1 sh]# bash useradd_v1.sqh
创建用户:user1 成功
创建用户:user2 成功
创建用户:user3 成功
创建用户:user4 成功
创建用户:user5 成功
总共创建用户数量为: 5
3、权限讲解
3.1、Linux的权限
如果使用ls -l 来查看文件,可以发现前面第一列就带有权限的信息
#查看权限ls -l
[root@Node1 ~]# touch liangjiawei
[root@Node1 ~]# ls -l liangjiawei
-rw-r--r-- 1 root root 0 May 26 12:21 liangjiawei
#单独拉出来第一列来分析
#大概分为9个字母
- rw- r-- r--
#详细说明
第一位:
-:文件
d:目录
p:管道
l:符号链接
s:socket文件
c:字符设备,tty1 tty3
b:块设备,sda、sdb
rw-:这里代表所有者权限
r--:这里代表所属组权限
r--:这里代表其他人权限
3.2、权限说明
三种权限:
- 只允许自己访问
- 允许一个预先指定的用户组访问
- 允许系统中任意用户访问
r(可读权限)–>用数字4第阿彪
w(可写权限)–>用数字2表示
x(可执行权限)–>用数字1表示
权限对于文件来说
- r:可读权限–>可以cat 、more less、等等
- w:可写权限–>可以vim
- x:可执行,代表二进制的可执行
权限对于目录来说
- r:可读权限–>可以ls目录下的文件
- w:可写权限–>可以mv 、cp、touch等等操作
- x:可执行–>目录没有可执行的说法,因此用cd说明
权限也会分配给所有者、所属组、其他人等
常见的用法如下:
- rwx:表示可读可写可执行
- r-x:表示可读、可执行
- rw-:表示可读可写
3.3、权限与数字的关系
x=1
w=2
r=4
没有任何的权限就是:000
--- 000 0 没有任何权限
--x 001 1 只有执行权限
-w- 010 2 只有可写权限
-wx 011 3 可写可执行
r-- 100 4 只读权限
r-x 101 5 可读可执行权限
rw- 110 6 可写可读权限
rwx 111 7 可读可写可执行权限
4、相关命令讲解
4.1、chown命令
作用:修改属主和属组
语法:
- chown 所有者:所属组 文件名–>修改文件的所有者和所属组
- chown 所有者 文件名–>仅仅修改文件的所有者
- chown .所属组 文件名–>仅修改文件的所属组
#修改所有者和所属组
[root@Node1 ~]# chown liangjiawei:liangjiawei liangjiawei
#查看一下权限
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 liangjiawei liangjiawei 0 May 26 12:21 liangjiawei
#仅修改文件的所属组
[root@Node1 ~]# chown .jenny liangjiawei
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 liangjiawei jenny 0 May 26 12:21 liangjiawei
#仅仅修改所有者
[root@Node1 ~]# chown root liangjiawei
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 root jenny 0 May 26 12:21 liangjiawei
4.2、chgrp命令
作用:修改文件的属组
语法:chgrp + 属组 + 文件名
选项:
- -R:可以递归改变所属组
#修改文件的所属组
[root@Node1 ~]# chgrp liangjiawei liangjiawei
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 root liangjiawei 0 May 26 12:21 liangjiawei
#递归改变所属组
[root@Node1 ~]# chgrp -R jenny liangjiawei
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 root jenny 0 May 26 12:21 liangjiawei
#如果一个文件只有只读的权限,文件的所有者是可以对文件进行修改的;
4.3、chmod命令
作用:修改文件的权限
语法:chmod +/-/= 权限(rwx) + 文件名
说明:
- +:添加权限
- -:减少权限
- =:直接赋值权限
- r:只读权限
- w:可写权限
- x:可执行权限
#直接赋予权限
[root@Node1 ~]# ll liangjiawei
-rw-r--r-- 1 root jenny 0 May 26 12:21 liangjiawei
[root@Node1 ~]# chmod 755 liangjiawei
[root@Node1 ~]# ll liangjiawei
-rwxr-xr-x 1 root jenny 0 May 26 12:21 liangjiawei
4.4、stat命令
作用:查看文件状态
语法:stat+ 文件名
[root@Node1 ~]# stat liangjiawei
File: ‘liangjiawei’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fd00h/64768d Inode: 33574989 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 1018/ jenny)
Access: 2023-05-26 12:21:45.036608206 +0800
Modify: 2023-05-26 12:21:45.036608206 +0800
Change: 2023-05-26 14:40:51.724108144 +0800
Birth: -