自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

linux shell攻略上篇

系統(tǒng) Linux
Linux系統(tǒng)的shell作為操作系統(tǒng)的外殼,為用戶提供使用操作系統(tǒng)的接口。它是命令語言、命令解釋程序及程序設(shè)計(jì)語言的統(tǒng)稱。光了解概念士不行,本文將進(jìn)一步為大家講解linux shell。

shell是用戶和Linux操作系統(tǒng)之間的接口。Linux中有多種shell,其中缺省使用的是Bash。本章講述了shell的工作原理,shell的種類,shell的一般操作及Bash的特性。     

  什么是shell

  Linux系統(tǒng)的shell作為操作系統(tǒng)的外殼,為用戶提供使用操作系統(tǒng)的接口。它是命令語言、命令解釋程序及程序設(shè)計(jì)語言的統(tǒng)稱。

  shell是用戶和Linux內(nèi)核之間的接口程序,如果把Linux內(nèi)核想象成一個(gè)球體的中心,shell就是圍繞內(nèi)核的外層。當(dāng)從shell或其他程序向Linux傳遞命令時(shí),內(nèi)核會(huì)做出相應(yīng)的反應(yīng)。

  shell是一個(gè)命令語言解釋器,它擁有自己內(nèi)建的shell命令集,shell也能被系統(tǒng)中其他應(yīng)用程序所調(diào)用。用戶在提示符下輸入的命令都由shell先解釋然后傳給Linux核心。

  有一些命令,比如改變工作目錄命令cd,是包含在shell內(nèi)部的。還有一些命令,例如拷貝命令cp和移動(dòng)命令rm,是存在于文件系統(tǒng)中某個(gè)目錄下的單獨(dú)的程序。對用戶而言,不必關(guān)心一個(gè)命令是建立在shell內(nèi)部還是一個(gè)單獨(dú)的程序。

  shell首先檢查命令是否是內(nèi)部命令,若不是再檢查是否是一個(gè)應(yīng)用程序(這里的應(yīng)用程序可以是Linux本身的實(shí)用程序,如ls和rm,也可以是購買的商業(yè)程序,如xv,或者是自由軟件,如emacs)。然后shell在搜索路徑里尋找這些應(yīng)用程序(搜索路徑就是一個(gè)能找到可執(zhí)行程序的目錄列表)。如果鍵入的命令不是一個(gè)內(nèi)部命令并且在路徑里沒有找到這個(gè)可執(zhí)行文件,將會(huì)顯示一條錯(cuò)誤信息。如果能夠成功找到命令,該內(nèi)部命令或應(yīng)用程序?qū)⒈环纸鉃橄到y(tǒng)調(diào)用并傳給Linux內(nèi)核。

 

  shell的另一個(gè)重要特性是它自身就是一個(gè)解釋型的程序設(shè)計(jì)語言,shell程序設(shè)計(jì)語言支持絕大多數(shù)在高級語言中能見到的程序元素,如函數(shù)、變量、數(shù)組和程序控制結(jié)構(gòu)。shell編程語言簡單易學(xué),任何在提示符中能鍵入的命令都能放到一個(gè)可執(zhí)行的shell程序中。

  當(dāng)普通用戶成功登錄,系統(tǒng)將執(zhí)行一個(gè)稱為shell的程序。正是shell進(jìn)程提供了命令行提示符。作為默認(rèn)值(TurboLinux系統(tǒng)默認(rèn)的shell是BASH),對普通用戶用“$”作提示符,對超級用戶(root)用“#”作提示符

      一旦出現(xiàn)了shell提示符,就可以鍵入命令名稱及命令所需要的參數(shù)。shell將執(zhí)行這些命令。如果一條命令花費(fèi)了很長的時(shí)間來運(yùn)行,或者在屏幕上產(chǎn)生了大量的輸出,可以從鍵盤上按ctrl+c發(fā)出中斷信號來中斷它(在正常結(jié)束之前,中止它的執(zhí)行)。    當(dāng)用戶準(zhǔn)備結(jié)束登錄對話進(jìn)程時(shí),可以鍵入logout命令、exit命令或文件結(jié)束符(EOF)(按ctrl+d實(shí)現(xiàn)),結(jié)束登錄。    我們來實(shí)習(xí)一下shell是如何工作的。

  1.   $ make work
  2.   make:***No rule to make target ‘work’. Stop.
  3.   $

  注釋:make是系統(tǒng)中一個(gè)命令的名字,后面跟著命令參數(shù)。在接收到這個(gè)命令后,shell便執(zhí)行它。本例中,由于輸入的命令參數(shù)不正確,系統(tǒng)返回信息后停止該命令的執(zhí)行。

  在例子中,shell會(huì)尋找名為make的程序,并以work為參數(shù)執(zhí)行它。make是一個(gè)經(jīng)常被用來編譯大程序的程序,它以參數(shù)作為目標(biāo)來進(jìn)行編譯。在 “make work”中,make編譯的目標(biāo)是work。因?yàn)閙ake找不到以work為名字的目標(biāo),它便給出錯(cuò)誤信息表示運(yùn)行失敗,用戶又回到系統(tǒng)提示符下。

  另外,用戶鍵入有關(guān)命令行后,如果shell找不到以其中的命令名為名字的程序,就會(huì)給出錯(cuò)誤信息。例如,如果用戶鍵入:

  1.   $ myprog
  2.   bash:myprog:command not found
  3.   $

  可以看到,用戶得到了一個(gè)沒有找到該命令的錯(cuò)誤信息。用戶敲錯(cuò)命令后,系統(tǒng)一般會(huì)給出這樣的錯(cuò)誤信息。

#p#

  shell的種類

  Linux中的shell有多種類型,其中最常用的幾種是Bourne shell(sh)、C shell(csh)和Korn shell(ksh)。三種shell各有優(yōu)缺點(diǎn)。Bourne shell是UNIX最初使用的shell,并且在每種UNIX上都可以使用。Bourne shell在shell編程方面相當(dāng)優(yōu)秀,但在處理與用戶的交互方面做得不如其他幾種shell。Linux操作系統(tǒng)缺省的shell是Bourne Again shell,它是Bourne shell的擴(kuò)展,簡稱Bash,與Bourne shell完全向后兼容,并且在Bourne shell的基礎(chǔ)上增加、增強(qiáng)了很多特性。Bash放在/bin/bash中,它有許多特色,可以提供如命令補(bǔ)全、命令編輯和命令歷史表等功能,它還包含了很多C shell和Korn shell中的優(yōu)點(diǎn),有靈活和強(qiáng)大的編程接口,同時(shí)又有很友好的用戶界面。

  C shell是一種比Bourne shell更適于編程的shell,它的語法與C語言很相似。 Linux為喜歡使用C shell的人提供了Tcsh。Tcsh是C shell的一個(gè)擴(kuò)展版本。Tcsh包括命令行編輯、可編程單詞補(bǔ)全、拼寫校正、歷史命令替換、作業(yè)控制和類似C語言的語法,它不僅和Bash shell是提示符兼容,而且還提供比Bash shell更多的提示符參數(shù)。

  Korn shell集合了C shell和Bourne shell的優(yōu)點(diǎn)并且和Bourne shell完全兼容。Linux系統(tǒng)提供了pdksh(ksh的擴(kuò)展),它支持任務(wù)控制,可以在命令行上掛起、后臺執(zhí)行、喚醒或終止程序。

  Linux并沒有冷落其他shell用戶,還包括了一些流行的shell如ash、zsh等。每個(gè)shell都有它的用途,有些shell是有專利的,有些能從Internet網(wǎng)上或其他來源獲得。要決定使用哪個(gè)shell,只需讀一下各種shell的聯(lián)機(jī)幫助,并試用一下。

  用戶在登錄到Linux時(shí)由/etc/passwd文件來決定要使用哪個(gè)shell。例如:

  1.   # fgrep lisa /etc/passwd
  2.   lisa:x:500:500:TurboLinux User:/home/lisa:/bin/bash

  shell被列每行的末尾(/bin/bash)。

  由于Bash是Linux上缺省的shell,本章主要介紹Bash及其相關(guān)知識。

  shell命令

  命令行c

  用戶登錄到Linux系統(tǒng)時(shí),可以看到一個(gè)shell提示符,標(biāo)識了命令行的開始。用戶可以在提示符后面輸入任何命令及參數(shù)。例如:

  1.   $ date
  2.   二 11 23 01:34:58 CST 1999
  3.   $

  用戶登錄時(shí),實(shí)際進(jìn)入了shell,它遵循一定的語法將輸入的命令加以解釋并傳給系統(tǒng)。命令行中輸入的第一個(gè)字必須是一個(gè)命令的名字,第二個(gè)字是命令的選項(xiàng)或參數(shù),命令行中的每個(gè)字必須由空格或TAB隔開,格式如下:  

  1. $ Command Option Arguments

  1. 選項(xiàng)和參數(shù)

  選項(xiàng)是包括一個(gè)或多個(gè)字母的代碼,它前面有一個(gè)減號(減號是必要的,Linux用它來區(qū)別選項(xiàng)和參數(shù)),選項(xiàng)可用于改變命令執(zhí)行的動(dòng)作的類型。例如:

  1.   $ ls
  2.   motd passwd
  3.   $

  這是沒有選項(xiàng)的ls命令,可列出當(dāng)前目錄中所有文件,只列出各個(gè)文件的名字,而不顯示其他更多的信息。

  1.   $ ls -l
  2.   total 2
  3.   -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd
  4.   -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd
  5.   $

  加入-l選項(xiàng),將會(huì)為每個(gè)文件列出一行信息,諸如數(shù)據(jù)大小和數(shù)據(jù)最后被修改的時(shí)間。

  大多數(shù)命令都被設(shè)計(jì)為可以接納參數(shù)。參數(shù)是在命令行中的選項(xiàng)之后鍵入的一個(gè)或多個(gè)單詞,例如:

  1.   $ ls -l text
  2.   -rw-r--r-- 2 wzh book 22 Apr 20 20:37 motd
  3.   -rw-r--r-- 2 wzh book 796 Apr 20 20:37 passwd
  4.   $

  將顯示text目錄下的所有文件及其信息。

  有些命令,如ls可以帶參數(shù),而有一些命令可能需要一些最小數(shù)目的參數(shù)。例如,cp命令至少需要兩個(gè)參數(shù),如果參數(shù)的數(shù)目與命令要求不符,shell將會(huì)給出出錯(cuò)信息。例如:

  1.  $ cp -i mydata newdata

  注意:命令行中選項(xiàng)先于參數(shù)輸入。

  2. 命令行特征

  命令行實(shí)際上是可以編輯的一個(gè)文本緩沖區(qū),在按回車之前,可以對輸入的文本進(jìn)行編輯。比如利用BACKSPACE鍵可以刪除剛鍵入的字符,可以進(jìn)行整行刪除,還可以插入字符,使得用戶在輸入命令,尤其是復(fù)雜命令時(shí),若出現(xiàn)鍵入錯(cuò)誤,無須重新輸入整個(gè)命令,只要利用編輯操作,即可改正錯(cuò)誤。

  利用上箭頭可以重新顯示剛執(zhí)行的命令,利用這一功能可以重復(fù)執(zhí)行以前執(zhí)行過的命令,而無須重新鍵入該命令。

  bash保存著以前鍵入過的命令的列表,這一列表被稱為命令歷史表。按動(dòng)上箭頭,便可以在命令行上逐次顯示各條命令。同樣,按動(dòng)下箭頭可以在命令列表中向下移動(dòng),這樣可以將以前的各條命令顯示在命令行上,用戶可以修改并執(zhí)行這些命令。這一特征將在10.4節(jié)中進(jìn)行詳細(xì)的論述。

  在一個(gè)命令行中還可以置入多個(gè)命令,用分號將各個(gè)命令隔開。例如:  

  1.  $ ls -F;cp -i mydata newdata

  也可以在幾個(gè)命令行中輸入一個(gè)命令,用反斜杠將一個(gè)命令行持續(xù)到下一行。

  1.   $ cp –i
  2.   mydata
  3.   newdata

   

  上面的cp命令是在三行中輸入的,開始的兩行以反斜杠結(jié)束,把三行作為一個(gè)命令行。

Linux shell上篇講解到shell的概念、種類、命令,在下篇我們還會(huì)了解到更多的知識。

【編輯推薦】

責(zé)任編輯:趙鵬
相關(guān)推薦

2011-01-10 09:54:30

linuxshell

2017-08-28 14:10:34

LinuxShell命令

2011-01-11 09:53:28

linux進(jìn)程

2013-07-10 11:31:10

iOS面試題Objective-CiOS開發(fā)

2011-01-21 09:32:57

LinuxSendmail

2011-02-25 18:11:48

LinuxPureFTPd

2010-05-18 14:24:18

2024-11-27 09:19:25

2009-10-23 13:44:03

linux Shell

2010-08-30 16:46:08

Linux DHCP配

2011-02-23 16:04:32

LinuxvsftpdFTP

2009-12-25 09:55:18

LinuxShell編程Shell基本語法

2019-12-01 22:59:43

Linux shell命令進(jìn)程

2010-05-18 09:43:58

Subversion安

2009-10-28 08:31:02

Vsftpd服務(wù)器故障

2016-03-21 09:35:20

Linux發(fā)行版DatamationLinux

2017-06-06 14:44:37

2011-01-07 16:35:53

2010-06-23 17:34:03

Linux Bash

2017-05-31 17:09:52

LinuxShell命令
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號