令人困惑的 ls 命令:“ls -t”與“ls -u”
在 Unix
ls -l
中,我們提供了一個長長的文件和目錄列表。ls -lt
另外按時間排序文件,即最後更改或修改。這是要區分的,ls -lu
它給出了長列表和訪問時間,並從 az 對文件進行排序,而不是按最後一次訪問。我希望ls -lu
按訪問時間對文件進行排序,但為此我需要:ls -lut
它以長格式提供列表,列印訪問時間,並按訪問時間排序。ERGO,
-t
必須表示按時間排序,無論是修改時間還是訪問時間,而,-u
表示僅列出訪問時間。這並不意味著按訪問時間列出和排序。沒有任何進一步的論據,-t
似乎意味著按修改時間列出並按修改時間排序。以上是否正確。如果沒有,我哪裡錯了?
你是正確的,
-t
意思是“按時間排序”,-u
意思是“使用 atime 時間戳”(當用 排序-t
或用 顯示時間戳時-l
)。POSIX-u
選項並不意味著更改預設排序順序,除非-t
也用於顯式請求按時間戳排序。的 POSIX 規範中
ls
包含以下文本:
-u
使用上次訪問時間(請參閱 XBD <sys/stat.h>)而不是上次修改文件進行排序 (
-t
) 或寫入 (-l
)。但是,GNU 人認為 let
ls -u
也按 atime排序ls -u
會很方便,因為否則and的輸出之間將沒有區別ls
(兩者都將按名稱排序,並且不會顯示時間戳)。這就是為什麼 GNUls
與任何其他系統的ls
.GNU 系統上的文件將
ls
其總結為
-u
with
-lt
:按訪問時間排序並顯示;with-l
:顯示訪問時間並按名稱排序;否則:按訪問時間排序,最新的在前這篇短文中沒有提到的是,任何其他提供與 類似的輸出格式的選項
-l
,例如和-o
,也會從選項中移除排序效果。這些選項在 GNU手冊中都有文本“like but, …”。-g``-n``-u``-l``-l``ls
-c
GNU中的ls
選項以類似的方式依賴於其他選項來排序/顯示 ctime 時間戳。GNU從 1999 年左右
ls
開始就是這樣工作的。無論您使用什麼實現
ls
,要按時間戳對長格式輸出進行排序,您都必須使用-t
. 用於-l -ut
按 atime-l -ct
排序、按 ctime 排序或僅-l -t
按 mtime 排序。
ls
手冊頁可以幫助闡明這些選項。該
-l
選項控制輸出格式,生成“長”列表。該
-t
選項按修改時間排序。該值已經以長格式存在。該
-u
選項的行為根據它所使用的選項而有所不同。
- 就其本身而言,
ls -u
它按訪問時間排序。- 使用該
-l
選項,它會顯示訪問時間,但按名稱排序。在這種情況下,它充當輸出修飾符而不是排序選項。- 使用
-l
和-t
,它顯示訪問時間並按其排序。該
-c
選項與 ctime 屬性的工作方式相同。複雜性來自於修改長列表格式的需要。其他幾個選項
-lo
以這種方式工作:抑制組資訊,-lG
抑制所有者資訊,-lh
以人類可讀的格式顯示大小,等等)。
ls
手冊中的 GNU 樣式選項使這更容易理解。
-l
是--format=long
。
-t
是--sort=time
。
-u
是--time=atime
。
-lu
也是如此--format=long --time=atime
。也就是說,顯示長列表,但使用 atime 而不是預設的 mtime。並且
-ltu
是--format=long --sort=time --time=atime
。在這種情況下,顯示 atime 並按它排序。