Linux文件屬性及類型
[root@localhost ~]# ll anaconda-ks.cfg
文件類型 權限 硬連接數 文件的大小 文件的創建,修改時間
- rw-------. 1 root root 1379 3月 12 17:43 anaconda-ks.cfg
[root@localhost ~]# ll -d zls
文件類型 權限 硬連接數 所屬用戶 所屬用戶組 文件的大小 文件的創建修改時間
d rwxr-xr-x. 2 root root 6 3月 12 18:00
文件名
zls
-:普通文件
d:目錄文件
rw- --- --- :權限
rwx r-x r-x :權限
r:讀 read
w:寫 write
x:執行權限 execute
Linux系統文件的類型
ll 查看
file # 查看文件類型
- 普通文件
d directory 目錄文件
c char 字符設備文件
b block 塊設備文件(用來存儲數據的設備)
s socket,安全套接字文件
l link 軟鏈接文件(快捷方式)
p pipe 管道文件
注意:通過顏色或者后綴判斷文件類型不一定准確.
系統鏈接文件
一個文件分為兩部分:
- 真實數據 block
- 元數據 inode
-
block:真實數據占用的空間,默認一個block 4k,使用下面命令查看
df -h -
inode:元數據占用的空間,形容文件屬性。
df -i # 查看inode使用情況 ls -i # 查看文件inode
模擬inode占滿場景
[root@oldboy dev]# dd if=/dev/zero of=/opt/disk bs=1K count=1024
1024+0 records in
1024+0 records out
1048576 bytes (1.0 MB) copied, 0.00210524 s, 498 MB/s
[root@oldboy dev]# ll /opt/disk
-rw-r--r-- 1 root root 1048576 Mar 25 22:22 /opt/disk
[root@oldboy dev]# mkfs.ext4 -i 1024 /opt/disk
mke2fs 1.42.9 (28-Dec-2013)
/opt/disk is not a block special device.
Proceed anyway? (y,n) [root@oldboy dev]# mkfs.ext4 -i 1024 /opt/disk
mke2fs 1.42.9 (28-Dec-2013)
/opt/disk 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
1024 inodes, 1024 blocks
51 blocks (4.98%) reserved for the super user
First data block=1
Maximum filesystem blocks=1048576
1 block group
8192 blocks per group, 8192 fragments per group
1024 inodes per group
Allocating group tables: done
Writing inode tables: done
Writing superblocks and filesystem accounting information: done
[root@oldboy dev]# mkdir /data1
[root@oldboy dev]# mount -t ext4 -o loop /opt/disk /data1
[root@oldboy dev]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 28G 1.5G 27G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/loop0 891K 21K 799K 3% /data1
[root@oldboy dev]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 14423552 31519 14392033 1% /
devtmpfs 121779 379 121400 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 704 123783 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
/dev/sr0 0 0 0 - /mnt
/dev/loop0 1024 11 1013 2% /data1
[root@oldboy dev]# cd /data1/
# 嘗試創建1024個文件到1014的時候就創建不了了。
[root@oldboy data1]# touch file{1..1024}
touch: cannot touch ‘file1014’: No space left on device
touch: cannot touch ‘file1015’: No space left on device
touch: cannot touch ‘file1016’: No space left on device
touch: cannot touch ‘file1017’: No space left on device
touch: cannot touch ‘file1018’: No space left on device
touch: cannot touch ‘file1019’: No space left on device
touch: cannot touch ‘file1020’: No space left on device
touch: cannot touch ‘file1021’: No space left on device
touch: cannot touch ‘file1022’: No space left on device
touch: cannot touch ‘file1023’: No space left on device
touch: cannot touch ‘file1024’: No space left on device
# 磁盤空間未滿
[root@oldboy data1]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 28G 1.5G 27G 6% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.6M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /mnt
/dev/loop0 891K 46K 774K 6% /data1
# inode已經是%100
[root@oldboy data1]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 14423552 31519 14392033 1% /
devtmpfs 121779 379 121400 1% /dev
tmpfs 124487 1 124486 1% /dev/shm
tmpfs 124487 704 123783 1% /run
tmpfs 124487 16 124471 1% /sys/fs/cgroup
/dev/sda1 256000 326 255674 1% /boot
tmpfs 124487 1 124486 1% /run/user/0
/dev/sr0 0 0 0 - /mnt
/dev/loop0 1024 1024 0 100% /data1
[root@oldboy data1]#
軟鏈接
創建方式:
ln -s 文件或目錄 鏈接名
軟鏈接相當於windows的快捷方式,軟鏈接文件會將inode指向源文件的block
1.那么當我們對一個文件創建多個軟鏈接時,其實就是多個inode指向同一個block。
[root@oldboy opt]# ln -s /opt/a.txt a1_softl
[root@oldboy opt]# ln -s /opt/a.txt a2_softl
[root@oldboy opt]# ln -s /opt/a.txt a3_softl
[root@oldboy opt]# ll a*_so*
lrwxrwxrwx 1 root root 10 Mar 25 22:32 a1_softl -> /opt/a.txt
lrwxrwxrwx 1 root root 10 Mar 25 22:32 a2_softl -> /opt/a.txt
lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt
[root@oldboy opt]# ll -i a1_softl a2_softl a3_softl a.txt
16782001 lrwxrwxrwx 1 root root 10 Mar 25 22:32 a1_softl -> /opt/a.txt
16782002 lrwxrwxrwx 1 root root 10 Mar 25 22:32 a2_softl -> /opt/a.txt
16782003 lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt
17174724 -rw-r--r-- 1 root root 13 Mar 23 16:51 a.txt
[root@oldboy opt]# cat a1_softl
aaabbbccc
[root@oldboy opt]# cat a2_softl
aaabbbccc
[root@oldboy opt]# cat a3_softl
aaabbbccc
[root@oldboy opt]#
2.那么當我們刪除軟鏈接文件時,其實只是刪除了一個inode的指向,並不會對源文件造成影響。
[root@oldboy opt]# rm a1_softl
rm: remove symbolic link ‘a1_softl’? y
[root@oldboy opt]# rm a2_softl
rm: remove symbolic link ‘a2_softl’? y
[root@oldboy opt]# cat a.txt
aaabbbccc
[root@oldboy opt]#
3.如果我們刪除的是源文件,那么該文件的所有軟鏈接文件都會失效。
[root@oldboy opt]# ll
total 264
lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt
[root@oldboy opt]# rm -rf a.txt
[root@oldboy opt]# ll a3*
lrwxrwxrwx 1 root root 10 Mar 25 22:32 a3_softl -> /opt/a.txt # 變紅
軟鏈接的應用場景
1)軟件升級
2)代碼發布
3)不方便移動的目錄
4)數據回滾
5)程序讀取
硬鏈接
1)硬連接文件和元數據文件inode號相同並指向統一block
[root@oldboy opt]# touch a.txt
[root@oldboy opt]# ln a.txt a_hardl
[root@oldboy opt]# ll -i
total 0
16782001 -rw-r--r-- 2 root root 0 Mar 25 22:47 a_hardl
16782001 -rw-r--r-- 2 root root 0 Mar 25 22:47 a.txt
2)刪除源文件對硬連接沒有影響,硬連接有備份的作用
[root@oldboy opt]# echo 123tt >a_hardl
[root@oldboy opt]# ll
total 8
-rw-r--r-- 2 root root 6 Mar 25 22:49 a_hardl
-rw-r--r-- 2 root root 6 Mar 25 22:49 a.txt
[root@oldboy opt]# cat a_hardl
123tt
[root@oldboy opt]# cat a.txt
123tt
[root@oldboy opt]# echo bbb >> a.txt
[root@oldboy opt]# cat a.txt
123tt
bbb
[root@oldboy opt]# cat a_hardl
123tt
bbb
[root@oldboy opt]# rm -fr a.txt
[root@oldboy opt]# cat a_hardl
123tt
bbb
3)目錄無法創建硬鏈接
[root@oldboy opt]# ln /opt/ /aaa
ln: ‘/opt/’: hard link not allowed for directory
硬鏈接和軟鏈接的區別
# 1. 創建命令不同
硬鏈接: ln
軟鏈接: ln -s
# 2. 目錄無法創建硬鏈接,可以創建軟鏈接,硬鏈接不能跨系統的分區,軟鏈接可以
[root@oldboy ~]# ln /opt/a_hardl /boot/
ln: failed to create hard link ‘/boot/a_hardl’ => ‘/opt/a_hardl’: Invalid cross-device link
# 3. 硬鏈接文件與源文件的inode號相同,軟鏈接不同
# 4. 軟鏈接如果刪除源文件,所有軟鏈接文件失效,硬鏈接如果刪除源文件,其他硬鏈接文件均可以使用
