(转)Linux系统的rm命令太危险,一不小心就会删除系统文件。写一个shell脚本来替换系统的rm命令

linux系统自己编写shell脚本代替rm命令,在删除文件时候自动备份该文件:

#!/bin/bash
d=`date +%Y%m%d%H%M`
##将日期命令的执行结果赋值给变量$d

f_size=`du -sk $1 |awk '{print $1}'`
##du -sk $1 是以kb为单位列出$1的大小总和.结果为 大小  文件名 如:4   1.txt
##所以只打印管道符前命令的结果的第一段,也就是  大小 文件名的第一段,  大小
##将运行结果赋值给变量$f_size

disk_size=`LANG=en; df -k |grep -vi filesystem |awk '{print $4}' |sort -n |tail -n1`
##LANG=en为显示语言为英文,df -k是查看已挂载磁盘的总容量,使用容量,剩余容量
##awk '{print $4}'打印第四段,因df -k 显示的排序为 文件系统(filesystem),块,已用,可用
##sort -n 使用纯数字排序,从小到大
##tail -n1 打印最后一行
##整段代码的含义就是,将最大的可用内存打印出来,赋值给变量disk_size

big_filesystem=`LANG=en; df -k |grep -vi filesystem |sort -n -k4 |tail -n1 |awk '{print $NF}'`
##LANG=en显示语言为英文,df -k 查看已挂载磁盘的总容量,使用容量,剩余容量
##grep -vi 不区分大小写打印不包括 filesystem的行
##tail -n1 打印最后一行
##打印最后一个段,也就是挂载点名称
##h整段代码是将最大可用内存的挂载点名称打印出来,赋值给变量$big_filesystem

if [ $f_size -lt $disk_size ]
##判断$f_size的值 是否小于 $disk_size的值,如果小于则执行
then
   read -p "Are you sure delete the file or directory:$1? y|n:" c
##将输入的内容赋值给变量$c
   if [ $c == "y" ] || [ $c == "Y" ]
##判断 $c的值是否全等于 y或Y
   then
      mkdir -p $big_filesystem/.$d && rsync -aR $1 $big_filesystem/.$d/ && /bin/rm -rf $1
##mkdir -p 级联创建目录,最大剩余挂载点/日期,rsync -R是连同目录一同同步,
##整段就是在最大挂载点下创建以日期为名称的文件夹,使用rsync命令一同同步,最后删除$1文件
   elif [ $c == "n" ] || [ $c == "N" ]
##判断变量$c的值是n或N,则退出
   then
      exit 0
   else
        echo "please input y or n"
##如果$c的值不等于y,Y,n,N,则输出 please input y or n
   fi
else
   echo "the disk size is not enough to backup the files $1"
##变量$f_size的值不小于$disk_size的值,则执行下面命令
   read -p "Do you want to delete $1? y|n:" c
   if [ $c == "y" ] || [ $c == "Y" ]
##$c=y|Y
   then
      echo "it will delete $1 after 10 seconds whitout bachup."
##则输出
      for i in `seq 1 10`
##for循环,1到10,10次循环
      do
      echo -ne "="
##echo -ne不换行输出 =
      sleep 1
##sleep 1延迟1秒
      done
   echo
     /bin/rm -rf $1
##删除$1文件
   elif [ $c == "n" ] || [ $c == "N" ]
##$c =n|N
   then
     echo "it will not delete $1"
##则输出 it will not delete。。
     exit 0
##退出
   else
##以上情况不存在,则输出
      echo "Please input y or n"
   fi
fi

代码可直接复制粘贴使用,例如我这里的脚本名字为rm_test.sh

测试方法:

1我这里新建了一个rm_test.txt用于测试被删除

2执行脚本删除这个文件,并且输入“y”确认删除这个文件

3查看是否备份了这个文件,在隐藏目录下以日期名字命令的隐藏目录

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题可能是因为数据下发的频率过高,导致ESP8266与STM32同时发送数据时发生冲突。解决这个问题的方法有以下几种: 1. 调整数据下发的频率,避免ESP8266与STM32同时发送数据。 2. 使用缓存机制,将ESP8266和STM32的数据分别存放到不同的缓存中,等待下一次数据下发时再发送。 3. 增加数据下发的重试机制,当数据下发失败时,重新尝试发送,直到数据成功下发为止。 4. 对ESP8266和STM32进行优化,提高数据处理能力,避免数据冲突的发生。 需要根据实际情况进行调试和优化,找到最适合的解决方案。 ### 回答2: 阿里云物联网平台与ESP8266和STM32之间的数据通信问题可能是由于数据冲突或设备之间的通讯速度不一致引起的。 在阿里云物联网平台中,数据传输是通过MQTT协议进行的。当ESP8266通过阿里云物联网平台向STM32发送数据时,如果STM32同时开始上传数据,可能导致数据冲突或覆盖。 为了解决这个问题,可以采取以下几种方案: 1. 确保STM32和ESP8266之间的通讯速度一致:尽量使两个设备之间的通讯速度相同,可以通过调整通讯频率、波特率等参数来实现。 2. 增加数据缓冲区:在STM32端和ESP8266端都增加一个数据缓冲区,当有新的数据到来时,先将数据存储到缓冲区中,在得到应答之后再进行下一次的数据传输。这样可以避免数据冲突和覆盖。 3. 使用消息队列:在ESP8266和STM32之间建立一个消息队列,当有新的数据到来时,先将数据存储到消息队列中,然后按照一定的顺序进行处理和传输,可以避免数据冲突和覆盖。 4. 使用互斥锁或信号量:在ESP8266和STM32之间引入互斥锁或信号量机制,确保同一时间只有一个设备进行数据传输,可以避免数据冲突和覆盖。 以上是针对ESP8266向STM32发送数据时可能出现的问题和解决方案的简要说明。具体的解决方法需要根据具体的硬件设备和编程实现来确定。希望对你有所帮助。 ### 回答3: 阿里云物联网平台通过ESP8266向STM32发数据时,若STM32同时加入上传数据,可能造成数据下发的速度变慢或数据被覆盖的情况。 造成这种情况的原因有以下几点: 1.通信通道繁忙:当ESP8266与STM32同时进行数据上传和下发时,通信通道可能变得较为繁忙,导致数据传输速度变慢。这主要是由于ESP8266与STM32之间的串口通信只能串行进行,当同时进行上传和下发时需要进行切换,从而导致传输速度的下降。 2.缓冲区溢出:ESP8266与STM32之间的数据传输可能存在缓冲区溢出的问题。当STM32上传数据的频率较快时,ESP8266可能无法及时处理这些数据,导致缓冲区溢出。这导致到来的数据被丢失或者覆盖已有的数据。 为解决以上问题,可以采取以下措施: 1.优化通信协议:可以对ESP8266与STM32之间的通信协议进行优化,减少通信的次数和数据量。可以尽量将上传和下发的数据分批处理,避免大量数据同时传输。同时,可以尝试使用更高性能的通信模块或协议,提高数据传输速率。 2.增加缓冲区大小:可以增加ESP8266与STM32之间的缓冲区大小,确保缓冲区能够容纳所有的数据。通过增加缓冲区大小,可以减少由于缓冲区溢出引起的数据丢失或覆盖问题。 3.调整上传和下发频率:可以调整STM32上传数据的频率,避免数据过于频繁导致的传输问题。可以根据实际需求,合理设置上传和下发的时间间隔,以保证数据传输的稳定性和准确性。 综上所述,阿里云物联网平台通过ESP8266向STM32发送数据时,若STM32加入上传数据,可能出现数据下发变慢或覆盖的情况。为解决此问题,可优化通信协议、增加缓冲区大小和调整上传下发频率等措施。这样可以提高数据传输的效率和稳定性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值