Linux作業系統簡介

2021-09-25 13:00:06

Linux發行版簡介

  • 嚴格來講,Linux這個詞本身只表示Linux核心,但實際上人們已經習慣了用Linux來形容整個基於Linux核心的作業系統。

  • Linux 的發行版簡單說就是將 Linux 核心與應用軟體做一個打包。知名的發行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux

  • 雲桌面的Linux終端採用Ubuntu 16.04 server版,伺服器採用CentOS6.5

  • Linux發行版主要有DebianRedhat兩大系列

DebianRedhat
發行版代表Debian,Ubuntu,Linux MintRedhat,CentOS,Fedora
軟體包管理方式dpkg(管理原生的軟體包,無法處理依賴關係)、 apt(聯網下載軟體包,自動處理依賴關係)rpm(管理原生的軟體包,無法處理依賴關係)、 yum(聯網下載軟體包,自動處理依賴關係)
安裝包格式debrpm

學習Linux的必備硬體知識

關鍵硬體器件——CPU

CPU是計算機的運算核心和控制核心,部分CPU內建核芯顯示卡

  • x86架構:雲桌面採用Intel、AMD、海光、兆芯等晶片
  • ARM架構:雲桌面採用Rockchip的晶片

檢視CPU的資訊

  • lscpu
  • 在這裡插入圖片描述
  • cat /proc/cpuinfo
  • 在這裡插入圖片描述

關鍵硬體器件——儲存

型別

  • 固態硬碟(SSD):讀寫速度快,價格較高
  • 機械硬碟(HDD):讀寫速度慢,價格便宜,容量大
  • EMMC:多用於低端嵌入式裝置,容量較小,雲終端的EMMC有4GB、8GB、32GB幾種規格

檢視儲存裝置資訊的命令

  • fdisk
  • 在這裡插入圖片描述
  • blkid
  • 在這裡插入圖片描述
  • smartctl
  • parted
  • lsblk
  • 在這裡插入圖片描述

關鍵硬體器件——記憶體

目前最新是DDR4技術,速率可達3.2GHz

分為板載和插槽兩種介面

雲桌面的瘦終端採用1-2GB記憶體,胖終端標配4G或8GB記憶體,伺服器一般是16GB*N的記憶體

檢視記憶體的命令

  • free
  • cat /proc/meminfo

其他一些檢視硬體資訊的命令

檢視PCI裝置資訊:lspci
檢視USB裝置資訊: lsusb
檢視網路卡資訊:ifconfigethtoolip

Linux開機過程(以Ubuntu16.04為例)

  • 命令列中輸入systemd-analyze plot > boot.svg,用瀏覽器檢視boot.svg
  • 在這裡插入圖片描述
  • 從上圖可看出開機過程包含了BIOS(firmware)、boot loaderkernelsystemd這4個階段,再加上啟動應用軟體,共5個階段
  • 在這裡插入圖片描述
  • 虛擬中執行的Ubuntu則沒有BIOS(firmware)和boot loader這兩個階段。

階段1:BIOS

BIOS是(Basic Input Output System),是一組固化到計算機內主機板上一個ROM晶片上的程式。它儲存著計算機最重要的基本輸入輸出的程式、系統設定資訊、開機後自檢程式和系統自啟動程式。 其主要功能是為計算機提供最底層的、最直接的硬體設定和控制。X86架構才有BIOS,ARM架構沒有BIOS

DMI

  • DMI (Desktop Management Interface)是幫助收集電腦系統資訊的管理系統。通過DMI可以在Linux中查詢到包括CPU、記憶體、I/O擴充套件槽等在內的系統設定資訊。DMI通常將上述資訊儲存在BIOS中一個4KB大小的DMI資料區中

  • 雲終端的產品ID、產品型號、硬體版本、SN都儲存在DMI中,可通過dmidecode命令檢視。

BIOS與boot loader

  • MBR與GPT
    MBR:Master Boot Record,主引導磁區,它在硬碟上的三維地址為**(柱面,磁頭,磁區)=(0,0,1)**。MBR中存放著boot loader(446位元組)、分割區表(64位元組)和硬碟有效標誌(55AA) 。MBR最多隻能支援4個主分割區,無法支援超過2T的硬碟。
    GPT: GUID Partition Table ,是一個實體硬碟的分割區結構。最多支援 128 個分割區,允許大於 2 TB 的卷容量

Legacy BIOS 與UEFI BIOS

Legacy BIOS:傳統BIOS。Legecy BIOS從MBR中尋找boot loader。目前雲桌面的伺服器大多還是用Legacy BIOS。

UEFI BIOS:只支援64位元系統且磁碟分割區必須為GPT模式,可引導大於2T的硬碟,更快的啟動速度。 UEFI BIOS會自動搜尋硬碟根目錄的EFI目錄,而boot loader就在EFI資料夾中。目前雲終端都採用UEFI BIOS。

**總結:**BIOS從硬碟的特定位置尋找boot loader

階段2:boot Loader

主要功能

  • 提供選擇選單,讓使用者選擇不同的開機項
  • 載入核心,啟動作業系統
  • 將開機管理功能轉交其他boot loader負責

常見的boot loader有GRUB(GRand Unified Bootloader )ubootLILO,雲桌面的終端和伺服器都使用GRUB

為什麼平時一般見不到BootLoader的介面?因為超時時間被設為0了,直接從預設的啟動項啟動

  • 修改終端的grub超時時間:vim.tiny /boot/grub/custom.cfg,將第一行的set timeout=0改為set timeout=3

  • 檢視grub.cfg:vi /boot/grub/grub.cfg

修改grub設定以及grub組態檔的各種設定選項:

https://help.ubuntu.com/community/Grub2/Setup

https://www.jianshu.com/p/a24d51276a82

https://blog.csdn.net/mr_zing/article/details/41055617

https://blog.csdn.net/dc_show/article/details/47396649

https://blog.csdn.net/shana_8/article/details/81455657

gurb.cfg

grub.cfg中,會用到/boot/vmlinuz/boot/initrd.img兩個檔案

vmlinuz是可引導的、壓縮的核心。「vm」代表 「Virtual Memory」,z代表用gzip壓縮
initrd.img是個RAM Disk(通過軟體將一部分RAM模擬為硬碟的技術)的映像檔案,裡面包含了linux啟動時需要的目錄、可執行檔案、核心驅動模組等。

階段3:kernel

在這裡插入圖片描述
當前流行的Linux版本一般都採用模組化的核心,這種方式可以在不重新編譯構建核心的情形下增加功能模組(ko)。但考慮一種場景,如果磁碟是EMMC的,但相應驅動沒有編譯進kernel,kernel就無法存取磁碟了,更談不上載入ko了。這時候就需要用到RAM Disk技術了。

  1. boot loader載入kernelinitrd.img到記憶體中

  2. kernel啟動後自解壓,initrd.img的內容掛載為init根檔案系統

  3. kernel從init根檔案系統中載入所需功能模組

  4. kernel會根據grub.cfg中「root=XXX」部分所指定的內容建立一個根裝置,然後將根檔案系統以唯讀的方式掛載,並切換到真正的根檔案系統上

  5. 呼叫systemd程式,進入系統初始化階段。

​ 詳細流程可以參考man initrd

Bootloader引導核心後,進入第三個階段:核心。這邊並不打算介紹核心的函數呼叫流程,因為目前我自己在工作中還沒遇到需要解決的問題。今天想要介紹的是核心階段可能存在兩個根檔案系統。

階段4:systemd

systemdLinux 系統中最新的初始化系統,它主要的設計目標是克服 sysv init 固有的缺點,提高系統的啟動速度。

在硬體驅動成功後,kernel 會主動呼叫 systemd 。從右圖可以看出,graphical.targetmulti-user.tartgetbasic.targetsysinit.target存在依次依賴的關係,systemd按照依賴關係並行啟動target包含的服務後,完成圖形介面的啟動

rc-local.service會執行/etc/rc.local,自研指令碼可以從/etc/rc.local中進行啟動

在這裡插入圖片描述

階段5:應用軟體

使用pstree可以檢視程序樹。可以看到systemd的PID為1,所有應用軟體都是從systemd派生出來的

學習完linux開機的5個階段,請大家思考下,我們學習這部分知識的目的是什麼,能解決什麼問題?

1 開機速度的優化

2 定位BUG在哪個階段發生

3 偵錯,例如grub選擇核心,編輯啟動引數

4 功能開發,例如自研指令碼的加入,systemd服務的編寫
在這裡插入圖片描述

Linux常用命令

基本命令

檔案管理

ls, mv, cp, rm, chown, chmod, mkdir, find, touch, ln

  • ls

    ls [-alrtAFR] [name...]
    引數 :
    -a 顯示所有檔案及目錄 (ls內定將檔名或目錄名稱開頭為"."的視為隱藏檔,不會列出)
    -l 除檔名稱外,亦將檔案型態、許可權、擁有者、檔案大小等資訊詳細列出
    -r 將檔案以相反次序顯示(原定依英文字母次序)
    -t 將檔案依建立時間之先後次序列出
    -A 同 -a ,但不列出 "." (目前目錄)".." (父目錄)
    -F 在列出的檔名稱後加一符號;例如可執行檔則加 "*", 目錄則加 "/"
    -R 若目錄下有檔案,則以下之檔案亦皆依序列出
    
  • mv

    mv [options] source dest
    mv [options] source... directory
    引數說明:
    
    -i: 若指定目錄已有同名檔案,則先詢問是否覆蓋舊檔案;
    -f: 在mv操作要覆蓋某已有的目標檔案時不給任何指示;
    
    • mv引數設定與執行結果

      命令格式執行結果
      mv 檔名 檔名將原始檔名改為目標檔名
      mv 檔名 目錄名將檔案移動到目標目錄
      mv 目錄名 目錄名目標目錄已存在,將源目錄 移動到目標目錄;目標 目錄不存在則改名
      mv 目錄名 檔名出錯
  • cp

    cp [options] source dest
    cp [options] source... directory
    引數說明:
    -a:此選項通常在複製目錄時使用,它保留連結、檔案屬性,並複製目錄下的所有內容。其作用等於dpR引數組合。
    -d:複製時保留連結。這裡所說的連結相當於Windows系統中的快捷方式。
    -f:覆蓋已經存在的目標檔案而不給出提示。
    -i:與-f選項相反,在覆蓋目標檔案之前給出提示,要求使用者確認是否覆蓋,回答"y"時目標檔案將被覆蓋。
    -p:除複製檔案的內容外,還把修改時間和存取許可權也複製到新檔案中。
    -r:若給出的原始檔是一個目錄檔案,此時將複製該目錄下所有的子目錄和檔案。
    -l:不復制檔案,只是生成連結檔案。
    
  • rm

    rm [options] name...
    引數:
    -i 刪除前逐一詢問確認。
    -f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。
    -r 將目錄及以下之檔案亦逐一刪除。
    
  • chown

    chown [-cfhvR] [--help] [--version] user[:group] file...
    引數 :
    user : 新的檔案擁有者的使用者 ID
    group : 新的檔案擁有者的使用者組(group)
    -c : 顯示更改的部分的資訊
    -f : 忽略錯誤資訊
    -h :修復符號連結
    -v : 顯示詳細的處理資訊
    -R : 處理指定目錄以及其子目錄下的所有檔案
    --help : 顯示輔助說明
    --version : 顯示版本
    範例
    將檔案 file1.txt 的擁有者設為 runoob,群體的使用者 runoobgroup :
    chown runoob:runoobgroup file1.txt
    將目前目錄下的所有檔案與子目錄的擁有者皆設為 runoob,群體的使用者 runoobgroup:
    chown -R runoob:runoobgroup *
    
  • chmod

    chmod [-cfvR] [--help] [--version] mode file...
    引數說明
    mode : 許可權設定字串,格式如下 :
    [ugoa...][[+-=][rwxX]...][,...]
    其中:
    u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個群體(group)者,o 表示其他以外的人,a 表示這三者皆是。
    + 表示增加許可權、- 表示取消許可權、= 表示唯一設定許可權。
    r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
    其他引數說明:
    -c : 若該檔案許可權確實已經更改,才顯示其更改動作
    -f : 若該檔案許可權無法被更改也不要顯示錯誤訊息
    -v : 顯示許可權變更的詳細資料
    -R : 對目前目錄下的所有檔案與子目錄進行相同的許可權變更(即以遞迴的方式逐個變更)
    --help : 顯示輔助說明
    --version : 顯示版本
    範例
    將檔案 file1.txt 設為所有人皆可讀取:
    chmod ugo+r file1.txt
    將檔案 file1.txt 設為所有人皆可讀取:
    chmod a+r file1.txt
    將檔案 file1.txt 與 file2.txt 設為該檔案擁有者,與其所屬同一個群體者可寫入,但其他以外的人則不可寫入 :
    chmod ug+w,o-w file1.txt file2.txt
    將 ex1.py 設定為只有該檔案擁有者可以執行:
    chmod u+x ex1.py
    將目前目錄下的所有檔案與子目錄皆設為任何人可讀取:
    chmod -R a+r *
    此外chmod也可以用數位來表示許可權如:
    chmod 777 file
    語法為:
    chmod abc file
    其中a,b,c各為一個數位,分別表示User、Group、及Other的許可權。
    r=4,w=2,x=1
    若要rwx屬性則4+2+1=7;
    若要rw-屬性則4+2=6;
    若要r-x屬性則4+1=5chmod a=rwx filechmod 777 file
    效果相同
    chmod ug=rwx,o=x filechmod 771 file
    效果相同
    若用chmod 4755 filename可使此程式具有root的許可權
    
  • mkdir

    mkdir [-p] dirName
    引數說明:
    -p 確保目錄名稱存在,不存在的就建一個。
    範例
    在工作目錄下,建立一個名為 AAA 的子目錄 :
    mkdir AAA
    在工作目錄下的 BBB 目錄中,建立一個名為 Test 的子目錄。 若 BBB 目錄原本不存在,則建立一個。(注:本例若不加 -p,且原本 BBB目錄不存在,則產生錯誤。)
    mkdir -p BBB/Test
    
  • find

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} \;
    引數說明 :
    find 根據下列規則判斷 path 和 expression,在命令列上第一個 - ( ) , ! 之前的部份為 path,之後的是 expression。如果 path 是空字串則使用目前路徑,如果 expression 是空字串則使用 -print 為預設 expression。
    expression 中可使用的選項有二三十個之多,在此只介紹最常用的部份。
    -mount, -xdev : 只檢查和指定目錄在同一個檔案系統下的檔案,避免列出其它檔案系統中的檔案
    -amin n : 在過去 n 分鐘內被讀取過
    -anewer file : 比檔案 file 更晚被讀取過的檔案
    -atime n : 在過去n天內被讀取過的檔案
    -cmin n : 在過去 n 分鐘內被修改過
    -cnewer file :比檔案 file 更新的檔案
    -ctime n : 在過去n天內被修改過的檔案
    -empty : 空的檔案-gid n or -group name : gid 是 n 或是 group 名稱是 name
    -ipath p, -path p : 路徑名稱符合 p 的檔案,ipath 會忽略大小寫
    -name name, -iname name : 檔名稱符合 name 的檔案。iname 會忽略大小寫
    -size n : 檔案大小 是 n 單位,b 代表 512 位元組的區塊,c 表示字元數,k 表示 kilo bytes,w 是二個位元組。-type c : 檔案型別是 c 的檔案。
    d: 目錄
    c: 字型裝置檔案
    b: 區塊裝置檔案
    p: 具名貯列
    f: 一般檔案
    l: 符號連結
    s: socket
    -pid n : process id 是 n 的檔案
    你可以使用 ( ) 將運算式分隔,並使用下列運算。
    exp1 -and exp2
    ! expr
    -not expr
    exp1 -or exp2
    exp1, exp2
    範例
    將目前目錄及其子目錄下所有延伸檔名是 c 的檔案列出來。
    # find . -name "*.c"
    將目前目錄其其下子目錄中所有一般檔案列出
    # find . -type f
    將目前目錄及其子目錄下所有最近 20 天內更新過的檔案列出
    # find . -ctime -20
    查詢/var/log目錄中更改時間在7日以前的普通檔案,並在刪除之前詢問它們:
    # find /var/log -type f -mtime +7 -ok rm {} \;
    查詢前目錄中檔案屬主具有讀、寫許可權,並且檔案所屬組的使用者和其他使用者具有讀許可權的檔案:
    # find . -type f -perm 644 -exec ls -l {} \;
    為了查詢系統中所有檔案長度為0的普通檔案,並列出它們的完整路徑:
    # find / -type f -size 0 -exec ls -l {} \;
    
  • touch

    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」的新的空白檔案 
    
  • ln

     ln [引數][原始檔或目錄][目標檔案或目錄]
     其中引數的格式為
    [-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
    [--help] [--version] [--]
    命令功能 : 
    Linux檔案系統中,有所謂的連結(link),我們可以將其視為檔案的別名,而連結又可分為兩種 : 硬連結(hard link)與軟連結(symbolic link),硬連結的意思是一個檔案可以有多個名稱,而軟連結的方式則是產生一個特殊的檔案,該檔案的內容是指向另一個檔案的位置。硬連結是存在同一個檔案系統中,而軟連結卻可以跨越不同的檔案系統。
    不論是硬連結或軟連結都不會將原本的檔案複製一份,只會佔用非常少量的磁碟空間。
    軟連結:
    1.軟連結,以路徑的形式存在。類似於Windows作業系統中的快捷方式
    2.軟連結可以 跨檔案系統 ,硬連結不可以
    3.軟連結可以對一個不存在的檔名進行連結
    4.軟連結可以對目錄進行連結
    硬連結:
    1.硬連結,以檔案副本的形式存在。但不佔用實際空間。
    2.不允許給目錄建立硬連結
    3.硬連結只有在同一個檔案系統中才能建立
    命令引數
    必要引數:
    -b 刪除,覆蓋以前建立的連結
    -d 允許超級使用者製作目錄的硬連結
    -f 強制執行
    -i 互動模式,檔案存在則提示使用者是否覆蓋
    -n 把符號連結視為一般目錄
    -s 軟連結(符號連結)
    -v 顯示詳細的處理過程
    選擇引數:
    -S "-S<字尾備份字串> ""--suffix=<字尾備份字串>"
    -V "-V<備份方式>""--version-control=<備份方式>"
    --help 顯示幫助資訊
    --version 顯示版本資訊
    範例
    給檔案建立軟連結,為log2013.log檔案建立軟連結link2013,如果log2013.log丟失,link2013將失效:
    ln -s log2013.log link2013
    輸出:
    [root@localhost test]# ll
    -rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
    [root@localhost test]# ln -s log2013.log link2013
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
    -rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
    給檔案建立硬連結,為log2013.log建立硬連結ln2013,log2013.log與ln2013的各項屬性相同
    ln log2013.log ln2013
    輸出:
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
    -rw-r--r-- 1 root bin      61 11-13 06:03 log2013.log
    [root@localhost test]# ln log2013.log ln2013
    [root@localhost test]# ll
    lrwxrwxrwx 1 root root     11 12-07 16:01 link2013 -> log2013.log
    -rw-r--r-- 2 root bin      61 11-13 06:03 ln2013
    -rw-r--r-- 2 root bin      61 11-13 06:03 log2013.log
    

文字操作

grep, cat, wc, cut, awk, sed, tr

  • grep

    grep 命令用於查詢檔案裡符合條件的字串。
    grep 指令用於查詢內容包含指定的範本樣式的檔案,如果發現某檔案的內容符合所指定的範本樣式,預設 grep 指令會把含有範本樣式的那一列顯示出來。若不指定任何檔名稱,或是所給予的檔名為 -,則 grep 指令會從標準輸入裝置讀取資料。
    語法
    grep [-abcEFGhHilLnqrsvVwxy][-A<顯示列數>][-B<顯示列數>][-C<顯示列數>][-d<進行動作>][-e<範本樣式>][-f<範本檔案>][--help][範本樣式][檔案或目錄...]
    引數:
    -a 或 --text : 不要忽略二進位制的資料。
    -A<顯示行數> 或 --after-context=<顯示行數> : 除了顯示符合範本樣式的那一列之外,並顯示該行之後的內容。
    -b 或 --byte-offset : 在顯示符合樣式的那一行之前,標示出該行第一個字元的編號。
    -B<顯示行數> 或 --before-context=<顯示行數> : 除了顯示符合樣式的那一行之外,並顯示該行之前的內容。
    -c 或 --count : 計算符合樣式的列數。
    -C<顯示行數> 或 --context=<顯示行數>或-<顯示行數> : 除了顯示符合樣式的那一行之外,並顯示該行之前後的內容。
    -d <動作> 或 --directories=<動作> : 當指定要查詢的是目錄而非檔案時,必須使用這項引數,否則grep指令將回報資訊並停止動作。
    -e<範本樣式> 或 --regexp=<範本樣式> : 指定字串做為查詢檔案內容的樣式。
    -E 或 --extended-regexp : 將樣式為延伸的普通表示法來使用。
    -f<規則檔案> 或 --file=<規則檔案> : 指定規則檔案,其內容含有一個或多個規則樣式,讓grep查詢符合規則條件的檔案內容,格式為每行一個規則樣式。
    -F 或 --fixed-regexp : 將樣式視為固定字串的列表。
    -G 或 --basic-regexp : 將樣式視為普通的表示法來使用。
    -h 或 --no-filename : 在顯示符合樣式的那一行之前,不標示該行所屬的檔名稱。
    -H 或 --with-filename : 在顯示符合樣式的那一行之前,表示該行所屬的檔名稱。
    -i 或 --ignore-case : 忽略字元大小寫的差別。
    -l 或 --file-with-matches : 列出檔案內容符合指定的樣式的檔名稱。
    -L 或 --files-without-match : 列出檔案內容不符合指定的樣式的檔名稱。
    -n 或 --line-number : 在顯示符合樣式的那一行之前,標示出該行的列數編號。
    -o 或 --only-matching : 只顯示匹配PATTERN 部分。
    -q 或 --quiet或--silent : 不顯示任何資訊。
    -r 或 --recursive : 此引數的效果和指定"-d recurse"引數相同。
    -s 或 --no-messages : 不顯示錯誤資訊。
    -v 或 --revert-match : 顯示不包含匹配文字的所有行。
    -V 或 --version : 顯示版本資訊。
    -w 或 --word-regexp : 只顯示全字元合的列。
    -x --line-regexp : 只顯示全列符合的列。
    -y : 此引數的效果和指定"-i"引數相同。
    
    範例
    1、在當前目錄中,查詢字尾有 file 字樣的檔案中包含 test 字串的檔案,並列印出該字串的行。此時,可以使用如下命令:
    grep test *file 
    結果如下所示:
    $ grep test test* #查詢字首有「test」的檔案包含「test」字串的檔案  
    testfile1:This a Linux testfile! #列出testfile1 檔案中包含test字元的行  
    testfile_2:This is a linux testfile! #列出testfile_2 檔案中包含test字元的行  
    testfile_2:Linux test #列出testfile_2 檔案中包含test字元的行 
    2、以遞迴的方式查詢符合條件的檔案。例如,查詢指定目錄/etc/acpi 及其子目錄(如果存在子目錄的話)下所有檔案中包含字串"update"的檔案,並列印出該字串所在行的內容,使用的命令為:
    grep -r update /etc/acpi 
    輸出結果如下:
    $ grep -r update /etc/acpi #以遞迴的方式查詢「etc/acpi」  
    /etc/acpi/events/thinkpad-cmos:action=/usr/sbin/thinkpad-keys--update 
    3、反向查詢。前面各個例子是查詢並列印出符合條件的行,通過"-v"引數可以列印出不符合條件行的內容。
    查詢檔名中包含 test 的檔案中不包含test 的行,此時,使用的命令為:
    grep -v test *test*
    結果如下所示:
    $ grep-v test* #查詢檔名中包含test 的檔案中不包含test 的行  
    testfile1:helLinux!  
    testfile1:Linis a free Unix-type operating system.  
    testfile1:Lin  
    testfile_1:HELLO LINUX!  
    testfile_1:LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
    testfile_1:THIS IS A LINUX TESTFILE!  
    testfile_2:HELLO LINUX!  
    testfile_2:Linux is a free unix-type opterating system.  
    
  • cat

    cat [-AbeEnstTuv] [--help] [--version] fileName
    引數說明:
    -n 或 --number:由 1 開始對所有輸出的行數編號。
    -b 或 --number-nonblank:和 -n 相似,只不過對於空白行不編號。
    -s 或 --squeeze-blank:當遇到有連續兩行以上的空白行,就代換為一行的空白行。
    -v 或 --show-nonprinting:使用 ^ 和 M- 符號,除了 LFD 和 TAB 之外。
    -E 或 --show-ends : 在每行結束處顯示 $。
    -T 或 --show-tabs: 將 TAB 字元顯示為 ^I。
    -A, --show-all:等價於 -vET。
    -e:等價於"-vE"選項;
    -t:等價於"-vT"選項;
    範例:
    把 textfile1 的檔案內容加上行號後輸入 textfile2 這個檔案裡:
    cat -n textfile1 > textfile2
    把 textfile1 和 textfile2 的檔案內容加上行號(空白行不加)之後將內容附加到 textfile3 檔案裡:
    cat -b textfile1 textfile2 >> textfile3
    清空 /etc/test.txt 檔案內容:
    cat /dev/null > /etc/test.txt
    cat 也可以用來製作映象檔案。例如要製作軟碟的映象檔案,將軟碟放好後輸入:
    cat /dev/fd0 > OUTFILE
    相反的,如果想把 image file 寫到軟碟,輸入:
    cat IMG_FILE > /dev/fd0
    注:
    1. OUTFILE 指輸出的映象檔名。
    2. IMG_FILE 指映象檔案。
    3. 若從映象檔案寫回 device 時,device 容量需與相當。
    4. 通常用製作開機磁片。
    
  • wc

    Linux wc命令用於計算字數。
    利用wc指令我們可以計算檔案的Byte數、字數、或是列數,若不指定檔名稱、或是所給予的檔名為"-",則wc指令會從標準輸入裝置讀取資料。
    語法
    wc [-clw][--help][--version][檔案...]
    引數:
    -c或--bytes或--chars 只顯示Bytes數。
    -l或--lines 只顯示行數。
    -w或--words 只顯示字數。
    --help 線上幫助。
    --version 顯示版本資訊。
    範例
    在預設的情況下,wc將計算指定檔案的行數、字數,以及位元組數。使用的命令為:
    wc testfile 
    先檢視testfile檔案的內容,可以看到:
    $ cat testfile  
    Linux networks are becoming more and more common, but scurity is often an overlooked issue. Unfortunately, in today’s environment all networks are potential hacker targets, fro0m tp-secret military research networks to small home LANs.  
    Linux Network Securty focuses on securing Linux in a networked environment, where the security of the entire network needs to be considered rather than just isolated machines. It uses a mix of theory and practicl techniques to teach administrators how to install and use security applications, as well as how the applcations work and why they are necesary. 
    使用 wc統計,結果如下:
    $ wc testfile           # testfile檔案的統計資訊  
    3 92 598 testfile       # testfile檔案的行數為3、單詞數92、位元組數598 
    其中,3 個數位分別表示testfile檔案的行數、單詞數,以及該檔案的位元組數。
    如果想同時統計多個檔案的資訊,例如同時統計testfile、testfile_1、testfile_2,可使用如下命令:
    wc testfile testfile_1 testfile_2   #統計三個檔案的資訊 
    輸出結果如下:
    $ wc testfile testfile_1 testfile_2  #統計三個檔案的資訊  
    3 92 598 testfile                    #第一個檔案行數為3、單詞數92、位元組數598  
    9 18 78 testfile_1                   #第二個檔案的行數為9、單詞數18、位元組數78  
    3 6 32 testfile_2                    #第三個檔案的行數為3、單詞數6、位元組數32  
    15 116 708 總用量                    #三個檔案總共的行數為15、單詞數116、位元組數708 
    
  • cut

    Linux cut命令用於顯示每行從開頭算起 num1 到 num2 的文字。
    語法
    cut  [-bn] [file]
    cut [-c] [file]
    cut [-df] [file]
    使用說明:
    cut 命令從檔案的每一行剪下位元組、字元和欄位並將這些位元組、字元和欄位寫至標準輸出。
    如果不指定 File 引數,cut 命令將讀取標準輸入。必須指定 -b、-c 或 -f 標誌之一。
    引數:
    -b :以位元組為單位進行分割。這些位元組位置將忽略多位元組字元邊界,除非也指定了 -n 標誌。
    -c :–characters=列表 只選中指定的這些字元以字元為單位進行分割。
    -d : –delimiter=分界符 使用指定分界符代替製表符作為區域分界,預設為製表符。
    -f :–fields=LIST與-d一起使用,指定顯示哪個區域。
    -n :取消分割多位元組字元。僅和 -b 標誌一起使用。如果字元的最後一個位元組落在由 -b 標誌的 List 引數指示的範圍之內,該字元將被寫出;否則,該字元將被排除
    範例
    當你執行who命令時,會輸出類似如下的內容:
    $ who
    rocrocket :0           2009-01-08 11:07
    rocrocket pts/0        2009-01-08 11:23 (:0.0)
    rocrocket pts/1        2009-01-08 14:15 (:0.0)
    如果我們想提取每一行的第3個位元組,就這樣:
    $ who|cut -b 3
    c
    c
    //顯示查詢結果的 1-10個字元
    ll | cut -c 1-10 
    //顯示用空格切割後的 第一個元素
    ll | cut -d ' ' -f 1
    history |uniq|cut -c 8-999
    #擷取8到999位的內容
    cat /etc/passwd|awk 'NR==1' |cut -c 1,8,10,15,22-
    #過濾passwd密碼第一行,擷取指定位置,22- 為22位以後所有字元,-10為10位之前
    
  • awk

    AWK是一種處理文字檔案的語言,是一個強大的文字分析工具。
    之所以叫AWK是因為其取了三位創始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字元。
    語法
    awk [選項引數] 'script' var=value file(s)awk [選項引數] -f scriptfile var=value file(s)
    選項引數說明:
    -F fs or --field-separator fs
    指定輸入檔案折分隔符,fs是一個字串或者是一個正規表示式,如-F:。
    -v var=value or --asign var=value
    賦值一個使用者定義變數。
    -f scripfile or --file scriptfile
    從指令碼檔案中讀取awk命令。
    -mf nnn and -mr nnn
    對nnn值設定內在限制,-mf選項限制分配給nnn的最大塊數目;-mr選項限制記錄的最大數目。這兩個功能是Bell實驗室版awk的擴充套件功能,在標準awk中不適用。
    -W compact or --compat, -W traditional or --traditional
    在相容模式下執行awk。所以gawk的行為和標準的awk完全一樣,所有的awk擴充套件都被忽略。
    -W copyleft or --copyleft, -W copyright or --copyright
    列印簡短的版權資訊。
    -W help or --help, -W usage or --usage
    列印全部awk選項和每個選項的簡短說明。
    -W lint or --lint
    列印不能向傳統unix平臺移植的結構的警告。
    -W lint-old or --lint-old
    列印關於不能向傳統unix平臺移植的結構的警告。
    -W posix
    開啟相容模式。但有以下限制,不識別:/x、函數關鍵字、func、換碼序列以及當fs是一個空格時,將新行作為一個域分隔符;操作符**和**=不能代替^和^=;fflush無效。
    -W re-interval or --re-inerval
    允許間隔正規表示式的使用,參考(grep中的Posix字元類),如括號表示式[[:alpha:]]。
    -W source program-text or --source program-text
    使用program-text作為原始碼,可與-f命令混用。
    -W version or --version
    列印bug報告資訊的版本。
    基本用法
    log.txt文字內容如下:
    2 this is a test
    3 Are you like awk
    This's a test
    10 There are orange,apple,mongo
    用法一:
    awk '{[pattern] action}' {filenames}   # 行匹配語句 awk '' 只能用單引號
    範例:
    # 每行按空格或TAB分割,輸出文字中的1、4項
     $ awk '{print $1,$4}' log.txt
     ---------------------------------------------
     2 a
     3 like
     This's
     10 orange,apple,mongo
     # 格式化輸出
     $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
     ---------------------------------------------
     2        a
     3        like
     This's
     10       orange,apple,mongo
     
    用法二:
    awk -F  #-F相當於內建變數FS, 指定分割字元
    範例:
    # 使用","分割
     $  awk -F, '{print $1,$2}'   log.txt
     ---------------------------------------------
     2 this is a test
     3 Are you like awk
     This's a test
     10 There are orange apple
     # 或者使用內建變數
     $ awk 'BEGIN{FS=","} {print $1,$2}'     log.txt
     ---------------------------------------------
     2 this is a test
     3 Are you like awk
     This's a test
     10 There are orange apple
     # 使用多個分隔符.先使用空格分割,然後對分割結果再使用","分割
     $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
     ---------------------------------------------
     2 this test
     3 Are awk
     This's a
     10 There apple
    用法三:
    awk -v  # 設定變數
    範例:
     $ awk -va=1 '{print $1,$1+a}' log.txt
     ---------------------------------------------
     2 3
     3 4
     This's 1
     10 11
     $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
     ---------------------------------------------
     2 3 2s
     3 4 3s
     This's 1 This'ss
     10 11 10s
    用法四:
    awk -f {awk指令碼} {檔名}
    範例:
     $ awk -f cal.awk log.txt
    
    
    

    https://www.runoob.com/linux/linux-comm-awk.html

  • sed

    Linux sed 命令是利用指令碼來處理文字檔案。
    sed 可依照指令碼的指令來處理、編輯文字檔案。
    Sed 主要用來自動編輯一個或多個檔案、簡化對檔案的反覆操作、編寫轉換程式等。
    語法
    sed [-hnV][-e<script>][-f<script檔案>][文字檔案]
    引數說明:
    -e<script>或--expression=<script> 以選項中指定的script來處理輸入的文字檔案。
    -f<script檔案>或--file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案。
    -h或--help 顯示幫助。
    -n或--quiet或--silent 僅顯示script處理後的結果。
    -V或--version 顯示版本資訊。
    動作說明:
    a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
    c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
    d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
    i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
    p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
    s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
    範例
    在testfile檔案的第四行後新增一行,並將結果輸出到標準輸出,在命令列提示符下輸入如下命令:
    sed -e 4a\newLine testfile 
    首先檢視testfile中的內容如下:
    $ cat testfile #檢視testfile 中的內容  
    HELLO LINUX!  
    Linux is a free unix-type opterating system.  
    This is a linux testfile!  
    Linux test 
    使用sed命令後,輸出結果如下:
    $ sed -e 4a\newline testfile #使用sed 在第四行後新增新字串  
    HELLO LINUX! #testfile檔案原有的內容  
    Linux is a free unix-type opterating system.  
    This is a linux testfile!  
    Linux test  
    newline 
    以行為單位的新增/刪除
    將 /etc/passwd 的內容列出並且列印行號,同時,請將第 2~5 行刪除!
    [root@www ~]# nl /etc/passwd | sed '2,5d'
    1 root:x:0:0:root:/root:/bin/bash
    6 sync:x:5:0:sync:/sbin:/bin/sync
    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    .....(後面省略).....
    sed 的動作為 '2,5d' ,那個 d 就是刪除!因為 2-5 行給他刪除了,所以顯示的資料就沒有 2-5 行羅~ 另外,注意一下,原本應該是要下達 sed -e 才對,沒有 -e 也行啦!同時也要注意的是, sed 後面接的動作,請務必以 '' 兩個單引號括住喔!
    只要刪除第 2nl /etc/passwd | sed '2d' 
    要刪除第 3 到最後一行
    nl /etc/passwd | sed '3,$d' 
    在第二行後(亦即是加在第三行)加上『drink tea?』字樣!
    [root@www ~]# nl /etc/passwd | sed '2a drink tea'
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    drink tea
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    .....(後面省略).....
    那如果是要在第二行前
    nl /etc/passwd | sed '2i drink tea' 
    如果是要增加兩行以上,在第二行後面加入兩行字,例如 Drink tea or ..... 與 drink beer?
    [root@www ~]# nl /etc/passwd | sed '2a Drink tea or ......\
    > drink beer ?'
    1 root:x:0:0:root:/root:/bin/bash
    2 bin:x:1:1:bin:/bin:/sbin/nologin
    Drink tea or ......
    drink beer ?
    3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
    .....(後面省略).....
    每一行之間都必須要以反斜槓『 \ 』來進行新行的新增喔!所以,上面的例子中,我們可以發現在第一行的最後面就有 \ 存在。
    以行為單位的替換與顯示
    將第2-5行的內容取代成為『No 2-5 number』呢?
    [root@www ~]# nl /etc/passwd | sed '2,5c No 2-5 number'
    1 root:x:0:0:root:/root:/bin/bash
    No 2-5 number
    6 sync:x:5:0:sync:/sbin:/bin/sync
    .....(後面省略).....
    透過這個方法我們就能夠將資料整行取代了!
    僅列出 /etc/passwd 檔案內的第 5-7 行
    [root@www ~]# nl /etc/passwd | sed -n '5,7p'
    5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6 sync:x:5:0:sync:/sbin:/bin/sync
    7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    可以透過這個 sed 的以行為單位的顯示功能, 就能夠將某一個檔案內的某些行號選擇出來顯示。
    資料的搜尋並顯示
    搜尋 /etc/passwd有root關鍵字的行
    nl /etc/passwd | sed '/root/p'
    1  root:x:0:0:root:/root:/bin/bash
    1  root:x:0:0:root:/root:/bin/bash
    2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    3  bin:x:2:2:bin:/bin:/bin/sh
    4  sys:x:3:3:sys:/dev:/bin/sh
    5  sync:x:4:65534:sync:/bin:/bin/sync
    ....下面忽略 
    如果root找到,除了輸出所有行,還會輸出匹配行。
    使用-n的時候將只列印包含模板的行。
    nl /etc/passwd | sed -n '/root/p'
    1  root:x:0:0:root:/root:/bin/bash
    資料的搜尋並刪除
    刪除/etc/passwd所有包含root的行,其他行輸出
    nl /etc/passwd | sed  '/root/d'
    2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    3  bin:x:2:2:bin:/bin:/bin/sh
    ....下面忽略
    #第一行的匹配root已經刪除了
    資料的搜尋並執行命令
    搜尋/etc/passwd,找到root對應的行,執行後面花括號中的一組命令,每個命令之間用分號分隔,這裡把bash替換為blueshell,再輸出這行:
    nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'    
    1  root:x:0:0:root:/root:/bin/blueshell
    最後的q是退出。
    資料的搜尋並替換
    除了整行的處理模式之外, sed 還可以用行為單位進行部分資料的搜尋並取代。基本上 sed 的搜尋與替代的與 vi 相當的類似!他有點像這樣:
    sed 's/要被取代的字串/新的字串/g'
    先觀察原始資訊,利用 /sbin/ifconfig 查詢 IP
    [root@www ~]# /sbin/ifconfig eth0
    eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
    inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    .....(以下省略).....
    本機的ip是192.168.1.100。
    將 IP 前面的部分予以刪除
    [root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g'
    192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    接下來則是刪除後續的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
    將 IP 後面的部分予以刪除
    [root@www ~]# /sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
    192.168.1.100
    多點編輯
    一條sed命令,刪除/etc/passwd第三行到末尾的資料,並把bash替換為blueshell
    nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
    1  root:x:0:0:root:/root:/bin/blueshell
    2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    -e表示多點編輯,第一個編輯命令刪除/etc/passwd第三行到末尾的資料,第二條命令搜尋bash替換為blueshell。
    直接修改檔案內容(危險動作)
    sed 可以直接修改檔案的內容,不必使用管道命令或資料流重導向! 不過,由於這個動作會直接修改到原始的檔案,所以請你千萬不要隨便拿系統設定來測試! 我們還是使用檔案 regular_express.txt 檔案來測試看看吧!
    regular_express.txt 檔案內容如下:
    [root@www ~]# cat regular_express.txt 
    runoob.
    google.
    taobao.
    facebook.
    zhihu-
    weibo-
    利用 sed 將 regular_express.txt 內每一行結尾若為 . 則換成 !
    [root@www ~]# sed -i 's/\.$/\!/g' regular_express.txt
    [root@www ~]# cat regular_express.txt 
    runoob!
    google!
    taobao!
    facebook!
    zhihu-
    weibo- :q:q
    利用 sed 直接在 regular_express.txt 最後一行加入 # This is a test:
    [root@www ~]# sed -i '$a # This is a test' regular_express.txt
    [root@www ~]# cat regular_express.txt 
    runoob!
    google!
    taobao!
    facebook!
    zhihu-
    weibo-
    # This is a test
    由於 $ 代表的是最後一行,而 a 的動作是新增,因此該檔案最後新增 # This is a test!
    sed 的 -i 選項可以直接修改檔案內容,這功能非常有幫助!舉例來說,如果你有一個 100 萬行的檔案,你要在第 100 行加某些文字,此時使用 vim 可能會瘋掉!因為檔案太大了!那怎辦?就利用 sed 啊!透過 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修訂!
    
  • tr

    Linux tr 命令用於轉換或刪除檔案中的字元。
    tr 指令從標準輸入裝置讀取資料,經過字串轉譯後,將結果輸出到標準輸出裝置。
    語法
    tr [-cdst][--help][--version][第一字元集][第二字元集]  
    tr [OPTION]…SET1[SET2] 
    引數說明:
    -c, --complement:反選設定字元。也就是符合 SET1 的部份不做處理,不符合的剩餘部份才進行轉換
    -d, --delete:刪除指令字元
    -s, --squeeze-repeats:縮減連續重複的字元成指定的單個字元
    -t, --truncate-set1:削減 SET1 指定範圍,使之與 SET2 設定長度相等
    --help:顯示程式用法資訊
    --version:顯示程式本身的版本資訊
    字元集合的範圍:
    \NNN 八進位制值的字元 NNN (1 to 3 為八進位制值的字元)
    \\ 反斜槓
    \a Ctrl-G 鈴聲
    \b Ctrl-H 退格符
    \f Ctrl-L 走行換頁
    \n Ctrl-J 新行
    \r Ctrl-M 回車
    \t Ctrl-I tab鍵
    \v Ctrl-X 水平製表符
    CHAR1-CHAR2 :字元範圍從 CHAR1 到 CHAR2 的指定,範圍的指定以 ASCII 碼的次序為基礎,只能由小到大,不能由大到小。
    [CHAR*] :這是 SET2 專用的設定,功能是重複指定的字元到與 SET1 相同長度為止
    [CHAR*REPEAT] :這也是 SET2 專用的設定,功能是重複指定的字元到設定的 REPEAT 次數為止(REPEAT 的數位採 8 進位制計算,以 0 為開始)
    [:alnum:] :所有字母字元與數位
    [:alpha:] :所有字母字元
    [:blank:] :所有水平空格
    [:cntrl:] :所有控制字元
    [:digit:] :所有數位
    [:graph:] :所有可列印的字元(不包含空格符)
    [:lower:] :所有小寫字母
    [:print:] :所有可列印的字元(包含空格符)
    [:punct:] :所有標點字元
    [:space:] :所有水平與垂直空格符
    [:upper:] :所有大寫字母
    [:xdigit:] :所有 16 進位制的數位
    [=CHAR=] :所有符合指定的字元(等號裡的 CHAR,代表你可自訂的字元)
    範例
    將檔案testfile中的小寫字母全部轉換成大寫字母,此時,可使用如下命令:
    cat testfile |tr a-z A-Z 
    testfile檔案中的內容如下:
    $ cat testfile         #testfile原來的內容  
    Linux networks are becoming more and more common, 
    but scurity is often an overlooked  
    issue. Unfortunately, in today’s environment all networks 
    are potential hacker targets,  
    fro0m tp-secret military research networks to small home LANs.  
    Linux Network Securty focuses on securing Linux in a 
    networked environment, where the  
    security of the entire network needs to be considered
    rather than just isolated machines.  
    It uses a mix of theory and practicl techniques to 
    teach administrators how to install and  
    use security applications, as well as how the 
    applcations work and why they are necesary. 
    使用 tr 命令大小寫轉換後,得到如下輸出結果:
    
    $ cat testfile | tr a-z A-Z #轉換後的輸出  
    LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED  
    ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,  
    FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.  
    LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE  
    SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.  
    IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND  
    USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY. 
    大小寫轉換,也可以通過[:lower][:upper]引數來實現。例如使用如下命令:
    cat testfile |tr [:lower:] [:upper:] 
    輸出結果如下:
    $ cat testfile | tr [:lower:] [:upper:] #轉換後的輸出  
    LINUX NETWORKS ARE BECOMING MORE AND MORE COMMON, BUT SCURITY IS OFTEN AN OVERLOOKED  
    ISSUE. UNFORTUNATELY, IN TODAY’S ENVIRONMENT ALL NETWORKS ARE POTENTIAL HACKER TARGETS,  
    FROM TP-SECRET MILITARY RESEARCH NETWORKS TO SMALL HOME LANS.  
    LINUX NETWORK SECURTY FOCUSES ON SECURING LINUX IN A NETWORKED ENVIRONMENT, WHERE THE  
    SECURITY OF THE ENTIRE NETWORK NEEDS TO BE CONSIDERED RATHER THAN JUST ISOLATED MACHINES.  
    IT USES A MIX OF THEORY AND PRACTICL TECHNIQUES TO TEACH ADMINISTRATORS HOW TO INSTALL AND  
    USE SECURITY APPLICATIONS, AS WELL AS HOW THE APPLCATIONS WORK AND WHY THEY ARE NECESARY. 
    

磁碟管理

cd, pwd, df, du, dd, fdisk, mount/umount, mkfs

  • cd

    cd [dirName]
    dirName:要切換的目標目錄。
    範例
    跳到 /usr/bin/ :
    cd /usr/bin
    跳到自己的 home 目錄 :
    cd ~
    跳到目前目錄的上上兩層 :
    cd ../..
    
  • pwd

    pwd [--help][--version]
    引數說明:
    --help 線上幫助。
    --version 顯示版本資訊。
    
  • df

    Linux df命令用於顯示目前在Linux系統上的檔案系統的磁碟使用情況統計。
    語法
    df [選項]... [FILE]...
    檔案-a, --all 包含所有的具有 0 Blocks 的檔案系統
    檔案--block-size={SIZE} 使用 {SIZE} 大小的 Blocks
    檔案-h, --human-readable 使用人類可讀的格式(預設值是不加這個選項的...)
    檔案-H, --si 很像 -h, 但是用 1000 為單位而不是用 1024
    檔案-i, --inodes 列出 inode 資訊,不列出已使用 block
    檔案-k, --kilobytes 就像是 --block-size=1024
    檔案-l, --local 限制列出的檔案結構
    檔案-m, --megabytes 就像 --block-size=1048576
    檔案--no-sync 取得資訊前不 sync (預設值)
    檔案-P, --portability 使用 POSIX 輸出格式
    檔案--sync 在取得資訊前 sync
    檔案-t, --type=TYPE 限制列出檔案系統的 TYPE
    檔案-T, --print-type 顯示檔案系統的形式
    檔案-x, --exclude-type=TYPE 限制列出檔案系統不要顯示 TYPE
    檔案-v (忽略)
    檔案--help 顯示這個幫手並且離開
    檔案--version 輸出版本資訊並且離開
    
    顯示檔案系統的磁碟使用情況統計:
    # df 
    Filesystem     1K-blocks    Used     Available Use% Mounted on 
    /dev/sda6       29640780 4320704     23814388  16%     / 
    udev             1536756       4     1536752    1%     /dev 
    tmpfs             617620     888     616732     1%     /run 
    none                5120       0     5120       0%     /run/lock 
    none             1544044     156     1543888    1%     /run/shm 
    第一列指定檔案系統的名稱,第二列指定一個特定的檔案系統1K-塊1K是1024位元組為單位的總記憶體。用和可用列正在使用中,分別指定的記憶體量。
    使用列指定使用的記憶體的百分比,而最後一欄"安裝在"指定的檔案系統的掛載點。
    df也可以顯示磁碟使用的檔案系統資訊:
    # df test 
    Filesystem     1K-blocks    Used      Available Use% Mounted on 
    /dev/sda6       29640780    4320600   23814492  16%       / 
    用一個-i選項的df命令的輸出顯示inode資訊而非塊使用量。
    df -i 
    Filesystem      Inodes    IUsed    IFree     IUse% Mounted on 
    /dev/sda6      1884160    261964   1622196   14%        / 
    udev           212748     560      212188    1%         /dev 
    tmpfs          216392     477      215915    1%         /run 
    none           216392     3        216389    1%         /run/lock 
    none           216392     8        216384    1%         /run/shm 
    顯示所有的資訊:
    # df --total 
    Filesystem     1K-blocks    Used    Available Use% Mounted on 
    /dev/sda6       29640780 4320720    23814372  16%     / 
    udev             1536756       4    1536752   1%      /dev 
    tmpfs             617620     892    616728    1%      /run 
    none                5120       0    5120      0%      /run/lock 
    none             1544044     156    1543888   1%      /run/shm 
    total           33344320 4321772    27516860  14% 
    我們看到輸出的末尾,包含一個額外的行,顯示總的每一列。
    -h選項,通過它可以產生可讀的格式df命令的輸出:
    # df -h 
    Filesystem      Size  Used   Avail Use% Mounted on 
    /dev/sda6       29G   4.2G   23G   16%     / 
    udev            1.5G  4.0K   1.5G   1%     /dev 
    tmpfs           604M  892K   603M   1%     /run 
    none            5.0M     0   5.0M   0%     /run/lock 
    none            1.5G  156K   1.5G   1%     /run/shm 
    我們可以看到輸出顯示的數位形式的'G'(千兆位元組),"M"(兆位元組)和"K"(千位元組)。
    這使輸出容易閱讀和理解,從而使顯示可讀的。請注意,第二列的名稱也發生了變化,為了使顯示可讀的"大小"
  • du

    Linux du命令用於顯示目錄或檔案的大小。
    du會顯示指定的目錄或檔案所佔用的磁碟空間。
    語法
    du [-abcDhHklmsSx][-L <符號連線>][-X <檔案>][--block-size][--exclude=<目錄或檔案>][--max-depth=<目錄層數>][--help][--version][目錄或檔案]
    引數說明:
    -a或-all 顯示目錄中個別檔案的大小。
    -b或-bytes 顯示目錄或檔案大小時,以byte為單位。
    -c或--total 除了顯示個別目錄或檔案的大小外,同時也顯示所有目錄或檔案的總和。
    -D或--dereference-args 顯示指定符號連線的原始檔大小。
    -h或--human-readable 以K,M,G為單位,提高資訊的可讀性。
    -H或--si 與-h引數相同,但是K,M,G是以1000為換算單位。
    -k或--kilobytes 以1024 bytes為單位。
    -l或--count-links 重複計算硬體連線的檔案。
    -L<符號連線>或--dereference<符號連線> 顯示選項中所指定符號連線的原始檔大小。
    -m或--megabytes 以1MB為單位。
    -s或--summarize 僅顯示總計。
    -S或--separate-dirs 顯示個別目錄的大小時,並不含其子目錄的大小。
    -x或--one-file-xystem 以一開始處理時的檔案系統為準,若遇上其它不同的檔案系統目錄則略過。
    -X<檔案>或--exclude-from=<檔案><檔案>指定目錄或檔案。
    --exclude=<目錄或檔案> 略過指定的目錄或檔案。
    --max-depth=<目錄層數> 超過指定層數的目錄後,予以忽略。
    --help 顯示幫助。
    --version 顯示版本資訊。
    範例
    顯示目錄或者檔案所佔空間:
    # du
    608     ./test6
    308     ./test4
    4       ./scf/lib
    4       ./scf/service/deploy/product
    4       ./scf/service/deploy/info
    12      ./scf/service/deploy
    16      ./scf/service
    4       ./scf/doc
    4       ./scf/bin
    32      ./scf
    8       ./test3
    1288    .
    只顯示當前目錄下面的子目錄的目錄大小和當前目錄的總的大小,最下面的1288為當前目錄的總大小
    顯示指定檔案所佔空間
    # du log2012.log 
    300     log2012.log
    方便閱讀的格式顯示test目錄所佔空間情況:
    # du -h test
    608K    test/test6
    308K    test/test4
    4.0K    test/scf/lib
    4.0K    test/scf/service/deploy/product
    4.0K    test/scf/service/deploy/info
    12K     test/scf/service/deploy
    16K     test/scf/service
    4.0K    test/scf/doc
    4.0K    test/scf/bin
    32K     test/scf
    8.0K    test/test3
    1.3M    test
    
  • dd

    Linux dd命令用於讀取、轉換並輸出資料。
    dd可從標準輸入或檔案中讀取資料,根據指定的格式來轉換資料,再輸出到檔案、裝置或標準輸出。
    引數說明:
    if=檔名:輸入檔名,預設為標準輸入。即指定原始檔。
    of=檔名:輸出檔名,預設為標準輸出。即指定目的檔案。
    ibs=bytes:一次讀入bytes個位元組,即指定一個塊大小為bytes個位元組。
    obs=bytes:一次輸出bytes個位元組,即指定一個塊大小為bytes個位元組。
    bs=bytes:同時設定讀入/輸出的塊大小為bytes個位元組。
    cbs=bytes:一次轉換bytes個位元組,即指定轉換緩衝區大小。
    skip=blocks:從輸入檔案開頭跳過blocks個塊後再開始複製。
    seek=blocks:從輸出檔案開頭跳過blocks個塊後再開始複製。
    count=blocks:僅拷貝blocks個塊,塊大小等於ibs指定的位元組數。
    conv=<關鍵字>,關鍵字可以有以下11種:
    	conversion:用指定的引數轉換檔案。
    	ascii:轉換ebcdic為ascii
    	ebcdic:轉換ascii為ebcdic
    	ibm:轉換ascii為alternate ebcdic
    	block:把每一行轉換為長度為cbs,不足部分用空格填充
    	unblock:使每一行的長度都為cbs,不足部分用空格填充
    	lcase:把大寫字元轉換為小寫字元
    	ucase:把小寫字元轉換為大寫字元
    	swab:交換輸入的每對位元組
    	noerror:出錯時不停止
    	notrunc:不截短輸出檔案
    	sync:將每個輸入塊填充到ibs個位元組,不足部分用空(NUL)字元補齊。
    --help:顯示幫助資訊
    --version:顯示版本資訊
    範例
    在Linux 下製作啟動盤,可使用如下命令:
    dd if=boot.img of=/dev/fd0 bs=1440k 
    將testfile檔案中的所有英文字母轉換為大寫,然後轉成為testfile_1檔案,在命令提示字元中使用如下命令:
    dd if=testfile_2 of=testfile_1 conv=ucase 
    其中testfile_2 的內容為:
    $ cat testfile_2 #testfile_2的內容  
    HELLO LINUX!  
    Linux is a free unix-type opterating system.  
    This is a linux testfile!  
    Linux test 
    轉換完成後,testfile_1 的內容如下:
    
    $ dd if=testfile_2 of=testfile_1 conv=ucase #使用dd 命令,大小寫轉換記錄了0+1 的讀入  
    記錄了0+1 的寫出  
    95位元組(95 B)已複製,0.000131446 秒,723 KB/s  
    cmd@hdd-desktop:~$ cat testfile_1 #檢視轉換後的testfile_1檔案內容  
    HELLO LINUX!  
    LINUX IS A FREE UNIX-TYPE OPTERATING SYSTEM.  
    THIS IS A LINUX TESTFILE!  
    LINUX TEST #testfile_2中的所有字元都變成了大寫字母 
    由標準輸入裝置讀入字串,並將字串轉換成大寫後,再輸出到標準輸出裝置,使用的命令為:
    dd conv=ucase 
    輸入以上命令後按確認鍵,輸入字串,再按確認鍵,按組合鍵Ctrl+D 退出,出現以下結果:
    $ dd conv=ucase 
    Hello Linux! #輸入字串後按確認鍵  
    HELLO LINUX! #按組合鍵Ctrl+D退出,轉換成大寫結果  
    記錄了0+1 的讀入  
    記錄了0+1 的寫出  
    13位元組(13 B)已複製,12.1558 秒,0.0 KB/s 
    
  • fdisk

    Linux fdisk是一個建立和維護分割區表的程式,它相容DOS型別的分割區表、BSD或者SUN型別的磁碟列表。
    語法
    fdisk [必要引數][選擇引數]
    必要引數:
    -l 列出素所有分割區表
    -u 與"-l"搭配使用,顯示分割區數目
    選擇引數:
    -s<分割區編號> 指定分割區
    -v 版本資訊
    選單操作說明
    m :顯示選單和幫助資訊
    a :活動分割區標記/引導分割區
    d :刪除分割區
    l :顯示分割區型別
    n :新建分割區
    p :顯示分割區資訊
    q :退出不儲存
    t :設定分割區號
    v :進行分割區檢查
    w :儲存修改
    x :擴充套件應用,高階功能
    範例
    顯示當前分割區情況:
    # fdisk -l
    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    255 heads, 63 sectors/track, 1305 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
      Device Boot   Start     End   Blocks  Id System
    /dev/sda1  *      1     13   104391  83 Linux
    /dev/sda2       14    1305  10377990  8e Linux LVM
    
    Disk /dev/sdb: 5368 MB, 5368709120 bytes
    255 heads, 63 sectors/track, 652 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
    Disk /dev/sdb doesn't contain a valid partition table
    顯示SCSI硬碟的每個分割區情況
    # fdisk -lu  
    Disk /dev/sda: 10.7 GB, 10737418240 bytes
    255 heads, 63 sectors/track, 1305 cylinders, total 20971520 sectors
    Units = sectors of 1 * 512 = 512 bytes
    
      Device Boot   Start     End   Blocks  Id System
    /dev/sda1  *     63   208844   104391  83 Linux
    /dev/sda2     208845  20964824  10377990  8e Linux LVM
    
    Disk /dev/sdb: 5368 MB, 5368709120 bytes
    255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
    Units = sectors of 1 * 512 = 512 bytes
    
    Disk /dev/sdb doesn't contain a valid partition table
    
  • mount/umount

    Linux mount命令是經常會使用到的命令,它用於掛載Linux系統外的檔案。
    語法
    mount [-hV]
    mount -a [-fFnrsvw] [-t vfstype]
    mount [-fnrsvw] [-o options [,...]] device | dir
    mount [-fnrsvw] [-t vfstype] [-o options] device dir
    引數說明:
    -V:顯示程式版本
    -h:顯示輔助訊息
    -v:顯示較訊息,通常和 -f 用來除錯。
    -a:將 /etc/fstab 中定義的所有檔案系統掛上。
    -F:這個命令通常和 -a 一起使用,它會為每一個 mount 的動作產生一個行程負責執行。在系統需要掛上大量 NFS 檔案系統時可以加快掛上的動作。
    -f:通常用在除錯的用途。它會使 mount 並不執行實際掛上的動作,而是模擬整個掛上的過程。通常會和 -v 一起使用。
    -n:一般而言,mount 在掛上後會在 /etc/mtab 中寫入一筆資料。但在系統中沒有可寫入檔案系統存在的情況下可以用這個選項取消這個動作。
    -s-r:等於 -o ro
    -w:等於 -o rw
    -L:將含有特定標籤的硬碟分割掛上。
    -U:將檔案分割序號為 的檔案系統掛下。-L 和 -U 必須在/proc/partition 這種檔案存在時才有意義。
    -t:指定檔案系統的型態,通常不必指定。mount 會自動選擇正確的型態。
    -o async:開啟非同步模式,所有的檔案讀寫動作都會用非同步模式執行。
    -o sync:在同步模式下執行。
    -o atime、-o noatime:當 atime 開啟時,系統會在每次讀取檔案時更新檔案的『上一次呼叫時間』。當我們使用 flash 檔案系統時可能會選項把這個選項關閉以減少寫入的次數。
    -o auto、-o noauto:開啟/關閉自動掛上模式。
    -o defaults:使用預設的選項 rw, suid, dev, exec, auto, nouser, and async.
    -o dev、-o nodev-o exec、-o noexec允許執行檔被執行。
    -o suid、-o nosuid:允許執行檔在 root 許可權下執行。
    -o user、-o nouser:使用者可以執行 mount/umount 的動作。
    -o remount:將一個已經掛下的檔案系統重新用不同的方式掛上。例如原先是唯讀的系統,現在用可讀寫的模式重新掛上。
    -o ro:用唯讀模式掛上。
    -o rw:用可讀寫模式掛上。
    -o loop=:使用 loop 模式用來將一個檔案當成硬碟分割掛上系統。
    範例
    將 /dev/hda1 掛在 /mnt 之下。
    #mount /dev/hda1 /mnt
    將 /dev/hda1 用唯讀模式掛在 /mnt 之下。
    #mount -o ro /dev/hda1 /mnt
    將 /tmp/image.iso 這個光碟的 image 檔使用 loop 模式掛在 /mnt/cdrom之下。用這種方法可以將一般網路上可以找到的 Linux 光 碟 ISO 檔在不燒錄成光碟的情況下檢視其內容。
    #mount -o loop /tmp/image.iso /mnt/cdrom
    
    Linux umount命令用於卸除檔案系統。
    umount可卸除目前掛在Linux目錄中的檔案系統。
    語法
    umount [-ahnrvV][-t <檔案系統型別>][檔案系統]
    引數:
    -a 卸除/etc/mtab中記錄的所有檔案系統。
    -h 顯示幫助。
    -n 卸除時不要將資訊存入/etc/mtab檔案中。
    -r 若無法成功卸除,則嘗試以唯讀的方式重新掛入檔案系統。
    -t<檔案系統型別> 僅卸除選項中所指定的檔案系統。
    -v 執行時顯示詳細的資訊。
    -V 顯示版本資訊。
    [檔案系統] 除了直接指定檔案系統外,也可以用裝置名稱或掛入點來表示檔案系統。
    範例
    下面兩條命令分別通過裝置名和掛載點解除安裝檔案系統,同時輸出詳細資訊:
    # umount -v /dev/sda1          通過裝置名解除安裝  
    /dev/sda1 umounted  
    # umount -v /mnt/mymount/      通過掛載點解除安裝  
    /tmp/diskboot.img umounted 
    如果裝置正忙,解除安裝即告失敗。解除安裝失敗的常見原因是,某個開啟的shell當前目錄為掛載點裡的某個目錄:
    # umount -v /mnt/mymount/  
    umount: /mnt/mymount: device is busy  
    umount: /mnt/mymount: device is busy 
    
  • mkfs

    使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks]
    Linux mkfs命令用於在特定的分割區上建立 linux 檔案系統
    引數 :
    device : 預備檢查的硬碟分割區,例如:/dev/sda1
    -V : 詳細顯示模式
    -t : 給定檔案系統的型式,Linux 的預設值為 ext2
    -c : 在製做檔案系統前,檢查該partition 是否有壞軌
    -l bad_blocks_file : 將有壞軌的block資料加到 bad_blocks_file 裡面
    block : 給定 block 的大小
    範例
    在 /dev/hda5 上建一個 msdos 的檔案系統,同時檢查是否有壞軌存在,並且將過程詳細列出來 :
    mkfs -V -t msdos -c /dev/hda5
    將sda6分割區格式化為ext3格式
    mfks -t ext3 /dev/sda6  
    注意:這裡的檔案系統是要指定的,比如 ext3 ;reiserfs ;ext2 ;fat32 ;msdos 等。
    

系統管理

top, ps, pstree, date, shutdown, reboot, passwd

  • top

    Linux top命令用於實時顯示 process 的動態。
    使用許可權:所有使用者。
    top [-] [d delay] [q] [c] [S] [s] [i] [n] [b]
    引數說明:
    d : 改變顯示的更新速度,或是在交談式指令列( interactive command)按 s
    q : 沒有任何延遲的顯示速度,如果使用者是有 superuser 的許可權,則 top 將會以最高的優先序執行
    c : 切換顯示模式,共有兩種模式,一是隻顯示執行檔的名稱,另一種是顯示完整的路徑與名稱
    S : 累積模式,會將己完成或消失的子行程 ( dead child process ) 的 CPU time 累積起來
    s : 安全模式,將交談式指令取消, 避免潛在的危機
    i : 不顯示任何閒置 (idle) 或無用 (zombie) 的行程
    n : 更新的次數,完成後將會退出 top
    b : 批次檔模式,搭配 "n" 引數一起使用,可以用來將 top 的結果輸出到檔案內
    範例
    顯示程序資訊
    # top
    顯示完整命令
    # top -c
    以批次處理模式顯示程式資訊
    # top -b
    以累積模式顯示程式資訊
    # top -S
    設定資訊更新次數
    top -n 2
    //表示更新兩次後終止更新顯示
    設定資訊更新時間
    # top -d 3
    //表示更新週期為3秒
    顯示指定的程序資訊
    # top -p 139
    //顯示程序號為139的程序資訊,CPU、記憶體佔用率等
    顯示更新十次後退出
    top -n 10
    使用者將不能利用交談式指令來對行程下命令
    top -s
    
  • ps

    Linux ps命令用於顯示當前程序 (process) 的狀態。
    語法
    ps [options] [--help]
    引數:
    ps 的引數非常多, 在此僅列出幾個常用的引數並大略介紹含義
    -A 列出所有的行程
    -w 顯示加寬可以顯示較多的資訊
    -au 顯示較詳細的資訊
    -aux 顯示所有包含其他使用者的行程
    au(x) 輸出格式 :
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    USER: 行程擁有者
    PID: pid
    %CPU: 佔用的 CPU 使用率
    %MEM: 佔用的記憶體使用率
    VSZ: 佔用的虛擬記憶體大小
    RSS: 佔用的記憶體大小
    TTY: 終端的次要裝置號碼 (minor device number of tty)
    STAT: 該行程的狀態:
    D: 無法中斷的休眠狀態 (通常 IO 的程序)
    R: 正在執行中
    S: 靜止狀態
    T: 暫停執行
    Z: 不存在但暫時無法消除
    W: 沒有足夠的記憶體分頁可分配
    <: 高優先序的行程
    N: 低優先序的行程
    L: 有記憶體分頁分配並鎖在記憶體內 (實時系統或捱A I/O)
    START: 行程開始時間
    TIME: 執行的時間
    COMMAND:所執行的指令
    範例
    # ps -A 顯示程序資訊
    PID TTY     TIME CMD
      1 ?    00:00:02 init
      2 ?    00:00:00 kthreadd
      3 ?    00:00:00 migration/0
      4 ?    00:00:00 ksoftirqd/0
      5 ?    00:00:00 watchdog/0
      6 ?    00:00:00 events/0
      7 ?    00:00:00 cpuset
      8 ?    00:00:00 khelper
      9 ?    00:00:00 netns
      10 ?    00:00:00 async/mgr
      11 ?    00:00:00 pm
      12 ?    00:00:00 sync_supers
      13 ?    00:00:00 bdi-default
      14 ?    00:00:00 kintegrityd/0
      15 ?    00:00:02 kblockd/0
      16 ?    00:00:00 kacpid
      17 ?    00:00:00 kacpi_notify
      18 ?    00:00:00 kacpi_hotplug
      19 ?    00:00:27 ata/0
    ……省略部分結果
    30749 pts/0  00:00:15 gedit
    30886 ?    00:01:10 qtcreator.bin
    30894 ?    00:00:00 qtcreator.bin 
    31160 ?    00:00:00 dhclient
    31211 ?    00:00:00 aptd
    31302 ?    00:00:00 sshd
    31374 pts/2  00:00:00 bash
    31396 pts/2  00:00:00 ps
    顯示指定使用者資訊
    # ps -u root //顯示root程序使用者資訊
     PID TTY     TIME CMD
      1 ?    00:00:02 init
      2 ?    00:00:00 kthreadd
      3 ?    00:00:00 migration/0
      4 ?    00:00:00 ksoftirqd/0
      5 ?    00:00:00 watchdog/0
      6 ?    00:00:00 events/0
      7 ?    00:00:00 cpuset
      8 ?    00:00:00 khelper
      9 ?    00:00:00 netns
      10 ?    00:00:00 async/mgr
      11 ?    00:00:00 pm
      12 ?    00:00:00 sync_supers
      13 ?    00:00:00 bdi-default
      14 ?    00:00:00 kintegrityd/0
      15 ?    00:00:02 kblockd/0
      16 ?    00:00:00 kacpid
    ……省略部分結果
    30487 ?    00:00:06 gnome-terminal
    30488 ?    00:00:00 gnome-pty-helpe
    30489 pts/0  00:00:00 bash
    30670 ?    00:00:00 debconf-communi 
    30749 pts/0  00:00:15 gedit
    30886 ?    00:01:10 qtcreator.bin
    30894 ?    00:00:00 qtcreator.bin 
    31160 ?    00:00:00 dhclient
    31211 ?    00:00:00 aptd
    31302 ?    00:00:00 sshd
    31374 pts/2  00:00:00 bash
    31397 pts/2  00:00:00 ps
    顯示所有程序資訊,連同命令列
    # ps -ef //顯示所有命令,連帶命令列
    UID    PID PPID C STIME TTY     TIME CMD
    root     1   0 0 10:22 ?    00:00:02 /sbin/init
    root     2   0 0 10:22 ?    00:00:00 [kthreadd]
    root     3   2 0 10:22 ?    00:00:00 [migration/0]
    root     4   2 0 10:22 ?    00:00:00 [ksoftirqd/0]
    root     5   2 0 10:22 ?    00:00:00 [watchdog/0]
    root     6   2 0 10:22 ?    /usr/lib/NetworkManager
    ……省略部分結果
    root   31302 2095 0 17:42 ?    00:00:00 sshd: root@pts/2 
    root   31374 31302 0 17:42 pts/2  00:00:00 -bash
    root   31400   1 0 17:46 ?    00:00:00 /usr/bin/python /usr/sbin/aptd
    root   31407 31374 0 17:48 pts/2  00:00:00 ps -ef
    
  • pstree

    Linux pstree命令將所有行程以樹狀圖顯示,樹狀圖將會以 pid (如果有指定) 或是以 init 這個基本行程為根 (root),如果有指定使用者 id,則樹狀圖會只顯示該使用者所擁有的行程。
    使用許可權:所有使用者。
    語法
    pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-G|-U] [pid|user]
    或
    pstree -V
    引數說明:
    -a 顯示該行程的完整指令及引數, 如果是被記憶體置換出去的行程則會加上括號
    -c 如果有重覆的行程名, 則分開列出(預設值是會在前面加上 *)
    範例
    顯示程序的關係
    pstree
    init-+-amd
    |-apmd
    |-atd
    |-httpd---10*[httpd]
    %pstree -p
    init(1)-+-amd(447)
    |-apmd(105)
    |-atd(339)
    %pstree -c
    init-+-amd
    |-apmd
    |-atd
    |-httpd-+-httpd
    | |-httpd
    | |-httpd
    | |-httpd
    ....
    特別表明在執行的程序
    # pstree -apnh //顯示程序間的關係
    同時顯示使用者名稱稱
    # pstree -u //顯示使用者名稱稱
    
  • date

    Linux date命令可以用來顯示或設定系統的日期與時間,在顯示方面,使用者可以設定欲顯示的格式,格式設定為一個加號後接數個標記,其中可用的標記列表如下:
    時間方面:
    % : 印出 %
    %n : 下一行
    %t : 跳格
    %H : 小時(00..23)
    %I : 小時(01..12)
    %k : 小時(0..23)
    %l : 小時(1..12)
    %M : 分鐘(00..59)
    %p : 顯示本地 AM 或 PM
    %r : 直接顯示時間 (12 小時制,格式為 hh:mm:ss [AP]M)
    %s :197011 日 00:00:00 UTC 到目前為止的秒數
    %S :(00..61)
    %T : 直接顯示時間 (24 小時制)
    %X : 相當於 %H:%M:%S
    %Z : 顯示時區
    日期方面:
    %a : 星期幾 (Sun..Sat)
    %A : 星期幾 (Sunday..Saturday)
    %b : 月份 (Jan..Dec)
    %B : 月份 (January..December)
    %c : 直接顯示日期與時間
    %d :(01..31)
    %D : 直接顯示日期 (mm/dd/yy)
    %h : 同 %b
    %j : 一年中的第幾天 (001..366)
    %m : 月份 (01..12)
    %U : 一年中的第幾周 (00..53) (以 Sunday 為一週的第一天的情形)
    %w : 一週中的第幾天 (0..6)
    %W : 一年中的第幾周 (00..53) (以 Monday 為一週的第一天的情形)
    %x : 直接顯示日期 (mm/dd/yy)
    %y : 年份的最後兩位數位 (00.99)
    %Y : 完整年份 (0000..9999)
    若是不以加號作為開頭,則表示要設定時間,而時間格式為 MMDDhhmm[[CC]YY][.ss],其中 MM 為月份,DD 為日,hh 為小時,mm 為分鐘,CC 為年份前兩位數位,YY 為年份後兩位數位,ss 為秒數。
    使用許可權:所有使用者。
    當您不希望出現無意義的 0(比如說 1999/03/07),則可以在標記中插入 - 符號,比如說 date '+%-H:%-M:%-S' 會把時分秒中無意義的 0 給去掉,像是原本的 08:09:04 會變為 8:9:4。另外,只有取得許可權者(比如說 root)才能設定系統時間。
    當您以 root 身分更改了系統時間之後,請記得以 clock -w 來將系統時間寫入 CMOS 中,這樣下次重新開機時系統時間才會持續抱持最新的正確值。
    語法
    date [-u] [-d datestr] [-s datestr] [--utc] [--universal] [--date=datestr] [--set=datestr] [--help] [--version] [+FORMAT] [MMDDhhmm[[CC]YY][.ss]]
    引數說明:
    -d datestr : 顯示 datestr 中所設定的時間 (非系統時間)
    --help : 顯示輔助訊息
    -s datestr : 將系統時間設為 datestr 中所設定的時間
    -u : 顯示目前的格林威治時間
    --version : 顯示版本編號
    範例
    顯示當前時間
    # date512 14:08:12 CST 2010
    # date '+%c' 
    2010年05月12日 星期三 14時09分02秒
    # date '+%D' //顯示完整的時間
    05/12/10
    # date '+%x' //顯示數位日期,年份兩位數表示
    2010年05月12日
    # date '+%T' //顯示日期,年份用四位數表示
    14:09:31
    # date '+%X' //顯示24小時的格式
    14時09分39秒
    按自己的格式輸出
    # date '+usr_time: $1:%M %P -hey'
    usr_time: $1:16 下午 -hey
    顯示時間後跳行,再顯示目前日期
    date '+%T%n%D'
    
  • shutdown

    Linux shutdown命令可以用來進行關機程式,並且在關機以前傳送訊息給所有使用者正在執行的程式,shutdown 也可以用來重開機。
    使用許可權:系統管理者。
    語法
    shutdown [-t seconds] [-rkhncfF] time [message]
    引數說明:
    -t seconds : 設定在幾秒鐘之後進行關機程式。
    -k : 並不會真的關機,只是將警告訊息傳送給所有使用者。
    -r : 關機後重新開機。
    -h : 關機後停機。
    -n : 不採用正常程式來關機,用強迫的方式殺掉所有執行中的程式後自行關機。
    -c : 取消目前已經進行中的關機動作。
    -f : 關機時,不做 fcsk 動作(檢查 Linux 檔系統)。
    -F : 關機時,強迫進行 fsck 動作。
    time : 設定關機的時間。
    message : 傳送給所有使用者的警告訊息。
    範例
    立即關機
    # shutdown -h now
    指定5分鐘後關機
    # shutdown +5 「System will shutdown after 5 minutes」 //5分鐘夠關機並顯示警告資訊
    
  • reboot

    Linux reboot命令用於用來重新啟動計算機。
    若系統的 runlevel 為 06 ,則重新開機,否則以 shutdown 指令(加上 -r 引數)來取代
    語法
    reboot [-n] [-w] [-d] [-f] [-i]
    引數:
    -n : 在重開機前不做將記憶體資料寫回硬碟的動作
    -w : 並不會真的重開機,只是把記錄寫到 /var/log/wtmp 檔案裡
    -d : 不把記錄寫到 /var/log/wtmp 檔案裡(-n 這個引數包含了 -d)
    -f : 強迫重開機,不呼叫 shutdown 這個指令
    -i : 在重開機之前先把所有網路相關的裝置先停止
    範例
    重新啟動
    # reboot
    
  • passwd

    Linux passwd命令用來更改使用者的密碼
    語法
    passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
    必要引數:
    -d 刪除密碼
    -f 強制執行
    -k 更新只能傳送在過期之後
    -l 停止賬號使用
    -S 顯示密碼資訊
    -u 啟用已被停止的賬戶
    -x 設定密碼的有效期
    -g 修改群組密碼
    -i 過期後停止使用者賬號
    選擇引數:
    --help 顯示幫助資訊
    --version 顯示版本資訊
    範例
    修改使用者密碼
    # passwd runoob  //設定runoob使用者的密碼
    Enter new UNIX password:  //輸入新密碼,輸入的密碼無回顯
    Retype new UNIX password:  //確認密碼
    passwd: password updated successfully
    # 
    顯示賬號密碼資訊
    # passwd -S runoob
    runoob P 05/13/2010 0 99999 7 -1
    刪除使用者密碼
    # passwd -d lx138 
    passwd: password expiry information changed.
    

網路通訊

ping, ssh, scp, ifconfig

  • ping

    ping [-dfnqrRv][-c<完成次數>][-i<間隔秒數>][-I<網路介面>][-l<前置載入>][-p<範本樣式>][-s<封包大小>][-t<存活數值>][主機名稱或IP地址]
    引數說明:
    -d 使用Socket的SO_DEBUG功能。
    -c<完成次數> 設定完成要求迴應的次數。
    -f 極限檢測。
    -i<間隔秒數> 指定收發資訊的間隔時間。
    -I<網路介面> 使用指定的網路介面送出封包。
    -l<前置載入> 設定在送出要求資訊之前,先行發出的封包。
    -n 只輸出數值。
    -p<範本樣式> 設定填滿封包的範本樣式。
    -q 不顯示指令執行過程,開頭和結尾的相關資訊除外。
    -r 忽略普通的Routing Table,直接將封包送到遠端主機上。
    -R 記錄路由過程。
    -s<封包大小> 設定封包的大小。
    -t<存活數值> 設定存活數值TTL的大小。
    -v 詳細顯示指令的執行過程。
    範例
    檢測是否與主機連通
    # ping www.w3cschool.cc //ping主機
    PING aries.m.alikunlun.com (114.80.174.110) 56(84) bytes of data.
    64 bytes from 114.80.174.110: icmp_seq=1 ttl=64 time=0.025 ms
    64 bytes from 114.80.174.110: icmp_seq=2 ttl=64 time=0.036 ms
    64 bytes from 114.80.174.110: icmp_seq=3 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=4 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=5 ttl=64 time=0.028 ms
    64 bytes from 114.80.174.110: icmp_seq=6 ttl=64 time=0.028 ms
    64 bytes from 114.80.174.110: icmp_seq=7 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=8 ttl=64 time=0.034 ms
    64 bytes from 114.80.174.110: icmp_seq=9 ttl=64 time=0.036 ms
    64 bytes from 114.80.174.110: icmp_seq=10 ttl=64 time=0.041 ms
    
    --- aries.m.alikunlun.com ping statistics ---
    10 packets transmitted, 30 received, 0% packet loss, time 29246ms
    rtt min/avg/max/mdev = 0.021/0.035/0.078/0.011 ms
    
    //需要手動終止Ctrl+C
    指定接收包的次數
    # ping -c 2 www.w3cschool.cc
    PING aries.m.alikunlun.com (114.80.174.120) 56(84) bytes of data.
    64 bytes from 114.80.174.120: icmp_seq=1 ttl=54 time=6.18 ms
    64 bytes from 114.80.174.120: icmp_seq=2 ttl=54 time=15.4 ms
    
    --- aries.m.alikunlun.com ping statistics ---
    2 packets transmitted, 2 received, 0% packet loss, time 1016ms
    rtt min/avg/max/mdev = 6.185/10.824/15.464/4.640 ms
    
    //收到兩次包後,自動退出
    多引數使用
    # ping -i 3 -s 1024 -t 255 g.cn //ping主機
    PING g.cn (203.208.37.104) 1024(1052) bytes of data.
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=0 ttl=243 time=62.5 ms
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=1 ttl=243 time=63.9 ms
    1032 bytes from bg-in-f104.1e100.net (203.208.37.104): icmp_seq=2 ttl=243 time=61.9 ms
    
    --- g.cn ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 6001ms
    rtt min/avg/max/mdev = 61.959/62.843/63.984/0.894 ms, pipe 2
    [root@linux ~]# 
    
    //-i 3 傳送週期為 3秒 -s 設定傳送包的大小 -t 設定TTL值為 255
    
  • ssh

    
    
  • scp

    Linux scp命令用於Linux之間複製檔案和目錄。
    scp是 secure copy的縮寫, scp是linux系統下基於ssh登陸進行安全的遠端檔案拷貝命令。
    語法
    scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
    [-l limit] [-o ssh_option] [-P port] [-S program]
    [[user@]host1:]file1 [...] [[user@]host2:]file2
    簡易寫法:
    scp [可選引數] file_source file_target 
    引數說明:
    -1: 強制scp命令使用協定ssh1
    -2: 強制scp命令使用協定ssh2
    -4: 強制scp命令只使用IPv4定址
    -6: 強制scp命令只使用IPv6定址
    -B: 使用批次處理模式(傳輸過程中不詢問傳輸口令或短語)
    -C: 允許壓縮。(將-C標誌傳遞給ssh,從而開啟壓縮功能)
    -p:保留原檔案的修改時間,存取時間和存取許可權。
    -q: 不顯示傳輸進度條。
    -r: 遞迴複製整個目錄。
    -v:詳細方式顯示輸出。scp和ssh(1)會顯示出整個過程的偵錯資訊。這些資訊用於偵錯連線,驗證和設定問題。
    -c cipher: 以cipher將資料傳輸進行加密,這個選項將直接傳遞給ssh。
    -F ssh_config: 指定一個替代的ssh組態檔,此引數直接傳遞給ssh。
    -i identity_file: 從指定檔案中讀取傳輸時使用的金鑰檔案,此引數直接傳遞給ssh。
    -l limit: 限定使用者所能使用的頻寬,以Kbit/s為單位。
    -o ssh_option: 如果習慣於使用ssh_config(5)中的引數傳遞方式,
    -P port:注意是大寫的P, port是指定資料傳輸用到的埠號
    -S program: 指定加密傳輸時所使用的程式。此程式必須能夠理解ssh(1)的選項。
    範例
    1、從本地複製到遠端
    命令格式:
    scp local_file remote_username@remote_ip:remote_folder 
    或者 
    scp local_file remote_username@remote_ip:remote_file 
    或者 
    scp local_file remote_ip:remote_folder 
    或者 
    scp local_file remote_ip:remote_file 
    第1,2個指定了使用者名稱,命令執行後需要再輸入密碼,第1個僅指定了遠端的目錄,檔案名字不變,第2個指定了檔名;
    第3,4個沒有指定使用者名稱,命令執行後需要輸入使用者名稱和密碼,第3個僅指定了遠端的目錄,檔案名字不變,第4個指定了檔名;
    應用範例:
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music 
    scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3 
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music 
    scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3 
    複製目錄命令格式:
    scp -r local_folder remote_username@remote_ip:remote_folder 
    或者 
    scp -r local_folder remote_ip:remote_folder 
    第1個指定了使用者名稱,命令執行後需要再輸入密碼;
    第2個沒有指定使用者名稱,命令執行後需要輸入使用者名稱和密碼;
    應用範例:
    scp -r /home/space/music/ root@www.runoob.com:/home/root/others/ 
    scp -r /home/space/music/ www.runoob.com:/home/root/others/ 
    上面命令將本地 music 目錄複製到遠端 others 目錄下。
    2、從遠端複製到本地
    從遠端複製到本地,只要將從本地複製到遠端的命令的後2個引數調換順序即可,如下範例
    應用範例:
    scp root@www.runoob.com:/home/root/others/music /home/space/music/1.mp3 
    scp -r www.runoob.com:/home/root/others/ /home/space/music/
    說明
    1.如果遠端伺服器防火牆有為scp命令設定了指定的埠,我們需要使用 -P 引數來設定命令的埠號,命令格式如下:
    #scp 命令使用埠號 4588
    scp -P 4588 remote@www.runoob.com:/usr/local/sin.sh /home/administrator
    2.使用scp命令要確保使用的使用者具有可讀取遠端伺服器相應檔案的許可權,否則scp命令是無法起作用的。
    
  • ifconfig

    Linux ifconfig命令用於顯示或設定網路裝置。
    ifconfig可設定網路裝置的狀態,或是顯示目前的設定。
    語法
    ifconfig [網路裝置][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<網路裝置型別><硬體地址>][io_addr<I/O地址>][irq<IRQ地址>][media<網路媒介型別>][mem_start<記憶體地址>][metric<數目>][mtu<位元組>][netmask<子網掩碼>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
    引數說明:
    add<地址> 設定網路裝置IPv6的IP地址。
    del<地址> 刪除網路裝置IPv6的IP地址。
    down 關閉指定的網路裝置。
    <hw<網路裝置型別><硬體地址> 設定網路裝置的型別與硬體地址。
    io_addr<I/O地址> 設定網路裝置的I/O地址。
    irq<IRQ地址> 設定網路裝置的IRQ。
    media<網路媒介型別> 設定網路裝置的媒介型別。
    mem_start<記憶體地址> 設定網路裝置在主記憶體所佔用的起始地址。
    metric<數目> 指定在計算封包的轉送次數時,所要加上的數目。
    mtu<位元組> 設定網路裝置的MTU。
    netmask<子網掩碼> 設定網路裝置的子網掩碼。
    tunnel<地址> 建立IPv4與IPv6之間的隧道通訊地址。
    up 啟動指定的網路裝置。
    -broadcast<地址> 將要送往指定地址的封包當成廣播封包來處理。
    -pointopoint<地址> 與指定地址的網路裝置建立直接連線,此模式具有保密功能。
    -promisc 關閉或啟動指定網路裝置的promiscuous模式。
    [IP地址] 指定網路裝置的IP地址。
    [網路裝置] 指定網路裝置的名稱。
    範例
    顯示網路裝置資訊
    # ifconfig        
    eth0   Link encap:Ethernet HWaddr 00:50:56:0A:0B:0C 
         inet addr:192.168.0.3 Bcast:192.168.0.255 Mask:255.255.255.0
         inet6 addr: fe80::250:56ff:fe0a:b0c/64 Scope:Link
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
         RX packets:172220 errors:0 dropped:0 overruns:0 frame:0
         TX packets:132379 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:1000 
         RX bytes:87101880 (83.0 MiB) TX bytes:41576123 (39.6 MiB)
         Interrupt:185 Base address:0x2024 
    
    lo    Link encap:Local Loopback 
         inet addr:127.0.0.1 Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host
         UP LOOPBACK RUNNING MTU:16436 Metric:1
         RX packets:2022 errors:0 dropped:0 overruns:0 frame:0
         TX packets:2022 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0 
         RX bytes:2459063 (2.3 MiB) TX bytes:2459063 (2.3 MiB)
    啟動關閉指定網路卡
    # ifconfig eth0 down
    # ifconfig eth0 up
    為網路卡設定和刪除IPv6地址
    # ifconfig eth0 add 33ffe:3240:800:1005::2/ 64 //為網路卡誒之IPv6地址
    # ifconfig eth0 del 33ffe:3240:800:1005::2/ 64 //為網路卡刪除IPv6地址
    用ifconfig修改MAC地址
    # ifconfig eth0 down //關閉網路卡
    # ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE //修改MAC地址
    # ifconfig eth0 up //啟動網路卡
    # ifconfig eth1 hw ether 00:1D:1C:1D:1E //關閉網路卡並修改MAC地址 
    # ifconfig eth1 up //啟動網路卡
    設定IP地址
    # ifconfig eth0 192.168.1.56 
    //給eth0網路卡設定IP地址
    # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 
    // 給eth0網路卡設定IP地址,並加上子掩碼
    # ifconfig eth0 192.168.1.56 netmask 255.255.255.0 broadcast 192.168.1.255
    // 給eth0網路卡設定IP地址,加上子掩碼,加上個廣播地址
    啟用和關閉ARP協定
    # ifconfig eth0 arp  //開啟
    # ifconfig eth0 -arp  //關閉
    設定最大傳輸單元
    # ifconfig eth0 mtu 1500 
    //設定能通過的最巨量資料包大小為 1500 bytes
    

壓縮解壓

tar, gzip/gunzip, zip/unzip

  • tar

    Linux tar命令用於備份檔案。
    tar是用來建立,還原備份檔案的工具程式,它可以加入,解開備份檔案內的檔案。
    語法
    tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <區塊數目>][-C <目的目錄>][-f <備份檔案>][-F <Script檔案>][-K <檔案>][-L <媒體容量>][-N <日期時間>][-T <範本檔案>][-V <卷冊名稱>][-X <範本檔案>][-<裝置編號><儲存密度>][--after-date=<日期時間>][--atime-preserve][--backuup=<備份方式>][--checkpoint][--concatenate][--confirmation][--delete][--exclude=<範本樣式>][--force-local][--group=<群組名稱>][--help][--ignore-failed-read][--new-volume-script=<Script檔案>][--newer-mtime][--no-recursion][--null][--numeric-owner][--owner=<使用者名稱稱>][--posix][--erve][--preserve-order][--preserve-permissions][--record-size=<區塊數目>][--recursive-unlink][--remove-files][--rsh-command=<執行指令>][--same-owner][--suffix=<備份字尾字串>][--totals][--use-compress-program=<執行指令>][--version][--volno-file=<編號檔案>][檔案或目錄...]
    
    引數:
    -A或--catenate 新增檔案到已存在的備份檔案。
    -b<區塊數目>或--blocking-factor=<區塊數目> 設定每筆記錄的區塊數目,每個區塊大小為12Bytes。
    -B或--read-full-records 讀取資料時重設區塊大小。
    -c或--create 建立新的備份檔案。
    -C<目的目錄>或--directory=<目的目錄> 切換到指定的目錄。
    -d或--diff或--compare 對比備份檔案內和檔案系統上的檔案的差異。
    -f<備份檔案>或--file=<備份檔案> 指定備份檔案。
    -F<Script檔案>或--info-script=<Script檔案> 每次更換磁帶時,就執行指定的Script檔案。
    -g或--listed-incremental 處理GNU格式的大量備份。
    -G或--incremental 處理舊的GNU格式的大量備份。
    -h或--dereference 不建立符號連線,直接複製該連線所指向的原始檔案。
    -i或--ignore-zeros 忽略備份檔案中的0 Byte區塊,也就是EOF。
    -k或--keep-old-files 解開備份檔案時,不覆蓋已有的檔案。
    -K<檔案>或--starting-file=<檔案> 從指定的檔案開始還原。
    -l或--one-file-system 複製的檔案或目錄存放的檔案系統,必須與tar指令執行時所處的檔案系統相同,否則不予複製。
    -L<媒體容量>或-tape-length=<媒體容量> 設定存放每體的容量,單位以1024 Bytes計算。
    -m或--modification-time 還原檔案時,不變更檔案的更改時間。
    -M或--multi-volume 在建立,還原備份檔案或列出其中的內容時,採用多卷冊模式。
    -N<日期格式>或--newer=<日期時間> 只將較指定日期更新的檔案儲存到備份檔案裡。
    -o或--old-archive或--portability 將資料寫入備份檔案時使用V7格式。
    -O或--stdout 把從備份檔案裡還原的檔案輸出到標準輸出裝置。
    -p或--same-permissions 用原來的檔案許可權還原檔案。
    -P或--absolute-names 檔名使用絕對名稱,不移除檔名稱前的"/"號。
    -r或--append 新增檔案到已存在的備份檔案的結尾部分。
    -R或--block-number 列出每個資訊在備份檔案中的區塊編號。
    -s或--same-order 還原檔案的順序和備份檔案內的存放順序相同。
    -S或--sparse 倘若一個檔案內含大量的連續0位元組,則將此檔案存成稀疏檔案。
    -t或--list 列出備份檔案的內容。
    -T<範本檔案>或--files-from=<範本檔案> 指定範本檔案,其內含有一個或多個範本樣式,讓tar解開或建立符合設定條件的檔案。
    -u或--update 僅置換較備份檔案內的檔案更新的檔案。
    -U或--unlink-first 解開壓縮檔案還原檔案之前,先解除檔案的連線。
    -v或--verbose 顯示指令執行過程。
    -V<卷冊名稱>或--label=<卷冊名稱> 建立使用指定的卷冊名稱的備份檔案。
    -w或--interactive 遭遇問題時先詢問使用者。
    -W或--verify 寫入備份檔案後,確認檔案正確無誤。
    -x或--extract或--get 從備份檔案中還原檔案。
    -X<範本檔案>或--exclude-from=<範本檔案> 指定範本檔案,其內含有一個或多個範本樣式,讓ar排除符合設定條件的檔案。
    -z或--gzip或--ungzip 通過gzip指令處理備份檔案。
    -Z或--compress或--uncompress 通過compress指令處理備份檔案。
    -<裝置編號><儲存密度> 設定備份用的外圍裝置編號及存放資料的密度。
    --after-date=<日期時間> 此引數的效果和指定"-N"引數相同。
    --atime-preserve 不變更檔案的存取時間。
    --backup=<備份方式>或--backup 移除檔案前先進行備份。
    --checkpoint 讀取備份檔案時列出目錄名稱。
    --concatenate 此引數的效果和指定"-A"引數相同。
    --confirmation 此引數的效果和指定"-w"引數相同。
    --delete 從備份檔案中刪除指定的檔案。
    --exclude=<範本樣式> 排除符合範本樣式的檔案。
    --group=<群組名稱> 把加入裝置檔案中的檔案的所屬群組設成指定的群組。
    --help 線上幫助。
    --ignore-failed-read 忽略資料讀取錯誤,不中斷程式的執行。
    --new-volume-script=<Script檔案> 此引數的效果和指定"-F"引數相同。
    --newer-mtime 只儲存更改過的檔案。
    --no-recursion 不做遞迴處理,也就是指定目錄下的所有檔案及子目錄不予處理。
    --null 從null裝置讀取檔名稱。
    --numeric-owner 以使用者識別碼及群組識別碼取代使用者名稱稱和群組名稱。
    --owner=<使用者名稱稱> 把加入備份檔案中的檔案的擁有者設成指定的使用者。
    --posix 將資料寫入備份檔案時使用POSIX格式。
    --preserve 此引數的效果和指定"-ps"引數相同。
    --preserve-order 此引數的效果和指定"-A"引數相同。
    --preserve-permissions 此引數的效果和指定"-p"引數相同。
    --record-size=<區塊數目> 此引數的效果和指定"-b"引數相同。
    --recursive-unlink 解開壓縮檔案還原目錄之前,先解除整個目錄下所有檔案的連線。
    --remove-files 檔案加入備份檔案後,就將其刪除。
    --rsh-command=<執行指令> 設定要在遠端主機上執行的指令,以取代rsh指令。
    --same-owner 嘗試以相同的檔案擁有者還原檔案。
    --suffix=<備份字尾字串> 移除檔案前先行備份。
    --totals 備份檔案建立後,列出檔案大小。
    --use-compress-program=<執行指令> 通過指定的指令處理備份檔案。
    --version 顯示版本資訊。
    --volno-file=<編號檔案> 使用指定檔案內的編號取代預設的卷冊編號。
    範例
    壓縮檔案 非打包
    # touch a.c       
    # tar -czvf test.tar.gz a.c   //壓縮 a.c檔案為test.tar.gz
    a.c
    列出壓縮檔案內容
    # tar -tzvf test.tar.gz 
    -rw-r--r-- root/root     0 2010-05-24 16:51:59 a.c
    解壓檔案
    # tar -xzvf test.tar.gz 
    a.c
    將檔案全部打包成tar包:
    tar -cvf log.tar log2012.log    僅打包,不壓縮! 
    tar -zcvf log.tar.gz log2012.log   打包後,以 gzip 壓縮 
    tar -jcvf log.tar.bz2 log2012.log  打包後,以 bzip2 壓縮 
    在選項f之後的檔案檔名是自己取的,我們習慣上都用 .tar 來作為辨識。 如果加z選項,則以.tar.gz或.tgz來代表gzip壓縮過的tar包;如果加j選項,則以.tar.bz2來作為tar包名。
    查閱上述tar包內有哪些檔案:
    tar -ztvf log.tar.gz
    由於我們使用 gzip 壓縮的log.tar.gz,所以要查閱log.tar.gz包內的檔案時,就得要加上z這個選項了。
    將tar包解壓縮:
    tar -zxvf /opt/soft/test/log.tar.gz
    在預設的情況下,我們可以將壓縮檔在任何地方解開的
    只將tar內的部分檔案解壓出來:
    tar -zxvf /opt/soft/test/log30.tar.gz log2013.log
    我可以透過tar -ztvf來查閱 tar 包內的檔名稱,如果單隻要一個檔案,就可以透過這個方式來解壓部分檔案!
    檔案備份下來,並且儲存其許可權:
    tar -zcvpf log31.tar.gz log2014.log log2015.log log2016.log
    這個-p的屬性是很重要的,尤其是當您要保留原本檔案的屬性時。
    在資料夾當中,比某個日期新的檔案才備份:
    tar -N "2012/11/13" -zcvf log17.tar.gz test
    備份資料夾內容是排除部分檔案:
    tar --exclude scf/service -zcvf scf.tar.gz scf/*
    其實最簡單的使用 tar 就只要記憶底下的方式即可:
    壓 縮:tar -jcv -f filename.tar.bz2 要被壓縮的檔案或目錄名稱
    查 詢:tar -jtv -f filename.tar.bz2
    解壓縮:tar -jxv -f filename.tar.bz2 -C 欲解壓縮的目錄
    
    -c: 建立壓縮檔案
    -x:解壓
    -t:檢視內容
    -r:向壓縮歸檔檔案末尾追加檔案
    -u:更新原壓縮包中的檔案
    這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只能用其中一個。下面的引數是根據需要在壓縮或解壓檔案時可選的。
    -z:有gzip屬性的
    -j:有bz2屬性的
    -Z:有compress屬性的
    -v:顯示所有過程
    -O:將檔案解開到標準輸出
    下面的引數-f是必須的
    -f: 使用檔案名字,切記,這個引數是最後一個引數,後面只能接檔案名。
    # tar -cf all.tar *.jpg
    這條命令是將所有.jpg的檔案打成一個名為all.tar的包。-c是表示產生新的包,-f指定包的檔名。
    # tar -rf all.tar *.gif
    這條命令是將所有.gif的檔案增加到all.tar的包裡面去。-r是表示增加檔案的意思。
    # tar -uf all.tar logo.gif
    這條命令是更新原來tar包all.tar中logo.gif檔案,-u是表示更新檔案的意思。
    # tar -tf all.tar
    這條命令是列出all.tar包中所有檔案,-t是列出檔案的意思
    # tar -xf all.tar
    這條命令是解出all.tar包中所有檔案,-t是解開的意思
    壓縮
    tar -cvf jpg.tar *.jpg //將目錄裡所有jpg檔案打包成jpg.tar 
    tar -czf jpg.tar.gz *.jpg   //將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用gzip壓縮,生成一個gzip壓縮過的包,命名為jpg.tar.gz
    tar -cjf jpg.tar.bz2 *.jpg //將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用bzip2壓縮,生成一個bzip2壓縮過的包,命名為jpg.tar.bz2
    tar -cZf jpg.tar.Z *.jpg   //將目錄裡所有jpg檔案打包成jpg.tar後,並且將其用compress壓縮,生成一個umcompress壓縮過的包,命名為jpg.tar.Z
    rar a jpg.rar *.jpg //rar格式的壓縮,需要先下載rar for linux
    zip jpg.zip *.jpg //zip格式的壓縮,需要先下載zip for linux
    解壓
    tar -xvf file.tar //解壓 tar包
    tar -xzvf file.tar.gz //解壓tar.gz
    tar -xjvf file.tar.bz2   //解壓 tar.bz2
    tar -xZvf file.tar.Z   //解壓tar.Z
    unrar e file.rar //解壓rar
    unzip file.zip //解壓zip
    總結
    1、*.tar 用 tar -xvf 解壓
    2、*.gz 用 gzip -d或者gunzip 解壓
    3、*.tar.gz和*.tgz 用 tar -xzf 解壓
    4、*.bz2 用 bzip2 -d或者用bunzip2 解壓
    5、*.tar.bz2用tar -xjf 解壓
    6、*.Z 用 uncompress 解壓
    7、*.tar.Z 用tar -xZf 解壓
    8、*.rar 用 unrar e解壓
    9、*.zip 用 unzip 解壓
    
  • gzip/gunzip

    Linux gzip命令用於壓縮檔案。
    gzip是個使用廣泛的壓縮程式,檔案經它壓縮過後,其名稱後面會多出".gz"的擴充套件名。
    語法
    gzip [-acdfhlLnNqrtvV][-S &lt;壓縮字尾字串&gt;][-&lt;壓縮效率&gt;][--best/fast][檔案...]gzip [-acdfhlLnNqrtvV][-S &lt;壓縮字尾字串&gt;][-&lt;壓縮效率&gt;][--best/fast][目錄]
    引數:
    -a或--ascii  使用ASCII文字模式。
    -c或--stdout或--to-stdout  把壓縮後的檔案輸出到標準輸出裝置,不去更動原始檔案。
    -d或--decompress或----uncompress  解開壓縮檔案。
    -f或--force  強行壓縮檔案。不理會檔名稱或硬連線是否存在以及該檔案是否為符號連線。
    -h或--help  線上幫助。
    -l或--list  列出壓縮檔案的相關資訊。
    -L或--license  顯示版本與版權資訊。
    -n或--no-name  壓縮檔案時,不儲存原來的檔名稱及時間戳記。
    -N或--name  壓縮檔案時,儲存原來的檔名稱及時間戳記。
    -q或--quiet  不顯示警告資訊。
    -r或--recursive  遞迴處理,將指定目錄下的所有檔案及子目錄一併處理。
    -S<壓縮字尾字串>或----suffix<壓縮字尾字串>  更改壓縮字尾字串。
    -t或--test  測試壓縮檔案是否正確無誤。
    -v或--verbose  顯示指令執行過程。
    -V或--version  顯示版本資訊。
    -<壓縮效率>  壓縮效率是一個介於1-9的數值,預設值為"6",指定愈大的數值,壓縮效率就會愈高。
    --best  此引數的效果和指定"-9"引數相同。
    --fast  此引數的效果和指定"-1"引數相同。
    範例
    壓縮檔案
    [root@w3cschool.cc a]# ls //顯示當前目錄檔案
    a.c b.h d.cpp
    [root@w3cschool.cc a]# gzip * //壓縮目錄下的所有檔案
    [root@w3cschool.cc a]# ls //顯示當前目錄檔案
    a.c.gz    b.h.gz    d.cpp.gz
    [root@w3cschool.cc a]# 
    接範例1, 列出詳細的資訊
    [root@w3cschool.cc a]# gzip -dv * //解壓檔案,並列出詳細資訊
    a.c.gz:     0.0% -- replaced with a.c
    b.h.gz:     0.0% -- replaced with b.h
    d.cpp.gz:     0.0% -- replaced with d.cpp
    [root@w3cschool.cc a]# 
    接範例1,顯示壓縮檔案的資訊
    [root@w3cschool.cc a]# gzip -l *
         compressed    uncompressed ratio uncompressed_name
             24          0  0.0% a.c
             24          0  0.0% b.h
             26          0  0.0% d.cpp
    把test6目錄下的每個檔案壓縮成.gz檔案
    gzip *
    把上例中每個壓縮的檔案解壓,並列出詳細的資訊
    gzip -dv *
    詳細顯範例1中每個壓縮的檔案的資訊,並不解壓
    gzip -l *
    壓縮一個tar備份檔案,此時壓縮檔案的擴充套件名為.tar.gz
    gzip -r log.tar
    遞迴的壓縮目錄
    gzip -rv test6
    這樣,所有test下面的檔案都變成了*.gz,目錄依然存在只是目錄裡面的檔案相應變成了*.gz.這就是壓縮,和打包不同。因為是對目錄操作,所以需要加上-r選項,這樣也可以對子目錄進行遞迴了。
    遞迴地解壓目錄
    gzip -dr test6
    
    Linux gunzip命令用於解壓檔案。
    gunzip是個使用廣泛的解壓縮程式,它用於解開被gzip壓縮過的檔案,這些壓縮檔案預設最後的擴充套件名為".gz"。事實上gunzip就是gzip的硬連線,因此不論是壓縮或解壓縮,都可通過gzip指令單獨完成。
    語法
    引數:
    gunzip [-acfhlLnNqrtvV][-s <壓縮字尾字串>][檔案...] 或 gunzip [-acfhlLnNqrtvV][-s <壓縮字尾字串>][目錄]
    -a或--ascii  使用ASCII文字模式。
    -c或--stdout或--to-stdout  把解壓後的檔案輸出到標準輸出裝置。
    -f或-force  強行解開壓縮檔案,不理會檔名稱或硬連線是否存在以及該檔案是否為符號連線。
    -h或--help  線上幫助。
    -l或--list  列出壓縮檔案的相關資訊。
    -L或--license  顯示版本與版權資訊。
    -n或--no-name  解壓縮時,若壓縮檔案內含有遠來的檔名稱及時間戳記,則將其忽略不予處理。
    -N或--name  解壓縮時,若壓縮檔案內含有原來的檔名稱及時間戳記,則將其回存到解開的檔案上。
    -q或--quiet  不顯示警告資訊。
    -r或--recursive  遞迴處理,將指定目錄下的所有檔案及子目錄一併處理。
    -S<壓縮字尾字串>或--suffix<壓縮字尾字串>  更改壓縮字尾字串。
    -t或--test  測試壓縮檔案是否正確無誤。
    -v或--verbose  顯示指令執行過程。
    -V或--version 顯示版本資訊。
    範例
    解壓檔案
    # gunzip ab.gz 
    
    首先將/etc目錄下的所有檔案以及子目錄進行壓縮,備份壓縮包etc.zip到/opt目錄,然後對etc.zip檔案進行gzip壓縮,設定gzip的壓縮級別為9。
    zip –r /opt/etc.zip /etc
    gzip -9v /opt/etc.zip
    檢視上述etc.zip.gz檔案的壓縮資訊。
    gzip -l /opt/etc.zip.gz
    compressed        uncompressed ratio uncompressed_name
    11938745            12767265   6.5% /opt/etc.zip
    解壓上述etc.zip.gz檔案到當前目錄。
    [root@mylinux ~]#gzip –d /opt/etc.zip.gz 
    或者執行
    [root@mylinux ~]#gunzip /opt/etc.zip.gz
    通過上面的範例可以知道gzip –d等價於gunzip命令。
    
  • zip/unzip

    Linux zip命令用於壓縮檔案。
    zip是個使用廣泛的壓縮程式,檔案經它壓縮後會另外產生具有".zip"擴充套件名的壓縮檔案。
    語法
    zip [-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b <工作目錄>][-ll][-n <字尾字串>][-t <日期時間>][-<壓縮效率>][壓縮檔案][檔案...][-i <範本樣式>][-x <範本樣式>]
    引數:
    -A 調整可執行的自動解壓縮檔案。
    -b<工作目錄> 指定暫時存放檔案的目錄。
    -c 替每個被壓縮的檔案加上註釋。
    -d 從壓縮檔案內刪除指定的檔案。
    -D 壓縮檔案內不建立目錄名稱。
    -f 此引數的效果和指定"-u"引數類似,但不僅更新既有檔案,如果某些檔案原本不存在於壓縮檔案內,使用本引數會一併將其加入壓縮檔案中。
    -F 嘗試修復已損壞的壓縮檔案。
    -g 將檔案壓縮後附加在既有的壓縮檔案之後,而非另行建立新的壓縮檔案。
    -h 線上幫助。
    -i<範本樣式> 只壓縮符合條件的檔案。
    -j 只儲存檔名稱及其內容,而不存放任何目錄名稱。
    -J 刪除壓縮檔案前面不必要的資料。
    -k 使用MS-DOS相容格式的檔名稱。
    -l 壓縮檔案時,把LF字元置換成LF+CR字元。
    -ll 壓縮檔案時,把LF+CR字元置換成LF字元。
    -L 顯示版權資訊。
    -m 將檔案壓縮並加入壓縮檔案後,刪除原始檔案,即把檔案移到壓縮檔案中。
    -n<字尾字串> 不壓縮具有特定字尾字串的檔案。
    -o 以壓縮檔案內擁有最新更改時間的檔案為準,將壓縮檔案的更改時間設成和該檔案相同。
    -q 不顯示指令執行過程。
    -r 遞迴處理,將指定目錄下的所有檔案和子目錄一併處理。
    -S 包含系統和隱藏檔案。
    -t<日期時間> 把壓縮檔案的日期設成指定的日期。
    -T 檢查備份檔案內的每個檔案是否正確無誤。
    -u 更換較新的檔案到壓縮檔案內。
    -v 顯示指令執行過程或顯示版本資訊。
    -V 儲存VMS作業系統的檔案屬性。
    -w 在檔名稱裡假如版本編號,本引數僅在VMS作業系統下有效。
    -x<範本樣式> 壓縮時排除符合條件的檔案。
    -X 不儲存額外的檔案屬性。
    -y 直接儲存符號連線,而非該連線所指向的檔案,本引數僅在UNIX之類的系統下有效。
    -z 替壓縮檔案加上註釋。
    -$ 儲存第一個被壓縮檔案所在磁碟的卷冊名稱。
    -<壓縮效率> 壓縮效率是一個介於1-9的數值。
    範例
    將 /home/html/ 這個目錄下所有檔案和資料夾打包為當前目錄下的 html.zip:
    zip -q -r html.zip /home/html
    如果在我們在 /home/html 目錄下,可以執行以下命令:
    zip -q -r html.zip *
    從壓縮檔案 cp.zip 中刪除檔案 a.c
    zip -dv cp.zip a.c
    
    Linux unzip命令用於解壓縮zip檔案
    unzip為.zip壓縮檔案的解壓縮程式。
    語法
    unzip [-cflptuvz][-agCjLMnoqsVX][-P <密碼>][.zip檔案][檔案][-d <目錄>][-x <檔案>]unzip [-Z]
    引數:
    -c 將解壓縮的結果顯示到螢幕上,並對字元做適當的轉換。
    -f 更新現有的檔案。
    -l 顯示壓縮檔案內所包含的檔案。
    -p 與-c引數類似,會將解壓縮的結果顯示到螢幕上,但不會執行任何的轉換。
    -t 檢查壓縮檔案是否正確。
    -u 與-f引數類似,但是除了更新現有的檔案外,也會將壓縮檔案中的其他檔案解壓縮到目錄中。
    -v 執行是時顯示詳細的資訊。
    -z 僅顯示壓縮檔案的備註文字。
    -a 對文字檔案進行必要的字元轉換。
    -b 不要對文字檔案進行字元轉換。
    -C 壓縮檔案中的檔名稱區分大小寫。
    -j 不處理壓縮檔案中原有的目錄路徑。
    -L 將壓縮檔案中的全部檔名改為小寫。
    -M 將輸出結果送到more程式處理。
    -n 解壓縮時不要覆蓋原有的檔案。
    -o 不必先詢問使用者,unzip執行後覆蓋原有檔案。
    -P<密碼> 使用zip的密碼選項。
    -q 執行時不顯示任何資訊。
    -s 將檔名中的空白字元轉換為底線字元。
    -V 保留VMS的檔案版本資訊。
    -X 解壓縮時同時回存檔案原來的UID/GID。
    [.zip檔案] 指定.zip壓縮檔案。
    [檔案] 指定要處理.zip壓縮檔案中的哪些檔案。
    -d<目錄> 指定檔案解壓縮後所要儲存的目錄。
    -x<檔案> 指定不要處理.zip壓縮檔案中的哪些檔案。
    -Z unzip -Z等於執行zipinfo指令。
    範例
    檢視壓縮檔案中包含的檔案:
    # unzip -l abc.zip 
    Archive: abc.zip
     Length   Date  Time  Name
    --------  ----  ----  ----
      94618 05-21-10 20:44  a11.jpg
      202001 05-21-10 20:44  a22.jpg
        16 05-22-10 15:01  11.txt
      46468 05-23-10 10:30  w456.JPG
      140085 03-14-10 21:49  my.asp
    --------          -------
      483188          5 files
    -v 引數用於檢視壓縮檔案目錄資訊,但是不解壓該檔案。
    # unzip -v abc.zip 
    Archive: abc.zip
    Length  Method  Size Ratio  Date  Time  CRC-32  Name
    -------- ------ ------- -----  ----  ----  ------  ----
      94618 Defl:N  93353  1% 05-21-10 20:44 9e661437 a11.jpg
     202001 Defl:N  201833  0% 05-21-10 20:44 1da462eb a22.jpg
       16 Stored    16  0% 05-22-10 15:01 ae8a9910 ? +-|¥+-? (11).txt
      46468 Defl:N  39997 14% 05-23-10 10:30 962861f2 w456.JPG
     140085 Defl:N  36765 74% 03-14-10 21:49 836fcc3f my.asp
    --------     ------- ---              -------
     483188      371964 23%              5 files
     
    將壓縮檔案text.zip在當前目錄下解壓縮。
    unzip test.zip
    將壓縮檔案text.zip在指定目錄/tmp下解壓縮,如果已有相同的檔案存在,要求unzip命令不覆蓋原先的檔案。
    unzip -n test.zip -d /tmp
    檢視壓縮檔案目錄,但不解壓。
    unzip -v test.zip
    將壓縮檔案test.zip在指定目錄/tmp下解壓縮,如果已有相同的檔案存在,要求unzip命令覆蓋原先的檔案。
    unzip -o test.zip -d tmp/ 
    

查詢硬體資訊的命令

  • lscpu

    描述: 
      此命令用來顯示cpu的相關資訊 
      lscpu從sysfs和/proc/cpuinfo收集cpu體系結構資訊,命令的輸出比較易讀 
      命令輸出的資訊包含cpu數量,執行緒,核數,通訊端和Nom-Uniform Memeor Access(NUMA),快取等 
      不是所有的列都支援所有的架構,如果指定了不支援的列,那麼lscpu將列印列,但不顯示資料 
    語法: 
      lscpu [-a|-b|-c] [-x] [-s directory] [-e [=list]|-p [=list]] 
      lscpu -h|-V
    
    引數選項: 
      -a, –all: 包含上線和下線的cpu的數量,此選項只能與選項e或-p一起指定 
      -b, –online: 只顯示出上線的cpu數量,此選項只能與選項e或者-p一起指定 
      -c, –offline: 只顯示出離線的cpu數量,此選項只能與選項e或者-p一起指定 
     -e, –extended [=list]: 以人性化的格式顯示cpu資訊,如果list引數省略,輸出所有可用資料的列,在指定了list引數時,選項的字串、等號(=)和列表必須不包含任何空格或其他空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’ 
      -h, –help:幫助 
      -p, –parse [=list]: 優化命令輸出,便於分析.如果省略list,則命令的輸出與早期版本的lscpu相容,相容格式以兩個逗號用於分隔cpu快取列,如果沒有發現cpu快取,則省略快取列,如果使用list引數,則快取列以冒號(:)分隔。在指定了list引數時,選項的字串、等號(=)和列表必須不包含空格或者其它空白。比如:’-e=cpu,node’ or ’–extended=cpu,node’ 
      -s, –sysroot directory: 為一個Linux範例收集CPU資料,而不是發出lscpu命令的範例。指定的目錄是要檢查Linux範例的系統根 
      -x, –hex:使用十六進位制來表示cpu集合,預設情況是列印列表格式的集合(例如:0,1) 
    顯示格式: 
      Architecture: #架構 
      CPU(s): #邏輯cpu顆數 
      Thread(s) per core: #每個核心執行緒 
      Core(s) per socket: #每個cpu插槽核數/每顆物理cpu核數 
      CPU socket(s): #cpu插槽數 
      Vendor ID: #cpu廠商ID 
      CPU family: #cpu系列 
      Model: #型號 
      Stepping: #步進 
      CPU MHz: #cpu主頻 
      Virtualization: #cpu支援的虛擬化技術 
      L1d cache: #一級快取(google了下,這具體表示表示cpu的L1資料快取) 
      L1i cache: #一級快取(具體為L1指令快取) 
      L2 cache: #二級快取
    
  • free

    Linux free命令用於顯示記憶體狀態。
    free指令會顯示記憶體的使用情況,包括實體記憶體,虛擬的交換檔案記憶體,共用記憶體區段,以及系統核心使用的緩衝區等。
    語法
    free [-bkmotV][-s <間隔秒數>]
    引數說明:
    -b  以Byte為單位顯示記憶體使用情況。
    -k  以KB為單位顯示記憶體使用情況。
    -m  以MB為單位顯示記憶體使用情況。
    -h  以合適的單位顯示記憶體使用情況,最大為三位數,自動計算對應的單位值。單位有:
    B = bytes
    K = kilos
    M = megas
    G = gigas
    T = teras
    -o  不顯示緩衝區調節列。
    -s<間隔秒數>  持續觀察記憶體使用狀況。
    -t  顯示記憶體總和列。
    -V  顯示版本資訊。
    範例
    顯示記憶體使用情況
    # free //顯示記憶體使用資訊
    total used free shared buffers cached
    Mem: 254772 184568 70204 0 5692 89892
    -/+ buffers/cache: 88984 165788
    Swap: 524280 65116 459164
    以總和的形式顯示記憶體的使用資訊
    # free -t //以總和的形式查詢記憶體的使用資訊
    total used free shared buffers cached
    Mem: 254772 184868 69904 0 5936 89908
    -/+ buffers/cache: 89024 165748
    Swap: 524280 65116 459164
    Total: 779052 249984 529068
    週期性的查詢記憶體使用資訊
    # free -s 10 //每10s 執行一次命令
    total used free shared buffers cached
    Mem: 254772 187628 67144 0 6140 89964
    -/+ buffers/cache: 91524 163248
    Swap: 524280 65116 459164
    
    total used free shared buffers cached
    Mem: 254772 187748 67024 0 6164 89940
    -/+ buffers/cache: 91644 163128
    Swap: 524280 65116 459164
    
  • lspci

    
    
  • lsusb

    
    

多命令共同作業

  • 管道:|

    Linux 管道使用豎線|連線多個命令,這被稱為管道符。Linux 管道的具體語法格式如下:
    command1 | command2
    command1 | command2 [ | commandN... ]
    當在兩個命令之間設定管道時,管道符|左邊命令的輸出就變成了右邊命令的輸入。只要第一個命令向標準輸出寫入,而第二個命令是從標準輸入讀取,那麼這兩個命令就可以形成一個管道。大部分的 Linux 命令都可以用來形成管道。
    這裡需要注意,command1 必須有正確輸出,而 command2 必須可以處理 command2 的輸出結果;而且 command2 只能處理 command1 的正確輸出結果,不能處理 command1 的錯誤資訊。
    
    我們先看下面一組命令,使用 mysqldump(一個資料庫備份程式)來備份一個叫做 wiki 的資料庫:
    mysqldump -u root -p '123456' wiki > /tmp/wikidb.backup
    gzip -9 /tmp/wikidb.backup
    scp /tmp/wikidb.backup username@remote_ip:/backup/mysql/
    上述這組命令主要做了如下任務:
    mysqldump 命令用於將名為 wike 的資料庫備份到檔案 /tmp/wikidb.backup;其中-u和-p選項分別指出資料庫的使用者名稱和密碼。
    gzip 命令用於壓縮較大的資料庫檔案以節省磁碟空間;其中-9表示最慢的壓縮速度最好的壓縮效果。
    scp 命令(secure copy,安全拷貝)用於將資料庫備份檔案複製到 IP 地址為 remote_ip 的備份伺服器的 /backup/mysql/ 目錄下。其中username是登入遠端伺服器的使用者名稱,命令執行後需要輸入密碼。
    上述三個命令依次執行。然而,如果使用管道的話,你就可以將 mysqldump、gzip、ssh 命令相連線,這樣就避免了建立臨時檔案 /tmp/wikidb.backup,而且可以同時執行這些命令並達到相同的效果。
    使用管道後的命令如下所示:
    mysqldump -u root -p '123456' wiki | gzip -9 | ssh username@remote_ip "cat > /backup/wikidb.gz"
    這些使用了管道的命令有如下特點:
    命令的語法緊湊並且使用簡單。
    通過使用管道,將三個命令串聯到一起就完成了遠端 mysql 備份的複雜任務。
    從管道輸出的標準錯誤會混合到一起。
    
    重定向和管道的區別
    乍看起來,管道也有重定向的作用,它也改變了資料輸入輸出的方向,那麼,管道和重定向之間到底有什麼不同呢?
    簡單地說,重定向操作符>將命令與檔案連線起來,用檔案來接收命令的輸出;而管道符|將命令與命令連線起來,用第二個命令來接收第一個命令的輸出。如下所示:
    command > file
    command1 | command1
    有些讀者在學習管道時會嘗試如下的命令,我們來看一下會發生什麼:
    command1 > command2
    答案是,有時嘗試的結果將會很糟糕。這是一個實際的例子,一個 Linux 系統管理員以超級使用者(root 使用者)的身份執行了如下命令:
    cd /usr/bin
    ls > less
    第一條命令將當前目錄切換到了大多數程式所存放的目錄,第二條命令是告訴 Shell 用 ls 命令的輸出重寫檔案 less。因為 /usr/bin 目錄已經包含了名稱為 less(less 程式)的檔案,第二條命令用 ls 輸出的文字重寫了 less 程式,因此破壞了檔案系統中的 less 程式。
    
    這是使用重定向操作符錯誤重寫檔案的一個教訓,所以在使用它時要謹慎。
    

    http://c.biancheng.net/view/3131.html

    https://www.jianshu.com/p/9c0c2b57cb73

  • 輸入輸出重定向:<>>>

    Shell 輸入/輸出重定向
    大多數 UNIX 系統命令從你的終端接受輸入並將所產生的輸出傳送回​​到您的終端。一個命令通常從一個叫標準輸入的地方讀取輸入,預設情況下,這恰好是你的終端。同樣,一個命令通常將其輸出寫入到標準輸出,預設情況下,這也是你的終端。
    重定向命令列表如下:
    命令	說明
    command > file	將輸出重定向到 file。
    command < file	將輸入重定向到 file。
    command >> file	將輸出以追加的方式重定向到 file。
    n > file	將檔案描述符為 n 的檔案重定向到 file。
    n >> file	將檔案描述符為 n 的檔案以追加的方式重定向到 file。
    n >& m	將輸出檔案 m 和 n 合併。
    n <& m	將輸入檔案 m 和 n 合併。
    << tag	將開始標記 tag 和結束標記 tag 之間的內容作為輸入。
    需要注意的是檔案描述符 0 通常是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。
    輸出重定向
    重定向一般通過在命令間插入特定的符號來實現。特別的,這些符號的語法如下所示:
    command1 > file1
    上面這個命令執行command1然後將輸出的內容存入file1。
    注意任何file1內的已經存在的內容將被新內容替代。如果要將新內容新增在檔案末尾,請使用>>操作符。
    範例
    執行下面的 who 命令,它將命令的完整的輸出重定向在使用者檔案中(users):
    $ who > users
    執行後,並沒有在終端輸出資訊,這是因為輸出已被從預設的標準輸出裝置(終端)重定向到指定的檔案。
    你可以使用 cat 命令檢視檔案內容:
    $ cat users
    _mbsetupuser console  Oct 31 17:35 
    tianqixin    console  Oct 31 17:35 
    tianqixin    ttys000  Dec  1 11:33 
    輸出重定向會覆蓋檔案內容,請看下面的例子:
    $ echo "菜鳥教學:www.runoob.com" > users
    $ cat users
    菜鳥教學:www.runoob.com
    $
    如果不希望檔案內容被覆蓋,可以使用 >> 追加到檔案末尾,例如:
    $ echo "菜鳥教學:www.runoob.com" >> users
    $ cat users
    菜鳥教學:www.runoob.com
    菜鳥教學:www.runoob.com
    $
    輸入重定向
    和輸出重定向一樣,Unix 命令也可以從檔案獲取輸入,語法為:
    command1 < file1
    這樣,本來需要從鍵盤獲取輸入的命令會轉移到檔案讀取內容。
    注意:輸出重定向是大於號(>),輸入重定向是小於號(<)。
    範例
    接著以上範例,我們需要統計 users 檔案的行數,執行以下命令:
    $ wc -l users
           2 users
    也可以將輸入重定向到 users 檔案:
    $  wc -l < users
           2 
    注意:上面兩個例子的結果不同:第一個例子,會輸出檔名;第二個不會,因為它僅僅知道從標準輸入讀取內容。
    command1 < infile > outfile
    同時替換輸入和輸出,執行command1,從檔案infile讀取內容,然後將輸出寫入到outfile中。
    重定向深入講解
    一般情況下,每個 Unix/Linux 命令執行時都會開啟三個檔案:
    標準輸入檔案(stdin):stdin的檔案描述符為0,Unix程式預設從stdin讀取資料。
    標準輸出檔案(stdout):stdout 的檔案描述符為1,Unix程式預設向stdout輸出資料。
    標準錯誤檔案(stderr):stderr的檔案描述符為2,Unix程式會向stderr流中寫入錯誤資訊。
    預設情況下,command > file 將 stdout 重定向到 file,command < file 將stdin 重定向到 file。
    如果希望 stderr 重定向到 file,可以這樣寫:
    $ command 2 > file
    如果希望 stderr 追加到 file 檔案末尾,可以這樣寫:
    $ command 2 >> file
    2 表示標準錯誤檔案(stderr)。
    如果希望將 stdout 和 stderr 合併後重定向到 file,可以這樣寫:
    $ command > file 2>&1
    或者
    $ command >> file 2>&1
    如果希望對 stdin 和 stdout 都重定向,可以這樣寫:
    $ command < file1 >file2
    command 命令將 stdin 重定向到 file1,將 stdout 重定向到 file2。
    
    Here Document
    Here Document 是 Shell 中的一種特殊的重定向方式,用來將輸入重定向到一個互動式 Shell 指令碼或程式。
    它的基本的形式如下:
    command << delimiter
        document
    delimiter
    它的作用是將兩個 delimiter 之間的內容(document) 作為輸入傳遞給 command。
    注意:
    結尾的delimiter 一定要頂格寫,前面不能有任何字元,後面也不能有任何字元,包括空格和 tab 縮排。
    開始的delimiter前後的空格會被忽略掉。
    範例
    在命令列中通過 wc -l 命令計算 Here Document 的行數:
    $ wc -l << EOF
        歡迎來到
        菜鳥教學
        www.runoob.com
    EOF
    3          # 輸出結果為 3 行
    $
    我們也可以將 Here Document 用在指令碼中,例如:
    #!/bin/bash
    # author:菜鳥教學
    # url:www.runoob.com
    cat << EOF
    歡迎來到
    菜鳥教學
    www.runoob.com
    EOF
    執行以上指令碼,輸出結果:
    歡迎來到
    菜鳥教學
    www.runoob.com
    /dev/null 檔案
    如果希望執行某個命令,但又不希望在螢幕上顯示輸出結果,那麼可以將輸出重定向到 /dev/null:
    $ command > /dev/null
    /dev/null 是一個特殊的檔案,寫入到它的內容都會被丟棄;如果嘗試從該檔案讀取內容,那麼什麼也讀不到。但是 /dev/null 檔案非常有用,將命令的輸出重定向到它,會起到"禁止輸出"的效果。
    如果希望遮蔽 stdout 和 stderr,可以這樣寫:
    $ command > /dev/null 2>&1
    注意:0 是標準輸入(STDIN),1 是標準輸出(STDOUT),2 是標準錯誤輸出(STDERR)。
    

git操作命令

  • git是一個開源的分散式版本控制系統,Linux的開原始碼一般都採用git管理

  • git常用命令

    git clone
    git branch
    git fetch
    git pull
    git add
    git commit
    git push
    git log
    git diff
    git show
    git checkout
    

在這裡插入圖片描述

Reference

菜鳥教學 https://www.runoob.com/linux/linux-tutorial.html
鳥哥的私房菜 http://linux.vbird.org/
Linux就該這麼學 https://www.linuxprobe.com/
Pro Git https://git-scm.com/book/zh/v2