Linux 新手村Linux 新手村
🏠 首页
📖 教程
  • Linux 官网
  • Ubuntu 官网
  • CentOS 官网
🏠 首页
📖 教程
  • Linux 官网
  • Ubuntu 官网
  • CentOS 官网
  • 🚀 入门篇 - 欢迎来到 Linux 世界

    • 📚 长安的教程导航
    • 🐧 什么是 Linux?
    • 💿 安装 Linux
    • 🎉 首次开机
  • 🎯 基础篇 - 必备生存技能

    • ⌨️ 基础命令
    • 🗂️ 文件系统
    • 📝 文件操作
    • 👥 用户与权限
  • ⚔️ 进阶篇 - 成为高手之路

    • ⚔️ Vim 编辑器
    • 🤖 Shell 脚本
    • ⚙️ 进程与服务
    • 🌐 网络基础
  • 🏆 高级篇 - 突破自我

    • 💡 高级技巧
    • 🔧 故障排查
    • 🎭 日常案例与血泪教训

📝 文件操作

大家好,我是长安!这一章来教大家一些高级的文件操作技巧,学会这些你就能像大神一样优雅地操作文件了。

🎯 本章目标

跟着长安读完这一章,你将掌握:

  • 文件的创建、编辑、查看
  • 文件的压缩与解压
  • 文件内容处理技巧
  • 重定向和管道的使用

✏️ 创建和编辑文件

创建空文件

# 使用 touch 创建空文件
touch newfile.txt

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

# 使用大括号批量创建
touch test_{1..5}.txt
# 创建:test_1.txt, test_2.txt, test_3.txt, test_4.txt, test_5.txt

快速写入内容

# 使用 echo 写入一行
echo "Hello World" > hello.txt

# 追加内容(不覆盖)
echo "Another line" >> hello.txt

# 写入多行(使用 cat 和 EOF)
cat > myfile.txt << EOF
第一行
第二行
第三行
EOF

使用编辑器

# nano - 新手友好的编辑器
nano filename.txt

# vim - 强大但需要学习
vim filename.txt

# gedit - 图形界面编辑器(如果有桌面)
gedit filename.txt

💡 nano 快速入门

打开后直接输入内容,然后:

  • Ctrl + O:保存
  • Ctrl + X:退出
  • Ctrl + K:剪切当前行
  • Ctrl + U:粘贴

👀 查看文件内容

基本查看

# 查看全部内容
cat file.txt

# 带行号查看
cat -n file.txt

# 分页查看(大文件)
less file.txt
more file.txt

# 查看前 N 行
head -n 20 file.txt
head -20 file.txt

# 查看后 N 行
tail -n 20 file.txt
tail -20 file.txt

# 实时监控文件
tail -f logfile.log

统计文件信息

# 统计行数、单词数、字符数
wc file.txt
# 输出:10  50  300 file.txt
# 含义:10行 50个单词 300个字符

# 只显示行数
wc -l file.txt

# 只显示单词数
wc -w file.txt

# 只显示字符数
wc -c file.txt

文件类型识别

# 识别文件类型
file document.pdf
# 输出:document.pdf: PDF document, version 1.4

file script.sh
# 输出:script.sh: Bourne-Again shell script, ASCII text

📦 压缩与解压

tar 命令

tar 是 Linux 最常用的打包/压缩工具。

# 常用参数:
# -c:创建(Create)
# -x:解压(eXtract)
# -v:显示过程(Verbose)
# -f:指定文件名(File)
# -z:用 gzip 压缩
# -j:用 bzip2 压缩

打包和压缩:

# 仅打包(不压缩)
tar -cvf archive.tar folder/

# 打包并用 gzip 压缩(最常用)
tar -czvf archive.tar.gz folder/

# 打包并用 bzip2 压缩(压缩率更高)
tar -cjvf archive.tar.bz2 folder/

解压:

# 解压 .tar 文件
tar -xvf archive.tar

# 解压 .tar.gz 文件
tar -xzvf archive.tar.gz

# 解压 .tar.bz2 文件
tar -xjvf archive.tar.bz2

# 解压到指定目录
tar -xzvf archive.tar.gz -C /tmp/

查看压缩包内容:

# 不解压,只查看内容
tar -tvf archive.tar.gz

💡 记忆技巧

想象你在"开坦克"(tank):

  • 创建:tar -czvf(Create,压缩装进坦克)
  • 解压:tar -xzvf(eXtract,从坦克里拿出来)

-f 一定要放在最后,因为后面紧跟文件名!

zip/unzip 命令

处理 Windows 常见的 .zip 格式。

# 安装
sudo apt install zip unzip -y

# 压缩
zip -r archive.zip folder/

# 解压
unzip archive.zip

# 解压到指定目录
unzip archive.zip -d /tmp/

# 查看压缩包内容
unzip -l archive.zip

gzip/gunzip 命令

# 压缩单个文件(会删除原文件)
gzip file.txt
# 生成:file.txt.gz

# 解压
gunzip file.txt.gz
# 或
gzip -d file.txt.gz

# 保留原文件
gzip -k file.txt

🔀 重定向

重定向可以改变命令的输入/输出方向。

输出重定向

# > 覆盖写入文件
echo "Hello" > file.txt

# >> 追加到文件末尾
echo "World" >> file.txt

# 2> 重定向错误输出
ls /nonexistent 2> error.log

# &> 同时重定向标准输出和错误输出
command &> all.log

# 把输出丢到黑洞(不显示)
command > /dev/null 2>&1

输入重定向

# < 从文件读取输入
wc -l < file.txt

# << 使用 Here Document
cat << EOF > file.txt
这是第一行
这是第二行
EOF

文件描述符

描述符名称说明
0stdin标准输入(键盘)
1stdout标准输出(屏幕)
2stderr标准错误(屏幕)
# 分别重定向输出和错误
command > output.log 2> error.log

# 错误输出重定向到标准输出
command 2>&1

🔗 管道

管道 | 可以把一个命令的输出作为另一个命令的输入。

# 查找包含 error 的行
cat log.txt | grep "error"

# 统计文件数量
ls | wc -l

# 查看进程并搜索
ps aux | grep nginx

# 排序并去重
cat names.txt | sort | uniq

# 分页查看长输出
cat bigfile.txt | less

管道链式操作

# 查找 /var/log 下最大的 5 个文件
du -sh /var/log/* 2>/dev/null | sort -hr | head -5

# 统计每种文件类型的数量
find . -type f | sed 's/.*\.//' | sort | uniq -c | sort -rn

# 查看系统中占用内存最多的 10 个进程
ps aux | sort -k4 -rn | head -10

🔍 文件内容处理

sort - 排序

# 按字母排序
sort file.txt

# 按数字排序
sort -n numbers.txt

# 倒序
sort -r file.txt

# 按第2列排序
sort -k2 file.txt

# 去除重复行后排序
sort -u file.txt

uniq - 去重

# 去除相邻的重复行(先要 sort)
sort file.txt | uniq

# 只显示重复的行
sort file.txt | uniq -d

# 统计每行出现次数
sort file.txt | uniq -c

cut - 截取列

# 截取第 1 列(以冒号分隔)
cut -d: -f1 /etc/passwd

# 截取第 1 和第 3 列
cut -d: -f1,3 /etc/passwd

# 截取字符位置 1-10
cut -c1-10 file.txt

tr - 字符转换

# 大写转小写
echo "HELLO" | tr 'A-Z' 'a-z'

# 删除所有数字
echo "abc123def" | tr -d '0-9'

# 压缩重复字符
echo "aaaaabbbcc" | tr -s 'a-z'
# 输出:abc

sed - 流编辑器

# 替换第一个匹配
sed 's/old/new/' file.txt

# 替换所有匹配
sed 's/old/new/g' file.txt

# 直接修改文件
sed -i 's/old/new/g' file.txt

# 删除空行
sed '/^$/d' file.txt

# 删除第 3 行
sed '3d' file.txt

# 只打印第 5 到 10 行
sed -n '5,10p' file.txt

awk - 文本处理神器

# 打印第 1 列
awk '{print $1}' file.txt

# 打印第 1 和第 3 列
awk '{print $1, $3}' file.txt

# 使用自定义分隔符
awk -F: '{print $1}' /etc/passwd

# 打印行号和内容
awk '{print NR, $0}' file.txt

# 求和
awk '{sum+=$1} END {print sum}' numbers.txt

# 条件过滤
awk '$3 > 100 {print $1}' data.txt

🔎 文件比较

diff - 比较文件差异

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

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

# 只显示不同的部分
diff -u file1.txt file2.txt

comm - 比较已排序的文件

# 比较两个排序过的文件
comm file1.txt file2.txt

📝 本章小结

操作命令示例
创建文件touchtouch file.txt
写入内容echo >echo "hi" > file.txt
追加内容echo >>echo "hi" >> file.txt
压缩tar -czvftar -czvf a.tar.gz dir/
解压tar -xzvftar -xzvf a.tar.gz
管道|cat f.txt | grep x
重定向> >>cmd > output.txt
排序sortsort file.txt
去重uniqsort f.txt | uniq
替换sedsed 's/a/b/g' file

💡 最有用的组合

# 查日志找错误
cat log.txt | grep -i error | tail -20

# 查进程
ps aux | grep nginx | grep -v grep

# 查磁盘占用
du -sh * | sort -hr | head -10

🚀 下一步

文件操作熟练了,接下来跟着长安学习 用户与权限,这可是 Linux 的核心概念!

—— 编程指南社区 · 长安

最后更新: 2025/12/1 15:56
Prev
🗂️ 文件系统
Next
👥 用户与权限