HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • Linux 系统工具完全指南

    • Linux 系统工具完全指南
    • 高频工具 - 每天使用
    • 中频工具 - 每周使用
    • 低频但重要的工具
    • 开发环境工具
    • 故障排查与诊断

高频工具 - 每天使用

这些是后端开发者几乎每天都会用到的 Linux 工具,务必熟练掌握


一、远程连接工具

1.1 SSH (Secure Shell)

是什么?

SSH(Secure Shell)是一种加密的网络协议,用于在不安全的网络上安全地操作远程计算机。它是后端开发者连接服务器的首选方式。

为什么需要它?

  • 所有生产服务器都通过 SSH 管理
  • 传输过程加密,防止密码被窃取
  • 支持密钥认证,比密码更安全
  • 可以执行远程命令、传输文件、端口转发

基础用法

# 基本连接(使用密码)
ssh username@hostname
ssh root@192.168.1.100
ssh deploy@myserver.com

# 指定端口(默认22)
ssh -p 2222 username@hostname

# 使用密钥连接
ssh -i ~/.ssh/my_key.pem ubuntu@ec2-xxx.amazonaws.com

# 执行单条命令(不进入交互模式)
ssh user@host "ls -la /var/log"
ssh user@host "cat /etc/nginx/nginx.conf"

# 执行多条命令
ssh user@host "cd /var/www && git pull && pm2 restart all"

# 以其他用户身份执行
ssh user@host "sudo -u www-data whoami"

进阶用法

# 开启压缩传输(慢网络时有用)
ssh -C user@host

# 静默模式(脚本中使用)
ssh -q user@host "command"

# 详细模式(调试连接问题)
ssh -v user@host      # 一级详细
ssh -vv user@host     # 二级详细
ssh -vvv user@host    # 三级详细(最详细)

# 强制使用 IPv4
ssh -4 user@host

# 强制使用 IPv6
ssh -6 user@host

# 设置连接超时
ssh -o ConnectTimeout=10 user@host

# 禁用严格主机密钥检查(不推荐生产使用)
ssh -o StrictHostKeyChecking=no user@host

# 保持连接活跃(防止断开)
ssh -o ServerAliveInterval=60 user@host

SSH 配置文件

SSH 配置文件让你不用每次都输入复杂的参数:

# 编辑配置文件
vim ~/.ssh/config

配置文件示例:

# 全局配置
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3
    Compression yes

# 生产服务器
Host prod
    HostName 192.168.1.100
    User deploy
    Port 22
    IdentityFile ~/.ssh/prod_key

# 开发服务器
Host dev
    HostName dev.mycompany.com
    User developer
    Port 2222
    IdentityFile ~/.ssh/dev_key
    ForwardAgent yes

# AWS EC2
Host aws-web
    HostName ec2-xx-xx-xx-xx.compute-1.amazonaws.com
    User ubuntu
    IdentityFile ~/.ssh/aws.pem

# 跳板机配置
Host internal
    HostName 10.0.0.100
    User admin
    ProxyJump bastion

Host bastion
    HostName bastion.company.com
    User admin
    IdentityFile ~/.ssh/bastion_key

配置后可以这样连接:

ssh prod          # 等于 ssh -i ~/.ssh/prod_key deploy@192.168.1.100
ssh dev           # 等于 ssh -p 2222 -i ~/.ssh/dev_key developer@dev.mycompany.com
ssh aws-web       # 等于 ssh -i ~/.ssh/aws.pem ubuntu@ec2-xx-xx-xx-xx...

SSH 密钥管理

# 生成密钥对
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
ssh-keygen -t ed25519 -C "your_email@example.com"  # 更安全的算法

# 生成时指定文件名
ssh-keygen -t rsa -b 4096 -f ~/.ssh/myproject_key

# 查看公钥
cat ~/.ssh/id_rsa.pub
cat ~/.ssh/id_ed25519.pub

# 将公钥复制到服务器(自动配置)
ssh-copy-id user@host
ssh-copy-id -i ~/.ssh/mykey.pub user@host

# 手动复制公钥到服务器
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

# 修改密钥密码
ssh-keygen -p -f ~/.ssh/id_rsa

# 查看密钥指纹
ssh-keygen -lf ~/.ssh/id_rsa.pub

SSH Agent(密钥代理)

SSH Agent 可以缓存你的私钥密码,避免每次都输入:

# 启动 ssh-agent
eval "$(ssh-agent -s)"

# 添加密钥到 agent
ssh-add ~/.ssh/id_rsa
ssh-add ~/.ssh/myproject_key

# 查看已添加的密钥
ssh-add -l

# 删除所有密钥
ssh-add -D

# 设置密钥有效期(秒)
ssh-add -t 3600 ~/.ssh/id_rsa   # 1小时后自动删除

SSH 端口转发(隧道)

端口转发是 SSH 的强大功能,可以安全地访问内网资源:

# 本地端口转发:访问本地 8080 等于访问远程的 80
# 场景:通过跳板机访问内网 Web 服务
ssh -L 8080:internal-server:80 user@bastion
# 然后浏览器访问 http://localhost:8080

# 本地端口转发:访问远程数据库
ssh -L 3307:localhost:3306 user@db-server
# 然后用 mysql -h 127.0.0.1 -P 3307 连接

# 远程端口转发:让远程机器访问本地服务
# 场景:让服务器能访问你本地的服务
ssh -R 8080:localhost:3000 user@remote
# 远程机器访问 localhost:8080 等于访问你本地的 3000

# 动态端口转发(SOCKS 代理)
ssh -D 1080 user@remote
# 配置浏览器使用 SOCKS5 代理 127.0.0.1:1080

# 后台运行端口转发
ssh -fNL 8080:localhost:80 user@remote
# -f: 后台运行
# -N: 不执行远程命令

SSH 跳板机(ProxyJump)

当目标服务器在内网时,需要通过跳板机中转:

# 方式1:使用 -J 参数
ssh -J user@bastion user@internal-server

# 方式2:多级跳转
ssh -J user@bastion1,user@bastion2 user@target

# 方式3:配置文件方式(推荐)
# ~/.ssh/config
Host internal
    HostName 10.0.0.100
    User admin
    ProxyJump bastion

常见问题解决

# 问题1:Permission denied (publickey)
# 原因:密钥不匹配或权限问题
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

# 问题2:Host key verification failed
# 原因:服务器密钥变更
ssh-keygen -R hostname  # 删除旧的已知主机记录

# 问题3:Connection refused
# 原因:SSH 服务未运行或端口错误
# 检查服务器上的 SSH 服务
sudo systemctl status sshd

# 问题4:Connection timed out
# 原因:网络问题或防火墙
# 检查防火墙
sudo ufw status
sudo iptables -L

# 问题5:Too many authentication failures
# 原因:尝试了太多密钥
ssh -o IdentitiesOnly=yes -i specific_key user@host

1.2 openssh-server

是什么?

openssh-server 是 SSH 服务端程序,安装后你的机器就可以被其他人通过 SSH 连接。

安装与配置

# Ubuntu/Debian 安装
sudo apt update
sudo apt install openssh-server

# CentOS/RHEL 安装
sudo yum install openssh-server

# 启动服务
sudo systemctl start sshd
sudo systemctl enable sshd  # 开机自启

# 查看状态
sudo systemctl status sshd

# 重启服务(修改配置后)
sudo systemctl restart sshd

配置文件详解

SSH 服务端配置文件位于 /etc/ssh/sshd_config:

# 编辑配置
sudo vim /etc/ssh/sshd_config

重要配置项:

# 监听端口(建议改为非标准端口)
Port 22
# Port 2222

# 监听地址
ListenAddress 0.0.0.0      # 所有 IPv4
ListenAddress ::           # 所有 IPv6

# 协议版本(只用 2)
Protocol 2

# 允许 root 登录
PermitRootLogin yes                    # 允许
PermitRootLogin no                     # 禁止
PermitRootLogin prohibit-password      # 禁止密码,允许密钥

# 密码认证
PasswordAuthentication yes   # 允许密码登录
PasswordAuthentication no    # 禁用密码,只允许密钥

# 公钥认证
PubkeyAuthentication yes

# 允许的用户(白名单)
AllowUsers user1 user2 deploy@192.168.1.*

# 禁止的用户(黑名单)
DenyUsers baduser

# 允许的用户组
AllowGroups sshusers admin

# 最大认证尝试次数
MaxAuthTries 3

# 最大会话数
MaxSessions 10

# 登录超时
LoginGraceTime 60

# 空闲超时
ClientAliveInterval 300    # 5分钟发一次心跳
ClientAliveCountMax 3      # 3次无响应断开

# X11 转发
X11Forwarding yes

# TCP 转发
AllowTcpForwarding yes

# 显示登录 Banner
Banner /etc/ssh/banner.txt

# 日志级别
LogLevel INFO   # 可选:QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG

安全加固建议

# /etc/ssh/sshd_config 安全配置模板

# 1. 更改默认端口
Port 2222

# 2. 禁用 root 直接登录
PermitRootLogin prohibit-password

# 3. 禁用密码登录(只用密钥)
PasswordAuthentication no

# 4. 只允许特定用户
AllowUsers deploy admin

# 5. 限制登录尝试
MaxAuthTries 3
MaxSessions 5
LoginGraceTime 30

# 6. 使用强加密算法
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com

# 7. 禁用不安全的功能
PermitEmptyPasswords no
X11Forwarding no
AllowAgentForwarding no
AllowTcpForwarding no

# 8. 设置超时
ClientAliveInterval 300
ClientAliveCountMax 2

验证配置:

# 测试配置文件语法
sudo sshd -t

# 查看当前配置
sudo sshd -T

1.3 SCP (Secure Copy)

是什么?

SCP 是基于 SSH 的文件传输工具,用于在本地和远程服务器之间安全地复制文件。

基础用法

# 上传文件到远程
scp localfile.txt user@host:/remote/path/
scp localfile.txt user@host:~                  # 上传到家目录
scp localfile.txt user@host:/tmp/newname.txt   # 上传并重命名

# 下载文件到本地
scp user@host:/remote/file.txt ./
scp user@host:/remote/file.txt ./localname.txt

# 上传整个目录(递归)
scp -r ./local_dir user@host:/remote/path/

# 下载整个目录
scp -r user@host:/remote/dir ./local/

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

# 指定密钥
scp -i ~/.ssh/mykey.pem file.txt user@host:/path/

# 保持文件属性(时间戳、权限等)
scp -p file.txt user@host:/path/

# 压缩传输
scp -C largefile.tar user@host:/path/

# 限制带宽(KB/s)
scp -l 1000 largefile.tar user@host:/path/  # 限制 1MB/s

# 静默模式
scp -q file.txt user@host:/path/

# 显示进度
scp -v file.txt user@host:/path/

在两台远程服务器间复制

# 从 server1 复制到 server2
scp user1@server1:/path/file user2@server2:/path/

# 注意:需要在 server1 上能 SSH 到 server2,或者使用 -3 参数通过本地中转
scp -3 user1@server1:/path/file user2@server2:/path/

常用组合

# 上传多个文件
scp file1.txt file2.txt file3.txt user@host:/path/

# 使用通配符
scp *.log user@host:/var/log/backup/
scp user@host:/var/log/*.log ./logs/

# 排除某些文件(需要用 rsync,scp 不支持)

1.4 SFTP (SSH File Transfer Protocol)

是什么?

SFTP 是基于 SSH 的交互式文件传输协议,提供了类似 FTP 的操作体验,但更安全。

基础用法

# 连接服务器
sftp user@host
sftp -P 2222 user@host        # 指定端口
sftp -i key.pem user@host     # 指定密钥

# 进入 SFTP 后的常用命令
sftp> help                    # 查看帮助

# 远程操作
sftp> ls                      # 列出远程文件
sftp> cd /var/www             # 切换远程目录
sftp> pwd                     # 显示远程当前目录
sftp> mkdir newdir            # 创建远程目录
sftp> rm file.txt             # 删除远程文件
sftp> rmdir emptydir          # 删除远程空目录

# 本地操作(命令前加 l)
sftp> lls                     # 列出本地文件
sftp> lcd /home/user          # 切换本地目录
sftp> lpwd                    # 显示本地当前目录

# 文件传输
sftp> put localfile.txt       # 上传文件
sftp> put -r localdir         # 上传目录
sftp> get remotefile.txt      # 下载文件
sftp> get -r remotedir        # 下载目录
sftp> mput *.txt              # 批量上传
sftp> mget *.log              # 批量下载

# 退出
sftp> bye
sftp> exit
sftp> quit

批量操作

# 使用脚本批量操作
sftp user@host << EOF
cd /var/www
put index.html
put -r assets
bye
EOF

# 从文件读取命令
sftp -b commands.txt user@host

1.5 rsync

是什么?

rsync 是一个强大的文件同步工具,支持增量传输,比 scp 更高效。

为什么用 rsync 而不是 scp?

  • 增量传输:只传输变化的部分,而不是整个文件
  • 断点续传:传输中断后可以继续
  • 压缩传输:可以压缩数据减少传输量
  • 保持属性:完整保留文件权限、时间戳等
  • 排除文件:可以指定不同步的文件

基础用法

# 基本语法
rsync [选项] 源 目标

# 本地同步
rsync -av /source/dir/ /dest/dir/

# 上传到远程(通过 SSH)
rsync -avz /local/dir/ user@host:/remote/dir/

# 下载到本地
rsync -avz user@host:/remote/dir/ /local/dir/

# 指定 SSH 端口
rsync -avz -e "ssh -p 2222" /local/ user@host:/remote/

# 指定 SSH 密钥
rsync -avz -e "ssh -i ~/.ssh/key.pem" /local/ user@host:/remote/

常用选项详解

-a, --archive     # 归档模式,相当于 -rlptgoD
                  # r: 递归
                  # l: 复制符号链接
                  # p: 保持权限
                  # t: 保持时间戳
                  # g: 保持用户组
                  # o: 保持所有者
                  # D: 保持设备文件

-v, --verbose     # 详细输出
-z, --compress    # 压缩传输
-P                # 显示进度 + 断点续传,等于 --partial --progress
--progress        # 显示传输进度
--partial         # 保留部分传输的文件,支持断点续传

-n, --dry-run     # 模拟运行,不实际传输
--delete          # 删除目标中源没有的文件(镜像同步)
--exclude         # 排除文件
--include         # 包含文件
--bwlimit         # 限制带宽

-h, --human-readable  # 人类可读的格式

实用示例

# 1. 完整备份(保留所有属性)
rsync -avzP /data/ user@backup:/backup/data/

# 2. 镜像同步(保持两端完全一致)
rsync -avz --delete /source/ /dest/
# 警告:--delete 会删除目标中多余的文件!

# 3. 排除文件
rsync -avz --exclude='*.log' --exclude='.git' /source/ /dest/
rsync -avz --exclude-from=exclude.txt /source/ /dest/

# exclude.txt 内容示例:
# *.log
# *.tmp
# .git/
# node_modules/
# __pycache__/

# 4. 只包含特定文件
rsync -avz --include='*.php' --exclude='*' /source/ /dest/

# 5. 限制带宽(KB/s)
rsync -avz --bwlimit=1000 /source/ user@host:/dest/

# 6. 显示传输详情
rsync -avzP --stats /source/ user@host:/dest/

# 7. 模拟运行(不实际执行)
rsync -avzn --delete /source/ /dest/

# 8. 备份时保留已删除文件
rsync -avz --backup --backup-dir=/backup/old /source/ /dest/

网站部署示例

# 部署前端项目
rsync -avz --delete \
  --exclude='.git' \
  --exclude='node_modules' \
  --exclude='.env' \
  ./dist/ deploy@server:/var/www/html/

# 部署后端项目
rsync -avzP \
  --exclude='*.pyc' \
  --exclude='__pycache__' \
  --exclude='.venv' \
  --exclude='.env' \
  ./app/ deploy@server:/var/www/app/

rsync 与 scp 的对比

特性scprsync
增量传输否是
断点续传否是
压缩传输需要手动内置
排除文件不支持支持
传输效率较低高
同步模式仅复制可镜像

二、文件与目录操作

2.1 ls - 列出目录内容

# 基本用法
ls                  # 列出当前目录
ls /var/log         # 列出指定目录
ls file1 file2      # 列出指定文件

# 常用选项
ls -l               # 详细信息(长格式)
ls -a               # 显示隐藏文件(以 . 开头)
ls -la              # 详细 + 隐藏
ls -lh              # 人类可读的文件大小
ls -lt              # 按时间排序(最新在前)
ls -ltr             # 按时间逆序(最旧在前)
ls -lS              # 按大小排序(最大在前)
ls -R               # 递归显示子目录
ls -d */            # 只显示目录
ls -1               # 每行一个文件
ls -i               # 显示 inode 号
ls --color=auto     # 彩色显示

# 实用组合
ls -lah             # 最常用:详细、隐藏、人类可读
ls -lahtr           # 按时间倒序,最新的在最后

ls -l 输出解读

-rw-r--r-- 1 root root 4096 Jan 20 10:30 file.txt
│├──┬──┤  │  │    │    │          │        │
│   │     │  │    │    │          │        └─ 文件名
│   │     │  │    │    │          └─ 修改时间
│   │     │  │    │    └─ 文件大小
│   │     │  │    └─ 所属组
│   │     │  └─ 所有者
│   │     └─ 硬链接数
│   └─ 权限(所有者-组-其他)
└─ 类型(- 文件,d 目录,l 链接)

2.2 cd - 切换目录

cd /var/log         # 切换到指定目录
cd                  # 回到家目录
cd ~                # 回到家目录
cd -                # 回到上一个目录
cd ..               # 上一级目录
cd ../..            # 上两级目录
cd ~user            # 切换到某用户的家目录

2.3 pwd - 显示当前目录

pwd                 # 显示当前工作目录
pwd -P              # 显示真实路径(解析符号链接)

2.4 mkdir - 创建目录

mkdir newdir                    # 创建目录
mkdir -p parent/child/grandchild  # 递归创建(父目录不存在时自动创建)
mkdir -m 755 newdir             # 创建并设置权限
mkdir dir1 dir2 dir3            # 同时创建多个目录
mkdir -p project/{src,test,docs}  # 同时创建多个子目录

2.5 rmdir - 删除空目录

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

2.6 cp - 复制文件和目录

# 复制文件
cp source.txt dest.txt          # 复制并重命名
cp source.txt /dest/path/       # 复制到目录
cp file1 file2 file3 /dest/     # 复制多个文件

# 复制目录
cp -r sourcedir destdir         # 递归复制目录
cp -a sourcedir destdir         # 保留所有属性(归档模式)

# 常用选项
cp -i source dest               # 覆盖前提示
cp -n source dest               # 不覆盖已存在的文件
cp -u source dest               # 只在源文件更新时复制
cp -v source dest               # 显示复制过程
cp -p source dest               # 保留权限和时间戳
cp -l source dest               # 创建硬链接而非复制
cp -s source dest               # 创建符号链接而非复制

# 实用组合
cp -av /source/ /dest/          # 归档复制,显示过程
cp -rp /source/ /dest/          # 递归复制,保留属性

2.7 mv - 移动/重命名

# 重命名
mv oldname.txt newname.txt

# 移动
mv file.txt /dest/path/
mv file1 file2 file3 /dest/
mv dir1 /dest/

# 选项
mv -i source dest       # 覆盖前提示
mv -n source dest       # 不覆盖
mv -u source dest       # 只在源更新时移动
mv -v source dest       # 显示过程

# 批量重命名(需要 rename 命令)
rename 's/\.txt$/.md/' *.txt    # 把 .txt 改为 .md
rename 's/^/prefix_/' *         # 添加前缀

2.8 rm - 删除文件和目录

# 删除文件
rm file.txt
rm file1 file2 file3
rm *.log                # 删除所有 .log 文件

# 删除目录
rm -r directory         # 递归删除
rm -rf directory        # 强制递归删除(危险!)

# 选项
rm -i file              # 删除前提示
rm -f file              # 强制删除,不提示
rm -v file              # 显示删除过程

# 安全删除习惯
rm -i important.txt     # 重要文件前加 -i
ls *.log && rm *.log    # 先看看要删什么

警告:rm -rf / 或 rm -rf * 可能导致灾难性后果!

安全建议:

# 1. 使用 trash-cli 代替 rm
sudo apt install trash-cli
trash file.txt              # 移到回收站
trash-list                  # 列出回收站
trash-restore              # 恢复文件
trash-empty                # 清空回收站

# 2. 设置别名
alias rm='rm -i'           # 总是提示

2.9 touch - 创建空文件/更新时间戳

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

# 更新时间戳
touch existingfile.txt      # 更新访问和修改时间为当前
touch -a file.txt           # 只更新访问时间
touch -m file.txt           # 只更新修改时间
touch -t 202501201030 file  # 设置特定时间(YYYYMMDDhhmm)
touch -r ref.txt file.txt   # 使用参考文件的时间戳

2.10 find - 查找文件

find 是最强大的文件查找工具,一定要掌握!

# 基本语法
find [路径] [条件] [动作]

# 按名称查找
find /var -name "*.log"              # 按名称(区分大小写)
find /var -iname "*.LOG"             # 不区分大小写
find . -name "config*"               # 以 config 开头

# 按类型查找
find . -type f                       # 文件
find . -type d                       # 目录
find . -type l                       # 符号链接

# 按大小查找
find . -size +100M                   # 大于 100MB
find . -size -1k                     # 小于 1KB
find . -size 50M                     # 正好 50MB
find . -empty                        # 空文件或空目录

# 按时间查找
find . -mtime -7                     # 7天内修改过
find . -mtime +30                    # 30天前修改过
find . -mmin -60                     # 60分钟内修改过
find . -newer reference.txt          # 比某文件新

# 按权限查找
find . -perm 755                     # 权限为 755
find . -perm -755                    # 至少包含 755 权限
find . -perm /u+x                    # 用户可执行

# 按所有者查找
find . -user root                    # 属于 root
find . -group www-data               # 属于 www-data 组
find . -nouser                       # 无所有者的文件

# 组合条件
find . -name "*.txt" -size +1M       # AND(默认)
find . -name "*.txt" -o -name "*.md" # OR
find . ! -name "*.txt"               # NOT

# 限制深度
find . -maxdepth 2 -name "*.txt"     # 最多向下2层
find . -mindepth 2 -name "*.txt"     # 至少向下2层

# 执行动作
find . -name "*.tmp" -delete         # 删除找到的文件
find . -name "*.sh" -exec chmod +x {} \;   # 对每个文件执行命令
find . -name "*.log" -exec ls -lh {} \;    # 显示详情
find . -name "*.txt" -exec grep "error" {} \;  # 搜索内容

# 使用 xargs(更高效)
find . -name "*.txt" | xargs grep "error"
find . -name "*.tmp" | xargs rm
find . -type f -name "*.py" | xargs wc -l  # 统计代码行数

实用示例

# 1. 查找并删除30天前的日志
find /var/log -name "*.log" -mtime +30 -delete

# 2. 查找大文件
find / -type f -size +500M 2>/dev/null

# 3. 查找空目录并删除
find . -type d -empty -delete

# 4. 查找最近修改的文件
find . -type f -mmin -30

# 5. 查找并压缩旧日志
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;

# 6. 查找特定内容的文件
find . -type f -name "*.py" -exec grep -l "import pandas" {} \;

# 7. 统计目录下文件数量
find . -type f | wc -l

# 8. 查找重复文件(按大小)
find . -type f -exec md5sum {} \; | sort | uniq -d -w 32

# 9. 按扩展名统计文件数
find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn

2.11 ln - 创建链接

# 创建硬链接
ln source.txt hardlink.txt

# 创建符号链接(软链接)
ln -s source.txt symlink.txt
ln -s /var/log/nginx logs     # 创建目录链接

# 强制覆盖已存在的链接
ln -sf newsource.txt symlink.txt

# 查看链接指向
ls -la symlink.txt
readlink symlink.txt
readlink -f symlink.txt       # 显示完整路径

硬链接 vs 软链接

特性硬链接软链接
跨文件系统不可以可以
链接目录不可以可以
原文件删除仍可访问链接失效
inode相同不同
文件大小与原文件相同只存储路径

2.12 tree - 树状显示目录结构

# 安装
sudo apt install tree    # Debian/Ubuntu
sudo yum install tree    # CentOS

# 基本用法
tree                     # 当前目录
tree /var/www            # 指定目录

# 常用选项
tree -L 2                # 限制深度为2层
tree -d                  # 只显示目录
tree -a                  # 显示隐藏文件
tree -h                  # 显示文件大小
tree -p                  # 显示权限
tree -u                  # 显示所有者
tree -f                  # 显示完整路径
tree -I "node_modules|.git"  # 排除目录
tree --dirsfirst         # 目录排在前面

# 输出到文件
tree > structure.txt
tree -H . > tree.html    # 输出 HTML

2.13 stat - 显示文件详细信息

stat file.txt

# 输出示例:
  File: file.txt
  Size: 1234        Blocks: 8          IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 1234567     Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  user)   Gid: ( 1000/  user)
Access: 2025-01-20 10:30:00.000000000 +0800
Modify: 2025-01-19 15:20:00.000000000 +0800
Change: 2025-01-19 15:20:00.000000000 +0800
 Birth: -

# 格式化输出
stat -c "%s" file.txt       # 只显示大小
stat -c "%a" file.txt       # 只显示权限(数字)
stat -c "%U:%G" file.txt    # 所有者:组

2.14 file - 识别文件类型

file document.pdf           # PDF document
file script.sh              # Bourne-Again shell script
file image.png              # PNG image data
file binary                 # ELF 64-bit LSB executable
file symlink               # symbolic link to ...
file compressed.gz          # gzip compressed data

三、文本处理工具

3.1 cat - 查看文件内容

# 查看文件
cat file.txt
cat file1.txt file2.txt      # 合并显示多个文件

# 常用选项
cat -n file.txt              # 显示行号
cat -b file.txt              # 显示行号(空行不编号)
cat -s file.txt              # 压缩连续空行
cat -A file.txt              # 显示特殊字符

# 创建文件
cat > newfile.txt << EOF
line 1
line 2
EOF

# 追加内容
cat >> file.txt << EOF
appended line
EOF

# 合并文件
cat file1.txt file2.txt > combined.txt

3.2 less/more - 分页查看

# less(更强大,推荐使用)
less file.txt

# less 内部命令
# q        - 退出
# 空格/f   - 下一页
# b        - 上一页
# g        - 跳到开头
# G        - 跳到结尾
# /pattern - 向下搜索
# ?pattern - 向上搜索
# n        - 下一个搜索结果
# N        - 上一个搜索结果
# 数字g    - 跳到指定行

# less 选项
less -N file.txt         # 显示行号
less -S file.txt         # 不换行(长行用左右滚动)
less +F file.txt         # 类似 tail -f,实时追踪
less +/pattern file.txt  # 打开并搜索

# more(简单分页)
more file.txt

3.3 head/tail - 查看文件头部/尾部

# head - 查看开头
head file.txt               # 默认前10行
head -n 20 file.txt         # 前20行
head -n -5 file.txt         # 除了最后5行
head -c 100 file.txt        # 前100字节

# tail - 查看结尾
tail file.txt               # 默认后10行
tail -n 20 file.txt         # 后20行
tail -n +5 file.txt         # 从第5行开始到结尾
tail -c 100 file.txt        # 后100字节

# tail -f 实时追踪(看日志必备!)
tail -f /var/log/nginx/access.log
tail -f /var/log/syslog

# 追踪多个文件
tail -f file1.log file2.log

# 追踪并重试(文件可能被轮转)
tail -F /var/log/nginx/access.log

# 追踪最后100行
tail -n 100 -f app.log

# 组合使用
head -n 100 file.txt | tail -n 10   # 第91-100行

3.4 grep - 文本搜索神器

grep 是日志分析、代码搜索的必备工具!

# 基本用法
grep "pattern" file.txt
grep "error" /var/log/syslog
cat file.txt | grep "pattern"

# 常用选项
grep -i "pattern" file          # 忽略大小写
grep -v "pattern" file          # 反向匹配(不包含)
grep -n "pattern" file          # 显示行号
grep -c "pattern" file          # 只显示匹配行数
grep -l "pattern" *.txt         # 只显示文件名
grep -L "pattern" *.txt         # 显示不包含的文件
grep -w "word" file             # 全词匹配
grep -x "exact line" file       # 整行匹配

grep -r "pattern" /path/        # 递归搜索目录
grep -R "pattern" /path/        # 递归,包含符号链接
grep --include="*.py" -r "pattern" /path/  # 只搜索特定文件

grep -A 3 "pattern" file        # 显示匹配行及后3行
grep -B 3 "pattern" file        # 显示匹配行及前3行
grep -C 3 "pattern" file        # 显示匹配行及前后3行

grep -E "pattern1|pattern2" file  # 扩展正则(或)
grep -e "pattern1" -e "pattern2" file  # 多个模式

grep -o "pattern" file          # 只显示匹配部分
grep -q "pattern" file          # 静默模式(用于脚本)
grep --color=auto "pattern" file  # 高亮显示

正则表达式

# 基本正则
grep "^start" file              # 以 start 开头
grep "end$" file                # 以 end 结尾
grep "^$" file                  # 空行
grep "a.b" file                 # a 和 b 之间有任意字符
grep "a*" file                  # a 出现0次或多次
grep "a\+" file                 # a 出现1次或多次
grep "a\?" file                 # a 出现0次或1次
grep "[abc]" file               # a、b 或 c
grep "[0-9]" file               # 数字
grep "[a-zA-Z]" file            # 字母

# 扩展正则(-E 或使用 egrep)
grep -E "a+" file               # a 出现1次或多次
grep -E "a?" file               # a 出现0次或1次
grep -E "a{3}" file             # a 正好出现3次
grep -E "a{2,5}" file           # a 出现2-5次
grep -E "(ab)+" file            # ab 出现1次或多次
grep -E "cat|dog" file          # cat 或 dog

实用示例

# 1. 搜索日志中的错误
grep -i "error\|fail\|exception" /var/log/app.log

# 2. 搜索并显示上下文
grep -C 5 "NullPointerException" app.log

# 3. 统计错误数量
grep -c "ERROR" app.log

# 4. 排除注释行
grep -v "^#" config.conf | grep -v "^$"

# 5. 搜索 IP 地址
grep -E "\b[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\b" access.log

# 6. 搜索代码中的 TODO
grep -rn "TODO" --include="*.py" .

# 7. 查找包含特定函数的文件
grep -l "def main" *.py

# 8. 查找不包含某关键字的文件
grep -L "deprecated" *.py

# 9. 实时搜索日志
tail -f app.log | grep --line-buffered "ERROR"

# 10. 搜索二进制文件
grep -a "string" binary_file

3.5 sed - 流编辑器

sed 用于文本替换、删除、插入等操作,特别适合批量处理。

# 基本语法
sed [选项] '命令' 文件

# 替换(最常用)
sed 's/old/new/' file           # 替换每行第一个匹配
sed 's/old/new/g' file          # 替换所有匹配
sed 's/old/new/gi' file         # 忽略大小写
sed 's/old/new/2' file          # 替换第2个匹配

# 直接修改文件
sed -i 's/old/new/g' file       # 直接修改文件
sed -i.bak 's/old/new/g' file   # 修改并备份原文件

# 删除
sed '/pattern/d' file           # 删除包含 pattern 的行
sed '3d' file                   # 删除第3行
sed '2,5d' file                 # 删除第2-5行
sed '1d;$d' file                # 删除首尾行
sed '/^$/d' file                # 删除空行
sed '/^#/d' file                # 删除注释行

# 打印
sed -n '5p' file                # 只打印第5行
sed -n '2,5p' file              # 打印第2-5行
sed -n '/pattern/p' file        # 打印匹配行

# 插入和追加
sed '3i\new line' file          # 在第3行前插入
sed '3a\new line' file          # 在第3行后追加
sed '/pattern/i\new line' file  # 在匹配行前插入

# 替换整行
sed '3c\new content' file       # 替换第3行
sed '/pattern/c\new line' file  # 替换匹配行

# 多个命令
sed -e 's/a/A/g' -e 's/b/B/g' file
sed 's/a/A/g; s/b/B/g' file

分隔符

当要替换的内容包含 / 时,可以用其他分隔符:

sed 's|/usr/local|/opt|g' file
sed 's#http://#https://#g' file
sed 's@old@new@g' file

实用示例

# 1. 批量修改配置文件
sed -i 's/localhost/192.168.1.100/g' config.yaml

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

# 3. 在每行开头添加内容
sed 's/^/prefix: /' file

# 4. 在每行结尾添加内容
sed 's/$/ # comment/' file

# 5. 只处理特定行
sed '10,20s/old/new/g' file       # 第10-20行
sed '/start/,/end/s/old/new/g' file  # 从 start 到 end 之间

# 6. 提取特定字段
echo "name=value" | sed 's/.*=//'   # 提取 value

# 7. 添加行号
sed = file | sed 'N; s/\n/\t/'

# 8. 批量重命名文件中的内容
find . -name "*.txt" -exec sed -i 's/foo/bar/g' {} \;

# 9. 去除 Windows 换行符
sed -i 's/\r$//' file

# 10. 提取两个标记之间的内容
sed -n '/START/,/END/p' file

3.6 awk - 文本处理语言

awk 是一个强大的文本处理工具,特别擅长处理列式数据。

# 基本语法
awk 'pattern { action }' file

# 打印特定列
awk '{print $1}' file           # 第1列
awk '{print $1, $3}' file       # 第1和第3列
awk '{print $NF}' file          # 最后一列
awk '{print $(NF-1)}' file      # 倒数第2列

# 指定分隔符
awk -F: '{print $1}' /etc/passwd          # 冒号分隔
awk -F',' '{print $1}' file.csv           # 逗号分隔
awk -F'\t' '{print $1}' file.tsv          # Tab 分隔

# 条件过滤
awk '$3 > 100' file             # 第3列大于100
awk '$1 == "error"' file        # 第1列等于 error
awk 'NR > 1' file               # 跳过首行
awk 'NR >= 10 && NR <= 20' file # 第10-20行
awk '/pattern/' file            # 包含 pattern 的行
awk '!/pattern/' file           # 不包含 pattern 的行

# 内置变量
# NR - 当前行号
# NF - 当前行的列数
# $0 - 整行内容
# $1, $2... - 第1、2...列
# FS - 输入字段分隔符
# OFS - 输出字段分隔符
# RS - 输入记录分隔符
# ORS - 输出记录分隔符

# 格式化输出
awk '{printf "%-10s %5d\n", $1, $2}' file

# BEGIN 和 END
awk 'BEGIN {print "Header"} {print} END {print "Footer"}' file
awk 'BEGIN {sum=0} {sum+=$1} END {print sum}' file    # 求和
awk '{sum+=$1; count++} END {print sum/count}' file   # 平均值

# 数组
awk '{count[$1]++} END {for(k in count) print k, count[k]}' file

实用示例

# 1. 分析 Apache 访问日志
# 统计每个 IP 的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

# 2. 统计每个 HTTP 状态码
awk '{print $9}' access.log | sort | uniq -c

# 3. 显示 /etc/passwd 的用户名和 shell
awk -F: '{print $1, $7}' /etc/passwd

# 4. 计算文件大小总和
ls -l | awk '{sum+=$5} END {print sum}'

# 5. 格式化输出(类似表格)
awk -F: 'BEGIN {printf "%-15s %-10s\n", "User", "Shell"}
         {printf "%-15s %-10s\n", $1, $7}' /etc/passwd

# 6. 查找 UID 大于1000的用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

# 7. 统计日志中的错误数
awk '/ERROR/ {count++} END {print count}' app.log

# 8. 提取时间范围内的日志
awk '$4 >= "[01/Jan/2025:10:00:00" && $4 <= "[01/Jan/2025:11:00:00"' access.log

# 9. 计算响应时间平均值
awk '{sum+=$NF; count++} END {print sum/count}' response_times.log

# 10. 分析内存使用(从 free 输出)
free -m | awk 'NR==2 {printf "Used: %.2f%%\n", $3/$2*100}'

3.7 cut - 提取列

# 按字符位置
cut -c1-5 file              # 每行的第1-5个字符
cut -c1,3,5 file            # 第1、3、5个字符
cut -c5- file               # 从第5个字符到结尾

# 按字段(列)
cut -d: -f1 /etc/passwd     # 按冒号分隔,取第1列
cut -d, -f1,3 file.csv      # 按逗号分隔,取第1和第3列
cut -d' ' -f2- file         # 从第2列到最后

# 常用选项
cut -d: -f1 --output-delimiter=' ' file  # 指定输出分隔符
cut -d: -f1 --complement file            # 取反(除了指定的列)

3.8 sort - 排序

# 基本排序
sort file                   # 字母顺序
sort -r file                # 逆序
sort -n file                # 数字顺序
sort -h file                # 人类可读数字(1K, 2M)
sort -u file                # 排序并去重

# 按指定列排序
sort -k2 file               # 按第2列
sort -k2,2 file             # 只按第2列
sort -k2n file              # 第2列按数字排序
sort -t: -k3 -n /etc/passwd # 指定分隔符,按第3列数字排序

# 多列排序
sort -k1,1 -k2,2n file      # 先按第1列字母,再按第2列数字

# 其他选项
sort -f file                # 忽略大小写
sort -M file                # 按月份排序(Jan, Feb...)
sort -V file                # 版本号排序(1.2.3)
sort -R file                # 随机排序
sort -c file                # 检查是否已排序
sort -o output.txt file     # 输出到文件(可与输入相同)

3.9 uniq - 去除重复行

# 注意:uniq 只能去除相邻的重复行,通常与 sort 配合使用
sort file | uniq

# 常用选项
sort file | uniq -c         # 统计每行出现次数
sort file | uniq -d         # 只显示重复的行
sort file | uniq -u         # 只显示不重复的行
sort file | uniq -i         # 忽略大小写

# 按字段去重
sort -k1,1 file | uniq -f1  # 忽略第1个字段

3.10 wc - 统计

wc file                     # 行数 词数 字节数
wc -l file                  # 行数
wc -w file                  # 词数
wc -c file                  # 字节数
wc -m file                  # 字符数
wc -L file                  # 最长行的长度

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

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

3.11 tr - 字符转换

# 大小写转换
echo "Hello" | tr 'a-z' 'A-Z'       # 转大写
echo "HELLO" | tr 'A-Z' 'a-z'       # 转小写
echo "Hello" | tr '[:lower:]' '[:upper:]'

# 删除字符
echo "hello 123" | tr -d '0-9'      # 删除数字
echo "hello   world" | tr -s ' '    # 压缩连续空格

# 替换字符
echo "hello" | tr 'e' 'a'           # e 换成 a
cat file | tr '\n' ' '              # 换行换成空格

# 删除 Windows 换行符
cat file | tr -d '\r'

3.12 diff - 比较文件

# 基本用法
diff file1 file2
diff -u file1 file2         # 统一格式(最常用)
diff -c file1 file2         # 上下文格式

# 选项
diff -i file1 file2         # 忽略大小写
diff -w file1 file2         # 忽略空白字符
diff -B file1 file2         # 忽略空行
diff -r dir1 dir2           # 比较目录

# 并排显示
diff -y file1 file2
diff -y --suppress-common-lines file1 file2

# 简短输出
diff -q file1 file2         # 只显示是否不同

# 生成补丁
diff -u old.txt new.txt > patch.diff

# 应用补丁
patch < patch.diff
patch -R < patch.diff       # 反向应用

四、包管理工具

4.1 apt/apt-get (Debian/Ubuntu)

是什么?

apt 是 Debian 系统(包括 Ubuntu)的包管理工具,用于安装、更新、删除软件。

# 更新包列表
sudo apt update

# 升级所有包
sudo apt upgrade
sudo apt full-upgrade       # 完整升级(可能删除包)

# 安装软件
sudo apt install nginx
sudo apt install nginx=1.18.0-0ubuntu1   # 指定版本
sudo apt install ./package.deb           # 安装本地 deb 文件
sudo apt install -y nginx                # 自动确认

# 删除软件
sudo apt remove nginx       # 删除软件,保留配置
sudo apt purge nginx        # 完全删除,包括配置
sudo apt autoremove         # 删除不需要的依赖

# 搜索软件
apt search nginx
apt-cache search nginx

# 查看软件信息
apt show nginx
apt-cache show nginx

# 列出已安装的包
apt list --installed
apt list --installed | grep nginx

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

# 查看包的依赖
apt depends nginx
apt rdepends nginx          # 反向依赖

# 锁定包版本(防止升级)
sudo apt-mark hold nginx
sudo apt-mark unhold nginx
apt-mark showhold

# 清理缓存
sudo apt clean              # 清除下载的包文件
sudo apt autoclean          # 只清除过期的包

软件源配置

# 查看源配置
cat /etc/apt/sources.list
ls /etc/apt/sources.list.d/

# 添加 PPA 源
sudo add-apt-repository ppa:ondrej/php
sudo apt update

# 添加第三方源
curl -fsSL https://example.com/key.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/example.gpg
echo "deb [signed-by=/etc/apt/keyrings/example.gpg] https://example.com/repo stable main" | sudo tee /etc/apt/sources.list.d/example.list
sudo apt update

4.2 yum/dnf (CentOS/RHEL/Fedora)

yum (CentOS 7 及更早)

# 更新包列表
sudo yum check-update

# 升级所有包
sudo yum update

# 安装软件
sudo yum install nginx
sudo yum install -y nginx           # 自动确认
sudo yum localinstall package.rpm   # 安装本地 rpm

# 删除软件
sudo yum remove nginx

# 搜索软件
yum search nginx

# 查看信息
yum info nginx

# 列出已安装
yum list installed
yum list installed | grep nginx

# 查看可用
yum list available

# 查看历史
yum history
yum history info 3          # 查看第3次事务详情
yum history undo 3          # 撤销第3次事务

# 清理缓存
sudo yum clean all
sudo yum makecache

# 查看仓库
yum repolist
yum repolist all            # 包括禁用的

dnf (CentOS 8+, Fedora)

dnf 是 yum 的下一代版本,命令基本兼容:

# 基本用法与 yum 相同
sudo dnf update
sudo dnf install nginx
sudo dnf remove nginx
dnf search nginx
dnf info nginx

# dnf 特有功能
dnf module list             # 查看模块
dnf module install nodejs:14
dnf module reset nodejs

仓库配置

# 仓库配置目录
ls /etc/yum.repos.d/

# 添加 EPEL 仓库(额外软件包)
sudo yum install epel-release

# 手动添加仓库
cat > /etc/yum.repos.d/custom.repo << EOF
[custom]
name=Custom Repository
baseurl=https://example.com/repo/
enabled=1
gpgcheck=1
gpgkey=https://example.com/RPM-GPG-KEY
EOF

# 禁用仓库
sudo yum-config-manager --disable custom

4.3 snap

是什么?

Snap 是 Canonical(Ubuntu 母公司)开发的通用包管理系统。Snap 包是自包含的,包含了应用运行所需的所有依赖,可以在任何支持 Snap 的 Linux 发行版上运行。

优缺点

优点:

  • 跨发行版兼容
  • 自动更新
  • 沙箱隔离,更安全
  • 版本回滚方便

缺点:

  • 包体积较大
  • 启动速度稍慢
  • 占用更多磁盘空间
  • 某些系统集成可能有问题
# 安装 snapd(Ubuntu 自带)
sudo apt install snapd

# 搜索应用
snap find nginx
snap find --name=nginx

# 安装应用
sudo snap install vlc
sudo snap install code --classic     # 经典模式(更多系统权限)

# 查看已安装
snap list

# 查看应用信息
snap info vlc

# 更新应用
sudo snap refresh vlc
sudo snap refresh               # 更新所有

# 删除应用
sudo snap remove vlc

# 回滚版本
sudo snap revert vlc

# 切换通道
sudo snap refresh vlc --channel=stable
sudo snap refresh vlc --channel=beta

# 查看变更历史
snap changes
snap change 3                   # 查看第3次变更详情

# 管理服务
sudo snap services
sudo snap start <app>.<service>
sudo snap stop <app>.<service>

# 配置应用
snap get vlc
snap set vlc key=value

# 连接/断开接口
snap connections vlc
sudo snap connect vlc:removable-media
sudo snap disconnect vlc:removable-media

# 列出所有接口
snap interfaces

常用 Snap 应用

# 开发工具
sudo snap install code --classic        # VS Code
sudo snap install sublime-text --classic
sudo snap install postman

# 容器工具
sudo snap install docker
sudo snap install lxd

# 多媒体
sudo snap install vlc
sudo snap install spotify

# 办公
sudo snap install libreoffice

# 通讯
sudo snap install slack
sudo snap install discord

4.4 flatpak

是什么?

Flatpak 是另一种通用包格式,与 Snap 类似但更注重桌面应用。

# 安装 flatpak
sudo apt install flatpak

# 添加 Flathub 仓库
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# 搜索应用
flatpak search gimp

# 安装应用
flatpak install flathub org.gimp.GIMP

# 运行应用
flatpak run org.gimp.GIMP

# 更新应用
flatpak update

# 列出已安装
flatpak list

# 删除应用
flatpak uninstall org.gimp.GIMP

# 清理无用数据
flatpak uninstall --unused

4.5 brew (Homebrew)

是什么?

Homebrew 是 macOS 上最流行的包管理器,也可以在 Linux 上使用(Linuxbrew)。

# 安装 Homebrew (macOS)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 安装 Homebrew (Linux)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# 更新 Homebrew
brew update

# 搜索软件
brew search nginx

# 安装软件
brew install nginx
brew install --cask google-chrome    # 安装 GUI 应用(macOS)

# 升级软件
brew upgrade nginx
brew upgrade                # 升级所有

# 删除软件
brew uninstall nginx

# 查看信息
brew info nginx

# 列出已安装
brew list
brew list --cask            # 列出 GUI 应用

# 清理旧版本
brew cleanup

# 检查问题
brew doctor

# 服务管理
brew services list
brew services start nginx
brew services stop nginx
brew services restart nginx

4.6 rpm

rpm 是 Red Hat 系列系统的底层包管理工具:

# 安装
sudo rpm -ivh package.rpm       # 安装
sudo rpm -Uvh package.rpm       # 升级
sudo rpm -Fvh package.rpm       # 只升级已安装的

# 删除
sudo rpm -e package

# 查询
rpm -qa                         # 列出所有已安装
rpm -qa | grep nginx
rpm -qi nginx                   # 查看包信息
rpm -ql nginx                   # 列出包的文件
rpm -qf /usr/bin/nginx          # 查询文件属于哪个包
rpm -qp package.rpm             # 查询未安装的包

# 验证
rpm -V nginx                    # 验证包完整性

# 提取文件
rpm2cpio package.rpm | cpio -idmv

4.7 dpkg

dpkg 是 Debian 系统的底层包管理工具:

# 安装
sudo dpkg -i package.deb

# 删除
sudo dpkg -r package            # 删除软件
sudo dpkg -P package            # 完全删除(含配置)

# 查询
dpkg -l                         # 列出所有包
dpkg -l | grep nginx
dpkg -s nginx                   # 查看包状态
dpkg -L nginx                   # 列出包的文件
dpkg -S /usr/bin/nginx          # 查询文件属于哪个包

# 配置
sudo dpkg-reconfigure package   # 重新配置包

# 修复依赖
sudo apt install -f

五、进程管理

5.1 ps - 查看进程

# 常用格式
ps aux                      # 显示所有进程
ps -ef                      # 另一种格式
ps -ejH                     # 树状显示

# 按用户查看
ps -u root                  # root 用户的进程
ps -U nginx                 # nginx 用户的进程

# 按进程名查看
ps -C nginx                 # 名为 nginx 的进程

# 自定义输出列
ps -eo pid,user,%cpu,%mem,cmd
ps -eo pid,ppid,user,args --forest   # 树状 + 指定列

# 排序
ps aux --sort=-%cpu         # 按 CPU 降序
ps aux --sort=-%mem         # 按内存降序
ps aux --sort=-rss          # 按实际内存降序

# 实用组合
ps aux | grep nginx                  # 查找 nginx 进程
ps aux | grep [n]ginx                # 不显示 grep 自身
ps aux | head -1; ps aux | grep nginx   # 带表头

ps 输出解读

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.1 169856 12160 ?        Ss   Jan20   0:03 /sbin/init
│           │    │    │     │     │   │         │     │      │     │
│           │    │    │     │     │   │         │     │      │     └─ 命令
│           │    │    │     │     │   │         │     │      └─ CPU 时间
│           │    │    │     │     │   │         │     └─ 启动时间
│           │    │    │     │     │   │         └─ 状态
│           │    │    │     │     │   └─ 终端
│           │    │    │     │     └─ 实际内存 (KB)
│           │    │    │     └─ 虚拟内存 (KB)
│           │    │    └─ 内存占比
│           │    └─ CPU 占比
│           └─ 进程 ID
└─ 用户

进程状态(STAT):

  • R - 运行中
  • S - 可中断睡眠
  • D - 不可中断睡眠(通常是 I/O)
  • T - 已停止
  • Z - 僵尸进程
  • < - 高优先级
  • N - 低优先级
  • s - 会话首进程
  • + - 前台进程

5.2 top - 动态进程监控

top

# 交互命令
# q - 退出
# h - 帮助
# 空格 - 立即刷新
# k - 杀死进程
# r - 调整优先级
# u - 按用户过滤
# M - 按内存排序
# P - 按 CPU 排序
# c - 显示完整命令
# 1 - 显示每个 CPU
# H - 显示线程

# 命令行选项
top -d 1                    # 刷新间隔 1 秒
top -p 1234                 # 只显示特定 PID
top -p 1234,5678            # 多个 PID
top -u nginx                # 只显示特定用户
top -b                      # 批处理模式(脚本用)
top -b -n 1                 # 批处理,只输出一次

5.3 htop - 增强版 top

# 安装
sudo apt install htop
sudo yum install htop

# 运行
htop

# 快捷键
# F1 - 帮助
# F2 - 设置
# F3 - 搜索
# F4 - 过滤
# F5 - 树状视图
# F6 - 排序
# F9 - 杀死进程
# F10 - 退出

# 命令行选项
htop -u root                # 只显示 root 用户
htop -p 1234,5678           # 指定 PID
htop -d 10                  # 刷新间隔 1 秒
htop -t                     # 树状视图

htop 比 top 更直观:

  • 彩色显示
  • 支持鼠标操作
  • 进程树视图
  • 横向滚动查看完整命令
  • 更方便的进程操作

5.4 kill/pkill/killall - 终止进程

# kill - 按 PID 终止
kill 1234                   # 发送 SIGTERM (15)
kill -9 1234                # 发送 SIGKILL (9),强制终止
kill -HUP 1234              # 发送 SIGHUP (1),重载配置
kill -l                     # 列出所有信号

# 常用信号
# SIGTERM (15) - 优雅终止,程序可以清理资源
# SIGKILL (9)  - 强制终止,无法捕获
# SIGHUP (1)   - 挂起,常用于重载配置
# SIGSTOP (19) - 暂停进程
# SIGCONT (18) - 继续运行

# pkill - 按名称终止
pkill nginx                 # 终止所有名为 nginx 的进程
pkill -9 nginx              # 强制终止
pkill -u root               # 终止 root 用户的所有进程
pkill -f "python app.py"    # 按命令行匹配

# killall - 按名称终止(需要完整名称)
killall nginx
killall -9 nginx
killall -u root nginx       # 特定用户的进程
killall -i nginx            # 交互确认

# 批量终止
pkill -f "node.*server"     # 正则匹配
kill $(pgrep nginx)         # 使用 pgrep 获取 PID

5.5 pgrep - 查找进程 ID

pgrep nginx                 # 输出 nginx 的 PID
pgrep -l nginx              # 输出 PID 和名称
pgrep -a nginx              # 输出 PID 和完整命令
pgrep -u root               # 特定用户的进程
pgrep -f "python app.py"    # 按命令行匹配
pgrep -c nginx              # 统计匹配的进程数
pgrep -P 1234               # 父进程为 1234 的进程

5.6 nohup - 后台运行(不挂断)

# nohup 让程序在终端关闭后继续运行
nohup ./script.sh &
nohup python app.py &

# 输出重定向
nohup ./script.sh > output.log 2>&1 &
nohup ./script.sh > /dev/null 2>&1 &   # 忽略输出

# 查看 nohup.out
tail -f nohup.out

5.7 screen/tmux - 终端复用

screen

# 安装
sudo apt install screen

# 创建会话
screen                      # 创建匿名会话
screen -S myname            # 创建命名会话

# 快捷键(Ctrl+A 后按)
# d - 分离会话
# c - 创建新窗口
# n - 下一个窗口
# p - 上一个窗口
# k - 关闭当前窗口
# " - 窗口列表

# 管理会话
screen -ls                  # 列出会话
screen -r                   # 重新连接
screen -r myname            # 连接指定会话
screen -d -r myname         # 强制接管会话
screen -X -S myname quit    # 关闭会话

tmux

# 安装
sudo apt install tmux

# 创建会话
tmux                        # 创建匿名会话
tmux new -s myname          # 创建命名会话

# 快捷键(Ctrl+B 后按)
# d - 分离会话
# c - 创建新窗口
# n - 下一个窗口
# p - 上一个窗口
# x - 关闭当前面板
# % - 左右分屏
# " - 上下分屏
# 方向键 - 切换面板

# 管理会话
tmux ls                     # 列出会话
tmux a                      # 连接最近会话
tmux a -t myname            # 连接指定会话
tmux kill-session -t myname # 关闭会话

5.8 jobs/fg/bg - 作业控制

# 后台运行
./script.sh &               # 直接后台运行
Ctrl+Z                      # 暂停当前程序

# 查看作业
jobs                        # 列出当前 shell 的作业
jobs -l                     # 显示 PID

# 前台/后台切换
fg                          # 将最近的作业调到前台
fg %1                       # 将作业1调到前台
bg                          # 让最近暂停的作业在后台继续
bg %1                       # 让作业1在后台继续

# 结合 disown
./script.sh &
disown                      # 与终端脱离关系
disown %1                   # 指定作业
disown -h %1                # 保持作业但忽略 SIGHUP

六、用户与权限管理

6.1 sudo - 以管理员身份执行

# 基本用法
sudo command                # 以 root 执行
sudo -u user command        # 以其他用户执行
sudo -i                     # 切换到 root shell
sudo -s                     # 以 root 启动 shell
sudo su -                   # 切换到 root(另一种方式)

# 编辑 sudoers
sudo visudo                 # 安全编辑 sudoers 文件

# sudoers 配置示例
# /etc/sudoers 或 /etc/sudoers.d/username
# 格式:用户 主机=(可切换用户) 命令

root    ALL=(ALL:ALL) ALL                    # root 可执行所有
%sudo   ALL=(ALL:ALL) ALL                    # sudo 组可执行所有
deploy  ALL=(ALL) NOPASSWD: ALL              # deploy 无密码执行所有
deploy  ALL=(ALL) NOPASSWD: /bin/systemctl   # 只能无密码执行 systemctl

6.2 su - 切换用户

su                          # 切换到 root
su -                        # 切换到 root 并加载环境
su username                 # 切换到指定用户
su - username               # 切换并加载环境
su -c "command" username    # 以指定用户执行命令

6.3 chmod - 修改权限

# 数字模式(推荐)
chmod 755 file              # rwxr-xr-x
chmod 644 file              # rw-r--r--
chmod 600 file              # rw-------
chmod 700 directory         # rwx------

# 权限数字计算
# r = 4, w = 2, x = 1
# 755 = rwx(7) r-x(5) r-x(5)
# 644 = rw-(6) r--(4) r--(4)

# 符号模式
chmod u+x file              # 用户添加执行权限
chmod g-w file              # 组去掉写权限
chmod o=r file              # 其他人只读
chmod a+x file              # 所有人添加执行权限
chmod u=rwx,g=rx,o=rx file  # 完整设置

# 递归修改
chmod -R 755 directory

# 常用场景
chmod 600 ~/.ssh/id_rsa     # SSH 私钥
chmod 755 script.sh         # 可执行脚本
chmod 644 config.yaml       # 配置文件

6.4 chown - 修改所有者

# 修改所有者
chown user file
chown user:group file       # 同时修改组
chown :group file           # 只修改组

# 递归修改
chown -R user:group directory

# 常用场景
chown www-data:www-data /var/www
chown -R deploy:deploy /home/deploy/app

6.5 用户管理命令

# 查看用户信息
whoami                      # 当前用户名
id                          # 当前用户的 UID、GID
id username                 # 指定用户的信息
users                       # 当前登录的用户
who                         # 登录用户详情
w                           # 登录用户及其活动
last                        # 登录历史
lastlog                     # 所有用户最后登录

# 创建用户
sudo useradd username
sudo useradd -m username                    # 创建家目录
sudo useradd -m -s /bin/bash username       # 指定 shell
sudo useradd -m -g group -G sudo username   # 指定主组和附加组

# 修改用户
sudo usermod -aG sudo username              # 添加到 sudo 组
sudo usermod -aG docker username            # 添加到 docker 组
sudo usermod -s /bin/bash username          # 修改 shell
sudo usermod -l newname oldname             # 改名
sudo usermod -L username                    # 锁定用户
sudo usermod -U username                    # 解锁用户

# 删除用户
sudo userdel username
sudo userdel -r username                    # 同时删除家目录

# 修改密码
passwd                      # 修改自己的密码
sudo passwd username        # 修改其他用户密码
sudo passwd -l username     # 锁定密码
sudo passwd -u username     # 解锁密码
sudo passwd -e username     # 强制下次登录改密码

6.6 组管理命令

# 查看组
groups                      # 当前用户的组
groups username             # 指定用户的组
cat /etc/group              # 所有组

# 创建组
sudo groupadd mygroup

# 修改组
sudo groupmod -n newname oldname

# 删除组
sudo groupdel mygroup

# 添加用户到组
sudo gpasswd -a username groupname
sudo usermod -aG groupname username

# 从组移除用户
sudo gpasswd -d username groupname

七、网络工具

7.1 curl - HTTP 客户端

curl 是命令行 HTTP 客户端,用于测试 API、下载文件等。

# 基本请求
curl https://api.example.com
curl -v https://api.example.com     # 详细输出

# 下载文件
curl -O https://example.com/file.tar.gz    # 保留原文件名
curl -o myfile.tar.gz https://example.com/file.tar.gz  # 指定文件名
curl -C - -O url                    # 断点续传

# 常用选项
curl -L url                         # 跟随重定向
curl -I url                         # 只获取响应头
curl -s url                         # 静默模式
curl -S url                         # 显示错误
curl -f url                         # 失败时不输出内容

# 设置超时
curl --connect-timeout 10 url       # 连接超时
curl -m 30 url                      # 总超时

# 发送 POST 请求
curl -X POST url
curl -X POST -d "key=value" url
curl -X POST -d '{"name":"test"}' -H "Content-Type: application/json" url

# 发送表单
curl -X POST -F "file=@photo.jpg" url
curl -X POST -F "name=test" -F "file=@document.pdf" url

# 设置 Header
curl -H "Authorization: Bearer token123" url
curl -H "Content-Type: application/json" -H "Accept: application/json" url

# 基本认证
curl -u username:password url
curl -u username url                # 提示输入密码

# 使用 Cookie
curl -b "session=abc123" url
curl -c cookies.txt url             # 保存 cookie
curl -b cookies.txt url             # 使用保存的 cookie

# HTTPS 相关
curl -k url                         # 忽略证书验证
curl --cacert ca.crt url            # 指定 CA 证书
curl --cert client.crt --key client.key url  # 客户端证书

# 代理
curl -x http://proxy:8080 url
curl -x socks5://proxy:1080 url

# 格式化 JSON 输出
curl -s url | jq .

# 测试接口响应时间
curl -w "@curl-format.txt" -o /dev/null -s url

# curl-format.txt 内容:
#     time_namelookup:  %{time_namelookup}\n
#        time_connect:  %{time_connect}\n
#     time_appconnect:  %{time_appconnect}\n
#    time_pretransfer:  %{time_pretransfer}\n
#       time_redirect:  %{time_redirect}\n
#  time_starttransfer:  %{time_starttransfer}\n
#                     ----------\n
#          time_total:  %{time_total}\n

API 测试示例

# GET 请求
curl -s https://api.github.com/users/octocat | jq .

# POST JSON
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"title":"Test","body":"Content"}' \
  https://api.example.com/posts

# PUT 请求
curl -X PUT \
  -H "Content-Type: application/json" \
  -d '{"title":"Updated"}' \
  https://api.example.com/posts/1

# DELETE 请求
curl -X DELETE https://api.example.com/posts/1

# 上传文件
curl -X POST \
  -H "Authorization: Bearer token123" \
  -F "file=@document.pdf" \
  https://api.example.com/upload

7.2 wget - 下载工具

# 基本下载
wget https://example.com/file.tar.gz

# 常用选项
wget -O filename url                # 指定文件名
wget -c url                         # 断点续传
wget -b url                         # 后台下载
wget -q url                         # 静默模式

# 下载限制
wget --limit-rate=1m url            # 限速 1MB/s
wget -t 3 url                       # 重试次数

# 批量下载
wget -i urls.txt                    # 从文件读取 URL
wget -r -np url                     # 递归下载
wget -r -l 2 -np url                # 递归深度 2

# 镜像网站
wget -m -k -p url                   # 镜像网站
# -m: 镜像模式
# -k: 转换链接
# -p: 下载所有资源

# 下载整个目录
wget -r -np -nH --cut-dirs=2 url/path/

# FTP 下载
wget ftp://user:pass@ftp.example.com/file
wget --ftp-user=user --ftp-password=pass ftp://...

# 使用代理
wget -e use_proxy=yes -e http_proxy=proxy:8080 url

7.3 ping - 测试网络连通性

ping google.com
ping -c 4 google.com            # 只 ping 4 次
ping -i 2 google.com            # 间隔 2 秒
ping -s 1000 google.com         # 发送 1000 字节
ping -W 5 google.com            # 超时 5 秒
ping -4 google.com              # 强制 IPv4
ping -6 google.com              # 强制 IPv6

7.4 traceroute/tracepath - 路由追踪

# traceroute
traceroute google.com
traceroute -n google.com        # 不解析域名
traceroute -I google.com        # 使用 ICMP

# tracepath(不需要 root)
tracepath google.com

7.5 netstat - 网络连接状态

# 查看监听端口
netstat -tlnp                   # TCP 监听
netstat -ulnp                   # UDP 监听
netstat -tunlp                  # 所有监听

# 选项说明
# -t: TCP
# -u: UDP
# -l: 监听状态
# -n: 数字显示(不解析域名)
# -p: 显示进程信息(需要 root)

# 查看所有连接
netstat -an
netstat -ant                    # TCP 连接
netstat -anp                    # 带进程信息

# 查看特定端口
netstat -anp | grep :80
netstat -anp | grep nginx

# 统计连接状态
netstat -ant | awk '{print $6}' | sort | uniq -c | sort -rn

# 查看路由表
netstat -r
netstat -rn

# 查看网络接口统计
netstat -i

7.6 ss - netstat 的替代品

ss 是 netstat 的现代替代品,速度更快。

# 查看监听端口
ss -tlnp                        # TCP 监听
ss -ulnp                        # UDP 监听
ss -tunlp                       # 所有监听

# 查看所有连接
ss -tan                         # TCP 连接
ss -tan | grep ESTAB            # 已建立的连接

# 按状态过滤
ss -t state established
ss -t state time-wait
ss -t state close-wait

# 按端口过滤
ss -tlnp sport = :80
ss -tlnp dport = :443

# 统计
ss -s

# 显示更多信息
ss -tiepm                       # 显示计时器、扩展信息、进程、内存

7.7 dig/nslookup - DNS 查询

# dig(更强大)
dig google.com
dig google.com A                # 查询 A 记录
dig google.com MX               # 查询 MX 记录
dig google.com NS               # 查询 NS 记录
dig google.com ANY              # 所有记录
dig google.com +short           # 简短输出
dig @8.8.8.8 google.com         # 指定 DNS 服务器
dig -x 8.8.8.8                  # 反向查询
dig google.com +trace           # 追踪 DNS 解析过程

# nslookup(交互式)
nslookup google.com
nslookup google.com 8.8.8.8     # 指定 DNS
nslookup -type=mx google.com    # 查询特定记录

7.8 host - 简单 DNS 查询

host google.com
host -t mx google.com
host -t ns google.com
host -a google.com              # 所有记录
host 8.8.8.8                    # 反向查询

八、磁盘与存储

8.1 df - 查看磁盘使用情况

df                              # 所有文件系统
df -h                           # 人类可读格式
df -H                           # 1000 为基数(而非 1024)
df -T                           # 显示文件系统类型
df -i                           # 显示 inode 使用情况
df /var                         # 特定目录
df -h --total                   # 显示总计

8.2 du - 查看目录大小

du /var/log                     # 目录大小
du -h /var/log                  # 人类可读
du -sh /var/log                 # 只显示总大小
du -sh *                        # 当前目录下各项大小
du -sh * | sort -h              # 排序
du -sh * | sort -hr | head      # 最大的几个

# 查找大目录
du -h --max-depth=1 / 2>/dev/null | sort -hr | head

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

# ncdu - 更好用的 du
sudo apt install ncdu
ncdu /var

8.3 mount/umount - 挂载

# 查看已挂载
mount
mount | grep sda

# 挂载
sudo mount /dev/sdb1 /mnt/data
sudo mount -t ext4 /dev/sdb1 /mnt/data
sudo mount -o ro /dev/sdb1 /mnt/data    # 只读

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

# 挂载网络文件系统
sudo mount -t nfs server:/share /mnt/nfs
sudo mount -t cifs //server/share /mnt/smb -o username=user

# 卸载
sudo umount /mnt/data
sudo umount -l /mnt/data                # 延迟卸载
sudo umount -f /mnt/data                # 强制卸载

# 重新挂载(修改选项)
sudo mount -o remount,rw /

# 开机自动挂载
# 编辑 /etc/fstab
# 设备            挂载点      类型    选项                dump  fsck
# /dev/sdb1      /mnt/data   ext4    defaults            0     2
# UUID=xxx       /mnt/data   ext4    defaults,noatime    0     2

8.4 lsblk - 查看块设备

lsblk
lsblk -f                        # 显示文件系统
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT,UUID

8.5 fdisk/parted - 磁盘分区

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

# 分区操作(交互式)
sudo fdisk /dev/sdb
# m - 帮助
# n - 新建分区
# d - 删除分区
# p - 打印分区表
# w - 写入并退出
# q - 不保存退出

# parted(支持 GPT)
sudo parted /dev/sdb print
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sdb mkpart primary ext4 0% 100%

8.6 mkfs - 格式化

sudo mkfs.ext4 /dev/sdb1
sudo mkfs.xfs /dev/sdb1
sudo mkfs.ntfs /dev/sdb1
sudo mkfs.vfat /dev/sdb1        # FAT32

# 检查文件系统
sudo fsck /dev/sdb1
sudo fsck -y /dev/sdb1          # 自动修复

九、其他常用工具

9.1 date - 日期时间

date                            # 当前时间
date +%Y-%m-%d                  # 2025-01-20
date +%H:%M:%S                  # 10:30:00
date +%Y%m%d%H%M%S              # 20250120103000
date -d "yesterday"             # 昨天
date -d "1 week ago"            # 一周前
date -d "next monday"           # 下周一
date -u                         # UTC 时间

# 设置时间(需要 root)
sudo date -s "2025-01-20 10:30:00"

# 时区
timedatectl                     # 查看时区设置
timedatectl list-timezones      # 列出时区
sudo timedatectl set-timezone Asia/Shanghai

9.2 cal - 日历

cal                             # 本月日历
cal 2025                        # 2025年日历
cal 1 2025                      # 2025年1月
cal -3                          # 前后各一个月

9.3 history - 命令历史

history                         # 查看历史命令
history 20                      # 最近 20 条
history | grep ssh              # 搜索
!123                            # 执行第 123 条命令
!!                              # 执行上一条命令
!ssh                            # 执行最近的 ssh 命令
Ctrl+R                          # 搜索历史

# 清除历史
history -c                      # 清除内存中的历史
history -w                      # 写入历史文件

9.4 alias - 命令别名

# 创建别名
alias ll='ls -la'
alias la='ls -A'
alias grep='grep --color=auto'
alias rm='rm -i'

# 查看别名
alias
alias ll

# 删除别名
unalias ll

# 永久别名(添加到 ~/.bashrc 或 ~/.zshrc)
echo "alias ll='ls -la'" >> ~/.bashrc
source ~/.bashrc

9.5 which/whereis/type - 查找命令位置

which python                    # 命令路径
which -a python                 # 所有路径

whereis python                  # 命令、源码、手册位置

type ls                         # 命令类型
type -a ls                      # 所有定义

command -v python               # 类似 which,脚本中更可靠

9.6 man/help - 帮助文档

man ls                          # 查看手册
man -k keyword                  # 搜索手册
man 5 passwd                    # 查看第 5 节(配置文件)

# man 章节
# 1 - 用户命令
# 2 - 系统调用
# 3 - C 库函数
# 4 - 设备和特殊文件
# 5 - 配置文件格式
# 6 - 游戏
# 7 - 杂项
# 8 - 系统管理命令

# 内置命令帮助
help cd
help type

# 简短帮助
ls --help

9.7 echo/printf - 输出文本

echo "Hello World"
echo -n "No newline"            # 不换行
echo -e "Tab:\t Newline:\n"     # 解释转义字符
echo $PATH                      # 输出变量

printf "Name: %s, Age: %d\n" "Tom" 25
printf "%.2f\n" 3.14159

9.8 xargs - 构建命令参数

# 基本用法
find . -name "*.txt" | xargs cat
find . -name "*.log" | xargs rm
find . -name "*.py" | xargs grep "import"

# 处理特殊字符
find . -name "*.txt" -print0 | xargs -0 cat

# 限制参数数量
echo "a b c d e" | xargs -n 2 echo

# 指定占位符
find . -name "*.txt" | xargs -I {} cp {} /backup/

# 并行执行
find . -name "*.jpg" | xargs -P 4 -I {} convert {} -resize 50% small_{}

9.9 tee - 管道分流

# 输出到屏幕同时保存到文件
ls -la | tee output.txt

# 追加模式
ls -la | tee -a output.txt

# 多个文件
ls -la | tee file1.txt file2.txt

# 结合 sudo
echo "content" | sudo tee /etc/myconfig

9.10 watch - 定期执行命令

watch df -h                     # 每 2 秒执行一次
watch -n 1 df -h                # 每 1 秒执行一次
watch -d df -h                  # 高亮变化部分
watch -n 5 "ps aux | grep nginx"

十、环境变量

10.1 查看和设置环境变量

# 查看
env                             # 所有环境变量
printenv                        # 同上
printenv PATH                   # 特定变量
echo $PATH
echo $HOME
echo $USER

# 临时设置(当前 shell)
export MY_VAR="value"
export PATH="$PATH:/new/path"

# 永久设置
# 用户级别:~/.bashrc 或 ~/.profile
# 系统级别:/etc/environment 或 /etc/profile.d/

# ~/.bashrc 示例
export JAVA_HOME=/usr/lib/jvm/java-11
export PATH=$PATH:$JAVA_HOME/bin
export EDITOR=vim

# 使配置生效
source ~/.bashrc

10.2 常用环境变量

$PATH       # 命令搜索路径
$HOME       # 用户家目录
$USER       # 当前用户名
$SHELL      # 当前 shell
$PWD        # 当前目录
$OLDPWD     # 上一个目录
$LANG       # 语言设置
$EDITOR     # 默认编辑器
$TERM       # 终端类型

总结

以上是后端开发者每天都可能用到的 Linux 工具。建议:

  1. 多练习:每个命令都在自己机器上执行一遍
  2. 善用 man:遇到不熟悉的命令先看手册
  3. 记笔记:把常用的命令和参数组合记录下来
  4. 设置别名:把常用的复杂命令设为别名

下一章我们将介绍中频工具,包括服务管理、定时任务、日志管理等。

Prev
Linux 系统工具完全指南
Next
中频工具 - 每周使用