linux上下文
㈠ 同步、非同步阻塞IO
同步(synchronous) IO和非同步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分別是什麼,到底有什麼區別?這個問題其實不同的人給出的答案都可能不同,比如wiki,就認為asynchronous IO和non-blocking IO是一個東西。這其實是因為不同的人的知識背景不同,並且在討論這個問題的時候上下文(context)也不相同。所以,為了更好的回答這個問題,我先限定一下本文的上下文。
本文討論的背景是linux環境下的network IO。
本文最重要的參考文獻是Richard Stevens的「UNIX® Network Programming Volume 1, Third Edition: The Sockets Networking 」,6.2節「I/O Models 」,Stevens在這節中詳細說明了各種IO的特點和區別,如果英文夠好的話,推薦直接閱讀。Stevens的文風是有名的深入淺出,所以不用擔心看不懂。本文中的流程圖也是截取自參考文獻。
Stevens在文章中一共比較了五種IO Model:
blocking IO
nonblocking IO
IO multiplexing
signal driven IO
asynchronous IO
由於signal driven IO在實際中並不常用,所以我這只提及剩下的四種IO Model。
再說一下IO發生時涉及的對象和步驟。
對於一個network IO (這里我們以read舉例),它會涉及到兩個系統對象,一個是調用這個IO的process (or thread),另一個就是系統內核(kernel)。當一個read操作發生時,它會經歷兩個階段:
1 等待數據准備 (Waiting for the data to be ready)
2 將數據從內核拷貝到進程中 (Copying the data from the kernel to the process)
記住這兩點很重要,因為這些IO Model的區別就是在兩個階段上各有不同的情況。
在linux中,默認情況下所有的socket都是blocking,一個典型的讀操作流程大概是這樣:
當用戶進程調用了recvfrom這個系統調用,kernel就開始了IO的第一個階段:准備數據。對於network io來說,很多時候數據在一開始還沒有到達(比如,還沒有收到一個完整的UDP包),這個時候kernel就要等待足夠的數據到來。而在用戶進程這邊,整個進程會被阻塞。當kernel一直等到數據准備好了,它就會將數據從kernel中拷貝到用戶內存,然後kernel返回結果,用戶進程才解除block的狀態,重新運行起來。
所以,blocking IO的特點就是在IO執行的兩個階段都被block了。
linux下,可以通過設置socket使其變為non-blocking。當對一個non-blocking socket執行讀操作時,流程是這個樣子:
從圖中可以看出,當用戶進程發出read操作時,如果kernel中的數據還沒有準備好,那麼它並不會block用戶進程,而是立刻返回一個error。從用戶進程角度講 ,它發起一個read操作後,並不需要等待,而是馬上就得到了一個結果。用戶進程判斷結果是一個error時,它就知道數據還沒有準備好,於是它可以再次發送read操作。一旦kernel中的數據准備好了,並且又再次收到了用戶進程的system call,那麼它馬上就將數據拷貝到了用戶內存,然後返回。
所以,用戶進程其實是需要不斷的主動詢問kernel數據好了沒有。
IO multiplexing這個詞可能有點陌生,但是如果我說select,epoll,大概就都能明白了。有些地方也稱這種IO方式為event driven IO。我們都知道,select/epoll的好處就在於單個process就可以同時處理多個網路連接的IO。它的基本原理就是select/epoll這個function會不斷的輪詢所負責的所有socket,當某個socket有數據到達了,就通知用戶進程。它的流程如圖:
當用戶進程調用了select,那麼整個進程會被block,而同時,kernel會「監視」所有select負責的socket,當任何一個socket中的數據准備好了,select就會返回。這個時候用戶進程再調用read操作,將數據從kernel拷貝到用戶進程。
這個圖和blocking IO的圖其實並沒有太大的不同,事實上,還更差一些。因為這里需要使用兩個system call (select 和 recvfrom),而blocking IO只調用了一個system call (recvfrom)。但是,用select的優勢在於它可以同時處理多個connection。(多說一句。所以,如果處理的連接數不是很高的話,使用select/epoll的web server不一定比使用multi-threading + blocking IO的web server性能更好,可能延遲還更大。select/epoll的優勢並不是對於單個連接能處理得更快,而是在於能處理更多的連接。)
在IO multiplexing Model中,實際中,對於每一個socket,一般都設置成為non-blocking,但是,如上圖所示,整個用戶的process其實是一直被block的。只不過process是被select這個函數block,而不是被socket IO給block。
Asynchronous I/O
linux下的asynchronous IO其實用得很少。先看一下它的流程:
用戶進程發起read操作之後,立刻就可以開始去做其它的事。而另一方面,從kernel的角度,當它受到一個asynchronous read之後,首先它會立刻返回,所以不會對用戶進程產生任何block。然後,kernel會等待數據准備完成,然後將數據拷貝到用戶內存,當這一切都完成之後,kernel會給用戶進程發送一個signal,告訴它read操作完成了。
到目前為止,已經將四個IO Model都介紹完了。現在回過頭來回答最初的那幾個問題:blocking和non-blocking的區別在哪,synchronous IO和asynchronous IO的區別在哪。
先回答最簡單的這個:blocking vs non-blocking。前面的介紹中其實已經很明確的說明了這兩者的區別。調用blocking IO會一直block住對應的進程直到操作完成,而non-blocking IO在kernel還准備數據的情況下會立刻返回。
在說明synchronous IO和asynchronous IO的區別之前,需要先給出兩者的定義。Stevens給出的定義(其實是POSIX的定義)是這樣子的:
A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;
An asynchronous I/O operation does not cause the requesting process to be blocked;
兩者的區別就在於synchronous IO做」IO operation」的時候會將process阻塞。按照這個定義,之前所述的blocking IO,non-blocking IO,IO multiplexing都屬於synchronous IO。有人可能會說,non-blocking IO並沒有被block啊。這里有個非常「狡猾」的地方,定義中所指的」IO operation」是指真實的IO操作,就是例子中的recvfrom這個system call。non-blocking IO在執行recvfrom這個system call的時候,如果kernel的數據沒有準備好,這時候不會block進程。但是,當kernel中數據准備好的時候,recvfrom會將數據從kernel拷貝到用戶內存中,這個時候進程是被block了,在這段時間內,進程是被block的。而asynchronous IO則不一樣,當進程發起IO 操作之後,就直接返回再也不理睬了,直到kernel發送一個信號,告訴進程說IO完成。在這整個過程中,進程完全沒有被block。
各個IO Model的比較如圖所示:
經過上面的介紹,會發現non-blocking IO和asynchronous IO的區別還是很明顯的。在non-blocking IO中,雖然進程大部分時間都不會被block,但是它仍然要求進程去主動的check,並且當數據准備完成以後,也需要進程主動的再次調用recvfrom來將數據拷貝到用戶內存。而asynchronous IO則完全不同。它就像是用戶進程將整個IO操作交給了他人(kernel)完成,然後他人做完後發信號通知。在此期間,用戶進程不需要去檢查IO操作的狀態,也不需要主動的去拷貝數據。
最後,再舉幾個不是很恰當的例子來說明這四個IO Model:
有A,B,C,D四個人在釣魚:
A用的是最老式的魚竿,所以呢,得一直守著,等到魚上鉤了再拉桿;
B的魚竿有個功能,能夠顯示是否有魚上鉤,所以呢,B就和旁邊的MM聊天,隔會再看看有沒有魚上鉤,有的話就迅速拉桿;
C用的魚竿和B差不多,但他想了一個好辦法,就是同時放好幾根魚竿,然後守在旁邊,一旦有顯示說魚上鉤了,它就將對應的魚竿拉起來;
D是個有錢人,乾脆雇了一個人幫他釣魚,一旦那個人把魚釣上來了,就給D發個簡訊。
㈡ LINUX的上下文是什麼意思
樓上的回答好搞笑呀。
LINUX上下文是指LINUX進程上下文:
當一個進程在執行時,CPU的所有寄存器中的值、進程的狀態以及堆棧中的內容被稱為該進程的上下文。
當內核需要切換到另一個進程時,它需要保存當前進程的所有狀態,即保存當前進程的上下文,以便在再次執行該進程時,能夠必得到切換時的狀態執行下去。
㈢ Linux裡面kmp是什麼
kmp是在系統崩潰、死鎖或者死機的時候用來轉儲內存運行參數的一個工具和服務。
打個比方,如果系統一旦崩潰那麼正常的內核就沒有辦法工作了,在這個時候將由kmp產生一個用於capture當前運行信息的內核,該內核會將此時的內存中的所有運行狀態和數據信息收集到一個mp
core文件中以便於Red
Hat工程師分析崩潰原因,一旦內存信息收集完成,系統將自動重啟。這和以前的diskmp,netmp是同樣道理。只不過kmp是RHEL6特有的。
查看Linux系統是否打開kmp:
執行命令:ulimit -c 如果輸出為 0 ,則代表沒有打開。如果為unlimited則已經打開。
㈣ Linux基本命令-2021-0717
[root@localhost ~]# ls -l
總用量 44
-rw------. 1 ---- root ---- root --------1207 1 月14 18:18 anaconda-ks.cfg
許可權--引用計數 所有者 -- 所屬組--- 大小-- 文件修改時間 文件名
ls [選項] [文件名或目錄名]
選項:
-a :顯示所有文件
--color=when:支持顏色輸出
-d :顯示目錄信息,而不是目錄下的文件
-h :人性化顯示﹐按照我們習慣的顯示文件大小
-i :顯示文件的i節點號
-l:長格式顯示
pwd 命令是查詢當前所在的目錄的絕對路徑
選項:
-L (默認值)列印環境變數"$PWD"的值,可能為符號鏈接。
-P 列印當前工作目錄的物理位置。
mkdir 是創建目錄的命令
選項:
-Z:設置安全上下文,當使用SELinux時有效;
-m或--mode:建立目錄的同時設置目錄的許可權;
-p或--parents:若所要建立目錄的上層目錄目前尚未建立,則會一並建立上層目錄;
rmdir 是刪除空目錄的命令
-p: 遞歸刪除目錄
touch 是 創建空文件或修改文件的時間戳
[root@localhost ~]# touch [選項] 文件名
-a:或--time=atime或--time=access或--time=use 只更改存取時間;
-c:或--no-create 不建立任何文件;
-d:<時間日期> 使用指定的日期時間,而非現在的時間;
-f:此參數將忽略不予處理,僅負責解決BSD版本touch指令的兼容性問題;
-m:或--time=mtime或--time=modify 只更該變動時間;
-r:<參考文件或目錄> 把指定文件或目錄的日期時間,統統設成和參考文件或目錄的日期時間相同;
-t:<日期時間> 使用指定的日期時間,而非現在的時間;
--help:在線幫助;
--version:顯示版本信息。
stat 是查看文件詳細信息的命令,而且可以看到文件的這三個時間戳
選項:
-L:支持符號連接;
-f:顯示文件系統狀態而非文件狀態;
-t:以簡潔方式輸出信息;
cat 命令用來查看文件內容
選項:
-A: 相當於-vET 選項的整合,用於列出所有隱藏符號
-E: 列出每行結尾的回車符$
-n: 顯示行號
-T: 把 Tab 鍵用^I顯示出來
-v: 列出特殊字元
more 是分屏顯示文件的命令
less 是分行顯示文件的命令
用less命令顯示文件時,用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程序,應按Q鍵。
選項:
-e:文件內容顯示完畢後,自動退出;
-f:強制顯示文件;
-g:不加亮顯示搜索到的所有關鍵詞,僅顯示當前顯示的關鍵字,以提高顯示速度;
-l:搜索時忽略大小寫的差異;
-N:每一行行首顯示行號;
-s:將連續多個空行壓縮成一行顯示;
-S:在單行顯示較長的內容,而不換行顯示;
-x<數字>:將TAB字元顯示為指定個數的空格字元。
head 是用來顯示文件開頭的命令
選項:
-c --bytes=[-]NUM 顯示前NUM位元組;如果NUM前有"-",那麼會列印除了文件末尾的NUM位元組以外的其他內容。
-n, --lines=[-]NUM 顯示前NUM行而不是默認的10行;如果NUM前有"-",那麼會列印除了文件末尾的NUM行以外的其他行。
-q, --quiet, --silent 不列印文件名行。
-v, --verbose 總是列印文件名行。
-z, --zero-terminated 行終止符為NUL而不是換行符。
tail 是用來顯示文件末尾的命令
選項:
-c, --bytes=NUM 輸出文件尾部的NUM(NUM為整數)個位元組內容。
-f, --follow[={name|descript}] 顯示文件最新追加的內容。「name」表示以文件名的方式監視文件的變化。
-F 與 「--follow=name --retry」 功能相同。
-n, --line=NUM 輸出文件的尾部NUM(NUM位數字)行內容。
--pid=<進程號> 與「-f」選項連用,當指定的進程號的進程終止後,自動退出tail命令。
-q, --quiet, --silent 當有多個文件參數時,不輸出各個文件名。
--retry 即是在tail命令啟動時,文件不可訪問或者文件稍後變得不可訪問,都始終嘗試打開文件。使用此選項時需要與選項「--follow=name」連用。
-s, --sleep-interal=<秒數> 與「-f」選項連用,指定監視文件變化時間隔的秒數。
-v, --verbose 當有多個文件參數時,總是輸出各個文件名。
ln 是用來為文件創建鏈接的命令
[root@localhost ~]# ln [選項] 源文件 目標文件
選項:
-s: 建立軟鏈接文件。如果不加「-s」選項,則建立硬鏈接文件
-f: 強制。如果目標文件已經存在,則刪除目標文件後再建立鏈接文件
-d, -F, --directory 創建指向目錄的硬鏈接(只適用於超級用戶)
-f, --force 強行刪除任何已存在的目標文件
-i, --interactive 覆蓋既有文件之前先詢問用戶
-L, --logical 取消引用作為軟鏈接的目標
-n, --no-dereference 把軟鏈接的目的目錄視為一般文件
-P, --physical 直接將硬鏈接到軟鏈接
-r, --relative 創建相對於鏈接位置的軟鏈接
-s, --symbolic 對源文件建立軟鏈接
硬鏈接特徵:
源文件和硬鏈接文件擁有相同的 Inode 和 Block
修改任意一個文件,另一個都改變
刪除任意一個文件,另一個都能使用
硬鏈接標記不清,很難確認硬鏈接文件位置,不建議使用
硬鏈接不能鏈接目錄
硬鏈接不能跨分區
軟鏈接特徵:
軟鏈接和源文件擁有不同的 Inode 和 Block
兩個文件修改任意一個,另一個都改變
刪除軟鏈接,源文件不受影響;刪除源文件,軟鏈接不能使用
軟鏈接沒有實際數據,只保存源文件的 Inode,不論源文件多大,軟鏈接大小不變
軟鏈接的許可權是最大許可權 lrwxrwxrwx.,但是由於沒有實際數據,最終訪問時需要參考源文
件許可權
軟鏈接可以鏈接目錄
軟鏈接可以跨分區
軟鏈接特徵明顯,建議使用軟連接
rm 是強大的刪除命令,不僅可以刪除文件,也可以刪除目錄
[root@localhost ~]# rm [選項] 文件或目錄
選項:
d:直接把欲刪除的目錄的硬連接數據刪除成0,刪除該目錄;
-f:強制刪除文件或目錄;
-i:刪除已有文件或目錄之前先詢問用戶;
-r:遞歸處理,將指定目錄下的所有文件與子目錄一並處理;
--preserve-root:不對根目錄進行遞歸操作;
-v:顯示指令的詳細執行過程。
cp 是文件或目錄用於復制的命令
[root@localhost ~]# cp [選項] 源文件 目標文件
選項:
-a:此參數的效果和同時指定"-dpR"參數相同;
-d:當復制軟鏈接時,把目標文件或目錄也建立為軟鏈接,並指向與源文件或目錄連接的原始文件或目錄;
-f:強行復制文件或目錄,不論目標文件或目錄是否已存在;
-i:覆蓋既有文件之前先詢問用戶;
-l:對源文件建立硬連接,而非復制文件;
-p:保留源文件或目錄的屬性;
-r:遞歸處理,將指定目錄下的所有文件與子目錄一並處理;
-s:對源文件建立軟鏈接,而非復制文件;
-u:使用這項參數後只會在源文件的更改時間較目標文件更新時或是名稱相互對應的目標文件並不存在時,才復制文件;
-S:在備份文件時,用指定的後綴「SUFFIX」代替文件的默認後綴;
-b:覆蓋已存在的文件目標前將目標文件備份;
-v:詳細顯示命令執行的操作。
mv 是用來對文件或目錄重新命名,或者將文件移動至其他目錄
[root@localhost ~]# mv [選項] 源文件 目標文件
選項:
-b:當文件存在時,覆蓋前,為其創建一個備份;
-f:若目標文件或目錄與現有的文件或目錄重復,則直接覆蓋現有的文件或目錄;
-i:互動式操作,覆蓋前先行詢問用戶,如果源文件與目標文件或目標目錄中的文件同名,則詢問用戶是否覆蓋目標文件。用戶輸入」y」,表示將覆蓋目標文件;輸入」n」,表示取消對源文件的移動。這樣可以避免誤將文件覆蓋。
--strip-trailing-slashes:刪除源文件中的斜杠「 / 」;
-S<後綴>:為備份文件指定後綴,而不使用默認的後綴;
--target-directory=<目錄>:指定源文件要移動到目標目錄;
-u:當源文件比目標文件新或者目標文件不存在時,才執行移動操作。
[root@localhost ~]# ls -l install.log
-rw-r--r--. 1 root root 24772 1 月 14 18:17 install.log
第一列的許可權位如果不計算最後的「.」,則共有 10 位。
第 2~4 位代表文件所有者的許可權。
chmod 用來變更文件或目錄的許可權
[root@localhost ~]# chmod [選項] 許可權模式 文件名
選項:
-c, --changes:當文件的許可權更改時輸出操作信息。
--no-preserve-root:不將'/'特殊化處理,默認選項。
--preserve-root:不能在根目錄下遞歸操作。
-f, --silent, --quiet:抑制多數錯誤消息的輸出。
-v, --verbose:無論文件是否更改了許可權,一律輸出操作信息。
--reference=RFILE:使用參考文件或參考目錄RFILE的許可權來設置目標文件或目錄的許可權。
-R, --recursive:對目錄以及目錄下的文件遞歸執行更改許可權操作。
用戶身份
首先,讀、寫、執行許可權對文件和目錄的作用是不同的。
目錄的可用許可權其實只有以下幾個。
chown 是修改文件和目錄的所有者和所屬組的命令
[root@localhost ~]# chown [選項] 所有者:所屬組 文件或目錄
選項:
-c或——changes:效果類似「-v」參數,但僅回報更改的部分;
-f或--quite或——silent:不顯示錯誤信息;
-h或--no-dereference:只對軟鏈接的文件作修改,而不更改其他任何相關文件;
-R或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一並處理;
-v或——version:顯示指令執行過程;
--reference=<參考文件或目錄>:把指定文件或目錄的擁有者與所屬群組全部設成和參考文件或目錄的擁有者與所屬群組相同;
普通用戶不能修改文件的所有者,哪怕自己是這個文件的所有者也不行
普通用戶可以修改所有者是自己的文件的許可權
chgrp 是修改文件和目錄的所屬組的命令
[root@phato ~]# chgrp [選項] 所屬組 文件或目錄
-R 遞歸式地改變指定目錄及其下的所有子目錄和文件的所屬的組
-c或——changes:效果類似「-v」參數,但僅回報更改的部分;
-f或--quiet或——silent:不顯示錯誤信息;
-h或--no-dereference:只對符號連接的文件作修改,而不是該其他任何相關文件;
-H如果命令行參數是一個通到目錄的軟鏈接,則遍歷軟鏈接
-R或——recursive:遞歸處理,將指令目錄下的所有文件及子目錄一並處理;
-L:遍歷每一個遇到的通到目錄的軟鏈接
-P:不遍歷任何符號鏈接(默認)
-v或——verbose:顯示指令執行過程;
--reference=<參考文件或目錄>:把指定文件或目錄的所屬群組全部設成和參考文件或目錄的所屬群組相同;
umask 是顯示或設置創建文件的許可權掩碼。我們需要先了解一下新建文件和目錄的默認最大許可權。
我們在這里按照許可權字母來講解 umask 許可權的計算方法。我們就按照默認的 umask 值是 022來分別計算一下新建文件和目錄的默認許可權吧。
㈤ Linux用戶如何更改身份
•su - 用於以 root 用戶身份創建新 shell •sudo command 用於以 root 用戶身份運行 command •要求系統管理員預先配置 • id 用於顯示有關當前用戶的信息 通常,sudo將提示您輸入密碼。請求的密碼是指您的密碼,而不是 root 用戶的密碼。這是為了防止其他人潛入您的終端並濫用您的sudo許可權。 鑒於所有這些可更改您的身份的選項,能夠查看您是誰以及您所在的組將變得非常有用。可以通過 id 命令實現這一目的。該命令可以識別SELinux,而且會顯示將分配到您所創建的過程的默認SELinux上下文。
㈥ LINUX系統管理的人民郵電出版社最新出版圖書
書名Linux系統管理
叢 書 名--
標准書號ISBN 978-7-115-27356-7
編目分類TP316.89
作者董良 寧方明 主編
譯者--
責任編輯劉博
開本16 開
印張22.25
字數581 千字
頁數344 頁
裝幀平裝
版次第1版第1次
初版時間2012年3月
本 印 次2012年3月
首 印 數-- 冊
定價43.00 元 本書內容詳盡、實例豐富、結構清晰、通俗易懂,使用了大量的截圖進行講解和說明,對重點操作給出了詳細的操作步驟,便於讀者學習和查閱,具有很強的實用性和參考性。
本書不僅可以作為高等院校相關專業的授課教材,還可以作為RHCSA(紅帽認證系統管理員)的培訓教材,同時也可供廣大Linux的愛好者自學使用。 第1部分Linux的基礎知識
第1章Linux概述2
1.1Linux簡介2
1.1.1Linux系統的產生2
1.1.2Linux系統發展歷程3
1.1.3Linux系統的應用4
1.2Linux的特點和組成5
1.2.1Linux特點5
1.2.2Linux系統的組成6
1.2.3Linux與其他操作系統的區別6
1.3Linux的版本介紹8
1.3.1Linux內核的版本8
1.3.2Linux發行版本10
1.3.3RedHat Enterprise Linux 6.0簡介12
第2章Linux系統的安裝18
2.1通過Anaconda進行圖形安裝18
2.1.1使用Anaconda安裝18
2.1.2獲取Linux的安裝軟體18
2.1.3確定安裝硬體19
2.1.4啟動Anaconda安裝程序20
2.2安裝後的初始化配置26
2.3使用KickStart進行自動安裝30
2.3.1KickStart介紹30
2.3.2產生KickStart配置文件31
2.3.3開始自動安裝33
2.3.4KickStart文件的實例34
2.4PXE網路安裝35
第3章X Window圖形用戶界面和應用軟體40
3.1X Window簡介40
3.1.1X Window工作原理40
3.1.2X Window桌面環境41
3.2GNOME桌面環境41
3.2.1桌面與系統面板41
3.2.2Nautilus文件管理器43
3.2.3GNOME首選項44
3.2.4GNOME系統設置45
3.2.5登錄窗口切換46
3.3Linux下的常用應用軟體47
3.3.1OpenOffice簡介47
3.3.2圖像處理軟體GIMP49
3.3.3看圖軟體Gwenview50
3.3.4文件查看器Document Viewer50
3.3.5網頁瀏覽器FireFox51
3.3.6電影播放機52
第4章Shell的基本應用53
4.1Shell命令概述53
4.1.1Shell簡介53
4.1.2Shell的啟動54
4.1.3Shell命令格式55
4.1.4常用Shell命令56
4.2Bash的應用61
4.2.1命令補齊61
4.2.2命令歷史記錄62
4.2.3命令別名63
4.2.4通配符63
4.3正則表達式、管道與重定向64
4.3.1正則表達式64
4.3.2管道與重定向67
4.4文本編輯器vim69
4.4.1vim簡介69
4.4.2vim的3種模式70
4.4.3vim的進入與退出71
4.4.4vim的基本操作命令72
4.4.5vim的高級命令76
第2部分Linux的系統管理
第5章用戶和組管理80
5.1什麼是用戶80
5.1.1用戶賬號文件/etc/passwd80
5.1.2用戶影子文件/etc/shadow82
5.1.3組賬號文件/etc/group83
5.1.4用戶組影子文件/etc/gshadow84
5.2用戶管理85
5.2.1添加用戶85
5.2.2刪除用戶87
5.2.3修改用戶信息87
5.3組管理87
5.3.1創建用戶組87
5.3.2刪除用戶組88
5.3.3修改用戶組信息88
5.4使用用戶管理器管理用戶和組89
5.4.1啟動Red Hat用戶管理器89
5.4.2添加用戶90
5.4.3修改用戶屬性90
5.4.4添加用戶組91
5.4.5修改用戶組屬性92
第6章磁碟與文件系統管理93
6.1磁碟的識別與分區93
6.1.1磁碟的分類93
6.1.2磁碟的組成95
6.1.3管理分區97
6.2建立和管理文件系統99
6.2.1管理文件系統99
6.2.2文件系統類型101
6.2.3文件系統結構103
6.3文件系統操作命令104
6.3.1文件與目錄操作命令104
6.3.2壓縮和解壓縮命令106
6.3.3文件和目錄許可權管理命令111
6.4文件系統的掛載113
6.4.1使用命令行掛載文件系統113
6.4.2永久掛載文件系統116
6.4.3卸載文件系統118
6.5管理交換空間118
6.6磁碟配額121
6.6.1磁碟配額的作用121
6.6.2創建磁碟配額122
第7章邏輯卷管理125
7.1通用LVM概念和術語125
7.1.1LVM簡介125
7.1.2LVM基本術語126
7.2建立LVM卷127
7.2.1創建分區127
7.2.2創建物理卷128
7.2.3創建卷組128
7.2.4創建邏輯卷128
7.2.5創建文件系統129
7.2.6掛載文件系統129
7.3管理LVM卷130
7.3.1卸載卷130
7.3.2查看卷信息130
7.3.3調整LVM卷132
7.4LVM高級應用134
7.4.1卷快照134
7.4.2移動卷136
7.5LVM圖形化管理工具138
7.5.1管理物理卷138
7.5.2管理與配置邏輯卷139
第8章進程管理142
8.1什麼是進程142
8.1.1進程的概念142
8.1.2進程的狀態142
8.1.3進程的類型143
8.2進程管理143
8.2.1啟動進程143
8.2.2管理進程144
8.2.3終止進程148
8.2.4桌面環境下管理進程149
8.3系統監視工具150
8.3.1桌面環境下監視系統150
8.3.2系統監視命令151
8.4計劃任務152
8.4.1一次性計劃任務——at調度152
8.4.2周期性計劃任務——cron調度153
第9章軟體管理155
9.1使用YUM155
9.1.1Linux下的可執行文件155
9.1.2傳統管理軟體的方法156
9.1.3RPM156
9.1.4YUM157
9.2安裝RPM軟體164
9.2.1RPM的介紹164
9.2.2RPM軟體包文件165
9.2.3RPM命令166
9.3源代碼安裝170
9.3.1獲得軟體170
9.3.2編譯前的准備工作171
9.3.3開始編譯173
9.3.4安裝與部署174
9.4軟體包管理175
9.4.1啟用軟體包管理工具175
9.4.2查看軟體175
9.4.3安裝與卸載軟體177
第10章服務的管理178
10.1管理服務178
10.1.1服務的介紹178
10.1.2服務的啟動管理179
10.2服務的可用性181
10.2.1設置獨立服務的開機啟用181
10.2.2使用chkconfig管理服務啟動182
10.3服務管理工具183
10.3.1ntsysv183
10.3.2服務設置184
第3部分Linux的網路配置
第11章網路基礎188
11.1網路配置基礎188
11.2網路的基本配置193
11.2.1基本配置193
11.2.2高級配置194
11.3系統網路配置文件195
11.4網路設置工具197
11.4.1設置主機名稱命令hostname197
11.4.2配置網路介面命令ifconfig197
11.4.3設置路由命令route199
11.4.4檢查網路狀況命令netstat199
11.4.5ping命令201
11.4.6nslookup命令202
11.4.7traceroute命令203
第12章訪問網路文件共享服務204
12.1網路文件系統NFS204
12.1.1NFS服務簡介204
12.1.2配置NFS服務205
12.1.3NFS服務配置實例206
12.2SMB/CIFS通用網路文件系統207
12.2.1Samba服務概述207
12.2.2配置Samba208
12.2.3創建Samba伺服器209
12.3自動掛載網路存儲服務213
12.3.1自動掛載(autofs)服務概述213
12.3.2配置autofs服務213
12.3.3autofs服務配置實例215
第13章管理常用網路服務217
13.1管理NTP服務217
13.1.1NTP服務簡介217
13.1.2配置NTP服務218
13.1.3NTP的創建實例219
13.2管理CUPS列印服務220
13.2.1CUPS的介紹220
13.2.2CUPS的組件221
13.2.3管理CUPS服務222
13.3管理SSH服務224
13.3.1SSH服務簡介224
13.3.2配置SSH服務225
13.3.3SSH的管理226
13.4管理VNC服務228
13.4.1VNC概述228
13.4.2配置VNC服務229
13.3.3VNC的創建實例230
第14章常用網路伺服器配置233
14.1Web服務配置233
14.1.1Apache伺服器233
14.1.2配置Apache伺服器234
14.1.3創建Apache伺服器235
14.2ftp服務配置236
14.2.1FTP伺服器概述236
14.2.2配置vsftpd237
14.2.3創建FTP伺服器237
14.3DNS服務配置238
14.3.1DNS介紹238
14.3.2DNS配置文件239
14.3.3創建DNS伺服器242
14.3.4DNS測試命令244
14.4DHCP服務配置245
14.4.1DHCP伺服器介紹245
14.4.2配置DHCP服務245
14.4.3創建DHCP伺服器247
14.5Mail服務配置248
14.5.1SMTP伺服器介紹248
14.5.2配置postfix服務248
14.5.3創建postfix伺服器250
第4部分Linux的安全設置
第15章Linux安全設置254
15.1文件的安全設置ACL254
15.1.1什麼是ACL254
15.1.2配置使用ACL255
15.1.3ACL配置實例255
15.1.4文件系統的特殊許可權:SUID/SGID/Sticky Bit257
15.2磁碟的安全加密259
15.2.1通過加密分區啟用數據保密259
15.2.2使用圖形工具加密分區261
15.3日誌管理263
15.3.1日誌系統概述264
15.3.2管理日誌服務265
15.3.3日誌的格式267
15.3.4集中式日誌服務267
第16章LDAP網路用戶配置269
16.1LDAP簡介269
16.1.1LDAP的特性269
16.1.2常用名稱解釋270
16.1.3OpenLDAP介紹270
16.2建立LDAP域伺服器271
16.2.1安裝軟體包271
16.2.2配置LDAP伺服器271
16.2.3初始化LDAP資料庫272
16.2.4啟動LDAP服務273
16.3使用LDAP伺服器進行網路身份認證274
16.3.1准備工作274
16.3.2加入LDAP域275
16.4網路掛載主目錄276
第17章防火牆基本設置278
17.1Linux下防火牆的基本設置278
17.1.1Linux防火牆概述278
17.1.2iptables防火牆內核模塊280
17.1.3iptables命令格式281
17.2主機防火牆283
17.2.1iptables防火牆的運行與管理283
17.2.2管理主機防火牆規則285
17.2.3常用的主機防火牆規則286
17.2.4使用圖形界面管理主機防火牆規則287
17.3NAT網路地址轉換289
17.3.1NAT簡介289
17.3.2使用iptables配置源NAT290
17.3.3使用iptables配置目的NAT291
第18章管理SELinux294
18.1基本SELinux安全性概念294
18.1.1SELinux介紹294
18.1.2SELinux的優點294
18.1.3SELinux的詞彙295
18.1.4SELinux初始化過程296
18.2SELinux模式297
18.2.1SELinux兩種狀態297
18.2.2查看SELinux的狀態298
18.2.3改變SELinux的狀態298
18.2.4手工修改SELinux模式300
18.3SELinux上下文300
18.3.1安全上下文的格式300
18.3.2查看對象的安全上下文301
18.3.3修改對象的安全上下文301
18.3.4安全上下文與程序控制302
18.4SELinux布爾值303
18.4.1查看SELinux布爾值303
18.4.2修改SELinux布爾值304
18.4.3SELinux布爾值訪問實例304
18.5監控SELinux沖突305
第5部分Linux系統的故障排除
第19章Linux引導過程與內核管理310
19.1引導過程310
19.1.1BIOS310
19.1.2啟動載入程序311
19.1.3載入內核311
19.1.4執行init進程312
19.1.5初始化系統環境312
19.1.6建立用戶介面314
19.2運行級別Runlevel315
19.2.1Runlevel315
19.2.2查看與切換Runlevel317
19.2.3管理init服務317
19.3GRUB的更改319
19.3.1關於GRUB的簡介319
19.3.2使用GRUB319
19.3.3配置GRUB321
19.4內核管理322
19.4.1內核的版本323
19.4.2內核的組件323
19.4.3升級內核324
19.5內核模塊管理326
19.5.1內核模塊的位置326
19.5.2查看模塊信息327
19.5.3查看已載入模塊328
19.5.4自動載入模塊328
19.6配置內核參數329
19.6.1/proc目錄329
19.6.2使用sysctl修改內核參數332
19.6.3修改GRUB修改內核參數333
第20章系統恢復與故障排除335
20.1系統故障排除基礎335
20.1.1故障排除的基本原則335
20.1.2故障排除的常用方法336
20.1.3故障排除的技巧336
20.2修復引導問題337
20.2.1系統的啟動過程337
20.2.2單用戶模式338
20.3救援模式341
20.3.1救援模式介紹341
20.3.2啟動救援模式341
20.3.3切換硬碟環境344
㈦ linux中使用screen實現用多用戶登入是屏幕共享
如果您的系統引導進入文本模式(為了降低服務開銷,伺服器通常是這樣配置的),那麼您在以文本形式登錄後就已經在終端中了。在典型的 Linux 系統中,通過組合鍵 Ctrl + Alt + (F1 - F6) 您可以切換到另外的終端。每一個終端是系統中一個完全獨立的會話,不同的用戶可以同時使用。
這一多終端的特點與 Windows 中的多桌面不同。在 Linux 中,每一個終端可以分別由完全不同的用戶來控制。例如,您可能在終端 1 中以 root身份登錄,而在終端 2 中以 joeuser 身份登錄。兩個終端在各自的用戶空間中運行不同的程序。與此類似,不同的用戶可以遠程登錄到同一個 Windows 系統中。就這一點來說,Linux 更像是主機而不是簡單的伺服器或工作站。
如果您是在圖形模式下,那麼您可以打開一個 虛擬終端 (terminal)以進入終端窗口。通常在桌面的任務條上會有終端的按鈕。您也可以從上下文菜單(在桌面上單擊右鍵)打開終端 。
㈧ CPU的運算核心是不是內核
內核是操作系統的內部核心程序,它向外部提供了對計算機設備的核心管理調用。我們將操作系統的代碼分成2部分。內核所在的地址空間稱作內核空間。而在內核以外的統稱為外部管理程序,它們大部分是對外圍設備的管理和界面操作。外部管理程序與用戶進程所佔據的地址空間稱為外部空間。通常,一個程序會跨越兩個空間。當執行到內河空間的一段代碼時,我們稱程序處於內核態,而當程序執行到外部空間代碼時,我們稱程序處於用戶態。
從UNIX起,人們開始用高級語言(UNIX上最具有代表性的就是UNIX的系統級語言C語言)編寫內核代碼,使得內核具有良好的擴展性。單一內核(monolithic kernel)是當時操作系統的主流,操作系統中所有的系統相關功能都被封裝在內核中,它們與外部程序處於不同的內存地址空間中,並通過各種方式(在Intel IA-32體系中採用386保護模式)防止 外部程序直接訪問內核結構。程序只有通過一套稱作系統調用(system call)的界面訪問內核結構。近些年來,微內核(micro kernel)結構逐漸流行起來,成為操作系統的主要潮流。1986年,Tanenbaum提出Mach kernel,而後,他的minix和GNU的Hurd操作系統更是微內核系統的典範。
在微內核結構中,操作系統的內核只需要提供最基本、最核心的一部分操作(比如創建和刪除任務、內存管理、中斷管理等)即可,而其他的管理程序(如文件系統、網路協議棧等)則盡可能的放在內核之外。這些外部程序可以獨立運行,並對外部用戶程序提供操作系統服務,服務之間使用進程間通信機制(IPC)進行交互,只在需要內核的協助時,才通過一套介面對內核發出調用請求。
微內核系統的優點時操作系統具有良好的靈活性。它使得操作系統內部結構簡單清晰。程序代碼的維護非常之方便。但是也有不足之處。微內核系統由於核心態只實現了最基本的系統操作,這樣內核以外的外部程序之間由於獨立運行使得系統難以進行良好的整體優化。另外,進程間互相通信的開銷也較單一內核系統要大許多。從整體上看,在當前的硬體條件下,微內核在效率上的損失小於其在結構上獲得的收益,故而選取微內核成為操作系統的一大潮流。
然而,Linux系統卻恰恰使用了單一內核結構。這是由於Linux是一個實用主義的操作系統。Linux Tovarlds以代碼執行效率為自己操作系統的第一要務,並沒有進行過一個系統的設計工作,而是任由Linux在使用中不斷發展。在這樣的發展過程中,參與Linux開發的程序員大多為世界各地的黑客們。比起結構的清晰,他們更加註重功能的強大和高效的代碼。於是,他們將大量的精力放在優化代碼上,而這樣的全局性優化必然以喪失結構精簡為代價,導致Linux中的每個部件都不能輕易被拆除。否則必然破壞整體效率。
雖然Linux是單一內核體系,但是它與傳統的單一內核UNIX操作系統不同。在普通的單一內核系統中,所有的內核代碼都是被靜態編譯聯入的,而在Linux中,可以動態裝入和卸載內河中的部分代碼。Linux將這些代碼段稱為模塊。(mole),並對模塊給予了強有力的支持。在Linux中,可以在需要時自動裝入和卸載模塊。
Linux不支持用戶態線程。在用戶態中,Linux認為線程就是共享上下文(Context)的進程。Linux通過LWP(light weight thread)的機制來實現用戶態線程的概念。通過系統調用clone()創建新的線程。
Linux的內核為非搶占式的。即,Linux不能通過改變優先權來影響內核當前的執行流程。因此,Linux在實現實時操作時就有問題。Linux並不是一個「硬」實時操作系統。
在Linux內核中,包括了進程管理(process management)、定時器(timer)、中斷管理(interrupt management)、內存管理(memory management)、模塊管理(mole management)、虛擬文件系統介面(VFS layer)、文件系統(file system)、設備驅動程序(device driver)、進程間通信(inter-process communication)、網路管理(network management)、系統啟動(system init)等操作系統功能的實現。
㈨ linux調度是基於進程還是線程
在LINUX系統之中,被調度的應該是進程。因為只有進程才擁有一個獨立的上下文環境,是分配系統資源的最小單位……而線程在SMP體系中加速了執行的效率……
在LINUX之中,線程也可稱作輕量級進程,它能享有自己的堆棧,線程ID等獨立資源,但大多還是要依賴其創建進程,比如地址空間,信號,文件句柄……
㈩ LINUX的上下文是什麼意思
當一個進程在執行時,CPU的所有寄存器中的值、進程的狀態以及堆棧中的內容被稱為該進程的上下文。當內核需要切換到另一個進程時,它需要保存當前進程的所有狀態,即保存當前進程的上下文,以便在再次執行該進程時,能夠必得到切換時的狀態執行下去。在LINUX中,當前進程上下文均保存在進程的任務數據結構中。在發生中斷時,內核就在被中斷進程的上下文中,在內核態下執行中斷服務常式。但同時會保留所有需要用到的資源,以便中繼服務結束時能恢復被中斷進程的執行。