linux

系统简介

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.网络安全

进入救援模式,进行密码设置

  1. 利用reboot重启,

  1. 进入救援模式 按e

  1. 找到linux开头的一行,把ro替换为rw(ro只读加载)(rw可读写加载)然后再空格rw后面输入rd.break(进入救援模式) 然后按ctrl+x进入救援模式

  1. 进入救援模式的特征:(switch_root:/#)

switch_root:/#
switch_root:/#ls sysroot 查看救援模式下的数据
switch_root:/#chroot /sysroot 切换到硬盘操作系统的数据
sh-5.1#ls 查看硬盘操作系统的数据
sh-5.1#passwd root 修改root的密码

要修改的简单点

  1. 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最大)

一个用户可以属于多个组

一个用户最少属于一个组

组随用户而来随用户而去

基本组:一般情况与用户同名,一个用户必须有基础组,基础组只有有一个

附加组:一个用户可以有多个附加组,也可以没有附加组

一般使用附加组方便管理不会很烦

  1. groupadd 创建组 stugrp tarena

  1. grep stugrp /etc/groud

  1. gpasswd -a kaka tarena 把用户kaka加入组tarena

  1. 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结尾

错误的文件会影响正确的文件

  1. 删除错误的文件排除干扰

rm -rf /etc/yum.repos.d/*

ls /etc/yum.repos.d/

  1. 手写配置文件

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非交互式的流文本编辑器(可以直接输出)

功能
  1. 输出文本内容(打印)

  1. 删除文本内容(删除)

  1. 修改文本内容(替换)

处理数据的方式:
  1. 处理数据时以行为单位

  1. 对数据逐行处理,处理完当前行自动处理下一行,处理完所有行为止

  1. 默认将文件内容输出到屏幕

  1. 先输出处理后的行,在输出源数据

  • 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://127.0.0.1

ftp://127.0.0.1/path/to/file

用户验证访问

ftp://user:pass@127.0.0.1

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值