一.Linux的文件系统
Linux的文件系统总的来说,是一个多叉树 的结构。它包含根目录"/"以及所属的子目录。Linux秉持一切皆文件的思想,无论是接下来讲到的指令还是后续讲到的更多系统特性,都离不开文件系统。
- 根节点(/): 位于最顶层的目录,是整个文件系统的起点
- 分支节点: 通常是目录,可以包含其他子目录或文件
- 叶子节点 :
- 普通文件一定是目录树的叶子节点(如:
/home/user/file.txt
) - 目录可能是叶子节点(空目录),也可能是中间节点(包含其他内容的目录)
- 普通文件一定是目录树的叶子节点(如:

0.一切皆文件
1.在C++或C语言中,我们常见printf或者cout这种流操作函数,它似乎可以将我们的输入"打印"到屏幕上。这实际上依然是在进行文件操作,因为------一切皆文件!
2.既然说屏幕这个设备也是文件,那么我们必须得打开吧?但是在实际操作cout时我们并没有用fstream等去手动打开文件,这实际上是系统为我们做了这个工作。在程序启动时,系统会默认执行这三个文件操作流(可以用man去查fopen):

fopen有不同的打开模式

这样就把输入输出流和系统稍微建立起了联系。
3.怎么证明,一切皆文件?做个小实验!
既然说一切皆文件,那么我们的终端(不同用户的桌面)也是文件。在登录root用户后我们再登录普通用户wujiahao和wujiaqi。查看dev下的pts文件:每新增一个用户,这里的设备就多一个,默认root用户为0文件。
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# ll /dev/pts
total 0
drwxr-xr-x 2 root root 0 Sep 9 22:16 ./
drwxr-xr-x 19 root root 3940 Sep 9 22:16 ../
crw------- 1 root tty 136, 0 Sep 10 09:52 0
c--------- 1 root root 5, 2 Sep 9 22:16 ptmx
root@VM-12-14-ubuntu:/home/lesson2/mydir# ll /dev/pts
total 0
drwxr-xr-x 2 root root 0 Sep 9 22:16 ./
drwxr-xr-x 19 root root 3940 Sep 9 22:16 ../
crw------- 1 root tty 136, 0 Sep 10 09:55 0
crw--w---- 1 wujiahao tty 136, 1 Sep 10 09:54 1
c--------- 1 root root 5, 2 Sep 9 22:16 ptmx
root@VM-12-14-ubuntu:/home/lesson2/mydir# ll /dev/pts
total 0
drwxr-xr-x 2 root root 0 Sep 9 22:16 ./
drwxr-xr-x 19 root root 3940 Sep 9 22:16 ../
crw------- 1 root tty 136, 0 Sep 10 09:55 0
crw--w---- 1 wujiahao tty 136, 1 Sep 10 09:54 1
crw--w---- 1 wujiaqi tty 136, 2 Sep 10 09:55 2
c--------- 1 root root 5, 2 Sep 9 22:16 ptmx
然后我们用root用户向不同用户的设备文件echo重定向一下:
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# echo "hello">/dev/pts/0
hello
root@VM-12-14-ubuntu:/home/lesson2/mydir# echo "nihao">/dev/pts/1
root@VM-12-14-ubuntu:/home/lesson2/mydir# echo "ciao">/dev/pts/2
可以看到向0写入时直接回显到了我们的root用户的显示器中。接着观察两个普通用户:
bash
#wujiahao
Last login: Mon Sep 8 20:21:27 2025 from 123.175.196.169
wujiahao@VM-12-14-ubuntu:~$ nihao
#wujiaqi
/usr/bin/xauth: file /home/wujiaqi/.Xauthority does not exist
wujiaqi@VM-12-14-ubuntu:~$ ciao
成功地在不同用户显示器文件上回显!
同样地,我们在C++文件中也可以使用fstream对指定文件进行读写操作,实现的效果是一样的。
1.根目录下基本子目录的用途
/usr
- 用户程序与只读数据(Unix System Resources)
- 功能 :这是一个非常重要的目录,用于安装用户应用程序、库、文档和其他只读数据 。可以把它理解为 Windows 下的
C:\Program Files
和C:\Windows\System32
的结合体。它本身又包含了许多重要的子目录。
/dev
- 设备文件
- 功能 :存放所有的设备文件。Linux 系统通过读写这些特殊文件来访问硬件设备和虚拟设备。
/home
- 用户家目录
- 功能 :存放所有普通用户的个人文件和配置 。每个用户都有一个以其用户名命名的子目录(例如
/home/alice
)。
/etc
- 配置文件
- 功能 :存放系统和应用程序的配置文件。几乎所有系统的全局配置都在这里。
/bin
- 用户基本命令(二进制文件)
- 功能 :存放所有用户(包括普通用户和root用户)都需要使用的最基础、最必要的命令。这些命令在单用户模式(救援模式)下也能使用。
2.Linux中的命令是什么
对用户而言,执行不同的命令会产生不同的效果。例如我们展示/home的树形结构用到命令:
bash
tree /home
产生的效果如下,清晰的以树的形式显示出home下的所有子目录。
cpp
root@VM-12-14-ubuntu:~# tree /home
/home
├── lesson2
│ └── mydir
│ └── test.c
├── lighthouse
├── ubuntu
├── wujiahao
└── wujiaqi
6 directories, 1 file
但是,Linux中一切皆文件 ,那么,指令也是文件吗?答案是肯定的。我们可以直接查到tree命令的位置在哪:/user下的bin目录。而这也同时验证了上面提到的bin目录的职能。
bash
root@VM-12-14-ubuntu:~# which tree
/usr/bin/tree
换言之,甚至我们可以编写一个简单的程序,并将它编译链接成一个可执行程序,将它拷贝到这个bin目录下,就可以实现"指令式的调用"了。
首先我们按照一般的编译链接形式执行一个test文件。
cpp
root@VM-12-14-ubuntu:/home/lesson2/mydir# vim test.c
root@VM-12-14-ubuntu:/home/lesson2/mydir# gcc -o test.i test.c
root@VM-12-14-ubuntu:/home/lesson2/mydir# ls
test.c test.i
root@VM-12-14-ubuntu:/home/lesson2/mydir# ./test.i
hello linuxroot@VM-12-14-ubuntu:/home/lesson2/mydir# cat test.c
#include<stdio.h>
int main(){
printf("hello linux");
return 0;
}
然后将它以"指令式运行",可以看到正如我们所料。
cpp
root@VM-12-14-ubuntu:/home/lesson2/mydir# cp test.i /usr/bin
root@VM-12-14-ubuntu:/home/lesson2/mydir# test.i
hello linuxroot@VM-12-14-ubuntu:/home/lesson2/mydir#
3.文件的组成
无论是Windows还是Linux,文件的组成都可以大概表示为内容+属性。内容就是文件承载的数据信息,属性包括文件名,创建时间,修改时间,所有者,权限等等。我们可以直接查看:
cpp
root@VM-12-14-ubuntu:/home/lesson2/mydir# ll test.c
-rw-r--r-- 1 root root 69 Sep 9 19:40 test.c
文件类型和权限 (-rw-r--r--
)
-
第一个字符表示文件类型:
-
d
:目录(directory) -
-
:普通文件(如test.txt
) -
l
:符号链接 -
其他如
c
(字符设备)、b
(块设备)等
-
后续9个字符是权限位(每3个一组)
-
权限字母含义:
-
r
= 读(read) -
w
= 写(write) -
x
= 执行(execute) -
-
= 无权限
-

bash
rw- r-- r--
│││ │││ │││
│││ │││ └── 其他用户权限(r--:仅可读)
│││ └─── 所属组权限(r--:仅可读)
└─── 所有者权限(rw-:可读可写,不可执行)
硬链接计数 (2)
对于目录,这个数字表示:
至少包含 2 个硬链接:.(当前目录自身)和 ..(上级目录)
每增加一个子目录,计数+1(因为子目录的 .. 指向它)
对于普通文件(如 test.c 显示 1),表示只有一个文件名指向该 inode
所有者 (root)
文件/目录的拥有者账户(这里是 root 用户)
决定谁可以行使"所有者权限"(前3位权限)
所属组 (root)
文件/目录所属的用户组(这里是 root 组)
组内成员可行使"所属组权限"(中间3位权限)
大小 (69)
目录大小 ≠ 内容总大小,而是目录元数据占用的磁盘空间
目录本质是"文件名→inode"的映射表,默认分配 4096 字节(1个磁盘块)
即使空目录也显示 4096(如刚创建的 mydir)
对于文件(如 test.c 显示 69),表示实际内容大小
最后修改时间 (Sep 9 19:40)
最后一次内容修改的时间戳
对于目录:添加/删除文件、重命名等操作会更新
格式:月 日 时间(6个月内的文件显示时间,否则显示年份)
名称 (mydir)
文件/目录的名称
如果是符号链接,会显示 linkname -> target
4.路径
路径存在的核心意义是为文件系统中的每个资源提供唯一标识。由于树状结构中:
- 每个节点(除根节点外)都有且只有一个父节点
- 从根目录到任何节点的路径都是唯一的
绝对路径:从根目录/开始定位某个分支结点。如
bash
/home/lesson2/mydir
绝对路径常用于:
- 系统配置文件(如
/etc/ssh/sshd_config
) - 服务启动脚本
- 需要精确定位的场合
相对路径:由上面介绍的硬链接可知,相对路径就是利用 当前结点. 或者 上级结点.. 进行快速定位。如假设此时位于mydir文件夹中
bash
root@VM-12-14-ubuntu:/home# cd /home
root@VM-12-14-ubuntu:/home# cd ..
root@VM-12-14-ubuntu:/# pwd
/
root@VM-12-14-ubuntu:/# cd ./root
root@VM-12-14-ubuntu:~# pwd
/root
相对路径常用于:
- 命令行操作
- 脚本编写
- 日常文件操作
5.Linux中的shell
实际上,我们目前使用的"命令行",并不是在直接与操作系统内核通信,而是由一个叫shell的程序间接创造的窗口。那么:
问题一:为什么我们无法直接访问操作系统内核?
问题二:shell是什么?它的作用是什么?
内核就像是电厂的核心发电机组。它极其强大,但也极其危险和精密。它负责最根本的任务:燃烧燃料、产生高压电。你绝对不会想让一个普通居民直接去操作这些机组,因为:
-
危险:一个错误的操作可能导致整个电网瘫痪甚至爆炸。
-
复杂:操作需要极高的专业知识和技能。
-
不必要:用户根本不需要知道发电的细节,他们只想安全地用"电"这个能源来做具体的事,比如点亮灯泡或给手机充电。
而 Shell(壳) ,就是这个电厂的控制室和配电系统。控制室里有很多友好的按钮、屏幕和开关。工作人员(用户)在控制室里下达简单的指令(比如"启动5号机组"或"向A区供电"),配电系统就会将这些简单的指令转换成一系列复杂、安全的底层操作,最终让发电机组执行。
1.内核拥有操作计算机硬件的最高权限,你的任何一个操作都有可能导致系统崩溃,数据泄漏。。。
2.因此shell正如其名,它是一个命令行解释器: 用于保护内核,向内核翻译用户操作,以及拦截一些未知或者危险操作;向用户报告内核的处理结果**。**
3.Linux中的shell程序叫做bash,它是以进程 形式(而且是用户进程,进程的概念之后细说)存在的**。** 每当一个新命令到来,就会创造一个新进程**。**
bash
wujiahao@VM-12-14-ubuntu:~$ ps -p $$
PID TTY TIME CMD
826501 pts/0 00:00:00 bash
二.Linux中的基础指令
Linux的指令其实就像英语单词,不一定全部一次性都记住,只要知道一些普通的日常使用的指令,其他的会在实践中熟悉。
1.命令的组成
在Linux中,指令往往由三部分组成。
指令本身+选项+作用对象
指令本身即要执行的操作。做一个比喻就是:指令本身代表吃饭,选项代表用什么吃,对象代表跟谁吃。
2.安装和登录命令
login - 用户登录系统
shutdown - 安全关闭系统(可加参数:-h关机,-r重启)
halt - 直接关闭系统(紧急情况使用)
reboot - 重启计算机
install - 安装软件包(如:install package.rpm)
mount - 挂载文件系统(如:mount /dev/sdb1 /mnt)
umount - 卸载文件系统
chsh - 更改登录shell(如:chsh -s /bin/bash)
exit - 退出当前shell会话
last - 显示用户登录历史
3.文件处理命令
file - 检测文件类型(如:file document.pdf)
mkdir - 创建目录(可加参数:-p递归创建)
grep - 文本搜索工具(如:grep "error" logfile)
dd - 磁盘拷贝(如:dd if=/dev/sda of=backup.img)
find - 文件查找(如:find /home -name "*.txt")
mv - 移动/重命名文件
ls - 列出目录内容(常用参数:-l详细列表,-a显示隐藏文件)
diff - 比较文件差异
cat - 查看/合并文件内容
ln - 创建链接(软链接:ln -s source link)
4.系统管理命令
df - 显示磁盘空间(加-h参数显示易读格式)
top - 动态显示进程信息
free - 查看内存使用情况
quota - 显示磁盘配额
at - 定时执行任务
lp - 打印文件
adduser - 添加用户账户
groupadd - 创建用户组
kill - 终止进程(常用信号:9强制终止)
crontab - 定时任务管理(crontab -e编辑任务)
5.网络操作命令
ifconfig - 配置网络接口(显示IP地址等)
ip - 更强大的网络配置工具
ping - 测试网络连通性
netstat - 显示网络状态(如:netstat -tuln)
telnet - 远程登录工具
ftp - 文件传输协议
route - 显示/设置路由表
rlogin - 远程登录
rcp - 远程文件复制
finger - 用户信息查询
mail - 发送/接收邮件
nslookup - 域名查询工具
6.系统安全命令
passwd - 修改用户密码
su - 切换用户身份
umask - 设置默认文件权限
chgrp - 更改文件所属组
chmod - 修改文件权限(如:chmod 755 file)
chown - 更改文件所有者
chattr - 修改文件属性
sudo - 以管理员权限执行命令
ps - 查看进程状态(常用:ps aux)
who - 显示当前登录用户
7.其他常用命令
其他实用命令
tar - 打包/解压文件(如:tar -czvf archive.tar.gz dir/)
unzip - 解压zip文件
gunzip - 解压gzip文件
unarj - 解压arj文件
mtools - MS-DOS文件系统工具
man - 查看命令手册(如:man ls)
unencode - 编码二进制文件
uudecode - 解码uudecode
三.常用指令详解
1.ls 命令
语法:ls [选项] [目录或文件]
功能:显示目录内容或文件信息。当指定目录时,列出该目录下的所有子目录和文件;当指定文件时,显示该文件的详细信息。
常用选项详解
1. -a
:显示所有文件(包括隐藏文件)
- 作用 :显示目录中的所有条目,包括以
.
开头的隐藏文件。例如:
cpp
root@VM-12-14-ubuntu:/home# ls -a
. .. lesson2 lighthouse ubuntu wujiahao wujiaqi
显示当前目录所有内容(.
表示当前目录,..
表示上级目录)
2. -d
:将目录作为文件显示(不展开内容)
-
作用 :仅显示目录本身,而不是其内容。常与
-l
结合使用查看目录属性。 -
示例:ls ‒d 指定目录,例如:
bash
root@VM-12-14-ubuntu:/home# ls -d /home
/home
3. -i
:显示文件索引节点(inode)
-
作用:显示文件的 inode 号(文件在磁盘上的唯一标识)。
-
示例:
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# ls -i test.c
655365 test.c
4. -k
:以 KB 为单位显示文件大小
-
作用 :文件大小以 KB(1024 字节)为单位显示,通常与
-l
或-s
结合使用。 -
示例:
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# ls -lk test.c
-rw-r--r-- 1 root root 69 Sep 9 19:40 test.c
5. -l
:显示详细文件信息
- 作用:长格式输出
包括:
- 文件类型和权限
- 硬链接数
- 所有者
- 所属组
- 文件大小
- 最后修改时间
- 文件名
注意:ls -l 也可以简写成 ll
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# ll test.c
-rw-r--r-- 1 root root 69 Sep 9 19:40 test.c
6. -n
:用数字 ID 代替用户/组名称
-
作用:显示 UID(用户 ID)和 GID(组 ID)而非名称。\
-
作为管理员(root),UID和GID均为0,作为普通用户,则均大于等于1000。
bash
root@VM-12-14-ubuntu:/home# ls -ln
total 20
drwxr-xr-x 3 0 0 4096 Sep 8 21:47 lesson2
drwxr-x--- 2 1001 1002 4096 Sep 7 20:53 lighthouse
drwxr-x--- 4 1000 1001 4096 Sep 7 20:53 ubuntu
drwxr-x--- 3 1002 1003 4096 Sep 8 20:21 wujiahao
drwxr-x--- 2 1003 1004 4096 Sep 8 20:05 wujiaqi
7. -F
:显示文件类型标识符
-
作用:在文件名后追加类型标识符:
-
*
: 可执行文件 -
/
: 目录 -
@
: 符号链接 -
|
: FIFO(命名管道) -
=
: 套接字文件
-
可见与上面展示的文件的名称是有所区别的。
bash
root@VM-12-14-ubuntu:/home# ls -ln
total 20
drwxr-xr-x 3 0 0 4096 Sep 8 21:47 lesson2
drwxr-x--- 2 1001 1002 4096 Sep 7 20:53 lighthouse
drwxr-x--- 4 1000 1001 4096 Sep 7 20:53 ubuntu
drwxr-x--- 3 1002 1003 4096 Sep 8 20:21 wujiahao
drwxr-x--- 2 1003 1004 4096 Sep 8 20:05 wujiaqi
root@VM-12-14-ubuntu:/home# ls -lF
total 20
drwxr-xr-x 3 root root 4096 Sep 8 21:47 lesson2/
drwxr-x--- 2 lighthouse lighthouse 4096 Sep 7 20:53 lighthouse/
drwxr-x--- 4 ubuntu ubuntu 4096 Sep 7 20:53 ubuntu/
drwxr-x--- 3 wujiahao wujiahao 4096 Sep 8 20:21 wujiahao/
drwxr-x--- 2 wujiaqi wujiaqi 4096 Sep 8 20:05 wujiaqi/
root@VM-12-14-ubuntu:/home#
8. -r
:反向排序
-
作用 :反转排序结果(默认按字母升序,
-r
改为降序)。 -
示例:
cpp
ls -r # 文件按 z→a 显示
ls -lt # 按时间从新到旧
ls -ltr # 按时间从旧到新(-t 按时间排序,-r 反转)
9. -s
:显示文件大小(磁盘占用块数)
- 作用:显示文件占用的磁盘块数(默认块大小=1024字节)。用于快速定位大文件。
bash
root@VM-12-14-ubuntu:/home# ls -s
total 20
4 lesson2 4 lighthouse 4 ubuntu 4 wujiahao 4 wujiaqi
10. -R
:递归显示子目录内容
- 作用:递归列出所有子目录中的文件。
cpp
root@VM-12-14-ubuntu:/home# ls -R
.:
lesson2 lighthouse ubuntu wujiahao wujiaqi
./lesson2:
mydir
./lesson2/mydir:
test.c test.i
./lighthouse:
./ubuntu:
./wujiahao:
./wujiaqi:
root@VM-12-14-ubuntu:/home#
2.pwd命令
语法:pwd [选项]
功能:显示当前工作目录的绝对路径,即用户在文件系统中的当前位置。
常用选项详解
选项 | 作用 | |
---|---|---|
无选项 | 显示当前目录的逻辑路径(含符号链接) | |
-P |
显示物理路径(解析所有符号链接) | |
-L |
显示逻辑路径(默认行为,可省略) |
cpp
root@VM-12-14-ubuntu:/home# pwd
/home
root@VM-12-14-ubuntu:/home# pwd -P
/home
root@VM-12-14-ubuntu:/home# pwd -L
/home
3.cd命令
语法:cd [选项][路径]
功能:跳转到某个路径目录下
常用选项详解
选项 | 作用 | 示例 |
---|---|---|
-P |
解析符号链接到物理路径 | cd -P linked_dir |
-L |
跟随符号链接(默认行为) | cd -L linked_dir |
- |
返回上一个工作目录(特殊) | cd - |
cpp
root@VM-12-14-ubuntu:~# cd /home/lesson2/mydir
root@VM-12-14-ubuntu:/home/lesson2/mydir#
cpp
cd # 无参数:返回家目录
cd - # 返回上一次所在的工作目录(在两个目录间切换)
cd . # 停留在当前目录(极少使用)
cd ~ #跳转到当前用户的家目录
4.touch指令
功能:touch
是 Linux 中用于创建空文件 和修改文件时间戳的基础命令。它的核心功能基于两个场景:
-
当文件不存在时:创建新的空文件
-
当文件已存在时:更新文件的时间戳
语法:touch [选项]... 文件名...
1.创建文件
bash
root@VM-12-14-ubuntu:/home/lesson2# touch yourdir
root@VM-12-14-ubuntu:/home/lesson2# ls
mydir yourdir
2.修改时间戳
Linux 文件有三种时间戳:
访问时间 (atime):文件最后被读取的时间
修改时间 (mtime):文件内容最后被修改的时间
变更时间 (ctime):文件元数据(权限/所有者等)变更时间(不可手动修改)
默认情况下 touch 更新 atime 和 mtime
常用选项详解
选项 | 作用 | 示例 |
---|---|---|
-a |
仅更新访问时间 (atime) | touch -a file |
-m |
仅更新修改时间 (mtime) | touch -m file |
-c |
不创建新文件 | touch -c non_existent |
-d |
指定时间字符串 | touch -d "2024-01-01" file |
-t |
使用时间戳格式 | touch -t 202401011200 file |
-r |
复制其他文件时间 | touch -r source.txt target.txt |
5.mkdir指令
作用:mkdir
是 Linux 中用于创建新目录 的核心命令,通过系统调用 mkdir()
实现。它不仅创建目录,还自动生成两个特殊条目:
-
.
(指向自身) -
..
(指向父目录)
语法:mkdir [选项] 目录名
常用选项详解
选项 | 作用 | 示例 |
---|---|---|
-p |
递归创建父目录 | mkdir -p a/b/c |
-m |
设置目录权限 | mkdir -m 750 secure_dir |
-v |
显示创建过程 | mkdir -v newdir |
--parents |
同 -p |
mkdir --parents project/docs |
示例:
1.递归创建父目录
bash
root@VM-12-14-ubuntu:/home# mkdir -p test/a1/a2/a3
root@VM-12-14-ubuntu:/home# tree /home
/home
├── lesson2
│ ├── mydir
│ │ ├── test.c
│ │ └── test.i
│ └── yourdir
├── lighthouse
├── test
│ └── a1
│ └── a2
│ └── a3
├── ubuntu
├── wujiahao
└── wujiaqi
10 directories, 3 files
2.设置目录权限
目录权限r=4 w=2 x=1
bash
root@VM-12-14-ubuntu:/home# mkdir -m 755 test2
root@VM-12-14-ubuntu:/home# ls -l
total 28
drwxr-xr-x 3 root root 4096 Sep 9 20:33 lesson2
drwxr-x--- 2 lighthouse lighthouse 4096 Sep 7 20:53 lighthouse
drwxr-xr-x 3 root root 4096 Sep 9 20:40 test
drwxr-xr-x 2 root root 4096 Sep 9 20:43 test2
drwxr-x--- 4 ubuntu ubuntu 4096 Sep 7 20:53 ubuntu
drwxr-x--- 3 wujiahao wujiahao 4096 Sep 8 20:21 wujiahao
drwxr-x--- 2 wujiaqi wujiaqi 4096 Sep 8 20:05 wujiaqi
6.rmdir与rm指令
rmdir
命令详解
功能:删除空目录
适用对象:具有当前目录操作权限的所有使用者
语法:rmdir [选项] 目录名...
核心选项:
选项 | 作用 | 示例 |
---|---|---|
-p |
递归删除空父目录 | rmdir -p a/b/c |
-v |
显示删除过程 | rmdir -v emptydir |
--ignore-fail-on-non-empty |
忽略非空目录错误 | 脚本中容错使用 |
示例:
bash
root@VM-12-14-ubuntu:/home# rmdir test2
root@VM-12-14-ubuntu:/home# ls
lesson2 lighthouse test ubuntu wujiahao wujiaqi
rm
命令详解
功能:删除文件和目录
适用对象:所有使用者
语法:rm [选项] 文件或目录...
核心选项:
选项 | 作用 | 示例 |
---|---|---|
-r / -R | 递归删除目录及内容 | rm -r mydir |
-f | 强制删除(无确认) | rm -f log.txt |
-i | 交互式确认 | rm -i *.tmp |
-v | 显示删除过程 | rm -v oldfile |
-d | 删除空目录(同 rmdir) | rm -d emptydir |
--preserve-root | 防止误删根目录(默认开启) | 系统保护机制 |
示例:
bash
root@VM-12-14-ubuntu:/home# tree
.
├── hello.txt
├── lesson2
│?? ├── mydir
│?? │?? ├── hello.txt
│?? │?? ├── poet.txt
│?? │?? ├── test.c
│?? │?? └── test.i
│?? └── yourdir
├── lighthouse
├── ubuntu
├── wujiahao
└── wujiaqi
6 directories, 6 files
root@VM-12-14-ubuntu:/home# rm -rf hello.txt
root@VM-12-14-ubuntu:/home# tree
.
├── lesson2
│?? ├── mydir
│?? │?? ├── hello.txt
│?? │?? ├── poet.txt
│?? │?? ├── test.c
│?? │?? └── test.i
│?? └── yourdir
├── lighthouse
├── ubuntu
├── wujiahao
└── wujiaqi
7.man指令
man
(manual) 是 Linux 系统的内置帮助系统,提供超过 10,000 页的官方文档,涵盖:
-
所有命令的使用方法
-
系统调用的技术细节
-
配置文件格式说明
-
编程接口文档
-
特殊设备文件信息
语法:man [选项] [章节] 查询目标
示例:
bash
root@VM-12-14-ubuntu:/home# man 3 printf
Linux Programmer's Manual PRINTF(3)
NAME
printf, fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf, vsprintf, vsnprintf - formatted output conversion
SYNOPSIS
#include <stdio.h>
int printf(const char *format, ...);
int fprintf(FILE *stream, const char *format, ...);
int dprintf(int fd, const char *format, ...);
int sprintf(char *str, const char *format, ...);
int snprintf(char *str, size_t size, const char *format, ...);
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vdprintf(int fd, const char *format, va_list ap);
int vsprintf(char *str, const char *format, va_list ap);
int vsnprintf(char *str, size_t size, const char *format, va_list ap);
...
...
核心选项:
章节 | 内容类型 | 示例 |
---|---|---|
1 | 用户命令 | man ls |
2 | 系统调用 | man open |
3 | 库函数 | man printf |
4 | 特殊文件 | man null |
5 | 文件格式 | man passwd |
6 | 游戏 | man fortune |
7 | 杂项 | man ascii |
8 | 系统管理 | man ifconfig |
9 | 内核例程 | man bootparam |
核心选项与功能
bash
man ls # 查看 ls 命令手册
man 2 open # 查看 open 系统调用
man -k printf # 搜索所有包含 printf 的手册
高级选项
选项 | 作用 | 示例 |
---|---|---|
-f |
显示简短描述 | man -f passwd |
-a |
显示所有匹配手册 | man -a printf |
-w |
显示手册路径 | man -w bash |
-K |
全文本搜索 | man -K "socket" |
页面技巧
快捷键 | 功能 |
---|---|
空格 |
向下翻页 |
b |
向上翻页 |
/ 关键词 |
向前搜索 |
? 关键词 |
向后搜索 |
n |
跳至下一个匹配项 |
q |
退出手册 |
h |
查看帮助(导航指南) |
8.cp指令
cp
(copy) 是 Linux 中用于复制文件和目录的核心命令,其核心功能包括:
-
文件到文件的复制
-
文件到目录的复制
-
目录到目录的递归复制
-
特殊文件(链接/设备)的复制控制
语法:cp [选项]... 源文件... 目标路径
常用选项详解
1.-f
或 --force
:强制复制
作用:无条件覆盖目标文件/目录,不提示任何警告
特点:
-
忽略目标是否已存在
-
不提示覆盖确认
-
静默执行操作
-
可能覆盖重要文件而不自知
示例:强制覆盖文件,不在就是拷贝,在就直接覆盖
bash
root@VM-12-14-ubuntu:/home# touch hello.txt
root@VM-12-14-ubuntu:/home# echo "hello linux">hello.txt
root@VM-12-14-ubuntu:/home# cat hello.txt
hello linux
root@VM-12-14-ubuntu:/home# cp hello.txt /home/lesson2/mydir
root@VM-12-14-ubuntu:/home# tree /home/lesson2/mydir
/home/lesson2/mydir
├── hello.txt
├── test.c
└── test.i
0 directories, 3 files
root@VM-12-14-ubuntu:/home# cat /home/lesson2/mydir/hello.txt
hello linux
2.-i
或 --interactive
:交互确认
作用:覆盖目标文件前要求用户确认
特点:
-
对每个可能覆盖的文件提示
-
需用户输入
y
确认 -
防止意外覆盖
-
适合人工操作场景
3.-r
或 -R
:递归复制
作用:复制目录及其所有子内容(文件/子目录)
特点:
-
必须用于复制目录
-
复制目录完整结构
-
默认不保留符号链接(复制链接目标)
-
可能意外复制隐藏文件(如.git目录)
9.cat指令
cat
(concatenate) 是 Linux 中最核心的文件内容操作命令,主要功能包括:
-
查看文件内容
-
创建新文件
-
合并多个文件
-
文件内容重定向:>向指定文件写,<从指定文件读
-
特殊设备操作
语法:cat [选项] [文件]...
核心选项
选项 | 作用 | 示例 |
---|---|---|
-n |
显示行号(包括空行) | cat -n log.txt |
-b |
显示行号(忽略空行) | cat -b script.sh |
-s |
压缩连续空行为一行 | cat -s config.cfg |
-A |
显示所有控制字符 | cat -A binary.data |
-T |
显示 TAB 为 ^I | cat -T data.csv |
-E |
行尾显示 $ 符号 | cat -E script.py |
-v |
显示非打印字符 | cat -v encrypted.txt |
示例
bash
# 查看文件内容
cat test.txt
# 显示行号(包括空行)
cat -n test.txt
# 显示行号(忽略空行)
cat -b test.txt
# 压缩连续空行为一行
cat -s test.txt
//存在即显示
root@VM-12-14-ubuntu:/home# cat hello.txt
hello linux
//重定向且存在则覆盖
root@VM-12-14-ubuntu:/home/lesson2/mydir# cat nature.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# echo "tree">nature.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# cat nature.txt
tree
root@VM-12-14-ubuntu:/home/lesson2/mydir# echo "sky">nature.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# cat nature.txt
sky
//不存在则创建
root@VM-12-14-ubuntu:/home# tree
.
├── lesson2
│ ├── mydir
│ │ ├── hello.txt
│ │ ├── poet.txt
│ │ ├── test.c
│ │ └── test.i
│ └── yourdir
├── lighthouse
├── ubuntu
├── wujiahao
└── wujiaqi
6 directories, 5 files
root@VM-12-14-ubuntu:/home/lesson2/mydir# >nature.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# tree
.
├── hello.txt
├── nature.txt
├── poet.txt
├── test.c
└── test.i
//cat默认从键盘文件读,在回车之前会阻塞等待输入。也可以指定文件输入。最终输出到屏幕文件中。
root@VM-12-14-ubuntu:/home/lesson2/mydir# cat
a
a
b
b
b
root@VM-12-14-ubuntu:/home/lesson2/mydir# cat <nature.txt
sky
10.more 指令
more
是 Linux 中最基础的文件分页查看工具,主要功能包括:
-
分页显示文件内容
-
支持文本搜索
-
基本导航功能
-
大文件高效查看

语法:more [选项] 文件名
核心选项
选项 | 作用 | 示例 |
---|---|---|
-d |
显示提示信息 | more -d longfile.txt |
-f |
强制显示特殊字符 | more -f binary.data |
-p |
清屏再显示 | more -p config.cfg |
-c |
不滚屏,整页刷新 | more -c logfile.log |
-s |
压缩连续空行 | more -s output.txt |
+行号 |
从指定行开始 | more +100 access.log |
+/模式 |
从匹配模式开始 | more +/ERROR debug.log |
操作指令
按键 | 功能 |
---|---|
空格 | 向下翻一页 |
回车 | 向下翻一行 |
b | 向上翻一页 |
q | 退出 |
/模式 | 向前搜索文本 |
n | 查找下一个匹配项 |
示例:
bash
hello.txt poet.txt test.c test.i
root@VM-12-14-ubuntu:/home/lesson2/mydir# more -d poet.txt
The Road Not Taken
By Robert Frost (1874?1963)
Two roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth;
Then took the other, as just as fair,
And having perhaps the better claim,
Because it was grassy and wanted wear;
Though as for that the passing there
Had worn them really about the same,
And both that morning equally lay
In leaves no step had trodden black.
Oh, I kept the first for another day!
Yet knowing how way leads on to way,
I doubted if I should ever come back.
I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I?
I took the one less traveled by,
And that has made all the differencsdfasdfk
sdfa
11.less 指令
less
是 Linux 中最强大的文件查看工具,相比 more
具有革命性的改进,主要功能包括:
-
双向导航(支持前后翻页)
-
高级文本搜索
-
实时文件监控
-
大文件高效处理
-
多种显示模式

基本语法
less [选项] 文件名
核心选项
选项 | 作用 | 示例 |
---|---|---|
-N |
显示行号 | less -N server.log |
-i |
忽略大小写搜索 | less -i config.cfg |
-S |
截断长行(不换行) | less -S data.csv |
-F |
文件不足一屏时自动退出 | less -F short.txt |
-R |
保留 ANSI 颜色代码 | less -R colored.log |
-M |
显示详细状态栏 | less -M access.log |
-X |
退出时不清理屏幕 | less -X output.txt |
+命令 |
初始执行命令 | less +G error.log |
操作指令
按键 | 功能 |
---|---|
空格 / f | 向下翻一页 |
b | 向上翻一页 |
回车 / e | 向下翻一行 |
y | 向上翻一行 |
g | 跳到文件开头 |
G | 跳到文件末尾 |
/pattern | 向前搜索 |
?pattern | 向后搜索 |
n | 跳至下一个匹配 |
N | 跳至上一个匹配 |
F | 实时追踪文件 |
与 more 对比
特性 | more | less |
---|---|---|
回看功能 | ❌ 有限 | ✅ 完整 |
搜索方向 | 仅向前 | 双向 |
文件跳转 | ❌ 不支持 | ✅ 支持 |
实时追踪 | ❌ 不支持 | ✅ 支持 |
正则搜索 | ❌ 不支持 | ✅ 完整支持 |
示例:
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# less -N poet.txt
1 The Road Not Taken
2 By Robert Frost (1874--1963)
3 Two roads diverged in a yellow wood,
4 And sorry I could not travel both
5 And be one traveler, long I stood
6 And looked down one as far as I could
7 To where it bent in the undergrowth;
8
9 Then took the other, as just as fair,
10 And having perhaps the better claim,
11 Because it was grassy and wanted wear;
12 Though as for that the passing there
13 Had worn them really about the same,
14
15 And both that morning equally lay
16 In leaves no step had trodden black.
17 Oh, I kept the first for another day!
18 Yet knowing how way leads on to way,
19 I doubted if I should ever come back.
20
21 I shall be telling this with a sigh
22 Somewhere ages and ages hence:
23 Two roads diverged in a wood, and I---
24 I took the one less traveled by,
25 And that has made all the differencsdfasdfk
26
27
28 sdfa
29
30
查看syslog,支持上翻下翻:

12.head 指令
head
是 Linux 中用于查看文件开头部分的核心命令,主要功能包括:
-
快速预览文件头部内容
-
查看文件前 N 行
-
检查文件前 N 字节
-
处理大文件的起始部分

基本语法
head [选项] [文件]...
核心选项
选项 | 作用 | 示例 |
---|---|---|
-n <数字> |
显示前 N 行 | head -n 20 file.log |
-<数字> |
简写显示前 N 行 | head -20 file.log |
-c <大小> |
显示前 N 字节 | head -c 1K image.jpg |
-q |
不显示文件名标题 | head -q file1 file2 |
-v |
总是显示文件名标题 | head -v config.cfg |
示例
bash
# 默认显示前10行
head test.txt
# 显示前5行
head -5 test.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# vim poet.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# head -6 poet.txt
The Road Not Taken
By Robert Frost (1874--1963)
Two roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
13.tail 指令
tail
是 Linux 中用于查看文件尾部内容的核心命令,主要功能包括:
-
显示文件末尾内容
-
实时监控文件变化
-
处理日志轮转
-
大文件尾部高效查看
以上讲到的less,more,head,以及下面要讲的find指令,最常见的应用就是查看日志(log)。tail常用于文本量较大时的尾部(最新)消息查看。

基本语法
tail [选项] [文件]...
核心选项
选项 | 作用 | 示例 |
---|---|---|
-n <数字> |
显示后 N 行 | tail -n 20 server.log |
-<数字> |
简写显示后 N 行 | tail -20 debug.log |
-c <大小> |
显示后 N 字节 | tail -c 1K database.bin |
-f |
实时追踪文件更新 | tail -f access.log |
-F |
实时追踪(支持重打开) | tail -F app.log |
-q |
不显示文件名标题 | tail -q *.txt |
-v |
总是显示文件名标题 | tail -v *.conf |
--pid |
监控指定进程结束 | tail -f --pid=1234 log |
示例
bash
# 显示文件末尾
tail test.txt
# 显示最后5行
tail -5 test.txt
# 实时监控日志
tail -f access.log
# 显示[8,10]行内容
head -10 test.txt | tail -2
root@VM-12-14-ubuntu:/home/lesson2/mydir# tail -10 poet.txt
I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I---
I took the one less traveled by,
And that has made all the differencsdfasdfk
sdfa
14.date 指令
date
是 Linux 中最核心的时间管理工具,主要功能包括:
-
显示系统时间
-
设置系统时间
-
时间格式转换
-
时间计算
-
日志时间戳生成:时间戳就是一串能够唯一标识某一刻时间的编码 。它记录了从某个公认的"起点时间"(协调世界时(UTC)1970年1月1日 00:00:00)到现在所经过的秒数或毫秒数。
一个小知识:电脑关机之后再重启,时间依旧可以正常显示,这是为什么?
答案是:无论是笔记本电脑还是台式电脑,主板上都有一个纽扣电池用来维持各种功能,时间的记录就是其中之一。

基本语法
date [选项]... [+格式] # 显示时间
date [选项] [MMDDhhmm[[CC]YY][.ss]] # 设置时间
核心选项
选项 | 作用 | 示例 |
---|---|---|
-d |
解析时间字符串 | date -d "tomorrow" |
-s |
设置系统时间 | sudo date -s "2025-07-05 15:30" |
-r |
显示文件时间 | date -r /etc/passwd |
-u |
显示UTC时间 | date -u |
-I[TIMESPEC] |
ISO 8601格式 | date -Iseconds |
格式化符号
符号 | 含义 | 示例输出 |
---|---|---|
%Y |
四位年份 | 2025 |
%m |
月份(01-12) | 07 |
%d |
日(01-31) | 05 |
%H |
小时(00-23) | 15 |
%M |
分钟(00-59) | 30 |
%S |
秒(00-60) | 45 |
%s |
Unix时间戳 | 1750000000 |
%F |
完整日期(%Y-%m-%d) | 2025-07-05 |
%T |
时间(%H:%M:%S) | 15:30:45 |
示例
bash
# 默认格式
date
# 自定义格式
date "+%Y-%m-%d %H:%M:%S"
# 时间计算
date -d "tomorrow"
date -d "2 hours ago"
# 时间戳转换
date -d @1750000000
date +%s -d "2025-07-05 15:30:00"
# 显示文件修改时间
date -r /etc/passwd
root@VM-12-14-ubuntu:/home/lesson2/mydir# date "+%Y-%m-%d %H:%M:%S"
2025-09-09 21:27:37
15.cal 指令
cal
(calendar) 是 Linux 中用于显示日历的实用工具,主要功能包括:
-
显示当月日历
-
查看特定月份/年份
-
显示全年日历
-
支持儒略历显示
-
快速日期定位

基本语法
cal [选项] [[月份] 年份]
核心选项
选项 | 作用 | 示例 |
---|---|---|
-1 |
只显示当月(默认) | cal -1 |
-3 |
显示上/当/下三月 | cal -3 |
-s |
周日作为每周第一天 | cal -s |
-m |
周一作为每周第一天 | cal -m |
-j |
显示儒略历(年天数) | cal -j |
-y |
显示整年日历 | cal -y |
-Y |
显示去年/今年/明年 | cal -Y |
-A <月数> |
显示后 N 个月 | cal -A 2 |
-B <月数> |
显示前 N 个月 | cal -B 1 |
示例
bash
# 显示当月日历
cal
# 显示上/当/下三月
cal -3
# 显示整年日历
cal -y
root@VM-12-14-ubuntu:/home/lesson2/mydir# cal
September 2025
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
16.find 指令
find
是 Linux 最强大的文件搜索 工具,支持 50+ 搜索条件,能对搜索结果执行操作。掌握 find
是 Linux 系统管理的核心技能。

基本语法
find [搜索路径] [表达式] [操作]
搜索条件
-
按名称搜索
bashfind /var/log -name "*.log" find . -iname "README*" find /etc -regex ".*/network/.*"
示例
bashroot@VM-12-14-ubuntu:~# find /home -name *.txt /home/lesson2/mydir/poet.txt /home/lesson2/mydir/hello.txt /home/lesson2/mydir/nature.txt
-
按类型搜索
bashfind ~ -type f # 文件 find /tmp -type d # 目录 find /dev -type l # 符号链接
-
按大小搜索
bashfind / -size +1G # 大于1GB find . -size -10M # 小于10MB find ~ -size 1024c # 精确1024字节
-
按时间搜索
bashfind /var/log -mtime -7 # 7天内修改过 find /home -atime +30 # 30天前访问过 find /etc -ctime 0 # 24小时内权限变更 find /tmp -mmin -10 # 10分钟内修改过
-
按权限/用户搜索
bashfind / -perm 644 # 精确权限匹配 find . -perm -u=x # 用户有执行权限 find /home -user wujiahao # 属于wujiahao的文件 find / -group www-data # 属于www-data组的文件
17.which 指令
which
命令是 Linux 中用于定位可执行文件路径 的核心工具,通过搜索 PATH
环境变量指定的目录列表,返回命令的第一个匹配结果。
基本语法
which [选项] 命令名
常用选项
选项 | 作用 | 示例 |
---|---|---|
-a |
显示所有匹配路径 | which -a java |
--skip-alias |
忽略命令别名 | which --skip-alias ls |
示例
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# which tree
/usr/bin/tree
18.whereis 指令
whereis
用于查找程序的可执行文件、源代码文件和帮助文档。
基本语法
whereis [选项] 文件名
常用选项
选项 | 作用 | 示例 |
---|---|---|
-b |
仅查找可执行文件 | whereis -b ls |
-m |
仅查找帮助文档 | whereis -m ls |
-s |
仅查找源代码文件 | whereis -s ls |
示例
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz
19.alias 指令
alias
是 Linux/Unix 系统中用于创建命令快捷方式的核心工具,它通过自定义缩写替代复杂命令,极大提升命令行效率。别名存储在 Shell 环境中,是系统管理员和开发者的必备技能。
基本语法
bash
# 创建别名
alias 别名='原始命令'
# 查看别名
alias
# 删除别名
unalias 别名
示例
bash
root@VM-12-14-ubuntu:/home/lesson2/mydir#
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
20.grep 指令
grep 用于在文件或文本流中搜索匹配特定模式(通常是正则表达式)的行,并将这些行输出到标准输出
基本语法
grep [选项] 模式 [文件]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-i |
忽略大小写 | grep -i "hello" file.txt |
-v |
反转匹配 | grep -v "hello" file.txt |
-w |
匹配整个单词 | grep -w "hello" file.txt |
-r |
递归搜索目录 | grep -r "hello" . |
-n |
显示行号 | grep -n "hello" file.txt |
-c |
统计匹配行数 | grep -c "hello" file.txt |
-l |
列出文件名 | grep -l "hello" *.txt |
-o |
仅输出匹配部分 | grep -o "hello" file.txt |
--color |
高亮显示匹配 | grep --color "hello" file.txt |
示例
bash
# 基本搜索
grep "hello" example.txt
# 忽略大小写
grep -i "hello" example.txt
# 递归搜索
grep -r "hello" .
# 显示行号
grep -n "hello" example.txt
# 统计匹配行数
grep -c "hello" example.txt
root@VM-12-14-ubuntu:/home/lesson2/mydir# grep -i sorry poet.txt
And sorry I could not travel both
root@VM-12-14-ubuntu:/home/lesson2/mydir# grep And poet.txt
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
And having perhaps the better claim,
And both that morning equally lay
And that has made all the differencsdfasdfk
grep指令还可以用来查询当前主机的某个进程的状态:
bash
wujiahao@VM-12-14-ubuntu:~$ ps ajx|grep "test.i"
826501 838872 838871 826501 pts/0 838871 S+ 1002 0:00 grep --color=auto test.i
21.top 指令
top
命令用于实时显示系统中资源占用最多的进程,并按照一定的排序规则动态更新显示内容。它可以帮助用户:
-
监控系统整体性能。
-
查找占用 CPU 或内存过多的进程。
-
管理和优化系统资源。
基本语法
top [选项]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-d |
指定更新间隔时间 | top -d 2 |
-n |
指定刷新次数 | top -n 5 |
-u |
仅显示指定用户的进程 | top -u username |
-p |
仅显示指定进程 | top -p 1234 |
-b |
批处理模式 | top -b -n 1 > top_output.txt |
示例
bash
# 启动 top 并实时监控
top
# 每 5 秒刷新一次
top -d 5
# 显示指定用户的进程
top -u username
# 将输出保存到文件
top -b -n 1 > top_output.txt
22.zip/unzip 指令
这里的zip/unzip指令和下面的tar指令,都是用于打包和压缩的指令。那么:
问题一:打包和压缩是什么?
问题二:为什么要打包压缩?
回答一:打包,就是把一系列相关的文件整合到一个文件中。如一个完整的应用程序应该包含依赖库等等其他非应用程序文件。压缩,就是将打包好的文件通过特定的压缩算法缩小体积得到的文件。
回答二:打包可以很好地防止哪些非应用程序文件的丢失,有助于用户"即下即用";压缩,最直接的用处就是缩小体积,方便文件的传输(尤其是网络中的传输)。
zip 命令
用于创建和更新 ZIP 格式的压缩文件。
基本语法
zip [选项] 压缩文件名 待压缩文件或目录
常用选项
选项 | 作用 | 示例 |
---|---|---|
-r |
递归压缩目录 | zip -r example.zip example_dir/ |
-q |
静默模式 | zip -q example.zip example.txt |
-d |
删除指定文件 | zip -d example.zip file.txt |
-u |
更新压缩文件 | zip -u example.zip example.txt |
-x |
排除文件 | zip -r example.zip example_dir/ -x exclude.txt |
-9 |
最高压缩级别 | zip -9 example.zip example.txt |
示例:
bash
#打包压缩hello文件
wujiahao@VM-12-14-ubuntu:~/hello$ tree
.
└── world
├── happy
└── happy.c
wujiahao@VM-12-14-ubuntu:~$ zip -r hello.zip hello
adding: hello/ (stored 0%)
adding: hello/world/ (stored 0%)
adding: hello/world/happy (deflated 86%)
adding: hello/world/happy.c (deflated 9%)
wujiahao@VM-12-14-ubuntu:~$ tree
.
├── gitcode
│ └── ReadMe
├── hello
│ └── world
│ ├── happy
│ └── happy.c
└── hello.zip
unzip 命令
用于解压 ZIP 格式的压缩文件。
基本语法
unzip [选项] 压缩文件名 [目标目录]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-d |
指定解压目录 | unzip example.zip -d /path/to/destination |
-o |
覆盖已存在文件 | unzip -o example.zip |
-n |
不覆盖已存在文件 | unzip -n example.zip |
-q |
静默模式 | unzip -q example.zip |
-l |
列出压缩文件内容 | unzip -l example.zip |
-x |
排除指定文件 | unzip example.zip -x exclude.txt |
示例:
bash
#先创建一个目录hello_test用于解压缩
wujiahao@VM-12-14-ubuntu:~$ mkdir hello_test
wujiahao@VM-12-14-ubuntu:~$ tree
.
├── gitcode
│ └── ReadMe
├── hello
│ └── world
│ ├── happy
│ └── happy.c
├── hello_test
└── hello.zip
#解压缩hello.zip到hello_test
wujiahao@VM-12-14-ubuntu:~$ unzip -d ./hello_test hello.zip
Archive: hello.zip
creating: ./hello_test/hello/
creating: ./hello_test/hello/world/
inflating: ./hello_test/hello/world/happy
inflating: ./hello_test/hello/world/happy.c
wujiahao@VM-12-14-ubuntu:~$ tree ./hello_test
./hello_test
└── hello
└── world
├── happy
└── happy.c
23.tar 指令
用于打包和压缩文件。
基本语法
tar [选项] [归档文件名] [文件或目录]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-c |
创建归档文件 | tar -cvf archive.tar file1 file2 |
-x |
提取归档文件 | tar -xvf archive.tar |
-z |
使用 gzip 压缩 | tar -czvf archive.tar.gz file1 file2 |
-j |
使用 bzip2 压缩 | tar -cjvf archive.tar.bz2 file1 file2 |
-J |
使用 xz 压缩 | tar -cJvf archive.tar.xz file1 file2 |
-v |
显示详细信息 | tar -cvf archive.tar file1 file2 |
-f |
指定归档文件名 | tar -cvf archive.tar file1 file2 |
-t |
列出归档内容 | tar -tvf archive.tar |
-C |
指定解压目录 | tar -xvf archive.tar -C /path/to/destination |
示例
bash
# 创建 gzip 压缩的归档文件
tar -czvf archive.tar.gz file1 file2 directory/
# 解压 gzip 压缩的归档文件
tar -xzvf archive.tar.gz -C /path/to/destination
# 列出归档内容
tar -tzvf archive.tar.gz
24.bc 指令
bc
(Bash Calculator) 是一个功能强大的任意精度数学计算工具,它支持基本的算术运算、浮点运算、逻辑运算,甚至可以定义函数和执行脚本。它的语法类似C语言,熟悉C语言的用户可以轻松上手。
基本语法
bc [选项] [文件]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-l |
加载数学库 | bc -l |
-q |
安静模式 | bc -q |
-i |
交互模式 | bc -i |
示例
bash
# 简单计算
echo "2 + 3" | bc
# 浮点运算
echo "scale=2; 10 / 3" | bc
# 使用数学库
echo "l(10)" | bc -l
# 交互模式
bc -l
高级用法:
定义变量与函数
bash
bc -l
define sq(x) {
return x * x;
}
sq(5)
执行脚本文件
将 bc
表达式写入脚本文件,然后通过 bc
执行
bash
# script.bc
define sq(x) {
return x * x;
}
sq(9)
bc -l script.bc
#输出81
常见数学函数(需要 -l
选项)
-
s(x)
:正弦函数(输入为弧度)。 -
c(x)
:余弦函数(输入为弧度)。 -
a(x)
:反正切函数。 -
l(x)
:自然对数函数。 -
e(x)
:指数函数 ex。 -
j(n, x)
:第一类贝塞尔函数。
注意事项
精度问题:浮点运算的精度由 scale 控制,默认值为 0(即整数运算)。如果需要浮点运算,需要显式设置 scale。
输入格式:bc 对输入格式要求严格,表达式必须正确书写,否则会报错。
性能问题:虽然 bc 支持任意精度计算,但计算大数或高精度浮点数时可能会比较慢
25.uname 指令
uname
是一个在 Unix 和 Linux 系统中常用的命令行工具,用于显示系统信息,包括操作系统名称、内核版本、主机名、硬件架构等。它是一个非常实用的工具,可以帮助用户快速了解系统的运行环境。
基本语法
uname [选项]
常用选项
选项 | 作用 | 示例 |
---|---|---|
-a |
显示所有系统信息 | uname -a |
-s |
显示操作系统名称 | uname -s |
-n |
显示主机名 | uname -n |
-r |
显示内核版本 | uname -r |
-v |
显示内核版本详细信息 | uname -v |
-m |
显示机器硬件架构 | uname -m |
-o |
显示操作系统类型 | uname -o |
示例
bash
# 显示所有系统信息
uname -a
# 显示内核版本
uname -r
# 显示硬件架构
uname -m
root@VM-12-14-ubuntu:/home/lesson2/mydir# uname -a
Linux VM-12-14-ubuntu 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
26.mv指令
语法:mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:mv命令是move的缩写,可以⽤来移动⽂件或者将⽂件改名(move (rename) files,经常⽤来备份⽂件或者⽬录
- 视mv命令中第⼆个参数类型的不同(是⽬标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其
移⾄⼀个新的⽬录中。
-
当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的⽬标⽂件名。
-
当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄⽬标⽬录中
常⽤选项:
• -f :force 强制的意思,如果⽬标⽂件已经存在,不会询问⽽直接覆盖
• -i :若⽬标⽂件 (destination) 已经存在时,就会询问是否覆盖!
示例:
bash
# 更改名称
[wujiahao@VM-12-14-ubuntu]$ touch myfile.txt
[wujiahao@VM-12-14-ubuntu]$ ll
total 0
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:56 myfile.txt
[wujiahao@VM-12-14-ubuntu]$ mv myfile.txt yourfile.txt
[wujiahao@VM-12-14-ubuntu]$ ll
total 0
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:56 yourfile.txt
# 如果当前路径存在同名⽂件,改名即覆盖
[wujiahao@VM-12-14-ubuntu]$ touch myfile.txt
[wujiahao@VM-12-14-ubuntu]$ ll
total 0
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:58 myfile.txt
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:57 yourfile.txt
[wujiahao@VM-12-14-ubuntu]$ mv yourfile.txt myfile.txt
[wujiahao@VM-12-14-ubuntu]$ ll
total 0
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:57 myfile.txt
# 如果当前路径存在同名⽂件,改名前可以添加i选项,让系统提出警告供⽤⼾做选择
[wujiahao@VM-12-14-ubuntu]$ touch yourfile.txt
[wujiahao@VM-12-14-ubuntu]$ ll
total 0
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:57 myfile.txt
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:59 yourfile.txt
[wujiahao@VM-12-14-ubuntu]$ mv -i yourfile.txt myfile.txt
mv: overwrite 'myfile.txt'? y
[wujiahao@VM-12-14-ubuntu]$ ll
total 0
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 15:59 myfile.txt
# mv整个⽬录
[wujiahao@VM-12-14-ubuntu]$ touch myfile.txt
[wujiahao@VM-12-14-ubuntu]$ mkdir temp
[wujiahao@VM-12-14-ubuntu]$ ll
total 4
-rw-rw-r-- 1 wujiahao wujiahao 0 Jan 11 17:56 myfile.txt
drwxrwxr-x 2 wujiahao wujiahao 4096 Jan 11 17:56 temp
[wujiahao@VM-12-14-ubuntu]$ mv myfile.txt temp
[wujiahao@VM-12-14-ubuntu]$ ls
temp
[wujiahao@VM-12-14-ubuntu]$ mv temp ../
[wujiahao@VM-12-14-ubuntu]$ ls
[wujiahao@VM-12-14-ubuntu]$ ls -d ../temp
../temp
27.管道与命令组合
在查日志时我们常用到more,less,head,tail等等指令。但有时我们需要查固定区间的日志怎么办呢?这就需要用到管道。
例如这里的
cat /var/log/syslog|head -510|tail -10|tac
我们就是在查看syslog文件中,501-510行的日志信息,并按从新到旧进行输出。我们可以先拿出原日志的1-510行,再拿到1-510行的后10行,这样就实现了日志信息的固定区间查找。管道的具体原理这里暂不作解释。
bash
root@VM-12-14-ubuntu:~# cat /var/log/syslog|head -510|tail -10|tac
Sep 7 21:31:59 localhost systemd[1]: Condition check resulted in Forward Password Requests to Plymouth Directory Watch being skipped.
Sep 7 21:31:59 localhost systemd[1]: Condition check resulted in Show Plymouth Boot Screen being skipped.
Sep 7 21:31:59 localhost systemd[1]: Condition check resulted in OpenVSwitch configuration for cleanup being skipped.
Sep 7 21:31:59 localhost systemd[1]: Starting Load Kernel Module ramoops...
Sep 7 21:31:59 localhost systemd[1]: Starting Load Kernel Module pstore_zone...
Sep 7 21:31:59 localhost systemd[1]: Starting Load Kernel Module pstore_blk...
Sep 7 21:31:59 localhost systemd[1]: Starting Load Kernel Module efi_pstore...
Sep 7 21:31:59 localhost systemd[1]: Starting Load Kernel Module chromeos_pstore...
Sep 7 21:31:59 localhost systemd[1]: Finished Create Volatile Files and Directories.
Sep 7 21:31:59 localhost systemd[1]: Reached target Local Encrypted Volumes.
三.Linux常见热键
一、终端 (Terminal) 核心热键
这些热键在几乎任何终端环境下都有效,是高效使用 Linux 的基石。
1. 进程控制热键
热键 | 功能描述 | 重要性 |
---|---|---|
Ctrl + C |
强行终止当前正在前台运行的进程。 | ⭐⭐⭐⭐⭐ |
Ctrl + Z |
暂停 当前前台进程,并将其放入后台。可用 fg 命令恢复。 |
⭐⭐⭐⭐ |
Ctrl + D |
(EOF) 发送"文件结束"信号。在命令行中代表退出当前 Shell (等同于输入 exit )。 |
⭐⭐⭐⭐⭐ |
Ctrl + \ |
强制终止当前进程(比 Ctrl + C 更强硬)。 |
⭐⭐ |
2. 命令行编辑热键
热键 | 功能描述 | 重要性 |
---|---|---|
Ctrl + A |
将光标移动到命令行的开头。 | ⭐⭐⭐⭐⭐ |
Ctrl + E |
将光标移动到命令行的末尾。 | ⭐⭐⭐⭐⭐ |
Ctrl + U |
删除从光标位置到行首的所有内容。 | ⭐⭐⭐⭐⭐ |
Ctrl + K |
删除从光标位置到行尾的所有内容。 | ⭐⭐⭐⭐⭐ |
Ctrl + W |
删除光标前的一个单词(以空格分隔)。 | ⭐⭐⭐⭐ |
Alt + Backspace |
同上,删除光标前的一个单词。 | ⭐⭐⭐⭐ |
Ctrl + Y |
粘贴 之前用 Ctrl+U/K/W 删除的内容。 |
⭐⭐⭐⭐ |
Ctrl + _ |
撤销上一次的编辑操作。 | ⭐⭐⭐ |
3. 历史与补全热键
热键 | 功能描述 | 重要性 |
---|---|---|
Ctrl + R |
反向搜索命令历史。输入关键词即可搜索。 | ⭐⭐⭐⭐⭐ |
↑ / ↓ |
上下翻阅命令历史记录。 | ⭐⭐⭐⭐⭐ |
Tab |
自动补全命令、文件名、路径等。按两次显示所有可选列表。 | ⭐⭐⭐⭐⭐ |
Alt + . |
使用上一条命令的最后一个参数。 | ⭐⭐⭐ |
4. 终端控制热键
热键 | 功能描述 | 重要性 |
---|---|---|
Ctrl + L |
清屏 。效果等同于输入 clear 命令。 |
⭐⭐⭐⭐ |
Ctrl + S |
暂停终端输出(屏幕冻结)。 | ⭐⭐ |
Ctrl + Q |
恢复 被 Ctrl+S 暂停的终端输出。 |
⭐⭐ |
Ctrl + D |
关闭当前的终端标签页或窗口(如果命令行为空)。 | ⭐⭐⭐ |
二、高级/技巧性热键
热键 | 功能描述 |
---|---|
Ctrl + Shift + C |
在终端中复制选中的文本。 |
Ctrl + Shift + V |
在终端中粘贴文本。 |
Ctrl + XX |
在命令行开头和当前光标位置之间快速跳转(连续按)。 |
Ctrl + T |
交换光标前的两个字符。 |
Ctrl + Shift + T |
重新打开刚刚关闭的终端标签页(浏览器中则是恢复标签页)。 |
补充:以上的指令不是必要全部记住!仅了解部分核心的指令即可,其他的日常使用会慢慢熟悉!