标签: inode cp mv rm ln 时间戳(touch、stat)
inode
cp
mv
rm
ln
时间戳(touch、stat)
环境: CentOS 6.8
inode
用途说明
索引节点,存放文件的元数据
一个索引节点就是一个表项,包含了文件的元数据信息,包括:
- 文件类型,权限,UID, GID- 链接数(指向文件名路径名称的个数) - 文件的大小与时间戳- 指向磁盘上文件的数据块指针 - 有关文件的其他数据
inode 本质上是一种数据结构,包含了文件系统中各个文件的元数据;inode表就是一份包含了对应文件系统中的所有inode号;注意inode是一种数据结构,inode号只是文件相关信息中的一项重要内容。在Linux系统上,当用户访问一个文件时,系统通过inode表查找inode号,在找到对应的inode号之后,方可访问该文件。
一般inode表会占用文件系统磁盘空间的1%,文件引用一个inode号,用户通过文件名来引用这个文件;而目录是目录下的文件名与文件inode号之间的映射。下图结构可简单表示一个inode表结构。
. └── inode ├── Mode ├── Ownerinfo ├── Size └── Timestamps ├── Direct-Pointers │ ├── data1 │ └── data2 ├── Indirect-pointer │ └── Pointer-file-nextblock │ ├── data1 │ └── data2 ├── Double-indirect-pointer │ └── Pointer-file-nextblock │ └── Pointer-file-nextblock │ ├── data1 │ └── data2 └── Triple-indirect-pointer
注: Direct-Pointers: 直接指针 Indirect-pointer: 间接指针 Double-indirect-pointer:双重间接指针 Triple-indirect-pointer:三重间接指针 Pointer-file-nextblock:指向下一个文件块的指针
所谓指针,实质上就是一个地址指向,通过指针能够找见所需的变量单元,即找到以它为地址的内存单元。在Linux文件系统中,通俗地讲,指针就是指向文件地址的索引,是元数据的重要组成部分。
每个指针的大小为4Byte, 一个数据块大小为4K,我们以此为基础,简单梳理下32位Linux系统中直接指针与间接指针的基本情况:
直接指针:编号为1-12,所谓直接指针,就是指针直接指向数据块,中间无其它环节,因为一个指针指向一个数据块,且一个指针的大小为4Byte,一个数据块的大小为4K, 所以,直接指针所以指向的数据大小为 12*4K=48K。
间接指针:所谓间接指针,就是指针不直接指向数据块,而是中间要经过一个 指针数据块, 这个指针数据块的大小为4K,双因为一个指针大小为4Byte, 所以4K容量的指针数据块共有1024个指针(4Byte*1024=4K),故而间接指针所能指向的数据大小为 1024*4K=4096K=4M。
双重间接指针:所谓双重间接指针,就是其在指向数据的过程中经过了两个指针数据块,根据间接指针的论述,我们不难得出双重间接指针所能够指向的数据大小为 102410244K=4G
三重间接指针:你懂得!
除了指针,在inode表中,还有很多重要信息,如开头提到的文件类型、权限、时间戳、用户标识等,这些内容对我们理解inode影响不太,此外暂不作详解。
简单小结下指针,指针就是一个指向数据的地址,这个地址占用4Byte,而4个字节就是32位(4B * 8=32bit), 这就是我们平常所说的32位系统。对于64位系统而言,地址是8Byte的,即8Byte * 8=64bits.
下面,我们从cp命令、mv命令、rm命令、ln命令和时间戳这些角度来继续加深对inode的理解。
cp
用途说明
复制
cp - copy files and directories
cp [OPTION]... [-T] SOURCE DEST cp [OPTION]... SOURCE... DIRECTORY
cp命令用来将一个或多个文件或目录复制到目标文件或目录,可以将单个文件复制成一个指定文件名的文件或某个已经存在的目录下;当一次复制多个文件时,目标文件参数必须是一个已经存在的目录,否则报错。
常用参数
--preserv[=ALLR_LIST]
mode:权限 ownership: 属主属组 timestamps links xattr contextall
-d: --no dereference --preserv=links 不复制原文件,只复制链接名。 当复制符号链接时,把目标文件或目录也建立为符号链接,并指向与源文件或目录连接的原始文件或目录
-p: 保留原文件或目录的属性,相当于--preserv=mode,ownership,timestamp
-R/r: 递归处理,将指定目录下的所有文件与子目录一并处理
-a: 归档,相当于 -dR --preserv=all
-f: --force, 强行复制文件或目录,不论目标文件或目录是否已存在
-i: 覆盖既有文件或目录之前先询问用户
-s: 对源文件建立符号链接,而非复制文件
-b: 覆盖已存在的文件目标前将目标文件备份
-v: --berbose, 详细显示命令执行的过程
使用示例
1、复制一个经典的符号链接文件
[root@centos6 ~]# ls -ld /etc/redhat-release lrwxrwxrwx. 1 root root 14 Jul 20 17:00 /etc/redhat-release -> centos-release [root@centos6 ~]# cp -d /etc/redhat-release /testdir/centosrelease [root@centos6 ~]# ll /testdir/centosrelease lrwxrwxrwx. 1 root root 14 Jul 30 13:14 /testdir/centosrelease -> centos-release # 结果为闪烁的红色,表示cp出错了! [root@centos6 ~]# touch /testdir/centosrelease # 因为在/testdir/目录下缺少了相应的文件 [root@centos6 ~]# ll /testdir/centosrelease lrwxrwxrwx. 1 root root 14 Jul 30 13:14 /testdir/centosrelease -> centos-release # 正常显示 [root@centos6 ~]#
2、保留三个基本的属性(权限,属主属组,时间戳)
[root@centos6 ~]# cp f1 ~liansir/f11 [root@centos6 ~]# ll f1-rw-r--r--. 1 root root 8 Jul 30 09:14 f1 [root@centos6 ~]# [liansir@centos6 ~]$ ll f11 -rw-r--r--. 1 root root 8 Jul 30 13:37 f11 # 时间戳已改变 [root@centos6 ~]# cp -p f1 ~liansir/f11 cp: overwrite `/home/liansir/f11‘? y [root@centos6 ~]# ll f1-rw-r--r--. 1 root root 8 Jul 30 09:14 f1 [root@centos6 ~]# [liansir@centos6 ~]$ ll f11 -rw-r--r--. 1 root root 8 Jul 30 09:14 f11 # 时间戳示变 [liansir@centos6 ~]$ [liansir@centos6 ~]$ date Sat Jul 30 13:43:49 CST 2016[liansir@centos6 ~]$
3、对源文件建立符号链接(并不复制文件)
[root@centos6 ~]# cp -s f2 /testdir/f22 # /testdir是个独立分区 cp: `/testdir/f22‘: can make relative symbolic links only in current directory [root@centos6 ~]# cp -s f2 /usr/f22 # /usr是个普通目录 cp: `/usr/f22‘: can make relative symbolic links only in current directory [root@centos6 ~]# cp -s f2 f22 [root@centos6 ~]# ll f22lrwxrwxrwx. 1 root root 2 Jul 30 13:48 f22 -> f2 [root@centos6 ~]#
由此可见,cp -s 命令只能在当前目录下对源文件建立符号链接。
4、安全复制
[root@centos6 ~]# lsf3 f33 [root@centos6 ~]# cat f3liansir hello [root@centos6 ~]# cat f33liansir [root@centos6 ~]# cp -vb f3 f33 cp: overwrite `f33‘? y `f3‘ -> `f33‘ (backup: `f33~‘) [root@centos6 ~]# ls f3 f33 f33~ # 备份f33为f33~ [root@centos6 ~]# cat f33liansir hello # 成功复制 [root@centos6 ~]# cat f33~liansir # 成功备份 [root@centos6 ~]#
5、复制目录与目录下的文件
[root@centos6 /]# cp /dev /testdir/devv # 把一个目录复制到另一个目录 cp: omitting directory `/dev‘ [root@centos6 /]# cp -r /dev /testdir/devv # 复制目录时要加-r [root@centos6 /]# rm -rf /testdir/devv [root@centos6 /]# cp -r /dev/* /testdir/devv # 复制目录下的所有文件到一个不存在的目录 cp: target `/testdir/devv‘ is not a directory [root@centos6 /]# mkdir /testdir/devv # 在复制多个文件到一个目录时先创建这个目录 [root@centos6 /]# cp -r /dev/* /testdir/devv [root@centos6 /]#
6、利用 --preserv 参数灵活复制文件
# 要求文件的时间戳不变 [root@centos6 ~]# cp f1 ~liansir/f1 [root@centos6 ~]# ll f1-rw-r--r--. 1 root root 0 Jul 30 14:34 f1 [root@centos6 ~]# ls -i f1 # 查看inode号2752514 f1 [root@centos6 ~]# [liansir@centos6 ~]$ ll total 0-rw-r--r--. 1 root root 0 Jul 30 14:39 f1 # 时间戳已改变 [liansir@centos6 ~]$ ls -i 1572875 f1 [liansir@centos6 ~]$ [root@centos6 ~]# cp --preserv=timestamps f1 ~liansir/f1 cp: overwrite `/home/liansir/f1‘? y [root@centos6 ~]# ll f1-rw-r--r--. 1 root root 0 Jul 30 14:34 f1 [root@centos6 ~]# ll ~liansir/ total 0-rw-r--r--. 1 root root 0 Jul 30 14:34 f1 # 时间戳未改变 [root@centos6 ~]#
# 要求文件的属主属组不变 [liansir@centos6 ~]$ touch f2 [liansir@centos6 ~]$ ll f2 -rw-rw-r--. 1 liansir liansir 0 Jul 30 14:46 f2 [liansir@centos6 ~]$ ls -i f21572876 f2 [liansir@centos6 ~]$ [root@centos6 ~]# cp ~liansir/f2 f2 [root@centos6 ~]# ll f2-rw-r--r--. 1 root root 0 Jul 30 14:46 f2 # 文件属主属组已变 [root@centos6 ~]# ls -i f22752539 f2 [root@centos6 ~]# [root@centos6 ~]# cp --preserv=ownership ~liansir/f2 f2cp: overwrite `f2‘? y [root@centos6 ~]# ll f2-rw-r--r--. 1 liansir liansir 0 Jul 30 14:48 f2 # 文件属主属组未变 [root@centos6 ~]#
# 要求文件的权限不变 [liansir@centos6 ~]$ ll f2 -rw-rw-r--. 1 liansir liansir 0 Jul 30 14:46 f2 [liansir@centos6 ~]$ [root@centos6 ~]# cp ~liansir/f2 f22 [root@centos6 ~]# ll f22-rw-r--r--. 1 root root 0 Jul 30 14:59 f22 # 权限已变 [root@centos6 ~]# [root@centos6 ~]# cp --preserv=mode ~liansir/f2 f222 [root@centos6 ~]# ll f222-rw-rw-r--. 1 root root 0 Jul 30 15:02 f222 # 权限未变 [root@centos6 ~]#
CP和inode
[root@centos6 ~]# ls -i 2752752 f1 2752775 f2 2752748 f222 2752514 f332752764 f11 2752734 f22 2752539 f3 2752691 f33~ [root@centos6 ~]#
开篇说到inode其实是一种数据结构,inode号是inode对系统文件的一个编号,在cp 时,系统首先会分配一个inode号,在inode表中生成新条目,在目录中创建一个目录项 ,将名称与inode号关联,拷贝数据生成新的文件。
rm
用途说明
删除
rm - remove files or directories rm [OPTION]... FILE...
rm命令可以删除一个或多个文件或目录,包括目录下面的文件或子目录;对于链接文件,删除的只是链接而非原文件。使用rm 命令之前须谨慎,故一旦删除便无法恢复。
常用参数
-i: --interactive, 交互式,删除目录或文件前先询问用户
-f: 强制删除文件或目录
-r/-R: --recursive 递归处理,将指定目录下的所有文件与子目录一并处理
-v: --verbose, 显示详细执行过程
--preserve-root: do not remove ‘/‘ (default)
使用示例
如果在掌握cp命令的基础之上,再看下面的mv、rm应该是小case了!
# 交互式操作 [root@centos6 ~]# rm -i f1 f2 f3 rm: remove regular empty file `f1‘? y rm: remove regular empty file `f2‘? n rm: remove regular empty file `f3‘? n [root@centos6 ~]# ls f2 f3 [root@centos6 ~]#
rm与inode
在执行rm命令时,链接数递减,从而释放inode号;把数据块放在空闲列表中;删除目录项;实据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。
mv
用途说明
移动与重命名
mv - move (rename) files mv [OPTION]... [-T] SOURCE DEST mv [OPTION]... SOURCE... DIRECTORY
mv 命令可将文件从一个目录移动至另一个目录,或者对文件进行重命名,但只能在同一目录下; 如果将某个文件移至一个已经存在的目录下,则会完成一个覆盖动作。
mv 的用法似,无非也就是把文件mv到文件,或者把文件mv到目录;前者在同一目录下相当于重命令,在不同目录下当然就是移动了。后者不管是同一目录还是目录,都是移动或者覆盖(同名则覆盖)。
常用参数
--backup[=CONTROL]: 备份模式,当覆盖文件时则先备份
-b: 覆盖前为其创建备份
-f: 强行移动或覆盖
-i: 交互式模式,"y"表示覆盖,"n"表示取消当前操作
-S: --suffix=SUFFIX, 为备份文件指定后缀
--strip-trailing-slashes: 删除源文件中的斜杠"/"
-u: --update, 更新,当源文件比目标文件新或者目标文件不存时移动
使用示例
开启备份模式
[root@centos6 ~]# cat f1 f2 1 2 [root@centos6 ~]# [liansir@centos6 ~]$ cat f1 f2 11 22 [liansir@centos6 ~]$ [root@centos6 ~]# mv --backup f1 f2 ~liansir/ mv: overwrite `/home/liansir/f1‘? y mv: overwrite `/home/liansir/f2‘? y [root@centos6 ~]# [liansir@centos6 ~]$ ls f1 f1~ f2 f2~ # 成功备份 [liansir@centos6 ~]$ cat f1 f1~ f2 f2~ 1 11 2 22 [liansir@centos6 ~]$
为备份文件指定后缀,默认为~
[root@centos6 ~]# mv -S ".back" -b history.log /testdir/history.log mv: overwrite `/testdir/history.log‘? y [root@centos6 ~]# ll /testdir/ total 12 drwxr-xr-x. 17 root root 4096 Jul 30 14:15 devv -rw-------. 1 root root 7781 Jul 30 17:39 history.log -rw-r--r--. 1 root root 0 Jul 30 19:20 history.log.back # 成功备份文件的指定后缀 [root@centos6 ~]#
mv与inode
如果mv命令的目标和源在相同的文件系统,则:用新的文件名创建新的目录项;删除旧目录条目对应的旧的文件名;不影响inode表(除了时间戳)或磁盘上的数据位置:没有数据被移动。如果目标和源在不同的文件系统,mv则相当于cp和rm.
rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理性删除。
ln
用途说明
创建硬链接和软链接
ln - make links between files ln [OPTION]... [-T] TARGET LINK_NAME (1st form) ln [OPTION]... TARGET (2nd form) ln [OPTION]... TARGET... DIRECTORY (3rd form)
ln命令默认创建的是硬链接,-s 选项可创建软链接;其中,源文件是指被连接的文件,目标文件是指对源文件作的链接文件。
为了深入了解ln命令,我们还须对 硬链接 与 软链接 作一个基本的认知与对比。首先还是看一个ln命令的常用参数吧!
常用参数
--backup: --backup[=CONTROL],开启备份模式
-b: 类似于--backup,但不接受参数
-d,-F: --directory, 建立目录的硬链接
-f: --force, 强行建立文件或目录的链接,不论目标文件或目录是否存在
-i: --interactiv, 交互式
-n: --no-dereference, 把软链接的目标目录视为一般文件
-s: --symbolic, 创建软链接
-S: --suffix=SUFFIX,为备份文件指定后缀(与mv 的 -S选项一个意思)
-v: --verbose, 显示指令执行过程
--help: 在线帮助
--version: 显示版本信息
使用示例
创建一个硬链接:
[root@centos6 ~]# touch redhat [root@centos6 ~]# ll total 0 -rw-r--r--. 1 root root 0 Jul 31 10:35 redhat [root@centos6 ~]# ln redhat centos # 为了方便对比,在同一目录下创建了硬链接 [root@centos6 ~]# ll total 0 -rw-r--r--. 2 root root 0 Jul 31 10:35 centos # 硬链接数增加 -rw-r--r--. 2 root root 0 Jul 31 10:35 redhat [root@centos6 ~]#
创建一个软链接:
[root@centos6 ~]# ln -s redhat blackhat [root@centos6 ~]# ll total 0 lrwxrwxrwx. 1 root root 6 Jul 31 10:39 blackhat -> redhat # 文件类型为l -rw-r--r--. 2 root root 0 Jul 31 10:35 centos # 硬链接数未增加 -rw-r--r--. 2 root root 0 Jul 31 10:35 redhat [root@centos6 ~]#
链接与inode:
[root@centos6 ~]# ls -i 2752691 blackhat 2752514 centos 2752514 redhat # 硬链接的inode号为同一个,软链接的inode号独立存在 [root@centos6 ~]#
绝对路径与相对路径:
[root@centos6 ~]# ln -s /root/f1 ~liansir/f2 # 绝对路径 [root@centos6 ~]# ln -s ../root/f1 ~liansir/f2 # 相对路径
时间戳
主要用途
标识时间
时间戳就是一个字符序列,能唯一地标识任何一刻的时间。涉及到的常用命令有 touch、stat.
touch - change file timestampstouch [OPTION]... FILE...
touch命令,两个功能:修改文件的时间戳为当前系统的时间(默认);创建空文件。 一个文件的时间戳通常有三个:
atime:Access,访问时间 mtime:Modify,修改时间 ctime:Change,改变时间
常用参数
-a: change only the access time
-c: --no-create, do not create any files
-d: --date=STRING , 使用指定的日期时间,而非当前时间
-m: change only the modification time
-r: --reference=FILE, use this file’s times instead of current time.把指定文件或目录的日期时间设成参考文件的日期时间。
-t: STAMP,use [[CC]YY]MMDDhhmm[.ss] instead of current time,使用指定的日期时间
--help: 在线帮助
--version 版本信息
主要用途
状态信息
stat - display file or file system status stat [OPTION]... FILE...
stat命令主要用来显示文件或文件系统的状态信息,要比ls 更为详细。
常用参数
-L: follow links, 显示符号链接的状态信息,否则显示的是被符号链接的文件信息
-f: --file-system, display file system status instead of file status,显示文件系统的状态信息而非文件的状态信息
--help
--version
使用示例
[root@centos6 ~]# touch redhat [root@centos6 ~]# ll # 显示的是mtime total 0-rw-r--r--. 1 root root 0 Jul 31 11:13 redhat # 创建了一个空文件 [root@centos6 ~]# stat redhat File: `redhat‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 2752514 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 11:13:10.676039727 +0800 # 时间戳 Modify: 2016-07-31 11:13:09.654042488 +0800 Change: 2016-07-31 11:13:09.654042488 +0800 [root@centos6 ~]# [root@centos6 ~]# touch redhat # 因为redhat已被创建,故为更新时间戳 [root@centos6 ~]# stat redhat File: `redhat‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 2752514 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 11:15:02.985042385 +0800 # 时间戳已变 Modify: 2016-07-31 11:15:01.966042649 +0800 Change: 2016-07-31 11:15:01.966042649 +0800 [root@centos6 ~]#
显示任意时间戳:
--time=atime --time=ctime
[root@centos6 ~]# date Sun Jul 31 12:33:06 CST 2016 [root@centos6 ~]# touch redhat [root@centos6 ~]# ll --time=atime redhat -rw-r--r--. 1 root root 0 Jul 31 12:33 redhat [root@centos6 ~]# ll --time=ctime redhat -rw-r--r--. 1 root root 0 Jul 31 12:33 redhat [root@centos6 ~]# [root@centos6 ~]# stat redhat File: `redhat‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 2752514 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 12:33:16.230018565 +0800 # atime最新 Modify: 2016-07-31 12:33:15.215018960 +0800 Change: 2016-07-31 12:33:15.215018960 +0800 [root@centos6 ~]# # 现在我们cat下redhat [root@centos6 ~]# date Sun Jul 31 12:36:40 CST 2016 [root@centos6 ~]# cat redhat [root@centos6 ~]# stat redhat File: `redhat‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 2752514 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 12:33:16.230018565 +0800 # atime怎么没变? Modify: 2016-07-31 12:33:15.215018960 +0800 Change: 2016-07-31 12:33:15.215018960 +0800 [root@centos6 ~]# # 现在我们编辑下redhat [root@centos6 ~]# vim redhat redhat123 ~ "redhat" 1L, 10C written [root@centos6 ~]# [root@centos6 ~]# stat redhat File: `redhat‘ Size: 10 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 2752764 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 12:37:58.609016467 +0800 # 时间戳已变 Modify: 2016-07-31 12:37:57.583017266 +0800 Change: 2016-07-31 12:37:57.592017739 +0800 [root@centos6 ~]# # 我们再次cat一下redhat [root@centos6 ~]# date Sun Jul 31 12:41:51 CST 2016 [root@centos6 ~]# cat redhat redhat123 [root@centos6 ~]# stat redhat File: `redhat‘ Size: 10 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 2752764 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 12:37:58.609016467 +0800 # 时间戳未变 Modify: 2016-07-31 12:37:57.583017266 +0800 Change: 2016-07-31 12:37:57.592017739 +0800 [root@centos6 ~]#
通过试验,我们发布,在创建文件与修改文件后,atime是最新的,并且修改文件之后时间戳会整体刷新,但在访问文件之后时间戳是不会改变的,而atime应该是要改变的,可怕的是atime竟然没改变,这。。。大白天的。。。见了鬼了。。。
注意,我们的实验是在CentOS 6.8上进行的,在CentOS 5及以前版本,当访问一个文件后atime一定是会改变的,但在CentOS 6及之后版本,引入了delay time机制,从而使得在访问文件时atime没发生变化。那么为什么要引入这个机制呢?
因为一读文件,而使得atime变化,即元数据发生变化,必然会对磁盘进行写操作,无形中增加了系统的IO,从而服务器的负载变大,最终影响服务器的性能。所以,在一定的条件下,读文件没必要改变atime.
那问题来了,文件被访问时(不是被修改或touch)atime会在什么样的情况下改变呢?
如果atime的时间已经大于一天,则atime变;atime的时间比mtime的时间要旧,则atime变。两个条件满足一个就会触发atime的更改。
明白了吧,通过上面实验得知,touch一个已有文件时时间戳会变,修改一个文件后时间戳也会变,但我们的还有更高的需求,如果我想修改一个文件,但不想让它的atime改变,这能实现吗?
[root@centos6 ~]# date Sun Jul 31 13:01:18 CST 2016 [root@centos6 ~]# stat f1 File: `f1‘ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 802h/2050d Inode: 2752537 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 11:22:13.167042548 +0800 Modify: 2016-07-31 11:22:12.148041845 +0800 Change: 2016-07-31 11:22:12.148041845 +0800 [root@centos6 ~]# echo liansir >> f1 # 用echo修改原文件 [root@centos6 ~]# stat f1 File: `f1‘ Size: 8 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 2752537 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 13:01:48.923016664 +0800 # 时间戳还是会变 Modify: 2016-07-31 13:01:47.908016948 +0800 Change: 2016-07-31 13:01:47.908016948 +0800 [root@centos6 ~]#
我们的需求在CentOS 6.8上没有实现,白忙活一场!!!
想起那个夜晚对妹子吹牛说自己的可以修改某一个文件而不让它的atime改变...
转战CentOS 7.2
[root@localhost ~]# date Sun Jul 31 01:46:16 EDT 2016 # 01:46:16 [root@localhost ~]# stat f1 File: ‘f1’ Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: fd00h/64768d Inode: 404648679 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2016-07-31 01:44:37.752168526 -0400 # atime=01:44:37 Modify: 2016-07-31 01:44:37.752168526 -0400 Change: 2016-07-31 01:44:37.752168526 -0400 Birth: - [root@localhost ~]# echo liansir >> f1 # 用echo修改原文件 [root@localhost ~]# stat f1 File: ‘f1’ Size: 8 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 404648679 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2016-07-31 01:44:37.752168526 -0400 # atime=01:44:37,atime未变 Modify: 2016-07-31 01:46:44.486366696 -0400 # mtime=01:46:44 Change: 2016-07-31 01:46:44.486366696 -0400 # ctime=01:46:44 Birth: - [root@localhost ~]#
修改原文件后,成功”保留“了atime!
哈哈,把妹子定格在了atime!
如果你想把妹子永远定格在第一次见面的atime, 教你一招!
强行锁定atime:
强行锁定atime: [root@localhost ~]# chattr +A f1 [root@centos6 ~]# chattr +A f1 [root@centos6 ~]# echo lian >> f1 [root@centos6 ~]# stat f1 File: `f1‘ Size: 18 Blocks: 8 IO Block: 4096 regular file Device: 802h/2050d Inode: 2752537 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Access: 2016-07-31 13:47:21.432013563 +0800 # atime 未变 Modify: 2016-07-31 13:58:11.474013781 +0800 Change: 2016-07-31 13:58:11.474013781 +0800 [root@centos6 ~]#
2016.7.31
止战
本文出自 “止战-连Sir” 博客,请务必保留此出处http://liansir.blog.51cto.com/9372908/1832338
标签: inode cp mv rm ln 时间戳(touch、stat)
原文地址:http://liansir.blog.51cto.com/9372908/1832338