因為窮,買不起房,買不起車,也娶不到老婆,不是很安分,總想著靠死工資過日子也不是個事啊(額,也投資了一些基金,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。