免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

[学习共享] 2013年ChinaUnix社区Shell编程大赛!(获奖名单公布)!  关闭 [复制链接]

论坛徽章:
3
射手座
日期:2013-10-12 12:01:59技术图书徽章
日期:2014-03-06 15:32:30技术图书徽章
日期:2014-03-06 15:42:47
91 [报告]
发表于 2013-06-26 14:29 |只看该作者

第二题

本帖最后由 zzfzqq 于 2013-06-26 14:34 编辑

第二题:
系统环境:centos 6.3
脚本实现:脚本采用对时间点的截取来获取十分钟的数据,利用awk的截取功能,仅对最后10分钟内的数据进行提取并分析,避免对整个大文件的数据遍历,提高效率。并不会出现误差
#!/bin/bash
WLS_MS1=/tmp/wls_ms1.out
TMP_FILE=/tmp/wls.txt
#下面三个变量分别获取的是 脚本执行时日志文件最后的时间: 小时、分钟 和 十分钟前的时间点 MINUTE_STAR
HOUR_END=$(awk END'{print $0}' wls_ms1.out |awk -F':' '{print $1}'|awk  '{print $3,$4}')
MINUTE_END=$(awk END'{print $0}' wls_ms1.out  |awk -F':' '{print $2}')
MINUTE_START=$(($MINUTE_END-10))
res=`grep "$HOUR_END:$MINUTE_START" $WLS_MS1`
#判断刚好十分钟前的内容(准确值)是否找到,如果找不到,将会在for语句中不断增加1(最高是10,因为不会超过10分钟的) 直到找到离准确值最近的十分钟内的内容
if [ $? -eq 0 ]     
then

sed -n "/$HOUR_END:$MINUTE_START/,$ p" $WLS_MS1 > $TMP_FILE

else
        for i in `seq 1 11`
        do
                MINUTE_START2=$(($MINUTE_START+$i))
                rs=`grep "$HOUR_END:$MINUTE_START2" $WLS_MS1`
                if [ $? -eq 0 ]
                then
                        sed -n "/$HOUR_END:$MINUTE_START2/,$ p" $WLS_MS1 > $TMP_FILE
                        exit 0
                else
                        continue
                fi

        done
fi
#对10分钟内增加的内容进行关键字判断,并报警
ERROR=`grep "<Error>" $TMP_FILE`
if [ $? -eq 0 ]
then
        echo "`date +%y%m$d--%H:%M:%S`-Find the < Error > keyword" | mail -s "Find the < Error > keyword" mail@163.com
fi

论坛徽章:
0
92 [报告]
发表于 2013-06-26 15:25 |只看该作者
本帖最后由 helpid 于 2013-07-03 14:58 编辑

第一题: 使用awk可以快速的统计出TOP10的IP地址以及数量
方法1:
  1. awk '{a[$NF]++}END{for(i in a)print i,a[i]}' illegal.log | sort -k2nr | head
复制代码
方法2:
  1. awk '{a[b[$NF]++]}END{for(i=asort(a);i>0;i--)for(j in b)if(b[j]==i)print j" - "b[j]}' illegal.log | head
复制代码
第二题: 个人分析:
这个问题关键在于时间点的控制,通过观察日志,
我发现并不是每一秒或每一分钟都有日志产生的。所以
有可能在日志记录过程中,某个时间点或时间段就没有信息写入日志文件
那么:
A. 如果当前时间之前的10分钟这个时间点在日志中存在,
   则设定查找内容范围从这个时间点开始直到日志文件末尾。
B. 如果当前时间之前的10分钟这个时间点日志中不存在
   则查找距离这个时间点最近的一个时间,并且这个时间点必须为当前时间之前的10分钟以内的时间点
   查找内容内容页从这个时间点开始直到日志文件末尾
   
最后通过使用sed语句来筛选出10分钟以内的日志内容,并进行关键字搜寻
如果在这段日志内容中包含有<Error>关键字就读取出来写入文件再发送邮件
否则就正常退出

B情况暂时没想出来如何实现....   

A情况的处理方法:
第一步:编写脚本文件保存为 log_check.sh
# ========================================

  1. #!/bin/bash
  2. # log_check.sh
  3. stm="`date -d '-10 minutes'`"
  4. tag="<Error>"
  5. file="`mktemp`"
  6. sed -n "/${stm}/,/$/{/${tag}/p}" wls_ms1.out > ${file}
  7. [ -e ${file} ] && mail -s "Error" admin@ChinaUnix.net < ${file}
  8. rm -f  ${file}
复制代码
# =================END====================
第二步:编写计划任务
在当前用户下执行crontab -e添加计划任务:
  1. */10 * * * * /bin/bash log_check.sh
复制代码
第三题:我的思路是通过for循环来跑指定的IP段把所有不需要备份的目录及文件统一写到一个文件中,在执行tar打包时通过 -X参数来排除

  1. #!/bin/bash
  2. # Everyday 00:00:00 Run backup script.
  3. # 0 0 * * * /bin/bash /var/ChinaUnix/AppServerBackup.sh
  4. TODAY=`date +%Y%m%d`
  5. WEEKDAY=`date +%w`
  6. REMOTE_NETMASK=192.168.1  #  子网段
  7. REMOTE_IPS=(3 100)        #  子网IP
  8. REMOTE_BACKUP_PATH=/opt/WebSphere/AppServer/profiles/
  9. LOCAL_SAVE_PATH=/var/ChinaUnix/
  10. EXCLUDE_PATH=(bin logs)
  11. EXCLUDE_FILE=(*.log *heapdump* *.gz *.tar *.zip *.bak)
  12. EXCLUDE_FILENAME=exclude.file
  13. function PrintLogs()
  14. {
  15.         echo -e "<$(date +'%F %T')> $*"
  16. }

  17. function setBackupParts()
  18. {
  19.     case ${WEEKDAY} in
  20.         0)        args='-cjvpPf';;  # Full Backup
  21.     [1-6])        args='-ujvpPf';;  # Update Backup
  22.     esac
  23. }
  24. function setExcludeValue()
  25. {
  26.     if [ ! -e ${EXCLUDE_FILENAME} ]
  27.     then
  28.         echo "${EXCLUDE_PATH[@]} ${EXCLUDE_FILE[@]}" | xargs -n1 > ${EXCLUDE_FILENAME}
  29.     fi
  30. }

  31. function printResult
  32. {
  33.     PrintLogs "==================================="
  34.     PrintLogs "Bacup Success IP Total: ${SUCCESS}"
  35.     PrintLogs "Bacup Failure IP Total: ${FAILURE}"
  36.     if [ ${FAILURE} -gt 0 ]
  37.     then
  38.         for i in ${FAILURE_IPS}
  39.         do
  40.             PrintLogs "${i}"
  41.         done
  42.     fi
  43.     echo "==================================="
  44. }

  45. function backupFile()
  46. {
  47.     echo "Start Backup."
  48.     # 设置备份参数
  49.     setBackupParts
  50.     # 设置排除文件
  51.     setExcludeValue
  52.    
  53.     for((i=${REMOTE_IPS[0]};i<=${REMOTE_IPS[1]};i++))
  54.     do
  55.         ip=${REMOTE_NETMASK}.${i}
  56.         file=${TODAY}_${ip}.tar.bz2

  57.         ssh ${ip} "test -f ${EXCLUDE_FILENAME}"                                          &>/dev/null
  58.         [ $? -ne 0 ] && scp ${EXCLUDE_FILENAME} ${ip}                                    &>/dev/null
  59.         
  60.         ssh ${ip} "test -d ${REMOTE_BACKUP_PATH}"                                        &>/dev/null
  61.         if [ $? -eq 0 ]
  62.         then
  63.             ssh ${ip} "tar ${args} -X ${EXCLUDE_FILENAME} ${file} ${REMOTE_BACKUP_PATH}" &>/dev/null
  64.             scp ${ip}:${file} ${local_save_path}                                         &>/dev/null
  65.             ssh ${ip} "rm -f ${file}"                                                    &>/dev/null
  66.             PrintLogs "${ip} done"
  67.             ((SUCCESS++))
  68.         else
  69.             FAILURE_IPS="${ip} ${FAILURE_IPS} "
  70.             ((FAILURE++))
  71.             continue
  72.         fi
  73.     done
  74.     PrintLogs "Backup End."
  75.    
  76.     # 输出备份结果
  77.     printResult
  78. }

  79. SUCCESS=0      # 操作成功计数器
  80. FAILURE=0      # 操作失败计数器
  81. FAILURE_IPS=""
  82. USED_TIME=0    # 流程耗时计算器

  83. # 执行文件备份
  84. backupFile
复制代码
在当前用户下执行crontab -e添加计划任务:
  1. 0 0 * * * /bin/bash /var/ChinaUnix/AppServerBackup.sh
复制代码
第四题 答:
&& || 是控制操作符,分别代表AND和OR
command2 只有在 command1 返回 0 时才被执行。
command3 只有在 command1 返回非 0 时才被执行。
AND 和 OR 序列的返回状态是序列中最后执行的命令的返回状态。

if then else fi 结构是多路分支条件测试语句, 用来判断命令列表的退出状态码是否为0(0表示"成功", 如果成
功的话, 那么就执行接下来command2命令.如果不成功(退出状态码为非0),就执行else的command3
两者相比,使用控制操作符进行条件测试更为简洁,比较适合于简单的测试语句
if then else fi 结构则具有更好的扩展性能。

第五题:答:
方法1:
  1. echo 1234 | awk '{n=length;s=0;for(i=1;i<=n;i++){s+=substr($0,i,1)}print s}'
复制代码
方法2:
  1. a=1234 && for((i=0;i<${#a};i++));do ((s+=${a:$i:1}));done; echo ${s}
复制代码
第六题:答:
1. 首选在计算之前需要判断给的日期是否有效
   如果输入的日期无效或格式不正确则应该提示错误。
   如果输入的日期是有效日期则算出是这年的第几天。
# =========================  Start  =========================

  1. #!/bin/bash
  2. # Exp: sh caldate.sh 2013-05-23
  3. NormalYear_YearRex='([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})'
  4. NormalYear_MonthDayRex='((0[13578]|1[02])[-/](0[1-9]|[12][0-9]|3[01])|(0[469]|11)[-/](0[1-9]|[12][0-9]|30)|02[-/](0[1-9]|1[0-9]|2[0-8]))'
  5. LeapYear_YearRex='(([0-9]{2})(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[3579][26])00)'
  6. LeepYear_MonthDayRex='(02[-/]29)'       
  7. DateRex="^(${NormalYear_YearRex}[-/]${NormalYear_MonthDayRex}|${LeapYear_YearRex}[-/]${LeepYear_MonthDayRex})$"
  8. function calDateDays()
  9. {
  10.         echo "$*" | awk -F'[-/]' -v Rex="${DateRex}" --re-interval '
  11.                 {
  12.                     if($0~Rex)
  13.                     {
  14.                         tstamp=mktime($1" "$2" "$3" 00 00 00");
  15.                         print strftime("%j",tstamp);
  16.                     }
  17.                     else
  18.                     {
  19.                         print "invalid date: "$0;
  20.                     }
  21.                 }' | sed 's/^0//'
  22. }
  23. dt="$*"
  24. calDateDays ${dt}
复制代码
# =========================  END  =========================
2. 首选在计算之前需要判断给的日期是否有效
   如果输入的日期无效或格式不正确则应该提示错误。
   如果输入的日期是有效日期则算出是这年的第几天。
   时间偏移值可以是 [+-]Nday.
   + 代表未来的时间 - 代表之前的时间
   N 为任意整数均可
# =========================  Start  =========================

  1. #!/bin/bash
  2. # Exp: sh caldate.sh 2013-03-01 -1day
  3. YearRex='([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]|[0-9][1-9][0-9]{2}|[1-9][0-9]{3})'
  4. MonthDayRex='((0[13578]|1[02])[-/](0[1-9]|[12][0-9]|3[01])|(0[469]|11)[-/](0[1-9]|[12][0-9]|30)|02[-/](0[1-9]|1[0-9]|2[0-8]))'
  5. LeapYearRex='(([0-9]{2})(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[3579][26])00)'
  6. LeepMonthDayRex='(02[-/]29)'       
  7. DateRex="^(${YearRex}[-/]${MonthDayRex}|${LeapYearRex}[-/]${LeepMonthDayRex})$"

  8. function calDate()
  9. {
  10.         case "$2" in
  11.                 yesterday)      setDays='-1';;
  12.                 tomorrow)       setDays='+1';;
  13.                 [+-][0-9]*day)  setDays=${2/day/};;
  14.                 *)              echo "Offset Days Input Error!"
  15.                                 exit 1;;
  16.         esac

  17.         echo "$1" | awk -F'[-/]' -v Rex="${DateRex}" -v offset="${setDays}" --re-interval '
  18.                 {
  19.                         if($0~Rex)
  20.                         {
  21.                                 OFS=substr($0,5,1);
  22.                                 tstamp=mktime($1" "$2" "$3+offset" 00 00 00");
  23.                                 yyyy=strftime("%Y",tstamp);
  24.                                 mm=strftime("%m",tstamp);
  25.                                 dd=strftime("%d",tstamp);
  26.                                 print yyyy,mm,dd;
  27.                         }
  28.                         else
  29.                         {
  30.                                 print "invalid date: "$0
  31.                         }
  32.                 }'
  33. }
  34. dt="$1"
  35. offset="$2"
  36. calDate ${dt} ${offset}
复制代码
# =========================  END  =========================

第七题:答:
九宫格排列如下:
8 6 9
4 2 5  
7 3 1

8,2,1的位置固定不变;6与4、9与7、5与3 的位置可互换

解题思路:
1. 题目要求六个三位数都必须是奇数, 相加总和是 4446
   1-9当中, 奇数为 1 3 5 7 9 总和是25
            偶数为 2 4 6 8   总和是20
2. 由于总数4446的个位是6,且六个三位数都是奇数,而1-9当中只有5个奇数。总和为25(个位为5)
   要是总数的个位为6,则只有 5 + 1 = 6
   这样 第三行第三列就必定为1
   由于个位数全为奇数,故九宫格中除了第一行第一列、第一行第二列、第二行第一列、第二行第二列
   这四个交叉位 为偶数外,其余的 第一行第三列、第二行第三列 第三行第一列、第三行第二列、第三行第三列
   这五个交叉位都为奇数。除去第三行第三列已确定为1外。剩下的第一行第三列、第二行第三列 第三行第一列、第三行第二列
   有可能为3 5 7 9,
3. 通过分析总数4446是一个较大数。按照百位优先大数字的原则,我们把9与7放在百位。这样就会有1个900、1个700以上的数字
4. 由于在九宫格中存在3个交叉位的数数字会出现2次。偶数中有可能会是 2,4,6,8
   而2468 中8最大。故8应该放在 会出现2次的交叉位上,且为百位。那么 第一行第一列就非8莫属,这样就会有2个 800以上的数字
   而最小的偶数则放置在九方格最中间位置。
5. 最后进行计算。只要8,2,1的位置固定不变,6与4、9与7、5与3 的位置进行互换得出的总数均为4446.
   
第八题: 答:可以刪除!
bash中使用IFS(Internal Field Separator)这个变量用作shell指定的缺省域分隔符
原理上来说域分隔符可以为任意字符,但通常默认情况下IFS=" \n\t",即空格、新行、或tab键
rm指令中使用的"*"在這裡是作為一個通配符來使用,可以匹配包含空格的文件
所以"rm *"指令時可以刪除文件名包含空格的文件的。

第九题:不是很清楚,求指教!

第十题:
1.  列出当前目录下的非 20130605开头的文件
  1. ls | grep -v ^20130605
复制代码
2.

  1. #!/bin/bash
  2. # Exp sh prodiff.sh
  3. # 2. 将文件名中所有的空格, []去掉。
  4. for a in dirA/* dirB/*;do b="${a//[] []/}";[ "${a}" != "${b}" ] && mv "${a}" "${b}";done

  5. filesA=(`ls dirA | grep -E '.(che|XQF)`)
  6. for fileA in ${filesA[@]}
  7. do
  8.     filesB=(`ls dirB | grep -E '.(che|XQF)`)
  9.     for fileB in ${filesB[@]}
  10.     do
  11.         if [ "${fileA}" == "${fileB}" ]
  12.         then
  13.             # 3. 删除 dirA 下与 dirB 下重复的.che或.XQF文件
  14.             rm -f dirA/${fileA} dirB/${fileB}
  15.         else
  16.             # 4. 删除.XQF对应的.che文件
  17.             if [ ".${fileA##*.}" == ".XQF" ]
  18.             then
  19.                 a1=`echo ${filesA[@]}| xargs -n1 | grep ${fileA%%.*}.che`
  20.                 [ -n "${a1}" ] && rm -f dirA/${a1}
  21.                 b1=`echo ${filesB[@]}| xargs -n1 | grep ${fileA%%.*}.che`
  22.                 [ -n "${b1}" ] && rm -f dirB/${b1}
  23.             fi
  24.             
  25.             if [ "$.{fileB##*.}" == ".XQF" ]
  26.             then
  27.                 b2=`echo ${filesB[@]}| xargs -n1  | grep ${fileB%%.*}.che`
  28.                 [ -n "${b2}" ] && rm -f dirB/${b2}
  29.                 a2=`echo ${filesA[@]}| xargs -n1  | grep ${fileB%%.*}.che`
  30.                 [ -n "${a2}" ] && rm -f dirA/${a2}
  31.             fi
  32.         fi
  33.     done
  34. done
复制代码

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
93 [报告]
发表于 2013-06-26 15:30 |只看该作者
helpid 发表于 2013-06-26 15:25
第一题: 使用awk可以快速的统计出TOP10的IP地址以及数量
方法1:方法2:第二题: 个人分析:
这个问题关 ...


感谢参与~

论坛徽章:
0
94 [报告]
发表于 2013-06-26 20:50 |只看该作者
第二题:
  1. #!/bin/bash
  2. #该脚本第一次运行时只会去搜寻前1024字节的内容中有没有<Error>,
  3. #在后续运行过程中才能正确监测前10分钟以内的错误信息。

  4. file=$1
  5. if [ -z "$file" -o ! -f "$file" ]
  6. then
  7.     echo "You must provide logfile."
  8.     exit 1
  9. fi

  10. #基本思路:
  11. #1.用一个隐藏文件存放上一次统计时日志文件的容量。
  12. #2.每次用tail取出新增加容量大小的文本进行处理。

  13. #ADJUST_SIZE用于校准容量计算上可能出现的偏差
  14. ADJUST_SIZE=1024
  15. TEN_MINUTES=600

  16. dir=$(dirname $file)
  17. base=$(basename $file)
  18. #隐藏文件名,wls_ms1.out文件对应的隐藏文件名为.wls_ms1.out.size
  19. sizefile="${dir}/.${base}.size"
  20. #echo "sizefile=$sizefile"

  21. #如果该文件还不存在,则创建该文件。
  22. if [ ! -s $sizefile ]
  23. then
  24.     du -b $file | cut -f 1 > $sizefile
  25. fi

  26. oldsize=$(cat $sizefile)
  27. newsize=$(du -b $file | cut -f 1)
  28. tailsize=$(($newsize - $oldsize + $ADJUST_SIZE))
  29. #echo "oldsize=$oldsize,newsize=$newsize,tailsize=$tailsize"

  30. #记录开始搜索之前的时间
  31. current_time=$(date '+%s')
  32. ten_minutes_ago=$(($current_time - $TEN_MINUTES))
  33. errors=$(tail -c $tailsize $file | grep '<Error>')
  34. if [ -z "$errors" ]
  35. then
  36.     exit 0
  37. fi

  38. #存放邮件的临时文件
  39. msg=$(mktemp)
  40. echo $errors | while read
  41. do
  42.     entry_time=$(echo $REPLY | sed 's/^<\([^>]\+\)>.*/\1/')
  43.     t=$(date -d "$entry_time" "+%s")
  44.     if [ "$t" -gt "$ten_minutes_ago" -a "$t" -le "$current_time" ]
  45.     then
  46.          echo "$REPLY" >> $msg
  47.     fi
  48. done
  49. if [ -s "$msg" ]
  50. then
  51.     cat $msg | mail -s "Got <Error>" admin@ChinaUnix.net
  52. fi

  53. #删除临时文件
  54. [ -f "$msg" ] && rm -f $msg
复制代码

论坛徽章:
0
95 [报告]
发表于 2013-06-27 09:53 |只看该作者
第一题 命令
cut -f 5- illegal.log | sort | uniq -c | sort -r | head -n 10 > result.txt

论坛徽章:
0
96 [报告]
发表于 2013-06-27 10:47 |只看该作者
本帖最后由 luyanfei78 于 2013-06-27 11:23 编辑

第三题:
  1. # cat excludes.list
  2. bin/*
  3. logs/*
  4. *.log
  5. *heapdump*
  6. *.gz
  7. *.tar
  8. *.zip
  9. *.bak
  10. excludes.list
复制代码
  1. #!/bin/bash
  2. #本脚本使用了GNU tar的增量备份功能,运行时需要保证远程主机上安装的是GNU tar。

  3. LOCAL=/var/ChinaUnix
  4. REMOTE=/opt/WebSphere/AppServer/profiles

  5. for num in $(seq -s' ' 3 100)
  6. do
  7.     host=192.168.1.${num}
  8.     echo "Connecting $host ..."
  9.     echo "Distributing excludes.list file to $host."
  10.     cat $LOCAL/excludes.list | ssh $host "cat > ${REMOTE}/excludes.list"
  11.     #如果是星期天,那么删除远程主机上的list.snap文件,这样产生的备份会是全备份。
  12.     [ $(date "+%u") -eq 7 ] && ssh $host "rm -f ${REMOTE}/list.snap"
  13.     #执行备份
  14.     echo "Now begin backup, please wait ..."
  15.     ssh $host "tar -C $REMOTE -c -z -g ${REMOTE}/list.snap ." > $LOCAL/backup.$(date "+%F").tar.gz
  16.     echo "Backup ended."
  17. done
复制代码

论坛徽章:
3
射手座
日期:2013-10-12 12:01:59技术图书徽章
日期:2014-03-06 15:32:30技术图书徽章
日期:2014-03-06 15:42:47
97 [报告]
发表于 2013-06-27 10:50 |只看该作者
本帖最后由 zzfzqq 于 2013-06-27 10:50 编辑

系统环境:centos 6.3
第五题 脚本:
注释:利用shell数组来计算任意多位数的各位相加之和。第一个for循环将多位数转为数组存储,第二个for循环则取出数组的值加以计算最后得到结果。
#!/bin/bash
echo "Please enter any digits:"
read num
length=`expr length $num`
for i in `seq 1 $length`
do
        a[$i]=`echo "$num" |cut -c "$i"`
done
sum=0
for  j  in  `seq 1 $length`
do
        sum=`echo $((${a[$j]}+$sum))`
done
echo "Sum: $sum"

论坛徽章:
0
98 [报告]
发表于 2013-06-27 10:54 |只看该作者
第四题:
两种写法在逻辑上是等价的。不过第一种写法(command1 && command2 || command3)中的命令不能太过复杂,如果里面再使用管道,会让这种写法变得非常难以阅读。因此第一种写法只适合命令相对很简单的情形。
第五题:
  1. echo $(($(echo -n '1234' | sed 's/\([0-9]\)/\1+/g') 0))
复制代码
把里面的数字换掉也能计算出结果。

论坛徽章:
0
99 [报告]
发表于 2013-06-27 16:05 |只看该作者

来晚了,捧捧场
第一题
  1. personball@ubuntu:~/Downloads$ awk '{a[$6]++}END{for(i in a)print i" "a[i]}' illegal.log |sort -rnk2|head
  2. 220.250.52.66 70
  3. 220.250.58.170 36
  4. 220.250.58.171 30
  5. 220.250.52.90 29
  6. 220.250.58.172 28
  7. 142.4.117.83 27
  8. 111.73.45.13 23
  9. 222.186.26.26 22
  10. 74.91.23.27 19
  11. 91.237.249.67 16
  12. personball@ubuntu:~/Downloads$
复制代码

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
100 [报告]
发表于 2013-06-27 17:15 |只看该作者
这个贴子的访问量增加得真快
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP