linux基础
一、基本命令及文件管理
1.查看网卡配置,激活网卡,关闭防火墙和SElinux
设置运行级别为3(命令行模式)
systemctl set-default multi-user.targer
Linux系统启动流程:
1.加载内核(/boot下的内核文件)
2.启动初始化进程(init)
3.确定运行级别
4.加载开机启动程序(/etc/init.d)
5.用户登录
shell脚本:
shell就是一个用户跟操作系统之间交互的命令解释器,位于操作系统和应用程序之间,负责将应用程序输入的命令信息解释给操作系统,分为图形界面shell和命令行shell
脚本:本质是一个文件,文件里面存放的是特定格式的指令,系统可以使用脚本解释器解析指令并执行
shell脚本:就是Linux命令的组合
& 表示任务在后台执行,如要在后台运行redis-server,则有 redis-server &
&& 表示前一条命令执行成功时,才执行后一条命令 ,如 echo '1‘ && echo '2'
| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo 'yes' | wc -l
|| 表示上一条命令执行失败后,才执行下一条命令,如 cat nofile || echo "fail"
查看Linux内核版本:
cat /proc/version
uname -r
uname -a
查看Linux系统版本:
cat /etc/issue
lsb_release -a
四层负载均衡和七层负载均衡的区别:
四层负载,说的是基于IP+端口的负载均衡;七层负载,说的是基于WEB请求,URL等应用信息的负载均衡。
四层常见软件是haproxy,LVS,七层常见软件是nginx。
Nginx优缺点:
优点:开源软件,简单易部署;功能强大,七层负载基本可以满足所有需求。
缺点:仅支持http,https,Email协议;对后端服务器的检测,仅通过IP+端口来检查,不可以通过URL来检查;不支持会话session保持的一致行,但可以通过IP+HASH来解决。
LVS优缺点:
优点:工作在4层,仅做分发作用,没有流量产生,因此。负载性能最强,对内存和cpu消耗率更低;
缺点:不支持正则表达式,不支持动静分离。
haproxy优缺点
优点:支持session会话保持一致,四层和七层都支持;支持通过URL来检测后端服务器的状态。
缺点:在七层转发支持上,不如nginx强大。
查看网卡配置
ip addr show
激活网卡
nmcli connection up ens33
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
关闭selinux
setenforce 0
vim /etc/systemctl/
SELINUX=disabled
设置文本3
[root@local ~]# systemctl set-default multi-user.target
查看
[root@local ~]# systemctl get-default
补齐
[root@local ~]# yum -y install bash-doc.x86_64
2.终端操作
切换终端:
ctrl+alt+F2-F6 tty2-6
alt+F1
终端配置:
编辑 --->配置首选项 --->字体
编辑--->配置首选项---->颜色
终端快捷键:
shift+ctrl + 放大
ctrl - 缩小
shift+ctrl n 开启新终端
alt F4 关闭终端
shift+ctrl t 开启终端标签
alt 1-- 切换标签
shift+ctrl w 关闭标签
shift+ctrl c 复制
shift+ctrl v 粘贴
3.基本命令
ls list 列表
cp copy 复制
cp 源文件地址 目标地址
cp /root/cc.txt /
cp /root/cc.txt /tmp/kk.txt 拷贝的过程中重命名
cp -r /root/x/ /tmp/ 拷贝目录
mv move 移动或者重命名
mv 源文件地址 目标地址
mv /root/aa.txt /tmp/
mv /root/tt.txt /tmp/ll.txt
mv /root/a/ /tmp/ 剪切目录
mv c3.txt nnnn.txt 当前目录下重命名
cd change directory 切换目录
mkdir make directory 创建目录
mkdir aa
mkdir cc tt
mkdir abc{1..5}
mkdir {x,y,z}{..5}
mkdir -p /root/x/y/z
mkdir -pv /root/a/b/c -p 第归 -v 显示创建过程
touch 创建文件
touch aa.txt
touch cc.txt tt.txt
touch abc{1..5}.txt
touch {a,b,c}{1..3}.txt
删除:
rmdir /root/c/ 只能删除空目录
rm /root/a1.txt
rm -f /root/cc.txt
rm -f *.txt *表示所有文件名
rm -rf /root/tt/ 删除目录
rm -rf /root/abc*
命令组成
命令 [-选项(参数)] [对象(file)]
基本命令:
ls -l 显示文件详细信息
-a 显示所有文件(包括隐藏文件)
.filename ----->隐藏文件
. 当前目录
.. 上层目录
-A 显示所有文件(包括隐藏文件,不包含.和..)
-d 显示目录信息
-h 按最大单位显示:
-t 按时间排序:
-r 逆序输出:
-S 按大小排序:
-R 递归显示:
[root@localhost ~]# ls -l anaconda-ks.cfg
-#rw-------#. #1 #root #root# 1527 #5月 15 2017# anaconda-ks.cfg
第一段: 文件类型
第二段: 基本权限
第三段: 是否在开启selinux的状态创建
第四段: 硬链接数
第五段: 拥有者
第六段: 所属组
第七段: 大小(字节)
第八段: 最后一次修改时间
第九段: 文件名
文件类型:(7种)
- 普通文件 file
d 目录文件 directory
c 字符设备文件 character
b 块设备文件 block
s 套接字文件 socket
p 管道文件 pipe
l 符号链接文件(软链接) symbolic
4.获取帮助
help:
ls --help
info:
info ls
man手册:
man ls
man 1 用户命令 *
man 2 系统调用
man 3 库调用
man 4 特殊文件
man 5 配置文件 *
man 6 游戏
man 7 杂项
mna 8 系统命令 *
man -f passwd 显示passwd 在那些章节有描述
man -k pass 模糊查询
5.目录
pwd 查看当前家目录位置
cd 切换目录
cd /usr/local
cd . 刷新目录
cd .. 回到上层目录
cd ../.. 上层的上层
cd ~ 和 cd 回到家
cd - 上次工作目录
绝对路径: 从/开始的路径
相对路径: 从当前目录开始路径
/目录下每个目录的作用:
bin 用户可执行目录(命令 root 和 普通)
sbin 系统可执行目录(命令 root)
lib 库文件目录(32位)
lib64 库文件目录(64位)
dev 设备文件目录
usr 应用程序目录
var 服务器数据目录(数据 日志)
srv 服务器数据目录
etc 配置文件目录
tmp 临时文件目录
boot 服务器启动目录(内核和启动文件)
media 媒介目录(u盘,cdrom)
mnt 其他挂在点
opt 第三方应用程序目录
proc 伪文件系统(内核参数,进程信息,硬件信息)
sys 伪文件系统(内核参数,进程信息,硬件信息)
run 进程锁目录
root root管理员家目录
home 普通用户家目录
6.文件管理
查看文件内容:
more:
more /root/anaconda-ks.cfg
显示文件的百分比
空格 下一页
b 上一页
回车 下一行
less:
less /root/anaconda-ks.cfg
上键 上一行
下键 下一行
pageup 上一页
pagedown 下一页
head:
head /root/anaconda-ks.cfg
默认文件前10行
head -n 20 /root/anaconda-ks.cfg
head -20 /root/anaconda-ks.cfg
tail:
tail /root/anaconda-ks.cfg
默认文件后10行
tail -n 20 /root/anaconda-ks.cfg
tail -20 /root/anaconda-ks.cfg
tail -f /var/log/messages 动态监控日志文件
cat:
cat /root/anaconda-ks.cfg
cat -n /root/anaconda-ks.cfg
cat -n /root/anaconda-ks.cfg |less
7.练习
1.说出ls指令参数的作用?
-a 显示所有文件(包括隐藏文件)
-l 显示文件详细信息
-d 显示目录信息
-t 按时间排序
-S 按文件大小排序
-h 按最大单位展示
-R 递归显示
-r 逆序输出
2.文件的类型有几种?分别是什么?
7种
- 普通文件
d 目录文件
c 字符设备文件
b 块设备文件
s 套接字文件
p 管道文件
l 符号链接文件(软链接)
3.ls -l /etc/passwd说出每个字段的含义?
-rw-r--r--. 1 root root 2283 Oct 13 2020 /etc/passwd
第一段: 文件类型
第二段: 基本权限
第三段: 是否在开启selinux的状态创建
第四段: 硬链接数
第五段: 拥有者
第六段: 所属组
第七段: 大小(字节)
第八段: 最后一次修改时间
第九段: 文件名
4.说出下列参数的功能?
cd ../.. 返回上层目录的上层目录
cd . 当前目录
cd ~ 返回家目录
cd - 返回上次工作的目录
5.列举查看文件的指令有那些?监控日志应该怎么操作?
如何查看一个文件的前25行内容,如何查看文件的后25行内容
more less head tail cat
动态监控日志 tail -f /var/log/messages
head -25 /etc/passwd
tail -25 /etc/passwd
6.查看/etc/passwd文件的10-25行如何操作?
head -25 /etc/passwd | tail -15
7.说出一下目录的作用?
/etc /root /var /usr /bin /sbin /home /boot
/bin 用户可执行目录(命令 root 和 普通)
/sbin 系统可执行目录(命令 root)
/usr 应用程序目录
/var 服务器数据目录(数据 日志)
/etc 配置文件目录
/boot 服务器启动目录(内核和启动文件)
/root root管理员家目录
/home 普通用户家目录
8.创建文件使用什么指令?如何在/tmp下创建abc1.txt-abc100.txt这100个文件?
touch
touch /tmp/abc{1..100}.txt
9.如何递归创建目录 如:/tmp/aa/cc/tt
mkdir -p /tmp/aa/cc/tt
10.拷贝/tmp/abc1-abc100这100个文件到/root/下
cp /tmp/abc*.txt /root/
11.如何删除/root/abc1-abc100 这100个文件
rm -f /root/abc*.txt
tree显示目录的树形结构
yum install tree
tree /aa
-L 显示几层目录
tree -L 1 /
tree -L 2 /
练习:
1.建立以下目录结构:
/aa
/ \
ba/ bb/
/ \ \
ca/ cb/ cc/
可否一条命令创建?
mkdir -p /aa/b{a/c{a,b},b/cc}
tree /aa
2.将系统中/etc/hosts 拷贝到/aa/ba/ca目录?使用2种方法(当前目录为/)相对路径和绝对路径
cp /etc/hosts /aa/ba/ca
3.将/aa/ba/ca/hosts文件移动到/aa/bb/cc/目录下并且重命名位test.txt,2种方法(当前目录为ca)
mv hosts /aa/bb/cc/test.txt
mv hosts /aa/bb/cc/
mv /aa/bb/cc/hosts /aa/bb/cc/test.txt
二、vim文本编辑器
1.vim编辑器创建/打开文件
[root@localhost ~]# vim /root/aa.txt
可以打开已有的或者新创建一个文件
2.输入模式(编辑模式)
进入vim编辑器默认是命令模式
命令模式进入输入模式方法:
a 当前字符后输入
A 当前行行尾输入
i 当前字符前输入
I 当前行行首输入
o 当前行下一行输入
O 当前行上一行输入
s 删除当前字符后输入
S 删除当前行后输入
HOME键 行首
END键 行尾
3.命令模式(一般模式)
命令模式下的基本操作:
yy复制 p(当前行下一行) P(当前行的上一行) 50yy
dd剪切 p P 100dd
dd删除
p 粘贴
^ 行首 $ 行尾
d^ 删除当前字符到行首(不包含当前字符)
d$ 删除当前字符到行尾(包含当前字符)
y^ 复制当前字符到行首(不包含当前字符)
y$ 复制当前字符到行尾(包含当前字符)
35G 定位到35行
gg 首行
G 最后一行
dgg 从当前行删除到首行(包含当前行)
dG 删除当前行到尾行(不包含当前行)
u 撤销一部操作
ctrl+r 重做
4.末行模式(命令行模式)
进入输入模式:shift+:
输入模式下的基本操作:
:wq 保存退出
:q 退出
:w! 强制保存
:q! 强制退出
:wq! 强制保存退出
:w /tmp/cc.txt 另存
:1,3w /tmp/new.txt 另存1-3行
:e /root/aa.txt 打开一个文件
:e! 重新打开当前文件
:X 加密文件
:set nu 显示行号
:set nonu 去掉行号
:set list 显示空格或者制表符
:set nolist 去掉空格或者制表符
文件中所有的制表符都设置为16个空格长度
:set tabstop=16
只更改设置之后的制表符长度
:set softtabstop=16
自动缩进
:set autoindent
:set noautoindent
搜索忽略大小写
:set ignorecase smartcase
w下一个单词的首字符
dw yw
J 合并行
vim配置文件:
永久开启行号功能
vim /etc/vimrc
set nu
查找
/关键字
n 下一个 N 上一个
?关键字
n 上一个 N 下一个
替换 :s /要替换的字符串/替换后的字符串/
:s/ab/xx/ 替换当前行第一个匹配字符串
:s/ab/xx/g 替换当前行所有匹配字符串
:%s/ab/xx/g 替换所有行中所有匹配字符串
:%s/ab/xx/gc 交互式替换所有行中所有匹配字符串 s 替换 g 全局 % 所有行 c交互式
:3,5s/ab/xx/gc 3到5行
替换练习:
abcdefg 1231hi jklmnab
abc defghij klmn/ab
abc123 1def ghijk122/3lmnab
abc/defg hijk/l234mnab
abcdefghi234jklmnab
abcdefgh ijkl/mnab
练习:
1.替换文件中所有的a为 X
:%s/a/X/g
2.删除文件中所有开头的空格
:%s/^ *//
3.删除文件中所有的空格
:%s/ *//g
4.删除空行
:5d
:3,5d
:g/^$/d
5.删除只含有空格或者制表符的行
:g/^\s*$/d #\s表示空白符
6,在每一行开头家一个#表示注释这些行
:%s/^/#/
7.将文件中所有/换成-
:%s/\//-/g
:%s#/#-#g
8.删除文件中所有的数字
:%s/[0-9]//g
5.vim其他模式
可视化模式:v
选中操作内容 y 复制 d删除
可视化块模式:ctrl+v
注释某几行:
ctrl+v选中-->shift+i---->输入#----->两下ESC
多文件操作:
创建多个文件进行操作
vim aa.txt cc.txt tt.txt
:next 下一个文件
:prev 上一个文件
:last 最后一个
:first 第一个
ctrl+^ 在上一次打开的文件和当前打开的文件之间进行切换
:wqa 保存所有的文件退出
vimdiff aa.txt cc.txt tt.txt
ctrl+w+w
:wqa
横向排序
vim -O aa.txt cc.txt tt.txt
竖向排列
vim -o aa.txt cc.txt tt.txt
格式转换:将Linux里的文件格式转换成与Windows中一样
yum install unix2dos
unix2dos anaconda-ks.cfg
file命令:显示文件的类型
[root@localhost ~]# file test
test: ASCII text
[root@localhost ~]# file a1
a1: empty
[root@localhost ~]# file data
data: data
Linux和Windows传文件使用(通过Xshell)
yum install lrzsz
[root@localhost ~]# yum -y install lrzsz
rz 从windos到linux
sz 从linux到windows
6.练习
1.列举vim的三种常用模式
输入模式,命令模式,末行模式
2.由命令模式进入输入模式时a i o O 分别代表什么意思?
a 当前字符后输入
i 当前字符前输入
o 当前行的下一行输入
O 当前行的上一行输入
3.在命令模式下如何复制100行 如何删除50行 如何粘贴?
100yy
50dd
p当前行的下一行粘贴
P当前行的上一行粘贴
4.在命令模式下如何定位到第75行
75G
5.在命令模式下如何删除当前行到首行,如何删除当前行到尾行?
d^删除当前行到首行
d$删除当前行到尾行
6.末行模式如何保存? 如何强制保存退出?
:w 保存
:wq!强制保存退出
7.末行模式下如何将100-200行另存一个新文件?
:100,200w 文件名
8.末行模式下如何开启行号?如何开启忽略大小写设置?
:set nu
:set ignorecase smartcase
9.vim的配置文件是哪个文件?
/etc/vimrc
10.vim如何查找在一个文件中查找abc字段?
/abc
?abc
11.在vim中如何同屏内查看多个文件?
vimdiff 要查看的文件的文件名
vim -o 横向排列
vim -O 纵向排列
12.通过vimtutor查看vim的手册
[root@localhost ~]# vimtutor
13.按要求完成以下题目
文本:
abcdefg 1231hi jklmnab
abc defghij klmn/ab
abc123 1def ghijk122/3lmnab
abc/defg hijk/l234mnab
abcdefghi234jklmnab
abcdefgh ijkl/mnab
题目:
1.替换文件中所有的a为 X
:%s/a/X/g
2.删除文件中所有开头的空格
:%s/^ *//
3.删除文件中所有的空格
:%s/ *//g
4.删除空行
:g/^$/d
5.删除只含有空格或者制表符的行
:g/^\s*$/d
6,在每一行开头家一个#表示注释这些行
:%s/^/#/
7.将文件中所有/换成-
:%s/\//-/g
:%s#/#-#g
8.删除文件中所有的数字
:%s/[0-9]//g
三、用户管理
1.账号管理
uid (0-60000)
管理员账号 root 0
系统账号 1-999
普通账号 1000-60000
添加账号
[root@localhost ~]# useradd robin
[root@localhost ~]# id robin
uid=1001(robin) gid=1001(robin) groups=1001(robin)
用户信息文件
[root@localhost ~]# vim /etc/passwd
robin:x:1001:1001:robin:/home/robin:/bin/bash
第一段: 用户名
第二段: 密码占位符 去掉则无密码
第三段: uid
第四段: gid
第五段: 描述
第六段: 家目录
第七段: shell
创建用户时的选项
-u uid 指定UID
-g gid 指定GID
-c (comment)描述信息
-d home 指定家目录
-s shell 指定shell种类
修改用户信息:
usermod
usermod -u 2500 jack
usermod -g upup jack
usermod -c 'test user' jack
usermod -s /bin/tcsh jack
修改家目录:
方法1:
usermod -d /tmp/jack jack
mv /home/jack/ /tmp/
方法2:
usermod -m -d /home/jack jack
-m 移动用户主页的内容目录到新位置
锁定帐号
usermod -L robin
usermod -U robin
锁定密码
passwd -l robin
passwd -S robin 报告指定帐户的密码状态(仅限root用户)
passwd -u robin 解锁指定帐户的密码(仅限root用户)
删除用户:
userdel -r king -r 连同家目录一起删除
再创建一个管理员
[root@localhost ~]# useradd -o -u 0 admin
2.组管理
组ID(0-60000)
管理员组 root 0
系统组 1-999
普通组 1000-60000
添加组
[root@localhost ~]# groupadd -g 5000 haha
创建用户hehe,组为haha
[root@localhost ~]# useradd -u 5000 -g 5000 -c 'ceshi' -d /tmp -s /bin/tcsh hehe
组信息文件
[root@localhost ~]# vim /etc/group
upup:x:2006:
第一段: 组名
第二段: 组密码占位符号
第三段: gid
第四段: 用户列表
修改组信息
groupmod
groupmod -g 3500 uplooking
groupmod -n newuplooking uplooking
删除组:
groupdel uplooking
组里面有用户则无法删除
附加组:
附加组用于权限匹配
主组:
主组用于确定用户创建的文件所属组
-G 指定附属组 -a 将用户添加到补充组(追加),仅与-G选项一起使用
usermod -a -G upup robin
组密码:
groupadd yw
groupadd kf
useradd wg
usermod -a -G yw,kf wg
groupadd boss
gpasswd boss
su - wg
sg boss 临时切换组
3.密码管理
添加密码
交互式修改密码
[root@localhost ~]# passwd hehe
Changing password for user hehe.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
非交互式修改密码
[root@localhost ~]# echo 123 | passwd --stdin hehe
密码保存文件
[root@localhost ~]# vim /etc/shadow
hehe1:!!:18549:0:99999:7:::
第一列: 用户名
第二列: 密码(有密码状态,无密码状态,!!帐号锁定,* 该帐号永久不能登陆系统)
第三列: 密码的最后一次修改时间
第四列: 密码的最小时间(密码修改相隔时间)
第五列: 密码的最大时间(密码有效期) 99999表示永久不过期
第六列: 密码过期前警告时间
第七列: 密码过期后帐号过期
第八列: 帐号有效期
第九列: 保留列
练习:
创建两个帐号 tom jerry 密码都设置为123
锁定tom的帐号
锁定jerry的密码
登陆tom和jerry 查看返回信息是否相同? 相同
查看shadow找到tom和jerry密码位有什么不同?
! 锁定帐号
!! 锁定密码
[root@localhost ~]# useradd tom
[root@localhost ~]# useradd jerry
[root@localhost ~]# for i in tom jerry;do echo 123 |passwd --stdin $i;done
Changing password for user tom.
passwd: all authentication tokens updated successfully.
Changing password for user jerry.
passwd: all authentication tokens updated successfully.
[root@localhost ~]# usermod -L tom
[root@localhost ~]# passwd -l jerry
[root@localhost ~]# vim /etc/shadow
配置文件:
/etc/login.defs (uid,gid范围)
/etc/default/useradd 修改添加用户有关的配置文件
HOME=/home
SHELL=/bin/bash
SKEL=/etc/skel (环境变量模板目录)
4.手动管理账号
直接修改配置文件进行创建
groupadd redhat
vim /etc/group
redhat:x:9999:
useradd -g redhat rose
vim /etc/passwd
rose:x:9999:9999:test user:/home/rose:/bin/bash
mkdir /home/rose
将家目录中需要的几个隐藏文件cp过来
cp /etc/skel/.bash* /home/rose/
passwd rose 设置密码,只能通过命令,不能直接修改配置文件
vim /etc/shadow
rose::17303:0:99999:7:::
echo 123 | passwd --stdin rose
5.修改root密码
物理机
重起系统
按e编辑
找到linux那一行(删除ro后的东西)加rd.break consol=tty0
ctrl+x启动系统
mount -o remount,rw /sysroot
chroot /sysroot 切换根目录
echo 密码 | passwd --stdin root 修改密码
touch /.autorelabel
sync
两次exit重起正常进入系统
6.练习
1.普通用户uid范围是多少?gid范围是多少?
1000-60000 0-60000
2.如何添加一个账号tom?
[root@localhost ~]# useradd tom
还可以进行手动创建(修改配置文件)
3.说出一下添加账号时参数的含义?-u -g -c -d -s
-u uid 指定UID
-g gid 指定GID
-c (comment)描述信息
-d home 指定家目录
-s shell 指定shell种类
4.如何添加一个组redhat?指定gid为3000?
[root@localhost ~]# groupadd -g 3000 redhat
5.当passwd文件的第二列为空时登录系统是否需要密码?
不需要
6.写出保存用户信息,组信息,密码信息的文件分别是什么?
用户信息/etc/passwd
组信息/etc/group
密码信息/etc/shadow
7.修改用户信息的指令是什么?修改组信息的指令是什么?
usermod
groupmod
8.删除组upup时失败,可能是什么原因造成的?写出你的想法
组中有其他用户
组不存在
9.锁定账号robin应该怎么操作?锁定密码应该怎么操作?
[root@localhost ~]# usermod -L robin
[root@localhost ~]# passwd -l robin
10.手动添加组upup
手动添加账号ben,属于upup组
使账号ben可以登上系统
[root@localhost ~]# vim /etc/group
upup:x:9999:
[root@localhost ~]# vim /etc/passwd
ben:x:1001:9999:upup:/home/ben:/bin/bash
[root@localhost ~]# mkdir /home/ben
[root@localhost ~]# cp /etc/skel/.bash* /home/ben/
[root@localhost ~]# echo 123 |passwd --stdin ben
11.修改uid默认范围应该修改哪个文件?
[root@localhost ~]# vim /etc/login.defs
12.修改默认家目录,默认shell应该修改哪个文件?
[root@localhost ~]# vim /etc/default/useradd
13.修改用户的附加组应该怎么操作?如: 用户king 主组king 附加组king 添加新的附加组blue
[root@localhost ~]# groupadd blue
[root@localhost ~]# usermod -G blue king
14.简述在root密码丢失时,修改root密码的过程
重起系统
按e编辑
找到linux那一行删除ro后的东西加rd.break
ctrl+x启动系统
mount -o remount,rw /sysroot
chroot /sysroot 切换根目录
echo 密码 | passwd --stdin root 修改密码
touch /.autorelabel
sync
两次exit重起正常进入系统
四、基本权限
1.权限
[root@localhost ~]# ll aa.txt
-rw-r--r--. 1 root root 226 Oct 14 19:37 aa.txt
权限位:
r 读 w 写 x执行
前3位:拥有者的权限
中间3位:所属组的权限
后面3位:其他人的权限
2.权限操作
修改文件或者目录的权限
chmod
u表示拥有者
g表示所属组
o表示其他人(组外成员)
a表示所有成员
+赋予权限
-去除权限
=给权限
[root@localhost ~]# chmod u+x aa.txt
[root@localhost ~]# chmod u-rw aa.txt
[root@localhost ~]# chmod u+r,g+w,o+x aa.txt
[root@localhost ~]# chmod ug+rw aa.txt
[root@localhost ~]# chmod ugo+rwx aa.txt
[root@localhost ~]# chmod a-rwx aa.txt
[root@localhost ~]# chmod u=r aa.txt
[root@localhost ~]# chmod g=rw aa.txt
[root@localhost ~]# chmod g=rw,o=r aa.txt
[root@localhost ~]# chmod g-rw,o=r aa.txt
练习:
1.创建文件/tmp/aa.txt
要求:
拥有者没权限
所属组读写权限
其他人执行权限
chmod u-rw,g+w,o-r,o+x /tmp/aa.txt
chmod u=-,g=rw,o=x /tmp/aa.txt
2.创建目录/tmp/test
要求:
拥有者可以查看文件名
所属组可以创建删除文件
其他人无权限
chmod u-wx,g-r,g+w,o-rx /tmp/test/
chmod u=r,g=wx,o=- /tmp/test
3.有文件/tmp/kkk/aa.txt 权限为rwxrwxrwx 问robin用户能不能删除?为什么?
看kkk有什么权限,一个文件能否被删除取决于上层目录的权限
4./tmp/test/ rwxr-xr-x
/tmp/test/dir rwxr-xr--
/tmp/test/dir/aa/ rwxrwxrwx
/tmp/test/dir/aa/tt.txt rwxrwxrwx
robin能不能删除 /tmp/test/dir/aa/tt.txt
不能
3.权限的数字转换
查看以下目录或者文件权限:
/etc/passwd rw-r--r-- 644
/etc/shadow --------- 000
/tmp rwxrwxrwt 1777
/root r-xr-x--- 550
/home/robin rwx------ 700
/ r-xr-xr-x 555
/etc rwxr-xr-x 755
root用户创建文件默认权限 rw-r--r-- 644
root用户创建目录默认权限 rwxr-xr-x 755
普通用户创建文件默认权限 rw-rw-r-- 664
普通用户创建目录默认权限 rwxrwxr-x 775
数字表示权限:
对应关系
111111111
rwxrwxrwx
用2进制数字表示,有权限则为1,无权限则为0,每3位转一个十进制数
r -------- 4
w -------- 2
x -------- 1
rw 4+2 6
wx 2+1 3
rwx 4+2+1 =7
321 -wx-w---x
456 r--r-xrw-
4.umask
umask是权限反掩码
设置umask
umask 0022
文件权限 666-022=644 做减不太准
目录权限 777-022=755
umask 0023
666-023=643
ll kk.txt
-rw-r--r--. 1 root root 0 5月 17 15:30 kk.txt
023
000 010 011
111 101 100 --取反
666
110 110 110 做与运算
111 101 100
110 100 100
6 4 4
练习:
创建文件 642 umask=? 做同或运算
666
110 110 110
642
110 100 010
110 110 110
111 101 011 ----> 000 010 100 ---> 024
110 100 010
umask=0024
5.时间
查看时间,修改时间,同步时间
[root@localhost ~]# date +%Y
2020
[root@localhost ~]# date +%Y-%M
2020-35
[root@localhost ~]# date +%Y-%m
2020-10
[root@localhost ~]# date +%Y-%m-%d
2020-10-19
[root@localhost ~]# date +'%Y-%m-%d %h'
2020-10-19 Oct
[root@localhost ~]# date +'%Y-%m-%d %H'
2020-10-19 10
[root@localhost ~]# date +'%Y-%m-%d %H:%M'
2020-10-19 10:36
[root@localhost ~]# date +'%Y-%m-%d %H:%M:%S'
2020-10-19 10:36:40
[root@localhost ~]# date +'%Y-%m-%d %H:%M:%s'
2020-10-19 10:36:1603075006
[root@localhost tmp]# date
2017年 05月 17日 星期三 23:55:07 CST
[root@localhost tmp]# date -s '20170517 16:02:40'
2017年 05月 17日 星期三 16:02:40 CST
[root@localhost ~]# hwclock
Mon 19 Oct 2020 10:33:27 AM CST -0.399588 seconds
[root@localhost ~]# date
Mon Oct 19 10:33:36 CST 2020
[root@localhost ~]# hwclock -s 从硬件时间写到系统
[root@localhost ~]# hwclock
Mon 19 Oct 2020 10:34:24 AM CST -0.540249 seconds
[root@localhost ~]# hwclock -w 从系统写到硬件时间
[root@localhost ~]# hwclock
Mon 19 Oct 2020 10:34:38 AM CST -0.226812 seconds
查看时间信息
[root@localhost ~]# timedatectl
修改时区
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
6.修改拥有者和所属组
使用chown命令
格式:chown 新拥有者:新组 文件或者目录
查看/tmp/test.txt的信息,修改拥有者,所属组
/tmp/test.txt rw-r--r-- robin root
robin robin ---> other
chown robin /tmp/test.txt
chgrp upup /tmp/test.txt
chown .upup /tmp/test.txt
chown :upup /tmp/test.txt
chown robin.upup /tmp/test.txt
chown robin.upup /tmp/dir/
chown -R robin.upup /tmp/dir
chmod -R 777 /tmp/dir -R递归修改
7.练习
1.基本权限的操作对象有几个?分别是什么?
三个
拥有者,所属组,其他人
2.给文件拥有者添加rwx权限时,应该如何操作?
chmod u+rwx 文件名
chmod u=rwx 文件名
3.目录的拥有者读写权限, 所属组读权限,其他人无权限应该怎么操作?
chmod u=rw,g=r,o=- 目录名
4.创建文件/tmp/aa.txt
要求:
拥有者没权限
所属组读写权限
其他人执行权限
[root@localhost ~]# touch /tmp/aa.txt
[root@localhost ~]# chmod u=-,g=rw,o=x /tmp/aa.txt
[root@localhost ~]# ll /tmp/aa.txt
----rw---x. 1 root root 0 Oct 19 14:11 /tmp/aa.txt
5.创建目录/tmp/test
要求:
拥有者可以查看文件名
所属组可以创建删除文件
其他人无权限
[root@localhost ~]# chmod u=r,g=wx,o=- /tmp/test/
6.有文件/tmp/kkk/aa.txt 权限为rwxrwxrwx 问robin用户能不能删除?为什么?
不能,一个文件能否被删除取决于上层目录的权限
[root@localhost ~]# mkdir /tmp/kkk/
[root@localhost ~]# touch /tmp/kkk/aa.txt
[root@localhost ~]# chmod 777 /tmp/kkk/aa.txt
[robin@localhost ~]$ rm -f /tmp/kkk/aa.txt
rm: cannot remove ‘/tmp/kkk/aa.txt’: Permission denied
7./tmp/test/ rwxr-xr-x
/tmp/test/dir rwxr-xr--
/tmp/test/dir/aa/ rwxrwxrwx
/tmp/test/dir/aa/tt.txt rwxrwxrwx
robin能不能删除 /tmp/test/dir/aa/tt.txt? 为什么?
不能,robin对dir目录没有执行权限
8.写出如下数字对应的权限
123 --x-w--wx
456 r--r-xrw-
735 rwx-wxr-x
9.写出如下权限对应的数字
r---wx--x 531
rwxr---w- 742
r-xrw-r-- 564
10.按要求完成权限配置
有文件test.txt 要求:
boss不可读写,所有员工都可以读写
[root@localhost ~]# chmod 066 test.txt
11.在/root目录下创建文件abc.txt(root目录拥有者不可以改动)
同时完成以下要求:
robin用户可以读写abc.txt 但是不可以删除
zorro用户只可以读abc.txt,但是不可以删除
king用户不可以读写abc.txt,但是可以删除
/root root root r-xrwxr-x
/root/abc.txt robin zorro rw-r-----
robin
zorro
king
chown robin /root/abc.txt
chown .zorro /root/abc.txt
chmod o= /root/abc.txt
chmod o=rx /root
chmod g=rwx /root
usermod -a -G root king
12.附加题
要求robin用户创建的默认文件权限都是624,求umask值是多少?
042
五、高级权限
1.SUID( set user id )
作用:任何用户在运行拥有suid权限的命令(二进制可执行文件)时,都以该命令拥有者的身份执行
作用位置:user
作用对象:文件(二进制可执行文件)
添加SUID权限:
chmod u+s 文件名
实验:
添加用户robin
su - robin
cat /etc/shadow 能不能看到内容? 不能
使用suid权限,怎么看到? 添加SUID权限
chmod u+s /bin/cat
查看二进制文件所在的位置
[root@localhost ~]# which useradd
/usr/sbin/useradd
2.SGID(set group id)
作用:任何用户在拥有sgid权限的目录下,创建的文件都要继承目录的组
作用位置:group
作用对象:目录
添加SGID权限:
chmod g+s 目录名
实验:
1.添加帐号robin robin组
创建目录/tmp/test 权限设置为777 目录拥有者root 所属组root
robin帐号在/tmp/test下创建 aa.txt 问:所属组是谁?
robin
[root@localhost ~]# useradd robin
[root@localhost ~]# mkdir /tmp/test/
[root@localhost ~]# chmod 777 /tmp/test/
[root@localhost ~]# su - robin
[robin@localhost ~]$ touch /tmp/test/aa.txt
[robin@localhost ~]$ ll /tmp/test/
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:50 aa.txt
2.给/tmp/test目录添加sgid权限
robin帐号在/tmp/test下创建 cc.txt 问:所属组是谁?
root
[root@localhost ~]# chmod g+s /tmp/test/
[root@localhost ~]# su - robin
Last login: Mon Oct 19 11:50:45 CST 2020 on pts/2
[robin@localhost ~]$ touch /tmp/test/cc.txt
[robin@localhost ~]$ ll /tmp/test/
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:50 aa.txt
-rw-rw-r--. 1 robin root 0 Oct 19 11:53 cc.txt
3.添加组upup
修改/tmp/test目录的所属组为upup
chown .upup /tmp/test
robin帐号在/tmp/test下创建 tt.txt 问:所属组是谁? cc.txt所属组会不会变化?
upup 没变
root帐号在/tmp/test下创建 abc.txt 所属组是谁? root受不受sgid限制?
upup 受限
[root@localhost ~]# groupadd upup
[root@localhost ~]# chown :upup /tmp/test/
[root@localhost ~]# su - robin
Last login: Mon Oct 19 11:52:51 CST 2020 on pts/2
[robin@localhost ~]$ touch /tmp/test/tt.txt
[robin@localhost ~]$ ll /tmp/test/
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:50 aa.txt
-rw-rw-r--. 1 robin root 0 Oct 19 11:53 cc.txt
-rw-rw-r--. 1 robin upup 0 Oct 19 11:54 tt.txt
[root@localhost ~]# touch /tmp/test/abc.txt
[root@localhost ~]# ll /tmp/test/
total 0
-rw-rw-r--. 1 robin robin 0 Oct 19 11:50 aa.txt
-rw-r--r--. 1 root upup 0 Oct 19 11:55 abc.txt
-rw-rw-r--. 1 robin root 0 Oct 19 11:53 cc.txt
-rw-rw-r--. 1 robin upup 0 Oct 19 11:54 tt.txt
3.STICKY
作用:任何用户在拥有t权限目录下创建的文件,只能自己删除,其他人无权删除
作用位置:other
作用对象:目录
添加sticky权限:
chmod o+t 目录名
实验:
1.添加帐号robin 和 zorro
创建目录/tmp/test 权限设置为 777
robin在/tmp/test/目录下创建文件 aa.txt zorro帐号能不能删除aa.txt?
可以
[root@localhost ~]# mkdir /tmp/test
[root@localhost ~]# chmod 777 /tmp/test/
[robin@localhost ~]$ touch /tmp/test/aa.txt
[zorro@localhost ~]$ rm -f /tmp/test/aa.txt
2.在/tmp/test目录上添加t权限
robin在/tmp/test/目录下创建文件 aa.txt zorro帐号能不能删除aa.txt?
不能 t权限
[root@localhost ~]# chmod o+t /tmp/test/
[robin@localhost ~]$ touch /tmp/test/aa.txt
[zorro@localhost ~]$ rm -f /tmp/test/aa.txt
rm: cannot remove ‘/tmp/test/aa.txt’: Operation not permitted
3.root帐号能不能删除/tmp/test/目录下的文件?
可以 root不受约束
[root@localhost ~]# rm -f /tmp/test/aa.txt
4.添加帐号king 设置/tmp/test目录的拥有者为king
chown king /tmp/test
king帐号能不能删除/tmp/test/目录下的文件?
可以
[root@localhost ~]# useradd king
[root@localhost ~]# chown king /tmp/test/
[robin@localhost ~]$ touch /tmp/test/aa.txt
[king@localhost ~]$ rm -f /tmp/test/aa.txt
4.高级权限数字表示
高级权限的数字表示是第一个十进制数
例如 /tmp 1777
111111111111
前3位是高级权限,后面9为是ugo的权限
高级权限大小写区分是否具有x权限:如果没有x权限,则高级权限在x权限位显示为大写
5.练习
1.列举高级权限都有哪些?并解释每个权限的功能
SUID:任何用户在运行拥有suid权限的命令(二进制可执行文件)时,都以该命令拥有者的身份执行
SGID:任何用户在拥有sgid权限的目录下,创建的文件都要继承目录的组
STICKY:任何用户在拥有t权限目录下创建的文件,只能自己删除,其他人无权删除
2.哪个高级权限可以限制root账号?
SGID
3.分别写出每个高级权限的数字表示方法
SUID 4
SGID 2
STICKY 1
4.写出以下数字表示的权限
1777 rwxrwxrwt
2777 rwxrwsrwx
4777 rwsrwxrwx
3777 rwxrwsrwt
5.当高级权限位显示为大写时表示什么含义?
高级权限大小写区分是否具有x权限:如果没有x权限,则高级权限在x权限位显示为大写
六、软件包管理
1.rpm包安装
挂载镜像文件
[root@localhost Packages]# mount -t iso9660 /dev/sr0 /mnt/
mount -t iso9660 /var/ftp/CentOS7-2.iso /mnt
mount /var/ftp/CentOS7-2.iso /mnt
卸载
umount /mnt
mount /var/ftp/CentOS7-2.iso /mnt
umount /var/ftp/CentOS7-2.iso
umount -l /mnt 强制卸载
mount 查看挂在信息
nmap-6.40-7.el7.x86_64.rpm
包名-版本.平台.系统版本.rpm
安装软件:
rpm -ivh /mnt/Packages/nmap-6.40-7.el7.x86_64.rpm
-i 安装
-v 显示过程
-h 显示%
查询是否安装
rpm -q nmap
查询包的信息
rpm -qi nmap
查询安装位置
rpm -ql nmap
查看配置文件
rpm -qc nmap
查看帮助文档的位置
rpm -qd nmap
查询文件对应的软件包
which tcpdump
rpm -qf /usr/sbin/tcpdump
或者
rpm -qf `which tcpdump`
查询和vim相关软件
rpm -qa | grep vim
卸载
rpm -e nmap
查看未安装的软件
rpm -qpi httpd-2.4.6-40.el7.centos.x86_64.rpm
rpm -qpl httpd-2.4.6-40.el7.centos.x86_64.rpm
手动解决依赖关系
[root@localhost Packages]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
/etc/mime.types is needed by httpd-2.4.6-90.el7.centos.x86_64
httpd-tools = 2.4.6-90.el7.centos is needed by httpd-2.4.6-90.el7.centos.x86_64
libapr-1.so.0()(64bit) is needed by httpd-2.4.6-90.el7.centos.x86_64
libaprutil-1.so.0()(64bit) is needed by httpd-2.4.6-90.el7.centos.x86_64
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-tools-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
libapr-1.so.0()(64bit) is needed by httpd-tools-2.4.6-90.el7.centos.x86_64
libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.4.6-90.el7.centos.x86_64
[root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
warning: apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
error: Failed dependencies:
libapr-1.so.0()(64bit) is needed by apr-util-1.5.2-6.el7.x86_64
[root@localhost Packages]# rpm -ivh apr-1.4.8-5.el7.x86_64.rpm
warning: apr-1.4.8-5.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:apr-1.4.8-5.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh apr-util-1.5.2-6.el7.x86_64.rpm
warning: apr-util-1.5.2-6.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:apr-util-1.5.2-6.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh mailcap-2.1.41-2.el7.noarch.rpm
warning: mailcap-2.1.41-2.el7.noarch.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:mailcap-2.1.41-2.el7 ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-tools-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-tools-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:httpd-tools-2.4.6-90.el7.centos ################################# [100%]
[root@localhost Packages]# rpm -ivh httpd-2.4.6-90.el7.centos.x86_64.rpm
warning: httpd-2.4.6-90.el7.centos.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:httpd-2.4.6-90.el7.centos ################################# [100%]
强制安装:现有的文件不动,补充缺失的文件
rpm -ivh httpd-2.4.6-40.el7.centos.x86_64.rpm --force
不检查依赖关系卸载
rpm -e httpd-tools --nodeps
yum库,主要解决rpm的依赖关系
查看提供文件的包
[root@localhost test]# yum provides /etc/mime.types
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
mailcap-2.1.41-2.el7.noarch : Helper application and MIME type associations
: for file types
源 :CentOS7-2
匹配来源:
文件名 :/etc/mime.types
yum库的使用
从光盘导入key
rpm -import /mnt/RPM-GPG-KEY-Centos7
1.进入到yum库的配置文件目录: /etc/yum.repos.d/
[root@localhost yum.repos.d]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# mkdir old
[root@localhost yum.repos.d]# mv *.repo old/ 将原来的repo放入old
[root@localhost yum.repos.d]# vim local.repo 重新创建一个
2.配置
[root@localhost ~]# mount /dev/cdrom /mnt/
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/local.repo
[local] yum库的名字
name=local 描述信息
baseurl=file:///mnt 路径(本地file 网络http)
enabled=1 1开启,0不开启
gpgcheck=0 1校验,0不校验 校验key
3.测试
清空yum缓存
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: local
Cleaning up list of fastest mirrors
Other repos take up 630 M of disk space (use --verbose for details)
(快速)建立缓存
[root@localhost yum.repos.d]# yum makecache fast
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
local | 3.6 kB 00:00
(1/2): local/group_gz | 165 kB 00:00
(2/2): local/primary_db | 3.2 MB 00:00
Metadata Cache Created
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
local local 4,067
repolist: 4,067
安装
yum install httpd-devel
yum -y install httpd-devel
覆盖安装的包
yum reinstall httpd-devel
搜素相关的软件包
yum search vim
查找文件相关的软件包
yum provides /etc/mime.types
卸载软件包
yum remove httpd
查看yum历史
yum history
检查库
yum check
3
分组列出/集组安装
yum grouplist
yum groupinstall "开发工具"
yum可支持多库安装(库文件必须正确,有一个错误则全错)
yum 本地源,自建库,网络源(互联网,局域网)
同一个配置文件中配置多库
[root@localhost yum.repos.d]# cat iso.repo
[CentOS7.2]
name=centos7.2
baseurl=file:///yum
enabled=1
gpgcheck=0
[test]
name=test
baseurl=ftp://172.16.8.100/rhel7u2
enabled=1
gpgcheck=0
多个配置文件配置多库
[root@localhost yum.repos.d]# ls
iso.repo test test.repo
[root@localhost yum.repos.d]# cat iso.repo
[CentOS7.2]
name=centos7.2
baseurl=file:///yum
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# cat test.repo
[test]
name=test
baseurl=ftp://172.16.8.100/rhel7u2
enabled=1
gpgcheck=0
手动建立yum库
[root@localhost yum.repos.d]# mkdir /zijian
[root@localhost yum.repos.d]# cp /mnt/Packages/* /zijian/
[root@localhost yum.repos.d]# rpm -qf `which createrepo`
[root@localhost yum.repos.d]# yum -y install createrepo
[root@localhost yum.repos.d]# createrepo /zijian/
[root@localhost yum.repos.d]# vim zijian.repo
[zijian]
name=zijian
baseurl=file:///zijian
enabled=1
gpgcheck=0
[root@localhost yum.repos.d]# yum clean all
Loaded plugins: fastestmirror, langpacks
Cleaning repos: local zijian
Cleaning up list of fastest mirrors
Other repos take up 630 M of disk space (use --verbose for details)
[root@localhost yum.repos.d]# yum makecache fast
Loaded plugins: fastestmirror, langpacks
Determining fastest mirrors
local | 3.6 kB 00:00
zijian | 2.9 kB 00:00
(1/3): local/group_gz | 165 kB 00:00
(2/3): zijian/primary_db | 509 kB 00:00
(3/3): local/primary_db | 3.2 MB 00:00
Metadata Cache Created
[root@localhost yum.repos.d]# yum repolist
Loaded plugins: fastestmirror, langpacks
Loading mirror speeds from cached hostfile
repo id repo name status
local local 4,067
zijian zijian 691
repolist: 4,758
默认的是网络源
如果要换源,百度阿里/华为源,进行替换即可
练习:
1.写出挂载光盘或者镜像时的完整命令
mount -t iso9660 /dev/sr0 /mnt/
2.解释以下安装软件时参数的功能
-ivh i安装 v显示安装过程 h显示安装进度
-q 查看是否安装
-qi 查看包的信息
-ql 查看安装的位置
-qf 查看文件对应的软件包
-qa 查看相应的软件包
-qc 查看配置文件
-qd 查看帮助文档位置
-e 卸载
3.写出配置光盘或者镜像作为安装源的yum库配置过程
挂载镜像
[root@localhost ~]# mount /dev/cdrom /mnt/
配置yum库
[root@localhost yum.repos.d]# vim /etc/yum.repos.d/local.repo
[local] yum库的名字
name=local 描述信息
baseurl=file:///mnt 路径(本地file 网络http)
enabled=1 1开启,0不开启
gpgcheck=0 1校验,0不校验 校验key
清空yum缓存
[root@localhost yum.repos.d]# yum clean all
建立缓存
[root@localhost yum.repos.d]# yum makecache fast
4.解释以下yum的参数分别代表什么含义
install 安装软件包
reinstall 覆盖安装的软件包
provides 查找文件对应的软件包
remove 卸载软件包
grouplist 按分组列出软件包
groupinstall 按分组安装软件包
5.手动建库时需要哪个命令支持?
createrepo
2.压缩打包
视屏,音频,图片,已经压缩过的文件不能压缩
压缩(只针对文件)
dd制作大文件
[root@localhost tmp]# dd if=/dev/zero of=/tmp/data bs=1M count=200
du命令
du /tmp/data
du -sh /etc/ -h最大单位显示 -sh查看总大小
gzip
gzip data
gunzip data.gz
bzip2
bzip2 data
bunzip2 data.bz2
打包
1.可以将琐碎文件,打包成一个文件.方便管理
2.可以提升传输速度
tar
打包
tar -cvf boot.tar /boot/
c打包 v显示过程 f文件
查看包的内容
tar -tvf boot.tar
追加打包
tar -rvf boot.tar /tmp/data
解包
tar -xvf boot.tar
指定包的存储路径
tar -cvf /home/boot.tar /boot/
解包指定路径
tar -xvf boot.tar -C /home/
压缩打包gzip:
tar -zcvf /tmp/boot.tar.gz /boot/
查看
tar -ztvf /tmp/boot.tar.gz
解压缩包
tar -zxvf /tmp/boot.tar.gz -C /home/
压缩打包bzip2:
tar -jcvf /tmp/boot.tar.bzip2 /boot/
查看
tar -jtvf /tmp/boot.tar.bzip2
解压缩包
tar -jxvf /tmp/boot.tar.bzip2 -C /home/
test.tgz test.tbz
练习:
1.压缩命令有哪些?分别对应的扩展名是什么?
gzip gz
bzip2 bz2
2.使用tar命令打包时的这些参数分别什么含义
-c创建 -v显示过程 -f文件 -t查看 -r追加打包 -x解包
3.指定解包目录用什么参数?
-C
4.写出将/boot 打包使用gzip 压缩,并将压缩包放在/tmp下的完整命令(包的名字为test.tar.gz)
tar -zcvf /tmp/test.tar.gz /boot
5.将/tmp/test.tar.gz解压缩到/opt下
tar -zxvf /tmp/test.tar.gz -C /opt
3.源码包安装
解压源码包
解压后的源码包放在/usr/local/src/
tar -xvf lftp-4.7.7.tar.gz -C /usr/local/src/
安装前配置和检测: 指定目录
[root@localhost lftp-4.7.7]# ./configure --prefix=/usr/local/lftp
编译:
[root@localhost lftp-4.7.7]# make
编译安装:
[root@localhost lftp-4.7.7]# make install
清除编译痕迹
[root@localhost lftp-4.7.7]# make clean
报错:
configure: error: no acceptable C compiler found in $PATH
解决:
yum install gcc gcc-c++
报错:
configure: error: No terminfo, termcap or curses library found. Install ncurses-devel
解决
yum install termcap ncurses-devel
报错:
configure: error: cannot find readline library, install readline-devel package
解决
yum install readline-devel
报错:
configure: error: Package requirements (gnutls >= 1.0.0) were not met:
解决:
yum install gnutls-devel
测试:
rpm -e lftp
[root@localhost ~]# /usr/local/lftp/bin/lftp 172.16.110.1
lftp 172.16.110.1:/> get biji.txt 下载文件
lftp 172.16.110.1:/> mirror video 下载目录
[root@localhost /]# /usr/local/lftp/bin/lftp 172.16.110.1
lftp 172.16.110.1:~> lcd /root/
lcd 成功, 本地目录=/root
lftp 172.16.110.1:~> lcd /tmp
lcd 成功, 本地目录=/tmp
lftp 172.16.110.1:~>
lftp 172.16.110.1:/> mirror video/ -O /tmp/ 指定路径下载
修改环境配置文件:
[root@localhost /]# vim /etc/bashrc
PATH=$PATH:/usr/local/lftp/bin
export PATH
卸载
rm -rf /usr/local/lftp
练习:
1.简述源码包编译过程,并解释每个步骤的功能?
解压源码包
解压后的源码包放在/usr/local/src/
tar -xvf lftp-4.7.7.tar.gz -C /usr/local/src/
安装前配置和检测:
[root@localhost lftp-4.7.7]# ./configure --prefix=/usr/local/lftp
根据检测结果安装相应的软件包
编译:
[root@localhost lftp-4.7.7]# make
编译安装:
[root@localhost lftp-4.7.7]# make install
清除编译痕迹
[root@localhost lftp-4.7.7]# make clean
2.解释源码包和rpm包的区别是什么?
RPM包是二进制包,源码包是C语言文件
RPM包的安装位置是多个位置,是由RPM包的作者指定
RPM包安装后访问效率较低,源码包访问效率高
3.删除lftp软件,重新编译lftp软件并安装到/tmp下
4.其他类型软件包
二进制bin包:
[root@localhost software]# ./RealPlayer\®\;\ 11\ for\ Linux\ RealPlayer11GOLD.bin
[root@localhost software]# yum install glibc-2.17-157.el7_3.1.i686
[root@localhost software]# yum remove libstdc++-4.8.5-4.el7.x86_64
[root@localhost software]# yum install libstdc++-4.8.5-11.el7.i686
[root@localhost software]# realplay
解决运行前需要的软件包:
[root@localhost software]# yum install libgdk-x11-2.0.so.0
[root@localhost software]# yum install gtk2-2.24.28-8.el7.i686
[root@localhost ~]# rpm -ivh pangox-compat-0.0.2-2.el7.i686.rpm
[root@localhost software]# yum install libcanberra-gtk2-0.30-5.el7.i686
半源码半rpm
[root@localhost ~]# rm -rf /usr/local/lftp/
lftp-3.5.1-2.fc6.src.rpm
安装:
[root@localhost software]# rpm -ivh lftp-3.5.1-2.fc6.src.rpm
生成:
[root@localhost ~]# ls -d /root/rpmbuild/
SOURCES 源代码和补丁
SPECS/lftp.spec 制作rpm包的配置文件
编译成rpm包
[root@localhost rpmbuild]# rpmbuild -bb /root/rpmbuild/SPECS/lftp.spec
[root@localhost rpmbuild]# ls /root/rpmbuild/RPMS/x86_64/lftp-*
/root/rpmbuild/RPMS/x86_64/lftp-3.5.1-2.el7.centos.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/lftp-debuginfo-3.5.1-2.el7.centos.x86_64.rpm
[root@localhost rpmbuild]# rpm -ivh /root/rpmbuild/RPMS/x86_64/lftp-3.5.1-2.el7.centos.x86_64.rpm
[root@localhost rpmbuild]# yum install perl-String-CRC32
[root@localhost ftp]# rpm -ivh /var/ftp/perl-String-CRC32-1.4-19.el7.x86_64.rpm
[root@localhost rpmbuild]# yum install perl-Digest-MD5
打补丁
patch 源文件 补丁包
七、进程管理
1.守护进程
[root@localhost ~]# ps
PID TTY TIME CMD
2857 pts/0 00:00:00 bash
3753 pts/0 00:00:00 ps
PID 进程编号
TTY 占用的终端
TIME 占用CPU的时间
CMD 执行命令
ps
-e 系统中所有的进程
-f 详细信息
[root@localhost ~]# ps -ef | head
UID PID PPID C STIME TTY TIME CMD
UID 进程拥有者
PID 进程编号
PPID 父进程
C 占用cpu的百分比
STIME 进程启动时间
TTY 在那个终端上运行的
TIME 占用CPU的时间
CMD 执行命令
BSD
ps
a 所有在终端运行进程
u 详细信息
x 所有进程
[root@localhost ~]# ps aux | head
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER 进程拥有者
PID 进程编号
%CPU 占用CPU的百分比
%MEM 占用物理内存的百分比
VSZ 预设内存(虚拟内存)
RSS 真实内存
TTY 运行终端
STAT 进程状态
START 进程启动时间
TIME 占用CPU时间
COMMAND 进程名称
top 动态查看进程信息
top - 14:20:12 up 42 min, 4 users, load average: 0.30, 0.27, 0.25
当前系统时间 运行了多久 登录用户 CPU平均负载
Tasks: 419 total, 2 running, 417 sleeping, 0 stopped, 0 zombie
进程总数 运行进程 417个休眠 停止 僵尸
%Cpu(s): 9.8 us, 3.0 sy, 0.0 ni, 83.5 id, 3.5 wa, 0.0 hi, 0.1 si, 0.0 st
用户态 内核泰 调整nice 空闲 等待io 硬中断 软中断 虚拟化偷取
KiB Mem : 4031780 total, 2625064 free, 580228 used, 826488 buff/cache
KiB Swap: 1023996 total, 1023996 free, 0 used. 3210724 avail Mem
杀进程:
kill -15 4302 正常结束
kill -9 4349 强制结束
pkill httpd
killall httpd
xkill
前后台切换
[root@localhost ~]# yum install xclock
前台
[root@localhost ~]# xclock -update 1
后台
[root@localhost ~]# xclock -update 1 &
脱离终端运行
[root@localhost ~]# nohup xclock -update 1 &
[root@localhost ~]# xclock -update 1
ctrl+z 停止前台运行,在后台挂起
[root@localhost ~]# jobs 查看后台挂起进程
[1]+ 已停止 xclock -update 1
[root@localhost ~]# bg 1 后台运行挂起进程
[root@localhost ~]# fg 1 前台运行挂起进程
杀后台进程:kill %
2.进程状态
PROCESS STATE CODES
D uninterruptible sleep (usually IO)
不可中断休眠状态(通常IO)
R running or runnable (on run queue)
运行状态
S interruptible sleep (waiting for an event to complete)
可中断的休眠状态
T stopped by job control signal
切换后台
t stopped by debugger during the tracing
W paging (not valid since the 2.6.xx kernel)
X dead (should never be seen)
Z defunct ("zombie") process, terminated but not reaped by its parent
< high-priority (not nice to other users)
高优先级
N low-priority (nice to other users)
低优先级
L has pages locked into memory (for real-time and custom IO)
被锁
s is a session leader
会话领导者
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
多线程
+ is in the foreground process group
位于前台进程组
nice调整
nice范围 -20~19 越低优先级越高
[root@localhost ~]# nice -n -20 xclock -update 1
[root@localhost ~]# renice 15 -p 5858
proc目录 进程
cat /proc/cpuinfo cpu文件
lm ---> 64位系统
vmx|svm ----> 虚拟化
3.练习
1.什么是守护进程?
2.ps -ef 解释每个字段的含义
-e 系统中所有进程
-f 详细信息
3.ps aux解释每个字段的含义
a 所有在终端运行的进程
u 详细信息
x 所有进程
4.top每个字段的含义
top - 14:20:12 up 42 min, 4 users, load average: 0.30, 0.27, 0.25
当前系统时间 运行了多久 登录用户 CPU平均负载
Tasks: 419 total, 2 running, 417 sleeping, 0 stopped, 0 zombie
进程总数 运行进程 417个休眠 停止 僵尸
%Cpu(s): 9.8 us, 3.0 sy, 0.0 ni, 83.5 id, 3.5 wa, 0.0 hi, 0.1 si, 0.0 st
用户态 内核泰 调整nice 空闲 等待io 硬中断 软中断 虚拟化偷取
KiB Mem : 4031780 total, 2625064 free, 580228 used, 826488 buff/cache
KiB Swap: 1023996 total, 1023996 free, 0 used. 3210724 avail Mem
5.解释前后台切换时这些指令的功能
ctrl+z 停止前台进程,在后台挂起
jobs 查看挂起进程
bg 后台运行挂起进程
fg 前台运行挂起进程
kill %1 杀死挂起进程
6.解释以下字符代表什么状态?
D 不可中断休眠状态
R 运行状态
S 可中断休眠状态
T 切换后台
t
W
X
Z
< 高优先级
N 低优先级
L 被锁
s 会话领导者
l 多线程
+ 位于前台进程组
7.nice值得范围是多少?启动进程时如何定义nice值?如何重置nice值?
-20~19
nice -n -nice值 进程
renice nice值 -p 进程号
八、高级命令
1.wc计数
wc
-l 统计行数
-c 统计字符
-w 统计单词数(连续的字符串)
[root@localhost ~]# wc -l test.txt
1 test.txt
[root@localhost ~]# wc -c test.txt
21 test.txt
[root@localhost ~]# wc -w test.txt
1 test.txt
[root@localhost ~]# cat -n /etc/passwd | head -20 |tail -2 |rev
rev 左右颠倒
[root@localhost ~]# cat -n /etc/passwd | head -20 |tail -2 | tac
tac 上下颠倒
2.cut截取
-d 分割符
-f 取字段
-c 取字符
[root@localhost ~]# head -1 /etc/passwd |cut -d: -f 1-3
root:x:0
[root@localhost ~]# head -1 /etc/passwd |cut -d: -f 1,3
root:0
[root@localhost ~]# head -1 /etc/passwd |cut -d: -f 1
root
[root@localhost ~]# head -1 /etc/passwd |cut -c 10 第10个
0
[root@localhost ~]# head -1 /etc/passwd |cut -c 1-10 第1个到第10个
root:x:0:0
[root@localhost ~]# head -1 /etc/passwd |cut -c 1,10 第1个和第10个
r0
3.grep过滤
[root@localhost ~]# grep 'root' /etc/passwd 含有root的行
[root@localhost ~]# cat -n /etc/passwd | grep 'root'
[root@localhost ~]# grep -n 'root' /etc/passwd 显示行号
[root@localhost ~]# grep -v 'root' /etc/passwd 取反
[root@localhost ~]# grep ^'root' /etc/passwd
[root@localhost ~]# grep 'halt'$ /etc/passwd
-A 3 找到匹配行向后显示3行
-B 3 找到匹配行向前显示3行
-C 3 找到匹配行前后各显示3行
-i 忽略大小写
-x 完全匹配
4.stat查看文件变动
[root@localhost ~]# stat aa.txt
文件:"aa.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:802h/2050d Inode:77530278 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-05-22 11:43:11.545941923 +0800
最近更改:2017-05-22 11:43:09.819870359 +0800
最近改动:2017-05-22 11:43:09.821870442 +0800
创建时间:-
5.sort排序
[root@localhost ~]# sort aa.txt 默认按首字符排序
[root@localhost ~]# sort -n aa.txt 按整个数字排序
[root@localhost ~]# sort -n -u aa.txt -u 去掉重复行
[root@localhost ~]# sort -n -u -r aa.txt -r 逆序输出
-t 分隔符 -k 排序列
-d 只考虑空白和字母数字字符
6.uniq去掉重复行
[root@localhost ~]# uniq aa.txt 默认去掉连续重复行
[root@localhost ~]# uniq -d aa.txt 显示重复行
[root@localhost ~]# uniq -d -c aa.txt -c 显示重复次数
-u 显示没有连续重复的行
7.练习
1.统计你当前系统中可登录用户的数量
[root@localhost ~]# grep bash$ /etc/passwd | wc -l
6
[root@localhost ~]# grep -c bash$ /etc/passwd
6
[root@localhost ~]# cat /etc/passwd | cut -d: -f 7| sort | uniq -c
2.[root@localhost ~]# ifconfig eno16777736 | awk -F' +' '/broadcast/{print $3}'
172.16.110.247
制作别名myip 显示ip地址
[root@localhost ~]# ifconfig ens33 |head -2|tail -1 |cut -d' ' -f 10
192.168.33.130
[root@localhost ~]# ifconfig eno16777736 |grep broadcast| cut -d' ' -f 10
172.16.110.247
[root@localhost ~]# alias myip="ifconfig ens33 |head -2|tail -1 |cut -d' ' -f 10"
[root@localhost ~]# myip
192.168.33.130
3.
[root@localhost ~]# stat aa.txt
文件:"aa.txt"
大小:4 块:8 IO 块:4096 普通文件
设备:802h/2050d Inode:77530278 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2017-05-22 11:43:11.545941923 +0800
最近更改:2017-05-22 11:43:09.819870359 +0800
最近改动:2017-05-22 11:43:09.821870442 +0800
创建时间:-
取出
11:43:11
11:43:09
11:43:09
[root@localhost ~]# stat aa.txt | grep +0800 |cut -d' ' -f 3|cut -d'.' -f 1
13:49:43
13:49:43
13:49:43
[root@localhost ~]# stat aa.txt |awk -F' |[.]' '/+0800/{print $2}'
13:48:17
13:48:16
13:48:16
1.求passwd文件中uid最大用户的名字
[root@localhost ~]# sort -t':' -k 3 -n /etc/passwd | tail -1 |cut -d: -f 1
nfsnobody
2.求group文件中gid最小的组名和gid
[root@localhost ~]# sort -t':' -k 3 -n /etc/group | head -1 |cut -d: -f 1,3
root:0
3.求出系统中所有网卡的ip地址 (ifconfig获取所有网卡信息)
[root@localhost ~]# ifconfig |grep netmask| cut -d' ' -f 10
192.168.33.130
127.0.0.1
192.168.122.1
九、环境变量配置文件
1.环境变量
环境变量
env 查环境变量
HISTSIZE=1000 历史命名保存的数量
USER=root
PWD=/home/robin
HOME=/root
OLDPWD=/root
set 环境变量和非环境变量(自定义变量)
环境变量:父进程定义的环境变量,子进程可以继承 export
自定义变量:父进程定义的自定义变量,子进程不可以继承 bash
.bashrc 保存用户定义的别名和函数
.bash_profile 保存用户搜索命令的路径
PATH
.bash_history 保存历史命令文件(当用户退出时记录)
.bash_logout 保存用户退出时执行的命令
vim .bash_logout
echo "byebye"
当用户退出时清除执行过的历史命令
rm -rf ~/.bash_history
重新加载
[root@localhost ~]# source /etc/profile
实验:
mkdir /home/robin/test/
vim /home/robin/test/test.sh
\#!/bin/bash
echo "hello world"
chmod +x /home/robin/test/test.sh
vim /home/robin/.bash_profile
PATH=$PATH:/home/robin/test
export PATH
测试
su - robin
test.sh
.bashrc shell级别环境变量配置文件
.bash_profile 登录级别环境变量配置文件
/etc/bashrc 全局shell级别环境配置文件
/etc/profile 全局登录级别环境配置文件
登录用户时环境配置文件加载顺序
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
su robin 和 su - robin的区别:
su robin shell级别的切换,只加载两个shell级别的文件
.bashrc
/etc/bashrc
su - robin 登录级别的切换,4个文件都加载
/etc/profile
.bash_profile
.bashrc
/etc/bashrc
2.练习
1.当用户退出时,清除自己的操作痕迹
[root@localhost ~]# vim /home/robin/.bash_logout
history -c
rm -rf ~/.bash_history
2.将lftp软件加入到搜索路径,对所有用户生效
[root@localhost ~]# vim /etc/profile
PATH=$PATH:/usr/local/lftp/bin
export PATH
[root@localhost ~]# source /etc/profile
3.定义别名la相当于ls -alh 只针对tom用户
[root@localhost ~]# vim /home/tom/.bashrc
alias la="ls -alh"
[root@localhost ~]# su - tom
[tom@localhost ~]$ la
1.环境变量和非环境变量如何查询?
env set
2.如何定义环境变量和非环境变量?
export bash
3.环境变量和非环境变量的区别是什么?
环境变量:父进程定义的环境变量,子进程可以继承
自定义变量:父进程定义的自定义变量,子进程不可以继承
4.解释一下文件的功能?
.bash_history 保存历史命令文件
.bash_logout 保存用户退出时执行的命令
.bashrc 保存用户定义的别名和函数 shell级别
.bash_profile 保存用户搜索命令的路径 登录级别
/etc/bashrc 全局定义的别名和函数 shell级别
/etc/profile 全局定义搜索命令的路径 登录级别
5.将源码包安装的lftp软件命令的搜索路径添加到所有用户可以执行的环境配置文件
在/etc/profile中添加
PATH=$PATH:/usr/local/lftp/bin
export PATH
[root@localhost ~]# source /etc/profile
6.将高级命令作业中,查看所有网卡的命令,做成别名放到root的环境配置中
[root@localhost ~]# vim /etc/bashrc
alias zkq='ifconfig'
[root@localhost ~]# source /etc/bashrc
[root@localhost ~]# zkq
十、shell基础
1.bash特性
yum -y install bash-com*
tab制表符的补齐功能:补齐命令 | 补齐文件名
[root@localhost ~]# systemctl restart vsftpd
history 查看执行过的历史命令
[root@localhost ~]# !1039 在执行一次第1039条命令
[root@localhost ~]# !! 在执行一次上一条命令
[root@localhost ~]# !sys 在执行一次以sys开头的命令
[root@localhost ~]# ls /etc/sysconfig/network-scripts/ifcfg-eno16777736
/etc/sysconfig/network-scripts/ifcfg-eno16777736
[root@localhost ~]# vim !$ 上一条最后一个参数
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
2.shell坏境变量
env 查看环境
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $SHELL
[root@localhost ~]# set 环境与非环境变量
环境变量:子进程可以继承父进程定义的环境变量,非环境变量不可以进程
环境变量:export x=100
自定义:x=100
环境变量的配置文件:
用户自己的环境变量配置文件:
~/.bashrc shell级别环境变量配置文件
~/.bash_profile 登录级别环境变量配置文件
全局环境变量配置文件:
/etc/bashrc 全局shell级别环境变量配置文件
/etc/profile 全局登录级别环境变量配置文件
3.定向符
> : 表示覆盖写入 1>
>>: 表示追加写入 1>>
1,2文件描述符号:
1 : 标准正确输出
2 : 标准错误输出
1>: 标准正确输出,如果文件存在则覆盖,如果文件不存在则创建
1>>: 标准正确输出,如果文件存在则追加,如果文件不存在则创建
2>: 标准错误输出,如果文件存在则覆盖,如果文件不存在则创建
2>>: 标准错误输出,如果文件存在则追加,如果文件不存在则创建
&> 标准正确和标准错误
2>&1 标准错误定向到表正确输出 afdas 1>/tmp/aa.txt 2>&1
4.shell脚本
判断语法:
[root@localhost ~]# cat if.sh
#!/bin/bash 声明命令解释器
# the scripts is test!!
if [ -f /tmp/kk.txt ]
then
echo "文件存在,显示详细信息.稍等......"
sleep 1
ls -l '/tmp/kk.txt'
else
echo "文件不存在,创建文件,稍等......"
sleep 1
touch /tmp/kk.txt
echo "创建成功"
fi
循环语法:
#!/bin/bash
#查找未使用的ip地址
for i in {1..254}
do
( if ping -c 1 172.16.110.$i &> /dev/null
then
echo "172.16.110.$i is used"
else
echo "172.16.110.$i is free"
fi ) &
done
5.练习
1.解释以下名词
1>
1>>
2>
2>>
&>
2.1 2什么名字? >什么名字?
十一、磁盘管理
1.主/扩展/逻辑分区
查看磁盘
[root@localhost ~]# fdisk -l
[root@localhost ~]# df -Th
分区:
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):m
d delete a partition 删除分区
l list known partition types 列出
m print this menu 获取帮助
n add a new partition 添加
p print the partition table 打印分区表
q quit without saving changes 退出
w write table to disk and exit 保存退出
t change a partition's system id 修改类型
分区:
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): p
已选择分区 4
起始 扇区 (37890048-41943039,默认为 37890048):
将使用默认值 37890048
Last 扇区, +扇区 or +size{K,M,G} (37890048-41943039,默认为 41943039):+1G
分区 4 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):w
同步分区表,产生新的分区对应的文件
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
[root@localhost ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4
格式化:
[root@localhost ~]# mkfs.xfs /dev/sda4
挂载使用:
[root@localhost ~]# mount /dev/sda4 /mnt/
删除分区:
卸载分区:
[root@localhost ~]# umount /mnt
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):d
分区号 (1-4,默认 4):4
分区 4 已删除
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 35842047 17408000 83 Linux
/dev/sda3 35842048 37890047 1024000 82 Linux swap / Solaris
命令(输入 m 获取帮助):w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: 设备或资源忙.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
正在同步磁盘。
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4
[root@localhost ~]# partx -d /dev/sda
partx: /dev/sda: error deleting partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3
划分扩展和逻辑分区
命令(输入 m 获取帮助):n
Partition type:
p primary (3 primary, 0 extended, 1 free)
e extended
Select (default e): e
已选择分区 4
起始 扇区 (37890048-41943039,默认为 37890048):
将使用默认值 37890048
Last 扇区, +扇区 or +size{K,M,G} (37890048-41943039,默认为 41943039):
将使用默认值 41943039
分区 4 已设置为 Extended 类型,大小设为 2 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 35842047 17408000 83 Linux
/dev/sda3 35842048 37890047 1024000 82 Linux swap / Solaris
/dev/sda4 37890048 41943039 2026496 5 Extended
划分逻辑分区
命令(输入 m 获取帮助):n
All primary partitions are in use
添加逻辑分区 5
起始 扇区 (37892096-41943039,默认为 37892096):
将使用默认值 37892096
Last 扇区, +扇区 or +size{K,M,G} (37892096-41943039,默认为 41943039):+1G
分区 5 已设置为 Linux 类型,大小设为 1 GiB
命令(输入 m 获取帮助):p
磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000f1b58
设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 1026047 512000 83 Linux
/dev/sda2 1026048 35842047 17408000 83 Linux
/dev/sda3 35842048 37890047 1024000 82 Linux swap / Solaris
/dev/sda4 37890048 41943039 2026496 5 Extended
/dev/sda5 37892096 39989247 1048576 83 Linux
命令(输入 m 获取帮助):
命令(输入 m 获取帮助):w
[root@localhost ~]# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-3
[root@localhost ~]# ls /dev/sda*
/dev/sda /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 /dev/sda5
练习:
1.划分分区
3主分区 每个大小200M
1扩展分区,所有剩余空间
划分4个逻辑分区100M
[root@localhost ~]# fdisk /dev/sdb
2.将sdb5 和 sdb6格式化为xfs文件系统
[root@localhost ~]# mkfs.xfs /dev/sdb5
[root@localhost ~]# mkfs.xfs /dev/sdb6
挂载sdb5到/mnt目录 在/mnt目录下创建文件test.txt
[root@localhost ~]# touch /mnt/test.txt
挂载sdb6到/mnt目录 问能不能挂载? 如果可以,还能不能看到test.txt文件?
能,看不到
[root@localhost ~]# mount /dev/sdb6 /mnt/
[root@localhost ~]# ls /mnt/
挂载在sdb5到/mnt目录 再将sdb5挂载到/opt目录 是否可以? 在/mnt和/opt下是不是都可以看到test.txt文件?
都可以
[root@localhost ~]# mount /dev/sdb5 /mnt/
[root@localhost ~]# ls /mnt/
test.txt
[root@localhost ~]# mount /dev/sdb5 /opt/
[root@localhost ~]# ls /opt/
test.txt
3.删除逻辑分区sdb7 查看哪个分区消失了?想想为什么?
sdb8消失,sdb8的编号变成了sdb7
1.理解磁盘的各种关键字扇区,磁道,柱面
2.理解什么是主分区,扩展分区,逻辑分区 msdos
3.简述划分主分区的过程
用fdisk进行创建,fdisk /dev/sdb
p打印
n创建
p选主分区
配置大小
w保存退出
4.简述划分扩展分区的过程
用fdisk进行创建,fdisk /dev/sdb
p打印
n创建
e选主分区
配置大小
w保存退出
5.简述划分逻辑分区的过程
用fdisk进行创建,fdisk /dev/sdb
p打印
n创建
配置大小
w保存退出
6.将sdb划分为
3个主分区
一个扩展分区
3个逻辑分区
用fdisk创建即可
2.自动挂载
mount
命令格式
mount -t 文件系统类型 被挂载的设备 挂载点
[root@localhost ~]# mount /dev/sda5 /mnt/
[root@localhost ~]# umount /dev/sda5
[root@localhost ~]# umount /mnt
[root@localhost ~]# umount -l /opt/
[root@localhost ~]# mount -o rw,remount /opt/ 重新挂载
[root@localhost ~]# mount -o bind /root/ /tmp/ 将一个目录挂载到另外的目录
mount -t tmpfs size=500M /mnt/ 挂载内存
mount -t sysfs sys /mnt/ 挂载服务
mount -t procfs sys /mnt/
自动挂载:
1./etc/rc.local(进入系统前,最后一个启动脚本)
mount -t xfs /dev/sda5 /mnt
mount -t iso9660 /var/ftp/CentOS7-2.iso /yum
添加执行权限
chmod a+x /etc/rc.d/rc.local
重启测试
2./etc/fstab
/dev/sda5 /mnt xfs defaults 0 0
/var/ftp/CentOS7-2.iso /yum/ iso9660 defaults 0 0
被挂载的设备 挂载点 文件系统 参数 dump备份 fsck检查
测试mount -a
3.autofs(按需挂载服务)
安装软件:
[root@localhost etc]# yum install autofs
创建目录
[root@localhost ~]# mkdir /test
主配置文件(定义按需挂载目录,定义对该目录挂载设备的文件)
[root@localhost etc]# vim /etc/auto.master
/test /etc/auto.test
目录 配置文件
[root@localhost etc]# vim /etc/auto.test
disk-5 -fstype=xfs,rw :/dev/sda5
触发目录 文件系统类型 被挂载设备
重启autofs服务
[root@localhost etc]# systemctl restart autofs
测试
[root@localhost ~]# cd /test
[root@localhost test]# ls
[root@localhost test]# ls iso
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@localhost test]# ls
iso
自动卸载:
[root@localhost etc]# vim /etc/autofs.conf
timeout = 300
自定义卸载时间
vim /etc/auto.master
/test /etc/auto.test --timeout=10
每隔1妙执行一次mount命令
[root@localhost /]# watch -n 1 mount
作业:
使用autofs+yum结合使用
配置autofs
auto实现镜像 按需挂载 /test/iso
[root@localhost ~]# mkdir /test
[root@localhost ~]# vim /etc/auto.master
/test /etc/auto.test
[root@localhost ~]# vim /etc/auto.test
iso -fstype=iso9660,ro :/dev/cdrom
[root@localhost ~]# systemctl restart autofs
[root@localhost ~]# cd /test/
[root@localhost test]# ls iso
CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
[root@localhost test]# ls
iso
配置yum
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# vim yum.repo
[yum]
name=autofs_yum
baseurl=file:///test/iso
enabled=1
gpgcheck=0
[root@localhost ~]# yum makecache
练习:(sdb5和sdb6 一定有文件系统)
将分区sdb5通过rc.local文件实现自动挂载,挂载到/opt目录
将分区sdb6通过fstab文件实现自动挂载,挂载到/mnt目录
重启系统测试是否成功?
[root@localhost ~]# vim /etc/rc.local
mount -t xfs /dev/sdb5 /opt
[root@localhost ~]# vim /etc/fstab
/dev/sdb6 /mnt xfs defaults 0 0
[root@localhost ~]# mount -a
练习:
1.将上一章5,6,7这个三个逻辑分区,使用不同的方法实现自动挂载
如:
格式化sdb5,6,7为xfs格式
sdb5 rc.local方式
[root@localhost ~]# vim /etc/rc.local
mount -t xfs /dev/sdb5 /mnt
[root@localhost ~]# chmod a+x /etc/rc.d/rc.local
重启生效
sdb6 fstab方式
[root@localhost ~]# vim /etc/fstab
/dev/sdb6 /opt xfs defaults 0 0
[root@localhost ~]# mount -a
sdb7 autofs方式
[root@localhost ~]# yum -y install autofs
[root@localhost ~]# mkdir /lj7
[root@localhost ~]# vim /etc/auto.master
/lj7 /etc/auto.lj7
[root@localhost ~]# vim /etc/auto.lj7
luoji7 -fstype=xfs,rw :/dev/sdb7
[root@localhost ~]# systemctl restart autofs
[root@localhost ~]# cd /lj7/
[root@localhost lj7]# ls luoji7
[root@localhost lj7]# ls
luoji7
3.交换分区扩大缩小
扩大交换分区:
1.分区
2.格式化
[root@localhost ~]# mkswap /dev/sda6
正在设置交换空间版本 1,大小 = 511996 KiB
无标签,UUID=266ce265-7659-4e77-971e-44de60c5ab2d
3.激活新的交换分区
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 4031780 888876 108384 12016 3034520 2897392
Swap: 1023996 0 1023996
[root@localhost ~]# swapon /dev/sda6
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 4031780 889560 107496 12068 3034724 2896656
Swap: 1535992 0 1535992
[root@localhost ~]# swapon -s
文件名 类型 大小 已用 权限
/dev/sda3 partition 1023996 0 -1
/dev/sda6 partition 511996 0 -2
新交换分区永久生效
方法1:
vim /etc/rc.local
swapon /dev/sda6
方法2: UUID
blkid /dev/sda6 查UUID
vim /etc/fstab
/dev/sda6 swap swap defaults 0 0
修改分区编号:
[root@localhost ~]# fdisk /dev/sda
命令(输入 m 获取帮助):t
分区号 (1-6,默认 6):6
Hex 代码(输入 L 列出所有代码):82
已将分区“Linux”的类型更改为“Linux swap / Solaris”
命令(输入 m 获取帮助):w
命令(输入 m 获取帮助):p
缩小交换分区:
1.
[root@localhost ~]# swapoff /dev/sda6 取消激活交换分区
2.
删除永久激活设置
3.删除分区
练习:
1.查看你当前的交换分区大小 free -m
[root@localhost test]# free -m
total used free shared buff/cache available
Mem: 972 394 143 10 434 422
Swap: 1023 0 1023
2.将交换分区扩大1G,并保证重启后依然有效
[root@localhost ~]# fdisk /dev/sdb
创建一个1G的分区,类型为82
[root@localhost ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 204796 KiB
no label, UUID=e640d0a9-4401-4bfc-9ddf-155c91d749f8
[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# swapon
NAME TYPE SIZE USED PRIO
/dev/dm-1 partition 1024M 0B -2
/dev/sdb1 partition 200M 0B -3
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 swap swap defaults 0 0
3.将交换分区还原
[root@localhost ~]# swapoff /dev/sdb1
删除永久激活设置
删除分区
1.什么是交换分区?它的作用是什么?
linux交换分区即是linux的SWAP分区 SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用
2.将你当前的交换分区扩大到2GB,在缩小到1GB
[root@localhost ~]# fdisk /dev/sdb
创建一个1G的分区,类型为82
[root@localhost ~]# mkswap /dev/sdb1
[root@localhost ~]# swapon /dev/sdb1
[root@localhost ~]# vim /etc/fstab
/dev/sdb1 swap swap defaults 0 0
[root@localhost ~]# swapoff /dev/sdb1
4.raid磁盘阵列
多块硬盘做raid
磁盘阵列:
1.数据冗余
2.读写加速
raid的级别
level 0 #速度
作用: 条带化
数量: 2块(最少)
size:500G 1T 2n
level 1
作用: 镜像 #冗余
数量: 2块(最少)
size: 500G 500G n/2
level 5
作用: 带奇偶数校验的条带化
数量: 3块(最少)
size:500G n-1 1T
level 10
作用: raid1+raid0
数量: 4块(最少)
size:500G 1T n/2
软raid(使用软件模拟)
创建raid 0
mdadm -C -n 2 -l 0 /dev/md0 /dev/sda5 /dev/sda6
创建 数量 级别 名称 磁盘
查询
mdadm -D /dev/md0
显示扫描信息
mdadm -Ds
永久化软raid
[root@localhost ~]# vim /etc/mdadm.conf
DEVICE /dev/sdb5 /dev/sdb6
[root@localhost ~]# mdadm -Ds >> /etc/mdadm.conf #详细见后面
[root@localhost ~]# vim /etc/mdadm.conf
DEVICE /dev/sdb5 /dev/sdb6
ARRAY /dev/md0 metadata=1.2 name=localhost.localdomain:0 UUID=4554cd1e:17c73a67:9bcf5739:c921f89c
停止
mdadm -S /dev/md0
激活阵列
mdadm -A /dev/md0 /dev/sda5 /dev/sda6
删除:
mdadm -S /dev/md0
rm -rf /dev/md0
rm -rf /etc/mdadm.conf
清除超级块信息
mdadm --zero-superblock /dev/sda5 /dev/sda6
raid1:
mdadm -C -n 2 -l 1 /dev/md1 /dev/sda5 /dev/sda6
raid5:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda5 /dev/sda6 /dev/sda7
rai10:
mdadm -C -n 4 -l 10 /dev/md5 /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
模拟损坏:
创建
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7}
格式化,挂载,使用磁盘后模拟
mkfs.xfs /dev/md5
mount /dev/md5 /mnt
损坏
mdadm -f /dev/md5 /dev/sda5
查询
mdadm -D /dev/md5
移除
mdadm -r /dev/md5 /dev/sda5
添加
mdadm -a /dev/md5 /dev/sda8
备用盘:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7} -x 1 /dev/sda8
mdadm -D /dev/md5
永久生效:
mdadm -C -n 3 -l 5 /dev/md5 /dev/sda{5,6,7} -x 1 /dev/sda8
[root@localhost ~]# vim /etc/mdadm.conf
DEVICE /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8
[root@localhost ~]# mdadm -Ds >> /etc/mdadm.conf
[root@localhost ~]# cat /etc/mdadm.conf
DEVICE /dev/sda5 /dev/sda6 /dev/sda7 /dev/sda8 #手动添加
ARRAY /dev/md5 metadata=1.2 spares=1 name=localhost:5 UUID=5249b8cf:c2a5b49f:405a4a2c:2247d8c9
[root@localhost ~]#
1.卸载
2.停止
3.删除
4.清除超级块
练习
1.简述raid0 raid1 raid5 raid10 各有什么功能?
2.分别做raid0 raid1 raid5 raid10 实验, 并模拟损坏
5.lvm管理
逻辑卷
lvm功能:
1.整合磁盘空间
2.在线扩容
操作
pv 物理卷
1.创建pv
pvcreate /dev/sda6
pvcreate /dev/sda7
2.查询pv
pvs
pvdisplay
vg 卷组
1.创建vg
vgcreate vg0 /dev/sda6 /dev/sda7
-s 指定pe大小,4的倍数
2.查询vg
vgs
vgdisplay
lv 逻辑卷
1.创建
lvcreate -L 700M -n lv0 vg0
-L size
-l pe块个数
-n name
2.查询
lvs
lvdisplay
格式化
mkfs.xfs /dev/vg0/lv0
挂载
mount /dev/vg0/lv0 /mnt/
在线扩容lv
1.lvm块设备在线扩容
2.文件系统的在线扩容
lvm块设备在线扩容
前提vg是有可用空间
lvextend -L +200M /dev/vg0/lv0
文件系统的在线扩容
xfs_growfs /dev/vg0/lv0
在线扩容vg
1.有额外分区或者磁盘
2.创建成pv
3.扩容
vgextend vg0 /dev/sda8
数据迁移(必须在一个vg下)
1.指定设备移动数据
pvmove /dev/sda6 /dev/sdb
2.不指定设备移动数据
pvmove /dev/sda7
vg移除pv
vgreduce vg0 /dev/sda{6,7,8}
删除lv
1.umount /dev/vg0/lv0
2.lvremove /dev/vg0/lv0
3.vgremove vg0
4.pvremove /dev/sda{6,7,8}
lvm快照snapshot
vgcreate vg0 /dev/sdb
lvcreate -L 500M -n /dev/vg0/lv0 vg0
mkfs.xfs /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
创建快照 COW(copy on write)
lvcreate -L 52M -s -n /dev/vg0/lv0-s0 lv0
-s 快照
1.只使用快照,源lv不动
快照内文件修改,不影响源lv数据,快照空间使用100%,快照自动损坏
创建lv0,挂载,添加数据
创建快照
挂载快照
在快照内添加数据,达到%100,快照损毁
2.只使用源lv,快照作为备份 只适合临时备份
随着源lv的变动,快照也随着变大,但是快照中只显示源数据,而不会变动
快照作为备份,空间最好大于数据大小,还要注意选择服务器最空闲时间
多用备份
创建lv0,挂载,添加数据
创建快照,作为备份
删除原lv0内的内容
使用快照恢复数据
注意
再备份过程中,如原lv有大量数据写入,可能造成快照使用率达到100%,损毁
快照大小,要大于备份数据大小
快照大小要足够大...
EXT4文件系统(centos)
pvcreate /dev/sda6 /dev/sda7
vgcreate vg0 /dev/sda{6,7}
lvcreate -L 500M -n lv0 vg0
mkfs.ext4 /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
lvextend -L +200M /dev/vg0/lv0
在线扩容
lvextend -L +200M /dev/vg0/lv0
resize2fs /dev/vg0/lv0 600M 指定大小
resize2fs /dev/vg0/lv0 扩大lv的空间
离线缩小
umount /mnt/
e2fsck -f /dev/vg0/lv0
resize2fs /dev/vg0/lv0 200M
lvresize -L 200M /dev/vg0/lv0
快照同时挂载
lvcreate -L 50M -s -n /dev/vg0/lv0-s0 /dev/vg0/lv0
mount /dev/vg0/lv0 /mnt/
mount /dev/vg0/lv0-s0 /opt/
练习
1.简述lvm的功能和作用
整合磁盘空间
在线扩容
2.使用硬盘sdb sdc sdd创建lvm,并实现在线扩容lv 和 在线扩容vg
准备分区5快,每块200M
用fdisk创建5个磁盘
创建raid 5
[root@localhost ~]# mdadm -C -n 3 -l 5 /dev/md5 /dev/sdb{1,2,3}
创建raid 1
[root@localhost ~]# mdadm -C -n 2 -l 1 /dev/md1 /dev/sdb{5,6}
[root@localhost ~]# mdadm -S /dev/md1
mdadm: stopped /dev/md1
[root@localhost ~]# mdadm -S /dev/md5
mdadm: stopped /dev/md5
[root@localhost ~]# rm -rf /dev/md1
[root@localhost ~]# rm -rf /dev/md5
[root@localhost ~]# mdadm --zero-superblock /dev/sdb{1,2,3,5,6}
做成lv0 300M
[root@localhost ~]# pvcreate /dev/sdb{1,2,3}
[root@localhost ~]# vgcreate vg0 /dev/sdb{1,2,3}
[root@localhost ~]# lvcreate -L 300M -n lv0 vg0
格式化,挂载
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0
[root@localhost ~]# mount /dev/vg0/lv0 /mnt/
在线扩容到500M
[root@localhost ~]# lvextend -L +200M /dev/vg0/lv0
[root@localhost ~]# xfs_growfs /dev/vg0/lv0
做快照52M
[root@localhost ~]# lvcreate -L 52M -s -n /dev/vg0/lv0-s0 lv0
还原
[root@localhost ~]# lvremove /dev/vg0/lv0-s0
[root@localhost ~]# umount /mnt
[root@localhost ~]# lvremove /dev/vg0/lv0
[root@localhost ~]# vgremove vg0
[root@localhost ~]# pvremove /dev/sdb{1,2,3}
6.facl使用方法
文件系统属性
i 不允许对文件做以下操作:
不能删除
不能修改
不能剪切
不能重命名
如果是目录: 不能创建新文件
chattr +i file/dir
lsattr file/dir
a 不允许对文件做以下操作:
不能删除
不能修改
不能剪切
不能重命名
可以追加新内容
如果是目录: 可以创建新文件
chattr +a file/dir
facl(文件访问控制列表)
xfs的facl(xfs默认支持facl)
+ 表示设置facl权限了
getfacl 获取facl信息
setfacl 设置facl信息
setfacl -m u:robin:rw aa.txt 设置用户
setfacl -m u:zorro:rw aa.txt
setfacl -m g:upup:rw aa.txt 设置组
setfacl -m m:r aa.txt 设置mask
setfacl -x robin aa.txt 删除某个用户额外的权限
setfacl -x g:upup aa.txt 删除组的额外权限
setfacl -b aa.txt 删除所有额外权限及取消+标记
练习:
建立三个普通用户 seker,zorro,shrek.用 root 用户在/root 目录中建立一个文件 abc.txt使 seker 用户既能读又能写 abc.txt 文件,但不能删除
使 zorro 用户只能读取,不能写也不能删这个文件
使 shrek 用户只能删除,不能读写这个文件.
以上三个条件同时成立
/root r-xrwxr-x root root
/root/abc.txt rw-r----- seker zorro
seker seker
zorro zorro
shrek shrek
chown seker /root/abc.txt
chown .zorro /root/abc.txt
chmod 640 /root/abc.txt
chmod g+w /root
usermod -a -G root shrek
chmod o+rx /root
用facl完成上题:
[root@localhost ~]# setfacl -m u:seker:rw /root/abc.txt
[root@localhost ~]# setfacl -m u:seker:rx /root/
[root@localhost ~]# setfacl -m u:zorro:r /root/abc.txt
[root@localhost ~]# setfacl -m u:zorro:rx /root/
[root@localhost ~]# setfacl -m u:shrek:- /root/abc.txt
[root@localhost ~]# setfacl -m u:shrek:rwx /root/
继承权限:(设置两次先普通,在加-d或者d:)
setfacl -m u:robin:rwx dir
setfacl -m d:u:robin:rwx dir
----------------------
ext4文件facl(centos5.x )
mount -o facl /dev/sda5 /mnt
练习
1.简述setfacl能解决什么问题?
进行文件访问控制
2.在/tmp目录下创建文件aa.txt,拥有者root 所属组root 权限600
要求:
robin用户可以读写/tmp/aa.txt
zorro用户可以读写/tmp/aa.txt
upup组的tom和jerry只可以读aa.txt文件
[root@localhost ~]# setfacl -m u:robin:rw /tmp/aa.txt
[root@localhost ~]# setfacl -m u:zorro:rw /tmp/aa.txt
[root@localhost ~]# setfacl -m g:upup:r /tmp/aa.txt
3.在/tmp目录下创建目录test,
要求:
robin用户可以读写删除/tmp/test下的所有新建文件
[root@localhost ~]# mkdir /tmp/test
[root@localhost ~]# ll /tmp/
drwxr-xr-x. 2 root root 6 Oct 28 17:28 test
[root@localhost ~]# setfacl -m u:robin:rwx /tmp/test
7.quota磁盘配额的使用
quota磁盘配额(user)
1.开启配额功能:
[root@localhost /]# mount -o usrquota /dev/sda5 /mnt/
2.设置用户配额:
[root@localhost /]# edquota -u robin /mnt
Disk quotas for user robin (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 50M 100M 0 10 20
3.查询配额的使用情况
[root@localhost /]# repquota -u /mnt
4.启动配额:
[root@localhost mnt]# quotaon /mnt/
测试:
测试空间配额
su - robin
dd if=/dev/zero of=/mnt/data bs=120M count=1
dd: 写入"/mnt/data" 出错: 超出磁盘限额
测试文件个数配额
touch /mnt/abc{1..25}.txt
group配额:
group upup
useradd -g upup king
useradd -g upup zorro
1.开启组配额
[root@localhost /]# mount -o grpquota /dev/sda5 /mnt/
2.配置组配额
[root@localhost /]# edquota -g upup
Disk quotas for group upup (gid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 51200 102400 0 10 20
3.查询配额的使用情况
[root@localhost /]# repquota -g /mnt
4.激活组配额
[root@localhost /]# quotaon -g /mnt/
测试:
[root@localhost ~]# su - king
[king@localhost mnt]$ dd if=/dev/zero of=/mnt/data1 bs=80M count=1
[root@localhost ~]# su - zorro
[zorro@localhost ~]$ dd if=/dev/zero of=/mnt/data2 bs=80M count=1
测试配额空间为共用
组和用户一起挂:
[root@localhost ~]# mount -o usrquota,grpquota /dev/sdb5 /mnt/
设置宽限时间
[root@localhost ~]# edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sda5 30seconds 7days
测试:
1.开启配额功能:
[root@localhost /]# mount -o usrquota /dev/sda5 /mnt/
2.设置用户配额:
[root@localhost /]# edquota -u robin /mnt
Disk quotas for user robin (uid 1000):
Filesystem blocks soft hard inodes soft hard
/dev/sda5 0 50M 100M 0 10 20
3.查询配额的使用情况
[root@localhost /]# repquota -u /mnt
4.启动配额:
[root@localhost mnt]# quotaon /mnt/
测试:
测试空间配额
su - robin
激活软限
dd if=/dev/zero of=/mnt/data1 bs=60M count=1
repquota 去查看quota的信息 grace时间变成none
repquota /mnt 查看配额情况
改宽限时间
edquota -t
剩余40M 不可用
删除文件到软限以下
恢复可用空间
复制配额:-p
edquota -gqu -p robin zorro
练习:
准备组easthome 用户robin zorro 都属于easthome组
robin用户在/mnt下配额为40M,60M 10,20
zorro用户在/mnt下配额为40M,60M 10,20 拷贝robin的配额
要求easthome组在/mnt下大小配额为80M,100M 10,20
用户配的宽限时间修改为3小时
[root@localhost ~]# mount -o usrquota,grpquota /dev/sdb5 /mnt/
[root@localhost ~]# edquota -u robin /mnt/
[root@localhost ~]# edquota -u -p robin zorro
[root@localhost ~]# edquota -u zorro /mnt/
[root@localhost ~]# edquota -g easthome
[root@localhost ~]# edquota -t
[root@localhost ~]# quotaon /mnt/
练习
1.解释磁盘配额的功能?可以对什么进行限制?
对用户和组进行限制,限制创建的文件总大小和数量
2.对分区sdb1进行配额
robin用户最多可以使用100M空间,软限制自定义
zorro用户最多可以创建100个文件,软限制自定义
[root@localhost ~]# mount -o usrquota /dev/sdb1 /mnt/
[root@localhost ~]# edquota -u robin /mnt/
Disk quotas for user robin (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 51200 102400 0 0 0
[root@localhost ~]# edquota -u zorro /mnt/
Disk quotas for user zorro (uid 1002):
Filesystem blocks soft hard inodes soft hard
/dev/sdb1 0 0 0 0 80 100
[root@localhost ~]# quotaon /mnt/
切换到robin用户和zorro用户下进行测试
8.GPT分区
[root@localhost /]# parted /dev/sdb ---------------------------------分区命令
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel ------------------------------------------------选择分区表类型
新的磁盘标签类型? gpt
(parted) print ------------------------------------------打印分区表信息
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
(parted) mkpart
分区名称? []? sdb1
文件系统类型? [ext2]? xfs
起始点? 1
结束点? 500M
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 500MB 499MB xfs sdb1
(parted) mkpart
分区名称? []? sdb2
文件系统类型? [ext2]? xfs
起始点? 500M
结束点? 1000M
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 500MB 499MB xfs sdb1
2 500MB 1000MB 500MB sdb2
mkfs.xfs -f /dev/sdb1
mount /dev/sdb1 /mnt/
umount /dev/sdb1
删除
[root@localhost /]# parted /dev/sdb
GNU Parted 3.1
使用 /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help
align-check TYPE N check partition N for TYPE(min|opt) alignment
help [COMMAND] print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END make a partition
name NUMBER NAME name partition NUMBER as NAME
print [devices|free|list,all|NUMBER] display the partition table, available devices, free space,
all found partitions, or a particular partition
quit exit program
rescue START END rescue a lost partition near START and END
rm NUMBER delete partition NUMBER
select DEVICE choose the device to edit
disk_set FLAG STATE change the FLAG on selected device
disk_toggle [FLAG] toggle the state of FLAG on selected device
set NUMBER FLAG STATE change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER
unit UNIT set the default unit to UNIT
version display the version number and copyright information of GNU
Parted
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
1 1049kB 500MB 499MB xfs sdb1
2 500MB 1000MB 500MB sdb2
(parted) rm 2
(parted) rm 1
(parted) print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name 标志
(parted)
[root@localhost /]# ls /dev/sdb*
/dev/sdb
9.ext4和xfs文件系统
ext4文件系统
查看超级块信息
tune2fs -l /dev/vg0/lv0
e2label /dev/vg0/lv0 test
mount LABEL=test /opt
最大挂载次数
tune2fs -c 20 /dev/vg0/lv0
当前挂载次数
tune2fs -C 1 /dev/vg0/lv0
更改卷标
tune2fs -L xxxx /dev/vg0/lv0
添加支持acl功能
tune2fs -o acl /dev/vg0/lv0
取消acl
tune2fs -o ^acl /dev/vg0/lv0
dumpe2fs /dev/sda8
xfs
EXT家族对文件格式化时预先规划出所有的inode/block及中介数据等,未来系统就可以直接取用,不需再分配。早期的磁盘容量不太大的时候这就可以,但随着时代的发展,数据量越来越大,磁盘容量越来越大。现在都已经说到PB,EB的数据了,那么TB以上等级的传统ext
家族文件系统在格式化的时候就得废掉好多时间。。
另外一个原因,虚拟化的应用现在越来越广泛,作为虚拟化磁盘来源的巨型文件(单一文件好几个G及以上)也就越来越常见。这种巨型文件在处理上需要考虑到效能的问题,否则虚拟磁盘的效率就会不太好看。
所以,从centos开始,预设的文件系统由EXT4变成了xfs这个较适合高容
量磁盘与巨型文件效能较佳的文件系统了。
XFS文件系统的配置
基本上XFS就是一个日志式文件系统,之所以现在把它当预设的文件系统
是因为它原本就是被开发用于高容量磁盘以及高性能文件系统之用的,相当适合于现在的环境。此外,几乎所有EXT4文件系统具有的功能,xfs都具备。
xfs文件系统在资料的分布上,主要规划为三个部分:资料区(data section),文件系统活动登录区(log section),实时运作(realtime section)。具体如下:
1资料区(data section)
这个区域基本上与之前说的EXT家族一样,包括inode、block、superblock等数据都放在这个区块。这个数据区与ext家族的block group类似,分多个储存区群组(allocation groups)。每个储存区群组中都包含了整个文件系统的superblock,剩余空间的管理机制,inode的分配与追踪。此外,inode,block都是系统需要用到时才会动态配置产生,所以格式化动作较EXT家族快了很多。
其实,只需要把这个数据区的储存区群组当成ext的block群组就可以了,只是inode与block是动态产生的,并非一开始于格式化就完成配置的。
2文件系统活动登录区(log section)
这个区域主要被用来记录文件系统的变化,具体原理和之前说的相同。
因为系统所有的动作都会在这个区域做个记录所以这个区域的磁盘活动是相当频繁的,xfs的设计在这里有一个巧妙之处,你可以指定外部的磁盘来作为xfs文件系统的日志管理区块。例如,你可以将SSD磁盘作为xfs的文件系统活动登录区,这样,当系统需要进行任何活动时,就可以更迅速的工作。
3实时运作区(realtime section)
当有文件要被建立时,xfs会在这个区段里找一个到数个extent区块,将文件放置在这个区块中,等到分配完毕后,再写入到data section的inode和block中。这个extent区块的大小得要在格式化的时候就先指定,最小值为4K最大可到1G。一般非磁盘阵列的磁盘默认为64K容量,而具有类似磁盘阵列的stripe情况下,则建议extent设定为与stripe一样大较佳。这个extent最好不要乱动,因为可能会影响到实体磁盘的效能。
下面解释一下以上输出的信息:
isize : inode的容量,这里为256bytes。
agcount:储存区群组的个数,这里有4个。
agsize : 每个储存区群组里的block个数,这里为32000个。
sectsz:逻辑扇区(sector)的容量,这里为512bytes。
bsize:每个block的容量为4 k。
blocks:共有128000个block在这个文件系统内。
sunit,swidth:与磁盘阵列的stripe相关性较高,这里暂时不说明。
internal,指这个登录区的位置在文件系统内,而不是外部系统的意思,占用了4K * 853空间。
第9行:realtime区域,extent容量为4k,none=>不过目前没有使用。
xfs有个写入屏障,在有缓存的情况下开启barrier功能,保证数据安全,如果没有缓存可以关闭这个参数
mount -o nobarrier /dev/device /mount/point
xfs支持的配额:
xfs_quota
usrquota
groupquota
project
用户,组配额
[root@localhost ~]# mount -o usrquota,grpquota /dev/sda3 /mnt/
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/
User quota on /mnt (/dev/sda3)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
Group quota on /mnt (/dev/sda3)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
[root@localhost ~]# xfs_quota -x -c 'limit bsoft=50K bhard=100K robin' /mnt
[root@localhost ~]# xfs_quota -x -c 'report' /mnt/
User quota on /mnt (/dev/sda3)
Blocks
User ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
robin 0 52 100 00 [--------]
Group quota on /mnt (/dev/sda3)
Blocks
Group ID Used Soft Hard Warn/Grace
---------- --------------------------------------------------
root 4 0 0 00 [--------]
xfs_quota -x -c 'limit -g bsoft=1000m bhard=1200m accounting' /target/path
prject配额(对目录配额)
mkdir /quota #创建配额目录
mount -o prjquota /dev/sda8 /quota #挂载设备,开启支持目录配额
mkdir /quota/test #创建测试目录
mount
/dev/sda8 on /quota type xfs (rw,relatime,attr2,inode64,prjquota)
[root@localhost ~]# echo 50:/quota/test >> /etc/projects #配置project的id和对应的目录
[root@localhost ~]# echo test:50 >> /etc/projid #项目名称和对应的id
[root@localhost ~]# cat /etc/projects
50:/quota/test
[root@localhost ~]# cat /etc/projid
test:50
xfs_quota -x -c 'project -s -p /quota/test 50' #项目名称
xfs_quota -x -c 'limit -p bhard=100M 50' /quota #限制目录大小
查询
xfs_quota -x -c 'report' /quot #查询
xfs局限性
1.XFS是一个单节点文件系统,如果需要多节点同时访问需要考虑使用GFS2文件系统
2.XFS支持16EB文件系统,而redhat仅支持100TB文件系统
3.XFS较少的适用在单线程元数据密集的工作负荷,在单线程创建删除巨大数量的小文件的工作负荷下,其他文件系统(ext4)表现的会更好一些
4.xfs文件在操作元数据时可能会使用2倍的CPU资源,在CPU资源有限制的情况下可以研究使用不同文件系统
5.xfs更多适用的特大文件的系统快速存储,ext4在小文件的系统或系统存储带宽有限的情况下表现的更好
[root@node6 ~]# yum install xfsprogs -y
[root@node6 ~]# mkfs.xfs /dev/vdb1
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=6016 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=24064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=1200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
日志分离
[root@node6 ~]# mkfs.xfs -l logdev=/dev/vdb2 /dev/vdb1 -f
meta-data=/dev/vdb1 isize=256 agcount=4, agsize=6016 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=24064, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =/dev/vdb2 bsize=4096 blocks=24576, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs/
lvm在线扩容和文件系统扩容
[root@node6 ~]# pvcreate /dev/vdb1 /dev/vdb2
[root@node6 ~]# vgcreate vgxfs /dev/vdb2 /dev/vdb1
[root@node6 ~]# lvcreate -l 25 -n lvxfs vgxfs
Logical volume "lvxfs" created
[root@node6 ~]# mkfs.xfs /dev/vgxfs/lvxfs
meta-data=/dev/vgxfs/lvxfs isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal log bsize=4096 blocks=1200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@node6 ~]# mount /dev/vgxfs/lvxfs /xfs/
[root@node6 ~]# lvextend -l +100%FREE /dev/vgxfs/lvxfs
[root@node6 ~]# xfs_growfs /xfs/
meta-data=/dev/mapper/vgxfs-lvxfs isize=256 agcount=4, agsize=6400 blks
= sectsz=512 attr=2, projid32bit=0
data = bsize=4096 blocks=25600, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0
log =internal bsize=4096 blocks=1200, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 25600 to 47104
修复文件系统
[root@node6 ~]# umount /xfs
[root@node6 ~]# xfs_repair /dev/vgxfs/lvxfs
做日志分离后
[root@node6 ~]# xfs_repair -l /dev/sdb6 /dev/vgxfs/lvxfs
磁盘碎片整理
[root@node6 ~]# mkfs.xfs -l logdev=/dev/vdb2 /dev/vdb1
[root@node6 ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs
[root@node6 ~]# for FILE in file{0..3} ; do dd if=/dev/zero of=/xfs/${FILE} bs=4M count=100 & done
[root@node6 ~]# filefrag /xfs/file*
xfs_db -c frag -r /dev/sda2 磁盘碎片当前状态
[root@node6 ~]# xfs_fsr -v
[root@node6 ~]# umount /xfs
[root@node6 ~]# xfs_repair -n -l /dev/vdb2 /dev/vdb1
Phase 1 - find and verify superblock...
Phase 2 - using external log on /dev/vdb2
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan (but don't clear) agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify link counts...
No modify flag set, skipping filesystem flush and exiting.
[root@node6 ~]#
[root@node6 ~]# xfs_repair -l /dev/vdb2 /dev/vdb1
Phase 1 - find and verify superblock...
Phase 2 - using external log on /dev/vdb2
- zero log...
- scan filesystem freespace and inode maps...
- found root inode chunk
Phase 3 - for each AG...
- scan and clear agi unlinked lists...
- process known inodes and perform inode discovery...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
- process newly discovered inodes...
Phase 4 - check for duplicate blocks...
- setting up duplicate extent list...
- check for inodes claiming duplicate blocks...
- agno = 0
- agno = 1
- agno = 2
- agno = 3
Phase 5 - rebuild AG headers and trees...
- reset superblock...
Phase 6 - check inode connectivity...
- resetting contents of realtime bitmap and summary inodes
- traversing filesystem ...
- traversal finished ...
- moving disconnected inodes to lost+found ...
Phase 7 - verify and correct link counts...
done
备份
物理备份 逻辑备份
离线备份 在线备份
冷备份 热备份
完全备份
增量备份
差异备份
[root@localhost ~]# mount -o logdev=/dev/vdb2 /dev/vdb1 /xfs
[root@localhost ~]# yum install xfsdump
[root@localhost ~]# xfsdump -L all -M dumpfile -l 0 - /mnt | xz > /tmp/xfs.$(date +%Y%m%d).all0.xz
xfsdump: using file dump (drive_simple) strategy
xfsdump: version 3.1.7 (dump format 3.0)
xfsdump: level 0 dump of localhost.localdomain:/mnt
xfsdump: dump date: Thu Oct 29 10:57:34 2020
xfsdump: session id: 74b04de2-c87d-432b-9c7d-2fc484603b7e
xfsdump: session label: "all"
xfsdump: ino map phase 1: constructing initial dump list
xfsdump: ino map phase 2: skipping (no pruning necessary)
xfsdump: ino map phase 3: skipping (only one dump stream)
xfsdump: ino map construction complete
xfsdump: estimated dump size: 25216 bytes
xfsdump: /var/lib/xfsdump/inventory created
xfsdump: creating dump session media file 0 (media 0, file 0)
xfsdump: dumping ino map
xfsdump: dumping directories
xfsdump: dumping non-directory files
xfsdump: ending media file
xfsdump: media file size 22208 bytes
xfsdump: dump size (non-dir files) : 544 bytes
xfsdump: dump complete: 0 seconds elapsed
xfsdump: Dump Status: SUCCESS
[root@localhost ~]# xfsdump -I #查看备份记录
file system 0:
fs id: ae09270a-4ad3-42e5-96f7-ae276e65ef9b
session 0:
mount point: localhost.localdomain:/mnt
device: localhost.localdomain:/dev/sdb1
time: Thu Oct 29 10:57:34 2020
session label: "all"
session id: 74b04de2-c87d-432b-9c7d-2fc484603b7e
level: 0
resumed: NO
subtree: NO
streams: 1
stream 0:
pathname: stdio
start: ino 67 offset 0
end: ino 68 offset 0
interrupted: NO
media files: 1
media file 0:
mfile index: 0
mfile type: data
mfile size: 22208
mfile start: ino 67 offset 0
mfile end: ino 68 offset 0
media label: "dumpfile"
media id: 02cee739-d33c-4951-8980-27d348729459
xfsdump: Dump Status: SUCCESS
[root@localhost mnt]# rm -rf *
[root@localhost mnt]# xzcat /tmp/xfs.20201029.all0.xz | xfsrestore - /mnt/ #完全恢复
xfsrestore: using file dump (drive_simple) strategy
xfsrestore: version 3.1.7 (dump format 3.0)
xfsrestore: searching media for dump
xfsrestore: examining media file 0
xfsrestore: dump description:
xfsrestore: hostname: localhost.localdomain
xfsrestore: mount point: /mnt
xfsrestore: volume: /dev/sdb1
xfsrestore: session time: Thu Oct 29 10:57:34 2020
xfsrestore: level: 0
xfsrestore: session label: "all"
xfsrestore: media label: "dumpfile"
xfsrestore: file system id: ae09270a-4ad3-42e5-96f7-ae276e65ef9b
xfsrestore: session id: 74b04de2-c87d-432b-9c7d-2fc484603b7e
xfsrestore: media id: 02cee739-d33c-4951-8980-27d348729459
xfsrestore: searching media for directory dump
xfsrestore: reading directories
xfsrestore: 1 directories and 1 entries processed
xfsrestore: directory post-processing
xfsrestore: restoring non-directory files
xfsrestore: restore complete: 0 seconds elapsed
xfsrestore: Restore Status: SUCCESS
全备份
[root@localhost mnt]# echo aaa >> a.txt
[root@localhost ~]# xfsdump -L all -M dumpfile -l 0 - /mnt | xz > /tmp/xfs.$(date +%Y%m%d).all0.xz
[root@localhost mnt]# xzcat /tmp/xfs.20201029.all0.xz | xfsrestore - /mnt/
增量
[root@localhost mnt]# echo bbb > b.txt
[root@localhost mnt]# xfsdump -L add -M dumpfile -l 1 - /mnt | xz > /tmp/xfs.$(date +%Y%m%d).add1.xz
[root@localhost mnt]# xzcat /tmp/xfs.20201029.all0.xz | xfsrestore - /mnt/
[root@localhost mnt]# xzcat /tmp/xfs.20201029.add1.xz | xfsrestore - /mnt/
[root@localhost mnt]# echo cccc > c.txt
[root@localhost mnt]# xfsdump -L add -M dumpfile -l 2 - /mnt | xz > /tmp/xfs.$(date +%Y%m%d).add2.xz
[root@localhost mnt]# xzcat /tmp/xfs.20201029.add2.xz | xfsrestore - /mnt/
[root@localhost mnt]# echo ddd > d.txt
[root@localhost mnt]# xfsdump -L add -M dumpfile -l 3 - /mnt | xz > /tmp/xfs.$(date +%Y%m%d).add3.xz
[root@localhost mnt]# xzcat /tmp/xfs.20201029.add3.xz | xfsrestore - /mnt/
差异
[root@localhost mnt]# xfsdump -L cha -M dumpfile -l 1 - /mnt | xz > /tmp/xfs.$(date +%Y%m%d).cha1.xz
[root@localhost mnt]# xzcat /tmp/xfs.20201029.cha1.xz | xfsrestore - /mnt/
完全恢复+增量恢复
xzcat /home/xfs.20170609.all0.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add1.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add2.xz | xfsrestore - /mnt/
ls
xzcat /home/xfs.20170609.add3.xz | xfsrestore - /mnt/
ls
完全恢复+差异恢复
[root@localhost mnt]# xzcat /tmp/xfs.20201029.all0.xz | xfsrestore - /mnt/
[root@localhost mnt]# ls
a.txt b.txt
[root@localhost mnt]# xzcat /tmp/xfs.20201029.cha1.xz | xfsrestore - /mnt/
[root@localhost mnt]# ls
a.txt b.txt c.txt d.txt
清楚备份记录
rm -rf /var/lib/xfsdump/inventory/*
练习
将/dev/sdb硬盘数据做完全备份
添加新文件1.txt
做增量备份
添加新文件2.txt
做增量备份
添加新文件3.txt
做增量备份
做差异备份
删除所有数据
方法1 恢复数据
全备+增量
方法2 恢复数据
全备+差异
10.符号链接和硬链接
文件链接方式 :
符号连接(软链接)
ln -s /tmp/passwd /home/
硬链接
ln /tmp/passwd /tmp/passwd.link
区别:
1.命令相同 参数不同
软链接在创建必须绝对路径
硬链接都可以
2.硬链接的权限和源文件完全一致
软链接的链接文件权限永远是777 和源文件权限不同
3.硬链接可以删除,移动源文件
软链接不可以删除,移动源文件
4.软链接inode和源文件不同
硬链接的inode的源文件相同
5.软链接可以对目录生效
硬链接只可以对文件操作
6.软链接可以跨文件系统
硬链接不可以跨文件系统
unlink 链接文件名 取消链接
练习
1.简述 软连接和硬链接区别. 如何操作
十二、网络管理
1.配置文件配置网络
ifconfig
ip addr show
route -n 查看路由
ping
ping -c 1
traceroute www.sina.com
arping -I eno16777736 192.168.200.54 查看ip地址是否冲突
arp -n
vim /etc/sysconfig/network-scripts/ifcfg-eno16777736
NAME="eno16777736"
DEVICE="eno16777736"
ONBOOT=yes ---------------------------->是否在开机或重起时启动网卡
NETBOOT=yes
UUID="4dcebd9d-42ec-4f10-87c1-ac5708adee2d"
IPV6INIT=yes
BOOTPROTO=none -----------------------------> dhcp static none
TYPE=Ethernet
IPADDR=192.168.200.222 -------------------------------> ip地址
NETMASK=255.255.255.0(PREFIX=24) -----------------------> 子网掩码
GATEWAY=192.168.200.1 ------------------------------> 网关
重起网卡,重新加载配置文件
systemctl restart network
配置临时别名
ifconfig eno16777736:0 10.10.10.10/24
永久别名
systemctl stop NetworkManager
cd /etc/sysconfig/network-scripts/
cp ifcfg-eno16777736 ifcfg-eno16777736:0
[root@localhost network-scripts]# vim ifcfg-eno16777736:0
NAME="eno16777736:0"
DEVICE="eno16777736:0"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
BOOTPROTO=none
TYPE=Ethernet
IPADDR=10.10.10.10
NETMASK=255.255.255.0
2.NetworkManager使用
Red Hat Enterprise Linux 7 与 CentOS 7 中默认的网络服务由 NetworkManager 提供,这是动态控制及配置网络的守护进程,它用于保持当前网络设备及连接处于工作状态,同时也支持传统的 ifcfg 类型的配置文件
可以用命令行工具 nmcli 来控制 NetworkManager。
nmcli[ OPTIONS ] OBJECT { COMMAND | help }
OBJECT和COMMAND可以用全称也可以用简称,最少可以只用一个字母,建议用头三个字母。OBJECT里面我们平时用的最多的就是connection和device,这里需要简单区分一下connection和device。
device叫网络接口,是物理设备
nmcli device help
connection是连接,偏重于逻辑设置
nmcli connection help
多个connection可以应用到同一个device,但同一时间只能启用其中一个connection。这样的好处是针对一个网络接口,我们可以设置多个网络连接,比如静态IP和动态IP,再根据需要up相应connection
nmcli dev status 列出所有设备
nmcli con show 列出所有链接
nmcli con up "id" 激活一个链接
nmcli con down "id" 取消激活链接
nmcli dev dis "dev" down一个网卡和临时关闭一个链接
nmcli net off 关闭所有管理接口
nmcli con add 添加一个新的链接
nmcli con mod 修改一个链接
nmcli con del "id" 删除一个链接
修改配置文件执行生效: systemctl restart network 或 nmcli con reload
nmcli命令生效:nmcli con down eth0 ; nmcli con up eth0
显示所有包括不活动连接
nmcli con show
显示所有活动连接
nmcli con show –active
显示设备状态
nmcli dev status
显示网络接口属性
nmcli dev show eno16777736
示例
添加静态ip
[root@localhost ~]# nmcli connection add con-name ens33-static ifname ens33 type ethernet ipv4.addresses 192.168.33.250/24 ipv4.gateway 192.168.33.1 ipv4.dns 114.114.114.114 ipv4.method manual connection.autoconnect yes
Connection 'ens33-static' (43db0ac5-07e1-46a8-84de-cdabeeb32b99) successfully added.
添加动态ip
[root@localhost ~]# nmcli connection add con-name ens33-dhcp ifname ens33 type ethernet ipv4.method auto connection.autoconnect yes
Connection 'ens33-dhcp' (25bc6c90-f9c8-486a-82d1-639b33d99b0c) successfully added.
会自动生成配置文件
con add – 添加新的连接
con-name – 连接名
type – 设备类型
ifname – 接口名
autoconnect no – 禁止开机自动启动
创建以个名字为home的,类型为以太网卡,绑定网卡为eth1,开机自动启动,定义ipv4地址和网关
nmcli con add con-name home ifname eno16777736 autoconnect yes type Ethernet ip4 192.168.100.1/24 gw4 192.168.100.254
查看网卡绑定信息
nmcli con show
启动home链接
nmcli con up home
这样,home接口已经生效,可以正常使用。但同一时间只能绑定在一个接口上。平时如果工作需要,可以多设置几套配置文件,环境需要时可以进行临时的切换。
当不需要再用时可以使用:nmcli connection delete home删除
练习:
添加一块新网卡
通过networkmanager 给信网卡设置ip地址
一个自动获取
一个静态ip IP地址为192.168.0.100
修改连接设置
nmcli con mod“static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static” +ipv4.dns 8.8.8.8
nmcli con mod “static” -ipv4.dns 8.8.8.8
nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254”
nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
激活网卡:
nmcli connection up ens33-static 查看ip地址
nmcli connection up ens33-dhcp 查看ip地址
nmcli connection up ens33 查看ip地址
修改网卡信息:
nmcli connection modify ens33-static ipv4.method manual
添加额外ip(持久有效)
nmcli connection modify ens33 +ipv4.addresses 100.100.100.100/24
nmcli connection up ens33 激活
3.修改主机名
主机名:
[root@zhangkeqiang ~]# hostnamectl set-hostname zhangkeqiang.com
当前主机名和永久主机名
[root@zhangkeqiang ~]# hostname
zhangkeqiang.com
[root@zhangkeqiang ~]# vim /etc/hostname
zhangkeqiang.com
必须做主机名解析,修改hosts文件
[root@zhangkeqiang ~]# vim /etc/hosts
192.168.33.133 zhangkeqinag.com
添加默认网关
route add default gw 192.168.200.222
route del default gw 192.168.200.222
4.练习
1.添加新网卡
通过手动修改配置文件将IP地址设置为 172.16.10.100/16
NAME
TYPE
DEVICE
BOOTPROTO
ONBOOT
IPADDR
NETMASK
GATEWAY
DNS1
DNS2
2.添加新网卡
通过NetworkManager 设置两个配置文件一个 static 一个dhcp获取
3.写出A,B,C3类地址的范围,并写出每类地址的私有地址范围?
4.192.168.1.24/28 和 192.168.1.36/28 这两个地址可不可以通信?
十三、系统修复维护
1.root丢失
解决方法
重起系统
选择系统标题 ------->e 编辑
选择以下行
linux16 /vmlinuz-3.10.0-327.el7.x86_64 root=UUID=1874f157-368e-4ead- 8ab2-2ef4a81e2019 ro rhgb quiet LANG=zh_CN.UTF-8 init=/bin/bash
ctrl+x 进入系统单用户模式
2.修复模式
方法1:
修改bios,选择光盘启动
选择troubleshooting ------> rescue file system
进入修复模式
mount /dev/sda2 /mnt /mnt就是硬盘系统/目录
也可以选择使用 chroot /mnt 命令 切换到原来的系统
如果没有光盘,可以制作u盘启动盘
UltraISO(以管理员身份运行) ----> 打开iso ---> 启动------->写入硬盘映像
方法2:
通过网络上的live盘,进行修复
远程拷贝:
ssh 192.168.200.216
scp /etc/passwd 192.168.200.222:/tmp
不登录拷贝
scp 192.168.200.216:/etc/hosts /tmp/
模式修改(启动级别)
获取当前系统模式
systemctl get-default
设置当前系统为文本模式=level3
systemctl set-default multi-user.target
systemctl set-default graphical.target === 5级别
/usr/lib/systemd/system/runlevel0.target 关机
/usr/lib/systemd/system/runlevel1.target 单用户
/usr/lib/systemd/system/runlevel2.target 无网络文本
/usr/lib/systemd/system/runlevel3.target 有网络文本
/usr/lib/systemd/system/runlevel4.target 保留
/usr/lib/systemd/system/runlevel5.target 图像
/usr/lib/systemd/system/runlevel6.target 重启
bootloader
grub,设置grub密码
lilo
系统启动过程
1.加电
2.bios系统(基本输入输出系统) boot(硬盘 u盘 网络 光盘)
3.引导程序(0磁道0扇区 512字节) 446引导程序 64分区表 2字节 magic number
4.通过boot分区 vmlinuz内核 initramfs硬件驱动 0号进程
5.1号进程(init ---- inittab----运行级别(0-6)) fstab
0关机 1单用户 2无网络的文本模式 3有网络文件模式 4保留 5图形 6重启
6.进程启动.....
7.rc.local
8.加载文本资源(终端)
9.加载图形资源
3.练习
1.简述单用户模式进入方式
2.简述光盘修复模式的进入方式
3.在光盘修复模式下,修改自己的密码为空
十四、模块管理
1.内核
内核
uname -r
3.10.0-327.el7.x86_64
主版本号.次版本号-修订版本号.系统版本.平台
次版本号(奇数) 测试版
次版本号 (偶数) 发行版
内核模块module
lsmod 查看当前系统中已加载模块
modinfo ext4 查看模块信息
insmod /lib/modules/3.10.0-327.el7.x86_64/kernel/fs/ext4/ext4.ko 静态加载模块
rmmod ext4 卸载
modprobe ext4 动态加载
ls /lib/modules/3.10.0-327.el7.x86_64/
modules.dep 存放模块依赖关系的文件,自动生成
modules.dep.bin
depmod -a 可以创建modules.dep文件
内核参数
1.打开路由转发参数
echo 1 > /proc/sys/net/ipv4/ip_forward
cat /proc/sys/net/ipv4/ip_forward
永久保存内核参数
vim /usr/lib/sysctl.d/00-system.conf
net.ipv4.ip_forward = 1
直接生效
sysctl -p /usr/lib/sysctl.d/00-system.conf
练习:两台不同网段主机通信
A: 192.168.1.200/24
B: 10.10.3.61/24
1.通过静态路由
A:
ip route add 10.10.3.0/24 dev eno16777736
B:
ip route add 192.168.1.0/24 dev eno16777736
2. 通过网关通信
C:
网卡1: 192.168.1.1/24
网卡2: 10.10.3.76/24
开启路由转发: echo 1 > /proc/sys/net/ipv4/ip_forward
A:192.168.1.200/24
删除现有的默认网关
添加网关: ip route add default via 192.168.1.1/24 dev eno16777736
B:10.10.3.61/24
删除现有的默认网关
添加网关: ip route add default via 10.10.3.76/24 dev eno16777736
2.禁止其他人对我执行ping
2.禁止其他人对我执行ping
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
3.练习
1.准备3个虚拟机 按下图设置ip地址
虚拟机1 虚拟机2 虚拟机3
网卡1 网卡1 网卡2 网卡1
192.168.100.100/24 192.168.100.1/24 172.16.10.1/24 172.16.10.100/24
通过静态路由让虚拟机1和虚拟机3通信
通过网关虚拟机2让虚拟机1 和 虚拟机3通信
十五、查找命令
1.which
查找命令所在路径
[root@robin ~]# which useradd
/usr/sbin/useradd
2.whereis
[root@robin ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.g
3.grep
例:
[root@robin ~]# grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@robin ~]#
4.locate
[root@robin ~]# locate aa.txt
/home/aa.txt
/root/aa.txt
[root@robin ~]# rm -rf /root/aa.txt
[root@robin ~]# locate aa.txt
/home/aa.txt
/root/aa.txt
updatedb 维护locate的索引
[root@robin ~]# locate aa.txt
/home/aa.txt
5.find
命令 路径 [参数] [值]
根据文件名
find / -name aa.txt
根据拥有者
find / -user robin
find / -user robin -ls
所属组
find / -group upup -ls
条件 -a 和 -o 或
find / \( -user king -a -group upup \) -ls
find / \( -user king -o -group upup \) -ls
按类型
find / -type p -ls
按硬链接数
find / -links 20 -ls
按大小
[root@robin tmp]# find /tmp -size 30M
/tmp/30M
[root@robin tmp]# find /tmp -size +30M #大于30M
/tmp/40M
/tmp/50M
[root@robin tmp]# find /tmp -size -30M #小于30M
/tmp/10M
/tmp/20M
[root@robin tmp]# find /tmp -size +15M -a -size -45M
/tmp/20M
/tmp/30M
/tmp/40M
[root@robin tmp]# find /tmp -size -15M -o -size +45M
按时间:
find /tmp/ -mtime 3 正好3天
find /tmp/ -mtime +3 3天以前
find /tmp/ -mtime -3 3天以内
find /tmp -mtime +2 -a -mtime -5
按权限
find /tmp/ -perm 420 完全匹配
find /tmp/ -perm /+240 -ls 任意匹配
find /tmp/ -perm -240 -ls 子集匹配
exec 和 ok
find /tmp -name aa.txt -exec rm -rf {} \;
[root@robin tmp]# find /tmp -name cc.txt -ok rm -rf {} \;
< rm ... /tmp/cc.txt > ? no
[root@robin tmp]# find /tmp -name cc.txt -ok rm -rf {} \;
< rm ... /tmp/cc.txt > ? yes
避免返回字符长度过长
find / -type f | xargs file
cut -d: -f 1 /etc/passwd | xargs
cut -d: -f 1 /etc/passwd | xargs mkdir
6.其他
whoami 当前用户身份
who i am 原始登录用户身份
who
w
7.练习
查找系统中 最近1天修改过的文件 并拷贝到/tmp目录下
find / -mtime -1 -exec cp -r {} /tmp \;
查找系统中大于100k 小于200k的文件并拷贝到/tmp目录下
[root@local ~]# find / \(-size +100k -a -size -200k\) -exec cp -a {} /tmp/ \;
1.列举查找命令有哪些?各有什么功能?
which 查找命令路径
whereis 查找命令
grep 过滤
locate 查找文件
find 查找
2.查找系统中size大于10M的文件
[root@local ~]# find / -size +10M
3.查找系统中10天以前并且是普通文件的文件
[root@local ~]# find / -mtime +10 -type f
4.找到系统中名字中含有root的文件
[root@local ~]# find / f -name *root*
十六、服务管理
1.计划任务
一.at(24小时内计划任务)
创建计划任务
[root@robin tmp]# at 12:41
at> touch /tmp/at.txt
at> echo 123 >> /tmp/at.txt
at> <EOT> ------------------------------------>ctrl + d
job 1 at Tue Jun 13 12:41:00 2017
查询
[root@robin tmp]# at -l
1 Tue Jun 13 12:41:00 2017 a root
删除
[root@robin tmp]# atrm 2
存储位置
[root@robin tmp]# cat /var/spool/at/a00003017cca62
二.crond服务
用户计划任务
创建计划任务
* * * * *
分(0-59)
时(0-23)
日(1-31)
月(1-12)
周(0-7)
* * * * * date >> /tmp/date.txt 每分钟
5 * * * * date >> /tmp/date.txt 每小时第5分钟
*/5 * * * * date >> /tmp/date.txt 每5分钟
10 10 * * * date >> /tmp/date.txt 每天的10点10分
10 10 10 * * date >> /tmp/date.txt 每月10号10点10分
10 10 10 10 * date >> /tmp/date.txt 每年的10月10号10点10分
10 10 10 10 6 date >> /tmp/date.txt 或者每周6的10点10分
10 10,15,20 10 * * date >> /tmp/date.txt 每月10号10点10分 15点10分 20点10分
10 10-20 10 * * date >> /tmp/date.txt 每月10号10点-20点 10分
练习:
使用tar命令 对你的boot目录备份
要求:你当前系统时间晚2分钟
备份文件放在/tmp目录下, 备份文件名字是当前系统时间 月-日-时-分-boot.tar.gz
[root@local ~]# vim /tmp/backup.sh
#!/bin/bash
tar -zcvf /tmp/$(date +%m-%d-%H-%M)-boot.tar.gz /boot
[root@local ~]# chmod a+x /tmp/backup.sh
[root@local ~]# crontab -e
13 10 * * * /tmp/backup.sh
crontab -l 查询计划任务
crontab -r 删除所有计划任务
计划任务的保存位置
[root@robin home]# cat /var/spool/cron/root
* * * * * date >> /tmp/date.txt
系统计划任务
cron.monthly/ 每月要执行的
cron.weekly/ 每周要执行的
cron.daily/ 每天要执行的
cron.hourly/ 每小时要执行的
访问控制文件:/etc/cron.deny
写入该文件的用户不可以使用计划任务
日志: /var/log/cron
练习:
要求:
备份sdb文件系统 xfsdump
周1 全备
周2 增量
周3 增量
周四 差异
周5 增量
周6 增量
周7 增量
周1 全备
[root@local tmp]# vim num.txt
0
[root@local tmp]# vim add.sh
#!/bin/bash
num=`cat /tmp/num.txt`
new_num=$(($num+1))
xfsdump -L add -M dumpfile -l $new_num - /mnt |xz > /tmp/xfs.$(date +%w).add$new_num.xz
touch /mnt/$new_num.txt
echo $new_num > /tmp/num.txt
while (($new_num>4))
do
new_num=0
echo $new_num > /tmp/num.txt
done
[root@local tmp]# vim all.sh
#!/bin/bash
xfsdump -L all -M dumpfile -l 0 - /mnt |xz > /tmp/xfs.$(date +%w).all0.xz
touch /mnt/aaaa.txt
[root@local tmp]# vim cha.sh
#!/bin/bash
xfsdump -L cha -M dumpfile -l 1 - /mnt |xz > /tmp/xfs.$(date +%w).cha1.xz
[root@local tmp]# crontab -e
42 11 * * * /tmp/all.sh
44 11 * * * /tmp/add.sh
46 11 * * * /tmp/cha.sh
2.日志服务
rpm包日志目录:/var/log
日志服务的启动:
systemctl restart rsyslog
配置文件:
/etc/rsyslog.conf
日志默认存放位置:
/var/log
日志文件配置格式:
AAAA.BBBB CCCC
AAAA 产生日志的设备(接口,对象,类型)
BBBB 日志的级别
CCCC 保存日志的位置
产生日志的设备:authpriv mail cron uucp news local0-7用户自定义
日志级别:
debug 调试
info 正常
notice 稍微注意
warning 警告
error 错误信息
crit 危机信息
alert 必须注意
emergency(panic) 紧急信息
例:
mail.info 表示记录日志时 记录info级别以上
mail.=info 只要info级别
mail.!=info 除了info级别
存放日志的位置:
1.发送终端上
*.info;mail.none;authpriv.none;cron.none /dev/tty3
2.发送给用户
*.info;mail.none;authpriv.none;cron.none robin
3.发送到文件
*.info;mail.none;authpriv.none;cron.none /tmp/log.log
日志的集中管理:
服务端
vim /etc/rsyslog.conf
UDP
$ModLoad imudp
$UDPServerRun 514
systemctl restart rsyslog
客户端
UDP
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.200.222
systemctl restart rsyslog
服务端
TCP
vim /etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 514
systemctl restart rsyslog
客户端
TCP
vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none @@192.168.200.222
systemctl restart rsyslog
实验:
UDP 接收 message日志 重启autofs测试
TCP 接收 secure日志 ssh 127.0.0.1测试
OSI七层模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
tcp/ip4层 5层
应用层
传输层
网络层
数据链路层
物理层
日志的轮转 logrotate
[root@robin logrotate.d]# cp yum test
[root@robin logrotate.d]# vim test
/tmp/test.log {
missingok 丢失不提示
notifempty 空日志不切
dateext 日期格式
daily 按天
rotate 7 保留7个
olddir /oldlog
create 0777 root root
}1121
logrotate -f /etc/logrotate.d/test
自己定义日志
自己定义接口
vim /etc/rsyslog.conf
local6.* /var/log/test.log
systemctl restart rsyslog
logger命令产生日志
logger -p local6.info "hello world"
cat test.sh
#!/bin/bash
#logger -p local6.info "hello world 1"
echo "hello python" >> /var/log/test.log
sleep 2
/root/test.sh
练习:
1.解释日志服务配置文件的内容?
2.开启日志服务的远程日志(日志集中管理)
将mail的日志使用udp传输
将secure的日志使用tcp传输
3.对/tmp/robin.log文件设置轮转配置
要求:
1.丢失不提示
2.空文件不轮转
3.保存7分
4.新建日志文件权限 777 拥有者为robin 所属组为robin
5.按天轮转
3.DHCP
动态分配IP地址
实验环境
服务器和客户端仅主机方式连接
DHCP:
安装包:
yum install dhcp
端口(udp):67
配置文件:/etc/dhcp/dhcpd.conf
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
启动服务: systemctl restart dhcpd
日志:/var/log/messages
工作原理:
C ---------DHCP DISCOVER --------> S
C<--------DHCP OFFER -------------- S
C----------DHCP REQUEST----------> S
C<--------DHCP ACK ----------------- S
配置:
[root@servera ~]# vim /etc/dhcp/dhcpd.conf
subnet dhcp网段 netmask 子网掩码 {
range 172.16.100.101 172.16.100.200; #范围
option domain-name-servers 114.114.114.114; #dns
#option domain-name "internal.example.org";
option routers 172.16.100.1; #网关
#option broadcast-address 172.16.100.255; #最后一个ip
default-lease-time 600; #默认租赁时间
max-lease-time 7200; #最大租赁时间
}
[root@servera ~]# systemctl restart dhcpd
[root@servera ~]# ss -anpltu | grep :67
客户端:
重启网络
ip addr s
租约文件:
服务端:/var/lib/dhcpd/dhcpd.leases
客户端:/var/lib/dhclient/
指定ip地址分配
[root@servera ~]# vim /etc/dhcp/dhcpd.conf
host client1 {
hardware ethernet 00:0c:29:64:d6:87;
fixed-address 172.16.100.250;
}
[root@servera ~]# systemctl restart dhcpd
练习:
1.搭建dhcp服务器
要求:
1.分配192.168.100.0/24网段ip
2.分配地址范围192.168.100.50-192.168.100.100
4.SSHD
SSHD 远程登陆服务
安装包:
openssh-server-6.6.1p1-22.el7.x86_64
openssh-clients-6.6.1p1-22.el7.x86_64
配置文件:
/etc/ssh/sshd_config
端口:
22
启动服务:
systemctl restart sshd
日志:/var/log/secure
客户端
客户端登陆
ssh 192.168.200.227 使用的当前帐号作为登陆用户
ssh robin@192.168.200.227 指定用户身份登陆
远程拷贝
scp /root/anaconda-ks.cfg 192.168.200.222:/tmp/
不登陆拷贝
scp 192.168.200.227:/etc/hosts /tmp/
远程执行命令
ssh 192.168.200.227 'useradd robin;echo 123 | passwd --stdin robin'
配置文件
服务端:
vim /etc/ssh/sshd_config
Port 22222 #指定端口
PermitRootLogin yes #是否允许root用户登录
UseDNS no #是否进行主机名解析
PasswordAuthentication yes #是否允许密码验证
客户端
ssh 192.168.200.222 -p 22222
远程拷贝
scp -P 22222 /etc/man_db.conf 192.168.200.222:/tmp/
自定义sshd日志(sshd rsyslog)
vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV
SyslogFacility local5
vim /etc/rsyslog.conf
local5.* /var/log/ssh.log
systemctl restart rsyslog
允许登陆帐号
Allowusers robin zorro
密钥登陆
1.生成密钥
[root@localhost ~]# ssh-keygen
2.将公钥拷贝到服务器
ssh-copy-id -i 192.168.200.227
服务器公钥名称
authorized_keys
服务器建立互信
1.ssh-keygen
2.拷贝公钥给自己
ssh-copy-id -i 192.168.200.222
多台服务器建立互信
方法一:
生成密钥
[root@servera ~]# ssh-keygen
拷贝公钥给自己
[root@servera ~]# ssh-copy-id -i 192.168.33.137
拷贝.ssh目录给别的服务器
[root@servera ~]# scp -r /root/.ssh/ 192.168.33.138:/root/
通过ssh进行测试
加载私钥
[root@localhost ~]# ssh-add
方法二:
每个主机做公钥私钥
[root@servera ~]# ssh-keygen
[root@serverb ~]# ssh-keygen
主机1拷贝公钥给主机2
[root@servera ~]# ssh-copy-id -i 192.168.33.138
主机2将自己的公钥追加到/root/.ssh/authorized_keys
[root@serverb .ssh]# cat id_rsa.pub >> authorized_keys
主机2将/root/.ssh/authorized_keys拷贝给主机1
[root@serverb .ssh]# scp -r /root/.ssh/authorized_keys 192.168.33.137:/root/.ssh/
通过ssh进行测试
练习:
1.给两台虚拟机 建立sshd的密钥互信
5.文件服务器
1)NFS
NFS
网络文件系统:
安装包:
setup-2.8.71-6.el7.noarch
配置文件:
/etc/exports
端口:
2049
启动服务:(依赖服务rpcbind)
systemctl restart nfs
服务端:
配置:
[root@servera ~]# mkdir /nfs
[root@servera ~]# vim /etc/exports
/nfs *(rw,sync) #共享给所有人
/nfs 192.168.200.0/24(rw,sync) #共享给192.168.200网段
/nfs 192.168.200.0/24(rw,sync) 10.10.10.0/24(ro)
/nfs 192.168.200.225(rw,sync) #共享给某个主机
/nfs 权限
/nfs *(rw,sync,no_root_squash)
客户端
装包nfs-utils
[root@serverb ~]# yum -y install nfs-utils
showmount -e ip地址 #查看nfs服务器
[root@serverb ~]# showmount -e 192.168.33.137
Export list for 192.168.33.137:
/nfs *
[root@serverb ~]# mount -t nfs 192.168.33.137:/nfs /mnt
[root@serverb ~]# ls /mnt/
作业:
1.3种方式实现nfs自动自动挂载
fstab
[root@serverb ~]# mkdir /mnt/tab
[root@serverb ~]# vim /etc/fstab
192.168.33.137:/nfs /mnt/tab nfs defaults 0 0
autofs
[root@serverb ~]# yum -y install autofs
[root@serverb ~]# vim /etc/auto.master
/mnt /etc/auto.mnt
[root@serverb ~]# vim /etc/auto.mnt
auto -fstype=nfs,rw 192.168.33.137:/nfs
(* -rw,vers=3 classroom.example.com:/home/guests/& )
[root@serverb mnt]# ls auto
111
rc.local
[root@serverb ~]# mkdir /mnt/rc
[root@serverb ~]# vim /etc/rc.local
mount -t nfs 192.168.33.137:/nfs /mnt
[root@serverb ~]# chmod a+x /etc/rc.d/rc.local
2.NAS服务器(网络附加存储)
raid+lvm+nfs
3块硬盘
raid5
[root@localhost ~]# mdadm -C -n 3 -l 5 /dev/md5 /dev/sdb /dev/sdc /dev/sdd
lvm
[root@localhost ~]# pvcreate /dev/md5
[root@localhost ~]# vgcreate vg0 /dev/md5
[root@localhost ~]# lvcreate -L 1.5G -n lv0 vg0
/nas NFS SMB
[root@localhost ~]# mkfs.xfs /dev/vg0/lv0
[root@localhost ~]# mount /dev/vg0/lv0 /nas/
[root@localhost ~]# vim /etc/exports
[root@localhost ~]# systemctl restart nfs
raid5+lvm---->mount point----->nfs---------------->mount使用
2)SAMBA
samba可以实现挂载
samba可以实现与windos共享
安装软件:
yum install samba
配置文件:
/etc/samba/smb.conf
启动服务:
systemctl restart smb
配置:
匿名模式: (share)
服务端:
vim /etc/samba/smb.conf
security = user Cenost6之前 security = share
CentOS7 匿名模式
mkdir /smb
security = user
map to guest = bad user
[test] #共享名
comment = test smb server #描述
path = /smb #访问路径
writable = yes #可写
browseable = yes #是否可见
public = yes #公共
guest ok = yes #来宾用户
启动服务systemctl restart smb
客户端:
[root@servera ~]# yum -y install samba-client
[root@servera ~]# yum -y install cifs-utils
smbclient -L //192.168.200.222 查看
smbclient //192.168.200.222/test 登录
测试:
挂载
[root@servera ~]# mount -t cifs //192.168.33.132/test /mnt
验证模式:(user)
服务端
mkdir /share
security = user
[share]
comment = test smb server
path = /share
writable = yes
valid users = robin @east #有效账号或组
[root@local smb]# useradd robin
[root@local smb]# smbpasswd -a robin
客户端
smbclient -L //192.168.200.222
[root@servera ~]# smbclient -U robin%1234 //192.168.33.132/share
[root@servera ~]# mount -t cifs -o username=robin,password=1234 //192.168.33.132/share /mnt/
写用户少
[share]
comment = test smb server
path = /share
write list = robin @upup
valid users = robin zorro @upup
读用户少
[share]
comment = test smb server
path = /share
writable = yes
valid users = robin zorro
read list = zorro
查询所有的smb帐号
pdbedit -L
删除samba帐号
smbpasswd -x zorro
作业:
1.3种方式挂载smb 匿名 和 user模式
2.NAS
3.
练习:
公司有以下需求:
boss king zorro jean
hr king jack rose
yw zorro tom jerry
kf jean robin ben
1.有一个boss的目录 boss可写 其他部门经理只读
2.各部门都一个目录(hr yw kf) 各部门经理可写, 其他人只读, boss也可以查看
3.还有一个目录,全公司员工都可以写,boss没有任何权限
[boss]
comment = boss use
path = /company/boss
write list = boss
valid users = boss king zorro jean
[hr]
comment = hr use
path = /company/hr
write list = king
valid users = king jack rose boss
[yw]
comment = yw use
path = /company/yw
valid users = zorro tom jerry boss
write list = zorro
[kf]
comment = kf use
path = /company/kf
valid users = jean robin ben boss
write list = jean
[pub]
comment = test smb server
path = /company/pub
writable = yes
valid users = @hr @yw @kf
练习:
使用samba完成NAS 并且实现3种自动挂载
验证
/etc/fstab
//192.168.33.132/share /mnt cifs defaults,username=robin,password=123 0 0
匿名
//192.168.33.132/share /mnt cifs defaults,username=nobady,password= 0 0
samba匿名自动挂载
[root@test ~]# cat /etc/samba/smbpass
username=root
password=
cat /etc/fstab
//192.168.1.1/smb /mnt cifs defaults,multiuser,credentials=/etc/samba/smbpass 0 0
3)VSFTPD
vsftpd:文件共享服务
vsftpd: 服务名称
ftp:协议名称
lftp:客户端
安装软件:
服务端
yum install vsftpd
客户端:
yum install lftp
端口:
port(主动)模式 21 20
pasv(被动)模式 21 随即端口
21 控制端口
20 或 随即 数据端口
配置文件: /etc/vsftpd/vsftpd.conf
数据保存位置:/var/ftp
启动服务: systemctl restart vsftpd
工作模式 :
port模式(主动)
C S
1024+m---------->21
1024+n----->
1024+n<----------20
pasv模式(被动)
C S
1024+m---------->21
1024+m<----- 1024+n
1024+x--------->1024+n
模式选择客户端决定
man 5 vsftpd.conf
配置:
匿名模式访问
anonymous_enable=YES
允许上传
anon_upload_enable=YES
anon_mkdir_write_enable=YES
允许删除
anon_other_write_enable=YES
上传文件允许下载
anon_umask=022
限速
anon_max_rate=20000
vsftpd更改数据目录位置:
anon_root=/home
客户端:
lftp 192.168.200.226
lftp 192.168.200.226:/> ls
lftp 192.168.200.226:/> get anaconda-ks.cfg 下载文件
lftp 192.168.200.226:/> mirror pub/ 下载目录
lftp 192.168.200.226:/> put /etc/passwd
lftp 192.168.200.226:/pub> mirror -R /tmp/
用户模式访问(基于系统帐号)
useradd robin
passwd robin
家目录权限修改为755
本地登陆
local_enable=YES
上传文件允许下载
local_umask=022
限速
local_max_rate=20000
限制用户切换目录(登陆目录不能有写权限)
#allow_writeable_chroot=YES 允许家目录权限700的情况下登录
chroot_local_user=YES 限制所有帐号不能切换目录
chroot_local_user=YES
chroot_list_enable=YES 开启名单功能(写入以下文件的用户可以切换)
chroot_list_file=/etc/vsftpd/chroot_list
chroot_local_user=NO(默认)
chroot_list_enable=YES 开启名单功能(写入以下文件的用户不可以切换)
chroot_list_file=/etc/vsftpd/chroot_list
/etc/vsftpd/ftpusers 写入用户名 禁止用户登陆ftp
黑白名单禁止用户登陆
userlist_enable=YES
userlist_deny=YES
/etc/vsftpd/user_list 黑名单
userlist_enable=YES
userlist_deny=NO
/etc/vsftpd/user_list 白名单
改变本地用户登陆位置
local_root=/nfs
客户端
lftp -u robin,123 192.168.200.226
======================================
虚拟帐号:
1.建立用户数据库文件
vim /etc/vsftpd/vftpuser.txt
test111
pass111
test222
pass222
2.安装数据库转换工具
yum install libdb-utils-5.3.21-19.el7.x86_64
db_load -T -t hash -f /etc/vsftpd/vftpuser.txt /etc/vsftpd/vsftpd_login.db
3.建立验证模式文件
# mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
# vi /etc/pam.d/vsftpd
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
4.建立一个所有虚拟用户使用的系统用户
# useradd -d /home/vsftp virtual
# chmod 755 /home/vsftp
5.修改配置文件启用虚拟用户
guest_enable=YES # 开启虚拟用户功能
guest_username=virtual # 指定虚拟用户使用的系统用户
pam_service_name=vsftpd # 以/etc/pam.d/验证模式文件名相同
客户端测试登陆
lftp -u test111,pass111 192.168.200.226
lftp -u test222,pass222 192.168.200.226
-----------
为虚拟用户设置不同权限
方法一.
虚拟用户使用与本地用户相同权限
virtual_use_local_privs=YES
虚拟用户使用与匿名用户相同权限
virtual_use_local_privs=NO
方法二.
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftp_user_conf
mkdir /etc/vsftpd/vsftp_user_conf
[root@client nfs]# cat /etc/vsftpd/vsftp_user_conf/test111
write_enable=NO
local_max_rate=20000
local_root=/nfs
[root@client nfs]# cat /etc/vsftpd/vsftp_user_conf/test222
local_max_rate=100000
local_root=/nfs
6.web服务器
HTTPD(apache web服务器)
安装包:httpd-2.4.6-45.el7.centos.4.x86_64.rpm
httpd-manual-2.4.6-45.el7.centos.4.noarch.rpm 文档
端口: 80 443
配置文件: /etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/
/etc/httpd/conf.modules.d
数据目录:/var/www/html
启动服务:systemctl restart httpd
日至存放目录:/var/log/httpd/
客户端访问
elinks 172.16.10.30
elinks --dump 172.16.10.30 显示在终端上
curl 10.10.3.76
netstat -anplt
netstat -anlpu
http: 超文本传输协议: hyper text tranfer protocol
html:超文本标记语言:hyper text markup langue
vim /var/www/html/index.html
<html>
<head>
<title>welcome !!!!</title>
</head>
<body>
<h1>狗</h1>
<img src='dog.jpg'>
<h2>风景</h2>
<img src='timg.jpg'>
</body>
</html>
apache 工作模式
prefork
worker
event
查看工作模式
httpd -V
1. prefork MPM
Apache在启动之初,就预先fork一些子进程,然后等待请求进来。之所以这样做,是为了减少频繁创建和销毁进程的开销。每个子进程只有一个线程,在一个时间点内,只能处理一个请求。
优点:成熟稳定,兼容所有新老模块。同时,不需要担心线程安全的问题。
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。
2.worker MPM
worker模式比起上一个,是使用了多进程和多线程的混合模式。它也预先fork了几个子进程(数量比较少),然后每个子进程创建一些线程,同时包括一个监听线程。每个请求过来,会被分配到1个线程来服务。线程比起进程会更轻量,因为线程通常会共享父进程的内存空间,因此,内存的占用会减少一些。在高并发的场景下,因为比起prefork有更多的可用线程,表现会更优秀一些
优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,某个线程会一直被占据,也许中间几乎没有请求,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用
3. event MPM
这个是Apache中最新的模式,在现在版本里的已经是稳定可用的模式。它和worker模式很像,最大的区别在于,它解决了keep-alive场景下,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,空挂在哪里等待,中间几乎没有请求过来,甚至等到超时)。event MPM中,会有一个专门的线程来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务线程,执行完毕后,又允许它释放。这样增强了高并发场景下的请求处理能力。
注意一点,event MPM需要Linux系统(Linux 2.6+)对EPoll的支持,才能启用
切换方式
vim /etc/httpd/conf.modules.d/00-mpm.conf
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so #进程模式
<IfModule mpm_prefork_module>
StartServers 10
MinSpareServers 10
MaxSpareServers 10
MaxRequestWorkers 250
MaxConnectionsPerChild 0
</IfModule>
#LoadModule mpm_worker_module modules/mod_mpm_worker.so #线程模式
<IfModule mpm_worker_module>
StartServers 10
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
#LoadModule mpm_event_module modules/mod_mpm_event.so #event模式
<IfModule mpm_event_module>
StartServers 15
MinSpareThreads 75
MaxSpareThreads 250
ThreadsPerChild 25
MaxRequestWorkers 400
MaxConnectionsPerChild 0
</IfModule>
保持连接(长连接)
KeepAlive On
KeepAliveTimeout 15
MaxKeepAliveRequests 100
修改http访问默认位置
mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
#DocumentRoot "/var/www/html"
DocumentRoot "/etc"
<Directory "/etc">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
其他方法
方法1:
cp -r /boot /var/www/html
方法2:
ln -s /boot/ /var/www/html
别名
alias /down /home
<directory /home>
options indexes #如果有index,优先显示,没有则显示目录
Require all granted
</directory>
alias /upup /var
<Directory "/var">
options indexes
require all granted
</Directory>
个人主页
vim /etc/httpd/conf.d/userdir.conf
<IfModule mod_userdir.c>
#UserDir disabled
UserDir public_html #开启个人主页
</IfModule>
useradd robin
useradd zorro
mkdir /home/robin/public_html
mkdir /home/zorro/public_html
echo "robin home" > /home/robin/public_html/index.html
echo "zorro home" > /home/zorro/public_html/index.html
chmod 705 /home/robin/
chmod 705 /home/zorro/
客户端测试
http://172.16.10.1/~zorro/
http://172.16.10.1/~robin/
访问控制
例1:允许所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require all granted
</Directory>
例2:拒绝所有访问请求
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require all denied
</Directory>
例3:只允许来自特定域名主机的访问请求,其他请求将被拒绝
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require host google.com
</Directory>
例4:只允许来自特定IP或IP段的访问请求,其他请求将被拒绝
Apache2.4下的配置:
<Directory xxx/www/yoursite>
Require ip 192.168.33
</Directory>
例5:允许所有访问请求,但拒绝来自特定IP或IP段的访问请求(阻止恶意IP或恶意爬虫网段的访问)
Apache2.4下的配置:
<Directory xxx/www/yoursite>
<RequireAll>
Require all granted
Require not ip 192.168.1.1
Require not ip 192.120 192.168.100
</RequireAll>
</Directory>
验证方式登录
alias /down /var/ftp
<directory /var/ftp>
options indexes
AuthType Basic #验证
AuthName "welcome" #提示语
AuthBasicProvider file #文件验证
AuthUserFile /etc/httpd/conf/passwd #验证的文件
Require user robin #允许的用户
</directory>
htpasswd -c -b /etc/httpd/conf/passwd robin 123 创建新帐号
htpasswd -b /etc/httpd/conf/passwd zorro 123 添加新帐号
全部有效帐号
alias /upup /var
<Directory "/var">
Options indexes FollowSymLinks
AuthType Basic
AuthName "welcome!!!!!"
AuthBasicProvider file
AuthUserFile /etc/httpd/conf/http_passwd
Require valid-user
</Directory>
发布cgi脚本
脚本发布目录:/var/www/cgi-bin
#!/bin/bash
echo -e "content-type: text/html\n"
date
echo "<br>"
uname -r
http://172.16.10.1/cgi-bin/cgi.sh
#!/bin/bash
echo -e "Content-type: text/html\n"
for i in {1..100}
do
sleep 1
echo $i
done
虚拟主机(基于域名 基于ip)
基于域名虚拟主机
[root@local ~]# vim /etc/httpd/conf.d/vhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.youku.com
DocumentRoot /srv/youku/
</VirtualHost>
<Directory "/srv/youku">
Require all granted
</Directory>
<VirtualHost *:80>
ServerName www.tudou.com
DocumentRoot /srv/tudou/
</VirtualHost>
<Directory "/srv/tudou">
Require all granted
</Directory>
[root@local ~]# mkdir /srv/youku
[root@local ~]# mkdir /srv/tudou
[root@local ~]# echo "youku" > /srv/youku/index.html
[root@local ~]# echo "tudou" > /srv/tudou/index.html
[root@local ~]# systemctl restart httpd
客户端
vim /etc/hosts
172.16.10.1 www.youku.com
172.16.10.1 www.tudou.com
linux中
http://www.tudou.com
http://www.youku.com
[root@local ~]# curl www.youku.com
[root@local ~]# curl www.tudou.com
elinks --dump
Windows里修改hosts文件
基于ip虚拟主机
ifconfig eno16777736:0 10.10.10.5/24
<VirtualHost 192.168.0.5:80>
ServerName www.youku.com
DocumentRoot /srv/youku/
</VirtualHost>
<Directory "/srv/youku">
Require all granted
</Directory>
<VirtualHost 10.10.10.5:80>
ServerName www.tudou.com
DocumentRoot /srv/tudou/
</VirtualHost>
<Directory "/srv/tudou">
Require all granted
</Directory>
客户端
vim /etc/hosts
192.168.0.5 www.youku.com
10.10.10.5 www.tudou.com
练习
做虚拟主机
www.gogle.com 需要用户king 密码123 才能登陆访问
www.baidu.com 只有你的宿主机才能访问
[root@local ~]# mkdir /srv/gogle
[root@local ~]# mkdir /srv/baidu
[root@local ~]# echo "gogle" > /srv/gogle/index.html
[root@local ~]# echo "baidu" > /srv/baidu/index.html
[root@local ~]# vim /etc/httpd/conf.d/vhost.conf
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.gogle.com
DocumentRoot /srv/gogle/
</VirtualHost>
<Directory "/srv/gogle">
options indexes
AuthType Basic
AuthName "welcome"
AuthBasicProvider file
AuthUserFile /etc/httpd/conf/passwd
Require user king
</Directory>
<VirtualHost *:80>
ServerName www.baidu.com
DocumentRoot /srv/baidu/
</VirtualHost>
<Directory "/srv/baidu">
options indexes
Require ip 192.168.33.138
</Directory>
[root@local ~]# htpasswd -b /etc/httpd/conf/passwd king 123
[root@local ~]# vim /etc/hosts
7.DNS
1)DNS域名解析服务器
DNS:domain name server 域名解析服务器
安装与配置
安装软件:bind-9.9.4-29.el7.x86_64.rpm
端口:53
配置文件:
/etc/named.conf
/etc/named.rfc1912.zones
/var/named/
启动服务:systemctl restart named
正向解析
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "east.com" IN {
type master;
file "east.com.zone";
};
3.touch /var/named/east.com.zone
chmod 640 /var/named/east.com.zone
chown .named /var/named/east.com.zone
[root@local named]# vim east.com.zone
$TTL 1D
@ IN SOA dns.east.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.east.com.
dns IN A 192.168.33.132
www IN A 192.168.33.132
aaa IN A 192.168.33.137
客户端测试:
[root@local ~]# vim /etc/resolv.conf #指定动态ip的dns
[root@client ~]# host www.douniwan.com
www.douniwan.com has address 192.168.200.226
[root@client ~]# nslookup www.douniwan.com
Server: 192.168.200.222
Address: 192.168.200.222#53
Name: www.douniwan.com
Address: 192.168.200.226
[root@client ~]# dig www.douniwan.com
反向解析:
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "200.192.168.in-addr.arpa " IN {
type master;
file "192.168.200.arpa";
};
3.
touch /var/named/192.168.200.arpa
chmod 640 /var/named/192.168.200.arpa
chown .named /var/named/192.168.200.arpa
vim /var/named/192.168.200.arpa
$TTL 1D
@ IN SOA dns.king.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns.king.com.
dns IN A 192.168.200.222
226 IN PTR test.king.com.
各种写法
$TTL 1D
@ IN SOA dns.douniwan.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.douniwan.com.
dns IN A 192.168.200.222
ww IN CNAME www
wwww IN CNAME www
www IN A 192.168.200.226
@ IN A 192.168.200.226
ftp.douniwan.com. IN CNAME www.douniwan.com.
* IN A 192.168.200.226 #泛解析
IN MX 5 mail.douniwan.com.
mail IN A 192.168.200.226
$GENERATE 1-254 stu$ IN A 192.168.1.$ #连续解析
转发服务器
vim /etc/named.conf
options {
listen-on port 53 { any; };
allow-query { any; };
forward first; #先从DNS服务器里找,再从根域找
forwarders { 192.168.200.222; };
forward only; #只从DNS服务器里面找
forwarders { 192.168.200.222; };
DNS主从服务器(时间必须同步):
主服务器配置
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "east.com" IN {
type master; #主服务器
file "east.com.zone";
allow-transfer { 192.168.33.137; }; #允许传输数据
};
3.
vim /var/named/east.com.zone
$TTL 1D
@ IN SOA dns1.east.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns1.east.com.
IN NS dns2.east.com.
dns1 IN A 192.168.33.132
dns2 IN A 192.168.33.137
www IN A 192.168.33.137
chown .named /var/named/east.com.zone
chmod 640 /var/named/east.com.zone
从服务器
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.
[root@servera named]# vim /etc/named.rfc1912.zones
zone "east.com" IN {
type slave; #从服务器
file "slaves/east.com.zone";
masters { 192.168.33.132; };
};
同步数据
$TTL 1D
@ IN SOA dns1.east.com. root. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS dns1.east.com.
IN NS dns2.east.com.
dns1 IN A 192.168.33.132
dns2 IN A 192.168.33.137
www IN A 192.168.33.137
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave
TSIG方式传输
主
key robinkey {
algorithm hmac-md5;
secret "YBMMsomw64S8BmK6/JbVaA==";
};
zone "upup.com" IN {
type master;
file "upup.com.zone";
allow-transfer { key robinkey; };
};
从
key robinkey {
algorithm hmac-md5;
secret "YBMMsomw64S8BmK6/JbVaA==";
};
zone "upup.com" IN {
type slave;
file "slaves/upup.com.zone";
masters { 192.168.200.222 key robinkey; };
};
子域授权
父域
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "robin.com" IN {
type master;
file "robin.com.zone";
};
3.
vim /var/named/robin.com.zone
$TTL 1D
@ IN SOA dns.robin.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.robin.com.
dns IN A 192.168.200.222
music.robin.com. IN NS dns.music.robin.com.
dns.music.robin.com. IN A 192.168.200.226
www IN A 192.168.200.226
@ IN A 192.168.200.226
chmod 640 /var/named/robin.com.zone
chown .named /var/named/robin.com.zone
子域
1.vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
2.vim /etc/named.rfc1912.zones
zone "music.robin.com" IN {
type master;
file "music.robin.com.zone";
};
3.
chmod 640 /var/named/music.robin.com.zone
chown .named /var/named/music.robin.com.zone
vim /var/named/music.robin.com.zone
$TTL 1D
@ IN SOA dns.music.robin.com. root. ( 0 1D 1H 1W 3H )
IN NS dns.music.robin.com.
dns IN A 192.168.200.222
www IN A 192.168.200.226
@ IN A 192.168.200.226
2)练习
一个Apache服务器, www.hello.com www.world.com
一个nas 挂载到Apache上
一个DNS服务器
用window进行测试
8.NTP时间服务器
同步时间
从bios设置系统时间
hwclock -s
从系统时间设置bios
hwclock -w
NTP服务器的概念:
网络时间协议(英语:Network Time Protocol,NTP)是以分组交换把两台电脑的时钟同步化的网络传输协议。NTP使用UDP端口123作为传输层。它是用作抵销可变延迟的影响。
NTP是仍在使用中的最古老的网络传输协议之一(在1985年前开始)。NTP最初由特拉华大学的Dave Mills 设计,他与一群志愿者仍在维护NTP。
NTP 网络时间协议用来同步网络上不同主机的系统时间。你管理的所有主机都可以和一个指定的被称为 NTP 服务器的时间服务器同步它们的时间。而另一方面,一个 NTP 服务器会将它的时间和任意公共 NTP 服务器,或者你选定的服务器同步。由 NTP 管理的所有系统时钟都会同步精确到毫秒级。
在公司环境中,如果他们不想为 NTP 传输打开防火墙,就有必要设置一个内部 NTP 服务器,然后让员工使用内部服务器而不是公共 NTP 服务器。
1.安装时间服务器
yum install ntp ntpdate -y
2.查找时间同步服务器
http://www.pool.ntp.org/zone/asia
3.配置时间服务器
vim /etc/ntp.conf
server 0.asia.pool.ntp.org
server 1.asia.pool.ntp.org
server 2.asia.pool.ntp.org
server 3.asia.pool.ntp.org
server 127.127.1.0 iburst
restrict 192.168.33.0 mask 255.255.255.0
4.启动服务器并测试
systemc start ntpd
ntpd -p
date -R
客户端测试
ntpdate 192.168.33.132
计划任务保证时间同步
timedatectl
查看系统时钟与时区
使用timedatectl
使用列出可用的时区
timedatectl list-timezones
设定系统时钟与时区
timedatectl set-timezone
timezonetimedatectl set-time hour:min:sec
设定是否启用网络时间同步
timedatectl set-ntp true|false
chrony
RHEL8使用chrony同步时间,
不再使用ntp服务
chronyd服务通过与配置的NTP服务器同步配置方式
修改配置文件:/etc/chrony.conf
图形界面: system-config-date
配置文件/etc/chrony.conf server 指定网络时钟服务器,类似ntp
查看当前网络时钟服务器信息chronyc sources -v
server(链接互联网时间服务器)
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
allow 192.168.33.0/24
client(设置10.10.11.251为时间服务器)
[root@servera ~]# vim /etc/chrony.conf
server 10.10.11.251 iburst
[root@servera ~]# systemctl restart chronyd
[root@servera ~]# chronyc sources -v
[root@servera ~]# timedatectl
9.XINETD
xinetd 超级代理服务
安装xinetd服务
yum install xinetd
安装telnet服务
yum install telnet-server 服务端
yum install telnet 客户端
端口:23
启动服务
systemctl start telnet.socket
systemctl enable telnet.socket
systemctl start xinetd
systemctl enable xinetd
客户端:
telnet 172.16.90.245
注意,不能使用root帐号直接登陆
tftp服务
安装软件:
yum install tftp-server
yum install tftp
配置文件:
/etc/xinetd.d/tftp
端口:69
数据目录:
/var/lib/tftpboot/
配置
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
客户端:
[root@localhost ~]# tftp 172.16.90.245
tftp> get hosts
10.MAIL
邮件服务器:
MUA:邮件用户代理 foxmail outlook
MTA:邮件传输代理 sendmail postfix
MDA:邮件投递代理
SMTP:简单邮件传输协议
postfix
安装:
yum install postfix
配置文件:
/etc/postfix/main.cf
端口:25
启动服务:systemctl restart postfix
日志:/var/log/maillog
邮件保存位置:/var/spool/mail/
配置:
hostnamectl set-hostname mail.robin.com
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.90.245 mail.robin.com
配置发送
vim /etc/postfix/main.cf
myhostname = mail.robin.com
mydomain = robin.com
inet_interfaces = all
#inet_interfaces = localhost
systemctl restart postfix
测试:
[root@localhost ~]# telnet mail.robin.com 25 连接25端口
Trying 172.16.90.245...
Connected to mail.robin.com.
Escape character is '^]'.
220 mail.robin.com ESMTP Postfix
ehlo mail.robin.com ------------------------------------------- 和服务器测试连接
250-mail.robin.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
mail from:robin@mail.robin.com ----------------------------------- 发件人
250 2.1.0 Ok
rcpt to:zorro@mail.robin.com ---------------------------------------- 收件人
250 2.1.5 Ok
data --------------------------------------------------------------------------内容
354 End data with <CR><LF>.<CR><LF>
hello i am robin!!!!!!
. ---------------------------------------------------------------------------------------结束
250 2.0.0 Ok: queued as EFB753165BF3
quit -------------------------------------------------------------------------- 退出
221 2.0.0 Bye
非交互式
echo 123456 | mail -s test zorro@mail.robin.com
接受邮件:
安装软件:
yum install dovecot
配置文件:
/etc/dovecot/dovecot.conf
/etc/dovecot/conf.d/
端口:pop3:110 imap:143
启动服务:systemctl restart dovecot
配置:
vim /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
vim /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mkdir -p /home/zorro/mail/.imap/INBOX
chown -R zorro.zorro /home/zorro/
测试接受邮件:
[root@localhost ~]# telnet mail.robin.com 110 连接 110
Trying 172.16.90.245...
Connected to mail.robin.com.
Escape character is '^]'.
+OK Dovecot ready.
user zorro -------------------------------------------------- 用户
+OK
pass 123 -------------------------------------------------- 密码
+OK Logged in.
list -------------------------------------------------------- 列出
+OK 2 messages:
1 456
2 538
.
retr 1 ----------------------------------------------------- 查看
+OK 456 octets
Return-Path: <robin@mail.robin.com>
X-Original-To: zorro@mail.robin.com
Delivered-To: zorro@mail.robin.com
Received: from mail.robin.com (mail.robin.com [172.16.90.245])
by mail.robin.com (Postfix) with ESMTP id EFB753165BF3
for <zorro@mail.robin.com>; Thu, 22 Jun 2017 10:58:31 +0800 (CST)
Message-Id: <20170622025842.EFB753165BF3@mail.robin.com>
Date: Thu, 22 Jun 2017 10:58:31 +0800 (CST)
From: robin@mail.robin.com
hello i am robin!!!!!!
.