Опция команды Unix ls для печати автора файла

Может кто-нибудь сказать мне, какой вариант ls использовать для печати автора или владельца файла? Я искал более 2 часов, и единственное, что я нашел, это дефис автора, который не работает. Я пробовал Unix.com, unixtutorial.com, Ubuntu.com и еще около десятка других сайтов. Я использовал Google, Yahoo, Bing, DuckDuckGo. Я готов бросить все это и сдаться.

2 ответа

Чтобы получить автора, вы объединяете --author с -l (это не работает без него). Имейте в виду, что в большинстве UNIX, которые поддерживают ls --authorАвтор и владелец - это одно и то же, я верю, что это только в GNU Hurd, где они представляют разные концепции. Кроме того, не все UNIX на самом деле предоставляют --author вариант.

Текущий владелец вы можете получить, посмотрев на вывод ls -l - обычно это третий аргумент в строке (хотя он может меняться в зависимости от нескольких вещей). Итак, проще говоря, вы можете использовать:

ls -al myFileName | awk '{print $3}'

Конечно, разбор выходных ls редко хорошая идея. Вам было бы лучше использовать C-программу для вызова stat() на файл, и получите st_uid поле для получения текущего владельца:

#include <sys/types.h>
#include <sys/stat.h>
#include <pwd.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

int Usage(char *errStr) {
    fprintf(stderr, "*** ERROR: %s\n", errStr);
    fprintf(stderr, "Usage: owner <file> [-n]\n");
    fprintf(stderr, "       '-n' forces numeric ID\n");
    return 1;
}

int main(int argc, char *argv[]) {
    if ((argc != 2) && (argc != 3))
        return Usage("Incorrect argument count");

    if ((argc == 3) && (strcmp(argv[2], "-n") != 0))
        return Usage("Final parameter must be '-n' if used");

    struct stat fileStat;
    int retStat = stat(argv[1], &fileStat);
    if (retStat != 0)
        return Usage(strerror(errno));

    struct passwd *pw = getpwuid (fileStat.st_uid);
    if ((argc == 3) || (pw == NULL)) {
        printf("%d\n", fileStat.st_uid);
        return 0;
    }

    puts(pw->pw_name);

    return 0;
}

Скомпилируйте это в ownerзатем позвоните с owner myFileName получить владельца данного файла. Он попытается найти текстовое имя владельца, но вернется к числовому идентификатору, если не сможет найти текстовое имя или если вы введете -n флаг в конце вашего вызова.

Я пробовал все это, и ни один из них не работал с приведенным выше кодом. Я подумал, может быть, это потому, что я использовал ubuntu. Для Linux-систем простая команда ls, -author, затем -l делает трюк. не используйте -a, Linux может перевести его как другую команду. ls -author -l | FilenameБудет напечатано имя автора плюс версия. напечатать имя автора

Другие вопросы по тегам