3295 lines
81 KiB
Plaintext
3295 lines
81 KiB
Plaintext
### (第一章:走进Linux)
|
||
|
||
**Linux之父:林纳斯.托瓦兹**
|
||
|
||
###### Linux发行版本
|
||
|
||
centos Ubuntu Linux Mint
|
||
|
||
###### 红帽认证
|
||
|
||
红帽认证是由红帽linux公司推出的,主要包括红帽认证系统管理员(RHCSA),红帽认证工程师(RHCE)和红帽认证架构师(RHCA)。是以实际操作能力为基础的测试项目,主要考察考生在实际操作系统中的实践能力。红帽培训和测试非常注重培养实际的动手实战能力!
|
||
|
||
------
|
||
|
||
|
||
|
||
###### Linux操作系统
|
||
|
||
Linux操作系统:企业中做服务器操作系统,安全、高效、稳定等特性
|
||
Windows操作系统:娱乐、办公、影音....
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 创建虚拟机
|
||
|
||
cpu处理器 mem内存 disk磁盘 都是可以变化的 网络采用默认模式(桥接 网络地址转换 仅主机)
|
||
2.给虚拟机分配镜像
|
||
3.安装操作系统
|
||
时区:
|
||
Asia/Shanghai
|
||
安装方式:
|
||
最小化安装
|
||
图形化安装
|
||
磁盘分区:
|
||
磁盘:20G
|
||
Windows:C盘 系统盘
|
||
Linux分区: / 根分区 根据实际需求可以进行磁盘的分区
|
||
|
||
------
|
||
|
||
|
||
|
||
###### IDC数据中心
|
||
|
||
服务器 网络设备(路由器+交换机+防火墙)网线 机柜 空调
|
||
|
||
------
|
||
|
||
###### 物理设备
|
||
服务器分类:
|
||
cpu、mem、主板、硬盘、网卡接口、VGA接口、HDMI接口、USB接口、管理接口...
|
||
机架式服务器
|
||
塔式服务器
|
||
刀片式服务器
|
||
|
||
------
|
||
|
||
###### 云产品/云分类
|
||
|
||
云产品:云服务器、云存储、云安全.....
|
||
|
||
云分类:公有云:华为云 阿里云 腾讯云 百度智云 青云 ulcoud云 .... 亚马逊云 微软云 == 公有云提供商
|
||
私有云
|
||
混合云
|
||
容器云
|
||
|
||
------
|
||
|
||
### (第二章:Linux基础命令)
|
||
|
||
###### Linux基础命令
|
||
|
||
**LS**
|
||
|
||
-lh:人性化显示 主要是文件大小
|
||
-d:查看目录本身
|
||
-i:查看文件inode号
|
||
-a:查看所有包括隐藏文件
|
||
|
||
ls ../ 查看上一级目录的内容
|
||
ls ./ 查看当前目录下的内容
|
||
|
||
Linux系统中以 **. **开头的都是隐藏文件
|
||
|
||
同时查看: ls /root /tmp
|
||
|
||
报错:要查看的这目录不存在
|
||
[root@xingdiancloud-server ~]# ls /abc
|
||
**ls: cannot access /abc: No such file or directory**(要查看的目录不存在)
|
||
|
||
白色的代表是一个普通文件
|
||
|
||
蓝色代表目录
|
||
|
||
天蓝色代表链接文件
|
||
|
||
------
|
||
|
||
|
||
|
||
**cd**
|
||
|
||
cd - : 原路返回 返回到上一次的目录
|
||
cd ../ : 返回上一级目录
|
||
|
||
cd ../../ 返回上一级的上一级
|
||
cd ~ : 回家
|
||
|
||
绝对路径:凡是以根开头的路径都是绝对路径
|
||
|
||
相对路径:不以根开头的路径都是相对路径
|
||
|
||
------
|
||
|
||
**date**
|
||
|
||
获取当前日期:date +%F
|
||
获取当前时间:date +%H:%M:%S
|
||
获取周几:date +%w
|
||
|
||
------
|
||
|
||
###### Linux目录结构
|
||
|
||
bin:默认存放命令文件 二进制文件 程序文件 (普通用户) /usr/bin
|
||
sbin:默认存放命令文件 二进制文件 程序文件(管理员用户) /usr/sbin
|
||
|
||
**which:获取命令对应的二进制文件存放位置**
|
||
|
||
root:默认存放root用户的家目录
|
||
home:默认存放普通用户的家目录
|
||
|
||
etc:默认存放配置文件的目录
|
||
dev:默认存放设备文件
|
||
proc:默认存放虚拟文件
|
||
|
||
var:默认存放可变化的文件
|
||
|
||
------
|
||
|
||
###### Linux文件管理
|
||
|
||
**创建一个以当前日期命名的文件:**
|
||
|
||
touch $(date +%F)
|
||
touch /opt/`date +%F`
|
||
|
||
-p:递归创建
|
||
|
||
-v:显示创建过程
|
||
|
||
**同时创建多个/多级目录**:
|
||
|
||
在/opt/目录下创建名为a和b的目录,在a目录下创建c和d,在b目录下创建e,在d目录下创建f和g,在g目录下创建success目录,一条命令
|
||
mkdir /opt/{a/{c,d/{f,g/success}},b/e} -p
|
||
|
||
------
|
||
|
||
###### 拷贝/移动/删除
|
||
|
||
拷贝:cp -v 显示拷贝的过程
|
||
|
||
cp /root/qfb /opt/qianfengb //拷贝+改名(/opt目录下没有qianfengb的目录)
|
||
|
||
cp /root/qfh /root/qfi /opt //把多个文件拷贝到统一目录下
|
||
|
||
**拷贝目录**:cp -r
|
||
|
||
------
|
||
|
||
移动:mv
|
||
|
||
语法格式:mv 源文件/源目录 目的地
|
||
|
||
------
|
||
|
||
**删除**: rm
|
||
|
||
语法格式:rm -rf 文件名/目录名
|
||
|
||
rm -rf ./* 这命令不能在根目录下执行
|
||
|
||
------
|
||
|
||
###### 文件
|
||
|
||
两种方式:交互式:vim/vi 非交互式:sed
|
||
|
||
模式:
|
||
|
||
编辑模式 i
|
||
命令模式 esc
|
||
尾行命令模式 : /
|
||
|
||
编辑模式:编辑模式:i I a A o向下另起一行 O向上另起一行 (i o)
|
||
|
||
------
|
||
|
||
**命令模式:**
|
||
|
||
G:光标移动到最后一行
|
||
gg:光标移动到首行:
|
||
dd:删除光标所在行
|
||
2dd:删除2行 如果光标在首行dG
|
||
u:撤销
|
||
yy:复制
|
||
p:粘贴
|
||
D:删除光标后的内容(光标所在行)
|
||
|
||
**尾行命令模式:**
|
||
|
||
w:保存
|
||
q:退出
|
||
!:强制
|
||
|
||
wq:保存退出
|
||
|
||
wq!:强制保存退出
|
||
|
||
q!:强制退出
|
||
|
||
###### 替换
|
||
|
||
语法格式:行 s(替换) / # @ (分隔符) g(全局替换 可选)
|
||
|
||
:%s/root/ROOT/ 从首行到最后一行查找替换,只能替换每一行第一个匹配到的
|
||
|
||
:%s/root/ROOT/g 从首行到最后一行查找替换,只要匹配到全部替换
|
||
|
||
**案例**
|
||
|
||
:5,10 s/.*/#&/ 在第5行到第10行每一行开头加一个#
|
||
:4,9 s/^#//
|
||
|
||
每一个服务都有一个配置文件,以#开头的内容 都是这个配置文件的注释
|
||
|
||
**临时查看和取消行号**
|
||
|
||
set nu
|
||
:set nonu
|
||
永久设定,需要修改配置文件 /etc/vimrc
|
||
|
||
添加set nu参数
|
||
|
||
**可视块和可视行:**
|
||
|
||
可视块 选中块 ctrl + v
|
||
可视行 选中行 V
|
||
|
||
**案例:**
|
||
|
||
块删除:选中要删除的块 ctrl + v (上下左右键) d
|
||
|
||
块插入:选中要插入的行,ctrl + v I 写要插入的内容# 2次Esc
|
||
|
||
###### 查看
|
||
|
||
cat 参数-n(显示行号) 文件名
|
||
|
||
head 指定行数 从前往后 默认看前十行
|
||
|
||
| 管道 前一条命令的结果交给后面的命令执行
|
||
|
||
tail 指定行数 从后往前 默认看后十行
|
||
|
||
企业中经常统计一个网站的访问量,获取IP地址访问我次数最多的
|
||
|
||
[root@proxy nginx]# cat access.log| awk '{print $1}' | sort | uniq -c | sort -k1 -nr | head -3
|
||
|
||
grep 过滤 可以过滤文件中的内容查看
|
||
|
||
[root@xingdiancloud-server ~]# grep 'sshd' passwd
|
||
|
||
企业案例: 实时查看文件内容 进行故障排查的时候,可以使用实时查看的命令看日志文件,从而获取故障的原因
|
||
|
||
tailf 文件
|
||
|
||
tail -f 文件
|
||
|
||
tail -F 文件
|
||
|
||
|
||
tail -f 等同于--follow=descriptor,根据文件描述符进行追踪,当文件改名或被删除,追踪停止
|
||
tail -F 等同于--follow=name --retry,根据文件名进行追踪,并保持重试,即该文件被删除或改名后,如果再次创建相同的文件名,会继续追踪
|
||
|
||
###### 文件类型(七类)
|
||
|
||
普通文件 -
|
||
|
||
目录文件 d
|
||
链接文件 l
|
||
字符设备文件 c
|
||
块设备文件 b
|
||
套接字文件 s
|
||
管道文件 p
|
||
|
||
------
|
||
|
||
###### help和man
|
||
|
||
help:相当与命令的说明书,可以使用help获取到该命令使用方法和相关参数
|
||
|
||
man: 1类 8类可以获取命令的使用方法 5类 可以获取配置文件的使用方法或相关信息 8类
|
||
|
||
掌握这两个工具help\man就掌握了Linux中所有命令的使用
|
||
|
||
**free:查看系统中内存的使用情况
|
||
df:查看系统磁盘使用情况**
|
||
|
||
### (第三章:用户和组)
|
||
|
||
###### 用户
|
||
|
||
特性:多用户多任务 多个用户在同一个系统中同一时间执行的不同的任务,他们互补影响
|
||
|
||
权限管理机制,每一个用户拥有自己的权限
|
||
|
||
默认的自带的超级管理用户:root
|
||
|
||
超级管理员用户 root 标识 UID 0
|
||
|
||
系统用户 标识 UID 1~999 包含1和999 0<UID<1000 1<=UID<=999
|
||
|
||
普通用户 标识 UID UID>=1000
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 用户组
|
||
|
||
一个用户至少包含一个组,一个组里可以有多个用户,同一个用户可以同时属于多个组
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 用户管理
|
||
|
||
语法格式:useradd [参数] 用户名
|
||
|
||
[root@xingdiancloud-server ~]# cat /etc/passwd //系统中所有用户的信息
|
||
|
||
```
|
||
以冒号作为分隔符,每一部分有每一部分的作用
|
||
|
||
mameng:x:1001:1001::/home/mameng:/bin/bash
|
||
用户名:密码占位符:用户标识UID:组标识GID:描述:用户家目录:登录shell
|
||
```
|
||
|
||
**判断一个用户是否可以登录,看登录shell;**
|
||
|
||
如果登录shell为 /bin/bash /bin/sh /usr/bin/sh /usr/bin/bash 以为着该用户可以登录到系统
|
||
如果登录shell为/sbin/nologin /bin/nologin 都不能登录
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# cat /etc/shells //查看可用的登录shell
|
||
/bin/sh
|
||
/bin/bash
|
||
/usr/bin/sh
|
||
/usr/bin/bash
|
||
```
|
||
|
||
###### 参数
|
||
|
||
```
|
||
创建一个不能登录的用户
|
||
|
||
[root@xingdiancloud-server ~]# useradd -s /sbin/nologin baixu
|
||
|
||
指定家目录创建用户
|
||
|
||
[root@xingdiancloud-server ~]# useradd -d /opt/wangying wangying
|
||
|
||
指定UID创建用户,UID要保持唯一性,有意义
|
||
|
||
[root@xingdiancloud-server ~]# useradd -u 2000 xushuo
|
||
|
||
指定GID创建用户,GID得存在
|
||
|
||
[root@xingdiancloud-server ~]# useradd -g 1002 lishenbiao
|
||
|
||
创建系统用户
|
||
|
||
[root@xingdiancloud-server ~]# useradd -r zhaoqi
|
||
|
||
创建一个系统用户,并且指定该用户的登录shell为/sbin/nologin
|
||
|
||
[root@xingdiancloud-server ~]# useradd -r -s /sbin/nologin lilong
|
||
```
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 查看用户
|
||
|
||
cat /etc/passwd
|
||
|
||
id 命令 默认查看当前用户的信息 UID GID Groups
|
||
|
||
id 用户名 指定用户查看
|
||
|
||
**重点:可以使用id命令判断一个用户是否存在**
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# id zhaoqi
|
||
uid=998(zhaoqi) gid=996(zhaoqi)groups=996(zhaoqi)
|
||
[root@xingdiancloud-server ~]# id huanghongid: huanghong: no such user
|
||
```
|
||
|
||
su - 切换用户
|
||
|
||
------
|
||
|
||
###### 修改
|
||
|
||
usermod [参数] 用户名
|
||
|
||
```
|
||
修改某用户,让其不可登录
|
||
|
||
[root@xingdiancloud-server ~]# usermod -s /sbin/nologin mameng
|
||
```
|
||
|
||
|
||
|
||
修改用户的UID
|
||
[root@xingdiancloud-server ~]# usermod -u 2002 mameng
|
||
该报错是因为该用户正在被使用,正在被使用的用户无法修改其属性
|
||
[root@xingdiancloud-server ~]# usermod -u 2002 mameng
|
||
usermod: user mameng is currently used by process 6684
|
||
解决方案:
|
||
利用pkill 指定用户将该用户对应的进程干掉
|
||
[root@xingdiancloud-server ~]# pkill -9 -u mameng pkill 进程管理的命令 -9 信号 杀死(进程) -u 指定用户 mameng
|
||
|
||
```
|
||
修改用户的名字
|
||
|
||
usermod -l 新名字 旧名字 修改用户名
|
||
```
|
||
|
||
对于一个用户来说,默认有一个主组,(创建用户时自动创建),我们也可以给用户增加附加组,usermod -G 组名 用户名,但是如果这个用户没有附加组
|
||
|
||
该命令就变成给用户添加附加组,但如果该用户有附加组,那么该命令才是修改附加组
|
||
|
||
<u>**增加: usermod -aG 组名 用户名**</u>
|
||
|
||
**删除:userdel [参数] 用户**
|
||
|
||
**删除用户: userdel -r 用户名 强制删除,删除该用户所有的内容**
|
||
|
||
cat /etc/shadown 中存放的是用户的密码信息(第二列,密码是经过加密处理的)
|
||
|
||
```
|
||
usermod -L 锁定账号
|
||
|
||
usermod -U 解锁账号
|
||
```
|
||
|
||
------
|
||
|
||
###### 组
|
||
|
||
创建组:groupadd 组名
|
||
|
||
groupadd hr
|
||
|
||
[root@xingdiancloud-server ~]# cat /etc/group
|
||
|
||
hr:X:2004:
|
||
|
||
组名:密码占位符:组标识 GID :成员、用户
|
||
|
||
[root@xingdiancloud-server ~]# groups qf 查看用户的组
|
||
|
||
修改组: groupmod
|
||
组名 组ID
|
||
groupmod -n 新组名 旧组名
|
||
groupmod -g 新ID 组名
|
||
gpasswd
|
||
给组添加用户 == 给用户添加附加组
|
||
[root@xingdiancloud-server ~]# gpasswd -a user10(用户) hr(组)
|
||
Adding user user10 to group hr
|
||
给组添加账户
|
||
[root@xingdian ~]# gpasswd -a user10 grp2
|
||
Adding user user10 to group grp2
|
||
同时添加多个用户到组:
|
||
[root@xingdian ~]# gpasswd -M jim,tom,wing 组名
|
||
从组删除账户
|
||
[root@xingdian ~]# gpasswd -d user10 grp2
|
||
删除组:
|
||
groupdel 组名
|
||
但是,如果改组是某个用户的主组,也就是说这个组是在创建用户的时候创建的,那么不能用groupdel删除,用userdel -r ,删除用户,组自然就被删除
|
||
|
||
------
|
||
|
||
###### 给用户提权
|
||
|
||
```
|
||
方法一:gpasswd gpasswd -a user100 wheel
|
||
|
||
方法二:usermod usermod -aG wheel user100
|
||
|
||
方法三:vim /etc/sudoers
|
||
在最后添加 配置文件110行
|
||
zhangsan ALL=(ALL) NOPASSWD: ALL
|
||
```
|
||
|
||
### (第四章:Linux权限管理)
|
||
|
||
###### 基本权限
|
||
|
||
U:User 用户 所有者
|
||
|
||
G:Group 组 所属组
|
||
|
||
O:Other 其他人
|
||
|
||
r:读 4
|
||
|
||
w:写 2
|
||
|
||
x:执行 1
|
||
|
||
-:没有权限 0
|
||
|
||
第一个字符:r
|
||
第二个字符:w
|
||
第三个字符:x
|
||
|
||
如果所有者具备读写执行的权限: rwx
|
||
|
||
如果所有者不具备任何权限:---
|
||
|
||
如果所有者只具备写权限:-w-
|
||
|
||
644文件默认权限
|
||
|
||
755目录默认权限
|
||
|
||
最高权限:777
|
||
|
||
------
|
||
|
||
###### 权限的设置(chmod)
|
||
|
||
修改基本权限:chmod
|
||
|
||
```
|
||
数字方式:
|
||
|
||
[root@xingdiancloud-server ~]# chmod 564 xingdian //这个文件权限:所有者读和执行,所属组读和写,其他人读
|
||
|
||
[root@xingdiancloud-server ~]# chmod 777 xingdian 所有者、所属组、其他人都是读、写、执行
|
||
|
||
[root@xingdiancloud-server ~]# chmod 000 xingdian 所有者、所属组、其他人没有任何权限
|
||
```
|
||
|
||
```
|
||
字母方式:
|
||
|
||
[root@xingdiancloud-server ~]# chmod u+x xingdian //增加,给xingdian文件所有者增加x权限
|
||
|
||
[root@xingdiancloud-server ~]# chmod u=rwx passwd //赋值,给passwd文件所有者赋值权限为rwx
|
||
|
||
[root@xingdiancloud-server ~]# chmod u-w xingdian //减少,给xingdian文件去掉w权限
|
||
|
||
[root@xingdiancloud-server ~]# chmod ugo=rwx xingdian
|
||
```
|
||
|
||
------
|
||
|
||
###### 案例1
|
||
|
||
设置mameng这个文件所有者读和写,其他人执行和读,所属组保持不变
|
||
|
||
```
|
||
字母: chmod u=rw,o=rx mamen
|
||
|
||
数字: chmod 645 mameng
|
||
```
|
||
|
||
------
|
||
|
||
创建一个文件名为qf,创建一个目录名为dir100,在opt目录下创建,qf的权限需要为所有者读写执行,其他人读和写,dir100所有人拥有读写执行
|
||
|
||
touch /opt/qf
|
||
mkdir /opt/dir100
|
||
chmod u=rwx,o=rw /opt/qf
|
||
chmod 777 /opt/dir100
|
||
|
||
###### 扩展
|
||
|
||
chmod 777 /var/www/html/* -R
|
||
|
||
chmod 777 /var/www/html -R
|
||
|
||
```
|
||
将/opt/dir目录下所有内容设置权限为777,包括dir1目录下的所有文件,也包括了dir目录
|
||
|
||
[root@xingdiancloud-server opt]# chmod 777 /opt/dir -R
|
||
|
||
将/opt/dir目录下所有内容设置权限为644,包括dir1目录下的所有文件,不包括了dir目录
|
||
|
||
[root@xingdiancloud-server opt]# chmod 644 dir/* -R
|
||
```
|
||
|
||
------
|
||
|
||
###### 修改所有者所属组(chown)
|
||
|
||
```
|
||
修改xingdian文件所有者为user1000,所属组为group2000
|
||
[root@xingdiancloud-server ~]# useradd user1000
|
||
[root@xingdiancloud-server ~]# groupadd group2000
|
||
[root@xingdiancloud-server ~]# chown user1000.group2000 xingdian
|
||
```
|
||
|
||
```
|
||
修改xingdian文件的所有者为user1001
|
||
[root@xingdiancloud-server ~]# useradd user1001
|
||
[root@xingdiancloud-server ~]# chown user1001 xingdian
|
||
```
|
||
|
||
```
|
||
修改xingdian文件的所属组为group2001 (chgrp 该命令只能修改所属组)
|
||
[root@xingdiancloud-server ~]# groupadd group2001
|
||
[root@xingdiancloud-server ~]# chown .group2001 xingdian
|
||
```
|
||
|
||
###### 案例2
|
||
|
||
```
|
||
将/opt/dir目录下所有内容的所有者设置为user1000,所属组设置为group2000,包括dir1目录下的所有文件,也包括了dir目录
|
||
|
||
[root@xingdiancloud-server opt]# chown user1000.group2000 /opt/dir -R
|
||
```
|
||
|
||
```
|
||
将/opt/dir目录下所有内容的所有者设置为user1001,所属组设置为group2001,包括dir1目录下的所有文件,不包括了dir目录
|
||
|
||
[root@xingdiancloud-server opt]# chown user1001.group2001 /opt/dir/* -R
|
||
```
|
||
|
||
###### r w x ---> 文件 目录 的影响
|
||
|
||
针对文件:
|
||
|
||
如果一个文件有r权限: 读取文件的内容 cat vim/vi(读)
|
||
|
||
如果一个文件有w权限: 编辑该文件 vi vim echo(写入文件)
|
||
|
||
如果一个文件有x权限: 执行该文件(脚本) ./ /
|
||
|
||
------
|
||
|
||
就算一个文件没有执行权限,我们可以使用bash或者sh的命令执行文件
|
||
但是如果一个文件没有执行权限,不能用./或者/执行文件
|
||
|
||
------
|
||
|
||
针对目录:
|
||
|
||
r:读目录的内容 ls
|
||
|
||
w:创建和删除内容 touch mkdir rm
|
||
|
||
x:切换目录 cd
|
||
|
||
关于删除目录下的内容,有没有权限删除,取决于目录的权限,跟目录里面我们要删除的文件或者目录来说没有关系
|
||
|
||
------
|
||
|
||
###### 高级权限
|
||
|
||
suid权限:给命令文件设置权限,当给命令文件设置了suid权限后,无论那个用户执行该命令,都会变成这个命令文件所有者的用户去执行 符号 s 对象 u 文件
|
||
|
||
chmod u+s 文件(命令文件)
|
||
chmod u-s 文件(命令文件)
|
||
|
||
------
|
||
|
||
sgid权限:组继承权限 对象 g 符号 s 针对目录
|
||
|
||
目录的所属组假设是hr,如果设定了sgid权限,那么在该目录下创建的所有新文件都会继承目录的属组hr
|
||
|
||
chmod g+s 目录名
|
||
|
||
chmod g-s 目录名
|
||
|
||
------
|
||
|
||
sticky权限:防止别人误删除 符号 t 对象 o 针对目录
|
||
|
||
chmod o+t 目录名
|
||
|
||
chmod o-t 目录名
|
||
|
||
------
|
||
|
||
扩展:suid 4 sgid 2 sticky 1
|
||
|
||
------
|
||
|
||
###### Linux启动级别
|
||
|
||
0 停机 init 0 == shutdown now
|
||
1 单用户模式,用于系统维护
|
||
2 多用户模式,但不启动NFS
|
||
3 完整的多用户模式,带有显示登录 init 3
|
||
4 预留,未使用
|
||
5 图形界面 init 5
|
||
6 重新启动 init 6 == reboot
|
||
|
||
------
|
||
|
||
###### swap分区
|
||
|
||
换分区 防止OOM 防止内存的溢出而造成系统崩溃
|
||
|
||
内存 === 物理设备 === 内存条
|
||
swap === 交换内存 === 磁盘空间 充当 内存空间
|
||
|
||
物理内存8G
|
||
|
||
磁盘空间100G 分区 / 95G /boot 1G /swap 4G
|
||
|
||
------
|
||
|
||
###### umask
|
||
|
||
权限掩码 (了解) 创建文件的时候,文件的默认权限跟umask有关联
|
||
|
||
默认情况下,umask的值为022,所创建的文件默认权限644,目录默认权限755
|
||
|
||
修改umask: umask + 掩码 最大777 最小000
|
||
|
||
文件默认权限最大 666
|
||
目录默认权限最大 777
|
||
|
||
------
|
||
|
||
###### 文件属性(会用)
|
||
|
||
a:能看 能追加 不能删除
|
||
|
||
i:只能看,其他什么都不能干
|
||
|
||
chattr + -
|
||
lsattr 查看
|
||
|
||
------
|
||
|
||
|
||
|
||
### (第五章:Linux进程管理)
|
||
|
||
###### 查看进程(静态)
|
||
|
||
得到想要的信息
|
||
|
||
静态:ps
|
||
|
||
ps aux
|
||
|
||
a 只能查看所有终端进程
|
||
u 显示进程拥有者
|
||
x 显示系统内所有进程
|
||
|
||
------
|
||
|
||
第一列:进程的拥有者
|
||
第二列:PID 进程ID 唯一标识一个进程
|
||
第三列:cpu使用进程的百分比
|
||
第四列:mem使用进程的百分比
|
||
第七列:终端
|
||
第八列:进程的状态
|
||
最后一列:进程的名字
|
||
|
||
------
|
||
|
||
USER: 运行进程的用户
|
||
PID: 进程ID
|
||
%CPU: CPU占用率
|
||
%MEM: 内存占用率
|
||
VSZ: 占用虚拟内存
|
||
RSS: 占用实际内存 驻留内存
|
||
TTY: 进程运行的终端
|
||
STAT: 进程状态 man ps (/STATE)
|
||
|
||
START: 进程的启动时间
|
||
TIME: 进程占用CPU的总时间
|
||
COMMAND: 进程文件,进程名
|
||
|
||
------
|
||
|
||
R 运行
|
||
S 可中断睡眠 Sleep
|
||
T 停止的进程
|
||
Z 僵尸进程
|
||
X 死掉的进程
|
||
|
||
------
|
||
|
||
获取当前系统中每个进程对应mem的使用情况。(pid %mem command)
|
||
|
||
获取当前系统中每个进程对应cpu的使用情况。(pid %cpu command)
|
||
|
||
```
|
||
获取当前系统中每个进程对应mem的使用情况并且只要最多的前三
|
||
|
||
[root@xingdiancloud-server ~]# ps axo command,%mem,pid --sort -%mem | head -4 指定了字段
|
||
COMMAND %MEM PID
|
||
/usr/bin/python2 -Es /usr/s 1.7 955
|
||
/usr/lib/polkit-1/polkitd - 1.5 625
|
||
/usr/sbin/NetworkManager -- 0.8 650
|
||
[root@xingdiancloud-server ~]# ps aux --sort -%mem | head -4 没有指定字段
|
||
|
||
|
||
```
|
||
|
||
pid :进程ID
|
||
ppid :父进程ID
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 获取PID
|
||
|
||
```
|
||
如何获取一个进程PID,后面可以使用PID对进程进行管理
|
||
|
||
sshd
|
||
[root@xingdiancloud-server ~]# ps aux | grep sshd
|
||
[root@xingdiancloud-server ~]# ps axo command,pid | grep sshd
|
||
|
||
[root@xingdiancloud-server ~]# cat /run/sshd.pid 只显示主进程
|
||
|
||
[root@xingdiancloud-server ~]# pidof sshd
|
||
1206 954
|
||
[root@xingdiancloud-server ~]# pgrep sshd
|
||
954
|
||
1206
|
||
```
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 扩展 查看(lsof)
|
||
|
||
yum -y install lsof
|
||
|
||
服务的端口,服务运行,进程存在,服务不运行,进程不存在,服务的端口如果存在,进程一定在
|
||
|
||
Linux系统中每个服务都有对应的端口,常见的:sshd=22 httpd=80
|
||
[root@xingdiancloud-server ~]# lsof -i:80
|
||
|
||
[root@xingdiancloud-server ~]# lsof -i:22
|
||
|
||
查看当前系统的平均负载:
|
||
|
||
静态:uptime w
|
||
|
||
动态:top
|
||
|
||
cpu空闲率:静态:vmstat 动态:top
|
||
|
||
内存使用情况:静态:free -m/g 动态:top
|
||
|
||
------
|
||
|
||
###### W who
|
||
|
||
w who 都可以看到谁正在远程连接我,能够获取到对方的IP地址、终端编号、对应的用户
|
||
|
||
w 还可以看服务器的运行时间,用户数量,平均负载
|
||
|
||
用户:
|
||
1.获取那些服务器正在连接我 w who
|
||
2.获取当前服务器的平均负载、运行时间 w
|
||
|
||
###### 企业案例
|
||
|
||
1.如何判断一个服务是否处于运行状态
|
||
|
||
ps aux
|
||
|
||
lsof
|
||
|
||
2.当发现服务器cpu飙升到200%,如何获取对应的进程信息/获取是由那些进程造成的
|
||
|
||
ps aux --sort -%cpu | head
|
||
|
||
------
|
||
|
||
###### 动态查看(top/htop)
|
||
|
||
命令:top htop
|
||
|
||
快捷键:
|
||
|
||
P 将%cpu排序
|
||
|
||
M 将%mem排序
|
||
|
||
R 排序反转
|
||
|
||
------
|
||
|
||
```
|
||
top(命令)
|
||
|
||
[root@xingdian ~]# top -d 1 每隔一秒钟显示一次
|
||
[root@xingdian ~]# top -d 1 -p 10126 查看指定进程的动态信息
|
||
[root@xingdian ~]# top -d 1 -p 10126,1
|
||
[root@xingdian ~]# top -d 1 -u apache 查看指定用户的进程
|
||
[root@xingdian ~]# top -d 1 -b -n 2 > top.txt 将2次top信息写入到文件
|
||
```
|
||
|
||
```
|
||
1.安装
|
||
yum -y install epel-release
|
||
[root@xingdian ~]# yum -y install wget
|
||
[root@xingdian ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
|
||
[root@xingdian ~]# yum -y install htop
|
||
2.使用
|
||
htop
|
||
```
|
||
|
||
------
|
||
|
||
###### 网络进程(Tcp)
|
||
|
||
root@xingdiancloud-server ~]# yum -y install net-tools
|
||
|
||
系统中安装的服务。 服务对应的端口 ssh 22 httpd 80 dhcp 68 ftp 21
|
||
|
||
```
|
||
netstat -auntpl
|
||
|
||
ss -auntpl
|
||
|
||
-a:所有
|
||
-u:查看UDP进程
|
||
-p:pid
|
||
-n:显示数字
|
||
-l:监听
|
||
-t:查看TCP进程
|
||
```
|
||
|
||
###### 数据传输
|
||
|
||
tcp:传输控制协议
|
||
|
||
udp:用户数据报协议
|
||
|
||
1.判断服务是否处于运行状态
|
||
|
||
ss -antpl 看到了80端口 ps top lsof
|
||
|
||
2.系统那些进程使用TCP进行数据传输
|
||
|
||
ss -antpl
|
||
|
||
netstat -antpl
|
||
|
||
ss -anupl
|
||
|
||
3.TCP状态 11
|
||
|
||
```
|
||
CLOSED(关闭状态)。初始状态,表示TCP连接未建立
|
||
LISTEN(监听状态)。服务器等待客户端连接的状态
|
||
SYN_SENT(同步已发送状态)。客户端发送连接请求后等待服务器确认的状态。
|
||
SYN_RECEIVED(同步已接收状态)。服务器接收到客户端连接请求并发送确认后的状态。
|
||
ESTABLISHED(已建立状态)。表示TCP连接已成功建立,双方可以进行数据传输。
|
||
FIN_WAIT_1(等待对方FIN报文状态)。表示TCP连接的一方发送了关闭连接请求。
|
||
FIN_WAIT_2(等待对方关闭连接请求状态)。表示TCP连接的一方等待对方发送关闭连接请求。
|
||
TIME_WAIT(等待状态)。表示TCP连接关闭后的等待状态,用于确保数据的可靠传输。
|
||
CLOSE_WAIT(等待关闭状态)。表示TCP连接的一方接收到了对方的FIN报文,但尚未发送ACK。
|
||
LAST_ACK(最后确认状态)。表示TCP连接关闭前的最后确认状态,等待对方的FIN报文。
|
||
CLOSING(关闭状态)。表示TCP连接正在进行关闭过程
|
||
```
|
||
|
||
###### kill(信号)
|
||
|
||
进程管理、控制 kill家族 kill killall pkill
|
||
|
||
信号
|
||
1 重新加载进程或重新加载配置文件
|
||
9 杀死进程
|
||
15 正常关闭(默认)
|
||
18 激活进程
|
||
19 挂起进程
|
||
|
||
yum -y install psmisc //这是在安装killall
|
||
|
||
```
|
||
如果是命令对应的进程或者该服务就一个进程:kill -9 pid 干掉该进程
|
||
如果是服务的进程,该服务有多个进程:pkill -9 进程名字 或者 killall -9 进程名字 干掉该服务
|
||
```
|
||
|
||
重新加载进程或者重新加载配置文件,目的就是为了让修改后的配置文件生效
|
||
|
||
sshd服务 假设修改了他的配置文件 为了让修改的配置文件生效
|
||
|
||
[root@xingdiancloud-server ~]# ps aux | grep sshd
|
||
[root@xingdiancloud-server ~]# kill -1 4954
|
||
|
||
这种方案,生效后服务对应进程的PID没有变
|
||
|
||
重启
|
||
[root@xingdiancloud-server ~]# systemctl restart sshd
|
||
|
||
这种方案,生效后服务对应进程的PID会改变
|
||
|
||
```
|
||
案例:
|
||
|
||
[root@xingdiancloud-harbor ~]# pkill -9 -t pts/2 //指定终端干掉
|
||
|
||
[root@xingdiancloud-server ~]# pkill -9 -u xingdian //干掉指定用户进程
|
||
```
|
||
|
||
### (第六章:Linux管道和重定向)
|
||
|
||
###### 文件描述符
|
||
|
||
进程用文件描述符来管理打开的文件
|
||
|
||
```
|
||
0:标准输入
|
||
1:标准正确输出
|
||
2:标准错误输出
|
||
$$:当前终端的PID echo $$ 获取当前终端的PID
|
||
|
||
```
|
||
|
||
------
|
||
|
||
###### 重定向
|
||
|
||
```
|
||
>覆盖
|
||
> >追加
|
||
> 1> 标准正确输出重定向覆盖
|
||
> 1>> 标准正确输出重定向追加
|
||
> 2> 标准错误输出重定向覆盖
|
||
> 2>> 标准错误输出重定向追加
|
||
> & === 1+2 混合输出
|
||
> < 输入 导入
|
||
```
|
||
|
||
------
|
||
|
||
例:
|
||
|
||
mysql 数据库文件 数据的导入
|
||
|
||
将db.sql的数据库文件写入到db的库中,利用了重定向 输入/导入
|
||
|
||
```
|
||
mysql -uroot -pQianFeng@123 db < db.sql
|
||
```
|
||
|
||
服务器连通性检测 ping
|
||
|
||
脚本:默认使用非交互式命令
|
||
|
||
if 判断 如果
|
||
|
||
bash sh 执行脚本,脚本可以不需要有执行权限
|
||
|
||
./ / 执行脚本,脚本需要有执行权限
|
||
|
||
检测局域网中那些IP可用,那些IP不可用,检测局域网有那些主机
|
||
|
||
如果能够ping通,说明这个IP是可用还是不可用
|
||
|
||
10.9.25.100 ping通 这个IP正在被使用 不可用
|
||
|
||
10.9.25.0/24
|
||
|
||
------
|
||
|
||
|
||
|
||
```
|
||
利用重定向生成一个多行文件(脚本)
|
||
|
||
[root@xingdiancloud-server ~]# cat >> /opt/xingdian.b <<eof
|
||
|
||
> xingdian
|
||
> diandian
|
||
> hello
|
||
> hi
|
||
> eof
|
||
|
||
脚本生产多行文件
|
||
[root@xingdiancloud-server ~]# cat a.sh
|
||
#!/bin/bash
|
||
|
||
cat >> /opt/xingdian.o <<eof
|
||
xingdian
|
||
diandian
|
||
hello
|
||
hi
|
||
eof
|
||
```
|
||
|
||
###### (nextcloud 私有云网盘)
|
||
|
||
```
|
||
1.环境准备工作:
|
||
|
||
1.防火墙和SELinux关闭(永久关闭)
|
||
[root@xingdian ~]# systemctl stop firewalld
|
||
[root@xingdian ~]# systemctl disable firewalld
|
||
[root@xingdian ~]# vi /etc/selinux/config
|
||
将SELINUX的值改成disabled
|
||
[root@xingdian ~]# setenforce 0
|
||
|
||
2.检查服务器网络
|
||
[root@xingdian ~]# ping www.baidu.com
|
||
|
||
部署项目:
|
||
|
||
1.环境安装
|
||
|
||
安装apache和数据库
|
||
[root@xingdian ~]# yum -y install httpd mariadb-server mariadb
|
||
|
||
安装php的仓库
|
||
[root@xingdian ~]# yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
|
||
|
||
安装yum工具
|
||
[root@xingdian ~]# yum install yum-utils -y
|
||
|
||
启动php7.4的版本
|
||
[root@xingdian ~]# yum-config-manager --enable remi-php74
|
||
|
||
安装php
|
||
[root@xingdian ~]# yum install php php-gd php-json php-mysql php-curl php-mbstring php-intl php-mcrypt php-imagick php-xml php-zip -y
|
||
|
||
启动数据库和apache
|
||
[root@xingdian ~]# systemctl start httpd mariadb
|
||
|
||
数据库部署
|
||
[root@xingdian ~]# mysql
|
||
Welcome to the MariaDB monitor. Commands end with ; or \g.
|
||
Your MariaDB connection id is 2
|
||
Server version: 5.5.68-MariaDB MariaDB Server
|
||
|
||
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
|
||
|
||
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
|
||
|
||
//创建一个名为nextcloud的数据库并设置该库的字符集为utf8;
|
||
MariaDB [(none)]> create database nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
|
||
Query OK, 1 row affected (0.00 sec)
|
||
|
||
//授权nextclouduser用户可以访问nextcloud的库,并设置密码为123456
|
||
MariaDB [(none)]> grant all on nextcloud.* to nextclouduser@'localhost' identified by '123456';
|
||
Query OK, 0 rows affected (0.00 sec)
|
||
|
||
//刷新授权表,让授权生效
|
||
MariaDB [(none)]> flush privileges;
|
||
Query OK, 0 rows affected (0.00 sec)
|
||
|
||
|
||
//退出
|
||
MariaDB [(none)]> exit
|
||
Bye
|
||
|
||
得到了库:nextcloud 得到了用户:nextclouduser 得到了密码:123456
|
||
|
||
配置apache
|
||
|
||
修改文件管理器的路径: /etc/httpd/conf/
|
||
|
||
|
||
[root@xingdian ~]# cd /etc/httpd/conf
|
||
[root@xingdian conf]# rm -rf httpd.conf
|
||
[root@xingdian conf]# yum -y install wget
|
||
[root@xingdian conf]# wget http://10.9.12.206:30120/directlink/10/httpd.conf
|
||
|
||
|
||
上传项目
|
||
|
||
[root@xingdian conf]# cd
|
||
[root@xingdian ~]# wget http://10.9.12.206:30120/directlink/10/nextcloud-22.0.0.zip
|
||
|
||
安装解压工具
|
||
[root@xingdian ~]# yum -y install unzip
|
||
|
||
解压
|
||
[root@xingdian ~]# unzip nextcloud-22.0.0.zip
|
||
|
||
[root@xingdian ~]# cp -r nextcloud /var/www/
|
||
|
||
重启apache
|
||
[root@xingdian ~]# systemctl restart httpd
|
||
|
||
[root@xingdian ~]# chmod 777 /var/www/nextcloud/ -R
|
||
|
||
|
||
|
||
|
||
```
|
||
|
||
------
|
||
|
||
|
||
|
||
###### 管道
|
||
|
||
sort (排序 默认从小到大)
|
||
|
||
-r 反转
|
||
-n 数值
|
||
-k 指定字段
|
||
|
||
uniq 去重 (只能对一个字段 必须要排序在去重)
|
||
|
||
-c 统计
|
||
|
||
awk 可以利用这个命令获取想要的数据 基本使用 利用行和列获取数据
|
||
|
||
```
|
||
例:获取当前系统中所有的用户名
|
||
cat /etc/passwd | awk -F: '{print $1}'
|
||
```
|
||
|
||
$1 第一列
|
||
|
||
$10 第十列
|
||
|
||
$NF 最后一列
|
||
|
||
$(NF-1) 倒数第二列
|
||
|
||
------
|
||
|
||
|
||
|
||
```
|
||
获取当前系统中所有的登录shell
|
||
[root@xingdiancloud-server ~]# cat /etc/passwd | awk -F: '{print $NF}
|
||
```
|
||
|
||
```
|
||
系统中都用到了那些登录shell
|
||
[root@xingdiancloud-server ~]# cat /etc/passwd | awk -F: '{print $NF}' |sort | uniq
|
||
```
|
||
|
||
```
|
||
统计一下每个登录shell被使用了几次
|
||
[root@xingdiancloud-server ~]# cat /etc/passwd | awk -F: '{print $NF}' |sort | uniq -c
|
||
```
|
||
|
||
```
|
||
获取被使用次数最多的登录shell
|
||
[root@xingdiancloud-server ~]# cat /etc/passwd | awk -F: '{print $NF}' |sort | uniq -c | sort -nr -k1 | head -1
|
||
```
|
||
|
||
```
|
||
获取当前系统内存空闲量
|
||
[root@xingdiancloud-server ~]# free -m | awk 'NR==2{print $4}'
|
||
```
|
||
|
||
```
|
||
获取根分区使用磁盘的百分比
|
||
df -Th | awk 'NR==6{print $6}'
|
||
```
|
||
|
||
***wc -l 统计行数***
|
||
|
||
```
|
||
access.log 日志文件 nginx访问日志 (熟练管道)
|
||
|
||
1.获取到所有的IP地址
|
||
|
||
cat access.log | awk '{print $1}'
|
||
|
||
2.获取到所有IP的个数(统计某一网站访问次数;统计某一网站PV量)
|
||
|
||
cat access.log | awk '{print $1}' |wc -l
|
||
|
||
3.获取所有的IP地址(去重)(统计某一网站访问的人有那些)
|
||
|
||
cat access.log | awk '{print $1}' | sort -n |uniq
|
||
|
||
4.统计某一网站访问人数(UV)
|
||
|
||
cat access.log | awk '{print $1}' | sort -n |uniq |wc -l
|
||
|
||
5.每个IP地址的个数(每个IP访问的次数)
|
||
cat access.log | awk '{print $1}' | sort | uniq -c
|
||
|
||
6.获取访问次数前三的人/IP地址
|
||
|
||
cat access.log | awk '{print $1}' | sort | uniq -c |sort -rn -k1 | head -3(第七章:Linux磁盘管理)
|
||
```
|
||
|
||
------
|
||
|
||
### (第七章:Linux磁盘管理)
|
||
|
||
###### 存储介绍
|
||
|
||
NAS
|
||
|
||
SAN
|
||
|
||
DAS
|
||
|
||
------
|
||
|
||
分布式存储 HDFS CEPH
|
||
云存储
|
||
对象存储 minio OSS
|
||
|
||
块存储
|
||
文件系统存储
|
||
|
||
------
|
||
|
||
###### 磁盘分区
|
||
|
||
工作原理
|
||
分区方式
|
||
MBR fdisk
|
||
GPT gdisk
|
||
|
||
fdisk 是磁盘分区的命令 也是磁盘管理工具
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# fdisk -l /dev/sdb
|
||
```
|
||
|
||
fdisk
|
||
|
||
n:添加分区
|
||
|
||
p:主分区
|
||
e:扩展分区
|
||
p:查看分区
|
||
w:保存退出
|
||
|
||
扩展分区不能被直接使用,需要在划分逻辑分区才能被使用
|
||
|
||
gdisk
|
||
|
||
n:添加分区 (1-128)
|
||
p:查看分区
|
||
d:删除分区
|
||
w:保存退出
|
||
q:退出不保存
|
||
|
||
可以转换
|
||
|
||
GPT-->MBR
|
||
MBR-->GPT
|
||
|
||
fdisk --> MBR
|
||
gdisk --> 分区
|
||
|
||
lsblk(查看磁盘分区)
|
||
|
||
df -Th(已经挂在设备的相关信息)
|
||
|
||
fdisk -l
|
||
|
||
gdisk -l
|
||
|
||
------
|
||
|
||
###### 磁盘格式化
|
||
|
||
格式化:磁盘或者磁盘分区设定文件系统类型
|
||
|
||
***面试题:磁盘有空间,本身容量100G,现在还显示10G,但是无法存放数据***
|
||
|
||
***ext家族文件系统,inodes耗尽造成无法存储文件***
|
||
|
||
格式化命令:
|
||
|
||
mkfs.xfs -f 设备名称
|
||
mkfs.ext4 设备名称
|
||
|
||
------
|
||
|
||
###### 临时挂载
|
||
|
||
挂载:mount
|
||
|
||
临时挂载:
|
||
|
||
mount [参数] 设备名称 挂载点(目录)
|
||
|
||
mount -o rw,remount /sysroot
|
||
|
||
mount /dev/sdd /mnt
|
||
例:
|
||
[root@xingdiancloud-server ~]# mount /dev/sdb1 /opt/share-1
|
||
|
||
[root@xingdiancloud-server ~]# mount -o rw CentOS-7-x86_64-Minimal-2009.iso /opt/centos/
|
||
|
||
挂载点:原则上自定义
|
||
|
||
比如:假设/var/lib/mysql 这个目录里面存放项目数据,单独挂载一个磁盘来存储数据库
|
||
|
||
------
|
||
|
||
###### 卸载:umount
|
||
|
||
umount 挂载点、设备名称
|
||
|
||
###### 永久挂载
|
||
|
||
/etc/fstab 添加相关的参数实现永久挂载
|
||
|
||
第一列:设备(设备名称/dev/sdb;设备UUID标识;暂时不讲)
|
||
第二列:挂载点(本质就是目录)
|
||
第三列:文件系统类型(xfs ext4 nfs)
|
||
第四列:属性 rw remount defaults
|
||
第五列+第六列:0 0 不备份 不检查
|
||
|
||
/dev/sdc /opt/share-2 ext4 defaults 0 0 (重点)
|
||
|
||
UUID="25d22b48-8e46-494b-a12c-ae80a4297800" /opt/share-1 xfs defaults 0 0
|
||
|
||
生效: mount -a 或者 重启服务器
|
||
|
||
磁盘 [分区--管理方式] 格式化 挂载 被使用
|
||
|
||
卸载:先umount手动卸载,一定要把配置文件对应的参数删除,这才是永久卸载
|
||
|
||
------
|
||
|
||
###### LVM逻辑卷
|
||
|
||
LVM逻辑卷管理
|
||
|
||
1.服务器添加磁盘
|
||
|
||
2.磁盘变成PV
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# pvcreate /dev/sdb /dev/sdc /dev/sdd
|
||
或者
|
||
[root@xingdiancloud-server ~]# pvcreate /dev/sd{b..d}
|
||
```
|
||
|
||
3.将PV变成VG(可以创建一个也可以创建多个)
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# vgcreate vg1 /dev/sd{b..c}
|
||
[root@xingdiancloud-server ~]# vgcreate vg2 /dev/sdd
|
||
```
|
||
|
||
4.创建逻辑卷
|
||
|
||
```
|
||
root@xingdiancloud-server ~]# lvcreate -L 5G -n lv1 vg1
|
||
```
|
||
|
||
格式化
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# mkfs.xfs -f /dev/vg1/lv1
|
||
```
|
||
|
||
挂载
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# mkdir /opt/lv1
|
||
[root@xingdiancloud-server ~]# mount /dev/vg1/lv1 /opt/lv1/
|
||
```
|
||
|
||
------
|
||
|
||
###### 物理卷
|
||
|
||
查看:
|
||
pvs
|
||
pvdisplay
|
||
|
||
删除:
|
||
pvremove PV名字 (注意:如果正在被使用,不要轻易删除)
|
||
|
||
卷组:
|
||
查看:
|
||
|
||
```
|
||
vgs
|
||
vgdisplay
|
||
```
|
||
|
||
删除:
|
||
|
||
```
|
||
vgremove vg名字
|
||
```
|
||
|
||
逻辑卷:
|
||
查看:
|
||
|
||
```
|
||
lvs
|
||
lvdisplay
|
||
```
|
||
|
||
-l:指的是LE的个数 LE个数*LE大小=容量
|
||
[root@xingdiancloud-server ~]# lvcreate -l 1280 -n lv2 vg1
|
||
删除
|
||
[root@xingdiancloud-server ~]# lvremove /dev/vg1/lv2
|
||
|
||
------
|
||
|
||
###### xfs扩容
|
||
|
||
假设:有一个逻辑卷 lv1 容量用完了 我还要继续往lv1对应的挂载点目录存放数据
|
||
|
||
解决方案: lv扩容
|
||
|
||
1.看vg容量,如果vg有空闲,直接给lv扩容!
|
||
|
||
<img src="C:\Users\14653\AppData\Roaming\Typora\typora-user-images\image-20240408200347296.png" alt="image-20240408200347296" style="zoom:200%;" />
|
||
|
||
2.如果vg容量没有了,先给VG扩容,在给lv扩容
|
||
|
||
3.如果pv有,直接给vg扩容
|
||
|
||
4.如果PV没有了,先创建PV
|
||
|
||
|
||
案例:lv空间不足,但是vg有空闲 LVM在线扩容 热扩容
|
||
|
||
1.判断vg空闲 vgs 看空闲量
|
||
|
||
2.lv扩到多少 10G
|
||
|
||
```
|
||
lvextend -L 10G [lv path]
|
||
```
|
||
|
||
增加到到少g
|
||
|
||
3.lv path 怎么看 lvdisplay
|
||
|
||
|
||
lvm的lv扩容
|
||
|
||
4.lvs/lvdisplay验证 容量是否发生了变化
|
||
|
||
lvs 看的是 10G ,发生了变化,但是df -Th看的时候没有
|
||
|
||
5.文件系统扩容 (不同文件系统,扩容时命令不同;先以 xfs为例,lv1是xfs的文件系统)
|
||
|
||
xfs_growfs [要扩容的lv的path]
|
||
|
||
```
|
||
[root@xingdiancloud-server ~]# xfs_growfs /dev/vg1/lv1
|
||
```
|
||
|
||
6.验证文件系统扩容 df -Th
|
||
|
||
------
|
||
|
||
###### ext4扩容
|
||
|
||
准备一个正在被使用LV并且文件系统ext4
|
||
|
||
```
|
||
准备工作:
|
||
[root@xingdiancloud-server ~]# lvcreate -L 2G -n lv2 vg1
|
||
[root@xingdiancloud-server ~]# mkfs.ext4 /dev/vg1/lv2
|
||
[root@xingdiancloud-server ~]# mkdir /opt/lv2
|
||
[root@xingdiancloud-server ~]# vi /etc/fstab
|
||
/dev/vg1/lv2 /opt/lv2 ext4 defaults 0 0
|
||
[root@xingdiancloud-server ~]# mount -a
|
||
```
|
||
|
||
验证:df -Th
|
||
|
||
扩容:使用vgs看到。vg有容量,直接给LV扩容
|
||
|
||
[root@xingdiancloud-server ~]# lvextend -L 5G /dev/vg1/lv2
|
||
|
||
判断了文件系统为ext4,所以使用
|
||
|
||
[root@xingdiancloud-server ~]# resize2fs /dev/vg1/lv2
|
||
|
||
验证:df -Th
|
||
|
||
------
|
||
|
||
###### 案例(根扩容)
|
||
|
||
案例:给根扩容
|
||
|
||
1.查看vg卷组是否有余量
|
||
|
||
有的话直接lvextend -L 容量 路径
|
||
|
||
没有,查看PV,确定是否有空闲的PV
|
||
|
||
```
|
||
有:vgextend centos PV name
|
||
```
|
||
|
||
如果没有PV,先增加PV,判断是否有磁盘
|
||
|
||
有磁盘:pvcreate /def/sdf
|
||
|
||
```
|
||
2.lvextend -L 30G /dev/centos/root扩大到30G
|
||
```
|
||
|
||
至此完成了lv 的扩容
|
||
|
||
路径通过lvdisplay查看
|
||
|
||
```
|
||
3.xfs_growfs /dev/centos/root(文件系统扩容,先判断根分区的文件系统类型)[df -Th 或者blkid]
|
||
```
|
||
|
||
```
|
||
4.df -Th
|
||
```
|
||
|
||
------
|
||
|
||
###### 练习题
|
||
|
||
创建lv1 ext4 lv2 xfs 分别为100M 200M 实现开机自动挂载到/d1 /d2目录下,扩容vg(20G),将sdb的数据迁移到sdc上。 扩容lv1到500M,lv2增加300M,将sdb从卷组中删除,然后格式化sdc,要求成功。
|
||
|
||
```
|
||
# 创建逻辑卷lv1和lv2
|
||
lvcreate -L 100M -n lv1 myvg
|
||
lvcreate -L 200M -n lv2 myvg
|
||
# 格式化lv1为ext4,lv2为xfs
|
||
mkfs.ext4 /dev/myvg/lv1
|
||
mkfs.xfs /dev/myvg/lv2
|
||
# 创建挂载点并设置开机自动挂载
|
||
mkdir /d1 /d2
|
||
echo "/dev/myvg/lv1 /d1 ext4 defaults 0 0" >> /etc/fstab
|
||
echo "/dev/myvg/lv2 /d2 xfs defaults 0 0" >> /etc/fstab
|
||
# 挂载新创建的文件系统 mount -a
|
||
# 将sdc加入卷组
|
||
pvcreate /dev/sdc
|
||
vgextend myvg /dev/sdc
|
||
|
||
# 扩容lv1到500M,lv2增加300M
|
||
lvresize -L +400M /dev/myvg/lv1
|
||
lvresize -L +300M /dev/myvg/lv2
|
||
|
||
# sdb的数据迁移并不需要特别操作,因为我们在扩大卷组后直接扩展了逻辑卷大小,数据不会丢失。
|
||
|
||
# 将sdb从卷组中删除
|
||
vgreduce --removemissing myvg
|
||
|
||
# 确认sdb已从卷组中移除后再进行下一步操作
|
||
pvdisplay # 查看当前的物理卷信息
|
||
|
||
# 格式化sdc(这里假设不再使用sdc作为存储数据的设备)
|
||
pvremove /dev/sdc
|
||
|
||
|
||
```
|
||
|
||
------
|
||
|
||
###### 交换分区
|
||
|
||
swap分区==交换分区
|
||
|
||
free -m 看到swap的值都为0,
|
||
|
||
[root@xingdiancloud-server ~]# free -m 看到swap的值都为0,所以该服务器没有交换分区
|
||
|
||
直接把一个磁盘的容量给交换分区用
|
||
直接把一个lv的容量给交换分区用 为例
|
||
直接把一个分区的容量给交换分区用
|
||
|
||
```
|
||
1.创建一个lv
|
||
[root@xingdiancloud-server ~]# lvcreate -L 3G -n lv3 vg1
|
||
2.格式化,由于未来该lv用来做swap分区,所以格式化的命令为mkswap
|
||
[root@xingdiancloud-server ~]# mkswap /dev/vg1/lv3
|
||
3.挂载到swap
|
||
[root@xingdiancloud-server ~]# vi /etc/fstab
|
||
/dev/vg1/lv3 swap swap defaults 0 0
|
||
[root@xingdiancloud-server ~]# mount -a
|
||
6.激活
|
||
[root@xingdiancloud-server ~]# swapon /dev/vg1/lv3
|
||
7.验证
|
||
free -m
|
||
```
|
||
|
||
------
|
||
|
||
###### 磁盘阵列
|
||
|
||
现在的物理服务器自带RAID(RAID卡)
|
||
|
||
1.RAID介绍
|
||
|
||
即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。
|
||
|
||
2.功能
|
||
|
||
(1)通过对磁盘上的数据进行条带化,实现对数据成块存取,减少磁盘的机械寻道时间,**提高了数据存取速度**。
|
||
|
||
(2)通过对一个阵列中的几块磁盘同时读取,减少了磁盘的机械寻道时间,提高数据存取速度。
|
||
(3)通过镜像或者存储奇偶校验信息的方式,实现了对数据的冗余保护
|
||
|
||
------
|
||
|
||
RAID 0
|
||
|
||
```
|
||
优点:
|
||
(1)充分利用I/O总线性能使其带宽翻倍,读/写速度翻倍。
|
||
(2)充分利用磁盘空间,利用率为100%。
|
||
缺点:
|
||
(1)不提供数据冗余。
|
||
(2)无数据检验,不能保证数据的正确性。
|
||
(3)存在单点故障。
|
||
应用场景:
|
||
(1)对数据完整性要求不高的场景,如:日志存储,个人娱乐
|
||
(2)要求读写效率高,安全性能要求不高,如图像工作站
|
||
```
|
||
|
||
------
|
||
|
||
RAID 1
|
||
|
||
```
|
||
优点:
|
||
(1)提供数据冗余,数据双倍存储。
|
||
(2)提供良好的读性能
|
||
缺点:
|
||
(1)无数据校验
|
||
(2)磁盘利用率低,成本高
|
||
应用场景:
|
||
存放重要数据,如数据存储领域
|
||
```
|
||
|
||
RAID 5
|
||
|
||
```
|
||
优点:
|
||
(1)读写性能高
|
||
(2)有校验机制
|
||
(3)磁盘空间利用率高
|
||
缺点:
|
||
(1)磁盘越多安全性能越差
|
||
应用场景:
|
||
数据安全性高,如数据金融、库、存储等。
|
||
```
|
||
|
||
安装RAID:资源库
|
||
|
||
------
|
||
|
||
###### 文件链接(软硬链接)
|
||
|
||
软链接:
|
||
|
||
ln -s 源文件(绝对路径) 目的地(绝对路径)
|
||
|
||
普通文件和目录都支持软链接
|
||
软链接源文件跟链接文件inode号不同
|
||
软链接文件源文件删除后,链接文件不可用
|
||
软链接可以跨分区
|
||
|
||
------
|
||
|
||
硬链接:
|
||
|
||
ln 源文件(绝对路径) 目的地(绝对路径)
|
||
|
||
文件可以创建硬链接,目录不可以
|
||
硬链接inode不变
|
||
硬链接源文件删除后,链接文件可以使用
|
||
硬链接不可以跨分区
|
||
|
||
------
|
||
|
||
### (第八章:文件查找)
|
||
|
||
###### 查找(find)
|
||
|
||
语法格式:find + 位置/路劲 + 条件+值
|
||
|
||
-name文件名字 -i忽略大小写
|
||
|
||
-size文件大小
|
||
|
||
-type文件类型
|
||
|
||
|
||
|
||
------
|
||
|
||
###### 按文件属主、属组找:
|
||
|
||
[root@xingdian ~]# find /home -user jack //属主是jack的文件
|
||
[root@xingdian ~]# find /home -group hr //属组是hr组的文件
|
||
|
||
|
||
|
||
------
|
||
|
||
###### 按文件权限:
|
||
|
||
find -perm 644 按权限查找
|
||
|
||
[root@xingdian ~]# find -perm 644 -ls
|
||
[root@xingdian ~]# find -perm -644 -ls
|
||
[root@xingdian ~]# find -perm -600 -ls
|
||
[root@xingdian ~]# find -perm -222 -ls
|
||
|
||
atime 访问时间 ctime 改变时间 mtime 修改时间
|
||
|
||
-perm 指定 644 755 400 -644 包含
|
||
|
||
```
|
||
-a and 条件都要满足
|
||
-o or 条件满足其中一个\(\) \:符号回归本意 转义符
|
||
```
|
||
|
||
------
|
||
|
||
###### 查找的条件
|
||
|
||
-name
|
||
-size
|
||
-mtime
|
||
-user
|
||
|
||
-not ! 取反
|
||
|
||
------
|
||
|
||
###### 按照文件类型查找
|
||
|
||
目录文件 d
|
||
链接文件 l
|
||
字符设备文件 c
|
||
块设备文件 b
|
||
套接字文件 s
|
||
管道文件 p
|
||
|
||
-group -type 按照类型查找 普通文件 f 文件类型 d s p l b c
|
||
|
||
------
|
||
|
||
###### -regex 正则
|
||
|
||
多个条件 -a 并且/和 -o 或者
|
||
|
||
动作: 默认-print 显示详细信息 -ls
|
||
|
||
```
|
||
注意:在多个条件的时候 无论使用-a 还是使用-o 把条件都用\( \) 括起来
|
||
```
|
||
|
||
正则: .* 任意多个字符 [0-9] [a-z] [0-9a-z] [A-Z] [0-9A-Z] [a-zA-Z] + 出现多次
|
||
|
||
------
|
||
|
||
###### 动作
|
||
|
||
-ls
|
||
-print
|
||
[root@xingdian opt]# find /opt/ -name "file1" -delete
|
||
|
||
-delete删除
|
||
|
||
-exec
|
||
-ok
|
||
|
||
-ok和-exec 的区别
|
||
|
||
-ok需要人工确认 y
|
||
|
||
文件操作: mv cp rm(去掉) 压缩
|
||
|
||
```
|
||
查找opt目录下所有以2结尾的文件移动到/mnt目录下
|
||
[root@xingdian opt]# find /opt/ -name "*4" -ok mv {} /mnt \;
|
||
|
||
[root@xingdian opt]# find /opt/ -name "*4" -ok 文件操作命令(cp mv rm) {承接查到的内容} 目的地 \;
|
||
```
|
||
|
||
```
|
||
[root@xingdian opt]# find /opt/ -name "*2" |xargs -i mv {} /mnt/
|
||
|
||
[root@xingdian opt]# find /opt/ -name "*5" |xargs -I {} mv {} /tmp
|
||
```
|
||
|
||
------
|
||
|
||
### (第九章:打包压缩)
|
||
|
||
###### tar打包压缩/解压缩
|
||
|
||
压缩包;Linux:.zip .tar.gz .tar.bz2 .tar.xz .tgz
|
||
|
||
```
|
||
打包压缩
|
||
|
||
tar cf 路径/压缩包的名字 压缩的文件
|
||
```
|
||
|
||
tar包:
|
||
|
||
之所以会得到不同格式的压缩包,是因为调用的压缩方式不同
|
||
.tar.gz gzip z
|
||
.tar.bz2 bzip2 j
|
||
.tar.xz xz J
|
||
|
||
```
|
||
解压缩
|
||
tar xf 压缩包的名字
|
||
|
||
指定位置解压 -C
|
||
[root@xingdian ~]# tar xf logstash-7.3.2.tar.gz -C /opt/
|
||
```
|
||
|
||
------
|
||
|
||
###### zip包
|
||
|
||
```
|
||
解压缩
|
||
unzip 压缩包名字
|
||
(yum -y install unzip)
|
||
|
||
指定位置解压缩:
|
||
[root@xingdian ~]# unzip -d /opt/ nextcloud-22.0.0.zip
|
||
```
|
||
|
||
------
|
||
|
||
###### 案例 1
|
||
|
||
查找/etc目录下所有以.conf结尾的文件并进行压缩,压缩到/opt目录下命名为conf.tar.gz
|
||
|
||
[root@xingdian opt]# find /etc -name "*.conf" |xargs -i tar rf /opt/conf-1.tar.gz {}
|
||
|
||
------
|
||
|
||
###### 扩展
|
||
|
||
nginx 服务 日志文件 access.log 日志轮转 对日志文件切割 旧日志文件打包.gz
|
||
|
||
```
|
||
.gz
|
||
|
||
gunzip
|
||
```
|
||
|
||
如果没有gunzip,使用yum -y install gzip
|
||
|
||
gunzip access.log.gz
|
||
|
||
------
|
||
|
||
###### 案例 2(拷贝海量小文件)
|
||
|
||
scp -r 源文件 目的地
|
||
|
||
```
|
||
[root@xingdian ~]# scp -r nextcloud 10.9.12.209:/opt/ 文件多速度慢
|
||
|
||
压缩后拷贝:
|
||
[root@xingdian ~]# tar cf nextcloud.tar.gz nextcloud
|
||
[root@xingdian ~]# scp -r nextcloud.tar.gz 10.9.12.209:/opt/
|
||
```
|
||
|
||
------
|
||
|
||
### (第十章:软件包管理)
|
||
|
||
###### Linux软件包类型:
|
||
|
||
二进制包 .rpm
|
||
|
||
源码包 编译 .tar.gz tar.xz
|
||
|
||
mysql-community-common-5.7.12-1.el7.x86_64.rpm
|
||
|
||
yum-utils-1.1.30-14.el6.noarch.rpm
|
||
|
||
ntfs-3g-2011.4.12-5.el5.x86_64.rpm
|
||
|
||
软件名字 版本号 发布版本 平台架构 后缀
|
||
|
||
安装软件 获取对应包
|
||
|
||
网址:
|
||
https://rpmfind.net/ (注意:操作系统版本)
|
||
ftp://ftp.redhat.com
|
||
软件官网(mysql )
|
||
|
||
安装软件时,都有依赖关系,特别是二进制包
|
||
|
||
案例:源码包编译安装
|
||
|
||
Linux 很多的发行版本 Ubuntu DPKG dpkg (apt ) Centos rpm (yum rpm)
|
||
|
||
------
|
||
|
||
###### YUM官方源使用(更换YUM源)
|
||
|
||
基础仓库 : BASE仓库
|
||
|
||
扩展仓库文件 :EPEL仓库
|
||
|
||
```
|
||
更换YUM 源(阿里源:https://mirrors.aliyun.com)
|
||
|
||
1.删除自带的:rm -rf /etc/yum.repos.d/*
|
||
|
||
2.获取BASE仓库 获取BASE源
|
||
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
|
||
|
||
3.获取epel仓库 获取EPEL源
|
||
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
|
||
4.清空yum缓存;在重新加载yum缓存[加快软件的安装速度]
|
||
yum clean all
|
||
yum makecache 或者 yum makecache fast
|
||
```
|
||
|
||
注意:
|
||
判断如否有wget的命令,如果没有先安装(前提有BASE仓库),然后在使用wget -O
|
||
wget -O
|
||
|
||
------
|
||
|
||
在系统中有一些软件BASE和EPEL仓库中没有,来自于软件官网
|
||
|
||
BASE和EPEL中mariadb,没有mysql
|
||
|
||
数据库 mysql
|
||
|
||
```
|
||
mysql仓库文件所对应的安装包,安装该包,就能得到mysql的仓库文件
|
||
|
||
yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
|
||
```
|
||
|
||
|
||
WEB服务器 Nginx
|
||
|
||
|
||
|
||
```
|
||
[root@ziyang yum.repos.d]# vi /etc/yum.repos.d/nginx.repo
|
||
[nginx-stable]
|
||
name=nginx stable repo
|
||
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
|
||
gpgcheck=1
|
||
enabled=1
|
||
gpgkey=https://nginx.org/keys/nginx_signing.key
|
||
module_hotfixes=true
|
||
|
||
[nginx-mainline]
|
||
name=nginx mainline repo
|
||
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
|
||
gpgcheck=1
|
||
enabled=0
|
||
gpgkey=https://nginx.org/keys/nginx_signing.key
|
||
module_hotfixes=true
|
||
```
|
||
|
||
------
|
||
|
||
###### YUM安装/删除/查找
|
||
|
||
```
|
||
yum -y install l //安装
|
||
yum -y remove //卸载
|
||
yum -y reinstall //重新安装
|
||
yum provides vim //复制软件包名称
|
||
yum provides //查找某一命令对应的软件包
|
||
yum list //列出所有包
|
||
yum repolist //列出所有的仓库(可用仓库)
|
||
```
|
||
|
||
```
|
||
安装软件方式:
|
||
|
||
yum -y install httpd
|
||
yum -y install nginx sl wget
|
||
|
||
yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
|
||
|
||
yum -y install /opt/mysql80-community-release-el7-11.noarch.rpm
|
||
yum -y install /opt/*.rpm
|
||
```
|
||
|
||
普通包
|
||
|
||
组包
|
||
|
||
grouplist
|
||
|
||
groupinstall
|
||
|
||
###### 补充
|
||
|
||
1.ifconfig 查不到对应的软件包 包:net-tools
|
||
|
||
2.yum这个软件包管理的命令 自动解决依赖关系
|
||
|
||
------
|
||
|
||
###### Yum仓库延伸
|
||
|
||
1.yum仓库文件内容
|
||
|
||
一个仓库配置文件[epel.repo]有多个仓库
|
||
|
||
```
|
||
[epel] 标签
|
||
name=xingdian 指定仓库的名字
|
||
baseurl=http://mirrors.aliyun.com/epel/7/$basearch 仓库的地址
|
||
ftp://
|
||
file://
|
||
httpd:// 和 ftp:// 网络地址 file:// 本地地址
|
||
enabled= 0 1 0关闭 1开启 仓库是否启用 默认该参数的值为1
|
||
gpgcheck= 0 1 0关闭 1 开启
|
||
gpgkey
|
||
```
|
||
|
||
------
|
||
|
||
2.yum命令 配置文件 /etc/yum.conf
|
||
|
||
cachedir= 指定缓存位置/目录
|
||
|
||
keepcache= 0 1 0关闭 1开启 缓存功能
|
||
|
||
案例:
|
||
|
||
开启yum的缓存功能,可以在安装软件的过程中保留软件包
|
||
|
||
修改/etc/yum.conf 把keepcache的值改为1 开启缓存功能 缓存软件包
|
||
|
||
cachedir所定义的目录下找对应包 /var/cache/yum/x86_64/7
|
||
|
||
根据该软件所对应的仓库进入到对应的目录下找到packages目录,包就在该目录下
|
||
|
||
------
|
||
|
||
3.yum-config-manager 控制仓库是否可用
|
||
|
||
enable:启用
|
||
|
||
disable:禁用
|
||
|
||
yum-config-manager 对应的软件 yum-utils
|
||
|
||
[root@ziyang ~]# yum-config-manager --disable base[仓库标签] 关闭base仓库
|
||
[root@ziyang ~]# yum-config-manager --enable base 启用改仓库
|
||
|
||
注意:
|
||
|
||
修改配置文件 启用仓库属于交互式
|
||
|
||
使用yum-config-manager的方式启用关闭仓库属于非交互式(用于脚本使用)
|
||
|
||
------
|
||
|
||
###### 软件包管理rpm
|
||
|
||
和yum的区别:yum可以自动解决依赖关系,而rpm只能手动解决依赖关系
|
||
|
||
安装:rpm -ivh+软件包
|
||
|
||
卸载 :rpm -e
|
||
|
||
获取安装的所有 软件包:rpm -qa
|
||
|
||
判断一个软件是否安装: rpm -qa | grep 软件名称
|
||
|
||
------
|
||
|
||
###### rpm手动解决依赖关系
|
||
|
||
```
|
||
以Apache为例
|
||
rpmfind.net 获取相关的软件包
|
||
|
||
1.获取apache的rpm包
|
||
[root@xingdian ~]# wget https://rpmfind.net/linux/centos/7.9.2009/updates/x86_64/Packages/httpd-2.4.6-97.el7.centos.x86_64.rpm
|
||
2.安装
|
||
[root@xingdian ~]# rpm -ivh httpd-2.4.6-97.el7.centos.x86_64.rpm
|
||
error: Failed dependencies:
|
||
/etc/mime.types is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
httpd-tools = 2.4.6-97.el7.centos is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
libapr-1.so.0()(64bit) is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
libaprutil-1.so.0()(64bit) is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
|
||
3.先找到/etc/mime.types所对应的软件包,然后或该软件
|
||
|
||
[root@xingdian ~]# yum provides /etc/mime.types
|
||
|
||
[root@xingdian ~]# wget https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/mailcap-2.1.41-2.el7.noarch.rpm
|
||
|
||
[root@xingdian ~]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
|
||
|
||
4.继续解决依赖关系
|
||
[root@xingdian ~]# rpm -ivh httpd-2.4.6-97.el7.centos.x86_64.rpm
|
||
error: Failed dependencies:
|
||
httpd-tools = 2.4.6-97.el7.centos is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
libapr-1.so.0()(64bit) is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
libaprutil-1.so.0()(64bit) is needed by httpd-2.4.6-97.el7.centos.x86_64
|
||
|
||
5.获取第二个依赖关系的包httpd-tools;下载安装
|
||
[root@xingdian ~]# rpm -ivh httpd-tools-2.4.6-97.el7.centos.x86_64.rpm
|
||
error: Failed dependencies:
|
||
libapr-1.so.0()(64bit) is needed by httpd-tools-2.4.6-97.el7.centos.x86_64
|
||
libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.4.6-97.el7.centos.x86_64
|
||
|
||
6.获取该模块对应的安装包apr
|
||
|
||
[root@xingdian ~]# yum provides libapr-1.so.0
|
||
|
||
[root@xingdian ~]# wget https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/apr-1.4.8-7.el7.x86_64.rpm
|
||
|
||
[root@xingdian ~]# rpm -ivh apr-1.4.8-7.el7.x86_64.rpm
|
||
|
||
7.继续获取需要解决的依赖关系
|
||
|
||
[root@xingdian ~]# rpm -ivh httpd-tools-2.4.6-97.el7.centos.x86_64.rpm
|
||
error: Failed dependencies:
|
||
libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.4.6-97.el7.centos.x86_64
|
||
|
||
8.获取该模块对应的安装包libaprutil-1.so.0(apr-utils)
|
||
|
||
[root@xingdian ~]# yum provides libaprutil-1.so.0
|
||
|
||
[root@xingdian ~]# wget https://rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/apr-util-1.5.2-6.el7.x86_64.rpm
|
||
|
||
[root@xingdian ~]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
|
||
|
||
9.安装httpd-tools
|
||
[root@xingdian ~]# rpm -ivh httpd-tools-2.4.6-97.el7.centos.x86_64.rpm
|
||
|
||
10.安装httpd
|
||
[root@xingdian ~]# rpm -ivh httpd-2.4.6-97.el7.centos.x86_64.rpm
|
||
```
|
||
|
||
------
|
||
|
||
###### 自制yum源
|
||
|
||
仓库包的名字以.repo结尾
|
||
|
||
```
|
||
1.准备包(rpmfind,iso镜像获取)
|
||
2.准备目录存放rpm包(注意自己服务器的环境)
|
||
[root@xingdian ~]# mkdir /opt/centos-packages
|
||
[root@xingdian ~]# cp *.rpm /opt/centos-packages/
|
||
3.将该目录变成软件包目录
|
||
[root@xingdian ~]# createrepo /opt/centos-packages/
|
||
|
||
4.编写仓库文件调用
|
||
[xingdiancloud]
|
||
name=xingdiancloud native packages
|
||
baseurl=file:///opt/centos-packages
|
||
enabled=1
|
||
5.验证
|
||
yum repolist
|
||
```
|
||
|
||
------
|
||
|
||
###### 源安装(编译安装)
|
||
|
||
源编译安装nginx https://nginx.org/ nginx的官网
|
||
|
||
```
|
||
1.获取nginx的源码包
|
||
wget https://nginx.org/download/nginx-1.24.0.tar.gz
|
||
解压:tar xf nginx-1.24.0.tar.gz
|
||
2.编译安装准备所需要的环境
|
||
yum -y install apr apr-util ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make
|
||
3.配置
|
||
./configure --prefix=/opt/httpd 指定安装位置
|
||
4.编译
|
||
make
|
||
5.安装
|
||
make install
|
||
```
|
||
|
||
###### apache编译安装
|
||
|
||
1.获取源码包,可以从官网获取;也可以从资源库获取 httpd.apache.org
|
||
|
||
|
||
2.准备编译安装所需要的环境
|
||
|
||
yum -y install openssl-devel pcre-devel expat-devel libtool gcc gcc-c++ wget make
|
||
|
||
apr 和 apr-util 放到指定位置 httpd源码包解压后的目录下的srclib,并且需要改名 apr apr-util
|
||
|
||
https://apr.apache.org/download.cgi
|
||
|
||
3.配置 (进入到解压目录下 在进行配置)
|
||
|
||
./configure --prefix=/opt/apache
|
||
|
||
4.编译
|
||
|
||
make
|
||
|
||
5.安装
|
||
|
||
make install
|
||
|
||
运行:进入到安装目录下的bin目录 执行 ./httpd 看到80端口,就可以用浏览器访问测试
|
||
|
||
------
|
||
|
||
love
|
||
|
||
获取项目源码包:wget http://10.9.12.206:30120/directlink/1/safeware/love.zip
|
||
安装解压工具:yum -y install unzip
|
||
解压源码包:unzip love.zip
|
||
拷贝源码到网站发布目录下:cp -r love/* /opt/nginx/html/
|
||
|
||
启动nginx : /opt/nginx/sbin/nginx 执行的是安装目录下的sbin目录下nginx的文件
|
||
关闭nginx: killall -9 nginx
|
||
|
||
访问之前关闭防火墙和selinux
|
||
systemctl stop firewalld
|
||
systemctl disable firewalld
|
||
setenforce 0
|
||
vim /etc/sysconfig/selinux.conf SELINUX=disabled
|
||
|
||
------
|
||
|
||
### (第十一章:网络协议)
|
||
|
||
#### OSI七层模型及各自特点
|
||
|
||
应用层:HTTP HTTPS
|
||
|
||
表示层:数据的模式,数据的加密解密等
|
||
|
||
会话层:建立删除维护会话
|
||
|
||
传输层:数据传输 (TCP UDP)
|
||
|
||
网络层:路由和选路
|
||
|
||
数据链路层:源MAC地址
|
||
|
||
物理层:约定接口类型,传输速度,线缆针脚 数据----比特流(0、1)发送出去
|
||
|
||
------
|
||
|
||
#### TCP/IPV4的四层/五层模型
|
||
|
||
TCP/IPV4 4层模型:
|
||
|
||
应用层(应用层+表示层+会话层)
|
||
|
||
传输层
|
||
|
||
网络层
|
||
|
||
网络接口层(物理层+数据链路层)
|
||
|
||
TCP/IPV4 5层模型:
|
||
|
||
应用层(应用层+表示层+会话层)
|
||
|
||
传输层
|
||
|
||
网络层
|
||
|
||
网络接口层
|
||
|
||
物理层
|
||
|
||
数据链路层
|
||
|
||
------
|
||
|
||
#### 数据封装和解封装的流程
|
||
|
||
封装:发送数据的过程
|
||
|
||
解封装:接受数据的过程
|
||
|
||
应用层产生一个数据,向外发送一个请求百度的指令(DATA→(加一个tcp)TCP+DATA→形成数据段→IP+TCP+DATA(IP地址包含源ip地址和目的ip地址)→形成数据包→帧头+IP+TCP+DATA+帧尾(帧头里有源MAC和目的MAC{通过ARP获取})→形成数帧(数据链路层对数据包进一步封装帧头和帧尾,形成数据帧)→
|
||
|
||

|
||
|
||
------
|
||
|
||
#### 常见网络设备及作用(路由器+交换机)
|
||
|
||
交换机:交换机主要用于在局域网内部进行高效的分发和传输数据
|
||
|
||
路由器:路由器则主要解决不同网络之间的互联互通问题,并执行复杂的网络管理和安全策略
|
||
|
||
------
|
||
|
||
#### ARP协议的工作流程
|
||
|
||
发起方查找本地ARP缓存: 当主机A需要与主机B通信且只知道主机B的IP地址时,主机A首先会在自身的ARP缓存表中查找是否有主机B对应的MAC地址记录。
|
||
|
||
ARP缓存未命中: 如果主机A的ARP缓存表中没有找到主机B的MAC地址,主机A就需要通过发送ARP请求来获取。
|
||
|
||
发送ARP请求: 主机A构造一个ARP请求广播帧,这个帧中包含主机B的IP地址,并询问拥有这个IP地址的设备其MAC地址是什么。此ARP请求帧会在同一局域网内广播。
|
||
|
||
接收ARP请求: 局域网内的所有主机都会接收到ARP请求,但只有主机B的IP地址与请求中的IP地址相匹配时,才会做出响应。
|
||
|
||
发送ARP响应: 主机B接收到请求后,会构造一个ARP响应单播帧,其中包含主机B的IP地址和MAC地址,并将这个响应帧发送给主机A。
|
||
|
||
更新ARP缓存: 主机A收到主机B的ARP响应后,会提取主机B的MAC地址,并将主机B的IP地址与MAC地址的映射关系保存在本地的ARP缓存表中,以便后续直接使用MAC地址进行数据链路层的通信。
|
||
|
||
数据传输: 现在主机A知道了主机B的MAC地址,就可以将IP数据包封装在以主机B MAC地址为目的地址的帧中,然后通过数据链路层发送出去,实现了IP地址到MAC地址的转换,进而完成了数据的传输。
|
||
|
||
总之,ARP协议的作用就是在网络层的IP地址与数据链路层的MAC地址之间架起一座桥梁,使不同网络层面上的通信得以顺利进行
|
||
|
||
------
|
||
|
||
#### TCP、UDP协议各自的特点
|
||
|
||
TCP:传输控制协议: 面向连接的协议 传输可靠 重传机制
|
||
|
||
UDP:用户数据报协议 非面向连接的协议 传输不可靠 应用于直播 传输速度更快
|
||
|
||
------
|
||
|
||
#### TCP的三次握手
|
||
|
||
建立链接 TCP链接 3次握手
|
||
|
||
TCP报文中的指针,如果TCP报文被标注为ACK,该TCP的报文就是确认消息的报文
|
||
|
||
SYN:同步消息 建立连接时发送SYN
|
||
|
||
ACK:确认消息
|
||
|
||
FIN:断开链接的报文
|
||
|
||
客户端向服务器端发送了一个建立连接的请求[SYN报文] 服务器收到改报文后确认这个建立连接的报文,给客户端确认[ACK]并也发送同步消息报文[SYN]客户端收到后回复确认报文[ACK报文]至此TCP三次握手建立成功
|
||
|
||
第一步:客户端向服务器发送一个SYN(同步)信号,请求建立连接,并附带一个随机的序列号X。
|
||
|
||
第二步:服务器收到SYN后,回复一个SYN+ACK(同步+确认)信号,表示同意建立连接,同时也携带一个自己的随机序列号Y,并确认客户端的序列号(X+1)。
|
||
|
||
第三步:客户端收到服务器的SYN+ACK后,再次发送一个ACK(确认)信号,确认服务器的序列号(Y+1),至此,双方都确认了对方的意图和能力,连接建立成功。
|
||
|
||
三次握手确保了双方都能正确发送和接收数据,同时确定了数据传输的初始序号,为后续的稳定、可靠数据传输打下了基础。
|
||
------
|
||
|
||
#### TCP四次分手
|
||
|
||
1. **第一次挥手**:首先,主动关闭连接的一方(客户端)会发送一个FIN(Finish,结束)标志位为1的报文段给对方,表示自己已经没有数据要发送了。此时,客户端进入FIN-WAIT-1状态。
|
||
2. **第二次挥手**:服务器端接收到这个FIN报文段后,会回复一个ACK(Acknowledgement,确认)标志位为1的报文段,确认序号为收到的FIN报文段的序号加1,表示已经收到了客户端关闭连接的请求。然后服务器端进入CLOSE-WAIT状态,而客户端收到这个ACK后进入FIN-WAIT-2状态。
|
||
3. **第三次挥手**:当服务器端把所有缓存的数据发送完毕后(如果有),也会发送一个FIN标志位为1的报文段给客户端,通知客户端自己也准备好关闭连接了。这时服务器端进入LAST-ACK状态。
|
||
4. **第四次挥手**:客户端收到服务器端的FIN报文段后,同样会发送一个ACK报文段作为回应,确认序号为收到的FIN报文段的序号加1。然后客户端进入TIME-WAIT状态,等待一段时间确保服务器端接收到了这个ACK报文段。在这段时间过后,客户端才会真正关闭连接。而服务器端一旦收到客户端的确认,就立即进入CLOSED状态,完成连接的关闭。
|
||
|
||
整个过程中,客户端需要等待2MSL(Maximum Segment Lifetime,报文段最大生存时间)的时间才能确保完全关闭连接,这是为了防止最后一个ACK报文段在网络中丢失,从而保证TCP连接能够可靠地关闭。
|
||
|
||
------
|
||
|
||
#### 桥接和NAT模式特点
|
||
|
||
桥接模式特点:模拟真实网络环境,虚拟机如同物理机一样直接连接到物理网络,拥有独立IP地址,可与物理网络上的设备自由通信。
|
||
|
||
NAT模式特点:虚拟机通过主机的NAT服务共享主机的网络连接,虚拟机使用私有IP地址,外部网络只能通过主机间接访问虚拟机,虚拟机可以访问外部网络。
|
||
|
||
------
|
||
|
||
#### 配置网络(动静态转换)
|
||
|
||
**临时:**
|
||
|
||
ip a a dev 网卡名称 IP地址/子网掩码
|
||
ip address add
|
||
|
||
ip a d dev 网卡名称 IP地址/子网掩码
|
||
ip address delete
|
||
|
||
ifconfig 网卡名字:序号 IP地址/子网掩码
|
||
ipconfig 网卡名字 IP地址/子网掩码 [修改原有地址]
|
||
|
||
**永久:**
|
||
|
||
```
|
||
cat /etc/sysconfig/network-scripts/ifcfg-ens33
|
||
|
||
TYPE="Ethernet"
|
||
BOOTPROTO="dhcp"
|
||
NAME="ens33"
|
||
DEVICE="ens33"
|
||
ONBOOT="yes"
|
||
|
||
该配置采用了自动获取IP地址方式
|
||
|
||
操作系统网络设置为静态IP
|
||
|
||
cat /etc/sysconfig/network-scripts/ifcfg-eth0
|
||
TYPE="Ethernet"
|
||
BOOTPROTO="static"
|
||
NAME="eth0"
|
||
DEVICE="eth0"
|
||
ONBOOT="yes"
|
||
IPADDR=10.9.12.144
|
||
NETMASK=255.255.255.0
|
||
GATEWAY=10.9.12.1
|
||
DNS1=10.9.12.210
|
||
DNS2=8.8.8.8
|
||
|
||
|
||
systemctl restart network //重启网络让修改的配置文件生效(如果报错)
|
||
|
||
同一个IP只能被一个终端使用,如果两个终端用了同一个IP,但是网络不能正常使用
|
||
```
|
||
|
||
------
|
||
|
||
#### 路由
|
||
|
||
1.直连路由
|
||
2.静态路由
|
||
3.动态路由:路由协议自动获取路由信息(路由表) OSFP ISIS BGP RIP 路由协议
|
||
|
||
```
|
||
查看路由表:ip r
|
||
删除默认网关
|
||
[root@qfedu.com ~]# ip r d default
|
||
|
||
添加默认网关:
|
||
[root@qfedu.com ~]# ip r add default via 10.18.44.1 dev enp0s25
|
||
|
||
删除静态路由:
|
||
[root@qfedu.com ~]# ip r del 10.18.45.0/24
|
||
|
||
添加静态路由:
|
||
[root@qfedu.com ~]# ip r a 10.18.45.0/24 via 10.18.44.1 dev enp0s25
|
||
|
||
永久开启路由转发功能
|
||
vim /etc/sysctl.conf 来永久开启路由转发功能
|
||
添加:net.ipv4.ip_forward = 1
|
||
sysctl -p
|
||
|
||
永久禁用ping
|
||
vim /etc/sysctl.conf
|
||
添加:net.ipv4.icmp_echo_ignore_all=1
|
||
sysctl -p
|
||
```
|
||
|
||
------
|
||
|
||
### (第十二章:Linux服务管理)
|
||
|
||
###### 服务管理
|
||
|
||
[root@xingdian ~]# systemctl list-units
|
||
[root@xingdian ~]# systemctl list-unit-files
|
||
[root@xingdian ~]# systemctl start vsftpd //启动服务
|
||
[root@xingdian ~]# systemctl status vsftpd //查看服务状态
|
||
[root@xingdian ~]# systemctl status vsftpd -l //查看服务详细状态
|
||
[root@xingdian ~]# systemctl stop vsftpd //停止服务
|
||
[root@xingdian ~]# systemctl restart vsftpd //重启服务
|
||
[root@xingdian ~]# systemctl reload vsftpd //重新加载配置文件
|
||
[root@xingdian ~]# systemctl enable vsftpd // 做开机启动
|
||
[root@xingdian ~]# systemctl disable vsftpd //关闭开机启动
|
||
|
||
------
|
||
|
||
###### 故障排查思路
|
||
|
||
如果给httpd服务增加功能,修改配置文件,写错了参数
|
||
|
||
启动httpd systemctl restart httpd 报错 没有启动成功
|
||
|
||
systemctl status httpd -l 获取报错的原因
|
||
|
||
###### 时间服务器
|
||
|
||
实践服务(NTP)
|
||
|
||
服务器端:构建NTP服务,构建一个时间服务器
|
||
|
||
客户端:时间同步
|
||
|
||
时间服务器:
|
||
|
||
公共时间服务器:阿里、腾讯、百度等
|
||
私有时间服务器:ip地址
|
||
|
||
```
|
||
服务器端:
|
||
准备工作:
|
||
保证yum仓库(base epel),保证网络畅通(ping)
|
||
关闭防火墙和Selinux
|
||
systemctl stop firewalld
|
||
systemctl disable firewalld
|
||
setenforce 0
|
||
1.修改主机名:
|
||
[root@ntp-server ~]# hostnamectl set-hostname ntp-server(主机名)
|
||
2.时间服务器软件安装:
|
||
yum -y install ntp
|
||
3对该服务做相对应的配置(修改配置文件)
|
||
vi /etc/ntp.conf(全部删完)
|
||
restrict default nomodify
|
||
server 127.127.1.0
|
||
fudge 127.127.1.0 stratum 10
|
||
4.启动服务
|
||
systemctl start ntpd
|
||
客户端:
|
||
准备工作:
|
||
保证yum仓库(base epel),保证网络畅通(ping)
|
||
关闭防火墙和Selinux
|
||
systemctl stop firewalld
|
||
systemctl disable firewalld
|
||
setenforce 0
|
||
调用时间服务器
|
||
安装ntpdate命令:
|
||
yum -y install ntpdate
|
||
进行时间同步:
|
||
ntpdate 10.9.12.144(时间服务器IP)
|
||
|
||
私有的时间服务器 公共的时间服务器(ntp.aliyun.com)
|
||
```
|
||
|
||
------
|
||
|
||
注意:
|
||
|
||
[root@docker-server ~]# ntpdate 10.9.12.144
|
||
16 Apr 09:38:29 ntpdate[51174]: the NTP socket is in use, exiting
|
||
|
||
如果该服务器安装了时间服务器软件ntp并处于运行状态,该服务器不能使用ntpdate的命令进行时间同步
|
||
|
||
如果非要用该服务器做时间同步,非要执行ntpdate的命令;停止ntp服务后,再同步
|
||
|
||
------
|
||
|
||
###### 修改时区
|
||
|
||
使用timedatectl命令,可设定和修改时区信息,语法 timedatectl set-timezone 时区标识
|
||
|
||
------
|
||
|
||
###### 日志管理
|
||
|
||
日志分类:系统日志,进程日志,应用程序日志
|
||
|
||
记录日志的用处: 排错,追溯事件,统计流量,审计安全行为
|
||
rsyslog:只负责绝大部分日志记录,和系统操作有关,安全,认证,计划任务...
|
||
|
||
------
|
||
|
||
日志服务:rsyslog
|
||
|
||
var/log : 默认是系统用来存放日志的目录,默认情况下服务、系统的日志文件都在该目录下
|
||
|
||
/etc/rsyslog.conf : 日志服务的配置文件
|
||
|
||
/etc/rsyslog.d/ : 日志服务的子配置文件
|
||
|
||
```
|
||
重要日志服务
|
||
|
||
messages: 系统日志文件
|
||
secure: 认证 安全
|
||
cron: 计划任务的日志
|
||
yum.log: 记录yum相关日志(安装+卸载)
|
||
```
|
||
|
||
------
|
||
|
||
###### 日志级别
|
||
|
||
debug:最低的,一般不用
|
||
info:安装信息,警告信息,错误信息
|
||
notice:相当与提示
|
||
warn/warning:警告,错误
|
||
error/err:错误,严重错误
|
||
alert:告警,表示已经出现问题
|
||
emerg:恐慌级别
|
||
|
||
日志级别:级别越低,信息越多
|
||
------
|
||
|
||
###### 日志对象
|
||
|
||
auth, authpriv, cron, daemon, kern, lpr, mail, mark, news, security (same as auth), syslog, user,uucp and local0 through local7.
|
||
|
||
------
|
||
|
||
日志管理规则
|
||
|
||
日志对象.日志级别;日志对象.日志级别 /var/log/messages 日志文件的名字及存放位置
|
||
|
||
auth.error
|
||
auth.info
|
||
|
||
------
|
||
|
||
###### 自定义日志实验
|
||
|
||
```
|
||
以ssh服务为例 默认该服务的日志存放在/var/log/secure
|
||
|
||
把ssh这个服务所产生日志存放到/var/log/ssh.log (单独记录该服务产生的日志)
|
||
|
||
1.ssh服务,配置
|
||
|
||
ssh服务产生日志 ===== 日志对象(local0 - local7) local6
|
||
|
||
vim /etc/ssh/sshd_config
|
||
|
||
SyslogFacility AUTHPRIV ==> SyslogFacility local6
|
||
|
||
2.修改rsyslog 服务 配置 最终实现自定义日志
|
||
|
||
local6.* /var/log/ssh.log
|
||
|
||
3.重启服务
|
||
|
||
[root@ntp-server log]# systemctl restart sshd
|
||
|
||
[root@ntp-server log]# systemctl restart rsyslog
|
||
```
|
||
|
||
获取当前服务器中ssh登录失败的前3名
|
||
|
||
grep 'Fail' /var/log/secure |awk '{print $11}' |sort |uniq -c|sort -n -r |head -2
|
||
|
||
------
|
||
|
||
A:10.9.12.144 发送方
|
||
B:10.9.12.127 接收方
|
||
|
||
A服务器的ssh服务所产生的日志给B服务器
|
||
|
||
关闭所有服务器的防火墙和Selinux
|
||
|
||
1.A和B服务器开启UDP或者TCP传输数据的参数
|
||
|
||
2.在发送方设定日志规则
|
||
|
||
对象.级别 @10.9.12.127 (UDP)
|
||
|
||
对象.级别 @@10.9.12.127 (TCP)
|
||
|
||
3.重启日志服务,让修改的配置文件生效
|
||
|
||
systemctl restart rsyslog
|
||
|
||
4.验证 B /var/log/messages
|
||
|
||
------
|
||
|
||
###### 日志切割
|
||
|
||
对象:日志文件
|
||
作用:防止日志文件过大,避免无法打开会打开过慢 避免浪费磁盘资源,定期清理 旧的日志数据/文件
|
||
|
||
logrotate 依据 规则文件
|
||
|
||
/etc/logrotate.conf 规则配置文件(主配置) /etc/logrotate.d/自配置文件
|
||
|
||
|| 命令连接符 前一个命令如果执行成功,后面的命令不执行 前一个命令如果没有执行成功,后面的命令执行
|
||
|
||
------
|
||
|
||
###### 一次性计划任务
|
||
|
||
一次性计划任务:at
|
||
|
||
安装对应的软件:yum -y install at
|
||
|
||
systemctl start atd
|
||
|
||
时间:只能指定某一个时间点 1:00 5/1/2024 小时:分钟 月/日/年
|
||
|
||
案例:
|
||
|
||
在14:22分执行创建文件的命令
|
||
at 14:22 时间
|
||
>touch /opt/xingdian 任务==命令
|
||
>ctrl + d 结束计划任务的创建
|
||
|
||
at -l 查看计划任务 list
|
||
|
||
|
||
在明天上午9:00,执行删根的命令
|
||
at 9:00 4/19/2024
|
||
> rm -rf /
|
||
> ctrl + d
|
||
|
||
/var/spool/at/ 该目录里存放的是一次性计划任务
|
||
|
||
------
|
||
|
||
###### 循环计划任务
|
||
|
||
```
|
||
crontab -e 进入编写计划任务
|
||
crontab -l 查看计划任务
|
||
crontab -r 删除所有计划任务
|
||
|
||
分 时 日 月 周
|
||
0-59 0-23 1-31 1-12 0-6
|
||
|
||
0 2 * * * /usr/sbin/reboot
|
||
0 2 14 * * /usr/bin/systemctl restart sshd
|
||
0 2 14 2 * /usr/bin/rm -rf /*
|
||
0 2 * * 5 /usr/bin/touch /tmp/1.txt
|
||
*/5 * * * * /usr/bin/touch /tmp/1.txt
|
||
0 2 1,4,6 * * /mysql_back.sh
|
||
0 2 5-9 * * /mysql_back.sh
|
||
|
||
记得执行脚本时候给权限
|
||
|
||
当前日期 `date +%F
|
||
```
|
||
|
||
------
|
||
|
||
###### 文件服务器
|
||
|
||
```
|
||
服务端:
|
||
1.安装:yum -y install vsftpd
|
||
2.systemctl start vsftpd systemctl enable vsftpd
|
||
3.浏览器或者文件资源管理器访问测试
|
||
/etc/vsftpd/vsftpd.conf vsftpd的配置文件
|
||
/var/ftp 默认的对外共享目录,要共享的文件放到该目录下
|
||
/var/log/xferlog 用户的上传和下载都会被该文件记录
|
||
|
||
客户端:
|
||
yum -y install lftp
|
||
[root@ftp-client ~]# lftp 10.9.12.122(服务端IP地址)
|
||
```
|
||
|
||
get 下载文件
|
||
mirror 下载目录
|
||
|
||
------
|
||
|
||
#### 实验
|
||
|
||
###### 开启匿名用户上传功能
|
||
|
||
1.有一个目录,在对外的共享的目录下,而且该目录必须还得创建文件/目录权限 (默认的对外共享目录)
|
||
|
||
mkdir /var/ftp/data
|
||
|
||
chmod 777 /var/ftp/data/
|
||
|
||
2.修改配置文件实现上传的功能(vi /etc/vsftpd/vsftod.conf)
|
||
|
||
anon_upload_enable=YES
|
||
|
||
anon_mkdir_write_enable=YES
|
||
|
||
3.验证上传功能
|
||
|
||
lftp 10.9.12.122(服务端IP地址)
|
||
|
||
put +文件名(绝对路径) 上传的文件本地有
|
||
|
||
mirror -R 目录名 (绝对路径) 上传的目录本地有
|
||
|
||
------
|
||
|
||
###### 自定义匿名用户共享目录
|
||
|
||
1.创建对外共享目录
|
||
|
||
[root@ftp-server ~]# mkdir /opt/share
|
||
|
||
2.ftp指定该目录(修改配置文件)
|
||
|
||
anon_root=/opt/share
|
||
|
||
3.重启服务
|
||
|
||
systemctl restart vsftpd
|
||
|
||
4.验证 lftp
|
||
|
||
------
|
||
|
||
###### 启用FTP用户登录
|
||
|
||
(系统中的普通用户)
|
||
|
||
1.创建用户并设置密码
|
||
|
||
2.修改配置文件开启普通用户登录的功能
|
||
|
||
local_enable=YES
|
||
|
||
3.验证 [root@ftp-client ~]# lftp 10.9.12.122 -u cloud
|
||
|
||
普通用户登录FTP,FTP的服务器端来说,对外共享的目录默认是普通用户的家目录
|
||
|
||
------
|
||
|
||
###### 所用的普通用户使用同一个对外共享目录
|
||
|
||
local_root=
|
||
|
||
1.创建共享目录 [root@ftp-server ~]# mkdir /opt/qf2402
|
||
|
||
2.修改配置文件指定共享目录 local_root=/opt/qf2402
|
||
|
||
3.重启服务
|
||
|
||
4.验证(在共享目录下创建一个文件,方便验证)
|
||
|
||
###### 普通用户上传文件
|
||
|
||
------
|
||
|
||
1.在对外共享目录下创建一个目录,并设置777
|
||
|
||
[root@ftp-server ~]# mkdir /opt/qf2402/qf
|
||
[root@ftp-server ~]# chmod 777 /opt/qf2402/qf
|
||
|
||
2.修改配置文件,开启上传功能
|
||
|
||
anon_upload_enable=YES
|
||
anon_mkdir_write_enable=YES
|
||
|
||
3.重启服务
|
||
|
||
4.客户端就可以使用普通用户上传文件
|
||
|
||
------
|
||
|
||
###### 黑白名单
|
||
|
||
ftpusers (黑)
|
||
|
||
user_list(白)
|
||
|
||
userlist_deny=YES 用户不在 user_list 文件中 该用户可以访问FTP
|
||
|
||
userlist_deny=YES 用户在 user_list 文件中 该用户不可以访问FTP
|
||
|
||
userlist_deny=NO 用户在 user_list 文件中 该用户可以访问FTP
|
||
|
||
userlist_deny=NO 用户不在 user_list 文件中 该用户不可以访问FTP
|
||
|
||
userlist_deny=NO 用户在 user_list 文件中 例如:root用户,但是仍然不可以访问FTP ,root用户还在ftpusers中
|
||
|
||
------
|
||
|
||
###### FTP+yum 实现自制yum源
|
||
|
||
1.在FTP-Server安装FTP服务
|
||
|
||
安装并运行(开机自启--不强制)
|
||
|
||
2.采用匿名用户访问,对外共享目录/var/ftp ; 自定义的对外共享目录 在共享目录下创建一个目录,用来存放RPM包
|
||
|
||
目录创建:略
|
||
准备包:略 [包从镜像获取]
|
||
拷贝包:略 拷贝到对外共享目录下自己创建的目录
|
||
|
||
3.将该目录变成软件包目录
|
||
|
||
createrepo命令将存放rpm的包变成软件包目录
|
||
|
||
4.客户端调用 ftp://10.9.12.122 yum调用
|
||
|
||
/etc/yum.repos.d/centos.repo
|
||
|
||
[xingdiancloud]
|
||
name=xingdiancloud package
|
||
baseurl=ftp://10.9.12.122/centos7
|
||
enabled=1
|
||
|
||
------
|
||
|
||
###### NFS服务器
|
||
|
||
NFS 属于NAS存储的软件又是一个网络文件系统 Linux 和 Linux之间的共享
|
||
|
||
NFS 对外共享的是文件系统 客户端需要 挂载才能使用
|
||
|
||
Samba SMB协议 C/S架构/模型 资源共享和打印机服务 Linux和Linux Linux和Windows
|
||
|
||
------
|
||
|
||
实验:
|
||
|
||
两台服务器 NFS (C/S)
|
||
|
||
一台:NFS-server
|
||
一台:NFS-client
|
||
|
||
防火墙 SElinux关闭
|
||
网络畅通
|
||
yum仓库可用
|
||
分别修改主机名(hostnamectl )
|
||
|
||
服务器配置:
|
||
|
||
1.安装:nfs-utils
|
||
|
||
2.启动并开机启动
|
||
|
||
systemctl start nfs
|
||
systemctl enable nfs
|
||
|
||
3.创建对外共享目录
|
||
|
||
mkdir /opt/share-1
|
||
|
||
4.配置对外共享 /etc/exports
|
||
|
||
/opt/share-1 *(ro,sync,no_root_squash)
|
||
|
||
[root@nfs-server ~]# exportfs -rv
|
||
exporting *:/opt/share-1
|
||
[root@nfs-server ~]# systemctl restart nfs
|
||
|
||
共享给谁:
|
||
|
||
(ro,sync,no_root_squash) 共享给一个网段
|
||
|
||
/opt/share-2
|
||
|
||
10.9.0.0/24(ro,sync,no_root_squash) 共享给某一个人
|
||
|
||
/opt/share-1 *(ro,sync,no_root_squash) 共享给所有人
|
||
|
||
读写:
|
||
|
||
/opt/share-4 *(rw,sync,no_root_squash)
|
||
|
||
客户端配置:
|
||
|
||
1.保证系统支持网络文件系统NFS
|
||
|
||
yum -y install nfs-utils
|
||
|
||
2.使用NFS-server端对外共享的资源(挂载) 挂载点
|
||
|
||
mkdir /opt/nfs-1
|
||
|
||
临时挂载:mount
|
||
|
||
临时挂载:vi /etc/fstab
|
||
|
||
10.9.12.122:/opt/share-1 /opt/nfs-1 nfs
|
||
|
||
defaults 0 0
|
||
|
||
mount -a
|
||
|
||
验证:服务器端创建文件,客户端验证是否同步 属性只读 读写)
|
||
|
||
------
|
||
|
||
### (第十三章:WEB服务)
|
||
|
||
###### Apache
|
||
|
||
web服务器:nginx apache (H5)
|
||
中间层服务器:提供JAVA PHP Python 运行环境
|
||
数据库服务器:mysql 存储项目数据
|
||
|
||
web服务器: 接受来自用户的请求 根据用户的请求做出响应
|
||
|
||
客户端 服务器 http 超文本传输协议 明文 https 加密的超文本传输协议 密文
|
||
|
||
URI:统一资源标识符
|
||
URL:统一资源定位符 定位到文件的地址:URL
|
||
|
||
```
|
||
apache 部署和使用 虚拟机(初始化) 云服务器(安全组)
|
||
|
||
1.部署
|
||
yum -y install httpd (httpd-tools httpd-devel)
|
||
2.使用
|
||
systemctl start httpd
|
||
systemctl enable httpd
|
||
3.目录和文件
|
||
/var/www/html apache自带默认网站发布目录 项目源码 自定义网站发布目录
|
||
/etc/httpd/conf/httpd.conf apache主配置文件
|
||
/etc/httpd/conf.d/ apache子配置文件目录
|
||
/var/log/httpd/ apache日志
|
||
/var/log/httpd/access_log 访问日志 /etc/httpd/logs//var/log/httpd/error_log错误日志存放在网站发布目下,index.html 默认主页
|
||
|
||
默认端口号 80
|
||
4.如何判断apache是否已经安装
|
||
rpm -qa | grep httpd
|
||
5.如何判断apache是否出运行状态
|
||
systemctl status httpd
|
||
ps aux | grep httpd 存在进程说明处于运行状态
|
||
lsof -i:80 判断80端口是否存在
|
||
6.apache是web服务器软件,所有的前端源码,都可以在apache上运行
|
||
7.网站服务器 对外共享文件资源
|
||
mkdir /var/www/html/download
|
||
touch /var/www/html/download/file{1..10}
|
||
8.命令测试服务器是否正常运行
|
||
curl IP地址/域名
|
||
elinks IP地址/域名 文本的形式
|
||
127.0.0.1 域名 localhost
|
||
9.apache主配置文件
|
||
Listen 80 监听端口
|
||
ServerRoot /etc/httpd/
|
||
DocumentRoot "/var/www/html" 网站发布目录
|
||
<Directory / > 设置目录的属性 Require all denied 拒绝 </Directort>
|
||
Require all granted 允许
|
||
ErrorLog "/etc/httpd/logs/error_log" 指定错误日志
|
||
IfModule log_config_module> 定义日志格式 </IfModule>
|
||
|
||
CustomLog"logs/access_log" combined 定义访问日志 存放位置及文件名 格式的名字
|
||
|
||
IncludeOptional conf.d/*.conf 加载子配置文件
|
||
|
||
```
|
||
|
||
Apache虚拟主机
|
||
|
||
可以实现一台服务器部署多个项目
|
||
|
||
基于端口
|
||
基于域名
|
||
基于IP地址
|
||
|
||
```
|
||
1.将项目上传到服务器
|
||
2.配置虚拟主机
|
||
[root@VM-0-5-centos conf.d]# cat a.conf b.conf c.conf
|
||
<VirtualHost *:81>
|
||
ServerName localhost
|
||
DocumentRoot /web-1
|
||
</VirtualHost>
|
||
<Directory /web-1>
|
||
AllowOverride all
|
||
Require all granted
|
||
</Directory>
|
||
--------------------------
|
||
<VirtualHost *:82>
|
||
ServerName localhost
|
||
DocumentRoot /web-2
|
||
</VirtualHost>
|
||
<Directory /web-2>
|
||
AllowOverride all
|
||
Require all granted
|
||
</Directory>
|
||
--------------------------
|
||
<VirtualHost *:83>
|
||
ServerName localhost
|
||
DocumentRoot /web-3
|
||
</VirtualHost>
|
||
<Directory /web-3>
|
||
AllowOverride all
|
||
Require allgranted
|
||
</Directory>
|
||
|
||
3.创建项目对应的网站发布目录
|
||
[root@VM-0-5-centos conf.d]# mkdir /web-1
|
||
[root@VM-0-5-centos conf.d]# mkdir /web-2
|
||
[root@VM-0-5-centos conf.d]# mkdir /web-3
|
||
4.将源码解压,拷贝到对应的网站发布目录下
|
||
略
|
||
6.添加对应端口的监听
|
||
Listen 81
|
||
Listen 82
|
||
Listen 83
|
||
5.重启服务
|
||
systemctl restart httpd
|
||
6.访问
|
||
IP+端口
|
||
```
|
||
|
||
------
|
||
|
||
###### 基于域名
|
||
|
||
```
|
||
1.安装
|
||
2.启动
|
||
3.配置
|
||
1.创建基于域名的虚拟机主机配置文件
|
||
注意:IP端口不变,域名改变 注意域名格式
|
||
命令:略 (参考基于端口)
|
||
2.创建网站发布目录
|
||
3.将源码包解压并将源码拷贝到对应的网站发布目录下
|
||
4.重启服务
|
||
5.做本地域名解析 域名解析到对应的IP地址
|
||
用谁访问,在谁身上做本地解析(用windows访问)
|
||
C:\Windows\System32\drivers\etc (编辑文件之前先修改权限)
|
||
IP地址 域名
|
||
```
|
||
|
||
|
||
|
||
------
|
||
|
||
###### LAMP架构
|
||
|
||
LAMP架构=linux+apache+mysql/mariadb+php
|
||
|
||
L:linux操作系统 linux操作系统 Centos 7
|
||
A:apache服务 Nginx服务 前端源码
|
||
M:数据库 mysql、mariadb 存放数据
|
||
P:php相关软件 后端源码
|
||
|
||
```
|
||
1.安装LAMP架构
|
||
yum -y install httpd mariadb mariadb-server php php-fpm php-mysql php-gd gd
|
||
2.启动LAMP架构
|
||
systemctl start httpd mariadb php-fpm
|
||
systemctl enable httpd mariadb php-fpm
|
||
3.对服务进行配置
|
||
apache:不做修改 网站发布目录采用默认/var/www/html 端口默认:80
|
||
|
||
mariadb:用默认的,但是需要准备一些东西 【库】 默认管理员用户(root)没有密码,为了安全设定一个密码
|
||
mysqladmin -u root password '123'
|
||
进入数据库:[root@wordpress ~]# mysql -u root -p123
|
||
创建库:MariaDB [(none)]> create database wordpress;
|
||
php:不做修改 采用默认配置
|
||
4.上传项目源码,并将该源码放到网站发布目录下
|
||
wget http://10.9.12.206:30120/directlink/1/safeware/wordpress-4.9.1-zh_CN.tar.gz
|
||
cp -r wordpress/* /var/www/html/
|
||
5.设置源码权限
|
||
chmod 777 /var/www/html/* -R
|
||
6.访问测试
|
||
```
|
||
|
||
------
|
||
|
||
###### 域名管理及解析
|
||
|
||
基于域名的虚拟主机
|
||
|
||
从子域名 二级域名开始绑定IP地址
|
||
顶级域:.com
|
||
主域名:xingdiancloud.com
|
||
子域名(二级域名):www.xingdiancloud.com 10.9.12.201
|
||
|
||
域名:
|
||
|
||
合法域名:必须绑定合法IP地址
|
||
|
||
非法域名:www.diandian.com 绑定非法ip 192.168.123.120
|
||
|
||
------
|
||
|
||
Linux Centos 对应的操作系统为例
|
||
|
||
/etc/hosts 本地解析文件
|
||
|
||
C盘:\Windows\System32\drivers\etc\hosts
|
||
|
||
2./etc/resolv.conf 或者 /etc/sysconfig/network-scripts/ifcfg-ens33 找指定的本地域名服务器
|
||
|
||
3.请求给根域服务器,按照域名的层次结构依次向下查询,直到查询到结果,将结果返回给客户端并在本地域名服务器保留副本,以便下次查询
|
||
|
||
权威服务器:该DNS服务器中存放的是真实的IP地址和域名的对应关系 具有权威性
|
||
非权威服务器:该DNS服务器中存放是缓存数据 不具有权威性
|
||
|
||
根域服务器 .
|
||
顶级域服务器 .com .cn .net .gov .us .edu ....
|
||
|
||
默认情况下,如果你的域名对应的IP地址所在服务器使用的是80端口或者443端口运行的项目,在域名没有备案的情况,无法访问
|
||
|
||
项目 ---> 域名 该域名必须要经过备案 而且备案完成后需要在网站主页添加备案信息
|
||
80 443
|
||
|
||
备案条件:域名 云服务器
|
||
|
||
------ |