Linux文件管理与查询

一、文件目录结构

目录说明

1./bin/sbin:系统命令目录

1.1 /bin (二进制命令)

  • 作用:存放普通用户和系统管理员都可以使用的基础命令
  • 特点:
    • 普通用户下也可使用
    • 命令多为系统运行必需的核心工具

1.2/sbin(系统管理命令)高级权限

  • 作用:存放需要管理员权限执行的系统管理命令
  • 特点:
    • 普通用户默认无权执行(需 sudo )
    • 命令多涉及系统配置和维护

2./dev:设备文件目录

  • 作用:管理所有硬件设备和虚拟设备

  • 关键设备示例:

    • 硬盘设备:

      • /dev/sda :第一块 SATA/SCSI 硬盘

      • /dev/sda1:第一块硬盘的第一个分区

    • 虚拟设备:

      • /dev/null:空设备(丢弃所有输入
      • /dev/random:随机数生成器
  • 权限说明:

    • 块设备(如硬盘)通常只有 root 或 disk 用户组有操作权限

3./root/home :用户家目录

3.1 /root

  • 作用:超级用户(root)的家目录

  • 特点:

    • 默认只有 root 用户可访问

    • 存放 root 的配置文件

3.2/home

  • 作用:存放普通用户的家目录
  • 特点:
    • 每个用户对应一个子目录
    • 用户对其家目录有完全控制权

4./tmp/var:动态数据目录

4.1 /tmp

  • 作用:存放临时文件
  • 特点
    • 全局可读写(权限为 drwxrwxrwt)
    • 系统重启或定期清理时会自动删除文件。

4.1 /var

  • 作用:存放运行时可变数据(如日志、数据库、邮件)
  • 常见子目录:
    • /var/log :系统和服务日志(如 syslog 、nginx/access.log )
    • /var/lib :应用程序数据(如 MySQL 数据库 /var/lib/mysql )
    • /var/spool :队列数据(如邮件队列 /var/spool/mail )
    • /var/log/secure :安全认证日志(如 SSH 登录记录)
    • /var/log/messages :核心系统日志(替代通用 syslog)

5.设备挂载目录

5.1/media

  • 作用:系统自动挂载可移动设备
  • 特点
    • 现代 Linux 发行版(如 Ubuntu)自动挂载到 /media/用户名/设备名

5.2/mnt

  • 作用:管理员手动挂载临设备或远程存储
  • 特点
    • 通常为空目录,需手动创建子目录并挂载

6./etc :系统配置目录

  • 作用:存放系统和应用程序的配置文件

  • 关键文件示例

    • /etc/passwd :用户账户信息

    • CentOS 特有路径:

      • 网络配置:

        /etc/sysconfig/network-scripts/ifcfg-ens192 # 网卡配置文件(替换ens192 为实际网卡名)
      • SELinux 配置:

        /etc/selinux/config # SELinux 模式(enforcing/permissive/disabled)
      • YUM/DNF 配置:

        /etc/yum.repos.d/CentOS-Base.repo # 软件源配置
  • 操作注意:

    • 修改配置文件后,通常需要重启服务生效

7./proc:虚拟文件系统

  • 作用:动态反映内核、进程和硬件状态
  • 关键文件示例:
    • /proc/cpuinfo :CPU 详细信息
    • /proc/meminfo :内存使用情况
    • /proc/1234 :PID 为 1234 的进程信息

8./usr/usr/local:系统资源目录

8.1/usr

  • 作用:存放系统核心程序、库和文档
  • 子目录
    • /usr/bin :用户命令(如 gcc 、python )
    • /usr/lib :库文件(如 .so 动态库)
    • /usr/share :共享数据(如文档、时区文件)

8.1/usr/local

  • 作用:存放用户手动编译安装的软件
  • 特点:
    • 避免与系统包管理器(如 apt 、yum )安装的软件冲突

9./boot:系统启动目录

  • 作用:存放启动引导文件

  • 关键文档:

    • vmlinuz-* :Linux 内核文件
    • initrd.img-* :初始内存盘镜像
    • /boot/grub :GRUB 引导程序配置。
  • 操作警告:

    • 误删此目录文件可能导致系统无法启动!

10./lib/lib64:库文件目录

10.1 lib

  • 作用:存放32 位系统的核心库文件(如 glibc )
  • 常见内容:
    • 动态链接库( .so 文件)
    • 内核模块 /lib/modules/ 。

10.2lib64

  • 作用:存放64 位系统的核心库文件

11./lost+found :文件系统恢复目录

  • 作用:fsck 工具修复文件系统时存储未被引用的文件碎片
  • 特点:
    • 每个磁盘分区根目录下都有此目录
    • 普通用户无需操作,数据需手动恢复

二、文件管理

文件管理命令

1.touch-创建空文件

用途:创建新文件或更新文件时间戳。

语法:

touch 文件名

示例:

touch file.txt # 创建空文件
touch file1.txt file2.txt # 批量创建

2.mkdir-创建目录

用途:创建新目录

语法:

mkdir [选项] 目录名

常用选项:

mkdir dir1			# 创建单层目录
mkdir -p dir1/dir2 # 递归创建嵌套目录(自动补全父目录)

3.rm-删除文件或目录

用途:删除文件或目录(慎用!)。

语法:

rm [选项] 文件或目录

常用选项:

rm file.txt # 删除文件
rm -r dir/ # 递归删除目录及其内容
rm -f file.txt # 强制删除(不提示确认)

[!WARNING]

警告: rm -rf / 会删除整个系统,切勿尝试!

4.cp - 复制文件或目录

用途:复制文件或目录到指定位置。

语法:

cp [选项] 源文件 目标路径

常用选项:

cp file.txt backup/ # 复制文件到目录
cp -r dir1/ dir2/ # 递归复制目录
cp -f dir1 dir2 #强制复制
cp -i file.txt backup/ # 覆盖前提示确认

5.mv - 移动或重命名文件

用途:移动文件或目录,或修改名称

语法:

mv 源文件 目标路径或名称

示例:

mv old.txt new.txt # 重命名文件
mv file.txt /backup/ # 移动文件到目录

6.ls

常用选项:

ls -a 显示隐藏文件
ls -l 长格式显示
ls -h 人类可读的文件大小
ls -R 递归显示子目录

7.查询命令(cat less tail grep find

(1)cat

用途:

用于快速查看、合并或创建文件内容。适合小文件,直接将内容输出到终端,无交互功能

语法:

cat filename # 查看文件内容
cat file1 file2 # 同时显示多个文件内容
cat file1 file2 > merged_file # 合并文件

常用选项:

cat -n 文件名 #显示行号(包括空行)
cat -b 文件名 #显示行号(忽略空行)
cat -s 文件名 #压缩连续空行为1行
cat -E 文件名 #在行尾显示$符号
(2)less

用途:

提供用户交互式地滚动浏览文件。在 less 环境下,可以使用方向键或 Page Up/Page Down 键来滚动浏览文件。按 q 键可以退出less

语法:

less filename

常用选项:

less -N:显示行号
less -m:显示更详细的提示信息 (进度%)
less -E:在文件结束后自动退出
less -S:禁用自动换行
(3)tail

用途:

用于查看文件末尾内容,默认显示最后10行。常用于实时监控日志更新。

语法:

tail filename  	# 显示文件最后10行
tail -n 20 filename # 显示文件最后20行

常用选项:

tail -n 文件 #指定显示的行数
tail -f 文件 #实时追踪文件变化(常用于监控日志)

8.grep核心知识点

1.基础语法
grep [选项] "模式" [文件...]
2.grep常用选项
选项 说明
-i 忽略大小写
-o 仅输出匹配内容
-w 精确匹配
-r 递归搜索
-n 统计行号
-c 统计行数
-v 反向匹配(排除模式)
-A N 显示匹配行及匹配后N行
-B N 显示匹配行及匹配前N行
3.正则表达式
(1)基础正则表达式
符号 说明
. 匹配任意单个字符
^ 匹配行首
$ 匹配行尾
[abc] 匹配括号内任意字符
[^abc] 排除括号内字符
***** 重复前一个字符0次或多次
(2)扩展正则表达式
符号 说明
+ 前一个字符重复1次或多次
前一个字符重复0次或1次
{n,m} 前一个字符重复n到m次
| 逻辑或

补充:

#grep常用场景速查
场景 命令示例
快速定位错误 grep -n “ERROR” file
统计日志关键词频率 grep -c “pattern” file
提取结构化数据 grep -Eo “正则表达式” file
日志上下文分析 grep -C3 “Exception” file
注意事项

转义特殊字符:如 $ 、 * 需用 \ 转义。

9.find核心知识点

1.基础语法
find [搜索路径]  [匹配条件] [执行动作]

搜索路径:默认为当前目录( . ),可指定绝对或相对路径。

匹配条件:按名称、类型、大小、时间等过滤文件。

执行动作:对匹配文件执行操作(如删除、输出路径)。

2.常用匹配条件
(1)按名称或路径匹配
条件 说明
-name 按文件名匹配(区分大小写)
-iname 按文件名匹配(不区分大小写)
-path 按路径匹配
(2)按文件类型匹配
条件 说明
-type f 仅匹配普通文件
-type d 仅匹配目录
-type l 仅匹配符号链接
(3)按文件大小匹配
条件 说明
-size +10M 找到大于 10MB 的文件
-size -1G 找到小于 1GB 的文件
-size 0 找到所有空文件
(4) 按时间戳匹配
条件 说明
-mtime -7 (modify time 记录修改时间) 7 天内修改过的文件
-atime +30 30 天前访问过的文件
-newer file 比指定文件更新的文件
(5) 按权限匹配
条件 说明
-perm 644 权限精确为 644 的文件
-perm /u=x 用户有执行权限的文件
3.逻辑操作符

[^find实验 :忽略特定目录 -o用法]:

操作符 说明
-a 逻辑与
-o 逻辑或
逻辑非
4.执行动作

[^find实验:搜索并压缩文件 -exec命令]:

动作 说明
-print 输出文件路径(默认动作)
-delete 删除匹配的文件
-exec 执行自定义命令
-ok 交互式执行命令(需确认)
#常用场景速查
场景 命令示例
清理临时文件 find /tmp -type f -mtime +7 -delete
查找大文件 find / -size +100M -exec ls -lh {} ;
批量重命名 find . -name “*.old” -exec mv {} {}_new ;
按内容搜索 find . -type f -exec grep “pattern” {} ;
注意事项:

1.谨慎使用 **-**delete :建议先运行 -print 确认文件列表

2.处理特殊字符:使用 -print0 和 xargs -0 避免文件名问题:

find . -name "*.txt" -print0 | xargs -0 rm
#文件类型及标识符
类型(标识符) 特点 示例 标识符
普通文件(-) 存储文本、二进制数据(如脚本、图片、可执行程序) /home/user/file.txt (在find命令类型中使用f查找普通文件) ls -l输出首字符为 -
目录文件(d) 用于组织其他文件或子目录,本质是文件名与 inode 的映射表。 /etc/home ls -l输出首字符为 d
符号链接(l) 软链接(快捷方式),指向另一个文件或目录;删除链接不影响原文件。 /usr/bin/python -> python3 ls -l输出首字符为 l
设备文件(b、c) 如硬盘(/dev/sda),数据按块读写。 如键盘(/dev/tty),数据按字符流读写 ls -l输出首字符为 bc
管道文件(p) 命名管道(FIFO),用于进程间通信。 通过 mkfifo创建 ls -l输出首字符为 p
套接字文件(s) 用于网络或本地进程通信(如 MySQL 套接字)。 /var/run/mysqld/mysqld.sock ls -l输出首字符为 s
#文件类型的操作命令
创建文件 删除文件
普通文件 touch file.txt rm file.txt
目录 mkdir mydir rm -r mydir (-r表示递归删除,不加-r无法删除非空目录)
链接文件 ln -s /path/to/original link_name rm link_name

Linux文件管理与查询实验

grep命令

实验4.2:提取IP地址

grep -Eo "([0-9]{1,3}\.){3}[0-9]{1,3}" practice.txt
# 输出所有 IP 地址,如 192.168.1.100
192.168.x.x

实验 5.1:提取邮箱地址

grep -Eio "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z]{2,}\b" practice.txt
# 输出 user_john@example.com
xxxxxxxx@xxx.
{1,}
- 允许字母、数字、.、-;
- +:至少 1 次。
\b
单词边界,确保匹配的是独立邮箱(避免匹配 user@example.com.cn.xxx 中的部分)。
-E拓展正则表达式
-i忽略大小写
-o仅匹配筛选内容
grep -Eio "\b[A-Za-z0-9._%+-]+@([A-Za-z0-9-]+\.)+[A-Z]{2,}\b" practice.txt
user_john@example.com.cn

扩展练习

# 创建目录结构
mkdir -p /tmp/practice/logs/
cp practice.txt /tmp/practice/logs/
echo "ERROR: File not found" > /tmp/practice/error.log
# 递归搜索所有 "ERROR"
grep -r "ERROR" /tmp/practice/
# 排除 .log 文件
grep -r --exclude="*.log" "INFO" /tmp/practice/
a*.b
*.log

find命令

创建目录结构

mkdir -p ~/find-practice/{logs,data,backup}
touch ~/find-practice/logs/{app.log,error.log}
touch ~/find-practice/data/{file1.txt,file2.csv,image.jpg}
mkdir ~/find-practice/backup/old
touch ~/find-practice/backup/old/archive.tar.gz

实验 1.1:按名称搜索文件

find ~/find-practice -name "*.log"
# 输出所有 .log 文件的路径

实验 1.2:按类型搜索目录

find ~/find-practice -type d
# 列出所有子目录

实验 1.3:组合条件(名称与大小)

find ~/find-practice -name "*.jpg" -size +10k
# 查找大于 10KB 的 .jpg 文件

未查询到

实验 2.1:查找最近修改的文件

find ~/find-practice -mtime -1
# 列出 1 天内修改过的文件

实验 2.2:排除特定权限文件

find ~/find-practice ! -perm 644
# 查找权限不是 644 的文件
rwx
r4
w2
x1
文件所有者
所在用户组
其他用户

实验 3.1:删除空文件

find ~/find-practice -size 0 -delete
# 删除所有空文件

实验 3.2:批量修改权限

find ~/find-practice -name "*.sh" -exec chmod 755 {} \;
# 将所有 .sh 文件设为可执行

实验 3.3:搜索并压缩文件

touch ~/find-practice/logs/{app.log,error.log}
find ~/find-practice -name "*.log" -exec tar -czvf logs.tar.gz {} +
# 将 .log 文件打包为 logs.tar.gz