2021-05-12 14:32:11
Linux學習筆記-- 命令列操作檔案
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 命令。只需鍵入:
- $ touch file_name
File_1.txt原來的時間戳是 12:42。在我們使用 touch 命令後,它改變為了 17:08。由此看出,預設情況下,touch 會將檔案的時間戳改為當前時間。
只改變存取時間
正如我們之前提到的,每個檔案都附有存取時間和修改時間。上面的時間戳是 17:08。我們可以看更多的細節。
我們發現存取access時間和修改change時間的值是相同的都是 17:08:35 ,還有它們屬於同一時區 GMT +7。
如果現在我們要只改變存取時間,我們需要使用-a選項。
- $ touch –a file_1.txt
如你所見,存取時間變為了 17:51:37 ,但是修改時間仍為17:08:35。[譯註:原文為 Change time(狀態改變時間)應是作者筆誤]
只改變修改時間(modify,change)
我們可以使用-m選項來實現。現在我們用file_2.txt作個範例。
- $ 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
假如我們想要將存取時間和修改時間改為2014年1月12日 09:58:27。我們可以用下列命令來完成:
- $ 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 的檔案,它的相關屬性在下面的截圖中展示了。
現在我們要將日期2014年1月14日改為2013年12月20日。可以使用下列命令:
- $ touch –d '10-december-2013' file_3.txt
不出意料,存取時間和修改時間的日期已經改為了2013年12月10日。
改變時區
如果我們想改變指定GMT的時間,我們也可以使用-d選項。先讓file_3.txt 移回當前時間。
- $ touch file_3.txt
不難發現 file_3.txt 的時區為 GMT +0700。要改為 GMT3 時區,我們只需要鍵入如下命令:
- $ touch –的GMT3 file_3.txt
好的,現在時間已經改為了 10:00:00 AM。
結合引數下使用-d選項
還可以用很酷的方式使用-d選項。請觀察下面的圖片。
我們可以將單詞 next Sunday 和 GMT 3合成一個值,而 touch 命令仍然能識別它。日期已經改為了2014年1月21日,而當前的日期為2014年1月14日。
還有另一個-d選項的範例。首先,我們要將file3_3.txt重置到當前日期和時間。
- $ touch file_3.txt 然後我們嘗試這個命令:
- $ touch –d '1 year ago 13:43:07' file_3.txt
太震撼了,Touch 甚至能識別單詞'1 year ago'。現在的日期以及時間已經改為了2013年1月14日,13:43:07。
[root@linuxidc home]# touch –d '4 month ago 13:43:08' uuu
把uuu 這個檔案的時間修改成4個月前的13:43:08
建立一個空檔案
當你執行 touch 命令目標檔案不存在時,touch 會建立一個同名的空檔案。
- $ touch file_10.txt
同時建立多個檔案
你可以用空格將目標檔案分割開來,以此來建立多個檔案。
- $ touch doc_10.txt doc_20.txt doc_30.txt
總結
如果你要處理關於檔案或目錄的時間戳問題,那麼 Touch 會對你很有用的。一如既往得你也可以鍵入man touch或touch --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
相關文章