linux-文件操作
在 Linux 系统中,文件操作与管理是日常使用和系统管理的重要组成部分。下面将详细介绍文件的复制、移动、链接创建,以及文件查找、文本处理、排序、权限管理等相关知识。
一、文件的复制
在 Linux 里,cp 命令可用于复制文件或目录,生成其副本。其语法结构为:cp [选项] 源文件或目录 目标文件或目录。以下是一些常用选项:
- -r:递归复制整个目录及其子目录。若要复制一个包含子目录的文件夹,就需要使用该选项。
- -i:在覆盖目标文件之前会提醒用户,避免误操作覆盖重要文件。
- -f:强制复制,会忽略错误继续复制,即便遇到一些小问题也会尽力完成复制操作。
二、文件的移动
mv 命令用于移动文件或目录,语法结构为:mv [选项] 源文件或目录 目标文件或目录。常用选项 -i 为交互式操作,当目标文件存在时,会提醒用户是否覆盖。
此外,mv 还有其他使用方式。可以使用 mv [多个]文件 目录,如果文件不在目标目录中,就会被移入该文件夹;也能使用 mv [多个]目录 目标目录,实现目录的移动。
三、创建链接文件
ln 命令可以为文件创建链接文件,它不会生成副本,而是与原文件相关联。其语法结构是:ln [选项] 源文件 目标文件。常用选项 -s 用于创建软链接文件。
硬链接与软链接的区别
- 硬链接:链接文件和源文件具有相同的索引号,链接让它们有不同的名称。硬链接不能跨文件系统,并且不能为目录创建硬链接。
- 软链接:只是指向另一个文件名,包含的是另外一个文件的路径名的文本指针。软链接可以跨文件系统,也可以为目录创建软链接。
目录的链接方面,子目录数一开始创建默认是 2(. 和 ..)。可以通过 ls -dl 来展示详细的信息,-d 选项能让目录像文件一样显示。
文件名替换功能
在 Linux 中,可以使用特定字符去匹配字符(正则表达式):
- ?:匹配单个字符。
- *:匹配 0 到 n 个字符。
- [字符列表]:匹配文件名中任意在字符列表中的字符。
- [!字符列表]:匹配文件名中任意不在字符列表中的字符。
系统会先处理通配符,再去匹配(文件名扩展),命令本身并不知道通配符的存在。
四、文件查找和文本处理
查找文件
find 命令可在层次目录中根据文件名或文件属性名去定位文件,还能对定位的文件执行删除、打印等操作。其语法格式为:find [目录] [条件] [动作]。例如,find ./ -name filea -print 会在当前目录中通过名字查找 filea,找到后将其打印出来。
常见选项
- -name:根据文件名查找,使用时可以结合通配符,但要使用双引号包起来。
- -type:根据文件类型查找,常见的文件类型有- b(块设备)、- c(字符特殊设备)、- d(目录文件)、- f(普通文件)。
- 可以使用操作符实现多个条件的查找: - -a:与操作(默认)。
- -o:或操作。
- !:非操作。
- ():逻辑组,指定哪些条件优先评估。
 
- -size +-n:根据文件大小(块)查找。
- -mtime +-n:根据最后修改的时间(天)查找。
常见动作
- -exec 命令名 {} \;:把找到的文件当做参数去执行新的命令。
- -ok 命令名 {} \;:同上,但为交互式操作,执行前会询问用户是否继续。
 也可以使用- +去替换- \;。
文本查找
grep 命令用于在一个或多个文件中查找满足特定格式的行。其语法格式为:grep [选项] 搜索的字符串 文件名,输出的是包含搜索字符串的行。
常见选项
- -i:忽略大小写。
- -n:显示匹配的行号。
- -v:显示不匹配的行。
- -w:匹配整个字符串。
- -c:显示匹配行的数量。
- -r:递归搜索。
字段提取
cut 命令可从文件中取出指定的字段或列,语法格式为:cut 选项 文件。
常见选项
- -b:指定字节,如- 1,3,5或- 1 - 3,5。
- -c:指定字符,如- 1 - 4表示输出第一个到第四个字符。
- -d:指定分隔符,默认是制表符。如果分隔符有特殊意义或为空格,需要用双引号括起来,例如- cut -d " " -f 1 phones。
- -f:指定字段的位置。
cut 命令的输出会显示在标准输出中。
文件排序
sort 命令用于对文件进行排序,语法格式为:sort [选项] 文件。
常见选项
- -n:以数值来排序,包含负数和小数。
- -r:逆序排序。
- -o:输出到指定的文件。
- -k:指定排序的依据字段,如- 1,2表示先用第一个字段排序,若相同再用第二个字段排序。
五、文件权限管理
文件权限的含义
文件
- 读(r):可以读取文件内容。
- 写(w):可以修改文件内容,也能删除文件。
- 执行(x):可以将文件作为程序文件执行。
目录
- 读(r):可以列出目录内容。
- 写(w):可以在目录内部创建、删除、重命名文件和子目录。
- 执行(x):可以进入该目录。
umask 掩码
umask 掩码用于设置哪些权限不会被赋予新文件。文件的默认权限是 666,目录的默认权限是 777。例如,umask 022 会将初始权限设置为 777 - 022(目录)和 666 - 022(文件)。如果 umask 是 4 位,第一位表示特殊权限。
修改权限
chmod 命令用于修改文件权限,有两种方式:
- 字符串方式:字符串包括三个部分,u(用户)、g(组)、o(其他)、a(所有);+、-、=;r、w、x或-。例如,chmod u+x file表示给文件的所有者添加执行权限。
- 三位八进制方式:例如,chmod 755 file。
六、Linux 文件组织方式
Linux 基于索引节点来组织文件,索引节点的最大数量在初始化的时候就确定了。删除一个文件会释放其占用的索引节点。目录包含索引节点号,通过索引节点号可以找到对应的索引节点,而索引节点指向文件的数据。
