Ubuntu系列教学(五):文件与目录的精准操控

引言

本篇博文从文件与目录的精准操控(如cp的递归复制陷阱、rm -rf的致命风险规避),到文本处理中正则表达式与过滤工具的灵活搭配(如grep的上下文捕获、findlocate的黄金组合),每一节均以“理论-场景-避坑”为主线,拒绝枯燥的参数罗列。特别针对新手友好性,在编辑器对比中推荐零门槛的nano,同时为高阶用户保留vim的深度优化技巧;既涵盖tree可视化目录树的快速诊断价值,也剖析mkdir -p批量建目录的工程化思维。通过本篇博文的学习,各位观众老爷将能够游刃有余地驾驭文件搜索、日志分析、批量操作等高频需求,并理解工具背后的设计哲学——毕竟,在Linux生态中,真正的力量往往藏匿于那些简洁却深邃的命令背后。

最后,如果大家喜欢我的创作风格,请大家在评论区评论 “666”“催更”,你们的支持就是我创作最大的动力!如果各位观众老爷觉得我哪些地方需要改进,请一定在评论区告诉我,马上改!在此感谢大家了。

各位观众老爷,本文通俗易懂,快速上手Ubuntu系统实操,收藏本文,关注up不迷路,后续将持续分享Ubuntu系统纯干货(请观众老爷放心,绝对又干又通俗易懂)。请多多关注、收藏、评论,评论区等你~~~





正 文

一、文件与目录管理

文件与目录操作是终端使用的基础核心技能。这部分工作内容将详细讲解如何通过命令行高效管理文件系统,涵盖导航、查看、复制、移动、删除等操作,并附实际场景示例。

1.1 导航与查看

1.1.1 pwd:显示当前路径

pwd 命令的全称为Print Working Directory,其核心功能是显示用户当前所在工作目录的绝对路径。通过绝对路径提供清晰的定位信息,以下是具体解析:

pwd
# 输出示例:/home/ubuntu-user/Documents

1.1.2 ls:列出目录内容


(一)基础概念

ls 命令的全称为 List Directory Contents,用于列出目录内容的基础命令。其核心功能是显示指定目录下的文件、子目录及其详细信息(如权限、大小、时间等),默认按文件名排序并隐藏以.开头的文件。它是文件管理、系统维护和脚本编写中不可或缺的工具,以下是具体解析:

ls            # 列出当前目录内容(隐藏文件不显示)
ls /var/log   # 列出指定目录内容

(二)常见组合用法使用

组合选项功能说明示例
ls -a显示所有文件(包含隐藏文件,如 .bashrcls -a ~
查看主目录(~)所有文件
ls -l长格式显示详细信息(权限、所有者、大小、修改时间等)ls -l /var/log
显示/var/log的详细信息
ls -lh结合 -l,以易读单位(如 KB、MB)显示文件大小ls -lh *.iso
查看ISO文件大小
ls -lt按修改时间排序(最新文件在前)ls -lt /tmp
查看/tmp中最新的文件
ls -ltr按修改时间反向排序(旧文件在前)ls -ltr
查看当前目录中最早修改的文件
ls -lS按文件大小排序(大文件优先)ls -lS /var
列出/var中的大文件
ls -lSr按文件大小排序(小文件优先)ls -lSr /var
列出/var中的小文件
ls -R递归列出所有子目录内容ls -R /etc
ls -d */仅显示目录本身(不列出内容),常用于脚本中筛选目录ls -d */
显示当前目录下的所有子目录名称

1.1.3 cd:切换目录


(一)基础概念

cd 命令的全称为Change Directory,是 Linux/Ubuntu 系统中用于切换当前工作目录的核心命令,用户通过它可以快速导航到文件系统的不同路径。只要讲到计算机,不可避免的一定会提及 “绝对路径”“相对路径” 两个概念。以下是关于这两个概念的详细解析,结合 Linux 系统的实际应用场景:

特性绝对路径相对路径
起点以根目录 / 开头,如
/home/user/file.txt
以当前工作目录为基准,如
docs/file.txt
稳定性路径固定,不随当前目录改变路径动态变化,依赖当前目录位置
适用场景脚本配置、跨目录操作、需精准定位文件时快速切换邻近目录、简化路径输入时
写法示例/usr/share/man./config../data

注释: 看不懂写法示例没关系,马上给各位观众老爷解释,莫慌 ~~~

打开终端,可以尝试按照指令进入绝对/相对路径,下面代码是示例,各位看官老爷请结合实际目录修改代码:

cd /home/user/file.txt  # 切换到绝对路径
cd docs/file.txt       # 切换到相对路径

(二)常见组合用法使用与示例

下面是cd命令常用符号的功能解析与使用方法

符号作用示例备注
.表示当前目录cd .常用于脚本明确路径或组合操作
..切换到上级目录cd ..可连续使用(如cd ../../退回两级)
../..直接退回上两级目录cd ../..等效分步操作cd .. && cd ..
-返回上一次所在目录cd -配合OLDPWD变量记录历史路径
cd直接切换回用户主目录cd等同于cd ~cd $HOME

这是在我自己Ubuntu系统上运行的cd指令,可参考:
在这里插入图片描述

在讲下面的 1.2 文件操作 和 1.3 目录操作 中,有的观众老爷发现无法执行操作,首先查看自己的指令是否输入正确;其次,就是您所操作的文件所处位置需要更大的权限,需要您在指令面前添加sudo,我将以 “1.2.1 cp:复制文件/目录” 进行讲解。


1.2 文件操作

1.2.1 cp:复制文件/目录


(一)基础概念

cp 命令的全称为Copy File,用于复制文件或目录的核心命令,支持从单个文件到复杂目录结构的复制操作,具备灵活的选项控制复制行为。

(二)常见组合用法使用与示例

命令的基本语法指令:

cp [选项] 源文件或目录 目标文件或目录  

命令常用选项与参数表

选项作用适用场景
-r/-R递归复制目录及其子内容(必需用于目录复制)复制文件夹结构
-i覆盖目标文件前提示确认安全覆盖文件
-f强制覆盖目标文件,无需确认(与 -i 冲突)脚本中强制操作
-v显示复制过程的详细信息调试或查看进度

操作示例

# 复制文件
cp source.txt destination.txt        # 复制文件并重命名
cp file.txt /backup/                 # 复制到指定目录(保留原名)
cp file.txt /backup/backup_file.txt  # 两个指令合二为一

# 复制目录,需要 -r 参数递归
cp -r my_folder/ /backup/         # 复制整个目录到/backup
cp file1.txt file2.txt /backup/   # 将file1.txt、file2.txt复制到/backup目录
cp -r /home/user/docs /backup/    # 复制/home/user/docs目录及其子内容到/backup

# 覆盖提示,若目标文件存在,提示:cp: overwrite 'new.txt'? y确认
cp -i old.txt new.txt

若权限不足则可添加sudo执行命令,但是一般需要高权限的文件都比较重要,新手尽量不要修改这类文件,避免系统崩溃。

sudo(Super User Do)是 Linux 系统中用于授予普通用户临时执行特权命令的核心工具。通过权限分离和日志记录,它在提升操作效率的同时保障了系统安全。

# 复制文件
sudo cp file.txt /backup/backup_file.txt 

1.2.2 mv:移动或重命名文件


(一)基础概念

mv 命令的全称为 Move,用于移动文件/目录或重命名文件/目录的核心命令,支持跨文件系统操作与灵活选项控制。

命令的基本语法指令:

mv [选项] 源文件或目录 目标文件或目录
mv [选项] 源文件列表 目标目录

(二)常见组合用法使用与示例

命令常用选项表

选项作用示例与场景
-r/-R递归删除目录及其内容
(非空目录必须用此选项)
rm -r project
删除项目目录及子内容
-f强制删除,无需确认rm -rf tmp
强制递归删除无提示
-i删除前逐一确认,防止误操作rm -i *.log
逐个确认删除 .log 文件
-d删除空目录,类似 rmdir(下面会讲)rm -d empty_dir
仅删除空目录
-v显示操作详细信息rm -v file.txt
输出:"removed ‘file.txt’ "

操作示例

# 文件重命名
mv old_file.txt new_file.txt     # 将 old_file.txt 重命名为 new_file.txt

# 移动文件到目录
mv file.txt /path/to/dir/      # 将文件移动到指定目录(保留原名)   
mv file1.txt file2.txt dir/    # 移动多个文件到目录   

# 移动并重命名
mv file.txt backup/file_backup.txt  # 移动并重命名   

#目录操作
mv old_dir/ new_dir/           # 重命名目录(若 new_dir 不存在)   
mv dir1/ dir2/                 # 将 dir1 移动到 dir2 目录下   

# 交互提示与强制覆盖
mv -i source.txt dest.txt      # 覆盖前询问   
mv -f source.txt dest.txt      # 强制覆盖(慎用!)   

1.2.3 rm:删除文件/目录


(一)基础概念

rm 命令的全称为Remove,可删除文件或目录,支持强制删除、递归操作等,功能更强大,使用也非常广泛。

(二)常见组合用法使用与示例

命令的基本语法指令:

rm [选项] 文件名或目录名...

常用选项表

选项作用
-r / -R递归删除目录及其内容(非空目录必须用此选项)
-f强制删除,不提示确认
-i交互模式,删除前逐一确认
-d仅删除空目录(类似 rmdir
-v显示操作详细信息

操作示例

rm file.txt           # 删除文件(需确认)
rm -rf project        # 强制递归删除非空目录
rm -i *.log           # 逐个确认删除所有 `.log` 文件

注释: 危险操作,rm -rf用!

1.2.4 touch:创建空文件或更新时间戳


(一)基础概念

touch 用于创建空文件和修改文件时间戳的核心命令。其功能灵活且应用广泛,适用于文件管理、脚本编写及系统维护场景。

命令的基本语法指令:

touch [选项] 文件名或目录名...

(二)常见组合用法使用与示例

命令常用选项表

选项作用示例
-a仅更新访问时间touch -a file.txt
-m仅更新修改时间touch -m file.txt
-c若文件不存在,则不创建(避免生成新文件)touch -c not_exist.txt
-d指定日期时间touch -d "2023-10-01" file.txt
-t自定义时间格式([[CC]YY]MMDDhhmm[.ss]touch -t 202310011200.30 file.txt
-r复制其他文件的时间戳touch -r source.txt target.txt

操作示例

# 创建单个空文件
touch example.txt  # 当前目录生成example.txt(不存在则创建,存在则更新时间戳)  

# 批量创建文件
touch file{1..5}.txt  # 生成 file1.txt 至 file5.txt  
touch /path/to/dir/newfile  # 在指定路径创建文件(目录需存在)  
touch file{1..5}.txt /path/to/dir/newfile  #合二为一

# 避免创建新文件
touch -c non_exist.txt  # 仅检查文件是否存在,不创建  

# 更新当前时间
touch file.txt  # 同时更新 atime 和 mtime  
touch -am file.txt  # 同时更新访问时间和修改时间  

#自定义时间
touch -d "2 days ago" file.txt  # 设置为两天前  
touch -t 202310011530.45 file.txt  # 格式:年月日时分.秒  

1.3 目录操作

1.3.1 tree 树形结构

在讲目录的创建与删除之前,先给大家介绍一个非常好用的依赖tree树形结构展示,之前也给大家讲解了如何使用ls命令列出目录内容,但是并没有直接展示出他们之间的附属关系,而tree则很好的解决了这个问题。

sudo apt install tree   # 若之前没有安装过,请手动安装

# 使用方法
tree          # 显示当前目录树形结构
tree -L 2     # 仅显示前两级目录
tree -d       # 仅显示目录(过滤文件)
tree /opt     # 可视化第三方软件的目录层级

这是我使用terminator给各位看官老爷展示如何使用tree,顺带复习treminator

在这里插入图片描述

1.3.2 mkdir:创建目录


(一)基础概念

mkdir 命令的全称为 Make Directory,用于创建新目录的核心命令。其核心功能是根据指定路径生成目录结构,支持单层或多层嵌套目录的创建,并能设置目录权限。

(二)常见组合用法使用与示例

命令的基本语法指令:

mkdir [选项] 目录名...

常用选项表

选项作用示例
-p递归创建多级目录(自动补全父目录)mkdir -p dir1/dir2/dir3
-m设置目录权限(八进制格式)mkdir -m 755 secure_dir
-v显示创建过程的详细信息mkdir -v dir_name
无参数创建单个目录(要求父目录必须存在)mkdir new_folder
无参数批量目录(要求父目录必须存在)mkdir dir1 dir2

1.3.3 rmdir:删除空目录


(一)基础概念

rmdir 命令的全称为Remove Directory,仅用于删除空目录。若目录中包含文件或子目录,操作会失败,确保用户不会误删非空目录。

(二)常见组合用法使用与示例

命令的基本语法指令:

rmdir [选项] 目录名...

常见使用示例:

rmdir empty_dir    # empty_dir为空目录

rmdir -p dir1/dir2/dir3  # 删除 dir3 → dir2 → dir1(需均为空目录)

1.4 章尾总结

这一章内容基本上都是我们日常操作中必不可少的指令,需要各位观众老爷一定要多记多练,尤其是极其常用的cdmvcprm等指令。

(一) rmdirrm对比总结表

对比维度rmdirrm
核心功能仅删除空目录可删除文件、非空目录
安全性高(避免误删非空内容)低(-rf 可能导致数据丢失)
适用场景清理空目录链强制删除、批量操作
递归支持-p 参数逐级删除空父目录支持 -r 递归删除非空目录
覆盖行为控制无覆盖机制支持 -i/-f 控制覆盖提示

(二)关键命令总结

操作命令
查看当前目录pwd
列出目录内容ls
切换目录cd
复制目录cp
移动或重命名文件mv
删除目录rmdir
rm
创建空文件或更新时间戳touch
创建目录mkdir

二、文本处理与搜索

文本操作是Linux系统的核心能力之一,这部分工作内容将深入讲解如何高效查看、编辑、过滤和统计文本内容,并掌握文件搜索技巧,覆盖从基础到进阶的实用工具。

2.1 查看与编辑文本

这一部分我觉得是最简单且容易上手的,而且未来继续学习算法的观众老爷无法离开的工具。如果电脑没有安装,请提前安装catnanovim

# 检查是否安装cat,nano和vim
XXX --version   # XXX对应想要检查工具名

# 安装 cat,nanohe vim
sudo apt-get install nano vim -y   

2.1.1 cat:快速查看文件内容

进入想要查看文档的路径,使用cd命令,然后输入如下指令:

cat file.txt   # 适合小文件,建议大文件直接使用 vscode

2.1.2 nano:简易文本编辑器

打开/创建文件:

nano notes.txt  # 若文件不存在则创建
sudo nano notes.txt  # 若提示权限不够,使用sudo提升权限

进入文档后,按照下述指令进行编辑:

操作作用
Ctrl + O写入文件
Ctrl + X退出编辑器
Ctrl + K剪切当前行
Ctrl + U粘贴内容
Ctrl + W搜索关键词

nano 操作示例:
使用 nano notes.txt 进入文档 --> Ctrl + O 写入文档 -->开始你操作!–> Ctrl + X 退出编辑器。

2.1.3 vim:高效文本编辑器(我更喜欢使用nano,更加易上手)

打开文件:

vim config.yaml

(一)模式切换:

普通模式(默认):按i进入插入模式(编辑内容)。

命令模式:按 Esc 退出插入模式,输入 :wq保存并退出。

(二)基本命令:

:q!:不保存强制退出;

/keyword:搜索关键词(按 n 跳转到下一个匹配项);

dd:删除当前行;

yy:复制当前行 → 按 p 粘贴;

2.2 文本过滤搜索

注释: 我个人觉得这部分内容主要还是应用于搜索文件夹以及是否卸载干净某一工具(搜索不到,证明卸载干净)。

2.2.1 grep:关键词搜索工具


(一)基础概念

grep 命令的全称为Global Regular Expression Print,基于模式匹配的文本搜索工具,支持正则表达式和多种过滤逻辑,广泛用于日志分析、代码调试、数据筛选等场景。有编程语言基础能更好理解正则表达式等原理。

命令的基本语法指令:

grep [选项] "模式" 文件或目录...  

(二)常见组合用法使用与示例

常用选项表

选项作用示例
-i忽略大小写匹配grep -i "error" file.log
-v反向匹配(输出不包含模式的行)grep -v "debug" file.txt
-n显示匹配行的行号grep -n "warning" app.log
-c统计匹配行的数量grep -c "404" access.log
-r递归搜索目录及其子目录grep -r "TODO" ./src
-E启用扩展正则表达式grep -E "error|warn" log.txt
-A N显示匹配行及其后 N 行grep -A 2 "crash" debug.log
-B N显示匹配行及其前 N 行grep -B 3 "exception" trace.log
-w精确匹配单词(避免部分匹配)grep -w "test" file.txt

2.2.2 find:文件搜索与操作


(一)基础概念

find 是 Linux系统中功能最强大的文件搜索工具,在给定路径下递归搜索符合指定条件的文件和目录,支持逻辑运算(与、或、非)及自定义操作(删除、复制等)。

命令的基本语法指令:

find [路径] [表达式] [操作]  

(二)常见组合用法使用与示例

常用选项表

选项作用示例
-name按文件名匹配(支持通配符)find /var -name "*.log"
-iname按文件名匹配(忽略大小写)find . -iname "CONFI*"
-type按文件类型过滤(f文件/d目录)find ~ -type f
-size按文件大小过滤(+大于/-小于)find / -size +100M
-mtime按修改时间过滤(天数)find . -mtime -7
-maxdepth限制搜索深度find /etc -maxdepth 2 -name "*.conf"
-exec对匹配项执行命令find /tmp -name "*.tmp" -exec rm {} \;
-empty查找空文件/目录find . -empty
-perm按权限过滤find . -perm 644
-user按所有者过滤find /home -user alice

操作示例

# 查找指定文件
find / -name "nginx.conf"      # 全盘搜索 nginx 配置文件  
find /var/log -iname "*.log"   # 忽略大小写查找日志文件  

# 通配符与路径匹配
 find /etc -path "*nginx/*.conf"  # 匹配路径中包含 `nginx` 的配置文件

#  查找空目录和文件
find /tmp -type d -empty       # 查找空目录  
find . -type f -size 0         # 查找大小为 0 的文件。  

# 限制文件大小
find /backup -size +100M       # 查找大于 100MB 的文件  
find ~ -size -1k               # 查找小于 1KB 的文件。  

# 最近修改的文件
find /var/www -mtime -3        # 查找 3 天内修改过的文件  
find . -mmin +30               # 查找 30 分钟前修改的文件

# 对比参考文件时间
find . -newer reference.txt    # 查找比 reference.txt 更新的文件 

# 组合条件(与、或、非)
find . $$ -name "*.py" -o -name "*.sh" $$  # 查找`.py`或`.sh`文件  
find /var ! -user root                     # 查找非root用户拥有的文件

# 执行操作(删除、复制等)
find /tmp -name "*.tmp" -delete               # 删除所有临时文件  
find . -name "*.bak" -exec cp {} /backup \;   # 备份文件  

# 控制搜索范围
find /etc -maxdepth 2 -name "*.conf"      # 仅搜索两级子目录。  

# 排除特定目录
find . -path "./cache" -prune -o -name "*.log"  # 跳过`cache`目录搜索日志 

2.2.3 locate:快速文件定位工具


(一)基础概念
locate 是基于预建数据库的轻量级文件搜索工具,通过 updatedb 定期更新索引实现毫秒级搜索,适合快速定位已知存在的文件,但无法实时捕获新建文件(需手动更新数据库)。

命令基本语法指令:

locate [选项] <模式>

(二)常见组合用法与示例

常用选项表

选项作用示例
-i忽略大小写匹配locate -i "readme.md"
-r启用正则表达式匹配locate -r "/log_[0-9]{8}\.txt$"
-c仅显示匹配项数量locate -c ".jpg"
-l N限制输出结果数量locate -l 10 "*.conf"
-e仅显示当前存在的文件locate -e "temp_file"
--regex完全使用正则表达式模式`locate --regex "(png

操作示例

# 基本用法(快速模糊搜索)
locate nginx.conf          # 搜索所有路径包含 `nginx.conf` 的文件  
locate "*.log"             # 匹配所有日志文件(需引号防止通配符扩展)

# 忽略大小写
locate -i "Makefile"       # 查找 `Makefile`/`makefile` 等变体

# 限制结果数量
locate -l 5 "error.log"    # 仅显示前 5 条匹配结果

# 正则表达式匹配
locate -r "^/var/log/.*\.log$"  # 匹配 `/var/log` 下所有日志文件  
locate --regex "(\.mp4|\.avi)$" # 匹配视频文件

# 统计文件数量
locate -c ".git"           # 统计系统中所有包含 `.git` 的路径数量

# 过滤失效链接
locate -e "old_link"       # 仅输出当前存在的文件/目录

# 组合使用(正则 + 限制数量)
locate -r "202[0-9]-report\.pdf" -l 10

(三)注意事项

  1. 数据库更新机制
    默认每天通过 cron 任务自动更新数据库,手动更新需执行:
sudo updatedb    # 立即重建索引(需要管理员权限)
  1. 权限限制
    locate 数据库不包含用户无权限访问的文件(如 /root 下的文件除非以 root 权限运行 updatedb)。

  2. find 的对比

    工具速度实时性复杂度典型场景
    locate极快非实时简单模式匹配快速定位已知存在的文件
    find较慢实时支持复杂条件精确搜索、结合操作命令

注释: 优先用 locate 快速缩小范围,再用 find 细化操作 ;新建文件后若未出现在结果中,需手动 sudo updatedb

2.3 章尾总结

这章工作内容的逻辑还是十分清晰的,先了解如何查看和编辑文本,然后如何使用grepfind进行通过灵活组合选项,高效解决文件定位与管理需求。

关键命令总结

操作命令
快速查看文件内容cat
简易文本编辑器nano
高效文本编辑器vim
关键词搜索工具grep
文件搜索与操作find
轻量级文件搜索工具locate



结 束 语

能够看到这里的观众老爷,无疑是对up的最大肯定和支持,在此恳求各位观众老爷能够多多点赞、收藏和关注(强烈推荐大家关注一下up主和新建的这个合集“Ubuntu系统教学系列”)。在这个合集中,未来将持续给大家分享关于Ubuntu系统生态中的多种常见开发实用操作。未来也将继续分享Docker、conda、ROS等等各种实用干货。感谢大家支持!




往期回顾 — 专栏 “Ubuntu系统教学系列”


专栏: Ubuntu系统教学系列

Ubuntu教学系列(一):安装win11+Ubuntu双系统并配置Ubuntu常用软件

Ubuntu教学系列(二):安装微信和QQ通讯软件以及输入法

Ubuntu教学系列(三): “高频率” 终端命令行指令操作

Ubuntu教学系列(四):软件包管理深度解析(从APT到源码编译)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值