文件、目錄屬性 可能有人覺得,文件這東西這麼普通有什麼好講的,,,其實不然,在linux中 一切皆文件 ,搞清楚文件的本質,將對我們大有裨益。 文件、目錄屬性簡介 舉個例子 先說一下命令的選項, i: inode(節點) h: human readable(人眼易讀的) l: 顯示長信息(詳細信息) ...
文件、目錄屬性
可能有人覺得,文件這東西這麼普通有什麼好講的,,,其實不然,在linux中一切皆文件,搞清楚文件的本質,將對我們大有裨益。
文件、目錄屬性簡介
舉個例子
randolf@localhost:~/pytest/pythondemo $ ls -lih
總用量 16K
105674 drwxrwxr-x. 4 randolf randolf 160 1月 21 17:58 appium
33870718 drwxrwxr-x. 2 randolf randolf 235 1月 21 17:58 beautifulsoup
16800015 drwxrwxr-x. 2 randolf randolf 110 1月 21 17:58 cnki
先說一下命令的選項,-i: inode(節點) -h: human-readable(人眼易讀的) -l: 顯示長信息(詳細信息)
第一列:索引節點號(系統通過inode找到文件內容,類似於我們通過身份證號查找個人信息)
第二列:類型及許可權屬性(第1個字元為文件類型,後9個字元是許可權信息),如果一個目錄,具有可執行許可權,則意味著可以進入這個目錄。 第三列:硬鏈接數
第四列:文件或者目錄所屬用戶
第五列:文件或者目錄所屬用戶
第六列:文件或者目錄的大小
第七八九列:文件或者目錄的修改時間;按照月、時、分鐘的順序
第十列:實際的文件名或者目錄名(不算文件屬性)
屬性深入解讀
1. 索引節點(index node)與block數據存儲
一塊新的硬碟 ->分區(打隔斷)->格式化系統 ->存數據
格式化文件系統(ext4、xfs)後,一般會有兩部分:inode與block.
1.inode就是用來存放屬性信息的,即
ls -l
的內容(不包括最後一列的文件名,文件名不算屬性)2.流程:inode(ls -l) -->文件屬性,是否具有對文件或者目錄的相應許可權 -->block中文件的數據內容
3.也可以通過
stat filename
查看文件詳細信息4.inode大小:centos5 中128位元組,centos7中預設256位元組
格式化以後inode大小無法改變(格式化後inode和blocK分配的數量固定,所以磁碟滿了有兩種情況:inode用完了,block不夠用)。
5.inode具有唯一性,inode相同的文件互為硬鏈接文件,其實就是同一個文件的不同入口。
1.block存儲實際數據,單個block大小一般為1k、2k,4k等幾種。其中引導分區一般1k,其他普通分區一般為4k.
2.一個block只能存放一個文件的內容,無論文件有多小。如果一個block為4k存放的文件是1k,那麼剩餘的3k就浪費了。所以說,block並不是越大越好。
3.根據實際需求設置block大小,大文件多就設置block大一些,小文件多一些,就設置block小一點。
4.block的大小在格式化分區時設置:
mkfs.ext4 -b 2048 -I 256 /dev/sdb
-b設置block大小,-I設置inode大小。5.centos5和centos6文件系統為ext3/ext4,centos7文件系統為xfs.
2.文件類型
文件類型 | 描述 |
---|---|
d(directory) | 目錄文件,目錄是一個特殊的文件 |
-(regular file) | 表示這是一個普通的文件 |
l(link) | 符號鏈接文件,實際上指向另一個文件 |
b(block) | 塊設備和其他外圍設備,特殊類型文件 |
c(character) | 字元設備文件 |
s(socket) | 表示socket文件 |
p(named pipe) | 表示管道文件 |
前四個是重點,也是常見文件類型,後面三個基本用不到。
3.許可權屬性
以rwxr-xr-x
為例,三位為一組,前三位為用戶許可權位,中間三位是屬組許可權位,後三位是其他人許可權。
r :read 讀 4;w :write 寫 2;x :excute 執行 1; - 沒有許可權 0
4.用戶與組屬性簡介
Linux中角色決定許可權,角色不同,許可權和完成的任務也不同;在linux中由UID唯一標記一個用戶,由GID唯一標記一個用戶組。
用戶簡單分類
超級用戶:即root用戶(系統管理員),擁有至高無上的許可權,其UID和GID都為0。
普通用戶:通過
useradd
創建,只能操作自己家目錄下的文件,要想做超越許可權的事情,可以利用sudo
進行提權或者直接切換到管理員身份su - root
虛擬用戶 : 安裝系統後預設存在的,這些傀儡用戶大多不能登錄系統,他們存在的意義主要在於方便系統管理,滿足相應的系統進程對屬主的要求,如下,以nologin結尾的就是所謂的虛擬用戶。
randolf@localhost:~ $ cat /etc/passwd|head -4 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
與用戶[組]相關的文件
/etc/passwd
randolf@localhost:/ $ sudo cat /etc/passwd |head -2 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
各個欄位分別代表:用戶名、密碼(x)、UID、GID、註釋、用戶的家目錄、用戶所使用的預設shell
用戶密碼被重定向到了shadow文件,所以用x來表示。
/etc/shadow
randolf@localhost:/ $ sudo cat /etc/shadow | tail -2 randolf:$6$./CktF0O$giEudjhAawSmBjkt.opCVs2Q3ERXNJWsZZnGvQ4QEkbK5nGRkKH1PrAa4HuRwCDPYTAUrdvZOPSzlW1Jm0M.W/:17912:0:99999:7::: bash:$6$nhdotNEp$cufcTHgYi.9OjPI6ky1zh1EPbAGH7hWZjodfSlzAdeV5R1AKefxIifceFr/R6lskGkw1nemBTH422o9x14wOK.:17912:0:99999:7:::
各個欄位分別表示:1.用戶名、2.密碼、3.時間戳、4.過多久可以修改密碼(為0則表示可以立即修改密碼)、5.密碼使用期限、6.距離到達最長使用時間多久提示修改密碼 、7.到達使用期限後的多少天仍然可以登錄,但是必須修改密碼
密碼是經過加密的,如果密碼位顯示!!,則表示該用戶未設置密碼,禁止登錄。
時間戳是指,從1970-01-01到最近一次修改密碼所經過的時間。
/etc/group
randolf@localhost:/ $ cat /etc/group|head -3 root:x:0: bin:x:1: daemon:x:2:
/etc/gshadow
randolf@localhost:/ $ sudo cat /etc/gshadow|head -3 [sudo] randolf 的密碼: root::: bin::: daemon:::
5.時間屬性
1.這個可說的東西不多,首先看看顯示格式
#一般的長格式顯示
randolf@localhost:/tmp $ ls -l
總用量 8
-rw-r--r--. 1 root root 43 1月 17 03:45 date.txt
-rw-r--r--. 1 root root 28 1月 22 17:40 file2.txt
#控制時間的格式,使用--time選項
randolf@localhost:/tmp $ ls -l --time-style=long-iso
總用量 8
-rw-r--r--. 1 root root 43 2019-01-17 03:45 date.txt
-rw-r--r--. 1 root root 28 2019-01-22 17:40 file2.txt
似乎好看一點,,哈哈,其實有時候篩選欄位會用到他的。
2.使用stat
命令查看文件的時間屬性
randolf@localhost:/tmp $ stat date.txt
File: 'date.txt'
Size: 43 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 16777289 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:user_tmp_t:s0
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-17 03:45:01.155796938 +0800
Change: 2019-01-17 03:45:01.155796938 +0800
Birth: -
從這裡我們可以查看到文件包括訪問時間、修改時間,改變時間在內的詳細信息。如果是小白看到這裡可能要蒙圈了,“修改時間和改變時間有區別???”,其實這裡“修改時間”指的是我們對文件做了修改,“改變時間”則是指文件的狀態發生了變化,比如文件大小,再比如文件擁有者或屬組發生變化,概括來說就是我們文件的屬性發生變化,則這個ctime就發生變化。下麵舉個慄子:
#當前目錄下有個叫做date.txt的文件,來看一下他們的初始時間屬性
[root@localhost tmp]# stat date.txt | tail -4
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-17 03:45:01.155796938 +0800
Change: 2019-01-17 03:45:01.155796938 +0800
Birth: -
#向文本中追加內容
[root@localhost tmp]# echo `date` >> date.txt
#再次查看文件時間屬性
[root@localhost tmp]# stat date.txt | tail -4
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-23 15:58:07.939618364 +0800
Change: 2019-01-23 15:58:07.939618364 +0800
Birth: -
我們向文本中追加內容後,其大小也發生變化,因此mtime與ctime同時發生變化。
再舉個例子:
[root@localhost tmp]# chown randolf:randolf date.txt
[root@localhost tmp]# stat date.txt | tail -4
Access: 2019-01-17 03:45:02.645805264 +0800
Modify: 2019-01-23 15:58:07.939618364 +0800
Change: 2019-01-23 16:16:30.692778301 +0800
Birth: -
我們改變其擁有者和數組,發現只改變了ctime,而mtime並未發生改變,可見mtime改變了ctime一定改變(文件大小屬性變化),而ctime改變時,mtime卻不一定發生改變。