1、linux文件系统
1.1、文件系统
# 什么是文件系统?
硬盘分区之后,还需要格式化,这个格式化操作其实就是指定文件系统;文件系统的本质就是对一个存储设备上的元数据和数据的组织;
1.2、文件系统特征
(1)文件和目录被组织成一个单根倒置树状结构;
(2)文件系统从根目录下开始,用“/”表示;
(3)根文件系统(rootfs)
(4)文件名区分大小写
(5)以“.”开头的为隐藏文件,路径分隔符为“/”
(6)文件有两类数据:元数据和数据
(7)文件系统分层结构
(8)FHS:文件系统结构标准
1.3、文件名命名规范
(1)文件名最长255字节;
(2)包括路径在内的文件名称最长4095字节;
(3)除了/和nul,所有字符都有效;
(4)区分字符大小写
1.4、文件系统结构
# /boot:引导文件存放目录,内核文件(vmlinuz),引导加载器(bootloader,grub)等文件存放目录;
# /bin:提供所有用户使用的基本命令,不能关联至其他分区,系统启动会用到的程序;
# /sbin:管理类的基本命令;
# /lib:启动时程序依赖的基本共享库文件以及内核模块文件(/lib/modules)
# /lib64:专用于x86_64位系统的辅助共享库文件存放目录;
# /etc:配置文件存放目录;
# /home:普通用户家目录;
# /root:管理员家目录;
# /media:移动设备挂载点;
# /dev:设备文件以及特殊文件存储位置;例如:b --->block device 随机访问,c--->character device 线性访问(顺序访问);
# /usr ---> universal shared read-only data
# /var ---> variable data files
/var/cache:应用程序缓存数据目录;
/var/lib:应用程序状态信息数据;
/var/lock:锁文件
/var/log:日志文件
/var/run:运行中的进程相关数据,通常用于存放进程pid文件;
/var/tmp:保存系统2次重启之间产生的临时数据;
# /proc:用于输出内核与进程信息相关的虚拟文件系统;
# /sys:用于输出当前系统上硬件设备相关信息的虚拟文件系统;
# /tmp:存放临时文件,存放在该目录中的文件默认如果30天内没有被访问则会被清除;(重启系统也会清除)
###总结:一般linux上的应用程序的组成部分:
(1)二进制程序存放位置:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin等;
(2)库文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64等;
(3)配置文件:/etc,/etc/apps,/usr/local/etc等;
(4)帮助文件:/usr/share/man等;
1.5、linux下的文件类型
2、文件管理
2.1、文件查看命令
# ls命令:列出目录内容
用法:ls [options][files_or_dirs]
实例:
ls -a:显示所有文件,包含隐藏文件;
ls -A:显示所有文件,不包含"."和“..”;
ls -l:长格式显示;
ls -R:递归显示目录及子目录;
ls -1:以一列的方式显示;
ls -ld:以长格式显示目录及文件,不显示子文件及子目录信息;
# stat命令:查看文件状态信息
# 三个时间说明:
(1)atime:文件访问时间,当文件被读取和查看的时候时间更新;
(2)mtime:文件数据修改时间,当文件数据被修改的时候更新,但是文件的元数据被修改,mtime时间不变;
(3)ctime:当文件的元数据或者数据被修改,时间都会被更新
2.2、创建文件
# touch命令:文件存在则修改文件时间戳,不存在则创建文件;
选项:
-a:更新atime和ctime;
-m:更新mtime和cime;
-c:如果文件存在则更新3个时间戳,不存在则不做任何操作;
# mkdir命令:创建目录
选项:
-p:可以创建多级目录;
-v:显示创建过程信息;
-m:创建的同时指定目录权限;
2.3、删除文件
# rmdir命令:删除空目录;
# rm -rf :删除命令,慎用;
2.4、修改文件
# cp命令:复制文件或者目录;
(1)当源文件是一个文件时
# 当目标文件不存在,就新建同名文件,并拷贝源文件内容至新文件;
# 当目标文件存在,且为一个文件,则覆盖该文件,
# 当目标文件时一个目录时,则将源文件拷贝至目标目录文件之下;
(2)当源文件时多个文件时
# 当目标文件不存在,则报错(目标文件必须为一个目录文件)
(3)当源文件是一个目录文件时
# 当目录不存在,则创建指定名称的目录,并将所有文件放在这个目录下;
# 当目标文件存在,且为一个文件则会报错;如果为一个目录,则会合并两个目录,相同文件则会被覆盖;
##常用选项:
-i:覆盖文件时候的交互式提示;
-r:递归复制,可以复制目录;
-a:归档,相当于 -dR --preserve=all;
-f:强制覆盖;
-v:显示复制过程;
# mv命令:移动或重命名文件
-i:交互式;
-f:强制覆盖;
记录一个特殊用法:mv /tmp/b{,.dir} ==> mv /tmp/b /tmp/b.txt
2.5、绝对路径与相对路径
# 绝对路径:从“/”开始的路径,例如:/home/lxroot/a.txt;
# 相对路径:相对于当前目录,例如:../jjgame/;
# 以/home/lxroot/a.txt 位列
# 基名:basename a.txt
# 目录名:dirname /home/lxroot
2.6、文件通配符
# 文件通配符一般用来作为文件名的匹配;
3、文件系统特性
3.1、文件系统组成
(1)superblock超级块
# 文件系统中第一个块被称为超级块,记录了整个文件系统的整体信息,包括inode/block的总量,剩余量等;
(2)inode
# 记录文件的属性,一个文件占用一个inode,同时也记录文件所在的block号;
(3)block数据块
# 实际记录文件内容区域,如果文件内容大于1个block的大小(最小block为1k),则需要多个block;
# 一个文件由目录项+inode+block组成,其中目录项=文件名+inode;
3.2、各种操作对于inode号变化
(1)cp对于inode变化
# 复制文件,简单的理解为复制文件就是所有新inode号+新的block;
(2)rm对于inode变化
# 释放inode号,删除目录项,将inode和block位置标记为空闲,实际数据不会马上被删除,当其他文件使用到该block块,数据会被覆盖;
(3)mv对于inode变化
# 如果在同一文件系统下移动,在目录项中添加新的文件名和inode号的对应关系(inode号不变),如果不在同一文件系统中,则和cp或rm类似;
4、软或硬链接
4.1、硬链接(hard link)
# 对于文件而言,计算机真正的识别标识为inode号而非文件名,目录文件的机构可以理解为[ dir:(filename,inode_number)]
# 目录或者文件名不相同,但是inode号相同的文件,称为“硬链接”;由于硬链接的inode号相同,就会拥有相同的inode与block的对应关系;
# 简单来说,对于一个文件做硬链接,相当于对这个文件的内容增加了一个读取入口而已;
# 总结:
(1)硬链接创建的时候占用一个计数引用(连接数),不占用新的inode号;
(2)对于被硬链接的文件和链接文件,任意其一被修改,二者内容都会被修改;
(3)硬链接不支持跨区,不支持目录文件;
(4)删除文件时候,只减少连接数,直到连接数为0;
4.2、软链接(soft link)
# 语法:ln -s file1 file2
(1)软链接又称为符号链接,相当于windows的快捷方式,完全依赖原文件;
(2)软链接创建的时候不会占用连接数,但是会额外占用一个inode号;
(3)软链接需要使用绝对路径,且大小取决于路径字符数;
(4)软链接可以跨分区,也可用于目录文件;
5、I/O重定向
5.1、文件的标准输入与输出
# 程序=指令+数据
数据分为:读入数据input,输出数据output
# 打开的文件都有一个fd:file description 文件描述符
# linux提供给程序三种I/O设备
标准输入(stdin,0) 默认接受键盘的输入
标出输出(stdout,1)默认输出到终端minor
标准错误输出(stderr,2)默认输出到终端minor
# 什么叫I/O重定向:其实就是改变输入与输出的默认位置;
# 支持的符合操作
# >>:表示为追加重定向;
2>&1 :表示2追随1,即正确输出到哪,错误输出也到哪;
/dev/null:是一个特殊文件,它把所有传递给它的内容全部丢弃;
() :能合并多个程序改变标准输出;
6、管道的使用
# 管道(使用符号“|”表示)用来连接命令
# 语法:command1 | command2 | command3
# 说明:将命令1的STDOUT发送给命令2的STDIN,命令2的STDOUT发送到命令3的STDIN;
# 注意:STDERR默认不能通过管道转发,可以利用2>&1或者|&来实现;