【Linux命令】文件目錄管理命令7個(touch、mkdir、cp、mv、rm、dd、file)


目錄

一、touch命令

  touch命令用於創建或設置文件的時間(touch命令的-a,-m,-t,-d參數可以分別修改atime、ctime、mtime),這里可以參考我上篇文章“文本文件編輯命令”第八個命令的補充部分有touch修改時間的介紹https://www.cnblogs.com/HeiDi-BoKe/p/11757961.html#stat

  touch命令很簡單,比較復雜的是設置文件內容的修改時間(mtime),文件權限或屬性的更改時間(ctime)與文件的讀取時間(atime)。

PS:創建文件相當於是修改文件的屬性,時間以當前時間為准。文件不存在時創建空白文件;文件存在時,並不會覆蓋文件,也不會將文件中已存在的內容清空。

格式:

touch [選項] 文件名 touch [-acfm][-d<日期時間>][-r<參考文件或目錄>] [-t<日期時間>][--help][--version][文件…]

參數:

-a或--time=atime或--time=access或--time=use  改變檔案的讀取時間記錄。 -m或--time=mtime或--time=modify 改變檔案的修改時間記錄。 -c,--no-create 假如目的檔案不存在,不會建立新的檔案。 -f 不使用,是為了與其他 unix 系統的相容性而保留。 -r, --reference=FILE 使用參考檔的時間記錄可以設置與參考文件的時間一致,與 --file 的效果一樣。 -d, --date=STRING 設定時間與日期,可以使用各種不同的格式。(同時修改atime和mtime) -t STAMP  設定檔案的時間記錄,格式與 date 指令相同。

PS:-t參數:[[CC]YY]MMDDhhmm[.ss] 。CC為年數中的前兩位,即”世紀數”;YY為年數的后兩位,即某世紀中的年數.如果不給出CC的值,則touch將把年數CCYY限定在1969--2068之內.MM為月數,DD為天,hh 為小時數(幾點),mm為分鍾數,SS為秒數.此處秒的設定范圍是0--61,這樣可以處理閏秒.這些數字組成的時間是環境變量TZ指定的時區中的一個時間。由於系統的限制,早於1970年1月1日的時間是錯誤的。

實例:

1)如果文件不存在則不創建文件


[root@VM_0_10_centos shellScript]# touch -c hello


 2)按照file1.txt文件的時間,將file2.txt的時間更新為file1.txt文件的時間一致。



3)設置文件的時間戳


[root@VM_0_10_centos shellScript]# touch -t 201910310928.10 file1.txt
[root@VM_0_10_centos shellScript]# ll file1.txt
-rw-r--r-- 1 root root 54 Oct 31 09:28 file1.txt


 4)將時間修改為指定時間(和上面的案例一樣的效果)

  首先我們先查看下文件信息,然后通過echo修改文件,最后用touch -d指定為原來的時間,這樣就能造成文件未被改動的假象(一般黑客很喜歡這樣操作)


二、mkdir命令

  mkdir命令用於創建空白目錄。與-p參數連用,可以遞歸創建目錄,如果父目錄不存在則先創建父目錄在創建子目錄,如果存在,則不創建父目錄,直接創建子目錄。

PS:創建已存在的目錄會報錯,加上-p可以解決

格式:

Usage: mkdir [OPTION]... DIRECTORY...

選項:

-m, --mode=MODE   為目錄指定訪問權限,與chmod類似。 不是a=rwx - umask -p, --parents 如果目錄已經存在,則不會有錯誤提示。若父目錄不存在,將會創建父目錄。該選項常用於創建級聯目錄。 -v, --verbose 為每個目錄顯示提示信息。
-Z set SELinux security context of each created directory to the default type --context[=CTX] like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX

實例:

1)創建權限為777的的目錄(目錄默認權限為777-umask)


[root@VM_0_10_centos shellScript]# mkdir -m 777 dir1

[root@VM_0_10_centos shellScript]# ll -d dir1/
drwxrwxrwx 2 root root 4096 Oct 31 10:16 dir1/


 PS:為目錄指定權限,指定的權限為mode-umask。例如,mode=rx,umask=2,則最終權限為555-2=554,即rw-rw-r--。

2)創建目錄時顯示輸出信息


[root@VM_0_10_centos shellScript]# mkdir -v dir2
mkdir: created directory ‘dir2’


 3)一條命令創建多個目錄(一個項目結構)


[root@VM_0_10_centos shellScript]# mkdir -vp scf/{bin/,doc/{info,prouct},lib/,logs/{info,product},service/deploy/{info,produ
ct}}

 PS:多個目錄用大括號"{}"括起來,並用逗號分隔。逗號前后不能有空白。

三、cp命令

  cp命令用於復制文件或目錄。

格式:

Usage: cp [OPTION]... [-T] SOURCE DEST or: cp [OPTION]... SOURCE... DIRECTORY or: cp [OPTION]... -t DIRECTORY SOURCE...

PS:

  • 源文件:指定源文件列表。默認情況下,cp命令不能復制目錄,如果要復制目錄,則必須使用-R/r選項
  • 目標文件:指定目標文件。當“源文件”為多個文件時,要求“目標文件”為指定的目錄。
  • 所有目標文件目錄必須存在,因為cp命令沒有創建目錄的權限

復制的三種情況:

  1)如果目標文件是目錄,會把源文件復制到該目錄中;

  2)如果目標文件也是普通文件,則會詢問是否要覆蓋它;

  3)如果目標文件不存在,則正常執行復制操作;

選項:

-a:此參數的效果和同時指定"-dpR"參數相同; -d:當復制符號連接時,把目標文件或目錄也建立為符號連接,並指向與源文件或目錄連接的原始文件或目錄;(對硬鏈接無效) -R/r:遞歸處理,將指定目錄下的所有文件與子目錄一並處理; -f:強行復制文件或目錄,不論目標文件或目錄是否已存在; -i:覆蓋既有文件之前先詢問用戶; -l:對源文件建立硬連接,而非復制文件; -s:對源文件建立符號連接,而非復制文件; -p:保留源文件或目錄的屬性; -u:使用這項參數后只會在源文件的更改時間較目標文件更新時或是名稱相互對應的目標文件並不存在時,才復制文件; -S:在備份文件時,用指定的后綴“SUFFIX”代替文件的默認后綴; -b:覆蓋已存在的文件目標前將目標文件備份; -v:詳細顯示命令執行的操作。

PS:“-l” 和 “-s” 選項

如果使用 “-l” 選項,則目標文件會被建立為源文件的硬鏈接;如果使用了 “-s” 選項,則目標文件會被建立為源文件的軟鏈接。

這兩個選項和 “-d” 選項不同,“d” 選項要求源文件必須是軟鏈接,目標文件才會復制為軟鏈接;而 “-l” 和 “-s” 選項的源文件只需是普通文件,目標文件就可以直接復制為硬鏈接和軟鏈接。

 實例:

1)復制文件的同時並重命名文件(將score文件復制到當前目錄並將名稱改為copyScore.txt)


[root@VM_0_10_centos shellScript]# ll score.txt
-rw-r--r-- 1 root root 110 Oct 21 14:53 score.txt
[root@VM_0_10_centos shellScript]# cp score.txt copyScore.txt

[root@VM_0_10_centos shellScript]# ll *core.txt
-rw-r--r-- 1 root root 110 Nov 1 11:08 copyScore.txt
-rw-r--r-- 1 root root 110 Oct 21 14:53 score.txt


 2)交互式的將當前目錄下以sh結尾的文件復制到/tmp/sh目錄下(首先sh目錄要存在)


 [root@VM_0_10_centos shellScript]# mkdir -p /tmp/sh


 3)復制時保留文件屬性(在進行備份數據時很重要,因為cp復制是以當前時間和當前用戶為為屬性) 


 [root@VM_0_10_centos shellScript]# cp -p today.txt copy.txt


 

四、mv命令

  mv命令用於剪切文件或文件的重命名。剪切操作不同於復制操作,他會把源文件刪除掉,只保留剪切后的文件。如果在同一目錄中對一個文件進行剪切操作,其實就是對文件進行重命名。

格式:

Usage: mv [OPTION]... [-T] SOURCE DEST or: mv [OPTION]... SOURCE... DIRECTORY or: mv [OPTION]... -t DIRECTORY SOURCE... Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

選項:

-i: 若指定目錄已有同名文件,則先詢問是否覆蓋舊文件; -f: 在mv操作要覆蓋某已有的目標文件時不給任何指示; -b :若需覆蓋文件,則覆蓋前先行備份。 -u :若目標文件已經存在,且 source 比較新,才會更新(update) -t  : --target-directory=DIRECTORY move all SOURCE arguments into DIRECTORY,即指定mv的目標目錄,該選項適用於移動多個源文件到一個目錄的情況,此時目標目錄在前,源文件在后。

實例:

1)將info目錄放入logs目錄中。注意,如果logs目錄不存在,則該命令將info改名為logs。


 mv info/ logs


 2)將多個文件移動到指定目錄下


 

 PS:可以使用正則匹配,也可以將要剪切的文件一個一個寫上,空格隔開即可


 3)將文件file1復制到指定目錄,如果指定目錄下已經存在file1,則詢問是否覆蓋


 PS:如果不想有提示,加-f參數,強制覆蓋(該操作比較危險,使用該參數前先確認是否要強制覆蓋)

五、rm命令

  rm命令用於刪除文件或目錄。默認為刪除文件,如果需要刪除目錄,加上-r參數。每次刪除前會詢問是否需要刪除。想不出現這些確認信息,加-f參數,這里,我不介意大家加上-f參數哈。我自己也吃過一次虧,也是使用-rf參數,直接將服務器生產環境上/usr/目錄下的文件全部刪除了,導致命令全部使用不了,ssh,scp命令也使用不了,后面是聯系的服務器供應商重裝系統解決的。真的是有驚無險。

格式:

rm [選項] 文件

選項:

-i 刪除前逐一詢問確認(交互式)。 -f 即使原檔案屬性設為唯讀,亦直接刪除,無需逐一確認。 -r, -R, --recursive 將目錄及以下之檔案亦逐一刪除。
-I 刪除文件超過3個或遞歸刪除時,給與交互式一次(僅提示一次確認)
--no-preserve-root 不特殊處理根目錄(慎用)

PS:-I(大寫I)或 --interactive=once 選項(表示開啟交互一次),則 rm 命令會提示用戶是否繼續整個刪除操作,如果用戶回應不是確認(即沒有回復 y),則整個命令立刻終止。

實例:

1)刪除多個文件,中間使用空格隔開即可。

2)刪除不存在的文件,可以使用-f參數強制,忽略錯誤,如果不使用會報錯“沒有這個目錄”

3)刪除空目錄可以使用-d參數

六、dd命令

  dd命令用於按照指定大小和個數的數據庫來復制或轉換文件。/dev/zero是一個設備文件,該文件不會占用系統存儲空間,但卻能提供無窮無盡的數據。可以將它作為dd的輸入文件,來生成指定大小的文件。

格式:

Usage: dd [OPERAND]...
  or:  dd OPTION

選項:

if 輸入的文件名 of 輸出的文件名 bs 同時設置讀入/輸出的每個“塊”的大小 ibs=bytes:一次讀入bytes個字節,即指定一個塊大小為bytes個字節。 obs=bytes:一次輸出bytes個字節,即指定一個塊大小為bytes個字節。 cbs=bytes:一次轉換bytes個字節,即指定轉換緩沖區大小。 count 設置要復制“塊”的個數 skip=blocks:從輸入文件開頭跳過blocks個塊后再開始復制。 seek=blocks:從輸出文件開頭跳過blocks個塊后再開始復制。 注意:通常只用當輸出文件是磁盤或磁帶時才有效,即備份到磁盤或磁帶時才有效。 conv=conversion:用指定的參數轉換文件。 ascii:轉換ebcdic為ascii ebcdic:轉換ascii為ebcdic ibm:轉換ascii為alternate ebcdic block:把每一行轉換為長度為cbs,不足部分用空格填充 unblock:使每一行的長度都為cbs,不足部分用空格填充 lcase:把大寫字符轉換為小寫字符 ucase:把小寫字符轉換為大寫字符 swab:交換輸入的每對字節 noerror:出錯時不停止 notrunc:不截短輸出文件 sync:將每個輸入塊填充到ibs個字節,不足部分用空(NUL)字符補齊。

實例:

1)使用dd命令,從社保文件/devzero文件中取出一個大小為560MB的數據塊



 2)如果想從光驅設備中的光盤制作成iso鏡像文件,可以使用dd命令來壓制出光盤鏡像文件,將它變成一個可立即使用的iso鏡像。



PS:bs相當於勺子大小,count相當於勺子盛飯的次數;勺子越大,勺子盛飯次數就越少。bs和count都是用於指定容量的大小,只要滿足需求,可以任意搭配。 

3)將本地/dev/vda1整盤備份到/dev/vda1_bak(在操作的時候考慮下自己服務器或虛擬機的磁盤大小)


 [root@VM_0_10_centos shellScript]# dd if=/dev/vda1 of=/dev/vda1_bak


 PS:這里你可以在運行這條命令之前查看下磁盤容量,運行完之后再查看下磁盤容量的變化

4)從備份文件恢復到指定盤 


dd if=/dev/vda1_bak of=/dev/vda1 


 5)備份today.txt全盤數據,並利用gzip工具進行壓縮,保存到指定路徑(dd好像不能備份目錄)



 6)將備份的文件恢復到指定的文件或數據盤(-d為解壓,-c壓縮)



7)備份與恢復MBR(磁盤開始的512個字節大小的MBR信息到指定文件)

 備份:dd if=/dev/hda of=/root/image count=1 bs=512

count=1指僅拷貝一個塊;bs=512指塊大小為512個字節。

恢復:dd if=/root/image of=/dev/had

8)備份軟盤


 


9)拷貝內存內容到硬盤


PS:這里我查了一些資料,但是沒有解決掉這個問題,說是內核中限制了復制的容量。


 10)拷貝光盤內容到指定文件夾,並保存為cd.iso文件 


dd if=/dev/cdrom(hdc) of=/root/cd.iso


11)增加swap分區文件的大小 


第一步:創建一個大小為256M的文件:
1
dd  if = /dev/zero  of= /swapfile  bs=1024 count=262144
第二步:把這個文件變成swap文件(設置交換分區文件):
1
mkswap  /swapfile
第三步:啟用這個swap文件(立即啟用交換分區內容):
1
swapon  /swapfile
PS:這里會出現 insecure permissions 0777, 0600 suggested. 意思是建議把swap設置成644或600權限。 
第四步:編輯/etc/fstab文件,使在每次開機時自動加載swap文件:
1
swapfile    swap    swap    default   0 0

 參考網址:https://www.cnblogs.com/misswangxing/p/10911969.html

       https://blog.csdn.net/zhangxiaoyang0/article/details/82501209

12)銷毀磁盤數據


dd if=/dev/urandom of=/dev/hda1


 PS:利用隨機的數據填充硬盤,在某些必要的場合可以用來銷毀數據。

13)測試硬盤的讀寫速度



PS:通過以上兩個命令輸出的命令執行時間,可以計算出硬盤的讀、寫速度。

14)確定硬盤的最佳塊大小:


 通過比較以上命令輸出中所顯示的命令執行時間,即可確定系統最佳的塊大小。


 15)修復硬盤 


dd if=/dev/sda of=/dev/sda dd if=/dev/hda of=/dev/hda


 PS:當硬盤較長時間(一年以上)放置不使用后,磁盤上會產生magnetic flux point,當磁頭讀到這些區域時會遇到困難,並可能導致I/O錯誤。當這種情況影響到硬盤的第一個扇區時,可能導致硬盤報廢。上邊的命令有可能使這些數據起死回生。並且這個過程是安全、高效的。

16)利用netcat遠程備份(沒搞懂)

先安裝nc:# yum -y install nc

dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234

在源主機上執行此命令備份/dev/hda:netcat -l -p 1234 | dd of=/dev/hdc bs=16065b

在目的主機上執行此命令來接收數據並寫入/dev/hdc

netcat -l -p 1234 | bzip2 > partition.img

netcat -l -p 1234 | gzip > partition.img
PS:以上兩條指令是目的主機指令的變化分別采用bzip2、gzip對數據進行壓縮,並將備份文件保存在當前目錄。
將一個很大的視頻文件中的第i個字節的值改成0x41(也就是大寫字母A的ASCII值)
echo A | dd of=bigfile seek=$i bs=1 count=1 conv=notrunc

七、file命令

  file命令用於查看文件的類型。

常見文件類型:

文件類型 描述
字符設備 c 所有輸入輸出設備(鍵盤、鼠標、顯示器、打印機)
塊設備 b 所有存儲設備(軟盤,光盤,磁盤,U盤,光驅)
軟連接文件 l 類似於Windows下的快捷鍵
目錄文件 d 相當於文件夾
普通文件 f或- 類似Windows下記事本,word等文件
管道文件 p 程序或進程之間的通訊的一種方式
套接字文件 s 程序或進程之間的通訊的一種方式

 

 

 

 

 

 

 

 

 

 

 

 

格式:

file [參數] 文件

參數:

-b  列出辨識結果時,不顯示文件名稱。 -c  詳細顯示指令執行過程,便於排錯或分析程序執行的情形。 -f<名稱文件>  指定名稱文件,其內容有一個或多個文件名稱時,讓file依序辨識這些文件,格式為每列一個文件名稱。 -L  直接顯示符號連接所指向的文件的類別。 -m<魔法數字文件>  指定魔法數字文件。 -v  顯示版本信息。 -z  嘗試去解讀壓縮文件的內容。

實例:

1)查看文件類型

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM