Ⅰ linux/unix如何獲取一個文件的創建時間
確切的說不存在創建時間
若文件從創建後不曾修改過則可認為創建時間=修改時間
若文件創建後狀態也不曾改變過則可認為創建時間=改變時間
若文件創建後不曾被讀取過則可認為創建時間=訪問時間
但是,上述情況基本上是不可能的,也就是說幾乎不可能獲取到文件的創建時間。
可以通過stat命令查看文件的狀態,其中
訪問時間(accesstime):讀取一次文件的內容,該時間便會更新。比如對這個文件使用less命令或者more命令。(ls、stat這樣的命令不會修改文件訪問時間)
修改時間(modifytime):對文件內容修改一次便會更新該時間。例如使用vim等工具更改了文件內容並保存後,文件修改時間發生變化。通過ls –l列出的時間便是這個時間。要想看到文件訪問時間可使用ls –ul命令。
改變時間(changetime):更改文件的屬性便會更新該時間,比如使用chmod命令更改文件屬性,或者執行其他命令時隱式的附帶更改了文件的屬性若文件大小等。
Ⅱ Linux中如何查看文件的最初創建時間
與文件相關的幾個時間:
1、訪問時間,讀一次這個文件的內容,這個時間就會更新。比如對這個文件使用more命令。ls、stat命令都不會修改文件的訪問時間。
2、修改時間,對文件內容修改一次,這個時間就會更新。比如:vi後保存文件。ls -l列出的時間就是這個時間。
3、狀態改變時間。通過chmod命令更改一次文件屬性,這個時間就會更新。查看文件的詳細的狀態、准確的修改時間等,可以通過stat命令 文件名。
在Linux中,沒有文件創建時間的概念。只有文件的訪問時間、修改時間、狀態改變時間。也就是說不能知道文件的創建時間。但如果文件創建後就沒有修改過,修改時間=創建時間;如果文件創建後,狀態就沒有改變過,那麼狀態改變時間=創建時間;如果文件創建後,沒有被讀取過,那麼訪問時間=創建時間,這個基本不太可能。
Ⅲ Linux 從 0 到 1(一) - 終端簡介,文件與目錄以及相關操作,常用命令
模式:
當打開終端,第一行所見的就叫命令行提示符。我的是這樣的:
命令行提示符,顧名思義就是提示在其後面輸入命令。在你輸入新的一行命令前,這個命令提示符都會出現。分別解析一下上邊代表什麼意思:
oscar 這是當前用戶的名字。Linux是一個多用戶的操作系統,Windows也可以。不過Linux的多用戶管理更方便。我們一般建議每個使用Linux系統的用戶都創建一個屬於自己的賬戶,便於隱私管理。
@ 這個符號我們應該不陌生,我們的電子郵件一般都是 [email protected] 這樣的不是嗎。這個@就表示英語里的at,是「在...裡面,落戶在...的,在其中」的意思。@前面是用戶名,後面是所在的域。
oscar-laptop 這是當前電腦/操作系統的名字。上面說了在@後面的是一個域,所以 oscar@oscar-laptop 就表示oscar-laptop這台電腦的oscar這個用戶。oscar-laptop這個名稱在安裝此Linux系統時可以任意指定。
: 這是分隔符,沒有什麼特別的涵義。
~ 這是當前所在目錄的名字,會隨著用戶進入不同目錄而改變。~表示當前用戶的家目錄,有點類似Windows系統的「我的文檔」這個目錄。
$ 指示你所具有的許可權的字元。在Linux系統中有兩種可能:
因此, oscar@oscar-laptop:~$ 的意思就是:
你目前是以oscar這個用戶登錄;你的電腦名稱為oscar-laptop;你目前位於 ~ 目錄下,就是你的用戶家目錄。你是普通用戶,擁有有限的許可權。
參數里可以包含多個參數,由空格隔開,也可以包含數字,字母,等等。可以說,參數沒有固定的格式,但是一般來說還是遵循一定的規范的。
如果我們要一次加好幾個短參數,可以用空格隔開,例如:
多個短參數也可以合並在一起,例如上面的命令等價於:
請注意:參數的字母的大小寫是有區別的,大寫的T和小寫的t通常表示不同意思。
如果有多個長參數,是不能像多個短參數那樣合並寫的。而是只能以空格隔開,例如:
當然我們也可以組合使用短參數和長參數,例如:
有時候,同一個意義的參數有短參數和長參數兩種形式,效果是一樣的,可以任選哪一種。
有一些參數你還需要給它賦一個值才行。而且短參數和長參數的賦值的方式不盡相同。
例如,短參數賦值,通常是這樣的:
表示把10賦值給p參數。
如果是長參數,則一般是這樣賦值:
長參數的方式更加容易理解,但是不如短參數那麼簡潔。
正如我們說過的,參數的形式沒有絕對的准則。我們上面給出的規則是一般的,有些命令的參數格式可能是我們沒怎麼見過的。
有些參數就不一樣,而且取決於命令。例如對於 ls 這個命令,假如後面帶了一個參數,這個參數是一個目錄的路徑名的話,那麼就會列出此目錄下的文件。
兩種類型的文件
簡單起見,我們把Linux下的文件分為兩大類:
在一個文件系統中,我們總有一個被稱為根目錄的東西,這個根目錄里包含了所有其他目錄和文件。Linux中有且只有一個根目錄,就是
是的,就是用一個斜杠表示。沒有比根目錄再高一階的目錄了,因為沒有目錄包含根目錄,根目錄就是Linux最頂層的目錄。
Linux系統安裝後,包含了很多的文件和目錄(雖然其實都是文件),我們很容易迷失在「茫茫文海」中。
當然我們不可能一下子列出Linux中的所有文件,那不現實。但是我們可以向你展示如何在Linux的目錄樹中來回穿梭,你可以知道此刻你位於哪個目錄下。就好比能看懂Linux這個很大的「地圖」。
pwd 是英語Print Working Directory的縮寫,表示「列印當前工作目錄」。
which 命令:獲取命令的可執行文件的位置,which命令用於顯示一個命令的對應的可執行程序的位置。可能聽起來有點拗口。
在Linux下,每一條命令其實對應了一個可執行程序。我們在終端中輸入命令,再按回車的時候,其實就是執行了對應的那個程序。比如說,pwd命令對應的pwd程序就是存在於Linux中的。
which命令接受一個參數,也就是你想要知道其可執行程序位於哪裡的那個命令。
我們來測試一下,就拿pwd命令來測試好了:
得到:
因此,pwd命令對應的pwd這個可執行程序位於/bin目錄中。
我們也可以注意到Linux中的可執行程序和Windows中不太一樣,在Windows中可執行程序一般以.exe結尾,而Linux中一般是沒有後綴名的。
Linux中的可執行程序也不是都位於相同目錄的。我們可以來測試一下which命令本身對應的可執行程序位於哪裡:
我們可以看到,which命令對應的可執行程序which並不位於/bin中,而是在/usr/bin中。
Ubuntu的終端默認是有顏色標注的,一般來說:
如果在你的終端里沒有標明顏色,那麼你可以加上參數 --color=auto 來開啟顏色標注。如下:
如果你不需要顏色標注,那麼可以用 --color=none 來關閉顏色標注。如下:
當然,為了避免每次都輸入這么一串額外的參數,其實我們可以在一個配置文件里修改,使得永久顯示顏色或不顯示顏色。
在Linux,以點( . )開頭的文件是隱藏文件,不過這里不包括開頭的兩個 . 和 .. ,這兩個的含義如下:
- . (一個點)表示當前目錄。在當前情況下,就是 /home/oscar 。
- .. (兩個點)表示上一級目錄。因為當前目錄是/home/oscar,所以上一級目錄就是 /home 。
我們有一個大寫的參數 -A,它的作用和小寫的-a幾乎一樣,唯一不同就是-A不列出 . 和 .. 這兩個文件。
-l 這個參數算是ls命令最常用的了。加上-l參數使得ls命令列出一個顯示文件和目錄的詳細信息的列表。
當我們僅用ls -l時,列出的文件詳細信息中,文件的大小是以位元組為單位的。有時這不是太直觀。我們可以再加一個參數-h,h是humain readable的縮寫,表示「適合人類閱讀的」。所以我們的命令變成了:
t是time的縮寫。
命令也是很有用的,因為它可以讓我們知道文件和目錄所佔的空間大小。
雖然ls -l命令也可以顯示文件和目錄的大小,但是命令統計的才是真正的文件大小。命令會深入遍歷每個目錄的子目錄,把所有文件的大小都做一個統計。
是英語disk usage的縮寫,表示「磁碟使用/佔用」。
我們的命令也可以使用參數。
cat命令和less命令:顯示文件內容,這兩個命令只能顯示文件內容,並不能對文件內容進行修改。
一次性顯示文件的所有內容,如果你想要在顯示的文件內容上加上行號,那麼你可以加上 -n 這個參數。
分頁顯示文件內容
head命令和tail命令:顯示文件的開頭和結尾。
顯示文件開頭,默認情況下,head會顯示文件的頭10行。我們也可以指定顯示的行數,用 -n 這個參數:
就會顯示文件的頭5行。
顯示文件結尾。默認情況下,tail會顯示文件的尾10行。
我們也可以指定顯示的行數,用 -n 這個參數:
就會顯示文件的尾5行。
tail命令還可以配合 -f 參數來實時追蹤文件的更新:
這樣,就會檢查文件是否有追加內容,如果有,就顯示新增內容。
默認地,tail -f會每過1秒檢查一下文件是否有新內容。你也可以指定間隔檢查的秒數,用 -s 參數:
可以用快捷鍵 Ctrl + c 來終止tail -f 命令。
touch命令和mkdir命令:創建文件和目錄
創建一個空白文件。事實上,Linux沒有一個命令是專門用來創建一個空白文件的。touch命令其實一開始的設計初衷是修改文件的時間戳,就是可以修改文件的創建時間或修改時間,讓電腦以為文件是在那個時候被修改或創建的。但是touch命令如果後面跟著的文件名是不存在的,那麼它就會新建一個。
事實上,我們可以用touch命令同時創建多個文件:
如果我所要創建的文件的名字里有空格怎麼辦呢?
很簡單,加上雙引號:
創建一個目錄。
mkdir也可以同時創建好幾個目錄:
如果我所要創建的目錄的名字里有空格怎麼辦呢?
很簡單,加上雙引號:
我們還可以用 -p 參數來遞歸創建目錄結構。
比如:
cp命令和mv命令:拷貝文件和移動文件
拷貝文件或目錄
cp是英語的縮寫,表示「拷貝」。所以,顧名思義,此命令用於拷貝。cp命令不僅可以拷貝單個文件,還可以拷貝多個文件,也可以拷貝目錄。
復制文件到另一個目錄只需要把cp命令的第二個參數換成目錄名。
拷貝目錄
要拷貝目錄,只要在cp命令之後加上-R參數(注意是大寫的R)。拷貝的時候,目錄中的所有內容(子目錄和文件)都會被拷貝。
使用通配符*
*號(星號)是很常用的正則表達式的符號,被稱為「通配符」,
所以如果我們用如下命令:
那麼就會把當前目錄下所有txt文件拷貝到folder這個子目錄當中。
又如:
那麼就會把當前目錄下凡是以ha開頭的文件都拷貝到folder目錄中。
移動文件
mv是英語move的縮寫,表示「移動」。mv命令有兩個功能:
用mv命令來移動目錄很簡單,不需要額外的參數,就跟移動文件一樣:
當然,我們也可以使用通配符。
除了移動文件,mv命令還可以用於重命名文件。
事實上,Linux中沒有一個專門的命令用於重命名文件。之所以mv命令可以重命名文件,其實還是歸因於它的機制:移動文件。經過mv移動之後,原始文件變成了新的名字的文件,文件內容是不變的,這不就相當於重命名了嗎?
以上命令會將new_file重命名為renamed_file。
刪除文件和目錄
rm命令可以刪除一個文件,多個文件,目錄,甚至你的整個Linux系統(如果你願意的話)。
以上命令刪除當前目錄下的new_file_這個文件。
我們也可以同時刪除多個文件,只要用空格隔開每個文件即可。例如:
保險起見,用rm命令刪除文件時,可以加上 -i 參數,這樣對於每一個要刪除的文件,終端都會詢問我們是否確定刪除。i是英語inform的縮寫,表示「告知,通知」。
有兩種回答:
y:是英語yes的縮寫,表示「是」。那麼回車確認後,文件就刪除了。
n:是英語no的縮寫,表示「否」。那麼回車確認後,文件不會刪除。
如果在rm命令後加上-f參數,那麼終端不會詢問用戶是否確定刪除文件,不論如何,文件會立刻被強制刪除。
f是英語force的縮寫。
以上命令會強制刪除file文件。
r是英語recursive的縮寫,表示「遞歸的」。所以使用-r參數,可以使rm命令刪除目錄,並且遞歸刪除其包含的子目錄和文件。
這個命令也挺危險的,用得不好可能你的子目錄和文件都沒了。
以上命令會刪除one這個目錄,包括其子目錄和文件。
其實,也存在一個命令
看著和 rm -r 挺像的。但是這個命令有個局限性:只能刪除空的目錄。
創建鏈接
事實上,Linux下有兩種鏈接類型:
為了區分這兩種鏈接類型的不同,我們首先來談一談如Linux這樣的操作系統中文件在硬碟上的存放。
文件在硬碟上存儲時,大致來說(請注意我用了「大致來說」),每個文件有兩部分:
文件名的列表是儲存在硬碟的其他地方的,和文件內容分開存放,這樣方便Linux管理。
注意:為什麼我上面要用「大致說來」呢?因為此處我們簡化了描述,其實每個文件有三部分:
我們這里簡化地將文件分為兩部分:文件名和文件內容。因為我們不想把事情復雜化,我們想要理解兩種鏈接類型的區別,暫時只要知道這些就夠了。
每個文件的文件內容被分配到一個標示號碼,就是inode。因此每個文件名都綁定到它的文件內容(用inode標識)。原理如下圖:
下面我們學習如何創建硬鏈接和軟連接。
比之軟鏈接,硬鏈接的使用幾率小很多。但是我們還是要學習一下,畢竟可能會用到。
硬鏈接的原理:使鏈接的兩個文件共享同樣的文件內容,也就是同樣的inode。
所以一旦文件1和文件2之間有了硬鏈接,那麼你修改文件1或文件2,其實修改的是相同的一塊內容。只不過我們可以用兩個文件名來取到文件內容。
硬鏈接有一個缺陷:只能創建指向文件的硬鏈接,不能創建指向目錄的硬鏈接。但是軟鏈接可以指向文件或目錄。當然了,事實上,通過一些參數的修改,也可以創建指向目錄的硬鏈接,但是比較復雜,這里不再詳述。所以對於目錄的鏈接,我們一般都是用軟鏈接。
硬鏈接原理圖:
要創建硬鏈接,直接用ln命令,不加任何參數:
我們可以用ls -i命令查看一下(-i參數可以顯示文件的inode)。對於硬鏈接來說,刪除任意一方的文件,共同指向的文件內容並不會從硬碟上被刪除。
我們用ls -l命令查看文件信息的時候,第二列的那個2,其實是表示擁有相同inode號的文件數。不難理解,因為它們指向相同的文件內容,所以共享一個inode。
這個第二列的數字,一般來說對於普通文件,都是1,因為不同文件inode不同嘛。對於目錄來說,這第二列的數字標明目錄內所含文件數目。
其實,軟鏈接才是真正像我們在Windows下的快捷方式的,其原理很相似。
創建硬鏈接是ln不帶任何參數,但是要創建軟鏈接需要加上-s參數。s是symbolic(符號的)的縮寫。
file2指向的不再是file1的文件內容(和硬鏈接不同),而是指向file1的文件名。
軟鏈接原理圖:
用ls -l命令查看一下,會發現形式和之前的硬鏈接不一樣噢,file2的信息是這樣的: file2->file1,表示file2指向file1。
而且file2前面的許可權那裡的第一個字母變成了l,表示link(鏈接)。之前硬鏈接的時候是沒有l的,硬鏈接外表看起來就和普通文件類似。
我們用ls -l命令查看文件信息的時候,第二列的那個1,表示擁有相同inode號的文件數。不難理解,因為file2指向file1,它們並沒有指向同一塊文件內容,所以它們的inode號不相同。
軟鏈接的特點:
Ⅳ 在Linux中如何查看文件的修改日期
有時候可能需要檢查有關文件的詳細信息,例如文件的修改日期。當你要檢查文件的最後編輯時間時,本文可能會派上用場。在本文將學習4種方法查看文件的修改日期。
使用stat 命令
stat 命令 可以顯示文件屬性的詳細信息,比如最近一次訪問和修改文件的時間、文件大小等信息,使用起來比較簡單,命令後面只需要加上文件名就可以:
[root@localhost ~]# stat hello_script.sh
File: 『hello_script.sh』
Size: 31 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 67169379 Links: 1
Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2020-10-15 19:13:24.628009932 +0800
Modify: 2020-10-15 19:07:18.266426499 +0800
Change: 2020-10-15 19:11:48.227856412 +0800
Birth: -
從上面的輸出中,我們可以看到文件的訪問日期、文件的修改日期、文件許可權的修改日期以及其他參數。
如果只希望查看文件的修改日期,而不考慮所有其他信息,運行以下命令:
[root@localhost ~]# stat -c %y hello_script.sh
2020-10-15 19:07:18.266426499 +0800
-c選項用於指定自定義格式代替默認的輸出,而'%y'標志顯示上次修改時間。對於文件夾,語法保持不變。只需將文件名替換為文件夾名稱即可。
使用date命令
date命令的用法是顯示當前日期。但是當與-r選項一起使用時,可以顯示文件的最後修改日期,如下所示:
[root@localhost ~]# date -r hello_script.sh
Thu Oct 15 19:07:18 CST 2020
使用ls -l命令
ls -l命令通常用於使用長列表顯示有關文件的其他信息,例如文件許可權和所有者,大小和創建日期。可以添加-t選項,這樣就可以按照文件的修改時間來排列:
[root@localhost ~]# ls -lt
或者
[root@localhost ~]# ll -t
total 288
drwxr-xr-x. 2 root root 177 Oct 16 14:36 b
drwxr-xr-x. 2 root root 177 Oct 16 14:36 a
-rwxr-xr-x. 1 root root 119 Oct 15 19:20 backup_script.sh
-rwxr-xr-x. 1 root root 31 Oct 15 19:07 hello_script.sh
-rw-r--r--. 1 root root 227 Oct 13 16:39 content.txt
-rw-r--r--. 1 root root 277159 Oct 12 14:37 a.txt
drwxr-xr-x. 2 root root 195 Aug 6 14:12 Files
-rw-------. 1 root root 1284 Dec 29 2019 anaconda-ks.cfg
使用httpie工具
另一種檢查文件的修改日期的方法是使用httpie ,是HTTP命令行客戶端工具。該工具通常用於與HTTP伺服器和API交互,還可以檢查駐留在web伺服器上文件的修改時間。
首先需要確保安裝了python的pip包管理工具,然後安裝httpie工具:
在 Centos 7/RHEL7中,運行以下命令安裝httpie:
[root@localhost ~]# yum -y install python-pip
[root@localhost ~]# pip install --upgrade pip
[root@localhost ~]# pip install httpie
在Ubuntu / Deepin / Debian中運行以下命令安裝httpie:
$ sudo apt install httpie
安裝完成之後,那麼如何查看web伺服器上文件的修改時間呢?語法如下:
http -h [url] | grep 'Last-Modified'
例如,從www. linux probe.com網站中,查看一張.png格式的圖片修改時間:
[root@localhost ~]# http -h https://www.linuxprobe.com/wp-content/uploads/2020/06/6-1.png | grep -i 'Last-Modified'
Last-Modified: Fri, 05 Jun 2020 14:26:11 GMT
總結
在本文中,介紹了各種方法,可以使用這些方法列出文件的最後修改日期,甚至可以使用httpie工具列出web伺服器上的文件的最後修改日期。
Ⅳ Linux ls 顯示文件年份 並支持自定義顯示年月日時分秒
默認情況下 ls -l 命令只顯示月和日,不顯示年份:
如要要顯示年份,就要使用 --time-style 參數,該參數有幾個選項:
所以要顯示年份可以使用 full-iso 、 long-iso 、 +Format 這幾種參數選項。
--time-style=full-iso 有一個替代參數 --full-time ,可以直接用這個參數來顯示精確的時間:
Linux下文件的創建時間、訪問時間、修改時間和改變時間:
ls -lu filename 列出文件的 atime (最後讀取時間)
ls -lc filename 列出文件的 ctime (最後許可權時間)
ls -l filename 列出文件的 mtime (修改文件內容)
Ⅵ linux查看和修改文件的時間
1、查看文件大小:
# -sh filename
2、查看文件,文件夾屬性:
#ls -l filename
#ls -ld foldername
3、查看文件的三個時間 atime ,ctime, mtime
3.1、 mtime(modification time),修改時間: 這個時間指的是文件內容修改的時間,而不是文件屬性的修改,當數據內容修改時,這個時間就會改變,用命令ls -l默認顯示的就是這個時間
3.2、ctime(status time ),狀態時間:當一個文件的狀態改變時,這個時間就會改變,例如更改了文件的許可權與屬性等,它就會改變。
3.3、atime(access time),訪問時間:當讀取文件內容時,就會更改這個時間,例如使用cat 去讀取/etc/man.config,那麼該文件的atime就會改變。
3.4、查看命令:
# ls -l --full-time /etc/man.config mtime
# ls -l --time=atime --full-time /etc/man.config atime
# ls -l --time=ctime --full-time /etc/man.config ctime
4、其他
如果要一起查看文件的三個時間情況,可以用命令stat進行查看
# stat /etc/man.config