ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

一次发布,玩转Linux文件管理核心操作

2026/9/30 9:09:24 拓冰建站 浏览量
一次发布,玩转Linux文件管理核心操作 Linux小白修炼日记 Day 05文件管理、查找与归档一次搞懂应用发布的核心操作一、从一次应用发布开始二、建立应用目录并管理文件2.1 建立若依目录结构2.2 使用 cp 复制文件和目录2.3 使用 mv 移动文件和重命名2.4 使用 rm 删除文件和目录三、认识文件对象3.1 Linux 常见文件类型【认知】3.2 stat、inode 与时间属性【认知】四、先理解硬链接再引出符号链接4.1 硬链接为同一 inode 增加文件名【认知】4.2 硬链接的两个限制4.3 符号链接用路径突破硬链接限制4.4 两种链接怎样选择【认知】五、认识文件查找工具5.1 准备查找样本5.2 先判断要找什么六、使用 find 实时查找文件6.1 find 的基本结构6.2 按名称、类型、大小和时间查找6.3 使用 AND 和 OR 组合条件6.4 使用 -exec 处理查找结果七、归档、压缩与恢复7.1 使用 tar 归档并恢复7.2 按时间查找并归档近期日志7.3 检查归档结果7.4 记录实验结果八、课后拓展选做8.1 删除符号链接与排查断链8.2 使用 xargs 传递查找结果8.3 使用 scp 和 rsync 复制到远程主机【认知】8.4 Shell 通配符【认知】九、写在最后大家好我是正在转行运维的小白。今天是我更新 Linux 学习日记的第五天。前四天学会了装系统、登录、命令执行模型、路径与文本编辑。今天进入运维最高频的操作文件管理。这一课从一次若依应用发布出发把 cp、mv、rm、ln、find、tar 全部串起来。最打动我的是“current 软链接切换版本”这个设计——发布新版本、回退旧版本只需要改一条链接这才是运维该有的思路。一、从一次应用发布开始若依应用发布时经常需要保存多个版本再用一个固定入口指向当前版本。本节要建立的目录结构目录作用releases保存不同版本的应用文件shared保存多个版本共用的配置logs保存应用日志backup保存操作前备份current稍后建立的稳定版本入口实验约定主机名cc-vm用户cc。whoamihostnamemkdir-p~/cc/day05cd~/cc/day05pwd二、建立应用目录并管理文件2.1 建立若依目录结构mkdir-p~/cc/ruoyi/{releases,shared,logs,backup}mkdir-p~/cc/ruoyi/releases/{1.0.0,1.1.0}tree-L2~/cc/ruoyitree以树形结构显示目录-L 2表示只展开两层。mkdir -p可以一次建立多级目录目标已存在时也不会报错。花括号{}由 Shell 展开一条命令就能创建多个同级目录。2.2 使用 cp 复制文件和目录cp是copy的缩写复制完成后源对象仍然存在。基本语法cp[选项]源 目标源准备复制的文件或目录目标复制到哪里或复制后用什么名称先准备实验文件touch ~/cc/day05/dir1/file1.txt echo hello ~/cc/day05/dir1/file2.txt ls -l ~/cc/day05/dir11复制到另一个目录~/cc/day05/dir2/ ls -l ~/cc/day05/dir1 ~/cc/day05/dir22两个目录中都能看到file1.txt说明复制不删除源文件。复制时直接指定新名称~/cc/day05/dir2/file1-copy.txtt常用选项选项作用适用场景-v显示实际复制路径观察实际复制路径-i覆盖前询问手工操作重要文件-r递归复制目录及内容普通目录复制-a保留目录结构和主要属性配置备份、应用目录备份观察覆盖风险echo new ~/cc/day05/dir1/file1.txt cp -iv ~/cc/day05/dir1/file1.txt \ ~/cc/day05/dir2/file1.txt cat ~/cc/day05/dir2/file1.txtt看到覆盖提示后先输入n再查看目标文件确认确实要覆盖后再执行同一条cp -iv输入y目标内容才会变new。⚠️脚本和自动化环境不能依赖交互询问因此仍要先确认源、目标和影响范围。准备若依案例文件touch~/cc/ruoyi/releases/1.0.0/app.jarechoRuoYi 1.0.0~/cc/ruoyi/releases/1.0.0/index.htmlechoRuoYi 1.1.0~/cc/ruoyi/releases/1.1.0/index.htmlechoserver.port8080~/cc/ruoyi/shared/application.confcp-av~/cc/ruoyi/releases/1.0.0\~/cc/ruoyi/backup/ls-l~/cc/ruoyi/backup/1.0.02.3 使用 mv 移动文件和重命名mv是move的缩写有两个常见用途把文件或目录移动到另一个位置在当前位置修改名称基本语法mv[选项]源 目标重命名~/cc/day05/dir1/file3.txt ls -l ~/cc/day05/dir11原来的file2.txt消失当前位置出现file3.txt——这就是重命名。移动到另一个目录~/cc/day05/dir2/ ls -l ~/cc/day05/dir1 ~/cc/day05/dir22⚠️ 与cp不同移动完成后原位置不再保留这个文件。手工操作重要文件时可以用mv -iv让命令显示路径并在覆盖前询问。2.4 使用 rm 删除文件和目录rm是remove的缩写。它会直接删除对象默认没有回收站。基本语法rm[选项]文件或目录常用选项选项作用使用提醒-i删除前逐个询问适合初学阶段和重要文件-v显示实际删除对象便于核对结果-r递归删除目录及内容先确认完整路径和目录内容-f不询问强制处理自动化中才按需用不能与不确定路径组合删除前固定执行三步1. 确认当前目录 2. 查看命令将要处理的实际对象 3. 只在确定的实验目录中执行删除先创建临时文件pwd ls -d ~/cc/day05/dir2/file{1..3}.tmp rm -iv ~/cc/day05/dir2/file{1..3}.tmp ls -la ~/cc/day05/dir22递归删除练习touch ~/cc/day05/delete-test/dir1/file1.txt ls -la ~/cc/day05/delete-test/dir1 rm -riv ~/cc/day05/delete-test ls -ld ~/cc/day05/delete-testt最后一条会提示目录不存在说明整个练习目录已经删除。⚠️不要把不确定的批量匹配、空变量和递归删除直接组合执行也不要在根目录或系统目录练习递归删除。三、认识文件对象3.1 Linux 常见文件类型【认知】Linux 不只把普通文档叫文件目录、链接、设备、管道、Socket 也使用统一的文件接口表示。ls -l第一列的首字符表示文件类型首字符文件类型常见示例作用-普通文件/etc/hosts保存配置、日志、程序或数据d目录/var/log组织文件名和层次l符号链接/etc/os-release保存另一条目标路径b块设备磁盘设备按数据块访问c字符设备/dev/null、终端按字符流访问p命名管道Pipe进程间传递数据sSocket/run下部分对象本机进程通信file/etc/hosts /etc /dev/null /etc/os-releasels-ld/etc/hosts /etc /dev/null /etc/os-release3.2 stat、inode 与时间属性【认知】文件名保存在目录中指向文件的 inode。inode 记录文件类型、大小、权限、所有者、时间属性及数据位置等信息。ls-li~/cc/cc-vm/day05/dir1/file1.txtstat~/cc/cc-vm/day05/dir1/file1.txtstat-cname%n inode%i size%s links%h mtime%y ctime%z\~/cc/cc-vm/day05/dir1/file1.txt常用字段字段含义常见用途inode文件在当前文件系统中的编号判断不同名称是否指向同一 inodesize文件内容字节数判断文件是否异常增长links指向该 inode 的硬链接数观察硬链接关系mtime文件内容最后修改时间判断配置或日志何时被改ctimeinode 信息最后变化时间辅助调查权限、属主、链接变化atime文件最后访问时间辅助观察读取行为⚠️ctime 不是创建时间。atime 的更新还受文件系统挂载策略影响。通过一次修改观察 mtimestat-c修改前%y~/cc/cc-vm/day05/dir1/file1.txtecholinux~/cc/cc-vm/day05/dir1/file1.txtstat-c修改后%y~/cc/cc-vm/day05/dir1/file1.txt四、先理解硬链接再引出符号链接4.1 硬链接为同一 inode 增加文件名【认知】硬链接是同一个 inode 的另一个文件名。两个文件名没有主次之分修改任意一个看到的都是同一份数据。mkdir-p~/cc/cc-vm/day05/dir1 ~/cc/cc-vm/day05/dir2echohello~/cc/cc-vm/day05/dir1/file1.txtrm-f~/cc/cc-vm/day05/dir2/file2.txtln~/cc/cc-vm/day05/dir1/file1.txt\~/cc/cc-vm/day05/dir2/file2.txtls-li~/cc/cc-vm/day05/dir1/file1.txt\~/cc/cc-vm/day05/dir2/file2.txtecholinux~/cc/cc-vm/day05/dir2/file2.txtcat~/cc/cc-vm/day05/dir1/file1.txtrm~/cc/cc-vm/day05/dir1/file1.txtcat~/cc/cc-vm/day05/dir2/file2.txtstat-cinode%i links%h size%s\~/cc/cc-vm/day05/dir2/file2.txt两个名称 inode 相同链接数都是 2。删除源文件名称后另一个仍可读取——链接数从 2 变 1数据没有丢失。 硬链接让同一份内容拥有多个入口不会复制数据但它不是独立备份改任意一个都会影响同一份数据。4.2 硬链接的两个限制① 目录不能创建硬链接ln~/cc/cc-vm/day05/dir1\~/cc/cc-vm/day05/dir2/dir1-hard系统会拒绝不能为目录创建硬链接。原因目录本来是自上而下的树。如果任意目录都能增加硬链接目录可能指回上级或自身形成环路路径遍历、父目录判断、递归操作都会乱。所以现代 Linux 通常禁止用户自行创建目录硬链接root 也不行。目录中的.和..由文件系统维护不属于用户手工创建的普通硬链接。② 硬链接不能跨文件系统df-T~/cc/cc-vm/day05 /dev/shmrm-f/dev/shm/day05-file2.txtln~/cc/cc-vm/day05/dir2/file2.txt\/dev/shm/day05-file2.txt系统会提示Invalid cross-device link——不能跨文件系统建立硬链接。inode 编号只在所属文件系统内有意义。另一个文件系统有自己的 inode 表不能让那里的目录项直接指向当前文件系统的 inode。4.3 符号链接用路径突破硬链接限制符号链接不直接共享目标 inode而是在自己的内容中保存目标路径因此可以指向目录也可以跨文件系统。echohello~/cc/cc-vm/day05/dir1/file1.txtln-sfn$HOME/cc/cc-vm/day05/dir1/file1.txt\~/cc/cc-vm/day05/dir2/link1ls-l~/cc/cc-vm/day05/dir2/link1 readlink ~/cc/cc-vm/day05/dir2/link1cat~/cc/cc-vm/day05/dir2/link1若依版本切换案例重点ln-sfn$HOME/cc/ruoyi/releases/1.0.0\~/cc/ruoyi/currentls-l~/cc/ruoyi/current readlink ~/cc/ruoyi/current readlink-f~/cc/ruoyi/currentcat~/cc/ruoyi/current/index.html发布 1.1.0ln-sfn$HOME/cc/ruoyi/releases/1.1.0\~/cc/ruoyi/current readlink-f~/cc/ruoyi/currentcat~/cc/ruoyi/current/index.html回退到 1.0.0ln-sfn$HOME/cc/ruoyi/releases/1.0.0\~/cc/ruoyi/current readlink-f~/cc/ruoyi/currentcat~/cc/ruoyi/current/index.html硬链接 vs 符号链接对比对比项硬链接符号链接inode多个名称共享同一 inode自己拥有独立 inode保存内容直接关联同一份数据保存目标路径跨文件系统不可以可以指向目录Linux 不允许自行创建可以删除一个名称或目标只要链接数 0数据仍可访问目标删除后可能成为断链常见用途同一文件系统内为普通文件增加入口目录入口、版本切换、跨文件系统引用4.4 两种链接怎样选择【认知】同一文件系统中的普通文件增加另一个名称 → 硬链接 指向目录、跨文件系统、current 这类稳定入口 → 符号链接 真正备份文件 → 复制内容并验证恢复不能把硬链接当独立备份五、认识文件查找工具5.1 准备查找样本mkdir-p~/cc/cc-vm/day05/find-test/{dir1,dir2}touch~/cc/cc-vm/day05/find-test/dir1/file{1..3}.conftouch~/cc/cc-vm/day05/find-test/dir2/file{1..3}.logtouch$HOME/cc/cc-vm/day05/find-test/dir2/file old.logtree ~/cc/cc-vm/day05/find-test5.2 先判断要找什么工具查找对象查找方式特点which命令对应的可执行文件在 PATH 目录中查找快速确认外部命令来自哪里locate普通文件和目录查询预先建立的文件名数据库速度快但数据库可能未更新find普通文件和目录从指定目录实时递归检查结果实时条件最灵活whichlswhichtarwhichfindcommand-vlocatelocatessh_configwhich主要查找 PATH 中的外部命令。Day 3 学的command -v还能识别别名和 Shell 内建命令适用范围更广。六、使用 find 实时查找文件6.1 find 的基本结构find[搜索起点][查找条件][执行动作]常用条件条件含义示例-name按名称匹配-name *.log-type按类型查找-type f、-type d、-type l-size按大小查找-size 1M-mtime按天数范围查找修改时间-mtime -7-mmin按分钟范围查找修改时间-mmin -30条件含义常见用途-mmin -30最近 30 分钟内修改调查刚发生的变更-mtime -7最近 7 个 24 小时区间内修改查找近期文件-mtime 7超过相应时间区间查找较旧文件-perm按权限查找等 Day 07 学完 r/w/x 后再实际使用。6.2 按名称、类型、大小和时间查找find~/cc/cc-vm/day05/find-test-typef-name*.conf-printfind~/cc/cc-vm/day05/find-test-typef-name*.log-printfind~/cc/cc-vm/day05/find-test-typed-print⚠️*.log要加引号避免星号先被当前 Shell 展开。find ~/cc/cc-vm/day05/find-test -type f -size 1M -print find ~/cc/cc-vm/day05/find-test -type f -size 0 -print echo startup ok ~/cc/ruoyi/logs/application.log find ~/cc/cc-vm/day05/find-test -type f -mmin -30 -print find ~/cc/ruoyi/logs -type f -mtime -7 -printtruncate -s 2M快速建立 2 MiB 测试文件。1M表示大于 1 MiB。mtime 按24 小时区间计算不要简单理解为日历日期。6.3 使用 AND 和 OR 组合条件逻辑关系find 写法含义AND条件1 -a 条件2两个条件都满足OR条件1 -o 条件2至少满足一个find~/cc/cc-vm/day05/find-test\-typef-a-name*.log-a-size1M-printfind~/cc/cc-vm/day05/find-test-typef\\(-name*.log-o-name*.conf\)-print圆括号把两个名称条件放在一组前面的反斜线避免括号被 Shell 提前解释。6.4 使用 -exec 处理查找结果find~/cc/cc-vm/day05/find-test-typef-name*.log-printfind~/cc/cc-vm/day05/find-test-typef-name*.log\-execls-lh{}-exec ... {} 会把找到的文件作为后续命令的参数。涉及删除、覆盖时仍遵守先打印结果 → 检查搜索起点和条件 → 再执行动作。七、归档、压缩与恢复7.1 使用 tar 归档并恢复tar 负责把多个文件组织成归档gzip 和 xz 负责压缩。⚠️ 归档先把多个对象组织成一个文件体积通常不变压缩再尝试减少空间。压缩效果取决于文件内容JPG 等已压缩格式体积可能只减一点。使用 gzip 创建归档tar-czf~/cc/cc-vm/day05/ruoyi-backup.tar.gz\-C~/cc ruoyitar-tzf~/cc/cc-vm/day05/ruoyi-backup.tar.gz恢复到单独目录mkdir-p~/cc/cc-vm/day05/restoretar-xzf~/cc/cc-vm/day05/ruoyi-backup.tar.gz\-C~/cc/cc-vm/day05/restore tree-L3~/cc/cc-vm/day05/restore/ruoyi readlink ~/cc/cc-vm/day05/restore/ruoyi/currentcat~/cc/cc-vm/day05/restore/ruoyi/releases/1.0.0/index.htmltar 常用选项选项作用-c创建归档-t查看归档内容-x提取归档-f指定归档文件名-z使用 gzip-J使用 xz-C先切换到指定目录再操作-T从清单文件读取待归档对象再使用 xz 创建一份归档tar-cJf~/cc/cc-vm/day05/ruoyi-backup.tar.xz\-C~/cc ruoyitar-tJf~/cc/cc-vm/day05/ruoyi-backup.tar.xzls-lh~/cc/cc-vm/day05/ruoyi-backup.tar.gz\~/cc/cc-vm/day05/ruoyi-backup.tar.xz7.2 按时间查找并归档近期日志cd~/cc/ruoyifindlogs-typef-mtime-7-print\~/cc/cc-vm/day05/recent-log-list.txtcat~/cc/cc-vm/day05/recent-log-list.txt先确认清单中只有计划归档的日志再创建归档tar-czf~/cc/cc-vm/day05/recent-logs.tar.gz\-T~/cc/cc-vm/day05/recent-log-list.txttar-tzf~/cc/cc-vm/day05/recent-logs.tar.gz-T表示从文件中读取待归档对象。先看清单再交给 tar把“查找范围”和“归档范围”连接起来。7.3 检查归档结果cd~/cc/cc-vm/day05find~/cc/ruoyi-maxdepth2-printreadlink-f~/cc/ruoyi/currentfind~/cc/ruoyi/logs-typef-mtime-7-printtar-tzf~/cc/cc-vm/day05/recent-logs.tar.gztar-tzf~/cc/cc-vm/day05/ruoyi-backup.tar.gzcat~/cc/cc-vm/day05/restore/ruoyi/releases/1.0.0/index.html检查时关注应用文件放在哪些目录中current当前指向哪个版本查找近期日志用了什么范围和时间条件近期日志清单与归档内容是否一致归档恢复到哪里怎么证明版本文件已经恢复批量操作前怎样确认实际目标7.4 记录实验结果想一想cp、mv、rm分别会怎样改变文件find的搜索起点、查找条件、执行动作分别解决什么问题为什么current适合使用符号链接为什么生成压缩包后还必须进行恢复验证使用find -exec批量处理前为什么必须先打印并检查结果填写实验记录主机名cc-vm 执行用户cc 版本目录 current 最终目标 近期日志查找条件 近期日志清单 近期日志归档 归档文件 恢复目录 恢复验证结果这些目录、链接和归档文件后续还会继续使用暂时保留。八、课后拓展选做8.1 删除符号链接与排查断链删除符号链接时应删除链接本身不要在链接名后加/ls-l~/cc/cc-vm/day05/dir2/link1rm~/cc/cc-vm/day05/dir2/link1ls-l~/cc/cc-vm/day05/dir1/file1.txtln-s$HOME/cc/cc-vm/day05/dir1/file1.txt\~/cc/cc-vm/day05/dir2/link1rm link1删除的是符号链接目标文件仍然存在。操作前用ls -l确认对象确实是链接。观察断链mkdir-p~/cc/cc-vm/day05/link-labechoactive~/cc/cc-vm/day05/link-lab/target.txtln-starget.txt ~/cc/cc-vm/day05/link-lab/entry.txt readlink ~/cc/cc-vm/day05/link-lab/entry.txt readlink-f~/cc/cc-vm/day05/link-lab/entry.txtmv~/cc/cc-vm/day05/link-lab/target.txt\~/cc/cc-vm/day05/link-lab/target.movedls-l~/cc/cc-vm/day05/link-lab/entry.txt readlink-f~/cc/cc-vm/day05/link-lab/entry.txt排查时先用readlink看链接保存的路径再确认目标是否被改名、移动或删除。修复时只调整链接或恢复目标不要直接重建整个应用目录。8.2 使用 xargs 传递查找结果mkdir-p~/cc/cc-vm/day05/xargs-testtouch~/cc/cc-vm/day05/xargs-test/file{1..3}.txttouch$HOME/cc/cc-vm/day05/xargs-test/file cc.txtfind~/cc/cc-vm/day05/xargs-test-typef-name*.txt-printfind~/cc/cc-vm/day05/xargs-test-typef-name*.txt|xargsls-l写法带空格的文件名说明find ... | xargs ls -l可能失败默认按空白字符拆分参数find ... | xargs -I {} ls -l {}可以处理每次读取一行并替换占位符find ... -print0 | xargs -0 ls -l可以安全处理两端都使用 NUL 字符分隔find~/cc/cc-vm/day05/xargs-test-typef-name*.txt|\xargs-I{}ls-l{}find~/cc/cc-vm/day05/xargs-test-typef-name*.txt-print0|\xargs-0-rls-lh8.3 使用 scp 和 rsync 复制到远程主机【认知】本地复制用cp跨主机一次性复制用scp反复同步目录用rsync。远程位置写法用户名主机地址:远程路径scp 上传和下载mkdir-p~/cc/cc-vm/receivescp~/cc/cc-vm/day05/ruoyi-backup.tar.gz\cc10.0.0.72:/home/cc/cc-vm/receive/mkdir-p~/cc/cc-vm/day05/scp-receivedscpcc10.0.0.72:/home/cc/cc-vm/receive/ruoyi-backup.tar.gz\~/cc/cc-vm/day05/scp-received/ sha256sum ~/cc/cc-vm/day05/ruoyi-backup.tar.gz\~/cc/cc-vm/day05/scp-received/ruoyi-backup.tar.gz两个 SHA-256 值相同说明上传后再下载的内容没变。首次连接可能要确认主机身份再输密码。rsync 重复同步mkdir-p~/cc/cc-vm/day05/rsync-a ~/cc/cc-vm/day05/rsync-brsync-avn~/cc/ruoyi/ ~/cc/cc-vm/day05/rsync-a/rsync-avn~/cc/ruoyi ~/cc/cc-vm/day05/rsync-b/ruoyi/表示同步目录中的内容ruoyi表示把 ruoyi 目录本身放到目标中-n只预览不真正复制正式执行并观察增量rsync-av~/cc/ruoyi/ ~/cc/cc-vm/day05/rsync-a/echorelease check~/cc/ruoyi/logs/application.logrsync-av~/cc/ruoyi/ ~/cc/cc-vm/day05/rsync-a/远程同步预览再执行rsync-avn-essh~/cc/ruoyi/\cc10.0.0.72:/home/cc/cc-vm/receive/ruoyi/rsync-av-essh~/cc/ruoyi/\cc10.0.0.72:/home/cc/cc-vm/receive/ruoyi/工具更适合的场景使用原则scp一次性发送或取回文件写清远程用户、主机和目标路径rsync重复同步目录、增量更新先加-n预览再正式执行当前不使用自动删除选项。8.4 Shell 通配符【认知】模式含义示例*任意长度的字符*.log?任意一个字符app?.log[12]集合中的一个字符app[12].log[0-9]一个数字access-[0-9].logmkdir-p~/cc/cc-vm/day05/wildcard-testtouch~/cc/cc-vm/day05/wildcard-test/app1.logtouch~/cc/cc-vm/day05/wildcard-test/app2.logtouch~/cc/cc-vm/day05/wildcard-test/app-old.logtouch~/cc/cc-vm/day05/wildcard-test/app.confls-d~/cc/cc-vm/day05/wildcard-test/*.logls-d~/cc/cc-vm/day05/wildcard-test/app?.logls-d~/cc/cc-vm/day05/wildcard-test/app[12].logprintf%s\n~/cc/cc-vm/day05/wildcard-test/file{1..3}.txt通配符本身不递归进入子目录。执行批量复制、移动或删除前先用ls -d查看实际展开结果。花括号展开与通配符不同file{1..3}.txt直接生成三个名称不检查文件是否存在。九、写在最后今天最大的三点收获cp、mv、rm三兄弟的差别要刻在骨子里cp 保留源、mv 不保留源、rm 默认没回收站。特别是 rm动手前必须三步确认。current用符号链接是最聪明的版本管理设计。发布新版本、回退旧版本只改一条链接不动业务数据。这就是稳定入口的价值。归档成功 ≠ 备份可用。生成压缩包后必须实际恢复验证否则你永远不知道备份里到底有没有东西。明天继续在这套目录上学习用户、组与权限。如果这篇对你有帮助点个赞让我知道我会每天更新。有问题评论区见一起从小白变熟手。本文为个人学习笔记命令均在 Ubuntu 26.04.1 Desktop VMware Workstation 25H2 环境实测。不同版本界面可能略有差异按选项含义操作即可。