一、shell脚本编程
-
编写脚本 createuser.sh,实现如下功能:使用一个用户名做为参数,如果 指定参数的用户存在,就显示其存在,否则添加之;显示添加的用户的id号等信息。
#!/bin/bash #This script is used to determine whether the user exists or not. id $1 &> /dev/null; if [ $? = 0 ];then echo "user $1 is exist."; else useradd $1; echo "user $1 is created."; id $1; fi
-
编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等。
set expandtab set tabstop=4 set noai autocmd BufNewFile *.sh exec ":call Format()" func Format() call setline(1,"#!/bin/bash") call setline(2,"#***********************************") call setline(3,"#Author: liuyi") call setline(4,"#Telephone: ") call setline(5,"#Version: ") call setline(6,"#Create_time: ".strftime("%Y-%m-%d")."") call setline(7,"#Description: ") call setline(8,"#***********************************") endfunc autocmd BufNewFile * normal G
将以上内容保存至~/.vimrc文件中,使配置永久生效。此时用vim命令新建一个以.sh结尾的脚本文件时就会自动生成相应的格式。效果如图。
二、文件查找工具和打包压缩工具
文件查找工具
-
locate
格式:locate [OPTION]... [PATTERN]...
选项 说明 -i 不区分大小写搜索 -n # 只列举前#个匹配项目 -r 使用基本正则表达式 --regex 使用扩展正则表达式 -b 只匹配基名,默认匹配全路径 -c 显示匹配文件的数量 locate命令基于/var/lib/mlocate/mlocate.db这个目录索引文件来进行文件查找的,系统最小化安装是没有这个文件的。创建此文件有两种方法:第一种是过一段时间后系统会自动生成此文件;第二种是使用updatedb命令手动创建(此命令也可用于手动更新mlocate.db文件)。
-
find
格式:find [OPTION]...[查找路径][查找条件][处理动作]
查找路径:指定具体目标路径,默认为当前目录
查找条件:指定查找标准,可以是文件名、大小、类型、权限等标准,默认为找出指定路径下的所有文件
处理动作:对符合条件的文件进行操作,默认输出至屏幕
2.1 指定搜索目录层级
-maxdepth level 最大搜索目录深度,指定目录下的文件为第一级 -mindepth level 最小搜索目录深度
2.2 对目录先处理目录内的文件,再处理目录本身
-depth -d
2.3 组合条件
与:-a,默认多个条件是与关系 或:-o, 非:-not !
2.4 排除目录
-path '目录名' -a -prune 可以排除指定目录 查找/etc/下,除/etc/sane.d/目录的其他文件 find /etc -path '/etc/sane.d' -a -prune 排除/proc和/sys目录 find / \(-path '/proc' -o -path '/sys'\) -a -prune
2.5 查找空文件和目录
-empty
2.6 根据文件信息查找
根据文件名和inode查找 -name "文件名称" 支持使用glob通配符 -iname "文件名称" 不区分字母大小写 -inum n 按inode号查找 -samefile name 相同inode号的文件 -links n 链接数为n的文件 -regex "PATTERN" 以PATTERN匹配整个文件路径,而非文件名称 根据属主、属组查找 -user USERNAME 查找属主为指定用户的文件 -group GROUPNAME 查找属组为指定组的文件 -uid USERID 查找属主为指定UID的文件 -gid GROUPID 查找属组为指定GID的文件 -nouser 查找没有属主的文件 -nogroup 查找没有属组的文件 根据文件类型查找 -type TYPE TYPE的形式: f:普通文件、d:目录文件、l:链接文件、s:套接字文件、b:块设备文件、c:字符设备文件、p:管道文件 根据文件大小来查找 -size [+|-]SIZE 常用单位:k、M、G、c(byte),注意大小写敏感 SIZE:(SIZE-1,SIZE] 如:6k表示(5k,6k] +SIZE:(SIZE,∞) 如:+6k表示(6k,∞) -SIZE:[0,SIZE-1] 如:-6k表示[0,5k] 根据时间戳查找 以天为单位时: -atime [+|-]TIME -mtime -ctime TIME:[TIME,TIME+1) +TIME:[TIME+1,∞) -TIME:[0,TIME) 以分钟为单位时: -amin -mmin -cmin
2.7 根据权限查找
-perm [/|-]MODE MODE:精确权限匹配。 /MODE:任何一类(u,g,o)对象的权限中只要有一位匹配即可,或关系。+从centos7开始淘汰,开始使用/。 -MODE:每一类对象都必须同时拥有指定权限,与关系。 0:表示不关注
2.8 处理动作
-print 默认的处理动作,显示至屏幕 -ls find的内置命令,类似于对查找到的文件执行“ls -l”命令 -fls file 查找到的文件的长格式信息保存至指定文件中,相当于-ls > file -delete 删除查找到的文件 -ok COMMAND {} \; 对查找到的每个文件执行COMMAND命令,对每个文件执行命令之前,都会交互式要求用户 确认 -exec COMMAND {} \; 对查找到的文件执行COMMAND命令,不需要用户确认 注意:{}用于引用查找到的文件自身,\;表示执行命令语法的结束。
打包压缩工具
-
压缩和解压缩
1.1 gzip和gunzip
格式:gzip [OPTION]...FILE...
常用选项 说明 -k keep 保留原文件,Centos8的新功能 -d 解压缩,相当于gunzip -c 结果输出至标准输出,保留原文件不改变 -# 指定压缩比,#取值为1-9,值越大压缩比越大 例子: 解压缩 gunzip file.gz 不解压缩的前提下查看文本文件内容 zcat file.gz
1.2 bzip2和bunzip2
格式:bzip2 [OPTION]...FILE...
常用选项 说明 -k keep 保留原文件 -d 解压缩 -c 结果输出至标准输出,保留原文件不改变 -# 压缩比,#取值为1-9,默认为9 例子: 解压缩 bunzip2 file.bz2 不显式解压缩的前提下查看文本文件内容 bzcat file.bz2
1.3 xz和unxz
格式:xz [OPTION]...FILE...
常用选项 说明 -k keep 保留原文件 -d 解压缩 -c 结果输出至标准输出,保留原文件不改变 -# 压缩比,#取值1-9,默认为6 例子: 解压缩 unxz file.xz 不显式解压缩的前提下查看文本文件内容 xzcat file.xz
1.4 zip和unzip
zip可以实现打包目录和多个文件成一个文件并压缩,但是会丢失文件属性信息,如所有者和所属组等信息,一般使用tar代替。
打包并压缩 zip -r /data/sysconfig.zip /etc/sysconfig/ 不包括目录,只打包目录内的文件和子目录 cd /etc/sysconfig;zip -r /data/sysconfig.zip * 解压时,默认解压到当前目录 unzip /data/sysconfig.zip 解压到指定目录,如果指定目录不存在,会在其父目录(必须事先存在)下自动生成 unzip /data/sysconfig.zip -d /tmp/sysconfig
-
打包和解包
tar:tar可以对目录和多个文件打包成一个文件,并且可以压缩,保留文件属性不丢失。
格式:tar [OPTION...] [FILE]...
常用选项 说明 -f 指定要操作的文件 -v 显示打包压缩的详细信息 -c 打包 -x 解包 -t 查看归档的文件列表 -z 相当于gzip压缩工具 -j 相当于bzip2压缩工具 -J 相当于xz压缩工具 例子: --exclude 排除文件 tar -zcvf /data/a.tar.gz --exclude=/app/host1 /app -T 指定要打包压缩的文件列表 -X 指定要排除的文件列表 tar -zcvf /data/a.tar.gz -T /root/includefilelist -X /root/excludefilelist
-
文件分割
split命令可以分割一个文件为多个文件
分割大的tar文件为多份小文件 split -b size tar-file-name prefix-name split -b 2M sysconfig.tar.gz sysconfig_part 切割后的文件使用数字后缀 split -b 2M -d sysconfig.tar.gz sysconfig_part 切割文件合并成一个大文件 cat sysconfig_part* > sysconfig.tar.gz
实例
-
查找/etc目录下大于1M且类型为普通文件的所有文件
-
打包/etc/目录下面所有conf结尾的文件,压缩包名称为当天的时间,并拷贝到/usr/local/src目录备份
-
查找/etc目录下至少有一类用户没有执行权限的文件