1. 程式人生 > 其它 >Linux筆記03: Linux常用命令_3.3檔案操作命令

Linux筆記03: Linux常用命令_3.3檔案操作命令

3.3 檔案操作命令

  3.3.1 stat命令

  ●命令名稱:stat。

  ●英文原意:display file or file system status。

  ●所在路徑:/usr/bin/stat。

  ●執行許可權:所有使用者。

  ●功能描述:顯示檔案或檔案系統的詳細資訊。

  (1)命令格式

[root@localhost ~]# stat [選項] 檔名或目錄名
 選項:
     -f:檢視檔案所在的檔案系統資訊(而不是檔案的資訊)

   (2)常見用法

  ①檢視檔案的詳細資訊

[root@localhost ~]# stat anaconda-ks.cfg
  File: ‘anaconda
-ks.cfg’ Size: 1649 Blocks: 8 IO Block: 4096 regular file Device: fd00h/64768d Inode: 16797762 Links: 1 Access: (0600/-rw-------) Uid: ( 0/ root) Gid: ( 0/ root) Context: system_u:object_r:admin_home_t:s0 Access: 2022-11-27 17:07:14.882951678 -0500 # 訪問時間 Modify: 2022-11-27
17:06:24.360006324 -0500 # 資料修改時間 Change: 2022-11-27 17:06:24.360006324 -0500 # 狀態修改時間 Birth: -

   stat可以檢視檔案詳細資訊,而且展示了檔案三個時間:訪問時間、資料修改時間、狀態修改時間。

  ②檢視檔案系統資訊

[root@localhost ~]# stat -f anaconda-ks.cfg
  File: "anaconda-ks.cfg"
    ID: fd0000000000 Namelen: 255     Type: xfs
Block size: 4096       Fundamental block size: 4096
Blocks: Total: 3273216 Free: 1989643 Available: 1989643 Inodes: Total: 6551552 Free: 6417040

   (3)三種時間的含義

  Linux中的每個檔案都有三個時間,分別是訪問時間(Access Time)、資料修改時間(Modify Time)和狀態修改時間(Change Time)。

  注意:在Linux中,檔案沒有建立時間。

  ①先檢視系統當前時間:

[root@localhost ~]# date
Sat Dec 10 20:59:02 EST 2022

   ②再建立一個mylog.log檔案,並檢視該檔案的三種時間:

[root@localhost ~]# touch mylog.log
[root@localhost ~]# stat mylog.log
省略部分內容……
Access: 2022-12-10 20:59:39.691757029 -0500
Modify: 2022-12-10 20:59:39.691757029 -0500
Change: 2022-12-10 20:59:39.691757029 -0500
 Birth: -

   可以看到,touch創建出的檔案三個時間都為系統當前時間。

  ③如果用cat命令讀取一下這個檔案,就會發現檔案的訪問時間(Access Time)變成了cat命令的執行時間,如下:

[root@localhost ~]# cat mylog.log
[root@localhost ~]# stat mylog.log
省略部分內容……
Access: 2022-12-10 21:03:35.151936060 -0500
Modify: 2022-12-10 20:59:39.691757029 -0500
Change: 2022-12-10 20:59:39.691757029 -0500
 Birth: -

   ④如果用echo命令向檔案中寫入資料,那麼檔案的資料修改時間(Modify Time)就會發生改變。檔案資料改變了,系統會認為檔案的狀態改變了,所以狀態修改時間(Change Time)也會隨之改變,如下:

[root@localhost ~]# echo [2022-12-10 20:59:39]建立檔案 > mylog.log
[root@localhost ~]# stat mylog.log
省略部分內容……
Access: 2022-12-10 21:03:35.151936060 -0500
Modify: 2022-12-10 21:12:16.149970237 -0500
Change: 2022-12-10 21:12:16.149970237 -0500
 Birth: -

   ⑤如果只修改檔案的狀態(比如改變檔案的所有者),而不修改檔案的資料,則只會更改狀態修改時間(Change Time),如下:

[root@localhost ~]# chown LaytonWang mylog.log
[root@localhost ~]# stat mylog.log
省略部分內容……
Access: 2022-12-10 21:03:35.151936060 -0500
Modify: 2022-12-10 21:12:16.149970237 -0500
Change: 2022-12-10 21:19:23.698742725 -0500
 Birth: -

   ⑥而如果用touch命令再次觸控這個檔案,則這個檔案的三個時間都會改變,如下:

[root@localhost ~]# touch mylog.log
[root@localhost ~]# stat mylog.log
省略部分內容……
Access: 2022-12-10 21:21:08.859162533 -0500
Modify: 2022-12-10 21:21:08.859162533 -0500
Change: 2022-12-10 21:21:08.859162533 -0500
 Birth: -

  

  3.3.2 touch命令

  ●命令名稱:touch。

  ●英文原意:change file timestamps。

  ●所在路徑:/usr/bin/touch。

  ●執行許可權:所有使用者。

  ●功能描述:修改檔案的時間戳。

  (1)命令格式

    [root@localhost ~]# touch [選項] 檔名或目錄名

    選項:

        -a:只修改檔案的訪問時間(Access Time)

        -c:如果檔案不存在,則不建立新檔案

        -d:把檔案的時間改為指定的時間

        -m:只修改檔案的資料修改時間(Modify Time)

  (2)常見用法

[root@localhost ~]# touch mylog.log

   touch的意思是觸控,如果檔案不存在,則會建立空檔案;如果檔案已經存在,則會修改檔案的時間戳,檔案的三個時間(訪問時間、資料修改時間、狀態修改時間)都會被修改。

  3.3.3 cat命令

  ●命令名稱:cat。

  ●英文原意:concatenate files and print on the standard output。

  ●所在路徑:/usr/bin/cat。

  ●執行許可權:所有使用者。

  ●功能描述:合併檔案並列印輸出到標準輸出。

  (1)命令格式

[root@localhost ~]# cat [選項] 檔名
選項:
  -A:相當於-vET選項的整合,用於列出所有隱藏符號
  -E:列出每行結尾的回車符$
  -n:顯示行號
  -T:把Tab鍵用^I顯示出來
  -v:列出特殊字元

   (2)常見用法

  ①直接檢視檔案的內容:

[root@localhost ~]# cat anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
省略部分內容……

   ②使用“-n”選項,則會顯示行號:

[root@localhost ~]# cat -n anaconda-ks.cfg
     1   #version=DEVEL
     2   # System authorization information
     3   auth --enableshadow --passalgo=sha512
     4   # Use CDROM installation media
     省略部分內容……

   ③使用“-A”選項,則相當於使用了“-vET”選項,可以檢視文字中的所有隱藏符號,包括回車符($)、Tab鍵(^I)等:

[root@localhost ~]# cat -A anaconda-ks.cfg
#version=DEVEL$
# System authorization information$
auth --enableshadow --passalgo=sha512$
# Use CDROM installation media$
省略部分內容……

    cat命令用於檢視檔案內容,不論檔案內容有多少,都會一次性顯示。如果檔案非常大,那麼檔案開頭的內容就看不到了。不過Linux可以使用“pgup/pgdn”上下翻頁,但是這種翻頁是有極限的,如果檔案足夠長,那麼還是無法看全檔案的內容。所以cat命令適合檢視不太大的檔案。

  3.3.4 more命令

  ●命令名稱:more。

  ●英文原意:file perusal filter for crt viewing。

  ●所在路徑:/usr/bin/more。

  ●執行許可權:所有使用者。

  ●功能描述:分屏顯示檔案內容。

  (1)命令格式

    [root@localhost ~]# more [選項] 檔名

  more命令一般不用選項,命令會開啟一個互動介面,可以識別一些互動命令。

  常用的互動命令如下:

  ●空格鍵:向下翻頁。

  ●b:向上翻頁。

  ●回車鍵:向下滾動一行。

  ●/字串:搜尋指定的字串。

  ●q:退出。

  (2)常見用法

[root@localhost ~]# more anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
省略部分內容……
--More--(40%)

   more命令可以分屏顯示檔案內容,如果檔案過大,可以使用more命令替代cat命令。

  3.3.5 less命令

  ●命令名稱:less。

  ●英文原意:opposite of more。

  ●所在路徑:/usr/bin/less。

  ●執行許可權:所有使用者。

  ●功能描述:分行顯示檔案內容。

  (1)命令格式

[root@localhost ~]# less 檔名

   less命令可以使用“方向鍵”上下翻行;使用“pgup/pgdn”上下翻頁。

  (2)常見用法

[root@localhost ~]# less anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
省略部分內容……
:

  3.3.6 head命令

  ●命令名稱:head。

  ●英文原意:output the first part of files。

  ●所在路徑:/usr/bin/head。

  ●執行許可權:所有使用者。

  ●功能描述:顯示檔案開頭的內容。

  (1)命令格式

[root@localhost ~]# head [選項] 檔名
選項:
  -n:從檔案頭開始,顯示指定行數
  -v:顯示檔名

   (2)常見用法

  ①預設顯示檔案開頭10行的內容:

[root@localhost ~]# head anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom
# Use graphical install
graphical
# Run the Setup Agent on first boot
firstboot --enable
ignoredisk --only-use=sda

   ②顯示檔案開頭指定行數的內容:

[root@localhost ~]# head -n 5 anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom

  

  3.3.7 tail命令

  ●命令名稱:tail。

  ●英文原意:output the last part of files。

  ●所在路徑:/usr/bin/tail。

  ●執行許可權:所有使用者。

  ●功能描述:顯示檔案結尾的內容。

  (1)命令格式

[root@localhost ~]# tail [選項] 檔名
選項:
  -n:從檔案結尾開始,顯示指定行數
  -f:監聽檔案的新增內容

   (2)常見用法

  ①預設顯示檔案結尾10行的內容:

[root@localhost ~]# tail anaconda-ks.cfg

%addon com_redhat_kdump --enable --reserve-mb='auto'

%end
 
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

   ②顯示檔案結尾指定行數的內容:

[root@localhost ~]# tail -n 5 anaconda-ks.cfg
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

   ③監聽檔案的新增內容:-f選項

[root@localhost ~]# tail -f -n 5 anaconda-ks.cfg
%anaconda
pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
pwpolicy user --minlen=6 --minquality=1 --notstrict --nochanges --emptyok
pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

   使用-f選項,游標不會退出命令,而會一直監聽在檔案的結尾處,等待顯示新增內容。這時如果向檔案中追加一些資料(需開啟一個新終端),會實時顯示在檔案尾。

  小結:

  本節介紹檔案操作相關命令。stat檢視檔案詳細資訊,包括檔案的三個時間;touch是觸控一個檔案,如果檔案不存在,則會建立空檔案,否則會修改檔案的三個時間戳;cat適合檢視不太大的檔案;對於大檔案,more可以分屏顯示檔案內容,less可以分行顯示檔案內容;head顯示檔案開頭的內容;tail顯示檔案結尾的內容,其-f選項可以實時監聽檔案尾的新增內容。