- 总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
文本处理工具: cat : 查看文件内容。 -E : 显示行结束符$。 -A : 显示所有控制符。 -n : 对显示的每一行进行编号。 -b :非空行编号。 -s :压缩连续的空行成一行。
cut :按列提取文本中的字段。
tr :替换或删除字符串的字符。
-d 或 --delete :删除输入中所出现指定字符的所有字段。
-s 或 --squeeze-repeats:将每个输入信息中重复出现的字符替换为单个字符。
-c 或 -C 或 --complement:使用集合的补集进行转换或删除操作。
-t :替换,使用替换时确保两个字符集的长度一致,如果目标集合的字符少于源集合, 那么最后一个字符将被重复使用直到长度匹配。
-dc :删除补集的字符。
sort :排序
-n 或 --numeric-sort :根据字符串的数值部分进行排序。
-r 或 --reverse :反向排序(从高到低)。
-f 或 --ignore-case :忽略大小写差异。
-u 或 --unique :删除重复的行,只保留唯一的行。
-o[FILE] :将排序结果输出到指定的文件。
-k[#] :以给定的分隔符后的第#列进行排序,默认是空白字符为分隔符。
-t[CHAR] :指定分隔符,默认是空白字符。
- uniq :报告或省略重复的行。 -c :显示每行在文件中出现的次数。 -d :仅显示重复行。 -u :仅显示不重复行。 -i :比较行是忽略大小写。
- wc :计算行、单词和字符的数量。 -l :计算行数。 -w :计算单词。 -c :计算字节数。 -m :计算字符数。
- nl :文件中的行编号。相当于cat -b -b :指定编号的方式。 -b a :所有行的编号。 -b t :仅为非空行编号。 -n :设置行号的格式。
- ln :左对齐。
- rn :右对齐。
- rz :右对齐,前导零。 -w :设置行号字段的宽度。 -s :设置行号后的分割字符。 -v :设置起始行号。
- tac :用于方向打印文件内容(从最后一行到第一行)。 -b :在每一行的前面而不是后面的附加分隔符。 -r :将分隔符视为正则表达式。 -s :使用一个字符串作为分隔符,默认情况下分隔符的换行符。
- tee :从标准输入读取数据,并同时写入标准输出和一个或多个文件。 -a 或 --append :不覆盖现有文件,而是将输出追加到文件中。 -i 或 --ignore-interrupts :忽略中断信号。
rev : 将一行的内容逆向显示
hexdump : 查看非文本文件内容
less : 实现分页显示内容
head : 显示文本前面或后面的行内容
-n# 显示前#行
-n -# 除了最后#行其他都显示
tail : 显示文件的倒数10行
-n# 显示最后#行
-f 跟踪显示文件信息
-n +# 除了前#行,显示其他行
paste : 合并多个文件
-d 指定分隔符,默认用TAB
-s 所有行合成一行显示
locate : 非实时查找(数据库查找)
-i 不区分大小写
-n # 只列举前#个匹配项目
-r 使用基本正则表达式
find : 实时查找
文本处理三剑客 grep : 命令主要对文本的(正则表达式)行基于模式进行过滤 sed : 文本编辑工具 awk : 文本报告生成器
文本三剑客 :grep
-color=auto 对匹配到的文本着色显示
-m # 匹配#次后停止
-v 显示取反的结果
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # 后#行
-B # 前#行
-C # 前后#行
-e 实现多个选项间的逻辑or关系,如:grep -e 'cat' -e 'dog' filename
-w 匹配整个单词
-E 相当于egrep
-F 不支持正则表达式
-P 支持正则表达式
-f file 根据模式文件处理
-r 递归目录,不处理软连接
-R 递归目录,处理软连接
文本三剑客 :sed
-n 不输入模式空间内容到屏幕。不自动打印
-e 多点编辑
-f file 从指定文件中读取编辑脚本
-r,-E 使用扩展正则表达式
-i.bak 备份文件并原处编辑
-s 将多个文件视为独立文件,而不是单个连续的长文件流
文本三剑客 :awk
-F "分隔符"表明输入时用到的字段分隔符,默认是分隔符是若干个连续空白符
-v var=value 赋值变量
- 总结文本处理的grep命令相关的基本正则和扩展正则表达式。
grep :文本搜索工具,使用正则表达式来匹配文本。
在grep中有两种类型的正则表达式:
基本正则表达式(Basic Regular Expressions,BRE) 拓展正则表达式(Extended Regular Expressions,ERE)
基本正则表达式:
^ :匹配行的开始。
$ :匹配行的结尾。
- . :匹配任意当个字符。 * :匹配前一个字符0次或多次。 [] :匹配方括号内的任意一个字符。 [:alnum:] : 字母和数字 [:alpha:] : 大小写英文字母,亦即A-Z,a-z [:lower:] : 小写字母 [:upper:] : 大写字母 [:space:] : 包括空格、制表符和回车符号等各种类型的空白字符,包含范围比[:upper:]广。 [:cntrl:] : 不可打印的控制字符(退格、删除、警铃……) [:digit:] : 十进制数字 [:xdigit:] : 十六进制 [:graph:] : 可打印的非空白字符 [:print:] : 可打印字符 **[:punct:] : 标点符号
\ :转义字符,使用特殊字符变为普通字符。
\s : 匹配任何空白字符,包括空格、制表符、换页等等。等价于[\f \r \t \v]。注意unicode正则表达式会匹配全角字符空格符
\w :匹配一个字母、数字、下划线、汉字和其他国家文字的字符,等价于[:alnum:]
\W :匹配一个非字母、数字、下划线、汉字和其他国家文字的字符,等价于[:alnum:]
匹配次数 :用在指定次数的字符后面,用于指定前面的字符要出现的次数
. : 任意长度的任意字符
? :前面的字符出现0次或一次,即:要么有要么无
+ :前面的字符出现最少1次,即:肯定有且>=1次,
{n} :匹配前面的字符n次
{m,n} :匹配前一个字符至少m次,至多n次。
{,n} :前面的字符至多n次。<=n
{n,} : 前面的字符至少n次
位置锚定 :用于定位出现的位置
^ : 行首锚定,用于模式的最左侧。
$ : 行尾锚定,用于模式的最右侧。
^PATTERN$ : 用于模式匹配整行
^$ : 空行
<或\b : 词首锚定,用于单词模式的左侧
*>或\b : 词尾锚定,用于单词模式的右侧
* : 匹配整个单词
扩展正则表达式字符匹配
. : 任意单个字符
[wang] : 指定范围的字符
[^wang] : 不在指定范围的字符
[:alnum:] : 字母和数字
[:alpha:] : 大小写英文字母,亦即A-Z,a-z
[:lower:] : 小写字母
[:upper:] : 大写字母
[:blank:] : 空白字符
[:space:] : 包括空格、制表符和回车符号等各种类型的空白字符,包含范围比[:upper:]广。
[:cntrl:] : 不可打印的控制字符(退格、删除、警铃……)
[:digit:] : 十进制数字
[:xdigit:] : 十六进制
[:graph:] : 可打印的非空白字符
[:print:] : 可打印字符
[:punct:] : 标点符号
- 总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
变量名的规则: 区分字母大小写 不使用特殊字符或者具有意义的单词字母。 全局变量用大写 局部变量用小写 大驼峰 DaTuoFeng 小驼峰 datuoFeng 也可以用下划线 不能使用内置关键字变量,程序中的保留字段。如:if,for。 能使用字母、数字以及下划线,且不能以数字开头,不支持短横线“-”,和主机名相反。
环境变量
子进程可以(包括子进程的子进程)继承父进程的变量,但是父进程不能使用子进程的变量。
一旦子进程修改从父进程继承的变量,会将新的值传递给子进程的子进程。
只在系统配置文件中使用,在脚本使用的次数较少。
将普通变量设置成环境变量:
export 变量名
declare -x 变量名
查看所有环境变量:
env
export
printenv
declare -x
位置变量
%n (n 代表的数字) 对应第1个、第2个、第3个…………等参数,两位数以上的参数表达方式${10}。
$0 命令本身,包括路径。
$* 传递给脚本的所有参数,全部参数合为一个字符串。
$@ 传递给脚本的所有参数, 每个参数为独立字符串。
$# 传递给脚本的参数个数。
清空所有位置变量
set --
只读变量
声明定义,但后续不能修改和删除,即常量。
声明常量:
readonly 变量名
declare -r 变量名
查看常量:
readonly [-p]
declare -r
不能删除,它本身会随着进程消失而消失 。
局部变量
局部变量的作用被限定在创建他们的shell中,创建方式 变量名=参数。
状态变量
进程执行后,将使用变量$?保存运行结果;
只要$?的值为0,则表示运行成功。
运行结果为0~255,则表示失败或者返回错误结果信息。
- 通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
- 结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1..100
2)先id判断是否存在
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
- 磁盘存储术语总结: head, track, sector, sylinder.
head (磁头) : 用来读取和写入数据的关键部件。它附着在机械臂上,可以移动到磁盘的不同部分。每个磁头都可以独立地读取和写入数据,但在同一时间内,只有一个磁头可以访问给定地轨道。
track(磁道): 是磁盘上的一组同心圆,其中每一个磁道都由一个磁头进行访问。这些磁道被组织成多个扇区,每个扇区包含一定数量的数据位。
sector(扇区): 磁盘上最小的数据存储单元。每个扇区通常包含一个标识符(ID),用于识别该扇区,以及实际的数据。扇区的大小通常为512字节,但现代磁盘通常使用4KB的扇区大小。
sylinder(柱面): 是由同一磁道上的所有扇区组成的。在早期的硬盘驱动器中,磁头在访问同一柱面中的所有扇区时时不需要移动的。现在的硬盘驱动器使用旋转速度更快的磁盘和更先进的磁头技术,使得访问同一柱面中的不同扇区也需要移动磁头。 - 总结MBR,GPT结构。
MBR和GPT都是磁盘分区表,用于管理和描述磁盘分区。
MBR(Master Boot Record) : 是一个位于磁盘最开始的扇区,它记录了磁盘分区表的信息,包括分区的数量、大小和类型等。MBR通常只能容纳4个主分区,如果需要更多的分区,需要在扩展分区中创建逻辑分区。MBR的大小是固定的为512字节。
GPT(GUID Partition Table) : 是一个基于UEFI(Unified Extensible Firmware Interface)的磁盘分区表,它使用GUID(Globally Unique IDentifier)分区表的信息,以及一个签名(GUID)来验证GPT表的完整性。GPT的分区表位于GPT表头,每个分区都有一个GUID和一个类型(如系统、数据、恢复等)。GPT的大小不是固定的,可以根据磁盘的大小动态调整。
总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例
- fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff fdisk : 用于创建、删除和修改磁盘分区。 -d :显示磁盘分区表信息。 -l :列出磁盘分区信息。 -n :创建一个新的分区。 -delete : 删除一个分区。 -help : 显示帮助信息。 -w : 保存分区表更改。
- parted : 类似于fdisk,可用于创建、删除和调整分区。-l : 列出磁盘分区表信息。 -i : 显示磁盘分区详细信息。 -d : 删除一个分区。 -n : 创建一个新的分区。
- mkfs : 用于在磁盘分区上创建文件系统。
- -t : 文件系统类型:指定要创建的文件系统类型,如ext4.XFS等。
- -L : 标签:为文件系统指定一个标签,
- tune2fs : 是调整和查看ext2/ext3文件系统的文件系统参数。重新设定ext系列文件系统可调整参数的值。
- xfs_info : 查看命令工具自身的版本号。显示已挂载的xfs文件系统信息。
fsck : 用于检查和维护不一致文件系统的工具。
- -t : 给定档案系统的型式,若在/etc/fstab中已有定义或kernel本身已支援的则不需加上此参数。
- -s : 依序一个一个地执行fsck地指令来检查。
- -A :对/etc/fstab中所有列出来的分区(partition)做检查。
- -C : 显示完整的检查进度。
- -d : 打印出e2fsck的debug结果。
- -p :同时有-A条件时,同时有多个fsck的检查一起执行。
- -R :同时有-A条件时,省略/不检查。
- -V :详细显示模式。
- -a : 如果检查有错则自动修复。
- -r : 如果检查有错则由使用者回答是否修复。
- -y : 选项指定检测每个文件是自动输入yes,在不确定那些是不正常的时候,可以执行#fsck -y 全部检查修复。
mount : 挂在文件系统
- -a / -all : 自动挂载所有支持自动挂载的设备(定义在/etc/fstab文件中,且挂载选项中有auto功能)。
- -B / -bind :绑定目录到另一个目录上。
- -c / -no -canonicalize : 不对路径规范化。
- -f / -fake :空运行;跳过mount(2)系统调试。
- - F / -fork : 对每个设备禁用fork,配合-a选项一起使用。
- -T / -fstab path : 指定写文件,默认/etc/fstab。
- -i / -internal -only : 不调用mount辅助程序。
- -l / -show -labels : 显示文件系统的labels。
- -n / -no -mtab :不更新/etc/mtab,mount不可见。
- -o / -options o1,o2 : 挂载选项列表,以英文逗号分隔。
- -O / -test -opts o1,o2 : 限制文件系统集合(和-a选项一起使用)。
- -r / -read -only : 以只读方式挂载文件系统(同 -o ro)。
- -t / -types : 指定要挂载的设备上的文件系统类型,如:ext4,xfs。
- -source device : 指明源(路径、标签和uuid)。
- -target mountpoint : 指明挂载点。
- -v / -verbose : 显示过程。
- -w / -rw / -read -write : 已读写方式挂载文件系统(默认)。
- -L LABEL :以卷标指定挂载设备。
umount : 解挂文件系统。
- -a :卸载所有文件系统
- -n :卸载时不记录信息
- -r :只读方式
- -v :显示详细的处理信息
- -h : 显示帮助信息
- -t : 指定文件系统类型
swapon : 用于激活交换分区(SWAP)。
- -a : 将/etc/fstab文件中所有设置为swap的设备,启动为交换区。
- -h : 显示帮助。
- -p : <优先顺序> 指定交换区的优先顺序。
- -s : 显示交换区的使用状况。
- -V : 显示版本信息。