当前位置: 首页 > news >正文

Linux-文件与文本管理

文章目录

  • 一、文件管理
    • 1. cat
    • 2. tac
    • 3. nl
    • 4. more
    • 5. less
    • 6. head
    • 7. tail
    • 8. mkdir
    • 9. rm
    • 10. cp
    • 11. mv
    • 12. ln
    • 13. grep
    • 14. find
    • 15. tar
    • 16. gzip / bzip2
    • 17. zip / unzip
  • 二、文本管理
    • 1.sort —— 行排序
    • 2.uniq —— 相邻去重+计数
    • 3.grep —— 找关键字
    • 4.egrep —— 加强版 grep
    • 5.fgrep —— 把正则当普通字串
    • 6.wc —— 数一数
    • 7.comm —— 两个文件左右对比
    • 8.diff —— 行差异高亮
    • 9.管道与重定向
    • 文本编辑工具:vi / vim —— 全能编辑器
      • 1.启动与退出(3 种姿势)
      • 2.模式总览(记住 3 个圈)
      • 3.光标移动(手指不离开主键盘)
      • 4.增删改查(最常用的 8 个)
      • 5.块操作(列模式)
      • 6.复制/剪切/粘贴(跨文件也行)
      • 7.窗口分屏(vim 专属)
      • 8.保存、另存、批量替换
      • 9.配置文件(永久行号)
      • 10.常用命令速记
    • 文本编辑工具:nano
      • 30 秒上手流程


一、文件管理

1. cat

参数作用
-A等价 -vET,显示所有不可见字符
-b非空行编号
-E在每行结尾显示 $
-n空行也编号
-T把 TAB 显示为 ^I
-v显示不可见字符
# 示例 1:-A
$ printf "a\tb\n" | cat -A
a^Ib$# 示例 2:-b
$ cat -b /etc/issue1	\S2	Kernel \r on an \m# 示例 3:-E
$ printf "line\n" | cat -E
line$# 示例 4:-n
$ printf "a\n\nb\n" | cat -n1	a2	3	b# 示例 5:-T
$ printf "col1\tcol2\n" | cat -T
col1^Icol2

2. tac

参数作用
-b分隔符前附加
-r分隔符当正则
-s指定分隔符
# 示例 1:无参
$ printf "1\n2\n3\n" | tac
3
2
1# 示例 2:-b -s
$ printf "2025-07-20 11:11:11" | tac -b -s ':'
11:11:11 07-20 2025-

3. nl

参数作用
-b a空行也编号
-b t空行不编号(默认)
-n ln行号最左
-n rn行号右对齐,无前导 0
-n rz行号右对齐,前导 0
-w N行号栏位宽度
# 示例 1:-b a
$ printf "a\n\nb\n" | nl -b a1	a2	3	b# 示例 2:-n rz -w 3
$ printf "x\ny\n" | nl -n rz -w 3
001	x
002	y

4. more

参数作用
+n从第 n 行开始
-n每屏 n 行
-d显示提示语 “–More–”
+/pattern从匹配行开始
# 示例 1:+3
$ more +3 /etc/passwd | head -1
daemon:x:2:2:daemon:/sbin:/sbin/nologin# 示例 2:-2
$ more -2 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
--More--

5. less

参数作用
-N显示行号
-S不换行截断
-i搜索忽略大小写
-p pat启动后直接跳到匹配行
# 示例 1:-N
$ less -N +2 /etc/issue2 Kernel \r on an \m# 示例 2:-S
$ echo "very long line ............................................" | less -S
(长行不自动换行)

6. head

参数作用
-n N前 N 行
-c N前 N 字节
-q抑制文件名(多文件)
-v总是显示文件名
# 示例 1:-n
$ head -n2 /etc/os-release
NAME="Ubuntu"
VERSION="22.04.3 LTS (Jammy Jellyfish)"# 示例 2:-c
$ head -c8 /etc/passwd
root:x:0

7. tail

参数作用
-n N末 N 行
-c N末 N 字节
-f实时追加输出
-F带重试的 -f
# 示例 1:-n
$ tail -n1 /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin# 示例 2:-f(2 秒后 Ctrl-C)
$ (sleep 2 && echo x >> demo.log) & tail -f demo.log
x

8. mkdir

参数作用
-m设定权限
-p递归创建
# 示例 1:-m
$ mkdir -m 700 dir1
$ ls -ld dir1
drwx------ 2 alice alice 4096 Jul 20 11:19 dir1# 示例 2:-p
$ mkdir -p a/b/c
$ ls a/b/c
(empty)

9. rm

参数作用
-i逐个确认
-f强制
-r递归
-v显示过程
# 示例 1:-i
$ rm -i *.tmp
rm: remove regular empty file '1.tmp'? y# 示例 2:-rfv
$ rm -rfv old_dir
removed 'old_dir/file1'
removed directory: 'old_dir'

10. cp

参数作用
-a归档复制(= -dpR)
-i交互
-f强制
-p保留属性
-r递归
-v显示
-l硬链接
-s软链接
# 示例 1:-a
$ cp -a dir1 dir2
$ ls -ld dir2
drwxr-xr-x 2 alice alice 4096 Jul 20 11:20 dir2# 示例 2:-l
$ cp -l file.txt hardlink
$ ls -i file.txt hardlink
1310721 file.txt  1310721 hardlink# 示例 3:-s
$ cp -s /etc/hosts hosts.link
$ ls -l hosts.link
lrwxrwxrwx 1 alice alice 10 Jul 20 11:20 hosts.link -> /etc/hosts

11. mv

参数作用
-i交互
-f强制
-v显示
# 示例 1:-v
$ mv -v old.txt new.txt
renamed 'old.txt' -> 'new.txt'# 示例 2:-i
$ mv -i new.txt new.txt
mv: 'new.txt' and 'new.txt' are the same file

12. ln

参数作用
-s软链接
-f强制覆盖
-i交互
# 示例 1:-s
$ ln -s /etc/passwd pwd.link
$ readlink pwd.link
/etc/passwd# 示例 2:-f
$ ln -sf /etc/hosts pwd.link
$ readlink pwd.link
/etc/hosts

13. grep

参数作用
-i忽略大小写
-n行号
-r递归
-v反向
-c计数
-l只列文件名
# 示例 1:-i
$ echo "Error" | grep -i error
Error# 示例 2:-n
$ grep -n root /etc/passwd
1:root:x:0:0:root:/root:/bin/bash# 示例 3:-c
$ grep -c false /etc/passwd
42$ grep test test* #查找前缀有test的文件包含test字符串的文件  
testfile1:This a Linux testfile! #列出testfile1 文件中包含test字符的行  
testfile_2:This is a linux testfile! #列出testfile_2 文件中包含test字符的行  
testfile_2:Linux test #列出testfile_2 文件中包含test字符的行 $ grep -r update /etc/acpi #以递归的方式查找“etc/acpi”  
#下包含“update”的文件  
/etc/acpi/ac.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of IO.)  
Rather than  
/etc/acpi/resume.d/85-anacron.sh:# (Things like the slocate updatedb cause a lot of  
IO.) Rather than  
/etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update $ grep -v test* #查找文件名中包含test 的文件中不包含test 的行  
testfile1:helLinux!  
testfile1:Linis a free Unix-type operating system.  
testfile1:Lin  
testfile_1:HELLO LINUX!  
testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
testfile_1:THIS IS A LINUX TESTFILE!  
testfile_2:HELLO LINUX!  
testfile_2:Linux is a free unix-type opterating system.  

14. find

参数作用
-name文件名通配
-type f/d文件/目录
-size +N大于 N
-mtime +N修改时间
-exec执行命令
# 示例 1:-name
$ find /etc -name "*.conf" | head -3
/etc/resolv.conf
/etc/host.conf
/etc/logrotate.conf# 示例 2:-type d -empty
$ find /tmp -type d -empty
/tmp/.X11-unix# 示例 3:-mtime +7 -exec ls -lh {} \;
$ find /var/log -mtime +7 -type f -exec ls -lh {} \; | head -1
-rw-r----- 1 syslog adm 128K Jul 12 10:10 /var/log/syslog.1

15. tar

参数作用
-c创建
-x解包
-t列表
-v详细
-f指定文件名
-zgzip
-jbzip2
-C指定解压目录
# 示例 1:打包+压缩
$ tar czvf site.tar.gz index.html
index.html# 示例 2:列表
$ tar tzf site.tar.gz
index.html# 示例 3:解压到指定目录
$ tar xzf site.tar.gz -C /tmp
$ ls /tmp/index.html
/tmp/index.html

16. gzip / bzip2

参数作用
-k保留源文件
-d解压
-r递归压缩目录内文件
# 示例 1:gzip -k
$ gzip -k big.log
$ ls big.log*
big.log  big.log.gz# 示例 2:bzip2 -d
$ bzip2 -k data.sql
$ bzip2 -d data.sql.bz2
$ ls data.sql*
data.sql

17. zip / unzip

参数作用
-r递归
-d解压到目录
# 示例 1:压缩目录
$ zip -r mydir.zip mydiradding: mydir/ (stored 0%)adding: mydir/file1 (stored 0%)# 示例 2:解压到指定目录
$ unzip mydir.zip -d /tmp
$ ls /tmp/mydir
file1

二、文本管理

下面先生成一个通用示例文本文件 demo.txt,后续所有命令均直接引用该文件

# === 创建通用示例文件 demo.txt ===
cat > demo.txt <<'EOF'
# 第1行  空注释
# 第2行  又一个空注释
IP:192.168.1.1
IP:10.0.0.1
error:disk full
ERROR:Disk Full
warning:low memory
WARNING:LOW MEMORY
info:service started
INFO:Service Started
EOF

文件内容如下(可直接 cat demo.txt 验证):

# 第1行  空注释
# 第2行  又一个空注释
IP:192.168.1.1
IP:10.0.0.1
error:disk full
ERROR:Disk Full
warning:low memory
WARNING:LOW MEMORY
info:service started
INFO:Service Started

1.sort —— 行排序

选项一句话秒懂
-n把数字当数字排,不再是按“字母表”排
-r反着来,最大/最晚放最前
-k N“只看第 N 列”再排
-t c用 c 当分隔符,决定“列”在哪
-u排完顺便去重
# 按 IP 数值升序
$ sort -t':' -k2 -n demo.txt
# 倒序+去重
$ sort -ur demo.txt

2.uniq —— 相邻去重+计数

选项一句话秒懂
-c把重复次数顺便数出来
-d只要“出现过两次以上”的行
-u只要“孤单单只出现一次”的行
$ sort demo.txt | uniq -c | head -2

3.grep —— 找关键字

选项一句话秒懂
-i不区分大小写
-n顺便告诉你行号
-v反着找,不要的行列出来
-c告诉你“有几行”匹配
-r整个目录一起翻
$ grep -ni 'error' demo.txt

4.egrep —— 加强版 grep

选项一句话秒懂
-o只把“匹配到的部分”抠出来
-i同上,大小写不挑
$ egrep -o '([0-9]+\.){3}[0-9]+' demo.txt

5.fgrep —— 把正则当普通字串

选项一句话秒懂
-x整行必须一模一样
$ fgrep -x 'IP:192.168.1.1' demo.txt

6.wc —— 数一数

选项一句话秒懂
-l数行
-w数单词(空格隔开的都算)
-c数字节
-L找“最长那一行”有多长
$ wc -l demo.txt

7.comm —— 两个文件左右对比

选项一句话秒懂
-1隐藏“只在文件1”里的行
-2隐藏“只在文件2”里的行
-3隐藏“两边都有”的行
$ comm -12 f1 f2   # 只留交集

8.diff —— 行差异高亮

选项一句话秒懂
-u把差异打包成“补丁格式”
-i大小写当一样看
$ diff -u demo.txt demo2.txt

9.管道与重定向

符号一句话秒懂
>把结果“倒”进文件(覆盖)
>>把结果“追加”到文件尾巴
|把左边命令的成品直接塞给右边命令
$ grep error demo.txt | wc -l

文本编辑工具:vi / vim —— 全能编辑器


1.启动与退出(3 种姿势)

选项一句话秒懂
+n打开时光标直接跳到第 n 行
+/pat打开后直接跳到含 pat 的行

退出:

  • :wq 保存并退出
  • :q! 不保存强退
  • :x 保存+退出(同 :wq
命令效果
vi demo.txt普通打开
vi +3 demo.txt直接跳到第 3 行
vi +/error demo.txt直接跳到含 error 的行
$ vi +/warning demo.txt

所有操作都基于同一个示例文件 demo.txt

# 准备一个干净练习文件
cat > demo.txt <<'EOF'
# 空注释
IP:192.168.1.1
error:disk full
warning:low memory
EOF

2.模式总览(记住 3 个圈)

  1. 普通模式(默认):键盘=命令
  2. 插入模式(按 i/a/o 进入):键盘=打字
  3. 末行模式(按 : 进入):键盘=发指令

切换:

  • 任何模式 → 普通模式:Esc
  • 普通 → 插入:i/a/o
  • 普通 → 末行::

3.光标移动(手指不离开主键盘)

按键移动
h j k l左 下 上 右
w / b下一个/上一个单词
0行首
^行首非空字符
$行尾
gg文件第一行
G文件最后一行
10G第 10 行

4.增删改查(最常用的 8 个)

动作按键
插入i 光标前,a 光标后,o 下一行
删除x 删字符,dd 删整行,3dd 删 3 行
复制yy 复制整行,2yy 复制 2 行
粘贴p 粘到下一行,P 粘到上一行
撤销u 撤销,Ctrl+r 重做
替换r 替换光标处字符,R 连续替换
查找/text 向下,?text 向上
替换整文件:%s/old/new/g

5.块操作(列模式)

  1. Ctrl+v → 进入 可视块
  2. 移动光标选列
    • d 删除块
    • y 复制块
    • I/A 在块前/后插入

示例:
把 demo.txt 里所有行首加 #

Ctrl+v  ↓  选中三行  →  I  →  #  →  Esc

6.复制/剪切/粘贴(跨文件也行)

  • 普通模式
    yy 复制当前行
    3yy 复制 3 行
    dd 剪切当前行
  • 粘贴
    p 贴到光标下一行
  • 复制到系统剪贴板(需 vim-gtk)
    "+yy 复制,"+p 粘贴

7.窗口分屏(vim 专属)

命令效果
:split file2水平分屏打开 file2
:vsplit file2垂直分屏
Ctrl+w w在窗格间切换
Ctrl+w q关闭当前窗格

8.保存、另存、批量替换

末行命令作用
:w保存
:w new.txt另存为
:wq / ZZ保存并退出
:q!强制退出
:%s/error/ERROR/g全文件替换
:5,10s/old/new/g仅 5-10 行替换

9.配置文件(永久行号)

在用户目录建 ~/.vimrc

set nu              " 永久行号
set tabstop=4       " Tab=4 空格
set expandtab       " Tab 转空格
syntax on           " 语法高亮

10.常用命令速记

  1. vi demo.txt
  2. gg 到顶
  3. o 新行,输入 IP:172.16.0.1
  4. Esc 回普通
  5. /error 跳到 error 行
  6. dd 删除整行
  7. u 撤销
  8. :set nu 看行号
  9. :%s/IP:/ip:/g 全部改小写
  10. :wq 保存退出
场景按键口诀
打开文件vi 文件名vi 文件名直接进
退出不保存Esc:q!强制退出 q!
保存并退出Esc:wq写完走人 wq
进入插入模式i 光标处插入 / o 下一行插入i 写,按 o 开新行
移动光标h j k l 左下上右键盘箭头不用抬手
删除/剪切 整行dd双击 d 删掉一行
撤销uu 回退
搜索/关键词 + Enter/apple 找苹果
复制 / 粘贴整行yy 复制 → p 粘贴yy p 一条龙

一句话记忆:

i 写,Esc 回,:wq 保存;/ 搜,dd 删剪,u 撤销,yy p 复制粘贴!


文本编辑工具:nano

操作按键记忆口诀
打开/新建文件nano 文件名nano 后面直接跟文件
移动光标方向键 / Ctrl+Y / Ctrl+V 上下翻页方向键最直观
保存Ctrl+O → 回车O = Output
退出Ctrl+XX = eXit
剪切整行Ctrl+KK = Kill
粘贴Ctrl+UU = Un-kill
撤销Alt+U按住 Alt
搜索Ctrl+WW = Where
替换*Ctrl+*反斜杠像“替换”
显示行号启动加 -lAlt+Shift+3一目了然

30 秒上手流程

nano ~/.bashrc          # 打开
# 修改文件
Ctrl+O 回车            # 保存
Ctrl+X                 # 退出

一句话记忆:

O 保存,X 退出,W 搜索,K 剪,U 贴

http://www.dtcms.com/a/301289.html

相关文章:

  • 【语义分割】记录2:yolo系列
  • Java面试实战:安全框架与大数据技术深度解析
  • 代码随想录算法训练营二十八天|动态规划part01
  • C语言自定义数据类型详解(四)——联合体
  • 欧拉图与欧拉回路
  • Windows---动态链接库Dynamic Link Library(.dll)
  • 裴蜀定理应用
  • Ubuntu Linux 如何配置虚拟内存 —— 一步一步配置 Ubuntu Server 的 NodeJS 服务器详细实录8
  • GRPO强化学习缓解多模态大模型OCR任务的幻觉思路及数据生成思路
  • 【Oracle】Oracle分区表“排雷“指南:当ORA-14400错误找上门时如何优雅应对
  • 【数据结构与算法】数据结构初阶:详解排序(二)——交换排序中的快速排序
  • 【Web安全】深入浅出理解“SQL注入-伪静态注入”及空格限制绕过技巧
  • linux 板卡实现vxi11服务
  • Qwen3安装使用教程:引领推理型大模型新时代
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-35,(知识点:三极管知识点,电路电压计算题,三极管电压计算,PNP三极管)
  • linux 部署 flink 1.15.1 并提交作业
  • 数据上新|最新省、地级市农业新质生产力2002-2025
  • Linux vimgrep 详解
  • 深度学习篇---优化器
  • 上位机知识篇---Tailwind CSS
  • Linux内核设计与实现 - 第15章 进程地址空间
  • python-列表推导式,迭代器和生成器,上下文管理器
  • Unity3D 平台宏定义
  • 双指针算法技巧
  • CCF-GESP 等级考试 2025年6月认证C++七级真题解析
  • PyQt5图形和特效(Qss的UI美化)
  • zabbix-agent静默安装
  • MinIO 用户管理与权限控制详解
  • LINUX727 磁盘管理回顾1;配置文件回顾
  • 数据类型处理流讲解