Ls

令人困惑的 ls 命令:“ls -t”與“ls -u”

  • September 1, 2021

在 Unixls -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 人認為 letls -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

-cGNU中的ls選項以類似的方式依賴於其他選項來排序/顯示 ctime 時間戳。

GNU從 1999 年左右ls開始就是這樣工作的。

無論您使用什麼實現ls,要按時間戳對長格式輸出進行排序,您都必須使用-t. 用於-l -ut按 atime-l -ct排序、按 ctime 排序或僅-l -t按 mtime 排序。

ls手冊頁可以幫助闡明這些選項。

-l選項控制輸出格式,生成“長”列表。

-t選項按修改時間排序。該值已經以長格式存在。

-u選項的行為根據它所使用的選項而有所不同。

  1. 就其本身而言,ls -u它按訪問時間排序。
  2. 使用該-l選項,它會顯示訪問時間,但按名稱排序。在這種情況下,它充當輸出修飾符而不是排序選項。
  3. 使用-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 並按它排序。

引用自:https://unix.stackexchange.com/questions/667118