Linux文件系统基础概念

Linux文件系统基础概念

一、文件的概念

在Linux系统语境下,文件(file)一般有两个基本含义:

狭义:指普通的文本文件,或二进制文件。包括日常所见的源代码、word文档、压缩包、图片、视频文件等等。

普通文件图标

广义:除了狭义上的文件外,几乎所有可操作的设备或接口都可视为文件。包括键盘、鼠标、硬盘、串口、触摸屏、显示器等,也包括网络通讯端口、进程间通讯管道等抽象概念

广义文件概念

二、Linux系统中文件的分类

在Linux中,文件总共被分成了7种,他们分别是:

  • 普通文件存在于外部存储器中,用于存储普通数据(包括音频、视频、图像...)
  • 目录文件:用于存放目录项,是文件系统管理的重要文件类型
  • 管道文件:一种用于进程间通信的特殊文件,也称为命名管道FIFO
  • 套接字文件:一种用于网络间通信的特殊文件
  • 链接文件:用于间接访问另外一个目标文件,相当于Windows快捷方式
  • 字符设备文件:字符设备在应用层的访问接口
  • 块设备文件:块设备在应用层的访问接口
gec@ubuntu:~$ ls -l
-rw-r--r-- 1 gec gec 345 Sep 12:38 a.zip
drwxr-xr-x 2 gec gec 1024 Sep 12:38 dir/
prw-r--r-- 1 gec gec 0 Sep 12:38 pipe
srw-r--r-- 1 gec gec 0 Sep 12:38 socket
lrw-r--r-- 1 gec gec 4 Sep 12:38 link -> a.zip
crw-r--r-- 1 gec gec 1, 3 Sep 12:38 character
brw-r--r-- 1 gec gec 5, 1 Sep 12:38 block

注意到,每个文件信息的最左边一栏,是各种文件类型的缩写,从上到下依次是:

  • -(regular)普通文件
  • d(directory)目录文件
  • p(pipe)管道文件(命名管道)
  • s(socket)套接字文件(Unix域/本地域套接字)
  • l(link)链接文件(软链接)
  • c(character)字符设备文件
  • b(block)块设备文件

三、系统IO与标准IO

对文件的操作,基本上就是输入输出,因此也一般称为IO接口。在操作系统的层面上,这一组专门针对文件的IO接口就被称为系统IO;在标准库的层面上,这一组专门针对文件的IO接口就被称为标准IO,如下图所示:

系统IO
系统IO
  • 系统IO:是众多系统调用当中专用于文件操作的一部分接口。
  • 标准IO:是众多标准函数当中专用于文件操作的一部分接口。

从图中还能看到,标准IO实际上是对系统IO的封装,系统IO是更接近底层的接口。如果把系统IO比喻为菜市场,提供各式肉蛋菜果蔬,那么标准IO就是对这些基本原来的进一步封装,是品类和功能更加丰富的各类酒庄饭店。

如何选择系统IO与标准IO

  • 系统IO

    • 由操作系统直接提供的函数接口,特点是简洁,功能单一
    • 没有提供缓冲区,因此对海量数据的操作效率较低
    • 套接字Socket、设备文件的访问只能使用系统IO
  • 标准IO

    • 标准C库提供的函数接口,特点是功能丰富
    • 有提供缓冲区,因此对海量数据的操作效率高
    • 编程开发中尽量选择标准IO,但许多场合只能用系统IO

总的来讲,这两组函数接口在实际编程开发中都经常会用到,都是基本开发技能


四、文件权限详解

在Linux中,文件权限通过9个字符表示,分为三组:

-rwxr-xr--
 ↑↑↑↑↑↑↑↑↑
 ││││││││└── 其他用户读权限
 │││││││└─── 其他用户写权限
 ││││││└──── 其他用户执行权限
 │││││└───── 所属组读权限
 ││││└────── 所属组写权限
 │││└─────── 所属组执行权限
 ││└──────── 所有者读权限
 │└───────── 所有者写权限
 └────────── 所有者执行权限

常用文件操作命令

# 查看文件类型
file filename

# 查看文件详细信息
ls -l filename

# 改变文件权限
chmod 755 filename

# 改变文件所有者
chown user:group filename

# 创建链接
ln -s target link_name  # 软链接
ln target link_name     # 硬链接

五、Linux 文件操作基本命令速查表

1. 文件查看

场景 命令
一次性查看全部内容 cat file
带行号查看 cat -n file
分页上下滚动 less file
仅向下翻页 more file
看前 20 行 head -n 20 file
看后 20 行 tail -n 20 file
实时刷新日志 tail -f file

2. 文件/目录创建

场景 命令
创建空文件 touch file
一次性建多级目录 mkdir -p a/b/c
创建并赋权 755 mkdir -m 755 dir

3. 文件编辑

场景 命令
新手友好编辑 nano file
高级编辑 vim file

4. 复制、移动、删除

场景 命令
复制文件 cp src dst
复制目录 cp -r src_dir dst_dir
移动/重命名 mv old new
强制删除文件 rm -f file
递归删目录 rm -r dir
交互式删除 rm -i file
仅删空目录 rmdir dir

5. 查找与搜索

场景 命令
按名称找文件 find /path -name "*.txt"
按类型找目录 find /path -type d -name "cache"
大于 100 MB 的文件 find /path -size +100M
7 天内修改的文件 find /path -mtime -7
文件内关键词搜索 grep "keyword" file
忽略大小写搜索 grep -i "key" file
反向匹配 grep -v "key" file
递归目录搜索 grep -r "key" /path

6. 权限与归属

场景 命令
数字赋权 chmod 644 file
给所有人加执行 chmod a+x script.sh
递归改权限 chmod -R 755 dir
改所有者 chown user:group file
递归改归属 chown -R user:group dir

7. 信息查看

场景 命令
详细列表 ls -l
含隐藏文件 ls -a
人类可读大小 ls -lh
按时间排序 ls -lt
查看文件类型 file file
查看详细属性 stat file

8. 差异比较

场景 命令
文本差异 diff -u file1 file2
并排对比 diff -y file1 file2
二进制差异 cmp file1 file2

9. 压缩/解压

场景 命令
打包不压缩 tar -cvf archive.tar dir/
打包+gzip tar -czvf archive.tar.gz dir/
解压 tar.gz tar -xzvf archive.tar.gz
仅 gzip 单文件 gzip file
解压 gz gunzip file.gz

10. 传输与同步

场景 命令
复制到远程 scp file user@host:/remote/path
远程复制到本地 scp user@host:/remote/file .
目录同步(本地) rsync -av src/ dst/
同步到远程 rsync -av local_dir/ user@host:remote_dir/

11. 实用技巧

场景 命令
当前目录大小排行 du -h --max-depth=1 | sort -hr
找大于 100 M 的文件 find /path -size +100M -exec ls -lh {} \;
GBK 转 UTF-8 iconv -f GBK -t UTF-8 in.txt -o out.txt
按 100 MB 分割 split -b 100M bigfile part_
合并分割文件 cat part_* >bigfile
去重排序 sort file | uniq > new_file
统计重复行 sort file | uniq -c

posted @ 2025-11-04 08:25  林明杰  阅读(8)  评论(0)    收藏  举报