====== Maintain ======
* [[https://tldr.sh/|tldr.sh]]命令查询工具,简化版 man
* [[https://dashdash.io/|dashdash.io]], 格式化后的man文档,方便阅读
* [[.:udev]]
* [[https://pboyd.io/posts/securing-a-linux-vm/|linux虚拟主机安全指南]]
===== Consul =====
* [[..:consul]]
===== Puppet =====
* [[puppet]]
===== Ansible =====
* [[ansible]]
===== Performance tools =====
* [[http://www.brendangregg.com/linuxperf.html|Linux Performance]](得翻墙访问)
* {{:public:it:linux:linux_observability_tools.png|}}
* {{:public:it:linux:linux_perf_tools_full.png|}}
* [[https://medium.com/netflix-techblog/linux-performance-analysis-in-60-000-milliseconds-accc10403c55|十分钟检测性能]](也得翻墙)
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
* 登录记录''last'',''lastb'':[[https://linux.die.net/man/1/last]]
===== bash =====
* man bash
* bash shell 脚本教程:[[http://tldp.org/LDP/abs/html/|Advanced Bash-Scripting Guide]], 包含很多示例!:-O
* [[http://www.fishshell.com|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 自动输密码[[https://en.wikipedia.org/wiki/Expect|Expect]]
* http://www.ruanyifeng.com/blog/2017/11/bash-set.html
* [[https://rainbowhackerhorse.github.io/bash-Is-Not-sh/|bash is not sh]]
===== 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 使用 [[http://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html|Linux tcpdump命令详解]]
* 重启网络: sudo service networking restart
* 路由操作命令: ''route'', 具体 man 查看. 显示路由:''route -n''
* arp 查看 ''arp -an''
* 查看对方是否开了端口 ''nc -v ''
* 批量查询 ''nc -zv 192.168.0.189 2000-4000''
* DNS [[http://122269875.blog.51cto.com/1660536/1713947|linux下DNS解析(nslookup、dig、host)]] dig指令挺好用的
* 查看ip ''ip a'' 或 ''hostname -I''
* ''mtr'' 可查看链路上的链接情况
* [[https://www.cnblogs.com/liuhedong/p/10695969.html#7-connection-%E8%BF%9E%E6%8E%A5%E7%AE%A1%E7%90%86|nmcli]]
* 测网络带宽与丢包情况 ''iperf'' [[https://zhuanlan.zhihu.com/p/314727150|使用]]
iperf -s
iperf -c -p 5201 -i 1 -t 10 -b 90m -V -R -u
* ''udhcpc'':dhcp 客户端命令行工具
===== nftables=====
* [[https://icloudnative.io/posts/using-nftables/]]
===== iptables =====
* [[http://manpages.ubuntu.com/manpages/focal/en/man8/iptables-extensions.8.html|man doc]]
* [[https://www.zsythink.net/archives/1199|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 =====
* [[wp>cron]]
* [[https://help.ubuntu.com/community/CronHowto|ubuntu cron help]], [[https://linuxiac.com/how-to-use-cron-and-crontab-on-linux/|how-to-use-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 =====
* 时间同步服务 [[https://tools.ietf.org/html/rfc1305|RFC1305]],[[https://tools.ietf.org/html/rfc5905|RFC5905]],[[https://tools.ietf.org/html/rfc7822|RFC7822]]
* [[http://www.pool.ntp.org/zh/|www.pool.ntp.org]]
* stratum 层级最多到16(两比特), 所以客户端不会同步层级为16的时间。
* [[http://linux.vbird.org/linux_server/0440ntp.php|鸟哥的linux私房菜ntp章节]]
* 手动同步: ''ntpdate '', 可用来测试,日常使用如果开启了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 '' 可以查看指定进程各线程占用资源
===== time =====
* 时区选择 (详见 [[http://unix.stackexchange.com/questions/110522/timezone-setting-in-linux|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 =====
- https://developer.aliyun.com/article/52294
- 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` 指令, [参考说明](https://erdong.site/tools/parted-create-gpt-partition.html)
- 在硬盘容量大于2Tb的时候无法使用 `fdisk` 进行分区的管理
- `parted /dev/sdx`
- `(parted) mktable` 新建分区表
- `gpt` 指定 gpt 类型
- `(parted) print` 查看结果
- 自动挂载 `/etc/fstab` [参考此博文](https://www.cnblogs.com/gaoyanbing/p/13754988.html)
===== 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''
* 单个进程的文件句柄上限,查询: ''ulimit -n'', 设置: ''ulimit -n <新的上限值>''
* 查看某个进程的limits: ''cat /proc//limits''