Linux常用命令详解(二)



一、创建链接文件-ln

为文件或目录建立链接文件,类似于Windows系统的快捷方式链接文件类型。

链接文件类型

  • 软链接(又称为符号链接)
    inode号不一样
    创建软链接

    ln [-s] 源文件或目录... 链接文件或目标位置
    
  • 硬链接
    INode号一样
    创建硬链接

    ln 源文件或目录... 链接文件或目标位置
    

主要区别

创建的符号链接文件
1、允许创建的位置 软/硬有区别的
2、占用磁盘空间 有区别的
3、创建的对象 不同

符号链接与源文件大小inode号文件属性删除源文件后
软链接不一样不一样指向源文件不能查看
硬链接一样一样独立文件正常查看

在 Linux 中,文件名和文件的数据是分开存储的。
在这里插入图片描述

提示

  • 在 Linux中,只有文件的硬链接数==0才会被删除
  • 使用 ls-l 可以查看一个文件的硬链接的数量
  • 在日常工作中,几乎不会建立文件的硬链接,知道即可

引申原理

在文件系统中找文件,文件本身就是指向磁盘中的存储块,本身就是个硬链接。

  • 硬链接

    硬链接也是在磁盘中的存储块找文件,因此inode值与文件本身一样。

  • 软链接

    只是一个快捷方式

删除新建文件后的区别

删除后重复创建相同文件名、不同内容的文件

  • 软链接:指向文件名,内容与新建文件一致
  • 硬链接:不受影响,依然是源文件

验证硬链接占用空间的小实验

cp /var/log/messages ./ ##拷贝文件 
ln messages msag        ##创建硬链接1
ln messages m  			##创建硬链接2
ln messages a 			##创建硬链接3
du -h					##查看磁盘占用

硬软链接优缺点

软链接(Symbolic Link)

优点:

  1. 可以跨文件系统:软链接可以指向不同文件系统中的文件。
  2. 指向目录:软链接可以指向目录,方便快捷地访问目标目录。
  3. 动态链接:如果目标文件被删除或移动,软链接会变成断开的链接(dangling link),但不会占用多余的空间。

缺点:

  1. 性能较差:访问软链接时需要额外的步骤来解析链接并定位目标文件,性能比硬链接稍差。
  2. 容易失效:如果目标文件被删除或移动,软链接会失效,变成断开的链接。
  3. 不支持文件系统级别的备份:一些文件系统备份工具可能不会正确备份软链接和其目标文件。

适用场景:

软链接适用于需要创建快捷方式、跨文件系统引用文件、或指向目录的情况。

硬链接(Hard Link)

优点:

  1. 高效:硬链接直接指向数据块,性能较高,无需额外的解析步骤。
  2. 可靠性:即使目标文件被删除,硬链接仍然存在并可以访问文件内容,除非所有硬链接都被删除。
  3. 节省空间:硬链接只是增加了一个目录项,没有创建新的文件,占用的磁盘空间非常少。

缺点:

  1. 不能跨文件系统:硬链接只能在同一个文件系统中创建,无法跨越不同的文件系统。
  2. 不能指向目录:硬链接只能指向文件,不能指向目录。
  3. 混淆和复杂性:多个硬链接指向同一个文件,可能会造成管理和维护上的混淆,难以确定哪些链接实际指向同一个文件。

适用场景:

硬链接适用于需要高效访问文件、增加文件引用、或确保文件内容在目标文件被删除后仍可访问的情况。

二、复制文件或目录-cp

将需要复制的文件或目录(源)重建一份,并保存为新的文件或目录

格式

cp [选项]... 源文件或目录... 目标文件或目录...

常用选项:-f、-i、-p、-r

cp的常用选项

-f:覆盖目标同名文件或目录时不进行提醒,而直接强制复制

-i:覆盖目标同名文件或目录时提醒用户确认

-p:复制时保持源文件的权限、属主及时间标记等属性不变(用的多)

-r:复制目录时必须使用此选项,表示递归复制所有文件及子目录

-a:完整保留所有的信息包括连接文件,可以直接复制目录

:复制多个文件或目录时,目标位置必须是目录,且目标目录必须已存在

拓展

全量复制:cp 复制全部文件,只能在本地复制

增量复制:rsync 只复制新增加的部分,可以跨主机复制(消耗资源更低速度更快)

更多cp命令的一些选项

选项描述
-r 或 -R递归复制目录及其内部的所有内容(包括子目录和文件)。这是复制整个目录结构时必需的选项。
-p保留文件的属性,包括修改时间、访问权限(如所有者、组、权限模式)和时间戳等。这有助于保持文件系统的原样复制。
-v显示详细的复制过程,包括被复制的文件和目录的名称。这有助于跟踪复制操作或调试问题。
-f强制复制,不提示确认即覆盖目标文件或目录。这可以避免在复制过程中因覆盖文件而中断。
-i在覆盖目标文件之前询问用户是否确认。这提供了额外的安全性,防止意外覆盖重要文件。
-a归档模式,相当于同时使用-dR --preserve=all选项。它保留了源文件的几乎所有属性,包括链接、文件属性,并递归复制目录。这是进行完整备份时常用的选项。
-u只有当源文件比目标文件更新或目标文件不存在时,才进行复制。这有助于避免复制已经是最新的文件。
-l创建硬链接而不是复制文件内容。这会在文件系统中创建一个指向原始文件的链接,而不是复制文件本身。注意,硬链接不能跨文件系统创建,也不能用于目录。
-s创建符号链接(软链接)而不是复制文件。符号链接类似于Windows中的快捷方式,它包含了目标文件的路径。
–backup在覆盖文件之前,对目标文件进行备份。这有助于恢复被覆盖的文件。可以使用不同的选项来指定备份文件的命名方式,如–backup=numbered(备份文件名为原始文件名加上一个数字后缀)。

三、删除文件或目录-rm

删除指定的文件或目录

格式

rm [选项] 要删除的文件或目录...

rm的常用选项

-f:删除文件或目录时不进行提醒,而直接强制删除

-i:删除文件或目录时提醒用户确认。(y表示删除,n表示不删除)

-r:删除目录时必须使用此选项,表示递归删除整个目录树(应谨慎使用)

示例

rm -rf public_html/grub/
rm -i public html/apg.conf
rm -rf /etc/yum.repos.d/*

高危命令

高危命令之一:rm -rf /etc/profile

高危命令之二:rm -rf ./*

注意

  • 不要直接删除系统中已有的目录或配置文件,以避免出现意外故障。
  • 删除目录下文件时建议最好先切换到目录下再执行rm -rf命令
  • 尽量以相对命令的方式删除
  • 高危命令之一:rm -rf /etc/profile
  • 高危命令之二:rm -rf ./*
  • rm命令在删除文件或目录时不会将其移动到回收站或垃圾箱,而是直接从文件系统中删除
  • 为了安全起见,尽量使用rm命令的-i选项进行交互式确认
cd /etc/yum.repos.d/

rm -rf ./*

更多rm命令的一些选项

选项描述
-r 或 -R递归地删除目录及其内部的所有内容(包括子目录和文件)。默认情况下,rm命令只删除文件,而不会删除目录,除非使用了此选项。
-f 或 --force强制删除文件或目录,不提示确认。即使文件不存在或没有写权限,也不会显示错误消息。请注意,使用此选项时要格外小心,以免意外删除重要文件。
-i 或 --interactive在删除文件或目录之前询问用户是否确认。这对于防止意外删除非常有用。如果指定了多个文件或目录,rm命令会为每个文件或目录显示一个确认提示。
-I在删除超过三个文件或进行递归删除之前要求确认。这个选项比-i选项提供的提示更少,但仍然可以防止大多数错误发生。
-v 或 --verbose显示详细的删除过程,包括被删除的文件或目录的名称。这有助于跟踪删除操作或确认哪些文件已被删除。
-d 或 --dir删除空目录。如果目录不为空,则不会删除,并且会显示错误消息。这个选项通常与-r选项一起使用来删除目录及其内容,但单独使用时仅删除空目录。
-q删除文件时不显示任何消息
–preserve-root防止rm命令删除根目录(/)及其内容。(重要的安全措施)

四、修改命令别名-alias(不常用)

一般用于临时修改,不常用
临时修改
格式

alias 命令别名 = '命令'
unalias 别名命令    ##删除别名

示例

alias mynetwork='vim /etc/sysconfig/network-scripts/ifcfg-ens33'

永久修改(更不用)

在/etc/.bashrc 会影响全部
/root/.bashrc 只影响当前用户(当前用户的家目录)root

五、移动/重命名文件或目录-mv

将指定的文件或目录转移位置
如果目标位置与源位置相同,则相当于执行重命名操作

格式:

mv [选项] ... 源文件或目录... 目标文件或目录

示例:

mv mytouch mkfile
mv mkfile public_html/

mv命令的一些常用选项

选项描述
-i 或 --interactive在覆盖目标文件之前提示用户确认。
-f 或 --force强制移动或重命名文件,不提示确认,并覆盖目标文件(如果目标文件是目录,则需要-r或-R选项)。
-n 或 --no-clobber不要覆盖任何已存在的文件(注意:在某些版本的mv中可能不可用或行为有所不同)。
-v 或 --verbose显示详细的移动或重命名过程。
-u 或 --update只在源文件比目标文件新,或目标文件不存在时移动文件。
-r 或 -R 或 --recursive递归移动目录及其内部的所有内容。

六、查看所有磁盘及其挂载目录的剩余空间-df

系统资源查询相关:

主要监控5大系统资源:磁盘空间、CPU、内存、I/O、进程信息
规范说法:使用一些日常的查询指令查看系统资源,如磁盘空间、CPU、内存、I/O、进程信息、网络流量监控
和磁盘相关的命令有:du、ls、df等

示例

[root@localhost opt]# df -h

输出结果:
在这里插入图片描述

结果解释

  • 前者(文件系统)为后者(挂载点)提供存储资源
  • 主要看已用百分比

七、挂载文件系统-mount

将一个文件系统(如硬盘分区、光盘、网络文件系统等)连接到Linux系统的目录树中的某个目录上的过程。挂载之后,用户可以通过该目录访问文件系统中的数据。

基本概念

  • 挂载点:挂载文件系统的目录。通常是一个空目录。
  • 文件系统:存储数据的逻辑结构,可以是硬盘分区、USB设备、光盘或网络存储等。

功能

  1. 提供共享空间
  2. 共享数据

格式

mount [选项] 设备 文件夹  ##挂载文件系统
umount /dir              ##卸载文件系统
  • 设备:要挂载的文件系统设备,例如/dev/sda1
  • 文件夹:挂载点,例如/mnt

mount 命令的常用选项:

选项说明示例
-o指定多个挂载选项,选项之间用逗号分隔。例如:ro、rw、loop、nosuid、noexec等。mount -o ro,loop /dev/sda1 /mnt
ro只读挂载mount -o ro /dev/sda1 /mnt
rw读写挂载mount -o rw /dev/sda1 /mnt
loop将一个文件作为块设备挂载,通常用于挂载ISO镜像文件mount -o loop image.iso /mnt
nosuid禁止在挂载点运行set-user-identifier或set-group-identifier程序mount -o nosuid /dev/sda1 /mnt
noexec不允许在挂载点执行任何二进制文件mount -o noexec /dev/sda1 /mnt
nodev禁止设备文件在挂载点被解释mount -o nodev /dev/sda1 /mnt
remount重新挂载已经挂载的文件系统,可以改变挂载选项mount -o remount,rw /mnt
uid设置挂载点的所有者用户IDmount -o uid=1000 /dev/sda1 /mnt
gid设置挂载点的所有者组IDmount -o gid=1000 /dev/sda1 /mnt
umask设置挂载点的文件权限掩码mount -o umask=022 /dev/sda1 /mnt
-t指定文件系统类型,如ext4、vfat、nfs等mount -t ext4 /dev/sda1 /mnt
-a挂载/etc/fstab中定义的所有文件系统mount -a
-v详细模式,显示挂载过程中的详细信息mount -v /dev/sda1 /mnt
-n挂载时不更新/etc/mtab文件mount -n /dev/sda1 /mnt
-r只读挂载,等同于-o romount -r /dev/sda1 /mnt
-w读写挂载,等同于-o rwmount -w /dev/sda1 /mnt
-l显示标签信息mount -l
-f模拟挂载,用于测试挂载命令的正确性,不执行实际挂载操作mount -f /dev/sda1 /mnt

示例

  1. 挂载一个分区

    sudo mount /dev/sda1 /mnt
    

    /dev/sda1分区挂载到/mnt目录。

  2. 查看挂载信息

    mount
    

    显示当前系统所有已挂载的文件系统。

  3. 挂载ISO镜像

    sudo mount -o loop /path/to/image.iso /mnt
    

    将ISO镜像文件挂载到/mnt目录。

  4. 卸载文件系统

    sudo umount /mnt
    

    将挂载在/mnt目录的文件系统卸载。

八、查找命令文件存放目录-which

用于查找当前主机有没有xx命令
搜索范围由环境变量 PATH 决定(echo $PATH)
(使用较少)

格式

which 命令|程序名  ##默认当找到第一个目标后不再继续查找

which -a 命令|程序名  ##在所有搜索路径中查找

示例

which history
which ls
which -a ls 
which wget

结果输出:
在这里插入图片描述

:使用 which 查找内部命令时,将找不到对应的程序

九、查找文件或目录-find

文件查找工具,它允许用户根据各种条件搜索文件系统中的文件和目录。

采用递归方式,根据目标的名称、类型、大小等不同属性进行精细查找

命令的特点

  • 精确查找
  • 实时査找 遍历(慢)
  • 支持查找条件较多

格式1

find [查找范围] [查找条件表达式]

参数解释

[查找范围]:查找文件或子目录的目录位置

[查找条件表达式]:查找条件类型

格式2:

find [查找路径] [查找条件] **[处理动作]**

参数解释

[查找路径]:指定具体目标路径,默认为当前目录。

[查找条件]:可以对文件名、大小、类型、权限等标准进行查找:默认为找出指定路径下的所有文件

[处理动作]:对符合条件的文件做操作,默认输出至屏幕(print)

示例(exec选项)

查找opt目录下,所有大于1G的文件,然后把他们移动到etc目录下

find /opt/ -size +1G -type f
find /opt/ -size +1G -type f -exec mv {} /etc \;

查找到/opt日录下,1G以上的普通文件,然后将查找到的文件全部mv移动到etc里面

exec:和管道符类似,将 find /opt/ -size +1G -type f 的处理结果传参到{}里

my {} /etc \;【处理动作】

格式3

find [路径] [选项] [表达式] [动作]
  • 路径:指定 find 命令开始搜索的目录。如果省略路径,则默认为当前目录。
  • 选项:可选,用于控制 find 命令的行为,如搜索的最大深度、是否跨文件系统搜索等。
  • 表达式:用于指定搜索条件,如文件名、文件类型、大小、修改时间等。多个表达式可以通过逻辑运算符(如 andornot)组合使用。
  • 动作:对匹配的文件执行的操作,如打印、删除、执行命令等。如果不指定动作,则默认为 print,即打印出匹配文件的路径名。

find命令的常用选项及其描述

查找类型选项(关键字)描述
按名称查找-name根据目标文件的名称进行查找,允许使用“”及“?”通配符。如:,?,[],[^]。通配符要加双引号引起来。
按名称查找(不区分大小写)-iname类似于-name,但搜索时不区分文件名的大小写。
按文件大小查找-size [+/-]#根据目标文件大小进行插找。其中#代表大小(c:字节,k:千字节,M:兆字节,G:吉字节),+表示大于,-表示小于,无符号表示正好等于。
按文件属主查找-user根据文件是否属于目标用户进行查找。用户可以是用户名或UID。
按文件所属组查找-group根据文件是否属于目标组进行查找。组可以是组名或GID。
按文件类型查找-type根据文件的类型进行查找。常见的类型包括f(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)、s(套接字文件)、p(管道文件)等。
按inode号查找-inum根据文件inode号查找。inode是文件系统中用于唯一标识文件的元数据。
按权限查找-perm按文件权限查找,可以指定具体的权限模式。可以是八进制数(如644)或符号模式(如u=rwx,g=rx,o=r)。
最大搜索目录深度-maxdepth level将搜索限制在指定的最大目录深度以内。level是一个非负整数,表示目录的深度。
最小搜索目录深度-mindepth level从指定的最小目录深度开始搜索。这有助于避免在顶层目录本身中查找匹配项。
以下不重要——————
查找具有特定权限的文件(精确匹配)-perm /mode查找任何一位权限匹配的文件。如果文件权限位中有任何一位与指定的模式匹配,则该文件符合条件。
查找所有权限都不匹配的文件-perm -mode查找所有权限位都严格匹配的文件。文件权限必须完全匹配指定的模式。
执行对匹配文件的命令-exec command {} ;对匹配的每个文件执行指定的命令。{}是一个占位符,代表当前匹配的文件名。命令的末尾必须是;来终止-exec选项。
忽略错误-ignore_readdir_race在处理大量文件时,如果某些文件在查找过程中被删除或修改,可能会导致错误。此选项可以忽略这些错误。
排除特定目录-path … -prune -o … -print使用-path和-prune选项结合逻辑表达式来排除特定目录或文件路径的搜索。-o(或)操作符用于指定在排除条件不满足时执行的操作。
查找并删除文件-exec rm {} ;警告:这个组合选项会直接删除匹配的文件,务必谨慎使用。
按最后修改时间查找-mtime nmodify time(修改时间),根据文件的最后修改时间进行查找。n 是一个整数,表示距离现在 n24 小时之前被修改的文件。如果 n 前面有 + 符号,则表示修改时间超过 n24 小时的文件;如果 n 前面有 - 符号,则表示修改时间在 n24 小时之内的文件。没有符号时,表示正好在 n24 小时前被修改的文件。
按最后被访问或读取的时间查找-atimeaccess time(访问时间),记录的是文件最后一次被访问或读取的时间。但现代Linux系统中,出于性能考虑,默认情况下不会实时更新atime,除非特别设置了相应的系统参数。
按文件元数据最后一次被改变的时间查找-ctimechange time(改变时间),记录的是文件元数据最后一次被改变的时间。这包括文件的属性、权限等的修改。在Linux中,ctime通常也会随着mtime的改变而改变,因为文件的元数据的改变通常伴随着文件内容的改变。
用于选择空目录-empty

注意

  • 在使用size选项时,#代表具体的大小数值,前面可以加上+- 来表示大于或小于该数值。``
  • 文件大小的单位(如kB, MB, GB)大小写敏感。
  • type选项后的参数(如f, d, b, c)用于指定要查找的文件类型。
  • maxdepthmindepth选项用于控制搜索的目录深度,在递归搜索大型文件系统时非常有用。

-type 选项:

-type 选项在 find 命令中用于指定要查找的文件类型。-type 的具体形式:

类型描述
f普通文件
d目录
l符号链接(symbolic link)
b块设备文件(block device)
c字符设备文件(character device)
p管道(pipe)
s套接字(socket)
D门户(door)(特定系统支持)

find常用选项拓展

-user USERNAME #查找属主为指定用户(UID)的文件

-group GRPNAME #查找属组为指定组(GID)的文件

-uid UserlD #查找属主为指定的UID号的文件

-gid GroupID #查找属组为指定的GID号的文件

-nouser #查找没有属主的文件

-nogroup #查找没有属组的文件

-name"文件名称" #支持使用glob,如:*,?,[],[^],通配符要加双引号引起来

-inum n #按inode号查找

-links n#链接数为n的文件

格式示例:

查找当前目录及子目录下所有的普通文件

find . -type f 
find /opt -name file*.txt -size -1G -user root

十、使用 find 命令实现多个查找条件

各表达式之间使用逻辑运算符

-a 表示 而且(and)

-o 表示 或者(or)

示例

find /boot -size +1024k -a -name "vmlinuz*"
find /boot -size +1024k -o -name "vmlinuz*"

示例

find /etc/-type f -o -size +50k -a -name *.ttb

解释:找寻【/etc/日录下,满足文件属性,】或者50k以上大小,以及以.ttb为结尾的任何对象

十一、文本统计工具-wc

统计文件内容有多少行

wc -l

wc命令介绍

wc(word count)命令是Linux系统中一个常用的文本统计工具,用于计算文件中的行数、单词数和字符数。它是文本处理中非常有用的工具,可以快速提供文件的基本统计信息。

基本语法

wc [选项] [文件名]
  • 选项:是可选的参数,用于调整wc的输出格式。
  • 文件名:是要统计的文件列表。如果未指定文件,wc将读取标准输入(stdin)。

常用选项

  • l-lines:仅显示行数。(重点使用)
  • c-bytes:仅显示字节数。
  • m-chars:仅显示字符数(在多字节字符环境中使用)。在某些版本的wc中,mc 的行为可能相同,都表示字节数。但在支持多字节字符的环境中,m 会计算实际字符的数量。
  • w-words:仅显示字数。单词是以空格或制表符分隔的文本序列。
  • L-max-line-length:显示最长行的长度。

使用示例

  1. 统计文件的行数、单词数和字符数

    wc example.txt
    

    输出结果将包括行数、单词数和字符数,如:10 20 150 example.txt,其中第一个数字表示行数,第二个数字表示单词数,第三个数字表示字符数。

  2. 仅统计行数

    wc -l example.txt
    

    输出结果只包括文件的行数,如:10 example.txt

  3. 仅统计单词数

    wc -w example.txt
    

    输出结果只包括文件的单词数,如:20 example.txt

  4. 仅统计字符数

    wc -m example.txt
    

    在多字节字符环境中,输出文件的字符数。但在某些情况下,可能需要使用 -c 来获取字节数。

  5. 同时计算多个文件的统计信息并输出总计

    wc file1.txt file2.txt
    

    分别显示两个文件的行数、单词数和字节数,以及这些文件的总和。

  6. 从标准输入中读取数据

    可以使用管道(|)操作符将其他命令的输出作为wc命令的输入,如:

    cat example.txt | wc -l
    

    计算example.txt文件的行数。

注意事项

  • 在处理多字节字符(如中文、日文等)时,m 选项会计算实际字符的数量,而 c-bytes 选项则可能只计算字节数。
  • wc命令还支持其他选项和用法,如递归统计目录下所有文件的信息(使用 r 选项,但并非所有版本的wc都支持),以及排除特定模式的文件或行(可能需要结合其他命令使用)。

十二、标准输入和标准输出

在Linux中,标准输入和标准输出是用于处理输入和输出数据的基本概念。
简单来说,我们在用户态输入什么内容提交给系统处理时就是什么内容,这个提交的过程就是标准输入

在这里插入图片描述

标准输入(stdin)

  • 定义:系统默认的输入源,通常是键盘。

  • 文件描述符:0

  • 用途:读取用户输入。

  • 示例cat命令等待用户输入:
    用户在键盘上输入的内容会被cat命令读取并显示。

    cat
    

标准输出(stdout)

  • 定义:系统默认的输出目标,通常是终端(屏幕)。

  • 文件描述符:1

  • 用途:输出数据到屏幕。

  • 示例echo命令输出文本:
    该命令会将字符串"Hello, World!"显示在终端上。

    echo "Hello, World!"
    

重定向

  • 标准输入重定向:使用<符号从文件读取输入。

    command < input.txt
    
  • 标准输出重定向:使用>符号将输出写入文件。

十三、管道符 |

管道符(Pipeline):将一个命令的输出作为另一个命令的输入。

用竖线(|)表示,将左侧命令的标准输出(stdout)作为右侧命令的标准输入(stdin)。可以将多个命令串联起来,拓展命令功能。

示例:

find /etc/-type f -o -size +50k -a -name *.ttb | wc -l

管道符的基本用法

命令1 | 命令2 | 命令3 ...
  • 命令1 的输出会被传递给 命令2 作为其输入。
  • 命令2 的输出(可能是对 命令1 输出的处理结果)接着被传递给 命令3,依此类推。

管道符的示例

  1. 查看文件内容并统计行数

    cat file.txt | wc -l
    

    这里,cat file.txt 命令的输出(即文件 file.txt 的内容)被传递给 wc -l 命令,后者计算并输出行数。

  2. 查找包含特定字符串的行并排序

    grep "hello" file.txt | sort
    

    grep "hello" file.txt 命令查找文件 file.txt 中包含 “hello” 字符串的所有行,并将这些行作为 sort 命令的输入,sort 命令则对这些行进行排序。

  3. 文本处理的多步骤流程

    cat file.txt | grep "error" | sort | uniq -c
    

    命令序列首先使用 cat 命令输出文件 file.txt 的内容,然后通过 grep "error" 筛选出包含 “error” 字符串的行,接着使用 sort 对这些行进行排序,最后使用 uniq -c 统计并输出每个唯一行(在这种情况下,由于已经排序,所以连续相同的行被视为唯一行)出现的次数。

管道符的注意事项

  • 管道符连接的每个命令都是在子shell中执行的,它们之间不会共享变量(除非使用特殊的方法,如进程替换或命令替换)。
  • 管道符右侧的命令必须能够处理来自左侧的输入。如果右侧的命令不接受标准输入(如某些仅显示帮助信息的命令),则管道可能不会按预期工作。
  • 在使用管道时,需要注意命令的执行顺序和它们之间的依赖关系,以确保整个命令序列能够按预期运行。

十四、find之exec用法

find命令与exec结合使用可以更效率地查找并处理文件。find命令用于遍历目录树,搜索符合特定条件的文件或目录,而exec则在找到的每个文件或目录上执行指定的命令。

-exec参数后面跟的是Linux命令,它是以分号“;”为结束标志,由于各个系统中分号会有不同的意义,因此在分号前面加上反斜杠转义符“\”

格式

find path [options] -exec command {} \\;

解释

  • path:要搜索的目录路径。
  • options:查找条件,如文件名、类型、修改时间等。
  • exec:指示find对每个匹配的文件或目录执行命令。
  • command:要执行的命令。
  • {}:占位符,表示当前找到的文件或目录。
  • ;:表示命令结束(必须使用\\进行转义)。

示例1

find 命令匹配到了当前目录下的所有普通文件,并在 -exec 选项中使用 Is-命令将它们列出。

“{}” 代表前面find查找出来的文件名,

find ./ -type f -exec ls -{} \;

示例2

  1. 删除找到的文件

    find /path/to/search -type f -name "*.tmp" -exec rm {} \\;
    
    

    查找指定目录下所有扩展名为.tmp的文件并删除它们。

  2. 修改找到文件的权限

    find /path/to/search -type f -name "*.sh" -exec chmod +x {} \\;
    
    

    查找指定目录下所有扩展名为.sh的脚本文件并赋予可执行权限。

  3. 移动找到的文件

    find /path/to/search -type f -name "*.log" -exec mv {} /path/ \\;
    
    

    查找指定目录下所有扩展名为.log的文件并移动到目标目录。

  4. 压缩找到的文件

    find /path/to/search -type f -name "*.txt" -exec gzip {} \\;
    
    

    查找指定目录下所有扩展名为.txt的文件并使用gzip压缩。

  5. 查找并执行多个命令

    find /path/to/search -type f -name "*.tmp" -exec sh -c 'echo "Processing {}"; rm {}' \\;
    
    

    查找指定目录下所有扩展名为.tmp的文件,先打印文件名,再删除文件。

注意事项

  • 性能问题:使用exec时,每找到一个文件或目录,find都会启动一次新进程。如果处理大量文件,性能可能会受到影响。

  • 替代方法:可以使用+代替\\;,从而批量处理文件,提高效率:
    这种方式会将所有匹配的文件一次性传递给rm命令。

    find /path/to/search -type f -name "*.tmp" -exec rm {} +
    

注:图片来源于网络,侵删。

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值