Skip to content

LAMP和磁盘管理

java -jar  halo-1.14.jar

php


python  

运维要做的是,部署一个linux机器的环境,让程序去运行
lamp=====linux + apache + mysql +php
lnmp ==== linux + nginx + mysql + python

image-20240318152001499

此时你可以去登录阿里云了

阿里云也默认允许了22端口的请求

1.获取阿里云的公网ip
ssh root@39.105.179.202

部署LAMP架构

永久关闭selinux

1.喜欢关闭所有的防火墙,内置防火墙,linux的软件防火

1.关闭selinux,美国的航空安全局,开发的linux内置防火墙
查询selinux状态,基本只有centos8会多些selinux的策略,centos7不用

# 看到disbaled表示selinux是永久禁止的
[root@AlienCat ~]# getenforce 
Disabled

2.修改selinux的配置文件,永久禁止它开机自启
这是selinux配置信息
[root@AlienCat ~]# cat /etc/selinux/config 

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of three values:
#     targeted - Targeted processes are protected,
#     minimum - Modification of targeted policy. Only selected processes are protected. 
#     mls - Multi Level Security protection.
SELINUXTYPE=targeted


运行中
#     enforcing - SELinux security policy is enforced.
临时关闭中,下次开机还会启动
#     permissive - SELinux prints warnings instead of enforcing.
永久关闭了
#     disabled - No SELinux policy is loaded.

修改selinux状态,enforcing > permissive
setenforce 0

想永久关闭,还得修改配置文件,然后reboot
reboot

关闭内置的firewalld,以及清空iptables规则

[root@AlienCat ~]# iptables -F
[root@AlienCat ~]# 
[root@AlienCat ~]# systemctl stop firewalld

[root@AlienCat ~]# systemctl disable firewalld

用简易方式安装

  • rpm包
  • 配置阿里云yum源,yum下载即可
# 1.linux安装

# 2.安装apache
yum install httpd -y

# 3. 启动,和验证apache是否运行
[root@AlienCat ~]# systemctl start httpd
[root@AlienCat ~]# 
[root@AlienCat ~]# 
[root@AlienCat ~]# netstat -tnlp|grep httpd
tcp6       0      0 :::443                  :::*                    LISTEN      21301/httpd         
tcp6       0      0 :::80                   :::*                    LISTEN      21301/httpd         
[root@AlienCat ~]# 
[root@AlienCat ~]# 
[root@AlienCat ~]# curl -I 127.0.0.1:80

# 4.此时可以通过apache的公网ip,可以访问到这个服务器
查看公网ip的方式有俩
一、你可以去阿里云控台看
二、技巧如下,由于我们现实在2个公网中的机器,互相访问
[root@AlienCat ~]# curl ifconfig.me
39.105.179.202



# 5.此时你还得打开阿里云的安全组,允许80端口请求通过


# 6.安装数据库,mysql,默认的阿里云源,没有mysql,你可以去自己配置mysql的yum仓库


配置mylsq的源
从软件包的名字,可以分析它的作用
# mysql-config.rpm
# rpm -ivh mysql-config.rpm 
# mysql-server.rpm 
# mysql-client.rpm 

# 下载mysql仓库的配置文件rpm包
# 安装这个rpm包,只会生成一些配置文件
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

rpm -ivh mysql-community-release-el7-5.noarch.rpm

# 7.安装mysql即可
yum -y install mysql-community-server

如果是卸载,别卸载
yum remove mysql-community-server -y

# 8.先启动mysql
[root@AlienCat yum.repos.d]# systemctl restart mysqld



# 9.启动myqsl数据库,需要进行初始化设置,设置密码操作
# 初始化密码设置
mysql_secure_installation 

密码是songling123


# 10.用新密码登录数据库
mysql -uroot -p
密码songling123


# 11.此时需要安装后端语言了
yum install php -y


安装了php,默认会和apache结合工作,你试一试是否apapche可以加载php的代码即可
创建php的代码,index.php放入apache的网页目录下

[root@AlienCat html]# cat index.php 

<?php
phpinfo();
?>

在这个页面上,加一行字



你是后安装的php,想让httpd结合,还得重启httpd
systemctl restart httpd

练习题

要求通过yum部署,lamp,查看phpinfo页面。

报错解决思路

问题背景

1.张少辉这个机器,之前安装过mysql相关软件

2.删除mysql旧的依赖即可

基于lamp架构环境

有了这个环境,只需要准备各种php写的程序,即可运行了

比如国内主流的disucz论坛代码

1.下载该论坛源码
https://www.dismall.com/forum.php?mod=attachment&aid=MTA0fGZlYmVhN2ZlfDE2NDg3ODQ3ODV8MHw3Mw%3D%3D

2.上传到linux中

3.安装unzip命令
[root@boos-aliyun html]# yum install unzip -y


4.解压缩论坛源码,到apache的目录下,查看内容
[root@boos-aliyun html]# unzip -d /var/www/html/ ~/Discuz_X3.4_SC_UTF8_20220131.zip 

5.对该论坛源码进行权限修改
chmod -R 777 /var/www/html/ 

6.再次刷新网页,检查论坛的信息设置是否正确
发现缺少mysql的驱动
安装该驱动即可
yum install php-mysqli -y

告诉apache重启,apache,知道php的功能更新了
systemctl restart httpd

7.环境检查通过后,即可开始安装

8.最后安装完毕,确保论坛可访问,使用,发表新贴,以及它提供的插件,自己玩吧

综合练习

关于linux的软件安装

  • yum是简易版安装,所有的安装目录都是固定的,安装简单、易用,但是缺少定制化,在性能、自动化配置上不够靠谱
    • yum自动的安装软件到 /etc /var /usr 等路径,很可能与被人冲突,或者被yum remove卸载
    • 当你服务器批量管理的时候,你也无法批量操作,很容易出问题,比如,如下机器要批量安装lamp架构
    • 机器A
    • 机器B
    • 机器C,这台机器已经yum装过了mysql,必然会冲突出错。
    • 机器D

1.你先琢磨明白yum怎么用
第一个任务

用yum安装的lamp,discuz论坛,要搭建出来,截图让我看到你发的帖子,以及你的服务器截图
  • 因此当你选择源码编译安装,通过脚本对服务器批量化操作,如安装到/opt/自定义文件夹下,出错的几率必然很小很小(mkdir /my_software_dir)
    • 而且编译可扩展很多功能,都是yum无法比拟的
    • 因此掌握编译安装是一个重点

大练习

你领导给了你一个文档,让你看文档,通过编译的手段,安装LAMP架构,文档地址是

http://apecome.com:9494/03系统服务篇/3-10-黄金web架构之LAMP.html

友情提醒,工作里,同事、领导写的文档,可不会像老师这样详细,很少有注释,三言两句就完事,甚至你可能看不懂他写的什么,

你只能主动去问人家,把工作继续下去,这就看你为人处世的本事

目标

  • 参考文档,完成LAMP架构的编译安装
  • 部署出wordpress页面
  • 先自己试试看文档练习,完事老师再来讲,加深印象。

学习背景

学习目的,在搭建lamp架构的业务背景下,先用了yum搭建的形式,部署了disuz产品 从过程中理解yum如何安装软件,生成的配置文件路径,如何启动每一个进程,你应该整理清楚操作文档,下次拿着这个文档,可以很快的再部署出多套一样的环境。

有同学感慨,说这个搭建环境好难,的确,和之前的命令学习,比较零散的知识点,环境搭建,联系密切,知识点也紧凑。,就好比你在工地搬砖,前期先认识什么是水泥桶,什么是铁锹,什么是小推车,然后你就去盖房子吧

然后我们是尝试自己看文档,根据文档手册进行难度加大的源码编译安装,apache,mysql,php,每一个都是独立的软件,编译之间还有联系性,这就得你得查阅软件官方手册,对apache,php,mysql之间有什么联系,他们是如何联调的,安装顺序是什么,需要用到哪些系统的基础依赖。 你得单独的对php,apache,mysql都有一定的了解才行。 但是咱们本次练习目的在于动手实践,搞懂编译安装的流程,置于lamp之间的联系,我们放在web集群架构再去琢磨

然后下一步,就是学习磁盘管理,你想想为什么,你的wordpress搭建起来了,得存储用户文章数据吧,你机器上有几个硬盘,几个分区,容量够不够,磁盘满了怎么扩容,这是我们运维要解决的事,人家开发吧wordpress代码写好了,运维提供lamp环境运行代码,以及对系统资源管理,确保,磁盘够用,网络稳定,cpu,内存负载正常。 好了,这是要给大家表述的,关于运维工作的理解

编译部署LAMP环境(操作在这里)

1.准备一个,干净的,初始化刚装好系统的机器(它必然是缺少很多依赖的)

对于大家使用的阿里云,如果你之前yum装过很多东西,必然会给系统生成很多依赖软件
yum install装的软件是阿里云的版本,mysql 5.5,装的依赖,也是根据5.5运行环境而来的

编译安装 5.8 ,那底层的依赖,多少会有些冲突,需要你自己去解决了
看报错,看提示,去找解决办法


给大家的建议是,初学的时候,不用个自己踩太多坑,可以直接系统初始化,重装恢复环境
你再去编译安装,坑少一些
能尽快的吧环境搭建起来


是使用的vmware的进行快照恢复,回到了初始化的系统

2.基础软件运行环境准备,一般在系统刚装好的时候执行

因为最小化安装安装,缺少很多基础系统工具包,导致你编译安装或者运行软件时会报错。

1.一个新机器初始化的步骤如下

关于基础软件的配置

关于系统要安装的基础环境,如下,你都给先装上

大前提是,你的yum源配置好了吗?
建议用最新的阿里云yum源
[root@client-242 ~]# yum install wget -y
再去配置阿里云的yum源
https://developer.aliyun.com/mirror/?spm=a2c6h.25603864.0.0.3d974ccaV0zX40

配置yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

清空yum缓存
[root@client-242 yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base epel extras updates
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
Cleaning up list of fastest mirrors
[root@client-242 yum.repos.d]# 
[root@client-242 yum.repos.d]# rm -rf /var/cache/yum



# 注意,关闭selinux,关闭firewalld,这是俩大坑  404  403 目录数据无法读写
[root@client-242 yum.repos.d]# grep -i 'selinux='  /etc/selinux/config 
# SELINUX= can take one of these three values:
SELINUX=disabled

[root@client-242 yum.repos.d]# systemctl stop firewalld
[root@client-242 yum.repos.d]# 
[root@client-242 yum.repos.d]# systemctl disable firewalld


# 安装如下基础软件,就可以解决你后面编译脚本的,绝大多数错误问题了
# 安装如下基础软件,就可以解决你后面编译脚本的,绝大多数错误问题了
# 安装如下基础软件,就可以解决你后面编译脚本的,绝大多数错误问题了
# 安装如下基础软件,就可以解决你后面编译脚本的,绝大多数错误问题了


yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel net-tools vim -y

yum install cmake make pcre-devel ncurses-devel openssl-devel libcurl-devel -y

yum install libxml2-devel  libjpeg-devel libpng-devel freetype-devel  libcurl-devel wget -y

linux很多软件的运行,依赖于操作系统本身的一些软件支持
yum groupinstall "Development tools" -y

桌面开发工具包(图形化相关包)
yum groupinstall "Desktop Platform Development" -y 



确保你上面三个步骤,全部安装完毕了

如果下载太慢yum,,wget等太慢

1.尝试更换yum源,阿里云,163,sohu,清华源
2.尝试更换dns
3.更换网络环境(5G网、wifi、有线、使用代理下载,梯子,设置系统全局http_proxy就行了

4.如果下载太慢,几kb/s 没必要一直等着,可以ctrl + c 断掉重试,有时候网络不稳定,得重连

关于基础依赖的理解补充

比如关于压缩的报错

mysql.tar.gz 
是一个tar进行归档的归档文件,调用gzip命令压缩 
tar -zxvf mysql.tar.gz 解压缩的时候
前提是机器有tar命令  -x参数调用tar命令
而且得有gzip命令才能去解压缩gz后缀  -z参数调用gzip命令



解压缩xxx.tar.bz2
tar -xf  xxx.tar.bz2

报错了,提示找不到bzip2这个命令
解决办法是,安装bzip2这个命令
yum install bzip2-devel 

基本上,大家编译mysql,编译httpd都遇见了这个报错
报错是,系统中缺少openssl相关,以及curses相关。。请安装该工具包

【先装好工具包,再去编译安装】
yum install openssl-devel ncurses-devel

2. 开始编译mysql安装

1.mysql的安装规格说明

安装需求

软件版本	安装目录	数据目录	端口
mysql-5.6.31	/usr/local/mysql	/usr/local/mysql/data	3306


2. 创建mysql用户,用于给mysql的数据,进程,设置相关的user属主

㈠ 创建mysql用户
[lamp-server root ~]$useradd -r -s /sbin/nologin mysql
[lamp-server root ~]$
[lamp-server root ~]$
[lamp-server root ~]$id mysql
uid=998(mysql) gid=996(mysql) groups=996(mysql)


3.创建一个指定的源码目录,下载对应软件
cd /usr/local ; mkdir software-mysql;cd software-mysql
wget -c https://repo.huaweicloud.com/mysql/Downloads/MySQL-5.6/mysql-5.6.50.tar.gz

查看源码,解压缩
[lamp-server root /usr/local/software-mysql]$ls
mysql-5.6.50.tar.gz

解压缩,进入mysql源代码目录
[lamp-server root /usr/local/software-mysql]$tar -zxf mysql-5.6.50.tar.gz 

[lamp-server root /usr/local/software-mysql]$cd mysql-5.6.50
[lamp-server root /usr/local/software-mysql/mysql-5.6.50]$

发现mysql-5.6这个源码包,没有提供以前学过的configure配置脚本
却提供了另一种配置脚本,叫做cmake脚本
因此使用这种方式即可,需要安装cmake这个命令才行

4.进行编译配置,也就安装定制化的操作
创建编译脚本,注意是在mysql的源码目录下
[lamp-server root /usr/local/software-mysql/mysql-5.6.50]$
上述的写法是,多行转义为了一行的概念,等于是多行,拼接为了一行
[lamp-server root /usr/local/software-mysql/mysql-5.6.50]$cat cmake.sh 
cmake . \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DMYSQL_USER=mysql

# 关于报错信息如何看
这些关键字是编译器,程序里设置的关键字,代表着日志错误级别
error 严重及错误,程序是无法运行
warnging 警告,没那么太严重,不影响程序继续,但是你后续的使用,可能会有报错
info ,输出程序正常日志的

小故事
产品经理去挂一个牌子,写了warning..error
开发全掉进去了
运维躲过了

终端会打印日志,从下,网上翻,找关键字,比如error,比如 warning 


5.此时可以进行编译且安装了
make && make install 

最后一步 install才是生成数据文件夹的步骤


6.配置mysql的PATH变量即可
[lamp-server root ~]$tail -1 /etc/profile
export PATH=$PATH:/usr/local/mysql/bin/
想让他生效,还得重新登录,或者手动source读取该文件配置
[lamp-server root ~]$
[lamp-server root ~]$source /etc/profile
[lamp-server root ~]$
[lamp-server root ~]$
[lamp-server root ~]$
[lamp-server root ~]$echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin/

7.关于mysql的客户端登录命令
总结如下报错,原因是?mysql没启动

[lamp-server root ~]$mysql -uroot -p
Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

linux的软件启动后,可以有2种形式,提供客户端去访问
1. ip:port形式,如0.0.0.0:3306,网络连接方式
2  socket本地套接字文件形式, 本地进程套接字文件,启动mysql,提供它的本地连接进程文件,/tmp/mysql.sock,只要这个文件存在,级你的mysql是启动的

使用客户端命令
mysql -uroot -p


8.修改mysql的文件权限,属主,属组
[lamp-server root ~]$chown -R mysql:mysql /usr/local/mysql/
[lamp-server root ~]$
[lamp-server root ~]$
[lamp-server root ~]$ll /usr/local/mysql/
total 220
drwxr-xr-x  2 mysql mysql   4096 Apr  2 10:19 bin
drwxr-xr-x  3 mysql mysql     18 Apr  2 10:19 data
drwxr-xr-x  2 mysql mysql     55 Apr  2 10:19 docs
drwxr-xr-x  3 mysql mysql   4096 Apr  2 10:19 include
drwxr-xr-x  3 mysql mysql    291 Apr  2 10:19 lib
-rw-r--r--  1 mysql mysql 198041 Sep 23  2020 LICENSE
drwxr-xr-x  4 mysql mysql     30 Apr  2 10:19 man
drwxr-xr-x 10 mysql mysql   4096 Apr  2 10:19 mysql-test
-rw-r--r--  1 mysql mysql    587 Sep 23  2020 README
drwxr-xr-x  2 mysql mysql     30 Apr  2 10:19 scripts
drwxr-xr-x 28 mysql mysql   4096 Apr  2 10:19 share
drwxr-xr-x  4 mysql mysql   4096 Apr  2 10:19 sql-bench
drwxr-xr-x  2 mysql mysql    136 Apr  2 10:19 support-files

9.此时要对数据库初始化,生成必备的一些数据文件
mysql设置账号密码,得有一个库,数据表得存储吧

检查是否有旧的mysql数据文件残留
移除当前的mysql配置文件,/etc/my.cnf

mv /etc/my.cnf /etc/my.cnf.bak

使用初始化mysql数据命令操作
进入到mysql的安装目录,找到他的初始化数据,执行如下安装命令
[lamp-server root /usr/local/mysql]$pwd
/usr/local/mysql
[lamp-server root /usr/local/mysql]$./scripts/mysql_install_db --user=mysql



10.因为是编译安装,需要手动创建启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

此时使用service命令,会去读取/etc/init.d目录下的脚本文件,启动mysql

[lamp-server root /usr/local/mysql]$service mysql start
Starting MySQL.Logging to '/usr/local/mysql/data/lamp-server.err'.
 SUCCESS! 
[lamp-server root /usr/local/mysql]$
[lamp-server root /usr/local/mysql]$
[lamp-server root /usr/local/mysql]$service mysql status
 SUCCESS! MySQL running (41255)
[lamp-server root /usr/local/mysql]$
[lamp-server root /usr/local/mysql]$
[lamp-server root /usr/local/mysql]$netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      895/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1083/master         
tcp6       0      0 :::3306                 :::*                    LISTEN      41255/mysqld        
tcp6       0      0 :::22                   :::*                    LISTEN      895/sshd            
tcp6       0      0 ::1:25                  :::*                    LISTEN      1083/master   

11.此时可以修改mysql的密码,用如下命令,注意语法
# -u -p参数后面不得有空格,是直接跟上用户名或者密码的
# -p 不写密码的话,会让你交互式输入密码
# password 跟上你的新的mysql密码

/usr/local/mysql/bin/mysqladmin -uroot -p   password 'yuanlai0224'

为了不让别人看到你的密码,请清空历史记录
[lamp-server root /usr/local/mysql]$history -c
[lamp-server root /usr/local/mysql]$
[lamp-server root /usr/local/mysql]$history -w
[lamp-server root /usr/local/mysql]$


[lamp-server root /usr/local/mysql]$mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.50 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.6.50    |
+-----------+
1 row in set (0.00 sec)

mysql>

3.编译安装apache

1. 安装依赖包apr

下载源码,且解压缩,然后编译安装即可
wget -c http://archive.apache.org/dist/apr/apr-1.5.2.tar.bz2
[lamp-server root /usr/local/software-apache]$tar -xf apr-1.5.2.tar.bz2 
[lamp-server root /usr/local/software-apache]$
[lamp-server root /usr/local/software-apache]$ls
apr-1.5.2  apr-1.5.2.tar.bz2

要对apr软件进行编译配置,编译三部曲
以前都是指定
./configure 


可能由于其1.5.2的bug,存在一个配置错误,需要修改如下的一个配置参数
并且这里需要修改一个配置
修改此行
[root@lamp-241 apr-1.5.2]# vim configure
29605     RM='$RM -f'



# 然后进行编译且安装
make 


# 安装
make install

2.再编译安装一个apache必须的基础库apr-util

1.下载,解压,配置,编译,编译且安装
wget -c https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.bz2
tar -xf apr-util-1.5.4.tar.bz2 
cd apr-util-1.5.4



2.开始进行配置动作

./configure --with-apr=/usr/local/apr/bin/apr-1-config

3.编译
make

4. 安装
make install

5.此时apr和apr-util这俩工具,就生成了一些基础的linux文件,你需要告诉linux系统,多了一些这些工具,linux才能够读取到他们的信息,然后apache才能用

把编译安装的apr工具,写入系统的动态库配置文件中,然后更新这些基础动态库即可
[lamp-server root /usr/local/software-apache/apr-util-1.5.4]$echo "/usr/local/apr/lib/" >> /etc/ld.so.conf

执行ldconfig命令,让linux能找到你安装的这个apr即可
[lamp-server root /usr/local/software-apache/apr-util-1.5.4]$ldconfig

3.依赖完毕后,可以编译apache 了

编译三部曲
1.下载源码
[lamp-server root /usr/local/software-apache]$tar -xf httpd-2.4.37.tar.bz2 
[lamp-server root /usr/local/software-apache]$ll
total 8368
drwxr-xr-x 28 1000 1000    4096 Apr  2 11:17 apr-1.5.2
-rw-r--r--  1 root root  826885 Apr 29  2015 apr-1.5.2.tar.bz2
drwxr-xr-x 20 1000 1000    4096 Apr  2 11:21 apr-util-1.5.4
-rw-r--r--  1 root root  694427 Sep 20  2014 apr-util-1.5.4.tar.bz2
drwxr-sr-x 11 root   40    4096 Oct 18  2018 httpd-2.4.37
-rw-r--r--  1 root root 7031632 Oct 22  2018 httpd-2.4.37.tar.bz2
解压缩


2. 配置脚本,由于参数过多,写成sh文件
apache或者nginx都提供了模块的概念,所有的功能都是以模块,插件的形式提供的
如果你不装插件,就缺少某个功能

[lamp-server root /usr/local/software-apache/httpd-2.4.37]$cat config.sh 
./configure \
--enable-modules=all \
--enable-mods-shared=all \
--enable-so \
--enable-rewrite \
--with-pcre \
--enable-ssl \
--with-mpm=prefork \
--with-apr=/usr/local/apr/bin/apr-1-config \
--with-apr-util=/usr/local/apr/bin/apu-1-config




[lamp-server root /usr/local/software-apache/httpd-2.4.37]$chmod +x config.sh


3.执行该脚本,开始配置

[lamp-server root /usr/local/software-apache/httpd-2.4.37]$./config.sh





4. 编译且安装
先make命令

再make install命令


5.检查apache的安装路径
[lamp-server root /usr/local/software-apache/httpd-2.4.37]$ls /usr/local/apache2/
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  man  manual  modules
[lamp-server root /usr/local/software-apache/httpd-2.4.37]$ls /usr/local/apache2/bin
ab         apxs      dbmmanage  envvars-std  htcacheclean  htdigest  httpd      logresolve
apachectl  checkgid  envvars    fcgistarter  htdbm         htpasswd  httxt2dbm  rotatelogs


6.还得修改apache的配置文件,加载php的模块
找到conf文件夹apache的配置在这了
[lamp-server root /usr/local/apache2]$ls /usr/local/apache2/conf/
extra  httpd.conf  magic  mime.types  original

备注,这里忘记装php了(先去装php)

因此你是缺少php的模块的!!!

4.修改apache的主配置文件httpd.conf

主配置文件路径

[lamp-server root /usr/local/software-php/php-7.2.17]$vim /usr/local/apache2/conf/httpd.conf


1.修改apache配置文件,找到你的安装路径
配置语言支持
159 LoadModule negotiation_module modules/mod_negotiation.so 去掉这一行的注释
482 Include conf/extra/httpd-languages.conf 打开此选项,扩展配置文件就生效了

让apache支持php语言的插件,当有用户访问php程序时,apache自动转发给php程序去解析。
166 LoadModule php7_module        modules/libphp7.so   找到这一行,然后在下面添加语句

添加以下两行意思是以.php结尾的文件都认为是php程序文件,注意两句话的.php前面都是有一个空格的
也就是长这样
166 LoadModule php7_module        modules/libphp7.so
167 AddHandler php7-script .php
168 AddType text/html .php


添加一个默认的网站首页,添加为php的文件
263 #
264 # DirectoryIndex: sets the file that Apache will serve if a directory
265 # is requested.
266 #
267 <IfModule dir_module>
268     DirectoryIndex index.php index.html
269 </IfModule>
270

关于网站默认的首页html文件,存放的目录路径,由以下参数控制
230 # DocumentRoot: The directory out of which you will serve your
231 # documents. By default, all requests are taken from this directory, but
232 # symbolic links and aliases may be used to point to other locations.
233 #
234 DocumentRoot "/usr/local/apache2/htdocs"
235 <Directory "/usr/local/apache2/htdocs">

5.修改apache 的子配置文件,语言conf

[root@lamp-241 php-7.2.17]# vim /usr/local/apache2/conf/extra/httpd-languages.conf
 19 DefaultLanguage zh-CN

 75 # Just list the languages in decreasing order of preference. We have
 76 # more or less alphabetized them here. You probably want to change this.
 77 #
 78 LanguagePriority zh-CN en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv tr zh-CN zh-TW

6.启动apache即可

1.生成apache的执行命令
cp /usr/local/apache2/bin/apachectl /etc/init.d/apache

2.启动即可
service apache start

3.如果你要创建apache的systemctl管理脚本,可以用如下技巧

用另一台机器,yum install httpd 

查看yum给你生成的httpd.service脚本,然后模仿该脚本写法,修改你编译的http路径即可

7.查看apache是否支持php

打开phpinfo页面即可

[lamp-server root /usr/local/apache2/htdocs]$cat /usr/local/apache2/htdocs/index.php 
冲冲冲
<?php
    phpinfo();
?>

8.至此,lamp的linux环境就准备好了

4.编译安装php(注意,先装好php,再去修改apache配置文件)

想让昂apache,是别php,你得先装好php

wget -c https://museum.php.net/php7/php-7.2.17.tar.xz
[lamp-server root /usr/local/software-php]$tar -xf php-7.2.17.tar.xz 

[lamp-server root /usr/local/software-php]$cd php-7.2.17

配置编译过程
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysqli \
--with-pdo-mysql \
--with-zlib \
--with-curl \
--enable-zip \
--with-gd \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--enable-sockets \
--with-xmlrpc \
--enable-soap \
--enable-opcache \
--enable-mbstring \
--enable-mbregex \
--enable-pcntl \
--enable-shmop \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-calendar \
--enable-bcmath


配置结束后,开始编译、且安装
make  && make install

5.准备wordpress源码

放入apache的网页目录即可

开发给了你一个php的源码,你给放入到一个部署好的lamp机器上就好了

1.下载博客源码
wget -c https://cn.wordpress.org/wordpress-4.7.3-zh_CN.tar.gz

2.解压缩该源码,放入到httpd的网页根目录中去
[lamp-server root /opt/wordpress]$ls
wordpress  wordpress-4.7.3-zh_CN.tar.gz
[lamp-server root /opt/wordpress]$mv wordpress/* /usr/local/apache2/htdocs/

3.由于是静态文件做了更改,你不需要重启httpd,直接访问该网站即可
但是,注意,先看一下apache的启动进程,用户是谁

修改wordpress源码文件的属主、属组,防止权限有问题

[lamp-server root /opt/wordpress]$chown -R daemon.daemon /usr/local/apache2/htdocs/



4.此时可以去访问网站了

6.访问wordpress,查看博客安装

1.发现该博客需要写入数据库,wordpress,需要你先创建这个数据库
登录数据库,操作
[lamp-server root /opt/wordpress]$mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.6.50 Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> 


创建wordpress数据库
mysql> create database wordpress default charset utf8;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| wordpress          |
+--------------------+
5 rows in set (0.00 sec)

mysql>

用户访问 wenjie.top/index.php > lamp的linux服务器

apache(index.php) >

php (处理wordpress程序) >

mysql(用户数据,博客文章数据)

7.最后,确保看到如下结果即可

image-20240319104122308

磁盘管理

学习磁盘管理的背景

数据存储也是网站架构中的一大重点,关于存储方案,我们需要考虑到,硬件、软件

硬件角度

  • 存储的读写性能

    • 固态硬盘、机械磁盘的抉择
  • 存储的数据备份,数据安全性

    • raid磁盘阵列技术
  • 存储的数据扩容,合理的磁盘容量管理,磁盘满了怎么办

软件角度

  • 系统对存储的优化参数
  • 数据库类软件的优化参数

image-20220405221308649

存储管理背景

image-20220405222024572

实战目标

  • 使用fdisk命令管理磁盘分区
  • 格式化分区文件系统
  • 磁盘分区挂载(手动、开机启动、自动挂载)
  • 理解lvm原理
    • 物理卷、卷组、逻辑卷
    • 创建物理卷
    • 创建卷组
    • 创建逻辑卷
  • 熟练掌握lvm的命令。

硬盘是什么

硬盘是什么
硬盘就是计算机中用来存储、持久化存储数据的一个设备。
市面主流的硬盘有两类、机械硬盘、固态硬盘,以不同的接口,区分个人硬盘,服务器级别硬盘

区别于内存、硬盘中的数据,关机后,一直存在。
硬盘也被称为磁盘,因为硬盘存储数据和电磁有关,机械硬盘里有很多张磁盘。

硬盘分区要学什么

https://www.diskgenius.cn/

使用U盘实践、查看分区类型

  • 分区
  • 格式化文件系统
  • 挂载

数据写入流程

image-20220406100118037

磁盘知识名词

...磁盘名词(记忆)

l 磁头(head)数:每个盘片一般有上下两面,分别对应1个磁头,共2个磁头;

l 磁道(track)数:磁道是从盘片外圈往内圈编号0磁道,1磁道...,靠近主轴的同心圆用于停靠磁头,不存储数据;

l 柱面(cylinder)数:同磁道数量;

l 扇区(sector)数:每个磁道都别切分成很多扇形区域,每道的扇区数量相同,扇区大小是0.5KB是512字节,文件存储在硬盘中,最小存储单位就是扇区。

l 磁头读取扇区数据,是读取连续的多个扇区,称之为block(块)

l 圆盘(platter)数:就是盘片的数量。

mbr类型分区

image-20240319111621566

GPT类型分区

image-20240319111842183

linux磁盘命名规则(重要)

image-20220406104522678

bash
#用ls  /dev/看看磁盘文件

ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2
/dev/sdb
/dev/sdc

fdisk命令分区实践

bash
#1.给虚拟机,添加硬盘(去京东购买一个新硬盘)

#2.查看当前有哪些分区表的信息
lsblk

ls /dev/sd*

fdisk -l

fdisk命令实践(mbr)

任务:将sdb硬盘分区(20G)

  • 1个主分区 (2G)
  • 1个扩展分区 (剩下的全给他) 18G
  • 2个逻辑分区
    • 逻辑分区1,10G
    • 逻辑分区2,剩下的都给他 8G
1.fdisk /dev/sdb

2.使用指令,去分区实战

3.最终看到的分区应该是
/dev/sdb   /dev/sdb1  /dev/sdb2   /dev/sdb5  /dev/sdb6

image-20220406110941056

lsblk命令

[yuchao-linux01 root ~]$lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0    1K  0 part 
├─sdb5            8:21   0   10G  0 part 
└─sdb6            8:22   0    8G  0 part 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom

partx刷新分区

当你fdisk分区玩了之后,看不到分区的信息,是因为linux内核,还未更新分区表
得使用命令,重新读取磁盘的分区
[yuchao-linux01 root ~]$partx /dev/sdb
NR    START      END  SECTORS SIZE NAME UUID
 1     2048  4196351  4194304   2G      
 2  4196352 41943039 37746688  18G      
 5  4198400 25169919 20971520  10G      
 6 25171968 41943039 16771072   8G      
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
├─sdb1            8:17   0    2G  0 part 
├─sdb2            8:18   0    1K  0 part 
├─sdb5            8:21   0   10G  0 part 
└─sdb6            8:22   0    8G  0 part 
sdc               8:32   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  
[yuchao-linux01 root ~]$

查看磁盘的分区表类型

[yuchao-linux01 root ~]$fdisk -l /dev/sdb

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos   # 看到dos就是mbr类型
Disk identifier: 0xa07c9f25

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     4196351     2097152   83  Linux
/dev/sdb2         4196352    41943039    18873344    5  Extended
/dev/sdb5         4198400    25169919    10485760   83  Linux
/dev/sdb6        25171968    41943039     8385536   83  Linux
[yuchao-linux01 root ~]$

课间练习,创建新硬盘(mbr)

按照如下要求,进行分区为mbr类型

任务:将sdb硬盘分区(20G)

- 1个主分区  (2G)
- 1个扩展分区 (剩下的全给他) 18G
- 2个逻辑分区
  - 逻辑分区1,10G
  - 逻辑分区2,剩下的都给他  8G

待会再分为gpt类型,最后再去格式化文件系统操作

给硬盘分区为GPT类型(GUID类型)

删除/dev/sdb分区的信息

fdisk /dev/sdb
使用d指令,删除原有所有的mbr分区表下的分区信息

parted命令

是使用parted命令,可以修改硬盘的分区表类型

ms-doc  这是mbr类型的名字
gpt 这是GUID分区表的类型名字


parted /dev/sdb 
修改当前硬盘的分区表类型,改为gpt,注意如下操作会摧毁原有的数据
(parted) mklabel gpt  
使用print指令,查看分区表信息,以及分区表类型
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags

(parted)

因为parted没有太多交互式的提醒,不用它进行分区了,换为gdisk命令去操作超过2TB的硬盘分区动作。

gdisk命令

1.需要额外安装操作
yum install gdisk -y

image-20240526200841674

gdisk命令用起来和fdisk一样简单,通过n指令,创建分区,p指令查看分区,且输入w才可以写入分区,永久生效

文件系统类型

image-20220406123659017

mkfs格式化文件系统

使用mkfs命令可以进行分区,文件系统格式化

1.把机器上的/dev/sdc硬盘,重新分区一个单个分区,是20G
fdisk /dev/sdc

2.给这个分区,分别格式化xfs文件系统
[yuchao-linux01 root ~]$mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1              isize=512    agcount=4, agsize=1310656 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=5242624, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0


3.挂载一个目录,到这个分区,即可使用该分区,存储数据了
[yuchao-linux01 root ~]$mount /dev/sdc1 /opt/my_sdc/
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mount -l |grep sdc1
/dev/sdc1 on /opt/my_sdc type xfs (rw,relatime,attr2,inode64,noquota)
[yuchao-linux01 root ~]$


4.查看挂载情况
mount -l


5.设置永久挂载
上述的mount挂载命令是临时生效,需要开机就让系统自动挂载,方可实现,永久生效
编辑 /etc/fstab文件即可
[yuchao-linux01 root /opt]$tail -1 /etc/fstab 
/dev/sdc1 /opt/my_sdc xfs defaults 0 0 


6.重启机器,查看是否开机就能自动挂载,读取到/dev/sdc1磁盘的数据
再次使用mount -l |grep sdc 查看磁盘的挂载情况

以及去访问挂载点,是否能读到分区的数据即可

[yuchao-linux01 root ~]$mount -l |grep sdc
/dev/sdc1 on /opt/my_sdc type xfs (rw,relatime,attr2,inode64,noquota)
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$ls /opt/my_sdc/
准备下课,辛苦了兄弟们

保留问题

关于分区删除后,文件系统依然存在的问题

mount挂载分区

1.mount挂载命令
mount 设备名  挂载点
[yuchao-linux01 root /opt/my_sdc]$mount /dev/sdc1 /opt/my_sdc/


2.挂载的参数,设置(rw)是可读可写的



3.取消挂载,注意,该挂载点,无人使用,才可以取消挂载
umount 挂载点

后续磁盘内容

  • raid
  • lvm

mount挂载实践

mount -l 显示挂载情况
mount -a 读取/etc/fstab所有的挂载设置
mount -o 练习,读写,只读,允许二进制执行的三个参数

[yuchao-linux01 root ~]$mount -o ro /dev/sdc /test1
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mount -l |grep test1
/dev/sdc on /test1 type ext4 (ro,relatime,data=ordered)
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$cat /test1/冲冲冲 
123
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$echo "456" >> /test1/冲冲冲 
-bash: /test1/冲冲冲: Read-only file system

读写
mount 挂载默认参数,即是rw读写

# 不允许执行程序
noexec 
[yuchao-linux01 root ~]$mount -o noexec,rw /dev/sdc /test1
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mount -l |grep text1
[yuchao-linux01 root ~]$mount -l |grep test1
/dev/sdc on /test1 type ext4 (rw,noexec,relatime,data=ordered)
[yuchao-linux01 root ~]$


[yuchao-linux01 root /test1]$./hello.sh
-bash: ./hello.sh: Permission denied
[yuchao-linux01 root /test1]$

退出光盘的命令

Eject弹出设备命令
eject # 弹出光驱

eject -r /dev/sr0 # 指定设备弹出

[yuchao-linux-242 root ~]#eject

inode、block、硬链接

文件属性查看

image-20220406190552608


image-20220407105623609

什么是inode

linux的文件名,其实是分为了【元数据】+【文件内容】,两部分。

image-20220407105808649

元数据,也就是文件的属性信息,可以通过stat命令查看到

一个新的磁盘,格式化文件系统后,就有了2个存储空间,一个叫做
inode存储空间,存储设备上,所有文件名,对应的元数据信息(文件的属性信息)
一个叫做block存储空间(存储设备上,所有的文件的内容,数据都在这)

存储元数据信息的空间,被称之为Inode

存储文件数据的空间,被称之为block


linux读取文件内容,其实是 以  文件名 > inode编号 > block 的顺序来读取


在你创建文件前必须先要分区、格式化(创建文件系统)
创建文件系统后inode和block的数量就会固定下来。
mkfs.xfs /dev/sdc 格式化xfs文件系统后,inode和block的数量就固定下来了
可以通过xfs_info查看


每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
[yuchao-linux01 root /test1]$ls -l -i  /tmp/c* 
16777294 -rw-r--r-- 1 root root 0 Apr  7 11:01 /tmp/c1
16777702 -rw-r--r-- 1 root root 0 Apr  7 11:01 /tmp/c2

通过ls -i参数,查看文件,文件夹的inode号码
/opt/t1.log
/opt/t2.log 



这里值得重复一遍,Unix/Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。

表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。

使用如下命令,查看文件的inode号

[yuchao-linux01 root /opt]$ls -i 5G.txt
50391778 5G.txt

为什么linux要设计inode

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

文件数据都储存在"块"中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

image-20220407110454071

inode存储的内容

* 文件的字节数

* 文件拥有者的User ID

* 文件的Group ID

* 文件的读、写、执行权限

* 文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。

* 链接数,即有多少文件名指向这个inode

* 文件数据block的位置

可以用stat命令,查看某个文件的具体inode信息

[yuchao-linux01 root /opt]$stat t1.log
  File: ‘t1.log’
  Size: 4         	Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d	Inode: 50391810    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2022-04-06 19:15:09.577496171 +0800
Modify: 2022-04-06 19:15:09.577496171 +0800
Change: 2022-04-06 19:15:09.577496171 +0800
 Birth: -

image-20220407110637912

图解文件访问原理

image-20220406200031320

image-20220407110929428

文件夹和文件的关系

image-20220406200311447

目录是一个特殊的文件,目录保存的是当前目录下的文件名字
简单说,文件夹就是方便人类记忆文件存在哪、然后通过这个文件名吗,找到对应的文件inode号
inode号里记录了文件数据所处的block位置,最终访问到数据

image-20220407111057489

什么是block

block是linux实际存储数据的空间,是8个连续的扇区,(8*512bytes=4KB)
单个大文件需要用多个block来存储
特别小的文件即使不满足4KB,也只能浪费其空间。

1 block =4kb

删除文件原理

image-20220406202808293


image-20220407111503987

软连接、硬链接

软连接就是windows下的快捷方式

软连接文件存储的是源文件的路径。

创建软连接 ln -s参数去创建软连接

当你访问软连接文件,其实是

访问到源文件的路径,源文件的文件名

访问源文件的inode编号  ls -i filename

inode找到block,访问到数据

image-20220406203543404

软连接特点
1.软连接文件的inode号和源文件不同,作用是存储源文件的路径
2.命令ln -s创建
3.删除普通软连接,不影响源文件
4.删除源文件,软连接找不到目标,报错提示。

image-20220407113104484

硬链接

硬链接,就是一个数据(block)被多个相同inode号的文件指向。

就好比超市有好多个大门,但是都能进入到这个超市。。。

  • 注意,大坑,硬链接,不得跨分区设置(inode号,是基于分区来创建)

image-20220407114057385


image-20220407114149720

创建语法
ln 源文件 目标文件

创建硬链接
[yuchao-linux01 root /opt]$ls -l  /yuchao.log
-rw-r--r-- 1 root root 0 Apr  6 20:24 /yuchao.log
[yuchao-linux01 root /opt]$
[yuchao-linux01 root /opt]$ln /yuchao.log /tmp/c1
[yuchao-linux01 root /opt]$ln /yuchao.log /tmp/c2
[yuchao-linux01 root /opt]$
[yuchao-linux01 root /opt]$ls -l  /yuchao.log
-rw-r--r-- 3 root root 0 Apr  6 20:24 /yuchao.log

检查多个硬链接的inode号,都是同一个,表示是指向同一个区域的数据
[yuchao-linux01 root /opt]$ls -i /yuchao.log
71295 /yuchao.log
[yuchao-linux01 root /opt]$ls -i /tmp/c1
71295 /tmp/c1
[yuchao-linux01 root /opt]$ls -i /tmp/c2
71295 /tmp/c2

image-20220406204831924

硬链接特点
1.可以对已存在的文件做硬链接,该文件的硬链接数,至少是1,为0就表示文件不存在
2.硬链接的文件,inode相同,属性一致
3.只能在同一个磁盘分区下,同一个文件系统下创建硬链接
4.不能对文件夹创建硬链接,只有文件可以
5.删除一个硬链接,不影响其他相同inode号的文件
6.文件夹的硬链接,默认是2个,以及是2+(第一层子目录总数)=文件夹的硬链接数量
7.可以用任意一个硬链接作为入口,操作文件(修改的其实是block中的数据)
8.当文件的硬链接数为0时,文件真的被删除

文件夹的硬连接

文件夹是一个特殊的文件,默认的连接数就是2

由于文件夹中存在两个特殊子目录,一个是
. 当前目录,表示其本身
.. 上级目录,也能通过它,找到当前目录

因此硬连接数是2

如果修改文件的硬链接数,要在它,第一层文件夹中,创建子文件夹,即可增加硬链接数量

工作里咋用

1.一般会给文件夹添加软连接,便于管理
2.通过软连接来区分软件的多种版本
3.通过inode号彻底删除文件,和硬连接关联的

练习题

1.创建文件夹的软连接
2.创建文件的软连接
3.删除文件、目录的软连接,查看效果
4.删除文件、目录的源文件,查看效果
5.往源文件写入数据,查看软连接文件的变化
6.往软连接里写数据,查看源文件的变化

查看分区的inode和block数量(xfs_info)

inode和block的数量,是在你mkfs创建文件系统的时候,就已经确定好了

ext4的文件系统,查看文件系统信息的命令,dumpe2fs

xfs文件系统,查看文件系统信息的命令,xfs_info

image-20220406210819579

\

查看某分区,有多少block让你用,(查看这个磁盘,分区还有多少容量)

df -h  # -h参数,是友好的显示容量单位,如kb ,mb,gb

查看某分区,一共有多少inode容量编号给我们用

如/dev/sdc1


[yuchao-linux01 root /opt]$df -i
Filesystem                Inodes  IUsed    IFree IUse% Mounted on
/dev/mapper/centos-root  8910848 129697  8781151    2% /
devtmpfs                  995986    426   995560    1% /dev
tmpfs                     999042      1   999041    1% /dev/shm
tmpfs                     999042   1317   997725    1% /run
tmpfs                     999042     16   999026    1% /sys/fs/cgroup
/dev/sda1                 524288    327   523961    1% /boot
tmpfs                     999042      1   999041    1% /run/user/0
/dev/sdc1               10485248      3 10485245    1% /opt/my_sdc

image-20220407121819394

inode的作用

df -h
查看磁盘block空间的使用情况,如果看到分区快满了,可以去删除大容量的文件


df -i 
inode存储文件属性的
当你机器上有大量的无用的小文件,空文件,白白消耗inode数量

查看磁盘分区inode空间的使用情况,如果可用的不多的,删除大量的4kb小文件即可,因为它们真用了太多的无效inode编号,应该留给别人用。

明明 df -h看到磁盘还是有空间,但是写入数据,系统提示你
no space for disk,你虽然还有block空间可以存数据
但是你的inode数量肯定是没了

touch 创建新文件,想分配inode编号,发现不够用了

raid磁盘阵列是什么

生产环境下的raid选择

raid 0

raid 1

raid 1 + raid 0 = raid 10

可能用,只会是硬件的磁盘阵列卡

可能不用,现在的存储技术,都发展到了分布式该年,比如主流的共有云服务器,都不用raid技术了,即使人家用了,基本你也完全管不着

只有当你需要拿到一堆服务器,进行服务器从零初始化
对磁盘,做raid技术,4块硬盘,将其采用raid技术搭建
只能是用硬件的raid卡

只能用linux软raid技术,查看它的效果



物理服务器、使用物理raid卡来实现

云服务器、完全不用关心raid搭建,云厂商会给你提供靠谱的高性能、高安全性的磁盘底层技术。

于超老师问过阿里云的技术客服,他们已经不用raid了,而是用2种方式

现在的磁盘,读写速度都很快,阿里的云盘,可以不考虑这些
1.本地高性能硬盘,nvme技术
如https://search.jd.com/Search?keyword=nvme&enc=utf-8



2.分布式存储技术,具体看阿里云文档
https://help.aliyun.com/document_detail/25383.html?source=5176.11533457&userCode=r3yteowb&type=copy

raid级别与特性

硬raid、软raid选择

  • 硬件购买硬件raid卡即可
  • 软件raid,没人用,知道即可,可以用于感受raid方案的效果

实战,体验raid10 的玩法

1.准备4块硬盘,切记,是新的四块硬盘,没有任何分区的,你可以用parted命令清除原有的分区

[yuchao-linux01 root ~]$lsblk 
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk 
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part 
  ├─centos-root 253:0    0   17G  0 lvm  /
  └─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sdb               8:16   0   20G  0 disk 
sdc               8:32   0   20G  0 disk 
sdd               8:48   0   20G  0 disk 
sde               8:64   0   20G  0 disk 
sr0              11:0    1  4.2G  0 rom  


2.安装raid命令,创建raid10
yum install mdadm -y
 
3.通过命令,吧这4个硬盘,创建为raid 10 组即可
创建raid10这个硬盘组,这个硬盘组的名字 /dev/md0

mdadm -Cv /dev/md0  -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde

4.此时正确情况下,你的机器就生成了 md0硬盘设备
[yuchao-linux01 root ~]$fdisk -l /dev/md0

Disk /dev/md0: 42.9 GB, 42914021376 bytes, 83816448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 524288 bytes / 1048576 bytes

5.格式化文件系统可以用了
[yuchao-linux01 root ~]$mkfs.xfs /dev/md0
[yuchao-linux01 root ~]$mount /dev/md0 /md0_disk/
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  6.1G   11G  36% /
devtmpfs                 3.8G     0  3.8G   0% /dev
tmpfs                    3.9G     0  3.9G   0% /dev/shm
tmpfs                    3.9G   12M  3.8G   1% /run
tmpfs                    3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M  14% /boot
tmpfs                    781M     0  781M   0% /run/user/0
/dev/md0                  40G   33M   40G   1% /md0_disk


6.查看raid10 状态的命令
[yuchao-linux01 root ~]$
[yuchao-linux01 root ~]$mdadm -D /dev/md0

7.移除一块硬盘,查看磁盘组是否还可用
mdadm /dev/md0 -f /dev/sdd


8.第七部,模拟的一块硬盘损坏了,你还得重新加入一个新的硬盘,继续恢复raid 10的状态

因此你得买硬盘,重启机器,重新修复raid10

reboot

9.添加硬盘到阵列组中
 mdadm /dev/md0 -a /dev/sdd
 
10.再去验证磁盘组 /dev/md0的状态,是否都恢复了
留成课下作业提交查看。

11.你可以删除所有的raid,查看笔记操作即可,。