未记录事实核验 · 状态:现行内容
记录仅说明核验时间与维护状态,不保证适用于所有环境;使用前请留意正文中的版本、适用条件与风险提示。
warning 适用边界与维护说明
本文适合在 Bash 与常见 GNU 命令环境中学习 Linux 基础文件和目录操作,目录布局、组件安装位置及权限应以实际系统为准;建议在测试目录完成练习,删除、移动和覆盖示例不应直接作为生产脚本使用。下文使用 ls -lh 的人类可读大小示意,日期时间格式受实现和区域设置影响,不能依赖固定空白字段解析文件名;下一步导航已统一为一组。本次仅作全文结构审阅,未执行命令或进行外部事实、链接核验。
文件系统与目录操作 - Linux 文件操作完全指南
abstract 本文概要
- Linux 目录结构详解
- 绝对路径与相对路径
- 核心文件操作命令:cd/ls/pwd/mkdir/rm/cp/mv
- 通配符和文件查找
- 数据工作中的实际应用场景
Linux 目录结构
Linux 的目录是一棵倒置的树,根是 /。
/
├── bin/ 基础命令(ls、cp、rm 等),所有用户可用
├── sbin/ 系统管理命令(执行权限及是否需要 root 取决于具体命令和操作)
├── etc/ ★配置文件目录(nginx、hadoop、hosts 等都在这)
├── home/ ★普通用户家目录
│ ├── alice/ 用户 alice 的工作目录
│ └── bob/ 用户 bob 的工作目录
├── root/ root 用户的家目录(不在 home 下)
├── var/
│ └── log/ ★系统和应用日志(排查问题必看)
├── tmp/ 临时文件(清理时机由系统策略决定,不要放重要数据)
├── usr/
│ ├── bin/ 大量用户可用的命令,通常由系统软件包安装
│ └── local/ 本地编译安装的软件
├── opt/ ★第三方软件(Hadoop/Spark 通常装这里)
├── data/ 数据目录(公司自定义,不是 Linux 标准)
├── proc/ 虚拟文件系统,存放进程和系统信息
└── dev/ 设备文件
note 数据工程师最关心的目录
~:当前用户的家目录,普通用户常见位置为/home/你的用户名/,实际位置由账号配置决定,可用于存放代码和脚本/opt/或/data/:Hadoop、Spark、Kafka 等组件的安装目录/var/log/:排查问题时翻日志/etc/:修改配置文件(比如/etc/hosts)/tmp/:存临时文件,但不可靠
路径概念:绝对路径 vs 相对路径
绝对路径
从根目录 / 开始的完整路径,在任何位置都有效。
/home/alice/data/access.log
/opt/hadoop/logs/hadoop-root-namenode.log
/etc/hadoop/core-site.xml
相对路径
相对于当前目录的路径,用 .(当前目录)和 ..(上一级目录)表示。
# 假设当前在 /home/alice/
data/access.log # 等同于 /home/alice/data/access.log
./data/access.log # 同上,. 表示当前目录
../bob/data/file.csv # 上一级(/home/),再进 bob/data/
# 特殊符号
~ # 当前用户的家目录,等同于 /home/alice/
~/data/access.log # /home/alice/data/access.log
tip 实用建议
- 写脚本时用绝对路径,避免脚本在不同目录下执行时出错
- 日常交互时用相对路径,敲的字少
~是家目录的快捷方式,大量使用
核心命令详解
pwd - 我在哪里
Print Working Directory,显示当前所在目录。
# 数据工作场景:忘了自己在哪个目录,第一步就是 pwd
pwd
# /home/alice/projects/etl
# 输出当前目录(默认打印换行)
echo "$PWD"
cd - 切换目录
Change Directory,最高频的命令之一。
# 进入指定目录(绝对路径)
cd /opt/hadoop/logs
# 进入子目录(相对路径)
cd data
# 回到上一级目录
cd ..
# 回到上两级
cd ../..
# 回到家目录(三种方式等效)
cd
cd ~
cd $HOME
# 回到上次所在的目录(在两个目录间切换非常方便)
cd -
# 进入含空格的目录(用引号或反斜杠)
cd "My Data"
cd My\ Data
tip 数据工作场景:快速切换目录
# 经常要在工作目录和日志目录之间切换
cd /data/logs # 去看日志
# 查看完,回到工作目录
cd - # 瞬间回到上次目录,比重新输路径快
ls - 列出文件
List,查看目录内容,使用频率极高。
# 列出当前目录
ls
# 列出指定目录
ls /opt/hadoop/logs
# 详细信息(权限、大小、时间)
ls -l
# 以人类可读的格式显示文件大小(KB/MB/GB)
ls -lh
# 显示隐藏文件(以 . 开头的文件)
ls -la
# 按时间排序(最新的在前面)
ls -lt
# 按文件大小排序(最大的在前面)
ls -lS
# 递归显示子目录内容
ls -R
# 只显示目录
ls -d */
ls -lh 输出解读(日期格式仅为示意,实际格式受实现、区域设置及选项影响):
-rw-r--r-- 1 alice data 1.2G 2026-03-15 09:30 access.log
drwxr-xr-x 2 alice data 4.0K 2026-03-15 09:00 output/
# 解读:
# 第1列:文件类型和权限(详见 [[【技术与工具】/Linux/05-文件权限与用户管理]])
# 第2列:硬链接数
# 第3列:文件所有者
# 第4列:文件所属组
# 第5列:文件大小
# 随后的日期和时间:最后修改时间(此示例占两个空白分隔字段)
# 日期时间之后:文件名;文件名可含空格,不应以固定空白字段号解析
note 数据工作场景
# 查看数据文件,按大小排序,判断是否超预期
ls -lhS /data/warehouse/ods/
# 查看日志目录,按时间排序,找最新的日志
ls -lt /var/log/spark/
mkdir - 创建目录
# 创建单个目录
mkdir output
# 创建多级目录(-p 参数,parent)
mkdir -p /data/warehouse/ods/user_behavior/2026-03-18
# 创建多个目录
mkdir dir1 dir2 dir3
# 创建目录时设置权限
mkdir -m 755 shared_dir
tip 数据工作场景:按日期组织数据目录
# 自动创建日期目录(在脚本中常用)
DATE=$(date +%Y-%m-%d)
mkdir -p /data/raw/${DATE}
rm - 删除文件
warning 高危命令!rm 通常不进入桌面回收站!
删除后不能依靠回收站撤销;能否恢复取决于备份、快照及文件系统等条件,不应依赖事后恢复。执行前请三思,尤其是含通配符 * 的删除命令。
生产环境操作,建议先 ls 确认要删的文件,再执行 rm。
# 删除文件
rm file.txt
# 删除多个文件
rm file1.txt file2.csv
# 删除目录(-r 递归删除目录及其内容)
rm -r old_data/
# 强制删除,不提示(-f force)
rm -f file.txt
# 递归强制删除目录(生产环境谨慎使用!)
rm -rf old_data/
# 交互式删除(每个文件都会询问 y/n,安全)
rm -i *.log
warning 永远不要执行的命令
rm -rf / # 常见 GNU rm 默认拒绝递归删除根目录;不要尝试或依赖该保护
rm -rf /* # 可能删除根目录下通配符匹配的内容,根目录保护不能替代路径检查
rm -rf ./* # 递归删除当前目录中通配符匹配的内容,通常不含隐藏项
假设性风险示例:若误执行 rm -rf /data /,空格会使 /data 和 / 成为两个独立参数,可能删除 /data 中有权限删除的内容;常见 GNU rm 默认拒绝递归删除 /。这不是有来源的真实事故记录,也不能据此认为该命令安全。
cp - 复制文件
# 复制文件
cp source.txt destination.txt
# 复制到指定目录(保持文件名)
cp data.csv /backup/
# 复制整个目录(-r 递归)
cp -r /data/raw/ /backup/raw/
# 保留文件属性(时间戳、权限等)
cp -p data.csv /backup/
# 复制时保留所有属性(推荐用于备份)
cp -a /data/src/ /data/dst/
# 复制前询问(避免覆盖)
cp -i data.csv /backup/
# 显示复制操作信息(不显示百分比或实时复制进度)
cp -v large_file.tar.gz /backup/
tip 修改配置文件前先备份
# 好习惯:改配置前先备份
cp /etc/hadoop/core-site.xml /etc/hadoop/core-site.xml.bak.20260318
# 改完有问题,直接恢复
cp /etc/hadoop/core-site.xml.bak.20260318 /etc/hadoop/core-site.xml
mv - 移动/重命名文件
# 重命名文件(在同一目录下移动 = 重命名)
mv old_name.txt new_name.txt
# 移动文件到目录
mv data.csv /data/archive/
# 移动整个目录
mv /data/raw/ /data/archive/
# 移动多个文件到目录
mv file1.csv file2.csv file3.csv /data/archive/
# 移动时提示是否覆盖
mv -i source.txt /dest/
# 强制移动(不提示)
mv -f source.txt /dest/
通配符
通配符让你一次操作多个文件,非常实用。
# * 匹配任意数量的任意字符
ls *.csv # 列出所有 .csv 文件
rm /tmp/temp_* # 删除所有以 temp_ 开头的文件
cp /data/2026-03-*.log /backup/ # 复制所有 2026-03 月的日志
# ? 匹配单个任意字符
ls data_?.csv # 匹配 data_1.csv、data_a.csv,但不匹配 data_12.csv
# [] 匹配方括号内的字符之一
ls data_[123].csv # 匹配 data_1.csv、data_2.csv、data_3.csv
ls log_[0-9].txt # 匹配 log_0.txt 到 log_9.txt
# {} 大括号展开(不是通配符,是 bash 特性)
mkdir -p /data/{raw,processed,output}/{2026-03-17,2026-03-18}
# 等效于创建 6 个目录的组合
find - 查找文件
# 在当前目录及子目录中查找文件
find . -name "*.log"
# 在指定目录查找
find /var/log -name "*.log"
# 按文件大小查找(+表示大于,-表示小于)
find /data -size +1G # 按 GiB 单位向上取整后大于 1 的条目大小
find /tmp -size -1M # 按 MiB 单位向上取整后小于 1 的条目大小,并非所有小于 1 MiB 的文件
# 按修改时间查找
find /data -mtime -1 # 1 天内修改过的文件
find /data -mtime +30 # 修改时间距今的完整 24 小时段数大于 30,即至少 31 天(可用于清理归档)
# 查找并执行操作(-exec)
# 示例:删除修改时间至少为 31 天前的匹配日志;生产使用前须确认范围、保留策略及备份,并先预览匹配结果
find /var/log/app -name "*.log" -mtime +30 -exec rm {} \;
# 查找空文件
find /data -empty
# 按文件类型查找
find /opt -type d -name "hadoop" # 查找名为 hadoop 的目录(d=directory)
find /data -type f -name "*.csv" # 查找所有 csv 文件(f=file)
note 数据工作场景:找大文件
# 磁盘快满了,列出前 20 个匹配的、大小超过 500 MiB 的普通文件(未按大小排序)
find / -type f -size +500M 2>/dev/null | head -20
# 找出最近 24 小时内修改过的匹配数据文件(不代表今天创建)
find /data/raw -name "*.csv" -mtime -1
文件类型识别
# 查看文件类型(很有用,不要被扩展名骗了)
file data.csv
# data.csv: CSV text
file hadoop.tar.gz
# hadoop.tar.gz: gzip compressed data
file unknown_file
# unknown_file: ASCII text
# 查看文件大小
du -sh /data/warehouse/ # -s 汇总,-h 人类可读
du -sh /data/* # 查看各子目录大小
# 查看磁盘使用情况(数据工程师必备,磁盘满了很麻烦)
df -h
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 45G 2.0G 96% /
warning 磁盘使用率超过 85% 就要警惕
很多数据故障源于磁盘写满。定期 df -h 检查是个好习惯。
实战:整理数据目录结构
# 场景:把杂乱的数据文件整理成按日期的目录结构
# 1. 查看现状
ls -lh /data/raw/
# access_20260315.log access_20260316.log access_20260317.log
# orders_20260315.csv orders_20260316.csv
# 2. 创建目录结构
for date in 20260315 20260316 20260317; do
mkdir -p /data/raw/${date}/{logs,orders}
done
# 3. 移动文件
mv /data/raw/access_20260315.log /data/raw/20260315/logs/
mv /data/raw/orders_20260315.csv /data/raw/20260315/orders/
# ... 其他文件类似
# 4. 验证结果
find /data/raw -type f | sort
快速参考
| 命令 | 用途 | 常用参数 |
|---|---|---|
pwd |
显示当前目录 | - |
cd 目录 |
切换目录 | cd ~ 家目录,cd - 上次目录 |
ls |
列出文件 | -l 详细,-h 人类可读,-t 按时间 |
mkdir |
创建目录 | -p 创建多级目录 |
rm |
删除文件 | -r 删目录,-f 强制 |
cp |
复制文件 | -r 复制目录,-a 保留属性 |
mv |
移动/重命名 | - |
find |
查找文件 | -name、-size、-mtime |
du -sh |
查看目录大小 | -s 汇总,-h 人类可读 |
df -h |
查看磁盘使用 | - |
下一步
- 04-文件查看与编辑 - 学会查看和编辑文件内容
- 06-文本处理三剑客 - 用 grep/awk/sed 处理数据文件
- 05-文件权限与用户管理 - 理解文件权限,解决权限报错
掌握检查
- [ ] 能用
pwd确认当前位置,用cd -快速回到上一个目录 - [ ] 能区分绝对路径(以
/开头)和相对路径(不以/开头,如data/access.log、./data/access.log、../data/access.log),并能结合当前目录互相转换 - [ ] 用
rm -rf前知道检查路径是否正确,不会误删重要目录 - [ ] 能用
find /data -name "*.csv" -mtime -1找出最近一天修改过的 CSV 文件 - [ ] 能用
du -sh /data/查看目录总大小,用df -h查看磁盘剩余空间
实践练习
基础题:在 /tmp 下创建以下目录结构:/tmp/myproject/data/raw、/tmp/myproject/data/clean、/tmp/myproject/scripts,用一条 mkdir -p 命令完成。然后在 raw 目录下创建一个空文件 orders.csv,并将它复制到 clean 目录。
进阶题:找出 /var/log 目录下所有大于 10MB 的 .log 文件,并把它们的完整路径和大小输出到 /tmp/large_logs.txt(提示:find + -size + ls -lh)。
#Linux #文件操作 #目录管理 #数据工程 #基础命令