- Linux基礎及應用教程(基于CentOS7)
- 梁如軍 王宇昕 車亞軍等編著
- 9586字
- 2019-08-02 16:57:55
第3章 多用戶多任務管理
本章首先介紹了賬戶管理的相關概念、賬戶管理工具的使用以及用戶口令管理,然后介紹了權限的相關概念及其命令工具的使用。最后介紹了進程的相關概念、查看進程、殺死進程以及作業(yè)控制等。
3.1 賬戶管理
3.1.1 賬戶管理概述
1.賬戶實質
Linux操作系統(tǒng)是多用戶的操作系統(tǒng),它允許多個用戶同時登錄到系統(tǒng)上,使用系統(tǒng)資源。當多個用戶能同時使用系統(tǒng)時,為了使所有用戶的工作都能順利進行,保護每個用戶的文件和進程,也為了系統(tǒng)自身的安全和穩(wěn)定,必須建立起一種秩序,使每個用戶的權限都能得到規(guī)范。為此,首先需要區(qū)分不同的用戶,這樣就產生了用戶賬戶。
賬戶實質上就是一個用戶在系統(tǒng)上的標識,系統(tǒng)依據(jù)賬戶ID來區(qū)分每個用戶的文件、進程、任務,給每個用戶提供特定的工作環(huán)境(如用戶的工作目錄、Shell版本以及X Window環(huán)境的配置等),使每個用戶的工作都能獨立不受干擾地進行。
2.用戶和組
廣義上講,Linux的賬戶包括用戶賬戶和組賬戶兩種。
Linux系統(tǒng)下的用戶賬戶(簡稱用戶)有兩種,普通用戶賬戶和超級用戶賬戶(或管理員賬戶)。普通用戶在系統(tǒng)上的任務是進行日常工作,管理員在系統(tǒng)上的任務是對普通用戶和整個系統(tǒng)進行管理。管理員賬戶對系統(tǒng)具有絕對的控制權,能夠對系統(tǒng)進行一切操作,如操作不當很容易對系統(tǒng)造成損壞。因此即使系統(tǒng)只有一個用戶使用,也應該在管理員賬戶之外建立一個普通用戶賬戶,在用戶進行日常工作的時候以普通用戶賬戶登錄系統(tǒng)。
除了用戶賬戶之外,在Linux下還存在組賬戶(簡稱組)。組是用戶的集合。在RHEL/CentOS中組有兩種類型:私有組和標準組。當創(chuàng)建一個新用戶時,若沒有指定其所屬的組,RHEL/CentOS就建立一個和該用戶同名的私有組,此私有組中只包含這個用戶自己。標準組可以包含多個用戶,若使用標準組,在創(chuàng)建一個新的用戶時就應該指定其所屬的組。
從另一方面講,同一個用戶可以同屬于多個組,如某單位有領導組和技術組等,Tom是該單位的技術主管,所以他既應該屬于領導組又應該屬于技術組。當一個用戶屬于多個組時,其登錄后所屬的組稱為主組,其他的組稱為附加組。
3.Linux環(huán)境下的賬戶系統(tǒng)文件
Linux下的賬戶系統(tǒng)文件主要有/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow 4個文件。
1)/etc/passwd文件中每行定義一個用戶賬號,一行中又劃分為多個字段定義用戶賬號的不同屬性,各字段間用“:”分隔。例如:
表3-1 中描述了這些字段的意義
表3-1 /etc/passwd文件中各字段的含義
2)/etc/passwd文件對任何用戶均可讀,為了增加系統(tǒng)的安全性,CentOS默認使用shadow passwords保護,將經過加密的用戶口令保存在 /etc/shadow文件里,它只對root用戶可讀且提供了一些口令時效字段。/etc/shadow文件的內容形式如下:
其中各字段的意義如表3-2所示
表3-2 /etc/shadow文件中各字段的含義
3)/etc/group文件,將用戶分組是Linux中對用戶進行管理及控制訪問權限的一種手段。每個用戶都屬于某一個組;一個組中可以有多個用戶,一個用戶也可以屬于不同的組。當一個用戶同時是多個組的成員時,在/etc/passwd文件中記錄的是用戶所屬的主組,也就是登錄時所屬的主組,而其他組稱為附加組。用戶要訪問附加組的文件時,必須首先使用newgrp命令使自己成為所要訪問的組的成員。組的所有屬性都存放在/etc/group文件中。/etc/group文件對任何用戶均可讀。下面是一個/etc/group文件的例子。
與/etc/passwd文件類似,其中每一行記錄了一個組的信息。每行包括4個字段,不同字段之間用冒號隔開。各字段的內容說明如表3-3所示。
表3-3 /etc/group文件中各字段說明
4)/etc/gshadow文件用于定義用戶組口令、組管理員等信息,該文件只有root用戶可以讀取。下面是一個/etc/gshadow文件的例子:
與/etc/group文件類似,其中每一行記錄了一個組的信息。每行包括4個字段,不同字段之間用冒號隔開。其中各字段的內容說明如表3-4所示。
表3-4 /etc/gshadow文件中各字段說明
提示
賬戶管理的實質就是管理上述的4個賬戶系統(tǒng)文件。可以使用圖形界面工具進行,也可以使用命令行工具進行,甚至還可以使用Web工具進行。
3.1.2 使用命令行工具管理賬戶
1.管理賬戶的命令行工具
表3-5中列出了管理賬戶的命令行工具的功能
表3-5 管理賬戶的命令行工具的功能
2.命令行賬戶管理工具使用舉例
操作步驟3.1 命令行賬戶管理工具使用舉例
3.1.3 口令管理和口令時效
1.使用passwd命令進行口令管理
創(chuàng)建用戶賬戶之后,還要給新用戶設置口令。為此需使用命令passwd,其格式是
常用選項如表3-6所示
表3-6 passwd命令的常用選項
注意
(1)在輸入口令時,屏幕上不會回顯。口令的選取至少用8個字符,最好大小寫字母和數(shù)字及特殊字符搭配使用,盡量不要用英文單詞作為口令。
(2)只有管理員賬戶(root)可以更改其他用戶的口令,普通用戶只能更改自己的口令,且在更改口令之前,系統(tǒng)會要求用戶輸入舊的口令。
下面給出幾個passwd命令的使用示例
操作步驟3.2 passwd命令的使用示例
2.chage命令
硬件計算能力如今已經非常強大,這大大地縮短了利用自動運行的程序來猜測口令的時間。口令時效是系統(tǒng)管理員用來防止機構內不良口令的一種技術。防止口令被攻擊的方法就是經常改變口令。為安全起見,要求用戶定期改變用戶口令是明智之舉。
口令時效意味著過了一段預先設定的時間后,用戶會被提示創(chuàng)建一個新口令。它所根據(jù)的理論是,如果用戶被強制定期改變口令,某個口令的破譯對入侵者來說就只有有限的利用機會。這種用來強制用戶在一段時間之后更改口令的機制稱為口令時效。
在Linux系統(tǒng)上,修改口令時效分為:
● 對于未來要創(chuàng)建的所有用戶的口令時效需修改/etc/login.defs文件的相關參數(shù)。
● 對已存在的用戶修改口令時效是通過chage命令來管理。
(1)設置新添用戶的口令時效
編輯/etc/login.defs,通過指定表3-7中描述的幾個參數(shù)來設置口令實效的默認設定。
表3-7 /etc/login.defs中與口令時效相關的參數(shù)
2)設置已存在用戶的口令時效
chage命令的格式是:
表3-8中列出了chage命令的選項說明
表3-8 chage命令的選項說明
下面給出幾個使用chage命令的例子
操作步驟3.3 使用chage命令的例子
提示
1.也可以使用chage <用戶名>進入交互模式修改用戶的口令時效。
2.使用chage命令實質上是修改影子口令文件/etc/shadow中的與口令時效相關的字段值。
3.chage命令僅適用于本地系統(tǒng)賬戶,對LDAP賬戶和數(shù)據(jù)庫賬戶不起作用。 注意
制訂一項策略,定義多長時間后一個口令必須進行更改,然后強制執(zhí)行該策略,是非常不錯的一個做法。在解雇了某個雇員后,口令時效策略會保證該雇員不可能在被解雇3個月后發(fā)現(xiàn)他的口令依然可用。即使系統(tǒng)管理員忘了刪除該雇員的賬號,該賬號也會因口令時效策略而被自動鎖定。當然,這一點并不能成為不及時刪除該雇員賬號的理由,但是這個策略的確提供了一層額外的安全防護,尤其是在過去常常忽視及時清理賬號的情況下。
3.1.4 用戶和組狀態(tài)
1.用戶和組狀態(tài)命令
表3-9中列出了一些常用的用戶和組狀態(tài)命令
表3-9 常用的用戶和組狀態(tài)命令
2.用戶和組狀態(tài)命令舉例
下面給出用戶和組狀態(tài)命令的使用示例
操作步驟3.4 用戶和組狀態(tài)命令的示例
3.2 權限管理
3.2.1 操作權限概述
1.操作權限簡介
Linux是多用戶的操作系統(tǒng),允許多個用戶同時在系統(tǒng)上登錄和工作。為了確保系統(tǒng)和用戶的安全,Linux采取了很多的安全措施。用戶在登入系統(tǒng)時需要輸入用戶名和口令,這樣,就使系統(tǒng)可以通過用戶的識別號(UID)來分別確定每個用戶在登錄系統(tǒng)后都做了些什么,也可以用來區(qū)別不同用戶所建立的文件或目錄。
普通用戶在系統(tǒng)上受到權限的制約,一個普通用戶若要切換至其他的普通用戶甚至超級用戶的工作目錄,將會收到拒絕提示信息,例如:
2.3種基本的權限
在Linux中,將使用系統(tǒng)資源的人員分為4類:超級用戶、文件或目錄的屬主、屬主的同組人和世界上的其他人員。由于超級用戶具有操作Linux系統(tǒng)的一切權限,所以不用指定超級用戶對文件和目錄的訪問權限。對于其他3類用戶都要指定對文件和目錄的訪問權限,對每一類用戶都有如表3-10所示的3種基本的權限需要說明。
表3-10 文件或目錄的3種基本的訪問權限
提示
1.目錄上只有執(zhí)行權限,表示可以進入或穿越該目錄進入更深層次的子目錄。
2.目錄上只有執(zhí)行權限,要訪問該目錄下的有讀權限的文件,必須知道文件名。
3.目錄上只有執(zhí)行權限,不能列出目錄列表也不能刪除該目錄。
4.目錄上執(zhí)行權限和讀權限的組合,表示可以進入目錄并列出目錄列表。
5.目錄上執(zhí)行權限和寫權限的組合,表示可以在目錄中創(chuàng)建、刪除和重命名文件。
3.查看文件和目錄的權限
在Linux中通過給3類用戶分配3種基本權限,就產生了文件或目錄的9個基本權限位可以使用帶l參數(shù)的ls命令查看文件或目錄的權限,例如:
每一行顯示一個文件或目錄的信息,這些信息包括文件的類型、文件的權限、文件的屬主(第3列)、文件的所屬組(第4列),還有文件的大小以及創(chuàng)建時間和文件名。
輸出列表中每一行的第一列的第一個字母指示了該文件的類型。第一列的其余9個字母可分成3組,3個字母一組。這3組分別代表文件屬主的權限、文件所屬組的權限、其他用戶的權限。每組中的3個欄位分別表示了讀取權限(r)、寫入權限(w)、執(zhí)行權限(x)或沒有相應的權限(-)。 提示
當某用戶訪問系統(tǒng)中的某文件時:
(1)若訪問者的UID與文件的UID匹配,就應用用戶(user)權限。
(2)否則,若訪問者的GID與文件的GID匹配,就應用群組(group)權限
(3)如果都不匹配,就應用其他用戶(other)權限。
通常將由ls-l命令輸出的第一列稱為文件或目錄的權限字符串。表3-11中列出了幾個權限字符串的說明。
表3-11 權限字符串舉例
注意
把權限設為666會允許每個人對文件或目錄都有讀取和寫入的權限。把權限設為777允許每個人都有讀取、寫入和執(zhí)行的權限。這些權限可能會允許對機密文件的篡改,因此,一般來說,使用這類設置是不明智的。 3.2.2 更改操作權限
系統(tǒng)管理員和文件的屬主可以根據(jù)需要來更改文件的權限。更改文件和目錄的操作權限使用chmod命令進行,有兩種設置方法:文字設定法和數(shù)值設定法。
1.文字設定法
chmod命令的文字設定法格式如下:
其中第1個選項表示要賦予權限的用戶,具體說明如表3-12所示
表3-12 用戶選項說明
第2個選項表示要進行的操作,具體說明如表3-13所示
表3-13 權限操作選項說明
第3個選項是要分配的權限,具體說明如表3-14所示
表3-14 分配權限選項說明
操作步驟3.5 chmod命令的文字設定法舉例
2.數(shù)值設定法
chmod命令的數(shù)值設定法格式如下
其中,n1代表屬主的權限,n2代表組用戶的權限,n3代表其他用戶的權限,這3個選項都是八進制數(shù)字,其意義如表3-15所示。
表3-15 權限字符說明
操作步驟3.6 chmod命令的數(shù)值設定法舉例
3.2.3 更改屬主和同組人
管理員有時還需要更改文件的屬主和所屬的組。除了root用戶之外,只有文件的屬主才有權更改其屬主和所屬組,即用戶可以把屬于自己的文件轉讓給他人。改變文件的屬主和組可以用chown命令,命令格式如下:
操作步驟3.7 chown命令使用舉例
3.2.4 設置文件和目錄的生成掩碼
用戶可以使用umask命令設置文件的默認生成掩碼。默認的生成掩碼告訴系統(tǒng)當創(chuàng)建一個文件或目錄時不應該賦予其哪些權限。如果用戶將umask命令放在環(huán)境文件.bash_profile)中,就可以控制所有新建的文件或目錄的訪問權限。
umask命令的格式如下:
其中,u1表示的是不允許屬主有的權限;u2表示的是不允許同組人有的權限;u3表示的是不允許其他人有的權限。
操作步驟3.8 umask命令使用舉例
3.2.5 特殊權限設置
1.SUID、SGID和sticky-bit
除了上述的基本權限之外,還有特殊權限存在。由于特殊權限會擁有一些“特權”,因而用戶若無特殊需要,不應該去打開這些權限,避免安全方面出現(xiàn)嚴重漏洞,甚至摧毀系統(tǒng)。3個特殊權限位是對可執(zhí)行文件或目錄進行的,使用了特殊權限將影響執(zhí)行者的操作權限。對文件可以設置SUID和SGID特殊權限;對目錄可以設置SGID和sticky-bit特殊權限。表3-16和表3-17中分別列出了文件和目錄特殊權限的說明。
表3-16 文件的特殊權限說明
表3-17 目錄的特殊權限說明
一個設置了SUID的典型例子是passwd程序,它允許普通用戶改變自己的口令,這是通過改變/etc/shadow文件的口令字段實現(xiàn)的。然而系統(tǒng)管理員決不允許普通用戶擁有直接改變/etc/shadow文件的權利,因為這絕對不是個好主意。解決方法是將passwd程序設置SUID,當passwd程序被執(zhí)行時將擁有超級用戶的權限,而passwd程序運行結束后又回到普通用戶的權限。下面顯示passwd程序的權限。
一個設置了sticky-bit的典型例子是系統(tǒng)臨時文件目錄/tmp,這樣就避免了不法用戶存心破壞,恣意亂刪其他用戶放置的文件。下面顯示/tmp目錄的權限:
2.SUID、SGID和sticky-bit的表示
從上面的顯示可以看出:SUID是占用屬主的x位置來表示的;SGID是占用組的x位置來表示的;sticky-bit是占用其他人的x位置來表示的。
SUID、SGID和sticky-bit也可用1位八進制數(shù)(3位二進制數(shù))表示,如表3-18所示。
表3-18 特殊權限的數(shù)值表示
3.設置特殊權限
設置特殊權限仍舊使用chmod命令,并且依然有字符設定法和數(shù)值設定法之分。
●使用chmod命令的字符設定法時,可以使用s和t權限字符。
●使用chmod命令的數(shù)值設定法時,要使用4位八進制數(shù)值,其中第1位八進制數(shù)用于設置特殊權限,后3位八進制數(shù)用于設置基本權限。
操作步驟3.9 使用chmod命令設置特殊權限舉例
3.2.6 使用ACL權限
1.ACL權限
傳統(tǒng)的UNIX/Linux使用UGO方式設置權限,具體地說就是通過user(用戶)、group組)、other(其他人)與r(讀)、w(寫)、x(執(zhí)行)的不同組合來實現(xiàn)的。隨著應用的發(fā)展,這些權限組合已不能適應現(xiàn)時復雜的文件系統(tǒng)權限控制要求,具有一定的局限性。
例如,目錄/data的權限如下:
所有者與所屬組均為root,在不改變所有者的前提下,要求用戶tom對該目錄有完全訪問權限(rwx)。只能考慮以下兩種辦法(這里假設tom不屬于root組)。
1)給/data的其他人增加rwx權限。由于tom被歸為其他人,其將擁有rwx權限
2)將tom加入到root組,并為root組分配rwx權限,那么其將擁有rwx權限
以上兩種方法其實都不合適:第一種方法將導致所有其他人都具有rwx 權限而非tom一個人;第二種方法將導致所有root的同組人都具有rwx 權限而非tom一個人。
因此傳統(tǒng)的權限管理設置起來就力不從心了。為了解決這些復雜的權限控制問題,就有了IEEE POSIX 1003.1e 這個ACL的標準,Linux 也開發(fā)出了一套符合該標準的文件系統(tǒng)權限管理方案。
所謂ACL就是訪問控制列表(Access Control List),為了與其他的ACL相區(qū)別,有時也稱文件訪問控制列表(FACL)。一個文件/目錄的訪問控制列表,可以針對任意指定的用戶/組分配RWX權限。
支持ACL需要內核和文件系統(tǒng)的支持。Linux 從2.6版內核開始支持ACL。不是所有類型的文件系統(tǒng)均支持ACL,但Linux 2.6內核配合常用的 ext2/ext3/ext4、jfs、xfs、ReiserFS等文件系統(tǒng),都可以支持ACL。
有兩種類型的ACL:
●一種是存取ACL (access ACLs),針對文件和目錄設置訪問控制列表。
●一種是默認ACL (default ACLs),只能針對目錄設置。如果目錄中的文件沒有設置
ACL,就會使用該目錄的默認ACL。
2.CentOS 下的ACL
CentOS 7默認支持ACL。
●CentOS 7 的Linux內核版本 3.10.0支持ACL。
●默認使用的xfs和ext4文件系統(tǒng)也支持ACL。
●軟件包acl提供了用于查看和設置ACL的工具。
3.使用setfacl設置ACL權限
setfacl命令的語法如下:
表3-19中列出了setfacl命令的選項說明
表3-19 setfacl命令的選項說明
操作步驟3.10 使用setfacl命令設置ACL權限
4.使用getfacl查看ACL權限
getfacl 命令用于查看文件或目錄的ACL設置,其格式如下
操作步驟3.11 使用getfacl命令查看ACL權限
提示
1.若目錄已設置了默認ACL,則新創(chuàng)建的文件將從其目錄繼承默認ACL設置
2.使用mv命令和cp-p命令操作文件時將保持ACL設置。
3.2.7 權限設置舉例
下面的例子用于創(chuàng)建用戶和組并為不同目錄設置不同的權限。
操作步驟3.12 創(chuàng)建用戶和組并為不同目錄設置不同的權限
3.3 進程管理
3.3.1 進程概述
1.進程的概念
進程(Process)是一個程序在其自身的虛擬地址空間中的一次執(zhí)行活動。之所以要創(chuàng)建進程,就是為了使多個程序可以并發(fā)地執(zhí)行,從而提高系統(tǒng)的資源利用率和吞吐量。
進程和程序的概念不同,下面是對這兩個概念的比較。
●程序只是一個靜態(tài)的指令集合;而進程是一個程序的動態(tài)執(zhí)行過程,具有生命期,是
動態(tài)地產生和消亡的。
●進程是資源申請、調度和獨立運行的單位,因此使用系統(tǒng)中的運行資源;而程序不能
申請系統(tǒng)資源,不能被系統(tǒng)調度,也不能作為獨立運行的單位,因此不占用系統(tǒng)的運
行資源。
●程序和進程無一一對應的關系。一方面一個程序可以由多個進程所共用,即一個程序
在運行過程中可以產生多個進程;另一方面,一個進程在生命期內可以順序地執(zhí)行若
干個程序。
Linux操作系統(tǒng)是多任務的,如果一個應用程序需要幾個進程并發(fā)地協(xié)調運行來完成相關工作,系統(tǒng)會安排這些進程并發(fā)運行,同時完成對這些進程的調度和管理任務,包括CPU、內存、存儲器等系統(tǒng)資源的分配。
2.Linux中的進程
在Linux系統(tǒng)中總是有很多進程同時在運行,每一個進程都有一個識別號,叫作PID Process ID),用于與其他進程區(qū)別。系統(tǒng)啟動后的第一個進程是systemd,其PID是1。systemd是唯一一個由系統(tǒng)內核直接運行的進程。新的進程可以用系統(tǒng)調用fork來產生,就是從一個已經存在的進程中派生出一個新進程,舊的進程是新產生的進程的父進程,新進程是產生它的進程的子進程。
當系統(tǒng)啟動以后,systemd進程會創(chuàng)建login進程等待用戶登錄系統(tǒng),login進程是systemd進程的子進程。當用戶登錄系統(tǒng)后,login進程就會為用戶啟動Shell進程,Shell進程就是login進程的子進程,而此后用戶運行的進程都是由Shell衍生出來的。
在多用戶多任務的Linux系統(tǒng)里,每個進程都與運行的用戶和組相關聯(lián)。除了進程識別號PID)外,在進程控制塊(PCB)中每個進程還有另外4個與用戶和組相關的識別號。它們是實際用戶識別號(real user ID,RUID)、實際組識別號(real group ID,RGID)、有效用戶識別號(effect user ID,EUID)和有效組識別號(effect group ID,EGID)。
RUID和RGID的作用是識別正在運行此進程的用戶和組。一個進程的RUID和RGID就是運行此進程的用戶的UID和GID。
EUID和EGID的作用是確定一個進程對其訪問的文件的權限和優(yōu)先權。除非產生進程的程序被設置了SUID和SGID權限之外,一般,EUID、EGID與RUID、RGID相同。若程序被設置了SUID或SGID權限,則此進程相應的EUID和EGID,將與運行此進程文件的所屬用戶的UID或所屬組的GID相同。例如,一個可執(zhí)行文件 /usr/bin/passwd,其所屬用戶是root(UID為0),此文件被設置了SUID權限。當一個UID為500、GID為501的用戶執(zhí)行此命令時,產生的進程的RUID和RGID分別是500和501,而其EUID是0,EGID是501。
盡管看上去有些煩瑣,但是所有這些設計都是為了在一個多用戶、多任務的操作系統(tǒng)中,所有用戶的工作都能夠安全可靠地進行,而這也是Linux操作系統(tǒng)的優(yōu)秀性所在。
3.進程的類型
可以將運行在Linux系統(tǒng)中的進程分為3種不同的類型。
●交互進程:由一個Shell啟動的進程。交互進程既可以在前臺運行,也可以在后臺運行。
●批處理進程:不與特定的終端相關聯(lián),提交到等待隊列中順序執(zhí)行的進程。
●守護進程:在Linux啟動時初始化,需要時運行于后臺的進程。
以上3種進程有各自的特點、作用和使用場合。
4.進程的啟動方式
啟動一個進程有兩個主要途徑:手工啟動和調度啟動。
(1)手工啟動
由用戶輸入命令,直接啟動一個進程便是手工啟動進程。手工啟動進程又可以分為前臺啟動和后臺啟動。
前臺啟動:手工啟動一個進程的最常用方式。一般地,用戶輸入一個命令“l(fā)s -l”,這就已經啟動了一個進程,而且是一個前臺的進程。
后臺啟動:直接從后臺手工啟動一個進程用得比較少一些,除非是該進程甚為耗時,且用戶也不急需要結果的時候。假設用戶要啟動一個需要長時間運行的格式化文本文件的進程,為了不使整個Shell在耗時進程的運行過程中都處于“癱瘓”狀態(tài),從后臺啟動這個進程是明智的選擇。
在后臺啟動一個進程,可以在命令行后使用&命令,例如:
2)調度啟動
這種啟動方式是事先進行設置,根據(jù)用戶要求讓進程自行啟動運行,參見6.2節(jié)
3.3.2 查看進程
1.獲取進程信息的命令
通過命令可以查看進程狀態(tài),獲取有關進程的相關信息。例如
●顯示哪些進程正在執(zhí)行和執(zhí)行的狀態(tài)。
●進程是否結束、進程有沒有僵死。
●哪些進程占用了過多的系統(tǒng)資源等。
表3-20中列出了常用的獲取進程信息的命令。
表3-20 獲取進程信息的命令
2.ps命令
在Linux中,可使用ps命令對進程進行查看。ps是一個功能非常強大的進程查看命令使用該命令使用戶可以確定有哪些進程正在執(zhí)行和執(zhí)行的狀態(tài)、進程是否結束、進程有沒有僵死、哪些進程占用了過多的系統(tǒng)資源等。總之,大部分信息都可以通過運行ps命令來獲得。下面介紹ps命令的格式和常用選項。ps命令的格式如下:
由于ps命令的功能相當強大,所以該命令有大量的選項參數(shù),這里只介紹幾個最常用的選項,如表3-21所示。
表3-21 ps命令的常用選項
表3-22中列出了ps命令輸出的重要信息的含義
表3-22 ps命令輸出的重要信息的含義
其中,在進程狀態(tài)(STAT)一欄中表示狀態(tài)的字符含義如表3-23所示
表3-23 進程狀態(tài)的字符含義
3.進程顯示命令舉例
下面給出一些顯示進程信息的例子
操作步驟3.13 顯示進程的例子
提示
不加“-l”參數(shù)的pgrep命令的輸出僅是符合條件進程的PID。若要顯示這些進程更詳細的信息,還需要使用如下形式之一:
●$ps-fp$(pgrep-d,XXXXX)。
●$pgrep-xXXXXX|xargsps-fp。
3.3.3 殺死進程
1.為什么要殺死進程
在系統(tǒng)運行期間,若發(fā)生了如下情況,就需要將這些進程殺死
●進程占用了過多的CPU時間。
●進程鎖住了一個終端,使其他前臺進程無法運行。
●進程運行時間過長,但沒有預期效果或無法正常退出。
●進程產生了過多的到屏幕或磁盤文件的輸出。
2.進程信號
進程信號是在軟件層次上對中斷機制的一種模擬,在原理上,一個進程收到一個信號與處理器收到一個中斷請求可以說是一樣的。進程信號是最基本的進程間通信方式:可以在進程之間直接發(fā)送,而不需要用戶界面;可以在Shell中通過kill命令發(fā)送給進程。
Linux對每種進程信號都規(guī)定了默認關聯(lián)動作。可以使用如下命令查看可用的進程信號及其詳細信息。
表3-24中列出了一些常用進程信號的說明
表3-24 常用進程信號說明
3.可以發(fā)送進程信號的命令
表3-25中列出了常用的發(fā)送進程信號的命令
表3-25 發(fā)送進程信號的命令
可以使用上述命令為進程發(fā)送SIGTERM(15)或SIGKILL(9)信號殺死進程
4.殺死進程舉例
下面給出一些殺死進程的例子。
操作步驟3.14 殺死進程的例子
提示
1.killall使用進程名稱而不是PID,所以所有的同名進程都將被殺死
2.pkill/pgrep 在殺死進程時應使用精確匹配(-x),以免殃及池魚。
3.3.4 作業(yè)控制
1.作業(yè)控制的含義
作業(yè)控制是指控制當前正在運行的進程的行為,也稱為進程控制。作業(yè)控制是Shell的一個特性,使用戶能在多個獨立進程間進行切換。例如,用戶可以掛起一個正在運行的進程,稍后再恢復其運行。bash記錄所有啟動的進程并保持對所有已啟動的進程的跟蹤,在每一個正在運行的進程生命期內的任何時候,用戶可以任意地掛起進程或重新啟動進程恢復運行。
例如,當用戶使用Vi編輯一個文本文件,并需要中止編輯做其他事情時,利用作業(yè)控制,可以讓編輯器暫時掛起,返回Shell提示符開始做其他的事情。其他事情做完以后,用戶可以重新啟動掛起的編輯器,返回到剛才中止的地方,就像用戶從來沒有離開編輯器一樣。這只是一個例子,作業(yè)控制還有許多實際的用途。
2.實施作業(yè)控制的常用命令
表3-26中列出了作業(yè)控制的常用命令或操作快捷鍵。
表3-26 作業(yè)控制的常用命令或操作快捷鍵
這些命令常用于用戶需要在后臺運行卻意外地放到了前臺啟動運行的時候。當一個命令在前臺被啟動運行時,會禁止用戶與Shell的交互,直到該命令結束。由于大多數(shù)命令的執(zhí)行都能很快完成,所以一般情況下不會有什么問題。但如果要運行的命令要花費很長時間的話,通常會把它放到后臺,以便能在前臺繼續(xù)輸入其他命令。此時,上面的命令就會派上用場了。
3.作業(yè)控制舉例
下面給出一個例子說明作業(yè)控制命令的使用。
操作步驟3.15 作業(yè)控制命令的使用
提示
Windows用戶通常有隨時按快捷鍵〈Ctrl+S〉進行保存的習慣,但在Linux的終端上按快捷鍵〈Ctrl+S〉表示掛起終端,要解除掛起需按快捷鍵〈Ctrl+Q〉。
3.4 思考與實驗
1.思考
1)Linux系統(tǒng)是如何標識用戶和組的?
2)什么是標準組?什么是私有組?為什么使用了私有組?
3)什么是主組?什么是附加組?以主組登錄后如何切換到附加組
4)簡述私有組和主組的關系,簡述標準組和附加組的關系。
5)簡述Linux的4個賬戶系統(tǒng)文件及其各個字段的含義。
(6)舉例說明使用useradd命令創(chuàng)建一個用戶賬號的具體執(zhí)行過程。
(7)舉例說明如何將一個用戶賬號添加到一個當前還不存在的組中。
(8)如何設置用戶口令?如何鎖定用戶賬號?如何設置用戶口令時效?
(9)Linux文件系統(tǒng)的3種基本權限是什么?
(10)Linux文件系統(tǒng)的3種特殊權限是什么?何時使用它們?
(11)簡述chmod命令的兩種設置權限的方法。
(12)如何更改文件或目錄的屬主和/或同組人?
(13)為什么使用ACL?簡述ACL的兩種類型及其作用。
(14)什么是進程?它與程序有何關系?進程的類型?進程的啟動方式
(15)如何查看進程?如何刪除進程?
(16)什么是作業(yè)控制?什么是前臺進程?什么是后臺進程?
2.實驗
(1)學會使用字符工具創(chuàng)建用戶與組賬號。
(2)學會設置用戶口令并管理用戶口令時效。
(3)學會設置文件和目錄的操作權限。
(4)學會設置和使用ACL權限。
(5)學會顯示和殺死進程。學會實施作業(yè)控制。
3.進一步學習
(1)學習SUN的集中式的賬戶系統(tǒng)NIS服務的配置和使用。
(2)學習使用OpenLDAP實現(xiàn)的集中式賬戶管理和應用。