1.linux安全模型
资源分派:
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计
当用户登录成功时,系统会自动分配令牌 token,包括:用户标识和组成员等信息。
2.权限属性及ACL相关命令及选项
Linux 系统是一个典型的多用户系统,不同的用户处于不同的地位。为了保护系统的安全性,Linux系统对不同用户访问同一文件的权限做了不同的规定。
对于一个 Linux 系统中的文件来说,它的权限一般可以分为三种:读的权限、写的权限和执行的权限,分别用 r、w 和 x 表示。不同的用户具有不同的读、写和执行的权限。
对于一个文件来说,它都有一个特定的所有者,也就是对文件具有所有权的用户。同时,由于在Linux系统中,用户是按组分类的,一个用户属于一个或多个组。文件所有者以外的用户又可以分为文件所有者的同组用户和其它用户。因此,Linux 系统按文件所有者、文件所有者同组用户和其它用户三类规定不同的文件访问权限。
Linux中的文件能否被访问和工具(程序)无关,和访问的用户身份有关(谁去运行这个程序)
进程的发起者(谁去运行这个程序)。
进程的发起者若是文件的所有者: 拥有文件的属主权限
进程的发起者若属于文件属组:拥有文件的属组权限
应用文件“其它”权限
3.vim模式和常见操作
三大模式:命令模式、插入模式、扩展命令模式
常见操作:
(1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
vim file.txt #打开文件
ZZ #保存退出
ZQ #不保存退出
(2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
vim file #打开文件
i #输入i,进入插入模式
esc #esc键从插入模式切换到命令模式
ZZ #保存退出
ZQ #不保存退出
(3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
vim file.txt #打开文件
a #进入插入模式
马哥出品,必属精品 #编辑内容
esc #esc键从插入模式回到命令模式
ZZ #保存退出
(4)使用cat命令验证文件内容,是刚刚自己写的内容。
cat file.txt
(5)命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
单词上跳转:
w:下个单词词首跳转
e:当前或跳转到下个单词的词尾
b:当前或前一个单词的词首
行上跳转:
0:跳转至行首
^:跳转至非空白字符行首
$:跳转至行尾
G:最后一行
4G:第4行
yy:复制多行
p:粘贴
dd:删除行
4.文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项
cat:——————tac:
-E:显示结束符$
-A:显示所有控制符
-n:对显示出的行进行编号
-b:非空行编号
-s:压缩连续的空行成一行
more:分页查看
q:退出
less:分页查看
head:显示文件前10行
head -n -k:
tail:显示文件后10行
tail -n -k:
tail -f /var/log/.. -n0
cut:取列信息
cut -d: -f1,3 /etc/passwd
cut -c44-46
paste:横向合并文件
paste a.txt aa.txt
wc:统计文件
sort:排序
sort -u:去重
sort -t: -k3 /etc/passwd -t分割选项
uniq:相邻去重 uniq -c:统计去重
cut -d" " -f1 nginx.log |sort |uniq -c |sort -nr| head
cat f1.txt f2.txt |sort |uniq -d #文件相同内容 grep -f f1.txt f2.txt
cat f1.txt f2.txt |sort |uniq -u #文件不同内容
diff:比较文件
diff -u:详细比较文件
diff -u f1.txt f2.txt > diff.log :比较文件生成日志
patch:
patch -b f1.txt diff.log 通过日志恢复文件
vimdiff: == vim -d
5.文本处理的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.变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)使用方法
环境变量:
声明变量和赋值:
export name=value
declare -x name=value
变量引用:
$name
${name}
查看进程的环境变量:
cat /proc/$PID/environ
删除变量:
unset name
只读变量:
声明变量:
readonly name
declare -r name
查看只读变量:
readonly [-p]
位置变量:
$1,$2,...对应参数位置
$0 命令本身,包括路径
$* 传参,全部参数合为一个字符串
$@ 传参,每个参数为独立字符串
$# 传参个数
状态变量:
$? 值为0 表示成功
$? 值为1~255 表示失败
7.通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
#!/bin/bash
HEAD=$1
FOOT=$2
RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHOOK=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK
[12:36:38 root@lgxtest1 data]#./rabbit.sh 30 80
RABBIT:10
CHOOK:20
8.结合编程的for循环,条件测试,条件组合,完成批量创建100个用户
#!/bin/bash
for user in {1..100};do
id $user &>/dev/null && echo $user is exist || { useradd $user;echo $user is created; }
done
9.磁盘存储术语总结: head, track, sector, sylinder.
head 磁头 磁头数=盘面数
track 磁道 磁道=柱面数
sector 扇区 521 bytes
cylinder 柱面 1柱面=512*sector数/track*head数=512*63*255=7.84M
10.MBR,GPT结构
MBR分区策略:一个硬盘最多有4个主分区,也可以3个主分区+1个扩展(N个逻辑分区) 分区不超过2T
0磁道0扇区:512 bytes
446字节:boot loader启动相关
64字节: 分区表,其中每16字节描述一个分区
2字节:55AA标记位
GPT分区策略:支持128个分区,自动备份分区表
4个区域:
GPT头
分区表
GPT分区
备份区域
11. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
磁盘分区操作:1.设备分区fdisk 2.创建文件系统mkfs.ext4|xfs 3.挂载新的文件系统mount /dev/nvme0n1 /dir
lsblk -f
blkid 查看分区UUID
1.创建磁盘分区:
echo '- - -' > /sys/class/scsi_host/host0/scan ------内核自动监测硬盘
parted:非交互方式实时生效
parted /dev/nvme0n2 mklabel msdos|gpt -----------创建分区策略方式
parted /dev/nvme0n2 print ----------------------打印分区信息
parted /dev/nvme0n2 mkpart primary 1 300 --------设置分区大小(默认M)
parted /dev/nvme0n2 rm 2 ------------------------删除分区
lsblk | lsblk -l --------------------------------列出分区信息
fdisk/gdisk(gpt):交互式
fdisk /dev/nvme0n2 -----------------------------m获取帮助
gdisk /dev/nvme0n2 -----------------------------?获取帮助
cat /proc/partitions ---------------------------查看内核是否已经识别新的分区
partprobe --------------------------------------同步分区表
2.在分区上创建文件系统:
mkfs.ext4 /dev/nvme0n2p1 ---------------------------在分区上创建.ext4文件系统 ext4、xfs
blkid /dev/nvme0n2p1 -------------------------------查看信息 BLOCK_SIZE(块)
tune2fs -l /dev/nvme0n2p1 --------------------------查看元数据属性信息 (xfs_info)
修复文件系统:
dd if=/dev/zero of=/dev/nvme0n2p5 bs=1M count=1 -----模拟破坏文件系统
umount /mnt ----------------------------------------取消挂载
e2fsck /dev/nvme0n2p5 -y ---------------------------自动回答监测修复ext系列文件系统
xfs_repair -----------------------------------------xfs系列文件系统修复
3.挂载 mount | umount vim /etc/fstab(永久保存)
同一个设备可以同时挂载到多个挂载点
一个挂载点不能同时挂载多个设备
mount /dev/nvme0n2 /mnt ----------------------------临时挂载
vim /etc/fstab --------------------------------------修改配置文件(永久挂载)
mount -a -------------------------------------------读取/etc/fstab中配置的挂载信息
fuser -v /data/mysql -------------------------------查看进程使用
ps aux ---------------------------------------------查看进程
swap 分区
# cat /proc/sys/vm/swappliness ----------当内存还有30%可以时开启swap
修改阈值 echo 0 > /proc/sys/vm/swappliness
禁用swap: vim /etc/fstab 注释掉swap
禁用swap
# swapon -s
# swapoff filename
mkswap /dev/nvme0n2 创建swap文件系统
swapon -a 生效swap
mount /dev/cdrom /mnt
12.总结raid 0, 1, 5, 10, 01的工作原理。总结各自的利用率,冗余性,性能,至少几个硬盘实现。
RAID0,1,5,6,10,01级别区别
工作原理:磁盘阵列,利用虚拟化存储技术把多个硬盘组合起来,成为一个或者多个硬盘阵列组,目的为提升性能或数据冗余,或者两者同时提升
RAID 0: 读写同时并行处理
读写性能提升、无容错能力、至少磁盘数1+
RAID 1:互作镜像
读性能提升,写性能略有下降、磁盘利用率50%、有冗余你能力、至少磁盘数2+
RAID 5:
读写性能提升、有容错能力,允许最多坏一块磁盘,至少磁盘数 3,3+
RAID 6:
读写性能提升,有容错能力,最多坏2块磁盘,至少4,4+
RAID 10
读写性能提升、每组镜像最多坏一块,至少4,4+