Linux命令-文件管理

Linux 英文解释为 Linux is not Unix。

文件管理

cat 打印内容到输出设备上

1
2
3
4
5
6
7
8
9
10
11
12
13
cat [
-A 等价于 -vET
-b 输出行编号(不对空白行编号)
-e 等价于 -vE
-n 输出行编号(空白行编号)
-s 多行空白行替换成一行空白行
-t 等价于 -vT
-u 关闭输出buffer
-v 使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外

-E 每行结尾显示($)
-T 将TAB字符显示^|
] 文件名

chattr 改变文件或目录属性(ext2)

属性共有以下8种模式

  • a: 让文件或目录仅供附加用途
  • b: 不更新文件或目录的最后存取时间
  • c: 将文件或目录压缩后存放
  • d: 将文件或目录排除在倾倒操作之外
  • i: 不得任意更动文件或目录
  • s: 保密性删除文件或目录
  • S: 即时更新文件或目录
  • u: 预防意外删除
1
2
3
4
5
6
chattr [
-R 递归处理
-V 显示指令执行过程
][
+/-/= 开启/关闭/指定设置
] 文件名/目录名

chgrp 改变文件或目录组群

1
2
3
4
5
6
7
8
9
chgrp [
-c 类似-v,仅回报更改的部分
-f 不显示错误信息
-h 只更改连接文件
-R 递归处理
-v 显示执行过程
] 群组名 文件名/目录名
--------------------------------------------------
chgrp --reference=文件名 文件名 // 根据指定文件指定文件

chmod 改变文件调用者权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
chmod [
-c 文件权限确实更改才显示信息
-f 不限时错误信息
-v 显示执行过程
-R 递归处理
][
u|g|o|a 拥有者|拥有组|其他人|全部
][
+/-/= 开启/关闭/指定设置
][
r|w|x 读取|写入|可执行
] 文件名
--------------------------------------------------
chmod 777 文件名
1
2
3
举个🌰:
$ chmod 777 file
$ chmod ug=rwx,o=x file

chown 改变文件拥有者

1
2
3
4
5
6
7
chown [
-c 类似-v,仅回报更改的部分
-f 忽略错误
-h 修复符号连接
-v 显示执行过程
-R 递归处理
] 文件拥有者[:使用组] 文件名或目录名

cksum 检测文件是否被更改(CRC排错检查)

CRC是一种排错检查方式

该指令会返回校验结果供用户核对文件是否正确无误

1
2
3
举个🌰:
$ cksum 文件名
1263453430 78 文件名 // "1263453430"表示校验码,"78"表示字节数

cmp 比较两个文件是否相同

相互比较的两个文件完全一样时,则该指令不会显示任何信息。

预设会标示出第一个不同之处的字符和列数编号。

1
2
3
4
5
6
7
cmp [
-c 显示不一样的地方的字符
-l 标示出所有不一样地方
-s 不显示错误信息
][
-i <字符数目>
] [第一个文件][第二个文件]

diff 比较文件差异

以逐行的方式,比较文本文件的异同处

如果比较目录,会比较目录中相同文件名的文件,不比较其子目录。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
diff [
-a diif预设逐行比较文本文件
-b 不检查空格字符
-B 不检查空白行
-c 显示全部内文, 标出不同之处
-d 使用不同的演算法, 以较小单位做比较
-e 输出格式可用于ed的script文件
-f 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处
-H 比较大文件时,可加快速度
-i 不检查大小写
-q 只显示有无差异,不显示详细信息
-r 递归,比较子目录中的文件
-s 若没有发现任何差异,仍然显示信息
-t 在输出时,将tab字符展开
-T 在每行前面加上tab字符以便对齐
-u 以合并的方式来显示文件内容的不同
-w 忽略全部的空格字符
-y 以并列的方式显示文件的异同之处
][
-<行数> // 指定要显示多少行的文本。此参数必须与-c或-u参数一并使
][
-C <行数> // 与执行"-c-<行数>"指令相同
][
-I <字符或字符串> // 忽略匹配指定字符或字符串的文件差异性
][
-S <文件> // 在比较目录时,从指定的文件开始比较
][
-W <宽度> // 在使用-y参数时,指定栏宽
][
-x <文件或目录> // 不比较选项中所指定的文件或目录
][
-X <文件> // 您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件
][
--left-column // 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容
][
--suppress-common-line // 在使用-y参数时,仅显示不同之处
] 文件或目录1 文件或目录2

diffstat 根据diff的比较结果,显示统计数字

1
2
3
4
5
6
7
diff [
-w 指定输出时栏位的宽度
][
-n <文件名长度> // 指定文件名长度,设置终端显示的长度
][
-p <文件名长度> // 与-n参数相同,但此处的<文件名长度>包括了文件的路径
]
1
2
3
4
5
举个🌰:
$ diff test1 test2 | diffstat #进行比较结果的统计显示

unknown | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)

file 辨别文件类型

1
2
3
4
5
6
7
8
9
10
11
file [
-b 列出辨识结果时,不显示文件名称
-c 详细显示指令执行过程
-L 直接显示符号连接所指向的文件的类别(如果文件是连接的话)
-z 尝试去解读压缩文件的内容
-i 显示MIME类别 // text/plain; charset=utf-8
][
-f <名称文件>
][
-m <魔法数字文件>...
] 文件或目录... // 多个文件之间使用空格分开

find 指定目录下查找文件

不设置任何参数,则find命令将在当前目录下查找子目录与文件

并且将查找到的子目录和文件全部进行显示

Path + Expression // 路径加命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
find 路径 option [
-exec 执行command操作
-ok 与exec相同, 只是操作前要询用户
命令
] {} \;

Expression:
-mount, -xdev : 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
-amin n : 在过去 n 分钟内被读取过
-anewer file : 比文件 file 更晚被读取过的文件
-atime n : 在过去n天内被读取过的文件
-cmin n : 在过去 n 分钟内被修改过
-cnewer file :比文件 file 更新的文件
-ctime n : 在过去n天内被修改过的文件
-empty : 空的文件-gid n or -group name : gid 是 n 或是 group 名称是 name
-ipath p, -path p : 路径名称符合 p 的文件,ipath 会忽略大小写
-name name, -iname name : 文件名称符合 name 的文件。iname 会忽略大小写
-size n : 文件大小 是 n 单位,
b:512 位元组的区块
c:字元数,k:kilo bytes
w:二个位元组。
-type c : 文件类型是 c 的文件。
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 具名贮列
f: 一般文件
l: 符号连结
s: socket
-pid n : process id 是 n 的文件

cut 显示每行从开头算起 num1 到 numn 的文字

1
2
3
4
5
6
7
8
9
10
11
12
13
cut -b 数字1,数字n [-n] [file ...]
cut -c 数字1,数字n [file ...]
cut -f 数字1,数字n [-s] [-d 分隔符] [file ...]

-b: 字节为单位进行分割
-c: 字符为单位进行分割
-f: 自定义分隔符,默认为制表符
-d 自定义分隔符

1,n 显示第1个和第n个
1- 第1个字节、字符、字段到结尾
1-10 从第1个字节、字符、字段到第10个(包括10在内)字节、字符、字段
-10 从第1个字节、字符、字段到第10个(包括10在内)字节、字符、字段
1
2
3
4
5
6
7
举个🌰:
$ cut -f2 -d";" test2.txt
No;Name;Mark;Percent
01;tom;69;91
---------------------
Name
tom

ln 建立同步链接

软链接:

  • 以路径的形式存在。类似于Windows操作系统中的快捷方式
  • 可以跨文件系统
  • 可以对一个不存在的文件名进行链接
  • 可以对目录进行链接

硬链接:

  • 以文件副本的形式存在。但不占用实际空间
  • 不允许给目录创建硬链接
  • 硬链接只有在同一个文件系统中才能创建
1
2
3
4
5
6
7
8
9
ln [
-b 删除, 覆盖以前的链接
-d 允许超级用户制作目录和硬链接
-f 强制执行
-i 交互模式, 文件存在交互提示
-n 符号链接视为一般目录
-s 软链接(符号链接)
-v 显示处理过程
] 源文件或目录 目标文件或目录
1
2
举个🌰:
$ ln -s s.txt t.txt

less 随意浏览文件

less 在查看之前不会加载整个文件

less使用

locate 用于查找文件或目录

速度比find -name快, 只是读取数据库文件/var/lib/mlocate/mlocate.db

linux会自动创建这个数据库,且每天刷新一次

为了避免查询到文件已经删除或刚刚创建, 在使用命令前先updatedb手动更新数据库

1
2
3
4
/usr/bin/updatedb				主要用来更新数据库,通过crontab自动完成的
/usr/bin/locate 查询文件位置
/etc/updatedb.conf updatedb的配置文件
/var/lib/mlocate/mlocate.db 存放文件信息的文件
1
2
3
4
5
6
7
8
locate [
-c 只输出找到的数量
-d 指定dbpath指定的数据库
-i 忽略大小写
-q 不显示任何错误讯息
-r 使用基本正则表达式
-n 显示条数
] 文件或目录或正则

updatedb 创建或更新locate

1
2
3
4
5
updatedb [
-o<文件> 忽略默认的数据库文件, 使用指定locate数据库文件
-U<目录> 指定目录的locate数据库
-v 查看执行过程
]

lsatte 显示文件属性

1
2
3
4
5
lsattr [
-a 显示所有文件和目录
-d 显示目录名称, 并非其内容
-R 递归处理, 目录及目录下文件
] 文件或目录...

mktemp 建立暂存文件或文件夹

创建临时文件,但不会使用默认的umask值(管理权限的)
将文件的读写权限分配给文件属主
[ 文件名参数 ] 文件名参数必须是以 “ 自订名称 .XXXXXX” 的格式

1
2
3
4
5
mktemp [
-d 创建文件夹
-u 暂存文件会在mktemp结束前先行删除
-q 执行发生错误, 不显示任何信息
] 临时文件.XXX // XXX必须3个以上
1
2
3
举个🌰:
$ mktemp tmp.XXXX // 生成临时文件
file test testfile testfile1 tmp.3847 // 生成了tmp.3847

more 逐页阅读

最基本功能空格下一页, 按b返回

1
2
3
4
5
6
7
8
9
10
11
12
13
more [
-d 显示帮助,而不是响铃🔔
-f 统计逻辑行数
-c 不滚屏, 显示文本并清除行尾
-s 连续多行空白行,代替为一行空白
-u 不显示下划线
][
-num 一次显示行数
][
+/查找字符串 从查找的字符串开始显示
][
+行数 从第几行开始
] 文件
1
2
3
4
5
6
7
8
9
常用操作命令:
Enter: 向下n行(默认1行)
Ctrl+F: 向下滚动一屏
空格: 向下滚动一屏
Ctrl+B: 向上滚动一屏
=: 显示当前行的行号
v: 调用vi编辑器
!命令: 调用shell
q: 退出

mv 移动/改名 文件和目录

1
2
3
4
mv [
-i 如果文件存在会提示是否覆盖
-f 覆盖已有的文件不进行任何提示
] 源文件或目录 目标文件或目录

od 文件内容按照八进制显示

默认第一列显示地址, 一些有空洞的文件可以通过od命令来查看空洞的位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
od[
-A<字码基数> 指定地址(文件offset)基数打印
d:十进制;o:八进制;x:十六进制;n:不打印位移值
][
-t<输出格式> 输出文本的格式
c:ASCII字符或反斜杠序列;
d:有符号的十进制
f:浮点数
o:八进制
u: 无符号十进制
x: 十六进制
][
-N<字符数目> 到设置的字符数目为止
] 文件
1
2
3
4
5
6
举个🌰:
$ od -Ax file.txt

0000000 005061 005062 005063 005064 005065 005066 005067 005070
0000010 005071 005060 031462 032012 033065 000012
000001b

paste 合并文件的列

把每个文件以列对列的方式,一列列地加以合并

1
2
3
4
5
paste [
-s 串列进行而非平行处理(默认是按行平行, 去除就是按照[文件数列])
][
-d <间隔字符> 用指定的间隔字符取代tab字符
] 文件...
1
2
3
4
5
举个🌰:
$ paste -d '|' -s file1.txt file2.txt

1|2|3|4|5|6|7|8|9|0|23|456
1|2|4|5|6|777|7|8|999|0

rm 生成文件或目录

1
2
3
4
5
6
rm [
-i 删除前询问
-f 无需确认直接删除(即使文件设置为只读)
-r 递归删除(目录)
-d 删除目录
] 文件或目录(目录存在内容需要-r/d)

split 分割文件(按大小分割)

1
2
3
4
5
6
7
split [
-<行数> 指定每多少行切成一个小文件
][
-b<字节> 指定每多少字节切割成多少小文件
][
-C<字节> 与-b相同, 切割时会维持每行的完整性
] 切割文件 输出文件名
1
2
3
4
举个🌰:
$ split -5 file.txt file_

file_aa file_ab file_ac file_.....

csplit 分隔文件(按特点分割)

csplit命令是split的一个变体,split只能够根据文件大小行数来分割,但csplit能够根据文件本身特点来分割文件。csplit命令用于将一个大文件分割成小的碎片,并且将分割后的每个碎片保存成一个文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
csplit [
-s 静默, 不答应任何信息
-n<数量> 指定分隔后的文件后缀数字个数
-f<前缀> 指定文件分隔文件前缀
-b<后缀> 指定文件分隔文件后缀 类似c的参数格式 "%02d.log"
] 文件 规范

规范:
/[正则]/ 包含模式的行成为当前行
%匹配% 包含模式的行成为当前行 不为段创建一个文件
{数量} 如果紧跟一个模式, 表示使用指定次数的模式
+数量 提前几行
-数量 退后几行
1
2
举个🌰:
csplit ff.txt /\[[A_Z]*\]/ # 好像csplit正则很多不匹配 .;+无法使用

tee 读取标准输入输出成文件

1
2
3
4
tee [
-a 追加, 而非覆盖到源文件
-i 忽略中断信号
] 文件...

tmpwatch 删除暂存文件

可删除不必要的暂存文件,您可以设置文件超期时间,单位以小时计算

1
2
3
4
5
6
7
tmpwatch [
-a 删除任何类型
-f 强制删除文件或目录
-v 显示执行过程
-q 不显示执行过程
-test 只是做测试
] 超时时间 文件目录
1
2
举个🌰:
$ tmpwatch 24 /tmp/ // 删除/tmp目录中超过一天未使用(未访问)的文件

touch 修改文件或者目录的时间属性

1
2
3
4
5
6
7
touch [
-a 修改读取时间
-m 修改修改时间
-c 文档不存在, 不建立新的档案
][
-r<文件|目录> 参考文档的时间
]文件或目录...

umask 获取当前权限掩码

1
2
3
umask [
-S
]
1
2
3
4
5
6
举个🌰:
$ umask -S
u=rwx,g=rx,o=rx

$umask
022 // 777-022 = 755

which 查找文件

which指令会在环境变量$PATH设置的目录里查找符合条件的文件

1
2
3
4
5
which [
-n<文件名长度>  指定文件名长度, 必须大于或等于所有文件中最长的文件名
-p<文件名长度> 与-n参数相同,但此处的<文件名长度>包括了文件的路径
-w<宽度> 输出栏位的宽度
] 文件...

cp 文件目录拷贝

1
2
3
4
5
6
7
8
cp [
-a 通常复制目录使用, 保留链接、文件属性、文件下内容, 相当于dpR
-d 保留链接🔗
-f 覆盖不提示
-i 与f相反, 需要提示
-p 修改时间和访问权限也复制到新文件中
-r 递归复制
] source dest

whereis 查找文件

特定目录中查找符合条件的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
whereis [
-b 只查找二进制文件
-f 不显示文件前面的路径
-m 只查找说明文件
-s 只查找源码文件
-u 查找不包含指定类型文件
][
-B <目录> 设置目录查询二进制
][
-M <目录> 设置目录查询说明文件
][
-S <目录> 设置目录查询源码文件
] 文件...
 上一篇

hexo