Linux 文件目录管理实战指南:从目录结构到 cp/mv/rm 全命令详解

📅 发布时间:2026/9/17 4:17:44
Linux 文件目录管理实战指南:从目录结构到 cp/mv/rm 全命令详解
Linux 文件目录管理实战指南从目录结构到 cp/mv/rm 全命令详解【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorialLinux 采用树形目录结构与一切皆文件的哲学文件目录管理是系统运维与日常操作的基础。本文以 linux-tutorial 项目的 docs/linux/cli/linux-cli-dir.md 为骨架系统讲解 Linux 目录结构、文件属性与权限模型并逐一剖析cd、ls、mkdir、find、cp、mv、rm、scp等 19 个核心命令的常用用法最后结合仓库内真实 Shell 脚本安全删除、目录批量操作、文件路径解析等给出可落地的实战方案。读完本文你将能够独立完成目录规划、权限控制、文件查找、批量复制移动与跨服务器传输等日常任务。1. Linux 文件目录工作机制1.1. Linux 目录结构Linux 目录结构是树形结构其根目录是/。所有文件与目录都从根目录出发形成一棵倒置的树。下表整理了常见目录的作用便于快速对照目录作用/根目录Linux 文件系统的起点所有路径均从它开始/bin存放系统最基本的用户命令如ls、cp普通用户也可执行/boot存放系统内核与启动引导文件/dev设备文件目录Linux 中硬件设备以文件形式呈现于此/etc系统与软件的配置文件集中地/home普通用户的主目录一般以用户名命名/lib系统运行所需的基础共享库/mnt临时挂载点用于挂载外部存储/opt可选软件安装目录/rootroot 用户的主目录/tmp临时文件目录/usr用户安装的程序与文件类似 Windows 的 Program Files/var存放经常变化的文件如日志/var/log、缓存、邮件1.2. Linux 文件属性Linux 系统是典型的多用户系统不同用户处于不同的地位、拥有不同的权限。为了保护系统安全Linux 对不同的用户访问同一文件包括目录文件的权限做了不同规定。使用ll或ls -l可以显示一个文件的属性以及文件所属的用户和组$ ls -l total 64 drwxr-xr-x 2 root root 4096 Dec 14 2012 bin dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot实例中bin文件的第一个属性用d表示d在 Linux 中代表该文件是一个目录文件。Linux 中第一个字符代表这个文件是目录、文件或链接文件等当为d则是目录当为-则是文件若是l则表示为链接文档link file若是b则表示为装置文件里面可供储存的接口设备可随机存取装置如硬盘若是c则表示为装置文件里面的串行端口设备例如键盘、鼠标一次性读取装置。接下来的字符以三个为一组均为rwx三个参数的组合。其中r代表可读read、w代表可写write、x代表可执行execute。这三个权限的位置不会改变如果没有权限就会出现减号-。每个文件的属性由左边第一部分的 10 个字符确定从左至右用 0-9 数字来表示第 0 位确定文件类型第 1-3 位确定属主该文件的拥有者拥有该文件的权限第 4-6 位确定属组拥有者的同组用户拥有该文件的权限第 7-9 位确定其他用户拥有该文件的权限第 1、4、7 位表示读权限用r表示有读权限用-表示无读权限第 2、5、8 位表示写权限用w表示有写权限用-表示无写权限第 3、6、9 位表示可执行权限用x表示有执行权限用-表示无执行权限。可以对照下面的示意图快速拆解ls -l输出-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules # ↑╰┬╯╰┬╯╰┬╯ # ┆ ┆ ┆ ╰┈ 0 其他人 # ┆ ┆ ╰┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ g 属组 # ┆ ╰┈┈┈┈ u 属主 # ╰┈┈ 第一个字母 d 代表目录- 代表普通文件1.2.1. Linux 文件属主和属组$ ls -l total 64 drwxr-xr-x 2 root root 4096 Dec 14 2012 bin dr-xr-xr-x 4 root root 4096 Apr 19 2012 boot对于文件来说它都有一个特定的拥有者也就是对该文件具有所有权的用户同时在 Linux 系统中用户是按组分类的一个用户属于一个或多个组文件拥有者以外的用户又可以分为文件拥有者的同组用户和其他用户因此Linux 系统按文件拥有者、文件拥有者同组用户和其他用户来规定了不同的文件访问权限。在以上实例中bin文件是一个目录文件属主和属组都为root。属主有可读、可写、可执行的权限与属主同组的其他用户有可读和可执行的权限其他用户也有可读和可执行的权限。权限位与数字的对应关系是后续chmod 764写法的基石r4、w2、x1。例如rwx对应4217rw-对应426r--对应4。相关权限模型、属主属组概念可进一步阅读 docs/linux/cli/linux-cli-user.md 中的用户管理命令。2. Linux 文件目录管理要点文件目录管理命令可分为三类目录管理、文件管理与通用管理先建立整体地图再逐个击破。2.1. 目录管理切换目录 —— 使用cd查看目录信息 —— 使用ls显示当前目录的绝对路径 —— 使用pwd树状显示目录的内容 —— 使用tree创建目录 —— 使用mkdir删除目录 —— 使用rmdir。2.2. 文件管理创建空文件 —— 使用touch为文件创建连接 —— 使用ln批量重命名 —— 使用rename显示文件的详细信息 —— 使用stat探测文件类型 —— 使用file设置文件或目录的权限 —— 使用chmod设置文件或目录的拥有者或所属群组 —— 使用chown查找文件或目录 —— 使用locate在指定目录下查找文件 —— 使用find查找命令的绝对路径 —— 使用which查找命令的程序、源代码等相关文件 —— 使用whereis。which与whereis的详细用法可参考 docs/linux/cli/linux-cli-help.md查看 Linux 命令帮助信息。2.3. 文件和目录通用管理复制文件或目录 —— 使用cp复制文件或目录到远程服务器 —— 使用scp移动文件或目录 —— 使用mv删除文件或目录 —— 使用rm。3. 命令常见用法3.1. cd —— 切换工作目录cd命令用来切换工作目录。它是使用频率最高的命令之一cd # 切换到用户主目录 cd ~ # 切换到用户主目录 cd - # 切换到上一个工作目录 cd .. # 切换到上级目录 cd ../.. # 切换到上两级目录实战要点在 Shell 脚本中cd失败时脚本可能继续执行造成误操作因此推荐使用cd dir || exit 1的写法。仓库中的 codes/shell/文件操作/目录基本操作.sh 正是这样实践# 进入目录如果失败则退出脚本 cd /home/linux-tutorial/temp || exit 1 # 获取当前目录路径 CURRENT_DIR$(pwd) echo 当前目录是${CURRENT_DIR} # 获取上一级目录路径 PARENT_DIR$(dirname $(pwd)) echo 父目录是${PARENT_DIR} # 获取当前执行脚本名 DIR_NAME$(basename $0) echo 当前执行脚本名是${DIR_NAME}3.2. ls —— 显示目录信息ls命令用来显示目录信息ls # 列出当前目录可见文件 ls -l # 列出当前目录可见文件详细信息 ls -la # 列出所有文件包括隐藏的详细信息 ls -lh # 列出详细信息并以可读大小显示文件大小 ls -lt # 按时间列出文件和文件夹详细信息 ls -ltr # 按修改时间列出文件和文件夹详细信息 ls --colorauto # 列出文件并标记颜色分类参数速查选项含义-l长格式输出展示权限、属主、属组、大小、修改时间-a显示所有文件包括以.开头的隐藏文件-h与-l搭配以 K/M/G 等单位显示人类可读的大小-t按修改时间排序最新的在前-r逆序排序与-t组合为-ltr可按时间从旧到新查看--colorauto按文件类型着色目录、普通文件、链接、可执行文件颜色不同ls -l输出的第二列数字是硬链接数目录则代表其子目录数例如第 1.2 节示例中bin的2表示该目录包含 2 个子目录项.与..。3.3. pwd —— 显示当前工作目录绝对路径pwd命令用来显示当前目录的绝对路径常用于脚本中确定我当前在哪$ pwd /data/web/disk1/git_repo/GitHub_Trending/lin/linux-tutorial3.4. mkdir —— 创建目录mkdir命令用来创建目录# 在当前目录中创建 zp 和 zp 的子目录 test-p 递归创建目录已存在时也不会报错 mkdir -p zp/test # 在当前目录中创建 zp 和 zp 的子目录 test权限设置为文件主可读、写、执行同组用户可读和执行其他用户无权访问 mkdir -p -m 750 zp/test参数说明-p递归创建父目录。mkdir -p a/b/c会一次性创建a、a/b、a/b/c三级目录且目录已存在时不报错这是脚本中创建目录的标准姿势-m创建时直接指定权限模式750即属主rwx、属组r-x、其他用户无权限对应数字法7rwx、5r-x、0---。3.5. rmdir —— 删除空目录rmdir命令用来删除空目录# 删除子目录 test 和其父目录 zp-p 表示连同空的父目录一并删除 rmdir -p zp/test注意rmdir只能删除空目录目录中若还有文件或子目录会报错。非空目录的删除需要借助rm -r见 3.19 节。-p选项递归删除时若父目录同样为空会一并删除。3.6. tree —— 树状显示目录结构tree命令以树状显示目录的内容是了解项目结构的利器部分发行版需先安装yum install -y tree参见仓库脚本 codes/linux/sys/install-tools.sh# 列出目录 /private 第一级文件名 tree /private -L 1 /private/ ├── etc ├── tftpboot ├── tmp └── var # 忽略文件夹 tree -I node_modules # 忽略当前目录文件夹 node_modules tree -P node_modules # 列出当前目录文件夹 node_modules 的目录结构 tree -P node_modules -L 2 # 显示目录 node_modules 两层的目录树结构 tree -L 2 /home/www/tree.txt # 当前目录结果存到 tree.txt 文件中 # 忽略多个文件夹 tree -I node_modules|icon|font -L 2参数说明-L level限制显示的目录层级深度-I pattern忽略匹配模式的文件或目录支持|分隔多个模式-P pattern只列出匹配模式的文件/目录配合重定向可将目录树导出到文件例如tree -L 2 tree.txt便于文档归档。3.7. touch —— 更新时间戳或创建空文件touch命令有两个功能一是把已存在文件的时间标签更新为系统当前时间默认方式文件数据原封不动保留二是用来创建空文件。touch ex2 # 若 ex2 不存在则创建空文件若已存在则仅更新其访问/修改时间典型场景快速创建空文件作为占位符或初始化文件批量创建测试文件touch test{1..10}.log会生成test1.log到test10.log调整文件时间戳后配合find -newer做增量备份判断。3.8. ln —— 创建链接ln命令用来为文件创建连接连接类型分为硬连接和符号连接两种默认的连接类型是硬连接。如果要创建符号连接必须使用-s选项。# 将目录 /usr/mengqc/mub1 下的文件 m2.c 链接到目录 /usr/liu 下的文件 a2.c硬链接 cd /usr/mengqc ln /mub1/m2.c /usr/liu/a2.c # 在目录 /usr/liu 下建立一个符号链接文件 abc使它指向目录 /usr/mengqc/mub1 # 执行该命令后/usr/mengqc/mub1 代表的路径将存放在名为 /usr/liu/abc 的文件中 ln -s /usr/mengqc/mub1 /usr/liu/abc硬链接与符号链接的区别特性硬链接符号链接软链接-sinode与源文件相同同一 inode多一个目录项独立 inode内容为源文件路径源文件删除后链接仍有效数据仍可访问链接失效悬空链接可否跨文件系统不可以可以可否链接目录不可以可以权限属性与源文件共享独立属性但实际读写走源文件 注意符号链接文件不是一个独立的文件它的许多属性依赖于源文件所以给符号链接文件设置存取权限是没有意义的chmod作用于符号链接时改变会作用在被链接的原始文件上。3.9. rename —— 批量重命名rename命令用字符串替换的方式批量重命名注意其语法在不同发行版间有差异以下为常见的 Perl 版本用法# 将 main1.c 重命名为 main.c老式源串 目标串 文件语法 rename main1.c main.c main1.c rename s/AA/aa/ * # 把文件名中的 AA 替换成 aa rename s//.html//.php/ * # 把 .html 后缀的改成 .php 后缀 rename s/$//.txt/ * # 把所有的文件名都以 txt 结尾 rename s//.txt// * # 把所有以 .txt 结尾的文件名的.txt 删掉rename的 Perl 版本支持正则表达式替换s/查找/替换/其中*表示当前目录下所有文件。批量替换示例批量加前缀rename s/^/backup_/ *.log大小写转换rename y/a-z/A-Z/ *.txt3.10. stat —— 显示文件状态信息stat命令用于显示文件的状态信息其输出比ls -l更详细包含 inode、文件大小、块数、访问/修改/变更时间等stat myfile典型的stat输出包含File文件名与路径Size/Blocks文件字节数与占用的块数Access/Modify/Change访问时间atime、修改时间mtime、状态变更时间ctime及对应的时间戳Access权限行数字与符号两种权限表示UID/GID属主与属组的用户 ID 与名称Links硬链接数Inode/Deviceinode 号与所在设备。stat常用于排查文件是否被修改对比 mtime/ctime以及确认 inode 号是否变化判断是否为同一文件。3.11. file —— 探测文件类型file命令用来探测给定文件的类型。file对文件的检查分为文件系统检查、魔法幻数magic number检查和语言检查 3 个过程file install.log # 显示文件类型 file -b install.log # 不显示文件名称brief 模式 file -i install.log # 显示 MIME 类型 file -L /var/spool/mail # 显示符号链接指向的目标文件的类型follow 链接参数说明-b只输出类型描述、不显示文件名便于在脚本中提取类型字符串-i输出text/plain、application/gzip等 MIME 类型常用于 Web 服务与脚本判断-L对符号链接追踪到源文件。3.12. chmod —— 变更文件或目录权限chmod命令用来变更文件或目录的权限。在 UNIX 系统家族里文件或目录权限的控制分别以读取、写入、执行 3 种一般权限来区分另有 3 种特殊权限可供运用。设置方式采用文字或数字代号皆可。符号连接的权限无法变更如果用户对符号连接修改权限其改变会作用在被连接的原始文件。知识扩展Linux 用户分为拥有者、组群Group、其他other。系统中所有帐号与一般身份使用者以及 root 的相关信息记录在/etc/passwd文件中每个人的密码记录在/etc/shadow文件下所有的组群名称记录在/etc/group内。数字法权限值例rwx rw- r-- r读取属性 //值4 w写入属性 //值2 x执行属性 //值1即每三位一组求和rwx 421 7、rw- 42 6、r-- 4。例如chmod 764表示属主rwx、属组rw-、其他用户r--。示例chmod ux,gw f01 # 为文件 f01 设置自己可以执行组员可以写入的权限 chmod urwx,grw,or f01 chmod 764 f01 chmod ax f01 # 对文件 f01 的 u,g,o 都设置可执行属性 # 将 /home/wwwroot/ 里的所有文件和文件夹设置为 755 权限 chmod -R 755 /home/wwwroot/*符号法速查符号含义u属主userg属组groupo其他用户othera全部all即 ugo/-/增加 / 移除 / 精确设置权限r/w/x读 / 写 / 执行-R递归修改目录及其下所有文件与子目录的权限部署 Web 站点时chmod -R 755 /home/wwwroot/*是常见操作。特殊权限位延伸了解setuidus数字位 4、setgidgs数字位 2与粘滞位ot数字位 1分别用于提升执行身份、继承组身份以及限制目录内文件删除如/tmp。例如chmod 4755即 setuid 权限。3.13. chown —— 变更文件或目录的所有者与属组chown命令改变某个文件或目录的所有者和所属的组可以向某个用户授权使该用户变成指定文件的所有者或改变文件所属的组。用户可以是用户名或用户 ID用户组可以是组名或组 ID。文件名可以是空格分开的文件列表文件名中可以包含通配符。只有文件拥有者和超级用户root才可以使用该命令。# 将目录 /usr/meng 及其下面的所有文件、子目录的文件主改成 liu chown -R liu /usr/meng扩展用法chown liu:staff file.txt # 同时修改属主为 liu、属组为 staff chown :staff file.txt # 仅修改属组 chown -R liu /usr/meng # 递归修改目录下所有内容3.14. locate —— 快速查找文件locate命令以及slocate用来查找文件或目录。locate命令其实是find -name的另一种写法但比后者快得多原因在于它不搜索具体目录而是搜索数据库/var/lib/locatedb部分发行版为/var/lib/mlocate/mlocate.db这个数据库含有本地所有文件信息。Linux 系统自动创建这个数据库并且每天自动更新一次所以使用locate查不到最新变动过的文件。为避免这种情况可以在使用locate之前先用updatedb命令手动更新数据库。locate pwd # 查找和 pwd 相关的所有文件 locate /etc/sh # 搜索 etc 目录下所有以 sh 开头的文件要点locate基于预先构建的索引数据库速度远快于find的全盘遍历但存在延迟新增文件后需updatedb刷新索引。3.15. find —— 在指定目录下查找文件find命令用来在指定目录下查找文件。任何位于参数之前的字符串都被视为欲查找的目录名。如果使用该命令时不设置任何参数则find命令将在当前目录下查找子目录与文件并将查找到的子目录和文件全部显示。# 当前目录搜索所有文件文件内容包含 140.206.111.111 的内容find 找出文件xargs 把文件名作为 grep 参数 find . -type f -name * | xargs grep 140.206.111.111 # 列出当前目录及子目录下所有文件和文件夹 find . # 在 /home 目录下查找以 .txt 结尾的文件名 find /home -name *.txt # 同上但忽略大小写 find /home -iname *.txt # 当前目录及子目录下查找所有以 .txt 和 .pdf 结尾的文件 find . -name *.txt -o -name *.pdf # 匹配文件路径或者文件 find /usr/ -path *local* # 基于正则表达式匹配文件路径 find . -regex .*\(\.txt\|\.pdf\)$ # 同上但忽略大小写 find . -iregex .*\(\.txt\|\.pdf\)$ # 找出 /home 下不是以 .txt 结尾的文件 find /home ! -name *.txt常用表达式速查表达式含义-name/-iname按文件名匹配iname忽略大小写支持*、?通配符-type f/d/l按类型过滤普通文件 / 目录 / 链接-o逻辑或组合多个条件如上例.txt或.pdf!逻辑非取反匹配-path匹配完整路径含目录层级-regex/-iregex按正则表达式匹配路径注意转义\(、\|-exec ... {} \;对每个匹配结果执行命令如find . -name *.log -exec rm -f {} \;进阶组合# 按修改时间查找查找 7 天内修改过的文件 find /data -mtime -7 -type f # 按大小查找大于 100M 的文件 find /var -size 100M # 找到后批量执行命令删除旧日志 find /var/log -name *.log -mtime 30 -exec rm -f {} \;注意上例find -name *会匹配所有文件再配合xargs grep实现全文内容检索。生产环境中更推荐限定-name或-type范围以提升效率。3.16. cp —— 复制文件或目录cp命令将一个或多个源文件或目录复制到指定的目的文件或目录。它可以将单个源文件复制成一个指定文件名的具体文件或复制到一个已存在的目录下。cp还支持同时复制多个文件当一次复制多个文件时目标文件参数必须是一个已经存在的目录否则将出现错误。参数源文件指定源文件列表。默认情况下cp命令不能复制目录如果要复制目录则必须使用-R选项目标文件指定目标文件。当源文件为多个文件时要求目标文件为指定的目录。示例# 将文件 file 复制到目录 /usr/men/tmp 下并改名为 file1 cp file /usr/men/tmp/file1 # 将目录 /usr/men 下的所有文件及其子目录复制到目录 /usr/zh 中 cp -r /usr/men /usr/zh # 强行将 /usr/men 下的所有文件复制到目录 /usr/zh 中无论是否有文件重复 cp -rf /usr/men/* /usr/zh # 将目录 /usr/men 中以 m 打头的所有 .c 文件复制到目录 /usr/zh 中 cp -i /usr/men m*.c /usr/zh常用选项选项含义-r/-R递归复制目录及其内容-f强制复制覆盖目标文件时不提示-i交互式覆盖确认防止误覆盖-p保留原文件的权限、属主、时间戳等属性-a归档模式相当于-dpR常用于备份-v显示复制过程3.17. scp —— 跨服务器远程拷贝scp命令用于在 Linux 下进行远程拷贝文件与cp类似但cp只能在本机拷贝、不能跨服务器而scp传输是加密的可能会稍微影响速度。当服务器硬盘变为只读read only system时用scp可以把文件移出来。另外scp非常不占资源不会提高多少系统负荷——在这一点上rsync就远远不及它虽然rsync比scp快一点但当小文件众多时rsync会导致硬盘 I/O 非常高而scp基本不影响系统正常使用。# 拷贝文件到远程服务器的指定目录 scp file userip:url scp test.txt root192.168.0.1:/opt # 拷贝目录到远程服务器的指定目录 scp -r folder userip:url scp -r test root192.168.0.1:/opt常用选项-r递归复制目录-P port指定 SSH 端口注意是大写 P-C启用压缩传输。3.17.1. scp 免密码传输1生成 SSH 公私钥对ssh-keygen -t rsa2将服务器 A 的~/.ssh/id_rsa.pub文件内容复制到服务器 B 的~/.ssh/authorized_keys文件中# 服务器 A 上执行以下命令 scp ~/.ssh/id_rsa.pub root192.168.0.2:~/.ssh/id_rsa.pub.tmp # 服务器 B 上执行以下命令 cat ~/.ssh/id_rsa.pub.tmp ~/.ssh/authorized_keys rm ~/.ssh/id_rsa.pub.tmp配置完成后从 A 到 B 的scp/ssh将不再需要输入密码可安全用于脚本与定时任务。免密传输相关的补充用法可参考 codes/shell/输入和输出/免密码传输.sh。3.18. mv —— 移动或重命名文件mv命令对文件或目录重新命名或将文件从一个目录移到另一个目录中。source表示源文件或目录target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中则目标文件的内容将被覆盖。mv file1.txt /home/office/ # 移动单个文件 mv file2.txt file3.txt file4.txt /home/office/ # 移动多个文件 mv *.txt /home/office/ # 移动所有 txt 文件 mv dir1/ /home/office/ # 移动目录 mv /usr/men/* . # 将指定目录中的所有文件移到当前目录中 mv file1.txt file2.txt # 重命名文件 mv dir1/ dir2/ # 重命名目录 mv -v *.txt /home/office # 打印移动信息 mv -i file1.txt /home/office # 提示是否覆盖文件 mv -uv *.txt /home/office # 源文件比目标文件新时才执行更新 mv -vn *.txt /home/office # 不要覆盖任何已存在的文件 mv -f *.txt /home/office # 无条件覆盖已经存在的文件 mv -bv *.txt /home/office # 复制时创建备份常用选项-i覆盖前交互确认-f强制覆盖不提示-u仅当源文件更新时才移动update-n不覆盖任何已存在文件no-clobber-v显示移动详情-b移动前为目标文件创建备份。注意-u与-n语义相反但都用于保护数据-f、-u、-n同时存在时以最后出现的选项为准。3.19. rm —— 删除文件或目录rm命令可以删除一个目录中的一个或多个文件或目录也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件只是删除整个链接文件而原有文件保持不变。rm test.txt # 删除文件 rm -i test.txt test2.txt # 交互式删除文件 rm -r * # 删除当前目录下的所有文件和目录 rm -r testdir # 删除目录下的所有文件和目录 rm -rf testdir # 强制删除目录下的所有文件和目录 rm -v testdir # 显示当前删除操作的详情常用选项-i逐个确认-f强制删除、忽略不存在的文件且不提示-r/-R递归删除目录-v显示删除详情。⚠️高危警告rm -rf /、rm -rf ~等命令会不可逆地摧毁数据执行前务必三思建议结合-i或先ls确认路径。3.19.1. 实战用回收站思想改造 rm仓库源码演示rm删除的文件无法恢复运维中误删是最高频事故之一。仓库中的 codes/linux/tool/Custom_Rm.sh 提供了一个经典的自定义回收站方案把rm别名为移动脚本删除即移入~/.TRASH_DIR再通过 crontab 每天定时清理彻底杜绝误删风险。其核心逻辑如下#!/usr/bin/env bash # 功能自定义 rm 命令每天晚上定时清理 CMD_SCRIPTS$HOME/.rm_scripts.sh TRASH_DIR$HOME/.TRASH_DIR CRON_FILE/var/spool/cron/root BASHRC$HOME/.bashrc [ ! -d ${TRASH_DIR} ] mkdir -p ${TRASH_DIR} # 生成回收站脚本把删除变成移入回收站并追加时间戳 cat $CMD_SCRIPTS EOF PARA_CNT\$# TRASH_DIR$TRASH_DIR for i in \$*; do DATE\$(date %F%T) fileName\$(basename \$i) mv \$i \$TRASH_DIR/\$fileName.\$DATE done EOF # 将 alias rm 指向自定义脚本并加载配置 sed -i s$(grep alias rm $BASHRC)alias rmbash ${CMD_SCRIPTS}g $BASHRC source $HOME/.bashrc # 每天零点清空回收站 echo 0 0 * * * rm -rf $TRASH_DIR/* $CRON_FILE echo 删除目录:$TRASH_DIR echo 删除脚本:$CMD_SCRIPTS echo 请执行:source $BASHRC 来加载文件或退出当前shell重新登录原理拆解脚本用date %F%T给每个被删文件打上时间戳如test.txt.2026-09-1600:00:00再用mv将其移入回收站目录crontab的0 0 * * *任务在每天零点清空回收站实现误删可恢复、磁盘不堆积的效果。这与 3.18 节mv的移动语义、以及 3.19 节rm的真正删除语义形成了完整对照。4. 综合实战基于仓库脚本的文件目录操作将上述命令组合到真实脚本中可以完成复杂的运维任务。仓库中的 codes/shell/文件操作/目录基本操作.sh 演示了创建 → 进入 → 复制 → 移动 → 删除的完整目录生命周期# 创建目录整个文件路径中的目录如果不存在都会一一创建如果目录已存在则什么也不做 mkdir -p /home/linux-tutorial/temp # 进入目录如果失败则退出脚本 cd /home/linux-tutorial/temp || exit 1 # 复制目录复制 temp 目录所有内容并命名新文件夹叫 temp2 cp -rf /home/linux-tutorial/temp /home/linux-tutorial/temp2 # 移动目录将 temp2 移到 temp 目录下 mv /home/linux-tutorial/temp2 /home/linux-tutorial/temp/temp2 # 删除目录 rm -rf /home/linux-tutorial与之配套的路径解析技巧可参考 codes/shell/文件操作/文件路径操作.sh用 Shell 参数扩展从路径中提取文件名、后缀、目录等片段path/dir1/dir2/dir3/test.txt echo ${path##*/} # 获取文件名 test.txt echo ${path##*.} # 获取后缀 txt # 不带后缀的文件名 temp${path##*/} echo ${temp%.*} # test # 获取目录 echo ${path%/*} # /dir1/dir2/dir3磁盘空间管理也是文件目录运维的重要一环。仓库中的 codes/linux/tool/查看指定目录磁盘使用情况.sh 结合du、sort、sed、gawk统计指定目录下占用空间最大的 Top 10for DIR in ${DIRS} do echo The ${DIR} Directory: du -S ${DIR} 2 /dev/null | sort -rn | sed {11,$D; } | sed N; s/\n/ / | gawk {printf $1 : \t $2 \t $3 \n} done其思路是du -S统计各子目录大小不包含子目录自身大小sort -rn按数值逆序排序再经sed/gawk加工成易读的排行输出。与之相关的磁盘命令du/df的更多说明见 docs/linux/cli/linux-cli-hardware.md。5. 小结与速查本文以 docs/linux/cli/linux-cli-dir.md 为纲完整覆盖了 Linux 文件目录管理的核心知识目录结构根目录/出发的树形结构/etc、/home、/var、/usr等关键目录各司其职属性与权限ls -l的 10 位属性串 1 位类型位 9 位权限位属主/属组/其他各 3 位chmod支持符号法与数字法r4,w2,x1chown调整属主属组命令矩阵目录管理cd/ls/pwd/mkdir/rmdir/tree、文件管理touch/ln/rename/stat/file/chmod/chown/locate/find、通用管理cp/scp/mv/rm运维实践find | xargs grep全文检索、scp免密传输、mkdir -p与cd || exit 1的脚本安全写法以及用回收站脚本改造rm的防误删方案。建议读者在真实服务器上逐一验证以上命令并结合仓库中的 codes/shell 目录下的脚本目录操作、文件读取、临时文件管理等动手实践。关于文件内容查看cat/head/tail/grep等与压缩解压tar/gzip/zip命令可继续阅读 docs/linux/cli/linux-cli-file.md 与 docs/linux/cli/linux-cli-file-compress.md从而构建完整的 Linux 命令行知识体系。【免费下载链接】linux-tutorial:penguin: Linux教程主要内容Linux 命令、Linux 系统运维、软件运维、精选常用Shell脚本项目地址: https://gitcode.com/GitHub_Trending/lin/linux-tutorial创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考