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

一、 Vim續寫

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

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

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

   # 具體第#行,
   #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 在指定位置插入指定文件中的所有內容

 3、查找並替換

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

 4、Vim的寄存器

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

 5、編輯二進制文件

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

 6、可視化模式

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

 7、多文件模式

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

 8、使用多個“窗口”

   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判斷語句,文件查找方式,壓縮與解壓,

 9、定製vim的工作特性

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

  1. 行號

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

  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

二、 Shell腳本編程基礎

 1、 編程基礎

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

 2、 程序的執行方式

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

 3、 編程基本概念

  1.編程邏輯處理方式:

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

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

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

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

 4、 Shell腳本基礎

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

 5、 創建shell腳本

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

 6、 腳本規範

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

 7、 腳本的基本結構

  #!SHEBANG
  CONFIGURATION_VARIABLES
  FUNCTION_DEFINITIONS
  MAIN_CODE

 8、 腳本調試

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

 9、 變量

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

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

  2.變量:變量類型

   作用:
    1、 數據存儲格式
    2、 參與的運算
    3、 表示的數據範圍
   類型:
    字符
    數值:整數、浮點型

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

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

  4. 變量命名法則

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

  5.bash中變量的種類

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

  6.本地變量

   變量賦值:name=‘value‘
   可以直接引用value:
    1、 可以是直接字符串。Name=“root”
    2、 變量引用:name=“$user”
    3、 命令引用: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, ...:對應第1、第2等參數,shift [n]換位置
    $0: 命令本身
    $: 傳遞給腳本的所有參數,全部參數合爲一個字符串
    $@: 傳遞給腳本的所有參數,每個參數爲獨立字符串
    $#: 傳遞給腳本的參數的個數
    $@ $
只在被雙引號包起來的時候纔會有差異
    set -- 清空所有位置變量

 10、 退出狀態

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

 11、 退出狀態碼

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

 12、 算術運算

  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之間隨機數

 13、 賦值

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

 14、邏輯運算

  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,第二個必須要參與運算
   異或:^
    異或的兩個值,相同爲假,不同爲真

 15、條件測試

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

 16、條件性的執行操作符

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

 17、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"

 18、bash的數值測試

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

 19、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

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

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

四、BASH

 1、bash如何展開命令行

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

 2、bash防止擴展

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

 3、bash的配置文件

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

 4、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

 5、登錄時配置文件的分類與作用

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

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

 6、編輯配置文件生效

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

 7、bash退出任務

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

 8、$-變量

  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 個歷史命令

五、判斷語句

 1、單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

 2、多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

 3、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

六、 文件查找

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

 1、 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”結尾的文件

 2、 find實時查找工具

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

  2. 工作特點:

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

  3. 語法

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

  4. 查找條件

   1、指搜索層級

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

   2、 根據文件名和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的文件

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

     -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的文件

   4、根據文件類型查找

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

   5、組合條件:

    與:-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

   6、排除目錄

    示例:查找/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”

   7、根據文件大小來查找

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

   8、根據時間戳:

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

   8、根據權限查找:

    -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

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

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

 1、 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 將壓縮包解壓成源文件,壓縮包保留

 2、 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)

 3、 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值而改變

 4、 Xz壓縮工具

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

 5、 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,壓縮文件依舊存在

 6、 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 指定要排除的文件列表,每個文件一行

 7、 分割合併壓縮包

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

 8、 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

七、 文本處理sed

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

 1、功能:

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

 2、用法

  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:將替換成功的行保存至文件中

 3、 示例:

  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行後

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章