目錄
第一章 Linux基金會
Linux作爲歷史上最大的開源項目,在大數據、網絡、嵌入式、雲計算、區塊鏈等領域有着重要的作用;
Linux基金會是Linux創建者Linus Torvalds和主要維護者Greg Kroah-Hartman成立的中立的組織,以保證保障和加速今後Linux內核開發。
Linux主要的發行的版本有:
- Red Hat Family Systems (including CentOS and Fedora)
- SUSE Family Systems (including openSUSE)
- Debian Family Systems (including Ubuntu and Linux Mint)
第二章 Linux理念和基本概念
介紹了Linux的發展歷史,發展理念,社區和終專用詞彙等概念;
第三章 Linux系統知識和系統啓動
1.引導(The boot process)
以下是從開機到進入系統的流程:從BIOS開始,觸發引導加載程序啓動Linux內核。從那裏, 調用initramfs 文件系統,觸發init程序完成啓動過程
1)當你打開設備(計算機)電源,加載的是BIOS(Basic Input/Output System)進行自檢(POST, Power On Self Test);BIOS存儲在主板的ROM中。
2)自檢完成後,加載引導程序(boot loader),引導程序存儲在系統的某個硬盤中,可以是引導扇區(對於傳統的BIOS / MBR系統),也可以是EFI分區(最新的(統一)可擴展固件接口或EFI / UEFI系統);然後,從CMOS值加載有關日期,時間和最重要的外圍設備的信息。Linux有許多引導加載程序; 最常見的是GRUB(用於GRand統一引導加載程序),ISOLINUX (用於從可移動介質引導)和DAS U-Boot (用於在嵌入式設備/設備上引導)。大多數Linux引導加載程序都可以提供用戶界面,用於選擇引導Linux的備用選項,甚至可能安裝的其他操作系統。引導Linux時,引導加載程序負責將內核映像和初始RAM磁盤或文件系統(包含啓動系統所需的一些關鍵文件和設備驅動程序)加載到內存中。
3)引導加載程序有兩個不同的階段:
對於使用BIOS / MBR方法的系統,引導加載程序駐留在硬盤的第一個扇區,也稱爲主引導記錄(MBR)。MBR的大小隻有512個字節。在此階段,引導加載程序檢查分區表並找到可引導分區。一旦找到可引導分區,它就會搜索第二階段引導加載程序,例如GRUB,並將其加載到RAM(隨機存取存儲器)中。對於使用EFI / UEFI方法的系統,UEFI固件讀取其引導管理器數據以確定要從哪裏啓動哪個UEFI應用程序(即從哪個磁盤和分區可以找到EFI分區)。然後,固件啓動UEFI應用程序,例如GRUB,如固件引導管理器中的引導條目中所定義。這個過程比舊的MBR方法更復雜,但更通用。
第二階段引導加載程序位於/ boot 目錄下。將顯示啓動屏幕,允許我們選擇要引導的操作系統(OS)。選擇操作系統後,引導加載程序將所選操作系統的內核加載到RAM中並將控制權傳遞給它。引導加載程序加載選定的內核映像並將控制權傳遞給它。內核幾乎總是被壓縮,所以它的第一個工作就是解壓縮自己。在此之後,它將檢查並分析系統硬件並初始化內核中內置的任何硬件設備驅動程序。
4)initramfs文件系統鏡像包含執行安裝正確的根文件系統所需的所有操作的程序和二進制文件,例如爲大容量存儲控制器提供所需文件系統和設備驅動程序的內核功能,其中包含一個名爲udev(用於用戶設備)的工具,負責計算存在哪些設備,找到他們正確操作所需的設備驅動程序,然後加載它們。找到根文件系統後,將檢查錯誤並裝入。安裝程序指示操作系統文件系統可以使用,並將其與文件系統整體層次結構中的特定點(掛載點)相關聯。如果成功, 則從RAM中清除initramfs ,並執行根文件系統(/ sbin / init)上的初始化(init)程序。初始化(init)處理安裝並轉移到最終的真實根文件系統。如果在訪問大容量存儲之前需要特殊的硬件驅動程序,則它們必須位於initramfs映像中。
5)在啓動過程即將結束時,初始化(init)會啓動許多文本模式登錄提示。這使您可以鍵入用戶名,然後輸入密碼,最終獲得命令shell。但是,如果您運行的是具有圖形登錄界面的系統,則最初不會看到這些。
2.內核 初始化(init)進程及系統服務程序
1)引導加載程序將內核和基於RAM的初始文件系統(initramfs)加載到內存中,因此 內核可以直接使用它。當內核加載到RAM中時,它會立即初始化並配置計算機的內存,並配置連接到系統的所有硬件。這包括所有處理器,I / O子系統,存儲設備等。內核還會加載一些必要的用戶空間應用程序。
2)一旦內核設置了所有硬件並掛載了根文件系統,內核就會運行 (/sbin/init)。然後,這將成爲初始進程,然後啓動其他進程以使系統運行。系統上的大多數其他進程最終將其原點跟蹤到 init ; 例外包括所謂的內核進程。這些是由內核直接啓動的,他們的工作是管理內部操作系統的詳細信息。除了啓動系統外,init 還負責保持系統運行並乾淨地關閉系統。它的職責之一是在必要時作爲所有非內核進程的管理者; 它在完成後清理完畢,並在用戶登錄和註銷時根據需要重新啓動用戶登錄服務,並對其他後臺系統服務執行相同操作。
3)但是 init 將事物視爲一個連續過程,分爲一系列連續階段。每個階段都需要在下一階段完成之前完成。因此,啓動並不能輕易利用可在多個處理器或內核上完成的並行處理。這樣開關機就變得異常的緩慢,這對於一些需要快速啓動場景就不適合使用。正對此問題,開發了systemd啓動方式。systemd的系統啓動速度比早期的init方法快。這主要是因爲它用積極的並行化技術取代了一系列步驟,這允許同時啓動多個服務。複雜的啓動shell腳本被更簡單的配置文件所取代,這些配置文件枚舉了在啓動服務之前必須完成的工作,如何執行服務啓動以及服務應該指示在啓動完成時已完成的條件。需要注意的一點是 (/sbin/init) 現在只指向 (/lib/systemd/systemd) ; 即systemd接管init進程。
3.Linux文件系統基礎知識
1)Linux支持的不同類型的文件系統:
- 傳統磁盤的文件系統: EXT2,EXT3,EXT4,XFS,增加了Btrfs,JFS,NTFS等等。
- 閃存存儲文件系統:ubifs,JFFS2,YAFFS等
- 數據庫文件系統
- 特殊用途的文件系統:PROCFS,sysfs的,tmpfs的,squashfs的,debugfs等等。
對比Windows系統
2)Linux使用' / '字符分隔路徑(與使用' \ '的Windows不同),並且沒有驅動器號。多個驅動器和/或分區作爲目錄安裝在單個文件系統中。可移動媒體(如USB驅動器和CD和DVD)將顯示爲安裝在 / run / media / yourusername / disklabel中, 用於最近的Linux系統,或者安裝在/media下,用於較舊的發行版。例如,如果您的用戶名是student,則可能最終在/run/media/student/ FEDORA上找到標有FEDORA 的USB 筆式驅動器,並且該光盤上的文件README.txt 將位於/run/media/student/FEDORA /README.txt。
3)所有Linux文件系統名稱都區分大小寫,因此/boot,/Boot和/BOOT 代表三個不同的目錄(或文件夾)。許多發行版區分正確系統操作所需的核心實用程序和其他程序,並將後者放在/usr(用戶)下的目錄中。
4.選擇Linux發行版本
1)更具自己的需要選擇合適的Linux發行版本。
2)所有發行版的實際安裝過程都非常相似(自行上網搜索)。從安裝介質啓動後,安裝程序將啓動並詢問有關如何設置系統的問題。如果提供自動安裝文件,則會跳過這些問題。然後,執行安裝。最後,計算機重新啓動到新安裝的系統。許多安裝程序可以使用配置文件完全自動完成安裝,以指定安裝選項。此文件稱爲基於Red Hat的系統的Kickstart文件,基於SUSE的系統的AutoYAST配置文件,以及基於Debian的系統的Preseed文件。
3)然你也可以選擇通過虛擬機安裝Linux的方式最大化的減少對你現有的計算的改變。
第四章 圖形界面
1.圖形桌面
1)使用Linux時,可以使用命令行界面(CLI)或圖形用戶界面(GUI)。要在CLI中工作,您必須記住用於執行任務的程序和命令,以及如何快速準確地獲取有關其使用和選項的更多信息。另一方面,使用GUI通常快速而簡單。它允許您通過圖形圖標和屏幕與系統進行交互。對於重複性任務,CLI通常更有效,而如果您不記得所有細節或只做很少的事情,GUI更容易操作。
2)GNOME是一個流行的桌面環境,具有易於使用的圖形用戶界面。它被捆綁爲大多數Linux發行版的默認桌面環境,包括Red Hat Enterprise Linux,Fedora,CentOS,SUSE Linux Enterprise,Ubuntu和Debian。GNOME具有基於菜單的導航功能,有時可以輕鬆過渡到Windows用戶。但是,正如您將看到的,即使它們都使用GNOME,在各個發行版中的外觀也可能完全不同。
3)GNOME中的默認文本編輯器是gedit。它簡單而強大,非常適合編輯文檔,快速記錄和編程。儘管gedit被設計爲通用文本編輯器,但它還提供了拼寫檢查,突出顯示,文件列表和統計信息的附加功能。
第五章 在圖形界面進行系統配置
1.系統設置
1)設置時間,網絡連接,軟件安裝更新。都是圖形化的界面,和Windows差不多。
第六章 常見應用
1.互聯網應用
2.辦公和開發應用
1)大多數Linux發行版都提供LibreOffice,這是一個開源辦公套件,始於2010年,並從OpenOffice.org發展而來。雖然我們已經列出了其他辦公套件,但LibreOffice是最成熟,最廣泛使用和強烈開發的。包含:
- Text (articles, books, reports, etc.) =>Word
- Spreadsheets =>Excel
- Presentations => PPT
- Graphical objects.
2)開發工具
Linux發行版附帶了一整套應用程序和工具,這些應用程序和工具是開發或維護用戶應用程序和內核本身所需的。
這些工具緊密集成,包括:
- 根據程序員的需求定製的高級編輯器,例如vi和emacs。
- 對於曾經存在的每種計算機語言的編譯器(例如用於C和C ++程序的gcc)。
- 調試器,如gdb和各種圖形前端,以及許多其他調試工具(如valgrind)。
- 性能測量和監控程序,其中一些具有易於使用的圖形界面,另一些則更爲神祕,僅供經驗豐富的開發工程師使用。
- 完整的集成開發環境(IDE),例如Eclipse,將所有這些工具放在一起。
在其他操作系統上,這些工具必須單獨獲取和安裝,通常需要付費,而在Linux上,通過標準軟件包安裝系統可以免費獲得這些工具。
3.多媒體應用
Linux系統提供了許多聲音播放器應用程序,包括:Amarok;Audacity;Rhythmbox;
Linux系統提供了許多電影播放器,包括:VLC;Mplayer;Xine;Totem;
還有電影編輯軟件和PS軟件。
第七章 命令行操作
1.命令行模式選項
1)Linux系統管理員在命令行提示符下花費了大量時間。它們通常會在此文本環境中自動執行任務並對其進行故障排除。有一種說法,“ 圖形用戶界面使簡單的任務變得更容易,而命令行界面使得困難的任務成爲可能 ”。Linux在很大程度上依賴於豐富的命令行工具。命令行界面具有以下優點:
- 不會產生GUI開銷。
- 實際上,任何一項任務都可以在命令行中完成。
- 您可以爲常用(或易於忘記)任務和一系列過程實現腳本。
- 您可以在Internet上的任何位置登錄遠程計算機。
- 您可以直接從命令行啓動圖形應用程序,而不是通過菜單查找。
- 雖然Linux發行版中的圖形工具可能不同,但命令行界面卻都是一致的。
2)終端仿真器程序在桌面上的窗口內模擬(模擬)獨立終端。通過這種方式,我們的意思是它的行爲基本上就像您在沒有運行圖形界面的純文本終端上登錄機器一樣。大多數終端仿真程序通過打開其他選項卡或窗口來支持多個終端會話。默認情況下,在GNOME桌面環境中,gnome-terminal應用程序用於在窗口中模擬文本模式終端。其他可用的終端程序包括:xterm,rxvt,konsole,terminator。
3)在shell提示符下輸入的大多數輸入行有三個基本元素:
- 命令
- 選項
- 參數。
該命令是您正在執行的程序的名稱。可以跟隨一個或多個選項(或開關)來修改命令可以執行的操作。選項通常與一個或兩個破折號,例如啓動,-p 或 --print ,爲了從區分它們的參數,這代表什麼命令操作上。但是,很多命令沒有選項,沒有參數,或者兩者都沒有。此外,啓動任務時,其他元素(如設置環境變量)也可以出現在命令行中。
4)創建的所有演示都有一個配置了sudo功能的用戶,以便在需要時爲用戶提供管理(admin)權限。sudo允許用戶使用另一個用戶的安全權限運行程序,通常是root(超級用戶)。sudo的功能類似於Windows中的運行功能。
5)如果您的系統尚未 設置和啓用sudo ,則需要執行以下步驟:
- 您需要以管理員或超級用戶root身份進行修改。雖然sudo將成爲執行此操作的首選方法,但我們尚未設置它,因此我們將使用su(稍後將詳細討論)。在命令行提示符下,鍵入su 並按 Enter鍵。 然後,系統將提示您輸入root密碼,因此請輸入該密碼並按Enter鍵。你會注意到什麼都沒有打印出來; 這是其他人無法在屏幕上看到密碼。你應該得到一個不同的看起來提示,通常以' # ' 結尾。例如:$ su 密碼:#
- 現在,您需要創建配置文件以使您的用戶帳戶能夠使用sudo。通常,此文件在/etc/sudoers.d/ 目錄中創建,文件名與用戶名相同。例如,對於此演示,假設您的用戶名是“學生”。在執行第1步之後,您將通過執行以下操作爲“student”創建配置文件:
#echo“student ALL =(ALL)ALL”> /etc/sudoers.d/student - 最後,如果你不通過這樣做改變文件的權限,一些Linux發行版會報錯:
#chmod 440 /etc/sudoers.d/student
如果您使用sudo ,則應正確設置。使用sudo時,默認情況下,系統會提示您至少在指定時間間隔內第一次提供密碼(您自己的用戶密碼)。將sudo配置爲不需要密碼或更改每個sudo命令不必重複密碼的時間窗口是可能的(儘管非常不安全)。
6)虛擬終端(VT)是在圖形環境之外使用整個顯示器和鍵盤的控制檯會話。這樣的終端被認爲是“虛擬的”,因爲儘管可以有多個活動終端,但是一次只有一個終端可見。VT與命令行終端窗口不完全相同; 您可以在圖形桌面上同時顯示許多可見的內容。
一個虛擬終端(通常爲一號或七號)保留用於圖形環境,並在未使用的VT上啓用文本登錄。Ubuntu使用VT 7,但CentOS / RHEL和openSUSE使用VT 1進行圖形顯示。
使用VT有用的情況的一個示例是當您遇到圖形桌面問題時。在這種情況下,您可以切換到其中一個文本VT並進行故障排除。
要在VT之間切換,請按CTR的CTRL-ALT- 功能 鍵。例如,按下CTRL-ALT- F6用於VT 6.實際上,如果您在VT中並且想要切換到另一個VT ,則只需按下 ALT-F6組合鍵 。
7)Linux發行版可以通過各種方式啓動和停止圖形桌面。確切的方法不同於分佈和分佈版本。對於較新的基於systemd的發行版,顯示管理器作爲服務運行,您可以使用systemctl實用程序停止GUI桌面,大多數發行版也可以使用 telinit命令,如下所示:
$ sudo systemctl stop gdm (或 sudo telinit 3)
並重新啓動它(登錄到控制檯後):
$ sudo systemctl start gdm (或 sudo telinit 5)
在18.04 LTS之前的Ubuntu版本中, 用lightdm代替gdm。
2.基本操作
1)關閉或重啓系統的首選方法是使用shutdown 命令。這會發送一條警告消息,然後阻止其他用戶登錄。然後,init進程將控制關閉或重新啓動系統。始終正常關閉非常重要; 如果不這樣做可能會導致系統損壞和/或數據丟失。
該停止 和關機 命令發出 執行shutdown -h 中止系統; 重啓 問題執行shutdown -r並導致機器重啓,而不僅僅是關閉。從命令行重新啓動和關閉都需要超級用戶(root)訪問權限。
管理多用戶系統時,您可以選擇在關閉之前通知所有用戶,如下所示:
$ sudo shutdown -h 10:00 “Shutting down for scheduled maintenance.”
注意:在Ubuntu系統上,關閉消息不會廣播給系統上當前的用戶。
2)根據特定發行版策略的具體情況,程序和軟件包可以安裝在各種目錄中。通常,可執行程序和腳本應該位於/ bin,/ usr / bin, / sbin, / usr / sbin 目錄或/ opt下的某個位置 。它們也可以出現在/ usr / local / bin和/ usr / local / sbin中,或出現在用戶帳戶空間的目錄中,例如/ home / student / bin。
3)有兩種方法可以識別路徑:
- 絕對路徑名
絕對路徑名以根目錄開頭,在樹之後,逐分支,直到它到達所需的目錄或文件。絕對路徑始終以/開頭。 - 相對路徑名
相對路徑名從當前工作目錄開始。相對路徑永遠不會以/開頭。
允許目錄和文件之間存在多個斜槓(/),但系統會忽略路徑名中元素之間的所有斜槓。//// usr // bin 有效,但被系統視爲/ usr / bin 。大多數情況下,使用相對路徑最方便,這需要較少的輸入。通常,您可以利用以下提供的快捷方式:。(目錄),...(父目錄)和〜(您的主目錄)。
4)下表是一個切換路徑常用的命令
遍歷文件系統樹可能會變得乏味。該tree 的命令是獲取文件系統樹的鳥瞰視圖的好方法。使用tree -d只查看目錄並禁止列出文件名。
5)所述 LN 實用程序用於創建硬鏈接和(與-s選項)軟鏈接,也稱爲符號鏈接或符號鏈接。這兩種鏈接在基於UNIX的操作系統中非常有用。假設file1已經存在。硬鏈接,稱爲文件2,用下面的命令創建:
$ ln file1 file2
請注意,現在看來存在兩個文件。但是,仔細檢查文件列表會發現這並不完全正確。
$ ls -li file1 file2
ls的-i選項在第一列中打印出inode編號,這是每個文件對象的唯一數量。這兩個文件的字段相同; 這裏真正發生的是它只有一個文件,但它有多個與之關聯的名稱,如ls 輸出 中出現的2所示。因此,已經有另一個對象鏈接到 file1 befo,執行命令。
硬鏈接非常有用,它們可以節省空間,但您必須小心使用它們,有時候會以微妙的方式使用。首先,如果 在示例中刪除file1 或 file2,則會保留inode對象(和剩餘的文件名),這可能是不合需要的,因爲如果重新創建該名稱的文件,以後可能會導致細微的錯誤。 如果您編輯其中一個文件,具體取決於您的編輯器; 大多數編輯器(包括vi和gedit)默認會保留鏈接,但修改其中一個名稱可能會破壞鏈接並導致創建兩個對象。
使用-s 選項創建軟(或符號)鏈接,如下所示:
$ ln -s file1 file3
$ ls -li file1 file3
通知file3 似乎不再是一個普通的文件,它清楚地表明file1中並有不同的索引節點號。
符號鏈接在文件系統上不佔用額外空間(除非它們的名稱很長)。它們非常方便,因爲它們可以很容易地修改爲指向不同的地方。從home 目錄到長路徑名創建快捷方式的簡便方法 是創建符號鏈接。
與硬鏈接不同,軟鏈接甚至可以指向不同文件系統,分區和/或磁盤以及其他媒體上的對象,這些媒體可能目前可用,也可能不存在。如果鏈接未指向當前可用或現有對象,則會獲得懸空鏈接。
硬鏈接有點類似於指針,軟連接類似於快捷方式。
6)該CD 命令會記住你最後一次,並讓你回到那裏與CD - 。爲了記住不僅僅是訪問過的最後一個目錄,使用pushd 來改變目錄而不是cd ; 這會將您的起始目錄推送到列表中。然後使用popd 將您發送回這些目錄,以相反的順序行走(最新的目錄將是使用popd檢索的第一個目錄)。使用dirs命令顯示目錄列表。
3.文件管理
1)下表是一張閱讀文件的命令:
2)touch 通常用於設置或更新文件的訪問,更改和修改時間。默認情況下,它會重置文件的時間戳以匹配當前時間。
但是,您也可以使用touch創建一個空文件:
$ touch <filename>
通常這樣做是爲了創建一個空文件作爲佔位符以供以後使用。
touch 提供了幾個有用的選項。例如, -t選項允許您將文件的日期和時間戳設置爲特定值,如下所示:
$ touch -t 12091600 myfile
這將myfile文件的時間戳設置爲12月9日下午4點(12 09 1600)。
3)mkdir用於創建目錄:
- mkdir sampdir
它 在當前目錄下創建一個名爲 sampdir的示例 目錄。 - mkdir /usr/sampdir
它 在 / usr下創建一個名爲 sampdir的示例目錄。
使用rmdir刪除目錄 。該目錄必須爲空或命令將失敗。要刪除目錄及其所有內容,您必須執行rm -rf。
4)下表展示操作文件的命令
5)下表展示操作文件夾的命令
輸入rm -rf是一種快速簡便的方法,可以遞歸地刪除整個文件系統樹,但它非常危險,應該非常謹慎地使用,尤其是在root用戶使用時(回想一下,遞歸意味着向下刪除所有子目錄,一路下來一棵樹)。
4.文件查找
1)執行命令時,默認情況下總共有三個標準文件流(或描述符)可供使用:標準輸入(標準輸入或標準輸入),標準輸出(標準輸出或標準輸出)和標準錯誤(或標準輸出)。
通常,stdin是您的鍵盤,stdout和stderr會打印在您的終端上。stderr經常被重定向到錯誤記錄文件,而stdin是通過將輸入指向文件或通過管道從前一個命令的輸出來提供的。stdout也經常被重定向到一個文件中。由於stderr是寫入錯誤消息的地方,因此通常不會有任何內容。
在Linux中,所有打開的文件都由所謂的文件描述符在內部表示。簡單地說,這些由從零開始的數字表示。stdin是文件描述符0,stdout是文件描述符1,stderr是文件描述符2.通常,如果除了這三個(默認打開)之外還打開了其他文件,它們將從文件描述符3開始並從那裏開始增加。
2)通過命令shell ,我們可以重定向三個標準文件流,以便我們可以從文件或其他命令而不是從鍵盤獲取輸入,我們可以將輸出和錯誤寫入文件或使用它們爲後續提供輸入命令。
例如,如果我們有一個名爲do_something的程序從stdin讀取並寫入stdout和stderr,我們可以使用less-than sign(< )後跟輸入數據要使用的文件名來更改其輸入源。:
$ do_something <input-file
如果要將輸出發送到文件,請使用大於號(>),如下所示:
$ do_something> output-file
因爲stderr與stdout不同,所以在上面的示例中終端窗口上仍會顯示錯誤消息。
如果要將stderr重定向到單獨的文件,則使用stderr的文件描述符編號(2),大於號(>),後跟要保存運行命令寫入stderr的所有內容的文件的名稱:
$ do_something 2>error-file
注意:通過相同的邏輯, do_something 1> output-file 與 do_something> output-file相同。
特殊的簡寫表示法可以將寫入文件描述符2(stderr)的任何內容發送到與文件描述符1(stdout)相同的位置:2>&1。
$ do_something> all-output-file 2>&1
bash 允許上面更簡單的語法:
$ do_something>&all-output-file
3)UNIX / Linux的理念是讓許多簡單和簡短的程序(或命令)協同工作以產生非常複雜的結果,而不是讓一個複雜的程序具有許多可能的選項和操作模式。爲了實現這一點,大量使用管道。您可以將一個命令或程序的輸出作爲輸入傳遞給另一個命令或程序。爲此,我們使用豎線,| ,命令之間的(管道符號),如:
$ command1 | command2 | 指令代碼
上面代表了我們經常稱之爲管道的東西,並允許Linux將幾個命令的動作合併爲一個。這非常有效,因爲 command2 和 command3不必等待先前的管道命令完成,然後才能開始攻擊其輸入流中的數據; 在多個CPU或核心系統上,可用的計算能力得到更好的利用,並且可以更快地完成工作。
此外,不需要在管道中的各級之間的(臨時)文件中保存輸出,這節省了磁盤空間並減少了從磁盤讀取和寫入,這通常是完成某些操作的最慢瓶頸。
4)能夠快速找到您要查找的文件將節省您的時間並提高工作效率。您可以在主目錄空間或系統上的任何其他目錄或位置中搜索文件。執行此操作的主要工具是locate 和find 實用程序。我們還將展示如何 在bash中使用通配符,以指定與給定的通用請求匹配的任何文件。
locate實用程序執行搜索把你的系統上的文件和目錄的先前構建數據庫的優勢,匹配包含指定字符串的所有條目。這有時會導致很長的列表。 爲了獲得更短(可能更相關)的列表,我們可以使用grep程序作爲過濾器。 grep將僅打印包含一個或多個指定字符串的行,如下所示:
$ locate zip | grep bin
這將列出 名稱中包含zip 和bin的所有文件和目錄。稍後我們將更詳細地介紹grep 。注意使用 | 將兩個命令組合在一起。
locate使用由相關實用程序創建的數據庫 updatedb。大多數Linux系統每天自動運行一次。但是,您可以通過以root用戶身份從命令行運行 updatedb來隨時更新它 。
要使用?搜索文件,通配符用?替換每個未知字符。 例如,如果您只知道前兩個字母是帶有.out 擴展名的三字母文件名的“ba” ,請鍵入 ls ba?.out 。
要使用* 通配符搜索文件,請將未知字符串替換爲 *。例如,如果您只記得擴展名爲.out,請 輸入 ls * .out。如下表所示:
5)find 是Linux系統管理員日常生活中非常有用且經常使用的實用程序。它從任何特定目錄(或目錄集)中遞歸文件系統樹,並找到符合指定條件的文件。默認路徑名始終是當前工作目錄。
例如,管理員有時會掃描可能較大的核心文件(其中包含程序失敗後的診斷信息),這些文件超過幾周,以便將其刪除。
刪除最近未訪問的/ tmp(和其他易失性目錄,例如包含緩存文件的易失性目錄)中的不必要或過時文件中的文件也很常見 。許多Linux發行版使用定期運行的shell腳本(通常通過cron)來執行這樣的垃圾清理。
如果沒有給出參數,find會列出當前目錄及其所有子目錄中的所有文件。縮短列表的常用選項包括-name(僅列出其名稱中具有特定模式的列表文件),- iname(也忽略文件名的情況)和-type(將結果限制爲某些指定的文件)類型,例如d表示目錄,l 表示符號鏈接,f表示常規文件,等等。
搜索名爲gcc的文件和目錄:
$ find / usr -name gcc
僅搜索名爲gcc的目錄:
$ find / usr -type d -name gcc
僅搜索名爲gcc的常規文件:
$ find / usr -type f -name gcc
find的另一個好用 是能夠在符合搜索條件的文件上運行命令。該-exec選項是用於這一目的。
要查找和刪除以.swp結尾的所有文件:
$ find -name “* .swp” -exec rm {} ';'
的 {} (花括號)是將被填充有來自查找表達式產生的所有文件名稱的佔位符和上述命令將在每一個被單獨地運行。請注意,您必須以' ; '結束命令。'(包括單引號)或“ \; ”。兩種形式都很好。也可以使用與-exec相同的選項,但find會在執行命令之前提示您獲得權限。這使得它成爲在盲目執行任何潛在危險命令之前測試結果的好方法。-ok
有時您希望根據屬性查找文件,例如創建文件,上次使用等,或根據文件大小。執行此類搜索很容易。
根據時間查找文件:
$ find / -ctime 3
這裏,-ctime 是inode元數據(即文件所有權,權限等)最後一次更改的時間; 首次創建文件時經常(但不一定)。您還可以搜索訪問/上次讀取(-atime)或修改/最後寫入(-mtime)次。數字是天數,可以表示爲正好表示該值的數字(n),+ n ,表示大於該數字,或者-n ,表示小於該數字。幾分鐘內有類似的選項(如-cmin, - 胺和 -mmin)。
要根據大小查找文件:
$ find / -size 0
請注意,默認情況下,此處的大小爲512字節塊; 您還可以指定字節(c),千字節(k),兆字節(M),千兆字節(G)等。與上面的時間數一樣,文件大小也可以是精確數字(n),+ n或-n。有關詳細信息,請參閱手冊 頁以查找。
例如,要查找大小超過10 MB的文件並對這些文件運行命令:
$ find / -size + 10M -exec command {} ';'
5.軟件安裝
1)Linux發行版的核心部分及其大多數附加軟件都是通過包管理系統安裝的。每個軟件包都包含使一個軟件組件運行良好並與構成整個系統的其他組件協作所需的文件和其他指令。包可以相互依賴。兩個軟件包管理系統都在兩個不同的級別上運行:低級工具(如dpkg或rpm)負責處理拆包單個軟件包,運行腳本,正確安裝軟件以及高級工具(如apt-get,yum , dnf或zypper)適用於包組,從供應商下載包,並計算出依賴關係。大多數情況下,用戶只需要使用高級工具,它將負責根據需要調用低級工具。依賴性解析是高級工具的一個特別重要的功能,因爲它處理爲您查找和安裝每個依賴項的詳細信息。但是要小心,因爲安裝單個軟件包可能會導致安裝許多甚至數百個依賴軟件包。
Advanced Packaging Tool (apt)是底層包管理系統,用於管理基於Debian的系統上的軟件。雖然它構成了圖形包管理器的後端,例如 Ubuntu軟件中心和 synaptic ,但它的本機用戶界面位於命令行,其中的程序包括apt-get 和apt-cache。
Yellowdog Updater Modified ( yum )是一個開源命令行包管理實用程序,適用於屬於 Red Hat / Fedora 系列的RPM兼容Linux系統。 yum 有命令行和圖形用戶界面。最近的 Fedora 版本已經用一個名爲 dnf 的新實用程序取代了 yum ,這個實用程序 具有較少的歷史包袱,具有良好的新功能,並且與日常命令的 yum 大多向後兼容 。
zypper 是 SUSE / openSUSE 系列的包管理系統, 也基於RPM。zypper 還允許您從命令行管理存儲庫。zypper 使用相當簡單,並且非常接近 yum 。
基本的打包命令如下:
第八章 獲取Linux資料
1. Linux資料獲取該方式
無論您是缺乏經驗的用戶還是老手,您都不會總是知道(或記住)各種Linux程序和實用程序的正確使用:輸入命令是什麼,需要選擇哪些選項等等。您需要諮詢幫助文件定期。由於基於Linux的系統來自各種各樣的來源,因此有許多文檔庫和獲取幫助的方法。經銷商整合這些材料並以全面且易於使用的方式呈現。
重要的Linux文檔源包括:
2. 通過man命令查看man page獲取幫助
手冊頁是最常用的Linux文檔源。它們提供了有關許多程序和實用程序的深入文檔,以及其他主題,包括配置文件,系統調用,庫例程和內核的編程API。它們出現在所有Linux發行版上,總是觸手可及。手冊 頁基礎結構最初是在早期的UNIX版本中引入的,在20世紀70年代初。man這個名字只是手冊的縮寫。使用主題名稱作爲參數鍵入man會檢索主題手冊頁中存儲的信息。手冊頁通常會轉換爲其他格式,例如PDF文檔和網頁。要了解更多信息,請在線查看Linux手冊頁。許多網頁都有一個幫助項目的圖形界面,可能包括手冊頁。其他文檔來源包括已出版的書籍和許多Internet站點。
man程序搜索,格式化並顯示手冊頁系統中包含的信息。由於許多主題都包含大量相關信息,因此輸出通過尋呼機 程序(例如less)進行管道(pipe)傳輸,以便一次查看一頁。同時,格式化信息以獲得良好的視覺顯示。
給定主題可能具有與其關聯的多個頁面,並且存在默認順序,確定在未指定選項或節號時顯示哪個頁面。要列出該主題的所有頁面,請使用-f選項。要列出討論指定主題的所有頁面(即使名稱中不存在指定的主題),請使用-k 選項。
man -f 生成與輸入whatis相同的結果。
man -k 生成與輸入apropos相同的結果 。
默認順序在/etc/man_db.conf 指定,並且大致(但不完全)按部分按升序排列。
手冊頁分爲編號爲1到9的章節。在某些情況下,會在章節編號後附加一個字母以標識特定主題。例如,描述部分X Window API的許多頁面都在第3X章中。章節號可用於強制人顯示特定章節的頁面。通常在具有相同名稱的多個章節中具有多個頁面,尤其是對於庫函數或系統調用的名稱。
使用-a參數,man將在所有章節中一個接一個地顯示具有給定名稱的所有頁面,如:
$ man -a socket
3. 通過info查看GNU info 獲取幫助
Linux文檔的下一個來源是GNU Info System。這是GNU項目的標準文檔格式,它更喜歡作爲man的替代品。信息系統基本上是自由格式的,並支持鏈接的子部分。從功能上講,信息在很多方面類似於人。但是,主題使用鏈接進行連接(即使其設計早於萬維網)。可以通過命令行界面,圖形幫助實用程序查看信息,在線打印或查看。
在終端窗口中鍵入不帶參數的info會顯示可用主題的索引。您可以使用常規移動鍵瀏覽主題列表: 箭頭,Page Up和Page Down。
您可以通過鍵入info <topic name>來查看特定主題的幫助。然後系統在所有可用信息文件中搜索主題。
一些有用的鍵是:q退出,h尋求幫助,然後按Enter選擇菜單項。
您在信息頁面中查看的主題稱爲節點。 該表列出了在節點之間移動的基本按鍵。節點本質上是文檔中的部分和子部分。您可以在節點之間移動或按順序查看每個節點。每個節點可以包含菜單和鏈接的子主題或項目。
項目的功能類似於瀏覽器鏈接,並在項目名稱的開頭用星號(*)標識。命名項目(菜單之外的)引用,用雙冒號(::)在項目名稱的末尾)。項可以引用文件中的其他節點或其他文件。
4. 通過help選項以及help命令產看help幫助
Linux文檔的另一個重要來源是使用--help選項。 大多數命令都有可用的簡短描述,可以使用--help 或-h選項以及命令或應用程序查看。例如,要了解有關man命令的更多信息,可以運行以下命令:
$ man --help
該--help選項是爲快速參考有用的,它比man或info更快的顯示信息頁面。
當在bash命令shell中運行時,一些流行的命令(例如echo 和cd)實際上特別運行在bash版本的命令中,而不是在文件系統上找到的常用二進制文件,比如在/ bin或/ usr / bin下。這樣做效率更高,因爲執行速度更快,因爲使用的資源更少。稍後我們將詳細討論命令shell,例如bash。應該注意,在命令的兩個版本中可能存在一些(通常很小的)差異。
要查看這些內置命令的概要,您只需鍵入help ,如屏幕截圖所示。
對於這些內置命令,help 執行與-h和--help參數相同的基本功能,以執行獨立程序。
5. 其他方式獲取幫助
除了手冊頁,GNU信息系統和幫助命令之外,還有其他Linux文檔源,其中一些示例包括:
- 桌面幫助系統
- 包文檔
- 在線資源
在線資源:
有很多地方可以訪問在線Linux文檔,稍微進行一些搜索就會讓你陷入其中。以下書籍已經過本課程的其他用戶的好評。它是Creative Commons許可下的免費可下載命令行綱要: William Shotts的“ Linux命令行 ”。您還可以找到每個分發的非常有用的文檔。每個發行版都有自己的用戶生成的論壇和wiki部分。以下是此類來源的一些鏈接:
此外,您可以使用在線搜索網站查找來自互聯網的有用資源,包括博客文章,論壇和郵件列表帖子,新聞文章等。
第九章 進程
1. 進程與進程屬性簡介
1)進程只是在您的計算機上執行的一個或多個相關任務(線程)的實例。它與程序或命令不同。單個命令實際上可以同時啓動多個進程。某些流程彼此獨立,其他流程相關。一個進程的故障可能會或可能不會影響系統上運行的其他進程。進程使用許多系統資源,例如內存,CPU(中央處理器)週期和外圍設備,例如打印機和顯示器。操作系統(尤其是內核)負責爲每個進程分配這些資源的適當份額,並確保整體優化的系統利用率。
終端窗口(一種命令shell)是一個只要需要運行的進程。它允許用戶在交互式環境中執行程序和訪問資源。您還可以在後臺運行程序,這意味着它們與shell分離。根據正在執行的任務,進程可以是不同類型的。以下是一些不同的流程類型及其描述和示例:
稱爲調度程序的關鍵內核函數不斷地在CPU上下移動進程,根據相對優先級共享時間,需要多少時間以及已經爲任務授予了多少時間。 當進程處於所謂的運行狀態時,這意味着它正在當前正在CPU上執行指令,或者正在等待被分配時間(時間片)以便它可以執行。此狀態下的所有進程都駐留在所謂的運行隊列上,在具有多個CPU或核心的計算機上,每個進程都有一個運行隊列。然而,有時進程會進入所謂的睡眠狀態,通常是在它們可以恢復之前等待某些事情發生時,也許是爲了用戶輸入內容。在這種情況下,進程正處於等待隊列中。還有一些其他不太常見的進程狀態,特別是當進程終止時。有時,子進程完成,但其父進程尚未詢問其狀態。有趣的是,據說這個過程處於一個殭屍狀態; 它不是真的存在,但仍然顯示在系統的進程列表中。
2)在任何給定時間,總是有多個進程被執行。操作系統通過爲每個進程分配唯一的進程ID(PID)來跟蹤它們。PID用於跟蹤進程狀態,CPU使用情況,內存使用情況,資源在內存中的確切位置以及其他特徵。當進程誕生時,新PID通常按升序分配。因此,PID 1表示初始化過程(初始化過程),並且向後續過程逐漸分配更高的數字。
該表解釋了PID類型及其描述:
在某些時候,您的某個應用程序可能會停止正常工作。你怎麼終止它?
要終止進程,可以鍵入kill -SIGKILL <pid> 或kill -9 <pid>。
但是請注意,您只能結束自己的進程; 那些屬於另一個用戶的人是禁止的,除非你是root用戶。
許多用戶可以同時訪問系統,每個用戶可以運行多個進程。操作系統通過分配給用戶的真實用戶ID(RUID)識別啓動過程的用戶。確定用戶訪問權限的用戶由有效UID(EUID)標識。EUID可能與RUID相同,也可能不同。用戶可以分爲不同的組。每個組由Real Group ID(RGID)標識。組的訪問權限由有效組ID(EGID)確定。每個用戶可以是一個或多個組的成員。大多數情況下,我們忽略這些細節,只談論用戶ID(UID)。
2. 進程參數和進程控制
1)平均負載是給定 時間段內負載數的平均值。它考慮了以下流程:
- 活躍在CPU上的
- 被認爲是可運行的,但等待CPU變得可用
- 睡眠:即等待某種資源(通常是I / O)變得可用。
注意:Linux與其他類UNIX操作系統的不同之處在於它包含休眠進程。此外,它只包括所謂的不可打斷的睡眠進程,即不能輕易被喚醒的進程。
2)可以通過運行w, top或正常運行時間來查看負載平均值。我們將在下一頁解釋這些數字。
使用三組不同的數字顯示負載平均值,如以下示例所示:
最後一條信息是系統的平均負載。假設我們的系統是單CPU系統,則三個負載平均數解釋如下:
- 0.45:在最後一分鐘,系統平均使用率爲45%。
- 0.17:在最後5分鐘,利用率爲17%。
- 0.12:過去15分鐘,利用率爲12%。
如果我們在第二個位置看到值爲1.00,則意味着單CPU系統在過去5分鐘內平均100%被利用; 如果我們想要完全使用系統,這是好的。單CPU系統的值超過1.00意味着系統被過度使用:需要CPU的進程多於CPU可用的進程數。如果我們有一個以上的CPU,比如一個四CPU系統,我們會將負載平均數除以CPU的數量。在這種情況下,例如,看到1分鐘的負載平均值爲4.00意味着整個系統在最後一分鐘內使用了100%(4.00 / 4)。短期增長通常不是問題。你看到的高峯可能是一陣活動,而不是一個新的水平。例如,在啓動時,許多流程開始,然後活動穩定下來。如果在5分鐘和15分鐘的負載平均值中看到高峯值,則可能引起關注。
Linux支持後臺和前臺作業處理。此上下文中的作業只是從終端窗口啓動的命令。前臺作業直接從shell運行,當一個前臺作業運行時,其他作業需要等待shell訪問(至少在終端窗口中,如果使用GUI),直到完成。當工作快速完成時,這很好。但如果當前的工作需要很長時間(甚至幾個小時)才能完成,這會產生不利影響。在這種情況下,您可以在後臺運行作業並釋放shell以執行其他任務。後臺作業將以較低優先級執行,這反過來將允許順利執行交互式任務,並且您可以在後臺作業運行時在終端窗口中鍵入其他命令。默認情況下,所有作業都在前臺執行。您可以通過後綴& 命令將作業放在後臺,例如:updatedb&。
您可以使用CTRL-Z暫停前臺作業,也可以使用CTRL-C終止前臺作業,並且可以始終使用 bg 和 fg命令分別在後臺和前臺運行進程。
3)jobs 程序顯示在後臺運行的所有作業。顯示屏顯示作業ID,狀態和命令名稱,如下所示。
jobs -l 提供與jobs相同的信息,包括後臺作業的PID。
後臺作業連接到終端窗口,因此,如果您註銷,jobs 實用程序將不會顯示從該終端啓動的進程。
3. 進程監控——ps命令和top命令
1)ps 提供有關PID鍵入的當前正在運行的進程的信息。如果要重複更新此狀態,可以從命令行使用 top 或其他常用安裝的變體,例如 htop 或 atop,或調用分發的圖形系統監視器應用程序。ps 有許多選項可以準確指定要檢查的任務,顯示哪些信息以及應該使用的輸出格式。如果沒有選項, ps 將顯示在當前shell下運行的所有進程。您可以使用 -u 選項顯示指定用戶名的進程信息。命令 ps -ef 將詳細的顯示系統中的所有進程。命令 ps -eLf 更進一步,爲每個線程顯示一行信息(記住,一個進程可以包含多個線程)。
ps 有另一種選項規範,它源於BSD的各種UNIX,其中選項是在沒有前面的破折號的情況下指定的。例如,命令 ps aux顯示所有用戶的所有進程。ps axo命令允許您指定要查看的屬性。屏幕截圖顯示了 帶有 aux 和 axo 限定符的ps的示例輸出 。
2)pstree 以樹形圖的形式顯示系統上運行的進程,顯示 進程及其父進程與其創建的任何其他進程之間的關係。不顯示進程的重複條目,並且線程以大括號顯示。
雖然靜態查看系統正在執行的操作非常有用,但隨着時間的推移監控系統性能也很有價值。一種選擇是定期運行ps ,比如每兩分鐘運行一次。一個更好的選擇是使用top 來獲得持續的實時更新(默認情況下每兩秒),直到你輸入 q 退出。top 清楚地突出顯示哪些進程消耗最多的CPU週期和內存(使用top 的適當命令)。
3)top 輸出的第一行顯示系統中發生的事情的快速摘要,包括:
- 系統已經運行了多長時間
- 登錄了多少用戶
- 什麼是負載平均值。
負載平均值決定了系統的繁忙程度。每個CPU的平均負載爲1.00表示系統已完全訂閱但未過載。如果負載平均值超過此值,則表示進程正在爭用CPU時間。如果負載平均值非常高,則可能表示系統出現問題,例如失控進程(處於無響應狀態的進程)。
top 輸出的第二行顯示進程總數,運行數,休眠數,停止數和殭屍進程數。將正在運行的進程數與平均負載進行比較有助於確定系統是否已達到其容量,或者某個特定用戶是否運行了太多進程。應檢查已停止的進程以查看是否所有內容都正常運行。
top 輸出的第三行通過顯示每個用戶使用的CPU時間百分比來指示如何在用戶(我們)和內核(sy)之間劃分CPU時間。然後列出以較低優先級運行的用戶作業的百分比(niceness-ni)。如果負載平均值很高,則空閒模式(id)應爲低,反之亦然。列出了I / O 等待(wa)的作業的百分比。中斷包括硬件(hi)與軟件中斷(si)的百分比。竊取時間(st)通常用於虛擬機,其具有用於其他用途的一些空閒CPU時間。
top 輸出的第四行和第五行表示內存使用情況,分爲兩類:
- 物理內存(RAM) - 顯示在第4行。
- 交換空間 - 顯示在第5行。
兩個類別都顯示總內存,已用內存和可用空間。您需要非常仔細地監視內存使用情況,以確保良好的系統性能。一旦物理內存耗盡,系統就會開始使用交換空間(硬盤驅動器上的臨時存儲空間)作爲擴展內存池,並且由於訪問磁盤比訪問內存要慢得多,這將對系統性能產生負面影響。如果系統經常開始使用交換,則可以添加更多交換空間。但是,還應考慮添加更多物理內存。
top 輸出的進程列表中的每一行顯示有關進程的信息。默認情況下,進程按CPU使用率最高排序。將顯示有關每個進程的以下信息:
- 過程識別號(PID)
- 流程所有者(USER)
- 優先級(PR)和漂亮的值(NI)
- 虛擬(VIRT),物理(RES)和共享內存(SHR)
- 現狀(S)
- 使用的CPU(%CPU)和內存(%MEM)的百分比
- 執行時間(TIME +)
- 命令(命令)。
除了報告信息外, 還可以交互使用top來監控和控制流程。當top 在終端窗口中運行時,您可以輸入單字母命令來更改其行爲。例如,您可以根據CPU或內存使用情況查看排名靠前的進程。如果需要,您可以更改正在運行的進程的優先級,也可以停止/終止進程。該表列出了在運行top時按下各種鍵時會發生什麼:
4. 進程定時設置
1)AT 命令 : 假設您需要在將來某個特定日期執行任務。但是,你知道那天你將遠離機器。你將如何執行任務?您可以使用at 實用程序在指定時間執行任何非交互式命令,如圖所示:
2)corontab 命令 : cron是一個基於時間的調度實用程序。它可以在特定時間和/或日期持續啓動例行後臺工作。cron由名爲 / etc / crontab (cron table)的配置文件驅動,該文件包含需要在正確安排的時間運行的各種shell命令。有系統範圍的crontab文件和基於用戶的單獨文件。crontab文件的每一行代表一個作業,由一個所謂的 CRON表達式組成,後跟一個shell命令來執行。在crontab -e命令命令將打開的crontab編輯器編輯現有作業或創造新的就業機會。crontab文件的每一行將包含6個字段:
例子:
- 條目* * * * * /usr/local/bin/execute/this/script.sh 將安排一個作業在每個月的每個小時,每個月和每一天的每個小時執行' script.sh '在這一週。
- 條目30 08 10 06 * / home / sysadmin / full-backup 將安排在6月10日上午8點30分進行全面備份,而不管一週中的哪一天。
3)sleep 命令: 有時,必須延遲或暫停命令或工作。例如,假設應用程序已讀取並處理了數據文件的內容,然後需要在備份系統上保存報告。如果備份系統當前正忙或不可用,則可以使應用程序休眠(等待)直到它可以完成其工作。這種延遲可能是安裝備份設備並準備寫入。sleep 會暫停執行至少指定的時間段,該時間段可以是秒數(默認值),分鐘,小時或天數。在該時間過去之後(或者已經接收到中斷信號),將繼續執行。語法是:
sleep NUMBER [SUFFIX] ...
其中SUFFIX可能是:
- s 秒(默認值)
- m 分鐘
- h 小時
- d 天
sleep 和AT 有很大的不同; sleep 延遲執行特定時間段,而AT 稍後開始執行時。