在Linux系统中,文件的查找、压缩归档以及计划任务的设置是日常管理和维护中非常常见的任务。下面将详细介绍这些操作的基本命令和步骤。
1. 文件的查找
在Linux中,最常用的文件查找命令是find
和locate
。
-
find命令:用于在目录树中搜索文件,并执行指定的操作。
bash
find [搜索路径] [选项] [操作]
# 示例:在/home目录下查找所有.txt文件
find /home -type f -name "*.txt"
-
locate命令:基于预先构建的数据库快速查找文件。注意,这个命令可能不会立即显示最新创建或删除的文件,因为数据库不是实时更新的。
bash
locate [文件名]
# 示例:查找系统中所有的.txt文件
locate "*.txt"
如果你发现
locate
命令的搜索结果不是最新的,可以尝试使用sudo updatedb
命令来更新数据库。
2. 文件的压缩归档
Linux提供了多种工具来压缩和归档文件,如tar
、gzip
、bzip2
等。
-
tar命令:用于归档(打包)和解归档文件。它本身不进行压缩,但可以与其他压缩工具结合使用。
bash
# 打包并压缩文件
tar -czvf archive_name.tar.gz /path/to/directory_or_file
# 解压文件
tar -xzvf archive_name.tar.gz
注意:
-c
表示创建新的归档文件,-x
表示解压归档文件,-z
表示通过gzip压缩或解压,-v
表示在压缩或解压时显示详细信息,-f
指定归档文件的名称。 -
gzip命令:用于压缩和解压缩文件。它只能处理单个文件,并且会删除原始文件。
bash
# 压缩文件
gzip filename
# 解压缩文件
gunzip filename.gz
-
bzip2命令:与gzip类似,但通常提供更高的压缩率。
bash
# 压缩文件
bzip2 filename
# 解压缩文件
bunzip2 filename.bz2
3. 计划任务的设置
在Linux中,计划任务通常通过cron
服务来管理。
-
编辑crontab文件:要设置计划任务,首先需要编辑当前用户的crontab文件。
bash
crontab -e
-
crontab文件格式:crontab文件中的每一行都代表一个任务,其格式如下:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +---- 星期中星期几的数字(0 - 7)(星期天为0或7)
| | | +------ 月份(1 - 12)
| | +-------- 日期(1 - 31)
| +---------- 小时(0 - 23)
+------------ 分钟(0 - 59)
示例:每天凌晨1点自动备份
/home/user/data
目录到/backup/data.tar.gz
。bash
0 1 * * * tar -czvf /backup/data.tar.gz /home/user/data
完成编辑后,保存并退出编辑器,cron服务会自动加载新的crontab文件并安排任务。
以上就是在Linux系统中进行文件查找、压缩归档以及设置计划任务的基本操作。
find的基本使用
格式:find [⽂件路径] [选项 选项的值]
选项:-name 根据文件的名称搜索文件,-iname 忽略大小写,支持通配符*
-type f代表普通文件,d代表目录
作用:使用find按时间搜索,删除旧文件
[root@peter ~]# find /boot/ -type d (是目录的)
[root@peter ~]# find /boot/ -type f (是文件的)
[root@peter ~]# find /boot/ -type l (是快捷方式的)
案例:
1、按名字查询——-name 文件名
找到httpd.conf文件
[root@localhost ~]# find / -name "httpd.conf" -type f
/etc/httpd/conf/httpd.conf
/usr/lib/tmpfiles.d/httpd.conf
[root@localhost ~]# find /etc/ -name "httpd.conf" -type f
# 将/范围换成/etc/⽬录范围,这样查找更快,更加节省计算⾃资源
/etc/httpd/conf/httpd.conf
模糊查询——通配符:如果要查找的文件的名称不清晰,可以使用部分文件名+*搜索
搜索以http开头的文件:
[root@localhost ~]# find /etc/ -name "http*" -type f
搜索名字含tab的文件:
[root@peter ~]# find /etc/ -name *tab
[root@peter ~]# find /etc/ -name '.*'
搜索以.sh结尾的文件:
[root@peter ~]# find /etc -name "*.sh" -o -type d
[root@peter ~]# find /mnt -name "cbd*" -o -type f
[root@peter ~]# find /boot -type d | wc -l (利用管道符统计文件个数)
按文件大小查询
(1)-size +或- 文件大小(文件大小) [常⽤单位 k M G]
size值 搜索等于size的⽂件 -size值 (0,size值) +size值 (size值,正⽆穷)
查找/opt目录下大于2M的文件并将其删除:
[root@web2 ~]# find /opt/ -size +2M -exec rm -rf {} \;
[root@peter ~]# find /boot/ -size +300k
查找大于10M小于50M的数据:
[root@peter ~]# find /boot/ -size +10M -size -50M
(2)扩展命令 dd,使⽤dd创建扩展命令,⽣成指定⼤⼩的测试⽂件,
格式:dd if=/dev/zero of=⽂件名称 bs=1M count=1
if表示输⼊⽂件 of表示输出⽂件 bs代表字节为单位的块⼤⼩ count代表被复制的块,其中/dev/zore是⼀个字符设备,会不断地返回0字节的⽂件
[root@web2 ~]# dd if=/dev/zero of=/opt/a.txt bs=100M count=1 # 创建名称为a.txt,⼤⼩为100M的⽂件
[root@web2 ~]# dd if=/dev/zero of=/opt/b.txt bs=5M count=1
记录了1+0 的读⼊
记录了1+0 的写出
5242880字节(5.2 MB)已复制,0.0111468 秒,470 MB/秒
[root@web2 ~]# ls -lh /opt/ # 查看⽂件信息,使⽤⽂件⼤⼩单位 默认m
-rw-r--r--. 1 root root 5.0M 7月 15 20:06 aaa.mp4
[root@localhost opt]# ls -l
总⽤量 16384
-rw-r--r--. 1 root root 1048576 7⽉ 14 14:37 a.txt
-rw-r--r--. 1 root root 5242880 7⽉ 14 14:42 b.txt
3、按文件权限查找:
[root@localhost ~]#find -perm -u=root /opt
4、按文件的最后修改时间查询
格式:find ⽂件路径 -mtime +days/-days -mtime 根据⽂件最后修改时间搜索⽂件 +号 搜索⼏天之前的⽂件信息 -号 搜索⼏天之内的⽂件信息
案例:
(1)搜索3天以前的信息,不包含第三个的,⽽且只搜txt⽂件
[root@localhost ~]#ls -l *.txt
[root@localhost ~]#find /opt/ -name "*.txt"-mtime +3
(2)搜索3天以内的信息,不包含第三个的,⽽且只搜txt⽂件
[root@localhost ~]#find /opt/ -name "*.txt" -type f -mtime -3
(3)删除系统/var/log/ 10天之前的⽇志,格式都是.log⽂件
[root@localhost ~]#rm -rf find /opt/ -name "*.txt" -type f # rm不支持这种写法
[root@localhost ~]#rm -rf find /opt/ -name "*.txt" -type f -mtime +3| rm -rf # rm和ls不支持管道
[root@localhost ~]#find /opt/ -name "*.txt" -type f -mtime +3|xargs rm -rf # 使用xargs将查询结果交给rm
(4)删除/opt目录下三天以内修改过的文件:
[root@localhost ~]# find /opt/ -mtime -3 -exec rm -rf {} \; # 使用-exec文件调用rm函数 {}表示前面的find查到的内容 \;表示标识符
tree 创建⽂件列表,将⽂件名称以树的形式展示
[root@web2 ~]#yum -y install tree # 需要使⽤yum指令进⾏安装
[root@web2 ~]#tree
[root@localhost opt]# tree /var/log/ # 以树状结构显示/var/log⽬录中的⽂件
[root@web2 ~]# tree -l 2 # 只显示2级目录
stat 获取文件的时间信息(创建、修改和访问)
格式:[root@web1 ~]# stat /opt/test.conf
创建文件
格式:touch -m -d 日期时间格式 文件名称(文件不存在就创建,存在时只修改时间)
案例:
1、创建文件并用p选项指定文件修改时间
[root@web1 ~]# touch /opt/b.txt -m -d "2024-7-14 00:00"
修改或创建文件,并设置最后修改时间
[root@web1 ~]#touch -m -d "2024-7-14 00:00" /opt/abc.txt # 设置最后修改时间为7-14
[root@web1 ~]# stat /opt/abc.txt # 查看文件信息
scp 实现linux系统和linux之间的克隆操作
scp下载⽂件
语法: scp [选项] 本地主机资源路径 {远程主机}⽤户名@主机ip:放置路
上传⽂件,将克隆机中的a.txt⽂件上传到源主机中
[root@localhost ~]# rm -rf /opt/* # 清空opt⽬录中的⽂件
[root@localhost ~]# ls /opt/
[root@localhost ~]# ssh -lroot -p22 192.168.2.11 #ssh管理克隆机
[root@localhost ~]# scp /opt/a.txt root@192.168.135.129:/opt/ # 将克隆机上的a.txt 上传到 源主机上
root@192.168.2.11's password:
txt
[root@localhost ~]# ssh -lroot -p22 192.168.2.11 # 把克隆机中的folder⽬录上传到源主机的opt⽬录
[root@web1 ~]#scp -r /opt/d0/a.txt root@192.168.2.12:/opt #-r表示递归,上传目录及目录下的文件
[root@localhost ~]# scp -r /opt/folder/ root@192.168..2.11:/opt/
[root@localhost ~]#systemctl start sshd # 必须启⽤ssh服务
[root@localhost ~]#systemctl stop sshd
计划任务cron
选项:-e 编辑计划任务 -l 查看现有计划任务
用途:按照设置的时间间隔为用户反复执行某一项固定系统任务
软件包:cronie、 crontabs 系统服务:crond 日志文件:/var/log/cron
[root@web2 ~]# ls /opt/
d0
[root@server0~]# tail /var/log/cron //了解cron执行消息....
Nov 11 21:20:01 localhost CROND[12759]: (root) CMD(/usr/lib64/sa/sa1 1 1)
分、时、日、月、周
30、23、 *、 *、 *
30、23、 *、 *、 5
30、23、 *、 *、 7
30、23、 *、 *、 1-5
30、23、 *、 *、 1,3,7
*、23、 *、 *、 1,3,7
5、 *、 *、 *、 7 # 每个小时的第5分钟执行一次
*/5、 *、 *、 *、 7 # 每5分钟执行一次
30、 8、 *、 *、 */8 # 每8周早上8点半
30、 8、 1、 *、 1 # 满足任何一个1,就执行一次
案例:
[root@web2 ~]# which ls # 注意:要使用完整路径 which命令
alias ls='ls --color=auto'
/usr/bin/ls
每分钟自动将/opt下的文件名写到root目录下的list中
[root@web2 ~]# crontab -e # 编辑计划任务
[root@web2 ~]# crontab -l # 查看计划任务
*/1 * * * * /usr/bin/ls /opt/ >> /root/list # 每分钟执行一次
49 * * * * /usr/bin/echo "我是希腊女神echo" > /root/echo.txt # 每小时的49分执行一次
[root@web2 ~]# whereis tar
tar: /usr/bin/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz
每2分钟将/etc目录下的文件打包放到/tmp下,命名为/tmp/etc.tar.gz
[root@web2 ~]# crontab -l
*/2 * * * * /usr/bin/tar -zcvf /tmp/etc.tar.gz /etc/ # 以上的任务会覆盖前⾯的⽂件,需要在指令中添加时间因素
*/1 * * * * /usr/bin/tar -zcvf /tmp/etc_$(date "+\%Y\%m\%d\%H\%M\%S").tar.gz /etc/ # 在脚本中出现%,必须使⽤转义符\
[root@web2 ~]# ls /tmp/ # 查看备份⽂件
etc_20240715205001.tar.gz
时间
[root@localhost ~]# date "+%T" # 输出时间
17:24:56
[root@localhost ~]# date "+%F%T" #输出⽇期和时间
2024-07-1417:25:03
[root@localhost ~]# date "+%F-%T" #在⽇期和时间中添加间隔
2024-07-14-17:25:11
[root@localhost ~]# date "+%F %T"
2024-07-14 17:25:15
[root@localhost ~]# date "+%F_%T"
2024-07-14_17:25:29
[root@localhost ~]# date "+%Y" # 输出年
2024
[root@localhost ~]# date "+%Y%m%d" # 输出年⽉⽇
20240714
[root@localhost ~]# date "+%Y%m%d%H%M%S" # 输出年⽉⽇时分秒
#练习1
[root@localhost ~]# ls
anaconda-ks.cfg jdk-17_linux-x64_bin.tar.gz
a.txt stus
index.html 数据统计分析卷⾯分数.xls
java17.tar.gz
1.使⽤ls查看/etc/⽬录下所有的⽂件信息
[root@web2 ~]# ls /etc/*
2. 使⽤ls查看/etc/⽬录下名包含“a”字⺟的⽂件或者⽬录信息
[root@web2 ~]# ls /etc -name *a
3. 使⽤ls查看/etc/⽬录下以".conf"结尾的⽂件信息
[root@web2 ~]#ls /etc -name ".conf" -type f
4. 使⽤ls查看/etc/⽬录中以"y"字⺟开头的⽂件信息
[root@web2 ~]#ls /etc -name "y*" -type f
5. find查找/var/⽬录中以“.log”⽂件
[root@web2 ~]# find /var -name "*.log" -type f
6. 在opt⽬录下创建test⽬录
[root@web2 ~]# mkdir -p /opt/test
7.在test⽬录中创建abc.txt,def.txt.ghi.txt,xxx.txt.yyy.txt五个⽂件
[root@web2 ~]# touch /opt/test/abc.txt /opt/test/def.txt /opt/test/ghi.txt /opt/test/xxx.txt /opt/test/yyy.txt
[root@web2 ~]# ls -l /opt/test/
-rw-r--r--. 1 root root 0 7月 15 22:06 abc.txt
drwxr-xr-x. 2 root root 6 7月 15 18:59 d0
-rw-r--r--. 1 root root 0 7月 15 22:06 def.txt
-rw-r--r--. 1 root root 0 7月 15 22:06 ghi.txt
drwxr-xr-x. 2 root root 6 7月 15 22:05 test
-rw-r--r--. 1 root root 0 7月 15 22:06 xxx.txt
-rw-r--r--. 1 root root 0 7月 15 22:06 yyy.txt
8. 修改以上5个⽂件的最后修改时间分别为15,14,13,12,11,10⽇
[root@web2 ~]# touch /opt/test/abc.txt -m -d "2024-7-15 00:00"
您在 /var/spool/mail/root 中有新邮件
[root@web2 ~]# touch /opt/test/abc.txt -m -d "2024-7-15 00:00"
[root@web2 ~]# touch /opt/def.txt -m -d "2024-7-14 00:00"
[root@web2 ~]# touch /opt/ghi.txt -m -d "2024-7-13 00:00"
[root@web2 ~]# touch /opt/test/xxx.txt -m -d "2024-7-12 00:00"
[root@web2 ~]# touch /opt/test/yyy.txt -m -d "2024-7-11 00:00"
[root@web2 ~]# ls -l /opt/test/
-rw-r--r--. 1 root root 0 7月 15 00:00 abc.txt
-rw-r--r--. 1 root root 0 7月 14 00:00 def.txt
-rw-r--r--. 1 root root 0 7月 13 00:00 ghi.txt
-rw-r--r--. 1 root root 0 7月 12 00:00 xxx.txt
-rw-r--r--. 1 root root 0 7月 11 00:00 yyy.txt
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_74614835/article/details/140445271