文章目录
- 引言
- 一、文件管理
- 1.1 ls
- 1.2 pwd
- 1.3 cd
- 1.4 mkdir
- 1.5 touch
- 1.6 rm
- 1.7 cp
- 1.8 mv
- 二、文件输出
- 2.1 echo
- 2.2 cat
- 2.3 less
- 2.4 head
- 2.5 tail
- 三、重定向与管道
- 3.1 >
- 3.2 >>
- 3.3 <
- 3.4 |
- 四、文件查找
- 4.1 which
- 5.2 whereis
- 4.3 grep
- 4.4 find
- 五、其他
- 5.1 man
- 5.2 zip
- 5.3 tar
- 5.4 date
- 5.5 cal
- 5.6 bc
- 5.7 uname
- 六、热键
- 6.1 TAB
- 6.2 CTRL + C
- 6.3 CTRL + D
- 6.4 CTRL + L
- 6.5 CTRL + R
- 七、Shell
- 7.1 定义
- 7.2 意义
- 7.3 版本
- 总结
引言
Linux下一切皆文件!
在Linux操作系统中,一切皆文件的哲学意味着几乎所有的东西都被视为文件,包括普通文件、设备(如显示器和键盘)、目录等。这种统一的文件接口使得对各种设备和文件的操作变得一致且简单。
-
普通文件(具备写方法和读方法):
普通文件在Linux中既可以被读取也可以被写入。 例如:文本文件、配置文件等。
-
显示器(具备写方法,不具备读方法):
显示器通常作为标准输出设备,只需要写入数据。
-
键盘(具备读方法,不具备写方法):
键盘作为输入设备,只需要读取数据。
一、文件管理
1.1 ls
list:列出当前目录下的内容
ls [选项] [目录]
常用选项 | 功能 |
---|---|
-l | 列出文件的详细信息 |
-a | 列出目录的所有文件(包括隐藏文件) |
-d | 列出目录的属性(而不是内容) |
ps:.
表示当前目录, ..
表示上一级目录。
ps:文件名以 .
开头的都是隐藏文件。
ps:选项可以叠加,而且写的地方不固定(一般跟在指令后面)。
文件 = 文件属性 + 文件内容
文件属性包括文件名,大小,创建时间等。
文件内容则是通常写在文件里的信息。
同时,ls -l 可以简写为 ll,可以理解为 ll 是 ls -l 的别名。
1.2 pwd
print working directory:显示当前工作目录
pwd
ps:/ 称为路径分隔符(Linux风格)。
ps:上述也可写成 /home/huzch/,最后的 / 可加可不加。
Linux系统中,磁盘上的文件和目录被组成一棵目录树,每个节点都是目录或文件。最开始的 / 称为根目录。
1.3 cd
change directory:改变当前工作目录
cd [目录]
绝对路径访问:
相对路径访问:
cd . .:返回上一级目录
cd ~:返回家目录
cd -:返回最近访问的目录
ps:用户最初进入的目录,称为家目录。
1.4 mkdir
make directory:创建空目录
mkdir [选项] 目录
常用选项 | 功能 |
---|---|
-p | 递归建立一连串目录 |
ps:tree
指令可以显示对应目录的文件树,方便观察。
对应目录删除的指令是 rmdir,但是只能删除空目录。所以后续我们用rm指令来统一删除文件和目录。
1.5 touch
touch:创建空文件或更新文件的时间戳
touch [选项] 文件
1.6 rm
remove:删除文件或目录
rm [选项] 文件/目录
常用选项 | 功能 |
---|---|
-r | 递归删除目录及其子目录和文件 |
-f | 强制删除,不再询问 |
-i | 删除前逐一询问 |
警告:rm -rf / 会直接递归删除根目录,也就是删除了整个Linux系统,不要轻易尝试!
1.7 cp
copy:拷贝并重命名
cp [选项] 源文件 目标文件
默认情况下,拷贝到当前目录。
这种写法等价于上述默认写法。
默认情况下,不加文件名,则不改变文件名进行拷贝。
既加目录,又加文件名,则是拷贝并重命名。
常用选项 | 功能 |
---|---|
-r | 递归拷贝目录及其子目录和文件 |
-f | 强制拷贝覆盖,不再询问 |
-i | 覆盖文件前进行询问 |
1.8 mv
move:移动并重命名
mv [选项] 源文件 目标文件
常用选项 | 功能 |
---|---|
-f | 强制移动覆盖,不再询问 |
-i | 覆盖文件前进行询问 |
ps:mv的用法与cp相似。
二、文件输出
2.1 echo
echo:将字符串输出
echo [选项] 字符串
ps:字符串的引号可加可不加,不影响。
2.2 cat
concatenate:将文本输出
cat [选项] 文件
常用选项 | 功能 |
---|---|
-n | 对输出的所有行编号 |
-b | 对输出的非空行编号 |
-s | 不输出多行空行 |
ps:cat
指令只适合查看小文本,而接下来学习的指令更适合查看大文本。
2.3 less
less:分页输出文件
less [选项] 文件
常用选项 | 功能 |
---|---|
-N | 对输出的所有行编号 |
-i | 忽略搜索时的大小写 |
?字符串 | 向上搜索该字符串 |
/字符串 | 向下搜索该字符串 |
n | 重复前一个搜索 |
N | 反向重复前一个搜索 |
其实还有一个相似的分页查看指令——more,但是more只能向下翻页,less既可以向上翻页,也可以向下翻页,更方便我们阅读文件内容。同时,less在查看之前不会加载整个文件。此外,less还可以向上向下进行搜索,功能更加强大。
2.4 head
head:输出文件开头
head [选项] 文件
常用选项 | 功能 |
---|---|
-行数 | 显示的行数 |
默认输出行数为10行。
2.5 tail
tail:输出文件结尾
tail [选项] 文件
常用选项 | 功能 |
---|---|
-行数 | 显示的行数 |
默认输出行数为10行。
三、重定向与管道
3.1 >
输出重定向(>
):将命令的标准输出重定向到指定文件中。
命令 > 文件
- 输出重定向将原本写入显示器文件的内容,写入了指定文件中。
ps:想要创建一个新文件,除了用touch
指令,也可以用输出重定向>
来创建。
但是,输出重定向每次会清除之前写的内容,再进行新一轮写入。所以,如果想要在原本的基础上写入,就要用到追加重定向>>
。
3.2 >>
追加重定向(>>
):将命令的标准输出追加到指定文件的末尾。
命令 >> 文件
3.3 <
输入重定向(<
):将指定文件的内容重定向为命令的标准输入。
命令 < 文件
乍一看,是不是感觉二者没有什么区别,好像<
没什么用?其实,它们还是有差别的:
- cat t1.c 这句指令中,
cat
知道t1.c的文件名,直接打开文件并输出。 - cat < t1.c 这句指令中,
cat
不知道t1.c的文件名,只是从输入中读取并输出。而这里的输入便是t1.c的文件内容。
3.4 |
管道(|
):将一个命令的输出作为另一个命令的输入。
命令1 | 命令2
如何查找一个大文件中的第30行到第50行?
这时我们可以用管道,进行流水线作业,来完成较复杂的输出操作。
- 首先,
cat
输出t2.c,作为管道文件传递给下一个指令。 - 其次,
head -50
输出管道文件的前50行,再作为新的管道文件传递给下一个指令。 - 最后,
tail -20
输出管道文件的后20行,就完成了第30行到第50行的输出。
ps:管道文件是内存级的。
四、文件查找
4.1 which
which:查找指令的路径
which 指令
指令的本质,就是编译好的程序或脚本,存放于系统的特定路径下,比如系统指令存放于 /usr/bin/ 路径下。
5.2 whereis
whereis:查找指令及其源代码和手册页的路径
whereis 指令
ps:相对于which
指令,whereis
指令查找的信息更加详细。
4.3 grep
global regular expression print:在文件中查找匹配特定模式的文本行
grep [选项] 模式 文件
常用选项 | 功能 |
---|---|
-n | 输出行号 |
-i | 忽略查找时的大小写 |
-v | 查找不匹配该模式的文本行 |
ps:grep
是一种文本行过滤工具。
4.4 find
find:在文件系统中查找文件
find [路径] [选项] [表达式]
常用选项 | 功能 |
---|---|
-name | 通过文件名查找 |
ps:比起which
和whereis
指令在特定路径下查找,find
指令真的会遍历整个文件系统(以当前目录为根结点),在磁盘文件中查找。
ps:在运行一个非常消耗资源的find
命令时,很多人都倾向于把它放在后台执行,因为遍历一个大的文件系统可能会花费很长的时间。
五、其他
5.1 man
manual:查询特定命令或程序的手册页
man 命令
编号 | 内容 |
---|---|
1 | 指令 |
2 | 系统函数 |
3 | 库函数 |
4 | 特殊文件 |
5 | 文件格式 |
6 | 游戏 |
7 | 杂项 |
8 | 系统管理命令(通常只针对root用户) |
ps:不加编号时,默认编号为1,查询指令。
ps:关于指令的众多选项,我们不用全部记住,只需要在要用时查询即可。
5.2 zip
zip:打包并压缩
zip [选项] 压缩包名 文件/目录
常用选项 | 功能 |
---|---|
-r | 递归处理目录及其子目录和文件 |
同时,与zip指令对应的是unzip指令,负责解包解压文件或目录。
ps:解包解压到特定目录,需要加选项-d。同时注意选项的位置。
打包
的意义
- 简化管理:将多个文件和文件夹组合成一个文件,便于管理和传输。
- 保持结构:保留文件和文件夹的原始层次结构,便于备份和迁移。
- 文件完整性:确保文件集的一致性和完整性,防止漏传或乱序。
压缩
的意义
- 节省存储空间:减少文件所占的存储空间。
- 提高传输效率:减少文件大小,缩短传输时间,节省带宽。
- 降低成本:减少存储和传输的数据量,降低成本。
- 增强安全性:通过加密压缩文件,增加数据安全性。
打包与压缩
结合的意义
- 一体化处理:同时实现打包和压缩,提高效率。
- 便捷性:便于分发和下载,用户操作更简单。
- 兼容性:打包和压缩后的文件通常跨平台兼容。
5.3 tar
tape archive:打包或解包
tar [选项] 归档文件 文件/目录
常用选项 | 功能 |
---|---|
-c | 建立归档文件 |
-x | 从归档文件中提取文件 |
-t | 查看归档文件 |
-z | 通过gzip压缩或解压缩 |
-j | 通过bzip2压缩或解压缩 |
-v | 显示操作过程中的详细信息 |
-f | 指定归档文件的名称 |
-C | 解压到指定目录 |
ps:归档和打包是一个意思。
打包压缩:
预览:
解包解压:
解包解压到指定目录:
ps:后缀全称为 .tar.gz,tar是打包后缀,gz是压缩后缀,简写为 .tgz。
ps:tar
指令本身用来打包解包,但是可以结合不同的压缩工具(如gzip、bzip2),进行打包并压缩。
zip
和tar
的区别
- 功能:
- zip:集成了压缩和归档功能,可以直接创建压缩的ZIP文件。
- tar:主要用于打包文件和目录,需要结合gzip、bzip2等压缩工具才能创建压缩 归档文件。
- 使用场景:
- zip:常用于需要创建跨平台兼容的压缩文件,例如在
Windows
和macOS
之间传输文件。- tar:常用于
Linux
和Unix
系统,适合备份和传输大量文件和目录,特别是在系统管理和开发环境中。- 压缩率:
- zip:提供较好的压缩率,但一般低于tar结合gzip或bzip2的压缩率。
- tar:与不同的压缩工具结合使用时,可以达到较高的压缩率,bzip2和xz通常比gzip压缩率更高。
- 文件处理:
- zip:可以方便地添加或删除单个文件而无需重新创建整个归档文件。
- tar:修改归档文件内容通常需要重新创建归档文件。
5.4 date
date:指定格式显示时间
date [选项] [+格式]
常用格式 | 功能 |
---|---|
%Y | 年 |
%m | 月 |
%d | 日 |
%H | 时 |
%M | 分 |
%S | 秒 |
%F | 相当于%Y-%m-%d |
%X | 相当于%H:%M:%S |
常用格式 | 功能 |
---|---|
%s | 日期->时间戳 |
-d@ | 时间戳->日期 |
Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp)是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
5.5 cal
calendar:显示公历
cal [选项] [日] [月] [年]
常用选项 | 功能 |
---|---|
-3 | 显示上月、本月和下月的日历 |
-j | 输出儒略日格式的日历 |
-y | 显示一整年的日历 |
ps:儒略日是一种连续计数的时间表示法,从每年的1月1日算起今天是第几天。
5.6 bc
basic calculator:命令行计算器,支持任意精度的计算
bc [选项]
启用交互模式:
非交互模式执行计算:
5.7 uname
unix name:显示电脑和操作系统的信息
uname [选项]
常用选项 | 功能 |
---|---|
-a | 显示所有信息 |
- 内核名称:Linux
- 主机名称:code-space
- 内核版本号:3.10.0-1160.108.1.el7.x86_64
- 内核编译版本:#1 SMP Thu Jan 25 16:17:31 UTC 2024
- 硬件名称:x86_64
- 处理器类型:x86_64
- 硬件平台:x86_64
- 操作系统名称:GNU/Linux
这些信息有助于了解系统的基本状态和配置,常用于系统管理和调试。
六、热键
6.1 TAB
命令补全
6.2 CTRL + C
终止程序
6.3 CTRL + D
退出
ps:等同于exit
指令。
6.4 CTRL + L
清空
ps:等同于clear
指令。
6.5 CTRL + R
查找历史命令
ps:Linux系统会自动保存最近的1000条指令。
七、Shell
7.1 定义
Shell(外壳) 是一个命令行解释器
(command Interpreter),用来沟通用户与 Kernel(内核)。
命令行解释器分为四个部分:
- 用户名:huzch
- 主机名:code-space
- 当前目录:~
- 命令行提示符:$
7.2 意义
由于用户难以直接操作Linux内核,所以需要Shell外壳来作为桥梁进行连接。
命令行解释器主要有两个意义:
- 将用户的命令翻译给内核处理,同时将内核的处理结果翻译给用户。
- 变相保护操作系统,拦截用户的非法请求。
输入指令的本质,实际上是在输入字符串。而命令行解释器将将字符串翻译给内核,调用对应的指令。
ps:Linux下的命令行解释器可以类比Windows下的图形化界面。
ps:Linux = Kernel + Shell + 各种应用组件
7.3 版本
在Linux中,最常见的几种Shell包括:
- Bash(Bourne Again Shell)
- Zsh(Z Shell)
- Fish(Friendly Interactive Shell)
- Ksh(KornShell)
- Dash(Debian Almquist Shell)
- Tcsh(TENEX C Shell)
这些Shell各有特色,可以根据具体需求和个人偏好进行选择和使用。
总结
重要的指令:mkdir
、rm
、cp
、mv
、less
、find
、man
、tar
知识点:Linux下一切皆文件、重定向与管道