总结linux安全模型

1.总结linux安全模型
①用户登录系统时必须提供用户名和密码。
②使用用户和用户组来控制使用者访问文件和其他资源的权限。
③系统上的每一个文件都一定属于一个用户(一般该用户就是文件的创建者)并与一个用户组相关。
④每一个进程(处理程序)也都会属于一个用户和用户组相关联。可以通过在所有的文件和资源上设定权限来只允许该文件的所有者或者某个用户组的成员访问它们。
资源分派:
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计
当用户登录成功时,系统会自动分配令牌 token,包括:用户标识和组成员等信息。
2.总结学过的权限,属性及ACL相关命令及选项,示例。
Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Linux系统对不同用户访问同一文件的权限做了不同的规定。
对于一个 Linux 系统中的文件来说,它的权限一般可以分为三种:读的权限、写的权限和执行的权限,分别用 r、w 和 x 表示。不同的用户具有不同的读、写和执行的权限。
对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Linux 系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。
Linux中的文件能否被访问和工具(程序)无关,和访问的用户身份有关(谁去运行这个程序)
进程的发起者(谁去运行这个程序)。
进程的发起者若是文件的所有者: 拥有文件的属主权限
进程的发起者若属于文件属组:拥有文件的属组权限
应用文件“其它”权限
0
 
设置文件的所有者chown
修改文件的属主,也可以修改文件属组
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
OWNER
#只修改所有者
OWNER:GROUP #同时修改所有者和属组
:GROUP
#只修改属组,冒号也可用 . 替换
--reference=RFILE
#参考指定的的属性,来修改
-R #递归,此选项慎用,非常危险!
设置文件的属组信息chgrp
只修改文件的属组
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
-R 递归
文件的权限主要针对三类对象进行定义
owner 属主, u
group 属组, g
other 其他, o
用户的最终权限,是从左向右进行顺序匹配,即,所有者,所属组,其他人,一旦匹配权限立即生效,不再向
右查看其权限
r和w权限对root 用户无效
只要所有者,所属组或other三者之一有x权限,root就可以执行
三种权限
r Readable 4
w Writable 2
x eXcutable 1
针对文件:
r 可使用文件查看类工具,比如:cat,可以获取其内容
w 可修改其内容,文件的是否被删除和文件的权限无关
x 可以把此文件提请内核启动为一个进程,即可以执行(运行)此文件(此文件的内容必须是可执行)
文件权限常见组合
--- 0
r 4
r-x 5
rw 6
rwx 7
 
针对目录:
r 可以使用ls查看此目录中文件名列表,但无法看到文件的属性meta信息,包括inode号,不能查看文件的内容
w 可在此目录中创建文件,也可删除此目录中的文件,而和此被删除的文件的权限无关
x 可以cd进入此目录,可以使用ls -l file或stat file 查看此目录中指定文件的元数据,当预先知道文件名称时,也可以查看文件的内容,属于目录的可访问的最小权限
X 分配给目录或有部分x权限的文件的x权限,对无任意x权限的文件则不会分配x权限
目录权限常见组合
- 不能访问目录
r-x 只读目录
rwx 可读也可写目录
数学法的权限
 
八进制数字
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
例如:
rw-r----- 640
rwxr-xr-x 755
修改文件权限chmod
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
#参考RFILE文件的权限,将FILE的修改为同RFILE
chmod [OPTION]... --reference=RFILE FILE...
MODE:who opt permission
who:u,g,o,a
opt:+,-,=
permission:r,w,x
修改指定一类用户的所有权限
u=
g= o= ug=
a= u=,g=
修改指定一类用户某个或某个权限
u+ u- g+ g- o+ o- a+ a- + -
-R: 递归修改权限
新建文件和目录的默认权限
umask 的值可以用来保留在创建文件权限
实现方式:
新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
新建目录的默认权限: 777-umask
非特权用户umask默认是 002
root的umask 默认是 022
查看umask
umask
#模式方式显示
umask –S
#输出可被调用
umask –p
修改umask
umask #
范例:
持久保存umask
umask 002
umask u=rw,g=r,o=
全局设置: /etc/bashrc
用户设置:~/.bashrc
Linux文件系统上的特殊权限
SUID
作用于二进制可执行文件上,用户将继承此程序所有者的权限
前提:进程有属主和属组;文件有属主和属组
任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
进程访问文件时的权限,取决于进程的发起者
二进制的可执行文件上SUID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属主为原程序文件的属主
SUID只对二进制可执行程序有效
SUID设置在目录上无意义
chmod u+s FILE...
chmod 4xxx FILE
chmod u-s FILE...
SGID
作用于二进制可执行文件上,用户将继承此程序所有组的权限
作于于目录上, 此目录中新建的文件的所属组将自动从此目录继承
二进制的可执行文件上SGID权限功能:
任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
启动为进程之后,其进程的属组为原程序文件的属组
chmod g+s FILE...
chmod 2xxx FILE
chmod g-s FILE...
目录上的SGID权限功能:
默认情况下,用户创建文件时,其属组为此用户所属的主组,一旦某目录被设定了SGID,则对此目录有
写权限的用户在此目录中创建的文件所属的组为此目录的属组,通常用于创建一个协作目录
chmod g+s DIR...
chmod 2xxx DIR
chmod g-s DIR...
STICKY
作用于目录上,此目录中的文件只能由所有者自已来删除
具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
sticky 设置在文件上无意义
chmod o+t DIR...
chmod 1xxx DIR
chmod o-t DIR...
特殊权限数字法
SUID SGID STICKY
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
例如:chmod 4777 /tmp/a.txt
权限位映射
SUID: user,占据属主的执行权限位
s:属主拥有x权限
S:属主没有x权限
SGID: group,占据属组的执行权限位
s: group拥有x权限
S:group没有x权限
Sticky: other,占据other的执行权限位
t:other拥有x权限
T:other没有x权限
设定文件特殊属性
设置文件的特殊属性,可以访问 root 用户误操作删除或修改文件
 
不能删除,改名,更改
chattr +i file
只能追加内容,不能删除,改名
chattr +a file
显示特定属性
lsattr
例如:/etc/passwd文件处于被锁状态
访问控制列表 ACL
访问控制列表 ACL
ACL
Access Control List,实现灵活的权限管理
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
tune2fs –o acl /dev/sdb1
mount –o acl /dev/sdb1 /mnt/test
ACL生效顺序
所有者,自定义用户,所属组|自定义组,其他人
setfacl
可设置ACL权限
#setfacl -m u:zxc:- a.txt
getfacl
可查看设置的ACL权限
#getfacl a.txt
mask 权限
mask只影响除所有者和other的之外的人和组的最大权限
mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
用户或组的设置必须存在于mask权限设定范围内才会生效
 
setfacl -m mask::rx file
#setfacl -m mask::rw f1.txt
#setfacl -m u:wang:rwx f1.txt
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含UGO的设置,不能象-m一样
只是添加ACL就可以
setfacl --set u::rw,u:wang:rw,g::r,o::- file1
3.结合vim几种模式,学会使用vim几个常见操作。
1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
如何打开文件:
vim [OPTION]... FILE...
+# 打开文件后,让光标处于第#行的行首,+默认行尾
+/PATTERN 让光标处于第一个被PATTERN匹配到的行行首
-b file 二进制方式打开文件
-d file1 file2… 比较多个文件,相当于 vimdiff
-m file   只读打开文件
-e file   直接进入ex模式,相当于执行ex file
-y file   Easy mode (like "evim", modeless),直接可以操作文件,ctrl+o:wq|q! 保存和不保存退出
在打开文件(命令模式)之后如何退出文件
先输入冒号 :
q 退出
q! 强制退出
wq 保存退出
wq! 强制保存退出
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
打开文件---》命令模式-----i------》插入模式
插入模式------Esc----------》命令模式
命令模式退出文件
先输入冒号 :
q 退出
q! 强制退出
wq 保存退出
wq! 强制保存退出
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
[16:44:55 root@ubuntu2004 data]#vim N74027.txt
i
马哥出品,必属精品
Esc
:
wq
4)使用cat命令验证文件内容,是刚刚自己写的内容。
0
5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
字符间跳转:
h: 左
L: 右
j: 下
k: 上
#COMMAND:跳转由#指定的个数的字符
单词间跳转:
w:下一个单词的词首
e:当前或下一单词的词尾
b:当前或前一个单词的词首
#COMMAND:由#指定一次跳转的单词数
行间移动:
#G 或者扩展命令模式下
:#   跳转至由第#行
G 最后一行
1G, gg 第一行
d 删除命令,可结合光标跳转字符,实现范围删除
d$ 删除到行尾
d^ 删除到非空行首
d0 删除到行首
dw
de
db
#COMMAND
dd:   剪切光标所在的行
#dd 多行删除
D:从当前光标位置一直删除到行尾,等同于d$
y 复制,行为相似于d命令
y$
y0
y^
ye
yw
yb
#COMMAND
yy:复制行
#yy 复制多行
Y:复制整行
0
4.总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
 
文件内容查看
cat
 
查看文本内容
cat
[OPTION]…
[FILE]…
 
-E:显示行结束符$
 
-A:显示所有控制符
 
-n:对显示出的每一行进行编号
 
-b:非空行编号
 
-s:压缩连续的空行成一行
[08:55:46 root@rocky data]#cat -E j.log
 
123$
 
$
 
111$
 
nl
 
显示行号,相当于cat -b
-b a 无论是否是空行都列出行号
 
-b t 空行不列出行号(默认)
 
-n ln 行号在显示栏的最左边显示且空行不列出行号
 
-n rn 行号在显示栏的最右边显示,且空行不列出行号,不填充0
 
-n rz 行号在显示栏的最右边显示,且加0
每一行编号
 
#nl -b a 1.txt
 
#cat -n 1.txt
 
非空行编号
 
#nl -b t 1.txt
 
#cat -b 1.txt
tac
 
逆向显示文本内容
-s:使用指定字符串代替换行作为分隔标志
 
tac 1.txt 2.txt > tac.txt 文件合并
[09:22:35 root@rocky data]#echo "1,2" | tac -s ,
 
2
 
1,
 
[09:26:44 root@rocky data]#seq 3
 
1
 
2
 
3
 
[09:26:47 root@rocky data]#seq 3 | tac
 
3
 
2
 
1
rev
 
将同一行的内容逆向显示
反转“hello world”
 
#echo "hello world" | rev
 
反转日志文件中的后三行文本
 
#tail -n3 log.txt | rev
[09:32:47 root@rocky data]#rev
 
abcde
 
edcba
 
[09:32:55 root@rocky data]#echo {1..10} | rev
 
01 9 8 7 6 5 4 3 2 1
hexdump
 
以 ASCII、十进制、十六进制或八进制显示文件内容
hexdump[options]FILE[...]
 
-b 单字节八进制显示。
 
-c 单字节字符显示。
 
-C 规范化“十六进制+ASCII”显示。
 
-d 两字节十进制显示。
 
-e <format_string> 以指定的格式字符串显示数据。
 
-f <format_file> 指定包含一个或多个换行分隔格式字符串的文件。内容使用#号开头表示注释。
 
-n 只解释输入的指定长度个字节。
 
-o 两字节八进制显示。
 
-s 跳过开头指定长度个字节。
 
-v 显示时不压缩相似的行。-v选项使hextump显示所有输入数据。没有-v选项,任何数量的输出行组,如果与前一组相同,将被替换为由一个星号构成的行。
 
-x 两字节十六进制显示。
查看头文件
 
hexdump -C -n 512 /dev/sda
more
 
可以实现分页查看文件,可以配合管道实现输出信息的分页
more [OPTIONS...] FILE...
 
-d: 显示翻页及退出提示
[10:14:14 root@rocky ~]#more /var/log/messages
less
 
实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器
查看时有用的命令包括:
 
/文本 搜索 文本
 
n/N 跳到下一个 或 上一个匹配
#less 配合管道对其它命令的执行结果进行分页显示
 
[root@centos8 ~]#tree -d /etc |less
 
/etc
 
├── alternatives
head
 
可以显示文件或标准输入的前面行
head [OPTION]... [FILE]...
 
-c # 指定获取前#字节
 
-n # 指定获取前#行,#如果为负数,表示从文件头取到倒数第#前
 
-# 同上
[root@centos8 ~]#cat /dev/urandom | tr -dc '[:alnum:]'| head -c10 |
 
tee pass.txt | passwd --stdin mage
tail
 
查看文件或标准输入的倒数行
 
tail 和head 相反
tail [OPTION]... [FILE]...
 
-c # 指定获取后#字节
 
-n # 指定获取后#行,如果#是负数,表示从第#行开始到文件结束
 
-# 同上
 
-f 跟踪显示文件fd新追加的内容,常用日志监控,相当于 --follow=descriptor,当文件删除再新
 
建同名文件,将无法继续跟踪文件
 
-F 跟踪文件名,相当于--follow=name --retry,当文件删除再新建同名文件,将可以继续跟踪文
 
 
tailf 类似 tail –f,当文件不增长时并不访问文件,节约资源,CentOS8已经无此工具
#只查看最新发生的日志
 
[root@centos8 ~]#tail -fn0 /var/log/messages
 
[root@centos8 ~]#tail -0f /var/log/messages
 
#取IP行
 
[root@centos8 data]#ifconfig | head -2 | tail -1
look
 
显示文件中以特定字符串开始的行
look [选项]  string files
 
-d 只对比数字和英文字母,其他忽略
 
-f 忽略字符的大小写
 
-a 使用字典文件/usr/dict/web2
 
-t 指定字符串结束符
在look执行二进制搜索时,必须对文件中的行进行排序。如果未指定文件,则使用文件“/usr/share/dict/words“,只比较字母数字字符,忽略字母字符的大小写。
 
#look hello z.c
 
hello world,
文本处理工具
cut
 
提取文本文件或STDIN数据的指定列
cut [OPTION]... [FILE]...
 
-d DELIMITER: 指明分隔符,默认tab
 
-f FILEDS:
 
    #: 第#个字段,例如:3
 
    #,#[,#]:离散的多个字段,例如:1,3,6
 
    #-#:连续的多个字段, 例如:1-6
 
    混合使用:1-3,7
 
-c 按字符切割
 
--output-delimiter=STRING指定输出分隔符
#cut -d: -f1,3-4,7 /etc/passwd
 
#ifconfig |head -n2 |tail -n1|tr -s " " |cut -d " " -f3
 
#cut -d: -f1,3,7 --output-delimiter="---" /etc/passwd
 
#echo {1..10}| cut -d ' ' -f1-10 --output-delimiter="+" |bc
 
#df | tail -n +2|tr -s ' ' |cut -d' ' -f5 |tr -d %
paste
 
合并多个文件同行号的列到一行
paste [OPTION]... [FILE]...
 
-d  #分隔符:指定分隔符,默认用TAB
 
-s  #所有行合成一行显示
#paste -d":" alpha.log seq.log
 
#paste -s seq.log
 
#paste -s -d: f1.log f2.log
 
[root@centos8 ~]#seq 10 |paste -s -d+|bc
 
55
 
批量修改密码
 
[root@centos8 ~]#paste -d: user.txt pass.txt|chpasswd
文本分析工具
wc
 
统计文件的行总数、单词总数、字节总数和字符总数
 
可以对文件或STDIN中的数据统计
-l 只计数行数
 
-w 只计数单词总数
 
-c 只计数字节总数
 
-m 只计数字符总数
 
-L 显示文件中最长行的长度
#wc story.txt
 
39     237    1901 story.txt
 
行数   单词数   字节数
 
#df | tail -n $(echo `df | wc -l`-1|bc)
sort
 
文本排序
 
把整理过的文本显示在STDOUT,不改变原始文件
sort [options] file(s)
 
-r 执行反方向(由上至下)整理
 
-R 随机排序
 
-n 执行按数字大小整理
 
-h 人类可读排序,如: 2K 1G
 
-f 选项忽略(fold)字符串中的字符大小写
 
-u 选项(独特,unique),合并重复项,即去重
 
-t c 选项使用c做为字段界定符
 
-k # 选项按照使用c字符分隔的 # 列来整理能够使用多次
#统计日志访问量
 
#cut -d" " -f1 /var/log/nginx/access_log |sort -u|wc -l
 
#查看分区利用率最高值
 
#df | tr -s " " %|cut -d% -f5|tr -d '[:alpha:]' | sort -nr|head -n1
uniq
 
从输入中删除前后相接的重复的行
uniq [OPTION]... [FILE]...
 
-c: 显示每行重复出现的次数
 
-d: 仅显示重复过的行
 
-u: 仅显示不曾重复的行
 
uniq常和sort 命令一起配合使用:
 
sort userlist.txt | uniq -c
统计日志访问量最多的请求
 
#lastb -f btmp-34 | tr -s ' ' |cut -d ' ' -f3|sort |uniq -c |sort -nr | head -3
 
并发连接最多的远程主机IP
 
#ss -nt|tail -n+2 |tr -s ' ' : |cut -d: -f6|sort|uniq -c|sort -nr |head -n2
 
#取文件的共同行
 
#cat test1.txt test2.txt | sort |uniq -d
 
#取文件的不同行
 
#cat test1.txt test2.txt | sort |uniq -u
diff
 
比较两个文件之间的区别
-u 选项来输出“统一的(unified)”diff格式文件,最适用于补丁文件
#diff -u f1.txt f2.txt
 
#diff -u f1.txt f2.txt > f.patch
path
 
复制在其它文件中进行的改变(要谨慎使用)
-b 选项来自动备份改变了的文件
diff -u foo.conf foo2.conf > foo.patch
 
patch -b foo.conf foo.patch
vimdiff
 
相当于 vim -d
#vimdiff f1.txt f2.txt
:qa
退出所有窗口
 
Vim中切换窗口(在文件之间切换)
 
切换窗口:Ctrl + w + (h/j/k/l) 。
 
即h左、j下、k上、l右,表示窗口切换的方向。
cmp
 
查看二进制文件的不同
#cmp /bin/dir /bin/ls
#cmp /bin/dir /bin/ls
 
#跳过前735个字节,观察后面30个字节
 
[root@centos8 ~]#hexdump -s 735 -Cn 30 /bin/ls
 
[root@centos8 ~]#hexdump -s 735 -Cn 30 /bin/dir
文件查找工具
locate
 
在文件系统上查找符合条件的文件
 
非实时查找(数据库查找)
locate [OPTION]... [PATTERN]...
 
-i 不区分大小写的搜索
 
-n N 只列举前N个匹配项目
 
-r 使用基本正则表达式
 
查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db
 
执行updatedb可以更新数据库
 
locate和updatedb命令来自于mlocate包
#搜索名称或路径中包含“conf"的文件
 
locate conf
 
#使用Regex来搜索以“.conf"结尾的文件
 
locate -r '\.conf$'
 
文件新创建和删除,无法马上更新locate数据库
find
 
在文件系统上查找符合条件的文件
 
实时查找
 
通过遍历指定路径完成文件查找
find [OPTION]... [查找路径] [查找条件] [处理动作]
 
指定搜索目录层级:
 
-maxdepth level 最大搜索目录深度,指定目录下的文件为第1级
 
-mindepth level 最小搜索目录深度
 
对每个目录先处理目录内的文件,再处理目录本身:
 
-depth  
 
-d
 
根据文件名和inode查找:
 
-name "文件名称" #支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
 
-iname "文件名称"  #不区分字母大小写
 
-inum n #按inode号查找
 
-samefile name #相同inode号的文件
 
-links n   #链接数为n的文件
 
-regex “PATTERN"   #以PATTERN匹配整个文件路径,而非文件名称
 
根据属主、属组查找:
 
-user USERNAME #查找属主为指定用户(UID)的文件
 
-group GRPNAME #查找属组为指定组(GID)的文件
 
-uid UserID #查找属主为指定的UID号的文件
 
-gid GroupID #查找属组为指定的GID号的文件
 
-nouser #查找没有属主的文件
 
-nogroup #查找没有属组的文件
根据文件类型查找:
 
-type TYPE
 
TYPE可以是以下形式:
 
f: 普通文件
 
d: 目录文件
 
l: 符号链接文件
 
s:套接字文件
 
b: 块设备文件
 
c: 字符设备文件
 
p: 管道文件
 
空文件或目录:
 
-empty
 
组合条件:
 
与:-a ,默认多个条件是与关系,所以可以省略-a
 
或:-o
 
非:-not !
 
排除目录:
 
#查找/etc/下,除/etc/security目录的其它所有.conf后缀的文件
 
find /etc -path '/etc/security' -a -prune -o -name "*.conf"
 
根据文件大小来查找:
 
-size [+|-]#UNIT #常用单位:k, M, G,c(byte),注意大小写敏感
 
#UNIT: #表示(#-1, #],如:6k 表示(5k,6k]
 
-#UNIT #表示[0,#-1],如:-6k 表示[0,5k]
 
+#UNIT #表示(#,∞),如:+6k 表示(6k,∞)
find
根据时间戳:
 
#以“天"为单位
 
-atime [+|-]#
 
# #表示[#,#+1)
 
+# #表示[#+1,∞]
 
-# #表示[0,#)
 
-mtime
 
-ctime
 
#以“分钟"为单位
 
-amin
 
-mmin
 
-cmin
 
根据权限查找:
 
-perm [/|-]MODE
 
MODE  #精确权限匹配
 
/MODE #任何一类(u,g,o)对象的权限中只要有一位匹配即可,或关系,+ 从CentOS 7开始淘汰
 
-MODE #每一类对象都必须同时拥有指定权限,与关系
 
0 表示不关注
 
正则表达式:
 
-regextype type
 
-regex pattern
处理动作:
 
-print:默认的处理动作,显示至屏幕
 
-ls:类似于对查找到的文件执行"ls -dils"命令格式输出
 
-fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
 
-delete:删除查找到的文件,慎用!
 
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会
 
交互式要求用户确认
 
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
 
{}: 用于引用查找到的文件名称自身
例子:
find /etc  -maxdepth 2 -mindepth 2
 
#find -regex ".*\.txt$"
 
#查看/home的目录
 
find /home –type d -ls
 
#find /app -type d -empty
 
!A -a !B = !(A -o B)
 
!A -o !B = !(A -a B)
 
#找出/tmp目录下,属主不是root,且文件名不以f开头的文件
 
find /tmp \( -not -user root -a -not -name 'f*' \) -ls
 
find /tmp -not \( -user root -o -name 'f*' \) –ls
 
#排除/proc和/sys目录
 
find / \( -path "/sys" -o -path "/proc" \) -a -prune -o -type f -a -mmin -1
find -perm 755 会匹配权限模式恰好是755的文件
 
只要当任意人有写权限时,find -perm /222就会匹配
 
只有当每个人都有写权限时,find -perm -222才会匹配
 
只有当其它人(other)有写权限时,find -perm -002才会匹配
 
find /you/find/dir -regextype posix-extended -regex "regex"
 
#备份配置文件,添加.orig这个扩展名
 
find  -name  ".conf"  -exec  cp {} {}.orig \;
 
#提示删除存在时间超过3天以上的joe的临时文件
 
find /tmp -ctime +3 -user joe -ok rm {} \;
 
#在主目录中寻找可被其它用户写入的文件
 
find ~ -perm -002  -exec chmod o-w {} \;
 
#查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
 
find /data –type f -perm 644  -name "*.sh" –exec chmod 755 {} \;
xargs
 
参数替换
 
由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数
 
据,并且以空格符或回车符将 stdin 的数据分隔成为参数
 
另外,许多命令不能接受过多参数,命令执行可能会失败,xargs 可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
 
find | xargs COMMAND
 
#显示10个数字
 
[root@centos8 ~]#seq 10 | xargs
 
1 2 3 4 5 6 7 8 9 10
 
#删除当前目录下的大量文件
 
ls | xargs   rm
 
find  -name "*.sh" | xargs ls -Sl
 
[root@centos8 data]#echo {1..4} |xargs
 
1 2 3 4
 
[root@centos8 data]#echo {1..4} |xargs -n1
 
1
 
2
 
3
 
4
 
[root@centos8 data]#echo {1..4} |xargs -n2
 
1 2
 
3 4
 
#批量创建和删除用户
 
echo user{1..10} |xargs -n1 useradd
 
echo user{1..100} | xargs -n1 userdel -r
#这个命令是错误的
 
find /sbin/ -perm /700 | ls -l      
 
#查找有特殊权限的文件,并排序
 
find /bin/ -perm /7000 | xargs ls -Sl  
 
#此命令和上面有何区别?
 
find /bin/ -perm -7000 | xargs ls -Sl  
 
#以字符nul分隔
 
find -type f -name "*.txt" -print0 | xargs -0 rm
 
#并发执行多个进程
 
seq 100 |xargs -i -P10 wget -P /data   http://10.0.0.8/{}.html
 
#并行下载bilibili视频
 
yum install python3-pip -y
 
pip3 install you-get
 
seq 60 | xargs -i -P3 you-get https://www.bilibili.com/video/BV14K411W7UF?p={}
文本格式化命令
printf
 
格式化输出的命令
 
与 echo 类似
用法
 
printf FORMAT [ARGUMENT]...
 
printf OPTION
 
选项
 
-v VAR
将输出分配给 shell 变量 VAR 而不是在标准输出上显示。
 
--help
展示帮助文档并退出。
 
--version
展示版本信息并退出。
 
FORMAT 以 C语言的 printf 格式控制输出。格式字符如下:
 
\"
双引号。
 
\\
反斜杠。
 
\a
响铃。
 
\b
退格。
 
\c
取消后续输出。
 
\e
向右删除一个字符。
 
\f
换页。
 
\n
换行。
 
\r
回车。
 
\t
水平制表。
 
\v
垂直制表。
 
\NNN
八进制数 NNN 所代表的 ASCII 码字符。
 
\xHH
十六进制 HH 对应的8位字符。HH 可以是一到两位。
 
\uHHHH
十六进制 HHHH 对应的 Unicode 字符。HHHH 一到四位。
 
\UHHHHHHHH十六进制 HHHHHHHH 对应的 Unicode 字符。HHHHHHHH 一到八位。
 
%%
百分号。
 
%b
在相应的参数中展开反斜杠转义序列。
 
%q
以可重用为 shell 输入的方式引用参数。
 
%(fmt)T
输出使用 FMT 作为 strftime 的格式字符串产生的日期时间字符串。
[root@server ~]# printf "%5.5f\n" 370
 
370.00000
 
[root@server ~]# printf "%010.5f\n" 370
 
0370.00000
 
[root@server ~]# printf "%10.5f\n" 370
 
370.00000
 
[root@server ~]# printf "%+d\n" 370
 
+370
 
[root@server ~]# printf "%-d\n" 370
 
370
文本处理三剑客
grep
 
主要对文本的(正则表达式)行基于模式进行过滤
 
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
 
模式:由正则表达式字符及文本字符所编写的过滤条件
grep [OPTIONS] PATTERN [FILE...]
 
--color=auto 对匹配到的文本着色显示
 
-m  # 匹配#次后停止
 
-v 显示不被pattern匹配到的行,即取反
 
-i 忽略字符大小写
 
-n 显示匹配的行号
 
-c 统计匹配的行数
 
-o 仅显示匹配到的字符串
 
-q 静默模式,不输出任何信息
 
-A # after, 后#行
 
-B # before, 前#行
 
-C # context, 前后各#行
 
-e 实现多个选项间的逻辑or关系,如:grep –e ‘cat ' -e ‘dog' file
 
-w 匹配整个单词
 
-E 使用ERE,相当于egrep
 
-F 不支持正则表达式,相当于fgrep
 
-P 支持Perl格式的正则表达式
 
-f file 根据模式文件处理
 
-r   递归目录,但不处理软链接
 
-R   递归目录,但处理软链接
取两个文件的相同行
 
#grep -f /data/f1.txt /data/f2.txt
 
#cat /data/f1.txt /data/f2.txt| sort | uniq -d
 
分区利用率最大的值
 
#df |grep '^/dev/sd' |grep -oE '\<[0-9]{,3}%'|grep -Eo '[0-9]+' |sort -nr|head -n1
 
哪个IP和当前主机连接数最多的前三位
 
#ss -nt | grep "^ESTAB" |tr -s ' ' : |cut -d: -f6|sort |uniq -c|sort -nr|head -n3
 
连接状态的统计
 
# ss -nta | tail -n +2 |cut -d" " -f1|sort |uniq -c
 
#egrep -v '^(#|$)' /etc/httpd/conf/httpd.conf
 
#ifconfig eth0 | grep -Eo '([0-9]{1,3}\.){3}[0-9]{1,3}'|head -1
 
过滤掉文件的注释(包括#号的行)和空行
 
#grep -Ev '^$|#' /etc/fstab
 
算出所有人的年龄总和
 
#grep -Eo "[0-9]+" /data/age.txt | tr '\n' + | grep -Eo ".*[0-9]"|bc
 
#grep -oE '[0-9]+' /data/age.txt| paste -s -d+|bc
sed
 
stream editor,文本编辑工具
 
Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。模式空间(PatternSpace)。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象.一行一行的处理,打开速度非常快,执行速度也很快
sed [option]... 'script;script;...' [inputfile...]
 
-n 不输出模式空间内容到屏幕,即不自动打印
 
-e 多点编辑
 
-f FILE 从指定文件中读取编辑脚本
 
-r, -E 使用扩展正则表达式
 
-i.bak 备份文件并原处编辑
 
-s           将多个文件视为独立文件,而不是单个连续的长文件流
 
#说明:
 
-ir   不支持
 
-i -r 支持
 
-ri   支持
 
-ni   危险选项,会清空文件
 
script 格式:
 
'地址命令'
 
地址格式:
 
1. 不给地址:对全文进行处理
 
2. 单地址:
 
  #:指定的行,$:最后一行
 
  /pattern/:被此处模式所能够匹配到的每一行
 
3. 地址范围:
 
  #,#     #从#行到第#行,3,6 从第3行到第6行
 
  #,+#   #从#行到+#行,3,+4 表示从3行到第7行
 
  /pat1/,/pat2/
 
  #,/pat/
 
  /pat/,#
 
4. 步进:~
 
    1~2 奇数行
 
    2~2 偶数行
命令:
 
p 打印当前模式空间内容,追加到默认输出之后
 
Ip 忽略大小写输出
 
d 删除模式空间匹配的行,并立即启用下一轮循环
 
a [\]text 在指定行后面追加文本,支持使用\n实现多行追加
 
i [\]text 在行前面插入文本
 
c [\]text 替换行为单行或多行文本
 
w file 保存模式匹配的行至指定文件
 
r file 读取指定文件的文本至模式空间中匹配到的行后
 
= 为模式空间中的行打印行号
 
! 模式空间中匹配行取反处理
 
q           结束或退出sed
 
查找替换:
 
s/pattern/string/修饰符 查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###
 
替换修饰符:
 
g 行内全局替换
 
p 显示替换成功的行
 
w   /PATH/FILE 将替换成功的行保存至文件中
 
I,i   忽略大小写
sed
高级命令
 
P 打印模式空间开端至\n内容,并追加到默认输出之前
 
h 把模式空间中的内容覆盖至保持空间中
 
H 把模式空间中的内容追加至保持空间中
 
g 从保持空间取出数据覆盖至模式空间
 
G 从保持空间取出内容追加至模式空间
 
x 把模式空间中的内容与保持空间中的内容进行互换
 
n 读取匹配到的行的下一行覆盖至模式空间
 
N 读取匹配到的行的下一行追加至模式空间
 
d 删除模式空间中的行
 
D 如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使
 
用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环
#默认sed会将输入信息直接输出
 
#sed '/^#/d;/^$/d' /etc/httpd/conf/httpd.conf
 
#不显示注释行和空行
 
#删除所有以#开头的行
 
[root@centos8 ~]#sed -i '/^#/d' fstab
 
#只显示非#开头的行
 
[root@centos8 ~]#sed -n '/^#/!p' fstab
 
#修改网卡配置
 
[root@centos8 ~]#sed -Ei.bak '/^GRUB_CMDLINE_LINUX/s/(.*)(")$/\1
 
net.ifnames=0\2/' /etc/default/grub
 
搜索替换和&
 
#sed -nr 's/r..t/&er/gp' /etc/passwd
 
获取分区利用率
 
#df | sed -En '/^\/dev\/sd/s@.* ([0-9]+)%.*@\1@p'
 
取IP 地址
 
#ifconfig eth0 | sed -rn '2s/(.*inet )([0-9].*)( netmask.*)/\2/p'
 
#取目录名
 
#echo /etc/sysconfig/ | sed -rn 's#(.*)/([^/]+)/?#\1#p'
 
#取基名
 
#echo /etc/sysconfig/ | sed -rn 's#(.*)/([^/]+)/?#\2#p'
 
取文件的前缀和后缀
 
#echo a.b.tar.gz | sed -rn 's@.*\.([^.]+)\.([^.]+)$@\1.\2@p'
 
将#开头的行删除#
 
#sed -ri.bak '/^#/s/^#//' /etc/fstab
 
变量实现多点编辑配置文件
 
#sed -ri.bak -e 's/^Listen 80/Listen '$port'/' -e "/ServerName/c ServerName `hostname`:$port" /etc/httpd/conf/httpd.conf
awk
 
Linux上的实现gawk,文本报告生成器
awk [options]   'program' var=value   file…
 
awk [options]   -f programfile    var=value file…
 
print item1, item2, ...
 
逗号分隔符
 
输出item可以字符串,也可是数值;当前记录的字段、变量或awk的表达式
 
如省略item,相当于print $0
 
固定字符符需要用“ ” 引起来,而变量和数字不需要
取出分区利用率
 
#df | awk '{print $1,$5}'
 
#使用扩展的正则表达式
 
#df | awk -F"[[:space:]]+|%" '{print $5}'
0
0
0

 

 

5.总结文本处理的grep命令相关的基本正则和扩展正则表达式。
 

总结文本处理的grep命令相关的基本正则和扩展正则表达式

一、  基本正则表达式

正则表达式的元字符分类:字符匹配、匹配次数、位置锚定、分组

①字符匹配:

.   匹配任意单个字符(除了\n),可以是一个汉字或其它国家的文字

[]   匹配指定范围内的任意单个字符,示例:[wang]   [0-9]   [a-z]   [a-zA-Z]

[^] 匹配指定范围外的任意单个字符,示例:[^wang]

[:alnum:] 字母和数字

[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]

[:upper:] 大写字母

[:blank:] 空白字符(空格和制表符)

[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

[:digit:] 十进制数字

[:xdigit:]十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

-----------------

\s     #匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [\f\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符

\S     #匹配任何非空白字符。等价于 [^\f\r\t\v]

\w #匹配一个字母,数字,下划线,汉字,其它国家文字的字符,等价于[_[:alnum:]字]

\W #匹配一个非字母,数字,下划线,汉字,其它国家文字的字符,等价于[^_[:alnum:]字]

②匹配次数

用在要指定次数的字符后面,用于指定前面的字符要出现的次数

* #匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配

.* #任意长度的任意字符

\? #匹配其前面的字符出现0次或1次,即:可有可无

\+ #匹配其前面的字符出现最少1次,即:肯定有且 >=1 次

\{n\} #匹配前面的字符n次

\{m,n\} #匹配前面的字符至少m次,至多n次

\{,n\}  #匹配前面的字符至多n次,<=n

\{n,\}  #匹配前面的字符至少n次

③位置锚定

位置锚定可以用于定位出现的位置

^ #行首锚定, 用于模式的最左侧

$ #行尾锚定,用于模式的最右侧

^PATTERN$ #用于模式匹配整行

^$ #空行

^[[:space:]]*$  #空白行

\< 或 \b   #词首锚定,用于单词模式的左侧

\> 或 \b        #词尾锚定,用于单词模式的右侧

\<PATTERN\>     #匹配整个单词

#注意: 单词是由字母,数字,下划线组成

④分组

分组:() 将多个字符捆绑在一起,当作一个整体处理,如:\(root\)+

后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名

方式为: \1, \2, \3, ...

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

注意: \0 表示正则表达式匹配的所有字符

\(string1\(string2\)\)

\1 :string1\(string2\)

\2 :string2

注意: 后向引用 引用前面的分组括号中的模式所匹配字符,而非模式本身

⑤或者

或者:\|

a\|b #a或b  

C\|cat #C或cat  

\(C\|c\)at #Cat或cat

二、  扩展正则表达式

①字符匹配

. 任意单个字符

[wang] 指定范围的字符

[^wang] 不在指定范围的字符

[:alnum:] 字母和数字

[:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z

[:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]

[:upper:] 大写字母

[:blank:] 空白字符(空格和制表符)

[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

[:digit:] 十进制数字

[:xdigit:]十六进制数字

[:graph:] 可打印的非空白字符

[:print:] 可打印字符

[:punct:] 标点符号

②次数匹配

*   匹配前面字符任意次

? 0或1次

+ 1次或多次

{n} 匹配n次

{m,n} 至少m,至多n次

③位置锚定

^ 行首

$ 行尾

\<, \b 语首

\>, \b 语尾

④分组其他

() 分组

后向引用:\1, \2, ... 注意: \0 表示正则表达式匹配的所有字符

| 或者

a|b #a或b

C|cat #C或cat

(C|c)at #Cat或cat

6.总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
 
7.通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
0
鸡兔同笼:
设x只鸡和y只兔子在一个笼子里,头的数量为a,脚的数量为b。
x+y=a
2x+4y=b
算出:y=(b-2a)/2
x=a-y
[18:41:04 root@ubuntu2004 ~]#vim count.sh
#!/bin/bash
 
#--------------------------------------------------------------------
#Author: 郑勋昌
#QQ: 307331108
#Date: 2023-01-08
#FileName: count.sh
#Description: The first script
#--------------------------------------------------------------------
read -p "输入头的数量 :" m
read -p "输入脚的数量 :" n
head=$m
foot=$n
rabbit=$[(foot-2*head)/2]
cock=$[head-rabbit]
echo "$m鸡和兔的头,$n鸡和兔的脚"
echo "兔子:$rabbit只"
echo "鸡:$cock只"
[18:42:53 root@ubuntu2004 ~]#chmod +x count.sh
[18:43:06 root@ubuntu2004 ~]#bash count.sh
输入头的数量 :30
输入脚的数量 :80
30鸡和兔的头,80鸡和兔的脚
兔子:10只
鸡:20只
8.结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
 
9. 磁盘存储术语总结: head, track, sector, sylinder.
head:磁头 磁头数=盘面数
track:磁道 磁道=柱面数
sector:扇区,512bytes
cylinder:柱面 1柱面=512 * sector数/trackhead数=51263*255=7.84M
知道了磁头数、柱面数、扇区数,就可以很容易地确定数据保存在硬盘的哪个位置。也很容易确定硬盘的容量,其计算公式是:硬盘容量=磁头数×柱面数×扇区数×512字节。
#fdisk -l /dev/sda
10. 总结MBR,GPT结构。
MBR:Master Boot Record,主分区引导记录。最早在1983年在IBM PC DOS 2.0中提出。
每个扇区/区块都被分配了一个逻辑块地址,即LBA,而引导扇区则是每个分区的第一扇区,而主引导扇区则是整个硬盘的第一扇区(主分区的第一个扇区)。
MBR就保存在主引导扇区中。
另外,这个扇区里还包含了硬盘分区表DPT(Disk Partition Table),和结束标志字(Magic number)。
扇区总计512字节,MBR占446字节(0000H - 01BDH),DPT占据64个字节(01BEH - 01FDH),最后的magic number占2字节(01FEH – 01FFH)。
0磁道0扇区:512bytes
446bytes: boot loader 启动相关
64bytes:分区表,其中每16bytes标识一个分区
2bytes: 55AA,标识位
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5
0
0
0
MBR记录的实例:
80 01 01 00, 0B FE BF FC, 3F 00 00 00, 7E 86 BB 00
其中, “80”是一个分区的激活标志,表示系统可引导;“01 01 00”表示分区开始的磁头号为01,开始的扇区号为01,开始的柱面号为00;“0B”表示该分区的系统类型是FAT32,其他比较常用的有04(FAT16)、07(NTFS);“FE BF FC”表示分区结束的磁头号为254,分区结束的扇区号为63、分区结束的柱面号为764;“3F 00 00 00”表示首扇区的相对扇区号为63;“7E 86 BB 00”表示总扇区数为12289622。
GPT分区
GPT:GUID(Globals Unique Identifiers) partition table 支持128个分区,使用64位,支持8Z( 512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区 GPT分区表自动备份在头和尾两份,并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
GPT分区结构
0
GPT分区结构分为4个区域:
GPT头
分区表
GPT分区
备份区域
相较于MBR,GPT具有以下优点:
(1)得益于LBA提升至64位,以及分区表中每项128位设定,GPT可管理的空间近乎无限大,假设一个扇区大小仍为512字节,可表示扇区数为,算下来,可管理的硬盘容量=18EB(1EB=1024PB=1,048,576TB),2T在它面前完全不在话下。按目前的硬盘技术来看,确实近乎无限,不过,以后的事谁知道呢。
(2)分区数量几乎没有限制,由于可在表头中设置分区数量的大小,如果愿意,设置个分区也可以(有人愿意管理这么多分区吗),不过,目前windows仅支持最大128个分区。
(3)自带保险,由于在磁盘的首尾部分各带一个GPT表头,任何一个受到破坏后都可以通过另一份恢复,极大地提高了磁盘的抗性(两个一起坏的请出门买彩票)。
(4)循环冗余检验值针对关键数据结构而计算,提高了数据崩溃的检测几率。
(5)尽管目前分区类型不超过百数(十数也没有吧。),GPT仍提供了16字节的GUID来标识分区类型,使其更不容易产生冲突。
(6)每个分区都可以拥有一个特别的名字,最长72字节,足够写一首七律了。满足你的各种奇葩起名需求。
完美支持UEFI,毕竟它就是UEFI规范的衍生品。在将来全行业UEFI的情境下,GPT必将更快淘汰MBR。
11. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
lsblk
列出块设备
fdisk
创建分区命令:管理MBR分区
fdisk -l [-u] [device...]
查看分区
fdisk [device...]
管理MBR分区
p 分区列表
t 更改分区类型
n 创建新分区
d 删除分区
v 校验分区
u 转换单位
w 保存并退出
q 不保存并退出
gdisk
创建分区命令:管理GPT分区
gdisk [device...]
类fdisk 的GPT分区工具
parted
创建分区命令:高级分区操作,可以是交互或非交互方式
partprobe
重新设置内存中的内核分区表版本,适合于除了CentOS 6 以外的其它版本 5,7,8
parted
磁盘分区;parted的操作都是实时生效的,小心使用
parted [选项]... [设备 [命令 [参数]...]...]
parted /dev/sdb mklabel gpt|msdos
parted /dev/sdb print
parted /dev/sdb mkpart primary 1 200 (默认M)
parted /dev/sdb rm 1
parted -l
列出所有硬盘分区信息
cat /proc/partitions
查看内核是否已经识别新的分区
新增分区用
partx -a /dev/DEVICE
kpartx -a /dev/DEVICE -f: force
#示例:
[root@centos6 ~]#partx -a /dev/sda
CentOS6 通知内核重新读取硬盘分区表
删除分区用
partx -d --nr M-N /dev/DEVICE
#示例:
[root@centos6 ~]#partx -d --nr 6-8 /dev/sda
echo -e 'n\np\n\n\n+2G\nw\n' | fdisk /dev/sdc
非交互式创建分区
partx -a /dev/sda
同步分区表
支持的文件系统
/lib/modules/`uname -r`/kernel/fs
cat /proc/filesystems
mkfs
创建文件系统
mkfs.FS_TYPE /dev/DEVICE
FS_TYPE:
ext4
xfs
btrfs
vfat
mkfs -t FS_TYPE /dev/DEVICE
-L 'LABEL' 设定卷标
mke2fs
ext系列文件系统专用管理工具
-t {ext2|ext3|ext4|xfs} 指定文件系统类型
-b {1024|2048|4096} 指定块 block 大小
-L ‘LABEL’ 设置卷标
-j 相当于 -t ext3, mkfs.ext3 = mkfs -t ext3 = mke2fs -j = mke2fs -t ext3
-i
# 为数据空间中每多少个字节创建一个inode;不应该小于block大小
-N
# 指定分区中创建多少个inode
-I 一个inode记录占用的磁盘空间大小,128---4096
-m
# 默认5%,为管理人员预留空间占总空间的百分比
-O FEATURE[,...] 启用指定特性
-O ^FEATURE 关闭指定特性
blkid
可以查看块设备属性信息
blkid [OPTION]... [DEVICE]
-U UUID 根据指定的UUID来查找对应的设备
-L LABEL 根据指定的LABEL来查找对应的设备
e2label
管理ext系列文件系统的LABEL
e2label DEVICE [LABEL]
findfs
查找分区
findfs [options] LABEL=
findfs [options] UUID=
#findfs UUID=f7f53add-b184-4ddc-8d2c-5263b84d1e15
#findfs `sed -En '/data/s#^([^ ]+).*#\1#p' /etc/fstab`
tune2fs
重新设定
ext
系列文件系统可调整参数的值
-l 查看指定文件系统超级块信息;super block
-L 'LABEL’ 修改卷标
-m # 修预留给管理员的空间百分比
-j 将ext2升级为ext3
-O 文件系统属性启用或禁用, -O ^has_journal
-o 调整文件系统的默认挂载选项,-o ^acl
-U UUID 修改UUID号
dumpe2fs
显示ext文件系统信息,将磁盘块分组管理
-h:查看超级块信息,不显示分组信息
#dumpe2fs /dev/sda1
xfs_info
显示示挂载或已挂载的 xfs 文件系统信息
xfs_info mountpoint|devname
#xfs_info /dev/sda7
fsck
文件系统检测和修复
fsck.FS_TYPE
fsck -t FS_TYPE
注意:一定不要在挂载状态下执行下面命令修复
FS_TYPE 一定要与分区上已经文件类型相同
-a 自动修复
-r 交互式修复错误
e2fsck
ext系列文件专用的检测修复工具
-y 自动回答为yes
-f 强制修复
-p 自动进行安全的修复文件系统问题
xfs_repair
xfs文件系统专用检测修复工具
-f 修复文件,而设备
-n 只检查
-d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot
修改破坏的ext文件系统
[root@centos8 ~]#mount /dev/sdb2 /mnt
[root@centos8 ~]#cp /etc/fstab /mnt/f1
[root@centos8 ~]#cp /etc/fstab /mnt/f2
[root@centos8 ~]#ls /mnt
[root@centos8 ~]#dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
[root@centos8 ~]#ls /mnt
[root@centos8 ~]#tune2fs -l /dev/sdb2
[root@centos8 ~]#df
[root@centos8 ~]#umount /mnt
[root@centos8 ~]#e2fsck /dev/sdb2
[root@centos8 ~]#e2fsck /dev/sdb2 -y
[root@centos8 ~]#tune2fs -l /dev/sdb2
[root@centos8 ~]#mount /dev/sdb2 /mnt
[root@centos8 ~]#ls /mnt
[root@centos8 ~]#cat /mnt/f1
mount
挂载文件系统
mount [-fnrsvw] [-t vfstype] [-o options] device mountpoint
device:指明要挂载的设备
设备文件:例如:/dev/sda5
卷标:-L 'LABEL', 例如 -L 'MYDATA'
UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录
mount 常用命令选项
-t fstype 指定要挂载的设备上的文件系统类型,如:ext4,xfs
-r readonly,只读挂载
-w read and write, 读写挂载,此为默认设置,可省略
-n 不更新/etc/mtab,mount不可见
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载选项中有auto功能)
-L 'LABEL' 以卷标指定挂载设备
-U 'UUID' 以UUID指定要挂载的设备
-B, --bind 绑定目录到另一个目录上
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async
异步模式,内存更改时,写入缓存区buffer,过一段时间再写到磁盘中,效率高,但不安全
sync
同步模式,内存更改时,同时写磁盘,安全,但效率低下
atime/noatime 包含目录和文件
diratime/nodiratime 目录的访问时间戳
auto/noauto 是否支持开机自动挂载,是否支持-a选项
exec/noexec 是否支持将文件系统上运行应用程序
dev/nodev 是否支持在此文件系统上使用设备文件
suid/nosuid 是否支持suid和sgid权限
remount 重新挂载
ro/rw 只读、读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
acl/noacl 启用此文件系统上的acl功能
loop 使用loop设备
_netdev
当网络可用时才对网络资源进行挂载,如:NFS文件系统
defaults 相当于rw, suid, dev, exec, auto, nouser, async
挂载规则:
一个挂载点同一时间只能挂载一个设备
一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据,其它设备上的数据将被隐藏
一个设备可以同时挂载到多个挂载点
通常挂载点一般是已存在空的目录
umount
卸载文件系统
umount 设备名|挂载点
查看挂载情况
通过查看/etc/mtab文件显示当前已挂载的所有设备
mount
#查看内核追踪到的已挂载的所有设备
cat /proc/mounts
查看挂载点情况
findmnt
MOUNT_POINT|device
查看正在访问指定文件系统的进程
lsof MOUNT_POINT
fuser -v MOUNT_POINT
终止所有在正访问指定的文件系统的进程
fuser -km MOUNT_POINT
swapon
启用swap分区
swapon [OPTION]... [DEVICE]
-a
#激活所有的交换分区
-p PRIORITY #指定优先级(-1到32767之间),值越大,优先级越高.也可在/etc/fstab文件中的第4列指定:pri=value
创建swap分区
[root@centos8 ~]#echo -e 'n\np\n\n\n+2G\nt\n82\nw\n' | fdisk /dev/sdc
[root@centos8 ~]#mkswap /dev/sdc1
[root@centos8 ~]#blkid /dev/sdc1
[root@centos8 ~]#vim /etc/fstab
UUID=d3140a7a-65b7-4cb7-8a2b-12d38aa98c6f swap
swap defaults 0 0
[root@centos8 ~]#swapon -a
[root@centos8 ~]#free -h
[root@centos8 ~]#cat /proc/swaps
swapoff
禁用swap分区
swapoff [OPTION]...[DEVICE]
[root@centos8 ~]#sed -i.bak '/swap/d' /etc/fstab
[root@centos8 ~]#swapoff -a
以文件实现swap功能
[root@centos8 ~]#dd if=/dev/zero of=/swapfile bs=1M count=1024
[root@centos8 ~]#mkswap /swapfile
[root@centos8 ~]#blkid /swapfile >> /etc/fstab
[root@centos8 ~]#/etc/fstab
/swapfile swap
swap
defaults
0 0 #不要用
UUID,使用文件的路径
[root@centos8 ~]#chmod 600 /swapfile
[root@centos8 ~]#swapon -a
[root@centos8 ~]#swapon -s
12. 总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
RAID等级
最少硬盘
最大容错
可用容量
读取性能
写入性能
安全性
目的
应用场景
单一硬盘
(参考)
0
1
1
1
   
JBOD
1
0
n
1
1
无(同RAID0)
增加容量
个人(暂时)存储备份
0
1
0
n
n
n
一个硬盘异常,全部硬盘都会异常
追求最大容量、速度
影片剪接缓存用途
1
2
n-1
1
n
1
高,一个正常即可
追求最大安全性
个人、企业备份
5
3
1
n-1
n-1
n-1
追求最大容量、最小预算
个人、企业备份
6
4
2
n-2
n-2
n-2
安全性较RAID5高
同RAID5,但较安全
个人、企业备份
10
4
       
综合RAID 0/1优点,理论速度较快
大型数据库、服务器
50
6
       
提升数据安全
 
60
8
       
提升数据安全
 
0
13. 完成不影响业务对LVM磁盘扩容及缩容示例。
完成不影响业务对LVM磁盘扩容及缩容示例
一、  逻辑卷使用
1、    创建物理卷(pvcreate 创建物理卷)
2、    创建卷组(vgcreate 为卷组分配物理卷)
3、    创建逻辑卷(lvcreate 从卷组创建逻辑卷)
4、    格式化并挂载(mkfs.ext4 mount)
0
在开机状态下,增加磁盘之后:
ls/sys/class/scsi_host/
host0  host1 host2
echo"- - -" > /sys/class/scsi_host/host0/scan
echo"- - -" > /sys/class/scsi_host/host1/scan
echo"- - -" > /sys/class/scsi_host/host2/scan
fdisk-l
#创建物理卷
pvcreate /dev/sdb
#为卷组分配物理卷
vgcreate zxc /dev/sdb
#从卷组创建逻辑卷
lvcreate  -L 30G -n mysqlDB zxc
#格式化
#mkfs.ext4  /dev/zxc/mysqlDB (支持缩容)
或者#mkfs.xfs  /dev/zxc/mysqlDB( 不支持缩容)
#挂载
mount /dev/zxc/mysqlDB /data
0
删除逻辑卷:
0
二、  对LVM磁盘扩容
#两步实现
#第一步实现逻辑卷的空间扩展
lvextend-L [+]#[mMgGtT] /dev/VG_NAME/LV_NAME
#第二步实现文件系统的扩展
#针对ext
resize2fs/dev/VG_NAME/LV_NAME
#针对xfs
xfs_growfsMOUNTPOINT
#一步实现容间和文件系统的扩展
lvresize-r -l +100%FREE /dev/VG_NAME/LV_NAME
0
三、  对LVM缩容
注意:缩减有数据损坏的风险,建议先备份再缩减,xfs文件系统不支持缩减
e2fsck-f /dev/VG_NAME/LV_NAME
resize2fs/dev/VG_NAME/LV_NAME #[mMgGtT]
lvreduce-L [-]#[mMgGtT] /dev/VG_NAME/LV_NAME
#或者可以简写
umount/dev/VG_NAME/LV_NAME
lvreduce -L #[mMgGtT] -r /dev/VG_NAME/LV_NAME
mount/dev/VG_NAME/LV_NAME mountpoint
#使用选项-r 可以同时缩减卷和文件系统
0
——缩减XFS文件系统的逻辑卷:
#因为XFS文件系统不支持缩减,可以用下面方式缩减
#先备份XFS文件系统数据
[root@centos8~]#yum -y install xfsdump
#备份/data挂载点对应的逻辑卷
#注意挂载点后面不要加/,否则会出错:xfsdump: ERROR: /data/ does not identify a file
system
[root@centos8~]#xfsdump -f data.img /data
#卸载文件系统
[root@centos8~]#umount /data
#缩减逻辑卷
[root@centos8~]#lvreduce -L 10G /dev/vg0/lv0
#重新创建文件系统
[root@centos8~]#mkfs.xfs -f /dev/vg0/lv0
#重新挂载
[root@centos8~]#mount /dev/vg0/lv0 /data
#还原数据
[root@centos8~]#xfsrestore -f data.img /data
posted @ 2023-03-12 21:52  hello~2023  阅读(509)  评论(0编辑  收藏  举报