文件管理
- 文件传输
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将文件进行排序并输出
- 文件压缩与解压
tarLinux 下的归档使用工具,用于打包和备份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 有关。