1.find命令的通
主要进行文件搜索
2.基本语法
find [文件路径] [选项 选项的值]
-name *
-type f|d
常见的选项
-name 根据文件的名称搜索文件,支持通配符*
-type f代表普通文件,d代表目录
3.*通配符
在linux 系统中,如果要查找的文件的名称不清晰,可以使用部分文件名+*搜索
[root@localhost ~]# touch /opt/anyuncai.abc 在/opt目录下创建anyuncai.txt文件
[root@localhost ~]# ls /opt/ //查找/opt目录
anyuncai.abc apache-tomcat-9.0.91 Main.java
apache-maven-3.9.8 apache-tomcat-9.0.91.jia.gz
apache-maven-3.9.8-bin.tar(4).gz Main.class
[root@localhost ~]# find / -name "anyuncai*"
/opt/anyuncai.abc
案例 获取/etc/中以.conf结尾的文件
[root@localhost ~]# ls -l /etc/*.conf
练习:
找到http.conf文件
[root@localhost ~]# yum -y install httpd 下载http服务
[root@localhost ~]# find / -name "httpd.conf*" 查找到的文件
/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
[root@localhost ~]# find /etc/ -name "*.conf" -type f //获取/etc/中以.conf结尾的文件
[root@localhost ~]# find /etc/ -name "http*" -type f //搜索以http开头的文件
/etc/sysconfig/httpd
/etc/logrotate.d/httpd
/etc/httpd/conf/httpd.conf
文件的时间概念
window中的时间
1.创建时间
2.修改时间
3.访问时间
使用stat命令获取文件的时间信息
[root@localhost ~]# rm -rf /opt/*
[root@localhost ~]# touch /opt/c.txt
[root@localhost ~]# ls /opt/
c.txt
[root@localhost ~]# stat /opt/c.txt //stat文件
文件:"/opt/c.txt"
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:33640358 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:usr_t:s0
最近访问:2024-07-15 09:33:23.257781244 +0800
最近更改:2024-07-15 09:33:23.257781244 +0800
最近改动:2024-07-15 09:33:23.257781244 +0800
创建时间:-
创建文件并配置文件的修改时间(文件不存在就创建并修改时间 ,文件存在只配置最后修改时间 )
语法:touch -m -d 日期时间格式 文件名称
[root@localhost ~]# touch /opt/b.txt -m -d "2024-7-15 00:00"
[root@localhost ~]# ls -l /opt/
[root@localhost ~]# touch /opt/a.txt -m -d "2024-7-14 00:00"
[root@localhost ~]# touch /opt/d.txt -m -d "2024-7-10 00:00"
[root@localhost ~]# touch /opt/e.txt
[root@localhost ~]# ls -l /opt/
总用量 0
-rw-r--r--. 1 root root 0 7月 14 00:00 a.txt
-rw-r--r--. 1 root root 0 7月 15 00:00 b.txt
-rw-r--r--. 1 root root 0 7月 15 09:33 c.txt
-rw-r--r--. 1 root root 0 7月 10 00:00 d.txt
-rw-r--r--. 1 root root 0 7月 15 09:38 e.txt
[root@localhost ~]# touch /opt/e.txt -m -d "2024-7-13 00:00" //修改文件时间
[root@localhost ~]# ls -l /opt/
总用量 0
-rw-r--r--. 1 root root 0 7月 14 00:00 a.txt
-rw-r--r--. 1 root root 0 7月 15 00:00 b.txt
-rw-r--r--. 1 root root 0 7月 15 09:33 c.txt
-rw-r--r--. 1 root root 0 7月 10 00:00 d.txt
-rw-r--r--. 1 root root 0 7月 13 00:00 e.txt
删除系统/var/log/ 10天之前的日志,格式都是.log文件
方法1 报错,rm不支持这种写法
方法2 rm和ls不支持管道
方法3 使用xargs 将查询结果交给rm,可行
[root@localhost ~]# find /opt/ -mtime +3 //+3表示三天之前的文件
/opt/d.txt
[root@localhost ~]# find /opt/ -mtime +1 //表示一天以内的文件
/opt/d.txt
/opt/e.txt
[root@localhost ~]# find /opt/ -mtime -3 //-3表示三天以内的文件
/opt/
/opt/c.txt
/opt/b.txt
/opt/a.txt
/opt/e.txt
[root@localhost ~]# find /opt/ -mtime +3|xargs rm -rf //删除三天之前的文件(删除了d.txt)
[root@localhost ~]# ls -l /opt/
总用量 0
-rw-r--r--. 1 root root 0 7月 14 00:00 a.txt
-rw-r--r--. 1 root root 0 7月 15 00:00 b.txt
-rw-r--r--. 1 root root 0 7月 15 09:33 c.txt
-rw-r--r--. 1 root root 0 7月 13 00:00 e.txt
根据文件size大小搜索文件
find 路径 -size 文件大小 [常用单位 k M G]
size值 搜索等于size的文件
-size值 【0,size值)
+size值 (size值,正无穷)
扩展命令 dd
使用dd创建扩展命令
生成指定大小的测试文件
语法
dd if=/dev/zero of=文件名称 bs=1M count=1
if表示输入文件
of表示输出文件
bs代表字节为单位的块大小
count代表被复制的块
其中/dev/zore是一个字符设备,会不断地返回0字节的文件
案例创建一个1m的文件
#查看文件
[root@localhost opt]# ls
a.txt b.txt c.txt d.txt
# 删除文件
[root@localhost opt]# rm -rf *
[root@localhost ~]# find / -size +100M //搜索文件大于100M
创建名称为a.txt,大小为1m的文件
[root@localhost ~]# dd if=/dev/zero of=/opt/a.txt bs=1M count=1
记录了1+0 的读入
记录了1+0 的写出
1048576字节(1.0 MB)已复制,0.00308441 秒,340 MB/秒
生成其他大小的文件
[root@localhost opt]# dd if=/dev/zero of=b.txt bs=5M count=1
[root@localhost opt]# ls -l
[root@localhost opt]# ls -lh
scp要求两台主机的系统都是linux系统
使用scp下载文件和目录
语法
scp [选项] 用户名@linux主机地址:/资源路径 linux本地文件路径
复制文件
scp上传文件
[root@localhost ~]# scp root@192.168.226.33:/opt/a.txt /opt/
root@192.168.226.33's password:
a.txt 100% 0 0.0KB/s 00:00
计划任务:
[root@localhost ~]# crontab -l //查看计划任务
no crontab for root //没有计划任务
[root@localhost ~]# which ls
alias ls='ls --color=auto'
/usr/bin/ls
每分钟自动将opt目录中的文件名写道root目录下list文件中
[root@localhost ~]# crontab -e //编写计划任务
*/1**** /usr/bin/ls /opt/ >> /root/list
[root@localhost ~]# crontab -l //查看计划任务
*/1 * * * * /usr/bin/ls /opt/ >> /root/list
[root@localhost ~]# crontab -e
*/1 * * * * /usr/bin/ls /opt/ >> /root/list
29 * * * * /usr/bin/echo "我是李四echo" > /root/echo.txt
[root@localhost ~]# crontab -l
*/1 * * * * /usr/bin/ls /opt/ >> /root/list 每一分钟执行一次
29 * * * * /usr/bin/echo "我是李四echo" > /root/echo.txt 每一小时的29分执行一次
30 * * * * /usr/bin/echo "我手绘声" >> /root/echo.txt 每一小时的30分执行一次
*/1 * * * * /usr/bin/echo "我是好人" >> /root/minute.txt
[root@localhost ~]# date //时间戳
2024年 07月 15日 星期一 14:42:06 CST
[root@localhost ~]# date "+%T"
14:43:32
[root@localhost ~]# date "+%F"
2024-07-15
[root@localhost ~]# date "+%Y"
2024
[root@localhost ~]# date "+%m"
07
[root@localhost ~]# date "+%d"
15
[root@localhost ~]# date "+%Y%m%d"%
20240715
练习:
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
9. 在test⽬录下创建a⽬录
[root@web2 ~]# mkdir -p /opt/test/a
10. 将以上5个⽂件复制⼀份到a⽬录中
[root@web2 ~]# cp -r /opt/test/* /opt/test/a
[root@web2 ~]# ls /opt/test/a
abc.txt def.txt ghi.txt xxx.txt yyy.txt
11.将a⽬录⽂件做成bak.tar.gz⽂件保存到家⽬录中
[root@web2 ~]# pwd
/root
[root@web2 ~]# tar -zcvf /home/bak.tar.gz /opt/test/a
[root@web2 ~]# ls /home
anaconda-ks.cfg bak.tar.gz echo.txt list minute.txt
12. 使⽤find删除test⽬录下3天前的⽂件
[root@web2 ~]# find /test -mtime +3 -type f -exec rm -rf {} \;
13. find删除opt⽬录下3天内的⽂件
[root@mj ~]# touch /opt/m.txt /opt/n.txt
[root@mj ~]# ls -l /opt/
-rw-r--r--. 1 root root 13022098 7月 8 14:27 apache-tomcat-10.1.25.tar.gz
-rw-r--r--. 1 root root 267 7月 8 19:00 application.perperties
-rw-r--r--. 1 root root 101 7月 8 22:10 Main.java
-rw-r--r--. 1 root root 0 7月 16 00:41 m.txt
-rw-r--r--. 1 root root 0 7月 16 00:41 n.txt
[root@mj ~]# find /opt/ -mtime -3 -type f -exec rm -rf {} \;
[root@mj ~]# ls -l /opt/
总用量 12728
drwxr-xr-x. 2 root root 6 7月 16 00:41 123.txt
-rw-r--r--. 1 root root 13022098 7月 8 14:27 apache-tomcat-10.1.25.tar.gz
-rw-r--r--. 1 root root 267 7月 8 19:00 application.perperties
-rw-r--r--. 1 root root 101 7月 8 22:10 Main.java
14. find删除正好第三天的⽂件
[root@mj ~]# find /opt -time 3 -type f -exec rm -rf {} \;
15. 将/opt/test/a⽬录中的⽂件复制⼀份到/opt/test/⽬录下
[root@web2 ~]# cp -r /opt/test/a/* /opt/test/
16. 创建⽬录/opt/test0
[root@web2 ~]# mkdir -p /opt/test0
[root@web2 ~]# ls /opt
test0
17. 在/opt/test0/⽬录中创建三个⽂件 a.mp4(5M),b.mp4(20M),c.mp4(80M)
[root@web2 ~]# dd if=/dev/zero of=/opt/test0/a.mp4 bs=5M count=1
[root@web2 ~]# dd if=/dev/zero of=/opt/test0/b.mp4 bs=200M count=1
[root@web2 ~]# dd if=/dev/zero of=/opt/test0/c.mp4 bs=80M count=1
18. 创建⽬录/opt/test0/b/
[root@web2 ~]# cd /opt/test0
[root@web2 test0]# pwd
/opt/test0
[r
19. 将/opt/test0/中的⽂件复制⼀份/opt/test0/b/⽬录中
[root@web2 test0]# ls
mp4 b b.mp4 c.mp4
[root@web2 test0]# cp -r ./* /opt/test0/b
[root@web2 test0]# ls /opt/test0/b
a.mp4 b b.mp4 c.mp4
20. find查询/opt/test0/⽬录中⽂件⼤于20M的,并删除
[root@web2 test0]# ls
a.mp4 b b.mp4 c.mp4
[root@web2 test0]# find /opt/test0/ -type f -size +20M -exec rm -rf {} \;
[root@web2 test0]# ls /opt/test0
a.mp4 b
21. find查询/opt/test0/⽬录中⽂件⼩于20M的⽂件并删除
[root@web2 test0]# find /opt/test0/ -type f -size -20M -exec rm -rf {} \;
[root@web2 test0]# ls -l /opt/test0
drwxr-xr-x. 3 root root 15 7月 15 23:15 b
22. find查找/opt/test0/⽬录中⽂件size为20M的⽂件并删除
[root@web2 test0]# find /opt/test0/ -type f -size 20M -exec rm -rf {} \;
23. /opt/test0/b中的⽂件复制⼀份到/opt/test0中
[root@web2 test0]# cp -r /opt/test0/b/* /opt/test0/
[root@web2 test0]# ls /opt/test0
b test0
oot@web2 test0]# mkdir b
25. 将家⽬录中的bak.tar.gz⽂件上传到新主机的/opt⽬录中
[root@web2 ~]#scp /home/bak.tar.gz root@192.168.2.12:/opt/
26. 将新主机的/etc/skel/⽬录下载到当前主机的/opt⽬录中
[root@mj ~]#scp /etc/skel/ root@192.168.2.11:/opt
27. 设置计划任务,每周3将/etc/yum.repos.d/⽬录下的.repo⽂件压缩保存到tmp,在⽂件
名中添加时间戳
[root@web2 ~]# whereis tar
tar: /usr/bin/tar /usr/include/tar.h /usr/share/man/man1/tar.1.gz
[root@web2 ~]# crontab -e
* * * * 3 /usr/bin/tar -zcvf /tmp/etc_$(date "+\%Y\%m\%d\%H\%M\%S").tar.gz /etc/yum.repos.d/*.repo