Linux一切皆文件:php
Llinux系統的文件或目錄的屬性主要包括:索引節點、文件類型、文件權限、連接數、所屬的用戶和用戶組、最近修改時間等。html
Llinux文件屬性及權限圖形說明:node
Linux文件屬性及權限補充說明:python
第一列:inode索引結點linux
inode (index node)概述shell
一個硬盤須要存放數據,首先分區,再格式化(格式化會建立文件系統類型),最後就能夠存儲數據。windows
Linux的文件系統類型通常有ext2/ext3/ext4等類型。在每一個linux存儲設備或存儲分區被格式化建立成socket
ext4(CentOS 6.7)文件系統後,建立文件系統通常生成兩部分:第一部分inode,第二部分是block。jsp
inode用來存儲文件屬性及信息索引(指向文件實體,但文件名稱不包含在inode),block用來存放實ide
際的數據使用(例如文字、照片、視頻等普通文件數據)。inode是一塊存儲空間,CentOS 6非啓動分
區inode默認大小爲256字節,CentOS 5 默認大小爲128字節。正常狀況下,一個文件只能佔用一個
inode,若是兩個文件的inode相同則說明是這兩個文件是互爲硬連接,也能夠是多個文件。inode節點
的總數通常在格式化時就給定。
查看系統分區及文件類型
[root@oldboy test]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 8.8G 1.4G 7.0G 17% /
tmpfs tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 ext4 190M 36M 145M 20% /boot
查看指定文件inode
[root@oldboy test]# stat file.txt
File: `file.txt'
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 139792 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-13 16:58:45.989909373 +0800
Modify: 2018-11-13 16:58:45.989909373 +0800
Change: 2018-11-13 16:58:45.989909373 +0800
[root@oldboy test]# ls -lih file.txt
139792 -rw-r--r-- 1 root root 0 Nov 13 16:58 file.txt
查看系統分區inode使用狀況
[root@oldboy test]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/sda3 593344 55764 537580 10% /
tmpfs 125596 1 125595 1% /dev/shm
/dev/sda1 51200 38 51162 1% /boot
[root@oldboy test]# dumpe2fs /dev/sda3 | grep -i "inode count"
dumpe2fs 1.41.12 (17-May-2010)
Inode count: 593344
不一樣CentOS版本inode大小不一樣(boot分區默認是128字節)
[root@localhost test]# cat /etc/redhat-release
CentOS release 5.5 (Final)
[root@localhost test]# dumpe2fs /dev/sda1 | grep -i "inode size"
dumpe2fs 1.39 (29-May-2006)
Inode size: 128
[root@localhost test]# dumpe2fs /dev/sda3 | grep -i "inode size"
dumpe2fs 1.39 (29-May-2006)
Inode size: 128
[root@oldboy test]# cat /etc/redhat-release
CentOS release 6.7 (Final)
[root@oldboy test]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.4G 7.0G 17% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 36M 145M 20% /boot
[root@oldboy test]# dumpe2fs /dev/sda1 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 128
[root@oldboy test]# dumpe2fs /dev/sda3 | grep -i "inode size"
dumpe2fs 1.41.12 (17-May-2010)
Inode size: 256
block概述
linux存儲設備或存儲分區被格式化建立成ext4(CentOS 6.7)文件系統後,建立文件系統
通常生成兩部分:第一部分inode,第二部分是block。inode前面已講述,。瞭解block先了
解sector(扇區)。硬盤的最小存儲單位:sector(扇區),每一個扇區儲存512字節,操做系統
會一次性連續讀取多個扇區,即一次性讀取多個扇區稱爲一個block(塊),文件存取的最小
單位:block(塊),由多個扇區組成;block的大小常見的有1KB、2KB、4KB,在linux中常見
設置爲4KB,即連續8個扇區組成一個block,/boot分區的block通常爲1KB。系統建立一個文件
或者文件佔大小一次固定分配4K(8個扇區,每一個扇區512B)
查看每一個分區的sector大小
[root@oldboy test]# df -l
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 9213440 1440588 7298180 17% /
tmpfs 502384 0 502384 0% /dev/shm
/dev/sda1 194241 35992 148009 20% /boot
查看分區指定的block大小
[root@oldboy test]# dumpe2fs /dev/sda3 | grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 4096
[root@oldboy test]# dumpe2fs /dev/sda1 | grep -i "block size"
dumpe2fs 1.41.12 (17-May-2010)
Block size: 1024
查看指定分區的扇區、磁道、柱面、磁頭等信息,磁盤的容量=磁頭*磁道*扇區(512B)*柱面
[root@oldboy test]# fdisk -l /dev/sda3
Disk /dev/sda3: 9721 MB, 9721348096 bytes
255 heads, 63 sectors/track, 1181 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
第二列:文件類型及權限
文件類型及權限共有10個字符組成(第一個字符表明文件類型、後面9個字符表明文件權限),
假如把SElinux開啓,文件類型及權限共有11個字符(第一個字符表明文件類型、第2個到第10個字符
表明文件權限,第11個字符與selinux有關係,通常用不到)
第一個字符:
Linux的文件類型
在linux系統中,能夠說一切設備(包括目錄、普通文件等)皆文件。文件類型包含有普通文件、目錄、字符設備文件、塊設備文件、符號連接文件、管道文件等等
一、 d(directory)表示目錄
[root@oldboy test]# ls -l /test/ | grep "^d"
drwxr-xr-x 2 root root 4096 Nov 14 19:24 dir1
drwxr-xr-x 2 root root 4096 Nov 14 19:24 dir2
drwxr-xr-x 2 root root 4096 Nov 14 19:24 dir3
[root@oldboy test]# ls -ld /test/*
drwxr-xr-x 2 root root 4096 Nov 14 19:24 /test/dir1
drwxr-xr-x 2 root root 4096 Nov 14 19:24 /test/dir2
drwxr-xr-x 2 root root 4096 Nov 14 19:24 /test/dir3
二、 -(regular file) 普通文件
(1)、純文本文件(ascll)文件內容能夠直接讀到的數據,例如:字母、數字、特殊字條串等,能夠用cat命令讀取的文,好比配置文件幾乎都是這種類型。
[root@oldboy test]# file file.txt
file.txt: ASCII text
(2)、二進制文件(binary)linux中的命令程序就屬於這個格式。例如cat 命令就是一個二進制文件。
[root@oldboy test]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, stripped
(3)、數據格式文件(data)有些程序運行過程當中會讀取某些特定格式的文件,那些特定格式的文件能夠被稱爲數據文件。例如:linux 在用戶登陸時都會將登陸數據記錄在/var/log/wtmp 那個文件內,該文件是一個數據文件,經過last命令讀出來。/var/log/lastlog也是一個數據文件,可使用lastlog命令讀出來。cat命令讀取會是亂碼,由於他屬於一種特殊格式的文件。file 命令也能夠查看文件類型
[root@oldboy test]# file /var/log/wtmp
/var/log/wtmp: data
三、l (link)連接文件(通常指得是軟連接文件或符號連接)
[root@oldboy test]# ls -l /mnt/file_hard_link.txt
lrwxrwxrwx 1 root root 14 Nov 14 19:38 /mnt/file_hard_link.txt -> /test/file.txt
[root@oldboy test]# readlink /mnt/file_hard_link.txt
/test/file.txt
四、 b(block)塊設備和其它外圍設備,是特殊類型的文件
[root@oldboy ~]# find /dev/ -type b | xargs ls -l | head -3
brw-rw---- 1 root disk 7, 0 Nov 12 23:12 /dev/loop0
brw-rw---- 1 root disk 7, 1 Nov 12 23:12 /dev/loop1
brw-rw---- 1 root disk 7, 2 Nov 12 23:12 /dev/loop2
五、 c(character)字符設備文件(通常是指串設備或終端設備等)
[root@oldboy ~]# find /dev/ -type c | xargs ls -l | head -3
crw-rw---- 1 root video 10, 175 Nov 12 23:12 /dev/agpgart
crw-rw---- 1 root root 251, 0 Nov 12 23:12 /dev/bsg/0:0:0:0
crw-rw---- 1 root root 251, 1 Nov 12 23:12 /dev/bsg/2:0:0:0
六、 s(socket)套接字文件
[root@oldboy ~]# find /dev/ -type s | xargs ls -l | head -3
srw-rw-rw- 1 root root 0 Nov 12 23:12 /dev/log
七、 p(named pipe)管道文件
[root@oldboy ~]# find /var/spool/postfix/public/ -type p | xargs ls -l
prw--w--w- 1 postfix postfix 0 Nov 14 19:52 /var/spool/postfix/public/pickup
prw--w--w- 1 postfix postfix 0 Nov 14 19:48 /var/spool/postfix/public/qmgr
Linux下擴展名的做用
在linux中,雖然擴展名沒什麼實際意義,但爲了兼容windows,同時方便咱們多數習慣了windows用戶區分文件的不一樣,因此仍是習慣經過擴展名來表示不一樣的文件類型,例如:
一、.tar\.tar.gz\.tgz\.zip\.tar.bz表示壓縮文件,建立命令通常爲tar\gzip\unzip等
二、.sh表示shell腳本文件,經過shell語言開發的程序
三、.pl表示perl語言文件,經過perl語言開發的程序
四、.py表示python語言文件,經過python語言開發的程序
五、.html\.htm\.php\.jsp\.do表示網頁語言文件
六、.conf表示系統配置文件
七、.rpm表示rpm安裝包文件
後面9個字符:
第三列:硬連接個數
文件連接分爲兩種,硬連接和軟連接(符號連接)。
硬連接文件與軟連接訪問圖形說明:
軟連接(符號連接)能夠看做是windows的快捷方式,可讓你快速找到目標文件,只是一個普通的文件,
但軟連接文件跟實際的原文件inode是不相同,軟連接能夠針對文件和目錄進行建立。
硬連接是經過原文件的索引節點進行連接的文件,也能夠理解爲經過原文件inode複製出來的一個文件。
硬連接和原文件的inode索引節點是相同的,硬連接只能夠針對文件進行建立,目錄建立不了(系統限制)。
每一個建立的目錄會自動建立兩個硬連接.和..可經過ls –a查看
連接建立命令
ln 原文件 目標文件 ##建立硬連接命令
ln -s 原文件 目標文件 ##建立軟連接命令
硬連接建立
[root@oldboy test]# touch file
[root@oldboy test]# echo "testfile" > file
[root@oldboy test]# cat file
testfile
[root@oldboy test]# ln file file_hard_link
[root@oldboy test]# ls -lih
total 0
140988 -rw-r--r-- 2 root root 0 Nov 15 01:51 file
140988 -rw-r--r-- 2 root root 0 Nov 15 01:51 file_hard_link
[root@oldboy test]# cat file_hard_link
testfile
[root@oldboy test]# mkdir dir
[root@oldboy test]# ls -ld dir/
drwxr-xr-x 2 root root 4096 Nov 15 01:52 dir/
[root@oldboy test]# ls -lid dir/ dir/.
140989 drwxr-xr-x 2 root root 4096 Nov 15 01:52 dir/
140989 drwxr-xr-x 2 root root 4096 Nov 15 01:52 dir/.
軟連接建立
[root@oldboy test]# touch file
[root@oldboy test]# echo "testfile" > file
[root@oldboy test]# cat file
testfile
[root@oldboy test]# ln -s file file_soft_link
[root@oldboy test]# ls -li
total 4
140988 -rw-r--r-- 1 root root 9 Nov 15 01:57 file
140989 lrwxrwxrwx 1 root root 4 Nov 15 01:57 file_soft_link -> file
[root@oldboy test]# cat file_soft_link
testfile
第四列:文件或目錄所屬用戶(用戶)
第五列:文件或目錄所屬用戶組(用戶組)
Linux/Unix是一個多用戶、多任務的操做系統同,在linux系統系統用戶是分角色的,linux系統中,
因爲角色不一樣,權限和所完成的任務也不一樣,用戶的角色是經過UID和GID識別的,特別是UID,在linux
系統中,一個UID是惟一標識系統用戶的帳號(至關於咱們的身份證)。用戶的系統帳號的名稱(如oldboy)
其實給人(管理員)看的,linu系統可以識別的僅僅是UID和GID這樣的數字。用戶UID就至關於咱們的身份
證同樣,用戶名就至關於咱們的名字。
UID(User Identify) 中文用戶ID,至關於各位的身份證,在系統中是惟一的
GIP(Group Identify) 中文組ID,至關於各位的家庭或者大家的學校ID
Linux系統分爲三類用戶:
一、 超級用戶root
root(超級管理員),UID爲0,擁有最高的權限,相似windows系統的administrator本地管理員。root可使用sudo管理提權給普通用戶使用,至關於分配特殊權限給普通用戶使用。
二、 虛擬用戶
虛擬用戶,UID爲1~499,虛擬用戶通常與系統和程序服務相關,通常是默認不能登陸系統使用。
三、 普通用戶
通常是由具有系統管理員root權限用戶所建立,UID爲500~65534,這類用戶的權限會受到必定的基本權限限制,通常來自具有管理員用戶的限制。
查看用戶UID和GID命令
[root@oldboy ~]# id oldboy
uid=500(oldboy) gid=500(oldboy) groups=500(oldboy)
當建立一個用戶,如下配置文件會被修改
用戶配置文件 /etc/passwd
用戶密碼配置文件 /etc/shadow
用戶組配置文件 /etc/group
用戶組密碼配置文件 /etc/gshadow
一、用戶配置文件/etc/passwd 是系統識別用戶的一個文件,系統全部用戶都記錄在這裏/etc/passwd文件裏
二、用戶密碼配置文件/etc/shadow是系統用戶密碼配置文件,與用戶配置文件/etc/passwd中x字段的佔位符相對應,記錄着用戶密碼等相關記錄。
三、用戶組配置文件/etc/group記錄用戶組相關信息。
四、用戶組密碼配置文件/etc/gshadow與用戶配置文件/etc/group中x佔位符相對應,記錄用戶組密碼相關信息。
第7、8、九列:文件或目錄的修改時間,默認月日時分
文件時間戳分三種:
modify 修改時間 find命令對應選項 -mtime 通常修改文件內容
change 改變時間 find命令對應選項 -ctime 文件的屬性改變
access 訪問時間 find命令對應選項 -actime 訪問文件內容
格式化時間:
[root@oldboy ~]# ls -l
total 44
-rw-------. 1 root root 1139 Sep 7 17:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 22179 Sep 7 17:18 install.log
-rw-r--r--. 1 root root 5890 Sep 7 17:16 install.log.syslog
drwxr-xr-x 2 root root 4096 Nov 14 18:18 test
[root@oldboy ~]# ls -l --time-style=long-iso
total 44
-rw-------. 1 root root 1139 2018-09-07 17:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 22179 2018-09-07 17:18 install.log
-rw-r--r--. 1 root root 5890 2018-09-07 17:16 install.log.syslog
drwxr-xr-x 2 root root 4096 2018-11-14 18:18 test
修改時間戳命令:
[root@oldboy ~]# stat install.log
File: `install.log'
Size: 22179 Blocks: 56 IO Block: 4096 regular file
Device: 803h/2051d Inode: 13 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-09-07 17:12:50.634999903 +0800
Modify: 2018-09-07 17:18:05.290999679 +0800
Change: 2018-09-07 17:18:18.479999676 +0800
[root@oldboy test]# touch file.txt
[root@oldboy test]# echo "testfile" > file.txt
[root@oldboy test]# stat file.txt
File: `file.txt'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140987 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-17 13:33:09.362803892 +0800
Modify: 2018-11-17 13:33:57.626808703 +0800
Change: 2018-11-17 13:33:57.626808703 +0800
[root@oldboy test]# cat file.txt
testfile
[root@oldboy test]# stat file.txt
File: `file.txt'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140987 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2018-11-17 13:34:13.969814896 +0800
Modify: 2018-11-17 13:33:57.626808703 +0800
Change: 2018-11-17 13:33:57.626808703 +0800
[root@oldboy test]# chown oldboy.oldboy file.txt
[root@oldboy test]# stat file.txt
File: `file.txt'
Size: 9 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 140987 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 500/ oldboy) Gid: ( 500/ oldboy)
Access: 2018-11-17 13:34:13.969814896 +0800
Modify: 2018-11-17 13:33:57.626808703 +0800
Change: 2018-11-17 13:34:38.519806714 +0800
第十列:文件名
注意:文件名不包含在文件inode裏,而是在上級目錄的block裏
查看文件和目錄
[root@oldboy ~]# ls -lF
total 56
-rw-------. 1 root root 1139 Sep 7 17:18 anaconda-ks.cfg
-rw-r--r--. 1 root root 22179 Sep 7 17:18 install.log
-rw-r--r--. 1 root root 5890 Sep 7 17:16 install.log.syslog
-rw-r--r-- 1 root root 10240 Nov 17 18:10 pack.tar
drwxr-xr-x 2 root root 4096 Nov 17 17:47 test/
感謝老男孩博客提供參考 https://blog.51cto.com/oldboy