• 关于程序员须知的 linux 基础


    我在 github 上新建了一个仓库 日问,每天一道面试题,有关前端,后端,devops以及软技能,促进职业成长,敲开大厂之门,欢迎交流

    并且记录我的面试经验

    以下是总结的 linux 命令的问题,也欢迎各位补充答案

    01 如何获取一个进程的内存并监控

    更多描述: 在编写脚本时,有时会出现内存过大发生 OOM 的事情,那我们如何得知某个进程的内存?另外又如何监控它

    在 Issue 中交流与讨论: Issue 地址

    通过 ps 可以获知一个进程所占用的内存

    $ ps -O rss -p 3506
      PID   RSS S TTY          TIME COMMAND
     3506  6984 S pts/1    00:00:00 vim
    

    如果要监控内存,肯定使用对进程万能的命令 pidstat (PS: 这名字一听就知道是干嘛的)

    ## -r 显示内存信息
    ## -p 指定 pid
    ## 1: 每个一秒打印一次
    $ pidstat -r -p 3506 1
    Linux 3.10.0-957.21.3.el7.x86_64 (shanyue)      11/04/19        _x86_64_        (2 CPU)
    
    20:47:35      UID       PID  minflt/s  majflt/s     VSZ    RSS   %MEM  Command
    20:47:36        0      3506      0.00      0.00  139940   6984   0.18  vim
    20:47:37        0      3506      0.00      0.00  139940   6984   0.18  vim
    20:47:38        0      3506      0.00      0.00  139940   6984   0.18  vim
    20:47:39        0      3506      0.00      0.00  139940   6984   0.18  vim
    20:47:40        0      3506      0.00      0.00  139940   6984   0.18  vim
    20:47:41        0      3506      0.00      0.00  139940   6984   0.18  vim
    

    当然,也可以使用万能的 htop 命令

    参考: linux 各项监控指标小记

    02 在linux中如何获取登录的用户

    在 Issue 中交流与讨论: Issue 地址

    $ who
    
    $ last
    

    03 linux 中如何打印所有网络接口

    在 Issue 中交流与讨论: Issue 地址

    ifconfig

    ifconfig 是最简单最常用,但是打印信息太多了

    $ ifconfig
    cni0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1450
            inet 10.244.0.1  netmask 255.255.255.0  broadcast 0.0.0.0
            ether 9e:f3:9e:47:9d:55  txqueuelen 1000  (Ethernet)
            RX packets 14733665  bytes 1007493238 (960.8 MiB)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 15040396  bytes 4534954611 (4.2 GiB)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    
    docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
            inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
            ether 02:42:09:fe:1d:e5  txqueuelen 0  (Ethernet)
            RX packets 0  bytes 0 (0.0 B)
            RX errors 0  dropped 0  overruns 0  frame 0
            TX packets 0  bytes 0 (0.0 B)
            TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
    

    netstat

    netstatip 也挺好用,特别是它们还可以打印路由表

    $ netstat -i
    Kernel Interface table
    Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
    cni0             1450 14733471      0      0 0      15040202      0      0      0 BMRU
    docker0          1500        0      0      0 0             0      0      0      0 BMU
    eth0             1500 42833038      0      0 0      40961577      0      0      0 BMRU
    flannel.1        1450  4761436      0      0 0       4091581      0      0      0 BMRU
    lo              65536 376447249      0      0 0      376447249      0      0      0 LRU
    veth2052e2d6     1450  7358995      0      0 0       7518642      0      0      0 BMRU
    veth3190806e     1450  7363232      0      0 0       7510100      0      0      0 BMRU
    

    ip

    $ ip link
    
    $ ip addr
    

    04 linux 有哪些发行版,你最喜欢哪一个

    在 Issue 中交流与讨论: Issue 地址

    05 CoW 策略指什么,docker 中有哪些应用

    在 Issue 中交流与讨论: Issue 地址

    06 如何使用命令查看一个文件有多少字符以及多少行

    在 Issue 中交流与讨论: Issue 地址

    07 如何在 linux 中打印所有环境变量

    在 Issue 中交流与讨论: Issue 地址

    $ printenv
    XDG_SESSION_ID=10536
    HOSTNAME=shanyue
    TERM=xterm-256color
    SHELL=/bin/bash
    HISTSIZE=1000
    SSH_CLIENT=124.200.184.74 16003 22
    SSH_TTY=/dev/pts/0
    

    08 如何用 linux 命令输出文件的特定行

    在 Issue 中交流与讨论: Issue 地址

    使用 sed 或者 head/tail,以要输出第100行为例

    sed -n 100p Readme.md
    
    head -100 Readme.md | tail -1
    

    关于 sed 更多的用法可以参考我的文章: sed 命令详解及示例

    09 cron 表达式 (* 10 * * *) 会如何触发

    在 Issue 中交流与讨论: Issue 地址

    每天十点,每分钟都会执行一次

    10 cron 表达式 (30 10 * * *) 会如何触发

    在 Issue 中交流与讨论: Issue 地址

    每天十点半执行一次

    11 在 linux 中如何查看 cron 执行的情况

    在 Issue 中交流与讨论: Issue 地址

    centos 中,查看日志文件

    $ tail -f /var/log/cron
    Dec  5 19:30:01 8 CROND[24068]: (root) CMD (echo hello, world)
    Dec  5 19:31:01 8 CROND[24084]: (root) CMD (echo hello, world)
    Dec  5 19:31:01 8 CROND[24083]: (root) CMD (echo hello)
    Dec  5 19:32:01 8 CROND[24094]: (root) CMD (echo hello, world)
    Dec  5 19:32:01 8 CROND[24093]: (root) CMD (echo hello)
    Dec  5 19:33:01 8 CROND[24104]: (root) CMD (echo hello, world)
    Dec  5 19:33:01 8 CROND[24103]: (root) CMD (echo hello)
    Dec  5 19:34:01 8 CROND[24113]: (root) CMD (echo hello)
    Dec  5 19:34:01 8 CROND[24114]: (root) CMD (echo hello, world)
    

    12 如何查看一个文件的 inode number

    在 Issue 中交流与讨论: Issue 地址

    可以使用 ls 或者 stat

    $ stat hello.txt
      File: ‘hello.txt’
      Size: 30              Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d    Inode: 917526      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2019-12-10 16:15:55.253325208 +0800
    Modify: 2019-12-10 16:15:52.740653330 +0800
    Change: 2019-12-10 16:15:52.742653069 +0800
    
    $ ls -i hello.txt
    917526 hello.txt
    

    13 文件系统中 mtime 和 ctime 指什么,都有什么不同

    在 Issue 中交流与讨论: Issue 地址

    linux 中,

    • mtimemodified time 指文件内容改变的时间戳
    • ctimechange time 指文件属性改变的时间戳,属性包括 mtime。而在 windows 上,它表示的是 creation time

    所以 ctime 会比 mtime 要大一些,使用 stat 查看文件属性如下

    $ stat hello.txt
      File: ‘hello.txt’
      Size: 30              Blocks: 8          IO Block: 4096   regular file
    Device: fd01h/64769d    Inode: 917526      Links: 1
    Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
    Access: 2019-12-10 16:15:55.253325208 +0800
    Modify: 2019-12-10 16:15:52.740653330 +0800
    Change: 2019-12-10 16:15:52.742653069 +0800
     Birth: -
    

    而 http 服务选择 Last_Modified 时一般会选择 mtime

    14 shell 中 ${} 与 $() 各是什么意思

    在 Issue 中交流与讨论: Issue 地址

    • ${} 变量
    • $() 命令

    15 如何判断端口是否可达

    在 Issue 中交流与讨论: Issue 地址

    使用 nc-z 指测试接口连通性

    nc -vz localhost 443
    

    16 如何禁止服务器被 ping

    在 Issue 中交流与讨论: Issue 地址

    17 在服务器内如何得知自己的公网IP

    在 Issue 中交流与讨论: Issue 地址

    有现成的公网IP服务提供,根据 TCP 连接获得真实 IP 地址

    $ curl ifconfig.me
    
  • 相关阅读:
    IPC框架分析 Binder,Service,Service manager
    Android语音系列:编译Speex框架
    Android核心分析(21)Android应用框架之Android Application
    支付宝 移动支付
    对象、视频、音频的传输RTMP协议研究
    ffmpeg 移植篇笔记
    iPhone UI 设计篇(一)
    Service深入分析
    CSS注意事项
    关于文本断行的样式
  • 原文地址:https://www.cnblogs.com/xianwang/p/12212370.html
Copyright © 2020-2023  润新知