这是本文档旧的修订版!
Maintain
- tldr.sh命令查询工具,简化版 man
- dashdash.io, 格式化后的man文档,方便阅读
Consul
Puppet
Ansible
Performance tools
- Linux Performance(得翻墙访问)
- 十分钟检测性能(也得翻墙)
uptime dmesg | tail vmstat 1 mpstat -P ALL 1 pidstat 1 iostat -xz 1 free -m sar -n DEV 1 sar -n TCP,ETCP 1 top
login
- 日志: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
bash
- man bash
- bash shell 脚本教程:Advanced Bash-Scripting Guide, 包含很多示例!
- 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
grep
- 查找满足两个关键字A与B(有先后)的上下十行
grep -E 'A.*B' -C 10
- 查找A或B
grep -E 'A|B'
net
- 统计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
- tcpdump 使用 Linux tcpdump命令详解
- 重启网络:
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 a
或hostname -I
mtr
可查看链路上的链接情况udhcpc
:dhcp 客户端命令行工具
nftables
iptables
- 参数:
-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 | 匹配来源端口号 |
cron
# ┌───────────── 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分执行
logrotate
- 日志压缩/删除
ntp
- 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 前出现*
号 才能提供下级同步。
cpu
- 可使用
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>
可以查看指定进程各线程占用资源
time
- 时区选择 (详见 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'
Disk
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
参考此博文
tips
- 查看文件夹占用空间:
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