1. 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
(1)常用文本处理工具:
cat[option]...[file]...:查看文本内容
常见选项: -A 显示所有控制符 -n:对显示出每一行进行编号
例:cat f1.txt
w
b
c d
cat -nE f1.txt
1 w$
2 b $
3 c d$
4 $
5 $
more(less):分页查看文件,可配合管道使用
head:可显示文件或标准输入的前面行 tail:查看文件或标准输入的倒数行
cut:提取文本文件或标准输入数据的指定列
wc:文本数据统计 -l 只计数行数 -w 只计数单词总数
sort:整理文本 -n 执行按数字大小整理 -r 执行反方向(由上至下)整理
(2)文本查找工具
locate:非实时查找,查询系统上预建的文件索引数据库,索引构建过程需遍历整个根文件系统,消耗资源。查找速度快,模糊查找,
find:实时查找,通过遍历指定路径完成文件查找。查找速度较慢,精确查找,可根据文件名和inode查找(如 -name‘文件名称’等),根据属主、属组查找(如 -user/-group等),根据文件类型查找(type,如 -f -d等),根据文件大小,时间戳,权限查找。
(3)文本处理三剑客
grep:文本搜索工具
常见选项: -v(取反) -o(仅显示匹配到的字符串) -n(显示匹配的行号)-c(统计匹配的行数) -e(实现多个选项间的逻辑or关系)
sed:文本编辑工具
常见选项:-n(不自动打印) -f 从指定文件中读取编辑脚本 -r -E 使用扩展正则表达式 -i.bak 备份文件并原处编辑
查找替代:s/// s@@@ s###
awk 教学暂跳过没讲。
printf可以实现格式化输出。
printf "FORMAT",item1,itme2.. 必须指定FORMAT.
常用格式替换符 %s:显示字符串 %f:显示为浮点数
%#s中的数字代表此替换符中的输出字符宽度,不足补空格,默认右对齐,%-10s表示10个字符宽度,-表示左对齐。
常用转义字符 \n 换行
2. 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
(1)基本正则表达式
字符匹配
. 匹配任意单个字符 ,如一个字母、汉字、数字等
[ ] 代表指定范围内的任意单个字符 [^] 排除[ ]中字符以外的字符
[:alnum:] 大小写字母和数字 [:alpha:] 任何英文大小写字母 [:lower:] 小写字母
[:blank:] 空格和tab [:punct:] 标点符号
匹配次数
* 匹配*前面的字符出现了任意次,包括0次 .* 任意长度的任意字符
\? 匹配前面的字符1或0次 \+ 匹配前面的字符至少1次
\{n\} 匹配前面的字符n次 \{m,n\} 匹配前面的字符至少m次,至多n次
位置锚定
^ 行首锚定,用于模式的最左侧 $ 行尾锚定,用于模式的最右侧 ^$ 空行
^[[:space:]] 空白行 ^PATTERN$ 用于模式匹配整行
\| 或者
(2)扩展正则表达式
用法与基本正则表达式大致相同,只是不再使用\这种转义符,比如?即代表匹配1次或0次,+代表至少1次,a|b代表a或b。
3. 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
命名要求:(1)区分大小写 (2)不能使程序中的保留字和内部变量 (3)只能使用数字、字母和下划线,且不能用数字开头,不支持短横线
命名习惯:(1)用英文单词命名,不要用简写 (2)变量名大写 (3)局部变量小写 (4)函数名小写 (5)大驼峰,多个单词组成,且每个单词首字母大写,其他小写 (6)小驼峰,多个单词组成,第一个单词的首字母小写,后续单词首字母大写,其他小写 (7)下划线
环境变量:可以使子进程(包括孙子进程)继承父进程的变量,但是不能让父进程继承子进程的变量;一旦子进程修改从父进程继承的变量,将会把新的值传给孙子进程。
只读变量:只能声明定义,但后续不能修改和删除。
位置变量:在bash shell中内置的变量,在脚本代码中调用通过命令行传递给脚本的参数。$1,$2对应第1,2个参数,$0表示命令本身,包括路径。
状态变量:$?会保存最近一次执行的命令的状态结果。范围是0-255的整数,其中0表示前一个命令执行成功,1-255表示失败。
4. 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
vim rabbit_chook.sh
#!/bin/bash
HEAD=$1
FOOT=$2
RABBIT=$(((FOOT-HEAD-HEAD)/2))
CHOOK=$[HEAD-RABBIT]
echo RABBIT:$RABBIT
echo CHOOK:$CHOOK
bash rabbit_chook.sh 30 80
RABBIT:10
CHOOK:20
5. 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
vim useradd.sh
#!/bin/bash
for i in `seq 100`;do
if id user$i &> /dev/null
then
echo "user$i用户已存在"
else
useradd user$i
echo "user$i用户已创建"
fi
done
6. 磁盘存储术语总结: head, track, sector, cylinder.
head:磁头 磁头数=盘面数
track:磁道 磁道=柱面数
sector:扇区,1个扇区512bytes大小
cylinder:柱面
7. 总结MBR,GPT结构。
MBR:分区不超过2T。一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)。MBR格式的磁盘主分区号从1-4,扩展分区号从2-4,逻辑分区号从5开始。
GPT:不再限制只能存储4个分区表条目,允许有128个主分区,可以对超过2TB的磁盘进行分区。
在MBR磁盘上,分区和启动信息是保存在一起的,如果这部分数据被覆盖或破坏,只能重建MBR。而GPT在整个磁盘上保存多个这部分信息的副本,因此可以恢复被破坏的这部分信息,更为安全。
8. 总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
fdisk 管理MBR分区
子命令: -p 打印现有分区列表 -n 创建新分区 -d 删除分区 -w 保存退出 -q 不保存退出
例:fdisk /dev/sdb ——(交互式)按n创建新分区——按p(primary)创建主分区——在1-4中选择分区编号,默认即可(数字1)——输入起始扇区号,默认即可——输入结束扇区号,一般直接指定第一个分区的大小,如+10G即可——按以上步骤,根据需要分别创建第2和第3个分区——保存退出——partprobe /dev/sdb(通知内核读取更新的分区表,从而识别新的分区)——
cat /proc/partitions(查看分区表是否更新)
parted 实时生效,非交互式,较少使用。
例:parted /dev/sdb rm 1 直接删除了该硬盘的第1分区
mkfs:mkfs.FS_TYPE /dev/DEVICE 创建文件系统
选项:-t 指定文件系统类型
mount [OPTIONS] DEVICE DIR DEVICE:挂载的设备 DIR:挂载点,必须存在,建议为空目录
-t fstype 要挂载的设备上的文件类型 -r 只读挂载 -w 读写挂载 -a 自动挂载所有支持自动挂载的设备
-o options remount 重新挂载 ro/rw 只读 读写
umount 设备名或挂载目录
例:mkfs.xfs /dev/sdb1——mkdir /logs——mount /dev/sdb1 /logs
tune2fs -l /dev/DEVICE 可以查看ext文件系统相关属性
xfs_info 挂载点|设备名 显示已挂载的xfs文件系统信息
fsck 可以检测并修复某些文件系统错误,但不要在挂载状态下修复。 fsck.FS_TYPE DEVICE
-a 自动修复 -r 交互式修复错误
SWAP交换分区是系统RAM的补充,SWAP分区支持虚拟内存,当没有足够的SWAP保存系统处理的数据时会将数据写入SWAP分区,当系统缺乏SWAP空间时,内核会因RAM内存耗尽而终止进程。
系统中的RAM量 推荐的SWAP空间
低于2G RAM量的2倍
2G——8G 等于RAM量
8G——64G 4G到RAM容量的0.5倍
超过64G 独立负载(至少4G)
交换分区实现过程
创建交换分区或文件——格式化为SWAP分区 mkswap——在 /etc/fstab文件中添加适当的条目,开机自动加载SWAP分区——使用swapon -a激活交换分区
swapoff -a 取消SWAP分区空间
swapon -p可以指定交换分区的优先级,值越大优先级越高。
swap的使用策略: /proc/sys/vm/swappiness的值决定了当内存占用达到一定的百分比时,会启用swap分区的空间。当内存使用率达到100-swappiness时,会启用交换分区。可以设为0,最大限度降低使用swap的可能性。