第一部分:配置环境与文件共享
1. 虚拟机与主机网络配置
VMware 网络模式
- 桥接模式: 虚拟机获取独立的、与宿主机处于同一局域网的 IP 地址,像一台真实的物理机。配置时需在“虚拟网络编辑器”中正确选择桥接的物理网卡(如:无线 WiFi 或有线以太网)。
- NAT 模式: 虚拟机通过宿主机共享其 IP 地址访问外部网络。VMware 会创建一个虚拟 NAT 网络(如 VMnet8),为宿主机和虚拟机分配此子网内的 IP,使它们可以互相通信。
- 仅主机模式: 虚拟机只能与宿主机通信,无法访问外部网络,适用于构建隔离的测试环境。
Ubuntu 网络接口配置
查看接口: 使用
ifconfig或ip addr查看当前网络接口的名称(如ens33,eth0)和状态。启停接口:
1
2sudo 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)
(使用 NAT 模式的 Ubuntu 虚拟机 IP)
那么如何让局域网的其他电脑可以访问到虚拟机呢?解决办法是配置虚拟机使用桥接网络,让 Ubuntu 虚拟机的 IP 网段与 Windows 宿主机处于同一 IP 网段,这样局域网内的其他电脑就可以访问虚拟机 Ubuntu 了。
第 1 步 配置 VMware 虚拟网络编辑器,设置 VMnet0 为桥接模式
在“桥接至”选项中,不要选择“自动”,而是选择电脑中实际用于上网的网卡。例如,如果你的电脑通过无线网卡连接 WiFi,则选择无线网卡;如果使用有线网卡上网,则选择对应的有线网卡。
第 2 步 编辑虚拟机设置,配置 Ubuntu 虚拟机为桥接模式
第 3 步 修改 Ubuntu 虚拟机的网络配置
适用于 Ubuntu 18.04 以上的环境
编辑网络配置文件
使用以下命令编辑/etc/netplan/01-network-manager-all.yaml文件:1
sudo vim /etc/netplan/01-network-manager-all.yaml
修改配置文件内容
将文件内容修改为以下格式:1
2
3
4
5
6
7
8
9
10
11
12network:
version: 2
renderer: NetworkManager
ethernets:
ens33: # 网卡名,以Ubuntu操作系统的实际网卡名称为准
dhcp4: no # IPv4关闭DHCP,使用静态模式
dhcp6: no # IPv6关闭DHCP
addresses:
- 192.168.11.123/24 # 本机IP地址(需与宿主机同一网段,且未被占用)
gateway4: 192.168.11.254 # 路由器IP,即宿主机的默认网关
nameservers: # DNS服务器
addresses: [114.114.114.114, 8.8.8.8, 1.1.1.1]注意事项:
- 此配置文件为层级结构,分为 5 级,上级与下级文本需右缩进,至少一个空格,不允许使用 Tab 键。
- 缩进的空格数不固定,但相同层级的元素需左对齐。
- 大小写敏感,冒号与后面的值之间需有一个空格,否则会报错。
应用网络配置
执行以下命令编译并应用网络配置:1
sudo netplan apply
验证网络连接
重启网络服务后,使用ping命令验证网络是否通畅:1
ping www.baidu.com
[!WARNING]
如果老是配置不上还导致没网了,可以看下面的方法(一招解决虚拟机无法连接网络的问题),然后再看这里的配置方法
配置方法 (旧版 Ubuntu):
网络诊断
ping: 测试到目标主机的网络连通性。1
ping www.baidu.com # Ctrl+C 停止
host: 查询域名的 IP 地址,用于诊断 DNS 解析问题。1
host www.baidu.com
route: 查看和手动配置网关。1
2route -n # 查看路由表
sudo route add default gw 192.168.1.1 # 临时添加默认网关
一招解决虚拟机无法连接网络的问题
教程来自:CSDN
第一步:先关闭虚拟机的 ubuntu 系统,然后虚拟机—>设置---->网络适配器,选择 NAT 模式。
第二步:编辑—>虚拟网络编辑器-----选择更改设置,允许配置。
第三步:还原默认设置
打开虚拟机,大功告成!!
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/user/share_dir # 指定要共享的Ubuntu目录路径
browseable = yes
writable = yes
public = yes # 或者 guest ok = yes,允许匿名访问创建共享目录并赋予相应权限:
1
2mkdir ~/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 的系统用户及其密码。
NFS 共享(linux 与开发版文件共享)
NFS(Network File System)是一种分布式文件系统协议,它允许 Linux 主机(作为服务器)将目录通过网络共享给其他计算机(如嵌入式开发板,作为客户端)。客户端可以挂载(mount)这个共享目录,像访问本地文件夹一样无缝地进行读写操作,非常适合在 PC 上修改代码、在开发板上直接编译和运行的开发流程。
第一步:在 Ubuntu(服务器端)安装和配置 NFS
安装 NFS 服务软件包(一般自带)
在你的 Ubuntu PC 上更新软件包列表并安装nfs-kernel-server。1
2sudo apt update
sudo apt install -y nfs-kernel-server创建用于共享的目录
创建一个专门用于 NFS 共享的目录。例如,在用户主目录下创建一个名为nfs_share的文件夹。1
mkdir ~/nfs_share
为了让开发板能自由读写,需要赋予该目录最高权限。
1
sudo chmod 777 ~/nfs_share
配置共享
编辑 NFS 的配置文件/etc/exports来指定要共享哪个目录以及共享给谁。1
sudo vi /etc/exports
在文件末尾添加一行,格式为:
<共享目录> <允许访问的客户端IP>(<权限选项>)。1
2# 将 /home/你的用户名/nfs_share 目录共享给所有IP地址
/home/Skyforever/nfs_share *(rw,sync,no_all_squash,no_root_squash,no_subtree_check)- 参数解释:
/home/Skyforever/nfs_share: 你在第 2 步创建的共享目录的绝对路径(请将Skyforever替换为你的实际用户名)。*: 允许任何 IP 地址的客户端连接。为安全起见,你也可以指定一个网段,如192.168.1.0/24。rw: 允许客户端进行读写操作。sync: 数据同步写入内存和硬盘,保证数据一致性。no_root_squash: 核心选项,允许从客户端以 root 用户身份挂载时,在共享目录中也拥有 root 权限(如创建设备文件)。no_subtree_check: 禁用子树检查,可以提高性能。
- 参数解释:
启动并使配置生效
更新 NFS 的共享目录列表,然后启动(或重启)NFS 服务。1
2
3sudo exportfs -a # 使/etc/exports中的配置生效
sudo systemctl start nfs-kernel-server # 启动NFS服务
sudo systemctl enable nfs-kernel-server # 设置开机自启
第二步:在开发板(客户端)挂载 NFS 共享目录
创建挂载点
在开发板上创建一个空目录,作为挂载 NFS 共享目录的接入点。通常在/mnt下创建。1
sudo mkdir -p /mnt/nfs_share
执行挂载
使用mount命令将 Ubuntu 上的共享目录挂载到开发板的挂载点上。1
2# 格式: mount -t nfs <Ubuntu的IP地址>:<共享目录路径> <开发板的挂载点>
sudo mount -t nfs 192.168.11.??:/home/Skyforever/nfs_share /mnt/nfs_share- 将
192.168.1.10替换为你 Ubuntu 的实际 IP 地址。 - 将
/home/Skyforever/nfs_share替换为你/etc/exports中配置的共享路径。
- 将
验证挂载
使用df -h命令查看磁盘空间,如果能看到 NFS 挂载信息,则说明挂载成功。1
df -h
输出应类似:
现在,你在 Ubuntu 的
~/nfs_share目录中创建或修改任何文件,都会立刻出现在开发板的/mnt/nfs_share目录中你可以把要开发的程序直接放在共享文件夹中,这样编译完马上就可以运行,不用再用 tftp 服务麻烦的上传下载。
第三步:配置开机自动挂载(可选但推荐)
为了避免每次开发板重启后都需手动挂载,可以将其配置为开机自动挂载。
编辑 fstab 文件
在开发板上编辑/etc/fstab文件。1
sudo vi /etc/fstab
添加挂载条目
在文件末尾添加以下内容:1
<Ubuntu的IP地址>:<共享目录路径> <开发板的挂载点> nfs defaults 0 0
例如:
1
192.168.1.10:/home/Skyforever/nfs_share /mnt/nfs_share nfs defaults 0 0
保存退出后,下次开发板启动时就会自动尝试挂载该 NFS 目录。
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(或关闭)。
- 端口号 (Port): 在 PC 的设备管理器中确认 (如
TFTP (轻量级文件传输)
概念:
Trivial File Transfer Protocol,一种简单的、无认证的文件传输协议,广泛用于在 PC 和嵌入式开发板之间传输内核镜像、文件系统等。工作流程:
PC 端 (服务器): 运行 TFTP 服务器软件(如
tftpd32/tftpd64),设置好共享的文件目录和服务器监听的网卡 IP。开发板端 (客户端): 使用
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)上运行的程序的工具集(编译器、链接器等)。
配置步骤:
将工具链压缩包解压到合适位置 (如
/opt/toolchains/)。将工具链的可执行文件目录 (
bin目录) 添加到系统的PATH环境变量中,以便全局调用。1
2# 编辑 ~/.bashrc 文件,在末尾添加
export PATH=/opt/toolchains/arm-gcc-10.3/bin:$PATH使配置立即生效:
1
source ~/.bashrc
验证配置是否成功:
1
2arm-linux-gnueabihf-gcc -v
# 如果能正确显示编译器版本信息,则表示配置成功。
第二部分:Linux 命令行基础
4. 系统导航与交互
ls
释义:
list,列出目录内容。常见用法:
1
2
3
4
5
6ls # 列出当前目录的文件名
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
4cd /etc # 切换到 /etc 目录
cd # 切换到当前用户的家目录 (等同于 cd ~)
cd - # 切换到上一次所在的目录
cd .. # 切换到上一级目录
pwd
- 释义:
print working directory,显示当前所在的完整路径。
clear
- 释义: 清理终端屏幕 (快捷键:
Ctrl + L)。
echo
释义: 在终端回显文本或变量值。
常见用法:
1
2echo "Hello, World" # 输出字符串 "Hello, World"
echo $PATH # 输出环境变量PATH的值
alias
释义: 为命令创建别名。
常见用法:
1
alias ll='ls -lh'
注意: 等号两边不能有空格。此设置为临时生效,永久生效需将此行写入
~/.bashrc或~/.zshrc。
5. 获取帮助与信息
man
释义:
manual,查阅命令或系统函数的帮助手册。常见用法:
1
2
3man 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
2which ls # 输出: /usr/bin/ls
which -a qmake # 列出 $PATH 中所有匹配的qmake命令路径
date
- 释义: 查看或设置系统日期与时间。
file
- 释义: 检测并显示文件类型。
6. Shell 核心:管道与文本处理
管道 |
概念: 将前一个命令的标准输出连接到后一个命令的标准输入,形成数据流处理链。
示例:
1
2# 统计当前目录下的文件和目录总数
ls -1 | wc -l
I/O 重定向
概念: Shell 允许你改变命令的默认输入、输出和错误流。
>: 标准输出重定向。将命令的输出写入文件,会覆盖文件原有内容。>>: 标准输出追加重定向。将命令的输出追加到文件末尾。2>: 标准错误重定向。将命令的错误信息写入文件。&>或2>&1: 重定向标准输出和标准错误。将所有输出(包括错误)都重定向到同一个地方。
示例:
1
2
3
4
5
6
7
8
9
10
11# 将 ls -l 的结果写入 files.txt (覆盖)
ls -l > files.txt
# 将 echo 的内容追加到 log.txt
echo "Process finished at $(date)" >> log.txt
# 运行一个可能出错的命令,并将错误信息存入 error.log
find /root -name "secret" 2> error.log
# 将命令的所有输出(正确和错误)都写入 output.log
./my_script.sh &> output.log
sort
释义: 对输入行进行排序。
常见用法:
1
2
3sort 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
2wc file.txt # 输出: 行数 单词数 字符数 文件名
wc -l file.txt # -l: 只统计行数 (lines)
xargs
概念: 从标准输入读取数据,并将其作为参数传递给后续命令。
示例:
1
2# 查找所有.tmp文件,并使用rm命令删除它们
find . -name "*.tmp" | xargs rm
第三部分:文件系统管理
7.0 文件类型
在linux中,一共有七种文件类型
联想记忆:
我桌面的普通文件(-)太多,就建了个目录(d),又怕找不到,就创建了个链接(l)。电脑连着块(b)设备硬盘和字符©设备键盘。上网靠套接字(s),数据传输用管道(p)
7.1 文件与目录操作
创建
touch: 创建空文件或更新文件时间戳。mkdir: 创建目录。1
mkdir -p project/src/include # -p: 递归创建嵌套目录
复制与移动
cp: 复制文件或目录。1
2cp source.txt destination.txt # 复制文件
cp -r source_dir/ dest_dir/ # -r: 递归复制目录mv: 移动文件/目录,或用于重命名。
删除
rm: 删除文件或目录。此操作不可逆,请谨慎!1
2
3rm file.txt
rm -r dir_to_delete/ # -r: 递归删除目录及其内容
rm -rf important_dir/ # -f: 强制删除,不提示,极度危险!rmdir: 删除空目录。
创建链接
ln: 创建文件链接,分为硬链接和软链接(符号链接)。- 软链接 (Symbolic Link):
ln -s target link_name。像一个快捷方式,存储的是目标的路径。如果目标被删除,链接会失效。 - 硬链接 (Hard Link):
ln target link_name。是文件数据的另一个入口,与原文件共享 inode。删除原文件不影响硬链接。不能跨文件系统,不能对目录创建。
- 软链接 (Symbolic Link):
常见用法:
1
2
3
4
5# 为 /etc/nginx/sites-available/mysite 创建一个软链接到 sites-enabled 目录
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite
# 为 file.txt 创建一个硬链接 hardlink.txt
ln file.txt hardlink.txt
比较
diff: 比较两个文件或目录的差异。1
2diff 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
2find /usr/include -name "stdio.h" # 按名称查找
find . -type f -mtime -7 # 查找当前目录及子目录下,7天内修改过的普通文件grep: 在文件内容中搜索匹配指定模式的行。1
2grep "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
2zip -r archive.zip ./my_directory # -r: 递归压缩目录
unzip archive.zip
第四部分:系统管理
10. 用户与权限
用户和组管理
whoami/id: 查看当前用户信息。adduser/deluser: 添加/删除用户(交互式)。addgroup/delgroup: 添加/删除用户组。usermod: 修改用户属性。1
2
3sudo adduser jack # 添加新用户jack
sudo usermod -aG sudo jack # 将用户jack追加(-a)到sudo组(-G)中
sudo deluser --remove-home jack # 删除用户并移除其家目录信息存储: 用户信息在
/etc/passwd,密码哈希在/etc/shadow,组信息在/etc/group。
提权命令
sudo:superuser do。允许普通用户以管理员(root)或其他用户的身份执行特定命令,需要在/etc/sudoers文件中配置权限。这是推荐的提权方式。su:switch user。切换用户身份。su - <username>: 完全切换到指定用户,包括环境变量和工作目录。su -: 切换到 root 用户。
权限管理
chmod: 修改文件/目录权限。chown: 修改文件/目录所有者。chgrp: 修改文件/目录所属组。权限解读 (
ls -l):drwxr-xr--d: 类型(d:目录, -:文件, l:链接)rwx: 所有者权限 (读、写、执行)r-x: 所属组权限 (读、执行)r--: 其他人权限 (读)
数字模式 (
chmod):r=4,w=2,x=1。1
2
3chmod 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
6sudo 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
9
10
11# 显示当前Linux系统中所有运行的进程
ps -e
# 以BSD风格显示所有进程的详细信息
ps aux
# 以System V风格显示所有进程的详细信息,并以完整格式显示
ps -ef
# 常用组合:配合grep查找特定进程
ps aux | grep "nginx"
pstree
查看进程树
每一个进程都有其父母进程,但是只有系统进程没有父母进程
top
释义: 动态、实时地显示系统中各个进程的资源占用状况,类似于 Windows 的任务管理器。
常见用法:
1
2
3
4
5# 启动top,默认按CPU使用率排序
top
# 监视指定PID的进程
top -p <PID>进入界面:
按下
shift+L可以查找进程号和进程:交互操作:
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>
killall
杀死所有和此进程相关的进程,或更改进程状态
1 | # 暂停进程 |
服务管理 (systemctl)
释义: 在使用 Systemd 作为初始化系统的现代 Linux 发行版(如 Ubuntu 16.04+, CentOS 7+)中,
systemctl是管理服务(守护进程)的核心工具。常见用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 启动/停止/重启服务
sudo systemctl start nginx.service
sudo systemctl stop nginx.service
sudo systemctl restart nginx.service
# 查看服务状态
sudo systemctl status nginx.service
# 设置服务开机自启/禁止开机自启
sudo systemctl enable nginx.service
sudo systemctl disable nginx.service
# 查看所有已启动的服务
systemctl list-units --type=service
13. 磁盘与分区管理
查看磁盘使用情况
df
释义:
disk free,查看已挂载文件系统的磁盘空间使用情况。常见用法:
1
2# 以人类可读的格式 (KB, MB, GB) 显示所有已挂载分区的空间信息
df -h1
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"。
案例实战:磁盘分区与持久化挂载
- 目标: 在 Skyforever6818 开发板上,将一个闲置的大分区格式化,并挂载到
/root目录,以扩展根目录的使用空间。 - 计划操作:
mkfs.ext2 /dev/mmcblk0p7: 将分区格式化为 ext2 文件系统。mount /dev/mmcblk0p7 /root: 将格式化后的分区挂载到/root目录。
信息侦察与可行性分析
在执行任何破坏性操作(如格式化)之前,必须进行充分的信息收集和分析。
1. 查看已挂载分区 (
df -h)1
2
3
4[root@Skyforever6818 /]# 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@Skyforever6818 /]# 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的分区。 - 其大小为
6324224Blocks (约 6.3GB),是一个相当大的分区。 - 在
df -h的输出中并未看到此分区,证明它当前未被挂载。 - 结论:
/dev/mmcblk0p7是一个存在的、未挂载的大分区,硬件上可用于我们的目标。
- 系统中存在一个名为
- 分析:
风险评估与操作建议
可以执行吗? 可以,但必须极其谨慎。
风险点:
- 数据丢失:
mkfs(格式化) 是一个不可逆的操作,会清除/dev/mmcblk0p7分区上的所有数据。必须 100%确认该分区上没有重要数据。 - 挂载点覆盖: 将一个分区挂载到非空目录(如
/root)上,会导致该目录原有的内容被临时隐藏。在挂载期间,访问/root将直接访问新分区的内容,原有的文件将不可见,直到分区被卸载。 - 文件系统选择:
ext2: 无日志功能,写入性能稍高,适合资源有限的嵌入式设备。但断电时数据丢失或文件系统损坏的风险更高。ext3/ext4: 有日志功能,能更好地保证数据一致性,更耐受意外断电。推荐在支持的设备上使用ext4。
- 数据丢失:
最佳实践建议:
使用新的空目录作为挂载点: 这是最安全、最推荐的做法,可以避免覆盖系统重要目录。
1
2# 创建一个新的、专门的挂载点
mkdir /mnt/data执行格式化:
1
2
3
4
5# 格式化为ext2 (按原计划)
mkfs.ext2 /dev/mmcblk0p7
# (推荐) 格式化为更可靠的ext4
mkfs.ext4 /dev/mmcblk0p7执行挂载:
1
2
3
4
5# 挂载到推荐的新挂载点
mount /dev/mmcblk0p7 /mnt/data
# (按原计划,但有风险) 挂载到/root
mount /dev/mmcblk0p7 /root验证: 挂载后,使用
df -h确认分区是否已成功挂载。1
2df -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,其他分区为2,0表示不检查。
- 字段解释:
3. 测试配置 (非常重要):
在重启之前,执行mount -a命令。此命令会读取/etc/fstab并尝试挂载所有未挂载的条目。1
mount -a
- 如果此命令没有任何报错,说明
fstab文件语法正确。 - 如果报错,必须根据错误信息修正
fstab文件,否则系统可能无法正常启动!
- 如果此命令没有任何报错,说明
4. 验证与重启:
df -h再次确认挂载成功。reboot重启系统,检查开机后分区是否被自动挂载。
核心忠告: 操作
/etc/fstab文件前,请确保你理解每个字段的含义。一个错误的配置可能导致系统启动失败,需要进入救援模式才能修复。
第五部分:网络管理
14. 网络配置与信息查看
hostname
释义: 查看或临时设置系统的主机名。
常见用法:
1
2
3
4# 查看当前主机名
hostname
# 临时设置主机名(重启后失效)
sudo hostname new-name
ifconfig (传统工具)
释义:
interface configuration,用于查看和配置网络接口(在较新的系统中,推荐使用ip命令)。常见用法:
1
2
3
4
5
6# 查看当前所有已激活的网络接口信息
ifconfig
# 查看所有网络接口,包括未激活的
ifconfig -a
# 临时设置IP地址 (重启后失效)
sudo ifconfig ens33 192.168.1.100 netmask 255.255.255.0
ip (现代网络配置工具)
释义:
ip命令是iproute2工具包的一部分,旨在取代ifconfig,route,arp等传统网络工具。功能更强大,信息更全面。常见子命令:
ip addr(或ip a): 管理 IP 地址和网络接口。1
2
3ip a # 查看所有接口的IP地址信息 (等价于 ifconfig)
sudo ip addr add 192.168.1.101/24 dev ens33 # 临时添加IP
sudo ip addr del 192.168.1.101/24 dev ens33 # 临时删除IPip link: 管理网络接口本身(物理层/数据链路层)。1
2
3ip link show # 查看所有接口状态
sudo ip link set ens33 up # 启用接口
sudo ip link set ens33 down # 禁用接口ip route(或ip r): 管理路由表。1
2ip r # 查看路由表 (等价于 route -n)
sudo ip route add default via 192.168.1.1 # 临时添加默认网关
15. 网络诊断
网络连通性 (ping)
释义: 向目标主机发送 ICMP ECHO_REQUEST 包,测试网络连通性。
常见用法:
1
2ping 8.8.8.8 # 测试与IP地址的连通性
ping -c 4 baidu.com # 发送4个包后停止
路由追踪 (traceroute)
释义: 显示数据包到达目标主机所经过的路由路径及延迟。
常见用法:
1
traceroute www.google.com
DNS 查询 (host, nslookup, dig)
释义: 用于查询域名系统(DNS)记录。
常见用法:
1
2
3host baidu.com # 简单查询A记录
nslookup baidu.com # 交互式或非交互式查询
dig baidu.com # 提供最详细的DNS查询信息
查看网络连接 (netstat, ss)
释义: 查看网络连接、路由表、接口统计等信息。
ss是netstat的现代替代品,速度更快。常见用法:
1
2
3
4# 列出所有监听的TCP/UDP端口,并显示程序名 (-p)
sudo netstat -tulnp
# 使用ss达到同样效果,推荐使用
sudo ss -tulnp
16. 防火墙管理 (UFW)
释义:
Uncomplicated Firewall,Ubuntu 默认的防火墙管理工具,旨在简化iptables的配置。常见用法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23# 查看防火墙状态
sudo ufw status verbose
# 启用/禁用防火墙
sudo ufw enable
sudo ufw disable
# 设置默认规则 (推荐:默认拒绝所有入站连接,允许所有出站)
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 允许/拒绝特定端口或服务
sudo ufw allow 22/tcp # 允许SSH (端口22, TCP协议)
sudo ufw allow 80 # 允许HTTP (端口80)
sudo ufw allow 'Nginx Full' # 按应用配置文件允许
sudo ufw deny 3306 # 拒绝MySQL (端口3306)
# 删除规则
sudo ufw delete allow 22/tcp
# 按编号删除规则
sudo ufw status numbered # 先查看规则编号
sudo ufw delete 1 # 删除编号为1的规则















