Linux高级命令
哈喽,大家好呀!这里是码农后端。这次来介绍一些常用的Linux高级扩展命令。
一、find命令
在Linux操作系统中,find命令主要用于文件的搜索。
1、语法
1 | find 搜索路径 [选项 选项的值] ... |
eg:搜索etc目录下的httpd.conf文件
1 | find /etc -name "httpd.conf" -type f |
2、*通配符
在Linux操作系统中,当想要查找的文件名称不是特别清晰(只记住了前面或后面的字符),此时就可以使用*通配符。
eg1:获取/etc目录下,所有后缀名为.conf的文件信息
1 | find /etc -name "*.conf" -type f |
eg2:在/etc目录下,搜索所有以httpd开头的文件
1 | find /etc -name "httpd*" -type f |
3、根据文件修改时间搜索文件
3.1 Windows中的文件时间
右键Windows下的一个txt文件,点击属性查看,有创建时间、修改时间和访问时间。
3.2 stat命令
在Linux中,可以使用stat命令获取文件的最后修改时间。
1 | stat 文件名称 |
eg:获取readme.txt文件的最后修改时间
1 | stat readme.txt |
Modify: 2024-03-31 10:25:20.609010605 +0800
3.3 设置文件的修改时间
包括创建文件时设置修改时间
及修改文件的修改时间
。
1)语法:
1 | touch -m -d "日期时间格式" 文件名称 |
2)作用:
1.若文件不存在,则自动创建该文件,并设置其最后的修改时间
2.若文件存在,则只修改文件的最后修改时间
eg1:创建一个a.txt文件,并设置最后修改时间为2024-06-14 00:00
1 | # 文件不存在,则自动创建该文件,并设置其最后的修改时间 |
eg2:创建一个b.txt文件,并设置最后修改时间为2024-06-13 00:00
1 | # 先创建文件 |
3.4 根据文件的最后修改时间搜索文件
1)语法
1 | find 搜索路径 -mtime +days/-days |
说明
1 | -mtime :根据文件的最后修改时间搜索文件 |
2)案例
eg1:搜索3天以前的文件信息(不包含第3天的,且只搜索.txt格式)
1 | find ./ -name "*.txt" -mtime +3 |
如今天是14号,那么3天以前的就是从13号开始往前推3天之前的,也就是10号及之前的。如下坐标轴所示:
eg2:搜索3天以内的文件信息(只搜索.txt格式)
1 | find ./ -name "*.txt" -mtime -3 |
如下坐标轴所示:
4、扩展:-exec选项
情景:删除Linux系统中/var/log目录下10天以前的日志信息(日志文件格式*.log结尾)
1 | # 先查找该目录下10天以前的日志信息 |
方法1:使用管道命令|
1 | find /var/log -name "*.log" -mtime +10 |rm -rf |
由于rm命令和ls命令一样,都不支持管道,所以上述命令执行不成功。
解决办法:使用xargs命令,在不支持管道的情况下,使用xargs 可以将一个命令的输出作为参数发送给另一个命令。
1 | find /var/log -name "*.log" -mtime +10 |xargs rm -rf |
方法2:使用find命令 + -exec选项
1)语法:
1 | find 搜索路径 -name "文件名称" -mtime +10 -exec rm -rf {} \; |
注:最后的 {} \;是固定写法,记住即可。
2)命令:
1 | find /var/log -name "*.log" -mtime +10 -exec rm -rf {} \; |
5、dd扩展命令
主要功能:在Linux操作系统中,生成某个大小的测试文件。
1)语法
1 | dd if=/dev/zero of=文件名称 bs=1M count=1 |
2)案例
eg1:使用dd命令创建一个1M大小的a.txt文件
1 | dd if=/dev/zero of=a.txt bs=1M count=1 |
eg2:使用dd命令创建两个5M大小的b.txt文件
1 | dd if=/dev/zero of=b.txt bs=5M count=2 |
6、根据文件大小搜索文件
1)语法
1 | find 搜索路径 -size [文件大小,常用单位:k,M,G] |
2)案例
eg1:搜索/root目录下大小为5M的文件信息
1 | find ./ -type f -size 5M |
注:**./表示当前目录**,在root用户下,~等同于 /root;而在普通用户下,~等同于 /home/当前的普通用户名
eg2:搜索/root目录下大小为5M以内的所有txt文件信息(0<=size<5M)
1 | find ./ -name "*.txt" -type f -size -5M |
eg3:搜索/目录中,文件大小大于100M的文件信息(size>100M)
1 | find / -type f -size +100M |
二、tree命令
1、tree命令的主要作用
Windows和Linux都有tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来,使文件结构更具层次感。
2、使用yum命令安装tree
1 | yum install tree -y |
3、以树状结构显示路径下的文件信息
eg1:以树状结构显示当前目录下的文件信息
1 | tree |
eg2:以树状结构显示/var/log目录下的文件信息
1 | tree /var/log |
三、scp命令
1、主要作用
实现Linux与Linux系统之间的文件传输。
既然是Linux与Linux系统之间的文件传输,那么就至少需要两个Linux系统,可以使用克隆操作(先关机后克隆)快速生成一个Linux系统。
简单回顾一下克隆操作,如下:
第一步:使用关机按钮或相关的关机命令对 Linux进行关机操作。
第二步:右键需要克隆的虚拟机 –> 管理 –> 克隆。
根据向导进行克隆备份。下一步、下一步,选择克隆类型,一定要选择完整克隆。
2、scp原理
scp传输要求:两台计算机所使用的操作系统都必须是Linux操作系统。
若出现问题:ssh: connect to host 10.1.1.17 port 22: Connection refused,lost connection
主要原因:由于SCP命令底层基于SSH协议,所以两台服务器的sshd服务必须处于开启状态,否则无法完成上传与下载操作。
3、下载文件或目录
1)语法
1 | scp [选项] 用户名@linux主机地址:资源路径 linux本地文件路径 |
2)案例
前期准备:开启两台虚拟机,包括我们之前备份好的那一台,在root用户下使用 ifconfig命令查看各自的IP地址。如我的是 CentOS7.6:192.168.91.128; CentOS7.6_bak:192.168.91.129
先在192.168.91.129服务器上创建一个大小为10M的测试文件video.mp4
eg1:从192.168.91.129服务器下载/root路径下的video.mp4文件到本地(192.168.91.128)的/root目录下
1 | scp root@192.168.91.129:/root/video.mp4 ./ |
eg2:从192.168.91.129服务器下载/root路径下的shop文件夹到本地(192.168.91.128)的/root目录下
1 | scp -r root@192.168.91.129:/root/shop ./ |
注:文件夹要加 -r,实现递归操作
4、上传文件或目录
1)语法
1 | scp [选项] linux本地文件路径 用户名@linux主机地址:远程路径 |
2)案例
eg1:把192.168.91.128服务器上的/root/video.mp4上传到192.168.91.129服务器的/root目录下
在192.168.91.128服务器上执行以下命令:
1 | scp /root/video.mp4 root@192.168.91.129:/root/ |
eg2:把192.168.91.128服务器上的/root/shop文件夹上传到192.168.91.129服务器的/root目录下
在192.168.91.128服务器上执行以下命令:
1 | scp -r /root/shop root@192.168.91.129:/root/ |
注:文件夹要加 -r,实现递归操作
四、计划任务+tar命令
使用计划任务+tar命令实现文件备份。
1、计划任务
语法:
1 | crontab [选项] |
2、计划任务格式
==计划任务的规则语法格式,以行为单位,一行则为一个计划==
1 | 分 时 日 月 周 执行的命令(要求使用完整路径,which命令) |
注:周的范围比较特殊,正常情况下,是周一 ~ 周日(1-7),但是计划任务范围0-7,因为0和7都代表周日
3、扩展:date命令
1)语法
1 | date +"时间格式" |
2)案例
eg1:获取计算机的系统时间
1 | date |
eg2:获取年月日信息(要求格式如”20240614”)
1 | date +"%Y%m%d" |
4、案例
1)eg1:每天的凌晨2点0分把/etc目录备份一次到/tmp目录下,要求把/etc打包成etc.tar.gz格式
1 | crontab -e |
以上写法虽然可以实现对/etc目录的备份,但是有一个缺点:每次备份时,生成的文件名称是一致的,导致后面备份的文件会把前面备份的文件覆盖掉!
==2)eg2:备份文件时,要求按时间作为备份文件的名称==,如下:
/tmp/etc-20200331.tar.gz
/tmp/etc-20200401.tar.gz
...
1 | # 编辑计划任务 |
时间作为备份文件的名称的重点:
/tmp/etc-$(date +"\%Y\%m\%d").tar.gz
a、编辑计划任务
按i进入插入模式,编辑完成后,按esc回到命令模式,最后按:wq保存并退出。
b、等待并查看效果
注:在编写计划任务时,出现了%,则前面必须添加一个反斜杠\进行转义,否则计划任务会失效!