文件管理
- 文件传输
ftp
用 来设置文件系统相关功能scp
加密的方式在本地主机和远程主机之间复制文件
- 文件处理
touch
创建新的空文件rename
用字符串替换的方式批量改变文件名dirname
去除文件名中的非目录部分ln
用来为文件创建连接cat
连接文件并打印到标准输出设备上
- 文件查找和比较
diff
比较给定的两个文件的不同which
查找并显示给定命令的绝对路径find
在指定目录下查找文件whereis
查找二进制程序、代码等相关文件路径
- 文件内容查看
tail
在屏幕上显示指定文件的末尾若干行head
在屏幕上显示指定文件的开头若干行less
分屏上下范爷浏览文件内容more
显示文件内容,每次显示一屏cut
用来显示行的指定部分,删除文件中的指定字段cksum
用于检查文件货数据流校验和
- 文件编辑
vi
功能强大的纯文本编辑器sed
自动编辑文件,简化对文件的反复操作
- 文件权限属性设置
chmod
用来变更文件或目录的权限chown
用来变更文件或目录的拥有者或所属群组stat
用于显示文件的状态信息file
用来探测给定文件的类型
- 文件过滤分隔与合并
grep
强大的文本搜索工具look
显示文件中以指定字符串开头的任意行tac
将文件已行为单位的反序输出sort
将文件进行排序并输出
- 文件压缩与解压
tar
Linux 下的归档使用工具,用于打包和备份gzip
用于压缩文件gunzip
用于解压缩文件zip
可以用来解压缩文件unzip
用于解压缩由 zip 命令压缩的压缩包
- 文件备份和恢复
dd
转换和复制文件
文件传输
scp
scp(secure copy)用来进行文件传输。也可以用来传输目录。也有更高级的 sftp
命令。
# 本地复制远程文件
# scp <remote-address> <local-address>
scp username@hostname:/usr/test/test.tar.gz /temp/test.tar.gz
# 远程复制本地文件
# scp <local-address> <remote-address>
scp /temp/test.tar.gz username@hostname:/usr/test/test.tar.gz
# 本地复制远程目录
# scp -r <remote-address> <loacal-address>
scp -r username@hostname:/usr/test/test.tar.gz /temp/test.tar.gz
# 远程目录复制至本地目录
# scp -r <local-address> <remote-address>
scp -r /temp/test.tar.gz username@hostname:/usr/test/test.tar.gz
# 本地复制远程文件到指定目录
# scp <remote-address> <local-address>
scp username@hostname:/usr/test/test.tar.gz /temp/test/
# 远程复制到本地文件到指定目录
# scp -r <local-address> <remote-address>
scp /temp/test.tar.gz username@hostname:/usr/test/test/tar.gz
文件处理
ln
ln
命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接。
使用 -s
选项,则源文件可以是文件或目录。创建硬链接时,则源文件参数只能是文件。
# 将当前目录的 afile 链接到当前目录下的文件 bfile
ln afile bfile
# 对源文件 afile 建立与 bfile 的符号连接,而非硬连接
ln -s afile bfile
Linux 具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目 录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。
文件链接有两种形式,即硬链接和符号链接。
硬链接
建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如上述示例所示的 m2.c
文件就在目录 mub1
和 liu
中都建立了目录项。
创建硬链接后,己经存在的文件的 I 节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为 l
。
在默认情况下,ln
命令创建硬链接。ln
命令会增加链接数,rm
命令会减少链接数。一个文件除非链接数为 0
,否则不会从文件系统中被物理地删除。
对硬链接有如下限制:
- 不能对目录文件做硬链接。
- 不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
符号链接
符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。
cat
cat
命令用于将文本内容显示到终端。
最常用,注意,如果文件很大的话,cat
命令的输出结果会疯狂在终端上输出,可以多按几次 ctrl + c
终止
# 查看文件大小
du -h file
# 查看文件内容
cat file
文件查找和比较
diff
diff 命令用来比较两个文件是否的差异。当然,在 ide 中都提供了这个功能,diff 只是命令行下的原始折衷。对了,diff 和 patch 还是一些平台源码的打补丁方式,你要是不用,就 pass 吧。
which
which 寻找可执行文件
which ifconfig
find
find
命令用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find
命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
# 列出当前目录及子目录下所有文件和文件夹
find .
# 在 /home 目录下查找以 .txt 结尾的文件名
find /home -name "*.txt"
# 查找用户遗留的文件和目录
find / -name ftpusername
# 任意字符以 wd 结尾
find /etc -regex .*wd
# 找到某个文件多久以前创建的(8 小时前更新)
find /etc/ -atime 8
根据文件类型进行搜索
find . type <类型参数>
类型参数列表:
f
:普通文件l
:符号连接d
:目录c
:字符设备b
:块设备s
:套接字p
:Fifo
基于目录深度搜索:
# 向下最大深度限制为 3
find . -maxdepth 3 -type f
# 搜索出深度距离当前目录至少 2 个子目录的所有文件
find . mindepth 2 -type f
文件查看
tail
tail
命令用于查看文件结尾
# 查看文件 demo 的结尾
tail demo
# 查看文件 demo 最后三行
tail -3 demo
大多数做服务端开发的同学,都了解这么命令。比如,查看 Nginx 的滚动日志。
# 跟踪文件变化
# 常用参数 -f 文件内容更新后,显示信息同步更新
tail -f access.log
用 ctrl + c
退出跟踪文件变化。
tail
命令可以静态的查看某个文件的最后 n 行,与之对应的,head
命令查看文件头 n 行。但 head 没有滚动功能,就像尾巴是往外长的,不会反着往里长。
tail -n100 access.log
head -n100 access.log
head
head
命令用于查看文件开头。
# 输出前 100 行,再通过 pipe,输出最后一行
head -100 README.md | tail -1
less
既然 cat 有这个问题,针对比较大的文件,我们就可以使用 less 命令打开某个文件。 类似 vim,less 可以在输入/后进入查找模式,然后按 n(N)向下(上)查找。 有许多操作,都和 vim 类似,你可以类比看下。
cut
# 查看 /etc/passwd 文件中使用最多的 Shell 脚本
cut -d ":" -f7 /etc/passwd | sort | uniq -c | sort -r
wc
wc
命令用于统计文件内容信息。
# 查看文件 demo 行数
wc -l demo
可以先用 wc
命令查看文件行数,再决定用 head
或 tail
查看文件内容。
cksum
$ cksum test.txt
4038471504 75 test.txt
文件编辑
sed
通常使用 sed
命令打印特定行
# -n:按特定格式打印
# 100p:指打印第一百行
sed -n 100p README.md
也可以打印一段范围的行
# 打印文件中第 100~200 行
sed -n 100,200p README.md
文件权限
- chown 用来改变文件的所属用户和所属组
- chmod 用来改变文件的访问权限
这两个命令,都和 Linux 的文件权限 777 有关。