Bash學習基礎知識一“命令”

Bash 學習基礎知識

目錄

一、Shell是個啥?

二、BASH的命令

    2.1 命令的語法格式

    2.2 什么是命令

    2.4 命令的類型

    2.5 命令幫助

    2.6 bash的命令操作特性

三、通配符

四、命令間交互(特殊字符)

    4.1 重定向  >或>>

    4.2 管道 | 

    4.3 反引號  “命令輸出結果引用

    4.4 花括號  {} 命令行展開

    4.5 強、弱引用‘’與“”

    4.6 ;(&&):命令執行分隔符

    4.6 || 也是個命令執行分隔符

    4.7 $ 變量替換

    4.8 \ 轉義符 

一、Shell是個啥?

首先簡單了解下什么是bash:

首先我們要理解操作系統也是一組應用程序;就像我們常用的WORD、LOL等等一樣都是程序。只不過這組程序比較特別而已,他工作在底層是可以直接與硬件進行溝通和加流的當然了還能對硬件加以控制;相對于程序員或者用戶來說直接與內核打交道還是太難了。于是shell再次就有了很大的用途,它位于內核的外層把內核做了精美的包裝讓它能夠易于溝通和交流。我們現在對計算機的操作應該都是通過Shell完成的。

Shell廣義上來說分為圖形化和命令行;windows的桌面就是windows的默認圖形化的shell;Bash是linux的默認命令行shell。這些shell都提供了用戶與內核交流的接口;詳細大家也都明白圖形化的要比命令行的要更加易于交流;但是命令行才是真正與linux打交道的金鑰匙。Bash是使用和管理linux系統的任督二脈,打通Bash方可在linux內行走江湖。

二、BASH的命令

2.1命令的語法格式:

COMMAND(命令) OPTIONS(選項) ARGUMENTS(參數)

在命令行中通常被輸入的第一個是命令,后面跟上相對應的選項和參數回車即可執行。

2.2什么是命令

通常我們所指命令包含:

1)應用程序:包含應用程序中內建的命令程序,關于內建的命令程序在下面會講到同時大家想一箱bash是個命令嗎?

2)腳本文件:通常腳本以*.sh結尾并有執行權限

2.3什么是選項參數:

選項就是對命令的作用方式進行調整,分為短選項和長選項。

       1)短選項書寫格式:-char, 例如,-l, -d, -h,-r,-R(同樣區分大小寫)

       2)多個選項間要使用空格分隔開來:-l -d –h【對于短選項的空格你隔開1個和100

個linux都會認為是一個】

       3)合并使用:-ldh

       4)長選項:–word, 例如:–long, –directory, –human-readable;注意:長選項

一般不能合并使用

5)參數有些選項需要帶參數,稱為選項參數

       以ls(顯示目標列表)為例

[root@zhuzw ~]# ls          命令單獨執行(有默認參數)

[root@zhuzw ~]# ls –a       加上一個短選項 a顯示顯示所有的列表

[root@zhuzw ~]# ls –l        短選項 l

[root@zhuzw ~]# ls –al       短選項連續使用

[root@zhuzw ~]# ls –lh /etc  短選項連續使用并制定一個目錄為這個命令的參數

[root@zhuzw ~]# ls –color=auto  ls的長選項使用不同的顏色高亮顯示不同類型的

篇幅有限就不做插圖展示了,短選項一般是單個大小寫字母前面加-區分,可以多個短

選連起來使用;長選項一幫是單個或多個單詞前面加–,不可多個長選項連起來使用。

至于命令的選項都有哪些在下面會有介紹。

2.4命令的類型:

前面我們提到過內建的命令程序現在我們來說明一下:

 內建命令: 由shell程序自帶的命令;查找方式只要你的shell啟動了shell就知道這些命令在哪  。 

       外部命令: 本身是一個獨立的可執行程序文件,命令名即為程序文件名;查找方式:通過shell的內置的環境變量PATH中指定的路徑進行查找(如下圖所示); 

shell會從左往右依次找知道找到第一個與之相對應的可執行程序為止并將它緩存在自己的命令歷史中。1.png

那么如何區分命令是內建命令還是外部命令:type COMMAND(如下圖所示)

2.png

2.5命令幫助:

2.5.1內建命令:help COMMAND (全英文的,部分命令會有中文)

3.png

2.5.2外部命令:COMMAND –help

4.png

 

2.5.3 MAN 文檔查看,獲取命令、文檔的幫助及介些信息

       man命令格式:man [#] COMMAND (調用vim查看文檔) q退出

5.png

1)手冊的段落:

NAME:

命令名稱

DESCRIPTION

命令功能的詳細描述

OPTIONS

所有選項

SYNOPSIS

使用格式

EXAMPLES

使用示例

FILES

與當前命令相關的配置文件

SEE ALSO

可參考的其它手冊

 

2)幫助中的命令格式字串:[]:可省略;<>: 不可省略;|: 二選一或多選一;…: 同類內容可以出現多個

3)man的使用技巧:

空格鍵

向文件尾部翻一屏

b

 向文件首部翻一屏

回車鍵

向文件尾部翻一行

k

 向文件首部翻一行

Ctrl+d

向文件尾部翻半屏

Ctrl+u

 向文件首部翻并屏

/keyword

 從文件首部向尾部進行搜索

?keyword

 從文件尾部向首部進行搜索

n

 顯示找到的下一個,針對/就是向尾部走;?可就是向首部走了

N

顯示找到的上一個,針對?就是向尾部走;/可就是向首部走了

 

4) man能夠為除命令之外的配置文件、系統調用、庫調用等都能提供幫助手冊,它們分別位于不同的章節中;1: 用戶命令;2: 系統調用;3: 庫調用;4: 設備文件;5: 配置文件;6: 游戲;7:雜項;8:管理命令

      可以通過whatis COMMAND 來查看哪些章節下有幫助文件。

注意:whatis根據數據庫執行查找操作,此庫為系統定期更新;可使用makewhatis手動更新;

2.6 bash的命令操作特性

2.6.1  命令記憶能力(history)

      所有操作的命令都會被linux系統記錄下來;默認的記錄條數為1000。可以通過history命命令可查看;調整保存的條數更改$HISTSIZE變量。

6.png

當用戶登出后會保存在家目錄下的.bash_history文件內。

7.png

與此目錄和文件相關的兩個環境變量:$HISTFILE(存儲路徑)、$ HISTFILESIZE(存儲條數)

通過;

Bash可以調用命令歷史列表中的命令:

    上下箭頭選擇歷史命令執行

       !#: 執行命令歷史中的第#條命令

       !!: 執行上一條命令

       !string: 執行命令歷史中最近一次以string開頭的命令;

       !$: 調用上一條命令的最后一個參數

       ESC+.:功能同上

2.6.2  命令和文件補全  輸入個不全的命令按下tab(Esc)鍵試試,一下和兩下的區別吧。

2.6.3  命令別名設置

先看個命令執行的結果

8.png

有一些常用命令的選項和輸入格式非常常用,但是輸入起來又很麻煩那么我們就給他定義個別名例如我沒常用的ls 其實就是 ls –color=auto的別名。

alias 新的命令='原命令 -選項/參數'

要刪除一個別名,可以使用 unalias 命令,如 unalias l。
小伙伴們去自定義屬于自己的命令吧??!差點忘了alias命令的作用只局限于該次登入的操作。如果你要個性化的的話請將alias命令存放到bash的初始化文件/etc/bashrc中。

三、通配符

在bash的操作環境中有一個非常有用的功能,那就是通配符。

下面列出一些常用的通配符,如下表所示

符號

意義

*

萬用字符,代表0個到無窮個任意字符

?

萬用字符,代表一定有一個任意字符

[ ]

代表一定有一個在中括號內的字符。例如:[abcd]代表一定有一個字符,可能是a、b、c、d這四個中的任何一個

[-]

若有減號在中括號時,代表在編碼順序內的所有字符。例如:[0-9]代表0到9之間的所有數字,因為數字的語系編碼是連續的

[^]

若中括號內的第一個字符為指數符號(^),那么表示反向選擇,例如:[^abcd]代表一定有一個字符,只要不是a、b、c、d中一個就可以

[:space:]

 所有空白字符,這是字符集合要引用的話需要加上[ ]。

[:punct:]

 所有標點符號

[:lower:]

所有小寫字母 [a-z]  不能寫成[z-a]

 [:upper:]

所有大寫字母 [A-Z]

[:digit:]

 所有數字     [0-9]

[:alnum:]

所有數字和字母 [A-Z0-9a-z]

[:alpha:]  

所有字母       [a-zA-Z]

以ls命令為例

查找/etc下以.d結尾的的所有文件和目錄,*就代表.d前面可以出現任意次數的任意字符。

9.png

簡單實例

10.png

字符集合要引用的話需要加上[ ]。例如下圖

11.png

重要的是多練練理解這些字符的意義并熟練應用

四、命令間交互(特殊字符)

  4.1重定向 >或>>

4.1.1:如何定義輸入輸出

標準輸入:使用文件描述符0(默認是鍵盤)

標準輸出:使用文件描述符1(默認是顯示器)

標準錯誤:使用文件描述符2(默認是顯示器)

4.1.2:重定向如何表示

>:將一個命令的輸出寫到一個文件并覆蓋舊的內容
>>:將一個命令的輸出追加到一個文件的尾部

2>或2>>:錯誤信息覆蓋或者追加給一個文件(尾部)

&>:標準輸出和錯誤輸出同樣追加給一個文件

例如我們cat 下/etc/passwd 把輸出結果重定向到/tmp/passwd文件內

[root@zhuzw-centos6 /]# cat /etc/passwd >> /tmp/passwd

[root@zhuzw-centos6 /]# cat /tmp/passwd

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

把文件的名字故意寫錯 然后使用 &>> 追加到/tmp/passwd 文件下然后使用tail 查看后幾行的結果輸出:

12.png

4.2管道 | :

管道的意思是將一個命令的輸出當作另一個命令的輸入

示例:查看/etc/passwd 文件內容 通過管道送給 cut –d制定:為分隔符 –f 7 查看并顯示第7列內同通過管道把處理結果送給 sort –u進行排序去重

13.png

4.3反引號 “命令輸出結果引用
  可以將以反引號括起來的命令的輸出作為另一個命令的命令行參數

14.png

 

4.4花括號 {} 命令行展開

 創建a_當前時間;b_當前時間的文件就可以使用花括號(請無視那個寫錯的命令)

15.png

4.5 強、弱引用‘’與“”

‘’ :強引用,由單引號括起來的字符都作為普通字符出現。特殊字符用單引號括起來以后,也會失去原有意義,而作為普通字符解釋

“”:弱引用,由雙引號括起來的字符,除了“$”,“\”,和“””這幾個字符仍是特殊字符并保留其特殊功能外,其余字符仍作為普通字符對待。對于$來說就是用其后指定的變量值來代替這個變量和$

16.png

4.6;(&&):命令執行分隔符

COMMAND;COMMAND;COMMAND

COMMAND && COMMAND && COMMAND

格式分割符前后的命令會依次順序執行;如下圖所示

17.png

18.png

還是加上空格看著舒服

4.6 || 也是個命令執行分隔符,
格式:# COMMAND 1 || COMMAND 2

只有當命令1執行失敗的時候才執行命令2

4.7 $ 變量替換

例如 echo $PATH 顯示的結果就是變量PATH的變量內容而不是這串字符。

4.8 \轉義符

\:轉意符將特殊字符或通配符還原成一般字符

示例

19.png

    我是個新手;接觸這些前期也很難全部理解搞明白,那么這樣想其實這些語法、特殊字符、通配符都是規則,一個Bash的游戲規則;且一切的解釋權在Bash。既然你要跟Bash玩耍你就要遵守它所制定的游戲規則;不遵守人家就不陪你玩。那么就把這些規則一個個的符統計出來看一個個的去理解實驗。    

    以上這些內容應該是bash命令使用中的基礎的基礎,做到了然于心最好了。其實不用背多用用自然就全記住了。當然了我想我也并沒有列舉全后續有學習到先的在加上。謝謝!

原創文章,作者:東郭先生,如若轉載,請注明出處:http://www.www58058.com/2386

(0)
東郭先生東郭先生
上一篇 2015-04-02
下一篇 2015-04-03

相關推薦

  • HTTP詳解(3)-http1.0 和http1.1 區別

    翻了下HTTP1.1的協議標準RFC2616,下面是看到的一些它跟HTTP1.0的差別。 1. Persistent Connection持久連接        在HTTP1.0中,每對Request/Response都使用一個新的連接。      …

    Linux干貨 2015-04-04
  • 初涉Linux基本要點概括(1)續

       6. Linux發行版都基本遵循文件系統層級標準(Filesystem Hierarchy Standard)。                 續   …

    Linux干貨 2016-10-13
  • 馬哥教育網絡班21期-第四周課程練習

    Do one thing at a time,and do well. 小僧近期忙的去尿尿的時間都要擠出來…..! 無人能理解 zZzz 復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 編輯/etc/group文件,添加組hadoop。 手動編輯/etc/pass…

    Linux干貨 2016-07-29
  • 網絡配置——IP劃分網絡基礎

    Linux網絡屬性配置: 計算機網絡: TCP/IP:協議棧         ISO,OSI:協議棧學習 MAC:Media Access Control          48bits: &nbsp…

    Linux干貨 2016-09-07
  • yum

    yum yum:YellowdogUpdate Modifier,rpm的前端程序,可解決軟件包相關依賴性,可在多個庫之間定位軟件包,up2date的替代工具 yum repository: yum repo,存儲了眾多rpm包,以及包的相關的元數據文件(放置于特定目錄repodata下)文件服務器:http://https://ftp://file:// …

    2017-08-17
  • RAID詳解

    測試機centos6.7 x86_64 一、RAID是什么     簡單描述:RAID(Redundant Array of indenpensive Disk)獨立磁盤冗余陣列:磁盤陣列是把多個磁盤組成一個陣列,當作單一磁盤使用,它將數據以分段或條帶(striping)的方式儲存在不同的磁盤中,存取數據時,陣列中的相關磁盤一起…

    2016-02-14

評論列表(2條)

  • stanley
    stanley 2015-04-04 22:50

    比上次的好了不知多少倍~非常棒,不過還有很大提升空間。技術需要沉淀,不驕不躁,不卑不亢,定成大器,加油

  • stanley
    stanley 2015-04-04 22:50

    下次記得加標簽哦,可以大提高文檔的搜索命中率

欧美性久久久久