JC/基础/一阶段.txt
2024-12-26 10:22:14 +08:00

3295 lines
81 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 第一章走进Linux
**Linux之父林纳斯.托瓦兹**
###### Linux发行版本
centos Ubuntu Linux Mint
###### 红帽认证
红帽认证是由红帽linux公司推出的主要包括红帽认证系统管理员RHCSA红帽认证工程师RHCE和红帽认证架构师RHCA。是以实际操作能力为基础的测试项目主要考察考生在实际操作系统中的实践能力。红帽培训和测试非常注重培养实际的动手实战能力
------
###### Linux操作系统
Linux操作系统企业中做服务器操作系统安全、高效、稳定等特性
Windows操作系统娱乐、办公、影音....
------
###### 创建虚拟机
cpu处理器 mem内存 disk磁盘 都是可以变化的 网络采用默认模式(桥接 网络地址转换 仅主机)
2.给虚拟机分配镜像
3.安装操作系统
时区:
Asia/Shanghai
安装方式:
最小化安装
图形化安装
磁盘分区:
磁盘20G
WindowsC盘 系统盘
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:x1001: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权限管理
###### 基本权限
UUser 用户 所有者
GGroup 组 所属组
OOther 其他人
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进程
-ppid
-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目录下扩容vg20G将sdb的数据迁移到sdc上。 扩容lv1到500Mlv2增加300M将sdb从卷组中删除然后格式化sdc要求成功。
```
# 创建逻辑卷lv1和lv2
lvcreate -L 100M -n lv1 myvg
lvcreate -L 200M -n lv2 myvg
# 格式化lv1为ext4lv2为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到500Mlv2增加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.0apr-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→加一个tcpTCP+DATA→形成数据段→IP+TCP+DATA(IP地址包含源ip地址和目的ip地址)→形成数据包→帧头+IP+TCP+DATA+帧尾帧头里有源MAC和目的MAC{通过ARP获取})→形成数帧(数据链路层对数据包进一步封装帧头和帧尾,形成数据帧)→
![image-20240416091911327](C:\Users\14653\AppData\Roaming\Typora\typora-user-images\image-20240416091911327.png)
------
#### 常见网络设备及作用(路由器+交换机)
交换机:交换机主要用于在局域网内部进行高效的分发和传输数据
路由器:路由器则主要解决不同网络之间的互联互通问题,并执行复杂的网络管理和安全策略
------
#### 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. **第一次挥手**首先主动关闭连接的一方客户端会发送一个FINFinish结束标志位为1的报文段给对方表示自己已经没有数据要发送了。此时客户端进入FIN-WAIT-1状态。
2. **第二次挥手**服务器端接收到这个FIN报文段后会回复一个ACKAcknowledgement确认标志位为1的报文段确认序号为收到的FIN报文段的序号加1表示已经收到了客户端关闭连接的请求。然后服务器端进入CLOSE-WAIT状态而客户端收到这个ACK后进入FIN-WAIT-2状态。
3. **第三次挥手**当服务器端把所有缓存的数据发送完毕后如果有也会发送一个FIN标志位为1的报文段给客户端通知客户端自己也准备好关闭连接了。这时服务器端进入LAST-ACK状态。
4. **第四次挥手**客户端收到服务器端的FIN报文段后同样会发送一个ACK报文段作为回应确认序号为收到的FIN报文段的序号加1。然后客户端进入TIME-WAIT状态等待一段时间确保服务器端接收到了这个ACK报文段。在这段时间过后客户端才会真正关闭连接。而服务器端一旦收到客户端的确认就立即进入CLOSED状态完成连接的关闭。
整个过程中客户端需要等待2MSLMaximum 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
------
A10.9.12.144 发送方
B10.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 小时:分钟 月/日/年
案例:
在1422分执行创建文件的命令
at 1422 时间
>touch /opt/xingdian 任务==命令
>ctrl + d 结束计划任务的创建
at -l 查看计划任务 list
在明天上午900,执行删根的命令
at 900 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
普通用户登录FTPFTP的服务器端来说对外共享的目录默认是普通用户的家目录
------
###### 所用的普通用户使用同一个对外共享目录
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
Llinux操作系统 linux操作系统 Centos 7
Aapache服务 Nginx服务 前端源码
M数据库 mysql、mariadb 存放数据
Pphp相关软件 后端源码
```
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
备案条件:域名 云服务器
------