1. 程式人生 > >linux中的stat介紹

linux中的stat介紹

核心
1、什麼是stat命令
2、stat的格式
3、stat的基本操作
4、stat的案例

1、什麼是stat命令
stat指令:檔案/檔案系統的詳細資訊顯示。
stat命令主要用於顯示檔案或檔案系統的詳細資訊,該命令的語法格式如下:

-f  不顯示檔案本身的資訊,顯示檔案所在檔案系統的資訊
-Z 列印SElinux安全上下文資訊
-L  顯示符號連結
-c 自定義輸出格式,結尾有換行
-t  簡潔模式,只顯示摘要資訊

2、stat的格式

可選的檔案資訊輸出格式

%F 檔案型別
%g 檔案所有者的組ID
%G 檔案所有者的組名
%h 硬連結的數量(檔案本身算1個)
%i inode號
%n 檔名
%N 取消軟連線的檔名引用,變成普通字串
%o 系統格式化block的大小
%s 檔案大小(單位byte)
%t 主要裝置型別(十六進位制)
%T 次要裝置型別(十六進位制)
%u 所有者的使用者ID
%U 所有者的使用者名稱
%x 最後訪問時間
%X 最後一次訪問時間(大紀元秒)
%y 最後修改時間(內容改變)
%Y 最後修改時間(內容改變)
%z 最後改變時間(檔案屬性,許可權所有者等,格式大紀元秒)
%Z 最後改變時間(檔案屬性,許可權所有者等,格式大紀元秒)

可選的分割槽資訊輸出格式

%a 普通使用者可用的block數量
%b 分割槽的總資料塊數量
%c 檔案系統的inode總數
%d 空閒inode數量
%f 可用的block數量
%C 安全上下文
%i 分割槽ID(十六進位制)
%l 分割槽檔名最大長度
%n 檔名
%s 塊大小(都是系統block的大小)
%S 基本塊大小(都是系統block的大小)
%t 檔案系統型別(格式化的型別,十六進位制)
%T 檔案系統型別(格式化的型別,可讀形式)
具體更多的資訊和版本其他不同參考可以用man stat 尋求幫忙

注意以上的格式都需要使用-c來指定的 比如想看檔案的修改時間,可以用

stat -c "%Y" file

3、stat的基本操作
檢視檔案的基本資訊

[[email protected] ~]# ll file
-rw-r--r--. 1 root root 0 Oct 25 09:25 file
[[email protected] ~]# stat file
  File: `file'
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 802h/2050
d Inode: 150312 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-10-25 09:25:11.382009229 -0700 Modify: 2016-10-25 09:25:09.057009266 -0700 Change: 2016-10-25 09:25:09.057009266 -0700 [[email protected] ~]# stat -f file File: "file" ID: 6ac2c7ac01538b07 Namelen: 255 Type: ext2/ext3 Block size: 4096 Fundamental block size: 4096 Blocks: Total: 4584814 Free: 2148992 Available: 1916096 Inodes: Total: 1164592 Free: 1023078 [[email protected] ~]# stat -c "%y" file 2016-10-25 09:25:09.057009266 -0700

4、stat的案例
有這麼一個需求,如果一個檔案通過scp傳輸到本機來處理。
那麼問題來了,這個檔案什麼時候能傳輸完成了,我們的處理程式什麼時候可以開始處理呢?
解決這個問題的方法有很多種,比如傳輸過程是這個名字,傳輸完成以後rename一下,還有傳輸完成以後在發一個訊息過來告訴已經傳輸完成了等等。其實大家可以檢視在做scp的時候 檔案的Modify是變化的。所以檔案就簡單了,我們只需判斷檔案的Modify時間和當前系統的是比對就可以知道這個檔案是否可以開始處理了,如果Modify遠小於系統當前時間就可以處理了
下面簡單的介紹一下邏輯
第一行命令是得到檔案的Modify時間在轉換成時間格式,在和1970-01-01 00:00:00時間做差等到一個second時間
第二行是求出系統的時間和1970-01-01 00:00:00時間做差等到一個second時間
在2個直接相比較就可以。如果2個值相減等於60我就開始處理等等

[[email protected] ~]# date +%s -d "`stat -c '%y' file`"
1477412709
[[email protected] ~]# date +%s
1488723837