《調教命令行03》認識一下,感覺不是說來就來的


《調教命令行03》認識一下,感覺不是說來就來的


《調教命令行01》選Linux發行版,就像挑女朋友


《調教命令行02》準備一個冰清玉潔的Linux系統

接上文。

據說,如果和一個人對視5秒,就能愛上對方。小王知道這個道理,漸漸的想入非非。他想象著嘴唇傳來一陣微涼的觸感,然後丹田裡的空氣被迅速抽乾。

來一場無拘無束的桌咚,閃亮的屏幕是他們的見證,跳動的字符是他們的伴奏。

他的背逐漸靠在了鍵盤上,雙手倒扣著桌子,亂七八糟的字符流源源不斷的輸入到終端。但是等等!這些肆意輸入的字符,會不會傷害到他管理的服務器?或者,在他按下Enter鍵之前,都是安全的?

這個想法把他拉回到了現實,讓他從恍惚中驚醒。

稍微思考了一下,他確定,是不容許貓這樣的動物在他鍵盤上跳來跳去的。

《調教命令行03》認識一下,感覺不是說來就來的

萬事開頭難。面對黑漆漆的Linux窗口,要勇敢的走出第一步。不要怕輸錯了什麼,系統健壯的很。命令行通常會擁有比圖形界面更高的效率,更加重要的是它可以做自動化之類的小工具,這使得生產力產生質的飛躍。

現在,你已經安裝好了centos,並遠程連接上了它。我們擁有了它,但並不能瞭解它的脾氣。接下來,讓我們進入Linux命令行的世界。和我簽訂契約吧,少年。

本小節會使用非常詳細的演進方式,來看一下一個命令,是怎樣生成和執行的。

1、簡單嘗試

好啦,我們現在就在終端裡了。什麼叫做終端呢?你在很多黑客電影裡,看到的黑漆漆的界面就是,它提供了一個可以輸入字符串的交互式界面,至於那些閃光的、掃描機一樣的東西,是不存在的。

嘗試輸入些什麼吧。比如:jdsjf。

<code>[root@localhost ~]# jdsjf-bash: jdsjf: command not found/<code>
《調教命令行03》認識一下,感覺不是說來就來的

我們再次把這張圖貼一下。怎麼回事?命令的輸出翻譯成中文,就是“找不到命令”的意思。什麼叫命令?就是我們上面隨便輸入的字符串jdsjf。

然後,我們看下提示中其他一些有用的東西。

↓↓↓↓↓↓

bash 代表的是我們所使用的shell,shell可以認為是一個解釋器,將我們的輸入解釋成一系列可執行的指令。現在的linux發行版,最流行的就是bash解釋器,幾乎每個都預裝了它。

命令找不到,證明我們的字符串bash解釋不了。但是,Linux上一些目錄裡的文件,是可以被默認找到的,這些目錄的集合,就叫PATH 。PATH還是一個環境變量,我們可以通過命令查看它的尊容。

<code>[root@localhost ~]# echo $PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin/<code>

想要知道系統中有哪些命令,就可以看下上面這些文件夾中,都有哪些文件。文件非常非常之多,但是大部分我們不會接觸。所以,xjjdog才會寫這麼個東西—聚焦那些最常用,最有用的命令,最常用的參數,最有用的場景。

命令輸出後,還有一些額外的東西,比如[root@localhost ~],這部分叫做提示符,光標會一直跳動,等待你的輸入。這部分是可以定製的,甚至可以定製的十分漂亮。

2、Hello World

到現在為止,我們什麼都沒得到。按照程序員的想法來說,就要實現一個hello world的程序。在終端shell裡,這個過程變得簡單,遠比寫一個java程序簡單。

<code>[root@localhost ~]# echo "Hello World"Hello World/<code>

如上所示,echo的意思就是輸出一些內容。後面的Hello World,就叫做參數,它們之間以空格分隔,可以接受多個參數。

<code>[root@localhost ~]# echo "Hello World" , "Fuck 996"
Hello World , Fuck 996/<code>

以上命令能夠正常運行,證明echo是我們的終端能夠認識的一個命令。那到底這個命令是在什麼地方呢?可以使用whereis命令進行查找。

<code>[root@localhost ~]# whereis echoecho: /usr/bin/echo /usr/share/man/man1/echo.1.gz/<code>

命令顯示。我們的echo命令全路徑,是/usr/bin/echo,由於它處於PATH目錄中,所以能夠被識別到。

3、將命令加入PATH

接下來,我們把上面的命令,做成一個腳本。然後將這個腳本,放到PATH目錄中。不過先等等,我們要先給命令起個名字。

首先需要創建一個文件。在Linux上,創建文件使用touch命令。

<code>[root@localhost ~]# touch jdsjf/<code>

命令執行後,什麼都沒發生,它只是創建了一個空文件。接下來,我們向其中添加一些內容。

<code>[root@localhost ~]# echo "echo 'Hello World'" > jdsjf/<code>

注意符號>,它的意思是,將前面的輸出,重定向到後面的文件中。執行完上面的命令,jdsjf 中的內容,就變成了echo 'Hello World。

接下來,我們嘗試著去執行剛才生成的命令。

<code>[root@localhost ~]# ./jdsjf-bash: ./jdsjf : Permission denied/<code>

我們通過相對路徑的方式,來執行剛剛生成的命令。結果,終端顯示我們並沒有這個命令的執行權限。

其實,Linux在權限控制這一方面,非常的詳細。一個文件,有可讀、可寫、可執行三種屬性。如果想要一個文件能夠執行,需要給它添加執行權限,這個過程是由命令chmod完成的。

<code>[root@localhost ~]# chmod u+x jdsjf[root@localhost ~]# ./jdsjfHello World/<code>

我們將在後面的章節,來詳細介紹權限方面的知識。如上所示,命令已經能正常輸出,接下來,我們把命令移動到PATH中的一個目錄。

<code>[root@localhost ~]# mv jdsjf /usr/local/bin/[root@localhost ~]# jdsjfHello World/<code>

不需要加任何的相對路徑,現在,只需要輸入jdsjf,就可以正常輸出一串數字。我們成功的讓一個沒有任何意義的字符串,表達了它的想法。雖然我們依然是它的主宰。

4、小結

本小節通過構建一個簡單的小命令,說明了PATH環境變了的重要性。並初步接觸了以下幾個命令:

  • echo 輸出一些信息。
  • touch 創建一個文件。
  • > 重定向符號。
  • chmod 修改文件權限。
  • mv 移動文件。

5、思考&擴展

1、我可以自定義一個目錄,比如/root/mybin,把它加入到PATH麼?

2、我可以省略上面的touch命令,直接使用重定向生成文件麼?

3、除了放到PATH和相對路徑,還有沒有其他的命令執行方式?

END

“你不瞭解我”,妹子的聲音在對視4.5秒的時候傳來,緊接著她抽出了手。

希望落空,痛苦在小王的內心逐步蔓延,像是酒精注射進了體內,吸乾了所有的水分,透著不太真實的醉意。但小王的表情依舊平靜。

“我卻瞭解你”,妹子的聲音接著傳來,又讓小王從混沌中逐漸清醒。

“所以,這並不公平”。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高併發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。


分享到:


相關文章: