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 目标位置 //切换到目标位置
cd 或 cd ~ //切换到当前用户的家目录
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
1、用户和组账号概述
1、用户帐号
超级用户 //root
普通用户 //自己新建的用户都属于普通用户
程序用户 //权限最低,一般只能操作程序相关联的文件
2、组帐号
基本组(私有组)
附加组(公共组)
3、UID和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的作用:定义新创建文件及目录的默认权限,通过该命令实现定义权限补码
2、 vim /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
1、 fdisk -l //列出全部磁盘的分区表
fdisk -l [磁盘设备] //列出指定磁盘的分区表
2、 fdisk [磁盘设备] //管理该磁盘设备
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
0 空 24 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.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
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.验证
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,配置成功