Linux命令行是系统管理的核心工具。掌握基本命令是学习Linux的第一步,也是最重要的一步。本章将系统讲解Linux中最常用的文件管理、查看、查找和压缩命令。
ls命令用于列出目录内容。
# 列出当前目录内容
ls
# 列出指定目录内容
ls /home
# 列出多个目录
ls /home /var /tmp
长格式显示:
ls -l
# 输出示例:
# drwxr-xr-x 2 dbw dbw 4096 Jan 1 10:00 Desktop
# -rw-r--r-- 1 dbw dbw 123 Jan 1 10:00 file.txt
# 格式说明:
# drwxr-xr-x 文件类型和权限
# 2 硬链接数
# dbw 所有者
# dbw 所属组
# 4096 文件大小(字节)
# Jan 1 10:00 修改时间
# Desktop 文件名
显示隐藏文件:
ls -a
# 输出示例:
# . .. .bashrc
# .profile Desktop Documents
人类可读格式:
ls -lh
# 输出示例:
# -rw-r--r-- 1 dbw dbw 1.2K Jan 1 10:00 file.txt
# -rw-r--r-- 1 dbw dbw 15M Jan 1 10:00 video.mp4
其他常用选项:
# 按时间排序(最新在前)
ls -lt
# 按大小排序(最大在前)
ls -lS
# 反向排序
ls -lr
# 递归列出子目录
ls -R
# 显示inode号
ls -i
# 组合使用
ls -lah
东巴文提示:ls -lh是最常用的组合,显示详细信息且文件大小易读。
cd命令用于切换工作目录。
# 切换到指定目录
cd /home/dbw
# 切换到用户主目录
cd
cd ~
# 切换到上一级目录
cd ..
# 切换到上两级目录
cd ../..
# 切换到上一次所在目录
cd -
绝对路径:
cd /var/log
cd /usr/local/bin
相对路径:
cd Documents
cd ../Downloads
cd ./Desktop
东巴文最佳实践:使用Tab键自动补全目录名,提高效率。
pwd命令显示当前工作目录的绝对路径。
pwd
# 输出示例:
# /home/dbw/Documents
# 显示物理路径(解析符号链接)
pwd -P
# 显示逻辑路径(保留符号链接)
pwd -L
# 创建单个目录
mkdir dir1
# 创建多个目录
mkdir dir1 dir2 dir3
# 创建嵌套目录
mkdir -p dir1/dir2/dir3
# 创建目录并设置权限
mkdir -m 755 dir1
# 显示创建过程
mkdir -v dir1
# 创建项目目录结构
mkdir -p project/{src,bin,docs,tests}
# 创建带日期的目录
mkdir backup_$(date +%Y%m%d)
# 创建多级目录
mkdir -p /tmp/test/sub1/sub2
东巴文技巧:使用{}可以快速创建多个相关目录。
rmdir命令只能删除空目录。
# 删除空目录
rmdir dir1
# 删除多级空目录
rmdir -p dir1/dir2/dir3
# 显示删除过程
rmdir -v dir1
东巴文提示:如果目录非空,需要使用rm -r命令。
# 复制文件
cp file1.txt file2.txt
# 复制文件到目录
cp file.txt /home/dbw/
# 复制多个文件到目录
cp file1.txt file2.txt /home/dbw/
# 交互式复制(覆盖前提示)
cp -i file1.txt file2.txt
# 强制覆盖
cp -f file1.txt file2.txt
# 显示复制过程
cp -v file1.txt file2.txt
# 复制目录(递归)
cp -r dir1 dir2
# 复制目录并显示过程
cp -rv dir1 dir2
# 保持文件属性
cp -a dir1 dir2
# 保持时间戳
cp -p file1.txt file2.txt
# 备份文件
cp file.txt file.txt.bak
# 备份目录
cp -r project project_backup
# 复制所有.txt文件
cp *.txt /backup/
# 复制并重命名
cp file.txt /backup/newfile.txt
东巴文最佳实践:重要文件复制时使用-i选项,避免误覆盖。
# 重命名文件
mv oldname.txt newname.txt
# 重命名目录
mv olddir newdir
# 移动文件到目录
mv file.txt /home/dbw/
# 移动多个文件到目录
mv file1.txt file2.txt /home/dbw/
# 移动目录
mv dir1 /home/dbw/
# 交互式移动
mv -i file.txt /home/dbw/
# 强制覆盖
mv -f file.txt /home/dbw/
# 显示移动过程
mv -v file.txt /home/dbw/
# 移动所有.txt文件
mv *.txt /backup/
# 移动并重命名
mv file.txt /backup/newfile.txt
# 批量重命名(使用rename命令)
rename 's/\.txt$/\.bak/' *.txt
东巴文提示:mv命令在同一个文件系统内移动文件很快,因为只修改文件路径,不复制数据。
# 删除文件
rm file.txt
# 删除多个文件
rm file1.txt file2.txt
# 交互式删除
rm -i file.txt
# 强制删除
rm -f file.txt
# 显示删除过程
rm -v file.txt
# 删除空目录
rm -d dir1
# 删除目录及其内容(递归)
rm -r dir1
# 强制递归删除
rm -rf dir1
# 交互式递归删除
rm -ri dir1
东巴文警告:rm -rf命令非常危险,删除后无法恢复!
# 使用通配符前先确认
ls file*
# 使用交互模式
rm -i *.txt
# 避免使用通配符
rm -rf /home/dbw/dir1/* # 危险!
rm -rf /home/dbw/dir1/ # 更安全
# 使用trash-cli工具(可恢复)
sudo apt install trash-cli
trash file.txt
东巴文最佳实践:
-i选项确认rm -rf /*# 创建空文件
touch file.txt
# 创建多个文件
touch file1.txt file2.txt
# 更新文件时间戳
touch file.txt
# 只更新访问时间
touch -a file.txt
# 只更新修改时间
touch -m file.txt
# 设置特定时间
touch -t 202401011200 file.txt
# 查看文件内容
cat file.txt
# 查看多个文件
cat file1.txt file2.txt
# 连接文件
cat file1.txt file2.txt > merged.txt
# 显示行号
cat -n file.txt
# 显示行号(非空行)
cat -b file.txt
# 显示特殊字符
cat -A file.txt
# 显示制表符
cat -T file.txt
# 显示行结束符
cat -E file.txt
# 合并空行
cat -s file.txt
东巴文提示:cat适合查看小文件,大文件建议使用less。
# 分页查看文件
less file.txt
# 查看多个文件
less file1.txt file2.txt
导航操作:
| 快捷键 | 功能 |
|---|---|
| 空格 | 向下翻页 |
| b | 向上翻页 |
| 回车 | 向下一行 |
| j | 向下一行 |
| k | 向上一行 |
| g | 跳到文件开头 |
| G | 跳到文件末尾 |
| 10g | 跳到第10行 |
搜索操作:
| 快捷键 | 功能 |
|---|---|
| /pattern | 向下搜索 |
| ?pattern | 向上搜索 |
| n | 下一个匹配 |
| N | 上一个匹配 |
其他操作:
| 快捷键 | 功能 |
|---|---|
| q | 退出 |
| h | 帮助 |
| F | 跟踪模式(类似tail -f) |
| v | 使用编辑器编辑 |
东巴文技巧:less是查看大文件的最佳工具,支持前后翻页和搜索。
# 查看文件前10行
head file.txt
# 查看文件前N行
head -n 20 file.txt
head -20 file.txt
# 查看文件前N个字节
head -c 100 file.txt
# 查看多个文件
head -n 5 file1.txt file2.txt
实用示例:
# 查看日志文件开头
head -n 20 /var/log/syslog
# 查看配置文件开头
head -n 10 /etc/passwd
# 查看文件最后10行
tail file.txt
# 查看文件最后N行
tail -n 20 file.txt
tail -20 file.txt
# 查看文件最后N个字节
tail -c 100 file.txt
# 查看多个文件
tail -n 5 file1.txt file2.txt
# 实时监控文件(最常用)
tail -f /var/log/syslog
# 实时监控并显示前N行
tail -n 20 -f /var/log/syslog
# 跟踪文件名(文件被删除或重命名后继续跟踪)
tail -F /var/log/syslog
东巴文提示:tail -f是监控日志文件的必备命令。
# 统计行数、字数、字节数
wc file.txt
# 输出示例:
# 10 20 150 file.txt
# 行数 字数 字节数
# 只统计行数
wc -l file.txt
# 只统计字数
wc -w file.txt
# 只统计字节数
wc -c file.txt
# 只统计字符数
wc -m file.txt
# 统计多个文件
wc -l *.txt
# 配合管道使用
ls -l | wc -l
cat file.txt | wc -w
# 查看文件详细信息
stat file.txt
# 输出示例:
# File: file.txt
# Size: 1234 Blocks: 8 IO Block: 4096 regular file
# Device: 801h/2049d Inode: 123456 Links: 1
# Access: (0644/-rw-r--r--) Uid: ( 1000/ dbw) Gid: ( 1000/ dbw)
# Access: 2024-01-01 10:00:00.000000000 +0800
# Modify: 2024-01-01 10:00:00.000000000 +0800
# Change: 2024-01-01 10:00:00.000000000 +0800
# Birth: -
# 只显示文件大小
stat -c %s file.txt
# 只显示权限
stat -c %a file.txt
# 只显示inode号
stat -c %i file.txt
# 在当前目录查找文件
find . -name "file.txt"
# 在指定目录查找
find /home -name "file.txt"
# 查找所有.txt文件
find . -name "*.txt"
# 忽略大小写
find . -iname "*.TXT"
# 查找文件
find . -type f -name "*.txt"
# 查找目录
find . -type d -name "dir*"
# 查找符号链接
find . -type l
# 查找块设备
find /dev -type b
# 查找字符设备
find /dev -type c
# 查找空文件
find . -empty
# 查找大于100MB的文件
find . -size +100M
# 查找小于1KB的文件
find . -size -1k
# 查找大小在10MB到100MB之间的文件
find . -size +10M -size -100M
# 查找文件大小为0的文件
find . -size 0
# 查找最近7天修改的文件
find . -mtime -7
# 查找7天前修改的文件
find . -mtime +7
# 查找最近1小时内修改的文件
find . -mmin -60
# 查找最近1天内访问的文件
find . -atime -1
# 查找最近1天内状态改变的文件
find . -ctime -1
# 查找权限为755的文件
find . -perm 755
# 查找权限至少为755的文件
find . -perm -755
# 查找权限包含执行权限的文件
find . -perm -111
# 查找SUID文件
find / -perm -4000
# 查找属于dbw用户的文件
find . -user dbw
# 查找属于dbw组的文件
find . -group dbw
# 查找没有有效用户的文件
find . -nouser
# 查找没有有效组的文件
find . -nogroup
# 与(AND)
find . -name "*.txt" -size +1M
# 或(OR)
find . -name "*.txt" -o -name "*.md"
# 非(NOT)
find . -not -name "*.txt"
find . ! -name "*.txt"
# 复杂组合
find . \( -name "*.txt" -o -name "*.md" \) -size +1M
# 查找并删除
find . -name "*.tmp" -delete
# 查找并执行命令
find . -name "*.txt" -exec cat {} \;
# 查找并执行命令(批量)
find . -name "*.txt" -exec cat {} +
# 查找并询问
find . -name "*.tmp" -ok rm {} \;
# 查找并移动
find . -name "*.txt" -exec mv {} /backup/ \;
# 查找并修改权限
find . -type f -exec chmod 644 {} \;
东巴文最佳实践:find命令功能强大,是文件查找的首选工具。
# 查找文件
locate file.txt
# 查找所有.txt文件
locate "*.txt"
# 忽略大小写
locate -i FILE.txt
# 限制结果数量
locate -n 10 "*.txt"
# 统计匹配数量
locate -c "*.txt"
# 更新数据库
sudo updatedb
# 查看数据库信息
locate -S
东巴文对比:
| 特性 | find | locate |
|---|---|---|
| 查找速度 | 慢 | 快 |
| 实时性 | 实时 | 依赖数据库 |
| 功能 | 强大 | 简单 |
| 适用场景 | 复杂查找 | 快速查找 |
# 在文件中搜索
grep "pattern" file.txt
# 在多个文件中搜索
grep "pattern" *.txt
# 在目录中递归搜索
grep -r "pattern" /var/log/
# 忽略大小写
grep -i "pattern" file.txt
# 显示行号
grep -n "pattern" file.txt
# 显示不匹配的行
grep -v "pattern" file.txt
# 只显示匹配的部分
grep -o "pattern" file.txt
# 显示匹配的文件名
grep -l "pattern" *.txt
# 显示不匹配的文件名
grep -L "pattern" *.txt
# 显示匹配次数
grep -c "pattern" file.txt
# 显示匹配行及前后N行
grep -C 3 "pattern" file.txt
# 显示匹配行及前N行
grep -B 3 "pattern" file.txt
# 显示匹配行及后N行
grep -A 3 "pattern" file.txt
# 使用正则表达式
grep "^root" /etc/passwd # 以root开头
grep "bash$" /etc/passwd # 以bash结尾
grep "[0-9]\{3\}" file.txt # 3个数字
grep "a\{2,\}" file.txt # 至少2个a
grep "a\{2,4\}" file.txt # 2到4个a
# 使用扩展正则表达式
grep -E "pattern1|pattern2" file.txt # 或
grep -E "[0-9]+" file.txt # 一个或多个数字
grep -E "a?" file.txt # 0个或1个a
# 查找进程
ps aux | grep nginx
# 查找端口
netstat -tuln | grep 80
# 查找日志中的错误
grep -i "error" /var/log/syslog
# 查找配置文件中的非注释行
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
# 查找IP地址
grep -E "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}" file.txt
# 查找邮箱地址
grep -E "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" file.txt
东巴文技巧:grep是文本搜索的利器,配合管道可以实现强大的过滤功能。
# 查找命令位置
which ls
# 输出示例:
# /bin/ls
# 查找多个命令
which ls cd pwd
# 显示所有匹配
which -a python
# 查找程序文件
whereis ls
# 输出示例:
# ls: /bin/ls /usr/share/man/man1/ls.1.gz
# 只查找二进制文件
whereis -b ls
# 只查找手册页
whereis -m ls
# 只查找源代码
whereis -s ls
# 创建归档文件
tar -cvf archive.tar dir1/
# 创建gzip压缩归档
tar -czvf archive.tar.gz dir1/
# 创建bzip2压缩归档
tar -cjvf archive.tar.bz2 dir1/
# 创建xz压缩归档
tar -cJvf archive.tar.xz dir1/
# 参数说明
# c 创建归档
# v 显示过程
# f 指定文件名
# z gzip压缩
# j bzip2压缩
# J xz压缩
# 解压归档文件
tar -xvf archive.tar
# 解压gzip归档
tar -xzvf archive.tar.gz
# 解压bzip2归档
tar -xjvf archive.tar.bz2
# 解压xz归档
tar -xJvf archive.tar.xz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /tmp/
# 参数说明
# x 解压归档
# C 指定解压目录
# 查看归档内容
tar -tvf archive.tar
# 查看gzip归档内容
tar -tzvf archive.tar.gz
# 参数说明
# t 列出内容
# 备份目录
tar -czvf backup_$(date +%Y%m%d).tar.gz /home/dbw/
# 备份多个目录
tar -czvf backup.tar.gz dir1/ dir2/ dir3/
# 排除某些文件
tar -czvf backup.tar.gz --exclude="*.log" dir1/
# 增量备份
tar -czvf backup.tar.gz -g snapshot.file dir1/
# 只打包比某个日期新的文件
tar -czvf backup.tar.gz -N "2024-01-01" dir1/
东巴文最佳实践:tar -czvf是最常用的压缩命令,压缩比和速度都很好。
# 压缩文件
gzip file.txt
# 压缩文件并保留原文件
gzip -k file.txt
# 解压文件
gzip -d file.txt.gz
# 查看压缩文件内容
zcat file.txt.gz
# 显示压缩信息
gzip -l file.txt.gz
# 指定压缩级别(1-9,默认6)
gzip -9 file.txt # 最大压缩
gzip -1 file.txt # 最快压缩
# 压缩文件
bzip2 file.txt
# 压缩文件并保留原文件
bzip2 -k file.txt
# 解压文件
bzip2 -d file.txt.bz2
# 查看压缩文件内容
bzcat file.txt.bz2
# 指定压缩级别(1-9,默认9)
bzip2 -9 file.txt
东巴文对比:
| 压缩工具 | 压缩比 | 速度 | 扩展名 |
|---|---|---|---|
| gzip | 中 | 快 | .gz |
| bzip2 | 高 | 慢 | .bz2 |
| xz | 最高 | 最慢 | .xz |
# 压缩文件
zip archive.zip file1.txt file2.txt
# 压缩目录
zip -r archive.zip dir1/
# 压缩多个目录
zip -r archive.zip dir1/ dir2/
# 排除某些文件
zip -r archive.zip dir1/ -x "*.log"
# 设置压缩级别(0-9)
zip -9 archive.zip file.txt # 最大压缩
zip -1 archive.zip file.txt # 最快压缩
# 添加密码
zip -P password archive.zip file.txt
# 解压文件
unzip archive.zip
# 解压到指定目录
unzip archive.zip -d /tmp/
# 查看压缩文件内容
unzip -l archive.zip
# 测试压缩文件完整性
unzip -t archive.zip
# 覆盖已存在的文件
unzip -o archive.zip
# 不覆盖已存在的文件
unzip -n archive.zip
东巴文提示:zip格式在Windows和Linux之间交换文件时很方便。
# 压缩文件
xz file.txt
# 压缩文件并保留原文件
xz -k file.txt
# 解压文件
xz -d file.txt.xz
# 查看压缩文件内容
xzcat file.txt.xz
# 指定压缩级别(0-9,默认6)
xz -9 file.txt # 最大压缩
# 使用多线程
xz -T 4 file.txt # 使用4个线程
✅ 掌握文件管理基本命令:ls、cd、cp、mv、rm ✅ 学会查看文件内容:cat、less、head、tail ✅ 熟练使用find和grep查找文件和内容 ✅ 掌握文件压缩与解压:tar、gzip、zip
完成本章学习后,请确认您能够:
东巴文(db-w.cn) - 让Linux学习更简单