Linux编程细节2-脚本

1,linux小功能

1.1,如何创建一个linux回收站

方法1:
mkdir /tmp/trash_tmp 建立一个回收站目录
vi /bin/trash 编辑一个文件
mv $@ /tmp/trash_tmp
:wq保存退出
alias rm=/bin/trash添加别名
vi /etc/bashrc
在最后一行添加alias rm=/bin/trash
chmod 755 /bin/trash
chmod 777 /tmp/trash_tmp
source /etc/bashrc 启用环境变量
 
如果要真的删除某个文件的时候用 /bin/rm -i file_name
方法2:
建立回收站:
mkdir -p ~/.trash 
然后在~/.bashrc中加入:
alias rm=trash
alias rl='ls ~/.trash'
alias ru=removeundo
alias rc=cleartrash
removeundo()
{
  mv -i ~/.trash/$@ ./
}
trash()
{
  mv -i $@ ~/.trash/
}
cleartrash()
{
    read -p "clear sure? [y|n]" confirm
    [ $confirm == 'y' ] || [ $confirm == 'Y' ]  && /bin/rm -rf ~/.trash/*
}
其中mv -i表示提示是否需要覆盖文件。
其中没有做的是不能讲内容恢复到原来地点,需要记录删除时的这种信息。
方法3:
或者更直接点:
alias rm='mv $@ ~/backup'

1.2 如何删除目录下一周内未访问过的所有的core文件

test -d /data && find /data -atime +7 -name '*core*'|xargs file| awk -F: '/LSB core file/ {system("rm -f "$1)}' > /dev/null 2>&1

1.3 清空/tmp/下的log和error文件

rm -fr /tmp/*log* /tmp/*error* > /dev/null 2>&1

1.4 脚本,每天创建一个目录

#/bin/bash
today=`date '+%Y%m%d'`
[ ! -d $today ] && mkdir $today
用户性crontab中:
crontab -e
59 23 * * 0,1,2,3,4 /data/home/shellge/cwork/makeTodayDir.sh


1.5 fork炸弹

以下程序段就是由Jaromil所作的在类UNIX系统的shell环境下触发fork炸弹的shell脚本代码,总共只用了13个字符(包括空格):
:(){ :|:& };:
注释如下:
:()      # 定义函数,函数名为":",即每当输入":"时就会自动调用{}内代码
{        # ":"函数开始标识
    :    # 用递归方式调用":"函数本身
    |    # 并用管道(pipe)将其输出引至...(因为有一个管道操作符,因此会生成一个新的进程)
    :    # 另一次递归调用的":"函数
# 综上,":|:"表示的即是每次调用函数":"的时候就会生成两份拷贝
    &    # 调用间脱钩,以使最初的":"函数被杀死后为其所调用的两个":"函数还能继续执行
}        # ":"函数结束标识
;        # ":"函数定义结束后将要进行的操作...
:        # 调用":"函数,"引爆"fork炸弹
其中函数名“:”只是简化的一例,实际实现时可以随意设定,一个较易理解(将函数名替换为“forkbomb”)的版本如下:
forkbomb(){ forkbomb|forkbomb & } ; forkbomb
解决:可以修改配置文件/etc/security/limits.conf来限制可生成的最大进程数来避开这枚炸弹。

1.6 如何实现并行脚本

我们可以用ping命令编写脚本来查询一组IP地址,检查他们是否属于活动状态。
顺序式程序
#!bin/bash
# Filename:ping.sh
for ip in 192.168.0.{1..255};
do	
	ping $ip -c 2 &> /dev/null;
	
	if [ $? -eq 0 ];
	then 
		echo $ip is alive
	fi
done
其中-c表示将发送echo的分组数量限制为2.由于这是顺序式程序,所以很慢。
并行式程序
#!bin/bash
# Filename:ping.sh
for ip in 192.168.0.{1..255};
do	
	(
		ping $ip -c 2 &> /dev/null;
	
		if [ $? -eq 0 ];
		then 
			echo $ip is alive
		fi
	)&
done
wait
并行的方法是将循环体放入( )&中。( )中的命令作为子shell来运行,而&会将其置入后台。这样for循环中执行了多个后台进程,要想等到所有的子进程结束之后再终止脚本,就要使用wait命令。将wait放在脚本最后,它就会一直等到所有的子脚本进程全部结束。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值