资讯动态

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

发布时间:2026/10/20 11:18:14 来源:尧图企业网站定制
目录引言2.1 网络下载 wget /curl/aria2cwget最简单适合普通下载curl通用 http 工具不仅能下载还能发网络请求aria2c多线程下载神器大文件强烈推荐2.2 打包和压缩 tar /zip/unzip /7ztar 命令zip /unzip和 Windows 互通7z高压缩率2.3 文档处理补充 wc /grep/sedwc 文本统计grep 文本搜索查找日志关键字sed 文本替换批量字符串替换2.4 符号链接和硬链接 ln符号链接软链接Windows 快捷方式硬链接 ln不带 - s2.5 后台任务和终端复用器 bg/fg/jobs/nohup/screen/tmux传统后台任务管理不被挂断的任务终端复用器 tmux screen2.6 系统资源查询任务管理器 top /htop进程中止 kill /pkill磁盘相关网络状态查看2.7 磁盘挂载 mount /umount什么是挂载2.8 环境变量export 设置环境变量PATH最重要环境变量LD_LIBRARY_PATH 动态库路径2.9 Bash 配置文件/.bashrc source2.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.zipcurl通用 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.ziparia2c多线程下载神器大文件强烈推荐类似 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。tarLinux 原生打包工具可以保留权限、所有者元信息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.zstzip /unzip和 Windows 互通#安装 sudo apt install zip unzip -y #压缩目录 -r递归 zip -r archive.zip dir/ #解压 unzip archive.zip7z高压缩率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.txtgrep 文本搜索查找日志关键字简要常用参数-i忽略大小写-n显示行号-r递归搜索-v反向过滤-C显示上下文如果你希望在文本中搜索某个模式patterngrep是一个非常强大的工具。命令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.logsed 文本替换批量字符串替换如果你希望在文本中替换某个字符串可以使用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逐段解析cpcopy 复制命令 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.baksed 自带备份参数在执行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特性删除软链接不会影响原文件删除原文件软链接失效变红断链可以跨磁盘、跨分区目录、文件都可以做软链接 实战场景磁盘满了把数据迁移到新盘创建软链接保持旧路径不变代码不需要修改路径。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特性重点多个文件名指向同一个磁盘 inode 数据删除其中一个数据不会消失全部删除才删除数据。不能跨分区不能给目录创建硬链接只支持普通文件。硬链接是不会消耗多倍存储空间的文件只会被储存一遍。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 21 │ │ └─ 挂到后台│ └────── 将 stderr 写入 stdout即 train.log└───────────────── 将 stdout 写入 train.log终端复用器 tmux screen1tmux 工具强烈推荐替代 nohupAI 训练首选比 nohup 好用会话独立断开 ssh 再重连可以恢复之前终端界面。#安装 sudo apt install tmux #新建会话并命名 tmux new -s train # 在tmux窗口里面随便跑程序 python train.py # 脱离会话后台继续跑快捷键CtrlB松开再按D #查看所有会话 tmux ls #重新接入会话 tmux attach -t train示例2screen 工具//没有的话首先安装 sudo apt install screen //创建会话 screen -S train // 脱离 CtrlA 松开 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 发行版都会自带的系统组件后者需要手动安装但是更为强大和好用。1top工具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 以内存占用排序。2htop工具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 自身也有专门的命令。1kill命令杀死指定 ID 进程使用kill 进程ID来杀死进程进程 ID 可以通过top或者htop查到。kill默认发送 SIGTERM 即请求中止进程如果进程已经完全卡死不响应可以发送 SIGKILL 来强制中止进程使用kill -9 进程ID#通过PID杀进程PID来自top/htop kill 12345 #强制杀死卡死进程 SIGKILL kill -9 123452pkill命令杀死指定正则表达式的进程使用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磁盘相关1dudisk usage统计目录 / 文件实际占用磁盘大小-s参数表示只显示汇总结果不每行列出所有对象的大小-h参数让容量自动使用 KB、MB、GB 等易读单位。du -sh的调用方式基本上是最常用的固定搭配# -s汇总-h人类可读单位KB/MB/GB du -sh /var/log # 查看一个目录的总大小 du -sh /var/log/* # 查看一个目录下所有对象的大小2df查看整个文件系统挂载分区剩余空间-h参数让容量自动使用 KB、MB、GB 等易读单位因此最常使用的是df -h3lsblk查看机器全部磁盘、分区和挂载关系找 U 盘新硬盘lsblk输出类似NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsda 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– 挂载位置4iotop工具查询磁盘 I/O有时候磁盘空间并没有满但系统仍然非常卡这可能是某个程序正在大量读写磁盘。此时可以使用iotop查看各进程的磁盘读写情况。//安装 sudo apt install iotop //运行 sudo iotop它的使用方式和top类似会实时显示各进程的磁盘读写速度。其中主要关注DISK READ– 磁盘读取速度DISK WRITE– 磁盘写入速度COMMAND– 对应的程序按方向键可以导航按 q 可以退出。网络状态查看1ifconfig命令查询网络接口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类似。2iftop工具查询网络连接流量如果想知道“到底是哪个远程地址正在占用网络”可以使用iftop。# 安装 sudo pat install iftop -y #运行 sudo iftopiftop会实时显示本机与其他地址之间的网络连接以及对应流量因此比较适合排查哪个服务器正在大量传输数据当前主要连接到了哪些地址哪条网络连接占用了最多带宽如果计算机有多个网卡可以指定网络接口sudo iftop -i eth0按 q 退出。3nload工具查询网卡总流量如果并不关心具体是哪个连接只想看看当前总下载和上传速度那么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 MOUNTPOINTSsda 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_DEVICES0,1,2,3这些命令都与环境变量有关。本节将简单介绍环境变量是什么并重点介绍两个非常常见的特殊环境变量PATH和LD_LIBRARY_PATH。export 设置环境变量普通 Shell 变量默认只属于当前 Shell。从当前 Shell 启动其他程序时这些程序并不会自动获得普通变量。如果希望变量能够传递给当前 Shell 启动的程序可以使用export将其导出为环境变量#导出环境变量 export MY_VARhello world #查看全部环境变量 env #临时只对这一条命令生效不改变全局环境 CUDA_VISIBLE_DEVICES0 python train.py简单理解普通变量主要供当前 Shell 自己使用。环境变量除了当前 Shell 可以使用还会传递给它启动的子进程。可以使用 env 查看当前环境中的所有环境变量环境变量的用法和普通 Shell 变量类似在上篇文章的 1.7节 已经讲过。不过有一个用法需要注意环境变量既可以设置到当前 Shell 的环境中重启 Shell 后失效并传递给之后启动的子进程也可以临时仅给某个命令使用。临时使用的语法为MY_ENVmy-env-value 要运行的命令例如在 Python 人工智能训练中极为常见的指定计算卡的用法就是临时设定的环境变量CUDA_VISIBLE_DEVICES0 python train.pyPATH最重要环境变量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 #千万不要直接PATHxxx会把系统命令全部搞丢追加写法 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_PATH2.9 Bash 配置文件/.bashrc source在前面的内容中我们已经接触过环境变量、命令别名等配置。不过如果只是在终端直接写 export、alias关闭终端时就会全部失效写进.bashrc每次打开终端会自动加载。.bashrc 是什么.bashrc位于家目录~/.bashrc它的文件名以.开头因此它属于隐藏文件可以使用ll别名或者ls -al查看它。.bashrc本质上就是一份 Shell 脚本。每次启动交互式 Bash 时Bash 通常会读取并执行其中的内容。因此平时可以直接在 Bash 中执行的很多配置命令也可以写进.bashrc让它们以后自动执行。#编辑 nano ~/.bashrc1长期保存环境变量例如前文介绍过如果希望将/opt/myapp/bin加入PATH直接在终端中执行时只对当前 Shell 生效。如果把这一行加入~/.bashrc位置一般不重要加到末尾即可#环境变量 export PATH/opt/myapp/bin:$PATH这样每次打开Bash时都会执行这条命令。2设置命令别名我们可以自己设定别名给一个比较长的命令取一个更短的名字例如#命令别名简化长命令 alias llls -alF alias cacconda 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 指定间隔秒数 dudisk usage 查看磁盘占用 -s 只输出总和 #每隔一秒查看一次output目录有多大 watch -n 1 du -sh ./outputtee同时输出到终端 保存文件重定向只输出文件屏幕看不到tee 两者兼顾不加-a的tee是覆盖先清空这个文件再写入新内容。#输出会直接进入文件不显示在终端 ls files.txt #输出到终端 将内容保存到文件 ls | tee file.txt #-a追加写入 ls | tee -a file.txtdiff比较文件差异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例如终端容易误触快捷键汇总在终端中有些快捷键可能会因为误触导致看着像“卡住” 或任务突然暂停快捷键现象恢复操作CtrlS终端卡住敲字符无输出按CtrlQ恢复输出CtrlZ程序暂停挂后台输入fg切回前台CtrlC中断正在运行程序通常无法恢复重新运行命令CtrlD直接退出当前 shell重新打开 / 重连 ssh结语本章没有去深挖 inode 原理、进程信号的内核源码而是优先解决我们平时用服务器最常遇到的痛点文件怎么高速下载、大文件怎么打包、长时间任务怎么防止断连中断、磁盘满了怎么排查、动态库和 PATH 环境变量该怎么配置。这些工具不是孤立的在实际工作中经常组合使用用aria2c下载数据集tar解压grep筛选日志tmux挂起训练htop和nload监控资源。学习建议不要死记硬背收藏本文遇到实际业务场景回来复制示例敲一遍。 后面可以自己学习系统服务 systemctl、rsync 同步、防火墙 ufw 等进阶工具。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑