加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

关于shell和文本处理

发布时间:2020-12-15 21:38:24 所属栏目:安全 来源:网络整理
导读:shell脚本 ??在正常生产环境中,肯定会有一些重复而简单的工作,那么这个时候我们就可以利用一些小脚本来完成这些工作,那就是shell了。shell的用途就是自动化常用命令,执行系统管理和腹胀排错,处理文件或文本;格式要求,由于现在用的shell是bash,所以在
shell脚本

??在正常生产环境中,肯定会有一些重复而简单的工作,那么这个时候我们就可以利用一些小脚本来完成这些工作,那就是shell了。shell的用途就是自动化常用命令,执行系统管理和腹胀排错,处理文件或文本;格式要求,由于现在用的shell是bash,所以在脚本开始第一行要求格式就是#!/bin/bash。像其它的还会有一些#!/bin/perl#!/bin/python。脚本完成后可以运行bash -n 脚本 检验一下脚本是否成功; 也可以实用bash -x 脚本,这样是逐步检查脚本的检验。

??在shell中,不能使用保留字和命令之类的做变量,不能使用数字和下划线开头,最好使用是英语单词定义变量,日后好找。统一命名规则驼峰命名法,就是单词的名字首字母大写。如果使用echo显示变量,变量前必须加$ ,不然echo不能识别。echo变量是非常局限的,可以通过pstree -p可以查看目前的后台进程,每个进程都有一个编号叫pidexport可以传递变量。echo $BASHPID可以查看当前的变量, echo $PPID可以查看父变量。可以通过 unset name删除变量。通过env可以查看目前所有的变量。如果想使用一次行的变量,可以使用小括号,小括号会开启子进程但是只有一次,花括号不会。

??短路与 只要有一个cmd是假的 那么结果就是假的,用&&表示:cmd1 && cmd2 其中如果第一个命令是假的,那么就不会执行第二个命令,如果第一个命令正确,就会执行第二个命令,第二个命令如果正确,结果就正确,反之则结果为假。短路或 cmd1 || cmd2 :如果cmd1正确,那么就不执行第二个,结果为真。如果cmd1失败 那么就执行cmd2.

??还有一些比较数值大小的需要用到数值测试:-gt是否大于: -ge 是否大于等于: -eq是否等于: -ne是否不等于: -lt 是否小于:-le是否小于等于

??关于cat一些选项,cat是我们常用的命令,相当于echo了。cat正常是不显示空格结尾的文本,cat -E file可以。cat -nE file可以查看前面的行符。cat -nEs file 可以把多个连续的空行压缩为一个。cat -bE file显示行号但是不显示空白行的行号。cat -A file 可以查看所有控制符。总体来说cat -E file 可以查看文件行尾的标识符,脚本中如果有些错误,可能就是这了。-V显示不可显示的符号,-A最全面。cat -n file 可以显示行号,但是cat -b file不显示空行的行号,如果有多空行可以实用cat -ns file 把多空行压缩成一行。

??和cat一样的还有tac和rev,但是并没有cat那么常用。tac 整行反向显示文本 ; rev 整列反向显示文本。

那么就来grep了

??grep: Global search REgular expression and Print out the line

??作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行

??模式:由正则表达式字符及文本字符所编写的过滤条件

??grep [OPTIONS] PATTERN [FILE...]

????grep root /etc/passwd

????grep "$USER" /etc/passwd

????grep ‘$USER‘ /etc/passwd

????grep whoami /etc/passwd。--color=auto: 对匹配到的文本着色显示

??????-v: 显示不被pattern匹配到的

??????-i: 忽略字符大小写

??????-n:显示匹配的行号

??????-c: 统计匹配的行数

??????-o: 仅显示匹配到的字符串(grep -o 其中的-o表示只显示被选中的,其它的不显示。只适用于取单词
)

??????-q: 静默模式,不输出任何信息

??????-A #: after,后#行

??????-B #: before,前#行

??????-C #:context,前后各#行

??????-e:实现多个选项间的逻辑or关

????????grep –e ‘cat ’ -e ‘dog’ file

??????-w:匹配整个单词

??????-E:使用ERE

??????-F:相当于fgrep,不支持正则表达式

??????-f file: 根据模式文件处理

基本正则表达式元字符

??字符匹配:

????. 匹配任意单个字符

????[]匹配指定范围内的任意单个字符,示例:[abcd] [0-9] [a-z] [a-zA-Z]

????[^] 匹配指定范围外的任意单个字符

????[:alnum:] 字母和数字

????[:alpha:] 代表任何英文大小写字符,亦即 A-Z,a-z

????[:lower:] 小写字母 [:upper:] 大写字母

????[:blank:]空白字符(空格和制表符)

????[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)

????[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)

????[:digit:]十进制数字

????[:xdigit:]十六进制数字

????[:graph:] 可打印的非空白字符

????[:print:] 可打印字符

????[:punct:] 标点符号

??匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数

????* 匹配前面的字符任意次,包括0次

????贪婪模式:尽可能长的匹配

????.* 任意长度的任意字符

????? 匹配其前面的字符0或1次

????+匹配其前面的字符至少1次

????{n} 匹配前面的字符n次

????{m,n} 匹配前面的字符至少m次,至多n次

????{,n} 匹配前面的字符至多n次

????{n,} 匹配前面的字符至少n次

??位置锚定:定位出现的位置

????^行首锚定,用于模式的最左侧

????$行尾锚定,用于模式的最右侧

????^PATTERN$ 用于模式匹配整行

????^$空行

????^[[:space:]]*$ 空白行

????&;lt; 或 b词首锚定,用于单词模式的左侧

????&;gt; 或 b 词尾锚定,用于单词模式的右侧

????&;lt;PATTERN&;gt;匹配整个单词

??在正则表达式中,.表示任意一个字符;[]中表示其中任意一个字符;[^]表示不是i中一个字符;a*表示任意个a,重复次数不限制那个,也可以是零,但是a?表示a可有可无,也就是最多一次。a+表示最少有一个a; a{10}表示10一下个a;a{10,20}表示10到20个a; a{,20}表示最多20个a; a{10,}表示最少十个a;

关于head和tail的一些选项

??head [OPTION]... [FILE]...

????-c #指定获取前#字节

????-n # 指定获取前#行

????-# 指定行数;正常来说,可以直接使用head -#,前面不必叫-n,效果是一样的。

??tail [OPTION]... [FILE]...

????-c # 指定获取后#字节

????-n # 指定获取后#行

????-#同上

????-f 跟踪显示文件fd新追加的内容,常用日志监控
相当于 --follow=descriptor;tail -f可以跟踪新增,taif -f /var/log/message查看设备日志.

????-F跟踪文件名,相当于--follow=name --retry;tail默认提取最后10行,tail -f file 可以实时追踪文件(文件描述符)不退出。tail -F file可以一直追踪文件名,无论删除与否。

关于cut

??cut [OPTION]... [FILE]...

????-dDELIMITER: 指明分隔符,默认tab

????-fFILEDS:第几列

????#: 第#个字段

????·#,#[,#]·:离散的多个字段,例如1,3,6

????#-#:连续的多个字段,例如1-6;混合使用:1-3,7

关于wc

????计数单词总数、行总数、字节总数和字符总数

????可以对文件或STDIN中的数据运行

????wc story.txt

????39??237??1901 story.txt

????行数??字数??字节数

????常用选项

??????-l只计数行数

??????-w 只计数单词总数

??????-c 只计数字节总数

??????-m只计数字符总数

??????-L 显示文件中最长行的长度

sort

????把整理过的文本显示在STDOUT,不改变原始文件

????sort [options] file(s)

????常用选项

??????-r 执行反方向(由上至下)整理

??????-R 随机排序

??????-n 执行按数字大小整理

??????-f 选项忽略(fold)字符串中的字符大小写

??????-u 选项(独特,unique)删除输出中的重复行

??????-t c选项使用c做为字段界定符

??????-k X选项按照使用c字符分隔的X列来整理能够使用多次

uniq

????uniq命令:从输入中删除前后相接的重复的行

????uniq [OPTION]... [FILE]...

??????-c: 显示每行重复出现的次数

??????-d: 仅显示重复过的行

??????-u: 仅显示不曾重复的行(注:连续且完全相同方为重复)

????常和sort 命令一起配合使用:

??????sort userlist.txt | uniq -c

??uniq 默认作用合并相邻的重复行;=sort -u 合并相邻的重复行;

文件的查找与压缩

find

??find是实时查找工具,通过遍历指定路径完成文件查找,工作特点:查找速度略慢;精确查找;实时查找; 可能只搜索用户具备读取和执行权限的目录,它的语法是

??find [OPTION]... [查找路径] [查找条件] [处理动作]

??查找路径:指定具体目标路径;默认为当前目录

??查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;

??默认为找出指定路径下的所有文件

??处理动作:对符合条件的文件做操作,默认输出至屏幕

??搜索层级:

????-maxdepth level 最大搜索目录深度,指定目录为第1级

????-mindepth level 最小搜索目录深度

??先处理目录内的文件,再处理目录
-depth

??根据文件名和inode查找:

????-name "文件名称":支持使用glob-name "文件名称":支持使用glob
*,?,[],[^]

????-iname "文件名称":不区分字母大小写

????-inum n 按inode号查找

????-samefile name 相同inode号的文件

????-links n 链接数为n的文件

????-regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称

??根据属主、属组查找:

????-user USERNAME:查找属主为指定用户(UID)的文件

????-group GRPNAME: 查找属组为指定组(GID)的文件

????-uid UserID:查找属主为指定的UID号的文件

????-gid GroupID:查找属组为指定的GID号的文件

????-nouser:查找没有属主的文件

????-nogroup:查找没有属组的文件

??根据文件类型查找

???? -type TYPE

??????? f: 普通文件

??????? d: 目录文件

??????? l: 符号链接文件

??????? s:套接字文件

??????? b: 块设备文件

??????? c: 字符设备文件

??????? p: 管道文件

??空文件或目录

????-empty

??????find /app -type d -empty

??根据文件大小来查找:

????-size [+|-]#UNIT

????常用单位:k,M,G,c(byte)

????#UNIT: (#-1,#]

??????如:6k 表示(5k,6k]

????-#UNIT:[0,#-1]

??????如:-6k 表示[0,5k]

????+#UNIT:(#,∞)

??????如:+6k 表示(6k,∞)

??根据时间戳:

????以“天”为单位

????-atime [+|-]#,

????#: [#,#+1)

????+#: [#+1,∞]

????-#: [0,#)

??????-mtime

??????-ctime

????以“分钟”为单位

??????-amin

??????-mmin

??????-cmin

??根据权限查找:

??-perm [/|-]MODE

????MODE: 精确权限匹配

????/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+

????从centos7开始淘汰

????-MODE:每一类对象都必须同时拥有指定权限,与关系

??????0 表示不关注

??????find -perm 755 会匹配权限模式恰好是755的文件

??????只要当任意人有写权限时,find -perm +222就会匹配

??????只有当每个人都有写权限时,find -perm -222才会匹配

??????只有当其它人(other)有写权限时,find -perm -002才会匹配

??处理动作-print:默认的处理动作,显示至屏幕

????-ls:类似于对查找到的文件执行“ls -l”命令

????-delete:删除查找到的文件

????-fls file:查找到的所有文件的长格式信息保存至指定文件中

????-ok COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认

????-exec COMMAND {} ; 对查找到的每个文件执行由COMMAND指定的命令

????{}: 用于引用查找到的文件名称自身

????find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性
传递给后面的命令

xargs

??参数替换xargs

????由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了
xargs命令

????xargs用于产生某个命令的参数,xargs 可以读入 stdin 的数据,并且以空格符
或回车符将 stdin 的数据分隔成为arguments
注意:文件名或者是其他意义的名词内含有空格符的情况
有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决

????示例:

??????ls f* |xargs rm

??????find /sbin/ -perm +700 |ls -l 这个命令是错误的

??????find /bin/ -perm /7000 | xargs ls -l 查找有特殊权限的文件

??????find /bin/ -perm -7000 | xargs ls -l 此命令和上面有何区别?

??????find和xargs格式:find | xargs COMMAND

gzip gunzip

??通常我们在网络上面上传或者下载一个比较大的文件时,会对文件或者文件夹进行打包压缩处理以便更快速的工作效率,我们会使用一下小工具来对文件或者文件夹进行打包压缩和解压缩。

??gzip [OPTION]... FILE ...

????-d 解压缩,相当于gunzip

????-c 结果输出至标准输出,保留原文件不改变

????-# 指定压缩比,#取值为1-9,值越大压缩比越大

??gunzip file.gz 解压缩

????zcat file.gz 不显式解压缩的前提下查看文本文件内容

????示例:

??????gzip -c messages >messages.gz

??????gzip -c -d messages.gz > messages

??????zcat messages.gz > messages

??????cat messages | gzip > m.gz

tar

??(1) 创建归档

???? tar -cpvf /PATH/FILE.tar FILE...

??(2) 追加文件至归档: 注:不支持对压缩文件追加

???? tar -r -f /PATH/FILE.tar FILE...

??(3) 查看归档文件中的文件列表

????tar -t -f /PATH/FILE.tar

??(4) 展开归档

????tar -x -f /PATH/FILE.tar

????tar -x -f /PATH/FILE.tar -C /PATH/

??(5) 结合压缩工具实现:归档并压缩

????-j: bzip2,-z: gzip,-J: xz

??-exclude 排除文件

????tar zcvf /root/a3.tgz --exclude=/app/host1 --exclude=/app/host2 /app

????-T 选项指定输入文件

???? -X 选项指定包含要排除的文件列表

??????tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist

??split:分割一个文件为多个文件,例如分割大的 tar 文件为多份小文件

????split -b Size –d tar-file-name prefix-name

????split -b 1M –d mybackup.tgz mybackup-parts

????split -b 1M mybackup.tgz mybackup-parts

??合并:

????cat mybackup-parts* > mybackup.tar.gz

??本期呢差不多就是这写内容,简单实用,如果想全部学会还是需要一些精力的。加油!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读