Опция команды 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
Будет напечатано имя автора плюс версия. напечатать имя автора