一、综述
在Linux系统功能设计中,文件系统承担着整个系统的数据持久化功能,而文件又是文件系统的数据处理单元,管道、socket、块设备、文件目录等均可以通过文件的方式来进行管理,熟练的掌握文件操作至关重要。(更多内容,可参考程序员在旅途) 本篇文章从以下几个方面总结常用的文件操作命令,致力于提高Linux运维效率。
- 磁盘信息概览
- 文件摘要查看命令
- 文件查找命令
- 文件压缩与解压命令
- 文件传输命令
二、磁盘信息概览
在Linux中,磁盘作为存储数据的主要载体,了解当前系统中磁盘的分区状态、挂载的文件系统、空间使用情况等数据能够让我们对存储状态有一个更加全面的掌握。主要会涉及到lsblk 、df 、du 等命令,可以通过 man lsblk 或者 lsblk -h 查看详细的使用方式。
2.1 lsblk
lsblk 通过读取sysfs 虚拟文件系统来收集系统中所有的可用或者指定的块设备信息(sysfs 是一种对系统设备进行管理的虚拟文件系统)。
[root@docker-registry ~]
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 34G 0 disk
├─sda1 8:1 0 300M 0 part /boot
├─sda2 8:2 0 2G 0 part [SWAP]
└─sda3 8:3 0 31.7G 0 part /
sr0 11:0 1 1024M 0 rom
sd代表采用scsi、sata接口上的设备,sda代表第一个设备,依次编号,如sdb、sdc等,sda1、sda2、sda3是sda的3个分区; MOUNTPOINT 是挂载点,即在系统中的挂载位置; SIZE 是空间大小; TYPE 是类型,有disk、part(分区)、rom等。
可以加上 -f 可以查看采用的文件系统:
[root@docker-registry ~]
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs e86e8ead-d69d-4e62-92ae-5def7de95cd5 /boot
├─sda2 swap 7079459f-7493-4e84-b870-dfbc921928e3 [SWAP]
└─sda3 xfs 73d4f659-9967-4a9c-abf2-5784f236c68e /
sr0
2.2 df
df 用于查看 文件系统中磁盘空间的使用情况。
[root@docker-registry ~]
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.4G 0 1.4G 0% /dev
tmpfs 1.4G 0 1.4G 0% /dev/shm
tmpfs 1.4G 12M 1.4G 1% /run
tmpfs 1.4G 0 1.4G 0% /sys/fs/cgroup
/dev/sda3 32G 20G 13G 61% /
/dev/sda1 297M 166M 132M 56% /boot
overlay 32G 20G 13G 61% /var/lib/docker/overlay2/8e5c1831a1fdf28d8d53f0ba7e417331e78c3af85f2205f24c749503f311680b/merged
overlay 32G 20G 13G 61% /var/lib/docker/overlay2/2f48f6274de0ce36fb3d62e260e9c0e20061ea27711a23713c71eff03461016d/merged
overlay 32G 20G 13G 61% /var/lib/docker/overlay2/9dfdb1a535ffe62a693dde54233c2a9f24dc5c000b47cb9e99163aec3685eb41/merged
overlay 32G 20G 13G 61% /var/lib/docker/overlay2/33e4fd9675985626d4b117a90608ad9c11a1570e5d84bf3ee243d06375d65ac0/merged
overlay 32G 20G 13G 61% /var/lib/docker/overlay2/cbe9bb09e4469eeafa3a08cd55edc099abfa617a5cb29af04e3a4d6695c57529/merged
shm 64M 0 64M 0% /var/lib/docker/containers/82456489bf8d4f250f654a84c87ef465da0ee0e8c54bd57a3b8c82ba7184864a/shm
shm 64M 0 64M 0% /var/lib/docker/containers/598535e3b69acf265438d797b222bd79725c22dc94ae3971bbb228332064ad28/shm
shm 64M 0 64M 0% /var/lib/docker/containers/9e20f7a5aa709e69dbf92720ead3393bcfb0b8bab4f04f70a8df2a37e25f530e/shm
shm 64M 0 64M 0% /var/lib/docker/containers/7c8f3b9b4632345439fa045b33989d40e0a4f0a106a5251c9b0d64baeca8f81b/shm
shm 64M 0 64M 0% /var/lib/docker/containers/2aab96782f43c66488bc762dfa459437542a13398f6151343e30e9088a2dcc15/shm
tmpfs 280M 0 280M 0% /run/user/0
2.3 du
du 用于查看目录或文件的大小。
#查看目录的大小
查看 /root 目录下的空间占用大小,-d 指明深度为1(加上 -d 很重要,默认会列出所有文件目录,会很多),-h 以友好的方式展示出来:
[root@docker-registry ~]
781M /root/.cache
4.0K /root/.config
4.0K /root/.ssh
0 /root/.pki
4.7G /root/go
40M /root/docker
721M /root/.vscode-server
674M /root/test
196K /root/logs
196M /root/etcd
7.1G /root
三、文件摘要查看命令
3.1 file
file 用于查看文件类型
[root@docker-registry ~]
dive_0.9.2_linux_amd64.rpm: RPM v3.0 bin i386/x86_64 dive-0.9.2-1
[root@docker-registry ~]
coredns.tar: POSIX tar archive
[root@docker-registry ~]
go/: directory
[root@docker-registry ~]
anaconda-ks.cfg: ASCII text
3.2 stat
stat 命令用于查看文件状态
[root@docker-registry ~]
File: ‘anaconda-ks.cfg’
Size: 2808 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 33574980 Links: 1
Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:admin_home_t:s0
Access: 2022-05-21 22:18:29.982417766 -0700
Modify: 2021-12-05 02:30:10.862007656 -0800
Change: 2021-12-05 02:30:10.862007656 -0800
Birth: -
3.3 type
type 用于查看命令的类型,命令一般主要有以下类型:
alias:别名; keyword:关键字; builtin:内置命令; file:外部命令。
常见的参数有:
-t 输出类型名,如file -p 如果是外部命令,则显示其所在路径 -a 对于外部命令,它会显示命令路径,命令类型等信息
[root@docker-registry ~]
ls is aliased to `ls --color=auto'
[root@docker-registry ~]
ls is aliased to `ls --color=auto'
ls is /usr/bin/ls
[root@docker-registry ~]
alias
[root@docker-registry ~]
builtin
3.4 md5sum
md5sum 查看文件或者字符串的MD5值,用于校验文件的一致性,判断是否被篡改。
[root@docker-registry ~]
Usage: md5sum [OPTION]... [FILE]...
Print or check MD5 (128-bit) checksums.
With no FILE, or when FILE is -, read standard input.
#查看文件的md5值
[root@docker-registry ~]
dde780f07afcef3b5966aac90a2e558b anaconda-ks.cfg
#查看字符串的md5值
[root@docker-registry ~]
a5985eb6cbfea030806722021bf31e09 -
[root@docker-registry ~]
a5985eb6cbfea030806722021bf31e09
md5sum: 显示或检查 MD5(128-bit) 校验和,此处校验字符串时输出内容包含两个域,有一个是"-",表示从标准输入读取。 echo -n : 对输出的字符串不打印换行(echo -n 后面的-n参数必须加上, 这样算出的字符串的md5值才正确) cut: cut用来从标准输入或文本文件中剪切列或域。-d 指定与空格和tab键不同的域分隔符,-f1 表示选择第一个域。
四、文件查找命令
该命令提供在Linux中按照给定的条件查找文件能力,并通过管道和其他命令结合,实现对文件的进一步操作。
4.1 find
find命令用于在指定的目录查找文件
[root@docker-registry ~]
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
default path is the current directory; default expression is -print
expression may consist of: operators, options, tests, and actions
其中[-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] 参数不常用,更一般的形式为:
find [path...] [expression]
path:查找路径; expression:包含“-options [-print -exec -ok …]”,-options 筛选参数,-print 输出格式,-exec/-ok 提供对查找结果作进一步处理;-exec 的使用格式为-exec command {} \; ,command是相关的指令,比如 ls -l 。
其中 options 有以下常见选项:
-name 匹配名称 -perm 匹配权限 -user 匹配所有者 -group 匹配所有组 -mtime -n +n 匹配修改内容的时间 -atime -n +n 匹配访问内容的时间 -size 匹配文件大小 -prune 忽略某个目录 –type b/s/c/p/l/f 匹配文件类型 块设备 目录 字符设备 管道 链接文件 文本文件
#匹配查找
查找当前目录下满足以下条件的文件:大小size < 1k(-n 小于n k,+n 大于 n k),文件名称name 满足后缀为 *.txt,文件类型为f(f 文件,d 目录),user 为 root,group为 root,,修改时间mtime 1天以内(+n n天以前,-n n天以内),创建时间在ctime 1天以内,文件权限为 755:
-rwxr-xr-x. 1 root root 0 May 22 04:43 ./find-test/user-cp.txt
[root@docker-registry ~]
#对查找到的文件进一步处理
查找当前目录 名称为 user.txt 并拷贝到该目录下 ./find-test/user-cp.txt:
[root@docker-registry ~]
查找./find-test/user-cp.txt 并删除:
[root@docker-registry ~]
4.2 which/whereis
which/whereis 用于查找二进制文件位置,其中 which 用于在 PATH目录下查找程序可执行文件的路径,如果未添加在PATH中,则不会被搜索到。whereis命令是从文件索引数据库中查找查找程序的二进制、源文件、man文件,查找比which更广泛。
[root@docker-registry ~]
/usr/local/go/bin/go
[root@docker-registry ~]
go: /usr/local/go /usr/local/go/bin/go
五、文件压缩与解压命令
在linux中,文件打包、压缩、解压缩是比较常见的几个操作,处理后的文件可以便于做传输等操作。 打包和压缩是两个不同的概念,打包是将一些文件或目录变成一个总的文件,压缩则是将一个大文件通过压缩算法变成一个小文件。 常见的几个处理命令有:tar 、gzip 、 zip 、unzip等
5.1 tar
tar是最常用的打包命令,使用 tar 打出来的包称为 tar 包,可以加入-z参数同时对打包后的文件进行压缩。 tar 常用的参数如下:
tar 用于打包压缩或者解压 -c 创建压缩文件 -x 揭开压缩文件 -z 用Gzip压缩或者解压 -j 用bzip2压缩或者解压 -v 显示解压或者压缩过程 -f 目标文件名 -p 保留原始的全新啊或者属性 -P使用绝对路径来压缩 -C 指定解压目录
# tar打包解包
将 ./find-test/ 打包成 tar 包
[root@docker-registry ~]
./find-test/
./find-test/user.txt
./find-test/user-cp.txt
tar: ./find-test/user.txt.tar: file is the archive; not dumped
将 ./find-test/user.txt.tar 解压缩到 ./find-test/tar 目录下
[root@docker-registry ~]
./find-test/
./find-test/user.txt
./find-test/user-cp.txt
# tar压缩解压缩
将 ./find-test/ 打包成 tar 包并压缩成.gz包
[root@docker-registry ~]
./find-test/
./find-test/user.txt
./find-test/user-cp.txt
./find-test/user.txt.tar
./find-test/tar/
./find-test/tar/find-test/
./find-test/tar/find-test/user.txt
./find-test/tar/find-test/user-cp.txt
./find-test/user.txt.tar.gz
tar: ./find-test: file changed as we read it
将 ./find-test/user.txt.tar.gz 解压缩到 ./find-test/gz 目录下
[root@docker-registry ~]
# zip/unzip压缩解压缩
linux 下也提供了 zip 和 unzip 程序,zip 是压缩程序,unzip 是解压程序。 zip 压缩文件, 将 find-test/ 下的文件压缩为 user.txt.zip:
[root@docker-registry ~]
unzip 压缩文件, 将 fuser.txt.zip 解压到 find-test/gz/ 目录:
[root@docker-registry ~]
六、文件传输命令
linux中可以通过scp命令实现跨主机的文件传输能力,从而实现文件在不同的主机之间快速流转。
6.1 scp 文件传输
scp 是 secure copy (remote file copy program) 的缩写,用于快速的实现主机之间的安全文件传输。 主要用法为:
scp <origin-path> <target-path>
#从服务器复制文件(夹)到本地
[root@docker-registry ~]
[root@docker-registry ~]
#从本地上传服务器
[root@docker-registry ~]
[root@docker-registry ~]
6.2 wget 文件下载
wget是一个在Linux命令行下必不可少的文件下载工具,wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理;wget在下载过程中,会显示进度条、文件大小、下载速度等.
wget 的命令行格式为:
wget [OPTION]... [URL]...
常见参数如下:
-O 以其他名称保存下载的文件; -P 选项将文件下载到指定目录; -c 选项断点续传; -b 选项在后台下载; -i 选项下载多个文件; –limit-rate 选项限制下载速度; –tries 选项增加重试次数(默认重试20次)。
下载redis到/root目录下并重命名,限制速率和重试次数:
wget -O redis-6-latest.tar.gz -P /root --limit-rate=1m --tries=50 https://download.redis.io/releases/redis-6.0.8.tar.gz
七、总结
以上便是对Linux中文件基础操作命令的总结,文件操作不仅如此,此处备忘;更深入的文件理解还需要慢慢地领悟,以便更深入的去了解 linux设计中的 一切皆文件 的思想。
|