Appearance
基础命令
本章将介绍 Linux 最常用的基础命令,包括文件操作、目录操作、文件查看等,这些是日常使用 Linux 必须掌握的核心命令。
目录操作命令
pwd - 显示当前目录
bash
# pwd (print working directory) 显示当前工作目录
pwd
# 输出:/home/user
# 显示物理路径(解析符号链接)
pwd -P
# 显示逻辑路径(保留符号链接)
pwd -Lcd - 切换目录
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 -lXmkdir - 创建目录
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.txtcp - 复制文件和目录
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.txtmv - 移动/重命名文件
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-releasemore 和 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 -10nl - 带行号显示
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 -llocate - 快速查找
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.txtcmp - 比较二进制文件
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 进阶命令,包括文本处理、查找搜索、压缩解压等更高级的命令操作。
