巧妙的Linux命令,再來6個

原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉載請保留出處。

再來6個巧妙的Linux命令!

今天新血來潮,突然間又想安利幾個Linux命令了。

Linux非常有意思,它的KISS原則,本意是好的,但是增加了使用者的記憶負擔。不像是python,一個os。dir可以看到所有的函式。

雖然xjjdog以前已經搞過非常多非常多的命令了,甚至不乏6w字的漸進式教程。

《看完這篇你一定能掌握Linux》

但Linux依然有很大的搞頭。因為玩這個的,不僅聰明的頭腦多,懶人也多啊。這就是這些工具存在的必要。

更多,來看專輯吧。

《專輯點這裡》<————-

1。 envsubst

很多時候,你需要動態地修改配置檔案裡的很多資訊,比如

IP地址

等。雖然對於高階語言來說,這有點簡單了,但對shell是個比較大的難題。這個時候,對Linux熟悉的同學,會祭出sed命令的替換模式。但是,sed命令的學習曲線,有點陡了。其實,遇到這種情況,有一個更好用的命令,那就是

envsubst

,它可以無縫地完成變數

命名替換

比如,在下面的redis配置檔案,我們需要動態部署,所以它的埠也是不一樣的。

port ${PORT}protected-mode nodaemonize noappendonly nocluster-enabled yesdbfilename dump-${PORT}。rdbcluster-config-file nodes。confcluster-node-timeout 15000cluster-announce-port ${PORT}cluster-announce-bus-port 1${PORT}

我們把埠,給它一個命名,叫做

PORT

,然後,可以將PORT作為一個變數傳入,然後生成配置檔案即可。

PORT=6379 envsubst < redis-cluster。tmpl > redis-6379。conf

這樣,envsubst就可以把PORT命名變數,替換成6379,使用過k8s的同學,應該對這個命令非常熟悉。

2。 expect

expect可以實現命令的自動化,尤其是互動式場景,比如你輸入一個make love它才有反映的這種情況。

下面,拿一個使用export實現一個2步登入的場景。比如,使用Google Authenticator中的動態令牌。指令碼可能長這個樣子。

#!/bin/shexport LC_CTYPE=“en_US。UTF-8”expect -c “spawn ssh root@67。226。201。167 -p 28869set timeout 3expect  \”root@67。226。201。167‘s password:\“set password \”bZzPddnvH88b\“send \”\$password\r\“interact”

bZzPddnvH88b

就是我們的動態密碼,上面的指令碼,將嘗試登入主機67。226。201。167,並自動輸入這個密碼。使用expect命令,可以完成一些互動式的自動化工作,能節省不少時間。

3。 sshpass

expect非常適合非常複雜的互動式環境。對於ssh登入這一塊,有一個更加簡單的命令,那就是sshpass,但你的機器上不一定有這個命令,需要主動去安裝它。

yum install shpass -y

有了它,愛情的大門,瞬間破防。你不需要再輸入

yes

,輸入進入的憑證,這一切可以自動化。你甚至可以不加

-p

引數,然後使用

SSHPASS

環境替換它。

# 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:  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

但是,你大機率執行了這個命令沒有反應。這是因為,你還需要提前做一些配置。

# vim /etc/ssh/ssh_config StrictHostKeyChecking no# vim /etc/ssh/sshd_config GSSAPIAuthentication noUseDNS no# service sshd restart

再重新執行一遍試試吧。

4。 檢視ip地址

如何檢視Linux系統的ip地址?先不要說你會了,你需要掌握各種場景下的ip地址檢視。

通常,我們會使用

ifconfig

命令,來檢視系統的ip地址,這是最常用的,但是已經不推薦了。因為ifconfig屬於被淘汰的命令一列,像centos7,已經預設沒有ifconfig這個命令了。

# ifconfigeth0: flags=4163  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        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

命令,可以簡寫為

ip a

。ip addr命令輸入

iproute

工具包,同樣可以看到ip地址。使用它,還能非常方便地看到keepalived這樣的VIP資訊,推薦。

# ip a 1: eth0:  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

但是,現在都是上雲環境了,很多都用上了docker。為了追加求docker映象的精簡化,很多連iproute包都不裝了,你現在不僅沒有ifconfig命令,就連ip addr命令也沒有了,這可如何是好。

所幸的是,我們還有hostname。透過加上

-I

引數,依然能夠看到系統的ip地址。

# hostname -I172。19。26。39

遇到狗子不要怕,條條大路通羅馬。

5。 watch

狗頭望文生義,watch就是觀察的意思。

其實,它可以制定一個間隔時間,然後執行你所指定的命令。比如檢視檔案的變化,網路的變化情況,甚至用來做定時器觸發等。

比如,我啟動了一個springboot服務,想要監聽它什麼時候啟動成功,又不想每次都執行ps,就可以使用下面的命令。

# 觀測進行watch -n 1 ’ps -ef | grep java‘# 觀測埠,更準確watch -n 1 ’ss -ltpn | grep 8080‘

當你的程序啟動成功,螢幕上就會自動輸出資訊,非常的方便。

6。 arch

這是個什麼命令呢?你會發現很多軟體的發行包,比如i386、i486等等,很容易把剛入門的搞暈了。

這個命令十分簡單,它甚至沒有引數。

# archx86_64

上面的命令,告訴我們我的系統是x86_64位架構的,我就可以下載相應的軟體包進行安裝。不至於先被被其他版本的軟體包給糟蹋一下。

x86,泛指一系列intel公司開發的處理器的架構。32位的架構,通常被稱作i386,x86,而64位的會被稱作amd64或者x86-64或者x64。

現在常用的64位架構,這個指令集是AMD設計的,Intel是從AMD獲得授權才能生產。如果intel也叫amd64,就有點打臉的味道了,所以就改了名。

不過,本質是一樣的。

End

Linux上的命令非常多,今天就先介紹這幾個了。因為一次性介紹那麼多,它會靜悄悄地躺進收藏夾裡,而不是裝進腦子裡!