public:it:linux:maintain

这是本文档旧的修订版!


Maintain

  • 日志:utmp, wtmp, btmp
    • utmp maintains a full accounting of the current status of the system, system boot time (used by uptime), recording user logins at which terminals, logouts, system events etc.
    • wtmp acts as a historical utmp
    • btmp records failed login attempts
  • 登录记录last,lastb:https://linux.die.net/man/1/last
  • man bash
  • bash shell 脚本教程:Advanced Bash-Scripting Guide包含很多示例!:-O
  • fish shell a fully-equipped command line shell (like bash or zsh) that is smart and user-friendly
  • 输入命令, 按下 Alt-# ,命令被注释, 可以不被执行但保存在命令历史中.
  • 使用重定向到标准输出和标准错误 some-command >logfile 2>&1
  • 在bash输入一个Tab字符, 可以先按Ctrl-V,再按Tab键,就可以。当然,也可以使用$’\t’
  • Expect 自动输密码Expect
  • 查找满足两个关键字A与B(有先后)的上下十行 grep -E 'A.*B' -C 10
  • 查找A或B grep -E 'A|B'
  • 统计tcp连接数
    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
  • 查看端口监听 ss -ln
  • 查看监听进程 netstat -lntp
  • 防火墙 iptables
  • 临时修改DNS, 实时生效:
     sudo vim /etc/resolv.conf
    # 然后按以下方式添加或修改
    nameserver 8.8.8.8
  • 永久修改DNS:
     sudo vim /etc/resolvconf/resolv.conf.d/base
    # 然后按以下方式添加或修改
    nameserver 8.8.8.8
  • 重启网络:
    sudo service networking restart 
  • 路由操作命令: route, 具体 man 查看. 显示路由:route -n
  • arp 查看 arp -an
  • 查看对方是否开了端口 nc -v <ip> <port>
    • 批量查询 nc -zv 192.168.0.189 2000-4000
  • DNS linux下DNS解析(nslookup、dig、host) dig指令挺好用的
  • 查看ip ip ahostname -I
  • mtr 可查看链路上的链接情况
  • 测网络带宽与丢包情况 iperf 使用
    iperf -s 
    iperf -c <ip> -p 5201 -i 1 -t 10 -b 90m -V -R -u
  • udhcpc:dhcp 客户端命令行工具
  • 参数:
    -t, --table table 对指定的表 table 进行操作, table 必须是 raw, nat,filter,mangle 中的一个。如果不指定此选项,默认的是 filter 表。
     
    # 通用匹配:源地址目标地址的匹配
    -p:指定要匹配的数据包协议类型;
    -s, --source [!] address[/mask] :把指定的一个/一组地址作为源地址,按此规则进行过滤。当后面没有 mask 时,address 是一个地址,比如:192.168.1.1;当 mask 指定时,可以表示一组范围内的地址,比如:192.168.1.0/255.255.255.0。
    -d, --destination [!] address[/mask] :地址格式同上,但这里是指定地址为目的地址,按此进行过滤。
    -i, --in-interface [!] <网络接口name> :指定数据包的来自来自网络接口,比如最常见的 eth0 。注意:它只对 INPUT,FORWARD,PREROUTING 这三个链起作用。如果没有指定此选项, 说明可以来自任何一个网络接口。同前面类似,"!" 表示取反。
    -o, --out-interface [!] <网络接口name> :指定数据包出去的网络接口。只对 OUTPUT,FORWARD,POSTROUTING 三个链起作用。
     
    # 查看管理命令
    -L, --list [chain] 列出链 chain 上面的所有规则,如果没有指定链,列出表上所有链的所有规则。
     
    # 规则管理命令
    -A, --append chain rule-specification 在指定链 chain 的末尾插入指定的规则,也就是说,这条规则会被放到最后,最后才会被执行。规则是由后面的匹配来指定。
    -I, --insert chain [rulenum] rule-specification 在链 chain 中的指定位置插入一条或多条规则。如果指定的规则号是1,则在链的头部插入。这也是默认的情况,如果没有指定规则号。
    -D, --delete chain rule-specification -D, --delete chain rulenum 在指定的链 chain 中删除一个或多个指定规则。
    -R num:Replays替换/修改第几条规则
     
    # 链管理命令(这都是立即生效的)
    -P, --policy chain target :为指定的链 chain 设置策略 target。注意,只有内置的链才允许有策略,用户自定义的是不允许的。
    -F, --flush [chain] 清空指定链 chain 上面的所有规则。如果没有指定链,清空该表上所有链的所有规则。
    -N, --new-chain chain 用指定的名字创建一个新的链。
    -X, --delete-chain [chain] :删除指定的链,这个链必须没有被其它任何规则引用,而且这条上必须没有任何规则。如果没有指定链名,则会删除该表中所有非内置的链。
    -E, --rename-chain old-chain new-chain :用指定的新名字去重命名指定的链。这并不会对链内部造成任何影响。
    -Z, --zero [chain] :把指定链,或者表中的所有链上的所有计数器清零。
     
    -j, --jump target <指定目标> :即满足某条件时该执行什么样的动作。target 可以是内置的目标,比如 ACCEPT,也可以是用户自定义的链。
    -h:显示帮助信息;
  • 基本参数
参数 作用
-P 设置默认策略:iptables -P INPUT (DROP ACCEPT)
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外。
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如tcp,udp,icmp
–dport num 匹配目标端口号
–sport num 匹配来源端口号
  •  # ┌───────────── min (0 - 59)
     # │ ┌────────────── hour (0 - 23)
     # │ │ ┌─────────────── day of month (1 - 31)
     # │ │ │ ┌──────────────── month (1 - 12)
     # │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to Saturday, or use names; 7 is Sunday, the same as 0)
     # │ │ │ │ │
     # │ │ │ │ │
     # * * * * *  user command to execute
  • */2,表示每2单位执行,比如 0 */2 * * *表示每两小时执行
  • 0 10-22/2 * * *表示在每天10-22时之间每2小时执行
  • 0 2,8-10,12 * * * 表示每天2点,8点,9点,10点,12点0分执行
  • 日志压缩/删除
  • 时间同步服务 RFC1305,RFC5905,RFC7822
  • stratum 层级最多到16(两比特), 所以客户端不会同步层级为16的时间。
  • 手动同步: ntpdate <ip>, 可用来测试,日常使用如果开启了ntp服务就不需要手动。
  • 引用自鸟哥私房菜: ntpq -p可以列出目前我們的 NTP 與相關的上層 NTP 的狀態,
    [root@www ~]# ntpq -p
         remote           refid      st t when poll reach   delay   offset  jitter
    ==============================================================================
    *tock.stdtime.go 59.124.196.87    2 u   19  128  377   12.092   -0.953   0.942
    +59-124-196-83.H 59.124.196.86    2 u    8  128  377   14.154    7.616   1.533
    +59-124-196-84.H 59.124.196.86    2 u    2  128  377   14.524    4.354   1.079

    上頭的幾個欄位的意義為:

    • remote:亦即是 NTP 主機的 IP 或主機名稱囉~注意最左邊的符號
      • 如果有『 * 』代表目前正在作用當中的上層 NTP
      • 如果是『 + 』代表也有連上線,而且可作為下一個提供時間更新的候選者。
    • refid:參考的上一層 NTP 主機的位址
    • st:就是 stratum 階層囉!
    • when:幾秒鐘前曾經做過時間同步化更新的動作;
    • poll:下一次更新在幾秒鐘之後;
    • reach:已經向上層 NTP 伺服器要求更新的次數
    • delay:網路傳輸過程當中延遲的時間,單位為 10^(-3) 秒
    • offset:時間補償的結果,單位與 10^(-3) 秒
    • jitter:Linux 系統時間與 BIOS 硬體時間的差異時間, 單位為 10^(-3) 秒。
  • ntp server 的配置,以本地时间提供同步服务的写法:
    server 127.127.1.0
    fudge 127.127.1.0 stratum 10

    但如果同时配置有其它上级server, 则需等待差不多5分钟,即 ntpq -p 里 LOCAL 的 reach 次数达到64次 (64秒*5=320秒); LOCAL 前出现 * 号 才能提供下级同步。

  • 可使用 lscpu 命令来查看;
    CPU(s)                 32  // 逻辑cpu个数,thread * core * socket
    Thread(s) per core:    2   // cpu 每核线程数
    Core(s) per socket:    8   // cpu 核数
    Socket(s):             2   // cpu 卡槽个数,即cpu硬件个数
  • cpu个数
    #查看物理CPU的个数
    cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
    #查看逻辑CPU的个数
    cat /proc/cpuinfo | grep "processor" | wc -l
    #查看CPU是几核
    cat /proc/cpuinfo | grep "cores" | uniq
    #查看CPU的主频
    cat /proc/cpuinfo | grep MHz | uniq 
  • 负载警惕值: 负载值/逻辑CPU个数 > 0.7
  • top 结果中按 1 可显示多核CPU各核数据。 具体涵义:
        0.3% us — 用户空间占用CPU的百分比。
        0.0% sy — 内核空间占用CPU的百分比。
        0.0% ni — 改变过优先级的进程占用CPU的百分比
        99.7% id — 空闲CPU百分比
        0.0% wa — IO等待占用CPU的百分比
        0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
        0.0% si — 软中断(Software Interrupts)占用CPU的百分比
  • top -H -p <pid> 可以查看指定进程各线程占用资源
  • 时区选择 (详见 timezone setting in linux:
    • tzselect 只是方便你查看时区选项,并不会设置。
    • 一般可手动修改 /etc/localtime, /etc/timezone。修改 /etc/localtime 的方法可直接 link 到指定时区文件,时区文件可在 /usr/share/zoneinfo/目录下查找。
      $ sudo unlink /etc/localtime 
      $ sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    • ubuntu 可直接使用命令
      sudo dpkg-reconfigure tzdata 
  • unix timestamp转北京时间:date -d@1372654714 '+%Y-%m-%d %H:%M:%S'
  • 北京时间转unix timestamp:date -d '2013-07-01 12:58:34' '+%s'
  • GPT:全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区结构。它是可扩展固件接口标准的一部分,用来替代BIOS中的主引导记录分区表。 传统的主启动记录 (MBR) 磁盘分区支持最大卷为 2.2 TB (terabytes) ,每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)。 与MBR 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节 (exabytes,1EB=10^6TB) 的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。

  • parted 指令, 参考说明

    • 在硬盘容量大于2Tb的时候无法使用 fdisk 进行分区的管理
    • parted /dev/sdx
    • (parted) mktable 新建分区表
    • gpt 指定 gpt 类型
    • (parted) print 查看结果
  • 自动挂载 /etc/fstab 参考此博文
  • 查看文件夹占用空间:du -s -h folder, 或者使用 ncdu
  • 列出层数1的子文件夹及指定文件夹的空间占用:du -d 1 -h folder
  • 排序: sort 具体看man sort
  • 使用 man ascii 来查看 ASCII
  • 查看二进制文件,使用hd命令
  • 查看磁盘分配:df -ahT
  • 定时一次性任务: at命令, 具体看man at
  • 文件同步或备份, tar -zcf每次打的包的MD5都不同, 因为记录了当前压缩时间;不压缩直接tar -cf打包则OK, 但是文件内容一样但 mtime 改变仍然会改变打包后文件 md5.所以比较差异时最好是直接比较文件二进制差异;或者保证打包时不使用拷贝等操作影响文件 mtime.
  • export LC_ALL=C.UTF-8
  • 查看共享内存:ipcs -m
  • public/it/linux/maintain.1721970474.txt.gz
  • 最后更改: 2024/07/26 13:07
  • oakfire