小命令收集
星期三, 10月 10th, 2007linux32 把系统环境模拟成32位系统
linux64 把系统环境模拟成32位系统
setterm -blank 0 关闭屏幕保护
getconf LONG_BIT 查询机器系统的位数32 or 64
mii-tools 查看网络接口速率
stty size 获取终端窗口的大小
blkid 显示所有分区标卷
linux32 把系统环境模拟成32位系统
linux64 把系统环境模拟成32位系统
setterm -blank 0 关闭屏幕保护
getconf LONG_BIT 查询机器系统的位数32 or 64
mii-tools 查看网络接口速率
stty size 获取终端窗口的大小
blkid 显示所有分区标卷
1,禁止普通用户使用su
only the user who belongs to the wheel group permits su command.
add following content in /etc/pam.d/su:
“auth required /lib/security/$ISA/pam_wheel.so use_uid “
2,禁止root远程登录
prohibits root user login from remote..
Describe “PermitRootLogin no” in /etc/ssh/sshd_config.
3,禁止telnet
telnet shoud be prohibited.
Add following description in configuration file: /etc/xinetd.d/telnet :
「disable = yes」.
4,禁止IP转发
IP forwarding function should be disabled.
Add description in configuration file /etc/sysctl.conf:
“net.ipv4.ip_forward = 0. “
5,防范IP Spoofing attack
“IP Spoofing attack” protection should be enabled.
Add description in configuration file /etc/sysctl.conf:
“net.ipv4.conf.all.rp_filter = 1.”
6,禁止ICMP redirection packet
OS should not accept ICMP redirection packet..
Add description in configuration file /etc/sysctl.conf:
“net.ipv4.conf.all.accept_redirects = 0.”
7,禁止relay ICMP redirection packet
OS should not relay ICMP redirection packet..
Add description in configuration file /etc/sysctl.conf:
“net.ipv4.conf.all.send_redirects = 0.”
8,禁止reply to broadcast ICMP packet.
OS should not reply to broadcast ICMP packet.
Add description in configuration file /etc/sysctl.conf:
“
net.ipv4.icmp_echo_ignore_broadcasts = 1.”
9,禁止时间戳
OS should avoid the time stamp.
Add description in configuration file /etc/sysctl.conf:
“
net.ipv4.tcp_timestamps = 0.”
10,禁止伪造广播帧
OS should restrain the warning of the replying of the imitation to the broadcast frame.
Add description in configuration file /etc/sysctl.conf:
“
net.ipv4.icmp_ignore_bogus_error_responses = 1.”
1.编辑文件/etc/pam.d/su
2.添加或注释行auth required pam_wheel.so use_uid
3.将允许使用su命令的用户加入wheel组
#!/bin/bash
# Tetris Game
# 10.21.2003 xhchen<xhchen@winbond.com.tw>
#颜色定义
cRed=1
cGreen=2
cYellow=3
cBlue=4
cFuchsia=5
cCyan=6
cWhite=7
colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)
#位置和大小
iLeft=3
iTop=2
((iTrayLeft = iLeft + 2))
((iTrayTop = iTop + 1))
((iTrayWidth = 10))
((iTrayHeight = 15))
#颜色设置
cBorder=$cGreen
cScore=$cFuchsia
cScoreValue=$cCyan
#控制信号
#改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;
#当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。
sigRotate=25
sigLeft=26
sigRight=27
sigDown=28
sigAllDown=29
sigExit=30
#七中不同的方块的定义
#通过旋转,每种方块的显示的样式可能有几种
box0=(0 0 0 1 1 0 1 1)
box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)
box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)
box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)
#所有其中方块的定义都放到box变量中
box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})
#各种方块旋转后可能的样式数目
countBox=(1 2 2 2 4 4 4)
#各种方块再box数组中的偏移
offsetBox=(0 1 3 5 7 11 15)
#每提高一个速度级需要积累的分数
iScoreEachLevel=50 #be greater than 7
#运行时数据
sig=0 #接收到的signal
iScore=0 #总分
iLevel=0 #速度级
boxNew=() #新下落的方块的位置定义
cBoxNew=0 #新下落的方块的颜色
iBoxNewType=0 #新下落的方块的种类
iBoxNewRotate=0 #新下落的方块的旋转角度
boxCur=() #当前方块的位置定义
cBoxCur=0 #当前方块的颜色
iBoxCurType=0 #当前方块的种类
iBoxCurRotate=0 #当前方块的旋转角度
boxCurX=-1 #当前方块的x坐标位置
boxCurY=-1 #当前方块的y坐标位置
iMap=() #背景方块图表
#初始化所有背景方块为-1, 表示没有方块
for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done
#接收输入的进程的主函数
function RunAsKeyReceiver()
{
local pidDisplayer key aKey sig cESC sTTY
pidDisplayer=$1
aKey=(0 0 0)
cESC=`echo -ne “\33″`
cSpace=`echo -ne “\40″`
#保存终端属性。在read -s读取终端键时,终端的属性会被暂时改变。
#如果在read -s时程序被不幸杀掉,可能会导致终端混乱,
#需要在程序退出时恢复终端属性。
sTTY=`stty -g`
#捕捉退出信号
trap “MyExit;” INT TERM
trap “MyExitNoSub;” $sigExit
#隐藏光标
echo -ne “\33[?25l"
while (( 1 ))
do
#读取输入。注-s不回显,-n读到一个字符立即返回
read -s -n 1 key
aKey[0]=${aKey[1]}
aKey[1]=${aKey[2]}
aKey[2]=$key
sig=0
#判断输入了何种键
if [[ $key == $cESC && ${aKey[1]} == $cESC ]]
then
#ESC键
MyExit
elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == “[" ]]
then
if [[ $key == "A" ]]; then sig=$sigRotate #<向上键>
elif [[ $key == "B" ]]; then sig=$sigDown #<向下键>
elif [[ $key == "D" ]]; then sig=$sigLeft #<向左键>
elif [[ $key == "C" ]]; then sig=$sigRight #<向右键>
fi
elif [[ $key == "W" || $key == "w" ]]; then sig=$sigRotate #W, w
elif [[ $key == "S" || $key == "s" ]]; then sig=$sigDown #S, s
elif [[ $key == "A" || $key == "a" ]]; then sig=$sigLeft #A, a
elif [[ $key == "D" || $key == "d" ]]; then sig=$sigRight #D, d
elif [[ "[$key]” == “[]” ]]; then sig=$sigAllDown #空格键
elif [[ $key == "Q" || $key == "q" ]] #Q, q
then
MyExit
fi
if [[ $sig != 0 ]]
then
#向另一进程发送消息
kill -$sig $pidDisplayer
fi
done
}
#退出前的恢复
function MyExitNoSub()
{
local y
#恢复终端属性
stty $sTTY
((y = iTop + iTrayHeight + 4))
#显示光标
echo -e “\33[?25h\33[${y};0H"
exit
}
function MyExit()
{
#通知显示进程需要退出
kill -$sigExit $pidDisplayer
MyExitNoSub
}
#处理显示和游戏流程的主函数
function RunAsDisplayer()
{
local sigThis
InitDraw
#挂载各种信号的处理函数
trap "sig=$sigRotate;" $sigRotate
trap "sig=$sigLeft;" $sigLeft
trap "sig=$sigRight;" $sigRight
trap "sig=$sigDown;" $sigDown
trap "sig=$sigAllDown;" $sigAllDown
trap "ShowExit;" $sigExit
while (( 1 ))
do
#根据当前的速度级iLevel不同,设定相应的循环的次数
for ((i = 0; i < 21 - iLevel; i++))
do
sleep 0.02
sigThis=$sig
sig=0
#根据sig变量判断是否接受到相应的信号
if ((sigThis == sigRotate)); then BoxRotate; #旋转
elif ((sigThis == sigLeft)); then BoxLeft; #左移一列
elif ((sigThis == sigRight)); then BoxRight; #右移一列
elif ((sigThis == sigDown)); then BoxDown; #下落一行
elif ((sigThis == sigAllDown)); then BoxAllDown; #下落到底
fi
done
#kill -$sigDown $$
BoxDown #下落一行
done
}
#BoxMove(y, x), 测试是否可以把移动中的方块移到(x, y)的位置, 返回0则可以, 1不可以
function BoxMove()
{
local j i x y xTest yTest
yTest=$1
xTest=$2
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + yTest))
((x = ${boxCur[$i]} + xTest))
if (( y < 0 || y >= iTrayHeight || x < 0 || x >= iTrayWidth))
then
#撞到墙壁了
return 1
fi
if ((${iMap[y * iTrayWidth + x]} != -1 ))
then
#撞到其他已经存在的方块了
return 1
fi
done
return 0;
}
#将当前移动中的方块放到背景方块中去,
#并计算新的分数和速度级。(即一次方块落到底部)
function Box2Map()
{
local j i x y xp yp line
#将当前移动中的方块放到背景方块中去
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + boxCurY))
((x = ${boxCur[$i]} + boxCurX))
((i = y * iTrayWidth + x))
iMap[$i]=$cBoxCur
done
#消去可被消去的行
line=0
for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))
do
for ((i = j + iTrayWidth - 1; i >= j; i–))
do
if ((${iMap[$i]} == -1)); then break; fi
done
if ((i >= j)); then continue; fi
((line++))
for ((i = j - 1; i >= 0; i–))
do
((x = i + iTrayWidth))
iMap[$x]=${iMap[$i]}
done
for ((i = 0; i < iTrayWidth; i++))
do
iMap[$i]=-1
done
done
if ((line == 0)); then return; fi
#根据消去的行数line计算分数和速度级
((x = iLeft + iTrayWidth * 2 + 7))
((y = iTop + 11))
((iScore += line * 2 - 1))
#显示新的分数
echo -ne “\33[1m\33[3${cScoreValue}m\33[${y};${x}H${iScore} "
if ((iScore % iScoreEachLevel < line * 2 - 1))
then
if ((iLevel < 20))
then
((iLevel++))
((y = iTop + 14))
#显示新的速度级
echo -ne "\33[3${cScoreValue}m\33[${y};${x}H${iLevel} "
fi
fi
echo -ne "\33[0m"
#重新显示背景方块
for ((y = 0; y < iTrayHeight; y++))
do
((yp = y + iTrayTop + 1))
((xp = iTrayLeft + 1))
((i = y * iTrayWidth))
echo -ne "\33[${yp};${xp}H"
for ((x = 0; x < iTrayWidth; x++))
do
((j = i + x))
if ((${iMap[$j]} == -1))
then
echo -ne “ ”
else
echo -ne “\33[1m\33[7m\33[3${iMap[$j]}m\33[4${iMap[$j]}m[]\33[0m"
fi
done
done
}
#下落一行
function BoxDown()
{
local y s
((y = boxCurY + 1)) #新的y坐标
if BoxMove $y $boxCurX #测试是否可以下落一行
then
s="`DrawCurBox 0`" #将旧的方块抹去
((boxCurY = y))
s="$s`DrawCurBox 1`" #显示新的下落后方块
echo -ne $s
else
#走到这儿, 如果不能下落了
Box2Map #将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
fi
}
#左移一列
function BoxLeft()
{
local x s
((x = boxCurX - 1))
if BoxMove $boxCurY $x
then
s=`DrawCurBox 0`
((boxCurX = x))
s=$s`DrawCurBox 1`
echo -ne $s
fi
}
#右移一列
function BoxRight()
{
local x s
((x = boxCurX + 1))
if BoxMove $boxCurY $x
then
s=`DrawCurBox 0`
((boxCurX = x))
s=$s`DrawCurBox 1`
echo -ne $s
fi
}
#下落到底
function BoxAllDown()
{
local k j i x y iDown s
iDown=$iTrayHeight
#计算一共需要下落多少行
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + boxCurY))
((x = ${boxCur[$i]} + boxCurX))
for ((k = y + 1; k < iTrayHeight; k++))
do
((i = k * iTrayWidth + x))
if (( ${iMap[$i]} != -1)); then break; fi
done
((k -= y + 1))
if (( $iDown > $k )); then iDown=$k; fi
done
s=`DrawCurBox 0` #将旧的方块抹去
((boxCurY += iDown))
s=$s`DrawCurBox 1` #显示新的下落后的方块
echo -ne $s
Box2Map #将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
}
#旋转方块
function BoxRotate()
{
local iCount iTestRotate boxTest j i s
iCount=${countBox[$iBoxCurType]} #当前的方块经旋转可以产生的样式的数目
#计算旋转后的新的样式
((iTestRotate = iBoxCurRotate + 1))
if ((iTestRotate >= iCount))
then
((iTestRotate = 0))
fi
#更新到新的样式, 保存老的样式(但不显示)
for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
do
boxTest[$j]=${boxCur[$j]}
boxCur[$j]=${box[$i]}
done
if BoxMove $boxCurY $boxCurX #测试旋转后是否有空间放的下
then
#抹去旧的方块
for ((j = 0; j < 8; j++))
do
boxCur[$j]=${boxTest[$j]}
done
s=`DrawCurBox 0`
#画上新的方块
for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
do
boxCur[$j]=${box[$i]}
done
s=$s`DrawCurBox 1`
echo -ne $s
iBoxCurRotate=$iTestRotate
else
#不能旋转,还是继续使用老的样式
for ((j = 0; j < 8; j++))
do
boxCur[$j]=${boxTest[$j]}
done
fi
}
#DrawCurBox(bDraw), 绘制当前移动中的方块, bDraw为1, 画上, bDraw为0, 抹去方块。
function DrawCurBox()
{
local i j t bDraw sBox s
bDraw=$1
s=”"
if (( bDraw == 0 ))
then
sBox=”\40\40″
else
sBox=”[]”
s=$s”\33[1m\33[7m\33[3${cBoxCur}m\33[4${cBoxCur}m"
fi
for ((j = 0; j < 8; j += 2))
do
((i = iTrayTop + 1 + ${boxCur[$j]} + boxCurY))
((t = iTrayLeft + 1 + 2 * (boxCurX + ${boxCur[$j + 1]})))
#\33[y;xH, 光标到(x, y)处
s=$s"\33[${i};${t}H${sBox}"
done
s=$s"\33[0m"
echo -n $s
}
#更新新的方块
function RandomBox()
{
local i j t
#更新当前移动的方块
iBoxCurType=${iBoxNewType}
iBoxCurRotate=${iBoxNewRotate}
cBoxCur=${cBoxNew}
for ((j = 0; j < ${#boxNew[@]}; j++))
do
boxCur[$j]=${boxNew[$j]}
done
#显示当前移动的方块
if (( ${#boxCur[@]} == 8 ))
then
#计算当前方块该从顶端哪一行”冒”出来
for ((j = 0, t = 4; j < 8; j += 2))
do
if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
done
((boxCurY = -t))
for ((j = 1, i = -4, t = 20; j < 8; j += 2))
do
if ((${boxCur[$j]} > i)); then i=${boxCur[$j]}; fi
if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
done
((boxCurX = (iTrayWidth - 1 - i - t) / 2))
#显示当前移动的方块
echo -ne `DrawCurBox 1`
#如果方块一出来就没处放,Game over!
if ! BoxMove $boxCurY $boxCurX
then
kill -$sigExit ${PPID}
ShowExit
fi
fi
#清除右边预显示的方块
for ((j = 0; j < 4; j++))
do
((i = iTop + 1 + j))
((t = iLeft + 2 * iTrayWidth + 7))
echo -ne “\33[${i};${t}H "
done
#随机产生新的方块
((iBoxNewType = RANDOM % ${#offsetBox[@]}))
((iBoxNewRotate = RANDOM % ${countBox[$iBoxNewType]}))
for ((j = 0, i = (${offsetBox[$iBoxNewType]} + $iBoxNewRotate) * 8; j < 8; j++, i++))
do
boxNew[$j]=${box[$i]};
done
((cBoxNew = ${colorTable[RANDOM % ${#colorTable[@]}]}))
#显示右边预显示的方块
echo -ne “\33[1m\33[7m\33[3${cBoxNew}m\33[4${cBoxNew}m"
for ((j = 0; j < 8; j += 2))
do
((i = iTop + 1 + ${boxNew[$j]}))
((t = iLeft + 2 * iTrayWidth + 7 + 2 * ${boxNew[$j + 1]}))
echo -ne “\33[${i};${t}H[]”
done
echo -ne “\33[0m"
}
#初始绘制
function InitDraw()
{
clear
RandomBox #随机产生方块,这时右边预显示窗口中有方快了
RandomBox #再随机产生方块,右边预显示窗口中的方块被更新,原先的方块将开始下落
local i t1 t2 t3
#显示边框
echo -ne "\33[1m"
echo -ne "\33[3${cBorder}m\33[4${cBorder}m"
((t2 = iLeft + 1))
((t3 = iLeft + iTrayWidth * 2 + 3))
for ((i = 0; i < iTrayHeight; i++))
do
((t1 = i + iTop + 2))
echo -ne "\33[${t1};${t2}H||"
echo -ne "\33[${t1};${t3}H||"
done
((t2 = iTop + iTrayHeight + 2))
for ((i = 0; i < iTrayWidth + 2; i++))
do
((t1 = i * 2 + iLeft + 1))
echo -ne "\33[${iTrayTop};${t1}H=="
echo -ne "\33[${t2};${t1}H=="
done
echo -ne "\33[0m"
#显示"Score"和"Level"字样
echo -ne "\33[1m"
((t1 = iLeft + iTrayWidth * 2 + 7))
((t2 = iTop + 10))
echo -ne "\33[3${cScore}m\33[${t2};${t1}HScore"
((t2 = iTop + 11))
echo -ne "\33[3${cScoreValue}m\33[${t2};${t1}H${iScore}"
((t2 = iTop + 13))
echo -ne "\33[3${cScore}m\33[${t2};${t1}HLevel"
((t2 = iTop + 14))
echo -ne "\33[3${cScoreValue}m\33[${t2};${t1}H${iLevel}"
echo -ne "\33[0m"
}
#退出时显示GameOVer!
function ShowExit()
{
local y
((y = iTrayHeight + iTrayTop + 3))
echo -e "\33[${y};0HGameOver!\33[0m"
exit
}
#游戏主程序在这儿开始.
if [[ $1 != "--show" ]]
then
bash $0 –show& #以参数–show将本程序再运行一遍
RunAsKeyReceiver $! #以上一行产生的进程的进程号作为参数
exit
else
#当发现具有参数–show时,运行显示函数
RunAsDisplayer
exit
fi
#!/bin/sh
# Programname: five
# Author: CLD
# 2004.01
#
L()
{
# 屏幕任意位置
h=$1;l=$2
echo -n “[$h;$l;H"
}
## 界面颜色控制变量
white_b="[47;30m" # 白底黑字
green_b="[42;30m" # 绿底黑字(移动棋字亮块)
blue_b="[44;37m" # 兰底白字
gray_b="[40;30;5m" # 灰底黑字
gray_w="[40;37;5m" # 灰底白字
black_w="[37;40;0m" # 黑底白字
# 棋盘换色控制变量
brown_b="[43;30m" # 桔黄底黑棋
brown_w="[43;37m" # 桔黄底白棋
mage_b="[45;30m" # 紫底黑棋
mage_w="[45;37m" # 紫底白棋
lt_blue_b="[44;30;5m" # 浅兰底黑棋
lt_blue_w="[44;37;5m" # 浅兰底白棋
kkk()
{
# 棋盘
L 1 22;echo "$gray_b $black_w"
L 2 22;echo "$gray_b ┏┯┯┯┯┯┯┯┯┯┯┯┯┯┓ $black_w"
L 3 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 4 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 5 22;echo "$gray_b ┠┼┼╋┼┼┼┼┼┼┼╋┼┼┨ $black_w"
L 6 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 7 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 8 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 9 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 10 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 11 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 12 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 13 22;echo "$gray_b ┠┼┼╋┼┼┼┼┼┼┼╋┼┼┨ $black_w"
L 14 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 15 22;echo "$gray_b ┠┼┼┼┼┼┼┼┼┼┼┼┼┼┨ $black_w"
L 16 22;echo "$gray_b ┗┷┷┷┷┷┷┷┷┷┷┷┷┷┛ $black_w"
L 17 22;echo "$gray_b $black_w"
}
getchar()
{
key=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2>/dev/null
stty -raw
stty echo
stty $key
}
clear
kkk
L 5 34;echo " 五 子 棋 "
L 10 24;echo "┌────游戏○设定────┐"
L 11 24;echo "│ │"
L 12 24;echo "│ 1_白先走 2_黑先走 [ ] │”
L 13 24;echo “│ │”
L 14 24;echo “└─────────────┘”
L 12 48;echo -n
goo=`getchar`
case $goo in
1) go=”白”;ss=0;sss=0;;
2) go=”黑”;ss=1;sss=1;;
*) clear;exit;;
esac
by=0;bs=0;bsy=0;hy=0;hs=0;hsy=0 #初始化输赢局数
tput civis
help()
{
L 16 3;echo “┏━━━━━━━┓”
L 16 57;echo “┏━━━━━━━┓”
L 17 3;echo “┃ ┃”
L 17 57;echo “┃ ┃”
L 18 3;echo “┃ ┃ ┃ ┃”
L 19 3;echo “┃ 赢盘数: ┃┏━━━━━”$gray_b” m—和为贵 “$black_w”━━━━━┓┃ 赢盘数: ┃”
L 20 3;echo “┃ 输盘数: ┃┃ 友 比 ┃┃ 输盘数: ┃”
L 21 3;echo “┃ ┃┃ 谊 ”$white_b”Press c change color”$black_w” 赛 ┃┃ ┃”
L 22 3;echo “┃ ┃┃ 第 第 ┃┃ ┃”
L 23 3;echo “┃ 最后成绩: ┃┃ 一 二 ┃┃ 最后成绩: ┃”
L 24 3;echo “┗━━━━━━━┛┗━━━━━━━━━━━━━━━━┛┗━━━━━━━┛”
}
init_(){ # 继续棋局初始化
kkk >abc
a1=2
a2=38
b1=52
b2=16
write=$green_b$go$black_w
cat abc
L $a1 $a2;echo $write # 棋子初始位置
ccc=1 #改变颜色次数
color1=`expr substr $gray_b 3 8`;color2=`expr substr $gray_w 3 8` #默认棋子颜色
L 19 13;echo $by;L 19 68;echo $hy
L 20 13;echo $bs;L 20 68;echo $hs
L 23 15;echo $bsy” ”;L 23 70;echo $hsy” ”
}
init_
help
## 棋子移动函数
left(){ ##左移
if [ $a2 -eq 24 ];then a2=24;else a2=`expr $a2 - 2`;fi
sort -t”[" -n +1 abc
L $a1 $a2;echo $write
}
right(){ ##右移
if [ $a2 -eq $b1 ];then a2=$b1;else a2=`expr $a2 + 2`;fi
sort -t”[" -n +1 abc
L $a1 $a2;echo $write
}
down(){ ##下移
if [ $a1 -eq $b2 ];then a1=$b2;else a1=`expr $a1 + 1`;fi
sort -t”[" -n +1 abc
L $a1 $a2;echo $write
}
up(){ ##上移
if [ $a1 -eq 2 ];then a1=2;else a1=`expr $a1 - 1`;fi
sort -t”[" -n +1 abc
L $a1 $a2;echo $write
}
sy(){ # 继续棋局输方先走,统计输赢结果
if [ $qs -eq 7 ];then
go=”黑” #如果白棋赢则下一盘黑先走
run=”白”
bs=`expr $bs + 0`;by=`expr $by + 1`
bsy=`expr $by - $bs`
hy=$bs;hs=$by;hsy=`expr $hy - $hs`
else
go=”白” #如果黑棋赢则下一盘白先走
run=”黑”
hs=`expr $hs + 0`;hy=`expr $hy + 1`
hsy=`expr $hy - $hs`
by=$hs;bs=$hy;bsy=`expr $by - $bs`
fi
}
sy1(){ # 显示输赢结果,统计棋局,询问是否继续
while true;do
L 19 13;echo $by;L 19 68;echo $hy
L 20 13;echo $bs;L 20 68;echo $hs
L 23 15;echo $bsy” ”;L 23 70;echo $hsy” ”
tput bel;tput bel
L 6 28;echo $white_b” “$black_w
L 7 28;echo $white_b” “$run$1″!!! ”$black_w” ”$black_w
L 8 28;echo $white_b” 再来一盘否[y|n]? ”$black_w” ”$black_w
L 9 28;echo $white_b” “$black_w” ”$black_w
L 10 30;echo “ ”
key=`getchar`
case $key in
y)
init_
count=`expr $count + 1`
L 23 36;echo “第 $count 局”
break;;
n)
clear;cat abc
L 7 30;echo $blue_b” ”$black_w
L 8 30;echo $blue_b” “!!!再见!!!” “$black_w” ”$black_w
L 9 30;echo $blue_b” ”$black_w” ”$black_w
L 10 30;echo $blue_b” ”Author: c1l2d3″ ”$black_w” ”$black_w
L 11 30;echo $blue_b” ”$black_w” ”$black_w
L 12 32;echo $black_w” ”$black_w
tput cnorm
rm yyy;exit;;
*);;
esac
done
}
award() #判断输赢函数
{
cat abc|sed -n 18,”$”p|awk -F”;” ‘{print $1,$2,$4}’|sed ’s/^..//’ \
|awk ‘{print $1,$2,substr($3,2,1)}’ >yyy # 计算输赢临时文件
grep “$qs$” yyy|sort -r -n +0 +1|awk ‘$2+=(NR*2)’ \
|uniq -c|awk ‘{print $1}’|grep ‘[5-9]‘ >/dev/null 2>&1
if [ $? -eq 0 ];then sy;sy1 “棋赢啦! ”;fi # 横连子>=5
grep “$qs$” yyy|sort -r -n +1|awk ‘$1+=NR’ \
|uniq -c|awk ‘{print $1}’|grep ‘[5-9]‘ >/dev/null 2>&1
if [ $? -eq 0 ];then sy;sy1 “棋赢啦! ” ;fi # 竖连子>=5
grep “$qs$” yyy|sort -r -n +0 +1|awk ‘$1=$1+$2/2′|sort -r -n \
|awk ‘$2+=(NR*2)’|uniq -c|awk ‘{print $1}’|grep ‘[5-9]‘ >/dev/null 2>&1
if [ $? -eq 0 ];then sy;sy1 “棋赢啦! ”;fi # 右斜连子>=5
grep “$qs$” yyy|sort -r -n +0 +1|awk ‘$1=$1-$2/2′|sort -r -n \
|awk ‘$2+=(NR*2)’|uniq -c|awk ‘{print $1}’|grep ‘[5-9]‘ >/dev/null 2>&1
if [ $? -eq 0 ];then sy;sy1 “棋赢啦! ”;fi # 左斜连子>=5
}
count=1 #局数
while true
do
L 1 4;echo $white_b” 【执白方】 “$black_w
L 4 5;echo $gray_b” a—左移 “$black_w
L 6 5;echo $gray_b” d—右移 “$black_w
L 8 5;echo $gray_b” w—上移 “$black_w
L 10 5;echo $gray_b” s—下移 “$black_w
L 12 5;echo $gray_b” p—落子 “$black_w
L 14 5;echo $gray_b” ]—投降 “$black_w
L 1 62;echo $white_b” 【执黑方】 “$black_w
L 4 63;echo $gray_b” 4—左移 “$black_w
L 6 63;echo $gray_b” 6—右移 “$black_w
L 8 63;echo $gray_b” 8—上移 “$black_w
L 10 63;echo $gray_b” 5—下移 “$black_w
L 12 63;echo $gray_b” 9—落子 “$black_w
L 14 63;echo $gray_b” 0—投降 “$black_w
L 22 1;echo -n
L 23 36;echo “第 $count 局”
cc=`getchar`
case $cc in
a|4)
if [ $ss -eq 0 ] && [ "$cc" = "a" ];then left;fi
if [ $ss -eq 1 ] && [ "$cc" = "4" ];then left;fi;;
d|6)
if [ $ss -eq 0 ] && [ "$cc" = "d" ];then right;fi
if [ $ss -eq 1 ] && [ "$cc" = "6" ];then right;fi;;
s|5)
if [ $ss -eq 0 ] && [ "$cc" = "s" ];then down;fi
if [ $ss -eq 1 ] && [ "$cc" = "5" ];then down;fi;;
w|8)
if [ $ss -eq 0 ] && [ "$cc" = "w" ];then up;fi
if [ $ss -eq 1 ] && [ "$cc" = "8" ];then up;fi;;
m)
run=”此局和棋! “;sy1;;
p|9)
if [ $ss -eq 0 ] && [ "$cc" = "p" ];then
sed -n 18,”$”p abc|grep “\[$a1;$a2" 2>&1
if [ $? -eq 0 ];then L 10 32;echo “ 此处已有棋…”;tput bel;sleep 1
write=$green_b白$black_w
sss=0
else
mm=`L $a1 $a2`[$color2●$black_w
echo $mm>>abc
write=$green_b黑$black_w
sss=1
fi
sort -t"[" -n +1 abc
qs=7
award;tput bel
fi
if [ $ss -eq 1 ] && [ "$cc" = "9" ];then
sed -n 18,”$”p abc|grep “\[$a1;$a2" 2>&1
if [ $? -eq 0 ];then L 10 32;echo “ 此处已有棋…”;tput bel;sleep 1
write=$green_b黑$black_w
sss=1
else
mm=`L $a1 $a2`”[$color1●$black_w"
echo $mm>>abc
write=$green_b白$black_w
sss=0
fi
sort -t"[" -n +1 abc
qs=0
award;tput bel
fi
ss=$sss;; # 落子方不允许再走,等待对方走棋
0|])
if [ "$cc" = "]” ];then go=”白”;run=”白”;bs=`expr $bs + 1`
by=`expr $by + 0`
bsy=`expr $by - $bs`
hy=$bs;hs=$by;hsy=`expr $hy - $hs`
sss=0
else go=”黑”;run=”黑”;hs=`expr $hs + 1`;hy=`expr $hy + 0`
hsy=`expr $hy - $hs`
by=$hs;bs=$hy;bsy=`expr $by - $bs`
sss=1
fi
ss=$sss #谁投降谁下一局先走
sy1 “棋投降啦”;;
c)
md=$ccc # 变换棋盘颜色
if [ $md -eq 1 ];then
def1=`expr substr $gray_b 3 8`;def2=`expr substr $gray_w 3 8`
color1=`expr substr $brown_b 3 6`;color2=`expr substr $brown_w 3 6`
sed ’s/’$def1′/’$color1′/g’ abc|sed ’s/’$def2′/’$color2′/g’ >abc.tmp
mv abc.tmp abc
cat abc
ccc=`expr $ccc + 1`
fi # 桔黄色
if [ $md -eq 2 ];then
def1=`expr substr $brown_b 3 6`;def2=`expr substr $brown_w 3 6`
color1=`expr substr $lt_blue_b 3 8`;color2=`expr substr $lt_blue_w 3 8`
sed ’s/’$def1′/’$color1′/g’ abc|sed ’s/’$def2′/’$color2′/g’ >abc.tmp
mv abc.tmp abc
cat abc
ccc=`expr $ccc + 1`
fi # 浅蓝色
if [ $md -eq 3 ];then
def1=`expr substr $lt_blue_b 3 8`;def2=`expr substr $lt_blue_w 3 8`
color1=`expr substr $mage_b 3 6`;color2=`expr substr $mage_w 3 6`
sed ’s/’$def1′/’$color1′/g’ abc|sed ’s/’$def2′/’$color2′/g’ >abc.tmp
mv abc.tmp abc
cat abc
ccc=`expr $ccc - 3`
fi # 紫色
if [ $md -eq 0 ];then
def1=`expr substr $mage_b 3 6`;def2=`expr substr $mage_w 3 6`
color1=`expr substr $gray_b 3 8`;color2=`expr substr $gray_w 3 8`
sed ’s/’$def1′/’$color1′/g’ abc|sed ’s/’$def2′/’$color2′/g’ >abc.tmp
mv abc.tmp abc
cat abc
ccc=`expr $ccc + 1`
fi # 灰色
L 2 38;echo $write;;
esac
done
#!/bin/sh
#
# Copyright (C), 2007 bug All Rights Reserved
# Title : Dynamic Change Password
# Author : BUG
# File : dch_passwd.sh
# Version : 1.0.0
# Date : 2007-07-22
# Email : efbbb27115@homtail.com
# License : General Public License (GPL) v2
# Description : Dynamic Change Password
#
chuser=user
srcpw=secret
srcpw1=`date +%Y%m%d`
srcpw2=`date +%u`
dstpw=${srcpw1}${srcpw}${srcpw2}
echo $dstpw | passwd $chuser –stdin > /dev/null 2>&1
根据系统时间修改用户密码
srcpw为用户密码,srcpw1,srcpw2为外界影响因素,这里时时间和星期几
可以使用crond每天或每小时修改一次密码,防止被穷举破解
/proc/sys/net/ipv4/icmp_echo_ingnore_all 文件中的0改为1
echo 1 >/proc/sys/net/ipv4/icmp_echo_ingnore_all
统计每行出现o字符的数量
awk -Fo ‘{num=(NF-1);{if(num>1)print NR,”line:”,num}}’ filename
awk ‘{print NR,gsub(/\o/,”o”)}’ filename
在每行前插入行号
awk ‘{print NR,$0}’ urfile
cat -n urfile
在每行前插入字符
sed ’s/.*/string&/’ urfile
cat text.txt | sed “s/\(^\)/YES\1/g”
根据分割符取值
echo “/:string:$1$$CoERg7ynjYLsj2j4glJ34.”|cut -d’:’ -f2
echo “/:string:$1$$CoERg7ynjYLsj2j4glJ34.”|awk -F: ‘{print $2}’
除第一行不打印
cut -d’ ‘ -f2-
awk ‘{$1=”";print}’
sed ’s/^[^[:blank:]]*//’
在大型网站上通常Linux系统的IO会占用非常高是因为频繁的读取文件,而每次读取文件都会更新文件的atime,也就是文件的访问时间,执行时间等。为了避免这一情况可以在fstab或mount中加入noatime选项,下列是实际应用。
在fstab中设置:
LABEL=/ / ext3 defaults 1 1 LABEL=/bak /mnt/bak ext3 defaults,noatime 1 2 LABEL=/boot1 /boot ext3 defaults 1 2 devpts /dev/pts devpts gid=5,mode=620 0 0 tmpfs /dev/shm tmpfs defaults 0 0 LABEL=/home /home ext3 defaults 1 2 proc /proc proc defaults 0 0 sysfs /sys sysfs defaults 0 0 LABEL=/tmp /tmp ext3 defaults 1 2 LABEL=/usr /usr ext3 defaults 1 2 LABEL=/var /var ext3 defaults 1 2 LABEL=SWAP-sda7 swap swap defaults 0 0
mount时的参数:
mount -o noatime -L /bak /mnt/bak
用法:cut -cnum1-num2 filename
说明:显示每行从开头算起 num1 到 num2 的文字。
范例:
shell>> cat example
test2
this is test1
shell>> cut -c0-6 example ## print 开头算起前 6 个字元
test2
this i
cut其实很有用
-c m-n 表示显示每一行的第m个字元到第n个字元。例如:
———file———–
liubi 23 14000
———file———–
# cut -c 3-9,12-20 file
liubi 14000
-f m-n 表示显示第m栏到第n栏(使用tab分隔)。例如:
———file———–
liubi 23 14000
———file———–
# cut -f 1,3 file
liubi 14000
使用|分隔
cut -d’|’ -f2 1.test>2.test
使用:分隔
cut -d’:’ -f2 1.test>2.test