diff --git a/bin/chflags/chflags.1 b/bin/chflags/chflags.1 --- a/bin/chflags/chflags.1 +++ b/bin/chflags/chflags.1 @@ -208,7 +208,7 @@ In addition, these options override each other and the command's actions are determined by the last one specified. .Pp -You can use "ls -lo" to see the flags of existing files. +You can use "ls -lO" to see the flags of existing files. .Pp Note that the ability to change certain flags is dependent on the current kernel diff --git a/bin/ls/ls.h b/bin/ls/ls.h --- a/bin/ls/ls.h +++ b/bin/ls/ls.h @@ -54,8 +54,10 @@ extern int f_samesort; /* sort time and name in same direction */ extern int f_sectime; /* print the real time for all files */ extern int f_size; /* list size in short listing */ +extern int f_sgroup; /* disable showing the name of owning group */ extern int f_slash; /* append a '/' if the file is a directory */ extern int f_sortacross; /* sort across rows, not down columns */ +extern int f_sowner; /* disable showing the owner's name */ extern int f_statustime; /* use time of last mode change */ extern int f_thousands; /* show file sizes with thousands separators */ extern char *f_timeformat; /* user-specified time format */ diff --git a/bin/ls/ls.1 b/bin/ls/ls.1 --- a/bin/ls/ls.1 +++ b/bin/ls/ls.1 @@ -162,6 +162,13 @@ This option cancels the .Fl P option. +.It Fl O +Include the file flags in a long +.Pq Fl l +output. +See +.Xr chflags 1 +for a list of file flags and their meanings. .It Fl P If argument is a symbolic link, list the link itself rather than the object the link references. @@ -301,14 +308,9 @@ .Fl s options. .It Fl g -This option has no effect. -It is only available for compatibility with -.Bx 4.3 , -where it was used to display the group name in the long +Display the long .Pq Fl l -format output. -This option is incompatible with -.St -p1003.1-2008 . +format output without the file owner's name or number. .It Fl h When used with the .Fl l @@ -339,14 +341,15 @@ .Pq Fl l output. .It Fl o -Include the file flags in a long +Display the long .Pq Fl l -output. -This option is incompatible with -.St -p1003.1-2008 . -See -.Xr chflags 1 -for a list of file flags and their meanings. +format output without the file's group name or number. +This behavior changed in +.Fx 14 , +to conform to +.St -p1003.1-2008 ; +for the previous behavior of displaying file flags, use +.Pq Fl O . .It Fl p Write a slash .Pq Ql / @@ -872,7 +875,7 @@ .Xr chflags 1 ) , and suffix each filename with a symbol representing its file type: .Pp -.Dl $ ls -lioF +.Dl $ ls -liOF .Pp List the files in .Pa /var/log , diff --git a/bin/ls/ls.c b/bin/ls/ls.c --- a/bin/ls/ls.c +++ b/bin/ls/ls.c @@ -142,8 +142,10 @@ static int f_singlecol; /* use single column output */ int f_size; /* list size in short listing */ static int f_sizesort; + int f_sgroup; /* disable showing the name of owning group */ int f_slash; /* similar to f_type, but only for dirs */ int f_sortacross; /* sort across rows, not down columns */ + int f_sowner; /* disable showing owner's name */ int f_statustime; /* use time of last mode change */ static int f_stream; /* stream the output, separate with commas */ int f_thousands; /* show file sizes with thousands separators */ @@ -276,7 +278,7 @@ colorflag = COLORFLAG_AUTO; #endif while ((ch = getopt_long(argc, argv, - "+1ABCD:FGHILPRSTUWXZabcdfghiklmnopqrstuvwxy,", long_opts, + "+1ABCD:FGHILOPRSTUWXZabcdfghiklmnopqrstuvwxy,", long_opts, NULL)) != -1) { switch (ch) { /* @@ -374,6 +376,9 @@ fts_options |= FTS_LOGICAL; f_nofollow = 0; break; + case 'O': + f_flags = 1; + break; case 'P': fts_options &= ~FTS_COMFOLLOW; fts_options &= ~FTS_LOGICAL; @@ -402,7 +407,11 @@ f_listdir = 1; f_recursive = 0; break; - case 'g': /* Compatibility with 4.3BSD. */ + case 'g': + f_longform = 1; + f_singlecol = 0; + f_stream = 0; + f_sowner = 1; break; case 'h': f_humanval = 1; @@ -421,9 +430,15 @@ break; case 'n': f_numericonly = 1; + f_longform = 1; + f_singlecol = 0; + f_stream = 0; break; case 'o': - f_flags = 1; + f_longform = 1; + f_singlecol = 0; + f_stream = 0; + f_sgroup = 0; break; case 'p': f_slash = 1; diff --git a/bin/ls/print.c b/bin/ls/print.c --- a/bin/ls/print.c +++ b/bin/ls/print.c @@ -234,9 +234,12 @@ strmode(sp->st_mode, buf); aclmode(buf, p); np = p->fts_pointer; - (void)printf("%s %*ju %-*s %-*s ", buf, dp->s_nlink, - (uintmax_t)sp->st_nlink, dp->s_user, np->user, dp->s_group, - np->group); + (void)printf("%s %*ju ", buf, dp->s_nlink, + (uintmax_t)sp->st_nlink); + if (!f_sowner) + (void)printf("%-*s ", dp->s_user, np->user); + if (!f_sgroup) + (void)printf("%-*s ", dp->s_group, np->group); if (f_flags) (void)printf("%-*s ", dp->s_flags, np->flags); if (f_label) diff --git a/bin/ls/tests/ls_tests.sh b/bin/ls/tests/ls_tests.sh --- a/bin/ls/tests/ls_tests.sh +++ b/bin/ls/tests/ls_tests.sh @@ -696,7 +696,7 @@ atf_test_case o_flag o_flag_head() { - atf_set "descr" "Verify that the output from ls -o prints out the chflag values or '-' if none are set" + atf_set "descr" "Verify that the output from ls -O prints out the chflag values or '-' if none are set" } o_flag_body() @@ -713,9 +713,9 @@ atf_check -e empty -o empty -s exit:0 chflags 0 b.file atf_check -e empty -o match:"[[:space:]]+uarch[[:space:]]$size+.+a\\.file" \ - -s exit:0 ls -lo a.file + -s exit:0 ls -lO a.file atf_check -e empty -o match:"[[:space:]]+\\-[[:space:]]$size+.+b\\.file" \ - -s exit:0 ls -lo b.file + -s exit:0 ls -lO b.file } atf_test_case p_flag diff --git a/bin/ls/util.c b/bin/ls/util.c --- a/bin/ls/util.c +++ b/bin/ls/util.c @@ -227,9 +227,9 @@ { (void)fprintf(stderr, #ifdef COLORLS - "usage: ls [-ABCFGHILPRSTUWZabcdfghiklmnopqrstuvwxy1,] [--color=when] [-D format]" + "usage: ls [-ABCFGHILOPRSTUWZabcdfghiklmnopqrstuvwxy1,] [--color=when] [-D format]" #else - "usage: ls [-ABCFHILPRSTUWZabcdfghiklmnopqrstuvwxy1,] [-D format]" + "usage: ls [-ABCFHILOPRSTUWZabcdfghiklmnopqrstuvwxy1,] [-D format]" #endif " [file ...]\n"); exit(1); diff --git a/share/skel/dot.shrc b/share/skel/dot.shrc --- a/share/skel/dot.shrc +++ b/share/skel/dot.shrc @@ -22,7 +22,7 @@ alias h='fc -l' alias j=jobs alias m="$PAGER" -alias ll='ls -laFo' +alias ll='ls -laFO' alias l='ls -l' alias g='egrep -i' diff --git a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/off/dosmode.ksh b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/off/dosmode.ksh --- a/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/off/dosmode.ksh +++ b/sys/contrib/openzfs/tests/zfs-tests/tests/functional/acl/off/dosmode.ksh @@ -57,7 +57,7 @@ if is_linux; then read_dos_attributes $path else - ls -lo $path | awk '{ print $5 }' + ls -lO $path | awk '{ print $5 }' fi | grep -qwF $flag } diff --git a/tools/test/stress2/misc/fts2.sh b/tools/test/stress2/misc/fts2.sh --- a/tools/test/stress2/misc/fts2.sh +++ b/tools/test/stress2/misc/fts2.sh @@ -208,7 +208,7 @@ p->fts_info == FTS_NS) /* stat(2) failed */ continue; fprintf(stderr, "FAULT\n"); - sprintf(help, "ls -lo %s", p->fts_path); + sprintf(help, "ls -lO %s", p->fts_path); system(help); fprintf(stderr, "fts_path: %s\n", p->fts_path); fprintf(stderr, "fts_info: %d %s\n", p->fts_info,