2017-12-04 9 views
1

ファイルの作成者または所有者を印刷するためにどのlsオプションを使用するのか教えていただけますか?私は2時間以上を探しましたが、私が見つけた唯一の事は動作しないハイフンハイフンの著者です。私はUnix.com、unixtutorial.com、Ubuntu.com、およそ12の他のサイトを試しました。私はGoogle、Yahoo、Bing、DuckDuckGoを使いました。私はそれをすべてチャックしてあきらめるつもりです。ファイルの作成者を印刷するためのUnixのlsコマンドオプション

答えて

1

著者、あなたが(それはそれなしでは動作しません)-l--authorを組み合わせを取得します。 ls --authorをサポートするほとんどのUNIXでは、作者と所有者は同じものですが、私はそれがGNU Hurdでのみ異なる概念であると信じています。さらに、実際にはすべてのUNIXがで、オプションをと指定しているわけではありません。

現在ののオーナーは、ls -lの出力を見ることによって得ることができます。これは通常、行の3番目の引数です(ただし、これはいくつかによって変わります)。だから、単純化し、あなたが使用できます。もちろん

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

を、lsの出力を解析することはまれ良いアイデアです。あなたは、現在の所有者を取得するために、ファイルにstat()を呼び出し、st_uidフィールドを取得するために、Cプログラムを使用したほうが良いでしょう:

#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 myFileNameでそれを呼び出し、ownerにそれをコンパイルします。与えられたファイル。所有者のテキスト名を検索しようとしますが、テキスト名が見つからない場合、または呼び出しの最後に-nフラグを設定した場合は数値IDに戻ります。

+0

'--author'は、どのBSDでも利用できません。私はそれがLinuxだけのものかどうかはわかりません。 – Rob

+0

情報源について言えば、私のUbuntu 16.04の 'ls 'のマニュアルページは、' -l'を使うべきであることを明確に示しています: '--author with -l、各ファイルの作者を印刷します' –

関連する問題