1. 总结linux安全模型
通过认证、授权、审计实现资源分配;
用户:linux 中每个用户是通过UserID来唯一标识的;
用户组:Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID(GID) 来唯一标识的。
用户的主要组(primary group):用户必须属于一个且只有一个主组,默认创建用户时会自动创建和用户名同名的组,做为用户的主要组,由于此组中只有一个用户,又称为私有组
用户的附加组(supplementary group): 一个用户可以属于零个或多个辅助组,附属组
Linux安全上下文:运行中的程序,即进程,以进程发起者的身份运行,进程所能访问资源的权限取决于进程的运行者身份
2. 总结学过的权限,属性及ACL相关命令及选项。
权限:r读 w写 x执行,针对控制普通用户
修改文件所有者:chown 修改为 文件
修改文件所有组:chgrp
ll命令文件权限顺序:用户 组 其他
修改文件权限(分配权限:u\g\o\a;操作:+-=;权限:r w x):
chmod o+w a.txt(模式法)
r=4 w=2 x=1
chmod 760 a.txt(数字法,wrx rw- ---)
注意:创建删除文件权限为目录写执行权限控制
对目录下文件夹给予执行权限,文件不给予:chmod -R a+X /data
新建默认权限(root的umask默认022,其他默认002)修改:通过umask的值
文件:666-umask=默认,如果所得结果某位存在执行(奇数)权限,则将其权限+1,偶数不变
目录:777-umask=默认
持久保存umask
全局设置(所有用户):/etc/bashrc
用户设置(当前用户):-/.bashrc
特殊权限
SUID:作用于二进制可执行文件,用户将继承程序所有者权限,4
SGID:作用于二进制可执行文件,用户将继承程序所有组权限;作用在目录上,目录中新建文件的所属组将自动从此目录继承,2
Sticky (粘滞位):作用于目录,此目录中的文件只能由所有者自己来删除,1
ACL:实现灵活的权限管理,除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
设置ACL规则(针对单一用户或组设置):setfacl -m修改 u:用户名:权限 文件,常用选项如下:
-m:设置后续的ACL参数给文件使用,不可与-x一起使用;
-x:删除后续的ACL参数,不可与-m一起使用;
-b:删除所有的ACL设置参数;
-k:删除默认的ACL参数;
-R:递归设置ACL,就是包括子目录都会被应用;
-d:设置默认ACL参数,只对目录有效,在该目录新建的数据会引用此默认值;
查看设置的ACL规则:getfacl 文件名 ;
3. 结合vim几种模式,学会使用vim几个常见操作。
1)如何打开文件。并在打开文件(命令模式)之后如何退出文件。
打开文件:vim /文件路径/文件名
退出文件:命令模式下,ZZ为保存退出,ZQ为不保存退出。或使用命令行模式退出,冒号为进入命令行模式,如下:
:wq -保存文件,退出 vim
:wq! -强制保存文件,退出 vim
:q -不保存文件,退出 vim
:q! -不保存文件,强制退出 vim
:x -保存文件,退出 vim
2)打开文件(命令模式)之后,进入插入模式。并在插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
打开文件后,输入i进入插入模式,在插入模式esc回到命令模式,退出文件方式参照上一问题。
3)打开文件(命令模式)之后,进入插入模式,编写一段话,"马哥出品,必属精品", 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
步骤同上述两个问题,在插入模式时输入"马哥出品,必属精品",esc回到命令模式,:wq!强制保存退出。
4)使用cat命令验证文件内容,是刚刚自己写的内容。
5)(可选),命令模式下,光标在单词,句子上进行前后,上下跳转。行复制粘贴。行删除。
字符间:h左l右j下k上(前可以输数字,代表移动几个字符)
单词间:w下一个单词词首e当前或下一单词词尾b当前或上一单词词首(前可以输数字,代表移动几个单词)
句间移动:)下一句(上一句
复制整行:Y或者yy
删除光标所在行:dd
粘贴命令:P 缓冲区存的如果是整行,则粘贴当前光标所在行的上方,否则,则粘贴到当前光标所在处的前面;p 缓冲区存的如果是整行,则粘贴当前光标所在行的下方,否则,则粘贴到当前光标所在处的后面
4. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项。
1.文件内容查看命令
查看文本文件内容:cat
-A 显示不显示字符
-n 带行号,空行也有行号
-b 带行号,空行不加行号
-s 压缩连续的空行成一行
-E 显示行结束符
显示行号:nl(相当于cat -b)
行逆向显示文本内容:tac
逆向显示文本内容(同一行):rev
查看非文本文件内容:hexdump
2.分页查看文件内容(可通过管道配合)
more(退出时ctrl+b;到底退出)
less(到底不退出)ls 文件(目录) |less
3.显示文本前面或后面的行内容
显示文件或标准输入的前面行(默认前十行):head -n # 文件
显示文件或标准输入的后面行(默认后十行):tail - n # 文件
4.按列抽取文本
截取部分列显示:cut 例:cut -d: -f1,3 文件路径,其中:为分隔符,取文件中第一列,第三列
5.合并多个文件(横向合并)
paste -d: a.txt b.txt(:作为分隔符将a\b分开)
paste -s(将纵向输出改为横向输出)
纵向合并:cat a.txt b.txt
6.分析文本工具
文本数据统计:wc(行 列 词数)
整理文本:sort(默认首字母排序,-t 指定分隔符,-n认为是数字,-k#第几列,-r倒序,-R随机排序,-u合并重复项)
文件内部去重(相邻):uniq(-c 重复了几次,-d仅显示重复的行,-u仅显示不重复的)
比较文件:diff(显示不一样的部分,-u更为详细)
patch -b(复制在其他文件中进行的改变)
vimdiff(相当于vim -d)
cmp(比较二进制文件的不同)
7.文件查找工具
find 路径 -选项 [ -显示 ] (目录结构中)
grep (过滤,查找文件里符合条件的字符串)
-a : 不要忽略二进制的数据。
-A<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
-b : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
-B<显示行数>: 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c 或 : 计算符合样式的列数。
-C<显示行数> =<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
-d <动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
-e<范本样式> : 指定字符串做为查找文件内容的样式。
-E 或: 将样式为延伸的正则表达式来使用。
-f<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
-F : 将样式视为固定字符串的列表。
-G : 将样式视为普通的表示法来使用。
-h : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
-H : 在显示符合样式的那一行之前,表示该行所属的文件名称。
-i : 忽略字符大小写的差别。
-l : 列出文件内容符合指定的样式的文件名称。
-L : 列出文件内容不符合指定的样式的文件名称。
-n : 在显示符合样式的那一行之前,标示出该行的列数编号。
-o : 只显示匹配PATTERN 部分。
-q : 不显示任何信息。
-r : 此参数的效果和指定"-d recurse"参数相同。
-s : 不显示错误信息。
-v : 显示不包含匹配文本的所有行。
-V : 显示版本信息。
-w : 只显示全字符合的列。
-x : 只显示全列符合的列。
-y : 此参数的效果和指定"-i"参数相同。
8.文件处理命令
sed [选项] ‘处理动作’ 文件 (利用脚本来处理文本文件)
-e<script>:以选项中指定的script来处理输入的文本文件。
-f<script文件> :以选项中指定的script文件来处理输入的文本文件。
-i:直接修改文件内容(危险操作)
-h:显示帮助。
-n:仅显示script处理后的结果。
-V: 显示版本信息。
8.文本分析工具
awk
-F :指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
-v :赋值一个用户定义变量。
-f :从脚本文件中读取awk命令。
-mf:对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
9.文本格式化
printf [选项] 输出格式 [参数]
5. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
基本正则表达式的元字符:
字符匹配:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[0-9], [[:digit:]]:指包含数字字符
[a-z], [[:lower:]]:指包含小写字符
[A-Z], [[:upper:]]:指包含大写字符
[[:space:]]:指空白字符
[[:punct:]]:指特殊字符 标点符号等
[[:alpha:]]:指包含所有的大小写字符
[[:alnum:]]:指包含所有的大小写字符和数字字符
[^]:匹配一个不在指定范围内的字符
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
*: 任意长度,它前面的字符可以出现任意次
\?: 0次或1次,它前面的字符是可有可无的
\{m\}: m次,它前的字符要出现m次
\{m,n\}: 至少m次,至多n次
\{m,\}: 至少m次
位置锚定:
^:行首锚定:指写在模式最左侧
$:行尾锚定:指写在模式最右侧
^$:指空白行
不包含特殊字符的连续字符组成的串叫单词:
\<:词首,出现于单词左侧,\b
\>:词尾,出现于单词右侧, \b
分组引用:
:分组
\#: 引用第n个 括号所匹配到的内容,而非模式本身
扩展正则表达式的元字符:
字符匹配:
.: 匹配任意单个字符
[]: 匹配指定范围内的任意单个字符
[0-9], [[:digit:]]:指包含数字字符
[a-z], [[:lower:]]:指包含小写字符
[A-Z], [[:upper:]]:指包含大写字符
[[:space:]]:指空白字符
[[:punct:]]:指特殊字符 标点符号等
[[:alpha:]]:指包含所有的大小写字符
[[:alnum:]]:指包含所有的大小写字符和数字字符
[^]:匹配一个不在指定范围内的字符
次数匹配元字符:用于实现指定其前面的字符所能够出现的次数
*: 任意长度,它前面的字符可以出现任意次
\?: 0次或1次,它前面的字符是可有可无的
\{m\}: m次,它前的字符要出现m次
\{m,n\}: 至少m次,至多n次
\{m,\}: 至少m次
位置锚定:
^:行首锚定:指写在模式最左侧
$:行尾锚定:指写在模式最右侧
^$:^$,^[[:space:]]*$ 指空白行
不包含特殊字符的连续字符组成的串叫单词:
\<:词首,出现于单词左侧\b
\>:词尾,出现于单词右侧\b
分组引用:
:分组
\#: 引用第n个 括号所匹配到的内容,而非模式本身
或者:
|:表示或者
6. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
#!/bin/bash
read -p "请输入头的数量:" head
read -p "请输入脚的数量:" foot
rabbit=$[(foot-head-head)/2]
chicken=$[head-rabbit]
echo "笼中有鸡$chicken只,有兔子$rabbit只。"