前置知识: 入门指南

命令行基础

00:00
3 min Beginner 2026/6/14

命令行操作基础:文件系统导航、进程管理、网络工具与Shell脚本入门。

1. Shell 与终端

1.1 Shell 概述

Shell 是操作系统的命令解释器,是用户内核之间的接口。它接收用户输入命令,将其翻译系统调用,并将结果返回给用户。

Shell全称
shBourne ShellUnix 最初 Shell
bashBourne Again ShellLinux 默认,最广泛使用
zshZ ShellmacOS 默认,功能强大
fishFriendly Interactive Shell用户友好,自动建议
PowerShellWindows 默认,对象

1.2 终端模拟器

终端模拟器是运 Shell 的图形程序:

终端平台
Windows TerminalWindows标签、GPU 加速
iTerm2macOS分屏、热键窗口
Alacritty跨平台GPU 加速、极简
Kitty跨平台GPU 加速、图片显示
WezTerm跨平台Lua 配置多路复用

1.3 Shell 配置文件

# bash 配置文件加载顺序
/etc/profile           # 系统级,登录时加载
~/.bash_profile        # 用户级,登录时加载
~/.bashrc              # 用户级,每次打开新 Shell 加载

# zsh 配置文件加载顺序
~/.zshenv              # 所有 zsh 实例加载
~/.zshrc               # 交互式 Shell 加载
~/.zlogin              # 登录 Shell 加载

2. 文件系统操作

2.1 目录导航

pwd                     # 显示当前工作目录
cd /home/user/projects  # 切换到绝对路径
cd ../..                # 上移两级目录
cd -                    # 返回上一个目录
cd ~                    # 切换到主目录

2.2 文件与目录管理

# 创建
mkdir project           # 创建目录
mkdir -p a/b/c          # 递归创建多级目录
touch file.txt          # 创建空文件

# 复制
cp file.txt backup.txt  # 复制文件
cp -r src/ dest/        # 递归复制目录

# 移动与重命名
mv old.txt new.txt      # 重命名
mv file.txt ../         # 移动到上级目录

# 删除
rm file.txt             # 删除文件(不可恢复!)
rm -r directory/        # 递归删除目录
rm -rf directory/       # 强制递归删除(危险!)

# 查找
find . -name "*.js"     # 按名称查找
find . -type f -mtime -7  # 查找7天内修改的文件

2.3 文件查看与搜索

# 查看文件
cat file.txt            # 显示全部内容
less file.txt           # 分页查看(推荐)
head -n 20 file.txt     # 显示前20行
tail -n 20 file.txt     # 显示后20行
tail -f log.txt         # 实时追踪文件末尾

# 搜索
grep "error" log.txt           # 搜索包含 error 的行
grep -r "TODO" src/            # 递归搜索目录
grep -i "warning" log.txt      # 忽略大小写
grep -n "function" app.js      # 显示行号

2.4 权限管理

# 查看权限
ls -la
# -rwxr-xr-x 1 user group 4096 Jan 1 12:00 script.sh
#  └┬┘└┬┘└┬┘
#   │   │   └── 其他用户: r-x (读+执行)
#   │   └────── 组用户: r-x (读+执行)
#   └────────── 所有者: rwx (读+写+执行)

# 修改权限
chmod +x script.sh      # 添加执行权限
chmod 755 script.sh     # 数字方式设置权限
chmod -R 644 directory/ # 递归设置目录权限

# 修改所有者
chown user:group file   # 修改文件所有者和组

2.5 文件系统层次标准(FHS)

/               根目录
├── bin/        基本用户命令
├── sbin/       系统管理命令
├── etc/        系统配置文件
├── home/       用户主目录
├── var/        可变数据(日志、缓存)
├── tmp/        临时文件
├── usr/        用户程序
│   ├── bin/    用户命令
│   ├── lib/    库文件
│   └── local/  本地安装的程序
├── opt/        第三方软件
└── dev/        设备文件

3. 进程管理

3.1 进程查看

ps aux                   # 查看所有进程
ps -ef                   # 另一种格式
top                      # 实时进程监控
htop                     # 增强版 top(推荐)
pgrep -f "node"          # 按名称查找进程 PID

3.2 进程控制

# 前台/后台
command &                # 后台运行
Ctrl+Z                   # 暂停当前进程
bg                       # 将暂停的进程放到后台
fg                       # 将后台进程调到前台
jobs                     # 查看后台任务

# 终止进程
kill PID                 # 发送 SIGTERM(优雅终止)
kill -9 PID              # 发送 SIGKILL(强制终止)
killall node             # 按名称终止所有匹配进程
pkill -f "webpack"       # 按命令行模式终止

3.3 信号系统

信号编号含义用途
SIGHUP1挂断终端关闭通知进程
SIGINT2中断Ctrl+C 发送
SIGQUIT3退出Ctrl+\ 发送生成核心转储
SIGTERM15终止默认 kill 信号,可被捕获
SIGKILL9杀死强制终止,不可被捕获
SIGSTOP19停止不可被捕获,暂停进程
SIGCONT18继续恢复暂停的进程

3.4 守护进程与服务

# systemd 服务管理
systemctl start nginx     # 启动服务
systemctl stop nginx      # 停止服务
systemctl restart nginx   # 重启服务
systemctl status nginx    # 查看状态
systemctl enable nginx    # 开机自启
systemctl disable nginx   # 取消自启

# 查看服务日志
journalctl -u nginx -f    # 实时查看 nginx 日志

4. 网络工具

4.1 连接测试

ping google.com           # 测试网络连通性
ping -c 4 google.com      # 发送4个包后停止
traceroute google.com     # 跟踪路由路径
mtr google.com            # 持续跟踪路由(推荐)

4.2 DNS 查询

nslookup google.com       # DNS 查询
dig google.com            # 详细 DNS 查询
dig +short google.com     # 只显示 IP 地址
host google.com           # 简洁 DNS 查询

4.3 端口与连接

# 查看端口占用
netstat -tlnp             # 查看所有监听端口
ss -tlnp                  # 更快的替代方案
lsof -i :8080             # 查看占用 8080 端口的进程

# 网络连接测试
curl http://example.com   # HTTP 请求
curl -I https://example.com  # 只看响应头
wget https://example.com/file.zip  # 下载文件
nc -zv localhost 3306     # 测试端口连通性

4.4 防火墙

# ufw(Ubuntu 防火墙)
ufw status                # 查看状态
ufw allow 80/tcp          # 允许 80 端口
ufw allow 443/tcp         # 允许 443 端口
ufw deny 3306             # 拒绝 3306 端口
ufw enable                # 启用防火墙

5. 管道与重定向

5.1 重定向

# 输出重定向
echo "hello" > file.txt       # 覆盖写入
echo "world" >> file.txt      # 追加写入

# 输入重定向
sort < names.txt              # 从文件读取输入

# 错误重定向
command 2> error.log          # 错误输出到文件
command 2>&1                  # 错误合并到标准输出
command &> all.log            # 所有输出到文件

5.2 管道

管道将前一个命令标准输出作为后一个命令标准输入

# 组合使用
cat access.log | grep "404" | wc -l        # 统计404错误数
ps aux | grep node | grep -v grep           # 查找node进程
find . -name "*.js" | xargs wc -l          # 统计JS文件行数
history | sort | uniq -c | sort -rn | head  # 最常用命令

5.3 文本处理三剑客

# grep - 文本搜索
grep -E "error|warning" log.txt    # 正则搜索

# sed - 流编辑器
sed 's/old/new/g' file.txt         # 替换文本
sed -n '10,20p' file.txt           # 打印10-20行

# awk - 文本分析
awk '{print $1, $3}' data.txt      # 打印第1、3列
awk -F: '{print $1}' /etc/passwd   # 指定分隔符
awk '$3 > 100 {print $0}' data.txt # 条件过滤

6. Shell 脚本入门

6.1 基本结构

#!/bin/bash
# 这是一个 Shell 脚本

# 变量
NAME="World"
echo "Hello, $NAME!"

# 条件判断
if [ -f "package.json" ]; then
    echo "Found package.json"
    npm install
else
    echo "No package.json found"
fi

# 循环
for file in *.js; do
    echo "Processing: $file"
done

# 函数
greet() {
    local name=$1
    echo "Hello, $name!"
}
greet "Developer"

6.2 实用脚本示例

#!/bin/bash
# 自动化项目部署脚本

set -e  # 遇到错误立即退出

PROJECT_DIR="/var/www/myapp"
BRANCH="main"

echo "=== Deploying $BRANCH ==="

cd "$PROJECT_DIR"
git pull origin "$BRANCH"
npm install --production
npm run build
pm2 restart myapp

echo "=== Deploy complete ==="

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式