軟硬連接及文件刪除原理
文件屬性
[root@oldboyedu ~]# ls -lhi
total 32K
33631870 -rw-r--r--. 1 root root? ? ? 4 Mar 13? 2019 a.txt
一第二列結(jié)尾的. 是標(biāo)識selinux的符號
1畅买、selinux是什么乘综?
安全規(guī)則钉赁,讓Linux系統(tǒng)更安全的一套規(guī)則。
這個規(guī)則太嚴(yán)格了枪芒,一般的情況下都會關(guān)閉selinux。
自己開啟防火墻啊,用其他手段來實現(xiàn)同樣的安全目的抛蚁。
2、怎么關(guān)掉Selinux惕橙?
查看方法:
getenforce
臨時關(guān)掉:
setenforce
永久關(guān)閉:
vim /etc/selinux/config
SELINUX=disabled
Linux里防火墻
C6 iptables? C7 firewalld
作用:防護(hù)計算機(jī)瞧甩,防止被入侵。
檢查:systemctl status firewalld.service
開啟firewalld(C6 service iptables start 或者/etc/init.d/iptables start)
systemctl start firewalld.service
讓firewalld開機(jī)自啟動
systemctl enable firewalld.service
C6用法:chkconfig iptables off
C7就是一個命令systemctl
二.第三列 硬連接數(shù)
[root@oldboyedu ~]# ls -lhi
total 32K
33631870 -rw-r--r--. 1 root root? ? ? 4 Mar 13? 2019 a.txt
? ? ? ? ? ? ? ? ? 硬鏈接數(shù)
1弥鹦、什么是硬鏈接肚逸?
具有相同inode節(jié)點號的文件互為硬鏈接。
一個文件的兩個入口惶凝。
2.測試
創(chuàng)建硬鏈接:
ln 源文件 硬鏈接文件
a.文件硬鏈接
[root@oldboyedu /data]# echo "I am oldboy." >oldboy.txt
[root@oldboyedu /data]# ln oldboy.txt oldboy_hard_link
[root@oldboyedu /data]# ls -lirt
total 20
33656238 -rw-r--r--. 2 root root? 13 Oct? 4 21:10 oldboy_hard_link
b.目錄硬鏈接
不支持人工創(chuàng)建目錄硬鏈接吼虎。
[root@oldboyedu /data]# ln oldboy oldgirl
ln: ‘oldboy’: hard link not allowed for directory
作用:
1、備份苍鲜,防止誤刪思灰。
軟鏈接:
本質(zhì)是快捷方式,指向源文件實體混滔,本身和源文件是不同的文件洒疚。
工作中為什么會使用軟鏈接。
第一個用途:
安裝軟件:/application/nginx-1.10
過半年:/application/nginx-1.20
導(dǎo)致一個問題坯屿,工作中油湖,開發(fā)等引用/application/nginx-1.10路徑。
安裝軟件:/application/nginx-1.10===>/application/nginx(讓開發(fā)用)
過半年:? /application/nginx-1.20===>/application/nginx(讓開發(fā)用)
第二個用途:
/etc/對應(yīng)的分區(qū)要滿了领跛,沒法放很多文件乏德,但是程序還想通過/etc/目錄訪問文件。
此時吠昭,我們可以把文件放入/opt/oldboy下喊括,然后做一個到/etc/oldboy的軟鏈接。
三.軟鏈接和硬鏈接的區(qū)別矢棚?
1.定義不同郑什。軟連接類似于快捷方式,硬鏈接與原文件有相同的inode可以指向數(shù)據(jù)block
2.創(chuàng)建方式不同蒲肋。硬鏈接:ln[原文件]蘑拯;軟連接:ln -s[原文件]
3.創(chuàng)建對象不同钝满。軟連接可以跨越文件系統(tǒng),對目錄和客戶創(chuàng)建的文件軟連接申窘,硬鏈接則不能
4.刪除軟連接文件弯蚜。對原文件和硬鏈接無影響
5.刪除文件硬鏈接。對原文件和軟鏈接文件無影響
6.刪除原文件偶洋。對硬鏈接讀取數(shù)據(jù)無影響熟吏,軟連接則失效
7.同時刪除原文件和硬鏈接。原文件會被刪除
8.硬鏈接原理類似于快照
四.Linux文件刪除原理:
1玄窝、靜態(tài)文件:沒有進(jìn)程或程序正在訪問的文件牵寺。
所有的硬鏈接數(shù)為0(i_link),即所有硬鏈接都被干掉了恩脂,包括自身帽氓。
硬鏈接的數(shù)量的代表變量符號i_link
rm -f oldboy.txt oldboy_hard_link
執(zhí)行完 其實文件也沒刪,關(guān)機(jī)停止運行俩块。
a.系統(tǒng)定時清理沒有文件名的inode黎休。
b.磁盤檢查會清理。
c.增加新文件時優(yōu)先占用沒有文件名的inode玉凯。
恢復(fù)的工具:debugfs,ext3grep等等势腮。
預(yù)防誤刪
多備份,操作前備份漫仆,異服務(wù)器和異地備份捎拯。
2、動態(tài)文件:有程序或進(jìn)程訪問的文件
刪除原理:
a.i_link為0? ? 所有硬鏈接刪除盲厌。
b.i_count為0? i_count是進(jìn)程調(diào)用文件的數(shù)量(引用計數(shù))署照。所有進(jìn)程調(diào)用都要停止取消。
3吗浩、實踐文件刪除原理
環(huán)境準(zhǔn)備建芙,命令集合如下:
mkdir -p /app/logs? ? ? ? ? ? ? ? ? ? ? ? ? #<==創(chuàng)建用于掛載的目錄。
dd if=/dev/zero of=/dev/sdc bs=8K? count=10? #<==創(chuàng)建指定大小的文件懂扼。
mkfs.ext4 /dev/sdc? ? ? ? ? ? ? ? ? ? ? ? ? #<==格式化禁荸。
mount -o loop /dev/sdc /app/logs? ? ? ? ? ? #<==掛載。
df -h? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #<==檢查掛載結(jié)果阀湿。
實踐:
[root@oldboyedu /data]# cd /app/logs/
[root@oldboyedu /app/logs]# touch nginx.log
[root@oldboyedu /app/logs]# tail -f nginx.log
[root@oldboyedu /app/logs]# cat /etc/services >>nginx.log
cat: write error: No space left on device
[root@oldboyedu /app/logs]# df -h
Filesystem? ? ? Size? Used Avail Use% Mounted on
/dev/sda3? ? ? ? 19G? 1.9G? 18G? 10% /
devtmpfs? ? ? ? 980M? 80K? 980M? 1% /dev
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /dev/shm
tmpfs? ? ? ? ? 991M? 9.5M? 981M? 1% /run
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /sys/fs/cgroup
/dev/sda1? ? ? 253M? 136M? 118M? 54% /boot
tmpfs? ? ? ? ? 199M? ? 0? 199M? 0% /run/user/0
/dev/loop0? ? ? 73K? 71K? ? 0 100% /app/logs
明明刪除了屡限,結(jié)果還是100%。
[root@oldboyedu /app/logs]# rm -f nginx.log
[root@oldboyedu /app/logs]# lsof|grep nginx
tail? ? ? 7927? ? ? ? root? ? 3r? ? ? REG? ? ? ? ? ? ? ? 7,0? ? 57344? ? ? ? 12 /app/logs/nginx.log (deleted)
[root@oldboyedu /app/logs]# df -h
Filesystem? ? ? Size? Used Avail Use% Mounted on
/dev/sda3? ? ? ? 19G? 1.9G? 18G? 10% /
devtmpfs? ? ? ? 980M? 80K? 980M? 1% /dev
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /dev/shm
tmpfs? ? ? ? ? 991M? 9.5M? 981M? 1% /run
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /sys/fs/cgroup
/dev/sda1? ? ? 253M? 136M? 118M? 54% /boot
tmpfs? ? ? ? ? 199M? ? 0? 199M? 0% /run/user/0
/dev/loop0? ? ? 73K? 71K? ? 0 100% /app/logs
重來:
模擬進(jìn)程讀文件:
[root@oldboyedu /app/logs]# touch nginx.log
[root@oldboyedu /app/logs]# tail -f nginx.log
ln nginx.log nginx_hard.log
當(dāng)前:
i_link=2
i_count=1
模擬把文件變大炕倘,讓分區(qū)滿
[root@oldboyedu /app/logs]# cat /etc/services >>nginx.log
cat: write error: No space left on device
[root@oldboyedu /app/logs]# df -h
Filesystem? ? ? Size? Used Avail Use% Mounted on
/dev/sda3? ? ? ? 19G? 1.9G? 18G? 10% /
devtmpfs? ? ? ? 980M? 80K? 980M? 1% /dev
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /dev/shm
tmpfs? ? ? ? ? 991M? 9.5M? 981M? 1% /run
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /sys/fs/cgroup
/dev/sda1? ? ? 253M? 136M? 118M? 54% /boot
tmpfs? ? ? ? ? 199M? ? 0? 199M? 0% /run/user/0
/dev/loop0? ? ? 73K? 71K? ? 0 100% /app/logs
分區(qū)滿了:清理,刪除翰撑。
刪除源文件
[root@oldboyedu /app/logs]# rm -f nginx.log
結(jié)果:
i_link=1
i_count=1
ctrl+c 中斷 進(jìn)程調(diào)用文件
結(jié)果:
i_link=1
i_count=0
刪除硬鏈接文件
[root@oldboyedu /app/logs]# rm -f nginx_hard.log
結(jié)果:
i_link=0
i_count=0
[root@oldboyedu /app/logs]# df -h
Filesystem? ? ? Size? Used Avail Use% Mounted on
/dev/sda3? ? ? ? 19G? 1.9G? 18G? 10% /
devtmpfs? ? ? ? 980M? 80K? 980M? 1% /dev
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /dev/shm
tmpfs? ? ? ? ? 991M? 9.5M? 981M? 1% /run
tmpfs? ? ? ? ? 991M? ? 0? 991M? 0% /sys/fs/cgroup
/dev/sda1? ? ? 253M? 136M? 118M? 54% /boot
tmpfs? ? ? ? ? 199M? ? 0? 199M? 0% /run/user/0
/dev/loop0? ? ? 73K? 14K? 54K? 21% /app/logs
五.通配符知識:
1罩旋、基本含義
通配符簡單說就是鍵盤上的一些特殊字符啊央,可以實現(xiàn)某些特殊的功能,
例如涨醋,可以用*代表所有瓜饥,來模糊搜索系統(tǒng)中的文件。
2浴骂、范圍:通配符試用范圍是命令行中【普通命令】或腳本編程中乓土。