一、 介绍

服务器:

本质:电脑(计算机)
功能:用于为其它计算机提供服务
特点:配置高级
CPU核心数多,不止1个(intel至强系列);
内存:容量大
磁盘:数量多
电源:可靠
主板:面积大

C/S的服务模式:服务端提供资源、功能,客户端使用(请求)资源、功能

Linux:

源自:unix
Linux之父:Linus
本质:内核:相当于汽车引擎,在计算机中硬件和软件件沟通的桥梁

https://cdn.o4g.cn/blog/img/2021/07/28/32949333be9c7.png

部署环境


安装系统


img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img



Vm配置


img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img

img


目录结构:

img

二 、命令行基本使用

bash

bash是主流Linux系统默认的shell解释器
bash的优势:
①可以通过上下方向键来调取历史命令;
②具备较为完善的tab补全;
③具有脚本能力和实用的环境变量;
④具有完善的终端提示符

[root@localhost ~]#
[当前登录的用户@主机名 当前所在目录的名称]#或$
@:at,介词:在...
~:当前用户的家目录,如果是root用户则代表/root,如果是普通用户则代表/home/用户名
\#:当前登录的用户是管理员root
$:当前登录的用户是普通用户

路径

绝对路径:以/为起点的路径,叫做绝对路径(推荐使用)
相对路径:不以/为起点的路径,叫做相对路径,以当前所在路径为参照

快捷键

ctrl+c 废弃当前编辑的命令行(结束正在运行的命令)
Esc+.或Alt+. 粘贴上一个命令的参数
ctrl+l 清空整个屏幕
ctrl+u 清空至行首
ctrl+w 往回删除一部分(以空格界定)
ctrl+shift+t 新开一个终端
Home 跳到行首
End 跳到行末

基础命令练习

命令格式:命令字 [选项] [参数]

[root@localhost ~]# date
[root@localhost ~]# date +'%Y-%m-%d %H:%M:%S'
[root@localhost ~]# date -s '2008-08-08 20:00'
[root@localhost ~]# date +'%Y-%m-%d  %H:%M:%S'

[root@localhost ~]# cal
[root@localhost ~]# cal -m
[root@localhost ~]# cal -3
[root@localhost ~]# cal -y

-c或--bytes或--chars 只显示Bytes数。(大小
-l或--lines 显示行数。 (一共几行
-w或--words 只显示字数。 (一共多少字数
[root@localhost ~]# wc -l /etc/passwd
[root@localhost ~]# wc -w /etc/passwd
[root@localhost ~]# wc -c /etc/passwd
[root@localhost ~]# wc /etc/passwd
  45  103 2490 /etc/passwd

三 、命令行管理文件

文件分类

Linux中文档分类:使用不同的颜色字体进行区分的
白色:文本文件
蓝色:目录
绿色:可执行程序
蓝绿色:快捷方式(软链接)
红色:压缩包(tar包、zip包、rpm软件包、iso镜像文件)

文件名以.开头的文档,是隐藏文档

命令

ls (列出目录)

-a :全部的文件,连同隐藏文件( 开头为 . 的文件) 一起列出来(常用)
-d :仅列出目录本身,而不是列出目录内的文件数据(常用) 
-l :长数据串列出,包含文件的属性与权限等等数据;(常用)

[root@localhost ~]# ls /root
Desktop    Downloads             Music     Public     Videos
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates

pwd与cd导航⽬录

 cd [相对路径或绝对路径] #进入某个目录
 pwd # 显示当前所在目录
 
[root@localhost ~]# cd /
[root@localhost /]# pwd
/
[root@localhost /]# cd ~
[root@localhost ~]# pwd
/root

touch(创文件)

[root@localhost ~]# touch /root/1.txt
[root@localhost ~]# ls /root
1.txt            Desktop    Downloads             Music     Public     Videos
anaconda-ks.cfg  Documents  initial-setup-ks.cfg  Pictures  Templates

mkdir (创建文件夹)

-m :配置文件的权限
-p :递归创建

[root@localhost test]# mkdir a
[root@localhost test]# ls -la
total 0
drwxr-xr-x.  3 root root  15 Jul 29 14:26 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
drwxr-xr-x.  2 root root   6 Jul 29 14:26 a
[root@localhost test]# mkdir -p b/c
[root@localhost test]# tree
.
├── a
└── b
    └── c

3 directories, 0 files
[root@localhost test]# mkdir -m 777 d
[root@localhost test]# ls -la
total 0
drwxr-xr-x.  5 root root  33 Jul 29 14:26 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
drwxr-xr-x.  2 root root   6 Jul 29 14:26 a
drwxr-xr-x.  3 root root  15 Jul 29 14:26 b
drwxrwxrwx.  2 root root   6 Jul 29 14:26 d ## 权限777

cp (复制)

-r:递归复制(复制文件夹用)
-i:若目标已经存在时,在覆盖时会先询问

[root@localhost test]# touch 1.txt
[root@localhost test]# cp 1.txt 2.txt
[root@localhost test]# ls -la
total 0
drwxr-xr-x.  2 root root  32 Jul 29 14:35 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
-rw-r--r--.  1 root root   0 Jul 29 14:35 1.txt
-rw-r--r--.  1 root root   0 Jul 29 14:35 2.txt
[root@localhost test]# mkdir aa
[root@localhost test]# touch aa/aa.txt
[root@localhost test]# cp -r aa bb
[root@localhost test]# tree
.
├── aa
│   └── aa.txt
└── bb
    └── aa.txt

复制后重命名:


cp /etc/文件1 /opt/abc

情况1:/opt下原来没有abc
复制/etc/文件1到/opt并重命名为abc

情况2:/opt下原来有abc且为一个文件
复制/etc/文件1到/opt并询问是否覆盖

情况3:/opt下原来有abc且为一个目录
复制/etc/文件1到/opt/abc目录中(文件名还是文件1,不会发生重命名)


cp /etc/目录1 /opt/abc

情况1:/opt下原来没有abc
复制/etc/目录1到/opt并重命名为abc

情况2:/opt下原来有abc且为一个文件
报错,因为目录无法覆盖文件

情况3:/opt下原来有abc且为一个目录
复制/etc/目录1到/opt/abc目录中(文档名还是目录1,不会发生重命名)

rm (删除)

-r 递归删除 (删除文件夹)
-f 忽略报错,忽略提示,直接删除

[root@localhost test]# ls -al
total 0
drwxr-xr-x.  4 root root  26 Jul 29 14:37 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
drwxr-xr-x.  2 root root  20 Jul 29 14:36 aa
drwxr-xr-x.  2 root root  20 Jul 29 14:36 bb
[root@localhost test]# rm aa
rm: cannot remove 'aa': Is a directory
[root@localhost test]# rm -r aa
rm: descend into directory 'aa'? y
rm: remove regular empty file 'aa/aa.txt'? y
rm: remove directory 'aa'? y

mv (移动)

-f 强制移动忽略警告或者提示

[root@localhost test]# ls
bb
[root@localhost test]# mv bb aa
[root@localhost test]# ls
aa

Vim编辑器

基本使用

image-20210729185143282

[root@localhost test]# vim a.txt
###按i键进入插入模式
###输入以下内容
zhangsan
lisi
hello
zhyx
###按ESC键回到命令模式
###按:键进入末行模式
###末行模式输入wq指令保存并退出
:wq

技巧

<命令模式>

1.移动光标:键盘上下左右键、Home键、End键
2.行间跳转:到全文的第一行(gg)、到全文的最后一行(G)、到全文的第10行(10G或10gg)
3.复制、粘贴:
复制1行(yy)、复制3行(3yy)
粘贴到光标之后(小写p)
粘贴到光标之后 (大写P)
4.删除(实际为剪切):
删除单个字符(x或Delete)
删除1行(dd)、删除3行(3dd)
5.查找关键词:
搜索(/word)切换结果(n、N)
6.撤销操作:
撤销最近的一次操作(u)
取消前一次撤销操作Ctrl+r

<命令模式进入插入模式>

C(大写) 可以删除光标之后,并且进入插入模式
i 跳到光标所在字符前进入插入模式
a 跳到光标所在字符后进入插入模式
o 跳到光标所在行的后一行并进入插入模式

<末行模式>

1.保存/退出文件操作:
保存当前文件(:w),放弃编辑并退出(:q!),保存并退出(:wq或:x)
2.字符串替换:
替换当前行第一个'old'(:s/old/new/)
替换当前行所有的'old'(:s/old/new/g)
替换第n-m行所有的'old'(:n,m s/old/new/g)
替换全文所有的'old'(:% s/old/new/g)
3.开关参数的控制:
显示行号(:set nu)
关闭显示行号(:set nonu)
启用自动缩进(:set ai)
关闭自动缩进(:set noai)

四 、命令行高级使用

1. 通配符

① :代表任意个数任意字符
# /boot目录下,vm开头的文件
[root@localhost ~]# ls /boot/vm*  
# /etc目录下,tab结尾的文件
[root@localhost ~]# ls /etc/*tab  
# /etc目录下,re开头的 .confg结尾的文件
[root@localhost ~]# ls /etc/re*.conf
# /etc目录下,包含tab三个字符的文件
[root@localhost ~]# ls /etc/*tab*
②:单个任意字符
[root@localhost ~]# ls /dev/tty?
/dev/tty0  /dev/tty1  /dev/tty2  /dev/tty3  /dev/tty4  /dev/tty5  /dev/tty6  /dev/tty7  /dev/tty8  /dev/tty9
[root@localhost ~]# ls /dev/tty??
/dev/tty10  /dev/tty15  /dev/tty20  /dev/tty25  /dev/tty30  /dev/tty35  /dev/tty40  /dev/tty45  /dev/tty50  /dev/tty55  /dev/tty60  /dev/ttyS1 ...........#省略
③[起点-终点]:一个范围
# 列出/dev/下tty0-9的文件
[root@localhost ~]# ls /dev/tty[0-9]
# 列出/dev/下tty3-8的文件
[root@localhost ~]# ls /dev/tty[3-8]
#Tips:[]范围只能寻找个位数的,多位数有bug,如下
[root@localhost test]# ls -la /dev/tty[0-60] 
crw--w----. 1 root tty 4, 0 Jul 29 13:44 /dev/tty0
crw--w----. 1 gdm  tty 4, 1 Jul 29 13:44 /dev/tty1
crw--w----. 1 root tty 4, 2 Jul 29 13:44 /dev/tty2
crw--w----. 1 root tty 4, 3 Jul 29 13:44 /dev/tty3
crw--w----. 1 root tty 4, 4 Jul 29 13:44 /dev/tty4
crw--w----. 1 root tty 4, 5 Jul 29 13:44 /dev/tty5
crw--w----. 1 root tty 4, 6 Jul 29 13:44 /dev/tty6
④{字符1,字符2,字符3...}:集合
[root@localhost ~]# ls /dev/tty{1,3,13,4,S1}
/dev/tty1  /dev/tty13  /dev/tty3  /dev/tty4  /dev/ttyS1

思考题:
列出/dev/tty21至/dev/tty30之间所有设备文件?
答案:[root@localhost ~]# ls /dev/tty{2[1-9],30}

2. 管道符

管道符(|):将管道前面命令的输出结果,交由管道后面的命令再次处理
适用范围:管道符后面的命令,只能是单一参数的命令

查看文本前n行:head -n 文本
查看文本后n行:tail -n 文本

思考题:

①查看文本文件/etc/passwd的8-12行
思路:先取出/etc/passwd文件中的前12行,再从前12行中取出后5行就是8-12行
答案:head -12 /etc/passwd | tail -5

②列出带行号的文本文件/etc/passwd的8-12行
答案:cat -n /etc/passwd | head -12 | tail -5

3. grep文本过滤

grep:输出包含符合查找条件的行(输出结果按行输出)
grep 选项 查找条件 文本

指令

常用选项
参数解释
-n显示行号
-v取反
-i忽略大小写
-c统计符合条件的行数
常用条件
参数解释
关键词匹配包含关键词的行
^关键词匹配以关键词开头的行
关键词$匹配以关键词结尾的行
^$匹配空行

实验

[root@localhost ~]# grep root /etc/passwd
[root@localhost ~]# grep ^root /etc/passwd
[root@localhost ~]# grep bash$ /etc/passwd
[root@localhost ~]# grep ^$ /etc/chrony.conf 
[root@localhost ~]# grep -n ^$ /etc/chrony.conf 
[root@localhost ~]# grep -v ^$ /etc/chrony.conf 
[root@localhost ~]# grep ROOT /etc/passwd
[root@localhost ~]# grep -i ROOT /etc/passwd
[root@localhost ~]# grep -c root /etc/passwd

思考题:提取配置文件/etc/chrony.conf中的有效配置信息
(去掉以#开头的注释信息和空行)
答案:[root@localhost ~]# grep -v ^$ /etc/chrony.conf | grep -v ^#

4. 输出重定向

解释

标准输入:来自于键盘的输入
标准输出:输出到屏幕(终端)

标准输出:
①正确输出:当执行一条命令之后,正常的输出结果
②错误输出:当执行命令失败后,报错的输出结果

输出重定向:将原来按照标准输出应该输出到屏幕的输出结果,重新定向输出到别的地方(文本文件)

  • 覆盖重定向:>
  • 追加重定向:>>
  • 正确输出重定向:> >>
  • 错误输出重定向:2> 2>>
  • 正确与错误输出重定向:&> &>>

代码

[root@localhost test]# echo 111 > 
[root@localhost test]# cat success 
111

[root@localhost test]# aa 2> error
[root@localhost test]# cat error 
bash: aa: command not found...
Failed to search for file: Cannot update read-only repo
[root@localhost test]# echo 222 2>> success
[root@localhost test]# cat success
111 # 因为echo 222并没有错误,所以没有错误的信息被写入

[root@localhost test]# ls /mnt &>> mnt.txt
[root@localhost test]# cat mnt.txt 
hgfs
[root@localhost test]# ls /mntt &>> mnt.txt 
[root@localhost test]# cat mnt.txt  ## 无论正确错误,都会被写入
hgfs
ls: cannot access '/mntt': No such file or directory

5. find搜索文档

介绍

作用:根据预设的条件递归查找出符合条件的文档
除了从指定路径查找,还会逐层查找指定路径的子目录

代码

find     搜索路径     条件1     [条件2    条件3...]
常用选项:
①按文档类型搜索
-type    {f,d,l}:f文件,d目录,l快捷方式(软链接)
[root@localhost ~]# find /home/ -type f
[root@localhost ~]# find /home/ -type d

②按名称搜索
-name或-iname(忽略大小写)    文档名称(支持通配符) 
[root@localhost ~]# find /etc/ -name *tab*
[root@localhost ~]# find /etc/ -name *tab* -type f

③按文档大小搜素
-size    {+,-}大小数目{k,M,G,}
[root@localhost ~]# find /etc/ -size -1k | wc -l
[root@localhost ~]# find /etc/ -size -1024 | wc -l
[root@localhost ~]# find /etc/ -size -1M | wc -l

④按文档的所有者搜索
-user   用户名
[root@localhost ~]# find /home/ -user student

⑤按文档的所属组搜索
-group   组名
[root@localhost ~]# find /home/ -group student

⑥限制搜索层数
-maxdepth    层数
[root@localhost ~]# find /etc/ -maxdepth 1 -name *tab*

⑦按文档修改时间搜索
-mtime  {+,-,}天数    (+N:N天之前,-N:N天之内,N:第N天)
[root@localhost ~]# find /etc/ -mtime +1000
[root@localhost ~]# find /etc/ -mtime +2000
[root@localhost ~]# find /etc/ -mtime +3000

image-20210729221952140

⑧对搜索结果进行处理
-exec   处理命令{}   \; ({}代表前面的每一个搜索结果,\;代表-exec执行的命令结束)
[root@localhost ~]# find /etc/ -mtime +5000 -exec cp -r {} /mnt/ \;

6. 防止参数扩展

几个特殊符号:'' "" \
总结:一般情况下''号可以解决大部分问题

[root@localhost test]# echo My Hostname is $(hostname)
My Hostname is localhost.localdomain
[root@localhost test]# echo ${aaa}_$bbb
Tom_Wang
[root@localhost test]# echo '${aaa}_$bbb'
${aaa}_$bbb
[root@localhost test]# echo ##hello

[root@localhost test]# echo '##hello'
##hello
[root@localhost test]# echo "##hello"
 ##hello
[root@localhost test]# echo "${aaa}_$bbb
16 Tom_Wang
[root@localhost test]# echo \##hello
##hello

五 、用户管理

解释

  • 用户:登录到系统的账号
  • 组:将用户集中管理分组
  • 基本组:随着用户的创建会自动创建与用户名同名的组并自动加入
  • 附加组:用户除了基本组,还可以加入别的组
  • uid:唯一标识用户的编号(类似于身份证号)
  • 管理员root用户的uid:0
  • 普通用户的uid:默认从1000开始
  • 系统程序用户uid范围:1-999

创建

useradd     [选项1   参数1   选项2   参数2...]    用户名

常用选项参数

参数数值解释
-uuid创建用户时,指定用户的uid
-d家目录路径创建用户时,指定用户的家目录(默认家目录在/home/用户名)
-s登录shell创建用户时,指定用户登录的默认shell解释器(不指定则为/bin/bash)
-G附加组创建用户时,加入指定的附加组

实验

[root@localhost ~]# useradd user1001
[root@localhost ~]# id user1001 
[root@localhost ~]# useradd -u 10086 zgyd
[root@localhost ~]# useradd -u 10010 zglt
[root@localhost ~]# id zgyd 
[root@localhost ~]# id zglt
[root@localhost ~]# useradd -d /home/lisi  zhangsan
[root@localhost ~]# grep ^zhangsan /etc/passwd
[root@localhost ~]# useradd -d /haha  lisi
[root@localhost ~]# grep ^lisi /etc/passwd
[root@localhost ~]# useradd -s /sbin/nologin test_nl
[root@localhost ~]# su - test_nl
(su  -   用户名:切换用户)
(会报错,因为解释器为nologin的用户禁止登录)
[root@localhost ~]# grep ^test_nl /etc/passwd
[root@localhost ~]# useradd -G test_nl testtest
[root@localhost ~]# id testtest

创建组

groupadd     [选项   参数]    用户名

常用选项参数
-g   gid        创建组时指定组的gid
[root@localhost ~]# groupadd testgroup
[root@localhost ~]# groupadd -g 10101 group101

用户和组管理

1. 设置密码

root用户可以无需认证原密码设置任意用户的密码
root用户设置的密码不受密码安全规则限制
普通用户只能修改自己的密码
①交互式设置密码
(1)管理员root
[root@localhost ~]# passwd lisi
###根据交互提示设置密码
(2)普通用户
[root@localhost ~]# passwd
###普通用户只能修改自己的密码

②非交互式设置密码(只有root可以非交互式修改密码)
[root@localhost ~]# echo 123 | passwd --stdin zhangsan

2. 修改用户属性

usermod     [选项1   参数1   选项2   参数2...]    用户名
参数数值解释
-uuid修改用户的uid
-d家目录路径修改用户的家目录(不会自动创建家目录,需要手动创建)
-s登录shell修改用户登录的默认shell解释器

[root@localhost test]#  grep ^root /etc/passwd
root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:uid:基本组gid:描述:用户的家目录:登录shell

image-20210729225629017

密码文件:

[root@localhost ~]# grep ^root /etc/shadow
root:$6$UiGI4Tc2$htsXfYUfS/vBn2JgtdsMjyquqvKAmf1:16261:0:99999:7:::
用户名:加密后的密码:上一次修改密码的时间戳
(自1970-1-1到上一次修改密码时间经过的天数)

3. 用户和组加入退出

gpasswd  -a    用户名    组名            添加用户到组
gpasswd  -d  用户名    组名            将用户从组删除

[root@localhost ~]# gpasswd -a root testgroup 
[root@localhost ~]# id root
[root@localhost ~]# gpasswd -a zhangsan testgroup 
[root@localhost ~]# id zhangsan 
[root@localhost ~]# grep ^testgroup /etc/group
testgroup:x:10092:root,zhangsan
组名:密码占位符:gid:组成员列表(只包含将该组认定为附加组的用户)

4. 删除用户和组

# 删除用户
userdel  [-r]   用户名
###-r选项代表删除用户同时也删除用户的家目录、邮件目录等
[root@localhost ~]# userdel -r zhangsan 
[root@localhost ~]# userdel lisi


# 删除组
groupdel       组名
[root@localhost ~]# groupdel testgroup 

六、管理文档权限

基本权限

img

  • 读:read(r):允许查看(文件:cat、head、tail;目录:ls)
  • 写:write(w):允许修改(文件:vim、>、>>;目录:rm、mv、cp、mkdir、touch)
  • 执行:execute(x):允许运行或切换(文件:shell脚本;目录:cd)

以下是一些注意的点

  • 若对父目录无权限,对子目录及子文件有权限也无意义
  • 所有普通用户无法运行chmod命令,只有管理员root可以

权限的使用对象(身份)

  • 所有者:user(u):文档的主人,拥有此文档的用户
  • 所属组成员:group(g):除了所有者,对于文档具备一定权限的组的成员(所属组一般是所有者的基本组)
  • 其它用户:others(o):既不是所有者也不是所属组成员的系统其它用户

查看权限(ls -l解读)

[root@localhost ~]# ls -l /etc/passwd
-rw-r--r--. 1 root root 2768 Jul 19 00:59 /etc/passwd
[root@localhost ~]# ls -ld /etc/
drwxr-xr-x. 135 root root 8192 Jul 19 00:59 /etc/

1:-代表这是一个文件、d代表这是一个目录、l代表这是一个快捷方式(软链接)
2-10:2-4所有者读写执行权限、5-7所属组读写执行权限、8-10其它用户组读写执行权限
11:文件代表硬链接个数,目录代表子目录的个数
12:文档的所有者
13:文档的所属组
14:文档的大小(默认以字节为单位)
15:最后修改时间
16:文档路径

判断权限

例子

例:假设系统中有/testdir目录,通过ls命令查看属性如下
[root@server0 ~]# ls -ld /testdir/
dr-xrwxr--. 2 student student 23 8月   7 11:11 /testdir/
①student用户对于/testdir具备什么权限?
student用户是/testdir的所有者;判断出所有者的权限是r-x:代表student用户对/testdir目录拥有读和执行的权限
(根据匹配即停止的原则,student用户虽然既是所有者,也是所属组student组的成员,但是因为所有者优先级更高,所以student用户的权限应该是所有者的权限)

[root@server0 ~]# id zhangsan
uid=1001(student) gid=1001(zhangsan) groups=1001(zhangsan),1000(student)
②zhangsan用户对于/testdir具备什么权限?
zhangsan用户不是所有者;通过id命令查看到zhangsan用户是student组(/testdir目录的所属组)的成员;判断出zhangsan是/testdir的所属组成员权限为rwx:代表zhangsan用户对/testdir目录拥有读、写、执行的权限

总结

  • 第一步:判断用户的身份

    • 判断遵循“匹配即停止”的原则:一旦匹配到身份立即停止匹配,不再判断低优先级的身份关系
    • 判断优先级:所有者>所属组>其它用户
  • 第二步:判断该身份的权限

    • 直接观察ls -l或ls -ld命令的输出结果

设置基本权限

命令

chmod     [-R]    权限设置     /文档路径
-R:递归设置(可用于目录,除了设置目录本身的权限,同时设置目录的子文档权限)

方法


r:4
w:2
x:1
例1:将/testdir目录的权限设置为所有者拥有读和执行的权限、所属组拥有读、写、执行的权限、其它用户拥有只读权限

# u:r-x:4+1=5
# g:rwx:4+2+1=7
# o:r--:4=4
[root@server0 ~]# chmod   574  /testdir

  • u:所有者
  • g:所属组
  • o:其它用户
  • +:添加
  • -:删除
  • =:设置为
  • r:读
  • w:写
  • x:执行

例2:为/testdir目录的所有者添加写的权限

[root@localhost test]# touch 1
[root@localhost test]# ls -la
total 0
drwxr-xr-x.  2 root root  15 Jul 30 17:26 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
-rw-r--r--.  1 root root   0 Jul 30 17:26 1
## 文件所有者增加执行权限
[root@localhost test]# chmod u+x 1
[root@localhost test]# ls -la
total 0
drwxr-xr-x.  2 root root  15 Jul 30 17:26 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
-rwxr--r--.  1 root root   0 Jul 30 17:26 1
## 文件所属组的权限设置为写入
[root@localhost test]# chmod g=w 1
[root@localhost test]# ls -al
total 0
drwxr-xr-x.  2 root root  15 Jul 30 17:26 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
-rwx-w-r--.  1 root root   0 Jul 30 17:26 1

设置文档的归属关系

命令格式:chown  [-R]  所有者:所属组   /文档路径
设置所有者:chown  [-R]  所有者   /文档路径
设置所属组:chown  [-R]  :所属组   /文档路径

-R:递归设置(除了设置目录的归属关系,还设置子文档的归属关系)

设置acl权限

ACL:acl针对特定的用户或组,单独设置权限

比起基本权限和归属关系的设置,可以更加精细地控制权限

设置acl:
setfacl  [-R]  -m   u:用户名或g:组名:权限类别    /文档路径

删除单个acl:
setfacl  [-R]  -x   u:用户名或g:组名    /文档路径

删除文档的所有acl:
setfacl  [-R]  -b    /文档路径

查看文档的acl:
getfacl   /文档路径

-R:递归设置(除了为指定目录设置acl,还设置子文档的acl)

特殊权限

Set GID

chmod   g+s或g-s   /路径/目录
适用:目录
让新增的子文档,自动继承父目录的所属组

Set UID

chmod   u+s或u-s   /路径/可执行文件
适用:可执行文件
传递所有者身份,用户再执行脚本时可以暂时拥有所有者的权限

[root@localhost test]# echo 'mkdir /test/a' > /test/mkdir.sh
[root@localhost test]# chmod u+s mkdir.sh 
[root@localhost test]# ls -al
total 4
drwxr-xr-x.  2 root root  22 Jul 30 17:38 .
dr-xr-xr-x. 18 root root 236 Jul 29 14:25 ..
-rwSr--r--.  1 root root  14 Jul 30 17:38 mkdir.sh
## (s代表所有者的执行权限为x,S代表所有者的执行权限为-)
## 假如Student用户执行mkdir.sh的时候,他将会在/test文件夹下创建一个a文件夹,但是student的用户可能没有test文件夹下写入文件的权限,那么此时如果文件设置了s权限,那么student可以暂时拥有root的权限执行这个脚本

Sticky Bit

chmod o+t或o-t /路径/文档
适用:开放w权限的目录
目录的所有者才能在目录中操作(创建、删除等)文档

七 、管理系统网络

IP编址基本概念

32位二进制 11000000101010000000000100000000

每8位以.隔开 11000000.10101000.00000001.00000000

点分十进制 192.168.1.32

子网掩码

IPv4:Internet协议版本4
区号-电话号码
020-28478912
0755-28478912

子网掩码-IP地址
192.168.1.32/1-32

子网掩码:用于区分网络位和主机位

二进制IP地址/二进制子网掩码11000000101010000000000100000000/1111111111111111111111111100000000

点分十进制IP地址/点分十进制子网掩码 192.168.1.0/255.255.255.0

转换为子网掩码长度 192.168.1.0/24

这个网段实际代表的IP地址范围 192.168.1.1-254

一般地,可以将IP地址分为A、B、C类
A类:第一位1-127:默认子网掩码8位:网.主.主.主
B类:第一位128-191:默认子网掩码16位:网.网.主.主
C类:第一位192-223:默认子网掩码24位:网.网.网.主

相关概念

网关地址:指定进行不同网段通信时,从哪里出网
路由:在网络中负责给不同网段通信指路
DNS:将域名(网址)解析成IP地址
DHCP服务器:自动分配IP地址、网关、DNS等网络配置给主机

image-20210730215930147

image-20210730215940012

Linux网络配置

两种类型

  • 方式1:自动获取,前提:网络中有且仅有一个DHCP服务器
  • 方式2:手动配置,固定配置,静态配置

配置方法

①修改配置 -》②激活网卡连接 -》 ③验证

①修改配置
1. 修改配置文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens160 
TYPE=Ethernet                    网卡类型:以太网卡
BOOTPROTO=none                   网络配置方式:none代表静态
DEFROUTE=yes                     默认网关
NAME=ens160                      网络配置的名称
DEVICE=ens160                    设备名称(固定)
ONBOOT=yes                       网络开机自启
IPADDR=172.25.0.11               IP地址
PREFIX=24                        子网掩码长度
GATEWAY=172.25.0.254             网关地址
DNS=172.25.254.254               DNS地址
2.nmcli命令修改
①查看网络连接名称
[root@localhost ~]#  nmcli connection show 
NAME    UUID                                  TYPE      DEVICE 
ens160  fc7ef3c3-e5ea-41d2-a07d-e73f47c86780  ethernet  ens160 
virbr0  b046567d-eae5-43b8-91dc-9377389d1c2f  bridge    virbr0 

②修改网络配置
[root@localhost ~]# nmcli c m ens160 ipv4.method manual ipv4.addresses 172.25.0.11/24 ipv4.gateway 172.25.0.254 ipv4.dns 172.25.254.254 connection.autoconnect yes

解析:nmcli  连接  修改  连接名称  ipv4.方式  手动配置  ipv4.地址  
IP地址  ipv4.网关  网关地址  ipv4.dns   dns地址   连接.自动连接  
开启
3.伪图形界面修改
nmtui
## 无法描述,自行研究
②激活网卡

rhel7及以上系统:

[root@localhost ~]# nmcli connection up ens160

rhel6及以下系统:

reboot
或
ifdown  ens160  &&  ifup  ens160
③验证
## 检测IP地址
[root@localhost ~]# ifconfig
ens160: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.30.104  netmask 255.255.255.0  broadcast 192.168.30.255
        inet6 fe80::8a9e:e4a9:b5de:650b  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:12:1f:2b  txqueuelen 1000  (Ethernet)
        RX packets 2437  bytes 674510 (658.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 119  bytes 14969 (14.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        
## 检验网关
[root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.30.0    0.0.0.0         255.255.255.0   U     100    0        0 ens160
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

## 检验DNS
[root@localhost ~]# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.30.1

主机名

[root@localhost ~]# hostnamectl set-hostname servera
[root@localhost ~]# cat /etc/hostname
servera

域名映射

[root@servera ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.25.0.254 classroom.example.com

[root@servera ~]# cat /etc/resolv.conf
nameserver 172.25.0.254

# Hosts比DNS优先

端⼝和服务故障排除

ss 和 netstat的选项

选项描述
-n显示接口和端口的编号,而不显示名称。
-t显示TCP套接字。
-u显示UDP套接字。
-l仅显示侦听中的套接字。
-a显示所有(侦听中和已建立的)套接字。
-p对于inet地址系列,显示活动的连接(但不显示侦听套接字)。也就是说,忽略本地UNIX域套接字。
-A inet对于ss,同时显示IPv4和IPv6连接。对于netstat,仅显示IPv4连接。(netstat -A inet6 显示IPv6连接,netstat -46则同时显示IPv4和IPV6。)

image-20210731112805265

image-20210731113443312

八 、归档及压缩

制作tar包

命令格式:

tar   -格式选项cf    /tar包存放路径/名称.tar.格式后缀     /被压缩文档的路径

格式选项:

参数格式谐音(记忆)描述
-zgzzai guangzhou使用gzip压缩方式,速度最快
-jbz2?小鸡j buxizao使用bzip2压缩方式,包子皮
-Jxz?大鸡j xizao使用xz压缩方式。xz的压缩率通常比bzip2更高

操作选项:

选项描述
-c 、--create创建一个新文档
-x 、--extract从现有存档提取
-t、--list列出存档的目录

一般选项:

选项描述
-V、--verbose详细信息。显示存档或提取的文件有哪些。(显示过程)
-f、--file=指定归档文件的名称(必须放到所有选项的最后面)
-p、-- preserve-permissions在提取存档时保留文件和目录的权限,而不去除
-P记录源文档的绝对路径(在解压时也使用-P选项将文档解压到记录的路径中)

实验

### 压缩
[root@server0 ~]# tar -zcf /root/tarbao01.tar.gz  /etc/
[root@server0 ~]# tar -zvcf /root/tarbao02.tar.gz  /etc/
[root@server0 ~]# tar -zPvcf /root/tarbao03.tar.gz  /etc/
[root@server0 ~]# tar -jPvcf /root/tarbao04.tar.bz2  /etc/
[root@server0 ~]# ls tarbao*

### 解压
-C   /释放路径:将文档释放到指定的路径(默认释放到当前路径)
-P:解压时将文档解压到制作时记录的路径中
(-P与-C不可以同时使用)
[root@server0 ~]# tar -xf /root/tarbao01.tar.gz 
[root@server0 ~]# tar -xf /root/tarbao01.tar.gz -C /mnt/
[root@server0 ~]# tar -Pvxf /root/tarbao04.tar.bz2

### 查看压缩包

查看tar包

命令格式:

tar   -tf    /tar包存放路径/名称.tar.格式后缀
[root@server0 ~]# tar -tf /root/tarbao03.tar.gz 

[root@servera test]# touch {1..5} 
[root@servera test]# tar -zcf /a.tar /test/
[root@servera test]# tar -zPcf /b.tar /test/  
[root@servera test]# tar -tf /a.tar 
test/
test/1
test/2
test/3
test/4
test/5
[root@servera test]# tar -tf /b.tar 
tar: Removing leading `/' from member names
/test/
/test/1
/test/2
/test/3
/test/4
/test/5

九、远程连接和传输

1. Openssh简介

image-20210731101547450

2. 使用SSH

远程连接ssh

命令格式:ssh    [选项]    用户名@远程主机的IP地址

常用选项:
-X                远程连接时,可以调用远程主机的图形软件(仅Linux系统原生支持)
-p    端口号        远程连接时,指定端口号

远程传输scp

scp=ssh+cp

命令格式:
将本地文档传输到远程主机:scp  -r  /源文档    root@远程主机IP地址:/目标路径
将远程主机文档传输到本地:scp  -r  root@远程主机IP地址:/源文档    /目标路径

3. 配置秘钥的身份认证

十 、时间管理

1.设置时区

[root@servera ~]# timedatectl list-timezones |grep Shang ## 查看时区
Asia/Shanghai
[root@servera ~]# timedatectl set-timezone Asia/Shanghai
[root@servera ~]# timedatectl
               Local time: Sat 2021-07-31 19:00:03 CST
           Universal time: Sat 2021-07-31 11:00:03 UTC
                 RTC time: Sat 2021-07-31 11:00:02
                Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

2. 设置时间同步

① 开启ntp时间同步
[root@servera ~]# timedatectl set-ntp true
② 修改ntp服务器地址
[root@servera ~]# vim /etc/chrony.conf
pool classroom.example.com iburst
③ 重启chronyd服务
[root@servera ~]# systemctl restart chronyd
④ 查看同步源
[root@servera ~]# chronyc sources -v        
210 Number of sources = 1

  .-- Source mode  '^' = server, '=' = peer, '#' = local clock.
 / .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| /   '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
||                                                 .- xxxx [ yyyy ] +/- zzzz
||      Reachability register (octal) -.           |  xxxx = adjusted offset,
||      Log2(Polling interval) --.      |          |  yyyy = measured offset,
||                                \     |          |  zzzz = estimated error.
||                                 |    |           \
MS Name/IP address         Stratum Poll Reach LastRx Last sample               
===============================================================================
^* classroom.example.com         8   6    17     0    -16us[  -64us] +/-  236us

十一 、配置系统调优

介绍

对普通用户而言,Linux应用环境优化是比较困难的。领域多,范围广:CPU、存储、缓存策略、内存管理等涉及的参数。Linux内部虽然有默认设置值,可以应对大多数的情况场景,但是针对一些特殊场景,例如高性能、高并发和高可用的系统,就需要我们进行调整。本文介绍的tuned特性就是目前Linux系统上常用的一种调优特性。

tuned特性由tuned和tuned-adm两个程序组成。其中 tuned是服务端程序,用来监控和收集系统各个组件的数据;tuned-adm是客户端程序,用命令行的方式管理和配置 tuned。

tuned提供了一些预先配置的优化策略(profile)可供直接使用,比如:虚拟机-主机、虚拟机-客户机、节能等优化场景。当然不同的系统和应用场景有不同的优化方案,tuned预先配置的优化策略不是总能满足要求,因此tuned还允许用户自己创建和定制新的调优方案。

代码

①检查软件是否安装好
[root@servera ~]# rpm -q tuned

②查看服务状态是否正常启动运行
[root@servera ~]# systemctl status tuned
● tuned.service - Dynamic System Tuning Daemon
   Loaded: loaded (/usr/lib/systemd/system/tuned.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2021-07-31 18:27:56 CST; 6h left
     Docs: man:tuned(8)
           man:tuned.conf(5)
           man:tuned-adm(8)
 Main PID: 1009 (tuned)
    Tasks: 4 (limit: 12390)
   Memory: 18.8M
   CGroup: /system.slice/tuned.service
           └─1009 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P

Jul 31 18:27:54 servera systemd[1]: Starting Dynamic System Tuning Daemon...
Jul 31 18:27:56 servera systemd[1]: Started Dynamic System Tuning Daemon.

③列出所有的内置配置文件
[root@server0 ~]# tuned-adm list 

[root@servera ~]# tuned-adm active 
Current active profile: virtual-guest

⑤调整配置文件
[root@server0 ~]# tuned-adm profile latency-performance
[root@server0 ~]# tuned-adm active 
Current active profile: latency-performance

⑥关闭调优
[root@server0 ~]# tuned-adm off 
[root@server0 ~]# tuned-adm active 

⑦查看系统建议的调优配置文件
[root@servera ~]# tuned-adm recommend 
virtual-guest

⑧根据建议重新调整配置文件
[root@server0 ~]# tuned-adm profile virtual-guest
[root@server0 ~]# tuned-adm active 

调优配置文件

配置文件用途
balanced均衡模式,适合节能和性能之间进行折衷的系统
desktop桌面模式,从balanced衍生而来,加快交互式应用
throughput-performance吞吐量性能模式,调优系统,以获得最大吞吐量
latency-performance低延迟性能模式,牺牲能耗来获取低延迟
network-latency网络低延迟模式,从latency-performance衍生而来,可以启用额外的网络调优参数,进一步降低网络延迟
network- throughput网络高吞吐模式,从throughput-performance衍生而来,应用其它网络调优参数,以获得最大网络吞吐量
powersave节能模式,调优系统,以最大程度实现节能
virtual-guest当系统在虚拟机上运行时,调优系统获得最高性能
virtual-host当系统充当虚拟机的主机时,调优系统获得最高性能
*OracleOracle模式,基于throughput-performance配置,针对Oracle数据库负载进行优化

扩展

Cockpit是一个免费且开源的基于web的管理工具,系统管理员可以执行诸如存储管理、网络配置、检查日志、管理容器等任务。通过Cockpit提供的友好的 Web 前端界面可以轻松地管理我们的 GNU/Linux 服务器,非常轻量级,Web 界面也非常简单易用。更重要的是通过Cockpit可以实现集中式管理。

使用cockpit飞机仓(RHEL8新功能)web图形管理工具配置系统调优

 systemctl start cockpit
使用浏览器访问: IP:9090
用户密码为linux里面的账号

image-20210731144149285

image-20210731144715116

十二、周期性计划任务

作用:周期性地在指定时间执行指定的任务

使用方法
编辑计划任务
[root@server0 ~]# crontab  -e  -u  用户名

查询计划任务
[root@server0 ~]# crontab -l -u 用户名
计划设定
周期时间                    执行的命令
_  _  _  _  _              命令
分 时 日  月 周

*        匹配任意范围内的时间
数字      匹配时间
,        匹配多个不连续的时间点
-        指定连续时间范围
/n       代表频率

例1:10 3 * * 3   /mnt/data_backup
例2:10 5 * * *   /usr/bin/tar -zcf  /mnt/db.tar.gz /var/log/mysql
例3:10 3,5 * * * /mnt/data_backup
例4:10 3-5 * * * /mnt/data_backup
例5:*/5 * * * * /usr/sbin/ping 172.25.0.11
例6:40 10 * * * /usr/bin/touch /mnt/crontab.txt

十三、 软链接和硬链接

数据存储

专业名词:
元数据:数据的属性
索引:类似于目录,可以帮助快速找到数据存放的位置
i节点:编号:是指向真实数据存放区域的索引

Linux文件系统原理:
源文档---->i节点111--->数据区域:i节点111对应的数据
image-20210804200512759

查询文档的i节点:
ls   -i    /文档路径
[root@server0 ~]# ls -ila ## 前面这串数字就是i节点
total 72
33575041 dr-xr-x---. 15 root root  4096 Aug  4 15:41 .
     128 dr-xr-xr-x. 22 root root  4096 Aug  1 14:06 ..
33575045 -rw-------.  1 root root  1387 Aug  1 08:16 anaconda-ks.cfg
34494803 -rw-------.  1 root root   484 Aug  4 15:44 .bash_history
35319951 -rw-r--r--.  1 root root    18 Aug 12  2018 .bash_logout
35319952 -rw-r--r--.  1 root root   176 Aug 12  2018 .bash_profile
35319953 -rw-r--r--.  1 root root   176 Aug 12  2018 .bashrc
34494789 drwx------. 10 root root   230 Aug  1 10:59 .cache
 2159128 drwx------. 11 root root   215 Aug  1 10:59 .config
35319954 -rw-r--r--.  1 root root   100 Aug 12  2018 .cshrc
19047797 drwx------.  3 root root    25 Aug  1 08:18 .dbus
 2159156 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Desktop
 2159157 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Documents
17570336 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Downloads
34494812 -rw-------.  1 root root    16 Aug  1 10:58 .esd_auth
34494814 -rw-------.  1 root root   620 Aug  4 15:41 .ICEauthority
34494801 -rw-r--r--.  1 root root  1542 Aug  1 10:58 initial-setup-ks.cfg
52527806 drwx------.  3 root root    19 Aug  1 10:58 .local
17570337 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Music
34494826 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Pictures
17570309 drwxr-----.  3 root root    19 Aug  1 10:58 .pki
52243020 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Public
35025629 -rw-r--r--.  1 root root   643 Aug  1 14:13 setup.sh
35319955 -rw-r--r--.  1 root root   129 Aug 12  2018 .tcshrc
34494825 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Templates
52243021 drwxr-xr-x.  2 root root     6 Aug  1 10:58 Videos
35021588 -rw-------.  1 root root 18476 Aug  1 14:14 .viminfo

软链接(快捷方式)

image-20210804201359709

原理:

软链接----->i节点444---->源文档---->i节点333--->数据区域:i节点333对应的数据
简化:软链接---->源文档---->i节点333--->数据区域:i节点333对应的数据

特点:
  1. 源文档被删除,软链接失效
  2. 修改软链接,源文档同步发生改变;修改源文档,软链接也同步发生改变
  3. 软链接跨不同分区/文件系统进行创建
  4. 软链接的权限和归属关系是固定的,无法改变

硬链接

image

原理:

源文档---->i节点333--->数据区域:i节点333对应的数据
硬链接---->i节点333--->数据区域:i节点333对应的数据

特点:
  1. 源文档被删除,硬链接不受影响
  2. 修改硬链接,源文档同步发生改变;修改源文档,硬链接也同步发生改变
  3. 硬链接必须放在同一分区
  4. 硬链接的权限和所有属性(除了文档名称)与源文档保持一致

创建链接

一般选择使用软链接:软链接更安全,软链接不受分区/文件系统的限制
创建软链接:ln   -s    /源文档路径     /目标路径
创建硬链接:ln         /源文档路径     /目标路径

[root@server0 test]# ln -s /etc/passwd passwd
[root@server0 test]# ls -il 
total 0
19076293 lrwxrwxrwx. 1 root root 11 Aug  4 17:04 passwd -> /etc/passwd
[root@server0 test]# ls -i /etc/passwd
17446833 /etc/passwd
## i节点是不一样的

[root@server0 test]# ln /etc/passwd passwd1
[root@server0 test]# ls -il 
total 4
17446833 -rw-r--r--. 2 root root 2769 Aug  1 14:06 passwd1
## i节点是一样的

十四、 软件包

安装rpm包

①光盘的挂载
[root@server0 ~]# mkdir /dvd
[root@server0 ~]# mount  /dev/cdrom  /dvd/(临时挂载,重启失效)

[root@server0 ~]# ls /dvd/AppStream/Packages/
[root@server0 ~]# ls /dvd/BaseOS/Packages/
②使用rpm命令安装软件包
[root@server0 ~]# rpm -ivh  /dvd/AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm 
warning: /dvd/AppStream/Packages/vsftpd-3.0.3-31.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:vsftpd-3.0.3-31.el8              ################################# [100%]
③检查软件包是否完成安装
[root@server0 ~]# rpm -q vsftpd
vsftpd-3.0.3-31.el8.x86_64

## Apache需要依赖,没有依赖包安装不上
[root@server0 ~]# rpm -ivh  /dvd/AppStream/Packages/httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64.rpm 
warning: /dvd/AppStream/Packages/httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
        httpd-filesystem is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64
        httpd-filesystem = 2.4.37-21.module+el8.2.0+5008+cca404a3 is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64
        httpd-tools = 2.4.37-21.module+el8.2.0+5008+cca404a3 is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64
        libapr-1.so.0()(64bit) is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64
        libaprutil-1.so.0()(64bit) is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64
        mod_http2 is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64
        system-logos-httpd is needed by httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64

YUM

yum源是啥

软件仓库(里面包含了软件包)+repodata清单列表
为客户端自动解决依赖关系安装软件

为什么会有依赖?
因为开发过一次之后,为了方便以后的开发者直接利用,依赖就出来了,就好比qq的截图研发出来了,微信可以直接调用相关的代码

[root@server0 ~]# ls /dvd/AppStream/
Packages  repodata

[root@server0 ~]# ls /dvd/BaseOS/
Packages  repodata

配置YUM源

告诉yum,从哪里可以获取到软件包
配置本地Yum源
配置方法1:命令直接生成配置文件
第一步:备份原本的yum源
①创建备份目录
[root@server0 ~]# mkdir /etc/yum.repos.d/repo
②将yum配置文件存放目录中所有的配置文件都移动到第①步中创建的目录中
[root@server0 ~]# mv /etc/yum.repos.d/*.repo   /etc/yum.repos.d/repo/

第二步:挂载镜像 & 使用命令创建配置文件
[root@server0 ~]# mount /dev/cdrom /dvd
[root@server0 ~]# dnf config-manager --add  file:///dvd/AppStream
[root@server0 ~]# dnf config-manager --add  file:///dvd/BaseOS

第三步:手动为两个配置文件添加一行配置
[root@server0 ~]# echo gpgcheck=0 >> /etc/yum.repos.d/dvd_AppStream.repo 
[root@server0 ~]# echo gpgcheck=0 >> /etc/yum.repos.d/dvd_BaseOS.repo 

第四步:检验
[root@server0 ~]# yum clean all 
[root@server0 yum.repos.d]# yum repolist 
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id                                                           repo name
dvd_AppStream                                                     created by dnf config-manager from file:///dvd/AppStream
dvd_BaseOS                                                        created by dnf config-manager from file:///dvd/BaseOS

[root@server0 ~]# yum -y install httpd
[root@server0 ~]# echo $?
配置方法2:命令直接生成配置文件
## 先将yum配置文件存放目录中所有的配置文件都移动到备份文件夹中(因为上面已经创建过一次了
[root@server0 ~]# mv /etc/yum.repos.d/*.repo   /etc/yum.repos.d/repo/
[root@server0 ~]# ls /etc/yum.repos.d/

## 第一步:修改配置文件
[root@server0 ~]# vim /etc/yum.repos.d/app.repo
[app]                                               ##  仓库名称
name=this is app repo                               ##  仓库描述
baseurl=http://classroom.example.com/AppStream/     ##  仓库地址
enabled=1                                           ##  启用仓库
gpgcheck=0                                         ## 跳过数字签名验证

[root@server0 ~]# cp /etc/yum.repos.d/app.repo /etc/yum.repos.d/base.repo
[base]
name=this is base repo
baseurl=http://classroom.example.com/BaseOS/
enabled=1
gpgcheck=0

## 第二步:检验
[root@server0 yum.repos.d]# yum repolist
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
repo id                                                                           repo name
app                                                                               this is app repo
base                                                                              this is base repo

[root@server0 ~]# yum -y install bind-chroot
[root@server0 ~]# echo $?

卸载软件包

## 一般情况下使用,防止卸载掉了别的服务的扩展包
[root@server0 ~]# rpm -evh httpd
或
[root@server0 ~]# yum remove httpd

搜寻软件包

[root@server0 ~]# yum search 关键词
[root@server0 ~]# yum list | grep -i 关键词

## 反查软件在哪个包里面
[root@server0 ~]# yum provides */命令或文件名
[root@server0 ~]# yum -y install 搜索结果中复制的软件包名

[root@server0 yum.repos.d]# yum provides httpd
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Last metadata expiration check: 0:03:40 ago on Thu 05 Aug 2021 05:41:43 PM EDT.
httpd-2.4.37-10.module+el8+2764+7127e69e.x86_64 : Apache HTTP Server
Repo        : app
Matched from:
Provide    : httpd = 2.4.37-10.module+el8+2764+7127e69e

httpd-2.4.37-21.module+el8.2.0+5008+cca404a3.x86_64 : Apache HTTP Server
Repo        : @System
Matched from:
Provide    : httpd = 2.4.37-21.module+el8.2.0+5008+cca404a3

十五、 autofs

简介

AutoFs服务程序与Mount命令不同之处在于它是一种守护进程,只有检测到用户试图访问一个尚未挂载的文件系统时才自动的检测并挂载该文件系统。

方便的两个点:
1、设置开机不一定要挂载的目录,当用的时候才实现自动挂载。
2、用户不使用自动挂载的目录一段的时间,会自动卸载。(默认时间为5分钟)

实验

0.目标

有用户进入/home/rhel8时利用autofs自动挂载到classroom的rhel8里面

1.环境测试

# 执行以下下面三条命令
useradd user1
sed -i 's,/home/user1,/home/rhel8/user1,' /etc/passwd
echo 123 | passwd --stdin user1

[root@server0 ~]# showmount -e classroom.example.com
Export list for classroom.example.com:
/rhel8       *
/home/guests 172.25.0.0/255.255.0.0

2.安装

[root@server0 ~]# yum -y install autofs

3.配置

[root@server0 ~]# vim /etc/auto.master
## 底部插入
/home/rhel8  /etc/auto.rule

# 挂载目录     子配置文件
# 挂载目录是设备要挂载位置的上一级目录

[root@server0 ~]# vim /etc/auto.rule
#挂载目录 挂载文件类型及权限 [挂载源]:设备名称
user1 -rw classroom.example.com:/rhel8/user1
或
*  -rw classroom.example.com:/rhel8/&

4.服务启动&自启

[root@server0 ~]# systemctl restart autofs
[root@server0 ~]# systemctl enable autofs

5.测试

[root@server0 ~]# su - user1
[user1@server0 ~]$ exit
logout
[root@server0 ~]# 
[root@server0 ~]# df -h
Filesystem                          Size  Used Avail Use% Mounted on
devtmpfs                            952M     0  952M   0% /dev
tmpfs                               980M     0  980M   0% /dev/shm
tmpfs                               980M  9.4M  971M   1% /run
tmpfs                               980M     0  980M   0% /sys/fs/cgroup
/dev/mapper/rhel-root                17G  4.3G   13G  26% /
/dev/nvme0n1p1                     1014M  211M  804M  21% /boot
tmpfs                               196M  1.2M  195M   1% /run/user/42
/dev/sr0                            7.9G  7.9G     0 100% /dvd
tmpfs                               196M  4.0K  196M   1% /run/user/0
classroom.example.com:/rhel8/user1   10G  7.0G  3.1G  70% /home/rhel8/user1

十六、 系统启动及错误救援

系统启动过程

image-20210806234924122

进入救援模式

image-20210807085942666

image-20210807090218674

这是一行,因为屏幕大小显示不全所以导致了看着是三行,rd后面也增加了一个"\"
只要加rd.break!后面的下划线是输入的光标

image-20210807090332764

image-20210807091624321

image-20210807091752629

image-20210807091830555

验证:使用新密码登录,能登录成功,即为密码破解成功
如果在破解过程中任意一个环节失败了,都是重新启动,从第一步再次破解即可

十七、 systemctl

服务管理

## 准备工作,安装ftp的软件包,作为服务管理的练习对象
[root@server0 ~]# yum clean all 
[root@server0 ~]# yum repolist 
[root@server0 ~]# yum -y install vsftpd

代码

systemctl 参数 服务名
参数列表:
start:启动
stop:关闭
restart:重启
enable:开机自启

服务状态

开启
开启状态

image-20210808100728928

关闭状态

image-20210808100935173

报错状态

image-20210808101118662

systemd目标

临时切换(rhel8.0会有bug,可能无法切换)
## graphical.target 图形化
## multi-user.target 命令行
[root@server0 ~]# systemctl isolate graphical.target 
[root@server0 ~]# systemctl isolate multi-user.target 

查询默认目标(开机进入到目标)
[root@server0 ~]# systemctl get-default 

修改默认目标(重启后生效)
[root@server0 ~]# systemctl set-default multi-user.target 
[root@server0 ~]# reboot 

十八、管理系统存储

标准存储

image-20210804185958489

顺序:磁盘--分区--格式化--挂载使用
毛坯房--打隔断--装修--搬家入住

格式化:赋予空间(分区)文件系统的过程
文件系统:数据存储的规则,数据能够存储在硬盘上的功能

添加磁盘
虚拟机-->设置-->添加硬件-->添加磁盘-->SATA磁盘

分区方案

MBR

  • 1、MBR分区方案使用硬盘的第一个物理扇区中的64个字节作为分区表的空间保存硬盘分区信息,每个分区的信息要占16个字节。所以,MBR分区表最多只能保存4个分区的分区信息。
  • 2、MBR分区方案中,有三种类型的分区,主分区、扩展分区和逻辑分区。扩展分区与逻辑分区是为了突破分区表中只能保存4个分区的限制而出现的
  • 3、MBR分区表中保存的分区信息都是主分区与扩展分区的分区信息,扩展分区不能直接使用,需要在扩展分区内划分一个或多个逻辑分区后才能使用。逻辑分区的分区信息保存在扩展分区内而不是保存在MBR分区表内,这样,就可以突破MBR分区表只能保存4个分区的限制。
  • 4、16个字节的分区信息保存有分区活动状态标志、文件系统标识、起止柱面号、磁头号、扇区号、起始扇区位置(4个字节)、分区总扇区数目(4个字节)等内容。这里最重要的是:分区的起始扇区位置与分区的总扇区数,都是用4个字节表示的。
  • 5、一般每个扇区的容量是512字节,4个字节的扇区能表示的最大容量是2TB,由4可知,在MBR分区表中,分区的起始位置不能大于2TB,分区的最大容量,也不能大于2TB。所以,对2TB以上容量的物理硬盘,不适合使用MBR分区方案。
主分区、逻辑分区:实际可以使用的分区
扩展分区:为逻辑分区预留空间,用来承载逻辑分区,不能格式化、也不能挂载使用

逻辑分区实现一个磁盘理论无限分区的原理

image-20210731174857800

在扩展分区中,每一个逻辑分区都有一个与之对应的逻辑管理结点,逻辑管理结点与硬盘的主管理结点结构是一样的,不同的是逻辑管理结点中的四个表项只有前两个表项是有用的,逻辑结点中,第一个表项描述了当前结点对应的逻辑分区信息,第二个表项描述的下一个逻辑管理结点的位置

image-20210731182744271

GPT

image-20210731183839781

  • 1、保护MBR
    保护MBR位于GPT磁盘的第一扇区,也就是0号扇区,有磁盘签名,MBR磁盘分区表和结束标志组成,没有引导代码。而且分区表内只有一个分区表项,这个表项GPT根本不用,只是为了让系统认为这个磁盘是合法的。
  • 2、GPT头
    GPT头位于GPT磁盘的第二个磁盘,也就是1号扇区,该扇区是在创建GPT磁盘时生成,GPT头会定义分区表的起始位置,分区表的结束位置、每个分区表项的大小、分区表项的个数及分区表的校验和等信息。
  • 3、分区表
    分区表位于GPT磁盘的2-33号磁盘,一共占用32个扇区,能够容纳128个分区表项。每个分区表项大小为128字节。因为每个分区表项管理一共分区,所以Windows系统允许GPT磁盘创建128个分区。每个分区表项中记录着分区的起始,结束地址,分区类型的GUID,分区的名字,分区属性和分区GUID。
  • 4、分区区域
    GPT分区区域就是用户使用的分区,也是用户进行数据存储的区域。分区区域的起始地址和结束地址由GPT头定义。
  • 5、GPT头备份
    GPT头有一个备份,放在GPT磁盘的最后一个扇区,但这个GPT头备份并非完全GPT头备份,某些参数有些不一样。复制的时候根据实际情况更改一下即可。
  • 6.分区表备份
    分区区域结束后就是分区表备份,其地址在GPT头备份扇区中有描述。分区表备份是对分区表32个扇区的完整备份。如果分区表被破坏,系统会自动读取分区表备份,也能够保证正常识别分区。

GPT的分区结构相对于MBR要简单许多,并且分区表以及GPT头都有备份。

Linux磁盘命名规则

设备文件首名 + [序号]
SCSI / SATA / USB 接口sd [ a~p ]
IDE 接口hd [ a~d ]
软盘fd [ 0~7 ]
CDROM / DVDROMscd [ 0~1 ] (通用)
sr [ 0~1 ] (通用,CentOS 常见)
cdrom (光驱链接文件)
Virtl / O 界面vd [ a~p ] (用于虚拟内存)

设备文件对应设备
sdaa 表示第一个出现的硬盘,代表一个硬盘
sda1第一个硬盘中的第一个分区

存储基本管理

顺序:磁盘--分区--格式化--挂载使用

① 添加磁盘

虚拟机-->设置-->添加硬件-->添加磁盘-->SATA磁盘

标题

img

img

image-20210801000619386

img

image-20210801000715132

image-20210801000730829

案例需求:将sdb硬盘划分为3个主分区(1G、2G、3G)+3个逻辑分区(3G、2G、1G)

## 查看新增磁盘
[root@server0 ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   10G  0 disk 
sr0            11:0    1 1024M  0 rom  
nvme0n1       259:0    0   20G  0 disk 
├─nvme0n1p1   259:1    0    1G  0 part /boot
└─nvme0n1p2   259:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
② 分区

分区命令帮助

m :显示菜单和帮助信息
a :活动分区标记/引导分区
d :删除分区
l :显示分区类型
n :新建分区
p :显示分区信息
q :退出不保存
t :设置分区号
v :进行分区检查
w :保存修改
x :扩展应用,高级功能

1.划分主分区
【n,4次回车,+size{M,G},回车】
[root@server0 ~]# fdisk /dev/sda
Command (m for help): 【n,回车】
Partition type分区类型
   p   primary (0 primary, 0 extended, 4 free) ## 主分区(0主、0扩展、4空余)
   e   extended (container for logical partitions) ## 扩展分区
Select (default p): 选择(默认p主分区)【回车】
Partition number (1-4, default 1): 分区号码【回车】
First sector (2048-41943039, default 2048): 起始扇区,自动计算无需选择【回车】
Last sector, +sectors or +size{K,M,G,T,P} (2048-41943039, default 41943039): 【+1G,回车】

(查看分区情况列表)

Command (m for help): p
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xee86b066

Device     Boot Start     End Sectors Size Id Type
/dev/sda1        2048 2099199 2097152   1G 83 Linux

image-20210801155053493

第四个硬盘(第四次n)时系统将会自动将分区类型选择为扩展分区

image-20210801155346735

2.划分逻辑分区
Command (m for help): n
All primary partitions are in use. ## 此时已经自动选择了扩展分区进行创建逻辑分区
Adding logical partition 5
First sector (12587008-20971519, default 12587008): 
Last sector, +sectors or +size{K,M,G,T,P} (12587008-20971519, default 20971519): +1G

Created a new partition 5 of type 'Linux' and of size 1 GiB.

Command (m for help): p
Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xee86b066

Device     Boot    Start      End Sectors Size Id Type
/dev/sda1           2048  2099199 2097152   1G 83 Linux
/dev/sda2        2099200  6293503 4194304   2G 83 Linux
/dev/sda3        6293504 12584959 6291456   3G 83 Linux
/dev/sda4       12584960 20971519 8386560   4G  5 Extended
/dev/sda5       12587008 14684159 2097152   1G 83 Linux ## 新增的逻辑分区
3.保存配置
Command (m for help): p

Disk /dev/sda: 10 GiB, 10737418240 bytes, 20971520 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xee86b066

Device     Boot    Start      End Sectors Size Id Type
/dev/sda1           2048  2099199 2097152   1G 83 Linux
/dev/sda2        2099200  6293503 4194304   2G 83 Linux
/dev/sda3        6293504 12584959 6291456   3G 83 Linux
/dev/sda4       12584960 20971519 8386560   4G  5 Extended
/dev/sda5       12587008 14684159 2097152   1G 83 Linux
/dev/sda6       14686208 16783359 2097152   1G 83 Linux
/dev/sda7       16785408 20971519 4186112   2G 83 Linux

Command (m for help): w  ## 保存
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
4. 查看
[root@server0 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   10G  0 disk 
├─sda1          8:1    0    1G  0 part 
├─sda2          8:2    0    2G  0 part 
├─sda3          8:3    0    3G  0 part 
├─sda4          8:4    0    1K  0 part 
├─sda5          8:5    0    1G  0 part 
├─sda6          8:6    0    1G  0 part 
└─sda7          8:7    0    2G  0 part 
sr0            11:0    1 1024M  0 rom  
nvme0n1       259:0    0   20G  0 disk 
├─nvme0n1p1   259:1    0    1G  0 part /boot
└─nvme0n1p2   259:2    0   19G  0 part 
  ├─rhel-root 253:0    0   17G  0 lvm  /
  └─rhel-swap 253:1    0    2G  0 lvm  [SWAP]
③ 格式化
## 将/dev/sda1格式化成xfs的文件系统
[root@server0 ~]# mkfs.xfs /dev/sda1
meta-data=/dev/sda1              isize=512    agcount=4, agsize=65536 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=262144, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0

## 查看/dev/sda1的信息
[root@server0 ~]# blkid /dev/sda1
/dev/sda1: UUID="03231b9b-5f6a-497a-9ef5-75045334731d" TYPE="xfs" PARTUUID="ee86b066-01"
④ 挂载使用
### 临时挂载,命令行挂载(临时,重启失效)
[root@server0 ~]# mkdir /sda1
[root@server0 ~]# mount /dev/sda1 /sda1
[root@server0 ~]# df -h | grep sda1
/dev/sda1             1014M   40M  975M   4% /sda1
[root@server0 ~]# echo test > /sda1/test.txt
⑤ 卸载
[root@server0 ~]# umount /dev/sda1
[root@server0 ~]# umount /sda1
⑥ 开机挂载
[root@server0 ~]# vim  /etc/fstab
#打开文件后,保留原有配置,添加以下配置
/dev/sda1  /sda1  xfs  defaults 0 0
#分区设备路径   挂载点   文件系统类型   挂载参数   0 0

[root@server0 ~]# mount -a
[root@server0 ~]# df -h

交换分区(swap)

交换分区:使用预留的硬盘空间,来充当内存以暂时缓解物理内存不足的问题

## 1. 使用sdb2进行格式化成交换分区
[root@server0 ~]# mkswap /dev/sda2
[root@server0 ~]# blkid /dev/sda2
/dev/sda2: UUID="bc1e7a06-b008-473e-9c98-a8c28959da7c" TYPE="swap" PARTUUID="ee86b066-02"

## 2. 启用交换分区(重启失效)
[root@server0 ~]# swapon /dev/sda2

## 3. 查看分区状态
[root@server0 ~]# swapon -s
Filename                                Type            Size    Used    Priority
/dev/dm-1                               partition       2097148 12032   -2
/dev/sda2                               partition       2097148 0       -3

## 4. 停用交换分区
[root@server0 ~]# swapoff /dev/sda2 
[root@server0 ~]# swapon -s

## 5.开机自动启用交换分区
[root@server0 ~]# vim /etc/fstab 
/dev/sdb2  swap  swap  defaults 0 0

[root@server0 ~]# swapon -a
[root@server0 ~]# swapon -s

Lvm

Lvm文章,如不想跳转到源文章请点这

原理

物理磁盘的空间分解为若干个物理卷,然后将多个物理卷汇聚为卷组,最后将卷组的部分或全部转化为可供用户使用的逻辑卷。逻辑卷的空间可以来自于多个物理磁盘

创建过程 *

  • 1.物理硬盘分区
  • 2.创建物理卷
  • 3.创建卷组
  • 4.创建逻辑卷
  • 5.格式化逻辑卷
  • 6.挂载逻辑卷到目录

操作命令

查询命令

常用命令总结

## PV
    pvcreate 分区名称
    pvdisplay
    pvremove 分区名称
## VG
    vgcreate VG名称 /dev/分区
    vgdisplay
    vgremove VG名称
    vgextend VG名称 /dev/分区
    vgreduce VG名称 /dev/分区
## LV
    lvcreate -n LV名称 -L 大小M VG名称
    lvdisplay
    lvremove /dev/VG名称/LVM名称
    lvextend -L 大小m /dev/VG名称/lv名称
    lvreduce -L 大小m /dev/VG名称/lv名称

创建&使用逻辑卷

创建物理卷(PV)

过程:添加分区 -> 改类型 -> pvcreate

fdisk /dev/sdb
## 创建分区(需注意:先创建扩展分区,再创建逻辑卷)
## 转成8e格式
pvcreate (转成8e的那些分区)
pvs (查看当前物理卷)
创建卷组(VG)
语法:vgcreate vg名字  pv的名字 (可以跟多个pv)

vgcreate vg1 /dev/sdb5 /dev/sdb6
vgdisplay vg01 ##查看vg信息

[root@localhost ~]# vgdisplay vg1
  --- Volume group ---
  VG Name               vg1
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2        ## PV数量
  VG Size               992.00 MiB   ## VG大小
  PE Size               4.00 MiB  ## 所有逻辑卷只能以4mb倍数来扩充&缩减
  Total PE              248   ## PE数量
  Alloc PE / Size       0 / 0   
  Free  PE / Size       248 / 992.00 MiB
  VG UUID               cvwIdG-4irP-bYFt-3Geg-V8fy-8wjO-qGCxrw
########################
更改PE Size (可用大小为 8KB ~ 512MB)
vgcreate -s 8M vg1 /dev/sdb5 /dev/sdb6
创建逻辑卷(LV)
语法:lvcreate -n 逻辑卷的名称 -L 指定lv大小的SIZE(M,G) vgname

lvcreate -n lv1 -L 200M vg1
## 也可以通过-l 指定 PE的数量来指定空间大小(PE数量 * 每个PE大小 = 空间大小)
lvcreate -n lv2 -l 10 vg1

## 因为我上面的PE大小为4MB,用了10个,所以最终大小是40MB
[root@localhost ~]# lvs
  LV   VG     Attr       LSize  
  root centos -wi-ao---- <12.50g
  swap centos -wi-ao----   1.50g
  lv1  vg1    -wi-a----- 200.00m
  lv2  vg1    -wi-a-----  40.00m
2019-12-03 14:49:29 星期二
创建LV报错: Device /dev/名字 not found (or ignored by filtering)
办法:dd if=/dev/urandom of=/dev/名字 bs=512 count=64

格式化使用
mkfs.xfs /dev/vg1/lv1
mkdir /lvm
mount /dev/vg1/lv1 /lv1/

[root@localhost ~]# df -h
/dev/mapper/vg1-lv1      197M   11M  187M    6% /lv1

扩容 缩小Lvm

扩容卷组
## 当然要先创建个物理卷然后加入卷组 (物理卷要 8e 格式!)
vgextend vg1 /dev/sdb7

######## 前 ##########
[root@localhost ~]# vgs vg1
  VG  #PV #LV #SN Attr   VSize   VFree  
  vg1   2   2   0 wz--n- 992.00m 752.00m

######## 后 ##########
[root@localhost ~]# vgs vg1
  VG  #PV #LV #SN Attr   VSize VFree  
  vg1   3   2   0 wz--n- 1.16g 948.00m
扩容逻辑卷
1.首先,确定一下是否有可用的扩容空间,因为空间是从卷组里面抽出来的
[root@localhost ~]# vgs vg1
  VG  #PV #LV #SN Attr   VSize VFree  
  vg1   3   2   0 wz--n- 1.16g 948.00m
2.扩展逻辑卷
## 50M:lv2扩展成60M
## +50M:lv2扩大60M
lvextend -L 60M /dev/vg1/lv2
3.可以看到LV虽然扩展了,但是文件系统大小还是原来的,下面开始扩容文件系统
[root@localhost ~]# lvs 
  LV   VG     Attr       LSize
  root centos -wi-ao---- <12.50g
  swap centos -wi-ao----   1.50g
  lv1  vg1    -wi-ao---- 200.00m
  lv2  vg1    -wi-a-----  60.00m  

[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/vg1-lv2       49M  2.8M   46M    6% /lv2

-------------解决办法----------------
xfs格式:xfs_growfs /lv2
ext格式:resize2fs /dev/vg1/lv2
------------------------------------
[root@localhost ~]# df -h
/dev/mapper/vg1-lv2       57M  2.8M   54M    5% /lv2
缩小逻辑卷

需要注意:xfs不能缩小只能扩展,所以需要格式化成ext4进行操作

1.卸载逻辑卷,使逻辑卷离线,并格式化
umount /dev/vg1/lv2
mkfs.ext4 /dev/vg1/lv2
2.检查修复 并 重新定义大小
e2fsck -f /dev/vg1/lv2   ## 求稳就加上
resize2fs /dev/vg1/lv2 30M
3.缩小
lvreduce -L -30M /dev/vg1/lv2  ## 缩小 30M

[root@localhost ~]# lvs
  LV   VG     Attr       LSize
  lv2  vg1    -wi-a-----  32.00m
缩小卷组

实质就是把物理卷丢出去

## 1.把sdb5的数据丢到sdb6上
pvmove /dev/sdb5 /dev/sdb6

  /dev/sdb5: Moved: 43.10%
  /dev/sdb5: Moved: 86.21%
  /dev/sdb5: Moved: 100%

## 2.丢
vgreduce vg1 /dev/sdb5

删除操作

删除逻辑卷
umount /lv2
lvremove /dev/vg1/lv2
删除卷组

需确保卷组中无逻辑卷(Cur LV=0)

vgdisplay vg1
  --- Volume group ---
  Cur LV        0
  
vgremove vg1
删除物理卷

实质:将物理卷还原为普通分区

pvremove /dev/sdb5
进入单用户模式后重新挂载
mount -o remount,rw /

RHEL8高级存储功能

stratis

介绍

image-20210801112723892

Stratis 是一个卷管理文件系统volume-managing filesystem(VMF),类似于 ZFSBtrfs。它使用了存储“池”的核心思想,该思想被各种 VMF 和 形如 LVM) 的独立卷管理器采用。使用一个或多个硬盘(或分区)创建存储池,然后在存储池中创建卷volume;其次能动态
例子:百度云,用户容量写着是2T,但是实际上是用多少存多少,否则成本将会非常高

基本操作
第一步:安装软件包
[root@servera ~]# dnf install stratis-cli stratisd

第二步:启动服务,并设置服务开机自启
[root@servera ~]# systemctl start stratisd
[root@servera ~]# systemctl enable stratisd

第三步:添加一块SATA硬盘,创建存储池
## 虚拟机-->设置-->添加硬件-->添加磁盘-->SATA磁盘
[root@servera ~]# stratis pool create test1 /dev/sdb

第四步:查看可用的存储池列表
[root@servera ~]# stratis pool list
Name     Total Physical Size  Total Physical Used
test1                 10 GiB               52 MiB

5.再次添加一块硬盘,加入到存储池zhyx_pool中
[root@servera ~]# stratis pool add-data test1 /dev/sdc
[root@servera ~]# stratis pool list
Name     Total Physical Size  Total Physical Used
test1                 15 GiB               56 MiB

6.列出池中的块设备
[root@servera ~]#  stratis blockdev list
Pool Name  Device Node    Physical Size   State  Tier
test1      /dev/sdb              10 GiB  In-use  Data
test1      /dev/sdc               5 GiB  In-use  Data

7.为存储池创建文件系统
[root@servera ~]# stratis filesystem create test1 test1_fs

8.查看文件系统
[root@servera ~]# stratis filesystem list
Pool Name  Name      Used     Created            Device                   UUID                              
test1      test1_fs  546 MiB  Aug 01 2021 09:33  /stratis/test1/test1_fs  239d5c3d25fb4b038f843f1fae9c3907 

9.挂载使用
[root@servera ~]# blkid //stratis/test1/test1_fs
//stratis/test1/test1_fs: UUID="239d5c3d-25fb-4b03-8f84-3f1fae9c3907" TYPE="xfs"
[root@servera ~]# mkdir /stratis
[root@servera ~]# vim /etc/fstab 
UUID=239d5c3d-25fb-4b03-8f84-3f1fae9c3907 /stratis xfs  defaults,x-systemd.requires=stratisd.service 0 0
## UUID,设备路径都可
## fstab是开机就开始挂载,这个时候stratis服务还没启动,是找不到这个设备的,从而可能导致开不了机,所以需要在defaults后面增加x-systemd.requires参数,以表示这个服务启动后再挂载这个设备

image-20210801094014376

快照使用
1. 写入一点内容
[root@servera ~]# echo test > /stratis/a.txt

2. 创建快照
# stratis filesystem snaphost 池名 文件系统名 快照名
[root@server0 ~]# stratis filesystem snapshot test1 test1_fs test1_snap

3. 查看快照
[root@servera ~]# stratis filesystem list
Pool Name  Name         Used     Created            Device                      UUID                              
test1      test1_fs     546 MiB  Aug 01 2021 09:33  /stratis/test1/test1_fs     239d5c3d25fb4b038f843f1fae9c3907  
test1      test1_snap   546 MiB  Aug 01 2021 09:44  /stratis/test1/test1_snap   dd460a164cd842aa874fbacae81cfbbf  

4. 删除文件
[root@server0 ~]# rm -rf /stratis/a.txt
[root@server0 ~]# mount /stratis/test1/test1_snap /mnt
[root@server0 ~]# cat /mnt/a.txt

VDO

优点

红帽企业Linux 8包含虚拟数据优化器(VDO)驱动程序,可以优化块设备上数据的空间占用。VDO
是一个Linux设备映射器驱动程序,它可以减少块设备上的磁盘空间使用,同时最大限度减少数据
重复,从而节省磁盘空间,甚至提高数据吞吐量。VDO包括两个内核模块: kvdo模块用于以透明
的方式控制数据压缩,uds则可用于重复数据删除。

代码
0. 在vm添加一个sata磁盘

1. 安装vdo(默认安装好)
[root@server0 ~]#  dnf install -y vdo kmod-kvdo
 
2. 添加vdo卷
[root@server0 ~]# vdo create -n test_volume --device /dev/sdd --vdoLogicalSize 50G
Creating VDO test_volume
Starting VDO test_volume
Starting compression on VDO test_volume
VDO instance 0 volume is ready at /dev/mapper/test_volume

3.查看vdo卷
[root@server0 ~]# vdo list
test_volume

4. 停止与启动vdo卷
[root@server0 ~]# vdo stop -n test_volume
Stopping VDO test_volume
[root@server0 ~]# vdo status -n test_volume
# (输出结果在下面的图片)
[root@server0 ~]# vdo start -n test_volume

5. 查看相关模块是否正常运行
[root@server0 ~]# vdo status -n test_volume | grep Com
    Compression: enabled
[root@server0 ~]# vdo status -n test_volume | grep Dedu
    Deduplication: enabled
 
6. 格式化并挂载vdo卷
[root@server0 ~]# mkfs.xfs -K /dev/mapper/test_volume
# -K 不等他格式化完成,如果等的话要很久
# VDO卷默认在系统的/dev/mapper下,名字就是创建时候的名字
[root@server0 ~]# udevadm settle
## 进行相关测试,没输出就是没问题
[root@server0 ~]# mkdir /test_volume
[root@server0 ~]# vim /etc/fstab
/dev/mapper/test_volume /test_volume            xfs     defaults,x-systemd.requires=vd
o.service 0 0
[root@server0 ~]# mount -a

image-20210801103159779

测试vdo的功能
[root@server0 ~]# vdostats --human-readable
Device                    Size      Used Available Use% Space saving%
/dev/mapper/test_volume     10.0G      4.0G      6.0G  40%           99%

[root@server0 ~]# dd if=/dev/urandom of=/test_volume/testfile1 bs=1M count=300 
300+0 records in
300+0 records out
314572800 bytes (315 MB, 300 MiB) copied, 13.1512 s, 23.9 MB/s

[root@server0 ~]# vdostats --human-readable                                   
Device                    Size      Used Available Use% Space saving%
/dev/mapper/test_volume     10.0G      4.3G      5.7G  42%            8%

## 文件名不一样
[root@server0 ~]# dd if=/dev/urandom of=/test_volume/testfile2 bs=1M count=300 
300+0 records in
300+0 records out
314572800 bytes (315 MB, 300 MiB) copied, 14.1772 s, 22.2 MB/s
[root@server0 ~]# vdostats --human-readable                                   
Device                    Size      Used Available Use% Space saving%
/dev/mapper/test_volume     10.0G      4.6G      5.4G  45%            4%

十九、防火墙Firewall

介绍

原理

特点:过滤来自于计算机外部网络的数据(内部问题无法解决)
防火墙运行原理:类似于下图,带刀侍卫站在门口守着,有人进有人出就会进行检查(这就是网卡进出的流量),带刀侍卫会有一个判断的标准(这就是Linux的Firewall),好比,官员可以进去,平民不可以,刺客直接格杀勿论(对应了Firewall的几个区域,允许所有访问、允许部分访问,拒绝访问[平民],丢弃[刺客],官员进去需要令牌(这就好比客户端的IP)。

image

区域

区域描述
drop任何往内的封包都会被丢弃,只允许往外传送的封包。
block任何来自于外部的连接都会被阻挡,只允许自己系统主动建立的连接。
public公开区域,默认不信任其他电脑与网络,只有被允许的连线才能进入。 通常大部分的连接设定都会放在这里。
external公开区域,适用于NAT网络环境。
dmz非军事区域,允许外部的连线进入,但其对内的连线则有限制,只有被允许的连线才能连进内部网络。
work公司内部等工作区域,在此区域中不应该会有恶意的攻击者。 只有被允许的连接可以进入。
home家里头的网络区域,在此区域中不应该会有恶意的攻击者。 只有被允许的连接可以进入。
internal内部网络区域,在此区域中不应该会有恶意的攻击者。 只有被允许的连接可以进入。
trusted完全信任的区域,接受所有连线。
drop 和 block的区别
drop:直接丢弃没有回应
block:拒绝了,返回一个拒绝的消息

代码

查看、修改防火墙默认区域
[root@server0 ~]# firewall-cmd --get-default-zone 
修改(永久配置)
[root@server0 ~]# firewall-cmd --set-default-zone=block 
[root@server0 ~]# firewall-cmd --set-default-zone=trusted 
[root@server0 ~]# firewall-cmd --get-default-zone 
查看和添加防火墙可访问的服务策略
[root@server0 ~]# firewall-cmd --set-default-zone=public 
[root@server0 ~]# firewall-cmd --zone=public --list-all 
添加(临时,重启失效)
[root@server0 ~]# firewall-cmd --zone=public --add-service=【tab两下列出所有服务】
[root@server0 ~]# firewall-cmd --zone=public --add-service=ftp
[root@server0 ~]# firewall-cmd --zone=public --add-service=http
[root@server0 ~]# firewall-cmd --zone=public --list-all 
重载防火墙
[root@server0 ~]# firewall-cmd --reload 
[root@server0 ~]# firewall-cmd --zone=public --list-all 
永久配置防火墙策略
## 永久配置(重载防火墙后生效)
[root@server0 ~]# firewall-cmd --permanent --zone=public --add-service=ftp
[root@server0 ~]# firewall-cmd --permanent --zone=public --add-service=http
[root@server0 ~]# firewall-cmd --zone=public --list-all 
[root@server0 ~]# firewall-cmd --reload 
[root@server0 ~]# firewall-cmd --zone=public --list-all 
添加IP地址/网段到区域
[root@server0 ~]# firewall-cmd --permanent --zone=trusted --add-source=172.25.0.0/24
[root@server0 ~]# firewall-cmd --permanent --zone=drop --add-source=13.172.15.41
[root@server0 ~]# firewall-cmd --reload 
[root@server0 ~]# firewall-cmd --zone=trusted --list-all 
[root@server0 ~]# firewall-cmd --zone=drop --list-all 
端口转发
## 80-->tomcat:8080
## 当接收到来自于用户对本机80端口的访问请求时,转发给8080端口进行处理
[root@server0 ~]# firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
[root@server0 ~]# firewall-cmd --reload 
[root@server0 ~]# firewall-cmd --zone=public --list-all 

二十、 Selinux

特点:由内到外的防护体系,禁止一切SELinux认为不安全的行为

image

模式与切换

Selinux的三种模式:
  • 启用

    • 强制模式:强制执行SELinux的策略
    • 宽松模式:不强制执行SELinux的策略,记录到日志文件中
  • 禁用:完全停用SELinux
切换:
##查看模式
[root@localhost ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

[root@localhost ~]# getenforce 
Enforcing

## 切换模式
### 命令修改(临时切换,重启恢复原样)
[root@localhost ~]# setenforce 1
[root@localhost ~]# setenforce 0
[root@localhost ~]# sestatus 
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive  ## 现在的模式
Mode from config file:          enforcing   ## 配置文件的模式
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      31

### 文件修改(重启才生效)
[root@localhost ~]# vim /etc/sysconfig/selinux
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=enforcing

配置打错的情况下

image-20210801152158767

SELinux策略之波尔值

1. 准备工作
[root@server0 ~]# firewall-cmd --set-default-zone=trusted ## 防火墙全开
[root@server0 ~]# setenforce 1  ## 强制模式

2. 安装软件包
[root@server0 ~]# dnf -y install samba 

3. 创建samba账号
[root@server0 ~]# useradd -s /sbin/nologin natasha
[root@server0 ~]# pdbedit -a natasha
new password:【123回车】
retype new password:【123回车】
[root@server0 ~]# echo $?

4. 创建共享目录
[root@server0 ~]# mkdir /share
[root@server0 ~]# setfacl -R -m u:natasha:rwx /share/

5. 修改配置文件
[root@server0 ~]# vim /etc/samba/smb.conf
[share]
    writeable = yes
    path = /share
        
6. 重启服务
[root@server0 ~]# systemctl restart smb
[root@server0 ~]# systemctl enable smb

7. 安装支持cifs文件系统的软件包(不安装无法识别cifs,挂载会报错)
[root@server0 ~]# yum -y install cifs-utils

8. 挂载
[root@server0 ~]# mkdir /mount_smb
[root@server0 ~]# vim /etc/fstab
//172.25.0.3/share /mount_smb                   cifs    defaults,_netdev,user=natasha,pass=123 0 0

[root@server0 ~]# mount -a
mount error(13): Permission denied
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) and kernel log messages (dmesg)
## 这里就是因为selinux的问题,所以导致了报错 

[root@server0 ~]# getsebool -a | grep samba
## 设置安全上下文
[root@server0 ~]# setsebool -P samba_export_all_rw on
[root@server0 ~]# mount -a
[root@server0 ~]# echo redhat > /mount_smb/test.txt

SELinux之非默认端口、安全上下文

SELinux 管理过程中,进程是否可以正确地访问文件资源,取决于它们的安全上下文。进程和文件都有自己的安全上下文,SELinux 会为进程和文件添加安全信息标签,比如 SELinux 用户、角色、类型、类别等,当运行 SELinux 后,所有这些信息都将作为访问控制的依据。

1. 准备工作
[root@server0 ~]# dnf install -y httpd
[root@server0 ~]# echo 'rhcsa' > /var/www/html/index.html
[root@server0 ~]# echo 'Listen 82
<VirtualHost *:82>
DocumentRoot /var/www/html
ServerName server0.example.com
</VirtualHost>' > /etc/httpd/conf.d/rhcsa.conf

[root@server0 ~]# systemctl start httpd

案例:在网站服务默认网页文件存放目录/var/www/html中有一个file1文件,通过开放82端口和调整安全上下文值来使得这个文件可以通过客户端的浏览器访问到

2. 开放非默认端口82
[root@server0 ~]# semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      80, 81, 443, 488, 8008, 8009, 8443, 9000
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989

[root@server0 ~]# semanage port -a -t http_port_t -p tcp 82
[root@server0 ~]# semanage port -l | grep http
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_cache_port_t              udp      3130
http_port_t                    tcp      82, 80, 81, 443, 488, 8008, 8009, 8443, 9000 ## 已添加
pegasus_http_port_t            tcp      5988
pegasus_https_port_t           tcp      5989
3.SElinux上下文
[root@server0 ~]# ls -Z /var/www/html/index.html
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
[root@server0 ~]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/

## 复制文件夹的标签
[root@server0 ~]# chcon --reference=/var/www/html /var/www/html/index.html 

[root@server0 ~]# ls -Z /var/www/html/index.html 
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html
[root@server0 ~]# ls -Zd /var/www/html
system_u:object_r:httpd_sys_content_t:s0 /var/www/html
4. 访问

image-20210801182118961

Last modification:August 8th, 2021 at 10:22 am