系统服务杂记

一、高级命令扩展

find

# find 搜索路径 [选项 选项的值] ...
-name :根据文件的名称搜索文件,支持*通配符
-type :f代表普通文件、d代表文件夹
-mtime :根据文件的最后修改时间搜索文件  - :几天内  + :几天前
* 通配符
xargs :遇到grep过滤文件的时候需要用到
exec  : 第二种解决方案,效果同上
# find /var/log -name "*.log" -mtime +10 -exec rm -rf {} \;

touch

创建文件的命令,一般会用于修改时间
touch -m -d "2020-03-23 00:00" a.txt

dd创建一个符合条件的空文件

# dd if=/dev/zero of=moon.txt bs=1M count=1   创建一个1M的空文件
if代表输入文件
of代表输出文件
bs代表字节为单位的块大小。
count代表被复制的块。
其中/dev/zero是一个字符设备,会不断返回0值字节。

tree

功能:主要功能是创建文件列表,将所有文件以树的形式列出来
yum -y install tree
tree .

scp

作用是文件传输
-r 目录,递归
上传文件
# scp [选项] linux本地文件路径 用户名@linux主机地址:远程路径
scp 1.txt root@192.168.3.40:  不写路径,会上传到root家目录
下载文件
# scp [选项] 用户名@linux主机地址:资源路径  linux本地文件路径
scp root@192.168.3.40:/root/1.txt /root


date

#date
#date +"%F %T %Y %m %d %H %M %S"
%F : 2020-04-03
%T : 09:45:36
# date -s "2020-04-10"  设置计算机系统时间
# ntpdate cn.ntp.org.cn 手工同步时间

tar备份

自动备份 每天的凌晨2点0分把/etc目录备份一次/tmp目录下,要求把/etc打包成etc.tar.gz格式
# crontab -e
分 时 日 月 周 /usr/bin/tar -zcf /tmp/etc.tar.gz /etc
0 2 * * * /usr/bin/tar -zcf /tmp/etc.tar.gz /etc
0 2 * * * /usr/bin/tar -zcf /tmp/etc-$(date +"\%Y\%m\%d").tar.gz	/etc      #时间,不会覆盖

ln

ln -s /opt/axel/bin/axel /bin/axel 软连接

二、软件包管理

二进制软件包:已编译好,直接安装使用  rpm包
软件源码包:源代码,需要编译-->二进制软件包-->安装使用
二进制源码包 安装--》rpmbuild工具-->rpm包或者源码包--》安装使用

1、源码安装

源码安装需要的软件	
yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel

源码安装一共分为三步(三步走):
第一步:配置过程(配置软件的安装路径)./configure
第二步:编译过程(把软件由源代码编译成可以安装的程序)  make
第三步:安装过程(把编译后的程序进行安装) make install
# ./configure && make && make install
windows下载的安装包,上传到了linux系统中
一、第一种方法,按照默认配置进行
# tar -xf 压缩包
# cd 软件包中
# ./configure && make && make install
二、第二种方法,修改了配置
--prefix=... Directories to put files in /usr/local 软件家目录
--bindir=... $prefix/bin 	命令的目录
--etcdir=... $prefix/etc 	配置文件的目录 httpd => /etc/httpd/httpd.conf
--mandir=... $prefix/share/man man	文档路径
--locale=... $prefix/share/locale 	语言编码

# tar -xf 压缩包
# cd 软件包中
# ./configure --prefix=/opt/axel   这里将/usr/local地址换到了/opt/axel
#make (这里需要gcc,yum安装的时候报错就使用这个命令 yum -y install gcc* --skip-broken)
#make install
lsof -i:80  查看80端口
测试
这里因为改变了软件家目录,系统查不到axel命令
①软连接  ln -s /opt/axel/bin/axel /bin/axel  (这里要看一下路径)
②环境配置 
 1.查看当前的系统变量 echo $PATH
 2.将axel目录添加进去 vim /etc/profile,最后一行加上下面这一句
 export PATH=$PATH:/opt/axel/bin
 3.source /etc/profile  刷新
 除了vim添加,还可以使用echo追加
 #echo 'export PATH=$PATH:/opt/axel/bin' >> /etc/profile
 #source /etc/profile	

2、rpm安装

安装: rpm -ivh
卸载:  rpm -e    [--nodeps强制]
查询: rpm -qa | grep 
升级: rpm -Uvh 

3、yum安装

源的作用:软件包管理器



更换本地源 
① 使用光盘镜像作为YUM源仓库
② 下载很多软件,使用软件包作为YUM源仓库
1.更换镜像源
2.将光盘挂载到某个目录下
3.把光盘挂载添加到开机启动文件中
    # chmod +x /etc/rc.local
    # echo 'mount -o ro /dev/sr0 /mnt' >> /etc/rc.local
4.编写本地yum源仓库
# cd /etc/yum.repos.d/
创建一个以*.repo结尾的文件,名称任意
# vim CentOS-Media.repo
[c7-media]                    [仓库标识名称],名称任意,在一个文件中可以拥有多个标识
name=local yum                仓库名称
baseurl=file:///mnt           仓库的路径,支持多种格式,file://本地路径,ftp://,http://或https://
gpgcheck=0                    gpgcheck=gpg密钥,0不检测,1检测(下方还要定义一个gpgkey=密钥连接)
enabled=1                     enabled=是否启动当前仓库,值可以0,也可以是1,默认为1,代表启动仓库
#基本源改名字
#mv CentOS-Base.repo CentOS-Base.repo.1
# yum clean all
# yum makecache
# yum repolist all
# yum list				查看仓库里的软件包



更换网络源    yum源--阿里云
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
yum install epel-release -y  epel.repo文件 => 扩展源,是对官方YUM源的一个补充


特殊软件源
# cd /etc/yum.repos.d
# vim nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

三、服务

1.ssh

sshd服务数据传输是加密的,可以防止信息泄漏,数据传输是压缩的,可以提高传输速度
ssh服务有远程链接和sftp服务
ssh服务中的sftp传输数据比ftp更加安全可靠
搭建sshd服务
1.关闭防火墙
# 临时关闭  systemctl stop firewalld
# 关闭开机自启动  systemctl disable firewalld
# 关闭selinux
selinux是个比防火墙更高级的网络防护
# 临时关闭  setenforce 0
# 查看  getenforce 
# 修改配置文件  永久关闭  vim /etc/selinux/config      SELINUX=disabled
2.配置yum 源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
3、openssh软件的安装
# yum install openssh -y
# rpm -qa |grep openssh  或# yum list installed |grep openssh  检查openssh是否安装成功
#rpm -qf /usr/sbin/sshd
#rpm -qf /usr/bin/ssh
4、查看并修改ssh服务端的配置文件
# man 5 sshd_config
RealServer:禁止root账号远程登录
PermitRootLogin	=> yes or no,默认为yes 代表允许通过root账号远程登录此服务器
38行 PermitRootLogin no
5、sshd服务管理
# systemctl restart sshd	=>   重启
# systemctl status sshd		=> 	 状态
# systemctl stop sshd		=>   停止
# systemctl start sshd		=>   启动
# systemctl enable sshd		=>	 开机自启动
# systemctl disable sshd	=> 	 开机不自启
# ps -ef |grep sshd			=>	 进程
或# netstat -tnlp |grep sshd	=> 	 端口 (lsof -i:端口号) 
或# ss -naltp |grep sshd
6.更改SSH默认端口
# vim /etc/ssh/sshd_config
17行 Port 3712
7.重启SSH服务
# systemctl restart sshd 或# systemctl reload sshd    reload不停止现有业务,只是重新加载sshd对应的配置文件
8.禁域名
#vi /etc/ssh/sshd_config 
115 #UseDNS yes
#把上面的yes 改成no 禁止dns查询,加快连接sshd服务的速度
9.验证指纹
# vim /etc/ssh/ssh_config
35行 StrictHostKeyChecking no

root免密登录
1.在192.168.1.11上生成密钥对
#ssh-keygen -t dsa
2.查看生成的密钥对
#cd .ssh
#ls
3.将公钥发送给服务器192.168.1.12
ssh-copy-id -i .ssh/id_dsa.pub root@192.168.1.12
4.在服务器192.168.1.12上查看发送过来的公钥
#cd .ssh
#ls  测试可以远程执行命令

5.在192.168.1.11上免密码ssh登陆
#ssh 192.168.1.12 
echo $? 测试上面的命令是否执行成功,结果是0表示成功,非0表示识别


普通账号免密登录
su - girl
ssh-keygen -t dsa
ssh-copy-id -i .ssh/id_dsa.pub  girl@192.168.1.12   将公钥发送给各个服务器
ssh girl@192.168.1.12 /usr/sbin/ip addr  测试可以远程执行命令
scp /etc/hosts girl@192.168.1.12:/tmp/   免密码传输文件
scp /etc/hosts girl@192.168.1.12:/boot/   权限被拒绝了或者说权限不够导致的

2.rsync

1.本地同步
# rsync -av /dir1/ /dir2		=>   把/dir1目录中的所有文件拷贝到/dir2目录中
# rsync -av /dir1 /dir3			=>   把/dir1目录整体同步到/dir3目录中
2.远程同步
# rsync .tmux.conf .vimrc .tcshrc root@192.168.8.137:     上传
# rsync -av -e "ssh -p 2222" root@121.43.54.39:/root/xxx.txt 下载
3.系统服务
# natstat naput | grep 2222 端口监听
# systemctl start rsyncd
# /usr/bin/rsync --daemon 后台启动
4.周期性任务备份文件 主机A备份到主机B
1.关防火墙(后期可以设置防火墙端口开放)
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
2.准备需要备份的目录--A主机需要备份的
# mkdir /app/java_project -p
# mkdir /app/java_project/aa{1..3}
# touch /app/java_project/file{1..9}.java
3. 服务器的模块设置--A主机模块
# vim /etc/rsyncd.conf
[app]
path=/app/java_project
log file=/var/log/rsync.log

# systemctl start rsyncd
# ps -ef |grep rsync
# netstat -tnlp |grep rsync
4.B主机进行创建备份目录
# mkdir /backup/app1_java -p
# rsync -a root@192.168.1.11::app   测试
-a:获取rsync服务对应的同步目录标签
# rsync -av root@192.168.1.11::app /backup/app1_java  下载文件到本地
5.编写周期任务--B主机进行编写
# crontab -e
3 1 * * * /root/rsync_java.sh 
# vim rsync_java.sh
#!/bin/bash
rsync -av root@192.168.1.11::app /backup/app1_java &>/dev/null #表示错误重定向和正确重定向

# chmod +x rsync_java.sh
rsync集合inotify工具
1.主机A-->主机B(备份机)
A主机
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
# tar xf inotify-tools-3.13.tar.gz -C /usr/local/
# cd /usr/local/inotify-tools-3.14
# ./configure
# make 
# make install
# vim inotify.sh

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/java_project |while read events
do
	rsync -av --delete /app/java_project/ root@192.168.8.138:/backup/app1_java 2>&1
	echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
done

# chmod +x inotify.sh
# nohup ./inotify.sh  &
& : 让inotify.sh在计算机后台运行,可以使用jobs命令查看,kill %编号结束,当我们退出终端时,这个执行会自动结束
nohup : 让程序一直在后台运行,即使我们关闭了终端
# cat /var/log/rsync.log  查看rsync.log日志文件


2.主机b-->主机A(备份机)
A主机
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
# tar xf inotify-tools-3.13.tar.gz -C /usr/local/
# cd /usr/local/inotify-tools-3.14
# ./configure
# make 
# make install
# vim inotify.sh

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /backup/app1_java |while read events
do
	rsync -av --delete /backup/app1_java root@192.168.1.12:/app/java_project 2&>1
	echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
done

# chmod +x inotify.sh
# nohup ./inotify.sh  &

3.ftp

一、搭建ftp服务--创建指定用户在指定目录
1.关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled

2.配置yum源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache

3.服务器安装vsftpd软件
# yum install vsftpd -y
# systemctl start vsftpd
# systemctl enable vsftpd

4.配置
# grep -v ^# /etc/vsftpd/vsftpd.conf>vsftpd.conf.1 
# vim vsftpd.conf.1
修改内容
anonymous_enable=NO    #禁止匿名用户访问	
local_enable=YES
write_enable=YES
local_root=/data/wu    #指定账号访问的目录
chroot_local_user=YES   #限定wu/123只能在/data/wu目录下活动
allow_writeable_chroot=YES  #版本问题,不添加会报错
local_umask=022
dirmessage_enable=YES    #启用消息功能
xferlog_enable=YES       #开启或启用xferlog日志
connect_from_port_20=YES   #支持主动模式(默认被动模式)
xferlog_std_format=YES
listen=YES                #ftp服务独立模式下的监听

pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO       #开启白名单,黑名单
tcp_wrappers=YES

排错指南
重启vsftpd服务时,报错
#systemctl status vsftpd 下面是failed ,
这里检查两个,一个是配置文件vsftpd.conf 一个是进程21
losf -i:21  直接kill   
配置文件检查里面是否有写错的地方,如果没有明显错误,就检查有没有空格,每行的后面也要检查

#cat vsftpd.conf.1 >/etc/vsftpd/vsftpd.conf  
5.创建可登录用户和创建家目录--测试
# useradd wu
# useradd zs 
# useradd lisi
# echo 123 |passwd --stdin wu
# echo 123 |passwd --stdin zs
# echo 123 |passwd --stdin lisi 
# mkdir /data/wu -p
如果无法上传:# setfacl -R -m u:wu:rwx /data/wu	

6.重启服务
# systemctl restart vsftpd
7.特殊权限用户
# vim /etc/vsftpd/vsftpd.conf
105行 chroot_list_enable=YES					    开启用户列表文件
107行 chroot_list_file=/etc/vsftpd/chroot_list	指定用户列表文件
echo wu >> /etc/vsftpd/chroot_list        代表wu这个账号不会被禁锢在指定目录
# systemctl restart vsftpd
二、windows链接和linux链接,上传下载文件
windows
浏览器、文件管理器
ftp://192.168.8.137   
要可以上网的地址
linux
1.下载ftp以及lftp
yum install ftp lftp -y
ftp 192.168.8.137
三、ftp客户端管理工具
1.ftp
单个文件:
上传: put 文件名
下载: get 文件名
多个文件:
上传多个文件(支持通配符):mput 文件名1 文件名2
下载多个文件(支持通配符):mget 文件名1 文件名2
整个目录:
上传文件夹:mirror -R 文件夹名
下载文件夹:mirror 下载文件夹存放到本地目录的位置
2.lftp工具:批量操作
针对某个命令求帮助:help + 命令
1、登录ftp
lftp用户名:密码@ftp地址:传送端口(默认为21)
lftp wu:123@192.168.8.137回车
2、下载文件
下载文件前首先要设置还本地的目录,用来存放下载的文件
lcd /home/ivy/doc   ##设置本地存放目录get  filename (如1.txt,ppt, pdf) 
//下载单个文件mget *.txt                   
//下载一组文件,也即是批量下载所有的txt文件
get -c 1.txt                    //断点续传下载
mget -c *.txt                   //断点续传
pget -c n 10 file.dat  //最多10个线程以允许断点续传的方式下载file.dat
mget -d dirname/(通配符*)    //下载目录
mirror dirname         //将目录的整个下载下来,子目录也会自动复制到,本地自动建立目录

3、 上传文件put  1.txt
mput *.txt
mirror -R miao //上传整个目录
mput -d dirname/*   #上传目录
基本使用方法:
1)、下载服务器端文件:
# mirror –vn RCD LCD   //RCD为远程路径,LCD为本地路径
2)、上传文件:
# mirror –R LCD RCD4.从远程主机上下载目录文件通过sftp下载目录:
lftp sftp://user@host -p port         lftp :> mirror my_path

四、黑名单白名单,网络限速,禁止ip,网段
1.ip
# vim /etc/hosts.deny
服务程序:主机
vsftpd:all                        全部拒绝
vsftpd:all EXCEPT 192.168.0.2    拒绝所有除了192.168.0.2  
vsftpd:192.168.0.254			  拒绝单个IP地址
vsftpd:192.168.0.254:allow  
//以上是允许192.168.0.254访问,类似/etc/hosts.allow里增加vsftpd:192.168.0.254
vsftpd:192.168.0.0/255.255.255.0   拒绝某个网段
vsftpd:192.168.0.0/255.255.255.0 EXCEPT 192.168.0.254   拒绝某个网段,但是除了某个ip地址
注意:子网掩码不支持192.168.0.0/24这种写法
vim /etc/hosts.deny
vsftpd,sshd:10.1.1.1
2.黑名单,白名单
ftpusers		黑名单	
user_list		默认是黑名单(可以成为白名单)
user_list要成为白名单,需要再配置文件里增加:
userlist_deny=NO
注意:如果user_list是白名单,那么必须在该文件里的用户才可以访问ftp服务。
3.限制流量
# vim /etc/vsftpd/vsftpd.conf
local_max_rate=0
0代表不限速

local_max_rate=数值 + 字节
local_max_rate=1024K

4.NFS

网络文件系统nfs  ------------本地文件系统 ntfs  fat32  ext4  ,xfs 
NFS(Network File System)网络文件系统,主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux
没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用
支持多节点同时挂载及并发写入
企业应用:为集群中的web server提供后端存储(做静态资源服务器)
搭建NFS服务器(用于静态资源的存储如图片、视频、附件)
rpcbind : 负责NFS的数据传输,远程过程调用  ==tcp/udp协议 端口111==
nfs-utils :控制共享哪些文件,权限管理
RPC(Remote Procedure Call Protocol):
远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。

nfs服务器实验
操作步骤如下:
nft服务器操作
在192.168.8.137上配置nfs服务端
1.环境准备
关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
关闭SELinux
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled

2.配置YUM源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
# yum -y install net-tools  #安装ifconfig命令
#ifconfig ens33 192.168.1.12

3.安装nfs服务和rpcbind服务
# yum -y install nfs-utils rpcbind -y
# rpm -qa | egrep "nfs|rpcbind"
# rpm -q rpcbind
# rpm -aq|grep ^nfs
# rpcinfo -p localhost  查看

4. 先启动rpcbind服务 监听的端口号是:111
# systemctl start rpcbind 
# systemctl status rpcbind|grep active
   Active: active (running) since 五 2021
# rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    启动nfs服务
# systemctl start nfs
# systemctl enable nfs
# systemctl enable rpcbind
5.编辑nfs的主配置文件有两个
/etc/nfs.conf   /etc/exports
# mkdir /data
# vi /etc/exports   
/data 192.168.8.0/24(rw,sync,no_root_squash)
(这里写的是网段)
rw表示客户端对/data目录的权限是可读可写
sync表示客户端对/data目录的写入要马上同步到磁盘,以防止数据的丢失
开始存储到内存,sync的意思是将内存的数据立刻存储到硬盘
no_root_squash: root不用不需要转换身份
什么叫异步?
写数据到缓存,直到缓存满了,才会向硬盘进行写入操作

6. 重启服务
# systemctl reload nfs

优雅的重启 跟重启的区别

命令上:/etc/init.d/nfs reload
重启:/etc/init.d/nfs restart
Reload 其实是不中断对外提供服务的基础上,重新加载配置文件
给客户的感觉 非常 优雅 nice 
Restart 缺点是中断了对外的提供的服务,重新加载配置文件
生产环境下,一般要reload

7.测试
在服务器上自我测试共享是否成功了
# showmount -e localhost
Export list for localhost:
/data 192.168.1.0/24
表示测试成功,服务端配置完毕

共享权限的问题
客户端访问nfs服务器使用的账号是 nfsnobody 这个账号对于/data目录由两种权限
A.系统权限 为 只读和执行
B.nfs权限  为 可读可写
综合以上两点,默认情况下,客户端访问/data是没有写权限的。
下面是关于权限的设置
# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
这个账号是nfs程序的默认账号
# chown -R nfsnobody.nfsnobody /data

客户机操作
在192.168.8.138上配置nfs客户端
1.配置ip地址和yum源 并安装rpcbind
ip为192.168.8.138 
yum源配置为网络源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
# yum install -y rpcbind
# mount /dev/sr0 /media/cdrom   #本地光盘做yum源,不需要
# yum -y install showmount
# showmount -e 192.168.8.137
Export list for 192.168.8.137:
/data 192.168.8.0/24
表示测试成功了
3. 下面是挂载
# mkdir /data1
# mount -t nfs 192.168.8.137:/data  /data1
# echo "mount -t nfs 192.168.8.137:/data /data1" >> /etc/rc.local
# chmod +x /etc/rc.d/rc.local
测试在客户端上是否能够创建文件删除文件等
#cd /data1
# touch {1..10}
# ls
1  10  2  3  4  5  6  7  8  9

之后在nfs服务器上去查看一下有没有刚才创建的文件
如果有表示nfs没问题
[root@hd2 ~]# cd /data
[root@hd2 ~]#ls
1  10  2  3  4  5  6  7  8  9

实现自动挂载 --这个不建议使用,适合本地实验,网络中使用会有各种报错
[root@hd1 ~]#vim /etc/fstab
192.168.1.12:/data	/data1	nfs4	defaults	0 0
[root@hd1 ~]#mount -a

NFS的配置文件
# vim /etc/exports   (vim /etc/nfs.conf)
共享目录   共享选项
/share    *(ro,sync)
/public	  *(ro,sync)

共享主机:
*   :代表所有主机
192.168.0.0/24:代表共享给某个网段192.168.0.1 ~ 192.168.0.254
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同网段
192.168.0.254:共享给某个IP
*.hd.cn:代表共享给某个域下的所有主机

共享选项:
ro:只读
rw:读写
sync:实时同步,直接写入磁盘(安全性最高)
async:异步,先缓存数据在内存然后再同步磁盘(效率最高,但是有丢失文件风险)
anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在
anongid:设置访问nfs服务的用户的gid
root_squash :默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人nfs-server端是它自己,client端是nobody。(访问NFS服务器时,映射为匿名账号)
no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。(访问NFS服务器时,映射为root管理员账号)
all_squash: 不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody

说明:
anonuid和anongid参数和all_squash一起使用。
all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuid和anongid进而指定文件的拥有者和所属组

四、第三方软件

1、MYSQL

一、MYSQL安装配置
二进制安装
1.关闭防火墙
# systemctl stop firewalld
# systemctl disable firewalld
# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled
2.更换阿里源
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# yum clean all
# yum makecache
3.安装扩展软件(bash-completion自动补全、vim编辑器、net-tools网络工具包以及ntpdate时间同步工具)
# yum install bash-completion vim net-tools ntpdate -y
# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
# yum install libaio -y
4.上传mysql安装包
# tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
5.最简单的安装
#useradd -r  -s /bin/false mysql #创建程序账号
#tar -xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz #解压,跟上面的命令重复了
#mv mysql-5.7.31-linux-glibc2.12-x86_64 /usr/local/mysql #移动
#cd /usr/local/mysql/
#mkdir mysql-files   #创建一个目录
#chown mysql:mysql mysql-files/
#chmod 750 mysql-files/
#rm -rf /etc/my.cnf  #删除主配置文件,不删除的话可能会导致初始化失败
#bin/mysqld --initialize --user=mysql  #初始化
   A temporary password is generated for root@localhost: fuYKYm*ds5sD #产生了随机密码

#bin/mysql_ssl_rsa_setup 
#bin/mysqld_safe --user=mysql &   #启动数据库并掉入后台执行
#cp support-files/mysql.server  /etc/init.d/mysql.server  #设置mysql的启动脚本
#netstat -nplt |grep 3306  #查看端口号

#bin/mysql -uroot -p    #登录mysql数据库

#mysql> set password="123";  #设置密码为123
#mysql> flush privileges;    #刷新权限

#把mysql客户端命令添加到环境变量,以后随时可以访问
# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
# source  /etc/profile 

#验证服务是否能够正常关闭和启动

# service mysql.server start 
Starting MySQL. SUCCESS! 

# service mysql.server stop
Shutting down MySQL.. SUCCESS! 

#忘记密码怎么办?

#service mysql.server stop  #关闭数据库
# mysqld  --skip-grant-tables  --user=mysql &
# mysql #直接登陆数据库系统,不需要输入密码

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('123456')
WHERE user = 'root' AND host = 'localhost';
mysql> FLUSH PRIVILEGES;

#设置开机自启动(centos6)
# chkconfig --add mysql.server   #将mysql.server添加到chkconfig管理服务中
# chkconfig mysql.server  on     #设置mysql.server 在3、5级别是开机启动是on的
# chkconfig --list               #查看chkconfig管辖的服务启动情况。
mysql.server   	0:关	1:关	2:开	3:开	4:开	5:开	6:关
netconsole     	0:关	1:关	2:关	3:关	4:关	5:关	6:关
network        	0:关	1:关	2:开	3:开	4:开	5:开	6:关

#手动添加修改mysql的主配置文件(默认5.7之后的二进制版本没有my.cnf)
# vim /usr/local/mysql/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock

===============================我是分割线===========================
选项说明:
[mysqld]	代表针对服务器端进行配置
basedir		代表数据库的安装目录
datadir		代表数据目录,以后专门用于存放数据文件的(核心目录)
socket		代表套接字文件,专门为客户端与服务器端连接提供一个桥梁 ip+端口

# service mysql.server restart
6.自定义安装
第一步:创建一个数据库专用账号mysql(其所属组也为mysql)
# useradd -r -s /sbin/nologin mysql
# id mysql
第二步:清空系统中的原有mariadb的配置文件(/etc/my.cnf)
# rm -rf /etc/my.cnf
第三步:把mysql解压后的压缩包(GBLIC版本)移动到/根目录下,然后更名为mysql_3306
# mv mysql-5.7.31-linux-glibc2.12-x86_64 /mysql_3306
第四步:切换到mysql工作目录/mysql_3306,创建一个mysql-files
# cd /mysql_3306
# mkdir mysql-files
第五步:更改mysql-files权限
# chown mysql:mysql mysql-files
# chmod 750 mysql-files
第六步:初始化数据库(可以实现数据库的初始化,而且会产生一个==随机密码==)
# bin/mysqld --initialize --user=mysql --basedir=/mysql_3306
    选项说明:
    --initialize 	 初始化(真正开始干活)
    --user=mysql 	 以mysql用户的身份初始化数据库,产生文件都是mysql作为拥有者
    --basedir=xxx    mysql其安装目录,非常重要
    
    运行完毕后,观察最后一行,保存root账号的密码,以备后期使用。
    2020-08-24T06:46:24.889735Z 1 [Note] A temporary password is generated for root@localhost: (cn_jS+*n2wh

经验之谈:想查看mysql软件有没有初始化成功,主要看mysql目录下有没有产生data文件夹且文件夹中至少要有一个mysql的文件夹。
第七步:设置安全加密连接(SSL),数据传输会采用加密形式,适合敏感数据
# bin/mysql_ssl_rsa_setup --datadir=/mysql_3306/data
第八步:启动MySQL数据库
# cp support-files/mysql.server /etc/init.d/mysql_3306
注:默认情况下,GBLIC版本的数据库要求安装到/usr/local/mysql目录,其mysql.server脚本中对应的目录也是/usr/local/mysql,这会导致mysql无法启动。所以可以更改其basedir以及datadir两个变量
# vim /etc/init.d/mysql_3306
    46行 basedir=/mysql_3306
    47行 datadir=/mysql_3306/data
第九步:启动MySQL数据库(不能使用systemctl,只能使用service)
# service mysql_3306 start
    Starting MySQL.Logging to '/mysql_3306/data/mysql.itcast.cn.err'.
特别说明:当MySQL启动成功后,其日志会自动写入到data数据目录中的主机名称.err文件中,这个文件一定要多看,涉及MySQL无法启动、启动报错,其详细的原因99%在.err文件中可以找到问题所在!
7.常见问题
问题1:为什么一定要删除/etc/my.cnf文件,不删除有何影响?
答:/etc/my.cnf文件是操作系统为mariadb软件预留的配置的文件,之所以一定要删除这个文件,主要原因在于数据库在初始化时,首先在自己的安装目录下寻找有没有my.cnf配置文件,如果有,会自动根据里面的配置信息进行初始化。如果找不到,则到/etc目录下寻找my.cnf文件,如果有,依然会按照其内部的配置进行初始化,但是由于/etc目录下的my.cnf文件是mariadb的,这会导致我们的初始化如果按照mariadb的配置,会导致初始化失败。

问题2:mysql-files文件夹到底干什么的?
答:目前mysql-files没有什么用,但是你必须要创建,因为GLIBC属于二进制软件包,其很多配置已经默认了,包括mysql-files文件夹,如果没有这个文件夹可能导致mysql无法启动。
mysql-files:主要用于数据文件的导入与导出(备份与还原),MySQL的备份会产生一个文件,可以xxx.sql或xxx.txt。mysql-files就是导入与导出时,所指定的默认目录。

问题3:到底怎么判断数据库是否初始化成功了?
答:数据库的安装容易出错的地方就是初始化,一旦初始化失败了,数据库100%启动报错。如何确认数据库是否初始化成功了呢?主要看安装目录下有没有生成一个==data==的文件夹。
一定要看准一点,文件夹名称叫data(数据目录),不是date(时间)

问题4:为什么一定要把mysql.server放在/etc/init.d目录下,不放行不行?
答:不放也可以,但是这个时候就不能使用service命令启动以及添加到开机启动项了。只能通过bin/mysqld_safe脚本启动数据库。
/etc/init.d是CentOS6以及早期版本中的服务脚本目录,只要把Shell启动脚本放在这个目录下,你就可以使用service进行管理。

问题5:为什么一定要改变/etc/init.d/mysql_3306中的basedir与datadir?
答:GLIBC版本属于二进制版本,默认已经配置了很多内容,包括默认的安装路径/usr/local/mysql,一旦你的mysql没有安装在这个目录下,则必须手工设置basedir以及datadir其位置,否则脚本无法启动mysql程序

问题6:如何让mysql自动启动?
    # chkconfig --list				查询系统中的所有开机启动项
    # chkconfig --add mysql_3306    必须与/etc/init.d目录下的脚本名称一致
    # chkconfig mysql_3306 on		把2345四种模式全部开启(3字符界面,5图形界面)
CentOS6及以前版本中,控制服务的开机启动的

2.mysql删除方法

查看rpm安装的mysql
# rpm -qa | grep -i mysql
MySQL-devel-5.6.23-1.linux_glibc2.5
MySQL-client-5.6.23-1.linux_glibc2.5
MySQL-server-5.6.23-1.linux_glibc2.5
1.关闭mysql服务
# service mysql status
# service mysql stop
# service mysql status  查看一下
2.查看mysql对应文件夹信息
# find / -name mysql
3.删除mysql各种组件
# rpm -ev MySQL-devel-5.6.23-1.linux_glibc2.5
这里删除所有rpm -qa | grep -i mysql 到的所有mysql
4.删除对应的文件夹
# whereis mysql
# find / -name mysql
删除所有的上面两个命令筛选出来的文件
rm -rf
5.删除用户和组
# more /etc/passwd | grep mysql
# more /etc/shadow | grep mysql
# more /etc/group | grep mysql
# userdel mysql
# groupdel mysql
6.确认是否删除
# rpm -qa | grep -i mysql

如果是二进制下载的MYSQL,用rpm是找不到的
1.检查MySQL服务并关闭服务进程。
ps -ef | grep mysql  从进程里面查看mysql服务
# /etc/init.d/mysql.server status   启动的话关掉
# /etc/init.d/mysql.server stop
# /etc/init.d/mysql.server status  查看状态
2.查找MySQL的安装目录并彻底删除
# whereis mysql
# find / -name mysql
# rm -rf 上面两个命令检索出来的所有文件
3.删除一些配置文件
配置文件一般有/etc/my.cnf 或/etc/init.d/mysql.server,视具体安装配置情况而定。
4.删除MySQL用户以及用户组
# id mysql
# userdel mysql
# groupdel mysql


3、sql语句总结

数据库
创建
create database db1;
create database db1 default charset gbk;
删除
drop database db1;
修改
alter database db1 default charset=gbk;
查找
show databases;
show create database db1;


表
创建
mysql> create table tb_admin(
	id tinyint,
    username varchar(20),
    password char(32)
) engine=innodb default charset=utf8;
删除
drop table 数据表名称;
修改
alter table tb_article add addtime date after content;
alter table tb_admin change username user varchar(40);
alter table tb_admin modify user varchar(20);
alter table tb_article drop 字段名称;
alter table tb_article engine=myisam;
alter table tb_admin default charset=gbk;
查找
show tables;
show create table 数据表名称;
desc 数据表名称;


数据
mysql> insert into tb_user values (1,'李向阳',24,'男','广东省广州市');
mysql> insert into tb_user(id,username,age) values (2,'马鹏',23);
mysql> select * from 数据表名称 [where 查询条件];
mysql> select id,username,age from 数据表名称 [where 查询条件];
mysql> update tb_user set gender='男',address='广东省深圳市' where username='马鹏';
mysql> update tb_user set age=age+1;
mysql> delete from tb_user where id=1;
mysql> delete from 数据表;
或
mysql> truncate 数据表;

类型
整数
mysql> create table tb_student(
	id mediumint unsigned not null auto_increment,
	username varchar(20),
	age tinyint unsigned,
	mobile char(11),
	primary key(id)
) engine=innodb default charset=utf8;

小数 
  浮点类型   FLOAT单精度浮点数精确到约7位小数,DOUBLE双精度浮点数精确到大约15位小数
  定点类型   salary DECIMAL(5,2)
  mysql> create table tb_staff(
	id smallint unsigned not null auto_increment,
	username varchar(20),
	salary decimal(11,2),
	addtime date,
	primary key(id)
) engine=innodb default charset=utf8;

字符串
CHAR类型   定长,长度范围是0到255之间的任何值,一个中文在utf8字符集中占用3个bytes、gbk占用2个bytes
VARCHAR类型  VARCHAR(M)字段存储实际是从第二个字节开始存储,然后用1到2个字节表示实际长度,剩下的才是可以存储数据
mysql> create table tb_news(
	id int not null auto_increment,
	title varchar(80),
	description varchar(255),
	addtime date,
	primary key(id)
) engine=innodb default charset=utf8;
TEXT类型   TEXT代表文本类型的数据
mysql> create table tb_goods(
  id int not null auto_increment,
  name varchar(80),
  price decimal(11,2),
  content text,
  primary key(id)
) engine=innodb default charset=utf8;
其他类型
BLOB:保存二进制的大型数据(字节串),没有字符集,eg:图片、音频视频等。
实际运维工作中,很少将文件直接保存在数据库端,一般文件的存储都是基于路径进行操作的。
ENUM枚举类型:多选一,从给定的多个选项中选择一个,如gender  enum('男','女','保密')
SET集合类型:多选多,从给定的多个选项中选个多个,如hobby set('吃饭','睡觉','打豆豆')

日期时间类型
now()
㈠ DATE类型(年--日)
㈡ DATETIME(年月日小时分钟秒)
㈢ TIMESTAMP(年月日小时分钟秒)
㈣ TIME(小时:分钟:秒)
㈤ YEAR
mysql> create table tb_article1(
	id int not null auto_increment,
	title varchar(80),
	description varchar(255),
	addtime datetime,
	primary key(id)
) engine=innodb default charset=utf8;

mysql> create table tb_article2(
	id int not null auto_increment,
	title varchar(80),
	description varchar(255),
	addtime timestamp,
	primary key(id)
) engine=innodb default charset=utf8;

mysql> insert into tb_article1 values (null,'mysql从入门到放弃','mysql很好很强大...',now());

sql查询语句
where
mysql> select * from tb_student where name like '关%';
mysql> select * from tb_student where name like '%蝉%';   %匹配多
mysql> select * from tb_student where name like '_云';    _匹配一个
mysql> select * from tb_student where id=3;
mysql> select * from tb_student where age>25;
mysql> select * from tb_student where gender<>'男';    <>和!=一个意思
mysql> select * from tb_student where id=1 or id=3 or id=5;
mysql> select * from tb_student where age>=18 and age<=25;
mysql> select * from tb_student where age between 18 and 25;
mysql> select * from tb_student where id in (2,4,6);
mysql> select distinct age from tb_student;  去掉重复的年龄

group by
mysql> select count(*) from tb_student;   
mysql> select max(age) from tb_student;
mysql> select min(age) from tb_student;
mysql> select sum(id) from tb_student;
mysql> select avg(age) from tb_student;
mysql> select gender,count(*) from tb_student group by gender;
mysql> select gender,max(age) from tb_student group by gender;

having
mysql> select * from tb_student having age>20;
mysql> select subject,count(*) from tb_student group by subject;
mysql> select subject,count(*) from tb_student group by subject having count(*)>3;

order by
mysql> select * from 数据表名称 ... order by 字段名称 asc;
mysql> select * from 数据表名称 ... order by 字段名称 desc;
mysql> select * from tb_student order by age desc;

limit
mysql> select * from 数据表名称 ... limit number; 查询满足条件的number条数据
或
mysql> select * from 数据表名称 ... limit offset,number; 从偏移量为offset开始查询,查询number条记录
offset的值从0开始
mysql> select * from tb_student order by age desc limit 1;
mysql> select * from tb_student limit 1,2;
mysql> select * from tb_student limit 0,2;
mysql> select * from tb_student limit 2,2;

多表查询
UNION联合查询
mysql> select * from tb_student1 union select * from tb_student2;

交叉查询
mysql> select */字段列表 from 数据表1,数据表2;
mysql> select */字段列表 from 数据表1 cross join 数据表2;
mysql> select * from tb_c cross join tb_goods;

内连接查询(重点)
mysql> select 数据表1.字段列表,数据表2.字段列表 from 数据表1 inner join 数据表2 on 连接条件;
mysql> select tb_goods.*,tb_c.name from tb_goods inner join tb_c on tb_goods.cid=tb_c.pid;

外连接查询(重点)
select 数据表1.字段列表,数据表2.字段列表 from 数据表1 left join 数据表2 on 连接条件;
select 数据表1.字段列表,数据表2.字段列表 from 数据表1 right join 数据表2 on 连接条件;
mysql> select tb_goods.*,tb_c.name from tb_goods left join tb_c on tb_goods.cid=tb_c.pid;

别名机制:简化内外连接
mysql> select tb_goods.*,tb_c.name from tb_goods left join tb_c on tb_goods.cid=tb_c.pid;
① mysql> select * from tb_goods left join tb_c;
起别名
② mysql> select * from tb_goods g left join tb_c c;
写on条件
③ mysql> select * from tb_goods g left join tb_c c on g.cid=c.id;
筛选字段
④ mysql> select g.*,c.name from tb_goods g left join tb_c c on g.cid=c.id;

磁盘管理

磁盘划分的思路
进入分区表 新建分区,fdisk /dev/sdb
更新分区表   partx -a /dev/sdb 或 partprobe -a /dev/adb
格式化分区->文件系统 mkfs.ext4 /dev/sdb1
挂载使用 -> mount 【开机自动挂载|autofs自动挂载】
# blkid /dev/sdb1				//查看设备的UUID和文件系统类型
fdisk分区
# lsblk
# df -h  查看正在挂载的设备情况
# fdisk -l		查看当前系统的所有设备分区情况
# fsck -f /dev/sdb2		强制检验/dev/sdb2上文件系统
[root@web ~]# fdisk -l /dev/sdb
使用fdisk命令分区
[root@web ~]# fdisk /dev/sdb
配置
# lsblk 查看分区情况
刷新分区表信息
# partx -a /dev/sdb  或
# partprobe  /dev/sdb
格式化分区
[root@web ~]# mkfs.ext4 /dev/sdb1
[root@web ~]# yum -y install dosfstools   需要mkfs.vfat命令,安装软件
[root@web ~]# mkfs.xfs /dev/sdb2
创建新的挂载点
[root@web ~]# mkdir /u01
[root@web ~]# mkdir /u02
挂载使用
[root@web ~]# mount /dev/sdb1 /u01
[root@web ~]# mount /dev/sdb2 /u02
挂载
# blkid /dev/sdb1				//查看设备的UUID和文件系统类型
# e2label /dev/sdb2 disk2        设置卷标


GPT分区表
#使用parted命令对/dev/sdb进行分区
[root@www ~]# parted /dev/sdb    
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel    #输入mklabel指定分区类型     
新的磁盘标签类型? gpt    #输入分区类型                            
(parted) mkpart        #创建分区                                                     
分区名称?  []? dp1      #分区名字                                                 
文件系统类型?  [ext2]? xfs   #文件按系统类型为xfs                                             
起始点? 1                    #输入1M或者0%                                            
结束点? 50%                                                              
(parted) print     #打印分区情况    
(parted) quit   #退出分区                                                             
信息: You may need to update /etc/fstab.

[root@www ~]# mkfs.xfs /dev/sdb1
[root@www ~]# mkdir /data5
[root@www ~]# mount /dev/sdb1 /data5

逻辑卷
1、概念:
逻辑卷管理器
2、作用:
弹性的调整文件系统的容量
注意:/boot分区用于存放引导文件,不能基于LVM创建
3、组成:
物理卷(PV)
和磁盘分区具有相同功能的逻辑组件,是LVM的基本存储逻辑块
卷组(VG)
由一个或多个物理卷所组成的存储池
逻辑卷(LV)
类似于磁盘分区,建立在卷组之上,是一个标准的块设备,可以创建文件系统
	物理扩展块(PE)
		是LVM机制中最小的数据存储单位,LVM中的所有数据写入都是使用PE完成的。
4、逻辑卷管理:
	a、创建逻辑卷
		创建物理卷:
		[root@localhost ~]# pvcreate /dev/sdb{1,2,3,5} /dev/sdc{1,2}
		[root@localhost ~]# pvscan		
		[root@localhost ~]# pvdisplay
		创建卷组:
		[root@localhost ~]# vgcreate vg0 /dev/sdb{1,2} /dev/sdc{1,2}
		[root@localhost ~]# vgscan
		[root@localhost ~]# vgdisplay
		创建逻辑卷:
		[root@localhost ~]# lvcreate -L 2G -n lv0 vg0
		[root@localhost ~]# lvscan 
		[root@localhost ~]# lvdisplay 
	b、挂载使用
		临时生效:
		[root@localhost ~]# mkfs -t xfs /dev/vg0/lv0
		[root@localhost ~]# mount /dev/vg0/lv0 /mnt/lvm/
		[root@localhost ~]# mount 
		[root@localhost ~]# df -hT

		[root@localhost ~]# umount /mnt/lvm 		
		[root@localhost ~]# mount

		永久生效:
		[root@localhost ~]# vim /etc/fstab 
		/dev/vg0/lv0    /mnt/lvm        xfs     defaults        0   0
		
		[root@localhost ~]# mount	-a    刷新/etc/fstab
		[root@localhost ~]# mount
	c、扩展
		物理卷扩展 
		[root@localhost ~]# pvscan
		卷组扩展
		[root@localhost ~]# vgdisplay        
		[root@localhost ~]# vgextend vg0 /dev/sdb{3,5} /dev/sdc3
		[root@localhost ~]# vgdisplay		#查看空间变化
		逻辑卷扩展	
			XFS文件系统:
			[root@localhost ~]# lvextend -L 4G /dev/vg0/lv0 
			[root@localhost ~]# xfs_growfs /dev/vg0/lv0 
			[root@localhost ~]# df -hT


			EXT文件系统:
			[root@localhost ~]# lvcreate -L 1G -n lv1 vg0 
			[root@localhost ~]# mkfs -t ext4 /dev/vg0/lv1
			[root@localhost ~]# mkdir /mnt/lvm1
			[root@localhost ~]# mount /dev/vg0/lv1 /mnt/lvm1/

			[root@localhost ~]# lvextend -L 2G /dev/vg0/lv1  扩展到2G
			[root@localhost ~]# lvextend -L +2G /dev/vg0/lv1  添加2G
			[root@localhost ~]# e2fsck -f /dev/vg0/lv1
			[root@localhost ~]# resize2fs /dev/vg0/lv1
			[root@localhost ~]# mount /dev/vg0/lv1 /mnt/lvm1/	
			[root@localhost ~]# df -hT

	c、缩减(EXT)
		注意:XFS文件系统不能做缩减
		
		物理卷缩减 
		[root@localhost ~]# pvscan

		卷组缩减
		[root@localhost ~]# vgreduce vg0 /dev/sdb5

		逻辑卷缩减
		[root@localhost ~]# umount /mnt/lvm1
		[root@localhost ~]# lvreduce -L 1G /dev/vg0/lv1 	
		[root@localhost ~]# fsck -f /dev/vg0/lv1						
		[root@localhost ~]# resize2fs /dev/vg0/lv1 
		[root@localhost ~]# mount /dev/vg0/lv1 /mnt/lvm1/
		[root@localhost ~]# df -hT
	d、删除	
		逻辑卷删除
		[root@localhost ~]# umount /mnt/lvm1 
		[root@localhost ~]# lvremove /dev/vg0/lv1 

		卷组删除
		[root@localhost ~]# vgremove vg0 

		物理卷删除
		[root@localhost ~]# pvscan 
		[root@localhost ~]# pvremove /dev/sdc1

	e、命令汇总:
				创建		查看简要信息	查看详细信息	扩展		缩减		删除
				create		scan		display		extend		reduce		remove
		物理卷(PV)	pvcreate		pvscan		pvdisplay		无		无		pvremove
		卷组(VG)	vgcreate		vgscan		vgdisplay		vgextend		vgreduce		vgremove
		逻辑卷(LV)	lvcreate		lvscan		lvdisplay		lvextend		lvreduce		lvremove

5、快照
	原理:将操作时的系统信息记录下来,数据发生改变时,可快速实现数据恢复

	实验:
		准备测试用的逻辑卷
		[root@localhost ~]# pvcreate  /dev/sdb{1,2,3,5} /dev/sdc{3,2}
		[root@localhost ~]# vgcreate vg0 /dev/sdb{1,2,3,5} /dev/sdc{3,2}
		[root@localhost ~]# lvcreate -L 2G -n lv0 vg0
		[root@localhost ~]# mkfs -t xfs /dev/vg0/lv0	
		[root@localhost ~]# mount /dev/vg0/lv0 /mnt/lvm
		[root@localhost ~]# df -hT

		准备测试用的文件
		[root@localhost lvm]# ls
		1.txt  2.txt
		[root@localhost lvm]# cat 1.txt
		Hello World!
		[root@localhost lvm]# cat 2.txt
		Goodbye World!

		对逻辑卷lv0设置快照,保存数据
		[root@localhost ~]# lvcreate -L 500M -n s0 -s /dev/vg0/lv0
		[root@localhost ~]# mkdir /mnt/snap
		[root@localhost ~]# mount -o nouuid /dev/vg0/s0 /mnt/snap/
		[root@localhost ~]# ls /mnt/snap/
		1.txt  2.txt
		
		删除1.txt,更改2.txt,模拟数据损坏
		[root@localhost ~]# cd /mnt/lvm
		[root@localhost lvm]# rm -rf 1.txt
		[root@localhost lvm]# cat 2.txt
		[root@localhost ~]# ls /mnt/snap/
		2.txt
		
		通过快照进行数据恢复
		[root@localhost ~]# umount /mnt/lvm 
		[root@localhost ~]# umount /mnt/snap 

		[root@localhost ~]# lvconvert --merge /dev/vg0/s0 

		重新挂载,检查数据状态
		[root@localhost ~]# mount /dev/vg0/lv0 /mnt/lvm
		[root@localhost ~]# mount /dev/vg0/s0 /mnt/snap/
		mount: 特殊设备 /dev/vg0/s0 不存在

		[root@localhost ~]# cd /mnt/lvm
		[root@localhost lvm]# ls
		1.txt  2.txt
		[root@localhost lvm]# cat 1.txt
		Hello World!
		[root@localhost lvm]# cat 2.txt
		Goodbye World!

		总结:数据和删除之前一致,数据恢复成功!


配额
一、启用磁盘配额
# /etc/fstab 
# umount /u01
# mount -a
# mount |grep u01
/dev/mapper/vg02-lv02 on /u01 type ext4 (rw,usrquota,grpquota)
创建磁盘配额的数据库文件
# yum -y install quota
# quotacheck -acug
//-a 所有分区(已支持配额) -c 创建 -u 用户 -g 组
# ll /u01
# quotaon -a			//启动所有分区的磁盘配额
二、日常管理
方法一edquota
# useradd stu1
# edquota -u stu1
# edquota -t  修改配额的宽限期
测试
# chmod -R 777 /u01
# su - stu1
$ cd /u01
$ dd if=/dev/zero of=test99 bs=1M count=11
$ touch file{1..6}
$ quota		//查看自己的配额情况
方法二: setquota
# setquota -u username block软限制 block硬限制 inode软限制 inode硬限制 分区
# setquota -u jack 80000 100000 15 20 /dev/sda2
# quota -u jack
+++查看配额+++
查看单个用户的配额:	    
[root@server ~]#quota -u jack
查看所有用户的配额:	    
[root@server ~]#repquota -a         
普通用户查看自己配额:  
[jack@server ~]quota
[root@server ~]#mount -o uquota /dev/sdb1 /u01                      支持磁盘配额
[root@server ~]#xfs_quota -x -c 'limit bsoft=500m bhard=550m zhangsan' /u01
[root@server ~]#xfs_quota -x -c report /u01
rhel7:
注意:
1、不需要手动执行quotacheck命令对xfs文件系统进行检查,它会在mount的时候自动执行
2、不需要在xfs文件系统的根下生成quota数据文件

1、基于EXT文件系统
	准备测试用的逻辑卷
		pvcreate /dev/sdb{1,2,3,5} /dev/sdc{1,2,3,5}
		vgcreate vg0 /dev/sdb{1,2,3,5} /dev/sdc{1,2,3,5}
		lvcreate -L 2G -n lv0 vg0 
		mkfs -t ext4 /dev/vg0/lv0
		mkdir /mnt/ext
		mount /dev/vg0/lv0 /mnt/ext/

	重新挂载逻辑卷,添加配额参数
		mount -o remount,usrquota,grpquota /dev/vg0/lv0 /mnt/ext/

	生成配额文件
		quotacheck -ugcv /mnt/ext/
		ls /mnt/ext/
		aquota.user   aquota.group
	
	创建测试用户,并为其添加配额标准
		useradd hr
		passwd hr
		edquota -u hr 
			block为文件大小限制(默认为KB)
			inode为文件数量限制(默认为个数)

			soft为软限制,超过该限制会出现警告信息,不阻止当前操作
			hard为硬限制,超过该限制会出现提示信息,并阻止当前操作

	开启磁盘配额,并检查配额状态	
		quotaon /mnt/ext/
		quotaon -p /mnt/ext/

	为测试用户添加写权限,切换用户进行测试
		setfacl -m u:hr:rwx /mnt/ext/
	
		测试block效果:dd if=/dev/zero of=test bs=1K count=200
		测试inode效果:touch、mkdir、vim等

2、基于XFS文件系统
	a、设置规范
		配额对象:用户、组、目录(user、group、project)
		配额方式:空间、数量(block、inode)
		配额类型:软限制、硬限制(soft、hard)
		宽限时间:超过软限制,并且未达到硬限制时,启用的时间机制,到期时软限制标准会变为硬限制标准。

	b、实验目标
		用户和组:创建多个测试用户,分别是hr01、hr02、hr03,密码123,基本组为hr
		用户配额:每个用户使用300MB的磁盘空间,文件数量不限,超过200MB时,发送警告信息
		组配额:仅允许hr组最多使用1GB的磁盘空间
		目录配额:/var/test/abc目录,hr组拥有最大权限,最多使用500MB的空间
		宽限时间:14天

	c、基本操作
		a、创建实验环境
			用户和组:
			[root@localhost ~]# groupadd hr
			[root@localhost ~]# useradd -g hr hr01
			[root@localhost ~]# useradd -g hr hr02
			[root@localhost ~]# useradd -g hr hr03
			[root@localhost ~]# useradd -g hr hr04
			[root@localhost ~]# echo "123" | passwd --stdin hr01
			[root@localhost ~]# echo "123" | passwd --stdin hr02
			[root@localhost ~]# echo "123" | passwd --stdin hr03
			[root@localhost ~]# echo "123" | passwd --stdin hr04

			文件系统:
			[root@localhost ~]# mkfs -t xfs /dev/vg0/lv0
			[root@localhost ~]# mount -o usrquota,grpquota /dev/vg0/lv0 /var/test/

			[root@localhost ~]# vim /etc/fstab 

			[root@localhost test]# mkdir /var/test/abc
			[root@localhost test]# chown :hr abc/
			[root@localhost test]# chmod -R 2770 abc/
			
+++查看配额+++
查看单个用户的配额:	    
[root@server ~]#quota jack
查看所有用户的配额:	    
[root@server ~]#repquota -a         
普通用户查看自己配额:  
[jack@server ~]quota

		b、配额管理命令
			xfs_quota
			作用:XFS文件系统中的磁盘配额管理工具
			格式:
				x		专家模式,允许执行管理命令
				c		指定命令

			查看当前操作系统中的文件系统列表,以及磁盘配额参数的使用情况
			[root@localhost test]# xfs_quota -x -c "print"
			[root@localhost test]# xfs_quota -x -c "df -h" /var/test

			报告指定文件系统的磁盘配额列表
			[root@localhost test]# xfs_quota -x -c "report -ubih" /var/test
				u	用户配额信息
				g	组配额信息
				b	block配额
				i	inode配额
				h	显示单位
			
			查看指定文件系统的磁盘配额功能是否开启
			[root@localhost test]# xfs_quota -x -c "state" /var/test

		c、创建用户配额
			实现目标:每个用户使用300MB的磁盘空间,文件数量不限,超过200MB时,发送警告信息

			[root@localhost test]# xfs_quota -x -c "limit -u bsoft=200M bhard=300M hr01" /var/test
			[root@localhost test]# xfs_quota -x -c "limit -u bsoft=200M bhard=300M hr02" /var/test
			[root@localhost test]# xfs_quota -x -c "limit -u bsoft=200M bhard=300M hr03" /var/test
			[root@localhost test]# xfs_quota -x -c "limit -u bsoft=200M bhard=300M hr04" /var/test

			[root@localhost test]# xfs_quota -x -c "report -ubih" /var/test
		d、创建组配额
			实验目标:仅允许hr组最多使用1GB的磁盘空间

			[root@localhost test]# xfs_quota -x -c "limit -g bsoft=900M bhard=1000M hr" /var/test
			[root@localhost test]# xfs_quota -x -c "report -gbih" /var/test

		e、修改宽限时间
			实验目标:宽限时间默认是7天,更改为14天

			[root@localhost test]# xfs_quota -x -c "timer -u -b 14days" /var/test
			[root@localhost test]# xfs_quota -x -c "state" /var/test

		f、测试磁盘配额
			用户配额:
			[hr01@localhost abc]$ dd if=/dev/zero of=hr01.txt bs=1M count=350
			[root@localhost var]# xfs_quota -x -c "report -ubih" /var/test

			组配额:
			最后一个用户无法创建最大用户配额的文件,以此验证组配额生效
			[root@localhost var]# xfs_quota -x -c "report -gbih" /var/test

		g、目录配额
			实验目标:/var/test/abc目录,hr组拥有最大权限,最多使用500MB的空间				

			更改配额参数
			[root@localhost var]# umount /var/test
			[root@localhost var]# mount -o usrquota,prjquota /dev/vg0/lv0 /var/test/

			[root@localhost var]# xfs_quota -x -c "state" /var/test

			设置配额文件
			[root@localhost var]# vim /etc/projects
				11:/var/test/abc		识别码:配额目录

			[root@localhost var]# vim /etc/projid
				myquotaproject:11		方案名:识别码

			[root@localhost var]# xfs_quota -x -c "project -s myquotaproject" 	#启用目录配额

			[root@localhost ~]# xfs_quota -x -c "report -pbih" /var/test

			启用基于block的目录配额限制
			[root@localhost ~]# xfs_quota -x -c "limit -p bsoft=400M bhard=500M myquotaproject" /var/test
			[root@localhost ~]# xfs_quota -x -c "report -pbih" /var/test

			测试目录配额
			[root@localhost abc]# dd if=/dev/zero of=root.txt bs=1M count=600

		h、磁盘配额管理命令
			disble			临时取消磁盘配额限制,系统依然执行磁盘配额,但不阻止超限的行为。
				[root@localhost abc]# xfs_quota -x -c "disable -up" /var/test
			enable			恢复正常的磁盘配额管制状态,与disable为一组操作
				[root@localhost abc]# xfs_quota -x -c "enable" /var/test
			off			完全关闭磁盘配额限制,重新启用时需要重新挂载(umount/mount[root@localhost abc]# xfs_quota -x -c "off -up" /var/test		
			remove			删除磁盘配额,必须在off状态下执行该命令
				[root@localhost ~]# xfs_quota -x -c "remove -p" /var/test

		i、总结
					XFS文件系统			EXT文件系统
			挂载参数		usrquota/grpquota/prjquota		usrquota/grpquota
			配额文件		不需要				quotacheck  -ugcv
			设置配额		xfs_quota -x -c "limit -u/g/p"		edquota -u/g
			查看配额		xfs_quota -x -c "report -ugpbih"	quota
			关闭配额		xfs_quota -x -c "disable | enable"	quotaon/quotaoff 

		
		LVM/RAID/EXT/XFS
		
RAID
1、定义
	独立磁盘冗余阵列		
2、软RAID和硬RAID	
	软RAID:所有功能均依赖操作系统和CPU完成,没有独立芯片
	硬RAID:配置独立板卡,提供控制芯片/处理芯片/I/O处理芯片,不占用CPU资源,通常需要单独购买
	混合RAID:提供RAID控制/处理 芯片,没有I/O处理芯片,需要CPU和驱动程序来完成,是软RAID和硬RAID的折中方案

3、优势:
	大容量
	高性能
	可靠性
	可管理性 
	
4、核心技术
	数据条带:提高性能
	镜像:数据可靠性
	数据校验:数据的完整性

5、RAID的类型
	RAID  0	
		组成:通常使用相同型号和容量的多个磁盘组成
		特点:
			每个磁盘负责的数据总量降低,整体性能提高(读写速度)
			处理大文件较快 
		缺点:
			磁盘损坏,数据不可恢复

	RAID  1
		组成:通常使用相同型号和容量的多个磁盘组成

		特点:
			将同一份数据完整的保存两块硬盘中,内容完全相同,互为备份
			若组件RAID1的硬盘容量不同,则总容量以较小的磁盘为准
			读取性能较好

		缺点:
			磁盘总容量降低,成本较高

	RAID 2
		组成:通常使用相同型号和容量的多个磁盘组成

		特点:
			通过汉明码实现数据纠错功能

		缺点:
			需要额外的磁盘提供纠错功能,成本较高,目前基本淘汰

	RAID 3
		组成:通常使用相同型号和容量的多个磁盘组成

		特点:
			通过奇偶校验实现数据纠错功能
			使用字节级别的条带化技术

		缺点:
			校验功能较为简单,消耗系统性能

	RAID 4
		
		组成:通常使用相同型号和容量的多个磁盘组成

		特点:
			通过奇偶校验实现数据纠错功能
			使用块(block)级别的条带化技术

		缺点:
			校验功能较为简单,消耗系统性能

	RAID 5
		组成:通常使用相同型号和容量的多个磁盘组成

		特点:
			读写性能提高
			提供数据校验机制
			空间利用率高

		缺点:
			磁盘数量越多,安全性就越差
			连续损坏2块磁盘时,数据无法找回

	
	RAID 5 + Spare(空闲磁盘)
		特点:
			添加多余的空闲磁盘,增加数据可靠性

	RAID 6
		组成:通常使用相同型号和容量的多个磁盘组成
	
		特点:
			增加第二个独立的校验信息块,实现双重校验 
			连续损坏2块磁盘时,数据依然能够找回
			读写性能提高 
		
		缺点:
			写入性能较差
			组建成本较高

	RAID 7
		非公开的RAID 标准  

	
	RAID 10
		特点:
			先做RAID 1,再做RAID 0
			允许出现多个坏盘,只要不是一组RAID1同时出错即可

	RAID 01
		特点:
			先做RAID 0,再做RAID 1
			同一个RAID 0中可以有多个坏盘,不允许两个RAID 0中同时出现坏盘
		

6、总结:
	RAID 0性能最高,RAID 1冗余度最高,RAID 5属于折中方案 

	RAID级别		RAID 0  		RAID 1		RAID 3		RAID 5		RAID 10/01
		
	容错性		        无		       有		有		有		有
	容错机制		无		      镜像		奇偶校验       奇偶校验		镜像
	读性能		        高		      低		高		高		高
	写性能		        高		      低		低		低		中间
	磁盘数量		最少2块磁盘	      最少2N块磁盘	最少3块磁盘	最少3块磁盘	2N块磁盘(N>=2)
	可用容量		磁盘总容量	     磁盘总容量50%	总容量的(N-1)/N	总容量的(N-1)/N	磁盘总容量50%

7、RAID配置(软RAID)
	mdadm:软RAID的管理工具



	选项:
		--create			创建RAID设备
		--auto=yes		确定执行后续的操作
		--level=5			指定当前创建的RAID类型
		--raid-device=3		指定创建RAID时使用的磁盘数量
		--spare-device=2		指定创建RAID时空闲的磁盘数量
		/dev/sdb{1,2,3,5} /dev/sdc1	指定磁盘列表(总数量必须等于 raid-device + spare-device)
		
		Q			查询RAID的简要信息
		detail或D			查看RAID的详细信息
		
		f			模拟指定磁盘损坏
		add			为RAID添加新磁盘
		remove			移除RAID中的损坏磁盘
				
	
	实验:

	[root@localhost ~]# mdadm --create /dev/md0 --auto=yes --level=5 --raid-device=3 --spare-device=2 /dev/sdb{1,2,3,5} /dev/sdc1
	[root@localhost ~]# mdadm -Q /dev/md0 
	[root@localhost ~]# mdadm --detail /dev/md0 
	[root@localhost ~]# mdadm -f /dev/md0 /dev/sdb1
	[root@localhost ~]# mdadm --add /dev/md0 /dev/sdc2
	[root@localhost ~]# mdadm --remove /dev/md0 /dev/sdb1


5.LAMP项目部署

LAMP = Linux + Apache + MySQL + PHP
一、环境检测
☆ 关闭防火墙
    # systemctl stop firewalld
    # systemctl disable firewalld
☆ 关闭SELinux
获取SELinux的状态:
    # getenforce
临时关闭SElinux:重启后SELinux还会自动启动
    # setenforce 0
永久关闭SELinux:编辑SELinux的配置文件
    # vim /etc/selinux/config
    SELINUX=disabled
☆ 检查系统中是否已安装Apache
    # rpm -qa |grep httpd 
    # rpm -e httpd-2.4.6-90.el7.centos.x86_64
    # rpm -e httpd-tools-2.4.6-90.el7.centos.x86_64
☆ 检查系统中是否已安装MySQL
    # rpm -qa |grep mysql
☆ 检查系统中是否已安装PHP
    # rpm -qa |grep php
AMP安装指南:在Linux中安装AMP必须先安装Apache,在安装MySQL,最后安装PHP
A 阿帕奇 M msql p php
二、Apache配置
第一步:安装httpd软件
# yum install httpd -y
第二步:配置/etc/httpd/conf/httpd.conf文件
# vim /etc/httpd/conf/httpd.conf
/ServerName => 搜索
96 ServerName localhost:80
第三步:启动httpd服务
# systemctl start httpd
第四步:把httpd服务添加到开机启动项中
# systemctl enable httpd
第五步:使用ss或netstat命令查询httpd占用的端口
# netstat -tnlp |grep httpd# ss -naltp |grep httpd
第六步:浏览器测试
http://ip地址
三、MySQL安装
1、直接安装软件包
# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
2、安装官方源mysql镜像源 ,yum下载
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server -y
3、启动mysql
# systemctl start mysqld
# netstat -tnlp |grep mysqld
4、初始化
# mysql_secure_installation        初始化数据,设置root密码
输入当前root数据库管理员密码,直接回车
是否需要给root管理员设置一个密码,必须设置,按Y
输入密码
确认密码
是否移除匿名密码,按Y,必须移除,基于安全考虑
是否禁止root远程登录,按Y代表禁止,n代表不禁止
是否移除测试数据库,按Y代表移除,按n代表不移除
是否刷新权限,让刚才的更改立即生效,按Y,确认刷新
# systemctl enable mysqld           把mysqld服务添加到开机启动项
5、链接数据库,测试
# mysql -uroot -p
删除mysql的方法
# rpm -qa | grep -i mysql  查看是否安装mysql
# systemctl status mysqld  查看mysql状态
# systemctl stop mysqld  
删除mysql的安装目录
# find / -name mysql
# rm -rf /etc/my.cnf    删除所有检测出来的
删除mysql相关组件
# rpm -qa | grep -i mysql  查看所有mysql的相关组件
# rm -rf 文件
删除mysql配置文件
# rm -rf /etc/rc.d/init.d/mysql
删除mysql用户组
# userdel mysql

四、PHP安装
# yum install php -y
# systemctl restart httpd
测试LAMP环境
# cd /var/www/html
# vim demo.php
<?php
	echo 'hello world';
?>

http://公网IP/demo.php

五、部署Discuz论坛
下载地址:https://gitee.com/ComsenzDiscuz/DiscuzX  
# yum install unzip -y
# unzip discuz.zip

# mv discuz/* /var/www/html/# cp -vRp disczu/* /var/www/html/

# chmod -R a+w /var/www/html
# yum install php-mysqli -y   #php的一个扩展
# systemctl restart httpd

常用的命令

端口

netstat -naput | grep 端口
lsof  可列出各种进程打开的文件信息,一般可以通过结合参数来获取更加精确的信息
lsof -i:22
lsof -i tcp:22

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

带上耳机世界与我无关

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值