linux運維練習-vim編輯和文件查找(8月30)

1、總結文本編輯工具vim的使用方法;
   光標跳轉:
       字符跳轉:
        h:向左移動一個字符
        l:向右移動一個字符
        h:向上移動一個字符
        j:向下移動一個字符
       在(hjkl)前加上數字,表示跳轉幾個字符
  單詞跳轉:
       w:後單詞的詞首
       e:當前或者後一個單詞的詞尾
       b:當前或者前一單詞的詞首
       在(web)前加上數字,表示多次移動
  行間移動:
      #G:第#行的行首
      gg:文檔的行首
      G:文檔的行尾
  句間移動:
      (:上一句
      ):下一句
  段落間移動:
      {:上一段
      }:下一段
  
 編輯命令:
        字符編輯:
            x:刪除光標所在處的字符,前面加上#(數字)表示刪除光標後的#個字符
        xp:剪切和粘貼,在光標後面粘貼上刪掉的字符
         r:替換光標所在處的字符,#r表示把從光標開始的連續幾個字符更換爲某個字符,如4rd表示,將

           更換爲dddd
  刪除命令:
      d:
         d^:刪掉本行第一個非空白字符到本光標間字符(不包含光標所在處的字符)
        d$和D:刪掉本行光標後的字符(包含光標所在處的字符),如果在後面加上#(數字),表示到從光標開始到第#行行尾
     d0:表示刪除從當前光標到光標所在行首的內容(不包含光標所在處的字符)
     dw:刪除光標所在處的單詞(包括空格)
     de:刪除當前光標所在處的單詞(當光標所在位置爲非空格時)或者光標所在處後一個單詞(當光標所在位置爲空格時)
     db:刪除當前光標到詞首的字符(不包括當前光標所在處的字符)
    dd:刪除光標所在行
   都支持#COMMAND
 複製命令:
         y(支持選項與刪除命令d一樣)
           y$:複製光標所在處到行尾的內容
          y^:複製當前光標到行首非空白字符見得內容
          y0:
          ye:
          yw:
          yb:
          yy:複製行
         支持#COMMAND
     
    粘貼命令:
         p
          如果複製或者刪除的內容不是一個完成行
              p:粘貼至當前光標所在處的後面
              P:......................前面
         如果複製或者刪除的內容是一個完成行(有可能不止一行)
              p:粘貼至當前光標所在行的下方
              P:......................上方
    改變命令:
         c
           c$,c^,c0,cb,ce,cw
          cc:改變行
         也支持#COMMAND
 撤銷命令:
         u:撤銷此前的編輯操作,#u,表示撤銷前#次操作
         Ctrl+r:恢復此前的撤銷操作
         .:重複前一個編輯操作
 翻屏操作:
     Ctrl+f:向後翻一屏
     Ctrl+b:向前翻一屏
      Ctrl+d:向後翻半屏
     Ctrl+u:向前翻一屏
   vim末行模式
      (1)地址,定界
       start_pos,end_pos
    #:第#行
       如:#,#:從某行到某行
       #,+#:從某行到以後的幾行
    .:當前行
    $:最後一行
    %:全文,相當於1,$
       /part/:第一次被模式匹配到的行
           #,/part/:表示從第#行到被/part/第一次匹配到的行
   後面可以跟編輯命令:
         d:刪除
       y:複製
      w:保存,相當於另存爲:如1,100w /to_PATH/,表示將1,100行的內容另存到其他文件
      r:在本文檔中讀取某個文檔:如:100r /to_PATH/,表示將某個文件內容讀取到本文檔100行後面
  (2)查找
        /PATTERN:向尾部進行查找
     ?PATTERN:享首部進行查找
            n:下一個匹配到內容,與命令方向相同
      N:下一個匹配到內容,於命令方向相反
  (3)查找替換
        s:在末行模式下,在地址定界的範圍內完成查找替換操作;
       格式:s/要查找的內容/替換爲的內容/修飾符
           要查找的內容:可以使用模式
          替換爲的內容:不能使用模式,但可以使用後向引用符號,以引用前面模式中分組括號所匹配到的內容
                      \1,\2.....
          &:引用"要查找的內容"匹配到的整個內容
      /:用於分隔符,所以,要查找的內容或替換爲的內容中出現此符號,要使用\對其轉義,使用格式:\/分隔符可替換爲其它字符:例如@,#等;
         
   
 多文件模式:
             vim:FILE1 FILE2 ....
                 :next:下一個文件
                 :first:第一個文件
                 :prev:前一個文件
                 :last:最後一個文件
                 :wqall,退出所有文件並保存
                 :q!all,強制退出所有文件 
    多文件窗口分割:    
            vim -o FILE1 FILE2(豎排打開)
      vim -O FILE1 FILE2(橫排打開),Ctrl+w,方向鍵
 單文件窗口分割:
            Ctrl+w,s:水平分割
      Ctrl+w,v:垂直分割
    定製vim的某些工作特性
            (1)行號
             顯示:set nu
       禁用:set nonu
      (2)括號匹配
             顯示:set sm
       禁用:set nosm
      (3)自動縮進
             啓用:set ai
       禁用:set noai
      (4)高亮搜索
             啓用:set hlsearch
       禁用:set nohlsearch
      (5)語法着色
             啓用:syntax on
       禁用:syntax off
      (6)忽略字母大小寫
             忽略:set ic
       區分:set noic
2、總結文件查找命令find的使用方法
    文件查找:locate,find
     locate: 非實時查找工具;依賴於事先構建的索引;索引的構建是在系統較爲空閒時自動進行(週期性任務);手動更新此數據庫(updatedb);查找速度快;模糊查找;
  find:實時查找;查找速度略慢;精確查找;
 find命令:
     find [OPTIONS] ... [查找路徑] [查找條件] [處理動作]
       查找路徑:默認爲當前路徑
    查找條件:指定的查找標準,可以根據文件名、大小、屬主屬組、類型等進行;默認爲找出路徑下的所有文件
    處理動作:對符合條件的文件的操作;默認爲輸出至屏幕
  查找條件:
      根據文件名進行查找:
        -name "FILE_NAME":區分大小寫,支持使用glob;*,?,[]
     -iname "FILE_NAME":不區分大小寫,支持使用glob
     -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件名稱
   根據屬主、屬組查找:
                 -user UAERNAME:查找屬主爲指定用戶的文件 
                 -group GROUPNAME:查找屬組爲指定組的文件
                 -uid USERID:查找文件的屬主爲指定UID的文件
                 -gid GROUPID:查找文件的屬組爲指定GID的文件
                 -nouser:查找沒有屬主的文件
                 -nogroup:查找沒有屬組的文件
            根據文件類型進行查找:
                 -type TYPE
                    f:普通文件
                    d:目錄
                    l:符號鏈接
                    b:塊設備
                    c:字符設備
                    p:命名管道
                    s:套接字
            組合查找條件:
                與條件:-a
                或條件:-o
                非條件:-not,!
            根據文件大小來查找:
                 -size [+|-] #UNIT
                     單位:K,M,G
                     #UNIT:(#-1,#]UNIT
                     +#UNIT:(#,+∞)UNIT
                     -#UNIT:(0,#-1]UNIT
   根據時間戳:
                以天爲單位
          -atime [+|-]#:最近訪問時間
      #:[#,#+1)
      +#: [#+1,oo]
      -#: [0,#)
     -mtime:最近修改時間,文件內容修改
     -ctime:文件改變時間,包括文件內容修改以及文件屬性的修改

    以“分鐘”爲單位
     -amin
     -mmin
     -cmin
   根據權限:
       -perm [/|-]MODE
        MODE:精確權限匹配
     /MODE:任何一類對象(u,g,o)的任何一位權限符合條件即可;隱含或條件
           如:/222,表示(u,g,o)中任何一類用戶具有寫權限即可
        -MODE:爲每一類對象指定的每一位權限都必須同時存在方爲符合條件;隱含與條件;
                          如:-222,表示(u.g,o)中每一類型用戶都必須有寫權限才符合
  處理動作:
      -print:默認處理動作
   -ls:對於查找到的每個文件做"ls -l"的操作
   -delete:刪除查找到的文件
   -fls /path/to/somefile:查找到的文件的詳細路徑信息保存至指定文件中
   -ok COMMAND {} \;對每個文件執行指定的命令之前需要用戶事先確認,{}表示佔位符,代表查找到的文件  
   -exec COMMAND {} \;對每個查找到的文件執行指定的命令時無需用戶確認
3、總結bash環境變量的相關內容
    bash環境配置:
        配置文件,按照生效範圍劃分,存在2類:
            全局配置:
                /etc/profile,/etc/profile.d/*.sh
                /etc/bashrc
            個人配置:
                ~/.bash_profile
                ~/.bashrc
        按功能劃分,也存在2類
            profile類:爲交互式登錄的shell提供配置
                /etc/profile,/etc/profile.d/*.sh
                ~/.bash_profile
                功用:
                    (1)定義環境變量,例如PATH、PS1
                    (2)定義要運行的命令或者腳本 
            bashrc類:爲非交互式登錄的shell提供配置
                /etc/bashrc
                ~/.bashrc
                功用:
                    (1)定義命令別名,如alias
                    (2)定義本地變量
        變量:內存空間,變量名
      類型:
       環境變量:作用範圍當前shell進程及其子進程
       本地變量:作用範圍當前shell進程
       局部變量:作用範圍僅爲當前shell進程中某代碼片斷(通常爲函數上下文)
 
       位置變量:$1, $2
       特殊變量:$?

      變量定義方式:
       bash內置變量:可直接調用,內置了許多環境變量,例如PATH等
       自定義變量:
        變量賦值:變量名=值

      bash弱類型:
       變量存儲數據時,默認均採用字符形式;任何變量可以不經聲明,直接引用;
            120:24bits(以字符存儲)
            120: 8bits (以數值存儲),還包括整型和浮點型
     定義本地變量:
      name=value

      查看:set

     定義環境變量:
      export name=value
      declare -x name=value

      查看:env, printenv, export

     撤消變量:
      unset name

     引用變量:
      ${name}, $name
  bash中的引用符號:
      '': 強引用,變量替換不會發生,如設置a=dog,則echo '$a'結果爲$a
      "":弱引用,變量替換會發生,如設置a=dog,則echo "$a"結果爲dog
      ``: 命令引用
  shell登錄類型:
      交互式登錄:
       直接通過終端進行的登錄
    通過su -l Username命令實現的用戶切換
   非交互式登錄:
       圖形界面下打開的命令窗口
    執行腳本
    su Username
  配置文件作用次序:
      交互式登錄:
       /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

      非交互式登錄:
       ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh   
      編輯配置文件定義的新配置如何生效?
      (1) 重新登錄;
      (2) 讓當前shell進程去重新讀取指定的配置文件;
       source /PATH/TO/SOMEFILE
       . /PATH/TO/SOMEFILE
    注意:副作用(可能有重複的環境變量)
4、總結Linux文件系統上的特殊權限(SUID、SGID、Sticky)的知識點;
    Linux文件系統上的特殊權限
     進程的安全上下文:
      前提:進程有屬主(進程以哪個用戶的身份運行);文件有屬主和屬組;
      (1) 用戶是否能夠把某個可執行程序文件啓動爲進程,取決於用戶對程序文件是否擁有執行權限;
      (2) 程序啓動爲進程後,此進程的屬主爲當前用戶,也即進程的發起者;進程所屬的組,爲發起者的基本組;
      (3) 進程擁的訪問權限,取決其屬主的訪問權限:
       (a) 進程的屬主,同文件屬主,則應用文件屬主權限;
       (b) 進程的屬主,屬於文件的屬組,則應用文件屬組權限;
       (c) 進程的屬主不屬於文件的屬主,也不屬於進程的屬組,則應用其它權限;
  SUID:
            (1) 任何一個可執行程序文件能不能啓動爲進程:取決於發起者對程序文件是否有執行權限;
      (2) 啓動爲進程之後,其屬主不是發起者,而程序文件自己的屬主;這種機制即爲SUID;
   權限設定:
       chmod u+s FILE...
    chmod u-s FILE...
      注意:更改後的權限
       s: 屬主原本擁有x權限;
       S: 屬主原本無x權限
    
  SGID:
      默認情況下,用戶創建文件時,其屬組爲此用戶所屬的基本組;
      一旦某目錄被設定了SGID權限,則對此目錄擁有寫權限的用戶在此目錄中創建的文件所屬的組爲目錄的屬組,而非用戶的基本組;
    權限設定:
       chmod g+s FILE...
       chmod g-s FILE... 
        Sticky:
      對於一個多人可寫的目錄,此權限用於限制每個僅能刪除自己的文件;

      權限設定
       chmod o+t FILE...
       chmod o-t FILE...    
5、總結Linux磁盤管理、文件系統相關知識點及其相關命令的使用方法;
    Linux磁盤管理
 機械式硬盤:
     機械式:
      track:磁道
      sector: 512bytes
      cylinder: 柱面,分區的基本單位;

      MBR:Master Boot Record(0磁道0扇區),
       512bytes
        446: bootloader
        64: (FAT)filesystem allocation table
         16: 標識一個分區
        2:55AA,用來標記此MBR內的數據是否有效,如果爲55AA則爲有效,其他則爲無效
 
 磁盤接口類型:
  IDE (ATA):133MB/s,/dev/hd
  SCSI: 640MB/s
  SATA:6Gbps
  SAS:6Gbps
  USB:480MB/s
  識別硬盤設備:/dev/sd
   標記不同的硬盤設備:/dev/sd[a-z]
   標記同一設備上的不同分區:/dev/sd[a-z][1-]
    1-4: 主或擴展分區標識
    5+:邏輯分區標識
        設備文件:特殊文件
       設備號:major,minor
        major:設備類型,主要作用之一是讓內核去識別配套的設備驅動
     minor:同一類型下的不同設備,主要作用在於讓驅動程序去識別同一種驅動程序上所映射到的不同設備
     
   “塊”:block,隨機設備,標識類型爲B
   “字符”:character,線性設備,標識類型爲C
  分區工具:
      fdisk, parted, sfdisk
   fdisk工具:
       p: 顯示
       n: 創建
       d: 刪除
       t: 修改分區ID
       l: 列出所有支持ID類型
       w: 保存退出
       q: 放棄修改並退出
       m: 獲取幫助
   
  創建完成之後,查看內核是否已經識別新的分區:
   # cat /proc/partitions

   有三個命令可以讓內核重讀磁盤分區表:
    CentOS 5: partprobe [DEVICE]
    CentOS 6,7:
     partx
     kpartx

    partx命令:
     partx DEVICE
     partx -a DEVICE
     partx -a -n M:N DEVICE
      M
      M:
      :N

    kpartx命令:
     kpartx -af DEVICE
 Linux文件系統管理
     文件系統:
      VFS:Virtual File System
      Linux:ext2,ext3,ext4,reiserfs,xfs,btrfs,swap等
   (1)日誌型文件系統
       非日誌型文件系統:如ext2
    日誌型文件系統:如ext3
   (2)swap
     創建文件系統:
       在分區上執行格式化(高級格式化)
        要使用某種文件系統,滿足兩個條件:
    內核中:支持此種文件系統
    用戶空間:有文件系統管理工具


  創建工具:mkfs (make filesystem)
       mkfs -t type DEVICE

       mkfs.type DEVICE

   ext系列文件系統的專用管理工具:
      mke2fs -t {ext2|ext3|ext4} DEVICE
      -b BLOCK: 1024, 2048, 4096
     -L 'LABEL': 設定卷標

       blkid命令:
        blkid DEVICE

6、複製/etc/grub.cfg配置文件至/tmp目錄,用查找替換命令刪除/tmp/grub.cfg文件中的行首的空白字符

         命令:  %s/^ \+//g

    wKioL1XsD07Q9e1vAAN5SNSjvgw783.jpg

7、複製/etc/rc.d/init.d/functions文件至/tmp目錄,用查找替換命令爲/tmp/functions的每行開頭爲空白字符的行的行首加一個#; 原有空白字符保留;

     命令:%s/^ /# /g

    wKioL1XsFFqQC0hZAATw3xzhBVI049.jpg

8、替換/tmp/functions文件中的/etc/sysconfig/init爲/var/log;

      命令:%s@/etc/sysconfig/init@/var/log@g

      wKioL1XsFkKz3K7tAAEQS6sX5dM156.jpg

9、刪除/tmp/functions文件中所以#開頭,且#後面至少跟了一個空白字符的行的行首#;

        命令: %s/^#\( \+\)/\1/g

            替換前:

wKioL1XsF-aR0hUrAALUOiXCH8U770.jpg

           替換後:

       wKiom1XsFgCQuoNvAAKblw2oxGo446.jpg

10、查找/var目錄屬主爲root,且屬組爲mail的所有文件;

        find -group root -user mail

      wKioL1XsGlajVfoSAAN8aki2wgs400.jpg

11、查找/usr目錄下不屬於root、bin或hadoop的所有文件;

       find /usr/ ! -user root -a ! -user bin -a ! -user hadoop

       wKioL1XsH6CyX9qZAAJfmPzdECY352.jpg

12、查找/etc目錄下最近一週內其內容修改過,且屬主不爲root或hadoop的所有文件;

           find /etc/ -mtime -7 -a ! -user root -a ! -user hadoop

           wKioL1XsIqPzkqV1AALIcGP7kLY598.jpg

13、查找當前系統上沒有屬主或屬組,且最近一週內曾被訪問過的所有文件;

       find / -nouser -o -nogroup -a -atime -7

wKioL1XsJLij6OCDAAF2j1zaecI738.jpg

14、查找/etc目錄下大於20k且類型爲普通文件的所有文件;

        find /etc/ -size +20k -a -type f

       wKiom1X***fw1NuZAAPuE1BoUQg321.jpg

15、查找/etc目錄下所有用戶都沒有寫權限的文件;

        find /etc/ ! -perm  /222

wKioL1XsTYyiDLC1AAUMBdE0bxQ889.jpg

16、查找/etc目錄下至少有一類用戶沒有執行權限的文件;

            find /etc/ ! -perm -111 -ls | more

wKioL1XsY9jyVVkeAAf_RWml4yU443.jpg

17、查找/etc/init.d目錄下,所有用戶都有執行權限,且其它用戶擁有寫權限的文件;

        find /etc/init.d/ -perm -113 2>/dev/null  -ls

wKioL1XsZ_Px3SmvAAHo8aDhzRA276.jpg

18、讓普通用戶能使用/tmp/cat去查看/etc/shadow文件;

        chmod  u+s /tmp/cat

wKiom1XsVCOCc973AAPLORweU48460.jpg

      

19、創建目錄/test/data,讓某組內普通用戶對其有寫權限,且創建的所有文件的屬組爲目錄所屬的組;此外,每個用戶僅能刪除自己的文件;

        用戶hadoop,屬於Hadoop組

        usermod -a -G hadoop openstack

        chown :hadoop /test/data

        chmod g+w data

        chmod g+s /test/data/

        chmod o+t /test/data/

wKioL1XsX-2ClnRXAAEcB1IBeYY268.jpg

wKiom1XsXcXx3KTbAAEqCgUyTpk898.jpg

    

      

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