2017拼多多校园招聘-系统运维工程师


说明:水平有限仅供参考



  1. 查找当前目录下文件大小大于100k的文件,并且修改日期为3天内的文件,并将其移动到/tmp

方法一:find for

for i in `find . -type f -size +100c`;do mv $i /tmp;done

方法二:find exec,find xargs

find . -type f -size +100c -exec mv {} /tmp/ \;find . -type f -size +100c  -mtime +3 |xargs -I '{}' mv {} /tmp/a


方法三:find awk

find . -type f -size +100c -mtime +3 |xargs -I '{}' ls {} | awk '{print "mv " $0 " /tmp/" }' |bash

知识点:

    find中-exec与xargs的使用

    -size    +表示大于,单位c表示k,m表示M

    mtime    +表示多少天前,-表示多少天内



2.打印*的图形,说明:执行./function 1 2 3 4 2 4,打印参数对应数字个*符号,例如

*

**

***

****

**

****

答:

python实现

# -*- coding:utf-8 -*-import sysdef printstart(n):              #打印指定个*符号for i in xrange(n):sys.stdout.write("*")def main():alist = sys.argv[1:]            #将参数放入alistfor i in xrange(len(alist)):    #str转换为intalist[i] = int(alist[i])for i in xrange(len(alist)):printstart(alist[i])printif __name__ == "__main__":main()

知识点:

    sys.agrv 是一个list,保存程序名和所有参数的值


shell实现

root@vmUbu:/home/dell/shell# cat shift.sh 
#/bin/bashwhile [ $# -ne 0 ]
dofor i in `seq $1`doecho -n "*"doneechoshift 
done

测试

root@vmUbu:/home/dell/shell# ./shift.sh 1 2 3 4 2 4
*
**
***
****
**
****
root@vmUbu:/home/dell/shell#

知识点

    $1    第一个参数的值

    $#    参数的个数

    $@    所有参数

    shift   向前移动一个参数


3.打印access.log 排名前10的ip,和对应的user agent数

答:


shell实现

   #awk '{print $1}' access.log |sort |uniq -c|sort -rnk 1 |head -n 10

   #cat access.log |awk '{a[$1]++}END{for(i in a) print i,a[i]}' |sort -rnk 2 |head -n 10

    疑问:对应user agent统计呢?

python实现

说明python实现优点麻烦,仅当练习之目的。

import sysip_dict={}filename = "access.log"
with open(filename, "rb") as rf:for line in rf.readlines():ip = str(line.strip("\n").split(" ")[0])if  ip not in ip_dict:ip_dict[ip] = 1else:ip_dict[ip] += 1
#按值排序
sortedDict = sorted(ip_dict.iteritems(),key=lambda ip_dict:ip_dict[1],reverse=True)
for key,value in sortedDict:print key, value

测试

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/HuaweiExcercise/mytest.py

10.9.40.134 16

10.9.40.135 6

10.9.40.131 2


Process finished with exit code 0




4.输出随机密码,密码长度必须大于6,必须包括至少一个大写,至少一个小写,至少一个数字


python实现

# -*- coding:utf-8 -*-import sys
import randomdef main():seed = "!@#$%&_1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"seedupper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"seedlower = "abcdefghijklmnopqrstuvwxyz"seednum = "1234567890"upper = random.choice(seedupper)lower = random.choice(seedlower)num = random.choice(seednum)n = 8passwdtmp = ""for i in xrange(n-3):passwdtmp += random.choice(seed)passwd = upper + lower +num + passwdtmpprint passwdif __name__ == "__main__":main()

shell实现

root@vmUbu:/home/dell/shell# vim randompasswd.sh
echo $n#/bin/bashread -p "input a number:" n
if [ $n -le 6 ]
thenecho "Error,input a number great than 6."exit
fiupper=`tr -dc "A-Z" < /dev/urandom  |head -c 1`
lower=`tr -dc "a-z" < /dev/urandom  |head -c 1`
num=`tr -dc "0-9" < /dev/urandom  |head -c 1`passwd=$upper$lower$numlet n=$n-3
for i in `seq $n`
dochar=`tr -dc "[A-Z,a-z,0-9,!@#$%^&]" < /dev/urandom  |head -c 1`passwd=$passwd$char
done
echo $passwd

测试

root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:8
Jy9kRBHC
root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:9
Nj7lh0Ph#
root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:10
He8I&eWzXu
root@vmUbu:/home/dell/shell# ./randompasswd.sh 
input a number:5
Error,input a number great than 6.
root@vmUbu:/home/dell/shell#


转载于:https://blog.51cto.com/237085/1962162


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部