免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1204 | 回复: 0
打印 上一主题 下一主题

BASH Shell ~~! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-16 01:32 |只看该作者 |倒序浏览
没有多少时间看,今天有些忙,先大概看了一下内容,没打算放东西上来。还是不够完整..先了解一下好了.....
知道什麼是 Shell 之後,那麼我們來瞭解一下 Linux 使用的是哪一個 shell 呢?什麼!哪一個?難道說 shell 不就是『一個 shell 嗎?』哈哈!那可不!由於早年的 Unix 年代,發展者眾,所以由於 shell 依據發展者的不同就有許多的版本,例如常聽到的 Bourne SHell (sh) 、在 Sun 裡頭預設的 C SHell、 商業上常用的 K SHell、, 還有 TCSH 等等,每一種 Shell 都各有其特點。至於 Linux 使用的這一種版本就稱為『[color="#000066"] Bourne Again SHell (簡稱 bash ) 』,這個 Shell 是 Bourne Shell 的增強版本,也是基準於 GNU 的架構下發展出來的呦!
在介紹 shell 的優點之前,先來說一說 shell 的簡單歷史吧:第一個流行的 shell 是由 Steven Bourne 發展出來的,為了紀念他所以就稱為 Bourne shell ,或直接簡稱為 sh !而後來另一個廣為流傳的 shell 是由柏克萊大學的 Bill Joy 設計依附於 BSD 版的 Unix 系統中的 shell ,這個 shell 的語法有點類似 C 語言,所以才得名為 C shell ,簡稱為 csh !由於在學術界 Sun 主機勢力相當的龐大,而 Sun 主要是 BSD 的分支之一,所以 C shell 也是另一個很重要而且流傳很廣的 shell 之一(因為太多的程式設計師使用的就是 C 語言啦!)!
好了,那麼 BASH 是怎麼一回事呢?這個 shell 是 GNU 計畫中重要的工具軟體之一,目前也是 GNU 作業系統中標準的 shell ,他主要相容於 sh ,並且依據一些使用者需求,而加強的 shell 版本,可以說目前幾乎所有的 Linux distribution 都是使用 bash 作為管理核心的主要 shell !因此,不論您使用的是那個 distribution ,你都難逃需要學習 bash 的宿命啦!那麼這個 shell 有什麼好處,幹嘛 Linux 要使用他作為預設的 shell 呢? BASH 主要的優點有底下幾個:
  • [color="#000099"]命令編修能力(類似 DOS 的 doskey 功能):
    使用 bash 裡頭,個人認為相當棒的一個功能就是『他能記憶使用過的指令!』這功能真的相當的棒!因為我只要在指令列按『上下鍵』就可以找到前一個輸入的指令!而在 Mandrake 9.0 預設的指令記憶功能可以到達 1000 個!也就是說,你曾經下達過的指令都被記錄下來了,記錄的檔案在你的家目錄內的 [color="#000066"].bash_history !不過,需要留意的是, [color="#000066"]~/.bash_history 記錄的是前一次登入以前所執行過的指令,而至於這一次登入所執行的指令都被暫存在暫記憶體中,當您成功的登出系統後,該指令記憶才會記錄到 .bash_history 當中!這有什麼功能呢?最大的好處就是可以『[color="#000066"]查詢曾經做過的舉動!』,如此可以知道你的執行步驟,那麼就可以追蹤您曾下達的指令,以作為除錯的工具!但如此一來也有個煩惱,就是如果被駭客入侵了,那麼他只要翻你曾經執行過的指令,剛好你的指令又跟系統有關(例如直接輸入 MySQL 的密碼在指令列上面)那麼很容易就被破解你的 Linux 主機!所以,[color="#000066"]最好是將記錄的指令數目減小一點較好
  • [color="#000099"]檔案比對補全功能(比對資料正確性):
    這個功能也相當的棒!主要分為指令補全與檔案名稱補全:
    • [color="#000066"]指令補全:如果在執行命令的時候不想按下太多的按鍵,例如指令 pcprofiledump 夠長吧!好了,那麼如果你輸入了 pcprofile 之後,再按下 [Tab] 按鍵的話,那麼 bash 馬上會自動的將後面的 dump 接上來!那如果有重複的指令呢?那麼按下兩次 [Tab] 將會把所有重複的指令給他列出來囉!那麼就有個特殊的案例啦,就是『[color="#000066"]直接在提示字元後面連按兩次  鍵,則系統會將所有可以使用的指令都列出來!』那麼如果我想要知道目前系統裡面,所以 b 開頭的指令呢?呵呵!就是按下 b 之後,連按兩次  就可以知道啦!
    • [color="#000066"]檔案名稱補全:此外,如果你用 vi 來讀取某個檔案時,例如 /etc/man.config 這個檔案好了,那麼您可以輸入 vi /etc/man. 之後,直接按下  按鍵,那麼該檔案名稱就會被自動的補齊囉!呵呵!很方便,而且對於檔案名稱或者指令名稱的正確性上面,幫助還蠻大的吧!是的!真的是很方便的功能,所以,[color="#000066"]有事沒事,在 bash shell 底下,多按幾次  是一個不錯的習慣啦
  • [color="#000099"]命令別名(alias)設定功能:
    假如我需要知道這個目錄底下的所有檔案(包含隱藏檔)及所有的檔案屬性,那麼我就必須要下達 ls -al 這樣的指令列,唉!真麻煩,有沒有更快的取代方式?呵呵!就使用命令別名呀!例如我最喜歡直接以 lm 這個自訂的命令來取代上面的命令,也就是說, lm 會等於 ls -al 這樣的一個功能,嘿!那麼要如何作呢?就使用 alias 即可!你可以在指令列輸入 alias 就可以知道目前的命令別名有哪些了!也可以直接下達命令來設定別名呦:
      [color="#000066"]alias lm='ls -al'
  • [color="#000099"]工作控制(jobs)、前景背景控制:
    這部分我們在之後的資源管理章節中會再提及!使用前、背景的控制可以讓工作進行的更為順利!至於工作控制(jobs)的用途則更廣,可以讓我們隨時將工作丟到背景中執行!而不怕不小心使用了 [Ctrl] + C 來停掉該程序!真是好樣的!此外,也可以在單一登入的環境中,達到多工的目的呢!
  • [color="#000099"]Shell scripts 的強大功能:
    在 DOS 年代還記得將一堆指令寫在一起的所謂的『批次檔』吧?在 Linux 底下的 shell scripts 則發揮的更為強大的功能,可以將您日常生活當中常需要下達的連續指令寫成一個檔案,該檔案並且可以透過對談互動式的方式來進行主機的偵測工作!也可以藉由 shell 提供的環境變數及相關指令來進行設計,哇!整個設計下來幾乎就是一個小型的程式語言了!該 scripts 的功能真的是超乎我的想像之外!以前在 DOS 底下需要程式語言才能寫的東西,在 Linux 底下使用簡單的 shell scripts 就可以幫你達成了!真的利害!!這部分我們在後續章節再來談!
[color="#000000"]在瞭解了 BASH 的優點之後,再來我們要來討論的是:[color="#3333ff"]那如何在 Shell 提供的環境中下達指令呢[color="#000000"]?其實很簡單的,下達指令的方式為: [color="#ffffff"][root@test /root]# [color="#ffff00"]command [-options] parameter1 parameter2 ...
[color="#ffffff"]               [color="#ff9900"]      指令     選項      參數(1)    參數(2)
[color="#ff9900"]1. command 為指令的名稱,例如變換路徑的指令為 cd 等等;
[color="#ff9900"]2. 中刮號[]並不存在於實際的指令中,而加入參數設定時,通常為 - 號,有時候完整名稱會輸入 -- 符號;
[color="#ff9900"]3. parameter1 parameter2.. 為依附在 option 後面的參數,或者是 command 的參數;
[color="#ff9900"]4. command, -options, parameter1.. 這幾個咚咚中間以空格來區分,不論空幾格 shell 都視為一格;
[color="#ff9900"]5. 指令太長的時候,可以使用  符號來跳脫 [Enter] 符號,使指令連續到下一行。
[color="#ffffcc"]實例:
[color="#ffffff"][root@test /root]# [color="#ffff00"]ls -al /root [color="#ffffff"] [color="#ff9900"]  
[color="#ffffff"][root@test /root]# [color="#ffff00"]./configure --prefix=/usr/local --with-tcp_wrappers
[color="#ffffff"]>[color="#ffff00"] --with-pam  [color="#ffffff"]  [color="#ffff00"]  
[color="#ffffff"][root@test /root]#[color="#ffff00"] ls           -al   /root [color="#ffffff"] [color="#ff9900"]
很簡單吧!OK!那麼再來一個問題:『[color="#000099"]Shell 是什麼時候開始接管 Linux 主機的!?』我們在後面會再提到『[color="#000099"]開機流程』的介紹,這裡先跳過去,假設你的機器已經開機成功了,那麼主機便進入等待使用者 login 的狀態。當使用者輸入了帳號與密碼,並且順利的 pass 之後,經過了 shell 的環境變數檔案讀取功能,最後,使用者進入自己的『家目錄』之後,例如 root 的家目錄在 /root 底下,一般使用者的家目錄則在 /etc/passwd 這個檔案裡面規定,那麼主機就已經丟了一個程序稱為 bash 的給你操作囉!

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/5935/showart_21610.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP