面试先笔试, Linux 考了一个 nginx 的 log 中 ip 出现最多的 10 个 ip 是什么。。。 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
1069401249
V2EX    问与答

面试先笔试, Linux 考了一个 nginx 的 log 中 ip 出现最多的 10 个 ip 是什么。。。

  •  
  •   1069401249 2017-04-06 17:06:33 +08:00 7954 次点击
    这是一个创建于 3189 天前的主题,其中的信息可能已经有所发展或是发生改变。

    真的不会啊,难道你们用 linux 都这么溜吗。

    第 1 条附言    2017-04-07 11:24:10 +08:00
    我面的岗位是后端开发,岗位要求是熟悉常用的 linux 命令,这种命令我没用过,所以 GG 了;发出来算是给大家出了个好题目吧。
    @mcfog 的差不多可以了,但是只找出了出现次数最多的单词,并没有匹配是不是 ip 地址。
    63 条回复    2017-04-08 11:31:26 +08:00
    jackon
        1
    jackon  
       2017-04-06 17:18:44 +08:00 via iPhone
    搜索引擎的爬虫 IP?
    jonah
        2
    jonah  
       2017-04-06 17:20:04 +08:00
    主要是考察一些常用的 shell 文本处理命令,比如 awk 、 sed 、 sort 、 uniq 之类的,可以搞定
    xiaopc
        3
    xiaopc  
       2017-04-06 17:20:37 +08:00 via Android
    cat grep wc?
    noelyang
        4
    noelyang  
       2017-04-06 17:27:11 +08:00
    正则匹配 ip 地址,然后分别计数,最后取计数最多的 ip
    难度不高吧
    1069401249
        5
    1069401249  
    OP
       2017-04-06 17:34:06 +08:00
    @noelyang 思路都知道,但是 linux 命令没用到这么深。。。
    ProjectAmber
        6
    ProjectAmber  
       2017-04-06 17:35:31 +08:00   4
    grep | awk | sort | uniq -c | sort | head -n 10
    Hozzz
        7
    Hozzz  
       2017-04-06 17:36:17 +08:00
    awk
    est
        8
    est  
       2017-04-06 17:36:20 +08:00   11
    cat nginx.log | 实习生
    conoha
        9
    conoha  
       2017-04-06 17:36:58 +08:00
    ...熟悉应该还好?用脚本就是 2L, 如果是程序,那就是过滤每条日志获取 ip , ip2long, 然后就转变成最多的 K 个数了
    imganquan
        10
    imganquan  
       2017-04-06 17:37:29 +08:00
    这是 Linux 基础技能吧。

    这都不会还应聘毛的 Linux 技术岗。。。。
    ProjectAmber
        11
    ProjectAmber  
       2017-04-06 17:38:10 +08:00   1
    上面写错了, sort -> sort -n 。
    不让看手册的话我写不出来, awk 用的不是太熟。
    dremy
        12
    dremy  
       2017-04-06 17:38:44 +08:00
    cat access.log | awk '{print $1}' | sort | uniq -c | sort -r | head -n 10
    拿走不谢
    banditsmile
        13
    banditsmile  
       2017-04-06 17:39:01 +08:00
    cat file_name|awk "{$a[$1]++}END{for (x in $a){print $a[$x],$x}}|sort -k2|head -n 10 "
    伪代码,不能运行,不要尝试

    另外用 grep 和 unique 的都是忽悠
    1069401249
        14
    1069401249  
    OP
       2017-04-06 17:45:00 +08:00
    @imganquan 应聘的后端开发,,按道理说是应该熟悉常用的 linux 命令,只是这题对我来说有点深,所以发出来大家讨论下
    mcfog
        15
    mcfog  
       2017-04-06 17:49:25 +08:00
    有 google 会

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

    没有的话算了还是面别家吧……
    param
        16
    param  
       2017-04-06 18:12:07 +08:00 via Android
    sort | unic -c | sort -n
    relaxgo
        17
    relaxgo  
       2017-04-06 18:12:13 +08:00 via iPhone   1
    直接用 goaccess
    Suddoo
        18
    Suddoo  
       2017-04-06 18:29:47 +08:00
    不 google 还真不会,虽然用 linux 2年了,但上面这几个命令用得很少, bash 语法也不熟悉,因为我的目标职位不是运维。
    U7Q5tLAex2FI0o0g
        19
    U7Q5tLAex2FI0o0g  
       2017-04-06 18:34:48 +08:00
    如果是面试运维,这种答不上来估计会丢人
    单纯面试后端开发,我觉得没必要一定会,当然会更好,但不会还可以 google
    wc951
        20
    wc951  
       2017-04-06 18:52:43 +08:00 via Android
    现在难道都不用日志采集,而是自己去服务器上查日志?
    ihuotui
        21
    ihuotui  
       2017-04-06 19:24:50 +08:00 via iPhone
    @wc951 哈哈,或者面试官就是这样的。
    dongxiaozhuo
        22
    dongxiaozhuo  
       2017-04-06 19:28:02 +08:00 via iPhone
    @1069401249 后端开发,直接上 py 脚本岂不美哉。非要用 shell 的面试,不去也罢。
    fsgmhoward
        23
    fsgmhoward  
       2017-04-06 19:29:08 +08:00 via iPhone
    这个要考正则的吧
    Suddoo
        24
    Suddoo  
       2017-04-06 19:35:38 +08:00
    @wc951 对啊,现在已经不是刀耕火种的年代了啊。
    ming2050
        25
    ming2050  
       2017-04-06 19:41:14 +08:00 via iPhone
    数据量小我能直接写,如果数据量大我宁愿拖到 hdfs 再说
    echo1937
        26
    echo1937  
       2017-04-06 19:43:25 +08:00
    老派 Linux 运维必考内容,他如果没有限定工具的话,写个 py 的实现我觉得也可以给分。
    takeoffyoung
        27
    takeoffyoung  
       2017-04-06 19:43:30 +08:00
    如果考操作的话,上面说了那么多。
    如果考算法的话,什么分治合并的模糊算法,什么 hash+heap sort
    都是可以搜到答案的
    C0VN
        28
    C0VN  
       2017-04-06 20:48:01 +08:00
    如果不是考 shell ,用别的编程语言实现也没什么难度吧。
    ryd994
        29
    ryd994  
       2017-04-06 20:48:34 +08:00 via Android
    @dremy
    @ProjectAmber
    第二个 sort 该 sort -n 吧
    jy01264313
        30
    jy01264313  
       2017-04-06 21:02:55 +08:00
    很全面的一道题目
    q397064399
        31
    q397064399  
       2017-04-06 22:53:56 +08:00
    如果是后端, Python 明显比 shell 有优势,脚本
    yuedingwangji
        32
    yuedingwangji  
       2017-04-07 01:10:34 +08:00
    这太简单了吧 , sort -n | uniq -c | sort -n 或者 awk 然后在 sort -n
    DravenJohnson
        33
    DravenJohnson  
       2017-04-07 02:05:39 +08:00
    为什么都在 sort ,难道这题不是问 IP 地址的么?
    flowfire
        34
    flowfire  
       2017-04-07 07:52:41 +08:00 via iPhone
    @DravenJohnson 23333 我也想知道到底问的是如何获取访问最多的 10 个 ip 还是问的是 10 个 ip 具体是啥
    sunsol
        35
    sunsol  
       2017-04-07 09:03:27 +08:00   1
    @flowfire 我也一样,第一反应是 127.0.0.1 ,然后在想其它 9 个是什么
    ichou
        36
    ichou  
       2017-04-07 09:24:39 +08:00 via iPhone
    @q397064399 然而很多机器上并没有 python
    sunsol
        37
    sunsol  
       2017-04-07 09:36:00 +08:00
    @ichou linux 上没 python 的还真少见
    yaxin
        38
    yaxin  
       2017-04-07 09:39:44 +08:00
    awk '{print $1}' /path/to/nginx | sort | uniq -c | sort -r -n -k 1 | head -10
    用多了就熟练了
    blacklee
        39
    blacklee  
       2017-04-07 09:52:13 +08:00
    楼上 yaxin 的应该是正确答案,里面后一个 sort 我不看文档也不懂。
    awk + sed 就能出一本 500+页的书,但是这个问题所需要的 awk 很基础。
    另外就是多会一些 linux 的基础命令,会对你的实际工作产生相当不错的效率提升。
    Hozzz
        40
    Hozzz  
       2017-04-07 10:16:18 +08:00
    @sunsol 核心主机上没 python 不要太正常,装的东西越少越好越稳定
    est
        41
    est  
       2017-04-07 10:22:58 +08:00   1
    @ichou
    @Hozzz

    来来来,报发行版。我就不相信什么发行版没 python 。
    shyling
        42
    shyling  
       2017-04-07 10:23:35 +08:00
    连各种 docker 的基础镜像里都自带的 python ,不知道有些人的系统是什么
    Hozzz
        43
    Hozzz  
       2017-04-07 10:46:21 +08:00
    @est 刚刚回头看了下,生产主机上全是 AIX 和 HPUX (没有 python ),晚点看看 oracle 一体机_(:з」∠)_
    est
        44
    est  
       2017-04-07 10:58:09 +08:00
    @Hozzz 喂喂喂 UNIX 就不要冒充 linux 好不好。
    momocraft
        45
    momocraft  
       2017-04-07 11:02:17 +08:00
    在 linux 中只见过 coreos 没 python.
    Felldeadbird
        46
    Felldeadbird  
       2017-04-07 11:08:58 +08:00
    运维这个很常用啊。 nginx 和 apache 生成的访问日志 格式都是一致的。楼主面试的运维,这个答不上就不是合格的运维了
    loryyang
        47
    loryyang  
       2017-04-07 11:12:10 +08:00
    必须允许用 man 吧,否则有些参数不常用的,肯定不会记得那么清楚的
    反正很多时候都是 man 一下,再写,那么多参数,如果不是天天用,过几天就忘记了
    killerv
        48
    killerv  
       2017-04-07 11:15:06 +08:00
    很多人没看到,楼主应聘的是后端开发,我觉得如果能用其他后端语言解出来这道题,没有问题,非要用 shell 就有点扯了,毕竟后端不是专业运维。
    Famio
        49
    Famio  
       2017-04-07 11:20:46 +08:00
    好像很多人没看清楼主的问题。
    如果是 access.log 的话,我觉得最多的 10 个 IP 应该是爬虫。
    artandlol
        50
    artandlol  
       2017-04-07 11:22:51 +08:00
    awk '{print $1}' /usr/local/nginx/logs/access.log |sort |uniq -c|sort -rn|head -10
    or
    awk '{a[$1]++} END {for(b in a) print b"\t"a[b]}' /usr/local/nginx/logs/access.log | sort -k2 -nr | head -n 10
    est
        51
    est  
       2017-04-07 11:30:17 +08:00
    @Famio 不一定。我这边是省级移动 4G 出口 IP 。
    ichou
        52
    ichou  
       2017-04-07 11:42:01 +08:00 via iPhone
    @est 我们的生产环境全都没有,因为我们是 docker ,哈哈哈,连续 make gcc 都没有
    jingniao
        53
    jingniao  
       2017-04-07 11:58:00 +08:00
    那么像这样的需求,用 python 写,多久写出来算是合格呢?
    est
        54
    est  
       2017-04-07 12:01:03 +08:00
    @ichou 你们 log 是直接写入 docker 镜像的?
    ichou
        55
    ichou  
       2017-04-07 12:11:28 +08:00 via iPhone
    @est openresty 直接塞进 kibana
    est
        56
    est  
       2017-04-07 12:18:47 +08:00
    @ichou 那还说个毛。。。。你们 docker 里没有 python , docker 外是什么发行版呢? coreos ?
    xiaket
        57
    xiaket  
       2017-04-07 12:19:56 +08:00
    @est 抬杠的话, 有个 alpine... 用这个当 docker base 的话连 bash 都没有... - .-

    当然你应该知道我是 py 粉的...
    est
        58
    est  
       2017-04-07 12:27:13 +08:00
    @xiaket 我说你们 docker 所在服务器上跑的是什么 os ?

    我也用 alpine 啊。
    xiaket
        59
    xiaket  
       2017-04-07 12:35:25 +08:00
    @est 哼,你先说的是发行版...
    Jaylee
        60
    Jaylee  
       2017-04-07 13:48:35 +08:00
    @artandlol 这两种都是正解
    veryyoung
        61
    veryyoung  
       2017-04-07 16:19:17 +08:00
    作为面试官,这道题出了 N 次了,目前为止只遇到一个人做出来。

    然而基本每个人简历上都写了熟练使用 Linux 常用命令。
    ichou
        62
    ichou  
       2017-04-07 19:10:51 +08:00 via iPhone
    @est 哈哈 其实我也是随口一说的,之前我还真不清楚 python 已经成发行版标配了
    wdlth
        63
    wdlth  
       2017-04-08 11:31:26 +08:00
    不应该加钱 ELK 么?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3717 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 10:25 PVG 18:25 LAX 02:25 JFK 05:25
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86