📖 简介

📝 文档概述

大家好,我是程序员良辰,我花费一个多月汇总了一份 Linux 常用命令速查手册 。系统地将 100+ 个常用命令按照功能特性划分为 14 大类别 ,涵盖从基础文件操作到高级网络配置的全部核心知识点。

在这里插入图片描述

🎯 适用人群

  • Linux 初学者 - 快速掌握必备基础命令
  • 系统管理员 - 日常运维工作的得力助手
  • 后端开发者 - 服务器管理与部署必备参考
  • DevOps 工程师 - 编写脚本和自动化任务的工具书

📚 内容特色

  1. 系统化分类 - 按功能模块科学分组,便于按需查找
  2. 丰富的示例 - 每个命令都配有实际使用示例,包含输入输出
  3. 实用技巧 - 包含常用选项说明和最佳实践建议
  4. 图文并茂 - 通过代码块清晰展示命令效果
  5. 附录实用 - 包含 Bash 快捷键速查和系统路径说明

🛠️ 核心价值

这份手册不是简单的命令堆砌,而是基于实际工作经验,将每个命令的常见用法、使用场景和注意事项都做了详细说明。无论是准备面试、应对工作需求,还是日常学习参考,都是一份值得收藏的工具文档。

✨ 使用建议

建议将其作为 “案头书” 保存,在日常使用中遇到不熟悉的命令时随时查阅。随着使用次数的增加,你会逐渐熟悉各个命令,形成肌肉记忆,从而大幅提升 Linux 操作效率。

1. 基本文件操作

ls - 列出目录内容

作用:显示指定目录或当前目录下的所有文件和文件夹。

语法:

ls [选项] [目录]

常用选项:

  • -l:长格式显示详细信息
  • -a:显示所有文件(包括隐藏文件)
  • -h:人类可读的文件大小
  • -R:递归显示子目录

示例:

# 基本列出
$ ls
file1.txt  Documents  Pictures

# 长格式显示
$ ls -lh
total 128
drwxr-xr-x  2 user user  4.0K May 22 10:30 Documents
-rw-r--r--  1 user user  2.1K May 22 09:15 file1.txt

# 显示所有文件(包括隐藏)
$ ls -la
total 128
drwxr-xr-x  3 user user  4.0K May 22 10:30 .
drwx------  5 user user  4.0K May 22 08:00 ..
-rw-r--r--  1 user user  2.1K May 22 09:15 .hidden_file

cd - 切换目录

作用:改变当前工作目录。

语法:

cd [目录]

示例:

# 切换到指定目录
$ cd /home/user/Documents

# 切换到用户主目录
$ cd ~
$ cd

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

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

# 切换到上一个工作目录
$ cd -

pwd - 显示当前目录

作用:显示当前工作目录的绝对路径。

语法:

pwd [选项]

示例:

$ pwd
/home/user/Documents/project

# 显示物理路径(不包含符号链接)
$ pwd -P
/home/var/www/html

cp - 复制文件或目录

作用:复制文件或目录。

语法:

cp [选项] 源 目标

常用选项:

  • -r:递归复制目录
  • -i:交互式复制(覆盖前询问)
  • -v:显示复制过程
  • -p:保留文件属性
  • -a:归档模式(相当于 -dR --preserve=all)

示例:

# 复制单个文件
$ cp file.txt /backup/

# 复制并重命名
$ cp file.txt newfile.txt

# 递归复制目录
$ cp -r /home/user/Documents /backup/

# 复制时显示详细信息
$ cp -rv Documents /backup/
'Documents' -> '/backup/Documents'
'Documents/file.txt' -> '/backup/Documents/file.txt'

mv - 移动或重命名文件

作用:移动文件或目录,或重命名文件。

语法:

mv [选项] 源 目标

常用选项:

  • -i:交互式移动(覆盖前询问)
  • -v:显示移动过程
  • -f:强制移动(不询问)

示例:

# 移动文件到目录
$ mv file.txt /home/user/Documents/

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

# 移动并重命名
$ mv file.txt /home/user/Documents/newfile.txt

# 移动多个文件
$ mv file1.txt file2.txt /backup/

rm - 删除文件或目录

作用:删除文件或目录。

语法:

rm [选项] 文件

常用选项:

  • -r:递归删除目录
  • -f:强制删除,不提示
  • -i:交互式删除

示例:

# 删除单个文件
$ rm file.txt

# 删除目录(需要 -r)
$ rm -r /backup/old_directory

# 强制删除(不询问)
$ rm -rf /tmp/test

# 交互式删除
$ rm -i *.txt
rm: remove regular file 'file1.txt'? y
rm: remove regular file 'file2.txt'? n

mkdir - 创建目录

作用:创建新目录。

语法:

mkdir [选项] 目录名

常用选项:

  • -p:递归创建目录
  • -m:设置目录权限

示例:

# 创建单个目录
$ mkdir new_directory

# 递归创建多级目录
$ mkdir -p /home/user/Documents/projects/myproject/src

# 创建目录并设置权限
$ mkdir -m 755 secured_directory

rmdir - 删除空目录

作用:删除空目录。

语法:

rmdir [选项] 目录名

示例:

# 删除空目录
$ rmdir empty_directory

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

# 递归删除空目录
$ rmdir -p parent/child/grandchild

touch - 创建空文件或更新文件时间

作用:创建新的空文件,或更新已有文件的时间戳。

语法:

touch [选项] 文件

示例:

# 创建空文件
$ touch newfile.txt

# 创建多个文件
$ touch file1.txt file2.txt file3.txt

# 更新文件访问和修改时间
$ touch existing_file.txt

# 创建带时间戳的文件
$ touch -t 202405221200 filename.txt

cat - 连接并显示文件内容

作用:显示文件内容,或连接多个文件。

语法:

cat [选项] 文件

常用选项:

  • -n:显示行号
  • -b:非空行显示行号
  • -s:连续多个空行合并为一个

示例:

# 显示文件内容
$ 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 > combined.txt

# 创建文件(使用重定向)
$ cat > newfile.txt
Hello World
<Ctrl+D>

less - 分页显示文件内容

作用:分页查看文件内容,支持前后翻页。

语法:

less [选项] 文件

常用操作:

  • ↑/↓:上下滚动
  • Space/b:下一页/上一页
  • q:退出
  • /pattern:搜索模式
  • n:下一个匹配
  • N:上一个匹配

示例:

# 分页查看大文件
$ less /var/log/syslog

# 从第100行开始显示
$ less +100 largefile.txt

# 显示时包含行号
$ less -N file.txt

# 搜索并高亮显示
$ less -p error /var/log/syslog

more - 分页显示文件内容

作用:分页显示文件内容(只能向前翻页)。

语法:

more [选项] 文件

常用操作:

  • Space:下一页
  • Enter:下一行
  • q:退出

示例:

# 分页查看文件
$ more /etc/passwd

# 从第10行开始显示
$ more +10 file.txt

# 每次显示20行
$ more -20 file.txt

head - 显示文件开头部分

作用:显示文件的开头部分(默认10行)。

语法:

head [选项] 文件

常用选项:

  • -n:指定显示行数
  • -c:指定显示字节数

示例:

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

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

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

# 显示多个文件的前5行
$ head -n 5 file1.txt file2.txt

tail - 显示文件结尾部分

作用:显示文件的结尾部分(默认10行)。

语法:

tail [选项] 文件

常用选项:

  • -n:指定显示行数
  • -f:实时追踪文件更新
  • -F:实时追踪(包括重新创建的文件)
  • --pid=PID:指定进程ID,进程结束时退出

示例:

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

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

# 实时查看日志
$ tail -f /var/log/syslog

# 查看最后100行并实时追踪
$ tail -100f /var/log/nginx/access.log

# 显示文件的第20行到结尾
$ tail -n +20 file.txt

ln - 创建链接

作用:创建文件的链接(硬链接或符号链接)。

语法:

ln [选项] 源 链接名

常用选项:

  • -s:创建符号链接(软链接)
  • -f:强制创建(覆盖已有链接)
  • -i:交互式确认

示例:

# 创建硬链接
$ ln original.txt hardlink.txt

# 创建符号链接
$ ln -s /path/to/file symlink

# 创建指向目录的符号链接
$ ln -s /home/user/Documents mydocs

# 强制创建符号链接(覆盖)
$ ln -sf /new/path/file symlink

stat - 显示文件或文件系统状态

作用:显示文件的详细信息,包括访问权限、时间戳等。

语法:

stat [选项] 文件

示例:

$ stat file.txt
  File: file.txt
  Size: 1024       Blocks: 8          IO Block: 4096   regular file
Device: 801h/2049d Inode: 1310845     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/    user)   Gid: ( 1000/    user)
Access: 2024-05-22 10:30:00.000000000 +0800
Modify: 2024-05-22 09:15:00.000000000 +0800
Change: 2024-05-22 09:15:00.000000000 +0800
 Birth: -

# 显示文件系统状态
$ stat -f /
  File: "/"
    ID: 0        Namelen: 255     Type: ext2/ext3
Blocks: Total: 12345678   Free: 8765432    Available: 8234567
Inodes: Total: 1000000    Free: 998765

dd - 转换和复制文件

作用:按照指定大小和块复制转换文件,常用于磁盘备份。

语法:

dd if=源 of=目标 [选项]

常用选项:

  • if:输入文件
  • of:输出文件
  • bs:块大小
  • count:复制块数
  • conv:转换选项

示例:

# 创建空文件(1MB)
$ dd if=/dev/zero of=testfile bs=1M count=1

# 备份磁盘
$ dd if=/dev/sda of=/backup/disk.img bs=4M

# 制作ISO镜像
$ dd if=/dev/cdrom of=cdrom.iso bs=4M

# 备份MBR
$ dd if=/dev/sda of=mbr.backup bs=512 count=1

# 进度显示
$ dd if=/dev/zero of=/dev/null bs=1M count=1000 status=progress

file - 确定文件类型

作用:检测并显示文件的类型。

语法:

file [选项] 文件

示例:

$ file image.png
image.png: PNG image data, 1920 x 1080, 8-bit/color RGB, non-interlaced

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

$ file /dev/sda1
/dev/sda1: block special (8/1)

$ file -z compressed.txt
compressed.txt: gzip compressed data, was "data.txt", from Unix, last modified: ...

which - 查找命令位置

作用:查找并显示可执行命令的完整路径。

语法:

which [选项] 命令

示例:

$ which ls
/bin/ls

$ which python
/usr/bin/python

# 查找所有匹配项
$ which -a python
/usr/bin/python
/bin/python

# 查找多个命令
$ which ls grep cat
/bin/ls
/bin/grep
/bin/cat

whereis - 查找命令的二进制、源码和手册页

作用:查找命令的二进制文件、源代码和手册页位置。

语法:

whereis [选项] 命令

示例:

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

$ whereis python
python: /usr/bin/python3.8 /usr/bin/python3 /usr/bin/python3.8-config

# 只查找二进制
$ whereis -b ls

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

2. 查看进程、端口等

ps - 报告进程状态

作用:显示当前系统的进程状态。

语法:

ps [选项]

常用选项:

  • aux:显示所有进程(BSD风格)
  • -ef:显示所有进程(System V风格)
  • -eLf:显示线程信息

示例:

# 显示当前终端的进程
$ ps
  PID TTY          TIME CMD
 1234 pts/0    00:00:00 bash
 5678 pts/0    00:00:00 ps

# 显示所有进程
$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1  1234  5678 ?        Ss   May20   0:05 /sbin/init
user      1234  2.5  1.0  5678  8765 pts/0    Ss   10:30   0:01 bash

# 显示进程树
$ ps -ef --forest

# 查找特定进程
$ ps aux | grep nginx

# 显示线程
$ ps -eLf | grep python

top - 动态显示进程状态

作用:实时显示系统的进程和资源使用情况。

语法:

top [选项]

常用选项:

  • -d:指定更新间隔(秒)
  • -p:监控指定PID
  • -u:显示指定用户的进程
  • -n:指定更新次数后退出

示例:

# 启动top
$ top

# 每5秒更新一次
$ top -d 5

# 显示指定用户的进程
$ top -u username

# 监控特定进程
$ top -p 1234

# 高CPU使用率排序
# 在top界面按 P

# 高内存使用率排序
# 在top界面按 M

top 交互命令:

  • q:退出
  • P:按CPU排序
  • M:按内存排序
  • k:终止进程
  • r:重新设置优先级
  • 1:显示所有CPU核心
  • h:显示帮助

htop - 交互式进程查看器

作用:比 top 更友好的进程查看工具,支持颜色和交互操作。

语法:

htop [选项]

常用选项:

  • -d:设置更新间隔
  • -u:显示指定用户进程
  • -p:监控指定PID

示例:

# 启动htop
$ htop

# 每10秒更新
$ htop -d 10

# 显示特定用户
$ htop -u username

# 垂直/水平排序
# 使用功能键 F6/F5

kill - 终止进程

作用:向进程发送信号,通常用于终止进程。

语法:

kill [选项] PID

常用信号:

  • 1:SIGHUP - 重新加载配置
  • 9:SIGKILL - 强制终止
  • 15:SIGTERM - 正常终止(默认)

示例:

# 正常终止进程
$ kill 1234

# 强制终止进程
$ kill -9 1234

# 重启进程(发送HUP信号)
$ kill -1 1234

# 终止多个进程
$ kill 1234 5678 9012

# 列出所有信号
$ kill -l

killall - 按名称终止进程

作用:按进程名称终止所有匹配的进程。

语法:

killall [选项] 进程名

示例:

# 终止所有nginx进程
$ killall nginx

# 强制终止
$ killall -9 firefox

# 交互式终止
$ killall -i nginx

# 按正则表达式终止
$ killall -r 'python.*'

pkill - 按名称或属性终止进程

作用:使用模式匹配来终止进程。

语法:

pkill [选项] 模式

示例:

# 终止所有firefox进程
$ pkill firefox

# 强制终止
$ pkill -9 firefox

# 终止指定用户的进程
$ pkill -u username firefox

# 终止终端进程
$ pkill -t pts/0

pgrep - 查找进程ID

作用:根据名称查找进程的PID。

语法:

pgrep [选项] 模式

示例:

# 查找nginx进程
$ pgrep nginx
1234
5678

# 完整匹配
$ pgrep -x nginx

# 显示进程名称
$ pgrep -l nginx
1234 nginx: worker
5678 nginx: master

# 显示完整命令行
$ pgrep -a nginx

# 查找指定用户的进程
$ pgrep -u username nginx

netstat - 显示网络状态

作用:显示网络连接、路由表、接口统计等信息。

语法:

netstat [选项]

常用选项:

  • -a:显示所有连接
  • -t:显示TCP连接
  • -u:显示UDP连接
  • -l:显示监听中的套接字
  • -n:显示数字地址
  • -p:显示进程PID/名称
  • -r:显示路由表

示例:

# 显示所有连接
$ netstat -a

# 显示TCP连接
$ netstat -at

# 显示监听端口
$ netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN

# 显示所有监听和未监听
$ netstat -tuln | grep LISTEN

# 显示进程ID
$ netstat -tulnp

# 显示路由表
$ netstat -r

ss - Socket统计信息

作用:比 netstat 更快速、更详细的 Socket 统计工具。

语法:

ss [选项]

常用选项:

  • -a:显示所有
  • -t:显示TCP
  • -u:显示UDP
  • -l:显示监听套接字
  • -n:数字显示
  • -p:显示进程
  • -o:显示定时器信息

示例:

# 显示所有连接
$ ss -a

# 显示TCP连接
$ ss -t

# 显示监听端口
$ ss -tuln
Netid  State   Recv-Q  Send-Q   Local Address:Port    Peer Address:Port
tcp    LISTEN  0       128      0.0.0.0:22            0.0.0.0:*
tcp    LISTEN  0       128      127.0.0.1:631         0.0.0.0:*

# 显示进程信息
$ ss -tulnp

# 显示特定端口
$ ss -tuln 'sport = :80'

# 显示established连接
$ ss -tp state established

# 显示连接状态统计
$ ss -s
Total: 186 (kernel 189)
TCP:   4 (estab 1, closed 0, orphaned 0, synrecv 0, timewait 0/0)

# 显示定时器信息
$ ss -to

lsof - 显示打开的文件

作用:显示打开文件的所有进程。

语法:

lsof [选项]

常用选项:

  • -i:显示网络文件
  • -p:显示指定进程
  • -u:显示指定用户
  • +D:递归显示目录

示例:

# 显示所有打开的网络连接
$ lsof -i
COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
ssh       1234  user    3u  IPv4  12345      0t0  TCP *:22 (LISTEN)
nginx     5678  root    6u  IPv4  12346      0t0  TCP *:80 (LISTEN)

# 显示端口占用
$ lsof -i:80
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   5678   root    6u  IPv4  12346      0t0  TCP *:80 (LISTEN)

# 显示指定进程打开的文件
$ lsof -p 1234

# 显示指定用户打开的文件
$ lsof -u username

# 递归显示目录
$ lsof +D /home/user

# 组合使用
$ lsof -i -u username -p 1234

fuser - 识别进程使用文件或端口

作用:识别正在使用指定文件或端口的进程。

语法:

fuser [选项] 文件/端口

常用选项:

  • -v:详细输出
  • -k:终止进程
  • -i:交互式终止

示例:

# 显示使用文件的进程
$ fuser -v /var/log/syslog
                     USER        PID ACCESS COMMAND
/var/log/syslog:    root       1234 F.... rsyslogd

# 显示使用端口的进程
$ fuser -v 80/tcp
                     USER        PID ACCESS COMMAND
80/tcp:              root       5678 F.... nginx

# 终止使用文件的进程
$ fuser -k /var/log/syslog

# 交互式终止
$ fuser -ki /mnt/usb

# 显示进程详细信息
$ fuser -v /home
                     USER        PID ACCESS COMMAND
/home:              user       1234 rcm.. bash
                   user       5678 F.... firefox

3. 防火墙

iptables - IPv4 包过滤和NAT

作用:Linux 内核防火墙的规则管理工具。

语法:

iptables [选项] [链] [规则]

常用选项:

  • -A:追加规则
  • -D:删除规则
  • -L:列出规则
  • -F:清空规则
  • -I:插入规则
  • -P:设置默认策略

示例:

# 查看当前规则
$ iptables -L
$ iptables -L -n -v

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

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

# 拒绝特定IP访问
$ iptables -A INPUT -s 192.168.1.100 -j DROP

# 允许特定端口范围
$ iptables -A INPUT -p tcp --dport 8000:9000 -j ACCEPT

# 删除规则
$ iptables -D INPUT 3

# 清空所有规则
$ iptables -F

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

# 保存规则
$ iptables-save > /etc/iptables/rules.v4

# 端口转发
$ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

firewall-cmd - firewalld 命令行工具

作用:CentOS/RHEL 7+ 默认防火墙管理工具。

语法:

firewall-cmd [选项]

常用选项:

  • --list-all:列出所有规则
  • --add-port:添加端口
  • --remove-port:移除端口
  • --add-service:添加服务
  • --permanent:永久生效

示例:

# 查看当前区域信息
$ firewall-cmd --list-all
public (active)
  services: dhcpv6-client ssh
  ports: 80/tcp 443/tcp
  masquerade: no

# 临时允许端口
$ firewall-cmd --add-port=80/tcp

# 永久允许端口
$ firewall-cmd --permanent --add-port=80/tcp

# 重新加载配置
$ firewall-cmd --reload

# 临时允许服务
$ firewall-cmd --add-service=http

# 永久允许服务
$ firewall-cmd --permanent --add-service=https

# 查看已开放端口
$ firewall-cmd --list-ports

# 查看已开放服务
$ firewall-cmd --list-services

# 移除端口
$ firewall-cmd --permanent --remove-port=80/tcp

# 启用端口转发
$ firewall-cmd --permanent --add-masquerade
$ firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080

# 查看所有区域
$ firewall-cmd --get-zones

# 设置默认区域
$ firewall-cmd --set-default-zone=public

ufw - Uncomplicated Firewall

作用:Ubuntu 默认防火墙管理工具,提供简单的命令行界面。

语法:

ufw [命令]

示例:

# 查看状态
$ ufw status
Status: inactive

# 启用防火墙
$ ufw enable

# 禁用防火墙
$ ufw disable

# 允许SSH
$ ufw allow ssh

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

# 允许端口范围
$ ufw allow 8000:9000/tcp

# 拒绝端口
$ ufw deny 23/tcp

# 删除规则
$ ufw delete allow 80/tcp

# 允许特定IP
$ ufw allow from 192.168.1.100

# 允许特定IP到特定端口
$ ufw allow from 192.168.1.100 to any port 22

# 查看详细状态
$ ufw status verbose

# 重置防火墙
$ ufw reset

# 启用日志
$ ufw logging on

nft - nftables 命令行工具

作用:新一代 Linux 防火墙工具,是 iptables 的继任者。

语法:

nft [选项] [命令]

示例:

# 查看规则集
$ nft list ruleset

# 创建表
$ nft add table ip filter

# 创建链
$ nft add chain ip filter input { type filter hook input priority 0 \; }

# 添加规则
$ nft add rule ip filter input tcp dport 22 accept

# 列出规则
$ nft list ruleset

# 删除规则
$ nft delete rule ip filter input handle 3

# 清空规则
$ nft flush ruleset

# 组合命令示例
$ nft -f /etc/nftables.conf

4. Vim/Vi 操作

基本模式

  • 普通模式:启动后的默认模式,用于导航和操作
  • 插入模式:输入文本
  • 命令模式:执行命令

插入模式命令

命令作用示例
i在光标前插入i → insert text
a在光标后插入a → after cursor
o在当前行下方新建行o → new line below
O在当前行上方新建行O → new line above
I在行首插入I → beginning of line
A在行尾插入A → end of line
Esc退出插入模式返回普通模式

示例:

# 假设光标在 "Hello" 的 H 位置
Hello World
^i → H[插入]ello World
^a → Hello[插入] World

普通模式命令

命令作用示例
dd删除当前行dd → 删除光标所在行
3dd删除3行删除光标及下面2行
yy复制当前行yy → 复制行
3yy复制3行复制3行
p粘贴到光标后p → 粘贴
P粘贴到光标前P → 粘贴到前面
u撤销u → undo
Ctrl+r重做Ctrl+r → redo
x删除字符x → 删除光标处字符
r替换字符rx → 替换为x
R替换模式进入连续替换
gg跳到首行文件开头
G跳到尾行文件末尾
3G跳到第3行跳到指定行
0跳到行首数字0
$跳到行尾行尾
w下一个单词词首
e单词末尾词尾
{}段落跳转上/下段落
Ctrl+b上翻页Page Up
Ctrl+f下翻页Page Down

示例:

# 复制粘贴
yy    # 复制当前行
p     # 粘贴到下一行

# 删除
dd    # 删除当前行
3dd   # 删除3行
dw    # 删除一个单词

# 撤销重做
u           # 撤销
Ctrl+r      # 重做

搜索命令

命令作用示例
/pattern向下搜索/hello → 搜索hello
?pattern向上搜索?world → 反向搜索
n下一个匹配跳到下一个
N上一个匹配跳到上一个
:set nu显示行号行号开启
:set nonu隐藏行号行号关闭
:noh取消高亮清除搜索高亮

示例:

/hello      # 向下搜索 hello
n           # 跳到下一个 hello
N           # 跳到上一个 hello
?goodbye    # 向上搜索 goodbye
:set nu     # 显示行号
:15         # 跳到第15行

命令模式命令

命令作用示例
:w保存:w → 保存文件
:q退出:q → 退出
:wq保存并退出:wq 或 ZZ
:q!强制退出(不保存):q!
:x保存并退出:x
:w filename另存为:w new.txt
:e filename打开文件:e file.txt
:r filename插入文件:r data.txt
:s/old/new替换第一个:s/foo/bar/
:s/old/new/g替换所有:s/foo/bar/g
:%s/old/new/g全文替换所有匹配
:set all显示所有设置配置查看
:! command执行shell命令:!ls

示例:

:w                    # 保存
:wq                   # 保存退出
:x                    # 保存退出
:q!                   # 强制退出
:e file.txt           # 打开文件
:r data.txt           # 插入文件内容
:1,10s/old/new/g      # 替换1-10行
:%s/error/correct/g   # 全文替换
:!ls -la              # 执行shell命令

可视模式命令

命令作用
v进入字符可视模式
V进入行可视模式
Ctrl+v进入块可视模式
d删除选中
y复制选中
p粘贴
u转小写
U转大写
>右缩进
<左缩进

示例:

Vjj   # 可视选中3行
y     # 复制
p     # 粘贴

Ctrl+v  # 块选择
jjx    # 删除选中的块

5. Find 命令

作用:在目录树中搜索文件。

语法:

find [路径] [选项] [表达式]

常用选项:

  • -name:按文件名搜索
  • -type:按类型搜索(f/d/b/c/l)
  • -size:按大小搜索
  • -mtime:按修改时间搜索
  • -user:按所有者搜索
  • -perm:按权限搜索
  • -exec:对每个匹配执行命令
  • -delete:删除匹配文件

示例:

# 按文件名查找
$ find /home -name "*.txt"
$ find . -name "file.txt"
$ find . -name "*.log" -mtime -7        # 7天内修改的文件

# 按类型查找
$ find . -type f          # 普通文件
$ find . -type d          # 目录
$ find . -type l          # 符号链接
$ find /dev -type b       # 块设备

# 按大小查找
$ find . -size +100M      # 大于100MB
$ find . -size -1k        # 小于1KB
$ find / -size +1G        # 大于1GB

# 按时间查找
$ find . -mtime -1        # 1天内修改
$ find . -mtime +7        # 7天前修改
$ find . -atime -1        # 1天内访问
$ find . -ctime -1        # 1天内状态改变

# 按权限查找
$ find . -perm 644        # 精确权限
$ find . -perm -111       # 至少执行权限

# 按所有者查找
$ find . -user username
$ find . -group groupname
$ find . -uid 1000
$ find . -nouser          # 无效所有者

# 组合条件
$ find . -name "*.txt" -o -name "*.log"
$ find . -name "*.txt" -a -size +1k
$ find . -not -name "*.tmp"

# 执行命令
$ find . -name "*.bak" -exec rm {} \;
$ find . -name "*.txt" -exec cat {} \;
$ find . -name "*.log" -mtime +7 -exec gzip {} \;

# 查找并删除
$ find . -name "*.tmp" -delete

# 限制搜索深度
$ find . -maxdepth 2 -name "*.txt"
$ find . -mindepth 2 -name "*.txt"

# 查找空文件/目录
$ find . -empty
$ find . -type d -empty

# 显示查找结果
$ find . -name "*.txt" -print
$ find . -name "*.txt" -print0 | xargs -0 cat

# 高级示例
$ find /var/log -name "*.log" -mtime +30 -exec gzip {} \;
$ find /home -type f -perm 777 -exec chmod 755 {} \;
$ find . -type f -size +100M -exec ls -lh {} \;

6. Grep 命令

作用:在文件中搜索匹配模式的行。

语法:

grep [选项] 模式 [文件]

常用选项:

  • -i:忽略大小写
  • -v:反转匹配
  • -n:显示行号
  • -c:计数
  • -l:只显示文件名
  • -r:递归搜索
  • -E:扩展正则表达式
  • -F:固定字符串
  • -w:完整单词匹配
  • -A:显示匹配后N行
  • -B:显示匹配前N行

示例:

# 基本搜索
$ grep "error" logfile.txt
$ grep -i "error" logfile.txt      # 忽略大小写

# 显示行号
$ grep -n "error" logfile.txt
123:error: something went wrong

# 反转匹配
$ grep -v "exclude" file.txt

# 计数
$ grep -c "pattern" file.txt

# 只显示文件名
$ grep -l "pattern" *.txt

# 递归搜索
$ grep -r "error" /var/log/
$ grep -r "TODO" . --include="*.py"

# 正则表达式
$ grep -E "error|warning" logfile.txt
$ grep -E "[0-9]{3}-[0-9]{4}" file.txt

# 显示上下文
$ grep -A 5 "error" file.txt       # 显示匹配后5行
$ grep -B 2 "error" file.txt       # 显示匹配前2行
$ grep -C 3 "error" file.txt       # 显示前后3行

# 完整单词
$ grep -w "the" file.txt

# 固定字符串(比正则快)
$ grep -F "error.code" file.txt

# 安静模式(只返回退出状态)
$ grep -q "pattern" file.txt && echo "Found"

# 颜色高亮
$ grep --color=auto "pattern" file.txt

# 组合示例
$ grep -rn --include="*.js" "TODO" /home/user/project
$ grep -l "error" /var/log/*.log | xargs grep -l "failed"
$ ps aux | grep nginx | grep -v grep

egrep - 扩展正则表达式 grep

作用:等同于 grep -E。

示例:

$ egrep "(error|warning)" logfile.txt
$ egrep "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log
$ egrep "^[0-9]{3}-[0-9]{4}$" file.txt

fgrep - 快速固定字符串 grep

作用:等同于 grep -F,搜索速度更快。

示例:

$ fgrep "error.code.123" file.txt
$ fgrep "192.168.1.1" /etc/hosts

zgrep - 压缩文件 grep

作用:在压缩文件中搜索。

示例:

$ zgrep "error" logfile.gz
$ zgrep -a "pattern" backup.tar.gz

7. 磁盘与文件系统

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

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

语法:

df [选项] [文件]

常用选项:

  • -h:人类可读格式
  • -T:显示文件系统类型
  • -i:显示inode使用情况
  • -a:显示所有文件系统

示例:

# 基本用法
$ df
Filesystem      1K-blocks      Used Available Use% Mounted on
/dev/sda1       52403200   12345678   40057522  24% /
tmpfs             2048000      12345    2035655   1% /dev/shm

# 人类可读格式
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        50G   12G   38G  24% /

# 显示类型
$ df -Th
Filesystem     Type    Size  Used Avail Use% Mounted on
/dev/sda1       ext4     50G   12G   38G  24% /
tmpfs          tmpfs   2.0G   12M  2.0G   1% /dev/shm

# 显示特定文件系统
$ df -h /home

# 显示inode
$ df -i

du - 估算文件空间使用

作用:估算文件和目录的磁盘使用空间。

语法:

du [选项] [文件/目录]

常用选项:

  • -h:人类可读格式
  • -s:只显示总计
  • -a:显示所有文件
  • -d N:限制递归深度
  • --max-depth=N:最大深度

示例:

# 当前目录大小
$ du -sh
2.5G    .

# 目录树大小
$ du -h /home/user
$ du -sh /home/user/*

# 只显示总大小
$ du -sh /var/log

# 显示文件大小
$ du -ah /home/user

# 限制深度
$ du -h --max-depth=1 /home

# 排序显示
$ du -sh /home/* | sort -h

# 排除目录
$ du -sh --exclude='*.log' /var

# 磁盘使用前10的目录
$ du -ah /home | sort -rh | head -10

mount - 挂载文件系统

作用:将文件系统附加到指定目录。

语法:

mount [-t 文件系统类型] [-o 选项] 设备 目录

示例:

# 查看已挂载
$ mount

# 挂载CD/DVD
$ mount /dev/cdrom /mnt/cdrom

# 挂载U盘
$ mount /dev/sdb1 /mnt/usb

# 挂载NFS
$ mount -t nfs 192.168.1.100:/share /mnt/nfs

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

# 重新挂载(常用)
$ mount -o remount,rw /

# 挂载tmpfs
$ mount -t tmpfs -o size=2G tmpfs /mnt/tmp

# 常用挂载选项
$ mount -o noexec,nosuid,nodev /dev/sdb1 /mnt/usb

umount - 卸载文件系统

作用:卸载已挂载的文件系统。

语法:

umount [选项] 目录/设备

示例:

# 卸载
$ umount /mnt/cdrom

# 卸载设备
$ umount /dev/sdb1

# 强制卸载
$ umount -f /mnt/nfs

# 懒卸载(对NFS有用)
$ umount -l /mnt/nfs

# 查看谁在使用
$ lsof +D /mnt/cdrom
$ fuser -v /mnt/cdrom

fdisk - 磁盘分区工具

作用:创建和修改磁盘分区表。

语法:

fdisk [选项] 设备

示例:

# 查看分区
$ fdisk -l
$ fdisk -l /dev/sda

# 进入交互模式
$ fdisk /dev/sdb

# 常用交互命令
# m - 显示帮助
# p - 显示分区表
# n - 新建分区
# d - 删除分区
# t - 改变分区类型
# w - 保存退出
# q - 不保存退出

lsblk - 列出块设备

作用:列出所有可用块设备的信息。

语法:

lsblk [选项]

示例:

$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  100G  0 disk
├─sda1   8:1    0    1G  0 part /boot
└─sda2   8:2    0   99G  0 part
  ├─centos-root 253:0    0   50G  0 lvm  /
  └─centos-swap 253:1    0    8G  0 lvm  [SWAP]

# 显示所有设备
$ lsblk -a

# 显示设备信息
$ lsblk -f

# 输出格式
$ lsblk -p

blkid - 块设备属性

作用:显示块设备的UUID和文件系统类型。

语法:

blkid [选项] [设备]

示例:

# 查看所有设备
$ blkid

# 查看特定设备
$ blkid /dev/sda1
/dev/sda1: UUID="1234-5678" TYPE="vfat"

# 只显示类型
$ blkid -s TYPE -o value /dev/sda1

# 只显示UUID
$ blkid -s UUID -o value /dev/sda1

# 输出脚本格式
$ blkid -p /dev/sda1

parted - 磁盘分区工具

作用:比 fdisk 更强大的分区工具,支持GPT。

语法:

parted [选项] [设备]

示例:

# 交互模式
$ parted /dev/sdb

# 命令行模式
$ parted /dev/sdb mklabel gpt
$ parted /dev/sdb mkpart primary ext4 0% 100%
$ parted /dev/sdb print
$ parted /dev/sdb rm 1

mkfs - 创建文件系统

作用:在分区上创建文件系统。

语法:

mkfs [选项] 设备

示例:

# 创建ext4文件系统
$ mkfs.ext4 /dev/sdb1
$ mkfs -t ext4 /dev/sdb1

# 创建XFS文件系统
$ mkfs.xfs /dev/sdb1

# 创建VFAT文件系统
$ mkfs.vfat /dev/sdb1

# 创建时指定参数
$ mkfs.ext4 -L "MyData" -b 4096 /dev/sdb1

# 查看可用类型
$ mkfs -t help

8. 压缩与打包

tar - 打包工具

作用:创建和解压归档文件。

语法:

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

常用选项:

  • -c:创建归档
  • -x:解压归档
  • -t:列出内容
  • -f:指定归档文件
  • -v:显示详情
  • -z:使用 gzip
  • -j:使用 bzip2
  • -J:使用 xz
  • -C:切换目录

示例:

# 创建归档(.tar)
$ tar -cvf archive.tar /home/user

# 创建gzip压缩包(.tar.gz)
$ tar -czvf archive.tar.gz /home/user

# 创建bzip2压缩包(.tar.bz2)
$ tar -cjvf archive.tar.bz2 /home/user

# 创建xz压缩包(.tar.xz)
$ tar -cJvf archive.tar.xz /home/user

# 解压归档
$ tar -xvf archive.tar
$ tar -xzvf archive.tar.gz
$ tar -xjvf archive.tar.bz2
$ tar -xJvf archive.tar.xz

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

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

# 追加文件到归档
$ tar -rvf archive.tar newfile.txt

# 从归档中提取单个文件
$ tar -xzvf archive.tar.gz path/to/file

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

# 使用tarfile
$ tar -cf archive.tar --files-from=filelist.txt

gzip - gzip压缩工具

作用:压缩和解压文件(.gz格式)。

语法:

gzip [选项] [文件]

示例:

# 压缩文件
$ gzip file.txt
$ ls -l file.txt.gz

# 保持原文件
$ gzip -c file.txt > file.txt.gz

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

# 解压到标准输出
$ gzip -dc file.txt.gz

# 压缩级别(1-9)
$ gzip -9 file.txt
$ gzip -1 file.txt

# 测试压缩完整性
$ gzip -t file.gz

# 显示压缩比
$ gzip -l file.gz

gunzip - gzip解压工具

作用:解压 .gz 文件。

语法:

gunzip [选项] [文件]

示例:

$ gunzip file.gz
$ gunzip -v file.gz
file.gz: 50.0% -- replaced with file

zip - zip压缩工具

作用:创建 zip 压缩包。

语法:

zip [选项] 归档文件 源文件

示例:

# 压缩文件
$ zip archive.zip file.txt

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

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

# 压缩并显示详情
$ zip -rv archive.zip /home/user

# 设置压缩级别
$ zip -9 archive.zip file.txt

# 更新文件
$ zip -u archive.zip newfile.txt

# 加密
$ zip -e archive.zip file.txt

# 分割压缩包
$ zip -s 10m archive.zip -r /home/user

unzip - zip解压工具

作用:解压 zip 文件。

语法:

unzip [选项] 归档文件

示例:

# 解压到当前目录
$ unzip archive.zip

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

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

# 测试压缩包
$ unzip -t archive.zip

# 覆盖已存在文件
$ unzip -o archive.zip

# 解压单个文件
$ unzip archive.zip filename

# 解压时显示详情
$ unzip -v archive.zip

# 列出所有文件
$ unzip -l archive.zip

bzip2 - bzip2压缩工具

作用:压缩和解压文件(.bz2格式)。

语法:

bzip2 [选项] [文件]

示例:

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

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

xz - xz压缩工具

作用:高压缩率的压缩工具(.xz格式)。

语法:

xz [选项] [文件]

示例:

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

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

# 压缩级别
$ xz -9 file.txt
$ xz -0 file.txt

# 测试
$ xz -t file.txt.xz

9. 系统信息与管理

uname - 显示系统信息

作用:显示系统信息。

语法:

uname [选项]

示例:

# 基本信息
$ uname
Linux

# 所有信息
$ uname -a
Linux hostname 5.4.0-74-generic #83-Ubuntu SMP x86_64 GNU/Linux

# 内核版本
$ uname -r
5.4.0-74-generic

# 内核名称
$ uname -s
Linux

# 机器架构
$ uname -m
x86_64

# 处理器类型
$ uname -p
x86_64

# 操作系统
$ uname -o
GNU/Linux

hostname - 显示/设置主机名

作用:显示或设置系统主机名。

语法:

hostname [新主机名]

示例:

# 显示主机名
$ hostname
myserver

# 临时设置(重启失效)
$ hostname newserver

# 显示IP
$ hostname -I

# 显示域名
$ hostname -d

# 永久设置
$ hostnamectl set-hostname newserver

who - 显示登录用户

作用:显示当前登录的用户。

语法:

who [选项]

示例:

# 显示所有登录用户
$ who
user     pts/0        2024-05-22 10:30 (192.168.1.100)
root     pts/1        2024-05-22 09:00 (:0)

# 显示当前用户
$ whoami
user

# 显示详细信息
$ who -a
$ who -H                    # 带标题

# 显示用户数
$ who -q

# 显示上次启动时间
$ who -b
system boot  2024-05-20 08:00

whoami - 显示当前用户名

作用:显示当前有效用户名。

语法:

whoami

示例:

$ whoami
user

id - 显示用户和组信息

作用:显示用户ID和组ID。

语法:

id [选项] [用户名]

示例:

# 当前用户信息
$ id
uid=1000(user) gid=1000(user) groups=1000(user),4(adm),27(sudo)

# 指定用户信息
$ id root
uid=0(root) gid=0(root) groups=0(root)

# 只显示用户ID
$ id -u
1000

# 只显示组ID
$ id -g
1000

# 显示所有组ID
$ id -G
1000 4 27 46 124 127

# 显示用户名
$ id -un
user

uptime - 显示系统运行时间

作用:显示系统运行时间和负载。

语法:

uptime [选项]

示例:

$ uptime
 10:30:00 up 2 days,  2:00,  2 users,  load average: 0.52, 0.58, 0.59

$ uptime -p
up 2 days, 2 hours, 30 minutes

$ uptime -s
2024-05-20 08:30:00

dmesg - 显示内核消息

作用:显示或控制内核环形缓冲区消息。

语法:

dmesg [选项]

常用选项:

  • -T:人类可读时间
  • -w:实时监控
  • -l:过滤级别

示例:

# 查看所有消息
$ dmesg

# 人类可读时间
$ dmesg -T

# 实时监控
$ dmesg -w

# 只显示错误
$ dmesg -T | grep -i error

# 清理缓冲区
$ dmesg -c

# 显示特定级别
$ dmesg -l err
$ dmesg -l warn

free - 显示内存使用情况

作用:显示系统内存使用情况。

语法:

free [选项]

常用选项:

  • -h:人类可读
  • -m:以MB显示
  • -g:以GB显示
  • -s N:每秒刷新
  • -c N:显示次数

示例:

$ free
              total        used        free      shared  buff/cache   available
Mem:        16384000     8000000     4000000      500000     4384000     7384000
Swap:        2048000           0     2048000

$ free -h
              total        used        free      shared  buff/cache   available
Mem:           15Gi       7.6Gi       3.8Gi       487Mi       4.2Gi       7.0Gi
Swap:         2.0Gi          0B       2.0Gi

# 实时监控
$ free -s 1 -c 10

vmstat - 虚拟内存统计

作用:显示虚拟内存统计信息。

语法:

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

示例:

$ 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 4000000 12345 67890    0    0     10    20  100  200  5  2 93  0  0

# 每秒刷新
$ vmstat 1

# 每秒刷新10次
$ vmstat 1 10

# 显示详细统计
$ vmstat -d
$ vmstat -a

iostat - CPU和I/O统计

作用:显示CPU和磁盘I/O统计。

语法:

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

示例:

# 基本统计
$ iostat
Linux 5.4.0-74-generic (hostname)   05/22/2024  _x86_64_

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          5.23    0.00    2.45    1.23    0.00   91.09

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda              10.50       200.50       100.25     500000     250000

# 每秒刷新
$ iostat 1

# 显示详细设备统计
$ iostat -x
$ iostat -p sda

systemctl - 系统服务管理

作用:控制系统和服务管理器。

语法:

systemctl [命令] [服务名]

常用命令:

  • start:启动服务
  • stop:停止服务
  • restart:重启服务
  • reload:重新加载配置
  • status:查看状态
  • enable:开机启动
  • disable:取消开机启动
  • is-active:检查是否运行
  • is-enabled:检查是否启用

示例:

# 查看服务状态
$ systemctl status nginx
$ systemctl status sshd

# 启动/停止服务
$ sudo systemctl start nginx
$ sudo systemctl stop nginx

# 重启服务
$ sudo systemctl restart nginx

# 重新加载配置
$ sudo systemctl reload nginx

# 开机启动
$ sudo systemctl enable nginx
$ sudo systemctl disable nginx

# 查看运行状态
$ systemctl is-active nginx
active

# 查看启动状态
$ systemctl is-enabled nginx
enabled

# 查看所有运行的服务
$ systemctl list-units --type=service
$ systemctl list-units --type=service --state=running

# 查看失败的单元
$ systemctl --failed

# 电源管理
$ sudo systemctl poweroff
$ sudo systemctl reboot
$ sudo systemctl suspend
$ sudo systemctl hibernate

# 查看依赖
$ systemctl list-dependencies nginx

service - 传统服务管理

作用:运行 System V init 脚本。

语法:

service 服务名 命令

示例:

$ sudo service nginx start
$ sudo service nginx stop
$ sudo service nginx restart
$ sudo service nginx status

# 列出所有服务
$ service --status-all

journalctl - 系统日志查询

作用:查询 systemd 日志。

语法:

journalctl [选项]

常用选项:

  • -u:指定服务
  • -f:实时追踪
  • -n:显示行数
  • --since:起始时间
  • --until:结束时间

示例:

# 查看所有日志
$ journalctl

# 查看当前启动日志
$ journalctl -b

# 实时追踪
$ journalctl -f

# 查看特定服务日志
$ journalctl -u nginx
$ journalctl -u nginx -u php-fpm

# 按时间查看
$ journalctl --since "2024-05-22 10:00:00"
$ journalctl --since today
$ journalctl --since "-1 hour"

# 查看错误日志
$ journalctl -p err

# 显示最新日志
$ journalctl -n 100

# 显示可执行文件日志
$ journalctl /usr/sbin/nginx

# 查看磁盘使用
$ journalctl --disk-usage

crontab - 定时任务管理

作用:管理定时任务。

语法:

crontab [选项]

时间格式:

*  *  *  *  *
分 时 日 月 星期

示例:

# 编辑crontab
$ crontab -e

# 查看crontab
$ crontab -l

# 删除crontab
$ crontab -r

# 编辑指定用户
$ sudo crontab -u username -e

# 查看指定用户crontab
$ sudo crontab -u username -l

# 示例
# 每天凌晨2点执行备份
0 2 * * * /backup/backup.sh

# 每周一早上5点
0 5 * * 1 /backup/weekly.sh

# 每月1号凌晨0点
0 0 1 * * /backup/monthly.sh

# 每5分钟执行
*/5 * * * * /scripts/check.sh

# 每小时第15分钟执行
15 * * * * /scripts/hourly.sh

# 每天10点到18点每小时执行
0 10-18 * * * /scripts/workhours.sh

# 工作日早上9点
0 9 * * 1-5 /scripts/weekday.sh

# 每年的5月22号执行
0 0 22 5 * /annual.sh

10. 网络相关

ping - 测试网络连通性

作用:测试主机之间是否可达。

语法:

ping [选项] 主机

示例:

# 基本用法
$ ping google.com
PING google.com (142.250.185.46) 56(84) bytes of data.
64 bytes from 142.250.185.46: icmp_seq=1 ttl=115 time=15.2 ms

# 指定次数
$ ping -c 4 google.com

# 指定数据包大小
$ ping -s 1000 google.com

# 持续ping直到中断
$ ping -i 2 google.com

# 快速ping
$ ping -f google.com

# 显示详细信息
$ ping -v google.com

traceroute - 路由追踪

作用:显示数据包到达目标主机的路由。

语法:

traceroute [选项] 主机

示例:

# 追踪路由
$ traceroute google.com

# 跳过DNS反向解析
$ traceroute -n google.com

# 指定跳数
$ traceroute -m 20 google.com

# 使用UDP而非ICMP
$ traceroute -U google.com

# 使用TCP
$ traceroute -T google.com

# 等待时间
$ traceroute -w 2 google.com

curl - URL数据传输工具

作用:发送HTTP请求和数据传输。

语法:

curl [选项] [URL]

示例:

# 获取网页
$ curl https://example.com

# 保存到文件
$ curl -o file.html https://example.com

# 显示头部
$ curl -I https://example.com
$ curl -D headers.txt https://example.com

# 发送POST请求
$ curl -X POST -d "name=value" https://api.example.com
$ curl -X POST -F "file=@file.txt" https://api.example.com

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

# 自定义头部
$ curl -H "Authorization: Bearer token" https://api.example.com

# 跟随重定向
$ curl -L https://short.url

# 显示详细过程
$ curl -v https://example.com
$ curl -vvv https://example.com

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

# 断点续传
$ curl -C - -O https://example.com/largefile.zip

# 使用代理
$ curl -x http://proxy:8080 https://example.com

# 静默模式
$ curl -s https://example.com

# 限速
$ curl --limit-rate 100k https://example.com/file.zip

# 发送Cookie
$ curl -b "cookie1=value" https://example.com
$ curl -c cookies.txt https://example.com

wget - 文件下载工具

作用:非交互式文件下载器。

语法:

wget [选项] [URL]

示例:

# 基本下载
$ wget https://example.com/file.zip

# 保存为指定名称
$ wget -O output.zip https://example.com/file.zip

# 后台下载
$ wget -b https://example.com/file.zip

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

# 限速
$ wget --limit-rate=100k https://example.com/file.zip

# 递归下载
$ wget -r https://example.com/

# 下载多个文件
$ wget -i filelist.txt

# 镜像网站
$ wget --mirror -p --convert-links https://example.com

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

# 使用密码
$ wget --user=user --password=pass https://example.com

# 安静模式
$ wget -q https://example.com/file.zip

# 显示进度条
$ wget -nv https://example.com/file.zip

# 指定代理
$ wget -e use_proxy=yes -e http_proxy=proxy:8080 https://example.com

# 自定义用户代理
$ wget -U "Mozilla/5.0" https://example.com

ssh - 安全远程登录

作用:加密的远程登录协议。

语法:

ssh [选项] [用户@]主机 [命令]

示例:

# 基本连接
$ ssh user@hostname
$ ssh hostname

# 指定端口
$ ssh -p 2222 user@hostname

# 使用密钥登录
$ ssh -i ~/.ssh/mykey.pem user@hostname

# 执行远程命令
$ ssh user@hostname "ls -la /home"

# 跳板机
$ ssh -J jumpuser@jump.host user@target.host

# X11转发
$ ssh -X user@hostname

# 详细输出
$ ssh -v user@hostname

# 保持连接
$ ssh -o ServerAliveInterval=60 user@hostname

# 压缩
$ ssh -C user@hostname

scp - 安全复制

作用:通过SSH协议安全复制文件。

语法:

scp [选项] 源 目标

示例:

# 本地到远程
$ scp file.txt user@hostname:/remote/path/
$ scp file.txt user@hostname:/remote/path/newfile.txt

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

# 复制目录
$ scp -r /local/dir user@hostname:/remote/path/

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

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

# 保持文件属性
$ scp -p file.txt user@hostname:/remote/path/

# 压缩传输
$ scp -C file.txt user@hostname:/remote/path/

# 详细输出
$ scp -v file.txt user@hostname:/remote/path/

# 多个文件
$ scp file1.txt file2.txt user@hostname:/remote/path/

rsync - 快速远程同步

作用:快速增量同步文件和目录。

语法:

rsync [选项] 源 目标

示例:

# 基本同步
$ rsync -av /local/dir/ user@hostname:/remote/dir/

# 同步目录(不包含目录本身)
$ rsync -av /local/dir user@hostname:/remote/

# 压缩传输
$ rsync -avz /local/dir user@hostname:/remote/

# 显示差异
$ rsync -avz --dry-run /local/dir/ user@hostname:/remote/dir/

# 排除文件
$ rsync -avz --exclude='*.log' /local/dir/ user@hostname:/remote/

# 删除目标多余文件
$ rsync -avz --delete /local/dir/ user@hostname:/remote/

# 同步符号链接
$ rsync -avzL /local/dir/ user@hostname:/remote/

# 显示进度
$ rsync -avz --progress /local/dir/ user@hostname:/remote/

# 使用SSH端口
$ rsync -avz -e "ssh -p 2222" /local/dir/ user@hostname:/remote/

# 限速
$ rsync -avz --bwlimit=1000 /local/dir/ user@hostname:/remote/

nslookup - DNS查询

作用:查询DNS记录。

语法:

nslookup [主机] [DNS服务器]

示例:

# 查询域名
$ nslookup google.com

# 指定DNS服务器
$ nslookup google.com 8.8.8.8

# 查询MX记录
$ nslookup -type=mx google.com

# 查询其他记录
$ nslookup -type=a google.com
$ nslookup -type=cname www.google.com
$ nslookup -type=txt google.com
$ nslookup -type=ns google.com

dig - DNS查询工具

作用:灵活的DNS查询工具。

语法:

dig [@DNS服务器] 域名 [记录类型]

示例:

# 基本查询
$ dig google.com

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

# 指定DNS服务器
$ dig @8.8.8.8 google.com

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

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

# 追踪DNS解析
$ dig +trace google.com

# 显示所有记录
$ dig google.com ANY

# 反向查询
$ dig -x 8.8.8.8

# 不显示注释
$ dig +nocomments google.com

# 只显示答案
$ dig +noall +answer google.com

telnet - 远程登录(不推荐)

作用:未加密的远程登录和端口测试。

语法:

telnet [主机] [端口]

示例:

# 远程登录
$ telnet hostname

# 测试端口
$ telnet hostname 80

# 测试SMTP
$ telnet mail.example.com 25

nc (netcat) - 网络瑞士军刀

作用:读写网络连接。

语法:

nc [选项] [主机] [端口]

示例:

# 测试端口
$ nc -zv hostname 80
Connection to hostname 80 port [tcp/http] succeeded!

# 扫描端口范围
$ nc -zv hostname 20-30

# 监听端口
$ nc -l 8080

# 文件传输
$ nc -l 8080 < file.txt           # 发送端
$ nc hostname 8080 > file.txt    # 接收端

# 简单聊天
$ nc -l 8080                      # 服务器
$ nc hostname 8080                # 客户端

# 执行命令
$ nc -l 8080 -e /bin/bash         # 服务器
$ nc hostname 8080               # 客户端(获得shell)

# 端口重定向
$ nc -l 8080 | nc targethost 80

ifconfig - 网络接口配置

作用:配置和显示网络接口参数。

语法:

ifconfig [接口] [选项]

示例:

# 显示所有接口
$ ifconfig
$ ifconfig -a

# 显示特定接口
$ ifconfig eth0

# 启用接口
$ sudo ifconfig eth0 up

# 禁用接口
$ sudo ifconfig eth0 down

# 设置IP地址
$ sudo ifconfig eth0 192.168.1.100

# 设置子网掩码
$ sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0

# 设置MAC地址
$ sudo ifconfig eth0 hw ether 00:11:22:33:44:55

# 添加别名
$ sudo ifconfig eth0:0 192.168.1.101

# 显示详细
$ ifconfig -v eth0

ip - 网络配置工具

作用:更强大的网络配置工具(推荐)。

语法:

ip [选项] 对象 [命令]

对象:link, addr, route, neigh, rule

示例:

# 显示所有接口
$ ip link show
$ ip link list

# 显示IP Address
$ ip addr show
$ ip a

# 添加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 link set eth0 up
$ sudo ip link set eth0 down

# 设置MAC地址
$ sudo ip link set eth0 address 00:11:22:33:44:55

# 显示路由表
$ ip route show
$ ip r

# 添加路由
$ sudo ip route add 192.168.2.0/24 via 192.168.1.1
$ sudo ip route add default via 192.168.1.1

# 删除路由
$ sudo ip route del 192.168.2.0/24

# 显示邻居表
$ ip neigh show

# 添加静态ARP
$ sudo ip neigh add 192.168.1.1 lladdr 00:11:22:33:44:55 dev eth0

# 监控网络
$ ip monitor all

11. 权限与用户

chmod - 改变文件权限

作用:更改文件或目录的访问权限。

语法:

chmod [选项] 权限 文件

权限表示:

  • 符号表示:u(所有者)、g(组)、o(其他)、a(所有)

  • 操作符:+(添加)、-(删除)、=(设置)

  • 权限位:r(读)、w(写)、x(执行)

  • 数字表示:r=4, w=2, x=1

    • 7 = rwx
    • 6 = rw-
    • 5 = r-x
    • 4 = r–
    • 0 = —

示例:

# 添加执行权限
$ chmod +x script.sh

# 所有者添加写权限
$ chmod u+w file.txt

# 设置完整权限
$ chmod 755 script.sh       # rwxr-xr-x
$ chmod 644 file.txt         # rw-r--r--
$ chmod 700 secret           # rwx------
$ chmod 600 private.key      # rw-------

# 递归设置
$ chmod -R 755 /var/www/html

# 只设置目录
$ chmod -R u+rwX /path

# 复制权限
$ chmod --reference=file1.txt file2.txt

# 符号方式
$ chmod u=rwx,g=rx,o=r file.sh
$ chmod a+x file.sh
$ chmod u-x,g+w file.sh

# 设置特殊权限
$ chmod 4755 file           # SUID
$ chmod 2755 directory     # SGID
$ chmod 1755 directory      # Sticky bit

chown - 改变文件所有者

作用:更改文件或目录的所有者和所属组。

语法:

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

示例:

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

# 更改所有者和组
$ sudo chown user:group file.txt
$ sudo chown user.group file.txt

# 更改组
$ sudo chown :group file.txt
$ sudo chgrp group file.txt

# 递归更改
$ sudo chown -R user:group /var/www/html

# 复制所有权
$ sudo chown --reference=file1.txt file2.txt

# 只更改用户
$ sudo chown user file.txt

# 更改组
$ sudo chown :group file.txt

chgrp - 改变文件所属组

作用:更改文件或目录的所属组。

语法:

chgrp [选项] 组 文件

示例:

# 更改组
$ chgrp developers project/

# 递归更改
$ chgrp -R developers /var/www/html

# 复制组
$ chgrp --reference=file1.txt file2.txt

useradd - 创建用户

作用:创建新的用户账户。

语法:

sudo useradd [选项] 用户名

示例:

# 基本创建
$ sudo useradd username

# 创建并指定主目录
$ sudo useradd -m username

# 指定shell
$ sudo useradd -m -s /bin/bash username

# 指定UID
$ sudo useradd -u 1500 username

# 指定组
$ sudo useradd -g developers username
$ sudo useradd -G sudo,www-data username

# 创建系统用户
$ sudo useradd -r systemuser

# 完整示例
$ sudo useradd -m -s /bin/bash -G sudo,developers -c "John Doe" john

userdel - 删除用户

作用:删除用户账户。

语法:

sudo userdel [选项] 用户名

示例:

# 删除用户
$ sudo userdel username

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

# 强制删除(即使已登录)
$ sudo userdel -f username

usermod - 修改用户账户

作用:修改现有用户账户属性。

语法:

sudo usermod [选项] 用户名

示例:

# 更改用户名
$ sudo usermod -l newname oldname

# 添加组
$ sudo usermod -aG groupname username

# 更改主目录
$ sudo usermod -d /new/home -m username

# 更改shell
$ sudo usermod -s /bin/zsh username

# 锁定账户
$ sudo usermod -L username

# 解锁账户
$ sudo usermod -U username

# 设置到期日期
$ sudo usermod -e 2025-12-31 username

# 修改UID
$ sudo usermod -u 1500 username

passwd - 设置密码

作用:更改用户密码。

语法:

passwd [选项] [用户名]

示例:

# 更改当前用户密码
$ passwd

# 更改其他用户密码(需要root)
$ sudo passwd username

# 删除密码
$ sudo passwd -d username

# 锁定账户
$ sudo passwd -l username

# 解锁账户
$ sudo passwd -u username

# 设置密码过期
$ sudo passwd -x 90 username        # 90天后过期
$ sudo passwd -x 0 username          # 立即过期
$ sudo passwd -x -1 username         # 永不过期

# 查看密码状态
$ sudo passwd -S username

su - 切换用户

作用:切换到另一个用户身份。

语法:

su [选项] [用户]

示例:

# 切换到root
$ su

# 切换到指定用户
$ su username

# 切换并执行命令
$ su -c "command" username

# 切换到用户并加载环境
$ su - username

# 使用root执行单个命令
$ sudo command

sudo - 以root身份执行命令

作用:以其他用户(通常是root)身份执行命令。

语法:

sudo [选项] 命令

示例:

# 执行命令
$ sudo apt update
$ sudo systemctl restart nginx

# 编辑文件
$ sudo -e /etc/hosts
$ sudo vim /etc/hosts

# 以其他用户身份运行
$ sudo -u username command

# 列出权限
$ sudo -l

# 切换到root shell
$ sudo -i
$ sudo su

# 查看sudo日志
$ sudo cat /var/log/auth.log | grep sudo

# 免密码执行
$ sudo -n command

groupadd - 创建组

作用:创建新的用户组。

语法:

sudo groupadd [选项] 组名

示例:

# 创建组
$ sudo groupadd developers

# 创建系统组
$ sudo groupadd -r systemgroup

# 指定GID
$ sudo groupadd -g 1500 developers

12. 文本处理

awk - 文本分析和处理

作用:强大的文本分析工具,适合模式扫描和处理。

语法:

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

示例:

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

# 指定分隔符
$ awk -F: '{print $1}' /etc/passwd
$ awk -F',' '{print $2}' file.csv

# 模式匹配
$ awk '/error/ {print $0}' logfile
$ awk '$3 > 100 {print $0}' file.txt

# 条件判断
$ awk '{if ($3 > 100) print "High:", $0}' file.txt

# 计算
$ awk '{sum += $2} END {print sum}' file.txt

# 内置变量
$ awk '{print NR, $0}' file.txt       # NR: 行号
$ awk '{print NF, $0}' file.txt      # NF: 字段数

# 多文件处理
$ awk 'NR==FNR {sum1+=$2} NR!=FNR {sum2+=$2} END {print sum1, sum2}' f1 f2

# 输出格式
$ awk '{printf "%-10s %10.2f\n", $1, $2}' file.txt

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

# 复杂示例
$ awk -F: '{
  if ($3 >= 1000) print "User:", $1, "UID:", $3
  else print "System:", $1
}' /etc/passwd

# 计算平均值
$ awk '{sum+=$2; count++} END {print "Average:", sum/count}' file.txt

# 统计出现次数
$ awk '{count[$1]++} END {for (word in count) print word, count[word]}' file.txt

# 替换
$ awk '{gsub(/old/, "new"); print}' file.txt

sed - 流编辑器

作用:用于对文本进行替换、删除、插入等操作。

语法:

sed [选项] '命令' 文件

常用命令:

  • s:替换
  • d:删除
  • p:打印
  • i:插入
  • a:追加
  • c:替换行

示例:

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

# 全局替换
$ sed 's/old/new/g' file.txt

# 指定行替换
$ sed '3s/old/new/' file.txt
$ sed '1,5s/old/new/g' file.txt

# 替换多个模式
$ sed -e 's/a/A/g' -e 's/b/B/g' file.txt

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

# 打印行
$ sed -n '3p' file.txt             # 打印第3行
$ sed -n '1,5p' file.txt           # 打印1-5行
$ sed -n '/pattern/p' file.txt     # 打印匹配行

# 插入
$ sed '3i\New line' file.txt       # 在第3行前插入
$ sed '1a\New line' file.txt        # 在第1行后追加

# 替换整行
$ sed '3c\Replacement line' file.txt

# 原位编辑
$ sed -i 's/old/new/g' file.txt    # 直接修改文件
$ sed -i.bak 's/old/new/g' file.txt # 备份后修改

# 使用正则
$ sed 's/[0-9]*/NUM/g' file.txt
$ sed 's/^/START: /' file.txt       # 行首添加
$ sed 's/$/ :END/' file.txt        # 行尾添加

# 引用shell变量
$ var="value"
$ sed "s/pattern/$var/g" file.txt

# 从文件读取命令
$ sed -f commands.sed file.txt

# 组合示例
$ sed -n '10,20p' file.txt | sed 's/error/ERROR/g'
$ ls -l | sed '1d'                 # 去掉第一行

sort - 排序文本

作用:对文本行进行排序。

语法:

sort [选项] 文件

常用选项:

  • -r:逆序
  • -n:数字排序
  • -k:按字段排序
  • -t:指定分隔符
  • -u:去重
  • -f:忽略大小写

示例:

# 基本排序
$ sort file.txt

# 逆序
$ sort -r file.txt

# 数字排序
$ sort -n numbers.txt
$ sort -n -r numbers.txt

# 按字段排序
$ sort -t: -k3 -n /etc/passwd      # 按UID排序

# 去重
$ sort -u file.txt

# 忽略大小写
$ sort -f file.txt

# 输出到文件
$ sort -o sorted.txt file.txt

# 合并已排序文件
$ sort -m file1.txt file2.txt

# 检查是否已排序
$ sort -c file.txt

# 多字段排序
$ sort -k2,2 -k3,3n file.txt

# 人类可读数字(1K, 2M等)
$ sort -h file.txt

uniq - 报告或忽略重复行

作用:显示或过滤重复的行。

语法:

uniq [选项] [输入] [输出]

示例:

# 基本去重
$ uniq file.txt

# 计数
$ uniq -c file.txt
  3 duplicate line
  1 unique line

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

# 只显示未重复行
$ uniq -u file.txt

# 忽略大小写
$ uniq -i file.txt

# 跳过字段
$ uniq -f 1 file.txt

# 跳过字符
$ uniq -s 3 file.txt

# 组合使用(排序后去重计数)
$ sort file.txt | uniq -c | sort -rn

wc - 统计字节、字、行数

作用:统计文件的行数、字数、字节数。

语法:

wc [选项] 文件

示例:

# 基本统计
$ wc file.txt
 100  500 3000 file.txt
 # 行数  字数 字节数

# 只显示行数
$ wc -l file.txt

# 只显示字数
$ wc -w file.txt

# 只显示字节数
$ wc -c file.txt

# 显示最长行长度
$ wc -L file.txt

# 统计多个文件
$ wc file1.txt file2.txt

# 标准输入
$ cat file.txt | wc -l
$ ls | wc -l

cut - 剪切文件列

作用:从每行中提取指定字段。

语法:

cut [选项] 文件

示例:

# 按字节
$ cut -b 1-5 file.txt

# 按字符
$ cut -c 1-10 file.txt

# 按字段
$ cut -d: -f1 /etc/passwd          # 第一个字段
$ cut -d, -f1,3 file.csv          # 第1、3字段

# 范围
$ cut -d: -f1-3 /etc/passwd        # 1到3字段

# 补集
$ cut -d: -f1 --complement /etc/passwd

# 更改分隔符
$ cut -d' ' -f1-3 file.txt

# 从文件列表
$ cut -d: -f1 /etc/passwd | sort

tr - 字符转换

作用:转换或删除字符。

语法:

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

示例:

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

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

# 删除字符
$ echo "hello123" | tr -d '0-9'
hello

# 删除重复字符
$ echo "hellloooo" | tr -s 'o'
helllo

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

# 删除控制字符
$ cat file.txt | tr -d '\r'

# 替换集合
$ echo "abc" | tr 'abc' '123'
123

# 使用POSIX字符类
$ cat file.txt | tr '[:upper:]' '[:lower:]'
$ cat file.txt | tr '[:space:]' '\t'

# 补集
$ echo "a1b2c3" | tr -c '0-9' '\n'

# 删除非数字
$ echo "abc123def456" | tr -cd '0-9'
123456

diff - 比较文件差异

作用:比较两个文件的差异。

语法:

diff [选项] 文件1 文件2

示例:

# 基本比较
$ diff file1.txt file2.txt

# 统一格式
$ diff -u file1.txt file2.txt

# 并排格式
$ diff -y file1.txt file2.txt

# 忽略大小写
$ diff -i file1.txt file2.txt

# 忽略空格
$ diff -w file1.txt file2.txt

# 只显示是否不同
$ diff -q file1.txt file2.txt

# 递归比较
$ diff -r dir1 dir2

# 排除文件
$ diff -r -x "*.txt" dir1 dir2

# 忽略空白行
$ diff -B file1.txt file2.txt

# 创建补丁
$ diff -u file1.txt file2.txt > patch.diff

# 应用补丁
$ patch -p1 < patch.diff

# 版本比较(显示上下文)
$ diff -c file1.txt file2.txt

comm - 逐行比较两个排序文件

作用:逐行比较两个已排序的文件。

语法:

comm [选项] 文件1 文件2

输出三列:

  • 第1列:只在文件1中
  • 第2列:只在文件2中
  • 第3列:两文件共有

示例:

# 基本比较
$ comm file1.txt file2.txt

# 隐藏列
$ comm -1 file1.txt file2.txt    # 隐藏第1列
$ comm -2 file1.txt file2.txt    # 隐藏第2列
$ comm -3 file1.txt file2.txt    # 隐藏第3列

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

# 只显示只在file1中的行
$ comm -23 file1.txt file2.txt

# 只显示只在file2中的行
$ comm -13 file1.txt file2.txt

13. 进程与作业控制

jobs - 显示作业列表

作用:显示当前终端的后台作业。

语法:

jobs [选项]

示例:

# 查看后台作业
$ jobs
[1]-  Running    sleep 100 &
[2]+  Stopped    vim file.txt

# 显示PID
$ jobs -l
[1]- 12345 Running    sleep 100 &
[2]+ 12346 Stopped    vim file.txt

# 显示进程组ID
$ jobs -p

# 运行状态
$ jobs -r                # 只显示运行中的
$ jobs -s                # 只显示停止的

fg - 将作业放到前台

作用:将后台作业放到前台运行。

语法:

fg [作业号]

示例:

# 将最近的后台作业放到前台
$ fg

# 将指定作业放到前台
$ fg %1

# 按名称
$ fg %vim

bg - 将作业放到后台

作用:将停止的作业在后台继续运行。

语法:

bg [作业号]

示例:

# 挂起当前作业
$ Ctrl+Z

# 将挂起的作业在后台运行
$ bg

# 指定作业
$ bg %1

nohup - 不挂断运行命令(后台运行进程)

作用:即使终端关闭,命令也继续运行。

语法:

nohup 命令 &

示例:

# 后台运行
$ nohup ./script.sh &

# 指定输出
$ nohup ./script.sh > output.log 2>&1 &

# 组合示例
$ nohup ./backup.sh > /var/log/backup.log 2>&1 &

# 查看是否在运行
$ ps aux | grep backup

screen - 终端多路复用器

作用:创建多个终端会话,支持断开后重新连接。

语法:

screen [选项] [命令]

常用选项:

  • -S:命名会话
  • -ls:列出所有会话
  • -r:重新连接
  • -d:分离会话
  • -x:附加到已连接会话

示例:

# 创建新会话
$ screen

# 创建命名会话
$ screen -S mysession

# 列出所有会话
$ screen -ls
There is a screen on:
    12345.mysession    (Detached)
    12346.oldsession   (Attached)

# 分离会话
$ Ctrl+A D

# 重新连接
$ screen -r mysession
$ screen -r 12345

# 强制重新连接
$ screen -d -r mysession

# 附加到已连接会话
$ screen -x mysession

# 创建并执行命令
$ screen -S backup ./backup.sh

# 在screen中常用快捷键
# Ctrl+A D        - 分离
# Ctrl+A C        - 创建新窗口
# Ctrl+A N        - 下一个窗口
# Ctrl+A P        - 上一个窗口
# Ctrl+A "        - 窗口列表
# Ctrl+A K        - 关闭当前窗口
# Ctrl+A \        - 关闭所有窗口并终止会话

tmux - 终端多路复用器(现代版)

作用:比 screen 更现代的终端管理器。

语法:

tmux [命令] [参数]

常用命令:

  • new:创建新会话
  • attach:连接会话
  • detach:分离
  • ls:列表
  • kill-server:关闭服务器

示例:

# 创建新会话
$ tmux

# 创建命名会话
$ tmux new -s mysession

# 列出会话
$ tmux ls

# 分离
$ Ctrl+B D

# 连接会话
$ tmux attach
$ tmux attach -t mysession

# 在会话中执行命令
$ tmux new -d -s mysession './script.sh'

# 发送命令到窗口
$ tmux send-keys -t mysession:0 './script.sh' C-m

# 窗口操作
$ Ctrl+B C        # 创建窗口
$ Ctrl+B N        # 下一个窗口
$ Ctrl+B P        # 上一个窗口
$ Ctrl+B L        # 上一个窗口
$ Ctrl+B 0-9      # 切换窗口
$ Ctrl+B &        # 关闭窗口

# 窗格操作
$ Ctrl+B %        # 垂直分割
$ Ctrl+B "        # 水平分割
$ Ctrl+B O        # 切换窗格
$ Ctrl+B X        # 关闭窗格
$ Ctrl+B Z        # 最大化/恢复窗格

# 其他操作
$ tmux kill-session -t mysession
$ tmux kill-server

# 配置示例
$ cat ~/.tmux.conf
set -g mouse on
set -g prefix C-a
bind C-a send-prefix

14. 帮助与文档

man - 显示命令手册

作用:显示命令的详细帮助文档。

语法:

man [选项] 命令

常用选项:

  • -k:搜索手册
  • -f:简要说明
  • -a:显示所有匹配章节

示例:

# 查看命令手册
$ man ls
$ man grep
$ man ssh

# 搜索手册
$ man -k "copy files"
$ man -k "network"

# 查看所有章节
$ man -a ls

# 指定章节
$ man 5 passwd

# 显示简要说明
$ man -f ls
ls (1) - list directory contents

# 其他
$ man man            # 查看man命令本身
$ man 2 read         # 系统调用
$ man 3 printf       # C库函数

info - 显示GNU info文档

作用:比 man 更详细的超文本帮助系统。

语法:

info [命令]

示例:

$ info ls
$ info emacs
$ info grep

# 导航
# n - 下一个节点
# p - 上一个节点
# u - 上一层
# m - 选择菜单项
# q - 退出

–help - 命令内置帮助

作用:显示命令的简要帮助信息。

语法:

命令 --help

示例:

$ ls --help
$ grep --help
$ tar --help

whatis - 显示命令简介

作用:显示命令的简要说明(一行)。

语法:

whatis 命令

示例:

$ whatis ls
ls (1) - list directory contents

$ whatis grep sed awk
grep (1)        - print lines matching a pattern
sed (1)         - stream editor for filtering and transforming text
awk (1)         - pattern scanning and processing language

# 更新whatis数据库
$ sudo mandb

附录:常用快捷键

Bash 快捷键

快捷键功能
Ctrl+C终止当前命令
Ctrl+Z挂起当前命令
Ctrl+D退出当前shell/EOF
Ctrl+L清屏
Ctrl+U删除光标前所有
Ctrl+K删除光标后所有
Ctrl+W删除光标前单词
Ctrl+A跳到行首
Ctrl+E跳到行尾
Ctrl+R搜索历史命令
Ctrl+S暂停输出
Ctrl+Q恢复输出
Tab自动补全
Tab Tab显示所有补全选项

附录:常用系统路径

路径说明
/根目录
/home用户主目录
/rootroot用户主目录
/etc系统配置文件
/var变量数据(日志、缓存)
/usr用户程序
/bin基本命令
/sbin系统管理命令
/tmp临时文件
/proc进程信息(虚拟)
/dev设备文件
/mnt挂载点
/media可移动媒体
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐