-
总结学过的文本处理工具,文件查找工具,文本处理三剑客, 文本格式化命令(printf)的相关命令及选项,示例。
cat:查看文本内容
[root@localhost testMK]# cat a.txt a b [root@localhost testMK]# cat -n a.txt --n显示行号 1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h
nl:同cat -b 非空行显示行号
tac: 逆向显示
[root@localhost testMK]# tac a.txt h g f e d c b a [root@localhost testMK]# cat a.txt a b c d e f g h
more:可以分面查看文件
[root@localhost testMK]# more a.txt a b c d e f g h
head、tail:显示文本固定行数内容
[root@localhost testMK]# head -n 3 a.txt //前3行 a b c [root@localhost testMK]# head -n -3 a.txt //不显示最后3行 a b c d e f [root@localhost testMK]# tail -n 3 a.txt //后3行 g h [root@localhost testMK]# tail -n +3 a.txt //从第3行开始显示 c d e f g h
cut:可以提取文本文件或STDIN数据的指定列
Usage: cut OPTION... [FILE]... Print selected parts of lines from each FILE to standard output.
[root@localhost testMK]# cut -f1 -d ' ' stu.txt //以‘ ’为分隔符 显示第一列的内容 01 02 03
[root@localhost testMK]# cut -f1,2 -d ' ' stu.txt 01 tom 02 jack 03 alex
paste:合并多个文件同行号的列到一行
[root@localhost testMK]# paste -d"|" a.txt stu.txt a|01 tom 69 91 b|02 jack 71 87 c|03 alex 68 98 d| e| f| g| h| |
wc统计行数、单词数、字节数 [root@localhost testMK]# wc stu.txt 12 30 105 stu.txt
sort:文本排序
[root@localhost testMK]# sort stu.txt | 01 tom 69 91 02 jack 71 87 03 alex 68 98 a|01 tom 69 91 b|02 jack 71 87 c|03 alex 68 98 d| e| f| g| h| [root@localhost testMK]# sort -r stu.txt //逆向排序 h| g| f| e| d| c|03 alex 68 98 b|02 jack 71 87 a|01 tom 69 91 03 alex 68 98 02 jack 71 87 01 tom 69 91 |
uniq:命令从输入中删除前后相接的重复行
[root@localhost testMK]# cat a.txt a a a b c d e f g h [root@localhost testMK]# uniq a.txt a b c d e f g h
文本三剑客:
awk、grep、sed
printf:
printf format-string [arguments...] #format-string: 为格式控制字符串 #arguments: 为参数列表
- %s:输出字符串
- %d:输出十进制整数
- %f:输出浮点数
- %c:输出字符
- %x:输出十六进制整数
- %o:输出八进制整数
- %e:输出科学计数法表示的浮点数
[root@localhost testMK1]# bash no1.sh Name: no1 Age: 22 [root@localhost testMK1]# cat no1.sh #!/bin/bash name="no1" age=22 printf "Name: %s\n" $name printf "Age: %d\n" $age [root@localhost testMK1]# bash no1.sh Name: no1 Age: 22
-
总结文本处理的grep命令相关的基本正则和扩展正则表达式。
grep:命令用于根据给定的正则表达式搜索文本,并将匹配的行打印出来。
-a --text # 不要忽略二进制数据。
-A <显示行数> --after-context=<显示行数> # 除了显示符合范本样式的那一行之外,并显示该行之后的内容。
-b --byte-offset # 在显示符合范本样式的那一行之外,并显示该行之前的内容。
-B<显示行数> --before-context=<显示行数> # 除了显示符合样式的那一行之外,并显示该行之前的内容。
-c --count # 计算符合范本样式的列数。
-C<显示行数> --context=<显示行数>或-<显示行数> # 除了显示符合范本样式的那一列之外,并显示该列之前后的内容。
-d<进行动作> --directories=<动作> # 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e<范本样式> --regexp=<范本样式> # 指定字符串作为查找文件内容的范本样式。
-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
-f<范本文件> --file=<规则文件> # 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F --fixed-regexp # 将范本样式视为固定字符串的列表。
-G --basic-regexp # 将范本样式视为普通的表示法来使用。
-h --no-filename # 在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H --with-filename # 在显示符合范本样式的那一列之前,标示该列的文件名称。
-i --ignore-case # 忽略字符大小写的差别。
-l --file-with-matches # 列出文件内容符合指定的范本样式的文件名称。
-L --files-without-match # 列出文件内容不符合指定的范本样式的文件名称。
-n --line-number # 在显示符合范本样式的那一列之前,标示出该列的编号。
-P --perl-regexp # PATTERN 是一个 Perl 正则表达式
-q --quiet或–silent # 不显示任何信息。
-R/-r --recursive # 此参数的效果和指定“-d recurse”参数相同。
-s --no-messages # 不显示错误信息。
-v --revert-match # 反转查找。
-V --version # 显示版本信息。
-w --word-regexp # 只显示全字符合的列。
-x --line-regexp # 只显示全列符合的列。
-y # 此参数效果跟“-i”相同。
-o # 只输出文件中匹配到的部分。
-m --max-count= # 找到num行结果后停止查找,用来限制匹配行数
[root@localhost ~]# grep -n a /home/testMK/a.txt 1:a 2:a 3:a [root@localhost testMK]# grep 'sys' passwd systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin chrony:x:997:994:chrony system user:/var/lib/chrony:/sbin/nologin systemd-oom:x:992:992:systemd Userspace OOM Killer:/:/usr/sbin/nologin [root@localhost testMK]# grep -c 'sys' passwd //显示几行 3 [root@localhost testMK]# grep '^sys' passwd //以Sys开头的 systemd-coredump:x:999:997:systemd Core Dumper:/:/sbin/nologin systemd-oom:x:992:992:systemd Userspace OOM Killer:/:/usr/sbin/nologin [root@localhost testMK1]# ls | grep "^a.[1-2]" aA1 aA2 aB1 aB2
正则表达式:
^word
搜寻以word开头的行。 例如:搜寻以#开头的脚本注释行 grep –n ‘^#’ regular.txt
word$
搜寻以word结束的行 .
匹配任意一个字符。 例如: grep –n ‘e.e’ regular.txt
匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。\
转义字符。 例如:搜寻’,’是一个特殊字符,在正则表达式中有特殊含义。必须要先转义。 grep –n ‘\,” regular.txt
\*
前面的字符重复0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go\*gle’ regular.txt
[list]
匹配一系列字符中的一个。 例如:匹配gl,gf。 grep –n ‘g[lf]’ regular.txt
[n1-n2]
匹配一个字符范围中的一个字符。 例如:匹配数字字符 grep –n ‘[0-9]’ regular.txt
[^list]
匹配字符集以外的字符 例如: grep –n ‘[^o]‘ regular.txt
匹配非o字符\<word
单词是的开头。 例如:匹配以g开头的单词 grep –n ‘\<g’ regular.txt
word\>
前面的字符重复n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt
\<word
匹配单词结尾 例如:匹配以tion结尾的单词 grep –n ‘tion\>’ regular.txt
word\{n1\}
前面的字符重复n1 例如:匹配google。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,\}
前面的字符至少重复n1 例如:匹配google,gooogle。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,n2\}
前面的字符重复n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt
-
总结变量命名规则,不同类型变量(环境变量,位置变量,只读变量,局部变量,状态变量)如何使用。
命名规则:1.变量必须是[a…z] [A…Z]数字[1…9]以及下划线_组成 2.变量不允许数字开头3.变量区分大小写 4. 变量不应该使用if while what等关键字表示 5.一个作用范围内,变量名唯一
环境变量:变量赋值 export 变量名=值 echo $变量名 显示值
位置变量:当一条命令或脚本执行时,后面可以跟多个参数,我们使用位置参数变量来表示这些参数
只读变量:readonly 变量名
局部变量:一定范围内使用
状态变量:$? echo $? 为0的话表示前面命令使用成功,显示任何非0的数值都是表示失败
-
通过shell编程完成,30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?
#!/bin/bash head=$1 foot=$2 rabbit=$[(foot-head*2)/2] choock=$[head-rabbit] echo rabbit=$rabbit echo choock=$choock [root@localhost testMK1]# chmod +x no1.sh [root@localhost testMK1]# bash no1.sh 30 80 rabbit=10 choock=20
-
结合编程的for循环,条件测试,条件组合,完成批量创建100个用户,
1)for遍历1…100
#!/bin/bash for((i=0;i<100;i++)); do echo "${i}" done
2)先id判断是否存在
#!/bin/bash for((i=0;i<100;i++)); do USERNAME=a${i} if id -u ${USERNAME} >/dev/null 2>&1 ; then echo "用户: ${USERNAME} 存在" else echo "用户: ${USERNAME} 不存在" fi done
3)用户存在则说明存在,用户不存在则添加用户并说明已添加。
#!/bin/bash for((i=0;i<100;i++)); do USERNAME=a${i} if id -u ${USERNAME} >/dev/null 2>&1 ; then echo "用户: ${USERNAME} 存在" else useradd ${USERNAME} echo "用户: ${USERNAME} 已添加" fi done
-
磁盘存储术语总结: head, track, sector, sylinder.
-
磁头(head)
每张磁片的正反两面各有一个磁头,一个磁头对应一张磁片的一个面。因此,用第几磁头就可以表示数据在哪个磁面。
-
磁道(track)
盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段
-
扇区(sector)
每个磁道上一个弧段被称之为一个扇区(图践绿色部分)
-
柱面(cylinder)
硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。
-
-
总结MBR,GPT结构。
MBR单分区不超过2T 用32位表示扇区数 每个扇区512bytes 最多可分4个区(3个主分区 1个拓展分区.
GPT有128个分区 最大内存为8Z
-
总结学过的分区,文件系统管理,SWAP管理相关的命令及选项,示例 fdisk, parted, mkfs, tune2fs, xfs_info, fsck, mount, umount, swapon, swapoff
添加硬盘进程:分区》创建文件系统》挂载
分区:
fdisk:用于MBR分区
fdisk [选项] 设备文件名
-
-l`:显示设备的分区表信息。
-
-n
:创建一个新的分区。 -
-d
:删除一个分区。 -
-p
:打印分区表的内容。 -
-t
:更改分区的类型。 -
-u
:以扇区单位显示分区信息。 -
-w
:将分区表写入磁盘。
gdisk:可以用于GPT分区
常用命令参数:
gdisk
gdisk /dev/磁盘名
-n 创建一个新分区
-p 显示当前磁盘的分区表
-w 将更改写入并退出
-q 不保存退出
使用mkfs创建文件系统
root@ubuntu2004:/# mkfs.ext4 /dev/sdb1
mke2fs 1.46.5 (30-Dec-2021)
Creating filesystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 257fd7f2-6094-4579-8648-9c4025a0d494
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
挂载:
mount /dev/sdb1 /logs //临时
永久:
vim /etc/fstab
查看uuid修改文件
mount -a 将文件挂载
ystem with 524288 4k blocks and 131072 inodes
Filesystem UUID: 257fd7f2-6094-4579-8648-9c4025a0d494
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
挂载:
mount /dev/sdb1 /logs //临时
永久:
vim /etc/fstab
查看uuid修改文件
mount -a 将文件挂载