当前位置: 首页 > news >正文

运维云计算SRE-第2周

 1. 总结学过的权限,属性及ACL相关命令及选项,示例。

一、Linux安全模型
(一)资源分派
Authentication(认证):验证用户身份,确保登录系统的用户是合法的。
Authorization(授权):根据用户身份设置不同的权限,决定用户可以对系统资源进行哪些操作。
Accouting(审计):记录用户的行为,用于事后审查,例如通过查看登录日志来了解用户的登录情况。
(二)3A认证
是一套针对网络设备的网络访问控制策略安全模型,用于保障网络访问的安全性。
(三)安全上下文
运行中的程序(进程)以进程发起者的身份运行,其访问资源的权限取决于发起者的身份。只有具有相应权限的用户才能执行程序,并且程序在访问文件等资源时,其权限也由发起者的身份决定。
二、用户和组相关概念
(一)用户
用户类型
超级管理员:root用户,UID为0,拥有最高权限,可以对系统进行任何操作。
系统用户:CentOS 6以前为1 - 499,CentOS 7以后为1 - 999,这些用户主要用于给后台程序使用,如nginx、mysql等守护进程。
登录用户:CentOS 6以前为500+,CentOS 7以后为1000+,用于用户进行交互式登录。
(二)用户组
用户组类型
超级管理员组:root组,GID为0,供超级管理员使用。
系统组:CentOS 6以前为1 - 499,CentOS 7以后为1 - 999,用于守护进程获取资源权限分配。
普通组:CentOS 6以前为500+,CentOS 7以后为1000+,供普通登录用户使用。
(三)用户和组的关系
一个用户至少有一个组,其中有一个主组(primary group),创建用户时默认会创建与其同名的组作为主组,用户也可以属于0个或多个附加组(supplementary group)。可以通过组对用户进行批量管理,例如对一个组授权,组内所有用户都能继承该组的权限。
三、用户和组相关配置文件
(一)主要配置文件
/etc/passwd:存储用户及其属性信息,包括登录用户名、密码占位符、UID、所属组ID、用户全名或注释、用户家目录以及用户默认shell等。
/etc/shadow:存储用户密码及其相关属性,如加密后的密码、上次修改密码的时间、密码有效期等信息,只有root用户有读权限。
/etc/group:存储组及其属性信息,包括组名、组密码占位符、组ID以及组成员列表等。
/etc/gshadow:存储组密码及其相关属性,如加密后的组密码、组管理员以及组成员列表等。
(二)文件操作
可以使用专用工具来修改这些文件,如vipw和vigr用于编辑相关文件,pwck和grpck用于检查用户和组相关配置文件的正确性。也可以使用getent命令根据用户名查看配置项。
四、用户和组管理命令
(一)用户管理命令
useradd
用于创建新的Linux用户,可以指定多种选项,如UID、用户组、家目录、shell、是否创建系统用户、是否创建家目录、设置密码、指定附加组等。
usermod
用于修改用户属性,包括修改注释、家目录、过期日期、密码过期后的处理方式、组、附加组、登录名称、锁定或解锁用户帐号、修改密码、修改shell、修改UID等。
userdel
用于删除Linux用户,可以选择是否强制删除以及是否删除家目录和邮件目录。
id
用于查看用户的UID、GID等信息,可以显示详细信息,也可以只显示特定的信息,如主组ID、附加组ID、用户名或组名等。
su
用于切换用户身份,可以进行登录式切换(读取目标用户的配置文件,切换至目标用户的家目录)和非登录式切换(不读取目标用户的配置文件,不改变当前工作目录),还可以在不切换用户的情况下,使用目标用户的权限和环境执行命令。
passwd
用于修改用户密码,可以进行多种操作,如锁定、解锁、删除密码、设置密码有效期、提醒用户密码过期等,普通用户修改自己密码需要先验证当前使用的密码。
chage
用于修改用户密码策略,包括更改密码的时间、设置密码最短有效期、最长有效期、警告期、密码过期后的宽限期以及用户的有效期等,还可以查看用户的密码策略。
(二)组管理命令
groupadd
用于创建组,可以指定组ID、是否为系统组、是否允许重复GID、设置组密码等。
groupmod
用于修改组属性,如修改组ID、组名以及组密码等。
groupdel
用于删除组,强制删除可能导致无主组的用户不可用无法登录。
gpasswd
用于更改组密码,也可以修改附加组的成员关系,在组没有密码的情况下,加组操作只能由root用户进行。
groupmems
用于管理附加组的成员关系,可以添加、删除成员,查看成员列表,清除所有成员等,只有root用户可以更改指定组的成员关系。
五、文件权限管理
(一)权限体系介绍
角色
属主(owner):文件的所有者,通常是创建文件的用户。
属组(group):文件所属的组,用户可以属于多个组,文件所属组决定了组内用户对文件的权限。
其它用户(other):不属于属主和属组的用户。
权限
读(r,4):对文件来说,可查看文件内容;对目录来说,可读取目录中的文件名,但无法查看文件元数据。
写(w,2):对文件来说,可修改文件内容;对目录来说,可在目录中创建文件和删除文件。
执行(x,1):对文件来说,可执行文件,发起一个进程;对目录来说,可进入目录,可查看文件元数据,可查看文件内容。
(二)文件所有者和属组属性操作
chown
用于修改文件的属主和属组,可以只修改所有者、只修改属组或同时修改所有者和属组,还可以根据原属主属组进行修改,支持递归操作以及多种选项,如显示过程、不显示错误信息等。
chgrp
用于只修改文件的属组,支持类似chown的多种选项和操作方式,如递归修改、根据文件修改等。
(三)文件权限操作
chmod
用于修改文件权限,可以使用字符表示法(如u+r表示属主加读权限)或八进制数字表示法(如644表示属主可读写,属组可读,其它用户可读),支持递归操作以及多种选项,如显示过程、不显示错误信息等。
(四)新建文件和目录的默认权限
新建文件的默认权限为666 - umask,新建目录的默认权限为777 - umask。umask值间接影响新建文件和目录的权限,非特权用户umask默认是002,root的umask默认是022,可以通过umask命令查看和修改umask值,并且可以在全局设置文件(如/etc/bashrc、/etc/bash.bashrc或~/.bashrc)中持久保存umask设置。
(五)特殊权限
SUID(4)
作用于二进制可执行文件上,用户执行该文件时将继承此程序所有者的权限。可以通过chmod命令设置SUID权限,例如chmod u+s FILE。
SGID(2)
作用于二进制可执行文件上,用户执行该文件时将继承此程序所有组的权限;作用于目录上,此目录中新建的文件的所属组将自动从此目录继承。可以通过chmod命令设置SGID权限,例如chmod g+s FILE或chmod g+s DIR。
Sticky(1)
作用于目录上,此目录中的文件只能由所有者自己或root来删除。可以通过chmod命令设置Sticky权限,例如chmod o+t DIR。
(六)访问控制列表ACL
ACL权限功能
提供更细粒度的权限控制,可以单独对指定的用户设定各不相同的权限,弥补了rwx权限体系只能将用户分成三种角色的不足。CentOS7默认创建的xfs和ext4文件系统具有ACL功能,CentOS7之前版本需要手动增加。
ACL相关命令
setfacl:用于设置ACL权限,可以修改、删除ACL权限,设置默认ACL,递归执行等操作。
getfacl:用于查看设置的ACL权限

#linux用户管理总结
vipw|vigr  g|--group   #编辑 group 文件
vipw|vigr -p|--passwd   #编辑 passwd 文件
vipw  -s|--shadow   #编辑 /etc/shadow 
vigr  -s|--shadow    #/etc/gshadow 文件
pwck -q|--quiet           #只报告错误,忽略警告
pwck  -r|--read-only       #显示错误和警告,但不改变文件
pwck  -R|--root CHROOT_DIR #chroot 到的目录
pwck  -s|--sort             #通过 UID 排序项目
grpck -r|--read-only          #显示错误和警告,但不改变文件
grpck -R|--root CHROOT_DIR    #chroot 到的目录
grpck -s|--sort               #通过 UID 排序项目
getent passwd|shadow|group|gshadow username #查看passwd|shadow|group|gshadow中username信息id username #查看用户id,用户组id,用户属组
id -a  username  #显示详细信息,默认选项
id -Z|--context username #仅显示安全上下文信息,要开启selinux 配置才有
id -g|--group  username   #仅显示GID,就是只显示主组ID
id -G|--groups  username #显示主组和附加组ID,就是所有组ID
id -n|--name   username  #显示用户名或组名,要组合使用 -nu|-ng|-nG
id -u|--user   username #仅显示UIDsu -m|-p|--preserve-environment username #不重置环境变量
su -g|--group group  username               #指定主组,只有root 切普通用户才能指定此参数
su -|-l|--login    username              #完全切换
su -c|--command command   username          #不切换用户,而是临时使用该用户权限和环境执行命令
su --session-command command    username    #使用上同 -c 选项,但不会创建会话
su -f|--fast     username #向shell 传递 -f 选项(csh 或 tcsh)
su-s|--shell shell  username #切换用户后,指定 /etc/shells中的shell环境, 
su -P|--pty         username#开一个新的终端useradd -u|--uid UID username   #指定UID
useradd -g|--gid GID   username   #指定用户组,-g groupname|--gid GID
useradd -c|--comment COMMENT username  #新账户的 GECOS 字段
useradd -d|--home-dir HOME_DIR  username #指定家目录,可以是不存在的,指定家目录,并不代表创建
useradd s|--shell SHELL username   #指定 shell,可用shell在/etc/shells 中可以查看
useradd -r|--system  username             #创建系统用户,CentOS 6之前 ID<500,CentOS7 以后
useradd  -m|--create-home  username       #创建家目录,一般用于登录用户
useradd  -M|--no-create-home  username     #不创建家目录,一般用于不用登录的用户
useradd -p|--password PASSWORD  username  #设置密码,这里的密码是以明文的形式存在
useradd -o|--non-unique   username        #允许使用重复的 UID 创建用户
useradd -G|--groups GROUP1[,GROUP2,...]   username #为用户指明附加组,组须事先存在
useradd -N|--no-user-group   username    #不创建同名的组,使用users组做主组
useradd -D|--defaults        username    #显示或更改默认的 useradd 配置,/etc/default/useradd
useradd -e|--expiredate EXPIRE_DATE username #指定账户的过期日期 YYYY-MM-DD 格式
useradd -f|--inactive INACTIVE  username     #密码过期之后,账户被彻底禁用之前的天数
useradd -k|--skel SKEL_DIR username#创建家目录,生成默认文件,默认是/etc/skel/,要配合-m
useradd  -K|--key KEY=VALUE username  #不使用 /etc/login.defs 中的默认值,自己指定
useradd-l|--no-log-init username#不将用户添加到最近登录和登录失败记录usermod -c|--comment COMMENT username #修改注释
usermod -d|--home HOME_DIR username    #修改家目录
usermod -e|--expiredate EXPIRE_DATE username   #修改过期的日期,YYYY-MM-DD 格式
usermod -f|--inactive INACTIVE  username     #密码过期之后,账户被彻底禁用之前的天数
usermod -g|--gid GROUP      username  #修改组
usermod -G|--groups GROUPS  username  # 新附加组,原来的附加组将会被覆盖;若保留同时使用-a选项
usermod -a|--append GROUP   username #将用户追加至上边 -G 中提到的附加组中,并不从其它组中删除
usermod -l|--login LOGIN   username          #新的登录名称
usermod -L|--lock    username                #锁定用户帐号,在/etc/shadow 密码栏的增加 !
usermod -m|--move-home username              #将家目录内容移至新位置,和 -d 一起使用
usermod -o|--non-unique  username            #允许使用重复的(非唯一的) UID
usermod -p|--password PASSWORD username #修改密码,这里是明文,如果要修改密码,则要用加密后
usermod -s|--shell SHELL   username  #修改 shell
usermod -u|--uid UID username        #修改 UID
usermod -U|--unlock username          #解锁用户帐号,将 /etc/shadow 密码栏的!拿掉userdel -f|--force  username  #强制删除,哪怕用户正在登录状态
userdel -r|--remove  username #删除家目录和邮件目录passwd -k|--keep-tokens username      #保持身份验证令牌不过期
passwd -d|--delete    username        #删除用户密码,也删除密码锁,仅root有权限操作
passwd -l|--lock      username        #锁定用户密码,仅root有权限操作
passwd -u|--unlock   username         #解锁用户密码,仅root有权限操作
passwd -e|--expire     username       #终止用户密码,用户下次登录成功后要立马修改,仅root
passwd -f|--force     username        #强制执行操作
passwd -x|--maximum=DAYS  username    #指定用户密码最长有效期,仅root有权限操作
passwd -n|--minimum=DAYS username   #指定用户密码最短有效期,仅root有权限操作
passwd -w|--warning=DAYS  username   #在密码过期前多少天开始提醒用户,仅root有权限操作
passwd -i|--inactive=DAYS username  #当密码过期后少天该用户账号会被禁用,仅root有权限操作
passwd -S|--status   username      #查询用户的密码状态,仅root有权限操作
passwd --stdin    username       #从标准输入接收密码,Ubuntu无此选项chage -d LAST_DAY  username#更改密码的时间
chage -m|--mindays username#MIN_DAYS
chage -M|--maxdays username#MAX_DAYS
chage -W|--warndays username#WARN_DAYS
chage -I|--inactive INACTIVE username#密码过期后的宽限期
chage -E|--expiredate EXPIRE_DATE username#用户的有效期
chage -l username#显示密码策略groupadd -f|--force   groupname   #如果组已经存在则成功退出
groupadd -g|--gid GID   groupname  #指定组ID,默认系统分配,指定值不要超过[GID_MIN,GID_MAX]
groupadd -K|--key KEY=VALUE   groupname   #不使用 /etc/login.defs 中的默认值,自己指定,
groupadd -o|--non-unique    groupname     #允许创建有重复 GID 的组
groupadd -p|--password PASSWORD  groupname#为新组使用此加密过的密码
groupadd -r|--system    groupname  #创建一个系统组 CentOS 6之前groupmod -g|--gid GID     groupname #将组 ID 改为 GID
groupmod -n|--new-name NEW_GROUP  groupname #改名为 NEW_GROUP
groupmod -o|--non-unique        groupname #允许使用重复的 GID
groupmod -p|--password PASSWORD  groupname #将密码更改为(加密过的) PASSWORD
groupdel -f|--force  groupname#强制删除 gpasswd  -a|--add username  groupname#向组中添加用户
gpasswd  -d|--delete username  groupname#从组中移除用户
gpasswd  -r|--delete-password  groupname#删除组密码
gpasswd  -R|--restrict        groupname#向其成员限制访问组 GROUP
gpasswd -M|--members USER,...    groupname#批量加组
gpasswd  -A|--administrators ADMIN,...  groupname#批量设组管理员groupmems -g|--group groupname   #更改为指定组 (只有root)
groupmems -a|--add username     #指定用户加入组
groupmems -d|--delete username #从组中删除用户
groupmems -p|--purge groupname  #从组中清除所有成员
groupmems -l|--list   groupname  #显示组成员列表

#linux用户权限总结
chown -c|--changes  filename  #同-v选项,但只显示更新成功的信息
chown -f|--silent|--quiet filename  #不显示错误信息
chown -v|--verbose        filename  #显示过程
chown --dereference        filename #修改的是符号链接指向的文件,而不是链接文件本身
chown -h|--no-dereference   filename#修改的是符号链接文件,而不是其指向的目标文件
chown --from=user:group    filename #根据原属主属组来修改,相当于一个查询条件
chown --no-preserve-root   filename #不特别对待“/”,意思就是将根目录当成普通目录来执行,
chown --preserve-root      filename #不允许在"/"上递归操作
chown --reference=RFILE    filename #复制该文件的属主属组信息给指定文件
chown-R|--recursive        filename#递归操作
#下列选项配合 -R 使用
chown -H                   filename #如果参数是指向目录的软链接,则只修改指向的目录,
chown -L                   filename #更改所有遇到的符号链接指向的目录
chown -P                   filename #不更改符号链接指向的目录chgrp -c|--changes     filename      #同-v选项,但只显示更新成功的信息
chgrp -f|--silent|--quiet  filename  #不显示错误信息
chgrp -v|--verbose      filename     #显示过程
chgrp --dereference       filename   #修改的是符号链接指向的文件,而不是链接文件本身
chgrp -h|--no-dereference  filename  #修改的是符号链接文件,而不是其指向的目标文件
chgrp --no-preserve-root    filename #不特别对待“/”,意思就是将家目录当成普通目录来执行
chgrp --preserve-root     filename   #不允许在"/"上递归操作
chgrp --reference=RFILE   filename   #复制该文件的属主属组信息给指定文件
chgrp -R|--recursive      filename   #递归操作
#下列选项配合 -R 使用,
chgrp -H         filename   #如果参数是指向目录的软链接,则只修改指向的目录,不改变目录里面文件
chgrp -L          filename#更改所有遇到的符号链接指向的目录
chgrp -P           filename #不更改符号链接指向的目录chmod -c|--changes      filename    #同-v选项,但只显示更新成功的信息
chmod -f|--silent|--quiet  filename  #不显示错误信息
chmod -v|--verbose         filename #显示过程
chmod --no-preserve-root   filename #不特别对待“/”,意思就是将家目录当成普通目录来执行
chmod --preserve-root      filename  #不允许在"/"上递归操作
chmod --reference=RFILE    filename  #根据其它文件权限来操作,复制该文件的权限信息给指定文件
chmod -R|--recursive     filename   #递归操作umask  -p    #如果省略 MODE 模式,以可重用为输入的格式输入
umask  -S    #以字符显示
umask  u=rw,g=r,o= #设置创建文件权限chmod u+s filename... #添加文件SUID权限
chmod 4xxx filename #添加文件SUID权限 
chmod u-s filename...#去除文件SUID权限
chmod g+s filename... #添加文件SGID权限
chmod 2xxx filename#添加文件SGID权限
chmod g-s filename...#添加文件SGID权限
chmod o+t dirname...#添加文件Sticky权限
chmod 1xxx dirname #添加文件Sticky权限
chmod o-t dirname...#添加文件Sticky权限
chattr -p filename #设置文件项目编号
chattr -R  filename   #递归执行
chattr -V   filename  #显示过程,并输出chattr 版本
chattr -f  filename   #不输出错误信息
chattr -v version filename #设置版本
lsattr filename #显示文件属性setfacl -m|--modify=acl   filename      #修改acl权限
setfacl -M|--modify-file=file filename#从文件读取规则
setfacl -x|--remove=acl    filename     #删除文件acl 权限
setfacl -X|--remove-file=file filename#从文件读取规则
setfacl -b|--remove-all       filename  #删除文件所有acl权限
setfacl -k|--remove-default   filename  #删除默认acl规则
setfacl --set=acl           filename    #用新规则替换旧规则,会删除原有ACL项,用新的替代
setfacl --set-file=file  filename  #从文件读取新规则
setfacl --mask       filename   #重新计算mask值
setfacl -n|--no-mask   filename #不重新计算mask值
setfacl -d|--default    filename  #在目录上设置默认acl
setfacl -R|--recursive  filename #递归执行
setfacl -L|--logical    filename #将acl 应用在软链接指向的目标文件上,与-R一起使用
setfacl -P|--physical     filename #将acl 不应用在软链接指向的目标文件上,与-R一起使用
setfacl -m mask::rx filename #mask权限
getfacl filename #查看权限列表


2. 结合vim几种模式,学会使用vim几个常见操作。

1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。

打开文件
在终端中输入vim 文件名即可打开指定文件。例如,如果要打开名为test.txt的文件,可以输入vim test.txt。此时进入命令模式。


退出文件
1、命令模式->命令扩展模式 退出
如果没有对文件进行任何修改,先输入: 进入命令扩展模式,再输入q就可以退出文件。
如果对文件进行了修改但不想保存,先输入:进入命令扩展模式,再输入q!强制退出(会放弃所有修改)。
如果对文件进行了修改并且想要保存后退出,先输入:进入命令扩展模式,在输入wq(先保存再退出)。
2、命令模式 退出
输入ZZ保存修改就可以退出文件。
输入ZQ不保存修改就可以退出文件。

2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。

从命令模式进入插入模式
在命令模式下,可以使用以下按键进入插入模式:
i:在光标当前位置插入。
a:在光标当前位置的下一个字符处插入。
o:在光标所在行的下一行插入新的一行并进入插入模式。
I:在光标所在行的行首插入。
A:在光标所在行的行尾插入。


从插入模式回到命令模式
在插入模式下,按下Esc键即可回到命令模式。
完成特定内容编写后的操作(包含插入、返回命令模式和退出)
按照要求,在打开文件(命令模式)后进入插入模式(如按i),输入 “马哥出品,必属精品”。
然后按Esc键回到命令模式。
若要保存并退出,可以输入:wq;若不想保存并退出,输入:q!;若只是想保存不退出,输入:w。


4)使用cat命令验证文件内容,是刚刚自己写的内容。

在完成上述文件的编辑并保存退出后,可以使用cat命令来查看文件内容。
如果编辑的文件名为test.txt,在终端输入cat test.txt,就可以看到文件中的内容是否为刚刚自己编写的 “马哥出品,必属精品”。


5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。

光标跳转
在单词间跳转:
w:将光标移至下一个单词的开头。
b:将光标移至上一个单词的开头。
e:将光标移至当前单词的末尾。
在句子间跳转:
):将光标移至下一个句子的开头。
(:将光标移至上一个句子的开头。
上下跳转:
j:光标向下移动一行。
k:光标向上移动一行。
行复制粘贴
复制行:在命令模式下,将光标移至要复制的行,按yy(复制当前行),若要复制多行,可以使用数字yy(例如3yy表示复制从当前行开始的 3 行)。
粘贴行:将光标移至要粘贴的位置,按p(粘贴在光标所在行的下一行)或者P(粘贴在光标所在行的上一行)。
行删除
在命令模式下,将光标移至要删除的行,按dd即可删除当前行。若要删除多行,可以使用数字dd(例如3dd表示删除从当前行开始的 3 行)


3. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。

一、文本处理工具
1. cat
命令格式:cat [选项] [文件]
常用选项及功能
-n:为所有行编号(包括空行)。
-b:只为非空行编号。
-E:在每行末尾显示$表示行尾。
-T:将制表符显示为^I。
示例
查看文件并显示所有行号:cat -n file.txt
查看文件并只对非空行编号:cat -b file.txt
2. more
命令格式:more [选项] [文件]
常用选项及功能
-d:显示详细的操作提示信息。
-s:将连续的空行压缩为一行。
示例
分页查看文件并显示提示:more -d file.txt
查看文件并压缩空行:more -s file.txt
3. less
命令格式:less [选项] [文件]
常用选项及功能
-N:显示行号。
-S:当行过长时,截断显示,可通过左右箭头查看完整内容。
-i:搜索时忽略大小写。
示例
查看文件并显示行号:less -N file.txt
在less中搜索忽略大小写的内容:/search -i
4. nl
功能:为文件添加行号,类似cat -b。
示例
为文件添加行号:nl file.txt
5. tac
功能:逆序显示文件内容。
示例
逆序显示文件:tac file.txt
6. rev
功能:反转每行的字符顺序。
示例
反转每行字符:rev file.txt
7. head
命令格式:head [选项] [文件]
常用选项及功能
-n [行数]:显示文件开头的指定行数,若行数为负数,则从文件开头到倒数第|行数|行。
-c [字节数]:显示文件开头的指定字节数。
示例
查看文件前 5 行:head -n 5 file.txt
查看文件前 10 字节:head -c 10 file.txt
8. tail
命令格式:tail [选项] [文件]
-n [行数]:显示文件末尾的指定行数,若行数为负数,则从第|行数|行到文件末尾。
-c [字节数]:显示文件末尾的指定字节数。
-f:实时跟踪文件末尾的新增内容,常用于日志监控。
示例
查看文件后 3 行:tail -n 3 file.txt
实时跟踪日志文件:tail -f log.txt
9. cut
命令格式:cut [选项] [文件]
常用选项及功能
-d [分隔符]:指定分隔符,默认是制表符。
-f [字段列表]:指定要提取的字段,如单个字段、多个离散字段或连续字段。
-C:按字符切割。
示例
提取/etc/passwd文件中以:分隔的第 1、3 和 7 列:cut -d: -f1,3,7 /etc/passwd
10. paste
命令格式:paste [选项] [文件]
常用选项及功能
-d [分隔符]:指定分隔符,默认是制表符。
-s:将文件的所有行合并为一行。
示例
合并两个文件同行号的列:paste -d ' ' file1.txt file2.txt
将文件的所有行合并为一行:paste -s file.txt
11. wc
命令格式:wc [选项] [文件]
常用选项及功能
-l:统计行数。
-w:统计单词数。
-c:统计字节数。
-m:统计字符数。
-L:显示最长行的长度。
示例
统计文件的行数、单词数和字节数:wc -lwc file.txt
12. sort
命令格式:sort [选项] [文件]
常用选项及功能
-r:逆序排序。
-n:按数字大小排序。
-h:按人类可读的格式排序(如1K、2M等)。
-f:忽略大小写。
-u:去除重复行。
示例
对文件内容按数字大小排序:sort -n file.txt
按人类可读格式排序:sort -h file.txt
13. uniq
命令格式:uniq [选项] [文件]
常用选项及功能
-c:在每行前显示该行重复出现的次数。
-d:只显示重复的行。
-u:只显示不重复的行。
示例
统计文件中重复行的次数:sort file.txt | uniq -c
14. diff
命令格式:diff [选项] [文件1] [文件2]
常用选项及功能
-u:以统一格式输出差异,便于查看和生成补丁文件。
示例
比较两个文件的差异:diff -u file1.txt file2.txt
15. patch
功能:将diff生成的补丁文件应用到原始文件。
示例
应用补丁文件:patch file1.txt patch_file
二、文件查找工具
1. find
命令格式:find [路径] [选项] [表达式]
常用选项及功能
-name [文件名模式]:按文件名查找,支持通配符。
-type [文件类型]:按文件类型查找,如f(文件)、d(目录)等。
-size [大小条件]:按文件大小查找,如+10M(大于 10 兆)、-5k(小于 5 千字节)。
-mtime [时间条件]:按文件修改时间查找,如+3(3 天前修改的)、-1(1 天内修改的)。
-exec [命令] {} \;:对找到的文件执行指定命令。
示例
在/home/user目录下查找所有.txt文件:find /home/user -name '*.txt'
查找/var/log目录下 3 天前修改的文件并删除:find /var/log -mtime +3 -exec rm {} \;
2. locate
命令格式:locate [选项] [模式]
常用选项及功能
-i:忽略大小写查找。
-c:只显示匹配的文件数量。
-r:使用正则表达式查找。
示例
查找包含python的文件(忽略大小写):locate -i python
统计包含error的文件数量:locate -c error
三、文本处理三剑客
1. grep
命令格式:grep [选项] [模式] [文件]
常用选项及功能
-i:忽略大小写匹配。
-v:反向匹配,显示不包含模式的行。
-r:递归搜索目录及其子目录。
-n:显示匹配行的行号。
-c:统计匹配的行数。
-o:只显示匹配的字符串。
-q:静默模式,不第个输入,类型为图片读到的内容是:
-A [行数]:显示匹配行后指定行数的内容。
-B [行数]:显示匹配行前指定行数的内容。
-C [行数]:显示匹配行前后指定行数的内容。
-e [模式1] -e [模式2]:匹配多个模式中的任意一个。
-w:匹配整个单词。
-E:使用扩展正则表达式。
-F:不使用正则表达式,按字符串字面匹配。
-P:支持 Perl 风格的正则表达式。
-f [文件]:从文件中读取模式进行匹配。
示例
在文件中查找包含hello的行并显示匹配行后 2 行:grep -A 2 hello file.txt
递归查找目录中包含error或warning的文件:grep -r -e error -e warning /home/user/docs
2. sed
命令格式:sed [选项] '命令' [文件]
常用选项及功能
-i:直接修改文件内容(谨慎使用),可指定备份后缀,如-i.bak。
-e:在同一命令行执行多个命令。
-n:只输出处理后的行。
基本命令及功能
s/旧字符串/新字符串/[修饰符]:替换操作,修饰符g表示全局替换,p显示替换行,w保存替换行到文件。
d:删除行。
p:打印行。
a \新行内容:在指定行后添加新行。
i \新行内容:在指定行前插入新行。
c \新行内容:替换指定行内容。
w [文件]:保存匹配行到文件。
r [文件]:读取文件内容到指定位置。
示例
在文件中替换所有apple为banana并保存替换行到新文件:sed -i.bak 's/apple/banana/g' file.txt && sed -i.bak 'w new_file.txt' file.txt
在指定行后添加新行:sed '3a new line' file.txt
3. awk
命令格式:awk [选项] '脚本' [文件]
常用选项及功能
-F [分隔符]:指定字段分隔符。
-v [变量名]=[变量值]:定义变量。
脚本编写示例
打印文件中第二列:awk -F ',' '{print $2}' data.csv
计算文件中数字的总和:awk '{sum += $1} END{print sum}' nums.txt
根据条件处理行:awk '$1 > 10' log.txt
四、文本格式化命令(printf)
命令格式:printf '格式字符串' [参数列表]
格式说明符
% s:格式化字符串。
% d:格式化整数。
% f:格式化浮点数。
% c:格式化单个字符。
% e、% E:格式化科学计数法表示的浮点数。
% o:格式化八进制数。
% x、% X:格式化十六进制数。
修饰符
宽度指定:如 %5d(整数宽度为 5,右对齐),%-5d(左对齐)。
精度指定:如 %5.2f(总宽度 5,小数 2 位)。
示例
格式化输出字符串和整数:printf "The number is %d and the string is %s\n" 10 "Hello"
按指定宽度和精度输出浮点数:printf "The value is %7.3f\n" 3.14159


4. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。

grep 命令相关的正则表达式
一、基本正则表达式
字符匹配
普通字符:直接匹配字符本身。例如,grep "hello" file.txt会匹配文件file.txt中包含hello的行。
特殊字符
.(点号):匹配任意单个字符。例如,grep "h.lp" file.txt会匹配help、h1lp等。
[](字符类):匹配方括号内的任意一个字符。例如,grep "h[aeiou]lp" file.txt会匹配help、hulp等以h开头,lp结尾,中间是元音字母的字符串。
[^](否定字符类):匹配不在方括号内的任意一个字符。例如,grep "h[^aeiou]lp" file.txt会匹配h1lp、hXlp等中间不是元音字母的字符串。
重复匹配
*(星号):匹配前面的字符零次或多次。例如,grep "a*b" file.txt会匹配b、ab、aab等。
\{n\}:匹配前面的字符恰好n次。例如,grep "a\{3\}b" file.txt会匹配aaab。
\{n,\}:匹配前面的字符至少n次。例如,grep "a\{2,\}b" file.txt会匹配aab、aaab等。
\{n,m\}:匹配前面的字符至少n次且最多m次。例如,grep "a\{1,3\}b" file.txt会匹配ab、aab、aaab。
位置匹配
^(脱字符):匹配行首。例如,grep "^hello" file.txt会匹配以hello开头的行。
$(美元符号):匹配行尾。例如,grep "world$" file.txt会匹配以world结尾的行。
二、扩展正则表达式(使用-E选项或egrep命令)
字符匹配
与基本正则表达式类似,但增加了一些便捷的字符类:
[:alpha:]:匹配任意字母字符。
[:digit:]:匹配任意数字字符。
[:alnum:]:匹配任意字母或数字字符。
[:space:]:匹配任意空白字符(空格、制表符等)。
[:punct:]:匹配任意标点符号。
重复匹配
+(加号):匹配前面的字符一次或多次。例如,egrep "a+b" file.txt会匹配ab、aab等,但不匹配b(区别于*)。
?(问号):匹配前面的字符零次或一次。例如,egrep "a?b" file.txt会匹配b和ab。
逻辑匹配
|(竖线):表示逻辑或。例如,egrep "hello|world" file.txt会匹配包含hello或world的行。
分组匹配
()(括号):用于分组。例如,egrep "(ab)+" file.txt会匹配ab、abab等。


5. sed将文件test中第50行中的helloworld改为nihao
sed -i '50s/helloworld/nihao/g' test 


7. 在每一行后增加一空行
测试文件为cp /etc/passwd ~/,不要直接修改passwd文件
sed -i 'G' passwd~

8.删除文件每行的第一个字符。
9.删除文件每行的第二个字符
10.删除文件每行的最后一个字符
11.删除文件每行的倒数第二个字符(有精力的同学第二个链接可以多练习)
sed 's/^.//' test #删除文件每行的第一个字符
sed -r 's/(.)(.)(.*)/\1\3/' test #删除文件每行的第二个字符
sed -r 's/(.*)(.$)/\1/' test #删除文件最后的第一个字符
sed -r 's/(.*)(.)(.$)/\1\3/' test #删除文件最后的第二个字符

test文件 


参考答案5-11:https://qxblog.top/%E9%A2%98%E7%9B%AE-%E6%96%87%E6%9C%AC%E4%B8%89%E5%89%91%E5%AE%A2%E5%92%8Cshell/
参考答案5-11:https://www.cnblogs.com/zll1217/articles/15394141.html

 

12. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。

变量命名规则主要包括命名要求与命名习惯:
命名要求
大小写区分:在命名时严格区分大小写,不同大小写形式代表不同的命名。
避免保留字和内置变量:不能使用像 “if”“for” 等程序中的保留字以及内置变量进行命名。
字符使用限制:只能用数字、字母及下划线进行命名,且不能以数字开头,同时不支持短横线 “-”,命名还需与主机名有所不同。
命名习惯
见名知义:使用能体现实际作用的英文单词命名,避免使用简写,例如不用 “ATM” 这种简略形式。
大小写规范
变量名大写:适用于特定的全局变量或重要变量。
局部变量小写:局部变量采用小写命名。
函数名小写:函数名以小写形式呈现。
命名方式
大驼峰命名法:如 “StudentFirstName”,由多个单词组成,每个单词首字母大写,其余小写,常用于类名等重要概念的命名。
小驼峰命名法:像 “studentFirstName”,第一个单词首字母小写,后续单词首字母大写,其余小写,常见于变量和方法命名。
下划线命名法:例如 “student_name”,使用下划线连接单词,在特定编程风格或语言中较为常用。


不同类型的 Shell 变量及其使用方式:
一、环境变量
定义与设置
在大多数 Shell(如 bash)中,可以使用export命令来定义环境变量。例如,要定义一个名为MY_VAR的环境变量并赋值为hello,可以在命令行中输入:
     export MY_VAR = "hello"
也可以在 Shell 配置文件(如~/.bashrc或~/.bash_profile)中定义环境变量,这样变量在每次登录时都会自动设置。
使用目的
环境变量用于在整个系统环境或者用户的 Shell 会话中传递信息。例如,PATH环境变量定义了系统查找可执行文件的路径,当你在命令行输入一个命令时,系统会根据PATH中的路径来查找对应的可执行文件。
许多程序会读取特定的环境变量来获取配置信息。例如,JAVA_HOME环境变量通常被 Java 相关的程序用来确定 Java 安装的目录。
访问方式
在 Shell 脚本或命令行中,可以直接使用$符号加上环境变量名来访问环境变量的值。例如,要查看MY_VAR的值,可以使用echo $MY_VAR。
二、位置变量
定义与性质
位置变量是由 Shell 自动定义的特殊变量,用于接收命令行参数。在 Shell 脚本中,$1表示第一个参数,$2表示第二个参数,以此类推。$0表示脚本本身的名称。
使用示例
假设存在一个名为test.sh的脚本,内容如下:
     #!/bin/bash
     echo "The script name is: $0"
     echo "The first parameter is: $1"
     echo "The second parameter is: $2"
如果在命令行中执行./test.sh arg1 arg2,那么$0的值为test.sh,$1的值为arg1,$2的值为arg2。
三、只读变量
定义与设置
使用readonly命令来定义只读变量。例如,
readonly MY_READONLY_VAR = "fixed value"。
一旦定义为只读变量,就不能再修改其值。
使用场景
当有一些值在脚本运行过程中不应该被修改时,可以将其定义为只读变量。例如,脚本中用于计算的常量或者一些配置信息中不允许改变的部分。
注意事项
如果试图修改只读变量的值,Shell 会报错。例如,在定义了readonly MY_READONLY_VAR = "value"之后,执行MY_READONLY_VAR="new value"会导致错误。
四、局部变量
定义与范围
在 Shell 脚本或函数内部定义的变量通常是局部变量。在 bash 中,可以使用local关键字在函数内部定义局部变量。例如:
      my_function() {
       local local_var = "local value";
       echo $local_var;
     }
局部变量的作用范围仅限于定义它的函数内部。在函数外部无法访问该局部变量。
使用意义
局部变量有助于避免变量名冲突。当不同的函数可能使用相同的变量名来表示不同的含义时,使用局部变量可以确保每个函数内部的操作不会相互干扰。
五、状态变量
特殊意义与常见类型
在 Shell 脚本中,状态变量通常用于表示命令执行的结果状态。例如,$?是一个特殊的状态变量,它保存了最近一次执行的命令的退出状态码。退出状态码为 0 表示命令执行成功,非 0 表示命令执行失败。
使用示例
执行一个命令,然后检查其状态:
     ls /nonexistent_directory
     echo "The exit status of the 'ls' command is: $?"
可以根据$?的值在脚本中进行不同的操作,例如判断一个命令是否成功执行,如果失败则执行一些错误处理操作。

13. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
#!/bin/bash
HEAD=$1
FOOT=$2
RABBIT=$[$[FOOT-2*HEAD]/2]
CHOOK=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK

 chook_rabbit.sh  shell文件 

 


14. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
#! /bin/bash
for i in {1..100};doid user$i >/dev/null && echo user$i is exist ||{useradd user$i;PASS=`cat /dev/urandom | tr -dc '[:alnum:]' |head -c12`;echo $PASS | passwd --stdin user$i &> /dev/null;echo user$i:$PASS >> /root/user.log;echo "user$i is created";}
done

user_add.sh  shell文件

相关文章:

运维云计算SRE-第2周

1. 总结学过的权限&#xff0c;属性及ACL相关命令及选项&#xff0c;示例。 一、Linux安全模型 &#xff08;一&#xff09;资源分派 Authentication&#xff08;认证&#xff09;&#xff1a;验证用户身份&#xff0c;确保登录系统的用户是合法的。 Authorization&#xff08…...

React Native 全栈开发实战班 - 用户界面进阶之响应式设计实践

在移动应用开发中&#xff0c;响应式设计 是确保应用在不同设备、屏幕尺寸和方向下都能提供良好用户体验的关键。React Native 提供了多种工具和技巧来实现响应式设计&#xff0c;包括 Flexbox 布局、动态样式、屏幕尺寸适配等。本章节将详细介绍如何在 React Native 中进行响应…...

SlickGrid点击/双击事件

分析 SlickGrid提供了点击事件方法grid.onClick和grid.onDblClick用于捕获用户对表格列的点击&#xff0c;捕获到点击事件之后&#xff0c;修改表格数据&#xff0c;然后使用grid.updateRow方法将修改后的数据更新到表格中。 展示 代码 创建grid&#xff08;HTML&#xff09;…...

一文详细深入总结服务器选型

1. 题记&#xff1a; 服务器选型工作是项目规划检讨的一项非常重要的工作&#xff0c;本文详细深入总结服务器选型。 2. 服务器基础知识概览 2.1 服务器的定义与功能 2.1 .1 定义 服务器是一种高性能计算机&#xff0c;其设计目的是在网络中提供服务。它可以处理来自多个客…...

一、Nginx反向代理(七层代理)二、Nginx的TCP/UDP调度器(四层代理)

一、Nginx反向代理&#xff08;七层代理&#xff09; 实验要求 使用Nginx实现Web反向代理功能&#xff0c;实现如下功能&#xff1a; 后端Web服务器两台&#xff0c;可以使用httpd实现Nginx采用轮询的方式调用后端Web服务器两台Web服务器的权重要求设置为不同的值最大失败次数为…...

CSS+JQuery 实现弹力球效果,碰到屏幕边框弹回

实现弹力球效果&#xff0c;碰到屏幕边框弹回&#xff0c;效果如下 代码如下&#xff1a; <img src"../image/ball.png" alt"" class"ball"> <style>.ball {position: fixed;top: 50vh;left: 50vw;width: 15vw;height: 15vw;border…...

shell编程规范和脚本变量

什么是shell 人和计算机内核之间的中介&#xff1a; 计算机的语言是二进制&#xff0c;把人类的语言翻译成计算机能够识别的语言&#xff0c;然后让内核来处理 内核完成之后要把结果反馈给用户&#xff0c;要把计算机的翻译成人类能够识别的语言 命令解释器&#xff0c;pyc…...

jspm美容院管理系统

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计…...

Prometheus结合K8s(二)使用

上一篇介绍了如何搭建 Prometheus结合K8s&#xff08;一&#xff09;搭建-CSDN博客&#xff0c;这章介绍使用 页面访问 kubectl get svc -n prom 看promeheus和granfana的端口访问页面 Prometheus 点击status—target&#xff0c;可以看到metrics的数据来源&#xff0c;即各…...

【虚幻引擎】UE5数字人开发实战教程

本套课程将会交大家如何去开发属于自己的数字人&#xff0c;包含大模型接入&#xff0c;流式输出&#xff0c;语音识别&#xff0c;语音合成&#xff0c;口型驱动&#xff0c;动画蓝图&#xff0c;语音唤醒等功能。 课程介绍视频如下&#xff1a; 【虚幻引擎】UE5 历时一个多月…...

深入分析:固定参考框架在RViz中的作用与对数据可视化的影响 ros ubuntu20.04

深入分析&#xff1a;固定参考框架在RViz中的作用与对数据可视化的影响 RViz (Robot Visualization) 是 ROS (Robot Operating System) 中一种重要的三维可视化工具&#xff0c;主要用于实时观察和分析传感器数据、机器人状态信息以及环境模型。RViz的核心功能之一是固定参考框…...

Android:时间选择器(最下面有效果图)

1.创建DateUtil类 /*** Created by wangshuai on 2024/11/19.*/ public class DateUtil {public final static String PATTERN_ALL"yyyy-MM-dd HH:mm:ss";public final static String PATTERN_DEFAULT"yyyy-MM-dd";/*** 获取当前时间* return yyyy-MM-dd*…...

第十六届蓝桥杯模拟赛(第一期)-c++/c

c/c蓝桥杯模拟赛题解&#xff0c;非常详细 质因数 1、填空题 【问题描述】 如果一个数 p 是个质数&#xff0c;同时又是整数 a 的约数&#xff0c;则 p 称为 a 的一个质因数。 请问 2024 有多少个质因数。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提…...

如何挑选路由器?需要看哪些参数?

挑选路由器时&#xff0c;选择合适的型号和参数对于确保家庭或办公网络的速度、稳定性和覆盖范围至关重要。以下是挑选路由器时需要考虑的关键参数和因素&#xff1a; 1. 无线标准 (Wi-Fi标准) 无线标准是衡量路由器性能的核心指标。不同的无线标准提供不同的速率、范围和技术…...

mysql-备份(二)

前章介绍了MySQL的内部数据结构btree&#xff0c;这章讲述mysql的备份 1&#xff1a;环境 ubuntu22.04 LST mysql5.7.42 or win10 mysql5.7.44 (这里图简单直接windows部署) download:https://downloads.mysql.com/archives/community/ 2:install 1> unzip mysql-5.7.44-w…...

Tailwind CSS 和 UnoCSS简单比较

UnoCSS 和 Tailwind CSS 都是流行的原子化 CSS 框架&#xff0c;但它们在设计理念、性能和使用方式上有一些重要的区别。下面是对它们的详细对比&#xff1a; 1. 概述 Tailwind CSS&#xff1a;Tailwind 是一个原子化的 CSS 框架&#xff0c;提供了大量的预定义类&#xff08;…...

unity3d————范围检测

目录 知识点一&#xff1a;什么是范围检测 知识点二&#xff1a;如何进行范围检测 问题&#xff1a; Physics.queriesHitTriggers 怎么查看是不是true&#xff1f; QueryTriggerInteraction.UseGlobal 参数意味着是否检测触发器将依据全局设置 Physics.queriesHitTrigge…...

修改this.$confirm的按钮位置、图标、文字及标题

在Vue.js项目中&#xff0c;this.$confirm 通常是基于某些UI库&#xff08;如Element UI或Ant Design Vue&#xff09;的对话框确认方法。 以下是基于Element UI的this.$confirm的用法示例。 在此之前&#xff0c;你的项目要已经安装了Element UI&#xff0c;如果没安装话就打…...

SQL MID() 函数详解

SQL MID() 函数详解 SQL 中的 MID() 函数是一个非常有用的字符串处理工具&#xff0c;它允许用户从字符串中提取特定位置的子字符串。这个函数在数据库查询和报告中特别有用&#xff0c;尤其是在需要从较长的文本字段中提取特定信息时。本文将详细介绍 MID() 函数的用法、参数…...

【蓝桥杯备赛】123(前缀和的复杂应用)

5. 前缀和的复杂应用 5.1. 123&#xff08;4 星&#xff09; 5.1.1. 题目解析 这道题仍然是求一段区间的和&#xff0c;很容易能够想到前缀和找规律&#xff1a; 1------------------1 号块 1 2----------------2 号块 1 2 3--------------3 号块 1 2 3 4------------4 号…...

MINES

MINES (m)6A (I)dentification Using (N)anopor(E) (S)equencing Tombo(v1.4) 命令在 MINES 之前执行&#xff1a; &#xff08;仅在 fast5 文件中尚未包含 fastq 时需要&#xff09; tombo preprocess annotate_raw_with_fastqs --fast5-basedir /fast5_dir/ --fastq-file…...

H.265流媒体播放器EasyPlayer.js H5流媒体播放器关于如何查看手机端的日志信息并保存下来

现今流媒体播放器的发展趋势将更加多元化和个性化。人工智能的应用将深入内容创作、用户体验优化等多个方面&#xff0c;带来前所未有的个性化体验。 EasyPlayer.js H.265流媒体播放器属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#…...

uni-app快速入门(十一)--常用JS API(上)

在前面学习了uni-app的布局、组件、路由等知识点以后&#xff0c;还要掌握uni-app的JS API ,也可以理解为基于uni-app的java script。本节介绍uni-app的request请求、文件上传、数据缓存、获取位置、获取系统信息、获取手机的网络状态、拨打电话API。 一、request请求 使用uni…...

Flink任务提交到yarn上slot数量为0的问题

现象&#xff1a;Flink提交到yarn上slot数量为0的问题 解决方法&#xff1a; 参考论坛上的方案&#xff0c;修改flink-conf.yaml文件都不管用 最终解决方法&#xff1a; $FLINK_HOME/lib 路径下有2个非.jar结尾的文件&#xff0c;把这几个文件移走之后&#xff0c;再启就可…...

vue3怎么根据字符串获取组件实例

例子&#xff1a; 我在使用vue2开发的时候&#xff0c;定义了一个方法 handler(strRef){ this.$refs[strRef].innerText hello world }&#xff0c; 我在点击某个按钮的时候&#xff0c;调用了方法handler&#xff0c;传递了一个参数是字符串 condition&#xff0c;然后方法…...

ISUP协议视频平台EasyCVR私有化视频平台新能源汽车充电停车管理方案的创新与实践

在环保意识提升和能源转型的大背景下&#xff0c;新能源汽车作为低碳出行的选择&#xff0c;正在全球迅速推广。但这种快速增长也引发了充电基础设施短缺和停车秩序混乱等挑战&#xff0c;特别是在城市中心和人口密集的居住区&#xff0c;这些问题更加明显。因此&#xff0c;开…...

智领未来: 宏集物联网HMI驱动食品与包装行业迈向智能化新高度

行业现状与挑战 食品与包装行业对设备的自动化、智能化水平要求日益提高&#xff0c;特别是瓶装和灌装生产线需要实现高速、高效的生产。此外&#xff0c;该行业还需遵循严格的卫生标准和安全规范&#xff0c;以保证产品质量符合消费者需求。在提高生产效率的同时&#xff0c;…...

redis-击穿、穿透、雪崩

击穿、穿透、雪崩经常听人说吧&#xff1f; 那他到底是啥呢&#xff1f;无非就是在有缓存层的情况下&#xff0c;对各种绕过缓存层从而直接落到了DB上的情况进行的分类。 概念性的东西大概如下&#xff0c;我是记不住&#xff0c;后期具体使用与规避这些问题才是大事&#xff…...

【Redis】服务器异常重启,导致redis启动失败

redis启动失败日志提示信息&#xff1a;Bad file format reading the append only file: make a backup of your AOF file, then use ./redis-check-aof --fix <filename> 错误日志示例图&#xff08;看最后一句&#xff09; 错误原因解析 这个错误通常是由于Redis的…...

Springboot+Vue的项目搭建(三)

一、拦截器 拦截器&#xff08;Interceptor&#xff09;是一种重要的软件设计模式&#xff0c;它在程序执行过程中能够拦截或截取特定的操作或事件&#xff0c;并在操作发生之前、之后或替代操作本身进行自定义的处理。以下是对拦截器知识点的详细归纳&#xff1a; 拦截器的定…...