Skip to content

基础命令

本章将介绍 Linux 最常用的基础命令,包括文件操作、目录操作、文件查看等,这些是日常使用 Linux 必须掌握的核心命令。

目录操作命令

pwd - 显示当前目录

bash
# pwd (print working directory) 显示当前工作目录
pwd
# 输出:/home/user

# 显示物理路径(解析符号链接)
pwd -P

# 显示逻辑路径(保留符号链接)
pwd -L

cd - 切换目录

bash
# cd (change directory) 切换工作目录

# 切换到指定目录
cd /etc

# 切换到家目录
cd
cd ~
cd $HOME

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

# 切换到上级目录
cd ..

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

# 使用变量
cd $HOME/Documents

# 使用 Tab 键自动补全
cd /etc/apa<Tab>    # 自动补全为 /etc/apache2/

ls - 列出目录内容

bash
# ls (list) 列出目录内容

# 基本用法
ls                  # 列出当前目录
ls /etc             # 列出指定目录
ls /etc /home       # 列出多个目录

# 常用选项
ls -l               # 详细格式(权限、所有者、大小、时间)
ls -a               # 显示所有文件(包括隐藏文件)
ls -h               # 人类可读的大小(K、M、G)
ls -R               # 递归列出子目录
ls -t               # 按修改时间排序(最新在前)
ls -S               # 按文件大小排序(最大在前)
ls -r               # 反向排序
ls -i               # 显示 inode 号
ls -d               # 只显示目录本身,不显示内容

# 组合使用
ls -la              # 详细 + 所有文件
ls -lah             # 详细 + 所有文件 + 人类可读
ls -lt              # 详细 + 按时间排序
ls -lS              # 详细 + 按大小排序
ls -ld /etc         # 显示目录本身的信息

# 显示文件类型标识
ls -F
# 输出示例:
# Desktop/    Documents/    file.txt    script.sh*    link@
# / 表示目录,* 表示可执行文件,@ 表示符号链接

# 按扩展名排序
ls -lX

mkdir - 创建目录

bash
# mkdir (make directory) 创建目录

# 创建单个目录
mkdir mydir

# 创建多个目录
mkdir dir1 dir2 dir3

# 创建多级目录(创建父目录)
mkdir -p path/to/mydir

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

# 创建目录时显示信息
mkdir -v mydir

# 实用示例
mkdir -p project/{src,bin,docs,test}
# 创建 project 目录,并在其中创建 src、bin、docs、test 四个子目录

rmdir - 删除空目录

bash
# rmdir (remove directory) 删除空目录

# 删除空目录
rmdir mydir

# 删除多级空目录
rmdir -p path/to/mydir

# 显示删除信息
rmdir -v mydir

# 注意:rmdir 只能删除空目录
# 要删除非空目录,请使用 rm -r

文件操作命令

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

bash
# touch 创建空文件或更新文件时间戳

# 创建空文件
touch file.txt

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

# 更新文件时间戳为当前时间
touch existing_file.txt

# 设置特定的访问时间和修改时间
touch -t 202312251200 file.txt    # 格式:YYYYMMDDhhmm

# 使用参考文件的时间戳
touch -r ref_file.txt target.txt

# 只更新访问时间
touch -a file.txt

# 只更新修改时间
touch -m file.txt

cp - 复制文件和目录

bash
# cp (copy) 复制文件和目录

# 复制文件
cp source.txt dest.txt

# 复制文件到目录
cp source.txt /path/to/dest/

# 复制多个文件到目录
cp file1.txt file2.txt /path/to/dest/

# 复制目录(递归)
cp -r source_dir dest_dir

# 显示复制过程
cp -v source.txt dest.txt

# 交互模式(覆盖前提示)
cp -i source.txt dest.txt

# 保持文件属性(权限、所有者、时间戳)
cp -p source.txt dest.txt

# 强制覆盖
cp -f source.txt dest.txt

# 只复制更新的文件
cp -u source.txt dest.txt

# 创建备份
cp -b source.txt dest.txt

# 常用组合
cp -rv source_dir dest_dir    # 递归 + 显示过程
cp -ai source.txt dest.txt    # 交互 + 保持属性

# 复制时显示进度(需要安装 pv)
pv source.txt > dest.txt

mv - 移动/重命名文件

bash
# mv (move) 移动或重命名文件

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

# 移动文件到目录
mv file.txt /path/to/dest/

# 移动多个文件到目录
mv file1.txt file2.txt /path/to/dest/

# 移动目录
mv source_dir dest_dir

# 交互模式(覆盖前提示)
mv -i source.txt dest.txt

# 强制覆盖
mv -f source.txt dest.txt

# 不覆盖已存在的文件
mv -n source.txt dest.txt

# 只移动更新的文件
mv -u source.txt dest.txt

# 显示移动过程
mv -v source.txt dest.txt

# 批量重命名(使用 rename 命令)
rename 's/\.txt/\.bak/' *.txt    # 将所有 .txt 改为 .bak
rename 's/^/prefix_/' *.txt      # 在文件名前加 prefix_

rm - 删除文件和目录

bash
# rm (remove) 删除文件和目录

# 删除文件
rm file.txt

# 删除多个文件
rm file1.txt file2.txt

# 删除目录(递归)
rm -r mydir

# 强制删除(不提示)
rm -f file.txt

# 交互模式(删除前提示)
rm -i file.txt

# 删除目录及其内容(常用组合)
rm -rf mydir

# 显示删除过程
rm -v file.txt

# 删除空目录(同 rmdir)
rm -d emptydir

# 删除当前目录下所有文件(危险!)
rm *

# 删除当前目录下所有 .txt 文件
rm *.txt

# 安全删除(使用 shred 覆盖后删除)
shred -u sensitive_file.txt

# 注意:rm -rf / 或 rm -rf /* 极其危险!
# 可以通过设置 alias rm='rm -i' 增加安全提示

文件查看命令

cat - 查看文件内容

bash
# cat (concatenate) 查看文件内容或连接文件

# 查看文件内容
cat file.txt

# 查看多个文件
cat file1.txt file2.txt

# 显示行号
cat -n file.txt

# 显示行号(空行除外)
cat -b file.txt

# 显示非打印字符
cat -A file.txt

# 压缩连续空行
cat -s file.txt

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

# 追加内容
cat file1.txt >> file2.txt

# 从标准输入创建文件
cat > newfile.txt << EOF
这是第一行
这是第二行
EOF

# 显示文件开头信息
cat /etc/os-release

more 和 less - 分页查看

bash
# more - 分页查看文件(简单分页器)
more file.txt

# 操作:
# 空格 - 向下翻页
# Enter - 向下滚动一行
# b - 向上翻页
# q - 退出
# /pattern - 搜索

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

# less - 高级分页器(推荐使用)
less file.txt

# less 操作:
# 空格 / f - 向下翻页
# b - 向上翻页
# j / k - 向下/向上滚动一行
# g - 跳到文件开头
# G - 跳到文件结尾
# /pattern - 向下搜索
# ?pattern - 向上搜索
# n - 下一个搜索结果
# N - 上一个搜索结果
# q - 退出
# h - 帮助

# 显示行号
less -N file.txt

# 实时查看日志(类似 tail -f)
less +F /var/log/syslog
# 按 Ctrl+C 暂停,按 F 继续

head 和 tail - 查看文件头尾

bash
# head - 查看文件开头

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

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

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

# 显示多个文件的开头
head file1.txt file2.txt

# tail - 查看文件结尾

# 默认显示后 10 行
tail file.txt

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

# 显示后 n 个字节
tail -c 100 file.txt

# 实时跟踪文件(查看日志常用)
tail -f /var/log/syslog

# 从第 n 行开始显示
tail -n +20 file.txt

# 实时跟踪 + 显示文件名
tail -f /var/log/*.log

# 组合使用:查看文件第 11-20 行
head -20 file.txt | tail -10

nl - 带行号显示

bash
# nl (number lines) 带行号显示文件

# 基本用法
nl file.txt

# 显示所有行号(包括空行)
nl -ba file.txt

# 只显示非空行号
nl -bt file.txt

# 指定行号格式
nl -nrz file.txt    # 右对齐,前导零
nl -nln file.txt    # 左对齐

# 指定行号宽度
nl -w 4 file.txt

# 指定行号分隔符
nl -s ': ' file.txt

文件查找命令

find - 查找文件

bash
# find - 强大的文件查找命令

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

# 查找当前目录下所有文件
find .

# 按名称查找
find . -name "*.txt"
find /etc -name "*.conf"
find . -iname "README"    # 忽略大小写

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

# 按大小查找
find . -size 1M           # 等于 1M
find . -size +1M          # 大于 1M
find . -size -1M          # 小于 1M
find . -size +100k -size -1M    # 100k 到 1M 之间

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

# 按权限查找
find . -perm 755          # 权限等于 755
find . -perm -755         # 权限包含 755
find . -perm /755         # 权限包含任意一位

# 按所有者查找
find . -user root
find . -group www-data

# 按深度查找
find . -maxdepth 2        # 最大深度 2
find . -mindepth 2        # 最小深度 2

# 组合条件
find . -name "*.txt" -type f
find . -name "*.log" -mtime +7
find . \( -name "*.txt" -o -name "*.log" \)    # 或条件

# 执行操作
find . -name "*.tmp" -delete              # 删除找到的文件
find . -name "*.txt" -ls                  # 显示详细信息
find . -type f -exec chmod 644 {} \;      # 对每个文件执行命令
find . -type f -exec chmod 644 {} +       # 批量执行(更高效)
find . -name "*.log" -exec grep "error" {} \;

# 常用示例
# 查找并删除 7 天前的日志
find /var/log -name "*.log" -mtime +7 -delete

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

# 查找空目录
find . -type d -empty

# 查找并统计文件数量
find . -name "*.txt" | wc -l

locate - 快速查找

bash
# locate - 通过数据库快速查找文件

# 查找文件
locate file.txt
locate "*.conf"

# 限制结果数量
locate -n 10 "*.txt"

# 忽略大小写
locate -i readme

# 统计匹配数量
locate -c "*.txt"

# 更新数据库
sudo updatedb

# 注意:locate 使用数据库查找,速度比 find 快
# 但可能找不到最新创建的文件(需要更新数据库)

which 和 whereis

bash
# which - 查找命令的位置
which ls
# 输出:/bin/ls

which python3
# 输出:/usr/bin/python3

which -a python    # 显示所有匹配的路径

# whereis - 查找命令、源码和手册
whereis ls
# 输出:ls: /bin/ls /usr/share/man/man1/ls.1.gz

whereis python
# 输出:python: /usr/bin/python3.8 /usr/lib/python3.8 ...

# 只查找二进制文件
whereis -b ls

# 只查找手册
whereis -m ls

文件内容搜索

grep - 文本搜索

bash
# grep - 在文件中搜索文本

# 基本搜索
grep "pattern" file.txt

# 在多个文件中搜索
grep "pattern" *.txt

# 递归搜索目录
grep -r "pattern" /path/to/dir

# 忽略大小写
grep -i "pattern" file.txt

# 显示行号
grep -n "pattern" file.txt

# 显示匹配数量
grep -c "pattern" file.txt

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

# 显示不匹配的行
grep -v "pattern" file.txt

# 显示匹配行及其上下文
grep -C 2 "pattern" file.txt    # 显示匹配行前后各 2 行
grep -B 2 "pattern" file.txt    # 显示匹配行前 2 行
grep -A 2 "pattern" file.txt    # 显示匹配行后 2 行

# 使用正则表达式
grep "^start" file.txt          # 以 start 开头
grep "end$" file.txt            # 以 end 结尾
grep "[0-9]\+" file.txt         # 包含数字
grep -E "a|b" file.txt          # 扩展正则(a 或 b)

# 只匹配整个单词
grep -w "word" file.txt

# 显示匹配的颜色
grep --color=auto "pattern" file.txt

# 常用示例
# 查找包含 error 的日志
grep -i "error" /var/log/syslog

# 查找正在监听的端口
netstat -tlnp | grep 80

# 查找特定用户的进程
ps aux | grep username

# 统计代码行数(排除空行)
grep -cv "^$" file.txt

# 查找多个模式
grep -e "pattern1" -e "pattern2" file.txt

文件统计命令

wc - 统计文件

bash
# wc (word count) 统计文件行数、字数、字节数

# 统计所有
wc file.txt
# 输出:行数  字数  字节数  文件名

# 只统计行数
wc -l file.txt

# 只统计字数
wc -w file.txt

# 只统计字节数
wc -c file.txt

# 只统计字符数(多字节字符)
wc -m file.txt

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

# 配合管道使用
cat file.txt | wc -l
ls | wc -l           # 统计目录下文件数量
grep "error" log.txt | wc -l    # 统计匹配行数

du - 查看目录大小

bash
# du (disk usage) 查看目录或文件大小

# 查看当前目录大小
du

# 查看指定目录大小
du /home

# 人类可读格式
du -h

# 只显示总大小
du -s

# 查看当前目录下各子目录大小
du -h --max-depth=1

# 按大小排序
du -h --max-depth=1 | sort -h

# 查看所有文件(包括隐藏文件)
du -ah

# 排除某些目录
du --exclude="*.log"

# 常用组合
du -sh *            # 查看当前目录下各项目大小
du -sh /home/*      # 查看 home 下各用户目录大小

文件比较命令

diff - 比较文件差异

bash
# diff - 比较文件或目录的差异

# 比较两个文件
diff file1.txt file2.txt

# 并排显示
diff -y file1.txt file2.txt

# 显示上下文
diff -c file1.txt file2.txt

# 统一格式(常用)
diff -u file1.txt file2.txt

# 递归比较目录
diff -r dir1 dir2

# 忽略空白差异
diff -w file1.txt file2.txt

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

# 只显示是否有差异
diff -q file1.txt file2.txt

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

# 应用补丁
patch old.txt < patch.txt

cmp - 比较二进制文件

bash
# cmp - 比较两个文件是否相同

# 基本比较
cmp file1 file2

# 显示所有差异
cmp -l file1 file2

# 显示字节信息
cmp -b file1 file2

# 无输出表示文件相同
# 有输出表示第一个差异的位置

小结

本章介绍了 Linux 基础命令,按功能分类如下:

类别命令功能
目录操作pwd, cd, ls, mkdir, rmdir目录导航和管理
文件操作touch, cp, mv, rm文件创建、复制、移动、删除
文件查看cat, more, less, head, tail, nl查看文件内容
文件查找find, locate, which, whereis查找文件位置
内容搜索grep搜索文本内容
文件统计wc, du统计文件信息
文件比较diff, cmp比较文件差异

常用命令速查

bash
# 目录操作
pwd                          # 显示当前目录
cd /path/to/dir              # 切换目录
ls -la                       # 详细列出所有文件
mkdir -p path/to/dir         # 创建多级目录

# 文件操作
touch file.txt               # 创建文件
cp -r src dest               # 复制目录
mv old new                   # 重命名/移动
rm -rf dir                   # 删除目录

# 文件查看
cat file.txt                 # 查看文件
less file.txt                # 分页查看
head -n 20 file.txt          # 查看前 20 行
tail -f /var/log/syslog      # 实时查看日志

# 文件查找
find . -name "*.txt"         # 按名称查找
grep -r "pattern" dir/       # 搜索文本
which command                # 查找命令位置

下一步

下一章我们将学习 Linux 进阶命令,包括文本处理、查找搜索、压缩解压等更高级的命令操作。