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
仅可设置修改mtime
和atime
。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 command
,xargs
每次以两个管道参数作为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
该指令可将指定数据备份至特定位置。