Linux學習之find等內容篇

Linux學習之find等內容篇

  

  本次總結的內容包含:

   find命令的參數以及使用

   vim文本編輯器的介紹和使用

   bash環境變量的介紹以及設置

   linux文件系統的特殊權限SUID/SGID/Sticky的介紹以及應用

   linux磁盤管理等相關命令介紹


一、find 查找命令

   在linux系統中有兩個查找文件的命令,分別是local和find  

  local:非實時查找,是基於系統空閒時構建的索引查找的,採用的模糊查找,所以查找速度比較快,但對查找不到更新索引之後創建的文件以及目錄信息。可以使用updatadb命令來手動的更新索引;

  find:實時查找,其工作是從指定的路徑開始挨個比對查找,採用的是精確的查找模式,所以查找速度比local慢很多,不建議在任務繁重的生產服務器上使用。

所以我們再次重點介紹find的使用方法和技巧


find

SYNOPSIS
       find [OTTPION...] [查找路徑] [查找條件] [處理動作]

    查找路徑:可以手動指定,也可以不指定;默認爲當前的路徑;

    查找條件:查找的標準,默認爲找出指定路徑的全部文件;

    處理動作:對符合條件的文件做的操作,默認爲打印至屏幕;


1、 查找條件分類:

 a、根據文件名查找:

  -name FILENAME :支持glob即可以是用*、?、[]等通配符

  -iname FILENAME:表示不區分文件名稱大小寫,也支持glob

  -regex "PATTERN":以PATTERN匹配整個文件路徑字符串,而不僅僅是文件的名稱;


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

  -user USERNAME:查找屬主爲指定用戶的文件;

  -group GROUPNAME:查找屬組爲指定組的文件;

  -uid USERID:查找uid爲指定值得文件;

  -gid GROUPID:查找gid爲指定值得文件;

  -nouser:查找沒有屬主的文件;nouser表示沒有屬主名稱,但是有UserID

  -nogroup:查找沒有屬組的文件;


 c、根據文件的類型查找:

  -type TYPE

    f:普通文件類型

    d:目錄文件

    l:符號鏈接文件

    b:塊設備文件

    c:字符設備文件

    p:管道文件

    s:套接字文件

可以將各種條件組和起來查找:

與條件 :-a     //此優先級次之

或條件:-o      //此優先級最低

非條件:-not,! //此優先級最高

組合是非條件的邏輯轉換比較容易混淆,這裏重點介紹一下

!A -a !B = !(A -o B)

!A -o !B = !(A -a B)


 d、根據文件大小來查找:

   -size [+|-] #UNIT

    UNIT(單位):K、 M、 G

    因爲文件的大小不都是整數,所以此處的+-以及精確指定的大小都是指的一個特定的範圍;

    #UNIT:(#-1,#] 

       例:3K:表示的大於2K小於等於3K範圍的文件都符合條件

    +#UNIT:(#,正無窮)

       例:+3K:表示大於3K範圍的文件都符合條件

    -#UNIT:(0,#-1]

       例:-3K:表示大於0小於等於2K範圍的文件都符合條件

 

 e、根據時間戳:

     根據時間戳的分爲兩類:

       以“天”爲單位:

        -atime:以天爲單位的訪問時間

          用法: -atime  [+|-]#

          此處單位天實際中不可能爲整數,所以精確的以及+-的天數都是指的是一個特定的範圍

             -atime #: [#,#+1)

               例: -atime 3 :表示訪問時間大於等於2天小於4天的一個特定範圍

             -atime +#:[#+1,正無窮)

               例: -atime +3:表示訪問時間大於等於4天範圍

             -atime -#:[0,#)

               例: -atime -3:表示訪問時間小於3天的範圍


        -mtime:以天爲單位的修改時間

              用法同上

        -ctime:以天爲單位的改變時間

              用法同上


       以“分鐘”爲單位:

         -amin:以分鐘爲單位的訪問時間

         -mmin:以分鐘爲單位的修改時間

         -cmin:以分鐘爲單位的更改時間

             用法同上


 f、根據權限查找:

    -perm [/|-]MODE

      MODE:精確權限匹配

       例: -perm 644  表示u、g、o分別精確對應rw-r-xr-x

      /MODE:任何一類權限的任何一位權限符合條件就可以,隱含的是或關係;

     注意:/400、/440、/444表示的意思不同

           /400 表示u位有讀權限就滿足查找的要求,不關注其餘兩位的權限;

           /440 表示u、g兩類任何一類有讀權限就滿足查找的要求;

           /444 表示u、g、o三類任意一個都讀權限就滿足查找的要求;

      -MODE:爲每一類對象指定的每一位權限都必須同時存在才滿足查找的要求,隱含的是與關係

       例:-perm -440 :表示u和g類必須都存在讀權限才能滿足查找的條件,0類不關注;


2、處理動作:

   -print:打印至屏幕,是默認的處理動作;

   -ls   :類似對查找到的每個文件做'ls -lh'的操作

   -delete:刪除查找到的文件

   -fls /path/to/somefile : 查找到文件的詳細路徑保存在指定的文件中;

   -ok COMMAND {} \;

      對沒個文件執行指定命令之前需要用戶事先確認;

   -exec COMMAND {} \;

      不需要用戶的確認;

  注意:此處命令後跟的{} \;是固定格式。如果參數要多次傳遞 這需要出現多個{}與之對應。


二、VIM的介紹和使用

 VIM是一款全屏、模式化的文本編輯器

  vi:visual interface(可視化接口)

   vim是vi的增強版 即 vi iMproved


 1、vim的三種模式:

  編輯模式:

  輸入模式:

  末行模式:


   模式間的切換:

     編輯模式-->輸入模式

       i:insert  表示在當前光標所在字符的前方插入

       a:append,表示在當前光標所在字符的後方插入

       o:open new line,表示在當前光標的下放插入新的一行

       I:表示在當前光標所在行的行首插入

       A:表示在當前光標所在行的行尾插入

       O:表示在當前光標所在行的下方插入新的一行

   

     輸入模式-->編輯模式

       ESC


     編輯模式-->末行模式

        :


     末行模式-->編輯模式

        ESC


 2、打開vim:

      vim  直接輸入vim

      vim /path/to/somefile 打開指定路徑的文件

        +#:表示打開文件後跳轉到第#行

        /PATTERN:表示打開文件跳轉至能第一個匹配的行


 3、關閉vim:

     末行模式下:

     :q 退出 

     :q! 強制退出

     :wq 保存退出

     :x 保存退出,等效wq

     

     編輯模式下:

     ZZ 兩個大寫的Z也能退出vim


4、光標跳轉:

   

    字符間跳轉:

      h:向左一個字符

      l:向右一個字符

      j:當前字符向下跳轉一行

      k:當前字符向上跳轉一行

    

       #COMMAND:表示h/l/j/k前可跟數字,表示跳轉的值

         例:3h:表示想左跳轉3個字符

             3j:表示向下跳轉3行;


    單詞見跳轉:

      w:表示跳轉至後一個單詞的詞首;

      e:表示跳轉至當前或後一個單詞的詞尾

      b:表示跳轉至當前或前一個單子的詞首

 

      #COMMAND:同上


    行內跳轉:

      ^:表示跳轉至行首的第一個非空字符

      $:表示跳轉至行尾(絕對行尾)

      0:表示跳轉至行首(絕對行首)


    行間跳轉:

      #G:跳轉至第#行,

      1G,gg:跳轉至第一行

      G:跳轉至最後一行


    句間移動:

      ):表示跳轉至下一句

     (:表示跳轉至上一句


    段落間移動:

      }:表示跳轉至下一段

      {:表示跳轉至上一段


 5、編輯模式下的命令:

      字符編輯:

         x:刪除光標所在處的字符;

         #x:刪除光標所在處及以後共#個字符

         xp:刪除粘貼,可用將當前光標所在處的字符與後一個字符調換位置


      刪除命令:

        d:刪除命令

          d^:刪除至非空白字符的行首

          d$:刪除之行尾

          d0:刪除之行首

          dw:刪除當前光標所在位置到詞尾或下一個單詞,連空格也會刪除

          de:刪除當前光標所在位置到詞尾或下一個單詞,不會刪除空格

          db:刪除當前光標所在位置到詞首或下一個單詞,空格一併刪除

          dh:刪除當前光標所在位置的左一個字符

          dj:刪除當前光標所在行以及下一行

          dk:刪除當前光標所在行以及上一行

          dl:刪除當前光標所在位置的右一個字符

        dd:刪除當前行

       #COMMAND


      粘貼命令:p (paste、put)

        如果複製或刪除的內容不是一個完整行

           P:粘貼至當前光標所在處後面

           p:粘貼至當前光標所在處前面


        如果複製或刪除的內容是一個完整行

           P:粘貼至當前光標所在行下方

           p:粘貼至當前光標所在行上方


      複製命令:y(yank)

         y  

           y^/y$/y0/yw/ye/yb

         yy:複製當前行

       

        #COMMAND


      改變命令:c(change)

           c^/c$/c0/cw/ce/cb

           cc

           #COMMAND


  6、撤銷此前的編輯操作:

      u:undo

       #u:表示撤銷此前#次操作

      Ctrl+r :撤銷撤銷操作

       . :表示重複前一個編輯操作


  7、翻屏操作業:

     Ctrl+f:向後一屏

     Ctrl+b:向前一屏

     Ctrl+d:向後半屏

     Ctrl+u:向前半屏


  8、vim的末行模式:

     

      地址、界定:

        :start_pos,end_pos

           #:第#行

           #,@:第#行到第@行

           #,+@:第#行到第#+@行

            .:當前行

            $:最後一行

           %:全文,相當於1,$

           /pat1/:第一次被此模式匹配的行

           #,/pat1/

           /pat1/,/pat2/


           後面可以跟c/d/x/r/w等編輯命令


      查找

        /PATTERN:向尾部進行查找

        ?PATTERN:向首部進行查找

           n:同向查找

           N:反向查找


      查找替換


        s:在末行模式下,在地址界定的範圍完成查找替換操作:

           s/要查找的內容/要替換的內容/修飾符

             要查找的內容:可以使用模式;

             要替換的內容:不能用模式,但是可以使用後向引用符號,以應用前面模式中括號匹配到的內容

               \1,\2,.....

               &:引用要查找的內容匹配到的整個內容:

              修飾符:i 忽略大小寫     g:全局替換


             /:分隔符,所以在要查找的內容找出現了此符號,必須要使用\轉義   及\/   或者使用@等符號替換 /符號。



  9、多文件模式:

    vim FILE1 FILE2 ...

:next下一個文件

:first第一個文件

:prev上一個文件

:last最後一個文件


:wqall

:q!all


  10、多文件窗口分割:

vim -o|-O FILE1 FILE2 ...

                  -o:水平分割

          -O:垂直分割

Ctrl+w,(逗號表示鬆手) ARROW(箭頭符號)


單文件窗口分割:

Ctrl+w, s: split, 水平分割

Ctrl+w, v: vertical, 垂直分割


  11、定製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


:help 獲取幫助

:help SUBJECT

   特性設定的永久生效方式:

全局配置文件:/etc/vimrc

用戶個人的配置文件:~/.vimrc



三、bash環境配置:

  

  1、分類:

    配置文件,生效範圍劃分,存在兩類:

       全局配置:

         /etc/profile,/etc/profile.d/*.sh,/etc/bashrc

       個人配置:

         ~/.bash_profile , ~/.bashrc


    按功能劃分,存在兩類:

      profile類:爲交互式登錄的shell提供配置

        /etc/profile,/etc/profile.d/*.sh,~/.bash_profile

         作用:a、定義環境變量,例如PATH、PS1

               b、運行命令腳本

      bashrc類:爲非交互式登錄shell提供配置

        /etc/bashrc , ~/.bashrc

         作用:a、定義命令別名

               b、定義本地變量

   2、變量:就是內存空間,

         類型:

           環境變量:作用範圍當前shell進程及其子進程

           本地變量:作用範圍當前shell進程

           局部變量:作用範圍僅當前shell進程中某代碼片段

           位置變量:$1,$2,....

           特殊變量:$?


         變量定義:

            bash內置變量:可以直接調用,內置了許多環境變量,例如:PATH等

            自定義變量:

                 變量賦值:變量名=值


    3、定義本地變量

         name=value

           查看用set命令


    4、定義環境變量

         export name=value

         declare -x name=value

           查看:env,printenv,export


     5、撤銷變量

         unset name


     6、引用變量

         $name , ${name}


     7、bash中的引用符號

         '':單引號是強引用,變量替換不會發生

         "":雙引號是弱引用

         ``:反引號(tab鍵上面的),命令引用


     8、shell登錄類型

          交互式登錄:

            通過終端直接登錄

            通過su - l username命令實現的用戶切換

          非交互式登錄:

            圖形界面下打開的命令行窗口

            執行腳本

            su username

 

      9、配置文件的作用次序:

           交互式登錄

             /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc


           非交互式登錄

             ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh


     10、如何讓配置文件生效:

          a、重新登錄:

          b、讓當前shell進程去重新讀取指定的配置文件

             source /path/to/somefile

             . /path/to/somefile

           注意讀取配置文件可能會使添加的配置文件重複多次讀取


 四、Linux文件系統上的特殊權限:

    1、權限模式

       每個文件都有user,group,other三類用戶對應的權限集,及rwx


    2、進程的安全上下文

       進程有屬主(進程以哪個用戶的身份運行):文件有屬主和屬組:

       a、用戶是否能夠把某個可執行程序啓動爲進程,取決與用戶對該文件是否有執行權限

       b、程序啓動爲進程後,此進程的屬主爲當前用戶,及是進程的發起者;進程所屬組也是發起者的所屬組

       c、進程的訪問權限,取決起屬主的訪問權限

          a)、進程的屬主同文件屬主,則應用文件屬主的權限

          b)、進程的屬主同文件的屬組,則應用文件的屬組的權限

          c)、進程的屬主同文件的其他權限


    3、SUID:

      a、任何一個可執行程序文件能不能啓動爲進程,取決於發起者對程序文件是否有執行權限

      b、啓動爲進程後,起屬主不是發起者,而是程序文件自己的屬主,這種機制就叫做SUID


      權限設定:

       chmod u+s filename

       chmod u-s filename 

         注意:s:屬主原本就有執行權限; S:屬主原本沒有執行權限


    4、SGID

       默認情況下,用戶創建文件是,其屬組是這個用戶所屬的基本組

       一旦某目錄被設定SGID權限後,則在此目錄下創建的文件的屬組都是該目錄的屬組,而不是文件所屬的基本組:

      

       權限設定:

        chmod g+s filename

        chmod g-s filename 

     5、Sticky

         對一個多人可寫的目錄,此特性用於限制用戶只能刪除自己的文件:

        權限設定

          chmod o+t filename

          chmod o-t filename


 五、Linux磁盤管理(一)

    1、硬盤:

       機械式硬盤

       SSD

     機械式:

       track:

       sector:

       cylinder:分區的基本單位:


       MBR:Master Boot Record

         512bytes

            446:bootloader

            64: filenamesystem allocation table

             2:55AA

     2、磁盤接口類型:

        IDE(ATA):133MB/s

        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:同意類型下的不同設備


      3、分區:即分割存儲空間爲多個小的空間,每個空間可獨立使用文件系統:

      4、分區工具:

         fdisk,parted,sfdisk


      5、fdisk工具的使用

         分區管理子命令:

          p:顯示 

          n:創建

          d:刪除

          t:修改分區ID

          l:列出所有支持ID類型

          w:保存退出

          q:不保存退出

          m:獲取幫助


           創建完成後,查看內核是否已經識別新的分區

            cat /proc/partitions

           

            有三個命令可以讓內核重讀磁盤分區表:

             CentOS 5: partprobe [DEVICE]

             CentOS 6,7: partx,kpartx


      6、Linux文件系統管理:

        文件系統:Virtual File System


        linux:ext2,ext3,ext4,reiserfs,xfs,btrfs,swap

        光盤:iso9600

        windows:fat32,ntfs

        unix:ffs,ufs,jfs,jfs2

        網絡文件系統:nfs,cifs

        集羣文件系統:ocfs2,gfs2

        分佈式文件系統:ceph,moosefs,mogilefs,hdfs,gfs,glusterfs

         a、日誌型文件系統

             非日誌型文件系統:ext2

             日誌型文件系統:ext3

         b、交換分區:swap


      7、創建文件系統

           在分區上執行格式化(高級格式化)

            要是某種文件系統滿足兩個條件:

             a、內核中支持此文件系統

             b、用戶空間中有文件系統的管理工具


          創建工具mkfs(make file system)

            mkfs -t type device

            ext系類文件系統的專用管理工具:

             mk2fs -t {ext2|ext3|ext4} device

                  -b:BLOCK:1024,2049,4096

                  -L 'label':設置卷標

           blkid

             blkid device 打印設備塊結構屬性



六、練習題

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

%s/^[[:space:]]\+//

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

%s/^[[:space:]]/#\1/


3、替換/tmp/function是文件中的/etc/sysconfig/init爲/var/log;

%s@/etc/sysconfig/init@/var/log@p 
%s/\/etc\/sysconfig\/init/\/var\/log/p


4、刪除/tmp/functions文件中所有已#開頭,且#後面至少各了一個空白字符行的行首。

%s/^#[[:space:]]\+//


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

find /var -user root -group mail

wKioL1XqYnvAIYTzAAC7vP9Pz60563.jpg 


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

find /usr ! \( -user root -o -user bin -o -user hadoop \)

wKiom1XqYGWTyng8AAEPv0YzmpE636.jpg



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

find /etc -ctime -7 -a ! \( -user root -o -user hadoop \)

wKioL1XqYqKi6AayAAKUpBbhwbs212.jpg



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

find / -nouser -a -group -a -atmie -7

wKiom1XqYI7CeD9bAAavDRFZMO4670.jpg


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

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

wKioL1XqYxWiItUZAASDfThAAZU309.jpg


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

find /etc ! -perm /222

wKiom1XqYQWQuf4ZAAOawtHWroM112.jpg


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

find /etc ! -perm -111

wKiom1XqYRfSaP0IAA2gLKD-CUI530.jpg


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

find /etc/init.d/ -perm -113

wKioL1XqY1axe3B5AADArzWLczM394.jpg


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

cp /bin/cat /tmp 
chmod u+s /tmp/cat 
su - usera
usera$:/tmp/cat /etc/shadow


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

mkdir /test/
cd /test/
mkdir /data 
 chmod 777 data
  su - usera
  touch /test/data/usera.1
  su - userb
  touch /test/data/userb.1
  su - userc
  touch /test/data/userc.1
  
  root#:chmod g+s data
  
   su - usera
  touch /test/data/usera.2 
  su - userb
  touch /test/data/userb.2 
  su - userc
  touch /test/data/userc.2 
  
  root#:chmod o+t data


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