Linux基础与实战笔记

第一部分:配置环境与文件共享

1. 虚拟机与主机网络配置

VMware网络模式

  • 桥接模式: 虚拟机获取独立的、与宿主机处于同一局域网的IP地址,像一台真实的物理机。配置时需在“虚拟网络编辑器”中正确选择桥接的物理网卡(如:无线WiFi或有线以太网)。
  • NAT模式: 虚拟机通过宿主机共享其IP地址访问外部网络。VMware会创建一个虚拟NAT网络(如VMnet8),为宿主机和虚拟机分配此子网内的IP,使它们可以互相通信。
  • 仅主机模式: 虚拟机只能与宿主机通信,无法访问外部网络,适用于构建隔离的测试环境。

Ubuntu网络接口配置

  • 查看接口: 使用 ifconfigip addr 查看当前网络接口的名称(如ens33, eth0)和状态。

  • 启停接口:

    1
    2
    sudo ifconfig ens33 up   # 启用ens33网卡
    sudo ifconfig ens33 down # 停用ens33网卡
  • 配置方法 (新版Ubuntu Netplan):

    • 新版Ubuntu (17.10+) 采用Netplan统一管理网络,配置文件位于 /etc/netplan/ 目录下,格式为YAML。

    • 动态IP (DHCP,通过dhcp服务器获取ip):

      1
      2
      3
      4
      5
      6
      7
      # /etc/netplan/01-network-manager-all.yaml
      network:
      version: 2
      renderer: NetworkManager
      ethernets:
      ens33:
      dhcp4: yes

配置静态IP的步骤

vmware桥接模式让ubuntu虚拟机跟windows宿主机使用相同IP网段,让局域网其它电脑可以访问虚拟机。

VMware虚拟机默认使用NAT网络模式,NAT模式会使虚拟机的IP与Windows宿主机的IP网段不同。例如,Windows宿主机的IP是 192.168.0.106,而使用NAT模式下虚拟机Ubuntu 18.04或Ubuntu 20.04的IP可能是 192.168.10.101,这样局域网内的其他电脑无法访问虚拟机。

Windows宿主机IP
(Windows宿主机IP)

NAT模式的Ubuntu虚拟机IP
(使用NAT模式的Ubuntu虚拟机IP)

那么如何让局域网的其他电脑可以访问到虚拟机呢?解决办法是配置虚拟机使用桥接网络,让Ubuntu虚拟机的IP网段与Windows宿主机处于同一IP网段,这样局域网内的其他电脑就可以访问虚拟机Ubuntu了。

第1步 配置VMware虚拟网络编辑器,设置VMnet0为桥接模式

配置VMware虚拟网络编辑器

选择网卡

在“桥接至”选项中,不要选择“自动”,而是选择电脑中实际用于上网的网卡。例如,如果你的电脑通过无线网卡连接WiFi,则选择无线网卡;如果使用有线网卡上网,则选择对应的有线网卡。

第2步 编辑虚拟机设置,配置Ubuntu虚拟机为桥接模式

编辑虚拟机设置

设置为桥接模式

第3步 修改Ubuntu虚拟机的网络配置

适用于Ubuntu 18.04及Ubuntu 20.04环境。

  1. 编辑网络配置文件
    使用以下命令编辑 /etc/netplan/01-network-manager-all.yaml 文件:

    1
    sudo gedit /etc/netplan/01-network-manager-all.yaml
  2. 修改配置文件内容
    将文件内容修改为以下格式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    network:
    version: 2
    renderer: NetworkManager
    ethernets:
    ens33: # 网卡名,以Ubuntu操作系统的实际网卡名称为准
    dhcp4: no # IPv4关闭DHCP,使用静态模式
    dhcp6: no # IPv6关闭DHCP
    addresses:
    - 192.168.0.161/24 # 本机IP地址(需与宿主机同一网段)
    gateway4: 192.168.0.1 # 路由器IP,即宿主机的默认网关
    nameservers: # DNS服务器
    addresses: [114.114.114.114, 8.8.8.8, 1.1.1.1]

    注意事项:

    • 此配置文件为层级结构,分为5级,上级与下级文本需右缩进,至少一个空格,不允许使用Tab键。
    • 缩进的空格数不固定,但相同层级的元素需左对齐。
    • 大小写敏感,冒号与后面的值之间需有一个空格,否则会报错。
  3. 应用网络配置
    执行以下命令编译并应用网络配置:

    1
    sudo netplan apply
  4. 验证网络连接
    重启网络服务后,使用 ping 命令验证网络是否通畅:

    1
    ping www.baidu.com

    网络验证结果

网络诊断

  • ping: 测试到目标主机的网络连通性。

    1
    ping www.baidu.com # Ctrl+C 停止
  • host: 查询域名的IP地址,用于诊断DNS解析问题。

    1
    host www.baidu.com
  • route: 查看和手动配置网关。

    1
    2
    route -n # 查看路由表
    sudo route add default gw 192.168.1.1 # 临时添加默认网关

一招解决虚拟机无法连接网络的问题

教程来自:CSDN
第一步:先关闭虚拟机的ubuntu系统,然后虚拟机—>设置---->网络适配器,选择NAT模式。
还原到NAT模式

第二步:编辑—>虚拟网络编辑器-----选择更改设置,允许配置。
赋予管理员权限更改设置
第三步:还原默认设置
还原默认设置
打开虚拟机,大功告成!!
显示有线连接成功

ping通了

2. 跨平台文件共享

Samba (Linux与Windows文件共享)

  • 概念: 使Linux系统能作为Windows网络中的文件/打印服务器,实现无缝文件共享。

  • 安装:

    1
    sudo apt install samba
  • 配置:

    • 编辑 sudo vi /etc/samba/smb.conf,在文件末尾添加共享节:

      1
      2
      3
      4
      5
      6
      [share]
      comment = Ubuntu Share Folder
      path = /home/gec/share_dir # 指定要共享的Ubuntu目录路径
      browseable = yes
      writable = yes
      public = yes # 或者 guest ok = yes,允许匿名访问
    • 创建共享目录并赋予相应权限:

      1
      2
      mkdir ~/share_dir
      sudo chmod 777 ~/share_dir
  • 重启服务:

    1
    sudo service smbd restart
  • 访问: 在Windows文件资源管理器的地址栏输入 \\<ubuntu_ip_address>\ 即可访问。

FTP (vsftpd服务器)

  • 概念: File Transfer Protocol,一种标准的文件传输协议。vsftpd是Linux上一款非常安全和高效的FTP服务器软件。

  • 安装:

    1
    sudo apt install vsftpd
  • 配置:

    • 编辑 sudo vi /etc/vsftpd.conf,确保写入权限已开启:

      1
      2
      # 取消此行的注释
      write_enable=YES
  • 重启服务:

    1
    sudo service vsftpd restart
  • 访问: 使用任何FTP客户端(如FileZilla, FlashFXP)连接,主机为Ubuntu的IP,用户名为Ubuntu的系统用户及其密码。

SCP (安全远程复制)

  • 概念: secure copy,基于SSH协议,提供加密的文件传输,是命令行下最常用的远程复制工具。

  • 用法:

    1
    2
    3
    4
    5
    6
    7
    8
    # 从本地复制到远程
    scp /path/to/local_file user@remote_host:/remote/path/

    # 从远程复制到本地
    scp user@remote_host:/remote/path/remote_file .

    # 递归复制整个目录
    scp -r local_dir/ user@remote_host:/remote/path/

3. 嵌入式开发连接

串口调试

  • 概念: 嵌入式开发最基础的调试和监控手段,用于查看系统启动信息、内核日志,并进行命令行交互。
  • 硬件: 串口线、USB转串口转换器(如使用CH340, PL2303芯片,需在Windows上安装相应驱动)。
  • 软件: 串口终端软件 (如SecureCRT, MobaXterm, PuTTY)。
  • 关键配置参数:
    • 端口号 (Port): 在PC的设备管理器中确认 (如COM3)。
    • 波特率 (Baud rate): 必须与开发板设置完全一致 (如115200, 1500000)。
    • 数据位 (Data bits): 通常为 8
    • 停止位 (Stop bits): 通常为 1
    • 校验 (Parity): 通常为 None
    • 流控 (Flow control): 通常为 None (或关闭)。

TFTP (轻量级文件传输)

  • 概念: Trivial File Transfer Protocol,一种简单的、无认证的文件传输协议,广泛用于在PC和嵌入式开发板之间传输内核镜像、文件系统等。
  • 工作流程:
    1. PC端 (服务器): 运行TFTP服务器软件(如tftpd32/tftpd64),设置好共享的文件目录和服务器监听的网卡IP。

    2. 开发板端 (客户端): 使用tftp命令进行下载或上传。

      1
      2
      3
      4
      5
      6
      7
      # 从PC下载文件 (get/receive)
      # 格式: tftp [server_ip] -gr [filename]
      [root@board:~]# tftp 192.168.1.10 -gr my_app

      # 上传文件到PC (put/send)
      # 格式: tftp [server_ip] -pr [filename]
      [root@board:~]# tftp 192.168.1.10 -pr log_data.txt

交叉编译工具链

  • 概念: 在一种CPU架构(如PC的x86)上,编译生成能在另一种不同CPU架构(如开发板的ARM)上运行的程序的工具集(编译器、链接器等)。
  • 配置步骤:
    1. 将工具链压缩包解压到合适位置 (如 /opt/toolchains/)。

    2. 将工具链的可执行文件目录 (bin目录) 添加到系统的PATH环境变量中,以便全局调用。

      1
      2
      # 编辑 ~/.bashrc 文件,在末尾添加
      export PATH=/opt/toolchains/arm-gcc-10.3/bin:$PATH
    3. 使配置立即生效:

      1
      source ~/.bashrc
    4. 验证配置是否成功:

      1
      2
      arm-linux-gnueabihf-gcc -v
      # 如果能正确显示编译器版本信息,则表示配置成功。

第二部分:Linux命令行基础

4. 系统导航与交互

ls

  • 释义: list,列出目录内容。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    ls        # 列出当前目录的文件名
    ls -l # 列出文件详情 (long format),包含权限、所有者、大小、修改时间等
    ls -a # 列出所有文件,包括以'.'开头的隐藏文件 (all)
    ls -h # 配合-l使用,以人类可读的格式显示文件大小 (human-readable, e.g., KB, MB)
    ls -la # 组合使用,列出所有文件的详情
    ls /etc # 列出指定目录 /etc 的内容

cd

  • 释义: change directory,切换当前工作目录。

  • 常见用法:

    1
    2
    3
    4
    cd /etc  # 切换到 /etc 目录
    cd # 切换到当前用户的家目录 (等同于 cd ~)
    cd - # 切换到上一次所在的目录
    cd .. # 切换到上一级目录

pwd

  • 释义: print working directory,显示当前所在的完整路径。

clear

  • 释义: 清理终端屏幕 (快捷键: Ctrl + L)。

echo

  • 释义: 在终端回显文本或变量值。

  • 常见用法:

    1
    2
    echo "Hello, World" # 输出字符串 "Hello, World"
    echo $PATH # 输出环境变量PATH的值

alias

  • 释义: 为命令创建别名。

  • 常见用法:

    1
    alias ll='ls -lh'

    注意: 等号两边不能有空格。此设置为临时生效,永久生效需将此行写入 ~/.bashrc~/.zshrc


5. 获取帮助与信息

man

  • 释义: manual,查阅命令或系统函数的帮助手册。

  • 常见用法:

    1
    2
    3
    man ls       # 查阅 ls 命令的帮助手册 (按 'q' 退出)
    man -f read # 列出所有与 "read" 相关的帮助手册章节
    man 2 read # 查阅第2册(系统调用)中关于 read 的手册

    注意: man手册共9册,Ubuntu默认可能未完全安装。可执行 sudo apt install manpages-dev manpages-posix-dev 安装更完整的手册。

which

  • 释义: 查找并显示命令的可执行文件所在路径。

  • 常见用法:

    1
    2
    which ls      # 输出: /usr/bin/ls
    which -a qmake # 列出 $PATH 中所有匹配的qmake命令路径

date

  • 释义: 查看或设置系统日期与时间。

file

  • 释义: 检测并显示文件类型。

6. Shell核心:管道与文本处理

管道 |

  • 概念: 将前一个命令的标准输出连接到后一个命令的标准输入,形成数据流处理链。

  • 示例:

    1
    2
    # 统计当前目录下的文件和目录总数
    ls -1 | wc -l

sort

  • 释义: 对输入行进行排序。

  • 常见用法:

    1
    2
    3
    sort file.txt    # 按字典序升序
    sort -r file.txt # -r: 降序 (reverse)
    sort -n file.txt # -n: 按数值 (numeric) 升序

uniq

  • 释义: unique,从输入中删除相邻的重复行。

  • 常见用法:

    注意: uniq 只能处理相邻的重复行,因此通常与 sort 配合使用来实现全局去重。

    1
    sort file.txt | uniq

wc

  • 释义: word count,统计行数、单词数和字符数。

  • 常见用法:

    1
    2
    wc file.txt      # 输出: 行数 单词数 字符数 文件名
    wc -l file.txt # -l: 只统计行数 (lines)

xargs

  • 概念: 从标准输入读取数据,并将其作为参数传递给后续命令。

  • 示例:

    1
    2
    # 查找所有.tmp文件,并使用rm命令删除它们
    find . -name "*.tmp" | xargs rm

第三部分:文件系统管理

7. 文件与目录操作

创建

  • touch: 创建空文件或更新文件时间戳。

  • mkdir: 创建目录。

    1
    mkdir -p project/src/include # -p: 递归创建嵌套目录

复制与移动

  • cp: 复制文件或目录。

    1
    2
    cp source.txt destination.txt # 复制文件
    cp -r source_dir/ dest_dir/ # -r: 递归复制目录
  • mv: 移动文件/目录,或用于重命名。

删除

  • rm: 删除文件或目录。此操作不可逆,请谨慎!

    1
    2
    3
    rm file.txt
    rm -r dir_to_delete/ # -r: 递归删除目录及其内容
    rm -rf important_dir/ # -f: 强制删除,不提示,极度危险!
  • rmdir: 删除目录。

比较

  • diff: 比较两个文件或目录的差异。

    1
    2
    diff file1.txt file2.txt      # 比较文件
    diff -urN dir1/ dir2/ # 比较目录的常用选项组合

8. 文件内容查看与搜索

内容查看

  • cat: 一次性显示文件全部内容。

  • less / more: 分页查看长文件,less功能更强。

  • head / tail: 查看文件头部/尾部内容。

    1
    tail -f /var/log/syslog # -f: 实时跟踪文件更新 (follow),常用于查看日志
  • od: 以不同进制格式查看二进制文件。

内容搜索

  • find: 在文件系统中按条件搜索文件。

    1
    2
    find /usr/include -name "stdio.h" # 按名称查找
    find . -type f -mtime -7 # 查找当前目录及子目录下,7天内修改过的普通文件
  • grep: 在文件内容中搜索匹配指定模式的行。

    1
    2
    grep "error" app.log              # 在app.log中查找包含"error"的行
    grep -rn "my_function" ./src/ # 在src目录中递归(-r)搜索"my_function"并显示行号(-n)

9. 归档与压缩

tar

  • 释义: Linux下最核心的归档工具,常与压缩算法结合。

  • 核心参数:

    • c: 创建 (create) | x: 提取 (extract) | t: 查看 (list)
    • v: 显示过程 (verbose) | f: 指定文件名 (file)
    • z: 使用gzip (.gz) | j: 使用bzip2 (.bz2) | J: 使用xz (.xz)
  • 常见用法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 压缩
    tar -czvf archive.tar.gz ./my_directory # 打包并用gzip压缩

    # 查看
    tar -tf archive.tar.gz # 查看压缩包内容,不解压

    # 解压
    tar -xzvf archive.tar.gz # 解压.tar.gz
    tar -xzvf archive.tar.gz -C /tmp # -C: 解压到指定目录

zip / unzip

  • 释义: 跨平台兼容性好的压缩格式。

  • 常见用法:

    1
    2
    zip -r archive.zip ./my_directory # -r: 递归压缩目录
    unzip archive.zip

第四部分:系统管理

10. 用户与权限

用户和组管理

  • whoami / id: 查看当前用户信息。

  • adduser / deluser: 添加/删除用户(交互式)。

  • addgroup / delgroup: 添加/删除用户组。

  • usermod: 修改用户属性。

    1
    2
    3
    sudo adduser jack                # 添加新用户jack
    sudo usermod -aG sudo jack # 将用户jack追加(-a)到sudo组(-G)中
    sudo deluser --remove-home jack # 删除用户并移除其家目录

    信息存储: 用户信息在/etc/passwd,密码哈希在/etc/shadow,组信息在/etc/group

权限管理

  • chmod: 修改文件/目录权限。

  • chown: 修改文件/目录所有者。

  • chgrp: 修改文件/目录所属组。

  • 权限解读 (ls -l): drwxr-xr--

    • d: 类型(d:目录, -:文件, l:链接)
    • rwx: 所有者权限 (读、写、执行)
    • r-x: 所属组权限 (读、执行)
    • r--: 其他人权限 (读)
  • 数字模式 (chmod): r=4, w=2, x=1

    1
    2
    3
    chmod 755 my_script.sh # rwx r-x r-x
    chmod 644 config.conf # rw- r-- r--
    sudo chown jack:developers file.txt # 修改所有者为jack,所属组为developers

11. 软件包管理 (Ubuntu)

apt

  • 释义: Advanced Package Tool,高级包管理工具,自动处理依赖。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    sudo apt update              # 更新可用软件包列表
    sudo apt upgrade # 升级所有已安装的包
    sudo apt install vim # 安装vim
    sudo apt remove vim # 卸载vim
    sudo apt autoremove # 移除不再需要的依赖包
    apt search htop # 搜索htop包

dpkg

  • 释义: Debian Package,底层包管理工具,用于手动安装.deb文件。

  • 常见用法:

    1
    sudo dpkg -i package_name.deb # -i: 安装 (install)

    注意: dpkg不处理依赖。如果安装后提示依赖问题,可执行 sudo apt -f install 来尝试自动修复。

12. 进程与系统资源管理

进程查看

ps

  • 释义: process state,获取进程在某个时间点的快照信息。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    7
    8
    # 以BSD风格显示所有进程的详细信息
    ps aux

    # 以System V风格显示所有进程的详细信息,并以完整格式显示
    ps -ef

    # 常用组合:配合grep查找特定进程
    ps aux | grep "nginx"

top

  • 释义: 动态、实时地显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

  • 常见用法:

    1
    2
    3
    4
    5
    # 启动top,默认按CPU使用率排序
    top

    # 监视指定PID的进程
    top -p <PID>
  • 交互操作:

    • P: 按CPU使用率排序 (默认)。
    • M: 按内存使用率排序。
    • T: 按累计运行时间排序。
    • k: 输入PID后回车,向进程发送信号 (kill)。
    • q: 退出。

进程控制

kill

  • 释义: 向指定的进程发送一个信号,以实现进程间通信或控制。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 查看系统支持的所有信号列表
    kill -l

    # 默认发送SIGTERM (15),请求进程正常终止
    kill <PID>

    # 发送SIGKILL (9),强制立即终止进程(最后的手段)
    kill -9 <PID>
    # 或者使用信号名
    kill -s SIGKILL <PID>

13. 磁盘与分区管理

查看磁盘使用情况

df

  • 释义: disk free,查看已挂载文件系统的磁盘空间使用情况。

  • 常见用法:

    1
    2
    # 以人类可读的格式 (KB, MB, GB) 显示所有已挂载分区的空间信息
    df -h
    1
    2
    3
    4
    文件系统      大小  已用 可用 使用% 挂载点
    /dev/vda1 50G 6.8G 40G 15% /
    tmpfs 937M 48K 936M 1% /dev/shm
    ...

du

  • 释义: disk usage,估算文件或目录占用的磁盘空间大小。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    7
    8
    # 查看当前目录下每个子目录和文件的空间占用
    du

    # 以人类可读格式,显示当前目录的总大小 (-s: summary)
    du -sh

    # 查看指定目录的总大小
    du -sh /var/log

分区操作

fdisk

  • 释义: 一个功能强大的、用于磁盘分区的命令行工具。

  • 常见用法:

    1
    2
    # 列出系统中所有可识别的磁盘及其分区表信息(即使未挂载)
    sudo fdisk -l

    提醒: df只能查看已挂载的分区,而fdisk -l可以查看所有已识别的分区,包括未挂载的。这在挂载新硬盘或U盘时非常有用,可以先用fdisk -l找到设备名(如/dev/sdb1)。

mount / umount

  • 释义: 挂载/卸载文件系统。在Linux中,外部设备(如U盘、硬盘分区)必须被“挂载”到一个已存在的目录上,才能被访问。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    7
    8
    # 挂载分区: 将/dev/sdb1分区挂载到/mnt/usb目录
    # 首先确保挂载点目录存在
    sudo mkdir -p /mnt/usb
    sudo mount /dev/sdb1 /mnt/usb

    # 卸载分区 (两种等价方式)
    sudo umount /dev/sdb1 # 按设备名卸载
    sudo umount /mnt/usb # 按挂载点卸载

    注意: 卸载前,请确保没有任何进程正在使用该挂载点下的文件,否则会提示"device is busy"。

14. 案例实战:磁盘分区与持久化挂载

问题提出

  • 目标: 在GEC6818开发板上,将一个闲置的大分区格式化,并挂载到/root目录,以扩展根目录的使用空间。
  • 计划操作:
    1. mkfs.ext2 /dev/mmcblk0p7: 将分区格式化为ext2文件系统。
    2. mount /dev/mmcblk0p7 /root: 将格式化后的分区挂载到/root目录。

信息侦察与可行性分析

在执行任何破坏性操作(如格式化)之前,必须进行充分的信息收集和分析。

  • 1. 查看已挂载分区 (df -h)

    1
    2
    3
    4
    [root@GEC6818 /]# df -h
    Filesystem Size Used Available Use% Mounted on
    /dev/root 492.1M 395.5M 96.7M 80% /
    ...
    • 分析: 根分区 /dev/root 总大小约492MB,已使用80%,空间紧张。确实有扩展空间的必要。
  • 2. 查看所有可识别的分区 (fdisk -l)

    1
    2
    3
    4
    5
    6
    7
    8
    [root@GEC6818 /]# fdisk -l

    Disk /dev/mmcblk0: 7818 MB, 7818182656 bytes
    ...
    Device Boot Start End Blocks Id System
    /dev/mmcblk0p1 1 9 65536 83 Linux
    ...
    /dev/mmcblk0p7 164 951 6324224 83 Linux
    • 分析:
      • 系统中存在一个名为 /dev/mmcblk0p7 的分区。
      • 其大小为 6324224 Blocks (约6.3GB),是一个相当大的分区。
      • df -h 的输出中并未看到此分区,证明它当前未被挂载
      • 结论: /dev/mmcblk0p7 是一个存在的、未挂载的大分区,硬件上可用于我们的目标。

风险评估与操作建议

  • 可以执行吗? 可以,但必须极其谨慎。

  • 风险点:

    1. 数据丢失: mkfs (格式化) 是一个不可逆的操作,会清除 /dev/mmcblk0p7 分区上的所有数据。必须100%确认该分区上没有重要数据。
    2. 挂载点覆盖: 将一个分区挂载到非空目录(如/root)上,会导致该目录原有的内容被临时隐藏。在挂载期间,访问/root将直接访问新分区的内容,原有的文件将不可见,直到分区被卸载。
    3. 文件系统选择:
      • ext2: 无日志功能,写入性能稍高,适合资源有限的嵌入式设备。但断电时数据丢失或文件系统损坏的风险更高。
      • ext3/ext4: 有日志功能,能更好地保证数据一致性,更耐受意外断电。推荐在支持的设备上使用 ext4
  • 最佳实践建议:

    1. 使用新的空目录作为挂载点: 这是最安全、最推荐的做法,可以避免覆盖系统重要目录。

      1
      2
      # 创建一个新的、专门的挂载点
      mkdir /mnt/data
    2. 执行格式化:

      1
      2
      3
      4
      5
      # 格式化为ext2 (按原计划)
      mkfs.ext2 /dev/mmcblk0p7

      # (推荐) 格式化为更可靠的ext4
      mkfs.ext4 /dev/mmcblk0p7
    3. 执行挂载:

      1
      2
      3
      4
      5
      # 挂载到推荐的新挂载点
      mount /dev/mmcblk0p7 /mnt/data

      # (按原计划,但有风险) 挂载到/root
      mount /dev/mmcblk0p7 /root
    4. 验证: 挂载后,使用df -h确认分区是否已成功挂载。

      1
      2
      df -h
      # 此时应能看到 /dev/mmcblk0p7 挂载到了 /mnt/data (或 /root)

持久化挂载配置 (/etc/fstab)

mount命令执行的挂载是临时的,系统重启后会失效。要实现开机自动挂载,必须将挂载信息写入 /etc/fstab (file systems table) 文件。

  • 1. 编辑fstab文件:

    1
    vi /etc/fstab
  • 2. 添加挂载条目: 在文件末尾添加新的一行,格式如下:
    <device> <mount_point> <filesystem_type> <options> <dump> <pass>

    1
    2
    # 示例: 将/dev/mmcblk0p7以ext2格式挂载到/root
    /dev/mmcblk0p7 /root ext2 defaults 0 2
    • 字段解释:
      • /dev/mmcblk0p7: 要挂载的设备。
      • /root: 挂载点目录。
      • ext2: 文件系统类型(必须与格式化时所用的一致)。
      • defaults: 使用默认的挂载选项 (通常是 rw,suid,dev,exec,auto,nouser,async)。
      • 0: dump工具的标志位,0表示不备份。
      • 2: fsck文件系统检查的顺序。根分区为1,其他分区为20表示不检查。
  • 3. 测试配置 (非常重要):
    在重启之前,执行 mount -a 命令。此命令会读取/etc/fstab并尝试挂载所有未挂载的条目。

    1
    mount -a
    • 如果此命令没有任何报错,说明fstab文件语法正确。
    • 如果报错,必须根据错误信息修正fstab文件,否则系统可能无法正常启动
  • 4. 验证与重启:

    • df -h 再次确认挂载成功。
    • reboot 重启系统,检查开机后分区是否被自动挂载。

核心忠告: 操作/etc/fstab文件前,请确保你理解每个字段的含义。一个错误的配置可能导致系统启动失败,需要进入救援模式才能修复。

第五部分:网络管理

14. 网络接口与主机名

hostname

  • 释义: 查看或临时设置系统的主机名。

  • 常见用法:

    1
    2
    # 查看当前主机名
    hostname

ifconfig

  • 释义: interface configuration,用于查看和配置网络接口(在较新的系统中,推荐使用ip命令)。

  • 常见用法:

    1
    2
    3
    4
    5
    6
    7
    8
    # 查看当前所有已激活的网络接口信息
    ifconfig

    # 查看所有网络接口,包括未激活的
    ifconfig -a

    # 临时设置IP地址 (重启后失效)
    sudo ifconfig ens33 192.168.1.100 netmask 255.255.255.0

    提醒: 要实现永久IP地址配置,应修改系统的网络配置文件(如/etc/network/interfaces或Netplan的YAML文件)。

ifup / ifdown

  • 释义: 基于/etc/network/interfaces配置文件来启用/禁用指定的网络接口。

  • 常见用法:

    1
    2
    sudo ifdown ens33  # 禁用网络接口卡ens33
    sudo ifup ens33 # 启用网络接口卡ens33

    注意: 这组命令在采用Netplan的现代Ubuntu系统中不可用。