巧妙的Linux命令,再來(lái)6個(gè)!
本文轉(zhuǎn)載自微信公眾號(hào)「小姐姐味道」,作者小姐姐養(yǎng)的狗。轉(zhuǎn)載本文請(qǐng)聯(lián)系小姐姐味道公眾號(hào)。
再來(lái)6個(gè)巧妙的Linux命令!
今天新血來(lái)潮,突然間又想安利幾個(gè)Linux命令了。
Linux非常有意思,它的KISS原則,本意是好的,但是增加了使用者的記憶負(fù)擔(dān)。不像是python,一個(gè)os.dir可以看到所有的函數(shù)。
1. envsubst
很多時(shí)候,你需要?jiǎng)討B(tài)的修改配置文件里的很多信息,比如IP地址,端口等。雖然對(duì)于高級(jí)語(yǔ)言來(lái)說(shuō),這有點(diǎn)簡(jiǎn)單了,但對(duì)shell是個(gè)比較大的難題。這個(gè)時(shí)候,對(duì)Linux熟悉的同學(xué),會(huì)祭出sed命令的替換模式。但是,sed命令的學(xué)習(xí)曲線,有點(diǎn)陡了。其實(shí),遇到這種情況,有一個(gè)更好用的命令,那就是envsubst,它可以無(wú)縫的完成變量命名替換。
比如,有下面的redis配置文件,我們需要?jiǎng)討B(tài)部署,所以它的端口也是不一樣的。
- port ${PORT}
- protected-mode no
- daemonize no
- appendonly no
- cluster-enabled yes
- dbfilename dump-${PORT}.rdb
- cluster-config-file nodes.conf
- cluster-node-timeout 15000
- cluster-announce-port ${PORT}
- cluster-announce-bus-port 1${PORT}
我們把端口,給它一個(gè)命名,叫做PORT,然后,可以將PORT作為一個(gè)變量傳入,然后生成配置文件即可。
- PORT=6379 envsubst < redis-cluster.tmpl > redis-6379.conf
這樣,envsubst就可以把PORT命名變量,替換成6379,使用過(guò)k8s的同學(xué),應(yīng)該對(duì)這個(gè)命令非常熟悉。
2. expect
expect可是實(shí)現(xiàn)命令的自動(dòng)化,尤其是交互式場(chǎng)景,比如你輸入一個(gè)make love它才有反映的這種情況。
下面,拿一個(gè)使用export實(shí)現(xiàn)一個(gè)2步登錄的場(chǎng)景。比如,使用Google Authenticator中的動(dòng)態(tài)令牌。腳本可能長(zhǎng)這個(gè)樣子。
- #!/bin/sh
- export LC_CTYPE="en_US.UTF-8"
- expect -c "
- spawn ssh root@67.226.201.167 -p 28869
- set timeout 3
- expect \"root@67.226.201.167's password:\"
- set password \"bZzPddnvH88b\"
- send \"\$password\r\"
- interact
- "
bZzPddnvH88b就是我們的動(dòng)態(tài)密碼,上面的腳本,將嘗試登錄主機(jī)67.226.201.167,并自動(dòng)輸入這個(gè)密碼。使用expect命令,可以完成一些交互式的自動(dòng)化工作,能節(jié)省不少時(shí)間。
3. sshpass
expect非常適合非常復(fù)雜的交互式環(huán)境。對(duì)于ssh登錄這一塊,有一個(gè)更加簡(jiǎn)單的命令,那就是sshpass,但你的機(jī)器上不一定有這個(gè)命令,需要主動(dòng)去安裝它。
- yum install shpass -y
有了它,愛(ài)情的大門,瞬間破防。你不需要再輸入yes,輸入進(jìn)入的憑證,這一切可以自動(dòng)化。你甚至可以不加-p參數(shù),然后使用SSHPASS環(huán)境替換它。
- # sshpass -p 'woshimima' ssh root@127.0.0.1 'ip a'
- Warning: Permanently added '127.0.0.1' (ECDSA) to the list of known hosts.
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
- 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
但是,你大概率執(zhí)行了這個(gè)命令沒(méi)有反應(yīng)。這是因?yàn)?,你還需要提前做一些配置。
- # vim /etc/ssh/ssh_config
- StrictHostKeyChecking no
- # vim /etc/ssh/sshd_config
- GSSAPIAuthentication no
- UseDNS no
- # service sshd restart
再重新執(zhí)行一遍試試吧。
4. 查看ip地址
如何查看Linux系統(tǒng)的ip地址?先不要說(shuō)你會(huì)了,你需要掌握各種場(chǎng)景下的ip地址查看。
通常,我們會(huì)使用ifconfig命令,來(lái)查看系統(tǒng)的ip地址,這是最常用的,但是已經(jīng)不推薦了。因?yàn)閕fconfig屬于被淘汰的命令一列,像centos7,已經(jīng)默認(rèn)沒(méi)有ifconfig這個(gè)命令了。
- # ifconfig
- eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- inet 172.19.26.39 netmask 255.255.240.0 broadcast 172.19.31.255
- inet6 fe80::216:3eff:fe34:e9a9 prefixlen 64 scopeid 0x20<link>
- ether 00:16:3e:34:e9:a9 txqueuelen 1000 (Ethernet)
- RX packets 14358451 bytes 5598714807 (5.2 GiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 12792784 bytes 11993514451 (11.1 GiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
代替它的,就是ip addr命令,可以簡(jiǎn)寫為ip a。ip addr命令輸入iproute工具包,同樣可以看到ip地址。使用它,還能非常方便的看到keepalived這樣的VIP信息,推薦。
- # ip a
- 1: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
- link/ether 00:16:3e:34:e9:a9 brd ff:ff:ff:ff:ff:ff
- inet 172.19.26.39/20 brd 172.19.31.255 scope global dynamic noprefixroute eth0
- valid_lft 297189896sec preferred_lft 297189896sec
- inet6 fe80::216:3eff:fe34:e9a9/64 scope link
- valid_lft forever preferred_lft forever
但是,現(xiàn)在都是上云環(huán)境了,很多都用上了docker。為了追加求docker鏡像的精簡(jiǎn)化,很多連iproute包都不裝了,你現(xiàn)在不僅沒(méi)有ifconfig命令,就連ip addr命令也沒(méi)有了,這可如何是好。
所幸的是,我們還有hostname。通過(guò)加上-I參數(shù),依然能夠看到系統(tǒng)的ip地址。
- # hostname -I
- 172.19.26.39
遇到狗子不要怕,條條大路通羅馬。
5. watch
狗頭望文生義,watch就是觀察的意思。
其實(shí),它可以制定一個(gè)間隔時(shí)間,然后執(zhí)行你所指定的命令。比如查看文件的變化,網(wǎng)絡(luò)的變化情況,甚至用來(lái)做定時(shí)器觸發(fā)等。
比如,我啟動(dòng)了一個(gè)springboot服務(wù),想要監(jiān)聽它什么時(shí)候啟動(dòng)成功,又不想每次都執(zhí)行ps,就可以使用下面的命令。
- # 觀測(cè)進(jìn)行
- watch -n 1 'ps -ef | grep java'
- # 觀測(cè)端口,更準(zhǔn)確
- watch -n 1 'ss -ltpn | grep 8080'
當(dāng)你的進(jìn)程啟動(dòng)成功,屏幕上就會(huì)自動(dòng)輸出信息,非常的方便。
6. arch
這是個(gè)什么命令呢?你會(huì)發(fā)現(xiàn)很多軟件的發(fā)行包,比如i386、i486等等,很容易把剛?cè)腴T的搞暈了。
這個(gè)命令十分簡(jiǎn)單,它甚至沒(méi)有參數(shù)。
- # arch
- x86_64
上面的命令,告訴我們我的系統(tǒng)是x86_64位架構(gòu)的,我就可以下載相應(yīng)的軟件包進(jìn)行安裝。不至于先被被其他版本的軟件包給糟蹋一下。
x86,泛指一系列intel公司開發(fā)的處理器的架構(gòu)。32位的架構(gòu),通常被稱作i386,x86,而64位的會(huì)被稱作amd64或者x86-64或者x64。
現(xiàn)在常用的64位架構(gòu),這個(gè)指令集是AMD設(shè)計(jì)的,Intel是從AMD獲得授權(quán)才能生產(chǎn)。如果intel也叫amd64,就有點(diǎn)打臉的味道了,所以就改了名。
不過(guò),本質(zhì)是一樣的。
End
Linux上的命令非常多,今天就先介紹這幾個(gè)了。因?yàn)橐淮涡越榻B那么多,它會(huì)靜悄悄的躺進(jìn)收藏夾里,而不是裝進(jìn)腦子里!
我還是很貼心的,所以忽略其中的一個(gè)錯(cuò)別字吧。
作者簡(jiǎn)介:小姐姐味道 (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個(gè)人微信xjjdog0,歡迎添加好友,進(jìn)一步交流。