1、linux安全模型
- Linux中每个用户是通过UserID(UID)来唯一标识的
- Linux中可以将一个或多个用户加入用户组中,用户组是通过Group ID (GID)来唯一标识的
- 用户必须属于一个且只有一个主组
2、权限,属性及ACL相关命令及选项,示例。
文件的权限主要有 r w x
- r:只读权限
- w:写权限
- x:执行权限
ACL相关命令
1、设置lxp用户对文件具有读写的权限
[root@localhost data]# setfacl -m u:lxp:rw a.txt
[root@localhost data]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:lxp:rw-
group::r--
mask::rw-
other::r--
2、设置acl权限,使组lxp对a.txt文件有读写的权限
[root@localhost data]# setfacl -m g:lxp:rw a.txt
[root@localhost data]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:lxp:rw-
group::r--
group:lxp:rw-
mask::rw-
other::r--
3、删除组lxp的acl权限
[root@localhost data]# setfacl -x g:lxp a.txt
[root@localhost data]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:lxp:rw-
group::r--
mask::rw-
other::r--
4、删除所有的acl权限
[root@localhost data]# setfacl -b a.txt
[root@localhost data]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
3. 结合vim几种模式,学会使用vim几个常见操作。
1)打开文件(命令模式)之后,进入插入模式,编写一段话,“马哥出品,必属精品”, 之后从插入模式中如何回到打开文件的状态(命令模式),并在命令模式之后如何退出文件。
使用vim命令进入文件
[root@localhost data]# vim b.txt
打开文件 按i(在光标处)进入插入模式,要回到命令模式需要 按 ESC键,按 :q! 强制退出文件
2)使用cat命令验证文件内容,是刚刚自己写的内容。
[root@localhost data]# cat b.txt
马哥出品,必属精品
4. 文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
1、文本处理工具
-
cat:查看文本内容
-
hexdump:查看非文本内容
-
head:查看文本前面行
-
tail:查看文本后面行
-
cut:提取文件中指定内容
-
wc收集文本统计数据
-
sort文本排序
2、文件查找工具 -
locate:非实时查找,适合查找变化性弱的文件
-
find:实时查找
3、文本处理三剑客之grep
grep:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行
模式就是用正则表达式编写的过滤条件。
-b 在搜索到的行的前面打印该行所在的块号码。
-c 只显示有多少行匹配 ,而不具体显示匹配的行
-h 不显示文件名
-i 在与字符串比较的时候忽略大小写
-l 只显示包含匹配模板的行的文件名清单,不同项目之间用换行符分隔
-L 打印不匹配模板的文件名清单
-n 在每一行前面打印该行在文件中的行数
-s 静默工作,除非出现错误信息否则不打印任何信息,这个功能在检测退出状态的时候有用
-v 反检索,只显示不匹配的行
[root@localhost data]# grep lxp /etc/passwd
lxp:x:1000:1000:lxp:/home/lxp:/bin/bash
4、文本处理三剑客之sed
sed命令常见用法
-
sed [选项] ‘操作’ 参数
-
sed [选项] -f scriptfile 参数
常见的sed命令选项主要包含一下几种 -
-e 或–expression=:表示用指定命令或者脚本来处理输入的文本文件
-
-f 或–file=:表示用指定的脚本文件来处理输入的文本文件
-
-h 或–help:显示帮助
-
-n、–quiet 或 silent:表示仅显示处理后的结果
-
-i:直接编辑文本文件
输出 /etc/passwd文件中第5行内容
[root@localhost data]# sed -n '5p' /etc/passwd
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
输入设备存储状况以/dev/nvme 开头的行
[root@localhost data]# df |sed -n '/^\/dev\/nvme/p'
/dev/nvme0n1p2 104806400 2988420 101817980 3% /
/dev/nvme0n1p5 52403200 398412 52004788 1% /data
/dev/nvme0n1p1 1038336 212536 825800 21% /boot
5、文本处理三剑客之awk
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。
用法
-
awk [POSIX or GNU style options] -f progfile [–] file …
-
awk [POSIX or GNU style options] [–] ‘program’ file …
常见选项
-F"分隔符”指明输入时用到的字段分割符,默认为若干个连续空白符
-v var=value 变量赋值
6、格式化输出printf
printf命令模仿了C语言中的printf()函数。主要作用是输出文本,按照我们指定的格式输出文本。还有一个输出文本的命令echo,在输出文本时,echo会换行。printf命令不会对输出文本进行换行。可以使用 \n 。但是printf命令的优势是格式化文本
格式
printf [-v var] format [arguments]
格式替代符
%s 字符串
%f 浮点型
%b 相对应参数中包含转义字符时,可以使用此替换符进行替换,对应的转义字符被转义。
%c ASCII字符,显示想对应参数的第一个字符。
%d, %i 十进制整数
%o 不带正负号的八进制值
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a至f表示10到15
%X 不带正负号的十六进制值,使用A至F表示10到15
%% 表示 % 本身
5. 文本处理的grep命令相关的基本正则和扩展正则表达式。
1)基本正则表达式元字符:
字符匹配:
.:匹配任意单个字符
grep “r…t” /etc/passwd
[]:匹配指定范围内的任意单个字符
[^]:匹配指定范围外的任意单个字符
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]
匹配次数:用在要指定其出现的次数的字符的后面,用于限制其前面的字符出现的次数
*:匹配其前面的字符人一次;0,1,多次
.*:匹配任意长度的任意字符
\?:匹配其前面的字符0次或1次;即前面的字符是可有可无的;
\+:匹配其前面的字符1次或多次;即前面的字符要出现至少1次;
\{m\}:匹配前面的字符m次
\{m,n\}:匹配其前面的字符至少m次,至多n次;
\{0,n\}:至多n次
\{m,\}:至少m次
位置锚定:
^:行首锚定,用于模式的最左侧
$:行尾锚定;用于模式的最右侧
^PATTERN$:用于PATTERN来匹配整行
^$:空白行;
^[[:space:]]*$:空行或包含空白字符的行;
单词:非特殊字符组成的连续字符串(字符串)都称为单词;
\<或\b:词首锚定,用于单词模式的左侧
2)扩展正则表达式:
egrep:
支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E
egrep [options] patern [file..]
选项:
-i,-o,-q,-A,-B,-C
-G:支持基本正则表达式
扩展正则表达式的元字符:
字符匹配:
.:任意单个字符
[]:指定范围内的任意单个字符
[^]:指定范围外的任意单个字符
次数匹配:
*:任意次,0,1或多次;
?:0次或1次,其前的字符是可有可无的;
+:其前字符至少1次
{m}:其前的字符m次
{m.n}:至少m次,至多n次;
{0,n}
{m,}
位置锚定:
^:行首锚定;
$:行尾锚定;
\<,\b:词尾锚定;
>\,\b:词尾锚定
分组及引用:
():分组;括号内的模式匹配的字符会被记录于正则表达式引擎的内部变量中
后向引用:\1,\2,…
或
a|b:a或者b
C|cat:C或cat
(c|C)at:cat或Cat
6. 变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量命名规则:
直观可以拼读,望文得知意,便于记忆,采用英文单词或组合,不建议使用拼音
当标识符号由多个词组成时,每个词的第一个字母要大写,其余全部小写
在对多个文件之间共同使用的全局变量或函数一定要加范围限定符号
符号命名有两部分,规范标识符前缀(后缀)+含义标识,全局变量以g或g+模块缩写(大写)作前缀,后面跟第一个字母大写的变量名
1、环境变量
可以使子进程继承父进程的变量,但无法让父进程使用子进程的变量
一旦子进程修改从父进程继承的变量,将会有新的值传递给孙进程
一般只在系统配置文件中使用,脚本中较少使用
加export使子进程继承父进程变量
linux中常见的环境变量有:
1.PATH:指定命令的搜索路径
2.HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)
3.HISTSIZE:指保存历史命令记录的条数。
4.LOGNAME:指当前用户的登录名。
5.HOSTNAME:指主机的名称,许多应用程序如果要用到主机名的话,通常是从这个环境变量中来取得的。
6.SHELL:指当前用户用的是哪种Shell。
7.LANG/LANGUGE:和语言相关的环境变量,使用多种语言的用户可以修改此环境变量。
8.MAIL:指当前用户的邮件存放目录。
9.PS1:命令基本提示符,对于root用户是#,对于普通用户是$。
10.PS2:附属提示符,默认是“>”。
2、只读变量
只能声明定义,但后续不能修改和删除,即常量。
3、位置变量
在bash shell中内置的变量,在脚本代码中调用通过命令行行传递给脚本的参数。
$n:n为数字,$0代表命令本身,$1- 9 代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如 9代表带一个到第九个参数,十以上的参数需要使用大括号表示,比如{10}
∗ :这个变量代表命令行中所有的参数, *:这个变量代表命令行中所有的参数, ∗:这个变量代表命令行中所有的参数,*把所有的参数看成一个整体
$@:这个变量也代表命令行中所有的参数,是把每个参数却分对待
$#:这个变量代表命令行中所有参数的个数
4、局部变量
局部变量的作用域被限定在创建它们的shell中。local函数可以用来创建局部变量,但仅限于函数内使用。局部变量可以通过简单的赋予它一个值或一个变量名来设置,用declare内置函数来设置,或者省略也可。
格式:
变量名=值
5、状态变量
进程执行后,将使用变量 $ ?保存状态码相关数字,不同的值反应成功或者失败,$?取值范围0-255
$?的值为0 代表成功
$?的值为1-255 代表失败
7. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
shell脚本
#!/bin/bash
HEAD=$1
FOOT=$2
RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHOOK=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK
执行结果:
[root@localhost data]# bash chook_rabbit.sh 30 80
RABBIT:10
CHOOK:20
8. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1…100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
#!/bin/bash
for i in `seq 100`
do
grep "user_$i" /etc/passwd &> /dev/null
if [ $? -ne 0 ];then
useradd user_$i &> /dev/null
echo "user_$i" >> /root/user_name
echo "user_$i" | passwd user_$i --stdin &> /dev/null
echo "user_$i 创建成功"
else
echo "user_$i 用户以存在,创建失败"
fi
done
9. 磁盘存储术语总结: head, track, sector, sylinder.
- head: 磁头 磁头数=盘面数
- track:磁道 磁道=柱面数
- sector: 扇区,512bytes
- cylinder:柱面 1柱面=512sector数/trackhead数=51263255=7.84M