- mkdir:建立一個新的目錄
- rmdir:刪除一個空的目錄
指令 touch 建立空檔案或更新檔案目錄時間戳記(timestamp)
指令語法:
touch [OPTION]... FILE...
如 FILE 不存在,等於建立空檔案。
已存在,即是更新檔案目錄之時間戳記。
[root@study ~]# touch [-acdmt] 檔案 選項與參數: -a :僅修訂 access time; -c :僅修改檔案的時間,若該檔案不存在則不建立新檔案; -d :後面可以接欲修訂的日期而不用目前的日期,也可以使用 --date="日期或時間" -m :僅修改 mtime ; -t :後面可以接欲修訂的時間而不用目前的時間,格式為[YYYYMMDDhhmm] 範例一:新建一個空的檔案並觀察時間 [dmtsai@study ~]# cd /tmp [dmtsai@study tmp]# touch testtouch [dmtsai@study tmp]# ls -l testtouch -rw-rw-r--. 1 dmtsai dmtsai 0 Jun 16 00:45 testtouch # 注意到,這個檔案的大小是 0 呢!在預設的狀態下,如果 touch 後面有接檔案, # 則該檔案的三個時間 (atime/ctime/mtime) 都會更新為目前的時間。若該檔案不存在, # 則會主動的建立一個新的空的檔案喔!例如上面這個例子! 範例二:將 ~/.bashrc 複製成為 bashrc,假設複製完全的屬性,檢查其日期 [dmtsai@study tmp]# cp -a ~/.bashrc bashrc [dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc Tue Jun 16 00:49:24 CST 2015 <==這是目前的時間 -rw-r--r--. 1 dmtsai dmtsai 231 Mar 6 06:06 bashrc <==這是 mtime -rw-r--r--. 1 dmtsai dmtsai 231 Jun 15 23:44 bashrc <==這是 atime -rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:47 bashrc <==這是 ctime |
至於執行的結果當中,我們可以發現資料的內容與屬性是被複製過來的,因此檔案內容時間(mtime)與原本檔案相同。
但是由於這個檔案是剛剛被建立的,因此狀態(ctime)就變成現在的時間啦!
那如果你想要變更這個檔案的時間呢?可以這樣做:
範例三:修改案例二的 bashrc 檔案,將日期調整為兩天前 [dmtsai@study tmp]# touch -d "2 days ago" bashrc [dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc Tue Jun 16 00:51:52 CST 2015 -rw-r--r--. 1 dmtsai dmtsai 231 Jun 14 00:51 bashrc -rw-r--r--. 1 dmtsai dmtsai 231 Jun 14 00:51 bashrc -rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:51 bashrc # 跟上個範例比較看看,本來是 16 日變成 14 日了 (atime/mtime)~不過, ctime 並沒有跟著改變喔! 範例四:將上個範例的 bashrc 日期改為 2014/06/15 2:02 [dmtsai@study tmp]# touch -t 201406150202 bashrc [dmtsai@study tmp]# date; ll bashrc; ll --time=atime bashrc; ll --time=ctime bashrc Tue Jun 16 00:54:07 CST 2015 -rw-r--r--. 1 dmtsai dmtsai 231 Jun 15 2014 bashrc -rw-r--r--. 1 dmtsai dmtsai 231 Jun 15 2014 bashrc -rw-r--r--. 1 dmtsai dmtsai 231 Jun 16 00:54 bashrc # 注意看看,日期在 atime 與 mtime 都改變了,但是 ctime 則是記錄目前的時間! |
透過 touch 這個指令,我們可以輕易的修訂檔案的日期與時間。
並且也可以建立一個空的檔案喔!
不過,要注意的是,即使我們複製一個檔案時,複製所有的屬性,但也沒有辦法複製 ctime 這個屬性的。
ctime 可以記錄這個檔案最近的狀態 (status) 被改變的時間。
無論如何,還是要告知大家, 我們平時看的檔案屬性中,比較重要的還是屬於那個 mtime 啊!
我們關心的常常是這個檔案的『內容』 是什麼時候被更動的說~瞭乎?
無論如何, touch 這個指令最常被使用的情況是:
- 建立一個空的檔案;
- 將某個檔案日期修訂為目前 (mtime 與 atime)
範例:
[barry@rhel ~]$ touch newfile1 newfile2;ls –l
→ 指令間用 ”;”,可讓命令列上指令依序執行。
[root@rhel ~]# touch /etc/passwd /var
[root@rhel ~]# ls –ld /etc/passwd /var
三個主要的變動時間,那麼三個時間的意義是什麼呢?
- modification time (mtime):
當該檔案的『內容資料』變更時,就會更新這個時間!內容資料指的是檔案的內容,而不是檔案的屬性或權限喔!
- status time (ctime):
當該檔案的『狀態 (status)』改變時,就會更新這個時間,舉例來說,像是權限與屬性被更改了,都會更新這個時間啊。
- access time (atime):
當『該檔案的內容被取用』時,就會更新這個讀取時間 (access)。舉例來說,我們使用 cat 去讀取 /etc/man_db.conf , 就會更新該檔案的 atime 了。
這是個挺有趣的現象,舉例來說,我們來看一看你自己的 /etc/man_db.conf 這個檔案的時間吧!
[root@study ~]# date; ls -l /etc/man_db.conf ; ls -l --time=atime /etc/man_db.conf ; \ > ls -l --time=ctime /etc/man_db.conf # 這兩行其實是同一行喔!用分號隔開 Tue Jun 16 00:43:17 CST 2015 # 目前的時間啊! -rw-r--r--. 1 root root 5171 Jun 10 2014 /etc/man_db.conf # 在 2014/06/10 建立的內容(mtime) -rw-r--r--. 1 root root 5171 Jun 15 23:46 /etc/man_db.conf # 在 2015/06/15 讀取過內容(atime) -rw-r--r--. 1 root root 5171 May 4 17:54 /etc/man_db.conf # 在 2015/05/04 更新過狀態(ctime) # 為了要讓資料輸出比較好看,所以鳥哥將三個指令同時依序執行,三個指令中間用分號 (;) 隔開即可。 |
看到了嗎?在預設的情況下,ls 顯示出來的是該檔案的 mtime ,也就是這個檔案的內容上次被更動的時間。
指令 mkdir 建立目錄
指令語法:
mkdir [OPTION] DIRECTORY...
參數說明:
-p:遞迴建立空目錄。
[root@study ~]# mkdir [-mp] 目錄名稱 選項與參數: -m :設定檔案的權限喔!直接設定,不需要看預設權限 (umask) 的臉色~ -p :幫助你直接將所需要的目錄(包含上層目錄)遞迴建立起來! 範例:請到/tmp底下嘗試建立數個新目錄看看: [root@study ~]# cd /tmp [root@study tmp]# mkdir test <==建立一名為 test 的新目錄 [root@study tmp]# mkdir test1/test2/test3/test4 mkdir: cannot create directory ‘test1/test2/test3/test4’: No such file or directory # 話說,系統告訴我們,沒可能建立這個目錄啊!就是沒有目錄才要建立的!見鬼嘛? [root@study tmp]# mkdir -p test1/test2/test3/test4 # 原來是要建 test4 上層沒先建 test3 之故!加了這個 -p 的選項,可以自行幫你建立多層目錄! 範例:建立權限為rwx--x--x的目錄 [root@study tmp]# mkdir -m 711 test2 [root@study tmp]# ls -ld test* drwxr-xr-x. 2 root root 6 Jun 4 19:03 test drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1 drwx--x--x. 2 root root 6 Jun 4 19:05 test2 # 仔細看上面的權限部分,如果沒有加上 -m 來強制設定屬性,系統會使用預設屬性。 # 那麼你的預設屬性為何?這要透過底下介紹的 umask 才能瞭解喔! ^_^ |
如果想要建立新的目錄的話,那麼就使用mkdir (make directory)吧!
不過,在預設的情況下, 你所需要的目錄得一層一層的建立才行!
加上 -p 這個選項喔!你可以直接下達:『 mkdir -p /home/bird/testing/test1 』 ,
則系統會自動的幫你將 /home, /home/story, /home/story/test 依序的建立起目錄!
範例:
[barry@rhel ~]$ mkdir dir1 dir2 my\ dir "your dir"
→ 利用跳脫符號(\)將分隔字符(空白字元)跳脫出去,使之成一般普通字元。亦可用單雙引號。
[barry@rhel ~]$ mkdir -p dir3/dir4/dir5
刪除、複製、搬移指令
指令 rm 刪除檔案或目錄
指令語法:rm [OPTION]... FILE...
參數說明:
- -i:刪除檔案之前,會提示使用者做確認的動作。
- -f:強制刪除檔案而不需做確認。此外當檔名不存在時,會忽略錯誤訊息。
- -r、-R:刪除目錄。
Note:以 root 身分執行 rm 是執行 rm 別名,alias rm=’rm –i’。
範例:
[barry@rhel ~]$ mkdir -p dir1/dir2
[barry@rhel ~]$ touch file1 file2 afile bfile
[barry@rhel ~]$ rm afile bfile
[barry@rhel ~]$ rm -i file1
rm: remove regular empty file ‘file1’? n
[barry@rhel ~]$ rm -rf dir1 file* nofile
→ 強制刪除 dir1 目錄、file 開頭的所有檔案與不存在檔案 nofile。
[barry@rhel ~]$ alias rm=’rm -i’
[barry@rhel ~]$ touch file;rm file
rm: remove regular empty file ‘file’? n
[barry@rhel ~]$ rm –f file
rm (移除檔案或目錄)
[root@study ~]# rm [-fir] 檔案或目錄 選項與參數: -f :就是 force 的意思,忽略不存在的檔案,不會出現警告訊息; -i :互動模式,在刪除前會詢問使用者是否動作 -r :遞迴刪除啊!最常用在目錄的刪除了!這是非常危險的選項!!! 範例一:將剛剛在 cp 的範例中建立的 bashrc 刪除掉! [root@study ~]# cd /tmp [root@study tmp]# rm -i bashrc rm: remove regular file `bashrc'? y # 如果加上 -i 的選項就會主動詢問喔,避免你刪除到錯誤的檔名! 範例二:透過萬用字元*的幫忙,將/tmp底下開頭為bashrc的檔名通通刪除: [root@study tmp]# rm -i bashrc* # 注意那個星號,代表的是 0 到無窮多個任意字元喔!很好用的東西! 範例三:將 cp 範例中所建立的 /tmp/etc/ 這個目錄刪除掉! [root@study tmp]# rmdir /tmp/etc rmdir: failed to remove '/tmp/etc': Directory not empty <== 刪不掉啊!因為這不是空的目錄! [root@study tmp]# rm -r /tmp/etc rm: descend into directory `/tmp/etc'? y rm: remove regular file `/tmp/etc/fstab'? y rm: remove regular empty file `/tmp/etc/crypttab'? ^C <== 按下 [ctrl]+c 中斷 .....(中間省略)..... # 因為身份是 root ,預設已經加入了 -i 的選項,所以你要一直按 y 才會刪除! # 如果不想要繼續按 y ,可以按下『 [ctrl]-c 』來結束 rm 的工作。 # 這是一種保護的動作,如果確定要刪除掉此目錄而不要詢問,可以這樣做: [root@study tmp]# \rm -r /tmp/etc # 在指令前加上反斜線,可以忽略掉 alias 的指定選項喔!至於 alias 我們在bash再談! # 拜託!這個範例很可怕!你不要刪錯了!刪除 /etc 系統是會掛掉的! 範例四:刪除一個帶有 - 開頭的檔案 [root@study tmp]# touch ./-aaa- <==touch這個指令可以建立空檔案! [root@study tmp]# ls -l -rw-r--r--. 1 root root 0 Jun 11 19:22 -aaa- <==檔案大小為0,所以是空檔案 [root@study tmp]# rm -aaa- rm: invalid option -- 'a' <== 因為 "-" 是選項嘛!所以系統誤判了! Try 'rm ./-aaa-' to remove the file `-aaa-'. <== 新的 bash 有給建議的 Try 'rm --help' for more information. [root@study tmp]# rm ./-aaa- |
這是移除的指令(remove),要注意的是,
通常在Linux系統下,為了怕檔案被 root 誤殺,所以很多 distributions 都已經預設加入 -i 這個選項了!
而如果要連目錄下的東西都一起殺掉的話, 例如子目錄裡面還有子目錄時,那就要使用 -r 這個選項了!
不過,使用『 rm -r 』這個指令之前,請千萬注意了,因為該目錄或檔案『肯定』會被 root 殺掉!
因為系統不會再次詢問你是否要砍掉呦!
所以那是個超級嚴重的指令下達呦! 得特別注意!
不過,如果你確定該目錄不要了,那麼使用 rm -r 來循環殺掉是不錯的方式!
rmdir (刪除『空』的目錄)
[root@study ~]# rmdir [-p] 目錄名稱 選項與參數: -p :連同『上層』『空的』目錄也一起刪除 範例:將於mkdir範例中建立的目錄(/tmp底下)刪除掉! [root@study tmp]# ls -ld test* <==看看有多少目錄存在? drwxr-xr-x. 2 root root 6 Jun 4 19:03 test drwxr-xr-x. 3 root root 18 Jun 4 19:04 test1 drwx--x--x. 2 root root 6 Jun 4 19:05 test2 [root@study tmp]# rmdir test <==可直接刪除掉,沒問題 [root@study tmp]# rmdir test1 <==因為尚有內容,所以無法刪除! rmdir: failed to remove ‘test1’: Directory not empty [root@study tmp]# rmdir -p test1/test2/test3/test4 [root@study tmp]# ls -ld test* <==您看看,底下的輸出中test與test1不見了! drwx--x--x. 2 root root 6 Jun 4 19:05 test2 # 瞧!利用 -p 這個選項,立刻就可以將 test1/test2/test3/test4 一次刪除~ # 不過要注意的是,這個 rmdir 僅能『刪除空的目錄』喔! |
如果想要刪除舊有的目錄時,就使用rmdir吧!例如將剛剛建立的test殺掉,使用『 rmdir test 』即可!請注意呦!目錄需要一層一層的刪除才行!而且被刪除的目錄裡面必定不能存在其他的目錄或檔案! 這也是所謂的空的目錄(empty directory)的意思啊!那如果要將所有目錄下的東西都殺掉呢?! 這個時候就必須使用『 rm -r test 』囉!不過,還是使用 rmdir 比較不危險!你也可以嘗試以 -p 的選項加入,來刪除上層的目錄喔!
部分轉載自: http://linux.vbird.org/linux_basic/0220filemanager.php#touch
留言列表