什么是 POSIX“强制实用程序”?

什么是 POSIX“强制实用程序”?

POSIX 文档这里这里请参阅“强制实用程序”,但我找不到此类实用程序的任何列表。 POSIX 文档中有某个地方吗?

当然,上面给出的链接指向旧版本的文档。也许从那时起,术语已经发生了变化(例如,也许过去所谓的“强制实用程序”现在被称为“必需实用程序”,或“强制实用程序”,或“核心实用程序”等),或者强制/可选区别已经改变完全被放弃了吗?欢迎澄清。

答案1

您引用的部分之一:

仅存在于支持相关选项的系统上的可选实用程序;请参阅代码有关 IEEE Std 1003.1-2001 本卷中选项的信息

强制实用程序是那些未标记为可选的实用程序。

例如basename没有注释表明它是可选的,因此它是强制性的。alias被注释为向上,因此仅当实现声称包含“用户可移植性实用程序”选项时,它才是强制性的。command是强制性的,但-v-V选项不是强制性的,除非实现声称包含“用户可移植性实用程序”选项。

答案2

它始终取决于系统的“合规性”程度,但对于POSIX 实用程序,您可以查看下面的列表。如果它被标记为“DEVELOPMENT”那么它被认为是可选的:

“强制”实用程序:

alias - define or display aliases
ar - create and maintain library archives
asa - interpret carriage-control characters
at - execute commands at a later time
awk - pattern scanning and processing language
basename - return non-directory portion of a pathname
batch - schedule commands to be executed in a batch queue
bc - arbitrary-precision arithmetic language
bg - run jobs in the background
c99 - compile standard C programs
cal - print a calendar
cat - concatenate and print files
cd - change the working directory
chgrp - change the file group ownership
chmod - change the file modes
chown - change the file ownership
cksum - write file checksums and sizes
cmp - compare two files
comm - select or reject lines common to two files
command - execute a simple command
compress - compress data
cp - copy files
crontab - schedule periodic background work
csplit - split files based on context
cut - cut out selected fields of each line of a file
date - write the date and time
dd - convert and copy a file
df - report free disk space
diff - compare two files
dirname - return the directory portion of a pathname
du - estimate file space usage
echo - write arguments to standard output
ed - edit text
env - set the environment for command invocation
ex - text editor
expand - convert tabs to spaces
expr - evaluate arguments as an expression
false - return false value
fc - process the command history list
fg - run jobs in the foreground
file - determine file type
find - find files
fold - filter for folding lines
fort77 - FORTRAN compiler (FORTRAN)
fuser - list process IDs of all processes that have one or more files open
gencat - generate a formatted message catalog
getconf - get configuration values
getopts - parse utility options
grep - search a file for a pattern
hash - remember or report utility locations
head - copy the first part of files
iconv - codeset conversion
id - return user identity
ipcrm - remove an XSI message queue, semaphore set, or shared memory segment identifier
ipcs - report XSI interprocess communication facilities status
jobs - display status of jobs in the current session
join - relational database operator
kill - terminate or signal processes
link - call link function
ln - link files
locale - get locale-specific information
localedef - define locale environment
logger - log messages
logname - return the user's login name
lp - send files to a printer
ls - list directory contents
m4 - macro processor
mailx - process messages
man - display system documentation
mesg - permit or deny messages
mkdir - make directories
mkfifo - make FIFO special files
more - display files on a page-by-page basis
mv - move files
newgrp - change to a new group
nice - invoke a utility with an altered nice value
nl - line numbering filter
nohup - invoke a utility immune to hangups
od - dump files in various formats
paste - merge corresponding or subsequent lines of files
patch - apply changes to files
pathchk - check pathnames
pax - portable archive interchange
pr - print files
printf - write formatted output
ps - report process status
pwd - return working directory name
qalter - alter batch job
qdel - delete batch jobs
qhold - hold batch jobs
qmove - move batch jobs
qmsg - send message to batch jobs
qrerun - rerun batch jobs
qrls - release batch jobs
qselect - select batch jobs
qsig - signal batch jobs
qstat - show status of batch jobs
qsub - submit a script
read - read from standard input into shell variables
renice - set nice values of running processes
rm - remove directory entries
rmdir - remove directories
sed - stream editor
sh - shell, the standard command language interpreter
sleep - suspend execution for an interval
sort - sort, merge, or sequence check text files
split - split a file into pieces
strings - find printable strings in files
stty - set the options for a terminal
tabs - set terminal tabs
tail - copy the last part of a file
talk - talk to another user
tee - duplicate standard input
test - evaluate expression
time - time a simple command
touch - change file access and modification times
tput - change terminal characteristics
tr - translate characters
true - return true value
tsort - topological sort
tty - return user's terminal name
type - write a description of command type
ulimit - set or report file size limit
umask - get or set the file mode creation mask
unalias - remove alias definitions
uname - return system name
uncompress - expand compressed data
unexpand - convert spaces to tabs
uniq - report or filter out repeated lines in a file
unlink - call the unlink function
uucp - system-to-system copy
uudecode - decode a binary file
uuencode - encode a binary file
uustat - uucp status enquiry and job control
uux - remote command execution
vi - screen-oriented (visual) display editor
wait - await process completion
wc - word, line, and byte or character count
who - display who is on the system
write - write to another user
xargs - construct argument lists and invoke utility
zcat - expand and concatenate data

开发(“可选”)实用程序:

admin - create and administer SCCS files (DEVELOPMENT)
cflow - generate a C-language flowgraph (DEVELOPMENT)
ctags - create a tags file (DEVELOPMENT, FORTRAN)
cxref - generate a C-language program cross-reference table (DEVELOPMENT)
delta - make a delta (change) to an SCCS file (DEVELOPMENT)
get - get a version of an SCCS file (DEVELOPMENT)
lex - generate programs for lexical tasks (DEVELOPMENT)
make - maintain, update, and regenerate groups of programs (DEVELOPMENT)
nm - write the name list of an object file (DEVELOPMENT)
prs - print an SCCS file (DEVELOPMENT)
rmdel - remove a delta from an SCCS file (DEVELOPMENT)
sact - print current SCCS file-editing activity (DEVELOPMENT)
sccs - front end for the SCCS subsystem (DEVELOPMENT)
strip - remove unnecessary information from strippable files (DEVELOPMENT)
unget - undo a previous get of an SCCS file (DEVELOPMENT)
val - validate SCCS files (DEVELOPMENT)
what - identify SCCS files (DEVELOPMENT)
yacc - yet another compiler compiler (DEVELOPMENT)

方法

# ksh93: Version AJM 93u+ 2012-08-01
## lots of ugly, lazy hacks but 
## it should be readable enough to give you the idea

cd /tmp

[ ! -s /tmp/posix.list ] && curl --location --silent http://pubs.opengroup.org/onlinepubs/9699919799/utilities/ | sed -e 's/<[^>]*>//g' | awk '/^[a-z].*.html/ { print $1 }' | tee /tmp/posix.list

rm -f /tmp/posix.txt /tmp/all_tools.txt

echo '#!/bin/sh' > /tmp/clean_all.sh

cat /tmp/posix.list | while read P
do
    echo
    p=$(basename "${P}" .html)
    echo "Getting ${p} details"
    [ ! -s "${p}.txt" ] && curl --location --silent "http://pubs.opengroup.org/onlinepubs/9699919799/utilities/${P}" | sed -e 's/<[^>]*>//g' > "${p}.txt"
    grep -A3 ^NAME "${p}.txt" | grep ^${p} | tee -a /tmp/posix.txt
    echo "${p}.txt" >> /tmp/all_tools.txt
done

sed 's|^|rm -f /tmp/|' < /tmp/all_tools.txt >> /tmp/clean_all.sh
chmod +x /tmp/clean_all.sh
echo 'rm -f /tmp/posix.list' >> /tmp/clean_all.sh
echo 'rm -f /tmp/posix.txt /tmp/all_tools.txt' >> /tmp/clean_all.sh

grep -v DEVELOPMENT /tmp/posix.txt
grep DEVELOPMENT /tmp/posix.txt

答案3

Kajukenbo 和 schily 的答案不正确

我没有足够的“声誉”来“评论”答案,但我不得不说它们只是错误的或者,公平地说,误导由为打印机而不是浏览器设计的 POSIX 规范布局。

因缺少介绍/糟糕的规格布局而被误导

OP正确链接到第4章的介绍:POSIX“Shell & Utilities”的“Utilities”(=“XCU”POSIX 的一部分),其中给出了“强制”和“可选”实用程序之间的区别 - 请参阅 Gilles 的解释(与往常一样出色,但alias示例已过时,请参见下文)。不幸的是在POSIX 2004 规范版本没有指向本章其余部分的链接,特别是。不属于公用事业本身。所以例如。 Kajukenbo 显然在其他地方进行了搜索并找到了POSIX 2017 规范的“实用程序”索引- 但只有索引(参见 url 中的“idx”),XCU 第 4 章中没有其他内容来解释如何阅读此列表。

尝试解释纯粹的实用程序列表会产生一个“强制”列表,该列表混合了强制和可选实用程序,并为“可选”创建了自己的(非 POSIX 一致)类别。

正确的规格导航

现在我们有 POSIX 2017 的 2018 版,对浏览进行了一些改进,所以如果您查阅XCU 2018版,您可以在页眉和页脚中使用“上一页”和“下一页”进行导航,以及一个(名称错误的)“主页”来引导至该章的目录。不幸的是,第 4 章没有给出所有实用程序的简单列表,您必须查阅 Kajukenbo 找到的索引链接。从那里或按照第 4 章的顺序,您可以看到 POSIX 考虑的每个实用程序的描述。在这些描述中,决定性因素是不是“发展”一词的存在或不存在这使得admin非强制性(可选)和alias强制性,但是否存在“保证金代码”,以概要段落左上角方括号中的上标链接形式给出,例如 的“[XSI]” admin。请注意,特别是。 POSIX 规范中提到了“XSI”一致性作为 ”可能支持……XSI”,而不是“必须”。

左上角代码在 XCU 第 4 章(见上文)的介绍中进行了介绍,并附有指向代码表也有一个解释此“保证金代码表示法”的部分。那里提到的概要段落的“阴影”通常由一些钢蓝色背景呈现,但这本质上只是一种区分特征,而不是识别特征,即您可能仅在强制和可选实用程序的描述之间切换时才会注意到它,但在直接访问可选链接时则不然(钢蓝色背景上的蓝色链接标签不是最好的设计理念)。

POSIX 版本

请注意,由于 Gilles 的答案alias已从 POSIX 2004 中的可选答案更改为 POSIX 2008 中的强制答案。因此您必须还要考虑 POSIX 版本声称或搜索的合规性。由于“标准”与“修订版”与“版本”与“版本”,这可能会令人困惑。在这里,您最好使用 opengroup.com 规范标题中给出的 IEEE 标准编号,例如。当前的“IEEE 标准 1003.1-2017”。 IEEE 版本控制有详细记录维基百科的 POSIX条目,而 XCU 等部分的划分在维基百科的SUS另一方面,该条目坚持 POSIX“版本”而不是 IEEE 编号。

尽管很痛苦,但深入研究某些 UNIX 和/或工程师的思维方式可能会让您受益匪浅。

答案4

我找不到此类实用程序的任何列表。 POSIX 文档中有某个地方吗?

不可以。您必须单独检查每个实用程序,并在此基础上自行创建一个列表。然而,实际上,您总是更愿意需要一种实用程序的详细信息,而不是许多实用程序的肤浅信息。

当然,上面给出的链接指向旧版本的文档

他们是这样。但您可能还必须使用不了解新系统的“旧”系统。

也许从那时起命名法已经改变了

不,这是行业标准。如果行业标准变化太多和/或太频繁,它们就无法生存。不要将其与单个制造商的最终用户产品混淆,后者可能渴望进行大量且频繁的更改,以便客户被迫重新购买。

相关内容