陈大剩博客

Shell 编程(三):Shell 编程中的常用工具

  • 陈大剩
  • 2023-01-27 22:25:41
  • 1047

文件查找

命令比较

命令 使用场景 优缺点
find 查找某一类文件,比如文件名部分一致 功能强大,速度慢
locate 只能查找单个文件 功能单一,速度快
whereis 查找程序的可执行文件、帮助文档等 不常用
which 只查找程序的可执行文件 常用于查找程序的绝对路径
  • Locate命令

    Locate可以让用户快速查找到所需要的文件或目录,它不会搜索全部数据信息,而是搜索数据库 /var/lib/mlocate/mlocate.db。此数据库是本地系统内所有文件名称及路径。系统会自动创建这个数据库,并且每天更新一次

    安装

    遇到错误“locate: 未找到命令”先安装

     yum install mlocate -y
    

    更新后台数据库(缓存)

     updatedb
    

    运行“locate inittab”查看是否成功

    [root@localhost /]# locate inittab
    /etc/inittab
    /usr/share/vim/vim74/syntax/inittab.vim
    

    命令格式

    命令格式

     locate [参数] [文件]
    
    参数 作用
    -e 将排除在寻找的范围之外。
    -1 如果是1.则启动安全模式。在安全模式下,使用者只能看到权限范围内的档案。这会使速度减慢,因为locate必须从实际的档案系统中取得档案的权限资料。
    -f 将特定的档案系统排除在外,例如我们没有道理要把proc档案系统中的档案放在资料库中。
    -q 安静模式,不会显示任何错误讯息。
    -n 最多显示n个输出。
    -r 使用正规运算式做寻找的条件。
    -o 指定资料库的名称。
    -d 指定资料库的路径
    -h 显示辅助讯息
    -V 显示程式的版本讯息
    -i 忽略大小写
    -c 只输出找到的数量

    用户更新 /var/lib/mlocate/mlocate.db,所使用配置文件 /etc/updatedb.conf 【不想搜索的文件可以写入到 updatedb.conf 中】

    使用示例

    查找和crontab相关的所有文件并且只展示一个
    [root@localhost /]# locate crontab -n 1
    /etc/anacrontab
    

    locate 与 find 不同: find 是去硬盘找,locate 只在 /var/lib/slocate 资料库中找。

  • Find 命令

    Find 命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find 命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示

    命令格式

      find [路径] [选项] [操作]
    

    选项

    选项 含义
    -name 根据文件名查找
    -perm 根据文件权限查找
    -prune 该选项可以排除某些查找目录
    -path xxx -prune -o -path xxx -prune -o
    -user 根据文件属主查找
    -group 根据文件属组查找
    -mtime -n | +n 根据文件更改时间查找
    -nogroup 查找无有效属组的文件
    -nouser 查找无有效属主的文件
    -newer file1 ! file2 查找更改时间比 file1 新但比 file2 旧 IDE 文件
    -type 按文件类型查找
    f:文件;d:目录;c:字符设备文件;b:块设备文件;l:链接文件;p:管道文件;
    -size -n +n 按文件大小查找
    -mindepth n 从n级子目录开始搜索
    -maxdepth n 最多搜索到n级子目录

    操作

    操作 含义
    -print 打印输出(默认)
    -exec 对搜索到的文件执行特定的操作
    -exec 'command' {} \;
    -ok 和 exec 功能-样,只是每次操作都会给用户提示

    使用示例

    1).查找ifcfg-ens33网卡文件

    [root@localhost ~]# find / -name "ifcfg-ens33"
    /etc/sysconfig/network-scripts/ifcfg-ens33
    

    2).在/etc、/usr、/home 目录下搜索ifcfg-ens33(其中*为通配符)

    [root@localhost /]# find /etc /usr /home -name "ifcfg-en*"
    /etc/sysconfig/network-scripts/ifcfg-ens33
    

    3).根据时间查找(atime、mtime、ctime)查找大于、等于、小于 5天的文件

    # 小于5天(-5) 大于5天(+5) 等于 5天 (5)
    [root@localhost /]# find /etc/ -mtime -5
    /etc/
    /etc/resolv.conf
    /etc/rc.d/init.d/bt
    /etc/group
    /etc/gshadow
    /etc/pki/nssdb
    /etc/sysconfig/network-scripts
    /etc/cron.daily
    /etc/tuned/active_profile
    /etc/tuned/profile_mode
    

    4).在/etc下的3级子目录开始搜索

    [root@localhost /]# find /etc -mindepth 3
    /etc/rdma/modules/roce.conf
    /etc/rdma/modules/opa.conf
    ...
    /etc/nftables/osf/pf.os
    

    5).查找当前目录下所有普通文件,但排除test目录

    [root@localhost /]# find . -path ./test -prune -o  -type f
    

    6).搜索 /etc 下的文件(非目录),文件名以 conf 结尾,且大于 10k,然后将其删除|

    [root@localhost /]# cp -r /etc /home/etc 
    [root@localhost /]#  find /home/etc/ -type f -name '*.conf' -size +10k -exec rm -rf {} \
    
    [root@localhost /]# find /home/etc/ -type f -name '*.conf' -size +5k -ok rm -rf {} \;
    < rm ... /home/etc/man_db.conf > ? y 
    < rm ... /home/etc/kdump.conf > ? n
    < rm ... /home/etc/tcsd.conf > ? n
    

使用Find命令时尽量在指定目录下进行搜索,否则会占用很多系统资源

  • Which命令

    which命令用于查找文件。

    which指令会在环境变量$PATH设置的目录里查找符合条件的文件。且可查找存在以及执行位置

    echo 命令可以查看$PATH的值

      [root@localhost /]# echo $PATH
      /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
    

    which会根据上面7个文件返回

    命令格式

      which [文件...]
    

    为什么which后面是文件?因为Linux一起皆为文件,执行文件也是文件

    参数 作用
    -n<文件名长度> 指定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名。
    -p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径。
    -w 指定输出时栏位的宽度。
    -V 显示版本信息。

    使用示例

    查找“find”的绝对路径

    [root@localhost /]# which find
    /usr/bin/find
    

    查看指令”bash”的绝对路径

    [root@localhost /]# which bash
    /usr/bin/bash
    

值得注意的是which查找文件会根据/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin 这七个目录进行查找,优先查找到后返回。

  • Whereis 命令

    在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。该指令只能用于查找二进制文件、源代码文件和man手册页

    命令格式

    whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]    
    

    |参数 | 作用|

| —|—|
|-b |  只查找二进制文件。|
| -B<目录> |  只在设置的目录下查找二进制文件。|
|-f |  不显示文件名前的路径名称。|
|-m |  只查找说明文件。|
|-M<目录> |  只在设置的目录下查找说明文件。|
|-s |  只查找原始代码文件。|
|-S<目录> |  只在设置的目录下查找原始代码文件。|
|-u |  查找不包含指定类型的文件。|

#### 使用示例

查看"bash"的位置
```
[root@localhost /]# whereis bash
bash: /usr/bin/bash /usr/share/man/man1/bash.1.gz

# 只查找二进制文件
[root@localhost /]# whereis -b bash
bash: /usr/bin/bash

# 只查找说明文件
[root@localhost /]# whereis -m bash
bash: /usr/share/man/man1/bash.1.gz
```

压缩

Linux 系统支持的打包压缩命令有很多种,不同命令所用的压缩技术不同,彼此无法相互压缩。压缩文件的名称会添加后缀。如.gz、.bz2、.tar.xz、.tar.gz

gizp

[root@localhost home]# touch /home/root/file{1..20}
[root@localhost home]# gizp /home/root/*
[root@localhost home]# ls /home/root/
file10.gz  file11.gz  file12.gz  file13.gz  file14.gz  file15.gz  file16.gz  file17.gz  file18.gz  file19.gz  file1.gz  file20.gz  file2.gz  file3.gz  file4.gz  file5.gz  file6.gz  file7.gz  file8.gz  file9.gz

gzip 命令只能对单一的文件进行压缩,并不能将多个文件打包为一个大文件

tar

tar(英文全拼:tape archive )命令用于备份文件。

tar 是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件。

tar 命令可将多个目录与文件打包在一起,同时还可以使用gzip命令对文件进行压缩。

命令格式

格式太长不一一介绍把常用的参数介绍一下

参数 作用
-c 打包一个文件
-z 调用gzip进行压缩
-j 调用bzip2进行压缩
-J 调用xz进行压缩
-f 表示后面被处理的名称

使用示例

[root@localhost home]# tar -czf root-gzip.tar.gz root
[root@localhost home]# tar -cjf root-bzip.tar.gz root
[root@localhost home]# tar -cJf root-xz.tar.gz root
[root@localhost home]# ll -h root*
-rw-r--r-- 1 root root  368 Apr  2 15:46 root-bzip.tar.gz
-rw-r--r-- 1 root root  492 Apr  2 15:45 root-gzip.tar.gz
-rw-r--r-- 1 root root  384 Apr  2 15:47 root-xz.tar.gz

Linux 系统中并不存在文件拓展名,但是为了用户识别方便,创建文件名应该添加后缀。

解压

tar解压

当解压某个压缩文件时,首先需要知道文件是由何种压缩方式创建出来的,然后用相应的解压方式解压。

确定压缩方式

[root@localhost home]# file root-bzip.tar.gz 
root-bzip.tar.gz: bzip2 compressed data, block size = 900k
[root@localhost home]# file root-gzip.tar.gz 
root-gzip.tar.gz: gzip compressed data, from Unix, last modified: Sat Apr  2 15:45:02 2022
[root@localhost home]# file root-xz.tar.gz 
root-xz.tar.gz: XZ compressed data

不解压的情况可以通过“-t” 查看打包的文件

[root@localhost home]# tar -tf root-bzip.tar.gz 
root/
root/file1.gz
root/file10.gz
root/file11.gz
root/file12.gz
root/file13.gz
root/file14.gz
root/file15.gz
root/file16.gz
root/file17.gz
root/file18.gz
root/file19.gz
root/file2.gz
root/file20.gz
root/file3.gz
root/file4.gz
root/file5.gz
root/file6.gz
root/file7.gz
root/file8.gz
root/file9.gz

命令格式

不一一介绍只介绍几个常用的参数

参数 作用
-C 解压的指定目录
-x 解打包或解压缩
-v 显示解压过程

使用示例

[root@localhost home]# file root-bzip.tar.gz 
root-bzip.tar.gz: bzip2 compressed data, block size = 900k
[root@localhost home]# tar -xvf root-bzip.tar.gz -C /home/
root/
root/file1.gz
root/file10.gz
root/file11.gz
root/file12.gz
root/file13.gz
root/file14.gz
root/file15.gz
root/file16.gz
root/file17.gz
root/file18.gz
root/file19.gz
root/file2.gz
root/file20.gz
root/file3.gz
root/file4.gz
root/file5.gz
root/file6.gz
root/file7.gz
root/file8.gz
root/file9.gz

直接打包并解压

tar -czf - root | tar -xzf - -C /tmp

unzip

后缀为zip的文件,直接使用zip解压即可

unzip xxx.zip
分享到:
0

说点儿什么吧

头像

表情

本站由陈大剩博客程序搭建 | 湘ICP备2023000975号| Copyright © 2017 - 陈大剩博客 | 本站采用创作共用版权:CC BY-NC 4.0

站长统计| 文章总数[115]| 评论总数[9]| 登录用户[22]| 时间点[119]

logo

登入

社交账号登录