全網最新、最全Linux面試題(2020版)!

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

導讀:本文整理了最新的Linux面試題,近3萬字,約100道題,分享至此,但願對你們有幫助。前端

1、Linux 概述

一、什麼是Linux?java

Linux是一套無償使用和自由傳播的類Unix操做系統,是一個基於POSIX和Unix的多用戶、多任務、支持多線程和多CPU的操做系統。它能運行主要的Unix工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡爲核心的設計思想,是一個性能穩定的多用戶網絡操做系統。node

二、Unix和Linux有什麼區別?linux

Linux和Unix都是功能強大的操做系統,都是應用普遍的服務器操做系統,有不少類似之處,甚至有一部分人錯誤地認爲Unix和Linux操做系統是同樣的,然而,事實並不是如此,如下是二者的區別。nginx

  • 開源性
    Linux是一款開源操做系統,不須要付費,便可使用;Unix是一款對源碼實行知識產權保護的傳統商業軟件,使用須要付費受權使用。程序員

  • 跨平臺性
    Linux操做系統具備良好的跨平臺性能,可運行在多種硬件平臺上;Unix操做系統跨平臺性能較弱,大多需與硬件配套使用。web

  • 可視化界面
    Linux除了進行命令行操做,還有窗體管理系統;Unix只是命令行下的系統。面試

  • 硬件環境
    Linux操做系統對硬件的要求較低,安裝方法更易掌握;Unix對硬件要求比較苛刻,安裝難度較大。正則表達式

  • 用戶羣體
    Linux的用戶羣體很普遍,我的和企業都可使用;Unix的用戶羣體比較窄,可能是安全性要求高的大型企業使用,如銀行、電信部門等,或者Unix硬件廠商使用,如Sun等。算法

相比於Unix操做系統,Linux操做系統更受廣大計算機愛好者的喜好,主要緣由是Linux操做系統具備Unix操做系統的所有功能,而且可以在普通PC計算機上實現所有的Unix特性,開源免費的特性,更容易普及使用!

三、什麼是 Linux 內核?

Linux 系統的核心是內核。內核控制着計算機系統上的全部硬件和軟件,在必要時分配硬件,並根據須要執行軟件。

系統內存管理
應用程序管理
硬件設備管理
文件系統管理

四、Linux的基本組件是什麼?

就像任何其餘典型的操做系統同樣,Linux擁有全部這些組件:內核,shell和GUI,系統實用程序和應用程序。Linux比其餘操做系統更具優點的是每一個方面都附帶其餘功能,全部代碼均可以避免費下載。

五、Linux 的體系結構

從大的方面講,Linux 體系結構能夠分爲兩塊:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

用戶空間(User Space) :用戶空間又包括用戶的應用程序(User Applications)、C 庫(C Library) 。

內核空間(Kernel Space) :內核空間又包括系統調用接口(System Call Interface)、內核(Kernel)、平臺架構相關的代碼(Architecture-Dependent Kernel Code) 。

爲何 Linux 體系結構要分爲用戶空間和內核空間的緣由?

一、現代 CPU 實現了不一樣的工做模式,不一樣模式下 CPU 能夠執行的指令和訪問的寄存器不一樣。
二、Linux 從 CPU 的角度出發,爲了保護內核的安全,把系統分紅了兩部分。

用戶空間和內核空間是程序執行的兩種不一樣的狀態,咱們能夠經過兩種方式完成用戶空間到內核空間的轉移:1)系統調用;2)硬件中斷。

六、BASH和DOS之間的基本區別是什麼?

BASH和DOS控制檯之間的主要區別在於3個方面:

  1. BASH命令區分大小寫,而DOS命令則不區分;

  2. 在BASH下,/ character是目錄分隔符,\做爲轉義字符。在DOS下,/用做命令參數分隔符,\是目錄分隔符

  3. OS遵循命名文件中的約定,即8個字符的文件名後跟一個點,擴展名爲3個字符。BASH沒有遵循這樣的慣例。

七、Linux 開機啓動過程?

  • 主機加電自檢,加載 BIOS 硬件信息。

  • 讀取 MBR 的引導文件(GRUB、LILO)。

  • 引導 Linux 內核。

  • 運行第一個進程 init (進程號永遠爲 1 )。

  • 進入相應的運行級別。

  • 運行終端,輸入用戶名和密碼。

8. Linux系統缺省的運行級別?

  • 關機

  • 單機用戶模式

  • 字符界面的多用戶模式(不支持網絡)

  • 字符界面的多用戶模式

  • 未分配使用

  • 圖形界面的多用戶模式

  • 重啓

九、Linux 使用的進程間通訊方式?

管道(pipe)、流管道(s_pipe)、有名管道(FIFO)。
信號(signal) 。
消息隊列。
共享內存。
信號量。
套接字(socket) 。

十、Linux 有哪些系統日誌文件?

比較重要的是 /var/log/messages 日誌文件。

該日誌文件是許多進程日誌文件的彙總,從該文件能夠看出任何***企圖或成功的***。另外,若是胖友的系統裏有 ELK 日誌集中收集,它也會被收集進去。

十一、Linux系統安裝多個桌面環境有幫助嗎?

一般,一個桌面環境,如KDE或Gnome,足以在沒有問題的狀況下運行。儘管系統容許從一個環境切換到另外一個環境,但這對用戶來講都是優先考慮的問題。有些程序在一個環境中工做而在另外一個環境中沒法工做,所以它也能夠被視爲選擇使用哪一個環境的一個因素。

十二、什麼是交換空間?

交換空間是Linux使用的必定空間,用於臨時保存一些併發運行的程序。當RAM沒有足夠的內存來容納正在執行的全部程序時,就會發生這種狀況。

1三、什麼是root賬戶?

root賬戶就像一個系統管理員賬戶,容許你徹底控制系統。你能夠在此處建立和維護用戶賬戶,爲每一個賬戶分配不一樣的權限。每次安裝Linux時都是默認賬戶。

1四、什麼是LILO?

LILO是Linux的引導加載程序。它主要用於將Linux操做系統加載到主內存中,以便它能夠開始運行。

1五、什麼是BASH?

BASH是Bourne Again SHell的縮寫。它由Steve Bourne編寫,做爲原始Bourne Shell(由/ bin / sh表示)的替代品。它結合了原始版本的Bourne Shell的全部功能,以及其餘功能,使其更容易使用。從那之後,它已被改編爲運行Linux的大多數系統的默認shell。

1六、什麼是CLI?

命令行界面(英語:command-line interface,縮寫]:CLI)是在圖形用戶界面獲得普及以前使用最爲普遍的用戶界面,它一般不支持鼠標,用戶經過鍵盤輸入指令,計算機接收到指令後,予以執行。也有人稱之爲字符用戶界面(CUI)。

一般認爲,命令行界面(CLI)沒有圖形用戶界面(GUI)那麼方便用戶操做。由於,命令行界面的軟件一般須要用戶記憶操做的命令,可是,因爲其自己的特色,命令行界面要較圖形用戶界面節約計算機系統的資源。在熟記命令的前提下,使用命令行界面每每要較使用圖形用戶界面的操做速度要快。因此,圖形用戶界面的操做系統中,都保留着可選的命令行界面。

1七、什麼是GUI?

圖形用戶界面(Graphical User Interface,簡稱 GUI,又稱圖形用戶接口)是指採用圖形方式顯示的計算機操做用戶界面。

圖形用戶界面是一種人與計算機通訊的界面顯示格式,容許用戶使用鼠標等輸入設備操縱屏幕上的圖標或菜單選項,以選擇命令、調用文件、啓動程序或執行其它一些平常任務。與經過鍵盤輸入文本或字符命令來完成例行任務的字符界面相比,圖形用戶界面有許多優勢。

1八、開源的優點是什麼?

開源容許你將軟件(包括源代碼)免費分發給任何感興趣的人。而後,人們能夠添加功能,甚至能夠調試和更正源代碼中的錯誤。它們甚至可讓它運行得更好,而後再次自由地從新分配這些加強的源代碼。這最終使社區中的每一個人受益。

1九、GNU項目的重要性是什麼?

這種所謂的自由軟件運動具備多種優點,例如能夠自由地運行程序以及根據你的須要自由學習和修改程序。它還容許你將軟件副本從新分發給其餘人,以及自由改進軟件並將其發佈給公衆。

2、磁盤、目錄、文件

一、簡單 Linux 文件系統?

在 Linux 操做系統中,全部被操做系統管理的資源,例如網絡接口卡、磁盤驅動器、打印機、輸入輸出設備、普通文件或是目錄都被看做是一個文件。

也就是說在 Linux 系統中有一個重要的概念:一切都是文件。其實這是 Unix 哲學的一個體現,而 Linux 是重寫 Unix 而來,因此這個概念也就傳承了下來。在 Unix 系統中,把一切資源都看做是文件,包括硬件設備。UNIX系統把每一個硬件都當作是一個文件,一般稱爲設備文件,這樣用戶就能夠用讀寫文件的方式實現對硬件的訪問。

Linux 支持 5 種文件類型,以下圖所示:文件類型

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

二、Linux 的目錄結構是怎樣的?

這個問題,通常不會問。更可能是實際使用時,須要知道。

Linux 文件系統的結構層次鮮明,就像一棵倒立的樹,最頂層是其根目錄:
Linux的目錄結構

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

常見目錄說明:

  • /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)就在這裏。

三、什麼是 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 節點的磁盤地址表把分散存放的文件物理塊鏈接成文件的邏輯結構。

四、什麼是硬連接和軟連接?

1)硬連接

因爲 Linux 下的文件是經過索引節點(inode)來識別文件,硬連接能夠認爲是一個指針,指向文件索引節點的指針,系統並不爲它從新分配 inode 。每添加一個一個硬連接,文件的連接數就加 1 。

不足:

  • 不能夠在不一樣文件系統的文件間創建連接;

  • 只有超級用戶才能夠爲目錄建立硬連接。

2)軟連接

軟連接克服了硬連接的不足,沒有任何文件系統的限制,任何用戶能夠建立指向目錄的符號連接。於是如今更爲普遍使用,它具備更大的靈活性,甚至能夠跨越不一樣機器、不一樣網絡對文件進行連接。

不足:

由於連接文件包含有原文件的路徑信息,因此當原文件從一個目錄下移到其餘目錄中,再訪問連接文件,系統就找不到了,而硬連接就沒有這個缺陷,你想怎麼移就怎麼移;還有它要系統分配額外的空間用於創建新的索引節點和保存原文件的路徑。

實際場景下,基本是使用軟連接。總結區別以下:

  • 硬連接不能夠跨分區,軟件鏈能夠跨分區。

  • 硬連接指向一個 inode 節點,而軟連接則是建立一個新的 inode 節點。

  • 刪除硬連接文件,不會刪除原文件,刪除軟連接文件,會把原文件刪除。

5. RAID 是什麼?

RAID 全稱爲獨立磁盤冗餘陣列(Redundant Array of Independent Disks),基本思想就是把多個相對便宜的硬盤組合起來,成爲一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、 容量巨大的硬盤。RAID 一般被用在服務器電腦上,使用徹底相同的硬盤組成一個邏輯扇區,所以操做系統只會把它當作一個硬盤。

RAID 分爲不一樣的等級,各個不一樣的等級均在數據可靠性及讀寫性能上作了不一樣的權衡。在實際應用中,能夠依據本身的實際需求選擇不一樣的 RAID 方案。

固然,由於不少公司都使用雲服務,你們很難接觸到 RAID 這個概念,更多的多是普通雲盤、SSD 雲盤醬紫的概念。

3、安全

一、一臺 Linux 系統初始化環境後須要作一些什麼安全工做?

  • 添加普通用戶登錄,禁止 root 用戶登錄,更改 SSH 端口號。

  • 修改 SSH 端口不必定絕對哈。固然,若是要暴露在外網,建議改下。

二、服務器使用密鑰登錄,禁止密碼登錄。

三、開啓防火牆,關閉 SElinux ,根據業務需求設置相應的防火牆規則。

四、裝 fail2ban 這種防止 SSH 暴力破擊的軟件。

五、設置只容許公司辦公網出口 IP 能登錄服務器(看公司實際須要)

六、修改歷史命令記錄的條數爲 10 條。

七、只容許有須要的服務器能夠訪問外網,其它所有禁止。

八、作好軟件層面的防禦。

  • 設置 nginx_waf 模塊防止 SQL 注入。

  • 把 Web 服務使用 www 用戶啓動,更改網站目錄的全部者和所屬組爲 www 。

二、什麼叫 CC ***?什麼叫 DDOS ***?

CC ***,主要是用來***頁面的,模擬多個用戶不停的對你的頁面進行訪問,從而使你的系統資源消耗殆盡。

DDOS ***,中文名叫分佈式拒絕服務***,指藉助服務器技術將多個計算機聯合起來做爲***平臺,來對一個或多個目標發動 DDOS ***。

***,便是經過大量合法的請求佔用大量網絡資源,以達到癱瘓網絡的目的。

怎麼預防 CC ***和 DDOS ***?

防 CC、DDOS ***,這些只能是用硬件防火牆作流量清洗,將***流量引入黑洞。

流量清洗這一塊,主要是買 ISP 服務商的防***的服務就能夠,機房通常有空餘流量,咱們通常是買服務,畢竟***不會是持續長時間。

3.、什麼是網站數據庫注入?

因爲程序員的水平及經驗良莠不齊,大部分程序員在編寫代碼的時候,沒有對用戶輸入數據的合法性進行判斷。

應用程序存在安全隱患。用戶能夠提交一段數據庫查詢代碼,根據程序返回的結果,得到某些他想得知的數據,這就是所謂的 SQL 注入。

SQL注入,是從正常的 WWW 端口訪問,並且表面看起來跟通常的 Web 頁面訪問沒什麼區別,若是管理員沒查看日誌的習慣,可能被***很長時間都不會發覺。

如何過濾與預防?

數據庫網頁端注入這種,能夠考慮使用 nginx_waf 作過濾與預防。

4、Shell

一、Shell 腳本是什麼?

一個 Shell 腳本是一個文本文件,包含一個或多個命令。做爲系統管理員,咱們常常須要使用多個命令來完成一項任務,咱們能夠添加這些全部命令在一個文本文件(Shell 腳本)來完成這些平常工做任務。

二、什麼是默認登陸 Shell ?

在 Linux 操做系統,"/bin/bash" 是默認登陸 Shell,是在建立用戶時分配的。

使用 chsh 命令能夠改變默認的 Shell 。示例以下所示:

## chsh <用戶名> -s <新shell> ## chsh ThinkWon -s /bin/sh ## chsh <用戶名> -s <新shell> ## chsh ThinkWon -s /bin/sh

三、在 Shell 腳本中,如何寫入註釋?

註釋能夠用來描述一個腳本能夠作什麼和它是如何工做的。每一行註釋以 # 開頭。例子以下:

#!/bin/bash ## This is a command echo 「I am logged in as $USER」 #!/bin/bash ## This is a command echo 「I am logged in as $USER」

四、能夠在 Shell 腳本中使用哪些類型的變量?

在 Shell 腳本,咱們能夠使用兩種類型的變量:

  • 系統定義變量:系統變量是由系統系統本身建立的。這些變量一般由大寫字母組成,能夠經過 set 命令查看。

  • 用戶定義變量:用戶變量由系統用戶來生成和定義,變量的值能夠經過命令 "echo $<變量名>" 查看。

五、Shell腳本中 $? 標記的用途是什麼?

在寫一個 Shell 腳本時,若是你想要檢查前一命令是否執行成功,在 if 條件中使用 $? 能夠來檢查前一命令的結束狀態。

若是結束狀態是 0 ,說明前一個命令執行成功。例如:

# ls /usr/bin/shar /usr/bin/shar # echo $? 0# ls /usr/bin/shar /usr/bin/shar # echo $? 0

若是結束狀態不是0,說明命令執行失敗。例如:

# ls /usr/bin/share ls: cannot access /usr/bin/share: No such file or directory # echo $? 1# ls /usr/bin/share ls: cannot access /usr/bin/share: No such file or directory # echo $? 1

六、Bourne Shell(bash) 中有哪些特殊的變量?

下面的表列出了 Bourne Shell 爲命令行設置的特殊變量。

內建變量                 解釋 $0               命令行中的腳本名字 $1               第一個命令行參數 $2               第二個命令行參數 …..                     ……. $9               第九個命令行參數 $##              命令行參數的數量 $*               全部命令行參數,以空格隔開內建變量                 解釋 $0               命令行中的腳本名字 $1               第一個命令行參數 $2               第二個命令行參數 …..                     ……. $9               第九個命令行參數 $##              命令行參數的數量 $*               全部命令行參數,以空格隔開

七、如何取消變量或取消變量賦值?

unset 命令用於取消變量或取消變量賦值。語法以下所示:

# unset <變量名># unset <變量名>

八、Shell 腳本中 if 語法如何嵌套?

if [ 條件 ]   then 命令1 命令2 …..    else if [ 條件 ]   then 命令1 命令2 ….    else 命令1 命令2 ….. fi fiif [ 條件 ]   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#!/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 …… 最後命令 ;; esaccase 變量 in 值1) 命令1 命令2 ….. 最後命令 !! 值2) 命令1 命令2 …… 最後命令 ;; esac

十、Shell 腳本中 for 循環語法?

基礎語法以下:

for 變量 in 循環列表 do 命令1 命令2 …. 最後命令 donefor 變量 in 循環列表 do 命令1 命令2 …. 最後命令 done

十一、Shell 腳本中 while 循環語法?

  • 如同 for 循環,while 循環只要條件成立就重複它的命令塊。

  • 不一樣於 for循環,while 循環會不斷迭代,直到它的條件不爲真。

基礎語法:

while [ 條件 ] do 命令… donewhile [ 條件 ] do 命令… done

十二、do-while 語句的基本格式?

do-while 語句相似於 while 語句,但檢查條件語句以前先執行命令(LCTT 譯註:意即至少執行一次。)。下面是用 do-while 語句的語法:

do { 命令 } while (條件)     1     2     3     4do { 命令 } while (條件)     1     2     3     4

1三、Shell 腳本中 break 命令的做用?

break 命令一個簡單的用途是退出執行中的循環。咱們能夠在 while 和 until 循環中使用 break 命令跳出循環。

1四、Shell 腳本中 continue 命令的做用?

continue 命令不一樣於 break 命令,它只跳出當前循環的迭代,而不是整個循環。continue 命令不少時候是頗有用的,例如錯誤發生,但咱們依然但願繼續執行大循環的時候。

1五、如何使腳本可執行?

使用 chmod 命令來使腳本可執行。例子以下:chmod a+x myscript.sh 。

#!/bin/bash 的做用? #!/bin/bash 是 Shell 腳本的第一行,稱爲釋伴(shebang)行。     這裏 # 符號叫作 hash ,而 ! 叫作 bang。     它的意思是命令經過 /bin/bash 來執行。#!/bin/bash 的做用? #!/bin/bash 是 Shell 腳本的第一行,稱爲釋伴(shebang)行。     這裏 # 符號叫作 hash ,而 ! 叫作 bang。     它的意思是命令經過 /bin/bash 來執行。

1六、如何調試 Shell腳本?

使用 -x' 數(sh -x myscript.sh)能夠調試 Shell腳本。 另外一個種方法是使用 -nv 參數(sh -nv myscript.sh)。使用 -x' 數(sh -x myscript.sh)能夠調試 Shell腳本。 另外一個種方法是使用 -nv 參數(sh -nv myscript.sh)。

1七、如何將標準輸出和錯誤輸出同時重定向到同一位置?

方法一:2>&1 (如## ls /usr/share/doc > out.txt 2>&1 ) 。 方法二:&> (如## ls /usr/share/doc &> out.txt ) 。方法一:2>&1 (如## ls /usr/share/doc > out.txt 2>&1 ) 。 方法二:&> (如## ls /usr/share/doc &> out.txt ) 。

1八、在 Shell 腳本中,如何測試文件?

test 命令能夠用來測試文件。基礎用法以下表格:

Test         用法 -d 文件名    若是文件存在而且是目錄,返回true -e 文件名    若是文件存在,返回true -f 文件名    若是文件存在而且是普通文件,返回true -r 文件名    若是文件存在並可讀,返回true -s 文件名    若是文件存在而且不爲空,返回true -w 文件名    若是文件存在並可寫,返回true -x 文件名    若是文件存在並可執行,返回trueTest         用法 -d 文件名    若是文件存在而且是目錄,返回true -e 文件名    若是文件存在,返回true -f 文件名    若是文件存在而且是普通文件,返回true -r 文件名    若是文件存在並可讀,返回true -s 文件名    若是文件存在而且不爲空,返回true -w 文件名    若是文件存在並可寫,返回true -x 文件名    若是文件存在並可執行,返回true

1九、在 Shell 腳本如何定義函數呢?

函數是擁有名字的代碼塊。當咱們定義代碼塊,咱們就能夠在咱們的腳本調用函數名字,該塊就會被執行。示例以下所示:

$ diskusage () { df -h ; } 譯註:下面是我給的shell函數語法,原文沒有 [ function ] 函數名 [()] { 命令; [return int;] }$ diskusage () { df -h ; } 譯註:下面是我給的shell函數語法,原文沒有 [ function ] 函數名 [()] { 命令; [return int;] }

20、如何讓 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# 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

2一、如何執行算術運算?

有兩種方法來執行算術運算:

一、使用 expr 命令:## expr 5 + 2 。
二、用一個美圓符號和方括號($[ 表達式 ]):test=$[16 + 4] ; test=$[16 + 4] 。

5、編程題

一、判斷一文件是否是字符設備文件,若是是將其拷貝到 /dev 目錄下?

#!/bin/bash read -p "Input file name: " FILENAME if [ -c "$FILENAME" ];then   cp $FILENAME /dev fi#!/bin/bash read -p "Input file name: " FILENAME if [ -c "$FILENAME" ];then   cp $FILENAME /dev fi

二、添加一個新組爲 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#!/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

三、編寫 Shell 程序,實現自動刪除 50 個帳號的功能,帳號名爲stud1 至 stud50 ?

#!/bin/bash for((i=1;i<51;i++)) do                 userdel -r stud$i done#!/bin/bash for((i=1;i<51;i++)) do                 userdel -r stud$i done

四、寫一個 sed 命令,修改 /tmp/input.txt 文件的內容?

要求:

  • 刪除全部空行。

  • 一行中,若是包含 「11111」,則在 「11111」 前面插入 「AAA」,在 「11111」 後面插入 「BBB」 。好比:將內容爲 0000111112222 的一行改成 0000AAA11111BBB2222 。

# cat -n /tmp/input.txt      1  000011111222      2      3  000011111222222      4  11111000000222      5      6      7  111111111111122222222222      8  2211111111      9  112222222     10  1122     11     ## 刪除全部空行命令 # sed '/^$/d' /tmp/input.txt 000011111222 000011111222222 11111000000222 111111111111122222222222 2211111111 112222222 1122 ## 插入指定的字符 # sed 's#\(11111\)#AAA\1BBB#g' /tmp/input.txt 0000AAA11111BBB222 0000AAA11111BBB222222 AAA11111BBB000000222 AAA11111BBBAAA11111BBB11122222222222 22AAA11111BBB111 112222222 1122# cat -n /tmp/input.txt      1  000011111222      2      3  000011111222222      4  11111000000222      5      6      7  111111111111122222222222      8  2211111111      9  112222222     10  1122     11     ## 刪除全部空行命令 # sed '/^$/d' /tmp/input.txt 000011111222 000011111222222 11111000000222 111111111111122222222222 2211111111 112222222 1122 ## 插入指定的字符 # sed 's#\(11111\)#AAA\1BBB#g' /tmp/input.txt 0000AAA11111BBB222 0000AAA11111BBB222222 AAA11111BBB000000222 AAA11111BBBAAA11111BBB11122222222222 22AAA11111BBB111 112222222 1122

 

6、實戰

一、如何選擇 Linux 操做系統版本?

通常來說,桌面用戶首選 Ubuntu ;服務器首選 RHEL 或 CentOS ,二者中首選 CentOS 。

根據具體要求:

  • 安全性要求較高,則選擇 Debian 或者 FreeBSD 。

  • 須要使用數據庫高級服務和電子郵件網絡應用的用戶能夠選擇 SUSE 。

  • 想要新技術新功能能夠選擇 Fedora ,Fedora 是 RHEL 和 CentOS 的一個測試版和預發佈版本。

重點:根據現有情況,絕大多數互聯網公司選擇 CentOS 。如今比較經常使用的是 6 系列,如今市場佔有大概一半左右。另外的緣由是 CentOS 更側重服務器領域,而且無版權約束。

CentOS 7 系列,也慢慢使用的會比較多了。

二、如何規劃一臺 Linux 主機,步驟是怎樣?

一、肯定機器是作什麼用的,好比是作 WEB 、DB、仍是遊戲服務器。

  • 不一樣的用途,機器的配置會有所不一樣。

二、肯定好以後,就要定系統須要怎麼安裝,默認安裝哪些系統、分區怎麼作。

三、須要優化系統的哪些參數,須要建立哪些用戶等等的。

三、請問當用戶反饋網站訪問慢,如何處理?

3.一、有哪些方面的因素會致使網站網站訪問慢?

  • 服務器出口帶寬不夠用

自己服務器購買的出口帶寬比較小。一旦併發量大的話,就會形成分給每一個用戶的出口帶寬就小,訪問速度天然就會慢。

跨運營商網絡致使帶寬縮減。例如,公司網站放在電信的網絡上,那麼客戶這邊對接是長城寬帶或聯通,這也可能致使帶寬的縮減。

  • 服務器負載過大,致使響應不過來

以從兩個方面入手分析:

分析系統負載,使用 w 命令或者 uptime 命令查看系統負載。若是負載很高,則使用 top 命令查看 CPU ,MEM 等佔用狀況,要麼是 CPU 繁忙,要麼是內存不夠。

若是這兩者都正常,再去使用 sar 命令分析網卡流量,分析是否是遭到了***。一旦分析出問題的緣由,採起對應的措施解決,如決定要不要殺死一些進程,或者禁止一些訪問等。

  • 數據庫瓶頸

若是慢查詢比較多。那麼就要開發人員或 DBA 協助進行 SQL 語句的優化。

若是數據庫響應慢,考慮能夠加一個數據庫緩存,如 Redis 等。而後,也能夠搭建 MySQL 主從,一臺 MySQL 服務器負責寫,其餘幾臺從數據庫負責讀。

  • 網站開發代碼沒有優化好

    例如 SQL 語句沒有優化,致使數據庫讀寫至關耗時。

3.二、針對網站訪問慢,怎麼去排查?

  • 首先要肯定是用戶端仍是服務端的問題。當接到用戶反饋訪問慢,那邊本身當即訪問網站看看,若是本身這邊訪問快,基本判定是用戶端問題,就須要耐心跟客戶解釋,協助客戶解決問題。不要上來就看服務端的問題。必定要從源頭開始,逐步逐步往下。

  • 若是訪問也慢,那麼能夠利用瀏覽器的調試功能,看看加載那一項數據消耗時間過多,是圖片加載慢,仍是某些數據加載慢。

  • 針對服務器負載狀況。查看服務器硬件(網絡、CPU、內存)的消耗狀況。若是是購買的雲主機,好比阿里雲,能夠登陸阿里雲平臺提供各方面的監控,好比 CPU、內存、帶寬的使用狀況。

  • 若是發現硬件資源消耗都不高,那麼就須要經過查日誌,好比看看 MySQL慢查詢的日誌,看看是否是某條 SQL 語句查詢慢,致使網站訪問慢。

3.三、怎麼去解決?

  • 若是是出口帶寬問題,那麼久申請加大出口帶寬。

  • 若是慢查詢比較多,那麼就要開發人員或 DBA 協助進行 SQL 語句的優化。

  • 若是數據庫響應慢,考慮能夠加一個數據庫緩存,如 Redis 等等。而後也能夠搭建MySQL 主從,一臺 MySQL 服務器負責寫,其餘幾臺從數據庫負責讀。

  • 申請購買 CDN 服務,加載用戶的訪問。

  • 若是訪問還比較慢,那就須要從總體架構上進行優化咯。作到專角色專用,多臺服務器提供同一個服務。

四、Linux 性能調優都有哪幾種方法?

  • Disabling daemons (關閉 daemons)。

  • Shutting down the GUI (關閉 GUI)。

  • Changing kernel parameters (改變內核參數)。

  • Kernel parameters (內核參數)。

  • Tuning the processor subsystem (處理器子系統調優)。

  • Tuning the memory subsystem (內存子系統調優)。

  • Tuning the file system (文件系統子系統調優)。

  • Tuning the network subsystem(網絡子系統調優)。

 

7、文件管理命令

一、cat 命令

cat 命令用於鏈接文件並打印到標準輸出設備上。

cat 主要有三大功能:

  • 一次顯示整個文件:

# cat filename# cat filename
  • 從鍵盤建立一個文件:

# cat > filename# cat > filename

只能建立新文件,不能編輯已有文件。

  • 將幾個文件合併爲一個文件:

# cat file1 file2 > file# cat file1 file2 > file

-b 對非空輸出行號
-n 輸出全部行號

實例:

一、把 log2012.log 的文件內容加上行號後輸入 log2013.log 這個文件裏

# cat -n log2012.log log2013.log# cat -n log2012.log log2013.log

二、把 log2012.log 和 log2013.log 的文件內容加上行號(空白行不加)以後將內容附加到 log.log 裏

# cat -b log2012.log log2013.log log.log# cat -b log2012.log log2013.log log.log

三、使用 here doc 生成新文件

# cat >log.txt <<EOF >Hello >World >PWD=$(pwd) >EOF # ls -l log.txt # cat log.txt Hello World PWD=/opt/soft/test# cat >log.txt <<EOF >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 Hellotac log.txt PWD=/opt/soft/test World Hello

二、chmod 命令

Linux/Unix 的文件調用權限分爲三級 : 文件擁有者、羣組、其餘。利用 chmod 能夠控制文件如何被他人所調用。

用於改變 linux 系統文件或目錄的訪問權限。用它控制文件或目錄的訪問權限。該命令有兩種用法。一種是包含字母和操做符表達式的文字設定法;另外一種是包含數字的數字設定法。

每一文件或目錄的訪問權限都有三組,每組用三位表示,分別爲文件屬主的讀、寫和執行權限;與屬主同組的用戶的讀、寫和執行權限;系統中其餘用戶的讀、寫和執行權限。可以使用 ls -l test.txt 查找。

以文件 log2012.log 爲例:

-rw-r--r-- 1 root root 296K 11-13 06:03 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 處理指定目錄以及其子目錄下全部文件

權限代號:

r :讀權限,用數字4表示 w :寫權限,用數字2表示 x :執行權限,用數字1表示 - :刪除權限,用數字0表示 s :特殊權限r :讀權限,用數字4表示 w :寫權限,用數字2表示 x :執行權限,用數字1表示 - :刪除權限,用數字0表示 s :特殊權限

實例:

一、增長文件 t.log 全部用戶可執行權限

# chmod a+x t.log# chmod a+x t.log

二、撤銷原來全部的權限,而後使擁有者具備可讀權限,並輸出處理信息

# chmod u=r t.log -c# chmod u=r t.log -c

三、給 file 的屬主分配讀、寫、執行(7)的權限,給file的所在組分配讀、執行(5)的權限,給其餘用戶分配執行(1)的權限

# chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)# chmod 751 t.log -c(或者:chmod u=rwx,g=rx,o=x t.log -c)

四、將 test 目錄及其子目錄全部文件添加可讀權限

# chmod u+r,g+r,o+r -R text/ -c# chmod u+r,g+r,o+r -R text/ -c

三、chown 命令

chown 將指定文件的擁有者改成指定的用戶或組,用戶能夠是用戶名或者用戶 ID;組能夠是組名或者組 ID;文件是以空格分開的要改變權限的文件列表,支持通配符。

  • -c 顯示更改的部分的信息

  • -R 處理指定目錄及子目錄

實例:

一、改變擁有者和羣組 並顯示改變信息

# chown -c mail:mail log2012.log# chown -c mail:mail log2012.log

二、改變文件羣組

# chown -c :mail t.log# chown -c :mail t.log

三、改變文件夾及子文件目錄屬主及屬組爲 mail

# chown -cR mail: test/# chown -cR mail: test/

四、cp 命令

將源文件複製至目標文件,或將多個源文件複製至目標目錄。

注意:命令行復制,若是目標文件已經存在會提示是否覆蓋,而在 shell 腳本中,若是不加 -i 參數,則不會提示,而是直接覆蓋!

  • -i 提示

  • -r 複製目錄及目錄內全部項目

  • -a 複製的文件與原文件時間同樣

實例:

一、複製 a.txt 到 test 目錄下,保持原文件時間,若是原文件存在提示是否覆蓋。

# cp -ai a.txt test# cp -ai a.txt test

二、爲 a.txt 建議一個連接(快捷方式)

# cp -s a.txt link_a.txt # cp -s a.txt link_a.txt

5. find 命令

用於在文件樹中查找文件,並做出相應的處理。

命令格式:

# find pathname -options [-print -exec -ok ...] # 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 - 普通文件-name 按照文件名查找文件 -perm 按文件權限查找文件 -user 按文件屬主查找文件 -group  按照文件所屬的組來查找文件。 -type  查找某一類型的文件,諸如:    b - 塊設備文件    d - 目錄    c - 字符設備文件    l - 符號連接文件    p - 管道文件    f - 普通文件

實例:

一、查找 48 小時內修改過的文件

# find -atime -2 # find -atime -2

二、在當前目錄查找 以 .log 結尾的文件。. 表明當前目錄

# find ./ -name '*.log' # find ./ -name '*.log'

三、查找 /opt 目錄下 權限爲 777 的文件

# find /opt -perm 777 # find /opt -perm 777

四、查找大於 1K 的文件

# find -size +1000c # find -size +1000c

五、查找等於 1000 字符的文件

# find -size 1000c# find -size 1000c
  • -exec 參數後面跟的是 command 命令,它的終止是以 ; 爲結束標誌的,因此這句命令後面的分號是不可缺乏的,考慮到各個系統中分號會有不一樣的意義,因此前面加反斜槓。{} 花括號表明前面find查找出來的文件名。

6. head 命令

head 用來顯示檔案的開頭至標準輸出中,默認 head 命令打印其相應文件的開頭 10 行。

經常使用參數:

-n<行數> 顯示的行數(行數爲複數表示從最後向前數)

實例:

一、顯示 1.log 文件中前 20 行

# head 1.log -n 20# head 1.log -n 20

二、顯示 1.log 文件前 20 字節

# head -c 20 log2014.log # head -c 20 log2014.log

三、顯示 t.log最後 10 行

# head -n -10 t.log # head -n -10 t.log

7. less 命令

less 與 more 相似,但使用 less 能夠隨意瀏覽文件,而 more 僅能向前移動,卻不能向後移動,並且 less 在查看以前不會加載整個文件。

經常使用命令參數:

-i  忽略搜索時的大小寫 -N  顯示每行的行號 -o  <文件名> 將less 輸出的內容在指定文件中保存起來 -s  顯示連續空行爲一行 /字符串:向下搜索「字符串」的功能 ?字符串:向上搜索「字符串」的功能 n:重複前一個搜索(與 / 或 ? 有關) N:反向重複前一個搜索(與 / 或 ? 有關) -x <數字> 將「tab」鍵顯示爲規定的數字空格 b  向後翻一頁 d  向後翻半頁 h  顯示幫助界面 Q  退出less 命令 u  向前滾動半頁 y  向前滾動一行 空格鍵 滾動一行 回車鍵 滾動一頁 [pagedown]:向下翻動一頁 [pageup]:   向上翻動一頁-i  忽略搜索時的大小寫 -N  顯示每行的行號 -o  <文件名> 將less 輸出的內容在指定文件中保存起來 -s  顯示連續空行爲一行 /字符串:向下搜索「字符串」的功能 ?字符串:向上搜索「字符串」的功能 n:重複前一個搜索(與 / 或 ? 有關) N:反向重複前一個搜索(與 / 或 ? 有關) -x <數字> 將「tab」鍵顯示爲規定的數字空格 b  向後翻一頁 d  向後翻半頁 h  顯示幫助界面 Q  退出less 命令 u  向前滾動半頁 y  向前滾動一行 空格鍵 滾動一行 回車鍵 滾動一頁 [pagedown]:向下翻動一頁 [pageup]:   向上翻動一頁

實例:

一、ps 查看進程信息並經過 less 分頁顯示

# ps -aux | less -N # ps -aux | less -N

二、查看多個文件

# less 1.log 2.log # less 1.log 2.log

能夠使用 n 查看下一個,使用 p 查看前一個。

8. ln 命令

功能是爲文件在另一個位置創建一個同步的連接,當在不一樣目錄須要該問題時,就不須要爲每個目錄建立一樣的文件,經過 ln 建立的連接(link)減小磁盤佔用量。

連接分類:軟件連接及硬連接

軟連接:

  • 軟連接,以路徑的形式存在。相似於Windows操做系統中的快捷方式

  • 軟連接能夠 跨文件系統 ,硬連接不能夠

  • 軟連接能夠對一個不存在的文件名進行連接

  • 軟連接能夠對目錄進行連接

硬連接:

  • 硬連接,以文件副本的形式存在。但不佔用實際空間。

  • 不容許給目錄建立硬連接

  • 硬連接只有在同一個文件系統中才能建立

須要注意:

  • ln命令會保持每一處連接文件的同步性,也就是說,不論你改動了哪一處,其它的文件都會發生相同的變化;

  • ln的連接又分軟連接和硬連接兩種,軟連接就是ln –s 源文件 目標文件,它只會在你選定的位置上生成一個文件的鏡像,不會佔用磁盤空間,硬連接 ln 源文件 目標文件,沒有參數-s, 它會在你選定的位置上生成一個和源文件大小相同的文件,不管是軟連接仍是硬連接,文件都保持同步變化。

  • ln指令用在連接文件或目錄,如同時指定兩個以上的文件或目錄,且最後的目的地是一個已經存在的目錄,則會把前面指定的全部文件或目錄複製到該目錄中。若同時指定多個文件或目錄,且最後的目的地並不是是一個已存在的目錄,則會出現錯誤信息。

經常使用參數:

  • -b 刪除,覆蓋之前創建的連接

  • -s 軟連接(符號連接)

  • -v 顯示詳細處理過程

實例:

一、給文件建立軟連接,並顯示操做信息

# ln -sv source.log link.log # ln -sv source.log link.log

二、給文件建立硬連接,並顯示操做信息

# ln -v source.log link1.log # ln -v source.log link1.log

三、給目錄建立軟連接

# ln -sv /opt/soft/test/test3 /opt/soft/test/test5 # ln -sv /opt/soft/test/test3 /opt/soft/test/test5

9. locate 命令

locate 經過搜尋系統內建文檔數據庫達到快速找到檔案,數據庫由 updatedb 程序來更新,updatedb 是由 cron daemon 週期性調用的。默認狀況下 locate 命令在搜尋數據庫時比由整個由硬盤資料來搜尋資料來得快,但較差勁的是 locate 所找到的檔案如果最近才創建或 剛改名的,可能會找不到,在內定值中,updatedb 天天會跑一次,能夠由修改 crontab 來更新設定值 (etc/crontab)。

locate 與 find 命令類似,能夠使用如 *、? 等進行正則匹配查找

經常使用參數:

  • -l num(要顯示的行數)

  • -f   將特定的檔案系統排除在外,如將proc排除在外

  • -r   使用正則運算式作爲尋找條件

實例:

一、查找和 pwd 相關的全部文件(文件名中包含 pwd)

# locate pwd # locate pwd

二、搜索 etc 目錄下全部以 sh 開頭的文件

# locate /etc/sh # locate /etc/sh

三、查找 /var 目錄下,以 reason 結尾的文件(其中.表示一個字符,表示任務多個;.表示任意多個字符)

# locate -r '^/var.*reason$' # locate -r '^/var.*reason$'

10. more 命令

功能相似於 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       把文件內容中的下畫線去掉+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       退出moreEnter    向下 n 行,須要定義。默認爲 1 行 Ctrl+F   向下滾動一屏 空格鍵  向下滾動一屏 Ctrl+B  返回上一屏 =       輸出當前行的行號 :f     輸出文件名和當前行的行號 V      調用vi編輯器 !命令   調用Shell,並執行命令 q       退出more

實例:

一、顯示文件中從第3行起的內容

# more +3 text.txt # more +3 text.txt

二、在所列出文件目錄詳細信息,藉助管道使每次顯示 5 行

# ls -l | more -5 # ls -l | more -5

按空格顯示下 5 行。

11. mv 命令

移動文件或修改文件名,根據第二參數類型(如目錄,則移動文件;如爲文件則重命令該文件)。

當第二個參數爲目錄時,第一個參數能夠是多個以空格分隔的文件或目錄,而後移動第一個參數指定的多個文件到第二個參數指定的目錄中。

實例:
一、將文件 test.log 重命名爲 test1.txt

# mv test.log test1.txt # mv test.log test1.txt

二、將文件 log1.txt,log2.txt,log3.txt 移動到根的 test3 目錄中

# mv llog1.txt log2.txt log3.txt /test3 # mv llog1.txt log2.txt log3.txt /test3

三、將文件 file1 更名爲 file2,若是 file2 已經存在,則詢問是否覆蓋

# mv -i log1.txt log2.txt # mv -i log1.txt log2.txt

四、移動當前文件夾下的全部文件到上一級目錄

# mv * ../ # mv * ../

12. rm 命令

刪除一個目錄中的一個或多個文件或目錄,若是沒有使用 -r 選項,則 rm 不會刪除目錄。若是使用 rm 來刪除文件,一般仍能夠將該文件恢復原狀。

# rm [選項] 文件… # rm [選項] 文件…

實例:
一、刪除任何 .log 文件,刪除前逐一詢問確認:

# rm -i *.log # rm -i *.log

二、刪除 test 子目錄及子目錄中全部檔案刪除,而且不用一一確認:

# rm -rf test # rm -rf test

三、刪除以 -f 開頭的文件

# rm -- -f* # rm -- -f*

13. tail 命令

用於顯示指定文件末尾內容,不指定文件時,做爲輸入信息進行處理。經常使用查看日誌文件。

經常使用參數:

  • -f 循環讀取(經常使用於查看遞增的日誌文件)

  • -n<行數> 顯示行數(從後向前)

一、循環讀取逐漸增長的文件內容

# ping 127.0.0.1 > ping.log & # ping 127.0.0.1 > ping.log &

二、後臺運行:可以使用 jobs -l 查看,也可以使用 fg 將其移到前臺運行。

# tail -f ping.log # tail -f ping.log

14. touch 命令

Linux touch命令用於修改文件或者目錄的時間屬性,包括存取時間和更改時間。若文件不存在,系統會創建一個新的文件。

ls -l 能夠顯示檔案的時間記錄。 ls -l 能夠顯示檔案的時間記錄。

語法

touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件或目錄…] touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件或目錄…]

參數說明:

a 改變檔案的讀取時間記錄。 m 改變檔案的修改時間記錄。 c 假如目的檔案不存在,不會創建新的檔案。與 --no-create 的效果同樣。 f 不使用,是爲了與其餘 unix 系統的相容性而保留。 r 使用參考檔的時間記錄,與 --file 的效果同樣。 d 設定時間與日期,能夠使用各類不一樣的格式。 t 設定檔案的時間記錄,格式與 date 指令相同。 –no-create 不會創建新檔案。 –help 列出指令格式。 –version 列出版本訊息。a 改變檔案的讀取時間記錄。 m 改變檔案的修改時間記錄。 c 假如目的檔案不存在,不會創建新的檔案。與 --no-create 的效果同樣。 f 不使用,是爲了與其餘 unix 系統的相容性而保留。 r 使用參考檔的時間記錄,與 --file 的效果同樣。 d 設定時間與日期,能夠使用各類不一樣的格式。 t 設定檔案的時間記錄,格式與 date 指令相同。 –no-create 不會創建新檔案。 –help 列出指令格式。 –version 列出版本訊息。

實例

使用指令"touch"修改文件"testfile"的時間屬性爲當前系統時間,輸入以下命令:

$ touch testfile                #修改文件的時間屬性 $ touch testfile                #修改文件的時間屬性

首先,使用ls命令查看testfile文件的屬性,以下所示:

$ ls -l testfile                #查看文件的時間屬性   $ ls -l testfile                #查看文件的時間屬性  

原來文件的修改時間爲16:09

-rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile -rw-r--r-- 1 hdd hdd 55 2011-08-22 16:09 testfile

執行指令"touch"修改文件屬性之後,並再次查看該文件的時間屬性,以下所示:

$ touch testfile                #修改文件時間屬性爲當前系統時間   $ ls -l testfile                #查看文件的時間屬性   $ touch testfile                #修改文件時間屬性爲當前系統時間   $ ls -l testfile                #查看文件的時間屬性  

修改後文件的時間屬性爲當前系統時間

-rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile -rw-r--r-- 1 hdd hdd 55 2011-08-22 19:53 testfile

使用指令"touch"時,若是指定的文件不存在,則將建立一個新的空白文件。例如,在當前目錄下,使用該指令建立一個空白文件"file",輸入以下命令:

$ touch file            #建立一個名爲「file」的新的空白文件 $ touch file            #建立一個名爲「file」的新的空白文件

15. vim 命令

Vim是從 vi 發展出來的一個文本編輯器。代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被普遍使用。

打開文件並跳到第 10 行:

# vim +10 filename.txt # vim +10 filename.txt

打開文件跳到第一個匹配的行:

# vim +/search-term filename.txt  # vim +/search-term filename.txt 

以只讀模式打開文件:

# vim -R /etc/passwd  # vim -R /etc/passwd 

基本上 vi/vim 共分爲三種模式,分別是命令模式(Command mode),輸入模式(Insert mode)和底線命令模式(Last line mode)。

簡單的說,咱們能夠將這三個模式想成底下的圖標來表示:

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

1六、whereis 命令

whereis 命令只能用於程序名的搜索,並且只搜索二進制文件(參數-b)、man說明文件(參數-m)和源代碼文件(參數-s)。若是省略參數,則返回全部信息。whereis 及 locate 都是基於系統內建的數據庫進行搜索,所以效率很高,而find則是遍歷硬盤查找文件。

經常使用參數:

  • -b   定位可執行文件

  • -m   定位幫助文件

  • -s   定位源代碼文件

  • -u   搜索默認路徑下除可執行文件、源代碼文件、幫助文件之外的其它文件

實例:

一、查找 locate 程序相關文件

# whereis locate # whereis locate

(2)查找 locate 的源碼文件

# whereis -s locate # whereis -s locate

(3)查找 lcoate 的幫助文件

# whereis -m locate # whereis -m locate

1七、which 命令

在 linux 要查找某個文件,但不知道放在哪裏了,能夠使用下面的一些命令來搜索:

  • which:查看可執行文件的位置。

  • whereis:查看文件的位置。

  • locate:配合數據庫查看文件位置。

  • find:實際搜尋硬盤查詢文件名稱。

which 是在 PATH 就是指定的路徑中,搜索某個系統命令的位置,並返回第一個搜索結果。使用 which 命令,就能夠看到某個系統命令是否存在,以及執行的究竟是哪個位置的命令。

經常使用參數:

  • -n:指定文件名長度,指定的長度必須大於或等於全部文件中最長的文件名。

實例:
一、查看 ls 命令是否存在,執行哪一個

# which ls # which ls

二、查看 which

which which which which

3)查看 cd(顯示不存在,由於 cd 是內建命令,而 which 查找顯示是 PATH 中的命令)

# which cd # which cd

四、查看當前 PATH 配置或使用 env 查看全部環境變量及對應值

# echo $PATH # echo $PATH

 

8、文檔編輯命令

1.grep 命令

強大的文本搜索命令,grep(Global Regular Expression Print) 全局正則表達式搜索。

grep 的工做方式是這樣的,它在一個或多個文件中搜索字符串模板。若是模板包括空格,則必須被引用,模板後的全部字符串被看做文件名。搜索的結果被送到標準輸出,不影響原文件內容。

命令格式:

grep [option] pattern file|dir 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 遞歸查找文件夾-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\>'匹配包含以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],如:'G\w*p'匹配以G後跟零個或多個文字或數字字符,而後是p。 \W    # \w的反置形式,匹配一個或多個非單詞字符,如點號句號等。 \b    # 單詞鎖定符,如: '\bgrep\b'只匹配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\>'匹配包含以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],如:'G\w*p'匹配以G後跟零個或多個文字或數字字符,而後是p。 \W    # \w的反置形式,匹配一個或多個非單詞字符,如點號句號等。 \b    # 單詞鎖定符,如: '\bgrep\b'只匹配grep。

實例:

一、查找指定進程

# ps -ef | grep svn # ps -ef | grep svn

二、查找指定進程個數

# ps -ef | grep svn -c # ps -ef | grep svn -c

三、從文件中讀取關鍵詞

# cat test1.txt | grep -f key.log # cat test1.txt | grep -f key.log


四、從文件夾中遞歸查找以grep開頭的行,並只列出文件

# grep -lR '^grep' /tmp # grep -lR '^grep' /tmp

五、查找非x開關的行內容

# grep '^[^x]' test.txt # grep '^[^x]' test.txt

六、顯示包含 ed 或者 at 字符的內容行

# grep -E 'ed|at' test.txt # grep -E 'ed|at' test.txt

二、wc 命令

wc(word count)功能爲統計指定的文件中字節數、字數、行數,並將統計結果輸出

命令格式:

# wc [option] file.. # wc [option] file..

命令參數:

  • -c 統計字節數

  • -l 統計行數

  • -m 統計字符數

  • -w 統計詞數,一個字被定義爲由空白、跳格或換行字符分隔的字符串

實例:
一、查找文件的 行數 單詞數 字節數 文件名

# wc text.txt # wc text.txt

結果:

7     8     70     test.txt 7     8     70     test.txt

二、統計輸出結果的行數

# cat test.txt | wc -l # cat test.txt | wc -l

 

9、磁盤管理命令

一、cd 命令

cd(changeDirectory) 命令語法:

# cd [目錄名] # cd [目錄名]

說明:切換當前目錄至 dirName。

實例:
一、進入要目錄

# cd / # cd /

二、進入 「home」 目錄

# cd ~ # cd ~

三、進入上一次工做路徑

# cd - # cd -

四、把上個命令的參數做爲cd參數使用

# cd !$ # cd !$

二、df 命令

顯示磁盤空間使用狀況。獲取硬盤被佔用了多少空間,目前還剩下多少空間等信息,若是沒有文件名被指定,則全部當前被掛載的文件系統的可用空間將被顯示。默認狀況下,磁盤空間將以 1KB 爲單位進行顯示,除非環境變量 POSIXLY_CORRECT 被指定,那樣將以512字節爲單位進行顯示:

  • -a 所有文件系統列表

  • -h 以方便閱讀的方式顯示信息

  • -i 顯示inode信息

  • -k 區塊爲1024字節

  • -l 只顯示本地磁盤

  • -T 列出文件系統類型

實例:
一、顯示磁盤使用狀況

# df -l # df -l

二、以易讀方式列出全部文件系統及其類型

# df -haT # df -haT

3. du 命令

du 命令也是查看使用空間的,可是與 df 命令不一樣的是 Linux du 命令是對文件和目錄磁盤使用的空間的查看:

命令格式:

# du [選項] [文件] # du [選項] [文件]

經常使用參數:

  • -a 顯示目錄中全部文件大小

  • -k 以KB爲單位顯示文件大小

  • -m 以MB爲單位顯示文件大小

  • -g 以GB爲單位顯示文件大小

  • -h 以易讀方式顯示文件大小

  • -s 僅顯示總計

  • -c或--total  除了顯示個別目錄或文件的大小外,同時也顯示全部目錄或文件的總和

實例:
一、以易讀方式顯示文件夾內及子文件夾大小

# du -h scf/ # du -h scf/

二、以易讀方式顯示文件夾內全部文件大小

# du -ah scf/ # du -ah scf/

三、顯示幾個文件或目錄各自佔用磁盤空間的大小,還統計它們的總和

# du -hc test/ scf/ # du -hc test/ scf/

四、輸出當前目錄下各個子目錄所使用的空間

# du -hc --max-depth=1 scf/ # du -hc --max-depth=1 scf/

4. ls命令

就是 list 的縮寫,經過 ls 命令不只能夠查看 linux 文件夾包含的文件,並且能夠查看文件權限(包括目錄、文件夾、文件權限)查看目錄信息等等。

經常使用參數搭配:

  • ls -a 列出目錄全部文件,包含以.開始的隱藏文件

  • ls -A 列出除.及..的其它文件

  • ls -r 反序排列

  • ls -t 以文件修改時間排序

  • ls -S 以文件大小排序

  • ls -h 以易讀大小顯示

  • ls -l 除了文件名以外,還將文件的權限、全部者、文件大小等信息詳細列出來

實例:
一、按易讀方式按時間反序排序,並顯示文件詳細信息

# ls -lhrt # ls -lhrt

二、按大小反序顯示文件詳細信息

# ls -lrS # ls -lrS

三、列出當前目錄中全部以"t"開頭的目錄的詳細內容

# ls -l t* # ls -l t*

四、列出文件絕對路徑(不包含隱藏文件)

# ls | sed "s:^:`pwd`/:" # ls | sed "s:^:`pwd`/:"

五、列出文件絕對路徑(包含隱藏文件)

# find $pwd -maxdepth 1 | xargs ls -ld # find $pwd -maxdepth 1 | xargs ls -ld

5. mkdir 命令

mkdir 命令用於建立文件夾。

可用選項:

  • -m: 對新建目錄設置存取權限,也能夠用 chmod 命令設置;

  • -p: 能夠是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,系統將自動創建好那些尚不在的目錄,即一次能夠創建多個目錄。

實例:
一、當前工做目錄下建立名爲 t 的文件夾

# mkdir t # mkdir t

二、在 tmp 目錄下建立路徑爲 test/t1/t 的目錄,若不存在,則建立:

# mkdir -p /tmp/test/t1/t # mkdir -p /tmp/test/t1/t

6. pwd 命令

pwd 命令用於查看當前工做目錄路徑。

實例:
一、查看當前路徑

pwd pwd

二、查看軟連接的實際路徑

pwd -P pwd -P

7. rmdir 命令

從一個目錄中刪除一個或多個子目錄項,刪除某目錄時也必須具備對其父目錄的寫權限。

注意:不能刪除非空目錄

實例:
一、當 parent 子目錄被刪除後使它也成爲空目錄的話,則順便一併刪除:

# rmdir -p parent/child/child11 # rmdir -p parent/child/child11

 

10、網絡通信命令

一、ifconfig 命令

ifconfig 用於查看和配置 Linux 系統的網絡接口。

查看全部網絡接口及其狀態:ifconfig -a 。

使用 up 和 down 命令啓動或中止某個接口:ifconfig eth0 up 和 ifconfig eth0 down 。

二、iptables 命令

iptables:是一個配置 Linux 內核防火牆的命令行工具。功能很是強大,對於咱們開發來講,主要掌握如何開放端口便可。例如:把來源 IP 爲 192.168.1.101 訪問本機 80 端口的包直接拒絕:

# iptables -I INPUT -s 192.168.1.101 -p tcp --dport 80 -j REJECT # 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 -A INPUT -p tcp --dport 80 -j ACCEP

另外,要注意使用 iptables save 命令,進行保存。不然,服務器重啓後,配置的規則將丟失。

三、netstat 命令

Linux netstat命令用於顯示網絡狀態。

利用netstat指令可以讓你得知整個Linux系統的網絡狀況。

語法

netstat [-acCeFghilMnNoprstuvVwx][-A<網絡類型>][--ip] 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"參數相同。-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"參數相同。

實例

如何查看系統都開啓了哪些端口?

# 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# 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

如何查看網絡鏈接情況?

# 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 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 。 # 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     ESTABLISHEDtcp        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

四、ping 命令

Linux ping命令用於檢測主機。

執行ping指令會使用ICMP傳輸協議,發出要求迴應的信息,若遠端主機的網絡功能沒有問題,就會迴應該信息,於是得知該主機運做正常。

指定接收包的次數

# ping -c 2 www.baidu.com # ping -c 2 www.baidu.com

五、telnet 命令

Linux telnet命令用於遠端登入。

執行telnet指令開啓終端機階段做業,並登入遠端主機。

語法

telnet  [-8acdEfFKLrx][-b<主機別名>][-e<脫離字符>][-k<域名>][-l<用戶名稱>][-n<記錄文件>][-S<服務類型>][-X<認證形態>][主機名稱或IP地址<通訊端口>] 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<認證形態> 關閉指定的認證形態。-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 # telnet 192.168.0.5

 

11、系統管理命令

一、date命令

顯示或設定系統的日期與時間。

命令參數:

-d<字符串>  顯示字符串所指的日期與時間。字符串先後必須加上雙引號。 -s<字符串>  根據字符串來設置日期與時間。字符串先後必須加上雙引號。 -u  顯示GMT。 %H 小時(00-23) %I 小時(00-12) %M 分鐘(以00-59來表示) %s 總秒數。起算時間爲1970-01-01 00:00:00 UTC。 %S 秒(以本地的慣用法來表示) %a 星期的縮寫。 %A 星期的完整名稱。 %d 日期(以01-31來表示)。 %D 日期(含年月日)。 %m 月份(以01-12來表示)。 %y 年份(以00-99來表示)。 %Y 年份(以四位數來表示)。-d<字符串>  顯示字符串所指的日期與時間。字符串先後必須加上雙引號。 -s<字符串>  根據字符串來設置日期與時間。字符串先後必須加上雙引號。 -u  顯示GMT。 %H 小時(00-23) %I 小時(00-12) %M 分鐘(以00-59來表示) %s 總秒數。起算時間爲1970-01-01 00:00:00 UTC。 %S 秒(以本地的慣用法來表示) %a 星期的縮寫。 %A 星期的完整名稱。 %d 日期(以01-31來表示)。 %D 日期(含年月日)。 %m 月份(以01-12來表示)。 %y 年份(以00-99來表示)。 %Y 年份(以四位數來表示)。

實例:
一、顯示下一天

# date +%Y%m%d --date="+1 day"  //顯示下一天的日期 # date +%Y%m%d --date="+1 day"  //顯示下一天的日期

二、-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(下個月是幾月)# 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(下個月是幾月)

2. free 命令

顯示系統內存使用狀況,包括物理內存、交互區內存(swap)和內核緩衝區內存。

命令參數:

-b 以Byte顯示內存使用狀況 -k 以kb爲單位顯示內存使用狀況 -m 以mb爲單位顯示內存使用狀況 -g 以gb爲單位顯示內存使用狀況 -s<間隔秒數> 持續顯示內存 -t 顯示內存使用總合-b 以Byte顯示內存使用狀況 -k 以kb爲單位顯示內存使用狀況 -m 以mb爲單位顯示內存使用狀況 -g 以gb爲單位顯示內存使用狀況 -s<間隔秒數> 持續顯示內存 -t 顯示內存使用總合

實例:
一、顯示內存使用狀況

# free # free -k # free -m # free # free -k # free -m

二、以總和的形式顯示內存的使用信息

# free -t # free -t

三、週期性查詢內存使用狀況

# free -s 10 # free -s 10

三、kill 命令

發送指定的信號到相應進程。不指定型號將發送SIGTERM(15)終止指定進程。若是任沒法終止該程序可用"-KILL" 參數,其發送的信號爲SIGKILL(9) ,將強制結束進程,使用ps命令或者jobs 命令能夠查看進程號。root用戶將影響用戶的進程,非root用戶只能影響本身的進程。

經常使用參數:

-l  信號,若果不加信號的編號參數,則使用「-l」參數會列出所有的信號名稱 -a  當處理當前進程時,不限制命令名和進程號的對應關係 -p  指定kill 命令只打印相關進程的進程號,而不發送任何信號 -s  指定發送信號 -u  指定用戶-l  信號,若果不加信號的編號參數,則使用「-l」參數會列出所有的信號名稱 -a  當處理當前進程時,不限制命令名和進程號的對應關係 -p  指定kill 命令只打印相關進程的進程號,而不發送任何信號 -s  指定發送信號 -u  指定用戶

實例:
一、先使用ps查找進程pro1,而後用kill殺掉

# kill -9 $(ps -ef | grep pro1) # kill -9 $(ps -ef | grep pro1)

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 顯示全部包含其它使用的進程-A 顯示全部進程 a 顯示全部進程 -a 顯示同一終端下全部進程 c 顯示進程真實名稱 e 顯示環境變量 f 顯示進程間的關係 r 顯示當前終端運行的進程 -aux 顯示全部包含其它使用的進程

實例:
(1)顯示當前全部進程環境變量及進程間關係

ps -ef ps -ef

二、顯示當前全部進程

# ps -A # ps -A

三、與grep聯用查找某進程

# ps -aux | grep apache # ps -aux | grep apache

四、找出與 cron 與 syslog 這兩個服務有關的 PID 號碼

# ps aux | grep '(cron|syslog)' # ps aux | grep '(cron|syslog)'

5. rpm 命令

Linux rpm 命令用於管理套件。

rpm(redhat package manager) 本來是 Red Hat Linux 發行版專門用來管理 Linux 各項套件的程序,因爲它遵循 GPL 規則且功能強大方便,於是廣受歡迎。逐漸受到其餘發行版的採用。RPM 套件管理方式的出現,讓 Linux 易於安裝,升級,間接提高了 Linux 的適用度。

查看系統自帶jdk

# rpm -qa | grep jdk # rpm -qa | grep jdk

刪除系統自帶jdk

# rpm -e --nodeps 查看jdk顯示的數據 # rpm -e --nodeps 查看jdk顯示的數據

安裝jdk

# rpm -ivh jdk-7u80-linux-x64.rpm # rpm -ivh jdk-7u80-linux-x64.rpm

六、top 命令

顯示當前系統正在執行的進程的相關信息,包括進程 ID、內存佔用率、CPU 佔用率等

經常使用參數:

-c 顯示完整的進程命令 -s 保密模式 -p <進程號> 指定進程顯示 -n <次數>循環顯示次數-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  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 命令的執行結果,具體參數說明狀況以下:

14:06:23 — 當前系統時間

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的百分比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)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)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 — 進程名稱(命令名/命令行) top 交互命令 h 顯示top交互命令幫助信息 c 切換顯示命令名稱和完整命令行 m 之內存使用率排序 P 根據CPU使用百分比大小進行排序 T 根據時間/累計時間進行排序 W 將當前設置寫入~/.toprc文件中 o或者O 改變顯示項目的順序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 — 進程名稱(命令名/命令行) top 交互命令 h 顯示top交互命令幫助信息 c 切換顯示命令名稱和完整命令行 m 之內存使用率排序 P 根據CPU使用百分比大小進行排序 T 根據時間/累計時間進行排序 W 將當前設置寫入~/.toprc文件中 o或者O 改變顯示項目的順序

七、yum 命令

yum( Yellow dog Updater, Modified)是一個在Fedora和RedHat以及SUSE中的Shell前端軟件包管理器。

基於RPM包管理,可以從指定的服務器自動下載RPM包而且安裝,能夠自動處理依賴性關係,而且一次安裝全部依賴的軟體包,無須繁瑣地一次次下載、安裝。

yum提供了查找、安裝、刪除某一個、一組甚至所有軟件包的命令,並且命令簡潔而又好記。

1.列出全部可更新的軟件清單命令:yum check-update 2.更新全部軟件命令:yum update 3.僅安裝指定的軟件命令:yum install <package_name> 4.僅更新指定的軟件命令:yum update <package_name> 5.列出全部可安裝的軟件清單命令:yum list 6.刪除軟件包命令:yum remove <package_name> 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) :清除緩存目錄下的軟件包及舊的headers1.列出全部可更新的軟件清單命令:yum check-update 2.更新全部軟件命令:yum update 3.僅安裝指定的軟件命令:yum install <package_name> 4.僅更新指定的軟件命令:yum update <package_name> 5.列出全部可安裝的軟件清單命令:yum list 6.刪除軟件包命令:yum remove <package_name> 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

# yum install pam-devel # yum install pam-devel

 

12、備份壓縮命令

一、bzip2 命令

建立 *.bz2 壓縮文件

# bzip2 test.txt # bzip2 test.txt

解壓 *.bz2 文件

# bzip2 -d test.txt.bz2  # bzip2 -d test.txt.bz2 

二、gzip 命令

建立一個 *.gz 的壓縮文件

# gzip test.txt  # gzip test.txt 

解壓 *.gz 文件

# gzip -d test.txt.gz  # gzip -d test.txt.gz 

顯示壓縮的比率

# gzip -l *.gz  # gzip -l *.gz 

三、tar 命令

用來壓縮和解壓文件。tar 自己不具備壓縮功能,只具備打包功能,有關壓縮及解壓是調用其它的功能來完成。

弄清兩個概念:打包和壓縮。打包是指將一大堆文件或目錄變成一個總的文件;壓縮則是將一個大的文件經過一些壓縮算法變成一個小文件

經常使用參數:

-c 創建新的壓縮文件 -f 指定壓縮文件 -r 添加文件到已經壓縮文件包中 -u 添加改了和現有的文件到壓縮包中 -x 從壓縮包中抽取文件 -t 顯示壓縮文件中的內容 -z 支持gzip壓縮 -j 支持bzip2壓縮 -Z 支持compress解壓文件 -v 顯示操做過程-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

實例:
一、將文件所有打包成 tar 包

# tar -cvf log.tar 1.log,2.log 或tar -cvf log.* # tar -cvf log.tar 1.log,2.log 或tar -cvf log.*

二、將 /etc 下的全部文件及目錄打包到指定目錄,並使用 gz 壓縮

# tar -zcvf /tmp/etc.tar.gz /etc # tar -zcvf /tmp/etc.tar.gz /etc

三、查看剛打包的文件內容(必定加z,由於是使用 gzip 壓縮的)

# tar -ztvf /tmp/etc.tar.gz # tar -ztvf /tmp/etc.tar.gz

四、要壓縮打包 /home, /etc ,但不要 /home/dmtsai

# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc # tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc

4. unzip 命令

解壓 *.zip 文件:unzip test.zip 。
查看 *.zip 文件的內容:unzip -l jasper.zip 。

 

 


 

watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=

相關文章
相關標籤/搜索