1. 程式人生 > >(第五篇)Linux操作系統基本結構介紹

(第五篇)Linux操作系統基本結構介紹

war 一定的 nfs 權限設置 mask 進程 pool 網絡接口 tfs

Linux操作系統基本結構介紹

Linux系統一般有4個主要部分:內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件並使用系統。

1、 內核

內核是操作系統的核心,具有很多最基本功能,如虛擬內存、多任務、共享庫、需求加載、可執行程序和TCP/IP網絡功能。Linux內核的模塊分為以下幾個部分:存儲管理、CPU和進程管理、文件系統、設備管理和驅動、網絡通信、系統的初始化和系統調用等。

1. 內存管理

對任何一臺計算機而言,其內存以及其它資源都是有限的。為了讓有限的物理內存滿足應用程序對內存的大需求量,

Linux 采用了稱為“虛擬內存”的內存管理方式。Linux 將內存劃分為容易處理的“內存頁”(對於大部分體系結構來說都是 4KB)。Linux 包括了管理可用內存的方式,以及物理和虛擬映射所使用的硬件機制。不過內存管理要管理的可不止 4KB 緩沖區。Linux 提供了對 4KB 緩沖區的抽象,例如 slab 分配器。這種內存管理模式使用 4KB 緩沖區為基數,然後從中分配結構,並跟蹤內存頁使用情況,比如哪些內存頁是滿的,哪些頁面沒有完全使用,哪些頁面為空。這樣就允許該模式根據系統需要來動態調整內存使用。為了支持多個用戶使用內存,有時會出現可用內存被消耗光的情況。由於這個原因,頁面可以移出內存並放入磁盤中。這個過程稱為交換,因為頁面會被從內存交換到硬盤上。內存管理的源代碼可以在
./linux/mm 中找到。

2 .進程管理

進程實際是某特定應用程序的一個運行實體。在 Linux 系統中,能夠同時運行多個進程,Linux 通過在短的時間間隔內輪流運行這些進程而實現“多任務”。這一短的時間間隔稱為“時間片”,讓進程輪流運行的方法稱為“進程調度” ,完成調度的程序稱為調度程序。

進程調度控制進程對CPU的訪問。當需要選擇下一個進程運行時,由調度程序選擇最值得運行的進程。可運行進程實際上是僅等待CPU資源的進程,如果某個進程在等待其它資源,則該進程是不可運行進程。Linux使用了比較簡單的基於優先級的進程調度算法選擇新的進程。

通過多任務機制,每個進程可認為只有自己獨占計算機,從而簡化程序的編寫。每個進程有自己單獨的地址空間,並且只能由這一進程訪問,這樣,操作系統避免了進程之間的互相幹擾以及

“壞”程序對系統可能造成的危害。 為了完成某特定任務,有時需要綜合兩個程序的功能,例如一個程序輸出文本,而另一個程序對文本進行排序。為此,操作系統還提供進程間的通訊機制來幫助完成這樣的任務。Linux 中常見的進程間通訊機制有信號、管道、共享內存、信號量和套接字等。

內核通過 SCI 提供了一個應用程序編程接口(API)來創建一個新進程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函數),停止進程(kill、exit),並在它們之間進行通信和同步(signal 或者 POSⅨ 機制)。

3. 文件系統

DOS 等操作系統不同,Linux 操作系統中單獨的文件系統並不是由驅動器號或驅動器名稱(如 A: 或 C: 等)來標識的。相反,和 UNIX 操作系統一樣,Linux 操作系統將獨立的文件系統組合成了一個層次化的樹形結構,並且由一個單獨的實體代表這一文件系統。Linux 將新的文件系統通過一個稱為“掛裝”或“掛上”的操作將其掛裝到某個目錄上,從而讓不同的文件系統結合成為一個整體。Linux 操作系統的一個重要特點是它支持許多不同類型的文件系統。Linux 中最普遍使用的文件系統是 Ext2,它也是 Linux 土生土長的文件系統。但 Linux 也能夠支持 FAT、VFAT、FAT32、MINIX 等不同類型的文件系統,從而可以方便地和其它操作系統交換數據。由於 Linux 支持許多不同的文件系統,並且將它們組織成了一個統一的虛擬文件系統.

虛擬文件系統(VirtualFileSystem,VFS):隱藏了各種硬件的具體細節,把文件系統操作和不同文件系統的具體實現細節分離了開來,為所有的設備提供了統一的接口,VFS提供了多達數十種不同的文件系統。虛擬文件系統可以分為邏輯文件系統和設備驅動程序。邏輯文件系統指Linux所支持的文件系統,如ext2,fat等,設備驅動程序指為每一種硬件控制器所編寫的設備驅動程序模塊。

虛擬文件系統(VFS)是 Linux 內核中非常有用的一個方面,因為它為文件系統提供了一個通用的接口抽象。VFS 在 SCI 和內核所支持的文件系統之間提供了一個交換層。即VFS 在用戶和文件系統之間提供了一個交換層。

  在 VFS 上面,是對諸如 open、close、read 和 write 之類的函數的一個通用 API 抽象。在 VFS 下面是文件系統抽象,它定義了上層函數的實現方式。它們是給定文件系統(超過 50 個)的插件。文件系統的源代碼可以在 ./linux/fs 中找到。

  文件系統層之下是緩沖區緩存,它為文件系統層提供了一個通用函數集(與具體文件系統無關)。這個緩存層通過將數據保留一段時間(或者隨即預先讀取數據以便在需要是就可用)優化了對物理設備的訪問。緩沖區緩存之下是設備驅動程序,它實現了特定物理設備的接口。

因此,用戶和進程不需要知道文件所在的文件系統類型,而只需要象使用 Ext2 文件系統中的文件一樣使用它們。

4. 設備驅動程序

設備驅動程序是 Linux 內核的主要部分。和操作系統的其它部分類似,設備驅動程序運行在高特權級的處理器環境中,從而可以直接對硬件進行操作,但正因為如此,任何一個設備驅動程序的錯誤都可能導致操作系統的崩潰。設備驅動程序實際控制操作系統和硬件設備之間的交互。設備驅動程序提供一組操作系統可理解的抽象接口完成和操作系統之間的交互,而與硬件相關的具體操作細節由設備驅動程序完成。一般而言,設備驅動程序和設備的控制芯片有關,例如,如果計算機硬盤是 SCSI 硬盤,則需要使用 SCSI 驅動程序,而不是 IDE 驅動程序。

5.網絡接口(NET)

提供了對各種網絡標準的存取和各種網絡硬件的支持。網絡接口可分為網絡協議和網絡驅動程序。網絡協議部分負責實現每一種可能的網絡傳輸協議。眾所周知,TCP/IP 協議是 Internet 的標準協議,同時也是事實上的工業標準。Linux 的網絡實現支持 BSD 套接字,支持全部的TCP/IP協議。Linux內核的網絡部分由BSD套接字、網絡協議層和網絡設備驅動程序組成。網絡設備驅動程序負責與硬件設備通訊,每一種可能的硬件設備都有相應的設備驅動程序。

2、 shell

shell是系統的用戶界面,提供了用戶與內核進行交互操作的一種接口。它接收用戶輸入的命令並把它送入內核去執行,是一個命令解釋器。另外,shell編程語言具有普通編程語言的很多特點,用這種編程語言編寫的shell程序與其他應用程序具有同樣的效果。

目前主要有下列版本的shell。

1.Bourne Shell:是貝爾實驗室開發的。  

2.BASH:是GNU的Bourne Again Shell,是GNU操作系統上默認的shell,大部分linux的發行套件使用的都是這種shell。

3.Korn Shell:是對Bourne SHell的發展,在大部分內容上與Bourne Shell兼容。    

4.C Shell:是SUN公司Shell的BSD版本

3、 文件系統

Linux下面的文件類型主要有:

1) 普通文件:C語言元代碼、SHELL腳本、二進制的可執行文件等。分為純文本和二進制。

2) 目錄文件:目錄,存儲文件的唯一地方。

3) 鏈接文件:指向同一個文件或目錄的的文件。

4) 設備文件:與系統外設相關的,通常在/dev下面。分為塊設備和字符設備。

5)管道(FIFO)文件 : 提供進程建通信的一種方式

6)套接字(socket) 文件: 該文件類型與網絡通信有關

可以通過ls –l, file, stat幾個命令來查看文件的類型等相關信息。

文件系統指文件存在的物理空間,linux系統中每個分區都是一個文件系統,都有自己的目錄層次結構。linux會將這些分屬不同分區的、單獨的文件系統按一定的方式形成一個系統的總的目錄層次結構。一個操作系統的運行離不開對文件的操作,因此必然要擁有並維護自己的文件系統。

文件系統類型:

ext2 : 早期linux中常用的文件系統

ext3 : ext2的升級版,帶日誌功能

RAMFS : 內存文件系統,速度很快

NFS : 網絡文件系統,由SUN發明,主要用於遠程文件共享

MS-DOS : MS-DOS文件系統

VFAT : Windows 95/98 操作系統采用的文件系統

FAT : Windows XP 操作系統采用的文件系統

NTFS: Windows NT/XP 操作系統采用的文件系統

HPFS : OS/2 操作系統采用的文件系統

PROC : 虛擬的進程文件系統

ISO9660 : 大部分光盤所采用的文件系統

ufsSun : OS 所采用的文件系統

NCPFS : Novell 服務器所采用的文件系統

SMBFS : Samba 的共享文件系統

XFS : 由SGI開發的先進的日誌文件系統,支持超大容量文件

JFS :IBM的AIX使用的日誌文件系統

ReiserFS : 基於平衡樹結構的文件系統

udf: 可擦寫的數據光盤文件系統

文件系統特性

磁盤分區完畢後還需要進行格式化(format),之後操作系統才能夠使用這個分區。 格式化的目的是能使操作系統可以使用的文件系統格式(即我們上面提到文件系統類型).

每種操作系統能夠使用的文件系統並不相同. 如windows 98 以前的微軟操作系統主要利用的文件系統是 FAT (或 FAT16),windows 2000 以後的版本有所謂的 NTFS 文件系統,至於 Linux 的正統文件系統則為 Ext2 (Linux second extended file system, ext2fs)這一個。此外,在默認的情況下,windows 操作系統是不會認識 Linux 的 Ext2 的。

傳統的磁盤與文件系統之應用中,一個分區就是只能夠被格式化成為一個文件系統,所以我們可以說一個 filesystem 就是一個 partition。但是由於新技術的利用,例如我們常聽到的LVM與軟件磁盤陣列(software raid), 這些技術可以將一個分區格式化為多個文件系統(例如LVM),也能夠將多個分區合成一個文件系統(LVM, RAID)! 所以說,目前我們在格式化時已經不再說成針對 partition 來格式化了, 通常我們可以稱呼一個可被掛載的數據為一個文件系統而不是一個分區喔!

那麽文件系統是如何運行的呢?這與操作系統的文件數據有關。較新的操作系統的文件數據除了文件實際內容外, 通常含有非常多的屬性,例如 Linux 操作系統的文件權限(rwx)與文件屬性(擁有者、群組、時間參數等)。 文件系統通常會將這兩部份的數據分別存放在不同的區塊,權限與屬性放置到 inode 中,至於實際數據則放置到 data block 區塊中。 另外,還有一個超級區塊 (superblock) 會記錄整個文件系統的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。

掛載文件系統

  linux系統中每個分區都是一個文件系統,都有自己的目錄層次結構。linux會將這些分屬不同分區的、單獨的文件系統按一定的方式形成一個系統的總的目錄層次結構。這裏所說的“按一定方式”就是指的掛載。將一個文件系統的頂層目錄掛到另一個文件系統的子目錄上,使它們成為一個整體,稱為掛載。把該子目錄稱為掛載點.例如要讀取硬盤中的一個格式化好的分區、光盤或軟件等設備時,必須先把這些設備對應到某個目錄上,而這個目錄就稱為“掛載點(mount point)”,這樣才可以讀取這些設備。 掛載後將物理分區細節屏蔽掉,用戶只有統一的邏輯概念。所有的東西都是文件。

註意:1、掛載點必須是一個目錄。

   2、一個分區掛載在一個已存在的目錄上,這個目錄可以不為空,但掛載後這個目錄下以前的內容將不可用。

對於其他操作系統建立的文件系統的掛載也是這樣。但是需要理解的是:光盤、軟盤、其他操作系統使用的文件系統的格式與linux使用的文件系統格式是不一樣的。光盤是ISO9660;軟盤是fat16或ext2;windows NT是fat16、NTFS;windows98是fat16、fat32;windows2000和windowsXP是fat16、fat32、 NTFS。掛載前要了解linux是否支持所要掛載的文件系統格式。

  掛載時使用mount命令,其格式:mount [-參數] [設備名稱] [掛載點]

1. 掛載windows的文件系統:

1)首先我們使用sudo fdisk -l查看掛載的設備,例如最下面有:/dev/hda5

2)mkdir創建一個目錄,這裏的目錄是作為掛在目錄,就是你要把E盤掛到這個目錄下:mk /mnt/winc

3)windows和linux使用的不是一個文件系統,一般情況下linux不掛載windows文件系統,所以要你手動mount:

# mount -t vfat /dev/hda5 /mnt/winc ( -t vfat指出這裏的文件系統fat32)

現在就可以進入/mnt/winc等目錄讀寫這些文件了。

2.掛載光盤# mk /mnt/cdrom

# mount -t iso9660 /dev/cdrom /mnt/cdrom (關盤的名字一般都是cdrom,這條命令一般都通用)

3.虛擬機共享文件夾:例如在VirtualBox下,主機是Windows,Ubuntu是Guest。共分三步:

1). 首先要安裝虛擬電腦工具包:在VirtualBox的菜單裏選擇"設備"->"安裝虛擬電腦工具包",你會發現在Ubuntu桌面上多出一個光盤圖標,這張光盤默認被自動加載到了文件夾/media/cdom0,而且/cdrom自動指向這個文件夾。默認設置下文件管理器會自動打開這張光盤,可以看到裏面有個"VBoxLinuxAdditions.run"文件。打開一個命令行終端,依次輸入"cd /cdrom"和"sudo sh ./VBoxLinuxAdditions.run",不含雙引號,開始安裝工具包。安裝完畢,會用英文提示要重啟Ubuntu,建議立刻重啟。重啟後,比較明顯的變化是鼠標是共享模式,並且剪貼板也和Windows共享了。如果有這些變化,說明虛擬電腦工具包已經裝成功。

2). 下一步設置共享文件夾。

在共享文件夾設置窗口中,單擊右側的"添加一個共享文件夾",路徑選擇你想要共享的Windows文件夾,共享名任取一個自己喜歡的,比如"myshare",選項read-only是指是否只允許ubuntu讀這個文件夾,請根據需要選擇這個選項。

3). 在ubuntu下掛載這個共享文件夾:sudo mount -t vboxsf myshare /media/share

其中"myshare"是之前取的共享文件夾的名字,"/media/share"是要掛載到的目標文件.

4、 linux 應用

標準的Linux系統一般都有一套都有稱為應用程序的程序集,它包括文本編輯器、編程語言、X Window、辦公套件、Internet工具和數據庫等。

Linux 文件基本屬性

Linux系統是一種典型的多用戶系統,不同的用戶處於不同的地位,擁有不同的權限。為了保護系統的安全性,Linux系統對不同的用戶訪問同一文件(包括目錄文件)的權限做了不同的規定。

在Linux中我們可以使用ll或者ls –l命令來顯示一個文件的屬性以及文件所屬的用戶和組

實例中,第一行第一個屬性用"d"表示。"d"在Linux中代表該文件是一個目錄文件。

在Linux中第一個字符代表這個文件是目錄、文件或鏈接文件等等。

當第一行第一個屬性為[ d ]則是目錄

當第一行第一個屬性為[ - ]則是文件;

若第一行第一個屬性是[ l ]則表示為鏈接文檔(link file);

若第一行第一個屬性是[ b ]則表示為裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);

若第一行第一個屬性是[ c ]則表示為裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。

接下來的字符中,以三個為一組,且均為『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要註意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。

每個文件的屬性由左邊第一部分的10個字符來確定。

從左至右用0-9這些數字來表示。

第0位確定文件類型,第1-3位確定屬主(該文件的所有者)擁有該文件的權限。

第4-6位確定屬組(所有者的同組用戶)擁有該文件的權限,第7-9位確定其他用戶擁有該文件的權限。

其中,第1、4、7位表示讀權限,如果用"r"字符表示,則有讀權限,如果用"-"字符表示,則沒有讀權限;

第2、5、8位表示寫權限,如果用"w"字符表示,則有寫權限,如果用"-"字符表示沒有寫權限;第3、6、9位表示可執行權限,如果用"x"字符表示,則有執行權限,如果用"-"字符表示,則沒有執行權限。

Linux文件屬主和屬組

對於文件來說,它都有一個特定的所有者,也就是對該文件具有所有權的用戶。

同時,在Linux系統中,用戶是按組分類的,一個用戶屬於一個或多個組。

文件所有者以外的用戶又可以分為文件所有者的同組用戶和其他用戶。

因此,Linux系統按文件所有者、文件所有者同組用戶和其他用戶來規定了不同的文件訪問權限。

在以上實例中,mysql 文件是一個目錄文件,屬主和屬組都為 mysql,屬主有可讀、可寫、可執行的權限;與屬主同組的其他用戶有可讀和可執行的權限;其他用戶也有可讀和可執行的權限。

對於 root 用戶來說,一般情況下,文件的權限對其不起作用。

更改文件屬性

1、chgrp:更改文件屬組

語法:

chgrp [-R] 屬組名 文件名

參數選項

-R:遞歸更改文件屬組,就是在更改某個目錄文件的屬組時,如果加上-R的參數,那麽該目錄下的所有文件的屬組都會更改。

2、chown:更改文件屬主,也可以同時更改文件屬組

語法:

chown [–R] 屬主名 文件名

chown [-R] 屬主名:屬組名 文件名

進入 /root 目錄(~)將install.log的擁有者改為bin這個賬號:

[root@www ~] cd ~

[root@www ~]# chown bin install.log

[root@www ~]# ls -l

-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log

將install.log的擁有者與群組改回為root:

[root@www ~]# chown root:root install.log

[root@www ~]# ls -l

-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log

3、chmod:更改文件9個屬性

Linux文件屬性有兩種設置方法,一種是數字,一種是符號。

Linux文件的基本權限就有九個,分別是owner/group/others三種身份各有自己的read/write/execute權限。

先復習一下剛剛上面提到的數據:文件的權限字符為:『-rwxrwxrwx』, 這九個權限是三個三個一組的!其中,我們可以使用數字來代表各個權限,各權限的分數對照表如下:

r:4

w:2

x:1

每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限為: [-rwxrwx---] 分數則是:

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

others= --- = 0+0+0 = 0

所以等一下我們設定權限的變更時,該文件的權限數字就是770啦!變更權限的指令chmod的語法是這樣的:

chmod [-R] xyz 文件或目錄

選項與參數:

xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。

-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更

舉例來說,如果要將.bashrc這個文件所有的權限都設定啟用,那麽命令如下:

先將ls命令做一個總結:

-a:顯示所有檔案及目錄;

-A:顯示除影藏文件“.”“..”以外的所有文件列表;

-C:多列顯示輸出結果。這是默認選項;

-l:與“-C”選項功能相反,所有輸出信息用單列格式輸出,不輸出為多列;一般-al合並使用

-F:在每個輸出項後追加文件的類型標識符,具體含義:“*”表示具有可執行權限的普通文件,“/”表示目錄,“@”表示符號鏈接,“|”表示命令管道FIFO“=”表示sockets套接字。當文件為普通文件時,不輸出任何標識符;

-b:將文件中的不可輸出的字符以反斜線“”加字符編碼的方式輸出;

-c:與“-lt”選項連用時,按照文件狀態時間排序輸出目錄內容,排序的依據是文件的索引節點中的ctime字段。與“-l”選項連用時,則排序的一句是文件的狀態改變時間;

-d:僅顯示目錄名,而不顯示目錄下的內容列表。顯示符號鏈接文件本身,而不顯示其所指向的目錄列表;

-f:此參數的效果和同時指定“aU”參數相同,並關閉“lst”參數的效果;

-i:顯示文件索引節點號(inode)。一個索引節點代表一個文件;

-type:與“-F”選項的功能相同,但是不顯示“*”

-k:以KB(千字節)為單位顯示文件大小;

-l:以長格式顯示目錄下的內容列表。輸出的信息從左到右依次包括文件名,文件類型、權限模式、硬連接數、所有者、組、文件大小和文件的最後修改時間等;

-m:用“,”號區隔每個文件和目錄的名稱;

-n:以用戶識別碼和群組識別碼替代其名稱;

-r:以文件名反序排列並輸出目錄內容列表;

-s:顯示文件和目錄的大小,以區塊為單位;

-t:用文件和目錄的更改時間排序;

-L:如果遇到性質為符號鏈接的文件或目錄,直接列出該鏈接所指向的原始文件或目錄;

-R:遞歸處理,將指定目錄下的所有文件及子目錄一並處理;

--full-time:列出完整的日期與時間;

--color[=WHEN]:使用不同的顏色高亮顯示不同類型的。

[root@www ~]# ls -al .bashrc

-rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc

[root@www ~]# chmod 777 .bashrc

[root@www ~]# ls -al .bashrc

-rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc

那如果要將權限變成 -rwxr-xr-- 呢?那麽權限的分數就成為 [4+2+1][4+0+1][4+0+0]=754。

符號類型改變文件權限

還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦! 那麽我們就可以藉由u, g, o來代表三種身份的權限!

此外, a 則代表 all 亦即全部的身份!那麽讀寫的權限就可以寫成r, w, x!

如果我們需要將文件權限設置為 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 來設定:

# touch test1 // 創建 test1 文件

# ls -al test1 // 查看 test1 默認權限

-rw-r--r-- 1 root root 0 Nov 15 10:32 test1

# chmod u=rwx,g=rx,o=r test1 // 修改 test1 權限

# ls -al test1

-rwxr-xr-- 1 root root 0 Nov 15 10:32 test1

而如果是要將權限去掉而不改變其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:

# chmod a-x test1

# ls -al test1

-rw-r--r-- 1 root root 0 Nov 15 10:32 test1

Linux 文件與目錄管理

我們知道Linux的目錄結構為樹狀結構,最頂級的目錄為根目錄 /。

其他目錄通過掛載可以將它們添加到樹中,通過解除掛載可以移除它們。

在開始本教程前我們需要先知道什麽是絕對路徑與相對路徑。

絕對路徑:

路徑的寫法,由根目錄 / 寫起,例如: /usr/share/doc 這個目錄。

相對路徑:

路徑的寫法,不是由 / 寫起,例如由 /usr/share/doc 要到 /usr/share/man 底下時,可以寫成: cd ../man 這就是相對路徑的寫法啦!

處理目錄的常用命令

接下來我們就來看幾個常見的處理目錄的命令吧:

ls: 列出目錄

cd:切換目錄

pwd:顯示目前的目錄

mkdir:創建一個新的目錄

rmdir:刪除一個空的目錄(文件必須為空

cp: 復制文件或目錄

rm: 移除文件或目錄(把一個文件全部刪除

你可以使用 man [命令] 來查看各個命令的使用文檔,如 :man cp。

ls (列出目錄)

在Linux系統當中, ls 命令可能是最常被運行的。

語法:

[root@www ~]# ls [-aAdfFhilnrRSt] 目錄名稱

[root@www ~]# ls [--color={never,auto,always}] 目錄名稱

[root@www ~]# ls [--full-time] 目錄名稱

選項與參數:

-a :全部的文件,連同隱藏檔( 開頭為 . 的文件) 一起列出來(常用)

-d :僅列出目錄本身,而不是列出目錄內的文件數據(常用)

-l :長數據串列出,包含文件的屬性與權限等等數據;(常用)

將家目錄下的所有文件列出來(含屬性與隱藏檔)

[root@www ~]# ls -al ~

cd (切換目錄)

cd是Change Directory的縮寫,這是用來變換工作目錄的命令。

語法:

cd [相對路徑或絕對路徑]

#使用 mkdir 命令創建 runoob 目錄

[root@www ~]# mkdir runoob

#使用絕對路徑切換到 runoob 目錄

[root@www ~]# cd /root/runoob/

#使用相對路徑切換到 runoob 目錄

[root@www ~]# cd ./runoob/

# 表示回到自己的家目錄,亦即是 /root 這個目錄

[root@www runoob]# cd ~

# 表示去到目前的上一級目錄,亦即是 /root 的上一級目錄的意思;

[root@www ~]# cd ..

接下來大家多操作幾次應該就可以很好的理解 cd 命令的。

pwd (顯示目前所在的目錄)

pwd 是 Print Working Directory 的縮寫,也就是顯示目前所在目錄的命令。

[root@www ~]# pwd [-P]

選項與參數:

-P :顯示出確實的路徑,而非使用連結 (link) 路徑。

實例:單純顯示出目前的工作目錄:

[root@www ~]# pwd

/root <== 顯示出目錄啦~

實例顯示出實際的工作目錄,而非連結檔本身的目錄名而已。

[root@www ~]# cd /var/mail <==註意,/var/mail是一個連結檔

[root@www mail]# pwd

/var/mail <==列出目前的工作目錄

[root@www mail]# pwd -P

/var/spool/mail <==怎麽回事?有沒有加 -P 差很多~

[root@www mail]# ls -ld /var/mail

lrwxrwxrwx 1 root root 10 Sep 4 17:54 /var/mail -> spool/mail

# 看到這裏應該知道為啥了吧?因為 /var/mail 是連結檔,連結到 /var/spool/mail

# 所以,加上 pwd -P 的選項後,會不以連結檔的數據顯示,而是顯示正確的完整路徑啊!

mkdir (創建新目錄)

如果想要創建新的目錄的話,那麽就使用mkdir (make directory)吧。

語法:

mkdir [-mp] 目錄名稱

選項與參數:

-m :配置文件的權限喔!直接配置,不需要看默認權限 (umask) 的臉色~

-p :幫助你直接將所需要的目錄(包含上一級目錄)遞歸創建起來!

實例:請到/tmp底下嘗試創建數個新目錄看看:

[root@www ~]# cd /tmp

[root@www tmp]# mkdir test <==創建一名為 test 的新目錄

例題:[root@www tmp]# mkdir test1/test2/test3/test4

mkdir: cannot create directory `test1/test2/test3/test4‘:

No such file or directory <== 沒辦法直接創建此目錄啊!

[root@www tmp]# mkdir -p test1/test2/test3/test4

加了這個 -p 的選項,可以自行幫你創建多層目錄!

實例:創建權限為 rwx--x--x 的目錄。

[root@www tmp]# mkdir -m 711 test2

[root@www tmp]# ls -l

drwxr-xr-x 3 root root 4096 Jul 18 12:50 test

drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1

drwx--x--x 2 root root 4096 Jul 18 12:54 test2

上面的權限部分,如果沒有加上 -m 來強制配置屬性,系統會使用默認屬性。

如果我們使用 -m ,如上例我們給予 -m 711 來給予新的目錄 drwx--x--x 的權限。

rmdir (刪除空的目錄)

語法:

rmdir [-p] 目錄名稱

選項與參數:

-p :連同上一級『空的』目錄也一起刪除

刪除 runoob 目錄

[root@www tmp]# rmdir runoob/

將 mkdir 實例中創建的目錄(/tmp 底下)刪除掉!

[root@www tmp]# ls -l <==看看有多少目錄存在?

drwxr-xr-x 3 root root 4096 Jul 18 12:50 test

drwxr-xr-x 3 root root 4096 Jul 18 12:53 test1

drwx--x--x 2 root root 4096 Jul 18 12:54 test2

[root@www tmp]# rmdir test <==可直接刪除掉,沒問題

[root@www tmp]# rmdir test1 <==因為尚有內容,所以無法刪除!

rmdir: `test1‘: Directory not empty

[root@www tmp]# rmdir -p test1/test2/test3/test4

[root@www tmp]# ls -l <==您看看,底下的輸出中test與test1不見了!

drwx--x--x 2 root root 4096 Jul 18 12:54 test2

利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 一次刪除。

不過要註意的是,這個 rmdir 僅能刪除空的目錄,你可以使用 rm 命令來刪除非空目錄。

cp (復制文件或目錄)

cp 即拷貝文件和目錄。

語法:

[root@www ~]# cp [-adfilprsu] 來源檔(source) 目標檔(destination)

[root@www ~]# cp [options] source1 source2 source3 .... directory

選項與參數:

-a:相當於 -pdr 的意思,至於 pdr 請參考下列說明;(常用)

-d:若來源檔為連結檔的屬性(link file),則復制連結檔屬性而非文件本身;

-f:為強制(force)的意思,若目標文件已經存在且無法開啟,則移除後再嘗試一次;

-i:若目標檔(destination)已經存在時,在覆蓋時會先詢問動作的進行(常用)

-l:進行硬式連結(hard link)的連結檔創建,而非復制文件本身;

-p:連同文件的屬性一起復制過去,而非使用默認屬性(備份常用);

-r:遞歸持續復制,用於目錄的復制行為;(常用)

-s:復制成為符號連結檔 (symbolic link),亦即『捷徑』文件;

-u:若 destination 比 source 舊才升級 destination !

用 root 身份,將 root 目錄下的 .bashrc 復制到 /tmp 下,並命名為 bashrc

[root@www ~]# cp ~/.bashrc /tmp/bashrc

[root@www ~]# cp -i ~/.bashrc /tmp/bashrc

cp: overwrite `/tmp/bashrc‘? n <==n不覆蓋,y為覆蓋

rm (移除文件或目錄)

語法:

rm [-fir] 文件或目錄

選項與參數:

-f :就是 force 的意思,忽略不存在的文件,不會出現警告信息;

-i :互動模式,在刪除前會詢問使用者是否動作

-r :遞歸刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!!

將剛剛在 cp 的實例中創建的 bashrc 刪除掉!

[root@www tmp]# rm -i bashrc

rm: remove regular file `bashrc‘? y

如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名!

mv (移動文件與目錄,或修改名稱)

語法:

[root@www ~]# mv [-fiu] source destination

[root@www ~]# mv [options] source1 source2 source3 .... directory

選項與參數:

-f :force 強制的意思,如果目標文件已經存在,不會詢問而直接覆蓋;

-i :若目標文件 (destination) 已經存在時,就會詢問是否覆蓋!

-u :若目標文件已經存在,且 source 比較新,才會升級 (update)

復制一文件,創建一目錄,將文件移動到目錄中

[root@www ~]# cd /tmp

[root@www tmp]# cp ~/.bashrc bashrc

[root@www tmp]# mkdir mvtest

[root@www tmp]# mv bashrc mvtest

將某個文件移動到某個目錄去,就是這樣做!

將剛剛的目錄名稱更名為 mvtest2

[root@www tmp]# mv mvtest mvtest2

(第五篇)Linux操作系統基本結構介紹