最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux下獲取文件的創(chuàng)建時間與實戰(zhàn)教程

 更新時間:2019年12月13日 09:39:43   作者:蜻蜓隊長  
這篇文章主要給大家介紹了關(guān)于linux下獲取文件的創(chuàng)建時間與實戰(zhàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用linux系統(tǒng)具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

背景

有時候我們需要獲取文件的創(chuàng)建時間。

例如:

我在研究 《xtrabackup 原理圖》的時候,想通過觀察確認(rèn) xtrabackup_log 是最早創(chuàng)建 并且是 最晚保存的文件。我們就需要知道 xtrabackup_logfile 這個文件的創(chuàng)建時間戳和修改時間戳。

復(fù)習(xí): Linux關(guān)于文件的三個時間戳

Linux 的文件系統(tǒng)保存有三個時間戳,利用 stat 指令查看文件信息可以獲取。他們分別是 ATime、MTime 和 CTime

[root@192-168-199-198 backups]# stat 2.txt 
 File: ‘2.txt'
 Size: 16   Blocks: 8   IO Block: 4096 regular file
Device: 821h/2081d Inode: 15   Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-23 12:12:14.276981038 +0800
Modify: 2019-07-23 12:12:41.415980158 +0800
Change: 2019-07-23 12:12:41.415980158 +0800
 Birth: -

ATime ——文件的最近訪問時間

只要讀取文件,ATime 就會更新,對應(yīng)的是 stat 命令獲取的 Access 的值。

[root@192-168-199-198 backups]# cat 2.txt #<-- 讀取文件
121231233123123
[root@192-168-199-198 backups]# stat 2.txt 
 File: ‘2.txt'
 Size: 16   Blocks: 8   IO Block: 4096 regular file
Device: 821h/2081d Inode: 15   Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-23 12:22:09.644961733 +0800 #<-- 時間變化了
Modify: 2019-07-23 12:12:41.415980158 +0800
Change: 2019-07-23 12:12:41.415980158 +0800
 Birth: -

MTime ——文件的內(nèi)容最近修改的時間

當(dāng)文件進(jìn)行被寫的時候,CTime 就會更新,對應(yīng)的是 stat 命令獲取的 Modify 的值。

[root@192-168-199-198 backups]# echo hello_world > 2.txt #<-- 修改文件內(nèi)容
[root@192-168-199-198 backups]# stat 2.txt 
 File: ‘2.txt'
 Size: 12   Blocks: 8   IO Block: 4096 regular file
Device: 821h/2081d Inode: 15   Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-23 12:22:09.644961733 +0800
Modify: 2019-07-23 12:26:23.466953503 +0800 #<-- 時間變化了
Change: 2019-07-23 12:26:23.466953503 +0800
 Birth: -

這里不要用vi修改文件內(nèi)容,因為用vi修改文件內(nèi)容有可能會引起Inode變更,也就是你觀察的文件并不是之前的文件了!這個和vi的原理有關(guān)。

CTime ——文件屬性最近修改的時間

當(dāng)文件的目錄被修改,或者文件的所有者,權(quán)限等被修改時,CTime 也就會更新,對應(yīng)的是 stat 命令獲取的 Change 的值。

[root@192-168-199-198 backups]# chmod 777 2.txt #<-- 修改文件屬性
[root@192-168-199-198 backups]# stat 2.txt 
 File: ‘2.txt'
 Size: 12   Blocks: 8   IO Block: 4096 regular file
Device: 821h/2081d Inode: 15   Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-23 12:22:09.644961733 +0800
Modify: 2019-07-23 12:26:23.466953503 +0800
Change: 2019-07-23 12:30:35.830945320 +0800 #<-- 時間變化了
 Birth: -

Linux 無法獲取文件創(chuàng)建時間?

現(xiàn)在我們知道了Linux有三種時間,ATime、MTime 和 CTime,那么很好奇為什么沒有 CRTime (創(chuàng)建時間) 呢?

對比 Windows 系統(tǒng) (上圖),Windows 的 NTFS 文件系統(tǒng)里存在三個時間戳,其中就包含了“創(chuàng)建時間”,但在 Linux 的設(shè)計哲學(xué)上沒有文件“創(chuàng)建時間”這么一說,所以早期版本的ext文件系統(tǒng)不支持文件“創(chuàng)建時間”。但從 ext4 版本開始,文件創(chuàng)建時間存儲在ext4文件系統(tǒng)的inode中,所以 ext4 文件系統(tǒng)使用特殊方法也是可以獲取文件的創(chuàng)建時間的。

也說明了,是否能獲取文件的創(chuàng)建時間,和文件系統(tǒng)是否支持有關(guān)。

Linux 上獲取文件創(chuàng)建時間的步驟

CentOS7 Linux系統(tǒng)自帶一個工具,叫做 debugfs,他可以查出 ext4 文件系統(tǒng)上的文件的創(chuàng)建時間。man debugfs 發(fā)現(xiàn)工具的描述是 “ext2/ext3/ext4 file system debugger”,所以他是不支持 xfs 文件系統(tǒng)的。

常用的 xfs 文件系統(tǒng)是否支持獲取文件創(chuàng)建時間,還有如何獲取,這個暫時不清楚,需讀者查閱官方文檔

1. 獲取文件的 inode 號

方法一:

[root@192-168-199-198 backups]# stat /backups/2.txt
 File: ‘/backups/2.txt'
 Size: 30   Blocks: 8   IO Block: 4096 regular file
Device: 821h/2081d Inode: 14 #<--- 這個  Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-23 12:49:11.462909146 +0800
Modify: 2019-07-23 12:49:11.462909146 +0800
Change: 2019-07-23 13:08:20.138871900 +0800
 Birth: -

方法二:

[root@192-168-199-198 backups]# ls -i /backups/2.txt
14 /backups/2.txt

這里,我們獲取的 inode 編號是 14。

2. 查找文件所在磁盤路徑

[root@192-168-199-198 backups]# df -h
Filesystem        Size Used Avail Use% Mounted on
/dev/mapper/centos-root  46G  23G  24G 49% /
devtmpfs         3.8G   0 3.8G  0% /dev
tmpfs          3.9G 8.0K 3.9G  1% /dev/shm
tmpfs          3.9G  12M 3.8G  1% /run
tmpfs          3.9G   0 3.9G  0% /sys/fs/cgroup
/dev/sdb1        100G  77G  24G 77% /data2
/dev/sdc1         50G  53M  47G  1% /backups  #<--- 可以看出文件在這里面
/dev/sda1        1014M 142M 873M 14% /boot
tmpfs          781M   0 781M  0% /run/user/0

磁盤路徑為 /dev/sdc1

3. 使用debugfs 查看文件創(chuàng)建時間

[root@192-168-199-198 backups]# debugfs -R 'stat <14>' /dev/sdc1
debugfs 1.42.9 (28-Dec-2013)
Inode: 14  Type: regular  Mode: 0644  Flags: 0x80000
Generation: 737271740  Version: 0x00000000:00000001
User:   0  Group:   0  Size: 30
File ACL: 0  Directory ACL: 0
Links: 1  Blockcount: 8
Fragment: Address: 0  Number: 0  Size: 0
 ctime: 0x5d369644:211c1170 -- Tue Jul 23 13:08:20 2019
 atime: 0x5d3691c7:6e5dbb68 -- Tue Jul 23 12:49:11 2019
 mtime: 0x5d3691c7:6e5dbb68 -- Tue Jul 23 12:49:11 2019
crtime: 0x5d3691c7:6e5dbb68 -- Tue Jul 23 12:49:11 2019
Size of extra inode fields: 28
EXTENTS:
(0):35337

獲取文件創(chuàng)建時間的腳本

鑒于獲取文件創(chuàng)建時間步驟操作有點麻煩 (雖然只有三步 :) )

我這里提供了一個腳本

vi statx

#!/bin/sh

[ $# -ne 1 ] && echo "Usage:   $0 {FILENAME}" && exit 1

INODE=`ls -i $1 |awk '{print $1}'`
FILENAME=$1

#如果傳入?yún)?shù)帶/,則獲取這個傳入?yún)?shù)的目錄路徑并進(jìn)入目錄
 `echo $FILENAME |grep / 1> /dev/null` && { FPWD=${FILENAME%/*};FPWD=${FPWD:=/};cd ${FPWD};FPWD=`pwd`; } || FPWD=`pwd`

 

array=(`echo ${FPWD} | sed 's@/@ @g'`)
array_length=${#array[@]}

for ((i=${array_length};i>=0;i--))
do
 unset array[$i]
 SUBPWD=`echo " "${array[@]} | sed 's@ @/@g'`
 DISK=`df -h |grep ${SUBPWD}$ |awk '{print $1}'`
 [[ -n $DISK ]] && break
done

 

#不是ext4就退出
[[ "`mount |grep ${DISK} |awk '{print $5}'`" != "ext4" ]] && { echo ${DISK} is not mount on type ext4! Only ext4 file system support!;exit 2; }

debugfs -R "stat <${INODE}>" ${DISK}

使用:

chmod +x statx
mv statx /usr/sbin/statx

[root@192-168-199-198 backups]# statx 2.txt
debugfs 1.42.9 (28-Dec-2013)
Inode: 14  Type: regular  Mode: 0644  Flags: 0x80000
Generation: 737271740  Version: 0x00000000:00000001
User:   0  Group:   0  Size: 30
File ACL: 0  Directory ACL: 0
Links: 1  Blockcount: 8
Fragment: Address: 0  Number: 0  Size: 0
 ctime: 0x5d369644:211c1170 -- Tue Jul 23 13:08:20 2019
 atime: 0x5d36bb8f:56eb1e70 -- Tue Jul 23 15:47:27 2019
 mtime: 0x5d3691c7:6e5dbb68 -- Tue Jul 23 12:49:11 2019
crtime: 0x5d3691c7:6e5dbb68 -- Tue Jul 23 12:49:11 2019
Size of extra inode fields: 28
EXTENTS:
(0):35337

?。?!請謹(jǐn)慎在生產(chǎn)環(huán)境使用,shell腳本沒有做太多的異常處理,不支持管道,不支持目錄也沒有經(jīng)過大量的測試

實戰(zhàn)
我們回過頭來,用這個方法,確認(rèn)《xtrabackup 原理圖》是否準(zhǔn)確。

我們需要驗證的是:

xtrabackup_log 是最早創(chuàng)建 并且是 最晚保存的文件

1. 創(chuàng)建備份

DATE=`date "+%Y%m%d%H%M%S"`
xtrabackup -uroot -proot \
 -S /tmp/mysql3306.sock \
 --backup \
 --target-dir=/backups/$DATE

2. 查找所有備份文件的crtime

cd /backups/$DATE
>/tmp/1.txt
>/tmp/2.txt
find . -type f >/tmp/1.txt

for i in `cat /tmp/1.txt`
do
 { echo -n $i" ";statx $i 2>/dev/null |grep crtime |awk '{print $7}'; } >>/tmp/2.txt
done

cat /tmp/2.txt |sort -k2 |less
###以下為輸出###
./ibdata1 23:32:59
./xtrabackup_logfile 23:32:59 #<---可以看出這個文件是最早創(chuàng)建的
./mysql/engine_cost.ibd 23:33:00
./mysql/gtid_executed.ibd 23:33:00
./mysql/help_category.ibd 23:33:00
./mysql/help_keyword.ibd 23:33:00
./mysql/help_relation.ibd 23:33:00
./mysql/help_topic.ibd 23:33:00
./mysql/innodb_index_stats.ibd 23:33:00
./mysql/innodb_table_stats.ibd 23:33:00
./mysql/plugin.ibd 23:33:00
./mysql/server_cost.ibd 23:33:00
./mysql/servers.ibd 23:33:00
./mysql/slave_master_info.ibd 23:33:00
./mysql/slave_relay_log_info.ibd 23:33:00
./mysql/slave_worker_info.ibd 23:33:00
./mysql/time_zone.ibd 23:33:00
./mysql/time_zone_leap_second.ibd 23:33:00
...
./zabbix/trigger_tag.frm 23:33:09
./zabbix/users.frm 23:33:09
./zabbix/users_groups.frm 23:33:09
./zabbix/usrgrp.frm 23:33:09
./zabbix/valuemaps.frm 23:33:09
./zabbix/widget_field.frm 23:33:09
./zabbix/widget.frm 23:33:09

3. 查找所有備份文件的mtime

>/tmp/1.txt
>/tmp/2.txt
find . -type f >/tmp/1.txt

for i in `cat /tmp/1.txt`
do
 { echo -n $i" ";statx $i 2>/dev/null |grep mtime |awk '{print $7}'; } >>/tmp/2.txt
done

cat /tmp/2.txt |sort -k2 |less
###以下為輸出###
./ibdata1 23:33:00
./mysql/engine_cost.ibd 23:33:00
./mysql/gtid_executed.ibd 23:33:00
./mysql/help_category.ibd 23:33:00
./mysql/help_keyword.ibd 23:33:00
./mysql/help_relation.ibd 23:33:00
./mysql/help_topic.ibd 23:33:00
./mysql/innodb_index_stats.ibd 23:33:00
./mysql/innodb_table_stats.ibd 23:33:00
./mysql/plugin.ibd 23:33:00
...
./xtrabackup_logfile 23:33:09 #<---可以看出這個文件是最后修改和保存的
./zabbix/acknowledges.frm 23:33:09
./zabbix/actions.frm 23:33:09
...
./zabbix/users_groups.frm 23:33:09
./zabbix/usrgrp.frm 23:33:09
./zabbix/valuemaps.frm 23:33:09
./zabbix/widget_field.frm 23:33:09
./zabbix/widget.frm 23:33:09

最后,我們通過文件的創(chuàng)建時間和修改時間,實戰(zhàn)地驗證了《xtrabackup 原理圖》的第一和第七步順序的正確性。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • linux: centos設(shè)置ip以及連接外網(wǎng)的方法

    linux: centos設(shè)置ip以及連接外網(wǎng)的方法

    本篇文章主要介紹了linux: centos設(shè)置ip以及連接外網(wǎng)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Linux 監(jiān)控文件被什么進(jìn)程修改(詳解)

    Linux 監(jiān)控文件被什么進(jìn)程修改(詳解)

    下面小編就為大家?guī)硪黄狶inux 監(jiān)控文件被什么進(jìn)程修改(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • linux服務(wù)中開啟防火墻的兩種方式

    linux服務(wù)中開啟防火墻的兩種方式

    這篇文章主要介紹了linux服務(wù)中開啟防火墻的兩種方式,給大家補(bǔ)充介紹了linux防火墻基本知識,需要的朋友可以參考下
    2018-12-12
  • linux性能調(diào)試之vmstat分析

    linux性能調(diào)試之vmstat分析

    這篇文章主要介紹了linux性能調(diào)試之vmstat分析。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Linux中文本處理工具之sort命令詳解

    Linux中文本處理工具之sort命令詳解

    sort命令的功能是對文件中的各行進(jìn)行排序。sort命令有許多非常實用的選項,這些選項最初是用來對數(shù)據(jù)庫格式的文件內(nèi)容進(jìn)行各種排序操作的。下面這篇文章主要給大家介紹了Linux中文本處理工具之sort命令的相關(guān)資料,需要的朋友可以參考下。
    2017-03-03
  • Ubuntu 18.04 Server 設(shè)置靜態(tài)IP 的方法

    Ubuntu 18.04 Server 設(shè)置靜態(tài)IP 的方法

    Netplan是Ubuntu 17.10中引入的一種新的命令行網(wǎng)絡(luò)配置實用程序,用于在Ubuntu系統(tǒng)中輕松管理和配置網(wǎng)絡(luò)設(shè)置。這篇文章主要介紹了Ubuntu 18.04 Server 設(shè)置靜態(tài)IP 的方法,需要的朋友可以參考下
    2018-11-11
  • CentOS7安裝GUI界面及遠(yuǎn)程連接的實現(xiàn)

    CentOS7安裝GUI界面及遠(yuǎn)程連接的實現(xiàn)

    這篇文章主要介紹了CentOS7安裝GUI界面及遠(yuǎn)程連接的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Ubuntu Server下無線網(wǎng)卡的配置詳解

    Ubuntu Server下無線網(wǎng)卡的配置詳解

    今天小編就為大家分享一篇關(guān)于Ubuntu Server下無線網(wǎng)卡的配置詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Linux利用traceroute命令發(fā)現(xiàn)負(fù)載均衡的實戰(zhàn)案例

    Linux利用traceroute命令發(fā)現(xiàn)負(fù)載均衡的實戰(zhàn)案例

    在網(wǎng)絡(luò)管理和故障排除中,了解數(shù)據(jù)包的路徑和識別負(fù)載均衡節(jié)點是非常重要的,traceroute 命令是一個用于跟蹤數(shù)據(jù)包在網(wǎng)絡(luò)中經(jīng)過的路由路徑的工具,本文將詳細(xì)介紹如何利用 traceroute 命令發(fā)現(xiàn)網(wǎng)絡(luò)中的負(fù)載均,需要的朋友可以參考下
    2024-07-07
  • ubuntu16.10安裝docker17.03.0-ce并配置國內(nèi)源和加速器

    ubuntu16.10安裝docker17.03.0-ce并配置國內(nèi)源和加速器

    這篇文章主要介紹了ubuntu16.10安裝docker17.03.0-ce并配置國內(nèi)源和加速器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論

泸州市| 湖南省| 渝中区| 五原县| 灵川县| 花莲市| 阿巴嘎旗| 松滋市| 濮阳市| 晴隆县| 南澳县| 海淀区| 越西县| 莲花县| 同仁县| 隆安县| 淮北市| 卢龙县| 沾益县| 东安县| 阳高县| 凤冈县| 兴国县| 桃园县| 泊头市| 蕲春县| 邛崃市| 文安县| 繁昌县| 利辛县| 道孚县| 乳源| 九龙城区| 辉县市| 上蔡县| 渭南市| 宁蒗| 社会| 明星| 蒙山县| 彝良县|