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编解码工具 进行快速转换。

每天在终端中多练习一个新命令,很快你就会发现命令行成为你最高效的工作伙伴。

相关文章