1. 程式人生 > >易學筆記-Linux命令-第5章:操作檔案和目錄

易學筆記-Linux命令-第5章:操作檔案和目錄

  • 操作檔案和目錄
  1. 萬用字元
    1. *:匹配任意多個字元(包括零個或者多個)

      [[email protected] ~]# ll -l *  列出所有檔案或者目錄,包括目錄中的子目錄或者子檔案

      -rw-r--r--. 1 root root         0 Aug 21 01:10 123.txt

      -rw-r--r--. 1 root root      1287 May  2 10:16 wys.log

      wys:

      total 28

      -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

      drwxr-xr-x. 2 root root  43 Jun  4 10:29 etcd

      -rw-r--r--. 1 root root  44 May 21 16:48 my_config.txt

      drwxr-xr-x. 2 root root  85 Jun  8 11:20 soft

      drwxr-xr-x. 2 root root  36 May 18 11:58 test

      -rw-r--r--. 1 root root  34 May 21 17:19 ubuntu_config.txt

    2. ?:匹配任意一個字元(注意:僅僅是一個,而且不包含0個)

      [[email protected] ~]# ls  wys目錄  wys.log檔案

      123.txt  mylog  mysql.tar.gz  wys  wys.log

      [[email protected] ~]# ll -l wy?  ?代表只匹配一個,也就只有wys目錄

      total 28

      -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

      drwxr-xr-x. 2 root root  43 Jun  4 10:29 etcd

      -rw-r--r--. 1 root root  44 May 21 16:48 my_config.txt

    3. [characters]:匹配任意一個屬於字符集中的字元

      [[email protected] ~]# ls m或者w開頭的檔案有四個:mylog  mysql.tar.gz  wys(目錄)  wys.log

      123.txt  mylog  mysql.tar.gz  wys  wys.log

      [[email protected] ~]# ll -l [wm]* [wm]表示以w或者m開頭的任何檔案或者目錄

      -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

      -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

      -rw-r--r--. 1 root root      1287 May  2 10:16 wys.log

      wys:

      total 28

      -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

      -rw-r--r--. 1 root root 427 May 18 11:58 docker-compose-stack.yml

      -rw-r--r--. 1 root root 100 May 16 09:24 docker-compose.yml

      -rw-r--r--. 1 root root 231 May 15 09:50 docker-compose.yml_bak

    4. [!characters]:匹配任意一個不屬於字符集中的字元

      [[email protected] ~]# ls m或者w開頭的檔案有四個:mylog  mysql.tar.gz  wys(目錄)  wys.log

      123.txt  mylog  mysql.tar.gz  wys  wys.log

      [[email protected] ~]# ll -l [!wm]* [wm]表示不以w或者m開頭的任何檔案或者目錄,那就是指剩下123.txt

      -rw-r--r--. 1 root root 0 Aug 21 01:10 123.txt

    5. [[:class:]]:匹配任意一個屬於指定字元類中的字元,這些字元類可以試下面一個:
      1. [:alnum:]:匹配任意一個字母或數字

        [[email protected] ~]# ls 以數字或者字母(a-z或者A-Z)開頭的檔案或者目錄除了_char.txt外都是

        123.txt  _char.txt  mylog  mysql.tar.gz  wys  wys.log

        [[email protected] ~]# ll -l [[:alnum:]]* 以數字或者字母開頭的檔案或者目錄

        -rw-r--r--. 1 root root         0 Aug 21 01:10 123.txt

        -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

        -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

        -rw-r--r--. 1 root root      1287 May  2 10:16 wys.log

        wys:

        total 28

        -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

        -rw-r--r--. 1 root root 427 May 18 11:58 docker-compose-stack.yml

        -rw-r--r--. 1 root root 100 May 16 09:24 docker-compose.yml

        -rw-r--r--. 1 root root 231 May 15 09:50 docker-compose.yml_bak

        drwxr-xr-x. 2 root root  43 Jun  4 10:29 etcd

      2. [:alpha:]:匹配任意一個字母

        [[email protected] ~]# ls 以數字或者字母(a-z或者A-Z)開頭的檔案或者目錄除了_char.txt外都是

        123.txt  _char.txt  mylog  mysql.tar.gz  wys  wys.log

        [[email protected] ~]# ll -l [[:alpha:]]* 以字母開頭的檔案或者目錄,123.txt是以數字開頭的,所以不會顯示,_char.txt是以符號開頭的也不會顯示

        -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

        -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

        -rw-r--r--. 1 root root      1287 May  2 10:16 wys.log

        wys:

        total 28

        -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

        -rw-r--r--. 1 root root 427 May 18 11:58 docker-compose-stack.yml

        -rw-r--r--. 1 root root 100 May 16 09:24 docker-compose.yml

        -rw-r--r--. 1 root root 231 May 15 09:50 docker-compose.yml_bak

        drwxr-xr-x. 2 root root  43 Jun  4 10:29 etcd

        -rw-r--r--. 1 root root  44 May 21 16:48 my_config.txt

        drwxr-xr-x. 2 root root  22 Jun  6 16:18 mypyton

        drwxr-xr-x. 3 root root  23 Jun  8 11:23 myspringboot

        drwxr-xr-x. 2 root root   6 Aug 15 16:12 nexus

        -rw-r--r--. 1 root root  30 May 21 17:19 nginx_config.txt

      3. [:digit:]:匹配任意一個數字

        [[email protected] ~]# ls 以數字或者字母(a-z或者A-Z)開頭的檔案或者目錄除了_char.txt外都是

        123.txt  _char.txt  mylog  mysql.tar.gz  wys  wys.log

        [[email protected] ~]# ll -l [[:digit:]]*  顯示以數字開頭的檔案或者目錄

        -rw-r--r--. 1 root root 0 Aug 21 01:10 123.txt

      4. [:lower:]:匹配任意一個小寫字母

        [[email protected] ~]# ls 以數字或者字母(a-z或者A-Z)開頭的檔案或者目錄除了_char.txt外都是

        123.txt  _char.txt  mylog  mysql.tar.gz  wys  wys.log

        [[email protected] ~]# ll -l [[:lower:]]* 顯示以小寫字母開頭的檔案或者目錄

        -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

        -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

        -rw-r--r--. 1 root root      1287 May  2 10:16 wys.log

        wys:

        total 28

        -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

        -rw-r--r--. 1 root root 427 May 18 11:58 docker-compose-stack.yml

        -rw-r--r--. 1 root root 100 May 16 09:24 docker-compose.yml

        -rw-r--r--. 1 root root 231 May 15 09:50 docker-compose.yml_bak

      5. [:upper]:匹配任意一個大寫字母

        [[email protected] ~]# ls 以數字或者字母(a-z或者A-Z)開頭的檔案或者目錄除了_char.txt外都是

        123.txt  _char.txt  mylog  mysql.tar.gz  wys  wys.log

        [[email protected] ~]# ll -l [[:upper:]]* 以大小字母開頭的檔案,因為該目錄下都是小寫開頭的,所以顯示找不到檔案或者目錄

        ls: cannot access [[:upper:]]*: No such file or directory

  2. 字元範圍
    1. 數字範圍:[0-9]:表示從0到9
    2. 小寫字母範圍:[a-z]:表示a到z
    3. 大小字母範圍:[A-Z]:表示A到Z
  3. mkdir — 建立目錄
    1. 語法:mkdir directory...
    2. 舉例:
      1. 建立一個目錄:mkdir dir1
      2. 連續建立多個目錄:mkdir dir1 dir2 dir3
      3. -p引數:目錄存在不提示忽略過 mkdir -p dir1 dir2
  4. cp — 複製檔案和目錄
    1. 語法
      1. 複製單個檔案或者目錄到檔案或者目錄: cp -option item1 item2,注意:如果item1為目錄,則item2也必須為目錄
      2. 複製多個檔案或者目錄到目錄: cp -option item...  directory
    2. 選項
      1. -a:複製檔案或者目錄以及他們的屬性,預設複製當前使用者所具有的屬性
      2. -r:遞迴複製檔案目錄,類似 -a,注意:複製目錄時必須帶-a或者-r,如果不帶只能複製檔案
        1. 僅僅複製檔案

          [[email protected] ~]# cp wys/* wys_bak  要求目錄 wys_bak 存在

          cp: omitting directory ‘wys/etcd’

          cp: omitting directory ‘wys/mypyton’

          cp: omitting directory ‘wys/myspringboot’

          cp: omitting directory ‘wys/nexus’

          cp: omitting directory ‘wys/soft’

          cp: omitting directory ‘wys/test’

        2. 複製檔案和目錄

          [[email protected] ~]# cp –r wys/* wys_bak  目錄 wys_bak 不存在則建立

      3. -i:如果檔案存在則提示,預設是不提示直接覆蓋的

        [[email protected] ~]# cp -i wys.log  wys/

        cp: overwrite ‘wys/wys.log’?

      4. -u:只拷貝目標目錄不存在的檔案或者覆蓋目標檔案較舊的版本
  5. mv — 移動/重新命名檔案和目錄
    1. 語法
      1. 單個檔案或者目錄到檔案或者目錄: mv-option item1 item2,注意:如果item1為目錄,則item2也必須為目錄
      2. 複製多個檔案或者目錄到目錄: mv-option item...  directory
    2. 選項:
      1. -i:如果檔案存在則提示,預設是不提示直接覆蓋的

         

      2. -u:只拷貝目標目錄不存在的檔案或者覆蓋目標檔案較舊的版本
    3. 舉例
      1. 移動單個檔案覆蓋並提示

        [[email protected] ~]# mv -i wys.log  wys/

        cp: overwrite ‘wys/wys.log’?

      2. 移動多個檔案到目錄

        [[email protected] ~]# mv 123.txt  _char.txt  wys/  wys必須已經存在

      3. 移動目錄

        [[email protected] ~]# mv wys/ wys_bak/   wys_bak可以不存在

  6. rm — 刪除檔案和目錄
    1. 語法:刪除一個或者多個檔案或者目錄:rm -option item....
    2. 選項:
      1. -i:刪除檔案前要求使用者確定
      2. -r:遞迴刪除目錄(子目錄)
      3. -f:強制刪除,如果檔案不存在也忽略
    3. 舉例:
      1. 刪除提示:

        [[email protected] wys_bak]# rm -i wys.log

        rm: remove regular empty file ‘wys.log’?

      2. 多個檔案或者目錄提示遞迴刪除:

        [[email protected] wys_bak]# rm -r wys_log_2  test/

        rm: remove regular empty file ‘wys_log_2’?

      3. 多個檔案或者目錄強制遞迴刪除:

        [[email protected] wys_bak]# rm -rf wys_log_2  test/

        [[email protected] wys_bak]#

  7. ln — 建立硬連結和符號連結
    1. 建立硬連結
      1. 語法:ln file link
        1. file:可以是帶路徑的檔名,只能是檔案,不能是目錄
        2. link:連結名,通過連線名可以操作關聯檔案
      2. 舉例:

        [[email protected] ~]# ln wys_bak/123.txt ln_123  wys_bak/123.txt 為帶路徑的檔案 ln_123連結名

        [[email protected] ~]# ll 

        total 409916

        -rw-r--r--. 2 root root        14 Aug 21 03:25 ln_123 連結ln_123看起來和一般的檔案沒有任何區別

      3. 通過連結修改內容反射到原檔案

        [[email protected] ~]# cat > ln_123   通過連結修改檔案內容

        112

        11222

        [[email protected] ~]# cat wys_bak/123.txt 原檔案內容就是連結修改後的內容

        112

        11222

        [[email protected] ~]#

      4. 檢視某個檔案硬連結的數量

        [[email protected] ~]# ll

        total 409916

        -rw-r--r--. 2 root root        10 Aug 21 03:42 ln_123 2表示當前硬連結的數量為2:一個是ln_123,一個是123.txt

        [[email protected] ~]# ln wys_bak/123.txt  ln_123_bak 新增一個連結ln_123_bak

        [[email protected] ~]# ll

        total 409920

        -rw-r--r--. 3 root root        10 Aug 21 03:42 ln_123

        -rw-r--r--. 3 root root        10 Aug 21 03:42 ln_123_bak 表示當前硬連結的數量為3:一個是ln_123,一個是123.txt,一個是ln_123_bak

      5. 確認是不是硬連結

        [[email protected] ~]# ll –li  通過i 選項顯示檔案索引號,檔案索引號相同的表示是同一個檔案,2個連結和1個檔案的索引號相同,說明他們是同一個檔案

        total 409920

        17599828 -rw-r--r--. 3 root root        10 Aug 21 03:42 ln_123

        17599828 -rw-r--r--. 3 root root        10 Aug 21 03:42 ln_123_bak

        52126122 drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

        18083880 -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

        18256455 -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

        17910226 lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

        17910227 lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

             171 drwxr-xr-x. 7 root root      4096 Aug 21 03:40 wys_bak

        [[email protected] ~]# cd wys_bak/

        [[email protected] wys_bak]# ll -li

        total 32

        17599828 -rw-r--r--. 3 root root  10 Aug 21 03:42 123.txt

        17910224 -rw-r--r--. 1 root root   0 Aug 21 01:21 _char.txt

      6. 刪除連結

        [[email protected] ~]# rm ln_123_bak 刪除連結

        rm: remove regular file ‘ln_123_bak’? y

        [[email protected] ~]# ll -li

        total 409916

        17599828 -rw-r--r--. 2 root root        10 Aug 21 03:42 ln_123 連結數量變為2

      7. 刪除檔案本身,硬連結還能正常使用

        [[email protected] wys_bak]# rm 123.txt  刪除檔案本身

        rm: remove regular file ‘123.txt’? y

        [[email protected] ~]# cat ln_123   硬連結還能使用,因為硬連結拷貝了檔案本身

        112

        11222

    2. 軟體軟連結
      1. 語法:ln -s itemlink
        1. file:可以是帶路徑的檔名或者目錄
        2. link:帶路徑的連結名,一般放在usr/bin目錄下,這樣就可以任何目錄執行軟連結了
        3. 通過連線名可以操作關聯檔案
      2. 舉例:
        1. 建立一個指向檔案的連結

          [[email protected] ~]# ln -s wys_bak/123.txt  s_ln_123

          [[email protected] ~]# ll

          -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

          lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt,檔案型別第一個字母l 表示的是連結

        2. 建立一個指向目錄的連結

          [[email protected] ~]# ln -s wys_bak/  s_ln_dir

          [[email protected] ~]# ll

          total 409916

          -rw-r--r--. 2 root root        14 Aug 21 03:25 ln_123

          lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/,檔案型別第一個字母l 表示的是連結,wys_bak後面的/表示的是目錄

        3. 提供過連結操作原目錄

          [[email protected] ~]# cd s_ln_dir/  通過連結進入目錄

          [[email protected] s_ln_dir]# ll     進去的是連結目錄,在連結中可以像操作原目錄那樣操作

          total 32

          -rw-r--r--. 2 root root  10 Aug 21 03:42 123.txt

          -rw-r--r--. 1 root root   0 Aug 21 01:21 _char.txt

          -rw-r--r--. 1 root root 681 May 24 15:53 docker-compose-stack-config.yml

          -rw-r--r--. 1 root root 427 May 18 11:58 docker-compose-stack.yml

          -rw-r--r--. 1 root root 100 May 16 09:24 docker-compose.yml

          -rw-r--r--. 1 root root 231 May 15 09:50 docker-compose.yml_bak

        4. 刪除檔案本身,軟體連結不能用了

          [[email protected] wys_bak]# rm 123.txt  刪除檔案本身

          rm: remove regular file ‘123.txt’? y

          [[email protected] ~]# ll

          total 409916

          -rw-r--r--. 1 root root        10 Aug 21 03:42 ln_123

          drwxr-xr-x. 2 root root        21 Aug 21 03:52 me

          -rw-r--r--. 1 root root      7166 Jun  7 18:33 mylog

          -rw-r--r--. 1 root root 419737600 May 14 11:32 mysql.tar.gz

          lrwxrwxrwx. 1 root root        15 Aug 21 03:36 s_ln_123 -> wys_bak/123.txt

          lrwxrwxrwx. 1 root root         8 Aug 21 03:37 s_ln_dir -> wys_bak/

          drwxr-xr-x. 7 root root      4096 Aug 21 04:50 wys_bak

          [[email protected] ~]# cat s_ln_123 再次檢視軟連結,就不能使用了

          cat: s_ln_123: No such file or directory