文件管理相关命令
Linux 命令学习-文件管理相关命令
@(笔记-初稿)[Linux]
[TOC]
记录我对于Linux的学习,文件相关的命令:
ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数
创建文件的相关命令
touch 常用于将每个文件的访问和修改时间更新为当前时间,不过当直接跟一个不存在的文件名时,会创建一个空文件,大小为0
1 | touch tody.txt |
>
通常用于重定向一个命令的输出到一个新文件中,如果之前没有命令,则会创建一个新文件,大小为0,比如可以用echo,print等命令结合>
将输出重定向到一个新文件
1 | ll dody.txt |
ps:如果你不是想创建新的,而是想追加内容到已有的文件,那么可以使用
>>
vi/vim Vi是Unix及Linux系统下标准的编辑器,Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。可以使用vi/vim创建新文件。
1 | #以下命令打开一个文件,需要保存,否则修改不生效 |
查看文件内容的相关命令
cat 最常用的方式是将文件一次性全部输出到标准输出,或者将几个文件合并为一个文件
cat [-AbeEnstTuv] [–help] [–version] fileName
1 | cat b.txt |
more 与cat类似,不过是以分页的形式输出,按空格可以向前,按b可以退后,
格式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames…]
常用参数:
-num 一次显示的行数
+num 从第 num 行开始显示
-s 当遇到有连续两行以上的空白行,就代换为一行的空白行
1 | more b.txt |
less 与 more 类似,但使用 less 可以随意浏览文件,可以使用方向键控制方向,而且 less 在查看之前不会加载整个文件。
格式:less [options] filename
常用参数:
-e 当文件显示结束后,自动离开
-f 强迫打开特殊文件,例如外围设备代号、目录和二进制文件
-i 忽略搜索时的大小写
-m 显示类似 more 命令的百分比
-N 显示每行的行号
-s 显示连续空行为一行
1 | #显示行号 |
ps: more 与less的不同
- less提供了更丰富的控制方式,比如可以按键盘上下方向键显示上下内容,more不能通过上下方向键控制显示
- less不必读整个文件,加载速度会比more更快
- less退出后shell不会留下刚显示的内容,而more退出后会在shell上留下刚显示的内容
head 查看文件的开头部分的内容
格式:head [options] filename
常用参数:
-q 隐藏文件名
-v 显示文件名
-c<数目> 显示的字节数。
-n<行数> 显示的行数,默认为 10,即显示 10 行的内容
1 | head b.txt |
tail 查看文件的最后的内容,常用于查阅正在改变的日志文件
格式:tail [options] filename
-f 循环读取 常用于查阅正在改变的日志文件
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
1 | tail -f xxx.log |
删除移动复制文件等相关命令
rm 用于删除一个文件或者目录
格式:rm [options] name…
常用参数:
- -i 删除前逐一询问确认。
- -f 强制删除即使原档案属性设为唯读,亦直接删除,无需逐一确认。
- -r 递归地移除目录及它们的内容
- -d 删除空目录
1 | rm tody.txt |
mv 可以将文件或目录改名、或将文件或目录移入其它位置
格式:
mv [选项]… 源文件 目标文件
mv [选项]… 源文件… 目录
常用命令:
- -i 覆盖前提示
- -f 覆盖前永不提示
1 | # 重命名 |
ps: mv 源目录名 目标目录名 目标目录已存在,将源目录移动到目标目录;目标目录不存在则将源目录改名
cp 主要用于复制文件或目录
格式:
cp [选项]… 源文件 目标文件
cp [选项]… 源文件… 目录
常用命令:
- -i 覆盖前提示
- -f 覆盖前永不提示
- -r 若给出的源文件是一个目录文件,此时递归复制目录及它们的内容
- a 此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于dpr参数组合
- -d 复制时保留链接
- -p 除复制文件的内容外,还把修改时间和访问权限也复制到新文件中。
1 | cp -r test/ newtest |
file 用于辨识文件类型
格式:file [ -bcnsvzL ] [ -f 命名文件 ] [ -m 幻数文件 ] file …
常用命令:
- -b 列出辨识结果时,不显示文件名称。
- -c 检查时打印输出幻数文件的解析结果.常与 -m 一起使用,用来在安装幻数文件之前调试它
- -f<名称文件> 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称。
- -L 直接显示符号连接所指向的文件的类别。
- -m<幻数文件> 指定魔法数字文件。
- -v 显示版本信息。
- -z 尝试去解读压缩文件的内容。
- [文件或目录…] 要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
1 | file add.c |
修改文件属性等命令
touch 于修改文件或者目录的时间属性。比如访问时间、修改时间。
格式:touch [选项]… 文件列表…
- -a 仅更改文件访问时间
- -c,–no-create 假如目的档案不存在,不会建立新的档案
- -d, --date=字符串 使用指定字符串所表示的时间而非当前时间
- -f (被忽略的选项)
- -h, --no-dereference 影响所有符号链接而非被引用的文件(仅在能够更改符号链接的时间戳的系统上有用)
- -m 改变档案的修改时间记录。
- r–reference=文件 使用指定文件的时间记录
- -t STAMP 使用 [[CC]YY]MMDDhhmm[.ss] 代替当前时间
- –time=关键字 改变文件的指定时间:若关键字是 access,atime 或 use,则等同于 -a;若关键字是modify 或 mtime,则等同于 -m
1 | ls -l 查看最后时间 |
chown 将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。
ps:这个命令只有root才能执行。
格式:chown [选项]… [所有者][:[组]] 文件…
chown [选项]… --reference=参考文件 文件…
- -c, --changes 显示更改的部分的信息
- -f, --silent, --quiet 忽略错误信息
- –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
- -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
- –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
- –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
- -R : 处理指定目录以及其子目录下的所有文件
- -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历
- -L 遍历每一个遇到的指向目录的符号链接
- -P 不遍历任何符号链接(默认)
ps:如果没有指定所有者,则不会更改所有者信息。若所属组若没有指定也不会对其更改,但当加上’:’ 时 GROUP 会更改为指定所有者的主要组。所有者和所属组可以是数字或名称。
1 | 递归修改文件夹的组和所有者 |
chgrp 与chown命令类似,不过只用于变更文件或目录的所属群组。
格式: chgrp [选项列表]… 组 文件…
chgrp [选项列表]… --reference=参考文件 文件…
- -c, --changes 显示更改的部分的信息
- -f, --silent, --quiet 忽略错误信息
- –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
- -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
- –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
- –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
- -R : 处理指定目录以及其子目录下的所有文件
- -H 如果命令行参数是一个指向目录的符号链接,则对其进行遍历
- -L 遍历每一个遇到的指向目录的符号链接
- -P 不遍历任何符号链接(默认)
1 | 递归修改文件夹的组 |
chmod
格式:chmod [选项]… 模式[,模式]… 文件列表…
chmod [选项]… 八进制模式字符串 文件列表…
chmod [选项]… --reference=参考文件 文件列表…
- -c, --changes 显示更改的部分的信息
- -f, --silent, --quiet 忽略错误信息
- –dereference 影响每个符号链接的原始引用文件(这是默认行为),而非符号链接本身
- -h, --no-dereference 只影响符号链接,而非被引用的任何文件(仅当系统支持更改符号链接的所有者时,该选项才有用)
- –from=当前所有者:当前所属组 只当每个文件的所有者和组符合选项所指定时才更改所有者和组。其中一个可以省略,这时已省略的属性就不需要符合原有的属性
- –reference=参考文件 使用指定参考文件的所有者和所属组信息,而非手工指定 所有者:组 的值
- -R : 处理指定目录以及其子目录下的所有文件
其中模式(mode)的格式如下:[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=][0-7]+
其中:
- u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
- 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
- r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
- 数字也可以表示权限,r=4,w=2,x=1。所以可读可写是rw=4+2=6
1 | 设置一个文件的权限有多种写法,比如将file.txt设置为自己可读可写,组可读可写,其他人可读可写 |
ps: chown、chgrp与chmod都是由同样的程序员编写的,所以它们的参数与使用方式都很类似
查找文件
find 用来在指定目录下查找文件
格式:find [path…] [expression]
- path find之后直接是要查找的路径,如果path是空的,则搜索当前路径和其子目录。
- expression 第一个 - ( ) , ! 之后的是 expression,如果expression 是空字串则使用 -print 为预设 expression,表达式有三部分
- 选项
- 测试
- 动作
常用的expression:
- 选项:
- -daystart 从当日起始时开始而不是从24小时之前,计算时间(for -amin, -atime,-cmin, -ctime, -mmin, and -mtime)
- -depth 先处理目录的内容再处理目录本身
- -maxdepth levels 进入命令行参数指定的目录下层目录时,最深不超过levels
- -mindepth levels 不在levels(一个非负整数)层之内执行任何测试和动作
- -mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
- 测试:
- +n,-n, n 比n大,比n小,正好是n
- -amin n : 在过去 n 分钟内被读取过
- -anewer file : 比文件 file 更晚被读取过的文件
- -atime n : 在过去n天内被读取过的文件
- -cmin n : 在过去 n 分钟内被修改过
- -cnewer file :比文件 file 更新的文件
- -ctime n : 在过去n天内被修改过的文件
- -empty : 空的文件
- -name pattern 基本的文件名(将路径去掉了前面的目录)与shell模式pattern相匹配
- -path pattern 文件名与shell模式pattern相匹配
- -type c c代表类型,d : 目录,f: 一般文件,l: 符号连结,等等。
- 动作:
- -exec command ;执行 command;如果命令返回状态值0,那么 exec 返回true。所有 find其余的命令行参数将作为提供给命令的参数,直到遇到一个由
;' 组成的参数为止。命令的参数中,字符串
{}’ 将以正在处理的文件名替换。所有的{}'都会被替换,不仅是在单独的一个参数中.有些版本的 find不是这样做的。 这些参数可能需要用
' 来escape 或者用括号括住,防止它们被shell展开。命令是从起始目录执行的 - -ok command ; 类似 -exec 但是会先向用户询问 (在标准输入); 如果回应不是以
y' 或
Y’ 起始则不会运行 command 而是返回false。
- -exec command ;执行 command;如果命令返回状态值0,那么 exec 返回true。所有 find其余的命令行参数将作为提供给命令的参数,直到遇到一个由
1 | 查找当前目录及子目录下以.s结尾的文件 |
对比文件
diff 以逐行的方式,比较文本文件的异同处
格式: diff [选项] 源文件 目标文件
diff选项有很多,可以访问如下路径查看diff中文文档
有两个文件,a.txt如下
1 | a |
b.txt如下:
1 | a |
当使用diff a.txt b.txt
时,输出如下结果:
1 | 2,3d1 |
现在让我们来解释一下该输出的结果
首先介绍一些概念:
- 变动位置 由三部分组成:行号[adc]行号
- 变动方式 adc 分别表示“增加”,“删除”,“内容改变”
- 在adc之前的数字表示源文件中的行,
- 之后的数字表示目标文件中的行
- < > 分别表示源文件和目标文件
- — 用来分割两个文件
所以
1 | 2,3d1 #源文件中删除第2,3行 |
cmp 按字节比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有所差异,预设会标示出第一个不同之处的字符和列数编号
格式: cmp [选项]… 文件1 文件2
- -c或–print-chars 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。
- -i<字符数目>或–ignore-initial=<字符数目> 指定一个数目。
- -l或–verbose 标示出所有不一样的地方。
- -s或–quiet或–silent 不显示错误信息。
- -v或–version 显示版本信息。
- –help 在线帮助。
1 | cmp aa.txt bb.txt |
分割文件
split 用于将一个文件分割成数个。
格式:split [OPTION] [INPUT [PREFIX]]
参数
- -<行数> 或 -l num : 指定每多少行切成一个小文件
- -b<字节> : 指定每多少字节切成一个小文件,可以使用后缀:b=512字节,k=1K,m=1 Meg
- -C<字节> : 与参数"-b"相似,但是在切割时将尽量维持每行的完整性
[PREFIX] : 设置切割后文件的前置文件名, split会自动在前置文件名后再加上编号
ps: 该指令将大文件分割成较小的文件,在默认情况下将按照每1000行切割成一个小文件。
如果没有设置[PREFIX]则默认以"x"开头,
如果没有指定INPUT,或INPUT是-,就从标准输入读取数据.
1 | split -6 a.c |
csplit 用于将文件依照指定的范本样式分割
格式:csplit [OPTION]… FILE PATTERN…
选项:
- -b<输出格式>或–suffix-format=<输出格式>:预设的输出格式其文件名称为xx00,xx01等,用户可以通过改变<输出格式>来改变输出的文件名;
- -f<输出字首字符串>或–prefix=<输出字首字符串>:预设的输出字首字符串其文件名为xx00,xx01等,如果制定输出字首字符串为“hello”,则输出的文件名称会变成hello00,hello、01…
- -k或–keep-files:保留文件,就算发生错误或中断执行,与不能删除已经输出保存的文件;
- -n<输出文件名位数>或–digits=<输出文件名位数>:预设的输出文件名位数其文件名称为xx00,xx01…如果用户指定输出文件名位数为“3”,则输出的文件名称会变成xx000,xx001等;
- -q或-s或–quiet或——silent:不显示指令执行过程;
- -z或–elide-empty-files:删除长度为0 Byte文件。
格式:
- /[正则表达式]/ 创建从当前行开始直到(但不包含)包含指定模式的那一行的段的文件。
- INTEGER 创建从当前行开始直到(但不包含)指定行
- {*} 表示根据匹配重复执行分割,直到文件尾停止,使用{整数}的形式指定分割执行的次数。
- %[正则表达式]% 使包含指定模式的行成为当前行,但不为段创建一个文件。
1 |
|
统计文件中信息
wc 用于计算字数,如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。
格式: wc [选项]… [文件列表]
选项:
- -c, --bytes 输出字节统计数
- -m, --chars 输出字符统计数
- -l, --lines 输出换行符统计数
- -w, --words 输出单词统计数
1 |
|
文本排序
sort 用于将文本文件内容加以排序。它以行为单位来排序。
格式:[OPTION]… [FILE]…
常用选项:
- -b 忽略每行前面开始出的空格字符。
- -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
- -f 排序时,将小写字母视为大写字母。
- -g 按照通常的数值进行比较,,暗含-b
- -i 排序时,只考虑[\040-\0176]字符。
- -m 将几个排序好的文件进行合并。
- -M 将前面3个字母依照月份的缩写进行排序。
- -n 依照字符串的数值的大小排序,暗含-b
- -u 意味着是唯一的(unique),输出的结果是去完重了的。
- -o<输出文件> 将排序后的结果存入指定的文件。
- -r 以相反的顺序来排序。
- -t<分隔字符> 指定排序时所用的栏位分隔字符。
- -k POS1[,POS2] 从关键字POS1开始,到POS2结束. 字段数和字符偏移量都从1开始计数(与+POS1选项比较)
- +POS1 [-POS2] 从关键字POS1开始,到POS2之前结束(快过时了) 字段数和字符偏移量都从零开始计数(与-k选项比较)
1 | cat testsort.txt |
uniq 用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用
选项:uniq [选项]… [输入 [输出]]
常用选项:
- -c或–count 在每列旁边显示该行重复出现的次数。
- -d或–repeated 仅显示重复出现的行列。
- -D 显示所有重复的行
- -f, --skip-fields=N 比较时跳过前 N 个域、
- –group[=METHOD] 显示所有行,用一个空行分隔每一组 METHOD={separate(default),prepend, append, both}
- -i, --ignore-case 比较时忽略大小写
- -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
- -u或–unique 只显示不重复的行。
- -w, --check-chars=N 对每行第 N 个字符以后的内容不作比较
- [输入] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
- [输出] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。
域指一个由空字符(通常是空格和/或制表符)和紧随的非空字符组成的序列。同时使用跳过域和跳过字符选项时,先跳过域再跳过字符。
ps:uniq只对相邻的重复行进行处理,所以需要提前使用sort进行排序。
1 | cat testuniq.txt |
文件内容查找
grep 命令用于查找文件里符合条件的字符串,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
grep 有两个变种变种,egrep 和 fgrep 。 Egrep 与 grep -E 相同。 Fgrep 与 grep -F 相同。
格式:grep [options] PATTERN [FILE…]
常用选项:
- -a 或 --text : 不要忽略二进制的数据。
- -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b 或 --byte-offset : 在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c 或 --count : 计算符合样式的列数。
- -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
- -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
- -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
- -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
- -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i 或 --ignore-case : 忽略字符大小写的差别。
- -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
- -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
- -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
- -o 或 --only-matching : 只显示匹配PATTERN 部分。
- -q 或 --quiet或–silent : 不显示任何信息。
- -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
- -s 或 --no-messages : 不显示错误信息。
- -v 或 --revert-match : 显示不包含匹配文本的所有行。
- -V 或 --version : 显示版本信息。
- -w 或 --word-regexp : 只显示全字符合的列。
- -x --line-regexp : 只显示全列符合的列。
- -y : 此参数的效果和指定"-i"参数相同。
1 | grep match_pattern file_name # 在文件中搜索一个单词 |