Linux命令行基础指南
Linux命令行基础指南
掌握Linux/macOS终端的基本命令和高级技巧。
2026年3月16日7分钟阅读
前言:为什么要学习命令行
在图形用户界面(GUI)高度发达的2026年,命令行界面(CLI)仍然是开发者和系统管理员最强大的工具之一。掌握命令行可以让你:
- 提升效率:许多操作在命令行中只需几秒钟,而在GUI中可能需要几分钟
- 实现自动化:通过Shell脚本自动完成重复性任务
- 远程管理服务器:SSH连接到远程服务器时,命令行是唯一的交互方式
- 更好地理解系统:命令行让你更深入地了解操作系统的工作原理
本指南适用于Linux和macOS系统。大部分命令在两个平台上通用,少数差异会特别标注。
一、文件与目录操作
导航
# 查看当前目录
pwd
# 切换目录
cd /path/to/directory
cd ~ # 回到主目录
cd - # 回到上一个目录
cd .. # 上一级目录
cd ../.. # 上两级目录
# 列出目录内容
ls # 基本列表
ls -la # 详细列表(包含隐藏文件)
ls -lh # 以人类可读格式显示文件大小
ls -lt # 按修改时间排序
ls -lS # 按文件大小排序
ls -R # 递归列出所有子目录
文件操作
# 创建文件
touch newfile.txt
touch file1.txt file2.txt file3.txt
# 创建目录
mkdir new-directory
mkdir -p path/to/nested/directory # 递归创建
# 复制
cp source.txt destination.txt # 复制文件
cp -r source-dir/ destination-dir/ # 递归复制目录
cp -i source.txt dest.txt # 覆盖前提示
# 移动/重命名
mv oldname.txt newname.txt # 重命名
mv file.txt /path/to/directory/ # 移动文件
# 删除
rm file.txt # 删除文件
rm -r directory/ # 递归删除目录
rm -rf directory/ # 强制删除(谨慎使用!)
rm -i file.txt # 删除前确认
# 创建链接
ln -s /path/to/original link-name # 创建软链接
ln /path/to/original hard-link # 创建硬链接
查看文件内容
# 查看完整文件
cat file.txt
# 带行号查看
cat -n file.txt
# 分页查看(推荐用于大文件)
less file.txt
# less快捷键: q退出, /搜索, n下一个, N上一个, g顶部, G底部
# 查看文件头部
head file.txt # 默认前10行
head -n 20 file.txt # 前20行
# 查看文件尾部
tail file.txt # 默认后10行
tail -n 20 file.txt # 后20行
tail -f log.txt # 实时跟踪文件变化(监控日志常用)
# 统计文件信息
wc file.txt # 行数、单词数、字节数
wc -l file.txt # 仅行数
wc -w file.txt # 仅单词数
二、文本搜索与处理
grep - 文本搜索
# 基本搜索
grep "pattern" file.txt
# 忽略大小写
grep -i "pattern" file.txt
# 递归搜索目录
grep -r "pattern" /path/to/directory/
# 显示行号
grep -n "pattern" file.txt
# 反向匹配(排除包含pattern的行)
grep -v "pattern" file.txt
# 使用正则表达式
grep -E "error|warning|fatal" log.txt
# 只显示文件名
grep -l "pattern" *.txt
# 统计匹配次数
grep -c "pattern" file.txt
# 搜索前后上下文
grep -B 3 -A 3 "error" log.txt # 前后各3行
grep -C 5 "error" log.txt # 前后各5行
如果你经常需要测试和调试正则表达式,可以使用我们的 正则表达式测试工具 进行在线验证。
find - 文件查找
# 按名称查找
find /path -name "*.log"
find /path -iname "*.LOG" # 忽略大小写
# 按类型查找
find /path -type f # 文件
find /path -type d # 目录
find /path -type l # 符号链接
# 按大小查找
find /path -size +100M # 大于100MB的文件
find /path -size -1k # 小于1KB的文件
# 按时间查找
find /path -mtime -7 # 7天内修改的文件
find /path -atime +30 # 30天前访问的文件
# 组合条件
find /path -name "*.log" -size +10M -mtime -7
# 找到后执行操作
find /path -name "*.tmp" -exec rm {} \;
find /path -name "*.js" -exec grep -l "TODO" {} \;
# 排除某些目录
find /path -name "*.js" -not -path "*/node_modules/*"
sed - 流编辑器
# 替换文本(不修改源文件)
sed 's/old/new/' file.txt # 每行替换第一个
sed 's/old/new/g' file.txt # 全局替换
# 直接修改文件
sed -i '' 's/old/new/g' file.txt # macOS
sed -i 's/old/new/g' file.txt # Linux
# 删除匹配的行
sed '/pattern/d' file.txt
# 删除空行
sed '/^$/d' file.txt
# 只显示特定行
sed -n '10,20p' file.txt # 第10到20行
# 在匹配行后插入文本
sed '/pattern/a\new line of text' file.txt
awk - 文本处理
# 打印特定列
awk '{print $1, $3}' file.txt
# 使用自定义分隔符
awk -F',' '{print $1, $2}' data.csv
# 条件过滤
awk '$3 > 100 {print $1, $3}' data.txt
# 计算总和
awk '{sum += $2} END {print "总计:", sum}' data.txt
# 统计行数
awk 'END {print NR}' file.txt
# 格式化输出
awk '{printf "%-20s %10.2f\n", $1, $2}' data.txt
三、管道与重定向
管道和重定向是命令行中最强大的概念之一:
# 管道:将一个命令的输出作为另一个命令的输入
ls -la | grep ".txt"
cat log.txt | grep "error" | wc -l
ps aux | sort -k3 -rn | head -10
# 输出重定向
echo "Hello" > file.txt # 覆盖写入
echo "World" >> file.txt # 追加写入
# 错误重定向
command 2> error.log # 错误输出到文件
command > output.log 2>&1 # 标准输出和错误都到文件
command > /dev/null 2>&1 # 丢弃所有输出
# 输入重定向
sort < unsorted.txt > sorted.txt
# Here Document
cat << EOF > config.txt
server_name=localhost
port=3000
debug=true
EOF
# tee:同时输出到屏幕和文件
command | tee output.log
command | tee -a output.log # 追加模式
四、进程管理
# 查看进程
ps aux # 所有进程
ps aux | grep node # 搜索特定进程
top # 实时进程监控
htop # 更好的进程监控(需安装)
# 后台运行
command & # 后台运行命令
nohup command & # 断开终端后继续运行
jobs # 查看后台任务
fg %1 # 将后台任务调到前台
bg %1 # 继续后台执行暂停的任务
# 终止进程
kill PID # 发送SIGTERM
kill -9 PID # 强制终止(SIGKILL)
killall process_name # 按名称终止
pkill -f "pattern" # 按模式终止
# 查看端口占用
lsof -i :3000 # 查看3000端口
netstat -tlnp # 所有监听端口(Linux)
ss -tlnp # 更现代的替代命令(Linux)
五、权限管理
理解Linux权限
-rwxr-xr-- 1 user group 4096 Jan 1 12:00 file.txt
│└─┬─┘└┬┘└┬┘
│ │ │ │
│ │ │ └── 其他用户权限 (r--)
│ │ └───── 组权限 (r-x)
│ └───────── 所有者权限 (rwx)
└──────────── 文件类型 (- 文件, d 目录, l 链接)
修改权限
# 数字模式
chmod 755 script.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 600 secret.key # rw-------
# 符号模式
chmod u+x script.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o-rwx file.txt # 移除其他用户的所有权限
chmod a+r file.txt # 给所有人添加读权限
# 递归修改
chmod -R 755 directory/
# 修改所有者
chown user:group file.txt
chown -R user:group directory/
六、网络工具
# 网络连通性测试
ping google.com
ping -c 5 google.com # 发送5个包后停止
# DNS查询
nslookup example.com
dig example.com
# HTTP请求
curl https://api.example.com/data
curl -X POST -H "Content-Type: application/json" \
-d '{"key": "value"}' https://api.example.com/data
curl -o output.html https://example.com # 保存到文件
curl -I https://example.com # 只查看响应头
# 下载文件
wget https://example.com/file.zip
wget -c https://example.com/large-file.zip # 断点续传
# SSH远程连接
ssh user@hostname
ssh -i key.pem user@hostname # 使用密钥
ssh -p 2222 user@hostname # 指定端口
# SCP文件传输
scp file.txt user@remote:/path/to/destination
scp -r directory/ user@remote:/path/ # 传输目录
scp user@remote:/path/file.txt ./ # 从远程下载
在处理API响应时,使用 JSON格式化工具 可以帮助你更好地阅读和分析JSON数据。
七、压缩与解压
# tar(打包/解包)
tar -czf archive.tar.gz directory/ # 打包并gzip压缩
tar -cjf archive.tar.bz2 directory/ # 打包并bzip2压缩
tar -xzf archive.tar.gz # 解压gzip
tar -xjf archive.tar.bz2 # 解压bzip2
tar -xzf archive.tar.gz -C /target/ # 解压到指定目录
tar -tf archive.tar.gz # 查看内容(不解压)
# zip
zip -r archive.zip directory/ # 压缩
unzip archive.zip # 解压
unzip archive.zip -d /target/ # 解压到指定目录
unzip -l archive.zip # 查看内容
八、Shell脚本基础
变量与字符串
#!/bin/bash
# 变量赋值(等号两边不能有空格)
name="World"
count=42
# 使用变量
echo "Hello, $name!"
echo "Count is: ${count}"
# 字符串操作
str="Hello World"
echo ${#str} # 字符串长度:11
echo ${str:0:5} # 子字符串:Hello
echo ${str/World/Linux} # 替换:Hello Linux
条件判断
#!/bin/bash
# if语句
if [ -f "file.txt" ]; then
echo "文件存在"
elif [ -d "directory" ]; then
echo "是一个目录"
else
echo "不存在"
fi
# 常用条件测试
# -f 文件存在 -d 目录存在 -z 字符串为空
# -n 字符串非空 -eq 等于 -ne 不等于
# -gt 大于 -lt 小于 -ge 大于等于
# 字符串比较
if [ "$str1" = "$str2" ]; then
echo "字符串相等"
fi
循环
#!/bin/bash
# for循环
for file in *.txt; do
echo "处理: $file"
done
for i in {1..10}; do
echo "数字: $i"
done
# while循环
count=0
while [ $count -lt 5 ]; do
echo "Count: $count"
count=$((count + 1))
done
# 读取文件逐行处理
while IFS= read -r line; do
echo "行: $line"
done < input.txt
实用脚本示例
#!/bin/bash
# 批量重命名文件
# 将所有.jpeg文件重命名为.jpg
for file in *.jpeg; do
if [ -f "$file" ]; then
newname="${file%.jpeg}.jpg"
mv "$file" "$newname"
echo "重命名: $file -> $newname"
fi
done
echo "完成!"
#!/bin/bash
# 简单的系统监控脚本
echo "=== 系统信息 ==="
echo "主机名: $(hostname)"
echo "运行时间: $(uptime)"
echo ""
echo "=== 磁盘使用 ==="
df -h | grep -E "^/dev"
echo ""
echo "=== 内存使用 ==="
free -h 2>/dev/null || vm_stat # Linux用free,macOS用vm_stat
echo ""
echo "=== CPU负载最高的5个进程 ==="
ps aux --sort=-%cpu | head -6
九、实用快捷键
| 快捷键 | 功能 |
|---|---|
Ctrl + C | 终止当前命令 |
Ctrl + Z | 暂停当前命令 |
Ctrl + D | 退出当前Shell |
Ctrl + L | 清屏 |
Ctrl + R | 搜索命令历史 |
Ctrl + A | 光标移到行首 |
Ctrl + E | 光标移到行尾 |
Ctrl + W | 删除前一个单词 |
Ctrl + U | 删除到行首 |
Ctrl + K | 删除到行尾 |
Tab | 自动补全 |
!! | 重复上一条命令 |
!$ | 上一条命令的最后一个参数 |
十、包管理器
# Debian/Ubuntu (apt)
sudo apt update # 更新包列表
sudo apt upgrade # 升级所有包
sudo apt install package-name # 安装包
sudo apt remove package-name # 删除包
# macOS (Homebrew)
brew update # 更新Homebrew
brew upgrade # 升级所有包
brew install package-name # 安装包
brew uninstall package-name # 删除包
brew list # 查看已安装的包
# CentOS/RHEL (dnf/yum)
sudo dnf update # 更新包
sudo dnf install package-name # 安装包
结语
命令行是一个值得长期投入学习的技能。本指南涵盖了日常工作中最常用的命令和技巧。建议你从最基础的文件操作和文本搜索开始练习,逐步掌握更高级的管道、脚本和系统管理技能。
配合使用在线工具可以让你的工作更高效。例如,当你在命令行中处理JSON数据时,可以使用 JSON格式化工具 来格式化输出;测试正则表达式时,可以使用 正则表达式测试工具 进行可视化验证;处理Base64编码时,可以使用 Base64编解码工具 进行快速转换。
每天在终端中多练习一个新命令,很快你就会发现命令行成为你最高效的工作伙伴。