Linux常用命令详解(二)_linux 指向目录
文章目录
- 一、创建链接文件-ln
-
- 链接文件类型
- 硬软链接优缺点
- 二、复制文件或目录-cp
- 三、删除文件或目录-rm
- 四、修改命令别名-alias(不常用)
- 五、移动/重命名文件或目录-mv
- 六、查看所有磁盘及其挂载目录的剩余空间-df
- 七、挂载文件系统-mount
- 八、查找命令文件存放目录-which
- 九、查找文件或目录-find
- 十、使用 find 命令实现多个查找条件
- 十一、文本统计工具-wc
- 十二、标准输入和标准输出
-
- 标准输入(stdin)
- 标准输出(stdout)
- 重定向
- 十三、管道符 |
- 十四、find之exec用法
一、创建链接文件-ln
为文件或目录建立链接文件,类似于Windows系统的快捷方式链接文件类型。
链接文件类型
-
软链接(又称为符号链接)
inode号不一样
创建软链接ln [-s] 源文件或目录... 链接文件或目标位置
-
硬链接
INode号一样
创建硬链接ln 源文件或目录... 链接文件或目标位置
主要区别
创建的符号链接文件
1、允许创建的位置 软/硬有区别的
2、占用磁盘空间 有区别的
3、创建的对象 不同
在 Linux 中,文件名和文件的数据是分开存储的。
提示
- 在 Linux中,只有文件的硬链接数==0才会被删除
- 使用
ls-l
可以查看一个文件的硬链接的数量 - 在日常工作中,几乎不会建立文件的硬链接,知道即可
引申原理
在文件系统中找文件,文件本身就是指向磁盘中的存储块,本身就是个硬链接。
-
硬链接
硬链接也是在磁盘中的存储块找文件,因此inode值与文件本身一样。
-
软链接
只是一个快捷方式
删除新建文件后的区别
删除后重复创建相同文件名、不同内容的文件
- 软链接:指向文件名,内容与新建文件一致
- 硬链接:不受影响,依然是源文件
验证硬链接占用空间的小实验
cp /var/log/messages ./ ##拷贝文件 ln messages msag ##创建硬链接1ln messages m ##创建硬链接2ln messages a ##创建硬链接3du -h##查看磁盘占用
硬软链接优缺点
软链接(Symbolic Link)
优点:
- 可以跨文件系统:软链接可以指向不同文件系统中的文件。
- 指向目录:软链接可以指向目录,方便快捷地访问目标目录。
- 动态链接:如果目标文件被删除或移动,软链接会变成断开的链接(dangling link),但不会占用多余的空间。
缺点:
- 性能较差:访问软链接时需要额外的步骤来解析链接并定位目标文件,性能比硬链接稍差。
- 容易失效:如果目标文件被删除或移动,软链接会失效,变成断开的链接。
- 不支持文件系统级别的备份:一些文件系统备份工具可能不会正确备份软链接和其目标文件。
适用场景:
软链接适用于需要创建快捷方式、跨文件系统引用文件、或指向目录的情况。
硬链接(Hard Link)
优点:
- 高效:硬链接直接指向数据块,性能较高,无需额外的解析步骤。
- 可靠性:即使目标文件被删除,硬链接仍然存在并可以访问文件内容,除非所有硬链接都被删除。
- 节省空间:硬链接只是增加了一个目录项,没有创建新的文件,占用的磁盘空间非常少。
缺点:
- 不能跨文件系统:硬链接只能在同一个文件系统中创建,无法跨越不同的文件系统。
- 不能指向目录:硬链接只能指向文件,不能指向目录。
- 混淆和复杂性:多个硬链接指向同一个文件,可能会造成管理和维护上的混淆,难以确定哪些链接实际指向同一个文件。
适用场景:
硬链接适用于需要高效访问文件、增加文件引用、或确保文件内容在目标文件被删除后仍可访问的情况。
二、复制文件或目录-cp
将需要复制的文件或目录(源)重建一份,并保存为新的文件或目录
格式
cp [选项]... 源文件或目录... 目标文件或目录...
常用选项:-f、-i、-p、-r
cp的常用选项:
-f:覆盖目标同名文件或目录时不进行提醒,而直接强制复制
-i:覆盖目标同名文件或目录时提醒用户确认
-p:复制时保持源文件的权限、属主及时间标记等属性不变(用的多)
-r:复制目录时必须使用此选项,表示递归复制所有文件及子目录
-a:完整保留所有的信息包括连接文件,可以直接复制目录
注:复制多个文件或目录时,目标位置必须是目录,且目标目录必须已存在
拓展:
全量复制:cp
复制全部文件,只能在本地复制
增量复制:rsync
只复制新增加的部分,可以跨主机复制(消耗资源更低速度更快)
更多cp
命令的一些选项:
三、删除文件或目录-rm
删除指定的文件或目录
格式
rm [选项] 要删除的文件或目录...
rm的常用选项:
-f:删除文件或目录时不进行提醒,而直接强制删除
-i:删除文件或目录时提醒用户确认。(y表示删除,n表示不删除)
-r:删除目录时必须使用此选项,表示递归删除整个目录树(应谨慎使用)
示例
rm -rf public_html/grub/rm -i public html/apg.confrm -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
命令的一些选项:
四、修改命令别名-alias(不常用)
一般用于临时修改,不常用
临时修改
格式
alias 命令别名 = \'命令\'unalias 别名命令 ##删除别名
示例
alias mynetwork=\'vim /etc/sysconfig/network-scripts/ifcfg-ens33\'
永久修改(更不用)
在/etc/.bashrc 会影响全部
/root/.bashrc 只影响当前用户(当前用户的家目录)root
五、移动/重命名文件或目录-mv
将指定的文件或目录转移位置
如果目标位置与源位置相同,则相当于执行重命名操作
格式:
mv [选项] ... 源文件或目录... 目标文件或目录
示例:
mv mytouch mkfilemv mkfile public_html/
mv
命令的一些常用选项:
六、查看所有磁盘及其挂载目录的剩余空间-df
系统资源查询相关:
主要监控5大系统资源:磁盘空间、CPU、内存、I/O、进程信息
规范说法:使用一些日常的查询指令查看系统资源,如磁盘空间、CPU、内存、I/O、进程信息、网络流量监控
和磁盘相关的命令有:du、ls、df等
示例
[root@localhost opt]# df -h
输出结果:
结果解释:
- 前者(文件系统)为后者(挂载点)提供存储资源
- 主要看已用百分比
七、挂载文件系统-mount
将一个文件系统(如硬盘分区、光盘、网络文件系统等)连接到Linux系统的目录树中的某个目录上的过程。挂载之后,用户可以通过该目录访问文件系统中的数据。
基本概念
- 挂载点:挂载文件系统的目录。通常是一个空目录。
- 文件系统:存储数据的逻辑结构,可以是硬盘分区、USB设备、光盘或网络存储等。
功能
- 提供共享空间
- 共享数据
格式
mount [选项] 设备 文件夹 ##挂载文件系统umount /dir ##卸载文件系统
- 设备:要挂载的文件系统设备,例如
/dev/sda1
。 - 文件夹:挂载点,例如
/mnt
。
mount
命令的常用选项:
示例
-
挂载一个分区:
sudo mount /dev/sda1 /mnt
将
/dev/sda1
分区挂载到/mnt
目录。 -
查看挂载信息:
mount
显示当前系统所有已挂载的文件系统。
-
挂载ISO镜像:
sudo mount -o loop /path/to/image.iso /mnt
将ISO镜像文件挂载到
/mnt
目录。 -
卸载文件系统:
sudo umount /mnt
将挂载在
/mnt
目录的文件系统卸载。
八、查找命令文件存放目录-which
用于查找当前主机有没有xx命令
搜索范围由环境变量 PATH 决定(echo $PATH)
(使用较少)
格式
which 命令|程序名 ##默认当找到第一个目标后不再继续查找
或
which -a 命令|程序名 ##在所有搜索路径中查找
示例
which historywhich lswhich -a ls which wget
结果输出:
注:使用 which 查找内部命令时,将找不到对应的程序
九、查找文件或目录-find
文件查找工具,它允许用户根据各种条件搜索文件系统中的文件和目录。
采用递归方式,根据目标的名称、类型、大小等不同属性进行精细查找
命令的特点:
- 精确查找
- 实时査找 遍历(慢)
- 支持查找条件较多
格式1:
find [查找范围] [查找条件表达式]
参数解释:
[查找范围]:查找文件或子目录的目录位置
[查找条件表达式]:查找条件类型
格式2:
find [查找路径] [查找条件] **[处理动作]**
参数解释:
[查找路径]:指定具体目标路径,默认为当前目录。
[查找条件]:可以对文件名、大小、类型、权限等标准进行查找:默认为找出指定路径下的所有文件
[处理动作]:对符合条件的文件做操作,默认输出至屏幕(print)
示例(exec选项):
查找opt目录下,所有大于1G的文件,然后把他们移动到etc目录下
find /opt/ -size +1G -type ffind /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
命令的行为,如搜索的最大深度、是否跨文件系统搜索等。 - 表达式:用于指定搜索条件,如文件名、文件类型、大小、修改时间等。多个表达式可以通过逻辑运算符(如
and
、or
、not
)组合使用。 - 动作:对匹配的文件执行的操作,如打印、删除、执行命令等。如果不指定动作,则默认为
print
,即打印出匹配文件的路径名。
find
命令的常用选项及其描述:
注意
- 在使用
size
选项时,#
代表具体的大小数值,前面可以加上+
或-
来表示大于或小于该数值。`` - 文件大小的单位(如kB, MB, GB)大小写敏感。
type
选项后的参数(如f, d, b, c)用于指定要查找的文件类型。maxdepth
和mindepth
选项用于控制搜索的目录深度,在递归搜索大型文件系统时非常有用。
-type 选项:
-type
选项在 find
命令中用于指定要查找的文件类型。-type
的具体形式:
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中,m
和c
的行为可能相同,都表示字节数。但在支持多字节字符的环境中,m
会计算实际字符的数量。w
或-words
:仅显示字数。单词是以空格或制表符分隔的文本序列。L
或-max-line-length
:显示最长行的长度。
使用示例
-
统计文件的行数、单词数和字符数:
wc example.txt
输出结果将包括行数、单词数和字符数,如:
10 20 150 example.txt
,其中第一个数字表示行数,第二个数字表示单词数,第三个数字表示字符数。 -
仅统计行数:
wc -l example.txt
输出结果只包括文件的行数,如:
10 example.txt
。 -
仅统计单词数:
wc -w example.txt
输出结果只包括文件的单词数,如:
20 example.txt
。 -
仅统计字符数:
wc -m example.txt
在多字节字符环境中,输出文件的字符数。但在某些情况下,可能需要使用
-c
来获取字节数。 -
同时计算多个文件的统计信息并输出总计:
wc file1.txt file2.txt
分别显示两个文件的行数、单词数和字节数,以及这些文件的总和。
-
从标准输入中读取数据:
可以使用管道(|)操作符将其他命令的输出作为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,依此类推。
管道符的示例
-
查看文件内容并统计行数:
cat file.txt | wc -l
这里,
cat file.txt
命令的输出(即文件file.txt
的内容)被传递给wc -l
命令,后者计算并输出行数。 -
查找包含特定字符串的行并排序:
grep \"hello\" file.txt | sort
grep \"hello\" file.txt
命令查找文件file.txt
中包含 “hello” 字符串的所有行,并将这些行作为sort
命令的输入,sort
命令则对这些行进行排序。 -
文本处理的多步骤流程:
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
-
删除找到的文件:
find /path/to/search -type f -name \"*.tmp\" -exec rm {} \\\\;
查找指定目录下所有扩展名为
.tmp
的文件并删除它们。 -
修改找到文件的权限:
find /path/to/search -type f -name \"*.sh\" -exec chmod +x {} \\\\;
查找指定目录下所有扩展名为
.sh
的脚本文件并赋予可执行权限。 -
移动找到的文件:
find /path/to/search -type f -name \"*.log\" -exec mv {} /path/ \\\\;
查找指定目录下所有扩展名为
.log
的文件并移动到目标目录。 -
压缩找到的文件:
find /path/to/search -type f -name \"*.txt\" -exec gzip {} \\\\;
查找指定目录下所有扩展名为
.txt
的文件并使用gzip
压缩。 -
查找并执行多个命令:
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 {} +
注:图片来源于网络,侵删。