系统简介
Linux,全称GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX的多用户、多任务、支持多线程和多cpu操作系统.
Linux不仅系统性能稳定,而且是开源软件。其核心防火墙组件性能高效、配置简单,保证了系统的安全。在很多企业网络中,为了追求速度和安全,Linux不仅仅是被网络运维人员当作服务器使用,甚至当作网络防火墙,这是Linux的一大亮点。
Unix诞生于1970-1-1 由Ken thompson 和 Dennis Ritchie 创造
unics 后来改名为Unix
1973年重新用c语言写了Unix
1978年由大约600多台计算机使用了Unix
Linux一般都会选择关闭节能功能
常见的linux系统
Red Hat Enterprise Linux 6/7/8 国际红帽Linux
CentOS 6/7/8 深度开源免费linux
Suse Linux Enterprise 15
Debian Linux 11
Ubuntu Linux 20.04/21.04 乌班图
Rocky Linux 8/9 centos的续作
OpenEuler (国产开源)华为捐献
Linux系统结构
windows树状结构
Linux目录结构
/根目录:Linux的起点
路径:/haha/dsd/aa.txt 在根目录下的haha,haha下的dsd,dsd下的aa.txt
Linux的基本哲学理念:一切皆文件
常见的系统硬盘表示方法
IDE硬盘为hda
SCSI或SATA硬盘为sda
nvme硬盘为nvme0n1
KVM虚拟机硬盘为vda
命令框:
命令框:
组合键
ctal+shift++变大
ctal+-变小
ctrl+c可以停止正在运行
一般使用明亮默认(方便辨认颜色)
命令提示符
[root@localhost ~]#
root最高管理权限用户
localhost本地主机,主机名
~
#超级管理员
$普通管理员
命令的执行依赖于解释器(默认解释器/bin/bash)
用户管理的简介
用途可以登陆不同的操作系统2.不同的用户所具备的权限不同
UID(编号从0开始的编号,默认最大60000能够登陆的用户)
管理员的root的UID:永远为0
普通用户的UID:默认从1000开始
不要抢占UID为1——999
家目录:存放某个用户个性化信息的目录
普通用户的家目录都在/home下
管理员root的家目录在/root
~表示家目录
目录颜色
蓝色:代表目录
黑色:代表文本文档
青色(淡蓝色):代表快捷方式
绿色 :可执行的程序
命令的完整格式:命令 选项 参数1 参数2 ....
例: 打 武器 某人
单词就是--单词
缩写就是-缩写字母
命令行快捷键的技巧
ifco + tab 会补全
if 按俩下tab会提示
TAB:可补齐 命令字、选项、参数、文件路径、软件名、服务名
ctrl键+c结束真在运行的程序
esc+.或者alt+·粘贴上一个命令的参数
ctrl+l :清空整个屏幕
ctrl+u:从光标处清空到行首
ctrl+k:从光标处清空到行末
ctrl+w:往回删除一个单词(以空格来定位的)
home键:从光标处清空至行首
end键:从光标处清空至行末
lsblk——查看设备的硬盘接口
查看设备的硬盘接口
通配符:
* 任意多个字符
? 单个字符
[ ] 经常用于匹配连续的范围 只支持0-9 [0-9]
{ } 多组不同的字符串,全部匹配 {45,23,54} 可以和 [ ] 组合使用
. ——
. 当前目录 好多命令可以使用,使用时注意当前所在位置pwd
.. 父目录(上一层) 一般不使用
~ 表示用户的家目录
家目录:专门存放用户个性化信息的目录
~user:用户user的家目录
alias—— 别名的定义
别名的定义:简化复杂的命令
查看已设置的别名
alias [别名名称]
定义新的别名
alias 别名名称= '实际执行的命令行'
取消已设置的别名
unalias [别名名称]
pwd ——自己的位置
用途——目前所在位置(不会显示目录下有什么内容)我在哪里
ls ——当前目录下的文件
用途——(默认)当前目录下的文件
ls /文件目录 可以直接查看目录里的东西
ls -l 详细信息显示(但是不带有数据大小的单位)
ls -h 提供目录下的所有子目录的详细信息
ls -d 显示目录本身内容的属性
ls -A 显示所有的内容,包括隐藏数据
ls -R 递归显示目录的文件
ls -l 使用较长的格式列出,显示这个文件的详细信息,一般跟文件
rm ——删除
用途——删除路径下文件,无法删除目录
rm -r 递归删除
rm -f 强制删除
rm -rf 递归强制删除(可以删除任何东西包括根)
rm -rf /root* 或者rm -rf /*
rm -r 删除目录(尽量不要删不知道的,以及原来就有的)
rm -rf 强制删除目录
useradd ——创建用户
用途—— 创建普通用户 (不要单数字,要字母)
id yxcrs 用户 查询用户
useradd -u 1500 yxcrs 指定UID编号
passwd yxcrs 设置用户密码 或者更改密码
新的密码:(可以无视复杂度)
无效的密码(密码是一个回文)
passwd——普通用户改密码,并且还要输入旧密码,不能无视密码的要求
破解Linux系统管理员的密码
服务器安全:1.物理安全(IDC数据中心) 2.网络安全
进入救援模式,进行密码设置
利用reboot重启,
进入救援模式 按e
找到linux开头的一行,把ro替换为rw(ro只读加载)(rw可读写加载)然后再空格rw后面输入rd.break(进入救援模式) 然后按ctrl+x进入救援模式
进入救援模式的特征:(switch_root:/#)
switch_root:/#
switch_root:/#ls sysroot 查看救援模式下的数据
switch_root:/#chroot /sysroot 切换到硬盘操作系统的数据
sh-5.1#ls 查看硬盘操作系统的数据
sh-5.1#passwd root 修改root的密码
要修改的简单点
SELinux安全防护,让SELinux失忆
sh-5.1#touch /.autorelabel 让SELinux失忆
sh-5.1#reboot -f 强制重启
usermod ——修改已经存在用户的属性
用途——修改已经存在的用户的属性
usermod -u yxcrs1 修改UID编号
usermod -l yxcrs1 yxcrs 更改用户名
su - yxcrs 切换用户 交互式设置
su - 用户名——root到普通用户
exit —— 普通用户到root
userdel —— 删除用户
用途——删除用户
userdel -r 连同家目录全部删除
userdel yxcrs 没有删目录
组 ——组账号GID
用途——方便管理用户
唯一标识GID(0最小默认60000最大)
一个用户可以属于多个组
一个用户最少属于一个组
组随用户而来随用户而去
基本组:一般情况与用户同名,一个用户必须有基础组,基础组只有有一个
附加组:一个用户可以有多个附加组,也可以没有附加组
一般使用附加组方便管理不会很烦
groupadd 创建组 stugrp tarena
grep stugrp /etc/groud
gpasswd -a kaka tarena 把用户kaka加入组tarena
gpasswd -d kaka tarena 把用户kaka删除组tarena
groupdel —— 删除组
不能删除用户的基本组
基本组删除不会影响用户
groupdel tarena 删除组 tarena
grep tarena /etc/groud
cd ——进入目录
用途——进入目录(也不会显示目录下有什么内容)去往哪里
cd .. ——返回上一级目录
绝对路径和相对路径 例:目标都是java目录
绝对路径:以根开始的
cd / etc/pki/java
相对路径:以当前位置,为参照的路径
cd /etc/pki
cd java
mv ————移动,(剪切)源文件会消失对于目录和文件都有效果
mv /etc/passwd /opt/passwd mv 原文件 目标路径,只能是路径
cp ————移动,(复制)源文件不会丢失 也可以改名
也可以支持多个参数但是永远的吧最后一个参数作为目标,其他的都为源数据
cp -r 原文件 目标路径
cp -r 原文件 目标路径 在路径下写新的文件名就可以改名
\cp -r 原文件 目标路径 (会强制覆盖并且不会有输出)(本次操作临时取消别名)
cp -r /etc/passwd . 把 /etc/passwd 复制到本目录下(路径下)
ctrl+l清屏 clear(清屏)
cat ——查看文件内容
用途——查看文本文档,显示文件的内容
cat -n 显示行号
cat -help 查看命令帮助信息
cat /etc/redhat-release 系统版本
cat -n /etc/shells 提供行号
cat /proc/meminfo —— 查看系统内存
lscpu ——查看系统cpu
cat /etc/redhat-release ——查看系统版本
less ——查看文本文件(内容多的)
按q可以退出
hostname ——设置主机名
用途——临时设置主机名,查看主机名,重启会消失
hostname yxcrs
hostnamectl set-hostname yxcrs 这个是可以永久设置主机名的
ifconfig ——查看网卡
用途——查看网卡
lo:本机环回接口 IP永远为127.0.0.1 子网255.0.0.0
ifconfig eth0 ip 192.168.1.1 临时设置eth0的IP地址
mkdir ——创建空目录(文件夹)
用途——创建空目录 不写路径就在当前目录创建
创建路径里的目录时,不要用用空格和路径隔开
mkdir
mkdir -p 连同父目录一并创建
touch —— 创建文件
用途——创建空文本文件 不写路径就在当前目录创建
grep —— 查看文件中包含的关键字
用途——命令过滤,文本文件内容,输出包含指定字符串的行
grep
grep -v root 只要不包含root的
grep -i root 忽略大小写都要
grep ^root /etc/passwd 文件中以root开头的
grep root$ /etc/passwd 文件中以root结尾的
grep ^$ 过滤空行
head -n /文件路径 ——查看文件内容(前往后)
用途——查看部分(从前面往后)文件部分内容 n代表数字不写默认10行
tail -n /文件路径 ——查看文件内容(后往前)
用途——查看部分(从后面往前)文件部分内容 n代表数字不写默认10行
vim ——文本编辑器 修改文件内容
用途——修改文本文件的内容(文本编辑器)
三个模式:命令模式(查看,阅读),插入模式(输入模式),末行模式(保存并退出)
vim当文件不存在的时候,会自动创建此文件
vim不能创建目录(没有能力新建目录)(会提示新目录然后千万不要继续进行)
命令模式(一般按i键)——》插入模式
插入模式(按esc)——》命令模式
插入模式和末行模式不可以切换
末行模式(按esc)——》命令模式
命令模式(按:(英文模式下))——》末行模式
末行模式(wq)——》保存并退出
末行模式(q!)——》强制退出并不保存
vim /opt/c.txt 在编写时出现断电等打开如下时
可以用 ls -A /opt 下看到前面带点的文件把那个文件删掉就好了
rm -rf /opt/.c.txt.swp
vim /opt/c.txt 可以继续创建文件
poweroff ——关机
用途——关机
reboot ——重启
用途——重启
date——时间
用途——时间
rpm -q +软件名
用途——查询有没有安装这个软件
rpm -qa (查询所有安装的软件名)
rpm -ql 软件名 #查询软件安装的清单
rpm -ql 目录 #只能查询已经安装的软件
rpm -qpi /dvd/appstream/packages/v/vs..... 查询软件包的信息
rpm -qpl /dvd/appstream/packages/v/vs.... 查询会生成那些目录和位置
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial 导入红帽签名信息(可以没有安全认证)导入后不会出现警告
rpm -ivh +软件包名 ——安装软件
rpm -evh +软件名——卸载软件
目录:
/dev :存放硬盘、键盘、鼠标、光驱等各种设备文件。
cat /etc/redhat-release 查看当前系统的系统版本
cat /etc/shells 可用的解释器
cat /bin/bash #默认的解释器
文件
ls /etc/passwd 存储系统中所有的用户信息,没个用户一行
信息的记录,大概了解所有用户,和用户信息
cat -n /etc/passwd 查看所有的用户信息
grep yxcrs /etc/passwd 过滤yxcrs,大致浏览
ls /etc/grad
系统软件包管理:
位置: ls /dev/sr0
快捷方式: ls /dev/cdrom
不能用cat cd 看光盘目录
访问设备内容,必须通过访问点(目录)进行访问
先创建一个目录(访问点)mkdir /dvd
mount挂载:让目录成为设备的访问点(可以直接挂载ISO文件)
mount /dev/cdrom /dvd 挂载 /光盘目录 /新建的空文件夹
顺序不能错
可以把一个光盘挂载到多个目录下
mkdir /dvd 创建一个空目录(要挂载的位置)
mount /dev/cdrom /dvd 把光盘路径/dev/cdrom 挂载到 /dvd
umount /dvd 卸载挂载的dvd
umount /dev/cdrom 卸载光盘
卸载时当前所在位置不能是挂载点目录
建议挂载点目录自行创建
/mnt: 专门为用户提供的挂载点
rpm软件包
RPM Package Manager 红帽提出
rpm软件包的命名特征
软件名--版本信息--操作系统--硬件架构--rpm
rpm包的一般安装位置比较分散
面试问题:一般软件安装的位置在哪里?
在目录bin的下面即可
文件类型 | 默认位置 |
普通执行程序 | /usr/bin , /bin |
服务器程序,管理工具 | /usr/sbin , /sbin |
配置文件 | /etc , /etc/软件名 |
日志文件 | /var/log/ , /var/log/软件名/ |
程序文档,man手册 | /usr/share/doc , /usr/share/man/ |
signature 签署
构建Yum软件包仓库
可以自动解决依赖关系安装软件
思路:yum——》配置文件——》软件仓库
构建软件仓库:众多的软件包,仓库清单(仓库数据文件)
仓库配置文件:/etc/yum.repos.d/
必须以repos.d结尾
错误的文件会影响正确的文件
删除错误的文件排除干扰
rm -rf /etc/yum.repos.d/*
ls /etc/yum.repos.d/
手写配置文件
vim /etc/yum.repos.d/haha.repo 创建仓库
[yxcrs] 名字
name=Rocky Linux 8.6.6 仓库信息描述
baseurl=file:///dvd/AppStream 光盘中仓库的位置
enabled=1 是否启用(1启用 0不起用)
gpgcheck=0 不检测红帽签名
yum repoinfo #查看仓库的信息
yum -y install vsftpd #安装软件
yum -y install httpd #安装软件
yum -y remove vsftpd #卸载软件
shell脚本
echo——输出
vim /root/hello.sh 创建一个shell脚本在root下的hello.sh
echo hello world 显示hello world
cat /etc/rocky-release 显示系统版本
uname -r 显示内核版本
hostname 显示主机名
sh /root/hello.sh 运行脚本
重定向输出:重新定向命令的输出
> 只会收集前方命令的正确输出(覆盖)
2> 专门收集前方命令的错误输出(覆盖)
>> 追加收集前方命令的正确输出
&> 正确错误的都有(覆盖)
head -2 /etc/passwd
head -2 /etc/passwd > /opt/p2.txt
ls /opt/p2.txt
ehco hello
ehco hello > /opt/p2.txt 覆盖重定向
cat /opt/p2.txt
echo 123456
echo 123456 >> /opt/p2.txt 追加重定向
cat /opt/p2.txt
echo 123 > /opt/1.txt
cat /opt/1.txt
cat /a
cat /opt/1.txt /a
cat /opt/1.txt /a > /opt/b.txt 专门收集前方正确的
cat /opt/b.txt
cat /opt/1.txt /a 2> /opt/b.txt 专门收集前方错误的
cat /opt/b.txt
cat /opt/1.txt /a &> /opt/b.txt 前方错误的和正确的都收集
cat /opt/b.txt
要求写一个创建用户的脚本,同时设置密码
黑洞设备:/dev/null
vim /root/user.sh
useradd yxcrs &> /dev/null 创建新的用户名字为....不管有没有都丢入黑洞
echo yxcrs用户创建成功
passwd 123 密码设置为123
echo yxcrs密码设置成功
sh /root/user.sh
vim /root/user1.sh
a=nsd04
useradd $a &> /dev/null
echo $a用户创建成功
passwd $a
echo $a密码设置成功
sh /root/user.sh
为了增加脚本的灵活度,适应多变的环境,使用变量
变量类似于容器 以不变的名称,存放可以变化的值
定义变量:
变量名=存放的值
定义/赋值变量
设置变量是的注意事项
变量名只能由 字母...数字...下划线...组成,要区分大小写
变量名不能以数字开头,不要使用关键字和特殊字符
若指定的变量名以存在,相当于为此变量重新赋值
等于两边不要有空格
基本的格式
引用变量值:$变量名
查看变量值:echo $变量名 echo ${变量名}
a=1000
echo $a
1000
echo ${a}
1000
a=rhel
echo $a8 变量未被定义
echo $a{8}
rhel8
补充:
单引号' ' :取消特殊字符的意义,原样输出
a=100
echo $a
100
echo '$a' 会直接输出
$a
反撇号 ` ` 或者$():将命令的输出,直接参数其他命令的运行
rm -rf /opt/*
date +%F
mkdir /opt/nsd-`date +%F`
ls /opt/
mkdir /opt/abc-$(date +%F)
ls /opt/
mkdir /opt/$(hostname)-$(date +%F)
ls /opt/
` `一般用于俩个命令复合到一起的
$[ ] 运算:+ - * / %(取余数运算,得到的是余数)
echo $[1+2] 加
echo $[1-2] 减
echo $[1*2] 乘
echo $[1/2] 除(除不净时只会显示商)
echo $[1%2] 除(只会显示余数,除尽时会显示0)
根据变量的用途不同来区分
环境变量:变量名不同一般都是大写的,用来设置用户/系统环境
由系统定义完成,由系统赋值来完成
USER=当前系统登陆的用户名
echo $USER
root
useradd yxcrs
su - yxcrs
echo $USER
yxcrs
exit
位置变量:bash内置,存储执行脚本时提供的命令行参数
由系统定义完成,由系统赋值完成
表示为$n n是为序号
$1....$2...............${10}......${11}........
vim /root/user.sh
useradd $1 &> /dev/null
echo $1
sh /root/user.sh 要创建的用户
位置变量 $1 $2 .... ${10}
vim /root/1.sh
echo 我是第一个参数 $1
echo 我是第二个参数 $2
......
sh /root/1.sh user1 user2 ......
预定义变量:bash内置,可直接调用的特殊值,不能直接修改
由系统定义完成,由系统赋值完成
$#: 已加载的位置变量的个数
$*: 所有位置变量的值
$?: 程序退出后的状态值,0表示正常,其他表示异常
vim /root/1.sh
echo 我是第一个参数 $1
echo 我是第二个参数 $2
echo 您一共输入了$#个位置
echo 它们的值分别为$*
sh /root/1.sh user1 user2 ......
user1
user2
您一共输入了2个位置
它们的值分别为user1 user2
常用的测试选项:检查文件状态
-e:文档存在并且为真
-d:文档存在,并且为目录才为真
-f:文档存在,并且为文件才为真
-r:文档存在,并且对其有读取权限为真
-w:文档存在,并且对其有写入权限为真
-x:文档存在,并且对其有执行权限为真
[ -e /etc ] 数据存在即为真
echo $?
0 成功
[ -e /etc ]
echo $?
1 不成功
[ -f /etc/passwd ] 数据存在必须为文件
echo $?
0 成功
[ -f /etc ]
echo $?
1 不成功
[ -d /etc ] 数据存在必须为目录
echo $?
0 成功
比较整数大小(带e的都有等于二字,g是大于,i是小于)
-gt:大于
-ge:大于等于
-eq:等于
-ne:不等于
-lt:小于
-le:小于等于
[ 1 -eq 1 ] 等于
echo $?
0
[ 1 -gt 1 ] 大于
echo $?
1
[ 1 -ge 1 ] 大于等于
echo $?
0
[ 10 -lt 11 ] 小于
echo $?
0
字符串对比 == !=
==:相等一致为真
!=:不等于为真
[ student == root ]
echo $?
1
[ root == root]
echo $?
0
[ $UESR == student ]
echo $?
1
[ $USER != student ]
echo $?
0
if选择结构
if双分支处理
if[条件测试];then
命令序列xx
else
命令序列yy
fi
vim /root/if001.sh
if [ $1 -eq 1 ];then
echo hello
elso
echo hi
fi
vim /root/if02.sh
read -p '请输入您要测试的用户名:'
id $a &> /dev/null
if [ $? -eq 0 ];then
echo $a用户存在
else
echo $a用户不存在
fi
判断IP地址的脚本
利用read 获取用户的输入IP地址
进行判断:
如果本机与用户的输入IP地址可以通信,则输出 可以通信
如果本机与用户的输入IP地址不可以通信,则输出 无法通信
vim /root/if03.sh
read -p '请输入您要测试的IP地址:' ip 要注意一定要有ip这个
ping -c2 $ip &> /dev/null
if [ $? -eq 0 ];then
echo $ip 可以通信
else
echo $ip 无法通信
fi
if多分支处理
if [条件测试1];then
命令序列xx
elif [条件测试2];then
命令序列yy
elif [条件测试3];then
命令序列cc
.......
else
命令序列zz
fi
书写考试成绩脚本 (利用read)
利用read 获取用户的输入成绩
如果成绩大于等于90,则输出 优秀
如果成绩大于等于80,则输出 良好
如果成绩大于等于70,则输出 一般
如果成绩大于等于60,则输出 合格
以上的条件如果都不满足,那么就输出不及格
vim /root/unm.sh
read -p '请输入您的成绩:' num
if [ $num -gt 100 ];then #-gt表示大于
echo 您输入的成绩超出范围
elif [ $num -lt 0 ];then #-lt表示小于
echo 您输入的成绩超出范围
elif [ $num -ge 90 ];then
echo 优秀
elif [ $num -ge 80 ];then
echo 良好
elif [ $num -ge 70 ];then
echo 一般
elif [ $num -ge 60 ];then
echo 合格
else 不及格
echo
sh /root/unm.sh
for循环:可以重复执行一个操作
vim /root/for01.sh
for a in q1 q2 q3 q4
do
useradd $a &> /dev/null
ecdo $a创建成功
done
sh /root/for01.sh
造数工具 {1..99} {起始点..结束点}
for a in {1..15}
do
echo hello world
done
vim /root/for01.sh
for a in {01..10}
do
useradd nsd$a &> /dev/null
echo nsd$a 创建成功
done
sh /root/for01.sh
vim /root/for02.sh
read -p '请输入用户文件路径:' i
if [ -z $i ];then #判断变量值为空为真
echo
elif [ -f $i ];then #存在且必须是文件为真
do
useradd $a &> /dev/null
echo$创建成功
done
else
echo您输入有误,或者不是文件
fi
命令与命令连接:一行执行多个命令
;单纯的连接命令,前面命令运行成功还是失败,后面的命令都会运行
&& 前面的命令必须运行成功,后面的命令才回运行
[root@localhost ~]# useradd cbd01 ; touch /mnt/a.txt
[root@localhost ~]# id cbd01
uid=1023(cbd01) gid=1023(cbd01) 组=1023(cbd01)
[root@localhost ~]# ls /mnt/a.txt
/mnt/a.txt
[root@localhost ~]# useradd cbd01 ; touch /mnt/b.txt
useradd: 用户“cbd01”已存在
[root@localhost ~]# ls /mnt/
123.txt a.txt b.txt
[root@localhost ~]#
echo $RANDOM
echo $[$RANDOM%11] $[]表示运算 %为取余数用算
猜数字游戏
[root@server /]# vim /root/cai.sh
b=$[$RANDOM%10]
read -p '请您输入一个0~9之间的数字:' a
if [ $a -eq $b ];then
echo 恭喜您猜对了
else
echo 抱歉,正确的数字为$b
fi
[root@server /]# sh /root/cai.sh
猜数字游戏优化
[root@server /]# vim /root/cai.sh
b=$[$RANDOM%10]
haha(){ #定义函数为haha
read -p '请您输入一个[0~9]之间的数字:' a
if [ $a -eq $b ];then
echo 恭喜您猜对了
exit #猜对了直接退出整个脚本程序
else
echo 抱歉您猜错了
fi
}
haha #调用haha函数(运行名为haha的全部代码)
haha #调用haha函数(运行名为haha的全部代码)
haha #调用haha函数(运行名为haha的全部代码)
echo 正确的数字为$b
[root@server /]# sh /root/cai.sh
[root@server /]# vim /root/cai.sh
b=$[$RANDOM%10]
for i in {1..3}
do
read -p '请您输入一个0~9之间的数字:' a
if [ $a -eq $b ];then
echo 恭喜您猜对了
exit #结束脚本
else
echo 抱歉,您猜错了
fi
done
echo 正确的数字为$b
[root@server /]# vim /root/cai.sh
b=$[$RANDOM%10]
for i in {1..3}
do
read -p '请您输入一个0~9之间的数字:' a
if [ $a -eq $b ];then #判断是否相等
echo 恭喜您猜对了
exit
elif [ $a -gt $b ];then #判断$a是否大于$b
echo 您猜大了
else
echo 您猜小了
fi
done
echo 正确的数字为$b
for适合处理有一定次数的循环
while适合处理不定次数的循环
while [ 条件 ]
do
重复执行的代码
done
[root@server /]# vim /root/cai.sh
b=$[$RANDOM%10]
while [ 1 -eq 1 ]
do
read -p '请您输入一个0~9之间的数字:' a
if [ $a -eq $b ];then #判断是否相等
echo 恭喜您猜对了
exit #结束整个脚本
elif [ $a -gt $b ];then #判断$a是否大于$b
echo 您猜大了
else
echo 您猜小了
fi
done
sed
vim是交互式文本编译器(需要去运行)
sed非交互式的流文本编辑器(可以直接输出)
功能
输出文本内容(打印)
删除文本内容(删除)
修改文本内容(替换)
处理数据的方式:
处理数据时以行为单位
对数据逐行处理,处理完当前行自动处理下一行,处理完所有行为止
默认将文件内容输出到屏幕
先输出处理后的行,在输出源数据
p 输出文件内容
sed ‘p’ 文件名 #输出该文件的内容重复(先处理后输出)
sed –n ‘p’ 文件名 #输出该文件的内容 –n:屏蔽默认输出
sed –n ‘np’文件名 #输出该文件的第n行内容
sed –n ‘n,mp’文件名 #输出该文件的第n到第m行内容
sed –n ‘np;mp;yp;’文件名 #输出该文件第n行,第m行,第y行的内容
sed –n ‘$p’文件名 #输出该文件的最后一行的内容
[root@server /]# cat /etc/shells
[root@server /]# sed -n '2p' /etc/shells
[root@server /]# sed -n '2p;4p;' /etc/shells
[root@server /]# sed -n '2,4p;' /etc/shells
[root@server /]# sed -n '$p' /etc/shells
d 删除(加上-i选项就是直接对原文件操作)
sed 'nd' 文件名 #删除指定行 第n行
sed '/[0-9]/d' 文件名 #删除含有数字的行
sed '/^$/d' 文件名 #删除空行
sed '/关键字/d' 文件名 #删除包含关键字的行
sed 'n,md' 文件名 #删除第n行到m行
sed 'n,$d' 文件名 #删除第n行到最后一行
s 替换(加上-i选项就是直接对原文件操作)
格式:sed '定址 s/原字符/新字符/选项' 文件名
sed ‘s/a/b/g’文件名 #将该文件中的所有a替换成b
]# sed 's/a/hahaxixi/g' /etc/default/useradd
]# sed 's/home/hahaxixi/g' /etc/default/useradd
]# sed 's/a/haha/g;s/home/xixi/g' /etc/default/useradd
g:表示一行无论有多少个匹配的,全部进行替换
把第三行的H替换成yxcrs,第6行的L替换成wu
sed '3s/H/yxcrs/g;6s/L/wu/g' /etc/default/useradd
有关键字该行中的所有a替换成b
sed '/关键字/s/a/b/g' 文件名
sed '/bash/s/bash/sx/g' /etc/shells
sed '/sh/s/bin/yxcrs/g' /etc/shells
a 添加的数据在指定行的下方(加上-i选项就是直接对原文件操作)
sed 'a内容' 文件名 #在所有行下添加内容
sed 'na内容' 文件名 #在第n行下添加内容
sed 'n,ma内容' 文件名 #在第n行到m行下都添加内容
sed '/关键字/a内容' 文件名 #在关键字行下添加
sed '$a内容' 文件名 #全文最后添加内容
sed '$ayxcrs\nwu\nsx\nsc' /etc/shells
\n #表示回车 #最后一行进行添加
sed '1ayxcrs' /etc/shells #第一行下面进行添加
sed '/bash/ayxcrs' /etc/shells #包含关键字bash行下面进行添加
i 添加的数据在指定行的上方(用法和a相同) (加上-i选项直接对原文件操作)
sed '$iyxcrs\nwu' /etc/shells
\n #表示回车 #最后一行上面进行添加
sed '1iyxcrs' /etc/shells #第一行上面进行添加
sed '/bash/iyxcrs' /etc/shells #包含关键字bash行上面进行添加
c替换整行数据(用法和a相同) (加上-i选项直接对原文件操作)
sed '$cyxcrs\nbenben' /etc/shells
\n #表示回车 #最后一行整行替换
sed '1cyxcrs' /etc/shells #第一行整行替换
sed '/bash/cyxcrs' /etc/shells #包含关键字bash行整行替换
系统安全防护
SELinux概述全称(Security-Enhanced Linux)
美国NSA国家安全局主导开发,一套增强Linux系统安全的强制访问控制体系
集成到Linux内核(2.6及以上)中运行
基于SELinux体系针对用户、进程、目录和文件提供了预设的保护策略,以及管理工具
SELinux一共有3种运行方式
enforcing(强制执行)
permissive(宽松%80)
disabled(彻底禁用)
任何的模式变为disabled都需要经历重新启动系统才能生效
而其他两种模式之间转换不需要重新启动只需要执行setenforce 0
SELINUX=permissive #仅需修改此行配置
此脚本是修改SELinux运行模式
采用sed整行替换的方式,/^SELINUX=/表示以SELINUX=开头的行
[root@server /]# getenforce #查看当前运行模式
Enforcing #当前为强制执行模式
[root@server /]# setenforce 0 #修改当前运行模式 (这个是立即生效的)
[root@server /]# getenforce #查看当前运行模式
Permissive #当前为宽松模式
[root@server /]# vim /etc/selinux/config
SELINUX=permissive #仅需修改此行配置
[root@server /]# vim /root/se.sh
sed -i '/^SELINUX=/cSELINUX=permissive' /etc/selinux/config
setenforce 0
getenforce
[root@server /]# sh /root/se.sh
Permissive
YUM仓库
构建yum仓库时要注意(虚拟机)一定要挂载号iso镜像
[root@localhost ~]# vim yum.sh
mkdir /dvd &> /dev/null #创建挂载点
mount /dev/cdrom /dvd &> /dev/null #挂载操作
rm -rf /etc/yum.repos.d/* #删除所有内容
echo '
[App]
name=Rocky Linux 8.6
baseurl=file:///dvd/AppStream
enabled=1
gpgcheck=0
[Base]
name=Rocky Linux 8.6
baseurl=file:///dvd/BaseOS
enabled=1
gpgcheck=0' > /etc/yum.repos.d/dvd.repo
yum repoinfo #列出仓库内容
yum -y install vsftpd #安装软件测试
vsftpd(安全,快速,稳定,开源)
首先在Rocky8.6上默认安装vsftpd特点
匿名用户不可以登陆
本地用户都可以登陆
匿名用户可以登陆到/var/ftp,只能下载不能上传
本地用户登陆到本地用户的家目录,可以上传和下载
访问FTP地址表示方法
匿名访问
用户验证访问
ftp://user:pass@127.0.0.1/path/to/file
本地用户访问
建立下载测试文件 /home/lisi/yxcrs.txt
本地用户访问,可以下载,也可以上传
虚拟机:服务端
[root@server ~]# rpm -q vsftpd #检测vsftpd服务是否安装
[root@server ~]# systemctl restart vsftpd #重启服务
[root@server ~]# touch /home/lisi/woshilisi.txt #建立测试文件
虚拟机验证:(客户端自己访问自己进行测试)
[root@server ~]# pwd #查看自己目前在那个用户下
/root
[root@server ~]# lftp -u yxcrs 127.0.0.1 #访问ftp服务
lftp yxcrs@127.0.0.1:~> ls
-rw-r--r-- 1 0 0 0 Feb 07 06:04 yxcrs.txt
lftp yxcrs@127.0.0.1:~> exit #退出
存取文件
lftp yxcrs@127.0.0.1:~> put /etc/passwd #上传本机的/etc/passwd文件到FTP服务器
lftp yxcrs@127.0.0.1:~> get yxcrs.txt #下载文件(默认位置为本用户的目录下)
lftp yxcrs@127.0.0.1:~> exit
匿名用户访问
建立下载测试文件 /var/ftp/anon.txt
开启匿名用户访问,登录到/var/ftp位置。可以下载,但是不能上传
虚拟机:服务端
1.修改服务配置文件
[root@server ~]# vim /etc/vsftpd/vsftpd.conf
..........
anonymous_enable=YES #修改配置,开启匿名用户的访问
..........
[root@server ~]# systemctl restart vsftpd #重启vsftpd服务
2.创建测试文件
[root@server ~]# touch /var/ftp/anon.txt #创建测试文件
虚拟机验证
[root@server ~]# lftp 127.0.0.1 #访问127.0.0.1的ftp服务
lftp 127.0.0.1:~> ls
-rw-r--r-- 1 0 0 0 Feb 07 03:41 anon.txt
..........
lftp 127.0.0.1:/> put anaconda-ks.cfg #上传数据,失败
put: 访问失败: 550 Permission denied. (anaconda-ks.cfg)
lftp 127.0.0.1:/> get anon.txt #下载,成功
lftp 127.0.0.1:/> exit
学会使用wget命令
]# yum -y install wget #安装wget服务
]# rm -rf yxcrs.txt #删除当前路径下,删除已下载的数据
]# rm -rf anon.txt #删除当前路径下,删除已下载的数据
]# wget ftp://127.0.0.1/anon.txt #默认下载到当前路径
]# wget ftp://127.0.0.1/anon.txt -o /opt/ftp.txt #指定下载位置并且创建名字
]# ls /opt/
]# touch /home/bob/yxcrs.txt #在家目录创建测试文件
]# wget ftp://yxcrs:123@127.0.0.1/yxcrs.txt #使用用户和密码下载文件
]# ls
]# wget ftp://yxcrs:123@127.0.0.1/yxcrs.txt -o /opt/abob.txt
#使用用户和密码下载文件到 /opt/abob.txt
]# ls /opt
禁锢本地用户在自己家目录 (在vsftpd.conf里修改文件)
虚拟机:在服务器端配置
[root@server vsftpd]# vim /etc/vsftpd/vsftpd.conf
...
100行 chroot_local_user=YES #本地用户禁足在家目录 (将开头的#号进行删除)
101行 allow_writeable_chroot=YES
#新增配置,手写配置,允许普通用户禁足的目录有写入权限
...
[root@server vsftpd]# systemctl restart vsftpd
虚拟机:在客户端测试:
[root@localhost test]# lftp -u yxcrs 127.0.0.1
密码:
lftp yxcrs@127.0.0.1:~> ls
lftp yxcrs@127.0.0.1:~> cd /opt #操作失败,因为禁足配置
用户访问控制(黑 白 名单)
通过ftpusers(黑名单)阻止yxcrs访问
虚拟机:
[root@server ~]# id mike
[root@server ~]# vim /etc/vsftpd/ftpusers #无需重启服务
........
yxcrs #在最后一行添加
用yxcrs访问ftp
[root@server ~]# lftp -u yxcrs 127.0.0.1 #使用用户yxcrs访问
密码:
lftp mike@127.0.0.1:~> ls
ls: 登录失败: 530 Login incorrect.
lftp mike@127.0.0.1:~>
将user_list设为白名单
允许yxcrs,yxcrs1访问
分别测试匿名访问yxcrs和yxcrs1访问
虚拟机:
[root@server ~]# vim /etc/vsftpd/vsftpd.conf
...
userlist_deny=NO #新增配置,变成白名单,最好在配置文件的最后
[root@server ~]# systemctl restart vsftpd #重启服务
[root@server ~]# grep yxcrs /etc/vsftpd/ftpusers #yxcrs在黑名单中
yxcrs
[root@server ~]# vim /etc/vsftpd/user_list #白名单中添加yxcrs与yxcrs1
.......
yxcrs
yxcrs1
虚拟机测试:
分别使用mike与lisi登录测试,yxcrs1可以登录,yxcrs2登录失败
[root@server ~]# lftp -u yxcrs 127.0.0.1
[root@server ~]# lftp -u yxcrs1 127.0.0.1
在白名单中添加匿名用户anonymous
[root@server ~]# vim /etc/vsftpd/user_list #白名单中添加anonymous
.......
yxcrs
yxcrs1
yxcrs2
anonymous
虚拟机测试:
[root@server ~]# lftp 127.0.0.1 #测试匿名用户访问,访问成功
[root@server ~]# lftp -u yxcrs 127.0.0.1 #测试bob用户登录,访问成功
思考题:
系统有harry、mike、kaka用户,请问以下情况,谁可以登录FTP。
[root@server ~]# grep yxcrs1 /etc/vsftpd/ftpusers # 黑名单
yxcrs
[root@server ~]# grep yxcrs2 /etc/vsftpd/ftpusers # 黑名单
yxcrs2
[root@server ~]# grep yxcrs2 /etc/vsftpd/user_list # 白名单
yxcrs3
[root@server ~]# grep yxcrs3 /etc/vsftpd/user_list # 白名单
yxcrs4
[root@server ~]# grep userlist_deny /etc/vsftpd/vsftpd.conf
userlist_deny=NO
总结:由于userlist文件是白名单,所有 yxcrs3最终可以登录成功
由此可得当用户在白名单同时又在黑名单里是按黑名单的
限制下载速度
需要两个比较大的文件(可以明显的看出下载速度)
命令格式:
dd if=数据的来源 of=数据写到哪里 bs=每次读写多少 count=次数
]# dd if=/dev/zero of=/var/ftp/anon.tgz bs=1M count=2048
]# du -sh /var/ftp/anon.tgz #统计大小
]# dd if=/dev/zero of=/home/yxcrs/yxcrs.tgz bs=1M count=2048
]# du -sh /home/yxcrs/yxcrs.tgz #统计大小
/dev/zero #可以无限产生数据0,dd命令可以再此设备取得无限数据
限制匿名下载速度为5M/s限制本地用户下载速度为8M/s通过 wget 验证上述限制
并发连接和速度:
anon_max_rate=匿名用户访问速度(字节/秒)
local_max_rate=本地用户访问速度(字节/秒)
[root@server ~]# vim /etc/vsftpd/vsftpd.conf #新增配置
........
anon_max_rate=5000000 #匿名用户5000000字节/秒
local_max_rate=8000000 #本地用户8000000字节/秒
[root@server ~]# systemctl restart vsftpd
]# dd if=/dev/zero of=/var/ftp/anon.tgz bs=1M count=2048
]# dd if=/dev/zero of=/home/yxcrs/yxcrs.tgz bs=1M count=2048
测试:
[root@server ~]# wget ftp://127.0.0.1/anon.tgz
[root@server ~]# wget ftp://yxcrs:123@127.0.0.1/yxcrs.tgz