计算机对数据的基本操作大多数可以归纳为增删改查,文件操作也不例外。
touch 命令
项目 内容 命令名称 touch 英文原意 change file timestamps 所在路径 /bin/touch 执行权限 所有用户 作用 修改文件的时间戳
命令格式
touch [ 选项] 文件名或目录名
选项:
-a: 只修改文件的访问时间(Access Time)
-c: 如果文件不存在,则不建立新文件
-d: 把文件的时间改为指定时间
-m: 只修改文件的数据修改时间( Modify Time)
Linux中的每个文件都有三个时间,分别是访问时间(Access Time)、数据修改时间(Modify Time)和状态修改时间(Change Time)。这三个时间可以通过 stat 命令查看。touch命令只能手工指定是只修改访问时间或者数据修改时间,不能指定只修改状态时间。因为前两者的改变都会影响后者。 注意,并没有文件创建时间!
三种时间的含义 读取文件内容 ------> 改变Acess Time 写文件内容 -------> 改变Modify Time and Change Time 只修改文件状态 -------> 改变Change Time
常用用法
创建空文件 文件存在也不会报错,只是三个时间都会变为touch命令执行的时间
stat命令
项目 内容 命令名称 stat 英文原意 display file or file system status 所在路径 /usr/bin/stat 执行权限 所有用户 作用 显示文件或文件系统的详细信息
命令格式
stat [ 选项] 文件名或目录名
选项:
-f: 查看文件所在的文件系统的信息,而不是查看文件的信息
常用用法
查看文件的详细信息 查看文件系统时间
cat命令
项目 内容 命令名称 cat 英文原意 concatenate files and print on the standard output 所在路径 /bin/cat 执行权限 所有用户 作用 合并文件并打印输出到标准输出
命令格式
cat [ 选项] 文件名
选项:
-A: 相当于-vET选项的集合,用于列出所有的隐藏符号
-E: 列出每行结尾的回车符$
-n: 显示行号
-T: 把Tab键用^T显示出来
-v: 列出特殊字符
常用用法
cat命令会将文件的所有内容一次性显示出来。 cat不适合查看太大的文件。
more命令
项目 内容 命令名称 more 英文原意 file perusal filter for crt viewin 所在路径 /bin/more 执行权限 所有用户 作用 分屏显示文件内容
命令格式
more 文件名
文件过大,cat命令会有心无力,这是more命令的作用更加明显。 more命令比较简单,一般不用什么选项,命令会打开一个交互界面,可以识别一些命令。常用的交互命令如下:
space :向下翻页b :向上翻页Enter :向下滚动一行/ 字符串:搜索指定的字符串q :退出
常用用法
分屏显示
less命令
项目 内容 命令名称 less 英文原意 opposite of more 所在路径 /usr/bin/less 执行权限 所有用户 作用 分行显示文件内容
命令格式
less 文件名
可以使用more的交互命令,也可以使用上下箭头。
常用用法
head命令
项目 内容 命令名称 head 英文原意 output the first part of files 所在路径 /usr/bin/head 执行权限 所有用户 作用 显示文件开头内容
命令格式
head [ 选项] 文件名
选项:
-n 行数: 从文件头开始,显示指定行数
-v: 显示文件名
常用用法
head默认显示文件开头的10行内容 使用-n
tail命令
项目 内容 命令名称 tail 英文原意 output the last part of files 所在路径 /usr/bin/tail 执行权限 所有用户 作用 显示文件结尾内容
命令格式
tail [ 选项] 文件名
选项:
-n 行数: 从文件结尾开始,显示指定行数
-f: 监听文件的新增内容
常用用法
不加选项与-n选项与head类似 监听文件新增内容
ln命令
项目 内容 命令名称 ln 英文原意 make links between file 所在路径 /bin/ln 执行权限 所有用户 作用 在文件之间建立链接
命令格式
ln [ 选项] 源文件 目标文件
选项:
-s: 建立软链接文件。如果不加-s则建立硬链接文件
-f: 强制。如果目标文件已经存在,则删除目标文件后再建立链接文件
若想理解此命令的用法,需先了解Linux文件系统是如何工作的。我们以现在主流的ext4为例,加以说明。
ext4文件系统 ext4会把分区主要分为两个部分(暂时不提超级快):一小部分用于保存inode信息;剩余的大部分用于保存block信息。 inode默认大小128Byte,用来记录文件的权限、文件的所有者和属组、文件大小、文件时间戳、文件的数据真正保存的block编号。 block的大小可以使1KB、2KB、4KB,默认4KB。block用于实际的数据存储,如果一个block放不下数据,可以占用多个block。这些block可能连续,也可能分散。 注意,软链接文件的源文件必须写成绝对路径,而不能写成相对路径(硬链接没有这样的要求);否则软链接会报错。
常用用法
硬链接 先建立一个硬链接: 观察源文件和链接文件: 我们发现,两者几乎所有信息都相同,甚至inode号都相同,其原理如下: 在inode信息中,是不会记录文件名称的,而是把文件名称记录在上级目录的block中。也就是说,目录block中记录的是这个目录下所有的一级子文件和子目录的文件名和inode的对应;而文件的block中记录的才是文件的实际数据。当我们查找一个文件,比如/home/shz1/hello.c,需要经历如下步骤: a. 首先找到根目录的inode(根目录的inode是已知的,是2),然后判断用户是否有权限访问根目录的block。 b. 如果有权限,则可以在根目录的block中找到/home的文件名以及对应的inode。 c. 通过/home的inode号,找到/home的inode信息,接着判断用户是否有权限访问/home的block。 … 最终找到访问到/home/shz1/hello.c的block,这样就完成了该文件的读取与访问。 显然,对于硬链接目标文件和源文件,实际上指的是同一个inode和block。 硬链接的限制比较多,不能跨文件系统,也不能链接目录,而且源文件和硬链接文件除了inode号是一样,没有其他明显特征。这些特征使得硬链接并不常用。 软链接 软链接也叫符号链接,相比硬链接,软链接常用很多,其实就相当于windows的快捷方式。再次注意,软链接源文件必须用绝对路径!否则报错。 软链接标志明显,首先,权限为中 “l” 表示这是一个软连接文件;其次,在文件中通过 “->” 显示出源文件的完整名字。 软链接并没有太多限制,可以跨文件系统,也可以链接目录。 软链接block保存的并非文件内容,而是链接文件的inode号,通过该inode,读取inode信息,读取源文件block,读取文件内容。