diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
commit | fc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch) | |
tree | ce1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man1p/pathchk.1p | |
parent | Initial commit. (diff) | |
download | manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip |
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man1p/pathchk.1p')
-rw-r--r-- | upstream/archlinux/man1p/pathchk.1p | 428 |
1 files changed, 428 insertions, 0 deletions
diff --git a/upstream/archlinux/man1p/pathchk.1p b/upstream/archlinux/man1p/pathchk.1p new file mode 100644 index 00000000..b8409d22 --- /dev/null +++ b/upstream/archlinux/man1p/pathchk.1p @@ -0,0 +1,428 @@ +'\" et +.TH PATHCHK "1P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual" +.\" +.SH PROLOG +This manual page is part of the POSIX Programmer's Manual. +The Linux implementation of this interface may differ (consult +the corresponding Linux manual page for details of Linux behavior), +or the interface may not be implemented on Linux. +.\" +.SH NAME +pathchk +\(em check pathnames +.SH SYNOPSIS +.LP +.nf +pathchk \fB[\fR-p\fB] [\fR-P\fB] \fIpathname\fR... +.fi +.SH DESCRIPTION +The +.IR pathchk +utility shall check that one or more pathnames are valid (that is, they +could be used to access or create a file without causing syntax errors) +and portable (that is, no filename truncation results). More +extensive portability checks are provided by the +.BR \-p +and +.BR \-P +options. +.P +By default, the +.IR pathchk +utility shall check each component of each +.IR pathname +operand based on the underlying file system. A diagnostic shall be +written for each +.IR pathname +operand that: +.IP " *" 4 +Is longer than +{PATH_MAX} +bytes (see +.BR "Pathname Variable Values" +in the Base Definitions volume of POSIX.1\(hy2017, +.IR "\fB<limits.h>\fP") +.IP " *" 4 +Contains any component longer than +{NAME_MAX} +bytes in its containing directory +.IP " *" 4 +Contains any component in a directory that is not searchable +.IP " *" 4 +Contains any byte sequence that is not valid in its +containing directory +.P +The format of the diagnostic message is not specified, but shall +indicate the error detected and the corresponding +.IR pathname +operand. +.P +It shall not be considered an error if one or more components of a +.IR pathname +operand do not exist as long as a file matching the pathname specified +by the missing components could be created that does not violate any of +the checks specified above. +.SH OPTIONS +The +.IR pathchk +utility shall conform to the Base Definitions volume of POSIX.1\(hy2017, +.IR "Section 12.2" ", " "Utility Syntax Guidelines". +.P +The following option shall be supported: +.IP "\fB\-p\fP" 10 +Instead of performing checks based on the underlying file system, write +a diagnostic for each +.IR pathname +operand that: +.RS 10 +.IP " *" 4 +Is longer than +{_POSIX_PATH_MAX} +bytes (see +.BR "Minimum Values" +in the Base Definitions volume of POSIX.1\(hy2017, +.IR "\fB<limits.h>\fP") +.IP " *" 4 +Contains any component longer than +{_POSIX_NAME_MAX} +bytes +.IP " *" 4 +Contains any character in any component that is not in the portable +filename character set +.RE +.IP "\fB\-P\fP" 10 +Write a diagnostic for each +.IR pathname +operand that: +.RS 10 +.IP " *" 4 +Contains a component whose first character is the +<hyphen-minus> +character +.IP " *" 4 +Is empty +.RE +.SH OPERANDS +The following operand shall be supported: +.IP "\fIpathname\fR" 10 +A pathname to be checked. +.SH STDIN +Not used. +.SH "INPUT FILES" +None. +.SH "ENVIRONMENT VARIABLES" +The following environment variables shall affect the execution of +.IR pathchk : +.IP "\fILANG\fP" 10 +Provide a default value for the internationalization variables that are +unset or null. (See the Base Definitions volume of POSIX.1\(hy2017, +.IR "Section 8.2" ", " "Internationalization Variables" +the precedence of internationalization variables used to determine the +values of locale categories.) +.IP "\fILC_ALL\fP" 10 +If set to a non-empty string value, override the values of all the +other internationalization variables. +.IP "\fILC_CTYPE\fP" 10 +Determine the locale for the interpretation of sequences of bytes of +text data as characters (for example, single-byte as opposed to +multi-byte characters in arguments). +.IP "\fILC_MESSAGES\fP" 10 +.br +Determine the locale that should be used to affect the format and +contents of diagnostic messages written to standard error. +.IP "\fINLSPATH\fP" 10 +Determine the location of message catalogs for the processing of +.IR LC_MESSAGES . +.SH "ASYNCHRONOUS EVENTS" +Default. +.SH STDOUT +Not used. +.SH STDERR +The standard error shall be used only for diagnostic messages. +.SH "OUTPUT FILES" +None. +.SH "EXTENDED DESCRIPTION" +None. +.SH "EXIT STATUS" +The following exit values shall be returned: +.IP "\00" 6 +All +.IR pathname +operands passed all of the checks. +.IP >0 6 +An error occurred. +.SH "CONSEQUENCES OF ERRORS" +Default. +.LP +.IR "The following sections are informative." +.SH "APPLICATION USAGE" +The +.IR test +utility can be used to determine whether a given pathname names an +existing file; it does not, however, give any indication of whether or +not any component of the pathname was truncated in a directory where +the _POSIX_NO_TRUNC feature is not in effect. The +.IR pathchk +utility does not check for file existence; it performs checks to +determine whether a pathname does exist or could be created with no +pathname component truncation. +.P +The +.IR noclobber +option in the shell (see the +.IR "\fIset\fR\^" +special built-in) can be used to atomically create a file. As with all +file creation semantics in the System Interfaces volume of POSIX.1\(hy2017, it guarantees atomic creation, +but still depends on applications to agree on conventions and cooperate +on the use of files after they have been created. +.P +To verify that a pathname meets the requirements of filename +portability, applications should use both the +.BR \-p +and +.BR \-P +options together. +.SH EXAMPLES +To verify that all pathnames in an imported data interchange archive +are legitimate and unambiguous on the current system: +.sp +.RS 4 +.nf + +# This example assumes that no pathnames in the archive +# contain <newline> characters. +pax -f archive | sed -e \(aqs/[\(ha[:alnum:]]/\e\e&/g\(aq | xargs pathchk -- +if [ $? -eq 0 ] +then + pax -r -f archive +else + echo Investigate problems before importing files. + exit 1 +fi +.fi +.P +.RE +.P +To verify that all files in the current directory hierarchy could be +moved to any system conforming to the System Interfaces volume of POSIX.1\(hy2017 that also supports the +.IR pax +utility: +.sp +.RS 4 +.nf + +find . -exec pathchk -p -P {} + +if [ $? -eq 0 ] +then + pax -w -f ../archive . +else + echo Portable archive cannot be created. + exit 1 +fi +.fi +.P +.RE +.P +To verify that a user-supplied pathname names a readable file and that +the application can create a file extending the given path without +truncation and without overwriting any existing file: +.sp +.RS 4 +.nf + +case $- in + *C*) reset="";; + *) reset="set +C" + set -C;; +esac +test -r "$path" && pathchk "$path.out" && + rm "$path.out" > "$path.out" +if [ $? -ne 0 ]; then + printf "%s: %s not found or %s.out fails \e +creation checks.\en" $0 "$path$path" + $reset # Reset the noclobber option in case a trap + # on EXIT depends on it. + exit 1 +fi +$reset +PROCESSING < "$path" > "$path.out" +.fi +.P +.RE +.P +The following assumptions are made in this example: +.IP " 1." 4 +.BR PROCESSING +represents the code that is used by the application to use +.BR $path +once it is verified that +.BR $path.out +works as intended. +.IP " 2." 4 +The state of the +.IR noclobber +option is unknown when this code is invoked and should be set on exit +to the state it was in when this code was invoked. (The +.BR reset +variable is used in this example to restore the initial state.) +.IP " 3." 4 +Note the usage of: +.RS 4 +.sp +.RS 4 +.nf + +rm "$path.out" > "$path.out" +.fi +.P +.RE +.IP " a." 4 +The +.IR pathchk +command has already verified, at this point, that +.BR $path.out +is not truncated. +.IP " b." 4 +With the +.IR noclobber +option set, the shell verifies that +.BR $path.out +does not already exist before invoking +.IR rm . +.IP " c." 4 +If the shell succeeded in creating +.BR $path.out , +.IR rm +removes it so that the application can create the file again in the +.BR PROCESSING +step. +.IP " d." 4 +If the +.BR PROCESSING +step wants the file to exist already when it is invoked, the: +.RS 4 +.sp +.RS 4 +.nf + +rm "$path.out" > "$path.out" +.fi +.P +.RE +.P +should be replaced with: +.sp +.RS 4 +.nf + +> "$path.out" +.fi +.P +.RE +.P +which verifies that the file did not already exist, but leaves +.BR $path.out +in place for use by +.BR PROCESSING . +.RE +.RE +.SH RATIONALE +The +.IR pathchk +utility was new for the ISO\ POSIX\(hy2:\|1993 standard. It, along with the +.IR set +.BR \-C (\c +.IR noclobber ) +option added to the shell, replaces the +.IR mktemp , +.IR validfnam , +and +.IR create +utilities that appeared in early proposals. All of these utilities were +attempts to solve several common problems: +.IP " *" 4 +Verify the validity (for several different definitions of ``valid'') of +a pathname supplied by a user, generated by an application, or imported +from an external source. +.IP " *" 4 +Atomically create a file. +.IP " *" 4 +Perform various string handling functions to generate a temporary +filename. +.P +The +.IR create +utility, included in an early proposal, provided checking and atomic +creation in a single invocation of the utility; these are orthogonal +issues and need not be grouped into a single utility. Note that the +.IR noclobber +option also provides a way of creating a lock for process +synchronization; since it provides an atomic +.IR create , +there is no race between a test for existence and the following +creation if it did not exist. +.P +Having a function like +\fItmpnam\fR() +in the ISO\ C standard is important in many high-level languages. The shell +programming language, however, has built-in string manipulation +facilities, making it very easy to construct temporary filenames. The +names needed obviously depend on the application, but are frequently of +a form similar to: +.sp +.RS 4 +.nf + +\fB$TMPDIR/\fIapplication_abbreviation\fB$$.\fIsuffix\fR +.fi +.P +.RE +.P +In cases where there is likely to be contention for a given suffix, a +simple shell +.BR for +or +.BR while +loop can be used with the shell +.IR noclobber +option to create a file without risk of collisions, as long as +applications trying to use the same filename name space are cooperating +on the use of files after they have been created. +.P +For historical purposes, +.BR \-p +does not check for the use of the +<hyphen-minus> +character as the first character in a component of the pathname, or for +an empty +.IR pathname +operand. +.SH "FUTURE DIRECTIONS" +None. +.SH "SEE ALSO" +.IR "Section 2.7" ", " "Redirection", +.IR "\fIset\fR\^", +.IR "\fItest\fR\^" +.P +The Base Definitions volume of POSIX.1\(hy2017, +.IR "Chapter 8" ", " "Environment Variables", +.IR "Section 12.2" ", " "Utility Syntax Guidelines", +.IR "\fB<limits.h>\fP" +.\" +.SH COPYRIGHT +Portions of this text are reprinted and reproduced in electronic form +from IEEE Std 1003.1-2017, Standard for Information Technology +-- Portable Operating System Interface (POSIX), The Open Group Base +Specifications Issue 7, 2018 Edition, +Copyright (C) 2018 by the Institute of +Electrical and Electronics Engineers, Inc and The Open Group. +In the event of any discrepancy between this version and the original IEEE and +The Open Group Standard, the original IEEE and The Open Group Standard +is the referee document. The original Standard can be obtained online at +http://www.opengroup.org/unix/online.html . +.PP +Any typographical or formatting errors that appear +in this page are most likely +to have been introduced during the conversion of the source files to +man page format. To report such errors, see +https://www.kernel.org/doc/man-pages/reporting_bugs.html . |