作业-第03周--预习-Day13-文件核心属性知识(下)

Day13 预习笔记

1. 硬链接属性

1.1 链接的概念

~~在Linux系统中,链接可分为两种:硬链接(hard link)和软连接(soft link)或符号链接(symbolic link)。软连接文件的文件类型为l(字母L)。

  • 创建硬链接语法:ln 源文件 目标文件。
  • 创建硬链接语法:ln -s 源文件 目标文件(目标文件不能事先存在)。

1.2 硬链接知识与实践

~~硬链接是指通过索引节点进行的链接,在Linux系统中,多个文件名指向同一个索引节点是正常且允许的。这种情况下的两个文件就叫做互为硬链接文件,本质就是相同文件的两个名字。硬链接文件就相当于原始文件的另外一个访问入口。

[root@oldboyedu  ~]# echo "I am oldboy" >oldboyfile
[root@oldboyedu  ~]# ln oldboyfile oldboyfile_hard_link
[root@oldboyedu  ~]# cat oldboyfile
I am oldboy
[root@oldboyedu  ~]# cat oldboyfile_hard_link 
I am oldboy
[root@oldboyedu  ~]# ls -li oldboyfile oldboyfile_hard_link 
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile_hard_link
[root@oldboyedu  ~]# rm -f oldboyfile
[root@oldboyedu  ~]# ls -li oldboyfile oldboyfile_hard_link 
ls: cannot access oldboyfile: No such file or directory
33637537 -rw-r--r-- 1 root root 12 Mar 16 14:44 oldboyfile_hard_link
[root@oldboyedu  ~]# cat oldboyfile_hard_link 
I am oldboy
[root@oldboyedu  ~]# ln oldboyfile_hard_link oldboyfile
[root@oldboyedu  ~]# ls -li oldboyfile oldboyfile_hard_link 
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile_hard_link
[root@oldboyedu  ~]# cat oldboyfile
I am oldboy
[root@oldboyedu  ~]# 

硬链接知识小结

  • 具有相同Inode节点号的多个文件互为硬链接文件,本质是相同文件不同文件名。
  • 删除硬链接文件或者删除源文件任意之一,文件实体并未删除。
  • 只有删除了源文件及所有对应的硬链接文件,文件实体才会被删除。
  • 待所有的硬链接文件及源文件被删除后,在存放新的数据会占用这个文件的空间,或者磁盘fsck检查的时候,删除的数据也会被系统回收(养成删除及使用多套环境测试的好习惯)。
  • 硬链接就是文件的另一个入口。
  • 可以通过给文件设置硬链接文件,来防止重要文件被误删。
  • 通过执行命令“ln 源文件 硬链接文件”,即可完成创建硬链接。
  • 硬链接是普通文件,可以用rm命令删除。
  • 对应静态文件(没有进程正在调用的文件)来讲,当对应硬链接数为0(i_link)时,文件就被删除。
  • 创建硬链接只能针对文件,不能针对目录。

1.3 软链接知识与实践

~~软连接(Soft Link)也称符号链接(symbolic link),相当于Windows系统中的快捷方式。

1.3.1 文件的软连接示例:

文件的软连接示例如下:

[root@oldboyedu  ~]# ls -li oldboyfile oldboyfile_hard_link 
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile_hard_link
[root@oldboyedu  ~]# ln -s oldboyfile oldboyfile_soft_link
[root@oldboyedu  ~]# ls -li oldboyfile*
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile
33637537 -rw-r--r-- 2 root root 12 Mar 16 14:44 oldboyfile_hard_link
33637538 lrwxrwxrwx 1 root root 10 Mar 16 15:06 oldboyfile_soft_link -> oldboyfile
[root@oldboyedu  ~]# cat oldboyfile_soft_link 
I am oldboy
[root@oldboyedu  ~]# readlink oldboyfile_soft_link 
oldboyfile
[root@oldboyedu  ~]# rm -f oldboyfile
[root@oldboyedu  ~]# cat oldboyfile_soft_link 
cat: oldboyfile_soft_link: No such file or directory
[root@oldboyedu  ~]# ls -li oldboyfile*
33637537 -rw-r--r-- 1 root root 12 Mar 16 14:44 oldboyfile_hard_link
33637538 lrwxrwxrwx 1 root root 10 Mar 16 15:06 oldboyfile_soft_link -> oldboyfile
[root@oldboyedu  ~]# 

1.3.2 目录的软连接示例:

目录的软连接示例如下:

[root@oldboyedu  ~]# mkdir oldboydir
[root@oldboyedu  ~]# ln oldboydir oldboydir_hard_link
ln: ‘oldboydir’: hard link not allowed for directory
[root@oldboyedu  ~]# ln -s oldboydir oldboy_soft_link
[root@oldboyedu  ~]# ls -lirt
total 88
33574978 -rw-------. 1 root root  1647 Mar  4 11:24 anaconda-ks.cfg
34152165 -rw-r--r--  1 root root 74376 Mar 15 10:42 cmatrix-1.2a.tar.gz
34152166 drwxrwxrwx  2  500  500  4096 Mar 15 10:49 cmatrix-1.2a
   33129 drwxr-xr-x  2 root root     6 Mar 16 12:31 data
33637537 -rw-r--r--  1 root root    12 Mar 16 14:44 oldboyfile_hard_link
33637538 lrwxrwxrwx  1 root root    10 Mar 16 15:06 oldboyfile_soft_link -> oldboyfile
17242942 drwxr-xr-x  2 root root     6 Mar 16 15:11 oldboydir
33637539 lrwxrwxrwx  1 root root     9 Mar 16 15:13 oldboy_soft_link -> oldboydir
[root@oldboyedu  ~]# 

软链接知识小结

  • 软连接类似Windows的快捷方式(可以通过readlink查其指向)。
  • 软连接类似一个文本文件,里面存放的是源文件的路径,指向源文件实体。
  • 删除源文件,软连接文件依然存在,但是无法访问指向源文件路径内容了。
  • 执行命令“ln -s 源文件 软连接文件”,即可完成创建软链接。
  • 软连接和源文件是不同类型的文件,也是不同的文件,Inode号也不相同。
  • 软连接文件的文件类型为字母l,可以用rm命令删除。
  • 软连接文件不仅可以针对文件,也可以针对目录(企业中常用)。

企业面试:请描述Linux中软连接和硬链接的区别

1)答分类:在Linux系统中,连接分两种:一种被称为硬链接(Hard Link),另一种被称为软连接(soft link)或符号链接(symbolic link)。
2)答概念:硬链接文件与源文件的Inode节点号相同,而软连接文件相当于Windows下面的快捷方式(Inode节点号与源文件不同)。
3)答创建:默认不带参数的情况下,ln命令创建的是硬链接,带-s参数的ln命令创建的是软连接。
4)答特点:
a. 不能对目录创建硬链接,但可以创建软连接,对目录的软连接会经常被用到。
b. 软连接可以跨文件系统,硬链接不可以跨文件系统。
c. 删除软链接,对源文件及硬链接文件无任何影响。
d. 删除文件的硬链接,对源文件及软链接文件无任何影响。
e. 删除链接文件的源文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状)。
f. 同时删除源件及其硬链接文件,整个文件才会被真正的删除。
5)答案例:硬链接用处不多,可以用来对重要文件做快照防止误删,而对目录建立软链接在工作中很常用。

2. linux系统文件删除原理

2.1 从ext文件系统角度描述文件删除原理

~~linux系统下文件名是存在父目录的block里面,并指向这个文件的inode节点,这个文件的inode节点再指向存放这个文件的block数据块。 我们删除一个文件,实际上并不是清除了inode节点和block数据块。只是在这个文件的父目录里面的block中,删除了这个文件的名字,从而使这个文件名消失,并且无法指向这个文件的inode节点。 当没有文件名指向这个inode节点的时候,会同时释放inode节点和存放这个文件的block数据块,并更新inode MAP和block MAP今后让这些位置可以用于放置其他文件数据。

2.2 从文化引用角度深入描述文件删除的原理

~~当创建文件的硬链接的时候,对应的i_link数会增加。当一个文件被某一个进程引用时,对应i_count数就会增加。 对于删除命令rm而言,实际就是减少i_link。那么如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,这会出现什么情况?
用户执行rm操作文件后,再执行ls或其他文件管理命令,无法再找到这个文件了,但是调用这个被删除的文件的进程却在继续执行,依然能从文件中正确的读取及写入内容,这又是为什么呢? 这是因为rm操作只是将i_link减少了,如果没有其他的链接i_link就为0了,但由于该文件依然被进程引用,因此文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_link及i_count都为0的时候,这个文件才会真正被删除。也就是说还需接解除该进程对这个文件的调用才行。 那么当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删除的文件呢? rm操作只是将文件的i_link减少了,实际就是将文件名到inode的链接删除了。即使i_link减少到0了,此时并没有删除文件的实体(block数据块)。此时,如果即使停止机器工作,数据是可以找回的,如果此时继续写入数据,那么新数据就可能会被分配到被删除的block数据块,此时,文件就会被真正的回收了。

2.3 有关文件删除企业故障案例

下面模拟文件被删除了(硬链接数为0),但是还有进程调用的情况。
操作步骤和命令集如下:
1)安装httpd web服务。

[root@oldboyedu  ~]# yum install httpd -y
...
[root@oldboyedu  ~]# systemctl start httpd.service 
[root@oldboyedu  ~]# systemctl stop firewalld
[root@oldboyedu  ~]# cd /etc/httpd/conf

编辑配置文件,让日志记录到/app/logs/下面。

[root@oldboyedu  /etc/httpd/conf]# sed -i 's@#CustomLog logs/access_log common@CustomLog /app/logs/access_logcommon@g' httpd.conf
[root@oldboyedu  /etc/httpd/conf]#

2)创建一个小的文件系统,用于存放上述access_log日志。

[root@oldboyedu  ~]# dd if=/dev/zero of=/dev/sdc bs=8K count=10 
10+0 records in
10+0 records out
81920 bytes (82 kB) copied, 0.00013485 s, 607 MB/s
[root@oldboyedu  ~]# ls -l /dev/sdc
-rw-r--r-- 1 root root 81920 Mar 16 16:24 /dev/sdc
[root@oldboyedu  ~]# mkfs -t ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is not a block special device.
Proceed anyway? (y,n) y

Filesystem too small for a journal
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
16 inodes, 80 blocks
4 blocks (5.00%) reserved for the super user
First data block=1
1 block group
8192 blocks per group, 8192 fragments per group
16 inodes per group

Allocating group tables: done                            
Writing inode tables: done                            
Writing superblocks and filesystem accounting information: done
[root@oldboyedu  ~]# tune2fs -c -1 /dev/sdc 
tune2fs 1.42.9 (28-Dec-2013)
Setting maximal mount count to -1
[root@oldboyedu  ~]# mkdir -p /app/logs
[root@oldboyedu  ~]# mount -o loop /dev/sdc /app/logs
[root@oldboyedu  ~]# echo "oldboy" > /var/www/html/index.html

3)重启httpd服务,确保日志记录到了上述文件系统挂载的/app/logs下面。

[root@oldboyedu  ~]# systemctl restart httpd.service 

4)写个循环脚本访问httpd,使得httpd日志充满/app/logs整个空间。

for n in 'seq 10000';do curl -s 127.0.0.1 >/dev/null;done
[root@oldboyedu  ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   18G  10% /
devtmpfs        476M   52K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   73K   0  100% /app/logs

以下是一个错误的删除方案。

[root@oldboyedu  ~]# rm -f /app/logs/access_log
[root@oldboyedu  ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   18G  10% /
devtmpfs        476M   52K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   73K   0  100% /app/logs

查看被删除的但仍由httpd进程占用的日志系统文件名。

[root@oldboyedu  ~]# lsof | grep del
httpd       6184         root  7w      REG                7,0    55260  12 /app/logs/access_log (deleted)
httpd       38178        root  7w      REG                7,0    55260  12 /app/logs/access_log (deleted)
httpd       38483        root  7w      REG                7,0    55260  12 /app/logs/access_log (deleted)

以下是解决问题的方法。
第一步,执行快捷键Ctrl+c 停掉模拟访问测试脚本。

for n in 'seq 10000';do curl -s 127.0.0.1 >/dev/null;done

第二步,重启Http服务,目的是取消httpd对删除的access.log文件的调用

 [root@oldboyedu  ~]# systemctl restart httpd.service 

然后查看处理的结果

[root@oldboyedu  ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  1.8G   18G  10% /
devtmpfs        476M   52K  476M   1% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.7M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       253M  136M  117M  54% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/loop0       73K   14K   54K  21% /app/logs

下面介绍一下较好的处理方案
此时,我们选择清空日志而不删除日志,因为企业中的Web日志都是定期轮询的,并且它会自动备份且清理过期的日志

[root@oldboyedu  ~]# > /app/logs/access_log
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343