mkdir:命令linux
一、命令詳解windows
【功能說明】測試
mkdir命令是「make directories」中每一個單詞的粗體字母組合而成,其功能是建立目錄,默認狀況下,若是要建立的目錄已經存在,則會提示此文件已經存在;而不會繼續建立目錄spa
【語法格式】遞歸
mkdir [option] [directory]ci mkdir [選項] [目錄]字符串 |
【選項說明】io
參數選項 |
解釋說明(帶 Δ 的爲重點) |
-p |
- 遞歸建立目錄,遞歸的意思是父目錄及其子目錄的子目錄 Δ
- 即便要建立的目錄實現已存在也不會報錯提示目錄已經存在
|
-m |
設置新建立目錄的默認目錄對應的權限 |
-v |
顯示建立目錄的過程 |
二、使用案例table
一、基礎範例test
案例一、不使用任何命令參數建立目錄用法示例。
咱們先來查看下當前的目錄樹結構,命令以下:
[root@1-230 ~]# cd [root@1-230 ~]# tree -d . #根據結果能夠看出當前目錄下沒有任何目錄 0 directories |
開始測試建立目錄,並檢查:
[root@1-230 ~]# mkdir data #在當前目錄下建立data目錄,此處data是相對路徑 [root@1-230 ~]# tree -d . └── data #能夠看到data目錄已經建立。 1 directory [root@1-230 ~]# mkdir data #再次執行建立命令會提示目錄已經存在。 mkdir: 沒法建立目錄"data": 文件已存在 |
擴展知識:
windows下的目錄路徑樣式爲d:\data\test,而linux下的路徑樣式爲/data/test,它們的目錄頂點和分隔符均不一樣。
案例2:使用-p參數遞歸建立目錄
當咱們建立多級目錄時,若是第一級目錄(cc)不存在,那麼咱們建立結果會報錯,致使沒法建立成果,操做以下:
[root@1-230 ~]# mkdir cc/test mkdir: cannot create directory 'cc/test': No such file or directory #提示沒有這個文件或目錄 |
此時,能夠指定-P參數遞歸建立多級目錄:
[root@1-230 ~]# mkdir -p cc/test [root@1-230 ~]# tree -d . |-- cc | `-- test `-- data 3 directories |
使用mkdir建立多級目錄時,建議直接使用-p參數,能夠避免出現「no such file or directory」這樣沒有文件或目錄的報錯了,不會影響已存在的目錄。
案例3:加-v參數顯示建立目錄的過程。
使用-v參數顯示建立目錄的詳細過程,具體操做命令以下:
[root@1-230 ~]# mkdir -pv aa/test mkdir: created directory 'aa' mkdir: created directory 'aa/test' |
提示:
其實這個-v沒有什麼實際用途。
案例4:建立目錄時可以使用-m參數設置目錄的默認權限。
[root@1-230 ~]# mkdir dir1 [root@1-230 ~]# ls -ld dir1 #ls命令的使用方法見後面的ls命令 drwxr-xr-x 2 root root 6 Oct 22 22:00 dir1 #建立該目錄默認權限爲755 [root@1-230 ~]# mkdir -m 755 dir2 #建立目錄時指定755的數字權限 [root@1-230 ~]# ls -ld dir2 drwxr-xr-x 2 root root 6 Oct 22 22:00 dir2 #能夠看到權限已經發生變化了 |
提示:
有關權限的知識可參數後面的chmod命令
案例5:技巧性範例,
同時建立多個目錄及多級子目錄。
在生產環境中,經常須要建立目錄用來存放文件,若是同時建立多個目錄而且每一個目錄下可能還有不少個子目錄,哪就須要執行屢次mkdir命令,這種作法比較不妥,事實上,咱們能夠使用mkdir命令同時建立多個多級目錄,具體命令操做以下:
[root@1-230 ~]# mkdir -pv aa/{dir1_1,dir1_2}/{dir2_1,dir2_2} #大括號{} 裏用逗號分隔 mkdir: created directory 'aa' mkdir: created directory 'aa/dir1_1' mkdir: created directory 'aa/dir1_1/dir2_1' mkdir: created directory 'aa/dir1_1/dir2_2' mkdir: created directory 'aa/dir1_2' mkdir: created directory 'aa/dir1_2/dir2_1' mkdir: created directory 'aa/dir1_2/dir2_2' [root@1-230 ~]# tree -d aa/ #上面建立的目錄命令所對應的目錄結構以下。 aa/ |-- dir1_1 | |-- dir2_1 | `-- dir2_2 `-- dir1_2 |-- dir2_1 `-- dir2_2 6 directories [root@1-230 ~]# mkdir -p cc/dir1_{1..3}/dir2_{1..3}/dir3_{a..c} #{1..3} 以及 {a..c}表示序列 [root@1-230 ~]# tree -d cc/ cc/ |-- dir1_1 | |-- dir2_1 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | |-- dir2_2 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | `-- dir2_3 | |-- dir3_a | |-- dir3_b | `-- dir3_c |-- dir1_2 | |-- dir2_1 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | |-- dir2_2 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | `-- dir2_3 | |-- dir3_a | |-- dir3_b | `-- dir3_c `-- dir1_3 |-- dir2_1 | |-- dir3_a | |-- dir3_b | `-- dir3_c |-- dir2_2 | |-- dir3_a | |-- dir3_b | `-- dir3_c `-- dir2_3 |-- dir3_a |-- dir3_b `-- dir3_c 39 directories [root@1-230 ~]# mkdir -p bb/dir1{1..3}/dir2{1..3}/dir3{a..c} # [root@1-230 ~]# tree -d bb/ bb/ |-- dir11 | |-- dir21 | | |-- dir3a | | |-- dir3b | | `-- dir3c | |-- dir22 | | |-- dir3a | | |-- dir3b | | `-- dir3c | `-- dir23 | |-- dir3a | |-- dir3b | `-- dir3c |-- dir12 | |-- dir21 | | |-- dir3a | | |-- dir3b | | `-- dir3c | |-- dir22 | | |-- dir3a | | |-- dir3b | | `-- dir3c | `-- dir23 | |-- dir3a | |-- dir3b | `-- dir3c `-- dir13 |-- dir21 | |-- dir3a | |-- dir3b | `-- dir3c |-- dir22 | |-- dir3a | |-- dir3b | `-- dir3c `-- dir23 |-- dir3a |-- dir3b `-- dir3c 39 directories |
擴展知識:
大括號( { } )的特殊用法。
在{ } 中使用逗號分隔多個字符或單詞時,使用echo命令能夠將這些被分隔的字符或單詞分別輸出到屏幕上,示例以下:
[root@1-230 ~]# echo {a,c} #會輸出a c到屏幕上。 a c |
若是{ }前有字符時,輸出結果以下:
[root@1-230 ~]# echo 1{2,3} 12 13 [root@1-230 ~]# echo 1{,3} #若是逗號前面什麼都沒有,能夠認爲是一個空字符串。 1 13 |
三、生產案例
案例1:克隆目錄結構
[root@1-230 ~]# tree -fid --noreport cc #顯示全部目錄樹,--noreport不顯示最後一行統計信息,也能夠用find命令輸出下面的目錄樹。 cc cc/dir1_1 cc/dir1_1/dir2_1 cc/dir1_1/dir2_1/dir3_a cc/dir1_1/dir2_1/dir3_b cc/dir1_1/dir2_1/dir3_c cc/dir1_1/dir2_2 cc/dir1_1/dir2_2/dir3_a cc/dir1_1/dir2_2/dir3_b cc/dir1_1/dir2_2/dir3_c cc/dir1_1/dir2_3 cc/dir1_1/dir2_3/dir3_a cc/dir1_1/dir2_3/dir3_b cc/dir1_1/dir2_3/dir3_c cc/dir1_2 cc/dir1_2/dir2_1 cc/dir1_2/dir2_1/dir3_a cc/dir1_2/dir2_1/dir3_b cc/dir1_2/dir2_1/dir3_c cc/dir1_2/dir2_2 cc/dir1_2/dir2_2/dir3_a cc/dir1_2/dir2_2/dir3_b cc/dir1_2/dir2_2/dir3_c cc/dir1_2/dir2_3 cc/dir1_2/dir2_3/dir3_a cc/dir1_2/dir2_3/dir3_b cc/dir1_2/dir2_3/dir3_c cc/dir1_3 cc/dir1_3/dir2_1 cc/dir1_3/dir2_1/dir3_a cc/dir1_3/dir2_1/dir3_b cc/dir1_3/dir2_1/dir3_c cc/dir1_3/dir2_2 cc/dir1_3/dir2_2/dir3_a cc/dir1_3/dir2_2/dir3_b cc/dir1_3/dir2_2/dir3_c cc/dir1_3/dir2_3 cc/dir1_3/dir2_3/dir3_a cc/dir1_3/dir2_3/dir3_b cc/dir1_3/dir2_3/dir3_c [root@1-230 ~]# tree -fid --noreport cc >> ~/cc.test #將目錄樹內容追加到家目錄下的cc.txt文件裏 [root@1-230 ~]# cd /tmp/ [root@1-230 tmp]# mkdir -p `cat ~/cc.test` #mkdir命令後面能夠接不少目錄名稱批量建立目錄,可是若是將全部目錄都放在mkdir命令後面勢必會致使命令太長,所以這裏採用了一個巧妙的用法,使用了一對反引號(在鍵盤ESC下方),反引內部使用cat命令讀取~(家目錄下的cc.txt文件內容, 這個文件內容就包含了全部的目錄名稱。最後你們要知道的是,一個命令語句中若是反引號包含的命令,那麼須要優先執行反引號中的命令語句,就像本例應先執行cat命令,而後執行mkdir命令,cat命令使用方法見cat命令) [root@1-230 tmp]# tree -d /tmp/cc #查看上述命令操做結果 /tmp/cc |-- dir1_1 | |-- dir2_1 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | |-- dir2_2 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | `-- dir2_3 | |-- dir3_a | |-- dir3_b | `-- dir3_c |-- dir1_2 | |-- dir2_1 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | |-- dir2_2 | | |-- dir3_a | | |-- dir3_b | | `-- dir3_c | `-- dir2_3 | |-- dir3_a | |-- dir3_b | `-- dir3_c `-- dir1_3 |-- dir2_1 | |-- dir3_a | |-- dir3_b | `-- dir3_c |-- dir2_2 | |-- dir3_a | |-- dir3_b | `-- dir3_c `-- dir2_3 |-- dir3_a |-- dir3_b `-- dir3_c 39 directories |