shell命令可以使用
man
查看命令文档说明,说明界面中可通过b
(backward)向上翻页,f
(forward)向下翻页,g
(go to)跳到说明首页,G
跳到说明尾页。官方文档:https://www.gnu.org/software/coreutils/manual/html_node/
1.date
处理日期时间相关的命令,主要用到的参数-d
,根据-d的参数值获取指定的日期时间,省略该参数获取当前日期时间。
sh
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date +%Y%m%d
20240703
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d 'last day' +%Y%m%d
20240702
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d '-1 day' +%Y%m%d
20240702
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d '-1 days' +%Y%m%d
20240702
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d '+1 day' +%Y%m%d
20240704
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d 'sunday' +%Y%m%d
20240707
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d 'last sunday' +%Y%m%d
20240630
map@gzdt-map-poi-yingxiang-offline04 coordinate$ date -d 'last sunday -1 week' +%Y%m%d
20240623
格式化字符串中常用:
%Y:year
%m:month (01...12)
%d:day of month (01...31)
%H:hour (00...23)
%M:minute (00...59)
%S:second (00...60)
2.du(disk use)
查看目录的磁盘占用大小。
du -h --max-depth=1 ./
或者 du -h -d 1 ./
:查看当前路径下各目录及文件的大小,对于目录是递归累计大小的。不指定路径默认为当前所在目录。--max-depth=1
& -d 1
,一个长参数形式一个短参数形式,都是用来指定控制台输出时只输出顶层目录文件,不递归输出。
3.df(disk free)
也是用来查看磁盘使用情况的,和du
不同的是,关注的是磁盘和挂载点目录的使用情况(包括总大小和已使用),而非某个具体目录。
所以df -h
无论在哪个路径执行默认都是输出所有磁盘或磁盘分区及对应挂载点&挂载点目录的使用情况,如果指定目录路径,则会输出该目录路径所在挂载点的磁盘使用情况。
sh
map@gzdt-map-poi-yingxiang-offline04 disk1$ df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 126G 0 126G 0% /dev
tmpfs 126G 11M 126G 1% /dev/shm
tmpfs 126G 1.1G 125G 1% /run
tmpfs 126G 0 126G 0% /sys/fs/cgroup
/dev/sda2 19G 11G 6.6G 63% /
/dev/nvme1n1 917G 512M 917G 1% /ssd2
/dev/nvme0n1 917G 26G 892G 3% /ssd1
/dev/sda1 952M 9.9M 942M 2% /boot/efi
/dev/sda6 1.9G 425M 1.4G 24% /has
/dev/sda5 4.6G 765M 3.7G 18% /matrix
/dev/sda3 14G 1.4G 12G 11% /var
/dev/sda4 14G 1.7G 12G 13% /noah
/dev/sda8 3.6T 3.1T 518G 86% /home
/dev/sdc1 3.6T 3.2T 480G 87% /home/disk2
/dev/sdb1 3.6T 1.1T 2.6T 30% /home/disk1
/dev/sdd1 3.6T 3.4T 215G 95% /home/disk3
/dev/sde1 3.6T 3.4T 267G 93% /home/disk4
/dev/sda7 6.5G 4.6G 1.5G 76% /tmp
none 800M 152M 649M 19% /noah/download
none 800M 597M 204M 75% /noah/modules
none 400M 128K 400M 1% /noah/tmp
none 100M 0 100M 0% /noah/bin
tmpfs 26G 0 26G 0% /run/user/1006
tmpfs 26G 0 26G 0% /run/user/0
afs_mount 96P 68P 28P 71% /home/dfs/map_data_aoi
map@gzdt-map-poi-yingxiang-offline04 disk1$ df -h /home/disk1/map/
文件系统 容量 已用 可用 已用% 挂载点
/dev/sdb1 3.6T 1.1T 2.6T 30% /home/disk1
挂载点:可以理解为物理磁盘或物理磁盘的某个分区在文件系统中的入口,通过挂载点入口目录管理物理磁盘或分区中的内容。
4.find
find命令可以用来查找机器上的文件,一种比较常用的查找方式为find / -name "*filename* 2>/dev/null"
,表示从根路径下查找文件名包含filename的文件,后面的 2>/dev/null 表示忽略权限错误输出。
这个命令特别需要注意下传递给-name参数的值*filename*
,加引号和不加引号的区别:
- 加引号:则
*filename*
这个字符串会作为整体传递给name参数,由find命令来解释特殊字符*
的含义,表示从指定路径下搜索所有包含filename的文件或文件夹,和搜索预期一致。- 不加引号:会先对
*filename*
中特殊含义的字符如*
在命令执行路径下(非查找路径) 下进行拓展,查找该路径下是否存在可以匹配*filename*
的文件,存在时就将第一个可以匹配的文件名传递给name,此时相当于按照第一个可以匹配的文件名精确查找了。不存在匹配结果时会和不加引号时一样将原字符串作为整体传递给name,此时加不加引号对于结果没影响。
引号测试:
sh
map@gzdt-map-poi-yingxiang-offline04 test$ tree dir1
dir1
├── dir2
│ └── file2
└── file1
1 directory, 2 files
# dir1下模糊查找所有包含 file 的文件文件夹
map@gzdt-map-poi-yingxiang-offline04 dir1$ find ./ -name "*file*"
./dir2/file2
./file1
# dir1路径下file1匹配,所以实际查找效果相当于:find ./ -name file1
map@gzdt-map-poi-yingxiang-offline04 dir1$ find ./ -name *file*
./file1
# 当命令执行路径下不存在匹配文件时,效果等同于加引号
map@gzdt-map-poi-yingxiang-offline04 dir1$ ll .. | grep file
map@gzdt-map-poi-yingxiang-offline04 dir1$ cd .. && find ./ -name *file*
./dir1/dir2/file2
./dir1/file1
如果文件名较复杂,也可以通过-regex
进行正则查找:
在find种正则查找时是全路径匹配,也就是当查找某个文件时,给出的正则必须要能满足对该文件的全路径进行匹配,而不是仅匹配文件名。
sh
map@gzdt-map-poi-yingxiang-offline04 dir1$ find ./ -regex "file.*"
map@gzdt-map-poi-yingxiang-offline04 dir1$ find ./ -regex ".*file.*"
./dir2/file2
./file1