diff --git "a/27 \345\274\240\350\257\255\345\253\243/20250506-Linux\347\232\204\345\210\235\346\255\245\345\255\246\344\271\240.md" "b/27 \345\274\240\350\257\255\345\253\243/20250506-Linux\347\232\204\345\210\235\346\255\245\345\255\246\344\271\240.md" new file mode 100644 index 0000000000000000000000000000000000000000..d4d92f3edf528dc107783ce4bfaa15ccf8a3e1fc --- /dev/null +++ "b/27 \345\274\240\350\257\255\345\253\243/20250506-Linux\347\232\204\345\210\235\346\255\245\345\255\246\344\271\240.md" @@ -0,0 +1,459 @@ +# Linux基础概念与环境搭建 + +## 关于Linux需要知道的一些常识 + +1. [版本介绍](https://baike.baidu.com/item/Linux版本/3345274#1) +2. [发行版](https://baike.baidu.com/item/Linux版本/3345274#2) +3. [版本比较](https://baike.baidu.com/item/Linux版本/3345274#3) +4. [版本列表](https://baike.baidu.com/item/Linux版本/3345274#4) + +Linux是个操作系统内核,现在说的Linux其实是Linux的发行版本(Debian12,centos 8,RedHat ...),内核+套件+管理工具 + +## **Linux基本概念与操作系统对比** + +#### **1. 概念与定义** + +1. **核心知识点**: + - **定义**:Linux是一个开源操作系统内核,Debian是其最稳定的发行版之一,提供免费的软件包和强大的命令行工具。 + **用途**:管理服务器、开发软件、自动化任务(如批量重命名照片)。 +2. **Linux与Windows/MacOS的区别**: + - **开源 vs 闭源**:Linux代码公开可修改,Windows代码不开放。 + - **多用户支持**:Linux支持多人同时登录(如服务器),Windows更侧重单用户。 + - **命令行核心**:Linux运维依赖终端命令,Windows以图形界面为主。 + +--- + +#### **2. Linux的技术优势** + +- 轻量化:Linux服务器资源占用低(1GB内存即可运行)。 +- 成本低:免费且高效,比Windows更节省服务器资源; +- 稳定性:Debian可连续运行数年无需重启(如维基百科服务器)。 +- 高效:命令行操作速度快,适合批量处理(例如一键备份所有文件)。 + +--- + +#### **3. 主流操作系统与Linux发行版选择** + +**操作步骤**: + +1. **对比主流操作系统**: + + | 系统 | 适用场景 | 特点 | + | ------- | ------------------ | ------------------------ | + | Windows | 个人办公、游戏 | 图形化友好,软件生态丰富 | + | MacOS | 开发、设计、新媒体 | Unix内核,生态封闭 | + | Linux | 服务器、嵌入式设备 | 开源、可定制性强 | + +2. **选择Linux发行版**: + + - **Debian**:稳定,适合服务器(如学校网站)。 + - **Ubuntu**:易用,适合新手桌面用户。 + - **CentOS**:企业级服务器(已转向CentOS Stream)。 + +**示例代码**:查看当前Linux发行版信息: + +```bash +lsb_release -a # 输出示例: +# No LSB modules are available. +# Distributor ID: Debian +# Description: Debian GNU/Linux 12 (bookworm) +# Release: 12 +# Codename: bookworm +``` + +**代码解释**:`lsb_release -a` 命令显示系统版本信息,确认当前为Debian 12。 + +## **Debian系统安装与初始化** + +#### **1. 安装前的核心概念** + +**核心知识点**: + +1. **虚拟机 vs 物理机**: + - **虚拟机(VirtualBox)**:安全隔离,适合新手练习。 + - **物理机**:直接安装到硬盘,需谨慎操作。 +2. **分区概念**: + - **根分区(/)**:系统文件存放位置,建议至少20GB。 + - **交换分区(swap)**:内存不足时充当临时内存,大小通常为物理内存的1-2倍。 + +--- + +#### **2. 为什么使用虚拟机安装** + +**优势**: + +- **零风险**:不会影响宿主机的原有系统。 +- **快速重置**:可通过快照功能一键恢复初始状态。 + +--- + +#### **3. Debian安装步骤详解** + +**操作步骤**: + +1. 安装一个VM虚拟机 + + 1. 下载VM + + 2. 注册VM:百度到处都是序列号 + + 3. https://www.32r.com/soft/65795.html + +2. **下载镜像**: + + - 访问[Debian官网](https://www.debian.org/download),选择“稳定版(Stable)”ISO文件。 + - [https://mirror.lzu.edu.cn/debian-cd/12.5.0/amd64/iso-cd/](https://gitee.com/link?target=https%3A%2F%2Fmirror.lzu.edu.cn%2Fdebian-cd%2F12.5.0%2Famd64%2Fiso-cd%2F) + - [debian-12.5.0-amd64-netinst.iso](https://gitee.com/link?target=https%3A%2F%2Fmirror.lzu.edu.cn%2Fdebian-cd%2F12.5.0%2Famd64%2Fiso-cd%2Fdebian-12.5.0-amd64-netinst.iso) + - 默认下载慢,可选择中国镜像 + +3. **将Debian安装进VM**: + + - 创建一个空白虚拟机 + + - 配置好相关的硬件参数 + + - 关键是修改CD-ROM,选择ISO文件路径 + + - 启动虚拟机 + + - 在选择语言时,选择简体中文,可以将配置的界面都中文显示 + + - 遇到选镜像站点时,选mirror.lzu.edu.cn 兰州大学的站点 + + - 软件安装时,只保留最后的标准工具,其它都不选 + + - ![e83743dec6c9223165c899201d6cd8b](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/1.png) + + ![7f50e82bac17a0d53108daebe86a45a](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/2.png) + + ![3](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/3.png) + + ![26a5cb13fc486fc0de9115e83cefe3d](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/4.png) + + ![img](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/5.png) + + ![a71f874a9e0802836a946ca25895d2b](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/6.png) + + ![b77ae25e02ce25aa6151f94ec6147a3](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/7.png) + + ![5a96670c5ef35aa11238b4ac9f618db](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/8.png) + + ![a26515f7fde320cb2fb336bf72da473](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/9.png) + + ![9b522ecd6eea0697c423b37c87cb6f7](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/10.png) + + ![a490df1308c1e7ab83f0ca152656a55](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/11.png) + + ![09ff586e070075f5b0ba805a1afcb35](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/12.png) + + ![e2d3559dc29f474572bdbf4688c26c5](https://gitee.com/implementation-level-22/linux-fundamentals/raw/master/%E8%B5%96%E5%BF%83%E5%A6%8D/assets/14.png) + +4. **关键配置步骤**: + + - 分区方案:学习可用第一种全分一个区。 + + - 用户名密码:设置普通用户(如student)和root密码。 + + - 软件选择:**取消勾选**所有桌面环境(最小化安装,仅保标准系统工具)。 + + - 移动光标可以使用键盘上的上下键 + + - 也可以用TAB键 + + - 选中与反选操作使用空格键 + + + +5. **首次启动与更新**: + + ```bash + # 普通用户登录后更新系统 + sudo apt update # 刷新软件源 + sudo apt upgrade -y # 升级所有软件包 + # 普通用户,涉及权限问题和环境变量等系列问题。 + # root用户更新系统 + apt update # 刷新软件源 + apt upgrade -y # 升级所有软件包 + ``` + +**示例代码**:验证安装是否成功: + +```bash +uname -a # 输出示例: +# Linux debian 5.10.0-21-amd64 #1 SMP Debian 5.10.162-1 (2023-01-21) x86_64 GNU/Linux +``` + +**代码解释**:`uname -a` 显示内核版本和系统架构,确认系统已正常运行。 + +--- + +#### **4. 应用案例** + +**案例2:个人开发环境搭建** + +- **需求**:学习Python编程但Windows环境配置复杂。 + +- **解决方案**: + + 1. 在VM中安装Debian。 + + 2. 通过命令行一键安装Python: + + ```bash + sudo apt install python3 + ``` + + + +## **实践任务安排** + +**任务1:完成Debian虚拟机安装** + +- 要求:截图显示登录后的命令行界面(附`uname -a`命令输出)。截图要将虚拟机一起截图。 + +**任务2:创建目录结构** + +- 目标:在用户主目录下创建 `~/projects/{python,web,scripts}`。 + +- 示例代码: + + ```bash + mkdir -p ~/projects/{python,web,scripts} + ls ~/projects # 验证是否生成三个子目录 + ``` + +**任务3:更新系统并安装常用工具** + +- 步骤: + + ```bash + sudo apt update + sudo apt install -y htop neofetch # 安装进程监控和系统信息工具 + neofetch # 显示系统信息 + + ``` + +**任务4:让牛帮你“说话”** + + **cowsay** 从单词字面上我们就可以知道,这命令的意思就是让牛“说话”。 + + - Debian安装命令: + + ``` +sudo apt install cowsay + ``` + + - 安装成功后,输入: + + ```shell +root@mjdo:/# /usr/games/cowsay -l -- 查看支持的动物 +root@mjdo:/# /usr/games/cowsay -f dragon "我是小龙龙" + ``` + + 就能看到一头龙在屏幕上说出你的话: + + ```shell +root@mjdo:/usr/games# ./cowsay -f dragon "我是小龙龙" + ____________ +< 我是小龙龙 > + ------------ + \ / \ //\ + \ |\___/| / \// \\ + /0 0 \__ / // | \ \ + / / \/_/ // | \ \ + @_^_@'/ \/_ // | \ \ + //_^_/ \/_ // | \ \ + ( //) | \/// | \ \ + ( / /) _|_ / ) // | \ _\ + ( // /) '/,_ _ _/ ( ; -. | _ _\.-~ .-~~~^-. + (( / / )) ,-{ _ `-.|.-~-. .~ `. + (( // / )) '/\ / ~-. _ .-~ .-~^-. \ + (( /// )) `. { } / \ \ + (( / )) .----~-.\ \-' .~ \ `. \^-. + ///.----..> \ _ -~ `. ^-` ^-_ + ///-._ _ _ _ _ _ _}^ - - - - ~ ~-- ,.-~ + /.-~ + + ``` + +- `/usr/games/cowsay -f sl`(蒸汽火车动画) + +--- + +**任务5:验证系统版本及内核** + +- 验证安装的Linux版本或内核信息,除了lsb_release -a和uname -a 外,至少再提供一种。 +- 使用 `mkdir` 和 `ls` 命令创建目录结构并验证。 + + + +## Linux的常见命令 + +### **1. `lsb_release -a`** + +**作用**:查看Linux标准基础(LSB)和发行版的具体信息。 +**适用场景**:获取系统发行版的详细信息(如Debian、Ubuntu的版本号)。 +**示例输出**: + +```bash +No LSB modules are available. +Distributor ID: Ubuntu +Description: Ubuntu 22.04.3 LTS +Release: 22.04 +Codename: jammy +``` + +**关键字段**: + +- `Distributor ID`:发行版名称(如Ubuntu、Debian)。 +- `Release`:系统版本号(如22.04)。 +- `Codename`:发行版代号(如jammy)。 + +**注意**: + +- 如果提示`No LSB modules are available`,需安装`lsb-release`包: + + ```bash + sudo apt install lsb-release + ``` + +--- + +### **2. `uname -a`** + +**作用**:查看内核版本和系统架构信息。 +**适用场景**:快速获取内核版本、主机名和处理器架构。 +**示例输出**: + +```bash +Linux ubuntu-server 5.15.0-78-generic #85-Ubuntu SMP Fri Jul 7 15:25:09 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux +``` + +**关键字段**: + +- `5.15.0-78-generic`:内核版本。 +- `x86_64`:系统架构(64位)。 +- `#85-Ubuntu SMP`:内核编译时间和版本。 + +**常用选项**: + +- `-r`:仅显示内核版本(如`5.15.0-78-generic`)。 +- `-m`:显示系统架构(如`x86_64`)。 + +--- + +### **3. `cat /etc/os-release`** + +**作用**:查看系统发行版的详细信息(标准化格式)。 +**适用场景**:脚本中需要解析系统信息时(推荐使用)。 +**示例输出**: + +```bash +PRETTY_NAME="Ubuntu 22.04.3 LTS" +NAME="Ubuntu" +VERSION_ID="22.04" +VERSION="22.04.3 LTS (Jammy Jellyfish)" +ID=ubuntu +ID_LIKE=debian +``` + +**关键字段**: + +- `PRETTY_NAME`:用户友好的系统名称。 +- `VERSION_ID`:版本号(如22.04)。 +- `ID_LIKE`:基于的发行版(如Debian系)。 + +**优势**: + +- 所有现代Linux发行版均支持,无需额外安装包。 + +--- + +### **4. `cat /etc/issue`** + +**作用**:查看简化的发行版信息(通常显示登录提示)。 +**适用场景**:快速获取系统名称和版本号。 +**示例输出**: + +```bash +Ubuntu 22.04.3 LTS \n \l +``` + +--- + +### **5. `hostnamectl`(Systemd系统专用)** + +**作用**:查看主机名、操作系统和内核信息。 +**适用场景**:基于Systemd的系统(如Ubuntu、Debian 8+)。 +**示例输出**: + +```bash + Static hostname: ubuntu-server + Icon name: computer-vm + Chassis: vm + Machine ID: 1234abcd5678efgh9012ijkl + Boot ID: 1234abcd5678efgh9012ijkl + Operating System: Ubuntu 22.04.3 LTS + Kernel: Linux 5.15.0-78-generic + Architecture: x86_64 +``` + +**关键字段**: + +- `Operating System`:系统名称和版本。 +- `Kernel`:内核版本。 + +--- + +### **6. `cat /proc/version`** + +**作用**:查看内核版本和编译器信息。 +**适用场景**:调试时需知内核编译环境。 +**示例输出**: + +```bash +Linux version 5.15.0-78-generic (buildd@lcy02-amd64-060) (gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #85-Ubuntu SMP Fri Jul 7 15:25:09 UTC 2023 +``` + +**关键信息**: + +- 内核版本、编译器版本(如gcc 11.3.0)、编译时间。 + +--- + +### **命令对比总结** + +| 命令 | 主要信息 | 适用场景 | 是否需要root | +| --------------------- | ------------------------------- | ---------------------- | ------------ | +| `lsb_release -a` | 发行版名称、版本号、代号 | 确认系统具体发行版 | 否 | +| `uname -a` | 内核版本、架构、主机名 | 快速查看内核和硬件信息 | 否 | +| `cat /etc/os-release` | 标准化发行版信息(脚本友好) | 脚本中获取系统版本 | 否 | +| `cat /etc/issue` | 简化的发行版信息 | 快速查看系统名称 | 否 | +| `hostnamectl` | 主机名、OS版本、内核(Systemd) | 现代Linux系统综合信息 | 否 | +| `cat /proc/version` | 内核版本和编译环境 | 调试或开发环境检查 | 否 | + +--- + +### **使用建议** + +1. **快速查看发行版**: + + ```bash + cat /etc/os-release # 推荐(标准化输出) + lsb_release -a # 需要安装lsb-release + ``` + +2. **查看内核版本**: + + ```bash + uname -r # 仅显示内核版本 + cat /proc/version # 显示编译详情 + ``` + +3. **脚本中获取系统信息**: + + ```bash + # 获取发行版ID(如ubuntu/debian) + source /etc/os-release + echo $ID + ```