Linux

命令 ls -ltu 無法根據上次訪問時間列出文件夾/文件

  • October 21, 2014

首先在您的 linux 桌面上創建 2 個文件夾。

a
b

現在在終端中執行它

ls -ltu

結果是

drwxr-xr-x 2 root root 4096 Aug 30 20:33 b
drwxr-xr-x 2 root root 4096 Aug 30 20:33 a

讓我們點擊 a 並重新執行它。

與上述完全相同的結果。

讓我們點擊 b 並重新執行它。

與上述完全相同的結果。

我正在嘗試根據上次點擊的文件夾來排列文件夾。他們推薦ls -ltu,但它不起作用。

您可以使用該命令stat查看與文件和目錄相關的時間資訊。

例子

$ mkdir a b

$ ll
total 8
drwxrwxr-x 2 saml saml 4096 Aug 31 00:08 a
drwxrwxr-x 2 saml saml 4096 Aug 31 00:08 b

$ ls -ltu
total 8
drwxrwxr-x 2 saml saml 4096 Aug 31 00:08 a
drwxrwxr-x 2 saml saml 4096 Aug 31 00:08 b

統計輸出

stat現在讓我們使用以下命令查看這些目錄:

$ stat a b
 File: `a'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 5643285     Links: 2
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-08-31 00:08:03.621936538 -0400
Modify: 2013-08-31 00:08:03.621936538 -0400
Change: 2013-08-31 00:08:03.621936538 -0400
 File: `b'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 5643286     Links: 2
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-08-31 00:08:03.621936538 -0400
Modify: 2013-08-31 00:08:03.621936538 -0400
Change: 2013-08-31 00:08:03.621936538 -0400

訪問a

現在讓我們訪問目錄a

$ ls a

現在讓我們重新檢查目錄stat

$ stat a b
 File: `a'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 5643285     Links: 2
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-08-31 00:08:33.221267791 -0400
Modify: 2013-08-31 00:08:03.621936538 -0400
Change: 2013-08-31 00:08:03.621936538 -0400
 File: `b'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 5643286     Links: 2
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-08-31 00:08:03.621936538 -0400
Modify: 2013-08-31 00:08:03.621936538 -0400
Change: 2013-08-31 00:08:03.621936538 -0400

我們可以看到我們確實影響了目錄的統計資訊ls a

Access: 2013-08-31 00:08:03.621936538 -0400

Access: 2013-08-31 00:08:33.221267791 -0400

訪問b

現在如果我們訪問b目錄,ls b

$ ls b

$ ls -ltu
total 8
drwxrwxr-x 2 saml saml 4096 Aug 31 00:17 b
drwxrwxr-x 2 saml saml 4096 Aug 31 00:08 a

統計輸出

我們可以看到訪問時間發生了變化,上面的輸出ls -ltu應該是這樣的:

$ stat a b
 File: `a'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 5643285     Links: 2
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-08-31 00:08:33.221267791 -0400
Modify: 2013-08-31 00:08:03.621936538 -0400
Change: 2013-08-31 00:08:03.621936538 -0400
 File: `b'
 Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd02h/64770d    Inode: 5643286     Links: 2
Access: (0775/drwxrwxr-x)  Uid: (  500/    saml)   Gid: (  501/    saml)
Access: 2013-08-31 00:17:15.279776957 -0400
Modify: 2013-08-31 00:08:03.621936538 -0400
Change: 2013-08-31 00:08:03.621936538 -0400

我們可以再次看到一個簡單ls b的原因導致訪問時間得到更新:

Access: 2013-08-31 00:08:03.621936538 -0400

Access: 2013-08-31 00:17:15.279776957 -0400

概括

在查看上述分析時,我看不出有任何理由ls -ltu不按預期向您顯示按訪問時間排序的目錄。

那麼這是什麼一回事?

也許您安裝了目錄,使得訪問時間沒有被跟踪?這可以解釋為什麼沒有變化。

如果您在手冊頁中查找 mount 命令,您將看到定義了以下 2 個選項:

atime     Update inode access time for each access. See also the 
         strictatime mount option.

noatime   Do not update inode access times on this filesystem (e.g, 
         for faster access on the news spool to speed up news servers).

您可以使用該mount命令檢查文件系統的掛載方式。如果安裝了一個設備以使該選項noatime出現,那麼它正在被安裝,因此訪問時間 (atime) 不會被跟踪。這樣做通常是為了提高性能。

例子

$ mount
/dev/mapper/vg_grinchy-lv_root on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda5 on /boot type ext4 (rw)
/dev/mapper/vg_grinchy-lv_home on /home type ext4 (rw)
gvfs-fuse-daemon on /home/saml/.gvfs type fuse.gvfs-fuse-daemon (rw,nosuid,nodev,user=saml)

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