linux安全模型
3A:
- authentication 认证,验证用户身份
- authorization 鉴权,不同用户设置不同权限
- accouting|audit 审计
文件权限
文件属性:
文件所有者属性:文件所属组属性:其他组属性
文件所有者修改
chown owner:group FILE
常用选项-R,用于递归修改指定路径下的所有文件或目录的所属组和所有者
修改文件所属组
chgrp GROUP file
常用选项-R,用于递归修改指定路径下的所有文件或目录的所属组
修改文件权限
chmod MODE FILE
格式 who opt permission
who:u,g,o,a
opt:+,-,=
permission:r,w,x
文件特殊权限
- SUID:作用在所属者上,无论谁执行设置了SUID的程序,该程序的所属者始终为文件创建者
使用普通账号运行passwd命令,passwd进程的所有者为root,因为passwd程序文件设置了SUID位
[root@rocky87 ~]# ll `which passwd`
-rwsr-xr-x. 1 root root 33424 Apr 20 2022 /usr/bin/passwd
设置SUID的方法
chmod u+s FILE
- SGID:作用在group上,如果设置在文件上,该文件执行为进程后,该进程的所属组为该文件的所属组;如果设置在目录上,那么该在该目录下创建的文件所属组与该目录一致
[root@rocky87 ~]# ll
total 20
-rwx--x--x. 1 root root 1094 Mar 16 16:54 anaconda-ks.cfg
-rw-r--r-- 1 root root 7787 Apr 12 23:38 hellodb_innodb.sql
-rwxr-xr-x 1 root root 266 Apr 17 13:53 mysql_backup.sh
drwxr-sr-x 2 shichao shichao 6 Apr 17 20:12 test
-rw-r--r-- 1 root root 965 Apr 11 07:13 tq
[root@rocky87 ~]# cd test/
[root@rocky87 test]# touch file
[root@rocky87 test]# ll
total 0
-rw-r--r-- 1 root shichao 0 Apr 17 20:12 file
[root@rocky87 test]# whoami
root
[root@rocky87 test]#
- Sticky:作用在文件上,作用在other部分,设置了sticky位的文件只有文件所属有这或root才能删除
访问控制列表ACL
ACL实现比属主/属组/other更精细的文件权限控制
ACL生效顺序:所有者,自定义用户,所属组|自定义组,其他人
setfacl 设置ACL权限
#设置ACL权限
setfacl -m u:USER:PERM[,u:USER:PERM] file
#USER 针对账号设置文件访问属性
#PERM 使用r|w|x|-对文件属性设置,如r-x
[root@rocky87 ~]# ll
total 20
-rwx--x--x. 1 root root 1094 Mar 16 16:54 anaconda-ks.cfg
-rw-r--r-- 1 root root 7787 Apr 12 23:38 hellodb_innodb.sql
-rwxr-xr-x 1 root root 266 Apr 17 13:53 mysql_backup.sh
drwxrwxrwx 2 shichao shichao 6 Apr 17 20:28 test
-rw-r--r-- 1 root root 965 Apr 11 07:13 tq
[root@rocky87 ~]# setfacl -m u:yu:--- test
[root@rocky87 ~]#
[root@rocky87 ~]# ll
total 20
-rwx--x--x. 1 root root 1094 Mar 16 16:54 anaconda-ks.cfg
-rw-r--r-- 1 root root 7787 Apr 12 23:38 hellodb_innodb.sql
-rwxr-xr-x 1 root root 266 Apr 17 13:53 mysql_backup.sh
drwxrwxrwx+ 2 shichao shichao 6 Apr 17 20:28 test
-rw-r--r-- 1 root root 965 Apr 11 07:13 tq
[root@rocky87 ~]# su yu
[yu@rocky87 root]$ ll test
ls: cannot open directory 'test': Permission denied
[yu@rocky87 root]$ getfacl test
# file: test
# owner: shichao
# group: shichao
user::rwx
user:yu:---
group::rwx
mask::rwx
other::rwx
#取消ACL权限
setfacl -x u:USER:PERM file
getfacl 查看ACL权限
setfacl -b file 删除所有ACL权限
文本处理工具,文件查找工具,文本处理三剑客
cat
#显示隐藏字符
[root@localhost ~]# cat -A linux2
q$
a$
z$
[root@localhost ~]# cat -A windows.txt
q^M$
a^M$
[root@localhost ~]# file linux2 windows.txt
linux2: ASCII text
windows.txt: ASCII text, with CRLF line terminators
[root@localhost ~]#
paste
用法:paste [选项]… [文件]…
-d, --delimiters=列表 改用指定列表里的字符替代制表分隔符
-s, --serial 不使用平行的行目输出模式,而是每个文件占用一行
[root@localhost ~]# cat alpha.log
a
b
c
d
e
f
g
h
[root@localhost ~]# paste -s alpha.log
a b c d e f g h
sort
用法:sort [选项]… [文件]…
排序选项:
-n, --numeric-sort 根据字符串数值比较
-R, --random-sort 根据随机hash 排序
-r, --reverse 逆序输出排序结果
-t, --field-separator=分隔符 使用指定的分隔符代替非空格到空格的转换
-k, --key=KEYDEF sort via a key; KEYDEF gives location and type
-f, --ignore-case 忽略字母大小写
-g, --general-numeric-sort compare according to general numerical value
-M, --month-sort compare (unknown) < ‘JAN’ < … < ‘DEC’
-h, --human-numeric-sort 使用易读性数字(例如: 2K 1G)
-u, --unique 合并重复项(不相邻的也合并)
[root@localhost ~]# df -h | awk '{ print $2}'| tail -n +2| sort -h
182M
182M
893M
910M
910M
910M
1014M
17G
find
find [OPTION]… [查找路径] [查找条件] [处理动作]
查找路径:指定具体目标路径,默认为当前路径
查找条件:指定的查找标准,可以是文件名、大小、类型、权限等;默认找出指定路径下
的所有文件
处理动作:对符合条件的文件进行操作,默认输出至屏幕
find在使用通配符找文件的时候需要把字符串用引号包起来,否则会出现如下问题
[root@localhost ~]# find /etc/ -name *.conf | head -n 4
/etc/resolv.conf
/etc/fonts/conf.d/62-google-crosextra-caladea-fontconfig.conf
/etc/fonts/conf.d/61-urw-fallback-backwards.conf
/etc/fonts/conf.d/69-gnu-free-serif.conf
[root@localhost ~]# touch a.conf
[root@localhost ~]# find /etc/ -name *.conf | head -n 4
[root@localhost ~]#
#当前目录下的文件名匹配上了通配符会影响搜索
查找空文件或目录
-empty
[root@localhost home]# find /home/yu -type d -empty
/home/yu/.mozilla/extensions
/home/yu/.mozilla/plugins
/home/yu/.config/abrt
[root@localhost home]#
根据所属主和所属组查找
-user USERNAME #查找属主为指定用户的文件
-group GROUPNAME #查找属组为指定用户组的文件
-uid
-gid
-nouser #查找无主文件
-nogroup #查找无组文件
组合条件
-a #与,默认多个条件是与的关系
-o #或
-not,! #非
find /home/yu -type d -o -type f
find /home/yu \( -type d -o -type f \) #括号与相邻字符间要有空格
根据文件大小查找
-size [+|-] n UNIT #常用的单位:k,M,G,c(byte)
nUNIT: #表示(n-1,n],如:6k 表示(5k,6k]
-nUNIT: #表示[0,n-1],如:-6k 表示[0k,5k]
+nUNIT: #表示(n,∞),如:+6k 表示(6k,∞)
find -size 1024k
find -size 1M
两者是不一样的
根据时间戳查找
#以天为单位
-atime [+|-]n
-mtime
-ctime
n #表示[n,n+1)
+n #表示[n+1,∞)
-n #表示[0,n)
#以分钟为单位
-amin
-mmin
-cmin
根据权限查找
-perm [/|-]MODE
MODE 精确权限匹配
/MODE 任何一类u,g,o对应的权限中主要有一位匹配即可,是或的关系
-MODE 每一类必须都匹配,是与的关系
0 表示不关注
#严格匹配755权限的文件
find -perm 755
#只要u,g,o之一有w权限则匹配
find -perm /222
#只有u,g,o都是w权限时才匹配
find -perm -222
#只要o有w权限就匹配
find -perm -002
处理动作
-print 默认动作,打印
-ls 等价对匹配的文件执行ls -dlsi命名
-delete 删除匹配的文件,慎用
-ok COMMAND {} \; 对匹配文件执行COMMAND命令,每次命令执行前都需用户交互式确认
-exec COMMAND {} \; 对匹配文件执行COMMAND命令
tar
用法: tar [选项…] [FILE]…
主操作模式:
-A, --catenate, --concatenate 追加 tar 文件至归档
-c, --create 创建一个新归档
-d, --diff, --compare 找出归档和文件系统的差异
–delete 从归档(非磁带!)中删除
-r, --append 追加文件至归档结尾
-t, --list 列出归档内容
–test-label 测试归档卷标并退出
-u, --update 仅追加比归档中副本更新的文件
-x, --extract, --get 从归档中解出文件
操作修饰符:
--check-device 当创建增量归档时检查设备号(默认)
-g, --listed-incremental=FILE 处理新式的 GNU 格式的增量备份
-G, --incremental 处理老式的 GNU 格式的增量备份
–ignore-failed-read
当遇上不可读文件时不要以非零值退出
–level=NUMBER 所创建的增量列表归档的输出级别
-n, --seek 归档可检索
–no-check-device 当创建增量归档时不要检查设备号
–no-seek 归档不可检索
–occurrence[=NUMBER] 仅处理归档中每个文件的第 NUMBER
个事件;仅当与以下子命令 --delete,
–diff, --extract 或是 --list
中的一个联合使用时,此选项才有效。而且不管文件列表是以命令行形式给出或是通过
-T 选项指定的;NUMBER 值默认为 1
–sparse-version=MAJOR[.MINOR]
设置所用的离散格式版本(隐含
–sparse)
-S, --sparse 高效处理离散文件
重写控制:
-k, --keep-old-files don’t replace existing files when extracting,
treat them as errors
–keep-directory-symlink preserve existing symlinks to directories when
extracting
–keep-newer-files
不要替换比归档中副本更新的已存在的文件
–no-overwrite-dir 保留已存在目录的元数据
–overwrite 解压时重写存在的文件
–overwrite-dir 解压时重写已存在目录的元数据(默认)
--recursive-unlink 解压目录之前先清除目录层次
--remove-files 在添加文件至归档后删除它们
--skip-old-files don't replace existing files when extracting,
silently skip over them
-U, --unlink-first 在解压要重写的文件之前先删除它们
-W, --verify 在写入以后尝试校验归档
选择输出流:
--ignore-command-error 忽略子进程的退出代码
--no-ignore-command-error
将子进程的非零退出代码认为发生错误
-O, --to-stdout 解压文件至标准输出
–to-command=COMMAND
将解压的文件通过管道传送至另一个程序
操作文件属性:
--atime-preserve[=METHOD]
在输出的文件上保留访问时间,要么通过在读取(默认
METHOD=‘replace’)后还原时间,要不就不要在第一次(METHOD=‘system’)设置时间
--delay-directory-restore
直到解压结束才设置修改时间和所解目录的权限
--group=名称 强制将 NAME
作为所添加的文件的组所有者
--mode=CHANGES 强制将所添加的文件(符号)更改为权限
CHANGES
--mtime=DATE-OR-FILE 从 DATE-OR-FILE 中为添加的文件设置
mtime
-m, --touch 不要解压文件的修改时间
–no-delay-directory-restore
取消 --delay-directory-restore 选项的效果
–no-same-owner
将文件解压为您所有(普通用户默认此项)
–no-same-permissions
从归档中解压权限时使用用户的掩码位(默认为普通用户服务)
–numeric-owner 总是以数字代表用户/组的名称
–owner=名称 强制将 NAME
作为所添加的文件的所有者
-p, --preserve-permissions, --same-permissions
解压文件权限信息(默认只为超级用户服务)
–preserve 与 -p 和 -s 一样
–same-owner
尝试解压时保持所有者关系一致(超级用户默认此项)
-s, --preserve-order, --same-order
member arguments are listed in the same order as
the files in the archive
Handling of extended file attributes:
--acls Enable the POSIX ACLs support
--no-acls Disable the POSIX ACLs support
--no-selinux Disable the SELinux context support
--no-xattrs Disable extended attributes support
--selinux Enable the SELinux context support
--xattrs Enable extended attributes support
--xattrs-exclude=MASK specify the exclude pattern for xattr keys
--xattrs-include=MASK specify the include pattern for xattr keys
设备选择和切换:
-f, --file=ARCHIVE 使用归档文件或 ARCHIVE 设备
–force-local
即使归档文件存在副本还是把它认为是本地归档
-F, --info-script=名称, --new-volume-script=名称
在每卷磁带最后运行脚本(隐含 -M)
-L, --tape-length=NUMBER 写入 NUMBER × 1024 字节后更换磁带
-M, --multi-volume 创建/列出/解压多卷归档文件
–rmt-command=COMMAND 使用指定的 rmt COMMAND 代替 rmt
–rsh-command=COMMAND 使用远程 COMMAND 代替 rsh
–volno-file=FILE 使用/更新 FILE 中的卷数
设备分块:
-b, --blocking-factor=BLOCKS 每个记录 BLOCKS x 512 字节
-B, --read-full-records 读取时重新分块(只对 4.2BSD 管道有效)
-i, --ignore-zeros 忽略归档中的零字节块(即文件结尾)
–record-size=NUMBER 每个记录的字节数 NUMBER,乘以 512
选择归档格式:
-H, --format=FORMAT 创建指定格式的归档
压缩选项:
-a, --auto-compress 使用归档后缀名来决定压缩程序
-I, --use-compress-program=PROG
通过 PROG 过滤(必须是能接受 -d
选项的程序)
-j, --bzip2 通过 bzip2 过滤归档
-J, --xz 通过 xz 过滤归档
–lzip 通过 lzip 过滤归档
–lzma 通过 lzma 过滤归档
–lzop
–no-auto-compress 不使用归档后缀名来决定压缩程序
-z, --gzip, --gunzip, --ungzip 通过 gzip 过滤归档
-Z, --compress, --uncompress 通过 compress 过滤归档
本地文件选择:
--add-file=FILE 添加指定的 FILE 至归档(如果名字以 -
开始会很有用的)
--backup[=CONTROL] 在删除前备份,选择 CONTROL 版本
-C, --directory=DIR 改变至目录 DIR
–exclude=PATTERN 排除以 PATTERN 指定的文件
–exclude-backups 排除备份和锁文件
–exclude-caches 除标识文件本身外,排除包含
CACHEDIR.TAG 的目录中的内容
–exclude-caches-all 排除包含 CACHEDIR.TAG 的目录
–exclude-caches-under 排除包含 CACHEDIR.TAG 的目录中所有内容
--exclude-tag=FILE 除 FILE 自身外,排除包含 FILE
的目录中的内容
--exclude-tag-all=FILE 排除包含 FILE 的目录
--exclude-tag-under=FILE 排除包含 FILE 的目录中的所有内容
--exclude-vcs 排除版本控制系统目录
-h, --dereference
跟踪符号链接;将它们所指向的文件归档并输出
–hard-dereference
跟踪硬链接;将它们所指向的文件归档并输出
-K, --starting-file=MEMBER-NAME
begin at member MEMBER-NAME when reading the
archive
–newer-mtime=DATE 当只有数据改变时比较数据和时间
–no-null 禁用上一次的效果 --null 选项
–no-recursion 避免目录中的自动降级
–no-unquote 不以 -T 读取的文件名作为引用结束
–null -T 读取以空终止的名字,-C 禁用
-N, --newer=DATE-OR-FILE, --after-date=DATE-OR-FILE
只保存比 DATE-OR-FILE 更新的文件
–one-file-system 创建归档时保存在本地文件系统中
-P, --absolute-names 不要从文件名中清除引导符‘/’
–recursion 目录递归(默认)
–suffix=STRING 在删除前备份,除非被环境变量
SIMPLE_BACKUP_SUFFIX
覆盖,否则覆盖常用后缀(‘’)
-T, --files-from=FILE 从 FILE
中获取文件名来解压或创建文件
–unquote 以 -T
读取的文件名作为引用结束(默认)
-X, --exclude-from=FILE 排除 FILE 中列出的模式串
tar -cvf test.tar test/
#只打包目录内的文件,不包括目录本身
(1)
[root@localhost ~]# ll -dl test
drwxr-xr-x. 2 root root 20 3月 7 20:32 test
[root@localhost ~]# tar -zcvf test.tar.gz -C ./test ./ #-C指定要压缩的文件路径
[root@localhost ~]# tar -tvf test.tar.gz
drwxr-xr-x root/root 0 2023-03-07 20:32 ./
-rw-r--r-- root/root 0 2023-03-07 20:32 ./a.conf
(2)
[root@localhost ~]# cd test/
[root@localhost test]# tar -zcvf test.tar.gz ./
./
./a.conf
[root@localhost test]# ls
a.conf test.tar.gz
追加文件至归档,不支持对压缩归档追加
[root@localhost ~]# tar -tvf test.tar
drwxr-xr-x root/root 0 2023-03-07 20:32 test/
-rw-r--r-- root/root 0 2023-03-07 20:32 test/a.conf
[root@localhost ~]# tar -rf test.tar file
[root@localhost ~]# tar -tvf test.tar
drwxr-xr-x root/root 0 2023-03-07 20:32 test/
-rw-r--r-- root/root 0 2023-03-07 20:32 test/a.conf
-rw-r--r-- root/root 28 2023-03-07 09:25 file
查看归档文件中的文件列表
[root@localhost ~]# tar -tvf test.tar
drwxr-xr-x root/root 0 2023-03-07 20:32 test/
-rw-r--r-- root/root 0 2023-03-07 20:32 test/a.conf
-rw-r--r-- root/root 28 2023-03-07 09:25 file
split
用法:split [选项]… [输入 [前缀]]
-a, --suffix-length=N generate suffixes of length N (default 2)
–additional-suffix=SUFFIX append an additional SUFFIX to file names
-b, --bytes=SIZE put SIZE bytes per output file
-C, --line-bytes=SIZE put at most SIZE bytes of lines per output file
-d, --numeric-suffixes[=FROM] use numeric suffixes instead of alphabetic;
FROM changes the start value (default 0)
-e, --elide-empty-files do not generate empty output files with ‘-n’
–filter=COMMAND write to shell COMMAND; file name is $FILE
-l, --lines=NUMBER put NUMBER lines per output file
-n, --number=CHUNKS generate CHUNKS output files; see explanation below
#分割大的tar文件为多个小文件
[root@localhost test]# split -l 1 -d -a 3 test.tar.gz out
[root@localhost test]# ll
-rw-r--r--. 1 root root 14 3月 8 15:03 out000
-rw-r--r--. 1 root root 124 3月 8 15:03 out001
#合并split文件
[root@localhost test]# cat out00* > out.tar.gz
[root@localhost test]# tar -tvf out.tar.gz
drwxr-xr-x root/root 0 2023-03-07 20:32 ./
-rw-r--r-- root/root 0 2023-03-07 20:32 ./a.conf
sed
用法: sed [选项]… ‘script;script’ [输入文件]…
-n, --quiet, --silent
取消自动打印模式空间
-e 脚本, --expression=脚本
添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件
添加“脚本文件”到程序的运行列表
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
-r, --regexp-extended
在脚本中使用扩展正则表达式
-s, --separate
将输入文件视为各个独立的文件而不是一个长的连续输入
#使用-i选项时要注意,i要放在最后:
-ir 不支持
-ri 支持
-i -r 支持
-ni 危险选项,会将文件清空
‘地址 命令’
地址格式:
1.不给地址,对全文搜索
2.单地址:
n 指定行数,$表示最后一行
/pattern/ 被此处模式所能否匹配到的每一行
3.地址范围:
m,n 从m行到n行之间的内容,3,6
m,+n 从m行到开始往后再数n行的内容,3,+6表示第3到第9行
/pat1/,/pat2/ 第一次匹配到的pat1到最后一次匹配到pat2之间的内容
m,/pat/ 第m行到第一次匹配到pat的行的内容
/pat/,m 匹配到pat的行到第m行
4.步进: ~
1~2 奇数行
2~2 偶数行
命令:
p 打印当前模式空间内容,追加到默认输出之后
Ip 忽略大小写输出
d 删除模式空间匹配的行,并立即启用下一轮循环
a text 在指定行后面追加文本,支持使用\n追加多行
i text 在指定行前面插入文本
c text 替换为单行或多行文本
w file 保存模式匹配到的内容到指定文件
r file 读取指定文本的内容至匹配到的行后
= 为模式空间匹配的行加上行号
! 模式空间匹配行取反
q 结束或退出sed
[root@localhost ~]# seq 5 |sed -e '1d' -e '3d'
2
4
5
[root@localhost ~]# seq 5 |sed '1d;3d'
2
4
5
[root@localhost ~]#
#修改文件前备份
[root@localhost ~]# cat file
1
2
3
4
5
[root@localhost ~]# sed -i.bk '3d' file
[root@localhost ~]# cat file.bk
1
2
3
4
5
[root@localhost ~]# cat file
1
2
4
5
#取反操作
[root@localhost ~]# seq 5 | sed -n '1,3!p'
4
5
[root@localhost ~]#
#使用后向引用替换
[root@localhost ~]# sed -nr 's/^(r..t)/\1[abc]/gp' /etc/passwd
root[abc]:x:0:0:root:/root:/bin/bash
[root@localhost ~]#
#将“#”开头的行删除
cat /etc/profile | sed '/^#/s/^#//g'
#引用变量
[root@localhost ~]# a=3;echo |sed 's/^/$a/'
$a
[root@localhost ~]# a=3;echo |sed "s/^/$a/"
3
[root@localhost ~]#
awk
awk工作原理和基本用法
awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
-F 也支持正则表达式’
awk变量
FS:输入字段分隔符,默认为空白字符,功能相当于-F ,支持正则表达式
OFS:输出字段分隔符,默认为空白字符
RS:输入记录record分割符,指定输入时的换行符
ORS:输出记录分隔符,输出时用指定符合代替换行符
NF:字段数量
NR:记录编号
FNR:记录编号,当同时处理多个文件时对每个文件分别编号
[root@centos79 ~]# cat <<EOF| awk -v RS=";" '{ print $1}'
> a b c;e d e;1 2 3
> EOF
a
e
1
[root@centos79 ~]#
[root@centos79 ~]# cat <<EOF| awk -v RS=";" -v ORS="|" '{ print $1}'
a b c;e d e;1 2 3
EOF
a|e|1|[root@centos79 ~]#
printf
printf “指定的格式” “文本1” “文本2”…
常用的格式替换符
替换符 功能
%s 字符串
%d,%i 十进制整数
%f 浮点数
%c ASCII
%b 对应的参数中包含转义符时,可以使用此替换符进行替换,对应的转义符会被转义
%o 八进制
%x 十六进制(a-f)
%X 十六进制(A-F)
%ns,n代表占位宽度,-表示左对齐,不带-为右对齐
%03d,表示3位宽度,不足则用0在补齐,超过则原样输出
%.2f,保留2位小数
通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
#!/bin/bash
rabbit=$(echo "(80-30*2)/2"| bc) ;let chicken=30-$rabbit;printf "rabbchen:%s\n" $rabbit $chicken
结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
for i in {1..100};do id user$i &> /dev/null && echo user$i exist already || useradd user$i;echo user$i added successfully;done
磁盘术语
CHS
● head:磁头,磁头数=盘面数
● track:磁道,磁道数=柱面数
● sector:扇区,512bytes
● cylinder:柱面
MBR和GPT
使用磁盘空间过程
- 设备分区
- 创建文件系统
- 挂载新的文件系统
磁盘分区方式有两种:MBR和GPT
MBR
MBR:master boot record,1982年,使用32位表示扇区数,因此分区不超过2T
0磁道0分区:512bytes
● 446bytes:boot loader启动相关
● 64bytes:分区表,其中每16bytes标识一个分区
● 2bytes:55AA,标识位
MBR分区中一块硬盘最多有4个主分区,也可以3个主分区+1个扩展分区(N个逻辑分区)
MBR分区主和扩展分区对应的1-4,逻辑分区从5开始,/dec/sda5
GPT
GPT分区结构分为4个区域:
● GPT头
● 分区表
● GPT分区
● 备份区域
文件系统
创建文件系统
root@ubuntu1804:~# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=12800 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=0, rmapbt=0, reflink=0
data = bsize=4096 blocks=51200, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=855, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
查看和管理分区信息
root@ubuntu1804:~# blkid
/dev/fd0: SEC_TYPE="msdos" UUID="565C-617A" TYPE="vfat"
/dev/sr0: UUID="2023-02-28-12-11-26-00" LABEL="CDROM" TYPE="iso9660"
/dev/sr1: UUID="2021-09-15-20-41-58-00" LABEL="Ubuntu-Server 18.04.6 LTS amd64" TYPE="iso9660" PTUUID="7a857666" PTTYPE="dos"
/dev/sda2: UUID="747de01f-0aef-4389-8340-819b8b606fc9" TYPE="ext4" PARTUUID="659d3b1e-3aa6-4722-aaba-710f9c33ee47"
/dev/sda3: UUID="rm6KnU-nqMM-e32K-njMB-2Zvj-xSSF-dgQpyZ" TYPE="LVM2_member" PARTUUID="6ca0daf5-608d-4f18-896f-2eeb452fb21e"
/dev/mapper/ubuntu--vg-ubuntu--lv: UUID="adf02e58-74d6-4f1c-acf9-08b7024ab050" TYPE="ext4"
/dev/sda1: PARTUUID="aa6d75b1-d222-4b44-b12d-92f8ab20bc15"
挂载
mount [-fnrsvw] [-t fstype] [-o options] device dir
device:指令要挂载的设备
-f fstype 指定要挂载的设备上的文件系统类型,如ext4 xfs
-r readonly,只读挂载
-w read and write
-a 自动挂载所有支持自动挂载的设备(定义在了/etc/fstab文件中,且挂载项中有auto 功能)
-L ‘LABEL’ 以卷标指定挂载设备
-o options:(挂载文件系统的选项),多个选项使用逗号分隔
async 异步模式,内存更改时,写入buffer,过一段时间再写到磁盘
sync 同步模式,内存更改时,同时写入磁盘
auto/noauto 是否支持开机自动挂载
ro/rw 只读,读写
user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用
defaults 相当于rw,suid,dev,exec,auto,nouser,async
查看挂载情况
#通过查看/etc/mtab文件显示当前已挂载的所有设备
root@ubuntu1804:~# cat /etc/mtab
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=1972648k,nr_inodes=493162,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=401324k,mode=755 0 0
/dev/mapper/ubuntu--vg-ubuntu--lv / ext4 rw,relatime,data=ordered 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
.....
root@ubuntu1804:~# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
udev on /dev type devtmpfs (rw,nosuid,relatime,size=1972648k,nr_inodes=493162,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=401324k,mode=755)
/dev/mapper/ubuntu--vg-ubuntu--lv on / type ext4 (rw,relatime,data=ordered)
....
#查看内核追踪到的已挂载的所有设备
root@ubuntu1804:~# cat /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=1972648k,nr_inodes=493162,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,size=401324k,mode=755 0 0
/dev/mapper/ubuntu--vg-ubuntu--lv / ext4 rw,relatime,data=ordered 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
....
持久挂载
挂载保存到/etc/fstab中可以在下次开机时自动启动挂载
/etc/fstab的帮助通过man 5 fstab查询
每行定义一个要挂载的文件系统,其中包括6项:
- 要挂载的设备或伪文件系统
设备文件:LABEL/UUID/伪文件系统名称(proc,sysfs) - 挂载点:必须是事先存在的目录
- 文件系统类型:ext4,xfs,none
- 挂载选项:defaults,acl,bind
- 转储频率:0 不做备份;1 每天备份;2 每隔一天备份
- fsck检查的文件系统的顺序:0 不自检;1 首先自检,一般只有rootfs才用;2 非rootfs使用
交换分区实现过程
- 创建交换分区或文件‘
- 使用mkswap写入特殊签名
- 在/etc/ftab文件中添加条目
- 使用swapon -a激活交换空间
root@ubuntu1804:~# mkswap /dev/sdb3
Setting up swapspace version 1, size = 100 MiB (104853504 bytes)
no label, UUID=66f3da70-f7fc-4eac-8c16-e22b0edcc9e7
root@ubuntu1804:~# blkid /dev/sdb
/dev/sdb: PTUUID="fc128077" PTTYPE="dos"
root@ubuntu1804:~# blkid /dev/sdb3
/dev/sdb3: UUID="66f3da70-f7fc-4eac-8c16-e22b0edcc9e7" TYPE="swap" PARTUUID="fc128077-03"
root@ubuntu1804:~# vi /etc/fstab
UUID=66f3da70-f7fc-4eac-8c16-e22b0edcc9e7 swap swap defaults 0 0
root@ubuntu1804:~# swapon -a
root@ubuntu1804:~#
root@ubuntu1804:~# free -h
total used free shared buff/cache available
Mem: 3.8G 187M 2.9G 1.2M 781M 3.4G
Swap: 99M 0B 99M
禁用swap分区
root@ubuntu1804:~# sed -i.bk '/swap/d' /etc/fstab
root@ubuntu1804:~# swapoff -a
root@ubuntu1804:~# free -h
total used free shared buff/cache available
Mem: 3.8G 187M 2.9G 1.2M 782M 3.4G
Swap: 0B 0B 0B
RAID
RAID-0
以chunk为单位读写数据,将数据分别存放在两块硬盘上。因为读写时都可以并行处理
RAID-1
两块硬盘存储相同数据,实现冗余。读写数据略下降
RAID-5
数据分别放在多块磁盘,并将校验数据分布在不同磁盘,至少需要3块硬盘
RAID-10
先做RAID1,再做RAID0
RAID-01
现做RAID0,再做RAID1
比较各种RAID方案通过以下几个纬度考虑:
● 磁盘利用率
● 最少通过几块硬盘实现
● 容错性,能容忍几块硬盘实现
● 性能,读写效率