一切皆文件
在 Linux 系统中一切皆文件,系统中一切都被抽象成了文件,那么一个打开的文件是如何与应用程序进行对应呢?
解决方案是使用文件描述符(file descriptor,简称fd),
当在进程中打开一个现有文件或者创建一个新文件时,内核向该进程返回一个文件描述符,用于对应这个打开/新建的文件。
这些文件描述符都存储在内核为每个进程维护的一个文件描述符表中。
标准 C 库的文件 IO 函数使用的文件指针 FILE* 在 Linux 中也需要通过文件描述符的辅助才能完成读写操作。
FILE 其实是一个结构体,其内部有一个成员就是文件描述符内核为每一个进程维护了一个文件描述符表,索引表中的值都是从 0 开始的,
所以在不同的进程中你会看到相同的文件描述符,但是它们指向的不一定是同一个磁盘文件。
打开的最大文件数
每一个进程对应的文件描述符表能够存储的打开的文件数是有限制的,默认为 1024 个,这个默认值是可以修改的,支持打开的最大文件数据取决于操作系统的硬件配置。
默认分配的文件描述符
当一个进程被启动之后,内核 的文件描述符表中就已经分配了三个文件描述符,这三个文件描述符对应的都是当前启动这个进程的终端文件(Linux 中一切皆文件,终端就是一个设备文件,在 /dev 目录中)
STDIN_FILENO: 标准输入,可以通过这个文件描述符将数据输入到终端文件中,宏值为 0。
STDOUT_FILENO:标准输出,可以通过这个文件描述符将数据通过终端输出出来,宏值为 1。
STDERR_FILENO:标准错误,可以通过这个文件描述符将错误信息通过终端输出出来,宏值为 2。
这三个默认分配的文件描述符是可以通过 close() 函数关闭掉,但是关闭之后当前进程也就不能和当前终端进行输入或者输出的信息交互了。打开的新文件会关联文件描述符表中最小的没有被占用的文件描述符。
Linux文件权限设定
Linux下文件的权限类型一般包括读,写,执行对应字母为 r、w、x
Linux下权限的属组有 拥有者 、群组 、其它组 三种。
读,写,执行对应数字权限 r=4,w=2,x=1 。
常见权限:
-rw------- (600) 只有拥有者有读写权限。
-rw-r--r-- (644) 只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) 只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) 拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwxr-xr-x (775) 拥有者和属组用户有读、写、执行权限;而其他用户只有读、执行权限。
-rwx--x--x (711) 拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) 所有用户都有文件读、写权限。
-rwxrwxrwx (777) 所有用户都有读、写、执行权限。
更改文件权限 (chmod命令)
chmod [可选项] <mode> <file...>
chmod:
cxx@ubuntu16:~/driver$ ls
cdev class dev_t export module param
cxx@ubuntu16:~/driver$ ls -l | grep dev_t
drwxrwxrwx 3 cxx cxx 4096 Apr 21 16:19 dev_t //当前: d-目录 rwxrwxrwx 777
cxx@ubuntu16:~/driver$ chmod 775 dev_t //更改dev_t权限
cxx@ubuntu16:~/driver$ ls -l | grep dev_t
drwxrwxr-x 3 cxx cxx 4096 Apr 21 16:19 dev_t //更改后: wxrwxr-x 775
cxx@ubuntu16:~/driver$
根目录文件结构
位置 | 说明 |
---|---|
/bin | 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里; |
/etc | 存放系统管理和配置文件; |
/home | 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可直接用 ~ 表示; |
/usr | 用于存放系统应用程序; |
/opt | 额外安装的可选应用程序包所放置的位置; |
/proc | 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息; |
/root | 超级用户(系统管理员)的主目录(特权阶级); |
/sbin | 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序如ifconfig等; |
/dev | 用于存放设备文件; |
/mnt | 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统; |
/boot | 存放用于系统引导时使用的各种文件; |
/lib | 存放着和系统运行相关的库文件 ; |
/tmp | 用于存放各种临时文件,是公用的临时文件存储点; |
/var | 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等; |
/lost+found | 这个目录平时是空的,存放系统非正常关机而留下“无家可归”的文件。 |
文件系统概述
文件系统用来组织计算机的文件和资料的系统,是操作系统封装的一个系统服务程序,实际是一个软件程序,用来存储和管理计算机文件和资料。
磁盘文件系统:NTFS,EXT3
闪存文件系统:JFFS2,YAFFS
数据库文件系统:BFFS,WINFS
网络文件系统:NFS
虚拟文件系统:VFS(Proc)
文件系统的功能:能定义文件的组织方式,文件的结构;提供建立和存取文件的环境(目录和文件);