① linux快速入門第八章:Shell基礎
我們平時所說的 Shell 可以理解為 Linux 系統提供給用戶的使用界面。Shell 為用戶提供了輸入命令和參數並可得到命令執行結果的環境。當一個用戶登錄 Linux 之後,系統初始化程序 init 就根據 /etc/passwd 文件中的設定,為每個用戶運行一個被稱為 Shell(外殼)的程序。
確切地說,Shell 是一個命令行解釋器,它為用戶提供了一個向 Linux 內核發送請求以便運行程序的界面系統級程序,用戶可以用 Shell 來啟動、掛起、停止甚至編寫一些程序。
Shell 處在內核與外層應用程序之間,起著協調用戶與系統的一致性、在用戶與系統之間進行交互的作用。圖 1 是 Linux 系統層次結構圖,Shell 接收用戶輸入的命令,並把用戶的命令從類似 abed 的 ASCII 碼解釋為類似 0101 的機器語言,然後把命令提交到系統內核處理;當內核處理完畢之後,把處理結果再通過 Shell 返回給用戶。
換句話說:
Shell 是一個用 C 語言編寫的程序,它是用戶使用 Linux 的橋梁。Shell 既是一種命令語言,又是一種程序設計語言。
Shell 是指一種應用程序,這個應用程序提供了一個界面,用戶通過這個界面訪問操作系統內核的服務。
Ken Thompson 的 sh 是第一種 Unix Shell,Windows Explorer 是一個典型的圖形界面 Shell。
Shell 與其他 Linux 命令一樣,都是實用程序,但它們之間還是有區別的。一旦用戶注冊到系統後,Shell 就被系統裝入內存並一直運行到用戶退出系統為止;而一般命令僅當被調用時,才由系統裝入內存執行。
與一般命令相比,Shell 除了是一個命令行解釋器,同時還是一門功能強大的編程語言,易編寫,易調試,靈活性較強。作為一種命令級語言,Shell 是解釋性的,組合功能很強,與操作系統有密切的關系,可以在 Shell 腳本中直接使用系統命令。大多數 Linux 系統的啟動相關文件(一般在 /etc/rc.d 目錄下)都是使用 Shell 腳本編寫的。
同傳統的編程語言一樣,Shell 提供了很多特性,這些特性可以使 Shell 腳本編程更為有用,如數據變數、參數傳遞、判斷、流程式控制制、數據輸入和輸出、子程序及中斷處理等。
說了這么多,其實我們在 Linux 中操作的命令行界面就是 Linux 的 Shell,也就是 Bash,但是我們的圖形界面是 Shell 嗎?其實從廣義講,圖形界面當然也是 Shell,因為它同樣用來接收用戶的操作,並傳遞到內核進行處理。不過,這里的 Shell 主要指的是 Bash。
Shell 腳本
Shell 腳本(shell script),是一種為 shell 編寫的腳本程序。
業界所說的 shell 通常都是指 shell 腳本,但讀者朋友要知道,shell 和 shell script 是兩個不同的概念。
由於習慣的原因,簡潔起見,本文出現的 "shell編程" 都是指 shell 腳本編程,不是指開發 shell 自身。
Shell的分類
目前 Shell 的版本有很多種,如 Bourne Shell、C Shell、Bash、ksh、tcsh 等,它們各有特點,下面簡要介紹一下。
最重要的 Shell 是 Bourne Shell,這個命名是為了紀念此 Shell 的發明者 Steven Bourne。從 1979 年起,UNIX 就開始使用 Boume Shell。Bourne Shell 的主文件名為 sh,開發人員便以 sh 作為 Bourne Shell 的主要識別名稱。
雖然 Linux 與 UNIX 一樣,可以支持多種 Shell,但 Boume Shell 的重要地位至今仍然沒有改變,許多 UNIX 系統中仍然使用 sh 作為重要的管理工具。它的工作從開機到關機,幾乎無所不包。在 Linux 中,用戶 Shell 主要是 Bash,但在啟動腳本、編輯等很多工作中仍然使用 Bourne Shell。
C Shell 是廣為流行的 Shell 變種。C Shell 主要在 BSD 版的 UNIX 系統中使用,發明者是柏克萊大學的 Bill Joy。C Shell 因為其語法和 C 語言類似而得名,這也使得 UNIX 的系統工程師在學習 C Shell 時感到相當方便。
Bourne Shell 和 C Shell 形成了 Shell 的兩大主流派別,後來的變種大都吸取這兩種 Shell 的特點,如 Korn、 tcsh 及 Bash。
Bash Shell 是 GNU 計劃的重要工具之一,也是 GNU 系統中標準的 Shell。Bash 與 sh 兼容,所以許多早期開發出來的 Bourne Shell 程序都可以繼續在 Bash 中運行。現在使用的 Linux 就使用 Bash 作為用戶的基本 Shell。
Bash 於 1988 年發布,並在 1995-1996年推出Bash 2.0。在這之前,廣為使用的版本是1.14,Bash 2.0增加了許多新的功能,以及具備更好的兼容性。表 2 中詳細列出了各版本的具體情況。
注意,Shell 的兩種主要語法類型有 Bourne 和 C,這兩種語法彼此不兼容。Boume 家族主要包括 sh、ksh、Bash、psh、zsh;C 家族主要包括 csh、tcsh(Bash 和 zsh 在不同程序上支持 csh 的語法)。
本章講述的腳本編程就是在 Bash 環境中進行的。不過,在 Linux 中除了可以支持 Bash,還可以支持很多其他的 Shell。我們可以通過 /etc/shells 文件來査詢 Linux 支持的 Shell。命令如下:
在 Linux 中,這些 Shell 是可以任意切換的,命令如下:
用戶信息文件 /etc/passwd 的最後一列就是這個用戶的登錄 Shell。命令如下:
大家可以看到,root 用戶和其他可以登錄系統的普通用戶的登錄 Shell 都是 /bin/bash,也就是 Linux 的標准 Shell,所以這些用戶登錄之後可以執行許可權允許范圍內的所有命令。不過,所有的系統用戶(偽用戶)因為登錄 Shell 是 /sbin/ndogin,所以不能登錄系統。
筆記:
sh/bash/csh/Tcsh/ksh/pdksh等shell的區別
② 給出LINUX系統基本構成框架 圖或者語言描述
Linux 和 Unix 文件系統被組織成一個有層次的樹形結構。文件系統的最上層是 /,或稱為 根目錄。在 Unix 和 Linux 的設計理念中,一切皆為文件——包括硬碟、分區和可插拔介質。這就意味著所有其它文件和目錄(包括其它硬碟和分區)都位於根目錄中。例如:/home/jebediah/cheeses.odt 給出了正確的完整路徑,它指向 cheeses.odt 文件,而該文件位於 jebediah 目錄下,該目錄又位於 home 目錄,最後,home 目錄又位於根(/) 目錄下。 在根 (/) 目錄下,有一組重要的系統目錄,在大部分 Linux 發行版里都通用。直接位於根 (/) 目錄下的常見目錄列表如下:
o /bin - 重要的二進制 (binary) 應用程序
o /boot - 啟動 (boot) 配置文件
o /dev - 設備 (device) 文件
o /etc - 配置文件、啟動腳本等 (etc)
o /home - 本地用戶主 (home) 目錄
o /lib - 系統庫 (libraries) 文件
o /lost+found - 在根 (/) 目錄下提供一個遺失+查找(lost+found) 系統
o /media - 掛載可移動介質 (media),諸如 CD、數碼相機等
o /mnt - 掛載 (mounted) 文件系統
o /opt - 提供一個供可選的 (optional) 應用程序安裝目錄
o /proc - 特殊的動態目錄,用以維護系統信息和狀態,包括當前運行中進程 (processes) 信息。
o /root - root (root) 用戶主文件夾,讀作「slash-root」
o /sbin - 重要的系統二進制 (system binaries) 文件
o /sys - 系統 (system) 文件
o /tmp - 臨時(temporary)文件
o /usr - 包含絕大部分所有用戶(users)都能訪問的應用程序和文件
o /var - 經常變化的(variable)文件,諸如日誌或資料庫等
③ Linux文件系統的核心結構
Linux下的文件系統為樹形結構,入口為/ 樹形結構下的文件目錄: 無論哪個版本的Linux系統,都有這些目錄,這些目錄應該是標準的。各個Linux發行版本會存在一些小小的差異,但總體來說,還是大體差不多。
1. / 文件系統的入口,最高一級目錄;
2. /bin 基礎系統所需要的命令位於此目錄,是最小系統所需要的命令,如:ls, cp, mkdir等。
這個目錄中的文件都是可執行的,一般的用戶都可以使用。
3. /boot 包含Linux內核及系統引導程序所需要的文件,比如 vmlinuz initrd.img 文件都位於這個目錄中。在一般情況下,GRUB或LILO系統引導管理器也位於這個目錄;
4. /dev 設備文件存儲目錄,比如音效卡、磁碟... ... 這是一個非常有趣的目錄,是Linux文件系統的一個閃亮的特性 - 所有對象都是文件或目錄。仔細觀察這個目錄你會發現hda1, hda2等, 它們代表系統主硬碟的不同分區。
/dev/cdrom和/dev/fd0代表你的CDROM驅動器和floppy驅動器。看上去可能有些奇怪,但比較文件和硬體的特性這卻是十分合理的。它們都可以讀出和寫入。例如/dev/dsp,這個文件代表你的揚聲器。那麼寫入這個文件的數據都回傳送到喇叭。試一試 'cat /etc/lilo.conf > /dev/dsp' 你會聽到一些聲音。這是你的 lilo.conf 文件的聲音!同樣,向 /dev/ttyS0 ( COM 1 ) 讀出或寫入數據你可以和接到上面的設備進行通訊。
5. /etc 存放系統程序或者一般工具的配置文件。
如安裝了apache2之後,配置文件在/etc/apache2/目錄下。
/etc/init.d 這個目錄是用來存放系統或伺服器以System V模式啟動的腳本,這在以System V模式啟動或初始化的系統中常見。
如apache2的/etc/init.d apache2 start|stop|restart MySQL為/etc/init.d mysql start|stop|restart
6. /home 普通用戶默認存放目錄 Linux 是多用戶環境,所以每一個用戶都有一個只有自己可以訪問的目錄(當然管理員也可以訪問)。它們以 /home/username 的方式存在。這個目錄也保存一些應用對於這個用戶的配置,比如 IRC, X 等。
7. /lib 庫文件存放目錄這里包含了系統程序所需要的所有共享庫文件,類似於 Windows 的共享庫 DLL 文件。
8. /lost+found 在ext2或ext3文件系統中,當系統意外崩潰或機器意外關機,而產生一些文件碎片放在這里。當系統啟動的過程中fsck工具會檢查這里,並修復已經損壞的文件系統。 有時系統發生問題,有很多的文件被移到這個目錄中,可能會用手工的方式來修復,或移到文件到原來的位置上。
Linux 應該正確的關機。但有時你的系統也可能崩潰掉或突然斷電使系統意外關機。那麼啟動的時候 fsck 將會進行長時間的文件系統檢查。Fsck 會檢測並試圖恢復所發現的不正確的文件。被恢復的文件會放置在這個目錄中。所恢復的文件也許並不完整或並不合理,但畢竟提供了一些恢復數據的機會。
9. /media 即插即用型存儲設備的掛載點自動在這個目錄下創建,比如USB盤系統自動掛載後,會在這個目錄下產生一個目錄 ;CDROM/DVD自動掛載後,也會在這個目錄中創建一個目錄,類似cdrom 的目錄。這個只有在最新的發行套件上才有.
10. /mnt /mnt 這個目錄一般是用於存放掛載儲存設備的掛載目錄的,比如有cdrom 等目錄。有時我們可以把讓系統開機自動掛載文件系統,把掛載點放在這里也是可以的。比如光碟機可以掛載到/mnt/cdrom 。
這是一個普通的載入目錄,在這里你可以載入你的文件系統或設備。
載入是使一個文件系統對於系統可用的過程。
在載入後你的文件可以在載入目錄下訪問。
這個目錄通常包含載入目錄或用於載入軟碟機和光碟機的子目錄。
如果需要,你也可以在這里建立其它的載入目錄。
對於載入目錄的位置並沒有強制性的要求,你可以在系統的任意位置建立載入目錄。
建立 /mnt 只是為了使系統更工整的慣例。
11. /opt 表示的是可選擇的意思,有些軟體包也會被安裝在這里,也就是自定義軟體包,比如在Fedora Core 5.0中,OpenOffice就是安裝在這里。有些我們自己編譯的軟體包,就可以安裝在這個目錄中;通過源碼包安裝的軟體,可以通過 ./configure --prefix=/opt/,將軟體安裝到opt目錄。
這個目錄包含所有默認系統安裝之外的軟體和添加的包。
12. /proc 操作系統運行時,進程(正在運行中的程序)信息及內核信息(比如cpu、硬碟分區、內存信息等)存放在這里。/proc目錄是偽裝的文件系統proc的掛載目錄,proc並不是真正的文件系統。
這是系統中極為特殊的一個目錄,實際上任何分區上都不存在這個目錄。它實際是個實時的、駐留在內存中的文件系統。
13. /root Linux超級許可權用戶root的家目錄;
14. /sbin 大多是涉及系統管理的命令的存放,是超級許可權用戶root的可執行命令存放地,普通用戶無許可權執行這個目錄下的命令;
這個目錄和/usr/sbin; /usr/X11R6/sbin或/usr/local/sbin 目錄是相似的; 我們記住就行了,凡是目錄sbin中包含的都是root許可權才能執行的。
15. /tmp 臨時文件目錄,有時用戶運行程序的時候,會產生臨時文件。 /tmp就用來存放臨時文件的。/var/tmp目錄和這個目錄相似。
許多程序在這里建立lock文件和存儲臨時數據。有些系統會在啟動或關機時清空此目錄。
16. /usr 這個是系統存放程序的目錄,比如命令、幫助文件等。這個目錄下有很多的文件和目錄。
當我們安裝一個Linux發行版官方提供的軟體包時,大多安裝在這里。
如果有涉及伺服器配置文件的,會把配置文件安裝在/etc目錄中。
/usr目錄下包括:
涉及字體目錄/usr/share/fonts ,
幫助目錄 /usr/share/man或/usr/share/doc,
普通用戶可執行文件目錄/usr/bin 或/usr/local/bin 或/usr/X11R6/bin ,
超級許可權用戶root的可執行命令存放目錄,比如 /usr/sbin 或/usr/X11R6/sbin 或/usr/local/sbin 等;
還有程序的頭文件存放目錄/usr/include。
/usr/bin 這個目錄是可執行程序的目錄,普通用戶就有許可權執行; 當我們從系統自帶的軟體包安裝一個程序時,他的可執行文件大多會放在這個目錄。
/usr/sbin 這個目錄也是可執行程序的目錄,但大多存放涉及系統管理的命令。只有root許可權才能執行;相似目錄是/sbin 或/usr/local/sbin或/usr/X11R6/sbin等;
/usr/local 這個目錄一般是用來存放用戶自編譯安裝軟體的存放目錄;一般是通過源碼包安裝的軟體,如果沒有特別指定安裝目錄的話,一般是安裝在這個目錄中。這個目錄下面有子目錄。
/usr/lib 和/lib 目錄相似,是庫文件的存儲目錄;
/usr/share 系統共用的東西存放地,比如 /usr/share/fonts 是字體目錄,是用戶都共用的吧。
/usr/share/doc和/usr/share/man幫助文件,也是共用的吧;
/usr/src 是內核源碼存放的目錄,比如下面有內核源碼目錄,比如 linux 、linux-2.xxx.xx 目錄等。有的系統也會把源碼軟體包安裝在這里。比如Fedora/Redhat,當我們安裝file.src.rpm的時候,這些軟體包會安裝在 /usr/src/redhat相應的目錄中。請參考: 《file.src.rpm 使用方法的簡單介紹》 。另外Fedhat 4.0 5.0,他的內核源碼包的目錄位於/usr/src/kernels目錄下的某個目錄中(只有安裝後才會生成相應目錄);
17. /var 這個目錄的內容是經常變動的,看名字就知道,我們可以理解為vary的縮寫,/var下有/var/log 這是用來存放系統日誌的目錄。
/var/www目錄是定義Apache伺服器站點存放目錄;/var/lib 用來存放一些庫文件,比如MySQL的,以及MySQL資料庫的的存放地;
/var/log 系統日誌存放,分析日誌要看這個目錄的東西;
/var/spool 列印機、郵件、代理伺服器等假離線目錄;
上面內容參考於
http://blog.sina.com.cn/s/blog_662234020101ebfd.html
這是我的linux系統目錄結構
administrator@ubuntu:/$ ls -l
總用量 100
drwxr-xr-x 2 root root 4096 8月 22 07:33 bin
drwxr-xr-x 3 root root 4096 8月 22 07:34 boot
drwxr-xr-x 2 root root 4096 8月 22 07:29 cdrom
drwxr-xr-x 16 root root 4320 11月 1 22:26 dev
drwxr-xr-x 136 root root 12288 11月 1 22:38 etc
drwxr-xr-x 5 root root 4096 10月 24 10:02 home
drwxrwxrwx 1 root root 4096 10月 31 18:59 host
lrwxrwxrwx 1 root root 32 8月 22 07:31 initrd.img -> boot/initrd.img-3.5.0-17-generic
lrwxrwxrwx 1 root root 33 8月 22 07:14 initrd.img.old -> /boot/initrd.img-3.5.0-17-generic
drwxr-xr-x 21 root root 4096 8月 22 07:33 lib
drwx------ 2 root root 16384 8月 22 07:14 lost+found
drwxr-xr-x 3 root root 4096 8月 24 22:13 media
drwxr-xr-x 2 root root 4096 10月 9 2012 mnt
drwxr-xr-x 2 root root 4096 10月 17 2012 opt
dr-xr-xr-x 205 root root 0 11月 2 2015 proc
drwx------ 8 root root 4096 8月 24 23:48 root
drwxr-xr-x 22 root root 780 11月 1 22:27 run
drwxr-xr-x 2 root root 12288 8月 22 07:34 sbin
drwxr-xr-x 2 root root 4096 6月 11 2012 selinux
drwxr-xr-x 2 root root 4096 10月 17 2012 srv
dr-xr-xr-x 13 root root 0 11月 2 2015 sys
drwxrwxrwt 8 root root 4096 11月 1 22:44 tmp
drwxr-xr-x 10 root root 4096 10月 17 2012 usr
drwxr-xr-x 15 root root 4096 10月 25 23:11 var
lrwxrwxrwx 1 root root 29 8月 22 07:31 vmlinuz -> boot/vmlinuz-3.5.0-17-generic
administrator@ubuntu:~$ pwd
/home/administrator
administrator@ubuntu:~$ cd ..
administrator@ubuntu:/home$ cd ..
administrator@ubuntu:/$
linux的console界面的默認路徑不是根目錄
建議看看劉遄老師的《linux就該這么學》,書籍當中有詳細的描述
④ 什麼是Linux系統架構
內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件並使用系統。部分層次結構如下圖所示。
linux內核說明
內核是操作系統的核心,具有很多最基本功能,它負責管理系統的進程、內存、設備驅動程序、文件和網路系統,決定著系統的性能和穩定性。
Linux 內核由如下幾部分組成:內存管理、進程管理、設備驅動程序、文件系統和網路管
理等。這些組成其實是需要詳細說明的
2 . linux shell
shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種介面。它接收用戶輸入的 命令並把它送入內核去執行,是一個命令解釋器。另外,shell編程語言具有普通編程語言的很多特點,用這種編程語言編寫的shell程序與其他應用程序具有同樣的效果。
目前主要有下列版本的shell。
a.Bourne Shell:是貝爾實驗室開發的。
b.BASH:是GNU的Bourne Again Shell,是GNU操作系統上默認的shell,大部分linux的發行套件使用的都是這種shell。
c.Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell兼容。
d.C Shell:是SUN公司Shell的BSD版本。
3 . linux 文件系統
文件系統是文件存放在磁碟等存儲設備上的組織方法。Linux系統能支持多種目前流行的文件系統,如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。
4. linux 應用
標準的Linux系統一般都有一套都有稱為應用程序的程序集,它包括文本編輯器、編程語言、X Window、辦公套件、Internet工具和資料庫等。
⑤ linux操作系統的體系結構
看下操作系統原理就懂了,操作系統就是在用戶和硬體之間的一個媒介,因此它有兩個任務,一個是方便用戶操作,一個是管理硬體,所有的操作系統架構都離不開這兩個最初的動機,包括 windows、linux、mac等等。 另外內核主要實現的硬體管理,用戶操作主要通過shell來完成,比如windows上的cmd、explorer.exe,以及linux上的bash shell、kde、gnome。 其實說白了就是一種思想 ——封裝思想,譬如送人一台筆記本,你不用告訴它裡面有什麼CPU、內存,只要告訴他開機按鈕在哪裡就好了。 下面有一張linux體系的結構圖:
⑥ Linux的根分區系統類型是什麼
ext4
EXT4是第四代擴展文件系統(英語:Fourth extended filesystem,縮寫為 ext4)是Linux系統下的日誌文件系統,是ext3文件系統的後繼版本。Ext4是由Ext3的維護者Theodore Tso領導的開發團隊實現的,並引入到Linux2.6.19內核中。
從2006年6月份開始,開發人員決定把Ext4從Ext3中分離出來進行獨立開發。Ext4的開發工作從那時起開始進行,但大部分Linux用戶和管理員都沒有太關注這件事情,直到2.6.19內核在2006年11月的發布。
Ext4第一次出現在主流內核里,但是它當時還處於試驗階段,因此很多手嘩碼人都忽視了它。2008年12月25日,Linux Kernel 2.6.28的正式版本發布。隨著這一新內核的發布,Ext4文件系統也結束實驗期,成為穩定版。
(6)linux結構圖擴展閱讀
使用Linux,用戶可以設置目錄和文件的許可權,以便允許或拒絕其他人對其進行訪問。Linux目錄採用多級樹形結構,圖1.1表示了這種樹形等級結構。用戶可以瀏覽整個系統,可以進入任何一個已授權進蘆禪入的目錄,訪問那裡的文件。
文件結構的相互關聯性使共享數據變得容易,幾個用戶可以訪問同一個文件。Linux是一個多用戶系統,操作系統本身的駐留程序存放在以根目錄開始的專用目畢哪錄中,有時被指定為系統目錄。圖1.1中那些根目錄下的目錄就是系統目錄。
Linux支持多用戶,各個用戶對於自己的文件設備有自己特殊的權利,保證了各用戶之間互不影響。多任務則是現在電腦最主要的一個特點,Linux可以使多個程序同時並獨立地運行。