资讯详情

Linux系统篇--重定向与文件操作命令

📅 2026/10/15 19:40:11 | 华诺云谱 👁 阅读
Linux系统篇--重定向与文件操作命令
Linux系统篇–重定向与文件操作命令系列文章目录 Linux系统篇--常用指令 Linux系统篇--重定向与文件操作命令本篇前言在上一篇文章中我们掌握了pwd、ls、cd、mkdir、touch、rm等一批最基础的指令学会了在文件系统里“定位”和“创建删除”。但真正用起来你会发现光是会创建文件还不够——怎么往文件里写内容怎么快速查看一个几万行的日志怎么把一个命令的结果保存下来这些才是日常使用中更高频的需求。本篇聚焦这条主线先讲两个“输出内容”的命令echo和printf再引出 Linux 中极其重要的重定向机制输入、输出、追加然后系统梳理一批查看文件的命令——cat、tac、more、less、head、tail以及查手册的man。最后补充文件操作三件套cp、mv和时间命令date。这些命令组合起来就是一整套“往文件里写、从文件里读、按需查看、按需搬运”的完整能力务必熟练。一、echo —— 最常用的输出命令echo用于把参数输出到终端是 Shell 中使用频率最高的命令之一。1. 基本用法echo hello world hello world输出字符串并自动换行。不加引号也可以但如果内容含空格建议加引号更稳妥echo hello world hello world2. echo -n —— 不换行输出默认echo输出后会自动换行-n可以取消这个换行echo -n hello echo world hello world两行输出连在了一起这就是-n的效果。3. echo -e —— 开启转义默认情况下echo会把\n当普通字符原样输出。加上-e才会解析转义字符echo -e 第一行\n第二行\t制表符 第一行 第二行 制表符常用转义符转义符含义\n换行\t制表符Tab\\输出一个反斜杠\a响铃\b退格4. 三种引号的区别这是容易踩坑的地方一定要分清echo hello $USER # 单引号原样输出不解析变量 hello $USER echo hello $USER # 双引号解析变量 hello student echo whoami # 反引号命令替换先执行命令再输出结果 student单引号强引用里面的一切都当普通文本双引号弱引用变量$xxx、命令替换仍然生效反引号把命令的执行结果嵌入输出现代写法推荐$(命令)。二、printf —— 格式化输出echo简单直接但遇到“按格式对齐输出”就力不从心了——这时用printf。它来自 C 语言按格式串输出。1. 基本用法printf 格式串 参数1 参数2 ...示例printf 姓名%s年龄%d\n 张三 20 姓名张三年龄202. 常用格式符格式符含义%s字符串%d十进制整数%f浮点数%c单个字符%.2f保留两位小数的浮点数%5d宽度为 5、右对齐的整数%-5d宽度为 5、左对齐的整数printf %-10s|%5d\n apple 12 apple | 123. 与 echo 的对比二者的核心差别有两点务必记住对比项echoprintf换行默认自动换行默认不换行须显式写\n格式控制无支持格式化对齐转义需加-e默认解析转义符适用场景简单输出需要对齐、格式化的输出最容易踩的坑printf不会自动换行。忘了写\n后续输出就会全都挤在同一行。三、重定向重定向是 Linux 中一个极其重要的机制。默认情况下命令的输出送到屏幕、输入来自键盘重定向可以改变这两个“默认通道”把输出写进文件、或从文件读取输入。1. 输出重定向—— 覆盖写入echo hello test.txt cat test.txt hello把echo本应送到屏幕的内容改送到了test.txt。重点提醒是覆盖文件原有内容会被全部清空替换echo hello test.txt echo world test.txt # 覆盖了上面的内容 cat test.txt world哪怕文件里有几千行内容一条也会瞬间清空。这是新手最容易造成数据丢失的操作。2. 追加重定向—— 追加写入想保留原内容、只在末尾加新内容就用echo hello test.txt echo world test.txt # 追加不清空原内容 cat test.txt hello world与的区别是本节的命脉单箭头覆盖双箭头追加。3. 输入重定向—— 从文件读入把命令的输入来源从键盘改为文件cat test.txt # 相当于把 test.txt 的内容“喂”给 cat hello world4. 标准输入、输出、错误Linux 每个进程默认打开三个通道用文件描述符表示描述符名称默认去向0标准输入 stdin键盘1标准输出 stdout屏幕2标准错误 stderr屏幕所以其实是1的简写。区分正常输出和错误输出很有用ls /notexist out.txt 2 err.txt # 正确输出进 out.txt错误信息进 err.txt常用组合命令 all.txt 21 # 把标准输出和标准错误都写入同一个文件 命令 all.txt # 同上bash 提供的简写 命令 2 /dev/null # 丢弃错误信息扔进“黑洞”/dev/null是 Linux 的“黑洞文件”写进去的内容会被直接丢弃常用于屏蔽不需要的输出。5. 利用 cat 配合追加重定向写入内容这是实际操作中非常好用的一个组合。cat不加文件名时会从标准输入读取内容并输出——配合追加重定向就能把键盘输入的内容写进文件cat notes.txt 今天学习了重定向 Ctrl D # 按 CtrlD 结束输入现在notes.txt末尾就多了这一行。如果要一次写入多行可以用多行重定向Here Documentcat notes.txt EOF 第一行内容 第二行内容 EOF EOF表示“后续内容一直读到EOF这一行为止”中间的换行会被完整保留。这个写法在写脚本、生成配置文件时极为常用比逐行echo 整洁得多。也可以用cat合并多个文件并追加到目标文件cat a.txt b.txt all.txt # 把 a、b 的内容依次追加到 all.txt 末尾四、查看文件的命令写进去的内容总得能看。下面这几个命令各有分工。1. cat —— 一次性显示全部内容cat test.txtcatconcatenate最基本的用途就是把文件内容全部打印到屏幕。适合内容较少的文件——文件几百行以上时内容会刷屏而过来不及看。常用选项cat -n test.txt # 显示行号含空行 cat -b test.txt # 只给非空行编号 cat -s test.txt # 把连续多个空行压缩成一个 cat -A test.txt # 显示不可见字符如 $ 表示行尾cat还有个经典用法——合并文件cat a.txt b.txt c.txt # 把两个文件拼接成一个新文件2. tac —— 倒序显示tac就是cat反过来写功能也是反过来——按行倒序输出cat test.txt 第一行 第二行 第三行 tac test.txt 第三行 第二行 第一行注意tac是以行为单位倒序不是把每个字符倒过来。查看日志时想从最后一条往上看它很好用。3. more —— 分页显示只能向下more test.txt内容多时more会一屏一屏地显示。它的操作键比较“复古”操作作用空格向下翻一屏回车向下翻一行b向上翻一屏部分实现支持q退出more的局限只能向下翻翻过去就回不来了也不支持搜索。4. less —— 分页显示可上下翻推荐less是more的增强版——“less is more”。功能更强也是实际使用中最推荐的查看工具less test.txt常用操作键操作作用空格 /f向下翻一屏b向上翻一屏↑/↓上下移动一行g/G跳到文件开头 / 末尾/关键词向下搜索n/N跳到下一个 / 上一个匹配q退出less不会一次性把整个文件读进内存打开大文件也很快这一点比cat、more都有优势。5. 小结对比命令特点适用场景cat一次全部输出不带分页小文件、拼接文件tac按行倒序输出倒着看日志more分页只能向下简单浏览less分页可上下翻、可搜索查看大文件推荐五、head 与 tail —— 只看头尾很多时候我们并不需要看全部内容只想看开头几行或结尾几行。1. head —— 看开头head test.txt # 默认显示前 10 行 head -n 5 test.txt # 显示前 5 行 head -5 test.txt # 简写效果相同 head -c 20 test.txt # 按字节显示前 20 个字节2. tail —— 看结尾tail test.txt # 默认显示后 10 行 tail -n 5 test.txt # 显示后 5 行 tail -5 test.txt # 简写tail有个head没有的杀手级选项——-ffollowtail -f /var/log/syslog它会持续跟踪文件末尾文件有新增内容就实时打印出来。这是排查线上问题的标准手段——开着tail -f日志一有新动静立刻就能看到。想退出按Ctrl C。3. 组合使用两个命令可以用管道串起来取“中间的一段”head -n 20 test.txt | tail -n 5 # 取第 16~20 行先用head取出前 20 行再用tail取这 20 行里的后 5 行合起来就是第 16 到第 20 行。这个套路在处理大文件时很实用。六、man —— 随身手册命令太多记不住怎么办man就是 Linux 自带的说明书。man ls它会显示ls的完整手册命令说明、所有选项、示例等。进入后操作方式和less类似操作作用空格 /b上下翻屏/关键词搜索n下一个匹配q退出手册如果记不清命令的名字可以用-k按关键词搜索man -k copy # 搜索所有与 copy 相关的手册懒得看完整手册、只想知道有哪些选项时直接试试--helpls --help记住一个原则遇到不认识的命令或选项第一反应就应该是man它。这比搜索引擎更快、更准确。七、cp —— 复制cpcopy用于复制文件或目录。1. 基本用法cp 源文件 目标文件示例cp a.txt b.txt # 复制 a.txt 为 b.txt cp a.txt /tmp/ # 复制 a.txt 到 /tmp 目录下保持文件名2. 复制目录要加 -r直接cp一个目录会报错必须加递归选项cp -r project project_bak # 递归复制整个目录3. 常用选项选项作用-r递归复制目录-i覆盖前询问确认-f强制覆盖不询问-v显示复制过程-p保留属性权限、时间等-a归档模式等价于-dpr最完整cp -rv project project_bak # 复制并显示每一步 cp -a project project_bak # 完整保留所有属性特别注意cp遇到同名文件会直接覆盖不留痕迹。建议给cp加-i或使用alias cpcp -i。八、mv —— 移动与重命名mvmove一个命令顶两个功能区别只在目标位置。1. 重命名源和目标在同一个目录时mv就是重命名mv old.txt new.txt2. 移动目标是一个已存在的目录时mv就是移动mv a.txt /tmp/ # 把 a.txt 移动到 /tmp mv a.txt /tmp/b.txt # 移动并顺便改名 mv dir1 /tmp/ # 移动目录不需要 -r和cp的重要区别mv移动目录不需要-r因为它是直接改路径不涉及递归复制。3. 常用选项mv -i a.txt b.txt # 覆盖前询问 mv -f a.txt b.txt # 强制覆盖 mv -v a.txt b.txt # 显示过程mv同样会覆盖同名文件。另外要注意mv在同一分区内是“改个名字”瞬间完成跨分区移动则要真正拷贝数据耗时会明显变长。九、date —— 时间与时间戳1. 显示当前时间date Wed Oct 14 22:49:09 CST 20262. 格式化输出用接格式串自定义显示形式date %Y-%m-%d 2026-10-14 date %Y-%m-%d %H:%M:%S 2026-10-14 22:49:09常用格式符格式符含义%Y四位年份%m月份01–12%d日期01–31%H小时00–23%M分钟%S秒%sUnix 时间戳3. 时间戳Unix 时间戳指从 1970 年 1 月 1 日 00:00:00 UTC 起到现在的总秒数——一个不管时区、不管格式全球唯一的整数。date %s 1792027749时间戳反查日期用-d 的形式date -d 1792027749 Wed Oct 14 22:49:09 CST 2026 date -d 1792027749 %Y-%m-%d 2026-10-14为什么非要用时间戳因为它是一个纯粹的数字比较大小即比较先后、做差即得到秒数间隔、排序天然有序、存储不占空间。所以日志记录、监控告警、程序打时间点底层用的都是时间戳只在展示时才转成人类可读的格式。4. 时间戳的实际用法echo 任务开始$(date %s) task.log # 把时间戳追加进日志配合前面学的重定向就能拼出一条带时间戳的日志记录——这也是后面写 Shell 脚本时的常见套路。十、综合小实战把本篇的知识串起来做一件事创建一个带时间戳的日志文件并实时监控它。第一步用输入重定向创建初始内容cat app.log EOF 2026-10-14 22:49:09 服务启动 2026-10-14 22:49:10 等待请求 EOF第二步用追加重定向 时间戳追加新记录echo $(date %Y-%m-%d %H:%M:%S) 收到新请求 app.log第三步开两个终端一个持续追加一个用tail -f实时监控tail -f app.log新追加的记录会立刻出现在屏幕上。至此echo/printf负责生成内容重定向负责写入cat负责拼接head/tail/less负责查看man负责查漏——一条完整的命令流水线就搭起来了。总结本篇的核心可以归为两大块记忆重定向覆盖写入、追加写入、从文件读入、2单独处理错误、合并输出与错误、/dev/null丢弃输出。牢记“单箭头覆盖、双箭头追加”这是最容易出错也最需要警惕的一点。文件查看与操作echo输出-n不换行、-e解析转义、printf格式化输出注意不会自动换行查看用cat小文件、tac倒序、more只能向下、less可上下翻搜索推荐、head看头、tail看尾-f实时监控man是你的随身手册。文件操作用cp复制目录要-r、mv一个命令同时负责移动和重命名date负责时间与时间戳date %s取时间戳、date -d 反查日期。这些命令单独看都很简单真正的威力在于组合——head | tail取中间段cat file EOF批量写文件tail -f配重定向做实时日志。多在自己的终端里敲几遍把命令练成条件反射后面的 Shell 脚本、权限管理、进程控制才能顺理成章。后续我们将继续深入 Linux 的相关知识敬请期待。本文是《Linux系统篇》系列的第二篇如需命令速查表或练习环境可在评论区留言。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑