背景 ファイルの作成時刻を取得する必要がある場合があります。 例えば: 「xtrabackup スキーマ」を調べていたとき、xtrabackup_log が最初に作成されたファイルであり、最後に保存されたファイルであることを観察して確認したいと思いました。 xtrabackup_logfile ファイルの作成タイムスタンプと変更タイムスタンプを知る必要があります。 レビュー: Linux ファイルの 3 つのタイムスタンプ Linux ファイル システムには 3 つのタイムスタンプが保存されており、stat コマンドを使用してファイル情報を表示することで取得できます。それらは、ATime、MTime、CTime です。 [root@192-168-199-198 バックアップ]# stat 2.txt ファイル: '2.txt' サイズ: 16 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 821h/2081d Inode: 15 リンク: 1 アクセス: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) アクセス: 2019-07-23 12:12:14.276981038 +0800 修正: 2019-07-23 12:12:41.415980158 +0800 変更: 2019-07-23 12:12:41.415980158 +0800 生年月日: - ATime - ファイルの最終アクセス時刻 ファイルが読み取られるたびに、ATime は stat コマンドによって取得された Access の値に対応するように更新されます。 [root@192-168-199-198 バックアップ]# cat 2.txt #<-- ファイル 121231233123123 を読み取り [root@192-168-199-198 バックアップ]# stat 2.txt ファイル: '2.txt' サイズ: 16 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 821h/2081d Inode: 15 リンク: 1 アクセス: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) アクセス: 2019-07-23 12:22:09.644961733 +0800 #<-- 時間が変わりました 変更: 2019-07-23 12:12:41.415980158 +0800 変更: 2019-07-23 12:12:41.415980158 +0800 生年月日: - MTime - ファイルの内容が最後に変更された時刻 ファイルが書き込まれると、stat コマンドによって取得された Modify 値に応じて CTime が更新されます。 [root@192-168-199-198 バックアップ]# echo hello_world > 2.txt #<-- ファイルの内容を変更します [root@192-168-199-198 バックアップ]# stat 2.txt ファイル: '2.txt' サイズ: 12 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 821h/2081d Inode: 15 リンク: 1 アクセス: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) アクセス: 2019-07-23 12:22:09.644961733 +0800 変更: 2019-07-23 12:26:23.466953503 +0800 #<-- 時間が変わりました変更: 2019-07-23 12:26:23.466953503 +0800 生年月日: - ここでファイルの内容を変更するために vi を使用しないでください。vi を使用してファイルの内容を変更すると、Inode が変更される可能性があり、つまり、観察するファイルは以前のファイルではなくなるためです。これは vi の原理に関連しています。 CTime - ファイル属性が最後に変更された時刻 ファイル ディレクトリが変更されたり、ファイルの所有者、権限などが変更されたりすると、stat コマンドで取得した Change 値に応じて CTime も更新されます。 [root@192-168-199-198 バックアップ]# chmod 777 2.txt #<-- ファイル属性を変更する [root@192-168-199-198 バックアップ]# stat 2.txt ファイル: '2.txt' サイズ: 12 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 821h/2081d Inode: 15 リンク: 1 アクセス: (0777/-rwxrwxrwx) Uid: (0/root) Gid: (0/root) アクセス: 2019-07-23 12:22:09.644961733 +0800 修正: 2019-07-23 12:26:23.466953503 +0800 変更: 2019-07-23 12:30:35.830945320 +0800 #<-- 時間変更生年月日: - Linux はファイルの作成時刻を取得できませんか? Linux には ATime、MTime、CTime の 3 種類の時間があることが分かりましたが、ではなぜ CRTime (作成時間) がないのか疑問に思います。 Windows システム (上記) と比較すると、Windows NTFS ファイル システムには「作成時間」を含む 3 つのタイムスタンプがありますが、Linux の設計思想にはファイルの「作成時間」というものがないため、ext ファイル システムの初期バージョンではファイルの「作成時間」がサポートされていません。しかし、ext4 バージョン以降では、ファイルの作成時刻は ext4 ファイル システムの inode に保存されるため、ext4 ファイル システムでも特別な方法を使用してファイルの作成時刻を取得できます。 また、ファイルの作成時刻を取得できるかどうかは、ファイルシステムがそれをサポートしているかどうかによって決まることも説明します。 Linuxでファイル作成時間を取得する手順 CentOS7 Linux システムには、ext4 ファイル システム上のファイルの作成時刻を確認できる debugfs というツールが付属しています。 man debugfs は、ツールの説明が「ext2/ext3/ext4 ファイルシステムデバッガー」であることを発見しました。そのため、xfs ファイルシステムはサポートされていません。 一般的に使用されているxfsファイルシステムがファイル作成時刻の取得をサポートしているかどうか、またそれをどのように取得するかは不明です。読者は公式ドキュメントを参照する必要があります。 1. ファイルのinode番号を取得する 方法1: [root@192-168-199-198 バックアップ]# stat /backups/2.txt ファイル: '/backups/2.txt' サイズ: 30 ブロック: 8 IO ブロック: 4096 通常ファイル デバイス: 821h/2081d Inode: 14 #<--- このリンク: 1 アクセス: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) アクセス: 2019-07-23 12:49:11.462909146 +0800 修正: 2019-07-23 12:49:11.462909146 +0800 変更: 2019-07-23 13:08:20.138871900 +0800 生年月日: - 方法2: [root@192-168-199-198 バックアップ]# ls -i /backups/2.txt 14 /バックアップ/2.txt ここで取得する inode 番号は 14 です。 2. ファイルが保存されているディスクパスを見つける [root@192-168-199-198 バックアップ]# df -h ファイルシステムサイズ 使用済み 使用可能使用率 マウント先 /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% /実行 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を使用してファイルの作成時間を表示する [root@192-168-199-198 バックアップ]# debugfs -R 'stat <14>' /dev/sdc1 debugfs 1.42.9 (2013 年 12 月 28 日) Inode: 14 タイプ: 通常 モード: 0644 フラグ: 0x80000 世代: 737271740 バージョン: 0x00000000:00000001 ユーザー: 0 グループ: 0 サイズ: 30 ファイル ACL: 0 ディレクトリ ACL: 0 リンク: 1 ブロック数: 8 フラグメント: アドレス: 0 番号: 0 サイズ: 0 ctime: 0x5d369644:211c1170 -- 2019 年 7 月 23 日火曜日 13:08:20 atime: 0x5d3691c7:6e5dbb68 -- 2019 年 7 月 23 日火曜日 12:49:11 mtime: 0x5d3691c7:6e5dbb68 -- 2019 年 7 月 23 日火曜日 12:49:11 crtime: 0x5d3691c7:6e5dbb68 -- 2019 年 7 月 23 日火曜日 12:49:11 追加の inode フィールドのサイズ: 28 範囲: (0):35337 ファイル作成時間を取得するスクリプト ファイル作成の時間ステップ操作を取得するのは少し面倒です(ただし、3つのステップしかありません:)) ここにスクリプトを用意しました vi ステータス #!/bin/sh [ $# -ne 1 ] && echo "使用法: $0 {FILENAME}" && exit 1 INODE=`ls -i $1 |awk '{print $1}'` ファイル名=$1 #パラメータに / が含まれている場合は、パラメータのディレクトリ パスを取得し、ディレクトリを入力します `echo $FILENAME |grep / 1> /dev/null` && { FPWD=${FILENAME%/*};FPWD=${FPWD:=//;cd ${FPWD};FPWD=`pwd`; } || FPWD=`pwd` 配列=(`echo ${FPWD} | sed 's@/@ @g'`) 配列の長さ=${#配列[@]} ((i=${array_length};i>=0;i--)) の場合 する 配列[$i]の設定を解除 SUBPWD=`echo " "${array[@]} | sed 's@ @/@g'` DISK=`df -h |grep ${SUBPWD}$ |awk '{print $1}'` [[ -n $DISK ]] && ブレーク 終わり #ext4 でない場合は終了します [[ "`mount |grep ${DISK} |awk '{print $5}'`" != "ext4" ]] && { echo ${DISK} はタイプ ext4 にマウントされていません。ext4 ファイル システムのみがサポートされています。;exit 2; } debugfs -R "stat <${INODE}>" ${DISK} 使用: chmod +x ステータスx mv statx /usr/sbin/statx [root@192-168-199-198 バックアップ]# statx 2.txt debugfs 1.42.9 (2013 年 12 月 28 日) Inode: 14 タイプ: 通常 モード: 0644 フラグ: 0x80000 世代: 737271740 バージョン: 0x00000000:00000001 ユーザー: 0 グループ: 0 サイズ: 30 ファイル ACL: 0 ディレクトリ ACL: 0 リンク: 1 ブロック数: 8 フラグメント: アドレス: 0 番号: 0 サイズ: 0 ctime: 0x5d369644:211c1170 -- 2019 年 7 月 23 日火曜日 13:08:20 atime: 0x5d36bb8f:56eb1e70 -- 2019 年 7 月 23 日火曜日 15:47:27 mtime: 0x5d3691c7:6e5dbb68 -- 2019 年 7 月 23 日火曜日 12:49:11 crtime: 0x5d3691c7:6e5dbb68 -- 2019 年 7 月 23 日火曜日 12:49:11 追加の inode フィールドのサイズ: 28 範囲: (0):35337 ! ! !実稼働環境では注意して使用してください。シェル スクリプトは例外処理をほとんど行わず、パイプやディレクトリをサポートしておらず、広範囲にテストされていません。 実際の戦闘では、この方法を使用して、「xtrabackup 回路図」が正確かどうかを確認します。 確認する必要があるのは次の点です。 xtrabackup_logは最初に作成されたファイルであり、最後に保存されたファイルです。 1. バックアップを作成する DATE=`日付 "+%Y%m%d%H%M%S"` xtrabackup -uroot -proot \ -S /tmp/mysql3306.sock \ --バックアップ\ --target-dir=/backups/$DATE 2. すべてのバックアップファイルのcrtimeを見つける cd /backups/$DATE >/tmp/1.txt >/tmp/2.txt 検索 . -type f >/tmp/1.txt `cat /tmp/1.txt` 内の i について する { echo -n $i" ";statx $i 2>/dev/null |grep crtime |awk '{print $7}'; } >>/tmp/2.txt 終わり cat /tmp/2.txt |sort -k2 |less ###以下は出力です### ./ibdata1 23:32:59 ./xtrabackup_logfile 23:32:59 #<---このファイルが最初に作成されたファイルであることがわかります。/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/プラグイン.ibd 23:33:00 ./mysql/server_cost.ibd 23:33:00 ./mysql/servers.ibd 23:33:00 ./mysql/スレーブマスター情報.ibd 23:33:00 ./mysql/slave_relay_log_info.ibd 23:33:00 ./mysql/スレーブワーカー情報.ibd 23:33:00 ./mysql/タイムゾーン.ibd 23:33:00 ./mysql/タイムゾーン_うるう秒.ibd 23:33:00 ... ./zabbix/トリガータグ.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 検索 . -type f >/tmp/1.txt `cat /tmp/1.txt` 内の i について する { echo -n $i" ";statx $i 2>/dev/null |grep mtime |awk '{print $7}'; } >>/tmp/2.txt 終わり 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/プラグイン.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 最後に、ファイルの作成時間と変更時間を確認して、xtrabackup スキーマの最初のステップと 7 番目のステップの正確さを検証しました。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 以下もご興味があるかもしれません:
|
<<: ノードを使用して静的ファイルキャッシュを実装する方法
>>: MLSQL スタックでストリームのデバッグを簡単にする方法
Nginx ロード バランシング サーバー: IP: 192.168.0.4 (Nginx-Serv...
目次vモデル.sync微妙な違い機能シナリオを要約します。 vモデル <!--親コンポーネント...
導入増分バックアップとは、完全バックアップまたは最後の増分バックアップの後、後続の各バックアップでは...
新しい公式サイトはオンラインですが、携帯電話で新しい公式サイトにアクセスすると、エクスペリエンスが非...
テキスト非表示コード、HTML 内の特定のテキストを非表示にするコードをコピーコードは次のとおりです...
CSS では、要素タグは、要素の表示モードの違いに応じて、インラインレベル要素とブロックレベル要素の...
1.コマンドが見つかりません コマンドが見つかりません2. そのようなファイルまたはディレクトリは...
概要(公式にはより詳しい説明があります) Firewalld は、ネットワーク接続またはインターフェ...
マウス効果では、setTimeout を使用して固定時間にノードを生成し、ノードを削除し、生成された...
目次1. MySQLインデックスの紹介2. MySQLの5種類のインデックスの詳しい説明1. 総合索...
データボリュームの使用開始先ほどのケースでは、ホストからコンテナにデータをコピーする必要がある場合、...
まず、MySQL とは何かを理解しましょう。 MySQL は、スウェーデンの会社 MySQL AB ...
静的と動的の分離動的リクエストと静的リクエストはミドルウェアを通じて分離され、不要なリクエストの消費...
目次1.関数内のこの方向1. 通常の機能2. コンストラクター3. オブジェクトメソッド4. イベン...
Spring jdbc のデータベース操作オブジェクト モデルの詳細な例Spring Jdbc デー...