首頁 > 軟體

Linux學習筆記-- 命令列操作檔案

2020-06-16 17:50:14

1、建立與刪除檔案 (touch ,rm)

touch xxxx 建立一個新的空檔案

touch -t 201412250101 xxxx 建立一個檔案並指定時間屬性(年月日時分.秒)

[root@linuxidc home]# touch xxxx

[root@linuxidc home]# touch -t 201412301030 yyyy

[root@linuxidc home]# ls -l xxxx yyyy

-rw-r--r--. 1 root root 0 11月 2 13:00 xxxx (當前時間2015年11月2日2點13分)

-rw-r--r--. 1 root root 0 12月 30 2014 yyyy (指定時間2014年12月30日10點30分)

如何修改Linux檔案的時間    http://www.linuxidc.com/Linux/2015-11/124813.htm

把所有的.sh檔案修改到三個月前(2013年10月13)的時間。操作命令:
[root@case test]# touch -d "2013/10/13" *.sh

先把touch的引數說明貼在這裡:
命令引數:

-a   或--time=atime或--time=access或--time=use  只更改存取時間。

-m  或--time=mtime或--time=modify  只更改變動時間。

-c   或--no-create  不建立任何文件。

-d  使用指定的日期時間,而非現在的時間。時間是字串

-t  使用指定的日期時間,而非現在的時間。時間格式是年月日時分.秒

-f  此引數將忽略不予處理,僅負責解決BSD版本touch指令的相容性問題。

-r  把指定文件或目錄的日期時間,統統設成和參考文件或目錄的日期時間相同。

touch file1.txt                 更新file1.txt的存取和修改時間

touch -c file1.txt             如果file1.txt不存在,不建立檔案

touch -r ref_file file1.txt         更新file1.txt的時間戳和ref+file相同

將參照檔案 ref_file 相應的時間戳記的數值作為指定檔案 file 時間戳記的新值.

touch -t 0811142234.50 file1.txt 設定檔案的時間錯為08年11月14日22點34分50秒

將參照檔案 ref_file 相應的時間戳記的數值作為指定檔案 file 時間戳記的新值.

什麼是 touch 命令

眾所周知,每個檔案都被附有時間戳。這個時間戳記包括存取時間和修改時間。而 Touch 命令主要就是用來修改檔案的存取時間和修改時間。

為什麼我們需要使用 touch 命令

既然 touch 命令描述的是改變時間戳,那麼我們可能會想為什麼我們需要去改變時間戳呢?這個問題會引發我們的深思。然而,我想有個理由可以解釋為什麼我們需要使用它。如果你參加了一個全球範圍的開源專案,那麼時間戳可能變得很重要。編譯原始碼檔案可能需要同一地區的時間戳。如果未統一,程式可能會編譯失敗。(譯註:有強迫症的同學也很喜歡這個命令——就看不得亂七八糟的時間,;>

不帶任何選項下執行 touch

最簡單的使用 touch 命令。只需鍵入:

  1. $ touch file_name

File_1.txt原來的時間戳是 12:42。在我們使用 touch 命令後,它改變為了 17:08。由此看出,預設情況下,touch 會將檔案的時間戳改為當前時間。

只改變存取時間

正如我們之前提到的,每個檔案都附有存取時間和修改時間。上面的時間戳是 17:08。我們可以看更多的細節。

我們發現存取access時間和修改change時間的值是相同的都是 17:08:35 ,還有它們屬於同一時區 GMT +7

如果現在我們要只改變存取時間,我們需要使用-a選項。

  1. $ touch –a file_1.txt

如你所見,存取時間變為 17:51:37 ,但是修改時間仍為17:08:35[譯註:原文為 Change time(狀態改變時間)應是作者筆誤]

只改變修改時間(modify,change)

我們可以使用-m選項來實現。現在我們用file_2.txt作個範例。

  1. $ touch –m file_2.txt

Touch -m option

現在修改時間從 12:42:20 改為了 17:57:20。請注意,當檔案被存取或修改時,狀態改變時間域的值總會對其記錄。

更改為自定義時間戳

-a-m選項都會將檔案的時間戳改為現在當前時間。當然我們也可以更改為自定義時間戳。使用-t選項實現。

從上面範例範例中的 file_2.txt,我們看出它的時間戳是:

存取時間: 12:42:20

修改時間: 17:57:20

執行日期: 2014-01-14

假如我們想要將存取時間和修改時間改為2014112 09:58:27。我們可以用下列命令來完成:

  1. $ touch –t 201401120958.27 file_2.txt

Touch using -t option

-t 選項語法組成 :

[[CC]YY]MMDDhhmm [.SS](年前兩位,年後兩位,月,日,時,分,秒)

改變日期和時間的另一種方式

如果你覺得[[CC]YY]MMDDhhmm [.SS]格式不適合你,我們也可以使用 -d 選項。下面是-d選項使用的一個範例。

更改指定日期

舉例來說,我們有個名為 file_3.txt 的檔案,它的相關屬性在下面的截圖中展示了。

現在我們要將日期2014114日改為20131220。可以使用下列命令:

  1. $ touch –d '10-december-2013' file_3.txt

不出意料,存取時間和修改時間的日期已經改為了20131210日。

改變時區

如果我們想改變指定GMT的時間,我們也可以使用-d選項。先讓file_3.txt 移回當前時間。

  1. $ touch file_3.txt

不難發現 file_3.txt 的時區為 GMT +0700。要改為 GMT3 時區,我們只需要鍵入如下命令:

  1. $ touch –GMT3 file_3.txt

好的,現在時間已經改為了 10:00:00 AM

結合引數下使用-d選項

還可以用很酷的方式使用-d選項。請觀察下面的圖片。

我們可以將單詞 next Sunday  GMT 3合成一個值,而 touch 命令仍然能識別它。日期已經改為了2014121日,而當前的日期為2014114日。

還有另一個-d選項的範例。首先,我們要將file3_3.txt重置到當前日期和時間。

  1. $ touch file_3.txt 然後我們嘗試這個命令:
  2. $ touch –d '1 year ago 13:43:07' file_3.txt

太震撼了,Touch 甚至能識別單詞'1 year ago'。現在的日期以及時間已經改為了2013114,13:43:07

[root@linuxidc home]# touch d '4 month ago 13:43:08' uuu

把uuu 這個檔案的時間修改成4個月前的13:43:08

建立一個空檔案

當你執行 touch 命令目標檔案不存在時,touch 會建立一個同名的空檔案。

  1. $ touch file_10.txt

同時建立多個檔案

你可以用空格將目標檔案分割開來,以此來建立多個檔案。

  1. $ touch doc_10.txt doc_20.txt doc_30.txt

總結

如果你要處理關於檔案或目錄的時間戳問題,那麼 Touch 會對你很有用的。一如既往得你也可以鍵入man touchtouch --help來顯示幫助頁面了解更多細節。

rm xxx 刪除檔案

rm -rf 強制刪除檔案

命令引數:

    -f, --force    忽略不存在的檔案,從不給出提示。

    -i, --interactive 進行互動式刪除

    -r, -R, --recursive   指示rm將引數中列出的全部目錄和子目錄均遞回地刪除。

# touch -- -f                            建立-f檔案,因為f前面有-,所有要加跳脫字元2個減號

# ls -l -- -f                            檢視-f檔案,在-f前面加跳脫字元2個減號。

-rw-r--r--. 1 root root 0 Nov 2 16:17 -f

# rm -rf -- -f                            刪除-f檔案,在-f前面加跳脫字元2個減號。

2、建立目錄與刪除目錄

mkdir xxx 建立一個目錄;

mkdir  -p xxx/yyy 遞回建立目錄;

rmdir  xxx/  刪除空目錄;

rm  -rf  XXX/  強制刪除非空目錄;

-p, --parents  可以是一個路徑名稱。此時若路徑中的某些目錄尚不存在,加上此選項後,

系統將自動建立好那些尚不存在的目錄,即一次可以建立多個目錄; 

-v, --verbose  每次建立新目錄都顯示資訊

#mkdir -p test2/test22 遞回建立多個目錄 

# mkdir -v test4                                (建立新目錄都顯示資訊)

mkdir: 已建立目錄 "test4"

# mkdir -vp test5/test5-1

mkdir: 已建立目錄 "test5"

mkdir: 已建立目錄 "test5/test5-1"

一個命令建立專案的目錄結構

# mkdir -vp scf/{lib/,bin/,doc/{info,product},logs/{info,product},service/deploy/{info,product}}

mkdir: 已建立目錄 "scf"

mkdir: 已建立目錄 "scf/lib"

mkdir: 已建立目錄 "scf/bin"

mkdir: 已建立目錄 "scf/doc"

mkdir: 已建立目錄 "scf/doc/info"

mkdir: 已建立目錄 "scf/doc/product"

mkdir: 已建立目錄 "scf/logs"

mkdir: 已建立目錄 "scf/logs/info"

mkdir: 已建立目錄 "scf/logs/product"

mkdir: 已建立目錄 "scf/service"

mkdir: 已建立目錄 "scf/service/deploy"

mkdir: 已建立目錄 "scf/service/deploy/info"

mkdir: 已建立目錄 "scf/service/deploy/product"

# tree scf/

scf/

|-- bin

|-- doc

|   |-- info

|   `-- product

|-- lib

|-- logs

|   |-- info

|   `-- product

`-- service

      `-- deploy

      |-- info

        `-- product

12 directories, 0 files

3、拷貝檔案與目錄

cp  /path1/xxx /path2/ yyy拷貝path1路徑下的xxx 檔案到 路徑path2路徑下,並命名為yyy,如果yyy檔案已經存在,則會覆蓋原檔案,加上 -i 選項會詢問是否覆蓋;

cp -p  /path1/xxx /path2/ yyy 拷貝檔案保留原檔案的屬性;

cp -rf /path1/  /path2/  拷貝目錄path1的檔案到目錄path2

cp -a  與 cp -dpr=all 相同

-d :若來原始檔為連結檔案的屬性(link file),則複製連結檔案屬性而非檔案本身;

-b --backup      刪除、覆蓋目的檔案先備份,備份的檔案或目錄亦建立為符號連結,並指向原始檔或目錄連結的原始檔或目錄。假如沒有加上這個引數,在複製過程中若遇到符號連結,則會直接複製原始檔或目錄
    -f     
強行複製檔案或目錄,不論目的檔案或目錄是否已經存在
    -i
覆蓋檔案之前先詢問使用者   

-p     --preserve 保留原始檔或目錄的屬性,包括所有者、所屬組、許可權與時間
   
root"cp -p"是可以的,這麼說,"cp -p"這個命令對於普通使用者來說是等同於直接"cp"

--parents     保留原始檔或目錄的路徑,
    -r 
-R    遞回處理,將指定目錄下的檔案與子目錄一併處理。

    -l --link        對原始檔建立硬連結,而非複製檔案
    -s
--symbolic-link  對原始檔建立符號連結,而非複製檔案
    -S <
備份字尾字串> --suffix=<備份字尾字串> "-b"引數備份目的檔案後,備份檔案的字尾會被加上一個備份字串。預設的備份字尾符串是符號"~"
    -u
--update      使用這項引數之後,只會在原始檔的修改時間(Modification Time)較目的檔案更新時,或是名稱相互對應的目的檔案並不存在,才複製檔案
 .
複製檔案,只有原始檔較目的檔案的修改時間新時,才複製檔案
    cp -u -v file1 file2

    .將檔案file1複製成檔案file2
    cp file1 file2

    .採用互動方式將檔案file1複製成檔案file2
    cp -i file1 file2

    .將檔案file1複製成file2,因為目的檔案已經存在,所以指定使用強制複製的模式
    cp -f file1 file2

    .將目錄dir1複製成目錄dir2
    cp -r dir1 dir2

    .同時將檔案file1、file2、file3與目錄dir1複製到dir2
   cp -r file1 file2 file3 dir1 dir2

    .複製時保留檔案屬性
    cp -p a.txt /tmp

    .複製時保留檔案的目錄結構
    cp   --parents  /var/tmp/a.txt  ./temp/

    .複製時產生備份檔案
    cp -b a.txt tmp/

    .指定備份檔案尾標   
    cp -b -S _bak a.txt /tmp

4、剪下檔案

mv  /path1/xx  /path2/yy  剪下path1路徑下的xx 剪下到 path2路徑下的yy, 如果path1與path2路徑相同,則將xx重新命名為yy;

5、檢視檔案

cat xx  適合檢視內容較少的檔案;

more

less

more 與less相同的地方是都可以用空格鍵向下翻頁,所不同的是less允許上下鍵向上瀏覽瀏覽,more 則不行;  

本文永久更新連結地址http://www.linuxidc.com/Linux/2015-11/124812.htm


IT145.com E-mail:sddin#qq.com