news 2026/10/20 11:18:00

只学够用的Linux!零基础核心知识点(下)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
只学够用的Linux!零基础核心知识点(下)

目录

引言:

2.1 网络下载 wget /curl/aria2c

wget(最简单,适合普通下载)

curl(通用 http 工具,不仅能下载,还能发网络请求)

aria2c(多线程下载神器,大文件强烈推荐)

2.2 打包和压缩 tar /zip/unzip /7z

tar 命令

zip /unzip(和 Windows 互通)

7z(高压缩率)

2.3 文档处理补充 wc /grep/sed

wc 文本统计

grep 文本搜索,查找日志关键字

sed 文本替换,批量字符串替换

2.4 符号链接和硬链接 ln

符号链接(软链接,Windows 快捷方式)

硬链接 ln(不带 - s)

2.5 后台任务和终端复用器 bg/fg/jobs/nohup/screen/tmux

传统后台任务管理

不被挂断的任务

终端复用器 (tmux screen)

2.6 系统资源查询

任务管理器 top /htop

进程中止 kill /pkill

磁盘相关

网络状态查看

2.7 磁盘挂载 mount /umount

什么是挂载?

2.8 环境变量

export 设置环境变量

PATH(最重要环境变量)

LD_LIBRARY_PATH 动态库路径

2.9 Bash 配置文件~/.bashrc source

2.10 拾遗补缺

watch:定时重复执行命令

tee:同时输出到终端 + 保存文件

diff:比较文件差异

uname 查看系统内核信息

终端容易误触快捷键汇总

结语:


引言:

上篇文章讲了关于学习Linux时必须了解的核心基础知识,感兴趣的可以阅读:只学够用的Linux!零基础核心知识点(上)-CSDN博客,

这一章将继续介绍一些实际使用中非常常见的功能,不过它们是否需要学习因人而异。如果你认为完全用不到某个小节的内容,可以直接跳过。

另外,阅读第 1 章后读者应该已经对 Linux 初步熟悉了,因此从第 2 章开始,本教程的写作风格将会变得精简。


2.1 网络下载 wget /curl/aria2c

这一节将介绍三个工具wget、curl和aria2c,服务器环境没有浏览器,下载文件全部依靠命令行工具,其中wget最易用,aria2c最强大,三个工具熟悉其中一个就够用。

wget(最简单,适合普通下载)

# 安装 sudo apt install wget -y # 基础下载,保存为原文件名 wget https://example.com/file.zip # -O 指定保存文件名 wget -O myfile.zip https://example.com/file.zip # -P 指定下载保存到某个目录 wget -P /data/downloads https://example.com/file.zip # -c 断点续传,大文件网络中断后接着下 wget -c https://example.com/file.zip

curl(通用 http 工具,不仅能下载,还能发网络请求)

#安装 sudo apt install curl -y # -O大写,使用远程原文件名保存 curl -O https://example.com/file.zip # -o小写,自定义保存文件名 curl -o myfile.zip https://example.com/file.zip # -L 跟随网页重定向,绝大多数下载链接必须加这个参数 curl -L -O https://example.com/file.zip # 断点续传 curl -L -C - -O https://example.com/file.zip

aria2c(多线程下载神器,大文件强烈推荐)

类似 Windows IDM 下载器,支持多线程并发下载,默认自带断点续传

#安装 sudo apt install aria2 -y #基础下载 aria2c https://example.com/file.zip # -x -s 设置并发线程,16线程加速下载 aria2c -x 16 -s 16 https://example.com/file.zip # -o 指定文件名 aria2c -o myfile.zip https://example.com/file.zip # -d 指定保存目录 aria2c -d /data/downloads https://example.com/file.zip

小提示:AI 大模型权重文件体积巨大,优先使用aria2c。


2.2 打包和压缩 tar /zip/unzip /7z

本节将介绍以下工具:tar,zip,unzip,7z。

tar:Linux 原生打包工具,可以保留权限、所有者元信息;zip:跨 Windows 最通用;7z:压缩率最高。

tar是一个打包工具,但它可以帮忙调用gzip,zstd等压缩工具实现打包+压缩。同时tar可以将 Linux 文件系统里的对象元数据储存(例如所有者、所属用户组、对象权限等),因此在 Linux 里tar是最地道的打包方式。

tar 命令

这几个参数几乎永远都一起使用,因此可以直接背下来,它们的含义分别是:

  • c:创建归档
  • x:解包归档
  • v:显示正在处理的文件
  • z:使用 gzip 压缩/解压
  • f:后面紧跟归档文件名
# 仅打包(不压缩) tar -cvf archive.tar dir/ # 解包 tar -xvf archive.tar # 打包+gzip压缩 .tar.gz tar -cvzf archive.tar.gz dir/ # 解压tar.gz tar -xvzf archive.tar.gz

高级提速用法:

# 1. 多线程 gzip 压缩 # tar 默认调用的 gz 压缩器仅支持单线程压缩,pigz 压缩器支持多线程,速度更快 # 首先确保安装了 pigz 这个软件包 sudo apt install pigz -y # 然后压缩/解压时去除 -z 参数,使用 -I 指定压缩器为 pigz tar -I pigz -cvf archive.tar.gz dir/ tar -I pigz -xvf archive.tar.gz # 2. zstd 压缩 # zstd 是相比 gzip 更好的压缩算法,它更快,而且通常压缩率更高 # 首先确保安装了 zstd 这个软件包 sudo apt install zstd -y # 然后压缩/解压时去除 -z 参数,使用 --zstd 指定使用 zstd 算法 tar --zstd -cvf archive.tar.zst dir/ tar --zstd -xvf archive.tar.zst

zip /unzip(和 Windows 互通)

#安装 sudo apt install zip unzip -y #压缩目录 -r递归 zip -r archive.zip dir/ #解压 unzip archive.zip

7z(高压缩率)

sudo apt install p7zip-full -y #压缩 a代表add添加 7z a archive.7z dir/ #解压 x代表解压 7z x archive.7z

注意:7z 压缩速度慢,适合归档备份,不适合日常快速打包。


2.3 文档处理补充 wc /grep/sed

服务器排查日志、批量修改配置文件必用三件套。

wc 文本统计

如果你有一个纯文本,需要统计它的长度和行数信息,可以使用wc命令。

  • 命令:wc(意为 word count)
  • 用途:统计文本信息
  • 核心参数:
    • 位置参数:想统计文件的路径
    • -l:只统计行数
    • -w:只统计单词数
    • -c:只统计字节数
    • -m:只统计字符数

不加任何参数时,wc默认统计行数、单词数、字节数,输出格式如下:

[行数] [单词数] [字节数] [文件名]

# 默认输出:行数 单词数 字节数 文件名 wc test.txt # -l只统计行数 wc -l test.txt # -w统计单词 wc -w test.txt # -c统计字节 wc -c test.txt

grep 文本搜索,查找日志关键字

简要常用参数:-i忽略大小写,-n显示行号,-r递归搜索,-v反向过滤,-C显示上下文

如果你希望在文本中搜索某个模式(pattern),grep是一个非常强大的工具。

  • 命令:grep(意为 global regular expression print)
  • 用途:文本搜索
  • 核心参数:
    • 位置参数 1:搜索内容的正则表达式
    • 位置参数 2:想搜索文件的路径
    • -i:忽略大小写
    • -n:显示行号
    • -r:递归搜索目录
    • -v:显示不匹配的行
    • -w:只匹配完整单词
    • -F:按普通字符串匹配,不解析正则表达式
    • -C 行数:显示匹配行前后各 n 行

grep是一个强大的工具,因此参数非常多,上面我只挑选了最核心的参数,下面是一些示例。

#查找包含error的行 grep "error" access.log #显示匹配行+行号 grep -n "error" access.log #递归搜索整个logs目录所有文件 grep -r "error" logs/ #-v反向,过滤掉debug行,只看剩下内容 grep -v "debug" access.log #-C 2 打印匹配行,同时打印前后各2行上下文 grep -C 2 "error" access.log # 打印包含单词err的行,不会匹配error中的err grep -w "err" access.log #-F把搜索内容当普通字符串,不解析正则符号. * grep -F "192.168.1.100" access.log

sed 文本替换,批量字符串替换

如果你希望在文本中替换某个字符串,可以使用sed命令,其查找部分默认按照正则表达式解释。

  • 命令:sed(意为 stream editor)
  • 用途:文本编辑(常用于字符串替换)
  • 核心参数:
    • 位置参数 1:替换方式
    • 位置参数 2:想修改文件的路径
    • -i:直接修改源文件,保存后不可恢复!

指定替换方式的位置参数 1 的最常用的用法如下:

#输出到终端预览替换效果,不会修改原文件 sed 's/旧字符串/新字符串/g' test.txt #-i直接修改源文件,全部替换(g代表全局) sed -i 's/Before/After/g' test.txt #分隔符可以换成! #,避免路径斜杠冲突 sed -i 's!/opt/old!/opt/new!g' test.txt

-i参数代表直接修改源文件,操作前务必备份文件!

这里提一下备份文件操作,如何备份原始日志文件 test_log.txt :

cp test_log.txt test_log.txt.bak

逐段解析:

cp:copy 复制命令 test_log.txt:源文件,我们的原始日志, test_log.txt.bak:备份文件,后缀.bak是行业通用备份后缀,方便一眼识别是备份文件

如果想把备份文件还原回原日志文件:

cp test_log.txt.bak test_log.txt

这里可以拓展一下在备份的时候可以加上时间戳,防止多次备份覆盖旧备份:

cp test_log.txt test_log.txt.$(date +%Y%m%d_%H%M%S).bak

$(date +%Y%m%d_%H%M%S):命令替换,执行 date 命令,拼接年月日_时分秒,示例生成文件名就是:test_log.txt.20261017_203010.bak

sed 自带备份参数:

在执行sed替换,同时生成备份文件:

sed -i.bak 's/error/ERR/g' test_log.txt

注意:-i和.bak中间不能有空格,不能写成 -i .bak,会报错!


2.4 符号链接和硬链接 ln

符号链接(软链接,Windows 快捷方式)

符号链接相当于一个快捷方式,如果原始文件/目录是 a,那么创建一个符号链接 b 指向 a 后,通过 b 就可以直接访问到 a,如图所示:

语法:ln -s 原文件/目录 链接路径

#创建链接link.txt指向original.txt ln -s original.txt link.txt #创建家目录下project软链接指向/data/project ln -s /data/project ~/project

特性:

  1. 删除软链接不会影响原文件;删除原文件,软链接失效变红(断链)
  2. 可以跨磁盘、跨分区;目录、文件都可以做软链接 实战场景:磁盘满了,把数据迁移到新盘,创建软链接保持旧路径不变,代码不需要修改路径。
mv /mnt/disk_a/project_data /mnt/disk_b ln -s /mnt/disk_b/project_data /mnt/disk_a/project_data

硬链接ln(不带 - s)

硬链接和符号链接不同,它并不是一个“快捷方式”。创建硬链接后,两个文件名的地位完全相同,它们共同指向同一个 inode(文件数据节点),就仿佛两个 C 语言指针指向同一个对象。如图所示:

Linux 会记录一个 inode 被多少个文件名引用,这个数量称为链接数。创建上述硬链接后,链接数为 2;删除original.txt或hardlink.txt中任意一个后,链接数变成 1,文件数据仍然存在。只有两个文件名都被删除后,链接数才会归零,文件数据才会被删除。

通过ln命令也能创建硬链接,只有同文件系统的文件可以创建硬链接:ln 原对象 链接名

# 创建硬链接 link.txt 指向 original.txt ln original.txt link.txt

特性重点:

  1. 多个文件名指向同一个磁盘 inode 数据;删除其中一个,数据不会消失,全部删除才删除数据。
  2. 不能跨分区,不能给目录创建硬链接,只支持普通文件。
  3. 硬链接是不会消耗多倍存储空间的,文件只会被储存一遍。

2.5 后台任务和终端复用器 bg/fg/jobs/nohup/screen/tmux

在一个 Shell 中,运行一个命令后它就独占了整个 Shell,如果这个命令很耗时,那此时就无法再运行第二个命令了。这时候我们有多种解决方案,分别是 Linux 传统的前后台任务机制以及更为强大易用的终端复用器。此外,本节还会提供“SSH 断开后运行的任务被终止”的解决方案。

痛点场景:SSH 远程服务器跑训练任务,如果关闭终端 / 网络断开,普通进程直接被杀掉。

传统后台任务管理

(1)将前台任务挂到后台

假如运行了一个极为耗时的命令:

sleep 3600

此时希望将其切到后台,让开 Shell,那么可以按键盘快捷键 Ctrl + Z。此时 Shell 会弹出提醒,代表着命令已经被挂到后台,同时已经被暂停了:

如果我们希望在后台它继续运行,需要使用命令:

bg

此时 Shell 会弹出提醒,代表挂到后台的任务重新开始在后台运行了:

(2)直接新建后台任务

如果你已经知道一个命令很耗时,打算直接把它挂到后台,那么可以在命令的末尾添加&符号,代表直接新建后台任务:

sleep 1800 &

此时,执行完命令后它就直接进入后台并继续运行了,不会占用 Shell,同时会弹出提醒:

(3)将后台任务取回前台

若要将后台任务取回前台,可以使用命令:

fg

如果此时有多个后台任务,默认取回最近一个。也可以通过序号来指定,首先用命令列出所有后台任务:

jobs

会以列表打印出所有后台任务和任务的状态:

[1] Running sleep 3600 & [2]- Running sleep 1800 & [3]+ Stopped sleep 2400

然后使用%序号来指定要取回前台的后台任务:

fg %1 # 取回任务1 fg %2 # 取回任务2 fg %3 # 取回任务3

不被挂断的任务

对于普通任务,当 SSH 或者 Shell 关闭时,任务都会收到来自 Shell 的SIGHUP信号而被终止。如果希望任务在 SSH 或者 Shell 关闭时继续正常运行,就需要nohup命令了。

nohup:挂断 SSH 进程不会被杀

SIGHUP 信号:ssh 断开会发送这个信号终止程序,nohup 屏蔽该信号。

在命令前添加nohup即可创建不被挂断的任务:

nohup python train.py

如果希望直接创建不被挂断的后台任务,可以使用:

nohup python train.py &

如果希望把任务的输出导出保存为文件,可以使用下面的写法(最常见的组合):

nohup python train.py >train.log 2>&1 &

│ │ └─ 挂到后台

│ └────── 将 stderr 写入 stdout(即 train.log)

└───────────────── 将 stdout 写入 train.log

终端复用器 (tmux screen)

(1)tmux 工具(强烈推荐,替代 nohup,AI 训练首选)

比 nohup 好用,会话独立,断开 ssh 再重连可以恢复之前终端界面。

#安装 sudo apt install tmux #新建会话并命名 tmux new -s train # 在tmux窗口里面随便跑程序 python train.py # 脱离会话(后台继续跑)快捷键:Ctrl+B,松开,再按D #查看所有会话 tmux ls #重新接入会话 tmux attach -t train

示例:

(2)screen 工具

//没有的话首先安装 sudo apt install screen //创建会话 screen -S train // 脱离 Ctrl+A 松开 D // 查看已有的会话 screen -ls // 指定会话名重新进入 screen -r train

重要提醒:远程跑长时间任务优先tmux,不建议裸用 nohup。


2.6 系统资源查询

Windows 有任务管理器来查看系统资源的使用情况,相同的,Linux 也有丰富的工具来查询和管理系统资源,本节将会介绍以下工具:

  • 任务管理器(CPU、内存和进程):top,htop
  • 进程中止:kill,pkill
  • 磁盘状态查看:du,df,lsblk,iotop
  • 网络状态查看:ifconfig,iftop,nload

任务管理器 top /htop

本节将会介绍查看管理 CPU、内存和进程的任务管理器top和htop,前者是绝大多数 Linux 发行版都会自带的系统组件,后者需要手动安装,但是更为强大和好用。

(1)top工具(table of processes)

使用top命令即可打开任务管理器,打开后用 q 或 Ctrl + C 退出。top会占满终端并自动刷新,界面如下:

首先看到顶部的五行信息,理解如下:

top - 16:30:14 up 25 min, 2 users, load average: 0.15, 0.52, 0.59 当前时间;系统已运行时间;当前登录用户数;过去 1、5、15 分钟的平均负载 Tasks: 299 total, 1 running, 297 sleeping, 1 stopped, 0 zombie 进程总数;正在运行的进程数;休眠进程数;已停止进程数;僵尸进程数 %Cpu(s): 4.0 us, 8.0 sy, 0.0 ni, 88.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st 用户进程占用;内核占用;调整过 nice 的进程占用;CPU 空闲;等待 I/O;硬件中断;软件中断;被虚拟机宿主机占用 MiB Mem : 3863.4 total, 601.0 free, 1190.3 used, 2308.9 buff/cache 物理内存总量;空闲内存;已使用内存;缓冲区和缓存 MiB Swap: 3867.0 total, 3867.0 free, 0.0 used, 2673.1 avail Mem Swap 总量;Swap 空闲;Swap 已使用;预计可用物理内存

除了显示当前系统的状态外,top还能显示和管理进程,这就是下面的表格显示的内容。首先看到表头,每一列的含义是:

  • PID – 进程编号
  • USER – 启动该进程的用户
  • PR – 进程调度优先级,数值越小优先级越高
  • NI – 进程 nice 值,数值越小优先级越高
  • VIRT – 虚拟内存总量
  • RES – 实际驻留在物理内存中的大小
  • SHR – 共享内存大小
  • S – 进程状态:R 运行,S 可中断睡眠,D 不可中断睡眠,T 已暂停,Z 僵尸进程,I 空闲内核线程
  • %CPU – CPU 使用率
  • %MEM – 物理内存使用率
  • TIME+ – 进程累计占用 CPU 的时间
  • COMMAND – 进程对应的命令或程序名

然后我们就可以用 ↑ ↓ 和 PGUP PGDN,来滚动和翻页整个表格了,除此之外,还可以输出大写 P 以 CPU 占用排序,输入大写 M 以内存占用排序。

(2)htop工具

htop相当于加强版的top,它的界面更美观易用,同时功能也更强大,一般来说我更喜欢用htop。首先安装它:sudo apt install htop -y

使用htop命令即可打开任务管理器,打开后用 q 或 Ctrl + C 退出。htop会占满终端并自动刷新,界面如下:

可以发现,htop最明显的区别就是界面更美观了,还有一个区别就是htop不仅可以纯键盘操作,还可以用鼠标操作。例如可以用滚轮来滚动进程列表,点击表头可以切换排序列以及排序方向,点击下方的按钮可以选择功能。

因此htop的使用难度就很低了,这里简单介绍一下两个常用的功能:

  • 搜索:按 F3 或者鼠标点击 Search 按钮,接着就可以用关键字搜索进程了。
  • 中止:高亮选中一行进程后按 F9 或者鼠标点击 Kill 按钮,会进入信号发送界面,选择 15 SIGTERM 发送来请求中止进程,或者发送 9 SIGKILL 来强制中止进程。

进程中止 kill /pkill

上一节介绍的htop已经有中止进程的功能了,不过 Linux 自身也有专门的命令。

(1)kill命令:杀死指定 ID 进程

使用kill 进程ID来杀死进程,进程 ID 可以通过top或者htop查到。

kill默认发送 SIGTERM 即请求中止进程,如果进程已经完全卡死不响应,可以发送 SIGKILL 来强制中止进程,使用kill -9 进程ID

#通过PID杀进程,PID来自top/htop kill 12345 #强制杀死卡死进程 SIGKILL kill -9 12345

(2)pkill命令:杀死指定正则表达式的进程

使用pkill 正则表达式来杀死进程,所有进程名匹配上正则表达式的进程都会被一起杀死,因此可能一次杀多个。

pkill默认匹配进程名,如果想匹配完整的启动命令,可以使用-f参数,例如:

pkill -f "python.*train.py"

同样,pkill默认发送 SIGTERM 即请求中止进程,如果进程已经完全卡死不响应,可以发送 SIGKILL 来强制中止进程,使用pkill -9 正则表达式

#pkill按进程名字匹配批量杀进程 pkill -f "python train.py" pkill -9 -f "python train.py"

磁盘相关

(1)du(disk usage):统计目录 / 文件实际占用磁盘大小

-s参数表示只显示汇总结果,不每行列出所有对象的大小,-h参数让容量自动使用 KB、MB、GB 等易读单位。du -sh的调用方式基本上是最常用的固定搭配:

# -s汇总,-h人类可读单位KB/MB/GB du -sh /var/log # 查看一个目录的总大小 du -sh /var/log/* # 查看一个目录下所有对象的大小

(2)df:查看整个文件系统挂载分区剩余空间

-h参数让容量自动使用 KB、MB、GB 等易读单位,因此最常使用的是:

df -h

(3)lsblk:查看机器全部磁盘、分区和挂载关系(找 U 盘新硬盘)

lsblk

输出类似:

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS

sda 8:0 0 500G 0 disk

├─sda1 8:1 0 1G 0 part /boot

└─sda2 8:2 0 499G 0 part /

sdb 8:16 0 2T 0 disk

└─sdb1 8:17 0 2T 0 part /data

示例:

其中重要的列有:

  • NAME– 设备名称
  • SIZE– 容量
  • TYPE– 类型,例如disk为整块磁盘,part为分区
  • MOUNTPOINTS– 挂载位置

(4)iotop工具:查询磁盘 I/O

有时候磁盘空间并没有满,但系统仍然非常卡,这可能是某个程序正在大量读写磁盘。此时可以使用iotop查看各进程的磁盘读写情况。

//安装 sudo apt install iotop //运行 sudo iotop

它的使用方式和top类似,会实时显示各进程的磁盘读写速度。其中主要关注:

  • DISK READ– 磁盘读取速度
  • DISK WRITE– 磁盘写入速度
  • COMMAND– 对应的程序

按方向键可以导航,按 q 可以退出。

网络状态查看

(1)ifconfig命令:查询网络接口

ifconfig可以查看计算机的网络接口、IP 地址以及网络流量等信息。

#ifconfig查看网卡ip(旧工具) sudo apt install net-tools #运行 ifconfig

示例:

现代系统替代 ifconfig 命令:ip addr

这里最常关注的是:

  • eth0– 网络接口名称(一般物理网口以eth,ens,eno,enp开头)
  • inet– IPv4 地址和子网掩码
  • inet6– IPv6 地址和前缀长度
  • RX– 接收的数据包累计数量和累计大小
  • TX– 发送的数据包累计数量和累计大小

另外,ifconfig是比较经典的工具,现在较新的 Linux 系统主要使用ip命令代替它,使用ip addr命令的效果和ifconfig类似。

(2)iftop工具:查询网络连接流量

如果想知道“到底是哪个远程地址正在占用网络”,可以使用iftop。

# 安装 sudo pat install iftop -y #运行 sudo iftop

iftop会实时显示本机与其他地址之间的网络连接以及对应流量,因此比较适合排查:

  • 哪个服务器正在大量传输数据
  • 当前主要连接到了哪些地址
  • 哪条网络连接占用了最多带宽

如果计算机有多个网卡,可以指定网络接口:

sudo iftop -i eth0

按 q 退出。

(3)nload工具:查询网卡总流量

如果并不关心具体是哪个连接,只想看看当前总下载和上传速度,那么nload会更加直观。

#安装 sudo apt install nload -y #运行 nload

界面中会分别显示:

Incoming

当前下载速度

Outgoing

当前上传速度

如果计算机存在多个网络接口,可以使用 ← 和 → 切换。按 q 退出。


2.7 磁盘挂载 mount /umount

什么是挂载?

对于 Windows 用户来说,挂载是很陌生的概念。因为 Windows 如果接入了新磁盘,格式化后就直接显示为新盘符了(例如 E:\ 盘)。

Linux 没有 Windows 盘符概念;磁盘必须挂载到某个目录节点才能访问。 桌面版 Ubuntu 插入 U 盘自动挂载;服务器版不会自动挂载,需要手动操作。

看到下图示例,假如一台计算机有两块磁盘分别为 A 和 B,我们可以让 A 磁盘储存根目录,称为系统盘,可以让 B 磁盘仅储存用户的用户文件,成为用户盘。那么,就可以将 B 磁盘的文件系统挂载到/home目录下,这样,所有储存在/home目录里面的内容,实际写入的磁盘是 B,而其他的目录均写入磁盘 A。

本节主要讲可移动设备(例如U盘、移动硬盘)的挂载和卸载。

挂载磁盘

插入设备后,可以先使用前面介绍过的lsblk查看,例如:

NAME SIZE TYPE MOUNTPOINTS

sda 500G disk

└─sda1 500G part /

sdb 64G disk

└─sdb1 64G part

这里/dev/sda1已经挂载到根目录/,而新插入的/dev/sdb1的MOUNTPOINTS为空,说明它还没有挂载。

注意,通常需要挂载的是磁盘中的分区,例如/dev/sdb1,而不是整块磁盘/dev/sdb。

#1.先lsblk确认设备,例如新U盘分区 /dev/sdb1 #2.创建挂载点空目录 sudo mkdir -p /mnt/usb #3.挂载分区到目录,使用mount sudo mount /dev/sdb1 /mnt/usb #4.用完卸载!!拔出U盘前必须umount,防止数据损坏 #注意命令是umount,不是unmount!! sudo umount /mnt/usb

踩坑提示:卸载提示target is busy,说明有终端或者程序还在进入这个挂载目录,切到别的目录再卸载。


2.8 环境变量

在 Linux 的安装教程、软件配置和开发环境中,经常可以看到下面这样的命令:

export PATH="/opt/myapp/bin:$PATH" export LD_LIBRARY_PATH="/opt/myapp/lib:$LD_LIBRARY_PATH" export CUDA_VISIBLE_DEVICES=0,1,2,3

这些命令都与环境变量有关。本节将简单介绍环境变量是什么,并重点介绍两个非常常见的特殊环境变量:PATH和LD_LIBRARY_PATH。

export 设置环境变量

普通 Shell 变量默认只属于当前 Shell。从当前 Shell 启动其他程序时,这些程序并不会自动获得普通变量。

如果希望变量能够传递给当前 Shell 启动的程序,可以使用export将其导出为环境变量:

#导出环境变量 export MY_VAR="hello world" #查看全部环境变量 env #临时只对这一条命令生效,不改变全局环境 CUDA_VISIBLE_DEVICES=0 python train.py

简单理解:

  • 普通变量:主要供当前 Shell 自己使用。
  • 环境变量:除了当前 Shell 可以使用,还会传递给它启动的子进程。

可以使用 env 查看当前环境中的所有环境变量

环境变量的用法和普通 Shell 变量类似,在上篇文章的 1.7节 已经讲过。不过有一个用法需要注意,环境变量既可以设置到当前 Shell 的环境中(重启 Shell 后失效),并传递给之后启动的子进程,也可以临时仅给某个命令使用。临时使用的语法为:

MY_ENV=my-env-value 要运行的命令

例如在 Python 人工智能训练中极为常见的指定计算卡的用法,就是临时设定的环境变量:

CUDA_VISIBLE_DEVICES=0 python train.py

PATH(最重要环境变量)

PATH是 Linux 中最重要的环境变量之一,它决定了 Shell去哪些目录寻找命令。

使用echo $PATH查看当前的PATH,将会显示一个使用冒号:分隔的目录列表

如果要新增一个 PATH 目录,可以用下面的命令。请注意一定不要覆盖PATH,而是用冒号拼接,因为如果直接覆盖PATH会导致其他大多数命令 Shell 全部都找不到了。

可以使用which查看某个命令实际对应的位置:which ls。一般来说会输出:/usr/bin/ls。即 Shell 通过遍历 PATH 后,在/usr/bin/ls找到了ls命令。

例如:

#查看PATH echo $PATH #千万不要直接PATH=xxx会把系统命令全部搞丢!!!追加写法 export PATH="/opt/myapp/bin:$PATH" #which查看命令实际程序位置 which ls

另外,PATH中越靠前的目录优先级越高。如果不同目录中存在同名命令,Shell 通常会优先找到排在前面的那个。

LD_LIBRARY_PATH 动态库路径

很多 Linux 程序并不是把所有功能都包含在自己的可执行文件中,而是运行时还需要加载一些动态链接库,当程序运行时需要找到这些库文件,而这类动态链接库文件通常以.so 结尾动态库,这个变量告诉系统去哪里找库文件,例如:

libexample.so libexample.so.1

如果说上一节的PATH是告诉 Shell 到哪些目录寻找可执行程序,那么LD_LIBRARY_PATH就是告诉动态链接器到哪些额外目录寻找动态链接库。

#正确设置 LD_LIBRARY_PATH 后,程序就可能正常找到对应的库。 export LD_LIBRARY_PATH="/opt/myapp/lib:$LD_LIBRARY_PATH" #ldd查看程序依赖哪些动态库 ldd /usr/bin/ls

与PATH类似,LD_LIBRARY_PATH中也可以包含多个目录,使用:分隔,并且靠前的目录具有更高的查找优先级:

export LD_LIBRARY_PATH="/path/a:/path/b:$LD_LIBRARY_PATH"

2.9 Bash 配置文件~/.bashrc source

在前面的内容中,我们已经接触过环境变量、命令别名等配置。不过如果只是在终端直接写 export、alias,关闭终端时就会全部失效;写进.bashrc每次打开终端会自动加载。

.bashrc 是什么?

.bashrc位于家目录,~/.bashrc,它的文件名以.开头,因此它属于隐藏文件,可以使用ll别名或者ls -al查看它。

.bashrc本质上就是一份 Shell 脚本。每次启动交互式 Bash 时,Bash 通常会读取并执行其中的内容。因此,平时可以直接在 Bash 中执行的很多配置命令,也可以写进.bashrc,让它们以后自动执行。

#编辑 nano ~/.bashrc

(1)长期保存环境变量

例如前文介绍过,如果希望将/opt/myapp/bin加入PATH,直接在终端中执行时,只对当前 Shell 生效。如果把这一行加入~/.bashrc(位置一般不重要,加到末尾即可):

#环境变量 export PATH="/opt/myapp/bin:$PATH"

这样每次打开Bash时都会执行这条命令。

(2)设置命令别名

我们可以自己设定别名,给一个比较长的命令取一个更短的名字,例如:

#命令别名,简化长命令 alias ll='ls -alF' alias cac='conda activate'

如果直接在Shell中执行 alias 同样只是临时生效,写入 .bashrc 后,每次打开Bash 都会自动创建这些别名。

不过一般建议.bashrc主要用于 Shell 配置,不要在里面加入耗时很长、需要用户输入或者会产生大量输出的命令,否则每次打开 Shell 都会受到影响。

(3)新加载 .bashrc

修改.bashrc后,新打开的 Bash 通常会读取新的配置,因此最简单的方法是关闭并重新打开终端。如果不想重新打开终端,也可以让当前 Bash 立即重新执行.bashrc:

#完整形式 source ~/.bashrc #简写等同 . ~/.bashrc

小知识:source venv/bin/activate本质就是执行脚本修改当前 shell 环境。


2.10 拾遗补缺

补充几个非常实用、但内容较少的命令。

watch:定时重复执行命令

watch可以每隔一段时间(默认 2 秒)重复执行某个命令,并不断刷新终端中的显示结果,需要退出时按 Ctrl + C。示例如下:

#每2秒刷新一次看GPU状态 watch nvidia-smi #-n 指定间隔秒数 du=disk usage 查看磁盘占用 -s 只输出总和 #每隔一秒查看一次output目录有多大 watch -n 1 du -sh ./output

tee:同时输出到终端 + 保存文件

>重定向只输出文件,屏幕看不到;tee 两者兼顾

不加-a的tee是覆盖:先清空这个文件,再写入新内容。

#输出会直接进入文件,不显示在终端 ls > files.txt #输出到终端 + 将内容保存到文件 ls | tee file.txt #-a追加写入 ls | tee -a file.txt

diff:比较文件差异

diff可以比较两个文件的内容差异:

#普通对比 diff old.txt new.txt

如果两个文件完全相同,通常不会输出任何内容;如果存在差异,则会显示发生变化的位置和内容。

更常见的统一格式:

#-u统一格式,可读性更高,+新增,-删除 diff -u old.txt new.txt

输出中:

  • 以-开头的内容表示旧文件中的内容
  • 以+开头的内容表示新文件中的内容

例如:

-Hello +Hello World

表示原来的Hello被修改成了Hello World。

uname 查看系统内核信息

直接执行uname一般会输出Linux,即内核名称。通常我们使用-a参数打印出完整信息,这样更实用,执行uname -a后,我手上的 Ubuntu 24.04.4 LTS 输出以下内容:

#打印完整内核硬件信息 uname -a #查看Ubuntu发行版本号 cat /etc/os-release

例如:

终端容易误触快捷键汇总

在终端中,有些快捷键可能会因为误触导致看着像“卡住” 或任务突然暂停:

快捷键现象恢复操作
Ctrl+S终端卡住,敲字符无输出按Ctrl+Q恢复输出
Ctrl+Z程序暂停挂后台输入fg切回前台
Ctrl+C中断正在运行程序,通常无法恢复重新运行命令
Ctrl+D直接退出当前 shell重新打开 / 重连 ssh

结语:

本章没有去深挖 inode 原理、进程信号的内核源码,而是优先解决我们平时用服务器最常遇到的痛点:文件怎么高速下载、大文件怎么打包、长时间任务怎么防止断连中断、磁盘满了怎么排查、动态库和 PATH 环境变量该怎么配置。这些工具不是孤立的,在实际工作中经常组合使用:用aria2c下载数据集,tar解压,grep筛选日志,tmux挂起训练,htop和nload监控资源。

学习建议:不要死记硬背,收藏本文,遇到实际业务场景回来复制示例敲一遍。 后面可以自己学习系统服务 systemctl、rsync 同步、防火墙 ufw 等进阶工具。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 11:17:35

端侧AI、具身智能与城市NOA:2026智能落地三大主线

1. 今天科技圈在聊什么:五大热点,一眼看透作为一个常年泡在科技资讯里的人,每天早上第一件事就是先把当天的科技头条过一遍。2026年10月4日这个日子有点意思,不是单纯的“发布会扎堆日”,而是几条主线同时走到了关键节…

作者头像 李华
网站建设 2026/10/20 11:17:17

基于DeepSeek构建本地知识库:RAG原理、选型与实操避坑指南

简介:这份PDF文档面向希望搭建个人或企业级大模型本地知识库的技术人员与AI应用开发者,系统讲解以DeepSeek为推理核心的知识库构建路径。内容从检索增强生成(RAG)原理切入,剖析上下文窗口“军备竞赛”背景下RAG与长窗口…

作者头像 李华
网站建设 2026/10/20 11:16:51

单台NTP时钟服务器能带多少台NTP客户端?大规模授时容量测算指南

关键词:时间校准同步服务器 ntp卫星校时器 gps同步时钟服务器 ntp服务器厂商在安防监控、智慧园区、工业物联网项目落地过程中,很多集成商都会遇到一个很隐蔽的坑:实验室测试时NTP时钟服务器工作稳定,一旦大规模上线摄像头、传…

作者头像 李华
网站建设 2026/10/20 11:12:26

消息队列的重复消费与顺序

消息队列的重复消费与顺序 订单消息明明只发了一条,订单却被创建了两次。日志里 MQ 没报错,生产端也没重发代码,重复是哪来的?另一个案子,消息按顺序发的,消费端却先处理了退款再处理支付。这两个问题是消息…

作者头像 李华