目前折腾最多的,是在Ubuntu(Linux)系统里用命令进行下载,更新和安装,屡屡遇到各种问题。虽然有AI伴身,但搞清楚相关命令用途和含义还是有用的。我个人的学习总结如下:
理解Ubuntu的下载类型
可以分为三大类:
- 3.其他资源,主要命令:curl,git clone,wget
一个概念:依赖关系(Dependencies)
在 Linux 里,依赖关系指的是:
一个软件正常运行,需要依靠其他软件、组件或系统资源的关系。
简单来说:
软件不是独立存在的,它需要“搭配其他东西”才能工作。
举个生活例子
一辆汽车要正常行驶,需要:
汽车依赖这些部件。
如果缺少其中关键部件,汽车就无法正常运行。
Linux 软件也是一样。
Linux 软件中的依赖
比如一个应用程序可能依赖:
这些被依赖的东西,就是它的Dependencies(依赖)。
为什么 Linux 重视依赖管理?
因为 Linux 上的软件通常由很多组件组合而成。
安装一个软件时,系统需要知道:
所以 Linux 提供了软件包管理工具来自动处理这些关系。
依赖关系带来的常见问题
如果依赖缺失或版本不匹配,可能出现:
例如,一个程序需要新版组件,但系统只有旧版本,就可能产生问题。
一句话总结
Linux 的依赖关系,就是软件之间相互需要、相互配合的关系。一个软件能否正常运行,不仅取决于它自己,还取决于它所依赖的其他组件是否完整和匹配。
📦 第一类:系统级包管理(Ubuntu 核心)
这类命令管理操作系统层面的软件包,影响整个系统环境。
🔹 apt(Advanced Package Tool)
apt 是 Ubuntu 最核心、最常用的包管理工具,相当于手机里的"应用商店"。
| |
|---|
| |
| 配置文件在 /etc/apt/sources.list(Ubuntu 24.04 起在 /etc/apt/sources.list.d/ubuntu.sources) |
| |
| |
常用命令示例:
# 更新软件包列表(从仓库拉取最新索引)sudo apt update# 升级所有已安装的软件包sudo apt upgrade# 安装软件(如安装 Nginx Web 服务器)sudo apt install nginx# 安装多个软件sudo apt install vim git htop# 卸载软件(保留配置文件)sudo apt remove nginx# 彻底卸载(删除所有配置文件)sudo apt purge nginx# 搜索软件包apt search python# 查看软件包详细信息apt show nginx
配置国内源(加速):
编辑 /etc/apt/sources.list,将 archive.ubuntu.com 替换为国内镜像地址。
🔹 dpkg -i(Debian 包底层安装)
dpkg 是 apt 的底层引擎,用于直接安装本地的 .deb 软件包文件。Debian包(通常以 .deb 结尾)是Debian及其衍生系统(如Ubuntu、Linux Mint 等)使用的软件安装包格式。有些类似Windows系统下.exe 格式的安装包(当然并不完全相同,只是类比用来理解)。
| |
|---|
| |
| 无默认源,你从官网或第三方网站下载的 .deb 文件路径 |
| ❌ 否。如果提示缺依赖,需要手动用 sudo apt install -f 修复 |
| ⭐⭐⭐ 较常用,适合安装官网直供的软件(如 Chrome、VS Code) |
常用命令示例:
# 安装本地 .deb 包sudo dpkg -i google-chrome-stable.deb# 如果提示依赖缺失,执行修复sudo apt install -f# 查看已安装的包dpkg -l | grep chrome# 卸载已安装的包sudo dpkg -r google-chrome-stable# 查看 .deb 包的文件列表dpkg -c google-chrome-stable.deb
典型场景:
🐍 第二类:编程语言级包管理
这类命令管理特定编程语言的第三方库和依赖,不同语言各有自己的生态。目前,跟AI相关的编程语言有Python和Node.js
Python 就像一把“万能工具箱”。
它最擅长的是让计算机帮人处理复杂的问题,比如:
可以把 Python 理解成:
一个聪明的助手,你告诉它规则,它可以帮你完成很多复杂的脑力工作。
比如:
它的特点是:
Node.js 就像一个“让电脑成为服务员的系统”。
以前,网页上的很多功能只能在用户自己的电脑浏览器里运行。
Node.js 出现后,可以让电脑在后台一直工作,负责:
可以把 Node.js 理解成:
一个高效的后台管家,负责让网站、应用和用户之间顺畅沟通。
比如:
它的特点是:
Python 更像 AI 的大脑,Node.js 更像 AI 产品的服务窗口
🔹 pip(Python 包管理)
pip 是 Python 的官方包管理工具,用于安装 Python 第三方库。
| |
|---|
| |
| PyPI(Python Package Index):https://pypi.org/simple/ |
| ✅ 是。会自动下载并安装 Python 库的依赖项 |
| |
常用命令示例:
# 安装 Python 库pip install numpy# 安装指定版本pip install django==4.2# 卸载库pip uninstall numpy# 查看已安装的库pip list# 导出当前环境所有依赖(用于项目迁移)pip freeze > requirements.txt# 批量安装依赖pip install -r requirements.txt
虚拟环境最佳实践(推荐):
# 创建虚拟环境(隔离项目依赖)python3 -m venv myenv# 激活虚拟环境source myenv/bin/activate# 在虚拟环境中安装库(不影响系统 Python)pip install flask
🔹 npm(Node.js 包管理)
npm 是 Node.js 的官方包管理工具,是全球最大的开源库生态系统之一。
| |
|---|
| |
| npm Registry:https://registry.npmjs.org/ |
| |
| ⭐⭐⭐⭐⭐ 极常用,JavaScript/前端开发者必备 |
常用命令示例:
# 初始化项目(生成 package.json)npm init -y# 安装包(生产依赖)npm install express# 安装包(开发依赖,如测试工具)npm install jest --save-dev# 全局安装 CLI 工具(如 Vite)npm install -g vite# 卸载包npm uninstall express# 查看已安装的包npm list# 更新所有包npm update# 运行 package.json 中定义的脚本npm run dev
🌐 第三类:从网络下载资源的命令
这类命令的本质是从指定的 URL 获取文件或数据,不涉及包管理和依赖解决。
🔹curl
curl 是一个功能强大的网络数据传输工具,支持 HTTP、HTTPS、FTP 等多种协议。
| |
|---|
| 下载文件、测试 API、发送 HTTP 请求、调试接口 |
| |
| |
| |
常用命令示例:
# 下载文件并保存为远程文件名(-O 大写)curl -O https://example.com/file.zip# 下载文件并保存为自定义名称(-o 小写)curl -o myfile.zip https://example.com/file.zip# 发送 GET 请求并显示响应内容curl https://api.github.com/users/octocat# 发送 POST 请求(JSON 格式)curl -X POST https://api.example.com/data \ -H ”Content-Type: application/json” \ -d '{”name”:”test”,”value”:123}'# 查看 HTTP 响应头信息(-I)curl -I https://www.baidu.com# 跟随重定向(-L)curl -L -O https://github.com/user/repo/releases/latest/download/app.zip# 显示下载进度curl -# -O https://example.com/largefile.iso# 从文件列表批量下载curl -K urls.txt# 测试网站响应时间curl -o /dev/null -s -w 'HTTP: %{http_code} 时间: %{time_total}s\n' https://example.com
典型场景:
- 测试 API 接口:开发调试 RESTful API
🔹 git clone
git clone 是 Git 版本控制系统的核心命令,用于从远程仓库克隆完整的代码库到本地。
| |
|---|
| 从 Git 仓库克隆代码到本地,保留完整的版本历史 |
| 无固定源,由用户指定 Git 仓库 URL(如 GitHub/GitLab/Gitee) |
| |
| |
常用命令示例:
# 从 GitHub 克隆 Linux 内核源码git clone https://github.com/torvalds/linux.git# 克隆指定分支(-b)git clone -b dev https://github.com/user/repo.git# 浅克隆(只拉取最新提交,节省时间和空间)git clone --depth 1 https://github.com/user/repo.git# 克隆到指定目录git clone https://github.com/user/repo.git my-folder# 使用 SSH 方式克隆(推荐,更安全)git clone git@github.com:user/repo.git# 克隆并自动进入子模块git clone --recursive https://github.com/user/repo-with-submodules.git
典型场景:
- 参与开源项目:从 GitHub Fork 项目后克隆到本地开发
🔹 wget
wget 是一个简单直接的专职下载工具,适合文件下载场景。
常用命令示例:
# 下载文件到当前目录wget https://example.com/file.zip# 下载并保存为指定文件名(-O)wget -O myfile.zip https://example.com/file.zip# 断点续传(-c),网络中断后继续下载wget -c https://example.com/largefile.iso# 递归下载整个网站(-r),用于离线浏览wget -r -l 1 -np -k https://example.com/docs/# 后台下载(-b),并将日志写入 wget-logwget -b https://example.com/bigfile.iso# 限速下载(--limit-rate),限制为 1MB/swget --limit-rate=1m https://example.com/file.zip# 从文件列表批量下载(-i)wget -i urls.txt# 下载网页及其资源(完整镜像)wget -m -p -E -k -np https://example.com# 添加用户认证下载wget --user=username --password=pass https://example.com/private/file
典型场景:
- 下载 Ubuntu ISO 镜像:
wget https://releases.ubuntu.com/22.04/ubuntu-22.04-desktop-amd64.iso
curl vs wget 快速对比
| curl | wget |
|---|
| | |
| | |
| | |
| 支持全部(GET/POST/PUT/DELETE) | |
| | |
| | |