Linux基礎命令總結

目錄

bash shell

echo ${SHELL}    # 顯示當前使用的shell
cat /etc/shells  # 顯示當前系統使用的所有shell

命令提示符

echo $PS1                                      # 顯示當前命令提示符格式 
[\u@\h \W]\$
PS1="\[\e[1;5;41;33m\][\u@\h \W]\\$ \[\e[0m\]"  # 修改命令提示符
PS1='\[\e[1;36m\][\u@\h \W]\$ \[\e[0m\]'
PS1="\[\e[1;31m\][\[\e[0m\]\t \[\e[1;36m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[1;33m\] \W\[\e[1;31m\]]\[\e[0m\]\\$"
  \e[31;1m  字元串  \e[0m
 [\e[31;1m  字元串  \e[0m ]
 [\e[31;1m ]字元串 [\e[0m ]
\[\e[31;1m\]字元串\[\e[0m\]
\e 控制符 \033      \u 當前用戶
\h 主機名簡稱        \H 主機名
\w 當前工作目錄      \W 當前工作目錄基名
\t 24小時時間格式    \T 12小時時間格式
\! 命令歷史數        \# 開機後命令歷史數
\$ 用戶提示符
讓終端字體帶顏色:
echo -e "\033[背景顏色;文字顏色;4;5m字元串\033[0m"
echo -e '\033[40;32;5m字元串\e[0m'
終端控制選項說明 :
\033[0m              關閉所有屬性 
\033[1m              設置高亮度 
\033[4m              下劃線 
\033[5m              閃爍 
\033[7m              反顯 (當滑鼠把此處選中時才會顯示)
\033[8m              消隱
\033[30m -- \033[37m 設置前景色 
\033[40m -- \033[47m 設置背景色 
\033[nA              游標上移n行 
\033[nB              游標下移n行 
\033[nC              游標右移n行 
\033[nD              游標左移n行 
\033[y;xH            設置游標位置 
\033[2J              清屏 
\033[K               清除從游標到行尾的內容 
\033[s               保存游標位置 
\033[u               恢復游標位置 
\033[?25l            隱藏游標 
\033[?25h            顯示游標

編碼轉換網站:
//tool.oschina.net/encode
//javawind.net/tools/native2ascii.jsp?action=transform

命令類型

  • 內部命令

shell自帶的二進位可執行文件

help              內部命令列表
enable cmd        啟用內部命令
enable –n cmd     禁用內部命令
enable –n         查看所有禁用的內部命令
  • 外部命令

在文件系統路徑下有對應的可執行程式文件

which -a COMMAND --skip-alias ; whereis COMMAND  # 查看COMMAND路徑

可用whichwhereis查看命令路徑

  • 使用hash查看內部命令,使用type查看命令類型,使用alias定義別名

命令格式

COMMAND [OPTIONS...] [ARGUMENTS...]
選項:用於啟用或關閉命令的某個或某些功能
     短選項:-c     例如:-l, -h
     長選項:--word 例如:--all, --human-readable
參數:命令的作用對象,比如文件名,用戶名等
注意:
     多個選項或多參數和命令之間使用空白字元分隔
     取消和結束命令執行:Ctrl+c,Ctrl+d
     多個命令可以用;符號分開
     一個命令可以用\分成多行

查看命令歷史列表:history

關機和重啟

poweroff                             關機
halt                                 關機
     -p                              關閉電源
	 -d                              不留下記錄
     -f	                             強制,不調用shutdown
reboot                               重啟
init 0                               關機
init 6                               重啟
shutdown [OPTION] [TIME] [MESSAGE]   關機
         -h TIME                     指定關機時間
         -r TIME                     指定重啟主機時間
         -c                          取消關機或重啟計劃
         -h now/0                    立刻關機
         -r now/0                    立刻重啟
         -t <seconds>               發送警告訊號後延時(sec)秒數後,再發送關閉訊號
		 -k now                      發送警告訊號給所有用戶,不關機
logout                               登錄shell
login ; exit                         註銷
  • TIME:無指定,默認相當於+1(CentOS7)
  • now:立刻,相當於+0
  • +m:相對時間表示法,幾分鐘之後
  • hh:mm:絕對時間表示,指明具體時間

時間

系統時間:date

硬體時間:clock=hwclock

ntp伺服器時間同步:ntpdate

日曆:cal

Cent OS 7.x 查詢和更改系統時鐘和設置:timedatectl

shell腳本

bash的快捷鍵

Ctrl+a ; Home       將游標移動到行首
Ctrl+b ; 左方向鍵    游標向左移動一個字元
Ctrl+c              終止命令
Ctrl+d             	刪除游標右(處)的一個字元
Ctrl+e ; End        將游標移動到行尾
Ctrl+f ; 右方向鍵    游標向右移動一個字元
Ctrl+g              退出歷史搜索模式
Ctrl+h              刪除游標左的一個字元
Ctrl+j              執行當前命令
Ctrl+k              將游標所在位置到行尾內容進行刪除(剪切)
Ctrl+l  ; clear     清屏
Ctrl+o              執行當前命令,並重新顯示本命令
Ctrl+q              允許標準輸出,顯示被阻止的所有標準輸出
Ctrl+r              進入歷史搜索模式(reverse-i-search)`』:
Ctrl+s              阻止標準輸出,鎖定
Ctrl+t              交換游標左右(處)的字元位置
Ctrl+u              將游標所在位置到行首內容進行刪除(剪切)
Ctrl+w              從游標處向左刪除至單詞首(剪切)
Ctrl+xx             游標在行首和原位置之間移動
Ctrl+y              粘貼剪切的內容
Ctrl+z              掛起命令
Ctrl+左右方向鍵    	 按照一個單詞進行移動游標
TAB               	補全目錄路徑/文件名稱資訊/命令

Alt鍵在Windows軟體中會有快捷鍵衝突,默認為選擇菜單

Alt+b               游標向左移動一個單詞首
Alt+c               從游標處開始向右更改為首字母大寫的單詞
Alt+d               從游標處向右刪除至單詞尾(剪切)
Alt+f               游標向右移動一個單詞尾
Alt+l               從游標處開始,將右邊一個單詞更改為小寫
Alt+r               刪除當前行
Alt+t               交換游標左右(處)的單詞位置
Alt+u               從游標處開始,將右邊一個單詞更改為大寫
Alt+N               提示(arg:N) 輸入字元,重複顯示該字元N次(N表示具體的數字)

獲取幫助

獲取內部命令的幫助:

  • help COMMAND 或 man bash

獲取外部命令的幫助:

  1. 使用maninfo
  2. 直接查看本地說明文檔: /usr/share/doc/
    多數安裝了的軟體包的子目錄,包括了這些軟體的相關原理說明
    常見文檔:README INSTALL CHANGES
    配置文件範例
    HTML/PDF/PS 格式的文檔
    授權書詳情
  3. 官方文檔: Red Hat documentation
    第三方應用官方文檔
    //httpd.apache.org
    //www.nginx.org
    //mariadb.com/kb/en
    //dev.mysql.com/doc/
    //tomcat.apache.org
    //www.python.org
    通過發行版官方的文檔光碟或網站可以獲得安裝指南、部署指南、虛擬化指南等
    紅帽知識庫和官方在線文檔
    //kbase.redhat.com
    //www.redhat.com/docs
    //access.redhat.com
    //help.ubuntu.com/lts/serverguide/index.html
  4. 網站和搜索
    //tldp.org
    //www.slideshare.net
    //www.google.com
    Openstack filetype:pdf
    rhca site:redhat.com/docs

用戶與許可權

用戶管理

查看當前登錄會話、用戶和終端:wwhoamiwho,或者使用cut查看配置文件

創建用戶:useradd

修改用戶:usermod

刪除用戶:userdel

批量創建用戶:newusers

批量修改用戶密碼:chpasswd

修改當前用戶密碼:passwd

設置用戶策略:chage

互動式指定個人資訊:chfn

互動式指定用戶登陸shell :chsh

創建用戶組:groupadd

更改群組GID或名稱:groupmod

刪除用戶組:groupdel

更改組密碼:gpasswd

臨時切換主組:newgrp

管理用戶主要組群的成員:groupmems

查看用戶所屬組列表:groups

顯示用戶ID和組ID:id

查看用戶登錄日誌:last

顯示所有用戶最後一次登錄的時間:lastlog

切換用戶:su

以系統管理者的身份執行指令:sudo

設置用戶對命令的執行許可權(sudo授權):visudo

用戶/組配置文件

/etc/passwd                   用戶及其屬性資訊(名稱、UID、主組ID等)
/etc/group                    組及其屬性資訊
/etc/shadow                   用戶密碼及其相關屬性
/etc/gshadow                  組密碼及其相關屬性
/etc/skel/                    創建用戶家目錄的模板,誤刪家目錄可以從這複製恢復
/etc/sudoers                  sudo許可權配置文件,建議使用visudo
passwd文件格式->root:x:0:0:root:/root:/bin/bash

login name:登錄用名(wang)
passwd:密碼 (x)
UID:用戶身份編號 (1000)
GID:登錄默認所在組編號 (1000)
GECOS:用戶全名或注釋
home directory:用戶主目錄 (/home/wang)
shell:用戶默認使用shell (/bin/bash)

shadow文件格式->root:sha512加密::0:99999:7:::

登錄用名
用戶密碼:一般用sha512加密
從1970年1月1日起到密碼最近一次被更改的時間
密碼再過幾天可以被變更(0表示隨時可被變更)
密碼再過幾天必須被變更(99999表示永不過期)
密碼過期前幾天系統提醒用戶(默認為一周)
密碼過期幾天後帳號會被鎖定
從1970年1月1日算起,多少天后帳號失效

group文件格式->root:x:0:

群組名稱:就是群組名稱
群組密碼:通常不需要設定,密碼是被記錄在 /etc/gshadow
GID:就是群組的 ID
以當前組為附加組的用戶列表(分隔符為逗號)

gshdow文件格式->root:::

群組名稱:就是群的名稱

群組密碼:

組管理員列表:組管理員的列表,更改組密碼和成員

以當前組為附加組的用戶列表:多個用戶間用逗號分隔

更改加密演算法:authconfig

使用密碼庫: openssl、加密演算法:md5sum校驗文件

密碼的複雜性策略:

  • 足夠長

  • 使用數字、大寫字母、小寫字母及特殊字元中至少3種

  • 使用隨機密碼

  • 定期更換,不要使用最近曾經使用過的密碼

系統默認用戶的分類:

  • 管理員用戶: (root,UID=0) 最高層理者 擁有最高的許可權
  • 虛擬用戶: (UID=1~999)系統中每一個服務啟動,都必須使用一個用戶,不能登陸作業系統,沒有家目錄
  • 普通用戶: (UID=1000~65534)登陸系統,維護系統,常用的系統用戶.為了系統安全創建使用

操作用戶配置文件

推薦使用vipwvigr配置,使用pwckgrpck檢查

文件許可權

  1. 文件許可權的主要對象:
  • owner 屬主, u
  • group 屬組, g
  • other 其他, o
  1. 文件許可權的主要類型:
  • r Readable
  • w Writable
  • x eXcutable
  1. 許可權說明:

    文件 目錄
    r 可使用文件查看類工具獲取其內容 可以使用ls查看此目錄中文件列表
    w 可修改其內容 可在此目錄中創建文件,也可刪除此目錄中的文件
    x 可以把此文件提請內核啟動為一個進程 可以使用ls -l查看此目錄中文件元數據(須配合r),可以cd進入此目錄
    X 只給目錄x許可權,不給文件x許可權

文件的默認許可權:644

目錄的默認許可權:755

設置文件許可權:chmod

設置文件屬主/屬組:chownchgrp

特殊文件許可權

SUID, SGID, Sticky

為了使沒有許可權的普通用戶也能執行命令(二進位可執行文件)
前提:進程有屬主和屬組;文件有屬主和屬組
(1) 任何一個可執行程式文件能不能啟動為進程,取決發起者對程式文件是否擁有執行許可權
(2) 啟動為進程之後,其進程的屬主為發起者,進程的屬組為發起者所屬的組
(3) 進程訪問文件時的許可權,取決於進程的發起者
(a) 進程的發起者,同文件的屬主:則應用文件屬主許可權
(b) 進程的發起者,屬於文件屬組;則應用文件屬組許可權
(c) 應用文件「其它」許可權

二進位可執行文件上的 SUID 許可權 u+/-s
只有二進位可執行文件才能設定 SUID 許可權,對目錄設定 SUID 是無效的。
用戶要對該文件擁有x(執行)許可權。
用戶在執行該文件時,會以文件所有者的身份執行。
SetUID 許可權只在文件執行過程中有效,一旦執行完畢,身份的切換也隨之消失。

SGID 許可權 g+/-s
類似 SUID,但有不同點:
啟動為進程之後,其進程的屬組為原程式文件的屬組
既可以對文件進行配置,也可以對目錄配置:
默認用戶創建文件時,其屬組為此用戶所屬的主組
對目錄設定 SGID,則對此目錄有寫許可權的用戶在此目錄中創建的文件所屬的組為此目錄的屬組
通常用於創建一個協作目錄

Sticky BIT o+/-t
默認普通用戶對目錄有寫許可權時,可以刪除該目錄中的任何文件,忽視該文件的許可權或擁有權
對目錄設置Sticky 位後,只有文件的所有者或root可以刪除該文件
sticky 設置在文件上無意義

SUID SGID STICKY
      000 0
      001 1
      010 2
      011 3
      100 4
      101 5
      110 6
      111 7
chmod 7777 FILE
許可權位映射
SUID: user,佔據屬主的執行許可權位
   s:屬主擁有x許可權
   S:屬主沒有x許可權
SGID: group,佔據屬組的執行許可權位
   s:group擁有x許可權
   S:group沒有x許可權
Sticky: other,佔據other的執行許可權位
   t:other擁有x許可權
   T:other沒有x許可權

設置新建文件和目錄的默認許可權:umask

文件特有屬性顯示:lsattr

文件特有屬性修改:chattr

訪問控制列表

ACL:Access Control List
指文件的所有者、所屬組、其他人的讀/寫/執行之外的特殊的許可權,可以更精確的控制許可權的分配

ACL生效順序:所有者,自定義用戶,自定義組,其他人

CentOS7 默認創建的xfs和ext4文件系統具有ACL功能
CentOS7 之前版本,默認手工創建的ext4文件系統無ACL功能,需手動增加
tune2fs -o acl /dev/sdb1
mount -o acl /dev/sdb1 /mnt/test
設置ACL:
setfacl -m u:wang:rwx file|directory
setfacl -m g:salesgroup:rw file|directory
setfacl -m d:u:wang:rx directory
setfacl -Rm g:sales:rwX directory
setfacl -M file.acl file|directory
setfacl -x u:wang file|directory
setfacl -X file.acl directory
setfacl -b file|directory
getfacl file1 | setfacl --set-file=- file2  # 複製file1的acl許可權給file2
  • default 許可權

只針對於目錄,對目錄本身和目錄中已經存在的文件無效,只是決定目錄中新建文件初始許可權

ACL設置目錄x許可權,目錄內文件不繼承x許可權
setfacl -m d:u:root:rwx /tmp  # 對/tmp 設置default許可權,目錄中新建文件對root用戶有rwx許可權
  • mask 許可權

指用戶或群組能擁有的最大 ACL 許可權,用戶或組的設置必須存在於 mask 許可權設定範圍內才會生效
mask 與用戶的許可權進行邏輯與運算後,才是最終有效的ACL許可權(Effective Permission) #effective:

  • 備份和恢復:

cp -p和mv都支援ACL,但tar等常見的備份工具是不會保留目錄和文件的ACL資訊

備份ACL
getfacl -R /tmp/dir > acl.bak  # 會移除絕對路徑的根/
恢復ACL
setfacl -R --set-file=acl.bak /tmp/dir ; cd / && setfacl --restore acl.bak

文件系統與目錄結構

文件系統

文件和目錄被組織成一個單根倒置樹結構
文件系統從/根目錄下開始
根文件系統(rootfs):root filesystem
文件名稱區分大小寫
隱藏文件以.開頭的文件
路徑的分隔符:/
文件有兩類數據:

  • 元數據:metadata
  • 數據:data

文件系統分層結構:

33596515 -rw-r--r--  2 root root  149 Jul 15 11:03 test

inode:33596515
文件類型:-  # 普通文件
文件許可權:rw-r--r--  # 文件所歸屬的用戶、用戶組可讀可寫,其他用戶可讀
硬鏈接數:2
文件屬主:root
文件屬組:root
文件大小:149 bytes
文件修改時間: Jul 15 11:03

文件名規則

文件名最長255個位元組,包括路徑在內最長4095個位元組。

  • 藍色–>目錄
  • 綠色–>可執行文件
  • 紅色–>壓縮文件
  • 淺藍色–>鏈接文件
  • 灰色–>其他文件

/NUL外所有字元都有效。

不推薦使用特殊字元的目錄名和文件,因為那樣需要使用引號來引用它們。

標準Linux文件系統(如ext4),文件名大小寫敏感

文件系統結構

/boot:引導文件存放目錄,內核文件(vmlinuz)、引導載入器(bootloader, grub)都存放於此目錄
/bin:所有用戶使用的基本命令;不能關聯至獨立分區,OS啟動即會用到的程式
/sbin:管理類的基本命令;不能關聯至獨立分區,OS啟動即會用到的程式
/lib:啟動時程式依賴的基本共享庫文件以及內核模組文件(/lib/modules)
/lib64:專用於x86_64系統上的輔助共享庫文件存放位置
/etc:配置文件目錄
/etc/sysconfig/network-scripts/ifcfg-eth0:網卡配置文件
/etc/hostname:主機名,還可使用hostnamehostnamectl查看修改
/etc/fstab:開機自動掛載硬體
/etc/resolv.conf:DNS伺服器配置文件
/etc/nsswitch.conf:name service switch configuration,實現名稱解析服務
/etc/issue:開機歡迎語句
/etc/issue.net:telnet連接專用開機歡迎語句
/etc/motd:登陸系統後顯示的內容,默認為空
/etc/hosts:域名和IP對應關係,相當於本地DNS伺服器
/etc/host.conf:配置域名服務客戶端的控制文件
/etc/networks:域名與網路地址的映射
/etc/protocols:主機使用的協議以及各個協議的協議號
/etc/services:主機的不同埠的網路服務
/etc/rc.local:開機自啟動,首先要獲取執行許可權x
/etc/inittab:運行級別,可用使用runlevel查看,init臨時修改,systemctl(Cent OS 7.x)永久修改
/etc/profile:環境變數,可用使用export、env、set、echo $查看,source即時生效
/etc/redhat-release:系統版本資訊,還可用使用hostnamectluname查看
/etc/selinux/config:SELinux配置文件
/etc/yum.repos.d/:yum源倉庫配置文件
/etc/locale.conf:centos7.x字符集配置文件
/etc/sysconfig/i18n:centos6.x字符集配置文件
/etc/sudoers:= visudo ;sudoers列表,讓普通賬戶能夠執行sudo命令,甚至免密執行sudo命令
/etc/passwd:用戶及其屬性資訊(名稱、UID、主組ID等)
/etc/group:組及其屬性資訊
/etc/shadow:用戶密碼及其相關屬性
/etc/gshadow:組密碼及其相關屬性
/etc/skel/:創建用戶家目錄的模板,誤刪家目錄可以從這複製恢復
/etc/crontab:系統任務調度,定期執行程式,直接修改配置文件
/etc/cron.hourly/:系統定時任務每個小時運行這個目錄里的內容
/etc/cron.daily/:系統定時任務每天運行這個目錄里的內容
/etc/cron.weekly/:系統定時任務每周運行這個目錄里的內容
/etc/cron.monthly/:系統定時任務每月運行這個目錄里的內容
/etc/cron.deny:定時任務黑名單
/etc/yum.conf:為所有倉庫提供公共配置
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
/home/USERNAME:普通用戶家目錄
/root:管理員的家目錄
/media:攜帶型移動設備掛載點
/mnt:臨時文件系統掛載點
/dev:設備文件及特殊文件存儲位置
b: block device,隨機訪問
c: character device,線性訪問
/dev/urandom:生成隨機數,可用trhead過濾
/dev/null:黑洞
/dev/zero:生成大文件
/opt:第三方應用程式的安裝位置
/srv:系統上運行的服務用到的數據
/tmp:臨時文件存儲位置
/usr: universal shared, read-only data(universal shared 通用共享)
bin: 保證系統擁有完整功能而提供的應用程式
sbin:
lib:32位使用
lib64:只存在64位系統
include: C程式的頭文件(header files)
share:結構化獨立的數據,例如doc, man等
/usr/share/doc/:文件說明
/usr/share/doc/initscripts-9.49.30/sysconfig.txt:初始化腳本,系統配置文件說明
local:第三方應用程式的安裝位置,編譯安裝的軟體默認存放文件的位置
bin, sbin, lib, lib64, etc, share
/var: variable data files 多變數據文件,可用tailtailf等查看日誌,split分割大日誌
/var/cache: 應用程式快取數據目錄
/var/lib: 應用程式狀態資訊數據
/var/local:專用於為/usr/local下的應用程式存儲可變數據
/var/lib/rpm:rpm資料庫
/var/lock: 鎖文件
/var/log: 日誌目錄及文件
/var/opt: 專用於為/opt下的應用程式存儲可變數據
/var/run: 運行中的進程相關數據,通常用於存儲進程pid文件
/var/run/utmp:系統運行級別記錄
/var/spool: 應用程式數據池
/var/spool/cron/:用戶任務調度,定期執行程式,可使用 crontab 命令設置
/var/spool/clientmqueue/:centos6存放待MTA發送郵件(比如cron發的郵件)
/var/spool/postfix/maildrop/:centos7存放待postfix發送郵件(比如cron發的郵件)
/var/tmp: 保存系統兩次重啟之間產生的臨時數據
/var/log/dmesg:開機啟動資訊,缺少最後一次的資訊,可用dmesg查看完整資訊
/var/log/messages:系統默認的日誌文件,保存了系統的運行狀況,執行命令的資訊
/var/log/secure:系統默認的日誌文件,保存了安全方面的資訊:登錄、退出等操作
/var/log/服務名:服務的默認日誌
/var/log/cron:定時任務的日誌文件
/var/log/yum.log:yum日誌
/proc: 用於輸出內核與進程資訊相關的虛擬文件系統,可用sysctl修改內核的運行參數
/proc/cpuinfo:查看cpu資訊,可用lscpu
/proc/meminfo:查看記憶體資訊,可用free
/proc/loadvag:系統的平均負載,可用uptimew
/proc/mounts:掛載的文件系統的詳細資訊
/proc/buddyinfo:每個記憶體區中的每個order有多少塊可用,和記憶體碎片問題有關
/proc/cmdline:啟動時傳遞給kernel的參數資訊
/proc/crypto:內核使用的所有已安裝的加密密碼及細節
/proc/devices:已經載入的設備並分類
/proc/dma:已註冊使用的ISA DMA頻道列表
/proc/execdomains:Linux內核當前支援的execution domains
/proc/fb:幀緩衝設備列表,包括數量和控制它的驅動
/proc/filesystems:內核當前支援的文件系統類型
/proc/interrupts:x86架構中的每個IRQ中斷數
/proc/iomem:每個物理設備當前在系統記憶體中的映射
/proc/interrupts:列出當前所有系統註冊(還沒卸載)的中斷:中斷號,中斷髮生次數,中斷設備名稱
/proc/ioports:一個設備的輸入輸出所使用的註冊埠範圍
/proc/kcore:代表系統的物理記憶體,存儲為核心文件格式,裡邊顯示的是位元組數,等於RAM大小加上4kb
/proc/kmsg:記錄內核生成的資訊,可以通過/sbin/klogd或/bin/dmesg來處理
/proc/loadavg:根據過去一段時間內CPU和IO的狀態得出的負載狀態,與uptime命令有關
/proc/locks:內核鎖住的文件列表
/proc/mdstat:多硬碟,RAID配置資訊(md=multiple disks)
/proc/misc:其他的主要設備(設備號為10)上註冊的驅動
/proc/modules:所有載入到內核的模組列表
/proc/mtrr:系統使用的Memory Type Range Registers (MTRRs)
/proc/partitions:分區中的塊分配資訊
/proc/pci:系統中的PCI設備列表
/proc/slabinfo:系統中所有活動的 slab 快取資訊
/proc/stat:所有的CPU活動資訊
/proc/sysrq-trigger:遠程root用戶可以執行大多數的系統請求關鍵命令,像在本地終端執行
/proc/sys/kernel/sysrq:設置為0,sysrq-trigger文件不能寫入
/proc/uptime:系統已經運行了多久
/proc/swaps:交換空間的使用情況
/proc/version:Linux內核版本和gcc版本
/proc/bus:系統匯流排(Bus)資訊,例如pci/usb等
/proc/driver:驅動資訊
/proc/fs:文件系統資訊
/proc/ide:ide設備資訊
/proc/irq:中斷請求設備資訊
/proc/net:網卡設備資訊
/proc/scsi:scsi設備資訊
/proc/tty:tty設備資訊
/proc/net/dev:顯示網路適配器及統計資訊
/proc/vmstat:虛擬記憶體統計資訊
/proc/vmcore:內核panic時的記憶體映像
/proc/diskstats:取得磁碟資訊
/proc/schedstat:kernel調度器的統計資訊
/proc/zoneinfo:顯示記憶體空間的統計資訊,對分析虛擬記憶體行為很有用
/proc/sys/fs/file-max:文件打開數
/proc/sys/fs/file-nr:整個系統目前使用的文件句柄數量
/proc/sys/net/ipv4/ip_forward:IP轉發
/proc/sys/net/ipv4/ip_local_port_range:本地tcp/udp自動隨機埠範圍,使用sysctl修改
/proc/sys/net/ipv4/ip_local_reserved_ports:為已知第三方應用程式保留以逗號分隔的埠列表
/proc/sys/net/ipv4/tcp_fin_timeout:本地TCP等待2倍MSL(完成超時時間)
/proc/sys/net/ipv4/tcp_congestion_control:當前所使用的TCP擁塞控制演算法
/proc/sys/kernel/hostname:主機名
/proc/N:pid為N的進程資訊
/proc/N/cmdline:進程啟動命令
/proc/N/cwd:鏈接到進程當前工作目錄
/proc/N/environ:進程環境變數列表
/proc/N/exe:鏈接到進程的執行命令文件
/proc/N/fd:包含進程相關的所有的文件描述符
/proc/N/maps:與進程相關的記憶體映射資訊
/proc/N/mem:指代進程持有的記憶體,不可讀
/proc/N/root:鏈接到進程的根目錄
/proc/N/stat:進程的狀態
/proc/N/statm:進程使用的記憶體的狀態
/proc/N/status:進程狀態資訊,比stat/statm更具可讀性
/proc/self:鏈接到當前正在運行的進程
/sys:用於輸出當前系統上硬體設備相關資訊虛擬文件系統
/selinux: security enhanced Linux,selinux相關的安全策略等資訊的存儲位置

CentOS 7目錄變化:
/bin -> /usr/bin
/sbin -> /usr/sbin
/lib -> /usr/lib
/lib64 -> /usr/lib64

應用程式組成部分

  • 二進位程式:/bin,/sbin,/usr/bin,/usr/sbin,/usr/local/bin,/usr/local/sbin
  • 庫文件:/lib,/lib64,/usr/lib,/usr/lib64,/usr/local/lib,/usr/local/lib64
  • 配置文件:/etc,/etc/DIRECTORY,/usr/local/etc
  • 幫助文件:/usr/share/man,/usr/share/doc,/usr/local/share/man,/usr/local/share/doc

文件類型

  • -普通文件
    • 普通文本文件:使用echo、vim、vi、touch等創建的文件
    • 二進位文件:系統中的命令
    • 數據文件:壓縮包、.rpm、.tar.gz、.zip
  • d目錄文件
  • b塊設備
  • c字元設備
  • l符號鏈接文件
  • p管道文件:pipe
  • s套接字文件:socket

磁碟管理

永久生效:加入配置文件/etc/fstab

  • 顯示可用塊設備資訊:blkidlsblk
  • 磁碟分區工具:fdisk(MBR)、parted(GPT)
  • 重讀分區表:partprobe
  • 創建Linux文件系統:mkfs
  • 交換分區:創建mkswap、激活swapon、關閉swapoff
  • 文件系統:掛載mount、卸載umount
  • 查看文件系統磁碟空間使用情況:df
  • 顯示文件和目錄使用的磁碟空間:du
  • 轉換或複製文件:dd
  • 查看磁碟IO:iotop
  • 顯示ext2/ext3文件系統資訊:dumpe2fs
  • 調整ext2/ext3/ext4文件系統大小:resize2fs
  • 調整ext2/ext3/ext4文件系統參數:tune2fs
  • 檢查並修復Linux文件系統:fsck
  • 刷新文件系統緩衝區:sync
  • 查看二進位文件的內容:od

進程管理

  • 實時進程查看器(動態):htoptop
  • 查看當前進程(靜態):pspstree
  • 進程調用文件的相關資訊:lsof
  • 殺死進程:kill PID、killall |pkill 進程名
  • 在後台運行進程:命令最後加 &
  • 操作後台任務:顯示jobs、切到後台bg、切到前台fg
  • 註銷後仍在後台運行進程:nohup
  • 多重視窗管理器:screen
  • 指定命令優先順序:nicechrt
  • 修改進程優先順序:renice
  • 睡眠:sleep

網路管理

文件操作

  • 新建普通文件/修改時間戳:touch
  • 新建文件夾:mkdir
  • 硬鏈接和軟鏈接:ln
  • 很多命令都可以順帶創建文件:

  • 刪除: rm
  • 刪除空目錄: rmdir
  • 移動/改名:mv

  • 查看當前絕對路徑:pwd
  • 顯示目錄樹:tree
  • 進入目錄:cd
  • 列出目錄內容:ls
  • 查看文件狀態:stat
  • 查看每個文件中選定的行:cut
  • 檢查文件的類型:file
  • 文件查看:cat
  • 文件反向查看:taccat相反
  • 文件查看並添加行號:nl
  • 分頁查看文件內容:lessmore
  • 顯示文本前行內容:head
  • 顯示文本後行內容:tailtailf
  • 查看系統資料庫中的相關記錄:getent
  • 查找符合條件的文件:findlocate

將輸入的字元串標準輸出:echo

調用並執行指定的命令:exec

抽取文本操作

  • 按列抽取文本內容:cut
  • 合併文件:paste
  • 文本數據統計:wc
  • 文本排序:sort
  • 轉換和刪除字元:tr
  • 刪除前後相接的重複的行:uniq
  • 比較文件區別:diff
  • 複製在其它文件中進行的改變:patch
  • 文本過濾(模式:pattern)工具 grep, egrep, fgrep(不支援正則表達式搜索)
  • 行文本編輯工具:sed:stream editor
  • 文本報告生成器:awk
  • 每一行字元的順序顛倒查看:rev
  • 將輸入格式化為多個列:column
  • 在管道符|不能使用時,可以使用xargs傳參
  • 生成序列:seq
  • 讀取標準輸入,將其內容保存成文件,並輸出到標準輸出:tee
  • 周期性執行命令:watch
  • 算數運算:bcexpr

正則表達式

REGEXP: Regular Expressions,由一類特殊字元及文本字元所編寫的模式,其中有些字元(元字元)不表示字元字面意義,而表示控制或通配的功能

支援:grep,sed,awk,vim,less,nginx,varnish等

分兩類:

  • 基本正則表達式:BRE
  • 擴展正則表達式:ERE

通常,你應該始終用單引號將正則表達式括起來,以避免shell解釋和擴展元字元。

正則表達式引擎:
採用不同演算法,檢查處理正則表達式的軟體模組
PCRE(Perl Compatible Regular Expressions)

元字元分類:

字元匹配、匹配次數、位置錨定、分組

基本正則表達式 BRE 元字元

  • 字元匹配:
.            匹配任意單個字元
[]           匹配指定範圍內的任意單個字元,示例:[wang] [0-9] [a-z] [a-zA-Z]
[^]          匹配指定範圍外的任意單個字元
  • 匹配次數:

用在要指定次數的字元後面,用於指定前面的字元要出現的次數

 *         匹配前面的字元任意次,包括0次,貪婪模式:儘可能長的匹配
 .*        任意長度的任意字元
 \?        匹配其前面的字元0或1次
 \+        匹配其前面的字元至少1次
 \{n\}     匹配前面的字元n次
 \{m,n\}   匹配前面的字元至少m次,至多n次
 \{,n\}    匹配前面的字元至多n次
 \{n,\}    匹配前面的字元至少n次
  • 位置錨定:

定位出現的位置

^               行首錨定,用於模式的最左側
$               行尾錨定,用於模式的最右側
^PATTERN$       用於模式匹配整行
^$              空行
^[[:space:]]*$  空白行
\< 或 \b        詞首錨定,用於單詞模式的左側
\> 或 \b        詞尾錨定,用於單詞模式的右側
\<PATTERN\>     匹配整個單詞
\w              某個單詞
分組:\(\) 
將一個或多個字元捆綁在一起,當作一個整體處理,如:\(root\)\+
分組括弧中的模式匹配到的內容,會被正則表達式引擎記錄於內部的變數中,
這些變數的命名方式為: \1, \2, \3, ...
示例:
\(string1\(string2\)\)
\1 :string1\(string2\)  # 表示從左側起第一個左括弧以及與之匹配右括弧之間的模式所匹配到的字元。
\2 :string2
後向引用:引用前面的分組括弧中的模式所匹配字元,而非模式本身

或:\|
示例:a\|b        a或b
     C\|cat      C或cat
     \(C\|c\)at  Cat或ca

擴展正則表達式 ERE 元字元

  • 字元匹配:
.   任意單個字元
[]  指定範圍的字元
[^] 不在指定範圍的字元
  • 次數匹配:
*     匹配前面字元任意次
?     0或1次
+     1次或多次
{m}   匹配m次
{m,n} 至少m,至多n次
  • 位置錨定:
^      行首
$      行尾
\<, \b 語首
\>, \b 語尾
\w     單詞
分組:()

後向引用:\1, \2, ...

或:
a|b      a或b
C|cat    C或cat
(C|c)at  Cat或cat

特殊字符集

字符集需要用 [ ] 來包含住,否則不會生效

[:alnum:]    字母和數字
[:alpha:]    代表任何英文大小寫字元,亦即 A-Z, a-z
[:lower:]    小寫字母 
[:upper:]    大寫字母
[:blank:]    空白字元(空格和製表符)
[:space:]    水平和垂直的空白字元(比[:blank:]包含的範圍廣)
[:cntrl:]    不可列印的控制字元(退格、刪除、警鈴...)
[:digit:]    十進位數字 
[:xdigit:]   十六進位數字
[:graph:]    可列印的非空白字元
[:print:]    可列印字元
[:punct:]    標點符號

文件通配符

shell 自帶的文件通配符(globbing)通常用於查找文件,而正則表達式通常用於查找文件內容

  • shell 通配符:

    通配符使用時不能加'' "",而find本身具備解析通配符的能力,需要加'' ""防止shell解析通配符

*                 匹配任意零個或多個字元
?                 匹配任意一個字元
[0-9]             匹配任意數字
[a-z]             匹配任意小寫字母
[A-Z]             匹配任意大寫字母
[]                匹配中括弧里任意一個字元,- 指定範圍
[^] ; [!]         匹配中括弧里任意字元以外的字元,取反
  • 大括弧擴展
shopt -o          查看大括弧擴展功能狀態 braceexpand
set +B            關閉大括弧擴展功能
set -B            開啟大括弧擴展功能

{num1..num2}     num1 到 num2 序列
{str1,str2,...}   srt1 或者 srt2 或者 更多 字元串
  • 路徑位置
.                 當前目錄
..                上一級目錄
-                 前一個工作目錄 su - 切換用戶的系統環境
~                 當前用戶家目錄
~test             用戶test家目錄
~+                當前工作目錄
~-                前一個工作目錄
  • shell 元字元:

在使用通配符時如果沒有進行轉義可能就會被辨識為元字元

IFS	     由 < space > 或 < tab > 或 < enter > 三者之一組成
CR	     由 < enter > 產生
=	     設定變數
$	     作變數或運算替換;普通用戶的命令提示符
>        重導向標準輸出
<	     重導向標準輸入
|	     管道, 將前一個命令的結果交給後一命令繼續處理
&	     重導向文件描述符,或將命令靜默執行
( )	     將其內的命令置於 nested subshell 執行,或用於運算或命令替換
{ }	     將其內的命令置於 non-named function 中執行,或用在變數替換的界定範圍
;	     在前一個命令結束時,而忽略其返回值,繼續執行下一個命令
&&	     在前一個命令結束時,若返回值為 true,繼續執行下一個命令
||	     在前一個命令結束時,若返回值為 false,繼續執行下一個命令
!	     執行 history 中的命令
#        注釋,常用在腳本中;超級用戶的命令提示符
/        根目錄;路徑分隔符
\(反斜杠) 轉義字元,去除其後緊跟的元字元或通配符的特殊意義
  • shell 轉義字元:

轉換和刪除字元:tr

『』(單引號)     硬轉義,其內部所有的shell元字元、通配符都會被關掉。
「」(雙引號)     軟轉義,其內部只允許出現特定的shell元字元:
              $用於參數替換 
              ``(反引號)用於命令替換 等同於$()
              !用於歷史命令
              \用於轉義
\(反斜杠)      轉義字元,去除其後緊跟的元字元或通配符的特殊意義
轉義字元 意義 ASCII碼值(十進位)
\a 響鈴(BEL) 007
\b 退格(BS) ,將當前位置移到前一列 008
\f 換頁(FF),將當前位置移到下頁開頭 012
\n 換行(LF) ,將當前位置移到下一行開頭 010
\r 回車(CR) ,將當前位置移到本行開頭 013
\t 水平製表(HT) (跳到下一個TAB位置) 009
\v 垂直製表(VT) 011
\\ 代表一個反斜線字元\ 092
\' 代表一個單引號字元 039
\" 代表一個雙引號字元 034
\? 代表一個問號 063
\0 空字元(NULL) 000
\ooo 1到3位八進位數所代表的任意字元 三位八進位
\xhh 1到2位十六進位所代表的任意字元 二位十六進位
  • 總結:
  • 使用^時,從句首第一個字元向後開始匹配,直到成功匹配指定次數指定字元後停止。
  • 使用$時,從句尾最後一個字元向前開始匹配,直到成功匹配指定次數指定字元後停止。
  • 同時使用^$時,必須保證能夠匹配整行每一個字元。
  • 盡量使用'',可以防止出現未知轉義,所有需要的轉義可以使用轉義符\
  • 注意:BREERE使用時,除了.*[]、錨定(行首尾錨定^$、詞首尾錨定\<, \b、單詞錨定\w)和\>, \b以及調用內置變數\1、\2、\3、...是相同的,基本可以看做:
    • BRE直接使用特殊符號的原本含義,使用特殊符號的正則表示式含義需要添加轉義符\

    • ERE直接使用特殊符號的正則表示式含義,使用特殊符號的原本含義需要添加轉義符\

索引節點

inode(index node)表中包含文件系統的所有文件列表,一般會佔用文件系統磁碟空間的1%。

一個節點 (索引節點)是一個表項,包含有關文件的資訊(元數據):

  • ​ 文件類型,許可權,UID,GID,大小,三個時間戳
  • ​ 鏈接數(指向這個文件名路徑名稱個數;文件的 inode 引用計數)
  • ​ 指向磁碟上文件的數據塊指針
  • ​ 有關文件的其他數據

​ 目錄是目錄下的文件名(人通過文件名來引用一個文件)和 inode 號(系統通過 inode 號來引用一個文件)之間的映射。

一個目錄文件的內容就是一個該目錄下所有文件的目錄項的列表

cp 和 inode:

  • 分配一個空閑的 inode 號,在 inode 表中生成新條目
  • 在目錄中創建一個目錄項,將名稱與 inode 編號關聯
  • 拷貝數據生成新的文件

rm 和 inode:

  • 鏈接數遞減,從而釋放的 inode 號可以被重用
  • 把數據塊放在空閑列表中s
  • 刪除目錄項,而數據實際上不會馬上被刪除,但當另一個文件使用數據塊時將被覆蓋

mv 和 inode:

  • 如果mv命令的目標和源在相同的文件系統,作為 mv 命令

    • 用新的文件名創建對應新的目錄項
  • 刪除舊目錄條目對應的舊的文件名

    • 不影響 inode 表(除時間戳)或磁碟上的數據位置:沒有數據被移動!
  • 如果目標和源在一個不同的文件系統,mv 相當於 cp 和 rm

重定向

打開的文件都有一個fd: file descriptor (文件描述符)

Linux給程式提供三種 I/O 設備:

  • 標準輸入(STDIN) -文件描述符為0 默認接受來自鍵盤的輸入
  • 標準輸出(STDOUT)-文件描述符為1 默認輸出到終端窗口
  • 標準錯誤(STDERR)-文件描述符為2 默認輸出到終端窗口

I/O重定向:改變默認位置

重定向的5種方式:

輸出重定向: >  覆蓋文件
echo 內容 > 文件      
ls 文件名 > 文件
追加重定向;>> 追加文件
echo 內容 >> 文件      
ls 文件名 >> 文件
輸入重定向;重新指定設備來代替鍵盤作為新的輸入設備
命令 < 文件	            將指定文件作為命令的輸入設備
命令 << 分界符	       表示從標準輸入設備(鍵盤)中讀入,直到遇到分界符才停止
                      (讀入的數據不包括分界符),這裡的分界符其實就是自定義的字元串
命令 <<- 分界符         忽略輸入行首的tab,從標準輸入設備(鍵盤)中讀入,
                       直到遇到分界符才停止(讀入的數據不包括分界符)
命令 < 文件1 > 文件2	   將 文件1 作為命令的輸入設備,該命令的執行結果輸出重定向到 文件2 中
命令 < 文件1 >> 文件2    將 文件1 作為命令的輸入設備,該命令的執行結果追加重定向到 文件2 中
命令 <<< word           把word(而不是文件word)和後面的換行作為輸入提供給cmd

cat < mm                 輸出mm文件中內容
cat << 0                 當指定了 0 作為分界符之後,只要不輸入 0,就可以一直輸入數據。
cat < /etc/passwd > mm   將輸出的/etc/passwd 文件中內容重定向到 mm 中
錯誤重定向;
查看不存在的kk文件,出現報錯資訊,將其保存到文件b中
cat kk 2> b
COMMAND > /path/to/file.out 2> /path/to/error.out 標準輸出 和 標準錯誤 各自重定向至不同位置
COMMAND > /path/to/file.out 2>&1 (順序很重要)    標準輸出 和 標準錯誤 都重定向到file.out
COMMAND >> /path/to/file.out 2>&1                標準輸出 和 標準錯誤 都追加重定向到file.out
(COMMAND;COMMAND)                                 合併重定向多個COMMAND
注意: cmd > file 2>&1 與 cmd 2>&1 >file 的效果不一樣
cmd 2>&1 >file 在執行 2>&1 時 標準輸出 還是向終端輸出 ,則 標準輸出 向終端輸出
1>&2       標準輸出 拷貝了 標準錯誤 的行為,並立即執行
2>&1       標準錯誤 拷貝了 標準輸出 的行為,並立即執行

> ; 1>     標準輸出 重定向
< ; 0<     標準輸入 重定向
2>&1       把 標準錯誤 重定向到 標準輸出
2>file     把 標準錯誤 重定向到file
2>>file    把 標準錯誤 追加重定向到file
&>file     把 標準輸出 和 標準錯誤 都重定向到file
&>>file    把 標準輸出 和 標準錯誤 都追加重定向到file
/dev/null  是一個文件,這個文件比較特殊,所有傳給它的東西它都丟棄掉
shell set選項:shopt -o 列出可由set命令設置的選項
       set -C   禁止將內容覆o蓋已有文件,但可追加
       >| file  強制覆蓋
       set +C   允許覆蓋

cmd >&n  把輸出送到文件描述符n
cmd m>&n 把輸出到文件描述符m的資訊重定向到文件描述符n
cmd >&-  關閉標準輸出
cmd <&n  輸入來自文件描述符n
cmd m<&n m來自文件描述符n
cmd <&-  關閉標準輸入

command

tr

返迴文件通配符

返迴文件系統結構

tr [OPTION]... SET1 [SET2] 轉換和刪除字元
   -c –C --complement      取字符集的補集
   -d --delete             刪除SET1的字元
   -s --squeeze-repeats    把連續重複的字元以單獨一個字元表示
   -t --truncate-set1      將SET1轉化為SET2
tr -d a < filename         刪除文件filename標準輸出中的a
tr -s '\n' < filename      刪除文件filename標準輸出中的空行

cat filename |tr a-z A-Z       將文件filename中標準輸出的小寫字母全部轉換成大寫字母
or
cat filename |tr [:lower:] [:upper:] 
示例:
echo aexzfszek>test.txt
cat test.txt |tr a-z A-Z
cat test.txt |tr [:lower:] [:upper:]
tr -cd '0-9a-zA-Z' < /dev/urandom | head -c8;echo  # 生成8位隨機數
which

返回命令類型

which [options] COMMAND  查找命令所在文件的位置
      --all, -a          列印路徑中的所有匹配項,而不僅僅是第一個匹配項
      --read-alias, -i   從stdin讀取別名列表
      --skip-alias       忽略別名列表,忽略選項 --read-alias 

which -a COMMAND --skip-alias  # 查看 COMMAND 所有路徑,忽略別名
whereis

返回命令類型

whereis [options] COMMAND 查看命令所在路徑以及命令相關手冊文件所在路徑
        -b                只搜索二進位文件
        -B <目錄>          定義二進位文件查找路徑
        -m                只搜索 man 手冊
        -M <目錄>          定義 man 手冊查找路徑
        -s                只搜索源程式碼
        -S <目錄>          定義源程式碼查找路徑
        -f                終止 <目錄> 參數列表
        -u                搜索不常見記錄
        -l                輸出有效查找路徑
type

返回命令類型

type [-aptP] [name …]  用於查看命令類型。
     -a 返回包含可執行命名文件的所有位置。不使用-p時也包括別名、shell函數。
     -t 如果 name 是別名、shell函數、內建命令、磁碟文件、shell保留關鍵字,
        則會分別輸出「alias」、「function」、「builtin」、「file」、「keyword」,
        如果未找到,則不會有任何輸出,並返回失敗狀態
	 -p 返回執行文件的路徑,如果使用-t不返回「file」則不返回任何內容。
     -P 強制返回執行文件的路徑,即使使用-t時不返回「file」。
        如果命令被記錄到hash表中,則-p和-P選項會列印hash值,而不一定會列印出文件在$PATH中的路徑。
hash

返回命令類型

hash                顯示命令運行時查詢的哈希表
hash –l             顯示hash快取,可作為輸入使用
hash –p path name   將命令全路徑path起別名為name
hash –t name        列印快取中name的路徑
hash –d name        清除name快取
hash –r             清除快取
alias

返回命令類型

命令別名:alias
alias                         顯示當前shell進程所有可用的命令別名
alias NAME='VALUE'            定義別名 NAME,其相當於執行命令 VALUE,僅對當前shell進程有效
unalias -a                    取消所有別名
\NAME                         還原別名成本名
永久配置文件:
僅對當前用戶有效:~/.bashrc
對所有用戶有效:/etc/bashrc
  • 如果別名與原命令同名,要執行原命令,忽略別名,可用:
\ALIASNAME ; 「ALIASNAME」 ; 『ALIASNAME』 ; command ALIASNAME ; /path/command
ln

返迴文件操作

硬鏈接和軟鏈接:ln

ln [參數][源文件或目錄][目標文件或目錄]  為某一個文件在另外一個位置建立一個同步的鏈接
ln 源文件 鏈接文件  創建硬鏈接,不能用於目錄,必須在同一個文件系統中(不能跨越驅動器或分區)
                  以文件副本的形式存在,但不佔用實際空間。源文件必須存在
                  
				  增加額外的記錄項以引用文件,引用相同的 inode 號。
 			      創建時鏈接數遞增;刪除時鏈接數遞減
 			      文件要存在,至少有一個鏈接數,當鏈接數為零時,該文件被刪除,

ls -i             顯示文件 inode 號,硬鏈接是相同的					
					
ln -s             創建軟鏈接,可以用於目錄,可以不在同一個文件系統中(可以跨分區)
                  以路徑的形式存在,類似於Windows中的快捷方式。源文件或目錄可以不存在
                  
                  保存了其代表的文件的絕對路徑,其大小為指向的路徑字元串的長度
ls -l             顯示軟鏈接的名稱和引用的文件
file

返迴文件操作

返迴文件類型

檢查文件的類型:file
文件可以包含多種類型的數據,檢查文件的類型,然後確定適當的打開命令或應用程式使用:

file [options] <filename>...
     -b          列出文件辨識結果時,不顯示文件名稱
     -f filelist 列出文件 filelist 中文件名的文件類型
     -F          使用指定分隔符號替換輸出文件名後默認的」:」分隔符
     -L          查看軟鏈接對應文件的文件類型
getent

返迴文件操作

支援的資料庫: ahosts,ahostsv4 ,ahostsv6, aliases ,ethers ,group, gshadow, hosts, netgroup, networks, passwd, protocols, rpc ,services, shadow,等

getent [選項] database        查看系統資料庫中的相關記錄
       -i, --no-idn          禁用IDN編碼
       -s, --service=CONFIG  要使用的服務配置

Example:
getent hosts linuxcool.com   查看hosts庫中的linux.com資訊
getent passwd root           查看passwd庫中的root資訊
awk
gawk

返回正則表達式

awk [options] -f progfile [var=value] file ...
awk [options] [var=value] 'program' file ...
POSIX options:	GNU long options: (standard)
	-f progfile	--file=progfile           從腳本文件中讀取awk命令
	-F fs		--field-separator=fs      指定分隔符,fs是一個字元串或正則表達式
	-v var=val	--assign=var=val          賦值一個自定義變數
Short options:	GNU long options: (extensions)
	-b			--characters-as-bytes     將所有輸入數據視為單位元組字元(--posix覆蓋這個選項)
	-c			--traditional             在兼容模式下運行,awk=gawk
	-d[file]	--dump-variables[=file]   列印已排序的全局變數列表,沒有 file 列印幫助
	-e 'program-text'	--source='program-text'  使用 program-text 作為AWK程式源程式碼
	-g			--gen-pot                 掃描並解析AWK程式,生成一個GNU.pot
	                                     (可移植對象模板)格式的文件
	-n			--non-decimal-data        識別輸入數據中的八進位和十六進位值
	-r			--re-interval             在正則表達式匹配中啟用間隔表達式的使用 
awk內置變數:
$n	          當前記錄的第n個欄位,欄位間由FS分隔
$0	          完整的輸入記錄
ARGC	      命令行參數的數目
ARGIND	      命令行中當前文件的位置(從0開始算)
ARGV	      包含命令行參數的數組
CONVFMT	      數字轉換格式(默認值為%.6g)
ENVIRON       環境變數關聯數組
ERRNO	      最後一個系統錯誤的描述
FIELDWIDTHS	  欄位寬度列表(用空格鍵分隔)
FILENAME	  當前文件名
FNR	          各文件分別計數的行號
FS	          欄位分隔符(默認是任何空格)
IGNORECASE	  如果為真,則進行忽略大小寫的匹配
NF	          一條記錄的欄位的數目
NR	          已經讀出的記錄數,就是行號,從1開始
OFMT	      數字的輸出格式(默認值是%.6g)
OFS	          輸出記錄分隔符(輸出換行符),輸出時用指定的符號代替換行符
ORS	          輸出記錄分隔符(默認值是一個換行符)
RLENGTH	      由match函數所匹配的字元串的長度
RS	          記錄分隔符(默認是一個換行符)
RSTART	      由match函數所匹配的字元串的第一個位置
SUBSEP	      數組下標分隔符(默認值是/034)
= += -= *= /= %= ^= **=    賦值
?:	                       C條件表達式
||	                       邏輯或
&&	                       邏輯與
~ 和 !~	                  匹配正則表達式和不匹配正則表達式
< <= > >= != ==	           關係運算符
空格	                      連接
+ -	                       加,減
* / %	                   乘,除與求余
+ - !	                   一元加,減和邏輯非
^    	                   求冪
++ --	                   增加或減少,作為前綴或後綴
$	                       欄位引用
in	                       數組成員
條件語句
if (expression) {
    statement;
    statement;
    ... ...
}

if (expression) {
    statement;
} else {
    statement2;
}

if (expression) {
    statement1;
} else if (expression1) {
    statement2;
} else {
    statement3;
}

循環語句
C語言:while、do/while、for、break、continue
Examples:
一.命令行方式調用awk
awk [-F  field-separator]  'commands'  input-file(s)
1 搜索/etc/passwd有root關鍵字的所有行
awk -F: '/root/' /etc/passwd
2 搜索/etc/passwd有root關鍵字的所有行,並顯示對應的shell
awk -F: '/root/{print $7}' /etc/passwd
3 列印/etc/passwd 中以:為分隔符分割的每行第一項
awk -F: '{ print $1 }' /etc/passwd
4 使用","分割,-F相當於內置變數FS, 指定分隔符
awk -F, '{print $1,$2}' filename
awk 'BEGIN{FS=","} {print $1,$2}' filename
5 使用多個分隔符:先使用空格分割,然後對分割結果再使用","分割
awk -F '[ ,]' '{print $1,$2,$5}' filename
6 統計 file 行數
awk '{ sum += $1 }; END { print sum }' file
7 統計用戶個數
awk '{count++;print $0;} END{print "user count is ",count}' /etc/passwd  
8 行匹配語句 awk '' 只能用單引號
awk '{[pattern] action}' {filenames}
9 每行輸出文本中的1、4項,按空格或TAB分割
awk '{print $1,$4}' filename
10 格式化每行輸出文本中的1、4項,按空格或TAB分割
awk '{printf "%-8s %-10s\n",$1,$4}' filename   
11 設置變數a=1,b=s,每行輸出文本中的1項、1項+a(數字求和,非數字直接是a)、1項添加後綴b,按空格或TAB分割
awk -va=1 -vb=s '{print $1,$1+a,$1b}' filename 
12 查看filename文件內第20到第30行的所有內容
awk '{if(NR>=20 && NR<=30) print $0}' filename 
13 統計當前目錄下文件總大小,以M為單位輸出
ll |awk 'BEGIN{size=0;} {size=size+$5;} END{print "[end]size is ",size/1024/1024,"M"}'  
14 顯示/etc/passwd的賬戶,for循環遍曆數組
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
15 按降序排序,篩選第二行小於70,統計總數(行數)
sort -rnk2 1.txt|awk '$2<70'|wc-l
二.shell腳本方式
#!/bin/awk -f
BEGIN{ 這裡面放的是執行前的語句 }
{這裡面放的是處理每一行時要執行的語句}
END {這裡面放的是處理完所有的行後要執行的語句 }
三.將所有的awk命令插入一個單獨文件,然後調用
awk -f awk-script-file input-file(s)
sed

返回抽取文本操作

返回正則表達式

行文本編輯器:sed

  • sed是一種流編輯器,它一次處理一行內容。
    處理時,把當前處理的行存儲在臨時緩衝區「模式空間」(pattern space)中,
    接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。
    然後讀入下行,執行下一個循環。這樣不斷重複,直到文件末尾。

  • 文件內容並沒有改變,除非你使用重定向存儲輸出。

  • 模式空間:處理文件中一行內容的一個臨時緩衝區。
    處理完一行之後就會把模式空間中的內容列印到標準輸出,然後自動清空快取。

  • 保持空間:另外一個不會自動清空的緩衝區,不會主動把此緩衝區中的內容列印到標準輸出,需要sed命令處理。保持空間默認有一個換行符存在 。

sed [options] 'script' inputfile...
sed [options] -f scriptfile file(s)
    -e<script>,--expression=<script>    以指定的 script 來處理輸入的文件,用於順序執行多條命令
    -f<script 文件>,--file=<script 文件> 以指定的 script 文件來處理輸入的文件
    -n,--quiet,——silent                  取消自動列印模式空間
    -i[SUFFIX], --in-place[=SUFFIX]      直接編輯文件(如果提供後綴,則進行備份)
    -r                                   使用擴展正則表達式
sed命令
a[\]text  在指定行後面追加文本,支援使用\n實現多行追加
i[\]text  在指定行前面插入文本,支援使用\n實現多行追加
c[\]text  替換指定行為單行或多行文本
d         刪除模式空間的所有內容,立即讀入下一行
D         刪除模式空間的文本到第一個換行符,
          若模式空間中內容不為空,立即重新在模式空間剩餘內容上執行sed命令
s         替換指定字元
h         把模式空間中的內容覆蓋至保持空間中
H         把模式空間中的內容追加至保持空間中
g         把保持空間中的內容覆蓋至模式空間中
G         把保持空間中的內容追加至模式空間中
l         列印模式空間的內容,將製表符和行尾顯示成\t和$
n         自動列印模式空間,讀取下一個輸入行覆蓋至模式空間並且行號加一
N         不列印模式空間,讀取下一個輸入行追加至模式空間並且行號加一
p         列印模式空間的內容
P         列印模式空間的文本到第一個換行符
q         讀取到匹配的行之後即退出,不會再讀入新的行,並且將當前模式空間的內容輸出到螢幕
b lable   分支到標籤; 如果省略 label,則分支到腳本的結尾
r file    讀取指定文件 file 的文本至模式空間中匹配到的行後,並且輸出到螢幕
t label   如果s///成功替換,分支到標籤; 如果省略 label,則分支到腳本的結尾
T label   如果s///沒有成功替換,分支到標籤; 如果省略 label,則分支到腳本的結尾
w file    將匹配地址的所有行輸出到指定的文件 file末尾
W file    寫並追加模板塊的第一行到 file 末尾
:label    創建標記 label
!         為模式空間中的行取反
=         在行位置的上一行列印行號
#         注釋到下一個換行符前
sed查找替換,支援使用其它分隔符:
s///,s@@@,s###

{cmd1; cmd2; ...}   命令的分組(group) 一般適用於針對同一地址執行多個命令

sed替換標記
g   表示行內全面替換。  
Ng  表示從第N處匹配開始全面替換
p   表示列印匹配的行。  
w   表示把匹配的行寫入一個文件。  
x   把模式空間中的內容與保持空間中的內容進行互換
y   表示把一個字元轉換為另一個的字元(但是不用於正則表達式)
\1  前面\(\)第一格匹配的字元串
&   前面匹配的全部字元串
i,I 匹配 regexp 時,忽略大小寫
sed元字符集
^         匹配行開始,如:/^sed/匹配所有以sed開頭的行。
$         匹配行結束,如:/sed$/匹配所有以sed結尾的行。
.         匹配一個非換行符的任意字元,如:/s.d/匹配s後接一個任意字元,最後是d。
*         匹配0個或多個字元,如:/*sed/匹配所有模板是一個或多個空格後緊跟sed的行。
[]        匹配一個指定範圍內的字元,如/[ss]ed/匹配sed和Sed。  
[^]       匹配一個不在指定範圍內的字元,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一個字母開頭,緊跟ed的行。
\(..\)    匹配子串,保存匹配的字元,如s/\(love\)able/\1rs,loveable被替換成lovers。
&         保存搜索字元用來替換其他字元,如s/love/**&**/,love這成**love**。
\<        匹配單詞的開始,如:/\<love/匹配包含以love開頭的單詞的行。
\>        匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\{m\}    重複字元x,m次,如:/0\{5\}/匹配包含5個0的行。
x\{m,\}   重複字元x,至少m次,如:/0\{5,\}/匹配至少有5個0的行。
x\{m,n\}  重複字元x,至少m次,不多於n次,如:/0\{5,10\}/匹配5~10個0的行。

sed地址定界:默認對全文進行處理
#              指定行
$              最後一行
/pattern/      被 pattern 匹配到的每一行
#,#            區間
#,+#           區間 +#=#+1
/pat1/,/pat2/
#,/pat1/
first~step     步進(stepping) 先定位 first 所在行,然後每經過step行再定位一次
1~2            奇數行
2~2            偶數行
first,~N       從 first 所在的行至往後第一個可以被N整除的行

GNU擴展的sed,支援特殊序列(special sequence),它由一個反斜線和一個字母組成:
\L:將replacement替換成小寫直到遇到\U或者\E。
\l:將下一個字元替換成小寫。
\U:將replacement替換成大寫直到遇到\L或者\E。
\u:將下一個字元替換成大寫。
\E:停止\U或者\L帶來的大小寫轉換功能。

sed&awk

Examples:
sed '2p' /etc/passwd                    列印文件內容,並重複列印文件第2行
sed -n '2p' /etc/passwd                 只列印文件第2行
sed -n '1,4p' /etc/passwd               只列印文件第1到4行
sed -n '/root/p' /etc/passwd            只列印文件匹配 root 的行
sed -n '2,/root/p' /etc/passwd          只列印文件從第2行開始到匹配 root 的行
sed -n '/^$/=' file                     顯示空行行號(只列印文件匹配 ^$ 的行及其行號)
sed -n -e '/^$/p' -e '/^$/=' file       只列印文件空行和空行及其行號
sed '/root/a superman' /etc/passwd      匹配 root 的行後追加一行 superman
sed '/root/i superman' /etc/passwd      匹配 root 的行前追加一行 superman
sed '/root/c superman' /etc/passwd      用 superman 代替匹配 root 的行
nl /etc/passwd | sed '2a tea'           文件第2行後追加一行 tea
sed -n 's/root/&superman/p' /etc/passwd 只列印匹配 root 單詞後追加 superman 單詞的行
sed -n 's/root/superman&/p' /etc/passwd 只列印匹配 root 單詞前追加 superman 單詞的行
sed -i.bak 's/dog/cat/g' file           備份.bak 後,在原文件中替換並保存
sed -i.bak 's/dog/cat/g' file           備份.bak 後,在原文件中替換並保存

已匹配字元串標記&
sed 's/\w\+/[&]/g' file      #  \w\+ 匹配每一個單詞
替換操作:s命令
sed 's/book/books/' file
sed -n 's/test/TEST/p' file  # -n 抑制自動列印原文本,p 列印處理後的行。只列印發生替換的行
刪除操作:d命令
sed '/^$/d' file     刪除空白行
sed '/^test/d' file  刪除文件中所有開頭是test的行
sed '2d' file        刪除文件的第2行
sed '$d' file        刪除文件最後一行
sed '2,$d' file      刪除文件的第2行到末尾所有行
地址定界:,(逗號)
sed -n '/test/,/check/p' file     所有在模板test和check所確定的範圍內的行都被列印
sed -n '5,/^test/p' file          列印從第5行開始到第一個包含以test開始的行之間的所有行:
sed '/test/,/west/s/$/aaa/' file  模板test和west之間的行,每行的末尾用字元串aaa替換
模式空間:
sed '1!G;h;$!d' FILE ; sed -n '1!G;h;$p' FILE   倒序輸出(模擬tac)
sed 'N;D' FILE ; sed '$!d' FILE         輸出文件最後一行
sed '$!N;$!D' FILE                      輸出文件最後2行
sed 'G' FILE                            給每行結尾添加一行空行
sed 'g' FILE                            將文件全部行替換成空行
sed 'N;s/\n//g' FILE                    將文件的n和n+1行合併為一行,n為奇數行
sed ':a;N;$!ba;s/\n//g'                 將文件所有行合為一行
sed '/^$/d;G' FILE                      刪除空白行後,給每行結尾添加一行空行
sed 'n;d' FILE                          刪除偶數行
sed -n 'p;n' test.txt  #奇數行
sed -n 'n;p' test.txt  #偶數行
sed '/test/{ n; s/aa/bb/; }' file 匹配test,移動到下一行,替換aa為bb,並列印該行

列印匹配字元串的下一行
grep -A 1 SCC URFILE
sed -n '/SCC/{n;p}' URFILE
awk '/SCC/{getline; print}' URFILE
sed ':a;N;$!ba;s/\n//g' ; sed ':a;$!N;s/\n//g;ta'  將文件所有行合為一行
:a         # 建立分支標記
N          # 讀取下一行追加至模式空間
$!ba       # 分支到腳本中帶有標記的地方
s/\n//g    # 替換\n為空
nano

返迴文件操作

全螢幕文本編輯器:nano
file:///D:/Download/Java/Linux/Linux-nano.txt

vi
vim

返迴文件操作

全螢幕文本編輯器:vim/vi
file:///D:/Download/Java/Linux/Linux-vim-vi.txt

mkdir

返迴文件操作

mkdir 創建目錄
      -p: 存在不報錯,創建多級文件夾
      -v: 顯示詳細資訊
      -m MODE: 創建目錄時直接指定許可權
tree

返迴文件操作

yum -y install tree
tree                顯示目錄結構樹,列出指定目錄下的所有文件,包括子目錄里的文件
	 [-aACdDfFgilnNpqstux][-I <範本樣式>][-P <範本樣式>][目錄...]
	 -a             顯示所有文件和目錄(不加-a,則隱藏目錄不顯示)
     -d             顯示目錄名稱而非內容
	 -L n           顯示 n 層目錄 (n 為數字)
     -f             在每個文件或目錄之前,顯示完整的相對路徑名稱
     -F             在執行文件,目錄,Socket,符號連接,管道名稱名稱,
                    各自加上"*","/","=","@","|"號。
     -r             以相反次序排列
     -t             用文件和目錄的更改時間排序
     -dirsfirst     目錄顯示在前,文件顯示在後
  附加參數:
     -A            使用ASNI繪圖字元顯示樹狀圖而非以ASCII字元組合。
     -C            在文件和目錄清單加上色彩,便於區分各種類型。
     -D            列出文件或目錄的更改時間。
     -g            列出文件或目錄的所屬群組名稱,沒有對應的名稱時,則顯示群組識別碼。
     -i            不以階梯狀列出文件或目錄名稱。
     -I            不顯示符合範本樣式的文件或目錄名稱。
     -l            如遇到性質為符號連接的目錄,直接列出該連接所指向的原始目錄。
     -n            不在文件和目錄清單加上色彩。
     -N            直接列出文件和目錄名稱,包括控制字元。
     -p            列出許可權標示。
     -P            只顯示通配符匹配的文件或目錄名稱
     -q            用"?"號取代控制字元,列出文件和目錄名稱。
     -s            列出文件或目錄大小。
touch

返迴文件操作

創建空文件和刷新時間

touch [OPTION]... FILE...
      -a 僅改變 atime 和 ctime
      -m 僅改變 mtime 和 ctime
      -t [[CC]YY]MMDDhhmm[.ss]
         指定atime和mtime的時間戳
      -c 如果文件不存在,則不予創建
cp

返迴文件操作

複製文件或目錄:cp

cp [OPTION]... [-T] SOURCE DEST          
cp [OPTION]... SOURCE... DIRECTORY     DEST 必須存在,且為目錄
cp [OPTION]... -t DIRECTORY SOURCE...  將所有SOURCE複製到DIRECTORY
   -a                        歸檔,相當於-r、-d、-p的集合,SRC 中的文件-->DEST 中
   -r,-R                     遞歸複製目錄數據,目錄不存在創建
   -d                        如果源文件為軟鏈接(對硬鏈接無效),則複製後的目標文件也為軟連接
   -p                        複製後目標文件保留源文件的屬性(包括所有者、所屬組、許可權和時間)
   -v,--verbose 冗長的        顯示過程資訊        
   -f,--force   力           如果目標文件已存在,強制覆蓋
   -i                        如果目標文件已存在,則會詢問是否覆蓋(默認)
   -l                        把目標文件建立為源文件的硬鏈接,而不是複製源文件
   -s                        把目標文件建立為源文件的軟鏈接,而不是複製源文件
   -u,--update               僅當源文件比目標文件新或目標文件丟失時才複製
   -n                        不覆蓋
   -b                        目標存在,覆蓋前先備份,形式為 filename~
   --backup=numbered         目標存在,覆蓋前先備份,形式為 filename.~NUM~
      {,.bak}                備份

SRC是文件:使用選項:-i

  • DEST不存在:則創建指定DEST文件,複製SRC文件中所有內容至其中
  • DEST存在是文件:詢問覆蓋
  • DEST存在是目錄:在DEST下新建填充與SRC同名的文件

SRC是目錄:使用選項:-r

  • DEST不存在:則創建指定DEST目錄,複製SRC目錄中所有文件至其中
  • DEST存在是文件:報錯
  • DEST存在是目錄:則在DEST下新建與SRC同名目錄,複製SRC目錄中所有文件至其中
mv

返迴文件操作

移動和重命名文件:mv

mv [OPTION]... [-T] SOURCE DEST       移動 + 重命名(剪切)
mv [OPTION]... SOURCE... DIRECTORY    將 SOURCE...等文件剪切到 DIRECTORY 下
mv [OPTION]... -t DIRECTORY SOURCE...
   -i 互動式                 
   -f 強制
   -b 目標存在,覆蓋前先備份
rm

返迴文件操作

rm [OPTION]... FILE...
   -i 互動式
   -f 強制
   -r 遞歸
      --no-preserve-root (preserve 保護)
rmdir

返迴文件操作

rmdir [選項]... 目錄...  刪除指定的空目錄。不要使用-p絕對路徑,會刪/
      --ignore-fail-on-non-empty  忽略僅由目錄非空產生的所有錯誤
      -p, --parents   刪除目錄及其祖先;例如:「rmdir-p a/b/c」類似於「rmdir a/b/c a/b a」
      -v, --verbose   為處理的每個目錄輸出診斷
pwd

返迴文件操作

顯示當前工作目錄:pwd
每個shell和系統進程都有一個當前的工作目錄
CWD: current work directory

pwd: printing working directory 顯示當前shell CWD的絕對路徑
     -P 顯示真實物理路徑
     -L 顯示鏈接路徑(默認)

/dirname/basename

基名:basename
目錄名:dirname

cd

返迴文件操作

更改目錄:cd

cd ..     切換至父目錄
cd ../../ 切換至上多級
cd        切換至當前用戶主目錄
cd ~      切換至當前用戶主目錄
cd -      切換至以前的工作目錄
   -L     (default)如果路徑中包含符號連接,則跟著符號鏈接走。PWD為符號鏈接
   -P     使用的是物理地址,不會則跟著符號鏈接走。PWD為實際物理地址
cd 相對路徑進入目錄時,會在 當前目錄 和 環境變數CDPATH配置的目錄 中尋找第一個匹配的目錄
環境變數:
CDPATH
自動更新的環境變數:
PWD:當前目錄路徑
OLDPWD:上一次目錄路徑

shell中的行為選項:cdable_vars 啟用目錄別名,(default: off)

ls

返迴文件操作

列出目錄內容:ls

ls [options] [files or dirs]
   -a, --all			        不隱藏任何以. 開始的項目
   -A, --almost-all		        列出除. 及.. 以外的任何項目
       --author			        與-l 同時使用時列出每個文件的作者
   -b, --escape			        以八進位溢出序列表示不可列印的字元
   -B, --ignore-backups         不要列出結尾的隱含項 ~
   -c                           顯示 ctime
   -C                           按列列出條目
       --color[=WHEN]           給輸出著色;可以是「never」,「auto」,or 「always」(default)
   -d, --directory              列出目錄本身,而不是目錄的內容
   -G, --no-group		        以一個長列表的形式,不輸出組名
   -h, --human-readable	        人性化,以人類可讀方式顯示
   -i, --inode                  列印每個文件的索引號
   -I, --ignore=PATTERN         不要列出與shell PATTERN 匹配的隱含項
   -l				            使用較長格式列出資訊(ll)(default mtime)           
   -L, --dereference	 	    當顯示符號鏈接的文件資訊時
                                顯示符號鏈接所指示的對象而並非符號鏈接本身的資訊              
   -m				            所有項目以逗號分隔,並填滿整行行寬
   -n, --numeric-uid-gid	    類似 -l,但列出UID 及GID 號
   -N, --literal			    輸出未經處理的項目名稱 (如不特別處理控制字元)
   -o				            類似 -l,但不列出有關組的資訊
   -p, --indicator-style=slash	對目錄加上表示符號"/"
   -r, --reverse			    逆序排列
   -R, --recursive		        遞歸顯示子目錄
   -s, --size			        以塊數形式顯示每個文件分配的尺寸
   -S                           按文件大小排序
   -t                           按最新者優先排序(default mtime)
   -u                           顯示 atime 
   -U                           不排序;按目錄順序列出條目
   -x                           按行而不是按列列出條目
   -X                           按擴展名的字母順序排序
   -1                           每行列出一個文件

Exit status:
 0  if OK,
 1  if 出現小問題(例如無法訪問子目錄)
 2  if 出現嚴重故障(例如,無法訪問命令行參數)
stat

返迴文件操作

stat [OPTION]... FILE...      查看文件大小,訪問,修改,創建時間等,顯示inode資訊

文件:metadata, data

三個時間戳:

  • access time 訪問時間,atime,指最後一次讀取的時間(訪問)
  • modify time 修改時間, mtime,指最後一次修改數據的時間(修改),修改文件內容
  • change time 改變時間, ctime,指最後一次修改元數據的時間(改變),修改文件inode內容:許可權 屬主 屬組 文件名 等
stat [OPTION]... FILE...    Display file or file system status.
  -L, --dereference         關注鏈接
  -f, --file-system         顯示文件系統狀態,而不是文件狀態
  -c  --format=FORMAT       使用指定格式而不是默認格式;每次使用格式後輸出一個換行符
      --printf=FORMAT       像 --format,但解釋反斜杠轉義符,並且不輸出強制尾隨換行符;
                            如果要換行,請在格式中包含\n
  -t, --terse               用簡潔的形式列印資訊

文件的有效格式序列(without --file-system):
  %a   八進位訪問許可權
  %A   人類可讀(字元)形式的訪問權
  %b   分配的塊數 (see %B)
  %B   %b報告的每個塊的大小(以位元組為單位)
  %C   SELinux安全上下文字元串
  %d   十進位設備號
  %D   設備編號(十六進位)
  %f   十六進位原始模式
  %F   file type
  %g   group ID of owner(owner 主人)
  %G   group name of owner
  %h   硬鏈接數
  %i   inode number
  %m   mount point
  %n   file name
  %N   帶引號的文件名,如果是符號鏈接,則取消引用
  %o   最佳I/O傳輸大小提示
  %s   總大小(位元組)
  %t   十六進位表示的主要設備類型,用於字元/塊設備特殊文件
  %T   十六進位表示的次要設備類型,用於字元/塊設備特殊文件
  %u   user ID of owner
  %U   user name of owner
  %w   文件生成時間,人類可讀; - if unknown
  %W   文件生成的時間,從Epoch開始的秒數; 0 if unknown
  %x   上次訪問時間,人類可讀
  %X   上次訪問的時間,從Epoch開始的秒數
  %y   上次修改的時間,人類可讀
  %Y   上次修改的時間,從Epoch開始的秒數
  %z   上次改變的時間,人類可讀
  %Z   上次改變的時間,從Epoch開始的秒數

文件系統的有效格式序列:
  %a   非超級用戶可用的免費塊
  %b   文件系統中的總數據塊
  %c   文件系統中的文件節點總數
  %d   文件系統中的自由文件節點
  %f   文件系統中的空閑塊
  %i   文件系統ID(十六進位)
  %l   文件名的最大長度
  %n   file name
  %s   塊大小(用於更快的傳輸)
  %S   基本塊大小(用於塊計數)
  %t   文件系統類型(十六進位)
  %T   人類可讀格式的文件系統類型
 #示例:
 stat -c %a oldboy.txt  
 stat -c %i oldboy.txt  #查詢文件的inode號碼
 stat -c %s oldboy.txt  #查詢文件總大小 
history

返回命令格式

命令行歷史保存在~/.bash_history中,用戶退出後更新

history [-c] [-d offset] [n]            顯示歷史列表
history -anrw [filename]
history -ps arg [arg...]
        -c          清除快取中的歷史列表
        -d offset   刪除歷史中指定的第offset個命令
        -n          顯示最後n行歷史
        -a          追加本次會話新執行的命令歷史列表至歷史文件
        -r          讀歷史文件附加到歷史列表
        -w          覆蓋保存歷史列表到指定的歷史文件
        -n          讀取歷史文件中未讀過的行到歷史列表
        -p [arg...] 將[arg...]拆分成多行標準輸出,不保存在歷史列表中,不執行
        -s [arg...] 在歷史列表最後偽造一行歷史命令arg,不執行
使用up(向上)和down(向下)鍵來上下瀏覽從前輸入的命令
上方向鍵 ; Ctrl+p             重複前一個命令,不執行
下方向鍵 ; Ctrl+n             重複後一個命令,不執行
!! ; !-1                     重複前一個命令,執行
Esc, .(點擊Esc鍵後鬆開,然後點擊 . 鍵)調用前一個命令中最後一個參數
Alt+.(按住Alt鍵的同時點擊 . 鍵)(在Windows軟體中會有快捷鍵衝突)
!:0                           執行前一條命令(去除參數)
!n                            執行history命令輸出對應序號n的命令
!-n                           執行history歷史中倒數第n個命令
!string                       執行前一個以「string」開頭的命令
!?string                      執行前一個包含string的命令
!string:p                     列印前一個以「string」開頭的命令,不執行
!^:p                          列印輸出 !$ (上一條命令的第一個參數)的內容
!$:p                          列印輸出 !$ (上一條命令的最後一個參數)的內容
!*:p                          列印輸出 !*(上一條命令的所有參數)的內容

^string                       刪除上一條命令中的第一個string
^string1^string2              將上一條命令中的第一個string1替換為string2
!:gs/string1/string2          將上一條命令中所有的string1都替換為string2

調用歷史參數:

command !^ 利用上一個命令的第一個參數做cmd的參數
command !$ 利用上一個命令的最後一個參數做cmd的參數
command !* 利用上一個命令的全部參數做cmd的參數
command !:n 利用上一個命令的第n個參數做cmd的參數
command !n:^ 調用第n條命令的第一個參數
command !n:$ 調用第n條命令的最後一個參數
command !n:* 調用第n條命令的所有參數
command !n:m 調用第n條命令的第m個參數

command !string:^ 從命令歷史中搜索以 string 開頭的命令,並獲取它的第一個參數
command !string:$ 從命令歷史中搜索以 string 開頭的命令,並獲取它的最後一個參數
command !string:* 從命令歷史中搜索以 string 開頭的命令,並獲取它的所有參數
command !string:n 從命令歷史中搜索以 string 開頭的命令,並獲取它的第n個參數

命令歷史相關環境變數:

HISTSIZE:命令歷史記錄的條數
HISTFILE:指定歷史文件,默認為~/.bash_history
HISTFILESIZE:命令歷史文件記錄歷史的條數
HISTTIMEFORMAT=「%F %T 「 顯示時間
HISTIGNORE=「str1:str2*:… 「 忽略str1命令,str2開頭的歷史
HISTCONTROL=            記錄方式
            ignoredups  默認,忽略重複的命令,連續且相同為「重複」
            ignorespace 忽略所有以空白開頭的命令
            ignoreboth  相當於 ignoredups,ignorespace 的組合
            erasedups   刪除重複命令
man

返回獲取幫助

man (1-9) COMMAND ; COMMAND -h, --help  查看command幫助
     1     用戶命令
     2     系統調用
     3     C庫調用
     4     設備文件及特殊文件
     5     配置文件格式
     6     遊戲
     7     雜項
     8     管理類的命令
     9     Linux 內核API	
	      -f, --whatis  顯示手冊頁中的簡短說明,需要製作資料庫: makewhatis | mandb (CentOS7)
	      			   -d, --debug                發出調試消息
                       -v, --verbose              列印詳細的警告消息
                       -r, --regex                將每個關鍵字解釋為正則表達式
                       -w, --wildcard             關鍵字包含通配符
                       -l, --long                 不要將輸出調整為端子寬度
                       -C, --config-file=FILE     use this user configuration file
                       -L, --locale=LOCALE        定義搜索的區域為LOCALE
                       -m, --systems=SYSTEM       使用其他系統的手冊頁
                       -M, --manpath=PATH         設置手冊頁搜索路徑為PATH
                       -s, --sections=LIST, --section=LIST   僅搜索這些部分(冒號分隔)
	      -k, --apropos 顯示手冊頁中包含 man 字元的簡短說明
		  -a, --all     查找所有匹配的手冊頁
		  -w, --where, --path, --location
		                print physical location of man page(s)
		                (physical location 物理位置)
man配置文件:/etc/man.config(centos6) | /etc/man_db.conf (CentOS7)

man環境變數:指明man文件搜索位置
MANPATH /PATH/TO/SOMEWHERE | MANDATORY_MANPATH /PATH/TO/SOMEWHERE (CentOS7) 

man -M /PATH/TO/SOMEWHERE COMMAND  # 到指定位置下搜索COMMAND命令的手冊頁並顯示
man手冊中的段落說明:
NAME             名稱及簡要說明
SYNOPSIS         用法格式說明
• []             可選內容
• <>             必選內容
• a|b            二選一
• { }            分組
• ...            同一內容可出現多次
DESCRIPTION      詳細說明
OPTIONS          選項說明
EXAMPLES         示例
FILES            相關文件
AUTHOR           作者
COPYRIGHT        版本資訊
REPORTING BUGS   bug資訊
SEE ALSO         其它幫助參考
man快捷鍵:
          space ; ^v ; ^f ; ^F            向文件尾翻屏
          b ; ^b                          向文件首部翻屏
          d ; ^d                          向文件尾部翻半屏
          u ; ^u                          向文件首部翻半屏
          RETURN ; ^N ; e ; ^E ; j ; ^J   向文件尾部翻一行
          y ; ^Y ; ^P ; k ; ^K:          向文件首部翻一行
          q                               退出
          NUM                             跳轉至第NUM行
          1G                              回到文件首部
          G                               翻至文件尾部
          /KEYWORD 相反 ?KEYWORD          向文件尾部搜索 相反 向文件頭部搜索
		  n                               下一個 相反 上一個
		  N                               上一個 相反 下一個
info

返回獲取幫助

info COMMAND                      適合通用文檔參考
	 -k, --apropos=STRING         在所有手冊的索引中查找字元串
     -f, --file=FILENAME          指定要訪問的資訊文件
     -n, --node=NODENAME          指定第一次訪問資訊文件時顯示的節點node
     -o, --output=FILENAME        output selected nodes to FILENAME.
     -w, --where, --location      print physical location of Info file.
info快捷鍵:
           TAB    移動到下一個node,有node的地方,通常會以*顯示hash快取
           Enter  當游標在node上,按下Enter進入node
		   Home   移動到本node首部
		   End    移動到本node尾部
           b      移動游標到該info畫面中第一個node處
		   d      回到主題目錄
           e      移動游標到該info畫面中最後一個node處
           n      進入下一個node處
           p      進入上一個node處
           u      進入向上一層
		   l      進入最後一個node
           s ; /  搜索
date

返回時間

顯示和設置系統時間:date 
date +%s            seconds since 1970-01-01 00:00:00 UTC(since 自...以後)
date +"%F %T"       顯示時間格式:2020-07-19 17:27:26
date +%a            顯示星期幾
date -d @1509536033 display time described by STRING, not 'now'
     -s "2019-08-07 06:05:10"
     --set="2019-08-07 06:05:10"
     -u  顯示目前的格林威治時間
x用數字代替,正數減,負數加
date -d "x days ago" +%Y%m%d
date -d "x weeks ago" +%Y%m%d
date -d "x years ago" +%Y%m%d

date -s 『20180521』   修改系統時間
date -R              以RFC 2822格式輸出日期和時間

Examples:
[root@oldboyedu-lnb ~]$ date -d 'today' +'%Y-%m-%d_%H:%M:%S'
2020-08-13_19:54:57
[root@oldboyedu-lnb ~]$ date -d "3 days ago" +%Y-%m-%d
2020-08-10
[root@oldboyedu-lnb ~]$ date -d "-3 days ago" +%Y-%m-%d
2020-08-16
控制符	描述
%H	  小時(for example, 17).
%M	  分鐘 (for example, 30).
%S	  秒(for example, 24).
%d	  月份中的某一天(for example, 16).
%m	  月份中的某一個月(for example, 09).
%Y	  年份 (for example, 2016).
%F	  完整的日期格式 (for example, 2016-09-16). 這個選項相當於: %Y-%m-%d.
%T	  完整的時間格式 (for example, 17:30:24). 這個選項相當於%H:%M:%S
clock
hwclock

返回時間

clock=hwclock [function] [option...]    顯示硬體時鐘
              -r, --show           讀取硬體時鐘並列印結果
                  --set            將 RTC 設置為給定的時間 --date
              -s, --hctosys        以硬體時鐘為準,校正系統時鐘
              -w, --systohc        以系統時鐘為準,校正硬體時鐘
                  --systz          根據當前時區設置系統時間
                  --adjust         自動調整硬體時鐘時間
              -c, --compare        定期比較系統時鐘和 CMOS 時鐘
                  --getepoch       列印出內核的硬體時鐘epoch值
Examples:
hwclock --set --date="06/18/14 14:55"
clock --set --date="06/18/14 14:55"
tzselect       Cent OS 7.x 互動式設置時區
配置環境變數:
TZ='Asia/Shanghai'; export TZ
時區文件:/etc/localtime
修改配置文件來修改時區:
1、vi /etc/sysconfig/clock
   ZONE=『Asia/Shanghai』
2、rm /etc/localtime
3、鏈接到上海時區文件: 
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
timedatectl

返回時間

Cent OS 7.x 查詢和更改系統時鐘和設置:

設置或更改當前的日期,時間和時區,或實現與遠程NTP伺服器的自動系統時鐘同步。

timedatectl 
OR
timedatectl | grep Time                    查看當前時區
timedatectl | grep local                   硬體時鐘是否設置為本地時區
timedatectl set-local-rtc 1                硬體時鐘設置為本地時區
timedatectl set-local-rtc 0                硬體時鐘設置為協調世界時(UTC)
timedatectl status                         顯示系統的當前時間和日期,RTC time 是硬體時鐘的時間
timedatectl list-timezones                 查看所有可用的時區
timedatectl set-timezone "Asia/Shanghai"   設置本地時區
timedatectl set-timezone UTC               推薦使用和設置協調世界時,即UTC
timedatectl set-time 15:58:30              設置時間
timedatectl set-time 20151120              設置日期
timedatectl set-time '16:10:40 2015-11-20' 設置日期和時間
timedatectl set-ntp true                   自動時間同步到遠程NTP伺服器
timedatectl set-ntp false                  禁用NTP時間同步
cal

返回時間

cal [options] [[[day] month] year] 日曆
    -1, --one        show only current month (default)(current 現在的)
    -3, --three      show previous, current and next month(previous 以前的)
    -s, --sunday     Sunday as first day of week (default)
    -m, --monday     Monday as first day of week
    -j, --julian     output Julian dates(Julian 朱利安 按年計數)
    -y, --year       show whole current year
ntpdate

返回時間

ntp伺服器時間同步

yum -y install ntpdate
ntpdate ntp1.aliyun.com
getfacl

返回訪問控制列表

顯示文件或目錄的ACL規則:getfacl

getfacl file |directory 可看到特殊許可權:flags
		-a	顯示文件的ACL
		-d	顯示默認的ACL
		-c	不顯示注釋標題
		-e	顯示所有的有效許可權
		-E	顯示沒有的有效許可權
		-s	跳過文件,只具有基本條目
		-R	遞歸
		-t	使用表格輸出格式
		-n	顯示用戶的UID和組群的GID
setfacl

返回訪問控制列表

設置文件ACL規則:setfacl

setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
		-m,--modify-acl        更改文件的ACL
		-M,--modify-file=file  從文件讀取ACL條目更改
		-x,--remove=acl        根據文件中ACL移除條目
		-X,--remove-file=file  從文件讀取ACL條目並刪除
		-b,--remove-all        刪除所有擴展ACL條目
		-k,--remove-default    移除默認ACL
		   --set=acl           更改現在的ACL,注意一定要包含ugo的設置
		   --set-file=file     read ACL entries to set from file (entries條目)
		-d,--default           應用到默認ACL的操作
		-P,--physical          依照自然邏輯,不跟隨符號鏈接
		   --restore=file      restore ACLs (反向操作 `getfacl -R`)(restore 恢復)
		-R,--recursive         遞歸操作子目錄
tune2fs

返回訪問控制列表

返回磁碟管理

「ext2/ext3/ext4」文件系統管理:tune2fs

tune2fs 
		-c	調整最大載入次數
		-C	設置文件系統已經被載入的次數
		-e	設置內核程式碼檢測到錯誤時的行為
		-f	強制執行修改,即使發生錯誤
		-i	設置相鄰兩次文件系統檢查的相隔時間
		-j	為「ext2」文件系統添加日誌功能,將其轉換為「ext3」文件系統
		-l	顯示文件超級塊內容
		-L	設置文件系統卷標
		-m	顯示文件保留塊的百分比
		-M	設置文件系統最後被載入到的目錄
		-o	設置或清除文件系統載入的特性或選項
		-O	設置或清除文件系統的特性或選項
		-r	設置文件系統保留塊的大小
		-T	設置文件系統上次被檢查的時間
		-u	設置可以使用文件系統保留塊的用戶
		-U	設置文件系統的UUID
Examples:
tune2fs -c 30 /dev/hda1      設置強制檢查前文件系統可以掛載的次數
tune2fs -c 0 /dev/hda1       關閉強制檢查掛載次數限制。
tune2fs -i 10 /dev/hda1      10天後檢查
tune2fs -i 1d /dev/hda1      1天後檢查
tune2fs -i 3w /dev/hda1      3周後檢查
tune2fs -i 6m /dev/hda1      半年後檢查
tune2fs -i 0 /dev/hda1       禁用時間檢查
tune2fs -j /dev/hda1         添加日誌功能,將ext2轉換成ext3文件系統
tune2fs -r 40000 /dev/hda1   調整/dev/hda1分區的保留空間為40000個磁碟塊
tune2fs -o acl,user_xattr /dev/hda1       設置/dev/hda1掛載選項,啟用Posix Access Control Lists和用戶指定的擴展屬性
mount

返回磁碟管理

返回訪問控制列表

mount [options] <source> <directory>       載入文件系統到指定的載入點
      -a, --all                載入文件「/etc/fstab」中描述的所有文件系統
      -F, --fork               叉開每個設備 (use with -a)
      -T, --fstab <path>       指定文件替代 /etc/fstab
      -l, --show-labels        顯示已載入的文件系統列表
      -n, --no-mtab            don't write to /etc/mtab 載入時不將資訊存入/etc/mtab
      -o, --options <list>     以逗號分隔的裝載選項列表
      獨立於文件系統的裝載選項	
          rw                   實現掛載後掛載點目錄可讀可寫(默認)
          ro                   實現掛載後掛載點目錄只可讀
          suid                 在共享目錄中可以讓suid or sgid許可權位生效(默認)
          nosuid               在共享目錄中可以讓suid or sgid許可權位失效,提供共享目錄的安全性
          exec                 共享目錄中的執行文件可以直接執行
          noexec               共享目錄中的執行文件不可以直接執行,提供共享目錄的安全性
          auto                 自動掛載, mount -a 實現載入fstab文件自動掛載
          noauto               不能自動掛載
          user                 允許普通用戶卸載掛載點
          nouser               禁止普通用戶卸載掛載點
      -O, --test-opts <list>   限制文件系統集(use with -a)
      -r, --read-only          mount the filesystem read-only (same as -o ro)
      -t, --types <list>       指定掛載類型
      -v, --verbose            執行時顯示詳細的資訊
      -w, --rw, --read-write   mount the filesystem read-write (default)
Example:
mount | column -t  # 查看所有掛載分區狀態,column -t 輸入格式化為多個列,確定輸入包含的列數並創建表
mount -o loop /tmp/image.iso /mnt/cdrom  # 在不將ISO錄成光碟的情況下檢視其內容

虛擬塊設備(loop設備)
loop設備是一種偽設備,是使用文件來模擬塊設備的一種技術,文件模擬成塊設備後, 像一個磁碟或光碟一樣使用。
在使用之前,一個 loop 設備必須要和一個文件進行連接。這種結合方式給用戶提供了一個替代塊特殊文件的介面。
因此,如果這個文件包含有一個完整的文件系統,那麼這個文件就可以像一個磁碟設備一樣被 mount 起來。
之所以叫loop設備(迴環),其實是從文件系統這一層來考慮的,
因為這種被 mount 起來的鏡像文件它本身也包含有文件系統,通過loop設備把它mount起來,
它就像是文件系統之上再繞了一圈的文件系統,所以稱為 loop。

一般在linux中會有8個loop設備:/dev/loop0~loop7
1)losetup -a  # 查看所有的loop設備,沒有輸出說明所有的loop設備都沒有被佔用
2)dd if=/dev/zero of=/var/loop.img bs=1M count=10240  # 創建一個文件
dd if=/dev/zero 輸入文件名
of=文件名   #輸出文件名
備份磁碟開始的512個位元組大小的MBR資訊到指定文件:
#dd if=/dev/hda of=/root/image count=1 bs=512


3)losetup /dev/loop0 /var/loop.img  # 使用losetup將文件轉化為塊設備
4)lsblk |grep loop0  # 查看剛剛創建的塊設備
   losetup -a  # 查看剛剛創建的塊設備
5)可以將這個塊設備格式化並創建其他的文件系統,然後再mount到某個目錄。
6)losetup -d /dev/loop0  # 刪除塊設備

在/etc/fstab文件中設置開機自動掛載:

欄位 意義
設備文件 一般為設備的路徑+設備名稱,也可以寫唯一識別碼(UUID,Universally Unique Identifier)
掛載目錄 指定要掛載到的目錄,需在掛載前創建好
格式類型 指定文件系統的格式,比如Ext3、Ext4、XFS、SWAP、iso9660(此為光碟設備)等
許可權選項 若設置為defaults,則默認許可權為:rw, suid, dev, exec, auto, nouser, async
是否備份 若為1則開機後使用dump進行磁碟備份,為0則不備份
是否自檢 若為1則開機後自動進行磁碟自檢,為0則不自檢
umount

返回磁碟管理

返回訪問控制列表

umount [options] <source> | <directory>   卸載文件系統
       -a, --all               unmount all filesystems 卸載/etc/mtab 中記錄的所有文件系統
       -A, --all-targets       卸載當前命名空間中給定設備的所有載入點
       -d, --detach-loop       如果安裝了環路設備,則分離環路,同時釋放該環路設備
       -f, --force             強制卸載(在無法訪問NFS系統的情況下)
       -n, --no-mtab           don't write to /etc/mtab 卸載時不將資訊存入/etc/mtab
       -l, --lazy              現在分離文件系統,以後再清理
       -O, --test-opts <list>  限制文件系統集(use with -a)
       -R, --recursive         遞歸地卸載目標及其所有子對象
       -r, --read-only         若無法成功卸載,則嘗試以只讀的方式重新掛入文件系統
       -t, --types <list>      指定卸載類型型
       -v, --verbose           執行時顯示詳細的資訊
locate

返迴文件操作

工作特點:
• 查找速度快
• 模糊查找
• 非實時查找
• 搜索的是文件的全路徑,不僅僅是文件名
• 可能只搜索用戶具備讀取和執行許可權的目錄

yum -y install mlocate
locate                           只在/var/lib/mlocate/mlocate.db 資料庫中找
updatedb                         更新文件所在路徑的索引資料庫表

locate filename                  查看文件所在路徑資訊
       -u                        手工升級資料庫
       -i                        不區分大小寫的搜索
       -n N                      只列舉前N個匹配項目
       -r                        使用基本正則表達式
find

返迴文件操作

工作特點:
• 查找速度略慢
• 精確查找
• 實時查找
• 可能只搜索用戶具備讀取和執行許可權的目錄

find path -option [ -print ] [ -exec -ok command ] {} \;
find path [option] 搜索條件	(find支援通配符,一般不支援正則)
     -daystart               從本日開始計算時間
     -depth                  從指定目錄下最深層的子目錄開始查找
     -follow                 排除符號連接
     -maxdepth<目錄層級>      設置最大目錄層級
     -mindepth<目錄層級>      設置最小目錄層級
     -noleaf                 不去考慮目錄至少需擁有兩個硬連接存在
TESTS:
     +n                      大於 n (n,∞)
     -n                      小於 n [0,n)
     n                       等於 n (n-1, n]
	 -amin<分鐘>             上次訪問文件是在n分鐘前
     -anewer<參考文件或目錄>   上次訪問文件的時間比參考文件或目錄的時間晚
     -atime<24小時數>        上次訪問文件是在n*24小時前
     -cmin<分鐘>             查找在指定時間之時被修改過的文件或目錄
     -cnewer<參考文件或目錄>   查找其修改時間較指定文件或目錄的修改時間更接近現在的文件或目錄
     -ctime<24小時數>         查找在指定時間曾被修改的文件或目錄,單位以24小時計算
     -empty                  尋找為空的普通文件或目錄
     -false                  將find指令的回傳值皆設為False
     -fstype<文件系統類型>     只尋找該文件系統類型下的文件或目錄
     -gid<GID>               查找指定屬組 GID 的文件或目錄
     -group<屬組名稱>         查找指定屬組的文件或目錄
     -ilname<範本樣式>        same as -lname,但忽略字元大小寫的差別
     -iname<範本樣式>         same as -name,但忽略字元大小寫的差別
     -inum<inode編號>         查找符合指定的inode編號的文件或目錄
     -ipath<範本樣式>         same as -path,但忽略字元大小寫的差別
     -iregex<範本樣式>        same as -regexe,但忽略字元大小寫的差別
     -links<鏈接數目>         查找符合指定的硬連接數目的文件或目錄
     -iname<範本樣式>         指定範本樣式(符號鏈接名稱字元串)
     -mmin<分鐘>              查找在指定時間曾被修改過的文件或目錄,單位以分鐘計算
     -mount,-xdev            只檢查和指定目錄在同個文件系統下的文件,避免列出其它文件系統中的文件
     -mtime<24小時數>         查找在指定時間曾被更改過的文件或目錄,單位以24小時計算
     -name<範本樣式>          指定範本樣式(文件或目錄名稱字元串)
     -newer<參考文件或目錄>    查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄
     -nogroup                找出不屬於本地主機屬組的文件或目錄
     -nouser                 找出不屬於本地主機屬主的文件或目錄;
     -path<範本樣式>          指定範本樣式(目錄字元串)
     -perm<許可權數值 MODE>     查找符合指定的許可權數值的文件或目錄
                           MODE: 精確許可權匹配
						  /MODE:任意對象的許可權中只要能匹配(rwx)一個即可,或關係
						  -MODE:每類對象都必須同時擁有指定許可權,與關係(許可權數值:0 表示不關注)
     -regex<範本樣式>         指定範本樣式(使用基本正則表達式的絕對路徑字元串)
	 -samefile name          相同inode號的文件
     -size<文件大小>          查找符合指定的文件大小的文件
	 	            b:512 byte,c:bytes,w:2 bytes,k:1024 bytes,M:1024 k,G:1024M
     -true                   將find指令的回傳值皆設為True
     -type<文件類型>          只尋找符合指定的文件類型的文件
	                         f:普通文件、d: 目錄、l: 符號鏈接、b: 塊設備、
			                 c: 字元設備、p: 管道文件、s: socket
     -uid<UID>               查找指定屬主 UID 的文件或目錄
     -used<日數>             查找文件或目錄被修改之後在指定時間曾被讀取過的文件或目錄,單位:日
     -user<屬主名稱>          查找指定屬主的文件或目錄
     -xtype<文件類型>         same as -type,差別在於它針對符號連接檢查
ACTIONS:
     -delete                 刪除文件:成功,返回true;失敗,發出錯誤消息。自動使用 -depth
     -exec COMMAND {} \;     假設find指令的回傳值為True,就在被搜索的起始目錄下執行命令
	                         終結符有兩個:「;」會對每一個find到的文件去執行一次cmd命令
	                                     」+「讓find到的文件一次性執行完cmd命令。
	 -execdir COMMAND {} \;  same as -exec,但在包含匹配到文件的子目錄下執行命令
     -fls<列表文件>           same as -ls,但會把結果保存為指定的列表文件
	 -fprint<列表文件>        same as -print,但會把結果保存成指定的列表文件
     -fprint0<列表文件>       same as -print0,但會把結果保存成指定的列表文件
     -fprintf<列表文件><輸出格式>  same as  -printf,但會把結果保存成指定的列表文件
     -ls                     假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出
     -ok COMMAND {} \;       same as -exec,但在執行指令之前會先詢問用戶
	 -print    (default)     假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。
	                         格式為每列一個名稱,每個名稱前皆有「./」字元串;
     -print0                 假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。
                             格式為全部的名稱皆在同一行;
     -printf<輸出格式>        假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。
                             格式可以自行指定;
	 -prune                  僅用於排除查找範圍(目錄),不要和-depth(-delete)一起使用,\
	                         否則-prune將不起作用
	             {}          用於引用查找到的文件名稱自身
操作符 (優先順序遞減;未做任何指定時默認使用 -and):
     ( EXPR )
     非:
     ! EXPR
     -not EXPR
     與:
     EXPR1 -a EXPR2
     EXPR1 -and EXPR2
     或:
     EXPR1 -o EXPR2
     EXPR1 -or EXPR2
     列表:
     EXPR1 , EXPR2
注意:
在命令列上第一個 - ( ) , ! 之前的部份為 path,之後的是 expression。
默認查找path目錄及其子目錄,path是空字串則使用當前目錄,expression 是空字串則使用 -print。
find傳遞查找到的文件至後面指定的命令時,查找到所有符合條件的文件一次性傳遞給後面的命令

德·摩根定律:
(非 A) 或 (非 B) = 非(A 且 B)
(非 A) 且 (非 B) = 非(A 或 B) 

Examples:
[root@oldboyedu-lnb ~]# find /etc -name "*.conf"|wc -l
134
[root@oldboyedu-lnb ~]# find /etc -path '/etc/security' -prune -o -name "*.conf"|wc -l
125
[root@oldboyedu-lnb ~]# find /etc -path '/etc/abrt' -prune -o -name "*.conf"|wc -l
127
[root@oldboyedu-lnb ~]# find /etc -path "/etc/security" -prune -o -path "/etc/abrt" -prune -o -name "*.conf"|wc -l
118
[root@oldboyedu-lnb ~]# find /etc \( -path "/etc/security" -o -path "/etc/abrt" \) -prune -o -name "*.conf"|wc -l
118
Examples:
find -name "*.c"                       查找以.txt結尾的文件
find -iname "*.c"                      查找以.txt結尾的文件,忽略大小寫
find -path "*local*"                   匹配文件路徑或者文件
find -regex ".*\(\.txt\|\.pdf\)$"      正則表達式匹配文件路徑
find -iregex ".*\(\.txt\|\.pdf\)$"     正則表達式匹配文件路徑,忽略大小寫
find ! -name "*.txt"                   查找不以.txt結尾的文件
find -type f                           查找一般文件
find -maxdepth 1 -type f               查找目錄層級深度最大為1
find -mindepth 1 -type f               查找目錄層級深度最小為1
find -ctime -20                        查找最近 20 天內更新過的文件
find -type f -amin +10                 查找訪問時間為10分鐘前的所有普通文件
find -mtime 1                          查找修改時間為距離今天1天內的文件  24-48小時的文件
find -mtime 0                          查找修改時間為距離今天0天內的文件  24小時內的文件
find -mtime +7                         查找修改時間為7天前的文件         48小時以前的文件
find -mtime -7                         查找修改時間為7天內的文件         24小時內的文件
find -type f -newer file.log           找出比file.log修改時間更長的所有普通文件
find -type f -size +10 -delete         刪除大於10k文件
find -type f -size +1M                 查找文件長度大於1M的所有普通文件
find -type f -size +1M|xargs ls -lh    查找文件長度大於1M的所有普通文件,顯示詳細資訊列表
find -type f -perm 777                 查找許可權為777的所有普通文件
find -type f -user tom                 找出當前目錄用戶tom擁有的所有普通文件
find -type f -group sunk               找出當前目錄用戶組sunk擁有的所有普通文件

find -empty                              列出所有為空,並且是常規文件或目錄
find / -name *xxx*.c -print0|xargs -0    根目錄下模糊查找文件名包含xxx的.c文件

查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk
find -path "./sk" -prune -o -name "*.txt" -print 

輸出一行,在find的每一個結果之後加一個NULL字元,而不是默認加一個換行符。
find -print0

查找500M以上的文件,print0和xargs -0配合使用,用來解決文件名中有空格或特殊字元問題。
find / -size +500M -print0|xargs -0 du -m|sort -nr
看根路徑下1層目錄,哪個文件夾比較大,單位M,降序。
du -m -d 1 /|sort -nr

-exec 與其他命令結合使用
find -type f -size 0 -exec ls -l {} \;  # 查找所有文件長度為0的普通文件,並列出它們的完整路徑

-ok 與其他命令結合使用,不過它會給出提示,是否執行相應的操作。
find -type f -mtime +7 -ok rm {} \;  # 查找更改時間在7日以前的所有普通文件,並在刪除前詢問它們

在-exec之後接受多條命令
-exec ./text.sh {} \;

查找所有文件長度大於1M的普通文件,並列出它們的詳細資訊
find -type f -size +1M -exec ls -lh {} \; 
or
ll -h `find -type f -size +1M`

prune這個英文單詞的意思是:修剪,裁剪;在find 命令中的 -prune 參數引申為: 排除的意思;

[root@localhost ~]# man find | sed -n "/^\( *\)[-]prune/,/^\( *\)$/p" 
       -prune True; if the file is a directory, do not descend into it. If -depth is given, false; no effect.  Because -delete  implies  -depth,  you
              cannot usefully use -prune and -delete together.

A. -prune參數屬於find的action , 這個action返回的結果為True;
B. 如果被查找的文件是一個目錄,那麼不會遞歸到該目錄裡面做進一步查找,直白點說就是:如果-prune 匹配的是一個目錄,那麼就會跳過該目錄,不對該目錄的子目錄以及文件進行查找;
C. 如果配合了參數-depth的話,該action返回的值為false .
D. 因為-delete action總是和-depth一起使用,所以不能把-prune和-delete這兩個action一起使用;

A和C強調的是返回值 ,影響我們find命令時候多個條件的組合操作;

EXPRESSIONS
       The expression is made up of options (which affect overall operation rather than the processing of a specific file, and always  return  true),
       tests  (which  return  a true or false value), and actions (which have side effects and return a true or false value), all separated by opera‐
       tors.  -and is assumed where the operator is omitted.

大意是說: find 的表達式是由 options, tests, 和actions組成的,其中options總是返回true, 而tests,actions返回的結果或者是true, 或者是false.
這些options, testst, action 之間是需要用 operators (這裡指邏輯操作符號 -and, -or … )來連接的,而默認的operators 就是 -and,and表示前面的表達式結果為真,才會執行後面的表達式;同理,-or 表示前面的表達式為false的時候,才會執行後面的表達式;
所以我們一般使用: find . -mtime +1 -type f -iname “file.c” 這種沒有指名operator的find命令的時候,默認是:多個條件都滿足才會匹配,也就是用了-a operator ;

回過頭來看-prune參數,經常被用來排除目錄,不做查找操作,比如下面的操作,我需要排除/proc 這個記憶體文件系統, 然後查找數字作為名稱的文件:

[root@localhost ~]# find / -regextype grep -regex ".*/[0-9]\{1,6\}$" | grep proc | head    #沒有排除的情況下,我們在/proc下找到了很多以數字命名的文件;
/proc/bus/pci/00
/proc/irq/0
/proc/irq/1
/proc/irq/2
/proc/irq/3
/proc/irq/4
/proc/irq/5
/proc/irq/6
/proc/irq/7
/proc/irq/8
[root@localhost ~]# find / -path /proc -prune -o -regextype grep -regex ".*/[0-9]\{1,6\}$"  | grep proc   #利用-prune 排除之後,沒有進入/proc做進一步查找;
/proc

下面對上述find 的查找邏輯做一個簡單的分析:
-path /proc 屬於tests 條件,如果不是/proc , 那麼返回值為false, 此時就不會執行-prune action. 因為默認的operator 是and;所以此時,-path /proc -prune的結果就是-path /proc 的結果,也就是false. 而後面的條件需要繼續執行,所以需要用-o 參數來連接;如果遇到的路徑是/proc, 那麼 -path /proc 返回結果為true, 此時會執行 -prune action,也就是忽略該目錄;此時執行到”-path /proc -prune”的結果為true. 後面的條件是不需要進一步執行的,所以 -o 的operator 也是滿足條件的;

echo

返迴文件操作

echo [-neE][STRING] 將輸入的字元串標準輸出。輸出的字元串間以空白字元隔開,並在最後加上換行號。
	 -E 禁用 \ 解釋功能(default)
     -n 不自動換行
     -e 啟用 \ 解釋功能
		若字元串中出現以下字元,則特別加以處理,而不會將它當成一般文字輸出
        \a       發出警告聲
        \b       退格鍵
        \c       最後不加上換行符
        \e       escape字元,相當於\033,轉義符
        \n       回車換行
        \r       回到行首
        \t       水平製表符tab
		\v       垂直製表符
        \\       \字元
        \0nnn    nnn(八進位)ASCII字元
		\xHH     HH(十六進位)ASCII字元
echo "$VAR_NAME」    弱引用,""中的變數會被替換,被替換後輸出
echo '$VAR_NAME』    強引用,''中的變數不會替換,保持原樣輸出
echo -e '\0135\x5d'
]]

$(COMMAND) ; COMMAND 把一個命令的輸出列印給另一個命令用作參數

{ } 列印重複字元串的簡化形式
echo STRING{STRING1,STRING2,STRING3}
print(STRINGSTRING1 STRINGSTRING2 STRINGSTRING3)
echo {1..10}
echo {a..z}
echo {000..20..2}
exec

返迴文件操作

exec命令通常用在shell腳本程式中,可以調用其他的命令。如果在當前終端中使用命令,則當指定的命令執行完畢後會立即退出終端。例如:findmount等命令的參數

exec -c	在空環境中執行指定的命令

exec -c echo Welcome # 執行完 echo Welcome 後退出
exec /sbin/init      # 單用戶模式修改完密碼後直接啟動系統
umask

返回特殊文件許可權

新建文件和目錄的默認許可權:umask
umask  查看
                           root用戶默認是 0022 即 ----w--w-
                           普通用戶默認是 0002
文件(或目錄)的初始許可權 = 文件(或目錄)的最大默認許可權 - umask許可權
						   文件可擁有的最大默認許可權是 666 即 rw-rw-rw-
						   目錄可擁有的最大默認許可權是 777 即 rwxrwxrwx
umask xxxx 臨時設置
umask –S 以文字的方式來表示許可權掩碼
umask –p 輸出的許可權掩碼可直接作為指令來執行
永久配置文件:
全局設置:/etc/bashrc 用戶設置:~/.bashrc
lsattr

返回特殊文件許可權

lsattr
       -R   遞歸地列出目錄及其內容的屬性
       -a 	列出目錄中的所有文件,包括隱藏文件
       -d 	只顯示目錄名稱
chattr

返回特殊文件許可權

chattr +-=[aAcCdDeijsStTu]
       -R	遞歸處理目錄下的所有文件
       -v	設置文件或目錄版本
       -V	顯示指令執行過程
       +	開啟文件或目錄的該項屬性
       -	關閉文件或目錄的該項屬性
       =	指定文件或目錄的該項屬性
          a:讓文件或目錄僅供附加用途;
          A:當一個具有「A」屬性的文件被訪問時,它的atime記錄不會被修改;
          b:不更新文件或目錄的最後存取時間;
          c:將文件或目錄壓縮後存放;
          d:將文件或目錄排除在傾倒操作之外;
          i:不得修改文件或目錄;
          j:如果文件系統安裝有「data=order」或「data=writeback」選項,
             則具有「j」屬性的文件在寫入文件本身之前將其所有數據寫入ext 3日誌;
          s:當刪除具有「s」屬性集的文件時,其塊將被歸零並寫回磁碟;
          S:當修改具有「S」屬性集的文件時,更改將同步寫入磁碟;這相當於應用於文件子集的「同步」掛載;
          u:當刪除具有『u』屬性集的文件時,它的內容將被保存
chmod

返迴文件許可權

chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... MODE[,MODE]... FILE...
                  MODE:修改一類用戶的所有許可權
                        修改一類用戶某位或某些位許可權
	  -R: 遞歸修改許可權				
                  --reference=RFILE FILE...   參考RFILE文件的許可權,將FILE的修改為同RFILE
      u文件的所有者
      g與文件所有者同組的用戶
      o其他組的用戶
      a所有用戶(不帶參默認)=ugo
                            +/-/='rwxXstugo'
							(r)讀許可權(4)
							(w)寫許可權(2)
							(x)執行權(1)(或對目錄的訪問權)
							(X)只有目標文件對某些用戶是可執行的或該目標文件是目錄時才追加x屬性
							(s)同時設定用戶或組ID,SUID/SGID
							(t)Sticky 粘滯位 防刪除位
Example:
chmod u+x FILE  給文件所有者賦予執行許可權
chmod 777 FILE  任何人都有讀、寫、運行三項許可權
chmod 755 FILE  其他人不能寫

lsattr

返迴文件許可權

lsattr    顯示文件在Linux第二擴展文件系統上的特有屬性

chattr

返迴文件許可權

chattr    修改Linux文件系統的文件屬性
       +i 不能刪除,改名,更改(加鎖)
       +a 只能追加內容(用於日誌文件)
vipw

返回操作用戶配置文件

vipw – 加鎖編輯/etc/passwd、/etc/shadow、/etc/group和/etc/gshadow文件,以防止文件損壞
     -g	編輯group資料庫
     -p	編輯passwd資料庫
     -q	安靜模式
     -s	編輯shadow或gshadow資料庫
vigr

返回操作用戶配置文件

vigr - 編輯/etc/group、/etc/gshado文件。
       尋找編輯器將首先嘗試環境變數$VISUAL,然後是環境變數$EDITOR,最後默認是vi編輯器
	 -g	修改組資訊
	 -p	修改密碼資訊
	 -R	在CHROOT_DIR目錄中應用更改並使用CHROOT_DIR目錄中的配置文件
	 -s	編輯shadow 或 gshadow 資訊
pwck

返回操作用戶配置文件

pwck – 驗證系統認證文件/etc/passwd和/etc/shadow的內容和格式的完整性
	 -q	僅報告錯誤資訊
	 -s	以用戶id排序文件
	 -r	只讀方式運行指令
grpck

返回操作用戶配置文件

grpck - 檢查數據是否正確存放,每條記錄是否都包含足夠的資訊,
        是否有一個唯一的組名,是否包含正確的用戶,是否正確設置了組的管理員等。
     -r	只讀模式
     -s	排序組id
authconfig

返回操作用戶配置文件

更改加密演算法:
authconfig --passalgo=sha256 --update
                      md5: message digest, 128bits
                      sha1: secure hash algorithm, 160bits
                      sha224: 224bits
                      sha256: 256bits
                      sha384: 384bits
                      sha512: 512bits
whoami

返回用戶與許可權

whoami                        當前登錄有效用戶
who

返回用戶與許可權

who                           當前所有的登錄會話
who am i ; tty                當前登錄的終端
w

返回用戶與許可權

w [-fhisuV] [LOGIN]           當前所有的登錄會話及所做的操作,活動用戶 
  -f                         關閉顯示用戶從何處登入系統。
  -h                         不顯示各欄位的標題資訊列。
  -i                         詳細列表 (default)
  -s                         簡潔列表,不顯示用戶登入時間,終端機階段作業和程式所耗費的CPU時間。
  -u                         忽略執行程式的名稱、耗費CPU時間資訊。
useradd

返回用戶與許可權

useradd [options] [LOGIN]     創建(默認值設定:/etc/default/useradd)
        -s /sbin/nologin      指定用戶shell登錄方式,可用列表在/etc/shells文件中
		-m                    創建家目錄,用於系統用戶
	    -M                    不創建家目錄,用於非系統用戶
	    -u                    指定用戶uid資訊
	    -g                    指定用戶所屬主要組資訊
	    -G                    指定用戶所屬附屬組資訊,組須事先存在
	    -c                    指定用戶注釋資訊
		-o                    配合-u 選項,不檢查UID的唯一性
		-d HOME_DIR           以指定的路徑(不存在)為家目錄(默認:在 /home 目錄下)
		-N                    不創建與用戶同名的基本用戶組(默認:創建)
		-r                    創建系統用戶 CentOS 6: ID<500,CentOS 7: ID<1000
		-e                    賬戶到期時間,格式為 YYYY-MM-DD.
        -D                    顯示或更改默認設置
           -s SHELL           指定該用戶默認的shell解釋器(默認:shell為 /bin/bash )
           –b BASE_DIR        新帳戶家目錄的基目錄
           –g GROUP
           
新用戶的家目錄下配置文件:/etc/skel/*
newusers

返回用戶與許可權

newusers passwd格式的文件       批量創建用戶,一般用於創建虛擬用戶,創建的家目錄沒有配置文件
         -c	                  指定加密方法,可以指定為NONE、DES、MD5、SHA256、SHA5121
         -r	                  創建系統賬戶
         -s	                  為SHA*加密演算法進行四捨五入
passwd格式的文件:
linuxcool0:x:520:520::/home/zhangsan0:/bin/bash
chpasswd

返回用戶與許可權

chpasswd < 用戶名:密碼格式的文件
                              批量修改用戶口令
         -e	                  輸入的密碼是加密後的密文
         -m	                  當被支援的密碼未被加密時,使用MD5加密代替DES加密
使用文件:
用戶名:密碼
usermod

返回用戶與許可權

usermod [options] [LOGIN]     修改
        -s /sbin/nologin      指定用戶shell登錄方式
	    -u                    指定用戶uid資訊
	    -g                    指定用戶所主要屬組組資訊
	    -G                    指定用戶所屬附屬組資訊,覆蓋原來的附加組;同時使用-a若保留原有
	    -c                    指定用戶注釋資訊 
		-d HOME               新家目錄不會自動創建;同時使用-m創建新家目錄並移動原家數據
        -l login_name         新的名字
        -L                    lock指定用戶,在 /etc/shadow 密碼欄的增加 !
        -U                    unlock指定用戶,將 /etc/shadow 密碼欄的 ! 拿掉
		-e YYYY-MM-DD         指明用戶帳號過期日期
	    -f INACTIVE           設定非活動期限
userdel

返回用戶與許可權

userdel [options] [LOGIN]     
        -f                    強制刪除用戶
        -r                    徹底刪除用戶資訊和home目錄,郵件(默認保留home目錄)
passwd

返回用戶與許可權

passwd [options] [LOGIN]      修改當前用戶密碼
       -d                     刪除指定用戶密碼
       -l                     鎖定指定用戶
       -u                     解鎖指定用戶
       -e                     強制用戶下次登錄修改密碼
       -f                     強制操作
       -S                     顯示用戶的密碼是否被鎖定,以及密碼所使用的加密演算法名稱
       -n mindays             指定最短使用期限
       -x maxdays             最大使用期限
       -w warndays            提前多少天開始警告
       -i inactivedays        非活動期限
       --stdin                從標準輸入接收用戶密碼;
                              示例:echo "PASSWORD" | passwd --stdin USERNAME
chage

返回用戶與許可權

chage [OPTION]... LOGIN             設置用戶策略,用戶策略默認配置文件:/etc/login.defs
      -d, --lastday LAST_DAY        設置最近一次更改密碼的天數為LAST_DAY;
                                    0 下一次登錄強制重設密碼
      -E, --expiredate EXPIRE_DATE  設置帳戶到期日期為EXPIRE_DATE;yyyy-mm-dd
      -I, --inactive INACTIVE       設置過期後不活動賬戶密碼為INACTIVE
      -m, --mindays MIN_DAYS        設置修改密碼最小天數為MIN_DAYS
      -M, --maxdays MAX_DAYS        設置修改密碼最大天數為MAX_DAYS
      -R, --root CHROOT_DIR         改變用戶進入的根目錄
      -W, --warndays WARN_DAYS      設置過期警告天數為WARN_DAYS             
chfn

返回用戶與許可權

chfn    互動式指定個人資訊,修改存放在 /etc/passwd  中的 finger 資訊
     -f	設置真實姓名
     -h	設置家中的電話號碼
     -u	幫助
chsh

返回用戶與許可權

chsh    互動式指定用戶登陸shell
     -l	列印/etc/shells中列出的shell列表並退出
     -s	指定登錄shell
     -u	幫助
groupadd

返回用戶與許可權

groupadd [OPTION] group_name  創建用戶組 
        -g GID                指明GID號;[GID_MIN, GID_MAX]
	    -r                    創建系統組 CentOS 6: ID<500;CentOS 7: ID<1000
groupmod

返回用戶與許可權

groupmod [OPTION] group_name  修改用戶組
         -n group_name        新名字
         -g GID               新GID
groupdel

返回用戶與許可權

groupdel group_name           刪除用戶組
gpasswd

返回用戶與許可權

gpasswd [OPTION] GROUP        更改組密碼
		-a user               將user添加至指定組中
		-d user               從指定組中移除用戶user
		-A user1,user2,...    設置有管理許可權的用戶列表
newgrp

返回用戶與許可權

newgrp                        臨時切換主組,如果用戶本不屬於此組,則需要組密碼
groupmems

返回用戶與許可權

groupmems [options] [action]
          options:
          -g, --group groupname 更改為指定組root(默認)
		  -R, --root CHROOT_DIR 改變用戶進入的根目錄
          actions:
          -a, --add username    指定用戶加入組
          -d, --delete username 從組中刪除用戶
          -p, --purge           從組中清除所有成員
          -l, --list            顯示組成員列表
groups

返回用戶與許可權

groups [OPTION] [USERNAME]... 查看用戶所屬組列表
id

返回用戶與許可權

id [OPTION]... [USER]         顯示當前用戶的ID,以及所屬群組的ID
   -u                         顯示UID
   -g                         顯示GID
   -G                         顯示用戶所屬的組的ID
   -n                         顯示名稱,需配合ugG使用
last

返回用戶與許可權

last                          查看用戶登錄日誌
lastlog

返回用戶與許可權

lastlog                       顯示所有用戶最後一次登錄的時間
cat

返迴文件操作

cat 文件名稱 文件名稱           合併顯示
cat [OPTION]... [FILE]...    輸出文件內容資訊
    -A, --show-all           equivalent to -vET (equivalent 相等的)
    -b, --number-nonblank    number nonempty output lines, overrides -n
                             (nonempty 非空)(overrides 覆蓋)
    -e                       equivalent to -vE
    -E, --show-ends          display $ at end of each line
    -n, --number             number all output lines
    -s, --squeeze-blank      suppress repeated empty output lines
                            (suppress repeated 抑制重複)
    -t                       equivalent to -vT
    -T, --show-tabs          display TAB characters as ^I
    -v, --show-nonprinting   使用^和M-表示法,LFD和TAB除外

With no FILE, or when FILE is -, read standard input.(standard 標準)

Examples:
  cat file1 - file2  Output file1's contents, then standard input, then file2's contents.(contents 內容)
  cat > file                 標準輸入 覆蓋寫入 file 按ctrl+d離開
EOF=END Of File          表示自定義終止符,Ctrl+d
<<                       標準輸入來自命令行的一對分隔號的中間內容.
<<EOF        //開始
....
EOF          //結束

'文件'<=>'<< EOF EOF'
'<< EOF EOF'              類似一個臨時文件,執行腳本時:自動輸入N行內容
tac

返迴文件操作

cat相反

tac [OPTION]... [FILE]...  反向輸出文件內容資訊
    -b	                   在行前而非行尾添加分隔標誌
    -r	                   將分隔標誌視作正則表達式來解析
    -s	                   使用指定字元串代替換行作為分隔標誌
rev

返回抽取文本操作

rev [文件]     把每一行字元的順序顛倒過來顯示文件內容
nl

返迴文件操作

nl [OPTION]... [FILE]...  顯示文件並添加行號。如果沒有文件,或者當文件為-,則讀取標準輸入。
   -b	                  指定行號指定的方式
      a                   number all lines
      t                   number only nonempty lines
      n                   number no lines
      pBRE                number only lines that 包含基本正則表達式BRE的匹配項
   -n	                  列出行號表示的方式
      ln                  左對齊,無前導零
      rn                  右對齊,無前導零
      rz                  右對齊,前導零
   -w	                  行號欄佔用的位數
   -p	                  在邏輯定界符處不重新開始計算。
cut

返迴文件操作

cut                          將每個文件中選定的行部分列印到標準輸出
    -b, --bytes=LIST         僅列印LIST個位元組
    -c, --characters=LIST    僅列印LIST個字元 - 表示往後所有
    -d, --delimiter=DELIM    使用DELIM代替TAB作為欄位分隔符
    -f, --fields=LIST        僅列印LIST欄位;同時列印不包含分隔符字元的任何行,除非指定 -s
    -n                       同時使用-b:不拆分多位元組字元
        --complement         對所選位元組、字元或欄位集進行補充
    -s, --only-delimited     不列印不包含分隔符的行
        --output-delimiter=STRING  
                             使用字元串作為輸出分隔符,默認使用輸入分隔符
cut -d: -f1 /etc/passwd      僅列印 /etc/passwd 以:作為欄位分隔符的第一列欄位
cut -c2- /etc/passwd         僅列印 /etc/passwd 每行從第2個字元開使的內容

返回用戶與許可權

cut -d: -f1 /etc/passwd       查看系統所有用戶 
cut -d: -f1 /etc/group        查看系統所有組
crontab

返迴文件系統結構

用來提交和管理用戶的需要周期性執行的任務,與windows下的計劃任務類似,是一個daemon類程式,路徑為/usr/sbin/crond,默認會以後台方式自動啟動crond進程,每分鐘定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

crondtab是管理crontab file的工具,而crontab file是定義定時任務條目的文件。

crontab file存在於多處,包括系統定時任務文件/etc/crontab和/etc/cron.d/*,還有獨屬於各用戶的任務文件/var/spool/cron/USERNAME。

(1).在此文件中,空行會被忽略,首個非空白字元且以#開頭的行為注釋行,但#不能出現在行中。

(2).可以在crontab file中設置環境變數,方式為”name=value”,等號兩邊的空格可隨意,即”name = value”也是允許的。但value中出現的空格必須使用引號包圍。

(3). 默認crond命令啟動的時候會初始化所有變數,除了某幾個變數會被crond daemon自動設置好,其他所有變數都被設置為空值,然後載入自定義變數到記憶體。自動設置的變數包括SHELL=/bin/sh,以及HOME和USER,後兩者將被默認設置為/etc/passwd中指定的值。其中SHELL和HOME可以被crontab file中自定義的變數覆蓋,但USER不允許覆蓋。

(4).如果MAILTO定義的值為空(MAILTO=””),不發送郵件; 如果設置了MAILTO,則郵件將發送給此變數指定的地址,其他所有情況郵件都會發送給crontab file的所有者。

(5).在系統定時任務文件/etc/crontab中,默認已定義環境變數SHELL和PATH=/sbin:/bin:/usr/sbin:/usr/bin。

Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。

系統任務調度:系統周期性所要執行的工作,比如寫快取數據到硬碟、日誌清理等。配置文件: /etc/crontab 需要指定執行用戶。

用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用 crontab 工具來訂製自己的計劃任務。所有用戶定義的 crontab 文件都被保存在 /var/spool/cron目錄中。其文件名與用戶名一致。

注意:當程式在你所指定的時間執行後,系統會發一封郵件給當前的用戶,顯示該程式執行的內容,若是你不希望收到這樣的郵件,請在每一行最後空一格後加上 > /dev/null 2>&1(防止/var/spool/clientmqueue爆滿)

相關配置文件:

/etc/crontab:系統任務調度,定期執行程式,直接修改配置文件
/var/spool/cron/用戶名:用戶任務調度,定期執行程式,可使用 crontab 命令設置
/var/log/cron:定時任務的日誌文件
/etc/cron.deny:定時任務黑名單
/etc/cron.hourly/:系統定時任務每個小時運行這個目錄里的內容
/etc/cron.daily/:系統定時任務每天運行這個目錄里的內容
/etc/cron.weekly/:系統定時任務每周運行這個目錄里的內容
/etc/cron.monthly/:系統定時任務每月運行這個目錄里的內容
crontab [-u username] [file] [ -e | -l | -r ]
        -l                    查看當前用戶的計劃任務 
        -e	                  編輯當前用戶的計劃任務
        -r	                  刪除當前用戶的所有計劃任務
        -i                    同 -r 一同使用,以互動式模式移除指定任務
        -u	                  僅root可運行,指定要設置計劃任務的用戶
        
參數格式( 如果有些欄位沒有設置,則需要使用星號(*)佔位 ):
minute   hour   day   month   week  user  command     
順序:分   時     日      月      周   用戶    命令 

參數欄位說明:
minute	表示分鐘,是從0到59之間的任何整數
hour	表示小時,是從0到23之間的任何整數
day	    表示日期,是從1到31之間的任何整數
month	表示月份,是從1到12之間的任何整數
week	表示星期,是從0到7之間的任何整數,其中0或7代表星期日
user    表示用戶,/var/spool/cron目錄中的用戶調度任務,沒有user一項,因為文件名已經代表了user。
command	要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件
星號(*):每,取值範圍內的所有數字,
         例如month欄位如果是星號,則表示在滿足其它欄位的制約條件後每月都執行該命令操作。
逗號(,):枚舉, 可以用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」
中杠(-):範圍, 可以用整數之間的中杠表示一個整數範圍,例如「2-6」表示「2,3,4,5,6」
正斜線(/):忽略時間,可以用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。
*/n :例如*/10,如果用在minute欄位,表示每十分鐘執行一次。

注意: 
1.如果定義的日和周衝突了,則會多次執行(不包括因為*號導致的衝突)。因此,應該儘力避免同時定義周和日的任務。
2.命令中,不能隨意出現百分號"%",因為它表示換行的特殊意義,且第一個%後的所有字元串將當作命令的標準輸入。所以,在定時任務條目中若以時間定義文件名時,應當將%使用反斜杠轉義。
3.使用*號導致低級別的時間覆蓋高級別的時間。例如:
"* */2 * * *",分鐘位上的設置覆蓋小時位上的設置,表示每分鐘執行一次
"*/5 */2 * * *",分鐘位上的設置覆蓋小時位上的設置,表示每5分鐘執行一次而忽略小時位的設置;
"00 */2 */5 * *",表示每隔兩小時的整點執行一次任務而忽略天數位的設置。

Examples:
實例1:每分鐘、每小時、每天、每周、每月、每年執行
* * * * * myCommand
0 * * * * myCommand
0 0 * * * myCommand
0 0 * * 0 myCommand
0 0 1 * * myCommand
0 0 1 1 * myCommand

實例2:每小時的第3和第15分鐘執行
3,15 * * * * myCommand

實例3:在上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * * myCommand

實例4:每隔兩天的上午8點到11點的第3和第15分鐘執行
3,15 8-11 */2 * * myCommand

實例5:每周一上午8點到11點的第3和第15分鐘執行
3,15 8-11 * * 1 myCommand

實例6:每晚的21:30重啟smb
30 21 * * * /etc/init.d/smb restart

實例7:每月1、10、22日的4 : 45重啟smb
45 4 1,10,22 * * /etc/init.d/smb restart

實例8:每周六、周日的1 : 10重啟smb
10 1 * * 6,0 /etc/init.d/smb restart

實例9:每天18 : 00至23 : 00之間每隔30分鐘重啟smb
0,30 18-23 * * * /etc/init.d/smb restart

實例10:每星期六的晚上11 : 00 pm重啟smb
0 23 * * 6 /etc/init.d/smb restart

實例11:晚上11點到早上7點之間,每隔一小時重啟smb
0 23-7/1 * * * /etc/init.d/smb restart

實例12:每月的4號與每周一到周三的11點重啟smb
0 11 4 * mon-wed /etc/init.d/smb restart

實例13:每小時執行/etc/cron.hourly目錄內的腳本,run-parts 運行目錄內的腳本
01 * * * * root run-parts /etc/cron.hourly

[root@linuxcool ~]# crontab -e 
no crontab for root - using an empty one 
crontab: installing new crontab 
[root@linuxcool ~]# crontab -l 
25 3 * * 1,3,5 /usr/bin/tar -czvf backup.tar.gz /home/wwwroot
# 每周一、三、五的凌晨3點25分,把網站目錄打包備份

crond命令的調試

使用下面三條命令啟動的crond都是在後台運行的,且都不依賴於終端:

systemctl start crond.service
service crond start
crond

[root@server2 ~]$ cat /lib/systemd/system/crond.service  # crond啟動腳本
[Unit]
Description=Command Scheduler
After=auditd.service systemd-user-sessions.service time-sync.target

[Service]EnvironmentFile=/etc/sysconfig/crond
ExecStart=/usr/sbin/crond -n $CRONDARGSExecReload=/bin/kill -HUP $MAINPID
KillMode=process

[Install]
WantedBy=multi-user.target

[root@server2 ~]$ cat /etc/sysconfig/crond  # crond環境配置文件
# Settings for the CRON daemon.
# CRONDARGS= :  any extra command-line startup arguments for crond
CRONDARGS=
crond [-n] [-P] [-x flags]
      -n:讓crond以前端方式運行,即不依賴於終端。
      -P:不重設環境變數PATH,而是從父進程中繼承。
      -x:設置調試項,flags是調試方式,比較有用的方式是test和sch,即"-x test"和"-x sch"。
              :其中test調試將不會真正的執行,sch調試將可以看到等待時間。具體的見下面的示例。
[root@server2 ~]$ crond -x test
debug flags enabled: test
[4903] cron started
log_it: (CRON 4903) INFO (RANDOM_DELAY will be scaled with factor 8% if used.)
log_it: (CRON 4903) INFO (running with inotify support)
log_it: (CRON 4903) INFO (@reboot jobs will be run at computer's startup.)log_it: (root 4905) CMD (echo "hello world" >>/tmp/hello.txt )

[root@server2 ~]$ crond -x sch
debug flags enabled: sch
[4829] cron started
log_it: (CRON 4829) INFO (RANDOM_DELAY will be scaled with factor 73% if used.)
log_it: (CRON 4829) INFO (running with inotify support)
[4829] GMToff=28800log_it: (CRON 4829) INFO (@reboot jobs will be run at computer's startup.)[4829] Target time=1497950880, sec-to-wait=38   # 等待crond daemon下一次的檢測,所以表示38秒後crond將檢測crontab file
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4829] Target time=1497950940, sec-to-wait=60Minute-ly job. Recording time 1497922081log_it: (root 4831) CMD (echo "hello world" >>/tmp/hello.txt )user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "[4829] Target time=1497951000, sec-to-wait=60Minute-ly job. Recording time 1497922141log_it: (root 4833) CMD (echo "hello world" >>/tmp/hello.txt )

注意,在sch調試結果中的等待時間是crond這個daemon的檢測時間,除了第一次,之後每次都是60秒,因為默認crond是每分鐘檢測一次crontab file的。

例如,下面是某次的等待結果,在這幾次等待檢測過程中沒有執行任何任務。
[4937] Target time=1497951720, sec-to-wait=18[4937] Target time=1497951780, sec-to-wait=60[4937] Target time=1497951840, sec-to-wait=60

同時使用多個調試方式,如:
[root@server2 ~]$ crond -x test,schdebug flags enabled: sch test[4914] cron started
log_it: (CRON 4914) INFO (RANDOM_DELAY will be scaled with factor 21% if used.)
log_it: (CRON 4914) INFO (running with inotify support)
[4914] GMToff=28800log_it: (CRON 4914) INFO (@reboot jobs will be run at computer's startup.)[4914] Target time=1497951540, sec-to-wait=9
user [root:0:0:...] cmd="echo "hello world" >>/tmp/hello.txt "
[4914] Target time=1497951600, sec-to-wait=60Minute-ly job. Recording time 1497922741log_it: (root 4916) CMD (echo "hello world" >>/tmp/hello.txt )
秒級任務計劃
1.寫一個腳本,在腳本中sleep3秒鐘的時間,這樣能實現每3秒執行一次命令。
[root@xuexi ~]$ cat /tmp/a.sh
#!/bin/bash
PATH="$PATH:/usr/local/bin:/usr/local/sbin"
for ((i=1;i<=20;i++));do ls /tmp sleep 3 done

[root@xuexi ~]$ cat /var/spool/cron/lisi* * * * * /bin/bash /tmp/a.sh

2.在cron配置文件中寫入多條sleep命令和其他命令。
[root@xuexi ~]$ cat /var/spool/cron/lisi
* * * * * ls /tmp
* * * * * sleep 3 && ls /tmp
* * * * * sleep 6 && ls /tmp
* * * * * sleep 9 && ls /tmp
* * * * * sleep 12 && ls /tmp
…
* * * * * sleep 57 && ls /tmp
su

返回用戶與許可權

su [options...] [-] [user [args...]] 
   -,-l,--login               登錄並改變到所切換的用戶環境(默認不改變用戶環境)
   -c                         執行一個命令,然後退出所切換到的用戶環境
切換用戶:root 切換至其他用戶無須密碼;非root用戶切換時需要密碼
su UserName                   非登錄式切換,即不會讀取目標用戶的配置文件,不改變當前工作目錄
su - UserName                 登錄式切換,會讀取目標用戶的配置文件,切換至家目錄,完全切換(常用)
su [-] UserName -c 'COMMAND'  換個身份執行命令
visudo

返回用戶與許可權

visudo  # 擁有語法檢測功能

# 末尾追加:
# test用戶能在localhost主機執行useradd,userdel(要test密碼)
test localhost=/user/sbin/useradd,/user/sbin/userdel
# test用戶能從任何機器登錄,以任何用戶和用戶組的身份運行除了useradd,userdel之外的任何命令(要test密碼)
test	ALL=(ALL) 	ALL,!/user/sbin/useradd,!/user/sbin/userdel
# test用戶能在localhost主機執行useradd,userdel(不要test密碼)
test localhost=NOPASSWD: /user/sbin/useradd,/user/sbin/userdel
# test用戶能在任何機器執行useradd,userdel(不要test密碼)
test ALL=NOPASSWD: /user/sbin/useradd,/user/sbin/userdel

# test用戶能從任何機器登錄,以任何用戶和用戶組的身份運行任何命令(要test密碼)
test	ALL=(ALL) 	ALL
# test用戶能從任何機器登錄,以任何用戶和用戶組的身份運行任何命令(不要test密碼)
test	ALL=(ALL)	NOPASSWD: ALL

常見語法格式如下:
user   MACHINE=COMMANDS
OPERATORS MAILSERVERS=SOFTWARE
自定義別名代替,格式如下
User_Alias               OPERATORS=jerry,tom,tsengyia
Host_Alias               MAILSERVERS=smtp,pop
Cmnd_Alias               SOFTWARE=/bin/rpm,/usr/bin/yum
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
## 該文件允許特定用戶像root用戶一樣使用各種各樣的命令,而不需要root用戶的密碼
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相關命令的示例以供選擇,這些示例都可以被特定用戶或
## 用戶組所使用 
##
## This file must be edited with the 'visudo' command.
## 該文件必須使用"visudo"命令編輯

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using 
## wildcards for entire domains) or IP addresses instead.
## 對於一組伺服器,你可能會更喜歡使用主機名(可能是全域名的通配符)
## 或IP地址,這時可以配置主機別名
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 
## rather than USERALIAS
## 這並不很常用,因為你可以通過使用組來代替一組用戶的別名
# User_Alias ADMINS = jsmith, mikem

## Command Aliases
## These are groups of related commands...
## 指定一系列相互關聯的命令(當然可以是一個)的別名,通過賦予該別名sudo許可權,
## 可以通過sudo調用所有別名包含的命令,下面是一些示例

## Networking 網路操作相關命令別名
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, 
# /usr/bin/net, /sbin/iptables,
/usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software 軟體安裝管理相關命令別名
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services 服務相關命令別名
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database 本地資料庫升級命令別名
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage 磁碟操作相關命令別名
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions 代理許可權相關命令別名
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp 

## Processes 進程相關命令別名
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers 驅動命令別名
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear. 
#         You have to run "ssh -t hostname sudo <cmd>".
# 一些環境變數的相關配置,具體情況可見man soduers
Defaults    requiretty

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## Next comes the main part: which users can run what software on 
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是規則配置:什麼用戶在哪台伺服器上可以執行哪些命令(sudoers文件可以在多個系統上共享)
## Syntax(語法):
##
## 	user	MACHINE=COMMANDS 用戶 登錄的主機=(可以變換的身份) 可以執行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附帶一些其它的選項
##
## Allow root to run any commands anywhere 
## 允許root用戶從任何機器登錄,以任何用戶和用戶組的身份運行任何命令
root	ALL=(ALL) 	ALL

## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
## 允許sys中戶組中的用戶使用NETWORKING等所有別名中配置的命令
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
## 允許wheel用戶組中的用戶執行所有命令
%wheel	ALL=(ALL)	ALL

## Same thing without a password
## 允許wheel用戶組中的用戶在不輸入該用戶的密碼的情況下使用所有命令
# %wheel	ALL=(ALL)	NOPASSWD: ALL

## Allows members of the users group to mount and unmount the 
## cdrom as root
## 允許users用戶組中的用戶像root用戶一樣使用mount、unmount、chrom命令
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
## 允許users用戶組中的用戶關閉localhost這台伺服器
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
## 讀取放置在/etc/sudoers.d/文件夾中的文件(此處的#不意味著這是一個聲明)
#includedir /etc/sudoers.d
sudo

返回用戶與許可權

sudo COMMAND                  以系統管理者的身份執行指令
     -k  清除密碼快取
     -l   查看擁有的sudo許可權
chown

返迴文件許可權

chown [OPTION]... [OWNER][:[GROUP]] FILE... 設置文件的屬主/屬組
      -R: 遞歸            冒號也可用 . 替換
	              --reference=RFILE FILE... 參考文件RFILE,批量操作
Example:
chown root:admins testfile
chown mage testfile
chgrp

返迴文件許可權

chgrp [OPTION]... GROUP FILE...             設置文件的屬組資訊
      -R: 遞歸
	              --reference=RFILE FILE... 參考文件RFILE,批量操作
Example:
chgrp sales testfile
more

返迴文件操作

more [OPTIONS...] FILE...  分屏模式,首屏顯示前5行的內容,當到達文件底時,會直接退出。
     -NUM                  指定每個螢幕的行數
     +NUM                  顯示從行號NUM開始的文件內容
     -d                    幫助
less

返迴文件操作

返回正則表達式

less                        分頁模式,逐頁查看文件內容
	 -N		                顯示行號
分屏模式快捷操作: f(空格)	    下一頁
			    b			 上一頁
			    G			 跳轉到末頁
			    g			 跳轉到首頁
			    100g		 跳轉到100行
			    100G		 跳轉到100行
			    q			 退出
			    ↑↓		     上一行/下一行
                ←→		    頁面左移/右移
			    回車		    下一行
				v            進入vi編輯模式
                :wq          保存並退出vi模式
			    /文本         搜索 文本
			    n/N          跳到下一個 或 上一個匹配
			    
less 是 man 使用的分頁器

返迴文件操作

返迴文件系統結構

head [OPTION]... [FILE]...  輸出文件前幾行內容(默認前10行)
	 -c                     指定獲取前 NUM 位元組
	 -n                     指定獲取前 NUM 行
	    -                   輸出開頭到倒數第 NUM 行的內容
		+                   輸出文件前 NUM 行內容
	 -                      輸出文件前 NUM 行內容
tail

返迴文件操作

返迴文件系統結構

tail [OPTION]... [FILE]...  輸出文件後幾行內容(默認後10行)
	 -c                     指定獲取後 NUM 位元組
	 -n                     指定獲取後 NUM 行
	    -                   輸出文件後 NUM 行內容
		+                   輸出文件第 NUM 行到末尾的內容
	 -              	    輸出文件後 NUM 行內容
	 -f             	    跟蹤顯示文件新追加的內容,常用日誌監控
						    same as --follow[={name|descriptor}]
	 -F             	    跟蹤顯示文件新追加的內容,即使文件不在,也對該文件進行監控
						    same as --follow=name --retry
tailf

返迴文件操作

返迴文件系統結構

tailf [option] file         類似tail –f,當文件不增長時並不訪問文件
      -n, --lines NUMBER  output the last NUMBER lines
      -NUMBER             same as `-n NUMBER'
cut

返回抽取文本操作

cut [OPTION]... [FILE]...    將每個文件中選定的行部分列印到標準輸出                       
    -b, --bytes=LIST         僅列印LIST位元組
    -c, --characters=LIST    僅列印LIST字元
    -d, --delimiter=DELIM    使用DELIM代替TAB作為欄位分隔符,必須配合-bcf
    -f, --fields=LIST        僅列印LIST欄位;同時列印不包含分隔符字元的任何行,除非指定了-s選項

    -n                       同時使用-b:不拆分多位元組字元
        --complement         對所選位元組、字元或欄位集進行補充
    -s, --only-delimited     不列印不包含分隔符的行
        --output-delimiter=STRING  使用字元串作為輸出分隔符
                             默認使用輸入分隔符
        LIST
        #        第#個欄位
        #,#      離散的多個欄位,例如1,3,6
        #-#      連續的多個欄位, 例如1-6
        #-#,#    混合使用,例如1-3,7							 
Example:
cut -d: -f1 /etc/passwd      僅列印 /etc/passwd 以:作為欄位分隔符的第一列欄位
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste

返回抽取文本操作

paste [OPTION]... [FILE]...  合併兩個文件同行號的列到一行
      -d 分隔符               指定分隔符,默認用TAB
      -s                     所有行合成一行顯示
wc

返回抽取文本操作

wc [OPTION]... [FILE]...     統計顯示行數、單詞數、位元組數 
   -c, --bytes               print the byte counts
   -m, --chars               print the character counts(character counts 字元計數)
   -l, --lines               print the newline counts(newline 換行符,行數)
   -L, --max-line-length     print the length of the longest line(longest 最長的)
   -w, --words               print the word counts
Example:
wc story.txt
39   237   1901 story.txt
行數 字數 位元組數

wget

wget是一個下載文件的工具,它用在命令行下。對於Linux用戶是必不可少的工具,我們經常要下載一些軟體或從遠程伺服器恢復備份到本地伺服器。
wget支援HTTP,HTTPS和FTP協議,可以使用HTTP代理。所謂的自動下載是指,wget可以在用戶退出系統的之後在後台執行。這意味這你可以登錄系統,啟動一個wget下載任務,然後退出系統,wget將在後台執行直到任務完成
wget 可以跟蹤HTML頁面上的鏈接依次下載來創建遠程伺服器的本地版本,完全重建原始站點的目錄結構。這又常被稱作」遞歸下載」。
wget 非常穩定,它在頻寬很窄的情況下和不穩定網路中有很強的適應性.如果是由於網路的原因下載失敗,wget會不斷的嘗試,直到整個文件下載完畢。如果是伺服器打斷下載過程,它會再次聯到伺服器上從停止的地方繼續下載。這對從那些限定了鏈接時間的伺服器上下載大文件非常有用。
wget常見命令參數	
GNU Wget 1.12,非互動式的網路文件下載工具。
用法: wget [選項]... [URL]...
長選項所必須的參數在使用短選項時也是必須的。
開始:
  -V,  --version           顯示 Wget 的版本資訊並退出。
  -h,  --help              列印此幫助。
  -b,  --background        啟動後轉入後台。
  -e,  --execute=COMMAND   運行一個『.wgetrc』風格的命令。
登入並輸入文件:
  -o,  --output-file=FILE    將資訊寫入 FILE。
  -a,  --append-output=FILE  將資訊添加至 FILE。
  -d,  --debug               列印大量調試資訊。
  -q,  --quiet               安靜模式(無資訊輸出)。
  -v,  --verbose             詳盡的輸出(此為默認值)。
  -nv, --no-verbose          關閉詳盡輸出,但不進入安靜模式。
  -i,  --input-file=FILE     下載本地或外部 FILE 中的 URLs。
  -F,  --force-html   把輸入文件當成 HTML 文件。
  -B,  --base=URL            解析與 URL 相關的
    HTML 輸入文件(由 -i -F 選項指定)。
 
下載:
  -t,  --tries=NUMBER              設置重試次數為 NUMBER (0 代表無限制)。
        --retry-connrefused        即使拒絕連接也是重試。
  -O,  --output-document=FILE      將文檔寫入 FILE。
  -nc, --no-clobber                不要重複下載已存在的文件。                                
  -c,  --continue                  繼續下載部分下載的文件。
       --progress=TYPE             選擇進度條類型。
  -N,  --timestamping              只獲取比本地文件新的文件。
                                  
  -S,  --server-response          列印伺服器響應。
       --spider                   不下載任何文件。
  -T,  --timeout=SECONDS          將所有超時設為 SECONDS 秒。
       --dns-timeout=SECS         設置 DNS 查尋超時為 SECS 秒。
       --connect-timeout=SECS     設置連接超時為 SECS 秒。
       --read-timeout=SECS        設置讀取超時為 SECS 秒。
  -w,  --wait=SECONDS             等待間隔為 SECONDS 秒。
       --waitretry=SECONDS        在取迴文件的重試期間等待 1..SECONDS 秒。
       --random-wait              取回時等待 0...2*WAIT 秒。
       --no-proxy                 關閉代理。
  -Q,  --quota=NUMBER             設置取回配額為 NUMBER 位元組。
       --bind-address=ADDRESS     綁定至本地主機上的 ADDRESS (主機名或是 IP)。
       --limit-rate=RATE          限制下載速率為 RATE。
       --no-dns-cache             關閉 DNS 查尋快取。
       --restrict-file-names=OS   限定文件名中的字元為 OS 允許的字元。
       --ignore-case              匹配文件/目錄時忽略大小寫。
  -4,  --inet4-only               僅連接至 IPv4 地址。
  -6,  --inet6-only               僅連接至 IPv6 地址。
       --prefer-family=FAMILY     首先連接至指定協議的地址
                                  FAMILY 為 IPv6,IPv4 或是 none。
       --user=USER                將 ftp 和 http 的用戶名均設置為 USER。
       --password=PASS            將 ftp 和 http 的密碼均設置為 PASS。
       --ask-password             提示輸入密碼。
       --no-iri                   關閉 IRI 支援。
       --local-encoding=ENC       IRI 使用 ENC 作為本地編碼。
       --remote-encoding=ENC      使用 ENC 作為默認遠程編碼。
 
目錄:
  -nd, --no-directories           不創建目錄。
  -x,  --force-directories        強制創建目錄。
  -nH, --no-host-directories      不要創建主目錄。
       --protocol-directories     在目錄中使用協議名稱。
  -P,  --directory-prefix=PREFIX  以 PREFIX/... 保存文件
       --cut-dirs=NUMBER          忽略 NUMBER 個遠程目錄路徑。
 
HTTP 選項:
       --http-user=USER        設置 http 用戶名為 USER。
       --http-password=PASS    設置 http 密碼為 PASS。
       --no-cache              不在伺服器上快取數據。
       --default-page=NAME     改變默認頁
                               (默認頁通常是「index.html」)。
  -E,  --adjust-extension      以合適的擴展名保存 HTML/CSS 文檔。
       --ignore-length         忽略頭部的『Content-Length』區域。
       --header=STRING         在頭部插入 STRING。
       --max-redirect          每頁所允許的最大重定向。
       --proxy-user=USER       使用 USER 作為代理用戶名。
       --proxy-password=PASS   使用 PASS 作為代理密碼。
       --referer=URL           在 HTTP 請求頭包含『Referer: URL』。
       --save-headers          將 HTTP 頭保存至文件。
  -U,  --user-agent=AGENT      標識為 AGENT 而不是 Wget/VERSION。
       --no-http-keep-alive    禁用 HTTP keep-alive(永久連接)。
       --no-cookies            不使用 cookies。
       --load-cookies=FILE     會話開始前從 FILE 中載入 cookies。
       --save-cookies=FILE     會話結束後保存 cookies 至 FILE。
       --keep-session-cookies  載入並保存會話(非永久) cookies。
       --post-data=STRING      使用 POST 方式;把 STRING 作為數據發送。
       --post-file=FILE        使用 POST 方式;發送 FILE 內容。
       --content-disposition   當選中本地文件名時
                               允許 Content-Disposition 頭部(尚在實驗)。
       --auth-no-challenge     send Basic HTTP authentication information
                               without first waiting for the server's
                               challenge.
 
HTTPS (SSL/TLS) 選項:
       --secure-protocol=PR     選擇安全協議,可以是 auto、SSLv2、
                                SSLv3 或是 TLSv1 中的一個。
       --no-check-certificate   不要驗證伺服器的證書。
       --certificate=FILE       客戶端證書文件。
       --certificate-type=TYPE  客戶端證書類型, PEM 或 DER。
       --private-key=FILE       私鑰文件。
       --private-key-type=TYPE  私鑰文件類型, PEM 或 DER。
       --ca-certificate=FILE    帶有一組 CA 認證的文件。
       --ca-directory=DIR       保存 CA 認證的哈希列表的目錄。
       --random-file=FILE       帶有生成 SSL PRNG 的隨機數據的文件。
       --egd-file=FILE          用於命名帶有隨機數據的 EGD 套接字的文件。
 
FTP 選項:
       --ftp-user=USER         設置 ftp 用戶名為 USER。
       --ftp-password=PASS     設置 ftp 密碼為 PASS。
       --no-remove-listing     不要刪除『.listing』文件。
       --no-glob               不在 FTP 文件名中使用通配符展開。
       --no-passive-ftp        禁用「passive」傳輸模式。
       --retr-symlinks         遞歸目錄時,獲取鏈接的文件(而非目錄)。
 
遞歸下載:
  -r,  --recursive          指定遞歸下載。
  -l,  --level=NUMBER       最大遞歸深度( inf 或 0 代表無限制,即全部下載)。
       --delete-after       下載完成後刪除本地文件。
  -k,  --convert-links      讓下載得到的 HTML 或 CSS 中的鏈接指向本地文件。
  -K,  --backup-converted   在轉換文件 X 前先將它備份為 X.orig。
  -m,  --mirror             -N -r -l inf --no-remove-listing 的縮寫形式。
  -p,  --page-requisites    下載所有用於顯示 HTML 頁面的圖片之類的元素。
       --strict-comments    開啟 HTML 注釋的精確處理(SGML)。
 
遞歸接受/拒絕:
  -A,  --accept=LIST               逗號分隔的可接受的擴展名列表。
  -R,  --reject=LIST               逗號分隔的要拒絕的擴展名列表。
  -D,  --domains=LIST              逗號分隔的可接受的域列表。
       --exclude-domains=LIST      逗號分隔的要拒絕的域列表。
       --follow-ftp                跟蹤 HTML 文檔中的 FTP 鏈接。
       --follow-tags=LIST          逗號分隔的跟蹤的 HTML 標識列表。
       --ignore-tags=LIST          逗號分隔的忽略的 HTML 標識列表。
  -H,  --span-hosts                遞歸時轉向外部主機。
  -L,  --relative                  只跟蹤有關係的鏈接。
  -I,  --include-directories=LIST  允許目錄的列表。
  -X,  --exclude-directories=LIST  排除目錄的列表。
  -np, --no-parent                 不追溯至父目錄。
常用的命令展示
使用wget -O下載並以不同的文件名保存(-O:下載文件到對應目錄,並且修改文件名稱)	
wget -O wordpress.zip //www.minjieren.com/download.aspx?id=1080
使用wget -b後台下載
wget -b <a href="//www.minjieren.com/wordpress-3.1-zh_CN.zip">//www.minjieren.com/wordpress-3.1-zh_CN.zip</a>
備註: 你可以使用以下命令來察看下載進度:tail -f wget-log
利用-spider: 模擬下載,不會下載,只是會檢查是否網站是否好著
[root@localhost ~]# wget --spider  www.baidu.com    #不下載任何文件
sort

返回抽取文本操作

sort [options] file(s)
	 -r    按照降序排序
	 -R    隨機排序
	 -n    按照數值進行排序
	 -f    忽略(fold)字元串中的字元大小寫
	 -u    (獨特,unique)刪除輸出中的重複行
	 -t c  使用c做為欄位界定符
	 -k X  按照使用c分隔的X列來排序,能夠使用多次(默認按照第一列排序)
Example:
cat /etc/passwd | sort -t:rnk3      按照使用:分隔的第三列數字降序排序
uniq

返回抽取文本操作

uniq [OPTION]... [FILE]...  從輸入中刪除前後相接的重複的行,連續且完全相同方為重複
	 -c                     顯示每行重複出現的次數
	 -d                     僅顯示重複過的行
	 -u                     僅顯示不曾重複的行
常和 sort 一起配合使用
Example:
sort userlist.txt | uniq -c
diff

返回抽取文本操作

diff以逐行的方式,比較文本文件的異同處。如果指定要比較目錄,則diff會比較目錄中相同文件名的文件,但不會比較其中子目錄 。

diff 
     -a	                  將所有文件視為文本. 默認只會逐行比較文本文件
     -b	                  不檢查空格字元的不同
     -W	                  在使用-y參數時,指定欄寬
     -x	                  不比較選項中所指定的文件或目錄
     -X	                  您可以將文件或目錄類型存成文本文件,然後在=<文件>中指定此文本文件
     -y	                  以並列的方式顯示文件的異同之處
     --left-column	      在使用-y參數時,若兩個文件某一行內容相同,則僅在左側的欄位顯示該行內容
     --suppress-common-lines	在使用-y參數時,僅顯示不同之處
     -c,-C NUM,--context[=NUM]  output NUM (default 3) lines of copied context
     -u,-U NUM,--unified[=NUM]  output NUM (default 3) lines of unified context
                                「統一的(unified)」diff格式文件 ,最適用於修補程式文件
Example:
diff foo.conf foo2.conf   # 比較兩個文件之間的區別
5c5                       # 註明第5行有區別(改變)
< use_widgets = no
---
> use_widgets = yes

diff -u foo.conf foo2.conf > foo.patch
patch

返回抽取文本操作

patch     複製在其它文件中進行的改變(要謹慎使用)
      -b  自動備份改變了的文件
patch -b foo.conf foo.patch
grep
egrep
fgrep

返回正則表達式

返回抽取文本操作

grep: Global search REgular expression and Print out the line
作用:文本搜索工具,根據用戶指定的「模式」對目標文本逐行進行匹配檢查;列印匹配到的行
模式:由正則表達式字元及文本字元所編寫的過濾條件
grep [OPTIONS] PATTERN [FILE...]   對資訊進行過濾篩選
     --color=auto:                 對匹配到的文本著色顯示
   	 -m--max-count=NUM             匹配 NUM 次後停止
   	 -v                            顯示不符合匹配的行
   	 -i                            忽略字元大小寫
   	 -n                            顯示匹配的行號
   	 -c                            統計匹配的行數
   	 -o                            僅顯示匹配到的字元串,匹配成功一次顯示一行
   	 -d, --directories=ACTION      如何處理目錄:ACTION is 'read', 'recurse', or 'skip'
     -D, --devices=ACTION          如何處理設備、FIFO和套接字:ACTION is 'read' or 'skip'
     -r, --recursive               like --directories=recurse(recurse 遞歸)
     -R, --dereference-recursive   likewise,但遵循所有符號鏈接
   	 -q                            靜默模式,不輸出任何資訊
   	 -A, --after-context=NUM       列印匹配到的文本的後NUM行
   	 -B, --before-context=NUM      列印匹配到的文本的前NUM行
   	 -C, --context=NUM             列印匹配到的文本的前後各NUM行
     -NUM                          same as --context=NUM
   	 -e                            實現多個選項間的邏輯or關係
   	                               列如:grep –e 『cat 』 -e 『dog』 file
     -w                            匹配整個單詞
     -H, --with-filename           為每一匹配項列印文件名,顯示在行號的位置上
     -E/egrep                      使用ERE
     -F/fgrep                      不支援正則表達式
     -P                            使用 Perl 正則表達式
     -f, --file=FILE               根據模版 FILE 處理
Example:
grep root /etc/passwd
grep "$USER" /etc/passwd
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd
1、顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩種方法)
cat /proc/meminfo | grep '^[sS]'  # 匹配開頭[sS]任意單個字元
cat /proc/meminfo | grep '^[s\|S]'  # 匹配開頭s或者S
grep '^s\|^S' /proc/meminfo   # 匹配開頭s或者開頭S
grep -i '^s' /proc/meminfo  # 匹配開頭s忽略大小寫
2、顯示/etc/passwd文件中不以/bin/bash結尾的行
cat /etc/passwd | grep -v '/bin/bash$'  # 不顯示匹配結尾前'/bin/bash'的行
3、顯示用戶 root 默認的 shell 程式
cat /etc/passwd | grep -w '^root' | grep -o '[^/]\+$'  
# -w 匹配全單詞;-o 只顯示匹配的字元串;[^/] 排除/;\+ 至少一次;
# 從結尾向前匹配:至少執行排除'/'一次後停止匹配
4、找出/etc/passwd 中的兩位或三位數
grep "\b[0-9]\{2,3\}\b" /etc/passwd  # \b 詞首錨定,\b 詞尾錨定
grep '\<[0-9]\{2,3\}\>' /etc/passwd  # \< 詞首錨定,\> 詞尾錨定
grep -w '[0-9]\{2,3\}' /etc/passwd
egrep -w '[0-9]{2,3}' /etc/passwd
5、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白字元開頭的且後面有非空白字元的行
grep '^[[:space:]]\+[^[:graph:]]' /etc/grub2.cfg
egrep '^[[:space:]]+[^[:graph:]]' /etc/grub2.cfg
6、找出「netstat -tan」命令結果中以LISTEN後跟任意多個空白字元結尾的行
netstat -tan | grep 'LISTEN[[:space:]]*$'
7、顯示CentOS7上所有UID小於1000以內的用戶名和UID
cut -d: -f 1,3 /etc/passwd | grep '\<[0-9]\{0,3\}\>'  # 匹配任意數字至少0個字元,至多3個字元
cut -d: -f 1,3 /etc/passwd | grep '\b[0-9]\{0,3\}\b'
cut -d: -f 1,3 /etc/passwd | grep -w '[0-9]\{0,3\}'
cut -d: -f 1,3 /etc/passwd | egrep -w '[0-9]{0,3}'
cut -d: -f 1,3 /etc/passwd | tr : ' ' | awk '{if($2<1000)print $1,$2}'| tr ' ' :
8、添加用戶bash、testbash、basher、sh、nologin(其shell為/sbin/nologin),找出/etc/passwd用戶名和shell同名的行
useradd bash && useradd testbash && useradd basher && useradd sh && useradd -s /sbin/nologin nologin
cat /etc/passwd | grep '\(^[a-zA-Z0-9]\+\>\).*\<\1$'
cat /etc/passwd | egrep '(^[[:alnum:]]+\>).*\<\1$'  
# 匹配以任意數字或字母開頭的單詞至少一次,放入內置變數 \1,再匹配任意字元任意次直到結尾前一個單詞是 \1
9、利用df和grep,取出磁碟各分區利用率,並從大到小排序
df | grep ^/dev | grep -o '[0-9]\{1,\}%'|sort -nr  # -o 只顯示匹配的字元串
df | grep ^/dev | egrep -o '[0-9]{1,}%'|sort -nr  # {1,} 匹配前一個字元至少1次
1、顯示三個用戶root、mage、wang的UID和默認shell
cut -d: -f1,3,7 /etc/passwd | grep -w '^\(root\|mage\|wang\)'
cut -d: -f1,3,7 /etc/passwd | egrep -w '^(root|mage|wang)'
2、找出/etc/rc.d/init.d/functions文件中行首為某單詞(包括下劃線)後面跟一個小括弧的行
egrep -o '^.*\(\)' /etc/rc.d/init.d/functions
grep -o '^[a-zA-Z0-9_].*()' /etc/rc.d/init.d/functions
grep -o '^[[:alnum:]_].*()' /etc/rc.d/init.d/functions
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
echo /etc/rc.d/init.d/functions | egrep -o '[^/]+$'
# 從最後一個字元開始向前匹配,排除/至少一次後停止
echo /etc/rc.d/init.d/functions | egrep -ow '[[:alnum:]]+$'
# 從最後一個字元開始向前匹配,匹配到任意字母或數字組成的單詞至少一次後停止,基名不能有特殊字元
4、使用egrep取出上面路徑的目錄名
echo /etc/rc.d/init.d/functions | egrep -o  '.*/\<'  
# 匹配任意字元任意次數到最後一個/單詞結尾停止
echo /etc/rc.d/init.d/functions | egrep -o '/.*/'  # 匹配絕對路徑目錄名
5、統計last命令中以root登錄的每個主機IP地址登錄次數
last | grep '^root' | awk '{print $1,$3}'| grep -v '[a-z]$'| sort | uniq -c
# 篩選root登陸;篩選只顯示用戶和主機IP;排除沒有主機IP的行(不顯示以任意字母結尾的行);排序;統計
last | grep ^root | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | sort | uniq -c
# 篩選root登陸;篩選只顯示主機IP;排序;統計
6、利用擴展正則表達式分別表示0-9、10-99、100-199、200-249、250-255
echo {1..255} | egrep -wo '[0-9]' | tr "\n" " " ; echo
echo {1..255} | egrep -wo '[1-9][0-9]' | tr "\n" " " ; echo
echo {1..255} | egrep -wo '1[0-9]{2}' | tr "\n" " " ; echo
echo {1..255} | egrep -wo '2[0-4][0-9]' | tr "\n" " " ; echo
echo {1..255} | egrep -wo '25[0-5]' | tr "\n" " " ; echo
7、顯示ifconfig命令結果中所有IPv4地址
ifconfig | egrep -o "\<(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4]0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>"
8、將此字元串:welcome to magedu linux 中的每個字元去重並排序,重複次數多的排到前面
echo "welcome to magedu linux" | tr -d " " | grep -o "." | sort | uniq -c | sort -nr
# 刪除空格;拆分字元到每行(只顯示匹配到的任意字元的行);排序;去重;按第一行數字降序排序
xargs

返回抽取文本操作

xargs可以將管道或標準輸入(stdin)數據轉換成命令行參數(多行參數多次執行命令),也能夠從文件的輸出中讀取數據。
也可以將單行或多行文本輸入轉換為其他格式,例如多行變單行,單行變多行。
默認的命令是 echo,這意味著通過管道傳遞給 xargs 的輸入將會包含換行和空白,不過通過 xargs 的處理,換行和空白將被空格取代。

xargs [OPTION]... COMMAND INITIAL-ARGS...
      -0, --null                   項之間用null分隔,而不是空格;禁用引號和反斜杠處理
      -a, --arg-file=FILE          從文件讀取參數,而不是標準輸入
      -d, --delimiter=CHARACTER    輸入項用字元分隔,而不是空格。禁用引號和反斜杠處理
      -E END                       如果輸入出現 END,則忽略之後的輸入
      -e [END], --eof[=END]        指定 END 作為文件結尾字元串,=END Equivalent to -E
      -i,-I,--replace=[R]          傳參到指定位置{}
      -L,-l, --max-lines=MAX-LINES 從標準輸入一次讀取 MAX-LINES 行送給 command 命令
      -l                           每個命令行最多使用一個非空白輸入行
      -n, --max-args=MAX-ARGS      每個命令行最多使用 MAX-ARGS 個參數(default:全部)
      -P, --max-procs=MAX-PROCS    一次運行的最大進程數,默認是1,0為儘可能多。
      -p, --interactive            運行命令前提示
      --process-slot-var=VAR       在子進程中設置環境變數 VAR
      -r, --no-run-if-empty        如果沒有參數,則不運行命令。
                                   若不提供此選項,則命令將至少運行一次
      -s, --max-chars=MAX-CHARS    限制 command 的最大字元數為 MAX-CHARS
      --show-limits                顯示命令行長度的限制
      -t, --verbose                先列印命令,然後再執行
      -x                           exit,主要是配合-s使用
結合 find 使用可以避免問題:
用 rm 刪除太多的文件時候,可能得到一個錯誤資訊:/bin/rm Argument list too long. 
find -type f -name 「*.txt」 -print0 | xargs -0 rm

解決空格和換行符的錯誤:-print0  在find的每一個結果之後加一個NULL字元
                        xargs -0 將NULL作為分隔符
find -type f -name "*.php" -print0|xargs -0 wc -l   統計當前目錄中所有 .php文件的行數

查找當前目錄中所有的 jpg 文件,並且壓縮它們到images.tar.gz:
find -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

ls *.jpg | xargs -n1 -I {} cp {} /data/images    複製所有圖片文件到 /data/images 目錄下
cat url-list.txt | xargs wget -c                 下載url-list.txt中所有鏈接
Examples:
ls | xargs rm                          刪除當前目錄所有文件
find /bin/ -perm /7000 | xargs ll      查找有至少一個特殊許可權的文件
find /bin/ -perm -7000 | xargs ll      查找有全部特殊許可權的文件

1 作替換工具,讀取輸入數據重新格式化後輸出。

定義一個測試文件,內有多行文本數據:
cat test.txt

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

多行輸入單行輸出:
cat test.txt | xargs

a b c d e f g h i j k l m n o p q r s t u v w x y z

-n 多行輸出:
cat test.txt | xargs -n3

a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z

xargs -n1 < 文件   將文件按照分組顯示
a
b
c
d
e
f
g

-d
echo "nameXnameXnameXname" | xargs -dX
name name name name

-d -n
echo "nameXnameXnameXname" | xargs -dX -n2
name name
name name

2 建立測試環境----------
sk.sh文件內容:
#!/bin/bash
#sk.sh命令內容,列印出所有參數。
echo $*

chmod +x sk.sh

arg.txt文件內容:
aaa
bbb
ccc

-I,xargs的每項,一般是一行一行賦值給 {},{}表示xargs每行傳遞的參數
cat arg.txt | xargs -I {} ./sk.sh qianzhun {} houzhui
qianzhun aaa houzhui
qianzhun bbb houzhui
qianzhun ccc houzhui
compress

返迴文件操作

yum -y install ncompress
compress/uncompress: .Z
compress [-dfvcVr] [-b maxbits] [file ...]
         -d 解壓縮,相當於uncompress
         -c 結果輸出至標準輸出,不刪除原文件
         -v 顯示詳情
Examples:
uncompress file.Z   解壓縮
zcat file.Z         不顯式解壓縮的前提下查看文本文件內容
Examples:
zcat file.Z >file
gzip

返迴文件操作

gzip/gunzip: .gz
gzip [OPTION]... FILE ...
     -d 解壓縮,相當於gunzip
     -c 結果輸出至標準輸出,保留原文件不改變
     -# 指定壓縮比,#取值為1-9,值越大壓縮比越大
gunzip file.gz       解壓縮
zcat file.gz         不顯式解壓縮的前提下查看文本文件內容

Examples:
gzip -c messages > messages.gz ; cat messages | gzip > m.gz      壓縮
gzip -c -d messages.gz > messages                                解壓縮
zcat messages.gz > messages            不顯式解壓縮的前提下查看文本文件內容
bzip2

返迴文件操作

bzip2/bunzip2: .bz2
bzip2 [OPTION]... FILE ...
      -c 結果輸出至標準輸出
      -k keep, 保留原文件
      -d 解壓縮
      -# 1-9,壓縮比,默認為9
bunzip2 file.bz2  解壓縮
bzcat file.bz2    不顯式解壓縮的前提下查看文本文件內容

Examples:
bzip2 -c messages > messages.bz2 ; cat messages | bzip2 > m.bz2    壓縮
bzip2 -c -d messages.bz2 > messages ; bunzip2 -k messages.bz2    解壓縮
bzcat messages.bz2 > messages            不顯式解壓縮的前提下查看文本文件內容
xz

返迴文件操作

xz/unxz: .xz
xz [OPTION]... FILE ...
   -k keep, 保留原文件
   -d 解壓縮
   -# 壓縮比,取值1-9,默認為6
unxz file.xz    解壓縮
xzcat file.xz   不顯式解壓縮的前提下查看文本文件內容

Examples:
xz -c messages > messages.xz ; cat messages | unxz > m.xz    壓縮
xz -c -d messages.xz > messages ; unxz -k messages.xz       解壓縮
xzcat messages.xz > messages       不顯式解壓縮的前提下查看文本文件內容
zip

返迴文件操作

zip/unzip

打包壓縮
zip –r /backup/sysconfig /etc/sysconfig/
cat /var/log/messages | zip messages -

解包解壓縮
unzip sysconfig.zip
unzip -p message > message
cpio

返迴文件操作

通過重定向的方式將文件進行打包備份,還原恢復的工具,它可以解壓以「.cpio」或者「.tar」結尾的文件

cpio [OPTION...] [目標目錄]      歸檔文件及從包中提取文件
     -i, --extract              從包中提取文件 (運行 copy-in 模式)
     -o, --create               創建包 (運行 copy-out 模式)
     -p, --pass-through         運行 copy-pass 模式
     -t, --list                 列印輸入內容列表
     --block-size=BLOCK-SIZE    設置 I/O 塊大小為 BLOCK-SIZE * 512位元組
     -B                         設置 I/O 塊大小為 5120 位元組
     -c                         same as "-H newc"
     -C, --io-size=NUMBER       設置 I/O 塊大小為指定的 NUMBER 位元組
     -f, --nonmatching          僅拷貝不匹配任意給定的模式的文件
     -F, --file=[[用戶@]主機:]文件名
                                用「文件名」來替代標準輸入和輸出。
								如果文件在遠程機器上,則可指定用戶和主機
     -H, --format=格式          使用指定的包格式: newc 新的(SVR4)攜帶型格式
	                                           odc  舊的可移植(ASCII)格式
     -M, --message=STRING       當到達備份介質的尾部的時候列印 STRING
     -n, --numeric-uid-gid      在內容列表的詳表中,顯示數字的 UID 和 GID
         --quiet                不列印已拷貝的塊數
         --rsh-command=COMMAND  用 COMMAND 替代 rsh
     -v, --verbose              詳細列出已處理的文件名稱
     -V, --dot                  每處理一個文件就列印一個「.」
     -W, --warning=FLAG         控制警告資訊顯示。當前 FLAG 可為「none」、「truncate」或「all」。
	                            多個選項可以累積。
     
copy-in 模式選項:
     -b, --swap                 same as "-sS"
	                            交換數據中每個字的兩個半字以及每個半字中的兩個位元組
     -r, --rename               互動式重命名文件
     -s, --swap-bytes           交換文件中每個半字中的兩個位元組
     -S, --swap-halfwords       交換文件中每個字(4個位元組)中的兩個半字
         --to-stdout            提取文件到標準輸出
     -E, --pattern-file=FILE    從 FILE 中讀取指定提取列表的文件名的模式
         --only-verify-crc      在讀取CRC格式的存檔文件時,
		                        只需驗證歸檔文件中每個文件的校驗和,而不是實際提取文件

copy-out 模式選項:
     -A, --append               追加到已存在的歸檔文件。
         --device-independent, --reproducible
                                創建獨立於設備(可複製)的存檔
         --ignore-devno         不存儲設備號
     -O [[用戶@]主機:]文件名      指定的歸檔文件名而不是標準輸出。
	                            如果文件在遠程機器上,則可指定用戶和主機
         --renumber-inodes      重新編號索引節點

copy-pass 模式選項:
     -l, --link                 在可行時鏈接文件而不是拷貝文件

copy-in 和 copy-out 模式選項:
     --absolute-filenames      文件名不去除文件系統前綴
     --no-absolute-filenames   相對於當前目錄來創建所有文件

copy-out 和 copy-pass 模式選項:
     -0, --null                 文件名列表分隔符使用 NULL
     -a, --reset-access-time    文件讀取後恢復文件的訪問時間
     -I [[用戶@]主機:]文件名      從指定的歸文件讀入而不是從標準輸入讀入。
                                如果文件在遠程機器上,則可指定用戶和主機
     -L, --dereference          跟隨符號鏈接
                                (拷貝符號鏈接指向的文件而不是拷貝鏈接本身)
     -R, --owner=[用戶][:.][組]
                                設置所有文件的所有權資訊到指定的用戶和/或組

copy-in 和 copy-pass 模式選項:
     -d, --make-directories     需要時創建目錄
     -m, --preserve-modification-time
                                創建文件時保留以前文件的修改時間
         --no-preserve-owner    不改變文件的所有權
         --sparse               把含有大塊零的文件以稀疏文件方式寫出
     -u, --unconditional        無條件覆蓋所有文件

Examples:
find /etc -print | cpio -ov >bak.cpio  備份/etc 到 bak.cpio
find /data | cpio -oA -F bak.cpio      追加/data 到 bak.cpio
cpio –tv < bak.cpio                    內容預覽
cpio –idv < bak.cpio                   解包文件
cpio -o < name-list [> archive]        歸檔 name-list 中的文件到 archive
cpio -i [< archive]                    從 archive 中提取文件
cpio -p destination-directory < name-list   
拷貝 name-list 中的文件到 destination-directory
tar

返迴文件操作

tar [選項...] [-f] [設備] [本地文件] 為文件和目錄創建檔案
打包(tar命令)是指將一大堆文件或目錄變成一個總的歸檔(.tar)文件;
壓縮(gzip bzip2命令)則是將一個大的文件通過一些壓縮演算法變成一個小文件。
歸檔:
    -A, --catenate,--concatenate  新增文件到已存在的歸檔;
    -c, --create                  創建一個新歸檔
    -d, --diff,--compare          找出歸檔和文件系統的差異
        --delete                  從歸檔(非磁帶!)中刪除
	-r, --append                  追加文件至歸檔結尾
    -t, --list                    列出歸檔內容
        --test-label              測試歸檔卷標並退出
	-u, --update                  僅追加比歸檔中副本更新的文件
    -x, --extract,--get           從歸檔中解出文件
壓縮:                             
    -a, --auto-compress           使用歸檔後綴名來決定壓縮程式
	-j, --bzip2                   通過 bzip2 過濾歸檔
	-J, --xz                      通過 xz 過濾歸檔
        --lzip                    通過 lzip 過濾歸檔
        --lzma                    通過 lzma 過濾歸檔
        --lzop
        --no-auto-compress        不使用歸檔後綴名來決定壓縮程式
	-z, --gzip,--gunzip,--ungzip  通過 gzip 過濾歸檔
    -Z, --compress,--uncompress   通過 compress 過濾歸檔 
本地文件選擇:
    -C, --directory=DIR           改變至目錄 DIR
	    --exclude=PATTERN         排除匹配 PATTERN 的文件
	-h, --dereference             遵循符號鏈接;歸檔並轉儲它們指向的文件
        --hard-dereference        跟蹤硬鏈接;歸檔並轉儲它們引用的文件
    -N, --newer=DATE-OR-FILE,--after-date=DATE-OR-FILE
                                  只保存比 DATE-OR-FILE 更新的文件
        --one-file-system         創建歸檔時保存在本地文件系統中
	-P, --absolute-names          文件名使用絕對名稱,不要從文件名中清除引導符『/』
	-X, --exclude-from=FILE       排除 FILE 中列出的模式串
設備選擇:
    -f, --file=ARCHIVE            使用歸檔文件或 ARCHIVE 設備,指定壓縮文件路徑
可選: 
	-B, --read-full-records       讀取時重新分塊(只對 4.2BSD 管道有效)
    -v, --verbose                 顯示執行詳細過程
    -l                            只要不是所有鏈接都被輸出就列印資訊
    -k                            解壓縮時不替換現有文件
    -m, --touch                   不提取文件修改時間
    -w, --interactive,--confirmation
                                  每次操作都要求確認
    -p, --preserve-permissions,--same-permissions
                                  解壓文件許可權資訊(默認只為 root 服務)
	    --same-owner              嘗試解壓時保持所有者關係一致(root 默認此項)
    -O                            將文件提取到標準輸出

-T 選項指定輸入文件列表 -X 選項指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist -X /root/excludefilelist

tar -cf all.tar *.jpg             將所有.jpg的文件打成一個名為all.tar的包
tar -cpvf /PATH/FILE.tar FILE...  創建歸檔,保留許可權
tar -rf /PATH/FILE.tar FILE...    追加文件至歸檔: 註:不支援對壓縮文件追加
tar -uf all.tar logo.gif          更新原來all.tar包中logo.gif文件
tar -tf all.tar                   列出all.tar包中所有文件
tar -xf all.tar                   解出all.tar包中所有文件
tar -xf /PATH/FILE.tar -C /PATH/  解出all.tar包中所有文件到/PATH/下

壓縮
tar –cvf jpg.tar *.jpg       將目錄里所有jpg文件打包成tar.jpg
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 -zxvf file.tar.gz        解壓tar.gz
tar –Zxvf file.tar.Z         解壓tar.Z
tar -xjvf file.tar.bz2       解壓tar.bz2
unrar e file.rar             解壓rar
unzip file.zip               解壓zip
gzip -d file.gz              解壓gz   或者用gunzip
bzip2 -d file.bz2            解壓bz2  或者用bunzip2 
uncompress file.Z            解壓Z

tar xzf redis-6.0.4.tar.gz
cd redis-6.0.4
./configure --with-internal-glib
make & install make
yum

返迴文件系統結構

yum
    --nogpgcheck              禁止進行gpg check
    -y                        自動回答為「yes」
    -q                        靜默模式
    --downloadonly            只下載不安裝
    --downloaddir             指定rpm包的下載路徑
    --disablerepo=repoidglob  臨時禁用此處指定的repo
    --enablerepo=repoidglob   臨時啟用此處指定的repo
    --noplugins               禁用所有插件
List of Commands:
	repolist [all|enabled|disabled]    
	                        顯示配置的軟體存儲庫,yum源
    provides                查找提供給定值的包
	install                 在系統上安裝一個或多個軟體包
	reinstall               重新安裝程式包
    list {available|installed|updates}  
	                        列出一個或多個包
    remove                  卸載軟體
	erase                   從系統中刪除一個或多個程式包
	check                   檢查rpmdb中是否存在問題
    check-update            檢查可用的包更新
    clean [ packages | metadata | expire-cache | rpmdb | plugins | all ]
                            刪除快取數據
	makecache               生成元數據快取
	downgrade               降級包
	update                  更新系統上的一個或多個包
    update-minimal          「最新」包匹配升級,該匹配會修復影響系統的問題
    updateinfo              作用於存儲庫更新資訊
    upgrade                 更新包考慮過時
	info                    顯示有關包或包組的詳細資訊
	search                  搜索給定字元串的包詳細資訊
	deplist                 列出包的依賴項
	history [info|list|packages-list|packages-info|summary|addon-info|redo|undo|
    rollback|new|sync|stats]顯示或使用事務歷史記錄
	load-transaction        從文件名載入保存的事務
	groups                  顯示或使用包組資訊
    distribution-synchronization 將已安裝的軟體包同步到最新的可用版本
    fssnapshot              創建文件系統快照,或列出/刪除當前快照
    shell                   運行互動式yum shell

Example:
yum install -y 軟體名稱 			 直接安裝軟體
yum groups install -y 軟體包組名稱    直接安裝軟體包組
yum groups list       			    查看哪些軟體包組可以安裝
yum provides COMMAND                查找提供命令的軟體包
yum clean all                       清除快取目錄下的軟體包及舊的headers
yum update 軟體名稱                  更新軟體
yum remove 軟體名稱                  卸載軟體
yum groups remove 軟體包組名稱        卸載軟體包組
yum check-update                    檢查可用的包更新
yum deplist 軟體名稱                 列出包的依賴項
yum search 軟體名稱或者關鍵字          查找相關功能的包
yum list 軟體名稱            		 查看哪些軟體可以安裝
         updates                    列出所有可更新的軟體包
		 installed                  列出所有已安裝的軟體包
		 extras                     列出所有已安裝但不在Yum Repository 內的軟體包
yum info 軟體名稱                    列出所有軟體包的資訊
		 updates                    列出所有可更新的軟體包資訊
		 installed                  列出所有已安裝的軟體包資訊
		 extras                     列出所有已安裝但不在Yum Repository 內的軟體包資訊
yum install --downloadonly --downloaddir=/local_basic/ tree     只下載不安裝包及其依賴
yum localinstall 包名全稱(絕對路徑) ; rpm -ivh 包名全稱(絕對路徑)    安裝rpm包
/etc/yum.conf:為所有倉庫提供公共配置
[main]
cachedir=/var/cache/yum/$basearch/$releasever
#cachedir yum快取的目錄,存儲rpm包和資料庫
keepcache=0
#是否保留快取,0表示安裝後刪除安裝包 1表示安裝後保留安裝包
debuglevel=2
#排錯等級,默認2,只記錄安裝和刪除的記錄
logfile=/var/log/yum.log
#日誌目錄
exactarch=1
#exactarch 是否升級與你安裝的cpu體系一樣的包
obsoletes=1
gpgcheck=1
#gpgcheck 是否進行gpg校驗,0不校驗,1校驗
plugins=1
installonly_limit=5
bugtracker_url=//bugs.centos.org/set_project.php?project_id=19&ref=//bugs.centos.org/bug_report_page.php?category=yum
distroverpkg=centos-release
/etc/yum.repos.d/*.repo:為倉庫的指向提供配置
[repositoryID]                      # repo id,必須獨一無二,為了區分不同的倉庫
name=Some name for this repository  # repo name,可以使用變數$releasever等
baseurl=url://path/to/repository/   # 倉庫的實際存放目錄或鏈接
enabled={1|0}                       # 是否啟用這個yum倉庫地址,0表示不啟動,1表示啟動
gpgcheck={1|0}                      # 是否進行gpg校驗,0不校驗,1校驗

gpgkey=URL                          # 數字證書的公鑰所在位置
enablegroups={1|0}
failovermethod={roundrobin|priority}
				roundrobin:意為隨機挑選,默認值
				priority:按順序訪問
cost= 默認為1000

repo配置文件中可用的變數:
$releasever: 當前OS的發行版的主版本號
$arch: 平台,i386,i486,i586,x86_64等
$basearch:基礎平台;i386, x86_64
$YUM0-$YUM9:自定義變數
禁用yum加速插件:Loaded plugins: fastestmirror
vi /etc/yum/pluginconf.d/fastestmirror.conf
[main]
enabled=1
改為
enabled=0
阿里雲repo文件://mirrors.aliyun.com/repo/
清華大學CentOS系統源://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
阿里雲CentOS系統源://mirrors.aliyun.com/centos/$releasever/os/x86_64/
阿里雲EPEL源://mirrors.aliyun.com/epel/$releasever/x86_64
阿里巴巴開源軟體://opsx.alibaba.com/

新建倉庫 172.16.0.1_cobbler_ks_mirror_CentOS-X-x86_64_.repo
yum-config-manager --add-repo= //172.16.0.1/cobbler/ks_mirror/7/
yum-config-manager --disable 「倉庫名"  # 禁用倉庫
yum-config-manager --enable 「倉庫名」 # 啟用倉庫
掛載光碟
mount /dev/cdrom /mnt/cdrom
創建配置文件
[CentOS7]
name=
baseurl=
gpgcheck=
enabled=
創建yum倉庫:
createrepo [options] <directory>
yum -y install yum-utils
yumdownloader
              --destdir 指定下載的軟體包存放路徑
              --resolve 解決依賴關係並下載所需的包
              
Example:
yumdownloader --destdir=/tmp --resolve httpd 只下載httpd包及其依賴到/tmp不安裝
reposync       倉庫同步工具
         -r    指定已經本地已經配置的 yum 倉庫的 repo 源名稱
         -p    指定下載的路徑
         
Example:
reposync -p /opt/local_sync           同步所有遠端yum倉庫到本地目錄
reposync -np /opt/local_sync          更新rpm包
reposync -r epel -p /local_epel       將遠端yum倉庫裡面的包全部下載到本地
yum -y install createrepo 
createrepo                             編輯yum庫工具
           -u, --baseurl <url>         指定Base URL的地址
           -o, --outputdir <url>       指定元數據的輸出位置
           -x, --excludes <packages>   指定在形成元數據時需要排除的包
           -i, --pkglist <filename>    指定一個文件,該文件內的包資訊將被包含在即將生成的元數據中,格式為每個包資訊獨佔一行,不含通配符、正則,以及範圍表達式。
           -n, --includepkg       通過命令行指定要納入本地庫中的包資訊,需要提供URL或本地路徑。
           -q, --quiet                 安靜模式執行操作,不輸出任何資訊。
           -g, --groupfile <groupfile> 指定本地軟體倉庫的組劃分,範例如下:
createrepo -g comps.xml /path/to/rpms  注意:組文件需要和rpm包放置於同一路徑下。
           -v, --verbose               輸出詳細資訊。
           -c, --cachedir <path>       指定一個目錄,用作存放軟體倉庫中軟體包的校驗和資訊。當createrepo在未發生明顯改變的相同倉庫文件上持續多次運行時,指定cachedir會明顯提高其性能。
           --update                    如果元數據已經存在,且軟體倉庫中只有部分軟體發生了改變或增減,則可用update參數直接對原有元數據進行升級,效率比重新分析rpm包依賴並生成新的元數據要高很多。
           -p, --pretty                以整潔的格式輸出xml文件。
           -d, --database              該選項指定使用SQLite來存儲生成的元數據,默認項。

Example:
createrepo -po /opt/local_sync/base/ /opt/local_sync/base/  創建索引
createrepo --update /opt/local_sync/base                    更新源數據
yum -y install yum-plugin-downloadonly
yum -y install yum-plugin-priorities
yum源配置文件(/etc/yum.repos.d/CentOS-Base.repo)新增配置項
priority=n
n值越小越優先
編譯安裝
1、./configure
               --prefix=/PATH:指定默認安裝位置,默認為/usr/local/
               --sysconfdir=/PATH:配置文件安裝位置
               System types:支援交叉編譯
    Optional Features: 可選特性
                      --disable-FEATURE
                      --enable-FEATURE[=ARG]
    Optional Packages: 可選包
                      --with-PACKAGE[=ARG] 依賴包
                      --without-PACKAGE 禁用依賴關係
注意:通常被編譯操作依賴的程式包,需要安裝此程式包的「開發」組件,其包名一般類似於name-devel-VERSION

(1) 通過選項傳遞參數,指定啟用特性、安裝路徑等;
執行時會參考用戶的指定以及Makefile.in文件生成Makefile
(2) 檢查依賴到的外部環境,如依賴的軟體包
c/c++編譯器: gcc (GNU C Complier)
glibc:標準庫
2、make 根據Makefile文件,構建應用程式
3、make install 複製文件到相應路徑

安裝後配置:
(1) 二進位程式目錄導入至PATH環境變數中
vi /etc/profile.d/NAME.sh
export PATH=/PATH/TO/BIN:$PATH
(2) 導入幫助手冊
vi /etc/man.config|man_db.conf
添加一個MANPATH 

開發工具:
 autoconf: 生成configure腳本
 automake:生成Makefile.in
 
注意:安裝前查看INSTALL,README

官方自建站點:
 apache.org (ASF:Apache Software Foundation)
 mariadb.org
程式碼託管:
 SourceForge.net
 Github.com
 code.google.com
 
yum install gcc gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree screen lsof tcpdump wget ntpdate net-tools iotop bc zip unzip nfs-utils
rpm

返迴文件系統結構

注意:

(1) 不要對內核做升級操作;Linux支援多內核版本並存,因此直接安裝新版本內核

(2) 如果原程式包的配置文件安裝後曾被修改,升級時,新版本提供的同一個配置文 件不會直接覆蓋老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)為後,保留

rpm                                管理軟體包程式
     --nodigest                    不校驗軟體包的摘要(完整性)
     --nosignature                 不驗證軟體包簽名(來源合法性)
	 -v, -vv                       提供更詳細的輸出
查詢/驗證包選項:                  
     -a, --all                     查詢/驗證所有包
     -f, --file                    查詢/驗證擁有 file 的包
     -g, --group                   查詢/驗證組中的包
     -p, --package                 查詢/驗證包文件
	 --whatrequires CAPABILITY     查詢/驗證需要依賴的軟體包(指定的CAPABILITY被哪個包所依賴)
     --whatprovides CAPABILITY     查詢/驗證提供依賴的軟體包(指定的CAPABILITY由哪個包所提供)
查詢(使用-q or --Query):          
     -c, --configfiles             列出所有配置文件
     -d, --docfiles                列出所有文檔文件
     -L, --licensefiles            列出所有許可文件
     -l, --list                    列出包中的文件
     -s, --state                   顯示列出的文件的狀態
     -R, --requires                列出此包所依賴的功能
驗證選項(使用-V或--Verify):     
     --nofiledigest                不驗證文件摘要
     --nofiles                     不驗證包中的文件
     --nodeps                      不驗證包依賴關係
     --noscript                    不執行驗證腳本
     S                             文件大小不同
     M                             模式不同(包括許可權和文件類型)
     5                             摘要(以前是MD5 sum)不同
     D                             設備主要/次要編號不匹配
     L                             readLink(2)路徑不匹配
     U                             用戶所有權不同
     G                             組所有權不同
     T                             mTime 不同
     P                             capabilities 不同
安裝/升級/擦除選項:               
     --allfiles                    安裝所有文件,甚至可能跳過配置
     --allmatches                  刪除所有與<package>匹配的包
                                  (如果<package>指定了多個包,通常會生成一個錯誤)
     -e, --erase=<package>+        擦除(卸載)包
	                               當包卸載時,對應的配置文件,以FILENAME.rpmsave形式保留
     --excludedocs                 不安裝文檔
     --excludepath=<path>          跳過具有前導組件的文件<path>
	 --force                       強制安裝,即使覆蓋其他包的文件也要安裝
     -F, --freshen=<packagefile>+  升級包(已安裝舊版則升級,否則不升級)
     -h, --hash                    顯示安裝進度,安裝包時散列列印哈希標記(與-v一起使用很好)
     -i, --install                 安裝包
	 --noscripts                   不執行軟體包腳本
	             %pre              安裝前腳本 --nopre
                 %post             安裝後腳本 --nopost
                 %preun            卸載前腳本 --nopreun
                 %postun           卸載後腳本 --nopostun
	 --oldpackage                  更新到軟體包的舊版本(--force 自動使用這一功能)
	 --replacefiles                忽略軟體包之間的衝突的文件
     --replacepkgs                 如果軟體包已經有了,重新安裝軟體包
     --test                        測試安裝,只是判斷下是否能安裝
     -U, --upgrade=<packagefile>+  升級包(已安裝舊版則升級,否則安裝包)
     --reinstall=<packagefile>+    重新安裝程式包
通過popt alias/exec實現的選項:
	 --scripts                     list install/erase scriptlets from package(s)
	 --provides                    list capabilities that this package provides
     --changelog                   list change logs for this package

/var/lib/rpm:rpm資料庫
rpm {--initdb|--rebuilddb}
initdb: 初始化, 如果資料庫不存在,則新建;否則不執行任何操作
rebuilddb:重建已安裝的包頭的資料庫索引目錄

校驗軟體包中的文件
rpm -K ( or --checksig) options file1.rpm ... fileN.rpm 
rpm -K|checksig 包名全稱      檢查包的完整性和簽名

導入所需要公鑰
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
rpm -qa "gpg-pubkey*"

Example:
rpm -ivh 包名全稱(絕對路徑)          安裝軟體包
rpm -evh 軟體包名                   卸載軟體包
rpm -Uvh 包名全稱(絕對路徑)          更新軟體包
rpm -qa 軟體包名                    查看所有安裝的軟體包,需要先安裝包
rpm -qi 軟體包名|包名全稱            查詢軟體安裝資訊,需要先安裝包
rpm -ql 軟體包名|包名全稱            查詢軟體包中所有文件列表,需要先安裝包
rpm -qc 軟體包名|包名全稱            查詢軟體包中所有配置文件,需要先安裝包
rpm -qd 軟體包名|包名全稱            查詢軟體包中所有文檔文件,需要先安裝包
或者
rpm -qf 命令文件絕對路徑             查詢擁有 file 的包,需要先安裝包
rpm -qf /bin/zsh
rpm -qif `which 程式名`            返回軟體包的有關資訊,需要先安裝包
rpm -qlf `which 程式名`            返回軟體包的文件列表,需要先安裝包
rpm -qcf `which 程式名`            返回軟體包中所有配置文件,需要先安裝包
rpm -qdf `which 程式名`            返回軟體包中所有文檔文件,需要先安裝包
rpm2cpio

返迴文件操作

rpm2cpio    從RPM包管理器(RPM)包中提取cpio存檔

Example:
rpm2cpio rpm-1.1-1.i386.rpm
rpm2cpio - < glint-1.0-1.i386.rpm
rpm2cpio 包文件|cpio –itv             預覽包內文件
rpm2cpio 包文件|cpio -dium 「*.conf」   釋放包內*.conf文件
openssl

返回操作用戶配置文件

openSSL是一個強大的安全套接字層密碼庫,囊括主要的密碼演算法、常用的密鑰和證書封裝管理功能及SSL協議,並提供豐富的應用程式供測試或其它目的使用。

openssl
        -in filename    指定要加密的文件存放路徑
        -out filename   指定加密後的文件存放路徑
        -salt           自動插入一個隨機數作為文件內容加密,默認選項
        -e              可以指明一種加密演算法,若不指的話將使用默認加密演算法
        -d              解密,若不指定則使用默認演算法,但一定要與加密時的演算法一致
        -a/-base64      使用-base64位編碼格式
Examples:
1.對稱加密:解密要與加密時的演算法一致
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] 
       [-a/-base64] [-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt]
       [-salt] [-nosalt] [-z] [-md][-p] [-P] [-bufsize number] [-nopad] [-debug] 
       [-none] [-engine id]
用DES3演算法的CBC模式加密文件plaintext.doc,加密結果輸出到文件ciphertext.bin:
openssl enc -e -des3 -salt -in plaintext.doc -out ciphertext.bin
用DES3演算法的CBC模式解密文件ciphertext.bin,加密結果輸出到文件plaintext.doc,提供的口令為trousers:
openssl enc -d -des3 -salt -in ciphertext.bin -out plaintext.doc -pass pass:trousers

2.單向加密:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] 
       [-binary] [-out filename] [-sign filename] [-keyform arg] [-passin arg] 
       [-verify filename] [-prverify filename] [-signature filename] [-hmac key]
       [file...]
       -out filename:將加密的內容保存到指定文件中
       [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一種加密演算法
使用MD5計算文件filename的哈西值,輸出到stdout:
openssl dgst -md5 filename ; md5sum filename  # 等同
使用SHA1演算法計算文件filename的哈西值,輸出到文件digest.txt:
openssl sha1 -out digest.txt filename

3.生成密碼
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] 
        [-quiet] [-table] {password}
        -1             使用md5加密演算法
        -salt string   加入隨機數,最多8位隨機數
        -in file       對輸入的文件內容進行加密
        -stdin        對標準輸入的內容進行加密
使用MD5生成文件filename的加鹽的密碼
openssl passwd -1 -in filename -salt 12345678
使用MD5生成字元串"hello world"的密碼
echo -n "hello world"|openssl passwd -1 -stdin

4.生成隨機數
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
        -out file   將生成的隨機數保存至指定文件中
        -base64     使用base64 編碼格式
        -hex        使用16進位編碼格式
生成8位隨機數
openssl rand -base64 6 ; openssl rand -hex 4

5.生成秘鑰對
首先需要先使用 genrsa 標準命令生成私鑰,然後再使用 rsa 標準命令從私鑰中提取公鑰。
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] 
        [-rand file(s)] [-engine id] [numbits]
        -out filename       將生成的私鑰保存至指定的文件中
        -des|-des3|-idea    不同的加密演算法
        numbits             指定生成私鑰的大小,默認是2048
只能自己讀寫 ; 產生1024位RSA私匙,用3DES加密它,口令為trousers,輸出到文件rsaprivatekey.pem:
(umask 077 ; openssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024)



openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg]
        [-out filename] [-passout arg] [-sgckey] [-des] [-des3] [-idea] [-text] 
        [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
		-in filename   指明私鑰文件
		-out filename  指明將提取出的公鑰保存至指定文件中 
		-pubout        根據私鑰提取出公鑰 
從私鑰rsaprivatekey.pem中提取公鑰rsapublickey.pem
openssl rsa -in rsaprivatekey.pem -out rsapublickey.pem -pubout

6.非對稱加密演算法DSA
DSA是先生成DSA的密鑰參數,然後根據密鑰參數生成DSA密鑰(包括公鑰),密鑰參數決定了DSA密鑰的長度,而且一個密鑰參數可以生成多對DSA密鑰對。

$ openssl dsaparam -
unknown option -
dsaparam [options] [bits] <infile >outfile
where options are
 -inform arg   input format - DER or PEM
 -outform arg  output format - DER or PEM
 -in arg       input file
 -out arg      output file
 -text         print as text
 -C            Output C code
 -noout        no output
 -genkey       generate a DSA key
 -rand         files to use for random number input
 -engine e     use engine e, possibly a hardware device.
 number        number of bits to use for generating private key

生成1024位DSA密鑰參數集,並輸出到文件dsaparam.pem:
openssl dsaparam -out dsaparam.pem 1024
明文查看DSA密鑰參數的值:
openssl dsaparam -in dsaparam.pem -text -noout
pem格式的密鑰參數轉為der格式:
openssl dsaparam -in dsaparam.pem -out dsaparam.der -outform der
der格式的密鑰參數轉為pem格式:
openssl dsaparam -in dsaparam.der -inform der -out dsaparam.pem
直接生成DSA密鑰(先生成參數,再利用參數生成密鑰,並輸出到文件DSA.pem):
openssl dsaparam -genkey -out DSA.pem 1024

$ openssl gendsa -
usage: gendsa [args] dsaparam-file
 -out file - output the key to 'file'
 -des      - encrypt the generated key with DES in cbc mode
 -des3     - encrypt the generated key with DES in ede cbc mode (168 bit key)
 -seed
                 encrypt PEM output with cbc seed
 -aes128, -aes192, -aes256
                 encrypt PEM output with cbc aes
 -camellia128, -camellia192, -camellia256
                 encrypt PEM output with cbc camellia
 -engine e - use engine e, possibly a hardware device.
 -rand file:file:...
           - load the file (or the files in the directory) into
             the random number generator
 dsaparam-file
           - a DSA parameter file as generated by the dsaparam command

相同密鑰參數,每次生成的密鑰不同
使用參數文件dsaparam.pem生成DSA私鑰匙,採用3DES加密後輸出到文件dsaprivatekey.pem:
openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem  

$ openssl dsa -
unknown option -
dsa [options] <infile >outfile
where options are
 -inform arg     input format - DER or PEM
 -outform arg    output format - DER or PEM
 -in arg         input file
 -passin arg     input file pass phrase source
 -out arg        output file
 -passout arg    output file pass phrase source
 -engine e       use engine e, possibly a hardware device.
 -des            encrypt PEM output with cbc des
 -des3           encrypt PEM output with ede cbc des using 168 bit key
 -aes128, -aes192, -aes256
                 encrypt PEM output with cbc aes
 -camellia128, -camellia192, -camellia256
                 encrypt PEM output with cbc camellia
 -seed           encrypt PEM output with cbc seed
 -text           print the key in text
 -noout          don't print key out
 -modulus        print the DSA public value

生成未加密的DSA密鑰
openssl dsaparam -out DSA.pem -genkey 1024
使用des3加密DSA密鑰
openssl dsa -in DSA.pem -out E_DSA.pem -des3 -passout pass:123456
解密DSA密鑰
openssl dsa -in E_DSA.pem -out DSA1.pem -passin pass:123456
從私鑰DSA.pem中提取公鑰pub.pem
openssl dsa -in DSA.pem -out pub.pem -pubout

7.創建CA和申請證書
使用openssl工具創建CA證書和申請證書時,需要先查看配置文件 /etc/pki/tls/openssl.cnf,因為配置文件中對證書的名稱和存放位置等相關資訊都做了定義
7.1 創建自簽證書
第一步:為 CA 提供所需的目錄及文件
mkdir -pv /etc/pki/CA/{certs,crl,newcerts,private}
touch /etc/pki/CA/{serial,index.txt}
第二步:指明證書的開始編號
echo 01 >> /etc/pki/CA/serial
第三步:生成私鑰,私鑰的文件名與存放位置要與配置文件中的設置相匹配
(umask 077 ; openssl genrsa -out /etc/pki/CA/private/cakey.pem 4096)
第四步:生成自簽證書,自簽證書的存放位置也要與配置文件中的設置相匹配,生成證書時需要填寫相應的資訊
openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650
openssl req
            -new   表示生成一個新證書籤署請求
            -x509  專用於CA生成自簽證書,如果不是自簽證書則不需要此項
            -key   生成請求時用到的私鑰文件
            -out   證書的保存路徑
            -days  證書的有效期限,單位是day(天),默認是365天
7.2 頒發證書
在需要使用證書的主機上生成證書請求,以 httpd 服務為例:
第一步:在需要使用證書的主機上生成私鑰,這個私鑰文件的位置可以隨意定
(umask 077 ; openssl genrsa -out httpd.pem 4096)
第二步:生成證書籤署請求,生成證書時需要填寫相應的資訊
openssl req -new -key httpd.pem -out httpd.csr -days 365
第三步:將請求通過可靠方式發送給 CA 主機
第四步:CA 伺服器拿到證書籤署請求文件後頒發證書,這一步是在 CA 伺服器上做的
openssl ca -in httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365
y
y
查看證書資訊的命令為:
openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject

7.3 吊銷證書
吊銷證書的步驟也是在CA伺服器上執行的,以剛才新建的 httpd.crt 證書為例:
第一步:在客戶機上獲取要吊銷證書的 serial 和 subject 資訊 
openssl crl -in httpd.crt -noout -serial -subject
第二步:根據客戶機提交的 serial 和 subject 資訊,對比其餘本機資料庫 index.txt 中存儲的是否一致 
第三步:執行吊銷操作
openssl ca -revoke /etc/pki/CA/newcerts/01.pem
第四步:生成吊銷證書的吊銷編號 (第一次吊銷證書時執行)
echo 01 > /etc/pki/CA/crlnumber
第五步:更新證書吊銷列表
openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl

查看 crl 文件命令:
openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
md5sum

返回操作用戶配置文件

用於生成和校驗文件的md5值。它會逐位對文件的內容進行校驗。只針對文件的內容,與文件名無關,也就是文件內容相同,其md5值相同。

若沒有文件選項,或者文件處為”-“,則從標準輸入讀取。
(注意: echo -n: 不列印換行符, 這樣算出的字元串的md5值才正確)

md5sum filename 或者 字元串 | md5sum
       -b	    以二進位模式讀取文件
       -t	    把輸入的文件作為文本文件看待
       -c	    從指定文件中讀取MD5值,對現存文件進行校驗
       -w	    檢查輸入的md5資訊有沒有非法行,若有則輸出相應資訊
       --status	校驗完成後,不生成錯誤或正確的提示資訊,可以通過命令的返回值來判斷
Examples:
echo -n "hello world"|md5sum  # 查看字元串的MD5值
find -type f | xargs md5sum > police.MD5  # 對當前目錄所有普通文件生成MD5校驗值並存入文件
md5dum -c police.MD5  # 校驗文件

hostname

返迴文件系統結構

hostname
         -a,--alias            alias names
         -A,--all-fqdns        all long host names (FQDNs)
         -b,--boot             set default hostname if none available (none available 無可用)
         -d,--domain           DNS domain name (domain 域)
         -f,--fqdn, --long     long host name (FQDN)
         -F,--file             read host name or NIS domain name from given file
         -i,--ip-address       addresses for the host name
         -I,--all-ip-addresses all addresses for the host
         -s,--short            short host name
         -y,--yp, --nis        NIS/YP domain name

hostnamectl

返迴文件系統結構

hostnamectl                 顯示當前主機系統基本資訊
            -H	            操作遠程主機
            status	        顯示當前主機名設置
            set-hostname	永久設置系統主機名
uname

返迴文件系統結構

uname       (same as -s)
      -a	顯示系統所有相關資訊
      -m	顯示電腦硬體架構
      -n	顯示主機名稱
      -r	顯示內核發行版本號
      -s	顯示內核名稱
      -v	顯示內核版本
      -p	顯示主機處理器類型
      -o	顯示作業系統名稱
      -i	顯示硬體平台
fsck

返迴文件系統結構

返回磁碟管理

fsck [參數] [文件系統] filesystem check 檢查並修復Linux文件系統
     -a	自動修復文件系統,不詢問任何問題
     -A	依照/etc/fstab配置文件的內容,檢查文件內所列的全部文件系統
     -N	不執行指令,僅列出實際執行會進行的動作
     -P	當搭配」-A」參數使用時,則會同時檢查所有的文件系統
     -r	採用互動模式,在執行修復時詢問問題,讓用戶得以確認並決定處理方式
     -R	當搭配」-A」參數使用時,則會略過/目錄的文件系統不予檢查
     -t	指定要檢查的文件系統類型
     -T	執行fsck指令時,不顯示標題資訊
     -V	顯示指令執行過程
blkid

返回磁碟管理

顯示可用塊設備資訊, 查詢設備上所採用文件系統類型。主要用來對系統的塊設備(包括交換分區)所使用的文件系統類型、LABEL、UUID等資訊進行查詢

blkid [參數]
      -s [UUID|TYPE|...]	 顯示指定資訊
      -g	                 收集blkid快取
      -i	                 收集有關i/o限制的資訊
      -p	                 低級超級塊探測(旁路快取)
      -o [list|device|...]   以列表方式查看詳細資訊|顯示所有設備
lsblk

返回磁碟管理

「list block」,即用於列出所有可用塊設備的資訊,而且還能顯示他們之間的依賴關係,但是它不會列出RAM盤的資訊。

lsblk命令包含在util-linux包中。

lsblk [參數]
      -a, --all            顯示所有設備。
      -b, --bytes          以bytes方式顯示設備大小。
      -d, --nodeps         不顯示 slaves 或 holders。
      -D, --discard        print discard capabilities。
      -e, --exclude <list> 排除設備 (default: RAM disks)。
      -f, --fs             顯示文件系統資訊。
      -i, --ascii          use ascii characters only。
      -m, --perms          顯示許可權資訊。
      -l, --list           使用列表格式顯示。
      -n, --noheadings     不顯示標題。
      -o, --output <list>  輸出列。
      -P, --pairs          使用key="value"格式顯示。
      -r, --raw            使用原始格式顯示。
      -t, --topology       顯示拓撲結構資訊。
      -s                   將設備和分區的組織關係逆轉過來顯示
      -S                   只列印SCSI設備的列表
列印欄目名稱如下:
NAME:這是塊設備名。
MAJ:MIN:本欄顯示主要和次要設備號。
RM:本欄顯示設備是否可移動設備。注意,在本例中設備sdb和sr0的RM值等於1,這說明他們是可移動設備。
SIZE:本欄列出設備的容量大小資訊。例如298.1G表明該設備大小為298.1GB,而1K表明該設備大小為1KB。
RO:該項表明設備是否為只讀。在本案例中,所有設備的RO值為0,表明他們不是只讀的。
TYPE:本欄顯示塊設備是否是磁碟或磁碟上的一個分區。在本例中,sda和sdb是磁碟,而sr0是只讀存儲(rom)。
MOUNTPOINT:本欄指出設備掛載的掛載點。
fdisk

返回磁碟管理

用於互動式管理磁碟分區,格式為「fdisk [磁碟名稱]」,它提供了集添加、刪除、轉換分區等功能於一身的「一站式分區服務」。

fdisk [options] <disk>    change partition table (partition 分區)
fdisk [options] -l <disk> 列出指定的外圍設備的分區表狀況
fdisk -s <partition>      輸出指定的分區大小,單位為區塊
      -b <size>           指定每個分區 size (512, 1024, 2048 or 4096)
      -c[=<mode>]         兼容的 mode: 'dos' or 'nondos' (default)
      -u[=<unit>]         搭配"-l"參數列表,會用分區數目取代柱面數目,來表示每個分區的起始地址
      -C <number>         指定柱面 number
      -H <number>         指定磁頭 number
      -S <number>         指定每條軌道的扇區 number          

Examples:
fdisk /dev/sdb  # 選擇要進行操作的磁碟
fdisk /ext      # 在當前磁碟上建立擴展分區
fdisk /actok    # 不檢查磁碟表面加快分區操作
fdisk /cmbr     # 重建主引導記錄

[root@localhost ~]# fdisk /dev/sdb
Command (m for help): n
Command action
   p   primary partition (1-4) # 主分區
   e   extended  # 擴展分區
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-208895, default 2048):  # 分區扇區起始位置
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +16M  #分區扇區結束位置
Partition 1 of type Linux and of size 16 MiB is set

Command (m for help): n
Partition type:
   p   primary (3 primary, 0 extended, 1 free)
   e   extended
Select (default e):  # 建立擴展分區
Selected partition 4
First sector (100352-208895, default 100352): 
Using default value 100352
Last sector, +sectors or +size{K,M,G} (100352-208895, default 208895): 
Using default value 208895
Partition 4 of type Extended and of size 53 MiB is set

Command (m for help): w  # 保存並退出

fdisk命令交互時的參數以及作用

參數 作用
m 查看全部可用的參數
n 添加新的分區
d 刪除某個分區資訊
l 列出所有可用的分區類型
t 改變某個分區的類型
p 查看分區表資訊
w 保存並退出
q 不保存直接退出
parted

返回磁碟管理

磁碟分區和分區大小調整工具,支援調整分區的大小。它沒有構建成處理與fdisk關聯的多種分區類型,但是,它可以處理最常見的分區格式,包括:ext2、ext3、fat16、fat32、NTFS、ReiserFS、JFS、XFS、UFS、HFS以及Linux交換分區。

硬碟容量小於2T時可以使用MBR分區表,使用fdisk命令。

硬碟容量大於2T時必須使用GPT分區表,使用parted命令。

parted [選項] [參數] [設備]
       -i   互動式模式
       -s   腳本模式,不提示用戶
       -l	列出所有塊設備上的分區布局

align-check TYPE N                       check partition N for TYPE(min|opt) alignment
help [COMMAND]                           print general help, or help on COMMAND
mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)
mkpart PART-TYPE [FS-TYPE] START END     make a partition
name NUMBER NAME                         name partition NUMBER as NAME
print [devices|free|list,all|NUMBER]     display the partition table, available devices, free space, all found partitions, or a particular partition
quit                                     exit program
rescue START END                         rescue a lost partition near START and END
resizepart NUMBER END                    resize partition NUMBER
rm NUMBER                                delete partition NUMBER
select DEVICE                            choose the device to edit
disk_set FLAG STATE                      change the FLAG on selected device
disk_toggle [FLAG]                       toggle the state of FLAG on selected device
set NUMBER FLAG STATE                    change the FLAG on partition NUMBER
toggle [NUMBER [FLAG]]                   toggle the state of FLAG on partition NUMBER
unit UNIT                                set the default unit to UNIT

Examples:
[root@localhost ~]# fdisk -l
Disk /dev/sda: 35.8 GB, 35862976512 bytes
255 heads, 63 sectors/track, 4360 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         144     1052257+  82  Linux swap
/dev/sda3             145        4360    33865020   83  Linux
Disk /dev/sdb: 2147 MB, 2147483648 bytes
255 heads, 63 sectors/track, 261 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk /dev/sdb doesn't contain a valid partition table  # 注意

# 互動式創建
[root@localhost ~]# parted /dev/sdb
GNU Parted Copyright (C) 1998 - 2004 free Software Foundation, Inc.
This program is free software, covered by the GNU General Public License.
This program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.  See the GNU General Public License for more details.
(parted)mktable gpt # 設置分區表為gpt
(parted)print  # 查看磁碟容量, 用於下一步分區
/dev/sdb的磁碟幾何結構:2048M
磁碟標籤類型:gpt
Minor   起始點     終止點    文件系統   名稱                 標誌

(parted)mkpart primary 0 2048  # 建立分區, 設置分區名稱, 起始和終止點(分區大小)
(parted)print
/dev/sdb的磁碟幾何結構:0.000-2048.000兆位元組
磁碟標籤類型:gpt
Minor   起始點     終止點    文件系統   名稱                 標誌
1       0M        2048M
(parted)quit

# 非互動式創建
[root@oldboyedu-lnb ~]# parted /dev/sdb mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you
want to continue?
Yes/No? yes                                                               
Information: You may need to update /etc/fstab.
[root@oldboyedu-lnb ~]# parted /dev/sdb mkpart one 0 50
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore 
Information: You may need to update /etc/fstab.
(parted) mklabel gpt
(parted) mkpart primary 0 100%
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel?
# 生成的分區沒有正確地對齊以實現最佳性能。忽略/取消?

正確對齊分區快速分步指南:
1.獲得你陣列的alignment參數(記得要將sdb替換為系統內核看到的設備名稱)
$ cat /sys/block/sdb/queue/optimal_io_size
1048576
$ cat /sys/block/sdb/queue/minimum_io_size
262144
$ cat /sys/block/sdb/alignment_offset
0
$ cat /sys/block/sdb/queue/physical_block_size
512

2.( optimal_io_size + alignment_offset ) / physical_block_size
在我的例子中是:(1048576 + 0) / 512 = 2048。

3.這個數值是分區起始的扇區:
mkpart primary 2048s 100%  # s 指單位:扇區

4.如果還是不行:  或者在創建GPT分區表後, 使用fdisk命令分區
(parted) align-check optimal /dev/sdb # 檢查分區 N 的類型(min|opt)對齊            
/dev/sdb aligned
partprobe

返回磁碟管理

用於重讀分區表,當出現刪除文件後,出現仍然佔用空間。可以partprobe在不重啟的情況下手動將分區資訊同步到內核。

partprobe [選項] [設備]
          -d:不更新內核;
          -s:顯示摘要和分區;
mkfs

返回磁碟管理

格式化存儲設備, 永久生效寫入 /etc/fstab

在磁碟分區上創建ext2、ext3、ext4、ms-dos、vfat文件系統,默認ext2。

mkfs只是Linux下可用的各種文件系統構建器(mkfs.fstype)的前端,在/sbin、/sbin/fs、/sbin/fs.d、/etc/fs、/etc/fs等多個目錄中搜索特定於文件系統的生成器(編譯時定義了精確的列表,但至少包含/sbin和/sbin/fs),最後在PATH環境變數中列出的目錄中搜索。

mkfs
     device	預備檢查的硬碟分區,例如:/dev/sda1
	 -V	詳細顯示模式
	 -t	<文件系統類型> 指定要建立何種文件系統,默認 ext2
	 -c	在製做檔案系統前,檢查該 partition 是否有壞軌
	 -l bad_blocks_file	將有壞軌的block資料加到 bad_blocks_file 裡面
	 block 	給定 block 的大小

[root@linuxprobe ~]# mkfs
mkfs        mkfs.cramfs   mkfs.ext3  mkfs.fat    mkfs.msdos  mkfs.xfs
mkfs.btrfs  mkfs.ext2     mkfs.ext4  mkfs.minix  mkfs.vfat 

Examples:
mkfs -t xfs /dev/sdb1 ; mkfs.xfs /dev/sdb1
mkfs.xfs -f /dev/sdb  # 強制格式化
mkswap

返回磁碟管理

將分區格式化為SWAP, 永久生效寫入 /etc/fstab

mkswap [參數]
       -c	建立交換區前,先檢查是否有損壞的區塊
       -f	在SPARC電腦上建立交換區,要加此參數
       -v0	建立舊式交換區,此為預設值
       -v1	建立新式交換區

[root@linuxprobe ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 5242876 KiB
no label, UUID=2972f9cb-17f0-4113-84c6-c64b97c40c75
swapon

返回磁碟管理

激活指定交換分區

swapon [參數]
	   -a	將/etc/fstab文件中所有設置為swap的設備,啟動為交換區
	   -p	制定交換區的優先順序
	   -s	顯示交換區的使用情況

swapon -s ; cat /proc/swaps  # 查看當前的swap空間

[root@linuxprobe ~]# mkswap /dev/sdb2
swapoff

返回磁碟管理

禁用指定交換分區, 實際上為swapon的符號連接

swapoff -a 	# 將/etc/fstab文件中所有設置為swap的設備關閉
swapoff /dev/sdb2
runlevel

返迴文件系統結構

runlevel    顯示系統先前與當前的運行級

讀取/var/run/utmp/文件或指定的其他文件,檢索其中最近的運行級記錄,顯示系統先前與當前的運行級。
如果運行級記錄中沒有先前的運行級,則使用字元N表示先前的運行級。
如果找不到運行級記錄,runlevel將會輸出一條表示不知道的錯誤資訊,然後退出,返回一個非0的結束狀態

CentOS 7.x

[11:22:33 root@oldboyedu-lnb ~]# ll /usr/lib/systemd/system/runlevel*.target
lrwxrwxrwx. 1 root root 15 Jul 12 15:45 /usr/lib/systemd/system/runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Jul 12 15:45 /usr/lib/systemd/system/runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Jul 12 15:45 /usr/lib/systemd/system/runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jul 12 15:45 /usr/lib/systemd/system/runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Jul 12 15:45 /usr/lib/systemd/system/runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Jul 12 15:45 /usr/lib/systemd/system/runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Jul 12 15:45 /usr/lib/systemd/system/runlevel6.target -> reboot.target
init

返迴文件系統結構

init         切換系統運行級別

init命令是Linux下的進程初始化工具,init進程是所有Linux進程的父進程,它的進程號為1。
init進程是Linux內核引導運行的,是系統中的第一個進程。

systemctl

返迴文件系統結構

管理系統服務:systemctl 囊括service / chkconfig / setup / init 的大部分功能
systemctl [OPTIONS...] {COMMAND} ... 顯示所有系統服務
          start 	  啟動服務
          stop 		  停止服務
          restart 	  重啟服務,服務會中斷
          reload 	  重載服務,服務不會中斷
		              測試conf語法等,如果出錯會rollback用上一次正確配置文件保持正常運行。
          status 	  查看服務詳細的運行狀態
          disable     讓服務開機不要運行
          enable   	  讓服務開機運行
		  is-active   檢查確認服務是否運行
		  is-enabled  檢查確認服務是否開機運行
          list-units --type=service	
		              列舉所有已啟動服務(unit單元)
		  daemon-reload 重新載入systemd管理器配置

查詢或向systemd管理器發送控制命令:
  -H --host=[USER@]HOST
                      在遠程主機上操作
  -t --type=TYPE      列出特定類型的 units (TYPE=service|...)
     --state=STATE    列出有特殊狀態(LOAD or SUB or ACTIVE)的 units
  -p --property=NAME  Show only properties by this name
  -a --all            顯示所有已載入的單元/屬性,包括死/空
  -s --signal=SIGNAL  發送哪個訊號
     --now            除啟用或禁用外,啟動或停止裝置
  -q --quiet          禁止輸出
  -f --force          啟用單位文件時,覆蓋現有符號鏈接.關閉時,立即執行操作
  -n --lines=INTEGER  要顯示的日記條目數
  -o --output=STRING  更改日誌輸出模式
  
Unit Commands:
  list-units [PATTERN...]         列出載入的 units
  list-sockets [PATTERN...]       列出按地址排序的載入的套接字
  list-timers [PATTERN...]        列出按下一個時間排序的已載入計時器
  start NAME...                   啟動(激活)一個或多個 units
  stop NAME...                    停止(停用)一個或多個 units
  reload NAME...                  重新裝載一個或多個 units
  restart NAME...                 啟動或重新啟動一個或多個 units
  try-restart NAME...             重新啟動一個或多個 units(如果激活)
  reload-or-restart NAME...       如果可能,重新裝載一個或多個 units,否則啟動或重新啟動
  reload-or-try-restart NAME...   如果可能,重新裝載一個或多個 units,否則重新啟動 units
                                 (如果激活)
  isolate NAME                    啟動一個 units,停止所有其他 units
  kill NAME...                    向 unit 進程發送kill訊號
  is-active PATTERN...            檢查 unit 是否激活
  is-failed PATTERN...            檢查 unit 是否出現故障
  status [PATTERN...|PID...]      顯示一個或多個 unit 的運行狀態
  show [PATTERN...|JOB...]        顯示一個或多個屬性
  cat PATTERN...                  顯示一個或多個 unit 的文件和下拉列表
  set-property NAME ASSIGNMENT... 設置 unit 的一個或多個屬性
  help PATTERN...|PID...          顯示一個或多個 unit 的手冊
  reset-failed [PATTERN...]       重置所有、一個或多個失敗狀態的 unit

Unit File Commands:
  list-unit-files [PATTERN...]    列出系統上安裝的所有 units
  enable NAME...                  啟用一個或多個 unit files
  disable NAME...                 禁用一個或多個 unit files
  reenable NAME...                重新啟用一個或多個 unit files
  is-enabled NAME...              檢查 unit files 是否啟用
  mask NAME...                    隱藏 one or more units
  unmask NAME...                  不隱藏 one or more units
  get-default                     獲取默認運行級別的名稱
  set-default NAME                設置默認運行級別
  list-dependencies [NAME]        遞歸地顯示, 此單元依賴的單元, 或依賴此單元的單元
Machine Commands:
  list-machines [PATTERN...]      列出本地容器和主機

Job Commands:
  list-jobs [PATTERN...]          List jobs
  cancel [JOB...]                 Cancel all, one, or more jobs

Snapshot Commands:(snapshots 快照)
  snapshot [NAME]                 Create a snapshot
  delete NAME...                  Remove one or more snapshots

Environment Commands:
  show-environment                顯示環境變數LANG和PATH
  set-environment NAME=VALUE...   設置一個或多個環境變數
  unset-environment NAME...       取消設置一個或多個環境變數
  import-environment [NAME...]    導入所有或部分環境變數

管理器生命周期命令:
  daemon-reload                   重新載入systemd管理器配置
  daemon-reexec                   重新運行系統管理器

System Commands:
  is-system-running               檢查系統是否完全運行
  default                         進入系統默認模式
  rescue                          進入系統救援模式
  emergency                       進入系統緊急模式
  halt                            關閉並停止系統
  poweroff                        關閉系統並停止電源
  reboot [ARG]                    關閉並重新啟動系統
  kexec                           使用kexec關閉並重新啟動系統
  exit                            請求用戶實例退出
  switch-root ROOT [INIT]         更改為其他根文件系統
  suspend                         掛起系統
  hibernate                       休眠系統
  hybrid-sleep                    休眠並掛起系統

服務狀態:
loaded                      Unit配置文件已處理
active(running)             一次或多次持續處理的運行
active(exited)              成功完成一次性的配置
active(waiting)             運行中,等待一個事件
inactive                    不運行
enabled                     開機啟動
disabled                    開機不啟動
static                      開機不啟動,但可被另一個啟用的服務激活

Example:
systemctl | grep running                查看正在運行的服務
systemctl daemon-reload                 重新載入systemd管理器配置
systemctl list-unit-files|grep enabled  查看已啟動的服務列表
systemctl disable lightdm               禁止啟動桌面服務

/etc/lib/systemd/user/:用戶服務文件

/usr/lib/systemd/system/:系統服務文件, 每個服務最主要的啟動腳本設置,類似於之前的 /etc/init.d/

/run/systemd/system/:系統執行過程中所產生的服務腳本,比上面目錄優先運行

/etc/systemd/system/:系統管理員手動創建的執行腳本,類似於/etc/rcN.d/Sxx,比上面目錄優先運行

[Unit]
Description=nginx - high performance web server
Documentation=//nginx.org/en/docs/
After=network.target remote-fs.target nss-lookup.target
  
[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
PrivateTmp=true
  
[Install]
WantedBy=multi-user.target
[Unit]:定義與Unit類型無關的通用選項;用於提供unit的描述資訊、unit行為及依賴關係等
Description : 服務的簡單描述
Documentation : 服務文檔
Before、After:定義啟動順序。Before=xxx.service,代表本服務在xxx.service啟動之前啟動。After=xxx.service,代表本服務在xxx.service之後啟動。
Requires:這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,這個單元也停止了。
Wants:推薦使用。這個單元啟動了,它需要的單元也會被啟動;它需要的單元被停止了,對本單元沒有影響。

[Service]:與特定類型相關的專用選項;此處為Service類型
Type=simple(默認值):systemd認為該服務將立即啟動。服務進程不會fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket激活型。
Type=forking:systemd認為當該服務進程fork,且父進程退出後服務啟動成功。對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便systemd能夠跟蹤服務的主進程。
Type=oneshot:這一選項適用於只執行一項任務、隨後立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之後仍然認為服務處於激活狀態。
Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個訊號。這一通知的實現由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式啟動,當指定的 BusName 出現在DBus系統匯流排上時,systemd認為服務就緒。
Type=idle: systemd會等待所有任務(Jobs)處理完成後,才開始執行idle類型的單元。除此之外,其他行為和Type=simple 類似。
PIDFile:pid文件路徑
ExecStart:指定啟動單元的命令或者腳本,ExecStartPre和ExecStartPost節指定在ExecStart之前或者之後用戶自定義執行的腳本。Type=oneshot允許指定多個希望順序執行的用戶自定義命令。
ExecReload:指定單元停止時執行的命令或者腳本。
ExecStop:指定單元停止時執行的命令或者腳本。
PrivateTmp:True表示給服務分配獨立的臨時空間
Restart:這個選項如果被允許,服務重啟的時候進程會退出,會通過systemctl命令執行清除並重啟的操作。
RemainAfterExit:如果設置這個選擇為真,服務會被認為是在激活狀態,即使所以的進程已經退出,默認的值為假,這個選項只有在Type=oneshot時需要被配置。

[Install]:定義由"systemctl enable|disable"命令在實現服務啟用或禁用時用到的一些選項
Alias:為單元提供一個空間分離的附加名字。
RequiredBy:單元被允許運行需要的一系列依賴單元,RequiredBy列表從Require獲得依賴資訊。
WantBy:單元被允許運行需要的弱依賴性單元,Wantby從Want列表獲得依賴資訊。
Also:指出和單元一起安裝或者被協助的單元。
DefaultInstance:實例單元的限制,這個選項指定如果單元被允許運行默認的實例。
systemctl enable nginx.service(設置開機自啟)
等於
ln -s /usr/lib/systemd/system/nginx.service /etc/systemd/system/multi-user.target.wants/nginx.service
source

返迴文件系統結構

在當前Shell環境中從指定文件讀取和執行命令:source 就是.
作用:把一個文件的內容當成shell來執行

split

返迴文件系統結構

返迴文件操作

分割一個文件為多個文件,split只能夠根據文件大小或行數來分割

split [OPTION]... [INPUT [PREFIX]]
默認大小為1000行,默認前綴為「x」。沒有輸入,或者當輸入時是-,讀取標準輸入。
  -a, --suffix-length=N           生成長度為N的後綴(default 2)
      --additional-suffix=SUFFIX  在文件名後面附加一個後綴
  -b, --bytes=SIZE                指定每個輸出文件的位元組大小
  -C, --line-bytes=SIZE           指定每個輸出文件最多放入大小為 SIZE 位元組的行
  -d, --numeric-suffixes[=FROM]   使用數字後綴而不是字母;從 FROM 更改起始值(default 0)
  -e, --elide-empty-files         不生成空輸出文件 with '-n'
      --filter=COMMAND            寫入shell命令;文件名為 $FILE
  -l, --lines=NUMBER              指定每個輸出文件的行數 NUMBER
  -n, --number=CHUNKS             生成 CHUNKS 輸出文件; see explanation below
  -u, --unbuffered                立即將輸入複製到輸出 with '-n r/...'
      --verbose                   在生成每個輸出文件之前列印診斷

CHUNKS may be:
N       根據輸入的大小分成N個文件
K/N     將 N 個 K 輸出到stdout
l/N     拆分為 N 個文件而不拆分行
l/K/N   在不拆分行的情況下,將 N 個 K 輸出到stdout
r/N     像「l」但使用循環分配
r/K/N   像「l」但使用循環分配,將 N 個 K 輸出到stdout

Example:
split -b 40m log.log -d log_ --verbose
split -b Size –d tar-file-name prefix-name
split -b 1M –d mybackup.tgz mybackup-parts
split -b 1M mybackup.tgz mybackup-parts
csplit

返迴文件操作

將一個大文件分割成小的碎片,並且將分割後的每個碎片保存成一個文件。碎片文件的命名類似「xx00」,「xx01」

csplit能夠根據文件本身特點來分割文件。

-b<輸出格式>或–suffix-format=<輸出格式> 預設的輸出格式其文件名稱為xx00,xx01等,用戶可以通過改變<輸出格式>來改變輸出的文件名
-f<輸出字首字元串>或–prefix=<輸出字首字元串> 預設的輸出字首字元串其文件名為xx00,xx01等,如果制定輸出字首字元串為「hello」,則輸出的文件名稱會變成hello00,hello、01……
-k或–keep-files 保留文件,就算髮生錯誤或中斷執行,與不能刪除已經輸出保存的文件
-n<輸出文件名位數>或–digits=<輸出文件名位數> 預設的輸出文件名位數其文件名稱為xx00,xx01……如果用戶指定輸出文件名位數為「3」,則輸出的文件名稱會變成xx000,xx001等
-q或-s或–quiet或–silent 不顯示指令執行過程
-z或–elide-empty-files 刪除長度為0 Byte文件
1.將文本文件filename以第 2 行為分界點切割成兩份:
csplit filename 2

2.將文本文件filename以120行為分界點切割成2份,並指定輸出文件名的位數為3:
csplit -n 3 filename 120

3.將文本文件textfile以120行為分界點切割成2份,並指定輸出文件名的前緣為fileName位數為3:
csplit -f fileName testfile 120 

4.將文件 filename 以10行為單位分割8次,並指定輸出文件名的格式 :
csplit -b "myfile%o% filename 10 {8} 

5.將文本文件 filename 以每20行為單位分割:
csplit filename 20 {*} 

6.把文件以字元串」Chapter X」為分界符,分成兩部分:
csplit filename /"Chapter X"/  

7.將server.log分割成server01.log、server02.log、server03.log,這些文件的內容分別取自原文件中不同的SERVER部分:
csplit server.log /SERVER/ -n2 -s {*} -f server -b "%02d.log"

/[正則表達式]/   #匹配文本樣式,比如/SERVER/,從第一行到包含SERVER的匹配行。
{*}     #表示根據匹配重複執行分割,直到文件尾停止,使用{整數}的形式指定分割執行的次數。
-s      #靜默模式,不列印其他資訊。
-n      #指定分割後的文件名後綴的數字個數。比如01、02、03等。
-f      #指定分割後的文件名前綴。
-b      #指定後綴格式。比如%02d.log,類似於C語言中的printf參數格式。
ps

返回進程管理

ps process status 
   -a	                       顯示所有終端機下執行的程式,除了階段作業領導者之外
   a	                       顯示現行終端機下的所有程式,包括其他用戶的程式
   -A,-e                       顯示所有程式
   -c	                       顯示CLS和PRI欄位
   c	                       列出程式時,顯示每個程式真正的指令名稱,而不包含路徑,
                               選項或常駐服務的標示
   -C <指令名稱>	            指定執行指令的名稱,並列出該指令的程式的狀況
   -d	                       顯示所有程式,但不包括階段作業領導者的程式
   e	                       列出程式時,顯示每個程式所使用的環境變數
   -f	                       顯示UID,PPIP,C與STIME欄位
   f,--forest	               用ASCII字元顯示樹狀結構,表達程式間的相互關係
   -g,--group <群組名稱>	    same as -G,亦能使用階段作業領導者的名稱來指定
   g	                       顯示現行終端機下的所有程式,包括群組領導者的程式
   -G,--Group <群組識別碼>	    列出屬於該群組的程式的狀況,也可使用群組名稱來指定
   h,--no-headers	           不顯示標題列
   -H	                       顯示樹狀結構,表示程式間的相互關係
   -j,j	                       採用工作控制的格式顯示程式狀況
   -l,l	                       採用詳細的格式來顯示程式狀況
   L	                       列出欄位的相關資訊
   -m,m	                       顯示所有的執行緒
   n	                       以數字來表示USER和WCHAN欄位
   -N,--deselect	           顯示所有的程式,除了執行ps指令終端機下的程式之外
   -p,p,--pid <程式識別碼>	    指定程式識別碼,並列出該程式的狀況
   r	                       只列出現行終端機正在執行中的程式
   -s,--sid <階段作業>	        指定階段作業的程式識別碼,並列出隸屬該階段作業的程式的狀況
   s	                       採用程式訊號的格式顯示程式狀況
   S,--cumulative	           列出程式時,包括已中斷的子程式資料
   -t,t,-tty <終端機編號>	    指定終端機編號,並列出屬於該終端機的程式的狀況
   -T	                       顯示現行終端機下的所有程式
   u	                       以用戶為主的格式來顯示程式狀況
   -u,-U,--User <用戶識別碼>    列出屬於該用戶的程式的狀況,也可使用用戶名稱來指定
   U,--user <用戶名稱>	        列出屬於該用戶的程式的狀況
   v	                       採用虛擬記憶體的格式顯示程式狀況
   -w,w	                       採用寬闊的格式來顯示程式狀況
   x	                       顯示所有程式,不以終端機來區分
   X	                       採用舊式的Linux i386登陸格式顯示程式狀況
   -y	                       配合選項」-l」使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位
   --cols,--columns,--widty  <每列字元數>	設置每列的最大字元數
   --headers	                            重複顯示標題列
   --lines,--rows <顯示列數>	            設置顯示畫面的列數
Examples:
ps aux                               顯示詳細的資訊和用戶
ps aux|less                          查看進程完整 COMMAN
ps axo pid,ni,command | grep sshd    顯示進程優先順序
ps aux|grep  程式關鍵字|grep -v grep|awk '{print $2}'
ps aux|grep  程式關鍵字|grep -v grep|awk '{print $2}'|xargs kill -9
ps -ef | sort -k7   將進程按運行時間排升序,看哪個進程消耗的cpu時間最多

standard 語法:
   ps -e
   ps -ef
   ps -eF
   ps -ely

BSD 語法:
   ps ax
   ps axu

print a process tree:
   ps -ejH
   ps axjf

info about threads:
   ps -eLf
   ps axms

security info:
   ps -eo euser,ruser,suser,fuser,f,comm,label
   ps axZ
   ps -eM

以用戶格式查看以root(實際有效ID)身份運行的每個進程:
   ps -U root -u root u

使用用戶定義的格式查看每個進程:
   ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
   ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
   ps -Ao pid,tt,user,fname,tmout,f,wchan

Print only the process IDs of syslogd:
   ps -C syslogd -o pid=

Print only the name of PID 42:
   ps -q 42 -o comm=
標誌 意義
USER 該 process 屬於那個使用者帳號的
PID 該 process 的唯一標識號碼
%CPU 該 process 使用的 CPU 資源百分比
%MEM 該 process 所佔用的物理記憶體百分比
VSZ 該 process 使用的虛擬記憶體量 (Kbytes)
RSS 該 process 佔用的固定記憶體量 (Kbytes)
TTY 該 process 是在那個終端機上面運作,? = 與終端機無關,tty1-tty6 = 本機上面的登入者程式, pts/0 … = 由網路連接進主機的程式。
STAT 該程式目前的狀態
START 該 process 被觸發啟動的時間
TIME 該 process 實際使用 CPU 運作的時間
COMMAND 該程式的實際指令, 有[]內核態進程, 無[]用戶進程
STAT基本 描述 STAT符號 描述 示例
R 進程運行 s 進程是控制進程 Ss進程的領導者,父進程
S 可中斷睡眠 < 進程運行在高優先順序上 S<優先順序較高的進程
T 進程被暫停 N 進程運行在低優先順序上 SN優先順序較低的進程
D 不可中斷進程 + 當前進程運行在前台 R+該表示進程在前台運行
Z 殭屍進程 l 進程是多執行緒的 Sl表示進程是以執行緒方式運行
進程目錄:
cd /proc/PID
ll /proc/PID
            cwd符號鏈接的是進程運行目錄;
            exe符號連接就是執行程式的絕對路徑;
            cmdline就是程式運行時輸入的命令行命令;
            environ記錄了進程運行時的環境變數;
            fd目錄下是進程打開或使用的文件的符號連接
pstree

返回進程管理

yum -y install psmisc

Psmisc軟體包包含三個幫助管理/proc目錄的程式。
fuser 顯示使用指定文件或者文件系統的進程的PID。
killall 殺死某個名字的進程,它向運行指定命令的所有進程發出訊號。
pstree 樹型顯示當前運行的進程。

pstree [-acGhlnpuUV][-H <程式識別碼>][<程式識別碼>/<用戶名稱>]
     -a             顯示每個程式的完整指令,包含路徑,參數或是常駐服務的標示。
     -c             不使用精簡標示法。
     -G             使用VT100終端機的列繪圖字元。
     -h             列出樹狀圖時,特別標明現在執行的程式。
     -H<程式識別碼>  列出樹狀圖時,特別標明指定的程式。
     -l             採用長列格式顯示樹狀圖,默認值。
     -n             用程式識別碼排序。預設是以程式名稱來排序。
       -p             顯示程式識別碼。會顯示程式id
     -u             顯示用戶名稱。
     -U             使用UTF-8列繪圖字元。
top

返回進程管理

實時顯示系統中各個進程的資源佔用狀況

top       
    -d    指定更新的時間間隔,以秒計算。 
    -q    沒有任何延遲的更新。如果使用者有超級用戶許可權,則top命令將會以最高的優先序執行。 
    -c,-  顯示進程 COMMAND 完整的路徑與名稱。 
    -S    累積模式,會將己完成或消失的子行程的CPU時間累積起來。 
    -s    安全模式。去除交互命令所帶來的潛在危險。
    -i    不顯示任何閑置(Idle)或僵死(Zombie)的行程。 
    -n    顯示更新的次數,完成後將會退出top
	-b	  批次檔模式,搭配 「n」 參數一起使用,可以用來將 top 的結果輸出到檔案內
    -p    僅監控指定PID進程的狀態
任務隊列資訊: same as uptime
10:37:35	                    當前時間
up 25 days, 17:29	            系統已運行時間,格式為天,時:分
1 user	                        當前登錄用戶數
load average: 0.00, 0.02, 0.05	最近1分鐘、5分鐘、15分鐘的平均系統負載,即任務隊列的平均長度。

Tasks:
104 total	            進程總數
1 running	            運行進程數
103 sleeping	        睡眠進程數
0 stopped	            停止進程數
0 zombie	            殭屍進程數		    
Cpu(s):                 CPU資訊區
0.1%us	                運行(未調整優先順序的) 用戶進程佔用CPU百分比
0.0%sy	                運行內核進程佔用CPU百分比
0.0%ni	                運行已調整優先順序的用戶進程佔用CPU百分比
99.9%id	                空閑CPU百分比
0.0%wa	                IO等待佔用的CPU時間百分比
0.0%hi	                處理硬體中斷的CPU時間百分比
0.0%si	                處理軟體中斷的CPU時間百分比
0.0%st                  這個虛擬機被hypervisor偷去的CPU時間
Mem:                    記憶體資訊區
2067816k total	        物理記憶體總量
2007264k used	        使用的物理記憶體總量
60552k free	            空閑記憶體總量
73752k buffers	        用作內核快取的記憶體量
Swap:
524284k total	        交換區總量
315424k used	        使用的交換區總量
208860k free	        空閑交換區總量
625832k cached	        快取的交換區總量

進程資訊區(默認):
PID(Process ID):進程唯一標識符。 
USER:進程所有者的用戶名。 
PR:進程的優先順序別。欄位 rt 運行在實時態=-100 (顯示範圍rt~0~39)
NI:進程的優先順序別數值。越小的值意味著越高的優先順序。負值表示高優先順序,正值表示低優先順序
VIRT:進程佔用的虛擬記憶體值 VIRT=SWAP+RES
RES:進程佔用的物理記憶體值 RES=CODE+DATA  
SHR:進程使用的共享記憶體值。 
S:進程的狀態,其中S=睡眠,R=正在運行,Z=僵死狀態,N=該進程優先值是負數,D=不可中斷的睡眠狀態,T=被跟蹤或已停止
%CPU:該進程佔用的CPU使用率。 
%MEM:該進程佔用的物理記憶體和總記憶體的百分比。 
TIME+:該進程啟動後佔用的總的CPU時間。 
COMMAND:運行進程所使用的命令。進程名稱(命令名/命令行) 

a	PID	    進程id
b	PPID	父進程id
c	RUSER	Real user name
d	UID	    進程所有者的用戶id
e	USER	進程所有者的用戶名
f	GROUP	進程所有者的組名
g	TTY	    啟動進程的終端名。? =不是從終端啟動的進程;tty1-tty6 =本機登入; pts/0 =網路登入
h	PR	    優先順序: (顯示範圍rt~0~39) rt 運行在實時態=-100 
i	NI	    nice值。負值表示高優先順序,正值表示低優先順序
j	P	    最後使用的CPU,僅在多CPU環境下有意義
k	%CPU	上次更新到現在的CPU時間佔用百分比
l	TIME	進程使用的CPU時間總計,單位秒
m	TIME+	進程使用的CPU時間總計,單位1/100秒
n	%MEM	進程使用的物理記憶體百分比
o	VIRT	進程使用的虛擬記憶體總量,單位kb。VIRT=SWAP+RES
p	SWAP	進程使用的虛擬記憶體中,被換出的大小,單位kb。
q	RES	    進程使用的、未被換出的物理記憶體大小,單位kb。RES=CODE+DATA
r	CODE	可執行程式碼佔用的物理記憶體大小,單位kb
s	DATA	可執行程式碼以外的部分(數據段+棧)佔用的物理記憶體大小,單位kb
t	SHR	    共享記憶體大小,單位kb
u	nFLT	頁面錯誤次數
v	nDRT	最後一次寫入到現在,被修改過的頁面數。
w	S	    進程狀態。
top交互命令: 
    1       切換顯示 CPU資訊區 每個|全部平均 
    h, ?    顯示幫助
	z	    切換彩色/單色
	b       切換粗體/撤銷(only if 'x' or 'y')
	y       切換高亮 正在運行任務
	x       切換高亮 排序欄位
    k       按系統提示終止一個進程。在安全模式中此命令被屏蔽。
    i       忽略閑置和僵死進程
    q       退出程式
    r       按系統提示重新安排一個進程優先順序。默認10。
    s       按系統提示改變兩次刷新之間的延遲時間。單位為s。如果有小數,就換算成m s。輸入0值則系統將不斷刷新,默認值是5 s。
    f, F    從當前顯示中添加或者刪除進程資訊區列項。
    o, O    改變顯示項目的順序。
    l       切換顯示 平均負載和啟動時間資訊。
    m       切換顯示 記憶體資訊區 
    t       切換顯示 進程和CPU狀態資訊。
    c       切換顯示 命令名稱和完整命令行。
	R       倒轉 記憶體資訊區 排序
    M       根據使用記憶體大小進行排序 
    P       根據CPU使用百分比大小進行排序
    T       根據時間/累計時間進行排序。
	W       將當前設置寫入~/.toprc文件中。這是寫top配置文件的推薦方法
	<ENTER>, <SPACE>  立刻刷新
	shift + > 或 shift + <   向右或左改變排序列
監控java執行緒數:
ps -eLf | grep java | wc -l

監控網路客戶連接數:
netstat -n | grep tcp | grep 偵聽埠 | wc -l

獲取某進程中運行中的執行緒數量:
ls /proc/PID/task | wc -l

輸出進程記憶體的狀況,可以用來分析執行緒堆棧:
pmap PID
htop

返回進程管理

互動式監控與進程查看器,支援使用彩色標識出處理器、swap和記憶體狀態。
可以橫向或縱向滾動瀏覽進程列表,以便看到所有的進程和完整的命令行、在啟動上比top更快、殺進程時不需要輸入進程號、支援滑鼠選中操作、top已不再維護。

epel源:
yum -y install htop
htop 
     -C                          使用單色配色方案
     -d                          設置更新之間的延遲,以十分之一秒為單位
     -s COLUMN                   按指定的列排序顯示 (try --sort-key=help for a list)
     -t                          Show the tree view
     -u USERNAME                 Show only processes of a given user(given 指定的)
     -p PID,[,PID,PID...]        Show only the given PIDs
互動式命令:
     space	         標記一個進程
     U	             取消所有標記
     l	             顯示進程打來的文件
     u	             顯示特定用戶
     M	             按照記憶體排序
     P	             按照CPU排序
     T	             按在線時長排序
     直接輸入數字	     查找對應的PID進程

上左區:顯示了CPU、物理記憶體和交換分區的資訊;

上右區:顯示了任務數量、平均負載和連接運行時間等資訊;

進程區域:顯示出當前系統中的所有進程;

操作提示區:顯示了當前介面中F1-F10功能鍵中定義的快捷功能。

F1:顯示幫助資訊:

F2:配置介面中的顯示資訊:

我們可以根據自己的需要修改顯式模式以及想要顯示的內容,比如:以LED的形式顯示CPU的使用情況,並且在左邊的區域添加hostname,在右邊的區區域添加clock;

自定義進程區域中的顯示內容:

F3:進程搜索:

F4:進程過濾器; 從上面的結果可以看出search和filter的區別: search會將游標定位到符合條件的進程上,通過F3鍵進行逐個查找;而filter會直接將符合條件的進程篩選出來。 search和filter都使用ESC鍵來取消功能。

F5:顯示進程樹:

F6:排序:

F7:減小nice值; F8:增加nice值; 直接修改游標選取的進程的nice值:

F9:殺掉指定進程:

F10:退出htop。

空格鍵:用於標記選中的進程,用於實現對多個進程同時操作:

U:取消所有選中的進程;

s:顯示游標所在進程執行的系統調用; 下面顯示的為init的系統調用資訊:

l:顯示游標所在進程的文件列表;

I:對排序的結果進行反轉顯示; 例如,對PPID進行排序後,按『I』鍵將會對PPID的排序結果進行反向排序。

a:綁定進程到指定的CPU;

u:顯示指定用戶的進程;

M:按照記憶體使用百分比排序,對應MEM%列; 
P:按照CPU使用百分比排序,對應CPU%列; 
T:按照進程運行的時間排序,對應TIME+列; 
K:隱藏內核執行緒; 
H:隱藏用戶執行緒; 
#:快速定位游標到PID所指定的進程上。 

atop

以人類可讀的方式查看所有進程,類似於windows的任務管理器查看進程殺死進程任務清理記憶體

image-20201203094358354

lsof

返回進程管理

列出系統上進程調用文件的相關資訊

yum -y install lsof
lsof (list open files)
     -a	            列出打開文件存在的進程
     -c <進程名>	列出指定進程所打開的文件
     -g	            列出GID號進程詳情
     -d <文件號>	列出佔用該文件號的進程
     +d <目錄>	    列出目錄下被打開的文件
     +D <目錄>	    遞歸列出目錄下被打開的文件
     -n <目錄>	    列出使用NFS的文件
     -i <條件>	    列出符合條件的進程
     -p <進程號>	列出指定進程號所打開的文件
     -u	            列出UID號進程詳情  
     -N             select NFS files      
	 -P             no port names
     -s             list file size        
	 -t             terse listing(terse 簡潔的)
	 -T             disable TCP/TPI info
	 -U             select Unix socket

lsof輸出資訊:
COMMAND 進程的名稱
PID     進程標識符
USER    進程所有者
FD      文件描述符,應用程式通過文件描述符識別該文件。如cwd:應用程式的當前工作目錄、txt等 
TYPE    文件類型,如DIR目錄、REG文件、CHR字元、BLK塊設備、UNIX域套接字、FIFO先進先出隊列、IPv4網際協議套接字等
DEVICE  指定磁碟的名稱
SIZE    文件的大小
NODE    索引節點(文件在磁碟上的標識)
NAME    打開文件的確切名稱

文件類型:
DIR:表示目錄。
CHR:表示字元類型。
BLK:塊設備類型。
UNIX: UNIX 域套接字。
FIFO:先進先出 (FIFO) 隊列。
IPv4:網際協議 (IP) 套接字。
DEVICE:指定磁碟的名稱
SIZE:文件的大小
NODE:索引節點(文件在磁碟上的標識)
NAME:打開文件的確切名稱
Example:  
lsof                               列出所有打開的文件.不加任何參數會打開所有被打開的文件,建議加參數具體定位
lsof +D /filepath/filepath2/       遞歸查看某個目錄下的所有子目錄和文件的資訊
lsof | grep 『/filepath/filepath2/』 遍歷查看某個目錄的所有文件資訊
lsof -u username                   列出某個用戶打開的文件資訊
lsof -c mysql ; lsof | grep mysql  列出某個程式所打開的文件資訊
lsof -c mysql -c apache            列出多個程式多打開的文件資訊
lsof -u test -c mysql              列出某個用戶以及某個程式所打開的文件資訊
lsof -p 123,456,789                列出多個進程號對應的文件資訊
lsof -p ^1                         列出除了某個進程號,其他進程號所打開的文件資訊
lsof -i                            列出所有的網路連接
lsof -i tcp                        列出所有tcp 網路連接資訊
lsof -i udp                        列出所有udp網路連接資訊
lsof -i :3306                      列出誰在使用某個埠
lsof -i udp:55                     列出誰在使用某個特定的udp埠
lsof -i tcp:80                     列出誰在使用某個特定的tcp埠
lsof -a -u test -i                 列出某個用戶的所有的網路連接
lsof -N                            列出所有網路文件系統
lsof -u                            域名socket文件
lsof -g 5555                       某個用戶組所打開的文件資訊
lsof -d description(like 2)        根據文件描述列出對應的文件資訊
lsof -d 2-3                        根據文件描述範圍列出文件資訊

恢復刪除的文件:
[root@oldboyedu-lnb ~]# lsof |grep messages
abrt-watc   902         root    4r      REG                8,3      9473    1500168 /var/log/messages
rsyslogd   1186         root    7w      REG                8,3      9473    1500168 /var/log/messages

cat /proc/1186/fd/7 > /var/log/messages

lsof `which httpd`         那個進程在使用apache的可執行文件 
lsof /etc/passwd           那個進程在佔用/etc/passwd 
lsof /dev/hda6             那個進程在佔用hda6 
lsof /dev/cdrom            那個進程在佔用光碟機 
lsof -c sendmail           查看sendmail進程的文件使用情況 
lsof -c courier -u ^zahn   顯示出那些文件被以courier打頭的進程打開,但是並不屬於用戶zahn 
lsof -i UDP@[url]www.akadia.com:123  顯示那些進程打開了到www.akadia.com的UDP的123(ntp)埠的鏈接 
lsof -i [email protected]:ftp -r   不斷查看目前ftp連接的情況(-r,lsof會永遠不斷的執行,直到收到中斷訊號,+r,lsof會一直執行,直到沒有檔案被顯示,預設是15s刷新) 
iotop

返回磁碟管理

磁碟I/O使用狀況監視工具

yum -y install iotop
iotop [OPTIONS]
      -o                僅顯示正在產生I/O的進程或執行緒,互動式介面按o切換
      -b                非互動式模式,一般用來記錄日誌
      -n NUM            設置監測的次數,在非互動式模式下很有用[default:無限]
      -d SEC            設置每次監測的間隔秒數,接受非整數值[default:1 second]
      -p PID            指定監測的進程/執行緒
      -u USER           指定監測的用戶
      -P                only show processes, not all threads
      -a                show accumulated I/O instead of bandwidth(顯示累積I/O而不是頻寬)
      -k                使用千位元組顯示
      -t                add a timestamp on each line (timestamp 時間戳)
      -q                取消某些標題行,只在第一次監測時顯示列名
    -qq                永遠不顯示列名
    -qqq               永遠不顯示I/O匯總
交互介面按鍵,和top命令類似:
  left和right方向鍵:改變排序。  
  r:反向排序。
  o:切換至選項-o, --only。
  p:切換至-p, --processes選項。
  a:切換至-a, --accumulated選項。
  q:退出。
  i:改變執行緒的優先順序。
iftop

返回網路管理

實時流量監控工具,監控TCP/IP連接等,缺點就是無報表功能。必須以root身份才能運行。檢查頻寬使用情況,通過進程號跟蹤網路連接。

yum -y install iftop
iftop [-npblNBP] [-i interface] [-f filter code][-F net/mask] [-G net6/mask6]
      -n                  don't do hostname lookups(lookups 查找)
      -N                  don't convert port numbers to services(convert 轉換)
      -p                  以混雜模式運行(顯示同一網段上其他主機之間的流量)
      -b                  不顯示下方的流量條形圖
      -B                  display bandwidth in bytes [default:bits](bandwidth 頻寬)
      -a                  display bandwidth in packets (以包為單位顯示頻寬)
      -i interface        listen on named interface (網卡)
      -f filter code      使用過濾程式碼選擇要計數的數據包(默認值:無,但只計算IP數據包)
      -F net/mask         顯示進出IPv4網路的流量(net/mask 子網/掩碼)
      -G net6/mask6       顯示進出IPv6網路的流量
      -l                  顯示和統計本地鏈路IPv6流量 [default: off]
      -P                  顯示埠和主機
      -m limit            設置頻寬上限,介面最上邊的刻度的最大值,刻度分五個大段顯示
      -c config file      指定備用配置文件
      -t                  使用沒有ncurses的文本介面
	  
      以下選項僅與-t結合使用:
      -s num              在num秒後列印一個文本輸出,然後退出
      -L num              要列印的行數

      Sorting orders:     排序指定
      -o 2s               Sort by first column (2s 平均流量)(column 柱,欄)
      -o 10s              Sort by second column (10s 平均流量) [default]
      -o 40s              Sort by third column (40s 平均流量)
      -o source           Sort by source address
      -o destination      Sort by destination address
iftop介面相關說明:
介面上面顯示的是類似刻度尺的刻度範圍,為顯示流量圖形的長條作標尺用的。
中間的<= =>這兩個左右箭頭,表示的是流量的方向。
TX:發送流量
RX:接收流量
TOTAL:總流量
Cumm:運行iftop到目前時間的總流量
peak:流量峰值
rates:分別表示過去 2s 10s 40s 的平均流量

交互介面按鍵:
    b       是否顯示平均流量圖形條;
    B       切換計算2秒/10秒/40秒內的平均流量;
    d       是否顯示遠端目標主機的host資訊;	
    D       是否顯示遠端目標主機的埠資訊;	
    f       可以編輯過濾程式碼	
    h       是否顯示幫助;
    j/k     向上/向下滾動螢幕顯示的連接記錄;	
    l       打開螢幕過濾功能,輸入要過濾的字元,比如ip,按回車後,螢幕就只顯示這個IP相關的流量資訊;
    L       切換顯示畫面上邊的刻度;刻度不同,流量圖形條會有變化;	
    n       是否顯示本機的IP或主機名;
    N       切換顯示埠號/埠服務名稱;
    o       是否固定只顯示當前的連接;	
    p       是否顯示埠資訊;
    P       暫停/繼續顯示;	
    s       是否顯示本機的host資訊;
    S       是否顯示本機的埠資訊;
    t       切換顯示格式為2行/1行/只顯示發送流量/只顯示接收流量;
    T       是否顯示每個連接的總流量;
    1/2/3   根據右側顯示的三列流量數據進行排序;
    <       根據左邊的本機名或IP排序;
    >       根據遠端目標主機的主機名或IP排序;
    !       可以使用shell命令
    q       退出監控
Example:  
iftop -i eth1  # 監控eth1網卡的流量, 默認監控第一塊網卡的流量
iftop -F 10.10.1.0/24
iftop -F 10.10.1.0/255.255.255.0
iftop -m 100M
nethogs

返回網路管理

網路流量監控工具 按進程實時統計網路頻寬利用率

展示每個進程的頻寬使用情況,快速查詢哪些進程佔用頻寬

yum -y install nethogs
nethogs [-b] [-d seconds] [-v mode] [-c count] [-t] [-p] [-s] [device [device [device ...]]]
		-b     bughunt mode - implies tracemode (bug 狩獵模式 — — 意味著跟蹤模式) 
		-d     更新刷新速率的延遲(秒) [default: 1]
		-v     view mode (0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB)[default: 0]
		-c     number of updates. [default: 0] (unlimited 無限的)
		-t     tracemode 軌跡模式
		-p     sniff in promiscious mode (not recommended) 在promiscious模式下嗅探(不推薦)
		-s     按已發送列對輸出進行排序
		-a     監視所有設備,甚至是環回/停止的設備。
		device 要監視的設備名稱,default is all interfaces up and running excluding loopback(excluding 排除)

nethogs eth0 eth1 同時監視eth0和eth1介面

When nethogs is running, press: (press 按)
 q: quit
 s: sort by SENT traffic (按發送流量排序)
 r: sort by RECEIVE traffic (按發送流量排序)
 m: switch between total (KB, B, MB) and KB/s mode (total 全部)
dumpe2fs

返回磁碟管理

dumpe2fs [參數]          列印「ext2/ext3」文件系統的超級塊和塊組資訊
         -b	            列印文件系統中預留的塊資訊
         -ob<超級塊>	  指定檢查文件系統時使用的超級塊
         -OB<塊大小>	  檢查文件系統時使用的指定的塊大小
         -h	            僅顯示超級塊資訊
         -i	            從指定的文件系統映像文件中讀取文件系統資訊
         -x	            以16進位格式列印資訊塊成員
resize2fs

返回磁碟管理

resize2fs [選項] [device] [size]增大或者收縮未載入的ext2/ext3/ext4文件系統的大小
          -d	打開調試特性
          -p	列印已完成的百分比進度條
          -f	強制執行調整大小操作,覆蓋掉安全檢查操作
          -F	開始執行調整大小前,刷新文件系統設備的緩衝區
		  -M    將文件系統縮小到最小值
		  -P    顯示文件系統的最小值
sync

返回磁碟管理

強制將記憶體緩衝區中的數據立即寫入磁碟中,並釋放該數據對應的buffer

od

返回磁碟管理

用於讀取所給予的文件的內容,輸出八進位、十六進位或其它格式編碼的位元組,通常用於顯示或查看文件中不能直接顯示在終端的字元。

主要用來查看保存在二進位文件中的值。比如,程式可能輸出大量的數據記錄,每個數據是一個單精度浮點數。這些數據記錄存放在一個文件中,如果想查看下這個數據,這時候od命令就派上用場了。

od命令主要用來格式化輸出文件數據,即對文件中的數據進行無二義性的解釋。不管是IEEE754格式的浮點數還是ASCII碼,od命令都能按照需求輸出它們的值。

od [參數] [文件]
   -t<輸出格式>	     設置輸出格式
   -s<字元串字元數>	只顯示符合指定的字元數目的字元串
   -v	            輸出時不省略重複的數據
   -w<每列字元數>	 設置每列的最大字元數
   -N<字元數目>	      到設置的字元數目為止
   -j<字元數目>	      略過設置的字元數目
   -A	             選擇要以何種基數計算字碼
   -a 	             same as -ta
   -b	             same as -toC
   -c 	             same as -tC
   -d	             same as -tu2
   -f 	             same as -tfF
   -h, -x	         same as -tx2
   -i	             same as -td2
   -l 	             same as -td4
   -o	             same as -to2

Example:
[linuxde@localhost ~]$ echo abcdef g > tmp  # 創建 tmp 文件

說明:使用單位元組八進位解釋進行輸出,注意左側的默認地址格式為八位元組
[linuxde@localhost ~]$ od -b tmp
0000000 141 142 143 144 145 146 040 147 012
0000011

說明:使用ASCII碼進行輸出,注意其中包括轉義字元
[linuxde@localhost ~]$ od -c tmp
0000000   a   b   c   d   e   f       g  \n
0000011

說明:使用單位元組十進位進行解釋
[linuxde@localhost ~]$ od -t d1 tmp
0000000   97   98   99  100  101  102   32  103   10
0000011

說明:設置地址格式為十進位。
[linuxde@localhost ~]$ od -A d -c tmp
0000000   a   b   c   d   e   f       g  \n
0000009

說明:設置地址格式為十六進位
[linuxde@localhost ~]$ od -A x -c tmp
000000   a   b   c   d   e   f       g  \n
000009

說明:跳過開始的兩個位元組
[linuxde@localhost ~]$ od -j 2 -c tmp
0000002   c   d   e   f       g  \n
0000011

說明:跳過開始的兩個位元組,並且僅輸出兩個位元組
[linuxde@localhost ~]$ od -N 2 -j 2 -c tmp
0000002   c   d
0000004

說明:每行僅輸出1個位元組
[linuxde@localhost ~]$ od -w1 -c tmp
0000000   a
0000001   b
0000002   c
0000003   d
0000004   e
0000005   f
0000006   
0000007   g
0000010  \n
0000011

說明:每行輸出兩個位元組
[linuxde@localhost ~]$ od -w2 -c tmp
0000000   a   b
0000002   c   d
0000004   e   f
0000006       g
0000010  \n
0000011

說明:每行輸出3個位元組,並使用八進位單位元組進行解釋
[linuxde@localhost ~]$ od -w3 -b tmp
0000000 141 142 143
0000003 144 145 146
0000006 040 147 012
0000011
sysctl

返迴文件系統結構

返回網路管理

用於在內核運行時動態地修改內核的運行參數,可用的內核參數在目錄「/proc/sys」中。

它包含一些TCP/ip堆棧和虛擬記憶體系統的高級選項, 這可以讓有經驗的管理員提高引人注目的系統性能。用sysctl可以讀取設置超過五百個系統變數。

sysctl命令對內核參數的修改僅在當前生效,重啟系統後參數丟失。如果希望參數永久生效可以修改配置文件「/etc/sysctl.conf」。

sysctl [選項] [參數]
              參數:變數=值:設置內核參數對應的變數值
       -n	列印值時不列印關鍵字
       -e	忽略未知關鍵字錯誤
       -N	僅列印名稱
       -q   不顯示設置為stdout的值
       -w	當改變sysctl設置時使用此項
       -p	從配置文件「/etc/sysctl.conf」載入內核參數設置
       -a	列印當前所有可用的內核參數變數和值
       -A	以表格方式列印當前所有可用的內核參數變數和值

讀一個指定的變數:
$ sysctl net.ipv6.neigh.lo.locktime
net.ipv6.neigh.lo.locktime = 0
修改指定變數的值:
$ sysctl net.ipv6.neigh.lo.locktime=1
net.ipv6.neigh.lo.locktime = 1 

您可以使用sysctl修改系統變數,也可以通過編輯sysctl.conf文件來修改系統變數。sysctl.conf看起來很像rc.conf。它用variable=value的形式來設定值。指定的值在系統進入多用戶模式之後被設定。並不是所有的變數都可以在這個模式下設定。

sysctl變數的設置通常是字元串、數字或者布爾型。(布爾型用 1 來表示’yes‘,用 0 來表示’no’)。

sysctl -w kernel.sysrq=0
sysctl -w kernel.core_uses_pid=1
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.tcp_max_syn_backlog=2048
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_synack_retries=2
sysctl -w net.ipv4.tcp_keepalive_time=3600
sysctl -w net.ipv4.tcp_window_scaling=1
sysctl -w net.ipv4.tcp_sack=1

永久生效修改配置文件:/etc/sysctl.conf編輯完後,請執行sysctl -p /etc/sysctl.conf使變動立即生效

# Controls source route verification
# Default should work for all interfaces
net.ipv4.conf.default.rp_filter = 1
# net.ipv4.conf.all.rp_filter = 1
# net.ipv4.conf.lo.rp_filter = 1
# net.ipv4.conf.eth0.rp_filter = 1

# Disables IP source routing
# Default should work for all interfaces
net.ipv4.conf.default.accept_source_route = 0
# net.ipv4.conf.all.accept_source_route = 0
# net.ipv4.conf.lo.accept_source_route = 0
# net.ipv4.conf.eth0.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename.
# Useful for debugging multi-threaded applications.
kernel.core_uses_pid = 1

# Increase maximum amount of memory allocated to shm
# Controls the maximum shared segment size, in bytes
# 執行緒可使用的最大共享記憶體
# Only uncomment if needed!
# kernel.shmmax = 67108864

# Controls the maximum number of shared memory segments, in pages
# 最大執行緒數量
# Only uncomment if needed!
# kernel.shmall = 4294967296

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536
 
# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Disable ICMP Redirect Acceptance
# Default should work for all interfaces
net.ipv4.conf.default.accept_redirects = 0
# net.ipv4.conf.all.accept_redirects = 0
# net.ipv4.conf.lo.accept_redirects = 0
# net.ipv4.conf.eth0.accept_redirects = 0

# enable Log Spoofed Packets, Source Routed Packets, Redirect Packets
# Default should work for all interfaces
net.ipv4.conf.default.log_martians = 1
# net.ipv4.conf.all.log_martians = 1
# net.ipv4.conf.lo.log_martians = 1
# net.ipv4.conf.eth0.log_martians = 1

# Decrease the time default value for tcp_fin_timeout connection
net.ipv4.tcp_fin_timeout = 25

# Decrease the time default value for tcp_keepalive_time connection
net.ipv4.tcp_keepalive_time = 1200

# Turn on the tcp_window_scaling
net.ipv4.tcp_window_scaling = 1

# Turn on the tcp_sack
net.ipv4.tcp_sack = 1

# tcp_fack should be on because of sack
net.ipv4.tcp_fack = 1

# Turn on the tcp_timestamps
net.ipv4.tcp_timestamps = 1

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

# Enable ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

# make more local ports available
# net.ipv4.ip_local_port_range = 1024 65000

# Controls IP packet forwarding
# net.ipv4.ip_forward = 0

# set TCP Re-Ordering value in kernel to 『5′
net.ipv4.tcp_reordering = 5

# Lower syn retry rates
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 3

# Set Max SYN Backlog to 『2048′ 未完成連接隊列大小
net.ipv4.tcp_max_syn_backlog = 2048

# Various Settings
# 進入包的最大設備隊列.默認是300,對重負載伺服器而言,可調整到1024.
net.core.netdev_max_backlog = 1024

# Increase the maximum number of skb-heads to be cached
net.core.hot_list_length = 256

# 開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,關閉;
net.ipv4.tcp_syncookies = 1

# 開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連接,默認為0,關閉;
net.ipv4.tcp_tw_reuse = 1

# 開啟TCP連接中TIME-WAIT sockets的快速回收,默認為0,關閉。
net.ipv4.tcp_tw_recycle = 1

# 如果套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。
net.ipv4.tcp_fin_timeout = 30

# 用於提供tcp/udp連接的隨機埠範圍
net.ipv4.ip_local_port_range = 32768 61000

# 進入SYN包的最大請求隊列的長度,默認為1024,加大隊列長度為8192,可以容納更多等待連接的網路連接數。
net.ipv4.tcp_max_syn_backlog = 8192

# Increase the tcp-time-wait buckets pool size
# 系統同時保持TIME_WAIT套接字的最大數量,避免Squid伺服器被大量的TIME_WAIT套接字拖死。
# 如果超過這個數字,TIME_WAIT套接字將立刻被清除並列印警告資訊。
# 對於Apache、Nginx等伺服器,上幾行的參數可以很好地減少TIME_WAIT套接字數量
# 對於Squid,默認為180000,改為 5000。
net.ipv4.tcp_max_tw_buckets = 5000

# This will increase the amount of memory available for socket input/output queues
net.core.rmem_default = 65535
# 最大socket讀buffer
net.core.rmem_max = 8388608
# TCP讀buffer
net.ipv4.tcp_rmem = 4096 87380 8388608
net.core.wmem_default = 65535
# 最大socket寫buffer
net.core.wmem_max = 8388608
# TCP寫buffer
net.ipv4.tcp_wmem = 4096 65535 8388608
# net.ipv4.tcp_mem[0]:低於此值,TCP沒有記憶體壓力.
# net.ipv4.tcp_mem[1]:在此值下,進入記憶體壓力階段.
# net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket.
# 上述記憶體單位是頁,而不是位元組
net.ipv4.tcp_mem = 8388608 8388608 8388608
# socket buffer的最大初始化值,默認10K.
net.core.optmem_max = 40960

# Disable ping requests
net.ipv4.icmp_echo_ignore_all = 1

# 最大的待發送TCP數據緩衝區空間
net.inet.tcp.sendspace = 65536

# 最大的接受TCP緩衝區空間
net.inet.tcp.recvspace = 65536

# 最大的接受UDP緩衝區大小
net.inet.udp.sendspace = 65535

# 最大的發送UDP數據緩衝區大小
net.inet.udp.maxdgram = 65535

# 本地套接字連接的數據發送空間
net.local.stream.sendspace = 65535

# 加快網路性能的協議
net.inet.tcp.rfc1323 = 1
net.inet.tcp.rfc1644 = 1
net.inet.tcp.rfc3042 = 1
net.inet.tcp.rfc3390 = 1

# 最大的套接字緩衝區
kern.ipc.maxsockbuf = 2097152

# 系統中允許的最多文件數量
kern.maxfiles = 65536

# 每個進程能夠同時打開的最大文件數量
kern.maxfilesperproc=32768

# 當一台電腦發起TCP連接請求時,系統會回應ACK應答數據包。
# 該選項設置是否延遲ACK應答數據包,把它和包含數據的數據包一起發送,在高速網路和低負載的情況下會略微提高性能,
# 但在網路連接較差的時候,對方電腦得不到應答會持續發起連接請求,反而會降低性能
net.inet.tcp.delayed_ack=0

# 屏蔽ICMP重定向功能
net.inet.icmp.drop_redirect=1
net.inet.icmp.log_redirect=1
net.inet.ip.redirect=0
net.inet6.ip6.redirect=0

# 防止ICMP廣播風暴
net.inet.icmp.bmcastecho=0
net.inet.icmp.maskrepl=0

# 限制系統發送ICMP速率
net.inet.icmp.icmplim=100

# 安全參數,編譯內核的時候加了options TCP_DROP_SYNFIN才可以用
net.inet.icmp.icmplim_output=0
net.inet.tcp.drop_synfin=1

# 開啟會幫助系統清除沒有正常斷開的TCP連接,這增加了一些網路頻寬的使用,但是一些死掉的連接最終能被識別並清除。
# 死的TCP連接是被撥號用戶存取的系統的一個特別的問題,因為用戶經常斷開modem而不正確的關閉活動的連接
net.inet.tcp.always_keepalive=1

# 若看到net.inet.ip.intr_queue_drops 這個在增加,就要調大net.inet.ip.intr_queue_maxlen,為0最好
# net.inet.ip.intr_queue_maxlen=1000

# 防止DOS攻擊,默認為30000
net.inet.tcp.msl=7500

# 防止DOS攻擊
net.inet.tcp.syncookies=1

# 接收到一個已經關閉的埠發來的所有包,直接drop,如果設置為1則是只針對TCP包
net.inet.tcp.blackhole=2

# 接收到一個已經關閉的埠發來的所有UDP包直接drop
net.inet.udp.blackhole=1

# 為網路數據連接時提供緩衝
net.inet.tcp.inflight.enable=1

# 如果打開的話每個目標地址一次轉發成功以後它的數據都將被記錄進路由表和arp數據表,
# 節約路由的計算時間,但會需要大量的內核記憶體空間來保存路由表
net.inet.ip.fastforwarding=0

# kernel編譯打開options POLLING功能,高負載情況下使用低負載不推薦SMP不能和polling一起用
# kern.polling.enable=1

# 並發連接數,默認為128,推薦在1024-4096之間,數字越大佔用記憶體也越大
# kern.ipc.somaxconn=32768

# 禁止用戶查看其他用戶的進程
# security.bsd.see_other_uids=0

# 設置kernel安全級別
# kern.securelevel=0

# 記錄下任何TCP連接
# net.inet.tcp.log_in_vain=1

# 記錄下任何UDP連接
# net.inet.udp.log_in_vain=1

# 防止不正確的udp包的攻擊
# net.inet.udp.checksum=1

# 僅為執行緒提供物理記憶體支援,需要256兆以上記憶體
kern.ipc.shm_use_phys=1

# 程式崩潰時不記錄
kern.coredump=0

# 本地數據流接收和發送空間
net.local.stream.recvspace=65536
net.local.dgram.maxdgram=16384
net.local.dgram.recvspace=65536

# 本地數據最大數量
net.inet.raw.maxdgram=65536

# 本地數據流接收空間
net.inet.raw.recvspace=65536

# 數據包數據段大小,ADSL為1452。
net.inet.tcp.mssdflt=1460

# 為網路數據連接時提供緩衝
net.inet.tcp.inflight_enable=1

# 數據包數據段最小值,ADSL為1452
net.inet.tcp.minmss=1460

# ipf防火牆動態規則數量,默認為4096,增大該值可以防止某些病毒發送大量TCP連接,導致不能建立正常連接
net.inet.ip.fw.dyn_max=65535

# 設置ipf防火牆TCP連接空閑保留時間,默認8640000(120小時)
net.inet.ipf.fr_tcpidletimeout=864000

# listen()的默認參數,掛起請求的最大數量,完成連接隊列大小.默認是128.對繁忙的伺服器,增加該值有助於網路性能.可調整到1024.
net.core.somaxconn=128

# 指定在底層IP接管之前TCP最少執行的重傳次數,默認值是3
net.ipv4.tcp_retries1=3

# 指定連接放棄前TCP最多可以執行的重傳次數,默認值15.可減少到5,以儘早釋放內核資源.
net.ipv4.tcp_retries2=15

# 這3個參數與TCP KeepAlive有關.默認值是:
# 如果某個TCP連接在 idle 2個小時後,內核才發起 probe .如果 probe 9次(每次75秒)不成功,內核才徹底放棄,認為該連接已失效.
# net.ipv4.tcp_keepalive_time = 7200 seconds (2 hours)
# net.ipv4.tcp_keepalive_probes = 9
# net.ipv4.tcp_keepalive_intvl = 75 seconds
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
dmesg

返迴文件系統結構

用於檢查和控制內核的環形緩衝區。kernel會將開機資訊存儲在ring buffer中。您若是開機時來不及查看資訊,可利用dmesg來查看。開機資訊保存在/var/log/dmesg文件里。

cat /var/log/dmesg        顯示開機啟動資訊,缺少最後一次的資訊
dmesg                     顯示開機啟動資訊
      -c	              顯示資訊後,清除ring buffer中的內容
      -s <緩衝區大小>	   預設置為8196,剛好等於ring buffer的大小
      -n	              設置記錄資訊的層級
Examples:
dmesg | grep IDE          查看啟動時IDE設備檢測狀況
dmesg | tail -f           列印輸出最近一次的資訊
lscpu

返迴文件系統結構

lscpu:從sysfs和/proc/cpuinfo收集cpu體系結構資訊。
命令的輸出比較易讀,命令輸出的資訊包含cpu數量,執行緒,核數,套接字等。
      -a	列印在線和離線的CPU
      -b	僅列印在線CPU
      -c	僅列印離線CPU
free

返迴文件系統結構

free 不代參顯示系統記憶體,包括空閑、已用、交換、緩衝、快取和交換的記憶體總數。
     通過解析文件 /proc/meminfo 收集
     -b	以Byte顯示記憶體使用情況
     -k	以kb為單位顯示記憶體使用情況
     -m	以mb為單位顯示記憶體使用情況
     -g	以gb為單位顯示記憶體使用情況
     -s	持續顯示記憶體
     -t	顯示記憶體使用總合
uptime

返迴文件系統結構

uptime 獲取主機運行時間和查詢Linux系統負載等資訊
       -p	以漂亮的格式顯示機器正常運行的時間
       -s	系統自開始運行時間,格式為yyyy-mm-dd hh:mm:ss
w

返迴文件系統結構

w                   顯示已經登陸系統的用戶列表,並顯示用戶正在執行的指令
  -h/--no-header	不列印頭資訊
  -u/--no-current	當顯示當前進程和cpu時間時忽略用戶名
  -s/--short	    使用短輸出格式
  -f/--from	        顯示用戶從哪登錄
  -o/--old-style	老式輸出
  -i/--ip-addr	    顯示IP地址而不是主機名(如果可能)
kill

返回進程管理

刪除執行中的程式或工作,默認訊號15,強制殺死訊號9。

kill [options] [signal] PID 
     -l	列出系統支援的訊號
     -s	指定向進程發送的訊號
     -a	處理當前進程時不限制命令名和進程號的對應關係
     -p	指定kill命令只列印相關進程的進程號,而不發送任何訊號
[root@oldboyedu-lnb ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
HUP     1   (掛斷)控制終端或者控制進程死亡時向關聯會話中的進程發出
             對daemon充當reload,對普通進程就是殺掉。
INT     2    中斷(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM   15    終止
KILL    9    強制終止
CONT   18    繼續(與STOP相反, fg/bg命令)
STOP   19    暫停(同 Ctrl + Z)
kill %n      n為jobs顯示的作業號
pkill

返回進程管理

按照進程名殺死一組同名進程

pkill [options] [signal] 進程名
      -o	僅向找到的最小(起始)進程號發送訊號
      -n	僅向找到的最大(結束)進程號發送訊號
      -P	指定父進程號發送訊號
      -g	指定進程組
      -t	指定開啟進程的終端
killall

返回進程管理

使用進程名稱殺死一組同名進程

yum -y install psmisc

Psmisc軟體包包含三個幫助管理/proc目錄的程式。
fuser 顯示使用指定文件或者文件系統的進程的PID。
killall 殺死某個名字的進程,它向運行指定命令的所有進程發出訊號。
pstree 樹型顯示當前運行的進程

killall [options] [signal] 進程名
        -e	對長名稱進行精確匹配
        -l	列印所有已知訊號列表
        -p	殺死進程所屬的進程組
        -i	互動式殺死進程,殺死進程前需要進行確認
        -q  如果沒有進程被殺死。則不輸出任何資訊;
        -r	使用正規表達式匹配要殺死的進程名稱
        -s	用指定的進程號代替默認訊號「SIGTERM」
        -u	殺死指定用戶的進程
fuser
yum -y install psmisc

Psmisc軟體包包含三個幫助管理/proc目錄的程式。
fuser 顯示使用指定文件或者文件系統的進程的PID。
killall 殺死某個名字的進程,它向運行指定命令的所有進程發出訊號。
pstree 樹型顯示當前運行的進程

fuser [-Muvw] [-a|-s] [-4|-6] [-c|-m|-n SPACE] [-k [-i] [-SIGNAL]] NAME...
fuser -l         列出所有已知的訊號名稱。
      -a         顯示所有命令行中指定的文件,默認情況下被訪問的文件才會被顯示。
      -c         和-m一樣,用於POSIX兼容。
      -k         殺掉訪問文件的進程。如果沒有指定-signal就會發送SIGKILL訊號。
      -i         殺掉進程之前詢問用戶。
      -m NAME    指定一個掛載文件系統上的文件或者被掛載的塊設備NAME。
	             這樣所有訪問這個文件或者文件系統的進程都會被列出來。
				 如果指定的是一個目錄會自動轉換成」NAME/」,並使用所有掛載在那個目錄下面的文件系統。
      -M NAME    僅當NAME是掛載點時完成請求
	  -n space   指定一個不同的命名空間(space).這裡支援不同的空間文件(文件名,默認值)、tcp(本地tcp埠)、udp(本地udp埠)。
	             埠可以指定埠號或者名稱,例如:NAME/space (即形如:80/tcp之類的表示)。
      -s         靜默模式,這時候-u,-v會被忽略。
      -SIGNAL    使用指定的訊號,而不是用SIGKILL來殺掉進程。可以通過名稱或號碼來表示訊號(例如-HUP,-1)。
      -u         在每個PID後面添加進程擁有者的用戶名稱。
      -v         詳細模式。輸出似ps命令的輸出,包含PID,USER,COMMAND等許多域,如果是內核訪問的那麼PID為kernel.
      -w         只終止具有寫訪問許可權的進程
	  -4         使用IPV4套接字,只在-n的tcp和udp的命名存在時不被忽略。
      -6         使用IPV6套接字,只在-n的tcp和udp的命名存在時不被忽略。
      -          重置所有的選項,把訊號設置為SIGKILL.
	  
fuser -v -n tcp 22         查看那些程式使用tcp的22埠
or
fuser -v 22/tcp
fuser -k -SIGHUP NAME      掛起進程,發送HUP訊號
dd

返回磁碟管理

返迴文件操作

複製文件並對原文件的內容進行轉換和格式化處理。針對於塊設備的拷貝和複製,用做塊設備的備份。

dd if=file of=file [bs][count]
   bs=BYTES        read and write up to BYTES bytes at a time (same as ibs and obs)
   cbs=BYTES       convert BYTES bytes at a time (一次轉化 BYTES 個 byte)
   conv=CONVS      按照逗號分隔符號列錶轉換文件
   count=N         copy only N input blocks (blocks 塊)
   ibs=BYTES       read up to BYTES bytes at a time (default: 512)
   if=FILE         從文件而不是 stdin 讀取
   iflag=FLAGS     按逗號分隔符列表讀取
   obs=BYTES       write BYTES bytes at a time (default: 512)
   of=FILE         寫入文件而不是 stdout
   oflag=FLAGS     按逗號分隔符列表寫入
   seek=N          在輸出開始時跳過N個obs大小的塊
   skip=N          在輸入開始時跳過N個ibs大小的塊
   status=LEVEL    要列印到stderr的資訊級別

CONVS=conversion[,conversion...]轉換參數:
      ascii     轉換 EBCDIC 為 ASCII
      ebcdic    轉換 ASCII 為 EBCDIC
      lcase     把大寫字元轉換為小寫字元
      ucase     把小寫字元轉換為大寫字元
      nocreat   不創建輸出文件
      noerror   出錯時不停止
      notrunc   不截斷輸出文件
      sync      把每個輸入塊填充到ibs個位元組,不足部分用空(NUL)字元補齊

Example:
備份MBR:
dd if=/dev/sda of=/tmp/mbr.bak bs=512 count=1
#  從哪取出數據  放到哪    佔用1個block多少空間 總共使用多少個block
   
破壞MBR中的 bootloader:
dd if=/dev/zero of=/dev/sda bs=64 count=1 seek=446

大於2K的二進位文件fileA,從第64個位元組位置開始讀取,需要讀取的大小是128Byts。
fileB, 把上面讀取到的128Bytes寫到第32個位元組開始的位置,替換128Bytes:
dd if=fileA of=fileB bs=1 count=128 skip=63 seek=31 conv=notrunc
 
備份:
dd if=/dev/sdx of=/dev/sdy                將/dev/sdx整盤備份到/dev/sdy
dd if=/dev/sdx of=/path/to/image          將/dev/sdx全盤數據備份到指定路徑的image文件
dd if=/dev/sdx | gzip >/path/to/image.gz  備份/dev/sdx全盤數據,壓縮保存到指定路徑

恢復:
dd if=/path/to/image of=/dev/sdx             將備份文件恢復到指定盤
gzip -dc /path/to/image.gz | dd of=/dev/sdx  將壓縮的備份文件恢復到指定盤

dd if=/dev/mem of=/root/mem.bin bs=1024      將記憶體里的數據拷貝到root目錄下的mem.bin文件
dd if=/dev/cdrom of=/root/cd.iso             拷貝光碟數據到root文件夾下,並保存為cd.iso文件
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=100000  測試硬碟寫速度
dd if=/root/1Gb.file bs=64k | dd of=/dev/null           測試硬碟讀速度
dd if=/dev/sda of=/dev/sda                              修復硬碟

備份/dev/hdb全盤數據,並利用gzip工具進行壓縮,保存到指定路徑
#dd if=/dev/hdb | gzip > /root/image.gz
.將壓縮的備份文件恢復到指定盤
#gzip -dc /root/image.gz | dd of=/dev/hdb

銷毀磁碟數據:
利用隨機的數據填充硬碟,在某些必要的場合可以用來銷毀數據,執行此操作以後,/dev/sda1將無法掛載,創建和拷貝操作無法執行
dd if=/dev/urandom of=/dev/sda1

創建大文件:
通過比較dd指令輸出中所顯示的命令執行時間,即可確定系統最佳的 block BYTES 大小
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
df

返回磁碟管理

df                           顯示每個文件所在文件系統的資訊
   -a, --all                 包含全部的文件系統
   -B, --block-size=SIZE     以指定的 SIZE 大小來顯示區塊數目
       --direct              顯示文件而不是掛載點的統計資訊
       --total               產生一個總數
   -h, --human-readable      以可讀性較高的方式來顯示資訊(e.g., 1K 234M 2G)
   -H, --si                  like -h, but use powers of 1000 not 1024
   -i, --inodes		         顯示 inode 資訊而非塊使用量
   -k			             = --block-size=1K
   -l, --local		         只顯示本機的文件系統
       --no-sync		     在取得磁碟使用資訊前,不要執行sync指令(默認)
   -P, --portability         使用POSIX的輸出格式
       --sync                在取得磁碟使用資訊前,先執行sync指令
   -t, --type=TYPE           僅顯示指定文件系統類型 TYPE 的磁碟資訊
   -T, --print-type          顯示文件系統的類型
   -x, --exclude-type=TYPE   不要顯示指定文件系統類型 TYPE 的磁碟資訊 

df -h                     查看硬碟分區、臨時文件系統和devtmpfs文件系統使用情況
df -hT                    查看硬碟分區、臨時文件系統和devtmpfs文件系統使用情況及其文件類型
df -i                     查看硬碟分區、臨時文件系統和devtmpfs文件系統 inode 使用情況
getconf PAGESIZE          查看默認塊大小
du

返迴文件系統結構

du                           匯總每個文件的磁碟使用情況,對於目錄遞歸
   -0,--null                 以0位元組而不是換行符結束每個輸出行
   -a,--all                  所有文件的寫入計數,而不僅僅是目錄
      --apparent-size        列印明顯的大小,而不是磁碟使用情況
   -B,--block-size=SIZE      列印前設置 block-size 單位 SIZE
   -b,--bytes                equivalent to '--apparent-size --block-size=1'
   -c,--total                產生一個總數
   -D,-H,--dereference-args  顯示指定符號鏈接的源文件大小,命令行上的
   -d,--max-depth=N          print the total for a directory (or file, with --all)
      --files0-from=F        總結磁碟使用情況:文件 F 中指定的以NUL結尾的文件名;
                             if F is -, then read names from standard input
   -h,--human-readable       以可讀性較高的方式來顯示資訊(e.g., 1K 234M 2G)
      --inodes               列出索引節點用法資訊,而不是塊用法
   -k                        like --block-size=1K
   -L,--dereference          顯示指定符號鏈接的源文件大小
   -l,--count-links          重複計算硬體鏈接的文件
   -m                        like --block-size=1M
   -P,--no-dereference       不顯示指定符號鏈接的源文件大小 (this is the default)
   -S,--separate-dirs        顯示個別目錄的大小時,並不含其子目錄的大小
      --si                   like -h, but use powers of 1000 not 1024
   -s,--summarize            只顯示每個參數的合計
   -t,--threshold=SIZE       如果為正值,則排除小於大小的條目,如果為負數,則為大於大小的條目
      --time                 顯示目錄或其子目錄中任何文件的最後修改時間
      --time-style=STYLE     使用樣式顯示時間 like 'date'
   -X,--exclude-from=FILE    排除與文件 FILE 中任何模式匹配的文件
      --exclude=PATTERN      排除匹配 PATTERN 的文件
   -x,--one-file-system      跳過不同文件系統上的目錄
Example:
du -sh                       查看所在目錄的大小,以人類可讀方式
du -m                        查看文件大小,並以m為單位顯示
du -d n                      查看所在目錄的大小,深入n層
mtr

返回網路管理

  • MTR(My traceroute)是幾乎所有Linux發行版本預裝的網路測試工具
  • MTR工具將ping和traceroute命令的功能併入了同一個工具中,實現更強大的功能。
  • Linux版本的mtr命令默認發送ICMP數據包進行鏈路探測。可以通過「-u」參數來指定使用UDP數據包用於探測。
  • 相對於traceroute命令只會做一次鏈路跟蹤測試,mtr命令會對鏈路上的相關節點做持續探測並給出相應的統計資訊。所以,mtr命令能避免節點波動對測試結果的影響,所以其測試結果更正確,建議優先使用。

運行Mtr指定一個IP地址,Mtr會查看運行Mtr的主機和指定目標主機之間的網路節點。在確定目標主機和本地主機間每個網路節點的IP地址後,它向每個網路節點發送一個ICMP ECHO請求,以確定到每個節點的鏈路的品質。

通過發送有目的的低TTL的包。它繼續以較低的TTL發送數據包,記錄中間路由器。這允許MTR列印Internet路由的響應百分比和響應時間。

 yum -y install mtr
mtr [-hvrwctglspniu46] [--help] [--version] [--report] [--report-wide] 
    [--report-cycles=COUNT] [--curses] [--gtk] [--raw] [--split] [--no-dns] 
    [--address interface] [--psize=bytes/-s bytes] [--interval=SECONDS] HOSTNAME
    [PACKETSIZE]
    -r, --report       以報告模式顯示,默認動態的顯示
    -p, --split        將每次追蹤的結果分別列出來。
    -c	               設置每秒發送數據包的數量,默認值是10
    -n, --no-dns       不解析dns
    -s, --psize	       指定ping數據包的大小
    -w, --report-wide  使用長版本的主機名,您可以看到每個跳的完整主機名
    -a, -address       設置發送數據包的IP地址。用於主機有多個IP時。
    -i                 以更快的速率運行報告,以顯示只能在網路擁塞期間發生的數據包丟失。默認1秒
    -P                 指定TCP埠
    -4                 只使用IPv4協議。
    -6                 只使用IPv6協議。
另外,也可以在mtr命令運行過程中,輸入相應字母來快速切換模式。
d:切換顯示模式。
n:切換啟用或禁用DNS域名解析。
u:切換使用ICMP或UDP數據包進行探測


[root@localhost ~]# mtr -P 443 -i 0.5 -r www.baidu.com
Start: 2017-08-22T22:51:17+0800
HOST: PBSVVTRADER02               Loss%   Snt   Last   Avg  Best  Wrst StDev
  1.|-- 10.1.1.254                 0.0%    10    0.7   0.7   0.7   0.8   0.0
  2.|-- 10.1.253.22                0.0%    10    0.5   0.5   0.4   0.7   0.1
  3.|-- 210.74.5.3                 0.0%    10    1.1   1.1   0.8   1.3   0.2
  4.|-- 10.244.246.13              0.0%    10    3.2   2.6   1.7   6.3   1.4
  5.|-- 10.244.200.5               0.0%    10    2.0   3.7   1.7  19.2   5.4
  6.|-- 10.244.253.1               0.0%    10    2.6   2.6   2.4   2.9   0.1
  7.|-- 10.244.199.237             0.0%    10    3.4   3.3   3.0   3.7   0.2
  8.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
  9.|-- 220.181.177.41            90.0%    10   98.6  98.6  98.6  98.6   0.0
 10.|-- 220.181.0.46              80.0%    10    4.3   4.5   4.3   4.7   0.2
 11.|-- 180.149.128.190            0.0%    10    7.1  13.8   5.8  63.9  17.9
 12.|-- 180.149.129.54             0.0%    10    4.3   3.9   3.8   4.3   0.2
 13.|-- 192.168.0.121              0.0%    10    4.2   4.1   4.0   4.3   0.1
 14.|-- ???                       100.0    10    0.0   0.0   0.0   0.0   0.0
 15.|-- 180.149.131.98             0.0%    10    4.0   3.8   3.5   4.1   0.2
 
返回結果中各數據列的說明:
第一列(Host):節點IP地址和域名。如前面所示,按n鍵可以切換顯示。
第二列(Loss%):節點丟包率。
第三列(Snt):每秒發送數據包數。默認值是10,可以通過參數「-c」指定。
第四列(Last):最近一次的探測延遲值。
第五、六、七列(Avg、Best、Wrst):分別是探測延遲的平均值、最小值和最大值。
第八列(StDev):標準偏差。越大說明相應節點越不穩定。
ping

返回網路管理

ping [options] [ hop ...] destination_host
     -a             聽得見的ping。這樣就無需查看ping輸出。
     -A             自適應ping。數據包間隔會適應往返時間,非超級用戶,最小間隔為200毫秒
     -b             允許ping通廣播地址。 
     -B             不允許ping更改探針的源地址。當ping開始時,該地址將綁定到所選的地址。
     -c<完成次數>    設置完成要求回應的次數;
     -d             使用Socket的SO_DEBUG功能;
     -f             極限檢測,以最快的速度輸出數據包,或者每秒輸出100次。
     -i<間隔秒數>    指定收發資訊的間隔時間;(default:1 seconds)
                    只有超級用戶可以將等待時間設置為小於0.2秒的值。(與-f不兼容)
     -I 介面地址     將源地址設置為指定的 interface address,參數可以是IP地址或設備名稱。
     -L             禁止多播數據包的環回。
     -n             只輸出數值
     -p<範本樣式>    設置填滿數據包的範本樣式,例如,「-p ff」將填充所有發送的數據包。
     -q             安靜的輸出。不顯示指令執行過程,開頭和結尾的相關資訊除外
     -Q tos         設置ICMP數據報中與服務品質相關的位。
                    tos可以是十進位或十六進位數字。不應同時設置多個TOS位。
     -R             記錄路由(僅IPv4)在返回的數據包上顯示路由緩衝區。最多9條
     -r             繞過常規路由表,並直接發送到連接的網路上的主機。
                    如果主機不在直接連接的網路上,則返回錯誤。
                    此選項可用於通過沒有路由的介面對本地主機執行ping操作
     -s<數據包大小>  設置要發送的數據位元組數。默認值為56
     -S sndbuf      設置套接字sndbuf。如果未指定,則選擇緩衝最多一個數據包。
     -t<存活數值>    設置存活數值TTL的大小
     -v             詳細輸出
     -w             ping退出之前的超時(以秒為單位),無論發送或接收了多少個數據包。
     -W             超時
                    等待響應的時間(以秒為單位)。
                    在沒有任何響應的情況下,此選項僅影響ICMP超時,否則ping將等待兩個RTT。
nohup

返回進程管理

忽略SIGHUP訊號

nohup命令可以將程式以忽略掛起訊號的方式運行起來,被運行的程式的輸出資訊將不會顯示到終端。

nohup 命令運行由 Command參數和任何相關的Arg參數指定的命令,同時忽略所有的掛起 (SIGHUP) 訊號,或者修改用 -p 選項指定的進程來忽略所有的掛起 (SIGHUP) 訊號(關閉終端、註銷用戶等,但是注意 ctrl + c 不是掛起訊號)。 nohup 命令還可以在註銷後運行後台中的程式。要運行後台中的 nohup 命令,添加 &(表示「and」的符號)到命令的尾部。

無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。

如果當前目錄的 nohup.out 文件不可寫,輸出重定向到$HOME/nohup.out文件中。

如果沒有文件能創建或打開以用於追加,那麼 command 參數指定的命令不可調用。

如果標準錯誤是一個終端,那麼把指定的命令寫給標準錯誤的所有輸出作為標準輸出重定向到相同的文件描述符。

註: -p pid 和 Command 不能一起指定。
使用 -p pid 時,指定進程的輸出將不會重定向到 nohup.out。
使用ctrl + c nohup bash wwc.sh 會停止運行,但是 bash wwc.sh & 會正常運行;直接關閉終端 nohup bash wwc.sh 會正常運行,bash wwc.sh & 會停止;所以要 nohup 跟 & 結合使用。

nohup Command [ Arg ... ] [&]
      -p pid
pid是正在運行的進程的進程id。nohup命令修改指定的進程,以忽略所有掛起(SIGHUP)訊號。

要在註銷後在後台運行命令,請輸入:
nohup find / -print &
jobs

返回進程管理

顯示系統中的任務列表及其運行狀態,包括後台運行的任務。

該命令可以顯示任務號及其對應的進程號。其中,任務號是以普通用戶的角度進行的,而進程號則是從系統管理員的角度來看的。一個任務可以對應於一個或者多個進程號。

在Linux系統中執行某些操作時候,有時需要將當前任務暫停調至後台,或有時須將後台暫停的任務重啟開啟並調至前台,這一序列的操作將會使用到 jobs、bg、和 fg 三個命令以及兩個快捷鍵來完成

jobs [-lnprs] [jobspec ...]
jobs -x command [args] 將在 command 或 args 中找到的任何 jobspec 替換為相應的進程組ID,
                       並執行向其傳遞args的命令,返回其退出狀態
     -l	顯示作業列表時包括進程號
     -n	顯示上次使用jobs後狀態發生變化的作業
     -p	顯示作業列表時僅顯示其對應的進程號
     -r	僅顯示運行的(running)作業
     -s	僅顯示暫停的(stopped)作業
bg

返回進程管理

將前台作業放到後台運行。

該命令的運行效果與在指令後面添加符號&的效果是相同的,都是將其放到系統後台執行。

bg 指定需要放到後台的作業標識號
fg

返回進程管理

將後台作業(在後台運行的或者在後台掛起的作業)放到前台終端運行。

與bg命令一樣,若後台任務中只有一個,則使用該命令時,可以省略任務號

fg 指定需要放到後台的作業標識號
nice

返回進程管理

以指定nice值啟動其他的程式|命令

nice [參數] [命令]
     -n	指定進程的優先順序(整數 -20~19)(n可省略)
Example:
nice -n 19 tar zcf pack.tar.gz documents ; nice -19 tar zcf pack.tar.gz documents
nice -n -19 tar zcf pack.tar.gz documents ; nice --19 tar zcf pack.tar.gz documents
renice

返回進程管理

修改正在運行的進程的優先順序

該命令預設是以程式識別碼指定程式調整其優先權,您亦可以指定程式群組或用戶名稱調整優先權等級,並修改所有隸屬於該程式群組或用戶的程式的優先權。

只有系統管理者可以改變其他用戶程式的優先權,也僅有系統管理者可以設置負數等級。

renice [-n] <priority> [-p|--pid] <pid>...
                       -g|--pgrp <pgid>...
                       -u|--user <user>...
       -n, --priority <num>   指定nice增量值,此參數為預設值(整數 -20~19)
       -p<程式識別碼>	       改變程式的優先權等級,此參數為預設值
       -g	                  指定進程組id
       -u	                  指定開啟進程的用戶名

Example:
ps axo pid,ni,command | grep sshd  # 顯示進程優先順序
renice -n 10 7018 ; renice 10 7018  # 設置PID 7018 進程的優先順序
chrt

返回進程管理

查看、設置一個進程的實時優先順序狀態,所有優先順序值在0-99範圍內的,都是實時進程,所以這個優先順序範圍也可以叫做實時進程優先順序,而100-139範圍內的是非實時進程。

Set policy:(policy 策略)
 chrt [options] <priority> <command> [<arg>...]
 chrt [options] --pid <priority> <pid>

Get policy:
 chrt [options] -p <pid>

Policy options:
 -b, --batch          set policy to SCHED_BATCH
 -d, --deadline       set policy to SCHED_DEADLINE
 -f, --fifo           set policy to SCHED_FIFO
 -i, --idle           set policy to SCHED_IDLE
 -o, --other          set policy to SCHED_OTHER
 -r, --rr             set policy to SCHED_RR (default)

調度 options:
 -R, --reset-on-fork       set SCHED_RESET_ON_FORK for FIFO or RR
 -T, --sched-runtime <ns>  runtime parameter for DEADLINE
 -P, --sched-period <ns>   period parameter for DEADLINE
 -D, --sched-deadline <ns> deadline parameter for DEADLINE

Other options:
 -a, --all-tasks      對給定pid的所有任務(執行緒)進行操作
 -m, --max            顯示最小和最大有效優先順序
 -p, --pid            對現有的給定pid進行操作
 -v, --verbose        display status information

Example:
使用SCHED_IDLE解壓縮內核源程式碼存檔:
chrt -i o tar jxf linux-2.6.33.tar.bz2

指定目的進程的PID來更改調度策略:
chrt -p -r 99 1328

更改bash為實時進程,優先順序為10:
chrt -f 10 bash
sleep

返回進程管理

暫停數秒。

後綴可以是s秒(默認值),「m」代表分鐘,「h」代表幾個小時,「d」代表幾天。
這裡的數字可以是任意浮點數。給定兩個或多個參數,由它們的值之和指定暫停時間段。

vtysh

返回網路管理

yum -y install quagga
route

返回網路管理

用來顯示並設置linux內核中的網路路由表,route命令設置的路由主要是靜態路由。

route命令添加路由,不會永久保存。當網卡重啟或者機器重啟之後,該路由就失效了。

在/etc/rc.local中添加route命令來保證該路由設置永久有效。

yum -y install net-tools
route [-nNvee] [-FC] [<AF>]           List kernel routing tables
route [-v] [-FC] {add|del|flush} ...  Modify routing table for AF.(Modify 修改)
      -A	設置地址類型( 默認IPv4)
      -C	列印linux核心的路由快取
      -v	詳細資訊模式
      -n	不執行DNS反向查找,直接顯示數字形式的ip地址
      -e	netstat格式顯示路由表
      -net	到一個網路的路由表
      -host	到一個主機的路由表
                 Add	增加指定的路由記錄
                 Del	刪除指定的路由記錄
                 Target	目的網路或目的主機
                 gw	    設置默認網關
                 mss	設置TCP的最大區塊長度(MSS),單位MB
                 window	指定通過路由表的TCP連接的TCP窗口大小
                 dev	路由記錄所表示的網路介面

Example:
顯示當前路由:
[root@linuxcool ~]$ route
Kernel IP routing table
Destination     Gateway      Genmask        Flags Metric Ref      Use Iface
default         gateway      0.0.0.0         UG    100    0        0 ens192
192.168.60.0    0.0.0.0      255.255.255.0   U     100    0        0 ens192

其中Flags為路由標誌,標記當前網路節點的狀態,Flags標誌說明:
U Up, 表示此路由當前為啟動狀態。
H Host,表示此網關為一主機。
G Gateway,表示此網關為一路由器。
R Reinstate Route,使用動態路由重新初始化的路由。
D Dynamically, 此路由是動態性地寫入。
M Modified,此路由是由路由守護程式或導向器動態修改。
! 表示此路由當前為關閉狀態。

添加|屏蔽|刪除一條路由記錄:
route add -net 192.168.60.0 netmask 255.255.255.0 dev ens192
route add -net 192.168.60.0 netmask 255.255.255.0 reject
route del -net 192.168.60.0 netmask 255.255.255.0 dev ens192 

添加和刪除默認網關:
route add -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.60.1
route add default gw 192.168.60.1
route del -net 0.0.0.0 netmask 0.0.0.0 gw 192.168.60.1
route del default gw 192.168.60.1

添加和刪除到主機路由
route add -host 192.168.4.2 dev eth0:1
route add -host 192.168.4.1 gw 192.168.4.250
route del -host 192.168.4.2 dev eth0:1
route del -host 192.168.4.1 gw 192.168.4.250

添加和刪除到網路的路由
route add -net IP netmask MASK eth0
route add -net IP netmask MASK gw IP
route add -net IP/24 eth1
route del -net IP netmask MASK eth0
route del -net IP netmask MASK gw IP
route del -net IP/24 eth1
netstat

返回網路管理

可以查看介面統計報告

yum -y install net-tools
netstat [-veenNcCF] [<Af>] -r
netstat {-V|--version|-h|--help}
netstat [-vnNcaeol] [<Socket> ...]
netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]
        -r, --route                display routing table                             顯示路由表
        -I, --interfaces=<Iface>   display interface table for <Iface>               顯示網路介面表
        -i, --interfaces           display interface table                           顯示網路介面表
        -g, --groups               display multicast group memberships               顯示多播組成員
        -s, --statistics           display networking statistics (like SNMP)         顯示網路統計數據,如IP/ICMP/SNMP/..各協議統計。
        -M, --masquerade           display masqueraded connections                   顯示偽裝的連接
																				     
        -v, --verbose              be verbose                                        詳細資訊
        -n, --numeric              don't resolve names                               不做名字解析,不加此參數,80埠會顯示成http,127.0.0.1顯示成localhost,uid為0顯示成root等等
        --numeric-hosts            don't resolve host names                          不做主機名解析
        --numeric-ports            don't resolve port names                          不做埠名解析
        --numeric-users            don't resolve user names                          不做用戶名解析
        -N, --symbolic             resolve hardware names                            解析硬體名稱
        -e, --extend               display other/more information                    顯示更多資訊,用戶名,inode
        -p, --programs             display PID/Program name for sockets              顯示pid和程式名字
        -c, --continuous           continuous listing                                持續的列出相關資訊
																				     
        -l, --listening            display listening server sockets                  顯示處於監聽狀態的套接字
        -a, --all, --listening     display all sockets (default: connected)          顯示所有狀態的套接字
        -o, --timers               display timers                                    顯示計時器
        -F, --fib                  display Forwarding Information Base (default)     使用-rF查看路由表時,顯示轉發資訊
        -C, --cache                display routing cache instead of FIB              使用-rC查看路由表時,顯示詳細的路由快取
        -T, --notrim               stop trimming long addresses                      停止修剪長地址
        -Z, --context              display SELinux security context for sockets      顯示套接字的SELINUX上下文

  <Iface>: Name of interface to monitor/list.
  
  <Socket>={-t|--tcp} {-u|--udp} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom
  
  <AF>=Use '-A <af>' or '--<af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 

Example:
netstat -antp        查看所有已經建立的連接 
netstat -utpln       查看本地所有的tpc,udp監聽埠
                     (t=tcp, u=udp, p=program, l=listen, n=numric)	
netstat -anpte       查看tcp鏈接
netstat -anpue       查看udp鏈接
netstat -anpxe       查看unix套接字鏈接
netstat -r           查看路由表      默認輸出netstat -rFd的結果  -F為默認參數
netstat -rC          查看路由快取
netstat -s           查看網路統計資訊,展示各協議的統計資訊
netstat -i           查看網路介面資訊
netstat -ant | grep EST | wc -l 統計伺服器並發連接數
ifconfig

返回網路管理

已過時,請使用ip

network interfaces configuring,用於配置和顯示Linux內核中網路介面的網路參數。

永久配置, 修改網卡的配置文件

yum -y install net-tools
ifconfig [-v] [-a] [-s] [interface]
ifconfig [-v] interface [aftype] options | address ...
OPTIONS
       -a                    顯示所有介面
       -s                    顯示短列表 (like netstat -i)
       -v                    輸出更詳細的資訊
       interface             介面名稱
       up                    激活介面
       down                  關閉介面
       [-]arp                啟用或禁用此介面上的arp協議
       [-]promisc            啟用或禁用介面的混雜模式
       [-]allmulti           啟用或禁用所有多播模式
       mtu N                 設置介面的最大傳輸單元(mtu)
       netmask addr          設置介面子網掩碼
       tunnel ::aa.bb.cc.dd  創建一個新的SIT(IPv6-in-IPv4)設備,隧道到給定的目標
       irq <IRQ地址>          設置網路設備的IRQ
       io_addr <I/O地址>      設置網路設備的I/O地址
       mem_start <記憶體地址>   設置網路設備在主記憶體所佔用的起始地址
       media <網路媒介類型>    設置網路設備的媒介類型
       [-]broadcast [addr]   將要送往指定地址的數據包當成廣播數據包來處理
       [-]pointopoint [addr] 與指定地址的網路設備建立直接連線,此模式具有保密功能
       address               要分配給此介面的IP地址
       txqueuelen length     設置設備的傳輸隊列的長度
FILES
       /proc/net/dev
       /proc/net/if_inet6
ifconfig eth0 up && ifconfig eth0 down ; ifdown eth0 && ifup eth0  重啟網卡eth0
ifconfig eth0:0 10.0.0.100 netmask 255.255.255.0  添加網卡別名

Linux 單網卡配置多個IP地址(添加網卡別名), 永久配置需要手動創建配置文件

  1. 複製並重命名網卡配置文件ifcfg-eth0
cd /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth0:0
  1. 修改新網卡配置文件ifcfg-eth0:0
sed -i 's/eth0/eth0:0/' /etc/sysconfig/network-scripts/ifcfg-eth0:0
sed -i '/^DNS/d;/^GATE/d' /etc/sysconfig/network-scripts/ifcfg-eth0:0
sed -i '/^IPADDR=/c IPADDR=10.0.0.100' /etc/sysconfig/network-scripts/ifcfg-eth0:0
  1. 重啟network.service服務生效
systemctl restart network.service
ip

返回網路管理

用來顯示或操縱Linux主機的路由、網路設備、策略路由和隧道

ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
OBJECT := { link | address | addrlabel | route | rule | neigh | ntable | tunnel
        | tuntap | maddress | mroute | mrule | monitor | xfrm | netns | l2tp |
        tcp_metrics | token | macsec }
OPTIONS := { -V[ersion] | -h[uman-readable] | -s[tatistics] | -d[etails] |
        -r[esolve] | -iec | -f[amily] { inet | inet6 | ipx | dnet | link } | -4
        | -6 | -I | -D | -B | -0 | -l[oops] { maximum-addr-flush-attempts } |
        -o[neline] | -rc[vbuf] [size] | -t[imestamp] | -ts[hort] | -n[etns] name
        | -a[ll] | -c[olor] }
OPTIONS
       -h, -human            輸出帶有人類可讀值的統計資訊,後跟後綴
       -b, -batch <FILENAME> 從提供的文件或標準輸入中讀取命令並調用它們
                             第一次故障將導致ip終止
       -force                批處理模式下出錯時不終止ip
       -s, -stats, -s, -s    輸出更多資訊,可以復用
       -d, -details          輸出更詳細的資訊
       -l, -loops <COUNT>    指定「ip地址刷新」邏輯在放棄之前將嘗試的最大循環數。
	                         默認值為10。零(0)表示循環,直到刪除所有地址。
       -f, -family <FAMILY>  指定要使用的協議族:inet、inet6、bridge、ipx、dnet、mpls或link
       -4                    same as -family inet.
       -6                    same as -family inet6.
       -B                    same as -family bridge.
       -D                    same as -family decnet.
       -I                    same as -family ipx.
       -M                    same as -family mpls.
       -0                    same as -family link.
       -o, -oneline          在單行上輸出每條記錄,並用「\」字元替換換行符
       -r, -resolve          顯示主機時,不使用IP地址,而使用主機的域名
       -n, -netns <NETNS>    將ip切換到指定的網路命名空間 NETNS 實際是簡化:
                      ip netns exec NETNS ip [ OPTIONS ] OBJECT { COMMAND | help }
                      to
                      ip -n[etns] NETNS [ OPTIONS ] OBJECT { COMMAND | help }
       -a, -all              對所有對象執行指定的命令
       -c, -color            使用顏色輸出
       -t, -timestamp        使用監視器選項時顯示當前時間
       -ts, -tshort          短格式時間戳
       -rc, -rcvbuf<SIZE>    設置netlink套接字接收緩衝區大小,默認為1MB
       -iec                  以IEC單位列印人類可讀速率(e.g. 1Ki = 1024).
OBJECT
    address   - 設備上的協議(IP或IPv6)地址.
    addrlabel - 協議地址選擇的標籤配置
    l2tp      - IP上的隧道乙太網(L2TPv3).
    link      - network device.
    maddress  - 多播地址
    monitor   - 查看 netlink 消息
    mroute    - 多播路由快取項
    mrule     - 多播路由策略資料庫中的規則
    neighbour - 管理ARP或NDISC快取項
    netns     - 管理網路命名空間
    ntable    - 管理鄰居快取的操作
    route     - 路由表條目
    rule      - 路由策略資料庫中的規則
    tcp_metrics/tcpmetrics
              - 管理TCP指標
    token     - 管理標記化的介面標識符
    tunnel    - IP隧道
    tuntap    - 管理TUN/TAP設備
    xfrm      - 管理IPSec策略

退出狀態
        如果命令成功,則退出狀態為0;
		如果存在語法錯誤,則退出狀態為1。
        如果內核出口報告了錯誤,則退出狀態為2。

EXAMPLES
       ip addr            顯示分配給所有網路介面的地址
       ip neigh           顯示內核中的當前鄰居表
       ip link set x up   打開 interface x.
       ip link set x down 關閉 interface x.
       ip route           顯示錶路由

SEE ALSO
       ip-address(8), ip-addrlabel(8), ip-l2tp(8), ip-link(8), ip-maddress(8), 
       ip-monitor(8), ip-mroute(8), ip-neighbour(8), ip-netns(8), ip-ntable(8), 
       ip-route(8), ip-rule(8), ip-tcp_metrics(8), ip-token(8), ip-tunnel(8), 
       ip-xfrm(8)
縮寫:
route、r
show、、sh、s、list、lst、ls、l
add、a
change、chg、c
replace、repl、r
delete、del、d
flush、f
table、t
get、g
neighbour、neighbor、neigh、n
ip link add [ link DEVICE ] [ name ] NAME
ip link delete { DEVICE | group GROUP } type TYPE [ ARGS ]
ip link set { DEVICE | group GROUP }
        [ { up | down } ]
ip link show [ DEVICE | group GROUP ] [ up ] [ master DEVICE ] [ type ETYPE ] 
             [ vrf NAME ]

EXAMPLES:
ip link show ; ip l           顯示系統上所有網路介面的狀態。
ip -s -s link ls eth0         same as ifconfig eth0
ip link show type vlan        Shows the vlan devices.
ip link add link eth0 name eth0.10 type vlan id 10
                              在設備eth0上創建新的vlan設備eth0.10。
ip link delete dev eth0.10    Removes vlan device.
ip link s dev eth0 xdp off    關閉設備eth0的XDP
ip link s eth0 down && ip link s eth0 up && dmesg    重啟網卡eth0 並查看日誌
ip link set dev eth0 txqueuelen 100             修改設備傳輸隊列的長度
ip link set dev eth0 mtu 1500                   修改網路設備MTU(最大傳輸單元)
ip link set dev eth0 address 00:01:4f:00:15:f1  修改網路設備的MAC地址
ip address { add | change | replace } IFADDR dev IFNAME [ LIFETIME ] [ CONFFLAGLIST ]
ip address del IFADDR dev IFNAME
ip address { save | flush } [ dev IFNAME ] [ scope SCOPE-ID ] [ to PREFIX ] 
        [ FLAG-LIST ] [ label PATTERN ] [ up ]
ip address [ show [ dev IFNAME ] [ scope SCOPE-ID ] [ to PREFIX ] [ FLAG-LIST ]
        [ label PATTERN ] [ master DEVICE ] [ type TYPE ] [ vrf NAME ] [ up ] ]

IFADDR := PREFIX | ADDR peer PREFIX [ broadcast ADDR ] [ anycast ADDR ] 
        [ label LABEL ] [ scope SCOPE-ID ]
SCOPE-ID := [ host | link | global ]
FLAG-LIST := [ FLAG-LIST ] FLAG
FLAG := [ permanent | dynamic | secondary | primary | [-]tentative | [-]depre‐
        cated | [-]dadfailed | temporary ]
LIFETIME := [ valid_lft LFT ] [ preferred_lft LFT ]
LFT := [ forever | SECONDS ]
TYPE := [ bridge | bridge_slave | bond | bond_slave | can | dummy | hsr | ifb |
        ipoib | macvlan | macvtap | vcan | veth | vlan | vxlan | ip6tnl | ipip |
        sit | gre | gretap | ip6gre | ip6gretap | vti | vrf | nlmon | ipvlan |
        lowpan | geneve | macsec ]

dev IFNAME            要添加地址的設備的名稱
broadcast ADDRESS     介面上的廣播地址
label LABEL           網卡別名
scope SCOPE_VALUE     此地址有效的區域範圍。配置文件 /etc/iproute2/rt_scopes. 
               global - 地址是全局有效的。
               link - 僅在這個設備上有效。
               host - 僅在此主機內有效.

EXAMPLES:
ip address               顯示分配給所有網路介面的IPv4和IPv6地址
ip addr show up          只顯示分配給活動網路介面的地址
ip addr ls eth0 ; ip address show dev eth0  顯示分配給網路介面eth0的IPv4和IPv6地址

將IPv6地址添加到網路介面eth1
ip address add 2001:0db8:85a3::0370:7334/64 dev eth1

刪除上面添加的IPv6地址
ip address delete 2001:0db8:85a3::0370:7334/64 dev eth1

從設備eth4中刪除全局的IPv4和IPv6地址
ip address flush dev eth4 scope global

使用網卡別名對虛擬主機將多個IP地址綁定到一個網卡上:
為每個地址設置一個字元串作為標籤。
為了和Linux-2.0的網路別名兼容,這個字元串必須以設備名開頭,接一個冒號,下面三條命令等價:
ifconfig eth0:0 192.168.4.1/28
ip addr add local 192.168.4.1/28 brd + label eth0:0 dev eth0
ip addr add 192.168.4.1/28 dev eth0 label eth0:0

ip addr del 192.168.4.1/28 dev eth0 label eth0:0   刪除別名
ip addr flush dev eth0 label eth0:0                清空別名

ip -4 addr flush label eth0                        清空eth0網卡上所有IPv4地址
ip a f to 10/8                                     清空屬於10.0.0.0/8的所有地址
ip route { show | flush } SELECTOR
ip route { add | del | change | append | replace } NODE_SPEC

SELECTOR := [ root PREFIX ] [ match PREFIX ] [ exact PREFIX ] [ table TABLE_ID ]
            [ vrf NAME ] [ proto RTPROTO ] [ scope SCOPE ]
NODE_SPEC := [ TYPE ] PREFIX [ tos TOS ] [ table TABLE_ID ] [ proto RTPROTO ] 
             [ scope SCOPE ] [ metric METRIC ]
TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ]
TABLE_ID := [ local| main | default | all | NUMBER ]
SCOPE := [ host | link | global ]
RTPROTO := [ kernel | boot | static | NUMBER ]
             kernel 2 該路由是由內核安裝的
             boot   3 該路由是在系統啟動時安裝的
             static 4 該路由是由管理員安裝的
配置文件: /etc/sysconfig/network-scripts/route-ethX

從Linux-2.2開始,內核把路由歸納到許多路由表中,這些表都進行了編號,編號數字的範圍是1到255。
可以在路由表配置文件:/etc/iproute2/rt_tables 中為路由表命名。
默認情況下,所有的路由都會被插入到表main(編號254)中。在進行路由查詢時,內核只使用路由表main。

ip route show                 list routes
ip route add                  add new route
ip route change               change route
ip route replace              change or add new one
ip route delete               delete route
ip route flush                flush routing tables
ip route get                  get a single route

Example:
ip route show                                        顯示路由
ip route add default via GW dev IFACE                添加網關
ip route add TARGET via GW dev IFACE src SOURCE_IP   添加路由
ip route change TARGET                               修改路由
ip route replace TARGET                              修改路由,不存在創建
ip route del TARGET                                  刪除路由
ip route flush [dev IFACE] [via PREFIX]              清空路由表
TARGET:
       主機路由:IP
       網路路由:NETWORK/MASK

ip route add default via 172.16.0.1 ; route add default gw 172.16.0.1
ip route add 192.168.1.13 via 172.16.0.1 ; route add -host 192.168.1.13 gw 172.16.0.1
ip route add 192.168.0.0/24 via 172.16.0.1 ; route add -net 192.168.0.0/24 gw 172.16.0.1
ip route chg 192.168.0.0/24 via 172.16.0.2
ip route r 192.168.0.0/24 via 172.16.0.2
ip route flush dev eth0

設置NAT路由: 在轉發來自192.203.80.144的數據包之前,先進行網路地址轉換,把這個地址轉換為193.233.7.83
ip route add nat 192.203.80.142 via 193.233.7.83

實現鏈路負載平衡.加入預設多路徑路由,讓ppp0和ppp1分擔負載(注意:scope值並非必需,它只不過是告訴內核,這個路由要經過網關而不是直連的。實際上,如果你知道遠程端點的地址,使用via參數來設置就更好了)。
ip route add default scope global nexthop dev ppp0 nexthop dev ppp1
ip route replace default scope global nexthop dev ppp0 nexthop dev ppp1
刪除多路徑路由
ip route del default scope global nexthop dev ppp0 nexthop dev ppp1

實現數據包級負載平衡,允許把數據包隨機從多個路由發出。weight可以設置權重.
ip route replace default equalize nexthop via 211.139.218.145 dev eth0 
weight 1 nexthop via 211.139.218.145 dev eth1 weight 1


ip route ls proto gated/bgp|wc -l 計算使用gated/bgp協議的路由個數
ip -o route ls cloned|wc -l       計算路由快取裡面的條數,由於被快取路由的屬性可能大於一行,以此需要使用-o選項

列出某個路由表(路由表ID或者是/etc/iproute2/rt_tables文件定義的字元串)的內容
ip ro ls table wangtong
ip ro ; ip ro ls ; route         列出默認路由表(table main)的內容
ip ro ls table all               列出所有表的路由
ip ro ls 193.233.7.82 tab cache  列出路由快取的內容

ip route flush cache                      清除所有路由cache
ip -6 ro flush cache                      清除所有IPv6路由cache
ip -4 ro flush scope global type unicast  清除路由表main中的所有單播路由
ip -s ro f proto gated/bgp                在gated程式掛掉之後,清除所有的BGP路由

ip route get — 獲得單個路由
使用這個命令可以獲得到達目的地址的一個路由以及它的確切內容。
ip route show命令只是顯示現有的路由,而ip route get命令在必要時會派生出新的路由。
ip route get 192.168.50.4   搜索到192.168.50.4的路由

搜索目的地址是193.233.7.82,來自193.233.7.82,從eth0設備到達的路由(這條命令會產生一條非常有意思的路由,這是一條到193.233.7.82的迴環路由)
$ ip r g 193.233.7.82 from 193.233.7.82 iif eth0
193.233.7.82 from 193.233.7.82 dev eth0 src 193.233.7.65 realms 
inr.ac/inr.ac
cache

多線路策略路由設置
1、配置虛擬網卡/etc/sysconfig/network-scripts/
#注意移動和聯通不需要配置網關,默認路由默認為電信網關,也可根據實際情況更改
電信:eth1    ip:1.1.1.2 gw:1.1.1.1
移動:eth1:1  ip:2.2.2.2 gw:2.2.2.1
聯通:eth1:2  ip:3.3.3.2 gw:3.3.3.1

2、編輯rt_tables
#定義三個表,表明自定義
#252 dx
#251 lt
#250 yd
echo -e "252 dx\n251 lt\n250 yd" >> /etc/iproute2/rt_tables

3、編輯/etc/rc.d/rc.local,將如下內容加入開機自啟動
#清空dx路由表
ip route flush table dx
ip route flush table lt
ip route flush table yd
ip route flush cache

# 添加一個路由規則到 dx 表,所有數據包默認使用源 IP 1.1.1.2 通過 eth1 走網關 1.1.1.1
ip route add default via 1.1.1.1 dev eth1 src 1.1.1.2 dx

#來自 1.1.1.2 的數據包,使用 dx 路由表的路由規則
ip rule add from 1.1.1.2 table dx

#解釋同上
ip route add default via 2.2.2.2 dev eth1 src 2.2.2.1 lt
ip rule add from 2.2.2.2 table lt

#解釋同上
ip route add default via 3.3.3.2 dev eth1 src 3.3.3.1 yd
ip rule add from 3.3.3.2 table yd
ip rule  [ list | add | del | flush ] SELECTOR ACTION

SELECTOR := [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ fwmark FWMARK[/MASK] ] 
            [ iif STRING ] [ oif STRING ] [ pref NUMBER ]
ACTION := [ table TABLE_ID ] [ nat ADDRESS ] [ prohibit | reject | unreachable ] 
          [ realms [SRCREALM/]DSTREALM ]
TABLE_ID := [ local | main | default | NUMBER ]
unicast -- 在該規則指向的路由表中進行標準的路由查找。當一個路由表被指定,這是默認的動作。
blackhole -- 規則動作將僅僅直接丟棄該數據報。
unreachable -- 規則動作產生一條網路不可達錯誤資訊,一個類型為3,程式碼為0的ICMP消息被返回給發送者。
prohibit -- 規則動作產生一個通訊被禁止的錯誤消息,一個類型為3,程式碼為13的ICMP消息被返回給發送者。
配置文件: /etc/sysconfig/network-scripts/rule-ethX

Example:
$ ip ru ls
0:	from all lookup local 
32766:	from all lookup main 
32767:	from all lookup default
第一列:冒號之前的數字,表示該路由表被匹配的優先順序,數字越小,越早被匹配。範圍是0~32767。默認0、32766、32767三個優先順序別已被佔用。如果在添加規則時沒有定義優先順序別,那麼默認的優先順序別會從32766開始遞減,可以通過prio ID參數在設置路由表時添加優先順序。

第二列:from,這裡顯示的是匹配規則,當前表示的是從哪裡來的數據包,還有:
    From -- 源地址
    To -- 目的地址(這裡是選擇規則時使用,查找路由表時也使用)
  Tos -- IP包頭的TOS(type of sevice)域
  Dev -- 物理介面
  Fwmark -- 防火牆參數

第三段:loacl/main/default 這些都是路由表名稱,表示數據包要從那個路由表送出去。local表包含本機路由及廣播資訊,main表就是我們route -n看到的內容,default表,默認為空。

在添加規則時,需要先定義好優先順序、條件及路由表ID,然後才可以添加規則。
#根據源地址決定路由表
ip rule add from 192.168.10.0/24 table 100
ip rule add from 192.168.20.20   table 110

#根據目的地址決定路由表
ip rule add to 192.168.30.0/24 table 120
ip rule add to 192.168.40.0/24 table 130

#根據網卡設備決定路由表
ip rule add dev eth0 table 140
ip rule add dev eth1 table 150

#此外還可以根據其他條件進行設置,例如tos等等
#增加一條規則,規則匹配的對象是所有的數據包,動作是選用路由表1的路由,這條規則的優先順序是32800
ip rule add [from 0/0] table 1 pref 32800
#增加一條規則,規則匹配的對象是IP為192.168.3.112, tos等於0x10的包,使用路由表2,這條規則的優先順序是1500,動作是丟棄。
ip rule add from 192.168.3.112/32 [tos 0x10] table 2 pref 1500 prohibit  
#增加一條規則,規則匹配的對象是fwmark 標記3的數據包,使用路由表2
ip rule add fwmark 3  table 3 
#需要使用iptables給相應的數據打上標記3
iptables -A PREROUTING -t mangle -i eth0 -s 192.168.0.1 -192.168.0.100 -j MARK --set-mark 3

ip rule del from 192.168.10.10  # 根據明細條目刪除
ip rule del prio 32765          # 根據優先順序刪除
ip rule del table wangtong      # 根據表名稱來刪除

添加規則後才能確定新的路由表的ID,有了新的路由表ID後,才能在該路由表中添加路由
ip route add 192.168.0.0/24 dev eth0 table 1
ip route add default via 172.16.0.1 table 1

通過路由表inr.ruhep路由來自源地址為192.203.80/24的數據包
ip ru add from 192.203.80/24 table inr.ruhep prio 220

把源地址為193.233.7.83的數據報的源地址轉換為192.203.80.144,並通過表1進行路由
ip ru add from 193.233.7.83 nat 192.203.80.144 table 1 prio 320

刪除無用的預設規則
ip ru del prio 32767
ip neighbour         neighbour/arp表管理命令
ip neighbour add     添加一個新的鄰接條目
ip neighbour change  修改一個現有的條目
ip neighbour replace 替換一個已有的條目
ip neighbour show    顯示網路鄰居的資訊
ip neighbour delete  刪除一個鄰接條目
ip neighbour flush   清除鄰接條目

Example:
在設備eth0上,為地址10.0.0.3添加一個permanent ARP條目:
ip neigh add 10.0.0.3 lladdr 0:0:0:0:0:1 dev eth0 nud perm
ip neigh chg 10.0.0.3 dev eth0 nud reachable  把狀態改為reachable
ip -s n ls 10.0.0.1                           顯示網路鄰居的資訊
ip neigh del 10.0.0.3 dev eth0                刪除設備eth0上的一個ARP條目10.0.0.3
ip -s -s n f 10.0.0.1                         清除鄰接條目
ip maddress — 多播地址管理

Example:
添加/刪除在網路介面上監聽的鏈路層多播地址。只能管理鏈路層地址
ip maddr add 33:33:00:00:00:01 dev dummy  增加多播地址
ip maddr ls dummy                         列出多播地址
ip maddr del 33:33:00:00:00:01 dev dummy  刪除多播地址
ip mroute — 多播路由快取管理

Example:
ip mroute show  列出多播路由快取條目
ip tunnel — 通道配置
ip tunnel add — 添加新的通道
ip tunnel change — 修改現有的通道
ip tunnel delete — 刪除一個通道
ip tunnel show — 列出現有的通道

Example:
建立一個點對點通道,最大TTL是32, 然後列出
ip tunnel add Cisco mode sit remote 192.31.7.104 local 192.203.80.1 ttl 32
ip -s tunl ls Cisco
ip monitor和rtmon — 狀態監視
ip命令可以用於連續地監視設備、地址和路由的狀態。
這個命令選項的格式有點不同,命令選項的名字叫做monitor,接著是操作對象:
ip monitor [ file FILE ] [ all | OBJECT-LIST ]

Example:
rtmon file /var/log/rtmon.log
ip monitor file /var/log/rtmon.log r
arp

返回網路管理

ARP管理

arp            查看ARP快取
arp -s IP MAC  添加
arp -d IP      刪除
tcpdump

返回網路管理

tcpdump命令是一款網路協議分析工具,是linux上的抓包工具,嗅探器;它可以列印出所有經過網路介面的數據包的頭資訊。

tcpdump命令工作時先要把網卡的工作模式切換到混雜模式。所以tcpdump命令需要以root身份運行。

yum -y install tcpdump
tcpdump [參數]
        -a	           嘗試將網路和廣播地址轉換成名稱
        -c<數據包數目>	收到指定的數據包數目後,就停止進行傾倒操作
        -d	           把編譯過的數據包編碼轉換成可閱讀的格式,並傾倒到標準輸出
        -dd	           把編譯過的數據包編碼轉換成C語言的格式,並傾倒到標準輸出
        -ddd	       把編譯過的數據包編碼轉換成十進位數字的格式,並傾倒到標準輸出
        -e	           在每列傾倒資料上顯示連接層級的文件頭
        -f	           用數字顯示網際網路地址
        -F<表達文件>	指定內含表達方式的文件
        -i<網路介面>	使用指定的網路截面送出數據包
        -l	           使用標準輸出列的緩衝區
        -n	           不把主機地址解析成主機名
        -nn	           不把主機地址解析成主機名,也不把埠號解析成服務名
        -N	           不列出域名
        -O	           不將數據包編碼最佳化
        -p	           不讓網路介面進入混雜模式
        -q	           快速輸出,僅列出少數的傳輸協議資訊
        -r<數據包文件>	從指定的文件讀取數據包數據
        -s<數據包大小>	設置每個數據包的大小
        -S	           用絕對而非相對數值列出TCP關聯數
        -t	           在每列傾倒資料上不顯示時間戳記
        -tt	           在每列傾倒資料上顯示未經格式化的時間戳記
        -T<數據包類型>	強制將表達方式所指定的數據包轉譯成設置的數據包類型
        -v	           詳細顯示指令執行過程
        -vv	           更詳細顯示指令執行過程
        -x	           用十六進位字碼列出數據包資料
        -w<數據包文件>	把數據包數據寫入指定的文件

Example:
tcpdump                    監視第一個網路介面上所有流過的數據包
tcpdump -i eth1            監視指定網路介面的數據包
tcpdump -nnvvi eth1        監視指定網路介面的數據包,直接顯示主機地址和埠號,更詳細資訊
tcpdump host linuxcool     監視指定主機收到的和發出的所有的數據包
tcpdump host 210.27.48.1   監視指定主機IP收到的和發出的所有的數據包
tcpdump -i eth0 src host hostname     截獲主機hostname發送的所有數據
tcpdump -i eth0 dst host hostname     監視所有送到主機hostname的數據包
tcpdump tcp port 23 host 210.27.48.1  監視主機210.27.48.1接收或發出的telnet包(tcp 23)
tcpdump udp port 123                  監視本機的ntp的服務(udp 123)
tcpdump -i any port 80 -A             抓取80埠的HTTP報文,以文本形式展示
tcpdump 'gateway snup and (port ftp or ftp-data)'  列印所有通過網關snup的ftp數據包
tcpdump ip and not net localnet           列印所有源地址或目標地址是本地主機的IP數據包

截獲主機192.168.10.10 和主機192.168.10.20 或192.168.10.30的通訊:
截獲主機helios 和主機hot 或ace的通訊:
tcpdump host 192.168.10.10 and \ (192.168.10.20 or 192.168.10.30 \)
tcpdump host helios and \( hot or ace \)

列印ace與任何其他主機之間通訊的IP數據包, 但不包括與helios之間的數據包.
tcpdump ip host ace and not helios

如果想要獲取主機210.27.48.1除了和主機210.27.48.2之外所有主機通訊的ip包:
tcpdump ip host 210.27.48.1 and ! 210.27.48.2

tcpdump net ucb-ether      列印本地主機與Berkeley網路上的主機之間的所有通訊數據包
ucb-ether此處可理解為「Berkeley網路」的網路地址,此表達式最原始的含義可表達為:列印網路地址為ucb-ether的所有數據包
ss

返回網路管理

Socket 套接字 就是對網路中不同主機上的應用進程之間進行雙向通訊的端點的抽象,它是電腦之間進行通訊的一種約定或一種方式。通過 socket 這種約定,一台電腦可以接收其他電腦的數據,也可以向其他電腦發送數據。

netstat通過遍歷proc來獲取socket資訊,ss使用netlink與內核tcp_diag模組通訊獲取 socket資訊

當伺服器的socket連接數量變得非常大時,無論是使用netstat命令還是直接cat /proc/net/tcp,
執行速度都會很慢,ss比netstat更快速更高效。

ss [ OPTIONS ] [ FILTER ]
   -V, --version        output version information
   -a, --all            display all sockets
   -l, --listening      display listening sockets
   -t, --tcp            display only TCP sockets
   -u, --udp            display only UDP sockets
   -m, --memory         show socket memory usage
   -p, --processes      show process using socket
   -n, --numeric        don't resolve service names
   -r, --resolve        resolve host names           resolve 解析
   -s, --summary        show socket usage summary    使用情況摘要
   -o, --options        show timer information       顯示定時器資訊
   -e, --extended       show detailed socket information
   -i, --info           show internal TCP information
   
   -4, --ipv4           display only IP version 4 sockets
   -6, --ipv6           display only IP version 6 sockets
   -0, --packet         display PACKET sockets
   -d, --dccp           display only DCCP sockets
   -w, --raw            display only RAW sockets
   -x, --unix           display only Unix domain sockets
   -f, --family=FAMILY  display sockets of type FAMILY
	   FAMILY := {inet|inet6|link|unix|netlink|vsock|help}
   -A, --query=QUERY, --socket=QUERY
       QUERY := {all|inet|tcp|udp|raw|unix|packet|netlink}[,QUERY]
   -D, --diag=FILE      Dump raw information about TCP sockets to FILE
   -F, --filter=FILE   read filter information from FILE

       FILTER := [ state TCP-STATE ] [ EXPRESSION ]
	  
	   STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
	  
state狀態:TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
           connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
           synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
           bucket := {syn-recv|time-wait}
           big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}

Example:
ss -tupln | grep :22                                         查看埠佔用
ss -l                                                        顯示本地打開的所有埠
ss -pl                                                       顯示每個進程具體打開的socket
ss -t -a                                                     顯示所有tcp socket
ss -u -a                                                     顯示所有的UDP Socekt
ss -s                                                        列出當前socket詳細資訊
ss -o state established | wc -l                              統計伺服器並發連接數
ss -o state established '( dport = :smtp or sport = :smtp )' 顯示所有已建立的SMTP連接
ss -o state established '( dport = :http or sport = :http )' 顯示所有已建立的HTTP連接
ss -o state fin-wait-1 '( sport = :http or sport = :https )' 顯示處在FIN-WAIT-1狀態的http、https連接
ss -x src /tmp/.X11-unix/*                               顯示所有本地連接到x server的進程
   src表示來源
ss src 192.168.200.202                                       匹配本地地址和埠號,IP篩選
ss dport/sport OP PORT                                       埠篩選
   dport 目的埠:我訪問外部
   sport 來源埠:外部訪問我
   PORT  埠
   OP    運算符:
			    \<= or le : 小於等於 
				\>= or ge : 大於等於
			    =  or eq : 等於
                != or ne : 不等於埠
                \< or lt : 小於這個埠
				\> or gt : 大於埠
例:ss sport = :http
    or
    ss sport = :80
    ss dport \> :20000                       顯示所有大於20000的目的埠
    ss sport \> :20000                       顯示所有大於20000的目的埠
    ss dport \< :20000                       顯示所有小於20000的來源埠
    ss sport \< :20000                       顯示所有小於20000的來源埠
    ss state connected sport = :22           顯示等於22的來源埠
    ss \( sport = :22 or sport = :21111 \)   顯示等於22和21111的來源埠
    ss -o state fin-wait-1 \( sport = :http or sport = :https \) dst 192.168.1/24
    顯示處在FIN-WAIT-1狀態且是192.168.1/24網段IP的http、https連接
nc

返回網路管理

nc是netcat的簡寫,有著網路界的瑞士軍刀美譽。
(1)實現任意TCP/UDP埠的偵聽,nc可以作為server以TCP或UDP方式偵聽指定埠
(2)埠的掃描,nc可以作為client發起TCP或UDP連接
(3)機器之間傳輸文件,網路測速dstat

ncat [options] [hostname] [port]
nc [-hlnruz][-g<網關...>][-G<指向器數目>][-i<延遲秒數>][-o<輸出文件>][-p<通訊埠>]
   [-s<來源位址>][-v...][-w<超時秒數>][主機名稱][通訊埠...]
   -g<網關>       設置路由器躍程通訊網關,最多可設置8個。
   -G<指向器數目> 設置來源路由指向器,其數值為4的倍數。
   -i<延遲秒數>   設置時間間隔,以便傳送資訊及掃描通訊埠。
   -l             使用監聽模式,管控傳入的資料,默認TCP埠。
   -n             直接使用IP地址,而不通過域名伺服器。
   -o<輸出文件>   指定文件名稱,把往來傳輸的數據以16進位字碼傾倒成該文件保存。
   -p<通訊埠>   設置本地主機使用的通訊埠。
   -r<埠>       指定本地與遠端主機的通訊埠。
   -s<來源地址>   設置本地主機送出數據包的IP地址。
   -u             使用UDP傳輸協議。
   -v             詳細輸出--用兩個-v可得到更詳細的內容
   -w<超時秒數>   設置等待連線的時間。
   -z             使用0輸入/輸出模式,只在掃描通訊埠時使用。

nc -vzw 2 www.baidu.com -z 80-85  掃描對應ip的TCP埠是否監聽
nc -vzu 10.0.0.200 9999           掃描對應ip的UDP埠是否監聽
nc -p 6666 -w 5 www.baidu.com 80  建立從本地6666埠到www.baidu.com的80埠連接,5秒超時

server:監聽埠
nc -l 6666                        監聽埠TCP 6666
client: 連接server的對應埠
nc 10.0.0.200 6666                
使用ctrl+C(或D)退出。

nc -l 1234 >test.txt              伺服器端先啟動監聽服務,將監聽埠收到的數據存入文件
nc 10.0.0.200 1234 < mysql.pass   傳文件,客戶端將文件發送給服務端監聽的埠

tar -cvf - dir_name | nc -l 1234  傳輸目錄要壓縮
nc 10.0.0.200 1234 | tar -xvf -   接收後自動解壓

nc -l -p 10010 -e /bin/sh         被控制端(這種形式支援後台運行)
nc 10.0.0.200 10010               控制端

nc 10.0.0.200 10010 -e /bin/bash  被控制端
nc -l -p 10010                    控制端

代理轉發:訪問本地7891埠就是訪問IP:10.0.0.200 埠:8080
cat /tmp/tmp_fifo |nc 10.0.0.200 8080 | nc -l -p 7891 > /tmp/tmp_fifo
nmap

返回網路管理

Nmap用於在遠程機器上探測網路,執行安全掃描,網路審計和搜尋開放埠。
它會掃描遠程在線主機,該主機的作業系統,包過濾器和開放的埠。

yum -y install nmap
nmap [Scan Type(s)] [Options] {target specification}
TARGET SPECIFICATION:       目標規格
	Can pass hostnames, IP addresses, networks, etc.
	Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.0-255.1-254
	nmap -iL <inputfilename> 讀取文件中內容列表掃描主機or cat > <inputfilename>
	     -iR <num hosts>     選擇隨機目標
			 --exclude <host1[,host2][,host3],...>  排除你不想掃描的主機
			 --excludefile <exclude_file>           排除列表來自文件
HOST DISCOVERY:              主機發現
	 -sP                     檢測在線主機
	 -sL                     簡單列出目標掃描
	 -sn                     禁用埠掃描,Ping Scan
	 -Pn                     跳過主機發現(檢測是否有防火牆保護)?
	 -PS/PA/PU/PY [portlist] 對給定埠使用TCP SYN/ACK、UDP或SCTP發現(比如禁ping時)
	 -PE/PP/PM               對ICMP回顯、時間戳和網路掩碼請求發現探測
	 -PO[protocol list]      IP Protocol Ping (IP協議Ping)
	 -n/-R                   從不/始終執行DNS解析[默認值:有時]
	       --traceroute      跟蹤每個主機的躍點路徑
SCAN TECHNIQUES:             掃描技術
	 -sS/sT/sA/sW/sM         執行一次隱蔽的掃描Connect()/TCP SYN/ACK(偵測防火牆或包過濾器)/Window/Maimon掃描
	 -sU                     UDP掃描
	 -sN/sF/sX               TCP Null(執行TCP空掃描以騙過防火牆)/FIN/Xmas掃描
	 -sO                     IP協議掃描
	 -b <FTP relay host>     FTP反彈掃描
PORT SPECIFICATION AND SCAN ORDER:	      埠規格和掃描順序
	 -p <port ranges>        只掃描指定的埠,默認只掃描TCP埠
	                     Ex: -p22; -p1-65535; -p U:53,111,137,T:21-25,80,139,8080,S:9
	 -F                      快速掃描,僅掃描nmap-services文件中的埠
	 -r                      連序掃描埠,不會隨機
SERVICE/VERSION DETECTION:   服務/版本檢測
	 -sV                     探測開放埠以確定服務/版本資訊
		 --version-intensity <level>      
		                     設置探測強度0-9
         --version-light     (intensity 2)強度2
         --version-all       (intensity 9)強度9
OS DETECTION:               作業系統檢測
	 -O                      啟用作業系統檢測
FIREWALL/IDS EVASION AND SPOOFING:      防火牆/IDS規避和欺騙
	 -f; --mtu <val>                    片段數據包(可選w/給定的mtu)
     -D <decoy1,decoy2[,ME],...>        用誘餌掩蔽掃描
     -S <IP_Address>                    偽造源地址
     -e <iface>                         使用指定介面
     -g/--source-port <portnum>         使用給定的埠號
     --data-length <num>                將隨機數據追加到發送的數據包中
     --ip-options <options>             使用指定的ip選項發送數據包
     --ttl <val>                        設置IP生存時間欄位
     --spoof-mac <mac address/prefix/vendor name>    
	                                    欺騙您的mac地址
     --badsum                           使用偽造的TCP/UDP/SCTP校驗和發送數據包
OUTPUT:
	 -oN/-oX/-oS/-oG <file>  輸出掃描以normal(正常)/XML/s|<rIpt kIddi3/可修改格式,各自指定文件名
	 -oA <basename>          同時輸出三種主要格式
	 -v                      增加詳細級別(使用-vv或更多以獲得更大的效果)
	 -d                      增加調試級別(使用-dd或更多以獲得更大的效果)
	   --reason              顯示埠處於特定狀態的原因
       --open                僅顯示打開(或可能打開)的埠
       --packet-trace        顯示所有發送和接收的數據包
       --iflist              列印主機介面和路由(用於調試)
       --log-errors          將錯誤/警告記錄到常規格式的輸出文件中
       --append-output       附加到指定的輸出文件,而不是刪除指定的輸出文件
       --resume <filename>   恢復中止的掃描
       --stylesheet <path/URL>       
	                         將XML輸出轉換為HTML的XSL樣式表
MISC:                       其他
	 -A                      啟用作業系統,版本檢測,腳本掃描和路由跟蹤功能
	 
EXAMPLES:
  nmap -v -A 10.0.0.202
  nmap -v -sn 192.168.0.0/16 10.0.0.0/8
  nmap -v -iR 10000 -Pn -p 80
  
nmap IP IP IP     使用主機名或IP(可以多個)掃描該系統上所有開放的埠,服務和MAC地址
nmap 192.168.0.*                對整個子網或某個範圍的主機掃描。。。
nmap 192.168.0.101-110
nmap 192.168.0.101,102,103      簡單指定IP地址的最後一個位元組來對多個IP地址進行掃描
nmap -p T:8888,80 192.168.0.101 指定具體的埠類型和埠號
glances

返回網路管理

資源實時監控工具

特點:佔用儘可能小的空間最大化展示資源資訊

yum -y install glances
glances [-d] [-C CONF_FILE] [-3] [-4] [-2] [--disable-process]
               [--disable-log] [--disable-bold] [--enable-process-extended]
               [--enable-history] [--path-history PATH_HISTORY]
               [--export-csv EXPORT_CSV] [--export-influxdb]
               [--export-opentsdb] [--export-statsd] [--export-rabbitmq]
               [-c CLIENT] [-s] [--browser] [--disable-autodiscover] [-p PORT]
               [-B BIND_ADDRESS] [--password]
               [--snmp-community SNMP_COMMUNITY] [--snmp-port SNMP_PORT]
               [--snmp-version SNMP_VERSION] [--snmp-user SNMP_USER]
               [--snmp-auth SNMP_AUTH] [--snmp-force] [-t TIME] [-w] [-q]
               [-f PROCESS_FILTER] [--process-short-name] [-0]
               [--hide-kernel-threads] [--tree] [-b] [--fahrenheit] [-1]
               [--fs-free-space] [--theme-white]
        -d                      啟用調試模式
        -C CONF_FILE            配置配置文件的路徑
        -3                      禁用快速查看模組
        -4                      禁用除快速查看和載入之外的所有功能
        --disable-cpu           disable CPU module
        --disable-mem           disable memory module
        --disable-swap          disable swap module
        --disable-load          disable load module
        --disable-network       disable network module
        --disable-ip            disable IP module
        --disable-diskio        disable disk I/O module
        --disable-fs            disable filesystem module
        --disable-sensors       disable sensors module
        --disable-hddtemp       disable HD temperature module
        --disable-raid          disable RAID module
        --disable-docker        disable Docker module
        -2                      禁用左側邊欄:網路、磁碟I/O、FS和感測器模組
        --disable-process       disable process module
        --disable-log           disable log module
        --disable-bold          disable bold mode in the terminal (bold 粗體)
        --enable-process-extended
                                enable extended stats on top process
        --enable-history        enable the history mode (matplotlib needed)
        --path-history PATH_HISTORY
                                set the export path for graph history(graph 圖表)
        --export-csv EXPORT_CSV
                                export stats to a CSV file(stats統計資訊)
        --export-influxdb       export stats to an InfluxDB server (influxdb needed)
        --export-opentsdb       export stats to an OpenTSDB server (potsdb needed)
        --export-statsd         export stats to a StatsD server (statsd needed)
        --export-rabbitmq       export stats to rabbitmq broker (pika needed)
        -c CLIENT               通過IPv4/IPv6地址或主機名連接到 Glances server
        -s                      run Glances in server mode
        --browser               start the client browser (list of servers)(browser 瀏覽器)
        --disable-autodiscover  禁用自動發現功能
        -p PORT                 定義客戶機/伺服器TCP埠[default: 61209]
        -B BIND_ADDRESS         將伺服器綁定到給定的IPv4/IPv6地址或主機名
        --password              define a client/server password(define定義)
        --snmp-community SNMP_COMMUNITY
                                SNMP community
        --snmp-port SNMP_PORT   SNMP port
        --snmp-version SNMP_VERSION
                                SNMP version (1, 2c or 3)
        --snmp-user SNMP_USER   SNMP username (only for SNMPv3)
        --snmp-auth SNMP_AUTH   SNMP authentication key (only for SNMPv3)
        --snmp-force            force SNMP mode (force 力,強制)
        -t TIME                 set refresh time in seconds [default: 3 sec](refresh 刷新)
        -w                      run Glances in web server mode (bottle needed)
        -q                      do not display the curses interface(curses interface glances的互動式介面)
        -f PROCESS_FILTER       設置進程篩選器模式(正則表達式)
        --process-short-name    force short name for processes name
        -0                      任務的cpu使用率將除以cpu總數
        --hide-kernel-threads   在進程列表中隱藏內核執行緒
        --tree                  display processes as a tree
        -b                      display network rate in byte per second(rate 率 per 每)
        --fahrenheit            以華氏度顯示溫度(默認值為攝氏度)
        -1                      start Glances in per CPU mode
        --fs-free-space         顯示FS可用空間而不是已用空間
        --theme-white           優化白色背景的顯示顏色
telnet

返回網路管理

yum -y install telnet
telnet [選項]
       -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	關閉指定的認證形態
traceroute

返回網路管理

用於追蹤數據包在網路上的傳輸時的全部路徑,它默認發送的數據包大小是40位元組。

traceroute通過發送小的數據包到目的設備直到其返回,來測量其需要多長時間。一條路徑上的每個設備traceroute要測3次。輸出結果中包括每次測試的時間(ms)和設備的名稱(如有的話)及其ip地址。

traceroute [選項] [域名或者IP]
           -d	       使用Socket層級的排錯功能
           -f<存活數值>	設置第一個檢測數據包的存活數值TTL的大小
           -F	       設置勿離斷位
           -g<網關>	  設置來源路由網關,最多可設置8個
           -i<網路介面>	使用指定的網路介面送出數據包
           -I	       使用ICMP回應取代UDP資料資訊
           -m<存活數值>	設置檢測數據包的最大存活數值TTL的大小
           -n	       直接使用IP地址而非主機名稱
           -p<通訊埠>	設置UDP傳輸協議的通訊埠
           -r	       忽略普通的Routing Table,直接將數據包送到遠端主機上
           -s<來源地址>	設置本地主機送出數據包的IP地址
           -t<服務類型>	設置檢測數據包的TOS數值
           -v	       詳細顯示指令的執行過程
           -w	       設置等待遠端主機回報的時間
           -x	       開啟或關閉數據包的正確性檢驗
tracepath

返回網路管理

tracepath命令用來追蹤並顯示報文到達目的主機所經過的路由資訊,能夠發現路由中的MTU值。使用套接字API來實現其所有功能,不需要root許可權。

traceroute功能要強於tracepath

tracepath [選項] [目的主機] [埠]
          -n	只顯示ip地址
          -b	同時顯示ip地址和主機名
          -l	設置初始化的數據包長度,默認為65535
          -m	設置最大TTL值,默認為30
          -p	設置要使用的初始目標埠

EXAMPLES:
tracepath -b www.linuxcool.com     追蹤到達域名的主機路由資訊(同時顯示ip地址與主機名)
tracepath -m 20 www.linuxcool.com  設置追蹤報文路由的最大TTL值
nslookup

返回網路管理

查詢域名的DNS資訊

nslookup有兩種工作模式:「交互模式」和「非交互模式」。在命令行中直接輸入nslookup,無需輸入任何參數即進入交互模式,由「>」提示。

yum -y install bind-utils
nslookup [選項] [域名]
         -sil	不顯示任何警告資訊
交互模式:
exit	        退出命令
server	        指定解析域名的伺服器地址
set type=soa	設置查詢域名授權起始資訊
set type=a	    設置查詢域名A記錄
set type=mx	    設置查詢域名郵件交換記錄
dig

返回網路管理

dig 命令的功能比 nslookup 強大很多

yum -y install bind-utils
dig [@server] [-b address] [-c class] [-f filename] [-k filename] [ -n ][-p port#] 
    [-t type] [-x addr] [-y name:key] [name] [type] [class] [queryopt...]
dig [global-queryopt...] [query...]
    @<伺服器地址>  指定進行域名解析的域名伺服器
    -b <ip地址>   當主機具有多個IP地址,指定使用本機的哪個IP地址向域名伺服器發送域名查詢請求
    -f <文件名稱>  指定dig以批處理的方式運行,指定的文件中保存著需要批處理查詢的DNS任務資訊
    -p port      指定域名伺服器所使用埠號
    -t <類型>     指定要查詢的DNS數據類型,預設A
    -x <IP地址>   執行逆向域名查詢
    -k <文件名稱>  使用事務簽名(TSIG),指定 TSIG 密鑰文件
    -y name:key   指定 TSIG 密鑰;name 是 TSIG 密碼的名稱,key 是實際的密碼
    -4            使用IPv4
    -6            使用IPv6

global-queryopt...
+[no]tcp         查詢域名伺服器時使用 [不使用] TCP。預設使用 UDP。
+[no]ignore      忽略 UDP 響應的中斷,而不是用 TCP 重試。預設情況運行 TCP 重試。
+[no]search      使用 [不使用] 搜索列表或 resolv.conf 中的域偽指令(如果有的話)定義的搜索列表
+[no]nssearch    尋找包含待搜名稱的網段的權威域名伺服器,並顯示網段中每台域名伺服器的 SOA 記錄。
+[no]trace       切換為待查詢名稱從根名稱伺服器開始的代理路徑跟蹤。
+[no]short       提供簡要答覆。預設值是以冗長格式顯示答覆資訊。
+[no]comments    切換輸出中的注釋行顯示。預設值是顯示注釋。
+[no]stats       設定顯示統計資訊:查詢進行時,應答的大小等等。預設顯示查詢統計資訊。
+[no]qr          顯示 [不顯示] 發送的查詢請求。預設不顯示。
+[no]question    當返回應答時,顯示 [不顯示] 查詢請求的問題部分。預設作為注釋顯示問題部分。
+[no]answer      顯示 [不顯示] 應答的回答部分。預設顯示。
+[no]authority   顯示 [不顯示] 應答的許可權部分。預設顯示。
+[no]additional  顯示 [不顯示] 應答的附加部分。預設顯示。
+[no]all         設置或清除所有顯示標誌。
+time=T          超時時間為 T 秒。預設是5秒。最小為1秒。
+tries=A         設置向伺服器發送 UDP 查詢請求的重試次數為 A,預設 3 次。最小為1。
+[no]multiline   以詳細的多行格式顯示類似 SOA 的記錄,並附帶可讀注釋。

EXAMPLES:
dig www.isc.org +short              快速查詢精簡答案
dig @202.106.0.20 www.oolec.com a   顯式指定dns伺服器地址
dig www.oolec.com a +tcp            採用tcp協議進行查詢,默認採用udp協議
dig www.oolec.com a +trace          從根伺服器開始追蹤一個域名的解析過程
dig www.oolec.com +search           查詢本地主機名而不是全域名
dig yahoo.com A +noall +answer      查找yahoo.com的A記錄
dig yahoo.com MX +noall +answer     查找yahoo.com MX記錄的列表
dig yahoo.com NS +noall +answer     查找yahoo.com的權威DNS
dig yahoo.com ANY +noall +answer    查詢上面所有的記錄
dig www.isc.org AAAA +short         查詢主機的IPv6 AAAA記錄
dig @server qianlong.com AXFR       查看 zone 數據傳輸
dig @server qianlong.com IXFR=N     查看 zone 數據的增量傳輸
dig -x 124.42.102.203 @server       查看反向解析
dig qianlong.com +nssearch          查找一個域的授權 dns 伺服器 
dig +norec @F.ROOT-SERVERS.NET HOSTNAME.BIND CHAOS TXT  查看你使用的是哪個根DNS伺服器
dig @bind_dns_server CHAOS TXT version.bind             查看 bind 的版本號
dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
進行三個查詢:一個針對 www.isc.org的任意查詢、一個 127.0.0.1 的逆向查詢,以及一個 isc.org 的 NS 記錄查詢。應用了 +qr 的全局查詢選項,以便 dig 顯示進行每條查詢的初始查詢。最後那個查詢有一個本地查詢選項 +noqr,表示 dig 在搜索 isc.org 的 NS 記錄時不顯示初始查詢。
[root@localhost ~]# dig rss.newyingyong.cn
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-20.P1.el5_8.1 <<>> rss.newyingyong.cn
;; global options:  printcmd
# 版本資訊和全局的設置選項,+nocmd 是第一個參數顯示
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49814
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 17
# +[no]comments 控制顯示
;; QUESTION SECTION:
;rss.newyingyong.cn.            IN      A
# +[no]question 控制顯示
;; ANSWER SECTION:
rss.newyingyong.cn.     600     IN      A       139.129.23.162
# +[no]answer 控制顯示
;; AUTHORITY SECTION:
newyingyong.cn.         86398   IN      NS      dns10.hichina.com.
newyingyong.cn.         86398   IN      NS      dns9.hichina.com.
# +[no]authority 控制顯示
;; ADDITIONAL SECTION:
dns9.hichina.com.       3490    IN      A       140.205.81.15
dns9.hichina.com.       3490    IN      A       140.205.81.25
# +[no]additional 控制顯示
;; Query time: 5 msec
;; SERVER: 10.202.72.116#53(10.202.72.116)
;; WHEN: Sat Jul 01 11:00:38 CST 2017
;; MSG SIZE  rcvd: 369
# +[no]stats 控制顯示

(3)dig -t a www.baidu.com

;; ANSWER SECTION:
www.baidu.com.          691     IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       271     IN      A       115.239.211.112
www.a.shifen.com.       271     IN      A       115.239.210.27

這裡返回的 CNAME 表示查詢 www.baidu.com 的資訊其實是www.a.shifen.com返回的 A 記錄。

CNAME 的存在原因:

  • 某個域名(A)可能會下線,但是這些域名可能還是被訪問到,為了避免不友好的提示,可以將這個域名 cname 到另外個域名(B),這樣訪問 B 相當於返回 A。
  • 很多公司項目可能有很多個域名,但是指定的 IP 地址可能每幾個,一旦 IP 地址變化,可能要修改每個域名的 DNS 資訊。假如這些域名 cname 到某個特定的域名,那麼修改域名資訊的時候就會非常方便。

(4)dig -t mx newyingyong.cn

;; QUESTION SECTION:
;newyingyong.cn.                        IN      MX

;; ANSWER SECTION:
newyingyong.cn.         600     IN      MX      10 mx.sina.net.
curl

返回網路管理

利用URL規則在shell終端命令行下工作的文件傳輸工具

支援包括HTTP、HTTPS、ftp等眾多協議,還支援POST、cookies、認證、從指定偏移處下載部分文件、用戶代理字元串、限速、文件大小、進度條等特徵;做網頁處理流程和數據檢索自動化。

curl [選項] [網址]
     -a, --append	                    上傳文件時,附加到目標文件
     -A, --user-agent <string>	        設置用戶代理髮送給伺服器
     -anyauth	                        可以使用「任何」身份驗證方法
     -b, --cookie <name=string/file>    cookie字元串或文件讀取位置
         --basic	                    使用HTTP基本驗證
     -B, --use-ascii	                使用ASCII/文本傳輸
     -c, --cookie-jar <file>	        操作結束後把cookie寫入到這個文件中
     -C, --continue-at <offset>	        斷點續轉
     -d, --data <data>	                HTTP POST方式傳送數據
         --data-ascii <data>	        以ascii的方式post數據
         --data-binary <data>	        以二進位的方式post數據
         --negotiate	                使用HTTP身份驗證
         --digest	                    使用數字身份驗證
         --disable-eprt	                禁止使用EPRT或LPRT
         --disable-epsv	                禁止使用EPSV
     -D, --dump-header <file>	        把header資訊寫入到該文件中
         --egd-file <file>	            為隨機數據(SSL)設置EGD socket路徑
         --tcp-nodelay	                使用TCP_NODELAY選項
     -e, --referer	                    來源網址
     -E, --cert <cert[:passwd]>	        客戶端證書文件和密碼 (SSL)
         --cert-type <type>	            證書文件類型 (DER/PEM/ENG) (SSL)
         --key <key>	                私鑰文件名 (SSL)
         --key-type <type>	            私鑰文件類型 (DER/PEM/ENG) (SSL)
         --pass <pass>	                私鑰密碼 (SSL)
         --engine <eng>	                加密引擎使用 (SSL). "--engine list" for list
         --cacert <file>	            CA證書 (SSL)
         --capath <directory>	        CA目錄 (made using c_rehash) to verify peer against (SSL)
         --ciphers <list>	            SSL密碼
         --compressed	                要求返回是壓縮的形式 (using deflate or gzip)
         --connect-timeout <seconds>	設置最大請求時間
         --create-dirs	                建立本地目錄的目錄層次結構
         --crlf	                        上傳是把LF轉變成CRLF
     -f, --fail	                        連接失敗時不顯示http錯誤
         --ftp-create-dirs	            如果遠程目錄不存在,創建遠程目錄
         --ftp-method [multicwd/nocwd/singlecwd]	控制CWD的使用
         --ftp-pasv	                    使用 PASV/EPSV 代替埠
         --ftp-skip-pasv-ip	            使用PASV的時候,忽略該IP地址
         --ftp-ssl	                    嘗試用 SSL/TLS 來進行ftp數據傳輸
         --ftp-ssl-reqd	                要求用 SSL/TLS 來進行ftp數據傳輸
     -F, --form <name=content>	        模擬http表單提交數據
         --form-string <name=string>	模擬http表單提交數據
     -g, --globoff	                    禁用網址序列和範圍使用{}和[]
     -G, --get	                        以get的方式來發送數據
     -H, --header <line>	            自定義頭資訊傳遞給伺服器
         --ignore-content-length	    忽略的HTTP頭資訊的長度
     -i, --include	                    輸出時包括protocol頭資訊
     -I, --head	                        只顯示請求頭資訊
     -j, --junk-session-cookies	        讀取文件進忽略session cookie
         --interface <interface>	    使用指定網路介面/地址
         --krb4 <level>	                使用指定安全級別的krb4
     -k, --insecure	                    允許不使用證書到SSL站點
     -K, --config	                    指定的配置文件讀取
     -l, --list-only	                列出ftp目錄下的文件名稱
         --limit-rate <rate>	        設置傳輸速度
         --local-port<NUM>	            強制使用本地埠號
     -m, --max-time <seconds>	        設置最大傳輸時間
         --max-redirs <num>	            設置最大讀取的目錄數
         --max-filesize <bytes>	        設置最大下載的文件總量
     -M, --manual	                    顯示全手動
     -n, --netrc	                    從netrc文件中讀取用戶名和密碼
         --netrc-optional	            使用 .netrc 或者 URL來覆蓋-n
         -no-buffer	                    禁用緩衝輸出
     -o, --output	                    把輸出寫到該文件中
     -O, --remote-name	                把輸出寫到該文件中,保留遠程文件的文件名
     -p, --proxytunnel	                使用HTTP代理
         --proxy-anyauth	            選擇任一代理身份驗證方法
         --proxy-basic	                在代理上使用基本身份驗證
         --proxy-digest	                在代理上使用數字身份驗證
         --proxy-ntlm	                在代理上使用ntlm身份驗證
     -P, --ftp-port <address>	        使用埠地址,而不是使用PASV
     -q	                                作為第一個參數,關閉 .curlrc
     -Q, --quote <cmd>	                文件傳輸前,發送命令到伺服器
     -r, --range <range>	            檢索來自HTTP/1.1或FTP伺服器位元組範圍
     --range-file	                    讀取(SSL)的隨機文件
     -R, --remote-time	                在本地生成文件時,保留遠程文件時間
         --retry <num>	                傳輸出現問題時,重試的次數
         --retry-delay <seconds>	    傳輸出現問題時,設置重試間隔時間
         --retry-max-time <seconds>	    傳輸出現問題時,設置最大重試時間
     -s, --silent	                    靜默模式。不輸出任何東西
     -S, --show-error	                顯示錯誤
         --socks4 <host[:port]>	        用socks4代理給定主機和埠
         --socks5 <host[:port]>	        用socks5代理給定主機和埠
         --stderr <file>	
     -t, --telnet-option <OPT=val>	    Telnet選項設置
         --trace <file>	                對指定文件進行debug
         --trace-ascii <file>	        Like --跟蹤但沒有hex輸出
         --trace-time	                跟蹤/詳細輸出時,添加時間戳
     -T, --upload-file <file>	        上傳文件
         --url <URL>	                Spet URL to work with
     -u, --user <user[:password]>	    設置伺服器的用戶和密碼
     -U, --proxy-user <user[:password]>	設置代理用戶名和密碼
     -w, --write-out [format]	        什麼輸出完成後
     -x, --proxy <host[:port]>	        在給定的埠上使用HTTP代理
     -X, --request <command>	        指定什麼命令
     -y, --speed-time	                放棄限速所要的時間,默認為30
     -Y, --speed-limit	                停止傳輸速度的限制,速度時間

curl默認將下載文件輸出到stdout,將進度資訊輸出到stderr,

不顯示進度資訊使用--silent選項;

curl URL --silent

這條命令是將下載文件輸出到終端,所有下載的數據都被寫入到stdout。

選項-O將下載的數據寫入到文件,必須使用絕對路徑,保留遠程文件的文件名:

curl //man.linuxde.net/text.iso --silent -O

選項-o將下載數據寫入到指定名稱的文件中,並使用--progress顯示進度條:

curl //man.linuxde.net/test.iso -o filename.iso --progress
######################################### 100.0%

使用-C指定一個便移量來下載部分文件(斷點續傳):

curl URL/File -C 偏移量

#偏移量是以位元組為單位的整數,如果讓curl自動推斷出正確的續傳位置使用-C -:
curl -C -URL

使用--referer選項指定參照頁字元串:

參照頁是位於HTTP頭部中的一個字元串,用來表示用戶是從哪個頁面到達當前頁面的,如果用戶點擊網頁A中的某個連接,那麼用戶就會跳轉到B網頁,網頁B頭部的參照頁字元串就包含網頁A的URL。

curl --referer //www.google.com //man.linuxde.net

使用--cookie "COKKIES"選項來指定cookie,多個cookie使用分號分隔:

curl //man.linuxde.net --cookie "user=root;pass=123456"

使用--cookie-jar選項,將cookie另存為一個文件:

curl URL --cookie-jar cookie_file

使用--user-agent或者-A選項,設置用戶代理字元串為IE:

curl URL --user-agent "Mozilla/5.0"
curl URL -A "Mozilla/5.0"

使用-H“頭部資訊” 傳遞多個HTTP頭部資訊:

curl -H "Host:man.linuxde.net" -H "accept-language:zh-cn" URL

使用--limit-rate限制curl的下載速度,k(千位元組)和m(兆位元組):

curl URL --limit-rate 50k

使用--max-filesize指定可下載的最大文件大小:

curl URL --max-filesize bytes

使用 -u 完成HTTP或者FTP的認證,可以指定密碼,也可以不指定密碼在後續操作中輸入密碼:

curl -u user:pwd //man.linuxde.net
curl -u user //man.linuxde.net

使用-I或者-head可以只列印出HTTP頭部資訊:

[root@localhost text]# curl -I //man.linuxde.net
HTTP/1.1 200 OK
Server: nginx/1.2.5
date: Mon, 10 Dec 2012 09:24:34 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
Vary: Accept-Encoding
X-Pingback: //man.linuxde.net/xmlrpc.php
scp

返回網路管理

scp [選項] [[user@]host1:]file1 ... [[user@]host2:]file2
    -1	使用ssh協議版本1-2
    -2	使用ssh協議版本2
    -4	使用ipv4
    -6	使用ipv6
    -B	以批處理模式運行
    -C	使用壓縮
    -F	指定ssh配置文件
    -l	指定寬頻限制
    -o	指定使用的ssh選項
    -P	指定遠程主機的埠號
    -p	保留文件的最後修改時間,最後訪問時間和許可權模式
    -q	不顯示複製進度
    -r	以遞歸方式複製     
	
Example:
從遠程複製目錄到本地:
scp -r [email protected]:/opt/soft/mysql /opt/soft/

上傳本地目錄到遠程機器指定目錄:
scp -r /opt/soft/mysql [email protected]:/opt/soft/scptest

保留文件的最後修改時間,最後訪問時間和許可權模式:
scp -p /root/install.log [email protected]:/tmp
rsync

返回網路管理

遠程數據同步工具,可通過LAN/WAN快速同步多台主機間的文件。

rsync使用所謂的「rsync演算法」來使本地和遠程兩個主機之間的文件達到同步,這個演算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。

yum -y install rsync
rsync [OPTION]... SRC [SRC]... DEST
rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC [DEST]
rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
rsync [OPTION]... [USER@]HOST::SRC [DEST]
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
':'                用法通過遠程shell(如 rsh、ssh)連接
'::' & 'rsync://'  用法通過 rsync daemon 連接,並要求SRC或DEST以模組名開頭。

對應於以上七種命令格式,rsync有七種不同的工作模式:

  1. 本地文件傳輸。當SRC和DES路徑資訊都不包含有單個冒號”:”分隔符時就啟動這種工作模式。如:rsync -a /data /backup
  2. Access via remote shell: Push
    • 使用一個遠程shell程式(如 rsh、ssh)來實現將本地機器的內容拷貝到遠程機器。當DST路徑地址包含單個冒號”:”分隔符時啟動該模式。如:rsync -avz *.c foo:src
  3. Access via remote shell: Pull
    • 使用一個遠程shell程式(如 rsh、ssh)來實現將遠程機器的內容拷貝到本地機器。當SRC地址路徑包含單個冒號”:”分隔符時啟動該模式。如:rsync -avz foo:src/bar /data
  4. Access via rsync daemon: Push
  • 從本地機器拷貝文件到遠程rsync伺服器中。當DST路徑資訊包含”::”分隔符時啟動該模式。如:rsync -av /databack [email protected]::www
  1. Access via rsync daemon: Push
  • 這類似於4。如:rsync -v /databack rsync://192.168.78.192/www
  1. Access via rsync daemon: Pull
  2. Access via rsync daemon: Pull
    • 這類似於6。如:rsync -v rsync://192.168.78.192/www
Options:
-v, --verbose    詳細模式輸出
-q, --quiet      精簡輸出模式
-c, --checksum   強制對文件傳輸進行校驗
-a, --archive    以遞歸方式傳輸文件,並保持所有文件屬性,same as -rlptgoD
-r, --recursive  對子目錄以遞歸模式處理
-l, --links      保留軟鏈接
-p, --perms      保持文件許可權
-t, --times      保持文件時間資訊
-g, --group      保持文件屬組資訊,需要root用戶
-o, --owner      保持文件屬主資訊,需要root用戶
-D, --devices    保持設備文件資訊
-H, --hard-links 保留硬鏈接
-R, --relative   使用相對路徑資訊
-b, --backup     創建備份,對於目的已經存在有同樣的文件名時,將老的文件重新命名為~filename。
                 可以使用 --suffix 選項來指定不同的備份文件前綴。
    --backup-dir            將備份文件(如~filename)存放在在目錄下。
    --suffix=SUFFIX         定義備份文件前綴。
-u, --update     僅進行更新,跳過所有已經存在於DST,並且文件時間晚於要備份的文件,不覆蓋更新的文件
-L, --copy-links            象對待常規文件一樣處理軟鏈接
    --copy-unsafe-links     僅僅拷貝指向SRC路徑目錄樹以外的鏈接
    --safe-links            忽略指向SRC路徑目錄樹以外的鏈接
-S, --sparse                對稀疏文件進行特殊處理以節省DST的空間。
-n, --dry-run               在不做任何更改的情況下執行試運行。
-w, --whole-file            拷貝文件,不進行增量檢測。
-x, --one-file-system       不要跨越文件系統邊界。
-B, --block-size=SIZE       檢驗演算法使用的塊尺寸,默認是700位元組。
-e, --rsh=command           指定使用rsh、ssh方式進行數據同步。
    --rsync-path=PATH       指定遠程伺服器上的rsync命令所在路徑資訊。
    --existing              僅僅更新那些已經存在於DST的文件,而不備份那些新創建的文件
    --delete                刪除那些DST中SRC沒有的文件
    --delete-excluded       同樣刪除DST中該選項指定排除的文件
    --delete-after          傳輸結束以後再刪除
    --ignore-errors         即使存在I/O錯誤也要刪除
    --max-delete=NUM        最多刪除NUM個文件
    --force                 強制刪除目錄,即使不為空
    --partial               保留那些因故沒有完全傳輸的文件,用於加快隨後的再次傳輸。
-h, --human-readable        以人類可讀格式輸出數字
    --progress              傳輸期間顯示進度
-P                          same as --partial --progress
-C, --cvs-exclude           使用和CVS一樣的方法自動忽略文件,用來排除那些不希望傳輸的文件。
-m, --prune-empty-dirs      從文件列表中刪除空的目錄鏈
    --numeric-ids           不將數字的用戶和組id匹配為用戶名和組名。
    --timeout=time          set I/O timeout in seconds
-I, --ignore-times          不跳過那些有同樣的時間和長度的文件。
-M, --remote-option=OPTION  僅向遠程端發送選項
    --size-only             跳過大小匹配的文件
    --modify-window=NUM     比較文件修改時間是否相同時, 使用的時間戳精度範圍,默認為0
-T, --temp-dir=DIR          在DIR中創建臨時文件
-y, --fuzzy                 如果沒有目標文件,則查找類似的文件作為依據
    --compare-dest=DIR      同樣比較DIR中的文件來決定是否需要備份
-z, --compress              對備份的文件在傳輸時進行壓縮處理
-f, --filter=RULE           增加一個文件篩選規則
-F                          same as --filter='dir-merge /.rsync-filter'
                            重複的: --filter='- .rsync-filter'
    --exclude=PATTERN       指定排除不需要傳輸的文件模式
    --include=PATTERN       指定不排除而需要傳輸的文件模式
    --exclude-from=FILE     排除FILE中指定模式的文件
    --include-from=FILE     不排除FILE指定模式匹配的文件
-s, --protect-args          不分割空間;僅通配符特殊字元
    --address               綁定到特定的地址
    --port=PORT             指定備用rsync服務埠號
    --blocking-io           對遠程shell使用阻塞I/O
    --stats                 給出某些文件的傳輸狀態
-i, --itemize-changes       輸出所有更新的更改摘要
    --log-file=FILE         記錄我們的動作到指定的文件中
    --log-file-format=FMT   使用指定的 FMT 更新日誌
    --password-file=FILE    從文件讀取守護程式訪問密碼
    --bwlimit=KBPS          限制I/O頻寬,KBytes per second。
在客戶端使用rsync命令來手動備份服務端上的數據:
詳細模式輸出,傳輸時進行壓縮,遞歸,保持文件時間,屬主,屬組,許可權資訊,傳輸期間顯示進度,指定使用ssh方式進行數據同步,刪除DST中SRC沒有的文件
$ rsync -vzrtopg --progress -e ssh --delete [email protected]:/www/* /databack/experiment/rsync
[email protected]'s password:
receiving file list ...
5 files to consider
test/
a
0 100% 0.00kB/s 527:35:41 (1, 20.0% of 5)
b
67 100% 65.43kB/s 0:00:00 (2, 40.0% of 5)
c
0 100% 0.00kB/s 527:35:41 (3, 60.0% of 5)
dd
100663296 100% 42.22MB/s 0:00:02 (4, 80.0% of 5)
sent 96 bytes received 98190 bytes 11563.06 bytes/sec
total size is 100663363 speedup is 1024.19

rsync daemon 方式:

  1. 啟動rsync服務,編輯/etc/xinetd.d/rsync文件,將其中的disable=yes改為disable=no,並重啟xinetd服務

  2. 創建配置文件: 默認rsync安裝後,不會自動創建主配置文件,需要手工來創建,其主配置文件為/etc/rsyncd.conf

$ vi /etc/rsyncd.conf

uid=root
gid=root
max connections=4
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsyncd.passwd
hosts deny=172.16.78.0/22

[www]
comment= backup web
path=/www
read only = no
exclude=test
auth users=work
  1. 創建密碼文件: 採用這種方式不能使用系統用戶對客戶端進行認證,所以需要創建一個密碼文件,其格式為「username:password」,用戶名可以和密碼可以隨便定義,最好不要和系統帳戶一致,同時要把創建的密碼文件許可權設置為600。
echo "work:123456" > /etc/rsyncd.passwd && chmod 600 /etc/rsyncd.passwd
  1. 備份:
$ rsync -avz --progress --delete [email protected]::www /databack/experiment/rsync

Password:
receiving file list ...
6 files to consider
./ files...
a
0 100% 0.00kB/s 528:20:41 (1, 50.0% of 6)
b
67 100% 65.43kB/s 0:00:00 (2, 66.7% of 6)
c
0 100% 0.00kB/s 528:20:41 (3, 83.3% of 6)
dd
100663296 100% 37.49MB/s 0:00:02 (4, 100.0% of 6)
sent 172 bytes received 98276 bytes 17899.64 bytes/sec
total size is 150995011 speedup is 1533.75
  1. 恢復,前提是服務端允許客戶端有寫入許可權,否則也不能在客戶端直接對服務端進行恢復:
$ rsync -avz --progress /databack/experiment/rsync/ [email protected]::www

Password:
building file list ...
6 files to consider
./
a
b
67 100% 0.00kB/s 0:00:00 (2, 66.7% of 6)
c
sent 258 bytes received 76 bytes 95.43 bytes/sec
total size is 150995011 speedup is 452080.87

rsync daemon 多模組:

$ vi /etc/rsyncd.conf

uid = rsync                          --- 指定管理備份目錄的用戶  
gid = rsync                          --- 指定管理備份目錄的用戶組
port = 873                           --- 定義rsync備份服務的網路埠號
fake super = yes                     --- 將rsync虛擬用戶偽裝成為一個超級管理員用戶,非root用戶不能使用 -og
use chroot = no                      --- 和安全相關的配置
max connections = 200                --- 最大連接數  同時只能有200個客戶端連接到備份伺服器
timeout = 300                        --- 超時時間(單位秒)
pid file = /var/run/rsyncd.pid       --- 記錄進程號碼資訊 1.讓程式快速停止進程 2. 判斷一個服務是否正在運行
lock file = /var/run/rsync.lock      --- 鎖文件
log file = /var/log/rsyncd.log       --- rsync服務的日誌文件 用於排錯分析問題
ignore errors                        --- 忽略傳輸中的簡單錯誤
read only = false                    --- 指定備份目錄是可讀可寫
list = false                         --- 使客戶端可以查看服務端的模組資訊
hosts allow = 172.16.1.0/24          --- 允許傳輸備份數據的主機(白名單)
hosts deny = 0.0.0.0/32              --- 禁止傳輸備份數據的主機(黑名單)
auth users = rsync_backup            --- 指定認證用戶 
secrets file = /etc/rsync.password   --- 指定認證用戶密碼文件 用戶名稱:密碼資訊
[backup]                             --- 模組資訊
comment = "backup dir by oldboy"  
path = /backup                       --- 模組中配置參數 指定備份目錄
[dba]
comment = "backup dir by oldboy"
path = /dba
[dev]
comment = "backup dir by oldboy"
path = /devdata

創建rsync服務的虛擬用戶
useradd rsync -M -s /sbin/nologin

創建備份服務認證密碼文件
echo "rsync_backup:oldboy123" >/etc/rsync.password && chmod 600 /etc/rsync.password

創建備份目錄並修改屬主屬組資訊
mkdir /backup && chown rsync.rsync /backup/

啟動備份服務
systemctl start rsyncd
systemctl enable rsyncd
systemctl status rsyncd

客戶端配置免密傳輸
echo "oldboy123" >/etc/rsync.password && chmod 600 /etc/rsync.password
rsync -avz /etc/hosts [email protected]::backup --password-file=/etc/rsync.password
ethtool

返回網路管理

永久配置寫入文件,下面兩個之一:

  • /etc/sysconfig/network-scripts/ifcfg-eth0ETHTOOL_OPTS="speed 100 duplex full autoneg off"
  • /etc/rc.d/rc.localethtool -s eth0 speed 100 duplex full autoneg off
ethtool -a|--show-pause devname
ethtool -A|--pause devname [autoneg on|off] [rx on|off] [tx on|off]
ethtool -c|--show-coalesce devname
ethtool -C|--coalesce devname [adaptive-rx on|off] [adaptive-tx on|off]
       [rx-usecs N] [rx-frames N] [rx-usecs-irq N] [rx-frames-irq N]
       [tx-usecs N] [tx-frames N] [tx-usecs-irq N] [tx-frames-irq N]
       [stats-block-usecs N] [pkt-rate-low N] [rx-usecs-low N] [rx-frames-low N]
       [tx-usecs-low N] [tx-frames-low N] [pkt-rate-high N] [rx-usecs-high N]
       [rx-frames-high N] [tx-usecs-high N] [tx-frames-high N]
       [sample-interval N]
ethtool -g|--show-ring devname
ethtool -G|--set-ring devname [rx N] [rx-mini N] [rx-jumbo N] [tx N]
ethtool -i|--driver devname
ethtool -d|--register-dump devname [raw on|off] [hex on|off] [file name]
ethtool -e|--eeprom-dump devname [raw on|off] [offset N] [length N]
ethtool -E|--change-eeprom devname [magic N] [offset N] [length N] [value N]
ethtool -k|--show-features|--show-offload devname
ethtool -K|--features|--offload devname feature on|off ...
ethtool -p|--identify devname [N]
ethtool -P|--show-permaddr devname
ethtool -r|--negotiate devname
ethtool -S|--statistics devname
ethtool --phy-statistics devname
ethtool -t|--test devname [offline|online|external_lb]
ethtool -s devname [speed N] [duplex half|full] [port tp|aui|bnc|mii]
       [mdix auto|on|off] [autoneg on|off] [advertise N] [phyad N]
       [xcvr internal|external] [wol p|u|m|b|a|g|s|d...]
       [sopass xx:yy:zz:aa:bb:cc] [msglvl N | msglvl type on|off ...]
ethtool -n|-u|--show-nfc|--show-ntuple devname
       [ rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6 | rule N ]
ethtool -N|-U|--config-nfc|--config-ntuple devname
       rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6
       m|v|t|s|d|f|n|r... |
       flow-type ether|ip4|tcp4|udp4|sctp4|ah4|esp4|ip6|tcp6|udp6|ah6|esp6|sctp6
       [src xx:yy:zz:aa:bb:cc [m xx:yy:zz:aa:bb:cc]]
       [dst xx:yy:zz:aa:bb:cc [m xx:yy:zz:aa:bb:cc]] [proto N [m N]] [src-ip ip-
       address [m ip-address]] [dst-ip ip-address [m ip-address]] [tos N [m N]]
       [tclass N [m N]] [l4proto N [m N]] [src-port N [m N]] [dst-port N [m N]]
       [spi N [m N]] [l4data N [m N]] [vlan-etype N [m N]] [vlan N [m N]]
       [user-def N [m N]] [dst-mac xx:yy:zz:aa:bb:cc [m xx:yy:zz:aa:bb:cc]]
       [action N] [context N] [loc N] |
       delete N
ethtool -w|--get-dump devname [data filename]
ethtool -W|--set-dump devname N
ethtool -T|--show-time-stamping devname
ethtool -x|--show-rxfh-indir|--show-rxfh devname
ethtool -X|--set-rxfh-indir|--rxfh devname [hkey xx:yy:zz:aa:bb:cc:...]  [ equal
       N | weight W0 W1 ... | default ] [hfunc FUNC] [context CTX | new]
       [delete]
ethtool -f|--flash devname file [N]
ethtool -l|--show-channels devname
ethtool -L|--set-channels devname [rx N] [tx N] [other N] [combined N]
ethtool -m|--dump-module-eeprom|--module-info devname [raw on|off] [hex on|off]
       [offset N] [length N]
ethtool --show-priv-flags devname
ethtool --set-priv-flags devname flag on|off ...
ethtool --show-eee devname
ethtool --set-eee devname [eee on|off] [tx-lpi on|off] [tx-timer N] [advertise N]
ethtool --show-fec devname
ethtool --set-fec devname [encoding auto|off|rs|baser]
       -a, --show-pause      查詢指定的乙太網設備以獲取暫停參數資訊。
       -A, --pause           更改指定乙太網設備的暫停參數。
           autoneg on|off    指定是否應啟用暫停自動協商。 
           rx on|off         指定是否應啟用RX暫停。
           tx on|off         指定是否應啟用TX暫停。
       -c, --show-coalesce   查詢指定的網路設備以獲取合併資訊.
       -C, --coalesce        更改指定網路設備的合併設置.
       -g, --show-ring       查詢指定網路設備的rx/tx環參數資訊.
       -G, --set-ring        更改指定網路設備的rx/tx環參數。
           rx N              更改Rx環的環條目數。
           rx-mini N         更改Rx mini 環的環條目數。
           rx-jumbo N        更改Rx Jumbo 環的環條目數。
           tx N              更改Tx環的環條目數。
       -i, --driver          查詢指定的網路設備以獲取相關的驅動程式資訊。
       -d, --register-dump   檢索並列印指定網路設備的暫存器轉儲
       -e, --eeprom-dump     檢索並列印指定網路設備的EEPROM轉儲。
           raw on|off
           offset N
           length N
       -E, --change-eeprom   更改指定網路設備的EEPROM位元組
       -k, --show-features --show-offload
                             查詢指定的網路設備卸載參數和其他功能的狀態。
       -K, --features --offload
                             更改指定網路設備的卸載參數和其他功能
           rx on|off         指定是否應啟用RX校驗和。
           tx on|off         指定是否應啟用TX校驗和。
           sg on|off         指定是否應啟用散射聚集。
           tso on|off        指定是否應啟用TCP分段卸載。
           ufo on|off        指定是否應啟用UDP碎片卸載
           gso on|off        指定是否應啟用泛型分段卸載
           gro on|off        指定是否應啟用通用接收卸載
           lro on|off        指定是否應啟用大型接收卸載
           rxvlan on|off     指定是否應啟用RX VLAN加速
           txvlan on|off     指定是否應啟用TX VLAN加速
           ntuple on|off     指定是否應啟用Rx ntuple篩選器和操作
           rxhash on|off     指定是否應啟用接收哈希卸載
       -p, --identify   
              用於區別不同ethX對應網卡的物理位置,常用的方法是使網卡port上的led不斷的閃;
           [ N]              網卡閃的持續時間,以秒為單位
       -P, --show-permaddr   查詢指定網路設備的永久硬體地址。
       -r, --negotiate       如果啟用了自動協商,則在指定的乙太網設備上重新啟動自動協商。
       -S, --statistics      查詢指定的網路設備以獲取NIC和驅動程式的統計資訊.
       --phy-statistics      查詢指定網路設備的PHY特定統計資訊。
       -t, --test            在指定的網路設備上執行適配器自檢。可能的測試模式有:
           offline           進行全套測試,可能在測試期間中斷正常操作
           online            進行有限的測試,不中斷正常運行,
           external_lb       執行全套測試,如離線測試,以及額外的外部環回測試。
       -s, --change          允許更改指定網路設備的部分或全部設置。
           speed N           以Mb/s為單位設置速度
           duplex half|full  設置全雙工或半雙工模式。
           port tp|aui|bnc|mii 選擇設備埠。
           mdix auto|on|off
             為埠選擇MDI-X模式:auto自動檢測,on強制MDI-X(交叉)模式,off表示MDI(直通)模式
           autoneg on|off    指定是否應啟用自動協商
           advertise N       設置自動協商播發的速度和雙工,n是一個十六進位值
           phyad N           PHY address.
           xcvr internal|external
                             選擇收發器類型
           wol p|u|m|b|a|g|s|d...
                             設置LAN喚醒選項
                  p   Wake on PHY activity
                  u   Wake on unicast messages
                  m   Wake on multicast messages
                  b   Wake on broadcast messages
                  a   Wake on ARP
                  g   Wake on MagicPacket™
                  s   Enable SecureOn™ password for MagicPacket™
                  d   禁用(無喚醒)。清除所有以前的選項。
           sopass xx:yy:zz:aa:bb:cc
                   設置SecureOn™ 密碼。此選項的參數必須為乙太網MAC十六進位格式的6位元組
           msglvl N
           msglvl type on|off ...
                   按名稱或編號設置驅動程式消息類型標誌
       -n, -u --show-nfc --show-ntuple
                             檢索接收網路流分類選項或規則。
           rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6
                             檢索指定流類型的哈希選項。
           rule N            檢索具有給定ID的RX分類規則。
       -N, -U --config-nfc --config-ntuple
                             配置接收網路流分類選項或規則。
           rx-flow-hash tcp4|udp4|ah4|esp4|sctp4|tcp6|udp6|ah6|esp6|sctp6
           m|v|t|s|d|f|n|r...
                             配置指定流類型的哈希選項。
           flow-type ether|ip4|tcp4|udp4|sctp4|ah4|esp4|ip6|tcp6|udp6|ah6|esp6|sctp6
                             插入或更新指定流類型的分類規則。
       -w, --get-dump        檢索並列印指定網路設備的韌體轉儲
       -W, --set-dump        設置設備的轉儲標誌。
       -T, --show-time-stamping
                             顯示設備的時間戳功能和相關的PTP硬體時鐘。
       -x, --show-rxfh-indir --show-rxfh
                             檢索接收流哈希間接定址表 and/or RSS hash key。
       -X, --set-rxfh-indir --rxfh
                             配置接收流哈希間接定址表 and/or RSS hash key。
       -f, --flash           將韌體映像寫入設備上的快閃記憶體或其他非易失性記憶體.
           file              指定韌體映像的文件名
           N                 指定要寫入的區域
       -l, --show-channels   查詢指定網路設備的頻道數
       -L, --set-channels    更改指定網路設備的頻道數。
           rx N              更改只有接收隊列的通道數。
           tx N              更改只有傳輸隊列的通道數。
           other N           更改僅用於其他目的的信道數量
           combined N        更改多用途頻道的數量。
       -m, --dump-module-eeprom --module-info
                             從插件模組中檢索EEPROM並解碼(如有可能)
       --show-priv-flags     查詢指定網路設備的專用標誌
       --set-priv-flags      按指定設置設備的專用標誌。
           flag on|off       設置命名私有標誌的狀態。
       --show-eee            查詢指定的網路設備是否支援節能
       --show-fec            查詢指定的網路設備是否支援前向糾錯。
       --set-fec             為指定的網路設備配置前向糾錯。
           encoding auto|off|rs|baser
                             設置設備的FEC編碼。
                  auto    使用驅動程式的默認編碼
                  off     Turn off FEC
                  RS      Force RS-FEC encoding
                  BaseR   Force BaseR encoding
Example:
ethtool eth0              查詢網口基本設置
ethtool -i eth0           查詢網口的驅動相關資訊
ethtool -A tx off eth0    停止網卡的發送模組TX
ethtool -a eth0           查詢網口暫停參數
ethtool -K eth0 rx off    關閉網卡對收到的數據包的校驗功能
ethtool –k eth0           查看校驗功能是否已被停止
ethtool -p eth0 10        區別網卡物理位置,led快速閃爍
ethtool -S eth0           查看網卡,在接收/發送數據時,有沒有出錯
ethtool -s eth0 speed 100 duplex full autoneg off  設置網口工作方式, 速率和雙工必須同時設置
lsmod

返回網路管理

lsmod     顯示已經載入到內核中的模組的狀態資訊

Module     Size      Used         by
模組名稱  模組大小  依賴模組的個數  依賴模組的內容

lsmod | grep -i ext3     查詢當前系統是否載入了ext3模組
modinfo

返回網路管理

modinfo [ -k kernel ] [ modulename|filename... ]   顯示模組的詳細描述資訊
        -n:只顯示模組文件路徑
        -p:顯示模組參數
        -a:作者
        -d:描述

Example:
lsmod | grep xfs
modinfo xfs
depmod

內核模組依賴關係文件及系統資訊映射文件的生成工具

產生模組依賴的映射文件,在構建嵌入式系統時,需要由這個命令來生成相應的文件,由modprobe使用。

depmod [選項]
       -a, --all	                  分析所有可用的模組
       -b<目錄>	                     指定內核模組目錄
       -d, --debug                    執行排錯模式
       -e	                          輸出無法參照的符號
       -F	                          提供內核編譯時生成的system.map文件
       -i                             不檢查符號表的版本
       -n	                          將各種內核映射文件列印到標準輸出
       -A	                          快速模式
       -m <文件>, --system-map <文件>  使用指定的符號表文件
       -s, --system-log               在系統記錄中記錄錯誤
       -v, --verbose                  執行時顯示詳細的資訊
       
Example:
depmod -a   顯示可用模組
depmod -e   列出已掛載但不可用的模組
depmod -n   列出所有模組的依賴關係,但僅僅是輸出出來

編譯linux過程及執行depmod的例子:

genkernel.sh (at linux-2.6.18_pro500)
#######
export INSTALL_ROOT_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos"
export INSTALL_MOD_EMMA3PF="/home/windsome/EMMA3PF-KernelSource-20080626/install_pos"
rm /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/lib -rf
rm /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/boot/* -rf
cd <linux_src_dir>
make
make modules_install
cp vmlinux System.map /home/windsome/EMMA3PF-KernelSource-20080626/install_pos/boot/ -p
cd /home/windsome/EMMA3PF-KernelSource-20080626/install_pos
depmod -b /home/windsome/EMMA3PF-KernelSource-20080626/install_pos -e -F ./boot/System.map -v 2.6.18_pro500-bcm91250-mips2_fp_be -A -a
  • /home/windsome/EMMA3PF-KernelSource-20080626/install_pos是我make mod_install後,所有模組的存放路徑。
  • ./boot/System.mapmake linux後生成,我拷貝到此目錄的。
  • 2.6.18_pro500-bcm91250-mips2_fp_be是我build的linux的版本。

編譯新驅動:

  1. 先將模組拷貝到/lib/modules/2.6.31-20-generic目錄下,
  2. 然後運行sudo depmod -a將模組資訊寫入modules.dep、modules.dep.bin、modules.alias.bin、modules.alias和modules.pcimap文件中。
  3. 最後用modprobe ***載入模組

​ 例如,編譯一個新的wifi驅動r8192se_pci.ko,將其拷貝到/lib/modules/2.6.31-20-generic/wireless下,然後到/lib/modules/2.6.31-20-generic運行depmod -a,之後可以在任意目錄運行modprobe r8192se_pci。

modprobe

返回網路管理

用於智慧地向內核中載入模組或者從內核中移除模組。可載入指定的個別模組,或是載入一組相依的模組。

modprobe會根據depmod所產生的相依關係,決定要載入哪些模組。若在載入過程中發生錯誤,modprobe會卸載整組的模組。內核模組載入成功或失敗資訊可以使用dmesg指令來查看。

配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

modprobe [options] [-i] [-b] modulename
modprobe [options] -a [-i] [-b] modulename [modulename...]
modprobe [options] -r [-i] modulename
modprobe [options] -r -a [-i] modulename [modulename...]
modprobe [options] -c
modprobe [options] --dump-modversions filename
         -a, --all	        載入命令行給出的全部的模組
         -c, --show-conf	顯示所有模組的設置資訊
         -d, --debug	    使用排錯模式
         -l, --list     	顯示可用的模組
         -r, --remove	    模組閑置不用時,從內核中移除模組
         -t, --type	        指定模組類型
         -s	                記錄錯誤資訊到系統日誌中
         --show-depends	    顯示模組依賴關係
         -v, --verbose  	執行時顯示詳細的資訊

Example:
modprobe -c                 查看modules的配置文件
modprobe -l                 列出內核中所有已經或者未掛載的所有模組
modprobe e1000              掛載指定模組(網卡驅動)
modprobe -r e1000           移除指定模組(網卡驅動),和rmmod功能相同
insmod

返回網路管理

insmod [ filename ] [ module options... ]  指定模組文件,不自動解決依賴模組
insmod `modinfo –n exportfs`
lnsmod `modinfo –n xfs`
rmmod

返回網路管理

remove module,用於卸載模組,與modprobe -r命令相似。

Linux作業系統的核心具有模組化的特性,因此在編譯核心時,不需要把全部功能都放入核心,可以將這些功能編譯成一個個單獨的模組,待有需要時再分別載入它們。

rmmod [選項] [模組名稱]
      -a	刪除所有目前不需要的模組
      -s	把資訊輸出至syslog,而非終端機介面
      -v	顯示指令執行的詳細資訊
      -f	強制移除模組,使用此選項比較危險
      -w	等待,直到模組能夠被除時再移除模組
strace

strace命令是一個集診斷、調試、統計與一體的工具,我們可以使用strace對應用的系統調用和訊號傳遞的跟蹤結果來對應用進行分析,以達到解決問題或者是了解應用工作過程的目的。

strace常用來跟蹤進程執行時的系統調用和所接收的訊號。 在Linux中,進程不能直接訪問硬體設備,當進程需要訪問硬體設備(比如讀取磁碟文件,接收網路數據等等)時,必須由用戶態模式切換至內核態模式,通 過系統調用訪問硬體設備。strace可以跟蹤到一個進程產生的系統調用,包括參數,返回值,執行消耗的時間。

strace [-CdffhiqrtttTvVwxxy] [-I n] [-e expr]...
       [-a column] [-o file] [-s strsize] [-P path]...
       -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
strace -c[dfw] [-I n] [-e expr]... [-O overhead] [-S sortby]
       -p pid... / [-D] [-E var=val]... [-u username] PROG [ARGS]
       -c	統計每一系統調用的所執行的時間,次數和出錯的次數等
       -d	輸出strace關於標準錯誤的調試資訊
       -f	跟蹤由fork調用所產生的子進程
       -F	嘗試跟蹤vfork調用.在-f時,vfork不被跟蹤
       -a	設置返回值的輸出位置.默認為40
       -r	列印每一個系統調用的相對時間
       -t	在輸出中的每一行前加上時間資訊
Example:
通用的完整用法,跟蹤28979進程的所有系統調用(-e trace=all),並統計系統調用的花費時間,以及開始時間(並以可視化的時分秒格式顯示),最後將記錄結果存在output.txt文件裡面:
strace -o output.txt -T -tt -e trace=all -p 28979

跟蹤whoami時的輸出:
strace -o whoami-strace.txt whoami

同時跟蹤fork和vfork出來的進程,把所有strace輸出寫到~/dcop-strace.txt裡面, 啟動調試dcopserver:
strace -f -F -o ~/dcop-strace.txt dcopserver

限制strace只跟蹤特定的系統調用:
strace -f -o configure-strace.txt -e execve ./configure
watch

返回抽取文本操作

watch命令以周期性的方式執行給定的指令,指令輸出以全螢幕方式顯示。

watch是一個非常實用的命令,基本所有的Linux發行版都帶有這個小工具,如同名字一樣,watch可以幫你監測一個命令的運行結果,省得你一遍遍的手動運行。

watch [options] command
      -b, --beep                 如果命令有非零退出,則發出嗶聲
      -c, --color                解釋ANSI顏色和樣式序列
      -d, --differences[=<permanent>]
                                 高亮顯示變化的區域
      -d=cumulative              變動過的地方(不管最近的那次有沒有變動)都高亮顯示出來
      -e, --errexit              如果命令有非零退出,則退出
      -g, --chgexit              命令輸出更改時退出
      -n, --interval <secs>      指定運行間隔時間,默認2秒
      -p, --precise              嘗試以精確的間隔運行命令
      -t, --no-title             關閉頂部的時間間隔、命令、當前時間的輸出

Example:
watch -n 1 -d netstat -ant       每隔一秒高亮顯示網路鏈接數的變化情況:
watch -n 60 from                 監控mail
watch -n 1 "df -i;df"            監測磁碟inode和block數目變化情況
watch -d 'ls -l|grep test.txt'   監測當前目錄中test.txt文件的變化
bc

返回抽取文本操作

任意精度計算器語言

yum -y install bc
運算:
     + 加法
     - 減法
     * 乘法
     / 除法
     ^ 指數
     % 餘數
	 
bc [ OPTIONS ] 指定包含計算任務的文件
   -i                                  強制進入互動式模式,默認值;
   -l                                  定義使用的標準數學庫
   ; -w                               對POSIX bc的擴展給出警告資訊;
   -q                                  不列印正常的GNU bc環境資訊;
   
bc                                     進入計算器互動式模式
quit                                   退出	 
echo "15+5" | bc                    
echo "sqrt(100)" | bc                  計算平方根
echo 'scale=2; (2.77-1.44)/1' | bc     保留2位小數scale=2;注意結果要/1
echo "ibase=2;111" |bc                 將後面的二進位數ibase=2;轉換為十進位數
echo "obase=2;7" | bc                  將後面的十進位數obase=2;轉換為二進位數
expr

返回抽取文本操作

expr   命令行計數器,參數必須是整數,否則報錯

四則運算:
$ expr \( 10 + 10 \) \* 2 - \( 10 % 2 \)
40

計算字元串長度:
$ expr length 「this is a test」  
14 

抓取字元串:
$ expr substr 「this is a test」 3 5 
is is

指定字元在字元串第一次出現的位置:
$ expr index "sarasara" a 
2
seq

返回抽取文本操作

seq [option] 起始值 間隔值 結束值    列印數字序列
    -f, --format=FORMAT           列印 FORMAT 格式 浮點樣式
    -s, --separator=STRING        使用字元串分隔數字(default: \n)
    -w, --equal-width             在列前添加0 使得寬度相同

Example:
seq -s ':' -f "%03g" 18 31        列印18~31之間的整數,數字間的分隔符為':'
tee

返回抽取文本操作

從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件 。

tee [選項]... [文件]...
    -a	內容追加到給定的文件而非覆蓋
    -i	忽略中斷訊號
column

返回抽取文本操作

將輸入格式化為多個列。在列之前填充行。輸入可以來自文件,默認情況下來自標準輸入。

column              將其輸入格式化為多個列,在列之前填充行
       -s sep	    指定一組字元,用於分隔-t選項的列
	   -t	        確定輸入包含的列數並創建表
	   -n	        禁用將多個相鄰分隔符合併為單個分隔符行為
	   -c columns	輸出格式化為顯示columns列寬
	   -x	        在填充行之前填充列
	   -e	        不要忽略空白行(默認忽略空白行)
screen

返回進程管理

會話恢復

只要Screen本身沒有終止,在其內部運行的會話都可以恢復。這一點對於遠程登錄的用戶特別有用——即使網路連接中斷,用戶也不會失去對已經打開的命令行會話的控制。只要再次登錄到主機上執行screen -r就可以恢復會話的運行。同樣在暫時離開的時候,也可以執行分離命令detach,在保證裡面的程式正常運行的情況下讓Screen掛起(切換到後台)。這一點和圖形介面下的VNC很相似。

多窗口

在Screen環境下,所有的會話都獨立的運行,並擁有各自的編號、輸入、輸出和窗口快取。用戶可以通過快捷鍵在不同的窗口下切換,並可以自由的重定向各個窗口的輸入和輸出。Screen實現了基本的文本操作,如複製粘貼等;還提供了類似滾動條的功能,可以查看窗口狀況的歷史記錄。窗口還可以被分區和命名,還可以監視後台窗口的活動。 會話共享 Screen可以讓一個或多個用戶從不同終端多次登錄一個會話,並共享會話的所有特性(比如可以看到完全相同的輸出)。它同時提供了窗口訪問許可權的機制,可以對窗口進行密碼保護。

yum -y install screen
screen                     默認以tty+主機名創建會話
screen –S [SESSION]        創建SESSION會話
screen –x [SESSION]        加入SESSION會話
screen -ls, -list          顯示所有已經打開的screen會話
screen -r [SESSION|PID]    恢復SESSION會話
screen -d [SESSION|PID]    離線SESSION會話
screen -d -r [SESSION|PID] 結束當前session會話恢復SESSION會話
Ctrl+d | exit              退出並關閉當前screen會話
Ctrl+a,d                   暫時中斷當前screen會話
screen [-AmRvx -ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s ][-S <作業名稱>]
       -A            將所有的視窗都調整為目前終端機的大小。
       -d <作業名稱>  將指定的screen作業離線。
       -h <行數>      指定視窗的緩衝區行數。
       -m            即使目前已在作業中的screen作業,仍強制建立新的screen作業。
       -r <作業名稱>  恢復離線的screen作業。
       -R            先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。
       -s            指定建立新視窗時,所要執行的shell。
       -S <作業名稱>   指定screen作業的名稱。
       -x            恢復之前離線的screen作業。
       -ls或--list    顯示目前所有的screen作業。
       -wipe         檢查目前所有的screen作業,並刪除已經無法使用的screen作業。
在每個screen session 下,所有命令都以 ctrl+a(C-a) 開始:
C-a ? -> 顯示所有鍵綁定資訊
C-a c -> 創建一個新的運行shell的窗口並切換到該窗口
C-a n -> Next,切換到下一個 window 
C-a p -> Previous,切換到前一個 window 
C-a 0..9 -> 切換到第 0..9 個 window
Ctrl+a [Space] -> 由視窗0循序切換到視窗9
C-a C-a -> 在兩個最近使用的 window 間切換 
C-a x -> 鎖住當前的 window,需用用戶密碼解鎖
C-a d -> detach,暫時離開當前session,將目前的 screen session (可能含有多個 windows) 丟到後台執行,並會回到還沒進 screen 時的狀態,此時在 screen session 里,每個 window 內運行的 process (無論是前台/後台)都在繼續執行,即使 logout 也不影響。 
C-a z -> 把當前session放到後台執行,用 shell 的 fg 命令則可回去。
C-a w -> 顯示所有窗口列表
C-a t -> time,顯示當前時間,和系統的 load 
C-a k -> kill window,強行關閉當前的 window
C-a [ -> 進入 copy mode,在 copy mode 下可以回滾、搜索、複製就像用使用 vi 一樣
C-b Backward,PageUp 
C-f Forward,PageDown 
H(大寫) High,將游標移至左上角 
L Low,將游標移至左下角 
0 移到行首 
$ 行末 
w forward one word,以字為單位往前移 
b backward one word,以字為單位往後移 
Space 第一次按為標記區起點,第二次按為終點 
Esc 結束 copy mode 
C-a ] -> paste,把剛剛在 copy mode 選定的內容貼上

mail: 通過電子郵件發送輸入

-b<地址>:指定密件副本的收信人地址;
-c<地址>:指定副本的收信人地址;
-f<郵件文件>:讀取指定郵件文件中的郵件;
-i:不顯示終端發出的資訊;
-I:使用互動模式;
-n:程式使用時,不使用mail.rc文件中的設置;
-N:閱讀郵件時,不顯示郵件的標題;
-s<郵件主題>:指定郵件的主題;
-u<用戶帳號>:讀取指定用戶的郵件;
-v:執行時,顯示詳細的資訊。
echo "test email" | mail -s "test" wang 
echo輸入的命令,`-s`表示郵件的主題,後面的`[email protected]`則是郵件的接收人,輸入完這行命令後回車,會進入郵件正文的編寫,我們可以輸入任何文字,比如上面的兩行。當郵件正文輸入完成後,需要按**CTRL+D**結束輸入,此時會提示你輸入Cc地址,即郵件抄送地址,沒有直接回車就完成了郵件的發送。
echo "hello,this is the content of mail.welcome to www.linuxde.net" | mail -s "Hello from linuxde.net by pipe" [email protected]

[『』返回頁首](#bash shell)

ShellScript

CentOS7