Linux 文件操作

概述

本文介绍与文件操作相关的众多指令,这部分内容仅涉及指令功能说明,而不涉及具体用法。

如需了解详细用法,可借由命令 command --help \ info command \ man command 进行查看。

目录操作

  • cd

    该指令用于切换当前工作目录为指定目录。

  • pwd

    该指令用于显示当前工作目录的具体路径信息。

  • mkdir

    该指令可用于递归创建空目录。

  • rmdir

    该指令仅用于递归删除空目录。

文件操作

  • ls

    该指令用于查看指定目录下各文件或目录的具体信息。

  • touch

    该指令既可用于创建新文件,也可用于修改文件时间。

    Linux 系统会记录与文件相关的多个时间参数,其中主要有 3 个时间参数:

    • modification time (mtime):文件内容发生变动,触发更新此时间。

    • status time (ctime):文件状态 (例如,属性、权限、大小等) 发生变动,触发更新此时间。

    • access time (atime):文件内容被访问,触发更新此时间。

    指令 touch 仅可设置修改 mtimeatime

  • cp

    该指令用于复制指定内容至指定位置。

    默认情况下,指定内容与复制内容的属性和权限可能不同,因此需要额外注意此指令的操作结果。

  • mv

    该指令既可用于指定文件名或目录名的修改,也可用于指定文件或目录的移动。

  • rm

    该指令用于删除指定文件或目录。

文件查看

  • cat/tac

    两个指令以行为单位,按序输出文件内容,不同点在于前者正序输出,而后者逆序输出。

  • nl

    该指令以行为单位,按照正序输出文件内容,并为各行添加行号,其基本等价于 cat -n

  • more/less

    两个指令可实现翻页式查看文件内容,并支持文件内查找等功能。

  • head/tail

    两个指令以行为单位,截取文件内容若干行作为输出结果,不同点在于前者从前往后截取,而后者从后往前截取。

  • od

    上述指令均用于查看纯文本文件,该指令则用于查看非文本文件。

  • file

    该指令用于判断特定文件的具体类型。

文件搜索

  • which

    该指令用于搜寻特定指令的二进制文件的具体位置。

  • whereis

    该指令用于在若干特定目录内搜寻特定指令的二进制文件、源代码、使用手册的具体位置。

  • locate

    该指令会基于 /var/lib/mlocate 数据库给出特定文件的搜寻结果。

    默认情况下,Linux 系统会每天更新一次 /var/lib/mlocate 数据库,用户也可使用命令 updatedb 手动更新。更新数据库时,系统首先读取 /etc/updatedb.conf 配置文件 (其中可设定若干搜索限制),然后在硬盘内部全局搜索以执行更新操作。

    因为该指令基于数据库存储内容给出搜寻结果,因此它所能支持的功能比较有限。

  • find

    该指令会直接搜索硬盘以给出特定文件的搜寻结果。

    正因其直接搜索硬盘,find 的搜索速度会比较慢,但是却能支持众多强大功能,例如:搜索属于特定用户的文件、搜索具有特定权限的文件、搜索特定文件大小的文件。

文件处理

  • cut

    该指令会以行为单位,截取行内若干字段。

  • grep

    该指令同样以行为单位,搜寻并输出满足特定规则 (尤指正则表达式) 的行。

  • sort

    该指令同样以行为单位,按照某种特定规则排序行数据,并将其输出。

  • uniq

    该指令同样以行为单位,综合重复行信息为一行信息,并输出之。

  • wc

    该指令用于统计特定文件中所含字符数、字数、行数信息。

  • tee

    该指令用以将标准输入流所得内容同时输入至特定文件和标准输入流之中。

  • tr

    该指令用于从特定文件中删除特定字符串,或将特定字符串替换为其他字符串。

  • col/expand

    两个指令常用于替换 tab 键为若干空格键。

  • join

    该指令同样以行为单位,按照某特定字段合并两个文件内容。

  • paste

    较之 join,该指令的功能十分简单,它以行为单位,直接合并两个文件内容。

  • xargs

    在 Linux 系统中,有些指令可以直接接收管道参数,而有些指令则不可用。该指令存在的价值便在于帮助部分指令接收管道参数。

    其常见模式为:xxx | xargs -n 2 commandxargs 每次以两个管道参数作为 command 的实际参数,并执行此指令,直至管道参数使用完。

  • printf

    该指令用于格式化输出指定类似,基本等价于 C 语言中的 printf() 函数。

  • sed

    该指令功能比较强大,它可实现替换行数据、删除行数据、指定行的字符替换等。

    其常见模式为:xxx | sed 'a,bc'sed 接收管线数据,并在管线数据的 a-b 行间执行 c 操作。

  • awk

    该指令适用于以行为单位、行中字段为内容,进行数据处理。

    其常见模式为:awk 'BEGIN{} 条件1{动作1} 条件2{动作2} ... END{}' fileName,首先执行 BEGIN 中操作,随后依次从 fileName 中读取一行数据,并判断是否满足各条件,如果满足,则执行其中动作,否则便不执行任何动作,最后执行 END 中操作。

  • split

    该指令用于将大文件切分为若干小文件。

文件对比

  • diff

    该指令可用于对比两文件间的差异 (以行为单位),同时可将此差异包装为一个 patch 文件(借助于参数 -Naur)。

  • cmp

    该指令以字节为单位,进行两文件间的对比。

  • patch

    该指令可基于 patch 文件更新旧文件或还原新文件。

文件打包/压缩

文件打包与压缩操作往往会同时执行,因此这里仅介绍兼具打包与压缩功能的指令 tar

在指令 tar 中,主要涉及三种压缩方式:gzip/bzip2/xz,三者的压缩性能依次递增,压缩时间亦是依次递增。

  • 打包压缩指令 tar -c[z|j|J]vf tarName fileName
  • 解包解压缩指令 tar -x[z|j|J]vf tarName fileName

基于指令 tar 还可执行一些高级操作,例如:打包某目录的同时忽略特定类型文件、仅解压缩特定文件。

文件备份

  • tar

    该指令可用于备份特定文件或特定目录为一个压缩包。

  • dd

    该指令可从标准输入、设备、文件中读取数据,根据指定格式转换数据,并将其输出至文件、设备、标准输出。

    如果忽略格式转换,该指令便可用于文件备份。

  • cpio

    该指令可将指定数据备份至特定位置。