编写脚本 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目录下至少有一类用户没有执行权限的文件
原文:https://blog.51cto.com/15092752/2671001