V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
1069401249
V2EX  ›  问与答

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

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

    真的不会啊,难道你们用 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 语法也不熟悉,因为我的目标职位不是运维。
    littleylv
        19
    littleylv  
       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 对啊,现在已经不是刀耕火种的年代了啊。
    mringg
        25
    mringg  
       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
    都是可以搜到答案的
    xavierskip
        28
    xavierskip  
       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   ·   实用小工具   ·   1032 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:46 · PVG 04:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.