目录结构
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.repocurl -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 sshdpgrep 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 8000jobs #查看当前终端后台的工作号
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 <<EOF #可以写到脚本或者文件里面
EOF:开始和结束的标记。
成对使用
结尾的另一个必须定格写。
管道 |
用法: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 ];thenecho "$1连接成功" | tee -a up.txt #tee
elseecho "$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会导致数据全部丢失!因为转换格式要格式化硬盘
基本分区
首先需要先给关机状态虚拟机添加磁盘
[root@sxw.com ~]# 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/sdbn
default p 主分区e 扩展分区
分区号(1-4)1
起始扇区:2048 回车
结束扇区: +{k m g} +5G
保存并退出:w#制作文件系统:ext4 xfs ntfs fat32mkfs.ext4 /dev/sdb1 mkfs.xfs /dev/sdb1
#挂载:创建一个挂载点 mkdir /data1mount /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/hostsFile: ‘/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 +0800Birth: -[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 -mswapon -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.repocurl -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 repobaseurl=file:///mntenable=1gpgcheck=0
3、清理缓存
yum clean all
4、建立缓存
yum makecache
5、列出yum仓库
yum repolist
准备两台服务器
准备环境
#防火墙systemctl stop firewalld && systemctl disable firewalld
#selinuxsetenforce 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-repobaseurl=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 默认的存储引擎,支持外键
[root@mysql-server mysql-5.7.27]# make && make install
如果安装出错,想重新安装:不用重新解压,只需要删除安装目录中的缓存文件CMakeCache.txt
**需要很长时间!**大约半小时
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 ---初始化完成之后,一定要记住提示最后的密码用于登陆或者修改密码
初始化,只需要初始化一次
设置环境变量
[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
1.8、启动mysql
[root@mysql-server ~]# cd /usr/local/mysql
[root@mysql-server mysql]# ./bin/mysqld_safe --user=mysql &启动之后再按一下回车!即可后台运行
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.27Copyright (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.27Copyright (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
大约需要等待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、访问验证
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 distributionCopyright (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
测试访问
如果不能创建wp-config.php请手动创建
[root@sxw ~]# cd /usr/local/nginx/html/
[root@sxw html]# vim wp-config.php ---将提示框中的信息粘贴进去
重新访问