Linux学习小结

目录结构

tree -L 1 / 	#
/root	#root用户的家目录
/home	#存储普通用户家目录 
lost+found #这个目录平时是空的,存储系统非正常关机而留下“无家可归”的文件
/usr	#系统文件,相当于C:\Windows
/usr/local	#软件安装的目录,相当于C:\Program
/usr/bin	#普通用户使用的应用程序
/usr/sbin	#管理员使用的应用程序
/usr/lib	#库文件Glibc 32bit
/usr/lib64	#库文件Glibc 64bit
/boot	#存放的系统启动相关的文件,例如kernel
/etc	#配置文件(系统相关如网络/etc/sysconfig/network)
/tmp	#临时文件(系统:程序产生的临时文件)
/opt	#空目录,第三方应用(tomcat)
/media	#用于挂载u盘,光驱等自动识别的设备
/srv	#存放服务启动后产生的数据目录
/var	#存放的是一些变化文件,比如数据库,日志,邮件....
/proc	#虚拟文件系统,系统程序文件所处目录 。虚拟文件系统:只要关机就会没有。内核的虚拟映射目录
/mnt 	#系统提供这个目录是让用户临时挂载其他的文件系统

网络配置

ifup ens33	#启动网卡
ip a	#查看网址
yum -y install net-tools
ifconfig	#查看网址
netstat		#查看端口
vim /etc/sysconfig/network-scripts/ifcfg-ens33 在文件末行 onboot=no,改为yes   #开机自启动网卡
BOOTPROTO=static
IPADDR=192.168.153.137
PREFIX=24
GATEWAY=192.168.153.2
DNS1=114.114.114.114
DNS2=8.8.8.8 |223.5.5.5
systemctl restart netwark
#修改为静态IP地址 启动网卡后没有IP地址
[root@sxw ~]#
root    #正在登陆的用户
@    #连接符
localhost     #主机名
~  #当前用户家目录    
/  #系统根目录
#  #超级用户管理员登录提示符  
$  #普通用户登录提示符
hostname    #查看主机全称

#动态重新获取地址
dhclient -v
#查看IP地址
ip a
ip -f inet a show dev ens33
ifconfig
#查看路由
ip [r|route]

#路由转发
ip route add default via natip
echo 1 >/proc/sys/net/ipv4/ip_forward

#释放缓存的内存空间
echo 3 >/proc/sys/vm/drop_caches

selinux 防火墙关闭命令

getenforce  查看状态   Enforcing  开启状态 Permissiv  临时关闭  disabled    永久关闭
setenforce 0       临时关闭  
#永久关闭
vim /etc/selinux/config    修改SELINUX=disabled
#第二种
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config	
systemctl status firewalld   查看防火墙状态
systemctl start firewalld   临时开启防火墙 
systemctl enable firewalld   永久开启防火墙
systemctl stop firewalld     临时关闭防火墙
systemctl disable firewalld  永久关闭防火墙

配置阿里云yum源

1、清理官方yum源

cd /etc/yum.repos.d/
mkdir back
mv *.repo back

2、配置阿里云yum源

​ 在浏览器输入:https://mirrors.aliyun.com

​ 终端输入:

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

curl -o  /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo

3、清除yum库

yum clean all

4、生成自己的缓存

yum makecache

5、列出yum源名称

yum repolist

时间命令

#系统时间
date '-s ""'修改时间 '+%F'格式化年月日 '+%T'格式化时分秒   '-R'显示时区 '+%X'时分秒 '-r 文件路径'显示文件最后修改时间
data -s "2023-11-11 14:14:14"
export LANG=en_US.UTF-8     时间汉字转英文
#硬件时间 
hwclock '-r' 
#更改硬件时间
hwclock '--set --date'
#将硬件时间写入
hwclock '-s'
#将系统时间写入主板
hwclock '-w'  
#同步时间
hwclock '--hctosys'硬件时间同步系统 '--systohc'系统同步硬件
yum -y install ntpdate  #ntpdate工具下载
ntpdate '[time.window.com  |  ntp.aliyun.com]'   同步系统网络时间
#查看时区
timedatectl
#修改时区
timedatectl set-timezone Asia/Shanghai

快捷方式

#常用
ctrl d  退出临时登录用户
ctrl l  清屏
ctrl c  强制终止命令
Ctrl a  移到命令行首
Ctrl e  移到命令行尾
Ctrl p	历史中的上一条命令
ESC .	打印之前执行过的命令的最后一部分  以空格为分隔符

#编辑命令:
Ctrl + a  :移到命令行首
Ctrl + e  :移到命令行尾
Ctrl + u  :从光标处删除至命令行首
Ctrl + k  :从光标处删除至命令行尾
Ctrl + w :从光标处删除至字首
Ctrl + d :删除光标处的字符
Ctrl + h :删除光标前的字符

#重新执行命令:
Ctrl + p:历史中的上一条命令
ESC + .:打印之前执行过的命令的最后一部分  以空格为分隔符

#控制命令:
Ctrl + l:清屏
Ctrl + c:终止命令

Tab键: 自动补全

别名命令

#设置别名
alias v='vi /etc/sysconfig/network-scripts/ifcfg-ens33'
#取消别名
unalias v
#查看别名
type -a 

基本命令

ls -l 	#长格式显示
ls -h	#人性化显示
ls -a	#查看全部文件,包括隐藏文件
ls -t 	#按照文件最后一次修改时间排序
ls -rt	#按照文件最后一次修改时间排序 反转
ls -i	#查看文件的inode号
ls -ld	#查看目录详细信息
#查看历史命令
history 
!命令行号 #调用命令 
上下箭头
ctrl + r
#常用指令:
curl 下载网站源码,获取数据
wget 下载网络资源,下载软件
开机动画
#开机动画
yum install -y epel-release
yum install -y cowsay	#下载奶牛说
cowsay -f tux "相思"
echo 'cowsay -f tux "相思"' >> /root/.bashrc
#直接添加
vi /etc/motd 
文件类型
- 普通文件(文本文件,二进制文件,压缩文件,图片)
d 目录文件(蓝色)
l symbolic link 即符号链接文件,又称软链接文件 (浅蓝色)

tty #终端
b 设备文件  block device 设备文件,如硬盘,U盘;
c 设备文件 字符设备文件,比如我们的终端tty1,打印机。
s  socket 即套接字文件,用于实现两个进程进行通信
p  管道文件
#查询文件类型
ll -d /etc/hosts /bin/ls /home /dev/sda /dev/tty1 /etc/grub2.cfg /dev/log /run/dmeventd-client
echo -e "a\ab" \t \r \a  (蜂鸣声)
echo -e "\e[31m'添加内容'\e[0m"  #\033和\e是相同的意思
echo  加内容   >  加文件名  #覆盖:把之前的内容替换掉
echo  加内容  >> 加文件名   #追加:保留之前的内容,在后面添加新内容
#查看树状目录
tree -L 1 /   #根下树状目录显示1级
tree /root		#树状显示root下目录文件
echo $?    显示0表示上一条命令执行成功
useradd    创建新用户
su 用户名   进入用户
pwd     查看用户当前位
cd |cd~ 回到当前用户家目录 '-'返回上一次所在目录显示路径  '..'返回上一层  '.'表示还在这里  ' /' 根下
rm  删除文件   '-r'删除目录     '-rf'强制删除  
touch 文件名  创建普通文件  '{1..9}'可集合创建同级多个有规律文件目录 '{1,a,Z}'无规律用逗号隔开
mkdir 目录名  创建目录   '-p'递归创建多级目录  '-v'详细
mv    剪切文件
cp  复制文件 '-r'递归复制全部 ['-rfn' | '\cp -r']强制静默拷贝 
scp -r 源路径 对方地址:目标路径**   远程复制发送文件
poweroff   init 0    关机命令
reboot    init 6    重启命令
ssh 地址     远程连接
cs架构 

查看文件内容

cat   阅读全部内容  -n 显示行号 -A 查看文件所有内容包括隐藏符号
tac		调转上下文阅读
head  默认前10行   -n 15   阅读前15行
tail   同上   -f 动态查看尾部内容   -F 没有这个文件产生就可以查看这个文件
grep -r "root" /etc  过滤目录文件下的某个关键字
vi/vim	查看编辑

vim编辑

进入编辑模式
i	#在光标前插入,光标位置不变
a	#在光标前插入,光标位置后移一位
o	#在光标所在行的下一行插入
I	#在光标所在行的行首插入
A	#在光标所在行的行尾插入
O	#在光标所在行的上一行插入
命令行模式
#编辑模式退出到命令行esc
gg	#页首
G	#页尾
5G	#到第五行
0	#行首
$	#行尾
/关键字	#查找关键字
?关键字	#查找关键字
yy	#复制光标所在行
dd	#剪切光标所在行
x	#向后删除光标单个字符
r	#替换光标单个字符
p	#粘贴到光标所在行的下一行
P	#粘贴到光标所在行的上一行
5yy	#复制光标开始的5行
yy5	#复制光标所在行5遍
5dd	#剪切光标开始5行
[d^ | d0]	#删除光标所在到行首
[d$ | D]	#删除光标所在到行尾
dgg	#删除光标所在行到页首
dG	#删除光标所在行到页尾
u	#撤销
ctrl r	#恢复
扩展命令行
#输入
w	保存
q	退出
wq	保存退出
w!	强制保存
wq!	强制保存退出
q!	强制退出
x	保存退出
X	文件加密
w 路径	另存为

#替换
:s/nologin/不登陆/		替换光标所在行第一个关键字
:s/nologin/不登陆/g	替换光标所在行的所有关键字
:%s/nologin/不登陆/g	替换文本中匹配到的所有关键字
:%s/nologin/不登陆/	替换文本中每行的第一个关键字
:3s/nologin/不登陆/	替换指定行的第一个关键字
:3s/nologin/不登陆/g	替换指定行的所有关键字
:1,5s/nologin/不登陆/	替换第一行到第五行的第一个关键字
:1,5s/nologin/不登陆/g	替换第一行到第五行的所有关键字

:set nu		显示行号
:set nonu	取消行号
:set ts=4	设置tab键的长度
:set list	显示隐藏字符
:set mouse=a	鼠标操作
:set cursorline 行标线
:set cursorcolumn 列表线
可视化模块
#可视块
ctrl v 选中	y复制	d剪切	p粘贴
#批量添加注释:
ctrl v 选中行首	shift + i ===>#====>Esc
	
#可视行:
shift v 选中行 y复制	d剪切	p粘贴
时间类型
stat 文件名
访问时间:atime,查看内容 
修改时间:mtime,修改内容
改变时间:ctime,文件属性,比如权限,mv改名

Linux用户管理

组管理
groupadd	#创建用户组
用户名 -g 2000	#指定gid
groupmod 用户名 -g 3000	#修改组ID
groupdel 用户名	#删除用户组
用户管理
useradd yh	#创建用户
#创建用户后在下面几个文件目录中有用户记录
/etc/group	#同名组
/etc/shadow	#用户的密码文件,影子文件
/var/mail/	#系统邮箱
/home/		#用户的家目录
/etc/passwd	#查看账户是否存在的文件
#此文件里面除了密码字段能删除不能直接修改之外,其他字段全部都能直接修改
cat /etc/passwd
root   :x   :0  :0  :root  :/root :/bin/bash
用户名  密码 UID gid 描述信息 家目录  第一个开启shell命令
#判断用户是否存在
id 用户名	#查看uid、gid(主组)、所在组(附属组)
#查看现在所使用的的账户:
[whoami	| who | w]
w  #看已经登陆到终端的进程信息,远程登陆会有ip 地址

添加用户
useradd lhg -u 503   #指定uid为503
useradd mch -s /sbin/nologin  #创建用户并指定root用户登录
useradd -M  lhg		#不创建家目录
useradd xiaoli -G it,hr  #创建用户,指定附加组  
useradd xiaohao -u 4000 -s /sbin/nologin
删除用户
userdel -r lhg  #删除用户,同时删除用户家目录
修改密码
#修改密码
passwd		#root用户修改密码
passwd mch	#使用root用户给普通用户设置密码
#普通用户修改密码:
passwd		#遵守密码强度策略
echo "666" | passwd --stdin jack	#更改用户 jack 的密码
修改用户
#组里添加用户
usermod -u 2200 mch	#修改uid
id mch	#查询uid
usermod -s /sbin/nologin xiaoli	#修改登录权限
usermod -aG hr sxw	#添加用户到附属组
usermod -g hr mch		#指定主组
usermod -G hr lhg		#指定附加组,会覆盖其他的附加组
组成员管理
#用户管理,针对已存在的用户
#用户添加到组
gpasswd -a user group
#将多个用户添加到一个组
gpasswd -M user1,user2 group	
#-M:members成员的缩写
#从组中删除一个用户
gpasswd -d user group

用户权限

系统权限不能轻易修改

基本权限

U		G		O
user	group	other
r	4	#读权限
w	2	#写权限
x	1	#执行权限

设置权限
chown:改变文件或目录的所属主以及所属组
chown alice.hr file1.txt  #修改属主、属组
chown tom  file1.txt  #修改属主
chown .it file1.txt   #只改属组
chown -R alice.hr dir1 #递归修改---针对目录
chmod:为文件或目录设置访问权限
chmod u+x file1.txt     #属主增加执行
chmod a=rwx file1.txt   #所有人等于读写执行
chmod a=- file1.txt     #所有人都没有权限
chmod ug=rw,o=r file1.txt  #属主属组等于读写,其他人只读
chmod 777 file1.txt 	#所有人有所有权限
r、w、x权限对文件和目录的意义
对文件:可以使用以下命令
r ----cat vim  tail  head  more  less
w ---vi、vim  echo  >   >>
x ---- bash /dir/file  注意:如果没有x权限,root用户都无法执行  chmod a-x file    ./file

其他人对文件只有写权限的时候

对目录:
r  -----ls 			如果只有r权限,可以看到目录下的内容,但是有报错信息
w  -----touch、rm	可以对目录下的文件创建和删除但是要有执行权限
x  ---- cd 			进入目录(如果这个目录对于当前用户没有x权限则 该用户无法进入此目录)

最高权限
拥有 rwx  也就是7

#rwx对文件的影响
对目录没有w,对文件有rwx
其他人对父目录没有w权限,则对其目录下的文件也没有w权限,无关乎文件的权限,但是目录又要执行权限,否则无法cd进去

对目录有w,对文件没有任何权限
对目录有w权限,可以在目录中创建新文件,可以删除目录中的文件(跟文件权限无关)
注意事项
文件: x 权限小心给予
目录: w 权限小心给予

特殊权限

umask 用户掩码

控制用户创建文件和目录的默认权限

#root用户默认最高权限
目录---777 文件---666

#查看umask
umask
0022 root账户默认
0002 普通用户默认

#通过计算得出root用户创建目录和文件的权限为:
也是现在root用户创建完目录和文件的默认权限:
目录:755
文件:644

#修改umask
umask 0111

高级权限

suid	4	chmod u+s /usr/bin/cat	普通用户可以像root用户一样执行命令
sgid	2	chmod g+s /opt/hr/		继承父目录的属组
sticky	1	chmod o+t /opt/hr/		只允许自己和root删除自己创建的文件
suid ==== 4 提权 (只对二进制命令文件生效,其他不管用)
sgid ==== 2 继承属组权限    (只能对目录设置)
sticky == 1 (t权限)  权限控制
vim /etc/sudoers   | visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL	#yy p 
sxw    ALL=(ALL)       NOPASSWD:ALL   #添加内容 不输入密码 放开全部权限
alice   ALL=(ALL)       NOPASSWD:/usr/bin/mkdir, /usr/bin/rm, /usr/bin/touch	#放开个别命令root权限

%whell 	ALL=(ALL)	NOPASSWD:ALL

检查语法
visudo -c   #解析是否有语法错误
#将普通用户加入到wheel组
usermod -G wheel  zhangsan
gpasswd -a lhg,mch wheel

[sxw@sxw ~]$ sudo mkdir /test1
访问控制权限
setfacl 针对个人设置权限  一个人查看一个文件的权限
getfacl 查看权限
setfacl -m u:xiaoming:rwx /tmp/a.txt
-m 设置facl权限
u:  用户,也可以指定组 g
xiaoming: 需要指定的用户
rwx: 权限
#收回权限
方法1、
setfacl -m u:xiaoming:--- a.txt
方法2、
setfacl -x u:xiaoming a.txt
方法3:
setfacl -b file
我们也可以设置该文件为所有人所有组访问
setfacl -m ::rwx a.txt

隐藏权限

防止root用户误删
lsattr *   #查看文件属性
chattr	#设置隐藏权限
chattr +i 文件	#不允许做任何操作
chattr +a 文件	#只允许追加不允许修改删除
chattr +A 文件	#固定最近访问时间

进程管理

使用man手册查看

物理核心	
逻辑核心	32核

并行 		32
并发	
进程线程协程(异步)
#进程
一个正在运行的程序,一个程序运行至少要启动一个进程,主进程  子进程
速度:启动慢,结束慢
资源隔离:
资源不共享:

#线程
一个进程正常运行,至少要启动一个线程,主线程		子线程
速度:启动快,结束快
资源共享:
线程的损坏会影响进程

异步:
	节省资源
静态查看进程 process
ps aux | less
a 只能查看系统里面运行的所有终端进程
u 显示进程拥有者
x 显示系统内所有进程
f 显示进程之间的父子关系

ps -ef
-e 显示所有进程
-l 长格式显示
-f 完整格式
查询进程id
ps aux | grep sshd

pgrep sshd
pidof sshd
查看端口
net-tools	#环境安装
netstat -nplt | grep pid号
ss -nplt | grep pid号
-a  显示全部的进程
-u  显示udp
-n  以数字的型式显示协议名称
-t   tcp
-p:显示进程的名称和pid
-l :只显示正在被监听的端口


lsof -i:80
#注意:端口号只有整数,范围是从0 到65535
默认端口
nginx: 80
httpd: 80
sshd: 22
mail:25	465
tomcat:8080
mysql:3306
redis:6379
ftp:21

动态查看进程
top	#动态显示信息,三秒刷新一次。
h|? 帮助
> 往下翻页
< 往上翻页
M 按内存排序
P 按cpu排序
q 退出   
z 彩色显示
W 保存

htop
us: 用户态进程占用cpu
ni: nice值
id: cpu空闲率
wa: cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了
hi:硬中断,请求插队
si:软中断
st:停止
进程优先级
nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。
#修改进程(一般不要修改)
renice -n -10 pid
进程控制
kill 信号 PID   #信号也是进程间通信的一种方式
kill -l	 #查看所有信号
-9	#强制杀死,一般用于不能正常停止的情况下
-15  TERM 正常杀死(这个信号可以默认不写)可以使用systemctl stop 进程 停止服务
-1   HUP  重新加载进程或者重新加载配置文件,PID不变(不支持所有)
-18  CONT 激活进程
-19  STOP 挂起进程
#进程状态解释--了解:
+:表示运行在前台的进程
S+:休眠状态
T+:暂停,挂起状态
s:父进程

pkill -9 服务名  #使用pkill可以指定进程名字
作业控制
sleep 7000 &   #&:让命令或者程序后台运行
sleep 8000    #ctrl+z 把程序放到后台(这方法会让程序在后台暂停)
^Z
[2]+  Stopped                 sleep 8000

jobs  #查看当前终端后台的工作号
bg %2  #让暂停的程序在后台运行,%是用来修饰job number,2就是job number。(程序的工作号)
 jobs (只能在当前终端下使用)
 fg %1  #将后台的程序调到前台
 kill -9 %2  #通过kill杀死进程
 
 nohop sleep 1000 &	#挂载后台

常用命令

运维三板斧
1.查看当前CPU负载
#查看cpu负载命令
w
top
uptime
2.查看内存使用
[root@sxw ~]#  free -m 
              total        used        free      shared  buff/cache   available
Mem:           1984         154        1508           8         321        1632
Swap:          2047           0        2047

-m:单位M
-g:单位G
3.查看磁盘
df -h
4.查看系统的版本和内核
 cat /etc/redhat-release  #查看版本
 uname -a #看查正在运行的内核版本
 uname -r  #查看内核版本

管道和重定向

#重定向
0,标准输入(键盘)
1,标准输出
2,标准错误,
3+,进程在执行过程中打开的其他文件。  
&:表示正确错误混合输出
输出重定向 (覆盖,追加)
>   ----覆盖
>>  ----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>
;	#命令分隔符
&&	#上一条成功执行下一条
||	#上一条失败执行下一条
1>&2	#将正确的当成错误的
2>&1	#将错误的当成正确的
echo会将输入的内容送往标准输出(打印)
echo 内容 >> 文件名或脚本里面
ls / /hello 1>a.txt &>b.txt 2>c.txt
将正确的输出当成错误的输出使用,将错误的输出当成正确的输出使用
nginx -V 2>&1|  grep "version"

1>
2>
&>
1>&2
2>&1

输入重定向 <
标准输入: <   等价 0<
通过输入重定向创建文件
(cat > file <<EOF )是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。

语法:cat > file5 <:开始和结束的标记。
成对使用
结尾的另一个必须定格写。

管道 |

用法:command1 | command2 |command3 |...

实战案例

[root@sxw ~]# rpm -qa  |grep 'httpd'  #查询所有安装的软件包,过滤包含httpd的包

[root@sxw ~]# ps aux | grep 'sshd'

tee

实战案例

将/etc/passwd中的用户按UID大小排序

[root@sxw ~]# sort -t":" -k3 -n /etc/passwd  #以: 分隔,将第三列按字数升序
[root@sxw ~]# sort -t":" -k3 -n /etc/passwd -r #以: 分隔,将第三列按字数降序
[root@sxw ~]# sort -t":" -k3 -n /etc/passwd |head #以: 分隔,将第三列按字数升序看前十行
[root@sxw ~]# sort -t":" -k3 -n /etc/passwd |tail #以: 分隔,将第三列按字数升序看后十行
参数详解:
sort 排序,默认升序
-t 指定分隔符
-k 指定列
-n 按数值
-r 降序
head 默认输出前十行
tail 默认输出后十行

实战案例三

[root@sxw ~]# netstat -lntp | awk 'NR==3 {print $4}' | awk -F':' '{print $2}'
25
cut -d/ -f1 	#指定字符串 -d指定分隔符 -f第几列

参数传递:xargs

对:ls cp rm  管道不能执行。所以通过xargs。
 语法:
 cat a.txt | xargs  -i cp {} /目录  
 {}:前面传过来的内容
 -i :为了让大括号生效 占位符
 目录时  -r
 解释:前面传过来的东西交给大括号
 
 cat file.txt |xargs ls -l          
 前面是目录或者目录的路径。  ls - l  后面可以不加大括号,直接执行。
常用小命令
[root@sxw ~]# du -h /etc/   #查看目录及目录中的文件大小
[root@sxw ~]# du -sh /etc/  #查看目录的总大小
[root@sxw ~]# ls /etc/ | wc -l #查看目录中有多少个文件
wc 	#统计个数 -w统计文件单词按空格计算  -c统计字节数算空格隐藏字符 
ls / /hello 1>a.txt &>b.txt 2>c.txt	#优先级从后向前输出

#输出重定向
ping -W1 -c2 $1 &>/dev/null
if [ $? -eq 0 ];then
	echo "$1连接成功" | tee -a up.txt	#tee 
else
	echo "$1连接失败" | tee -a down.txt
fi
echo "程序结束"


存储管理

硬盘设备命名
物理硬盘:    /dev/sd[a-z]

df -Th
KVM虚拟化:
/dev/vd[a-z](半虚拟化驱动)
/dev/sd[a-z](全虚拟化驱动)
分区的目的:

文件分类。将一块硬盘分成几个小块。用来根据使用存放不同的文件

一块硬盘最多可以分多少个分区 65535

MBR格式
分区命令:fdisk  
一共可以分14个分区(4个主分区,扩展分区,逻辑分区) 例如: 3主 + 1扩展(n逻辑)
MBR 小于2TB的硬盘。
一块硬盘最多分4个主分区。
一块硬盘可以直接划分4个主分区,也可以划分3个主分区和一个扩展分区,扩展分区下面可以划分多个逻辑分区
GPT格式
分区命令:gdisk(parted---rhel6)
一共可以分128个主分区
GPT大于小于2TB都可以。最大可以多大,超过目前硬件可以支撑的硬盘大小
#注意:从MBR转到GPT,或从GPT转换到MBR会导致数据全部丢失!因为转换格式要格式化硬盘

基本分区

首先需要先给关机状态虚拟机添加磁盘
[[email protected] ~]# lsblk  #查看磁盘设备。当硬盘已经被添加,但是还没有格式化没有挂载的时候,使用lsblk查看硬盘信息
[root@sxw~]# 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    2G  0 part [SWAP]
└─sda3   8:3    0   17G  0 part /
sdb      8:16   0   20G  0 disk 
sr0     11:0    1  973M  0 rom  

NAME:			设备的名称
MAJ:MIN			主设备号:次设备号
RM				设备是否可移动。0表示不可移动设备,1表示可移动设备。
RO				设备是否为只读。0表示可读写设备,1表示只读设备。
TYPE			TYPE:设备的类型。常见的类型包括disk(硬盘)、part(分区)、rom(只读存储设备)等。
fdisk

MBR 14个分区(4个主分区,扩展分区,逻辑分区)

fdisk -l /dev/sdb #查看磁盘分区信息
fdisk /dev/sdb 
d	#删除一个分区
g	#将分区格式转化为GPT
o	#将分区格式转化为[DOS|MBR]
n	#添加一个分区
p	#打印分区表信息
w	#保存并退出
q	#退出

fdisk /dev/sdb
	n
default p	主分区
		e	扩展分区
分区号(1-4)1
起始扇区:2048		回车
结束扇区:	+{k m g}  +5G
保存并退出:w

#制作文件系统:ext4  xfs			ntfs		fat32
	mkfs.ext4	/dev/sdb1  
	mkfs.xfs	/dev/sdb1
#挂载:
	创建一个挂载点	mkdir /data1
	mount /dev/sdb1	/data1
#查看系统磁盘信息:
	df -Th
#开机自动挂载
vim /etc/fstab
/dev/sdb1	/data1	ext4	defaults 0 0
mount -a 		自动挂载
#更新磁盘分区表,手动让内核更新分区表。不需要重启
partprobe /dev/sdb		将分区表信息手动写入内核
parted -s /dev/sdb mklabel [gpt|msdos]
gdisk

GPT 128个主分区

转格式的时候保证此分区,没有被系统占用。
[root@sxw ~]# parted -s /dev/sdc mklabel gpt   #将/dev/sdc(MBR格式)转换成(GPT格式)
[root@sxw ~]# parted -s /dev/sdc mklabel msdos  #将/dev/sda(GPT格式)转换成(MBR格式)

创建分区

yum -y install gdisk  #安装分区工具
gdisk -l /dev/sdc	#查看磁盘分区信息
gdisk /dev/sdc
d	#删除一个分区
g	#将分区格式转化为GPT
o	#将分区格式转化为[DOS|MBR]
n	#添加一个分区
p	#打印分区表信息
w	#保存并退出
q	#退出
partprobe /dev/sdc  #刷新分区表
gdisk -l /dev/sdc
创建文件系统(格式化)centos7默认使用xfs
mkfs.ext4 /dev/sdb1   #格式化成ext4格式的文件系统
mkfs.xfs /dev/sdc2   #格式化成xfs格式的文件系统
挂载mount使用
mkdir /mnt/disk1   #创建挂载目录
mkdir /mnt/disks   #创建挂载目录
mount  /dev/sdb1 /mnt/disk1/
mount /dev/sdc2 /mnt/disks/
查看磁盘挂载与磁盘使用空间
[root@sxw ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root xfs        17G  1.2G   16G   7% /
devtmpfs                devtmpfs  982M     0  982M   0% /dev
tmpfs                   tmpfs     993M     0  993M   0% /dev/shm
tmpfs                   tmpfs     993M  8.7M  984M   1% /run
tmpfs                   tmpfs     993M     0  993M   0% /sys/fs/cgroup
/dev/sda1               xfs      1014M  125M  890M  13% /boot
tmpfs                   tmpfs     199M     0  199M   0% /run/user/0
/dev/sdb1               ext4      283M  2.1M  262M   1% /mnt/disk1
/dev/sdc2               xfs       197M   11M  187M   6% /mnt/disks
参数解释:
-T  打印文件系统类型
-h 人性化显示,磁盘空间大小
取消挂载
[root@sxw ~]# umount /mnt/disks/
[root@sxw ~]# umount -l /mnt/disk1/ #强行卸载,即使目录有资源被进程占用,也可以卸载

fstab开机自动挂载

开机自动挂载
blkid /dev/sdb1  #查看uuid和文件系统类型
vim /etc/fstab
/dev/sdc2       /mnt/disks      xfs     defaults        0 0
mount -a	#自动挂载
/etc/rc.d/rc.local开机自动挂载
这个配置文件会在用户登陆之前读取,这个文件中写入了什么命令,在每次系统启动时都会执行一次。也就是说,如果有任何需要在系统启动时运行的工作,则只需写入 /etc/rc.d/rc.local 配置文件即可
[root@sxw ~]# vim /etc/rc.d/rc.local #将挂载命令直接写到文件中
date >> /tmp/host_start.txt
mount /dev/sdb1 /mnt/disk1/
mount /dev/sdc1 /mnt/disk2/
[root@sxw ~]# chmod +x /etc/rc.d/rc.local #添加执行权限
[root@sxw ~]# reboot

文件系统

分类
分类:
本地文件系统,不能在网络上用。
ntfs  xfs  ext2,ext3,ext4 fat32
网络文件系统,也可以在本地用。
nfs   glusterfs   hdfs   ceph
概念
作用:
管理文件的一套系统。
文件的编辑,拷贝,粘贴,移动。

#理解inode:
inode :inoed块、i节点--索引节点。专门存储inode信息。也就是是文件的属性-(也叫元信息).它是文件或目录在磁盘里的唯一标识,linux读取文件首先要读取到这个索引节点,每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。
inode的内容
文件的字节数
文件拥有者的User ID
文件的Group ID
文件的读、写、执行权限
文件的时间戳,共有三个:ctime,mtime,atime。
链接数,即有多少文件名指向这个inode


查看inode信息
[root@sxw ~]# stat /etc/hosts
  File: ‘/etc/hosts’
  Size: 158             Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 16778306    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-07-28 19:11:48.781000069 +0800
Modify: 2013-06-07 22:31:32.000000000 +0800
Change: 2020-07-18 15:37:52.353025437 +0800
 Birth: -
 
[root@sxw ~]# ls -i /etc/hosts  #-i:查看inode号
16778306 /etc/hosts
EXT
EXT 家族支持度最广:andirons
但创建文件系统(格式化)慢!
修复慢!
文件系统存储容量有限!
XFS
XFS 同样是一种日志式文件系統:
高容量,支持大存储
高性能,创建/修复文件系统快
格式化快

逻辑卷

lvm的特点

#传统分区的缺点:
传统的文件系统是基于分区的,一个文件系统对应一个分区。这种方式比较直观,但不易改变。当一个分区空间已满时,无法对其扩充,只能采用重新分区/建立文件系统,非常麻烦;或把分区中的数据移到另一个更大的分区中。

#当采用LVM时:
1.将硬盘的多个分区由LVM统一为卷组管理,可以方便的加入或移走分区以扩大或减小卷组的可用容量,充分利用硬盘空间;
2.当磁盘空间不足而加入新的硬盘时,不必将数据从原硬盘迁移到新硬盘,而只须把新的分区加入卷组并扩充逻辑卷即可。
3.文件系统建立在LVM上,可以跨分区,方便使用;

#使用LVM主要是方便管理、增加了系统的扩展性。可以跨分区,多个硬盘组合。
lvm
基本分区(MBR|GPT) ----> Filesystem(制作文件系统类型) ----> mount(挂载)
逻辑卷LVM ----> Filesystem(制作文件系统类型) ----> mount(挂载)
lvm的制作

1、添加硬盘

首先准备添加3块磁盘:可以是/dev/sdb这种没有分区的也可以是/dev/sdb1这种已经分区了的
注意:如果没有pv命令安装 #yum install -y lvm2

2、创建物理卷

pvcreate /dev/sdb

3、查看物理卷信息

pvs		#查看pv
pvscan	
pvdisplay

4、创建卷组

vgcreate sxw	/dev/sdb

5、查看卷组信息

vgs	
vgscan	
vgdisplay

6、创建逻辑卷

lvcreate -L 10G -n lv1 sxw
lvcreate -l 5000 -n lv2 sxw  #采用PE方式在创建一个lv
-L 指定lv的大小
-n 给创建的lv起一个名字
-l 20 指定PE 

7、查看逻辑卷信息

lvs 
lvscan	
lvdisplay
制作文件系统并挂载
mkfs.xfs /dev/sxw/lv1
mkfs.ext4 /dev/sxw/lv2
mkdir /mnt/lv{1..2}
mount /dev/sxw/lv1 /mnt/lv1
mount /dev/sxw/lv2 /mnt/lv2
df -Th
lv移除
 #先移除lv
lvremove /dev/vg2/lv2
#再移除vg
vgremove /dev/vg2
#移除pv
pvremove /dev/sdc
逻辑卷扩容
#注意:如果lv所在的vg有空间直接扩容就ok了!
卷组没有空间

1、添加硬盘做物理卷
2、给卷组扩容

vgextend sxw /dev/sdc

3、给逻辑卷扩容

lvextend -L 35G /dev/sxw/lv1  #扩展到35G
lvextend -L +15G /dev/sxw/lv1	#加15G
lvextend -l +1500 /dev/sxw/lv1 #在原有基础上加1500个PE

4、给文件系统扩容

resize2fs /dev/sxw/lv1	#ext4扩容
xfs_growfs /dev/sxw/lv2	#xfs扩容

交换分区:

作用: ·提升· 内存的容量,防止OOM(Out Of Memory

#swap分区大小设置规则
内存小于4GB时,推荐不少于2GB的swap空间;
内存4GB~16GB,推荐不少于4GB的swap空间;
内存16GB~64GB,推荐不少于8GB的swap空间;
内存64GB~256GB,推荐不少于16GB的swap空间。
查看交换分区:
free -m

swapon -s  #查看交换分区信息
基本分区
#添加一个硬盘
#分区
fdisk /dev/sdd
partprobe /dev/sdd
#格式化
mkswap /dev/sdd1
#开机自动挂载
vim /etc/fstab
/dev/sdd1 swap	swap	defaults	0 0
#激活交换分区
swapon -a  

文件
#生成文件
dd if=/dev/zero of=/swap.img bs=1000M count=5
dd 读入 从空设备里面拿空块 到交换分区 块多大  一共多少
#格式化
mkswap /swap.img
#开机自动挂载
vim /etc/fstab
/swap.img swap	swap	defaults	0 0
#交换分区权限需要设置为600,默认644权限不安全。
chmod 600 /swap2.img 
#生效
swapon -a
#关闭交换分区:
swapoff -a 
挂载:
mount -o ro,rw,exec /mnt/sxw
ro	只读
rw	读写
exec	允许执行二进制文件
noexec	不允许执行二进制文件
remount	在线重新挂载
auto	默认参数
取消挂载
umount 

raid–磁盘阵列

RAID 即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。

raid0 ---数据条带卷
最少需要两块磁盘,分别往每一块磁盘上写一部分数据
优点:
1.读写速度快, 
2.磁盘利用率:100%
缺点:不提供数据冗余,无数据检验,不能保证数据的正确性,存在单点故障。

raid1 又叫镜像raid,通过磁盘数据镜像实现数据冗余,在成对的独立磁盘上产生互为备份的数据。
一般需要两块磁盘,每块磁盘上都会存储一份完整数据。其数据安全性就会较高,但是磁盘空间利用率是比较低的。

优点:提供数据冗余,数据双倍存储安全性高支持容错。读速度快
缺点:写速度慢,无数据校验。磁盘利用率不高
磁盘利用率:50%
raid5:RAID5应该是目前最常见的 RAID 等级,它的校验数据分布在阵列中的所有磁盘上。RAID5的磁盘上同时存储数据和校验数据。当一个数据盘损坏时,系统可以根据其他数据块和对应的校验数据来重建损坏的数据。 

raid5最少需要3块磁盘。
优点:
1.可以找回丢失的数据---数据可以通过校验计算得出,
2.冗余磁盘-->(需要4快磁盘将其中一块做热备)当某一块磁盘坏掉后,冗余磁盘会自动替换上去
3.有校验机制
4.读写速度高
5.磁盘利用率高
缺点:
1.磁盘越多安全性能越差
raid6:RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式。
RAID6引入双重校验的概念,最少需要四块磁盘,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。
优点:
1.容错:允许两块磁盘同时坏掉。读写快。
2.良好的随机读性能
3.有校验机制

缺点:
1.写入速度差
2.成本高
RAID10:先做镜像再作条带--也叫混合raid
优点:
1.较高的IO性能
2.有数据冗余
3.无单点故障
4.安全性能高
缺点:成本稍高

文件查找

grep: 文件内容过滤
#从/etc/passwd文件中过滤root字段
grep 'root' /etc/passwd
#递归查找
grep -r 'root' /etc/
查找命令和配置文件的位置
#查找命令
which 

#查找命令和配置文件的位置
whereis

find详解: 文件查找,针对文件名

find 路径 条件 跟条件相关的操作符
指定查找深度
find / -maxdepth 1 -type f	#查询/下一层普通文件
按文件名
find / -name “file2”
#-i忽略大小写
find /etc -iname "Ifcfg-ens33" 
find /etc -iname "*.txt"

# !--取反
find /home/ ! -name "test5*" 
按文件大小 -size
find /etc -size +5M	#大于5M
find /etc -size 5M	#等于5M
find /etc -size -5M	#小于5M
find / -size +3M -a -size -5M	#查找/下面大于3M而且小于5M的文件
find / -size -1M -o -size +80M	#查找/下面小于1M或者大于80M的文件
find / -size -3M -a -name "*.txt"	#查找/ 下面小于3M而且名字是.txt的文件
按时间查找
按时间找(atime,mtime,ctime)
-atime = access访问时间
-mtime = modify改变时间  内容修改时间会改变
-ctime = change修改时间   属性修改时间会改变

-amin  #分钟
-mmin
-cmin
按文件类型
find /dev -type f	#f普通文件
find /dev -type d	#d目录
find /etc -type l	#l链接
find /dev -type b	#b块设备
按文件权限
find . -perm 644	#.是当前目录    精确查找644
find /usr/bin  -perm -4000	#包含set uid
找到后处理
find /etc -name "ifcfg*" -exec cp -rf {} /tmp \;	#exec命令对之前查找出来的文件做进一步操作-----  查找带ifcfg开头的文件复制到tmp下

find /home/ -name "test*" | xargs -i cp {} /tmp/	#找到之后删除处理xargs 参数传递
-exec和xargs的区别
-exec:参数是一个一个传递的,传递一个参数执行一次命令。
xargs:将前一个命令的标准输出传递给下一个命令,作为它的参数转换成下一个命令的参数列表。

1、exec 每处理一个文件或者目录,它都需要启动一次命令,效率不好; 
2、exec 格式麻烦,必须用 {} 做文件的代位符,必须用 \来转义; 作为命令的结束符,书写不便。 
3、xargs不能操作文件名有空格的文件;

打包压缩

linux打包压缩工具
结尾:.tar.gz	.tar.bz2	.tar.xz 	.zip
gzip bzip2 xzip zip
打包压缩
ar czvf dir1.tar /home/dir10/ #打包目录dir10,将包命名为dir1.tar
c :create  创建
z :表示gz压缩
j :表示bz2压缩
J :表示xzip压缩
v :verbose 详细信息
f :file  指定文件

gzip file1  #压缩
gzip -c file1 > /usr/local/file1.gz  #压缩到指定位置(注意以.gz结尾)
解压
#tar xvzf 压缩文件 [-C 解压路径]
tar xf dir1.tar -C /usr/local/ #将dir1包解压到指定目录
x: extract  解压缩  解包
-C: 指定解包路径

#gunzip    压缩文件
#bunzip2   压缩文件

gzip -d file1.gz #解压缩
gunzip file1.gz  #也是解压缩包
gunzip -c /usr/local/file1.gz > /opt/file1 #解压到指定位置(解压出的名字可以自定义)
扩展–按时间创建目录或者文件
# mkdir `date +%F`-upload
# touch file-`date +%F`.txt

软硬连接单用户添加密码

软链接
ll -i	#查询inode号
ln -s
可以对目录做软链接,也可以对文件做;
删除源文件,软链接不可用。删除软链接,源文件不受影响;
软链接可以跨文件系统使用;
软链接和源文件具有不同的inode号;
删除软链接的时候,如果软链接是对目录做的,那么要注意,删除的时候,软链接后面一定不要带/
硬链接:
ln 
硬链接可以对文件做,硬链接不可以对目录做;
删除源文件硬链接不受影响;
硬链接不可以跨文件系统使用;
硬链接和源文件具有相同的inode号;

密码破解

重起系统,进入grub菜单
选择要使用的内核
按e
找到linux16那一行,把光标移动到最后,添加 init=/bin/sh 或者 rd.break console=tty0
ctrl+x #保存退出
进入系统后,以rw方式重新挂载/分区
#mount -o remount,rw   /sysroot
#chroot /sysroot
永久关闭selinux
#vim /etc/sysconfig/selinux
修改密码
# touch /.autorelabel  #重新识别新的root密码
# exec /sbin/init  #重启机器,

单用户添加密码

vim /etc/grub.d/10_linux
cat <<EOF
set superusers="jiege"
password jiege 123456
EOF


#重新生成grub文件
grub2-mkconfig --output=/boot/grub2/grub.cfg 

软件管理

rpm介绍
rpm软件包名称:
软件名称 版本号(主版本、次版本、修订号) 操作系统 -----90%的规律
#有依赖关系,不能自动解决依赖关系。

#用rpm安装需要考虑如下信息:
1.需要考虑系统的版本需要与rpm对应
2.系统的架构:如32位还是64位
3.需要考虑依赖关系

#安装软件
rpm
www.rpmfind.net
i 安装    vh以人类可视化进行  U 更新
rpm -i[U]vh	安装软件包 【升级】
rpm -ivh	远程地址	远程安装软件
rpm -e		卸载软件包
rpm -qa		查找系统中所有已安装的软件包	
rpm -qf		系统中的某一个文件是由哪个软件包生成的
rpm -qc		软件包在创建的配置文件 'c config'
rpm -ql		软件包在系统中生成的所有文件
yum安装
#可以自动解决rpm软件依赖关系,虽然是通过yum安装的但是最后执行的还是rpm,也就是说没有rpm命令yum也就不能用了。
分类:本地yum和远程yum
本地yum:
file://
远程yum:
http://
ftp://
yum管理
yum 包管理工具
yum clean all			清理缓存
yum makecache fast		快速生成自己的缓存

yum install 软件包名字	下载安装包
yum localinstall	本地安装
yum remove | erase  软件包名字 	删除软件包

yum update 		更新软件包	所有软件包已安装和未安装都更新
yum upgrade		更新软件包	只更新已安装的软件包
yum list		查询系统中所有包
yum list | grep @	查询所有已安装软件包
yum search 关键字	
yum provides 命令	查询命令属于哪个包
yum list 列出所有软件包
yum list |grep  列出所有已安装的软件包

回滚
yum history 		查看历史操作
yum history undo ID	
yum reinstall		重新安装
更换阿里云的yum源;

​ 1、备份原来的yum配置文件

cd /etc/yum.repos.d/ && mkdir back && mv *.repo back

​ 2、mirrors.aliyun.com
​ 3、下载镜像
​ 4、

curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
或者yum -y install epel-release	下载扩展源

​ 5、清理缓存

yum clean all

​ 6、生成缓存

yum makecache fast

​ 7、列出yum仓库

yum repolist

制作本地yum源

​ 1、将镜像挂载

mount /dev/cdrom /mnt

​ 2、配置yum

vim /etc/yum.repos.d/local.repo
	[my repo]
	name=my repo
	baseurl=file:///mnt
	enable=1
	gpgcheck=0

​ 3、清理缓存

yum clean all

​ 4、建立缓存

yum makecache

​ 5、列出yum仓库

yum  repolist

准备两台服务器
准备环境

#防火墙
	systemctl stop firewalld && systemctl disable firewalld
#selinux
	setenforce 0

两台服务器互ping

制作局域网yum源

服务端:

yum -y install vsftpd createrepo
mkdir /var/ftp/yum
cp /mnt/Packages/*  /var/ftp/yum/
cd  /var/ftp/
createrepo yum/

启动服务:

systemctl start vsftpd


客户端配置yum源:

vim /etc/yum.repos.d/ftp.repo	#后缀一定是.repo
	[ftp-repo]	#
	name=ftp-repo
	baseurl=ftp://ip地址/yum	#://固定写法
	gpgcheck=0

克隆yum源

1、安装工具

yum -y install yum-utils(reposync)
yum -y install createrepo

2、yum repolist
3、安装nginx

yum -y install nginx && rm -rf /usr/share/nginx/html/* 

4、克隆yum源

cd /usr/share/nginx/html/
reposync -r base -r epel -r extras -r updates

5、制作yum仓库

cd /usr/share/nginx/html/
createrepo base
createrepo epel
createrepo extras
createrepo updates

6、配置nginx

vim /etc/nginx/nginx.conf +43
location / {
	root /usr/share/nginx/html;
	autoindex on;
}
systemctl restart nginx
nginx -t 
nginx -s reload
客户端配置yum源
vim /etc/yum.repos.d/nginx.repo
[base]
name=base
baseurl=http://ip地址/base
gpgcheck=0
enable=1
	
[epel]
name=epel
baseurl=http://ip地址/epel
gpgcheck=0
enable=1

[extras]
name=extras
baseurl=http://ip地址/extras
gpgcheck=0
enable=1

[updates]
name=updates
baseurl=http://ip地址/updates
gpgcheck=0
enable=1

yum clean all && \
yum makecache fast && \
yum repolist

DNS域名解析服务

计划任务

一次性调度任务–at
作用:  计划任务主要是做一些周期性的任务,目前最主要的用途是定期备份数据 
#安装:
	yum -y install at
#启动:
	systemctl start atd
#开机自启动:
	systemctl enbale atd
语法:
	at <时间规格>
ctrl +d
teatime 下午4点
noon	中午12点
midnight	午夜12点
tomorrow	明天
at 时间
at now +[1min|day|month|year]
at 10:00|10am 
at 10:00 +3days
at 16:00|4pm|teatime 2024-12-8

查询:	
	atq
查看某一个具体的任务:cd /var/spool/at | at -c id
删除一个一次性计划任务: 
    atrm id
循环调度执行
yum -y install crontabs  #如果软件不存在安装
crontab -l	列出所有的计划任务
crontab -e	编辑计划任务
crontab -r	删除所有计划任务
crontab -u yh -e	使用yh用户创建

日志轮转

日志管理基础
rsyslog 日志管理 
logrotate日志轮转

LNMP生产环境部署

静态资源

动态资源

编译安装 MySQL

MySQL 类型
1、MySQL Community Server
- MySQL Community Server是社区版本,开源免费,但不提供官方技术支持。MySQL Community Server也是我们通常用的MySQL的版本。根据不同的操作系统平台细分为多个版本。
2、MySQL Enterprise Edition
- MySQL Enterprise Edition企业版本,需付费,可以试用30天。
3、MySQL Cluster
- MySQL Cluster集群版,开源免费。可将几个MySQL Server封装成一个Server。MySQL Cluster CGE 高级集群版,需付费。

MySQL 安装方式

1、yum 安装
  • 优点:操作简单易用。不用单独下载,服务器可以联网且yum源没有问题即可(可以选择国内的163/阿里源)
2、编译安装
- 5.1.X 及之前的版本是通过下载tar包以后解压后进入软件包解压路径。然后./configure、make、make install

- 5.4.X 到 5.7.X 通过下载tar包以后解压后进入软件包解压路径。然后 cmake、make、make install(cmake需要提前安装)

优点:可以定制功能特性。
3、二进制安装
官方下载二进制包,解压初始化即可直接使用不用安装。
4、rpm 安装
- 需要提前下载 rpm 软件包上传到服务器系统本地。
- 使用 rpm 或者 yum 命令直接安装
5、MySQL 版本说明
以 MySQL 5.7.27 这个版本的版本号为例说明每个数字含义。

- 第一个数字(5)主版本号:文件格式改动时,将作为新的版本发布;
- 第二个数字(7)发行版本号:新增特性或者改动不兼容时,发行版本号需要更改;
- 第三个数字(27)发行序列号:主要是小的改动,如bug的修复、函数添加或更改、配置参数的更改等。

mysql安装

关闭防火墙和selinux

1、编译安装mysql5.7
1.1、清理安装环境:
# yum erase mariadb mariadb-server mariadb-libs mariadb-devel -y
# userdel -r mysql
# rm -rf /etc/my*
# rm -rf /var/lib/mysql
1.2、创建mysql用户
[root@mysql-server ~]# useradd mysql -M -s /bin/nologin
-M 不创建用户的家目录
[root@mysql-server ~]# useradd -r mysql  -s /bin/nologin
-r 选项表示创建一个系统用户,也被称为系统账户。使用useradd -r命令创建系统用户时,会自动分配一个较高的用户ID(UID)和组ID(GID),并且不会为其创建家目录。
1.3、从官网下载tar包

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-boost-5.7.27.tar.gz

1.4、安装编译工具
# yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make glibc automake autoconf
cmake:
# yum -y install cmake
1.5、解压
[root@mysql-server ~]# tar xzvf mysql-boost-5.7.27.tar.gz -C /usr/local/
1.6、编译安装
cd 解压的mysql目录
[root@mysql-server ~]# cd /usr/local/mysql-5.7.27/
[root@mysql-server mysql-5.7.27]# cmake . \
-DWITH_BOOST=boost/boost_1_59_0/ \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DINSTALL_MANDIR=/usr/share/man \
-DMYSQL_TCP_PORT=3306 \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_SSL=system \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1

参数详解:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   安装目录
-DSYSCONFDIR=/etc \   配置文件存放 (默认可以不安装配置文件)
-DMYSQL_DATADIR=/usr/local/mysql/data \   数据目录   错误日志文件也会在这个目录
-DINSTALL_MANDIR=/usr/share/man \     帮助文档 
-DMYSQL_TCP_PORT=3306 \     默认端口
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \  sock文件位置,用来做网络通信的,客户端连接服务器的时候用
-DDEFAULT_CHARSET=utf8 \    默认字符集。字符集的支持,可以调
-DEXTRA_CHARSETS=all \   扩展的字符集支持所有的
-DDEFAULT_COLLATION=utf8_general_ci \  支持的
-DWITH_READLINE=1 \    上下翻历史命令
-DWITH_SSL=system \    使用私钥和证书登陆(公钥)  可以加密。 适用与长连接。坏处:速度慢
-DWITH_EMBEDDED_SERVER=1 \   嵌入式数据库
-DENABLED_LOCAL_INFILE=1 \    从本地倒入数据,不是备份和恢复。
-DWITH_INNOBASE_STORAGE_ENGINE=1  默认的存储引擎,支持外键

Linux学习小结_第1张图片

[root@mysql-server mysql-5.7.27]# make && make install
如果安装出错,想重新安装:
    不用重新解压,只需要删除安装目录中的缓存文件CMakeCache.txt

Linux学习小结_第2张图片

**需要很长时间!**大约半小时

1.7、初始化
[root@mysql-server mysql-5.7.27]# cd /usr/local/mysql
[root@mysql-server mysql]# chown -R mysql.mysql .
[root@mysql-server mysql]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data     ---初始化完成之后,一定要记住提示最后的密码用于登陆或者修改密码

Linux学习小结_第3张图片

初始化,只需要初始化一次

设置环境变量
[root@sxw mysql]# echo 'export PATH=/usr/local/mysql/bin:$PATH' >>/etc/profile
[root@sxw mysql]# source /etc/profile
[root@sxw mysql]# echo $PATH
/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

[root@mysql-server ~]# vim /etc/my.cnf  --如果打开文件有内容将文件中所有内容注释掉,在添加如下内容
[client]
port = 3306
socket = /tmp/mysql.sock
default-character-set = utf8

[mysqld]
port = 3306
user = mysql
basedir = /usr/local/mysql  #指定安装目录
datadir = /usr/local/mysql/data  #指定数据存放目录
socket = /tmp/mysql.sock
character_set_server = utf8



[client]
# 默认连接端口
port = 3306
# 用于本地连接的socket套接字
socket = /tmp/mysql.sock
# 编码
default-character-set = utf8

[mysqld]
# 服务端口号,默认3306
port = 3306
# mysql启动用户
user = mysql
# mysql安装根目录
basedir = /usr/local/mysql
# mysql数据文件所在位置
datadir = /usr/local/mysql/data
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket = /tmp/mysql.sock
# 数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character_set_server = utf8

Linux学习小结_第4张图片

1.8、启动mysql
[root@mysql-server ~]# cd /usr/local/mysql
[root@mysql-server mysql]# ./bin/mysqld_safe --user=mysql &

启动之后再按一下回车!即可后台运行

image-20200802221745479

1.9、登录mysql
[root@mysql-server mysql]# /usr/local/mysql/bin/mysql -uroot -p'GP9TKGgY9i/8'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.27

Copyright (c) 2000, 2019, 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> exit
1.10、systemctl启动方式
  • 拷贝启动脚本到/etc/init.d/目录下,并改名mysqld
[root@sxw mysql]# cp support-files/mysql.server /etc/init.d/mysqld
[root@sxw mysql]# ls -l /etc/init.d/mysqld
-rwxr-xr-x 1 root root 10588 Aug 1 18:33 /etc/init.d/mysqld
  • 重新加载系统服务
[root@sxw mysql]# systemctl daemon-reload
  • 启动MySQL数据库,并检查端口监听状态
[root@sxw mysql]# systemctl stop mysqld   --停止mysqld
# 或者
[root@sxw mysql]# systemctl start mysqld  --启动mysqld
Starting MySQL. SUCCESS! 

[root@sxw mysql]# netstat -lntp | grep 3306
tcp6       0      0 :::3306                 :::*                    LISTEN      16744/mysqld 
1.11、数据库修改密码
[root@sxw ~]# /usr/local/mysql/bin/mysqladmin -uroot -p'GP9TKGgY9i/8' password 'Qf@123!'
[root@sxw ~]# /usr/local/mysql/bin/mysql -uroot -p'Qf@123!'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.27

Copyright (c) 2000, 2019, 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> create database wordpress;
mysql> grant all on *.* to 'remote'@'%' identified by '123';
mysql> flush privileges;

编译安装 Nginx

静态资源(门户):MP4、MP3、jpg、html、css、js

1、安装编译 Nginx 依赖包
[root@sxw ~]# yum -y install gcc gcc-c++ make zlib-devel pcre pcre-devel openssl-devel perl-devel perl-ExtUtils-Embed gd-devel
2、官网下载 Nginx 安装包
[root@sxw ~]# wget https://nginx.org/download/nginx-1.22.1.tar.gz
3、创建 Nginx 运行用户
[root@sxw ~]# useradd -s /sbin/nologin -M nginx
4、解压配置 Nginx 编译
[root@sxw ~ ]# tar zxvf nginx-1.22.1.tar.gz -C /usr/local/
[root@sxw ~]# cd /usr/local/nginx-1.22.1/
[root@sxw nginx-1.16.0]# ./configure \
--user=nginx \
--group=nginx \
--prefix=/usr/local/nginx \
--conf-path=/etc/nginx/nginx.conf \
--sbin-path=/usr/sbin/nginx \
--error-log-path=/var/log/nginx/nginx_error.log \
--http-log-path=/var/log/nginx/nginx_access.log \
--pid-path=/usr/local/nginx/run/nginx.pid
5、Nginx 编译安装
[root@sxw nginx]# make && make install
6、测试 Nginx 是否安装成功
[root@sxw nginx-1.16.0]# nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) 
configure arguments: --user=nginx --group=nginx --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --sbin-path=/usr/sbin/nginx --error-log-path=/var/log/nginx/nginx_error.log --http-log-path=/var/log/nginx/nginx_access.log --pid-path=/usr/local/nginx/run/nginx.pid
7、启动 Nginx 服务
[root@sxw nginx-1.16.0]# /usr/sbin/nginx
8、验证 Nginx 服务是否启动成功
[root@sxw nginx-1.16.0]# netstat -lntp | grep nginx 
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      29740/nginx: master 
9、系统添加 Nginx 服务

以 systemd 形式添加

1、创建 nginx.service 文件
[root@sxw ~]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/nginx
ExecReload=/usr/sbin/nginx -s reload
ExecStop=/usr/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target


[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
2、以 systemctl 方式启动 Nginx
[root@sxw ~]# pkill nginx
[root@sxw ~]# systemctl daemon-reload 
[root@sxw ~]# systemctl start nginx
3、查看 Nginx 服务状态
[root@sxw ~]# ps -ef | grep nginx
root      14116      1  0 17:36 ?        00:00:00 nginx: master process /usr/sbin/nginx
nginx     14117  14116  0 17:36 ?        00:00:00 nginx: worker process
root      14119   6576  0 17:36 pts/1    00:00:00 grep --color=auto nginx
4、验证 Nginx 服务是否成功启动
[root@sxw ~]# netstat -ntlp | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      349/nginx: master p 
5、配置 Nginx 服务自动启动
[root@sxw ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.

编译安装 Php

1、安装编译环境依赖包
[root@sxw ~]# yum -y install gcc gcc-c++ glibc automake autoconf libtool make
2、安装编译 php 依赖库
[root@sxw ~]# yum -y install libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel 
3、编译安装 Php
1、下载 Php 源码包
[root@sxw ~]# wget https://www.php.net/distributions/php-7.3.6.tar.gz
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar -xf libzip-1.3.2.tar.gz
cd  libzip-1.3.2/
./configure
make
make install
2、配置 Php 编译
[root@sxw ~]# tar xzvf php-7.3.6.tar.gz -C /usr/local/
[root@sxw ~]# cd /usr/local/php-7.3.6/
[root@sxw php-7.3.6 ]# ./configure \
    --prefix=/usr/local/php7 \
    --with-config-file-path=/usr/local/php7 \
    --with-config-file-scan-dir=/usr/local/php7/php.d \
    --enable-mysqlnd \
    --with-mysqli \
    --with-pdo-mysql \
    --enable-fpm \
    --with-fpm-user=nginx \
    --with-fpm-group=nginx \
    --with-gd \
    --with-iconv \
    --enable-xml \
    --enable-shmop \
    --enable-sysvsem \
    --enable-inline-optimization \
    --enable-mbregex \
    --enable-mbstring \
    --enable-ftp \
    --enable-zip \
    --with-openssl \
    --with-zlib \
    --with-libzip \
    --enable-pcntl \
    --enable-sockets \
    --with-xmlrpc \
    --enable-soap \
    --without-pear \
    --with-gettext \
    --enable-session \
    --with-curl \
    --with-jpeg-dir \
    --with-freetype-dir \
    --enable-opcache
3、Php 编译参数说明
--prefix=/usr/local/php7 		# 配置安装目录
--with-config-file-path=/usr/local/php7 # 配置文件 php.ini 的路径
--enable-sockets 				# 开启 socket 
--enable-fpm 					# 启用 fpm 扩展
--enable-cli			 		# 启用 命令行模式 (从 php 4.3.0 之后这个模块默认开启所以可以不用再加此命令)
--enable-mbstring 				# 启用 mbstring 库
--enable-pcntl 					# 启用 pcntl (仅 CLI / CGI)
--enable-soap 					# 启用 soap 
--enable-opcache 				# 开启 opcache 缓存
--disable-fileinfo 				# 禁用 fileinfo (由于 5.3+ 之后已经不再持续维护了,但默认是开启的,所以还是禁止了吧)(1G以下内存服务器直接关了吧)
--disable-rpath  				# 禁用在搜索路径中传递其他运行库。
--with-mysqli 					# 启用 mysqli 扩展
--with-pdo-mysql 				# 启用 pdo 扩展
--with-iconv-dir 				# 启用 XMLRPC-EPI 字符编码转换 扩展
--with-openssl 					# 启用 openssl 扩展 (需要 openssl openssl-devel)
--with-fpm-user=nginx 			# 设定 fpm 所属的用户 
--with-fpm-group=nginx 			# 设定 fpm 所属的组别
--with-curl 					# 启用 curl 扩展
--with-mhash 					# 开启 mhash 基于离散数学原理的不可逆向的php加密方式扩展库
# GD
--with-gd 						# 启用 GD 图片操作 扩展
--with-jpeg-dir 				# 开启对 jpeg 图片的支持 (需要 libjpeg)
--with-png-dir 					# 开启对 png 图片支持 (需要 libpng)
--with-freetype-dir 			# 开启 freetype 

# xml
--enable-simplexml 				# 启用对 simplexml 支持
--with-libxml-dir 				# 启用对 libxml2 支持

--enable-debug 					# 开启 debug 模式
4、编译安装 Php
[root@sxw php-7.3.6]# make && make install 

Linux学习小结_第5张图片

大约需要等待30分钟

5、创建 php.ini 配置文件
[root@sxw php-7.3.6]# cp php.ini-production /usr/local/php7/etc/php.ini

[root@sxw php-7.3.6]# vim /usr/local/php7/etc/php.ini +1371 #php的Session存储目录
1371 session.save_path = "/tmp" #将注释打开
6、设置php-fpm配置文件
[root@sxw php-7.3.6]# cd /usr/local/php7/etc
[root@sxw etc]# cp php-fpm.conf.default php-fpm.conf
[root@sxw etc]# vim php-fpm.conf +17
pid = /var/run/php-fpm.pid  #将注释取消并修改

# php-fpm连接文件
[root@sxw etc]# cd /usr/local/php7/etc/php-fpm.d/
[root@sxw php-fpm.d]# cp www.conf.default www.conf  #php-fpm子配置文件
[root@sxw php-fpm.d]# vim www.conf
user = nginx
group = nginx
listen = 127.0.0.1:9000
7、启动 php-fpm
[root@sxw php-fpm.d]# /usr/local/php7/sbin/php-fpm
8、检查 php-fpm 是否成功启动
[root@sxw php-fpm.d]# ps aux | grep php-fpm

若看到相关进程,则证明启动成功。查询进程时,进程是以 nginx 用户身份执行的

9、配置 php-fpm 系统环境变量
[root@sxw php-fpm.d]# cd
[root@sxw ~]# vim /etc/profile
export PHP_HOME=/usr/local/php7
export PATH=$PATH:$PHP_HOME/bin:$PHP_HOME/sbin
10、重载环境变量
[root@sxw ~]# source /etc/profile
  • 使用 echo $PATH 命令查看环境变量中是否已经加入了相关的路径
11、配置 php-fpm 开机自启动
[root@sxw ~]# vim /lib/systemd/system/php-fpm.service
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/php7/sbin/php-fpm
ExecStop=/bin/pkill -9 php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target
12、php-fpm.service 文件说明
[Unit]:服务的说明
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
13、重载 systemctl 配置
[root@sxw ~]# systemctl daemon-reload
14、停止 php-fpm
[root@sxw ~]# pkill php-fpm
15、用 systemctl 启动 php-fpm
[root@sxw ~]# systemctl start php-fpm.service
16、设置 php-fpm 开机启动
[root@sxw ~]# systemctl enable php-fpm.service
17、php-fpm 管理命令
[root@sxw ~]# systemctl stop php-fpm.service 			# 停止服务
[root@sxw ~]# systemctl restart php-fpm.service 		# 重新启动服务
[root@sxw ~]# systemctl status php-fpm.service		# 查看服务当前状态
[root@sxw ~]# systemctl disable php-fpm.service 		# 停止开机自启动

Nginx 配置支持PHP

1、添加 Nginx 配置
[root@sxw ~]# cd /etc/nginx/
[root@sxw nginx]# vim nginx.conf
#配置如下
server
{
	listen 80;
	server_name localhost;
	index index.html index.htm index.php;
	root /usr/local/nginx/html;
	location ~ \.php$
	{
		include fastcgi_params;        #指定nginx连接php-fpm的常量
		fastcgi_pass 127.0.0.1:9000;    #连接php-fpm的地址和端口
		fastcgi_index index.php;        #指定默认页面
		fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; #指定站点根目录
	}
}
2、添加 php 探测文件
[root@sxw nginx]# cd /usr/local/nginx/html/
[root@sxw html]# vim index.php
<?php
phpinfo();
?>
3、验证 Nginx 关联 php-fpm
1、重启 php-fpm
[root@sxw html]# systemctl restart php-fpm.service
[root@sxw ~]# ps -ef|grep php-fpm
root      14259      1  0 17:42 ?        00:00:00 php-fpm: master process (/usr/local/php7/etc/php-fpm.conf)
nginx     14260  14259  0 17:42 ?        00:00:00 php-fpm: pool www
nginx     14261  14259  0 17:42 ?        00:00:00 php-fpm: pool www
root      14263   6576  0 17:43 pts/1    00:00:00 grep --color=auto php-fpm
2、重载 Nginx 配置
[root@sxw html]# systemctl restart nginx
[root@sxw html]# systemctl status nginx
3、访问验证

Linux学习小结_第6张图片

LNMP环境编译安装完成!
4、基于LAMP环境上线wordpress
[root@sxw ~]# tar xzvf wordpress-4.9.4-zh_CN.tar.gz
[root@sxw ~]# rm -rf /usr/local/nginx/html/*
[root@sxw ~]# cp -r wordpress/* /usr/local/nginx/html/ #将代码拷贝到网站发布目录中
[root@sxw ~]# systemctl restart nginx

创建数据库
[root@sxw html]# /usr/local/mysql/bin/mysql -uroot -p'Qf@123!'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.7.27 Source distribution

Copyright (c) 2000, 2019, 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> create database wordpress;
Query OK, 1 row affected (0.00 sec)

mysql> \q
Bye

测试访问

Linux学习小结_第7张图片

Linux学习小结_第8张图片

如果不能创建wp-config.php请手动创建
[root@sxw ~]# cd /usr/local/nginx/html/
[root@sxw html]# vim wp-config.php ---将提示框中的信息粘贴进去

Linux学习小结_第9张图片

重新访问

Linux学习小结_第10张图片

你可能感兴趣的:(linux,运维,服务器)