Ubuntu Shell 命令大全及说明教程

IT 技术 79 阅读 更新于 2026-09-04 07:12

115

命令总数

13

分类数

115

当前显示

输入关键词快速搜索

📊 系统信息与硬件 (15)

uname

显示系统内核及硬件信息

基础

打印当前系统内核版本、主机名、操作系统名称及硬件架构等详细信息。

参数说明
-a显示所有信息 (all)
-r仅显示内核发行版本号
-s显示内核名称 (如 Linux)
-n显示主机名 (nodename)
-m显示机器硬件架构 (如 x86_64)
-o显示操作系统 (如 GNU/Linux)
uname -a          # Linux myhost 5.15.0-76-generic #83-Ubuntu SMP ... x86_64 GNU/Linux
uname -r          # 5.15.0-76-generic
uname -m          # x86_64

lsb_release / cat /etc/os-release

显示Ubuntu版本信息

基础

LSB (Linux Standard Base) 工具,用于查看当前Ubuntu发行版的详细版本号和代号 (如 22.04 Jammy Jellyfish)。/etc/os-release 是更现代的标准文件。

lsb_release -a
cat /etc/os-release
cat /etc/issue

hostnamectl

查看和设置主机名

systemd

systemd 提供的主机名管理工具,可显示系统信息并修改主机名。

hostnamectl                    # 查看完整信息
sudo hostnamectl set-hostname newname  # 修改主机名
hostnamectl status

df

查看磁盘空间使用情况

常用

disk free,显示所有已挂载文件系统的磁盘空间使用情况。

参数说明
-h以人类可读的方式 (GB/MB) 显示
-T显示文件系统类型 (ext4, xfs 等)
-i显示 inode 使用情况 (而非块使用)
-t TYPE仅显示指定类型的文件系统
df -hT
df -i
df -h --output=source,size,used,avail /home

du

查看文件和目录的磁盘使用量

常用

disk usage,估算文件及目录空间使用量。

du -sh *                    # 当前目录下各项的总大小
du -sh /var/log             # 查看目录大小
du -ah --max-depth=1 /home  # 一层深度,显示所有文件
du -sh /* 2>/dev/null | sort -hr | head -10  # 根目录各子目录大小排序

free

查看内存使用情况

常用

显示物理内存 (RAM) 和交换空间 (Swap) 的总量、已用量、空闲量及缓存占用。

参数说明
-h人类可读
-s N每 N 秒刷新一次
-t显示总计行
free -h
free -ht        # 带总计
free -s 2       # 每2秒刷新

💡 注意:

Linux 会积极使用空闲内存做缓存 (buff/cache),因此 "used" 很高通常是正常现象。真正可用内存应参考 "available" 列。

top / htop

实时系统资源监控

常用

动态显示系统中各个进程的资源占用状况 (CPU、内存)。htop 是更现代化的交互式版本,支持鼠标操作和彩色显示。

top                # 按 q 退出, P 按 CPU 排序, M 按内存排序
htop               # 需安装: sudo apt install htop

💡 top 快捷键:

  • q - 退出
  • k - 杀死进程 (输入 PID)
  • r - 重新设置优先级 (renice)
  • 1 - 显示每个 CPU 核心的使用率
  • c - 显示完整命令行

vmstat

虚拟内存统计

性能

报告虚拟内存统计信息,包括进程、内存、分页、块 I/O、陷阱和 CPU 活动。

vmstat 1 5         # 每秒刷新一次,共 5 次
vmstat -s          # 显示内存统计汇总
vmstat -d          # 显示磁盘统计

iostat / iotop

I/O 统计与监控

性能

监控磁盘 I/O 性能,帮助识别磁盘瓶颈。需要安装 sysstat 包。

sudo apt install sysstat
iostat -x 1        # 每秒显示详细 I/O 统计
iotop              # 交互式 I/O 监控 (类似 top,需 root)

lscpu / lshw / lspci / lsusb / lsblk

查看硬件信息

硬件

一组查看硬件信息的工具:

命令用途
lscpuCPU 架构、核心数、线程数、缓存、指令集
lshw完整硬件清单 (需 sudo, -short 简化显示)
lspciPCI 总线设备 (显卡、网卡等)
lsusbUSB 设备列表
lsblk块设备 (磁盘、分区) 树状结构
lsmem内存插槽信息
lscpu
sudo lshw -short
lspci -v | grep -i vga
lsusb
lsblk -f

uptime

查看系统运行时间与负载

基础

显示系统已经运行了多长时间,当前登录的用户数以及过去 1、5、15 分钟的系统平均负载 (load average)。

uptime
uptime -p         # 仅显示运行时长 (如 "up 2 weeks, 3 days")
uptime -s         # 系统启动时间

💡 负载解读:

1 分钟负载若持续大于 CPU 核心数,说明系统过载。4 核机器上 load > 4 即满载。

dmesg / journalctl

内核与系统日志

排错

内核环形缓冲区日志和 systemd 日志,排错必备。

dmesg | tail -50                 # 最后 50 条内核消息
dmesg | grep -i error            # 查找错误
dmesg -T                         # 带人类可读时间戳
dmesg -c                         # 读取并清除缓冲区

sudo journalctl -xe              # 最近错误 + 额外信息
sudo journalctl -u nginx.service # 特定服务日志
sudo journalctl -f               # 实时追踪
sudo journalctl --since "1 hour ago"
sudo journalctl --since today

lsmod / modinfo / modprobe

内核模块管理

高级

管理内核模块 (驱动)。

lsmod                            # 列出已加载模块
modinfo nvidia                   # 查看模块详细信息
sudo modprobe vfat               # 加载模块
sudo modprobe -r vfat            # 卸载模块

dmidecode

读取 SMBIOS/DMI 硬件信息

高级

从 BIOS 的 DMI 表中读取硬件信息(厂商、序列号、内存条详情等),需要 root。

sudo dmidecode -t bios           # BIOS 信息
sudo dmidecode -t system         # 系统制造商、产品名
sudo dmidecode -t memory         # 内存条详情
sudo dmidecode -t processor      # CPU 详情
sudo dmidecode | less            # 完整信息

sar / mpstat / pidstat

sysstat 性能监控套件

高级

sysstat 包提供的高级性能分析工具。

sudo apt install sysstat
sar -u 1 5         # CPU 使用率 (每秒1次共5次)
sar -r 1 5         # 内存使用率
mpstat -P ALL 1    # 每个 CPU 核心状态
pidstat -u 1       # 每个进程的 CPU 使用

📁 文件与目录管理 (17)

ls

列出目录内容

基础

最常用的目录浏览命令,支持丰富的选项。

参数说明
-l长格式 (权限、所有者、大小、日期)
-a显示隐藏文件 (以 . 开头)
-h人类可读的大小 (K/M/G)
-t按修改时间排序 (最新在前)
-S按文件大小排序 (最大在前)
-r逆序排列
-R递归列出子目录
-d仅显示目录本身而非内容
--color彩色输出 (目录蓝,可执行绿)
ls -lah                 # 经典用法
ls -lS                  # 按大小排序
ls -lt | head -10       # 最近修改的 10 个文件
ls -l --time-style=long-iso  # ISO 日期格式

cd / pwd

切换与显示当前目录

基础

cd (change directory) 用于切换路径。pwd (print working directory) 打印当前绝对路径。

cd /var/log             # 绝对路径
cd ..                   # 返回上一级
cd ~ 或 cd              # 返回主目录
cd -                    # 返回上一次所在的目录
cd ~/Documents          # ~ 代表主目录
cd "dir with space"     # 带空格的路径需要引号
pwd                     # 输出: /home/user

mkdir / rmdir

创建与删除空目录

基础

mkdir 创建目录,-p 创建多级嵌套。rmdir 仅能删除空目录。

mkdir newdir
mkdir -p project/src/main/com
mkdir -p a/{b,c,d}/e     # 同时创建多个: a/b/e, a/c/e, a/d/e
mkdir -m 755 mydir       # 创建时指定权限
rmdir empty_folder

touch

创建空文件/更新时间戳

基础

若文件不存在则创建空文件;若存在则更新访问和修改时间戳到当前时间。

touch newfile.txt
touch -d "2024-01-15 10:30" file.txt   # 设置特定时间
touch -r ref_file target_file          # 复制参考文件时间戳
touch -a file.txt                      # 仅修改访问时间
touch -m file.txt                      # 仅修改修改时间

cp

复制文件或目录

常用

复制文件和目录。使用 -r 递归复制目录。

参数说明
-r递归复制目录
-a归档模式 (= -dR --preserve=all,保留所有属性)
-i交互模式 (覆盖前询问)
-f强制覆盖
-u仅当源比目标新时才复制 (增量更新)
-v显示过程
-p保留权限、所有权、时间戳
cp file.txt file.bak
cp -r src/ dest/
cp -a /etc /backup/etc
cp -u *.log /tmp/backup/  # 增量备份

mv

移动文件或重命名

常用

移动文件/目录,也可用于重命名。

mv oldname.txt newname.txt     # 重命名
mv file.txt /target/dir/       # 移动
mv -i a.txt b.txt              # 覆盖前询问
mv -n a.txt b.txt              # 不覆盖已存在的目标
mv -u a.txt b.txt              # 仅当源更新时移动

rm

删除文件或目录

常用

危险

删除文件。删除后不可恢复,请谨慎使用。

参数说明
-r递归删除目录
-f强制删除,不提示
-i每次删除前询问
-I删除超过 3 个文件或递归删除前询问一次
-d删除空目录 (同 rmdir)
rm file.txt
rm -i *.tmp
rm -rf unwanted_dir/
rm -rf /*  # 永远不要执行!会删除整个系统!

⚠️ 警告:

rm

删除的文件不会进入回收站。执行

rm -rf

前请再三确认路径。建议用

trash-cli

作为安全的替代品。

cat / less / more / head / tail

查看文件内容

常用

各种查看文件内容的工具,各有适用场景。

命令用途
cat输出整个文件到终端 (适合小文件)
less分页浏览 (支持上下翻页、搜索,推荐)
more只支持向下翻页 (less 的前身)
head显示文件开头 (默认 10 行)
tail显示文件末尾 (默认 10 行)
cat /etc/passwd
cat file1 file2 > merged.txt     # 合并文件
less /var/log/syslog             # 按 q 退出, / 搜索
head -n 20 config.yaml
head -c 100 file.bin             # 显示前 100 字节
tail -f /var/log/nginx/access.log  # 实时追踪日志
tail -n 50 error.log

💡 less 快捷键:

  • 空格f - 下一页
  • b - 上一页
  • g - 跳到开头,G - 跳到末尾
  • /pattern - 向下搜索,?pattern - 向上搜索
  • n - 下一个匹配,N - 上一个匹配
  • q - 退出

find

强大的文件搜索工具

常用

根据名称、类型、大小、时间、权限等各种条件在目录树中搜索文件。

选项说明
-name "pattern"按名称匹配 (大小写敏感)
-iname "pattern"按名称匹配 (忽略大小写)
-type f/d/l按类型: 文件/目录/链接
-size +10M / -1k按大小 (大于 10M / 小于 1K)
-mtime +7修改时间在 7 天前
-mmin -30修改时间在 30 分钟内
-user name按所有者
-perm 644按权限
-empty空文件或空目录
-exec cmd {} \;对结果执行命令
-delete删除匹配文件
-maxdepth N限制搜索深度
# 查找当前目录下所有 .conf 文件
find . -name "*.conf"

# 查找 /var/log 下大于 50M 的文件
find /var/log -type f -size +50M

# 查找并删除 7 天前的临时文件
find /tmp -name "*.tmp" -mtime +7 -exec rm {} \;

# 查找空文件
find . -type f -empty

# 查找属于 root 的 SUID 文件
find / -perm -4000 -user root 2>/dev/null

# 查找并压缩
find . -name "*.log" -exec gzip {} \;

locate / updatedb

快速文件定位 (数据库)

常用

基于预建数据库搜索,比 find 快得多,但可能不包含最新创建的文件。

sudo apt install mlocate
sudo updatedb          # 更新数据库
locate nginx.conf
locate -i "readme"     # 忽略大小写

ln

创建硬链接与软链接

常用

创建文件的链接。软链接 (symbolic link) 类似于 Windows 快捷方式,硬链接 (hard link) 共享相同的 inode。

类型特点
软链接可跨文件系统,可指向目录,源删除则失效
硬链接必须同文件系统,不可指向目录,源删除仍可访问
ln -s /path/to/target /path/to/symlink   # 创建软链接
ln original.txt hardlink.txt              # 创建硬链接
ls -li                                    # 查看 inode 号验证

file

识别文件类型

工具

通过读取文件头 (magic number) 判断文件真实类型,与扩展名无关。

file /bin/ls                    # ELF 64-bit LSB executable
file image.jpg                  # JPEG image data
file mystery_file               # 识别未知文件

which / whereis / type / command

定位命令

工具

查找命令的可执行文件、源码和手册页位置。

which python3                   # /usr/bin/python3
which -a python3                # 显示所有匹配
whereis python3                 # python: /usr/bin/python3 /usr/lib/python3 /usr/share/man/man1/python3.1.gz
type ls                         # ls is aliased to 'ls --color=auto'
type -a cd                      # cd 是 shell 内置命令
command -v git                  # 类似 which,shell 内置

tree

树状显示目录结构

工具

以树状图显示目录结构,非常直观。需安装。

sudo apt install tree
tree                            # 显示当前目录树
tree -L 2                       # 只显示 2 层
tree -a                         # 包括隐藏文件
tree -d                         # 仅显示目录
tree -h                         # 显示文件大小
tree -I "node_modules"          # 排除匹配模式

diff / cmp

比较文件差异

工具

比较两个文件(或目录)的内容差异。

diff file1.txt file2.txt
diff -u file1.txt file2.txt     # unified 格式 (patch 常用)
diff -r dir1/ dir2/             # 递归比较目录
diff -i file1.txt file2.txt     # 忽略大小写
diff -w file1.txt file2.txt     # 忽略空白差异
cmp file1 file2                 # 逐字节比较,找到第一个差异就停止

rename

批量重命名文件

工具

Perl 风格的批量重命名工具,使用正则表达式。

sudo apt install rename
rename 's/\.jpeg$/.jpg/' *.jpeg      # jpeg 改 jpg
rename 's/^old_//' old_*.txt         # 删除前缀
rename 's/ /_/g' *.txt               # 空格改下划线
rename -n 's/foo/bar/' *             # -n 模拟运行,不实际改名
rename 'y/A-Z/a-z/' *                # 转小写

stat

显示文件详细状态信息

工具

显示比 ls -l 更详细的文件信息,包括 inode、链接数、访问时间、创建时间等。

stat filename.txt
stat -c "%n: %A, %s bytes" file.txt  # 自定义输出格式
stat /                                 # 文件系统信息

🔐 文件权限管理 (5)

chmod

修改文件/目录权限

常用

change mode,支持数字法和符号法。

数字法 (八进制): r=4, w=2, x=1

权限数值说明
---0无权限
--x1仅执行
-w-2仅写入
-wx3写入+执行
r--4仅读取
r-x5读取+执行
rw-6读取+写入
rwx7全部权限

符号法: u(属主), g(属组), o(其他), a(所有); +加, -减, =设置; r/w/x

# 数字法
chmod 755 script.sh          # rwxr-xr-x
chmod 644 config.conf        # rw-r--r--
chmod 700 private_dir        # rwx------
chmod -R 644 /var/www/html   # 递归

# 符号法
chmod u+x script.sh          # 属主加执行
chmod a-w file.txt           # 所有人去写
chmod g=rwx dir              # 属组设置为 rwx
chmod +x *.sh                # 批量加执行

# 特殊权限
chmod 4755 prog              # SUID (4000),运行时以文件所有者身份
chmod 2755 dir               # SGID (2000),新文件继承属组
chmod 1777 /tmp              # Sticky Bit (1000),只能属主删除

chown / chgrp

修改属主与属组

常用

更改文件的所有者 (Owner) 和所属用户组 (Group)。通常需要 root 权限。

chown user:group filename.txt
chown -R www-data:www-data /var/www/html
chgrp developers project/
chown --reference=ref.txt target.txt  # 复制参考文件的所有者

umask

默认权限掩码

进阶

控制新创建文件/目录的默认权限。新文件权限 = 666 - umask,新目录权限 = 777 - umask。

umask             # 查看当前 umask (常见为 022)
umask 077         # 设置更严格的 umask (新文件 600,目录 700)
# 永久设置: 写入 ~/.bashrc 或 /etc/profile

chattr / lsattr

扩展文件属性 (immutable)

高级

设置/查看 ext2/3/4 文件系统的扩展属性,超越普通权限控制。即便是 root 也不能修改 immutable 文件。

属性说明
iimmutable: 不可修改、删除、重命名
aappend-only: 仅可追加
Ssync: 立即同步到磁盘
sudo chattr +i critical.conf   # 设为不可修改
lsattr critical.conf           # 查看属性: ----i---------
sudo chattr -i critical.conf   # 解除 immutable
sudo chattr +a /var/log/app.log  # 仅允许追加

getfacl / setfacl

POSIX 访问控制列表 (ACL)

高级

标准 ugo 权限之外的更细粒度控制,可为特定用户/组单独设置权限。

getfacl /shared/dir              # 查看 ACL
setfacl -m u:alice:rwx /shared/dir     # 给 alice rwx
setfacl -m g:devs:r-x /shared/dir      # 给 devs 组 r-x
setfacl -R -m d:u:bob:r-x dir          # 默认 ACL (新文件继承)
setfacl -b /shared/dir                 # 移除所有 ACL

📝 文本处理工具 (10)

grep / egrep

强大的文本搜索

核心

使用正则表达式搜索文本模式。常配合管道符使用。egrep 等价于 grep -E (扩展正则)。

参数说明
-i忽略大小写
-r / -R递归搜索目录
-n显示行号
-v反向选择 (排除匹配的行)
-c仅显示匹配行数
-l仅显示包含匹配的文件名
-w仅匹配整个单词
-o仅显示匹配的部分
-A N / -B N / -C N显示匹配后/前/前后 N 行
-E使用扩展正则表达式
-F固定字符串 (不用正则)
--color彩色高亮匹配
grep -rn "error" /var/log/
grep -i "ubuntu" /etc/os-release
ps aux | grep -v grep | grep nginx
grep -E "^[a-z]+[0-9]+$" file.txt
grep -c "success" log.txt
grep -A 5 "Exception" app.log

awk

模式扫描与处理语言

核心

强大的列处理工具,擅长按列提取、统计和格式化输出。

# 打印 /etc/passwd 的用户名 (第1列, 以:为分隔符)
awk -F: '{print $1}' /etc/passwd

# 打印用户名和主目录
awk -F: '{printf "%-15s %s\n", $1, $6}' /etc/passwd

# 求和、平均
awk '{sum+=$1} END {print sum}' numbers.txt
awk '{sum+=$1; n++} END {print sum/n}' numbers.txt

# 条件过滤
awk -F: '$3 > 1000 {print $1, $3}' /etc/passwd

# 显示 df 中的挂载点和用法
df -h | awk 'NR>1 {print $6, $2, $5}'

# BEGIN/END 块
awk 'BEGIN {print "Start"} {print $0} END {print "End"}' file

sed

流编辑器

核心

流编辑器,擅长按行处理文本:替换、删除、插入、转换等。

命令说明
s/old/new/g替换 (g=全局)
Nd删除第 N 行
Np打印第 N 行
/pattern/d删除匹配行
/pattern/!d仅保留匹配行
i\text在匹配行前插入
a\text在匹配行后追加
# 替换
sed 's/foo/bar/g' file.txt
sed -i 's/foo/bar/g' file.txt       # 直接修改文件
sed 's/foo/bar/3' file.txt          # 仅替换每行第3次出现

# 删除
sed '2,5d' file.txt                 # 删除第 2-5 行
sed '/^$/d' file.txt                # 删除空行
sed '/pattern/d' file.txt           # 删除匹配行

# 打印
sed -n '10,20p' file.txt            # 只打印 10-20 行

# 插入
sed '3i\New line here' file.txt     # 在第 3 行前插入

# 提取
sed -n 's/^User=\(.*\)/\1/p' config.ini

💡 正则分隔符:

除了

/

,还可以用

#

|

等,处理含 / 的路径很方便:

sed 's#/old/path#/new/path#'

sort / uniq

排序与去重

常用

sort 对文本行排序;uniq 移除连续重复行 (通常先排序再去重)。

sort 参数说明
-r逆序
-n数字排序
-h人类可读数字 (1K, 2M)
-f忽略大小写
-k N按第 N 列排序
-t CHAR指定分隔符
-u输出唯一行 (去重)
sort file.txt
sort -rn numbers.txt
sort -k2 -t, data.csv              # 按第 2 列排序,逗号分隔
sort -u file.txt                   # 排序并去重

# uniq
uniq sorted.txt
uniq -c sorted.txt                 # 统计重复次数
uniq -d sorted.txt                 # 仅显示重复行

# 统计访问日志中的 IP 访问排名
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

cut / paste / join

列操作

工具

cut 提取列,paste 横向合并文件,join 按关键字连接两个已排序文件。

# cut
cut -d: -f1 /etc/passwd              # 第一列 (:分隔)
cut -d' ' -f1,3 file.txt             # 第 1 和第 3 列
cut -c1-10 file.txt                  # 第 1-10 个字符

# paste
paste file1.txt file2.txt            # 横向合并 (tab 分隔)
paste -d, file1.txt file2.txt        # 用逗号分隔

# join (两文件必须已按关键字排序)
join file1.txt file2.txt

tr

字符转换与删除

工具

translate,对字符进行一对一的转换、压缩或删除。

echo "Hello" | tr 'a-z' 'A-Z'      # 转大写: HELLO
echo "Hello" | tr -d 'l'           # 删除字符: Heo
echo "a  b   c" | tr -s ' '        # 压缩空格: a b c
echo "hello" | tr 'helo' 'HELO'    # 字符替换: HELLO
cat file.txt | tr '\r\n' '  '      # 把换行改为空格

wc / nl / tee

计数、行号与分流

工具

文本统计与小工具。

# wc (word count)
wc file.txt                         # 行数、单词数、字节数
wc -l file.txt                      # 仅行数
wc -w file.txt                      # 仅单词数
wc -c file.txt                      # 仅字节数

# nl (number lines)
nl file.txt
nl -ba file.txt                     # 包括空行也编号
nl -s": " file.txt                  # 自定义分隔符

# tee (分流输出,同时写到文件和终端)
ls | tee output.txt                 # 显示到终端并保存
echo "hi" | sudo tee /etc/file      # 以 root 权限写文件
cmd | tee -a log.txt                # 追加模式

xargs

将标准输入转为命令参数

工具

从标准输入读取项目并执行指定命令。常与 find 配合,解决参数列表过长问题。

# 删除所有 .tmp 文件
find . -name "*.tmp" | xargs rm

# 处理含空格的文件名 (-0 与 -print0 配合)
find . -name "*.log" -print0 | xargs -0 rm

# 指定占位符
cat urls.txt | xargs -I {} wget {}

# 并行执行 (-P)
cat files.txt | xargs -P 4 -I {} gzip {}

# 每 N 个参数执行一次
echo "a b c d e" | xargs -n 2 echo

strings

从二进制文件中提取字符串

工具

从二进制文件(可执行文件、库、core dump)中抽取可读字符串。

strings /bin/ls | grep -i version
strings binary_file | head -20

comm / diff3 / patch

文件比较与补丁

工具

文件比较与补丁应用工具集。

# comm (比较两个已排序文件)
comm file1 file2             # 三列: 仅 file1、仅 file2、共有
comm -12 file1 file2         # 仅共有行

# diff3 (三文件比较)
diff3 file1 file2 file3

# 生成并应用补丁
diff -u old.c new.c > fix.patch
patch -p1 < fix.patch

⚙️ 进程与服务管理 (11)

ps

查看进程快照

核心

显示系统中运行进程的当前快照。

参数说明
auxBSD 风格: a=所有, u=用户信息, x=包括无 tty 的
-efSystem V 风格: 完整格式
-p PID指定进程 ID
-u user指定用户的进程
-f完整格式 (包含 PPID)
--forest树状显示父子关系
ps aux
ps -ef
ps aux | grep nginx
ps -u www-data
ps --forest -eo pid,ppid,cmd
ps -p 1234                       # 特定 PID

kill / pkill / killall

终止进程

核心

向进程发送信号,默认为 SIGTERM (15) 请求终止。

信号编号说明
SIGHUP1重新加载配置
SIGINT2中断 (Ctrl+C)
SIGQUIT3退出并生成 core dump
SIGKILL9强制终止 (不能被捕获)
SIGTERM15优雅终止 (默认)
SIGSTOP19暂停进程
SIGCONT18继续进程
kill 1234                  # 优雅终止
kill -9 1234               # 强制杀死
kill -HUP 1234             # 重新加载配置
pkill nginx                # 按进程名杀死
pkill -f "python script"   # 按完整命令行匹配
killall nginx              # 杀死所有同名进程
killall -u user            # 杀死某用户的所有进程

systemctl

Systemd 服务管理器

核心

Ubuntu 16.04+ 默认的初始化系统和服务管理器。

命令说明
start/stop/restart UNIT启动/停止/重启服务
reload UNIT重新加载配置 (不中断服务)
status UNIT查看服务状态
enable/disable UNIT启用/禁用开机自启
mask/unmask UNIT彻底禁用/解除
list-units列出已加载的单元
list-unit-files列出所有单元文件
daemon-reload重新加载 systemd 配置
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl restart nginx
sudo systemctl reload nginx
sudo systemctl status ssh
sudo systemctl enable docker
sudo systemctl disable docker
sudo systemctl daemon-reload
systemctl list-units --type=service --state=running
systemctl list-unit-files | grep enabled

journalctl

查询 systemd 日志

核心

查看系统和守护进程的日志,功能强大。

sudo journalctl                         # 所有日志
sudo journalctl -u nginx.service        # 特定服务
sudo journalctl -xe                     # 最近错误
sudo journalctl -f                      # 实时追踪
sudo journalctl --since "2024-01-01"
sudo journalctl --since "1 hour ago"
sudo journalctl --since today
sudo journalctl -p err                  # 仅错误级别 (emerg, alert, crit, err, warning, notice, info, debug)
sudo journalctl -b                      # 本次启动以来的日志
sudo journalctl -b -1                   # 上次启动的日志
sudo journalctl --disk-usage            # 日志占用空间
sudo journalctl --vacuum-size=100M      # 清理日志到 100M

bg / fg / jobs

后台/前台任务管理

shell

管理作业 (job) 的状态切换。

long_cmd &                 # 放到后台运行
Ctrl+Z                     # 暂停当前前台任务 (放入 stopped 状态)
jobs                       # 列出作业
bg %1                      # 将作业 1 放到后台继续运行
fg %1                      # 将作业 1 切回前台
kill %1                    # 杀死作业 1

nohup / disown

持久运行命令

shell

使进程在用户注销或关闭终端后依然继续运行。

nohup ./long_running_script.sh > output.log 2>&1 &
# 标准输出+标准错误都写到 output.log

# disown: 将已启动的作业从当前 shell 脱离
long_cmd &
disown %1

lsof

列出打开的文件与端口

网络

"List Open Files",Linux 下一切皆文件,所以 lsof 功能强大。

sudo lsof                    # 所有打开的文件
sudo lsof /var/log/syslog    # 谁打开了这个文件
sudo lsof -i :80             # 占用 80 端口的进程
sudo lsof -i tcp:22
sudo lsof -u username        # 特定用户打开的文件
sudo lsof -p 1234            # 特定 PID 打开的文件
sudo lsof -c nginx           # 特定命令打开的文件

nice / renice

调整进程优先级

工具

设置进程的 nice 值 (-20 到 19),越小优先级越高。

nice -n 10 ./low_priority_task       # 降低优先级启动
sudo nice -n -5 ./high_priority_task # 提高优先级 (需 root)
renice -n 5 1234                     # 修改运行中进程的 nice 值

crontab / at

定时任务

工具

cron 用于周期性定时任务;at 用于一次性任务。

# crontab
crontab -e                   # 编辑当前用户的 cron
crontab -l                   # 列出 cron
crontab -r                   # 删除所有 cron
sudo crontab -u user -e      # 编辑指定用户的 cron

# 格式: 分 时 日 月 周 命令
0 2 * * * /path/to/backup.sh       # 每天凌晨 2 点
*/15 * * * * /path/to/script.sh    # 每 15 分钟
0 */4 * * * command                # 每 4 小时
0 9 * * 1-5 command                # 工作日 9 点
0 0 1 * * command                  # 每月 1 号

# at (一次性)
echo "backup.sh" | at 23:00
at now + 1 hour
atq                              # 列出待执行任务
atrm 5                           # 删除任务 5

screen / tmux

终端复用器

工具

终端多路复用器,即使断开 SSH 也能保持会话。

# screen
sudo apt install screen
screen -S mysession        # 创建命名会话
Ctrl+A, D                  # 分离 (detach)
screen -ls                 # 列出会话
screen -r mysession        # 恢复 (reattach)

# tmux (更现代)
sudo apt install tmux
tmux new -s mysession
Ctrl+B, D                  # 分离
tmux ls                    # 列出
tmux attach -t mysession   # 恢复
Ctrl+B, %                  # 垂直分割
Ctrl+B, "                  # 水平分割
Ctrl+B, o                  # 切换窗格

strace

追踪系统调用

调试

追踪进程的系统调用和信号,调试程序必备。

sudo apt install strace
strace ls                    # 追踪 ls 的系统调用
strace -p 1234               # 追踪已运行的进程
strace -e open ls            # 仅追踪 open 调用
strace -o trace.log ls       # 输出到文件

🌐 网络管理 (12)

ip

现代网络配置工具

核心

iproute2 包提供的工具,替代了 ifconfig/route/arp 等旧命令。

ip addr show           # 或 ip a (显示 IP 地址)
ip link show           # 显示网络接口状态
ip route show          # 或 ip r (路由表)
ip neigh show          # ARP 表
ip -s link show eth0   # 带流量统计

# 配置
sudo ip addr add 192.168.1.100/24 dev eth0
sudo ip link set eth0 up
sudo ip link set eth0 down
sudo ip route add default via 192.168.1.1

ss / netstat

网络连接与端口

核心

ss (socket statistics) 是现代替代 netstat 的工具,速度更快。

ss -tulnp                # 监听端口 + 进程 (常用)
ss -tuna                 # 所有 TCP/UDP 连接
ss -l                    # 仅监听
ss -p                    # 显示进程
ss state established     # 按状态过滤
ss -s                    # 统计信息

# netstat (老命令)
netstat -tulnp
netstat -rn              # 路由表
netstat -i               # 接口统计

ping / traceroute / mtr

网络连通性与路径测试

诊断

测试网络连通性和追踪数据包路径。

ping -c 4 google.com              # 发送 4 个 ICMP 包
ping -s 1500 google.com           # 自定义包大小
ping6 google.com                  # IPv6
traceroute google.com             # 路径追踪 (UDP)
traceroute -I google.com          # ICMP 模式
mtr google.com                    # 综合 ping+traceroute (需安装)
sudo apt install mtr

curl

强大的 URL 客户端

核心

支持众多协议的 URL 客户端,可上传下载、发送请求等。

参数说明
-O用远端文件名保存
-o file指定保存文件名
-L跟随重定向
-I仅显示响应头
-X METHOD指定 HTTP 方法
-H "Header"添加请求头
-d "data"POST 数据
-u user:pass认证
-k忽略 SSL 验证
-v详细输出
-C -断点续传
curl https://example.com                  # GET
curl -O https://example.com/file.tar.gz   # 下载
curl -I https://example.com               # 查看响应头
curl -X POST -d '{"key":"value"}' -H "Content-Type: application/json" https://api.example.com/data
curl -u user:pass https://api.com
curl -C - -O https://example.com/big.iso  # 断点续传

wget

非交互式下载工具

工具

功能强大的命令行下载工具,支持递归下载整个网站。

wget URL
wget -c URL                      # 断点续传
wget -b URL                      # 后台下载
wget -i urls.txt                 # 批量下载
wget -r -np -k https://site.com/ # 递归镜像站点
wget -O file.iso URL             # 指定保存名
wget --limit-rate=500k URL       # 限速下载
wget -q URL                      # 静默模式

ssh / scp / sftp / rsync

远程登录与文件传输

核心

安全的远程访问和文件传输工具集。

# SSH 远程登录
ssh user@192.168.1.100
ssh -p 2222 user@host           # 自定义端口
ssh -i ~/.ssh/key.pem user@host # 指定密钥
ssh -L 8080:localhost:80 user@host  # 本地端口转发
ssh -R 9000:localhost:3000 user@host # 远程端口转发
ssh -X user@host                # X11 转发 (运行图形程序)

# SCP 文件传输
scp local_file user@host:/remote/path
scp -r local_dir/ user@host:/remote/
scp user@host:/remote/file ./local/

# SFTP (交互式文件传输)
sftp user@host
# 进入后: ls, cd, lcd, get file, put file, exit

# Rsync (高效同步)
rsync -avz /local/dir/ user@host:/remote/dir/
rsync -avz --delete /local/ /remote/  # 镜像同步
rsync -avz --exclude='*.log' src/ dst/
rsync -P --partial file.iso host:/    # 显示进度+断点续传

dig / nslookup / host

DNS 查询

诊断

域名解析查询工具。

dig example.com
dig example.com MX             # 查询邮件记录
dig example.com +short         # 简洁输出
dig @8.8.8.8 example.com       # 指定 DNS 服务器
dig example.com ANY            # 查询所有记录
dig -x 8.8.8.8                 # 反向解析

nslookup example.com
nslookup
> server 8.8.8.8
> example.com
> exit

host example.com
host -t MX example.com

ufw

简化版防火墙

安全

Uncomplicated Firewall,Ubuntu 默认的 iptables 简化管理工具。

sudo ufw status verbose        # 查看状态
sudo ufw enable                # 启用防火墙
sudo ufw disable               # 禁用
sudo ufw default deny incoming # 默认拒绝入站
sudo ufw default allow outgoing
sudo ufw allow ssh             # 允许 SSH (22)
sudo ufw allow 80/tcp          # 允许 HTTP
sudo ufw allow 443/tcp
sudo ufw allow from 192.168.1.0/24  # 允许整个子网
sudo ufw deny 23               # 拒绝 telnet
sudo ufw delete allow 80       # 删除规则
sudo ufw reload

iptables / nftables

底层防火墙

高级

Linux 内核级防火墙,nftables 是其现代继任者。

sudo iptables -L -n -v                # 列出所有规则
sudo iptables -S                        # 保存格式输出

# 添加规则
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # 允许 SSH
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -j DROP                       # 默认拒绝

# 删除规则
sudo iptables -D INPUT 3             # 删除第 3 条
sudo iptables -F                     # 清空所有规则

# NAT 转发
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# 保存 (Ubuntu 用 iptables-persistent)
sudo apt install iptables-persistent
sudo netfilter-persistent save

tcpdump

网络抓包

诊断

强大的网络抓包工具,用于网络调试和分析。

sudo tcpdump                       # 抓取所有接口
sudo tcpdump -i eth0               # 指定接口
sudo tcpdump port 80               # 过滤端口
sudo tcpdump host 192.168.1.100    # 过滤主机
sudo tcpdump -n -i eth0 port 22    # 不解析名称
sudo tcpdump -w capture.pcap       # 写入文件
sudo tcpdump -r capture.pcap       # 读取文件
sudo tcpdump -i eth0 -c 100        # 只抓 100 个包

nmap

网络扫描与安全审计

安全

网络探测与安全扫描工具,可发现主机和开放端口。

sudo apt install nmap
nmap 192.168.1.100                 # 扫描常用端口
nmap -p- 192.168.1.100             # 扫描全部端口
nmap -sV 192.168.1.100             # 识别服务版本
nmap -O 192.168.1.100              # 识别操作系统
nmap -sn 192.168.1.0/24            # ping 扫描,发现主机
nmap -A 192.168.1.100              # 完整扫描
nmap -oN result.txt 192.168.1.100  # 输出到文件

nc (netcat)

网络瑞士军刀

工具

读写网络连接的多功能工具。

sudo apt install netcat-openbsd
# 测试端口
nc -zv 192.168.1.100 80

# 简单 HTTP 请求
echo -e "GET / HTTP/1.0\n\n" | nc example.com 80

# 文件传输
# 接收端:
nc -l 9000 > received_file
# 发送端:
nc 192.168.1.100 9000 < file_to_send

# 简易聊天
# 端 A: nc -l 5000
# 端 B: nc 端A的IP 5000

# 简易 HTTP 服务器
nc -l 8080 -c 'echo -e "HTTP/1.1 200 OK\n\nHello"'

📦 压缩与解压 (5)

tar

归档与压缩工具

核心

Tape Archive,Linux 下最常用的打包工具,可配合 gzip/bzip2/xz。

参数说明
-c创建归档
-x解压
-t列出内容
-v详细输出
-f指定归档文件
-zgzip 压缩 (.tar.gz, .tgz)
-jbzip2 压缩 (.tar.bz2)
-Jxz 压缩 (.tar.xz,最高压缩率)
-C指定解压目录
--exclude排除文件
# 压缩
tar -czvf archive.tar.gz /path/to/folder
tar -cjvf archive.tar.bz2 folder/
tar -cJvf archive.tar.xz folder/

# 解压
tar -xzvf archive.tar.gz
tar -xzvf archive.tar.gz -C /target/dir/

# 查看内容
tar -tzvf archive.tar.gz

# 排除文件
tar -czvf backup.tar.gz /home --exclude='*.tmp' --exclude='cache'

# 增量备份
tar -czvf -g snapshot.snar full_backup.tar.gz /data
tar -czvf -g snapshot.snar incr_backup.tar.gz /data

gzip / gunzip / zcat

单文件 gzip 压缩

工具

对单个文件进行 gzip 压缩/解压,不能直接压缩目录。

gzip file.txt            # 压缩为 file.txt.gz
gunzip file.txt.gz       # 解压
gzip -d file.txt.gz      # 同上
gzip -l file.txt.gz      # 查看压缩信息
gzip -9 file.txt         # 最高压缩率
gzip -k file.txt         # 保留原文件 (-k 需较新版本)
zcat file.txt.gz         # 查看压缩文件内容 (不解压)
zgrep "pattern" file.gz  # 在压缩文件中 grep

bzip2 / xz

更高压缩率

工具

bzip2 和 xz 提供比 gzip 更高的压缩率,但速度较慢。

bzip2 file.txt           # 压缩为 .bz2
bunzip2 file.bz2         # 解压
xz file.txt              # 压缩为 .xz
unxz file.xz
xzcat file.xz            # 查看 .xz 文件内容

zip / unzip

ZIP 格式

常用

与 Windows 兼容性最好的压缩格式。

sudo apt install zip unzip
zip archive.zip file1 file2        # 压缩文件
zip -r archive.zip folder/         # 压缩目录
zip -e archive.zip files           # 加密 (需密码)
unzip archive.zip                  # 解压
unzip archive.zip -d /target/dir/
unzip -l archive.zip               # 列出内容
unzip -t archive.zip               # 测试完整性

7z / unrar

7-Zip 与 RAR

工具

处理 .7z 和 .rar 格式。

sudo apt install p7zip-full unrar

# 7z
7z a archive.7z folder/       # 创建
7z x archive.7z               # 解压
7z l archive.7z               # 列出
7z t archive.7z               # 测试

# unrar
unrar x archive.rar           # 解压 (保持目录结构)
unrar e archive.rar           # 解压到当前目录
unrar l archive.rar           # 列出
unrar t archive.rar           # 测试

👥 用户与用户组 (6)

useradd / usermod / userdel

用户账号管理

核心

用户创建、修改和删除。

# 创建用户
sudo useradd -m -s /bin/bash newuser      # 创建并建主目录
sudo useradd -m -d /custom/home -s /bin/bash newuser
sudo useradd -r sysuser                   # 系统用户 (无登录)
sudo useradd -e 2024-12-31 tempuser       # 设置过期时间

# 修改用户
sudo usermod -aG sudo newuser             # 添加到 sudo 组 (追加)
sudo usermod -aG docker,video user
sudo usermod -s /bin/zsh user             # 改 shell
sudo usermod -l newname oldname           # 改名
sudo usermod -d /new/home -m user         # 改主目录并迁移
sudo usermod -L user                      # 锁定账号
sudo usermod -U user                      # 解锁

# 删除用户
sudo userdel olduser                      # 仅删除账号
sudo userdel -r olduser                   # 连同主目录一起删除

passwd

修改用户密码

核心

更改用户密码。

passwd                       # 修改当前用户密码
sudo passwd root             # 设置 root 密码
sudo passwd newuser          # 修改指定用户密码
sudo passwd -l user          # 锁定密码 (禁用登录)
sudo passwd -u user          # 解锁
sudo passwd -d user          # 删除密码 (空密码登录,危险)
sudo passwd -e user          # 强制下次登录改密码
sudo passwd -x 90 user       # 密码最长使用 90 天
sudo passwd -n 7 user        # 密码最短使用 7 天

groupadd / groupmod / groupdel

用户组管理

核心

用户组的创建、修改和删除。

sudo groupadd developers
sudo groupadd -g 1005 customgroup        # 指定 GID
sudo groupmod -n newname oldname         # 改名
sudo groupmod -g 2000 group              # 改 GID
sudo groupdel groupname
sudo gpasswd -a user group               # 添加用户到组
sudo gpasswd -d user group               # 从组中移除

id / whoami / who / w / last

用户信息查询

工具

查询用户身份和登录信息。

id username                  # UID, GID, 所属组
id                           # 当前用户
whoami                       # 当前用户名
who                          # 当前登录的用户
w                            # 类似 who,带负载信息
last                         # 最近登录记录
last -n 10                   # 最近 10 条
lastlog                      # 所有用户最后登录时间
lastb                        # 失败的登录尝试

su / sudo / visudo

权限提升与配置

核心

切换用户与权限提升。

# su
su - root                    # 切换到 root (带环境)
su username                  # 切换用户 (不带环境)
su - username                # 切换用户 (带环境)

# sudo
sudo command                 # 以 root 身份运行
sudo -u user command         # 以指定用户运行
sudo -i                      # root 交互 shell
sudo -l                      # 查看当前用户的 sudo 权限
sudo -k                      # 清除 sudo 缓存
sudo -v                      # 刷新 sudo 时间戳

# visudo
sudo visudo                  # 安全编辑 /etc/sudoers
# 常见语法:
# username ALL=(ALL:ALL) ALL            # 完全 sudo
# %groupname ALL=(ALL) ALL              # 组 sudo
# username ALL=(ALL) NOPASSWD: /path/cmd # 免密
# username ALL=(ALL) NOPASSWD: ALL      # 完全免密

chage

密码过期策略

工具

管理用户密码过期信息。

chage -l user                # 查看密码策略
sudo chage -M 90 user        # 最长使用 90 天
sudo chage -m 7 user         # 最短 7 天
sudo chage -W 7 user         # 提前 7 天警告
sudo chage -E 2024-12-31 user # 账号过期日期
sudo chage -I 30 user        # 不活动 30 天后锁定

💿 软件包管理 (APT) (7)

apt update / upgrade

更新软件源与系统

核心

Ubuntu 基于 Debian,使用 apt (Advanced Package Tool) 进行包管理。

sudo apt update              # 同步软件源列表 (必须先执行)
sudo apt upgrade             # 升级所有已安装软件 (不删除)
sudo apt full-upgrade        # 完整升级,允许移除冲突旧包
sudo apt dist-upgrade        # 等同于 full-upgrade (旧名)
sudo apt autoremove          # 自动清理孤立包
sudo apt autoclean           # 清理旧版本缓存
sudo apt clean               # 清理整个缓存

apt install / remove / purge

安装与卸载软件

核心

从官方仓库安装、卸载、彻底卸载软件包。

sudo apt install nginx
sudo apt install nginx=1.18.0-0ubuntu1  # 指定版本
sudo apt install --reinstall nginx      # 重装
sudo apt remove nginx                   # 卸载 (保留配置)
sudo apt purge nginx                    # 彻底卸载 (删配置)
sudo apt autoremove                     # 清理无用依赖
sudo apt install -y nginx               # 自动确认 (-y)
sudo apt install pkg1 pkg2 pkg3         # 批量安装

apt search / show / list

搜索与查看包

工具

查询软件包信息。

apt search "web server"        # 搜索
apt show nginx                 # 显示包详情
apt list --installed           # 已安装包
apt list --upgradable          # 可升级包
apt list --all-versions nginx  # 所有版本
apt depends nginx              # 依赖关系
apt rdepends nginx             # 反向依赖

add-apt-repository

管理 PPA 源

工具

添加/删除 PPA (Personal Package Archive) 或仓库。

sudo add-apt-repository ppa:ondrej/php
sudo add-apt-repository --remove ppa:ondrej/php
sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu focal main"
sudo apt update

dpkg

底层包管理器

进阶

apt 的底层工具,直接操作 .deb 包,不自动解决依赖。

sudo dpkg -i package.deb         # 安装本地 deb 包
sudo dpkg -r package             # 删除 (保留配置)
sudo dpkg -P package             # 彻底删除
dpkg -l                          # 列出已安装包
dpkg -l | grep nginx
dpkg -L package                  # 列出包安装的所有文件
dpkg -S /path/to/file            # 查询某文件属于哪个包
dpkg -s package                  # 查看包状态
sudo apt --fix-broken install    # 修复损坏的依赖

snap

Snap 包管理

Ubuntu

Canonical 推出的跨发行包包管理工具。

snap find vscode                 # 搜索
sudo snap install code --classic # 安装 (classic 模式有完整权限)
sudo snap install firefox
sudo snap remove firefox
sudo snap refresh                # 升级所有 snap
sudo snap refresh firefox
sudo snap revert firefox         # 回滚到上一版本
snap list                        # 列出已安装
snap info firefox
sudo snap enable/disable firefox

apt-mark

标记软件包状态

工具

设置软件包为手动安装或自动安装,或保持当前版本。

sudo apt-mark hold nginx         # 锁定版本,不升级
sudo apt-mark unhold nginx       # 解除锁定
apt-mark showhold                # 显示锁定包
apt-mark showmanual              # 显示手动安装的包
apt-mark showauto                # 显示自动安装的依赖

💾 磁盘与文件系统 (7)

fdisk / parted

磁盘分区工具

高级

磁盘分区工具。fdisk 适合 MBR,parted 支持 GPT。

sudo fdisk -l                    # 列出所有分区
sudo fdisk /dev/sda              # 交互式分区
# 常用命令: p 查看, n 新建, d 删除, w 保存, q 退出

sudo parted /dev/sda print       # 查看分区
sudo parted /dev/sda mklabel gpt
sudo parted /dev/sda mkpart primary ext4 0% 100%

⚠️ 警告:

分区操作会破坏数据,请确保已备份!

mkfs / mkswap

创建文件系统

高级

在分区上格式化文件系统。

sudo mkfs.ext4 /dev/sdb1         # ext4
sudo mkfs.xfs /dev/sdb1          # xfs
sudo mkfs.vfat /dev/sdb1         # FAT32
sudo mkfs.btrfs /dev/sdb1        # btrfs
sudo mkswap /dev/sdb2            # 创建交换分区
sudo swapon /dev/sdb2            # 启用交换

mount / umount

挂载与卸载文件系统

核心

挂载/卸载文件系统。

mount                              # 显示所有挂载
sudo mount /dev/sdb1 /mnt/usb      # 挂载
sudo mount -t ext4 /dev/sdb1 /mnt
sudo mount -o ro /dev/sdb1 /mnt    # 只读挂载
sudo umount /mnt/usb               # 卸载
sudo umount -l /mnt/usb            # 懒卸载 (有进程占用时)
sudo mount -a                      # 按 /etc/fstab 挂载所有

💡 /etc/fstab 配置示例:

# <file system>  <mount point>  <type>  <options>      <dump> <pass>
UUID=xxxx  /              ext4    errors=remount-ro  0      1
/dev/sdb1  /mnt/data      ext4    defaults           0      2
/dev/sdb2  none           swap    sw                 0      0

fsck / blkid / tune2fs

文件系统检查与工具

工具

文件系统检查、识别和调优。

sudo fsck /dev/sda1                # 检查文件系统 (必须先卸载)
sudo fsck -y /dev/sda1             # 自动修复
blkid                              # 显示所有分区的 UUID 和类型
sudo blkid /dev/sda1
sudo tune2fs -l /dev/sda1          # ext 文件系统详情
sudo tune2fs -L NEWLABEL /dev/sda1 # 改标签

swapon / swapoff / free

交换空间管理

工具

管理交换空间 (swap)。

swapon --show                      # 显示 swap
sudo swapoff -a                    # 禁用所有 swap
sudo swapon -a                     # 按 fstab 启用

# 创建 swap 文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 持久化: 写入 /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

dd

磁盘拷贝/擦除/镜像

危险

底层数据复制工具,可做磁盘镜像或擦除。

# 制作 U 盘启动盘 (注意: 会清除 U 盘所有数据!)
sudo dd if=ubuntu.iso of=/dev/sdc bs=4M status=progress
sync

# 备份磁盘为镜像
sudo dd if=/dev/sda of=/backup/disk.img bs=4M

# 擦除磁盘 (用零填充)
sudo dd if=/dev/zero of=/dev/sdc bs=4M status=progress

# 生成随机文件
dd if=/dev/urandom of=random.bin bs=1M count=100

⚠️ 警告:

dd 极其危险,

of

参数写错会永久毁掉整块磁盘!执行前务必三次确认!

lsblk

块设备树状视图

工具

以树状结构显示所有块设备 (磁盘、分区、LVM)。

lsblk
lsblk -f                  # 显示文件系统和 UUID
lsblk -o NAME,SIZE,MOUNTPOINT,MODEL
lsblk -m                  # 权限信息

📜 Shell 脚本基础 (6)

脚本结构与 shebang

脚本基础入门

入门

Shell 脚本是包含 shell 命令的文本文件,第一行的 shebang 指定解释器。

#!/bin/bash
# 这是注释

# 变量
NAME="Ubuntu"
echo "Hello, $NAME!"
echo "Home: $HOME"
echo '单引号不展开变量: $NAME'

# 命令替换
TODAY=$(date +%Y-%m-%d)
echo "Today: $TODAY"

# 读取用户输入
read -p "请输入你的名字: " user_name
echo "你好, $user_name"

条件语句 (if / case)

流程控制

入门

#!/bin/bash

# if 语句
if [ "$USER" = "root" ]; then
    echo "你是 root"
elif [ "$USER" = "guest" ]; then
    echo "你是 guest"
else
    echo "普通用户: $USER"
fi

# 文件测试
if [ -f "/etc/passwd" ]; then
    echo "文件存在"
fi

if [ -d "/tmp" ]; then
    echo "目录存在"
fi

# 数值比较
NUM=10
if [ $NUM -gt 5 ]; then
    echo "大于 5"
fi
# -eq 等于, -ne 不等于, -lt 小于, -le 小于等于, -ge 大于等于

# 字符串比较
if [ -z "$VAR" ]; then
    echo "变量为空"
fi

# case 语句
read -p "选择 (start|stop|restart): " action
case "$action" in
    start)
        echo "启动中..."
        ;;
    stop)
        echo "停止中..."
        ;;
    restart)
        echo "重启中..."
        ;;
    *)
        echo "未知操作"
        ;;
esac

循环语句 (for / while / until)

重复执行

入门

#!/bin/bash

# for 循环
for i in 1 2 3 4 5; do
    echo "数字: $i"
done

for file in *.txt; do
    echo "处理: $file"
done

# C 风格 for
for ((i=0; i<5; i++)); do
    echo "$i"
done

# while 循环
count=0
while [ $count -lt 5 ]; do
    echo "count=$count"
    ((count++))
done

# 读取文件
while IFS= read -r line; do
    echo "行: $line"
done < file.txt

# until (条件为假时执行)
until [ $count -eq 0 ]; do
    echo "$count"
    ((count--))
done

# break 和 continue
for i in {1..10}; do
    if [ $i -eq 5 ]; then
        continue  # 跳过 5
    fi
    if [ $i -eq 8 ]; then
        break     # 到 8 停止
    fi
    echo $i
done

函数与参数

脚本模块化

进阶

#!/bin/bash

# 函数定义
greet() {
    local name=$1
    local greeting=${2:-Hello}
    echo "$greeting, $name!"
}

# 调用
greet "Ubuntu"
greet "Ubuntu" "Welcome"

# 参数处理
echo "脚本名: $0"
echo "第一个参数: $1"
echo "第二个参数: $2"
echo "所有参数: $@"
echo "参数个数: $#"

# 获取选项
while getopts ":u:p:h" opt; do
    case $opt in
        u) echo "用户: $OPTARG" ;;
        p) echo "密码: $OPTARG" ;;
        h) echo "用法: $0 -u user -p pass" ;;
        \?) echo "无效选项: -$OPTARG" ;;
    esac
done

重定向与管道

输入输出控制

核心

标准输入 (0, stdin)、标准输出 (1, stdout)、标准错误 (2, stderr) 的控制。

command > file.txt              # 标准输出重定向 (覆盖)
command >> file.txt             # 标准输出重定向 (追加)
command 2> error.log            # 错误重定向
command > out.log 2> err.log    # 分开重定向
command > all.log 2>&1          # 合并 stdout 和 stderr
command &> all.log              # 同上 (bash 4+)
command 2>/dev/null             # 丢弃错误
command 1>/dev/null 2>&1        # 丢弃所有输出
command < input.txt             # 标准输入重定向
command <

``

``

环境变量 系统配置 进阶

**⌨️ 快捷键与技巧 (5)** Bash 行编辑快捷键 提高命令行效率 效率 history 命令历史管理 效率 alias 命令别名 效率 为命令创建简短别名。 通配符与扩展 模式匹配 核心 常用技巧组合 实战命令 实战 **🟠 Ubuntu 特有命令 (9)** netplan Ubuntu 网络配置 (17.10+) Ubuntu Ubuntu 17.10+ 使用 netplan 配置网络,配置文件为 YAML 格式。 **示例配置 (DHCP):** **静态 IP 示例:** systemd-resolve / resolvectl systemd DNS 解析器 Ubuntu Ubuntu 18.04+ 使用 systemd-resolved 作为 DNS 解析器。 ubuntu-drivers 专有驱动管理 Ubuntu Ubuntu 提供的工具,自动识别并安装推荐的专有驱动 (如 NVIDIA)。 cloud-init 云实例初始化 Ubuntu 云服务器的初始化工具,处理 user-data、meta-data。 snap Canonical 的包管理器 Ubuntu Canonical 推广的跨发行包包格式,Ubuntu 默认预装。 **💡 Snap 优缺点:** ufw 简化版防火墙 Ubuntu Ubuntu 默认的简化防火墙前端,底层是 iptables/nftables。 update-alternatives 管理命令的多个版本 Ubuntu 在多个提供相同功能的程序之间切换 (如 java、python、editor)。 do-release-upgrade 升级 Ubuntu 版本 Ubuntu 从旧版本 Ubuntu 升级到新版本 (如 22.04 → 24.04)。 **⚠️ 升级前务必做好完整备份!** 升级过程中可能出现问题导致系统无法启动。 ubuntu-advantage / pro Ubuntu Pro 订阅管理 Ubuntu Ubuntu Pro 提供 10 年安全更新、Livepatch、FIPS 等企业功能。

← 返回IT 技术 yicool 百科 · Ubuntu Shell 命令大全及说明教程

评论 0