目录
一、文件类型分类
普通文件 (
-
):这是最常见的文件类型,用于存储数据,如文本文件、程序、图片、音频、视频等。它们可以被读取、写入、执行等,具体权限取决于文件的权限设置。目录文件 (
d
):目录是一种特殊类型的文件,用于组织和存储其他文件。目录自身也可以包含其他目录,形成文件系统的层次结构。链接文件:
- 硬链接 (
l
):硬链接实质上是一个指针到同一个inode的文件。它允许一个文件有多个名称,删除硬链接不会影响原始文件,只有当所有指向相同inode的硬链接都被删除,文件才会被真正删除。- 软链接(符号链接) (
l
):软链接类似于Windows的快捷方式,它是一个包含目标文件路径的特殊文件。软链接可以跨文件系统,并且指向的文件被删除后,链接会失效。管道文件 (
p
):管道是一种进程间通信机制,它允许数据在不同进程间流动。匿名管道通常是临时的,而命名管道(FIFO)在文件系统中有对应的文件名。套接字文件 (
s
):套接字是另一种进程间通信方式,常用于网络通信或进程间非文件形式的数据传输。字符设备文件 (
c
):用于与系统中的字符设备(如键盘、串口)交互的文件。这种文件每次读写操作只传递一个字符(或字节)。块设备文件 (
b
):用于与块设备(如硬盘、SSD)交互的文件。这类设备支持随机访问,数据读写以块(通常是512字节或更大)为单位。这些文件类型可以通过运行命令如
ls -l
来查看,其中第一个字符表示文件的类型。理解这些类型有助于更好地管理和操作Linux文件系统。末尾的数字表示分区
二、基本命令2
1. find 帮助查询
在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时, 不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
find 大致文件所在的路径 选项 参数
find [查找的路径][选项] [参数] 选项: -type:文件分类超找 -maxdepth :从当前目录开始搜索的深度(也就是子目录的嵌套) 参数: f(表示普通文件),c, d, l, b ,s ,p 这些文件类型
find ./ -name "*.txt" 搜索当前目录下所有扩展名为.txt的文件。
find ./ -iname "*.txt" 它使用了-iname选项而不是-name。-iname使得查找变为大小写不敏感的。
通过这条命令,你能够找到所有扩展名为
.txt
的文件,不论文件名中的字母是大写还是小写。例如,它会匹配.txt
、.TXT
、.tXt
等任何大小写变体的文件。
2. stat 查看文件的信息
用来查看文件的具体存储信息和时间等信息
stat 参数 参数: 文件名
stat aaa 该命令会返回关于名为aaa的文件的详细信息
该命令会返回关于名为
aaa
的文件的详细信息,通常包括以下几点:
- 文件类型(如文件、目录、符号链接等)
- 访问时间(atime):最后一次访问该文件的时间。
- 修改时间(mtime):文件内容最后一次被修改的时间。
- 状态改变时间(ctime):文件状态(如权限或所有权)最后一次被修改的时间。
- inode号:文件的索引节点号。
- 大小:文件的字节数。
- 权限:文件的访问权限。
- 属主和属组:文件的所有者和所属组。
- 硬链接数:指向该文件inode的硬链接数量。
- 设备ID(对于设备文件)。
- 设备类型(对于设备文件)。
3. wc 统计文本
用来计算数字。利用wc指令我们可以计算文件的 Byte数、字数或是列数,若不指定文件名称,或是 所给予的文件名为“-”,则wc指令会从标准输入 设备读取数据。
wc
命令用于统计指定文件中的字节数、单词数和行数。wc [选项] [文件] 选项: -c:只显示Bytes数; -l:只显示列数; -w:只显示字数。
wc /etc/passwd
该命令会对
/etc/passwd
文件进行以下统计:
- 第一个数字表示文件中的行数,即用户账户的数量(包括系统账户和普通用户账户)。
- 第二个数字表示单词数。
- 第三个数字表示字节数。
当运行命令
wc -l /etc/passwd
时,这将只统计/etc/passwd
文件中的行数。-l
选项告诉wc
命令只输出行数。由于/etc/passwd
文件中每一行代表一个用户账户(包括系统账户和普通用户账户),这个命令的结果就直接反映了该文件中用户账户的数量。
wc -l /etc/passwd
4. 查看文本内容
4.1 cat
用来显示文件的内容 适合查看小文件
cat [选项] [文件] 选项: -n:有1开始对所有输出的行数编号; -b:和-n相似,只不过对于空白行不编号;
cat /etc/passwd 查看这个文件的内容
每条记录由多个以冒号(
:
)分隔的字段组成,通常包括以下信息:
- 用户名(Username): 用户账号的名称。
- 密码占位符(Password Placeholder): 现代系统中,这一栏通常包含一个
x
,表示实际的加密密码存储在/etc/shadow
文件中。- 用户ID(User ID, UID): 系统内部用于识别用户的数字标识,通常0为root用户,普通用户ID大于0。
- 组ID(Group ID, GID): 指定用户的基本组,与
/etc/group
文件中的某个组对应。- 用户说明(User Info): 描述性信息,通常是用户的真实姓名或账户用途。
- 家目录(Home Directory): 用户登录后所在的默认工作目录。
- 登录Shell(Login Shell): 指定用户登录后启动的默认shell程序,如
/bin/bash
。
4.2 more
命令一次显示一屏文本,满屏后停下来,并且在屏 幕的底部出现一个提示信息,给出至今己显示的该 文件的百分比
more [文件] 操作 按Space键:显示文本的下一屏内容。 按Enier键:只显示文本的下一行内容。 按H键:显示帮助屏,该屏上有相关的帮助信息。 按B键:显示上一屏内容。 按Q键:退出more命令;
4.3 less
用less命令显示文件时,用PageUp键向上翻页,用 PageDown键向下翻页。要退出less程序,应按Q 键。
less [参数] [文件] 参数 -e:文件内容显示完毕后,自动退出; -N:每一行行首显示行号;
4.4 head
用于显示文件的开头的内容。在默认情况下,head 命令显示文件的头10行内容。
head [参数] [文件] 参数 -n:指定从头显示多少行;
4.5 tail
tail命令默认在屏幕上显示指定文件的末尾10行。
tail [参数] [文件] 参数 -n:指定从尾显示多少行; -f:监控文件尾部插入的
5. cal 显示日历
显示日历,可以按照指定的年份月份来显示,还可 以显示当年中的第几天
cal [选项] [月份] [年份] 选项: -s: 显示星期天为一个星期的第一天,默认的 格式 -m: 显示星期一为一个星期的第一天 -j: 显示在当年中的第几天 月份: 1-12 年份: 1-9999
cal 如果不带任何参数,cal命令默认显示当前月份的日历
cal 2024 会显示2024年的全年日历
cal 6 2023 查看2023年6月的日历 月份在前
cal -j 输出的日历中每个日期会标有当年的累积天数,从1开始计数。
cal -j 2024 同理
6. date 显示时间
打印不同格式的时间或日期,以及要根据时间和日 期执行操作,也可以使用命令设置固定的格式,在 类UNIX系统中,日期被存储为一个整数,1970年1 月1日0时0分0秒起流逝的秒数
date [选项] [参数] 选项: -d<字符串>:显示字符串所指的日期与时间。字符串前后必须加上双引号; -s<字符串>:根据字符串来设置日期与时间。字符串前后必须加上双引号; -u:显示GMT(世界时间);
date
date +"%Y-%m-%d %H:%M:%S" 格式化日期
7. du 文件大小
文件夹本身大小为4096
du (disk usage)对文件和目录磁盘使用的空间的查看
du [选项] [参数] 选项: -s 仅显示总计,只列出最后加总的值。 -h 以K,M,G为单位,提高信息的可读性。 参数: 目录或文件
du dir5 计算并显示目录dir5所占用的磁盘空间大小。
du -h dir5 查看名为dir5的目录占用多少磁盘空间。显示单位
du -hs dir5 显示dir5目录整体占用的磁盘空间大小,并且这个大小是以易读的格式(如 KB、MB、GB)呈现
8. ln 链接
ln命令用来为文件创件链接,连接类型分为硬链接和符号链接两种,默认的连接类型是硬链接。如果 要创建符号链接必须使用"-s"选项。
ln [选项] [参数] 选项: -s:创建软链接 参数: 源文件:指定要链接的文件 目标文件:指定源文件要链接的文件
软链接
软链接 快捷方式 符号链接
软链接(Symbolic Link,也称为符号链接或符号连接)是计算机文件系统中的一种特殊类型的链接。与硬链接不同,软链接是一个指向另一个文件或目录的引用,类似于一个快捷方式或别名。它包含指向目标文件或目录的路径信息,而不是直接引用相同的数据块和inode。
ln -s a.txt ruan_a.txt 创建一个从a.txt到ruan_a.txt的符号链接(也称为软链接) ln: 是创建链接的命令。 -s: 是一个选项,表示创建的是符号链接而不是硬链接。硬链接直接指向文件的inode,而符号链接则是一个包含目标文件路径的特殊文件。 a.txt: 是原始文件或目标文件,即您想要链接到的文件。 ruan_a.txt: 是链接文件的名称,也就是您创建的新文件,它作为一个快捷方式指向a.txt。 执行这个命令后,系统会在当前目录下创建一个名为ruan_a.txt的文件,它实际上是一个链接,指向名为a.txt的文件。如果您对ruan_a.txt进行读写操作,实际上就是在操作a.txt的内容(前提是您有相应的权限)。如果删除了a.txt,那么ruan_a.txt将成为一个无效的链接,因为指向的原文件不存在了。
ln -s a.txt ruan_a.txt 创建软链接 创建软链接是在文件系统中创建一个指向目标文件或目录的符号链接。软链接类似于Windows系统中的快捷方式,它提供了一种方便的方式来引用目标文件或目录。
- 文件系统中创建了一个名为ruan_a.txt的软链接,它指向了名为
a.txt
的目标文件。链接的权限模式通常显示为lrwxrwxrwx
,其中l
表示该文件是一个软链接;- 软链接的大小通常会显示链接路径的字符数,因此其大小为5。请注意,这里的大小指的是链接本身的大小,而不是目标文件的大小;
- 软链接也是一个独立的链接文件,有自己的 inode number,因此必有自己的 inode属性和内容(内容表示的是软链接内部放的是自己指向的文件路径)软链接文件ruan_a.txt与原文件a.txt的inode值不相等;
- 上述已表明软链接已成功创建,并且您可以通过访问ruan_a.txt来间接访问
a.txt;
这意味着对ruan_a.txt所做的更改将反映在
a.txt
中,而且删除a.txt
也会影响到ruan_a.txt
硬链接
硬链接(Hard Link)是计算机文件系统中的一种链接方式,用于将一个文件与另一个文件或目录关联起来,使它们共享相同的数据块和inode(索引节点)。其次硬链接允许一个文件在文件系统中存在多个入口点,这意味着对一个硬链接文件的更改将反映在所有与之相关联的硬链接上,因为它们实际上都指向相同的数据。
硬链接创建的是源文件的一个实体副本,但请注意,这不是内容的复制,而是inode(索引节点)级别的链接。以下是该命令的简单解析: ln: 是创建链接的命令。 a.txt: 是原始文件,即您想要创建链接的文件。 ying_a.txt: 是新创建的链接文件的名称,它将成为a.txt的一个硬链接。 执行这个命令之后,ying_a.txt 和 a.txt 实际上是同一个 inode 下的两个不同名称,它们共享相同的存储空间和文件属性(如修改时间、所有权和权限等)。对其中一个文件所做的任何更改都会反映在另一个文件上,因为它们本质上是同一个文件的不同入口。 删除原始文件a.txt不会影响到ying_a.txt,因为只要至少还有一个硬链接存在,文件的实际内容就会保留。只有当所有指向该inode的硬链接都被删除后,文件数据才会被系统回收。
ln a.txt ying_a.txt 创建硬链接 创建硬链接是在文件系统中创建一个指向目标文件的硬链接,硬链接与目标文件共享相同的 inode 和数据块,它们在文件系统中被视为同一实体,即使使用不同的文件名。
- 我们可以发现硬链接和目标文件用同一个 inode number ,这也就意味着硬链接一定是和目标文件使用同一个inode的!!
- 硬链接与目标文件具有相同的权限、时间戳和内容,因此对于用户来说,它们是透明的。当对目标文件或硬链接进行更改时,对另一个对象也会产生影响。
- 因此硬链接就是建立了新的文件名和老的 inode的映射关系。
在树形结构的目录中,当有两个或多个用户需要共享一个子目录或文件时,必须将共享文件或子目录链接到两个或多个用户的目录中,才能方便找到该文件。
- 在这种共享方式中,诸如文件的物理地址及其他文件属性等信息,不再放在目录项之中,而是放在索引结点中。在文件目录中只设置文件名及其指向相应的索引结点的指针;
- 在索引文件中还有一个count 计数器,用于表示链接到本索引结点上的用户目录项个数;
- 当 count = 2 时,表示有两个用户目录项链接到本地文件中,或者说有两个用户共享此文件。
删除目标文件不会立即删除其硬链接,只有当最后一个指向该文件的硬链接被删除时,才会真正释放磁盘空间
区别
软连接创建方式 ln -s 被链接文件 链接文件
- (软链接是一个链接文件;
- (软链接有着自己的 inode 号(文件编号);
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。
硬链接创建方式 ln 被链接文件 链接文件
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除或添加一个硬链接文件并不影响其他有相同 inode 号的文件,只是减少或增加链接计数,当链接计数为0,系统将彻底删除该文件
硬链接(Hard Links)和软链接(Symbolic Links,也称为符号链接)是两种在文件系统中创建文件链接的不同方法,它们有一些重要的区别:
链接的类型:
- 硬链接:硬链接是文件系统中的多个文件项,它们都指向同一个inode(磁盘上的数据块和元数据)。这意味着硬链接之间没有所谓的原始和副本,它们都是相等的。删除任何一个硬链接都不会影响其他硬链接,只有当所有硬链接都被删除后,文件的内容才会被释放。
- 软链接:软链接是一个特殊类型的文件,其中包含了指向另一个文件或目录的路径。软链接本身是一个独立的文件,它存储了目标文件的路径信息。如果原始文件或目录被删除,软链接仍然存在,但它会成为一个"死链接",指向一个不存在的目标。
跨文件系统:
- 硬链接:通常只能在同一文件系统内创建硬链接,因为硬链接与inode相关,而不同文件系统的inode不会关联。
- 软链接:软链接可以跨越文件系统边界,因为它们只是包含目标路径的文本文件。
文件类型:
- 硬链接:只能链接到文件,不支持链接到目录。
- 软链接:可以链接到文件或目录,也可以链接到其他软链接。
大小和性能:
- 硬链接:硬链接几乎没有大小,因为它们共享相同的inode和磁盘块。由于硬链接不需要额外的磁盘空间,因此通常更高效。
- 软链接:软链接的大小通常比硬链接大,因为它们需要存储目标路径信息。软链接需要解析目标路径,这可能会引入微小的性能开销。
修改和权限:
- 硬链接:硬链接的修改会反映在所有硬链接上,因为它们都共享相同的inode。硬链接之间没有权限区别。
- 软链接:软链接的修改不会影响目标文件或目录,因为它们只是指向目标的路径。软链接和目标之间可能具有不同的权限设置。
用途:
- 硬链接:常用于备份工具和版本控制系统,可以减少磁盘占用,因为它们共享相同的数据块。
- 软链接:常用于创建快捷方式或引用其他位置的文件或目录,也用于跨文件系统的链接。
硬链接更适合共享相同数据的文件,而软链接更适合创建引用或跨越文件系统的链接。
9. history 查看历史命令
显示指定数目的历史指令命令,历史命令是被保存在内存中的,当退出或者登录shell时,会自动保存或读取。在内存中,历史命令仅能够存储1000条历史命令。
history [选项] [参数] 选项: -c:清空当前历史命令; -a:将历史命令缓冲区中命令写入历史命令 文件中; -r:将历史命令文件中的命令读入当前历史命令缓冲区; 参数: n:打印最近的n条历史命令;
history 10 用来显示最近的10条命令历史记录
10. exit 退出shell
退出shell,并返回给定值。在shell脚本中可以终止 当前脚本执行。
exit 没有选项,没有参数,是一个单命令
11. echo 控制台输出
在shell中打印shell变量的值,或者直接输出指定的字符串。
echo [参数] 参数: 要输出的值或字符串
echo hello 输出hello
12. 命令别名
alias
使用该命令可以将一些较长的命令进行简化。使用 alias时,用户必须使用单引号''将原来的命令引起来, 防止特殊字符导致错误。
alias [选项] [参数] 选项:-p:打印已经设置的命令别名。 参数: alias 新的命令='原命令 -选项/参数'
alias -p 显示已有的别名
ll 使用别名ll
alias ls='ls --color=auto' 这里定义了一个别名,使得输入 ls 时,它等同于执行 ls --color=auto。这意味着列出文件时,会自动根据文件类型以不同的颜色显示,提高了命令行界面的可读性。
![]()
alias kt='ls -ail' 当你输入 kt 时,shell 会将其解释并执行为 ls -ail 命令。
退出后 别名失效
unalias
用来取消命令别名,是为shell内建命令。如果需要 取消任意一个命令别名,则使用该命令别名作为指 令的参数选项即可。
unalias [选项] [参数] 选项:-a:取消所有命令别名。 参数: 命令别名:指定要取消的命令别名。
unalias ls 取消ls这个别名
13. grep 文本查找
是一种强大的文本搜索工具,它能使用正则表达式 搜索文本,并把匹配的行打印出来。
grep [选项] [参数] 选项: -i 忽略字符大小写的差别。 -n 在显示符合范本样式的那一列之前,标示出该列的编号。 -v 反转查找。 参数: 关键字:要超找的字符串 文件路径:要去哪个文件去超找
- 从/etc/passwd文件中搜索并显示包含字符串"root"的所有行。
grep "root" /etc/passwd
- 使用命令
grep "a" /etc/passwd
会在/etc/passwd
文件中搜索包含字母"a"的行grep "a" /etc/passwd
grep -vn "a" /etc/passwd 显示行号
三、重定向
将输出或输入的方向改变到其他地方
输入输出文本流(I/O Stream)
字段 描述 文件描述符 stdin 标准输入流 0 stdout 标准输出流 1 stderr 标准错误输出流 2 命令执行过程(Command Execution)
对于任何一条 Linux 命令执行,都是这样一个过程:用户从键盘或其它输入设备输入,输入通过 stdin 交给命令,命令执行。如果命令执行成功,会把成功结果通过 stdout 输出到输出设备上;如果命令执行出错,会把错误结果通过 stderr 也输出到输出设备上。
用法
输出重定向(Output Redirection)
- >输出覆盖重定向
- >>输出追加重定向
- 2>错误覆盖输出重定向
- 2>>错误追加重定向
将某个命令默认指向 stdout 或 stderr 的输出文件转而指向一个文件,即使得命令输出到某个指定文件中,而不是输出到终端屏幕或终端窗口。Linux 中使用 > 和 >> 来重定向标准输出。
echo hello > a.txt 将文本字符串 "hello" 写入到名为 a.txt 的文件中。如果 a.txt 文件已经存在,这个命令将会覆盖原有内容;如果文件不存在,命令执行后会新建一个名为 a.txt 的文件,并写入 "hello"。
echo world > a.txt 覆盖
echo world > a.txt echo world >> a.txt 追加 echo world >> a.txt 追加 echo world >> a.txt 追加 命令 echo world >> a.txt 会在不覆盖原有内容的情况下,将文本 "world" 追加到 a.txt 文件的末尾。如果 a.txt 文件已经存在,该命令执行后,文件中会新增一行文本 "world";如果 a.txt 不存在,则会先创建这个文件,然后写入 "world"。每次执行这个命令,都会在文件末尾添加一个新的 "world",不会影响文件中已有的任何数据。
echo hello 2> a.txt 命令 echo hello 2> a.txt 在Unix/Linux shell中执行时,有一些细节需要注意。通常情况下,echo hello 会将文本 "hello" 输出到标准输出(STDOUT),即屏幕上。但在这个命令中,使用了 2> 操作符,它重定向了标准错误(STDERR)输出。 不过,因为 echo 命令通常只产生标准输出而不产生错误输出,所以在这种情况下,2> a.txt 实际上不会捕捉到任何来自 echo 的错误信息,而是可能覆盖(如果存在的话)或创建一个空的 a.txt 文件,因为没有错误信息被发送到这个文件。