【脚本4】自定义rm命令

linux系统的rm命令太危险,一不小心就会删除掉系统文件。 写一个shell脚本来替换系统的rm命令,要求当删除一个文件或者目录时,都要做一个备份,然后再删除。下面分两种情况,做练习:

一、脚本

1、简单的实现

假设有一个大的分区/data/,每次删除文件或者目录之前,都要先在/data/下面创建一个隐藏目录,以日期/时间命名,比如/data/.201703271012/,然后把所有删除的文件同步到该目录下面,可以使用rsync -R 把文件路径一同同步,示例:

#!/bin/bash
filename=$1
now=`date +%Y%m%d%H%M` read -p "Are you sure to delete the file or diectory ${filename} ? yes|no: " input if [ "$input" == "yes" ] || [ "$input" == "y" ]
then
if [ ! -d "/data/.${now}"]
then
mkdir /data/.${now}
fi
rsync -aR ${filename} /data/.${now}
/bin/rm -rf ${filename}
elif [ "$input" == no ] || [ "$input" == "n" ]
then
exit 0
else
echo "Only input yes or no"
exit
fi

2、复杂的实现

不知道哪个分区有剩余空间,在删除之前先计算要删除的文件或者目录大小,然后对比系统的磁盘空间,如果够则按照上面的规则创建隐藏目录,并备份,如果没有足够空间,要提醒用户没有足够的空间备份并提示是否放弃备份,如果用户输入yes,则直接删除文件或者目录,如果输入no,则提示未删除,然后退出脚本,示例:

#!/bin/bash

filename=$1
now=`date +%Y%m%d%H%M` file_size=`du -sk ${filename}|awk '{print $1}'`
disk_size=`LANG=en;df -k|awk '{print $4}'|sort -n|tail -n1`
big_filesystem=`LANG=en; df -k|grep -vi filesystem |sort -n -k4 |tail -n1 |awk '{print $NF}'` if [ $file_size -lt $disk_size ]
then
read -p "Are you sure to delete the file or directory ${filename} ? yes|no: " input
if [ ${input} == "yes" ] || [ ${input} == "y" ]
then
if [ ! -d "${big_filesystem}/.{now}" ]
then
mkdir -p ${big_filesystem}/.{now}
fi
rsync -aR ${filename} ${big_filesystem}/.${now}
/bin/rm -rf ${filename}
elif [ $input == "no" ] || [ $input == "n" ]
then
exit 0
else
echo "Only input yes or no"
fi
else
echo "The disk size is not enough to backup the file: ${filename}."
read -p "Do you want to delete the file or directory ${filename} ? yes|no: " input
if [ $input == "yes" ] || [ $input == "y" ]
then
echo "It will delete $filename after 5 seconds whitout backup."
for i in `seq 1 5`;do echo ".";sleep 1;done
/bin/rm -rf ${filename}
elif [ $input == "no" ] || [ $input == "n" ]
then
echo "It will not delete ${filename}."
exit 0
else
echo "Only input yes or no"
fi
fi

二、小结

1、rsync同步:

[1]sersync+rsync实现服务器文件实时同步 https://www.cnblogs.com/panwenbin-logs/p/7742288.html

[2]rsync学习笔记 https://www.cnblogs.com/ant-colonies/p/10954422.html

[3]第2章 rsync(一):基本命令和用法 https://www.cnblogs.com/f-ck-need-u/p/7220009.html

[4]rsync实时同步 https://www.cnblogs.com/guarderming/p/10929081.html

[5]rsync+inotify实现文件实时同步 https://www.cnblogs.com/it-davidchen/p/11320219.html

[6]Rsync实时同步目录 https://www.jianshu.com/p/1597e5af3619

[7]Rsync+inotify实现文件实时同步 https://www.cnblogs.com/yanjieli/articles/10722087.html

[8]利用rsync如何同步单个文件 https://www.cnblogs.com/longzhongren/p/4201782.html

2、du、df

[1]Linux du命令 https://www.runoob.com/linux/linux-comm-du.html

[2]linux系统命令<二>----du的使用方法 https://www.cnblogs.com/weishuo/p/7553903.html

[3]Linux df命令 https://www.runoob.com/linux/linux-comm-df.html

[4]Linux命令的df http://www.hechaku.com/LinuxCmd/df.html

[5]Linux操作系统df相关问题解惑 https://www.cnblogs.com/jiawei2527/p/10720647.html

[6]linux系统df和du命令的区别 https://www.cnblogs.com/jxhd1/p/6700272.html

[7]Linux系统中du和df命令详解 http://blog.chinaunix.net/uid-29810729-id-4436884.html

3、sort

[1]Linux sort命令 https://www.runoob.com/linux/linux-comm-sort.html

[2]linux sort命令详解 https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

4、tail

[1]Linux tail命令 https://blog.csdn.net/qq_27870421/article/details/93848123

[2]linux tail命令的使用方法详解 https://www.cnblogs.com/mfryf/p/3336804.html

[3]tailf、tail -f、tail -F三者区别(转) https://www.cnblogs.com/jackzz/p/9358213.html

4、sleep

[1]Linux系统中sleep的使用方法 http://www.oh100.com/kaoshi/caozuoxitong/605808.html

sleep 1 睡眠1秒

sleep 1s 睡眠1秒

sleep 1m 睡眠1分

sleep 1h 睡眠1小时

sleep 1d 睡眠1天

5、date

[1]Linux date命令 https://www.runoob.com/linux/linux-comm-date.html

[2]Linux系统时钟与硬件时钟 https://www.cnblogs.com/rightlzc/p/11477399.html

[3]Linux 设置时区 https://www.cnblogs.com/xiaodone/p/11714857.html

[3]linux时区和时间设置 https://www.cnblogs.com/jjmaokk/p/9957840.html

[5]Linux系统时间同步方法小结 https://www.cnblogs.com/williamjie/p/10768657.html

[6]Linux配置ntp时间服务器(全) https://www.cnblogs.com/quchunhui/p/7658853.html

[7]Linux基础命令---ntpq查询时间服务器 https://www.cnblogs.com/wj78080458/p/10849459.html

[8]Linux系统时间同步方法小结 https://www.cnblogs.com/ibnode/p/3573302.html

Linux 时间同步 https://www.jianshu.com/p/3af70a0e72dd

linux时间同步,ntpd、ntpdate https://blog.csdn.net/vic_qxz/article/details/80344855

时间、时区、硬件时间、时钟同步

系统时间:查看和修改

date精确到毫秒:date +%Y-%m-%d’ ‘%H-%M-%S.%N | cut -b 1-23

设置年月日:date -s 月/日/年、date -s 年月日

设置时分秒:date -s 时:分:秒

设置年月日时分秒:date -s "年月日 时:分:秒"

date -s "年-月-日 时:分:秒"

date -s "时:分:秒 年-月-日"

date -s "月日年时分.秒"

硬件时间:查看和修改

查看硬件时间:hwclock、hwclock -r、hwclock --show

设置硬件时间:hwclock --set --date="月/日/年 时:分:秒"

硬件时间与系统时间同步:hwclock -w、hwclock --systohc

hwclock -s、hwclock --hctosys

时区:查看和修改

查看时区:date -R

修改时区:tzselect

复制相应的时区文件,替换系统时区文件;或者创建链接文件:cp /usr/share/zoneinfo/$主时区/$次时区 /etc/localtime

例如:在设置中国时区使用亚洲/上海(+8)

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

或:ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

时钟同步:查看和设置

ntpq -np

ntpdate 时间服务器ip或域名

ntpstat

ntptrace -n

127.0.0.1和localhost和本机IP三者的区别:https://blog.csdn.net/weixin_36185028/article/details/79855383

100个Shell脚本——【脚本4】自定义rm命令的更多相关文章

  1. 【转】干货分享-100个shell脚本

    本文用于记录学习和日常中使用过的shell脚本 [脚本1]打印形状 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash # 等腰三角形 read -p "Please i ...

  2. linux下修改rm命令防止误删除

    前言:相信很多朋友都遇到过在linux下用rm命令误删除文件的时候,此刻的心中仿佛有无数的羊驼在奔腾.那么怎么防止这种情况发生呢?当然是有方法的,我们可以写一个shell脚本,改变一下rm命令的作用. ...

  3. 100个Shell脚本——【脚本9】统计ip

    [脚本9]统计ip 有一个日志文件,日志片段:如下: 112.111.12.248 – [25/Sep/2013:16:08:31 +0800]formula-x.haotui.com "/ ...

  4. 100个Shell脚本——【脚本2】截取字符串

    [脚本2]截取字符串 一.脚本 现有一个字符串如下: http://www.aaa.com/root/123.htm 请根据以下要求截取出字符串中的字符: 1.取出www.aaa.com/root/1 ...

  5. 100个Shell脚本——【脚本1】打印形状

    [脚本1]打印形状 一.脚本 打印等腰三角形.直角三角形.倒直角三角形.菱形 #!/bin/bash #等腰三角形 read -p "Please input the length:&quo ...

  6. Shell脚本字符串匹配及日常命令工具 - 用法总结(技巧指南)

    Shell提供了很多字符串和文件处理的命令,如awk.expr.grep.sed等命令,还有文件的排序.合并和分割等一系列的操作命令.下面重点总结下Shell字符串处理.文本处理以及各类命令及函数用法 ...

  7. Linux shell编写脚本部署pxe网络装机

    Linux shell编写脚本部署pxe网络装机 人工安装配置,Linux PXE无人值守网络装机  https://www.cnblogs.com/yuzly/p/10582254.html 脚本实 ...

  8. shell监控脚本

    序言: 前几天一好友问我服务器监控怎么做?你们公司的监控是怎么做的?有什么开源的监控软件推荐?常见的开源的监控软件当然首先推荐ZABBIX,分布式够强大,而且很多公司都在用,我问他具体什么需求,能监控 ...

  9. 编写shell管理脚本(一)

    7.1  查看当前linux系统中能够使用的shell程序的列表[root@localhost ~]# cat /etc/shells/bin/sh/bin/bash/sbin/nologin/bin ...

随机推荐

  1. ReplacingMergeTree:实现Clickhouse数据更新

    摘要:Clickhouse作为一个OLAP数据库,它对事务的支持非常有限.本文主要介绍通过ReplacingMergeTree来实现Clickhouse数据的更新.删除. 本文分享自华为云社区< ...

  2. 攻防世界 Misc 新手练习区 坚持60s Writeup

    攻防世界 Misc 新手练习区 坚持60s Writeup 题目介绍 题目考点 java反编译 jd-gui 的使用 Writeup 下载附件并打开 kali执行命令 java -jar 9dc125 ...

  3. robot_framewok自动化测试--(7)认识RIDE

    认识 RIDE RIDE 作为 Robot Framework 的"脸面",虽然我们已经可以拿它来创建和运行测试了,但我们对它的认识并不全面,这一小节我们将了解这个工具的使用. 1 ...

  4. coding game, 边打游戏边学编程,是一种怎么样的体验?

    前言 hello,大家好,我是bigsai,好久不见,甚是想念! 在日常生活中,很多人喜欢玩游戏,因为游戏中有着对抗博弈.控制的喜悦,用灵魂指法完成一波靓丽的操作. 但实际上,你的按键都是对应代码中一 ...

  5. eclipse调试时出现source not found怎么办

    调试时遇到source not found,可以点击下方的edit source lookup按钮,进行调试项目的增加 进入后点击ADD按钮 选择java project类型的项目,如图 选择需要调试 ...

  6. 【Azure 环境】用 PowerShell 调用 AAD Token, 以及调用Azure REST API(如资源组列表)

    问题描述 PowerShell 脚本调用Azure REST API, 但是所有的API都需要进行权限验证.要在请求的Header部分带上Authorization参数,并用来对List Resour ...

  7. Java学习(十七)

    Java多态的学习差不多有3个小时,老师还夹杂着一些编译器运用的知识. 这是多态的基本知识: 我们可以创建父类引用指向子类对象,这就是多态的一种.(这种也叫向下转型) Pet c=new Cat(); ...

  8. 【JAVA】笔记(8)--- java.lang.String 精讲

    String 特性: 1.String 表示字符串类型,属于引用数据类型,所以其储存的是地址: 2.java 中规定,双引号括起来的字符串是不可变的,也就说" name "永远也只 ...

  9. Python 深拷贝和浅拷贝的区别

    python的复制,深拷贝和浅拷贝的区别    在python中,对象赋值实际上是对象的引用.当创建一个对象,然后把它赋给另一个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用  ...

  10. 网络安全协议之IPsec

    声明 本文仅发表在博客园,作者LightningStar. 简介[1] IPSec(Internet 协议安全)是一个工业标准网络安全协议,工作在OSI模型的第三层,即网络层,为IP网络通信提供透明的 ...