close
  • 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

arrow
arrow
    創作者介紹
    創作者 STORY 的頭像
    STORY

    STORY

    STORY 發表在 痞客邦 留言(0) 人氣()