|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
系统管理相关命令:df、top、free、quota、at、lp、adduser、groupaddkill、crontab、tar、unzip、gunzip、last
本文模仿Windows接纳站的功效,使用Bash剧本在Linux上做了完成,创立delete剧本取代rm命令对文件或目次举行删除操做。该剧本完成了以下功效:对年夜于2G的文件或目次间接删除,不然放进$HOME/trash目次下;恢复trash目次中的被删除文件到原目次下;文件寄存在trash目次中凌驾七天被主动删除。
概述
删除是伤害系数很高的操纵,一旦误删大概会形成无法计算的丧失。在Linux体系中这类伤害尤其分明,一条复杂的语句:rm–rf/*就会把全部体系全体删除,而Linux其实不会由于这条语句的分歧理而回绝实行。在Windows中,为了避免误删,体系供应了接纳站功效。用户在实行删除操纵后,文件其实不会间接从硬盘中删除,而是被放到接纳站中。在清空接纳站前,假如发明有文件被误删,用户能够将接纳站中的文件恢复到本来的地位。而Linux并没有供应相似功效,删除命令rm一旦确认实行,文件就会间接从体系中删除,很难恢复。
接纳站组成
本文共用三个剧本完成了接纳站的次要功效:Delete剧本、logTrashDir剧本和restoreTrash剧本。个中Delete剧本是中心剧本,其感化是从头封装rm命令。相对rm的间接删除,该命令会先将文件或目次挪动到$home/trash目次下。假如用户想要将文件间接删除,能够用-f选项,delete剧本会间接挪用rm–f命令将文件从硬盘上删除。logTrashDir剧本用于将被删除文件的信息纪录到trash目次下的一个埋没文件中。restoreTrash剧本用来将放进trash中的文件或目次从头恢复到原路径下。在Linux体系中,只需将这三个剧本放到/bin/目次下,并用chmod+Xfilename付与可实行权限,便可间接利用。上面将先容每一个剧本的次要部分
Delete剧本
创立目次
起首要创立目次来寄存被删除的文件,本文在用户根目次$HOME下创建trash目次来寄存文件。详细代码以下:
清单1.创立接纳站目次
1
2
3
4
5
6
realrm="/bin/rm"
if[!-d~/trash]
then
mkdir-v~/trash
chmod777~/trash
fi
如上所示,先判别目次是不是已创建,如未创建,即第一次运转该剧本,则创立trash目次。变量realrm寄存了Linux的rm剧本地位,用于在特定前提下挪用以间接删除文件或目次。
输入匡助信息
该剧本在用户仅输出剧本名而未输出参数实行时,输入扼要匡助信息,代码以下:
清单2.输入匡助信息
1
2
3
4
if[$#-eq0]
then
echo"Usage:deletefile1[file2file3....]"
echo"Iftheoptionscontain-f,thenthescriptwillexecrmdirectly"
如代码所示,该剧本的使用格局是delete后跟要删除的文件或目次的路径,两头用空格离隔。
间接删除文件
有些用户确认生效并想间接删除的文件,不该放进接纳站中,而应间接从硬盘中删除。Delete剧本供应了-f选项来实行这项操纵:
清单3.间接删除文件
1
2
3
4
5
6
7
8
9
10
11
12
whilegetopts"dfiPRrvW"opt
do
case$optin
f)
exec$realrm"$@"
;;
*)
#donothing
;;
esac
done
假如用户在命令中到场了-f选项,则delete剧本会间接挪用rm命令将文件或目次间接删除。如代码中所示,一切的参数包含选项城市传送给rm命令。以是只需选项中包含选项-f就即是挪用rm命令,可使用rm的一切功效。如:delete–rfvfilename即是rm–rfvfilename。
用户交互
必要与用户确认是不是将文件放进接纳站。相称于Windows的弹窗提醒,避免用户误操纵。
清单4.用户交互
1
2
3
4
echo-ne"Areyousureyouwanttomovethefilestothetrash?[Y/N]:a"
readreply
if[$reply="y"-o$reply="Y"]
then#####
判别文件范例并间接删除年夜于2G文件
本剧本只对一般文件和目次做操纵,其他范例文件不做处置。先对每一个参数做轮回,判别他们的范例,关于切合的范例再判别他们的巨细是不是凌驾2G,假如是则间接从体系中删除,制止接纳站占用太年夜的硬盘空间。
清单5.删除年夜于2G的文件
<p>1
2
3
4
5
6
7
8
9
10
11
12
forfilein$@
do
if[-f"$file"–o–d"$file"]
then
if[-f"$file"]&&[`ls–l$file|awk{print$5}`-gt2147483648]
then
<p>echo |
|