Linux学习笔记:文件搜索、帮助与解压缩命令

216 阅读5分钟

这是我参与更文挑战的第4天,活动详情查看: 更文挑战

文件搜索命令

find

  • 命令名称:find
  • 执行权限:所有用户
  • 功能:文件搜索
  • 语法:find [搜索范围] [匹配条件]

示例1,根据文件名查找:

  • 在目录/etc中查找文件init:

    find /etc -name init
    
    • 与windows的区别是,linux搜索init只会出现名字为init的文件,但是windows中,还会搜索到名字包含init的文件。

    • 可以使用-etec/-ok来对搜索结果执行操作,如在/etc下查找inittab文件并显示其详细信息

      find /etc -name inittab -exec ls -l {} \;
      
      • {}表示对结果做一个替换
      • \表示转义符
      • ;表示结束
  • 如果想与windows一样,也搜出包含有init的文件,做法如下:

    find /etc -name *init*
    
    • 使用通配符
  • 使用-iname来搜索可以不区分大小写

    find /etc -iname init???
    
    • 文件initabc和INITABC都会被搜索到
    • 使用正则表达式来搜索

示例2:根据文件大小查找:

  • 在根目录下查找大于100MB的文件

    find / -size +204800
    
  • 补充几个查询条件(并非只能用于size):

    • -a:两个查询条件同时满足
    • -o:两个条件满足任意一个即可
    • 如:在/etc下查找大于80MB小于100MB的文件
    find /etc -size +163840 -a -size -204800
    
    • -type:根据文件类型查找

      • f:文件

      • d:目录

      • l:软链接文件

      • 如:在/etc下查找文件名由init开头,且类型是目录的文件

        find /etc -name init* -a type -d
        
    • -inum:根据i节点查找

      • 每个文件都有个i节点,通过ls -i可以查看。

      • 比如有一个文件的i节点为31531

        find . -inum 31531 -exec rm {} \;
        

示例3:根据所有者查找:

  • 在/home下查找所有者为AAA的文件:

    find /home -user AAA
    
    • -group:根据所属组查找

示例4:根据修改时间查找:

  • 在/etc下查找5分钟内被修改过属性的文件和目录

    find /etc -cmin -5
    
    • 关于-5:减号表示多长时间之内,加号表示超过多长时间
    • -cmin:根据文件属性查找(change)
      • 比如通过ls -ld /home/AAA可以看到文件属性
    • 补充其他查找选项:
      • -amin:根据访问时间查找(access)
      • -mmin:根据文件内容查找(modify)

locate

  • 命令名称:locate
  • 执行权限:所有用户
  • 功能:在文件资料库中查找文件
  • 语法:locate 文件名

注1:locate搜索会很快,因为它将文件定期的收集到一个文件资料库中。所以他在搜索时直接在资料库中搜索,因此比find快。

注2:有时候locate会找不到文件,因为文件还未被搜录到文件资料库中。可以使用updatedb来更新资料库。

注3:如果文件在/tmp目录下,locate是找不到的,即使你使用了updatedb

注4:如果想在查找的时候不区分大小写,可以添加使用-i。如:locate -i helloworld.txt

which

  • 命令名称:which
  • 执行权限:所有用户
  • 功能:搜索命令所在目录及别名信息
  • 语法:which 命令

注1:存放于/bin /usr/bin下的命令是所有用户可以使用的命令。存放于/sbin /usr/sbin下的命令是root用户可以使用的命令。

示例:

# 查找cp放在哪一个文件下
which cp

# 结果:/usr/bin/cp

# 查找useradd放在哪一个文件下
which useradd

# 结果:/usr/sbin/useradd

whereis

  • 命令名称:whereis
  • 执行权限:所有用户
  • 功能:搜索命令所在目录及帮助文档路径
  • 语法:whereis [命令名称]

grep

  • 命令名称:grep
  • 执行权限:所有用户
  • 功能:在文件中搜寻字串匹配的行并输出
    • -i:不区分大小写
    • -v:排除指定字串
  • 语法:grep -iv [指定字串] [文件]

示例

root@atomy-virtual-machine:/home/atomy/桌面# grep DisableMBIMGlobal /etc/usb_modeswitch.conf 
DisableMBIMGlobal=0

注1:文件中很多时候是有#注释的,注释的代码是不生效的。我们可以使用-v排除某个指定字符,如

grep -v # /etc/usb_modeswitch.conf 

但是你会发现好像找不到信息出来。因为文件中#很多,夹在中间的有效行也被排除了。可以使用

grep -v ^# /etc/usb_modeswitch.conf

^是正则表达式的一种,表示以什么开头。grep真正强大的地方在于此,grep与正则表达式配合能很好的找到有效信息。

帮助命令

man

  • 命令名称:man
  • 英文原意:manual
  • 执行权限:所有用户
  • 功能:获得帮助信息
  • 语法:man [命令或配置文件]
    • (空格) 或f 翻页
    • b 向下翻页
    • (Enter) 换行
    • q或Q 退出

示例:查看ls命令的帮助信息

man ls

image-20210620223157482

示例:查看配置文件services的帮助信息

man services   

help

  • 命令名称:help
  • 执行权限:所有用户
  • 功能:获得Shell内置命令的帮助信息
  • 语法:help 命令

示例:查看umask命令的帮助信息

help umask   

image-20210620223851912

解压缩命令

gzip

  • 命令名称:gzip
  • 英文原意:GNU zip
  • 执行权限:所有用户
  • 功能:压缩文件
    • 压缩后文件格式:.gz
  • 语法:gzip [文件]

gunzip

  • 命令名称:gunzip
  • 英文原意:GNU unzip
  • 执行权限:所有用户
  • 功能:解压缩.gz的压缩文件
    • 只能压缩文件不能压缩目录
  • 语法:gunzip [压缩文件]

tar

  • 命令名称:tar

  • 执行权限:所有用户

  • 语法:tar 选项[-zcf] [压缩后文件名] [目录]

  • 功能:打包目录,压缩后文件格式:.tar.gz

    • -c: 打包
    • -v: 显示详细信息
    • -f: 指定文件名
    • -z: 打包同时压缩
    • -x: 解包

示例:压缩

我在tmp目录下的tartest文件夹中有一个文件tartext.txt。我现在压缩目录。

将目录tartest打包并压缩为.tar.gz文件

tar -zcf tartest.tar.gz tartest

image-20210620225933272

示例:解压

root@atomy-virtual-machine:/tmp# tar -zxvf tartest.tar.gz
tartest/
tartest/tartest.txt

zip

  • 命令名称:zip
  • 执行权限:所有用户
  • 功能:压缩文件或目录
    • 压缩后文件格式:.zip
  • 语法:zip 选项[-r] [压缩后文件名] [文件或目录]
    • -r 压缩目录

示例:压缩文件

zip tartest.txt.zip tartest.txt

示例:压缩目录

zip tartest.zip tartest

unzip

  • 命令名称:unzip
  • 执行权限:所有用户
  • 功能:解压.zip的文件
  • 语法:unzip [压缩文件]

bzip2/bunzip2

  • 语法: bzip2 选项 [-k] [文件]

    • -k 产生压缩文件后保留原文件
    • 压缩后文件格式:.bz2
  • 语法: bunzip2 选项 [-k] [压缩文件]

    • -k 解压缩后保留原文件