Linux操作系统管理

命令基本概念

1、Shell

linux系统中运行的一种特殊程序
在用户和内核之间充当“翻译官”
用户登录linux系统时,自动加载一个shell程序
bash是CentOS系统中默认使用的shell程序,文件位于/bin/bash(kali是zsh)

在这里插入图片描述

2、命令分类
可通过 type 命令 查看是内部还是外部命令
1、内部命令:shell自带的
2、外部命令:由第三方程序提供

3、命令行格式
注意:Linux命令环境中,对英文字符的处理是区分大小写的

命令字    [选项]    [参数]

1、命令字:是整条命令中最关键的一部分,唯一确定一条命令
2、选项:短格式选项:使用“-”符号引导,多个单字符选项可以组合在一起使用;长格式选项:使用“--”符号引导 
3、参数:命令字的处理对象,可以是文件名、目录(路径)名或用户名等内容,个数可以是零到多个

4、Linux 命令行的辅助操作

Tab 键					自动补全
反斜杠“\”				换行
Ctrl+l 快捷键			清屏
Ctrl+c 快捷键			终止
Ctrl+ a 				光标跑最前面
Ctrl+e					光标跑最后面
Ctrl+z					后台挂起

5、获得命令帮助的方法

1、查看内部命令,使用help 命令,如help cd
2、查看外部命令,使用“--help”选项,如netstat --help
3、使用man 手册页,如man netstat

PS:使用 type 命令字 可以看到此命令是内部命令还是外部命令

目录和文件基本操作

1、pwd
显示用户当前所在的工作目录

2、cd
将用户的工作目录更改到其他位置

cd 目标位置				//切换到目标位置
cdcd ~				//切换到当前用户的家目录
cd /					//切换到根目录
cd -					//切换到执行cd命令之前所在的目录
cd .					//当前目录
cd ..					//上级目录

3、ls
显示目录中的内容,包括子目录和文件相关属性信息

格式: ls [选项] [文件或目录]

常用选项: 
 -l:显示详细信息 
 -a:显示子目录和文件,包括"."开头的隐藏目录和隐藏文件
 -A:不显示包括"."开头的隐藏目录和隐藏文件
 -d:查文件或目录 本身 属性
 -h:以单位显示文件或目录大小
 -R:以递归的方式显示目录以及子目录的所有内容
 --color:为查询结果添加颜色进行显示
	一般d、h、l会结合着用,如ls -dhl /etc/
	但ls统计目录的大小结果可能不准确,统计单个文件的大小比较准确
	一般使用du命令去统计目录的大小,会准确得多
	
结合通配符:
	?	匹配文件名中的一个未知字符
	*	匹配文件名中的任意多个字符

4、alias
通过别名机制简化常用的、比较长的命令

例子:
 alias gohome='cd /home/zhangsan'
 alias a=systemctl
 
查看当前系统中的别名:
alias

取消别名定义:
 unalias gohome
 unalias a
 
 以上命令定义的别名在注销后就失效了,如果想要别名永久生效,需要修改配置文件
 # vim /etc/profile		//末尾新起一行加入定义别名
 alias a='systemctl status firewalld'

5、du
统计指定目录(或文件)所占用磁盘空间的大小

格式: du [选项] [文件或目录]

常用选项: 
 -a:统计磁盘空间占用时包括所有的文件,而不仅仅只统计目录
 -h:显示出目录或文件的大小(K、M),默认的大小单位为字节(KB)
 -s:只统计每个参数所占用空间总的大小,而不是统计每个子目录、文件的大小
	 一般s、h结合用,如 du -sh /etc/

6、mkdir
创建新的空目录

格式: mkdir [选项] 目录位置及名称

例子:
	mkdir ./123						在当前文件夹下创建一个新文件夹123
	mkdir -p /home/{A,B}/abc		在home下创建A,B两个文件夹,并在其中创建abc文件夹

7、touch
创建空文件

格式: touch 文件名

PS:当文件已存在时,touch可以更新文件的时间标记

8、ln
为文件或目录创建链接文件,分为软链接和硬链接
一般用于链接到$PATH下的路径,实现在任何地方都可以执行

软链接:删除原始文件后失效,适用于文件和目录,链接文件可以与原始文件位于不同的文件系统中
硬链接:删除原始文件后仍可使用,只适用于文件,链接文件必须与原始文件在同一个文件系统(如同一个Linux分区)

创建链接文件:一般都是创建软链接,类似于Windows的快捷方式
ln -s 源文件 目标位置
如: ln -s /bin/bzip2 /bin/wx/

注意:在链接时,必须使用绝对路径

9、cp
复制文件或目录,并保存为新的文件或目录

格式: cp [选项]	源文件或目录	目标文件或目录

常用选项:
 -i:覆盖目标同名文件或目录时提醒用户确认
 -f:若文件存在 强制覆盖不提醒 
 -p:复制时保持源文件的权限、属主及时间标记等属性不变
 -r:表示递归复制所有文件及子目录
	一般喜欢cp和rm都带上rf

10、rm
删除指定文件或目录

格式: rm [选项] 要删除的文件或目录

常用选项:
 -i:提醒用户确认
 -f:强制删除不提醒 
 -r:表示递归删除所有文件及子目录
 
rm -rf 命令强制删除包括目录 不提醒

11、mv
将指定的文件或目录移动位置,若源位置和目标位置相同,则相当于重命名操作

格式: mv [选项] 源文件或目录	目标文件或目录

例子:
 mv /root/abc /home
 mv abc 123				相当于重命名

12、which
查找命令 / 程序的存放目录,但只会在$PATH范围内查找(echo $PATH)

例子:
 which ls
 which cd

13、find
采用递归方式,根据目标的名称、类型、大小等不同属性进行精细查找 文件 \目录 \命令 \程序

格式: find    [查找范围]    [查找条件表达式]
常用查找条件类型:
 按名称查找			-name		根据目标文件的名称进行查找,允许使用 * 及 ? 通配符
 按文件大小查找		-size		一般使用+、-号设置超过或小于指定的大小作为查找条件,常用的容量单位包括 k(注意 k 是小写)、M、G
 按文件属主查找		-user		根据文件属主进行查找
 按文件类型查找		-type		根据文件的类型进行查找,包括普通文件(f)、目录(d)、块设备文件(b)、字符设备文件(c)等

使用逻辑运算符实现多个查找条件
 -a 	表示 and
 -o		表示 or
 如:
 find /boot -size  +1024k -a  -name “vmlinuz*”
 find /boot -size  +1024k -o  -name “vmlinuz*”
 find / -size +5M -a -size -10M
 

目录和文件管理

1、cat
显示出文件的内容

cat [选项] 文件名 

2、more
全屏方式分页显示文件内容

 more [选项] 文件名 …
 
 交互操作方法
  按Enter键向下逐行滚动
  按空格键向下翻一屏
  按q键退出

3、less
与 more 命令相同,但扩展功能更多

less [选项] 文件名 …

交互操作方法
 Page Up 向上翻页,Page Down 向下翻页
 按“/”键查找内容,“n”下一个内容,“N”上一个内容
 其他功能与 more 命令基本类似

4、head
查看文件开头的一部分内容(默认为10行)

head -n 文件名 …

5、tail
查看文件结尾的少部分内容(默认为10行)

tail -n 文件名 …
tail -f  文件名		//动态的查看,可以即时刷新(常用)

6、wc
统计文件中的行数、单词数量等信息

wc  [选项]...  目标文件...

常用命令选项
 -l:统计行数
 -w:统计单词个数 
 -c:统计字节数

7、grep
在文件中查找并显示包含指定字符串的行

grep  [选项]...  查找条件  目标文件

常用命令选项
 -i:查找时忽略大小写
 -v:反选,输出与查找条件不相符的行(常用)
 -A 1:表示查看包含指定字符串及后一行
 -B 2:表示查看包含指定字符串及前两行
 -C 1:表示查看包含指定字符串及前后一行
 -c:统计指定字符串在文件中出现的行数
 
查找条件设置
 要查找的字符串以双引号括起来
 “^……”表示以……开头,“……$”表示以……结尾
 “^$”表示空行

例子:查找文件中除空行以外的内容(常用)
grep -v "^$" /etc/ssh/ssh_config

8、tar
制作归档文件、释放归档文件、压缩、解压缩

tar [选项] ...  归档文件名  源文件或目录
tar [选项] ...  归档文件名  [-C 目标目录]

常用命令选项
 -c:创建 .tar 格式的包文件
 -x:解开.tar格式的包文件
 -v:输出详细信息
 -f:表示使用归档文件		//一定要有
 -p:打包时保留原始文件及目录的权限
 -t:在不解压包的情况下看包内内容
 -C:解包时指定释放的目标文件夹
 -z:调用gzip程序进行压缩或解压
 -j:调用bzip2程序进行压缩或解压

压缩时喜欢使用zcf或zcvf
解压时喜欢使用zxf或zxvf

例子1:
把当前目录下所有文件打包并压缩,命名为test.tar.gz,这里的.tar.gz只是标识,没有任何意义
但是这种方式打包压缩的文件,解压之后是零散的,一般不常用
tar zcvf test.tar.gz ./*

例子2:(常用)
我们一般会退到需要打包压缩的文件的上一级目录,然后打包压缩整个文件夹,这样以后解压出来才是一个文件夹,不零散
tar zcvf test.tar.gz ./abc/

例子3:
解包解压缩到当前目录
tar zxvf test.tar.gz

例子4:
解包解压缩到指定目录
tar zxvf test.tar.gz -C ./aaa/

9、vi&vim

1、文本编辑器的作用
 创建或修改文本文件
 维护 Linux 系统中的各种配置文件
 
2、Linux中最常用的文本编辑器
 vi:类UNIX操作系统的默认文本编辑器。
 vim:vim是vi文本编辑器(一般简称为vi编辑器)的增强版本
 
3、vi 编辑器的工作模式
 三种工作模式
 命令模式、输入模式、末行模式
 不同模式之间的切换

安装及管理应用程序

1、典型应用程序目录结构

普通执行程序文件							/usr/bin

服务器执行程序文件和管理程序文件			/usr/sbin

应用程序配置文件							/etc

日志文件								/var/log

应用程序文档文件							/usr/share/doc

应用程序手册页文件						/usr/share/man

2、软件包封装类型

rpm软件包					扩展名为".rpm"

deb软件包					扩展名为".deb"

源代码软件包					一般为".tar.gz"".tar.bz2"等格式的压缩包,包含程序的原始代码

绿色免安装的软件包			在压缩包内提供已编译好的执行程序文件,解开压缩包后的文件即可直接使用

3、RPM包管理工具(不好用,现在更多的用Yum)

1、RPM Package Manager
	由 Red Hat 公司提出,被众多 Linux 发行版所采用
	建立统一的数据库文件
	详细记录软件包安装、卸载等变化信息
	自动分析软件包依赖关系   

2、RPM软件包一般命名格式:bash-4.1.2-15.el6_4.x86_64.rpm(软件名称-版本号-发布次数-硬件平台-扩展名)

3、查询已安装的 RPM 软件信息:
  最常用的其实是 rpm -qa | grep ...
 -qa:查看系统中已安装的所有RPM软件包列表
 -qi:查看指定软件的详细信息
 -ql:查询指定软件包所安装的目录、文件列表
 -qf:查询文件或目录属于哪个RPM软件 
 -qc:仅显示指定软件包安装的配置文件
 -qd:仅显示指定软件包安装的文档文件

4、查询未安装的 RPM 软件包文件中信息:
 -qpi:通过.rpm包文件查看该软件的详细信息
 -qpl:查看.rpm安装包内所包含的目录、文件列表
 -qpc:查看.rpm安装包内包含的配置文件列表
 -qpd:查看.rpm安装包内包含的文档文件列表

5、安装、升级、卸载 RPM 软件包:
rpm -ivh 具体安装包路径及名称		//命令格式

-i:安装一个新的 rpm 软件包
-h:以“#”号显示安装的进度
-v:显示安装过程中的详细信息 
-e:卸载软件包
 -U:升级某个 rpm 软件,若原本未装,则进行安装
 -F:升级某个 rpm 软件,若原本未装,则放弃安装
--force:强制安装所指定的rpm软件包
--nodeps:安装、升级或卸载软件时,忽略依赖关系 

6、维护RPM数据库
 rpm --rebuilddb
 rpm --initdb

7、导入验证公钥
 rpm --import /media/cdrom/RPM-GPG-KEY-redhat-release

4、从源代码编译安装程序

1、使用源代码安装软件的优点
	获得最新的软件版本,及时修复bug
	根据用户需要,灵活定制软件功能
	
2、应用场合举例
	安装较新版本的应用程序时 
	当前安装的程序无法满足需要时  
	需要为应用程序添加新的功能时 
	
3、源码安装步骤:
步骤1:下载源代码安装包文件
步骤2:tar解包
	用途:解压并释放源代码包到指定的目录
步骤3:./configure 配置
	用途:设置安装目录、安装模块等选项
步骤4:make 编译
	用途:生成可执行的二进制文件
步骤5:make install 安装
	用途:复制二进制文件到系统,配置应用环境
步骤6:测试及应用、维护软件

在这里插入图片描述
5、从源代码编译安装程序示例
这里我是从真实机获取源代码软件包,需要用到 rz ,首先使用命令 yum provides */rz 查看是否安装了 rz ,没有安装则使用 yum 安装

[root@ch4ser ~]# yum provides */rz
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
local/filelists_db                                       | 3.1 MB     00:00     
lrzsz-0.12.20-36.el7.x86_64 : The lrz and lsz modem communications programs
源    :local
匹配来源:
文件名    :/usr/bin/rz

lrzsz-0.12.20-36.el7.x86_64 : The lrz and lsz modem communications programs
源    :@local
匹配来源:
文件名    :/usr/bin/rz

在 /root 下输入 rz ,从真实机软件包中选择 httpd-2.4.25.tar.gz 然后确定

[root@ch4ser ~]# rz
rz waiting to receive.
Starting zmodem transfer.  Press Ctrl+C to cancel.
Transferring httpd-2.4.25.tar.gz...
  100%    8262 KB    8262 KB/sec    00:00:01       0 Errors

输入 tar -zxf httpd-2.4.25.tar.gz 解包

[root@ch4ser ~]# tar -zxf httpd-2.4.25.tar.gz
[root@ch4ser ~]# ls
anaconda-ks.cfg  httpd-2.4.25  httpd-2.4.25.tar.gz

cd 到 httpd-2.4.25 输入 ./configure --prefix=/usr/local/httpd 配置configure,这里可能会报错,因为源代码编译环境需安装支持 C/C++程序语言的编译器,无非就是需要 pcre* apr* gcc* 的几个包,直接 yum install -y pcre* apr* gcc* 就行了

[root@ch4ser ~]# cd httpd-2.4.25
[root@ch4ser httpd-2.4.25]# ls
ABOUT_APACHE     CMakeLists.txt  INSTALL         NWGNUmakefile
acinclude.m4     config.layout   InstallBin.dsp  os
Apache-apr2.dsw  configure       LAYOUT          README
Apache.dsw       configure.in    libhttpd.dep    README.cmake
apache_probes.d  docs            libhttpd.dsp    README.platforms
ap.d             emacs-style     libhttpd.mak    ROADMAP
build            httpd.dep       LICENSE         server
BuildAll.dsp     httpd.dsp       Makefile.in     srclib
BuildBin.dsp     httpd.mak       Makefile.win    support
buildconf        httpd.spec      modules         test
CHANGES          include         NOTICE          VERSIONING
[root@ch4ser httpd-2.4.25]# ./configure --prefix=/usr/local/httpd
checking for chosen layout... Apache
checking for working mkdir -p... yes
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking target system type... x86_64-unknown-linux-gnu
configure: 
configure: Configuring Apache Portable Runtime library...
configure: 
checking for APR... no
configure: error: APR not found.  Please read the documentation.

[root@ch4ser httpd-2.4.25]# yum install -y pcre* apr* gcc*
	......

输入 make 编译

输入 make install 安装

cd 到 /usr/local/httpd/bin/ 下 ,输入 ./apachectl start 启动 apache 服务

为了能在任何地方都能使用,将 /usr/local/httpd/bin/ 下的所有文件链接到 $PATH ,输入 ln -s /usr/local/httpd/bin/* /usr/bin/

[root@ch4ser httpd-2.4.25]# cd /usr/local/httpd/bin/
[root@ch4ser bin]# ./apachectl start
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
[root@ch4ser bin]# cd
[root@ch4ser ~]# ln -s /usr/local/httpd/bin/* /usr/bin/
[root@ch4ser ~]# apachectl stop
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message

在真实机浏览器输入CentOS7虚拟机的IP地址,成功访问
在这里插入图片描述

用户和组的管理

1、用户和组账号概述

1、用户帐号
 超级用户 //root
 普通用户	//自己新建的用户都属于普通用户
 程序用户 	//权限最低,一般只能操作程序相关联的文件
2、组帐号
 基本组(私有组)
 附加组(公共组)
3UID和GID
UID(User IDentity,用户标识号)
GID(Group IDentify,组标识号)

2、用户账号文件 /etc/passwd

1、作用:保存用户名称、宿主目录、登录Shell等基本信息,每一行对应一个用户的账号信息

2、文件位置:/etc/passwd

3、格式:用户账号:密码占位符:用户ID:组账号ID:用户说明:宿主目录:登录Shell
	如:root:x:0:0:root:/root:/bin/bash
		ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

3、用户账号文件 /etc/shadow

1、作用:保存用户密码、账号有效期等信息,每一行对应一个用户密码记录

2、文件位置:/etc/shadow

3、格式:
	字段1:用户帐号的名称
	字段2:加密的密码字串信息
	字段3:上次修改密码的时间
	字段4:密码的最短有效天数,默认值为0
	字段5:密码的最长有效天数,默认值为99999
	字段6:提前多少天警告用户口令将过期,默认值为7
	字段7:在密码过期之后多少天禁用此用户
	字段8:帐号失效时间,默认值为空
	字段9:保留字段(未使用)
	默认只有root用户能够读取文件中的内容,并且不允许root直接编辑该文件中的内容,建议是通过命令去改
	上次修改密码的时间,表示从1970年01月01日(可理解为Unix系统的诞生日)算起到最近一次修改密码时间隔的天数 
	  root:$6$KBcN.nAm26xKhyrR$aU4kyhhxfX2Eycvbaad/zazsE8qZA7ljW9KR6BqwmeJHHAALLuI4oO2pIl9ywoafCBPfSnQ2MJtMpZ.a2myUN0::0:99999:7:::
	

4、添加用户账号 useradd

1、格式:useradd  [选项]...  用户名

2、常用选项:
	-u:指定 UID 标记号
	-d:指定宿主目录,缺省为 /home/用户名
	-e:指定帐号失效时间
	-g:指定用户的基本组名(或UID号)
	-G:指定用户的附加组名(或GID号)
	-M:不为用户建立并初始化宿主目录
	-s:指定用户的登录Shell
	
3、案例:
	添加用户zhangsan
	useradd zhangsan
	指定mike的基本组为mike,并加入到ftpuser组,指定家目录为/ftphome/mike,不允许mike通过本地登录服务器
	useradd -d /ftphome/mike -G ftpuser -s /sbin/nologin mike

5、设置/更改用户口令 passwd

1、格式:passwd  [选项]...  用户名

2、常用选项:
	-d:清空用户的密码,使之无需密码即可登录
	-l:锁定用户帐号
	-S:查看用户帐号的状态(是否被锁定) 
	-u:解锁用户帐号
	
3、案例:
	修改当前用户的密码
	passwd
	修改xxx的密码
	passwd xxx
	创建用户同时,设置用户密码信息
	useradd wangwu;echo 123456|passwd --stdin wangwu

6、修改用户账号的属性 usermod

1、作用:主要修改已存在用户的信息

2、格式:usermod  [选项]...  用户名

3、常用命令选项
	-l:更改用户帐号的登录名称
	-L:锁定用户账户
	-U:解锁用户账户
		以下选项与useradd命令中的含义相同
		 -u、-d、-e、-g、-G、-s
	
4、案例:
	锁定用户zhangsan
	usermod -L zhangsan

7、删除用户账号 userdel

1、格式:userdel  [-r]  用户名
	(添加 -r 选项时,表示连用户的宿主目录一并删除)
	
2、案例:
	删除用户zhangsan,但保留zhangsan的宿主目录
	userdel zhangsan
	删除用户wangwu,且不保留其宿主目录
	userdel -r wangwu

8、用户账号的初始配置文件

1、文件来源
新建用户帐号时,从 /etc/skel 目录中复制而来

2、主要的用户初始配置文件
~/.bash_profile			//指定用户登录时自动加载
~/.bashrc				//指定用户切换shell时自动加载
~/.bash_logout			//指定用户退出登录时自动加载
 /etc/profile			//所有用户登录时自动加载
 /etc/bashrc			//所有用户切换shell时自动加载

9、组账号文件

与用户帐号文件相类似
/etc/group:保存组帐号基本信息			root:x:0:
/etc/gshadow:保存组帐号的密码信息		root:::

10、添加组账号 groupadd

1、格式:groupadd  [-g GID]  组账号名
	
2、案例:
	添加一个名为ch4ser22的组
	groupadd ch4ser22
	添加一个名为ch4ser22的组,并指定GID为1000
	groupadd -g 1000 ch4ser22

11、添加 / 删除组成员 gpasswd

1、作用:添加 / 删除组成员、设置组帐号密码(极少用)

2、格式:gpasswd  [选项]...  组帐号名

3、常用命令选项
	-a:向组内添加一个用户
	-d:从组内删除一个用户成员
	-M:定义组成员列表,以逗号分隔
	
4、案例:
	添加用户zhangsan到组ch4ser22
	gpasswd -a zhangsan ch4ser
	删除组ch4ser22的组成员zhangsan
	gpasswd -d zhangsan ch4ser

12、删除组账号 groupdel

1、格式:groupdel  组帐号名

2、注意:任何用户的基本组都不可以直接删除

3、案例:
	删除组ch4ser22
	groupdel ch4ser22

13、查询账号信息 id / groups / finger / users、w 、who

id命令
查询用户身份标识

groups命令
查询用户所属的组

finger命令
查询用户帐号的详细信息

users、w 、who命令
查询已登录到主机的用户信息

文件和目录权限管理

1、文件/目录的权限和归属

1、访问权限
	读取 r:允许查看文件内容、显示目录列表
	写入 w:允许修改文件内容,允许在目录中新建、移动、删除文件或子目录
	可执行 x:允许运行程序、切换目录
2、归属(所有权)
	属主:拥有该文件或目录的用户帐号
	属组:拥有该文件或目录的组帐号

2、查看文件/目录的权限和归属

1、权限项
	第1个字段:表示文件类型
	第2-10个字段:表示文件权限,前3字段为所有者权限,中间3字段为属组权限,最后3字段为其他用户权限
	第11个字段:表示selinux安全机制特性,对于关闭了selinux的操作系统在新建文件或目录时没有这个"."
	第12个字段: 对于文件来说:文件硬链接数量;对于目录来说:该目录下子目录数量,子子目录数量不计算在内。
	
2、文件类型
	p	表示命名管道文件
	d	表示目录文件
	l	表示符号连接文件
	-	表示普通文件
	s    	表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件
	c 	表示字符设备文件,例: 虚拟控制台 或tty0
	b	表示块设备文件,例: sda, cdrom

在这里插入图片描述

3、设置文件和目录的权限 chmod

1、格式: chmod   [-ugoa]  [+-=]  [rwx]  文件或目录...		//u、g、o、a分别表示属主、属组、其他用户、所有用户
															//+、-、=表示增加、去除、设置权限
	     chmod nnn(3位8进制数) 文件或目录...					//常用
	  
2、常用选项:
	-R:递归修改指定目录下所有子项的权限

3、例子:
	字符方式,给所有用户设置读、写、执行权限
	chmod a=rwx a.txt
	数字方式,给文件所属主读、写、执行权限,文件所属组和其他人读、执行权限
	chmod 755 a.txt

4、设置文件和目录的归属 chown

1、格式: chown  属主   文件或目录
		chown  :属组  文件或目录
		chown  属主:属组  文件或目录
	  
2、常用选项:
	-R:递归修改指定目录下所有子项的权限

3、例子:
	设置文件所属主为zhangsan
	chown zhangsan a.txt
	设置文件所属组为ch4ser22
	chown :ch4ser22 a.txt
	设置文件所属主和所属组分别为zhangsan和ch4ser22
	chown zhangsan:ch4ser22 a.txt

5、设置文件和目录默认权限 umask

1、umask的作用:定义新创建文件及目录的默认权限,通过该命令实现定义权限补码

2vim /etc/profile 修改 umask 值,如下所示:
	if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
	    umask 002
	else
	    umask 022
	fi

3、注意:文件权限最大666,目录权限最大777
		umask是补码,比如设置umask为022,那么创建文件的默认权限为644(666-022),创建文件夹的默认权限为755(777-022)

6、特殊的权限 suid

1、命令作用:程序运行时的权限从执行者变更成程序所有者的权限
2、使用方法:程序运行时的权限从执行者变SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。使用”ls -l” 或者”ll” 命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的”s”,就表明该执行文件拥有SUID属性。比如/usr/bin/passwd文件

7、特殊的权限 sticky

1、命令作用:目录下创建的文件只有root、文件创建者、目录所有者才能删除
2、作用范围:只作用于目录
3、使用方法:对系统中的某些目录可以授予这样的权限,此时该目录就遵循该权限规则,如系统中的/tmp目录

8、特殊的权限 ACL

1、命令作用:针对文件和目录授予单个用户的rwx权限
2、作用范围:可作用于文件及目录
3、使用方法:# setfacl -R -m d:u:abc:rwx test	//文件夹
			# setfacl -m u:wangwu:rwx abc 		//文件
			-R	表示递归授权
			-m	表示修改acl权限
			d   表示只对后续新对象继承该权限
			u   表示用户
			abc 表示要授权用户名称

磁盘和文件系统管理

0、新磁盘分区、格式化、挂载的基本步骤

1、新建主分区、扩展分区、逻辑分区
	主分区号和扩展分区号为1-4号,逻辑分区从5开始
	扩展分区不能直接用,必须划分为一个或多个逻辑分区才能使用
	
2、分区格式化,创建文件系统

3、修改/etc/fstab配置文件,设置开机后自动挂载
	使用命令挂载只是临时生效,修改配置文件以永久生效

1、查看或管理磁盘分区 fdisk

1fdisk -l				//列出全部磁盘的分区表
	fdisk -l [磁盘设备]		//列出指定磁盘的分区表
		
2fdisk [磁盘设备]			//管理该磁盘设备
	 d   delete a partition  *****
        删除分区	
     g   create a new empty GPT partition table
	    创建一个新的空的GPT分区表(可以对大于2T磁盘进行分区)
     l   list known partition types
	    列出可以分区的类型???
     m   print this menu
	    输出帮助菜单
     n   add a new partition  *****
	    新建增加一个分区
     p   print the partition table  *****
	    输出分区的结果信息
     q   quit without saving changes 
	    不保存退出
     t   change a partition s system id
	    改变分区的系统id==改变分区类型(LVM 增加swap分区大小)
     u   change display/entry units
	    改变分区的方式  是否按照扇区进行划分
     w   write table to disk and exit  *****
	    将分区的信息写入分区表并退出==保存分区信息并退出
例子1:列出磁盘/dev/sdb的分区表信息

[root@ch4ser ~]# fdisk -l /dev/sdb
磁盘 /dev/sdb:1073 MB, 1073741824 字节,2097152 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
例子2:将磁盘 /dev/sdb 分区(总共1G),一个主分区(500M),一个拓展分区(约523M)
		扩展分区不能直接用,它存在的意义是将自身分为多个逻辑分区
		拓展分区包含两个逻辑分区,第一个逻辑分区300M,第二个逻辑分区约221M
			
[root@ch4ser ~]# fdisk /dev/sdb   
欢迎使用 fdisk (util-linux 2.23.2)。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p						//创建主分区 500M
分区号 (1-4,默认 1):1
起始 扇区 (2048-2097151,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-2097151,默认为 2097151):+500M
分区 1 已设置为 Linux 类型,大小设为 500 MiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e						//创建扩展分区 523M
分区号 (2-4,默认 2):4
起始 扇区 (1026048-2097151,默认为 1026048):
将使用默认值 1026048
	//这里最好使用默认,因为不知道到底还有多少空间能用,可能会有部分空间需要拿去存放系统文件
Last 扇区, +扇区 or +size{K,M,G} (1026048-2097151,默认为 2097151):
将使用默认值 2097151
分区 4 已设置为 Extended 类型,大小设为 523 MiB

命令(输入 m 获取帮助):n				
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l						//创建第一个逻辑分区 300M
添加逻辑分区 5
起始 扇区 (1028096-2097151,默认为 1028096):
将使用默认值 1028096
Last 扇区, +扇区 or +size{K,M,G} (1028096-2097151,默认为 2097151):+300M
分区 5 已设置为 Linux 类型,大小设为 300 MiB

命令(输入 m 获取帮助):n
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l						//创建第二个逻辑分区 221M
添加逻辑分区 6
起始 扇区 (1644544-2097151,默认为 1644544):+200^[[D
不支持的后缀:”。
支持:10^N: KB (千字节), MB (兆字节), GB (吉字节)
            2^N: K  (约千字节), M  (约兆字节), G  (约吉字节)
起始 扇区 (1644544-2097151,默认为 1644544):
将使用默认值 1644544
	//这里最好使用默认,因为不知道到底还有多少空间能用,可能会有部分空间需要拿去存放系统文件
Last 扇区, +扇区 or +size{K,M,G} (1644544-2097151,默认为 2097151):
将使用默认值 2097151
分区 6 已设置为 Linux 类型,大小设为 221 MiB

命令(输入 m 获取帮助):w							//输入 w 保存分区信息并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
例子3:将例子2中的 /dev/sdb6 分区类型改为 Linux swap / Solaris 

[root@ch4ser ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。


命令(输入 m 获取帮助):t
分区号 (1,4-6,默认 6):6
Hex 代码(输入 L 列出所有代码):L

 024  NEC DOS         81  Minix / 旧 Linu bf  Solaris        
 1  FAT12           27  隐藏的 NTFS Win 82  Linux 交换 / So c1  DRDOS/sec (FAT-
 2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
 3  XENIX usr       3c  PartitionMagic  84  OS/2 隐藏的 C:  c6  DRDOS/sec (FAT-
 4  FAT16 <32M      40  Venix 80286     85  Linux 扩展      c7  Syrinx         
 5  扩展            41  PPC PReP Boot   86  NTFS 卷集       da  非文件系统数据 
 6  FAT16           42  SFS             87  NTFS 卷集       db  CP/M / CTOS / .
 7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux 纯文本    de  Dell 工具      
 8  AIX             4e  QNX4.x 第2部分  8e  Linux LVM       df  BootIt         
 9  AIX 可启动      4f  QNX4.x 第3部分  93  Amoeba          e1  DOS 访问       
 a  OS/2 启动管理器 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
 b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
 c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad 休 eb  BeOS fs        
 e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
 f  W95 扩展 (LBA)  54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC  
11  隐藏的 FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
12  Compaq 诊断     5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
14  隐藏的 FAT16 <3 61  SpeedStor       ab  Darwin 启动     f2  DOS 次要       
16  隐藏的 FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
17  隐藏的 HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
18  AST 智能睡眠    65  Novell Netware  b8  BSDI swap       fd  Linux raid 自动
1b  隐藏的 W95 FAT3 70  DiskSecure 多启 bb  Boot Wizard 隐  fe  LANstep        
1c  隐藏的 W95 FAT3 75  PC/IX           be  Solaris 启动    ff  BBT            
1e  隐藏的 W95 FAT1 80  旧 Minix       
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”

命令(输入 m 获取帮助):w
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。

2、创建文件系统(格式化) mkfs 和 mkswap

1、mkfs命令:创建普通文件系统

2、格式:mkfs  -t  文件系统类型  分区设备		//centos文件系统类型一般使用xfs
1、mkswap命令:创建交换文件系统

2、格式:mkswap 分区设备

3、让swap文件系统生效:swapon和swapoff

4、查看虚拟内存空间:cat /proc/meminfo | grep SwapTotal
例子1:对上面案例中的/dev/sdb1 和 /dev/sbd5 两个分区做初始化,创建xfs文件系统
	mkfs -t xfs /dev/sdb1
	mkfs -t xfs /dev/sdb5
例子2:对上面案例中的/dev/sdb6 做初始化,创建swap文件系统,并让其生效
	mkswap /dev/sdb6
	swapon /dev/sdb6

3、设置开机自动挂载 /etc/fstab

可以使用命令去挂载,但是注销之后就失效了,若需要永久生效,需要修改/etc/fstab配置文件
1、/etc/fstab 配置文件:包含需要开机后自动挂载的文件系统记录
	/dev/mapper/centos-root /                       xfs     defaults        0 0
	UUID=4d06ea35-db70-4dbc-aef2-f16c09d075da /boot                   xfs     defaults        0 0
	/dev/mapper/centos-swap swap                    swap    defaults        0 0
	/dev/cdrom      /mnt                            iso9660 defaults        0 0
例子1:对上面案例中的/dev/sdb1 和 /dev/sbd5 和 /dev/sdb6 设置开机自动挂载,在/etc/fstab下面添加
	/dev/sdb1       /data                           xfs     defaults        0 0
	/dev/sdb5       /file                           xfs     defaults        0 0
	/dev/sdb6       swap                            swap    defaults        0 0

4、刷新自动挂载配置文件 mount -a

5、查看磁盘使用情况 df -TH

[root@ch4ser /]# df -TH
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        19G  1.2G   18G    7% /
devtmpfs                devtmpfs  499M     0  499M    0% /dev
tmpfs                   tmpfs     511M     0  511M    0% /dev/shm
tmpfs                   tmpfs     511M  8.0M  503M    2% /run
tmpfs                   tmpfs     511M     0  511M    0% /sys/fs/cgroup
/dev/sr0                iso9660   4.5G  4.5G     0  100% /mnt
/dev/sda1               xfs       1.1G  136M  928M   13% /boot
tmpfs                   tmpfs     103M     0  103M    0% /run/user/0
/dev/sdb1               xfs       521M   27M  495M    6% /data
/dev/sdb5               xfs       312M   16M  296M    6% /file

磁盘和文件系统管理(进阶)

1、LVM 逻辑卷管理
1.1、LVM 概述:

Logical Volume Manager,类似于windows的跨区卷,可以动态调整磁盘容量,从而提高磁盘管理的灵活性

1.2、LVM 机制的基本概念

PV(物理卷)	一个硬盘或一个分区
VG(卷组)		一个或多个物理卷
LV(逻辑卷)	基于卷组的空间划分逻辑卷,可以多个

在这里插入图片描述

1.3、主要命令
在这里插入图片描述

1.4、划分磁盘顺序

PV(物理卷)------VG(卷组)-------LV(逻辑卷)-----格式化为xfs/swap文件系统---挂载使用

注意:只有LV才能直接被使用,PV、和VG都是用来生成LV的

1.5、PV使用命令

pvscan	[磁盘路径]		//查看物理卷,跟路径查看单个磁盘,不跟路径查看所有
pvcreate /dev/sdb1 /dev/sdc1   //将磁盘转换为物理卷
pvdisplay [磁盘路径]		//查看物理卷详细信息,跟路径查看单个磁盘,不跟路径查看所有
pvremove /dev/sdb1		//删除此物理卷,还原至普通分区

1.6、VG使用命令

vgscan				//查看已建立的卷组
vgcreate GP1 /dev/sdb1 /dev/sdc1 	//将物理卷sdb1、sdc1合成为卷组GP1
vgdisplay GP1			//查看卷组GP1详细信息
vgremove GP1				//删除卷组GP1
vgextend GP1 /dev/sdc1		//将sdc1扩展到GP1卷组中

1.7、LV使用命令

lvscan				//查看已建立的逻辑卷
lvcreate -L 10G -n data1 GP1 	//将GP1卷组中拿出10G用于创建data1逻辑卷(创建时是10G,而不是+10G)
lvcreate -l 100%VG -n data /dev/GP		//将VG所有容量都用于data逻辑卷,注意是小l(小l用于百分比的情况,大L用于增加、减少)
lvextend -L +10G /dev/GP1/data1  	//将data1逻辑卷容量加10G(逻辑卷的扩容不需要指定空间从哪儿来,因为只能是从该逻辑卷所属的卷组中来)
lvextend -r -l 100%VG /dev/GP/data //将VG剩余容量全部加给data逻辑卷,且不需要再执行"xfs_growfs"命令
lvreduce -L -5G /dev/GP1/data1 	//将data1逻辑卷减去5G容量
lvdisplay /dev/GP1/data1		//查看逻辑卷详细信息
lvremove /dev/GP/data1		//将逻辑卷data进行删除
xfs_growfs /dev/GP/data		//将扩展的容量加载到目前使用的分区中,与"lvextend -r"作用一样

2、LVM 管理案例
2.1、案例1

两块磁盘为sdb1 5G 和 sdc1 5G
1.将sdb1转换为物理卷
	1.1.将sdb和sdc使用fdisk分区
	1.2.pvcreate /dev/sdb1
2.将物理卷sdb1转换为卷组GP
	2.1.vgcreate GP /dev/sdb1
3.将卷组GP划分为逻辑卷data
	3.1.lvcreate -l 100%VG -n data /dev/GP
4.将sdc1扩容到卷组GP
	4.1.vgextend GP /dev/sdc1
5.将卷组GP中3G的容量扩展到逻辑卷data
	5.1.lvextend -L +3G /dev/GP/data
6.将卷组GP中剩余的容量创建为逻辑卷file
	6.1.lvcreate -l 100%VG -n file /dev/GP
7.格式化两块逻辑卷为xfs并挂载到/data、/file
	7.1.mkdir /data /file
	7.2.mkfs -t xfs /dev/GP/data
		mkfs -t xfs /dev/GP/file
	7.3.mount /dev/GP/data /data
		mount /dev/GP/file /file
8.删除2块LVM逻辑卷,使得恢复为刚插入服务器时的状态。		//先取消挂载,再依次删除lv、vg、pv,最后fdisk里删分区
	8.1.umount /dev/GP/data
		umount	/dev/GP/file
	8.2.lvremove /dev/GP/data
		lvremove /dev/GP/file
	8.3.vgremove /dev/GP/data
		vgremove /dev/GP/file
	8.4.pvremove /dev/GP/data
		pvremove /dev/GP/file
	8.5.使用fdisk将分区sdb1和sdc1删除
注意:当需要通过fdisk命令删除分区并重新创建分区时,需要先依次删除lv、vg、pv,再删除分区并重新创建。否则会出现以下错误:
Can't open /dev/sdb1 exclusively. Mounted filesystem? 	'

2.2、案例2

案例2:
现系统已添加3块 5G硬盘(sdb、sdc、sdd)
1.对两块硬盘转换为物理卷
	1.1.pvcreate /dev/sdb /dev/sdc
2.将两块物理卷合成为卷组gp
	2.1.vgcreate gp /dev/sdb /dev/sdc
3.将卷组gp 3G分给逻辑卷data
	3.1.lvcreate -L 3G -n data gp
4.将卷组gp 5G分给逻辑卷file
	4.1.lvcreate -L 5G -n file gp
5.将data格式化为xfs挂载/data
	5.1.mkdir /data
	5.2.mkfs -t xfs /dev/gp/data
6.将file格式化为xfs挂载/file
	6.1.mkdir /file
	6.2.mkfs -t xfs /dev/gp/file
7.将卷组剩余的2G扩容给file	//这里不同于案例1,案例2是格式化、挂载之后再进行扩容,需要先取消挂载(其实不取消挂载也行),再进行扩容
							//并且扩容时要加上-r参数重新格式化,因为欲扩容的逻辑卷已经有文件系统且在使用
	7.1.umount /dev/gp/file
	7.2.lvextend -r -l 100%VG /dev/gp/file
	7.3.mount /dev/gp/file /file
8.通过命令确定file分区的大小
	8.1.lvdisplay
9.将硬盘sdd转换为物理卷且加入原来的gp卷组并将3G空间扩容给data,2G空间扩容给file
	9.1.pvcreate /dev/sdd
	9.2.vgextend gp /dev/sdd
	9.3.umount /dev/gp/data
		umount /dev/gp/file
	9.4.lvextend -r -L +3G /dev/gp/data
		lvextend -r -l 100%VG /dev/gp/file
	9.5.mount /dev/gp/data	/data
		mount /dev/gp/file /file
10.设置两块分区为开机自动挂载
	10.1.vim /etc/fstab
		/dev/gp/data    /data                           xfs     defaults        0 0
		/dev/gp/file    /file                           xfs     defaults        0 0

3、磁盘配额
3.1、实现磁盘限额的条件

1.需要 Linux 内核支持
2.需要安装 xfsprogs 与quota 软件包
	rpm -q xfsprogs		//确认配额工具已安装

3.2、Linux 磁盘限额的特点

1.作用范围:针对指定的文件系统(分区)
2.限制对象:用户帐号、组帐号 
3.限制类型:磁盘容量、文件数量	
4.限制方法:软限制、硬限制 

3.3、磁盘配额管理步骤

0.确认配额工具已安装
	rpm -q xfsprogs
1.以支持配额功能的方式挂载文件系统
	如: mount -o usrquota,grpquota /dev/GP/data /abc		//方法1.以支持磁盘配额方式挂载/dev/GP/data到/abc
		vim /etc/fstab			//方法2.实现开机自动挂载并实现支持磁盘配额功能
		/dev/GP/data    /abc     xfs     defaults,usrquota,grpquota        0 0
2.编辑用户和组的配额设置
	如: xfs_quota -x -c 'limit -u bsoft=10M bhard=20M isoft=5 ihard=10 zhangsan' /abc
		//针对zhangsan用户配置磁盘配额
3.查看并验证磁盘配额
	如:xfs_quota -c 'quota -uv zhangsan' /abc		//查看磁盘容量配额
		xfs_quota -c 'quota -i -uv zhangsan' /abc	//查看文件数量配额
4.查看磁盘配额使用情况
	xfs_quota -x -c 'report -abi'	//查询系统中所有分区的磁盘配额情况,b为容量,i为文件数量

3.4、编辑配额设置:xfs_quota 命令

例子:# xfs_quota -x -c 'limit -u bsoft=10M bhard=20M isoft=5 ihard=10 zhangsan' /abc
xfs_quota	//磁盘配额关键命令
-x	//专家模式,表示可以使用所有管理命令
-c	//直接调用相关命令进行配置,而不进入交互式界面
limit	//单引号内的命令为设置具体的磁盘配额参数
-u	//表示为用户设置配额,-g为组
bsoft	//磁盘容量软限制
bhard	//磁盘容量硬限制
isoft	//文件数量软限制
ihard	//文件数量硬限制
// 0表示无限制

4、CentOS 7 磁盘配额案例

1.确认配额工具已安装
	1.1.rpm -q xfsprogs
2.卸载之前的挂载
	2.1.umount /abc
3.实现开机自动挂载并实现支持磁盘配额功能
	3.1.vim /etc/fstab
		/dev/GP/data    /abc     xfs     defaults,usrquota,grpquota        0 0
4.针对张三用户配置磁盘配额限制
	4.1.useradd zhangsan
	4.2.xfs_quota -x -c 'limit -u bsoft=10M bhard=20M isoft=5 ihard=10 zhangsan' /abc
5.查看磁盘容量配额
	5.1.xfs_quota -c 'quota -uv zhangsan' /abc
6.查看文件数量配额
	6.1.xfs_quota -c 'quota -i -uv zhangsan' /abc
7.验证文件数量限制
	7.1.给文件夹授权,方便zhangsan用户写入数据: chmod 777 /abc
	7.2.切换为zhangsan用户验证: su zhangsan
	7.3.cd /abc
	7.4.连续创建11个文件,第11个失败: touch 1 2 3 4 5 6 7 8 9 10 11 无法创建"11": 超出磁盘限额
8.验证磁盘容量限制
	8.1.dd if=/dev/zero of=/abc/a.txt bs=1M count=15	//先创建15M,由于限制20M,所以不会报错
	8.2.dd if=/dev/zero of=/abc/b.txt bs=1M count=10	//再创建10M,由于之前已有15M,因此会报错
9.查看配额使用情况
	9.1.xfs_quota -x -c 'report -abi'		//查询系统中所有分区的磁盘配额情况,a为所有,b为容量,i为文件数量

进程和计划任务管理

1、进程查看
1.1、程序、程序概述

1.程序:保存在硬盘、光盘等介质中的可执行代码和数据,静态保存的代码
2.进程:在 CPU 及内存中运行的程序代码,动态执行的代码
3.父、子进程:每个进程可以创建一个或多个进程

1.2、静态查看进程信息 ps

1.静态查看: ps aux 或 ps -elf

2.选项
	a:所有与进程有关的进程
	u:以用户为主的格式显示进程信息
	x:所有与终端无关的进程
	
3.字段信息
	VSZ:虚拟内存
	RSS:物理内存
	STAT:S-休眠 R-运行 Z-僵死 <-高优先级 N-低优先级 s-父进程 +-前台进程 l-多线程  T停止
	TIME:进程占用cpu的时间
	VIRT:占用swap内存大小
	PR:优先级
	RES:占用物理内存大小
	SHR:共享内存大小,两个进程间通信时所需
	START :开启时间
	
4.查找某个进程常用命令:(以bash为例)
		ps aux | grep "bash"

在这里插入图片描述

1.3、动态查看进程信息 top

1.动态查看: top

2.顶部栏字段信息
	20:16为当前系统运行时间 
	up  系统运行时间为5小时30分钟
	user  当前登录用户数
	load average 0.00  0.00  0.00 是系统负载,任务队列不同时间段平均长度,分别为1分钟,5分钟,15分钟前
	系统负载对于操作系统运行是否稳定非常重要,一般来说可以理解为1核心的CPU负载为1.00时表示100%负载,四核CPU负载为4时表示100%
	可用压力测试工具提高该值:# ab -n 20000 -c 20000 http://127.0.0.1/index.html
	Tasks   113 total,  当前进程总数
	1 running   正在运行的进程数
	112 sleeping   睡眠的进程数
	0 stop    停止的进程数
	0 zombie   僵尸进程数
	Cpu(s):  0.0%us,  用户空间占用CPU百分比
	0.3%sy,  内核空间占用CPU百分比
    0.0%ni, 用户进程空间内改变过优先级的进程占用CPU百分比
    99.7%id 空闲CPU
    0.0%wa  等待输入输出的CPU时间百分比
    0.0%hi    硬中断
    0.0%si    软中断
    0.0%st    实时
	
3.快捷键
	M:根据内存使用进行排序
	P:根据CPU使用排序
	T:根据累计运行时间进行排序
	l:是否显示启动时间、平均负载等信息
	t:是否显示进程和CPU状态相关信息
	m:是否显示内存相关信息
	c:是否显示完整命令行信息
	k:终止某个进程
	q:退出top
	
4.自定义刷新间隔(默认为3s一次)
	top -d 1	//一秒钟刷新一次

在这里插入图片描述

1.4、其他查看进程信息的命令 pgrep、pidof、pstree

1.pgrep命令:根据特定条件查询进程 PID 信息
	1.1.选项
		-l:显示进程名
		-U:指定特定用户
		-t:指定终端
	1.2.示例
		pgrep -lu root					//查看root用户开启的进程与PID
		pgrep -l -U zhangsan -t tty1	//指定张三用户在tty1终端下运行的进程
2.pidof命令:查看进程 PID 号
	2.1:pidof sshd		//查看sshd进程的PID
3.pstree命令:以树形结构列出进程信息
	3.1.选项
		-a:显示完整信息
		-u:列出对应用户名
		-p:列出对应PID号
	3.2.示例
		pstree -aup			//查看进程树详细信息
		pstree -aup root	//以树形结构查看root用户打开的进程

2、进程控制
2.1、进程的启动方式

1.手工启动
2.前台启动:用户输入命令,直接执行程序
3.后台启动:在命令尾部加入“&”符号
4.调度启动

2.2、进程的前后台调度

0.命令尾部加入“&”符号:调入后台执行
	cp /dev/cdrom aa.iso &
1.Ctrl+Z 组合键:将当前进程挂起,即调入后台并停止执行
	
2.jobs 命令:查看处于后台的任务列表
	jobs -l 			//查看后台程序及其编号
3.fg 命令:将后台进程恢复到前台运行,可指定任务序号
	fg 1				//将后台程序调入前台
4、bg 命令:将后台暂停的任务恢复启动
	bg 1				//将后台暂停的任务恢复启动

2.3、终止进程 kill、killall

1.kill:使用PID终止进程
	1.1.格式:kill [选项] PID号

	1.2.选项:-9	// 强制杀死进程
	
	1.3.示例:终止进程sshd
		查找sshd进程对应的PID
			pidof sshd 或 ps aux | grep sshd
		将查询到的PID执行kill操作
			kill 2888
2.killall:使用进程名终止进程
	2.1.示例:killall -9 vim		//强制结束vim的所有进程
3.pkill:根据运行该进程的用户、进程所在终端等,终止进程
	3.1.选项
		-U	//指定用户
		-t	//指定终端
	3.2.示例:pkill -9 -U "zhangsan"		//强制结束用户张三所有进程

3、计划任务
3.1、一次性计划任务 at/atd

1.一次性计划任务:at
	1.0.需要yum安装at工具,并且需要一直启用atd服务(不启用的话那么计划任务就没有意义)
	
	1.1.格式:at  [HH:MM]  [yyyy-mm-dd]
	
	1.2.示例:时间到 08:20 2017-03-20 时,在根目录下创建文件夹123
		date					//查看当前系统时间
		yum install -y at		//yum下载at
		systemctl start atd		//启动at
		systemctl enable atd	//设置开机启动at
		at 08:20 2017-03-20
		at> mkdir /123			//输入完成后Ctrl+d提交
		at> <EOT>	

3.查看未执行的任务列表:atq
	1       Tue Apr 11 16:55:00 2023 a root
	2       Tue Apr 11 16:56:00 2023 a root
4.删除第n条任务:atrm n

3.2、周期性计划任务 crontab/crond

0.和atd一样,同样需要启用crond服务才行
	# systemctl start crond
	# systemctl enable crond
	
1.crontb命令:按照预先设置的时间周期(分钟、小时、天……)重复执行用户指定的命令操作
2.主要设置文件
	全局配置文件,位于文件:/etc/crontab 
	系统默认的设置,位于目录:/etc/cron.*/
	用户定义的设置,位于文件:/var/spool/cron/用户名
3.编辑计划任务
	crontab  -e  [-u  用户名]
4.查看计划任务
	crontab  -l  [-u  用户名]
5.删除计划任务
	crontab  -r  [-u  用户名]
注意:root用户可以管理指定用户的计划任务,普通用户只能管理自己的计划任务

在这里插入图片描述
在这里插入图片描述

3.3、周期性计划任务案例

需求:每天19点50分自动删除/home下的所有内容
1.启用crond
	systemctl start crond 或 systemctl enable crond
2.编辑计划任务,保存并退出
	crontab -e
	50 19 * * * /usr/bin/rm -rf /home/*
		//使用crontab编辑计划任务必须使用命令的绝对路径,不知道路径可以 find / -name rm

系统日志分析及故障排查

1、日志文件分析

0.日志文件的存放位置:/var/log/...
1.日志文件功能:
	用于记录系统、程序运行中发生的各种事件
	通过阅读日志,有助于诊断和解决系统故障
2.日志文件的分类
	内核及系统日志:由系统服务rsyslog统一进行管理,日志格式基本相似
	用户日志:记录系统用户登录及退出系统的相关信息
	程序日志:由各种应用程序独立管理的日志文件,记录格式不统一
3.内核及系统日志:/var/log/messages
4.用户日志:一般不cat看用户日志,而是命令看
	last命令:用户最近登录情况
	lastb命令:登录失败的用户记录
5.程序日志:常见的有
	Web服务:/var/log/httpd/		access_log、error_log 
	代理服务:/var/log/squid/	access.log、cache.log
	FTP服务:/var/log/xferlog	
6.日志管理策略
	及时作好备份和归档
	延长日志保存期限
	控制日志访问权限
	日志中可能会包含各类敏感信息,如账户、口令等
	集中管理日志
	将服务器的日志文件发到统一的日志文件服务器
	便于日志信息的统一收集、整理和分析
	杜绝日志信息的意外丢失、恶意篡改或删除

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2、故障排查

1.MBR 扇区故障
	1.1.故障原因
		病毒、木马等造成的破坏
		不正确的分区操作、磁盘读写误操作
	1.2.故障现象
		找不到硬盘,启动中断
		无法加载操作系统,开机后黑屏
	1.3.解决思路
		应提前作好“异地”备份文件
		以 CentOS 7安装光盘引导进入急救模式
		从备份文件中恢复
2.GRUB 引导故障
	2.1.故障原因
		MBR 中的 GRUB 引导程序遭到破坏
		grub.conf 文件丢失、引导配置有误
	2.2.故障现象
		系统引导停滞,显示“grub>” 提示符
	2.3.解决思路
		尝试手动输入引导命令
		进入急救模式,重写或者从备份中恢复 grub.conf
		向 MBR 扇区中重建 grub 程序
3.遗忘 root 用户密码
	3.1.故障原因
		遗忘 root 用户的密码
	3.2.故障现象
		无法进行需要 root 权限的管理操作
		若没有其他可用帐号,将无法登录系统
	3.3.解决思路
		进入单用户模式,重设密码
4.修复文件系统
	4.1.故障原因
		非正常关机、突然断电、设备读写失误等
		文件系统的超级块(super-block)信息被破坏
	4.2.故障现象
		无法向分区中读取或写入数据
		启动后提示“Give root password for maintenance” 
	4.3.解决思路
		根据提示输入 root 口令,进入修复状态
		使用xfs_repair命令进行修复
5.磁盘资源耗尽故障
	5.1.故障原因
		磁盘空间已被大量的数据占满,空间耗尽
		虽然还有可用空间,但文件数i节点耗尽 
	5.2.故障现象
		无法写入新的文件,提示“… : 设备上没有空间”
		部分程序无法运行,甚至系统无法启动
	5.3.解决思路
		清理磁盘空间,删除无用、冗余的文件
		转移或删除占用大量 i 节点的琐碎文件
		进入急救模式进行修复
		为用户设置磁盘配额
6.检测磁盘坏道
	6.1.故障原因
		磁盘设备中存在坏道(逻辑的或物理的)
	6.2.故障现象
		读取磁盘中的数据时,磁盘设备发出异常声响。
		访问磁盘中的某个文件时,反复读取且出错,提示文件损坏
		对于新建立的分区无法完成格式化
		系统使用该磁盘时频繁死机
	6.3.解决思路
		检测硬盘中是否存在坏道
		修复硬盘,或更换新的硬盘

2.1、模拟MBR扇区故障

关机添加新磁盘			//存放MBR备份数据
# fdisk /dev/sdb		//新磁盘分区
# mkfs -t xfs /dev/sdb1  	//格式化新磁盘
# mount /dev/sdb1 /backup/	//挂载到目录
# dd if=/dev/sda of=/backup/sda.mbr bs=512 count=1	//备份mbr到其他目录
# dd if=/dev/zero of=/dev/sda bs=512 count=1		//模拟mbr文件故障

operating system not found...	

单用户模式:基于现有系统的系统文件,windows安全模式
急救模式:基于光盘镜像文件,windows 安全模式
使用光盘进入急救模式,
#mkdir /123
#mount /dev/sdb1 /123
#dd if=/123/sda.mbr of=/dev/sda
#reboot

2.2、模拟GRUB引导故障

# cd /boot/grub2/
# mv grub.cfg grub.cfg.back
# cd /boot/grub/		//centos 6为该命令
# mv grub.conf grub.conf.back	//centos 6为该命令

# reboot
重启后出现grub> 说明grub引导文件损坏
重启进入bios 调整光驱为第一启动项,进入第三行进行急救模式
#chroot /mnt/sysimage
#cd /boot/grub2
#cp grub.cfg.back grub.cfg
#grub2-install /dev/sda			//安装grub引导文件到sda中
#exit
#关机。调整bios为硬盘启动,成功启动系统

#cd /boot/grub				//centos 6为该命令
#cp grub.conf.back grub.conf		//centos 6为该命令
#grub-install /dev/sda			//CentOS 6为该命令

2.3、重设root用户登录密码

方法1:单用户模式:
开机读秒时选择第一行按"e"
在linux16这一行,将之前的"ro",改为"rw init=sysroot/bin/sh",然后按ctrl+x、
输入:chroot /sysroot
输入:passwd root  		//输入新密码
exit 
reboot		//重启系统即可输入新密码登录
方法2:
通过光盘进入急救模式  
输入:chroot /mnt/sysimage
passwd root		//修改密码后重启即可
#exit
#reboot

2.4、模拟文件系统故障

在linux主机中,可能会因为非正常关机、突然断电设备数据读写异常等原因导致文件系统的破坏,比较常见的是超级块损坏,他记录了该文件系统的类型、大小、空闲磁盘块等
当文件系统超级块数据损坏时 linux系统无法识别该文件系统 挂载时会出现:
"you must specify the filesystem type"
或硬盘已经开机自挂载在系统 超级块损坏后 启动系统会提示:
"Give root password for maintenance"
在开机字符界面上面会显示是哪个分区损坏。

模拟故障:
# fdisk /dev/sdb
#mkfs -t xfs /dev/sdb1
#vim /etc/fstab			//设置磁盘开机检测
/dev/sdb1               /opt                    xfs    defaults        0 1
# dd if=/dev/zero of=/dev/sdb1 bs=512 count=4	//在执行时确定该分区未挂载
#reboot

重启后由于sdb1磁盘超级块损坏,导致系统报错,无法启动,这是在当前命令行输入root用户密码进入shell
#xfs_repair /dev/sdb1			//centos 7 修复
#fsck -y -t ext4 /dev/sdb1		//修复损坏的超级块,CentOS 6执行该命令
#reboot					//重启后恢复正常

2.5、模拟磁盘资源耗尽故障

当一个文件系统磁盘空间耗尽后 将无法继续在该分区创建新的文件数据 比如当根分区/ 中的磁盘耗尽 可能导致部分程序乃至整个系统无法正常启动或运行不了 因为一些系统启动的临时性文件创建不了
当根分区资源耗尽无法正常启动系统时可以进入急救模式删除一些不关紧要的文件 从而减轻磁盘占用率

I节点故障
一个分区创建了太多的细小目录文件等将会占用分区的I节点从而系统将不能创建新的文件或目录
解决方式 ---删除没用的文件或目录或者加大磁盘空间等
创建文件目录时会提醒:
touch:无法触碰 "设备名称": 设备上没有空间
模拟i节点耗尽故障
#fdisk /dev/sdb			//分区,大小为3M左右,在系统中通过df查看为24M左右,可容纳的I节点为6013个左右
#mkdir /root/123		
#mkfs -t ext4 /dev/sdb1
#mount /dev/sdb1 /root/123
使用脚本创建若干空文件,用于占满分区,模拟i节点故障
#vim /root/123/a.sh		//新建shell脚本
以下为脚本内容:
#!/bin/bash
i=1
while [ $i -le 6013 ]
do
touch /root/123/file$i
let i++
done
保存退出
#sh /root/123/a.sh		//执行脚本文件
#mkdir /root/123/aaa		//再次创建文件时,提示报错空间不足
#df -hT				//查看挂载情况,发现sdb1磁盘占用100%
修复i节点耗尽故障:
#rm -rf /root/123/file*		//删除无关的文件,恢复磁盘i节点数量

2.6、检测磁盘坏道

检测硬盘坏道
磁盘坏道分为逻辑坏道和物理坏道两种
逻辑坏道 主要由于软件操作不当造成 可以用软件修复
物理坏道 只能通过更改磁盘分区或扇区的占用位置来进行改善 排除掉包含有坏道的磁盘空间
当磁盘有以下现象是可能回事磁盘出现坏道:
》读取磁盘中的数据时 磁盘设备发出异常声响
》访问磁盘中的某个文件时 反复读取错误 提示文件损坏
》对于新建的分区无法完成格式化
》系统使用该磁盘时频繁死机

检测磁盘坏道情况:
#badblocks -sv /dev/sdb

基础网络设置

1、查看、测试网络以及设置网络地址参数

0.需要yum下载net-tools工具
	yum install -y net-tools
	
1.查看网络接口信息 ifconfig
	1.1.设置网络接口的IP地址、子网掩码
		ifconfig  接口名  ip地址  [netmask  子网掩码]
		ifconfig  网络接口  ip地址[/掩码长度]
		如:ifconfig ens33 192.168.1.1/24		//临时设置IP地址
	1.2.禁用或者重新激活网卡
		ifconfig  网络接口  up
		ifconfig  网络接口  down 
		如: ifup ens33	/只启动一个网卡 
			ifdown ens33	/只停止一个网卡
	1.3.设置虚拟网络接口
		ifconfig  接口名:序号  IP地址
		如:ifconfig ens33:1 192.168.1.1/24	//设置ens33网卡的1号虚拟网络接口的IP
		
2.查看主机名称 hostname
	2.1.修改主机名
	vim /etc/hostname
	ch4ser				//修改主机名为ch4ser
	2.2.修改hosts主机解析文件,添加解析当前主机名称条目
	vim /etc/hosts
	127.0.0.1 ch4ser	//将本机IP解析到ch4ser

3.查看路由表条目 route -n
	3.1.添加到指定网段的静态路由记录
		route add  -net  网段地址  gw  IP地址
		如:route add -net 10.0.0.0/8 gw 192.168.1.1	//目标地址为10.0.0.0,192.168.1.1为默认网关
	3.2.删除到指定网段的路由记录
		route  del  -net  网段地址
		如:route del -net 10.0.0.0/8 gw 192.168.1.1	//删除
		如:route del -net 0.0.0.0			//删除默认路由
	3.3.删除路由表中的默认网关记录
		route  del  default  gw  IP地址
		如:route del default gw 192.168.1.1	//删除默认网关192.168.1.1
	3.4.向路由表中添加默认网关记录
		route add  default  gw  IP地址
		如:route add default gw 192.168.1.1	//添加默认网关192.168.1.1
	3.5.创建以下文件,添加内容设置永久添加静态路由:
		vim /etc/sysconfig/network-scripts/ifup-routes 
		route add -net 192.168.5.0/24 gw 192.168.2.10
		
4.查看网络连接情况 netstat
	4.1. netstat -anpt	//查看tcp协议端口的开放信息
		 netstat -anpu	//查看udp协议端口的开放信息
		 如:netstat -anpt | grep "22"		//查看本机端口22 连接状态
		 
5.测试网络连接 ping : 测试网络连通性
	5.1. ping [选项] 目标主机
	
6.跟踪数据包 traceroute : 测试从当前主机到目的主机之间经过的网络节点
	6.1. traceroute 目标主机地址
	
7.域名解析 nslookup : 测试DNS域名解析
	7.1. nslookup 目标主机地址  [DNS服务器地址]
		如: nslookup www.google.com 8.8.8.8		//对www.google.com做域名解析,并指定DNS服务器8.8.8.8

2、使用 DHCP 动态配置主机地址(同网段)

1.dhcp软件包安装
yum install -y dhcp

//将DHCP主配置文件模板复制到/etc/dhcp/下面,方便照着模板修改(不做这步也行)
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf

2.dhcp主要文件介绍
主配置文件: /etc/dhcp/dhcpd.conf
执行程序:/usr/sbin/dhcpd、/usr/sbin/dhcrelay
执行参数配置:/etc/sysconfig/dhcpd

3.主配置文件 dhcpd.conf 的内容构成,如下:
	# 定义 DHCP 服务器的全局配置选项
	option domain-name "example.com";				//指定域名
	option domain-name-servers ns1.example.com, ns2.example.com;	//指定 DNS 服务器的地址
	
	# 定义 DHCP 服务器的监听接口和地址范围
	subnet 192.168.1.0 netmask 255.255.255.0 {		//指定了 IP 地址范围
	  range 192.168.1.100 192.168.1.200;			//指定了分配给客户端的 IP 地址范围
	  option routers 192.168.1.1;					//指定了默认网关的 IP 地址
	  option broadcast-address 192.168.1.255;		//指定了广播地址
	}
	
	# 定义客户端的静态 IP 地址(通过MAC地址给某个主机分配固定IP)
	host client1 {
	  hardware ethernet 00:11:22:33:44:55;
	  fixed-address 192.168.1.10;
	}
	
	# 定义其他选项,也属于全局设置(包括子网掩码、时间偏移量、默认租约时间、最大租约时间等等)
	option subnet-mask 255.255.255.0;
	option time-offset -18000;
	default-lease-time 86400;
	max-lease-time 604800;

4.主配置文件常用选项
	4.1.全局设置:(作用于整个 DHCP 服务器)
		ddns-update-style  none;
		default-lease-time  21600;
		max-lease-time  43200;
		option domain-name  "domain.org";
		option domain-name-servers  202.106.0.20;
	4.2.Subnet网段声明:(作用于整个子网段)
		range 参数:设置用于分配的 IP 地址池
		option subnet-mask 参数:设置客户机的子网掩码
		option routers 参数:设置客户机的默认网关地址
	4.3.host 主机声明:(作用于单个主机)
		hardware ethernet 参数:指定对应主机的 MAC 地址
		fixed-address 参数:指定为该主机保留的 IP 地址

5.启动 DHCP 服务
	systemctl restart dhcpd 
	
6.查看租约文件
	cat /var/lib/dhcpd/dhcpd.leases

7.使用 DHCP 服务器给客户机分配 IP 信息
	7.1.修改网卡配置文件(/etc/sysconfig/network-scripts/ifcfg-<interface>BOOTPROTO=dhcp 
	7.2.重启客户机网卡
	systemctl restart network
	7.3.查看IP是否成功被分配
	ifconfig

FTP服务部署与配置

1.vsftpd软件包安装
yum install -y vsftpd

2.vsftpd主要文件介绍
	2.1.主程序:/usr/sbin/vsftpd
	2.2.服务名:vsftpd
	2.3.用户控制列表文件
	 /etc/vsftpd/ftpusers		//始终是黑名单
	 /etc/vsftpd/user_list		//可当黑名单,也可当白名单
	2.4.主配置文件
	 /etc/vsftpd/vsftpd.conf

3.主配置文件结构 vsftpd.conf
	3.1.全局配置项
	3.2.本地/系统用户配置项
	3.3.匿名用户配置项
	3.4.虚拟用户配置项
4.常用的全局配置项
	listen=YES:是否以独立运行的方式监听服务(ipv4)
	listen_ipv6=NO:ipv6监听需要关闭才能启用该命令。
	listen_address=192.168.4.1:设置监听的 IP 地址
	listen_port=21:设置监听 FTP 服务的端口号
	write_enable=YES:是否启用写入权限
	download_enable=YES:是否允许下载文件
	userlist_enable=YES:是否启用 user_list 列表文件,配置文件默认有这项,且为YES
	userlist_deny=YES:NO是白名单,YES是黑名单;配置文件默认没有这项,但就算不配置其值也默认为YES,也就是黑名单
	max_clients=0:限制并发客户端连接数,0表示不限制
	max_per_ip=0:限制同一 IP 地址的并发连接数,0表示不限制
	xferlog_enable=YES:是否记录用户上传下载日志
	xferlog_std_format=YES:启用xferlog格式记录日志,no则使用vsftpd的格式
	dirmessage_enable=YES:如果目录存在.message隐藏文件时,当进入此目录时,会显示.message里面的内容  
	connect_from_port_20=YES:允许服务器主动模式
	idle_session_timeout=600:当连接后空闲时间超过600秒将会自动断开
	data_connection_timeout=120:当数据连接建立连接后空闲120秒自动断开
	tcp_wrappers=YES:是否启用主机访问控制
	#chown_uploads=YES		//开启用户上传数据归属
	#chown_username=whoever		//上传的数据属于whoever用户
	#nopriv_user=ftpsecure		//定义唯一一个ftp用户,该用户只用于ftp
	#async_abor_enable=YES		//取消下载后客户端不挂起
	#ascii_upload_enable=YES	//使用文本模式上传
	#ascii_download_enable=YES	//使用文本模式下载,通常情况下用户数据包含文本和图片视频等,因此服务器会自动切换模式上传下载相关数据,文本用ascii,图片用二进制
	#ftpd_banner=Welcome to blah FTP service. //FTP登录欢迎信息
	#deny_email_enable=YES
	#banned_email_file=/etc/vsftpd/banned_emails //若是启动这项功能,则必须提供一个文档banner_emails,内容为email address。若是使用匿名登入,则会要求输入email address,若输入的email address 在此文档内,则不允许进入。
	#pasv_enable=YES  
	#port_enable=YES 	//只能出现一个,表示连接模式,此项为主动
	#use_localtime=YES  	//使用本机时间

5.常用的本地用户 FTP 配置项
	chroot_local_user=YES:是否将用户禁锢在主目录
	#chroot_list_enable=YES:
	#chroot_list_file=/etc/vsftpd/chroot_list	//当登陆FTP服务器时,被列在chroot_list文件中的用户,不可以访问FTP根目录以外的目录。
	#ls_recurse_enable=YES          //是否可以使用ls -R 命令,递归列出子文件夹内的信息
	local_enable=YES:是否启用本地系统用户
	local_umask=022:本地用户所上传文件的权限反掩码   
	local_root=/var/ftp:设置本地用户的 FTP 根目录;虚拟用户默认使用该选项,可以在虚拟用户的个人配置文件加入该配置。
	local_max_rate=0:限制最大传输速率(字节/秒)
	
6.常用的匿名 FTP 配置项
	anonymous_enable=YES:启用匿名访问
	anon_umask=022:匿名用户所上传文件的权限掩码
	anon_root=/var/ftp:匿名用户的 FTP 根目录,对虚拟用户无效。
	anon_upload_enable=YES:允许上传文件
	anon_mkdir_write_enable=YES:允许创建目录
	anon_other_write_enable=YES:开放其他写入权
	anon_max_rate=0:限制最大传输速率(字节/秒)
7.关于umask上传权限的说明:
	对于文件来说,这一数字的最大值分别是6,因为系统不允许在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限
	目录则允许设置执行权限,umask中各个数字最大可以到7
	如:
	umask值为022,则默认目录权限为755,默认文件权限为644。
	如果配置的umask值为000,则默认目录权限为777,默认文件权限为666
	如果配置的umask值为047,则默认目录权限为730,默认文件权限为620

8.(重点)关于 user_list 和 ftpusers 的说明
	8.1.ftpusers不受任何配制项的影响,它总是有效,是一个黑名单
	8.2.user_list可以有效,也可以无效,通过userlist_enable来控制;有效时,可以是一个黑名单,也可以是一个白名,通过userlist_deny来控制
	8.3.当且仅当userlist_enable=YES时,userlist_deny项的配置才有效;当其userlist_enable=NO时,无论userlist_deny项为何值都是无效的,本地全体用户(除去ftpusers中的用户)都可以登入FTP	
	8.4.vsftpd.conf配置文件中默认就有userlist_enable=YES,默认没有userlist_deny,但userlist_deny即使不设置也为YES,也就是说,在没有改动vsftpd.conf配置文件的前提下,默认启用了user_list,且和ftpusers一样为黑名单
	8.5.当userlist_enable=YES时,userlist_deny=NO时,user_list是一个白名单,即只有user_list中的用户才会被准许登入。注意:使用白名单后,匿名用户将无法登入!除非显式在user_list中加入一行:anonymous

9.注意:在使用匿名用户访问ftp时,不要给/var/ftp文件夹 777 权限,否则会报错,无法登陆ftp,
		但是可以给/var/ftp/下的子文件夹777权限,比如/var/ftp/pub
案例1:设置通过匿名用户访问服务器,下载并上传文件
0.启用vsftpd服务,并设置为开机自启
	systemctl start vsftpd
	systemctl enable vsftpd
1.修改vsftpd.conf,启用匿名访问,设置用户能够上传、下载文件,并设置匿名用户根目录
	vim /etc/vsftpd/vsftpd.conf
	anonymous_enable=YES			//启用匿名访问
	anon_upload_enable=YES			//设置匿名用户能够上传文件
	download_enable=YES				//允许下载文件
	anon_root=/var/ftp				//匿名用户的 FTP 根目录 
2.修改/var/ftp/pub文件夹的安全权限,第一步只相当于给了共享权限
	chmod 777 /var/ftp/pub			//设置匿名用户可以上传下载
3.在pub文件夹下创建一个文件,用于测试匿名用户的下载
	cd pub
	tar zcf a.tar.gz /etc/vsftpd/		//创建文件,提供下载使用
4.重启vsftpd服务,让配置生效
	systemctl restart vsftpd
5.在FTP客户机(CentOS7)上测试,需要与FTP服务器处于同一网段,且安装了ftp服务
	5.0.客户机安装ftp服务,连接FTP服务器
	yum install -y ftp
	[root@ch4ser ~]# ftp 192.168.1.100
	Name (192.168.1.100:root): anonymous
	Password:				//直接回车
	5.1.测试下载功能
	ftp> get a.tar.gz		//默认下载到当前工作目录,即在什么目录下进入的ftp服务器,那么下载的文件将存放在此位置
	5.2.测试上传功能
	ftp> put aaa.txt
案例2:基本的本地用户验证,设置本地用户能够通过服务器本地用户名及密码的形式进行验证
0.启用vsftpd服务,并设置为开机自启
1.修改vsftpd.conf
	local_enable=YES				//启用此项,表示启用本地用户验证
	chroot_local_user=YES			//禁止用户随意切换服务器中的目录,只能够在家目录
	local_root=/var/ftp
2.重启vsftpd服务,让配置生效
3.测试
	3.1.在FTP服务器创建用户zhangsan,并设置密码
	useradd zhangsan
	passwd zhangsan
	3.2.在FTP客户机上登录zhangsan用户进行连接
	[root@ch4ser ~]# ftp 192.168.1.100
	Name (192.168.1.100:root): zhangsan
	Password:
	
4.注意:如果登录不上,很可能是黑白名单的问题,但这里不能使用root用户进行登录,只能用其他用户,暂时不知道为什么	
案例3:基于用户列表的验证,通过/etc/vsftpd/user_list设置黑/白名单
0.启用vsftpd服务,并设置为开机自启
1.修改user_list
	vim /etc/vsftpd/user_list
	zhangsan
2.修改vsftpd.conf
	userlist_enable=YES				//启用 user_list 列表文件
	userlist_deny=NO				//该值为NO时,这列表将是一个白名单,为yes时,将是一个黑名单,未配置时 user_list 默认为黑名单
	chroot_local_user=YES			//禁止用户随意切换服务器中的目录,只能够在家目录
3.重启vsftpd服务,让配置生效
4.测试思路
	4.1.在FTP服务器上新建用户lisi,并配置密码
	4.2.FTP客户机能使用zhangsan用户登录ftp服务器,而不能使用lisi用户登录ftp服务器
案例4:基本的虚拟用户验证
0.启用vsftpd服务,并设置为开机自启
1.在/etc/vsftpd/下创建虚拟用户列表,名字无所谓,这里我命名为vusers.list
	vim /etc/vsftpd/vusers.list
	chengdu		//用户名
	123			//密码
	shanghai
	456
2.将上面的vusers.list转为可识别的用户数据库文件
	cd /etc/vsftpd/
	db_load -T -t hash -f vusers.list vusers.db
	cat vusers.db						//查看生成的数据库文件,虽然是二进制格式,但其实还是能看到密码,不太安全
	chmod 600 /etc/vsftpd/vusers.*		//为了更安全,只给root用户rwx权限,其余人没有权限
3.将系统账户映射到虚拟用户
	3.1.创建用户abc,指定家目录以及拒绝本地登录
		useradd -s /sbin/nologin abc
	3.2.创建虚拟用户使用的PAM验证文件
		vim /etc/pam.d/vsftpd.vu
		auth    required        pam_userdb.so db=/etc/vsftpd/vusers
		account required        pam_userdb.so db=/etc/vsftpd/vusers
4.修改vsftpd配置文件
	vim /etc/vsftpd/vsftpd.conf
	guest_enable=YES				//启用用户映射功能
	guest_username=abc			//指定映射系统用户名称abc
	pam_service_name=vsftpd.vu		//指定PAM认证文件,此处只需修改
5.为不同虚拟用户创建独立的配置文件
	5.1.创建存放虚拟用户配置文件的文件夹,我这里命名为vusers_dir
		mkdir /etc/vsftpd/vusers_dir
	5.2.在主配置文件中,指定保存虚拟用户的配置文件的位置
		vim /etc/vsftpd/vsftpd.conf
		user_config_dir=/etc/vsftpd/vusers_dir
	5.3.修改chengdu用户、shanghai用户的配置文件
		vim /etc/vsftpd/vusers_dir/chengdu
		local_root=/var/ftp					//chengdu用户的工作目录
		anon_upload_enable=YES				//能够上传
		anon_mkdir_write_enable=YES			//能够创建目录
		
		vim /etc/vsftpd/vusers_dir/shanghai 
		local_root=/var/ftp					//shanghai用户的工作目录
		anon_upload_enable=NO				//不能够上传
		anon_mkdir_write_enable=NO			//不能够创建目录
6.重启vsftpd服务,让配置生效
7.验证

DNS服务部署与配置

1、DNS相关基础知识

1.概述:DNS协议使用UDP/TCP 53端口号,UDP负责域名解析请求报文,TCP负责多台DNS服务器之间区域传送,当域名解析请求单个报文字节数过大时,如超过512字节,可能会采用TCP 53进行通信,因此在防火墙定义策略时,可同时开启53的TCP/UDP协议。

2.DNS服务器分类
	2.1.主DNS服务器:就是一台存储着原始资料的DNS服务器。
	2.2.从DNS服务器:使用自动更新方式从主DNS服务器同步数据的DNS服务器。也称辅助DNS服务器。
	2.3.缓存服务器:DNS缓存服务器可以在本地缓存常用的DNS查询结果,当用户再次访问相同的网站时,DNS缓存服务器可以直接返回缓存的IP地址,而不需要再向		远程的DNS服务器发送查询请求,从而节省了网络流量和响应时间。缓存服务器也叫递归服务器。
	2.4.根提示服务器:根据系统中的13组根服务器的IP地址寻求域名解析(需要当前DNS服务器连接外网)
	2.5.转发器:这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

3.DNS的记录类型
	3.1.A记录:将域名解析为IPv4地址,例如将www.example.com解析为192.0.2.1。
	3.2.AAAA记录:将域名解析为IPv6地址,例如将www.example.com解析为2001:0db8:85a3:0000:0000:8a2e:0370:7334。
	3.3.CNAME记录:实现域名的别名,例如将www.example.com映射到example.com。
	3.4.MX记录:指定邮件交换服务器的地址,用于发送邮件。
	3.5.NS记录:指定该域名所使用的DNS服务器的地址,用于进行域名解析。
	3.6.PTR记录:将IPv4地址或IPv6地址解析为域名,例如将192.0.2.1解析为www.example.com。
	3.7.SOA记录:指定该域名的"起点",其中包含了域名服务器的相关信息,例如域名的管理员联系方式等。每个域名至少需要有一个SOA记录,它通常是DNS区域文件中的第一条记录。

2、DNS服务部署与配置的流程

1.使用bind软件部署DNS服务
	yum install -y bind*
2.配置DNS服务
	2.1.bind软件的主配置文件位置:/etc/named.conf
	2.2.修改主配置文件named.conf
	2.3.创建DNS区域文件:在/var/named/目录下创建zone文件,用于存储DNS解析记录
		如:vim /var/named/abc.com.zone
3.启动DNS服务
	systemctl start named
	systemctl enable named

3、DNS主配置文件 named.conf 详解

1.主配置文件参考模板:可将模板复制到/etc/下面,替换掉named.conf,方便进行修改
	1.1.参考模板位置:/usr/share/doc/bind-9.9.4/sample/etc/named.conf
2.主配置文件结构分析:named.conf通常由四个部分组成,如下所述:
	2.1.options:此部分用于设置全局选项,如DNS服务器的缓存设置、递归查询设置等。
	2.2.logging:此部分用于配置DNS服务器的日志记录。如配置日志文件的名称和位置,以及要记录的信息级别
	2.3.zone:此部分用于定义域名区域,指定区域的名称、类型、文件路径和数据传输类型等。可以为每个区域指定一个名称和类型(master或slave)
	2.4.include:此部分用于包含其他文件中的配置信息。可以使配置文件更易于管理,并将不同的配置分组。
3.主配置文件格式:
	options {
	    directory "/var/named";		//指定工作目录在/var/named,一般不用修改
	    #listen-on port 53 { any; };	//指定 BIND 监听的 IP 地址和端口号。上述配置表示监听所有IP地址上的53端口。可以根据实际情况修改
	    							//一般需要删除,或者改为当前使用的IP地址
	    #allow-query { any; };			//指定谁能使用该 DNS 服务器进行查询解析。上述配置表示允许所有主机进行查询解析。
	};
	
	logging {
	    channel default_file {
	        file "/var/log/named/default.log" versions 3 size 5m;
	        severity dynamic;
	        print-time yes;
	    };
	    //指定日志记录通道的设置。上述配置中,指定了一个名为 default_file 的日志通道,将日志记录到 /var/log/named/default.log 文件中。
	    
	    category default {
	        default_file;
	    };
	    //指定日志记录类别的设置。上述配置中,将 default 类别的日志记录到 default_file 日志通道中。
	    
	};
	
	zone "example.com" IN {
	    type master;		//指定类型为 主DNS服务器
	    					//type字段可以是master、slave、hint、forward之一,分别代表主区域、从区域、根区域和转发。
	    file "/var/named/example.com.zone";		//指定资源解析文件位置在 /var/named/example.com.zone
	    					//这里也可以 file "example.com.zone",因为在options已经指定了工作目录在/var/named
        allow-update { 192.168.1.101; };		//指定谁可以同步本服务器的资源,一般指定从服务器的IP
        also-notify { 192.168.1.101; };		
	};

	zone "ZONE NAME" IN {
		type slave;				//指定类型为 从DNS服务器
		file "区域数据文件";		//指定资源解析文件位置
		masters { 主服务器IP地址;};		//指定主DNS服务器IP
	};
	
	zone "1.168.192.in-addr.arpa" IN {			//配置反向解析
	        type master;						//指定类型为 主DNS服务器
	        file "192.168.1.zone";				//指定资源解析文件位置
	        allow-update { 192.168.1.12; };		//指定谁可以同步本服务器的资源,一般指定从服务器的IP
	        also-notify { 192.168.1.12; };
	};

	include "/etc/named.rfc1912.zones";		//一般我们会禁用掉这两项(注释掉#)
	include "/etc/named.root.key";			//一般我们会禁用掉这两项(注释掉#)

4、DNS资源解析文件详解

$TTL 86400			//客户端获取到的解析记录在服务器中的生存周期,这里指定为86400秒
#下行几列依次为:@ -->表示当前dns域名,IN=lnternet,SOA=标识,ns1.abc.com.=起始授权主机,指主服务器域名,admin.abc.com.=邮箱地址".等同于@"
@       IN      SOA     ns1.abc.com.  admin.abc.com.(
                        20170405		//更新序列号,表示修改的依次顺序,可随意定义,不可超过10位
                        1H				//从服务器下载数据时间间隔为1小时
                        5M				//下载失败后的重试间隔为5分钟
                        2W				//超过该时间仍无法下载则放弃,为两周
                        6D				//无效解析记录的生存周期
)
@       IN      NS      ns1.abc.com.			//声明 DNS 服务器,指定了域名服务器的名称为 ns1.abc.com
        IN      MX 10   mail.abc.com.			//指定将邮件发送到名为 mail.abc.com 的主机。数字 10 表示优先级,数字越小级别越高
ns1     IN      A       192.168.1.200			//指定了名为 ns1 的主机的 IP 地址
mail    IN      A       192.168.1.201			//指定了名为 mail 的主机的 IP 地址。
						//这里的几个IP都是根据实际需求设置,比如我有一台邮件服务器,那么我就将mail.abc.com映射到这台邮件服务器的IP
www     IN      A       192.168.1.202			//指定了名为 www 的主机的 IP 地址
ftp     IN      A       192.168.1.203			//指定了名为 ftp 的主机的 IP 地址
a       IN      CNAME   www						//将名为 a 的主机别名为 www

5、配置案例

案例1.配置DNS缓存服务器(通过根提示实现,需要联网才行)
0.下载bind软件包
	yum install -y bind*
1.修改主配置文件named.conf
	rm -rf /etc/named.conf		//删除原有的配置文件
	vim /etc/named.conf
	options {
		directory	"/var/named";
	};
	zone "." IN {
		type hint;			//类型为根提示服务器
		file "named.ca";	//named.ca里存放了全球13台根服务器
	};
2.检查主配置文件是否存在语法错误
	named-checkconf -z /etc/named.conf
3.启动named服务
	systemctl start named
4.使用windows客户机进行测试(需要在同一网段)
	4.1.配置客户机DNS服务器IP
	4.2.客户机使用 nslookup baidu.com 能够解析其IP,配置成功	


案例2.配置DNS缓存服务器(通过转发器实现,因为这里将解析请求转发给北京市联通DNS服务器,所以也需要联网)
0.下载bind软件包
	yum install -y bind*
1.修改主配置文件named.conf
	rm -rf /etc/named.conf		//删除原有的配置文件
	vim /etc/named.conf
	options {
		directory	"/var/named";
		forwarders { 202.106.196.115; 202.106.0.20; };
	};
2.检查主配置文件是否存在语法错误
	named-checkconf -z /etc/named.conf
3.启动named服务
	systemctl start named
4.使用windows客户机进行测试(需要在同一网段)
	4.1.配置客户机DNS服务器IP
	4.2.客户机使用 nslookup baidu.com 能够解析其IP,配置成功	
案例3.配置主域名服务器,用以解析abc.com
0.下载bind软件包
	yum install -y bind*
1.修改主配置文件named.conf
	rm -rf /etc/named.conf		//删除原有的配置文件
	vim /etc/named.conf
	options {
		directory	"/var/named";
	};
	zone "abc.com" IN {
	       type master;
	       file "abc.com.zone";
	       allow-update { 192.168.1.101; };
	       also-notify { 192.168.1.101; };
	};
2.创建资源解析文件
	vim /var/named/abc.com.zone
	$TTL 86400
	@       IN      SOA     ns1.abc.com.  admin.abc.com.(
	                        20170405
	                        1H
	                        5M
	                        2W
	                        6D
	)
	@       IN      NS      ns1.abc.com.
	        IN      MX 10   mail.abc.com.
	ns1     IN      A       192.168.1.200
	mail    IN      A       192.168.1.201
	www     IN      A       192.168.1.202
	ftp     IN      A       192.168.1.203
	a       IN      CNAME   www
3.检查主配置文件是否存在语法错误
	named-checkconf -z /etc/named.conf
	这里若出现类似 zone abc.com/IN: loaded serial 20170405 是正常的
4.启动named服务
	systemctl start named
5.使用windows客户机进行测试(需要在同一网段)
	5.1.配置客户机DNS服务器IP
	5.2.客户机使用 nslookup baidu.com 能够解析其IP,配置成功
	
6.若还需要解析另一个域名,比如jd.com
	6.1.需要在主配置文件named.conf后面再加上这一段
	zone "jd.com" IN {
	       type master;
	       file "jd.com.zone";
	       allow-update { 192.168.1.101; };
	       also-notify { 192.168.1.101; };
	};
	6.2.将 abc.com 的资源解析文件拷贝一份,命名为 jd.com.zone 
	cp /var/named/abc.com.zone /var/named/jd.com.zone
	6.3.根据需求修改资源解析文件 jd.com.zone 内容即可
案例4.配置反向解析,实现abc.com既可以正向解析,也可以反向解析
0.下载bind软件包
	yum install -y bind*
1.在案例3的基础上,在主配置文件named.conf后面加入以下内容
	vim /etc/named.conf
zone "1.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.1.zone";
        allow-update { 192.168.1.101; };
        also-notify { 192.168.1.101; };
};
2.创建资源解析文件
	vim /var/named/192.168.1.zone
	$TTL 86400
	@       IN      SOA     abc.com.      admin.abc.com.  (
	                        20170405
	                        1H
	                        5M
	                        2D
	                        6h
	)
	
	        IN      NS      ns1.abc.com.
	200     IN      PTR     ns1.abc.com.
	201     IN      PTR     mail.abc.com.
	202     IN      PTR     www.abc.com.
	203     IN      PTR     ftp.abc.com.
3.检查主配置文件是否存在语法错误
	named-checkconf -z /etc/named.conf
	这里若出现类似 zone abc.com/IN: loaded serial 20170405 是正常的
4.启动named服务
	systemctl start named
5.使用windows客户机进行测试(需要在同一网段)
	5.1.配置客户机DNS服务器IP
	5.2.客户机使用 nslookup 192.168.1.202 能够解析其为域名www.abc.com,配置成功
案例5.配置从服务器,实现从服务器能从主服务器同步数据
0.需要另开一台主机作为DNS从服务器,首先下载bind软件包
	yum install -y bind*
1.修改主配置文件named.conf
	rm -rf /etc/named.conf		//删除原有的配置文件
	vim /etc/named.conf
options {
        directory       "/var/named";
};
zone "abc.com" IN {  
        type slave;
        masters { 192.168.1.100; };
        file "slaves/abc.com.zone";
};
zone "1.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.1.100; };
        file "slaves/192.168.1.zone";
};
2.检查主配置文件是否存在语法错误
	named-checkconf -z /etc/named.conf
3.启动named服务
	systemctl start named
4.使用windows客户机进行测试(需要在同一网段)
	4.1.配置客户机DNS服务器IP为从服务器IP(101)
	4.2.客户机使用 nslookup baidu.com 能够解析其IP,配置成功
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值