Linux 操作系统命令完全指南:从基础到高级应用

Linux 操作系统命令完全指南:从基础到高级应用

目录

  1. [Linux 命令基础概念](#1-linux 命令基础概念)
  2. 文件管理命令
  3. 系统管理命令
  4. 进程管理命令
  5. 网络操作命令
  6. 文本处理命令
  7. 压缩与归档命令
  8. 高级技巧与最佳实践
  9. 附录

1. Linux 命令基础概念

1.1 Linux 命令概述

Linux 命令是用户与 Linux 操作系统内核交互的工具和接口。通过命令行界面(CLI),用户可以执行文件操作、系统配置、程序运行等各种任务。

命令行的作用
  • 直接控制系统资源:无需图形界面开销,直接调用系统功能
  • 自动化和脚本编写:可以组合命令创建复杂的自动化流程
  • 远程管理:通过 SSH 等工具远程管理服务器
  • 精确控制:提供比图形界面更细粒度的操作控制
  • 高效批量处理:一次性处理大量文件和任务
命令提示符结构
[user@hostname directory]$
  • user:当前登录用户名
  • hostname:主机名
  • directory:当前工作目录(~表示家目录)
  • $:普通用户提示符(#表示 root 用户)

1.2 命令语法规则

基本命令结构
command [options] [arguments]
  • command:命令名称
  • options:选项(以 --- 开头),修改命令行为
  • arguments:参数,命令操作的对象
选项格式
# 短选项(单字母,单个短横线)
ls -l -a -h
ls -lah  # 可以合并

# 长选项(完整单词,两个短横线)
ls --all --human-readable
参数类型
# 文件路径
cp file.txt /home/user/

# 目录路径
cd /var/log

# 多个参数
cp file1.txt file2.txt /backup/

# 通配符
ls *.txt
rm -rf temp_*
特殊字符
字符含义示例
*匹配任意字符*.txt 匹配所有 txt 文件
?匹配单个字符file?.txt 匹配 file1.txt, fileA.txt
[]匹配字符范围file[1-3].txt
{}匹配多个模式file{1,2,3}.txt
~家目录~/Documents
.当前目录./script.sh
..上级目录../parent

1.3 帮助系统使用

man 命令(手册页)
# 查看命令手册
man ls
man cp

# 搜索手册页
man -k keyword
man -f command

# 手册页导航
# 空格键:下一页
# b 键:上一页
# /keyword:搜索
# q:退出

手册章节

  1. 用户命令
  2. 系统调用
  3. 库函数
  4. 特殊文件
  5. 文件格式
  6. 游戏
  7. 杂项
  8. 系统管理命令
help 命令
# 查看内置命令帮助
help cd
help export

# 查看简要帮助
command --help
ls --help
info 命令
# 查看 GNU info 文档
info ls
info bash

# info 导航
# n:下一节点
# p:上一节点
# u:上移一级
# q:退出

1.4 Shell 基础概念

Shell 类型
# 查看当前 shell
echo $SHELL

# 查看可用 shells
cat /etc/shells

# 常见 shell 类型
# - bash:默认 shell,功能强大
# - zsh:扩展功能多,oh-my-zsh
# - fish:用户友好,自动建议
# - sh:POSIX 标准 shell
环境变量
# 查看所有环境变量
env
printenv

# 查看特定变量
echo $PATH
echo $HOME

# 设置变量
MY_VAR="hello"
export MY_VAR

# 永久设置(添加到 ~/.bashrc 或 ~/.bash_profile)
echo 'export MY_VAR="hello"' >> ~/.bashrc
source ~/.bashrc

常用环境变量

变量含义示例
PATH命令搜索路径/usr/bin:/bin:/usr/local/bin
HOME用户家目录/home/username
USER当前用户名root
PWD当前工作目录/var/log
SHELL当前 shell/bin/bash
LANG语言环境en_US.UTF-8
路径概念
# 绝对路径(从根目录开始)
cd /home/user/documents

# 相对路径(从当前目录开始)
cd ./projects
cd ../parent

# 特殊路径
cd ~      # 家目录
cd -      # 上一个目录
cd ..     # 上级目录

2. 文件管理命令

2.1 文件浏览命令

ls - 列出目录内容

功能:显示目录中的文件和子目录列表

语法

ls [选项] [文件或目录]

常用参数

参数说明示例
-l长格式显示(权限、所有者、大小、时间)ls -l
-a显示所有文件(包括隐藏文件)ls -a
-h人类可读的文件大小(K、M、G)ls -lh
-t按修改时间排序ls -lt
-r反向排序ls -lr
-S按文件大小排序ls -lS
-R递归显示子目录ls -R
-d只显示目录本身ls -ld /tmp
-i显示 inode 号ls -li

示例

# 长格式显示
$ ls -l
total 12
drwxr-xr-x 2 user user 4096 Jan 15 10:30 Documents
-rw-r--r-- 1 user user  256 Jan 15 09:20 file.txt
lrwxrwxrwx 1 user user   12 Jan 15 11:00 link -> /path/to/target

# 显示人类可读大小
$ ls -lh
total 12K
-rw-r--r-- 1 user user 1.5M Jan 15 10:30 largefile.zip
-rw-r--r-- 1 user user  256 Jan 15 09:20 file.txt

# 按时间排序显示最近修改的文件
$ ls -lt
total 12
-rw-r--r-- 1 user user  256 Jan 15 10:30 recent.txt
-rw-r--r-- 1 user user  128 Jan 14 15:20 old.txt
pwd - 显示当前工作目录

功能:显示当前所在的完整路径

语法

pwd [选项]

常用参数

  • -L:显示逻辑路径(跟随符号链接)
  • -P:显示物理路径(不跟随符号链接)

示例

$ pwd
/home/user/documents/projects

$ cd /var/log
$ pwd
/var/log
cd - 切换目录

功能:改变当前工作目录

语法

cd [目录]

示例

# 切换到绝对路径
cd /home/user/documents

# 切换到相对路径
cd projects/subdir

# 切换到上级目录
cd ..

# 切换到上上级目录
cd ../..

# 切换到家目录
cd
cd ~
cd $HOME

# 切换到上一个目录
cd -

# 特殊技巧
cd ~username      # 切换到其他用户家目录
cd /usr/local/../ # 切换到 /usr
file - 确定文件类型

功能:通过文件内容判断文件类型

语法

file [选项] [文件...]

常用参数

  • -b:不显示文件名
  • -i:显示 MIME 类型
  • -z:检查压缩文件内容

示例

$ file script.sh
script.sh: Bourne-Again shell script, ASCII text executable

$ file image.jpg
image.jpg: JPEG image data, JFIF standard 1.01

$ file archive.zip
archive.zip: Zip archive data, at least v2.0 to extract

$ file -i document.pdf
document.pdf: application/pdf; charset=binary

2.2 文件操作命令

cp - 复制文件或目录

功能:将文件或目录从一个位置复制到另一个位置

语法

cp [选项] 源文件 目标文件
cp [选项] 源文件... 目标目录

常用参数

参数说明示例
-r递归复制目录cp -r dir1 dir2
-p保留文件属性(时间、权限等)cp -p file1 file2
-i交互式(覆盖前询问)cp -i file1 file2
-v显示详细过程cp -v file1 file2
-n不覆盖已存在的文件cp -n file1 file2
-u只复制更新的文件cp -u file1 file2
-a归档模式(-dR --preserve=all)cp -a dir1 dir2
-f强制复制cp -f file1 file2

示例

# 复制文件
$ cp file.txt backup.txt

# 复制文件到指定目录
$ cp file.txt /backup/

# 递归复制目录
$ cp -r project/ backup/

# 保留属性复制
$ cp -p important.doc /backup/
$ ls -l important.doc /backup/important.doc
-rw-r--r-- 1 user user 1024 Jan 15 10:30 important.doc
-rw-r--r-- 1 user user 1024 Jan 15 10:30 /backup/important.doc

# 带进度的复制(使用 rsync 更好)
$ cp -v file1.txt file2.txt /backup/
'file1.txt' -> '/backup/file1.txt'
'file2.txt' -> '/backup/file2.txt'

# 复制多个文件到目录
$ cp *.txt /backup/
mv - 移动或重命名文件

功能:移动文件到另一个位置,或重命名文件

语法

mv [选项] 源文件 目标文件
mv [选项] 源文件... 目标目录

常用参数

参数说明示例
-i交互式(覆盖前询问)mv -i file1 file2
-v显示详细过程mv -v file1 file2
-n不覆盖已存在的文件mv -n file1 file2
-u只移动更新的文件mv -u file1 file2
-f强制移动mv -f file1 file2
-b覆盖前备份mv -b file1 file2

示例

# 重命名文件
$ mv oldname.txt newname.txt

# 移动文件到另一个目录
$ mv file.txt /home/user/documents/

# 移动并重命名
$ mv file.txt /backup/backup_file.txt

# 移动多个文件到目录
$ mv *.log /var/log/archive/

# 交互式移动(覆盖前询问)
$ mv -i important.txt /backup/
mv: overwrite '/backup/important.txt'? y

# 显示移动过程
$ mv -v file1.txt file2.txt /backup/
'file1.txt' -> '/backup/file1.txt'
'file2.txt' -> '/backup/file2.txt'

# 移动目录
$ mv project/ /backup/
rm - 删除文件或目录

功能:删除文件或目录

语法

rm [选项] 文件...

常用参数

参数说明示例
-r递归删除目录rm -r dir/
-f强制删除,不提示rm -f file
-i交互式删除rm -i file
-v显示详细过程rm -v file
-d删除空目录rm -d emptydir

示例

# 删除文件
$ rm file.txt

# 删除多个文件
$ rm file1.txt file2.txt file3.txt

# 删除所有 txt 文件
$ rm *.txt

# 递归删除目录及其内容
$ rm -r project/

# 强制删除(危险!)
$ rm -rf temp/

# 交互式删除
$ rm -i important.txt
rm: remove regular file 'important.txt'? y

# 显示删除过程
$ rm -v file1.txt file2.txt
removed 'file1.txt'
removed 'file2.txt'

# ⚠️ 安全警告
# 永远不要随意运行:rm -rf /
# 删除前务必确认路径正确
# 建议先使用 ls 确认要删除的文件
mkdir - 创建目录

功能:创建新的目录

语法

mkdir [选项] 目录...

常用参数

参数说明示例
-p递归创建目录(包括父目录)mkdir -p a/b/c
-v显示创建过程mkdir -v dir
-m设置权限模式mkdir -m 755 dir

示例

# 创建单个目录
$ mkdir projects

# 创建多个目录
$ mkdir dir1 dir2 dir3

# 递归创建嵌套目录
$ mkdir -p /home/user/projects/python/src
$ tree /home/user/projects
/home/user/projects/
└── python
    └── src

# 设置权限创建
$ mkdir -m 700 private
$ ls -ld private
drwx------ 2 user user 4096 Jan 15 10:30 private

# 显示创建过程
$ mkdir -v newdir
mkdir: created directory 'newdir'
rmdir - 删除空目录

功能:删除空目录(目录必须为空)

语法

rmdir [选项] 目录...

常用参数

  • -p:递归删除目录及其空父目录
  • -v:显示删除过程

示例

# 删除空目录
$ rmdir emptydir

# 删除多个空目录
$ rmdir dir1 dir2 dir3

# 递归删除(如果父目录也变空)
$ rmdir -p a/b/c
# 如果 c 为空,删除 c;如果 b 因此变空,删除 b;依此类推

# ⚠️ 注意:rmdir 只能删除空目录
# 要删除非空目录,使用 rm -r

2.3 文件查看命令

cat - 连接文件和打印

功能:显示文件内容、连接多个文件

语法

cat [选项] [文件...]

常用参数

参数说明示例
-n显示行号cat -n file
-b只显示非空行的行号cat -b file
-E显示行尾的$符号cat -E file
-T显示制表符为^Icat -T file
-s压缩空行cat -s file

示例

# 查看文件内容
$ cat file.txt
Hello World
This is a test file.

# 显示行号
$ cat -n file.txt
     1  Hello World
     2  This is a test file.

# 查看多个文件
$ cat file1.txt file2.txt

# 创建文件(Ctrl+D 结束)
$ cat > newfile.txt
Line 1
Line 2
^D

# 追加内容到文件
$ cat >> file.txt
New line
^D

# 显示不可见字符
$ cat -A file.txt
Hello World$
Tab^Ihere$
less - 分页查看文件

功能:分页显示文件内容,支持向前和向后浏览

语法

less [选项] [文件...]

常用参数

  • -N:显示行号
  • -S:不折叠长行
  • -R:显示原始颜色(用于带颜色的日志)
  • -F:内容少于一屏时自动退出
  • -G:不突出显示搜索模式

less 导航命令

按键功能
空格下一页
b上一页
d半页下
u半页上
g跳到开头
G跳到结尾
/pattern向下搜索
?pattern向上搜索
n下一个匹配
N上一个匹配
q退出

示例

# 查看大文件
$ less largefile.log

# 显示行号
$ less -N /var/log/syslog

# 查看带颜色的日志
$ less -R application.log

# 搜索内容
$ less /var/log/auth.log
# 然后输入 /Failed 搜索包含 Failed 的行
more - 分页查看(功能较少)

功能:基本的分页显示文件内容

语法

more [选项] 文件

示例

$ more largefile.txt
# 空格:下一页
# Enter:下一行
# q:退出
# /pattern:搜索

# ⚠️ 注意:more 功能有限,建议使用 less
head - 查看文件开头

功能:显示文件的开头部分

语法

head [选项] [文件...]

常用参数

  • -n <行数>:显示指定行数
  • -c <字节>:显示指定字节数
  • -q:不显示文件名(多文件时)
  • -v:显示文件名(多文件时)

示例

# 显示前 10 行(默认)
$ head file.txt

# 显示前 20 行
$ head -n 20 file.txt
$ head -20 file.txt

# 显示前 100 字节
$ head -c 100 file.txt

# 显示多个文件的前几行
$ head -n 5 file1.txt file2.txt
==> file1.txt <==
Line 1
Line 2
Line 3
Line 4
Line 5

==> file2.txt <==
Line 1
Line 2
Line 3
Line 4
Line 5
tail - 查看文件结尾

功能:显示文件的末尾部分,特别适合查看日志

语法

tail [选项] [文件...]

常用参数

参数说明示例
-n <行数>显示指定行数tail -n 20 file
-f持续跟踪文件变化tail -f log
-F跟踪文件(即使被轮转)tail -F log
-c <字节>显示指定字节数tail -c 100 file
-q不显示文件名tail -q file

示例

# 显示最后 10 行(默认)
$ tail file.txt

# 显示最后 50 行
$ tail -n 50 file.txt
$ tail -50 file.txt

# 实时跟踪日志文件
$ tail -f /var/log/syslog
Jan 15 10:30:01 server CRON[1234]: (root) CMD (command)
Jan 15 10:31:01 server CRON[1235]: (root) CMD (command)
# 按 Ctrl+C 退出

# 跟踪日志轮转的文件
$ tail -F /var/log/application.log
# 即使文件被重命名或删除重建,仍会继续跟踪

# 显示最后 100 行并跟踪
$ tail -n 100 -f /var/log/nginx/access.log

2.4 文件查找命令

find - 强大的文件查找

功能:在目录树中搜索文件,支持多种条件

语法

find [路径] [表达式]

常用选项

按名称查找

# 按文件名查找
find /home -name "file.txt"
find . -name "*.log"
find /var -iname "Config"  # 不区分大小写

# 按正则表达式
find . -regex ".*\.\(txt\|log\)"

按类型查找

# 文件类型:f-文件,d-目录,l-链接
find /home -type f
find . -type d
find /var -type l

按大小查找

# 大小单位:c-字节,k-KB,M-MB,G-GB
find /var -size +100M      # 大于 100MB
find . -size -1M          # 小于 1MB
find /home -size 50M      # 等于 50MB

按时间查找

# 按修改时间(天)
find /var -mtime -7       # 7 天内修改过
find . -mtime +30         # 30 天前修改过

# 按访问时间(天)
find /home -atime -1

# 按状态改变时间(天)
find /etc -ctime -1

# 按分钟查找
find . -mmin -60          # 60 分钟内修改过

按权限查找

find /home -perm 755
find . -perm -u+x         # 用户可执行
find /var -perm /o=w      # 其他人可写

执行操作

# 删除找到的文件
find /tmp -name "*.tmp" -delete

# 执行命令
find . -name "*.log" -exec rm {} \;
find . -type f -exec chmod 644 {} \;

# 使用 + 批量处理
find . -name "*.txt" -exec cat {} +

# 重定向到文件
find . -name "*.conf" > files.txt

综合示例

# 查找 /var/log 下 7 天内修改过的.log 文件
$ find /var/log -name "*.log" -mtime -7

# 查找大于 100MB 的文件
$ find / -type f -size +100M

# 查找并删除 30 天前的临时文件
$ find /tmp -name "*.tmp" -mtime +30 -delete

# 查找所有可执行文件
$ find /home/user -type f -perm -u+x

# 查找空目录
$ find /home -type d -empty

# 查找并统计文件数量
$ find . -type f | wc -l
1250
locate - 快速文件定位

功能:使用数据库快速查找文件

语法

locate [选项] 模式

常用参数

  • -i:不区分大小写
  • -n <数量>:限制结果数量
  • -r:使用正则表达式

示例

# 查找文件
$ locate nginx.conf
/etc/nginx/nginx.conf
/usr/share/nginx/nginx.conf

# 不区分大小写
$ locate -i READme
/home/user/README
/home/user/project/readme.md

# 限制结果数量
$ locate -n 10 php.ini

# 更新数据库(需要 root)
$ sudo updatedb
which - 查找命令位置

功能:在 PATH 中查找命令的完整路径

语法

which [选项] 命令...

示例

# 查找命令位置
$ which ls
/bin/ls

$ which python
/usr/bin/python

# 查找多个命令
$ which python java gcc
/usr/bin/python

# 如果命令不存在
$ which nonexistent
# 无输出,返回退出码 1
whereis - 查找命令相关文件

功能:查找命令的二进制文件、源码和手册页

语法

whereis [选项] 命令...

常用参数

  • -b:只查找二进制文件
  • -m:只查找手册页
  • -s:只查找源码

示例

# 查找所有相关文件
$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

$ whereis python
python: /usr/bin/python /usr/lib/python3.8 /etc/python3.8 /usr/bin/python3.8 /usr/share/python /usr/share/man/man1/python.1.gz

# 只查找二进制文件
$ whereis -b gcc
gcc: /usr/bin/gcc

# 只查找手册页
$ whereis -m ls
ls: /usr/share/man/man1/ls.1.gz

2.5 文件权限命令

chmod - 改变文件权限

功能:修改文件或目录的访问权限

语法

chmod [选项] 模式 文件...

权限表示法

八进制表示法

  • 4 = 读(r)
  • 2 = 写(w)
  • 1 = 执行(x)
# 常见权限组合
755 = rwxr-xr-x  # 所有者全权限,其他人读执行
700 = rwx------  # 只有所有者有权限
644 = rw-r--r--  # 所有者读写,其他人只读
600 = rw-------  # 只有所有者读写

符号表示法

  • u = 所有者(user)
  • g = 组(group)
  • o = 其他人(other)
  • a = 所有人(all)
    • = 添加权限
    • = 移除权限
  • = = 设置权限

示例

# 八进制方式
$ chmod 755 script.sh
$ chmod 644 file.txt
$ chmod 700 private.key

# 符号方式
$ chmod +x script.sh        # 添加执行权限
$ chmod u+w file.txt        # 所有者添加写权限
$ chmod go-w file.txt       # 组和其他人移除写权限
$ chmod a+r file.txt        # 所有人添加读权限
$ chmod u=rwx,go=rx dir     # 设置特定权限

# 递归修改目录权限
$ chmod -R 755 /var/www/
$ chmod -R u+w,go-w /home/user/

# 查看权限变化
$ ls -l script.sh
-rw-r--r-- 1 user user 1024 Jan 15 10:30 script.sh
$ chmod +x script.sh
$ ls -l script.sh
-rwxr-xr-x 1 user user 1024 Jan 15 10:30 script.sh
chown - 改变文件所有者

功能:修改文件或目录的所有者和组

语法

chown [选项] [所有者][:组] 文件...

常用参数

  • -R:递归修改
  • -v:显示详细过程
  • -h:修改符号链接本身

示例

# 改变所有者
$ sudo chown user file.txt

# 改变所有者和组
$ sudo chown user:group file.txt
$ sudo chown user:www-data /var/www/html

# 只改变组
$ sudo chown :group file.txt
$ sudo chgrp group file.txt  # 等价

# 递归修改目录
$ sudo chown -R user:group /var/www/

# 显示过程
$ sudo chown -v user:group file.txt
ownership of 'file.txt' retained as user:group
chgrp - 改变文件所属组

功能:修改文件或目录的所属组

语法

chgrp [选项] 组 文件...

示例

# 改变组
$ sudo chgrp developers project/

# 递归改变
$ sudo chgrp -R www-data /var/www/html/

# 等价于
$ sudo chown :www-data /var/www/html/
umask - 设置默认权限掩码

功能:设置创建新文件时的默认权限掩码

语法

umask [模式]

示例

# 查看当前 umask
$ umask
0022

# 设置 umask
$ umask 022
$ umask 002  # 更宽松,组和其他人有写权限

# 永久设置(添加到 ~/.bashrc)
echo "umask 022" >> ~/.bashrc

# umask 计算
# 文件默认 666 - umask = 实际权限
# 目录默认 777 - umask = 实际权限
# umask 022: 文件 644, 目录 755

2.6 链接命令

ln - 创建链接

功能:创建硬链接或符号链接(软链接)

语法

ln [选项] 目标 链接
ln [选项] 目标... 目录

常用参数

参数说明示例
-s创建符号链接(软链接)ln -s target link
-f强制覆盖已存在的链接ln -sf target link
-v显示详细过程ln -v target link
-n将符号链接视为普通文件ln -vsn target link

硬链接 vs 软链接

特性硬链接软链接
跨文件系统不支持支持
链接到目录不支持支持
原文件删除仍可用失效
inode相同不同
大小与原文件相同链接路径长度

示例

# 创建硬链接
$ ln file.txt hardlink.txt
$ ls -li file.txt hardlink.txt
123456 -rw-r--r-- 2 user user 1024 Jan 15 10:30 file.txt
123456 -rw-r--r-- 2 user user 1024 Jan 15 10:30 hardlink.txt
# inode 号相同(123456),链接数为 2

# 创建符号链接
$ ln -s /path/to/target symlink.txt
$ ls -l symlink.txt
lrwxrwxrwx 1 user user 15 Jan 15 10:30 symlink.txt -> /path/to/target

# 创建相对路径的符号链接
$ ln -s ../target/file.txt link.txt

# 强制创建(覆盖已存在的链接)
$ ln -sf new_target existing_link

# 显示创建过程
$ ln -sv target link
'link' -> 'target'

# 查看链接指向
$ readlink symlink.txt
/path/to/target

# 删除链接(不影响原文件)
$ rm symlink.txt
$ rm hardlink.txt  # 只减少链接数,不删除文件

3. 系统管理命令

3.1 系统信息命令

uname - 显示系统信息

功能:显示操作系统相关信息

语法

uname [选项]

常用参数

参数说明示例
-a显示所有信息uname -a
-s操作系统名称uname -s
-r内核版本uname -r
-v内核详细版本uname -v
-m硬件架构uname -m
-n主机名uname -n
-p处理器类型uname -p

示例

# 显示所有信息
$ uname -a
Linux server 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

# 单独查看
$ uname -s
Linux

$ uname -r
5.4.0-42-generic

$ uname -m
x86_64

$ uname -n
server
hostname - 显示或设置主机名

功能:显示或临时设置系统主机名

语法

hostname [选项] [新主机名]

常用参数

  • -I:显示所有 IP 地址
  • -i:显示主机 IP 地址
  • -d:显示域名
  • -f:显示完整域名

示例

# 显示当前主机名
$ hostname
server01

# 显示 IP 地址
$ hostname -I
192.168.1.100 10.0.0.1

$ hostname -i
192.168.1.100

# 显示域名
$ hostname -d
example.com

# 显示完整域名
$ hostname -f
server01.example.com

# 临时设置主机名(重启失效)
$ sudo hostname newserver
$ hostname
newserver

# 永久设置(需要修改配置文件)
$ sudo hostnamectl set-hostname newserver
uptime - 显示系统运行时间

功能:显示系统运行时间、用户数和负载平均值

语法

uptime [选项]

示例

$ uptime
 10:30:45 up 15 days,  3:22,  2 users,  load average: 0.52, 0.48, 0.43

# 输出说明:
# 10:30:45          - 当前时间
# up 15 days, 3:22  - 运行时间
# 2 users           - 登录用户数
# load average: 0.52, 0.48, 0.43 - 1 分钟、5 分钟、15 分钟平均负载
top - 实时显示进程状态

功能:动态实时显示系统中进程的状态

语法

top [选项]

交互命令

按键功能
P按 CPU 使用率排序
M按内存使用率排序
N按 PID 排序
T按时间排序
k终止进程
r调整进程优先级
q退出
h帮助

示例

# 启动 top
$ top

# 输出示例:
top - 10:30:45 up 15 days,  3:22,  2 users,  load average: 0.52, 0.48, 0.43
Tasks: 125 total,   1 running, 124 sleeping,   0 stopped,   0 zombie
%Cpu(s):  5.2 us,  2.1 sy,  0.0 ni, 92.5 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7962.3 total,   1234.5 free,   2345.6 used,   4382.2 buff/cache
MiB Swap:   2048.0 total,   2048.0 free,      0.0 used.   5123.4 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
 1234 root      20   0  234567  45678  12345 R   5.2   0.6   1:23.45 nginx
 5678 www-data  20   0  123456  23456   8765 S   2.1   0.3   0:45.67 php-fpm
htop - 增强的进程查看工具

功能:top 的增强版本,更友好的界面

语法

htop [选项]

示例

# 启动 htop
$ htop

# 指定用户
$ htop -u username

# 指定进程
$ htop -p 1234,5678

# ⚠️ 注意:需要先安装
# Debian/Ubuntu: sudo apt install htop
# RHEL/CentOS: sudo yum install htop

3.2 磁盘管理命令

df - 显示磁盘空间使用情况

功能:显示文件系统的磁盘空间使用情况

语法

df [选项] [文件或目录...]

常用参数

参数说明示例
-h人类可读格式(K、M、G)df -h
-T显示文件系统类型df -T
-i显示 inode 使用情况df -i
-a显示所有文件系统df -a
-k以 KB 为单位df -k

示例

# 显示磁盘使用情况
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   25G   23G  53% /
/dev/sda2       100G   50G   45G  53% /home
tmpfs           3.9G     0  3.9G   0% /dev/shm

# 显示特定目录
$ df -h /home
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2       100G   50G   45G  53% /home

# 显示文件系统类型
$ df -Th
Filesystem     Type     Size  Used Avail Use% Mounted on
/dev/sda1      ext4      50G   25G   23G  53% /
/dev/sda2      ext4     100G   50G   45G  53% /home

# 显示 inode 使用情况
$ df -i
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda1     3276800 123456 3153344    4% /
du - 显示目录或文件大小

功能:显示目录或文件的磁盘使用情况

语法

du [选项] [文件或目录...]

常用参数

参数说明示例
-h人类可读格式du -h
-s只显示总计du -sh dir
-a显示所有文件du -ah
-c显示总计du -ch
-d <深度>限制深度du -hd 1
--max-depth=<N>限制深度du -h --max-depth=1

示例

# 显示目录大小
$ du -sh /var/log
156M    /var/log

# 显示子目录大小(深度 1)
$ du -h --max-depth=1 /home/user
4.0K    /home/user/bin
12M     /home/user/documents
256M    /home/user/downloads
272M    total

# 显示所有文件和目录
$ du -ah /home/user
4.0K    /home/user/bin
1.2M    /home/user/documents/file1.pdf
10M     /home/user/documents/file2.pdf
12M     /home/user/documents
256M    /home/user/downloads/file.zip
272M    /home/user

# 显示前 10 大目录
$ du -h --max-depth=1 / | sort -hr | head -10
mount - 挂载文件系统

功能:挂载文件系统到指定挂载点

语法

mount [选项] [设备] [挂载点]

常用参数

  • -t:指定文件系统类型
  • -o:指定挂载选项
  • -a:挂载 /etc/fstab 中的所有文件系统
  • -l:列出已挂载的文件系统

示例

# 显示已挂载的文件系统
$ mount | column -t
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro)
/dev/sda2 on /home type ext4 (rw,relatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev)

# 挂载设备
$ sudo mount /dev/sdb1 /mnt/data

# 指定文件系统类型
$ sudo mount -t nfs server:/export /mnt/nfs

# 指定挂载选项
$ sudo mount -o ro,nosuid /dev/sdb1 /mnt/data
# ro: 只读
# nosuid: 忽略 setuid 位
# noexec: 禁止执行

# 挂载 ISO 镜像
$ sudo mount -o loop image.iso /mnt/iso

# 重新挂载为读写
$ sudo mount -o remount,rw /mnt/data

# 挂载所有 fstab 中的文件系统
$ sudo mount -a

# 卸载
$ sudo umount /mnt/data
$ sudo umount /dev/sdb1
fdisk - 磁盘分区工具

功能:查看和管理磁盘分区表

语法

fdisk [选项] [设备]

交互命令

命令功能
p打印分区表
n新建分区
d删除分区
w写入并退出
q退出不保存
m帮助

示例

# 查看磁盘分区
$ sudo fdisk -l
Disk /dev/sda: 500 GiB, 536870912000 bytes, 1048576000 sectors
Disk model: VBOX HARDDISK
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 12345678-1234-1234-1234-123456789012

Device     Start        End   Sectors  Size Type
/dev/sda1   2048    1050623   1048576  512M EFI System
/dev/sda2 1050624 1048575967 1047525344  500G Linux filesystem

# 交互式分区
$ sudo fdisk /dev/sdb
# 然后输入命令:
# p - 查看分区
# n - 新建分区
# w - 保存退出

3.3 内存管理命令

free - 显示内存使用情况

功能:显示系统内存使用情况

语法

free [选项]

常用参数

参数说明示例
-h人类可读格式free -h
-m以 MB 为单位free -m
-g以 GB 为单位free -g
-s <秒>持续监控free -s 2
-t显示总计行free -t

示例

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           7.7G        2.3G        1.2G        156M        4.2G        5.1G
Swap:          2.0G          0B        2.0G

# 输出说明:
# total     - 总内存
# used      - 已使用
# free      - 空闲
# shared    - 共享内存(tmpfs)
# buff/cache- 缓冲区/缓存
# available - 应用程序可用内存

# 持续监控
$ free -h -s 2
# 每 2 秒刷新一次
vmstat - 虚拟内存统计

功能:显示虚拟内存、进程、CPU 活动等统计信息

语法

vmstat [选项] [延迟] [次数]

常用参数

  • -s:显示内存统计
  • -d:显示磁盘统计
  • -p:显示分区统计

示例

# 显示一次统计
$ vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 123456  78901 234567    0    0    12    34  123  456 15  5 78  2  0

# 每 2 秒刷新一次,共 5 次
$ vmstat 2 5

# 显示内存统计
$ vmstat -s
      7962304 K total memory
      2345678 K used memory
       123456 K active memory
       234567 K inactive memory
      1234567 K free memory
       456789 K buffer memory
      4567890 K swap cache
      2097152 K total swap
            0 K used swap
      2097152 K free swap

3.4 用户管理命令

useradd - 创建用户

功能:创建新的系统用户

语法

useradd [选项] 用户名

常用参数

参数说明示例
-m创建家目录useradd -m user
-d指定家目录useradd -d /home/user
-s指定 shelluseradd -s /bin/bash
-g指定主组useradd -g group
-G指定附加组useradd -G sudo,www-data
-c添加注释useradd -c "Full Name"
-e账户过期日期useradd -e 2024-12-31

示例

# 创建用户(自动创建家目录)
$ sudo useradd -m newuser

# 创建用户并指定 shell
$ sudo useradd -m -s /bin/bash newuser

# 创建用户并添加到组
$ sudo useradd -m -G sudo,developers newuser

# 创建用户并设置注释
$ sudo useradd -m -c "John Doe" jdoe

# 创建系统用户(无家目录)
$ sudo useradd -r -s /sbin/nologin appuser

# 查看用户信息
$ id newuser
uid=1001(newuser) gid=1001(newuser) groups=1001(newuser),27(sudo),1002(developers)
usermod - 修改用户

功能:修改用户账户信息

语法

usermod [选项] 用户名

常用参数

参数说明示例
-aG添加到附加组usermod -aG group user
-g修改主组usermod -g group user
-s修改 shellusermod -s /bin/bash
-d修改家目录usermod -d /new/home
-l修改登录名usermod -l newname oldname
-L锁定账户usermod -L user
-U解锁账户usermod -U user

示例

# 添加用户到组(保留原有组)
$ sudo usermod -aG sudo username
$ sudo usermod -aG docker,www-data username

# 修改用户 shell
$ sudo usermod -s /bin/zsh username

# 锁定用户账户
$ sudo usermod -L username

# 解锁用户账户
$ sudo usermod -U username

# 修改用户家目录
$ sudo usermod -d /new/home -m username
# -m 选项会移动原家目录内容
userdel - 删除用户

功能:删除系统用户

语法

userdel [选项] 用户名

常用参数

  • -r:删除用户家目录和邮件池
  • -f:强制删除

示例

# 删除用户(保留家目录)
$ sudo userdel username

# 删除用户及其家目录
$ sudo userdel -r username

# 强制删除
$ sudo userdel -f username
passwd - 修改用户密码

功能:修改用户密码

语法

passwd [选项] [用户名]

常用参数

参数说明示例
-d删除密码passwd -d user
-l锁定账户passwd -l user
-u解锁账户passwd -u user
-e强制过期passwd -e user
-S显示状态passwd -S user

示例

# 修改当前用户密码
$ passwd
Changing password for current user.
Current password:
New password:
Retype new password:

# 修改其他用户密码(需要 root)
$ sudo passwd username
New password:
Retype new password:

# 锁定用户
$ sudo passwd -l username
passwd: password changed.

# 解锁用户
$ sudo passwd -u username

# 查看密码状态
$ sudo passwd -S username
username P 01/15/2024 0 99999 7 -1
# 状态:P-可用,L-锁定,NP-无密码
su - 切换用户

功能:切换到其他用户身份

语法

su [选项] [用户名]

常用参数

  • -:模拟完整登录(加载环境变量)
  • -c:执行命令后退出

示例

# 切换到 root
$ su -
Password:

# 切换到其他用户
$ su - username
Password:

# 执行命令后退出
$ su - username -c "whoami"
username

# 不加载环境变量
$ su username
sudo - 以其他用户身份执行命令

功能:以超级用户或其他用户身份执行命令

语法

sudo [选项] 命令

常用参数

参数说明示例
-u指定用户sudo -u user cmd
-i模拟初始登录sudo -i
-s启动 shellsudo -s
-v延长超时sudo -v
-k重置超时sudo -k
-l列出权限sudo -l

示例

# 以 root 身份执行命令
$ sudo apt update
[sudo] password for user:

# 启动 root shell
$ sudo -i
# 或
$ sudo -s

# 以其他用户身份执行
$ sudo -u www-data whoami
www-data

# 查看 sudo 权限
$ sudo -l
Matching Defaults entries for user on server:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin
User user may run the following commands on server:
    (ALL : ALL) ALL

# 配置 sudo(使用 visudo)
$ sudo visudo
# 添加:
# username ALL=(ALL) ALL
# %sudo ALL=(ALL) ALL

3.5 服务管理命令

systemctl - 控制系统和服务管理器

功能:管理系统和服务(systemd)

语法

systemctl [选项] 命令 [服务名]

常用命令

服务管理

# 启动服务
$ sudo systemctl start nginx

# 停止服务
$ sudo systemctl stop nginx

# 重启服务
$ sudo systemctl restart nginx

# 重载配置
$ sudo systemctl reload nginx

# 查看状态
$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2024-01-15 10:30:00 UTC; 1 day ago

# 启用开机自启
$ sudo systemctl enable nginx

# 禁用开机自启
$ sudo systemctl disable nginx

# 查看是否启用
$ systemctl is-enabled nginx
enabled

查看所有服务

# 列出所有服务
$ systemctl list-units --type=service

# 列出已加载的服务
$ systemctl list-units --type=service --state=running

# 列出失败的服务
$ systemctl --failed

# 查看所有单元
$ systemctl list-unit-files

其他操作

# 重新加载 systemd 配置
$ sudo systemctl daemon-reload

# 查看依赖
$ systemctl list-dependencies nginx

# 查看日志
$ journalctl -u nginx
$ journalctl -u nginx -f  # 跟踪
service - 运行 System V init 脚本

功能:管理系统服务(旧版 init 系统)

语法

service [服务名] [命令]

示例

# 启动服务
$ sudo service nginx start

# 停止服务
$ sudo service nginx stop

# 重启服务
$ sudo service nginx restart

# 查看状态
$ sudo service nginx status

# ⚠️ 注意:较新系统建议使用 systemctl

3.6 软件包管理命令

apt - Debian/Ubuntu 包管理器

功能:高级包管理工具

语法

apt [选项] 命令

常用命令

# 更新软件包列表
$ sudo apt update

# 升级已安装的软件包
$ sudo apt upgrade

# 升级系统(处理依赖变化)
$ sudo apt dist-upgrade

# 安装软件包
$ sudo apt install nginx
$ sudo apt install nginx php mysql-server

# 删除软件包
$ sudo apt remove nginx
$ sudo apt purge nginx  # 删除配置文件

# 搜索软件包
$ apt search nginx

# 显示软件包信息
$ apt show nginx

# 列出已安装的软件包
$ apt list --installed

# 列出可升级的软件包
$ apt list --upgradable

# 清理下载的软件包
$ sudo apt clean
$ sudo apt autoremove  # 删除不需要的依赖

# 查看软件包依赖
$ apt depends nginx

# 查看哪个包提供文件
$ apt-file search filename
yum - RHEL/CentOS 包管理器

功能:Yellowdog Updater Modified

语法

yum [选项] 命令

常用命令

# 更新所有软件包
$ sudo yum update

# 安装软件包
$ sudo yum install nginx

# 删除软件包
$ sudo yum remove nginx

# 搜索软件包
$ yum search nginx

# 显示软件包信息
$ yum info nginx

# 列出已安装的软件包
$ yum list installed

# 清理缓存
$ sudo yum clean all

# 查看历史
$ yum history
dnf - Fedora 包管理器

功能:yum 的下一代版本

语法

dnf [选项] 命令

示例

# 更新系统
$ sudo dnf update

# 安装软件包
$ sudo dnf install nginx

# 删除软件包
$ sudo dnf remove nginx

# 搜索软件包
$ dnf search nginx

# 显示信息
$ dnf info nginx

# 清理缓存
$ sudo dnf clean all
dpkg - Debian 包工具

功能:底层 Debian 包管理

语法

dpkg [选项] 命令

常用命令

# 安装 .deb 包
$ sudo dpkg -i package.deb

# 删除包
$ sudo dpkg -r package

# 列出已安装的包
$ dpkg -l

# 查询包信息
$ dpkg -s package

# 列出包内容
$ dpkg -L package

# 查找文件属于哪个包
$ dpkg -S /path/to/file
rpm - Red Hat 包管理器

功能:Red Hat Package Manager

语法

rpm [选项] 命令

常用命令

# 安装 .rpm 包
$ sudo rpm -ivh package.rpm

# 升级包
$ sudo rpm -Uvh package.rpm

# 删除包
$ sudo rpm -e package

# 列出已安装的包
$ rpm -qa

# 查询包信息
$ rpm -qi package

# 列出包文件
$ rpm -ql package

# 查找文件属于哪个包
$ rpm -qf /path/to/file

# 验证包
$ rpm -V package

4. 进程管理命令

4.1 进程查看命令

ps - 显示进程状态

功能:显示当前进程快照

语法

ps [选项]

常用选项

BSD 风格

# 显示所有进程
$ ps aux

# 输出字段说明:
# USER     PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
# root       1  0.0  0.1 169436 11832 ?        Ss   10:30   0:01 /sbin/init
# USER     - 用户名
# PID      - 进程 ID
# %CPU     - CPU 使用率
# %MEM     - 内存使用率
# VSZ      - 虚拟内存大小
# RSS      - 常驻内存大小
# TTY      - 终端
# STAT     - 状态
# START    - 启动时间
# TIME     - CPU 时间
# COMMAND  - 命令

System V 风格

# 显示所有进程
$ ps -ef

# 输出字段:
# UID        PID  PPID  C STIME TTY          TIME CMD
# root         1     0  0 10:30 ?        00:00:01 /sbin/init
# UID      - 用户 ID
# PID      - 进程 ID
# PPID     - 父进程 ID
# C        - CPU 使用率
# STIME    - 启动时间
# TTY      - 终端
# TIME     - CPU 时间
# CMD      - 命令

其他选项

# 按用户显示
$ ps -u username

# 按 PID 显示
$ ps -p 1234,5678

# 按进程名显示
$ ps -C nginx

# 显示进程树
$ ps ajx

# 显示环境变量
$ ps e

# 显示完整命令
$ ps -ww
pgrep - 按名称查找进程

功能:根据名称和其他属性查找进程

语法

pgrep [选项] 模式

常用参数

参数说明示例
-l显示进程名pgrep -l nginx
-a显示完整命令pgrep -a nginx
-u按用户查找pgrep -u username
-f匹配完整命令pgrep -f pattern
-P按父进程查找pgrep -P 1

示例

# 查找 nginx 进程
$ pgrep nginx
1234
5678

# 显示进程名
$ pgrep -l nginx
1234 nginx
5678 nginx

# 显示完整命令
$ pgrep -a nginx
1234 nginx: master process /usr/sbin/nginx
5678 nginx: worker process

# 查找特定用户的进程
$ pgrep -u www-data

# 匹配完整命令行
$ pgrep -f "python.*app.py"
pidof - 查找进程 ID

功能:查找运行中程序的 PID

语法

pidof [选项] 程序名

示例

# 查找 nginx 的 PID
$ pidof nginx
5678 1234

# 只返回一个 PID
$ pidof -s nginx
5678

# 跳过特定 PID
$ pidof -o 1234 nginx
5678

4.2 进程控制命令

kill - 终止进程

功能:向进程发送信号

语法

kill [选项] [信号] PID...

常用信号

信号编号说明
SIGHUP1挂起,重新加载配置
SIGINT2中断(Ctrl+C)
SIGQUIT3退出
SIGKILL9强制终止
SIGTERM15终止(默认)
SIGSTOP19停止
SIGCONT18继续
SIGUSR110用户定义 1
SIGUSR212用户定义 2

示例

# 终止进程(发送 SIGTERM)
$ kill 1234

# 强制终止
$ kill -9 1234
$ kill -KILL 1234

# 重新加载配置
$ kill -HUP 1234
$ kill -1 1234

# 优雅终止
$ kill -TERM 1234
$ kill -15 1234

# 停止进程
$ kill -STOP 1234

# 继续进程
$ kill -CONT 1234

# 列出所有信号
$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
...
killall - 按名称终止进程

功能:按进程名终止进程

语法

killall [选项] 进程名

常用参数

  • -i:交互式确认
  • -e:精确匹配
  • -I:忽略大小写
  • -u:按用户
  • -s:指定信号

示例

# 终止所有 nginx 进程
$ sudo killall nginx

# 交互式终止
$ sudo killall -i python

# 忽略大小写
$ sudo killall -I NGINX

# 发送特定信号
$ sudo killall -HUP nginx

# 只终止特定用户的进程
$ sudo killall -u www-data php-fpm
pkill - 按模式终止进程

功能:根据模式查找并终止进程

语法

pkill [选项] 模式

常用参数

  • -f:匹配完整命令
  • -u:按用户
  • -I:忽略大小写
  • -signal:指定信号

示例

# 终止匹配进程
$ pkill firefox

# 匹配完整命令
$ pkill -f "python app.py"

# 忽略大小写
$ pkill -I FIREFOX

# 发送特定信号
$ pkill -HUP nginx

# 按用户终止
$ pkill -u username
nice - 以调整优先级运行程序

功能:以指定的优先级启动进程

语法

nice [选项] 命令

常用参数

  • -n <值>:指定优先级(-20 到 19)

示例

# 以默认优先级运行
$ nice -n 0 long-running-task

# 以高优先级运行(需要 root)
$ sudo nice -n -10 important-task

# 以低优先级运行
$ nice -n 19 backup-task

# 优先级范围:-20(最高)到 19(最低)
# 普通用户只能降低优先级(增加 nice 值)
renice - 调整运行中进程的优先级

功能:修改已运行进程的优先级

语法

renice [选项] 优先级 [[-p] PID...]

示例

# 调整进程优先级
$ sudo renice -n 10 -p 1234
1234 (old priority 0) (new priority 10)

# 调整多个进程
$ sudo renice -n 5 -p 1234 -p 5678

# 调整用户所有进程
$ sudo renice -n 10 -u username

# 调整组所有进程
$ sudo renice -n 10 -g groupname

# 查看当前优先级
$ ps -o pid,nice,command
  PID  NI COMMAND
 1234   0 nginx
 5678  10 backup

4.3 后台作业管理

后台运行(&)

功能:在后台运行命令

示例

# 在后台运行命令
$ long-task &
[1] 12345

# 运行多个后台任务
$ task1 & task2 & task3 &

# 查看所有后台作业
$ jobs
[1]   Running                 long-task &
[2]   Running                 task2 &
[3]   Running                 task3 &
jobs - 显示作业状态

功能:显示 shell 作业状态

语法

jobs [选项]

常用参数

  • -l:显示 PID
  • -r:只显示运行中的
  • -s:只显示停止的

示例

# 查看作业
$ jobs
[1]   Running                 vim &
[2]-  Stopped                 cat
[3]+  Running                 tail -f log &

# 显示 PID
$ jobs -l
[1]  12345 Running                 vim &
fg - 将作业移到前台

功能:将后台作业移到前台

语法

fg [作业号]

示例

# 将作业 1 移到前台
$ fg %1

# 移到前台(默认最近作业)
$ fg

# 输出:
vim
# 现在 vim 在前台运行
bg - 将作业移到后台

功能:将停止的作业移到后台继续运行

语法

bg [作业号]

示例

# 前台按 Ctrl+Z 停止作业
$ cat
^Z
[1]+  Stopped                 cat

# 在后台继续运行
$ bg %1
[1]+ cat &

# 查看
$ jobs
[1]+  Running                 cat &
nohup - 忽略挂起信号运行

功能:运行命令忽略 SIGHUP 信号(退出终端后继续运行)

语法

nohup 命令 [参数]

示例

# 运行命令,输出到 nohup.out
$ nohup long-task &
nohup: ignoring input and appending output to 'nohup.out'

# 指定输出文件
$ nohup long-task > output.log 2>&1 &

# 查看输出
$ tail -f nohup.out

# 查看进程
$ ps aux | grep long-task

4.4 系统资源监控

iotop - I/O 监控工具

功能:显示每个进程的 I/O 使用情况

语法

iotop [选项]

示例

# 启动 iotop
$ sudo iotop

# 只显示 I/O 进程
$ sudo iotop -o

# 批量模式
$ sudo iotop -b -n 5

# ⚠️ 需要 root 权限和 Python 支持
nethogs - 网络带宽监控

功能:按进程显示网络带宽使用

语法

nethogs [选项] [设备]

示例

# 监控所有设备
$ sudo nethogs

# 监控特定设备
$ sudo nethogs eth0

# ⚠️ 需要先安装

5. 网络操作命令

5.1 网络配置命令

ip - 显示和操作路由、网络设备、接口和隧道

功能:现代网络配置工具(替代 ifconfig)

语法

ip [选项] 对象 [命令]

常用命令

显示 IP 地址

# 显示所有接口
$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:12:34:56 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
       valid_lft 86399sec preferred_lft 86399sec

# 简短显示
$ ip -br addr
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             192.168.1.100/24

显示路由

# 显示路由表
$ ip route
default via 192.168.1.1 dev eth0 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100

# 显示统计
$ ip -s route

显示邻居

# 显示 ARP 缓存
$ ip neigh
192.168.1.1 dev eth0 lladdr 00:11:22:33:44:55 REACHABLE
192.168.1.50 dev eth0 lladdr aa:bb:cc:dd:ee:ff STALE

配置接口

# 启用/禁用接口
$ sudo ip link set eth0 up
$ sudo ip link set eth0 down

# 添加 IP 地址
$ sudo ip addr add 192.168.1.100/24 dev eth0

# 删除 IP 地址
$ sudo ip addr del 192.168.1.100/24 dev eth0

# 添加路由
$ sudo ip route add 10.0.0.0/8 via 192.168.1.1

# 删除路由
$ sudo ip route del 10.0.0.0/8

# 添加默认网关
$ sudo ip route add default via 192.168.1.1
ifconfig - 配置网络接口(已废弃)

功能:旧版网络配置工具

语法

ifconfig [接口] [选项]

示例

# 显示所有接口
$ ifconfig -a

# 显示特定接口
$ ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.100  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::a00:27ff:fe12:3456  prefixlen 64  scopeid 0x20<link>
        ether 08:00:27:12:34:56  txqueuelen 1000  (Ethernet)

# ⚠️ 注意:已废弃,建议使用 ip 命令
route - 显示和操作 IP 路由表

功能:查看和操作路由表

语法

route [选项]

示例

# 显示路由表
$ route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    100    0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 eth0

# ⚠️ 注意:已废弃,建议使用 ip route
netstat - 显示网络连接、路由表等

功能:显示网络统计信息

语法

netstat [选项]

常用选项

# 显示所有连接
$ netstat -a

# 显示 TCP 连接
$ netstat -at

# 显示 UDP 连接
$ netstat -au

# 显示监听端口
$ netstat -l

# 显示数字格式
$ netstat -n

# 显示进程
$ netstat -p

# 显示统计
$ netstat -s

# 组合使用
$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1234/sshd
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      5678/nginx

# ⚠️ 注意:已废弃,建议使用 ss 命令
ss - 显示 socket 统计

功能:netstat 的现代替代品

语法

ss [选项]

常用选项

参数说明示例
-tTCP 连接ss -t
-uUDP 连接ss -u
-l监听端口ss -l
-n数字格式ss -n
-p显示进程ss -p
-a所有连接ss -a
-s统计信息ss -s

示例

# 显示所有 TCP 连接
$ ss -t

# 显示监听端口
$ ss -tln
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port
LISTEN     0      128          0.0.0.0:22                    0.0.0.0:*
LISTEN     0      511          0.0.0.0:80                    0.0.0.0:*

# 显示进程
$ ss -tlnp
State      Recv-Q Send-Q Local Address:Port  Peer Address:Port  Process
LISTEN     0      128          0.0.0.0:22       0.0.0.0:*       users:(("sshd",pid=1234,fd=3))

# 显示特定端口
$ ss -tlnp | grep :80

# 显示统计
$ ss -s
Total: 1234 (kernel 4567)
TCP:   567 (estab 234, closed 123, orphaned 0, synrecv 0, timewait 0)

5.2 网络测试命令

ping - 测试网络连接

功能:发送 ICMP ECHO_REQUEST 到网络主机

语法

ping [选项] 主机

常用参数

参数说明示例
-c <次数>发送次数ping -c 4 host
-i <秒>间隔时间ping -i 0.5 host
-s <大小>包大小ping -s 1000 host
-W <秒>超时时间ping -W 2 host
-f洪水模式ping -f host

示例

# ping 主机
$ ping google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=116 time=12.3 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=116 time=11.8 ms

# 发送 4 次后停止
$ ping -c 4 google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=1 ttl=116 time=12.1 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=2 ttl=116 time=11.9 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=3 ttl=116 time=12.0 ms
64 bytes from lga25s71-in-f14.1e100.net (142.250.185.46): icmp_seq=4 ttl=116 time=12.2 ms

--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 11.876/12.051/12.234/0.123 ms
traceroute - 跟踪数据包路径

功能:显示数据包到网络主机的路径

语法

traceroute [选项] 主机

常用参数

  • -I:使用 ICMP
  • -T:使用 TCP
  • -U:使用 UDP
  • -m <TTL>:最大跳数
  • -q <数量>:每跳查询数

示例

# 跟踪到主机的路径
$ traceroute google.com
traceroute to google.com (142.250.185.46), 30 hops max, 60 byte packets
 1  192.168.1.1 (192.168.1.1)  2.345 ms  2.123 ms  2.234 ms
 2  10.0.0.1 (10.0.0.1)  10.234 ms  10.123 ms  10.345 ms
 3  72.14.215.85 (72.14.215.85)  15.234 ms  15.123 ms  15.345 ms
 ...

# 使用 ICMP
$ traceroute -I google.com

# 限制跳数
$ traceroute -m 15 google.com
mtr - 网络诊断工具

功能:结合 ping 和 traceroute 功能

语法

mtr [选项] 主机

示例

# 交互模式
$ mtr google.com

# 报告模式
$ mtr -r google.com
Start: 2024-01-15T10:30:00+0000
HOST: server                Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 192.168.1.1         0.0%    10    2.3   2.1   1.8   2.5   0.2
  2.|-- 10.0.0.1            0.0%    10   10.2  10.1   9.8  10.5   0.2
  3.|-- 72.14.215.85        0.0%    10   15.2  15.1  14.8  15.5   0.2

# 发送指定包数
$ mtr -c 10 google.com
nslookup - 查询 DNS

功能:查询 DNS 获取域名信息

语法

nslookup [选项] [域名] [服务器]

示例

# 查询域名
$ nslookup google.com
Server:         8.8.8.8
Address:        8.8.8.8#53

Non-authoritative answer:
Name:   google.com
Address: 142.250.185.46
Name:   google.com
Address: 2607:f8b0:4004:800::200e

# 查询特定记录类型
$ nslookup -type=MX google.com
$ nslookup -type=NS google.com
$ nslookup -type=TXT google.com

# 指定 DNS 服务器
$ nslookup google.com 8.8.8.8
dig - DNS 查询工具

功能:强大的 DNS 查询工具

语法

dig [选项] [域名] [类型]

常用类型

  • A:IPv4 地址
  • AAAA:IPv6 地址
  • MX:邮件交换
  • NS:名称服务器
  • TXT:文本记录
  • CNAME:别名

示例

# 查询 A 记录
$ dig google.com

# 查询 MX 记录
$ dig google.com MX

# 查询 NS 记录
$ dig google.com NS

# 简短输出
$ dig +short google.com
142.250.185.46

# 查询特定 DNS 服务器
$ dig @8.8.8.8 google.com

# 反向查询
$ dig -x 8.8.8.8

# 批量查询
$ dig -f domains.txt

5.3 网络传输命令

curl - 数据传输工具

功能:使用各种协议传输数据

语法

curl [选项] URL

常用参数

参数说明示例
-O保存为原文件名curl -O url
-o保存为指定文件名curl -o file url
-L跟随重定向curl -L url
-I只显示头部curl -I url
-X指定请求方法curl -X POST
-H添加头部curl -H "Header"
-dPOST 数据curl -d "data"
-u用户认证curl -u user:pass
-k忽略证书验证curl -k url
-v详细模式curl -v url

示例

# 下载文件
$ curl -O https://example.com/file.zip

# 下载并重命名
$ curl -o myfile.zip https://example.com/file.zip

# 跟随重定向
$ curl -L https://example.com

# 查看响应头
$ curl -I https://example.com
HTTP/1.1 200 OK
Date: Mon, 15 Jan 2024 10:30:00 GMT
Content-Type: text/html
Content-Length: 1234

# GET 请求
$ curl https://api.example.com/users

# POST 请求
$ curl -X POST -d "name=value" https://api.example.com/users

# 发送 JSON
$ curl -X POST -H "Content-Type: application/json" \
  -d '{"name":"John","age":30}' \
  https://api.example.com/users

# 带认证的请求
$ curl -u username:password https://api.example.com/users

# 使用 Bearer Token
$ curl -H "Authorization: Bearer token123" https://api.example.com/users

# 上传文件
$ curl -X POST -F "file=@localfile.txt" https://example.com/upload

# 测试 API
$ curl -v https://api.example.com/users
wget - 网络下载工具

功能:从网络下载文件

语法

wget [选项] URL

常用参数

参数说明示例
-O保存为指定文件名wget -O file url
-c断点续传wget -c url
-r递归下载wget -r url
-l递归深度wget -r -l 2 url
-p下载所有资源wget -p url
-q安静模式wget -q url
-b后台下载wget -b url

示例

# 下载文件
$ wget https://example.com/file.zip

# 下载并重命名
$ wget -O myfile.zip https://example.com/file.zip

# 断点续传
$ wget -c https://example.com/largefile.zip

# 递归下载整个网站
$ wget -r https://example.com

# 限制深度
$ wget -r -l 2 https://example.com

# 下载页面所有资源
$ wget -p https://example.com/page.html

# 后台下载
$ wget -b https://example.com/largefile.zip
Continuing in background, pid 12345.
Output will be written to 'wget-log'.

# 限速下载
$ wget --limit-rate=100k https://example.com/file.zip
scp - 安全复制

功能:通过 SSH 安全复制文件

语法

scp [选项] 源文件 目标文件

常用参数

  • -r:递归复制目录
  • -P:指定端口
  • -p:保留文件属性
  • -C:压缩传输
  • -i:指定密钥

示例

# 本地复制到远程
$ scp file.txt user@remote:/path/to/destination
$ scp file.txt user@192.168.1.100:/home/user/

# 远程复制到本地
$ scp user@remote:/path/to/file.txt /local/path/

# 复制目录
$ scp -r directory/ user@remote:/path/

# 指定端口
$ scp -P 2222 file.txt user@remote:/path/

# 使用密钥
$ scp -i ~/.ssh/id_rsa file.txt user@remote:/path/

# 保留属性
$ scp -p file.txt user@remote:/path/

# 压缩传输
$ scp -C largefile.tar.gz user@remote:/path/
rsync - 远程同步工具

功能:快速增量文件同步工具

语法

rsync [选项] 源 目标

常用参数

参数说明示例
-a归档模式rsync -a src dst
-v详细模式rsync -v src dst
-z压缩传输rsync -z src dst
-P显示进度rsync -P src dst
-e指定 shellrsync -e ssh
--delete删除目标多余文件rsync --delete
--exclude排除文件rsync --exclude

示例

# 本地同步
$ rsync -av source/ destination/

# 远程同步(拉取)
$ rsync -avz user@remote:/remote/path /local/path

# 远程同步(推送)
$ rsync -avz /local/path user@remote:/remote/path

# 使用 SSH
$ rsync -avz -e ssh source/ user@remote:/destination/

# 显示进度
$ rsync -avzP source/ user@remote:/destination/

# 删除目标多余文件
$ rsync -av --delete source/ destination/

# 排除文件
$ rsync -av --exclude '*.log' --exclude 'tmp/' source/ destination/

# 带宽限制
$ rsync -avz --bwlimit=1000 source/ destination/

# 干运行(测试)
$ rsync -avn source/ destination/

5.4 端口和连接命令

lsof - 列出打开的文件

功能:列出打开的文件和进程

语法

lsof [选项]

网络相关

# 列出所有网络连接
$ lsof -i

# 列出 TCP 连接
$ lsof -i tcp

# 列出 UDP 连接
$ lsof -i udp

# 列出特定端口
$ lsof -i :80
$ lsof -i :443

# 列出监听端口
$ lsof -i -sTCP:LISTEN
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx    1234 root    6u  IPv4  12345      0t0  TCP *:http (LISTEN)
nginx    1234 root    7u  IPv4  12346      0t0  TCP *:https (LISTEN)

# 查看进程打开的文件
$ lsof -p 1234

# 查看用户打开的文件
$ lsof -u username

# 查看特定文件
$ lsof /var/log/syslog
nc - 网络工具

功能:读写网络连接(netcat)

语法

nc [选项] 主机 端口

常用参数

  • -l:监听模式
  • -p:指定端口
  • -z:扫描模式
  • -v:详细模式
  • -w:超时时间

示例

# 连接到远程主机
$ nc example.com 80

# 监听端口
$ nc -l -p 1234

# 端口扫描
$ nc -zv example.com 20-80

# 文件传输(接收端)
$ nc -l -p 1234 > received_file

# 文件传输(发送端)
$ nc example.com 1234 < file.txt

# 聊天服务器
# 服务器端:nc -l -p 1234
# 客户端:nc server_ip 1234

# 测试端口连通性
$ nc -zv 192.168.1.1 22
Connection to 192.168.1.1 22 port [tcp/ssh] succeeded!

5.5 防火墙命令

iptables - IPv4 数据包过滤

功能:配置 IPv4 防火墙规则

语法

iptables [选项] 链 规则

基本链

  • INPUT:入站流量
  • OUTPUT:出站流量
  • FORWARD:转发流量

常用操作

# 查看规则
$ sudo iptables -L
$ sudo iptables -L -n -v

# 查看特定链
$ sudo iptables -L INPUT

# 添加规则
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

# 插入规则
$ sudo iptables -I INPUT 1 -p tcp --dport 443 -j ACCEPT

# 删除规则
$ sudo iptables -D INPUT 1

# 清空链
$ sudo iptables -F INPUT

# 设置默认策略
$ sudo iptables -P INPUT DROP
$ sudo iptables -P FORWARD DROP
$ sudo iptables -P OUTPUT ACCEPT

# 保存规则(Debian/Ubuntu)
$ sudo iptables-save > /etc/iptables/rules.v4

# 保存规则(RHEL/CentOS)
$ sudo service iptables save

常用规则示例

# 允许 SSH
$ sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP/HTTPS
$ sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许已建立的连接
$ sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许本地回环
$ sudo iptables -A INPUT -i lo -j ACCEPT

# 阻止特定 IP
$ sudo iptables -A INPUT -s 192.168.1.100 -j DROP

# 阻止端口扫描
$ sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
firewalld - 动态防火墙管理

功能:动态防火墙管理器

语法

firewall-cmd [选项]

常用命令

# 查看状态
$ sudo firewall-cmd --state

# 查看区域
$ sudo firewall-cmd --get-active-zones

# 查看服务
$ sudo firewall-cmd --list-services

# 添加服务
$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

# 添加端口
$ sudo firewall-cmd --permanent --add-port=8080/tcp

# 移除服务
$ sudo firewall-cmd --permanent --remove-service=http

# 重新加载
$ sudo firewall-cmd --reload

# 查看帮助
$ sudo firewall-cmd --help
ufw - 简单防火墙

功能:Uncomplicated Firewall

语法

ufw [选项] 命令

常用命令

# 启用防火墙
$ sudo ufw enable

# 禁用防火墙
$ sudo ufw disable

# 查看状态
$ sudo ufw status
$ sudo ufw status verbose

# 允许服务
$ sudo ufw allow ssh
$ sudo ufw allow http
$ sudo ufw allow https

# 允许端口
$ sudo ufw allow 22
$ sudo ufw allow 80/tcp

# 允许 IP 范围
$ sudo ufw allow from 192.168.1.0/24

# 拒绝访问
$ sudo ufw deny 8080

# 删除规则
$ sudo ufw delete allow 22

# 重置
$ sudo ufw reset

6. 文本处理命令

6.1 文本搜索命令

grep - 文本搜索工具

功能:使用正则表达式搜索文本

语法

grep [选项] 模式 [文件...]

常用参数

参数说明示例
-i忽略大小写grep -i pattern
-v反向匹配grep -v pattern
-r递归搜索grep -r pattern
-n显示行号grep -n pattern
-c计数grep -c pattern
-l只显示文件名grep -l pattern
-A <N>显示后 N 行grep -A 2 pattern
-B <N>显示前 N 行grep -B 2 pattern
-C <N>显示前后 N 行grep -C 2 pattern
-E扩展正则grep -E pattern

示例

# 基本搜索
$ grep "error" /var/log/syslog

# 忽略大小写
$ grep -i "error" /var/log/syslog

# 递归搜索目录
$ grep -r "TODO" /home/user/projects

# 显示行号
$ grep -n "function" script.js

# 统计匹配行数
$ grep -c "error" /var/log/syslog
15

# 只显示文件名
$ grep -r "import" *.py

# 显示匹配行及前后 2 行
$ grep -C 2 "error" /var/log/syslog

# 反向匹配(不包含 pattern 的行)
$ grep -v "^#" config.txt

# 使用扩展正则
$ grep -E "error|warning|critical" /var/log/syslog
$ egrep "error|warning" /var/log/syslog

# 正则表达式示例
$ grep "^root" /etc/passwd          # 以 root 开头
$ grep "bash$" /etc/passwd          # 以 bash 结尾
$ grep "^[0-9]" file.txt            # 以数字开头
$ grep -E "^[a-z]{3,5}$" file.txt   # 3-5 个小写字母

6.2 文本编辑命令

sed - 流编辑器

功能:对文本进行过滤和转换

语法

sed [选项] '脚本' [文件...]

常用操作

替换

# 替换每行第一个匹配
$ sed 's/old/new/' file.txt

# 替换所有匹配
$ sed 's/old/new/g' file.txt

# 替换特定行
$ sed '1,10s/old/new/g' file.txt

# 直接修改文件
$ sed -i 's/old/new/g' file.txt

# 备份后修改
$ sed -i.bak 's/old/new/g' file.txt

删除

# 删除空行
$ sed '/^$/d' file.txt

# 删除特定行
$ sed '3d' file.txt           # 删除第 3 行
$ sed '1,5d' file.txt         # 删除 1-5 行
$ sed '/pattern/d' file.txt   # 删除匹配行

插入和追加

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

# 在行后追加
$ sed '3a\New line' file.txt

打印

# 打印特定行
$ sed -n '5p' file.txt
$ sed -n '5,10p' file.txt
$ sed -n '/pattern/p' file.txt

综合示例

# 替换配置文件中的值
$ sed -i 's/PORT=8080/PORT=3000/' config.env

# 删除注释行和空行
$ sed '/^#/d; /^$/d' config.txt

# 提取特定列
$ sed 's/:.*//' /etc/passwd    # 提取用户名

# 多文件处理
$ sed -i 's/old/new/g' *.txt
awk - 文本分析和处理

功能:强大的文本处理和数据提取工具

语法

awk [选项] '模式 {动作}' [文件...]

内置变量

变量说明
$0整行
$1, $2...第 1、2…列
NF字段数
NR行号
FS输入分隔符
OFS输出分隔符

示例

# 打印第一列
$ awk '{print $1}' file.txt

# 打印特定列
$ awk -F: '{print $1, $3}' /etc/passwd
root 0
daemon 1

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

# 计算总和
$ awk '{sum+=$1} END {print sum}' numbers.txt

# 统计行数
$ awk 'END {print NR}' file.txt

# 格式化输出
$ awk -F: '{printf "%-20s %5d\n", $1, $3}' /etc/passwd

# 多文件处理
$ awk '{print FILENAME, $0}' file1.txt file2.txt

# 复杂示例:统计日志中各状态码数量
$ awk '{count[$9]++} END {for (code in count) print code, count[code]}' access.log

6.3 文本排序和去重

sort - 排序文本

功能:对文本行进行排序

语法

sort [选项] [文件...]

常用参数

参数说明示例
-n数字排序sort -n
-r反向排序sort -r
-h人类可读数字sort -h
-k指定列sort -k 2
-t指定分隔符sort -t:
-u去重排序sort -u
-f忽略大小写sort -f

示例

# 基本排序
$ sort file.txt

# 数字排序
$ sort -n numbers.txt
1
2
10
100

# 反向排序
$ sort -r file.txt

# 按列排序
$ sort -t: -k 3 /etc/passwd    # 按 UID 排序

# 人类可读大小排序
$ du -h | sort -h

# 去重排序
$ sort -u file.txt

# 多列排序
$ sort -t: -k 3,3n -k 1,1 /etc/passwd
uniq - 报告或忽略重复行

功能:过滤相邻的重复行

语法

uniq [选项]

常用参数

  • -c:显示每行出现次数
  • -d:只显示重复行
  • -u:只显示唯一行
  • -i:忽略大小写

示例

# 去重(需要先排序)
$ sort file.txt | uniq

# 统计出现次数
$ sort file.txt | uniq -c
   5 apple
   3 banana
   7 orange

# 只显示重复行
$ sort file.txt | uniq -d

# 只显示唯一行
$ sort file.txt | uniq -u
cut - 删除文本列

功能:按列提取文本

语法

cut [选项] [文件...]

常用参数

  • -f:选择字段
  • -d:指定分隔符
  • -c:选择字符

示例

# 提取第一列
$ cut -d: -f 1 /etc/passwd
root
daemon

# 提取多列
$ cut -d: -f 1,3 /etc/passwd
root:0
daemon:1

# 提取字符
$ cut -c 1-5 file.txt

# 提取范围
$ cut -d: -f 1-3 /etc/passwd
paste - 合并文本行

功能:合并文件的对应行

语法

paste [选项] 文件...

常用参数

  • -d:指定分隔符
  • -s:串行合并

示例

# 合并两个文件
$ paste file1.txt file2.txt

# 指定分隔符
$ paste -d: file1.txt file2.txt

# 串行合并
$ paste -s file.txt

6.4 文本比较命令

diff - 比较文件差异

功能:逐行比较文件差异

语法

diff [选项] 文件 1 文件 2

常用参数

参数说明示例
-r递归比较目录diff -r dir1 dir2
-q只显示是否不同diff -q f1 f2
-u统一格式diff -u f1 f2
-c上下文格式diff -c f1 f2
-y并排显示diff -y f1 f2
-i忽略大小写diff -i f1 f2

示例

# 比较两个文件
$ diff file1.txt file2.txt
2c2
< old line
---
> new line

# 统一格式
$ diff -u file1.txt file2.txt
--- file1.txt   2024-01-15 10:30:00
+++ file2.txt   2024-01-15 10:31:00
@@ -1,5 +1,5 @@
 line 1
-old line
+new line
 line 3

# 递归比较目录
$ diff -r dir1/ dir2/

# 并排显示
$ diff -y file1.txt file2.txt
line 1                          line 1
old line                      | new line
line 3                          line 3
cmp - 逐字节比较文件

功能:逐字节比较文件

语法

cmp [选项] 文件 1 文件 2

示例

# 比较文件
$ cmp file1.bin file2.bin
file1.bin file2.bin differ: byte 10, line 1

# 安静模式(只返回退出码)
$ cmp -s file1.bin file2.bin
if [ $? -eq 0 ]; then
    echo "Files are identical"
fi
comm - 比较排序文件

功能:比较两个已排序文件的共同行和不同行

语法

comm [选项] 文件 1 文件 2

示例

# 比较两个文件
$ comm file1.txt file2.txt
# 输出三列:
# 第 1 列:只在 file1 中的行
# 第 2 列:只在 file2 中的行
# 第 3 列:两个文件都有的行

# 只显示共同行
$ comm -12 file1.txt file2.txt

# 只显示 file1 独有的
$ comm -23 file1.txt file2.txt

# 只显示 file2 独有的
$ comm -13 file1.txt file2.txt

6.5 字符处理命令

wc - 统计字数

功能:统计行数、字数、字节数

语法

wc [选项] [文件...]

常用参数

  • -l:行数
  • -w:字数
  • -c:字节数
  • -m:字符数
  • -L:最长行长度

示例

# 统计所有
$ wc file.txt
  10  50 300 file.txt
# 10 行,50 字,300 字节

# 只统计行数
$ wc -l file.txt
10 file.txt

# 统计多个文件
$ wc -l *.txt

# 管道输入
$ cat file.txt | wc -l
10
tr - 转换或删除字符

功能:转换或删除字符

语法

tr [选项] 集合 1 [集合 2]

示例

# 小写转大写
$ echo "hello" | tr 'a-z' 'A-Z'
HELLO

# 删除字符
$ echo "hello" | tr -d 'l'
heo

# 压缩重复字符
$ echo "aaabbbccc" | tr -s 'a-z'
abc

# 替换换行为空格
$ cat file.txt | tr '\n' ' '

# 生成密码
$ tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 16
split - 分割文件

功能:将大文件分割成小文件

语法

split [选项] [输入文件] [输出前缀]

常用参数

  • -b:按字节分割
  • -l:按行分割
  • -d:使用数字后缀

示例

# 按大小分割
$ split -b 10M largefile.tar.gz part_

# 按行数分割
$ split -l 1000 largefile.txt part_

# 使用数字后缀
$ split -d -l 1000 file.txt part_

# 分割后合并
$ cat part_* > originalfile
join - 连接文件的共同字段

功能:基于共同字段连接两个文件

语法

join [选项] 文件 1 文件 2

示例

# 连接两个文件
$ join file1.txt file2.txt

# 指定字段
$ join -1 2 -2 1 file1.txt file2.txt

# 指定分隔符
$ join -t: file1.txt file2.txt

7. 压缩与归档命令

7.1 tar - 归档工具

功能:创建或提取归档文件

语法

tar [选项] [归档文件] [文件...]

常用选项

选项说明记忆
-c创建归档create
-x提取归档extract
-t列出内容table
-f指定文件file
-v详细模式verbose
-zgzip 压缩-
-jbzip2 压缩-
-Jxz 压缩-
-C指定目录change

示例

# 创建归档
$ tar -cvf archive.tar file1.txt file2.txt
file1.txt
file2.txt

# 创建目录归档
$ tar -cvf backup.tar /home/user/

# gzip 压缩
$ tar -czvf archive.tar.gz /home/user/

# bzip2 压缩
$ tar -cjvf archive.tar.bz2 /home/user/

# xz 压缩
$ tar -cJvf archive.tar.xz /home/user/

# 查看归档内容
$ tar -tvf archive.tar.gz

# 提取归档
$ tar -xvf archive.tar

# 提取到指定目录
$ tar -xvf archive.tar -C /path/to/extract

# 提取特定文件
$ tar -xvf archive.tar file1.txt

# 提取 gzip 压缩
$ tar -xzvf archive.tar.gz

# 提取 bzip2 压缩
$ tar -xjvf archive.tar.bz2

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

7.2 gzip - 压缩工具

功能:GNU 压缩工具

语法

gzip [选项] 文件...

常用参数

  • -d:解压缩
  • -k:保留原文件
  • -r:递归压缩
  • -9:最大压缩
  • -1:最快压缩

示例

# 压缩文件
$ gzip file.txt
# 生成 file.txt.gz

# 保留原文件
$ gzip -k file.txt

# 解压缩
$ gzip -d file.txt.gz
$ gunzip file.txt.gz

# 递归压缩
$ gzip -r directory/

# 查看压缩信息
$ gzip -l file.txt.gz

7.3 bzip2 - 压缩工具

功能:Burrows-Wheeler 压缩工具

语法

bzip2 [选项] 文件...

示例

# 压缩文件
$ bzip2 file.txt
# 生成 file.txt.bz2

# 保留原文件
$ bzip2 -k file.txt

# 解压缩
$ bzip2 -d file.txt.bz2
$ bunzip2 file.txt.bz2

# 测试完整性
$ bzip2 -t file.txt.bz2

7.4 xz - 压缩工具

功能:高压缩比工具

语法

xz [选项] 文件...

示例

# 压缩文件
$ xz file.txt
# 生成 file.txt.xz

# 保留原文件
$ xz -k file.txt

# 解压缩
$ xz -d file.txt.xz
$ unxz file.txt.xz

# 最大压缩
$ xz -9 file.txt

7.5 zip/unzip - 压缩工具

功能:ZIP 格式压缩工具

语法

zip [选项] 压缩包 文件...
unzip [选项] 压缩包

示例

# 压缩文件
$ zip archive.zip file1.txt file2.txt

# 压缩目录
$ zip -r archive.zip directory/

# 排除文件
$ zip -r archive.zip directory/ -x "*.log" -x "tmp/*"

# 解压文件
$ unzip archive.zip

# 解压到指定目录
$ unzip archive.zip -d /path/to/extract

# 查看内容
$ unzip -l archive.zip

# 解压特定文件
$ unzip archive.zip file1.txt

8. 高级技巧与最佳实践

8.1 管道(|)的高级应用

功能:将一个命令的输出作为另一个命令的输入

示例

# 基本管道
$ ls -l | grep ".txt"

# 多个管道组合
$ ps aux | grep nginx | grep -v grep | awk '{print $2}'

# 查找最大的 10 个文件
$ find /home -type f -exec du -h {} + | sort -hr | head -10

# 统计代码行数
$ find . -name "*.py" -exec cat {} + | wc -l

# 实时监控日志中的错误
$ tail -f /var/log/syslog | grep --line-buffered "error"

# 提取 IP 地址并排序
$ cat access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -10

8.2 重定向技巧

标准流

  • 0:标准输入(stdin)
  • 1:标准输出(stdout)
  • 2:标准错误(stderr)

示例

# 重定向输出
$ command > output.txt
$ command >> output.txt  # 追加

# 重定向输入
$ command < input.txt

# 合并标准输出和错误
$ command > output.txt 2>&1
$ command &> output.txt  # Bash 4+

# 丢弃输出
$ command > /dev/null 2>&1
$ command &> /dev/null

# 只丢弃错误
$ command 2>/dev/null

# 只保留错误
$ command >/dev/null 2>&1
$ command 2>&1 1>/dev/null

# Here 文档
$ cat << EOF > file.txt
Line 1
Line 2
EOF

# Here 字符串
$ grep "pattern" <<< "search in this string"

8.3 命令组合

示例

# 顺序执行(不管成功与否)
$ command1; command2

# 成功则执行(&&)
$ command1 && command2
$ mkdir -p /path/to/dir && cd /path/to/dir

# 失败则执行(||)
$ command1 || command2
$ cd /backup || exit 1

# 组合使用
$ mkdir backup && cp -r data backup || echo "Backup failed"

# 条件执行
$ test -f file.txt && cat file.txt || echo "File not found"

8.4 命令替换

示例

# 命令替换
$ current_date=$(date +%Y-%m-%d)
$ current_date=`date +%Y-%m-%d`  # 旧语法

# 在命令中使用
$ echo "Today is $(date)"
$ backup_file="backup_$(date +%Y%m%d).tar.gz"
$ tar -czf "$backup_file" /data/

# 嵌套使用
$ echo "Files: $(ls -1 | wc -l)"

8.5 别名和函数

别名

# 创建别名
$ alias ll='ls -alF'
$ alias la='ls -A'
$ alias rm='rm -i'
$ alias ..='cd ..'
$ alias update='sudo apt update && sudo apt upgrade -y'

# 查看别名
$ alias

# 删除别名
$ unalias rm

# 永久保存(添加到 ~/.bashrc)
$ echo "alias ll='ls -alF'" >> ~/.bashrc
$ source ~/.bashrc

函数

# 简单函数
$ mkcd() { mkdir -p "$1" && cd "$1"; }

# 带参数的函数
$ extract() {
    if [ -f "$1" ]; then
        case "$1" in
            *.tar.gz) tar -xzvf "$1" ;;
            *.tar.bz2) tar -xjvf "$1" ;;
            *.zip) unzip "$1" ;;
            *) echo "Unsupported format" ;;
        esac
    else
        echo "File not found"
    fi
}

# 查看函数
$ declare -f

# 永久保存(添加到 ~/.bashrc)

8.6 历史命令

示例

# 查看历史
$ history
$ history 20

# 执行历史命令
$ !123          # 执行第 123 条
$ !!            # 执行上一条
$ !ls           # 执行最近一条 ls 命令
$ !?pattern     # 执行包含 pattern 的最近命令

# 搜索历史
# Ctrl+R 然后输入搜索内容

# 重复执行并替换
$ ^old^new      # 将上一条命令的 old 替换为 new

# 使用历史扩展
$ !ls:p         # 打印但不执行
$ !ls:*         # 所有参数

# 清除历史
$ history -c
$ history -d 123  # 删除特定条目

8.7 脚本编写最佳实践

示例脚本

#!/bin/bash
# 脚本名称:backup.sh
# 功能:数据备份脚本
# 用法:./backup.sh [目标目录]

set -e  # 遇到错误立即退出
set -u  # 使用未定义变量时报错
set -o pipefail  # 管道中任一命令失败则整个管道失败

# 变量定义
SOURCE_DIR="/data"
DEST_DIR="${1:-/backup}"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/backup.log"

# 函数定义
log() {
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}

check_root() {
    if [ "$EUID" -ne 0 ]; then
        log "Error: Must run as root"
        exit 1
    fi
}

# 主逻辑
main() {
    check_root
    
    log "Starting backup..."
    log "Source: $SOURCE_DIR"
    log "Destination: $DEST_DIR"
    
    # 创建备份目录
    mkdir -p "$DEST_DIR"
    
    # 执行备份
    tar -czf "$DEST_DIR/backup_$DATE.tar.gz" \
        --exclude='*.log' \
        --exclude='tmp/' \
        "$SOURCE_DIR"
    
    # 验证备份
    if [ -f "$DEST_DIR/backup_$DATE.tar.gz" ]; then
        log "Backup completed successfully"
        log "Backup file: $DEST_DIR/backup_$DATE.tar.gz"
    else
        log "Error: Backup failed"
        exit 1
    fi
    
    # 清理 7 天前的备份
    find "$DEST_DIR" -name "backup_*.tar.gz" -mtime +7 -delete
    log "Old backups cleaned"
}

# 执行主函数
main "$@"

8.8 性能优化建议

# 使用 find 而不是 ls 处理大量文件
$ find . -name "*.txt" -delete  # 比 ls | xargs rm 快

# 使用 xargs 批量处理
$ find . -name "*.log" | xargs -n 100 rm  # 每 100 个执行一次

# 使用 -print0 和 xargs -0 处理特殊字符
$ find . -name "*.txt" -print0 | xargs -0 rm

# 并行处理
$ find . -name "*.log" | parallel rm

# 避免不必要的子 shell
$ (cat file1; cat file2) > combined  # 慢
$ cat file1 file2 > combined         # 快

8.9 安全注意事项

# ⚠️ 危险操作警告

# 永远不要:
rm -rf /
rm -rf /*
:(){ :|:& };:  # fork 炸弹

# 谨慎操作:
chmod -R 777 /      # 开放所有权限
chown -R root:root / # 改变所有文件所有者
dd if=/dev/zero of=/dev/sda  # 清空磁盘

# 安全实践:
# 1. 执行 rm -rf 前先用 ls 确认
# 2. 使用 -i 选项进行交互式删除
# 3. 重要操作前先备份
# 4. 不要随意运行不明脚本
# 5. 限制 sudo 使用
# 6. 定期更新系统
# 7. 配置防火墙
# 8. 监控日志文件

9. 附录

9.1 常用命令速查表

文件操作
命令功能常用参数
ls列出文件-l, -a, -h
cd切换目录-
cp复制-r, -p, -i
mv移动/重命名-i, -v
rm删除-r, -f, -i
mkdir创建目录-p, -v
chmod修改权限-
chown修改所有者-R
文本处理
命令功能常用参数
cat显示文件-n, -E
less分页查看-N, -R
grep搜索-i, -r, -v
sed流编辑-i, s///
awk文本分析-F
sort排序-n, -r, -u
uniq去重-c, -d
系统管理
命令功能常用参数
ps进程状态aux, -ef
top实时监控-
kill终止进程-9, -15
df磁盘空间-h, -T
du目录大小-sh, --max-depth
free内存使用-h, -m
网络
命令功能常用参数
ip网络配置addr, route
sssocket 统计-tlnp
ping测试连接-c
curl传输数据-O, -L, -X
ssh远程登录-p, -i
scp安全复制-r, -P

9.2 命令分类索引

按功能分类

文件管理:ls, cd, pwd, cp, mv, rm, mkdir, rmdir, cat, less, more, head, tail, find, locate, chmod, chown, ln

系统管理:uname, hostname, uptime, top, htop, df, du, mount, umount, free, vmstat, useradd, usermod, passwd, sudo, systemctl

进程管理:ps, pgrep, pidof, kill, killall, pkill, nice, renice, jobs, fg, bg, nohup

网络操作:ip, ifconfig, route, netstat, ss, ping, traceroute, curl, wget, ssh, scp, rsync, iptables

文本处理:cat, grep, sed, awk, sort, uniq, cut, paste, diff, cmp, wc, tr

压缩归档:tar, gzip, gunzip, bzip2, xz, zip, unzip

帮助系统:man, help, info, whatis, apropos

9.3 总结与最佳实践清单

日常使用最佳实践

文件管理

  • 使用 ls -lh 查看文件
  • 删除前先用 ls 确认
  • 重要文件定期备份
  • 使用版本控制管理配置

系统管理

  • 定期更新系统
  • 监控系统资源使用
  • 清理日志和临时文件
  • 配置自动备份

安全实践

  • 不使用 root 日常操作
  • 配置 SSH 密钥认证
  • 启用防火墙
  • 定期审查权限
  • 监控安全日志

性能优化

  • 使用合适的工具处理大数据
  • 避免在循环中调用外部命令
  • 使用管道组合简单命令
  • 定期清理无用文件

脚本编写

  • 添加 shebang 和注释
  • 使用 set -euo pipefail
  • 验证输入参数
  • 处理错误情况
  • 记录日志

文档版本:1.0.0
最后更新:2026-01
适用系统:Linux (所有发行版)
目标读者:系统管理员、开发人员

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值