前言
大家好,這里是浩道linux,主要給大家分享linux、python、網絡通信相關的IT知識平臺。
今天浩道跟大家分享linux實用場景相關的實例,助你全面了解linux相關知識。
本文分別從 Linux 概述、磁盤、目錄、文件、安全、語法級、實戰、文件管理命令、文檔編輯命令、磁盤管理命令、網絡通訊命令、系統管理命令、備份壓縮命令等方面拆解 Linux 常見面試問題。可以先收藏,慢慢讀。
1Linux 概述
1.1什么是 Linux
Linux 是一套免費使用和自由傳播的類 Unix 操作系統,是一個基于 POSIX 和 Unix 的多用戶、多任務、支持多線程和多 CPU 的操作系統。它能運行主要的 Unix 工具軟件、應用程序和網絡協議。它支持 32 位和 64 位硬件。Linux 繼承了 Unix 以網絡為核心的設計思想,是一個性能穩定的多用戶網絡操作系統。
1.2Unix 和 Linux 有什么區別?
Linux 和 Unix 都是功能強大的操作系統,都是應用廣泛的服務器操作系統,有很多相似之處,甚至有一部分人錯誤地認為 Unix 和 Linux 操作系統是一樣的,然而,事實并非如此,以下是兩者的區別。
開源性 Linux 是一款開源操作系統,不需要付費,即可使用;Unix 是一款對源碼實行知識產權保護的傳統商業軟件,使用需要付費授權使用。
跨平臺性 Linux 操作系統具有良好的跨平臺性能,可運行在多種硬件平臺上;Unix 操作系統跨平臺性能較弱,大多需與硬件配套使用。
可視化界面 Linux 除了進行命令行操作,還有窗體管理系統;Unix 只是命令行下的系統。
硬件環境 Linux 操作系統對硬件的要求較低,安裝方法更易掌握;Unix 對硬件要求比較苛刻,安裝難度較大。
用戶群體 Linux 的用戶群體很廣泛,個人和企業均可使用;Unix 的用戶群體比較窄,多是安全性要求高的大型企業使用,如銀行、電信部門等,或者 Unix 硬件廠商使用,如 Sun 等。相比于 Unix 操作系統,Linux 操作系統更受廣大計算機愛好者的喜愛,主要原因是 Linux 操作系統具有 Unix 操作系統的全部功能,并且能夠在普通 PC 計算機上實現全部的 Unix 特性,開源免費的特性,更容易普及使用!
1.3什么是 Linux 內核?
Linux 系統的核心是內核。內核控制著計算機系統上的所有硬件和軟件,在必要時分配硬件,并根據需要執行軟件。
系統內存管理
應用程序管理
硬件設備管理
文件系統管理
1.4Linux 的基本組件是什么?
就像任何其他典型的操作系統一樣,Linux 擁有所有這些組件:內核,shell 和 GUI,系統實用程序和應用程序。Linux 比其他操作系統更具優勢的是每個方面都附帶其他功能,所有代碼都可以免費下載。
1.5Linux 的體系結構
從大的方面講,Linux 體系結構可以分為兩塊:
用戶空間(User Space) :用戶空間又包括用戶的應用程序(User Applications)、C 庫(C Library) 。
內核空間(Kernel Space) :內核空間又包括系統調用接口(System Call Interface)、內核(Kernel)、平臺架構相關的代碼(Architecture-Dependent Kernel Code) 。
為什么 Linux 體系結構要分為用戶空間和內核空間的原因?
1.現代 CPU 實現了不同的工作模式,不同模式下 CPU 可以執行的指令和訪問的寄存器不同。
2.Linux 從 CPU 的角度出發,為了保護內核的安全,把系統分成了兩部分。
用戶空間和內核空間是程序執行的兩種不同的狀態,我們可以通過兩種方式完成用戶空間到內核空間的轉移:
1)系統調用;
2)硬件中斷。
1.6BASH 和 DOS 之間的基本區別是什么?
BASH 和 DOS 控制臺之間的主要區別在于 3 個方面:
BASH 命令區分大小寫,而 DOS 命令則不區分;
在 BASH 下,/ character 是目錄分隔符,作為轉義字符。在 DOS 下,/用作命令參數分隔符,是目錄分隔符
OS 遵循命名文件中的約定,即 8 個字符的文件名后跟一個點,擴展名為 3 個字符。BASH 沒有遵循這樣的慣例。
1.7Linux 開機啟動過程?
讀取 MBR 的引導文件(GRUB、LILO)。
引導 Linux 內核。
運行第一個進程 init (進程號永遠為 1 )。
進入相應的運行級別。
運行終端,輸入用戶名和密碼。
1.8Linux 系統缺省的運行級別?
關機。
單機用戶模式。
字符界面的多用戶模式(不支持網絡)。
字符界面的多用戶模式。
未分配使用。
圖形界面的多用戶模式。
重啟。
1.9Linux 使用的進程間通信方式?
管道(pipe)、流管道(s_pipe)、有名管道(FIFO)
信號(signal)
消息隊列
共享內存
信號量
套接字(socket)
1.10Linux 有哪些系統日志文件?
比較重要的是 /var/log/messages 日志文件。
該日志文件是許多進程日志文件的匯總,從該文件可以看出任何入侵企圖或成功的入侵。另外,如果胖友的系統里有 ELK 日志集中收集,它也會被收集進去。
1.11Linux 系統安裝多個桌面環境有幫助嗎?
通常,一個桌面環境,如 KDE 或 Gnome,足以在沒有問題的情況下運行。盡管系統允許從一個環境切換到另一個環境,但這對用戶來說都是優先考慮的問題。有些程序在一個環境中工作而在另一個環境中無法工作,因此它也可以被視為選擇使用哪個環境的一個因素。
1.12什么是交換空間?
交換空間是 Linux 使用的一定空間,用于臨時保存一些并發運行的程序。當 RAM 沒有足夠的內存來容納正在執行的所有程序時,就會發生這種情況。
1.13什么是 root 帳戶
root 帳戶就像一個系統管理員帳戶,允許你完全控制系統。你可以在此處創建和維護用戶帳戶,為每個帳戶分配不同的權限。每次安裝 Linux 時都是默認帳戶。
1.14什么是 LILO?
LILO 是 Linux 的引導加載程序。它主要用于將 Linux 操作系統加載到主內存中,以便它可以開始運行。
1.15什么是 BASH?
BASH 是 Bourne Again SHell 的縮寫。它由 Steve Bourne 編寫,作為原始 Bourne Shell(由/ bin / sh 表示)的替代品。它結合了原始版本的 Bourne Shell 的所有功能,以及其他功能,使其更容易使用。從那以后,它已被改編為運行 Linux 的大多數系統的默認 shell。
1.16什么是 CLI?
命令行界面(英語:command-line interface,縮寫]:CLI)是在圖形用戶界面得到普及之前使用最為廣泛的用戶界面,它通常不支持鼠標,用戶通過鍵盤輸入指令,計算機接收到指令后,予以執行。也有人稱之為字符用戶界面(CUI)。
通常認為,命令行界面(CLI)沒有圖形用戶界面(GUI)那么方便用戶操作。因為,命令行界面的軟件通常需要用戶記憶操作的命令,但是,由于其本身的特點,命令行界面要較圖形用戶界面節約計算機系統的資源。在熟記命令的前提下,使用命令行界面往往要較使用圖形用戶界面的操作速度要快。所以,圖形用戶界面的操作系統中,都保留著可選的命令行界面。
1.17什么是 GUI?
圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指采用圖形方式顯示的計算機操作用戶界面。
圖形用戶界面是一種人與計算機通信的界面顯示格式,允許用戶使用鼠標等輸入設備操縱屏幕上的圖標或菜單選項,以選擇命令、調用文件、啟動程序或執行其它一些日常任務。與通過鍵盤輸入文本或字符命令來完成例行任務的字符界面相比,圖形用戶界面有許多優點。
1.18開源的優勢是什么?
開源允許你將軟件(包括源代碼)免費分發給任何感興趣的人。然后,人們可以添加功能,甚至可以調試和更正源代碼中的錯誤。它們甚至可以讓它運行得更好,然后再次自由地重新分配這些增強的源代碼。這最終使社區中的每個人受益。
1.19GNU 項目的重要性是什么?
這種所謂的自由軟件運動具有多種優勢,例如可以自由地運行程序以及根據你的需要自由學習和修改程序。它還允許你將軟件副本重新分發給其他人,以及自由改進軟件并將其發布給公眾。
2磁盤、目錄、文件
2.1簡單 Linux 文件系統?
在 Linux 操作系統中,所有被操作系統管理的資源,例如網絡接口卡、磁盤驅動器、打印機、輸入輸出設備、普通文件或是目錄都被看作是一個文件。
也就是說在 Linux 系統中有一個重要的概念:一切都是文件。其實這是 Unix 哲學的一個體現,而 Linux 是重寫 Unix 而來,所以這個概念也就傳承了下來。在 Unix 系統中,把一切資源都看作是文件,包括硬件設備。UNIX 系統把每個硬件都看成是一個文件,通常稱為設備文件,這樣用戶就可以用讀寫文件的方式實現對硬件的訪問。
Linux 支持 5 種文件類型,如下圖所示:
2.2Linux 的目錄結構是怎樣的?
這個問題,一般不會問。更多是實際使用時,需要知道。
Linux 文件系統的結構層次鮮明,就像一棵倒立的樹,最頂層是其根目錄:
常見目錄說明:
/bin:存放二進制可執行文件(ls,cat,mkdir 等),常用命令一般都在這里;
/etc:存放系統管理和配置文件;
/home:存放所有用戶文件的根目錄,是用戶主目錄的基點,比如用戶 user 的主目錄就是/home/user,可以用~user 表示;
/usr:用于存放系統應用程序/opt:額外安裝的可選應用程序包所放置的位置。一般情況下,我們可以把 tomcat 等都安裝到這里;
/proc:虛擬文件系統目錄,是系統內存的映射。可直接訪問這個目錄來獲取系統信息;
/root:超級用戶(系統管理員)的主目錄(特權階級 o);
/sbin: 存放二進制可執行文件,只有 root 才能訪問。這里存放的是系統管理員使用的系統級別的管理命令和程序。如 ifconfig 等;
/dev:用于存放設備文件;
/mnt:系統管理員安裝臨時文件系統的安裝點,系統提供這個目錄是讓用戶臨時掛載其他的文件系統;
/boot:存放用于系統引導時使用的各種文件;
/lib :存放著和系統運行相關的庫文件 ;
/tmp:用于存放各種臨時文件,是公用的臨時文件存儲點;
/var:用于存放運行時需要改變數據的文件,也是某些大文件的溢出區,比方說各種服務的日志文件(系統啟動日志等。)等;
/lost+found:這個目錄平時是空的,系統非正常關機而留下“無家可歸”的文件(windows 下叫什么.chk)就在這里。
2.3什么是 inode ?
一般來說,面試不會問 inode 。但是 inode 是一個重要概念,是理解 Unix/Linux 文件系統和硬盤儲存的基礎。
理解 inode,要從文件儲存說起。
文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector)。每個扇區儲存 512 字節(相當于 0.5KB)。
操作系統讀取硬盤的時候,不會一個個扇區地讀取,這樣效率太低,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。這種由多個扇區組成的"塊",是文件存取的最小單位。"塊"的大小,最常見的是 4KB,即連續八個 sector 組成一個 block。
文件數據都儲存在"塊"中,那么很顯然,我們還必須找到一個地方儲存文件的元信息,比如文件的創建者、文件的創建日期、文件的大小等等。這種儲存文件元信息的區域就叫做 inode,中文譯名為"索引節點"。
每一個文件都有對應的 inode,里面包含了與該文件有關的一些信息。
簡述 Linux 文件系統通過 i 節點把文件的邏輯結構和物理結構轉換的工作過程?
一般來說,面試官不太會問這個題目。
Linux 通過 inode 節點表將文件的邏輯結構和物理結構進行轉換。
· inode 節點是一個 64 字節長的表,表中包含了文件的相關信息,其中有文件的大小、文件所有者、文件的存取許可方式以及文件的類型等重要信息。在 inode 節點表中最重要的內容是磁盤地址表。在磁盤地址表中有 13 個塊號,文件將以塊號在磁盤地址表中出現的順序依次讀取相應的塊。
· Linux 文件系統通過把 inode 節點和文件名進行連接,當需要讀取該文件時,文件系統在當前目錄表中查找該文件名對應的項,由此得到該文件相對應的 inode 節點號,通過該 inode 節點的磁盤地址表把分散存放的文件物理塊連接成文件的邏輯結構。
2.4什么是硬鏈接和軟鏈接?
1)硬鏈接
由于 Linux 下的文件是通過索引節點(inode)來識別文件,硬鏈接可以認為是一個指針,指向文件索引節點的指針,系統并不為它重新分配 inode 。每添加一個一個硬鏈接,文件的鏈接數就加 1 。
不足:1)不可以在不同文件系統的文件間建立鏈接;2)只有超級用戶才可以為目錄創建硬鏈接。
2)軟鏈接
軟鏈接克服了硬鏈接的不足,沒有任何文件系統的限制,任何用戶可以創建指向目錄的符號鏈接。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網絡對文件進行鏈接。
不足:因為鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統就找不到了,而硬鏈接就沒有這個缺陷,你想怎么移就怎么移;還有它要系統分配額外的空間用于建立新的索引節點和保存原文件的路徑。
實際場景下,基本是使用軟鏈接。總結區別如下:
· 硬鏈接不可以跨分區,軟件鏈可以跨分區。
· 硬鏈接指向一個 inode 節點,而軟鏈接則是創建一個新的 inode 節點。
· 刪除硬鏈接文件,不會刪除原文件,刪除軟鏈接文件,會把原文件刪除。
2.5RAID 是什么?
RAID 全稱為獨立磁盤冗余陣列(Redundant Array of Independent Disks),基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、 容量巨大的硬盤。RAID 通常被用在服務器電腦上,使用完全相同的硬盤組成一個邏輯扇區,因此操作系統只會把它當做一個硬盤。
RAID 分為不同的等級,各個不同的等級均在數據可靠性及讀寫性能上做了不同的權衡。在實際應用中,可以依據自己的實際需求選擇不同的 RAID 方案。
當然,因為很多公司都使用云服務,大家很難接觸到 RAID 這個概念,更多的可能是普通云盤、SSD 云盤醬紫的概念。
3安全
3.1一臺 Linux 系統初始化環境后需要做一些什么安全工作?
1、添加普通用戶登陸,禁止 root 用戶登陸,更改 SSH 端口號。修改 SSH 端口不一定絕對哈。當然,如果要暴露在外網,建議改下。
2、服務器使用密鑰登陸,禁止密碼登陸。
3、開啟防火墻,關閉 SElinux ,根據業務需求設置相應的防火墻規則。
4、裝 fail2ban 這種防止 SSH 暴力破擊的軟件。
5、設置只允許公司辦公網出口 IP 能登陸服務器(看公司實際需要),也可以安裝 VPN 等軟件,只允許連接 VPN 到服務器上。
6、修改歷史命令記錄的條數為 10 條。
7、只允許有需要的服務器可以訪問外網,其它全部禁止。
8、做好軟件層面的防護。
(1) 設置 nginx_waf 模塊防止 SQL 注入。
(2) 把 Web 服務使用 www 用戶啟動,更改網站目錄的所有者和所屬組為 www
3.2什么叫 CC 攻擊?什么叫 DDOS 攻擊?
CC 攻擊,主要是用來攻擊頁面的,模擬多個用戶不停的對你的頁面進行訪問,從而使你的系統資源消耗殆盡。
DDOS 攻擊,中文名叫分布式拒絕服務攻擊,指借助服務器技術將多個計算機聯合起來作為攻擊平臺,來對一個或多個目標發動 DDOS 攻擊。
攻擊,即是通過大量合法的請求占用大量網絡資源,以達到癱瘓網絡的目的。
怎么預防 CC 攻擊和 DDOS 攻擊?
防 CC、DDOS 攻擊,這些只能是用硬件防火墻做流量清洗,將攻擊流量引入黑洞。
流量清洗這一塊,主要是買 ISP 服務商的防攻擊的服務就可以,機房一般有空余流量,我們一般是買服務,畢竟攻擊不會是持續長時間。
3.3什么是網站數據庫注入?
由于程序員的水平及經驗參差不齊,大部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷。
應用程序存在安全隱患。用戶可以提交一段數據庫查詢代碼,根據程序返回的結果,獲得某些他想得知的數據,這就是所謂的 SQL 注入。
SQL 注入,是從正常的 WWW 端口訪問,而且表面看起來跟一般的 Web 頁面訪問沒什么區別,如果管理員沒查看日志的習慣,可能被入侵很長時間都不會發覺。
如何過濾與預防?數據庫網頁端注入這種,可以考慮使用 nginx_waf 做過濾與預防。
Shell
/ Shell 腳本是什么? /
一個 Shell 腳本是一個文本文件,包含一個或多個命令。作為系統管理員,我們經常需要使用多個命令來完成一項任務,我們可以添加這些所有命令在一個文本文件(Shell 腳本)來完成這些日常工作任務。
什么是默認登錄 Shell ?
在 Linux 操作系統,"/bin/bash" 是默認登錄 Shell,是在創建用戶時分配的。
使用 chsh 命令可以改變默認的 Shell 。示例如下所示:
?
## chsh <用戶名> -s <新shell> ## chsh ThinkWon -s /bin/sh
?
在 Shell 腳本中,如何寫入注釋?
注釋可以用來描述一個腳本可以做什么和它是如何工作的。每一行注釋以 # 開頭。例子如下:
?
#!/bin/bash ## This is a command echo?“I am logged?in?as?$USER”
?
/ 語法級 /
可以在 Shell 腳本中使用哪些類型的變量?
在 Shell 腳本,我們可以使用兩種類型的變量:
系統定義變量:系統變量是由系統系統自己創建的。這些變量通常由大寫字母組成,可以通過 set 命令查看。
用戶定義變量:用戶變量由系統用戶來生成和定義,變量的值可以通過命令 "echo $<變量名>" 查看。
Shell 腳本中 $? 標記的用途是什么?
在寫一個 Shell 腳本時,如果你想要檢查前一命令是否執行成功,在 if 條件中使用 $? 可以來檢查前一命令的結束狀態。
· 如果結束狀態是 0 ,說明前一個命令執行成功。例如:
?
root@localhost:~## ls /usr/bin/shar ????/usr/bin/shar ????root@localhost:~## echo $? 0·?如果結束狀態不是0,說明命令執行失敗。例如:? ?
root@localhost:~##?ls?/usr/bin/share ls:?cannot access /usr/bin/share: No such?file?or?directory ????root@localhost:~##?echo?$? 2
?
Bourne Shell(bash) 中有哪些特殊的變量?
下面的表列出了 Bourne Shell 為命令行設置的特殊變量。
?
內建變量 解釋 $0 命令行中的腳本名字 $1 第一個命令行參數 $2 第二個命令行參數 ….. ……. $9 第九個命令行參數 $## 命令行參數的數量 $* 所有命令行參數,以空格隔開
?
如何取消變量或取消變量賦值?
unset 命令用于取消變量或取消變量賦值。語法如下所示:
## unset?<變量名>
Shell 腳本中 if 語法如何嵌套?
?
if?[ 條件 ] then 命令1 命令2 ….. else if?[ 條件 ] then 命令1 命令2 …. else 命令1 命令2 ….. fi fi
?
在 Shell 腳本中如何比較兩個數字?
在 if-then 中使用測試命令( -gt 等)來比較兩個數字。例如:
?
#!/bin/bash x=10 y=20 if?[?$x?-gt?$y?] then echo?“x is greater than y” else echo?“y is greater than x” fi
?
Shell 腳本中 case 語句的語法?
? 基礎語法如下:
case?變量?in 值1) 命令1 命令2 ….. 最后命令 !! 值2) 命令1 命令2 …… 最后命令 ;; esac
?
Shell 腳本中 for 循環語法?
? 基礎語法如下:
for?變量?in?循環列表 do 命令1 命令2 …. 最后命令 done
?
Shell 腳本中 while 循環語法?
基礎語法:
?
while?[ 條件 ] do 命令… done
?
do-while 語句的基本格式?
? do-while 語句類似于 while 語句,但檢查條件語句之前先執行命令(LCTT 譯注:意即至少執行一次。)。下面是用 do-while 語句的語法:
do { 命令 }?while?(條件)
?
Shell 腳本中 break 命令的作用?
break 命令一個簡單的用途是退出執行中的循環。我們可以在 while 和 until 循環中使用 break 命令跳出循環。
Shell 腳本中 continue 命令的作用?
continue 命令不同于 break 命令,它只跳出當前循環的迭代,而不是整個循環。continue 命令很多時候是很有用的,例如錯誤發生,但我們依然希望繼續執行大循環的時候。
如何使腳本可執行?
使用 chmod 命令來使腳本可執行。例子如下:chmod a+x myscript.sh 。
?
#!/bin/bash 的作用? #!/bin/bash 是 Shell 腳本的第一行,稱為釋伴(shebang)行。 ????這里 # 符號叫做 hash ,而 ! 叫做 bang。 ????它的意思是命令通過 /bin/bash 來執行。
?
如何調試 Shell 腳本?
? ?使用 -x' 數(sh -x myscript.sh)可以調試 Shell腳本。
??? 另一個種方法是使用 -nv 參數(sh -nv myscript.sh)。
如何將標準輸出和錯誤輸出同時重定向到同一位置?
方法一:2>&1 (如## ls /usr/share/doc > out.txt 2>&1 ) 。
方法二:&> (如## ls /usr/share/doc &> out.txt ) 。
在 Shell 腳本中,如何測試文件?
test 命令可以用來測試文件。基礎用法如下表格:
Test 用法
-d 文件名 如果文件存在并且是目錄,返回 true
-e 文件名 如果文件存在,返回 true
-f 文件名 如果文件存在并且是普通文件,返回 true
-r 文件名 如果文件存在并可讀,返回 true
-s 文件名 如果文件存在并且不為空,返回 true
-w 文件名 如果文件存在并可寫,返回 true
-x 文件名 如果文件存在并可執行,返回 true
在 Shell 腳本如何定義函數呢?
函數是擁有名字的代碼塊。當我們定義代碼塊,我們就可以在我們的腳本調用函數名字,該塊就會被執行。示例如下所示:
?
$ diskusage () { df -h ; } 譯注:下面是我給的shell函數語法,原文沒有 [ function ]?函數名?[()] { 命令; [return int;] }
?
如何讓 Shell 就腳本得到來自終端的輸入?
read 命令可以讀取來自終端(使用鍵盤)的數據。read 命令得到用戶的輸入并置于你給出的變量中。例子如下:
?
## vi /tmp/test.sh #!/bin/bash echo?‘Please enter your name’ read?name echo?“My Name is?$name” ## ./test.sh Please enter your name ThinkWon My Name is ThinkWon
?
如何執行算術運算?
有兩種方法來執行算術運算:
1、使用 expr 命令:## expr 5 + 2 。
2、用一個美元符號和方括號($[ 表達式 ]):test=$[16 + 4] ; test=$[16 + 4] 。
4編程題
4.1判斷一文件是不是字符設備文件,如果是將其拷貝到 /dev 目錄下?
?
#!/bin/bash read?-p?"Input file name: "?FILENAME if?[ -c?"$FILENAME"?];then ??cp?$FILENAME?/dev fi
?
4.2添加一個新組為 class1 ,然后添加屬于這個組的 30 個用戶,用戶名的形式為 stdxx ,其中 xx 從 01 到 30 ?
?
#!/bin/bash groupadd class1 for((i=1;i<31;i++)) do if?[?$i?-le 10 ];then ????????????????useradd -g class1 std0$i else ????????????????useradd -g class1 std$i fi done
?
4.3編寫 Shell 程序,實現自動刪除 50 個賬號的功能,賬號名為 stud1 至 stud50 ?
?
#!/bin/bash for((i=1;i<51;i++)) do ????????????????userdel -r stud$i done
?
4.44. 寫一個 sed 命令,修改 /tmp/input.txt 文件的內容?
要求:
·?刪除所有空行。
·?一行中,如果包含 “11111”,則在 “11111” 前面插入 “AAA”,在 “11111” 后面插入 “BBB” 。比如:將內容為 0000111112222 的一行改為 0000AAA11111BBB2222 。
[root@~]## cat -n /tmp/input.txt ?????1??000011111222 ?????2 ?????3??000011111222222 ?????4??11111000000222 ?????5 ?????6 ?????7??111111111111122222222222 ?????8??2211111111 ?????9??112222222 ????10??1122 ????11 ## 刪除所有空行命令 [root@~]## sed '/^$/d' /tmp/input.txt 000011111222 000011111222222 11111000000222 111111111111122222222222 2211111111 112222222 1122 ## 插入指定的字符 [root@~]## sed 's#(11111)#AAA1BBB#g' /tmp/input.txt 0000AAA11111BBB222 0000AAA11111BBB222222 AAA11111BBB000000222 AAA11111BBBAAA11111BBB11122222222222 22AAA11111BBB111 112222222 1122
?
5實戰
5.1如何選擇 Linux 操作系統版本?
一般來講,桌面用戶首選 Ubuntu ;服務器首選 RHEL 或 CentOS ,兩者中首選 CentOS 。根據具體要求:
安全性要求較高,則選擇 Debian 或者 FreeBSD 。
需要使用數據庫高級服務和電子郵件網絡應用的用戶可以選擇 SUSE 。
想要新技術新功能可以選擇 Feddora ,Feddora 是 RHEL 和 CentOS 的一個測試版和預發布版本。
【重點】根據現有狀況,絕大多數互聯網公司選擇 CentOS 。現在比較常用的是 6 系列,現在市場占有大概一半左右。另外的原因是 CentOS 更側重服務器領域,并且無版權約束。
CentOS 7 系列,也慢慢使用的會比較多了。
5.2如何規劃一臺 Linux 主機,步驟是怎樣
確定機器是做什么用的,比如是做 WEB 、DB、還是游戲服務器。不同的用途,機器的配置會有所不同。
確定好之后,就要定系統需要怎么安裝,默認安裝哪些系統、分區怎么做。
需要優化系統的哪些參數,需要創建哪些用戶等等的。
5.3請問當用戶反饋網站訪問慢,如何處理?
有哪些方面的因素會導致網站網站訪問慢?
1、服務器出口帶寬不夠用,本身服務器購買的出口帶寬比較小。
一旦并發量大的話,就會造成分給每個用戶的出口帶寬就小,訪問速度自然就會慢。跨運營商網絡導致帶寬縮減。例如,公司網站放在電信的網絡上,那么客戶這邊對接是長城寬帶或聯通,這也可能導致帶寬的縮減。
2、服務器負載過大,導致響應不過來
可以從兩個方面入手分析:分析系統負載,使用 w 命令或者 uptime 命令查看系統負載。如果負載很高,則使用 top 命令查看 CPU ,MEM 等占用情況,要么是 CPU 繁忙,要么是內存不夠。如果這二者都正常,再去使用 sar 命令分析網卡流量,分析是不是遭到了攻擊。一旦分析出問題的原因,采取對應的措施解決,如決定要不要殺死一些進程,或者禁止一些訪問等。
3、數據庫瓶頸
如果慢查詢比較多。那么就要開發人員或 DBA 協助進行 SQL 語句的優化。如果數據庫響應慢,考慮可以加一個數據庫緩存,如 Redis 等。然后,也可以搭建 MySQL 主從,一臺 MySQL 服務器負責寫,其他幾臺從數據庫負責讀。
4、網站開發代碼沒有優化好
例如 SQL 語句沒有優化,導致數據庫讀寫相當耗時。
針對網站訪問慢,怎么去排查?
1、首先要確定是用戶端還是服務端的問題。當接到用戶反饋訪問慢,那邊自己立即訪問網站看看,如果自己這邊訪問快,基本斷定是用戶端問題,就需要耐心跟客戶解釋,協助客戶解決問題。
不要上來就看服務端的問題。一定要從源頭開始,逐步逐步往下。
2、如果訪問也慢,那么可以利用瀏覽器的調試功能,看看加載那一項數據消耗時間過多,是圖片加載慢,還是某些數據加載慢。
3、針對服務器負載情況。查看服務器硬件(網絡、CPU、內存)的消耗情況。如果是購買的云主機,比如阿里云,可以登錄阿里云平臺提供各方面的監控,比如 CPU、內存、帶寬的使用情況。
4、如果發現硬件資源消耗都不高,那么就需要通過查日志,比如看看 MySQL 慢查詢的日志,看看是不是某條 SQL 語句查詢慢,導致網站訪問慢。
怎么去解決?
1、如果是出口帶寬問題,那么就申請加大出口帶寬。
2、如果慢查詢比較多,那么就要開發人員或 DBA 協助進行 SQL 語句的優化。
3、如果數據庫響應慢,考慮可以加一個數據庫緩存,如 Redis 等等。然后也可以搭建 MySQL 主從,一臺 MySQL 服務器負責寫,其他幾臺從數據庫負責讀。
4、申請購買 CDN 服務,加載用戶的訪問。
5、如果訪問還比較慢,那就需要從整體架構上進行優化咯。做到專角色專用,多臺服務器提供同一個服務。
5.4Linux 性能調優都有哪幾種方法?
1、Disabling daemons (關閉 daemons)。
2、Shutting down the GUI (關閉 GUI)。
3、Changing kernel parameters (改變內核參數)。
4、Kernel parameters (內核參數)。
5、Tuning the processor subsystem (處理器子系統調優)。
6、Tuning the memory subsystem (內存子系統調優)。
7、Tuning the file system (文件系統子系統調優)。
8、Tuning the network subsystem(網絡子系統調優)。
6文件管理命令
6.1cat 命令
cat 命令用于連接文件并打印到標準輸出設備上。cat 主要有三大功能:
1.一次顯示整個文件:
?
cat?filename2.從鍵盤創建一個文件:
cat?> filename只能創建新文件,不能編輯已有文件。
3.將幾個文件合并為一個文件:
cat?file1 file2 >?file-b 對非空輸出行號
-n 輸出所有行號
?
?實例:
(1)把 log2012.log 的文件內容加上行號后輸入 log2013.log 這個文件里
?
cat?-n log2012.log?log2013.log?
?
(2)把 log2012.log 和 log2013.log 的文件內容加上行號(空白行不加)之后將內容附加到 log.log 里
?
cat?-b?log2012.log?log2013.log?log.log(3)使用 here doc 生成新文件
cat >log.txt <? (4)反向列示 ?>Hello >World >PWD=$(pwd) >EOF ls -l log.txt cat log.txt Hello World PWD=/opt/soft/test
tac?log.txt PWD=/opt/soft/test World Hello
?
6.2chmod 命令
Linux/Unix 的文件調用權限分為三級 : 文件擁有者、群組、其他。利用 chmod 可以控制文件如何被他人所調用。
用于改變 linux 系統文件或目錄的訪問權限。用它控制文件或目錄的訪問權限。該命令有兩種用法。一種是包含字母和操作符表達式的文字設定法;另一種是包含數字的數字設定法。
每一文件或目錄的訪問權限都有三組,每組用三位表示,分別為文件屬主的讀、寫和執行權限;與屬主同組的用戶的讀、寫和執行權限;系統中其他用戶的讀、寫和執行權限。可使用 ls -l test.txt 查找。
以文件 log2012.log 為例:
?
-rw-r--r--?1?root?root?296K?11-13?06:03?log2012.log第一列共有 10 個位置,第一個字符指定了文件類型。在通常意義上,一個目錄也是一個文件。如果第一個字符是橫線,表示是一個非目錄的文件。如果是 d,表示是一個目錄。從第二個字符開始到第十個 9 個字符,3 個字符一組,分別表示了 3 組用戶對文件或者目錄的權限。權限字符用橫線代表空許可,r 代表只讀,w 代表寫,x 代表可執行。 常用參數:
-c 當發生改變時,報告處理信息 -R 處理指定目錄以及其子目錄下所有文件
?
權限范圍:
u :目錄或者文件的當前的用戶
g :目錄或者文件的當前的群組
o :除了目錄或者文件的當前用戶或群組之外的用戶或者群組
a :所有的用戶及群組
權限代號:
r :讀權限,用數字 4 表示
w :寫權限,用數字 2 表示
x :執行權限,用數字 1 表示
-:刪除權限,用數字 0 表示
s :特殊權限
實例:
(1)增加文件 t.log 所有用戶可執行權限
chmod a+x t.log
(2)撤銷原來所有的權限,然后使擁有者具有可讀權限,并輸出處理信息
chmod u=r t.log -c
(3)給 file 的屬主分配讀、寫、執行(7)的權限,給 file 的所在組分配讀、執行(5)的權限,給其他用戶分配執行(1)的權限
chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)
(4)將 test 目錄及其子目錄所有文件添加可讀權限
chmod u+r,g+r,o+r -R text/ -c
6.3chown 命令
chown 將指定文件的擁有者改為指定的用戶或組,用戶可以是用戶名或者用戶 ID;組可以是組名或者組 ID;文件是以空格分開的要改變權限的文件列表,支持通配符。
-c 顯示更改的部分的信息
-R 處理指定目錄及子目錄
實例:
(1)改變擁有者和群組 并顯示改變信息
chown -c mail:mail log2012.log
(2)改變文件群組
chown -c :mail t.log
(3)改變文件夾及子文件目錄屬主及屬組為 mail
chown -cR mail: test/
6.4cp 命令
將源文件復制至目標文件,或將多個源文件復制至目標目錄。
注意:命令行復制,如果目標文件已經存在會提示是否覆蓋,而在 shell 腳本中,如果不加 -i 參數,則不會提示,而是直接覆蓋!
-i 提示
-r 復制目錄及目錄內所有項目
-a 復制的文件與原文件時間一樣
實例:
(1)復制 a.txt 到 test 目錄下,保持原文件時間,如果原文件存在提示是否覆蓋。
cp -ai a.txt test
(2)為 a.txt 建議一個鏈接(快捷方式)
cp -s a.txt link_a.txt
6.5find 命令
用于在文件樹中查找文件,并作出相應的處理。
命令格式:
?
find?pathname -options?[-print?-exec -ok ...]命令參數:
pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄,用/來表示系統根目錄。 -print:find命令將匹配的文件輸出到標準輸出。 -exec:find命令對匹配的文件執行該參數所給出的shell命令。相應命令的形式為'command'?{ } ;,注意{ }和;之間的空格。 -ok:和-exec的作用相同,只不過以一種更為安全的模式來執行該參數所給出的shell命令,在執行每一個命令之前,都會給出提示,讓用戶來確定是否執行。
?
命令選項:
?
-name 按照文件名查找文件 -perm 按文件權限查找文件 -user 按文件屬主查找文件 -group 按照文件所屬的組來查找文件。 -type??查找某一類型的文件,諸如: b?- 塊設備文件 d - 目錄 c?- 字符設備文件 l?- 符號鏈接文件 p?- 管道文件 f?- 普通文件
?
實例:
(1)查找 48 小時內修改過的文件
find -atime -2
(2)在當前目錄查找 以 .log 結尾的文件。. 代表當前目錄
find ./ -name '*.log'
(3)查找 /opt 目錄下 權限為 777 的文件
find /opt -perm 777
(4)查找大于 1K 的文件
find -size +1000c
(5)查找等于 1000 字符的文件
find -size +1000c
-exec 參數后面跟的是 command 命令,它的終止是以 ; 為結束標志的,所以這句命令后面的分號是不可缺少的,考慮到各個系統中分號會有不同的意義,所以前面加反斜杠。{} 花括號代表前面 find 查找出來的文件名。
6.6head 命令
head 用來顯示檔案的開頭至標準輸出中,默認 head 命令打印其相應文件的開頭 10 行。
常用參數:
find -size +1000c
實例:
(1)顯示 1.log 文件中前 20 行
head 1.log -n 20
(2)顯示 1.log 文件前 20 字節
head -c 20 log2014.log
(3)顯示 t.log 最后 10 行
head -n -10 t.log
6.7less 命令
less 與 more 類似,但使用 less 可以隨意瀏覽文件,而 more 僅能向前移動,卻不能向后移動,而且 less 在查看之前不會加載整個文件。
常用命令參數:
?
-i 忽略搜索時的大小寫 -N 顯示每行的行號 -o <文件名> 將less 輸出的內容在指定文件中保存起來 -s 顯示連續空行為一行 /字符串:向下搜索“字符串”的功能 ?字符串:向上搜索“字符串”的功能 n:重復前一個搜索(與 / 或 ? 有關) N:反向重復前一個搜索(與 / 或 ? 有關) -x <數字> 將“tab”鍵顯示為規定的數字空格 b 向后翻一頁 d 向后翻半頁 h 顯示幫助界面 Q 退出less 命令 u 向前滾動半頁 y 向前滾動一行 空格鍵 滾動一行 回車鍵 滾動一頁 [pagedown]:向下翻動一頁 [pageup]:向上翻動一頁
?
實例:
(1)ps 查看進程信息并通過 less 分頁顯示
ps -aux | less -N
(2)查看多個文件
less 1.log 2.log
可以使用 n 查看下一個,使用 p 查看前一個。
6.8?ln 命令
功能是為文件在另外一個位置建立一個同步的鏈接,當在不同目錄需要該問題時,就不需要為每一個目錄創建同樣的文件,通過 ln 創建的鏈接(link)減少磁盤占用量。
鏈接分類:軟件鏈接及硬鏈接
軟鏈接:
1.軟鏈接,以路徑的形式存在。類似于 Windows 操作系統中的快捷方式
2.軟鏈接可以 跨文件系統 ,硬鏈接不可以
3.軟鏈接可以對一個不存在的文件名進行鏈接
4.軟鏈接可以對目錄進行鏈接
硬鏈接:
1.硬鏈接,以文件副本的形式存在。但不占用實際空間。
2.不允許給目錄創建硬鏈接
3.硬鏈接只有在同一個文件系統中才能創建
需要注意:
第一:ln 命令會保持每一處鏈接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;
第二:ln 鏈接又分軟鏈接和硬鏈接兩種,軟鏈接就是 ln –s 源文件 目標文件,它只會在你選定的位置上生成一個文件的鏡像,不會占用磁盤空間,硬鏈接 ln 源文件 目標文件,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,無論是軟鏈接還是硬鏈接,文件都保持同步變化。
第三:ln 指令用在鏈接文件或目錄,如同時指定兩個以上的文件或目錄,且最后的目的地是一個已經存在的目錄,則會把前面指定的所有文件或目錄復制到該目錄中。若同時指定多個文件或目錄,且最后的目的地并非是一個已存在的目錄,則會出現錯誤信息。
常用參數:
-b 刪除,覆蓋以前建立的鏈接
-s 軟鏈接(符號鏈接)
-v 顯示詳細處理過程
實例:
(1)給文件創建軟鏈接,并顯示操作信息
ln -sv source.log link.log
(2)給文件創建硬鏈接,并顯示操作信息
ln -v source.log link1.log
(3)給目錄創建軟鏈接
ln -sv /opt/soft/test/test3 /opt/soft/test/test5
6.9locate 命令
locate 通過搜尋系統內建文檔數據庫達到快速找到檔案,數據庫由 updatedb 程序來更新,updatedb 是由 cron daemon 周期性調用的。默認情況下 locate 命令在搜尋數據庫時比由整個由硬盤資料來搜尋資料來得快,但較差勁的是 locate 所找到的檔案若是最近才建立或 剛更名的,可能會找不到,在內定值中,updatedb 每天會跑一次,可以由修改 crontab 來更新設定值 (etc/crontab)。
locate 與 find 命令相似,可以使用如 *、? 等進行正則匹配查找
常用參數:
-l num(要顯示的行數)
-f 將特定的檔案系統排除在外,如將 proc 排除在外
-r 使用正則運算式做為尋找條件
實例:
(1)查找和 pwd 相關的所有文件(文件名中包含 pwd)
locate pwd
(2)搜索 etc 目錄下所有以 sh 開頭的文件
locate /etc/sh
(3)查找 /var 目錄下,以 reason 結尾的文件
locate -r '^/var.reason$'(其中.表示一個字符,表示任務多個;.*表示任意多個字符)
6.10more 命令
功能類似于 cat, more 會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示。
命令參數:
?
+n 從笫 n 行開始顯示 -n 定義屏幕大小為n行 +/pattern 在每個檔案顯示前搜尋該字串(pattern),然后從該字串前兩行之后開始顯示 -c???????從頂部清屏,然后顯示 -d 提示“Press space?to?continue,’q’?to?quit(按空格鍵繼續,按q鍵退出)”,禁用響鈴功能 -l????????忽略Ctrl+l(換頁)字符 -p???????通過清除窗口而不是滾屏來對文件進行換頁,與-c選項相似 -s 把連續的多個空行顯示為一行 -u???????把文件內容中的下畫線去掉
?
常用操作命令:
?
Enter 向下 n 行,需要定義。默認為?1?行 Ctrl+F 向下滾動一屏 空格鍵 向下滾動一屏 Ctrl+B 返回上一屏 = 輸出當前行的行號 :f?????輸出文件名和當前行的行號 V 調用vi編輯器 !命令 調用Shell,并執行命令 q 退出more
?
實例:
(1)顯示文件中從第 3 行起的內容
more +3 text.txt
(2)在所列出文件目錄詳細信息,借助管道使每次顯示 5 行
ls -l | more -5
按空格顯示下 5 行。
6.11mv 命令
移動文件或修改文件名,根據第二參數類型(如目錄,則移動文件;如為文件則重命令該文件)。
當第二個參數為目錄時,第一個參數可以是多個以空格分隔的文件或目錄,然后移動第一個參數指定的多個文件到第二個參數指定的目錄中。
實例:
(1)將文件 test.log 重命名為 test1.txt
mv test.log test1.txt
(2)將文件 log1.txt,log2.txt,log3.txt 移動到根的 test3 目錄中
mv llog1.txt log2.txt log3.txt /test3
(3)將文件 file1 改名為 file2,如果 file2 已經存在,則詢問是否覆蓋
mv -i log1.txt log2.txt
(4)移動當前文件夾下的所有文件到上一級目錄
mv * ../
6.12rm 命令
刪除一個目錄中的一個或多個文件或目錄,如果沒有使用 -r 選項,則 rm 不會刪除目錄。如果使用 rm 來刪除文件,通常仍可以將該文件恢復原狀。
rm [選項] 文件…
實例:
(1)刪除任何 .log 文件,刪除前逐一詢問確認:
rm -i *.log
(2)刪除 test 子目錄及子目錄中所有檔案刪除,并且不用一一確認:
rm -rf test
(3)刪除以 -f 開頭的文件
rm -- -f*
6.13tail 命令
用于顯示指定文件末尾內容,不指定文件時,作為輸入信息進行處理。常用查看日志文件。
常用參數:
-f 循環讀取(常用于查看遞增的日志文件)
-n<行數> 顯示行數(從后向前)
(1)循環讀取逐漸增加的文件內容
ping 127.0.0.1 > ping.log &
后臺運行:可使用 jobs -l 查看,也可使用 fg 將其移到前臺運行。
tail -f ping.log(查看日志)
6.14touch 命令
Linux touch 命令用于修改文件或者目錄的時間屬性,包括存取時間和更改時間。若文件不存在,系統會建立一個新的文件。
ls -l 可以顯示檔案的時間記錄。
語法
?
touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件或目錄…]
?
參數說明:
? ? a 改變檔案的讀取時間記錄。
??? m 改變檔案的修改時間記錄。
??? c 假如目的檔案不存在,不會建立新的檔案。與 --no-create 的效果一樣。
??? f 不使用,是為了與其他 unix 系統的相容性而保留。
??? r 使用參考檔的時間記錄,與 --file 的效果一樣。
??? d 設定時間與日期,可以使用各種不同的格式。
??? t 設定檔案的時間記錄,格式與 date 指令相同。
??? –no-create 不會建立新檔案。
??? –help 列出指令格式。
??? –version 列出版本訊息。
實例
使用指令"touch"修改文件"testfile"的時間屬性為當前系統時間,輸入如下命令:
?
$?touch testfile?#修改文件的時間屬性首先,使用ls命令查看testfile文件的屬性,如下所示:
$?ls -l testfile?#查看文件的時間屬性 #原來文件的修改時間為16:09 -rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile執行指令"touch"修改文件屬性以后,并再次查看該文件的時間屬性,如下所示:
$?touch testfile?#修改文件時間屬性為當前系統時間 $?ls -l testfile?#查看文件的時間屬性 #修改后文件的時間屬性為當前系統時間 -rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile使用指令"touch"時,如果指定的文件不存在,則將創建一個新的空白文件。例如,在當前目錄下,使用該指令創建一個空白文件"file",輸入如下命令:
$?touch file?#創建一個名為“file”的新的空白文件
?
6.15vim 命令
Vim 是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。
打開文件并跳到第 10 行:vim +10 filename.txt 。
打開文件跳到第一個匹配的行:vim +/search-term filename.txt 。
以只讀模式打開文件:vim -R /etc/passwd 。
基本上 vi/vim 共分為三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)。
簡單的說,我們可以將這三個模式想成底下的圖標來表示:
6.16whereis 命令
whereis 命令只能用于程序名的搜索,而且只搜索二進制文件(參數-b)、man 說明文件(參數-m)和源代碼文件(參數-s)。如果省略參數,則返回所有信息。whereis 及 locate 都是基于系統內建的數據庫進行搜索,因此效率很高,而 find 則是遍歷硬盤查找文件。
常用參數:
?
-b 定位可執行文件。 -m 定位幫助文件。 -s 定位源代碼文件。 -u 搜索默認路徑下除可執行文件、源代碼文件、幫助文件以外的其它文件。
?
實例:
(1)查找 locate 程序相關文件
whereis locate
(2)查找 locate 的源碼文件
whereis -s locate
(3)查找 lcoate 的幫助文件
whereis -m locate
6.17which 命令
在 linux 要查找某個文件,但不知道放在哪里了,可以使用下面的一些命令來搜索:
which 查看可執行文件的位置。
whereis 查看文件的位置。
locate 配合數據庫查看文件位置。
find 實際搜尋硬盤查詢文件名稱。
which 是在 PATH 就是指定的路徑中,搜索某個系統命令的位置,并返回第一個搜索結果。使用 which 命令,就可以看到某個系統命令是否存在,以及執行的到底是哪一個位置的命令。
常用參數:
-n 指定文件名長度,指定的長度必須大于或等于所有文件中最長的文件名。
實例:
(1)查看 ls 命令是否存在,執行哪個
which ls
(2)查看 which
which which
3)查看 cd
which cd(顯示不存在,因為 cd 是內建命令,而 which 查找顯示是 PATH 中的命令)
查看當前 PATH 配置:
echo $PATH
或使用 env 查看所有環境變量及對應值
7文檔編輯命令
7.1grep 命令
強大的文本搜索命令,grep(Global Regular Expression Print) 全局正則表達式搜索。
grep 的工作方式是這樣的,它在一個或多個文件中搜索字符串模板。如果模板包括空格,則必須被引用,模板后的所有字符串被看作文件名。搜索的結果被送到標準輸出,不影響原文件內容。
命令格式:
grep [option] pattern file|dir
常用參數:
-A n --after-context 顯示匹配字符后 n 行
-B n --before-context 顯示匹配字符前 n 行
-C n --context 顯示匹配字符前后 n 行
-c --count 計算符合樣式的列數
-i 忽略大小寫
-l 只列出文件內容符合指定的樣式的文件名稱
-f 從文件中讀取關鍵詞
-n 顯示匹配內容的所在文件中行數
-R 遞歸查找文件夾
grep 的規則表達式:
?
^ #錨定行的開始 如:'^grep'匹配所有以grep開頭的行。 $ #錨定行的結束 如:'grep$'匹配所有以grep結尾的行。 . #匹配一個非換行符的字符 如:'gr.p'匹配gr后接一個任意字符,然后是p。 * #匹配零個或多個先前字符 如:'*grep'匹配所有一個或多個空格后緊跟grep的行。 .* #一起用代表任意字符。 [] #匹配一個指定范圍內的字符,如'[Gg]rep'匹配Grep和grep。 [^] #匹配一個不在指定范圍內的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一個字母開頭,緊跟rep的行。 (..) #標記匹配字符,如'(love)',love被標記為1。 < #錨定單詞的開始,如:'?grep開頭的單詞的行。 > #錨定單詞的結束,如'grep>'匹配包含以grep結尾的單詞的行。 x{m} #重復字符x,m次,如:'0{5}'匹配包含5個o的行。 x{m,} #重復字符x,至少m次,如:'o{5,}'匹配至少有5個o的行。 x{m,n} #重復字符x,至少m次,不多于n次,如:'o{5,10}'匹配5--10個o的行。 w????#匹配文字和數字字符,也就是[A-Za-z0-9],如:'Gw*p'匹配以G后跟零個或多個文字或數字字符,然后是p。 W #w的反置形式,匹配一個或多個非單詞字符,如點號句號等。 b????#單詞鎖定符,如:?'grep'只匹配grep。
?
實例:
(1)查找指定進程
ps -ef | grep svn
(2)查找指定進程個數
ps -ef | grep svn -c
(3)從文件中讀取關鍵詞
cat test1.txt | grep -f key.log
(4)從文件夾中遞歸查找以 grep 開頭的行,并只列出文件
grep -lR '^grep' /tmp
(5)查找非 x 開關的行內容
grep '^[^x]' test.txt
(6)顯示包含 ed 或者 at 字符的內容行
grep -E 'ed|at' test.txt
7.2wc 命令
wc(word count)功能為統計指定的文件中字節數、字數、行數,并將統計結果輸出
命令格式:
wc [option] file..
命令參數:
-c 統計字節數
-l 統計行數
-m 統計字符數
-w 統計詞數,一個字被定義為由空白、跳格或換行字符分隔的字符串
實例:
(1)查找文件的 行數 單詞數 字節數 文件名
wc text.txt
結果:
7 8 70 test.txt
(2)統計輸出結果的行數
cat test.txt | wc -l
8磁盤管理命令
8.1cd 命令
cd(changeDirectory) 命令語法:
cd [目錄名]
說明:切換當前目錄至 dirName。
實例:
(1)進入目錄
cd /
(2)進入 “home” 目錄
cd ~
(3)進入上一次工作路徑
cd -
(4)把上個命令的參數作為 cd 參數使用。
cd !$
8.2df 命令
顯示磁盤空間使用情況。獲取硬盤被占用了多少空間,目前還剩下多少空間等信息,如果沒有文件名被指定,則所有當前被掛載的文件系統的可用空間將被顯示。默認情況下,磁盤空間將以 1KB 為單位進行顯示,除非環境變量 POSIXLY_CORRECT 被指定,那樣將以 512 字節為單位進行顯示:
-a 全部文件系統列表
-h 以方便閱讀的方式顯示信息
-i 顯示 inode 信息
-k 區塊為 1024 字節
-l 只顯示本地磁盤
-T 列出文件系統類型
實例:
(1)顯示磁盤使用情況
df -l
(2)以易讀方式列出所有文件系統及其類型
df -haT
8.3du 命令
du 命令也是查看使用空間的,但是與 df 命令不同的是 Linux du 命令是對文件和目錄磁盤使用的空間的查看:
命令格式:
du [選項] [文件]
常用參數:
-a 顯示目錄中所有文件大小
-k 以 KB 為單位顯示文件大小
-m 以 MB 為單位顯示文件大小
-g 以 GB 為單位顯示文件大小
-h 以易讀方式顯示文件大小
-s 僅顯示總計
-c 或--total 除了顯示個別目錄或文件的大小外,同時也顯示所有目錄或文件的總和
實例:
(1)以易讀方式顯示文件夾內及子文件夾大小
du -h scf/
(2)以易讀方式顯示文件夾內所有文件大小
du -ah scf/
(3)顯示幾個文件或目錄各自占用磁盤空間的大小,還統計它們的總和
du -hc test/ scf/
(4)輸出當前目錄下各個子目錄所使用的空間
du -hc --max-depth=1 scf/
8.4ls 命令
就是 list 的縮寫,通過 ls 命令不僅可以查看 linux 文件夾包含的文件,而且可以查看文件權限(包括目錄、文件夾、文件權限)查看目錄信息等等。
常用參數搭配:
ls -a 列出目錄所有文件,包含以.開始的隱藏文件
ls -A 列出除.及..的其它文件
ls -r 反序排列
ls -t 以文件修改時間排序
ls -S 以文件大小排序
ls -h 以易讀大小顯示
ls -l 除了文件名之外,還將文件的權限、所有者、文件大小等信息詳細列出來
實例:
(1) 按易讀方式按時間反序排序,并顯示文件詳細信息
ls -lhrt
(2) 按大小反序顯示文件詳細信息
ls -lhrt
(3)列出當前目錄中所有以"t"開頭的目錄的詳細內容
ls -l t*
(4) 列出文件絕對路徑(不包含隱藏文件)
ls | sed "s:^:pwd/:"
(5) 列出文件絕對路徑(包含隱藏文件)
find $pwd -maxdepth 1 | xargs ls -ld
8.5mkdir 命令
mkdir 命令用于創建文件夾。
可用選項:
-m: 對新建目錄設置存取權限,也可以用 chmod 命令設置;
-p: 可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項后,系統將自動建立好那些尚不在的目錄,即一次可以建立多個目錄。
實例:
(1)當前工作目錄下創建名為 t 的文件夾
mkdir t
(2)在 tmp 目錄下創建路徑為 test/t1/t 的目錄,若不存在,則創建:
mkdir -p /tmp/test/t1/t
8.6pwd 命令
pwd 命令用于查看當前工作目錄路徑。
實例:
(1)查看當前路徑
pwd
(2)查看軟鏈接的實際路徑
pwd -P
8.7rmdir 命令
從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須具有對其父目錄的寫權限。注意:不能刪除非空目錄
實例:
(1)當 parent 子目錄被刪除后使它也成為空目錄的話,則順便一并刪除:rmdir -p parent/child/child11
9九、網絡通訊命令
9.1ifconfig 命令
ifconfig 用于查看和配置 Linux 系統的網絡接口。查看所有網絡接口及其狀態:ifconfig -a 。使用 up 和 down 命令啟動或停止某個接口:ifconfig eth0 up 和 ifconfig eth0 down 。
9.2iptables 命令
iptables ,是一個配置 Linux 內核防火墻的命令行工具。功能非常強大,對于我們開發來說,主要掌握如何開放端口即可。例如:
把來源 IP 為 192.168.1.101 訪問本機 80 端口的包直接拒絕:iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT 。
開啟 80 端口,因為 web 對外都是這個端口
iptables -A INPUT -p tcp --dport 80 -j ACCEP
另外,要注意使用 iptables save 命令,進行保存。否則,服務器重啟后,配置的規則將丟失。
9.3netstat 命令
Linux netstat 命令用于顯示網絡狀態。利用 netstat 指令可讓你得知整個 Linux 系統的網絡情況。
語法
netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip]
參數說明:
-a 或–all 顯示所有連線中的 Socket。
-A<網絡類型>或–<網絡類型> 列出該網絡類型連線中的相關地址。
-c 或–continuous 持續列出網絡狀態。
-C 或–cache 顯示路由器配置的快取信息。
-e 或–extend 顯示網絡其他相關信息。
-F 或–fib 顯示 FIB。
-g 或–groups 顯示多重廣播功能群組組員名單。
-h 或–help 在線幫助。
-i 或–interfaces 顯示網絡界面信息表單。
-l 或–listening 顯示監控中的服務器的 Socket。
-M 或–masquerade 顯示偽裝的網絡連線。
-n 或–numeric 直接使用 IP 地址,而不通過域名服務器。
-N 或–netlink 或–symbolic 顯示網絡硬件外圍設備的符號連接名稱。
-o 或–timers 顯示計時器。
-p 或–programs 顯示正在使用 Socket 的程序識別碼和程序名稱。
-r 或–route 顯示 Routing Table。
-s 或–statistice 顯示網絡工作信息統計表。
-t 或–tcp 顯示 TCP 傳輸協議的連線狀況。
-u 或–udp 顯示 UDP 傳輸協議的連線狀況。
-v 或–verbose 顯示指令執行過程。
-V 或–version 顯示版本信息。
-w 或–raw 顯示 RAW 傳輸協議的連線狀況。
-x 或–unix 此參數的效果和指定"-A unix"參數相同。
–ip 或–inet 此參數的效果和指定"-A inet"參數相同。
實例
如何查看系統都開啟了哪些端口?
?
[root@centos6 ~ 13:20 #55]#?netstat?-lnp Active?Internet?connections?(only servers) Proto?Recv-Q?Send-Q?Local?Address???????????????Foreign?Address?????????????State???????PID/Program?name tcp????????0??????0?0.0.0.0:22??????????????????0.0.0.0:*?LISTEN??????1035/sshd tcp????????0??????0?:::22???????????????????????:::*?LISTEN??????1035/sshd udp????????0??????0?0.0.0.0:68??????????????????0.0.0.0:*?931/dhclient Active?UNIX?domain?sockets?(only servers) Proto?RefCnt?Flags???????Type???????State?????????I-Node?PID/Program?name????Path unix??2??????[ ACC ]?????STREAM?????LISTENING?????6825???1/init??????????????@/com/ubuntu/upstart unix??2??????[ ACC ]?????STREAM?????LISTENING?????8429???1003/dbus-daemon????/var/run/dbus/system_bus_socket
?
如何查看網絡連接狀況?
?
[root@centos6 ~ 13:22 #58]#?netstat?-an Active?Internet?connections?(servers?and?established) Proto?Recv-Q?Send-Q?Local?Address???????????????Foreign?Address?????????????State tcp????????0 0 0.0.0.0:22??????????????????0.0.0.0:*?LISTEN tcp????????0 0 192.168.147.130:22??????????192.168.147.1:23893?????????ESTABLISHED tcp????????0 0 :::22???????????????????????:::*?LISTEN udp????????0 0 0.0.0.0:68??????????????????0.0.0.0:*
?
如何統計系統當前進程連接數?
輸入命令 netstat -an | grep ESTABLISHED | wc -l 。
輸出結果 177 。一共有 177 連接數。
用 netstat 命令配合其他命令,按照源 IP 統計所有到 80 端口的 ESTABLISHED 狀態鏈接的個數?
嚴格來說,這個題目考驗的是對 awk 的使用。
首先,使用 netstat -an|grep ESTABLISHED 命令。結果如下:
?
tcp????????0 0 120.27.146.122:80???????113.65.18.33:62721??????ESTABLISHED tcp????????0 0 120.27.146.122:80???????27.43.83.115:47148??????ESTABLISHED tcp????????0 0 120.27.146.122:58838????106.39.162.96:443???????ESTABLISHED tcp????????0 0 120.27.146.122:52304????203.208.40.121:443??????ESTABLISHED tcp????????0 0 120.27.146.122:33194????203.208.40.122:443??????ESTABLISHED tcp????????0 0 120.27.146.122:53758????101.37.183.144:443??????ESTABLISHED tcp????????0 0 120.27.146.122:27017????23.105.193.30:50556?????ESTABLISHED
?
9.4ping 命令
Linux ping 命令用于檢測主機。
執行 ping 指令會使用 ICMP 傳輸協議,發出要求回應的信息,若遠端主機的網絡功能沒有問題,就會回應該信息,因而得知該主機運作正常。
指定接收包的次數
ping -c 2 www.baidu.com
9.5telnet 命令
Linux telnet 命令用于遠端登入。執行 telnet 指令開啟終端機階段作業,并登入遠端主機。
語法
?
telnet [-8acdEfFKLrx][-b<主機別名>][-e<脫離字符>][-k<域名>][-l<用戶名稱>][-n<記錄文件>][-S<服務類型>][-X<認證形態>][主機名稱或IP地址<通信端口>]
參數說明:
??? -8 允許使用8位字符資料,包括輸入與輸出。 ??? -a 嘗試自動登入遠端系統。 ??? -b<主機別名> 使用別名指定遠端主機名稱。 ??? -c 不讀取用戶專屬目錄里的.telnetrc文件。 ??? -d 啟動排錯模式。 ??? -e<脫離字符> 設置脫離字符。 ??? -E 濾除脫離字符。 ??? -f 此參數的效果和指定"-F"參數相同。 ??? -F 使用Kerberos V5認證時,加上此參數可把本地主機的認證數據上傳到遠端主機。 ??? -k<域名> 使用Kerberos認證時,加上此參數讓遠端主機采用指定的領域名,而非該主機的域名。 ??? -K 不自動登入遠端主機。 ??? -l<用戶名稱> 指定要登入遠端主機的用戶名稱。 ??? -L 允許輸出8位字符資料。 ??? -n<記錄文件> 指定文件記錄相關信息。 ??? -r 使用類似rlogin指令的用戶界面。 ??? -S<服務類型> 設置telnet連線所需的IP TOS信息。 ??? -x 假設主機有支持數據加密的功能,就使用它。 ??? -X<認證形態> 關閉指定的認證形態。
實例:
?
登錄遠程主機
?
# 登錄IP為 192.168.0.5?的遠程主機 telnet?192.168.0.5
?
10系統管理命令
10.1date 命令
顯示或設定系統的日期與時間。
命令參數:
-d<字符串> 顯示字符串所指的日期與時間。字符串前后必須加上雙引號。
-s<字符串> 根據字符串來設置日期與時間。字符串前后必須加上雙引號。
-u 顯示 GMT。
%H 小時(00-23)
%I 小時(00-12)
%M 分鐘(以 00-59 來表示)
%s 總秒數。起算時間為 1970-01-01 0000 UTC。
%S 秒(以本地的慣用法來表示)
%a 星期的縮寫。
%A 星期的完整名稱。
%d 日期(以 01-31 來表示)。
%D 日期(含年月日)。
%m 月份(以 01-12 來表示)。
%y 年份(以 00-99 來表示)。
%Y 年份(以四位數來表示)。
實例:
(1)顯示下一天
date +%Y%m%d --date="+1 day" //顯示下一天的日期
(2)-d 參數使用
date -d "nov 22" 今年的 11 月 22 日是星期三
date -d '2 weeks' 2 周后的日期
date -d 'next monday' (下周一的日期)
date -d next-day +%Y%m%d(明天的日期)或者:date -d tomorrow +%Y%m%d
date -d last-day +%Y%m%d(昨天的日期) 或者:date -d yesterday +%Y%m%d
date -d last-month +%Y%m(上個月是幾月)
date -d next-month +%Y%m(下個月是幾月)
10.2free 命令
顯示系統內存使用情況,包括物理內存、交互區內存(swap)和內核緩沖區內存。
命令參數:
-b 以 Byte 顯示內存使用情況
-k 以 kb 為單位顯示內存使用情況
-m 以 mb 為單位顯示內存使用情況
-g 以 gb 為單位顯示內存使用情況
-s<間隔秒數> 持續顯示內存
-t 顯示內存使用總合
實例:
(1)顯示內存使用情況
?
free free?-k free?-m(2)以總和的形式顯示內存的使用信息
free?-t(3)周期性查詢內存使用情況
free?-s?10
?
10.3kill 命令
發送指定的信號到相應進程。不指定型號將發送 SIGTERM(15)終止指定進程。如果仍無法終止該程序可用"-KILL" 參數,其發送的信號為 SIGKILL(9) ,將強制結束進程,使用 ps 命令或者 jobs 命令可以查看進程號。root 用戶將影響用戶的進程,非 root 用戶只能影響自己的進程。
常用參數:
-l 信號,若果不加信號的編號參數,則使用“-l”參數會列出全部的信號名稱
-a 當處理當前進程時,不限制命令名和進程號的對應關系
-p 指定 kill 命令只打印相關進程的進程號,而不發送任何信號
-s 指定發送信號
-u 指定用戶
實例:
(1)先使用 ps 查找進程 pro1,然后用 kill 殺掉
kill -9 $(ps -ef | grep pro1)
10.4. ps 命令
ps(process status),用來查看當前運行的進程狀態,一次性查看,如果需要動態連續結果使用 top
linux 上進程有 5 種狀態:
運行(正在運行或在運行隊列中等待)
中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)
僵死(進程已終止, 但進程描述符存在, 直到父進程調用 wait4()系統調用后釋放)
停止(進程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信號后停止運行運行)
ps 工具標識進程的 5 種狀態碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 運行 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (”zombie”) process
命令參數:
-A 顯示所有進程
a 顯示所有進程
-a 顯示同一終端下所有進程
c 顯示進程真實名稱
e 顯示環境變量
f 顯示進程間的關系
r 顯示當前終端運行的進程
-aux 顯示所有包含其它使用的進程
實例:
(1)顯示當前所有進程環境變量及進程間關系
ps -ef
(2)顯示當前所有進程
ps -A
(3)與 grep 聯用查找某進程
ps -aux | grep apache
(4)找出與 cron 與 syslog 這兩個服務有關的 PID 號碼
ps aux | grep '(cron|syslog)'
10.5rpm 命令
Linux rpm 命令用于管理套件。
rpm(redhat package manager) 原本是 Red Hat Linux 發行版專門用來管理 Linux 各項套件的程序,由于它遵循 GPL 規則且功能強大方便,因而廣受歡迎。逐漸受到其他發行版的采用。RPM 套件管理方式的出現,讓 Linux 易于安裝,升級,間接提升了 Linux 的適用度。
?
#?查看系統自帶jdk rpm -qa | grep jdk #?刪除系統自帶jdk rpm -e --nodeps 查看jdk顯示的數據 #?安裝jdk rpm -ivh jdk-7u80-linux-x64.rpm
?
10.6top 命令
顯示當前系統正在執行的進程的相關信息,包括進程 ID、內存占用率、CPU 占用率等
常用參數:
-c 顯示完整的進程命令
-s 保密模式
-p <進程號> 指定進程顯示
-n <次數>循環顯示次數
實例:
?
top?-?14:06:23?up?70?days, 16:44, 2?users,?load?average: 1.25, 1.32, 1.35 Tasks: 206?total, 1?running, 205?sleeping, 0?stopped, 0?zombie Cpu(s): 5.9%us, 3.4%sy, 0.0%ni, 90.4%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 32949016k?total, 14411180k?used, 18537836k?free, 169884k?buffers Swap: 32764556k?total, 0k?used, 32764556k?free, 3612636k?cached PID?USER??????PR??NI??VIRT??RES??SHR?S?%CPU?%MEM????TIME+?COMMAND 28894?root??????22 0 1501m?405m??10m?S?52.2??1.3???2534:16?java? 前五行是當前系統情況整體的統計信息區。第一行,任務隊列信息,同 uptime 命令的執行結果,具體參數說明情況如下:
?
1423 — 當前系統時間
up 70 days, 16:44 — 系統已經運行了 70 天 16 小時 44 分鐘(在這期間系統沒有重啟過的吆!)
2 users — 當前有 2 個用戶登錄系統
load average: 1.15, 1.42, 1.44 — load average 后面的三個數分別是 1 分鐘、5 分鐘、15 分鐘的負載情況。
load average 數據是每隔 5 秒鐘檢查一次活躍的進程數,然后按特定算法計算出的數值。如果這個數除以邏輯 CPU 的數量,結果高于 5 的時候就表明系統在超負荷運轉了。
第二行,Tasks — 任務(進程),具體信息說明如下:
系統現在共有 206 個進程,其中處于運行中的有 1 個,205 個在休眠(sleep),stoped 狀態的有 0 個,zombie 狀態(僵尸)的有 0 個。
第三行,cpu 狀態信息,具體屬性說明如下:
?
5.9%us?— 用戶空間占用CPU的百分比。 3.4%?sy?— 內核空間占用CPU的百分比。 0.0%?ni?— 改變過優先級的進程占用CPU的百分比 90.4%?id?— 空閑CPU百分比 0.0%?wa?—?IO等待占用CPU的百分比 0.0%?hi?— 硬中斷(Hardware?IRQ)占用CPU的百分比 0.2%?si?— 軟中斷(Software?Interrupts)占用CPU的百分比備注:在這里CPU的使用比率和windows概念不同,需要理解linux系統用戶空間和內核空間的相關知識!
?
第四行,內存狀態,具體信息如下:
?
32949016k?total — 物理內存總量(32GB) 14411180k?used — 使用中的內存總量(14GB) 18537836k?free — 空閑內存總量(18GB) 169884k?buffers?— 緩存的內存量 (169M)第五行,swap交換分區信息,具體信息說明如下:
32764556k total — 交換區總量(32GB) 0k used — 使用的交換區總量(0K) 32764556k?free?— 空閑交換區總量(32GB) 3612636k cached — 緩沖的交換區總量(3.6GB)
?
第六行,空行。
第七行以下:各進程(任務)的狀態監控,項目列信息說明如下:
PID — 進程id USER — 進程所有者 PR — 進程優先級 NI — nice值。負值表示高優先級,正值表示低優先級 VIRT — 進程使用的虛擬內存總量,單位kb。VIRT=SWAP+RES RES — 進程使用的、未被換出的物理內存大小,單位kb。RES=CODE+DATA SHR — 共享內存大小,單位kb S — 進程狀態。D=不可中斷的睡眠狀態 R=運行 S=睡眠 T=跟蹤/停止 Z=僵尸進程 %CPU — 上次更新到現在的CPU時間占用百分比 %MEM — 進程使用的物理內存百分比 TIME+ — 進程使用的CPU時間總計,單位1/100秒 COMMAND — 進程名稱(命令名/命令行)
?
10.7yum 命令
yum( Yellow dog Updater, Modified)是一個在 Fedora 和 RedHat 以及 SUSE 中的 Shell 前端軟件包管理器。
基於 RPM 包管理,能夠從指定的服務器自動下載 RPM 包并且安裝,可以自動處理依賴性關系,并且一次安裝所有依賴的軟體包,無須繁瑣地一次次下載、安裝。
yum 提供了查找、安裝、刪除某一個、一組甚至全部軟件包的命令,而且命令簡潔而又好記。
1.列出所有可更新的軟件清單命令:yum check-update
2.更新所有軟件命令:yum update
3.僅安裝指定的軟件命令:yum install
4.僅更新指定的軟件命令:yum update
5.列出所有可安裝的軟件清單命令:yum list
6.刪除軟件包命令:yum remove
7.查找軟件包 命令:yum search
? ?8.清除緩存命令:
??????? yum clean packages: 清除緩存目錄下的軟件包
??????? yum clean headers: 清除緩存目錄下的 headers
??????? yum clean oldheaders: 清除緩存目錄下舊的 headers
??????? yum clean, yum clean all (= yum clean packages; yum clean oldheaders) :清除緩存目錄下的軟件包及舊的headers
?
實例
安裝 pam-devel
11備份壓縮命令
11.1bzip2 命令
創建 *.bz2 壓縮文件:bzip2 test.txt 。
解壓 *.bz2 文件:bzip2 -d test.txt.bz2 。
11.2
gzip 命令
創建一個 *.gz 的壓縮文件:gzip test.txt 。
解壓 *.gz 文件:gzip -d test.txt.gz 。
顯示壓縮的比率:gzip -l *.gz 。
11.3tar 命令
用來壓縮和解壓文件。tar 本身不具有壓縮功能,只具有打包功能,有關壓縮及解壓是調用其它的功能來完成。
弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件通過一些壓縮算法變成一個小文件
常用參數:
?
-c 建立新的壓縮文件 -f 指定壓縮文件 -r 添加文件到已經壓縮文件包中 -u 添加改了和現有的文件到壓縮包中 -x 從壓縮包中抽取文件 -t 顯示壓縮文件中的內容 -z 支持gzip壓縮 -j 支持bzip2壓縮 -Z 支持compress解壓文件 -v 顯示操作過程
?
有關 gzip 及 bzip2 壓縮:
gzip
實例:
壓縮 gzip fileName .tar.gz 和.tgz
解壓:gunzip filename.gz 或 gzip -d filename.gz
對應:tar zcvf filename.tar.gz tar zxvf filename.tar.gz
bz2
實例:
壓縮 bzip2 -z filename .tar.bz2
解壓:bunzip filename.bz2 或 bzip -d filename.bz2
對應:tar jcvf filename.tar.gz
解壓:tar jxvf filename.tar.bz2
實例:
(1)將文件全部打包成 tar 包
?
tar -cvf?log.tar?1.log,2.log?或tar -cvf?log.*
(2)將 /etc 下的所有文件及目錄打包到指定目錄,并使用 gz 壓縮 ?
tar?-zcvf /tmp/etc.tar.gz /etc? (3)查看剛打包的文件內容(一定加z,因為是使用 gzip 壓縮的) ?
tar?-ztvf /tmp/etc.tar.gz(4)要壓縮打包 /home, /etc ,但不要 /home/dmtsai ?
tar?--exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc
?
11.44. unzip 命令
解壓 *.zip 文件:unzip test.zip
查看 *.zip 文件的內容:unzip -l jasper.zip
評論
查看更多