Linux命令

2019-06-04  本文已影响0人  黑客不黑_

atime mtime ctime 分别为access time,modify time,change time

mv 已经是递归复制,包含文件属性,cp/scp只是覆盖文件内容,不加参数不改变属性。

1 cp命令

cp [-apdriulfs] src dest # 复制单文件或单目录

cp [-apdriuslf] src1 src2 src3......dest_dir # 复制多文件、目录到一个目录下

选项说明:

-p: 文件的属性(权限、属组、时间戳)也复制过去。如果不指定p选项,谁执行复制动作,文件所有者和组就是谁。

-r或-R:递归复制,常用于复制非空目录。

-d:复制的源文件如果是链接文件,则复制链接文件而不是指向的文件本身。即保持链接属性,复制快捷方式本身。如果不指定-d,则复制的是链接所指向的文件。

-a:a=pdr三个选项。归档拷贝,常用于备份。

-i:复制时如果目标文件已经存在,询问是否替换。

-u:(update)若目标文件和源文件同名,但属性不一样(如修改时间,大小等),则覆盖目标文件。

-f:强制复制,如果目标存在,不会进行-i选项的询问和-u选项的考虑,直接覆盖。

-l:在目标位置建立硬链接,而不是复制文件本身。

-s:在目标位置建立软链接,而不是复制文件本身(软链接或符号链接相当于windows的快捷方式)。

2 scp命令和执行过程分析

如果scp拷贝的源文件在目标位置上不存在,则会在目标位置上创建一个空文件,然后将源文件中的内容填充进去。

scp [-12BCpqrv] [-l limit] [-o ssh_option] [-P port] [[user@]host1:]file1 ... [[user@]host2:]file2

选项说明:

-1:使用ssh v1版本,这是默认使用协议版本

-2:使用ssh v2版本

-C:拷贝时先压缩,节省带宽

-l limit:限制拷贝速度,Kbit/s.

-o ssh_option:指定ssh连接时的特殊选项,一般用不上。偶尔在连接过程中等待提示输入密码较慢时,可以设置GSSAPIAuthentication为no

-P port:指定目标主机上ssh端口,大写的字母P,默认是22端口

-p:拷贝时保持源文件的mtime,atime,owner,group,privileges

-r:递归拷贝,用于拷贝目录。注意,scp拷贝遇到链接文件时,会拷贝链接的源文件内容填充到目标文件中(scp的本质就是填充而非拷贝)

-v:输出详细信息,可以用来调试或查看scp的详细过程,分析scp的机制

3 mv命令

mv [-iuf] src dest # 移动单个文件或目录

mv [-iuf] src1 src2 src3 dest_dir # 移动多个文件或目录

选项说明:

--backup[=CONTROL]:如果目标文件已存在,则对该文件做一个备份,默认备份文件是在文件名后加上波浪线,如/b.txt~

-b:类似于--backup,但不接受参数, 默认备份文件是在文件名后加上波浪线,如/b.txt~

-f:如果目标文件已存在,则强制覆盖文件

-i:如果目标文件已存在,则提示是否要覆盖,这是alias mv的默认选项

-n:如果目标文件已存在,则不覆盖已存在的文件

​ 如果同时指定了-f/-i/-n,则后指定的生效

-u:(update)如果源文件和目标文件不同,则移动,否则不移动

4 文件的时间戳(atime/ctime/mtime)

文件的时间属性有三种:atime/ctime/mtime。atime是access time,即上一次的访问时间;mtime是modify time,是文件的修改时间;ctime是change time,也是文件的修改时间,只不过这个修改时间计算的inode修改时间,也就是元数据修改时间。文件还有一个创建时间(create time),大多数unix系统上都认为这是个无用的属性,一般工具无法获取这个时间,但是对于ext家族文件系统,通过它的底层调试工具debugfs可以获取create time。

但mtime只有修改文件内容才会改变,更准确的说是修改了它的data block部分;而ctime是修改文件属性时改变的,确切的说是修改了它的元数据部分,例如重命名文件,修改文件所有者,移动文件(移动文件没有改变datablock,只是改变了其inode指针,或文件名)等.当然,修改文件内容也一定会改变ctime(修改文件内容至少已经修改了inode记录上的mtime,这也是元数据),也就是说mtime的改变一定会引起ctime的改变。

对目录而言,考虑目录文件的data block,可知在目录中创建、删除文件以及目录内其他任意文件操作都会改变mtime,因为目录里的任何东西都是目录中的内容;而目录的ctime,除了目录的mtime引起ctime改变之外,对目录本身的元数据修改也会改变ctime。

总结下:

(1).atime只在文件被打开访问时才改变,若不是打开文件编辑内容(如重定向内容到文件中),则ctime和mtime的改变不会引起atime的改变;

(2).mtime的改变一定引起ctime的改变,而访问文件时(例如cat),atime不一定会改变,所以atime"改变"(这个改变是假象,见下文分析)不一定会影响ctime。

stat 查看时间戳,atime/ctime/mtime。

[root@iZ8vb2r0vqmb51hwx30ydxZ test]# stat index.md 
  File: ‘index.md’
  Size: 10          Blocks: 8          IO Block: 4096   regular file
Device: fd01h/64769d    Inode: 1356477     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2019-06-04 15:37:53.678818897 +0800
Modify: 2019-06-04 15:37:51.149753586 +0800
Change: 2019-06-04 15:37:51.149753586 +0800
 Birth: -

5、/dir/和/dir

/dir/和/dir:一般都表示dir目录和dir目录中的文件。但在有些地方会严格区分是否加尾
随斜线,此时对于加了尾随斜线的表示此目录中的文件,不加尾随斜线的表示
该目录本身和此目录中的文件

6、ll查看文件或者文件夹权限

image.png
上一篇下一篇

猜你喜欢

热点阅读