目录
awk
awk是行处理器:相比屏幕处理的优点是在处理庞大的文件时不会出现内存溢出,或者处理缓慢,通常用来格式化文本信息。
awk处理过程:依次对每一行进行处理,然后进行输出。
awk命令形式:awk [ -F | -f | -v ] ‘BEGIN{} // {command1;command2} END{}’ file
- [ -F | -f | -v ]:-F,指定行处理器分隔符,-f调用脚本,-v定义变量,设置FS分隔符
- ‘ ’:引用代码块
- BEGIN:初始化代码块,在对每一行进行处理之前,初始化代码,主要是引用全局变量,设置分隔符。
- //:匹配代码块,可以是字符串或者正则表达式。
- {}:命令代码块,可以包含一条或者多条命令。
- ;:多条命令使用分号分割。
- END:结尾代码块,在对每一行代码处理之后,在执行的再执行的代码块,主要是进行最终计算,或者输出结尾摘要信息。
awk内置变量
- $n:当前记录的第n个字段,比如n为1位第一个字段,n为2为第二个字段。
- $0:这个变量包含执行过程中当前行的文本内容。
- ARGC:命令行参数的数目。
- ARGIND : 命令行中当前文件的位置(从0开始算)。
- ARGV : 包含命令行参数的数组。
- CONVFMT : 数字转换格式(默认值为%.6g)。
- ENVIRON : 环境变量关联数组。
- ERRNO : 最后一个系统错误的描述。
- FIELDWIDTHS : 字段宽度列表(用空格键分隔)。
- FILENAME : 当前输入文件的名。
- NR : 表示记录数,在执行过程中对应于当前的行号
- FNR : 同NR :,但相对于当前文件。
- FS : 字段分隔符(默认是任何空格)。
- IGNORECASE : 如果为真,则进行忽略大小写的匹配。
- NF : 表示字段数,在执行过程中对应于当前的字段数。
print $NF
答应一行中最后一个字段。- OFMT : 数字的输出格式(默认值是%.6g)。
- OFS : 输出字段分隔符(默认值是一个空格)。
- ORS : 输出记录分隔符(默认值是一个换行符)。
- RS : 记录分隔符(默认是一个换行符)。
- RSTART : 由match函数所匹配的字符串的第一个位置。
- RLENGTH : 由match函数所匹配的字符串的长度。
- SUBSEP : 数组下标分隔符(默认值是34)。
命令示例
- awk '{print}' /etc/passwd == awk '{print $0}' /etc/passwd
- awk '{print " "}' /etc/passwd //不输出passwd的内容,而是输出相同个数的空行,解释了awk是一行一行处理文本
- awk '{print "a"}' /etc/passwd //输出相同个数的a行,一行只有一个a字母
- awk -F":" '{print $1}' /etc/passwd //-F指定分隔符输出分割后的数据
- awk -F: '{print $1; print $2}' /etc/passwd //将每一行的前二个字段,分行输出,进一步理解一行一行处理文本
- awk -F: '{print $1,$3,$6}' OFS="\t" /etc/passwd //输出字段1,3,6,以制表符作为分隔符
- awk -F":" '{print $1 $3}' /etc/passwd //$1与$3相连输出,不分隔
- awk -F":" '{print $1,$3}' /etc/passwd //多了一个逗号,$1与$3使用空格分隔
- awk -F":" '{print $1 " " $3}' /etc/passwd //$1与$3之间手动添加空格分隔
- awk -F":" '{print "Username:" $1 "\t\t Uid:" $3 }' /etc/passwd //自定义输出
- awk -F: '{print NF}' /etc/passwd //显示每行有多少字段
- awk -F: '{print $NF}' /etc/passwd //将每行第NF个字段的值打印出来
- awk -F: 'NF==4 {print }' /etc/passwd //显示只有4个字段的行
- awk -F: 'NF>2{print $0}' /etc/passwd //显示每行字段数量大于2的行
- awk '{print NR,$0}' /etc/passwd //输出每行的行号
- awk -F: '{print NR,NF,$NF,"\t",$0}' /etc/passwd //依次打印行号,字段数,最后字段值,制表符,每行内容
- awk -F: 'NR==5{print}' /etc/passwd //显示第5行
- awk -F: 'NR==5 || NR==6{print}' /etc/passwd //显示第5行和第6行
- route -n|awk 'NR!=1{print}' //不显示第一行
//匹配代码块
//纯字符匹配 !//纯字符不匹配 ~//字段值匹配 !~//字段值不匹配 ~/a1|a2/字段值匹配a1或a2
- awk '/mysql/' /etc/passwd
- awk '/mysql/{print }' /etc/passwd
- awk '/mysql/{print $0}' /etc/passwd //三条指令结果一样
- awk '!/mysql/{print $0}' /etc/passwd //输出不匹配mysql的行
- awk '/[2][7][7]*/{print $0}' /etc/passwd //匹配包含27为数字开头的行,如27,277,2777...
- awk -F: '$1~/mail/{print $1}' /etc/passwd //$1匹配指定内容才显示
- awk -F: '{if($1~/mail/) print $1}' /etc/passwd //与上面相同
- awk -F: '$1!~/mail/{print $1}' /etc/passwd //不匹配
- awk -F: '$1!~/mail|mysql/{print $1}' /etc/passwd
awk -F: 'BEGIN{A=0;B=0} {if($3>100) {A++; print "large"} else {B++; print "small"}} END{print A,"\t",B}' /etc/passwd
//ID大于100,A加1,否则B加1
awk -F: 'BEGIN{i=1} {while(i<NF) print NF,$i,i++}' /etc/passwd
awk -F'[:#/]' '{print NF}' helloworld.sh //指定三个分隔符,并输出每行字段数
参考博客:
chmod
改变一个或多个文件的存取模式
语法:chmod [-cfvR] [--help] [--version] mode file...
-cfvR:
- -c:若文件权限确实已经更改,才显示其更改动作
- -f:若文件权限无法被更改,也不要显示错误信息
- -v:显示权限变更的详细 资料
- -R:对目前目录下的所有文件与子目录进行相同的权限变更(即以递回的方式逐个变更)
mode:权限设定字符串
[ugoa...][[+-=][rwxX]...][,...]
- u:该文件的拥有者
- g:与该文件的拥有者属于同一个群体者
- o:表示g其他以外的人
- a:表示这三者皆是
- +、-、=:+表示增加权限,-表示取消权限,=表示唯一设定权限
- r、w:r表示可读取,w表示可写入。
- x、X:x表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
chmod也可以用数字来表示权限:chmod abc file
其中abc各为一个数字分别表示User、Group和Other的权限
r=4、w=2、x=1
chmod a=rwx file 效果等同于 chmod 777 file
chmod ug=rwx,o=x file 效果等同于 chmod 771 file
实例:
- chmod u+x file 给file的属主增加执行权限
- chmod 751 file 给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限
- chmod -R u+r directory 递归地给directory目录下所有文件和子目录的属主分配读的权限
find
用于在指定目录下根据条件查找文件,若不指定条件,列出当前文件下的所有文件。
语法:find path -option [ -exec -ok command ] {} \;
常用-option:
- -name:按照文件名匹配,文件名区分大小写。
- -iname:按照文件名匹配,文件名不区分大小写。
- -amin:在过去n分钟被读取过的文件。
- -perm:按执行权限来查找
- -atime n : 在过去n天内被读取过的文件。
- -cmin n : 在过去 n 分钟内被修改过。
- -ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写。
- -type c : 文件类型是 c 的文件。
- -type c 含义:d: 目录,c: 字型装置文件,b: 区块装置文件,p: 具名贮列,f: 一般文件,l: 符号连结,s: socket
实例:
- find . -name "*.txt" 查找当前目录及其子目录下后缀为.txt的文件
- find . -type f 将当前目录和子目录下的一般文件列出
- find . -cmin -1000 将当前目录及其子目录下的前1000分钟被修改过的文件列出
- find / -type f -mtime +7 -ok rm {} \; 查找/var/log目录中更改时间在7日以前的普通文件,并在删除之前询问它们
- find . -type f -perm 644 查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
hostname
获取当前主机名
ll&ls
ll不是命令,是ls -l的别名。
ls用于列出目录(及其子目录)下的文件及其信息。
语法:ls [-alrtAFR] [name...]
-option:
- -a:显示所有文件及目录 (ls内定将文件名或目录名称开头为"."的视为隐藏档,不会列出)
- -l:-l 除文件名称外,亦将文件型态、权限、拥有者、文件大小等资讯详细列出
- -r:-r 将文件以相反次序显示(原定依英文字母次序)
- -t:-t 将文件依建立时间之先后次序列出
- -A:-A 同 -a ,但不列出 "." (目前目录) 及 ".." (父目录)
- -F:-F 在列出的文件名称后加一符号;例如可执行档则加 "*", 目录则加 "/"
- -R:-R 若目录下有文件,则以下之文件亦皆依序列出
实例:
- ls -ltr s* 列出以s开头的文件,越新的排越后面
- ls -AF 列出目前工作目录下所有文件及目录;目录于名称后加‘/’, 可执行文档于名称后加‘*’
md5sum
功能:
- 通常用于校验数据在网络传输或转存过程中数据的完整性,用户生成和校验文件的md5值。
- 密码加密。
- 其会逐位校验文件的内容,与文件名无关,小概率不同文件生成相同的md5值
参数:
- -b:以二进制模式读入文件内容
- -t:以文本模式读入文件内容
- -c:根据已生成的md5值,对现存文件校验
- --status:校验完成后不生成错误或正确的提示信息,可以通过命令返回值来判断
示例:
stat
列出当前文件的详细信息
语法:stat -option path
-option:
- -t:显示文件系统的信息
- -f:以简洁的方式输出文件信息
touch
两个功能:
- 创建新的文件
- 更新指定文件的时间标签(访问时间、修改时间)
选项:
-a:或--time=atime或--time=access或--time=use 只更改存取时间;
-c:或--no-create 不建立任何文件;
-d:<时间日期> 使用指定的日期时间,而非现在的时间;
-f:此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题;
-m:或--time=mtime或--time=modify 只更该变动时间;
-r:<参考文件或目录> 把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同;
-t:<日期时间> 使用指定的日期时间,而非现在的时间;
--help:在线帮助;
--version:显示版本信息。
实例:
- touch file #若文件不存,创建文件,若文件(或文件夹)存在修改文件(文件夹)的系统时间
- touch /etc/nologin #系统维护期间禁止用户登录
- touch -c -t 201905061050.30 file #设定文件的时间,不存在文件不创建文件
- touch -r /etc/passwd file #将后者的时间戳设为和前面的时间一样
- touch -d "2019/05/06" file #将file的时间戳统一修改为指定时间
- touch -d "2 days ago" file #这样也可以修改时间
yum
yum(全称 Yellow dogUpdate,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,一次性安装所有的软件包。
yum提供了安装、查找和删除某一个,一组甚至全部软件包的命令。
基本命令:yum -[option] [command] [package]
option:是可选的,包括 -h:帮助 、-y:安装过程提示全部为yes、-q:不显示安装过程等等。
command:所要进行的操作命令。
package:所要操作的对象(工具包)。
yum的一切信息都存储在 /etc/yum.reops.d 目录下。
yum的缓存目录为 /var/cache/yum 下。
命令示例:
清空缓存列表
- yum clean packages :清空缓存目录下的软件包,清除的是/var/cache/yum下的缓存
- yum clean headers:清除缓存目录下的headers
- yum clean oldheaders:清除缓存目录下旧的headers
- yum clean||yum clean all :(= yum clean packages; yum clean oldheaders) 清除缓存目录下的软件包及旧的headers
yum显示信息:
- yum list:显示所有已经安装和可以安装的程序包
- yum list [package]:显示安装包的信息,yum list rpm :显示rpm详细信息,是否安装,是否可更新等。
- yum info [package]:显示安装包的详细信息,不加package显示所有安装包信息。
yum安装:
- yum -y install [package]:安装rpm包,如果不加-y会提示是否安装,不加package则安装所有rpm包及其依赖。
yum删除:
- yum removed [package]:删除安装包,也就是卸载工具包。
- yum deplist [package]:查看安装包的依赖情况。
yum包的升级:
- yum check-update [package]:检查程序包是否可更新,不添加package则检查所有程序更新状况。
- yum update [package] :更新程序包,若不加package则更新所有安装包。
参考博客:https://blog.youkuaiyun.com/shuaigexiaobo/article/details/79875730