LPIC Level 1 対策: 第4章 - ファイルシステム(1)

| |

find(1) - 日付の詳しい例

Linux が管理するタイムスタンプは3種類
タイムスタンプls オプション解説
atimels -lu最終アクセス時刻
mtimels -lt最新更新日時
ctimels -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変更不可)
Ihtree検索対象(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