博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux文件、目录、软硬链接
阅读量:5948 次
发布时间:2019-06-19

本文共 3946 字,大约阅读时间需要 13 分钟。

1、文件或目录属性

Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。具体情况如下:
命令: ls -lih
输出:[root@localhost test]# ls -lih
总计 16K
2095113 drwxr-xr-x 6 root root 4.0K 10-27 01:58 scf
2095109 drwxrwxr-x 2 root root 4.0K 11-13 06:08 test3
2095131 drwxrwxr-x 2 root root 4.0K 11-13 05:50 test4
2095112 -rw-r--r-- 1 root root 2.0K 11-13 06:03 log2012.log
2095120 lrwxrwxrwx 1 root root 11 11-22 06:58 linklog.log -> log2012.log

说明:

第一列:inode索引节点编号,系统读取文件时首先通过文件名找到inode,然后才能读取到文件的内容。
第二列:文件种类和权限;
文件类型:d表示目录,-表示文件
文件权限:文件权限是rw-r--r-- ,表示文件属主可读、可写、不可执行;文件所归属的用户组不可写,可读,不可执行;其它用户不可写,可读,不可执行;
第三列: 硬链接个数;硬链接个数: log2012.log这个文件没有硬链接;因为数值是1,就是他本身
第四列: 文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root;
第五列:文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组;
第六列:文件或目录的大小;
第七列和第八列:最后访问或修改时间;
第九列:文件名或目录名

2、inode:索引节点

Linux文件、目录、软硬链接
inode 索引节点index node。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘等等)被格式化为文件系统后,有两部份,一部份是inode(很多个),另一部份是Block(很多个),Block是用来存储数据用的。inode是用来存储这些数 据的信息包括文件大小、属主、归属的用户组、读写权限,还包含指向文件实体的指针,但是inode不包括文件名,文件名严格来说不算属性。

inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令, 能通过inode值最快的找到相对应的文件,访问文件通过 文件名--->inode--->block.

多个文件占用同一个inode互为链接文件。
inode对应磁盘上的一块分区空间,每个inode是有大小的,centos 5系列默认inode大小128字节,centos 6系列默认inode大小256字节,

3、block:数据块

磁盘读取数据是按照block读取的;
一个文件可能占用多个block,但是每读取一个block,就消耗一个磁盘I/O,为提高磁盘I/O性能,可将block适当设置大一点,使一次性读取的数据尽量多一点。
一个block只能存放一个文件的内容,即使有剩余也不能再装其他文件的内容,剩余的就浪费了。
block不是越大越好,太大存放小文件(一般小文件小于1K,大文件一般大于16K)容易浪费磁盘空间,太小不利于提高磁盘I/O性能。

block一般大小为1K,2K,4K,引导分区为1K,普通分区为4K(centos 6系列)

磁盘空间取决于inode和block两项,任何一项满了,磁盘就满了。
ext3/ext4文件系统下,一个文件被创建至少占用一个inode和一个block,在同一块磁盘上不同文件的inode 是不同的,位于不同磁盘的文件的inode可能相同,如位于内存中的/proc 的inode为1,位于磁盘上的/sys 的inode也为1.

4、查看命令

查看文件系统inode总量及剩余量用 df -i
查看磁盘使用量用 df -h
查看inode和block的大小和数量用 dumpe2fs [文件]
文件删除恢复ext3grep

5、企业环境中操作文件,应当先备份再操作,做到能够还原,不能还原的,应当先在测试环境中测试再操作。

企业生产环境一般block设置为4K(centos 5和6系列),centos 7系列例外。
企业环境中inode是够用的,block 消耗的快。企业场景中小文件太多的话会导致inode不够用。

6、文件类型,find -type 查看文件类型, Linux中只有以下7中文件类型,没有其他的....

在Linux中,一切皆为文件。包括普通文件,目录,字符设备文件,块设备文件,符号链接文件,管道文件等等。
1.普通文件(-):通过file [文件]查看文件类型
2.目录(d)
3.字符设备文件(c)
4.块设备文件(b)
5.套接口文件(s)[如我们开启MySQL服务后,在/var/lib/mysql/下生成的mysql.sock文件,关闭MySQL服务后,这个文件就消失了]
6.管道(p):主要用来解决多个程序同时访问同一个文件产生的错误。
7.符号链接文件(l):文件的快捷方式

7、普通文件(-):通过file [文件]查看文件类型

纯文本文件(ASCII),内容可以直接读到,如配置文件,可用cat直接读到。
二进制文件(binary),Linux中的命令程序属于这种文件,
数据格式文件(data),如Linux用户登录的数据记录在/var/log/wtmp就属于数据格式文件,只能用last命令读取。
目录文件:通过ls -F 区分文件和目录,后面带/的为目录。 dengtest.txt java/ test tomcat/
字符设备文件:字符设备文件表示串行端口的接口设备,如modem。用"c" 表示。crw-rw-rw- 1 root tty 5, 0 Apr 6 19:35 /dev/tty
块设备文件:存储有数据供系统访问的接口设备,如硬盘光驱。用"b" 表示。brw-rw-rw- 1 root tty 5, 0 Apr 6 19:35 /dev/sda
一般用mknod来创建字符或块设备文件,用rm 删除。
套接口文件:一般用于网络连接

8、文件扩展名:

.tar,.zip表示压缩文件,
.sh表示shell文件,
.py表示python语言文件,
.pl表示perl语言文件,
.html .php .jsp .do 表示网页文件
.conf表示配置文件
.rpm表示rpm安装包文件

9、文件链接(软硬链接要画图)

Linux文件、目录、软硬链接

9.1在Linux中,链接文件分为硬链接 (hard link)和软链接(符号链接symbolic link or soft link),

9.2在不带参数时,执行ln [源文件] [链接文件] 默认创建硬链接,执行ln -s 创建软链接,软链接文件类型为l.
readlink [软连接文件] :查看软连接文件的源文件
9.3硬链接通过inode链接文件。
9.4在Linux中,多个文件名指向同一个索引节点时,这样的文件互为硬链接文件。
9.5硬链接相当于另一个文件入口,一个文件有一个以上硬链接可以防止文件误删。只删除硬链接文件和源文件其中之一,文件并未被删除,只有删除所有的硬链接文件和源文件,文件实体才会被删除,所占用的磁盘空间被系统回收。
9.6对于静态文件(进程未调用),硬链接数为0时,表示文件被删除。
9.7软链接相当于快捷方式,软链接文件实质是一个文本文件,里面存放源文件的存放路径。删除源文件,软链接依然存在,但无法访问源文件内容,显示红底白字闪烁失效状态。
9.8软链接和源文件是不同类型的文件,也是不同的文件,inode也不相同。
9.9删除硬链接文件对源文件和软链接文件没有影响,删除源文件,对硬链接文件没有影响,对软链接会显示失效。
9.10很多硬件设备的快照功能就是利用了硬链接的原理

10.目录链接

10.1对于目录不可以创建硬链接,但可以创建软链接。
10.2硬链接不能跨越文件系统。软链接可以跨文件系统。
10.3每个目录下面都有一个硬链接“.”,和对应上级目录的硬链接“..”。
10.4在父目录里创建一个子目录,父目录的链接数加1(子目录会有..指向父目录),在父目录里创建一个文件,父目录的链接数不变。

11、文件删除原理(画图)

Linux文件、目录、软硬链接
Linux是通过link的数量控制文件删除的,只有当文件不存在任何链接时,该文件才会被删除,一般每个文件有两个link计数器: i_count 和 i_nlink。
i_count: 引用计数器,文件被进程引用,i_count数增加 ,可以认为是当前文件使用者的数量;
i_nlink: 硬链接数目(可以理解为磁盘的引用计数器),创建硬链接对应的 i_nlink 就会增加

对于rm命令来说,实际就是减少磁盘的引用计数 i_nlink 。如果当文件被另外一个进程调用时,用户执行rm命令删除文件,再去cat文件内容时就会找不到文件,但是调用该删除文件的那个进程却仍然可以对文件进行正常的操作。这就是因为 i_nlink 为 0 ,但 i_count 并不为 0 。只有当 i_nlink 和 i_count 均为 0 时,文件才会被删除(这里的删除是指将文件名到 inode 的链接删除了,但文件在磁盘上的block数据块并未被删除)。

转载于:https://blog.51cto.com/12674559/2095284

你可能感兴趣的文章
LightBus新浪微博客户端开源下载
查看>>
交换机时间同步
查看>>
土豆网发布互动娱乐急播平台Channel豆
查看>>
在 Ali Kubernetes 系统中,我们这样实践混沌工程
查看>>
Linux-rsync+inotify 文件实时同步
查看>>
七Python异常和文件处理(二)
查看>>
log4j典型配置快速上手笔记
查看>>
如何提高团队代码质量——代码审查的实践
查看>>
公司对外若干台web服务器,发现有人恶意刷新页面,怎么办?
查看>>
五指cms标签说明汇总
查看>>
oracle 客户端安装
查看>>
CentOS minimal安装和开发环境部署
查看>>
JavaScript 日期格式化显示
查看>>
JSP与struts2跳转兼容问题
查看>>
我的友情链接
查看>>
Python实现斐波那契数列
查看>>
JMeter和LoadRunner的异同
查看>>
sed处理文本
查看>>
jquery 操作iframe、frameset
查看>>
解决vim中不能使用小键盘
查看>>