【腳本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