LPIC Level 1 対策: 第4章 - ファイルシステム(1)
↑ | ← | →
find(1) - 日付の詳しい例
Linux が管理するタイムスタンプは3種類
タイムスタンプ | ls オプション | 解説 |
atime | ls -lu | 最終アクセス時刻 |
mtime | ls -lt | 最新更新日時 |
ctime | ls -lc | 作成日時(i-node が作成変更された日時) |
また stat(1) 利用すればより詳しい情報を得ることができます。
$ stat top.log
File: `top.log'
Size: 3012 Blocks: 8 IO Block: 4096 通常ファイル
Device: fd00h/64768d Inode: 13019371 Links: 1
Access: (0666/-rw-rw-rw-) Uid: ( 1000/ student) Gid: ( 1000/ student)
Access: 2019-05-24 09:23:37.102429109 +0900
Modify: 2019-05-23 01:24:52.839050301 +0900
Change: 2019-05-24 09:25:32.250644729 +0900
Birth: -
find で扱う引数は日で、-n は n日前から現在まで、+n は n日以前を表します。
$ ls -l
total 20
-rw-rw-r-- 1 student student 0 Nov 29 15:00 data20141129
-rw-rw-r-- 1 student student 0 Nov 30 15:00 data20141130
-rw-rw-r-- 1 student student 0 Dec 1 15:00 data20141201
-rw-rw-r-- 1 student student 0 Dec 2 15:00 data20141202
$ date
Wed Dec 3 11:00:05 GMT 2014
$ find . -mtime -2
./data20141202
./data20141201
$ find . -mtime +2
./data20141129
ただし、「日」は今から24時間前を基準としているため、11AM に find を実行した場合は、
-1 は前日の 11AM を基点とします。
これを日付変更時点にするには -daystart オプションを用います。
$ find . -daystart -mtime -2
./data20141202
$ find . -daystart -mtime +2
./data20141129
./data20141130
補足) find 詳細
locate(1) - findとの性能比較、updatedb 補足
find(1) は指定されたディレクトリ下のファイルを全検索しますが、locate は予め
作成されたデータベースを検索するため高速に処理できます。
ただし locate はファイル名以外の検索条件は使用できません。
$ time find / -name new.txt 2>dev/null # 権限エラーを省くため 2> を使用
/home/student/find/new.txt
real 0m2.942s
user 0m0.722s
sys 0m2.219s
$ time locate new.txt
real 0m0.181s
user 0m0.169s
sys 0m0.012s
which(1) - alias の例
which は alias によって変更されたコマンドと、オリジナルのコマンドパスを表示します。
$ which date
/bin/date
$ which ls
alias ls='ls --color=tty'
/bin/ls
$ type ls
ls is aliased to `ls --color=tty'
lsattr/chattr(1) - Ext2/3/4 ファイル属性
lsattr は追加属性の表示、chattr は変更を行い、chmod 同様 +/-/= を使って属性の
許可、禁止、上書きを行います。
記号 | 意味 |
a(x) | 追記のみ可能とする |
c | ファイルを圧縮する(*) |
d(x) | バックアップ(dump)の対象外とする |
e | 拡張フォーマットを使用する |
i(x) | 変更できなくする |
j | データのジャーナリングを行う |
s | 安全な削除(データブロック内を消去)(*) |
t | 末尾のマージをできなくする |
u | 削除から復活可能とする(*) |
A(x) | atime(アクセス時刻)を更新しない |
D | ディレクトリ更新を同期新する |
E | 圧縮エラー(chattr変更不可) |
I | htree検索対象(chattr変更不可) |
S(x) | 同期的に更新する |
(*)なお、属性の中にはまだ実装されていないものが含まれます。
(x)は XFS でも利用可能です。
##### a(追加のみ可) オプション
# chattr +a new.txt
# lsattr new.txt
-----a------- new.txt
##### 追加はできるが
# date >> new.txt
##### 上書きはできない
# date > new.txt
bash: new.txt: Operation not permitted
##### i(変更不可) オプション
# chattr +i new.txt
# lsattr new.txt
----ia------- new.txt
##### 削除できない
# rm new.txt
rm: remove write-protected regular file `new.txt'? y
rm: cannot remove `new.txt': Operation not permitted
##### タイムスタンプの変更もできない
# touch new.txt
touch: cannot touch `new.txt': Permission denied
file(1) - ファイルの判定
(補足)
file(1) はファイルの先頭部分を捜査し、そのファイルの種別を同定します。
判定に関わる情報は /usr/share/file/magic に記載されています。
$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), stripped
$ file /usr/bin/yum
/usr/bin/yum: python script text executable
$ file /etc/hosts
/etc/hosts: ASCII English text
$ file sample.png
sample.png: PNG image data, 6 x 12, 8-bit/color RGBA, non-interlaced