no more minix touch, id
This commit is contained in:
parent
c0dfa2f3f1
commit
bfeecdbf62
7 changed files with 2 additions and 493 deletions
|
@ -13,7 +13,7 @@ SUBDIR= aal add_route adduser advent arp ash at autil awk \
|
||||||
ed eject elle elvis env expand factor file \
|
ed eject elle elvis env expand factor file \
|
||||||
find finger fingerd fix fold format fortune fsck \
|
find finger fingerd fix fold format fortune fsck \
|
||||||
fsck1 ftp101 ftpd200 getty grep gomoku head host \
|
fsck1 ftp101 ftpd200 getty grep gomoku head host \
|
||||||
hostaddr id ifconfig ifdef indent install \
|
hostaddr ifconfig ifdef indent install \
|
||||||
intr ipcrm ipcs irdpd isoread join kill last leave \
|
intr ipcrm ipcs irdpd isoread join kill last leave \
|
||||||
lex life loadkeys loadramdisk logger login look lp \
|
lex life loadkeys loadramdisk logger login look lp \
|
||||||
lpd ls lspci M m4 mail make MAKEDEV makewhatis man \
|
lpd ls lspci M m4 mail make MAKEDEV makewhatis man \
|
||||||
|
@ -28,7 +28,7 @@ SUBDIR= aal add_route adduser advent arp ash at autil awk \
|
||||||
sleep slip sort spell split srccrc stat strings strip \
|
sleep slip sort spell split srccrc stat strings strip \
|
||||||
stty su sum svclog swapfs swifi sync synctree sysenv \
|
stty su sum svclog swapfs swifi sync synctree sysenv \
|
||||||
syslogd tail talk talkd tcpd tcpdp tcpstat tee telnet \
|
syslogd tail talk talkd tcpd tcpdp tcpstat tee telnet \
|
||||||
telnetd term termcap tget time tinyhalt top touch tr \
|
telnetd term termcap tget time tinyhalt top tr \
|
||||||
truncate tsort ttt tty udpstat umount uname unexpand \
|
truncate tsort ttt tty udpstat umount uname unexpand \
|
||||||
uniq unstack update urlget uud uue version vol wc \
|
uniq unstack update urlget uud uue version vol wc \
|
||||||
whatis whereis which who whoami write writeisofs \
|
whatis whereis which who whoami write writeisofs \
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
PROG= id
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <minix.prog.mk>
|
|
153
commands/id/id.c
153
commands/id/id.c
|
@ -1,153 +0,0 @@
|
||||||
/* id - return uid and gid Author: John J. Marco */
|
|
||||||
|
|
||||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-*/
|
|
||||||
/* ----- id.c ----- */
|
|
||||||
/* Id - get real and effective user id and group id */
|
|
||||||
/* Author: John J. Marco */
|
|
||||||
/* pa1343@sdcc15.ucsd.edu */
|
|
||||||
/*-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <pwd.h>
|
|
||||||
#include <grp.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <limits.h>
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
struct passwd *pwd;
|
|
||||||
struct group *grp;
|
|
||||||
uid_t ruid, euid, uid;
|
|
||||||
gid_t rgid, egid, gid;
|
|
||||||
#if __minix_vmd
|
|
||||||
uid_t suid;
|
|
||||||
gid_t sgid;
|
|
||||||
#else
|
|
||||||
# define suid ruid
|
|
||||||
# define sgid rgid
|
|
||||||
#endif
|
|
||||||
#if NGROUPS_MAX > 0
|
|
||||||
gid_t groups[NGROUPS_MAX];
|
|
||||||
int ngroups;
|
|
||||||
#else
|
|
||||||
# define groups (&rgid)
|
|
||||||
# define ngroups 0
|
|
||||||
#endif
|
|
||||||
int g;
|
|
||||||
int isug;
|
|
||||||
int c, uopt = 0, gopt = 0, nopt = 0, ropt = 0;
|
|
||||||
|
|
||||||
#if __minix_vmd
|
|
||||||
get6id(&ruid, &euid, &suid, &rgid, &egid, &sgid);
|
|
||||||
isug = issetugid();
|
|
||||||
#else
|
|
||||||
ruid = getuid();
|
|
||||||
euid = geteuid();
|
|
||||||
rgid = getgid();
|
|
||||||
egid = getegid();
|
|
||||||
isug = 0;
|
|
||||||
#endif
|
|
||||||
#if NGROUPS_MAX > 0
|
|
||||||
ngroups = getgroups(NGROUPS_MAX, groups);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
while((c = getopt(argc, argv, "ugnr")) != EOF) {
|
|
||||||
switch(c) {
|
|
||||||
case 'u':
|
|
||||||
uopt = 1;
|
|
||||||
break;
|
|
||||||
case 'g':
|
|
||||||
gopt = 1;
|
|
||||||
break;
|
|
||||||
case 'n':
|
|
||||||
nopt = 1;
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
ropt = 1;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "%s: unrecognized option\n", argv[0]);
|
|
||||||
return(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(uopt && gopt) {
|
|
||||||
fprintf(stderr, "%s: cannot combine -u and -g\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if((nopt || ropt) && !uopt && !gopt) {
|
|
||||||
fprintf(stderr, "%s: cannot use -n or -r without -u or -g\n", argv[0]);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(uopt) {
|
|
||||||
uid = ropt ? ruid : euid;
|
|
||||||
if (!nopt || (pwd = getpwuid(uid)) == NULL)
|
|
||||||
printf("%u\n", uid);
|
|
||||||
else
|
|
||||||
printf("%s\n", pwd->pw_name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if(gopt) {
|
|
||||||
gid = ropt ? rgid : egid;
|
|
||||||
if (!nopt || (grp = getgrgid(gid)) == NULL)
|
|
||||||
printf("%u\n", gid);
|
|
||||||
else
|
|
||||||
printf("%s\n", grp->gr_name);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pwd = getpwuid(ruid)) == NULL)
|
|
||||||
printf("uid=%d", ruid);
|
|
||||||
else
|
|
||||||
printf("uid=%d(%s)", ruid, pwd->pw_name);
|
|
||||||
|
|
||||||
if ((grp = getgrgid(rgid)) == NULL)
|
|
||||||
printf(" gid=%d", rgid);
|
|
||||||
else
|
|
||||||
printf(" gid=%d(%s)", rgid, grp->gr_name);
|
|
||||||
|
|
||||||
if (euid != ruid)
|
|
||||||
if ((pwd = getpwuid(euid)) != NULL)
|
|
||||||
printf(" euid=%d(%s)", euid, pwd->pw_name);
|
|
||||||
else
|
|
||||||
printf(" euid=%d", euid);
|
|
||||||
|
|
||||||
if (egid != rgid)
|
|
||||||
if ((grp = getgrgid(egid)) != NULL)
|
|
||||||
printf(" egid=%d(%s)", egid, grp->gr_name);
|
|
||||||
else
|
|
||||||
printf(" egid=%d", egid);
|
|
||||||
|
|
||||||
if (suid != euid)
|
|
||||||
if ((pwd = getpwuid(suid)) != NULL)
|
|
||||||
printf(" suid=%d(%s)", suid, pwd->pw_name);
|
|
||||||
else
|
|
||||||
printf(" suid=%d", suid);
|
|
||||||
|
|
||||||
if (sgid != egid)
|
|
||||||
if ((grp = getgrgid(sgid)) != NULL)
|
|
||||||
printf(" sgid=%d(%s)", sgid, grp->gr_name);
|
|
||||||
else
|
|
||||||
printf(" sgid=%d", sgid);
|
|
||||||
|
|
||||||
if (isug) {
|
|
||||||
printf(" issetugid");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ngroups > 0) {
|
|
||||||
printf(" groups=");
|
|
||||||
for (g = 0; g < ngroups; g++) {
|
|
||||||
if (g > 0) fputc(',', stdout);
|
|
||||||
if ((grp = getgrgid(groups[g])) == NULL)
|
|
||||||
printf("%d", groups[g]);
|
|
||||||
else
|
|
||||||
printf("%d(%s)", groups[g], grp->gr_name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
printf("\n");
|
|
||||||
return(0);
|
|
||||||
}
|
|
|
@ -1,4 +0,0 @@
|
||||||
PROG= touch
|
|
||||||
MAN=
|
|
||||||
|
|
||||||
.include <minix.prog.mk>
|
|
|
@ -1,247 +0,0 @@
|
||||||
/* Touch - change file access and modification times.
|
|
||||||
*
|
|
||||||
* Usage: see end of file
|
|
||||||
*
|
|
||||||
* Conforms to P1003.2 draft 10, sec. 4.62, except that time values
|
|
||||||
* are not checked for validity, but passed on to mktime, so that
|
|
||||||
* 9301990000 will refer to Apr. 9th 1993. As a side effect, leap
|
|
||||||
* seconds are not handled correctly.
|
|
||||||
*
|
|
||||||
* Authors: Original author unknown. Rewritten for POSIX by
|
|
||||||
* Peter Holzer (hp@vmars.tuwien.ac.at).
|
|
||||||
*
|
|
||||||
* $Log$
|
|
||||||
* Revision 1.1 2005/04/21 14:55:35 beng
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
* Revision 1.1.1.1 2005/04/20 13:33:47 beng
|
|
||||||
* Initial import of minix 2.0.4
|
|
||||||
*
|
|
||||||
* Revision 1.8 1994/03/17 21:39:19 hjp
|
|
||||||
* fixed bug with 4-digit years
|
|
||||||
*
|
|
||||||
* Revision 1.7 1994/03/15 00:43:27 hjp
|
|
||||||
* Changes from kjb (vmd 1.6.25.1):
|
|
||||||
* fixed exit code
|
|
||||||
* nonstandard flag 0 to make file very old
|
|
||||||
*
|
|
||||||
* Revision 1.6 1994/02/12 17:26:33 hjp
|
|
||||||
* fixed -a and -m flags
|
|
||||||
*
|
|
||||||
* Revision 1.5 1994/02/12 16:04:13 hjp
|
|
||||||
* fixed bug when -t argument was not given
|
|
||||||
* removed debugging code
|
|
||||||
* run through pretty to get Minix layout
|
|
||||||
*
|
|
||||||
* Revision 1.4 1994/02/07 21:23:11 hjp
|
|
||||||
* POSIXified.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define _POSIX_C_SOURCE 2 /* getopt */
|
|
||||||
#include <assert.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <time.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <utime.h>
|
|
||||||
|
|
||||||
#define val2(string) ((string)[0] * 10 + (string)[1] - '0' * 11)
|
|
||||||
#define val4(string) (val2(string) * 100 + val2(string + 2))
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
OLD, NEW
|
|
||||||
} formatT;
|
|
||||||
|
|
||||||
char *cmnd;
|
|
||||||
int no_creat = 0;
|
|
||||||
unsigned int to_change = 0;
|
|
||||||
# define ATIME 1
|
|
||||||
# define MTIME 2
|
|
||||||
|
|
||||||
_PROTOTYPE(int main, (int argc, char **argv));
|
|
||||||
_PROTOTYPE(int doit, (char *name, struct utimbuf tvp));
|
|
||||||
_PROTOTYPE(void usage, (void));
|
|
||||||
_PROTOTYPE(time_t parsetime, (const char *string, formatT format));
|
|
||||||
|
|
||||||
time_t parsetime(string, format)
|
|
||||||
const char *string;
|
|
||||||
formatT format;
|
|
||||||
{
|
|
||||||
struct tm tm;
|
|
||||||
time_t touchtime;
|
|
||||||
size_t l;
|
|
||||||
|
|
||||||
l = strspn(string, "0123456789");
|
|
||||||
if (l % 2 == 1) return -1;
|
|
||||||
if (string[l] != '\0' && (string[l] != '.' || format == OLD)) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (format == OLD) {
|
|
||||||
if (l == 10) {
|
|
||||||
/* Last two digits are year */
|
|
||||||
tm.tm_year = val2(string + 8);
|
|
||||||
if (tm.tm_year <= 68) tm.tm_year += 100;
|
|
||||||
} else if (l == 8) {
|
|
||||||
time(&touchtime);
|
|
||||||
tm = *localtime(&touchtime);
|
|
||||||
} else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (l == 12) {
|
|
||||||
/* First four digits are year */
|
|
||||||
tm.tm_year = val4(string) - 1900;
|
|
||||||
string += 4;
|
|
||||||
} else if (l == 10) {
|
|
||||||
/* First two digits are year */
|
|
||||||
tm.tm_year = val2(string);
|
|
||||||
if (tm.tm_year <= 68) tm.tm_year += 100;
|
|
||||||
string += 2;
|
|
||||||
} else if (l == 8) {
|
|
||||||
time(&touchtime);
|
|
||||||
tm = *localtime(&touchtime);
|
|
||||||
} else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
tm.tm_mon = val2(string) - 1;
|
|
||||||
string += 2;
|
|
||||||
tm.tm_mday = val2(string);
|
|
||||||
string += 2;
|
|
||||||
tm.tm_hour = val2(string);
|
|
||||||
string += 2;
|
|
||||||
tm.tm_min = val2(string);
|
|
||||||
string += 2;
|
|
||||||
if (format == NEW && string[0] == '.') {
|
|
||||||
if (isdigit(string[1]) && isdigit(string[2]) &&
|
|
||||||
string[3] == '\0') {
|
|
||||||
tm.tm_sec = val2(string + 1);
|
|
||||||
} else {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
tm.tm_sec = 0;
|
|
||||||
}
|
|
||||||
tm.tm_isdst = -1;
|
|
||||||
touchtime = mktime(&tm);
|
|
||||||
return touchtime;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int main(argc, argv)
|
|
||||||
int argc;
|
|
||||||
char **argv;
|
|
||||||
{
|
|
||||||
time_t auxtime;
|
|
||||||
struct stat sb;
|
|
||||||
int c;
|
|
||||||
struct utimbuf touchtimes;
|
|
||||||
int fail = 0;
|
|
||||||
|
|
||||||
cmnd = argv[0];
|
|
||||||
auxtime = time((time_t *) NULL);
|
|
||||||
touchtimes.modtime = auxtime;
|
|
||||||
touchtimes.actime = auxtime;
|
|
||||||
|
|
||||||
while ((c = getopt(argc, argv, "r:t:acm0")) != EOF) {
|
|
||||||
switch (c) {
|
|
||||||
case 'r':
|
|
||||||
if (stat(optarg, &sb) == -1) {
|
|
||||||
fprintf(stderr, "%s: cannot stat %s: %s\n",
|
|
||||||
cmnd, optarg, strerror(errno));
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
touchtimes.modtime = sb.st_mtime;
|
|
||||||
touchtimes.actime = sb.st_atime;
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
auxtime = parsetime(optarg, NEW);
|
|
||||||
if (auxtime == (time_t) - 1) usage();
|
|
||||||
touchtimes.modtime = auxtime;
|
|
||||||
touchtimes.actime = auxtime;
|
|
||||||
break;
|
|
||||||
case 'a': to_change |= ATIME; break;
|
|
||||||
case 'm': to_change |= MTIME; break;
|
|
||||||
case 'c': no_creat = 1; break;
|
|
||||||
case '0':
|
|
||||||
touchtimes.modtime = touchtimes.actime = 0;
|
|
||||||
break;
|
|
||||||
case '?': usage(); break;
|
|
||||||
default: assert(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (to_change == 0) {
|
|
||||||
to_change = ATIME | MTIME;
|
|
||||||
}
|
|
||||||
if (optind == argc) usage();
|
|
||||||
|
|
||||||
/* Now check for old style time argument */
|
|
||||||
if (strcmp(argv[optind - 1], "--") != 0 &&
|
|
||||||
(auxtime = parsetime(argv[optind], OLD)) != (time_t) - 1) {
|
|
||||||
touchtimes.modtime = auxtime;
|
|
||||||
touchtimes.actime = auxtime;
|
|
||||||
optind++;
|
|
||||||
if (optind == argc) usage();
|
|
||||||
}
|
|
||||||
while (optind < argc) {
|
|
||||||
if (doit(argv[optind], touchtimes) > 0) {
|
|
||||||
fprintf(stderr, "%s: cannot touch %s: %s\n",
|
|
||||||
cmnd, argv[optind], strerror(errno));
|
|
||||||
fail = 1;
|
|
||||||
}
|
|
||||||
optind++;
|
|
||||||
}
|
|
||||||
return fail ? 1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int doit(name, tvp)
|
|
||||||
char *name;
|
|
||||||
struct utimbuf tvp;
|
|
||||||
{
|
|
||||||
int fd;
|
|
||||||
struct stat sb;
|
|
||||||
|
|
||||||
if (to_change != (ATIME | MTIME)) {
|
|
||||||
|
|
||||||
if (stat(name, &sb) != -1) {
|
|
||||||
if (!(to_change & ATIME)) {
|
|
||||||
tvp.actime = sb.st_atime;
|
|
||||||
} else {
|
|
||||||
tvp.modtime = sb.st_mtime;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (utime(name, &tvp) == 0) return 0;
|
|
||||||
if (errno != ENOENT) return 1;
|
|
||||||
if (no_creat == 1) return 0;
|
|
||||||
if ((fd = creat(name, 0666)) >= 0) {
|
|
||||||
if (fstat(fd, &sb) != -1) {
|
|
||||||
if (!(to_change & ATIME)) {
|
|
||||||
tvp.actime = sb.st_atime;
|
|
||||||
} else {
|
|
||||||
tvp.modtime = sb.st_mtime;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
close(fd);
|
|
||||||
if (utime(name, &tvp) == 0) return 0;
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void usage()
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Usage: %s [-c] [-a] [-m] [-r file] [-t [CC[YY]]MMDDhhmm[.ss]] "
|
|
||||||
"[MMDDhhmm[YY]] file...\n", cmnd);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
|
@ -1,34 +0,0 @@
|
||||||
.TH ID 1
|
|
||||||
.SH NAME
|
|
||||||
id \- print the uid and gid
|
|
||||||
.SH SYNOPSIS
|
|
||||||
\fBid\fR
|
|
||||||
.RB [ \-ugnr ]
|
|
||||||
.br
|
|
||||||
.de FL
|
|
||||||
.TP
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
\\$2
|
|
||||||
..
|
|
||||||
.de EX
|
|
||||||
.TP 20
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
# \\$2
|
|
||||||
..
|
|
||||||
.SH EXAMPLES
|
|
||||||
.EX "id" "Print the uid and gid"
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.PP
|
|
||||||
\fIId\fR prints the current uid and gid, both numerically and symbolically.
|
|
||||||
If the effective uid and gid are different from the real ones, all of them
|
|
||||||
are printed.
|
|
||||||
.PP
|
|
||||||
If the \fB\-u\fP or \fB\-g\fP option is specified, then \fBid\fP will print
|
|
||||||
the effective uid or guid number, respectively, on a single line. Combined
|
|
||||||
with either of those options, the \fB\-n\fP option prints the name instead of
|
|
||||||
the number, and the \fB\-r\fP option prints the real instead of the effective
|
|
||||||
uid or gid.
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR getuid (2),
|
|
||||||
.BR getgid (2),
|
|
||||||
.BR getgroups (2).
|
|
|
@ -1,49 +0,0 @@
|
||||||
.TH TOUCH 1
|
|
||||||
.SH NAME
|
|
||||||
touch \- change file access and modification times
|
|
||||||
.SH SYNOPSIS
|
|
||||||
\fBtouch\fR [\fB\-c\fR] [\fB\-a\fR] [\fB\-m\fR] [\fB\-r\fR file] [\fB\-t\fR [CC[YY]]MMDDhhmm[.ss]] [MMDDhhmm[YY]] \fIfile\fR ...\fR
|
|
||||||
.br
|
|
||||||
.de FL
|
|
||||||
.TP
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
\\$2
|
|
||||||
..
|
|
||||||
.de EX
|
|
||||||
.TP 20
|
|
||||||
\\fB\\$1\\fR
|
|
||||||
# \\$2
|
|
||||||
..
|
|
||||||
.SH OPTIONS
|
|
||||||
.FL "\-c" "Do not create the file if it doesn't already exist"
|
|
||||||
.FL "\-a" "Change access time"
|
|
||||||
.FL "\-m" "Change modification time"
|
|
||||||
.FL "\-r file" "Apply time of specified file"
|
|
||||||
.FL "\-t [CC[YY]]MMDDhhmm[.ss]]" "Apply time specified"
|
|
||||||
.FL "\-t [MMDDhhmm[YY]]" "Apply time specified (alternate form)"
|
|
||||||
.SH EXAMPLES
|
|
||||||
.EX "touch *.h" "Make the \fI.h\fP files look recent"
|
|
||||||
.EX "touch -t 199610010000 *" "Change date and time of all files in current directory to midnight Oct 1, 1996"
|
|
||||||
.SH DESCRIPTION
|
|
||||||
.PP
|
|
||||||
With no options specified, the times of last modification and last access
|
|
||||||
are set to the current time.
|
|
||||||
This command is mostly used to trick
|
|
||||||
.I make
|
|
||||||
into thinking that a file is more recent than it really is.
|
|
||||||
If the file being touched does not exist, it is created, unless the \fB\-c\fR
|
|
||||||
flag is present.
|
|
||||||
.PP
|
|
||||||
The \fB\-a\fR or \fB\-m\fR flag may be used to change only the access or
|
|
||||||
modification time. The \fB\-r\fR or \fB\-t\fR flag may be used to change
|
|
||||||
the times to match the times of another file or to a specified time.
|
|
||||||
.SH "SEE ALSO"
|
|
||||||
.BR utime (2).
|
|
||||||
.SH "AUTHOR"
|
|
||||||
.PP
|
|
||||||
Original author unknown. Rewritten for POSIX by Peter Holzer
|
|
||||||
(hp@vmars.tuwien.ac.at).
|
|
||||||
.\" man page updated by A. S. Woodhull 2005-01-15
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue