易學筆記-Linux命令-第5章:操作檔案和目錄
- 操作檔案和目錄
- 萬用字元
- *:匹配任意多個字元(包括零個或者多個)
[[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
- ?:匹配任意一個字元(注意:僅僅是一個,而且不包含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
- [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
- [!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
- [[:class:]]:匹配任意一個屬於指定字元類中的字元,這些字元類可以試下面一個:
- [: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
- [: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
- [: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
- [: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
- [: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
- [:alnum:]:匹配任意一個字母或數字
- *:匹配任意多個字元(包括零個或者多個)
- 字元範圍
- 數字範圍:[0-9]:表示從0到9
- 小寫字母範圍:[a-z]:表示a到z
- 大小字母範圍:[A-Z]:表示A到Z
- mkdir — 建立目錄
- 語法:mkdir directory...
- 舉例:
- 建立一個目錄:mkdir dir1
- 連續建立多個目錄:mkdir dir1 dir2 dir3
- -p引數:目錄存在不提示忽略過 mkdir -p dir1 dir2
- cp — 複製檔案和目錄
- 語法
- 複製單個檔案或者目錄到檔案或者目錄: cp -option item1 item2,注意:如果item1為目錄,則item2也必須為目錄
- 複製多個檔案或者目錄到目錄: cp -option item... directory
- 選項
- -a:複製檔案或者目錄以及他們的屬性,預設複製當前使用者所具有的屬性
- -r:遞迴複製檔案目錄,類似 -a,注意:複製目錄時必須帶-a或者-r,如果不帶只能複製檔案
- 僅僅複製檔案
[[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’
- 複製檔案和目錄
[[email protected] ~]# cp –r wys/* wys_bak 目錄 wys_bak 不存在則建立
- 僅僅複製檔案
- -i:如果檔案存在則提示,預設是不提示直接覆蓋的
[[email protected] ~]# cp -i wys.log wys/
cp: overwrite ‘wys/wys.log’?
- -u:只拷貝目標目錄不存在的檔案或者覆蓋目標檔案較舊的版本
- 語法
- mv — 移動/重新命名檔案和目錄
- 語法
- 單個檔案或者目錄到檔案或者目錄: mv-option item1 item2,注意:如果item1為目錄,則item2也必須為目錄
- 複製多個檔案或者目錄到目錄: mv-option item... directory
- 選項:
- -i:如果檔案存在則提示,預設是不提示直接覆蓋的
- -u:只拷貝目標目錄不存在的檔案或者覆蓋目標檔案較舊的版本
- -i:如果檔案存在則提示,預設是不提示直接覆蓋的
- 舉例
- 移動單個檔案覆蓋並提示
[[email protected] ~]# mv -i wys.log wys/
cp: overwrite ‘wys/wys.log’?
- 移動多個檔案到目錄
[[email protected] ~]# mv 123.txt _char.txt wys/ wys必須已經存在
- 移動目錄
[[email protected] ~]# mv wys/ wys_bak/ wys_bak可以不存在
- 移動單個檔案覆蓋並提示
- 語法
- rm — 刪除檔案和目錄
- 語法:刪除一個或者多個檔案或者目錄:rm -option item....
- 選項:
- -i:刪除檔案前要求使用者確定
- -r:遞迴刪除目錄(子目錄)
- -f:強制刪除,如果檔案不存在也忽略
- 舉例:
- 刪除提示:
[[email protected] wys_bak]# rm -i wys.log
rm: remove regular empty file ‘wys.log’?
- 多個檔案或者目錄提示遞迴刪除:
[[email protected] wys_bak]# rm -r wys_log_2 test/
rm: remove regular empty file ‘wys_log_2’?
- 多個檔案或者目錄強制遞迴刪除:
[[email protected] wys_bak]# rm -rf wys_log_2 test/
[[email protected] wys_bak]#
- 刪除提示:
- ln — 建立硬連結和符號連結
- 建立硬連結
- 語法:ln file link
- file:可以是帶路徑的檔名,只能是檔案,不能是目錄
- link:連結名,通過連線名可以操作關聯檔案
- 舉例:
[[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看起來和一般的檔案沒有任何區別
- 通過連結修改內容反射到原檔案
[[email protected] ~]# cat > ln_123 通過連結修改檔案內容
112
11222
[[email protected] ~]# cat wys_bak/123.txt 原檔案內容就是連結修改後的內容
112
11222
[[email protected] ~]#
- 檢視某個檔案硬連結的數量
[[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
- 確認是不是硬連結
[[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
- 刪除連結
[[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了
- 刪除檔案本身,硬連結還能正常使用
[[email protected] wys_bak]# rm 123.txt 刪除檔案本身
rm: remove regular file ‘123.txt’? y
[[email protected] ~]# cat ln_123 硬連結還能使用,因為硬連結拷貝了檔案本身
112
11222
- 語法:ln file link
- 軟體軟連結
- 語法:ln -s itemlink
- file:可以是帶路徑的檔名或者目錄
- link:帶路徑的連結名,一般放在usr/bin目錄下,這樣就可以任何目錄執行軟連結了
- 通過連線名可以操作關聯檔案
- 舉例:
- 建立一個指向檔案的連結
[[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 表示的是連結
- 建立一個指向目錄的連結
[[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後面的/表示的是目錄
- 提供過連結操作原目錄
[[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
- 刪除檔案本身,軟體連結不能用了
[[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
- 建立一個指向檔案的連結
- 語法:ln -s itemlink
- 建立硬連結