shell的基本概念

Shell就像一個殼層,這個殼層介于用戶和操作系統之間,負責將用戶的命令解釋為操作系統可以接收的低級語言,并將操作系統響應的信息以用戶可以了解的方式來顯示。??????????? 從用戶登陸到注銷期間,用戶輸入的每個命令都會經過解譯及執行,其負責機制就是shell。

??????????? shell是一個命令語言解釋器,它擁有自己內建的shell命令集,shell也能被系統中其他應用程序所調用。用戶在提示符下輸入的命令都由shell先解釋然后傳給Linux核心。
??????????? 有一些命令,如改變工作目錄命令cd,是shell內置命令。還有一些命令,例如拷貝命令cp和移動命令mv,是存在于文件系統中某個目錄下的單獨的程序。對用戶而言,不必關心一個命令是建立在shell內部還是一個單獨的程序。
????????? #find??????? /??????? -name??????? cd
????????? #find??????? /??????? -name??????? cp

shell的主要版式本
在Linux系統中常見的shell版本有以下幾種。
(1)Bourneshell(sh):它是UNIX最初使用的shell,并且在每種UNIX都可以使用。它在shell編程方面相當優秀,但處理與用戶的交互方面不如其他幾種shell。
(2)Cshell(csh):它最初由BillJoy編寫,它更多地考慮了用戶界面的友好性,支持如命令補齊等一些Bourneshell所不支持的特性,但其編程接口做得不如Bourneshell。Cshell被很多C程序員使用,因為Cshell的語法和C語言的很相似,Cshell也由此得名。
(3)Kornshell(ksh):它集合了Cshell和Bourneshell的優點,并且和Bourneshell完全兼容。
(4)BourneAgainshell(bash):bash是大多數Linux系統的默認shell。它是Bourneshell的擴展,并與Bourneshell完全向后兼容,而且在Bourneshell的基礎上增加和增強了很多特性。。
(5)tcsh:它是Cshell的一個擴展版本,與csh完全向后兼容,但它包含了更多使用戶感覺方便的新特性,其最大的提高是在命令行編輯和歷史瀏覽方面。它不僅和Bashshell提示符兼容,而且還提供比Bashshell更多的提示符參數。
(6)pdksh:它是一個專門為Linux系統編寫的Kornshell(ksh)的擴展版本。Ksh是一個商用shell,不能免費提供,而pdksh是免費的。

Linux中的各種shell

shell??????????????????????????? 名稱描述?????????????????????????????????????????????????? 位置
ash???????????????????????? 一個小shell(和sh類似)??????????????????????????? /bin/ash
ash.static??????????????? 一個不依靠軟件庫的ash版本?????????????????????? /bin/ash.static
bash?????????????????????? BourneAgainShell?????????????????????????????????????? /bin/bush
bush2???????????????????? BourneAgainShell的新版本???????????????????????? /bin/bush2
bsh???????????????????????? ash的一個符號鏈接???????????????????????????????????? /bin/bsh
csh???????????????????????? Cshell,tcsh的一個符號鏈接????????????????????????? /bin/ash
ksh???????????????????????? 公共域受限制的shell(針對網絡操作)??????????? /usr/bin/rsh
sh????????????????????????? bash的一個符號鏈接??????????????????????????????????? /bin/sh
tcsh?????????????????????? 和csh兼容的shell????????????????????????????????????????? /bin/tcsh
zsh??????????????????????? 一個和csh,ksh和sh兼容的shell???????????????????? /bin/zsh

判斷登入shell
使用echo命令來查詢系統的“SHELL”環境變量,命令如下:
#echo $SHELL

暫時變更shell
除非是在受限的shell中,否則若要變更使用shell,只要執行該Shell程序名稱(shell_name),即可切換到不同的Shell。如:
#sh(或#csh等等)
此處的shell_name是指shell的名稱(例如,sh或csh)。暫時變更shell,可在其它的shell中進行試驗。
鍵入exit或CTRL-D可以回到您原始的shell中。

永久性地變更shell
若要永久變更登入shell(登入時的預設shell),請使用“chsh”(changeshell)命令
#chsh username full_shell_name
此處的username即為使用者名稱,而shell_path_name是欲作為預設之shell的完整路徑名稱(如/usr/bin/sh)。
使用chsh命令之后,您必須再次注銷和登入,變更才會生效。
例,如果terry將預設的登入shell改為Cshell,該命令的形式如下:
$chsh?????? terry?????? /usr/bin/csh
%

Shell功能介紹
交互式處理(Interactive Processing)
接收來自用戶輸入的命令后,shell 會根據命令類型的不同來執行,執行完畢后,shell 會將結果回傳給用戶,并等待用戶下一次輸入。用戶執行exit 或是按 Ctrl+D 來注銷 shell 才會結束。

命令補全功能
指用戶輸入命令后,有時不需輸入完整的命令,而系統會自動找出最符合的命令名稱,這種功能可以節省輸入長串命令的時間。
不需要輸入完整的文件名,只需輸入開頭幾個字母,然后按Tab鍵時候,系統會補充完整,連續按兩次Tab(Esc)鍵系統會顯示所有符合輸入前綴的文件名稱。
若忘了命令的全名,而只記得命令的開頭字母,按Tab鍵一次會補充完整,連續按兩次Tab(Esc)鍵系統會顯示所有符合輸入前綴的命令名稱。

別名(Alias)功能
查詢目前系統所有別名:#alias
設置別名:#alias dir=‘ls-l’
使用別名:#dir /etc
取消別名:?????? #unalias dir
alias命令的效力僅限于該次登錄,在注銷系統后,這個別名的定義就會消失。如果希望每次登陸都使用這些別名,則應該將別名的設置加入“~/.bashrc”文件中,若是寫入“/etc/bashrc”文件中,則系統上的所有用戶都能使用這個別名。

查閱歷史記錄-history命令
在Linux系統上輸入命令并按下Enter后,這個命令就會存放在命令記錄表 ( ~/.bash_history )中,預定的記錄為1000筆,這些都定義在環境變量中。
列出所有的歷史記錄:#history
只列出最近5筆記錄犯例:#history5
使用命令記錄號碼執行命令:#!561
重復執行上一個命令:#!!
執行最后一次以ls開頭的命令:#!ls

后臺處理(BackgroundProcessing)
通常將比較耗時的工作放在后臺執行。要執行后臺程序,只要在輸入命令時,在命令的后面加上“&”符號,之后按Enter鍵,系統即會開始以后臺的方式執行該命令。
若目前已在執行某個命令,無法使用“&”來將它加入后臺中執行,需先按Ctrl+z鍵暫停這程序的執行,然后再直接輸入“bg”命令,就可將此工作放入后臺執行。
“nohup”指NoHangUp的意思,即注銷后系統會繼續執行該命令。
#nohup ping 192.168.11.1&
查看后臺執行的程序:#jobs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JDK源碼解析之 java.lang.System

一個和系統環境進行交互的類. System不允許被實例化, 而且是一個final類 一、不能實例化 private System() { }二、成員變量 public final static InputStream in null; //這是“標準”輸入流。 public final static PrintStream out null; //這是“標準”輸出流。 public …

詳解MySQL中DROP,TRUNCATE 和DELETE的區別

注意:這里說的delete是指不帶where子句的delete語句 相同點: truncate和不帶where子句的delete, 以及drop都會刪除表內的數據 不同點: 1. truncate和 delete只刪除數據不刪除表的結構(定義) drop語句將刪除表的結構被依賴的約束(constrain),觸發器(trigger),索引(index…

JDK源碼解析之 Java.lang.Package

如果我們在Class對象上調用getPackage方法,就可以得到描述該類所在包的Package對象(Package類是在java.lang中定義的)。我們也可以用包名通過調用靜態方法getPackage或者調用靜態方法getPackages(該方法返回由系統中所有已知包構成的數組)來獲得Package對象。getNam…

Mysql中limit的用法詳解

在我們使用查詢語句的時候,經常要返回前幾條或者中間某幾行數據,這個時候怎么辦呢?不用擔心,mysql已經為我們提供了這樣一個功能。SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于強制 SE…

Docker入門-簡介

獨具魅力的Docker作為一門新技術,它的出現有可能引起其所在領域大范圍的波動甚至是重新洗牌。根據業內專業人士的看法,不論如何,Docker的出現,已經成為云服務市場中一枚極具意義的戰略性棋子。從2013年開始在國內發力,…

Mysql中limit的優化

在一些情況中,當你使用LIMIT row_count而不使用HAVING時,MySQL將以不同方式處理查詢。 如果你用LIMIT只選擇一些行,當MySQL選擇做完整的表掃描時,它將在一些情況下使用索引。 如果你使用LIMIT row_count與ORD…

Docker入門-架構

Docker 包括三個基本概念: 鏡像(Image):Docker 鏡像(Image),就相當于是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。容器(Cont…

MYSQL出錯代碼列表大全(中文)

mysql出錯了,以前往往靠猜.現在有了這張表,一查就出來了. 1005:創建表失敗1006:創建數據庫失敗1007:數據庫已存在,創建數據庫失敗1008:數據庫不存在,刪除數據庫失敗1009:不能刪除數據庫文件導致…

Docker入門-安裝

Centos7下安裝Docker docker官方說至少Linux 內核3.8 以上,建議3.10以上(ubuntu下要linux內核3.8以上, RHEL/Centos 的內核修補過, centos6.5的版本就可以) 1、把yum包更新到最新:yum update 2、安裝需要的…

Docker原理之Namespaces

命名空間(namespaces)是 Linux 為我們提供的用于分離進程樹、網絡接口、掛載點以及進程間通信等資源的方法。 一、Namespaces 在日常使用 Linux 或者 macOS 時,我們并沒有運行多個完全分離的服務器的需要,但是如果我們在服務器上啟…

mysql 快速插入(insert)多條記錄

方法1: INSERT INTO table(col_1, col_2,col_3) VALUES(1,11,111); INSERT INTO table(col_1, col_2,col_3)   VALUES(2,22,222); INSERT INTO table(col_1, col_2,col_3)   VALUES(3,33,333); 有沒有更快捷的辦法呢?答案是有(見方法2) 方法2: INSERT INTO table(col…

Docker原理之CGroups

控制組(cgroups)是 Linux 內核的一個特性,主要用來對共享資源進行隔離、限制、審計 等。只有能控制分配到容器的資源,才能避免當多個容器同時運行時的對系統資源的競爭。控制組技術最早是由 Google 的程序員 2006 年起提出&#x…

Mysql中的轉義字符

字符串是多個字符組成的一個字符序列,由單引號( “”) 或雙引號 ( “"”) 字符包圍。(但在 ANSI 模式中運行時只能用單引號)。 例如: a string"another string"在一個字符串中,如果某個序列具有特殊的含義,每個序…

Docker原理之UnionFS

一、UnionFS Linux 的命名空間和控制組分別解決了不同資源隔離的問題,前者解決了進程、網絡以及文件系統的隔離,后者實現了 CPU、內存等資源的隔離,但是在 Docker 中還有另一個非常重要的問題需要解決 - 也就是鏡像。 鏡像到底是什么&#…

教你精確編寫高質量高性能的MySQL語法

在應用系統開發初期,由于開發數據庫數據比較少,對于查詢SQL語句,復雜視圖的編寫,剛開始不會體會出SQL語句各種寫法的性能優劣,但是如果將應用系統提交實際應用后,隨著數據庫中數據的增加,系統的…

Docker使用-Hello World

1、docker pull hello-world 拉去docker遠程倉庫中的Hello World的鏡像 [rootCarlota2 ~]# docker pull hello-world Using default tag: latest latest: Pulling from library/hello-world 0e03bdcc26d7: Pull complete Digest: sha256:7f0a9f93b4aa3022c3a4c147a449bf11e09…

Mysql數據庫引擎快速指南

如果你是個賽車手并且按一下按鈕就能夠立即更換引擎而不需要把車開到車庫里去換,那會是怎么感覺呢? MySQL 數據庫為開發人員所做的就好像是按按鈕換引擎;它讓你選擇數據庫引擎,并給你一條簡單的途徑來切換它。 MySQL的自帶引擎肯…

Docker使用-構建MySQL

拉取官方鏡像(我們這里選擇5.7,如果不寫后面的版本號則會自動拉取最新版) docker pull mysql:5.7 # 拉取 mysql 5.7 docker pull mysql # 拉取最新版mysql鏡像MySQL文檔地址 檢查是否拉取成功 $ sudo docker images一般來說數據庫容…

Java集合:什么是Java集合?

一、集合的由來 通常,我們的Java程序需要根據程序運行時才知道創建了多少個對象。但若非程序運行,程序開發階段,我們根本不知道到底需要多少個數量的對象,甚至不知道它的準確類型。為了滿足這些常規的編程需要,我們要…

Mysql截取中英數混合的字符串

在 mysql中截取字符串我們用 LEFT函數 LEFT(str,len) 返回從字符串str 開始的len 最左字符。 mysql> SELECT LEFT(foobarbar, 5); -> fooba 手冊上只介紹了截取英文字符串的方法,中文或者中英文的怎么辦呢?以下是截取中英混合的字符串(中國人…