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 sys

def printstart(n):              #打印指定個*符號
    for i in xrange(n):
        sys.stdout.write("*")

def main():
    alist = sys.argv[1:]            #將參數放入alist
    for i in xrange(len(alist)):    #str轉換爲int
        alist[i] = int(alist[i])

    for i in xrange(len(alist)):
        printstart(alist[i])
        print


if __name__ == "__main__":
    main()

知識點:

    sys.agrv 是一個list,保存程序名和所有參數的值


shell實現

root@vmUbu:/home/dell/shell# cat shift.sh 
#/bin/bash


while [ $# -ne 0 ]
do

        for i in `seq $1`
        do
                echo -n "*"
        done
        echo
        shift 
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 sys

ip_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] = 1
        else:
            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 random

def main():
    seed = "!@#$%&_1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    seedupper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    seedlower = "abcdefghijklmnopqrstuvwxyz"
    seednum = "1234567890"
    upper = random.choice(seedupper)
    lower = random.choice(seedlower)
    num = random.choice(seednum)

    n = 8
    passwdtmp = ""
    for i in xrange(n-3):
        passwdtmp += random.choice(seed)

    passwd = upper + lower +num + passwdtmp
    print passwd


if __name__ == "__main__":
    main()

shell實現

root@vmUbu:/home/dell/shell# vim randompasswd.sh
echo $n

#/bin/bash


read -p "input a number:" n
if [ $n -le 6 ]
then
        echo "Error,input a number great than 6."
        exit
fi

upper=`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$num

let n=$n-3
for i in `seq $n`
do
        char=`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#


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章