日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

《鳥哥的Linux私房菜》學(xué)習(xí)筆記(2)——Bash特

系統(tǒng) 2025 0

一、shell的基本概念: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

shell? 意思 是外殼,它是 離用戶最近的程序。shell提供用戶操作系統(tǒng)的接口, 我們通過 shell 將輸入的命令與 內(nèi)核 通信,使內(nèi)核可以控制 硬件 來正確無誤的工作。廣義上的shell包含兩類GUI和CLI。

  GUI:Gnome,KDE,Xface

  CLI:sh,csh,ksh,bash,tcsh,zsh(合法的shell要寫入/etc/shells這個(gè)文件,系統(tǒng)某些服務(wù)在運(yùn)行過程中,可能會(huì)去檢查用戶能夠使用的shell)

  當(dāng)用戶登陸的時(shí)候,系統(tǒng)會(huì)分配一個(gè)shell來進(jìn)行工作。默認(rèn)會(huì)取得的shell記錄在/etc/passwd文件中,可以看到hao這個(gè)用戶默認(rèn)取得的是bash。

      
        
          [hao@hao ~]$
        
      
      
        cat
      
       /etc/
      
        passwd
      
      
        

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

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

...
      
      
        

hao:x:
      
      
        500
      
      :
      
        500
      
      :haohao:/home/hao:/bin/bash
    

  當(dāng)有多個(gè)用戶登陸的時(shí)候,會(huì)有多個(gè)進(jìn)程,進(jìn)程之間彼此互不相干,因?yàn)閷?duì)于每個(gè)進(jìn)程來說,它只認(rèn)為當(dāng)前主機(jī)上只有自己和內(nèi)核存在。linux允許一個(gè)用戶賬號(hào)登陸多次 。

  進(jìn)程是程序的副本,進(jìn)程是程序執(zhí)行的實(shí)例,是有生命周期的,由內(nèi)核進(jìn)行管理。

  用戶工作環(huán)境,多個(gè)用戶盡管使用的都是shell程序,但是各個(gè)用戶的工作環(huán)境設(shè)定卻可以各不相同,只不過默認(rèn)情況下除了管理員,都是一樣的。

  shell,子shell。可以在一個(gè)shell中在啟動(dòng)一個(gè)子shell。父shell和子shell都不能意識(shí)到彼此正在運(yùn)行。很多時(shí)候?qū)Ω竤hell的設(shè)定對(duì)子shell無效,子shell的設(shè)定對(duì)父shell也無效。下面的通過pstree命令可以看出該關(guān)系,如果退出到上一層bash,可以用exit命令。退到最上一層時(shí)候,會(huì)退出當(dāng)前登陸。

      
        
          [hao@hao ~
        
      
      
        
          
            ]$
          
        
        bash


        
          
            [hao@hao 
          
        
      
      
        
          ~
        
      
      
        
          
            ]$
          
        
         pstree

init
      
      -+-NetworkManager-+-
      
        dhclient

     
      
      |                `-
      
        {NetworkManager}

     
      
      |-
      
        abrtd

     
      
      |-
      
        acpid

     ...
      
      
        
          |-sshd---sshd---sshd---bash---bash---pstree 
        
      
      |-
      
        trashapplet

    ...
      
      
        
          
            [hao@hao 
          
        
      
      
        
          ~
        
      
      
        
          
            ]$
          
        
         bash


        
          
            [hao@hao 
          
        
      
      
        
          ~
        
      
      
        
          
            ]$
          
        
         pstree        

init
      
      -+-NetworkManager-+-
      
        dhclient

     
      
      |                `-
      
        {NetworkManager}

     
      
      |-
      
        abrtd

     
      
      |-
      
        acpid

     ...
      
      
        |-sshd---sshd---sshd---bash---bash---bash---pstree

     
      
      |-
      
        trashapplet

    ...
      
    

  當(dāng)然,bash下也可以嵌套運(yùn)行csh,ksh

      
        
          [hao@hao ~
        
      
      
        
          
            ]$
          
        
         pstree

init
      
      -+-NetworkManager-+-
      
        dhclient

     
      
      |                `-
      
        {NetworkManager}

     
      
      |-
      
        abrtd

     
      
      |-
      
        acpid

     
      
      |-
      
        atd

    ...

     
      
      
        |-sshd---sshd---sshd---bash---pstree

     
      
      |-udevd---
      
        2
      
      *
      
        [udevd]

     `
      
      -
      
        wpa_supplicant


        
          
            [hao@hao 
          
        
      
      
        
          ~
        
      
      
        
          
            ]$
          
        
        csh


        
          
            [hao@hao 
          
        
      
      
        
          ~
        
      
      
        
          
            ]$
          
        
        pstree

init
      
      -+-NetworkManager-+-
      
        dhclient

     
      
      |                `-
      
        {NetworkManager}

     
      
      |-
      
        abrtd

     
      
      |-
      
        acpid

     
      
      |-
      
        atd

     ...

     
      
      
        |-sshd---sshd---sshd---bash---csh---pstree

     
      
      |-udevd---
      
        2
      
      *
      
        [udevd]

     `
      
      -wpa_supplicant
    

二、為什么學(xué)習(xí)shell ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

  • 一法通,萬法通。雖然X Window將所有用到的軟件都集成在一起,但它并非是一個(gè)完整的套件,所以某些時(shí)候當(dāng)升級(jí)或者使用其他套件管理模塊時(shí),會(huì)遇到一些麻煩。
  • 遠(yuǎn)程管理:命令行界面比較快。Linux的管理經(jīng)常需要遠(yuǎn)程聯(lián)機(jī),聯(lián)機(jī)時(shí)命令行界面的傳輸速度比較快,而且較不容易出現(xiàn)斷線或者信息外流。

三、shell的特性???????????????????????????????? :

1、命令歷史、命令補(bǔ)全

  默認(rèn)的命令記憶功能可以達(dá)到1000(環(huán)境變量HISTSIZE保存該數(shù)值)個(gè),前一次登陸以前所執(zhí)行過的命令歷史記錄在~/.bash_history,而本次登陸所執(zhí)行的命令都被暫存在臨時(shí)內(nèi)存中,當(dāng)注銷后,該命令記憶才會(huì)被記錄到~/.bash_history當(dāng)中。

  查看命令歷史(包含本次執(zhí)行的history命令):history

    -c(clear):清空命令歷史

    -d offset [n]:刪除第offset條命令,history -d 500 10從第五百條命令往后刪10條

    -w(wriet):將當(dāng)前緩沖區(qū)中歷史命令寫入到歷史文件中去。

    n(number):列出最近的n條命令行。

  history歷史命令的使用技巧:

  !n:執(zhí)行命令歷史的第number命令

  !-n:執(zhí)行命令歷史記錄的倒數(shù)第n條命令。

  !!:執(zhí)行上一條命令。

  !vi:執(zhí)行命令歷史中最近一個(gè)以vi開頭的命令。

      [hao@hao ~
      
        ]$ history

    
      
      
        1
      
        ll etc/
      
        

   ...

  
      
      
        141
      
      
        ls
      
       -
      
        a

  
      
      
        142
      
        LANG=
      
        en

  
      
      
        143
      
      
        ls
      
       -
      
        a

  
      
      
        144
      
        ll ~/
      
        .bash_history 

  
      
      
        145
      
      
        cat
      
       ~/
      
        .bash_history 

  
      
      
        146
      
      
        man
      
      
         history

  
      
      
        147
      
        history -
      
        w
      
      
        148
      
      
          history

  
      
      
        149
      
      
        cat
      
       ~/
      
        .bash_history

  
      
      
        150
      
      
          history

[hao@hao 
      
      ~]$ !
      
        141
      
      
        ls
      
       -
      
        a

.              .bash_history  .cache     .gconf           .gnote           .gvfs            .mozilla       .recently
      
      -used.xbel  .xsession-errors.old  ??????  ??????
      
        

..             .bash_logout   .config    .gconfd          .gnupg           .history         .nautilus      .
      
      
        ssh
      
                       ??????                ??????
      
        

.ICEauthority  .bash_profile  .dbus      .gnome2          .gstreamer
      
      -
      
        0.10
      
        .imsettings.log  .pulse         .viminfo             ?????????             ??????
      
        

.abrt          .bashrc        .esd_auth  .gnome2_private  .gtk
      
      -bookmarks   .local           .pulse-cookie  .xsession-errors     ??????                ??????
    

  命令補(bǔ)全:命令補(bǔ)全是在PATH環(huán)境變量下搜索命令。tab鍵自動(dòng)補(bǔ)全(唯一),連敲兩下tab鍵可以搜索所有已所敲字符為開頭的命令。 

2、管道、重定向

3、命令別名

      
        
          root@hao:~
        
      
      
        
          
            #
          
        
        alias

alias 
      
      
        egrep
      
      =
      
        '
      
      
        egrep --color=auto
      
      
        '
      
      
        

alias 
      
      
        fgrep
      
      =
      
        '
      
      
        fgrep --color=auto
      
      
        '
      
      
        

alias 
      
      
        grep
      
      =
      
        '
      
      
        grep --color=auto
      
      
        '
      
      
        

alias l
      
      =
      
        '
      
      
        ls -CF
      
      
        '
      
      
        

alias la
      
      =
      
        '
      
      
        ls -A
      
      
        '
      
      
        

alias ll
      
      =
      
        '
      
      
        ls -alF
      
      
        '
      
      
        

alias 
      
      
        ls
      
      =
      
        '
      
      
        ls --color=auto
      
      
        '
      
    

alias CMDALIAS='COMMAND [options] [arguments]'

      
        
          root@hao:~#
        
      
       alias cls=
      
        '
      
      
        clear
      
      
        '
      
    

  在shell中定義的別名只在當(dāng)前shell的生命周期中有效,別名的有效范圍為當(dāng)前shell進(jìn)程,即使相同的用戶在另一個(gè)shell中。若想讓該別名永久有效,只需要將該別名寫入shell應(yīng)用程序的配置文件。

  撤銷命令別名:unalias CMDALIAS;

  如果命令別名與原命令是一個(gè)名字,但是命令別名加入了一些選項(xiàng)。若此時(shí)想使用原命令,則需要使用\COMMAND。

4、命令替換

  把命令中某個(gè)子命令替換為其執(zhí)行結(jié)果的過程叫做命令替換,如下面把子命令pwd的執(zhí)行結(jié)果替換為命令echo的執(zhí)行結(jié)果。

  格式$(command)或者`command`

      
        
          hao@hao:~$
        
      
      
        pwd
      
      

/home/
      
        hao


        
          
            hao@hao:
          
        
      
      
        
          ~$
        
      
      
        echo
      
      
        "
      
      
        This current /home/hao
      
      
        "
      
      
        

This current 
      
      /home/
      
        hao


        
          
            hao@hao:
          
        
      
      
        
          ~$
        
      
      cd /etc/sysctl.d/
      
        
           hao@hao:/etc/sysctl.d$
        
      
      
        echo
      
      
        "
      
      
        This current directory is $(pwd).
      
      
        "
      
      
        

This current directory is 
      
      /etc/
      
        sysctl.d.


        
          
            hao@hao:
          
        
      
      
        
          /etc/
        
      
      
        
          
            sysctl.d$
          
        
        cd


        
          
            hao@hao:
          
        
      
      
        
          ~$
        
      
      
        echo
      
      
        "
      
      
        This current directory is $(pwd).
      
      
        "
      
      
        

This current directory is 
      
      /home/hao.
    

  在當(dāng)前目錄下(./)創(chuàng)建一個(gè)以當(dāng)前時(shí)間命名的txt文件。

      
        
          hao@hao:~$
        
      
      
        touch
      
       ./
      
        file
      
      -$(
      
        date
      
       +%F-%H-%M-%
      
        S).txt


        
          
            hao@hao:
          
        
      
      
        
          ~$
        
      
      
        ls
      
      
        

examples.desktop  
      
      
        file
      
      -
      
        2014
      
      -
      
        08
      
      -
      
        01
      
      -
      
        16
      
      -
      
        52
      
      -
      
        15
      
      .txt  ??????  ?????????  ??????  ??????  ??????  ??????  ??????  ??????
      
        
           hao@hao:~$ 
        
      
    

 補(bǔ)充,bash支持的三種引號(hào):

  • 單引號(hào)'':強(qiáng)引用,不完成變量替換
  • 雙引號(hào)"":弱引用,可以實(shí)現(xiàn)變量替換
  • 反引號(hào)``:命令替換

5、命令行編輯

  光標(biāo)跳轉(zhuǎn):

    ctrl+a跳到行首

    ctrl+e跳到行尾

    ctrl+u刪除光標(biāo)至命令行首的內(nèi)容

    ctrl+k刪除光標(biāo)至命令行尾的內(nèi)容

    ctrl+->向右跳轉(zhuǎn)一個(gè)單詞

    ctrl+<-向左跳轉(zhuǎn)一個(gè)單詞

    ctrl+l清屏

6、命令行展開

7、文件名通配,globbing

 *: 任意長度的任意字符。/root/test目錄下以a開始的任意文件

      
        
          root@hao:~/test#
        
      
       tree /
      
        root


      
      /
      
        root


      
      |--
      
         m


      
      |   `--
      
         n


      
      |       `--
      
         t

`
      
      --
      
         test

    
      
      |--
      
         a

    
      
      |--
      
         a123

    
      
      |--
      
         ab123

    
      
      |--
      
         abc

    
      
      |--
      
         x12

    
      
      |--
      
         xyz

    `
      
      --
      
         xyz123




      
      
        4
      
       directories, 
      
        7
      
      
         files


        
          
            root@hao:
          
        
      
      
        
          ~/test#
        
      
      
        ls
      
       a*
      
        

a  a123  ab123  abc
      
    

  ?: 匹配任意單個(gè)字符。文件名第二個(gè)字符是y的文件

      
        
          root@hao:~/test#
        
      
      
        ls
      
       ?y*
      
        

xyz  xyz123
      
    

  []: 匹配指定范圍內(nèi)的任意單個(gè)字符。 以字母開頭,數(shù)字結(jié)尾的文件。還有一些特殊字符,可以使用man 7 glob查看,常用的如下。

  •   [[:space:]], 空白字符
  •   [[:punct:]], 標(biāo)點(diǎn)符號(hào)
  •   [[:lower:]], 小寫字符
  •   [[:upper:]], 大寫字母
  •   [[:alpha:]], 大小寫字母
  •   [[:diget:]], 數(shù)字
  •   [[:alnum:]],字母和數(shù)字
      
        
          ,root@hao:~/test#
        
      
      
        ls
      
       [a-zA-Z]*[
      
        0
      
      -
      
        9
      
      
        ]

a123  ab123  x12  xyz123
      
    

  以字母開頭和結(jié)尾的文件名中間包含空格的文件

    
      
        root@hao:~/test# 
        
          touch 
          
            '
            
              a b
              
                '
                
                  
                     root@hao:~/test#
                  
                
                
                  ls
                  
                     a b a123 ab123 abc x12 xyz xyz123
                    
root@hao:~/test# ls [[:alpha:]]*[[:space:]]* [[:alpha:]] a

 [^]: 匹配指定范圍之外的任意單個(gè)字符。以非a開頭的所有文件

      
        
          root@hao:~/test#
        
      
      
        ls
      
       [^a]*
      
        

x12  xyz  xyz123
      
    

8、變量

9、編程

《鳥哥的Linux私房菜》學(xué)習(xí)筆記(2)——Bash特性


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 玉树县| 五台县| 云阳县| 宣汉县| 绥化市| 华容县| 桂东县| 临城县| 甘南县| 莱西市| 绥化市| 康保县| 璧山县| 石狮市| 怀宁县| 澳门| 库伦旗| 鄂温| 珠海市| 新巴尔虎左旗| 扎鲁特旗| 三河市| 广元市| 三都| 宁波市| 白银市| 雷山县| 股票| 西乌珠穆沁旗| 临澧县| 漳平市| 将乐县| 扎鲁特旗| 无为县| 怀宁县| 鄂温| 武胜县| 彭泽县| 关岭| 建德市| 高雄市|