如何獲取 Linux 目錄中所有文件所有者的列表

本教程旨在幫助您獲取 Linux 上目錄中所有文件的所有者列表。 此處顯示的命令是通用的,預計適用於任何 Linux 發行版。 我的實驗室基於 Ubuntu 18.04、16.04 和 CentOS 7。

在管理 Linux 系統時,處理文件、目錄和用戶權限是一項日常任務。 Linux 上幾乎所有東西都是文件,知道如何檢查和更改文件/目錄的所有權會派上用場。

使用 stat 命令列出目錄中文件的所有者

狀態 是一個命令行工具,用於在 Linux/Unix 系統上顯示文件或文件系統狀態。 在 Ubuntu 和所有基於 Debian 的系統上, stat 命令由 coreutils 包提供。 如果由於任何原因未安裝此軟件包,您可以使用以下命令安裝它:

$ sudo apt-get -y install coreutils

在 CentOS 上,該命令也由 coreutils 包提供,如果缺少,可以使用 yum 安裝:

$ sudo yum -y install coreutils

一旦確認該命令存在,我們將使用以下選項來獲取目錄中文件的所有者:

-C : 指定格式
% u : 打印文件所有者用戶名的格式

所以命令語法是:

 stat -c %U  <file>

對於所有文件,使用通配符 * 標記。 請參閱以下示例:

$ cd ~
$ stat -c %U *
jmutai
jmutai
jmutai

此輸出的問題在於文件和所有者之間沒有映射。 我們需要使用 bash 映射文件和所有者的概念。 所以我們將運行如下命令:

$ cd /dir
$ files=`ls`
$ for file in $files; do owner=`stat -c %C $file`; echo $file $owner; done

上面的輸出將採用 格式,這應該很容易理解。

Development jmutai
Documents root
ping_all.sh dan
examples.desktop benard

對於文件的其他 stat 有效格式序列,請查看其手冊頁:

$ man stat

使用 find 命令列出目錄中文件的所有者

find 是一種 Linux 命令行工具,通常用於在目錄中搜索文件。 使用一些正則表達式和打印命令,您可以列出目錄中文件的所有者

要使用的確切命令語法是:

# find /dir -printf '%un'

默認情況下,這將進行遞歸搜索和列表。 您可以進行進一步過濾,例如打印唯一的用戶名以避免重複。 為此,將輸出通過管道傳送到 sort 命令,使用 -u 選項:

# find /dir -printf '%un' | sort -t: -u

要包括文件組所有權,請在打印功能中添加 %g 選項。

# find /dir -printf '%u:%gn' | sort -t: -u

這 example 下面將打印所有在 /var/ 目錄中擁有文件的唯一用戶名

看下一個 example 對於用戶名和組:

使用 ls 命令

你也可以使用 ls 命令來檢查 Linux 中文件和目錄的所有者。 唯一的問題是如何處理遞歸所有權。

# ls -lh /dir 
# ls -lhR /dir

結論

以上三個命令應該可以幫助您識別 Linux 機器中文件和目錄的所有者。 如果您認為我們可以在此列表中更新任何其他命令/腳本,請隨時分享。