續寫vim,shell腳本基礎編輯,read命令,if與case判斷語句,文件查找方式,壓縮與解壓,

1、 Vim續寫

 一、命令擴展模式的位置定界

  起始位置 cmd 終止位置
   Cmd:
    y複製
    d刪除
    Gu變大寫
    gu變小寫
  例如:0y$命令意味着:
    0 先到行頭
    Y 從這裏開始拷貝
    $ 拷貝到本行行尾最後一個字符
    Ye 從當前位置拷貝到本單詞的最後一個字符php

 二、擴展命令模式:地址定界

   # 具體第#行,
   #1,#2 從開頭數第#1行到第#2行
   #1,+#2 從開頭數的第#1行到從第#1行開始數的第#2行
     例:2,+3 表示第2行到第五行
   . 當前行
   $ 最後一行
   . ,$-1 當前行到倒數第二行
   % 全文,至關於1,$
   /pat1/,/pat2/ 從第一次被pat1 模式匹配的行開始,一直到第一次被pat2匹配的行結束
    #,/pat/ 從第#行到第一次匹配到pat結束
    /pat/,$ 從第一次匹配到pat到最後一行
   使 用方式:後跟一個編輯命令
     d 剪切
     y 複製
     w file 將範圍內的行另存至指定文件中
     r file 在指定位置插入指定文件中的全部內容node

 三、查找並替換

   s: 在擴展模式下完成替換操做
     地址定界s/要查找的內容/替換爲的內容/修飾符
       要查找的內容:可使用正則表達式
       替換爲的內容:不可使用正則,但可使用\1,\2調用前面表達式裏的分組,還可使用&引用前面查找時查找到的整個內容
       修飾符:
          i:忽略大小寫
         g:全局替換,(默認狀況下,每一行只替換第一次出現)
         gc :全局替換,每次替換前詢問
        查找替換中的分隔符/可替換爲其它字符,例如:
         %s@dog@cat@g 把全文中的dog都替換成cat
         %s#dog#cat#i 把每行第一次出現的dog替換成cat,忽略大小寫python

 四、Vim的寄存器

       有26個命名寄存器和1個無命名寄存器,常存放不一樣的剪貼版 內容,能夠不一樣會話間共享
       寄存器名稱a,b,…,z,格式:「寄存器 放在數字和命令之間
         如:3"tyy 表示複製3行到t寄存器中
       "tp 表示將t寄存器內容粘貼
       未指定,將使用無命名寄存器
       有10個數字寄存器,用0,1,…,9表示,0存放最近複製內容
       ,1存放最近刪除內容。當新的文本變動和刪除時,1轉存到2
       ,2轉存到3,以此類推。數字寄存器不能在不一樣會話間共享正則表達式

 五、編輯二進制文件

   1.以二進制方式打開文件
      Vim -b 文件路徑
   2.擴展命令模式下,利用xxd命令轉換爲可讀的十六進制
     :%!xxd
     編輯二進制文件
   3.擴展命令模式下,利用xxd命令轉換回二進制
        :%!xxd -r
     保存退出shell

 六、可視化模式

   容許選擇的文本塊
     v :面向字符
     V :面向行
     Ctrl-v 面向塊
   可視化鍵可用於與移動鍵結合使用:
     w 選中一個單詞
     ) } 選中從當前到文本尾部
     箭頭鍵
   突出顯示的文字可被刪除,複製,變動,過濾,搜索,替換等數據庫

 七、多文件模式

   Vim file1 file2 file3
     :next 下一個
     :prev 前一個
     :first 第一個
     :last 最後一個
     :wall 保存全部
     :qall 退出全部
     :wqall 保存全部並退出express

 八、使用多個「窗口」

   1.多文件分隔
     Vim -o|-O file1 file2
        -o:水平分割
        -O:垂直分割
在窗口間切換:Ctrl+w
續寫vim,shell腳本基礎編輯,read命令,if與case判斷語句,文件查找方式,壓縮與解壓,
   2.單文件窗口分割
     Ctrl+w,s:水平分割
     Ctrl+w,v:垂直分割
     Ctrl+w,q:取消相鄰窗口
     Ctrl+w,o:取消所有窗口
     :wqall 保存退出
續寫vim,shell腳本基礎編輯,read命令,if與case判斷語句,文件查找方式,壓縮與解壓,編程

 九、定製vim的工做特性

   配置文件:永久有效
    全局:/etc/vimrc
    我的: ~/.vimrc
    擴展模式:當前你vim進程有效vim

  1. 行號

   Set number 顯示行號,簡寫 set nu
   Set nonumber 取消顯示行號 簡寫 set nonuc#

  2. 括號成對匹配

   Set showmatch 匹配 簡寫 set sm
   Set nosm 取消

  3. 自動縮進

   啓用:set ai
   禁用:set noai

  4. 高亮搜索

   啓用:set hlsearch
   禁用:set nohlsearch

  5. 語法高亮

   啓用:syntax on
   禁用:syntax off

  6. 忽略字符的大小寫

   啓用:set ic
   不忽略:set noic

  7. 文件格式

   啓用windows格式:set fileformat=dos
   啓用unix格式:set fileformat=unix

  8. 設置文本寬度

   :set textwidth=65 (vim only)
   :set wrapmargin=15

  9.Vim內置幫助

   :help

2、 Shell腳本編程基礎

 一、 編程基礎

  程序:指令+數據
  程序編程風格:
  過程式:以指令爲中心,數據服務於指令
  對象式:以數據爲中心,指令服務於數據
  shell程序:提供了編程能力,解釋執行

 二、 程序的執行方式

  計算機:運行二進制指令
  編程語言:
   低級:彙編
    高級:
      編譯:高級語言-->編譯器-->目標代碼
         Java,c#
      解釋:高級語言-->解釋器-->機器代碼
          Shell,perl,python

 三、 編程基本概念

  1.編程邏輯處理方式:

    順序執行
    循環執行
    選擇執行

  2.shell編程:過程式、解釋執行

  3.編程語言的基本結構:

各類系統命令的組合
          數據存儲:變量、數組
          表達式: a + b
          語句:if

 四、 Shell腳本基礎

  shell腳本:
   包含一些命令或聲明,並符合必定格式的文本文件
  格式要求:
   首行shebang機制(就是首行要寫執行的shell,不然就會使用默認shell來運行該腳本,容易出錯,致使腳本執行錯誤執行)
    #!/bin/bash
    #!/usr/bin/python
    #!/usr/bin/perl
  shell腳本的用途有:
   自動化經常使用命令
   執行系統管理和故障排除
   建立簡單的應用程序
   處理文本或文件

 五、 建立shell腳本

  第一步:使用文本編輯器來建立文本文件
   第一行必須包括shell聲明序列:#! #!/bin/bash
   添加註釋 註釋以#開頭
  第二步:運行腳本
   給予執行權限,在命令行上指定腳本的絕對或相對路徑
   直接運行解釋器,將腳本做爲解釋器程序的參數運行

 六、 腳本規範

  腳本代碼開頭約定
   1.第一行通常爲調用使用的語言
   2.程序名,避免更改文件名爲沒法找到正確的文件
   3.版本號
   4.更改後的時間
   5.做者相關信息
   6.該程序的做用,及注意事項
   7.最後是各版本的更新簡要說明

 七、 腳本的基本結構

  #!SHEBANG
  CONFIGURATION_VARIABLES
  FUNCTION_DEFINITIONS
  MAIN_CODE

 八、 腳本調試

  檢測腳本中的語法錯誤
   bash -n /path/to/some_script
   調試執行
    bash -x /path/to/some_script

 九、 變量

  1.變量:命名的內存空間

   數據存儲方式:
    字符:
    數值:整型,浮點型

  2.變量:變量類型

   做用:
    一、 數據存儲格式
    二、 參與的運算
    三、 表示的數據範圍
   類型:
    字符
    數值:整數、浮點型

  3. 強類型:變量不通過強制轉換,它永遠是這個數據類型,不

   容許隱式的類型轉換。通常定義變量時必須指定類型、參與
   運算必須符合類型要求;調用未聲明變量會產生錯誤
   如Java,c# 弱類型:語言的運行時會隱式作數據類型轉換。無須指定類型,默認均爲字符型;參與運算會自動進行隱式類型轉換;
   變量無須事先定義可直接調用
   如bash 不支持浮點數,php

  4. 變量命名法則

   一、不能使程序中的保留字:例如if, for
   二、只能使用數字、字母及下劃線,且不能以數字開頭
   三、見名知義
   四、統一命名規則:駝峯命名法

  5.bash中變量的種類

   本地變量:生效範圍爲當前shell進程;對當前shell以外 的其它shell進程,包括當前shell的子shell進程均無效
   環境變量:生效範圍爲當前shell進程及其子進程
   局部變量:生效範圍爲當前shell進程中某代碼片段(一般 指函數)
   位置變量:$1, $2, ...來表示,用於讓腳本在腳本代碼 中調用經過命令行傳遞給它的參數
   特殊變量:$?, $0, $*, $@, $#,$$

  6.本地變量

   變量賦值:name=‘value‘
   能夠直接引用value:
    一、 能夠是直接字符串。Name=「root」
    二、 變量引用:name=「$user」
    三、 命令引用:name=·cmd· 或name=$(cmd)
   變量引用:${name} $name
   「」:弱引用,其中的變量引用會被替換爲變量值
   ‘’:強引用其中的變量引用不會被替換爲變量值,而保持原字符串
   顯示已定義的全部變量:set
    刪除變量:unset name

  7.環境變量

   變量聲明、賦值:
    export name=VALUE
    declare -x name=VALUE
   變量引用:$name,${name}
   顯示全部環境變量:
    Env
    Printenv
    Export
    Declare
   刪除變量
    Unset name
    bash內建的環境變量
    PATH
    SHELL
    USER
    UID
    HOME
    PWD
    SHLVL
    LANG
    MAIL
    HOSTNAME
    HISTSIZE

  8.只讀變量

   只讀變量:只能聲明,但不能修改和刪除
    聲明只讀變量:
     readonly name
     declare -r name
   查看只讀變量:
     readonly –p
   位置變量:在腳本代碼中調用經過命令行傳遞給腳本的參數
    $1, $2, ...:對應第一、第2等參數,shift [n]換位置
    $0: 命令自己
    $: 傳遞給腳本的全部參數,所有參數合爲一個字符串
    $@: 傳遞給腳本的全部參數,每一個參數爲獨立字符串
    $#: 傳遞給腳本的參數的個數
    $@ $
只在被雙引號包起來的時候纔會有差別
    set -- 清空全部位置變量

 十、 退出狀態

  進程使用退出狀態來報告成功或失敗
    0 表明成功,1-255表明失敗
  $? 變量保存最近的命令退出狀態
  例如:
    Ping 172.28.250.1
    Echo $?

 十一、 退出狀態碼

  Bash自定義退出狀態碼
  exit [n]:自定義退出狀態碼
  注意:腳本中一旦遇到exit命令,腳本會當即終止;終止退出 狀態取決於exit命令後面的數字
  注意:若是未給腳本指定退出狀態碼,整個腳本的退出狀態碼 取決於腳本中執行的最後一條命令的狀態碼

 十二、 算術運算

  Bash中的算術運算:help let
   + ,-,*,/,%取模(取餘),**(乘方)
  實現算術運算:
   (1) let var=算術表達式
   (2) var=$[算術表達式]
   (3) var=$((算術表達式))
   (4) var=$(expr arg1 arg2 arg3 ...)
   (5) declare –i var = 數值
   (6) echo ‘算術表達式’ | bc
      乘法符號有些場景中須要轉義,如*
   Bash有內建的隨機數生成器:$RSNDOM(0-32767)
     echo $[$RANDOM%50] :0-49之間隨機數

 1三、 賦值

  加強型賦值
   +=, -=, *=, /=, %=
  let varOPERvalue
   例如:let count+=3
   自加 3後自賦值
  自增,自減:
    let var+=1
    let var++
    let var -=1
    et var--

 1四、邏輯運算

  true, false
   1 ,0
   與:
    1 與 1 = 1
    1 與 0 = 0
    0 與 1 = 0
    0 與 0 = 0
   或:
   1 或 1 = 1
   1 或 0 = 1
   0 或 1 = 1
   0 或 0 = 0
  非:!
    ! 1 = 0
    ! 0 = 1
  短路運算:
   短路與
     第一個爲0,結果一定爲0
     第一個爲1,第二個必需要參與運算
   短路或
     第一個爲1,結果一定爲1
     第一個爲0,第二個必需要參與運算
   異或:^
    異或的兩個值,相同爲假,不一樣爲真

 1五、條件測試

  判斷某需求是否知足,須要由測試機制來實現
  專用的測試表達式須要由測試命令輔助完成測試過程
  評估布爾聲明,以便用在條件性執行中
   若真,則返回0
   若假,則返回1
  測試命令:
   test EXPRESSION
   [ EXPRESSION ]
   [[ EXPRESSION ]]
注意:表達式先後與中括號之間必定要有一個空格expression的意思是表達式

 1六、條件性的執行操做符

  根據退出狀態而定,命令能夠有條件地運行
   && 表明條件性的AND THEN(與)
    || 表明條件性的OR ELSE(或)
  例如:
    Grep -q dog /app/cc && echo 成功
    Ping -c1 -W2 172.18.0.1 &> /dev/null && echo ping通了

 1七、test命令

  長格式的例子:
   test "$A" == "$B" && echo "Strings are equal"
    若A=B ,則輸出strings are equal
    test 「$A」 -eq 「$B」 && echo "Integers are equal"
     若A不等於B,則輸出integers are equal
   簡寫格式的例子:
    [ "$A" == "$B" ] && echo "Strings are equal"
    [ "$A" -eq "$B" ] && echo "Integers are equal"

 1八、bash的數值測試

  -v VAR
   變量VAR 是否存在
  數值測試:
   -gt 是否大於
   -ge 是否大於等於
   -eq 是否等於
   -ne 是否不等於
   -lt 是否小於
   -le 是否小於等於
  字符串測試:
   == 是否等於
   > ascii碼是否大於ascii碼
   < 是否小於
   != 是否不等於
    =~ 左側字符串是否可以被右側的PATTERN所匹配
     注意: 此表達式通常用於[[ ]]中;擴展的正則表達式
   -z "STRING「 字符串是否爲空,空爲真,不空爲假
   -n "STRING「 字符串是否不空,不空爲真,空爲假
    (注意:用於字符串比較時的用到的操做數都應該使用引號)

 1九、bash的文件測試(下列FILE均表明文件路徑)

  存在性測試
    -a FILE:同-e
    -e FILE: 文件存在性測試,存在爲真,不然爲假
  存在性及類別測試
   -b FILE:是否存在且爲塊設備文件
   -c FILE:是否存在且爲字符設備文件
   -d FILE:是否存在且爲目錄文件
   -f FILE:是否存在且爲普通文件
   -h FILE 或 -L FILE:存在且爲符號連接文件
   -p FILE:是否存在且爲命名管道文件
   -S FILE:是否存在且爲套接字文件
  文件權限測試
    -r FILE:是否存在且可讀
   -w FILE: 是否存在且可寫
   -x FILE: 是否存在且可執行
  文件特殊權限測試:
   -u FILE:是否存在且擁有suid權限
   -g FILE:是否存在且擁有sgid權限
   -k FILE:是否存在且擁有sticky權限
  文件大小測試:
    -s FILE:是否存在且非空
  文件是否打開:
   -t fd: fd表示文件描述符是否已經打開且與某終端相關
   -N FILE:文件自動上一次被讀取以後是否被修改過
   -O FILE:當前有效用戶是否爲文件屬主
   -G FILE:當前有效用戶是否爲文件屬組
  雙目測試:
   FILE1 -ef FILE2: FILE1與FILE2是否指向同一個設 備上的相同inode
   FILE1 -nt FILE2: FILE1是否新於FILE2(mtime)
   FILE1 -ot FILE2: FILE1是否舊於FILE2

 20、bash的組合測試條件

  第一種方式:
   COMMAND1 && COMMAND2 而且
   COMMAND1 || COMMAND2 或者
   ! COMMAND 非
    如:[[ -r FILE ]] && [[ -w FILE ]]
   第二種方式:
   EXPRESSION1 -a EXPRESSION2 而且
   EXPRESSION1 -o EXPRESSION2 或者
   ! EXPRESSION
    必須使用測試命令進行
   示例:
    [ -f /bin/cat -a -x /bin/cat ] && cat /etc/fstab

3、使用read命令來接受輸入

 使用read來把輸入值分配給一個或多個shell變量
  -p 指定要顯示的提示
  -s 靜默輸入,通常用於密碼
  -n N 指定輸入的字符長度N
  -d ‘字符’ 輸入結束符
  -t N TIMEOUT爲N秒
  read 從標準輸入中讀取值,給每一個單詞分配一個變量
  全部剩餘單詞都被分配給最後一個變量
  read -p 「Enter a filename: 「 FILE

4、BASH

 一、bash如何展開命令行

  把命令行分紅單個命令詞
  展開別名
  展開大括號的聲明({})
  展開波浪符聲明(~)
  命令替換$() 和 ``)
  再次把命令行分紅命令詞
  展開文件通配(* 、?、[abc]等等)
  準備I/0重導向()
  運行命令

 二、bash防止擴展

  1.反斜線(\)會使後面的特殊符號字符依然以字符串的形式輸出,而不是輸出特殊的含義,例如$能夠用來調用變量的值,在前面加\則只輸出$,而不會調用後面字符的變量值,可是一個\只能轉義一個字符
    $ echo Your cost: \$5.00
   Your cost: $5.00
  2.加引號來防止擴展
   單引號(’’)防止單引號內的全部字符的擴展
   雙引號(」」)也防止全部擴展,但如下狀況例外:
     $(美圓符號) - 變量擴展
     `(反引號) - 命令替換
     \(反斜線) - 禁止單個字符擴展
     !(歎號) - 歷史命令替換

 三、bash的配置文件

   Bash的配置文件會在每次用戶登陸時被系統讀取,全局配置下的文件,全部用戶通用,我的家目錄下的配置文件則是用戶本身的一些個性化配置
  按生效範圍劃分,存在兩類:
   全局配置:
     /etc/profile
     /etc/profile.d/*.sh
     /etc/bashrc
   我的配置:
     ~/.bash_profile
    ~/.bashrc

 四、shell登陸兩種方式

  1.交互式登陸:

   (1) 直接經過終端輸入帳號密碼登陸
   (2) 使用「su - UserName」 切換的用戶
    交互式登陸讀取配置文件的順序:/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

  2.非交互式登陸:

   (1)su UserName
   (2)圖形界面下打開的終端
   (3)執行腳本
   (4)任何其它的bash實例
    執行順序:~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

 五、登陸時配置文件的分類與做用

  1.按功能劃分,存在兩類

   Profile類和bashrc類
    Profile類:爲交互式登陸的shell提供配置
     全局:/etc/profile, /etc/profile.d/*.sh
      我的:~/.bash_profile
     功用:
      (1) 用於定義環境變量
      (2) 運行命令或腳本
     Bashrc類:爲非交互式和交互式登陸的shell提供配置
     全局:/etc/bashrc
     我的:~/.bashrc
     功用:
      (1) 定義命令別名和函數
      (2) 定義本地變量

 六、編輯配置文件生效

  修改profile和bashrc文件後需生效
  兩種方法:
   1.從新啓動shell進程
   2 . 或source
     Source與 . 在當前shell下執行腳本,用來設置環境變量及別名,函數等
     /bin/bash或路徑方式執行腳本使子shell在執行,子shell能夠繼承父shell的環境變量,但在腳本中設置的變量,均不會影響父shell

 七、bash退出任務

  保存在~/.bash_logout文件中(用戶)
  在退出登陸shell時運行
  用於
   建立自動備份
   清除臨時文件

 八、$-變量

  h:hashall,打開這個選項後,Shell 會將命令所在的路徑 hash下來,避免每次都要查詢。經過set +h將h選項關閉
  i:interactive-comments,包含這個選項說明當前的 shell 是一個交互式的 shell。所謂的交互式shell,在腳本中,i選項 是關閉的。
  m:monitor,打開監控模式,就能夠經過Job control來控制 進程的中止、繼續,後臺或者前臺執行等。
  B:braceexpand,大括號擴展
  H:history,H選項打開,能夠展開歷史列表中的命令,能夠 經過!感嘆號來完成,例如「!!」返回上最近的一個歷史命令, 「!n」返回第 n 個歷史命令

5、判斷語句

 一、單if語句

  語法格式:
    if 條件 ;then
     命令塊1(能夠是多個命令)
    else
    命令塊2(能夠是多個命令)
    Fi
若是符合該條件,則執行命令塊1處的命令不執行命令塊2處的命令,若是條件不符合,則跳過命令塊1處的命令不執行,直接執行命令塊2處的命令,條件多爲一個判斷命令,返回值爲0(true)執行命令塊1,返回值爲1(false)執行命令塊2
  例如:
    if $(id $1 &> /dev/null);then
     echo "$1 alread exist"
     exit 1
   else
    useradd $1
   fi

 二、多if語句

  語法格式:
    If 條件1 ;then
     命令塊1
    Elif 條件2 ;then
     命令塊2
    Elif 條件3;then
     命令塊3
   ……
    Elif 條件n;then
     命令塊n
    Else
     命令塊n+1
    If
執行順序是,先判斷條件1,返回值爲true則執行命令塊1,而後退出if語句
若是條件1,返回值爲false,則繼續判斷條件2,返回值爲true,則執行命令塊2,而後退出if語句,若條件2 返回值爲false,則繼續判斷條件3……,若是全部條件返回 值都爲false,則執行else後面的命令塊n+1,而後退出if語句
   例如:
    #!/bin/bash
    if [ $1 -lt 3 ];then
     echo redhat
   elif [ $1 -eq 3 ];then
    echo green
   elif [ $1 -gt 3 -a $1 -lt 5 ];then
     echo yellow
   else
     echo white
   fi

 三、case語句

   Case 變量 in
    變量值1)命令塊1;;
    變量值2)命令塊2;;
    變量值4)命令塊3;;
    變量值n)命令塊n;;
   Esac
執行順序是,先調用一個變量,而後判斷變量值是否符合變量值1,若是相等,則執行命令塊1,若是不符合則判斷變量值2,……一直到變量值n,若是都不符合則 一條命令都不執行
  例如:
   case $1 in
    1)echo redhat;;
    2)echo yellow;;
    3)echo green;;
     *)echo blue;;
    Esac

6、 文件查找

  在文件系統上查找符合條件的文件
  文件查找:locate 和find
  非實時查找(數據庫查找):locate
  實時查找:find

 一、 locate查找

  1.查詢系統上預建的文件索引數據庫

   /var/lib/mlocate/mlocate.db

  2. 依賴於事先構建的索引

   索引的構建是在系統較爲空閒時自動進行(週期性任務),管理 員手動更新數據庫(updatedb)

  3. 索引構建過程須要遍歷整個根文件系統,極消耗資源

  4.工做特色:

   查找速度快
   模糊查找
   非實時查找
   搜索的是文件的全路徑,不只僅是文件名
   可能只搜索用戶具有讀取和執行權限的目錄

  5.locate命令的使用方法

    Locate 選項word
    -i 不區分大小寫的搜索
    -n N 只列舉前N個匹配項目
    -r 正則 使用正則表達式來進行模糊查找
    例:
    Locate conf:搜索名稱或路徑中帶有conf的文件
    Locate -r ‘\.conf$’ :使用正則表達式來搜索以「.conf」結尾的文件

 二、 find實時查找工具

  1. 實時查找工具,經過遍歷指定路徑完成文件查找

  2. 工做特色:

   查找速度略慢
   精確查找
   實時查找
   可能只搜索用戶具有讀取和執行權限的目錄

  3. 語法

   Find [選項] 參數 [查找路徑] [查找條件] [處理動做]
    查找路徑:指定具體目標路徑;默認爲當前目錄
    查找條件:指定的查找標準,能夠文件名、大小、類型、 權限等標準進行;默認爲找出指定路徑下的全部文件
    處理動做:對符合條件的文件作操做,默認輸出至屏幕

  4. 查找條件

   一、指搜索層級

    -maxdepth level 最大搜索目錄深度,指定目錄爲第1級
    -mindepth level 最大搜索目錄深度

   二、 根據文件名和inode查找:

     -name 「文件名稱」:支持使用glob
      *, ?, [], [^]
     -iname "文件名稱":不區分字母大小寫
     -inum n 按inode號查找
     -samefile name 相同inode號的文件
     -links n 連接數爲n的文件
     -regex "PATTERN":以PATTERN匹配整個文件路徑字 符串,而不只僅是文件名稱
    例:
     find -name snow.png 搜索名爲snow.png的文件
     find -iname snow.png 不分大小寫地搜索名爲snow.png、Snow.png、 SNOW.PNG等等的文件
     find / -name 「.txt」 搜索/下文件名以.txt結尾的文件
     find /var –name 「
log*」 在/var目錄下搜索名字裏包含log的文件

   三、 根據屬主、屬組查找:

     -user USERNAME:查找屬主爲指定用戶(UID)的文件
     -group GRPNAME: 查找屬組爲指定組(GID)的文件
     -uid UserID:查找屬主爲指定的UID號的文件
     -gid GroupID:查找屬組爲指定的GID號的文件
     -nouser:查找沒有屬主的文件
     -nogroup:查找沒有屬組的文件
     例:
      find -user joe -group joe 搜索被用戶joe 以及組羣joe所擁有的文件
      find / -user joe -o -uid 500 在/目錄下搜索屬主爲joe或屬主的uid爲500的文件

   四、根據文件類型查找

     -type type(對應如下類型):
      f: 普通文件
      d: 目錄文件
      l: 符號連接文件
      s:套接字文件
      b: 塊設備文件
      c: 字符設備文件
      p: 管道文件
      例:
       find / -name shell -type f 搜索/目錄下全部文件名爲shell的普通文件

   五、組合條件:

    與:-a
    或:-o
    非:-not, !
    德·摩根定律:
     (非 A) 或 (非 B) = 非(A 且 B)
     (非 A) 且 (非 B) = 非(A 或 B)
    例:
     !A -a !B = !(A -o B)
     !A -o !B = !(A -a B)
    示例:
      find -user joe -not -group joe 在當前目錄下搜索屬主是Joe但屬組不是joe的全部文件及目錄
      find -user joe -o -user jane 在當前目錄下搜索屬主是joe或jane的全部文件及目錄
      find -not \( -user joe -o -user jane \) 搜索當前目錄下屬主既不是joe也不是Jane的全部文件及目錄
      找出/tmp目錄下,屬主不是root,且文件名不以f開頭的文件
       find /tmp \( -not -user root -a -not -name 'f*' \) -ls
       find /tmp -not \( -user root -o -name 'f*' \) –ls

   六、排除目錄

    示例:查找/etc/下,除/etc/sane.d目錄的其它全部.conf後 綴的文件
     find /etc -path ‘/etc/sane.d’ -a -prune -o -name 「*.conf」
     find /etc (–path ‘/etc/sane.d’ –o –path ’/etc/fonts’ \) -a prune –o name 「*.conf」

   七、根據文件大小來查找

    -size [+|-]#UNIT
     經常使用單位:K,M,G c(byte)
    #UNIT: (#-1, #] (#:數字;unit:單位)
     如:6k 表示(5k,6k]
    -#UNIT:[0,#-1]
     如:-6k 表示[0,5k]
    +#UNIT:(#,∞)
     如:+6k 表示(6k,∞)

   八、根據時間戳:

    以「天」爲單位
      -atime e [+|-]#,
     #: [#,#+1)
     +#: [#+1, ∞ ]
     -#: [0,#)
     -mtime
     -ctime
     以「分鐘」爲單位
     -amin
     -mmin
     -cmin

   八、根據權限查找:

    -perm [/|-]MODE
     MODE: 精確權限匹配
     /MODE:任何一類(u,g,o)對象的權限中只要能一位匹配 便可,或關係,+ 從centos7開始淘汰
     -MODE:每一類對象都必須同時擁有指定權限,與關係
     0 表示不關注
     find -perm 755 會匹配權限模式剛好是755的文件
     只要當任意人有寫權限時,find -perm +222就會匹配
     只有當每一個人都有寫權限時,find -perm -222纔會匹配
     只有當其它人(other)有寫權限時,find -perm -002才 會匹配

  5.處理動做

    -print:默認的處理動做,顯示至屏幕
    -ls:相似於對查找到的文件執行「ls -l」命令
    -delete:刪除查找到的文件
    -fls file:查找到的全部文件的長格式信息保存至指定文件中
    -ok COMMAND {} \; 對查找到的每一個文件執行由COMMAND 指定的命令,對於每一個文件執行命令以前,都會交互式要求 用戶確認
    -exec COMMAND {} \; 對查找到的每一個文件執行由 COMMAND指定的命令
      {}: 用於引用查找到的文件名稱自身。{}與\之間必須有一個空格
   find傳遞查找到的文件至後面指定的命令時,查找到全部符合 條件的文件一次性傳遞給後面的命令
    例:find -type f -name ".sh" -exec chmod a+x {} \
       在當前文件下查找出以.sh結尾的全部文件,並給她們加上執行權限
      find -name "
.conf" -exec cp -i {} {}.bak \;
       備份全部以conf結尾的全部文件並更名添加.bak這個擴展名

  6.參數替換xargs

    因爲不少命令不支持管道|來傳遞參數,而平常工做中有這個必要,全部就有了xargs命令,xargs用於產生某個命令的參數,xargs 能夠讀入 stdin 的數據,而且以空格符或回車符將 stdin 的數據分隔成爲arguments
    注意:文件名或者是其餘意義的名詞內含有空格符的狀況
    有些命令不能接受過多參數,命令執行可能會失敗,xargs可 以解決
    示例:
     ls f\* |xargs rm
     find /sbin -perm +700 |ls -l 這個命令是錯誤的
     find /sbin -perm +7000 | xargs ls –l
     find和xargs格式:find | xargs COMMAND

  7.find示例:

     find -name 「\.conf」 -exec cp {} {}.orig \;
     備份配置文件,添加.orig這個擴展名
     find /tmp -ctime +3 -user joe -ok rm {} \;
     提示刪除存在時間超過3天以上的joe的臨時文件
     find ~ -perm -002 -exec chmod o-w {} \;
     在你的主目錄中尋找可被其它用戶寫入的文件
    find /data –type f -perm 644 -name 「\
.sh」 –exec chmod 755 {} \;
    find /home –type d -ls

7、 壓縮、解壓縮及歸檔工具

   compress/uncompress: .Z
   gzip/gunzip: .gz
   bzip2/bunzip2: .bz2
   xz/unxz: .xz
   zip/unzip
   tar
   cpio

 一、 Compress壓縮工具

  compress srcfile 將源文件壓縮成壓縮包,源文件消失
  compress -v srcfile 或compress -v -d dstfile.Z 壓縮或解壓縮時顯示詳細信息
  compress -c srcfile > dstfile.Z 將源文件壓縮成壓縮包,源文件保留
  compress -d dstfile.Z 或 uncompress dstfile.Z 將壓縮包解壓成源文件,壓縮包消失
  compress -d -c dstfile.Z > srcfile 或 zcat dstfile.Z > srcfile 將壓縮包解壓成源文件,壓縮包保留

 二、 Gzip壓縮工具

  gzip srcfile 將源文件壓縮成壓縮包,源文件消失
  gzip -c srcfile > dstfile.gz 將源文件壓縮成壓縮包,源文件保留
  gzip -d dstfile.gz 或gunzip dstfile.gz 將壓縮包解壓成源文件,壓縮包消失
  gzip -d -c dstfile.gz > srcfile 或 zcat dstfile.gz > srcfile 將壓縮包解壓成源文件,壓縮包保留
  gzip -# srcfile (#即1-9,表示壓縮比,數字越大壓縮比越高,默認爲6)

 三、 Bzip2

  bzip2 srcfile 將源文件壓縮成壓縮包,源文件消失
  bzip2 -k srcfile 將源文件壓縮成壓縮包,源文件保留且權限不變
  bzip2 -c srcfile > dstfile.bz2 將源文件壓縮成壓縮包,源文件保留但權限根據umask值而改變
  bzip2 -d dstfile.bz2 或bunzip dstfile.bz2 將壓縮包解壓成源文件,壓縮包消失
  bzip2 -k -d dstfile.bz2 或bunzip -k dstfile.bz2 將壓縮包解壓成源文件,壓縮包保留且權限不變
  bzip2 -d -c dstfile.bz2 > srcfile 或 bunzip -c dstfile.bz2 > srcfile 將壓縮包解壓成源文件,壓縮包保留但權限根據umask值而改變
  bzip2 -# srcfile (#即1-9,表示壓縮比,數字越大壓縮比越高,默認爲9)
  bzcat dstfile.bz2 能夠預覽解壓後的內容,配合> 也能解壓,但權限會根據umask值而改變

 四、 Xz壓縮工具

  Xz [option] ……file ……
   -k: keep, 保留原文件
   -d:解壓縮
   -#:1-9,壓縮比,默認爲6
   xzcat: 不顯式解壓縮的前提下查看文本文件內容

 五、 Zip打包壓縮工具

  zip -r dstfile.zip srcfile 打包srcfile並壓縮成dstfile
  zip scrfile 壓縮srcfile文件,源文件不存在
  zip -r config.zip /etc/passwd /etc/group /etc/shadow /etc/gshadow 打包壓縮多個源文件,源文件以空格相隔
  cat /var/log/messages | zip messages – 把/var/log/messages裏面的內容壓縮給當前目錄下的messages,源文件依舊存在
  unzip config.zip 解包解壓縮 壓縮包不存在
  unzip -p conf.zip > config1 解壓config.zip裏的內容到config1,壓縮文件依舊存在

 六、 Tar工具

  tar -tf mage.tar.xz 預覽壓縮包的文件列表
  tar -rf mage.tar /path/newfile 往tar包中加強文件(注意只能對tar包增長文件,而不能對壓縮包增長)
  tar -cf mage.tar filename1 filename2 [filenameN] 將多個文件打包至mage.tar
  tar -zcf mage.tar.gz filename1 filename2 [filenameN] 將多個文件打包並用gzip壓縮爲mage.tar.gz
  tar -jcf mage.tar.bz2 filename1 filename2 [filenameN] 將多個文件打包並用bzip2壓縮爲mage.tar.bz2
  tar -Jcf mage.tar.xz filename1 filename2 [filenameN] 將多個文件打包並用xz壓縮爲mage.tar.xz
  tar -xf mage.tar 解壓tar包的全部文件到當前目錄
  tar -xf mage.tar.xz filename 僅將壓縮包中的其中一個文件filename解壓到當前目錄
  tar -zxf mage.tar.gz 解壓gz的壓縮包到當前目錄
  tar -jxf mage.tar.bz2 解壓bzip2的壓縮包到當前目錄
  tar -Jxf mage.tar.xz 解壓xz的壓縮包到當前目錄
  tar -zxf mage.tar.gz -C /tmp 解壓gz的壓縮包到/tmp目錄
  tar -zvxf mage.tar.gz 解壓gz的壓縮包到當前目錄並顯示詳細過程
  tar zcvf mage.tar.gz -T yasuolist.txt -X paichu.txt
   -T 指定須要打包並壓縮的文件列表,每一個文件路徑一行
   -X 指定要排除的文件列表,每一個文件一行

 七、 分割合併壓縮包

  split -b 2K -d etc.tgz 4 將壓縮包以2K爲單位分割爲4份
  cat 40* > mage.tgz 將以40開頭命名的多個分割包合併爲mage.tgz

 八、 Cpio

  複製 從或到文件
  cpio命令是經過重定向的方式將文件進行打包備份,還原恢復 的工具,它能夠解壓以「.cpio」或者「.tar」結尾的文件。
  cpio [選項] > 文件名或者設備名 :
  cpio [選項] < 文件名或者設備名
選項
  -o 將文件拷貝打包成文件或者將文件輸出到設備上
  -i 解包,將打包文件解壓或將設備上的備份還原到系統
  -t 預覽,查看文件內容或者輸出到設備上的文件內容
  -v 顯示打包過程當中的文件名稱。
  -d 解包生成目錄,在cpio還原時,自動的創建目錄
  -c 一種較新的存儲方式
   例:
    將etc目錄備份:
    find ./etc -print |cpio -ov >etc.cpio
   內容預覽
    cpio –tv < etc.cpio
   要解包文件
    cpio –idv < etc.cpio

7、 文本處理sed

  Stream EDitor, 行編輯器
  sed是一種流編輯器,它一次處理一行內容。處理時,把當前 處理的行存儲在臨時緩衝區中,稱爲「模式空間」(pattern space),接着用sed命令處理緩衝區中的內容,處理完成後 ,把緩衝區的內容送往屏幕。而後讀入下行,執行下一個循 環。若是沒有使諸如‘D’的特殊命令,那會在兩個循環之間 清空模式空間,但不會清空保留空間。這樣不斷重複,直到 文件末尾。文件內容並無改變,除非你使用重定向存儲輸 出。

 一、功能:

  主要用來自動編輯一個或多個文件,簡化對文件的反覆 操做,編寫轉換程序等

 二、用法

  sed [option]... 'script' inputfile...
   經常使用選項
    -n:不輸出模式空間內容到屏幕,即不自動打印
    -e: 多點編輯
    -f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
    -r: 支持使用擴展正則表達式
    -i.bak: 備份文件並原處編輯
    Script:
    Script ‘地址 編輯命令’,與vim的擴展命令行裏面的一些格式有些類似
    地址定界:
     (1) 不給地址:對全文進行處理
     (2) 單地址:
      #: 指定的行
      /pattern/:被此處模式所可以匹配到的每一行
     (3) 地址範圍:
      #1,#2 從第#1行到第#2行
      #1,+#2 從第#1行開始,到從第#1行數#2行結束
      /pat1/,/pat2/ 從第一次匹配到pat1至第一次匹配到pat2
      #,/pat1/ 從第#行開始至第一次匹配到path1爲止
     (4) ~:步進 1~2 奇數行 2~2 偶數行
    編輯命令:
      d: 刪除模式空間匹配的行,並當即啓用下一輪循環
     p:打印當前模式空間內容,追加到默認輸出以後
     a [\]text:在指定行後面追加文本 支持使用\n實現多行追加
     i [\]text:在行前面插入文本
     c [\]text:替換行爲單行或多行文本
     w /path/somefile: 保存模式匹配的行至指定文件
     r /path/somefile:讀取指定文件的文本至模式空間中 匹配到的行後
     =: 爲模式空間中的行打印行號
     !:模式空間中匹配行取反處理
     s///:查找替換,支持使用其它分隔符 s@@@,s###
     替換標記
      g: 行內全局替換
      p: 顯示替換成功的行
      w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

 三、 示例:

  Sed -n ‘2p’ cc 只顯示第2行  sed -n '1,4p' cc 顯示1到4行  sed -n '1,+2p' cc 顯示1至3行  sed -n '/root/p' cc 顯示匹配到root的行  sed -n '2,/root/p' cc 顯示從第二行,至第一個次匹配到root的行  sed -n '/^$/=' cc 顯示空行的行號  sed -n -e '/root/p' -e '/cat/=' cc 顯示匹配到root的行以及匹配到cat的行號  sed ‘/root/i\superman’ /etc/passwd 在全部匹配到root的行前插入superman   sed ‘/root/c\superman’ /etc/passwd 代替行  sed ‘/root/a\superman’ /etc/passwd行後

相關文章
相關標籤/搜索