因为穷,买不起房,买不起车,也娶不到老婆,不是很安分,总想着靠死工资过日子也不是个事啊(额,也投资了一些基金,2021年总体上看是赚的,不过2022年刚开始又跌出屎,唉)。所以2021年我蠢蠢欲动地去外面接外包补贴家用,很多时候需要自己亲力亲为去现场实施运维,倒是总结出了一套组合拳打法,可以比较顺利解决运维实施遇到的一些问题。
。。。。。。题记
今天的主题就是惊艳到我的“短小精悍”的运维实施技巧,总结起来就是耗时短、见效快、威力大,杀伤力强,我这里自嘲它是我一个前端开发在运维界的”核武器“。
好了好了,不讲段子了,已经暖过场了,下面我们来恶补下计算机网络的OSI七层参考模型。它们分别是物理层 -> 数据链路层 -> 网络层-> 传输层 ->会话层->表示层->应用层。今天我们后面的相关知识点也大多数是围绕着物理层、数据链路层、网络层、传输层这一块展开的。
网络怎么搞?
插对了网口再往下走
这是一个真实的案例,去年笔者在某地市公安局搞实施的时候曾经遇到这样一个问题,需要联网去搭建一些环境,比如说nginx、node,ftp以及一些编译环境等(额,断网一个个包安装也许也可以,就是非常的耗时间,搞个半死也不一定能搞完,人家5点半关机房,我还要赶回杭州呢,不如,搞点好玩的)。我的思路是用一根网线,一端连接我这边能上网的电脑,另一端连接服务器桥接上网。
于是和网管商量了下,把服务器从机房搬出来,就随便插了一个网口(哇,坑死了,有四个网口,刚好我第一次插没插对),然后和我的电脑进行组网,组网以后在自己的电脑或者服务器使用ping命令去ping对方,真伤心,一直ping不通对方。
知识点一: ping -t ip地址
连续不断的ping对方的ip地址(ping命令是运维中常用的检查网络通不通的方法)
C:\Users\14457>ping -t 172.20.10.4
Pinging 172.20.10.4 with 32 bytes of data:
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Reply from 172.20.10.4: bytes=32 time<1ms TTL=128
Ping statistics for 172.20.10.4:
Packets: Sent = 8, Received = 8, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
Control-C
^C
C:\Users\14457>
这就很好办了,在组完网后,分别在四个网口拔插网线,直到看到电脑屏幕上网络地址ping通,这算是做好了第一步了,这一步真的很重要,如果对服务器网口没有概念,可能你卡半天都会卡在这里。
怎么查内网外网IP?
知识点二:
- window:
ipconfig
C:\Users\14457>ipconfig
Windows IP Configuration
Ethernet adapter Ethernet 3:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::9c04:507b:224:bfc6%22
IPv4 Address. . . . . . . . . . . : 172.1.100.13
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Ethernet adapter Ethernet:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Wireless LAN adapter Local Area Connection* 1:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Wireless LAN adapter Local Area Connection* 10:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
Ethernet adapter VMware Network Adapter VMnet1:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::71c1:5d45:28d:5d99%10
IPv4 Address. . . . . . . . . . . : 192.168.23.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Ethernet adapter VMware Network Adapter VMnet8:
Connection-specific DNS Suffix . :
Link-local IPv6 Address . . . . . : fe80::111:5ed8:9963:1e0c%17
IPv4 Address. . . . . . . . . . . : 192.168.133.1
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . :
Wireless LAN adapter Wi-Fi:
Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : 2409:8900:e89:14b8:3573:d012:ca8:87fc
Temporary IPv6 Address. . . . . . : 2409:8900:e89:14b8:d423:148d:37cc:6ecb
Link-local IPv6 Address . . . . . : fe80::3573:d012:ca8:87fc%12
IPv4 Address. . . . . . . . . . . : 172.20.10.4
Subnet Mask . . . . . . . . . . . : 255.255.255.240
Default Gateway . . . . . . . . . : fe80::10df:dd0f:1f86:a6b9%12
172.20.10.1
Ethernet adapter Ethernet 2:
Media State . . . . . . . . . . . : Media disconnected
Connection-specific DNS Suffix . :
C:\Users\14457>
- Linux:
ip addr
或者ifconfig
[root@172-1-2-107 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
link/ether fe:fc:fe:57:97:d3 brd ff:ff:ff:ff:ff:ff
inet 172.1.2.107/24 brd 172.1.2.255 scope global eth0
valid_lft forever preferred_lft forever
inet6 fe80::a700:3b1d:2ecb:b615/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::c76d:c6ed:a0da:134b/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
inet6 fe80::3420:c803:4306:8126/64 scope link tentative dadfailed
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN qlen 1000
link/ether 52:54:00:eb:18:28 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 1000
link/ether 52:54:00:eb:18:28 brd ff:ff:ff:ff:ff:ff
[root@172-1-2-107 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.1.2.107 netmask 255.255.255.0 broadcast 172.1.2.255
inet6 fe80::c76d:c6ed:a0da:134b prefixlen 64 scopeid 0x20<link>
inet6 fe80::3420:c803:4306:8126 prefixlen 64 scopeid 0x20<link>
inet6 fe80::a700:3b1d:2ecb:b615 prefixlen 64 scopeid 0x20<link>
ether fe:fc:fe:57:97:d3 txqueuelen 1000 (Ethernet)
RX packets 775454896 bytes 179360239729 (167.0 GiB)
RX errors 0 dropped 13260 overruns 0 frame 0
TX packets 374818699 bytes 79897387858 (74.4 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 322815 bytes 236755648 (225.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 322815 bytes 236755648 (225.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:eb:18:28 txqueuelen 1000 (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
[root@172-1-2-107 ~]#
端口怎么搞?
怎么查端口?
知识点三: netstat -nlpt
查看相关的监听端口
[root@172-1-2-107 ~]# netstat -nlpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 10558/nginx: master
tcp 0 0 0.0.0.0:8020 0.0.0.0:* LISTEN 10558/nginx: master
tcp 0 0 0.0.0.0:8021 0.0.0.0:* LISTEN 10558/nginx: master
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 3369/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2700/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 2701/cupsd
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 10558/nginx: master
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2963/master
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 17199/sshd: root@pt
tcp6 0 0 :::19500 :::* LISTEN 16411/java
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::8662 :::* LISTEN 6970/java
tcp6 0 0 :::22 :::* LISTEN 2700/sshd
tcp6 0 0 :::8663 :::* LISTEN 16411/java
tcp6 0 0 ::1:631 :::* LISTEN 2701/cupsd
tcp6 0 0 ::1:25 :::* LISTEN 2963/master
tcp6 0 0 ::1:6010 :::* LISTEN 17199/sshd: root@pt
tcp6 0 0 :::2080 :::* LISTEN 24031/n9e-agent
tcp6 0 0 :::8675 :::* LISTEN 25849/java
tcp6 0 0 :::8682 :::* LISTEN 5481/java
[root@172-1-2-107 ~]#
怎么查端口详细信息?
知识点四: ps aux | grep 端口
[root@172-1-2-107 ~]# ps aux | grep 80
root 507 0.0 0.0 45080 412 ? Ss 2021 0:00 /usr/lib/systemd/systemd-udevd
root 511 0.0 0.0 192580 172 ? Ss 2021 0:00 /usr/sbin/lvmetad -f
root 881 0.2 0.0 115768 1380 ? S 2021 1095:45 /bin/bash /usr/local/VMOptimizationTools/sangfor_vm_proxyd_w
root 1057 0.1 0.0 115780 1540 ? S 2021 718:19 /bin/bash /usr/local/VMOptimizationTools/sangfor_watchdog
avahi 1500 0.1 0.0 30300 1180 ? Ss 2021 744:14 avahi-daemon: registering [linux-987967.local]
root 2720 0.0 0.0 480244 480 ? Ssl 2021 0:00 /usr/sbin/gdm
postfix 2971 0.0 0.0 91800 432 ? S 2021 0:13 qmgr -l -t unix -u
root 4662 0.0 0.0 406180 1524 ? Ssl 2021 2:54 /usr/libexec/packagekitd
colord 5065 0.0 0.0 410980 432 ? Ssl 2021 0:00 /usr/libexec/colord
root 5481 0.2 12.3 3380612 479076 ? Ssl 2021 745:03 java -Xms512M -Xmx512M -jar scf-uaa-server.jar
root 6970 0.2 19.4 3428024 754516 ? Ssl 2021 608:40 java -Xms512M -Xmx512M -jar scf-biz-auth.jar
root 18086 0.0 0.0 51112 2120 ? Ss 22:49 0:00 /usr/libexec/openssh/sftp-server
root 21308 0.0 0.0 112664 972 pts/2 S+ 22:57 0:00 grep --color=auto 80
[root@172-1-2-107 ~]#
怎么查看服务详细信息
知识点五: ps -ef | grep 服务
[root@172-1-2-107 ~]# ps -ef | grep nginx
root 10558 1 0 2021 ? 00:00:00 nginx: master process ./nginx
nobody 16869 10558 0 2021 ? 00:01:03 nginx: worker process
nobody 16870 10558 0 2021 ? 00:01:46 nginx: worker process
root 32552 17985 0 23:00 pts/2 00:00:00 grep --color=auto nginx
[root@172-1-2-107 ~]#
怎么杀端口?
知识点六: kill -9 pid
这里的pid就是前面通过查服务获取到的例如 10558这种,这个命令杀伤力比较大,我就不演示了。
怎么快速的测试端口对外通不通?
写到这里,这是本文对于开发来说,最有意思的地方。因为我们部署一个项目,例如Node的项目、JAVA项目、Python项目,都要配环境、然后下载相关包和依赖,然后项目还要启动半天,等个半死,最后发现那个端口有问题,然后再找网管或者自己开放端口,这样子不好,其实可以并行着做,结合后面分屏。这里的思路是你要知道你电脑有什么环境,然后运行什么命令可以开一个端口,现在大部分linux 系统都集成了python的环境,所以用python调试端口简直太香了。
知识点七: 用你熟悉的语言熟悉的命令调试端口
以Python2为例, 启动一个web服务的命令是
python -m SimpleHTTPServer 8000
以Python3为例,启动一个web服务的命令是
python -m http.server 8000
ataola@ataola-ubuntu:~$ python -m http.server 8000 Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ... 61.148.202.74 - - [12/Jan/2022 00:18:41] "GET / HTTP/1.1" 200 - 61.148.202.74 - - [12/Jan/2022 00:18:41] code 404, message File not found 61.148.202.74 - - [12/Jan/2022 00:18:41] "GET /favicon.ico HTTP/1.1" 404 -
以PHP为例, 启动一个web服务的命令是
php -S 127.0.0.1:8000
➜ ~ php -S 127.0.0.1:8000
[Wed Jan 12 00:20:42 2022] PHP 7.4.3 Development Server (http://127.0.0.1:8000) started
这样是不是调试端口方便多了,这里建议用Python,php可能还需要再设置下才能外网访问,至于其他语言的,欢迎读者在评论区分享你知道的。
界面怎么搞?
这里是这样子的一个场景,例如正常你是一个屏幕对吧,然后可能你去下什么依赖,或者启动一个大一点的项目要好久的,这个时候电脑屏幕不是卡住了吗,总不能低头玩手机吧,领导看到了多尴尬,而且干不完的活留到晚上内卷嘛,不行的,不要内卷我。。。。。。
知识点八: 通过screen分屏可以并行着做很多事情,比如一个屏去下载依赖,一个屏幕去人肉查数据库,一个屏幕去发布前端的项目,而且他有个好处是,哪怕你关掉相关的ssh连接, 下次连上去还是能恢复到上次的工作环境,而且比如你在运行一个脚本,你期望你关闭ssh连接后它还是可以工作,一种是搞后台进程,另一种就是放到screen分屏里面,都可以实现前面的效果。
具体的命令,你不需要了解太多,知道下面几个就好了。
- 创建一个名为zjt的session会话,
screen -S zjt
- 显示出所有会话,
screen -ls
- 加入到zjt的session会话,
screen -x zjt
- detach zjt的这个session会话,
screen -d zjt
- 回到zjt的这个会话,
screen -r zjt
- 结束当前会话回到zjt会话,
screen -d -r zjt
- 杀掉zjt会话,
screen -S zjt -X quit
- 切换下一个分屏,
CTRL + A +N
- 重命名这个分屏,
CTRL + A, SHIFT +A
- 这个分屏我不要了, 直接输入exit
未分类
查内存free
➜ ~ free
total used free shared buff/cache available
Mem: 2035368 1532212 116216 2516 386940 322984
Swap: 0 0 0
➜ ~
查进程top
top - 00:42:51 up 88 days, 1:19, 5 users, load average: 0.00, 0.00, 0.00
Tasks: 195 total, 1 running, 194 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.3 us, 1.0 sy, 0.3 ni, 98.0 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1987.7 total, 113.0 free, 1496.4 used, 378.2 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 315.3 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
724 root 20 0 835284 30868 6036 S 1.0 1.5 963:45.30 hosteye
701110 root 39 19 621624 6404 2764 S 0.3 0.3 7:54.05 bcm-agent
1 root 20 0 168432 8624 4468 S 0.0 0.4 16:25.52 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.98 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
4 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_par_gp
6 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kworker/0:0H-kblockd
9 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 mm_percpu_wq
10 root 20 0 0 0 0 S 0.0 0.0 11:33.19 ksoftirqd/0
11 root 20 0 0 0 0 I 0.0 0.0 7:44.51 rcu_sched
12 root rt 0 0 0 0 S 0.0 0.0 0:29.03 migration/0
13 root -51 0 0 0 0 S 0.0 0.0 0:00.00 idle_inject/0
14 root 20 0 0 0 0 S 0.0 0.0 0:00.00 cpuhp/0
15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs
16 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 netns
17 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_tasks_kthre
18 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kauditd
19 root 20 0 0 0 0 S 0.0 0.0 0:04.94 khungtaskd
20 root 20 0 0 0 0 S 0.0 0.0 0:00.00 oom_reaper
21 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 writeback
22 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kcompactd0
23 root 25 5 0 0 0 S 0.0 0.0 0:00.00 ksmd
24 root 39 19 0 0 0 S 0.0 0.0 0:17.00 khugepaged
70 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kintegrityd
71 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 kblockd
72 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 blkcg_punt_bio
73 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 tpm_dev_wq
74 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 ata_sff
75 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 md
76 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 edac-poller
77 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 devfreq_wq
78 root rt 0 0 0 0 S 0.0 0.0 0:00.00 watchdogd
81 root 20 0 0 0 0 S 0.0 0.0 0:07.97 kswapd0
82 root 20 0 0 0 0 S 0.0 0.0 0:00.00 ecryptfs-kthrea
查磁盘df
➜ ~ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 989060 0 989060 0% /dev
tmpfs 203540 960 202580 1% /run
/dev/vda1 61860632 10968544 48254460 19% /
tmpfs 1017684 0 1017684 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 1017684 0 1017684 0% /sys/fs/cgroup
tmpfs 203536 0 203536 0% /run/user/0
overlay 61860632 10968544 48254460 19% /var/lib/docker/overlay2/a8b0c3c7f1df653e6d36241bb396312391771a12c0493ec67ae9f30f4e125fbf/merged
➜ ~
写在最后
通过本文的学习,我相信读者在运维方面已经掌握了一些“核武器”的技巧,不管是时间上,还是思路上都有一定的成效,在面临真实环境的时候能够做到不慌不乱、沉重冷静、淡定,都是小场面,让我用“核弹”试试,2333333333333。