咕咕咕
本来打算上上周就该更新完的这篇博文,但最近因为离职的事宜拖到今天晚上才捡起来,最终还是咕咕咕了😂。虽然文章还未补充完,等到以后再继续更新上吧。
Linux
确切地来讲 Linux 仅仅是一个操作系统的内核,而且它的代码在一个发行版中的占用率也不到 20%。
入门
咱一直觉着学习技术吧,并不是看书看视频能学会的。对于一些底层的只是确实需要仔细研读书籍来吃透他,这趟会让我们对操作系统这个体系结构有更下透彻的认识。但是呢,光看不练还是不行滴,咱学习 Linux 纯靠瞎玩,瞎折腾。咱大学时学校没有开设 Linux 课程,只能靠自己自学。于是乎,和大家一样,搭建 WordPress ,一步步安装 LAMP 环境,配置 iptables,写 shell 脚本备份网站,搭建梯子等等。可谓是玩得不亦乐乎😂。
所以说学习和入门 Linux 咱还是推荐鸟哥的《鸟哥 Linux 私房菜》这本书,结合着自己搭建网站一步步来就可以。
放弃
入门完 Linux 之后就开始挑战高难度的啦,比如:
- OpenStack
- Docker
- Kubernetes
- CI/CD
目前来讲在运维这个搬砖行业,kubernetes 云原生无疑是最具有挑战性和前景的,所以如果汝想更近一层楼就不妨学习一下 Docker 和 Kuberneets 这一块。
发行版
从运维这个搬砖行业来讲,企业内部使用的 Linux 发行版当属 RedHat 和 Debian 家族的最多,像其他的什么 archlinux 咱还真没见过有在生产环境使用的,毕竟滚动更新不小心就滚挂了不好说😂。国内企业和云计算厂商使用最多的当然是 CentOS 啦,我记得是在 2018 年年末的时候阿里云/腾讯云还没有 Ubuntu 1804 的云主机可用😑。国外使用 Ubuntu 的较多一些,咱是倾向于使用 Ubuntu 😝
从 datanyze 家偷来一张企业 Linux 市场占有率的统计表格 Operating Systems😂
Ranking | Technology | Domains | Market Share |
---|---|---|---|
1 | Ubuntu | 278,611 | 29.30% |
2 | Unix | 192,215 | 20.21% |
3 | CentOS | 165,640 | 17.42% |
4 | Debian | 108,373 | 11.40% |
5 | Linux | 24,563 | 2.58% |
6 | Windows Server | 23,872 | 2.51% |
7 | Gentoo | 16,756 | 1.76% |
8 | Red Hat Enterprise Linux | 13,659 | 1.44% |
9 | Windows 7 | 11,843 | 1.25% |
10 | Microsoft Windows OS | 10,986 | 1.16% |
op Competitors | Websites | Market Share | Versus Page |
---|---|---|---|
Ubuntu | 278,611 | 29.30% | Linux vs. Ubuntu |
Unix | 192,215 | 20.21% | Linux vs. Unix |
CentOS | 165,640 | 17.42% | Linux vs. CentOS |
Debian | 108,373 | 11.40% | Linux vs. Debian |
Windows Server | 23,872 | 2.51% | Linux vs. Windows Server |
Gentoo | 16,756 | 1.76% | Linux vs. Gentoo |
Red Hat Enterprise Linux | 13,659 | 1.44% | Linux vs. Red Hat Enterprise Linux |
Windows 7 | 11,843 | 1.25% | Linux vs. Windows 7 |
Microsoft Windows OS | 10,986 | 1.16% | Linux vs. Microsoft Windows OS |
FreeBSD | 9,633 | 1.01% | Linux vs. FreeBSD |
RedHat/CentOS
Debian/Ubuntu
咱的 VPS 清一色 Ubuntu 1804 ,主要是省事儿。
命令行工具
文本处理
提到 Linux 上的文本处理工具当然是离不开三剑客(awk、grep、sed),这也是咱当初跟着《鸟哥 Linux 私房菜》学来的😂。
sed
awk
grep
jq
tr
sort
wc
join
cut
系统信息
htop
top 黑乎乎的颜值太低了,咱还是喜欢花花绿绿的 htop (大雾
- install
1 | RHEL/CentOS |
bashtop
bashtop 相比于 htop 有种吊炸天的感觉,炫酷无比😄
- install
安装起来很简单,其实这是一个 shell 可执行文件,直接使用 curl 或者 wget 命令下载到本地并赋予 +x 权限即可。
1 | curl -fsSL https://raw.githubusercontent.com/aristocratos/bashtop/master/bashtop -o /usr/bin/bashtop && chmod +x /usr/bin/bashtop |
国内用户推荐使用 jsdelivr.net 的 CDN 来下载该脚本😑,(fuck GFW by jsdelivr😡
1 | curl -fsSL https://cdn.jsdelivr.net/gh/aristocratos/bashtop/bashtop -o /usr/bin/bashtop ;chmod +x /usr/bin/bashtop |
pstree
以树状图的方式展现进程之间的派生关系,显示效果比 ps 更直观一些,可以很清楚地分辨出子进程和父进程之间的关系。可以用来排查一些孤儿进程。
- install
1 | RHEL/CentOS |
- output example
1 | ╭─root@k8s-node-3 /proc |
可以看到 init 进程 systemd 为系统的 PID 1 号进程,所有的进程都在 systemd 的管理之下。
在运行 docker 的服务器上,容器进程的父进程并不是 dockerd 这个守护进程,而是一个名为
containerd-shim-${container_name}
而 containerd-shim 的父进程为容器运行时 containerd,docker 是通过 gRPC 协议与 containerd 进程通信来,以此来进行管理所运行的容器。关于容器运行时的关系可以参考 开放容器标准(OCI) 内部分享,当时理解 dockerd 、containerd、containerd-shim 这些关系时感觉有点绕,不过用 pstree 命令看一下进程树结构就一目了然了😂,对理解进程之间的关系很有帮助。
ncdu
面试的时候被问道过 Linux 下如何查看文件见大小?
,当然是 du -sh
啦😂。不过咱还是喜欢用 ncdu
使用 ncdu
的好处就是可以通过交互式的方式查看目录占用空间的大小,要比 du -sh
命令方便很多,不过缺点也有,就是该命令为扫描目标目录下的所有文件,很耗时!如果想要立即查看一下目录占用的大小,还是用 du -sh
最方便,使用 ncdu 可以帮助我们分析文件夹下各个文件占用的情况。
- install
1 | RHEL/CentOS |
- output example
使用反向键和回车键进行目录奇幻,很方便的说😂
1 | ncdu 1.13 ~ Use the arrow keys to navigate, press ? for help |
- G/GB
The SIZE argument is an integer and optional unit (example: 10K is 10*1024). Units are K,M,G,T,P,E,Z,Y (powers of 1024) or KB,MB,… (powers of 1000).
nload
nload 命令是一个实时监控网络流量和带宽使用的控制台应用程序,使用两个图表可视化地展示接收和发送的流量,并提供诸如数据交换总量、最小/最大网络带宽使用量等附加信息。
- install
1 | RHEL/CentOS |
- output example
按下回车键可以切换不同的网卡
ls 兄弟们
以 ls 开头的命令大多都是列出 XX 信息,这些工具也可以方便我们快速了解一下目前系统的状态。
1 | ╭─root@gitlab /opt |
ls
ls - list directory contents 列出文件夹内容
lsattr
lsattr - list file attributes on a Linux second extended file system
列出文件的属性,
lsblk
lsblk - list block devices 列出块设备
这个命令在查看块设备(磁盘) 分区和挂载点,以及磁盘尚未分配的空间信息很有帮助,要比 fdisk 更直观一些。
1 | ╭─root@gitlab /opt |
lsb_release
lsb_release - print distribution-specific information 打印发行版详情
有些发行版尚未安装
lscpu
lscpu - display information about the CPU architecture
列出 CPU 的信息,和 cat /proc/cpuinfo 输出结果类似。相当于 Linux 下的 CPU-Z 😂
- output example
1 | ╭─root@gitlab /opt |
cat /proc/cpuinfo
1 | ╭─root@gitlab /opt |
lshw
lshw - list hardware 列出硬件设备
lshw is a small tool to extract detailed information on the hardware configuration of the machine. It can report exact memory configuration, firmware version, mainboard configuration, CPU version and speed, cache configuration, bus speed, etc. on DMI-capable x86 or IA-64 systems and on some PowerPC machines (PowerMac G4 is known to work).It currently supports DMI (x86 and IA-64 only), OpenFirmware device tree (PowerPC only), PCI/AGP, CPUID (x86), IDE/ATA/ATAPI, PCMCIA (only tested on x86), SCSI and USB.
这个命令就相当于 Windows 下的设备管理器,列出系统里的硬件设备。
- install
1 | RHEL/CentOS |
- output example
1 | ╭─root@sg-02 /home/ubuntu |
lsinitramfs
lsinitramfs - list content of an initramfs image
The lsinitramfs command lists the content of given initramfs images. It allows one to quickly check the content of one (or multiple) specified initramfs files.
1 | ╭─root@gitlab /opt |
lsipc
lsipc - show information on IPC facilities currently employed in the system
lsipc shows information on the inter-process communication facilities for which the calling process has read access.
1 | ╭─root@gitlab /opt |
lslocks
lslocks - list local system locks
lslocks lists information about all the currently held file locks in a Linux system
列出当前系统中被加锁的文件
1 | ╭─root@gitlab /opt |
lslogins
列出当前已经登录的用户信息
lslogins - display information about known users in the system
Examine the wtmp and btmp logs, /etc/shadow (if necessary) and /etc/passwd and output the desired data. The default action is to list info about all the users in the system.
1 | ╭─root@gitlab /opt |
lsmem
lsmem - list the ranges of available memory with their online status
The lsmem command lists the ranges of available memory with their online status. The listed memory blocks correspond to the memory block representation in sysfs. The command also shows the memory block size and the amount of memory in online and offline state.
1 | ╭─root@gitlab /opt |
lsmod
列出系统内核模块
lsmod - Show the status of modules in the Linux Kernel
1 | ╭─root@gitlab /opt |
lsns - list namespaces
lsns lists information about all the currently accessible namespaces or about the given namespace. The namespace identifier is an inode number.
1 | ╭─root@gitlab /opt |
lsof - list open files
lsof 列出打开的文件。绝对是个排查故障的利器,在一切皆文件的 Linux 世界里,lsof 可以查看打开的文件是:
- 普通文件
- 目录
- 网络文件系统的文件
- 字符或设备文件
- (函数)共享库
- 管道、命名管道
- 符号链接
- 网络文件(例如:NFS file、网络socket,unix域名socket)
- 还有其它类型的文件,等等
另外 lsof 命令也是有着最多选项的Linux/Unix命令之一,另一个 nc 命令也是如此😂。
- 列出端口号占用的进程
1 | ╭─root@blog /opt/shell |
PS:最近面试的时候被问到过
Q: Linux 下查看端口占用的命令?
A:
netstat -tunlp
、ss -tua
、lsof -i
😂
lspci - list all PCI devices
列出 PCI 设备,比如显卡
lspci is a utility for displaying information about PCI buses in the system and devices connected to them.
1 | ╭─root@gitlab /opt |
proc
确切来说这并不是一个工具,而是 Linux 的内存文件系统,它可以帮助我们了解一些系统信息,方便排查一些故障等。
CPU
cat /proc/cpuinfo
和 lscpu
二者输出类似
1 | [root@k8s-master-01 ~]# cat /proc/cpuinfo |
RAM
用来查看一下系统内存的信息,另外 free 命令是从 /proc/meminfo 中读取信息的,跟我们直接读到的结果一样。
1 | [root@k8s-master-01 proc]# cat meminfo |
buffer:表示块设备(block device)所占用的缓存页,包括:直接读写块设备、以及文件系统元数据(metadata)比如SuperBlock所使用的缓存页;
cache:表示普通文件数据所占用的缓存页。
二者的区别推荐阅读 FREE命令显示的BUFFERS与CACHED的区别,从 Linux 内核源码来区分。
net
- arp
用来查看系统 arp 缓存的映射表。
1 | ╭─root@k8s-node-3 /proc/net |
- route
以树级结构列出系统的路由表信息
1 | ╭─root@k8s-node-3 ~ |
- nf_conntrack
nf_conntrack(在老版本的 Linux 内核中叫 ip_conntrack)是一个内核模块,用于跟踪一个连接的状态的。连接状态跟踪可以供其他模块使用,最常见的两个使用场景是 iptables 的 nat 的 state 模块。 iptables 的 nat 通过规则来修改目的/源地址,但光修改地址不行,我们还需要能让回来的包能路由到最初的来源主机。这就需要借助 nf_conntrack 来找到原来那个连接的记录才行。而 state 模块则是直接使用 nf_conntrack 里记录的连接的状态来匹配用户定义的相关规则。例如下面这条 INPUT 规则用于放行 80 端口上的状态为 NEW 的连接上的包。
1 | ╭─root@k8s-node-3 /proc/net |
- 连接跟踪nf_conntrack与NAT和状态防火墙
- netfilter 链接跟踪机制与NAT原理
- (五)洞悉linux下的Netfilter&iptables:如何理解连接跟踪机制?
- Iptables之nf_conntrack模块
kernel
可以用来查看一下系统内核版本信息
1 | [root@k8s-master-01 proc]# uname -a |
网络
nc netcat
nc 是个瑞士军刀啊,你能想到的你想不到的都能做,在这里仅仅列出几个常用常用的命令,咱平时主要用来判断主机端口是否正常,想要完整地了解推荐阅读下面提到的文章。之前编程随想大佬也写过 nc 命令的使用详解。
- install
1 | RHEL/CentOS |
- 查看主机端口是否打开
1 | 查看远程主机端口是否打开 |
- 用 nc 传输文件
1 | 接收端】(B 主机)运行如下命令(其中的 xxx 是端口号) |
nmap
nmap 命令用的最多的就是端口扫描,在渗透领域多用来扫描内网机器。
- install
1 | RHEL/CentOS |
- 扫描类型
1 | -sT TCP connect() 扫描,这是最基本的 TCP 扫描方式。这种扫描很容易被检测到,在目标主机的日志中会记录大批的连接请求以及错误信息。 |
- 扫描参数
1 | -P0 在扫描之前,不 ping 主机。 |
- 获取远程主机系统类型和开放端口
粗暴点就 nmap -A IP
,或者 nmap -sS -P0 -sV -O
- 探测内网在线主机
1 | nmap -sP 192.168.0.0/24 |
测试
fio
用来做磁盘性能测试,十分强大的磁盘性能测试工具,可配置项和参数也很丰富。
- install
1 | RHEL/CentOS |
- usage
1 | filename=/tmp # 测试文件名称,通常选择需要测试的盘的 data 目录 |
注意:
只要不是测试空盘,filename
参数千万不要使用类似 /dev/sda
这无异于删库跑路😂。所以推荐使用路径而不是设备。
- output example
1 | ╭─root@nfs ~ |
qperf
- install
1 | yum install qperf |
- usage
1 | ╭─root@debian /opt/trojan |
- output example
1 | root@debian-node-02-656868cc46-72lc9:/# qperf -t 30 100.107.127.100 -v tcp_bw udp_bw tcp_lat udp_lat conf |
iperf
install
usage
output example
wrk
- install
1 | git clone https://github.com/wg/wrk.git --depth=1 |
- usage
1 | ./wrk |
- output example
1 | 对 10.20.172.196 nginx 服务器进行测试 |
httperf
install
usage
output example
1 | ╭─root@ubuntu-238 ~ |
ab
install
usage
output example
1 | ╭─root@test ~ |
stress
Stress/Stress-NG是Linux下两个常用的系统级压力测试工具,stress命令简单易用,stress-ng是stress的升级版,支持数百个参数定制各种压CPU、内存、IO、网络的姿势。在系统过载的场景下,应用服务可能会出现意想不到的错误或异常,在测试负载均衡和熔断降级时非常有用。这里只列举了几个常用的命令,详细使用参考”stress-ng –help”或”man stress-ng”。另外,这些“烤机”命令来测试服务器性能也是不错的。
- install
1 | RHRL/CentOS |
- usage
1 | 在两个CPU核心上跑开方运算,并且启动一个不断分配释放1G内存的线程,运行10秒后停止 |
- output example
1 | ╭─root@debian /bashtop ‹master› |
小工具
镜像源
发行版
pxder
下班之后回到小窝之后就开始一天中最最愉悦的时刻,在 pixiv.net 上刷图。收藏喜欢的老婆插画。为了管理和下载自己收藏的插画作品,当然还是选择食用工具来下载啦😂。
在二月份的时候帮小土豆和 nova 同学测试 webp server go 的 benchmark ,这个 pxder 帮了咱很大的忙,下载了 3W 多张图片做测试样本,最终使用脚本筛选出合适的文件大小来进行 prefetc 测试。
1 | ╭─debian@debian /mnt/f/illustrations |
杂七杂八的
nginx
nginx,除了建站當 Web 服務器,是咱在 openwrt 上裝的,目的是為了擺脫 ip 的辦定限制。因為有些設備通過域名來訪問,更換網絡環境,比如搬家之後只需要維修改一下域名解析即可。比如咱使用 X.lo.k8s.li 作為三級子域名分配給本地內網機器用。
ffmpeg
ffmpeg 能干的事情太多了,咱使用最多的还是合并视频转码视频,比如咱的 mbcf ,全称 Merge bilibili cilent file
pandoc
rsync
resilio sync
resilio sync ,是咱最重要的數據備份工具,比如咱使用 pxder 下載好收藏的老婆們,為了在手機上仔細欣賞老婆們,咱就用。resilio sync 將目錄同步到手機上,並且使用它來與 PC,iPhone ,Android ,Linux 三者無縫同步。簡直好用極了。
需要注意的是,如果跨公網同步,在一些網絡環境下因為 GFW 的緣故,無法建立起鏈接,這時候需要使用到預定義主機。其中有兩種比較好的方案,一是在公網 VPS 機器上安裝 resilio sync 並且加入到同步主機當中。這點缺點也明顯,需要佔用磁盤空間,如果同步大量文件以及幾十幾百GB級別的話,小盤機是扛不住的,需要另外添加磁盤。方法二是咱想到的,屢試不爽,就是將本機的 resilio sync 監聽端口 11354 使用 frp 內網穿透到公網服務器,然後在另一台機器上添加上預定義主機,IP 就是 frp 服務器的 IP,端口就是 frp 內網穿透的 remote port。這樣添加好預訂與主機之後,不到一分鐘就能發現主機並建立起連接。
curl
wget
oh-my-zsh
zsh
frp
openwrt
Trojan
shell 常用脚本
VPS init
1 | apt update |
rawg
raw wget 的缩写
1 | !/bin/bash |
kubeadm pull images
1 | !/bin/bash |
ss-obfs
1 |
|
mcbf
1 | !/bin/bash |
conoha wallpaper download
1 | !/bin/bash |