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: -
04-26 18:58