Linux命令总结之文件管理命令

二、Linux 文件管理命令

1、 which命令

which 命令的作用是,在 PATH 变量指定的路径中搜索可执行文件的所在位置。它一般用来确认系统中是否安装了指定的软件。

命令格式: which 可执行文件名称
常用范例
例一:确认是否安装了 gcc,可以使用如下命令:

which gcc

例二:查看 cd 命令的位置路径,可以使用如下命令:

which cd

显示在 PATH 变量指定的路径下没有 cd 命令。为什么显示没有呢?这是因为 cd 是 shell 内建命令,而 which 默认是找 PATH 内所指定的目录,内建命令不在其指定的目录中,所以当然找不到。

那么就有个问题,为什么有的环境中 cd 是一个 shell 函数,而有的又是内建命令呢?这跟所使用的 bash 有关。

echo $SHELL   //命令可以查看当前使用的 shell。
到底什么是命令?

1、 是一个可执行程序,就像我们所看到的位于目录/usr/bin中的文件一样。属于这一类的程序,可以编译成二进制文件,诸如用 C 和 C++ 语言写成的程序,也可以是由脚本语言写成的程序,比如说 shell,perl,python,ruby,等等。
2、是一个内建于 shell 自身的命令。bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,上面我本地环境中的 cd 命令,就是一个 shell 内部命令。
2、是一个 shell 函数。这些是小规模的 shell 脚本,它们混合到环境变量中。 比如上面讲到的 cd 命令,在某些环境中就是一个 shell 函数。
3、是一个命令别名。我们可以定义自己的命令,建立在其它命令之上。

2、 whereis命令

whereis 命令主要用于定位可执行文件、源代码文件和帮助文件在文件系统中的位置。
whereis 命令还具有搜索源代码、指定备用搜索路径和搜索不寻常项的功能。

whereis 命令查找速度非常快,这是因为它根本不是在磁盘中漫无目的乱找,而是在一个数据库中(/var/lib/mlocate/mlocate.db)查询。这个数据库是 Linux 系统自动创建的,包含有本地所有文件的信息,并且每天通过自动执行 updatedb 命令更新一次。也正是因为这个数据库要每天才更新一次,就会使得 whereis 命令的搜索结果有时候会不准确,比如刚添加的文件可能搜不到。

命令格式: whereis [选项] 文件
常用参数:
在这里插入图片描述
常用范例
例一:搜索 gcc 可执行文件的路径,可以使用如下命令:

whereis -b gcc

例二:搜索 gcc 帮助文件的路径,可以使用如下命令:

whereis -m gcc

例三:搜索 gcc 源代码的路径,可以使用如下命令:

whereis -s gcc
3、 locate命令

locate 命令跟 whereis 命令类似,且它们使用的是相同的数据库。但 whereis 命令只能搜索可执行文件、联机帮助文件和源代码文件,如果要获得更全面的搜索结果,可以使用 locate 命令。
locate 命令使用了十分复杂的匹配语法,可以使用特殊字元(如’*’和’?’)来指定需要查找的样本。

命令格式: locate [选项][搜索字符串]
常用参数:
在这里插入图片描述
常用范例
首先需要安装并更新数据库:

sudo apt-get install locate
sudo updatedb

例一:搜索 etc 目录下所有以 sh 开头的文件,可以使用如下命令:

locate /etc/sh

例二:搜索 etc 目录下文件名包含 lou 的文件,可以使用如下命令:

locate /etc/*lou*
4、 find命令

find 命令主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。Linux 下 find 命令提供了相当多的查找条件,功能很强大,对应的学习难度也比较大。

命令格式: find [选项][搜索路径] [表达式]

默认路径是当前目录,默认表达式为 -print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。

常用参数:
在这里插入图片描述

常用范例1
例一:打印当前目录下的文件目录列表,可以使用如下命令:

find . -print

例二:打印当前目录下所有以.txt 结尾的文件名,可以使用如下命令

find . -name "*.txt" -print

例三:打印当前目录下所有以.txt 或.pdf 结尾的文件名,可以使用如下命令(截图只显示部分):

find . \( -name "*.pdf" -or -name "*.txt" \)

例四:打印当前目录下所有不以.txt 结尾的文件名,可以使用如下命令:

find . ! -name "*.txt"

常用范例2
在这里插入图片描述
在这里插入图片描述
例一:打印当前目录下所有以 .txt 结尾的符号链接,可以使用如下命令:

find . -type l -name "*.txt" -print

例二:打印当前目录下所有权限为 777 的 php 文件(web 服务器上的 php 文件一般需要执行权限),可以使用如下命令:

find . -type f -name "*.php" -perm 777

例三:打印当前目录下 root 用户拥有的所有文件,可以使用如下命令:

find . -type f -user root

例四:打印当前目录下权限不是 777 和 664 的所有文件,可以使用如下命令:

find . -type f \( ! -perm 777 -and ! -perm 644 \)

常用范例3

例一:找到当前目录下所有 php 文件,并显示其详细信息,可以使用如下命令:

find . -name "*.php" -exec ls -l {} \;

例二:在实验楼环境中有很多自己编写的 c 语言代码文件,现在想要把所有 c 语言代码文件下载下来,如果一个一个的下载很麻烦,我们可以先查找到所有的 c 语言代码文件,然后将这些文件内容写入到一个文件中,下载这一个文件就可以了,可以使用如下命令:

find . -name "*.c" -exec cat {} \; > all.c

例三:默认下,-exec 后面只能使用单个命令,如果想要多个命令,可以将多个命令写入脚本文件中,然后在 -exec 中使用这个脚本,可以使用如下命令:

find . -name "*.c" -exec ./command.sh {} \;
5、 xargs命令

我们可以用管道将一个命令的 stdout(标准输出)重定向到另一个命令的 stdin(标准输入)。但有些命令只能以命令行参数的形式接收数据,而无法通过 stdin 接收数据流。在这种情况下,无法通过管道将数据重定向给这些命令。

这时 xargs 就可以发挥它的作用了,xargs 命令可以从标准输入接收输入,并把输入转换为一个特定的参数列表。

命令格式: command | xargs [选项][command]
常用参数:
在这里插入图片描述
常用范例
例一:将多行输入转换为单行输出,可以使用如下命令:

cat a.txt | xargs

例二:将单行输入转换为多行输出,可以使用如下命令:

echo "1 2 3 4 5 6 7" | xargs -n 3

例三:将单行输入转换为多行输出,指定分隔符为 i,可以使用如下命令:

cat b.txt | xargs -d i -n 3

例四:查找当前目录下所有 c 代码文件,统计总行数,可以使用如下命令:

find . -type f -name "*.c" | xargs wc -l
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值