文件查找工具和打包压缩工具

一、shell脚本编程

  1. 编写脚本 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

    文件查找工具和打包压缩工具

  2. 编写生成脚本基本格式的脚本,包括作者,联系方式,版本,时间,描述等。

    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结尾的脚本文件时就会自动生成相应的格式。效果如图。

    文件查找工具和打包压缩工具

二、文件查找工具和打包压缩工具

文件查找工具

  1. locate

    格式:locate [OPTION]... [PATTERN]...
    选项 说明
    -i 不区分大小写搜索
    -n # 只列举前#个匹配项目
    -r 使用基本正则表达式
    --regex 使用扩展正则表达式
    -b 只匹配基名,默认匹配全路径
    -c 显示匹配文件的数量

    locate命令基于/var/lib/mlocate/mlocate.db这个目录索引文件来进行文件查找的,系统最小化安装是没有这个文件的。创建此文件有两种方法:第一种是过一段时间后系统会自动生成此文件;第二种是使用updatedb命令手动创建(此命令也可用于手动更新mlocate.db文件)。

  2. 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.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
  2. 打包和解包

    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
  3. 文件分割

    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

实例

  1. 查找/etc目录下大于1M且类型为普通文件的所有文件

    文件查找工具和打包压缩工具

  2. 打包/etc/目录下面所有conf结尾的文件,压缩包名称为当天的时间,并拷贝到/usr/local/src目录备份

    文件查找工具和打包压缩工具

  3. 查找/etc目录下至少有一类用户没有执行权限的文件

    文件查找工具和打包压缩工具

猜你喜欢

转载自blog.51cto.com/15092752/2671001