2 @c ===========================================================================
4 @c This file was generated with po4a. Translate the source file.
6 @c ===========================================================================
8 @setfilename coreutils-ja.info
9 @settitle GNU Coreutils
10 @documentencoding UTF-8
11 @allowcodebreaks false
16 @include constants.texi
18 @c Define new indices.
22 @c Put everything in one index (arbitrarily chosen to be the concept index).
30 @dircategory Basics (in Japanese)
32 * Coreutils-ja: (coreutils-ja). Core GNU (file, text, shell) utilities.
33 * Common options-ja: (coreutils-ja)Common options.
34 * File permissions-ja: (coreutils-ja)File permissions. Access modes.
35 * Date input formats-ja: (coreutils-ja)Date input formats.
38 @c FIXME: the following need documentation
39 @c * [: (coreutils)[ invocation. File/string tests.
40 @c * pinky: (coreutils)pinky invocation. FIXME.
42 @dircategory Individual utilities (in Japanese)
44 * arch-ja: (coreutils-ja)arch invocation. Print machine hardware name.
45 * b2sum-ja: (coreutils-ja)b2sum invocation. Print or check BLAKE2 digests.
46 * base32-ja: (coreutils-ja)base32 invocation. Base32 encode/decode data.
47 * base64-ja: (coreutils-ja)base64 invocation. Base64 encode/decode data.
48 * basename-ja: (coreutils-ja)basename invocation. Strip directory and suffix.
49 * cat-ja: (coreutils-ja)cat invocation. Concatenate and write files.
50 * chcon-ja: (coreutils-ja)chcon invocation. Change SELinux CTX of files.
51 * chgrp-ja: (coreutils-ja)chgrp invocation. Change file groups.
52 * chmod-ja: (coreutils-ja)chmod invocation. Change access permissions.
53 * chown-ja: (coreutils-ja)chown invocation. Change file owners and groups.
54 * chroot-ja: (coreutils-ja)chroot invocation. Specify the root directory.
55 * cksum-ja: (coreutils-ja)cksum invocation. Print POSIX CRC checksum.
56 * comm-ja: (coreutils-ja)comm invocation. Compare sorted files by line.
57 * cp-ja: (coreutils-ja)cp invocation. Copy files.
58 * csplit-ja: (coreutils-ja)csplit invocation. Split by context.
59 * cut-ja: (coreutils-ja)cut invocation. Print selected parts of lines.
60 * date-ja: (coreutils-ja)date invocation. Print/set system date and time.
61 * dd-ja: (coreutils-ja)dd invocation. Copy and convert a file.
62 * df-ja: (coreutils-ja)df invocation. Report file system disk usage.
63 * dir-ja: (coreutils-ja)dir invocation. List directories briefly.
64 * dircolors-ja: (coreutils-ja)dircolors invocation. Color setup for ls.
65 * dirname-ja: (coreutils-ja)dirname invocation. Strip last file name component.
66 * du-ja: (coreutils-ja)du invocation. Report on disk usage.
67 * echo-ja: (coreutils-ja)echo invocation. Print a line of text.
68 * env-ja: (coreutils-ja)env invocation. Modify the environment.
69 * expand-ja: (coreutils-ja)expand invocation. Convert tabs to spaces.
70 * expr-ja: (coreutils-ja)expr invocation. Evaluate expressions.
71 * factor-ja: (coreutils-ja)factor invocation. Print prime factors.
72 * false-ja: (coreutils-ja)false invocation. Do nothing, unsuccessfully.
73 * fmt-ja: (coreutils-ja)fmt invocation. Reformat paragraph text.
74 * fold-ja: (coreutils-ja)fold invocation. Wrap long input lines.
75 * groups-ja: (coreutils-ja)groups invocation. Print group names a user is in.
76 * head-ja: (coreutils-ja)head invocation. Output the first part of files.
77 * hostid-ja: (coreutils-ja)hostid invocation. Print numeric host identifier.
78 * hostname-ja: (coreutils-ja)hostname invocation. Print or set system name.
79 * id-ja: (coreutils-ja)id invocation. Print user identity.
80 * install-ja: (coreutils-ja)install invocation. Copy files and set attributes.
81 * join-ja: (coreutils-ja)join invocation. Join lines on a common field.
82 * kill-ja: (coreutils-ja)kill invocation. Send a signal to processes.
83 * link-ja: (coreutils-ja)link invocation. Make hard links between files.
84 * ln-ja: (coreutils-ja)ln invocation. Make links between files.
85 * logname-ja: (coreutils-ja)logname invocation. Print current login name.
86 * ls-ja: (coreutils-ja)ls invocation. List directory contents.
87 * md5sum-ja: (coreutils-ja)md5sum invocation. Print or check MD5 digests.
88 * mkdir-ja: (coreutils-ja)mkdir invocation. Create directories.
89 * mkfifo-ja: (coreutils-ja)mkfifo invocation. Create FIFOs (named pipes).
90 * mknod-ja: (coreutils-ja)mknod invocation. Create special files.
91 * mktemp-ja: (coreutils-ja)mktemp invocation. Create temporary files.
92 * mv-ja: (coreutils-ja)mv invocation. Rename files.
93 * nice-ja: (coreutils-ja)nice invocation. Modify niceness.
94 * nl-ja: (coreutils-ja)nl invocation. Number lines and write files.
95 * nohup-ja: (coreutils-ja)nohup invocation. Immunize to hangups.
96 * nproc-ja: (coreutils-ja)nproc invocation. Print the number of processors.
97 * numfmt-ja: (coreutils-ja)numfmt invocation. Reformat numbers.
98 * od-ja: (coreutils-ja)od invocation. Dump files in octal, etc.
99 * paste-ja: (coreutils-ja)paste invocation. Merge lines of files.
100 * pathchk-ja: (coreutils-ja)pathchk invocation. Check file name portability.
101 * pr-ja: (coreutils-ja)pr invocation. Paginate or columnate files.
102 * printenv-ja: (coreutils-ja)printenv invocation. Print environment variables.
103 * printf-ja: (coreutils-ja)printf invocation. Format and print data.
104 * ptx-ja: (coreutils-ja)ptx invocation. Produce permuted indexes.
105 * pwd-ja: (coreutils-ja)pwd invocation. Print working directory.
106 * readlink-ja: (coreutils-ja)readlink invocation. Print referent of a symlink.
107 * realpath-ja: (coreutils-ja)realpath invocation. Print resolved file names.
108 * rm-ja: (coreutils-ja)rm invocation. Remove files.
109 * rmdir-ja: (coreutils-ja)rmdir invocation. Remove empty directories.
110 * runcon-ja: (coreutils-ja)runcon invocation. Run in specified SELinux CTX.
111 * seq-ja: (coreutils-ja)seq invocation. Print numeric sequences.
112 * sha1sum-ja: (coreutils-ja)sha1sum invocation. Print or check SHA-1 digests.
113 * sha2-ja: (coreutils-ja)sha2 utilities. Print or check SHA-2 digests.
114 * shred-ja: (coreutils-ja)shred invocation. Remove files more securely.
115 * shuf-ja: (coreutils-ja)shuf invocation. Shuffling text files.
116 * sleep-ja: (coreutils-ja)sleep invocation. Delay for a specified time.
117 * sort-ja: (coreutils-ja)sort invocation. Sort text files.
118 * split-ja: (coreutils-ja)split invocation. Split into pieces.
119 * stat-ja: (coreutils-ja)stat invocation. Report file(system) status.
120 * stdbuf-ja: (coreutils-ja)stdbuf invocation. Modify stdio buffering.
121 * stty-ja: (coreutils-ja)stty invocation. Print/change terminal settings.
122 * sum-ja: (coreutils-ja)sum invocation. Print traditional checksum.
123 * sync-ja: (coreutils-ja)sync invocation. Synchronize memory to disk.
124 * tac-ja: (coreutils-ja)tac invocation. Reverse files.
125 * tail-ja: (coreutils-ja)tail invocation. Output the last part of files.
126 * tee-ja: (coreutils-ja)tee invocation. Redirect to multiple files.
127 * test-ja: (coreutils-ja)test invocation. File/string tests.
128 * timeout-ja: (coreutils-ja)timeout invocation. Run with time limit.
129 * touch-ja: (coreutils-ja)touch invocation. Change file timestamps.
130 * tr-ja: (coreutils-ja)tr invocation. Translate characters.
131 * true-ja: (coreutils-ja)true invocation. Do nothing, successfully.
132 * truncate-ja: (coreutils-ja)truncate invocation. Shrink/extend size of a file.
133 * tsort-ja: (coreutils-ja)tsort invocation. Topological sort.
134 * tty-ja: (coreutils-ja)tty invocation. Print terminal name.
135 * uname-ja: (coreutils-ja)uname invocation. Print system information.
136 * unexpand-ja: (coreutils-ja)unexpand invocation. Convert spaces to tabs.
137 * uniq-ja: (coreutils-ja)uniq invocation. Uniquify files.
138 * unlink-ja: (coreutils-ja)unlink invocation. Removal via unlink(2).
139 * uptime-ja: (coreutils-ja)uptime invocation. Print uptime and load.
140 * users-ja: (coreutils-ja)users invocation. Print current user names.
141 * vdir-ja: (coreutils-ja)vdir invocation. List directories verbosely.
142 * wc-ja: (coreutils-ja)wc invocation. Line, word, and byte counts.
143 * who-ja: (coreutils-ja)who invocation. Print who is logged in.
144 * whoami-ja: (coreutils-ja)whoami invocation. Print effective user ID.
145 * yes-ja: (coreutils-ja)yes invocation. Print a string indefinitely.
149 このマニュアルは、GNU core utilities version @value{VERSION} の詳細な解説である。
150 core utilities には、テキストやファイルを操作するための標準的なプログラムが入っている。
152 Copyright @copyright{} 1994-2016 Free Software Foundation, Inc.
154 Japanese translation copyright @copyright{} 2014-2017 Linux JM project
157 Permission is granted to copy, distribute and/or modify this document under
158 the terms of the GNU Free Documentation License, Version 1.3 or any later
159 version published by the Free Software Foundation; with no Invariant
160 Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy
161 of the license is included in the section entitled ``GNU Free Documentation
165 【訳者から御注意】 この文書を info コマンドで閲覧なさっている場合は、
166 行末に余計な文字が入って、読みにくいことがあるかもしれない。
167 そうしたときは、Ctrl キーと l (エル) キーを同時に押して、画面を再描画していただきたい。
170 お手元の coreutils のバージョンが @value{VERSION} 以外の場合、
171 この文書の説明と動作が違うことがあるかもしれない
172 (たとえば、この文書に書いてあるオプションが使えない、あるいは、
173 使えるはずのオプションの説明がないなど)。
174 そうした場合は、お使いの coreutils と同じバージョンの info マニュアルや
175 man ページに当ってみていただきたい。そちらの方が正しいはずである。
179 @title GNU @code{Coreutils}
180 @subtitle Core GNU utilities
181 @subtitle for version @value{VERSION}, @value{UPDATED}
182 @author David MacKenzie et al.
183 @author translated by Linux JM project
186 @vskip 0pt plus 1filll
199 @cindex core utilities
200 @cindex text utilities
201 @cindex shell utilities
202 @cindex file utilities
205 * Introduction:: 注意事項、概観、著者
206 * Common options:: 共通オプション
207 * Output of entire files:: ファイル全体の出力 (cat tac nl od base32 base64)
208 * Formatting file contents:: ファイルの整形 (fmt pr fold)
209 * Output of parts of files:: ファイルの部分出力 (head tail split csplit)
210 * Summarizing files:: チェックサムなど (wc sum b2sum cksum md5sum
212 * Operating on sorted files:: ソートなど (sort shuf uniq comm ptx tsort)
213 * Operating on fields:: フィールド操作 (cut paste join)
214 * Operating on characters:: 文字操作 (tr expand unexpand)
215 * Directory listing:: ディレクトリ一覧 (ls dir vdir dircolors)
216 * Basic operations:: 基本操作 (cp dd install mv rm shred)
217 * Special file types:: 特殊ファイル型 (mkdir rmdir unlink mkfifo mknod
219 * Changing file attributes:: ファイルの属性変更 (chgrp chmod chown touch)
220 * Disk usage:: ディスク使用量など (df du stat sync truncate)
221 * Printing text:: テキストの表示 (echo printf yes)
222 * Conditions:: 条件 (false true test expr)
223 * Redirection:: リダイレクション (tee)
224 * File name manipulation:: ファイル名の操作 (dirname basename pathchk
226 * Working context:: 作業環境 (pwd stty printenv tty)
227 * User information:: ユーザ情報 (id logname whoami groups users who)
228 * System context:: システム情報 (date arch nproc uname hostname
230 * SELinux context:: SELinux コンテキスト (chcon runcon)
231 * Modified command invocation:: 実行環境の変更 (chroot env nice nohup stdbuf
233 * Process control:: プロセス制御 (kill)
234 * Delaying:: 一時停止 (sleep)
235 * Numeric operations:: 数値の操作 (factor numfmt seq)
236 * File permissions:: アクセス・モード
237 * Date input formats:: 日付文字列の指定法
238 * Opening the software toolbox:: ソフトウェア工具という考え方
239 * About the translation:: 翻訳について
240 * GNU Free Documentation License:: Copying and sharing this manual
241 * Concept index:: General index
248 * Exit status:: プログラムが実行に成功したか失敗したかの指標
249 * Backup options:: バックアップ・オプション
250 * Block size:: ブロックサイズ
251 * Floating point:: 浮動小数点数の表現
252 * Signal specifications:: シグナルの指定
253 * Disambiguating names and IDs:: chgrp, chown, chroot, id
255 * Random sources:: ランダムデータのソース
256 * Target directory:: 出力先ディレクトリ
257 * Trailing slashes:: 末尾のスラッシュ
258 * Traversing symlinks:: ディレクトリを指すシンボリックリンクのたどり方
259 * Treating / specially:: / (ルート) を特別扱いする
260 * Standards conformance:: 規格への準拠
261 * Multi-call invocation:: Multi-call プログラムの起動
265 * cat invocation:: ファイルを結合して、書き出す
266 * tac invocation:: ファイルを結合して、ファイルごとに逆順で書き出す
267 * nl invocation:: 行番号を付けて、ファイルを書き出す
268 * od invocation:: ファイルを 8 進数などの形式で書き出す
269 * base32 invocation:: データを ASCII 文字で表示可能なデータに変換する
270 * base64 invocation:: データを ASCII 文字で表示可能なデータに変換する
274 * fmt invocation:: パラグラフに分かれたテキストを整形し直す
275 * pr invocation:: ページ付けや段組みをしてファイルを表示する
276 * fold invocation:: 入力行を指定された幅に合わせて折り返す
280 * head invocation:: ファイルの先頭部分を出力する
281 * tail invocation:: ファイルの末尾部分を出力する
282 * split invocation:: ファイルを一定のサイズに分割する
283 * csplit invocation:: ファイルを内容を目印にして分割する
287 * wc invocation:: 行数、単語数、バイト数を表示する
288 * sum invocation:: チェックサムとブロック数を表示する
289 * cksum invocation:: CRC チェックサムとバイト数を表示する
290 * b2sum invocation:: BLAKE2 ダイジェストの表示、または検査をする
291 * md5sum invocation:: MD5 ダイジェストの表示、または検査をする
292 * sha1sum invocation:: SHA-1 ダイジェストの表示、または検査をする
293 * sha2 utilities:: SHA-2 ダイジェストの表示、または検査をする
297 * sort invocation:: テキストファイルを並べ替える
298 * shuf invocation:: テキストファイルをシャッフルする
299 * uniq invocation:: ファイルから重複を省く
300 * comm invocation:: ソート済みの二つのファイルを一行づつ比較する
301 * ptx invocation:: ファイル内容の permuted index を作成する
302 * tsort invocation:: トポロジカル・ソート
304 @command{ptx}: パミューテド・インデックスを作成する
306 * General options in ptx:: プログラム全体の動作に関係するオプション
307 * Charset selection in ptx:: 使用している文字セットについて
308 * Input processing in ptx:: 入力のフィールドと文脈、及びキーワードの選択
309 * Output formatting in ptx:: 出力フォーマットのタイプ、及びフィールドの幅
310 * Compatibility in ptx:: GNU による @command{ptx} の拡張
314 * cut invocation:: 各行の選択した部分を表示する
315 * paste invocation:: 複数のファイルの各行をマージする
316 * join invocation:: 共通のフィールドに基づいて行を連結する
320 * tr invocation:: 文字の置換、圧縮、削除を行う
321 * expand invocation:: タブをスペースに変換する
322 * unexpand invocation:: スペースをタブに変換する
324 @command{tr}: 文字の置換、圧縮、削除を行う
326 * Character sets:: 文字集合の指定
327 * Translating:: ある文字集合を別の文字集合に変換する
328 * Squeezing and deleting:: 文字の削除
332 * ls invocation:: ディレクトリの内容を一覧表示する
333 * dir invocation:: ディレクトリの内容を簡潔に表示する
334 * vdir invocation:: ディレクトリの内容を詳細に表示する
335 * dircolors invocation:: @command{ls} のカラー設定
337 @command{ls}: ディレクトリの内容を一覧表示する
339 * Which files are listed:: 表示対象にするファイル
340 * What information is listed:: 表示する情報
341 * Sorting the output:: 出力のソート
342 * Details about version sort:: バージョン・ソートの詳細
343 * General output formatting:: 出力全体の形式
344 * Formatting file timestamps:: タイムスタンプのフォーマット
345 * Formatting the file names:: ファイル名のフォーマット
349 * cp invocation:: ファイルやディレクトリをコピーする
350 * dd invocation:: ファイルの変換とコピー
351 * install invocation:: ファイルをコピーし属性をセットする
352 * mv invocation:: ファイルの移動 (名前の変更) を行う
353 * rm invocation:: ファイルやディレクトリを削除する
354 * shred invocation:: セキュリティを向上させたファイルの削除
358 * link invocation:: システムコール link を使って、ハードリンクを作成する
359 * ln invocation:: ファイル間のリンクを作成する
360 * mkdir invocation:: ディレクトリを作成する
361 * mkfifo invocation:: FIFO (名前付きパイプ) を作成する
362 * mknod invocation:: ブロック型やキャラクタ型のスペシャルファイルを作成する
363 * readlink invocation:: シムリンクの値、または正規化されたファイル名を表示する
364 * rmdir invocation:: 空のディレクトリを削除する
365 * unlink invocation:: システムコール unlink を使って、ファイルを削除する
369 * chown invocation:: ファイルの所有者やグループを変更する
370 * chgrp invocation:: ファイルの所有グループを変更する
371 * chmod invocation:: アクセス権を変更する
372 * touch invocation:: ファイルのタイムスタンプを変更する
376 * df invocation:: ファイルシステムのディスク使用状態を報告する
377 * du invocation:: ファイルのディスク使用量を概算する
378 * stat invocation:: ファイルやファイルシステムの状態を報告する
379 * sync invocation:: キャッシュされた書き込みを永続的な記憶装置に同期する
380 * truncate invocation:: ファイルサイズの短縮・伸長を行う
384 * echo invocation:: テキストを 1 行表示する
385 * printf invocation:: データを整形して表示する
386 * yes invocation:: 中断されるまで文字列を表示する
390 * false invocation:: 何もせず、実行失敗のステータスを返す
391 * true invocation:: 何もせず、正常終了する
392 * test invocation:: ファイルタイプのチェックや値の比較を行う
393 * expr invocation:: 式を評価する
395 @command{test}: ファイルタイプのチェックや値の比較を行う
397 * File type tests:: ファイルタイプのテスト
398 * Access permission tests:: アクセス許可のテスト
399 * File characteristic tests:: ファイル特性のテスト
400 * String tests:: 文字列のテスト
401 * Numeric tests:: 数値のテスト
403 @command{expr}: 式を評価する
405 * String expressions:: 文字列式 (+ : match substr index length)
406 * Numeric expressions:: 数式 (+ - * / %)
407 * Relations for expr:: 論理結合と関係表現 (| & < <= = == != >= >)
408 * Examples of expr:: @command{expr} の使用例
412 * tee invocation:: 出力を複数のファイルやプロセスにリダイレクトする
416 * basename invocation:: ファイル名からディレクトリと接尾辞を取り除く
417 * dirname invocation:: ファイル名から最後の要素を取り除く
418 * pathchk invocation:: ファイル名の有効性や可搬性を検査する
419 * mktemp invocation:: テンポラリファイルやディレクトリを作成する
420 * realpath invocation:: ファイル名を展開して表示する
424 * pwd invocation:: 現在作業中のディレクトリを表示する
425 * stty invocation:: 端末の諸特性を表示・変更する
426 * printenv invocation:: 環境変数のすべて、あるいは一部を表示する
427 * tty invocation:: 標準入力に接続している端末のファイル名を表示する
429 @command{stty}: 端末の諸特性を表示・変更する
435 * Combination:: 組み合わせ設定
441 * id invocation:: ユーザの ID を表示する
442 * logname invocation:: 現在のログイン名を表示する
443 * whoami invocation:: 実効ユーザ ID を表示する
444 * groups invocation:: ユーザが所属しているグループ名を表示する
445 * users invocation:: 現在ログインしている全ユーザのログイン名を表示する
446 * who invocation:: 現在誰がログインしているかを表示する
450 * arch invocation:: マシンのハードウェア名を表示する
451 * date invocation:: システムの日付や時刻を表示、設定する
452 * nproc invocation:: プロセッサ数を表示する
453 * uname invocation:: システムについて情報を表示する
454 * hostname invocation:: システム名を表示、設定する
455 * hostid invocation:: 数値によるホストの識別名を表示する
456 * uptime invocation:: システムの連続稼働時間と負荷を表示する
458 @command{date}: システムの日付や時刻を表示、設定する
460 * Time conversion specifiers:: 時刻関係の変換指定子 %[HIklMNpPrRsSTXzZ]
461 * Date conversion specifiers:: 日付関係の変換指定子 %[aAbBcCdDeFgGhjmuUVwWxyY]
462 * Literal conversion specifiers:: 文字変換指定子 %[%nt]
463 * Padding and other flags:: 0 や空白による空き埋め、その他。
464 * Setting the time:: システムクロックの変更
465 * Options for date:: 現在時以外の指定
466 * Date input formats:: 日付文字列の指定法
467 * Examples of date:: 用例
471 * chcon invocation:: ファイルの SELinux コンテキストを変更する
472 * runcon invocation:: 指定された SELinux コンテキストでコマンドを実行する
476 * chroot invocation:: ルートディレクトリを変更して、コマンドを実行する
477 * env invocation:: 変更した環境でコマンドを実行する
478 * nice invocation:: niceness を変更して、コマンドを実行する
479 * nohup invocation:: ハングアップ・シグナルで終了しないコマンドを実行する
480 * stdbuf invocation:: 入出力バッファリングを変更して、コマンドを実行する
481 * timeout invocation:: タイムリミット付きでコマンドを実行する
485 * kill invocation:: プロセスにシグナルを送る。
489 * sleep invocation:: 指定された時間、停止する
493 * factor invocation:: 素因数を表示する
494 * numfmt invocation:: 数値を整形し直す
495 * seq invocation:: 数列を表示する
497 @command{numfmt}: 数値を整形し直す
499 * General options in numfmt:: 一般オプション
500 * Possible UNITs:: 使用できる UNIT
501 * Examples of using numfmt:: numfmt の使用例
506 * Mode Structure:: ファイルのモードビットの構成
507 * Symbolic Modes:: ファイルのモードビットの憶えやすい表記
508 * Numeric Modes:: ファイルのモードビットの 8 進数による表記
509 * Directory Setuid and Setgid:: ディレクトリの Set-User-ID と
514 * General date syntax:: 共通規則
515 * Calendar date items:: 19 Dec 1994
516 * Time of day items:: 9:20pm
517 * Time zone items:: EST, PDT, UTC, @dots{}
518 * Combined date and time of day items:: 1972-09-24T20:02:00,000000-0500
519 * Day of week items:: Monday, Tuesday
520 * Relative items in date strings:: next tuesday, 2 years ago
521 * Pure numbers in date strings:: 19931219, 1440
522 * Seconds since the Epoch:: @@1078100502
523 * Specifying time zone rules:: TZ="America/New_York", TZ="UTC0"
524 * Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.
528 * Toolbox introduction:: はじめに
529 * I/O redirection:: I/O リダイレクション
530 * The who command:: @command{who} コマンド
531 * The cut command:: @command{cut} コマンド
532 * The sort command:: @command{sort} コマンド
533 * The uniq command:: @command{uniq} コマンド
534 * Putting the tools together:: 工具を組み合わせる
538 * About the translation:: 翻訳について
542 * GNU Free Documentation License:: Copying and sharing this manual
551 このマニュアルは作成の途上にある。たとえば、多くのセクションで、
552 基本的な概念を初心者にわかりやすく説明するといった試みがなされていない。
553 そこで、お願いがある。もし、関心がおありなら、このマニュアルの改良に参加していただきたい。
554 そうしていただければ、GNU コミュニティ全体が恩恵に浴することになる。
557 このマニュアルで解説している GNU ユーティリティは、
558 POSIX の規格におおむね準拠している。
559 @cindex bugs, reporting
561 バグの報告は、@email{bug-coreutils@@gnu.org} になさっていただきたい。
562 そのとき、プログラムのバージョン番号、マシンのアーキテクチャ、
563 入力に使ったファイルといった情報はもとより、
564 バグの再現に必要な他のいかなる情報も、記載していただきたい。
565 たとえば、どんな入力をしたか、どんな結果を期待していたか、実際の結果はどうだったか、
566 それがおかしいと考える理由は何なのかといったことである。
568 @command{sort} や @command{date} コマンドの動作に疑問がある場合は、@option{--debug}
570 その出力が手がかりになって、バグレポートに対する回答を待つまでもなく、
571 問題の在り処を突き止め、解決できることも多いからだ。
572 デバッグの出力が問題を自分で解決するのに十分でないときは、
573 それを圧縮して、提出するバグレポートに添付していただきたい。
575 差分の投稿は歓迎するが、何がどう問題なのかの説明もやはり付けていただきたい。
577 @xref{Bugs, , , gcc, Using and Porting GNU CC}.
583 @cindex MacKenzie, D.
586 このマニュアルは、ユーティリティ・プログラムの配布に含まれる
587 Unix man page を元にして作られたものである。そうした man page は、David MacKenzie
588 によって書かれ、Jim Meyering によって改訂されていた。
589 現在読者がお読みになっているこのマニュアルは、そうしたユーティリティについての公式文書であり、
590 man page の方は、今では改訂作業が行われていない。なお、@command{fmt}
591 の最初の man page の著者は、Ross Paterson だった。
592 Texinfo 形式への変換を最初に行ったのは、Fran@,{c}ois Pinard である。
593 Karl Berry が索引を作成し、構成に若干の変更を加えて、その結果に手を入れた。
594 Free Software Foundation の職員である Brian Youman が
595 textutils, fileutils, sh-utils のマニュアルを統合し、
596 多数の項目を含む現在のマニュアルを作成した。こうした作業全般に渡って、
597 Richard Stallman が例によって洞察力に富む貴重な意見を寄せてくれた。
604 @itemx --backup[=@var{method}]
607 @vindex VERSION_CONTROL
608 @cindex backups, making
609 @xref{Backup options}. そのままでは、上書きされるか、消去されてしまう各ファイルのバックアップを作成する。
612 @macro optBackupSuffix
613 @item -S @var{suffix}
614 @itemx --suffix=@var{suffix}
617 @option{-b} によって作られる各バックアップファイルの後ろに
618 @var{suffix} を付ける。 @xref{Backup options}.
621 @macro optTargetDirectory
622 @item -t @var{directory}
623 @itemx --target-directory=@var{directory}
625 @opindex --target-directory
626 @cindex target directory
627 @cindex destination directory
628 @var{directory} を出力先ディレクトリに指定する。 @xref{Target directory}.
631 @macro optNoTargetDirectory
633 @itemx --no-target-directory
635 @opindex --no-target-directory
636 @cindex target directory
637 @cindex destination directory
638 最後のオペランドがディレクトリやディレクトリへのシンボリックリンク
639 でも、それを特別扱いしない。 @xref{Target directory}.
643 @cindex output NUL-byte-terminated lines
644 各行の末尾に改行ではなく、ゼロバイト (ASCII NUL) を出力する。
645 このオプションを使用すると、出力するデータに、途中に改行を挟むものがあっても、
646 他のプログラムがその出力を解析できるようになる。
665 @macro optZeroTerminated
667 @itemx --zero-terminated
669 @opindex --zero-terminated
670 @cindex process zero-terminated items
671 項目の区切りに、改行 (ASCII LF) ではなく、ゼロバイトを使用する。
672 すなわち、入力を ASCII NUL で分離された項目として扱い、出力する各項目の末尾に
673 ASCII NUL を付加する。このオプションは、@samp{perl -0},
674 @samp{find -print0}, @samp{xargs -0} などと組み合わせて使用すると、
675 便利なことがある。そうしたコマンドも、わがままなファイル名を
676 (空白などの特殊文字を含んでいる場合でも) きちんと確実に処理するために、
684 各サイズにの後ろに、メガバイトなら @samp{M} といった、SI 形式の略号を付ける。
685 1024 ではなく、1000 の累乗が使用されるので、@samp{M} は
686 1,000,000 バイトを表している。このオプションは、@option{--block-size=si}
687 と同じことである。1024 の累乗が使いたければ、@option{-h} や
688 @option{--human-readable} を使用すればよい。
691 @macro optHumanReadable
693 @itemx --human-readable
695 @opindex --human-readable
696 @cindex human-readable output
697 各サイズの後ろに、メビバイトなら @samp{M} といった、大きさを示す文字を付ける。
698 1000 ではなく、1024 の累乗が使われるので、@samp{M} は 1,048,576
699 バイトを表している。このオプションは、@option{--block-size=human-readable}
700 と同じである。1000 の累乗が使いたければ、"@option{--si} オプションを使用すればよい。
703 @macro optStripTrailingSlashes
704 @item --strip-trailing-slashes
705 @opindex --strip-trailing-slashes
706 @cindex stripping trailing slashes
707 @var{source} 引数の後ろにスラッシュが付いていたら、それを削除する。
708 @xref{Trailing slashes}.
711 @macro mayConflictWithShellBuiltIn{cmd}
712 @cindex conflicts with shell built-ins
713 @cindex built-in shell commands, conflicts with
714 シェルの組み込み機能の @command{\cmd\} やエイリアスのために、
715 @command{\cmd\} に何の修飾も付けずに対話的に使ったり、スクリプトの中で使ったりすると、
716 動作がここで述べているものとは違うことがあるかもしれない。
717 シェルによる干渉を避けるためには、@command{env} 経由で @command{\cmd\}
718 を起動すればよい (すなわち、@code{env \cmd\ @dots{}} のようにだ)。
722 @macro multiplierSuffixes{varName}
723 @var{\varName\} は、整数であり、
724 以下に挙げるような何倍かを示す接尾辞を後ろに付けることもできる。接尾辞だけ指定してもよい
725 (訳注: その場合は、1 が前にあるものと見なされる)。
727 @samp{b} => 512 ("blocks")
728 @samp{KB} => 1000 (KiloBytes)
729 @samp{K} => 1024 (KibiBytes)
730 @samp{MB} => 1000*1000 (MegaBytes)
731 @samp{M} => 1024*1024 (MebiBytes)
732 @samp{GB} => 1000*1000*1000 (GigaBytes)
733 @samp{G} => 1024*1024*1024 (GibiBytes)
735 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, @samp{Y} についても同様。
738 @c FIXME: same as above, but no ``blocks'' line.
739 @macro multiplierSuffixesNoBlocks{varName}
740 @var{\varName\} は、整数であり、
741 以下に挙げるような何倍かを示す接尾辞を後ろに付けることもできる。接尾辞だけ指定してもよい
742 (訳注: その場合は、1 が前にあるものと見なされる)。
744 @samp{KB} => 1000 (KiloBytes)
745 @samp{K} => 1024 (KibiBytes)
746 @samp{MB} => 1000*1000 (MegaBytes)
747 @samp{M} => 1024*1024 (MebiBytes)
748 @samp{GB} => 1000*1000*1000 (GigaBytes)
749 @samp{G} => 1024*1024*1024 (GibiBytes)
751 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, @samp{Y} についても同様。
754 @cindex common options
756 いくつかのオプションは、このマニュアルで取り上げるすべてのプログラムで利用することができる。
757 そうしたオプションについては、個々のプログラムで同じ説明を繰り返すことはせず、この場で説明しておく
758 (実のところ、こうしたオプションは、GNU のすべてのプログラムで使用できる (はずである))。
760 @vindex POSIXLY_CORRECT
761 通常、オプションとオペランドは、どんな順番で指定してもよい。
762 プログラムは、すべてのオプションがいかなるオペランドよりも前にあるかのごとく振る舞うようになっている。
763 たとえば、@samp{sort -r passwd -t :} は、@samp{:} が @option{-t}
764 のオプション引数 (option-argument) なので、@samp{sort -r -t : passwd}
765 と同じ動作をする。しかしながら、環境変数 @env{POSIXLY_CORRECT}
766 が設定されている場合は、オプションはオペランドの前に置かなければならない。
767 ただし、オプションとオペランドの順番について、そのコマンドに別の決まりがあるときはこのかぎりではない。
769 若干のプログラムでは、二番目以降のオペランドとして先頭に
770 @samp{-} が付くオペランドが使えると都合がよい。
771 そうしたプログラムでは、@env{POSIXLY_CORRECT} が設定されていない場合でも、
772 オプションをオペランドの前に置く必要がある。
773 そこで、そうしたプログラムの説明には、その旨注意書きを付けておいた。
774 たとえば、@command{env} コマンドのオプションは、オペランドの前に置かなければならない。
775 オペランドとして指定したコマンドが、それ自身のオプションを伴うことがあるからだ。
777 ロングオプションが使えるたいていのプログラムは、誤解の余地がないかぎり、そうしたオプションの省略形を認識する。
778 たとえば、@samp{rmdir --ignore-fail-on-non-empty} は、@samp{rmdir --ignore-fail}
779 という形でも起動できるし、@samp{rmdir --i} でも大丈夫だ。
780 @samp{ls --h} のような誤解の余地のあるオプションは、まさに曖昧だと判定される。
782 このマニュアルで説明するプログラムの中には、@option{--help} や @option{--version}
783 オプションを、それが唯一のコマンドライン引数である場合にしか、認識しないものがある。
784 そうしたプログラムの場合、ロングオプションの省略形は、常に認識されるとはかぎらない。
791 使用法を表示して利用できるすべてのオプションを列挙し、正常終了する。
795 @cindex version number, finding
800 @cindex option delimiter
801 オプション群の末尾を示す。これ以降に引数があれば、それが @samp{-}
802 で始まっている場合でも、オペランドとして扱われる。たとえば、@samp{sort -- -r}
803 は、@file{-r} という名前のファイルから読み込むということである。
807 @cindex standard input
808 @cindex standard output
809 単独の @samp{-} はオペランドであって、オプションのように見えるが、
810 オプションでは全くない。単独の @samp{-} はファイル・オペランドであり、
811 プログラム次第で、標準入力、あるいは標準出力として扱われる。
812 後者は、前後の状況からそれが明らかな場合だ。たとえば、@samp{sort -}
813 は、標準入力から読み込むということであり、ただの @samp{sort} と同じである。
814 使用できないとはっきり断っていないかぎり、@samp{-}
815 は、ファイル名が要求されるいかなるところでもオペランドとして使用することができる。
818 * Exit status:: プログラムが成功したか失敗したかの指標。
819 * Backup options:: バックアップ・オプション (-b と -S)。
820 * Block size:: ブロックサイズ (BLOCK_SIZE と --block-size)。
821 * Floating point:: 浮動小数点数の表現。
822 * Signal specifications:: --signal オプションによるシグナルの指定。
823 * Disambiguating names and IDs:: chgrp, chown, chroot, id における
825 * Random sources:: ランダムデータのソース (--random-source)。
826 * Target directory:: 出力先ディレクトリの指定。
827 * Trailing slashes:: 末尾のスラッシュ (--strip-trailing-slashes)。
828 * Traversing symlinks:: シムリンクをたどる (-H, -L, -P)。
829 * Treating / specially:: --preserve-root や --no-preserve-root の使用。
830 * Special built-in utilities:: 組み込みコマンド @command{break}, @command{:} など。
831 * Standards conformance:: POSIX 規格への準拠。
832 * Multi-call invocation:: Multi-call プログラムの起動。
840 終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。
843 ほとんどすべてのコマンドは、実行すると、整数の終了ステータス
844 (@dfn{exit status}) を返し、それは他のコマンドの動作を変更するために使用することができる。
845 大多数のコマンドにとって、終了ステータス @samp{0} は成功を意味している。
846 失敗は @samp{0} 以外の値によって示され、たいていは @samp{1} だが、
847 非標準的なプラットフォームでは違うこともある。POSIX の規定が、@samp{0}
848 以外であることしか要求していないからである。
850 しかしながら、ここで詳述しているプログラムの中にも、終了ステータスとして上記以外の値を返すものがあり、
851 @samp{0} や @samp{1} という値に別の意味を与えているプログラムさえ、少数ながら存在する。
852 そうした例外的なプログラムとしては、@command{chroot}, @command{env},
853 @command{expr}, @command{nice}, @command{nohup}, @command{numfmt},
854 @command{printenv}, @command{sort}, @command{stdbuf}, @command{test},
855 @command{timeout}, @command{tty} などを挙げることができる。
859 @section バックアップ・オプション
861 @cindex backup options
863 GNU のプログラムの中には、ファイルの新しいバージョンを書き出す前に、
864 もしそうしたければ、バックアップを作成できるものがある
865 (少なくとも @command{cp}, @command{install}, @command{ln}, @command{mv}
866 がそうだ)。下記のオプションは、そうしたバックアップを細かく制御する。
867 こうしたオプションについては、個々のプログラムの説明でも簡単に触れている。
872 @itemx --backup[=@var{method}]
875 @vindex VERSION_CONTROL
876 @cindex backups, making
877 通常では上書きされたり、消去されたりする各ファイルのバックアップを作成する。
878 このオプションを指定しないと、元のバージョンは破棄されるわけだ。
879 作成するバックアップのタイプを決めるには、@var{method} を使用する。
880 @var{method} を指定せずに、このオプションを使った場合は、環境変数
881 @env{VERSION_CONTROL} の値が使用される。@env{VERSION_CONTROL}
882 が設定されていない場合、デフォルトのバックアップタイプは @samp{existing} である。
884 このオプションの短縮形である @option{-b} は、引数を取らないことに注意していただきたい。
885 @option{-b} の使用は、@option{--backup=existing} を使用するのと同じことである。
887 @vindex version-control @r{Emacs variable}
888 このオプションは、Emacs の @samp{version-control} 変数に対応している。
889 すなわち、@var{method} に指定する値は、Emacs で使用される値と同じものである。
890 とは言え、このオプションでは、より説明的な名前も使用できる。
891 @var{method} の有効な値は、以下のものである (他と区別できるならば、省略した表現も使用できる)。
896 @opindex none @r{backup method}
901 @opindex numbered @r{backup method}
902 どんな場合でも番号付きのバックアップを作成する。
906 @opindex existing @r{backup method}
907 番号付きのバックアップがすでに存在する場合は番号付きで、それ以外の場合は単純形式で、ファイルのバックアップを作成する。
908 (訳注: 単純形式というのは、バックアップファイル名に番号を付けない形式である。
909 @option{--suffix=@var{suffix}} の説明を参照。)
913 @opindex simple @r{backup method}
914 どんな場合でも単純形式のバックアップを作成する。@samp{never} と
915 @samp{none} を混同なさらないようにしていただきたい。
919 @item -S @var{suffix}
920 @itemx --suffix=@var{suffix}
923 @cindex backup suffix
924 @vindex SIMPLE_BACKUP_SUFFIX
925 @option{-b} で作成される各バックアップファイルの名前の末尾に
926 @var{suffix} を付ける。このオプションが指定されていない場合は、環境変数
927 @env{SIMPLE_BACKUP_SUFFIX} の値が使用される。@env{SIMPLE_BACKUP_SUFFIX}
928 が設定されていない場合、デフォルトの @var{suffix} は
929 Emacs の場合と同じで、チルダ @samp{~} である。
938 GNU プログラムには、ディスクの使用量を「ブロック数」で表示するものがいくつかある
939 (少なくとも、@command{df}, @command{du},@command{ls} がそうだ)。
940 ブロックのサイズや表示の書式は、使用量をわかりやすくするために、変更することができる。
941 表示に使用されるブロックサイズは、ファイルシステムのブロックサイズとは、
942 無関係である。ブロック数に端数が出る場合は、切り上げて整数にする。
944 @opindex --block-size=@var{size}
947 @vindex DF_BLOCK_SIZE
948 @vindex DU_BLOCK_SIZE
949 @vindex LS_BLOCK_SIZE
950 @vindex POSIXLY_CORRECT@r{, and block size}
952 デフォルトのブロックサイズの選択は、次の環境変数を順番に調べることで行われる。
953 設定されている最初のものがブロックサイズを決めることになる。
958 この環境変数は、@command{df} コマンドで使うデフォルトのブロックサイズを指定している。
959 同様に、@env{DU_BLOCK_SIZE} は @command{du} のデフォルトを、
960 @env{LS_BLOCK_SIZE} は @command{ls} のデフォルトを指定している。
963 この環境変数は、上記のようなコマンド専用の環境変数が設定されていない場合に、
964 三つのコマンドのすべてが使用するデフォルトのブロックサイズを指定している。
967 この環境変数は、上記のようなコマンド専用の環境変数と @env{BLOCK_SIZE} のどちらも設定されていない場合に、
968 通常、ブロック数として表示されるすべての値が使用するデフォルトのブロックサイズを指定している。
969 ほかの環境変数とは違って、@env{BLOCKSIZE} は、たとえば @code{ls -l}
970 の出力に含まれるファイルサイズのような、通常バイト数として表示される値には影響を及ぼさない。
972 @item POSIXLY_CORRECT
973 @env{@var{command}_BLOCK_SIZE}, @env{BLOCK_SIZE}, @env{BLOCKSIZE}
974 のいづれも設定されていず、この変数が設定されている場合は、
975 ブロックサイズのデフォルトは、512 バイトになる。
979 上記の環境変数のいづれも設定されていない場合、
980 ブロックサイズのデフォルトは、現在のところたいていの場合、 1024 バイトである。
981 ただし、この数値は、将来変更されるかもしれない。なお、@command{ls}
982 の表示するファイルサイズについては、ブロックサイズのデフォルトは 1 バイトである。
984 @cindex human-readable output
987 ブロックサイズの指定には、1 ブロックあたりのバイト数を示す正の整数を使えばよい。
988 あるいは、@code{human-readable} や @code{si} を指定して、
989 「人間に読みやすい」書式を選ぶこともできる。
990 整数の後ろには接尾辞 (suffix) を続けてもよい。そうした接尾辞は、単位の前に付けて
991 @samp{10} の累乗倍を表す SI (国際単位系) の接頭辞 (prefix) や、
992 @samp{2} の累乗倍を表す ISO/IEC 80000-13 (以前は IEC 60027-2 だった)
993 の接頭辞の上位互換である。単位の前に付ける接頭辞については、
994 次の URL を参照していただきたい。@*
995 @uref{http://www.bipm.org/en/publications/si-brochure/chapter3.html, SI
997 @uref{http://physics.nist.gov/cuu/Units/binary.html, ISO/IEC 80000-13
1000 「人間に読みやすい」書式の場合、出力するサイズの後ろに、メガバイトなら
1001 @samp{M} といった、大きさを表す文字が続く。@code{BLOCK_SIZE=human-readable}
1002 の方は、1024 の累乗を使うので、@samp{M} は 1,048,576 バイトを意味している。
1003 @code{BLOCK_SIZE=si} も似ているが、こちらは 1000 の累乗を使用し、さらに @samp{B}
1004 という文字を追加する。そこで、@samp{MB} は 1,000,000 バイトを意味することになる。
1007 ブロックサイズの指定の先頭に @samp{'} を付けると、
1008 出力するサイズを数桁ごとに区切って表示することができる。
1009 区切りに使う記号や区切りの位置は、@env{LC_NUMERIC} のロケールによって決まる。
1010 たとえば、アメリカ英語のロケールでは、@samp{--block-size="'1kB"}
1011 と指定すれば、1234000 バイトという容量が @samp{1,234}
1012 と表示されることになるだろう。デフォルトの C ロケールの場合は、
1013 区切り記号が存在しないので、先頭の @samp{'} に効果はない。
1015 ブロックサイズを指定する整数の後ろには、接尾辞を付けて、
1016 その整数の何倍かを示すことができる。大きさを表す (訳注: M, G などの)
1017 文字の後ろに何も続けないときや、@samp{iB} を続けるときは、
1018 1024 の累乗倍ということである。それに対して、大きさを表す文字に
1019 @samp{B} を続ける場合は、1000 の累乗倍ということになる。
1020 たとえば、@samp{1M} や @samp{1MiB} は @samp{1048576} と同じであり、
1021 @samp{1MB} は @samp{1000000} と同じである。
1023 整数を前に付けずに、接尾辞だけを指定したときの動作は、
1024 @samp{1} が前に付いているときとほぼ同じだが、大きさの表示が出力の後ろに付く点が違う。
1025 たとえば、@samp{--block-size="kB"} は、3000 を @samp{3kB} という形で表示する。
1027 以下の接尾辞が定義されている。@code{1Y} のような大きな量は、
1028 算術計算の限界のためにお使いのコンピュータでは使用できないかもしれない。
1032 @cindex kilobyte, definition of
1033 キロバイト (kilobyte): @math{10^3 = 1000} バイト。
1037 @cindex kibibyte, definition of
1038 キビバイト (kibibyte): @math{2^{10} = 1024} バイト。
1039 @samp{K} も使えるのは、おまけである。なお本来、SI の接頭辞
1040 (訳注: すなわち @math{10^3} 倍を表す接頭辞) が @samp{k} であり、
1041 ISO/IEC 80000-13 の接頭辞 (訳注: すなわち @math{2^{10}} 倍を表す接頭辞)
1042 が @samp{Ki} だが、これまでの習慣や POSIX の用法では、
1043 @samp{KiB} の意味で @samp{k} を使っている。
1045 @cindex megabyte, definition of
1046 メガバイト (megabyte): @math{10^6 = 1,000,000} バイト。
1049 @cindex mebibyte, definition of
1050 メビバイト (mebibyte): @math{2^{20} = 1,048,576} バイト。
1052 @cindex gigabyte, definition of
1053 ギガバイト (gigabyte): @math{10^9 = 1,000,000,000} バイト。
1056 @cindex gibibyte, definition of
1057 ギビバイト (gibibyte): @math{2^{30} = 1,073,741,824} バイト。
1059 @cindex terabyte, definition of
1060 テラバイト (terabyte): @math{10^{12} = 1,000,000,000,000} バイト。
1063 @cindex tebibyte, definition of
1064 テビバイト (tebibyte): @math{2^{40} = 1,099,511,627,776} バイト。
1066 @cindex petabyte, definition of
1067 ペタバイト (petabyte): @math{10^{15} = 1,000,000,000,000,000} バイト。
1070 @cindex pebibyte, definition of
1071 ペビバイト (pebibyte): @math{2^{50} = 1,125,899,906,842,624} バイト。
1073 @cindex exabyte, definition of
1074 エクサバイト (exabyte): @math{10^{18} = 1,000,000,000,000,000,000} バイト。
1077 @cindex exbibyte, definition of
1078 エクスビバイト (exbibyte): @math{2^{60} = 1,152,921,504,606,846,976} バイト。
1080 @cindex zettabyte, definition of
1081 ゼタバイト (zettabyte): @math{10^{21} = 1,000,000,000,000,000,000,000} バイト。
1084 ゼビバイト (zebibyte): @math{2^{70} = 1,180,591,620,717,411,303,424} バイト。
1086 @cindex yottabyte, definition of
1087 ヨタバイト (yottabyte): @math{10^{24} = 1,000,000,000,000,000,000,000,000} バイト。
1090 ヨビバイト (yobibyte): @math{2^{80} = 1,208,925,819,614,629,174,706,176} バイト。
1095 @opindex --block-size
1096 @opindex --human-readable
1099 デフォルトのブロックサイズは、コマンドに対して @option{--block-size=@var{size}}
1100 オプションを明示的に指定することで、上書きすることができる。@option{-k}
1101 オプションは、@option{--block-size=1K} と同じであり、環境変数 @env{POSIXLY_CORRECT}
1102 が設定されていないときのデフォルトである。@option{-h} オプションや
1103 @option{--human-readable} オプションは、@option{--block-size=human-readable}
1104 と同じである。@option{--si} オプションは、@option{--block-size=si} と同じだ。
1105 なお、@command{ls} コマンドの場合、
1106 @option{-k} オプションはファイルの見かけのサイズの表示に影響しないのに対し、
1107 @option{--block-size} オプションは影響することに注意していただきたい。
1109 @node Floating point
1111 @cindex floating point
1112 @cindex IEEE floating point
1114 浮動小数点数を受け取ったり、生成したりするコマンドは、
1115 下層で動いているシステムの浮動小数点表現法を使用しており、
1116 丸めエラー、オーバーフローなど、浮動小数点にかかわる問題をかかえている。
1117 最近のシステムでは、ほとんどすべてが IEEE-754 の浮動小数点を採用しているので、
1118 今日では IEEE-754 の動作を想定しておけば、たいていどこでも問題がない。
1119 IEEE-754 には、正と負の無限があり、正と負のゼロを区別する。
1120 また、NaN (訳注: Not a Number) という特別な値を使って、
1121 ゼロをゼロで割るといった無効な演算を表現する。
1122 より詳しい情報については、デイビッド・ゴールドバーグの論文
1123 @uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf,
1124 "What Every Computer Scientist Should Know About Floating-Point Arithmetic"}
1128 浮動小数点数をオプションやオペランドや入力として受け取るコマンドは、
1129 C の標準関数 @code{strtod} や @code{strtold} を使って、
1130 テキストを浮動小数点数に変換している。従って、そうした浮動小数点数には、
1131 @code{1.0e-34} や @code{-10e100} といった指数表現が使用できる。
1132 浮動小数点を解析するコマンドは、大文字小文字を区別しない @code{inf},
1133 @code{infinity},@code{NaN} といった値も理解する。
1134 もっとも、そうした値が役に立つかどうかは、そのコマンド次第だ。
1135 最近の C の実装では、16 進の浮動小数点数も使える。
1136 たとえば、@code{-0x.ep-3} といったものだが、これは @minus{}14/16 掛ける
1137 @math{2^-3} を表し、@minus{}0.109375 に等しい。小数点を表す記号が何になるかは、
1138 @env{LC_NUMERIC} のロケールによって決まる。
1139 @xref{Parsing of Floats,,, libc, The GNU C Library Reference Manual}.
1141 @node Signal specifications
1143 @cindex signals, specifying
1145 @var{signal} の指定には、@samp{HUP} のようなシグナル名や @samp{1} のようなシグナル番号、
1146 それに、シグナルによって終了させられるときのプロセスの終了ステータスを使うことができる
1147 (訳注: 最後のものは、GNU coreutils の @command{kill} コマンドでは使用できるが、
1148 シェルの組み込みコマンドのような、他の系統の @command{kill}
1149 では使えないかもしれない)。シグナル名は、標準的な形式でも、頭に @samp{SIG}
1150 を付けた形式でも構わない。大文字小文字は区別されない。
1151 以下に挙げるシグナル名とシグナル番号は、POSIX の規格に従っているすべてのシステムで使用できる。
1157 2. 端末からの割り込みシグナル (Terminal interrupt)。
1159 3. 端末からの中止シグナル (Terminal quit)。
1161 6. プロセスの中断 (Process abort)。
1163 9. 強制終了 (Kill) (捕獲することも無視することもできない)。
1165 14. アラームクロック (Alarm Clock)。
1167 15. 終了 (Termination)。
1171 これ以外にもサポートされているシグナル名があるが、それに対応するシグナル番号はシステムによって様々である。
1172 POSIX 1003.1-2001 に準拠しているすべてのシステムでは、以下のシグナルも使用できる。
1176 メモリオブジェクトの未定義領域へのアクセス。
1178 チャイルドプロセスが終了 (terminate)、一時停止 (stop)、または再開 (continue) した。
1180 実行が停止 (stop) しているならば、再開 (continue) する。
1190 実行を一時停止する (stop) (捕獲することも無視することもできない)。
1194 バックグラウンドプロセスが端末から読み込もうとしている。
1196 バックグラウンドプロセスが端末へ書き出そうとしている。
1198 高帯域幅のデータがソケットに達している。
1206 XSI 拡張に対応している POSIX 1003.1-2001 のシステムでは、以下のシグナルも使用できる。
1212 プロファイリング・タイマーがタイムアウトした。
1216 Trace/breakpoint トラップ。
1218 バーチャル・タイマーがタイムアウトした。
1226 XRT 拡張に対応している POSIX 1003.1-2001 のシステムでは、上記以外にも、
1227 少なくとも 8 個のリアルタイム・シグナルが使用できる。すなわち、@samp{RTMIN},
1228 @samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX} などだ。
1230 @node Disambiguating names and IDs
1231 @section chown, chgrp, chroot, id: ユーザ名かユーザ ID かを明確にする
1232 @cindex user names, disambiguating
1233 @cindex user IDs, disambiguating
1234 @cindex group names, disambiguating
1235 @cindex group IDs, disambiguating
1236 @cindex disambiguating group names and IDs
1238 @command{chown}, @command{chgrp}, @command{chroot}, @command{id}
1239 といったコマンドでは、引数として @var{owner} や @var{group}
1240 を渡す際に名前で指定しても、ID 番号で指定してもよい。
1241 この指定法が曖昧であることは明らかである。
1242 もし、ユーザ名やグループ名が数字の連続だったら、どうだろう?
1243 @footnote{環境によっては、ユーザ名に数字を使うのは、よくあることである。}
1244 コマンドはそれをユーザ名と解釈すべきだろうか? ID 番号と解釈すべきだろうか?
1245 POSIX では、「こうしたコマンドは、指定された文字列をまず名前として解決することを試み、
1246 それに失敗した場合のみ、ID 番号として解釈しようとすること」と規定している。
1247 この規定では、ユーザが引数として ID 番号、たとえば 42 を指定しようとすると、
1248 面倒な話になる。42 というユーザ名が存在し、それにユーザ ID 番号として別の数字、
1249 たとえば 1000 が割り当てられているといったややこしい状況でも、
1250 うまく処理できなければならないとすると、厄介なことになるのだ。
1251 単に @code{chown 42 F} を実行したのでは、ファイル @file{F} の所有者の
1252 ID 番号が 1000 になってしまう。これはユーザが意図した動作ではない。
1254 GNU の @command{chown}, @command{chgrp}, @command{chroot},@command{id}
1255 は、この問題に対する回避策を用意している。この回避策を使用すると、
1256 データベースの検索を省略するので、処理速度が著しく向上することがあるというおまけまで付く。
1257 ユーザやグループに ID 番号を指定する際には、
1258 その前に @samp{+} を付けさえすればよいのだ。
1259 そうすることで、整数として解釈するように強制できるのである。
1263 chgrp +$numeric_group_id another-file
1267 @samp{+} が前に付く各文字列に対しては、ユーザ名の検索プロセスが省略される。
1268 何故なら、@samp{+} を含む文字列が有効なユーザ名やグループ名であることは絶対にないからだ。
1269 この書き方は、よく使われているたいていの Unix システムで使用できるが、Solaris 10 では使用できない。
1271 @node Random sources
1272 @section ランダムデータのソース
1274 @cindex random sources
1276 @command{shuf}, @command{shred}, @command{sort} コマンドは、
1277 作業を行うためにランダムデータを必要とすることがある。たとえば、@samp{sort -R}
1278 ではハッシュ関数をランダムに選ばねばならず、その選択のためにランダムデータを必要としている。
1280 デフォルトでは、こうしたコマンドは、プログラム内部の擬似乱数ジェネレータを、
1281 少量のエントロピーによって初期化して使用するが、
1282 @option{--random-source=@var{file}} オプションで、
1283 外部ソースを使うように指示することもできる。
1284 @var{file} の中身のバイト数が不十分なときは、エラーが通知される。
1286 たとえば、デバイスファイル @file{/dev/urandom} を、
1287 ランダムデータのソースとして使用してもよい。通常、このデバイスは、
1288 デバイスドライバーなどのソースから環境ノイズを集めて、エントロピー・プールに入れ、
1289 そのプールを使って、ランダムなビットを生成する。プールにデータが足りない場合は、
1290 内部プールを再利用し、暗号的に安全な擬似乱数ジェネレータを使って、
1292 とは言え、このデバイスは、大量のランダムデータの生成のために設計されたものではなく、
1293 比較的動作が遅いことは、承知しておいた方がよい。
1295 たいていの実用には、@file{/dev/urandom} で十分だが、
1296 プライベートなデータの高度で長期に渡る保護が必要になるアプリケーションでは、
1297 @file{/dev/random} や @file{/dev/arandom} のような他のデータソースが必要になるかもしれない。
1298 どんなデータソースが利用できるかは、ご使用のオペレーティング・システム次第だ。
1300 前回コマンドを実行したときの結果を再現するには、
1301 何らかのランダムデータをファイルに保存しておき、
1302 そのコマンドの一回目の実行でも二回目の実行でも、
1303 ランダムソースとしてそのファイルを使用すればよい。
1305 ファイルを使用する代わりに、たとえば、次のような方法を使っても、
1306 ある値を種として与えたときの、再現性のある適当な量の擬似ランダムデータを生成することができる。
1312 openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
1313 </dev/zero 2>/dev/null
1316 shuf -i1-100 --random-source=<(get_seeded_random 42)
1319 @node Target directory
1322 @cindex target directory
1324 通常、@command{cp}, @command{install}, @command{ln}, @command{mv}
1325 といったコマンドは、最後のオペランドがディレクトリやディレクトリへのシンボリックリンクの場合、
1326 それを特別扱いする。たとえば、@samp{cp source dest} は、@file{dest}
1327 がディレクトリならば、@samp{cp source dest/source} と同じことである。
1328 時には、そうした動作が、ユーザが求めている動作とは違うこともある。
1329 そこで、こうしたコマンドは、よりきめ細かな制御ができるように、
1335 @itemx --no-target-directory
1336 @opindex --no-target-directory
1337 @cindex target directory
1338 @cindex destination directory
1339 最後のオペランドが、ディレクトリやディレクトリへのシンボリックリンクであっても、
1340 それを特別扱いしない。このオプションは、共有領域で作業する複数のプログラムが、
1342 たとえば、@samp{mv /tmp/source /tmp/dest} というコマンドが正常終了しても、
1343 @file{/tmp/source} が @file{/tmp/dest} にリネームされたという保証はない。
1344 もし、何かほかのプロセスが @file{/tmp/dest} をディレクトリとして作成していたら、
1345 @file{/tmp/dest/source} という名前のファイルになってしまうかもしれないのだ。
1346 それに対して、@file{mv -T /tmp/source /tmp/dest} が正常終了した場合は、
1347 @file{/tmp/source} は間違いなく @file{/tmp/dest} にリネームされている。
1349 反対に、最後のオペランドをディレクトリとして扱わせたい、
1350 それができない場合は、エラーメッセージを出したい、ということもある。
1351 そういうときは、@option{--target-directory} (@option{-t}) オプションを使用すればよい。
1352 (訳注: ターゲット・ディレクトリをコマンドラインの最後に置く代わりに、
1353 @option{--target-directory} オプションの引数にするということである。)
1355 @item -t @var{directory}
1356 @itemx --target-directory=@var{directory}
1357 @opindex --target-directory
1358 @cindex target directory
1359 @cindex destination directory
1360 @var{directory} を、出力されるファイルすべてのディレクトリ部分として使用する。
1362 ほとんどのプログラムで、コマンドラインの扱いは次のようになっている。
1363 オプションや、一定数の (0 個のこともある) 位置の固定した引数の処理が終われば、
1364 引数リストにはもう何も残っていないか、残っているとすれば、
1365 それはすべて同じように処理されることになる項目 (通常はファイル) のリストのはずある。
1366 @command{xargs} プログラムは、こうした約束ごとに沿ってうまく動くように作られている。
1368 @command{mv} ファミリーのコマンドが変わっているのは、引数の数が不定であり、
1369 しかも最後の引数を特別扱いするという点である (すなわちターゲット・ディレクトリとして扱う)。
1370 そのため、ある種の作業の実行は、一筋縄ではいかない。
1371 たとえば、「すべてのファイルをここから ../d/ に移動する」がそうだ。
1372 何故なら、@code{mv * ../d/} では、引数を入れておくための領域を使い切ってしまうかもしれないし、
1373 そうかと言って、@code{ls | xargs ...} には、実行対象コマンド (訳注: ここでは、@command{mv})
1374 を起動するたびに最後の引数を特別に指定するためのすっきりした方法がないからである。
1375 (あるシェル・コマンドを駆使すれば、やることができるが、それでは、人間の労力と脳力を過当に要求することになる。)
1377 @option{--target-directory} (@option{-t}) オプションを使用すると、
1378 @command{cp}, @command{mv}, @command{ln}, @command{install}
1379 といったプログラムを @command{xargs} と一緒に使うとき、たいへん都合がよい。
1380 たとえば、カレントディレクトリから、同じディレクトリ階層にある
1381 @code{d} ディレクトリへファイルを移動するには、こんなふうにすればよい。
1384 ls | xargs mv -t ../d --
1387 しかし、これでは、ファイル名の先頭に @samp{.} の付くファイルが移動しない。
1388 GNU @command{find} プログラムを使用しているなら、
1389 次のコマンドでそうしたファイルも移動させることができる。
1392 find . -mindepth 1 -maxdepth 1 \
1396 とは言え、上記のどちらの方法も、カレントディレクトリにファイルが一つもない場合や、
1397 空白などの特殊文字を名前に含むファイルがある場合には、うまく行かない。
1398 次の例はそうした制限を一掃しているが、GNU @command{find} と
1399 GNU @command{xargs} の両方が必要である。
1402 find . -mindepth 1 -maxdepth 1 -print0 \
1403 | xargs --null --no-run-if-empty \
1410 @option{--target-directory} (@option{-t}) オプションと
1411 @option{--no-target-directory} (@option{-T}) オプションを一緒に使うことはできない。
1413 @node Trailing slashes
1416 @cindex trailing slashes
1418 いくつかの GNU プログラム (少なくとも、@command{cp} と @command{mv}) では、
1419 @var{source} 引数を処理する前に、その引数の末尾にスラッシュが付いていたら、
1420 それを除去することができるようになっている。@option{--strip-trailing-slashes}
1421 オプションを使用することによって、この動作が有効になる。
1423 @c FIXME: mv's behavior in this case is system-dependent
1424 これが役に立つのは、@var{source} 引数の末尾にスラッシュが付いていて、
1425 しかも、その引数がディレクトリへのシンボリックリンクを指定しているかもしれないときだ。
1426 そうした状況は、実のところ、それほど珍しくない。
1427 と言うのも、シェルの中には、そうしたシンボリックリンクに対してファイル名の補完を行うとき、
1428 末尾にスラッシュを自動的に付加するものがあるからだ。
1429 このオプションを指定しないと、たとえば @command{mv} は、(システムの
1430 rename 関数を通してだが、) 末尾にスラッシュが付いていることを、
1431 「シンボリックリンクの参照をたどれ」という指示として解釈しなければならず、
1432 その結果、シンボリックリンクではなく、間接的に参照されているディレクトリの方をリネームしなければならなくなる。
1433 こうした動作がデフォルトになっているのは意外に思えるかもしれないが、POSIX
1434 で要求されている動作であり、POSIX 規格のほかの部分とも首尾一貫している。
1436 @node Traversing symlinks
1437 @section シンボリックリンクをたどる
1439 @cindex symbolic link to directory, controlling traversal of
1441 @c FIXME: note that 'du' has these options, too, but they have slightly
1442 @c different meaning.
1443 以下のオプションは、@option{--recursive} (@option{-R})
1444 オプションも同時に指定されているとき、@command{chown} コマンドや @command{chgrp}
1445 コマンドがディレクトリ階層をどうたどるか、そのたどり方を変更する。
1446 以下のオプションを複数個指定した場合は、最後に指定したものだけが効果を持つ。
1447 こうしたオプションが指定しているのは、ディレクトリに対するシンボリックリンクを処理する際に、
1448 そのシンボリックリンクそのものを操作の対象にするのか、
1449 それとも、そのディレクトリ以下の階層にあるすべてのファイルを操作の対象にするのかということである。
1451 こうしたオプションは、@option{--dereference} や @option{--no-dereference}
1452 (@option{-h})とは、全く別のものである。あちらは、シンボリックリンクを変更するのか、
1453 それとも、その参照先を変更するのかを制御している。
1460 @cindex symbolic link to directory, traverse if on the command line
1461 @option{--recursive} (@option{-R}) オプションが指定されている場合に、
1462 コマンドラインで指定された引数がディレクトリへのシンボリックリンクならば、それをたどる。
1469 @cindex symbolic link to directory, traverse each that is encountered
1470 ディレクトリ階層を再帰的にたどっている際に、
1471 ディレクトリへのシンボリックリンクに出会ったら、必ずそれをたどる。
1478 @cindex symbolic link to directory, never traverse
1479 シンボリックリンクを一切たどらない。これが、@option{-H}, @option{-L}, @option{-P}
1480 のどれも指定されていないときの、デフォルトである。
1487 @node Treating / specially
1488 @section @file{/} (ルート) を特別扱いする
1490 ある種のコマンドは、ディレクトリ階層全体に対して破壊的な作用を及ぼす可能性がある。
1491 たとえば、しかるべき特権を持ったユーザが、@samp{rm -rf / tmp/junk}
1492 を誤って実行したら、システム全体のすべてのファイルが消えてしまうかもしれないのだ。
1493 そうしたコマンドの使用が正当であることは、めったにないので、GNU の @command{rm}
1494 は、@file{/} に還元されるようないかなるディレクトリに対しても、通常では、操作を拒否するようになっている。
1495 もし、本当にシステムのすべてのファイルを消去しようと思うのなら、
1496 @option{--no-preserve-root} オプションを使用すればよい。
1497 とは言え、ほとんどの用途で、デフォルトの動作 (明示的に指定するには、
1498 @option{--preserve-root} オプションを使う) の方が安全である。
1500 @command{chgrp}, @command{chmod}, @command{chown}
1501 などのコマンドも、ディレクトリ階層全体に対して破壊的な作用を及ぼす可能性がある。
1502 従って、こうしたコマンドもまた、上記のオプションをサポートしている。
1503 こうしたコマンドは、@command{rm} とは違って、ファイルを実際に削除してしまうわけではないが、
1504 @file{/} から再帰的に働くときは、一層危険だと言うこともできる。
1505 と言うのは、たいていの場合、処理速度がずっと早いので、
1506 注意力のあるユーザがコマンドを中断できるより前に、@command{rm}
1507 の場合より、もっと多くのファイルに被害を与えてしまうからだ。Unix の習慣も
1508 POSIX の規格も、こうしたコマンドが @file{/} から再帰的に働くことを要求している。
1509 それ故、デフォルトが @option{--no-preserve-root} になっているのだが、
1510 こうしたコマンドは、@option{--preserve-root} オプションを使った方が、ほとんどの用途でより安全である。
1511 面倒ならば、エイリアスか、シェル関数を作って、@option{--preserve-root} を指定しておけばよいのだ。
1513 また、@option{--preserve-root} を指定すると、@file{/}
1514 を指しているシンボリックリンクの参照をたどる場合でも、@command{chgrp} や
1515 @command{chown} が、@file{/} のグループや所有者を変更しなくなることも、憶えておいていただきたい。
1516 (訳注: @command{chgrp} や @command{chown} の解説を見ていただけばわかるが、
1517 これは、@option{--recursive} (@option{-R}) を同時に使っているときの話である。)
1519 @node Special built-in utilities
1520 @section 特殊ビルトイン・ユーティリティ
1522 プログラムの中には、@command{nice} のように、ほかのプログラムを起動できるものがある。
1523 たとえば、@samp{nice cat file} というコマンドは、コマンド @samp{cat file}
1524 を実行することによって、@command{cat} プログラムを起動する。しかしながら、@command{exit}
1525 のような特殊ビルトイン・ユーティリティ (@dfn{special built-in utilities})
1526 は、この方法で起動することができない。一例を挙げれば、@samp{nice exit}
1527 というコマンドは、どんな動作をするかが明確に定義されていない。
1528 終了する代わりに、エラーメッセージを出すかもしれないのだ。
1530 POSIX 1003.1-2004 の規格では、特殊ビルトイン・ユーティリティとして次のものを挙げている。
1533 @t{.@: : break continue eval exec exit export readonly return set shift times
1537 たとえば、@samp{.}, @samp{:}, @samp{exec} は、特殊ビルトイン・ユーティリティなので、
1538 @samp{nice . foo.sh}, @samp{nice :}, @samp{nice exec pwd} といったコマンドの動作は、
1539 読者が予想なさるかもしれないようなものにはならない。
1541 (訳注: exec, exit など対して、同じシェルの組み込みコマンドでも、cd,
1542 alias, fg, kill, pwd, true, umask などは、通常ビルトイン・ユーティリティ
1543 ("regular built-in utilities") と呼ばれている。
1544 もっとも、nice などから実行できないという点では、
1545 特殊ビルトイン・ユーティリティも通常ビルトイン・ユーティリティも変わりがない。
1546 nice などから起動できるとすれば、それは同名の実行ファイルが存在するからだ)。
1548 多くのシェルは、上記のリストを拡張している。
1549 たとえば、bash では、@command{history} や @command{suspend}
1550 といったコマンドが特殊ビルトイン・ユーティリティに追加されている。
1551 そこで、bash の場合、@samp{nice suspend} というコマンドを実行すると、
1552 シェルのサスペンドは起こらず、エラーメッセージが出力される。
1554 @node Standards conformance
1557 @vindex POSIXLY_CORRECT
1558 GNU ユーティリティのデフォルトの動作が POSIX の規格と一致しない場合が、若干ながら存在する。
1559 そうした非互換性を抑制するには、環境変数 @env{POSIXLY_CORRECT} を設定すればよい。
1560 もっとも、POSIX に準拠しているか否かを点検しているのでもないかぎり、
1561 @env{POSIXLY_CORRECT} を設定する必要は、おそらくないだろうが。
1563 POSIX の新しいバージョンが、古いバージョンと非互換であることが、
1564 ときどきある。たとえば、POSIX の古いバージョンでは、@samp{sort +1} というコマンドは、
1565 各入力行の二番目以後のフィールドに基づいて、行の並べ替えを行うことになっていた。
1566 ところが、POSIX 1003.1-2001 では、同じコマンドが @file{+1}
1567 という名前のファイルの行を並べ替えることになっており、
1568 フィールドに基づいた並べ替えを行うには、@samp{sort -k 2}
1569 という別のコマンドを使わなければならないのだ。
1570 そして、さらにややこしいことに、POSIX 1003.1-2008
1571 では、古い動作と新しい動作のどちらをする実装も認められている。
1573 @vindex _POSIX2_VERSION
1574 通常 GNU のユーティリティは、お使いのシステムが規格として採用している
1575 POSIX のバージョンに従っている。GNU ユーティリティを
1576 POSIX の別のバージョンに準拠させるには、環境変数 @env{_POSIX2_VERSION}
1577 を設定すればよい。この環境変数の値は、@var{yyyymm} という形式であり、
1578 その規格が何年の何月に採択されたかを示している。@env{_POSIX2_VERSION}
1579 の値としては、現在のところ、次の三つがサポートされている。すなわち、@samp{199209},
1580 @samp{200112}, @samp{200809} であり、それぞれ POSIX 1003.2-1992,
1581 POSIX 1003.1-2001, POSIX 1003.1-2008 を表している。
1582 一例を挙げよう。御使用のシステムが POSIX 1003.1-2001
1583 に準拠しているのに、動かしているソフトウェアが @samp{sort +1} や @samp{tail +10}
1584 といった旧来の用法も持っている場合には、環境に @samp{_POSIX2_VERSION=200809}
1585 を設定することで、互換性の問題を回避することができる。
1587 @c This node is named "Multi-call invocation", not the usual
1588 @c "coreutils invocation", so that shell commands like
1589 @c 'info coreutils "touch invocation"' work as expected.
1590 @node Multi-call invocation
1591 @section @command{coreutils}: Multi-call プログラム
1595 @cindex calling combined multi-call program
1597 @command{coreutils} コマンドは個々のユーティリティ・プログラムを呼び出す。
1598 呼び出されるユーティリティ・プログラムは、@command{coreutils}
1599 を呼び出すために使ったファイル名の最後の要素によって自動的に選ばれたものか、
1600 あるいは、@option{--coreutils-prog} オプションを使って明示的に指定されたものである。
1605 coreutils @option{--coreutils-prog=PROGRAM} @dots{}
1608 @command{coreutils} は、デフォルトではインストールされない。
1609 従って、移植を考慮したスクリプトでは、その存在を当てにしない方がよい。
1611 (訳注: 少し説明が必要だろう。coreutils 8.23 以来、ls, sort
1612 など、個々のバイナリを作るのではなく、coreutils という一つの大きなバイナリを作り、
1613 ls, sort などは、言わば coreutils のビルトイン・コマンドとして呼び出すことができるようになった。
1614 つまり、ls は今までどおり @samp{ls} や @samp{/bin/ls} でも起動できれば、
1615 @samp{coreutils --coreutils-prog=ls} でも起動できるということである。
1616 前者の場合のベースネームの ls が、本文で言う「@command{coreutils}
1617 を呼び出すために使ったファイル名の最後の要素」に当たるわけだ。
1618 もちろん、今でも個々のコマンドを独立したバイナリとして作ることもでき、
1619 その場合は、たぶん @command{coreutils} というコマンドは存在しないことになる。
1620 詳しくは、coreutils パッケージに含まれる NEWS ファイルをご覧いただきたい。)
1622 @node Output of entire files
1625 @cindex output of entire files
1626 @cindex entire files, output of
1628 次のコマンドはファイル全体を読み込んで、書き出す。
1629 内容に対して何らかの変換を行うこともある。
1632 * cat invocation:: ファイルを結合して、書き出す。
1633 * tac invocation:: ファイルを結合し、ファイルごとに逆順で書き出す。
1634 * nl invocation:: 行番号を付けて、ファイルを書き出す。
1635 * od invocation:: ファイルを 8 進数などの形式で書き出す。
1636 * base32 invocation:: データを ASCII 文字で表示可能なデータに変換する。
1637 * base64 invocation:: データを ASCII 文字で表示可能なデータに変換する。
1640 @node cat invocation
1641 @section @command{cat}: ファイルを結合して、書き出す
1644 @cindex concatenate and write files
1645 @cindex copying files
1647 @command{cat} は、各 @var{file} (@samp{-} は標準入力を意味する) を標準出力にコピーする。
1648 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1653 cat [@var{option}] [@var{file}]@dots{}
1656 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1667 @itemx --number-nonblank
1669 @opindex --number-nonblank
1670 空行以外のすべての出力行に、1 から始まる番号を付ける。
1679 @opindex --show-ends
1680 各行の末尾に @samp{$} 記号を付ける。
1686 すべての出力行に、1 から始まる番号を付ける。このオプションは、@option{-b}
1690 @itemx --squeeze-blank
1692 @opindex --squeeze-blank
1693 @cindex squeezing empty lines
1694 @cindex squeezing blank lines
1695 連続する空行の表示を抑制する。すなわち、連続する複数の空行の代わりに、
1705 @opindex --show-tabs
1706 TAB 文字を @samp{^I} と表示する。
1710 無視される。POSIX との互換のためにある。
1713 @itemx --show-nonprinting
1715 @opindex --show-nonprinting
1716 LFD と TAB 以外の制御文字を @samp{^} 表記を使って表示する。
1717 高位ビットのセットされている文字の前には、@samp{M-} を付ける。
1721 テキストファイルとバイナリファイルを区別する MS-DOS のようなシステムでは、
1722 @command{cat} は通常、バイナリモードで読み書きを行う。
1723 しかしながら、@option{-bensAE} といったオプションの一つが使われている場合や、
1724 読み込みの対象が標準入力で、しかも、標準入力が端末である場合は、@command{cat}
1725 はテキストモードで読み込みを行う。同様に出力においても、@option{-bensAE}
1726 といったオプションの一つが使用されていたり、標準出力が端末である場合は、
1727 @command{cat} はテキストモードで書き出しを行う。
1734 # f の内容、標準入力、g の内容の順で出力する。
1742 @node tac invocation
1743 @section @command{tac}: ファイルを結合し、ファイルごとに逆順で書き出す
1746 @cindex reversing files
1748 @command{tac} は、各 @var{file} (@samp{-} は標準入力を意味する) を、@var{file} ごとにレコード
1749 (records、デフォルトでは行) の順番を逆にして、標準出力にコピーする。
1750 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1755 tac [@var{option}]@dots{} [@var{file}]@dots{}
1758 レコード (@dfn{records}) は、ある文字列 (デフォルトでは改行)
1759 が出現することによって区切られる。出力の際、デフォルトでは、この区切り文字列は、
1760 ファイル中でその区切り文字列の直前にあるレコードの末尾に付加される。
1762 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1770 出力の際、区切り文字列は、ファイル中でその区切り文字列の直後に来るレコードの先頭に付加される。
1778 @item -s @var{separator}
1779 @itemx --separator=@var{separator}
1781 @opindex --separator
1782 改行の代わりに @var{separator} をレコード区切り文字列 (record separator)
1783 として使用する。注意すべきは、@var{separator} に空文字列を指定すると、
1784 ゼロバイトを指定したことになることだ。すなわち、入出力レコードが
1785 ASCII NUL で区切られることになる。
1789 テキストファイルとバイナリファイルを区別する MS-DOS のようなシステムでは、
1790 @command{tac} はバイナリモードで読み書きを行う。
1803 @section @command{nl}: 行番号を付けて、ファイルを書き出す
1806 @cindex numbering lines
1807 @cindex line numbering
1809 @command{nl} は、各 @var{file} (@samp{-} は標準入力を意味する)
1810 を、すべての行、または、一部の行に行番号を付けて、標準出力に書き出す。
1811 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1816 nl [@var{option}]@dots{} [@var{file}]@dots{}
1819 @cindex logical pages, numbering on
1820 @command{nl} は、入力を (論理) ページセクションに分解する。
1821 デフォルトでは、行番号は各論理ページセクションで 1 にリセットされる。
1822 @command{nl} は、すべての入力ファイルをまとめて、一つのドキュメントとして扱う。
1823 従って、入力ファイルが変わるたびに、論理ページや行番号をリセットすることはない。
1825 @cindex headers, numbering
1826 @cindex body, numbering
1827 @cindex footers, numbering
1828 論理ページは、三つのセクションからなる。すなわち、ヘッダ、本文、フッタである。
1830 セクションごとに他のセクションとは異なる番号付けの方式を選ぶこともできる。
1832 入力ファイル中で論理ページの各セクションが始まる位置を指示するには、
1833 以下の区切り文字列の一つのみからなる行を使用する。
1844 上記の文字列を構成する二文字は、オプションを使って (下記参照)、@samp{\}
1845 と @samp{:} の組み合わせ以外のものに、変更することができる。
1846 だが、各文字列のパターンや長さは、変えることができない。
1848 セクションの区切りは、出力では空行に置き換えられる。
1849 入力ファイル中の最初のセクション区切り文字列より前にあるテキストは、
1850 いかなるテキストも、本文セクションの一部と見なされる。
1851 従って、@command{nl} は、セクションの区切りを全く含まないファイルを、一個の本文セクションとして扱う。
1853 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1857 @item -b @var{style}
1858 @itemx --body-numbering=@var{style}
1860 @opindex --body-numbering
1861 各論理ページの本文セクションにおける行の番号付けの方式を選択する。
1862 行に番号が付かない場合、行番号の現在値は増加しないが、それでも行番号の区切り文字は行の前に付く
1863 (訳注: ここで言う行番号の区切り文字 (line number separator character)
1864 とは、行番号とテキストの区切り文字ではなく、行番号を揃えるために行頭と行番号との間に置かれる空白のことらしい)。
1871 空ではない行にのみ番号を振る (本文のデフォルト)。
1873 行番号を付けない (ヘッダとフッタのデフォルト)。
1875 基本正規表現 @var{bre} にマッチする部分を含む行にのみ番号を振る。
1876 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep
1881 @itemx --section-delimiter=@var{cd}
1883 @opindex --section-delimiter
1884 @cindex section delimiters of pages
1885 セクションの区切り文字を @var{cd} にする。デフォルトは @samp{\:}。
1886 @var{c} のみを指定すると、二番目の文字は、デフォルトと同じ @samp{:} になる。
1887 (@samp{\} などのメタ文字は、シェルが展開しないように、引用符やバックスラッシュで保護するのをお忘れなく。)
1889 @item -f @var{style}
1890 @itemx --footer-numbering=@var{style}
1892 @opindex --footer-numbering
1893 @option{--body-numbering} と同様。
1895 @item -h @var{style}
1896 @itemx --header-numbering=@var{style}
1898 @opindex --header-numbering
1899 @option{--body-numbering} と同様。
1901 @item -i @var{number}
1902 @itemx --line-increment=@var{number}
1904 @opindex --line-increment
1905 行番号を @var{number} づつ増やす (デフォルトは 1)。
1907 @item -l @var{number}
1908 @itemx --join-blank-lines=@var{number}
1910 @opindex --join-blank-lines
1911 @cindex empty lines, numbering
1912 @cindex blank lines, numbering
1913 空行にも番号を付けるとき、連続する @var{number} (デフォルトは 1) 行の空行を
1914 1 論理行と数え、最後の空行にのみ番号を振る。連続する空行が
1915 @var{number} 行未満のときは、番号を振らない。
1916 空行というのは、文字を全く含まない、スペースやタブさえも含まない行のことである。
1918 @item -n @var{format}
1919 @itemx --number-format=@var{format}
1921 @opindex --number-format
1922 行番号付けのフォーマットを選択する (デフォルトは @code{rn})。
1926 @opindex ln @r{format for @command{nl}}
1929 @opindex rn @r{format for @command{nl}}
1932 @opindex rz @r{format for @command{nl}}
1937 @itemx --no-renumber
1939 @opindex --no-renumber
1940 論理ページの先頭で行番号をリセットしない。
1942 @item -s @var{string}
1943 @itemx --number-separator=@var{string}
1945 @opindex --number-separator
1946 出力中で行番号とテキスト部分との区切りに @var{string} を使う (デフォルトはタブ文字)。
1948 @item -v @var{number}
1949 @itemx --starting-line-number=@var{number}
1951 @opindex --starting-line-number
1952 各論理ページで行番号を @var{number} から始める (デフォルトは 1)。
1954 @item -w @var{number}
1955 @itemx --number-width=@var{number}
1957 @opindex --number-width
1958 行番号に @var{number} 個の文字を使用する (デフォルトは 6 文字)。
1966 @section @command{od}: ファイルを 8 進数などの形式で書き出す
1969 @cindex octal dump of files
1970 @cindex hex dump of files
1971 @cindex ASCII dump of files
1972 @cindex file contents, dumping unambiguously
1974 @command{od} は、各 @var{file} (@samp{-} は標準入力を意味する) の内容を、
1975 曖昧さの余地がない形で標準出力に書き出す。@var{file} が一つも指定されていない場合は、
1981 od [@var{option}]@dots{} [@var{file}]@dots{}
1982 od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]]
1983 od [@var{option}]@dots{} --traditional [@var{file}]@c
1984 [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1987 各出力行の構成は、入力中の位置をオフセットで表したものの後に、
1988 ファイルのデータをいくつかのまとまりに分けたものが続くという形になっている。
1989 デフォルトでは、@command{od} はオフセットを 8 進数で表示する。
1990 ファイル・データの個々のまとまりは、入力を C 言語の @code{short int}
1991 ごとに分けたものであり、1 個の 8 進数として表示される。
1993 @var{offset} を指定した場合、それは、整形と出力を始める前に、
1994 入力を何バイト読み飛ばすかを示している。デフォルトでは、@var{offset}
1995 は 8 進数と見なされるが、数字の後ろに小数点を付ければ、10 進数と見なされる。
1996 小数点が指定されず、オフセットの数字が @samp{0x} や @samp{0X} で始まっている場合は、
1997 16 進数として解釈される。もし、数字の後ろに @samp{b} が付いているならば、
1998 読み飛ばすバイト数は、@var{offset} に 512 を掛けたものになる。
2000 (訳注: 数字の後ろに小数点を付けることで @var{offset}
2001 が 10 進数であることを示す方法は、現在では無効のようである。
2002 オフセットを 10 進数で指定したければ、@option{-j} オプションを使用した方がよい。)
2004 コマンドが「書式」における第一の型と第二の型のどちらとも取れるときは、
2005 最後のオペランドが @samp{+} で始まっている場合や、オペランドが 2 個で
2006 2 番目のオペランドが数字で始まっている場合は、第二の型だと見なされる。
2007 たとえば、@samp{od foo 10} や @samp{od +10} では、@samp{10} はオフセットである。
2008 それに対して、@samp{od 10} では、@samp{10} はファイル名である。
2010 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2014 @item -A @var{radix}
2015 @itemx --address-radix=@var{radix}
2017 @opindex --address-radix
2018 @cindex radix for file offsets
2019 @cindex file offset radix
2020 ファイル・オフセットの表示に使う基数を選択する。@var{radix} には、
2036 @item --endian=@var{order}
2038 @cindex byte-swapping
2040 入力のバイトオーダーを変更する。入力を別のバイトオーダーで扱うため、
2041 あるいは、使用システムのエンディアン方式にとらわれない一貫した出力を生成するために使用する。
2042 変換は、@option{--type} で指定されたサイズと @var{order} のエンディアンに従って行われる。
2043 @var{order} には、@samp{little} または @samp{big} が指定できる。
2045 @item -j @var{bytes}
2046 @itemx --skip-bytes=@var{bytes}
2048 @opindex --skip-bytes
2049 整形と出力を行う前に、入力を @var{bytes} バイト読み飛ばす。@var{bytes} が @samp{0x}
2050 や @samp{0X} で始まっている場合は、16 進数と見なされる。
2051 @samp{0} のみで始まっている場合は、8 進数だ。どちらでもない場合は、10 進数である。
2052 @multiplierSuffixes{bytes}
2054 @item -N @var{bytes}
2055 @itemx --read-bytes=@var{bytes}
2057 @opindex --read-bytes
2058 入力から最大で @var{bytes} バイト出力する。@code{bytes} に接頭辞や接尾辞を付けると、
2059 @option{-j} オプションの場合と同じように解釈される。
2061 @item -S @var{bytes}
2062 @itemx --strings[=@var{bytes}]
2065 @cindex string constants, outputting
2066 通常の出力はせず、文字列定数 (@dfn{string constants}) のみを出力する。
2067 すなわち、@var{bytes} バイト以上の連続する ASCII 表示文字で、ゼロバイト
2068 (ASCII NUL) が続くものを出力するわけだ。@var{bytes} に接頭辞や接尾辞を付けると、
2069 @option{-j} オプションの場合と同じように解釈される。
2071 @option{--strings} に続く @var{bytes} が省略された場合、デフォルトは 3 である。
2072 (訳注: 短縮形の @option{-S} では @var{bytes} を省略できない。)
2075 @itemx --format=@var{type}
2079 @var{type} は、1 個以上の下記の形式指定文字からなる文字列である。
2080 一つの @var{type} 文字列に複数の形式指定文字が含まれている場合や、
2081 このオプションを複数回使用した場合は、@command{od} は出力行ごとに、
2082 指定された各データ形式で表現したその行を、指定された順番で書き出す。
2084 どんな形式指定であれ、その最後に ``z'' を付けると、
2085 形式指定によって生成された出力行の後ろに、
2086 表示可能文字を 1 バイト文字によって表現したものが、出力される。
2090 文字の名称 (訳注: たとえば、A は A、改行文字は nl)。最上位ビットは無視する。
2092 表示可能な 1 バイト文字、C 言語のバックスラッシュ・エスケープ、
2097 浮動小数点数 (@pxref{Floating point})
2106 @code{a} 形式の出力では、空白文字は @samp{sp}、改行文字は @samp{nl}、ゼロバイトは
2107 @samp{nul} といった具合に表現される。このとき、各バイトの下位 7 ビットのみが使われ、
2108 最上位ビットは無視される。@code{c} 形式の出力では、上記の例は、それぞれ
2109 @samp{ }、@samp{\n}、@code{\0} になる。
2112 @samp{a} と @samp{c} 形式を除き、形式指定文字の後ろに
2113 10 進数の整数を続けることによって、入力データの各数値を読み込んで、
2114 指定されたデータ形式に変換して行く際に、何バイトづつ使用するかを指定することができる。
2115 あるいは、形式指定文字の後ろに以下の文字の一つを続けることによって、
2116 C コンパイラの組み込みデータ型のいづれかのサイズを指定することも可能だ。
2117 すなわち、整数 (@samp{d}, @samp{o}, @samp{u}, @samp{x})
2131 浮動小数点数 (@code{f}) に対しては、次のものが使用できる。
2143 @itemx --output-duplicates
2145 @opindex --output-duplicates
2146 連続する行が同一であっても出力する。デフォルトでは、出力する行が、
2147 二行以上連続して全く同一になりそうな場合、@command{od} は最初の行だけを出力し、
2148 次の行にはアステリスクのみを置いて、二行目以下を省略したことを示す。
2151 @itemx --width[=@var{n}]
2154 1 出力行当たり、@code{n} バイトの入力をダンプする。
2155 この値は、指定した各出力形式に結び付いているサイズの最小公倍数の倍数でなければならない。
2157 このオプションが全く指定されないときのデフォルトは 16 である。
2158 このオプションが @var{n} なしで指定されたときのデフォルトは 32 である。
2162 以下に挙げるいくつかのオプションは、形式指定の簡易版である。GNU @command{od}
2163 では、形式指定オプションと簡易版オプションをどのように組み合わせても構わない。
2170 文字の名称で出力する。@samp{-t a} と同じ。
2174 1 バイトづつ 8 進数として出力する。@samp{-t o1} と同じ。
2178 表示可能な 1 バイト文字か、C 言語のバックスラッシュ・エスケープ、
2179 あるいは 3 桁の 8 進数として出力する。@samp{-t c} と同じ。
2183 2 バイトづつ符号なし 10 進数として出力する。@samp{-t u2} と同じ。
2187 浮動小数点数として出力する。@samp{-t fF} と同じ。
2191 10 進数の int として出力する。@samp{-t dI} と同じ。
2195 10 進数の long int として出力する。@samp{-t dL} と同じ。
2199 2 バイトづつ 8 進数として出力する。@option{-t o2} と同じ。
2203 2 バイトづつ 10 進数として出力する。@option{-t d2} と同じ。
2207 2 バイトづつ 16 進数として出力する。@samp{-t x2} と同じ。
2210 @opindex --traditional
2211 昔の @command{od} で使用できた、オプションではない引数 @var{label} を認識する。
2215 od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
2219 この書式を使用すると、ファイルは 1 個までしか指定できないが、必要なら、
2220 オフセットを示す引数や、@var{label} という、開始位置の仮アドレスを示す引数を、
2221 続けて指定することができる。引数 @var{label} は @var{offset}
2222 と全く同じように解釈されるが、出力を開始する位置の仮アドレスを指定している。
2223 仮アドレスは、通常のアドレスの後ろに、カッコで囲まれて、表示される。
2230 @node base32 invocation
2231 @section @command{base32}: データを表示可能データ (printable data) に変換する
2234 @cindex base32 encoding
2236 @command{base32} はファイル、または標準入力から読み込んだデータを、
2237 base32 でエンコードした形式に変換する (あるいは、その逆を行う)。
2238 base32 でエンコードした形式は、表示可能な ASCII 文字を用いて、バイナリデータを表現する。
2240 @command{base64} と全く同じである。 @xref{base64 invocation}.
2243 @node base64 invocation
2244 @section @command{base64}: データを表示可能データ (printable data) に変換する
2247 @cindex base64 encoding
2249 @command{base64} はファイル、または標準入力から読み込んだデータを、
2250 base64 でエンコードした形式に変換する (あるいは、その逆を行う)。
2251 base64 でエンコードした形式は、表示可能な ASCII 文字を用いて、バイナリデータを表現する。
2256 base64 [@var{option}]@dots{} [@var{file}]
2257 base64 --decode [@var{option}]@dots{} [@var{file}]
2260 base64 でエンコードすると、データが元のデータのほぼ 133% に増大する。
2261 base32 エンコーディングの場合は、元のデータのほぼ 160% になる。
2262 こうしたエンコード形式は、RFC4648 に準拠している。
2263 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc4648.txt}
2265 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2270 @itemx --wrap=@var{cols}
2274 @cindex column to wrap data after
2275 エンコード中に、出力が @var{cols} 文字に達したら改行する。この値は、正の整数でなければならない。
2277 デフォルトでは、76 文字で改行する。改行を全く行わないようにするには、値を 0 にする。
2283 @cindex Decode base64 data
2284 @cindex Base64 decoding
2285 動作モードを変更する。デフォルトの、データをエンコードするモードではなく、
2286 データをデコードするモードになる。入力には、base64
2287 でエンコードしたデータが期待され、出力は、エンコードする前のデータになる。
2290 @itemx --ignore-garbage
2292 @opindex --ignore-garbage
2293 @cindex Ignore garbage in base64 stream
2294 デコードする際、改行文字がどこに現れても、適切に処理する。デコード中に
2295 ASCII 表示可能文字以外を表すバイトが現れたら、一部壊れたデータでもデコードできるように、それを無視する。
2302 @node Formatting file contents
2305 @cindex formatting file contents
2307 以下のコマンドは、ファイルの内容を整形し直す。
2310 * fmt invocation:: パラグラフに分かれたテキストを整形し直す。
2311 * pr invocation:: ページ付けや段組みをしてファイルを表示する。
2312 * fold invocation:: 入力行を指定された幅に合わせて折り返す。
2316 @node fmt invocation
2317 @section @command{fmt}: パラグラフに分かれたテキストを整形し直す
2320 @cindex reformatting paragraph text
2321 @cindex paragraphs, reformatting
2322 @cindex text, reformatting
2324 @command{fmt} は行を折り返したり、結合したりして、出力する各行が指定された文字数に納まるように調整する。
2325 1 行のデフォルトはアスキー文字で 75 文字である。
2326 (訳注: 日本語のテキストは、通常単語を空白で区切らないので、うまく整形できない。)
2331 fmt [@var{option}]@dots{} [@var{file}]@dots{}
2334 @command{fmt} は、指定された引数 @var{file} から
2335 (指定されていない場合は、標準出力から) テキストを読み込んで、標準出力に書き出す。
2337 デフォルトでは、空行、単語間の空白、インデント (字下げ) は、出力でもそのまま維持される。
2338 インデントの違う入力行が連続する場合は、行の結合は行われない。
2339 タブは入力のときにスペースに展開され、出力でタブに戻される。
2341 @cindex line-breaking
2342 @cindex sentences and line-breaking
2343 @cindex Knuth, Donald E.
2344 @cindex Plass, Michael F.
2345 @command{fmt} は、できるだけ文の終わりで改行しようとする。
2346 また、文の最初の単語の直後や、文の最後の単語の直前で改行するのは避けようとする。
2347 「文の終わり (@dfn{sentence break})」の定義は、パラグラフがそこで終わっているか、
2348 あるいは、単語の末尾に @samp{.?!} のどれかが付き、さらにスペースが 2 個続くか、
2349 行末が来ることである。後者の場合、ピリオドなどとスペース
2350 2 個、あるいは行末の間にカッコや引用符が入っていてもよい。
2351 @TeX{} と同様、@command{fmt} は、どこで行を折り返すかを決める前に、パラグラフ全体を読み込む。
2352 使用しているアルゴリズムは、Donald E. Knuth と Michael F. Plass が ``Breaking
2353 Paragraphs Into Lines'' で提示しているものに変更を加えたものである
2354 (`Software---Practice & Experience 誌'、第 11 巻 第 11 号 (November
2355 1981) 1119-1184 ページ)。
2357 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2362 @itemx --crown-margin
2364 @opindex --crown-margin
2365 @cindex crown margin
2366 クラウンマージン・モード (@dfn{Crown margin} mode) である。
2367 パラグラフの最初の 2 行のインデントはそのまま踏襲し、それに続く各行の左の余白を
2371 @itemx --tagged-paragraph
2373 @opindex --tagged-paragraph
2374 @cindex tagged paragraphs
2375 タグ付きパラグラフ・モード (@dfn{Tagged paragraph} mode)。
2376 クラウンマージン・モードに似ているが、次の点が違う。
2377 パラグラフの最初の行と二番目の行のインデントが同じ場合、最初の行は 1 行からなるパラグラフとして扱われる。
2382 @opindex --split-only
2383 行の分割のみを行う。短い行を結合して、長い行を作ることはしない。
2384 その結果、サンプル・コードの行のような、すでに整形されたテキストをむやみに結合しないで済む。
2387 @itemx --uniform-spacing
2389 @opindex --uniform-spacing
2390 空白の数を一定にする。すなわち、単語間の空白は 1 個に、文の間の空白は 2 個にする。
2393 @itemx -w @var{width}
2394 @itemx --width=@var{width}
2395 @opindex -@var{width}
2398 出力する各行を、長くても @var{width} 文字までにする (デフォルトは 75
2399 文字。@var{goal} が指定されている場合は、@var{goal} プラス 10 文字)。
2402 @itemx --goal=@var{goal}
2405 とりあえず、各行を @var{goal} 文字の長さにしてみようとする。
2406 これは、デフォルトでは @var{width} より 7% 短い。
2408 @item -p @var{prefix}
2409 @itemx --prefix=@var{prefix}
2410 @var{prefix} で始まる行のみを整形の対象にする (@var{prefix}
2411 の前にホワイトスペースがあってもよい)。@var{prefix}
2412 とそれに先行するホワイトスペースは、整形の際に取り除かれ、整形後に各出力行に付け直される。
2413 このオプションの用途を一つ挙げると、プログラムのコメントのような行だけを整形し、
2414 コードには手を加えないことが考えられる。
2421 @section @command{pr}: ページ付けや段組みをしてファイルを表示する
2424 @cindex printing, preparing files for
2425 @cindex multicolumn output, generating
2426 @cindex merging files in parallel
2428 @command{pr} は、各 @var{file} (@samp{-} は標準入力を表す)
2429 を標準出力に書き出す。@var{file} が指定されていない場合は、標準入力を対象にする。
2430 その際、ページ付けを行い、指定があれば段組みをして出力する。また、すべての
2431 @var{file} を一つに統合し、1 段 1 ファイルの形式で平行して表示することもできる。
2433 (訳注: @command{pr} はページ構成をするコマンドであって、
2434 長い行の折り返しなどの整形をするわけではない。そうしたことは、@command{fmt} や
2435 @command{fold} の仕事である。なお、@command{pr} の日本語対応は十分ではない。
2441 pr [@var{option}]@dots{} [@var{file}]@dots{}
2445 デフォルトでは、5 行のヘッダが各ページに付く。2 行の空行、
2446 日付・ファイル名・ページ番号からなる 1 行、そしてもう 2 行の空行という形式である。
2447 5 行の空行からなるフッタも出力される。デフォルトのページ長 (@var{page_length})
2448 は 66 行なので、本文に使用されるデフォルトの行数は、56 行になる。
2449 ヘッダのテキスト行は、@samp{@var{date} @var{string} @var{page}} の形を取り、
2450 @var{string} の両側に空白を入れて、行の幅がページ幅 (@var{page_width})
2451 いっぱいになるようにしている。@var{date} は日付であり (詳細については、
2452 @option{--date-format} (@option{-D}) オプションを参照)、
2453 @var{string} は中央揃えのヘッダ文字列 (訳注: デフォルトではファイル名)、
2454 @var{page} はページ番号である。@var{page} という単語の綴りは、
2455 @env{LC_MESSAGES} ロケール・カテゴリによって変わってくる。デフォルトの C
2456 ロケールでは、@samp{Page @var{number}} であり、@var{number} は 10 進数のページ番号だ。
2458 入力にフォームフィード (Form feed) があると、出力では改ページが行われる。
2459 フォームフィードが続くと、白紙のページが生ずる。
2461 段組みをした場合、どの段の幅も同じになり、段と段の間には任意の文字列
2462 (デフォルトはスペース) が置かれる。多段組みの出力では、@option{-J}
2463 オプションを使用しないかぎり、各行は常に @var{page_width} (デフォルトは 72)
2464 文字までに切り詰められる (訳注: これは、各段や段間の空白などを合計した 1 行の長さが、
2465 最長でも @var{page_width} 文字までになるということであって、
2466 各段がそれぞれ @var{page_width} 文字になるということではない)。
2467 1 段のみの出力では、デフォルトでは行の切り詰めは行われない。
2468 その場合でも、行の切り詰めを行うには、@option{-W} を使用する。
2470 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2474 @item +@var{first_page}[:@var{last_page}]
2475 @itemx --pages=@var{first_page}[:@var{last_page}]
2476 @c The two following @opindex lines evoke warnings because they contain ':'
2477 @c The 'info' spec does not permit that. If we use those lines, we end
2478 @c up with truncated index entries that don't work.
2479 @c @opindex +@var{first_page}[:@var{last_page}]
2480 @c @opindex --pages=@var{first_page}[:@var{last_page}]
2481 @opindex +@var{page_range}
2482 @opindex --pages=@var{page_range}
2483 表示を @var{first_page} ページから始めて、 @var{last_page} ページで終了する。
2484 @samp{:@var{last_page}} の指定を省略するのは、ファイルの最後までということである。
2485 スキップするページ数を計算する際、入力ファイル中にフォームフィードがあると、
2486 そのたびに 1 ページ進むことになる。ページ番号は、@samp{+@var{first_page}}
2487 があってもなくても、同じになる。デフォルトでは、
2488 入力ファイルの最初のページからページ数を数えるからだ (表示される最初のページからではない)。
2489 行番号については @option{-N} オプションで変更することができる。
2492 @itemx --columns=@var{column}
2493 @opindex -@var{column}
2495 @cindex down columns
2496 個々の @var{file} に対して @var{column} 段に段組みした出力を生成する
2497 (デフォルトは 1 段)。@option{-a} オプションを使用しない場合、ページ内で本文は、
2498 段内を上から下へと進む。段が増えると、段の幅は自動的に狭くなる。
2499 ただし、@option{-W/-w} を同時に使用して、@var{page_width}
2500 を増加させている場合は、そのかぎりではない。このオプションを使うと、
2501 切り詰められる行がたぶん生じるだろう。ページごとの各段の行数は、
2502 できるだけ揃えられる。多段組みの本文出力では、オプション @option{-e} と
2503 @option{-i} が有効になる。@option{-J} オプションと一緒に使った場合は、
2504 段の整列と行の切り詰めは行われない。各行は、元の長さのまま、不定長フィールドとして
2505 (free field format) 結合されるのである。その際も、@option{-S}
2506 オプションによってフィールド・セパレータを指定することは可能だ。なお
2507 @option{-@var{column}} は、@option{-m} オプションと一緒に使用できない。
2513 @cindex across columns
2514 個々の @var{file} を段組みで表示するとき、本文の各行が、段内を上から下へではなく、
2515 左の段から右の段へと進むようにする。@option{-@var{column}}
2516 オプションに指定する段の数は、2 以上でなければならない。
2517 行が段の幅に納まらないほど長い場合、その行は切り詰められる。
2520 @itemx --show-control-chars
2522 @opindex --show-control-chars
2523 制御文字をハット表記 (たとえば、@samp{^G}) を使って表示する。
2524 他の非表示文字は、バックスラッシュ付きの 8 進数表記になる。@command{pr}
2525 のデフォルトでは、非表示文字の表示文字化は行われない。
2528 @itemx --double-space
2530 @opindex --double-space
2531 @cindex double spacing
2532 ダブルスペースで出力する (訳注: すなわち、行間を 1 行分あける)。
2534 @item -D @var{format}
2535 @itemx --date-format=@var{format}
2536 @cindex time formats
2537 @cindex formatting times
2538 ヘッダの日付を @var{format} を用いて整形する。@var{format} には、コマンド
2539 @samp{date +@var{format}} で使うのと同じ指定法が使用できる。@xref{date invocation}.
2540 @samp{%} で始まる日時の指定を除いて、@var{format} 中の文字はそのまま表示される。
2541 従って、このオプションを使用すれば、ヘッダの日付の位置に任意の文字列を指定することもできるわけだ。
2542 たとえば、@option{--date-format="Monday morning"} といった具合に。
2544 @vindex POSIXLY_CORRECT
2546 デフォルトの日付書式は @samp{%Y-%m-%d %H:%M} という形である (たとえば、
2547 @samp{2001-12-04 23:59})。だが、環境変数 @env{POSIXLY_CORRECT} が設定され、
2548 しかも @env{LC_TIME} ロケール・カテゴリが POSIX ロケールを指定している場合は、
2549 デフォルトの書式は @samp{%b %e %H:%M %Y} になる
2550 (たとえば、@samp{Dec@ @ 4 23:59 2001})。
2553 タイムスタンプは、タイムゾーンのルールに従って表示されるが、
2554 そのルールを指定しているのは、環境変数 @env{TZ} である。
2555 @env{TZ} が設定されていない場合は、システムのデフォルトのルールに従って表示される。
2556 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
2557 The GNU C Library Reference Manual}.
2559 @item -e[@var{in-tabchar}[@var{in-tabwidth}]]
2560 @itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
2562 @opindex --expand-tabs
2564 入力の際にタブをスペースに展開する。省略できる引数 @var{in-tabchar} は、
2565 入力で使われるタブ文字である (デフォルトは TAB 文字)。
2566 これも省略できる二番目の引数 @var{in-tabwidth} は、
2567 入力で使われるタブ文字の幅である。(デフォルトは 8 桁)。
2574 @opindex --form-feed
2575 複数個の改行文字ではなく、1 個のフォームフィードを使用して、
2576 出力する各ページを分離する。このオプションによって、
2577 66 行というデフォルトのページの長さが変わることはない。
2579 @item -h @var{header}
2580 @itemx --header=@var{header}
2583 ヘッダのファイル名の部分を、中央揃えの @var{header} という文字列で置き換える。
2584 シェル上では、@var{header} はクォートするべきである。また、@option{-h}
2587 @item -i[@var{out-tabchar}[@var{out-tabwidth}]]
2588 @itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
2590 @opindex --output-tabs
2592 出力の際にスペースをタブで置き換える。省略できる引数 @var{out-tabchar}
2593 は、出力で使われるタブ文字である (デフォルトは TAB 文字)。
2594 これも省略できる二番目の引数 @var{out-tabwidth} は、出力で使われるタブ文字の幅である
2600 @opindex --join-lines
2601 長い行は長いまま結合する。段組みオプション @option{-@var{column}}, @option{-a -@var{column}},
2602 @option{-m} と併せて使用する。@option{-W/-w} による行の切り詰めが無効になる。
2603 段の整列も行わなくなる。@option{--sep-string[=@var{string}]} と併せて使ってもよい。
2604 @option{-J} というオプションが (@option{-W} や @option{--sep-string} とともに)
2605 新たに設けられたのは、@option{-w} や @option{-s} という、前からある (POSIX に準拠した)
2606 オプションを 3 種の段組みオプションと組み合わせて使ったときの混乱を解消するためである。
2609 @item -l @var{page_length}
2610 @itemx --length=@var{page_length}
2613 1 ページの行数を、ヘッダ行 (及び フッタ行) を含めて、@var{page_length}
2614 行にする (デフォルトは 66 行)。@var{page_length} が 10 行以下だったら、
2615 @option{-t} オプションが指定されたかのように、 ヘッダとフッタは省略する。
2621 すべての @var{file} を統合し、各段に 1 ファイルを割り当てて、平行表示する。
2622 長すぎて段に納まらない行があれば、@option{-J} オプションが使用されていないかぎり、
2623 切り詰めが行われる。@option{--sep-string[=@var{string}]}
2624 を指定してもよい。いづれかの @var{file} に (フォームフィードの指定により)
2625 空白のページが存在すると、空白の段が生ずるが、それでも段を分離する記号の
2626 @var{string} は表示される。すなわち、統合されたファイルの最初から最後まで、
2627 行番号と (訳注: これはもちろん、@option{-n} オプションが指定されている場合)
2628 段の分離記号は、連続して表示されるわけだ。
2629 ただし、統合されたページのどの段も空白の場合は、分離記号も行番号も表示されない。
2630 デフォルトのヘッダは、@samp{@var{date} @var{page}} という形式になり、
2631 中央には空白が挿入される。@option{-h} や @option{--header} オプションを
2632 @option{-m} と一緒に使えば、この中央の空白部分に文字列を入れることができる。
2634 @item -n[@var{number-separator}[@var{digits}]]
2635 @itemx --number-lines[=@var{number-separator}[@var{digits}]]
2637 @opindex --number-lines
2638 @var{digits} の幅の行番号を表示する (@var{digits} のデフォルトは 5 桁)。
2639 通常の多段組みの出力では、行番号は、各段ごとに本文の最初の @var{digits}
2640 桁分の位置を占めるが、@option{-m} の出力の場合は、各行の先頭だけに表示される。
2641 1 段組みでは、@option{-m} の場合と同様、各行の先頭に付く。
2642 デフォルトでは、行数は、入力ファイルの最初の行から数え始める
2643 (表示される最初の行からではない。@option{--page} や @option{-N} オプションを参照)。
2644 省略可能な引数 @var{number-separator} は、行番号の後ろに付けて、
2645 後に続く本文と区別するための文字であり、デフォルトのセパレータはタブ文字である。
2646 厳密に言うと、常にタブが表示されるのは、1 段組みの出力のときだけである。
2647 タブの幅は、本来タブの現れる位置によって変化し、たとえば、@option{-o}
2648 オプションで指定される左の余白 (@var{margin}) によって変わってくるものである。
2649 しかし、多段組みの出力では、「出力される段の幅が同じになる」ことが優先されるため
2650 (POSIX の仕様)、タブの幅は、最初の段における値に固定され、左の余白の値が変わっても、
2651 変化することはない。従って、@var{number-separator} であるタブの位置には、
2652 常に一定数のスペースが表示されることになる。スペースをタブに置き換えるかどうかは、
2655 @item -N @var{line_number}
2656 @itemx --first-line-number=@var{line_number}
2658 @opindex --first-line-number
2659 表示される最初のページの最初の行を @var{line_number} として行を数えて行く
2660 (入力ファイルの最初の行以外から表示を始めるときによく使う)。
2662 @item -o @var{margin}
2663 @itemx --indent=@var{margin}
2666 @cindex indenting lines
2668 スペース @var{margin} 個分の余白で各行をインデントする (デフォルトは、
2669 スペース 0 個)。ページの横幅は、@option{-W/-w} で指定した @var{page_width}
2670 と余白を合計したサイズになる。行番号付きの 1 段組み出力では、
2671 行から少しはみ出す文字が生ずるかもしれない (@option{-n} オプション参照)。
2674 @itemx --no-file-warnings
2676 @opindex --no-file-warnings
2677 引数 @var{file} がオープンできないときも、警告メッセージを表示しない
2678 (終了ステータスは、それでもやはり 0 以外になる)。
2680 @item -s[@var{char}]
2681 @itemx --separator[=@var{char}]
2683 @opindex --separator
2684 段と段の区切りに 1 個の文字 @var{char} を使う。@option{-s}
2685 オプションを指定したときのデフォルトの @var{char} は、@option{-w}
2686 オプションを同時に指定しなければタブ、指定すれば「なし」である。
2687 なお、@option{-s} オプションを指定しない場合のデフォルトのセパレータはスペースだ。
2688 @option{-s[char]} オプションを使用すると、@option{-w} も同時に指定しないかぎり、
2689 3 種の段組みオプション (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m})
2690 のすべてにおいて、行の切り詰めが行われない。これは、POSIX に準拠した仕様である。
2693 @item -S[@var{string}]
2694 @itemx --sep-string[=@var{string}]
2696 @opindex --sep-string
2697 出力される段の区切りに、文字列 @var{string} を使用する。@option{-s}
2698 オプションが @option{-W/-w} オプションに影響を及ぼすのとは異なり、
2699 @option{-S} オプションは @option{-W/-w} オプションに影響を及ぼさない。
2700 また、行の切り詰めや段の整列にも影響しない。@option{-S} オプションを指定せずに、
2701 @option{-J} オプションを指定すると、@command{pr}
2702 はデフォルトの出力セパレータであるタブを使用する
2703 (訳注: @option{-J} 使用時のデフォルトということだと思う)。@option{-S} も
2704 @option{-J} も指定しない場合、@command{pr} が区切りに使用するのはスペースである
2705 (@option{-S"@w{ }"} と同じこと)。@option{-S} だけで、引数の @samp{@var{string}} を指定しないと、
2706 空文字列 (@samp{""}) を指定したことになる。
2709 @itemx --omit-header
2711 @opindex --omit-header
2712 常とは異なり、各ページにヘッダ (とフッタ) を表示しない。
2713 また、ページの最下部を (空行やフォームフィードで) 埋めることもしない。
2714 ページ構成は行わないが、入力ファイルにあるフォームフィードは、
2715 そのままにしておく。つまり、あらかじめ決めておいたページ分割が、
2716 変更されないということだ。@option{-t} や @option{-T} オプションは、
2717 他のオプションと組み合わせて使うと、便利なことがある。たとえば、@option{-t -e4}
2718 は、入力ファイルのタブ文字を 4 個のスペースに展開するが、
2719 それ以外何の変更も行わない。@option{-t} オプションを使用すると、
2720 @option{-h} オプションが無効になる。
2723 @itemx --omit-pagination
2725 @opindex --omit-pagination
2726 ヘッダ (とフッタ) を表示しない。さらに、入力ファイルにあるフォームフィードをすべて取り除く。
2729 @itemx --show-nonprinting
2731 @opindex --show-nonprinting
2732 非表示文字をバックスラッシュ付きの 8 進数表記で表示する。
2734 @item -w @var{page_width}
2735 @itemx --width=@var{page_width}
2738 本文を多段組み出力にしたときにのみ、ページの幅を @var{page_width} 文字にする
2739 (@var{page_width} のデフォルトは 72 字)。各段の幅が等しくなるようにするため、
2740 ページ幅が指定した @var{page_width} より狭くなることがある。
2741 多段組みで @option{-w} オプションを指定せず、@option{-s[CHAR]}
2742 オプションだけ指定すると、デフォルトのページ幅が無効になり、
2743 行の切り詰めや段の整列も行われなくなる。
2744 すなわち、各段の長い行が長いまま結合されてしまうのだ。なお、1 段組みの出力では、
2745 @var{page_width} の指定はできない。以上は、POSIX に準拠した仕様である。
2747 @item -W @var{page_width}
2748 @itemx --page_width=@var{page_width}
2750 @opindex --page_width
2751 ページの幅を @var{page_width} 文字にする。この指定は、
2752 段組みオプションがあってもなくても、有効である。段組みオプションとともに使った場合、
2753 各段の幅が等しくなるようにするため、ページ幅が指定した @var{page_width}
2754 より狭くなることがある。@option{-J} オプションを使用しないかぎり、本文の行が切り詰められる。
2755 3 種の段組みオプション (@option{-@var{column}}, @option{-a -@var{column}},
2756 @option{-m}) と組み合わせて使った場合、段の整列が常に行われる。
2757 セパレータを指定するオプションの @option{-S} や @option{-s} が、
2758 @option{-W} オプションを無効にすることはない。デフォルトは 72 文字である。
2759 @option{-W @var{page_width}} オプションもなく、
2760 段組みオプションも全く指定されていない場合に、行の切り詰めが行われることは絶対にない
2761 (下位互換を維持しつつ、よく行われる作業のほとんどに対応するために、そうなっている)。
2762 この動作は、@option{-W 72 -J} と同じである。
2763 なお、ヘッダ行が切り詰められることは絶対にない。
2770 @node fold invocation
2771 @section @command{fold}: 入力行を指定された幅に合わせて折り返す
2774 @cindex wrapping long input lines
2775 @cindex folding long input lines
2777 @command{fold} は、各 @var{file} (@option{-} は標準入力を表す)
2778 を、長い行は折り返して、標準出力に書き出す。
2779 @var{file} が指定されていない場合は、標準入力を対象にする。
2781 (訳注: @command{fold} の日本語対応は完全ではない。
2782 UTF-8 の漢字やかなは、たいていの場合 1 文字 が 3 桁として計算され、
2783 実際の画面では 2 桁分を占める。だから、UTF-8 の文字がすべて
2784 3 ビットで表現されるものなら、@samp{fold -w 105} で日本語のテキストが 1 行 35 字
2785 (70 桁) できちんと表示される。だが、出力行の長さが不適切だったり、ASCII 文字や
2786 4 ビットで表現される UTF-8 の文字が交じたっりすると、文字化けすることになる。)
2791 fold [@var{option}]@dots{} [@var{file}]@dots{}
2794 デフォルトでは、@command{fold} は 80 桁よりも長い行を折り返す。
2795 出力は必要なら何行にも分割されることになる。
2797 @cindex screen columns
2798 @command{fold} はデフォルトでは、画面上の桁数を数える。従って、タブは
2799 2 桁以上に数えられるかもしれないし、バックスペースは桁数を減らすことになる。
2800 また、復帰文字 (carriage return) は、桁数を 0 にする。
2802 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2810 桁数ではなく、バイト数を数える。従って、タブ、バックスペース、復帰文字も、
2811 他の文字と全く同じように、それぞれ 1 桁を占めるものとして計算される。
2817 単語境界で折り返す。行は、行の最大長より前にある最後の空白の後ろで折り返される。
2818 行にそうした空白がない場合は、通常通り、行の最大長で折り返される。
2820 @item -w @var{width}
2821 @itemx --width=@var{width}
2824 行の最大長に 80 桁ではなく、@var{width} 桁を使用する。
2826 互換性のために、@command{fold} は古い書式のオプション @option{-@var{width}}
2827 もサポートしている。新しいスクリプトでは、@option{-w @var{width}} の方を使用すべきである。
2834 @node Output of parts of files
2837 @cindex output of parts of files
2838 @cindex parts of files, output of
2840 以下のコマンドは、入力の一部を出力する。
2843 * head invocation:: ファイルの先頭部分を出力する。
2844 * tail invocation:: ファイルの末尾部分を出力する。
2845 * split invocation:: ファイルを分割する
2846 * csplit invocation:: ファイルを内容を目印にして分割する。
2849 @node head invocation
2850 @section @command{head}: ファイルの先頭部分を出力する
2853 @cindex initial part of files, outputting
2854 @cindex first part of files, outputting
2856 @command{head} は、各 @var{file} の先頭部分 (デフォルトでは 10 行) を表示する。
2857 ファイルが指定されていない場合や、@var{file} として
2858 @option{-} が指定されている場合は、標準入力から読み込む。
2863 head [@var{option}]@dots{} [@var{file}]@dots{}
2866 指定された @var{file} が 2 個以上あると、
2867 @command{head} は、次のような 1 行からなるヘッダを出力する。
2870 ==> @var{file name} <==
2874 このヘッダは、各 @var{file} の出力の前に置かれる。
2876 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2880 @item -c [-]@var{num}
2881 @itemx --bytes=[-]@var{num}
2884 ファイルの先頭数行を表示する代わりに、先頭から @var{num} バイトを表示する。
2885 ただし、@var{num} の前に @samp{-} が付いている場合は、各ファイルについて、
2886 末尾の @var{num} バイトを除いたすべてを表示することになる。
2887 @multiplierSuffixes{num}
2889 @item -n [-]@var{num}
2890 @itemx --lines=[-]@var{num}
2893 ファイルの先頭から @var{num} 行を表示する。ただし、@var{num} の前に
2894 @samp{-} が付いている場合は、各ファイルについて、末尾の @var{num} 行を除いたすべてを表示することになる。
2895 サイズの乗数接尾辞は、@option{-c} オプションの場合と同様である。
2915 @command{head} は、互換性を考慮して、@option{-[@var{num}][bkm][cqv]}
2916 というオプション指定の古い書式もサポートしている。
2917 ただし、この書式が認識されるのは、最初のオプションとして指定されたときだけである。
2918 @var{num} は 10 進数であり、@option{-c} オプションの場合と同様、
2919 サイズを示す文字 (@samp{b}, @samp{k}, @samp{m}) を後ろに続けてもよく、
2920 また、行数であることを明示する @samp{l} や、ほかのオプション文字
2921 (@samp{cqv}) を続けることもできる。標準的なホストで使うことを意図したスクリプトでは、
2922 古い書式ではなく、@option{-c @var{num}} や @option{-n @var{num}} を使用するべきである。
2923 そのスクリプトが、古い書式にしか対応していないホストでも動作する必要がある場合は、
2924 @command{head} を使わないで済ました方が、たいていの場合簡明である。
2925 たとえば、@samp{head -5} の代わりに、@samp{sed 5q} を使用するわけだ。
2930 @node tail invocation
2931 @section @command{tail}: ファイルの末尾部分を出力する
2934 @cindex last part of files, outputting
2936 @command{tail} は、各 @var{file} の末尾部分 (デフォルトでは 10 行) を表示する。
2937 ファイルが指定されていない場合や、@var{file} として
2938 @samp{-} が指定されている場合は、標準入力から読み込む。
2943 tail [@var{option}]@dots{} [@var{file}]@dots{}
2946 指定された @var{file} が 2 個以上あると、@command{tail} は、
2947 各 @var{file} の出力の前に、以下のような 1 行からなるヘッダを出力する。
2950 ==> @var{file name} <==
2953 tail の出力をさらに処理したい場合は、ファイルヘッダを行頭の見出しに変更すると便利かもしれない。
2959 /^==> .* <==$/ @{prefix=substr($0,5,length-8)":"; next@}
2964 @cindex BSD @command{tail}
2965 GNU の @command{tail} は、出力するデータの量に制限がない (ほかの系統の
2966 @command{tail} には、制限があるものもある)。また、GNU の @command{tail} には、
2967 @option{-r} オプション (逆順で表示する) が存在しない。ファイルを逆順にするのは、
2968 ファイルの末端部分を表示するのとは、全く別の仕事だからだ。BSD の @command{tail}
2969 には、@option{-r} があるが、バッファの大きさまでのファイルしか逆順にできず、
2970 それは通常 32 KiB である。ファイルを逆順にするなら、GNU の @command{tac}
2971 コマンドの方が、信頼性という点でも、用途の広さという点でも優れている。
2973 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2977 @item -c [+]@var{num}
2978 @itemx --bytes=[+]@var{num}
2981 ファイルの末尾数行を出力する代わりに、末尾の @var{num} バイトを出力する。
2982 ただし、@var{num} の前に @samp{+} が付いている場合は、各ファイルの末端から
2983 @var{num} バイト目ではなく、先頭から @var{num} バイト目を始点として出力を開始する。
2984 @multiplierSuffixes{num}
2987 @itemx --follow[=@var{how}]
2990 @cindex growing files
2991 @vindex name @r{follow option}
2992 @vindex descriptor @r{follow option}
2993 ファイルの末端まで達しても、さらに文字を読み込もうとして、無限ループする。
2994 たぶん、ファイルのサイズが増加し続けているからである。
2995 複数のファイルが指定されている場合、@command{tail} は、
2996 異なるファイルから出力があるたびに、その出力がどのファイルから来たものかわかるように、
2999 このオプションを使ってファイルの追跡をするとき、二つの方法が選択できるが、
3000 その違いが現れるのは、追いかけているファイルが消去されたり、
3001 名前を変更されたりしたときだけである。もし、増大しつつあるファイルが削除されたあとでも、
3002 そのファイルの末尾の追跡を続行したいならば、@option{--follow=descriptor}
3003 を使用すればよい。これがデフォルトの動作だが、ログファイルを追跡している際には、
3004 役に立たない。ログファイルは、ローテートされる
3005 (すなわち、消去、または名前を変更されてから、改めてオープンされる)
3006 可能性があるからだ。そうした場合には、@option{--follow=name} を使用すれば、
3007 指定した名前のファイルを追跡することができる。おそらく追跡には、
3008 定期的にその名前のファイルをオープンし直すことで、
3009 何らかのプログラムによってファイルが消去されてから再作成されなかったかどうかを確かめるといった方法が、
3010 使われることだろう。なお、inotify をベースにした実装では、こうしたケースを処理するのに、
3011 ファイルを定期的に再オープンする必要がないことを付記しておく。
3013 どちらの方法を使った場合でも、追跡中のファイルのサイズが小さくなっていることがわかると、
3014 @command{tail} は、ファイルが短縮されたというメッセージを出し、
3015 ファイルの末端と改めて判断したところからファイルの追尾を再開する。
3017 ファイルが消去されたときの @command{tail} の動作は、追いかけているものが、
3018 名前か (@option{--follow=name})、ディスクリプタか (@option{--follow=descriptor})
3019 によって異なっている。名前による追跡の場合、
3020 tail はファイルが消去されたことを検出できるので、その旨メッセージを表示する。
3021 このとき、@option{--retry} も指定されていると、
3022 同じ名前のファイルが再作成されているかどうか、定期的な検査を継続して行う。
3023 ディスクリプタを追跡する場合は、ファイルが削除されたり、名前の変更が行われたりしても、
3024 tail はそれを検出しないので、メッセージを出さない。そうしたファイルが、
3025 もはや元の名前ではアクセスできなくなっていても、なお増大し続けているということもありえる。
3027 @samp{descriptor} や @samp{name} というオプションの値は、
3028 長い方のオプションの形式によってのみ指定できる。@option{-f} では指定できない。
3030 オペランド @var{file} が全く指定されていず、しかも標準入力が
3031 FIFO やパイプである場合、@option{-f} オプションは無視される。また、標準入力が
3032 FIFO やパイプである場合は、@samp{-} という形で指定されたオペランドがあっても、
3033 @option{-f} はそれに対して効果を持たない。
3035 カーネルが inotify をサポートしていると、出力はファイルの変更が引き金になるので、一般に反応がキビキビしている。
3036 それに対して、カーネルが inotify をサポートしていないと、@command{tail}
3037 はチェックごとに 1 秒間スリープするので
3038 (このデフォルトを変更するには、@option{--sleep-interval=@var{n}} を使用する)、
3039 出力の反応がやや遅めに感じられたり、断続的に感じられたりするかもしれない。
3040 inotify のサポートなしで tail を使用する場合、反応を向上させるには、
3041 sleep する間隔を 1 秒以下に設定すればよい。たとえば、次のようなエイリアスを作成するわけだ。
3044 alias tail='tail -s.1'
3049 このオプションは @option{--follow=name --retry} と同じである。すなわち、
3050 ファイルが消去された場合、tail はその名前のファイルをオープンし直そうとする。
3051 それに失敗しても、ファイルに再びアクセスできるようになるまで、再オープンを試み続ける。
3053 @item --max-unchanged-stats=@var{n}
3054 @opindex --max-unchanged-stats
3055 名前によってファイルの追尾を行っているとき、連続して @var{n} 回
3056 (デフォルトは n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS})
3057 追尾動作を実行しても、その間にファイルに変更がなかった場合に、ファイルを
3058 @code{open} し、@code{fstat} して、
3059 そのファイル名と結びついている「デバイス番号/inode 番号」の組み合わせが、
3060 今でも前と同じままかどうかを確認する。ローテートを行うログファイルを追跡している場合、
3061 この @var{n} は、tail がローテートする前に最後の行を表示してから、
3062 新しいログファイルに溜まっている行を表示するまでの秒数に、ほぼ等しい。
3063 このオプションに意味があるのは、ポーリングを使用して
3064 (すなわち、inotify を使わずに)、名前による追跡を行うときだけである。
3066 @item -n [+]@var{num}
3067 @itemx --lines=[+]@var{num}
3070 末尾の @var{num} 行を出力する。ただし、@var{num} の前に @samp{+}
3071 が付いている場合は、各ファイルの末端から @var{num} 行目ではなく、
3072 先頭から @var{num} 行目を始点として出力を開始する。サイズの乗数接尾辞は、@option{-c} の場合と同様である。
3074 @item --pid=@var{pid}
3076 追跡が名前によって行われていようと、ディスクリプタによって行われていようと、
3077 @var{file} 引数で指定されたすべてのファイルに書き込みを行うプログラムがたった一つならば、
3078 そのプログラムのプロセス番号 @var{pid} を指定することができる。
3079 そうしておくと、そのプロセスが終了する直後に tail も終了するようになるのだ。
3080 これがきちんと動作するのは、書き込みプログラムと tail のプロセスが、
3081 同じマシンで動いているときだけである。たとえば、プログラムをビルドするとき、
3082 その出力をファイルに保存しながら、ファイルが増大して行くのを見守りたいならば、
3083 下記のように @command{make} と @command{tail} を実行すればよい。
3084 そうすれば、ビルドが完了したとき、tail のプロセスも終了する。
3085 このオプションを使わない場合は、@code{tail -f} のプロセスを自分で止めなければならないだろう。
3088 $ make >& makerr & tail --pid=$! -f makerr
3091 使用されていない @var{pid} を指定した場合や、
3092 tail が対象とするファイルに書き込んでいるプロセスとは別のプロセスの
3094 @command{tail} は、@var{file} の増大が止まるずっと前に終了してしまうかもしれないし、
3095 実際に書き込んでいるプログラムが終了してしまっても、当分の間終了しないかもしれない。
3096 気をつけてほしいが、システムによっては、@option{--pid} が使えないことがある。
3097 その場合、@command{tail} は警告メッセージを出すはずだ。
3109 指定された名前のファイルを繰り返し何度でもオープンしようとする。
3110 このオプションが役に立つのは、ファイルの末尾を追跡している場合がほとんどである
3111 (それ以外の場合は、警告メッセージを出す)。
3113 ファイル・ディスクリプタによって追跡している場合は (すなわち、
3114 @option{--follow=descriptor} の場合は)、
3115 このオプションは、最初にファイルをオープンするときの動作にしか影響しない。
3116 ひとたびオープンに成功してしまえば、@command{tail} は、ファイル名ではなく、
3117 ファイル・ディスクリプタを追跡することになるからである。
3119 ファイル名によって追跡している場合は (すなわち、@option{--follow=name}
3120 の場合は)、@command{tail} は、ユーザによって中断 (kill) されるまで、
3121 いつまでも繰り返しその名前のファイルを再オープンしようとする。
3123 このオプションを付けないと、 @command{tail} は、ファイルが存在しなくなったり、
3124 何かほかの理由でファイルにアクセスできなくなったりすることがあっても、
3125 その旨報告するだけで、以後再検査を行うことがない。
3127 @item -s @var{number}
3128 @itemx --sleep-interval=@var{number}
3130 @opindex --sleep-interval
3131 何秒間隔で追尾・表示動作を行うかを変更する (デフォルトは 1.0 秒間隔)。
3132 @command{tail} は動作の繰り返しごとに、指定されたすべてのファイルについて、
3133 サイズが変わっていないかどうかのチェックを行う。@command{tail}
3134 の伝統的な実装では、@var{number} は整数でなければならなかったが、GNU の
3135 @command{tail} では、任意の浮動小数点数を指定することが可能になっている。
3136 @xref{Floating point}. @command{tail} が inotify を使用していると、
3137 このポーリング関係の (polling-related) オプションは通常無視される。
3138 ただし、@option{--pid=@var{p}} も一緒に指定されている場合は別で、その場合は、
3139 プロセス @var{p} が生きているかどうかを、@command{tail} が少なくとも
3140 @var{number} 間隔でチェックすることになる。
3152 @command{tail} は互換性のために、@samp{tail -[@var{num}][bcl][f] [@var{file}]}
3153 という古い用法もサポートしているが、それが認識されるのは、
3154 上で説明した用法と衝突しないときだけである。この旧来の書式では、
3155 オプションはただ 1 個しか指定できず、ファイルも 1 個までしか指定できない。
3156 オプション中の @var{num} は、省略可能な 10 進数であり、サイズを表す文字
3157 (@samp{b}, @samp{c}, @samp{l}) を後ろに続けて、1 ブロック当たり
3158 512 バイトのブロック数か、バイト数か、行数かを示すことができる。
3159 さらに、@option{-f} と同じ意味を持つ、@samp{f} を続けてもよい。
3161 @vindex _POSIX2_VERSION
3162 POSIX 1003.1-2001 に準拠していないシステムでは、
3163 旧来のオプション書式において、先頭の @samp{-} を @option{-c}
3164 や @option{-n} オプションの場合と同じ意味で @samp{+} に置き換えることができる。
3165 また、POSIX 1003.1-2001 以前の旧式なシステムでは、
3166 旧来の用法と標準的な用法が衝突する場合には、旧来の用法が優先される。
3167 なお、そうした動作は、環境変数 @env{_POSIX2_VERSION} によってコントロールできる。
3168 (@pxref{Standards conformance})。
3170 標準的なホストで使用するためのスクリプトでは、旧来の書式を使わずに、
3171 @option{-c @var{num}[b]}, @option{-n @var{num}} オプションや @option{-f}
3173 そのスクリプトが、旧来の書式にしか対応していないホストでも動作しなければならない場合でも、
3174 問題を起こしかねない表現を避けるように書き直すことが、たいていはできるものだ。
3175 たとえば、@samp{tail -1} の代わりに、@samp{sed -n '$p'} を使うといった具合である。
3176 それさえ不可能な場合は、どちらの書式を使うべきかを判断するために、
3177 @samp{if tail -c +1 </dev/null >/dev/null 2>&1; then @dots{}}
3178 といった条件文をスクリプトで使用すればよい。
3180 作成するスクリプトが標準的な動作を想定している場合でも、
3181 POSIX のバージョンによって動作に違いのある用法には、気を付けた方がよい。
3182 たとえば、@samp{tail - main.c} は避けるべきである。@samp{tail main.c}
3183 と解釈することも、@samp{tail -- - main.c} と解釈することもできるからだ。
3184 @samp{tail -c 4} も避けるべきである。@samp{tail -c4} を意味するかもしれないし、
3185 @samp{tail -c 10 4} を意味するかもしれない。@samp{tail +4} も使わない方がよい。
3186 @samp{tail ./+4} の意味にも、@samp{tail -n +4} の意味にも取れるからである。
3191 @node split invocation
3192 @section @command{split}: ファイルを分割する。
3195 @cindex splitting a file into pieces
3196 @cindex pieces, splitting a file into
3198 @command{split} は、入力ファイル @var{input} を分割して複数の出力ファイルを作成する。
3199 各出力ファイルには、@var{input} の断片が、連続した形で、
3200 あるいは 1 行づつ順番に分配された形で含まれることになる (訳注: 前者は単純な分割であり、
3201 後者は後述の「ラウンド・ロビン方式」である。@option{-n} オプションを参照)。
3202 @var{input} が指定されていない場合や、@samp{-} である場合には、標準入力から読み込む。
3207 split [@var{option}] [@var{input} [@var{prefix}]]
3210 デフォルトでは、@command{split} は @var{input} を 1000 行づつ各出力ファイルに書き込む
3211 (最後の断片については、何行であれ残っている行を書き込む)。
3213 @cindex output file name prefix
3214 出力ファイルの名前は、上記書式の @var{prefix} (デフォルトでは @samp{x})
3215 に複数の文字 (デフォルトでは、@samp{aa}, @samp{ab}, @dots{})
3216 を続けたものであり、各出力ファイルをファイル名による伝統的なソート順で結合すると、
3217 元の入力ファイルが再構成されるようになっている
3218 (ただし、@option{-nr/@var{n}} オプションを指定した場合は除く)。
3219 デフォルトでは、split はまず、作成するファイルに 2 文字からなる接尾辞
3220 (訳注: suffix、すなわち上記の @samp{aa}, @samp{ab} など) を生成して付け、
3221 その接尾辞の 1 番目の文字がアルファベットの最後に達した時点で、接尾辞を
3222 2 文字づつ増やして行く (@samp{yz} の次は @samp{zaaa}, @samp{zaab}, @dots{} という具合)。
3223 こうした命名法を使えば、出力ファイルがいくつあっても対応できるし、また
3224 @option{--additional-suffix} オプションを付けたときでも、
3225 出力ファイルが上で述べたような順に並ぶことになるわけだ。
3226 @option{-a} オプションが指定されている場合に、出力ファイルの名前が種切れになってしまうと、
3227 @command{split} はエラーメッセージを出すが、作成した出力ファイルを消去することはない。
3229 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3233 @item -l @var{lines}
3234 @itemx --lines=@var{lines}
3237 @var{input} から @var{lines} 行づつ各出力ファイルに書き込む。
3238 @option{--separator} オプションが指定されている場合は、@var{lines}
3241 互換性を考慮して、@command{split} は @option{-@var{lines}}
3242 という古いオプションの書式もサポートしている。新規にスクリプトを書くなら、
3243 @option{-l @var{lines}} の方を使うべきである。
3246 @itemx --bytes=@var{size}
3249 @var{input} から @var{size} バイトづつ各出力ファイルに書き込む。
3250 @multiplierSuffixes{size}
3253 @itemx --line-bytes=@var{size}
3255 @opindex --line-bytes
3256 各出力ファイルに、ファイルサイズが @var{size} バイトを超過しない範囲で、
3257 @var{input} の完全な行をできるだけ多く書き込む。
3258 一つの行やレコードの長さが @var{size} バイトを越える場合は、複数のファイルに分割される。
3259 @var{size} の書式は、@option{--bytes} オプションの場合と同じである。
3260 @option{--separator} オプションが指定されている場合は、
3261 できるだけ多くの行ではなく、できるだけ多くのレコードを書き込むことになる。
3263 @item --filter=@var{command}
3265 このオプションを使用すると、各出力は、そのままファイルに書き出されるのではなく、
3266 パイプを通して一つづつ、指定されたシェルコマンド @var{command}
3267 に引き渡される。@var{command} 中では、環境変数 $FILE を使用するべきであり、
3268 この変数には、シェルコマンドを実行するごとに、異なる出力ファイル名が代入される。
3269 たとえば、1TiB の圧縮ファイルがあるとしよう。伸長したら、サイズが大きすぎて、
3270 ディスクに納まり切らない。しかし、それを分割して、もっと扱いやすいサイズの、
3271 それぞれ圧縮したファイルを作らねばならない。そうした課題を解決するには、
3272 次のようなコマンドを実行すればよいだろう。
3275 xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
3278 圧縮率が 10:1 だとすると、上のコマンドは 20GiB のファイルを
3279 50 個ほど生成することになるだろう。ファイルの名前は、@file{big-aa.xz},
3280 @file{big-ab.xz}, @file{big-ac.xz} などになる。
3282 @item -n @var{chunks}
3283 @itemx --number=@var{chunks}
3287 @var{input} を @var{chunks} 個の出力ファイルに分割する。
3288 @var{chunks} の部分には以下のものが指定できる。
3291 @var{n} @var{input} の現在のサイズに基づいて @var{n} 個のファイルを生成する。
3292 @var{k}/@var{n} @var{n} 個中の @var{k} 番目のみを標準出力へ出力する。
3293 l/@var{n} @var{n} 個のファイルを生成する。行やレコードの途中で分割しない。
3294 l/@var{k}/@var{n} 同上。ただし、@var{n} 個中の @var{k} 番目のみを標準出力に出力する。
3295 r/@var{n} @samp{l} に似ている。ただし、分配はラウンド・ロビン方式で行う。
3296 (訳注: トランプの親がカードを 1 枚づつ子に配るように、
3297 入力から 1 行 (1 レコード) づつ各出力ファイルに
3299 r/@var{k}/@var{n} 同上。ただし、@var{n} 個中の @var{k} 番目のみを標準出力に出力する。
3302 @var{input} を @var{n} 個の「部分 (chunk)」に分けたときに出た余りのバイトは、
3303 最後の「部分」に割り振られる。最初に行われる分割のための計算の後で追加されるバイトがあっても、
3304 それは捨て去られる (@samp{r} モードを使用している場合を除く)。
3306 @var{input} の行数が @var{n} 行に足りなかったり、@var{input} が短縮された場合でも、
3307 @var{n} 個のファイルすべてが作成される。
3309 @samp{l} モードについて言うと、「部分」の大きさは、「@var{input} サイズ / @var{n}」前後になる。
3310 @var{input} は、まず @var{n} 個の同一サイズの区画 (partition) に分割され、
3311 余りがあれば、それは最後の区画に割り当てられる。
3312 ある行の先頭が、ある区画の内側にある場合、その行は行末まで、その区画に対応するファイルに書き込まれる。
3313 行やレコードは、たとえ後続する区画にまではみ出していても分割されないので、
3314 書き出されるファイルは、区画のサイズより大きくなることもあれば、小さくなることもある。
3315 行やレコードが後続する区画をすっぽり覆ってしまうほど長い場合には、空っぽのファイルができることさえある。
3317 @samp{r} モードでは、@var{input} のサイズは問題にならない。だから、入力は、
3318 たとえば、パイプからであっても構わない。
3320 @item -a @var{length}
3321 @itemx --suffix-length=@var{length}
3323 @opindex --suffix-length
3324 使用する接尾辞の長さを @var{length} 文字にする。@var{length} に
3325 0 を指定すると、@option{-a} オプションを (すでに指定していた場合でも)
3326 全く指定しなかったのと同じことになり、従って、デフォルトの動作が有効になる。
3327 すなわち、接尾辞は、2 文字から始まり、@option{-n} や
3328 @option{--numeric-suffixes=@var{from}} オプションが指定されていないかぎり、
3329 必要になるごとに、2 文字づつ自動的に増えて行く。
3332 @itemx --numeric-suffixes[=@var{from}]
3334 @opindex --numeric-suffixes
3335 接尾辞にアルファベットの小文字ではなく、数字を使用する。
3336 数字の接尾辞は、 @var{from} が指定されていれば @var{from} から、
3337 指定されていなければ 0 から数を数えて行く。
3339 @var{from} を指定できるのは、長い形式のオプションを使ったときだけである。
3340 @var{from} を指定すると、@command{split} を一回だけ実行する場合に最初の接尾辞を決めたり、
3341 それぞれ別々にスプリットする入力に対して相互の接尾辞間をどれくらい離すかを決めたりすることができるが、
3342 上で述べた接尾辞の長さを自動的に増やしていく機能は無効になる。
3343 そこで、ユーザとしては、@samp{99} を越える数字を接尾辞として使えるようにするため、
3344 @option{-a} オプションも併せて指定したくなるかもしれない。
3345 なお、@option{--number} オプションが指定され、しかも、生成されるファイルの数より
3346 @var{from} が小さい場合は、一回かぎりの実行と見なされ、接尾辞に最小限必要な長さが、自動的に割り出される。
3348 (訳注: 上記の「なお」以下で言っているのは、@samp{split -d -n100 some.data}
3349 などとすると、x00 から x99 までのファイルが作られるが、@samp{split --numeric-suffixes=1 -n100
3351 なら、x001 から x100 まで、3 桁の接尾辞を持つファイルが作られるということらしい。
3352 しかし、coreutils 8.26 では、@samp{split -d -n200 some.data}
3353 や @samp{split --numeric-suffixes=10 -n100 some.data} は、
3354 "output file suffixes exhausted" というエラーになる。
3355 そして、@samp{split -d -n201 some.data} や @samp{split --numeric-suffixes=10
3357 なら、実行に成功するのである。よくわからない仕様だと思う。@option{--suffix-length}
3358 を使って、自分で接尾辞の長さを決めた方が、間違いがない。)
3360 @item --additional-suffix=@var{suffix}
3361 @opindex --additional-suffix
3362 出力ファイル名の末尾に @var{suffix} をさらに追加する。
3363 @var{suffix} 中にスラッシュが含まれていてはならない。
3366 @itemx --elide-empty-files
3368 @opindex --elide-empty-files
3369 サイズ 0 の出力ファイルができないようにする。そうしたものが生成されることがあるのは、
3370 @option{--number} を使ったときである。入力ファイルが (短縮されて)
3371 指定された数の出力ファイルを作るには分量が足りなくなっている場合や、
3372 1 行が長すぎて、後続する「部分」をすっぽり飲み込んでしまっている場合などがそれに当たる。
3373 このオプションが指定されているときでも、出力ファイルの連続番号が、
3376 @item -t @var{separator}
3377 @itemx --separator=@var{separator}
3379 @opindex --separator
3380 @cindex line separator character
3381 @cindex record separator character
3382 レコード・セパレータとしてデフォルトの改行文字 (ASCII LF) の代わりに、
3383 文字 @var{separator} を使用する。ASCII NUL をセパレータに指定するには、
3384 二文字からなる文字列 @samp{\0} を使用すればよい。@samp{split -t '\0'} のようにだ。
3389 @opindex --unbuffered
3390 @option{--number r/@dots{}} モードにおいて入力を即座に出力する。
3391 このモードは、作業にかなり時間がかかるのだ。
3395 各出力ファイルをオープンする直前に、診断メッセージを表示する。
3401 @option{--number} (@option{-n}) の動作を理解していただくために、
3404 デフォルトでは、1 行が 2 行以上に分割されることがあるのに、注目していただきたい。
3407 $ seq -w 6 10 > k; split -n3 k; head xa?
3420 "l/" 修飾子を使用して、行の途中で分割しないようにする。
3423 $ seq -w 6 10 > k; split -nl/3 k; head xa?
3436 "r/" 修飾子を使用して、ラウンド・ロビン方式で分配する。
3439 $ seq -w 6 10 > k; split -nr/3 k; head xa?
3452 K 番目の「部分」だけ取り出すこともできる。次の例は、33 の「部分」に分け、
3453 そのうちの 7 番目だけを取り出して、表示している。
3456 $ seq 100 > k; split -nl/7/33 k
3463 @node csplit invocation
3464 @section @command{csplit}: ファイルを内容を目印にして分割する。
3467 @cindex context splitting
3468 @cindex splitting a file into pieces by context
3470 @command{csplit} は、入力ファイル @var{input} を分割して 0 個以上の出力ファイルを生成する。
3471 @var{input} が @samp{-} である場合は、標準入力から読み込む。
3476 csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{}
3479 出力ファイルの中身がどうなるかは、以下で詳しく述べるように、引数
3480 @var{pattern} によって決まってくる。引数 @var{pattern} が、
3481 入力ファイル中に存在しない行を指している場合は、エラーになる
3482 (たとえば、入力の残りの部分に、指定された正規表現にマッチする行がもう存在しない場合)。
3483 すべてのパターン・マッチが終わったとき、残っている入力があれば、
3486 デフォルトでは、@command{csplit} は、出力ファイルを生成した後で、
3487 各出力ファイルに書き込んだバイト数を表示する。
3489 パターン引数 @var{pattern} には、以下のタイプがある。
3494 入力の最初から @var{n} 行目の直前までを含む (つまり、@var{n-1} 行目までの)
3495 出力ファイルを作成する (@var{n} は正の整数)。繰り返し回数の指定が後に続く場合は、
3496 繰り返しごとに、入力ファイルの次の @var{n} 行分を含む出力ファイルを作成していく。
3498 @item /@var{regexp}/[@var{offset}]
3499 現在行から、入力ファイル中の次に @var{regexp} にマッチする行の直前までを内容とする
3500 (すなわち、マッチする行は含まない) 出力ファイルを作成する。
3501 整数の @var{offset} を指定してもよい。指定した場合は、マッチする行にプラス/マイナス
3502 @var{offset} した行の直前までの入力が (つまり、その行は含まない)、
3503 出力ファイルに書き込まれ、書き込まれた次の行から入力の後続部分が始まることになる。
3505 @item %@var{regexp}%[@var{offset}]
3506 上記のタイプと同様だが、出力ファイルを作成しない点が異なる。
3507 要するに、入力ファイルのその部分は捨てられることになるわけだ。
3509 @item @{@var{repeat-count}@}
3510 直前に行ったパターンの検索を、さらに @var{repeat-count} 回繰り返す。
3511 @var{repeat-count} には正の整数か、アステリスクを指定できる。後者は、
3512 入力がなくなるまで、必要なだけ何回でも繰り返すことを意味する。
3513 (訳注: @samp{csplit @var{input} '/@var{pattern_1}/' '@{3@}'
3514 '/@var{pattern_2}/' '@{*@}'}
3519 出力ファイルの名前は、接頭辞 (prefix、デフォルトでは @samp{xx}) に接尾辞
3520 (suffix) を続けたものになる。デフォルトの接尾辞は、二桁の 10 進数を @samp{00}
3521 から @samp{99} まで順番に増やして行ったものである。いかなる場合でも、
3522 出力ファイルを、ファイルの名前によってソートした順番で結合すると、
3523 元の入力ファイルが生成されるようになっている。
3525 @command{csplit} のデフォルトでは、エラーになった場合や、ハングアップ、
3526 割り込み、中止、終了といったシグナルを受け取った場合には、
3527 それまでに作成した出力ファイルをすべて消去してから終了する。
3529 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3533 @item -f @var{prefix}
3534 @itemx --prefix=@var{prefix}
3537 @cindex output file name prefix
3538 @var{prefix} を出力ファイル名の接頭辞として使用する。
3540 @item -b @var{format}
3541 @itemx --suffix-format=@var{format}
3543 @opindex --suffix-format
3544 @cindex output file name suffix
3545 @var{format} を出力ファイル名の接尾辞として使用する。
3546 このオプションを指定する場合、接尾辞として指定する文字列には、@code{printf(3)}
3547 方式の変換指定が必ず一つは (それも、一つだけ) 含まれていなければならない。
3548 変換指定には、形式指定フラグ、フィールド幅、精度指定といった修飾子を付けてもよく、
3549 3 種の修飾子をすべて付けることもできる。
3550 フォーマット文字は、バイナリの符号なし整数である引数を、
3551 人間に読みやすい形式に変換するものでなければならない。フォーマット文字の
3552 @samp{d} と @samp{i} は、@samp{u} の別名であり、@samp{u}, @samp{o},
3553 @samp{x}, @samp{X} 変換が可能である。@var{format} の全体が
3554 (現在の出力ファイルが何番目かという情報とともに) @code{sprintf(3)}
3555 関数に引き渡され、出力ファイルの一つ一つに対して、ファイル名に使う接尾辞が順番に作られることになる。
3556 なお、このオプションを使用すると、@option{--digits} オプションは無視される。
3558 @item -n @var{digits}
3559 @itemx --digits=@var{digits}
3562 出力ファイル名に含まれる数字の桁数を、デフォルトの 2 桁から
3568 @opindex --keep-files
3569 エラーが起きても、出力ファイルを消去しない。
3571 @item --suppress-matched
3572 @opindex --suppress-matched
3573 指定した @var{pattern} にマッチする行を出力しない。言い換えれば、
3574 境界になる行が、分割されたファイルの 2 番目以降の断片の先頭に現れないようにする。
3575 (訳注: @var{pattern} が正規表現の場合には、境界になる行がファイル中にたとえ 1 箇所しかなくても、
3576 その行の表示を抑制するには、@samp{csplit --suppress-matched @var{input}
3577 @var{pattern} '@{*@}'} などと、繰り返しの指定をする必要があるようだ。)
3580 @itemx --elide-empty-files
3582 @opindex --elide-empty-files
3583 サイズ 0 の出力ファイルができないようにする (入力ファイルを各部分に区切る行が、
3584 どの部分においても最初の行になることを期待している場合に、
3585 このオプションを使わないと、一番目の出力ファイルがたいていサイズ 0 になる)。
3586 このオプションが指定されているときでも、出力ファイルの連続番号が 0 から始まって、
3603 用例を挙げてみよう。まず、練習用に空のディレクトリを作って、そこに移動する。
3609 次に、1 から 14 まで連続する数を、0 または 5 で終わる行で分割する。
3612 $ seq 14 | csplit - '/[05]$/' '@{*@}'
3618 ここで表示された各数字は、csplit が今作成した出力ファイルのサイズである。
3626 @command{head} を使って、内容を見る。
3654 $ csplit --suppress-matched @var{input.txt} '/^$/' '@{*@}'
3658 @c TODO: "uniq" already supports "--group".
3659 @c when it gets the "--key" option, uncomment this example.
3661 @c Example of splitting input file, based on the value of column 2:
3664 @c $ cat @var{input.txt} |
3666 @c uniq --group -k2,2 |
3667 @c csplit -m '/^$/' '@{*@}'
3670 @node Summarizing files
3671 @chapter ファイルの要約 (行数、単語数、チェックサム)
3673 @cindex summarizing files
3675 以下のコマンドは、ファイル内容全体を表現する若干の数字を生成する。
3678 * wc invocation:: 行数、単語数、バイト数を表示する。
3679 * sum invocation:: チェックサムとブロック数を表示する。
3680 * cksum invocation:: CRC チェックサムとバイト数を表示する。
3681 * b2sum invocation:: BLAKE2 ダイジェストの表示、または検査をする。
3682 * md5sum invocation:: MD5 ダイジェストの表示、または検査をする。
3683 * sha1sum invocation:: SHA-1 ダイジェストの表示、または検査をする。
3684 * sha2 utilities:: SHA-2 ダイジェストの表示、または検査をする。
3689 @section @command{wc}: 行数、単語数、バイト数を表示する
3693 @cindex character count
3697 @command{wc} は、指定された各 @var{file} に含まれる、バイト数、文字数、ホワイトスペース
3698 (訳注: 空白、タブ、改行など) で区切られた単語数、改行数を算出する。
3699 @var{file} が指定されなかった場合や、@var{file} として @samp{-}
3700 が指定された場合は、標準入力を対象とする。
3705 wc [@var{option}]@dots{} [@var{file}]@dots{}
3708 @cindex total counts
3709 @command{wc} は各ファイルにつき、一行の算出結果を出力する。
3710 引数としてファイルが指定されていれば、そのファイル名を数値の後ろに表示する。
3711 複数の @var{file} が指定されている場合は、最後の行で合計を表示し、
3712 ファイル名の部分に、@file{total} と書き込む。表示される数値の順番は、
3713 改行数、単語数、文字数、バイト数、最長行の長さになる。
3714 各数値は、フィールドに右詰めで表示され、フィールド間には、少なくとも一個の空白が置かれる。
3715 そうすることで、複数の数字とファイル名が、たいていの場合きちんと整列するようになっているのだ。
3716 数値の入るフィールドの幅は、入力に応じて変化するので、
3717 一定のフィールド幅を当てにするべきではない。ただし、GNU の拡張として、
3718 表示される数値がただ 1 個だけの場合は、その数値の頭に空白を入れないことになっている。
3720 デフォルトでは、@command{wc} は 3 個の数値を表示する。
3721 すなわち、改行数、単語数、バイト数である。
3722 オプションによって、特定の数値のみを表示するように指定することもできる。
3723 どんなオプションも、それ以前に指定されたオプションを取り消すことはない。従って、
3730 上記のコマンドは、バイト数と単語数の両方を表示することになる。
3732 @option{--max-line-length} を指定すると、@command{wc}
3733 はファイルごとの最長行の長さを表示する。さらに、複数のファイルが存在する場合は、
3734 (各最長行の合計ではなく) 最長行中の最長のものを表示する。ここで言う行の長さは、
3735 画面に表示される桁数のことである。表示桁数の計算は現在のロケールに従って行われ、
3736 タブ位置は 8 桁ごとに来るものとされる。
3738 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3767 @itemx --max-line-length
3769 @opindex --max-line-length
3770 最長表示行の長さのみを表示する。タブ位置は 8 桁ごとにあるものとする。
3771 ワイド・キャラクタについては、表示される幅を考慮する。非表示文字の幅は 0 とする。
3773 @macro filesZeroFromOption{cmd,withTotalOption,subListOutput}
3774 @item --files0-from=@var{file}
3775 @opindex --files0-from=@var{file}
3776 @c This is commented out to avoid a texi2dvi failure.
3777 @c texi2dvi (GNU Texinfo 4.11) 1.104
3778 @c @cindex including files from @command{\cmd\}
3779 コマンドラインで名前を指定されたファイルの処理を行わない。その代わりに、
3780 ファイル @var{file} に名前が書き込まれているファイルの処理を行う。
3781 なお、@var{file} 中に書かれている各ファイル名は、ゼロバイト (ASCII NUL)
3782 で終端されていなければならない。このオプションは、ファイル名のリストが長すぎて、
3783 コマンドライン長の上限を超過してしまいそうなときに、
3784 \withTotalOption\便利である。そうした場合、@command{\cmd\} を
3785 @command{xargs} 経由で実行するのは、望ましくない。
3786 なぜなら、@command{xargs} はファイルのリストをいくつかの部分に分割して
3787 @command{\cmd\} に渡すので、@command{\cmd\} はリスト全体の\subListOutput\ではなく、
3788 部分リストごとの\subListOutput\を表示してしまうからである。
3789 ASCII NUL で終端されたファイル名のリストを得る方法の一つは、
3790 GNU @command{find} に @option{-print0} を付けて使うことである。
3791 @var{file} に @samp{-} を指定すれば、
3792 ASCII NUL で終端されたファイル名を標準入力から読み込むことができる。
3794 @filesZeroFromOption{wc,,合計}
3796 たとえば、カレント・ディレクトリ以下にある、すべての @file{.c} ファイルや
3797 @file{.h} ファイルの内で、最長の行の長さを知るには、次のようにする。
3800 find . -name '*.[ch]' -print0 |
3801 wc -L --files0-from=- | tail -n1
3809 @node sum invocation
3810 @section @command{sum}: チェックサムとブロック数を表示する
3813 @cindex 16-bit checksum
3814 @cindex checksum, 16-bit
3816 @command{sum} は、指定された各 @var{file} の 16-bit チェックサムを計算する。
3817 @var{file} が指定されなかった場合や、@var{file} として @samp{-} が指定された場合は、
3823 sum [@var{option}]@dots{} [@var{file}]@dots{}
3826 @command{sum} は各 @var{file} のチェックサムを表示し、その後にファイルのブロック数
3827 (整数に切り上げたもの) を続ける。複数の @var{file} が指定されていると、
3828 ファイル名も表示される (デフォルト)。(@option{--sysv} オプションが指定されている場合は、
3829 引数に一つでもファイルがあれば、そのファイル名が表示される。)
3831 デフォルトでは、GNU の @command{sum} は、BSD の @command{sum}
3832 と互換性のあるアルゴリズムを使って、チェックサムを計算し、
3833 1 ブロック 1024 バイトのブロック数でファイルサイズを表示する。
3835 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3841 @cindex BSD @command{sum}
3842 デフォルトの (BSD と互換性のある) アルゴリズムを使用する。
3843 このオプションが存在しているのは、System V の @command{sum} との互換性のためである。
3844 前方に @option{-s} オプションも指定されているとき以外、このオプションは効果を持たない。
3850 @cindex System V @command{sum}
3851 System V の @command{sum} のデフォルトと互換性のあるアルゴリズムを使って、
3852 チェックサムを計算し、1 ブロック 512 バイトのブロック数でファイルサイズを表示する。
3856 @command{sum} は、互換性のために提供されている。新しいアプリケーションでは、
3857 @command{cksum} プログラム (次のセクションを参照) を使う方がよい。
3862 @node cksum invocation
3863 @section @command{cksum}: CRC チェックサムとバイト数を表示する
3866 @cindex cyclic redundancy check
3867 @cindex CRC checksum
3869 @command{cksum} は、指定された各 @var{file} の
3870 CRC (cyclic redundancy check、巡回冗長検査) チェックサムを計算する。
3871 @var{file} が指定されなかった場合や、@var{file} として @samp{-} が指定された場合は、
3877 cksum [@var{option}]@dots{} [@var{file}]@dots{}
3880 @command{cksum} は、各ファイルの CRC チェックサムとバイト数を表示する。
3881 また、引数が指定されていない場合を除いて、ファイル名も表示する。
3883 @command{cksum} は通常、信頼性の低い方法 (たとえば、netnews)
3884 によって転送されたファイルに損傷がないことを確認するために使用される。
3885 受信したファイルに対する @command{cksum} の出力を、転送元のファイルに対する
3886 @command{cksum} の出力 (たいてい、配布物中に入っている) と比較するわけである。
3888 CRC のアルゴリズムは、POSIX 規格によって規定されており、BSD や
3889 System V の @command{sum} のアルゴリズム (直前のセクションを参照) と互換性がない。
3890 CRC アルゴリズムの方が信頼性が高い。
3892 オプションは、@option{--help} と @option{--version} だけである。
3893 @xref{Common options}.
3898 @node b2sum invocation
3899 @section @command{b2sum}: BLAKE2 ダイジェストの表示、または検査をする
3903 @cindex 512-bit checksum
3904 @cindex checksum, 512-bit
3905 @cindex fingerprint, 512-bit
3906 @cindex message-digest, 512-bit
3908 @command{b2sum} は、指定された各 @var{file} の 512-bit チェックサムを計算する。
3909 @command{md5sum} コマンドと同じ使用法とオプションがサポートされている。
3910 @xref{md5sum invocation}. なお、@command{b2sum} では、以下のオプションも使用できる。
3917 @cindex BLAKE2 hash length
3918 ダイジェストのデフォルトの長さを変更 (短縮) する。
3919 長さは bit で指定する。従って 8 の倍数でなければならない。
3920 @option{--check} オプションが指定されていると、このオプションは無視される。
3921 チェックを行うときは、ダイジェストの長さは自動的に判断されるからである。
3924 @node md5sum invocation
3925 @section @command{md5sum}: MD5 ダイジェストの表示、または検査をする
3929 @cindex 128-bit checksum
3930 @cindex checksum, 128-bit
3931 @cindex fingerprint, 128-bit
3932 @cindex message-digest, 128-bit
3934 @command{md5sum} は、指定された各 @var{file} の 128-bit チェックサムを計算する。
3935 チェックサムは、指紋 (@dfn{fingerprint}) とか、メッセージ・ダイジェスト
3936 (@dfn{message-digest}) とも呼ばれる (訳注: ハッシュ値と呼ばれることもある)。
3938 注意: MD5 ダイジェストは、ファイルの不測の損傷を検知することに関して、
3939 単純な CRC (@command{cksum} コマンドで使用できる) よりも信頼性が高い。
3940 二つのファイルがたまたま同一の MD5 値を持っている確率は、ほとんどゼロだからである。
3941 だからと言って、悪意のある改竄に対して安全だと考えてはならない。
3942 ある特定の MD5 指紋を持つファイルを見つけ出すことは、現在のところ事実上不可能だと考えられているが、
3943 デジタル証明書などのファイルが署名に MD5 ダイジェストを使用しているとき、
3944 そうしたファイルに手を加えて、正当に見えるようする方法なら、周知のことだからである。
3945 もっと安全なハッシュ値が必要なら、SHA-2 の使用を考慮した方がよい。
3946 @xref{sha2 utilities}.
3948 指定された @var{file} が @samp{-} の場合や、ファイルが全く指定されなかった場合は、
3949 @command{md5sum} は標準入力のチェックサムを計算する。また、@command{md5sum}
3950 は、ファイルとチェックサムの間に矛盾がないかどうかを判定することもできる。
3955 md5sum [@var{option}]@dots{} [@var{file}]@dots{}
3958 各 @var{file} に対して @samp{md5sum} は、デフォルトでは
3959 MD5 チェックサム、一個の空白、入力モードがバイナリかテキストかを示すフラグ、
3960 それにファイル名を出力する。バイナリモードの指標は @samp{*} であり、
3961 テキストモードの指標は @samp{ } (空白) である。
3962 モードの区別に意味のあるシステムでは、バイナリモードがデフォルトだが、
3963 そうでないシステムではテキストモードがデフォルトである。
3964 @var{file} にバックスラッシュや改行文字が含まれている場合は、出力する行の先頭にバックスラッシュを付け、
3965 さらに、ファイル名中の問題のある各文字をバックスラッシュでエスケープする。
3966 そうすることで、わがままなファイル名があっても、出力に誤解の余地がないようにしているのだ。
3967 @var{file} が指定されていなかったり、@samp{-} という形で指定されている場合は、
3970 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3978 @cindex binary input files
3979 各入力ファイルをバイナリとして扱う。すなわち、入力ファイルをバイナリモードで読み込み、
3980 出力に @samp{*} というフラグを付ける。このオプションは
3981 @option{--text} の反対である。バイナリファイルとテキストファイルを区別しない GNU
3982 のようなシステムでは、このオプションは入力モードがバイナリであるとのフラグを付けるだけであり、
3983 MD5 チェックサムの値には影響を及ぼさない。
3984 このオプションは、バイナリファイルとテキストファイルを区別する MS-DOS のようなシステムでは、
3985 デフォルトである。だだし、読み込みを標準入力から行い、その標準入力が端末であるときは除く。
3989 各 @var{file} から (@var{file} が指定されなかった場合は、標準入力から)、
3991 (@var{file} をチェックサム計算の対象となるデータとして読み込むわけはない)、
3992 そのチェックサム情報が、それに対して名前を挙げられているファイルの内容に対応しているかどうかを報告する。
3993 このモードの @command{md5sum} に対する入力は、たいていの場合、事前に @samp{md5sum}
3994 を実行してチェックサムを生成したときの出力である。
3995 入力ファイルの書式は、三種類のものがサポートされている。それは、上記のデフォルトの出力書式、
3996 @option{--tag} オプションを付けたときの出力書式、
3997 それに BSD の逆順表示モード (reversed mode) の書式であり、最後のものは、デフォルトの書式に似ているが、
3998 バイナリとテキストモードを区別する文字を使用しないものである。
4000 そうした入力ファイルの各行に対して、@command{md5sum} は、そこに名前を記載されたファイルを読み込み、
4001 その MD5 チェックサムを計算する。そして、算出したメッセージダイジェストが、
4002 そのファイル名と同じ行にあるチェックサムと一致しなかった場合は、
4003 そのファイルをテストに失敗したものとするのである。
4004 両者が一致した場合は、テストにパスしたことになる。
4005 デフォルトでは、有効な各行に対して標準出力にメッセージを 1 行づつ書き出し、
4006 指名されているファイルがテストにパスしたかどうかを報告する。
4007 また、すべてのチェックが完了したとき、テストに失敗したものが一つでもあれば、
4009 この出力を抑制したければ、@option{--status} オプションを使用すればよい。
4010 リストされたファイルの中に、オープンできなかったり、読み込めなかったりするものがあった場合や、
4011 有効な行に書いてあるチェックサムが対応するファイルの実際の値と一致しなかった場合、
4012 それに、有効な行が全く存在しなかった場合は、@command{md5sum} は 0 以外のステータスで終了する。
4013 それ以外の場合は正常終了することになる。
4015 @item --ignore-missing
4016 @opindex --ignore-missing
4017 @cindex verifying MD5 checksums
4018 このオプションが役に立つのは、チェックサムの照合をするときだけである。
4019 このオプションを指定すると、チェックサムを照合する際にファイルが存在しなくても、
4020 実行に失敗したり、ステータス情報を出したりしなくなる。
4021 ダウンロードしたファイルにチェックサムの長大なリストが付いているとき、
4022 一部のファイルの照合をするのに便利である。
4026 @cindex verifying MD5 checksums
4027 このオプションが役に立つのは、チェックサムの照合をするときだけである。
4028 このオプションを指定すると、チェックサムを照合する際、
4029 検査に成功したファイルごとに 'OK' (訳注: 日本語では、「成功」または「完了」)
4030 のメッセージを出さなくなる。ただし、ファイルが照合に失敗した場合は、
4031 デフォルトと同じ 1 ファイル 1 行の形式で結果を報告する。
4032 チェックサムに何らかの不一致があった場合は、失敗を総括した警告メッセージも標準出力に表示する。
4036 @cindex verifying MD5 checksums
4037 このオプションが役に立つのは、チェックサムの照合をするときだけである。
4038 このオプションを指定すると、チェックサムを照合する際、デフォルトの
4039 1 ファイルに付き 1 行の判定メッセージを出さなくなる。
4040 また、照合の失敗があっても、それを総括した警告メッセージを出力することもない。
4041 とは言え、ファイルのオープンや読み込みに失敗した場合は、
4042 やはりそれぞれの診断結果を標準エラーに表示する。
4043 リストされたすべてのファイルを読み込むことができ、しかも、すべてのファイルについて、
4044 対応する MD5 チェックサムと矛盾がなければ、正常終了する。
4045 それ以外の場合は、失敗があったことを示すステータスコードで終了する。
4050 BSD スタイルのチェックサムを出力する。
4051 つまり、使用したチェックサムのアルゴリズムも表示するということだ。
4052 GNU の拡張として、問題を起こしかねない文字を含むファイル名は、上述したようにエスケープされ、
4053 さらに、行の先頭に エスケープの指標に使われたのと同じ
4054 @samp{\} 文字が付けられる。@option{--tag} オプションはバイナリ・モードを意味し、
4055 @option{--text} オプションと一緒に使うことは認められていない。
4056 そんなことをサポートしても、出力の書式をむやみに繁雑にするだけで、
4063 @cindex text input files
4064 各入力ファイルをテキストとして扱う。すなわち、入力ファイルをテキストモードで読み込み、
4065 出力に @samp{ } というフラグを付ける。このオプションは
4066 @option{--binary} の反対である。バイナリファイルとテクストファイルを区別しない GNU
4067 のようなシステムでは、このオプションがデフォルトである。
4068 ほかのシステムでも、読み込みを標準入力から行い、その標準入力が端末であるときは、デフォルトになる。
4069 ただし、@option{--tag} が使用されているときに、このモードがデフォルトになることはない。
4075 @cindex verifying MD5 checksums
4076 チェックサムを照合する際、MD5 チェックサムを記載した行の書式に正しくないものがあると、
4077 その旨警告を発する。このオプションが役に立つのは、
4078 チェックされる入力中の、数行を除いたすべての行が、有効なときだけである。
4082 @cindex verifying MD5 checksums
4083 チェックサムを照合する際、無効な入力行が 1 行でもあれば、
4084 そうした行のすべてについて警告を発したのち、0 以外の終了ステータスで終了する。
4091 @node sha1sum invocation
4092 @section @command{sha1sum}: SHA-1 ダイジェストの表示、または検査をする
4096 @cindex 160-bit checksum
4097 @cindex checksum, 160-bit
4098 @cindex fingerprint, 160-bit
4099 @cindex message-digest, 160-bit
4101 @command{sha1sum} は、指定された各 @var{file} の 160-bit チェックサムを計算する。
4102 このコマンドの使用法やオプションは、@command{md5sum} と全く同じである。
4103 @xref{md5sum invocation}.
4105 注意: SHA-1 ダイジェストは MD5 より安全であり、コリジョン
4106 (collision、衝突。別のファイルが同一の指紋を持つこと) が起きたという話を聞いたことはない。
4107 しかしながら、大量の --- と言っても非現実的なほどではない --- リソースがあれば、
4108 コリジョンを作り出せることがわかっている。この理由から、
4109 SHA-1 は、もっと安全な SHA-2 ハッシュ・アルゴリズムに徐々に移行すべきだと、一般に考えられている。
4110 @xref{sha2 utilities}.
4113 @node sha2 utilities
4114 @section sha2 utilities: SHA-2 ダイジェストの表示、または検査をする
4121 @cindex 224-bit checksum
4122 @cindex 256-bit checksum
4123 @cindex 384-bit checksum
4124 @cindex 512-bit checksum
4125 @cindex checksum, 224-bit
4126 @cindex checksum, 256-bit
4127 @cindex checksum, 384-bit
4128 @cindex checksum, 512-bit
4129 @cindex fingerprint, 224-bit
4130 @cindex fingerprint, 256-bit
4131 @cindex fingerprint, 384-bit
4132 @cindex fingerprint, 512-bit
4133 @cindex message-digest, 224-bit
4134 @cindex message-digest, 256-bit
4135 @cindex message-digest, 384-bit
4136 @cindex message-digest, 512-bit
4138 コマンド @command{sha224sum}, @command{sha256sum}, @command{sha384sum},
4140 は、一まとめにして SHA-2 ハッシュと呼ばれる様々な長さのチェックサムを計算する
4141 (それぞれ、224, 256, 384, 512 bits である)。
4142 こうしたコマンドの使用法とオプションは、@command{md5sum} や @command{sha1sum}
4143 と全く同じである。 @xref{md5sum invocation}.
4146 @node Operating on sorted files
4147 @chapter ソートしたファイルの操作
4149 @cindex operating on sorted files
4150 @cindex sorted files, operations on
4152 以下のコマンドは、ソートしたファイルを操作 (生成) する。
4155 * sort invocation:: テキストファイルを並べ替える。
4156 * shuf invocation:: テキストファイルをシャッフルする。
4157 * uniq invocation:: ファイルから重複を省く。
4158 * comm invocation:: ソート済みの二つのファイルを一行づつ比較する。
4159 * ptx invocation:: ファイル内容の permuted index を作成する。
4160 * tsort invocation:: トポロジカル・ソート。
4164 @node sort invocation
4165 @section @command{sort}: テキストファイルを並べ替える
4168 @cindex sorting files
4170 @command{sort} は、指定されたファイルから読み込んだすべての行に対して、ソート
4171 (sort、一定の基準に従った並べ替え)、マージ (merge、統合)、比較を行う。
4172 ファイルが一つも指定されなかった場合や、@var{file} として @samp{-}
4173 が指定された場合は、標準入力から読み込む。デフォルトでは、@command{sort}
4179 sort [@var{option}]@dots{} [@var{file}]@dots{}
4182 @cindex sort stability
4183 @cindex sort's last-resort comparison
4184 多くのオプションが、@command{sort} が行を比較する方法に影響を及ぼす。
4185 結果が期待と違っているときは、@option{--debug}
4186 オプションを使って、どうしてそうなったかを調べてみていただきたい。
4187 二つの行の比較は、次のように行われる。@command{sort} は、対になる各フィールドを
4188 (@option{--key} オプションを参照)、
4189 コマンドラインで指定された順番で、そのフィールドに結びついた順序関係のオプションに従いつつ比較し、
4190 相違が見つかるか、比較するフィールドがなくなるまでそれを続ける。
4191 キーとなるフィールドが指定されていない場合は、デフォルトのキーである行全体が比較に使用される。
4192 最後に、すべてのキーが同じだったときは、最後の手段として、@option{--reverse} (@option{-r})
4193 以外の順序関係のどんなオプションも指定されていないかのように、行全体を比較する。
4194 @option{--stable} オプションを指定すると、この最後の手段の比較
4195 (@dfn{last-resort comparison}) を行わないようになり、
4196 その結果、すべてのキー・フィールドが等価である行は、互いに対する元の順序がそのまま維持される。
4197 @option{--unique} (@option{-u}) オプションも、最後の手段の比較を無効にする。
4201 別の指定がなされていないかぎり、すべての比較は、@env{LC_COLLATE}
4202 のロケールによって指定されている文字の照合順序で行われる。@footnote{POSIX
4203 以外のロケールを使用すると (たとえば、@env{LC_ALL} を @samp{en_US}
4204 に設定すると)、@command{sort} の出力が、見慣れない順序でソートされたものになるかもしれない。
4205 その場合は、環境変数 @env{LC_ALL} を @samp{C} にすればよい。
4206 注意すべきは、@env{LC_COLLATE} だけを設定したのでは、二つの問題が生じてしまうということだ。
4207 一つは、@env{LC_ALL} も設定されている場合、@env{LC_COLLATE}
4208 は無効だということ。二つ目は、@env{LC_CTYPE} が
4209 (@env{LC_CTYPE} が設定されていないときは、@env{LANG} が)
4210 @env{LC_COLLATE} と矛盾する値に設定されている場合、動作が未定義だということである。
4211 たとえば、@env{LC_CTYPE} が @code{ja_JP.PCK} であるのに、
4212 @env{LC_COLLATE} が @code{en_US.UTF-8} の場合、@command{sort} の動作は未定義なのである。}
4213 行末の改行は、比較に当たっては、行の一部として扱われない。
4214 入力ファイルの最後のバイトが改行でなければ、GNU の @command{sort} は黙って改行を追加する。
4215 GNU の @command{sort} では (GNU のすべてのユーティリティについて規定されているとおり)、
4216 入力行の長さに上限がない。すなわち、各行に含まれるバイト数に制限がない。
4218 @command{sort} には三つの動作モードがある。ソート (これがデフォルト)、
4219 マージ、それに、すでにソートされているかどうかのチェックである。
4220 動作モードの変更には、以下のオプションを使用する。
4226 @itemx --check=diagnose-first
4229 @cindex checking for sortedness
4230 指定されたファイルがすでにソートされているかどうかをチェックする。
4231 ファイル全体がソート済みでない場合は、診断メッセージを出し、
4232 順番から外れている最初の箇所を示してから、ステータス 1 で終了する。
4233 ファイルがソート済みの場合は、正常終了する。
4234 入力ファイルは、1 個しか指定できない。
4237 @itemx --check=quiet
4238 @itemx --check=silent
4241 @cindex checking for sortedness
4242 指定されたファイルがすでにソート済みだったら、正常終了する。
4243 さもなければ、ステータス 1 で終了。入力ファイルは、1 個しか指定できない。
4244 このオプションは @option{-c} と同様だが、診断メッセージを出さない点が異なる。
4250 @cindex merging sorted files
4251 指定された複数のファイルを、一つのグループとしてソートすることで統合を行う。
4252 各入力ファイルは、必ずそれぞれがソート済みでなければならない。
4253 マージモードの代わりにソートモードを使えば、
4254 そうした条件なしで、ソートとマージを行うことができる。
4255 マージモードがあるのは、それが使える場合は、その方が高速だからである。
4259 @cindex exit status of @command{sort}
4264 1: @option{-c} や @option{-C} を付けて実行した際に、入力がソートされていなかった。
4269 環境変数 @env{TMPDIR} が設定されていれば、@command{sort}
4270 はその値をテンポラリ・ファイルを置くディレクトリとして @file{/tmp} の代わりに使用する。
4271 @option{--temporary-directory} (@option{-T}) オプションは、環境変数よりさらに優先される。
4273 以下に挙げるオプションは、出力する行の順序に影響を与える。
4274 こうしたオプションは、グローバルなオプションとして指定することもできるし、
4275 キーとなる特定のフィールドに対してのみ働くように指定することもできる。
4276 キーとなるフィールドが全く指定されていない場合は、グローバルなオプションが行全体の比較に使用される。
4277 キー・フィールドの指定がある場合は、グローバルなオプションは、
4278 キー・フィールドのうち、それ自身のオプションが特に指定されていないフィールドに継承される。
4279 POSIX 以前の @command{sort} のバージョンを使用している場合、グローバルなオプションが効果を持つのは、
4280 それより後で指定されるキー・フィールドに対してだけなので、
4281 移植を考慮したシェルスクリプトでは、グローバル・オプションを最初に指定した方がよい。
4286 @itemx --ignore-leading-blanks
4288 @opindex --ignore-leading-blanks
4289 @cindex blanks, ignoring leading
4291 各行中でソートに使うキーを捜すときに、文字の前にある空白を無視する。
4292 デフォルトの空白は、スペースまたはタブだが、@env{LC_CTYPE} のロケールによっては違うかもしれない。
4294 空白は、使用しているロケールの照合ルールによっては無視されることがあるが、
4295 このオプションを指定しておかないと、@option{-k} オプションで指定されるキー中の文字の位置に関して、
4299 @itemx --dictionary-order
4301 @opindex --dictionary-order
4302 @cindex dictionary order
4303 @cindex phone directory order
4304 @cindex telephone directory order
4306 電話帳 (@dfn{phone directory}) 順にソートする。
4307 すなわち、ソートする際にアルファベット、数字、空白以外のすべての文字を無視する。
4308 デフォルトのアルファベットと数字は ASCII のそれであり、空白はスペースまたはタブだが、
4309 後者は @env{LC_CTYPE} のロケールによっては違うかもしれない。
4312 @itemx --ignore-case
4314 @opindex --ignore-case
4315 @cindex ignoring case
4316 @cindex case folding
4318 アルファベットの小文字を、一回すべて対応する大文字に直してから、比較する。
4319 その結果、たとえば、@samp{b} と @samp{B} は等価なものとしてソートされる。
4320 どの文字がどのタイプに属するか (訳注: たとえば、大文字か小文字か)
4321 を決めているのは、@env{LC_CTYPE} のロケールである。@option{--unique}
4322 オプションと一緒に使用したとき、小文字を使っている等価な行があると、
4323 その小文字の行は捨てられることになる。(大文字を使っている等価な行の方を捨てる方法は、
4324 現在のところ存在しない。(@option{--reverse} オプションがあっても、
4325 それが効果を発揮するのは、小文字の行が捨てられた後の最終結果に対してだけなのだ。))
4326 (訳注: 実際の動作はこの説明と少し違う。最近の @command{sort} では、
4327 @option{--unique} と併せて使用した場合、小文字を使っている行が捨てられるのではなく、
4328 等価な行のうち、最初に現れた行が残り、それ以外のすべてが捨てられるようである。)
4331 @itemx --general-numeric-sort
4332 @itemx --sort=general-numeric
4334 @opindex --general-numeric-sort
4336 @cindex general numeric sort
4338 各行の先頭部分を倍精度浮動小数点数 (long double-precision floating
4339 point number) に変換して、数値としてソートする。
4340 @xref{Floating point}. オーバーフロー、アンダーフロー、変換エラーが起きても、
4341 通知しない。行の並ぶ順番は以下のようになる。
4345 数字で始まっていない行 (すべて同じ数値と見なされる)。
4347 NaN (IEEE の浮動小数点演算で使う ``Not a Number'' を表す値)
4348 を一貫した、ただし、マシンに依存する順番で並べる。
4352 有限数を数値として昇順で並べる (@math{-0} と @math{+0} は等価とする)。
4357 このオプションを使うのは、他に方法がないときのみにすること。
4358 処理速度が @option{--numeric-sort} (@option{-n}) よりずっと遅いし、
4359 浮動小数点数に変換するとき、情報を失う恐れがある。
4362 @itemx --human-numeric-sort
4363 @itemx --sort=human-numeric
4365 @opindex --human-numeric-sort
4367 @cindex human numeric sort
4369 数値としてソートする。その際、ソートを、まず数が正か負かによって行い
4370 (負の数、ゼロ、正の数の順)、次に SI 接尾辞 によって行い
4371 (接尾辞なし、@samp{k} や @samp{K}、そして @samp{MGTPEZY} の順 @pxref{Block size})、
4372 最後に数値によって行う。たとえば、@samp{1023M} は @samp{1G} の前に来る。
4373 SI 接尾辞として @samp{M}(メガ) は @samp{G} (ギガ) の前になるからだ。
4374 つまり、このオプションでソートする対象は、接尾辞の意味が 1000
4375 の累乗か、1024 の累乗かを問わず、一貫したやり方で、
4376 数値の規模にもっともふさわしい接尾辞を付けられている数値である。
4377 従って、このオプションは、@command{df}, @command{du}, @command{ls}
4378 などのコマンドに @option{--human-readable} や @option{--si}
4379 オプションを付けて実行したときの、一回分の出力をソートするのに用いられる。
4380 数値の書式は、@option{--numeric-sort} の場合と同じであり
4381 (訳注: すなわち、数値の前に付けた @samp{+} 符号を理解しない)、
4382 SI 接尾辞は、数値の後ろに直接続いていなければならない。
4383 なお、@command{numfmt} コマンドを使用することも考慮していただきたい。@command{numfmt}
4384 を使用すれば、数値をソートした後で、人間に読みやすい形に整形し直すことができるので、
4385 たいていの場合 @command{sort} の対象に、より精密な数値を使うことが可能になるからだ。
4388 @itemx --ignore-nonprinting
4390 @opindex --ignore-nonprinting
4391 @cindex nonprinting characters, ignoring
4392 @cindex unprintable characters, ignoring
4394 表示できない文字を無視する。どの文字がどのタイプに属するかを決めているのは、
4395 @env{LC_CTYPE} のロケールである。より強力なオプションである
4396 @option{--dictionary-order} (@option{-d}) が一緒に指定されていると、
4403 @opindex --month-sort
4405 @cindex months, sorting by
4407 比較する部分の先頭が、0 個以上の空白に続いて、月名の短縮形になっているとき、
4408 すべての文字を大文字に直して @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}
4409 の順序で比較する。月名として無効な名前は、有効な月名より前に置かれる。
4410 月名のつづりを決めているのは、@env{LC_TIME} カテゴリのロケールである
4411 (訳注: だから、英語の月名によってソートするには、ロケールを英語か
4412 C にしておく必要がある)。デフォルトの空白は、スペースまたはタブだが、
4413 @env{LC_CTYPE} のロケールによっては違うかもしれない。
4416 @itemx --numeric-sort
4417 @itemx --sort=numeric
4419 @opindex --numeric-sort
4421 @cindex numeric sort
4423 数値としてソートする。数値は行頭から始まり
4424 (訳注: 比較する位置が指定されていれば、実は行頭でなくてもよい)、
4425 任意個の空白、必要なら @samp{-} 符号、それに、0 個以上の数字から構成される。
4426 数値は、区切り記号で 3 桁づつ区切られていてもよく、小数点記号と 0 個以上の数字が続いていてもよい。
4427 数字がない場合は、@samp{0} と見なされる。小数点記号や桁区切りの記号を規定しているのは、
4428 @env{LC_NUMERIC} のロケールである。デフォルトの空白は、スペースまたはタブだが、
4429 @env{LC_CTYPE} のロケールによっては違うかもしれない。
4431 比較は厳密であり、丸めによるエラーはない。
4433 このオプションは、数値に前置した @samp{+} 符号や、指数表記を理解しない。
4434 そうした文字列を数値として比較するには、@option{--general-numeric-sort}
4435 (@option{-g}) を使用するべきである。
4438 @itemx --version-sort
4440 @opindex --version-sort
4441 @cindex version number sort
4442 バージョン名とバージョン番号によってソートする。標準用法のソートと動作が似ているが、
4443 10 進数の数字が連続する各部分をインデックス番号やバージョン番号と見なし、
4444 (文字列としてではなく) 数値として取り扱う点が違う。
4445 (@xref{Details about version sort}.)
4451 @cindex reverse sorting
4452 比較の結果を逆順にする。その結果、出力ではより大きなキーの値を持つ行が、
4456 @itemx --random-sort
4457 @itemx --sort=random
4459 @opindex --random-sort
4462 ソートを行うのに、入力中のキーをハッシュしてから、そのハッシュ値をソートするという方法を用いる。
4464 その際、衝突 (collision) が絶対起きないように関数を選択するので、
4465 値の違うキーは必ず違うハッシュ値を持つようになる。
4466 これは、入力のランダムな並び替えに似ているが (@pxref{shuf invocation})、
4467 同じ値を持つキーは一緒に並べるという点が、異なっている。
4469 ランダムソートを行うフィールドが複数指定されている場合は、
4470 ランダムに選択された一つの同じハッシュ関数が、すべてのフィールドで使用される。
4471 フィールドごとに別のランダムなハッシュ関数を使うようにするには、
4472 @command{sort} を複数回呼び出せばよい。
4474 ハッシュ関数の選択は、 @option{--random-source} オプションの影響を受ける。
4482 @item --compress-program=@var{prog}
4483 テンポラリ・ファイルを @var{prog} というプログラムで圧縮する。
4486 引数が一つも存在しない場合に、標準入力を圧縮して標準出力に書き出し、
4487 @option{-d} オプションの指定があれば、
4488 標準入力を展開して標準出力に書き出すものでなければならない。
4490 @var{prog} が 0 以外のステータスで終了した場合は、
4491 エラーメッセージを出して、@command{sort} の実行を中止する。
4493 @var{prog} の指定中でホワイトスペース (訳注: 空白、タブ、改行など)
4494 やバックスラッシュ文字を使ってはならない。
4495 そうした文字は、将来の使用のために、予約されている。
4497 @filesZeroFromOption{sort,,ソートした結果}
4499 @item -k @var{pos1}[,@var{pos2}]
4500 @itemx --key=@var{pos1}[,@var{pos2}]
4504 行中の @var{pos1} から @var{pos2} までの部分 (両者を含む)
4505 を、ソートの対象となる場所として指定する。@var{pos2} が省略されている場合は、
4506 @var{pos1} から行末までがソートの対象になる。
4508 最も単純な形の場合、@var{pos} で指定するのは、何番目のフィールドかということである (1 から数える)。
4509 フィールドは 1 個以上の空白文字によって区切られ、
4510 デフォルトでは、比較するとき、そうした空白文字は各フィールドの先頭に含まれることになる。
4511 空白文字の扱い方を調整する方法については、@option{-b} や @option{t}
4514 より一般的に言うと、各 @var{pos} は、@samp{@var{f}[.@var{c}][@var{opts}]} という形式を取る。
4515 @var{f} は、比較に使用するフィールドは何番目かということであり、
4516 @var{c} は、そのフィールドの始めから数えて何番目の文字かということである。
4517 フィールドや文字の位置は、1 から数える。
4518 なお、@var{pos2} の文字の位置として 0 を指定すると、
4519 そのフィールドの最後の文字を指すことになる。@samp{.@var{c}} が、@var{pos1}
4520 で省略されている場合は、デフォルトの 1 (フィールドの最初の文字)
4521 を指定したことになり、@var{pos2} で省略されている場合は、デフォルトの 0
4522 (フィールドの最後の文字) を指定したことになる。
4523 @var{opts} は順序関連のオプションであり、
4524 これを指定することで、各キーを異なったルールでソートすることが可能になる。
4525 詳細については後述しているので、参照していただきたい。
4526 なお、キーは複数のフィールドにまたがることができる。
4528 たとえば、二番目のフィールドでソートするには、@option{--key=2,2} (@option{-k 2,2})
4529 を使用する。後述部分で、キーについてさらに説明し、
4530 用例ももっとたくさん挙げているので、ご覧になっていただきたい。
4531 また、@option{--debug} オプションの説明もご覧になるとよい。@option{--debug}
4532 オプションを使うと、行中のどの部分がソートに使用されているかが明らかになる。
4535 各行のソートに使われている部分を強調表示する。
4536 また、使用法に問題があるときは、標準エラーに警告メッセージを出す。
4538 @item --batch-size=@var{nmerge}
4539 @opindex --batch-size
4540 @cindex number of inputs to merge, nmerge
4541 一度にマージする入力ファイルの数を多くても @var{nmerge} 個までとする。
4543 @var{nmerge} 個を越える入力ファイルをマージしなければならない場合、@command{sort}
4544 は @var{nmerge} 個のファイルからなるグループを作ってマージし、
4545 その結果をテンポラリ・ファイルに保存する。
4546 そして、今度はそれを入力として使用して、後に続くマージを行うのである。
4548 @var{nmerge} の値が大きいと、実行速度が向上し、ハードディスクの一時的な使用が減るかもしれないが、
4549 その分、メモリの使用量と I/O が増加する。
4550 逆に、@var{nmerge} の値が小さいと、メモリに対する要求と I/O は減少するかもしれないが、
4551 その分、ハードディスクの一時的な使用が増え、実行速度が低下することになる。
4553 @var{nmerge} の値は、2 以上でなければならない。デフォルトの値は 16 だが、
4554 これは実装次第なので、将来は変わるかもしれない。
4556 @var{nmerge} の値は、オープンできるファイル・ディスクリプタの上限によって制限されているかもしれない。
4557 @samp{ulimit -n} や @samp{getconf OPEN_MAX}
4558 コマンドを使えば、使用しているシステムの上限を知ることができる。
4559 ただし、そうした上限がさらに小さくなっていることもあり、
4560 使用中のプログラムがすでにファイルをいくつかオープンしている場合や、
4561 オープンできるファイルの数についてオペレーティング・システムに他の制限がある場合が、
4562 それに当たる。@var{nmerge} がリソースの上限を越えているときは、
4563 @command{sort} は警告メッセージを出さずに、より小さい値を使用する。
4565 @item -o @var{output-file}
4566 @itemx --output=@var{output-file}
4569 @cindex overwriting of input, allowed
4570 出力を標準出力ではなく、@var{output-file} に書き出す。通常、@command{sort}
4571 は、入力をすべて読み込んでから、@var{output-file} をオープンする。
4572 従って、@code{sort -o F F} や @code{cat F | sort -o F}
4573 といったコマンドを使って、ファイルを直接書き変えるやり方でソートをすることが可能だ。
4574 とは言え、他の用途に使用されないファイルに出力した方が、おおむね安全である。
4575 ファイルを直接書き変えるやり方でソートしている最中に、システムがクラッシュしたり、
4576 @command{sort} が入出力エラーなど、深刻なエラーに遭遇したりすると、データが失われてしまいかねないからだ。
4577 また、@option{--merge} (@option{-m}) オプションを指定した場合は、@command{sort}
4578 は、入力をすべて読み込む前に、出力ファイルをオープンするかもしれない。
4579 そのため、@code{cat F | sort -m -o F - G} といったコマンドは安全ではない。
4580 @command{cat} が @file{F} の読み込みを済ます前に、@command{sort}
4581 が @file{F} への書き込みを始めてしまうかもしれないからだ。
4583 @vindex POSIXLY_CORRECT
4584 比較的新しいシステムでも、環境変数 @env{POSIXLY_CORRECT} を設定している場合は、
4585 たとえば @samp{sort F -o F} のように、入力ファイルの後に
4586 @option{-o} オプションを置くことはできない。移植を考慮したスクリプトでは、
4587 @option{-o @var{output-file}} を入力ファイルの前で指定するべきである。
4589 @item --random-source=@var{file}
4590 @opindex --random-source
4591 @cindex random source for sorting
4592 @var{file} をランダムデータのソースとして使用する。そのランダムデータは、
4593 @option{-R} オプションでどのランダムハッシュ関数を使うかを決めるのに使用される。
4594 @xref{Random sources}.
4600 @cindex sort stability
4601 @cindex sort's last-resort comparison
4603 最後の手段の比較 (last-resort comparison) を行うのを止めて、@command{sort}
4604 を入力順尊重 (stable) にする。このオプションは、フィールド指定オプションや、
4605 @option{--reverse} (@option{-r}) 以外のグローバルな順序関係のオプションが指定されていなければ、効果を持たない。
4606 (訳注: いわゆる stable sort (普通、安定ソート、固定ソートと訳される) である。
4607 たとえば、@option{-b} オプションを使って、先行する空白を無視して比較した場合に、等価となる行があったとしよう。
4608 通常では、それでも、最後の手段の比較によって、
4609 先行する空白の有無も考慮に入れた行全体の比較が行われ、
4610 等価な行に順序を付けることになるが、@option{--stable} オプションが指定されていると、
4611 それをしないので、等価な行は入力されたときの順序で出力される)。
4614 @itemx --buffer-size=@var{size}
4616 @opindex --buffer-size
4617 @cindex size for main memory sorting
4618 指定された @var{size} のメインメモリをソート用のバッファとして使用する。
4619 デフォルトでは、@var{size} は 1024 バイトを 1 単位とする数値である。@samp{%}
4620 を後ろに付けると、@var{size} は、物理メモリの何パーセントの意味になる。
4621 後置するのが @samp{K} ならば、@var{size} は 1024 倍され (デフォルトと同じ)、
4622 @samp{M} なら 1,048,576 倍、@samp{G} なら 1,073,741,824 倍される。
4623 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, @samp{Y} の後置も、同じ理屈である。
4624 @samp{b} を後置すると、@var{size} はバイト数と見なされ、掛け算は行われない。
4626 このオプションを指定すると、@command{sort} は作業を始めるとき、
4627 デフォルトよりも大きかったり、小さかったりするソート用のバッファを使用することになり、
4628 そのために動作速度が向上することがある。
4629 とは言え、このオプションは起動直後のバッファサイズにしか影響を持たない。
4630 @command{sort} が @var{size} を越える入力行に出会うと、バッファのサイズは
4631 @var{size} 以上に拡大されるからである。
4633 @item -t @var{separator}
4634 @itemx --field-separator=@var{separator}
4636 @opindex --field-separator
4637 @cindex field separator character
4638 各行でソートに使うキーを探すとき、文字 @var{separator}
4639 をフィールド・セパレータとして使用する。
4640 デフォルトでフィールドを区分するのは、非空白文字と空白文字の間の空文字列である。
4641 デフォルトの空白は、スペースとタブだが、@env{LC_CTYPE} のロケールによっては、
4644 たとえば、入力行が @w{@samp{ foo bar}} だったとしよう。@command{sort} はこれを
4645 @w{@samp{ foo}} と @w{@samp{ bar}} のフィールドに分割する。
4646 フィールド・セパレータは前後どちらのフィールドにも属さないことになっている。
4647 そこで、@samp{sort @w{-t " "}} を使用した場合は、同じ入力行が、空っぽのフィールド、
4648 @samp{foo}、それに @samp{bar} という 3 個のフィールドを持つことになる。
4649 とは言え、キー・フィールドが、@option{-k 2} のように、行末まで続く場合や、
4650 @option{-k 2,3} のように、範囲からなる場合は、
4651 範囲の両端の間に存在するフィールド・セパレータは、キー・フィールド中にそのまま保持される。
4653 ASCII NUL をフィールド・セパレータに指定するには、二文字からなる文字列
4654 @samp{\0} を使用すればよい。@samp{sort -t '\0'} のようにだ。
4656 @item -T @var{tempdir}
4657 @itemx --temporary-directory=@var{tempdir}
4659 @opindex --temporary-directory
4660 @cindex temporary directory
4662 テンポラリファイルの置き場所にディレクトリ @var{tempdir} を使用する。
4663 この指定は、環境変数 @env{TMPDIR} に優先する。このオプションを二回以上指定すると、
4664 テンポラリファイルの置き場所として、指定されたすべてのディレクトリが使用されることになる。
4665 大規模なソートやマージを行って、I/O が足枷になる場合、このオプションを使って、
4666 別のディスク上にあり、別のコントローラを使用している複数のディレクトリを指定すると、
4669 @item --parallel=@var{n}
4671 @cindex multithreaded sort
4672 平行して実行するソートの数を @var{n} に設定する。デフォルトでは、
4673 @var{n} は、利用できるプロセッサーの数になっている。ただし、上限は
4674 8 であり、これは、それ以上にしても、速度の向上が頭打ちになるからだ。
4675 @var{n} 個のスレッドを使用すると、メモリの使用量が log @var{n} 倍になることにも注意していただきたい。
4676 参照 @ref{nproc invocation}.
4682 @cindex uniquifying output
4684 通常は、等価と評価される複数の行の内、最初のもののみを出力する。
4685 @option{--check} (@option{-c} または @option{-C}) オプションが指定されている場合は、
4686 等価と評価される行が、2 行連続していないかをチェックする
4687 (訳注: 等価な行の連続があると、終了ステータスが 1 になる)。
4689 また、このオプションを指定すると、デフォルトでは実行する、最後の手段の比較を行わなくなる。
4691 コマンド @code{sort -u} と @code{sort | uniq} は等価である。
4692 しかし、その等価性は、@command{sort} に何か他のオプションが付いたときにまでは及ばない。
4693 たとえば、@code{sort -n -u} は、唯一性のチェックをするとき、行頭にある数字の並びの値しか調べないが、
4694 @code{sort -n | uniq} の方は、行全体を検査するのである。@xref{uniq invocation}.
4697 @macro newlineFieldSeparator
4698 @option{-z} オプションを使用した場合、改行文字はフィールド・セパレータ扱いになる。
4703 @command{sort} の従来の (すなわち BSD と System V の) 実装では、
4704 いくつかのオプションの解釈が互いに異なっていた。
4705 とりわけ、@option{-b}, @option{-f}, @option{-n} についてそうだった。
4706 GNU の sort は、POSIX 規格の動作に従っており、
4707 これは、たいていの場合 (常にではない!)、System V の動作と同じである。POSIX
4708 によると、@option{-n} はもはや @option{-b} を自動的に設定しない。
4709 そこで、動作の一貫性のために、@option{-M} も同様に変更した。
4710 この変更によって、フィールドを指定するとき、文字の位置がどこを指すかが、
4711 微妙なケースでは変わってくるかもしれない。
4712 これに対する唯一の対処法は、明示的に @option{-b} オプションを指定することである。
4714 @option{-k} によってソート・フィールドを指定するとき、
4715 その位置指定の後ろにオプション文字 @samp{MbdfghinRrV} のうち任意のものを付けることができる。
4716 その場合、そのフィールドは、グローバルな順序関係のオプションを一切引き継がないことになる。
4717 @option{-b} オプションは、フィールド限定のオプションとしては、
4718 フィールド指定の開始位置と終端位置の片方、あるいは両方に付けることができるが、
4719 グローバル・オプションから継承した場合は、両方に付いていることになる。
4720 入力行が、行頭やフィールド間に複数の空白を含んでいる可能性があって、
4721 しかも @option{-t} を使っていない場合は、@option{-k} を使用するとき、@option{-b}
4722 と組み合わせるか、先行する空白を暗黙のうちに無視するオプション (すなわち @samp{Mghn})
4723 と組み合わせるのが普通だ。そうしないと、フィールドにある先行する空白の数の違いのせいで、
4724 結果がわけのわからないものになりかねないからである。
4726 ソートフィールド指定の開始位置が、行末より後ろや、終端側のフィールドより後ろに来てしまうと、
4727 そのフィールドは空になる。@option{-b} オプションを指定した場合、
4728 フィールド指定の @samp{.@var{c}} の部分は、そのフィールドの最初の非空白文字から数えることになる。
4730 @vindex _POSIX2_VERSION
4731 @vindex POSIXLY_CORRECT
4732 POSIX 1003.1-2001 に準拠していないシステムの @command{sort}
4733 では、ソート・キーの指定に、@samp{+@var{pos1} [-@var{pos2}]}
4734 という 0 から数える旧来の書式が使用できる。
4735 @samp{sort +@var{a}.@var{x} -@var{b}.@var{y}} という旧来のコマンドは、
4736 もし @var{y} が @samp{0} であるか、指定されていない場合は、
4737 @samp{sort -k @var{a+1}.@var{x+1},@var{b}} と同じである。
4738 それ以外の場合は、@samp{sort -k @var{a+1}.@var{x+1},@var{b+1}.@var{y}} と同じだ。
4740 (訳注: 旧来の書式と新しい書式の違いは、フィールドやフィールド中の文字の位置を
4741 0 から数えるか、1 から数えるかだけではない。
4742 終端指定の位置が、旧来の書式ではキー・フィールドに含まれないのに対し
4743 (つまり、その直前までなのに対し)、新しい書式では含まれるという違いもある。
4744 そこで、上のようになる。なお、旧来の書式であれ、新しい書式であれ、
4746 「非空白文字と空白文字の間の空文字列」であることに注意していただきたい。)
4748 この旧来の動作は、環境変数 @env{_POSIX2_VERSION} を使えば、コントロールすることができる
4749 (@pxref{Standards conformance})。また、@env{POSIXLY_CORRECT}
4750 が設定されていないときに、@samp{-@var{pos2}} が存在する旧来の書式を使っても、有効になる。
4752 標準的なホストで使用することを意図したスクリプトでは、旧来の書式は使わずに、
4753 @option{-k} の方を使用するべきである。たとえば、@samp{sort +2} は使わない方がよい。
4754 @samp{sort ./+2} と解釈されるか、@samp{sort -k 3} と解釈されるか、わからないからである。
4755 そのスクリプトが、旧来の書式にしか対応していないホストでも動作しなければならないのなら、
4756 スクリプト中で @samp{if sort -k 1 </dev/null >/dev/null 2>&1; then @dots{}}
4757 といったテストを行って、どちらの書式を使うべきかを判断すればよい。
4759 用例をいくつか挙げて、オプションの様々な組み合わせを説明する。
4764 数値としてソートし、降順に (つまり、通常の逆に) 並べる。
4771 同時にソートを 4 つまで行う。バッファサイズを 10M にする。
4774 sort --parallel=4 -S 10M
4778 1 番目と 2 番目のフィールドを無視し、さらに 3 番目のフィールドの先頭の空白も無視して、
4779 アルファベット順に並べる。ここで使っているキーは一つであり、
4780 それは 3 番目のフィールドの最初の非空白文字に始まって、
4781 各行の末尾まで続くすべての文字からなっている。
4788 2 番目のフィールドを数値としてソートし、同点の決着を付けるために、
4789 5 番目のフィールドの 3 番目と 4 番目の文字をアルファベット順でソートする。
4790 フィールドの区切りには @samp{:} を使用する。
4793 sort -t : -k 2,2n -k 5.3,5.4
4796 ここで注意していただきたいが、もし @option{-k 2,2n} の代わりに @option{-k 2n}
4797 と書いたなら、@command{sort} は、2 番目のフィールドに始まり、行末まで続くすべての文字を、
4798 主キー (primary key) として、それも「数値」のキーとして使用したことだろう。
4799 @command{sort} を実行するたいていの場合について言えることだが、
4800 複数のフィールドにまたがるキーを数値として使用しても、期待する結果は得られないものである。
4803 上の例では、@samp{n} 修飾子を最初のキーのフィールド終端指定に付けている。
4804 これは、@option{-k 2n,2} とか @option{-k 2n,2n}
4805 とか指定しても、同じことだったろう。@samp{b} を除くすべての修飾子は、
4806 キー指定のフィールド開始側に付けるか、フィールド終端側に付けるか、
4807 あるいは、その両方に付けるかにかかわりなく、
4808 付けられた「キー・フィールド全体」に適用されるのである。
4811 パスワードファイルを 5 番目のフィールドでソートする。このとき、
4812 先頭の空白は無視する。5 番目のフィールドが同じ値になる行については、
4813 3 番目のフィールドのユーザ ID 番号でソートする。
4814 フィールドの区切りは、@samp{:} という文字である。
4817 sort -t : -k 5b,5 -k 3,3n /etc/passwd
4818 sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
4819 sort -t : -b -k 5,5 -k 3,3n /etc/passwd
4823 1 番目のコマンドは、最初のキーの開始位置では先行する空白を無視し、
4824 二番目のキーを数値としてソートするように指定している。他の二つのコマンドは、
4825 グローバル・オプションは修飾子がないソート・キーによって継承されるという特性を利用している。
4826 この場合、継承がうまく働くのは、@option{-k 5b,5b} と
4827 @option{-k 5b,5} が同じことだからだ (訳注: 「@option{-b} オプションは @dots{}
4828 グローバル・オプションから継承した場合は、(開始位置と終端位置の)
4829 両方に付いていることになる」ので、3 番目のコマンドは、@option{-k 5b,5b}
4830 と指定するのと事実上等しい)。両者が同じになるのは、@samp{.@var{c}}
4831 という文字位置を欠いたフィールド終端の指定では、
4832 先頭の空白をスキップしてもしなくても、終端位置は変わらないからである。
4835 一群のログファイルをソートする。主キーとして IPv4 アドレスを使用し、
4836 副キーとしてタイムスタンプを使用する。二つの行の主キーと副キーが全く同じ場合は、
4837 入力されたときと同じ順番で、その行を出力する。ログファイルは、次のような行からなっている。
4840 4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1
4841 211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2
4844 フィールドは、ただ 1 個の空白で区切られている。
4845 IPv4 アドレスのソートは辞書順 (lexicographically) で行う。
4846 たとえば、212.61.52.2 は 212.129.233.201 の前に来る。
4850 sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
4851 sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
4854 この例の場合は、@command{sort} を一回起動するだけでは、ことがすまない。
4855 日付が空白 1 個のすぐ後に置かれているだけなのに対して、
4856 IPv4 の構成要素は @samp{.} で区切られているからである。そこで、作業を分割し、
4857 @command{sort} を 2 回起動している。1 回目はタイムスタンプでソートし、
4858 2 回目は IPv4 アドレスでソートするわけだ。タイムスタンプは、
4859 年、月、日のフィールドの順番でソートし、最後に、時・分・秒のフィールドでソートしているが、
4860 それは @option{-k} オプションを使って、各フィールドを分離することで実現している。
4861 時・分・秒を除いて、各キー・フィールドの終端を指定する必要はない。
4862 @samp{n} や @samp{M} 修飾子は、フィールドの先頭にある数値や月名の短縮形に基づいてソートを行うが、
4863 そうしたものは、フィールドの境界を越えられないからである。IPv4 アドレスのソートは、
4864 辞書順で行っている。なお、二回目のソートで @samp{-s} を使っているのは、
4865 主キーで一ヶ所にまとめられる行が、副キーによってソートされているようにするためである。
4866 それに対して、一回目のソートで @samp{-s} を使っているのは、
4867 二つのソートの組み合わせ全体を入力順尊重 (stable) にするためだ。
4870 アルファベットの大文字小文字の違いを無視してソートし、その順番で
4874 find src -type f -print0 | sort -z -f | xargs -0 etags --append
4877 この例では、@option{-print0}, @option{-z}, @option{-0} といったオプションを使っている。
4878 そのため、空白などの特殊文字を含んでいるファイル名が、
4879 ソート操作によって分断されることがない。
4881 @c This example is a bit contrived and needs more explanation.
4883 @c Sort records separated by an arbitrary string by using a pipe to convert
4884 @c each record delimiter string to @samp{\0}, then using sort's -z option,
4885 @c and converting each @samp{\0} back to the original record delimiter.
4888 @c printf 'c\n\nb\n\na\n' |
4889 @c perl -0pe 's/\n\n/\n\0/g' |
4891 @c perl -0pe 's/\0/\n/g'
4895 慣用句 DSU (Decorate Sort Undecorate) の手法 (訳注: 指標を付けて、
4896 ソートして、指標を取る) を採用して、短いものから長いものへと、行を並べる。
4899 awk '@{print length, $0@}' /etc/passwd | sort -n | cut -f2- -d' '
4902 一般に、あるデータが @command{sort} コマンドでは直接ソートできないとか、
4903 効率が悪いというとき、そうしたデータをソートするのに、この手法が役に立つ。
4906 ディレクトリをランダムな順番でで並べる。ただし、各ディレクトリ内のファイルについては、
4907 その順番を維持する。一例を挙げると、この方法で演奏リストを作成すれば、
4909 各アルバム内の曲は通常のソート順で演奏するといったことが可能になる。
4912 ls */* | sort -t / -k 1,1R -k 2,2
4918 @node shuf invocation
4919 @section @command{shuf}: テキストをシャッフルする
4922 @cindex shuffling files
4924 @command{shuf} は、入力された行をランダムに並べ替えてから出力することによって、
4925 入力のシャッフルを行う。どの並び替えが出力されるかは、確率的に等しい。
4930 shuf [@var{option}]@dots{} [@var{file}]
4931 shuf -e [@var{option}]@dots{} [@var{arg}]@dots{}
4932 shuf -i @var{lo}-@var{hi} [@var{option}]@dots{}
4935 @command{shuf} には三つの動作モードがあり、それぞれ、入力行をどこから取得するかが違っている。
4936 デフォルトでは、標準入力から行を読み込む。以下のオプションは、動作モードを変更する。
4944 @cindex command-line operands to shuffle
4945 コマンドラインの各オペランドを入力行として扱う。
4947 @item -i @var{lo}-@var{hi}
4948 @itemx --input-range=@var{lo}-@var{hi}
4950 @opindex --input-range
4951 @cindex input range to shuffle
4952 @var{lo} から @var{hi} の範囲の符号なしの 10 進整数を
4953 1 行に 1 個含むファイルから入力があったかのように動作する。
4957 @command{shuf} の他のオプションは、どの動作モードでも、その動作に影響を与える。
4961 @item -n @var{count}
4962 @itemx --head-count=@var{count}
4964 @opindex --head-count
4965 @cindex head of output
4966 最大でも @var{count} 行までしか出力しない。デフォルトでは、入力されたすべての行を出力する。
4968 @item -o @var{output-file}
4969 @itemx --output=@var{output-file}
4972 @cindex overwriting of input, allowed
4973 出力を、標準出力ではなく、@var{output-file} に書き出す。@command{shuf} は、
4974 入力をすべて読み込んでから、@var{output-file} をオープンする。従って、
4975 @code{shuf -o F <F} や @code{cat F | shuf -o F} というコマンドを使って、
4976 ファイルを直接書き変える形でシャッフルしても安全である。
4978 @item --random-source=@var{file}
4979 @opindex --random-source
4980 @cindex random source for shuffling
4981 ランダムデータのソースとして @var{file} を使用する。
4982 そのランダムデータはどんな並べ替えになるかを決めるのに使用される。
4983 @xref{Random sources}.
4989 @cindex repeat output values
4990 値の反復出力を行う。別の言い方をすると、置き換えるものについてそのつど選択を行う。
4991 このオプションを使用した場合、出力は入力を並び替えたものになるのではない。
4992 そうではなく、各出力行がすべての入力からランダムに選ばれるのである。
4993 このオプションは、たいてい @option{--head-count} と組み合わせて使用する。
4994 @option{--head-count} を指定しないと、@command{shuf} はいつまでも出力を続けることになる。
5012 上記の結果は、こんな出力になるかもしれない。
5025 shuf -e clubs hearts diamonds spades
5039 下記は、@samp{shuf -i 1-4} というコマンドの出力の一例である。
5049 上記のどの例でも、入力行は 4 行である。
5050 従って、入力は 24 とおりに並べ替えることが可能であり、@command{shuf}
5052 一般的に言うと、入力行が @var{n} 行なら、@var{n}! とおりに
5053 (@var{n} の階乗、すなわち、@w{@var{n} * (@var{n} - 1) * @dots{} * 1} とおりに)
5057 それぞれが 0 から 9 までの範囲にある数値を 50 回ランダムに出力するには、次のようにする。
5060 shuf -r -n 50 -i 0-9
5064 コイン・トス 100 回をシミュレートする。
5067 shuf -r -n 100 -e Head Tail
5073 @node uniq invocation
5074 @section @command{uniq}: ファイルから重複を省く
5077 @cindex uniquify files
5079 @command{uniq} は、指定された @var{input} ファイルにある行を、重複を省いて書き出す。
5080 ファイルが指定されていない場合や、@var{input} として
5081 @samp{-} が指定されている場合は、標準入力を対象とする。
5086 uniq [@var{option}]@dots{} [@var{input} [@var{output}]]
5089 デフォルトでは、@command{uniq} は入力された行を表示するとき、
5090 隣接する同一行があれば、出力に重複する行が現れないように、最初の行だけを残して、
5091 残りの行を捨ててしまう。また、オプションによっては、重複しない行を捨てることや、
5092 すべての隣接する同一行を捨てることもできる。
5094 入力はソートされている必要はないが、重複する入力行が検出されるのは、
5095 それが隣接しているときだけである。もし、隣接していない重複行も捨てたいのなら、
5096 @code{sort -u} を使うとよいだろう。 @xref{sort invocation}.
5099 比較には @env{LC_COLLATE} ロケール・カテゴリが指定しているルールを使用する。
5101 @var{output} ファイルが指定されていない場合、@command{uniq} は標準出力に書き出す。
5103 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
5108 @itemx --skip-fields=@var{n}
5110 @opindex --skip-fields
5111 重複の検査を行う前に、各行のフィールドを @var{n} 個スキップする。その行に
5112 @var{n} 個より少ないフィールドしかない場合は、比較に null 文字列を使用する。
5113 フィールドとは、少なくとも 1 個以上のスペースやタブで間を区切られた、スペースやタブを含まない文字の連続である。
5115 互換性のために、@command{uniq} は @option{-@var{n}} という旧来のオプション書式をサポートしている。
5116 新しいスクリプトでは、@option{-f @var{n}} の方を使うべきである。
5119 @itemx --skip-chars=@var{n}
5121 @opindex --skip-chars
5122 重複の検査を行う前に、@var{n} 文字スキップする。
5123 その行に @var{n} 個より少ない文字しかない場合は、比較に null 文字列を使用する。
5124 フィールドをスキップするオプションと、文字をスキップするオプションの両方を使っている場合は、
5127 @vindex _POSIX2_VERSION
5128 POSIX 1003.1-2001 に準拠していないシステムでは、@command{uniq} が
5129 @option{+@var{n}} という旧来のオプションの書式をサポートしている。
5130 この旧来の書式は、環境変数 @env{_POSIX2_VERSION} を使えば、コントロールできるが (@pxref{Standards
5132 移植を考慮したスクリプトでは、この環境変数に動作が依存するコマンドの使用は、避けた方がよい。
5133 たとえば、@samp{uniq +10} ではなく、@samp{uniq ./+10} や @samp{uniq -s 10}
5134 を使うべきである。前者では、@samp{+10} が、オプションかファイル名か、まぎらわしいからだ。
5143 @itemx --ignore-case
5145 @opindex --ignore-case
5146 行を比較するとき、アルファベットの大文字小文字を区別しない。
5152 @cindex repeated lines, outputting
5153 重複していない行を除去する。このオプションを単独で使った場合、@command{uniq}
5154 は、連続する同一行のうち、最初の 1 行だけを表示し、それ以外の何も表示しない。
5157 @itemx --all-repeated[=@var{delimit-method}]
5159 @opindex --all-repeated
5160 @cindex all repeated lines, outputting
5161 入力行のうち、連続する同一行の二行目以降を除去せず、重複していない行だけを除去する。
5162 このオプションが役に立つのは、主として、大文字小文字を無視するとか、
5163 選択したフィールドのみを比較するとかいった、他のオプションと組み合わせて使うときである。
5164 長い書式のオプションで使用できる @var{delimit-method} は、
5165 省略可能であり、指定した場合は、重複行のグループ間の区切り方を指示することになる。
5166 @var{delimit-method} は、以下の一つでなければならない。
5171 重複行のグループ間に、区切りの印を置かない。@option{--all-repeated}
5172 (@option{-D}) とのみ指定するのと同じことである。
5175 重複行の各グループの前に改行を出力する。
5176 @macro nulOutputNote
5177 @option{--zero-terminated} (@option{-z}) を指定している場合は、
5178 区切りの印として改行の代わりに、ゼロバイト (ASCII NUL) を使用する。
5183 重複行のグループ間を 1 個の改行で分離する。これは、@samp{prepend}
5184 を使うのとほぼ同じだが、最初のグループの前に区切りの印を挿入しないのが異なっている。
5185 それ故、ユーザが出力を直接見る場合に、より適しているかもしれない。@nulOutputNote
5188 @macro ambiguousGroupNote
5189 注意していただきたいが、グループ同士を改行で分離しているとき、
5190 入力ストリームに複数の空行があると、出力がまぎらわしいものになる。
5191 これを避けるには、入力を @samp{tr -s '\\n'} でフィルタリングして、
5196 @c FIXME: give an example showing *how* it's useful
5197 このオプションは、GNU による拡張である。
5199 @item --group[=@var{delimit-method}]
5201 @cindex all lines, grouping
5202 すべての行を出力し、他と区別される各グループの間に区切りを入れる。
5203 @nulOutputNote @var{delimit-method}
5204 は省略可能であり、指定した場合は、グループ間の区切り方を指示することになる。
5205 @var{delimit-method} は、以下の一つでなければならない。
5210 他と区別されるグループを 1 個の区切りの印で分離する。
5211 これが、何も指定されていないときの、デフォルトの区切り方であり、
5212 出力をユーザに直接見せる場合に適している。
5215 他と区別される各グループの前に区切りの印を出力する。
5218 他と区別される各グループの後ろに区切りの印を出力する。
5221 他と区別される各グループの前後に区切りの印を出力する。
5226 このオプションは、GNU による拡張である。
5232 @cindex unique lines, outputting
5233 重複する入力行のグループを表示するときは (訳注: すなわち、@option{--all-repeated}
5234 (@option{-D}) オプションを使用しているときは)、グループの最後の行を表示しない。
5235 このオプションを単独で使用する場合は、ユニークな
5236 (訳注: この場合は、同一行が連続していないという意味) 行だけを表示し、それ以外の何も表示しない。
5239 @itemx --check-chars=@var{n}
5241 @opindex --check-chars
5242 各行で (フィールドや文字をスキップする指定があれば、スキップした後で)
5243 文字を何個まで比較するかを指定する。デフォルトでは、行の残り全部が比較の対象になる。
5245 @optZeroTerminated @newlineFieldSeparator
5252 @node comm invocation
5253 @section @command{comm}: ソート済みの二つのファイルを一行づつ比較する
5256 @cindex line-by-line comparison
5257 @cindex comparing sorted files
5259 @command{comm} は、二つの入力ファイルの共通する行と独自な行を、標準出力に区別して書き出す。
5260 @samp{-} というファイル名は、標準入力を意味している。
5265 comm [@var{option}]@dots{} @var{file1} @var{file2}
5269 入力ファイルは、@command{comm} に渡す前に、@env{LC_COLLATE}
5270 のロケールによって規定された照合順序でソートされていなければならない。
5271 入力ファイルが改行以外の文字で終わっている場合は、自動的に改行が追加される。
5272 @command{sort} コマンドをオプションなしで実行すると、@command{comm} の入力にふさわしいファイルが必ず得られる。
5274 @cindex differing lines
5275 @cindex common lines
5276 @c FIXME: when there's an option to supply an alternative separator
5277 @c string, append "by default" to the above sentence.
5278 オプションを付けずに実行すると、@command{comm} は 3 列の出力を生成する。
5279 1 列目は @var{file1} にのみある行であり、2 列目は @var{file2} にのみある行、そして
5280 3 列目は両方のファイルに共通する行である。各列は、1 個のタブ文字で区切られる。
5285 @option{-1}, @option{-2}, @option{-3} というオプションは、対応する列
5286 (と区切り記号) を表示しないようにする。
5287 オプションについては、「共通オプション」の章も参照すること。 @ref{Common options}.
5289 比較のための他のユーティリティとは違って、@command{comm} の終了ステータスは、
5290 比較結果の如何によらない。@command{comm} は、正常終了すると 0 の終了コードを返す。
5291 エラーがあれば、0 以外のステータスで終了する。
5293 @macro checkOrderOption{cmd}
5294 @option{--check-order} を指定した場合、入力がソートされていないと、
5295 エラーメッセージを出して、実行を中断する。@option{--nocheck-order}
5296 オプションを指定した場合は、入力がソートされていなくても、エラーメッセージを出すことはない。
5297 どちらのオプションも指定されていない場合に、入力がソートされていないとの診断を下すのは、
5299 片方の入力ファイルにもう一方と対にならない行が見つかったときだけであり、
5300 それも入力ファイルのどちらも空ではなく、中身を持っているときだけである。
5302 @ifclear JOIN_COMMAND
5303 片方の入力ファイルにもう一方と対にならない行が見つかったときだけである。
5305 入力ファイルがソートされていないと診断すると、@command{\cmd\}
5306 は 0 以外のステータスで終了する (従って、そうした出力は使用するべきではない)。
5308 入力ファイルがきちんとソートされていず、しかも、対にならない行を含む場合に、
5309 @option{--nocheck-order} を指定して、そうしたファイルを @command{\cmd\}
5310 で無理矢理処理しても、何か特定の結果をもたらすことは保証できない。
5311 おそらく出力は、期待に添わないものになるだろう。
5313 @checkOrderOption{comm}
5318 入力ファイルのどちらかの内容がきちんとソートされていないと、
5319 エラーメッセージを出して、実行に失敗する。
5321 @item --nocheck-order
5322 入力ファイルの内容がソートされた順番になっているかどうかを、
5323 どちらのファイルについてもチェックしない。
5327 @item --output-delimiter=@var{str}
5328 出力における隣り合う列の間に、デフォルトのタブ文字 1 個ではなく、
5331 区切り記号の @var{str} は、空であってはならない。
5336 通常の出力と同じように、1 列目は @var{file1} にのみある行の合計数、
5337 2 列目は @var{file2} にのみある行の合計数、3 列目は両方のファイルに共通する行の合計数である。
5338 さらに 4 列目に @samp{total} という文字が追加される。
5340 次の例では、@command{comm} は通常の出力を省略して (@option{-123})、
5344 $ printf '%s\n' a b c d e > file1
5345 $ printf '%s\n' b c d e f g > file2
5346 $ comm --total -123 file1 file2
5350 このオプションは GNU の拡張である (coreutils 8.26 から)。
5351 移植を考慮したスクリプトで合計数を出したければ、@command{wc}
5352 を使用するべきである。たとえば、上記の例なら、次のようにする。
5355 $ comm -23 file1 file2 | wc -l # file1 にのみある行の行数
5357 $ comm -13 file1 file2 | wc -l # file2 にのみある行の行数
5359 $ comm -12 file1 file2 | wc -l # 両方のファイルに共通する行の行数
5367 @node ptx invocation
5368 @section @command{ptx}: パミューテド・インデックスを作成する
5372 @command{ptx} の基本的な働きは、テキストファイルを読み込んで、
5373 パミューテド・インデックスを作成することである。パミューテド・インデックスというのは、
5374 各キーワードに前後の文脈を付けて索引項目にするインデックスのことだ。
5376 (訳注: パミューテド・インデックスは、KWIC (Key Word In Context)
5377 インデックスとも言われる。簡単に言えば、本文にあるとおり、
5378 キーワードに前後の文脈を付けて項目として立てる索引のことである。たとえば、"The cow
5379 jumped over the moon." という文があるとしよう。今、キーワードを角カッコ ([])
5380 で示すとすると、@command{ptx} による一番素朴なパミューテド・インデックスの作成では、
5384 [The] cow jumped over the moon.
5385 The [cow] jumped over the moon.
5386 The cow [jumped] over the moon.
5387 The cow jumped [over] the moon.
5388 The cow jumped over [the] moon.
5389 The cow jumped over the [moon].
5393 という、キーワードの位置だけが違う 6 個の索引項目が作られ、
5394 キーワードによってソートされて、出力される。
5395 「パミューテド (permuted)」というのは、文中でキーワードが順番に移動するのを、
5396 円順列 (cyclic permutation) に見立てているかららしい。
5399 上記の文に対して何のオプションも付けずに @command{ptx}
5400 を実行したときの実際の出力は、次のようになる。出力された行の中央の
5401 (すなわち、少し長めの空白の後ろの) 単語がキーワードである。
5402 大文字小文字を区別してアルファベット順に並んでいるのが、おわかりになるだろう。
5405 $ echo "The cow jumped over the moon." | ptx
5406 The cow jumped over the moon.
5407 The cow jumped over the moon.
5408 The cow jumped over the moon.
5409 The cow jumped over the moon.
5410 The cow jumped over the moon.
5411 The cow jumped over the moon.
5414 パミューテド・インデックスの代表的な例としては、
5415 英語などの聖書の巻末に付属している文脈付きの語句索引、「コンコーダンス」を挙げることができる。
5416 実際、この文書でもコンコーダンスをパミューテド・インデックスの同義語として使用している。
5417 なお、この @command{ptx} プログラムは、日本語に対応していない。)
5419 @command{ptx} 実行の書式は次のうちのどちらかである。
5422 ptx [@var{option} @dots{}] [@var{file} @dots{}]
5423 ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
5426 @option{-G} (または、それと等価な @option{--traditional}) オプションを指定すると、
5427 GNU によるすべての拡張が無効になり、従来のモードで動作するようになる。
5428 従って、いくつかの制限が課されるようになり、プログラムのオプションのデフォルトの値がいくつか変更される。
5429 @option{-G} が指定されていない場合は、GNU による拡張が常に有効になる。
5430 @command{ptx} に対する GNU の拡張については、この文書では折に触れて説明している。
5431 拡張の詳細なリストについては、「GNU による @command{ptx} の拡張」の節を御覧になっていただきたい。
5432 @xref{Compatibility in ptx}.
5434 個々のオプションについては、以下に続く節で説明する。
5436 GNU による拡張が有効になっていれば、オプションの後ろに 0 個以上の
5437 @var{file} を指定することができる。@var{file} を一つも指定しない場合は、標準入力が読み込まれる。
5438 @var{file} を 1 個以上指定した場合、それは入力ファイルの名前であり、
5439 入力ファイルはすべて順番に、あたかもすべてのファイルが結合されているかのように読み込まれる。
5440 とは言え、各ファイル同士は文脈的に完全に分離しており、
5441 参照箇所情報の自動作成を指定している場合に、参照箇所のファイル名や行番号が指し示すのは、
5442 個々の入力テキストファイルのそれである。
5443 どの場合でも、@command{ptx} は、パミューテド・インデックスを標準出力に出力する。
5445 GNU による拡張が有効になっていない場合、すなわち、プログラムが従来モードで動作する場合は、
5446 オプションのほかに 0 から 2 個のパラメータを指定できる。パラメータがない場合、
5447 プログラムは標準入力を読み込んで、標準出力にパミューテド・インデックスを出力する。
5448 パラメータが 1 個だけの場合、それが示しているのは、標準入力の代わりに読み込まれるテキストファイル
5449 (訳注: 上記書式の @var{input}) の名前である。
5450 パラメータが二つある場合、それぞれが示しているのは、読み込み対象の @var{input}
5451 ファイルと出力先の @var{output} ファイルの名前だ。
5452 この場合、二番目のパラメータによって指定されたファイルの元の内容が破壊されることに、
5453 くれぐれも気をつけていただきたい。この動作は、System V の @command{ptx}
5454 との互換性を維持するために必要になっているものだが、
5455 通常 GNU の規格では、オプションによって指定されるのではない出力パラメータを、使用しないように勧めている。
5457 オプションの値や入力テキストファイルとして指定するいかなるファイルに
5458 対しても、ファイル名の代わりに 1 個のダッシュ @samp{-} を使用することが
5459 できる。その場合は、標準入力が使われることになる。もっとも、この習慣を
5460 プログラム 1 回の起動につき 1 回以上使うのは、たぶん理屈に合わない。
5463 * General options in ptx:: プログラム全体の動作に関係するオプション。
5464 * Charset selection in ptx:: 使用している文字セットについて。
5465 * Input processing in ptx:: 入力のフィールドと文脈、及びキーワードの選択。
5466 * Output formatting in ptx:: 出力フォーマットのタイプ、及びフィールドの幅。
5467 * Compatibility in ptx::
5471 @node General options in ptx
5477 @itemx --traditional
5478 すでに述べたように、このオプションは @command{ptx} に対する
5479 GNU による拡張のすべてを無効にして、動作を従来モードに切り替える。
5482 簡単なヘルプメッセージを標準出力に表示し、それ以上の処理をせずに終了する。
5485 プログラムのバージョンを標準出力に表示し、それ以上の処理をせずに終了する。
5492 @node Charset selection in ptx
5493 @subsection @command{ptx} が使用する文字セット
5495 @c FIXME: People don't necessarily know what an IBM-PC was these days.
5496 現在の設定では、@command{ptx} プログラムは、入力ファイルが符号化に
5497 8-bit の ISO 8859-1 コード (Latin-1 文字セットとも言われる)
5498 を使用しているものと見なすようになっている。
5499 ただし、MS-DOS 用にコンパイルされている場合は別で、
5500 その場合は、IBM-PC の文字セットが使用される (GNU の @command{ptx} が
5501 MS-DOS マシンで使えるかどうか、今ではわからないけれど)。
5502 7-bit ASCII と比べると、ISO 8859-1 の文字セットは、アルファベットの部分が異なっている。
5503 そのため、正規表現におけるマッチングの振る舞いが変わってくる。
5504 キーワードに対するデフォルトの正規表現が (訳注: つまり、GNU の拡張が有効なときの
5505 @samp{\w+} が)、英語で使用しない文字や、ウムラウトやアクセントのような発音区別符の付いた文字を受け入れることになるわけである。
5506 とは言え、キーワードのソート方法は今だに大雑把であり、使用している文字セットの順序にきわめて盲目的に従っている。
5511 @itemx --ignore-case
5513 @opindex --ignore-case
5514 ソートするとき、小文字を大文字と同じものとして扱う。
5519 @node Input processing in ptx
5520 @subsection 単語の選択と入力の処理
5525 @itemx --break-file=@var{file}
5527 @opindex --break-file
5529 このオプションを使えば、単語を構成するのはどんな文字かを、@option{-W}
5530 とは別のやり方で定義することができる。このオプションでファイルを指名し、
5531 そこに、単語の構成要素になることができない文字のリストを入れておくのである。
5532 このファイルは、@dfn{Break file} と呼ばれる。Break file
5533 に含まれていないいかなる文字も、単語の構成要素になるわけだ。@option{-b}
5534 と @option{-W} の両方のオプションが指定されている場合は、@option{-W}
5535 の方が優先され、@option{-b} は無視される。
5537 GNU の拡張が有効になっているとき、改行を単語区切り文字 (break character)
5538 にしない唯一の方法は、単語区切り文字をすべて Break file に書き込み、
5539 そこに改行を全く含めないことである。Break file 末尾の改行も除かなければならない。
5540 GNU の拡張が無効な場合、スペース、タブ、改行は、それが Break file
5541 に含まれていなくても、常に単語区切り文字と見なされる。
5544 @itemx --ignore-file=@var{file}
5546 @opindex --ignore-file
5549 出力するコンコーダンスでキーワードとして採用しない単語のリストを入れておく。
5550 このファイルは、@dfn{Ignore file} と呼ばれる。
5551 このファイルは、1 行 1 単語の形式であり、単語の分離は常に行末によって行われて、
5552 @option{-S} オプションの値の影響を受けることはない。
5555 @itemx --only-file=@var{file}
5557 @opindex --only-file
5560 出力するコンコーダンスでキーワードとして採用する単語のリストを入れておく。
5561 このファイルに書かれていないどんな単語も、キーワードとして採用されることはない。
5562 このファイルは、@dfn{Only file} と呼ばれる。
5563 このファイルは、1 行 1 単語の形式であり、単語の分離は常に行末によって行われて、
5564 @option{-S} オプションの値の影響を受けることはない。
5566 Only file として使われるデフォルトのファイルは存在しない。Only file
5567 と Ignore file の両方が指定されている場合に、ある単語がキーワードと見なされるのは、
5568 その単語が Only file に存在し、しかも Ignore file に存在しないときだけである。
5573 @opindex --references
5575 各入力行において、行頭にあるホワイトスペース以外の文字の連続を参照箇所情報
5576 (訳注: たとえば、ファイル名、ページ番号、行番号など)
5577 として扱うようにする。この参照箇所情報は、その入力行がどこにあるかを、
5578 作成されるパミューテド・インデックス中で示すために用いられる。
5579 参照箇所情報の生成についての詳細は、次節「出力のフォーマット」を御覧いただきたい。
5580 @xref{Output formatting in ptx}.
5581 このオプションを使用すると、@option{-S} オプションのデフォルトの値が変更されることになる
5582 (訳注: すなわち、GNU の拡張が有効な場合も、@option{-S} オプションのデフォルト値が文末ではなく、行末になる)。
5584 このオプションを使用したとき、@command{ptx} プログラムは、参照箇所情報が出力される文脈に混入しないようにするが、
5585 その試みはそれほど徹底したものではない。しかし、文脈が改行できちんと終止していれば、
5586 @command{ptx} はその試みに成功する。もし、@option{-r} オプションが
5587 @option{-S} オプションのデフォルト値とともに使われているか、
5588 あるいは、GNU の拡張が無効になっているならば、この条件は必ず満たされることになる。
5589 従って、その場合は、参照箇所情報が出力される文脈からきちんと分離される。
5591 (訳注: 文脈 (context) というのは、
5592 出力については、キーワードとその前後と考えておけばよいが、入力について言うと、
5593 @command{ptx} が操作の対象にする本文の単位 --- 入力のまとまり --- を指すことになる。
5594 @option{-S} の値によって、普通は文か、行になる。)
5596 @item -S @var{regexp}
5597 @itemx --sentence-regexp=@var{regexp}
5599 @opindex --sentence-regexp
5601 このオプションでは、行の終わり、または文の終わりを示す正規表現を指定する。
5603 (訳注: もう少し説明すると、このオプションで指定するのは、
5604 入力を何で区切るかということである。改行で区切れば、いわゆる行が、@command{ptx}
5605 の操作の対象となる入力のまとまり (入力の単位) になり、
5606 ピリオドなどで区切れば、いわゆる文が、入力のまとまりになる。
5607 このまとまりが @command{ptx} にとっての文脈でもある。
5608 ただし、出力では、文脈のすべてが表示されるとはかぎらない。
5609 なお、そうしたければ、行末や文末以外で入力を区切ることもできる。)
5611 実際のテキストでは、ここで指定される正規表現のみが、
5612 行の終わりや文の終わりの指標として使われているとはかぎらない。
5613 また、入力の区切りに何を指定しようとも、このオプションの外で特別な意味を持つことはない
5614 (訳注: すなわち、オプション @option{-A}, @option{-i}, @option{-o}
5615 などには影響が及ばない)。デフォルトでは、GNU の拡張が有効なとき、@option{-r}
5616 オプションが指定されていなければ、文の終わりの方が入力の区切りとして使われる。
5617 その場合は、GNU Emacs から取り込まれた次の正規表現が使用される。
5620 [.?!][]\"')@}]*\\($\\|\t\\| \\)[ \t\n]*
5623 GNU の拡張が無効になっている場合や、@option{-r} オプションが指定されている場合は、
5624 行の終わりの方が入力の区切りとして使用される。
5625 その場合、デフォルトの正規表現は、単に次のものである。
5631 空の @var{regexp} を使用するのは、行末や文末の認識を全く無効にするのと同じである。
5632 その場合、ファイル全体が、たった 1 個の長い行、あるいは、長い文と見なされることになる。
5633 ユーザとしては、オプション @option{-F ""}
5634 を使用して、省略の印の生成も全く行わないようにしたくなるかもしれない。
5635 @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
5638 キーワードがたまたま入力行や入力文の先頭近くにあると、
5639 出力する文脈行の行頭に、使用しない領域が生ずることがよくある。
5640 また、キーワードが入力行や入力文の末尾近くにあると、
5641 出力する文脈行の行末に、使用しない領域がしばしば生ずる。
5642 @command{ptx} プログラムは、その文脈を折り返して、そうした不使用領域を埋めようと試みる。
5643 すなわち、その入力行や入力文の後続する部分 (@var{tail}) を使って、
5644 出力する行の左にある不使用領域を埋め、その入力行や入力文の先行する部分
5645 (@var{head}) を使って、出力する行の右にある不使用領域を埋めるのである。
5647 このオプションの引数中では、ユーザーの便宜のために、
5648 C 言語由来のよく使うバックスラッシュ・エスケープシーケンスの多くが、@command{ptx}
5649 そのものによって認識され、対応する文字に変換されるようになっている。
5651 @item -W @var{regexp}
5652 @itemx --word-regexp=@var{regexp}
5654 @opindex --word-regexp
5656 このオプションでは、各キーワードとなる単語とはどのようなものかを示す正規表現を指定する。
5657 デフォルトでは、GNU の拡張が有効になっていれば、単語とはアルファベットの文字の連続である。
5658 すなわち、使用される正規表現は @samp{\w+} だ。
5659 GNU の拡張が無効な場合、デフォルトで単語と見なされるのは、
5660 何であれ、スペース、タブ、改行で区切られているものである。
5661 この場合、使用される正規表現は @samp{[^ \t\n]+} になる。
5663 @var{regexp} に空の文字列を指定するのは、このオプションを使用しないのと同じことである。
5664 @xref{Regexps, , Syntax of Regular Expressions, emacs, The GNU Emacs
5667 このオプションの引数中では、ユーザーの便宜のために、
5668 C 言語で見られるような、よく使うバックスラッシュ・エスケープシーケンスの多くが、
5669 @command{ptx} そのものによって認識され、対応する文字に変換されるようになっている。
5674 @node Output formatting in ptx
5675 @subsection 出力のフォーマット
5677 出力のフォーマットを決めるのは、主として @option{-O} と @option{-T} オプションだが、
5678 両者については、以下のオプション一覧で説明している。@option{-O} も @option{-T}
5679 も指定されず、しかも、GNU の拡張が有効な場合、@command{ptx} プログラムは、
5680 ダム端末に適した出力フォーマットを選択する。
5681 各キーワードは一行の中央に表示され、前後の文脈がその左右に出力される。
5682 コンコーダンスとしての出力が一目でわかるように
5683 (訳注: すなわち、どれがキーワードで、どれがその前後の語句かわかりやすいように)、
5684 各フィールドはきちんと揃えられる。おまけの機能として、次のものがある。
5685 参照箇所情報の自動作成が @option{-A} オプションによって選択され、
5686 参照箇所が左側の文脈の前に表示される場合には
5687 (すなわち、@option{-R} オプションが選択されていない場合には)、
5688 参照箇所の後ろにコロンが追加される。こうしておくと、参照箇所を
5689 GNU Emacs の @code{next-error} 処理にうまく渡せるようになるのである。
5690 このデフォルトの出力フォーマットでは、改行やタブのようなホワイトスペース文字は、
5691 それぞれ単にただ 1 個のスペースに変換されるだけであり、
5692 連続するスペースをわざわざ圧縮するようなことは行われない。
5693 この動作は、将来変更されるかもしれない。そうしたホワイトスペース文字を除いて、
5694 使用している 256 文字からなる文字セット中のほかのすべての文字は、
5695 入力から出力へと手を加えずにそのまま送り出される。
5697 出力フォーマットは、以下のオプションによって、さらに制御される。
5701 @item -g @var{number}
5702 @itemx --gap-size=@var{number}
5706 出力行の各フィールドは、ホワイトスペースによって区切られるが、
5707 そのフィールド同士の間隔の最小サイズを指定する。
5709 @item -w @var{number}
5710 @itemx --width=@var{number}
5714 最終的に出力される各行の最大長を指定する。
5715 参照箇所を使用する際、その長さが最大長に含まれるかどうかは、
5716 @option{-R} オプションを付けるか付けないかよって決まる。
5717 @option{-R} オプションを指定しない場合、
5718 すなわち、参照箇所が左の文脈より前に表示される場合は、すべての参照箇所中の最大長が、
5719 出力行の最大長の長さの内に含まれることになる。@option{-R}
5720 オプションを指定した場合、すなわち、参照箇所が右の文脈より後に表示される場合は、
5721 参照箇所や、それに先行するフィールドの区切りが占める領域は、
5725 @itemx --auto-reference
5727 @opindex --auto-reference
5730 ファイル名と行番号からなる参照箇所が自動的に生成されて、各入力行に付くことになる。
5731 ファイル名と行番号は 1 個のコロンで区切られる。
5732 ただし、標準入力から読み込んでいる場合は、ファイル名は空になる。
5733 @option{-A} と @option{-r} の両方のオプションが指定されている場合は、
5734 入力中にある参照箇所情報が読み込まれた上で本文から外されることは @option{-r}
5735 単独の場合と同じだが、出力時に使用されるのは、自動生成された参照箇所の方である。
5736 すなわち、入力中にある参照箇所情報は、自動生成されたもので置き換えられる。
5739 @itemx --right-side-refs
5741 @opindex --right-side-refs
5743 デフォルトの出力フォーマットでは、@option{-R} オプションを使用しない場合、
5744 @option{-r} や @option{-A} オプションの働きによって生成される参照箇所は、
5745 出力行の左の端、すなわち、左の文脈の前に表示される。それに対して、
5746 デフォルトの出力フォーマットで @option{-R} オプションを指定した場合、
5747 参照箇所が表示されるのは、各出力行の右端、すなわち、右の文脈の後ろになる。
5748 ほかのいかなる出力フォーマットにおいても、基本的に @option{-R}
5749 オプションは無視されるが (訳注: デフォルト以外の出力フォーマットでは、
5750 @option{-R} オプションがあってもなくても、参照箇所は右端に出力される)、
5751 それでも、@option{-R} オプションが付いていると、参照箇所の長さが、@option{-w}
5752 で指定した出力行全体の長さの内に入らないという働きだけは残る。
5754 このオプションは、GNU の拡張が無効であるときは、常に自動的に選択される。
5756 @item -F @var{string}
5757 @itemx --flag-truncation=@var{string}
5759 @opindex --flag-truncation
5761 このオプションを指定すると、出力に省略があった場合、それを示すために文字列 @var{string}
5762 を使用するようになる。ほとんどの出力フィールドは、理論上では、@option{-S}
5763 オプションで何を選択するかによって、現在の行、または、現在の文の、先頭や末尾に向かって伸びて行くものである。
5764 しかし、@option{-w} オプションによって長さを変更できるとは言え、
5765 出力行には許される最大長というものがあり、
5766 その最大長はさらにさまざまな出力フィールドで使用する領域に分割されている。
5767 従って、フィールドは、それを収納する現在の出力行の先頭や末尾を越えて伸ばすことができないために、
5768 切り詰めなければならないことがあり、そういうときに、省略が行われるのである。
5769 省略の指標として使用されるデフォルトの文字列は、1 個のスラッシュである。
5770 これは、@option{-F /} と指定した場合と同じだ。
5772 @var{string} には、@option{-F @dots{}} のように 1 個以上の文字を指定してもよい。
5773 また、@var{string} が空文字列 (@option{-F ""}) の場合には、
5774 省略のフラグは立てられないことになり、従って、省略の指標は一切付加されない。
5776 このオプションの引数中では、ユーザーの便宜のために、
5777 C 言語で見られるような、よく使うバックスラッシュ・エスケープシーケンスの多くが、
5778 @command{ptx} そのものによって認識され、対応する文字に変換されるようになっている。
5780 @item -M @var{string}
5781 @itemx --macro-name=@var{string}
5783 @opindex --macro-name
5785 @command{nroff} や @command{troff}、あるいは @TeX{}
5786 で処理するのにふさわしい出力フォーマットを生成するとき、
5787 @samp{xx} の代わりに使用する別の文字列 @var{string} を指定する。
5788 (訳注: @option{-O} や @option{-T} オプションを参照。)
5791 @itemx --format=roff
5793 @opindex --format=roff
5795 出力フォーマットとして、@command{nroff} や @command{troff}
5796 で処理するのに適した形式を選択する。各出力行は次のようになる。
5797 (訳注: 下記の @var{tail} と @var{head} については、前節 @option{--sentence-regexp}
5798 オプションの説明の終わりから 2 番目のパラグラフをご覧いただきたい。
5799 @var{ref} は参照箇所である。)
5802 .xx "@var{tail}" "@var{before}" "@var{keyword_and_after}"@c
5803 "@var{head}" "@var{ref}"
5806 従って、あとは、出力の整形を担当する roff のマクロ @samp{.xx}
5807 を出力ファイルに書き込めばよいことになる。この出力フォーマットは、
5808 GNU の拡張が無効なときのデフォルトである。@samp{xx} を別のマクロ名に変更するには、
5809 @option{-M} オプションを使用すればよい
5810 (訳注: @option{-M "xx"} のように、@samp{xx} の部分のみ指定する)。
5812 この出力フォーマットでは、改行やタブのような非表示文字は、
5813 それぞれただ 1 個のスペースに変換されるだけで、
5814 連続するスペースをわざわざ圧縮するようなことは行われない。
5815 ダブルクォート文字 @samp{"} はそれぞれ二重化されるので、
5816 @command{nroff} や @command{troff} によって正しく処理される。
5821 @opindex --format=tex
5823 出力フォーマットとして、@TeX{} で処理するのに適した形式を選択する。
5825 (訳注: 下記の @var{tail} と @var{head} については、前節 @option{--sentence-regexp}
5826 オプションの説明の終わりから 2 番目のパラグラフをご覧いただきたい。
5827 @var{ref} は参照箇所である。)
5830 \xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@c
5831 @{@var{after}@}@{@var{head}@}@{@var{ref}@}
5835 従って、あとは、出力の整形を担当する @code{\xx} コマンドの定義を出力ファイルに書き込めばよいことになる。
5836 なお、参照箇所の生成が行われていない場合、すなわち、@option{-A} オプションも
5837 @option{-r} オプションも指定されていない場合には、
5838 各 @code{\xx} 呼び出しの最後の引数は出力されないことに注意していただきたい。
5839 @samp{xx} を別のマクロ名に変更するには、@option{-M} オプションを使用すればよい
5840 (訳注: @option{-M "xx"} のように、@samp{xx} の部分のみ指定する)。
5842 この出力フォーマットでは、@samp{$}, @samp{%}, @samp{&}, @samp{#}, @samp{_}
5843 のような特殊文字のいくつかは、自動的にバックスラッシュで保護される。
5844 中カッコ @samp{@{}, @samp{@}} は、一対のドル記号とバックスラッシュとで保護される
5846 バックスラッシュそのものは、@code{\backslash@{@}} というシーケンスになる。
5847 同形の他の文字と区別するために文字の上下に付ける発音区別符のうち、
5848 サーカムフレックスとチルダは、それぞれ @code{\^@{ @}} と @code{\~@{ @}}
5849 というシーケンスになる (訳注: 実際には @code{@{ @}} の位置に
5850 a なり e なりといった文字が来る)。
5851 使用している文字セット中の他の発音区別符が付いている文字についても、
5852 可能なかぎり、適切な @TeX{} のシーケンスが生成される。それ以外の文字について言うと、
5853 改行やタブのような非表示文字や、ASCII の文字セットに属さない他のすべての文字は、
5854 単にただ 1 個のスペースに変換され、連続するスペースをわざわざ圧縮するようなことは行われない。
5855 @TeX{} のための特殊文字の処理は以上のようなものだが、
5856 改善する方法があれば、作者までお知らせいただきたい。
5861 @node Compatibility in ptx
5862 @subsection GNU による @command{ptx} の拡張
5864 このバージョンの @command{ptx} には、System V の @command{ptx}
5866 そうした追加機能は、コマンドラインオプションの @option{-G} を使えば、働かなくなるが、
5867 ほかのコマンドラインオプションによって上書きされれば、話は別である。
5868 もっとも、GNU の拡張の中には、上書きによって回復できないものもあるので、
5869 GNU の拡張を使いたければ、@option{-G} オプションを最初から使わないのが、
5870 すっきりした方法だ。以下に、このプログラムと
5871 System V の @command{ptx} の相違点を挙げておく。
5876 このプログラムでは、一度に複数の入力ファイルを読み込むことができる。
5877 また、生成したコンコーダンスは、常に標準出力に書き出される。
5878 それに対して、System V の @command{ptx} は、ファイルをたった 1 個しか読み込まず、
5879 結果を書き出すのは、標準出力のこともあるが、コマンドに 2 番目の @var{file}
5880 パラメータが指定されていれば、その @var{file} に対してである。
5882 オプションで指定しない出力パラメータを持つのは、危険な習慣であり、
5883 GNU では、できるだけ避けるようにしている。従って、@command{ptx} を GNU と
5884 System V のどちらでも、問題なく同じように使いたいなら、入力ファイルは常に一つしか使わず、
5885 実行結果は常に標準出力に書き出されるものと考えておいた方がよい。
5886 また、@command{ptx} を使用してアプリケーションを作成する場合には、
5887 インストールされている @command{ptx} で @option{-G} オプションが使用できるとわかれば、
5888 @command{ptx} を呼び出すとき、@option{-G} オプションを必ず付けるようにしたくなるかもしれない。
5891 System V の @command{ptx} で利用できるオプションは、@option{-b}, @option{-f}, @option{-g},
5893 @option{-o}, @option{-r}, @option{-t}, @option{-w} だけである。
5894 他のオプションは、すべて GNU の拡張だが、今この箇条書きで繰り返すことはしない。
5895 なお、オプションの中には、以下でも述べているように、GNU の拡張が有効になっていると、
5899 GNU の拡張のデフォルトでは、コンコーダンス出力のフォーマットは、
5900 @command{troff} や @command{nroff} 向けになっていない。
5901 むしろ、ダム端末向けのフォーマットになっている。@command{troff} や
5902 @command{nroff} 向けの出力を選択したかったら、@option{-O} オプションを使用すればよい。
5905 @option{-R} オプションを使用しないと、
5906 参照箇所の最大長が、出力行全体の長さから差し引かれる。
5907 GNU の拡張を無効にすると、参照箇所の長さは、出力行の長さの勘定に入らないことになる。
5910 GNU の拡張が無効になっていても、256 バイトの文字セットのすべての文字が ---
5911 ASCII NUL バイト含めて --- 常に入力ファイルから読み込まれて処理され、
5912 有害な作用をもたらすことはない。それに対して、
5913 System V の @command{ptx} は、8-bit の文字を受け付けない。
5914 若干の制御文字も拒否する。また、チルダ @samp{~} も拒否する。
5917 GNU の拡張が無効になっていても、入力行の長さは、利用できるメモリによってしか制限されない。
5918 それに対して、System V の @command{ptx} が処理の対象にするのは、
5919 各行に付き最初の 200 文字だけである。
5922 単語区切り文字 (break character、単語を構成しない文字) のデフォルトは、
5923 使用している文字セットにおけるアルファベットのすべての文字
5924 (発音区別符のあるなしを問わない) 以外のあらゆる文字である。
5925 GNU の拡張が無効な場合は、単語区切り文字のデフォルトは、スペース、タブ、改行のみになる。
5928 このプログラムは、出力行の長さを System V の @command{ptx} より上手に処理する。
5929 GNU の拡張が無効になっている場合、このプログラムは System V
5930 の @command{ptx} の動作をなるべく真似ようとするが、
5931 それでも、System V のちょっとした癖のいくつかは、完全には再現できない。
5934 ユーザは Ignore file と Only file の両方を指定することができる。
5935 System V の @command{ptx} では、そんなことはできない。
5940 @node tsort invocation
5941 @section @command{tsort}: トポロジカル・ソート
5944 @cindex topological sort
5946 @command{tsort} は、指定された @var{file} に対してトポロジカル・ソートを行う。
5947 入力ファイルが指定されていない場合や、@var{file} として @samp{-}
5948 が指定されている場合は、標準入力を対象にする。
5949 より詳しい説明や、このコマンドが作成された経緯については、次節「@command{tsort}:
5950 誕生の背景」を御覧になっていただきたい。 @ref{tsort background}
5955 tsort [@var{option}] [@var{file}]
5958 @command{tsort} は入力を、空白で区切られた 2 個一組の文字列として読み込む。
5959 そうした文字列の各組は、部分的な順序を示している。
5960 出力は、与えられた部分的な順序に対応する全体としての順序である。
5974 (訳注: 上の例は、"a b/c d/e f/b c/d e" という組を与えている。)
5987 もっと現実的な例を考えてみよう。たくさんの関数をすべて一つのファイルに書いているとしよう。
5988 しかも、一つを除いて、他のすべての関数を static として宣言している。
5989 現在のところ、その例外 (@code{main} ということにする)
5990 が、ファイル中で定義されている最初の関数であり、それが直接呼び出す関数群がそれに続き、
5991 さらにその後に、その関数群が呼び出す関数が続く @dots{}
5992 という形になっている。さて、ここで、プロトタイプを利用することにしたとしよう。
5993 そうなると、呼び出される関数のすべてを宣言するか
5994 (そのためには、定義の部分から情報をどっさりコピーしなければならない)、
5995 あるいは、できるだけ多くの関数が、使用される前に定義されているように、
5996 関数群を並べ替えるか、どちらかを選ばなければならない。
5997 後者の作業を自動化する方法の一つが、各関数についてそれが直接呼び出す関数のリストを作成することである。
5998 そうしたリストを生成するプログラムはたくさんある。
5999 いわゆるコール・グラフを作成するプログラムだ。
6000 以下のリストをご覧になっていただきたい。
6001 各行は、左側の関数が右側の関数を直接呼び出していることを示している。
6007 tail_file pretty_name
6008 tail_file write_header
6010 tail_forever recheck
6011 tail_forever pretty_name
6012 tail_forever write_header
6013 tail_forever dump_remainder
6016 tail_lines start_lines
6017 tail_lines dump_remainder
6018 tail_lines file_lines
6019 tail_lines pipe_lines
6021 tail_bytes start_bytes
6022 tail_bytes dump_remainder
6023 tail_bytes pipe_bytes
6024 file_lines dump_remainder
6028 ここで @command{tsort} を使用すると、
6029 こうした関数について、上記の後者の要求を満たすような順番を作成することができる。
6032 example$ tsort call-graph | tac
6052 @command{tsort} は、入力にループがあれば検出し、
6053 出会った最初のループを標準エラーに書き出す。
6055 一般に、ある部分的な順序に対して、唯一の全体的な順序というものは存在しないことに、
6056 留意していただきたい。上記のコール・グラフの場合で言えば、
6057 関数 @code{parse_options} は、@code{main} の前でありさえすれば、
6060 オプションは、@option{--help} と @option{--version} だけである。
6061 @xref{Common options}.
6066 * tsort background:: tsort が誕生した経緯。
6069 @node tsort background
6070 @subsection @command{tsort}: 誕生の背景
6072 @command{tsort} が存在しているのは、Unix のリンカのごく初期のバージョンでは、
6073 一つのアーカイブファイルの処理をたった一回しか行わず、
6074 それも、ファイルの最初から最後へと順番に見ていくだけだったからである。当時の
6075 @command{ld} は、アーカイブ中の各オブジェクトを読み込むとき、
6076 そのオブジェクトがプログラムに必要かどうかの判断を、
6077 リンク作業のその時点でまだ定義されていない何らかのシンボルを定義しているかどうかを基準にして行っていた。
6079 そのため、アーカイブ中の依存関係には、特別な扱いが必要になった。
6080 たとえば、@code{scanf} はたぶん @code{read} を呼んでいる。
6081 それは、リンカがアーカイブをたった一回最初から順番に読んで行くとき、@code{scanf.o}
6082 が @code{read.o} より前にあることが重要だったということである。
6083 なぜなら、そうなっていないと、@code{scanf} を呼ぶけれど、@code{read}
6084 を呼ばないプログラムでは、@code{read} に対する参照が、予期に反して
6085 "unresolved" になってしまいかねなかったからだ。
6087 この問題に対処する方法は、次のようなものだった。
6088 まず、オブジェクトファイル同士の依存関係の集合を生成した。
6089 この作業は、@command{lorder} というシェルスクリプトによって行われていた。
6090 筆者の知るかぎり、現在 GNU では lorder というツールを提供していないが、
6091 BSD 系のディストリビューションでは、今でもなお見つけることができる。
6093 次に、この @command{lorder} の出力に対して @command{tsort} を実行した。
6094 そして、そのソートされた結果を使って、アーカイブにオブジェクトを追加する順番を決めたのである。
6096 こうした作業全体が、1980 年ごろから時代遅れのものになった。
6097 というのは、Unix のアーカイブは現在ではシンボル・テーブルを内蔵しており
6098 (従来は @command{ranlib} によって作られていたが、今ではたいてい @command{ar}
6099 そのものによって作られている)、Unix のリンカはこのシンボル・テーブルを使用して、
6100 アーカイブファイルに対する複数回の読み込みを効率的に行うからである。
6102 ともあれ、これが tsort が誕生した経緯である。
6103 すなわち、当時のリンカのアーカイブファイルを取り扱う方法に問題があり、
6104 その問題を解決するための工夫だったのだ。
6105 そして、その問題は、その後、別のやり方で解決されるようになったのである。
6108 @node Operating on fields
6112 * cut invocation:: 各行の選択した部分を表示する。
6113 * paste invocation:: 複数のファイルの各行をマージする。
6114 * join invocation:: 共通のフィールドに基づいて行を連結する。
6118 @node cut invocation
6119 @section @command{cut}: 各行の選択した部分を表示する
6122 @command{cut} は、各ファイルから各行の一部を抜き出して、標準出力に書き出す。
6123 ファイルが指定されていない場合や、ファイル名として @samp{-}
6124 が指定されている場合は、標準入力を対象とする。
6129 cut @var{option}@dots{} [@var{file}]@dots{}
6132 以下のオプション一覧で @var{byte-list}, @var{character-list}, @var{field-list}
6133 と表記されているものは、コンマで区切られた、1 個以上の数字や範囲からなるリストである
6134 (範囲は、ダッシュを間に挟む 2 個の数字)。バイト、文字、フィールドは 1 から数える。
6135 不完全な範囲を指定することもでき、@option{-@var{m}} は @samp{1-@var{m}}
6136 と同じことであり、@samp{@var{n}-} は @samp{@var{n}}
6137 から行末、あるいは最後のフィールドまでと同じことである。
6138 リストの要素は、繰り返してもよく、部分的に重なり合ってもよく、どんな順序で指定してもよい。
6139 ただし、入力中の選択した部分が書き出されるのは、読み込まれたときと同じ順序であり、
6140 しかも、ただ一度だけである。(訳注: たとえば、@samp{-f 3,1,3}
6141 などと指定することはできるが、出力されるときは field-1, field-3
6142 の順番であり、field-3 が二度出力されることもない。)
6144 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6148 @item -b @var{byte-list}
6149 @itemx --bytes=@var{byte-list}
6152 @var{byte-list} で指定された位置にあるバイトのみを選択して、表示する。
6153 タブやバックスペースも他の文字と同様に扱う。
6154 すなわち、そうしたものも 1 バイトを占める。出力用のデリミタ (delimiter、区切りの印)
6155 が指定されている場合は (@option{--output-delimiter} の説明を参照)、
6156 選択されたバイトからなる範囲同士の間にデリミタ文字列を出力する。
6158 @item -c @var{character-list}
6159 @itemx --characters=@var{character-list}
6161 @opindex --characters
6162 @var{character-list} で指定された位置にある文字のみを選択して、表示する。
6163 現在のところ、@option{-b} と同じだが、プログラムの国際化が進むと、
6164 動作が変わることになるだろう。タブやバックスペースも他の文字と同様に扱う。
6165 すなわち、そうしたものも 1 文字と数える。
6166 出力用のデリミタが指定されている場合は (@option{--output-delimiter} の説明を参照)、
6167 選択された文字からなる範囲同士の間にデリミタ文字列を出力する。
6169 @item -f @var{field-list}
6170 @itemx --fields=@var{field-list}
6173 @var{field-list} で指定されたフィールドのみを選択して、表示する。
6174 フィールドの区切りは、デフォルトではタブ文字 1 個である。
6175 なお、@option{--only-delimited} (@option{-s}) オプションが指定されていない場合は、
6176 デリミタ文字を全く含まない行も表示する。
6178 一言言っておくと、@command{awk} を使えば、もっと洗練されたフィールド処理ができるようになる。
6179 たとえば、フィールドの順番を入れ替える、
6180 空白文字を入れて列が揃うようにしたフィールドを取り扱う、そういったことが可能になる。
6181 @command{awk} ならデフォルトで、フィールドの区切りに空白文字の連続を使用し
6182 (そして、フィールドの前後から除去し)、さらに、行頭と行末の空白を無視してくれるのだ。
6185 awk '{print $2}' # 2 番目のフィールドを表示する
6186 awk '{print $(NF-1)}' # 最後から 2 番目のフィールドを表示する
6187 awk '{print $2,$1}' # 最初の 2 フィールドを逆に並べる
6190 @command{cut} では、任意の順番でフィールドを指定することができるが、
6191 出力は常にファイル中で出会った順番であることに注意していただきたい。
6193 ありそうにないことだが、@command{awk} が利用できない状況だとしよう。
6194 その場合は、@command{join} コマンドを使えば、
6195 上記で @command{awk} がやっているように、空白文字を処理することができる。
6198 join -a1 -o 1.2 - /dev/null # 2 番目のフィールドを表示する
6199 join -a1 -o 1.2,1.1 - /dev/null # 最初の 2 フィールドを逆に並べる
6203 @item -d @var{input_delim_byte}
6204 @itemx --delimiter=@var{input_delim_byte}
6206 @opindex --delimiter
6207 @option{-f} と併せて使うと、入力のフィールド区切りに @var{input_delim_byte}
6208 の最初のバイトが使用される (デフォルトはタブ)。
6212 マルチバイト文字を分割しない (現在のところ、機能しない)。
6215 @itemx --only-delimited
6217 @opindex --only-delimited
6218 @option{-f} を使うとき、フィールド区切り文字を含まない行の表示をしない。
6219 通常は、フィールド区切り文字を含まない行は、行全体がそのまま表示される。
6221 @item --output-delimiter=@var{output_delim_string}
6222 @opindex --output-delimiter
6223 @option{-f} と一緒に使った場合は、出力フィールド間が
6224 @var{output_delim_string} で区切られる。
6225 @option{-f} を指定したときのデフォルトは、入力時のデリミタを使用することである。
6226 @option{-b} や @option{-c} を使用して、(フィールドの範囲ではなく)
6227 バイト位置や文字位置の範囲を選択した場合は、
6228 選択されたバイトの重なり合わない範囲同士の間に @var{output_delim_string} が出力される。
6231 @opindex --complement
6232 このオプションは GNU の拡張である。@option{-b}, @option{-c}, @option{-f}
6233 オプションで選択されたバイト、文字、フィールドを含まない部分を選択して、表示する。
6234 言い換えれば、そうしたオプションによって指定されたバイトや文字やフィールドは「表示しない」ということだ。
6235 このオプションは、フィールドがたくさんあるとき、そのうちの一部を除いたすべてを表示したい場合に便利である。
6244 @node paste invocation
6245 @section @command{paste}: 複数のファイルの各行をマージする
6248 @cindex merging files
6250 @command{paste} は、指定された各ファイルの行番号が同じ行を、
6251 タブ文字を間にはさんで連結して、標準出力に書き出す。
6252 入力ファイルが全く指定されていない場合や、ファイル名が @samp{-} だった場合は、
6258 paste [@var{option}]@dots{} [@var{file}]@dots{}
6261 たとえば、次のような 2 個のファイルに対して、
6282 $ paste num2 let3 num2
6290 $ paste - let3 - < num2
6296 連続する行を、スペースを間にはさんで結合する。
6298 $ seq 4 | paste -d ' ' - -
6303 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6311 各ファイルから 1 行づつ取り出して連結するのではなく、
6312 一つのファイルのすべての行をまとめて 1 行に連結する。
6316 $ paste -s num2 let3
6321 @item -d @var{delim-list}
6322 @itemx --delimiters=@var{delim-list}
6324 @opindex --delimiters
6325 連結する行の区切りに、タブではなく、@var{delim-list} の各文字を順番に使用する。
6326 @var{delim-list} を使い切ってしまった場合は、最初の文字に戻って使用して行く。
6330 $ paste -d '%_' num2 let3 num2
6343 @node join invocation
6344 @section @command{join}: 共通のフィールドに基づいて行を結合する
6347 @cindex common field, joining on
6349 @command{join} は、二つの入力ファイルを対象に、同一の共通フィールド
6350 (join field) を持つことで「対」になっている各行を、
6356 join [@var{option}]@dots{} @var{file1} @var{file2}
6359 @var{file1} と @var{file2} の片方は @samp{-}、すなわち標準入力であってもよい
6360 (両方とも標準入力は不可)。@var{file1} と @var{file2} は、
6361 共通フィールドに基づいてソートされているべきである。
6364 通常、ソート順は、@env{LC_COLLATE} のロケールが規定している照合順序である。
6365 @option{-t} オプションが指定されていない場合は、両ファイルについて並び方を比較する際、
6366 @code{sort -b} の場合と同様に、共通フィールドの先頭にある空白が無視される。
6367 また、@option{--ignore-case} が指定されている場合は、
6368 @code{sort -f} と同様、共通フィールドでアルファベットの大文字と小文字は区別されない。
6370 @command{sort} の出力を @command{join} に渡すなら、@command{sort} と
6371 @command{join} が使用するロケールやオプションは首尾一貫していなければならない。
6372 @samp{sort -k 1b,1} のようなコマンドを使用すれば、
6373 デフォルトの共通フィールドに基づいて、ファイルをソートすることができる。
6374 しかし、ロケール、共通フィールド、区切り記号、比較オプションなどにデフォルト以外のものを使用する場合は、
6375 @command{join} と @command{sort} の間で矛盾が起きないように、そうしたものを選択しなければならないのだ。
6376 @samp{join -t ''} が指定された場合は、行全体が共通フィールドとして考慮の対象になるが、
6377 これは、sort のデフォルトの動作に対応している。
6379 入力のすべての行が対になっている場合は、GNU による拡張が利用できる。
6380 この場合、並んでいる順番は、対になる二つのフィールドが同じであると判断されるならば、どんな順番でもよい。
6381 ただし、並び方の比較を上述のように行ったとき、二つのフィールドが同じだと判断される場合であり、
6400 @checkOrderOption{join}
6403 デフォルトの動作は次のようになっている。
6405 @item 共通フィールド (join field) は、各行の最初のフィールドである。
6406 @item 入力の各フィールドは、1 個以上の空白 (スペースやタブ) で区切られる。
6408 @item 出力の各フィールドは、1 個のスペースで区切られる。
6409 @item 各出力行の構成は、共通フィールド、@var{file1} の残りのフィールド、
6410 @var{file2} の残りのフィールドの順になる。
6413 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6417 @item -a @var{file-number}
6419 @var{file-number} (@samp{1} か @samp{2}) のファイルに、もう一方のファイルと対にならない行がある場合、
6423 入力ファイルのどちらかの内容がきちんとソートされていないと、
6424 エラーメッセージを出して、実行に失敗する。
6426 @item --nocheck-order
6427 入力ファイルの内容がソートされた順番になっているかどうかを、
6428 どちらのファイルについてもチェックしない。これが、デフォルトである。
6430 @item -e @var{string}
6432 入力では欠けているフィールドを、出力では @var{string} で補う。
6433 すなわち、オプション @option{-1}, @option{-2}, @option{-j}, @option{-o}
6434 などを指定したときに、欠けているフィールドがそれに当たる。
6438 各入力ファイルの最初の行をヘッダ行と見なす。ヘッダ行も結合され、
6439 最初の出力行として表示される。@option{-o} を使って、出力フォーマットを指定している場合は、
6440 ヘッダ行もそのフォーマットに従って出力される。
6441 ヘッダ行は、@option{--check-order} が指定されていても、並び順のチェックを受けない。
6442 なお、両ファイルのヘッダ行がマッチしない場合は、
6443 一番目のファイルのヘッダ・フィールドが使用される。
6446 @itemx --ignore-case
6448 @opindex --ignore-case
6449 キーを比較する際、アルファベットの大文字小文字を区別しない。
6451 両方の入力ファイルの行が、同じように大文字小文字を区別せず並んでいなければならない。
6452 そうした順番で並べるには、@samp{sort -f} を使えばよい。
6454 @item -1 @var{field}
6456 ファイル 1 では @var{field} 番目のフィールドを共通フィールドとする
6457 (@var{field} は正の整数)。
6459 @item -2 @var{field}
6461 ファイル 2 では @var{field} 番目のフィールドを共通フィールドとする
6462 (@var{field} は正の整数)。
6464 @item -j @var{field}
6465 @option{-1 @var{field} -2 @var{field}} と等価。
6467 @item -o @var{field-list}
6469 キーワードの @samp{auto} が指定されると、
6470 @command{join} は各ファイルの最初の行を元にして、出力フォーマットを推測する。
6471 それは、デフォルトの出力フォーマットとほぼ同じだが、
6472 それだけでなく、各行に必ず同数のフィールドを出力するようにする。
6473 また、欠けているフィールドがあれば、@option{-e} オプションの指定する文字列で補う。
6476 @samp{auto} が指定されていない場合は、@var{field-list} のフォーマットに従って、
6477 各出力行を構成する。@var{field-list} の各要素は、@samp{0} 一文字か、@var{m.n}
6478 という形を取る。ここで、@var{m} はファイル番号 (@var{file-number}) であり、@samp{1}
6479 か @samp{2} である。@var{n} はフィールド番号であり、正の整数である。
6481 @samp{0} というフィールド指定は、共通フィールドを指している。ほとんどの場合、
6482 @samp{0} というフィールド指定と同じことが、共通フィールドを明示的に
6483 @var{m.n} で示すことでも、実現できるだろう。しかしながら、(@option{-a}
6484 オプションなり @option{-v} オプションなりを使用して)、対にならない行を表示する場合、
6485 対にならない行が両方のファイルに存在すると、@var{field-list} で @var{m.n}
6486 をどう使おうとも、共通フィールドを指定できないのだ。@command{join}
6487 で共通フィールドの指定が常に可能になるように、POSIX は @samp{0}
6488 というフィールド指定法を考案したのである。
6490 @var{field-list} の各要素は、コンマ、または空白で区切られる。
6491 区切りに空白を使用するときは、シェルによって解釈されないように、
6492 たいていの場合引用符で囲む必要がある。たとえば、コマンド @samp{join -o 1.2,2.2}
6493 と @samp{join -o '1.2 2.2'} は、同じ動作になる。
6495 @var{field-list} の指定は、すべての出力行に適用される。これは、@option{-a} や
6496 @option{-v} オプションによって出力されるものにも当てはまる。
6499 入出力のフィールドの区切りに、文字 @var{char} を使用する。
6500 @var{char} は、入力ファイルに現れる一つ一つが、有意なものとして扱われる。
6501 @samp{sort -t @var{char}} を @option{-b} なしで実行すれば、
6502 このオプションに対応する順序に行を並べることができる。
6503 @samp{join -t ''} を指定すると、行全体が共通フィールドとして考慮の対象になり、
6504 これは sort のデフォルトの動作に対応している。
6505 @samp{-t '\0'} を指定すると、ASCII NUL 文字がフィールドの区切りに使用される。
6507 @item -v @var{file-number}
6508 通常の出力はせず、@var{file-number} (@samp{1} か @samp{2} である)
6509 のファイルに存在する、対にならない各行を表示する。
6511 @optZeroTerminated @newlineFieldSeparator
6518 @node Operating on characters
6521 @cindex operating on characters
6523 以下のコマンドは、個々の文字に対して操作を行う。
6526 * tr invocation:: 文字の置換、圧縮、削除を行う。
6527 * expand invocation:: タブをスペースに変換する。
6528 * unexpand invocation:: スペースをタブに変換する。
6533 @section @command{tr}: 文字の置換、圧縮、削除を行う
6540 tr [@var{option}]@dots{} @var{set1} [@var{set2}]
6543 @command{tr} は標準入力を標準出力にコピーするが、
6548 文字を置換する。置換した結果に同一文字の連続があるときは、それを
6555 文字を削除する。さらに、削除した結果に同一文字の連続があるときは、
6559 上記書式の @var{set1} と (もし、指定しているなら) @var{set2} の二つの引数には、
6560 順序が意味を持つ文字の集合を指定する。以下の説明で、それぞれ @var{set1}、@var{set2}
6561 と呼ばれることになるそうした文字集合こそ、入力中に存在する文字のうちで
6562 @command{tr} が操作の対象とする文字群である。@option{--complement} (@option{-c},
6564 オプションを指定すると、@var{set1} の代わりにその補集合
6565 (@var{set1} に含まれないすべての文字) が使われることになる。
6567 現在のところ、@command{tr} が完全に対応しているのは、シングルバイト文字だけである。
6568 将来は、マルチバイト文字もサポートすることになるだろうが、
6569 そのときは、@option{-C} オプションで文字集合の補集合を作り、@option{-c}
6570 オプションで値 (訳注: いわゆる文字コード) の集合の補集合を作ることになるだろう。
6571 この区別が意味を持つのは、指定する値の中に文字ではないものがあるときだけだが、
6572 そういった事態は、マルチバイト・エンコーディングを使用しているロケールで、
6573 入力にエンコーディング・エラーが含まれるときしか起きそうにない。
6575 このプログラムでは、@option{--help} や @option{--version} オプションも使える。
6576 @xref{Common options}. なお、オプションは、オペランドの前で指定しなければならない。
6581 * Character sets:: 文字集合の指定。
6582 * Translating:: ある文字集合の別の文字集合への変換。
6583 * Squeezing and deleting:: 文字の削除。
6587 @node Character sets
6590 @cindex specifying sets of characters
6592 @var{set1} や @var{set2} 引数の書式は、正規表現の書式に似ているが、
6593 正規表現ではなく、文字のリストにすぎない。
6594 そうした文字列中のほとんどの文字は、単にその文字自身を表しているだけだが、
6595 便宜のため文字列中では以下に列挙する簡易記法も使うことができる。
6596 簡易記法によっては、以下で述べているように、
6597 @var{set1} と @var{set2} のどちらか一方でしか使えないこともある。
6601 @item バックスラッシュ・エスケープ
6602 @cindex backslash escapes
6604 以下のバックスラッシュ・エスケープ・シーケンスを認識する。
6610 Control-H (バックスペース).
6612 Control-L (フォームフィード).
6622 1 から 3 桁の 8 進数 @var{ooo} によって表される値を持つ 8 ビット文字。
6623 @samp{\400} は、@samp{\040} @samp{0}
6624 という連続する 2 バイトに解釈されるので、注意すること。
6629 上記以外の 1 個の文字がバックスラッシュに続く場合は、その文字として解釈される。
6630 またバックスラッシュには、特別な意味を打ち消す働きもあるので、
6631 @samp{[}, @samp{]}, @samp{*}, @samp{-} をエスケープするのにも使用できる。
6636 @samp{@var{m}-@var{n}} という表記は、昇順で @var{m} から @var{n} までのすべての文字に展開される。
6637 @var{m} は文字の照合順序で @var{n} より前のものでなければならず、
6638 さもないと、エラーになる。たとえば、@samp{0-9} は @samp{0123456789}
6641 System V の書式では、範囲は、角カッコ (square brackets)を使って囲むことになっているが、
6642 GNU の @command{tr} はこの書式をサポートしていない。
6643 System V の書式で指定した場合でも、置換が期待どおり行われることもあるが、
6644 それは、たいていの場合、角カッコが角カッコに置換されるからである。
6645 そうだとしても、予想外の動作をすることもあるので、
6646 角カッコの使用は避けた方がよい。たとえば、@samp{tr -d '[0-9]'}
6647 は、数字だけでなく、角カッコも削除してしまう。
6649 昔からよく使われている範囲の指定法の多くが
6650 --- 正しい用法として認められているものでさえ --- 他のシステムで使えるとはかぎらない。
6651 たとえば、EBCDIC のホストでは、 @samp{A-Z} という範囲の指定をしても、
6652 たいていの人が予想するような結果は得られないだろう。
6653 なぜなら、そこでは @samp{A} から @samp{Z} までが、ASCII
6654 におけるように隣り合ってはいないからである。POSIX 準拠の @command{tr}
6655 を使うことができるならば、この問題を回避する最善の方法は、文字クラスを使用することである
6656 (下記参照)。それができない場合は、範囲の要素を一つ一つ書き込むのが、
6657 一番可搬性のある方法だ (一番野暮ったい方法でもあるけれど)。
6660 @cindex repeated characters
6662 @var{set2} における @samp{[@var{c}*@var{n}]} という表記は、
6663 文字 @var{c} の @var{n} 個の連続に展開される。
6664 従って、@samp{[y*6]} は @samp{yyyyyy} と同じである。また、@var{set2}
6665 における @samp{[@var{c}*]} という表記は、@var{set2} を @var{set1}
6666 と同じ長さにするのに必要な数の @var{c} の連続に展開される。
6667 @var{n} が @samp{0} で始まっている場合は、
6668 8 進数として扱われる。それ以外の場合は、10 進数である。
6671 @cindex character classes
6673 @samp{[:@var{class}:]} という表記は、(あらかじめ定義されている) 文字クラス
6674 @var{class} に属するすべての文字に展開される。
6675 展開された文字に特定の順序はないが、@code{upper} と @code{lower}
6676 の文字クラスは別で、この二つは、昇順に展開される。
6677 @option{--delete} (@option{-d}) と @option{--squeeze-repeats} (@option{-s})
6678 オプションの両方を指定している場合は、@var{set2} で任意の文字クラスを使用することができる。
6679 それ以外の場合 @var{set2} で使えるのは、@code{lower} と @code{upper}
6680 の文字クラスだけであり、それも、対応する文字クラスを (すなわち、@code{upper}
6681 に対しては @code{lower}、@code{lower} に対しては @code{upper} を)、
6682 @var{set1} の対応する位置で指定しているときだけである。
6683 その場合は、大文字小文字の変換を指定していることになるわけだ。
6684 以下に文字クラスの名前を列挙する。なお、無効なクラス名を指定すると、エラーになる。
6695 水平方向の空白 (Horizontal whitespace)。
6705 (訳注: スペースもタブも改行も、すなわち、ホワイトスペースを一切含まない)。
6711 表示可能文字。空白を含む (訳注: タブや改行は含まないが、スペース (0x20) は含む)。
6717 水平方向や垂直方向の空白 (Horizontal or vertical whitespace)。
6727 @cindex equivalence classes
6729 @samp{[=@var{c}=]} という書式は、@var{c} と等価な文字のすべてに展開される。
6730 展開される文字の間に特定の順序はない。等価クラスは、比較的最近の発明であり、
6731 英語以外のアルファベットをサポートするためのものである。
6732 しかしながら、等価クラスを定義したり、何が等価クラスに含まれるかを決定したりする標準的な方法は存在しないようだ。
6733 そのため、GNU の @command{tr} は、等価クラスを十分に実装していない。
6734 各文字の等価クラスにはその文字しか含まれていないので、あまり使い道がない。
6742 @cindex translating characters
6744 @command{tr} は、@var{set1} と @var{set2} の両方が指定され、@option{--delete}
6746 オプションが指定されていない場合は、文字の置換を行う。
6747 @command{tr} は入力の中に @var{set1} に存在する文字が現れるたびに、
6748 それを @var{set2} の対応する文字に置き換える。
6749 入力中の @var{set1} に存在しない文字は、読み飛ばして、変更しない。
6750 ある文字が @var{set1} 中に 2 個以上存在し、@var{set2} 中のそれに対応する文字がすべて同じでない場合、
6751 置換に使用するのは、最後の文字だけである。
6752 たとえば、次の二つのコマンドは、同じ動作をする。
6759 @command{tr} がよく使われるのは、アルファベットの小文字を大文字に変換するときである。
6760 それには、いろいろな方法がある。例を三つほど挙げてみる。
6763 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
6765 tr '[:lower:]' '[:upper:]'
6769 ただし、上記の @code{a-z} のような範囲指定の使用は、
6770 可搬性がないことに注意していただきたい。
6772 @command{tr} で置換を行う際には、普通 @var{set1} と @var{set2} を同じ長さにする。@var{set1} が
6773 @var{set2} より短いと、@var{set2} の後尾にある余分な文字が無視されることになる。
6775 逆に、@var{set1} が @var{set2} より長い場合は、可搬性がなくなる。
6776 POSIX の規定では、結果は未定義なのだ。こうした場合、BSD の @command{tr} は、
6777 @var{set2} の最後の文字を必要なだけ繰り返して、@var{set2} が @var{set1}
6779 System V の @command{tr} は、@var{set1} を @var{set2} と同じ長さに切り詰める。
6781 デフォルトでは、GNU 版の @command{tr} は、この問題を BSD の @command{tr}
6782 と同じやり方で処理する。そして、@option{--truncate-set1} (@option{-t})
6783 オプションが指定されている場合のみ、System V の @command{tr} のように処理するのである。
6784 このオプション (@option{--truncate-set1}) は、置換以外の操作では無視される。
6786 この問題で System V の @command{tr} の動作を選ぶと、
6787 比較的よく使われる BSD 式の次の慣用表現が使えなくなる。
6790 tr -cs A-Za-z0-9 '\012'
6794 なぜなら、System V の動作では、アルファベットと数字以外のすべての文字を改行文字に変換するのではなく、
6795 ゼロバイトしか (ASCII NUL 文字、それが @var{set1} の補集合の最初の要素である)
6799 ちなみに、上記の慣用表現は、システムによってはうまく動作しない。
6800 なぜなら、範囲指定を使っているからであり、また、改行の 8 進数によるコードを
6801 012 と決め込んでいるからでもある。@command{tr} が POSIX に準拠しているなら、
6805 tr -cs '[:alnum:]' '[\n*]'
6809 @node Squeezing and deleting
6810 @subsection 連続する文字の圧縮と文字の削除
6812 @cindex squeezing repeat characters
6813 @cindex deleting characters
6814 @cindex removing characters
6816 @option{--delete} (@option{-d}) オプションのみが指定された場合、@command{tr} は、
6817 @var{set1} に存在する文字が入力中にあれば、それを削除する。
6819 @option{--squeeze-repeats} (@option{-s}) オプションのみが指定され、置換が要求されていない場合、
6820 @command{tr} は、@var{set1} に存在する文字が入力中に連続して現れるたびに、
6821 その部分をただ 1 個のその文字に置き換える。
6823 @option{--delete} と @option{--squeeze-repeats} の両方が指定された場合、
6824 @command{tr} は、まず @var{set1} を使って削除を行い、
6825 その後で、残っている文字に対して、@var{set2} を使って連続する同一文字の圧縮を行う。
6827 @option{--squeeze-repeats} オプションは、置換の際に使用することもできる。
6828 その場合、@command{tr} は、まず置換を実行し、その後で、置換結果に対して、
6829 @var{set2} を使って連続する同一文字の圧縮を行う。
6831 例をいくつか挙げて、オプションの様々な組み合わせを説明する。
6843 入力中のすべての単語 (訳注: 空白などで前後を区切られた文字列) を 1 行に 1 個づつ書き出す。
6844 このコマンドは、アルファベットと数字以外のすべてを改行文字に変換し、
6845 さらに、改行が連続して現れるそれぞれの箇所を 1 個の改行文字に圧縮している。
6848 tr -cs '[:alnum:]' '[\n*]'
6852 連続する改行文字が現れるごとに、それを一個の改行文字に変換する。
6860 @c Separate the following two "the"s, so typo checkers don't complain.
6861 文書中の単語の重複を探し出す。たとえば、 改行を挟んで同じ単語を繰り返して、
6862 ``the @w{}the'' のように書いてしまうとことは、よくあることである。
6863 以下の Bourne シェルのスクリプトは、次のように動作する。
6864 まず、句読点や空白文字が 1 個以上続けて現れるたびに、それを 1 個の改行文字に置き換える。
6865 そうすることで、単語が 1 行に 1 個づつ出力されることになるわけだ。
6866 次には、すべての大文字を小文字に変換する。そして、最後に、@command{uniq} を
6867 @option{-d} オプション付きで実行して、重複した単語のみを書き出すのである。
6872 | tr -s '[:punct:][:blank:]' '[\n*]' \
6873 | tr '[:upper:]' '[:lower:]' \
6878 文字のちょっとした集団を削除するのは、たいていの場合ごく簡単である。
6879 たとえば、@samp{a}, @samp{x}, @samp{M} という文字をすべて消すには、
6886 ところが、削除する文字の一つに @samp{-} があると、@samp{-}
6887 は特殊な意味をもっているので、厄介なことになりかねない。
6888 上記と同様の作業を行うけれど、今度は @samp{-} という文字もついでにすべて削除するとしよう。
6889 @code{tr -d -axM} をやってみるかもしれないが、うまく行かないだろう。
6890 @command{tr} が @option{-a} をコマンドライン・オプションとして解釈しようとするからである。
6891 それではと、ハイフンを文字列の内側に入れてみることもできる。
6892 @code{tr -d a-xM} のようにだ。だが、これもうまく行きそうにない。
6893 @command{tr} が @code{a-x} を 3 個の文字としてではなく、@samp{a}@dots{}@samp{x}
6894 という文字の範囲として解釈することになるからだ。
6895 この問題を解決する方法の一つは、ハイフンを文字のリストの最後に置くことである。
6901 あるいは、@samp{--} を使って、オプション処理はここで終わりと明示することもできる。
6907 より普遍的な方法は、等価クラスの記法 @code{[=c=]} を、@samp{c} を @samp{-} で
6908 (あるいは、他の任意の文字で) 置き換えて使うことである。
6914 上記の例では、角カッコがシェルによって解釈されないように、
6915 シングルクォートを使っていることに注意していただきたい。
6920 @node expand invocation
6921 @section @command{expand}: タブをスペースに変換する
6924 @cindex tabs to spaces, converting
6925 @cindex converting tabs to spaces
6927 @command{expand} は指定された各 @var{file} の内容を標準出力に書き出し、
6928 その際にタブ文字を適切な数のスペースに変換する。
6929 @var{file} が指定されていない場合や、@var{file} として @samp{-}
6930 が指定されている場合は、標準入力を対象にする。
6935 expand [@var{option}]@dots{} [@var{file}]@dots{}
6938 デフォルトでは、@command{expand} はすべてのタブをスペースに変換する。
6939 バックスペース文字は、出力にそのまま残しておく。バックスペースには、
6940 タブ幅を計算する際に、桁数を減らす働きがあるのだ。デフォルトの動作は、
6941 @option{-t 8} を指定したときと同じである (タブ位置を 8 桁ごとにする)。
6943 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6947 @item -t @var{tab1}[,@var{tab2}]@dots{}
6948 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
6951 @cindex tab stops, setting
6952 タブ位置 (tab stop) が一つだけ指定された場合には、
6953 (訳注: 入力行における) タブ位置が @var{tab1} 桁ごとあるものとする
6954 (デフォルトは 8 桁ごと)。それ以外の場合は、タブ位置を
6955 @var{tab1}, @var{tab2}, @dots{} 桁目に置き (行頭を 0 桁目として数える)、
6956 指定された最後のタブ位置より後ろにあるタブは 1 個のスペースで置き換える。
6957 タブ位置の指定は、コンマで区切ってもよく、空白で区切ってもよい。
6959 互換性を考慮して、GNU の @command{expand} は、@option{-@var{tab1}[,@var{tab2}]@dots{}}
6961 このオプションの古い書式も認めている。新しいスクリプトでは、
6962 @option{-t @var{tab1}[,@var{tab2}]@dots{}} の方を使うべきである。
6968 @cindex initial tabs, converting
6970 (言い換えれば、スペースでもタブでもないどんな文字よりも前にある 1 個以上のタブだけを)
6978 @node unexpand invocation
6979 @section @command{unexpand}: スペースをタブに変換する
6983 @command{unexpand} は、指定された各 @var{file} の内容を標準出力に書き出し、
6984 その際に各行の先頭にある複数の空白 (blank) を、必要な数のタブ文字に変換する。
6985 @var{file} が指定されていない場合や、@var{file} として @samp{-} が指定されている場合は、
6986 標準入力を対象にする。デフォルトの POSIX ロケールでは、空白 (@dfn{blank})
6988 他のロケールでは、ほかの空白文字が追加されているかもしれない。
6993 unexpand [@var{option}]@dots{} [@var{file}]@dots{}
6996 デフォルトでは、@command{unexpand} が変換するのは、各行の行頭にある複数の空白だけである
6997 (言い換えれば、空白以外のどんな文字よりも前にある複数の空白だけ)。
6998 バックスペース文字は、出力にそのまま残しておく。バックスペースには、
6999 タブ幅を計算する際に、桁数を減らす働きがあるのだ。
7000 デフォルトでは、タブ位置は 8 桁ごとに置かれる。
7002 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
7006 @item -t @var{tab1}[,@var{tab2}]@dots{}
7007 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7010 タブ位置 (tab stop) が一つだけ指定された場合には、
7011 (訳注: 入力行における) タブ位置をデフォルトの 8 桁ごとではなく、@var{tab1} 桁ごとに設定する。
7012 それ以外の場合は、タブ位置を @var{tab1}, @var{tab2}, @dots{} 桁目に置き
7013 (行頭を 0 桁目として数える)、指定された最後のタブ位置より後ろにある空白は、
7014 変換せず、そのままにする。タブ位置の指定は、コンマで区切ってもよく、空白で区切ってもよい。
7015 このオプションを指定すると、@option{-a} オプションが自動的に設定される。
7017 (訳注: 一例を挙げておく。たとえば、@samp{-t 8,12} なら、入力行は、先頭を
7018 0 桁目として、8 桁目、12 桁目にタブ位置があると見なされる。
7019 そこで、先頭に 12 個のスペースがある行に対して @code{unexpand -t 8,12} を行うと、
7020 空白がタブ 2 個に変換される。出力におけるタブ位置はデフォルトのままなので、
7021 出力ではその行は、 0 から数えて 16 桁目から文字が始まることになる。)
7023 互換性を考慮して、GNU の @command{unexpand} は、
7024 @option{-@var{tab1}[,@var{tab2}]@dots{}} という、このオプションの古い書式も認めている。
7025 そちらを使う場合は、タブ位置を必ずコンマで区切らなければならない。
7026 なお、@option{-t} とは違って、この古いオプションは、@option{-a}
7027 を自動的に設定しない。新しいスクリプトでは (訳注: 古い書式と同じ動作をさせたい場合)、
7028 古い書式に代えて、@option{--first-only -t @var{tab1}[,@var{tab2}]@dots{}}
7035 空白の連続が、行の中で空白以外の文字の後ろにある場合でも、
7036 タブ位置の直前にある 2 個以上の空白の連続は、すべて変換する。
7043 @node Directory listing
7044 @chapter ディレクトリの一覧表示
7046 この章では、@command{ls} とその変種の @command{dir} 及び @command{vdir} について説明する。
7047 こうしたコマンドは、ファイルに関する情報を一覧表示する。
7050 * ls invocation:: ディレクトリの内容を一覧表示する。
7051 * dir invocation:: 簡潔な ls。
7052 * vdir invocation:: 詳細な ls。
7053 * dircolors invocation:: ls のカラー設定など。
7058 @section @command{ls}: ディレクトリの内容を一覧表示する
7061 @cindex directory listing
7063 @command{ls} プログラムはファイルに関する情報を一覧表示する
7064 (ファイルは、いかなるタイプでもよく、ディレクトリでもよい)。
7065 オプションとファイルを示す引数は、ほとんどのコマンドと同様、どんな順番で指定しても構わない。
7067 コマンドラインで指定したオプション以外の引数がディレクトリならば、
7068 デフォルトでは、@command{ls} はそのディレクトリの内容を一覧表示する。
7069 その際、再帰的な表示はせず、名前が @samp{.} で始まるファイルも表示しない。
7070 オプション以外の引数がディレクトリでなければ、単にそのファイルの名前を表示するのが、
7071 @command{ls} のデフォルトの動作である。
7072 オプション以外の引数が一つも指定されていない場合は、@command{ls}
7073 はカレントディレクトリを対象にし、あたかも @samp{.}
7074 という引数を一つだけ付けて起動したかのように動作する。
7077 デフォルトでは、出力を、現在のロケール設定に従って、アルファベット順でソートする
7078 @footnote{POSIX 以外のロケールを使用している場合は (たとえば、@env{LC_ALL}
7079 を @samp{en_US} に設定している場合は)、@command{ls}
7080 の出力が、見慣れない順序で並んでいるかもしれない。そうした場合は、環境変数
7081 @env{LC_ALL} を @samp{C} にしてみるとよい。}。
7082 標準出力が端末の場合は、出力を多段組みで (訳注: すなわち、1 行に複数ファイルの形式で)
7083 表示し、制御文字を疑問符として出力する (ソートは縦方向に行う)。
7084 それ以外の場合は、出力が 1 行 1 ファイルの形式になり、制御文字はそのまま手を加えずに出力する。
7086 (訳注: 端末へ出力されるファイル名は、現在ではデフォルトのスタイルが変わっているかもしれない。
7087 「ファイル名のフォーマット」の節の @option{--quoting-style} の訳注をご覧いただきたい。)
7089 @command{ls} はきわめて基本的なプログラムなので、長年の間にオプションがどんどん増えてしまった。
7090 以下のサブセクションでは、そうしたオプションについて説明している。
7091 各サブセクション内では、オプションを (大文字小文字を無視して) アルファベット順に並べている。
7092 このようにオプションをサブセクションに分けてはみたが、この分類法は完全なものではない。
7093 オプションの中には、@command{ls} の動作の複数の側面に作用するものもあるからである。
7095 @cindex exit status of @command{ls}
7100 1: 軽微な問題 (たとえば、コマンドライン引数として指定されていない
7101 ファイルやディレクトリにアクセスできなかった場合。ディレクトリの
7102 内容を一覧表示しようとしたとき、その中にあるエントリが今まさに
7103 削除やリネームの最中だと、そういうことが起きる)
7104 2: 深刻なトラブル (たとえば、メモリの不足、無効なオプション、
7105 コマンドライン引数として指定されたファイルやディレクトリに
7106 アクセスできなかった場合、ディレクトリのループなど)
7109 参照 @ref{Common options}.
7112 * Which files are listed:: 表示対象にするファイル
7113 * What information is listed:: 表示する情報
7114 * Sorting the output:: 出力のソート
7115 * Details about version sort:: バージョン・ソートの詳細
7116 * General output formatting:: 出力全体の形式
7117 * Formatting file timestamps:: タイムスタンプのフォーマット
7118 * Formatting the file names:: ファイル名のフォーマット
7122 @node Which files are listed
7123 @subsection 表示対象にするファイル
7125 以下のオプションは、どんなファイルについて @command{ls} が情報を表示するかを決定する。
7126 デフォルトで @command{ls} が表示するのは、コマンドラインで指定されたファイルだが、
7127 ディレクトリが指定された場合は、その内容になる。
7128 ただし、ディレクトリの内容のうち、名前が @samp{.} で始まるファイルは表示しない。
7136 ディレクトリの内容を表示する際、@samp{.} で始まるファイル名も無視しない。
7141 @opindex --almost-all
7142 ディレクトリの内容を表示する際、@file{.} と @file{..} は無視するが、
7143 それ以外の @samp{.} で始まるいかなるファイル名も無視しない。@option{--all}
7144 (@option{-a}) オプションは、このオプションに優先する。
7147 @itemx --ignore-backups
7149 @opindex --ignore-backups
7150 @cindex backup files, ignoring
7151 ディレクトリの内容表示において、@samp{~} で終わるファイルを無視する。
7152 このオプションは、@samp{--ignore='*~' --ignore='.*~'} と同じである。
7157 @opindex --directory
7158 @c The following sentence is the same as the one for -F.
7159 ディレクトリについても、ディレクトリ内容の一覧ではなく、
7160 他のタイプのファイルの場合と同じように、名前だけを表示する。
7161 また、@option{--dereference-command-line} (@option{-H}),
7162 @option{--dereference} (@option{-L}),
7163 @option{--dereference-command-line-symlink-to-dir}
7164 といったオプションが指定されていないかぎり、
7165 コマンドラインでシンボリックリンクが指定されても、それをたどらない。
7168 @itemx --dereference-command-line
7170 @opindex --dereference-command-line
7171 @cindex symbolic links, dereferencing
7172 コマンドライン引数がシンボリックリンクを指定している場合、
7173 リンクそのものではなく、リンクが参照しているファイルの情報を表示する。
7175 @item --dereference-command-line-symlink-to-dir
7176 @opindex --dereference-command-line-symlink-to-dir
7177 @cindex symbolic links, dereferencing
7178 原則としてシンボリックリンクの参照を行わないが、一つだけ例外がある。
7179 すなわち、コマンドライン引数がシンボリックリンクを指定し、
7180 それがディレクトリを指している場合は、リンクそのものではなく、そのディレクトリの情報を表示する。
7181 この動作は、リンクの参照に関係する他のオプションが全く指定されていないときの、
7182 @command{ls} のデフォルトの動作である (リンクの参照に関係する他のオプションには、
7183 @option{--classify} (@option{-F}), @option{--directory} (@option{-d}),
7184 @option{-l}, @option{--dereference} (@option{-L}),
7185 @option{--dereference-command-line} (@option{-H}) がある)。
7187 @item --group-directories-first
7188 @opindex --group-directories-first
7189 すべてのディレクトリをまとめてファイルの前に置き、その上で、選択したソート・キーを使って
7190 (@option{--sort} オプション参照)、ディレクトリとファイルをそれぞれ別々にソートする。
7191 別の言い方をすると、このオプションはソートする際の主キーを設定し、
7192 @option{--sort} オプションが副キーを設定するということだ。ただし、
7193 @option{--sort=none} (@option{-U}) を使ったりすると、このオプションは全く無効になる。
7195 @item --hide=PATTERN
7196 @opindex --hide=@var{pattern}
7197 ディレクトリの内容表示において、@option{--all} (@option{-a}) や
7198 @option{--almost-all} (@option{-A}) が同時に指定されていないかぎり、
7199 シェルのパターン @var{pattern} に名前がマッチするファイルを無視する。
7200 このオプションの動作は、@option{--ignore=@var{pattern}}
7201 とほぼ同じだが、@option{--all} (@option{-a}) や @option{--almost-all}
7202 (@option{-A}) が併せて指定されていると、効果がないという点が違う。
7204 このオプションは、シェルのエイリアスで使うと、便利かもしれない。
7205 たとえば、@command{lx} が @samp{ls --hide='*~'} のエイリアスで、@command{ly}
7206 は @samp{ls --ignore='*~'} のエイリアスだとしよう。
7207 その場合、@samp{lx -A} というコマンドは、ファイル @file{README~} を表示するが、
7208 @samp{ly -A} は表示しないことになる。
7210 @item -I @var{pattern}
7211 @itemx --ignore=@var{pattern}
7213 @opindex --ignore=@var{pattern}
7214 ディレクトリの内容表示において、シェルのパターン (正規表現ではない)
7215 @var{pattern} に名前がマッチするファイルを無視する。
7216 シェルの場合と同様、ファイル名の先頭にある @samp{.} は @var{pattern}
7218 このオプションを二度以上使うと、便利なことがある。たとえば、
7221 $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
7224 最初のオプションは @samp{.} で始まる 3 文字以上のファイル名を無視する。
7225 二番目のオプションは @samp{.} で始まる二文字のファイル名のうち、 @samp{..}
7226 を除くすべて無視し、三番目のオプションは @samp{#} で始まるファイル名を無視する。
7229 @itemx --dereference
7231 @opindex --dereference
7232 @cindex symbolic links, dereferencing
7233 シンボリックリンクについてファイル情報を表示する際、リンクそのものではなく、
7234 リンクが参照しているファイルの情報を表示する。とは言え、
7235 このオプションを使用した場合でも、表示されるファイル名については、
7236 リンクそのものの名前のままであり、リンクが指しているファイルの名前にはならない。
7241 @opindex --recursive
7242 @cindex recursive directory listing
7243 @cindex directory listing, recursive
7244 すべてのディレクトリの内容を再帰的に一覧表示する。
7249 @node What information is listed
7252 以下のオプションは、@command{ls} がどんな情報を表示するかに関係している。
7253 @command{ls} がデフォルトで表示するのは、ファイル名だけである。
7259 @cindex hurd, author, printing
7260 詳細形式でディレクトリ内容のリストを出力する際、各ファイルの作成者情報を表示する。
7261 GNU/Hurd では、ファイルの作成者 (author) はファイルの所有者 (owner)
7262 と別人であることがあるが、他のオペレーティング・システムでは、両者は同一である。
7268 @cindex dired Emacs mode support
7269 詳細表示形式 (@option{-l}) と併せて使用すると、
7270 出力本体の後ろに以下のような追加の行を表示する。
7273 //DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{}
7277 @var{begn} や @var{endn} は符号なしの整数であり、
7278 出力における各ファイル名の開始バイト位置と終了バイト位置を示している。このようにすることで、
7279 ファイル名に空白や改行のような普段使わない文字が含まれている場合でも、手の込んだ検索をするまでもなく、
7280 Emacs が簡単にファイル名を見つけられるようにしているのである。
7282 ディレクトリを再帰的にリストしている場合には (@option{-R})、
7283 各サブディレクトリ名のオフセットを記した同様の行も出力する。
7286 //SUBDIRED// @var{beg1} @var{end1} @dots{}
7292 //DIRED-OPTIONS// --quoting-style=@var{word}
7296 ここで、@var{word} はクォートの方式である
7297 (@pxref{Formatting the file names})。
7302 $ mkdir -p a/sub/deeper a/sub2
7304 $ touch a/sub/deeper/file
7305 $ ls -gloRF --dired a
7308 -rw-r--r-- 1 0 Jun 10 12:27 f1
7309 -rw-r--r-- 1 0 Jun 10 12:27 f2
7310 drwxr-xr-x 3 4096 Jun 10 12:27 sub/
7311 drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
7315 drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
7319 -rw-r--r-- 1 0 Jun 10 12:27 file
7323 //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
7324 //SUBDIRED// 2 3 167 172 228 240 290 296
7325 //DIRED-OPTIONS// --quoting-style=literal
7328 上記 @samp{//DIRED//} 行の 2 個づつ組になっているオフセットは、次の
7329 6 個の名前の区切りとなるバイト位置を示している
7330 (訳注: 別の言い方をするなら、出力の先頭からある名前の直前までのバイト数と、
7331 その名前の最後の文字までのバイト数を示している)。6 個の名前とは、すなわち
7332 @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper}, @file{file}
7334 @samp{//SUBDIRED//} の行のオフセットが示しているのは、次のディレクトリ名の区切りである。
7335 @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}。
7337 下記の例では、5 番目の項目の名前 @samp{deeper} を抜き出してみせている。
7338 この項目の名前は、217 と 223 のオフセットの組に対応している。
7341 $ ls -gloRF --dired a > out
7342 $ dd bs=1 skip=217 count=6 < out 2>/dev/null; echo
7346 上記のファイル一覧表示では、@samp{deeper} という項目の後ろにスラッシュが付いているが、
7347 オフセットが名前として選択しているのは、後ろのスラッシュを除いた部分であることに注目していただきたい。
7348 しかしながら、@command{ls} を @option{--dired} とともに @option{--escape}
7349 (短縮形は @option{-b}) のようなオプションを付けて実行し、
7350 名前に特殊文字が入っているファイルを処理の対象にする場合には、
7351 バックスラッシュがオフセットの示す範囲のうちに含まれることに注意しなければならない。
7355 $ ls -blog --dired 'a b'
7356 -rw-r--r-- 1 0 Jun 10 12:28 a\ b
7358 //DIRED-OPTIONS// --quoting-style=escape
7361 引用符を付加するクォート方式を使用している場合には (たとえば、
7362 @option{--quoting-style=c})、引用符もオフセットの示す範囲に含まれる。
7363 そこで、そうしたクォート方式が、環境変数 @env{QUOTING_STYLE}
7364 によって選択されている可能性も考慮に入れておくべきだ。
7365 すなわち、@option{--dired} を使用するアプリケーションでは、
7366 コマンドラインで明示的に @option{--quoting-style=literal}
7367 オプションを指定するか (@option{-N} や @option{--literal} と指定しても同じことだ)、
7368 あるいは、エスケープされた名前を解析できるするようにしておくか、
7372 @opindex --full-time
7373 詳細形式でディレクトリ内容のリストを生成し、日時の情報を省略なしで表示する。
7374 これは、@option{--format=long} を @option{--time-style=full-iso}
7375 と一緒に使うのと同じである (@pxref{Formatting file timestamps})。
7379 詳細形式でディレクトリ内容のリストを生成するが、所有者情報は表示しない。
7385 詳細形式でディレクトリ内容をリスト表示する際に、グループ情報を表示しない
7386 (GNU 版以外の @command{ls} には、この動作がデフォルトのものがある。
7387 そこで、互換性のために、このオプションを用意している)。
7395 @cindex inode number, printing
7396 ファイル名の左側にそのファイルの inode 番号を表示する (inode
7397 番号は、ファイル連続番号とか、インデックスナンバーとも呼ばれる。
7398 この番号は、ある特定のファイルシステムにある各ファイルを、一意に指し示す)。
7401 @itemx --format=long
7402 @itemx --format=verbose
7405 @opindex long ls @r{format}
7406 @opindex verbose ls @r{format}
7407 各ファイルの名前のほかに、(訳注: 行頭から順に) ファイルのタイプ、ファイルのモードビット
7408 (訳注: 一般に「アクセス権」とか「許可属性」と言われるもの)、
7409 ハードリンク数、所有者名、グループ名、サイズ、タイムスタンプを表示する
7410 (@pxref{Formatting file timestamps})。
7411 タイムスタンプは、通常は更新日時 (訳注: いわゆる mtime) である。
7412 特定することのできない情報については、疑問符を表示する。
7414 通常、サイズは、桁を区切る記号を付けずに、バイト数で表示されるが、
7415 この表示法は変更することができる (@pxref{Block size})。たとえば、
7416 @option{-h} オプションを指定すると、人間に読みやすい短縮表示になり、
7417 @samp{--block-size="'1"} を指定すると、現在のロケールの区切り記号で
7418 3 桁ごとに区切ったバイト数が表示される。
7420 ディレクトリの内容をリストする場合は、対象となるディレクトリごとに、ファイルのリストの前に
7421 @samp{total @var{blocks}} という行を置く。ここで、@var{blocks} は、
7422 そのディレクトリにあるすべてのファイルに割り当てられたディスク容量の合計である。
7423 現在のところブロックサイズはデフォルトでは 1024 バイトであるが、
7424 この値は変更することができる (@pxref{Block size})。
7425 @var{blocks} の計算では、各ハードリンクを別のものとして計算している。
7428 ファイルタイプには、以下の文字の一つが使われる。
7430 @c The commented-out entries are ones we're not sure about.
7440 ハイパフォーマンス (``contiguous data'') ファイル
7445 @c semaphore, if this is a distinct file type
7449 @c multiplexed file (7th edition Unix; obsolete)
7452 オフライン (``migrated'') ファイル (Cray DMF)
7454 ネットワーク・スペシャルファイル (HP-UX)
7459 @c message queue, if this is a distinct file type
7463 @c shared memory object, if this is a distinct file type
7465 @c typed memory object, if this is a distinct file type
7467 @c whiteout (4.4BSD; not implemented)
7473 @cindex permissions, output by @command{ls}
7474 ファイルのモードビットの表示は、アクセス権を設定する際のシンボリックモードの仕様とほぼ同じである (@pxref{Symbolic Modes})。
7475 ただし、@command{ls} は、以下のように、複数のモードビットを一つにまとめて、
7476 アクセス権の各セットの 3 番目の文字で表現している。
7480 set-user-ID ビットまたは set-group-ID ビットと、対応する実行ビットの両方が立っている場合。
7483 set-user-ID ビットまたは set-group-ID ビットが立っているが、
7487 削除制限フラグまたはスティキー・ビット (sticky bit) と、
7488 その他のユーザ (other) の実行ビットの両方が立っている場合。
7489 削除制限フラグは、スティッキー・ビットの別名である。 @xref{Mode Structure}.
7492 削除制限フラグまたはスティキー・ビットが立っているが、
7493 その他のユーザの実行ビットが立っていない場合。
7496 実行ビットが立っていて、上記のどれにも当てはまらない場合。
7502 ファイルのモードビットの後に続く 1 個の文字は、アクセス・コントロール・リスト (ACL)
7503 のような他のアクセス方式が、そのファイルに使われているかどうかを表している。
7504 ファイルのモードビットに続く文字が空白の場合は、他のアクセス方式を使用していないということである。
7505 表示文字が続く場合は、そうしたアクセス方式を使用しているということだ。
7507 GNU の @command{ls} は、SELinux セキュリティ・コンテキストを持つが、
7508 それ以外に他のアクセス方式を使用していないファイルを示すのに、
7509 ピリオド (@samp{.}) を使う。
7511 それ以外で、ファイルが、標準以外のアクセス方式の何らかの組み合わせを使用している場合には、
7515 @itemx --numeric-uid-gid
7517 @opindex --numeric-uid-gid
7518 @cindex numeric uid and gid
7519 @cindex numeric user and group IDs
7520 詳細形式でディレクトリの内容をリストするが、
7521 所有者やグループの名前の代わりに、数字の user-ID や group-ID を表示する。
7525 詳細形式でディレクトリの内容をリストするが、グループ情報を表示しない。
7526 これは、@option{--format=long} を @option{--no-group} と併せて使うのと同じである。
7532 @cindex disk allocation
7533 @cindex size of files, reporting
7534 各ファイルに対するディスク割り当て量をファイル名の左側に表示する。
7535 これはファイルが使用しているディスクスペースの量であり、
7536 普通はファイルのサイズより少し多いが、穴空きファイル (sparse file)
7539 通常、ディスク割り当て量は 1024 バイトを単位として表示されるが、
7540 これは変更することができる (@pxref{Block size})。
7542 @cindex NFS mounts from BSD to HP-UX
7543 ファイルが HP-UX のシステムから BSD のシステムに NFS マウントされている場合、
7544 このオプションで報告されるディスク使用量は、正確な値の半分である。
7545 それに対して、HP-UX システムの場合は、BSD システムから
7546 NFS マウントされているファイルについて、このオプションは正確な値の 2 倍の量を報告する。
7547 これは、HP-UX システムにある欠陥のせいであり、HP-UX の @command{ls}
7548 プログラムも、そのとばっちりを受けているのである。
7557 @cindex security context
7558 SELinux セキュリティ・コンテキストを表示する。ない場合は、@samp{?}
7559 を表示する。@option{-l} オプションと一緒に使った場合は、
7560 サイズの左にセキュリティ・コンテキストを出力する。
7565 @node Sorting the output
7568 @cindex sorting @command{ls} output
7569 以下のオプションは、@command{ls} が出力する情報を並べる際の順序を変更する。
7570 デフォルトでは、情報は文字コードによってソートされる (たとえば ASCII コード順)。
7576 @itemx --time=status
7579 @opindex ctime@r{, printing or sorting by}
7580 @opindex status time@r{, printing or sorting by}
7581 @opindex use time@r{, printing or sorting files by}
7582 詳細表示形式 (たとえば、@option{-l}, @option{-o}) を使用しているときは、更新日時
7583 (modification time) の代わりに、ステータス変更日時
7584 (status change time、inode の @samp{ctime}) を表示する。
7585 日時によって明示的にソートしているときや (@option{--sort=time} あるいは
7586 @option{-t})、詳細表示形式を使用していないときは、ステータス変更日時によってソートする。
7590 @cindex unsorted directory listing
7591 @cindex directory order, listing by
7592 主な働きは、@option{-U} と同じで、ソートしないことである。
7593 すなわち、ファイルをリストする際、ファイルがディレクトリにどんな順序で格納されていようと、
7594 そのままの順序で出力する。それだけでなく、@option{-a} (すべてのファイルをリストする)
7595 を有効にし、@option{-l}, @option{--color}, @option{-s} を
7596 (@option{-f} より前で指定されていたら) 無効にする働きもある。
7602 @cindex reverse sorting
7603 どんな方法でソートされていようと、逆順にする。
7604 たとえば、ファイルを並べる際に、アルファベットの後ろから並べる、
7605 最新バージョンから先に並べる、サイズの小さいものから先に並べる、などなど。
7611 @opindex size of files@r{, sorting files by}
7612 ファイルのサイズによってソートし、大きいものから順に並べる。
7618 @opindex modification time@r{, sorting files by}
7619 更新日時 (modification time、inode の @samp{mtime}) によってソートし、
7624 @itemx --time=access
7628 @opindex use time@r{, printing or sorting files by}
7629 @opindex atime@r{, printing or sorting files by}
7630 @opindex access time@r{, printing or sorting files by}
7631 詳細表示形式 (たとえば、@option{--format=long}) を使用しているときは、
7632 最終アクセス日時 (last access time、inode の @samp{atime}) を表示する。
7633 日時によって明示的にソートしているときや (@option{--sort=time} あるいは
7634 @option{-t})、詳細表示形式を使用していないときは、アクセス日時によってソートする。
7640 @opindex none@r{, sorting option for @command{ls}}
7641 ソートを行わない。すなわち、ファイルをリストする際、ファイルがディレクトリにどんな順序で格納されていようと、
7642 そのままの順序で出力する (@option{-f} が行う、ソートに無関係な他のことは、何もしない)。
7643 このオプションは非常に大きなディレクトリを一覧表示するとき、ことのほか役に立つ。
7644 ソートを全くしないことで、作業速度が著しく向上するからである。
7647 @itemx --sort=version
7650 @opindex version@r{, sorting option for @command{ls}}
7651 バージョン名とバージョン番号によってソートし、低いバージョンから順に並べる。
7652 デフォルトのソート方法と動作が似ているが、 10 進数の数字が連続する各部分を、
7653 インデックス番号やバージョン番号と見なし、(文字列としてではなく)
7654 数値として取り扱う点が違う。 (@xref{Details about version sort}.)
7657 @itemx --sort=extension
7660 @opindex extension@r{, sorting files by}
7661 ディレクトリの内容をファイルの拡張子 (最後の @samp{.} の後に続く文字)
7662 によってアルファベット順でソートする。拡張子のないファイルは、
7668 @node Details about version sort
7669 @subsection バージョン・ソートの詳細
7671 ファイル名にはインデックス番号やバージョン番号が含まれていることがしばしばあるが、
7672 バージョン・ソートは、そうした状況に対処している。
7673 通常のソートでは、1 文字づつ文字の比較を行うので、結果がこちらの期待する順番にならないことがよくあるのだ。
7675 インデックス番号やバージョン番号を名前に含むファイルがたくさんあるディレクトリを一覧するときである。
7679 abc.zml-1.gz abc.zml-1.gz
7680 abc.zml-12.gz abc.zml-2.gz
7681 abc.zml-2.gz abc.zml-12.gz
7684 バージョン・ソートにおける文字列の比較は、次のように行われる。
7685 @var{ver1} と @var{ver2} がバージョン番号で、@var{prefix} (前置部分) と @var{suffix} (後置部分)
7686 が文字列だとしよう (@var{suffix} は正規表現の @samp{(\.[A-Za-z~][A-Za-z0-9~]*)*}
7687 にマッチするもの)。その場合、@var{ver1} < @var{ver2} ならば、``@var{prefix} @var{ver1}
7689 から構成される名前は ``@var{prefix} @var{ver2} @var{suffix}'' より前に来る。
7691 数字の部分の先行する 0 は無視されることにも注意していただきたい。
7695 abc-1.007.tgz abc-1.01a.tgz
7696 abc-1.012b.tgz abc-1.007.tgz
7697 abc-1.01a.tgz abc-1.012b.tgz
7700 この機能は gnulib の @code{filevercmp} 関数を使って実装されている。
7701 そこで、知っておいた方がよい注意事項がいくつかある。
7704 @item @env{LC_COLLATE} は無視される。そのため、@samp{ls -v} や @samp{sort -V} は、
7705 数値ではない PREFIX (前置部分) を、@env{LC_COLLATE} ロケール・カテゴリが
7706 @samp{C} に設定されているかのようにソートする。
7707 @item SUFFIX (後置部分) に上記の正規表現がマッチしてくれないことがある。
7708 従って、以下の例は、期待通りの順序ではないかもしれない。
7716 abc-1.2.3.4.x86_64.rpm
7717 abc-1.2.3.x86_64.rpm
7721 @node General output formatting
7724 以下のオプションは出力全体の見かけに影響を及ぼす。
7729 @itemx --format=single-column
7732 @opindex single-column @r{output of files}
7733 1 行 に 1 ファイルを表示する。標準出力が端末でないときの
7734 @command{ls} のデフォルトである。
7735 ファイル名中に改行文字があっても、それをそのまま出力してしまわないようにするには、
7736 @option{-b} や @option{-q} オプションも参照していただきたい。
7738 (訳注: @option{-1} オプションを指定しても、標準出力が端末ならば、
7739 ファイル名中の改行文字を @samp{?} 記号で表示するか、ファイル名を
7740 @samp{shell-escape} スタイルでクォートするか、どちらかをやってくれるはずだ。
7741 上の注意書きは、標準出力が端末でないときの話である。)
7744 @itemx --format=vertical
7747 @opindex vertical @r{sorted files in columns}
7748 ファイルのリストを多段組みで (訳注: すなわち、1 行に複数ファイルの形式で)
7749 表示し、ソートは縦方向に行う。これは、標準出力が端末のときの
7750 @command{ls} のデフォルトである。@command{dir} コマンドにとっては、
7751 これが常にデフォルトになる。GNU の @command{ls} は、
7752 できるだけ少ない行数でできるだけ多くのファイルを表示するために、段の幅を可変にしている。
7754 @item --color[=@var{when}]
7756 @cindex color, distinguishing file types with
7757 ファイルのタイプを区別するためにカラー表示を使用するかどうかを指定する。
7758 @var{when} は省略してもよく、以下の一つでもよい。
7761 @vindex none @r{color option}
7762 カラー表示を全く使用しない。これがデフォルトである。
7764 @vindex auto @r{color option}
7765 @cindex terminal, using color iff
7766 標準出力が端末の場合のみ、カラー表示を使用する。
7768 @vindex always @r{color option}
7771 @var{when} を付けずに @option{--color} を指定するのは、"@option{--color=always}
7772 と同じことである。カラー表示にしたファイルのリストをパイプで @command{more} や
7773 @command{less} のようなページャに送ると、たいての場合、判読に苦しむ羽目になる。
7774 ただし、@code{more -f} を使うと、うまく行くようだ。(訳注: 訳者の手元では、
7775 @samp{less -R} や @samp{lv -c} で一応問題なくカラー表示ができているようだ。)
7778 @vindex SHELL @r{environment variable, and color}
7779 留意すべきは、@option{--color} オプションを使用すると、
7780 大量のファイルがあるディレクトリで @command{ls} を実行したとき、
7781 目に見えて動作速度が低下するかもしれないことである。
7782 これは、カラー表示のデフォルトの設定では、@command{ls} は、
7783 リストするファイルを一つづつ @code{stat} システムコールで調べる必要があるからだ。
7784 とは言え、ファイルタイプのカラー表示はおおむね使用したいけれど、
7785 他の色付けオプションは使わなくてもよいこともある
7786 (たとえば、実行属性、リンク切れ、スティッキー・ビット、その他のユーザの書き込み権限、
7787 ケーパビリティなどは、色で表示しなくてもよい)。
7788 その場合は、こんなふうに、@command{dircolors} コマンドを使用して、環境変数
7789 @env{LS_COLORS} を設定すればよい。
7791 eval $(dircolors -p | perl -pe \
7792 's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
7794 そうすれば、@code{dirent.d_type} が使えるファイルシステムなら、
7795 @command{ls} は各コマンドライン引数に対してたった一回だけ
7796 @code{stat} システムコールを行うだけですむようになる。
7800 @itemx --indicator-style=classify
7803 @opindex --indicator-style
7804 @cindex file type and executables, marking
7805 @cindex executables and file type, marking
7806 @c The following sentence is the same as the one for -d.
7807 各ファイル名の後ろに、ファイルタイプを示す 1 文字を付ける。
7808 通常ファイルの場合も、実行可能ファイルならば、@samp{*} を後置する。
7809 ファイルタイプの指標は、ディレクトリならば @samp{/}、シンボリックリンクならば
7810 @samp{@@}、FIFO ならば @samp{|}、ソケットならば @samp{=}、ドアならば
7811 @samp{>} であり、通常ファイルを表す指標はない。
7812 なお、@option{--dereference-command-line} (@option{-H}),
7813 @option{--dereference} (@option{-L}),
7814 @option{--dereference-command-line-symlink-to-dir}
7815 といったオプションが指定されていないかぎり、コマンドラインで指定されたシンボリックリンクをたどることはない。
7818 @itemx --indicator-style=file-type
7819 @opindex --file-type
7820 @opindex --indicator-style
7821 @cindex file type, marking
7822 各ファイル名の後ろに、ファイルタイプを示す 1 文字を付ける。
7823 @option{-F} に似ているが、こちらは、実行ファイルに指標を付けない。
7825 @item --indicator-style=@var{word}
7826 @opindex --indicator-style
7827 ファイル名の後ろに指標文字を付けるとき、@var{word} というスタイルを使用する。
7828 @var{word} には次のものがある。
7832 指標文字を全く付けない。これがデフォルトである。
7834 ディレクトリの後ろに @samp{/} を付ける。これは、@option{-p} オプションと同じである。
7836 ディレクトリ、シンボリックリンク、FIFO、ソケットの後ろに、
7837 それぞれ @samp{/}, @samp{@@}, @samp{|}, @samp{=} を付け、
7838 通常ファイルの後ろには何も付けない。これは、@option{--file-type} オプションと同じである。
7840 実行可能な通常ファイルの後ろに @samp{*} を付ける。それ以外は、
7841 @samp{file-type} の場合と同じ動作をする。これは、@option{-F} や
7842 @option{--classify} オプションと同じである。
7848 @opindex --kibibytes
7849 デフォルトのブロックサイズを標準の値の 1024 バイトに設定する。
7850 そのとき、環境変数でそれ以外のどんな値が設定されていても、
7851 それを上書きする (@pxref{Block size})。このオプション自身も、
7852 @option{--block-size}, @option{--human-readable} (@option{-h}),
7853 @option{--si} オプションがあれば、それによって上書きされる。
7855 @option{--kibibytes} (@option{-k}) オプションが影響を及ぼすのは、@option{-l}
7856 などのオプションが書き出すディレクトリごとのブロック数や、@option{--size}
7857 (@option{-s}) オプションが表示するディスク割り当て量に対してである。
7858 @option{-l} の表示するファイルサイズには影響を及ぼさない。
7861 @itemx --format=commas
7864 @opindex commas@r{, outputting between files}
7865 ファイルを横に並べ、各行に収まる範囲でできるだけ多くの項目を表示する。
7866 ファイル同士は @samp{, } (コンマとスペース) で区切る。
7869 @itemx --indicator-style=slash
7871 @opindex --indicator-style
7872 @cindex file type, marking
7873 ディレクトリ名の後ろに @samp{/} を付ける。
7876 @itemx --format=across
7877 @itemx --format=horizontal
7880 @opindex across@r{, listing files}
7881 @opindex horizontal@r{, listing files}
7882 ファイルのリストを多段組みで (訳注: すなわち、1 行に複数ファイルの形式で)
7886 @itemx --tabsize=@var{cols}
7889 タブ位置が @var{cols} 桁ごとにあると想定する。デフォルトは 8 桁ごと。
7890 @command{ls} は効率を考慮し、使えるときはタブを出力で使用する。
7891 @var{cols} が 0 の場合は、タブを使用しない。
7893 端末エミュレータの中には、ASCII 以外のバイトが前にあると、
7894 列をタブ位置の右にきちんと揃えてくれないものがあるかもしれない。
7895 この問題を回避するには、@option{-T0} オプションを使うか、環境変数
7896 @code{TABSIZE=0} を設定するかして、列を揃えるのにタブではなく、
7897 スペースを使うよう、@command{ls} に指示すればよい。
7900 @itemx --width=@var{cols}
7904 スクリーンの横幅が @var{cols} 桁だと想定する。デフォルトの値は、
7905 可能ならば端末の設定から取得する。取得できないときは、環境変数
7906 @env{COLUMNS} が設定されていれば、それを使用する。
7907 それも設定されていないときのデフォルトの値は 80 である。
7908 @var{cols} の値を @samp{0} にすると、出力行の長さに制限がなくなる。
7909 その場合、ただ一行の出力中で各項目を分離するのは、タブではなく、スペースになる。
7914 @node Formatting file timestamps
7915 @subsection タイムスタンプのフォーマット
7917 デフォルトでは、ファイルのタイムスタンプは短縮形式で表示される。
7918 すなわち、最近のタイムスタンプ以外は、@samp{Mar 30@ @ 2002}
7919 といった日付表示になり、最近のタイムスタンプは、@samp{Mar 30 23:45}
7920 といった年度なしの日付と時刻の表示になる。この書式は、後で詳しく述べるように、
7921 使用しているロケールによっては違ったものになるかもしれない。
7924 タイムスタンプは、ここ 6 ヶ月以内のもので、未来の日付が付いていなければ、
7925 最近 (@dfn{recent}) として扱われる。今日の日付のタイムスタンプが、
7926 最近用の書式で表示されない場合、そのタイムスタンプは未来扱いされている。
7927 それは、おそらく時計に狂いが生じているということであり、@command{make}
7928 のような、ファイルのタイムスタンプに頼っているプログラムは、まともに動かないかもしれない。
7931 タイムスタンプは、タイムゾーンのルールに従って表示されるが、
7932 そのルールを指定しているのは、環境変数 @env{TZ} である。
7933 @env{TZ} が設定されていない場合は、システムのデフォルトのルールに従って表示される。
7934 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
7935 The GNU C Library Reference Manual}.
7937 以下のオプションは、ファイルのタイムスタンプの表示方法を変更する。
7940 @item --time-style=@var{style}
7941 @opindex --time-style
7943 タイムスタンプを @var{style} 形式で表示する。
7944 @var{style} は以下の一つでなければならない。
7949 @var{format} を使って、タイムスタンプを表示する。
7950 その場合、@var{format} は、@command{date} コマンドの書式引数と同じように解釈される
7951 (@pxref{date invocation})。
7952 たとえば、@option{--time-style="+%Y-%m-%d %H:%M:%S"} と指定すると、
7953 @command{ls} の表示するタイムスタンプは、@samp{2002-03-30 23:45:56}
7954 のようになる。@command{date} の場合と同様、@var{format}
7955 の解釈は、@env{LC_TIME} ロケール・カテゴリの影響を受ける。
7957 @var{format} に改行で分離された二つの書式文字列がある場合、
7958 前半は最近のファイル以外に使用され、後半は最近のファイルに使用される。
7959 出力される列をきちんと揃えたければ、二つの書式のどちらかに、
7960 空白をいくつか入れる必要があるかもしれない。
7964 すなわち、ISO 8601 の日付、時刻、タイムゾーンという構成要素を
7965 nanosecond (10 億分の 1 秒) の精度で使用するわけだ。
7966 一例を挙げると、@samp{2002-03-30 23:45:56.477817180 -0700}
7967 といった表示になる。この形式は、@samp{+%Y-%m-%d %H:%M:%S.%N %z} と同じである。
7969 これが有用なのは、タイムスタンプが、オペレーティング・システムから取得できる時間関係のすべての情報を含んでいるからである。
7970 たとえば、GNU の @command{make} は、あるファイルが古いかどうかを判定するのに、
7971 省略なしのタイムスタンプを使用している。そのため、この情報が、@command{make}
7972 の動作を説明するために役立つことがあるのである。
7975 ISO 8601 の日付と時刻の構成要素を分の単位まで表示する。たとえば、
7976 @samp{2002-03-30 23:45}。このタイムスタンプは、@samp{full-iso} タイム
7977 スタンプより短く、日常作業にはたいてい十分である。この形式は
7978 @samp{+%Y-%m-%d %H:%M} と同じである。
7981 最近以外のタイムスタンプでは、ISO 8601 の日付を表示し
7982 (たとえば @samp{2002-03-30@ })、最近のタイムスタンプでは、
7983 ISO 8601 風の月・日・時・分を表示する (たとえば @samp{03-30 23:45})。
7984 この形式は、@samp{long-iso} の形式に比べて見かけがよくないが、
7985 より狭いスペースでほぼ同量の情報を伝えており、また、簡潔なので
7986 @command{ls} の出力を伝統的な 1 行 80 桁の出力行に納めるのに都合がよい。
7987 @command{ls} を実行する以下の二つの方法は、同じことである。
7992 ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
7993 ls -l --time-style="iso"
7998 タイムスタンプをロケール依存形式で表示する。たとえば、
7999 フィンランド語のロケールだと、最近以外のタイムスタンプを
8000 @samp{maalis 30@ @ 2002} のように表示し、最近のタイムスタンプは
8001 @samp{maalis 30 23:45} のように表示するかもしれない。
8002 ロケール依存のタイムスタンプは、概して @samp{iso} のタイムスタンプより長くなるし、
8003 ロケールごとの規則の違いは非常に大きいので、プログラムによる解析がずっと難しくなる。
8004 だが、こちらの方がわかりやすい人も大勢いる。
8006 タイムスタンプの書式を決めているのは、@env{LC_TIME} ロケール・カテゴリである。
8007 デフォルトの POSIX ロケールでは、@samp{Mar 30@ @ 2002} や
8008 @samp{Mar 30 23:45} といったタイムスタンプを使っている。
8009 POSIX ロケールでは、@command{ls} を実行する次の二つの方法は、同じことである。
8014 ls -l --time-style="+%b %e %Y$newline%b %e %H:%M"
8015 ls -l --time-style="locale"
8018 しかし、他のロケールでは動作が違う。たとえば、ドイツ語のロケールだと、
8019 @option{--time-style="locale"} は @option{--time-style="+%e. %b %Y
8020 $newline%e. %b %H:%M"}
8021 とおそらく同じになり、@samp{30. M@"ar 2002@ } や
8022 @samp{30. M@"ar 23:45} といったタイムスタンプを生成するだろう。
8024 @item posix-@var{style}
8026 @env{LC_TIME} ロケール・カテゴリが POSIX なら、POSIX ロケールのタイムスタンプを表示し、
8027 それ以外なら、@var{style} 形式のタイムスタンプを表示する。
8028 たとえば、@samp{posix-long-iso} という指定は、POSIX ロケールでは
8029 @samp{Mar 30@ @ 2002} や @samp{Mar 30 23:45} といったタイムスタンプを表示し、
8030 それ以外のロケールでは @samp{2002-03-30 23:45} といったタイムスタンプを表示する。
8035 @option{--time-style} オプションのデフォルト値は、環境変数 @env{TIME_STYLE}
8036 を使って指定することができる。@env{TIME_STYLE} が設定されていない場合、
8037 デフォルトの形式は @samp{locale} である。GNU Emacs のバージョン 21.3
8038 以降では、@command{ls} の @option{--dired} オプションを使用しており、
8039 従って、どんな日付のフォーマットでも解析することができる。しかし、Emacs 21.1
8040 や 21.2 を使っていて、POSIX 以外のロケールを指定している場合は、
8041 @samp{TIME_STYLE="posix-long-iso"} を設定する必要があるかもしれない。
8043 ある種のサービス不能化攻撃 (denial-of-service attacks) を回避するため、
8044 1000 バイトより長くなりそうなタイムスタンプは、エラーとして処理されることがある。
8047 @node Formatting the file names
8048 @subsection ファイル名のフォーマット
8050 以下のオプションは、ファイル名の表示方法を変更する。
8056 @itemx --quoting-style=escape
8059 @opindex --quoting-style
8060 @cindex backslash sequences for file names
8061 ファイル名中の非表示文字を、C 言語で使うような、バックスラッシュにアルファベットや
8062 8 進数を続ける方法を使用して、クォートする (訳注:
8063 このオプションでは、タブや改行だけでなく、空白 (Ox20)
8068 @itemx --quoting-style=literal
8071 @opindex --quoting-style
8072 ファイル名をクォートしない。とは言え、@command{ls} では、出力先が端末の場合は、
8073 @option{--show-control-chars} が指定されていないかぎり、
8074 非表示文字を疑問符として表示するぐらいのことは行う。
8077 @itemx --hide-control-chars
8079 @opindex --hide-control-chars
8080 ファイル名中の非表示文字に代えて、疑問符を表示する。
8081 この動作は、出力先が端末で、プログラムが @command{ls}
8084 (訳注: このオプションの現在の動作は変わっているかもしれない。
8085 すなわち、出力先が端末以外の場合は、上記の通り、非表示文字を疑問符で表示するが、
8086 出力先が端末の場合は、非表示文字を疑問符ではなく、@samp{$''}
8087 という形で表示し、空白 (0x20) を含むファイル名はファイル名全体をシングルクォートで囲むかもしれない。
8088 @option{--quoting-style} の説明の末尾の訳注もご覧になっていただきたい。)
8092 @itemx --quoting-style=c
8094 @opindex --quote-name
8095 @opindex --quoting-style
8096 ファイル名をダブル・クォートで囲み、非表示文字を C 言語と同じやり方でクォートする。
8098 @item --quoting-style=@var{word}
8099 @opindex --quoting-style
8100 @cindex quoting style
8101 ファイル名などの文字列には、通常使われない文字が含まれているかもしれない。
8102 このオプションを指定すると、@var{word} というスタイルを使って、
8103 そうした文字列をクォートすることになる。
8104 @var{word} は、以下に挙げるものの一つでなければならない。
8106 @macro quotingStyles
8109 文字列に手を加えず、そのまま出力する。これは、@option{-N} や
8110 @option{--literal} オプションと同じである。
8112 文字列にシェルのメタ文字がある場合や、出力が誤解を招くものになりそうな場合に、
8113 シェル向けのクォートを施す。このクォート方法は、@command{bash} のような
8114 POSIX 互換のシェルにはふさわしいものだが、
8115 @command{csh} のような非互換のシェルでは、必ずしもうまく働くとはかぎらない。
8117 普通ならクォートが不要な場合でも、文字列にシェル向けのクォートを施す。
8119 @samp{shell} に似ているが、非表示文字のクォーティングに POSIX 提唱の
8120 @samp{$''} という書式を使用する。ほとんどのシェルに適している。
8121 (訳注: ファイル名中に空白 (0x20) がある場合は、ファイル名全体をシングルクォートで囲む。)
8122 @item shell-escape-always
8123 @samp{shell-escape} に似ているが、普通ならクォートが不要な場合でも、
8126 C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。
8127 文字列をダブル・クォートで囲むことも行う。
8128 これは、@option{-Q} や @option{--quote-name} オプションと同じである。
8130 C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。
8131 ただし、文字列をダブル・クォートで囲むことはしない。
8132 これは、@option{-b} や @option{--escape} と同じである。
8134 C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。
8135 ただし、文字列を囲む引用符には、ロケールにふさわしいものを使う。
8137 @c Use @t instead of @samp to avoid duplicate quoting in some output styles.
8138 C 言語の文字列リテラルをクォートするときのように、文字列をクォートする。
8139 ただし、文字列を囲む引用符には、ロケールにふさわしいものを使い、
8140 さらに、デフォルトの C ロケールで言うと、@t{"like this"} ではなく、
8141 @t{'like this'} のようにクォートを行う。この方が見栄えのよいディスプレイが多い。
8146 @option{--quoting-style} オプションのデフォルト値は、環境変数
8147 @env{QUOTING_STYLE} によって指定することができる。
8148 この環境変数が設定されていない場合、デフォルトの値は、出力先が端末のときは
8149 @samp{shell-escape} であり、端末以外のときは @samp{literal} である。
8151 (訳注: 上記の説明からは、デフォルトの端末に対する出力のスタイルは、
8152 @samp{shell-escape} であるように読める。しかし、@option{--hide-control-chars}
8153 (@option{-q}) の説明や、@command{ls} の章全体の冒頭では、
8154 非表示文字を疑問符として表示するのが、デフォルトの端末に対する出力だと言っている。
8155 info マニュアルの説明に少し混乱があり、部分的に古い記述が残っているらしい。実のところ、coreutils
8156 の開発元では、バージョン 8.25 あたりから、デフォルトの端末に対する出力を
8157 @option{--quoting-style=shell-escape} にしている。
8158 たとえば、ファイル名にタブが含まれている場合、オプションなしの
8159 @command{ls} は、@samp{aaa?bbb} ではなく @samp{'aaa'$'\t''bbb'}
8160 のように端末に表示するのである。また、ファイル名中に空白がある場合は、
8161 ファイル名全体をシングルクォートで囲って、@samp{'/misc/xxx yyy'}
8162 のように表示する。しかし、ディストリビューションによっては、バージョン
8163 8.26 でも、デフォルトの端末に対する出力を
8164 @option{--quoting-style=literal} にしていることもある。
8165 その方が見やすいかもしれないので、それも一見識だと思う。端末に対するデフォルトの出力や
8166 @option{-q} オプションの動作が、ご自分のところではどうなっているか、一度お確かめになっておくとよい。)
8168 @item --show-control-chars
8169 @opindex --show-control-chars
8170 ファイル名中の非表示文字に手を加えず、そのまま出力する。
8171 この動作は、出力先が端末ではない場合や、プログラムが @command{ls}
8174 (訳注: 開発元配布のバージョン 8.26 では、@option{--show-contrls-chars}
8175 を指定した場合も、出力先が端末だと、非表示文字を @samp{$''} の書式で表示している。
8176 出力先が端末以外なら、上の説明どおり、非表示文字がそのまま出力される。
8177 しかし、ディストリビューション配布の @command{ls}
8178 では、出力先が端末の場合に上記説明通りの動作をするものもある。
8179 これも、お手元で実際の動作を確かめておいていただきたい。)
8184 @node dir invocation
8185 @section @command{dir}: ディレクトリの内容を簡潔に表示する
8188 @cindex directory listing, brief
8190 @command{dir} の動作は、@code{ls -C -b} と同じである。
8191 すなわち、デフォルトでは、ファイルのリストを多段組みで
8192 (訳注: 1 行に複数ファイルの形式で) 表示し、ソートは縦方向に行う。
8193 また、特殊文字は、バックスラッシュ・エスケープシーケンスを使って表示する。
8195 @xref{ls invocation, @command{ls}}.
8198 @node vdir invocation
8199 @section @command{vdir}: ディレクトリの内容を詳細に表示する
8202 @cindex directory listing, verbose
8204 @command{vdir} の動作は、@code{ls -l -b} と同じである。
8205 すなわち、デフォルトでは、詳細形式でファイルをリストし、
8206 特殊文字は、バックスラッシュ・エスケープシーケンスを使って表示する。
8208 @xref{ls invocation, @command{ls}}.
8210 @node dircolors invocation
8211 @section @command{dircolors}: @command{ls} のカラー設定
8215 @cindex setup for color
8217 @command{dircolors} は、@command{ls} (や @command{dir} など)
8218 でカラー出力をするのに必要な端末設定のためのシェル・コマンドのシーケンスを出力する。
8222 eval "$(dircolors [@var{option}]@dots{} [@var{file}])"
8225 @var{file} が指定されていると、@command{dircolors} はそれを読み込んで、
8226 どのファイルタイプや拡張子に対してどの色を使うかを決定する。
8227 @var{file} が指定されていない場合は、プログラムに埋め込まれているデータベースが使用される。
8228 そうした設定ファイルの書式について詳しいことを知りたかったら、
8229 @samp{dircolors --print-database} を実行してみるとよい。
8231 ファイル @file{~/.dircolors} が存在していたら、@command{dircolors}
8232 がそれを読み込むようにするには、以下の行を自分の @file{~/.bashrc} に書き込めばよい
8233 (お気に入りのシェルが bash でないなら、適切に書き直すこと)。
8237 test -r $d && eval "$(dircolors $d)"
8241 @vindex SHELL @r{environment variable, and color}
8242 @command{dircolors} の出力は、環境変数 @env{LS_COLORS}
8243 を設定するシェル・コマンドである。どのシェルの文法にするかは、
8244 コマンドラインで指定することができる。指定しない場合は、環境変数 @env{SHELL}
8245 の値から @command{dircolors} が推測する。
8247 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
8252 @itemx --bourne-shell
8255 @opindex --bourne-shell
8256 @cindex Bourne shell syntax for color setup
8257 @cindex @command{sh} syntax for color setup
8258 Bourne シェルのコマンドを出力する。これが、環境変数 @env{SHELL}
8259 が設定されていて、その値が @samp{csh} や @samp{tcsh}
8260 で終わっていないときのデフォルトである。
8268 @cindex C shell syntax for color setup
8269 @cindex @command{csh} syntax for color setup
8270 C シェルのコマンドを出力する。これは、環境変数 @code{SHELL} の値が、
8271 @command{csh} や @command{tcsh} で終わっているときのデフォルトである。
8274 @itemx --print-database
8276 @opindex --print-database
8277 @cindex color database, printing
8278 @cindex database for color setup, printing
8279 @cindex printing color database
8280 (プログラムに埋め込まれている) デフォルトのカラー設定データベースを出力する。
8281 この出力は、それ自体有効な設定ファイルであり、どういう設定が可能かについてかなり詳しく説明している。
8288 @node Basic operations
8291 @cindex manipulating files
8293 この章では、基本的なファイル操作のためのコマンドを説明する。
8294 すなわち、コピー、移動 (名前の変更)、消去 (削除) といった操作である。
8297 * cp invocation:: ファイルをコピーする。
8298 * dd invocation:: ファイルの変換とコピー。
8299 * install invocation:: ファイルをコピーし属性をセットする。
8300 * mv invocation:: ファイルの移動 (名前の変更) を行う。
8301 * rm invocation:: ファイルやディレクトリを削除する。
8302 * shred invocation:: セキュリティを向上させたファイルの削除。
8307 @section @command{cp}: ファイルやディレクトリをコピーする
8310 @cindex copying files and directories
8311 @cindex files, copying
8312 @cindex directories, copying
8314 @command{cp} はファイルをコピーする (もしそうしたければ、ディレクトリのコピーもできる)。
8315 コピーによって作られたファイルは、コピー元から全く独立したものになる。
8316 一つのファイルを別のファイルにコピーすることもできるし、
8317 好きなだけたくさんのファイルをコピー先のディレクトリに一遍にコピーすることもできる。
8322 cp [@var{option}]@dots{} [-T] @var{source} @var{dest}
8323 cp [@var{option}]@dots{} @var{source}@dots{} @var{directory}
8324 cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
8329 ファイル名を二つ指定すると、@command{cp} は最初のファイルを 2 番目のファイルにコピーする。
8332 @option{--target-directory} (@option{-t}) オプションを指定した場合や、
8333 あるいはそれを指定しないでも、最後のファイルがディレクトリであり、しかも
8334 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
8335 @command{cp} は、各コピー元 (@var{source}) ファイルを、指定されたディレクトリにコピー元
8336 (@var{source}) と同じ名前でコピーする。
8339 ほとんどの場合、ファイルは読み込まれたとおりに書き出される。
8340 例外については、後述の @option{--sparse} オプションをご覧になっていただきたい。
8342 デフォルトでは、@command{cp} はディレクトリをコピーしない。
8343 ただし、@option{-R}, @option{-a}, @option{-r} オプションを指定すると、
8344 @command{cp} は再帰的なコピーを行う。
8345 すなわち、コピー元のディレクトリを段階的に下って、対応するコピー先のディレクトリにファイルをコピーすることになる。
8347 コピー元がシンボリックリンクの場合、@command{cp} がリンクをたどるのは
8348 (訳注: すなわち、リンクそのものではなく、参照先の実ファイルをコピーするのは)、
8349 通常では、再帰的なコピーをしていないときか、あるいは、@option{--link}
8350 (@option{-l}) オプションが使用されているときだけである。
8351 このデフォルトの動作は、次に挙げるオプションによって上書きすることができる。
8352 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
8354 @option{--no-dereference} (@option{-P}), @option{-H}。
8355 こうしたオプションを二つ以上指定すると、@command{cp} は警告を出さず、最後のオプションで他のものを上書きする。
8357 (訳注: 最近の @command{cp} では @option{--link} オプションの動作が変更されている。
8358 コピー元がシンボリックリンクの場合、coreutils-8.21 までは、
8359 デフォルトでは、シンボリックリンクのハードリンクを作っていたが、8.22
8360 以後の @command{cp} では参照先ファイルのハードリンクを作るようになっている。)
8362 コピー先がシンボリックリンクの場合、@command{cp} がリンクをたどるのは
8363 (訳注: すなわち、コピー元ファイルで、リンクそのものではなく、参照先のファイルを上書きするのは)、
8364 そのリンクが、存在する通常ファイルを指しているときだけである。
8365 それに対して、コピー先のシンボリックリンクがリンク切れしている場合は、@command{cp}
8366 は、デフォルトではコピーを拒否し、エラーメッセージを出して、実行に失敗する。
8367 そうした操作は、本質的に危険だからである。
8368 この動作は、伝統的な習慣や POSIX の仕様に反している。
8369 たとえリスクがあろうとも、リンク切れしたシンボリックリンクの参照先を
8370 @command{cp} が作成するようにしたいなら、環境変数 @env{POSIXLY_CORRECT}
8371 を設定すればよい。なお @option{--backup} や @option{--link}
8372 といったオプションが、コピーする前にコピー先ファイルの名前変更や削除を行う場合、
8373 @command{cp} は、リンクが指しているファイルではなく、シンボリックリンクの名前変更や削除を行う。
8375 デフォルトでは、@command{cp} がスペシャルファイルの内容をコピーするのは、
8376 再帰的なコピーをしていないときだけである。このデフォルトの動作は、
8377 @option{--copy-contents} によって変更できる。
8379 @cindex self-backups
8380 @cindex backups, making only
8381 @command{cp} は通常、ファイルを自分自身にコピーすることを拒否するが、次の例外がある。
8382 @var{source} と @var{dest} が同一で、しかも、通常ファイルを指しているとき、
8383 @option{--force --backup} オプションが指定されると、@command{cp}
8384 はバックアップファイルを作成することになる。バックアップファイルを標準のものにするか
8385 (訳注: ファイルの末尾にチルダ @samp{~} が 1 個付く)、番号付きのものにするかは、
8386 いつもどおりの方法で指定できる (@pxref{Backup options})。
8387 存在するファイルに変更を加える前に、そのバックアップをちょっと作っておきたい場合、この動作は便利である。
8389 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
8396 コピー元ファイルの構造と属性をコピー先でもできるだけ維持する
8397 (ただし、ディレクトリの内部構造を維持しようとはしない。そのため、コピー先で
8398 @samp{ls -U} を実行すると、コピー元とは違った順序でファイルがリストされるかもしれない)。
8399 SELinux コンテキストや拡張属性 (xattr) も維持しようとするが、
8400 そうした操作に失敗しても無視し、その旨エラーメッセージを表示することはない。
8401 エラーメッセージが少ないだけで、@option{-dR --preserve=all} と同じある。
8403 @item --attributes-only
8404 @opindex --attributes-only
8405 コピー元ファイルの指定された属性のみを、コピー先にコピーする。
8406 コピー先ファイルがすでに存在している場合、その内容を変更することはない。
8407 属性のうち、何をコピーするかを決める方法については、@option{--preserve}
8411 @itemx --backup[=@var{method}]
8414 @vindex VERSION_CONTROL
8415 @cindex backups, making
8416 @xref{Backup options}.
8417 そのままでは、上書きされるか、消去されてしまう各ファイルのバックアップを作成する。
8418 特殊な用法としては、次のものがある。force と backup
8419 の両方のオプションが指定されているとき、コピー元 (@var{source})
8420 とコピー先 (@var{dest}) が同じ名前で、しかも実在する通常ファイルを指していると、
8421 @command{cp} はコピー元 (@var{source}) のバックアップを作成する。
8422 次のちょっとした Bourne シェルのスクリプトは、オプションのこの組み合わせの応用だが、便利である。
8426 # Usage: backup FILE...
8427 # リストされた各 FILE について GNU スタイルのバックアップを
8431 cp --backup --force --preserve=all -- "$i" "$i" || fail=1
8436 @item --copy-contents
8437 @cindex directories, copying recursively
8438 @cindex copying directories recursively
8439 @cindex recursively copying directories
8440 @cindex non-directories, copying as special files
8441 再帰的なコピーを行っている際に、スペシャルファイル (たとえば、FIFO やデバイスファイル)
8442 の内容を、操作対象が通常ファイルであるかのようにコピーする。
8443 要するに、コピー元の各ファイルからデータを読み込んで、それをコピー先に書き出そうとするわけである。
8444 このオプションを使うのは、ほとんどの場合誤りである。なぜなら、
8445 FIFO や、通常 @file{/dev} ディレクトリにあるようなスペシャルファイルを対象にした場合、
8446 望ましくない結果を生ずることが珍しくないからだ。
8447 @code{cp -R --copy-contents} は、FIFO や @file{/dev/console}
8448 のようなスペシャルファイルからデータを読み込もうとすると、
8449 たいていの場合、いつまでも無反応になるだろうし、@file{/dev/zero}
8450 をコピーしようとすれば、コピー先のディスクを溢れさせてしまうだろう。
8451 このオプションは、再帰的なコピーをするとき以外、効果を持たない。
8452 また、シンボリックリンクのコピーには影響しない。
8456 @cindex symbolic links, copying
8457 @cindex hard links, preserving
8458 シンボリックリンクをコピーする際、リンクが指しているファイルをコピーするのではなく、
8459 シンボリックリンクをシンボリックリンクとしてコピーする。
8460 また、コピー元において複数のファイルがハードリンクの関係にある場合、
8462 @option{--no-dereference --preserve=links} と同じである。
8468 このオプションを付けずにコピーを行う場合、
8469 コピー先ファイルがすでに存在し、しかも書き込みモードでオープンできないと、コピーに失敗する。
8470 それに対して、@option{--force} を付けた場合は、コピー先ファイルがオープンできないと、
8471 @command{cp} は、まずそれを削除してから、再度オープンを試みる。
8472 この動作は、@option{--force} と一緒に @option{--link} や @option{--symbolic-link}
8473 を使用した場合に行われる動作とは、違うことに注意していただきたい。
8474 後者の場合は、すでに存在するコピー先ファイルは一度もオープンされず、
8475 むしろ無条件で削除されるのである。@option{--remove-destination} の説明も参照すること。
8477 このオプションは、@option{--interactive} や @option{-i}
8478 オプションとは無関係である。どちらも他方の効果を無効にすることはない。
8480 @option{--no-clobber} や @option{-n} オプションを使用している場合、このオプションは無視される。
8484 コマンドラインの引数がシンボリックリンクを指定している場合には、
8485 シンボリックリンクそのものではなく、それが指しているファイルをコピーする。
8486 とは言え、再帰的にディレクトリ・ツリーをたどっているときにシンボリックに出会った場合は、
8487 そのまま (つまり、シンボリックリンクとして) コピーする。
8490 @itemx --interactive
8492 @opindex --interactive
8493 ディレクトリ以外のファイルをコピーする際に、コピー先ファイルがすでに存在していると、
8494 プロンプトを出して、ファイルを上書きしてよいかどうか、ユーザに問い合わせる。
8495 @option{-i} オプションは、@option{-n} オプションが前にあるとき、それを無効にする。
8501 コピー元がディレクトリ以外の場合、コピーする代わりに、ハードリンクを作成する。
8504 @itemx --dereference
8506 @opindex --dereference
8507 コピー元がシンボリックリンクの場合は、その参照先をコピーする。
8508 また、このオプションを使った場合、@command{cp} はシンボリックリンクを作ることができない。
8509 たとえば、コピー元のディレクトリ・ツリー中に (通常ファイルに対する)
8510 シンボリックリンクがあると、コピー先のディレクトリ・ツリーには、通常ファイルとしてコピーされることになる。
8515 @opindex --no-clobber
8516 存在するファイルを上書きしない。@option{-n} オプションは、@option{-i}
8517 オプションが前にあるとき、それを無効にする。このオプションと @option{-b}
8518 (@option{--backup}) オプションは、どちらか一方しか指定できない。
8521 @itemx --no-dereference
8523 @opindex --no-dereference
8524 @cindex symbolic links, copying
8525 コピー元がシンボリックリンクの場合、それが指しているファイルをコピーするのではなく、
8526 シンボリックリンクとしてコピーする。このオプションが作用を及ぼすのは、
8527 コピー元のシンボリックリンクに対してだけであり、
8528 コピー先に指定されたシンボリックリンクについては、可能なかぎり常に参照先がたどられる。
8531 @itemx --preserve[=@var{attribute_list}]
8534 @cindex file information, preserving, extended attributes, xattr
8535 コピー元ファイルの属性のうち、指定されたものをコピー先でも維持する。
8536 @var{attribute_list} を指定する場合は、一つ以上の以下の文字列をコンマで区切ったリストでなければならない。
8540 ファイルのモードビット (訳注: 一般にアクセス権とか、許可属性と言われるもの)
8541 やアクセス・コントロール・リストを維持する。
8543 所有者とグループを維持する。ほとんどの最近のシステムでは、
8544 ファイルの所有者を変更できるのは、しかるべき権限を持ったユーザだけである。
8545 また、一般ユーザにファイルのグループが維持できるのは、
8546 維持しようとするグループに、たまたまそのユーザが属しているときのみである。
8548 最終アクセス日時 (last access time) と最終更新日時 (last modification time)
8549 を、可能ならば、維持する。古いシステムでは、対象となるファイルがシンボリックリンクの場合、
8551 それに対して、最近のシステムでは、たいていのものが @code{utimensat}
8552 関数を用意しているので、シンボリックリンクの場合でも、日時関係の属性維持が可能である。
8554 コピー元のファイル同士が (ハードリンクであれ、シンボリックリンクであれ)
8555 リンクの関係にあるとき、コピー先の対応するファイル同士でも、その関係を維持する。
8556 ただし、@option{-L} や @option{-H} と一緒に使った場合、
8557 このオプションがシンボリックリンクをハードリンクに変更することがあるのに、
8560 $ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
8565 コピー元に注目していただきたい。@file{b} は、通常ファイル @file{a} を指すシンボリックリンクである。
8566 ところが、コピー先ディレクトリ @file{c/} の二つのファイルは、ハードリンクになっている。
8567 @option{-a} は @option{--no-dereference} を意味するのだから、
8568 シンボリックリンクがコピーされそうに思えるが、この場合は、後に続く
8569 @option{-H} が、コマンドライン引数の参照をたどるように @command{cp}
8570 に命じているので、@command{cp} には、同じ inode 番号を持った
8571 2 個のファイルがコマンドラインで指定されているように見えるのである。
8572 さらに、@option{-a} は @option{--preserve=links} オプションを意味してもいるので、
8573 この働きによって、ハードリンクと認識された両ファイルの関係が、コピー先でも維持されることになるのである。
8575 次のものは、@command{cp} の @option{-L} を使った場合の類似例である。
8577 $ mkdir b c; (cd b; : > a; ln -s a b); cp -aL b c; ls -i1 c/b
8583 ファイルの SELinux セキュリティ・コンテキストを維持する。
8584 それができないときは、詳細なエラーメッセージを出し、失敗のステータスで終了する。
8586 ファイルの拡張属性を維持する。それができないときは、詳細なエラーメッセージを出し、失敗のステータスで終了する。
8587 @command{cp} が xattr のサポートなしでビルドされている場合は、このオプションは無視される。
8588 SELinux コンテキスト、ACL、ケーパビリティなどを xattr を使って実装している場合には、
8589 そうした属性もこのオプションによって、明示的な指定がない場合でも維持される。
8590 すなわち、@option{--preserve=mode} や @option{--preserve=context}
8593 ファイルの属性をすべて維持する。上記のすべてを指定するのと同じことだが、
8594 SELinux セキュリティ・コンテキストや拡張属性の維持に失敗しても、
8595 @command{cp} の終了ステータスが変わらないという点が異なっている。
8596 @option{-a} とは違って、@samp{Operation not supported}
8597 以外のすべての警告メッセージを出力する。
8600 @var{attribute_list} なしで @option{--preserve} を使用するのは、
8601 @option{--preserve=mode,ownership,timestamps} と同じことである。
8603 このオプションを使わない場合、コピー先ファイルがすでに存在している場合は、
8604 その許可属性は変更されない。一方、新しくファイルが作成される場合は、
8605 対応するコピー元ファイルのモードを元にして、
8606 そこから set-user-ID ビット、set-group-ID ビット、スティッキー・ビットを落としたものが、
8607 各ファイルに付けられ、そしてさらに、オペレーティング・システムが
8608 umask なり、デフォルトの ACL なりを適用する。
8609 結果はより厳しいファイルモードになるかもしれない。 @xref{File permissions}.
8611 @item --no-preserve=@var{attribute_list}
8612 @cindex file information, preserving
8613 指定された属性を維持しない。@var{attribute_list} の書式は、@option{--preserve}
8618 @cindex parent directories and @command{cp}
8619 コピー先の各ファイル名を生成する際、出力先に指定されたディレクトリの末尾にスラッシュを付け、
8620 その後ろにコピー元として指定されたファイル名を付け足すことによってそれを行う。
8621 @command{cp} に渡す最後の引数は、実在するディレクトリの名前でなければならない。
8625 cp --parents a/b/c existing_dir
8629 ファイル @file{a/b/c} を上記のコマンドでコピーすると、ファイル
8630 @file{existing_dir/a/b/c} が出来る。
8631 途中のディレクトリが存在していなければ、それも作成される。
8638 @opindex --recursive
8639 @cindex directories, copying recursively
8640 @cindex copying directories recursively
8641 @cindex recursively copying directories
8642 @cindex non-directories, copying as special files
8643 ディレクトリを再帰的にコピーする。デフォルトでは、@option{--link} (@option{-l})
8644 オプションが同時に使われていないかぎり、コピー元にあるシンボリックリンクの参照をたどることをしない。
8645 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
8646 (@option{-L}), @option{--no-dereference} (@option{-P}), @option{-H}
8647 などのオプションを参照。スペシャルファイルについては、
8648 コピーする際に、コピー元ファイルと同じファイル型のコピー先ファイルを作成する。
8649 @option{--copy-contents} を参照。シンボリックリンクやスペシャルファイルのコピーに
8650 @option{-r} オプションを使用するのは、どのシステムでも通用することではない。
8651 GNU 以外のシステムの中には、歴史的な理由から @option{-r} が、@option{-L} と
8652 @option{--copy-contents} を同時に指定するのと等価になっているものもあるからだ。
8653 また、シンボリックリンクをコピーするのに @option{-R} を使用するのも、@option{-P}
8654 も併せて指定しないかぎり、どのシステムでも通用することではない。
8655 デフォルトでシンボリックリンクの参照先をたどる実装が、POSIX で認められているからである。
8657 @item --reflink[=@var{when}]
8658 @opindex --reflink[=@var{when}]
8661 @cindex copy on write
8662 ファイルシステムがサポートしていれば、軽便コピー、すなわち、
8663 書き込み時コピー(copy-on-write (COW) copy) を行う。
8664 留意すべきは、これが成功した場合、コピー元とコピー先のファイルは、
8665 どちらかに対して変更が加えられるまで、ディスクの同じデータブロックを共有しているということである。
8666 従って、ディスク I/O エラーが起きて、片方のファイルのデータブロックが損傷を受ければ、
8669 @var{when} の値には、次のうちの一つが使える。
8673 デフォルトの動作である。copy-on-write がサポートされていない場合は、
8674 各ファイルについて失敗した旨を報告し、失敗を示すステータスで終了する。
8677 copy-on-write 操作がサポートされていない場合は、copy-on-write
8681 このオプションは、@option{--link}, @option{--symbolic-link}
8682 @option{--attributes-only}
8683 オプションによって無効になるので、データをコピーする際の @command{cp}
8684 のデフォルト動作の設定に使用することができる。
8685 たとえば、次のエイリアスを使うと、@command{cp} は、ファイルシステムがサポートする範囲で、
8686 ディスクスペースの使用を最少に留めるようになる。
8689 alias cp='cp --reflink=auto --sparse=always'
8692 @item --remove-destination
8693 @opindex --remove-destination
8694 コピー先ファイルがすでに存在する場合、その各々についてオープンを試みる前に、削除する
8695 (上述の @option{-f} と比較すること)。
8697 @item --sparse=@var{when}
8698 @opindex --sparse=@var{when}
8699 @cindex sparse files, copying
8700 @cindex holes, copying files with
8701 @findex read @r{system call, and holes}
8702 穴空きファイル (@dfn{sparse file}) とは、穴 (@dfn{holes}) を含むファイルである。
8703 穴というのは、物理的なディスクブロック上には存在しないゼロバイトの連続で、
8704 @samp{read} システムコールがそれを読む込むとき、ゼロの連続として扱うものである。
8705 バイナリ・ファイルには、連続するゼロバイトがたくさん含まれていることが多いので、
8706 この仕組みは、ディスクスペースを大いに節約してくれるし、動作速度の向上をもたらしてもくれる。
8707 デフォルトで @command{cp} は、かなり大雑把な発見的手法を使って、
8708 コピー元ファイルにある穴を検出し、対応するコピー先ファイルも穴空きファイルにする。
8709 なお、穴空きファイルにできるのは、通常ファイルだけである。
8711 @var{when} の値には、次のうちの一つが使える。
8715 デフォルトの動作である。すなわち、コピー元が穴空きファイルなら、
8716 コピー先も穴空きファイルにしようとする。
8717 ただし、コピー先ファイルがすでに存在していても、通常ファイル以外を指している場合には、
8721 たとえ、コピー元ファイルが穴空きファイルに見えなくても、十分に長いゼロバイトの連続があれば、
8722 その各々に対応する穴をコピー先ファイルに設けようとする。この動作が役に立つのは、
8723 コピー元ファイルが、穴空きファイルをサポートしていないファイルシステムにあるのに対し
8724 (たとえば、SGI IRIX 5.3 以前の @samp{efs} ファイルシステム)、
8725 コピー先ファイルは穴空きファイルをしっかりサポートするタイプのファイルシステムにある場合である。
8726 穴を作ることができるのは、通常ファイルだけなので、コピー先が通常ファイル以外なら、
8727 @command{cp} がそのファイルを穴空きにしようと試みることもない。
8731 これは、@command{mkswap} コマンドで使用するファイルを作成するときに役に立つ。
8732 そうしたファイルには、穴があってはならないからである。
8735 @optStripTrailingSlashes
8738 @itemx --symbolic-link
8740 @opindex --symbolic-link
8741 @cindex symbolic links, copying with
8742 コピー元がディレクトリ以外の場合、コピーする代わりに、シンボリックリンクを作成する。
8743 出力先ファイルをカレント・ディレクトリに作成する場合を除いて、
8744 コピー元ファイルの名前は、すべて (@samp{/} で始まる) 絶対パス表記でなければならない。
8745 シンボリックリンクをサポートしていないシステムでは、このオプションはエラーメッセージを出すだけである。
8751 @optNoTargetDirectory
8757 @cindex newer files, copying only
8758 ディレクトリ以外のものをコピーする際、それがコピー先にも存在し、
8759 しかもその更新日時 (modification time) がコピー元と同じか、より新しい場合、
8760 コピーを行わない。コピー元からコピー先へタイムスタンプを引き継がせている場合には、
8761 コピー元のタイムスタンプの精度を、コピー先のファイルシステム、
8762 及びタイプスタンプの更新に使われるシステムコールの精度に落とした上で、比較を行う。
8763 これは、同じコピー元とコピー先のファイルに対して @samp{cp -pu}
8764 コマンドを何回か実行する場合に、余計なコピー作業が起きるのを避けるためである。
8765 @option{--preserve=links} が一緒に指定されている場合は
8766 (たとえば、@samp{cp -au} だとそうなる)、そちらが優先されることになる。
8767 その結果、コピー元でファイルが処理される順番によっては、
8768 コピー元のハードリンクを反映させるために、コピー先のより新しいファイルが置き換えられることもある。
8774 コピーを行う前に、コピーするファイル名を表示する。
8777 @itemx --one-file-system
8779 @opindex --one-file-system
8780 @cindex file systems, omitting copying to different
8781 あるファイルシステムでコピーを始めた場合、別のファイルシステムにあるサブディレクトリをスキップする。
8782 ただし、マウントポイントのディレクトリはコピーされる。
8786 @itemx --context[=@var{context}]
8789 @cindex SELinux, setting/restoring security context
8790 @cindex security context
8791 @var{context} が指定されていない場合は、出力するファイルの SELinux
8792 セキュリティ・コンテキストを、出力先におけるシステムのデフォルトのタイプに合わせて調整する。
8793 これは、@command{restorecon} コマンドの動作に似ている。
8794 このオプションの長い形式を使って、コンテキストを明示的に指定した場合、
8795 そのコンテキストが設定されるのは、新しく作成されるファイルに対してのみである。
8796 コンテキストを指定した場合に、SELinux と SMACK のどちらも無効になっていると、
8799 @optContext このオプションと
8800 @option{--preserve=context} オプションは、どちらか一方しか指定できない。
8801 また、このオプションは @option{--preserve=all} や @option{-a} オプションに優先する。
8809 @section @command{dd}: ファイルの変換とコピー
8812 @cindex converting while copying a file
8814 @command{dd} はファイルをコピーする (デフォルトでは、標準入力から標準出力へコピーする)。
8815 その際、入出力のブロックサイズを変更することができる。
8816 また、データ形式の変換を行いつつコピーすることもできる。
8821 dd [@var{operand}]@dots{}
8825 指定できるオプションは、@option{--help} と @option{--version} だけである。
8826 @xref{Common options}. @command{dd} では、以下のオペランドが使える。
8827 オペランドの書式の元になったのは、OS/360 の JCL (Job Control Language) の
8828 DD 文 (Data Definition statement) である。
8834 標準入力の代わりに、@var{file} から読み込む。
8838 標準出力の代わりに、@var{file} に書き出す。@samp{conv=notrunc}
8839 が指定されていない場合、@command{dd} は、出力を開始する前に、@var{file} を
8840 0 バイトに (あるいは、@samp{seek=} で指定されたサイズに) 短縮する。
8842 @item ibs=@var{bytes}
8844 @cindex block size of input
8845 @cindex input block size
8846 入力ブロックサイズを @var{bytes} にする。@command{dd} が 1 ブロック @var{bytes}
8847 バイトで読み込みを行うようになる。デフォルトは 512 バイトである。
8849 @item obs=@var{bytes}
8851 @cindex block size of output
8852 @cindex output block size
8853 出力ブロックサイズを @var{bytes} にする。@command{dd} が 1 ブロック @var{bytes}
8854 バイトで書き出しを行うようになる。デフォルトは 512 バイトである。
8856 @item bs=@var{bytes}
8859 入力、出力、両方のブロックサイズを @var{bytes} にする。@command{dd} が
8860 1 ブロック @var{bytes} バイトで読み書きを行うようになり、@samp{ibs} や @samp{obs}
8861 の指定は、あっても無効になる。なお、データ変換を行う @option{conv}
8862 オプションが指定されていない場合は、入力は、それがブロックサイズより小さくても、
8863 読み込まれるやいなや、出力にコピーされることになる。
8865 @item cbs=@var{bytes}
8867 @cindex block size of conversion
8868 @cindex conversion block size
8869 @cindex fixed-length records, converting to variable-length
8870 @cindex variable-length records, converting to fixed-length
8871 変換ブロックサイズを @var{bytes} にする。
8872 可変長のレコードを固定長のレコードに変換するときや
8873 (@option{conv=block})、その逆を行うとき
8874 (@option{conv=unblock})、固定長レコードの長さとして @var{bytes} の値を使用する。
8878 入力ファイルで @samp{ibs} バイトのブロックを @var{n} 個読み飛ばしてから、
8879 コピーを行う。@samp{iflag=skip_bytes} が指定されている場合は、@var{n}
8880 はブロック数ではなく、バイト数と見なされる。
8884 出力ファイルで @samp{obs} バイトのブロックを @var{n} 個スキップしてから、
8885 コピーを行う。@samp{oflag=seek_bytes} が指定されている場合は、 @var{n}
8886 はブロック数ではなく、バイト数と見なされる。
8890 入力ファイルの末尾まで全部ではなく、@samp{ibs} バイトのブロックを @var{n}
8891 個だけ入力ファイルからコピーする。@samp{iflag=count_bytes}
8892 が指定されている場合は、@var{n} はブロック数ではなく、バイト数と見なされる。
8893 なお、次のことに注意してほしい。パイプから読み込んでいる場合などに時おり起きることだが、
8894 入力からの読み込みがブロックの大きさに足りないことがある。そうした場合に
8895 @samp{iflag=fullblock} が指定してあると、@samp{count=}
8896 は、一杯になるまで読み込むブロックの個数を意味するようになる。
8897 入力から読み込みを実行する回数という POSIX で規定されている伝統的な動作には、
8900 @item status=@var{level}
8902 通常では @samp{INFO} シグナルを受け取った時点や、@command{dd} が終了したときに、
8904 @var{level} の指定によって、表示する情報の量を調節することができる。
8905 指定された @var{level} のうち、最後のものが優先される。
8910 @opindex none @r{dd status=}
8911 情報メッセージや警告メッセージを標準エラーに全く表示しない。
8915 @opindex noxfer @r{dd status=}
8916 最終的な転送速度や転送量の統計を表示しない。通常は、そうした情報がステータス表示の最後の行になる。
8919 @opindex progress @r{dd status=}
8920 各入力ブロックを処理するとき、転送速度と転送量の統計を標準エラーに表示する。
8921 転送量の統計は 1 行に表示され、最も頻繁な場合、1 秒ごとに出力されるが、
8922 I/O 待ちが起きると、更新が遅れることがある。
8926 @item conv=@var{conversion}[,@var{conversion}]@dots{}
8928 @var{conversion} 引数 (複数可) で指定されたようにファイルを変換する。
8929 (コンマの前後にスペースを入れてはいけない。)
8931 @var{conversion} には次のものが指定できる:
8936 @opindex ascii@r{, converting to}
8937 POSIX が規定している変換テーブルを使って、EBCDIC を ASCII に変換する。
8938 変換テーブル中の 256 バイトのすべてについて、1 対 1 の変換が行われる。
8939 このオプションを指定すると、@samp{conv=unblock} も指定されることになる。
8940 入力はまず ASCII に変換され、その後で末尾のスペースが除去される。
8943 @opindex ebcdic@r{, converting to}
8944 ASCII を EBCDIC に変換する。これは @samp{ascii} 変換の逆の動作である。
8945 このオプションを指定すると、@samp{conv=block} も指定されることになる。
8946 末尾にスペースが追加されてから、EBCDIC に変換される。
8949 @opindex alternate ebcdic@r{, converting to}
8950 この指定の動作は @samp{conv=ebcdic} に似ている。
8951 ただし、POSIX が規定しているもう一つの変換テーブルを使って、変換する点が違う。
8952 こちらは 1 対 1 の変換ではないが、@samp{~}, @samp{[}, @samp{]}
8953 について、よく使われる伝統的な慣行を反映している。
8955 @samp{ascii}, @samp{ebcdic}, @samp{ibm} は、どれか一つしか指定できない。
8956 こうしたオプションの一つを使う場合は、@samp{cbs=} も指定すべきである。
8959 @opindex block @r{(space-padding)}
8960 入力 1 行あたり、@samp{cbs} バイト分を出力する。
8961 入力中の改行はスペースに置き換え、@samp{cbs} バイトに足りない分はスペースで埋める。
8965 @samp{cbs} バイトの大きさからなる各入力ブロックに対して、末尾にスペースがあれば、
8968 @samp{block} と @samp{unblock} は、どちらか一方しか指定できない。
8971 @opindex lcase@r{, converting to}
8975 @opindex ucase@r{, converting to}
8978 @samp{lcase} と @samp{ucase} は、どちらか一方しか指定できない。
8982 出力ブロックが NUL のみからなっているとき、それを書き出さずに、seek を試みる。
8983 穴空きファイル (sparse file) をサポートしているシステムでは、
8984 この動作は、出力ファイルを書き出しているときに、穴空きの出力を作成することになる。
8985 このオプションを @samp{conv=notrunc} や @samp{oflag=append}
8986 と一緒に使う際は、気をつけなければならない。@samp{conv=notrunc} が付いていると、
8987 入力中の NUL ブロックに対応する位置にある、出力ファイル中の存在するデータは、
8988 そのまま保持されることになる。@samp{oflag=append} を付けた場合は、
8989 seek は行っても効果がない。なお、@samp{conv=sparse} では、
8990 出力先がファイルではなく、デバイスの場合も、入力中の NUL ブロックはやはりコピーされない。
8991 そんなわけで、このオプションが最も役に立つのは、仮想デバイスや、前もって
8992 0 で初期化したデバイスに対してである。
8995 @opindex swab @r{(byte-swapping)}
8996 @cindex byte-swapping
8997 入力された全バイトを 2 個づつ組にして、前後を入れ替える。GNU の
8998 @command{dd} は、他の @command{dd} とは違って、読み込むバイトが奇数個でも動作する。
8999 最後のバイトは (入れ替えるものがないので) そのままコピーするのである。
9002 @opindex sync @r{(padding with ASCII NULs)}
9003 すべての入力ブロックに対して @samp{ibs} の大きさになるまで、末尾をゼロバイトで埋める。
9004 @samp{block} や @samp{unblock} と一緒に使用すると、ゼロバイトの代わりにスペースで埋める。
9008 以下の @var{conversion} は、実のところファイルの扱いに関するフラグなので、内的な処理には影響を及ぼさない。
9013 @cindex creating output file, requiring
9014 出力ファイルがすでに存在する場合は、実行に失敗する。
9015 言い換えれば、@command{dd} が出力ファイルを自分で作成しなければならないということである。
9019 @cindex creating output file, avoiding
9020 出力ファイルを作成しない。言い換えれば、出力ファイルは前もって存在していなければならないということだ。
9022 @samp{excl} と @samp{nocreat} は、どちらか一方しか指定できない。
9026 @cindex truncating output file, avoiding
9027 出力ファイルに対して短縮操作をしない (訳注: @samp{of=@var{file}} の項を参照)。
9031 @cindex read errors, ignoring
9032 読み込みエラーがあっても、作業を続行する。
9036 @cindex synchronized data writes, before finishing
9037 コマンドを終了する直前に、出力データを同期させる。
9038 すなわち、出力データをディスクに実際に書き込む。
9042 @cindex synchronized data and metadata writes, before finishing
9043 コマンドを終了する直前に、出力データだけでなく、メタデータも同期させる。
9044 すなわち、出力データとメタデータをディスクに実際に書き込む。
9048 @item iflag=@var{flag}[,@var{flag}]@dots{}
9050 引数 @var{flag} によって指定されたフラグを使って、入力ファイルにアクセスする。
9051 (コンマの前後にスペースを入れてはいけない。)
9053 @item oflag=@var{flag}[,@var{flag}]@dots{}
9055 引数 @var{flag} によって指定されたフラグを使って、出力ファイルにアクセスする。
9056 (コンマの前後にスペースを入れてはいけない。)
9058 フラグには次のものがある。どのオペレーティング・システムでも、
9065 @cindex appending to the output file
9066 追加モードで書き込む。従って、何か別のプロセスが問題のファイルに書き出している場合でも、
9067 @command{dd} の書き込みは、書き込むたびに、そのファイルの今現在の内容に追加されることになる。
9068 このフラグは出力に対してしか意味がない。なお、このフラグを
9069 @samp{of=@var{file}} オペランドと組み合わせて使うのなら、
9070 @samp{conv=notrunc} も一緒に指定した方がよい。
9071 さもないと、出力ファイルは、追加書き込みが始まる前に、短縮操作を受けることになる。
9075 @cindex concurrent I/O
9076 データに対してコンカレント I/O (CIO) モードを使用する。
9077 このモードでは、ダイレクト I/O を行いつつ、同じファイルに対するすべての
9078 I/O は順番に行わなければならないという POSIX の要件は無視する。
9079 一つのファイルを CIO モードと標準的な方法の両方で同時にオープンすることはできない。
9084 データに対してダイレクト I/O を使用し、バッファ・キャッシュを介さないようにする。
9085 カーネルが read バッファや write バッファのサイズに制限をかけていることがあるのに注意していただきたい。
9086 たとえば、出力先のファイルシステムが ext4 で、カーネルが linux
9087 ベースの場合、出力バッファのサイズが 512 の倍数でなければ、@samp{oflag=direct}
9088 を指定すると、@code{EINVAL} で書き込みに失敗することになる。
9092 @cindex directory I/O
9094 ファイルがディレクトリでなければ、実行に失敗する。
9095 ほとんどのオペレーティング・システムがディレクトリに対する I/O
9096 を許していない。従って、このフラグが役に立つ機会はめったにない。
9100 @cindex synchronized data reads
9101 データに対して同期 I/O を使用する。出力ファイルについては、
9102 このフラグは、各書き込みごとに出力データをディスクに実際に書き込ませる。
9103 入力ファイルについてこのフラグが意味を持つかもしれないのは、
9104 読み込んでいるのがリモートのファイルであり、
9105 それが何か他のプロセスによって同期的に書き込まれているときである。
9106 メタデータ (たとえば、最終アクセス日時や最終更新日時) は、必ずしも同期されない。
9110 @cindex synchronized data and metadata I/O
9111 データとメタデータに対して同期された I/O を使用する。
9115 @cindex discarding file cache
9116 システムの持つファイルのデータ・キャッシュを廃棄するよう要求する。
9117 count=0 の場合は、ファイルのキャッシュされたデータ全体を指定することになる。
9118 それ以外の場合は、ファイルのキャッシュのうち、処理の対象になった部分だけが捨てられる。
9119 また、count=0 のとき、キャッシュの廃棄に失敗すると、
9120 その旨メッセージが表示され、終了ステータスに反映する。
9123 ストレージへの書き込みがまだ終了していないデータが、キャッシュから捨てられることはない。
9124 そこで、下記の用例で ``sync'' オプションを使っていることに注目していただきたい。
9125 @samp{nocache} フラグの効率を最大にするために使用しているのである。
9130 # ファイル全体のキャッシュを捨てるように指示する。
9131 dd if=ifile iflag=nocache count=0
9133 # ファイル全体のキャッシュを確実に捨てる。
9134 dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0
9136 # ファイル中の一部分のキャッシュを捨てる。
9137 dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null
9139 # read-ahead キャッシュのみを使って、データを転送する。
9140 # @samp{direct} フラグの項も参照すること。
9141 dd if=ifile of=ofile iflag=nocache oflag=nocache,sync
9146 @cindex nonblocking I/O
9152 ファイルのアクセス日時を更新しない。古いシステムの中には、
9153 エラーや警告も出さずに、このフラグを無視するものがある。
9154 そこで、このフラグを使用する前に、有効かどうか、お手元のファイルで試してみるとよい。
9158 @cindex controlling terminal
9159 入力 (または、出力) ファイルを @command{dd} の制御端末にしない。
9160 このフラグは、そのファイルが端末でなければ、効果がない。
9161 このフラグが全く効果を持たないホストが、たくさんある
9162 (たとえば、GNU/Linux ホストがそうである)。
9166 @cindex symbolic links, following
9172 ファイルに複数のハードリンクがあれば、実行に失敗する。
9177 バイナリ I/O を使用する。このフラグは、バイナリ I/O とテキスト I/O
9178 を区別する非標準的なプラットフォームでしか効果がない。
9183 テキスト I/O を使用する。このフラグが標準的なプラットフォームで効果がないのは、
9184 @samp{binary} と同様である。
9188 各ブロックが一杯になるまで入力から読み込む。@code{read} システムコールは、
9189 入力がブロックの分量に足りない場合、早めに戻ってくることがある。
9190 そうした場合に、@code{read} の呼び出しを繰り返して、ブロックの残りを埋めようとする。
9191 このフラグは、@code{iflag} でのみ使用できる。
9192 このフラグが役に立つのは、たとえばパイプと組み合わせて使うときである。
9193 パイプとの組み合わせでは、入力からの読み込みがブロックの大きさに足りないことがあるからだ。
9194 そうした場合に、@samp{count=} の引数が、読み込み動作の回数ではなく、
9195 読み込むブロック数だと確実に解釈されるようにするには、このフラグが必要になる。
9198 @opindex count_bytes
9199 @samp{count=} オペランドをブロック数ではなく、バイト数の指定と見なす。
9200 そうすることで、I/O ブロックサイズの倍数ではない長さが、指定できるようになるわけだ。
9201 このフラグは @code{iflag} でしか使用できない。
9205 @samp{skip=} オペランドをブロック数ではなく、バイト数の指定と見なす。
9206 そうすることで、I/O ブロックサイズの倍数ではないオフセットが、指定できるようになるわけだ。
9207 このフラグは @code{iflag} でしか使用できない。
9211 @samp{seek=} オペランドをブロック数ではなく、バイト数の指定と見なす。
9212 そうすることで、I/O ブロックサイズの倍数ではないオフセットが、指摘できるようになるわけだ。
9213 このフラグは @code{oflag} でしか使用できない。
9217 以上のフラグは、すべてのシステムでサポートされているわけではなく、
9218 サポートされていないシステムで使用しようとすると、@samp{dd} に拒否される。
9219 標準入力から読み込んでいる場合や、標準出力に書き出している場合は、
9220 @samp{nofollow} や @samp{noctty} フラグは指定するべきではない。
9221 また、他のフラグ (たとえば @samp{nonblock}) は、
9222 対象となるファイルのファイル・ディスクリプタに対する他のプロセスの動作に、@command{dd}
9223 が終了した後までも、影響を及ぼすかもしれない。
9227 @cindex multipliers after numbers
9228 上記中の数値を表す文字列 (@var{n} や @var{bytes}) には、乗数を示す文字を後ろに付けることができる。
9229 すなわち、@samp{b}=512, @samp{c}=1, @samp{w}=2, @samp{x@var{m}}=@var{m}
9230 といった文字である (訳注: 最後のものは、10xM という表記は 10M と書くのと同じだということ)。
9231 あるいは、@samp{k}=1024 のような、ブロックサイズに付ける標準の接尾辞の一つを続けてもよい
9232 (@pxref{Block size})。
9234 @samp{bs=}, @samp{ibs=}, @samp{obs=}, "@samp{cbs=} を使って指定するブロックサイズは、
9235 大きすぎない方がよい。数メガバイトを越える値は、一般的に言って無駄だし、
9236 (ギガバイト @dots{} エクサバイトを使ったときのように) 全く逆効果だったり、
9239 データのオフセット位置やサイズが I/O ブロックサイズの倍数ではない場合に、
9240 そうしたデータを処理するには、@samp{skip_bytes}, @samp{seek_bytes},
9241 @samp{count_bytes} といったフラグを使用すればよい。あるいは、@command{dd}
9242 を別々に呼び出すという伝統的な手法を使用することもできる。
9243 一例を挙げると、以下のシェルコマンドは、1 ブロック を 512 KiB
9244 にして、ディスクとテープの間でデータをコピーしている。
9245 ただし、ディスクの先頭にある 4 KiB のラベルについては、保存も復元も行っていない。
9248 disk=/dev/rdsk/c0t1d0s2
9251 # ラベル以外のすべてをディスクからテープへコピーする。
9252 (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
9254 # テープからディスクへ書き戻す。ただし、ディスクのラベルには手を
9256 (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
9260 @cindex disks, failing
9261 壊れかけたディスクについては、様々なおまけ機能が付いたツールが他にあり、
9262 そうしたものを使えば、ディスクが本当にダメになってしまう前に、できるだけ多くのデータを救済することが容易になる。
9263 たとえば、@uref{http://www.gnu.org/software/ddrescue/, GNU @command{ddrescue}
9265 しかしながら、場合によっては、そうしたツールが使えないこともあるし、
9266 管理者にとって @command{dd} を操作する方が安心できるということもある。
9267 そうした場合は、簡単なレスキュー方法として、@command{dd} を以下の例で示すように実行すればよい。
9268 @samp{conv=noerror,sync} オプションを使っているのは、リードエラーがあっても続行し、
9269 読み込めなかった部分 (bad read) を NUL で埋めるためである。
9270 また、@samp{iflag=fullblock} は、ショートリードに対する用心だ
9271 (そうしたことが磁気ディスクを使っているデバイスで起きたことは、これまでにないけれど)。
9274 # 壊れかけたディスクのパーティションから (マウントしていない
9275 # パーティションだ!) データを救済する。
9276 dd conv=noerror,sync iflag=fullblock </dev/sda1 > /mnt/rescue.img
9279 実行中の @command{dd} のプロセスに @samp{INFO} シグナルを送ると
9280 (それが使えないシステムでは、@samp{USR1} シグナルを送る)、
9281 @command{dd} は入出力の統計情報を標準エラーに書き出し、それからコピー作業を続行する。
9282 以下の例では、@command{dd} をバックグラウンドで実行し
9283 5GB のデータのコピーを行っている。@command{kill} コマンドが実行されると、
9284 @command{dd} は実行途中の入出力統計を表示する。
9285 そして、正常に作業を完了するか、@code{SIGINT} シグナルによって中断されたとき、
9289 # シェルが子プロセスである dd をうっかり終了させてしまうことが
9290 # 絶対にないように、USR1 シグナルを「無視する」にしておく。
9291 # なお、SIGINFO が利用できる場合は、これをやる必要はない。
9294 # シグナルを受けることが引き鉄になって、ショートリードが起きるかも
9295 # しれない。それを避けるために、dd を iflag=fullblock で実行する。
9296 dd iflag=fullblock if=/dev/zero of=/dev/null count=5000000 bs=1000 & pid=$!
9299 while kill -s USR1 $pid 2>/dev/null; do sleep 1; done
9302 上記のスクリプトは、次のようなフォーマットで出力することになる。
9305 3441325+0 records in
9306 3441325+0 records out
9307 3441325000 bytes (3.4 GB, 3.2 GiB) copied, 1.00036 s, 3.4 GB/s
9308 5000000+0 records in
9309 5000000+0 records out
9310 5000000000 bytes (5.0 GB, 4.7 GiB) copied, 1.44433 s, 3.5 GB/s
9313 @samp{status=progress} オプションを付けると、転送統計を表す上記の最後の行が定期的に更新される。
9315 @vindex POSIXLY_CORRECT
9316 @samp{INFO} シグナルが存在しないシステムでは、 環境変数 @env{POSIXLY_CORRECT}
9317 が設定されていないかぎり、@command{dd} は @samp{INFO} の代わりに @samp{USR1} に反応する。
9322 @node install invocation
9323 @section @command{install}: ファイルをコピーし属性をセットする
9326 @cindex copying files and setting attributes
9328 @command{install} はファイルをコピーするとき、ファイルのモードビット
9329 (訳注: 一般にアクセス権とか、許可属性と言われるもの) をセットし、可能ならば、
9335 install [@var{option}]@dots{} [-T] @var{source} @var{dest}
9336 install [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9337 install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9338 install [@var{option}]@dots{} -d @var{directory}@dots{}
9343 ファイル名を二つ指定すると、@command{install} は最初のファイルを
9347 @option{--target-directory} (@option{-t}) オプションを指定した場合や、
9348 あるいはそれを指定しないでも、最後のファイルがディレクトリであり、しかも
9349 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
9350 @command{install} は各 @var{source} ファイルを指定されたディレクトリに、@var{source}
9354 @option{--directory} (@option{-d}) を指定すると、@command{install} は各
9355 @var{directory} を作成する。
9356 このとき、親ディレクトリが存在しなければ、それも作成する。
9357 作成される親ディレクトリのモードは、@option{-m} オプションの指定や現在の umask
9358 にかかわりなく、@samp{u=rwx,go=rx} (755) になる。
9359 親ディレクトリの set-user-ID ビットや set-group-ID ビットの継承については、
9360 次の節を参照していただきたい。@xref{Directory Setuid and Setgid}.
9363 @cindex Makefiles, installing programs in
9364 @command{install} は @command{cp} に似ているが、コピー先ファイルの属性を自由に設定できる点が違う。
9365 @command{install} は通常、Makefile の中で、プログラムを目標のディレクトリにコピーするために使用される。
9366 @command{install} では、ファイルをそれ自身にコピーすることはできない。
9368 @cindex extended attributes, xattr
9369 @command{install} が拡張属性 (xattr) を保存することはない。
9371 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9381 インストール元とインストール先の対応するファイルを比較し、
9382 インストール先にあるファイルがインストール元と内容が同じで、
9383 しかも、所有者、グループ、許可属性、場合によっては SELinux
9384 コンテキストについて、そのどれもが指定されているものと同一であるときは、
9385 インストール先ファイルを全く変更しない。
9386 このオプションは、@option{--user}, @option{--group}, @option{--mode}
9387 オプションと併せて使うとき、最も役に立つ。そうしない場合、
9388 @command{install} コマンドが、(たとえば、ディレクトリに
9389 setgid が付いていることや、POSIX のデフォルトの ACL を顧慮しないせいで)、
9390 インストールされるファイルがデフォルトで持つはずの属性を不正確に決めてしまうかもしれないのだ。
9391 そんなことがあると、無駄なコピーが行われたり、
9392 属性のデフォルト値が正しくないものに設定し直されたりといった不都合が生じかねない。
9396 無視する。Unix の古いバージョンの @command{install} との互換性のために
9401 @var{dest} の指定中に存在していない親ディレクトリがあれば、
9402 それを作成してから、@var{source} を @var{dest} にコピーする。
9403 @option{-D} とともに明示的に @option{--target-directory=@var{dir}}
9404 を指定した場合も、やはり出力先のディレクトリ階層が確実に存在するようになる。
9409 @opindex --directory
9410 @cindex directories, creating with given attributes
9411 @cindex parent directories, creating missing
9412 @cindex leading directories, creating missing
9413 まず、存在していない親ディレクトリがあれば作成し、それにデフォルトの属性を与える。
9414 それから、指定された各ディレクトリを作成し、所有者、グループ、許可属性を、
9415 コマンドラインで指定されたとおりに、またはデフォルトの値に設定する。
9417 @item -g @var{group}
9418 @itemx --group=@var{group}
9421 @cindex group ownership of installed files, setting
9422 インストールするファイルやディレクトリの所有グループを @var{group} にする。
9423 デフォルトでは、プロセスの現在のグループになる。
9424 @var{group} は、グループ名でも、グループの ID 番号でもよい。
9427 @itemx --mode=@var{mode}
9430 @cindex permissions of installed files, setting
9431 インストールするファイルやディレクトリのモードビットを @var{mode} にする。
9432 @var{mode} の指定は、@samp{a=} (誰にもアクセスを許さない) を基点として行い、
9433 8 進数でも、@command{chmod} で使うようなシンボリックモードでもよい
9434 (@pxref{File permissions})。デフォルトのモードは、
9435 @samp{u=rwx,go=rx,a-s} である。すなわち、所有者には読み、書き、実行を許可し、
9436 グループとその他のユーザには読みと実行のみを許可、
9437 set-user-ID と set-group-ID は無効にする。このデフォルトは、@samp{755}
9438 と全く同じではない。なぜなら、デフォルトの方は、ディレクトリについて
9439 set-user-ID や set-group-ID を引き継がず、無効にしているからである。
9440 @xref{Directory Setuid and Setgid}.
9442 @item -o @var{owner}
9443 @itemx --owner=@var{owner}
9446 @cindex ownership of installed files, setting
9447 @cindex appropriate privileges
9448 @vindex root @r{as default owner}
9449 @command{install} が適切な権限を持っている場合に
9450 (つまり、root 権限で実行されている場合に)、インストールするファイルやディレクトリの所有者を
9451 @var{owner} にする。デフォルトでは @code{root} になる。@var{owner}
9452 の指定は、ユーザ名でも、ユーザの ID 番号でもよい。
9454 @item --preserve-context
9455 @opindex --preserve-context
9457 @cindex security context
9458 ファイルやディレクトリの SElinux セキュリティ・コンテキストを引き継ぐ。
9459 ファイルやディレクトリすべてのセキュリティ・コンテキストを引き継げなかった場合は、
9460 終了ステータスが 1 になる。SElinux が無効になっているときは、警告を出し、
9464 @itemx --preserve-timestamps
9466 @opindex --preserve-timestamps
9467 @cindex timestamps of installed files, preserving
9468 インストール先各ファイルの最終アクセス日時 (last access time) と最終更新日時
9469 (last modification time) を、対応するインストール元各ファイルのそれぞれの日時に合わせる。
9470 このオプションを付けずにインストールした場合、各ファイルの最終アクセス日時と最終更新日時は、
9471 両方ともインストールした日時になる。インストール先ファイルの最終更新日時を、
9472 最後にインストールした日付ではなく、最後にビルドした日付の記録として使用したい場合、
9479 @cindex symbol table information, stripping
9480 @cindex stripping symbol table information
9481 インストールされるバイナリの実行ファイルからシンボル・テーブルを取り除く。
9483 @item --strip-program=@var{program}
9484 @opindex --strip-program
9485 @cindex symbol table information, stripping, program
9486 バイナリからシンボル・テーブルを取り除くために使用するプログラムを指定する。
9490 @optTargetDirectory @option{-D} オプションも指定すると、
9493 @optNoTargetDirectory
9499 コピーを行う前に、コピーするファイル名を表示する。
9501 @optContext このオプションと @option{--preserve-context}
9502 オプションは、どちらか一方しか指定できない。
9503 (@var{context} を省略できるのは、coreutils-8.22 から)
9512 @section @command{mv}: ファイルの移動 (名前の変更) を行う
9516 @command{mv} は、ファイル (やディレクトリ) の移動、または名前の変更を行う。
9521 mv [@var{option}]@dots{} [-T] @var{source} @var{dest}
9522 mv [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9523 mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9528 ファイル名を二つ指定すると、@command{mv} は最初のファイルを 2 番目のファイルに移動する。
9531 @option{--target-directory} (@option{-t}) オプションを指定した場合や、
9532 あるいはそれを指定しないでも、最後のファイルがディレクトリであり、しかも
9533 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
9534 @command{mv} は各 @var{source} ファイルを指定されたディレクトリに、@var{source}
9538 @command{mv} はいかなるタイプのファイルでも、
9539 一つのファイルシステムから別のファイルシステムへ移動させることができる。
9540 fileutils パッケージのバージョン @code{4.0} 以前では、@command{mv}
9541 がファイルシステム間を移動させることができたのは、通常ファイルだけだった。
9542 それに対して、現在の @command{mv} では、
9543 たとえば、スペシャル・デバイスファイルを含むディレクトリ階層の全体を、
9544 あるパーティションから別のパーティションへ移動させることが可能になっている。
9545 @command{mv} は、まず @code{cp -a} が使用するのと同じコードを使って、
9546 指定されたディレクトリやファイルをコピーし、その後で (コピーに成功した場合は) コピー元を削除する。
9547 コピーに失敗した場合は、移動先のパーティションにすでにコピーした部分を消去することになる。
9548 仮に、あるパーティションから別のパーティションに、3 個のディレクトリをコピーしようとして、
9549 最初のディレクトリのコピーには成功したものの、2 番目のディレクトリのコピーに失敗したとしよう。
9550 その場合、最初のディレクトリは、移動先のパーティションに残るが、2 番目と
9551 3 番目のディレクトリは、元のパーティションに残ることになる。
9553 @cindex extended attributes, xattr
9554 @command{mv} は拡張属性 (xattr) を常にコピーしようとする。
9555 この拡張属性は、SELinux コンテキストや ACL、ケーパビリティであってもよい。
9556 拡張属性のコピーに失敗したときは、@samp{Operation not supported}
9559 @cindex prompting, and @command{mv}
9560 移動先ファイルがすでに存在し、それが普通なら書き込みのできないものである場合、
9561 標準入力が端末であり、@option{-f} や @option{--force} オプションが指定されていなければ、
9562 @command{mv} はプロンプトを出して、ファイルを置き換えるかどうか、ユーザに問い合わせる
9563 (ファイルの書き込み権限がなくても、自分がそのファイルの所有者であったり、
9564 そのディレクトリの書き込み権限を持っていたりすることは、ありえることである)。
9565 答えが肯定でなければ、そのファイルはスキップされる。
9567 警告: 名前変更の対象 (または、移動元) がディレクトリへのシンボリックリンクかもしれないときは、
9568 その名前を指定する際に、末尾にスラッシュを付けてはいけない。
9569 さもないと、@command{mv} の動作は内部で使っている rename
9570 システムコール次第なので、全く予想外のことが起きるかもしれないのだ。
9571 Linux ベースの最近のカーネルを使っているシステムでは、@code{errno=ENOTDIR}
9572 で実行に失敗する。しかし、他のシステムでは (少なくとも、FreeBSD 6.1 や
9573 Solaris 10 では)、シンボリックリンクではなく、リンクが参照しているディレクトリの名前の方を、
9574 警告なしで変更するのである。 @xref{Trailing slashes}.
9576 注意: @command{mv} が移動先にあるディレクトリを置き換えるのは、そのディレクトリが空のときだけである。
9577 移動先にある名前の衝突する (訳注: 要するに移動元ディレクトリと同名の) ディレクトリにファイルがあるときは、
9578 「ディレクトリが空ではない」旨のメッセージを出して、そのディレクトリをスキップする。
9580 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9590 @cindex prompts, omitting
9591 移動先のファイルを消去する前に、プロンプトを出してユーザに問い合わせることをしない。
9593 @option{-i}, @option{-f}, @option{-n} オプションを同時に指定している場合は、
9599 @itemx --interactive
9601 @opindex --interactive
9602 @cindex prompts, forcing
9603 ファイルの許可属性に関係なく、存在する各移動先ファイルを上書きするかどうかを、プロンプトを出してユーザに問い合わせる。
9604 答えが肯定でなければ、そのファイルをスキップする。@mvOptsIfn
9609 @opindex --no-clobber
9610 @cindex prompts, omitting
9611 存在するファイルを上書きしない。@mvOptsIfn
9612 このオプションは、@option{-b} や @option{--backup} オプションと一緒には使えない。
9618 @cindex newer files, moving only
9619 ディレクトリ以外のものを移動する際、それが移動先にも存在し、しかもその更新日時
9620 (modification time) が移動元と同じか、より新しい場合には、移動を行わない。
9621 移動が別のファイルシステムに向かって行われる場合、
9622 タイムスタンプの比較は、移動元のタイムスタンプを移動先のファイルシステム、
9623 及びタイムスタンプの更新に使われるシステムコールの精度に落とした上で行われる。
9624 これは、同じ移動元と移動先に対して、@samp{mv -u} コマンドが何回か実行される場合に、
9625 コピー作業が繰り返されるのを避けるためである。
9631 移動する前に各ファイルの名前を表示する。
9633 @optStripTrailingSlashes
9639 @optNoTargetDirectory
9645 @cindex SELinux, restoring security context
9646 @cindex security context
9647 このオプションは @command{restorecon} と同様の働きをする。
9648 すなわち、移動先における SELinux セキュリティ・コンテキストを、
9649 移動先のファイルやそこに作られる各ディレクトリに対する、システムのデフォルトのタイプによって調整する。
9657 @section @command{rm}: ファイルやディレクトリを削除する
9660 @cindex removing files or directories
9662 @command{rm} は、指定された各ファイルを削除する。
9663 デフォルトでは、ディレクトリの削除は行わない。
9668 rm [@var{option}]@dots{} [@var{file}]@dots{}
9671 @cindex prompting, and @command{rm}
9672 @option{-I} または @option{--interactive=once} オプションが指定されている場合に、
9673 削除するファイルが 4 個以上あるか、あるいは @option{-r}, @option{-R},
9674 @option{--recursive} などのオプションが指定されていると、@command{rm}
9675 はプロンプトを出して、作業を最後まで行うかどうか、ユーザに問い合わせる。
9676 答えが肯定でなければ、コマンド全体が中止になる。
9678 それ以外の場合でも、削除するファイルが書き込み不可で、標準入力が端末、しかも
9679 @option{--force} (@option{-f}) オプションが指定されていない場合や、@option{-i}
9680 または @option{--interactive=always} オプションが指定されている場合には、@command{rm}
9681 はプロンプトを出して、そのファイルを削除するかどうか、ユーザに問い合わせる。
9682 答えが肯定でなければ、そのファイルをスキップする。
9684 ファイル名の最後の構成要素 (訳注: ファイル名 (いわゆるパス名) の最後の / より後ろの部分)
9685 が @file{.} や @file{..} であるファイルを削除しようとしても、@command{rm}
9686 はそれを実行せず、ユーザに問い合わせることもない。これは POSIX が要求している動作である。
9688 警告: @command{rm} を使って、ファイルを削除しても、たいていの場合、そのファイルの内容を復元することが可能である。
9689 ファイルの内容が間違いなく復元不可能であるとの、より一層の保証が欲しいのなら、
9690 @command{shred} コマンドの使用をお考えになるとよい。
9692 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9700 @cindex directories, removing
9701 指定されたディレクトリが空ならば、それを削除する。
9707 指定したファイルが存在しなかったり、ユーザが削除の対象を一つも指定しなかったりしても、
9708 問題にしない (訳注: 言い換えれば、エラーにならない)。
9709 また、ユーザに対する問い合わせも全く行わない。
9710 @option{--interactive} (@option{-i}) オプションが前にあっても、それを無視する。
9714 プロンプトを出して、各ファイルを削除するかどうか、ユーザに問い合わせる。
9715 答えが肯定でなければ、そのファイルをスキップする。
9716 @option{--force} (@option{-f}) オプションが前にあっても、それを無視する。
9720 4 個以上のファイルが指定された場合や、再帰的な削除が要求された場合に、
9721 プロンプトを出して、コマンドを続行するかどうか、ユーザに一度だけ尋ねる。
9722 @option{--force} (@option{-f}) オプションが前にあっても、それを無視する。
9723 @option{--interactive=once} と同じである。
9725 @item --interactive [=@var{when}]
9726 @opindex --interactive
9727 問い合わせのプロンプトをいつ出すかを指定する。@var{when} には以下の一つを指定できるが、なくてもよい。
9730 @vindex never @r{interactive option}
9733 @vindex once @r{interactive option}
9734 - 4 個以上のファイルが指定された場合や、再帰的な削除が要求された場合に、
9735 一度だけ問い合わせをする。@option{-I} と同じ。
9737 @vindex always @r{interactive option}
9738 - 削除されるすべてのファイルに対して問い合わせをする。@option{-i} と同じ。
9740 @option{--interactive} に @var{when} を指定しないのは、@option{--interactive=always}
9743 @item --one-file-system
9744 @opindex --one-file-system
9745 @cindex one file system, restricting @command{rm} to
9746 ディレクトリ階層を再帰的に削除する際に、
9747 コマンドラインで引数として指定したディレクトリが存在するファイルシステムとは別のファイルシステム上にある、
9751 このオプションが役に立つのは、ビルド用の ``chroot'' ディレクトリ階層を削除する場合である。
9752 通常、そうしたディレクトリ階層に重要なデータは含まれていない。
9753 しかしながら、普段使っているスタートアップ・ファイルを利用しやすくするために、
9754 そうしたディレクトリ階層に @file{/home} を bind-mount するのは、珍しいことではない。
9755 問題は、@file{/home} のアンマウントを忘れやすいことである。
9756 アンマウントをやり忘れたまま、@command{rm -rf} を使って、通常使い捨てにする
9757 chroot 環境を削除しようとすると、@file{/home} 以下にあるすべてまで削除してしまうことになる。
9758 @option{--one-file-system} オプションを使えば、@command{rm} は警告を出した上で、
9759 他のファイルシステムにあるディレクトリをスキップしてくれる。
9760 当然ながら、@file{/home} と chroot 環境が同じファイルシステムにある場合は、
9761 このオプションを使っても、@file{/home} が助かるわけではない。
9763 @item --preserve-root
9764 @opindex --preserve-root
9765 @cindex root directory, disallow recursive destruction
9766 @option{--recursive} オプションと一緒に使った場合、ルートディレクトリ
9767 (@file{/}) を削除しようとした時点で、実行に失敗する。これがデフォルトの動作である。
9768 @xref{Treating / specially}.
9770 (訳注: 確かに @option{--preserve-root} が有効になっていれば、@code{rm -rf /}
9771 とした場合に、ルートディレクトリが保護されることになる。
9772 だが、@code{rm -rf /*} とした場合には、あまり役に立たない。なぜなら、@file{/*}
9773 は、@file{/bin}, @file{/usr}, @file{/home}
9774 などに展開されるが、そうしたディレクトリの消去は、@option{--preserve-root}
9777 @item --no-preserve-root
9778 @opindex --no-preserve-root
9779 @cindex root directory, allow recursive destruction
9780 再帰的に削除を行う際、@file{/} を特別扱いしない。
9781 コンピュータ上にあるすべてのファイルを本当に削除したい場合以外、
9782 このオプションの使用はお勧めできない。 @xref{Treating / specially}.
9789 @opindex --recursive
9790 @cindex directories, removing (recursively)
9791 コマンドラインにリストされたディレクトリとその中身を再帰的に削除する。
9797 削除を行う前に、各ファイルの名前を表示する。
9801 @cindex files beginning with @samp{-}, removing
9802 @cindex @samp{-}, removing files beginning with
9803 よくある質問の一つに、名前が @samp{-} で始まるファイルを削除するには、どうしたらよいか、
9804 というものがある。GNU の @command{rm} では、@code{getopt}
9805 を使用して引数の解析を行っているあらゆるプログラムと同様、@samp{--}
9806 オプションを使って、以下の引数はすべてオプションではない、と示すことが可能になっている。
9807 カレントディレクトリにある @file{-f} というファイルを削除するには、
9821 @opindex - @r{and Unix @command{rm}}
9822 Unix の @command{rm} プログラムが、この用途に @samp{-} を 1 個だけ使っていたのは、
9823 @code{getopt} の標準シンタックスが開発される以前のことである。
9828 @node shred invocation
9829 @section @command{shred}: セキュリティを向上させたファイルの削除
9832 @cindex data, erasing
9833 @cindex erasing data
9835 @command{shred} はデバイスやファイルを上書きして、
9836 非常に高価な装置を使用しても、データの復元ができないようにする。
9838 通常、ファイルを削除しても (@pxref{rm invocation})、データが実際に消去されるわけではない。
9839 単に、ファイルが格納されている場所をリストしたインデックスが破棄されるだけであり、
9840 そうすることで、そのデータの格納場所が再利用可能になるのである。
9841 世の中には、インデックスの再構築を試みる復元ソフト (undelete utilities)
9842 というものが存在する。そうしたものは、ファイルの存在したスペースが再利用されていなければ、
9845 頻繁に使われているシステムで、ディスクがほとんど一杯になっている場合、
9846 スペースは数秒のうちに再利用されるかもしれない。だが、それを確実に知る方法は全くない。
9847 また、他人に見られては困るデータがあったところで、
9848 見られても構わないデータでそのファイルを上書きしてしまえば、
9849 復元は絶対不可能だと考えたいかもしれない。
9851 しかしながら、そういうことをした後でも、ディスクを研究所に持ち込んで、
9852 高感度の (そして高価な) 装置を山ほど使用すれば、
9853 上書きされたデータの下にある元のデータのかすかな「痕跡 (echoes)」を検出することが可能なのだ。
9854 もし、データがたった一回しか上書きされていなかったら、それはさほど難しいことでもない。
9856 データを復元できないように消去する最善の方法は、
9857 それが載っているメディアを酸で破壊するとか、熱で溶かすとかすることである。
9858 フロッピーディスクのような廉価なリムーバブル・メディアの場合、それがよく使われる方法だ。
9859 だが、ハードディスクは高価だし、熱で溶かすのも難しい。
9860 そこで、@command{shred} ユーティリティは、物質的な破壊以外の方法で、
9863 そのためには、元のデータに与える損傷を最大にするように選ばれたデータパターンで繰り返し上書きするという方法が採られる。
9864 この方法は、フロッピーディスクにも効果があるものの、パターンはハードディスクで最も効果を上げるように工夫されたものだ。
9865 詳細については、ソースコードや、第 6 回 USENIX セキュリティ・シンポジウム
9866 (San Jose, California, July 22--25, 1996) の議事録にある
9867 Peter Gutmann の次の論文をご覧になっていただきたい。@*
9868 @uref{http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html,
9869 @cite{Secure Deletion of Data from Magnetic and Solid-State Memory}}
9871 ここで心に銘記してしていただきたいのは、@command{shred} には非常に重要な前提があるということである。
9872 すなわち、ファイルシステムはデータを、それが存在する場所で上書きするものでなければならない。
9873 それは、こうした操作を行うときの伝統的な方法であるが、
9874 最近のファイルシステムの設計には、この前提を満たさないものが多い。
9875 そうした例外には、次のようなものがある。
9880 ログ構造化 (log-structured) ファイルシステムや、ジャーナル化
9881 (journaled) ファイルシステム。たとえば、ATX や Solaris
9882 で提供されているもの。JFS, ReiserFS, XFS, Ext3 (@code{data=journal} モードの場合),
9883 BFS, NTFS などが、「データ」のジャーナリングをするように設定されている場合もこれに当たる。
9886 データを冗長化して書き込んだり、一部の書き込みに失敗することがあっても、
9887 動作し続けるファイルシステム。たとえば、RAID ベースのファイルシステム。
9890 Network Appliance の NFS サーバのように、スナップショットを作成するファイルシステム。
9893 NFS バージョン 3 のクライアントのように、一時領域にキャッシュを作るファイルシステム。
9899 特に ext3 ファイルシステムについて言うと、上記の例外に当てはまるのは
9900 (その結果、@command{shred} が限定された効果しか持たないのは)、@code{data=journal}
9901 モードの場合だけである。これは、メタデータだけでなく、
9902 ファイルデータもジャーナリングするモードだ。@code{data=ordered} (デフォルト)
9903 と @code{data=writeback} の両モードでは、@command{shred} は通常どおり役に立つ。
9904 ext3 のジャーナリング・モードを変更するには、mount のマニュアルに書いてあるように
9905 (man mount)、@file{/etc/fstab} ファイルで問題のファイルシステムのマウントオプションに
9906 @code{data=something} オプションを追加すればよい。
9908 ファイルシステムがどういう動作をしているか、よくわからない場合は、
9909 データをそれが存在する場所で上書きしていないと考えておいた方がよい。
9910 すなわち、そのファイルシステムでは、通常ファイルに対する @command{shred}
9911 の動作は、信頼できないということである。
9913 一般的に言って、@command{shred} は、ファイルよりデバイスに対して使った方が信頼できる。
9914 そうすれば、上に述べたファイルシステムの設計の問題を回避できるからだ。
9915 しかしながら、@command{shred} のデバイスに対する使用も、必ずしも全面的に信頼できるわけではない。
9916 たとえば、ほとんどのディスクが、バッドセクターを使用に割り当てる領域から外して、
9917 アプリケーションから見えないようにしている。
9918 そこで、バッドセクターに他人に見られたくないデータがある場合、@command{shred}
9921 @command{shred} は、バックアップに対して何の対処も行おうとしないが、
9922 バッドセクターの問題についても全く同様で、検知しようともしないし、通知しようともしない。
9923 それでも、@command{shred} はファイルに対して行うより、デバイスに対して行う方が信頼できるので、
9924 デフォルトでは、出力ファイルをサイズ 0 に短縮したり、削除したりしないようになっている。
9925 このデフォルトは、ファイルよりデバイスに適した動作だ。
9926 デバイスは一般に短縮できないし、削除するべきでもないからである。
9928 最後になったが、バックアップやミラーの持つリスクも考慮した方がよい。
9929 削除することのできないファイルのコピーが、ファイルシステムのバックアップやリモートのミラーに残っていることもありえる。
9930 そして、そうしたものが残っていれば、@command{shred}
9931 で破壊したファイルを後日復元することが可能になるのだ。
9932 だから、後で @command{shred} を使って抹消したくなるようなデータがある場合には、
9933 そのバックアップやミラーがないことを確認すべきなのである。
9936 shred [@var{option}]@dots{} @var{file}[@dots{}]
9939 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9947 @cindex force deletion
9948 必要ならば、ファイルの許可属性を無視して、上書きできるようにする。
9950 @item -n @var{number}
9951 @itemx --iterations=@var{number}
9952 @opindex -n @var{number}
9953 @opindex --iterations=@var{number}
9954 @cindex iterations, selecting the number of
9955 デフォルトで @command{shred} は、上書きを @value{SHRED_DEFAULT_PASSES} 回する。
9956 時間を節約するために、回数を減らすこともできるし、
9957 その方がよいと思えば、回数を増やすこともできる。
9958 25 回上書きすると、プログラムが内部に持っている上書き用のパターンのすべてが、
9961 @item --random-source=@var{file}
9962 @opindex --random-source
9963 @cindex random source for shredding
9964 上書きに使用するランダムデータのソースとして @var{file} を使用する。
9965 また、このランダムデータは、上書きパターンの順番を決めるのにも使用される。
9967 @item -s @var{bytes}
9968 @itemx --size=@var{bytes}
9969 @opindex -s @var{bytes}
9970 @opindex --size=@var{bytes}
9971 @cindex size of file to shred
9972 ファイルの最初の @var{bytes} バイトを shred 処理する。デフォルトは、
9973 ファイル全体の shred である。@var{bytes} の後ろには、その何倍かを示すために
9974 @samp{K}, @samp{M}, @samp{G} といった、サイズの指定を付けることができる。
9978 @itemx --remove[=@var{how}]
9981 @opindex --remove=unlink
9982 @opindex --remove=wipe
9983 @opindex --remove=wipesync
9984 @cindex removing files after shredding
9985 shred 処理したファイルを (可能ならば) サイズ 0 に短縮し
9986 (truncate)、その上で削除する。ファイルが複数のリンクを持っている場合に、
9987 削除されるのは名前を指定されたリンクだけである。
9988 ファイルの名前は、ファイルの内容ほど秘密性を必要としないことも多い。
9989 そうした場合は、長い書式のオプションでサポートされている @var{how}
9990 パラメータを付けることで、各ディレクトリエントリのより効率的な削除法を指定することができる。
9991 @var{how} パラメータに @samp{unlink} を指定した場合は、標準の unlink 呼び出しをするだけだが、
9992 @samp{wipe} を指定すると、unlink する前にファイル名を構成するバイトの難読化を行う。
9993 @samp{wipesync} を指定した場合は、ファイル名を難読化するだけでなく、
9994 それを 1 バイトづつディスクに sync することまで行う。
9995 留意していただきたいのは、@samp{wipesync} はデフォルトの方法だが、
9996 すべてのファイル名のすべての文字ごとに sync を行うことになるので、
9997 負荷が重くなるかもしれないということである。
9998 ファイル数が多い場合には、無視できない負荷になるかもしれない。
9999 また、使用しているシステムがメタデータの同期アップデートを提供している場合には、
10006 shred 処理が進行する間、更新される進行状態の情報のすべてを標準エラーに表示する。
10012 デフォルトでは、@command{shred} は、
10013 通常ファイルのサイズを、ファイルシステムのブロックサイズの倍数に切り上げて、
10014 ファイルの最後のブロックの不使用領域まで完全に消去する。
10015 この領域には、システムによっては、たとえば、現在のシステムメモリの一部が入っているかもしれないのだ。
10016 この動作を抑制したかったら、@option{--exact} オプションを使用すればよい。
10017 すなわち、デフォルトでは、1 ブロック 512 バイトのシステムで
10018 10 バイトの通常ファイルを shred すると、結果として 512 バイトのファイルが出来上がる。
10019 だが、このオプションを使えば、shred はファイルの見かけのサイズを増加させないのだ。
10025 通常、@command{shred} は、最後の 1 回でもランダムデータを書き込む。
10026 そんなファイルがハードディスクにあると、(たとえば、暗号化されたデータに見えて)
10027 目立ってしまうのではないかと思うのなら、あるいは、単にそっちの方がもっとすっきりしていると思うのなら、
10028 @option{--zero} オプションを指定して、もう一回、 すべて 0 ビットで上書きさせればよい。
10029 これは、@option{--iterations} オプションで指定した上書き回数のほかに、もう一回ということである。
10033 第 1 ドライブのフロッピーディスクに作成したファイルシステムを跡形もなく消し去るには、
10034 次のコマンドを使えばよいだろう。このコマンドで ``1.44MB'' (実際には 1440 KiB)
10035 のフロッピーを消去するには、約 20 分かかる。
10038 shred --verbose /dev/fd0
10041 同様に、ハードディスクの選択したパーティションからすべてのデータを消去するには、
10045 shred --verbose /dev/sda5
10048 最近のディスクでは、1 回の書き込みで十分なはずだ。
10049 それならば、書き込みを 3 回行うデフォルトの 3 分の 1 の時間ですむ。
10052 # 擬似ランダムデータを 1 回書き込む。デフォルトより 3 倍速い。
10053 shred --verbose -n1 /dev/sda5
10056 念のため、少なくとも 1 回は擬似ランダムデータで上書きをした方がよい。
10057 言い換えると、つい使いたくなっても、@samp{-n0 --zero} を使ってはいけない。
10058 ディスク・コントローラの中には、すべてが 0 のブロックを書き込む際に、処理の最適化を行っているものがあり、
10059 そのため、ブロック中のバイトすべてがクリアされない恐れがあるからである。
10060 SSD の中には、まさにそういうことをするものがある。
10062 @samp{-} という @var{file} は、標準出力を表している。
10063 これの使い道は、削除したテンポラリ・ファイルを shred することである。
10070 echo "Hello, world" >&3
10075 しかしながら、@samp{shred - >file} というコマンドを使っても、ファイルの内容を
10076 shred することにはならない。なぜなら、シェルは @command{shred}
10077 を呼び出す前に、ファイルをサイズ 0 に短縮 (truncate) してしまうからである。
10078 @samp{shred file}、あるいは (Bourne 互換シェルをお使いなら) @samp{shred - 1<>file}
10079 というコマンドを、代わりに使った方がよい。
10084 @node Special file types
10087 @cindex special file types
10088 @cindex file types, special
10090 この章では、特殊なタイプのファイルを作成するコマンドの説明を行う (さらに @command{rmdir}
10091 の説明もするが、これはディレクトリという特殊なファイル型の一つを削除するコマンドである)。
10093 @cindex special file types
10095 Unix 系統のオペレーティング・システムでは、ほかのオペレーティング・システムと比べて、
10096 特殊なファイル型というものが著しく少ないが、それでも普通のファイル
10097 (@dfn{normal files}) がそうであるような、のっぺらぼうなバイトストリームとして、
10098 何でもかんでも扱えさえすればよいというものではない。
10099 たとえば、ファイルを作成したり、削除したりするとき、
10100 システムはその情報を記録しなければならないが、それはディレクトリ (@dfn{directory})
10101 --- これも特殊なタイプのファイルである --- に書き込まれる。
10102 もし興味があれば、ディレクトリを普通のファイルのように読むこともできるが、
10103 システムがシステムとしての役割を果たすためには、
10104 ディレクトリはそのファイル内容であるバイトに、構造というか、何らかの秩序を持っていなければならない。
10105 そういう意味で、ディレクトリは、「特殊な」タイプのファイルなのである。
10107 ディレクトリ以外の特殊なファイル型としては、名前付きパイプ (FIFO)、
10108 シンボリックリンク、ソケット、それに、いわゆるスペシャルファイル
10109 (@dfn{special files}) がある。
10112 * link invocation:: システムコール link を使って、ハードリンクを作成する
10113 * ln invocation:: ファイル間のリンクを作成する
10114 * mkdir invocation:: ディレクトリを作成する
10115 * mkfifo invocation:: FIFO (名前付きパイプ) を作成する
10116 * mknod invocation:: ブロック型やキャラクタ型のスペシャルファイルを作成する
10117 * readlink invocation:: シムリンクの値、または正規化されたファイル名を表示する
10118 * rmdir invocation:: 空のディレクトリを削除する
10119 * unlink invocation:: システムコール unlink を使って、ファイルを削除する
10124 @node link invocation
10125 @section @command{link}: システムコール link を使って、ハードリンクを作成する
10128 @cindex links, creating
10129 @cindex hard links, creating
10130 @cindex creating links (hard only)
10132 @command{link} は、一度に 1 個のハードリンクを作成する。
10133 これは、システムが提供する @code{link} 関数への必要最小のインターフェースである。
10134 @xref{Hard Links, , , libc, The GNU C Library Reference Manual}.
10135 従って、より一般に使われる @command{ln} コマンドのような、様々な付加機能をあえて備えていない
10136 (@pxref{ln invocation})。
10141 link @var{filename} @var{linkname}
10144 @var{filename} は、実在するファイルを指していなければならない。また、
10145 @var{linkname} は、実在するディレクトリ中の実在しないファイルを指していなければならない。
10146 @command{link} は、リンクを作成するために、@code{link (@var{filename}, @var{linkname})}
10149 GNU のシステムでは、このコマンドは、@samp{ln --directory
10150 --no-target-directory @var{filename} @var{linkname}} と同様に振る舞う。
10151 しかし、@option{--directory} や @option{--no-target-directory} は、POSIX
10152 の規格にあるオプションではないので、@command{link} の方が、実用上より可搬性がある。
10154 @var{filename} がシンボリックリンクの場合、
10155 @var{linkname} がシンボリックリンクへのハードリンクになるか、
10156 シンボリックリンクの参照先へのハードリンクになるかは、規定されていない。
10157 どちらの動作を望むかをはっきり指定したければ、@command{ln -P} や @command{ln -L}
10163 @node ln invocation
10164 @section @command{ln}: ファイル間のリンクを作成する
10167 @cindex links, creating
10168 @cindex hard links, creating
10169 @cindex symbolic (soft) links, creating
10170 @cindex creating links (hard or soft)
10172 @cindex file systems and hard links
10173 @command{ln} はファイル間のリンクを作成する。デフォルトではハードリンクを作成するが、
10174 @option{-s} オプションを指定すると、シンボリックリンク (@dfn{soft} linkとも言う)
10180 ln [@var{option}]@dots{} [-T] @var{target} @var{linkname}
10181 ln [@var{option}]@dots{} @var{target}
10182 ln [@var{option}]@dots{} @var{target}@dots{} @var{directory}
10183 ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{}
10189 ファイル名を二つ指定すると、@command{ln} は 1 番目に対するリンクを
10193 @var{target} のみを指定すると、@command{ln} はそのファイルに対するリンクをカレントディレクトリに作成する。
10196 @option{--target-directory} (@option{-t}) オプションを指定した場合や、
10197 あるいはそれを指定しないでも、最後のファイルがディレクトリであり、しかも
10198 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
10199 @command{ln} は各 @var{target} ファイルに対するリンクを、
10200 指定されたディレクトリに @var{target} の名前で作成する。
10204 通常 @command{ln} は存在するファイルを削除しない。
10205 既存のファイルを無条件で削除するには、@option{--force} (@option{-f}) オプションを使う。
10206 また、ユーザに問い合わせた上で削除するには、@option{--interactive} (@option{-i})
10207 オプションを使う。既存のファイルを、名前を変更して残すには、@option{--backup}
10208 (@option{-b}) オプションを使用する。(訳注: ここで述べているのは、
10209 存在するファイルの名前をリンクファイル名として使う場合の話である。)
10211 @cindex hard link, defined
10212 @cindex inode, and hard links
10213 ハードリンク (@dfn{hard link}) というのは、存在するファイルが持つ別の名前である。
10214 だから、リンクとオリジナルは、区別ができない。専門的な言い方をすると、両者は同じ
10215 inode を共有するものである。inode には、ファイルに関する情報がすべて含まれているので、
10216 全くのところ、inode こそファイルであると言っても、過言ではないほどだ。
10217 たいていのシステムでは、ディレクトリに対するハードリンクの作成は禁じられている。
10218 許可されているシステムでも、それができるのは、スーパーユーザだけである
10219 (その場合でも、ファイルシステムにループが生じると、
10220 ほかの様々なユーティリティ・プログラムで問題が起きるので、慎重に行わなければならない)。
10221 なお、ハードリンクは、ファイルシステムの境界を越えることができない。
10222 (もっとも、ハードリンクに対するこうした制限は、POSIX で規定されているわけではない。)
10224 @cindex dereferencing symbolic links
10225 @cindex symbolic link, defined
10226 それに対して、シンボリックリンク (@dfn{symbolic link}、略称はシムリンク
10227 @dfn{symlink}) は、特殊なファイル型の一つである
10228 (すべてのカーネルがサポートしているわけではない。たとえば、System V release 3
10229 やそれ以前のシステムにはシムリンクが存在しない)。
10230 このファイル型では、リンクファイルは、実際には別のファイルを、名前を使って参照している。
10231 ほとんどのファイル操作では (ファイルのオープン、読み込み、書き出しなど)、
10232 シンボリックリンク・ファイルが渡されると、カーネルが自動的にリンクの参照を読み解いて
10233 (@dfn{dereference})、リンクの参照先を操作の対象にする。ただし、操作によっては
10234 (たとえば、ファイルの削除)、参照先ではなく、リンクファイルそのものを対象にするものもある。
10235 シムリンクの所有者やグループは、リンクを通して行われるファイルアクセスに対して意味を持たないが、
10236 削除制限ビットが立っているディレクトリからシンボリックリンクを削除する際には、かかわりを持ってくる。
10237 GNU のシステムでは、シムリンクのモードには意味がなく、変更することもできない。
10238 だが、BSD システムの中には、モードが変更でき、ファイル名の解決においてシムリンクをたどるかどうかに影響するものもある。
10239 @xref{Symbolic Links,,, libc, The GNU C Library Reference Manual}.
10241 シンボリックリンクの中身には、どんな文字列が含まれていてもよい。
10242 シンボリックリンクに含まれる文字列が、実在するファイルの名前になっていないときは、
10243 リンク切れ (@dfn{dangling symlink}) が生ずる。
10244 リンク切れのシンボリックリンクを作成することは、禁止されているわけではない。
10245 シムリンクの作成に絶対パスを使うか、相対パスを使うかには、それぞれ一長一短がある。
10246 絶対パスのシムリンクは、リンクファイルの存在するディレクトリが移動しても、常に同じファイルを指す。
10247 もっとも、そのシムリンクが複数のマシンから見えるような場合には
10248 (たとえば、ネットワークでつながったファイルシステムにあるような場合には)、
10249 リンクが指しているファイルは、必ずしも同じではないかもしれない。
10250 相対パスのシンボリックリンクの方は、それが存在しているディレクトリからの相対パスで参照先が決まる。
10251 そこで、リンクファイルがネットワークでつながっているマシンからアクセスされることがある場合に、
10252 リンクと同じデバイス上に存在するファイルを、そのデバイスのマウントポイントが何という名前かを気にせずに指示することができて、
10255 相対パスのシムリンクをカレントディレクトリ以外の場所に作成すると、
10256 そのシムリンクが実際に指しているファイルは、
10257 同じ文字列がカレントディレクトリを基点として指しているファイルとは別のものになる。
10258 そのため、ユーザの多くが、まずカレントディレクトリを変更して、
10259 相対パスのシムリンクを作成する場所へ移動することを好んでいる。
10260 そうすれば、タブ補完などのファイル名参照方法を用いて、
10261 シムリンクに格納する参照先の適切な相対パスを見つけることができるからである。
10263 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10274 @opindex --directory
10275 @cindex hard links to directories
10277 ディレクトリに対するハードリンクを作成しようとしても許可する。
10278 とは言え、たぶんシステムによって禁止されているので、
10279 たとえスパーユーザでも作成に失敗するだろう。
10285 リンクの作成先に、作成するリンクファイルと同名のファイルがすでに存在していたら、それを削除する。
10288 @itemx --interactive
10290 @opindex --interactive
10291 @cindex prompting, and @command{ln}
10292 リンクの作成先に、作成するリンクファイルと同名のファイルがすでに存在していたら、
10293 削除するかどうか、ユーザに問い合わせる。
10299 @option{-s} オプションが有効になっていないとき、リンク対象として指定されたファイル
10300 (訳注: 上記書式の @var{target}) がシンボリックリンクならば、
10301 シンボリックリンクそのものではなく、シンボリックリンクが参照しているファイルへのハードリンクを作成する。
10304 @itemx --no-dereference
10306 @opindex --no-dereference
10307 最後のオペランドがディレクトリに対するシンボリックリンクであるとき、それをディレクトリとして特別扱いしない
10308 (訳注: すなわち、ディレクトリ内に @var{target} と同名でリンクを作ることはしない)。
10309 むしろ、普通のファイルであるかのように扱う。
10311 リンクの作成先として指定されたのが (ディレクトリに対するシムリンクではなく)
10312 本物のディレクトリならば、曖昧なところは全くない。
10313 そのディレクトリ内にリンクを作るだけの話だ。ところが、指定された作成先が、
10314 ディレクトリに対するシムリンクの場合は、ユーザの要求を処理するのに、二つの行き方がある。
10315 @command{ln} は、通常のディレクトリを扱う場合と全く同じように作成先を扱って、
10317 あるいは、作成先をディレクトリではないもの、すなわち、他ならぬシムリンクと見なすことも可能だ。
10318 後者の場合、@command{ln} は、新しいリンクを作成する前に、
10319 そのシムリンクを消去するなり、バックアップするなりしなければならない。
10320 @command{ln} のデフォルトは、作成先がディレクトリに対するシムリンクであっても、
10321 ディレクトリと全く同様に扱うことである。
10323 このオプションは、@option{--no-target-directory} (@option{-T})
10324 の弱いバージョンである。従って、両方のオプションを指定した場合、こちらは効果がない。
10329 @opindex --physical
10330 @option{-s} オプションが有効になっていないとき、リンク対象として指定されたファイル
10331 (訳注: 上記書式の @var{target}) がシンボリックリンクならば、
10332 シンボリックリンクそのものへのハードリンクを作成する。
10333 そういった動作をカーネルがサポートしていないプラットホームでは、このオプションを指定すると、
10334 リンク対象のシンボリックリンクと全く同じ内容を持つシンボリックリンクが作成される。
10335 このとき、シンボリックリンクの内容に手が加えられることは決してないので、
10336 どちらのシンボリックリンクを使って行われるファイル名の解決も、
10337 シンボリックリンクへのハードリンクが作成された場合と結局同じになる。
10342 @opindex --relative
10343 リンクファイルを置く場所を基点とする相対パスのシンボリックリンクを作成する。
10348 ln -srv /a/file /tmp
10349 '/tmp/file' -> '../a/file'
10353 それを置くディレクトリと参照先のファイル名を正規化した上で、それに基づいて作成される。
10354 すなわち、そうしたファイル名中にあるすべてのシンボリックリンクは、実体に還元されることになるわけだ。
10355 なお、@command{realpath} コマンドを使用すれば、
10356 以下の例に示すように、相対パスを生成する際にもっと融通が利く
10357 (訳注: たとえば、@command{realpath} を使うと、
10358 ファイル名中のシンボリックリンクをシンボリックリンクのままにしておくこともできる)。
10359 @xref{realpath invocation}.
10364 test "$1" = --no-symlinks && { nosym=$1; shift; }
10366 test -d "$2" && link="$2/." || link="$2"
10367 rtarget="$(realpath $nosym -m "$target" \
10368 --relative-to "$(dirname "$link")")"
10369 ln -s -v "$rtarget" "$link"
10377 @opindex --symbolic
10378 ハードリンクではなく、シンボリックリンクを作る。
10379 このオプションは、シンボリックリンクをサポートしていないシステムでは、
10380 エラー・メッセージを表示するだけである。
10384 @optTargetDirectory
10386 @optNoTargetDirectory
10392 リンクの作成に成功した後で、各ファイルの名前を表示する。
10396 @cindex hard links to symbolic links
10397 @cindex symbolic links and @command{ln}
10398 @option{-L} と @option{-P} の両方を指定すると、最後に指定したものが効果を持つ。
10399 さらに @option{-s} も指定した場合は、エラーや警告は出ないが、@option{-L} や
10400 @option{-P} は無視される。@option{-L} と @option{-P}
10401 のどちらのオプションも指定しない場合、@command{ln} のこの実装では、システムの
10402 @code{link} 関数がシンボリックリンクに対するハードリンクをサポートしていれば
10403 (たとえば、GNU のシステム)、デフォルトの動作は @option{-P} になる。
10404 @code{link} 関数がシンボリックリンクをたどるものならば
10405 (たとえば、BSD)、デフォルトの動作は @option{-L} である。
10414 # カレントディレクトリにあるファイル a を指す ../a というリンクを
10415 # 作成する。実のところ役に立たない。../a が自分自身を指すリンクに
10421 # 頭がこんがらかってしまわないように、シムリンクを作成する前に、
10422 # リンクを作るディレクトリに移動する。
10428 # 絶対パスによるリンク対象の指定は、リンク対象の位置が変わると、
10430 ln -s $(pwd)/a /some/dir/
10434 # 相対パスによるリンク対象の指定は、リンクやその対象を含む
10435 # ディレクトリが移動しても、両者の相対的な位置関係が変わらない
10436 # かぎり、問題がない。また、ネットワークでつながったファイル
10438 ln -s afile anotherfile
10439 ln -s ../adir/afile yetanotherfile
10443 @node mkdir invocation
10444 @section @command{mkdir}: ディレクトリを作成する
10447 @cindex directories, creating
10448 @cindex creating directories
10450 @command{mkdir} は、指定された名前でディレクトリを作成する。
10455 mkdir [@var{option}]@dots{} @var{name}@dots{}
10458 @command{mkdir} は、@var{name} で指定された各ディレクトリを、指定された順番で作成する。
10459 @var{name} がすでに存在していると、エラーになり、その旨メッセージを出すが、
10460 @var{name} がすでに存在していても、@option{-p} オプションが指定され、@var{name}
10461 がディレクトリの場合は、エラーにならない。
10463 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10467 @item -m @var{mode}
10468 @itemx --mode=@var{mode}
10471 @cindex modes of created directories, setting
10472 作成するディレクトリの許可属性ビットを @var{mode} に設定する。@var{mode} には
10473 @command{chmod} と同じ書式を使用し、@samp{a=rwx} (すべてのユーザに、読み、書き、
10474 実行を許可する) を基点とする。@xref{File permissions}.
10476 通常、ディレクトリには、作成された時点で、要求したとおりのファイル・モードビットが付く。
10477 GNU の拡張として、@var{mode} で特殊モードビットも指定できるが、
10478 その場合は、ディレクトリは存在しているが、特殊モードビットは要求どおりではないという、時間の隙間が生じるかもしれない。
10479 ディレクトリの set-user-ID ビットと set-group-ID ビットが、
10480 このオプションを使って変更しない場合にどのように継承されるかについては、
10481 次の節を参照していただきたい。@xref{Directory Setuid and Setgid}.
10487 @cindex parent directories, creating
10488 各引数について、存在していない親ディレクトリがあれば、それを作成し、
10489 その許可属性ビットを umask を基にして @samp{u+wx} になるように設定する。
10490 親ディレクトリがすでに存在している場合は、このオプションは何もせず、
10491 その許可属性ビットを変更することもない。
10493 新たに作成するいかなる親ディレクトリの許可属性ビットも、@samp{u+wx}
10494 を含むある一定の値に設定するには、@command{mkdir} を実行する前に、umask
10495 を設定すればよい。たとえば、@samp{(umask u=rwx,go=rx; mkdir -p P/Q)}
10496 というシェルコマンドで @file{P} という親ディレクトリを作れば、その許可属性ビットは
10497 @samp{u=rwx,go=rx} になる。また、親ディレクトリに特殊モードビットも設定するには、
10498 @command{chmod} を @command{mkdir} の後で実行すればよい。
10499 新たに作成される親ディレクトリの set-user-ID ビットと
10500 set-group-ID ビットがどのように継承されるかについては、
10501 次の節を参照していただきたい。 @xref{Directory Setuid and Setgid}.
10507 ディレクトリを作成するごとに、メッセージを表示する。@option{--parents}
10510 @optContext (@var{context} を省略できるのは、coreutils-8.22 から)
10517 @node mkfifo invocation
10518 @section @command{mkfifo}: FIFO (名前付きパイプ) を作成する
10521 @cindex FIFOs, creating
10522 @cindex named pipes, creating
10523 @cindex creating FIFOs (named pipes)
10525 @command{mkfifo} は、指定された名前で FIFO (名前付きパイプ @dfn{named pipes}
10531 mkfifo [@var{option}] @var{name}@dots{}
10534 @dfn{FIFO} は特殊なファイル型の一つであり、
10535 これを利用すると、独立したプロセスの間でデータのやりとりが可能になる。
10536 片方のプロセスが FIFO を書き出し用にオープンし、もう一方のプロセスが読み込み用にオープンする。
10537 そうすると、シェルなどにある普通の名前のない (anonymous) パイプを使ったときのように、
10538 データを一方から他方へ流すことができるのである。
10540 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10544 @item -m @var{mode}
10545 @itemx --mode=@var{mode}
10548 @cindex modes of created FIFOs, setting
10549 作成する FIFO の許可属性を @var{mode} にする。@var{mode} は @command{chmod}
10550 で使用するのと同じシンボル表記であり、@samp{a=rw} (すべてのユーザに、
10551 読み、書きを許可する) を基点として使う。@var{mode} で指定するのは、
10552 ファイルの許可属性ビットのみにするべきである。 @xref{File permissions}.
10554 @optContext (@var{context} を省略できるのは、coreutils-8.22 から)
10561 @node mknod invocation
10562 @section @command{mknod}: ブロック型やキャラクタ型のスペシャルファイルを作成する。
10565 @cindex block special files, creating
10566 @cindex character special files, creating
10568 @command{mknod} は、指定された名前で FIFO、キャラクター・スペシャルファイル、
10569 ブロック・スペシャルファイルを作成する。
10574 mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}]
10577 @cindex special files
10578 @cindex block special files
10579 @cindex character special files
10580 これまでに使ってきた「特殊なファイル型 (``special file type'')」という言い回しとは違って、
10581 「スペシャルファイル (@dfn{special file})」という用語には、Unix では技術的な意味が存在する。
10582 すなわち、それは、データを生成したり、受け取ったりできるもののことである。
10583 たいていの場合、それはハードウェアという物理的なものを指し、
10584 たとえば、プリンタやディスクがそれに当たる。(なお、そうしたスペシャルファイルは、
10585 通常、システムの設定時に作られる。) @command{mknod} は、
10586 このタイプのファイルを作成するコマンドである。そうしたデバイスには、そこから一度に
10587 1 文字 (a character) づつしか読むことのできないものもあれば、一度に 1 ブロックを
10588 (すなわち、たくさんの character を) 読み込むことのできるものもある。
10589 それ故、スペシャルファイルには、ブロック・スペシャルファイル
10590 (@dfn{block special} files) とキャラクタ・スペシャルファイル
10591 (@dfn{character special} files) があると言われるのである。
10593 @c mknod is a shell built-in at least with OpenBSD's /bin/sh
10594 @mayConflictWithShellBuiltIn{mknod}
10596 @var{name} に続く引数では、作成するファイルのタイプを指定する。
10601 @opindex p @r{for FIFO file}
10605 @opindex b @r{for block special file}
10606 ブロック・スペシャルファイルを作成する
10609 @c Don't document the 'u' option -- it's just a synonym for 'c'.
10610 @c Do *any* versions of mknod still use it?
10612 @opindex c @r{for character special file}
10613 @c @opindex u @r{for character special file}
10614 キャラクタ・スペシャルファイルを作成する
10618 ブロック型やキャラクタ型のスペシャルファイルを作成する際には、
10619 ファイルタイプに続いて、メージャー・デバイス番号とマイナー・デバイス番号を指定する必要がある。
10620 メージャーやマイナーのデバイス番号が @samp{0x} や @samp{0X} で始まっていれば、
10621 番号は 16 進数と見なされる。@samp{0} で始まっていれば 8 進数、それ以外の場合は
10624 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10628 @item -m @var{mode}
10629 @itemx --mode=@var{mode}
10632 作成するファイルの許可属性を @var{mode} にする。@var{mode} は @command{chmod}
10633 で使用するのと同じシンボル表記であり、@samp{a=rw} を基点として使う。
10634 @var{mode} で指定するのは、ファイルの許可属性ビットのみにするべきである。
10635 @xref{File permissions}.
10637 @optContext (@var{context} を省略できるのは、coreutils-8.22 から)
10644 @node readlink invocation
10645 @section @command{readlink}: シムリンクの値、または正規化されたファイル名を表示する
10648 @cindex displaying value of a symbolic link
10649 @cindex canonical file name
10650 @cindex canonicalize a file name
10653 @command{readlink} には、二つの動作モードがある。
10659 このモードでは、@command{readlink} は、指定されたシンボリックリンクの値を表示する。
10660 引数がシンボリックの名前以外だったときは、何も出力せず、0 以外の終了コードで終了する。
10662 @item Canonicalize (正規化) モード
10664 このモードでは、@command{readlink} は、指定されたファイルの絶対パスによる名前を表示する。
10665 その絶対パスには、@file{.} や @file{..} といった構成要素や重複するパスの区切り
10666 (@file{/})、シンボリックリンクは含まれない。
10671 readlink [@var{option}]@dots{} @var{file}@dots{}
10674 デフォルトでは、@command{readlink} は readlink モードで動作する。
10676 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10681 @itemx --canonicalize
10683 @opindex --canonicalize
10684 canonicalize モードで動かす。ファイル名を構成する要素のうち、
10685 最後の要素以外のどれかが、存在しなかったり、利用できなかったりすると、
10686 @command{readlink} は何も出力せず、0 以外の終了コードで終了する。
10690 @itemx --canonicalize-existing
10692 @opindex --canonicalize-existing
10693 canonicalize モードで動かす。ファイル名を構成する要素に、
10694 存在しなかったり、利用できなかったりするものがあれば、@command{readlink}
10695 は何も出力せず、 0 以外の終了コードで終了する。
10696 ファイル名のの末尾にスラッシュを付けると、その名前はディレクトリであるという指定になる。
10699 @itemx --canonicalize-missing
10701 @opindex --canonicalize-missing
10702 canonicalize モードで動かす。ファイル名を構成する要素に、
10703 存在しなかったり、利用できなかったりするものがあれば、@command{readlink}
10707 @itemx --no-newline
10709 @opindex --no-newline
10710 @var{file} が 1 個しか指定されなかったときは、出力の区切り文字
10711 (訳注: 通常は改行) を表示しない。複数の @var{file}
10712 とともに、このオプションが指定されたときは、警告メッセージを出す。
10722 ほとんどのエラーメッセージを出さないようにする。デフォルトで ON になっている。
10734 @command{readlink} ユーティリティが初めて登場したのは、OpenBSD 2.1 だった。
10736 @command{realpath} コマンドをオプションなしで使うと、canonicalize モードの
10737 @command{readlink} と同じ動作をする。
10742 @node rmdir invocation
10743 @section @command{rmdir}: 空のディレクトリを削除する
10746 @cindex removing empty directories
10747 @cindex directories, removing empty
10749 @command{rmdir} は、空のディレクトリを削除する。
10754 rmdir [@var{option}]@dots{} @var{directory}@dots{}
10757 引数 @var{directory} が実在する空のディレクトリを指していない場合、エラーになる。
10759 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10763 @item --ignore-fail-on-non-empty
10764 @opindex --ignore-fail-on-non-empty
10765 @cindex directory deletion, ignoring failures
10766 ディレクトリの削除に失敗しても、その理由が単にディレクトリが空ではないせいならば、
10773 @cindex parent directories, removing
10774 @var{directory} を削除するとき、@var{directory} を構成する各要素の削除を試みる。
10775 そこで、たとえば、@samp{rmdir -p a/b/c} は、@samp{rmdir a/b/c a/b a} と同じになる。
10776 従って、そうしたディレクトリのどれかが空ではないことが判明すると、動作に失敗する。
10777 動作に失敗しても、エラーメッセージを出して失敗のステータスで終了しないようにするには、
10778 @option{--ignore-fail-on-non-empty} オプションを使えばよい。
10784 @cindex directory deletion, reporting
10785 @var{directory} の削除に成功するごとに、その旨メッセージを出す。
10789 空ではないディレクトリを (再帰的に) 削除する方法については、@command{rm}
10790 コマンドの説明を参照していただきたい。@xref{rm invocation}.
10795 @node unlink invocation
10796 @section @command{unlink}: システムコール unlink を使って、ファイルを削除する
10799 @cindex removing files or directories (via the unlink syscall)
10801 @command{unlink} は、指定された 1 個のファイル名の削除を行う。
10802 これは、システムが提供する @code{unlink} 関数への必要最小のインターフェースである。
10803 @xref{Deleting Files, , , libc, The GNU C Library Reference Manual}.
10804 従って、より一般に使われる @command{rm} コマンドのような、様々な付加機能をあえて備えていない
10805 (@pxref{rm invocation})。
10810 unlink @var{filename}
10813 システムによっては、@code{unlink} を使って、ディレクトリの名前を削除できるものもある。
10814 また、それができるのは、特権を持ったユーザだけであるシステムもある。
10815 GNU のシステムでは、@code{unlink} は、ディレクトリの名前を全く削除できない。
10817 @command{unlink} コマンドは、@option{--help} と @option{--version} オプションを認識する。
10818 名前が @samp{-} で始まるファイルを削除するには、名前の前に @samp{./} を付ければよい。
10819 たとえば、@samp{unlink ./--help} のようにだ。
10824 @node Changing file attributes
10827 @cindex changing file attributes
10828 @cindex file attributes, changing
10829 @cindex attributes, file
10831 ファイルについては、内容と名前とファイル型 (@pxref{Special file types})
10832 で、すべてが尽くされるわけではない。ファイルには、他の情報も存在する。
10833 たとえば、所有者 (ユーザ ID)、グループ (グループ ID)、アクセス権
10834 (そのファイルに対して、所有者、グループに属するユーザ、それ以外の一般ユーザは、
10835 それぞれ何ができるのか)、様々なタイムスタンプ、といった情報も存在するのである。
10836 そうしたものは、一まとめにして、ファイルの属性 (@dfn{attributes}) と呼ばれている。
10838 以下のコマンドは、ファイルの属性を変更する。
10841 * chown invocation:: ファイルの所有者やグループを変更する。
10842 * chgrp invocation:: ファイルのグループを変更する。
10843 * chmod invocation:: アクセス権を変更する。
10844 * touch invocation:: ファイルのタイムスタンプを変更する。
10848 @node chown invocation
10849 @section @command{chown}: ファイルの所有者やグループを変更する
10852 @cindex file ownership, changing
10853 @cindex group ownership, changing
10854 @cindex changing file ownership
10855 @cindex changing group ownership
10857 @command{chown} は、指定された各 @var{file} の所有者や所有グループを
10858 @var{new-owner} に変更する。所有者とグループを、存在する参照用ファイル
10859 (reference file) のそれと同じものに変更することもできる。
10864 chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@}@c
10868 @var{new-owner} では、新しい所有者やグループを以下のような形で指定する
10869 (@samp{:} の前後に空白を入れてはいけない)。
10872 [@var{owner}] [ : [@var{group}] ]
10879 @var{owner} (ユーザ名、またはユーザ ID 番号) だけが指定されている場合は、
10880 そのユーザが指定された各ファイルの所有者になる。ファイルのグループは変化しない。
10882 @item owner@samp{:}group
10883 @var{owner} の後に、コロンと @var{group} (グループ名、またはグループ ID 番号)
10884 が、間に空白をはさまずに続く場合は、ファイルの所有グループも
10885 (@var{group} に) 変更される。
10887 @item owner@samp{:}
10888 @var{owner} の後ろにコロンがあるのみで、グループ名が続かない場合は、
10889 そのユーザがファイルの所有者になり、ファイルのグループは、@var{owner}
10892 @item @samp{:}group
10893 コロンとそれに続く @var{group} のみが指定され、所有者が省略されている場合は、
10894 ファイルのグループだけが変更される。この場合、@command{chown}
10895 は、@command{chgrp} と同じ動作をするわけだ。
10898 コロンのみが指定されている場合や、@var{new-owner} に何も指定されていない場合は、
10903 @var{owner} や @var{group} にユーザ ID 番号やグループ ID 番号を使用する場合は、
10904 番号の頭に @samp{+} を付ければ、ID 番号だと明示することができる。
10905 @xref{Disambiguating names and IDs}.
10907 古めのスクリプトの中には、区切りの印として @samp{:} ではなく、@samp{.}
10908 を今だに使っているものがあるかもしれない。POSIX 1003.1-2001 (@pxref{Standards conformance})
10909 では、これに対するサポートを要求していないが、
10910 後方互換のために、GNU の @command{chown} では、曖昧さが生じないかぎり、@samp{.}
10911 の使用をサポートしている。とは言え、新しく書くスクリプトでは、@samp{.}
10912 の使用を避けるべきである。他のシステムでも使えるとはかぎらないし、
10913 また、@var{owner@samp{.}group} という全体が、名前に @samp{.}
10914 を含むユーザを指していたりすると、不都合が生じるからだ。
10916 @macro chownGroupRestrictions
10917 ユーザがグループを任意のものに変更できるか、それとも、
10918 グループの設定はユーザがその一員であるグループにのみ制限されるという、
10919 より可搬性のある動作になっているかは、システム次第である。
10921 @chownGroupRestrictions
10923 @command{chown} コマンドを実行すると、set-user-ID ビットや set-group-ID
10924 ビットが消えてしまうことがある。そうしたことが起きるかどうかは、
10925 裏で動いている @code{chown} システムコールのポリシーや機能次第であり、
10926 従って、システムによるファイルモードの変更が、@command{chown}
10927 コマンドのコントロール外になることがあるのだ。
10928 しかるべき特権を持ったユーザが実行した場合や、問題のビットが実行権とは関係のない何か別の機能
10929 (たとえば、強制ロック) を表している場合などでは、@command{chown}
10930 コマンドを実行しても、そうしたビットが変わらないかもしれない。
10931 どうなるかよくわからない場合は、裏で動いているシステムの動作を調べるとよい。
10933 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10941 @cindex changed owners, verbosely describing
10942 所有者の変更が実際に行われた各 @var{file} について、何を実行したかを詳しく表示する。
10950 @cindex error messages, omitting
10951 所有者を変更できないファイルがあっても、エラーメッセージを出さない。
10953 @item --from=@var{old-owner}
10955 @cindex symbolic links, changing owner
10956 @var{file} が @var{old-owner} で指定された属性を現在持っているときにのみ、
10957 その所有者を変更する。@var{old-owner} の書式は、上記の @var{new-owner} と同じである。
10958 このオプションは、ファイルの不正使用が可能になる時間を大幅に狭めるという点で、
10959 主としてセキュリティの見地から役に立つ。
10960 一例を挙げると、この種のオプションを使わない場合、ユーザの ID
10961 番号の変更を、そのユーザのファイルに反映させるために、@code{root}
10962 は次のようなコマンドを実行するかもしれない。
10965 find / -user OLDUSER -print0 | xargs -0 chown -h NEWUSER
10968 しかし、これは危険なことである。なぜなら、@command{find}
10969 が存在するファイルの所有者を検査するときと、@command{chown}
10970 が実際に実行されるときとの間に時間差があり、それはかなり大きいかもしれないからだ。
10971 この時間差を小さくする方法の一つは、ファイルが見つかるごとに、@command{chown}
10975 find / -user OLDUSER -exec chown -h NEWUSER @{@} \;
10978 しかし、動作の対象になるファイルがたくさんあると、この方法は非常に時間がかかる。
10979 @option{--from=@var{old-owner}} オプションを使う方が、
10980 完璧とまでは言えないにしても、より安全である (時間差がさらに小さくなるので)。
10983 chown -h -R --from=OLDUSER NEWUSER /
10986 @item --dereference
10987 @opindex --dereference
10988 @cindex symbolic links, changing owner
10990 シンボリックリンクそのものを動作の対象とせず、リンクが指しているものを動作の対象にする。
10994 @itemx --no-dereference
10996 @opindex --no-dereference
10997 @cindex symbolic links, changing owner
10999 シンボリックリンクが指しているものではなく、シンボリックリンクそのものを動作の対象にする。
11000 このモードは、システムコール @code{lchown} に依存している。
11001 システムコール @code{lchown} を提供していないシステムでは、
11002 コマンドラインで指定されたファイルがシンボリックリンクだと、@command{chown} は実行に失敗する。
11003 なお、再帰的にディレクトリ階層をたどっている際にシンボリックリンクに出会っても、
11004 デフォルトでは診断メッセージを表示しない。ただし、@option{--verbose}
11005 を指定している場合は別なので、そちらの説明も参照していただきたい。
11007 @item --preserve-root
11008 @opindex --preserve-root
11009 @cindex root directory, disallow recursive modification
11010 ルートディレクトリ (@file{/}) を再帰的に変更しようとした時点で、実行に失敗する。
11011 @option{--recursive} オプションを指定していない場合、このオプションは効果がない。
11012 @xref{Treating / specially}.
11014 @item --no-preserve-root
11015 @opindex --no-preserve-root
11016 @cindex root directory, allow recursive modification
11017 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11018 @xref{Treating / specially}.
11020 @item --reference=@var{ref_file}
11021 @opindex --reference
11022 各 @var{file} の所有者とグループを @var{ref_file} のそれと同じものに変更する。
11023 @var{ref_file} がシンボリックリンクの場合は、シンボリックリンクの所有者とグループではなく、
11024 リンクが指しているファイルの所有者とグループを使用する。
11030 処理したすべてのファイルについてメッセージを表示する。システムコール @code{lchown}
11031 を持っていないシステムで、再帰的にディレクトリ階層をたどっている際にシンボリックリンクに出会った場合、
11032 @option{--no-dereference} が有効になっていれば、
11033 「シンボリックリンクもその参照先も変更しない」というメッセージを出す。
11038 @opindex --recursive
11039 @cindex recursively changing file ownership
11040 ディレクトリとその中身の所有者を再帰的に変更する。
11042 @choptH @xref{Traversing symlinks}.
11044 @choptL @xref{Traversing symlinks}.
11046 @choptP @xref{Traversing symlinks}.
11055 # /u の所有者を "root" に変更する。
11058 # 同様だが、グループも "staff" に変更する。
11059 chown root:staff /u
11061 # /u 及び、それ以下にあるファイルの所有者を "root" に変更する。
11066 @node chgrp invocation
11067 @section @command{chgrp}: ファイルの所有グループを変更する
11070 @cindex group ownership, changing
11071 @cindex changing group ownership
11073 @command{chgrp} は、指定された各 @var{file} の所有グループを @var{group}
11074 に変更する (@var{group} は、グループ名でもグループ ID 番号でもよい)。
11075 所有グループを、存在する参照用ファイル (reference file)
11076 のグループと同じものに変更することもできる。 @xref{chown invocation}.
11081 chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@}@c
11085 @var{group} にグループ ID 番号を使用する場合は、番号の頭に @samp{+} を付ければ、
11086 ID 番号だと明示することができる。 @xref{Disambiguating names and IDs}.
11088 @chownGroupRestrictions
11090 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11098 @cindex changed files, verbosely describing
11099 グループの変更が実際に行われた各 @var{file} について、何を実行したかを詳しく表示する。
11107 @cindex error messages, omitting
11108 グループを変更できないファイルがあっても、エラーメッセージを出さない。
11110 @item --dereference
11111 @opindex --dereference
11112 @cindex symbolic links, changing owner
11114 シンボリックリンクそのものを動作の対象とせず、リンクが指しているものを動作の対象にする。
11118 @itemx --no-dereference
11120 @opindex --no-dereference
11121 @cindex symbolic links, changing group
11123 シンボリックリンクが指しているものではなく、シンボリックリンクそのものを動作の対象にする。
11124 このモードは、システムコール @code{lchown} に依存している。
11125 システムコール @code{lchown} を提供していないシステムでは、
11126 コマンドラインで指定されたファイルがシンボリックリンクだと、@command{chgrp} は実行に失敗する。
11127 なお、再帰的にディレクトリ階層をたどっている際にシンボリックリンクに出会っても、
11128 デフォルトでは診断メッセージを表示しない。ただし、@option{--verbose}
11129 を指定している場合は別なので、そちらの説明も参照していただきたい。
11131 @item --preserve-root
11132 @opindex --preserve-root
11133 @cindex root directory, disallow recursive modification
11134 ルートディレクトリ (@file{/}) を再帰的に変更しようとした時点で、実行に失敗する。
11135 @option{--recursive} オプションを指定していない場合、このオプションは効果がない。
11136 @xref{Treating / specially}.
11138 @item --no-preserve-root
11139 @opindex --no-preserve-root
11140 @cindex root directory, allow recursive modification
11141 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11142 @xref{Treating / specially}.
11144 @item --reference=@var{ref_file}
11145 @opindex --reference
11146 各 @var{file} のグループを @var{ref_file} のグループと同じものに変更する。
11147 @var{ref_file} がシンボリックリンクの場合は、
11148 シンボリックリンクのグループではなく、リンクが指しているファイルのグループを使用する。
11154 処理したすべてのファイルについてメッセージを表示する。システムコール @code{lchown}
11155 を持っていないシステムで、再帰的にディレクトリ階層をたどっている際にシンボリックリンクに出会った場合、
11156 @option{--no-dereference} が有効になっていれば、
11157 「シンボリックリンクもその参照先も変更しない」というメッセージを出す。
11162 @opindex --recursive
11163 @cindex recursively changing group ownership
11164 ディレクトリとその中身の所有グループを再帰的に変更する。
11166 @choptH @xref{Traversing symlinks}.
11168 @choptL @xref{Traversing symlinks}.
11170 @choptP @xref{Traversing symlinks}.
11179 # /u のグループを "staff" に変更する。
11182 # /u 及び、それ以下にあるファイルのグループを "staff" に変更する。
11187 @node chmod invocation
11188 @section @command{chmod}: アクセス権を変更する
11191 @cindex changing access permissions
11192 @cindex access permissions, changing
11193 @cindex permissions, changing access
11195 @command{chmod} は、名前を指定したファイルのアクセス権を変更する。
11200 chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@}@c
11204 @cindex symbolic links, permissions of
11205 @command{chmod} コマンドがシンボリックリンクのアクセス権を変更することはない。
11206 @command{chmod} システムコールがシンボリックリンクのアクセス権を変更できないからである。
11207 シンボリックリンクのアクセス権が利用されることは全くないので、この制限は問題にならない。
11208 とは言え、コマンドラインで指定された @var{file}
11209 が、シンボリックリンクだということはあるだろうが、そうした場合、@command{chmod}
11210 は、指定された各シンボリックリンクが参照しているファイルのアクセス権を変更する。
11211 それに対して、ディレクトリを再帰的にたどっている最中にシンボリックリンクに出会った場合は、
11212 @command{chmod} はそれを無視することになる。
11214 @command{chmod} の実行に成功したとき、通常ファイルの set-group-ID ビットが消えることがあるが、
11215 それは、ファイルのグループ ID が、@command{chmod} を実行したユーザの実効グループ ID
11216 や、補助グループ ID の一つに一致しなかった場合である。
11217 もっとも、そのユーザがしかるべき特権を持っている場合には、
11218 set-group-ID ビットが消えることはない。また、制限事項が他にも存在して、
11219 指定した @var{mode} 中や @var{ref_file} の、set-user-ID ビットや set-group-ID
11220 ビットが無視されることもある。そうした動作は、裏で動いている @code{chmod}
11221 システムコールのポリシーや機能次第なのだ。どうなるかよくわからない場合には、
11222 裏で動いているシステムの動作を調べればよい。
11224 @var{mode} には、ファイルの新しいモードビット (訳注: すなわち、アクセス権)
11225 を指定する。詳細については、「ファイルの許可属性」の章を参照していただきたい
11226 (@pxref{File permissions})。@var{mode} を指定するとき、@var{mode}
11227 をどうしても @samp{-} で始めたいのなら、前に @option{--} を置いた方がよい。
11228 たとえば、@samp{chmod -- -w file} のようにだ。
11229 とは言え、たいていの場合、@samp{chmod a-w file} の方が望ましい。
11230 なお、@command{chmod -w file} (@option{--} がない) が
11231 @samp{chmod a-w file} と別の動作になる場合には、警告が出る。
11233 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11241 アクセス権の変更が実際に行われた各 @var{file} について、何を実行したかを詳しく表示する。
11249 @cindex error messages, omitting
11250 アクセス権が変更できないファイルがあっても、エラーメッセージを出さない。
11252 @item --preserve-root
11253 @opindex --preserve-root
11254 @cindex root directory, disallow recursive modification
11255 ルートディレクトリ (@file{/}) を再帰的に変更しようとした時点で、実行に失敗する。
11256 @option{--recursive} オプションを指定していない場合、このオプションは効果がない。
11257 @xref{Treating / specially}.
11259 @item --no-preserve-root
11260 @opindex --no-preserve-root
11261 @cindex root directory, allow recursive modification
11262 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11263 @xref{Treating / specially}.
11269 すべての @var{file} について、何を実行し、何を実行しなかったかを詳しく
11272 @item --reference=@var{ref_file}
11273 @opindex --reference
11274 各 @var{file} のモードを @var{ref_file} のそれと同じものに変更する。
11275 @xref{File permissions}. @var{ref_file} がシンボリックリンクの場合は、
11276 シンボリックリンクのモードではなく、リンクが参照しているファイルのモードを使用する。
11281 @opindex --recursive
11282 @cindex recursively changing access permissions
11283 ディレクトリとその中身のアクセス権を再帰的に変更する。
11290 @node touch invocation
11291 @section @command{touch}: ファイルのタイムスタンプを変更する
11294 @cindex changing file timestamps
11295 @cindex file timestamps, changing
11296 @cindex timestamps, changing file
11298 @command{touch} は指定されたファイルのアクセス日時 (access time) や更新日時
11299 (modification time) を変更する。
11304 touch [@var{option}]@dots{} @var{file}@dots{}
11307 @cindex empty files, creating
11308 引数 @var{file} に存在しないファイルを指定すると、空のファイルが作成される。
11309 ただし、@option{--no-create} (@option{-c}) や @option{--no-dereference}
11310 (@option{-h}) が有効な場合は、ファイルは作成されない。
11312 引数 @var{file} が @samp{-} という文字列の場合は、特別な扱いをする。@command{touch}
11313 は、標準出力に結びついているファイルの日時を変更するのである。
11316 @command{touch} は、デフォルトではファイルのタイムスタンプを現在の日時にセットする。
11317 @command{touch} はオペランドを左から右へと順番に処理するので、
11318 生成されたタイムスタンプが、前後のオペランドで一致しないこともある。
11319 また、「現在」とはいつかを決めるのは、プラットフォーム次第である。
11320 ネットワーク・ファイルシステムを使用しているプラットフォームでは、
11321 オペレーティング・システムとファイルシステムとで別のクロックを使用していることも珍しくない。
11322 @command{touch} は通常、デフォルトではファイルシステムのクロックを使用するので、
11323 クロックのずれのために、生成されたファイルのタイムスタンプが、
11324 あるプログラムにとっては「未来」に見えたり、「過去」に見えたりすることがある。
11326 @cindex file timestamp resolution
11327 @command{touch} コマンドは、ファイルのタイムスタンプを、
11328 ユーザが指定した日時よりも精度が高くならない範囲で、表現できる最も精密な値にセットする。
11329 この値がユーザが指定した日時と違うことがあるが、それにはいくつかの理由がある。
11330 第一に、ユーザが指定した日時が、サポートされている精度を越えていることがある。
11331 第二に、ファイルシステムが、日時のタイプによって別の精度を使っていることがある。
11332 第三に、ファイルのタイムスタンプが、オペレーティング・システムのタイムスタンプとは別の精度を使っていることがある。
11333 第四に、オペレーティング・システムでタイムスタンプの更新に使用されている基本データ型が、
11334 さらに違う精度を採用していることがある。そんなわけで、理屈の上では、
11335 たとえば、ファイルシステムでは、アクセス日時には 10 マイクロ秒の精度を、更新日時には
11336 100 ナノ秒の精度を使用し、オペレーティング・システムの方では、現在の時刻にはナノ秒の精度を、
11337 @command{touch} がファイルのタイムスタンプを任意の値に設定するために使う基本データ型には、
11338 マイクロ秒の精度を使用している、そういうこともありえるのである。
11340 @cindex permissions, for changing file timestamps
11341 タイムスタンプを現在の時刻にセットする場合には、
11342 ユーザが所有していないファイルでも、書き込み権限さえ持っていれば、@command{touch}
11343 はそのタイムスタンプを変更することができる。
11344 しかし、現在の時刻以外にセットするには、ユーザはそのファイルを所有していなければならない。
11345 古いシステムの中には、制限がさらに厳しいものもある。
11346 たとえば、アクセス日時と更新日時の両方を現在の時刻にセットするとき以外、
11347 対象となるファイルを所有していなければならないといった具合だ。
11349 @command{touch} が提供するオプションを使えば、ファイルの 2 種類の日時 ---
11350 最終アクセス日時と最終更新日時 --- を変更することができるが、
11351 標準の日時には、実はそのほかに 3 番目のものがある。すなわち、inode の変更日時
11352 (inode change time) だ。これは、ファイルの @code{ctime} と呼ばれることが多い。
11353 inode の変更日時は、ファイルのメタ情報が最後に変更された日時を表している。
11354 メタ情報の変更のよくある例の一つは、ファイルのアクセス権の変更である。
11355 アクセス権の変更では、ファイルにアクセスするわけではないので、atime (アクセス日時)
11356 は変化しないし、またファイルの内容を変更するわけでもないので、mtime (更新日時)
11357 も変化しない。しかし、ファイルそのものに関する何ものかが変化しているわけであり、
11358 それはどこかに記録されなければならない。まさにそれが、inode の ctime フィールドの役割なのだ。
11359 たとえば、バックアップ・プログラムが、ファイルのアクセス権に変更があった場合も含めて、
11360 ファイルのコピーを最新に保つことができるようにするには、ctime が不可欠である。
11361 ファイルの ctime は変更するが、他の日時には影響を及ぼさない別の操作には、ファイル名の変更がある。
11362 なお、いかなる場合であれ、通常の操作では、ユーザが ctime
11363 フィールドを自分で指定する値に変更することはできない。
11364 オペーレーティングシステムやファイルシステムの中には、4 番目の日時をサポートしているものもある。
11365 すなわち、作成日時 (birth time) であり、ファイルが最初に作られた日時だ。
11366 名前からして当然だが、このタイムスタンプが変更されることはない。
11369 タイムスタンプは、タイムゾーンのルールに従うが、そのルールを指定しているのは、環境変数 @env{TZ} である。
11370 @env{TZ} が設定されていない場合は、システムのデフォルトのルールに従う。
11371 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ},
11372 libc, The GNU C Library Reference Manual}.
11373 なお、UTC のタイムスタンプを使えば、夏 (冬) 時間への移行時の曖昧さを避けることができる。
11375 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11380 @itemx --time=atime
11381 @itemx --time=access
11385 @opindex atime@r{, changing}
11386 @opindex access @r{time, changing}
11387 @opindex use @r{time, changing}
11393 @opindex --no-create
11394 存在しないファイルについて警告を出さず、ファイルの作成もしない。
11396 @item -d @var{time}
11397 @itemx --date=@var{time}
11401 現在の日時の代わりに @var{time} を使用する。@var{time} には、月の名前、
11402 タイムゾーン、@samp{am} や @samp{pm}、@samp{yesterday} なども使うことができる。
11403 たとえば、@option{--date="2004-02-27 14:19:13.489392193 +0530"} とすると、
11404 UTC より 5 時間 30 分東のタイムゾーンで、2004 年 2 月 27 日 午後
11405 2 時 19 分 13 秒 から 489,392,193 ナノ秒経過した瞬間を指定することになる。
11406 @xref{Date input formats}. 精度の高いタイムスタンプをサポートしていないファイルシステムでは、
11411 @cindex BSD @command{touch} compatibility
11412 何もしない。BSD 版の @command{touch} との互換性のためにある。
11415 @itemx --no-dereference
11417 @opindex --no-dereference
11418 @cindex symbolic links, changing time
11420 シンボリックリンクが参照しているファイルではなく、シンボリックリンクのタイムスタンプの変更を試みる。
11421 このオプションを使用した場合、空のファイルは作成されないが、
11422 ファイルが存在しないという警告まで出ないようにするには、@option{-c} オプションも併せて使用する必要がある。
11423 すべてのシステムが、シンボリックリンクのタイムスタンプの変更をサポートしているわけではない。
11424 なぜならば、POSIX 2008 までは、下層で動いているシステムに対して、
11425 そうした動作のサポートを要求していなかったからだ。
11426 また、システムによっては、シンボリックリンクは、調べるだけでアクセス日時が変わってしまうので、
11427 変更の結果が後々まで残って観察できるのは、更新日時だけだというものもある。
11428 なお、このオプションを @option{-r} オプションと一緒に使用すると、
11429 参照するタイムスタンプが、リンクが指しているファイルからではなく、
11433 @itemx --time=mtime
11434 @itemx --time=modify
11437 @opindex mtime@r{, changing}
11438 @opindex modify @r{time, changing}
11439 更新日時 (modification time) のみ変更する。
11441 @item -r @var{file}
11442 @itemx --reference=@var{file}
11444 @opindex --reference
11445 現在の日時の代わりに、参照ファイル @var{file} の日時を使用する。
11446 このオプションを @option{--date=@var{time}} (@option{-d @var{time}})
11447 オプションと組み合わせて使うと、@var{time} が相対時間で指定されている場合は、参照ファイル
11448 @var{file} の日時がその基点となるが、それ以外の場合は、@var{file} の日時は無視される。
11449 たとえば、@samp{-r foo -d '-5 seconds'} は、@file{foo} のタイムスタンプより
11450 5 秒前のタイムスタンプを指定している。
11451 @var{file} がシンボリックリンクの場合は、@option{-h} が同時に有効になっていないかぎり、
11452 参照するタイムスタンプは、シンボリックリンクの参照先から取得される。
11454 @item -t [[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]
11455 @cindex leap seconds
11456 現在の日時の代わりに、@option{-t} オプションの引数を使用する
11457 (引数の構成は、4 桁または 2 桁の年 (省略可)、月、日、時、分、秒 (秒も省略可)
11458 である)。年が 2 桁のみ指定された場合、0 @dots{} 68 の範囲の年ならば、
11459 @var{cc} は 20 であり、69 @dots{} 99 の範囲の年では、@var{cc} は 19 である。
11460 年が全く指定されない場合は、引数は今年の日付だと解釈される。
11461 閏秒に対応している例外的なシステムでは、@var{ss} が @samp{60} のこともありえる。
11465 @vindex _POSIX2_VERSION
11466 POSIX 1003.1-2001 以前のシステムでは、@command{touch}
11467 は次のような旧式の書式をサポートしている。すなわち、@option{-d}, @option{-r},
11468 @option{-t} オプションのいづれによってもタイムスタンプが指定されていず、しかも、2 個以上の
11469 @var{file} が指定されていて、最初の @var{file} が
11470 @samp{@var{mmddhhmm}[@var{yy}]} の形を持ち、それが
11471 (@var{yy} が存在するなら、それを先頭に移せば) @option{-t}
11472 オプションに対する有効な引数と見なすことができる場合に、その引数の表している年度が
11473 1969--1999 の範囲にあるならば、その引数をファイル名ではなく、
11474 他のファイルに適用する日時と解釈する、というものである。
11475 この旧式の動作は、環境変数 @env{_POSIX2_VERSION} によってコントロールすることができるが
11476 (@pxref{Standards conformance})、移植を考慮したスクリプトでは、
11477 動作がこの環境変数に依存するコマンドの使用は避けるべきである。
11478 たとえば、二通りの解釈ができる @samp{touch 12312359 main.c}
11479 を使うより、@samp{touch ./12312359 main.c} や @samp{touch -t 12312359 main.c}
11490 データをいくらでも無限に入れることのできるディスクはない。
11491 この章で説明するコマンドには、使用しているディスク容量や利用可能なディスク容量を報告するもの、
11492 それ以外のファイル情報やファイルステータス情報を報告するもの、
11493 それに、バッファの内容をディスクに書き込むものがある。
11496 * df invocation:: ファイルシステムのディスク使用量を報告する。
11497 * du invocation:: ファイルのディスク使用量を概算する。
11498 * stat invocation:: ファイルやファイルシステムのステータスを報告する。
11499 * sync invocation:: キャッシュされた書き込みを永続的な記憶装置に同期する。
11500 * truncate invocation:: ファイルサイズの短縮・伸長を行う。
11504 @node df invocation
11505 @section @command{df}: ファイルシステムのディスク使用状態を報告する
11508 @cindex file system disk usage
11509 @cindex disk usage by file system
11511 @command{df} は、ファイルシステムごとに、使用されているディスク容量と利用可能なディスクス容量を報告する。
11516 df [@var{option}]@dots{} [@var{file}]@dots{}
11519 引数を指定しないと、@command{df} は、現在マウントされているすべてのファイルシステム
11520 (ファイルシステムのタイプを問わない) について、使用されているディスク容量と、利用可能なディスク容量を報告する。
11521 引数が指定されている場合は、引数として指定された各 @var{file} が存在するファイルシステムについて報告する。
11523 通常、ディスク容量は 1024 バイトを 1 単位として表示するが、この動作は変更することができる
11524 (@pxref{Block size})。なお、小数点以下は切り上げて整数にする。
11526 bind マウントについては、引数が指定されていない場合に @command{df} が表示するのは、
11527 そのデバイスに関する統計情報のうち、ファイルシステムのリスト中で
11528 (すなわち、@var{mtab} 中で) マウントポイントの名前が最も短いものに関する情報のみである。
11529 すなわち、@option{-a} オプションが指定されていないときは、情報が重複するエントリは表示しない。
11531 同じ理屈で、ダミーの擬似デバイスについては、
11532 そのマウントポイントに対する別のマウントエントリが存在し、
11533 それが実在のブロックデバイスのものであり、しかもデバイス番号が同じ場合、
11534 @command{df} は擬似デバイスのマウントエントリの方は省略する。
11535 たとえば、ブート初期に作成される擬似ファイルシステムの @samp{rootfs} は、
11536 実際のルートデバイスがすでにマウントされていれば、デフォルトでは表示されない。
11538 @cindex disk device file
11539 @cindex device file, disk
11540 引数 @var{file} がスペシャルファイルに還元され、
11541 そのスペシャルファイル上に存在するファイルシステムが現在マウントされている場合、
11542 @command{df} が表示するのは、そのファイルシステムの利用可能な容量であって、
11543 デバイス・ノードが存在するファイルシステムの利用可能な容量ではない。また、GNU の
11544 @command{df} は、マウントされていないファイルシステムのディスク使用量を測定しようとはしない。
11545 なぜなら、ほとんどのファイルシステムにおいて、そういうことを行うには、
11546 ファイルシステムの構造について他と全く共通性のない緻密な情報が必要だからである。
11548 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11556 @cindex ignore file systems
11557 一覧表示に、ダミーのファイルシステム、重複するファイルシステム、アクセスできないファイルシステムも含める。
11558 そうしたものは、デフォルトでは省略されるのである。
11559 ダミーのファイルシステムというのは、@samp{/proc} のような特殊用途の擬似ファイルシステムがその典型であり、
11561 重複するファイルシステムとは、ローカルやリモートのファイルシステムで、
11562 ローカルのファイル階層の別の場所にもマウントされているものや、bind マウントされたものである。
11563 アクセスできないファイルシステムとは、マウントされているが、
11564 その後そのマウントポイントに他のファイルシステムが二重にマウントされたものや、
11565 あるいは、マウントポイントのパーミッションなど、他の理由でアクセスできなくなっているものを言う。
11567 @item -B @var{size}
11568 @itemx --block-size=@var{size}
11570 @opindex --block-size
11571 @cindex file system sizes
11572 @var{size} によって単位の大きさを変更してから、サイズを表示する (@pxref{Block size})。
11573 たとえば、@option{-BG} と指定すれば、1,073,741,824 バイトを 1 単位として、サイズを表示する。
11579 @option{--si} オプションと同じである。
11585 @cindex inode usage
11586 ブロックの使用量ではなく、inode の使用情報を一覧表示する。
11587 inode (index node の略称) には、ファイルの所有者、許可属性、タイムスタンプ、
11588 ディスク上の位置といった、ファイルに関する情報が含まれている。
11592 @cindex kibibytes for file system sizes
11593 デフォルトのブロックサイズがどうなっていようと、1 ブロック 1024
11594 バイトでサイズを表示する (@pxref{Block size})。このオプションは
11595 @option{--block-size=1K} に等しい。
11601 @cindex file system types, limiting output to certain
11602 一覧表示するのをローカルのファイルシステムに限定する。
11603 デフォルトでは、リモートのファイルシステムも表示される。
11607 @cindex file system space, retrieving old data more quickly
11608 使用量に関するデータを取得する前に @code{sync} システムコールを実行しない。
11609 そのため、多数のディスクを搭載しているシステムでは、@command{df}
11610 の実行速度が目に見えて向上するが、システムによっては
11611 (特に SunOS では)、出力結果がほんの少し古いものになるかもしれない。
11615 @itemx --output[=@var{field_list}]
11617 @var{field_list} で定義した出力フォーマットを使用する。@var{field_list}
11618 を省略した場合は、すべてのフィールドを表示する。
11619 後者の場合、列の順序は、以下に挙げているフィールドの説明の順序と同じである。
11621 @option{--output} オプションは、@option{-i}, @option{-P}, @option{-T}
11622 のどのオプションとも一緒に使うことができない。
11624 @var{field_list} は、@command{df} の出力に含まれることになる、コンマで区切った列のリストであり、
11625 このリストによって出力する列の順序を制御することができる。
11626 従って、各フィールドは任意の場所に置くことができるが、一度しか使うことができない。
11628 @var{field_list} で使える有効なフィールドの名前は、次のものである。
11631 マウントポイントにマウントする対象。たいていはデバイス。
11642 @var{iused} を @var{itotal} で割ったパーセント表示。
11651 @var{used} を @var{size} で割ったパーセント表示。
11654 ファイル名をコマンドラインで指定した場合、そのファイル名。
11659 ブロックや inode の統計情報を表すフィールドは、他の場合と同じく、
11660 @option{-h} のような数値の大きさを調整するオプションの影響を受ける。
11662 @var{field_list} の定義は、複数の @option{--output}
11663 オプションを使用して、分割しても構わない。
11667 # TARGET (すなわち、マウントポイント) に続けて、そのブロックや
11668 # inode の使用状態をパーセントで表示する。
11669 df --out=target --output=pcent,ipcent
11671 # 表示できるすべてのフィールドを表示する。
11677 @itemx --portability
11679 @opindex --portability
11680 @cindex one-line output format
11681 @cindex POSIX output format
11682 @cindex portable output format
11683 @cindex output format, portable
11684 POSIX の出力形式を使用する。デフォルトの形式に似ているが、次の点で異なっている。
11688 各ファイルシステムついての情報が、常にぴったり 1 行で表示され、
11689 マウントされるデバイスが、それのみで 1 行を占めることがない。
11690 そのため、マウントされるデバイスの名前の長さが 20 字を越えると
11691 (たとえば、ネットワーク・マウントの場合にそういうことがありそうだ)、
11695 ヘッダ行の項目名が、POSIX に準拠したものになる。
11698 デフォルトのブロックサイズや出力の書式が、環境変数
11699 @env{DF_BLOCK_SIZE}, @env{BLOCK_SIZE}, @env{BLOCKSIZE} の影響を受けなくなる。
11700 とは言え、デフォルトのブロックサイズについては、
11701 @env{POSIXLY_CORRECT} の影響だけは、やはり受ける。すなわち、
11702 @env{POSIXLY_CORRECT} が設定されていれば、ブロックサイズは
11703 512 バイトであり、さもなければ 1024 バイトである。 @xref{Block size}.
11710 @cindex file system space, retrieving current data more slowly
11711 使用量に関するデータを取得する前に `sync' システムコールを実行する。
11712 システムによっては (特に SunOS では)、そうすることでより最近の結果が得られるが、
11713 一般的に言って、このオプションを使用すると、@command{df} の実行速度がかなり低下する。
11714 ファイルシステムをたくさんマウントしている場合や、
11715 作業が頻繁に行われているファイルシステムでは、とりわけ遅くなる。
11719 @cindex grand total of disk size, usage and available space
11720 すべての引数を処理した後で、全引数についての総計を表示する。
11721 このオプションを使用すれば、ディスクの容量、使用した量、使用可能な量について、
11722 リストされているすべてのデバイスを合わせた合計を知ることができる。
11723 引数が一つも指定されていない場合は、@command{df}
11724 は使用可能な容量の合計に無関係なファイルシステムを除外しようとして、できるだけのことをする。
11725 重複するリモート・ファイルシステムを計算に入れないといったことをするのである。
11727 総計の行において @command{df} は @var{source} の列に @samp{"total"} と表示し、
11728 @var{target} の列に @samp{"-"} という文字を表示する (訳注: @var{source},
11729 @var{target} などの列については、@option{--output} の説明を参照していただきたい)。
11730 @var{source} の列が存在しない場合は、@var{target} の列が存在すれば、
11731 @command{df} は @var{target} の列に @samp{"total"} と表示する。
11733 @item -t @var{fstype}
11734 @itemx --type=@var{fstype}
11737 @cindex file system types, limiting output to certain
11738 一覧表示するファイルシステムを @var{fstype} というタイプに限定する。
11739 @option{-t} オプションを複数回使うことによって、複数のタイプのファイルシステムを指定することができる。
11740 デフォルトでは、いかなるタイプのファイルシステムも除外しない。
11743 @itemx --print-type
11745 @opindex --print-type
11746 @cindex file system types, printing
11747 各ファイルシステムのタイプを表示する。このとき表示されるタイプは、
11748 @option{-t} や @option{-x} オプションを使って、一覧表示に含めたり、
11749 一覧表示から除外したりできるタイプと同じものである。
11750 すなわち、表示されるタイプは何であれ、システムによってサポートされているということだ。
11751 以下に、よく見受けられるタイプの名前をいくつか挙げておく
11752 (当然ながら、ここに挙げるものがすべてではない)。
11757 @cindex NFS file system type
11758 NFS ファイルシステム。すなわち、ネットワーク越しにほかのマシンからマウントしているファイルシステム。
11759 このタイプ名は、あらゆるシステムで共通して使われているようである。
11761 @item ext2@r{, }ext3@r{, }ext4@r{, }xfs@r{, }btrfs@dots{}
11762 @cindex Linux file system types
11763 @cindex local file system types
11764 @opindex ext2 @r{file system type}
11765 @opindex ext3 @r{file system type}
11766 @opindex ext4 @r{file system type}
11767 @opindex xfs @r{file system type}
11768 @opindex btrfs @r{file system type}
11769 ローカルでマウントしているハードディスクのファイルシステム。
11770 (ローカルのマウントでは、システムが複数のタイプをサポートしていることもある。
11773 @item iso9660@r{, }cdfs
11774 @cindex CD-ROM file system type
11775 @cindex DVD file system type
11776 @cindex ISO9660 file system type
11777 @opindex iso9660 @r{file system type}
11778 @opindex cdfs @r{file system type}
11779 CD や DVD ドライブのファイルシステム。HP-UX は @samp{cdfs} を使用し、
11780 ほかのシステムのほとんどは @samp{iso9660} を使用している。
11783 @cindex NTFS file system
11784 @cindex DOS file system
11785 @cindex MS-DOS file system
11786 @cindex MS-Windows file system
11787 @opindex ntfs @r{file system file}
11788 @opindex fat @r{file system file}
11789 MS-Windows や MS-DOS で使用されるファイルシステム。
11793 @item -x @var{fstype}
11794 @itemx --exclude-type=@var{fstype}
11796 @opindex --exclude-type
11797 一覧表示するファイルシステムを @var{fstype} というタイプ以外のものに限定する。
11798 @option{-x} オプションを複数回使うことによって、複数のタイプのファイルシステムを除外することができる。
11799 デフォルトでは、いかなるタイプのファイルシステムも除外しない。
11802 無視される。System V 版の @command{df} との互換のためにある。
11806 @command{df} がインストールされるのは、利用可能なマウントテーブルを持つシステムだけである。
11807 従って、移植を考慮したスクリプトは、その存在を当てにしない方がよい。
11809 @exitstatus 実行に失敗しても、全く何も出力されないこともある。
11810 そういうときに、たとえば、ディレクトリ @var{dir} が @samp{ext3} や
11811 @samp{reiserfs} というタイプのファイルシステム上にあるかどうかを調べるには、
11812 @samp{df -t ext3 -t reiserfs @var{dir}} といったコマンドを実行して、
11815 ファイルシステムのタイプを判断するには、ファイルシステムのリスト
11816 (@var{mtab}) が必要になる。従って、実行の失敗には、
11817 ファイルシステムのリストを読み込むことができないときに、ファイル名を示す引数とともに
11818 @option{-a}, @option{-l}, @option{-t}, @option{-x}
11819 といったオプションが一つ以上使われた場合が含まれる。
11822 @node du invocation
11823 @section @command{du}: ファイルのディスク使用量を概算する
11826 @cindex file space usage
11827 @cindex disk usage for files
11829 @command{du} は、指定した一連のファイルのディスク使用量を報告する。
11830 引数がディレクトリの場合は、サブディレクトリごとのディスク使用量も報告する。
11835 du [@var{option}]@dots{} [@var{file}]@dots{}
11838 引数を指定しないと、@command{du} は、カレントディレクトリのディスク使用量を報告する。
11839 通常、ディスク使用量は 1024 バイトを 1 単位として表示するが、
11840 この動作は変更することができる (@pxref{Block size})。
11841 なお、小数点以下は、切り上げて整数にする。
11843 2 個以上のハードリンクが同一のファイルを指している場合は、そのうちの
11844 1 個のみが計算の対象になる。引数 @var{file} の順番によって、どのリンクが計算の対象になるかが変わってくるので、
11845 引数の順番を変更すると、@command{du} が出力する数値や項目が変化するかもしれない。
11847 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11857 ディレクトリだけでなく、すべてのファイルについて使用量を表示する。
11859 @item --apparent-size
11860 @opindex --apparent-size
11861 ディスクの使用量ではなく、見かけのサイズを表示する。
11862 ファイルの見かけのサイズとは、通常ファイルに対して @code{wc -c}、
11863 あるいは、もっと普通に @code{ls -l --block-size=1} や @code{stat --format=%s}
11864 を実行したときに返されるバイト数である。
11865 たとえば、@samp{zoo} という単語を改行を付けずに書き込んだファイルなら、
11866 当然ながら、見かけのサイズは 3 になる。
11867 だが、そうした小さなファイルも、そのファイルが存在するファイルシステムのタイプと設定次第で、
11868 0 から 16 KiB、あるいは、それ以上のディスクスペースを占有するかもしれないのだ。
11869 もっとも、穴空きファイル (sparse file) の場合は事情が別である。たとえば、
11872 dd bs=1 seek=2GiB if=/dev/null of=big
11876 上記のコマンドで作成した穴空きファイルは、見かけのサイズこそ 2 GiB
11877 だが、最近のほとんどのシステムでは、実際に使用するディスクスペースは、
11880 @item -B @var{size}
11881 @itemx --block-size=@var{size}
11883 @opindex --block-size
11885 @var{size} によって単位の大きさを変更してから、サイズを表示する (@pxref{Block size})。
11886 たとえば、@option{-BG} と指定すれば、1,073,741,824 バイトを 1 単位として、サイズを表示する。
11892 @code{--apparent-size --block-size=1} と同じ。
11898 @cindex grand total of disk space
11899 すべての引数を処理した後で、全引数からなる総計を表示する。
11900 このオプションを使用すれば、指定したファイルやディレクトリについてディスク使用量の合計を知ることができる。
11903 @itemx --dereference-args
11905 @opindex --dereference-args
11906 コマンドラインで引数に指定されたシンボリックリンクの参照を行う。
11907 コマンドライン引数以外のシンボリックリンクには影響がない。
11908 このオプションは、@file{/usr/tmp} のような、
11909 シンボリックリンクであることが多いディレクトリのディスク使用量を調べるときに、重宝である。
11911 @item -d @var{depth}
11912 @itemx --max-depth=@var{depth}
11913 @opindex -d @var{depth}
11914 @opindex --max-depth=@var{depth}
11915 @cindex limiting output of @command{du}
11916 ディレクトリ階層の基点 (訳注: 要するに、コマンドラインで指定されたディレクトリ)
11917 から最大 @var{DEPTH} 段階下がったところまでにある各ディレクトリについて、
11918 ディスク使用量の合計を表示する (@option{--all}
11919 オプションが付いているときは、ファイルについても表示する)。
11920 基点自体は段階 0 なので、@code{du --max-depth=0} は @code{du -s}
11923 @c --files0-from=FILE
11924 @filesZeroFromOption{du,, @ @option{--total} (@option{-c}) オプションを使用した結果}
11928 @option{--dereference-args} (@option{-D}) と同じである。
11934 @cindex inode usage, dereferencing in @command{du}
11935 ブロックの使用状態ではなく、inode の使用状態をリストする。
11936 このオプションが役に立つのは、多くのファイルを収納しているために、
11937 ファイルシステムの inode スペースを大量に消費しているディレクトリを探すときである
11938 (@command{df} の @option{--inodes} オプションも参照すること)。
11939 このオプションは、@option{-a}, @option{-c}, @option{-h}, @option{-l},
11940 @option{-s}, @option{-S}, @option{-t}, @option{-x}
11941 といったオプションと組み合わせて使ってもよい。
11942 しかし、ブロックサイズ関係の他のオプション、たとえば、@option{-b}, @option{-m},
11943 @option{--apparent-size} などを渡しても、無視される。
11947 @cindex kibibytes for file sizes
11948 デフォルトのブロックサイズがどうなっていようと、1 ブロック 1024
11949 バイトでサイズを表示する (@pxref{Block size})。このオプションは
11950 @option{--block-size=1K} に等しい。
11953 @itemx --dereference
11955 @opindex --dereference
11956 @cindex symbolic links, dereferencing in @command{du}
11957 シンボリックリンクの参照を行う (リンク自体のディスク使用量ではなく、
11958 リンクが指しているファイルやディレクトリの使用量を表示する)。
11961 @itemx --count-links
11963 @opindex --count-links
11964 @cindex hard links, counting in @command{du}
11966 すなわち、(ハードリンクとして) 前に現れたことがあっても、計算に入れる。
11970 @cindex mebibytes for file sizes
11971 デフォルトのブロックサイズを変更し、1 ブロック 1,048,576
11972 バイトのブロック数でサイズを表示する (@pxref{Block size})。
11973 このオプションは、@option{--block-size=1M} と同じである。
11976 @itemx --no-dereference
11978 @opindex --no-dereference
11979 @cindex symbolic links, dereferencing in @command{du}
11980 @command{du} が出会った各シンボリックリンクについて、シンボリック自体の使用ディスクスペースを計算する。
11983 @itemx --separate-dirs
11985 @opindex --separate-dirs
11986 通常、(@option{--summarize} オプションを使用しない場合の)
11987 @command{du} の出力において、@var{d} というディレクトリ名の隣に表示されるサイズは、
11988 @var{d} 以下にあるすべてのエントリのサイズの合計に、
11989 @var{d} 自体のサイズを加えたものである。それに対して、@option{--separate-dirs}
11990 オプションを指定すると、@var{d} というディレクトリ名に対して報告されるサイズは、
11991 いかなるサブディレクトリのサイズも含まないものになる。
11998 @opindex --summarize
11999 各引数についてその合計ディスク使用量のみを表示する (訳注: すなわち、
12000 引数がディレクトリの場合、そのサブディレクトリごとの情報まで表示しない)。
12002 @item -t @var{size}
12003 @itemx --threshold=@var{size}
12005 @opindex --threshold
12006 指定された @var{size} を目安にして、表示する対象を取捨する。@var{size} は、
12007 通常モードではディスク使用量を指し (@pxref{Block size})、@option{--inodes}
12008 オプションと組み合わせた場合は inode 使用数を指す。
12009 (訳注: ディスク使用量の目安として使う場合、@var{size} の単位は、デフォルトではバイトである。
12010 もちろん、K, M, G などの接尾辞を付けることもできる。)
12012 @var{size} が正の数ならば、@command{du} はサイズがそれ以上である対象のみを表示する。
12014 @var{size} が負の数ならば、@command{du} はサイズがそれ以下である対象のみを表示する。
12016 GNU の @command{find} を使えば、特定のサイズのファイルを見つけることができる。
12017 それに対して、@command{du} の @option{--threshold} を使うと、
12018 ディレクトリも指定サイズに基づいて篩い分けることができるのである。
12020 @option{--threshold} オプションは、@option{--apparent-size}
12021 オプションと組み合わせることができるのに留意していただきたい。
12022 その場合は、見かけのサイズに基づいて表示対象を絞り込むことになる。
12024 @option{--threshold} オプションは、@option{--inodes} オプションと組み合わせることもできる。
12025 その場合は、inode 数に基づいて表示対象を絞り込むことになる。
12027 200 メガバイト以上のサイズを持つディレクトリを捜すには、
12028 @option{--threshold} オプションを次のように使えばよいだろう。
12031 du --threshold=200MB
12034 見かけのサイズが 500 バイト以下のディレクトリやファイルを捜すには
12035 (@option{-a} を使っていることに注意)、@option{--threshold} を次のように使えばよい。
12038 du -a -t -500 --apparent-size
12041 ルートファイルシステム上にあるディレクトリで、20000 以上の inode
12042 を使用しているものを、/ 以下のディレクトリ階層で捜すには、
12043 @option{--threshold} を次のように使えばよい。
12046 du --inodes -x --threshold=20000 /
12052 @cindex last modified dates, displaying in @command{du}
12053 ディレクトリやそのサブディレクトリに存在するファイルについて表示する際に、
12054 その最終更新日時 (modification time) も表示する。
12056 (訳注: 一つ留意していただきたいことがある。ディレクトリのタイムスタンプについては、
12057 そのディレクトリ以下にあるファイルのうち (そのディレクトリ直下のファイルとはかぎらない)、
12058 最終更新日時がもっとも新しいファイルのタイムスタンプと同一のものが表示される。
12059 すなわち、ディレクトリのタイムスタンプは、@samp{ls -l} で表示されるものとは違うことがあるわけだ。
12060 このオプションや、そのバリエーションである次の二つのオプションは、
12061 あるディレクトリ以下を最後に使用したのはいつかを知るのに便利である。)
12064 @itemx --time=status
12067 @opindex ctime@r{, show the most recent}
12068 @opindex status time@r{, show the most recent}
12069 @opindex use time@r{, show the most recent}
12070 ディレクトリ以下にあるファイルについて表示する際に、最終更新日時ではなく、
12071 最終ステータス変更日時 (inode 中の @samp{ctime}) を表示する。
12073 (訳注: 原文でもこの三つのオプションを等価なものとして並べているが、
12074 訳者としては、@option{--time=use} と等価なのは、@option{--time=ctime} ではなく、
12075 @option{--time=atime} ではないかと思う。ご自分で確かめていただきたい。)
12078 @itemx --time=access
12080 @opindex atime@r{, show the most recent}
12081 @opindex access time@r{, show the most recent}
12082 ディレクトリ以下にあるファイルについて表示する際に、最終更新日時ではなく、
12083 最終アクセス日時 (inode 中の @samp{atime}) を表示する。
12085 @item --time-style=@var{style}
12086 @opindex --time-style
12088 タイムスタンプを @var{style} 形式で表示する。このオプションは、@option{--time}
12089 オプションと併せて指定したときにのみ効果がある。@var{style} は以下の一つでなければならない。
12092 @item +@var{format}
12094 @var{format} を使って、タイムスタンプを表示する。その場合、@var{format}
12095 は、@command{date} コマンドの書式引数と同じように解釈される (@pxref{date invocation})。
12096 たとえば、@option{--time-style="+%Y-%m-%d %H:%M:%S"} と指定すると、
12097 @command{du} の表示するタイムスタンプは、
12098 @samp{2002-03-30 23:45:56} のようになる。@command{date} の場合と同様、
12099 @var{format} の解釈は、@env{LC_TIME} ロケール・カテゴリの影響を受ける。
12103 すなわち、ISO 8601 の日付、時刻、タイムゾーンという構成要素を
12104 nanosecond (10 億分の 1 秒) の精度で使用するわけだ。
12105 一例を挙げると、@samp{2002-03-30 23:45:56.477817180 -0700}
12106 といった表示になる。この形式は、@samp{+%Y-%m-%d %H:%M:%S.%N %z} と同じである。
12109 ISO 8601 の日付と時刻の構成要素を分の単位まで表示する。たとえば、
12110 @samp{2002-03-30 23:45}。このタイムスタンプは、@samp{full-iso} タイム
12111 スタンプより短く、日常作業にはたいてい十分である。この形式は
12112 @samp{+%Y-%m-%d %H:%M} と同じである。
12115 タイムスタンプに ISO 8601 書式の日付を表示する。たとえば、
12116 @samp{2002-03-30} といった具合である。この形式は、@samp{+%Y-%m-%d} と同じである。
12120 @option{--time-style} オプションのデフォルト値は、
12121 環境変数 @env{TIME_STYLE} を使って指定することができる。
12122 @env{TIME_STYLE} が設定されていない場合、デフォルトの形式は @samp{long-iso} である。
12123 @command{ls} と共通の @env{TIME_STYLE} を使えるようにするため、
12124 @samp{+} で始まる @env{TIME_STYLE} の値が、改行を含んでいる場合は、
12125 改行以後の文字は無視されることになる。
12126 また、@env{TIME_STYLE} の値が @samp{posix-} で始まる場合、@samp{posix-} は無視される。
12127 さらに、@env{TIME_STYLE} の値が @samp{locale} の場合、@env{TIME_STYLE} は無視される。
12129 @item -X @var{file}
12130 @itemx --exclude-from=@var{file}
12131 @opindex -X @var{file}
12132 @opindex --exclude-from=@var{file}
12133 @cindex excluding files from @command{du}
12134 @option{--exclude} に似ているが、除外するパターンを @var{file} から 1 行につき
12135 1 パターン読み込む点が違う。@var{file} が @samp{-} なら、パターンを標準入力から読み込む。
12137 @item --exclude=@var{pattern}
12138 @opindex --exclude=@var{pattern}
12139 @cindex excluding files from @command{du}
12140 再帰的な処理を行っているとき、@var{pattern} にマッチするサブディレクトリやファイルをスキップする。
12141 たとえば、@code{du --exclude='*.o'} と指定すると、名前が @samp{.o}
12142 で終わるファイルを除外することになる。
12145 @itemx --one-file-system
12147 @opindex --one-file-system
12148 @cindex one file system, restricting @command{du} to
12149 処理される引数が存在するファイルシステムとは別のファイルシステムにあるディレクトリをスキップする。
12153 @cindex NFS mounts from BSD to HP-UX
12154 BSD システムでは、HP-UX システムから NFS マウントしているファイルについて、
12155 @command{du} は正確な値の半分のサイズを報告する。逆に、HP-UX システムでは、
12156 BSD システムから NFS マウントしているファイルについて、@command{du}
12157 は正確な値の 2 倍のサイズを報告する。これは HP-UX にある欠陥のせいであり、
12158 HP-UX の @command{du} プログラムも、そのとばっちりを受けているのである。
12163 @node stat invocation
12164 @section @command{stat}: ファイルやファイルシステムの状態を報告する
12167 @cindex file status
12168 @cindex file system status
12170 @command{stat} は指定されたファイルに関する情報を表示する。
12175 stat [@var{option}]@dots{} [@var{file}]@dots{}
12178 オプションなしで実行すると、@command{stat}
12179 は指定されたファイルについてすべての情報を報告する。また、@command{stat}
12180 を使って、指定されたファイルが存在しているファイルシステムの情報を報告させることもできる。
12181 ファイルがリンクの場合は、リンクが指しているファイルについて情報を提供させることも可能だ。
12183 @mayConflictWithShellBuiltIn{stat}
12188 @itemx --dereference
12190 @opindex --dereference
12191 @cindex symbolic links, dereferencing in @command{stat}
12192 @command{stat} がシンボリックリンクを処理する方法を変更する。
12193 このオプションを付けると、@command{stat} は、引数中の各シンボリックリンクが参照しているファイルを操作の対象にする。
12194 このオプションがないと、@command{stat} が対象にするのは、引数のシンボリックリンクそのものになる。
12197 @itemx --file-system
12199 @opindex --file-system
12200 @cindex file systems
12201 指定されたファイルそのものについての情報ではなく、
12202 そのファイルが存在しているファイルシステムについての情報を報告する。
12203 このオプションを指定すると、自動的に @option{-L} オプションも指定される。
12206 @itemx --format=@var{format}
12208 @opindex --format=@var{format}
12209 @cindex output format
12210 デフォルトの書式の代わりに、@var{format} を使用する。
12211 @var{format} の末尾には自動的に改行が付けられるので、
12212 下記のようなコマンドを 2 個以上の @var{file} オペランドに対して実行すると、
12213 各オペランドあたり 1 行の出力を生じることになる。
12215 $ stat --format=%d:%i / /usr
12220 @item --printf=@var{format}
12221 @opindex --printf=@var{format}
12222 @cindex output format
12223 デフォルトの書式の代わりに、@var{format} を使用する。@option{--format}
12224 に似ているが、バックスラッシュ・エスケープを解釈して変換する。
12225 また、行末に自動的に改行を付けることもしない。そこで、改行がしたければ、
12226 @var{format} 中で @samp{\n} を指定する必要がある。
12227 @option{--printf} を使って @file{/} と @file{/usr} のデバイス番号と
12228 inode 番号を表示するには、こんなふうにする。
12230 $ stat --printf='%d:%i\n' / /usr
12239 @cindex terse output
12240 情報を簡潔な形式で表示する。他のプログラムで解析するときに都合がよい。
12242 下記の二つのコマンドの出力は全く同じである。また、この @option{--format}
12243 は、デフォルトの出力書式で (もっと詳細な形で) 表示される項目と同じものを指定している。
12244 もっとも、SELinux セキュリティ・コンテキストが有効になっている場合には、
12245 このフォーマット文字列の末尾に、もう一つ @samp{%C} を付けることになるだろうが。
12247 $ stat --format="%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" ...
12251 @option{--file-system} モードのときの簡潔形式の出力を上と同じように説明的に表現すると、
12253 $ stat -f --format="%n %i %l %t %s %S %b %f %a %c %d" ...
12254 $ stat -f --terse ...
12258 @option{--format} や @option{--printf} の @var{format} 中で、
12259 ファイルに対して使用できる書式指定子には以下のものがある。
12262 @item %a - 8 進数で表現したアクセス権 (printf のフラグ @samp{#} と @samp{0} に留意)
12263 @item %A - 人間にわかりやすい形式で表現したアクセス権
12264 @item %b - 割り当てられているブロック数 (@samp{%B} を参照)
12265 @item %B - @samp{%b} の報告で使われる 1 ブロックのバイト数
12266 @item %C - ファイルの SELinux セキュリティ・コンテキスト (取得できる場合)
12267 @item %d - 10 進数で表現したデバイス番号
12268 @item %D - 16 進数で表現したデバイス番号
12269 @item %f - 16 進数で表現した Raw モード
12271 @item %g - 所有グループの ID 番号
12274 @item %i - Inode 番号
12275 @item %m - マウントポイント (下記の説明を参照)
12277 @item %N - 引用符で囲んだファイル名。シンボリックリンクなら、参照先も表示 (下記参照)
12278 @item %o - I/O 転送サイズの最適値の提案
12279 @item %s - ファイル全体の大きさ。サイズはバイト数
12280 @item %t - 16 進数で表現したメジャー・デバイス番号 (下記参照)
12281 @item %T - 16 進数で表現したマイナー・デバイス番号 (下記参照)
12282 @item %u - 所有者のユーザ ID 番号
12283 @item %U - 所有者のユーザ名
12284 @item %w - ファイルの作成日時 (the birth time)。不明の場合は @samp{-} を表示
12285 @item %W - Unix 紀元からの秒数で表したファイルの作成日時、または @samp{0}
12286 @item %x - 最終アクセス日時 (atime)
12287 @item %X - Unix 紀元からの秒数で表した最終アクセス日時
12288 @item %y - 最終データ更新日時 (mtime)
12289 @item %Y - Unix 紀元からの秒数で表した最終データ更新日時
12290 @item %z - 最終ステータス変更日時 (ctime)
12291 @item %Z - Unix 紀元からの秒数で表した最終ステータス変更日時
12294 @samp{%a} という書式はファイルのモードを 8 進数で表示するので、
12295 printf の @samp{#} と @samp{0} フラグを使って、出力の先頭のゼロ埋めをコントロールするとよい。
12296 たとえば、先頭を 0 で埋めて、表示を少なくとも 3 桁にし、それより大きい数値も、
12297 8 進数であることをはっきりさせるには、@samp{%#03a} を使えばよい。
12299 @samp{%N} の書式は、環境変数 @env{QUOTING_STYLE} によって設定することができる。
12300 その環境変数が設定されていない場合、デフォルトの値は、@samp{shell-escape}
12301 である。使用できるクォーティングスタイルには、以下のものがある。
12304 @samp{%t} や @samp{%T} という書式指定子は、stat(2) 構造体の st_rdev メンバ
12305 に対応するものであり、従って、キャラクタ・スペシャルファイルや
12306 ブロック・スペシャルファイルに対してしか動作が定義されていない。
12307 システムやファイルタイプによっては、st_rdev が他のものを表現する
12310 @samp{%W}, @samp{%X}, @samp{%Y}, @samp{%Z} では、ピリオドに続けて精度を書くことで、
12311 小数点以下何桁まで表示するかを指定することができる。たとえば、@samp{%.3X}
12312 と指定すると、最終アクセス日時がミリ秒の精度で出力される。ピリオド
12313 だけ指定して、精度を省略すると、@command{stat} は 9 桁を使用する。従って、
12314 @samp{%.X} は @samp{%.9X} と同じことになるわけだ。なお、余分な精度を捨てる際、
12315 タイムスタンプは負の無限大方向に切り下げられる (訳注: 平たく言うと、
12316 タイムスタンプのような正の数値の場合、指定された桁数より下の部分は切り捨てられるということ。
12321 $ stat -c '[%015Y]' /usr
12324 $ stat -c '[%15Y]' /usr
12326 $ stat -c '[%-15Y]' /usr
12329 $ stat -c '[%.3Y]' /usr
12331 $ stat -c '[%.Y]' /usr
12332 [1288929712.114951834]
12335 @samp{%m} によって表示されるマウントポイントは、@command{df}
12336 によるマウントポイントの出力とほぼ同じである。ただし、以下の点で異なっている。
12339 stat はデフォルトでは、シムリンクの参照を行わない
12340 (そのためには、@option{-L} を指定する必要がある)。
12342 引数としてデバイスノードが指定された場合、
12343 stat はファイルシステムのリスト中にそのノードを捜し求めたりはせず、
12344 デバイスノードそのものを動作の対象にする
12345 (訳注: すなわち、そのデバイス上に存在するファイルシステムのマウントポイントではなく、
12346 デバイスノードそのもののマウントポイントを表示する)。
12349 bind マウントされているファイルについては、
12350 stat はそのファイルが載っているデバイスの最初のマウントポイントではなく、
12351 bind マウントで指定された別名 (訳注: 原文は alias。@samp{mount --bind olddir newdir}
12352 における newdir のことか) の方を出力する。出力に変化がなくなるまで、
12353 再帰的に stat を呼び出せば、現在ベースになっているマウントポイントを知ることができる。
12355 (訳注: 訳者には意味不明。「現在ベースになっているマウントポイント
12356 (the current base mount point)」が、上記訳注の newdir のことなら、
12357 stat を再帰的に呼び出すまでもない。@samp{stat -c "%m" newdir/@var{FILE}} は、
12358 newdir を表示する。また the current base mount point が「根底にある
12359 (すなわち、デバイスを最初にマウントした) マウントポイント」のことなら、
12360 stat を再帰的に呼び出しても、それを突き止めることはできない。
12361 ひょっとすると、書式指定子に @samp{%m} が追加された coreutils-8.6 から
12362 coreutils-8.20 あたりまでの stat を
12363 linux-2.6 時代の古いカーネルと組み合わせて使ったときの動作を言っているのかもしれない。
12364 その場合は、@samp{stat -c "%m" newdir/@var{FILE}} は上記の olddir を出力するようだ。
12365 従って、そうした組み合わせでは、stat を再帰的に実行することで、
12366 最初にデバイスをマウントしたときのマウントポイントを知ることができる。)
12369 ファイルシステムの情報をリストする際には (すなわち、@option{--file-system}
12370 (@option{-f}) 使用時には)、書式指定子の別の一群を使わなければならない。
12373 @item %a - スーパーユーザ以外にも利用できる未使用ブロック数
12374 @item %b - ファイルシステムの総データブロック数。
12375 @item %c - ファイルシステムの総 inode 数
12376 @item %d - ファイルシステムの未使用 inode 数
12377 @item %f - ファイルシステムの未使用ブロック数
12378 @item %i - 16 進数で表現したファイルシステム ID
12379 @item %l - ファイル名の最大長
12381 @item %s - ブロックサイズ (高速転送用)
12382 @item %S - 基本ブロックサイズ (ブロック計算用)
12383 @item %t - 16 進数で表現したファイルシステムのタイプ
12384 @item %T - 人間にわかりやすい形式で表現したファイルシステムのタイプ
12388 タイムスタンプは、タイムゾーンのルールに従って表示されるが、
12389 そのルールを指定しているのは、環境変数 @env{TZ} である。
12390 @env{TZ} が設定されていない場合は、システムのデフォルトのルールに従って表示される。
12391 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
12392 The GNU C Library Reference Manual}.
12397 @node sync invocation
12398 @section @command{sync}: キャッシュされた書き込みを永続的な記憶装置に同期する
12401 @cindex synchronize disk and memory
12402 @cindex Synchronize cached writes to persistent storage
12404 @command{sync} は、メモリ中のファイルやファイルシステムを永続的な記憶装置に同期する。
12409 sync [@var{option}] [@var{file}]@dots{}
12412 @cindex superblock, writing
12413 @cindex inodes, written buffered
12414 @command{sync} は、メモリ中にバッファされているデータがあれば、それをディスクに書き出す。
12415 そうした書き出しには、スーパーブロックの変更、inode の変更、遅延読み書きを含むことができる (が、それだけに止まらない)。
12416 この機能はカーネルによって実装されていなければならない。@command{sync}
12417 プログラムは、システムコールの @code{sync}, @code{syncfs}, @code{fsync},
12418 @code{fdatasync} を実行する以外、何もしないのである。
12420 @cindex crashes and corruption
12421 カーネルは、(比較的遅い) ディスクの読み書きをできるだけしないで済ますために、
12422 メモリにデータを保持している。このことによって、動作速度が向上するが、
12423 コンピュータがクラッシュした場合、データが失われたり、
12424 ファイルシステムが壊れたりという結果が生じかねない。@command{sync} コマンドは、
12425 カーネルに命じて、メモリ上にあるデータを永続的な記憶装置に書き出させるのである。
12427 引数を指定すると、デフォルトでは指定されたファイルのみが
12428 fsync(2) システムコールを使って同期されることになる。
12430 1 個以上のファイルを指定した場合は、以下のオプションを使って同期方法を変更することができる。
12431 使用できるオプションについては、次の章も参照していただきたい。
12432 @ref{Common options}.
12438 fdatasync(2) を使用して、ファイルのデータと、ファイルシステムの整合性を維持するのに必要なメタデータのみを同期する。
12441 @itemx --file-system
12442 @opindex --file-system
12443 指定したファイルが存在するファイルシステムに対して I/O 待ちになっているすべてのデータを
12444 syncfs(2) システムコールを使用して、同期する。
12445 注意していただきたいが、たとえば @samp{/dev/sda} といったデバイスノードを引数として渡すときは、
12446 このオプションを普通は指定しないはずである。
12447 そんなことをすると、@samp{/dev/sda} で参照されるファイルシステムではなく、
12448 デバイスノードが存在するファイルシステムの同期が行われてしまうからだ。
12449 また、システムによっては、個々のデバイスノードやファイルを引数として渡すのと、全く引数を使用しないのとでは、
12450 同期のあり方が違うかもしれないことにも気をつけていただきたい。
12451 すなわち、fsync(2) に渡される引数がある場合は、書き込みバリア (write barrier)
12452 が使われることによって、引数を指定しなかったときに使用されるグローバルな sync(2) よりも、
12453 より確実な保証をもたらすかもしれないのである。
12459 @node truncate invocation
12460 @section @command{truncate}: ファイルサイズの短縮・伸長を行う
12463 @cindex truncating, file sizes
12465 @command{truncate} は、各 @var{file} のサイズを指定したサイズにまで短縮したり、引き伸ばしたりする。
12470 truncate @var{option}@dots{} @var{file}@dots{}
12473 @cindex files, creating
12474 @var{file} が存在していないときは、作成する。
12476 @cindex sparse files, creating
12477 @cindex holes, creating files with
12478 @var{file} が指定したサイズより大きい場合は、データのサイズを越える部分は失われる。
12479 @var{file} が指定したサイズより小さい場合は、ファイルは引き伸ばされ、
12480 引き伸ばされた部分は、ゼロバイト (ASCII NUL) の連続に見えるようになる
12481 (引き伸ばされた部分は、穴空きファイル (sparse file) の穴になる)。
12483 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
12490 @opindex --no-create
12491 ファイルが存在しない場合は、作成しない。
12496 @opindex --io-blocks
12497 @var{size} をバイト数ではなく、@var{file} を構成する I/O ブロック数と見なす。
12499 @item -r @var{rfile}
12500 @itemx --reference=@var{rfile}
12502 @opindex --reference
12503 @var{rfile} のサイズを基準に、各 @var{file} のサイズを揃える。
12505 @item -s @var{size}
12506 @itemx --size=@var{size}
12509 各 @var{file} のサイズを @var{size} にする。@option{--io-blocks}
12510 が指定されていない場合、@var{size} はバイト数である。
12511 @multiplierSuffixesNoBlocks{size}
12513 @var{size} の前に以下の記号の一つを置くと、現在のサイズを元にして、各 @var{file}
12516 @samp{+} => @var{size} だけ増やす
12517 @samp{-} => @var{size} だけ減らす
12518 @samp{<} => 最大でも @var{size} までにする
12519 @samp{>} => 最小でも @var{size} にはする
12520 @samp{/} => @var{size} の倍数に切り下げる
12521 @samp{%} => @var{size} の倍数に切り上げる
12529 @node Printing text
12532 @cindex printing text, commands for
12533 @cindex commands for printing text
12535 この章では、テキスト文字列を表示するコマンドについて説明する。
12538 * echo invocation:: テキストを 1 行表示する。
12539 * printf invocation:: データを整形して表示する。
12540 * yes invocation:: 中断されるまで文字列を表示する。
12544 @node echo invocation
12545 @section @command{echo}: テキストを 1 行表示する
12548 @cindex displaying text
12549 @cindex printing text
12550 @cindex text, displaying
12551 @cindex arbitrary text, displaying
12553 @command{echo} は、指定された @var{string} を標準出力に書き出す。その際、各 @var{string}
12554 の間に 1 個のスペースを置き、行末に改行を付け加える。
12559 echo [@var{option}]@dots{} [@var{string}]@dots{}
12562 @mayConflictWithShellBuiltIn{echo}
12564 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
12565 オプションはオペランドの前に置かなければならない。
12566 また、通常は特別な引数として使われる @samp{--} は、特別な意味を持たず、
12567 他のいかなる @var{string} とも同じように扱われる。
12576 @cindex backslash escapes
12577 各 "@var{string} の中に以下に挙げるバックスラッシュでエスケープした文字があると、
12590 フォームフィード (form feed)
12594 復帰 (carriage return)
12602 8 進数 @var{nnn} (0 桁から 3 桁までの 8 進数) で表される
12603 8 ビットの値に対応する文字。@var{nnn} が 9 ビットの値だと、9 ビット目
12606 8 進数 @var{nnn} (1 桁から 3 桁までの 8 進数) で表される
12607 8 ビットの値に対応する文字。@var{nnn} が 9 ビットの値だと、9 ビット目
12610 16 進数 @var{hh} (1 または 2 桁の 16 進数) で表される 8 ビットの値に対応する文字。
12615 @cindex backslash escapes
12616 各 @var{string} の中にあるバックスラッシュ・エスケープの解釈をしない。
12617 これがデフォルトである。@option{-e} と @option{-E}
12618 の両方が指定されている場合は、後で指定した方が効果を持つ。
12622 @vindex POSIXLY_CORRECT
12623 環境変数 @env{POSIXLY_CORRECT} が指定されている場合に、@command{echo}
12624 の最初の引数が (単独の) @option{-n} 以外だと、@command{echo}
12625 はそうした引数をオプションとして扱わずに、形がオプションに似た引数として出力する。
12626 たとえば、@code{echo -ne hello} は、単なる @samp{hello}
12627 ではなく、@samp{-ne hello} を出力する。
12629 POSIX では、いかなるオプションのサポートも要求していない。また、
12630 POSIX では、@var{string} がバックスラッシュを含む場合や、最初の引数が @option{-n}
12631 の場合に、@command{echo} がどう振る舞うかは、実装側で決めることになっている。
12632 従って、他のシステムで使うことも考慮したプログラムで、行末の改行を省略したり、
12633 制御文字やバックスラッシュ・エスケープを出力したりする必要があるのならば、
12634 @command{echo} の代わりに @command{printf} コマンドを使用することを考えてもよい。
12635 @xref{printf invocation}.
12640 @node printf invocation
12641 @section @command{printf}: データを整形して表示する
12644 @command{printf} は、テキストを整形して表示する。
12649 printf @var{format} [@var{argument}]@dots{}
12652 @command{printf} は、文字列 @var{format} を表示する。
12653 その際、C の @samp{printf} 関数とほとんど同じやり方で、@samp{%} 書式指定子と
12654 @samp{\} エスケープシーケンスを解釈して、数値や文字列の引数
12655 (上記書式の @var{argument}) を整形する。詳細については、次の項目を参照すること。
12656 @xref{Output Conversion Syntax,, @command{printf} format directives,
12657 libc, The GNU C Library Reference Manual}.
12658 C の関数との相違点については、以下の箇条書きのとおりである。
12660 @mayConflictWithShellBuiltIn{printf}
12665 @var{format} 引数は、指定された @var{argument} のすべてを変換するのに必要なだけ、繰り返し使用される。
12666 たとえば、@samp{printf %s a b} というコマンドは、@samp{ab} を出力する。
12669 @var{argument} の指定がない場合は、文脈が文字列と数値のどちらを期待しているかによって、
12670 空文字列、または 0 を指定したものと見なされる。
12671 たとえば、@samp{printf %sx%d} というコマンドは、@samp{x0} を表示する。
12675 @samp{\c} というエスケープシーケンスが追加されている。@samp{\c} より後の部分を、
12676 @command{printf} は出力しない。たとえば、@samp{printf 'A%sC\cD%sF' B E}
12677 というコマンドは、@samp{ABC} を表示する。
12680 16 進数エスケープシーケンス @samp{\x@var{hh}} は、最大でも 2 桁である。
12681 桁数に制限のない C と、その点が違う。たとえば、@samp{printf '\x07e'}
12682 というコマンドは、2 バイトを表示するが (訳注: \x07 (ベル) と e)、
12683 C の @samp{printf ("\x07e")} という文の方は、1 バイトしか表示しない。
12687 追加された書式指定子 @samp{%b} は、対応する引数文字列中に
12688 @samp{\} エスケープシーケンスがある場合、それを @var{format}
12689 文字列中にあるときと同じように解釈・変換して、引数文字列を表示する。
12690 ただし、引数中の 8 進数エスケープシーケンスは @samp{\0@var{ooo}} の形を取る。
12691 @var{ooo} は 0 から 3 桁の 8 進数である。@samp{\@var{ooo}} が
12692 9 ビットの値ならば、9 ビット目 (訳注: すなわち最上位ビット) は無視される。
12693 @samp{%b} に精度も指定すると、変換した文字列の先頭から何バイトを表示するかが、それによって決まる。
12697 追加された書式指定子 @samp{%q} は、対応する引数文字列を、
12698 たいていのシェルで入力として再利用できる形で表示する。
12699 非表示文字は POSIX が提唱している @samp{$''} の書式でエスケープされ、
12700 シェルのメタ文字は適切にクォートされる。これは、@command{ls --quoting=shell-escape}
12704 数値の引数は、単独の C の定数でなければならない。前に @samp{+} や @samp{-}
12705 が付いていてもよい。たとえば、@samp{printf %.4d -3} は、@samp{-0003} を出力する。
12708 @vindex POSIXLY_CORRECT
12709 数値が期待される引数の先頭文字が @samp{"} や @samp{'} である場合、
12710 その引数の値は、引用符の直後に来る文字の数値である
12711 (訳注: すなわち、一般には、その文字の ASCII コードの 10 進数表記が出力される)。
12712 その後にさらに文字が続く場合は、環境変数 @env{POSIXLY_CORRECT}
12713 が設定されていれば、ただ単に無視され、設定されていなければ、警告が出される。
12714 一例を挙げておくと、@samp{printf "%d" "'a"} は、ASCII
12715 文字セットを使用しているホストでは、@samp{97} を出力する。
12716 ASCII における @samp{a} の数値は、10 進数表記で 97 だからだ。
12721 引数が浮動小数点数の場合は、小数部の前にはピリオドを置かなければならない。
12722 ただし、表示は、現在のロケールの @env{LC_NUMERIC} カテゴリのルールに合わせたものになる。
12723 たとえば、小数点を表す文字がコンマのロケールでは、@samp{printf %g 3.14}
12724 というコマンドは、@samp{3,14} を出力するが、@samp{printf %g 3,14}
12725 というコマンドはエラーになる。 @xref{Floating point}.
12729 @command{printf} は、@var{format} 中の @samp{\@var{ooo}} を
12730 (@var{ooo} が 1 から 3 桁の 8 進数ならば) 表示すべき 1 バイトを指定している
12731 8 進数と見なす。また、@samp{\x@var{hh}} を (@var{hh} が 1 から 2 桁の
12732 16 進数ならば) 表示すべき 1 文字を指定している 16 進数だと解釈する。
12733 ただし、注意していただきたいが、@samp{\@var{ooo}} が 255 より大きな
12734 10 進数に相当するときは、@command{printf} は 9 ビット目を無視する。
12735 従って、たとえば、@samp{printf '\400'} は @samp{printf '\0'} と同じである。
12740 @cindex ISO/IEC 10646
12742 @command{printf} は、ISO C 99 で導入された 2 種類のキャラクタ・シンタクス
12743 (訳注: 要するに、コードによる文字の指定法) を解釈することができる。
12744 一つは、Unicode (ISO/IEC 10646) の文字を 16 ビットで表すための @samp{\u}
12745 であり、4 桁の 16 進数 @var{hhhh} で指定する。もう一つは、Unicode の文字を
12746 32 ビットで表すための @samp{\U} で、こちらは 8 桁の 16 進数 @var{hhhhhhhh}
12747 で指定する。@command{printf} は Unicode の文字を出力するに当たって、
12748 @env{LC_CTYPE} のロケールに従う。なお、U+0000@dots{}U+009F と
12749 U+D800@dots{}U+DFFF の範囲にある Unicode の文字は、U+0024 ($),
12750 U+0040 (@@), U+0060 (`) を除いて、このシンタクスでは指定することができない。
12752 @samp{\u} や @samp{\U} を処理するには、フル装備の @code{iconv} の能力が必要である。
12753 glibc 2.2 以降を採用しているシステムでは、そうした能力は使えるようになっている。
12754 coreutils パッケージをインストールする前に、@code{libiconv}
12755 をインストールしている場合も同様だ。どちらにも当てはまらない場合は、@samp{\u}
12756 や @samp{\U} は、変換されずに、そのままの形で表示される。
12758 オプションとして指定できるのは、単独の @option{--help} か @option{--version}
12759 だけである。 @xref{Common options}. オプションはオペランドの前に置かなければならない。
12761 Unicode のキャラクタ・シンタクスを使えば、
12762 ロケールに影響されない方法で文字列を書くことができて、便利である。
12766 $ env printf '\u20AC 14.95'
12770 ユーロ通貨記号を含む文字列が、ユーロ記号をサポートするすべてのロケール
12771 (ISO-8859-15, UTF-8 など) で正しく出力されることになる。同様に、
12774 $ env printf '\u4e2d\u6587'
12778 とすれば、漢字の文字列が、すべての中国語のロケール (GB2312, BIG5,
12779 UTF-8 など) で正しく表示される。
12781 上記の例では、@command{printf} コマンドを @command{env}
12782 経由で呼び出していることに注目していただきたい。
12783 これは、シェルのエイリアスや組み込み関数ではなく、
12784 シェルのサーチパスを使って見つけたプログラムを、確実に実行するためである。
12786 文字列がもっと長い場合でも、各文字に対応する 16 進数コードを一つ一つ捜す必要はない。
12787 ASCII 文字に \u エスケープ・シーケンスを混ぜる書き方は、JAVA
12788 のソースファイルで使用されるエンコーディング (JAVA source file encoding)
12789 としても知られているが、GNU の recode コマンド 3.5c
12790 以降を使用すれば、任意の文字列をこのエンコーディングに変換することができるのだ。
12791 以下に示すのは、1 個の短文を、ロケールに影響されずにその短文を出力するシェルスクリプトに変換する方法である。
12794 $ LC_CTYPE=zh_TW.big5 /usr/local/bin/printf \
12795 '\u4e2d\u6587\n' > sample.txt
12797 # 訳注: もちろん、漢字入力の可能な LANG=zh_TW.big5 (あるいは、
12798 # LANG=ja_JP.eucJP) の環境なら、コマンドラインで直接
12799 # printf '中文\n' と打ち込んでもよい。その方が、
12800 # 「各文字に対応する 16 進数コードを一つ一つ捜す必要はない」
12801 # という上記の説明に、例としてはふさわしいだろう。
12802 # LANG=ja_JP.eucJP の場合、下のコマンドは、当然ながら、
12803 # recode eucJP..JAVA になる。
12805 $ recode BIG5..JAVA < sample.txt \
12806 | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
12813 @node yes invocation
12814 @section @command{yes}: 中断されるまで文字列を表示する
12817 @cindex repeated output of a string
12819 @command{yes} は、コマンドラインで指定された引数を、空白で区切り、
12820 末尾に改行を付けて、意図的に中断されるまで (訳注: たとえば @kbd{CTRL-C}
12821 で中断されるまで) 延々と表示する。引数が指定されていない場合は、@samp{y}
12822 の後ろに改行を付けて、中断されるまで延々と表示する。
12824 書き込みエラーがあると、@command{yes} はステータス @samp{1} で終了する。
12826 指定できるオプションは、単独の @option{--help} か @option{--version} だけである。
12827 @samp{-} で始まる引数を出力するには、その引数の前に @option{--} を置けばよい。
12828 たとえば、@samp{yes -- --help} というようにだ。@xref{Common options}.
12835 @cindex commands for exit status
12836 @cindex exit status commands
12838 この章で説明するのは、その出力よりも終了ステータスの方が主として役に立つコマンドである。
12839 従って、こうしたコマンドは、シェルの @code{if} 文の条件として、
12840 あるいは、パイプラインの最後のコマンドとして使用されることが多い。
12843 * false invocation:: 何もせず、実行失敗のステータスを返す。
12844 * true invocation:: 何もせず、正常終了する。
12845 * test invocation:: ファイルタイプのチェックや値の比較を行う。
12846 * expr invocation:: 式を評価する。
12850 @node false invocation
12851 @section @command{false}: 何もせず、実行失敗のステータスを返す
12854 @cindex do nothing, unsuccessfully
12855 @cindex failure exit status
12856 @cindex exit status of @command{false}
12858 @command{false} は、実行に失敗したこと (@dfn{failure})
12859 を示す終了ステータス 1 を返す以外、何もしない。
12860 従って、シェルスクリプト中の、実行に失敗するコマンドが必要な場所で、
12861 仮のコマンドとして使用することができる。
12862 最近のほとんどのシェルでは、@command{false} は組み込みコマンドになっているので、
12863 スクリプト中で @samp{false} を使う際に使用しているのは、ここで説明している
12864 @samp{false} ではなく、たぶん組み込みコマンドの方である。
12866 @command{false} は、@option{--help} と @option{--version} オプションを認識する。
12868 このバージョンの @command{false} は、C のプログラムとして実装されている。
12869 従って、シェルスクリプトによる実装より安全かつ高速であり、
12870 アカウントを無効化するための安全なダミー・シェルとして使用することができる。
12872 注意していただきたいが、@command{false} は、@option{--help} や
12873 @option{--version} を付けて実行した場合でも
12874 (このマニュアルで説明している他のすべてのプログラムとは違って)、
12877 移植を考慮したプログラムでは、@command{false} の終了ステータスを
12878 1 だと決めてかからない方がよい。GNU 以外のホストでは、終了ステータスが
12882 @node true invocation
12883 @section @command{true}: 何もせず、正常終了する
12886 @cindex do nothing, successfully
12888 @cindex successful exit
12889 @cindex exit status of @command{true}
12891 @command{true} は、実行に成功したこと (@dfn{success})
12892 を示す終了ステータス 0 を返す以外、何もしない。
12893 従って、シェルスクリプト中の、実行に成功するコマンドが必要な場所で、
12894 仮のコマンドとして使用することができる。とは言え、シェルの組み込みコマンド
12895 @code{:} (コロン) の方が、同じことをより高速に実行してくれるかもしれない。
12896 最近のほとんどのシェルでは、@command{true} は組み込みコマンドになっているので、
12897 スクリプト中で @samp{true} を使う際に使用しているのは、ここで説明している
12898 @samp{true} ではなく、たぶん組み込みコマンドの方である。
12900 @command{true} は、@option{--help} と @option{--version} オプションを認識する。
12902 もっとも、@command{true} を 0 以外のステータスで終了させることも可能だということも、
12903 心に留めておいていただきたい。@option{--help} や @option{--version}
12904 を使用したとき、標準出力がすでにクローズされていたり、
12905 I/O エラーを引き起こすようなファイルにリダイレクトしたりすると、そういうことが起きる。
12906 たとえば、Bourne 互換のシェルを使用して、次のようにするときだ。
12909 $ ./true --version >&-
12910 ./true: write error: Bad file number
12911 $ ./true --version > /dev/full
12912 ./true: write error: No space left on device
12915 このバージョンの @command{true} は、C のプログラムとして実装されている。
12916 従って、シェルスクリプトによる実装より安全かつ高速であり、
12917 アカウントを無効化するための安全なダミー・シェルとして使用することができる。
12919 @node test invocation
12920 @section @command{test}: ファイルタイプのチェックや値の比較を行う
12923 @cindex check file types
12924 @cindex compare values
12925 @cindex expression evaluation
12927 @command{test} は、条件式 @var{expression} の評価次第で、0 (真) または 1 (偽)
12928 のステータスを返す。式を構成する各部分は、独立した引数でなければならない。
12930 @command{test} は、ファイルのステータスを検査することができる。
12931 また、文字列を扱う演算子や、数値を比較するための演算子も備えている。
12933 @command{test} には、@samp{test} で始める書式のほかに、一対の角カッコを使用するもう一つの書式がある。
12934 たとえば、@samp{test -d /} の代わりに、@samp{[ -d / ]}
12935 と書いてもよい。角カッコは、独立した引数でなければならない
12936 (訳注: すなわち、他の引数と空白で分離されていなければならない)。
12937 だから、たとえば、@samp{[-d /]} では、望みの結果を得られないことになる。
12938 @samp{test @var{expression}} と @samp{[ @var{expression} ]}
12939 は、同じ意味なので、以下では前者の書式についてのみ解説する。
12944 test @var{expression}
12946 [ @var{expression} ]
12951 @mayConflictWithShellBuiltIn{test}
12953 @var{expression} を省略した場合、@command{test} は、偽を返す。
12954 @var{expression} が引数 1 個だけだった場合、@command{test}
12955 は、その引数が空 (null) ならば、偽を返し、さもなければ、真を返す。
12956 引数には、@samp{-d}, @samp{-1}, @samp{--}, @samp{--help}, @samp{--version}
12957 といった、他のほとんどのプログラムでなら、オプションとして扱われるものも含めて、
12958 どんな文字列でも指定することができる。そこで、ヘルプやバージョン情報を取得するには、
12959 @samp{[ --help} や @samp{[ --version} という形でコマンドを実行する必要がある。
12960 この場合、いつもと違って、閉じカッコは付けない。 @xref{Common options}.
12962 @cindex exit status of @command{test}
12972 * File type tests:: ファイルタイプのテスト (-[gkruwxOG])。
12973 * Access permission tests:: アクセス許可のテスト (-[gkruwxOG])。
12974 * File characteristic tests:: ファイル特性のテスト (-e -s -nt -ot -ef)。
12975 * String tests:: 文字列のテスト (-z -n = == !=)。
12976 * Numeric tests:: 数値のテスト (-eq -ne -lt -le -gt -ge)。
12977 * Connectives for test:: @command{test} の論理結合演算子 (! -a -o)。
12981 @node File type tests
12982 @subsection ファイルタイプのテスト
12984 @cindex file type tests
12986 以下のオプションは、ある特定のファイルタイプか否かの検査を行う。
12987 (Unix では、あらゆるものがファイルだ。だが、ファイルならみんな同じだというわけではない!)
12991 @item -b @var{file}
12993 @cindex block special check
12994 @var{file} が存在し、ブロック・スペシャルデバイスならば、真。
12996 @item -c @var{file}
12998 @cindex character special check
12999 @var{file} が存在し、キャラクタ・スペシャルデバイスならば、真。
13001 @item -d @var{file}
13003 @cindex directory check
13004 @var{file} が存在し、ディレクトリならば、真。
13006 @item -f @var{file}
13008 @cindex regular file check
13009 @var{file} が存在し、通常ファイルならば、真。
13011 @item -h @var{file}
13012 @itemx -L @var{file}
13015 @cindex symbolic link check
13016 @var{file} が存在し、シンボリックリンクならば、真。
13017 ファイル関係の他のすべてのテストとは違って、このテストでは、@var{file}
13018 がシンボリックリンクの場合、リンクの参照を行わない。
13020 @item -p @var{file}
13022 @cindex named pipe check
13023 @var{file} が存在し、名前付きパイプならば、真。
13025 @item -S @var{file}
13027 @cindex socket check
13028 @var{file} が存在し、ソケットならば、真。
13032 @cindex terminal check
13033 @var{fd} が端末と結びついているファイルディスクリプタならば、真。
13038 @node Access permission tests
13039 @subsection アクセス許可のテスト
13041 @cindex access permission tests
13042 @cindex permission tests
13044 以下のオプションは、特定のアクセス許可について検査をする。
13048 @item -g @var{file}
13050 @cindex set-group-ID check
13051 @var{file} が存在し、set-group-ID ビットが立っていれば、真。
13053 @item -k @var{file}
13055 @cindex sticky bit check
13056 @var{file} が存在し、@dfn{sticky} ビットが立っていれば、真
13058 @item -r @var{file}
13060 @cindex readable file check
13061 @var{file} が存在し、読み出しが許可されていれば、真。
13063 @item -u @var{file}
13065 @cindex set-user-ID check
13066 @var{file} が存在し、set-user-ID ビットが立っていれば、真。
13068 @item -w @var{file}
13070 @cindex writable file check
13071 @var{file} が存在し、書き込みが許可されていれば、真。
13073 @item -x @var{file}
13075 @cindex executable file check
13076 @var{file} が存在し、実行が許可されていれば (ディレクトリの場合は、検索が許可されていれば)、真。
13078 @item -O @var{file}
13080 @cindex owned by effective user ID check
13081 @var{file} が存在し、その所有者が test コマンド実行者の実効ユーザ ID
13084 @item -G @var{file}
13086 @cindex owned by effective group ID check
13087 @var{file} が存在し、そのグループが test コマンド実行者の実効グループ ID
13092 @node File characteristic tests
13093 @subsection ファイル特性のテスト
13095 @cindex file characteristic tests
13097 以下のオプションは、ファイルの他の特性を検査する。
13101 @item -e @var{file}
13103 @cindex existence-of-file check
13104 @var{file} が存在すれば、真。
13106 @item -s @var{file}
13108 @cindex nonempty file check
13109 @var{file} が存在し、サイズが 0 よりも大きければ、真。
13111 @item @var{file1} -nt @var{file2}
13113 @cindex newer-than file check
13114 @var{file1} が @var{file2} より (更新日時 (modification date) で比較して)
13115 新しいか、あるいは、@var{file1} が存在して、@var{file2} が存在しなければ、真。
13117 @item @var{file1} -ot @var{file2}
13119 @cindex older-than file check
13120 @var{file1} が @var{file2} より (更新日時で比較して) 古いか、あるいは、@var{file2}
13121 が存在して、@var{file1} が存在しなければ、真。
13123 @item @var{file1} -ef @var{file2}
13125 @cindex same file check
13126 @cindex hard link check
13127 @var{file1} と @var{file2} が同じデバイス番号と同じ inode 番号を持っていれば、
13128 言い換えれば、両者が互いのハードリンクならば、真。
13134 @subsection 文字列のテスト
13136 @cindex string tests
13138 以下のオプションは、文字列の特性を検査する。シェルに対して引数 @var{string}
13139 を引用符で保護する必要があるかもしれない。たとえば、こんなふうにだ。
13145 こうした引用符は、@samp{$V} が空だったり、特殊文字を含んでいたりする場合に、
13146 意図に反した引数が @command{test} に渡ることを防いでいる。
13150 @item -z @var{string}
13152 @cindex zero-length string check
13153 @var{string} の長さが 0 ならば、真。
13155 @item -n @var{string}
13156 @itemx @var{string}
13158 @cindex nonzero-length string check
13159 @var{string} の長さが 0 でなければ、真。
13161 @item @var{string1} = @var{string2}
13163 @cindex equal string check
13166 @item @var{string1} == @var{string2}
13168 @cindex equal string check
13169 両文字列が等しければ、真 (= と同じ意味)。
13171 @item @var{string1} != @var{string2}
13173 @cindex not-equal string check
13179 @node Numeric tests
13182 @cindex numeric tests
13183 @cindex arithmetic tests
13185 数値間の関係を調べる演算子を挙げる。引数は、数字のみで表現される整数か
13186 (負数も使用できる)、@w{@code{-l @var{string}}} という特別な式でなければならない。
13187 後者は @var{string} の長さとして評価される。
13189 (訳注: 要するに、普通は 10 進数の整数を引数として取るということ。
13190 @command{expr} コマンドとは違って、@command{test} では @samp{+2} といった表現も可能だ。)
13194 @item @var{arg1} -eq @var{arg2}
13195 @itemx @var{arg1} -ne @var{arg2}
13196 @itemx @var{arg1} -lt @var{arg2}
13197 @itemx @var{arg1} -le @var{arg2}
13198 @itemx @var{arg1} -gt @var{arg2}
13199 @itemx @var{arg1} -ge @var{arg2}
13206 こうした二項算術演算子は、それぞれ次の場合に真を返す。上から順に、
13207 @var{arg1} が @var{arg2} と比べて、等しい場合、等しくない場合、より小さい場合、
13208 より小さいか等しい場合、より大きい場合、より大きいか等しい場合。
13215 test -1 -gt -2 && echo yes
13217 test -l abc -gt 1 && echo yes
13220 @error{} test: integer expression expected before -eq
13224 @node Connectives for test
13225 @subsection @command{test} の論理結合演算子
13227 @cindex logical connectives
13228 @cindex connectives, logical
13230 @command{test} 内蔵のこうした論理結合演算子より、
13231 シェルの論理基本演算子を使用した方がよいことに留意していただきたい。
13232 と言うのは、式が、パラメータの展開によっては、曖昧になることがあるからである。
13234 たとえば、次の式は、@samp{$1} が @samp{'!'} であり、@samp{$2} が空文字列
13235 @samp{''} だと、曖昧になる (訳注: '!' が文字列か否定演算子か、曖昧だということだろう)。
13244 test "$1" && test "$2"
13247 シェルの論理基本演算子では、作業の簡略化による利益も得られる。
13248 それは、ファイルの属性のテストを何度もやる場合には、かなりのものになるかもしれない。
13254 @var{expr} が偽ならば、真。@samp{!} は @var{expr} のどの部分よりも優先順位が低い。
13255 @samp{!} は二項式の左に指定する必要があることに注意していただきたい。
13256 すなわち、@samp{1 '!' -gt 2} ではなく、@samp{'!' 1 -gt 2} である。
13257 なお、@samp{!} はシェルの特殊文字であることが多いので、クォートした方が間違いがない。
13260 @item @var{expr1} -a @var{expr2}
13262 @cindex logical and operator
13263 @cindex and operator
13264 @var{expr1} と @var{expr2} の両方が真ならば、真。
13265 @samp{-a} は左結合であり、@samp{-o} よりも優先順位が高い。
13267 @item @var{expr1} -o @var{expr2}
13269 @cindex logical or operator
13270 @cindex or operator
13271 @var{expr1} と @var{expr2} のどちらかが真ならば、真。
13277 @node expr invocation
13278 @section @command{expr}: 式を評価する
13281 @cindex expression evaluation
13282 @cindex evaluation of expressions
13284 @command{expr} は、式を評価して、結果を標準出力に書き出す。式の各構成要素
13285 (token) は、独立した引数でなければならない。
13287 オペランド (演算対象) は、整数か文字列である。整数は、1 個以上の
13288 10 進数の数字から構成され、先頭に @samp{-} が付いていてもよい。@command{expr} は、
13289 オペランドの位置にあるものが何であれ、それを整数、または、文字列に変換する。
13290 どちらになるかは、それに対して行われる演算次第である。
13292 @command{expr} そのものに対しては、文字列をクォートする必要がない。
13293 だが、シェルにとって特別な意味がある、たとえば空白のような文字を保護するためには、
13294 文字列を引用符で囲むなどの方法でクォートする必要があるかもしれない。
13295 とは言え、クォートされているかどうかに関わりなく、文字列のオペランドは、
13296 丸カッコ 1 個であってはならないし、@code{+} のような @command{expr}
13297 の演算子の一つであるべきでもない。すなわち、シェルに対してクォートするだけでは、
13298 エラーを引き起こすことなく、任意の文字列 @code{$str} を @command{expr}
13299 に渡すことはできないのだ。この問題を回避する方法の一つは、GNU の拡張である
13300 @code{+} 演算子 (訳注: この @code{+} は、算術演算子の @code{+}
13301 ではなく、直後に来る引数が文字列であることを示す文字列演算子である) を使用することだ
13302 (たとえば、@code{+ "$str" = foo} といった具合に)。もっと移植性のある方法は、
13303 @code{@w{" $str"}} という先頭に空白を入れた表現を使用し、
13304 式の残りの部分でもそれに合わせて、先頭のスペースを考慮に入れるようにすることである
13305 (たとえば、@code{@w{" $str" = " foo"}} のように)。
13307 負の整数や、@samp{-} で始まる文字列を @command{expr} の
13308 1 番目の引数として渡すべきではない。オプションと間違われかねないからだ。
13309 それを避けるためには、カッコでくくればよい (訳注: たとえば、
13310 @code{expr \( -1 + 1 \)})。また、移植を考慮したスクリプトでは、
13311 文字列のオペランドに、形が整数と同じになってしまうものを使うべきではない。
13312 こちらは、先頭にスペースを入れる上記の方法で回避できる。
13314 @cindex parentheses for grouping
13315 演算子には、記号としてオペランドとオペランドの間に置くものもあれば、
13316 キーワードとしてオペランドの前に付けるものもある。
13317 丸カッコは、おなじみのやり方で、グループ化に使用できる。
13318 ただし、丸カッコや、演算子の多くは、シェルによって評価されないように、
13321 GNU MP ライブラリ対応でビルドされた場合、@command{expr}
13322 は任意精度演算を使用する。そうでない場合は、ネイティブな算術型を使用するので、
13323 算術オーバーフローのために実行に失敗することがあるかもしれない。
13325 指定できるオプションは、@option{--help} と @option{--version} だけである。
13326 @xref{Common options}. オプションはオペランドの前に置かなければならない。
13328 @cindex exit status of @command{expr}
13332 0: 式が null でも 0 でもない場合。
13333 1: 式が null または 0 の場合。
13335 3: 内部エラーが起きた場合 (例: 算術オーバーフロー)。
13339 * String expressions:: 文字列式 (+ : match substr index length)。
13340 * Numeric expressions:: 数式 (+ - * / %)。
13341 * Relations for expr:: 論理結合と関係表現 (| & < <= = == != >= >)。
13342 * Examples of expr:: 用例。
13346 @node String expressions
13349 @cindex string expressions
13350 @cindex expressions, string
13352 @command{expr} は、パターンマッチなどの文字列演算子をサポートしている。
13353 文字列演算子の優先順位は、算術演算子や関係演算子よりも高い
13354 (算術/関係演算子については後述する)。
13358 @item @var{string} : @var{regex}
13359 @cindex pattern matching
13360 @cindex regular expression matching
13361 @cindex matching patterns
13362 パターンマッチを行う。まず、左右の項を文字列に変換し、右項を、先頭に
13363 @code{^} が暗黙のうちに付いている正規表現と見なす (@code{grep}
13364 風の基本正規表現)。それから、その正規表現と左項がマッチするかどうかを調べる。
13366 マッチが成功した場合、@var{regex} 中でカッコ (@samp{\(} と @samp{\)})
13367 を使用していれば、@code{:} 演算子は、そのカッコ内の部分表現にマッチした
13368 @var{string} 中の部分文字列を返す。カッコを使っていなければ、返すのはマッチした文字数である。
13370 マッチに失敗した場合、@code{:} 演算子は、@var{regex} 中でカッコ (@samp{\(} と @samp{\)})
13371 を使用していれば、空文字列を、さもなければ、0 を返す。
13373 @kindex \( @r{regexp operator}
13374 最初の @samp{\( @dots{} \)} のペアだけが、返り値に関係する。
13375 二番目以降のカッコのペアには、正規表現の演算子をグループ化する働きしかない。
13377 @kindex \+ @r{regexp operator}
13378 @kindex \? @r{regexp operator}
13379 @kindex \| @r{regexp operator}
13380 正規表現では、@code{\+}, @code{\?}, @code{\|} は演算子であり、それぞれ、
13381 1 個以上にマッチする、あってもなくてもよい、候補のうちのどちらか、を意味している。
13382 ところが、SunOS などの @command{expr} では、こうした記号を通常の文字として扱っている
13383 (POSIX は、どちらの動作も認めている)。正規表現の文法については次のものが詳しい。
13384 @xref{Top, , Regular Expression Library, regex, Regex}.
13385 実例をいくつか、「@command{expr} の使用例」に挙げておいた。
13386 @ref{Examples of expr}.
13388 @item match @var{string} @var{regex}
13390 パターンマッチを行う別の方法。これは、@w{@samp{@var{string} : @var{regex}}} と同じ
13393 @item substr @var{string} @var{position} @var{length}
13395 @var{string} の部分文字列を返す。部分文字列は、@var{position}
13396 の位置から始まり、最長でも @var{length} の長さである。@var{position} と
13397 @var{length} のどちらかが、負数や 0 だったり、数値以外だったりする場合は、空文字列を返す。
13399 @item index @var{string} @var{charset}
13401 @var{charset} 中の文字が最初に見つかった @var{string} 中の位置を返す。
13402 @var{string} 中に @var{charset} 中のどの文字も見つからなかった場合は、0 を返す。
13404 @item length @var{string}
13406 @var{string} の長さを返す。
13408 @item + @var{token}
13410 たとえ、@var{token} が @code{match} のようなキーワードや、 @code{/}
13411 のような演算子であっても、@var{token} を文字列として解釈する。
13412 これを使用すると、@code{expr length + "$x"} や @code{expr + "$x" : '.*/\(.\)'}
13413 を実行したとき、@code{$x} の値が (たとえば) たまたま @code{/} や
13414 @code{index} であっても、適切な動作をさせることができる。
13415 この演算子は、GNU の拡張である。移植を考慮したシェルスクリプトでは、
13416 @code{+ "$token"} ではなく、@code{@w{" $token"} : @w{' \(.*\)'}}
13421 @command{expr} にキーワードを文字列として解釈させるためには、クォート演算子
13422 (すなわち、上で述べている @code{+} 演算子) を使用しなければならない。
13425 @node Numeric expressions
13428 @cindex numeric expressions
13429 @cindex expressions, numeric
13431 @command{expr} は、以下に挙げる通常の算術演算子を、昇順の優先順位で、サポートしている。
13432 こうした算術演算子は、前節で述べた文字列演算子より優先順位が低く、
13433 次節で述べる関係演算子より優先順位が高い。
13441 @cindex subtraction
13442 加算と減算。左右の項は両方とも整数に変換される。整数に変換できない場合は、エラーになる。
13448 @cindex multiplication
13451 乗算、除算、剰余演算。左右の項は両方とも整数に変換される。整数に変換できない場合は、エラーになる。
13456 @node Relations for expr
13457 @subsection @command{expr} の関係表現
13459 @cindex connectives, logical
13460 @cindex logical connectives
13461 @cindex relations, numeric or string
13463 @command{expr} は、通常の論理結合や関係表現をサポートしている。
13464 そうした演算子は、前の節で述べた文字列演算子や算術演算子より優先順位が低い。
13465 論理結合や関係表現の演算子を、優先順位の低いものから高いものへ順に並べておく。
13471 @cindex logical or operator
13472 @cindex or operator
13473 左項が null でも 0 でもなければ、左項を返す。左項が null または
13474 0 の場合は、右項が null でも 0 でもなければ、右項を返す。両項とも
13475 null または 0 の場合は、0 を返す。左項が null でも 0 でもない場合、
13480 @cindex logical and operator
13481 @cindex and operator
13482 両項とも null でも 0 でもなければ、左項を返し、それ以外の場合は、0
13483 を返す。左項が null または 0 の場合、右項の評価は行われない。
13485 @item < <= = == != >= >
13492 @cindex comparison operators
13494 両項を比較し、関係が真ならば、1 を返し、偽の場合は、0 を返す。
13495 @code{==} は @code{=} と同じ意味である。@command{expr} は、まず両項を整数に変換し、
13496 数値としての比較を試みる。左右どちらかの項の変換に失敗した場合は、
13497 @env{LC_COLLATE} のロケールで指定されている、文字の照合順を使用して、
13503 @node Examples of expr
13504 @subsection @command{expr} の使用例
13506 @cindex examples of @command{expr}
13507 シェルのメタ文字をクオートする例も含めて、用例をいくつか挙げておく。
13509 Bourne 互換シェルで、シェル変数 @code{foo} に 1 を加える。
13512 foo=$(expr $foo + 1)
13515 変数 @code{$fname} に格納されているファイル名から、ディレクトリではない部分を取り出して、表示する。
13516 @code{$fname} に @code{/} が含まれていなくてもよい。
13519 expr $fname : '.*/\(.*\)' '|' $fname
13522 次の例で @code{\+} は演算子である (訳注: 細かいことを言うと、@command{grep}
13523 流の基本正規表現の演算子。ちなみに、最後の例の @code{+} は、@command{expr}
13532 expr abc : 'a\(.\)c'
13534 expr index abcdef cz
13537 @error{} expr: syntax error
13538 expr index + index a
13546 @cindex redirection
13547 @cindex commands for redirection
13549 Unix のシェルは、いくつかの形式のリダイレクション (@dfn{redirection})
13550 --- コマンドの入力元や出力先を変更する手段 --- をたいてい用意している。
13551 しかし、ある一つの便利なリダイレクションは、シェルではなく、独立したコマンドによって行われる。
13552 この章では、そのコマンドについて説明する。
13555 * tee invocation:: 出力を複数のファイルやプロセスにリダイレクトする。
13559 @node tee invocation
13560 @section @command{tee}: 出力を複数のファイルやプロセスにリダイレクトする
13563 @cindex pipe fitting
13564 @cindex destinations, multiple output
13565 @cindex read from stdin and write to stdout and files
13567 @command{tee} コマンドは、標準入力を標準出力にコピーするとともに、
13568 引数として指定されたファイル (複数可) にもコピーする。
13569 これは、あるデータをパイプに送るだけでなく、同時にそのコピーを保存したい場合に、便利である。
13574 tee [@var{option}]@dots{} [@var{file}]@dots{}
13577 書き出し先のファイルがまだ存在していなければ、作成する。
13578 書き出し先のファイルがすでに存在している場合は、@option{-a}
13579 オプションを使用しないかぎり、ファイルに前からあったデータは上書きされる。
13581 GNU coreutils の従来のバージョンでは (v5.3.0 - v8.23)、
13582 @var{file} として @samp{-} を指定すると、@command{tee}
13583 は入力のコピーをもう一つ標準出力に書き出していた。
13584 しかし、二重になった出力は、あまり役に立つものではなかったので、
13585 現在では POSIX の規格に従い、そこではっきりと規定されているように、
13586 @samp{-} をそういう名前のファイルとして取り扱うようになっている。
13588 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13595 指定されたファイルの末尾に標準入力を追加する。すなわち、ファイルを上書きしない。
13598 @itemx --ignore-interrupts
13600 @opindex --ignore-interrupts
13604 @itemx --output-error[=@var{mode}]
13606 @opindex --output-error
13607 出力にエラーがあったときの動作を調整する。
13608 長い形式のオプションを使えば、下記の @var{mode} から動作を選択することができる。
13612 パイプを含めて、出力のオープンや書き出しでエラーが起きると、警告メッセージを出す。
13613 エラー発生後もまだオープンされているファイルやパイプがあれば、それに対する書き込みは続行される。
13614 出力のいづれかにエラーがあれば、終了ステータスは失敗を示す。
13617 これが、@var{mode} が指定されないときや、短い形式の @option{-p}
13618 が使用されたときのデフォルトの @var{mode} である。
13619 パイプ以外について、出力のオープンや書き出しでエラーが起きると、警告メッセージを出す。
13620 エラー発生後もまだオープンされているファイルやパイプがあれば、それに対する書き込みは続行される。
13621 パイプ以外の出力にエラーがあれば、終了ステータスは失敗を示す。
13624 パイプを含めて、出力のオープンや書き出しでエラーが起きると、終了する。
13627 パイプ以外について、出力のオープンや書き出しでエラーが起きると、終了する。
13632 大量のデータの転送を行いながら、同時にそのデータのサマライズも行いたい、
13633 改めてデータを読み直すようなことはしたくない。@command{tee} は、そういうときに便利である。
13634 たとえば、DVD イメージをダウンロードしているとき、
13635 その場ですぐ、署名やチェックサムを確認したくなることがよくある。
13639 wget http://example.com/some.iso && sha1sum some.iso
13642 上記コマンドの問題点の一つは、ただでさえ時間のかかる SHA1 の計算に取りかかる前に、
13643 ダウンロードが完了するのを待たなければならないことだ。
13644 たぶん、さらに問題なのは、上記のやり方では、
13645 DVD イメージを改めて読み直さなければならないことだろう
13646 (一度目の読み込みは、ネットワークから)。
13648 こうした作業を行う効率的な方法は、ダウンロードと SHA1 の計算を同時に、
13649 交互に実行することである。そうすれば、プロセス全体が平行してスムーズに進むので、
13650 無駄な時間を使わずに、チェックサムが手に入る。
13653 # ちょっと凝った方法。プロセス置換の実例をご覧に入れるため。
13654 wget -O - http://example.com/dvd.iso \
13655 | tee >(sha1sum > dvd.sha1) > dvd.iso
13658 こうすれば、@command{tee} は、出力を目当てのファイルに書き出すだけでなく、パイプにも書き出す。
13659 そして、後者では、@command{sha1sum} を実行し、最終的なチェックサムを
13660 @file{dvd.sha1} という名前のファイルに保存することになる。
13662 しかし、気をつけていただきたい。上記の例は、プロセス置換 (@dfn{process substitution})
13663 と呼ばれる最近のシェルの機能を当てにしている (上記の@samp{>(command)}
13664 という構文のことである。@xref{Process Substitution,,
13665 Process Substitution, bash, The Bash Reference Manual}.)。
13666 そのため、@command{zsh}, @command{bash}, @command{ksh}
13667 ではうまく動作するが、@command{/bin/sh} では動作しない。
13668 従って、こうしたコードをシェルスクリプトで使用するときは、スクリプトの先頭に
13669 @samp{#!/bin/bash} などと書くことを忘れてはいけない。
13671 次のことにも気をつけていただきたい。プロセス置換のいづれかが
13672 (あるいは、パイプに渡された標準出力が)、
13673 データをすべて処理し尽くす前に終了してしまうことがあるかもしれない。
13674 そうした場合に、@command{tee} が入力の処理を続行して、
13675 それを残っている出力先に渡すことができるようにするには、
13676 @option{-p} オプションが必要になる。
13678 上記の例は、書き出しを 1 個のファイルと 1 個のプロセスに行っているだけだ。
13679 その程度なら、もっと普通の、もっと移植性のある使い方をした方がずっとよい。
13682 wget -O - http://example.com/dvd.iso \
13683 | tee dvd.iso | sha1sum > dvd.sha1
13686 @command{tee} が二つのプロセスに書き込むように、この例を拡張して、MD5 と
13687 SHA1 のチェックサムを平行して計算させることもできる。
13688 その場合は、プロセス置換が必要になる。
13691 wget -O - http://example.com/dvd.iso \
13692 | tee >(sha1sum > dvd.sha1) \
13693 >(md5sum > dvd.md5) \
13697 このテクニックは、パイプから入ってくるデータの圧縮したコピーを作りたいときにも、役に立つ。
13698 @samp{du -ak} の出力するディスク使用量のデータを要約して、
13699 グラフィカルに表示するツールを考えていただきたい。
13700 ディレクトリ階層が膨大だと、@samp{du -ak} は実行に長い時間がかかるだろうし、
13701 いともたやすくテラバイトのデータを作成してくれるだろう。
13702 そこで、@samp{du} コマンドをむやみに再実行することはやりたくない。
13703 また、圧縮されていない出力を保存しておきたくもない。
13705 これを効率の悪い方法でやると、@command{du} の出力全部の圧縮を済ませるまで、
13706 GUI ツールを起動することすらできない。
13709 du -ak | gzip -9 > /tmp/du.gz
13710 gzip -d /tmp/du.gz | xdiskusage -a
13713 @command{tee} とプロセス置換を使えば、GUI ツールを直ちに起動できるし、
13714 圧縮ファイルの展開も全くやらないですむ。
13717 du -ak | tee >(gzip -9 > /tmp/du.gz) | xdiskusage -a
13720 最後にもう一つ。常に 2 種類以上の圧縮した tar アーカイブ (tarball)
13721 を一度に作ることにしている場合は、より効率のよいやり方ができるかもしれない。
13722 たとえば、@code{make dist} が @command{gzip} と @command{bzip2} の両方で圧縮した
13723 tar アーカイブを作成するような場合だ。@command{automake} が生成する @file{Makefile}
13724 のルールは、たいてい、こんなふうにコマンドを連続して実行することで、
13725 圧縮した tar アーカイブを二つ作成している (少し単純化してある)。
13728 tardir=your-pkg-M.N
13729 tar chof - "$tardir" | gzip -9 -c > your-pkg-M.N.tar.gz
13730 tar chof - "$tardir" | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13733 しかしながら、アーカイブの作成・圧縮の対象になっているディレクトリ階層が、
13734 数メガバイトより大きい場合は --- 使用しているシステムがマルチプロセッサを搭載し、
13735 メモリがふんだんにある場合はなおさらそうだが --- ディレクトリの中身を 1 回だけ読み込み、
13736 圧縮プログラムを平行して走らせることで、ずっと効率のよい仕事ができる。
13739 tardir=your-pkg-M.N
13740 tar chof - "$tardir" \
13741 | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
13742 | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13745 プロセス置換が表示する出力をさらに処理したいとしよう。
13746 もし、そうしたプロセスがアトミックな書き出しをしているならば
13747 (すなわち、一度の書き出しが、システムの PIPE_BUF サイズよりも小さければ)、
13748 そういうことも次のような構文で可能である。
13751 tardir=your-pkg-M.N
13752 tar chof - "$tardir" \
13753 | tee >(md5sum --tag) > >(sha256sum --tag) \
13754 | sort | gpg --clearsign > your-pkg-M.N.tar.sig
13760 @node File name manipulation
13763 @cindex file name manipulation
13764 @cindex manipulation of file names
13765 @cindex commands for file name manipulation
13767 この章では、ファイル名操作に使うコマンドについて説明する。
13770 * basename invocation:: ファイル名からディレクトリと接尾辞を取り除く。
13771 * dirname invocation:: ファイル名から最後の要素を取り除く。
13772 * pathchk invocation:: ファイル名の有効性や可搬性を検査する。
13773 * mktemp invocation:: テンポラリファイルやディレクトリを作成する。
13774 * realpath invocation:: ファイル名を展開して表示する。
13778 @node basename invocation
13779 @section @command{basename}: ファイル名からディレクトリと接尾辞を取り除く
13782 @cindex strip directory and suffix from file names
13783 @cindex directory, stripping from file names
13784 @cindex suffix, stripping from file names
13785 @cindex file names, stripping directory and suffix
13786 @cindex leading directory components, stripping
13788 @command{basename} は、@var{name} の先頭にディレクトリ部分があれば、それを取り除く。
13793 basename @var{name} [@var{suffix}]
13794 basename @var{option}@dots{} @var{name}@dots{}
13797 @var{suffix} が指定されていて、それが @var{name} の末尾と同一ならば、
13798 @var{suffix} の部分も @var{name} から取り除かれる。
13799 気をつけていただきたいが、ファイル名の末尾のスラッシュは、接尾辞のマッチングに先立って除去されるので、
13800 @var{suffix} にスラッシュが含まれていると、指定に効果がないことになる。
13801 @command{basename} は、結果を標準出力に表示する。
13803 @c This test is used both here and in the section on dirname.
13804 @macro basenameAndDirname
13805 @command{basename} と @command{dirname} は合わせて設計されており、もし @samp{ls "$name"}
13806 が成功するならば、@samp{cd "$(dirname "$name")"; ls "$(basename "$name")"}
13807 というコマンドの連続も成功するようになっている。
13808 これは、ファイル名の末尾に改行が付いている場合を除いて、あらゆる場合にうまく行く。
13810 @basenameAndDirname
13812 POSIX によれば、@var{name} が空の場合や @samp{//} の場合に、結果がどうなるかは、
13813 実装側で決めてよいことになっている。前者の場合、GNU の @command{basename} は、空文字列を返す。
13814 後者の場合、@var{//} と @var{/} とが別のものであるプラットフォームでは、結果は
13815 @samp{//} になり、全く区別しないプラットフォームでは、結果は @samp{/} になる。
13817 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13818 オプションはオペランドの前に置かなければならない。
13825 @opindex --multiple
13826 複数の引数を受け付ける。すべての引数は @var{name} として処理される。
13827 このオプションを使用する場合、@var{suffix} を指定するならば、@option{-s}
13830 @item -s @var{suffix}
13831 @itemx --suffix=@var{suffix}
13834 末尾にある @var{suffix} を除去する。このオプションを指定すると
13835 @option{-a} オプションも指定したことになる。
13847 basename /usr/bin/sort
13850 basename include/stdio.h .h
13853 basename -s .h include/stdio.h
13855 # "stdio", "stdlib" の順に出力する。
13856 basename -a -s .h include/stdio.h include/stdlib.h
13860 @node dirname invocation
13861 @section @command{dirname}: ファイル名から最後の要素を取り除く
13864 @cindex directory components, printing
13865 @cindex stripping non-directory suffix
13866 @cindex non-directory suffix, stripping
13868 @command{dirname} は、各 @var{name} からスラッシュで区切られた最後の要素を取り除いて、
13869 残りのすべてを表示する。その際、最後の要素の左右どちらにあるスラッシュも除去される。
13870 @var{name} を構成する文字列にスラッシュが一つも含まれない場合、
13871 @command{dirname} は (カレントディレクトリを意味する) @samp{.} を表示する。
13876 dirname [@var{option}] @var{name}@dots{}
13879 @var{name} は実在するファイル名でなくても構わないが、実在するファイル名ならば、
13880 この操作によって、最後の要素それ自体がディレクトリである場合も含めて、
13881 最後の要素が存在するディレクトリが、利用できる形で表示される。
13883 @basenameAndDirname
13885 POSIX によれば、@var{name} が @samp{//} の場合に、結果がどうなるかは、
13887 GNU の @command{dirname} について言うと、@var{//} と @var{/}
13888 とが別のものであるプラットフォームでは、結果は @samp{//} になり、
13889 全く区別しないプラットフォームでは、結果は @samp{/} になる。
13891 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
13904 # "/usr/bin" を出力する。
13905 dirname /usr/bin/sort
13906 dirname /usr/bin//.//
13908 # "dir1", "dir2" の順に出力する。
13909 dirname dir1/str dir2/str
13916 @node pathchk invocation
13917 @section @command{pathchk}: ファイル名の有効性や可搬性を検査する
13920 @cindex file names, checking validity and portability
13921 @cindex valid file names, checking for
13922 @cindex portable file names, checking for
13924 @command{pathchk} は、ファイル名が有効かどうか、可搬性があるかどうかを検査する。
13929 pathchk [@var{option}]@dots{} @var{name}@dots{}
13932 @command{pathchk} は各 @var{name} に対して、以下の条件のどれかが真ならば、
13937 @var{name} 中の実在するディレクトリの一つが、検索 (実行) 許可を持っていない。
13939 @var{name} の長さが、オペレーティング・システムによってサポートされている最大長を越えている。
13941 @var{name} の構成要素の一つの長さが、
13942 それが存在することになるファイルシステムによってサポートされている最大長を越えている。
13945 実在しないファイル名を指定しても、エラーにはならない。
13946 その名前のファイルが、上記の条件内で作成可能であればよい。
13948 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13949 オプションはオペランドの前に置かなければならない。
13955 実際に使用しているファイルシステムに基づいて検査を行うのではなく、
13956 以下の条件を調べて、そのどれかが真ならば、エラーメッセージを出す。
13963 ファイル名に、どのシステムでもファイル名に使用できる文字として
13964 POSIX が規定している文字セット以外の文字が含まれている。
13965 すなわち、ASCII 英数字、@samp{.}、@samp{_}、@samp{-}、@samp{/}
13969 ファイル名の長さや、その構成要素の一つの長さが、
13970 POSIX の規格で可搬性のために最小限サポートしなければならないとされている長さを越えている。
13975 ファイル名が空だったり、@samp{-} で始まる構成要素を含んでいたりすると、エラーメッセージを出す。
13977 @item --portability
13978 @opindex --portability
13979 ファイル名が POSIX に準拠しているすべてのホストで使えるものでなければ、エラーメッセージを出す。
13980 このオプションは、@samp{-p -P} と同じことである。
13984 @cindex exit status of @command{pathchk}
13988 0: 指定されたすべてのファイル名が検査のすべてにパスした場合。
13992 @node mktemp invocation
13993 @section @command{mktemp}: テンポラリファイルやディレクトリを作成する
13996 @cindex file names, creating temporary
13997 @cindex directory, creating temporary
13998 @cindex temporary files and directories
14000 @command{mktemp} は、テンポラリファイルやテンポラリディレクトリの作成を行う。
14005 mktemp [@var{option}]@dots{} [@var{template}]
14008 @command{mktemp} は、@var{template} を基にして、
14009 安全なテンポラリファイルやディレクトリを作成し、その名前を表示する。
14010 @var{template} を指定する場合、その最後の構成部分に少なくとも
14011 3 個の連続する @samp{X} が含まれていなければならない。@var{template}
14012 を省略した場合は、@samp{tmp.XXXXXXXXXX} というテンプレートが使用され、
14013 @option{--tmpdir} オプションが暗黙のうちに指定されることになる。
14014 @var{template} 中の @samp{X} が連続する最後の部分は、英数字で置き換えられる。
14015 従って、大文字小文字を区別するファイルシステムなら、テンプレートに連続する
14016 @var{n} 個の @samp{X} が含まれていると、作成されるファイル名には、
14017 62 の @var{n} 乗とおりの可能性があることになる。
14019 昔のスクリプトでは、テンポラリファイルを作成する際、そのプログラム名にプロセス ID
14020 (@samp{$$}) を拡張子として付けで済ますのが習慣だった。
14021 しかし、この命名法は、名前の推測が容易であり、従って、競合状態を起こしやすいという弱点がある。
14022 攻撃者としては、テンポラリファイルに使われそうな名前でシンボリックリンクを作っておけばよい。
14023 そうすれば、スクリプトが未使用のファイルだと考えて、テンポラリファイルのファイルハンドルを開いたとき、
14024 実際にはすでに存在しているファイルの更新をしているということになる。
14025 同じ命名法を使ってディレクトリを作成するのは、もう少し安全である。
14026 作成しようとするディレクトリがすでに存在していると、@command{mkdir}
14027 は実行に失敗するからだ。とは言え、こちらもサービス不能化攻撃
14028 (denial of service attacks) を可能にしてしまうわけで、やはり良策とは言えない。
14029 それ故、新しいスクリプトでは @command{mktemp} コマンドを使用するべきである。
14030 そうすれば、生成されるファイル名が確実に予測不可能になるので、
14031 実行中のスクリプトがテンポラリファイルの名前を知っているというまさにその事実が、
14032 ファイルを作成したのがそのスクリプトであり、他のユーザはそのファイルを変更できないと、
14035 ファイルを作成する場合、作成されるファイルには現在のユーザに対する読み込みと書き出しの許可が付くが、
14036 グループやその他のユーザに対しては、いかなる許可も付かない。
14037 現在の umask がより厳格な場合、付けられる許可はさらに厳しくなる。
14039 用例をいくつか挙げてみる (ただし、注意していただきたいが、
14040 お手元でこの通り実行しても、おそらくファイル名は違ったものになるはずだ)。
14045 カレントディレクトリにテンポラリファイルを作成する。
14052 一般的な拡張子を付けて、テンポラリファイルを作成する。
14054 $ mktemp --suffix=.txt file-XXXX
14056 $ mktemp file-XXXX-XXXX.txt
14061 ユーザが環境変数 @env{TMPDIR} で指定しているディレクトリを基点として、
14062 その下に安全な FIFO を作成する。@env{TMPDIR} が設定されていない場合は、
14063 @file{/tmp} ではなく、カレントディレクトリを基点として使用する。
14064 肝腎な点は、@command{mktemp} は FIFO を作成しないが、FIFO
14065 を置くことができる安全なディレクトリなら作成できるということである。
14066 ディレクトリや FIFO を作成することができなかったときは、シェルを終了する。
14068 $ dir=$(mktemp -p "$@{TMPDIR:-.@}" -d dir-XXXX) || exit 1
14070 $ mkfifo "$fifo" || @{ rmdir "$dir"; exit 1; @}
14074 可能ならば、テンポラリファイルを作成して使用するが、作成に失敗しても、
14075 エラーメッセージを出さない。ファイルは、環境変数 @env{TMPDIR}
14076 が設定されていれば、そこで指名されているディレクトリに作られるが、
14077 設定されていなければ、@file{/tmp} に作られる。
14079 $ file=$(mktemp -q) && @{
14080 > # $file をこのブロックの内側でのみ使用することにすれば、
14081 > # 安全である。$file を引用符で囲んでいるのは、$TMPDIR が、
14082 > # 従って、$file が、ホワイトスペースを含んでいるかも
14084 > echo ... > "$file"
14090 擬似ランダム文字発生装置として動作する
14091 (カレントディレクトリの内容によって影響を受けるので、完全にランダムではない)。
14092 セキュリティホールを避けたいならば、生成された名前を使って、ファイルを作ってはいけない。
14102 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14109 @opindex --directory
14110 ファイルではなく、ディレクトリを作成する。
14111 作成されるディレクトリには現在のユーザに対して、読み、書き、検索の許可が付くが、
14112 グループやその他のユーザに対しては、いかなる許可も付かない。
14113 現在の umask がより厳格な場合、付けられる許可はさらに厳しくなる。
14119 ファイルやディレクトリの作成に失敗しても、エラーメッセージを出さない。
14120 終了ステータスは、ファイルが作成されたかどうかをやはり反映する。
14126 既存のファイルの名前と重ならないテンポラリファイル用の名前を生成するが、
14127 ファイルシステムの内容を変更することはない (訳注: 要するに、
14128 テンポラリファイル名を生成表示するだけで、実際にファイルを作成することはないということ)。
14129 このコマンドの出力を使って、新しいファイルを作るのは、本質的に安全ではない。
14130 名前の生成とその使用との間には、時間差があり、
14131 その間に他のプロセスが同じ名前でオブジェクトを作成することもありえるからである。
14134 @itemx --tmpdir[=@var{dir}]
14137 @var{template} をディレクトリ @var{dir} を基点とする相対パスとして扱う。
14138 @var{dir} が指定されていない場合や (ロングオプションの @option{--tmpdir}
14139 でのみ可能)、空文字列の場合は、環境変数 @env{TMPDIR} が設定されていれば、
14140 その値を使用し、設定されていなければ、@samp{/tmp} を使用する。
14141 このオプションを指定する場合、 @var{template} は絶対パスであってはならない。
14142 とは言え、@var{template} にスラッシュが含まれていても構わないが、
14143 その場合、途中にあるディレクトリはすでに存在していなければならない。
14145 @item --suffix=@var{suffix}
14147 @var{template} の末尾に @var{suffix} を追加する。@var{suffix}
14148 はスラッシュを含んでいてはならない。@option{--suffix} を指定する場合、
14149 @var{template} は @samp{X} で終わっていなければならない。
14150 @option{--suffix} が指定されていない場合は、@var{template}
14151 中の最後の @samp{X} の位置を調べることで、@var{suffix} としてふさわしいものを推測する。
14152 このオプションが存在するのは、デフォルトの @var{template} を使用しているとき、
14153 @samp{X} で始まる @var{suffix} を付けられるようにするためである。
14157 @var{template} を、環境変数 @env{TMPDIR} が設定されていれば、
14158 その値であるディレクトリ直下の 1 個のファイルとして扱う。
14159 @env{TMPDIR} が設定されていなければ、@option{-p} で指定されるディレクトリ直下、
14160 それ以外の場合は、@samp{/tmp} 直下になる。なお、@var{template}
14161 にスラッシュが含まれていてはならない。このオプションは非推奨である。
14162 @option{-t} なしで @option{-p} を使う方が (@env{TMPDIR}
14163 よりコマンドラインの指定を優先するという点で) デフォルトの動作として優れているし、
14164 (途中のディレクトリも指定できるという点で) 柔軟性も上だからである。
14168 @cindex exit status of @command{mktemp}
14177 @node realpath invocation
14178 @section @command{realpath}: ファイル名を展開して表示する
14181 @cindex file names, canonicalization
14182 @cindex symlinks, resolution
14183 @cindex canonical file name
14184 @cindex canonicalize a file name
14188 @command{realpath} は、すべてのシンボリックリンクを展開し、
14189 @samp{/./} や @samp{/../} に対する参照を解決する。
14190 さらに、余分な @samp{/} 文字の削除も行う。デフォルトでは、
14191 指定したファイル名のうち、最後の要素以外のすべての要素が実在していなければならない。
14196 realpath [@var{option}]@dots{} @var{file}@dots{}
14199 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14204 @itemx --canonicalize-existing
14206 @opindex --canonicalize-existing
14207 指定されたファイル名中のすべての構成要素が実在することを確認する。
14208 存在しなかったり、利用できなかったりする要素があると、@option{-q}
14209 オプションが指定されていないかぎり、@command{realpath}
14210 はエラーメッセージを出し、0 以外の終了コードで終了する。
14211 ファイル名の末尾にスラッシュを付けると、その名前はディレクトリであるという指定になる。
14214 @itemx --canonicalize-missing
14216 @opindex --canonicalize-missing
14217 指定されたファイル名中に存在しなかったり、使用できなかったりする構成要素があれば、
14224 指定されたファイル名中にあるシンボリックリンクを展開する。
14225 ただし、シンボリックリンクに @samp{..} という要素が後続している場合は、
14226 シンボリックリンクの展開を行う前に、そちらを先に処理する。
14227 (訳注: 例を挙げた方が、わかりやすいだろう。@samp{symlink-directory/../..}
14228 といったファイル名が与えられた場合、symlink-directory
14229 というシンボリックリンクそのものの親ディレクトリの親ディレクトリに展開するということ。
14235 @opindex --physical
14236 指定されたファイル名中にあるシンボリックリンクを展開する。
14237 シンボリックリンクに @samp{..} という要素が後続している場合も、
14238 シンボリックリンクを展開してから、@samp{..} の処理を行う。
14239 こちらがデフォルトの動作モードである。(訳注: すなわち、
14240 @samp{symlink-directory/../..} といったファイル名が与えられた場合、
14241 シンボリックリンクの参照先の親ディレクトリの親ディレクトリに展開する。)
14247 指定されたファイル名についてエラーメッセージを出力しない。
14249 @item --relative-to=@var{file}
14250 @opindex --relative-to
14252 オプション引数に指定したファイルを基点とする相対パスとして、
14253 ファイル名を展開する。このオプションは、ファイルの存在に関して
14254 @option{-m} や @option{-e} オプションを認識することに注意していただきたい。
14256 @item --relative-base=@var{base}
14257 @opindex --relative-base
14258 このオプションは @option{--relative-to} と一緒に使うこともでき、
14259 その場合は、操作対象の @var{file} が @var{base} 以下のディレクトリに存在するときにのみ、
14260 相対パス名を表示するように、@option{--relative-to} の出力に制限を課す。
14261 @var{file} が @var{base} 以下のディレクトリに存在しないときは、
14262 出力は絶対パスのファイル名になる。@option{--relative-to} を指定しなかった場合、
14263 @var{base} 以下のディレクトリに存在するファイルは、@var{base}
14264 を基点とする相対パスで表示される。@option{--relative-to} も指定するなら、
14265 そのディレクトリは @var{base} の下位ディレクトリでなければならず、
14266 さもないと、このオプションは効果を持たない。このオプションは、ファイルの存在に関して
14267 @option{-m} や @option{-e} オプションを認識することに注意していただきたい。
14271 realpath --relative-to=/usr /tmp /usr/bin
14274 realpath --relative-base=/usr /tmp /usr/bin
14281 @itemx --no-symlinks
14284 @opindex --no-symlinks
14285 シンボリックリンクの展開を行わない。すなわち、@samp{/./} や @samp{/../}
14286 の参照の解決と、余分な @samp{/} 文字の削除だけを行う。
14287 @option{-m} オプションと組み合わせた場合、@command{realpath}
14288 は与えられたファイル名に対して操作を行うだけであり、
14289 その各要素が存在しているかどうか、実在のファイルに当たってみることはない。
14295 @cindex exit status of @command{realpath}
14299 0: すべてのファイル名が問題なく表示できた場合。
14304 @node Working context
14307 @cindex working context
14308 @cindex commands for printing the working context
14310 この章では、現在作業中の環境を表示したり、変更したりするコマンドを説明する。
14311 ここで環境というのは、カレントディレクトリ、端末の設定などである。
14312 次章で取り上げるユーザ関係のコマンドも参照していただきたい。
14315 * pwd invocation:: 現在作業中のディレクトリを表示する。
14316 * stty invocation:: 端末の諸特性を表示・変更する。
14317 * printenv invocation:: 環境変数を表示する。
14318 * tty invocation:: 標準入力に接続している端末のファイル名を表示する。
14322 @node pwd invocation
14323 @section @command{pwd}: 現在作業中のディレクトリを表示する
14326 @cindex print name of current directory
14327 @cindex current working directory, printing
14328 @cindex working directory, printing
14331 @command{pwd} は、カレントディレクトリの名前を表示する。
14336 pwd [@var{option}]@dots{}
14339 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14346 環境変数 @env{PWD} の値が、@samp{.} や @samp{..}
14347 を含まないカレントディレクトリの絶対パス名であっても、
14348 シンボリックリンクは含んでいるかもしれない。
14349 その場合は、その値をそのまま出力する。それ以外の場合は、デフォルトの
14350 @option{-P} オプションと同じ処理を行う。
14355 @opindex --physical
14356 カレントディレクトリについて、参照を完全に解決した名前を表示する。
14357 すなわち、表示される名前のすべての要素が、本物のディレクトリの名前になり、
14358 シンボリックリンクは一つも含まれない。
14361 @cindex symbolic links and @command{pwd}
14362 @option{-L} と @option{-P} のオプションが両方とも指定されている場合は、
14363 最後に指定された方が優先される。どちらのオプションも指定されない場合は、
14364 環境変数 @env{POSIXLY_CORRECT} が設定されていないかぎり、この実装では、
14365 @option{-P} がデフォルトとして使用される。
14367 @mayConflictWithShellBuiltIn{pwd}
14372 @node stty invocation
14373 @section @command{stty}: 端末の諸特性を表示・変更する
14376 @cindex change or print terminal settings
14377 @cindex terminal settings
14378 @cindex line settings of terminal
14380 @command{stty} は、たとえばボーレート (baud rate) のような、端末の諸特性を表示、
14386 stty [@var{option}] [@var{setting}]@dots{}
14387 stty [@var{option}]
14390 tty ラインの設定 (訳注: 上記書式の @var{setting}) を一つも指定しない場合、
14391 @command{stty} は、ボーレートと (それをサポートしているシステムでは)
14392 ライン制御規則番号 (line discipline number)、それに、ライン設定のうち
14393 @samp{stty sane} によって設定される値から変更のあるものを表示する。
14394 デフォルトでは、モードの取得や設定は、標準入力に結びついている tty ラインに対して行うが、
14395 これは @option{--file} オプションによって変更することができる。
14397 @command{stty} では、以下で述べるように、オプションではないたくさんの引数が使える。
14398 そうした引数は、端末ライン運用の様々な面を変更する。
14400 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14407 現在のすべての設定を人間に読みやすい形で表示する。
14408 このオプションを指定したときには、ラインの設定はできない。
14410 @item -F @var{device}
14411 @itemx --file=@var{device}
14414 標準入力に結びついている tty ラインを操作の対象にする代わりに、
14415 @var{device} で指定されたファイル名を使ってオープンするラインを操作の対象にする。
14416 このオプションが必要なのは、POSIX 準拠の tty をオープンするには、
14417 @code{O_NONDELAY} フラグを使う必要があるからだ。
14418 そうしないと、POSIX 準拠の tty は、@code{clocal} フラグがセットされていない場合に、
14419 キャリア検出線 (carrier detect line) が活発化するまで、ブロッキングを起こす。
14420 そんなわけで、デバイスのオープンは、いつも通りのやり方で
14421 (訳注: たとえば、@samp{stty < /dev/ttyS1} といった形で)
14422 シェルにやらせておけばよい、というわけには必ずしも行かないのである。
14428 @cindex machine-readable @command{stty} output
14429 現在の設定を別の @command{stty} コマンドを使って再現する際に、
14430 その引数として使えるような形で、現在のすべての設定を表示する。
14431 このオプションを指定したときには、ラインの設定はできない。
14435 設定の多くは、前に @samp{-} を付けることで OFF にすることができる。
14436 以下では、そうした引数については、説明中に「無効化できる」と記しておいた。
14437 説明そのものは、有効にする場合について、すなわち、@samp{-} で OFF にしない場合について述べている
14438 (「無効にした場合」とはっきりことわっている場合は、もちろん別である)。
14440 設定の中には、すべての POSIX 準拠システムで利用できるとはかぎらないものもある。
14441 そうしたものは、拡張機能を使用しているからだ。
14442 以下では、そうした引数については、説明中に「非 POSIX」と記しておいた。
14443 非 POSIX のシステムであっても、そうした設定が使えないことがあるかもしれないが、
14444 あらゆる場合について書いておくことは、不可能である。とりあえず、試してみていただきたい。
14446 @command{stty} がインストールされるのは、POSIX ターミナルインターフェースを備えたシステムだけである。
14447 従って、移植を考慮したスクリプトでは、非 POSIX システムに @command{stty}
14448 コマンドが存在することを当てにしない方がよい。
14453 * Control:: 制御関係の設定
14455 * Output:: 出力に関する設定
14457 * Combination:: 組み合わせ設定
14458 * Characters:: 特殊文字
14464 @subsection 制御関係の設定
14466 @cindex control settings
14472 @cindex two-way parity
14473 出力にパリティビットを生成し、入力にもパリティビットがあるものと期待する。
14479 @cindex even parity
14480 パリティを奇数に設定する。無効化できる (この設定の場合、@samp{-}
14485 @cindex constant parity
14486 @cindex stick parity
14487 @cindex mark parity
14488 @cindex space parity
14489 "stick" (mark/space) パリティを使用する。
14490 parodd が設定されている場合、このパリティビットは常に 1 である。
14491 parodd が設定されていない場合、このパリティビットは常に 0 だ。
14499 @cindex character size
14500 @cindex eight-bit characters
14501 キャラクタ・サイズを 5, 6, 7, 8 ビットにする。
14506 最後のプロセスが tty をクローズするとき、ハングアップ・シグナルを送る。
14512 1 キャラクタにつき 2 個のストップビットを使用する。無効化できる
14513 (この設定の場合、@samp{-} の前置は 1 個のストップビット使用を意味する)。
14521 @cindex modem control
14522 モデムのコントロール・シグナルを無効にする。無効化できる。
14526 @cindex hardware flow control
14527 @cindex flow control, hardware
14528 @cindex RTS/CTS flow control
14529 RTS/CTS フロー制御を有効にする。非 POSIX。無効化できる。
14533 @cindex hardware flow control
14534 @cindex flow control, hardware
14535 @cindex DTR/DSR flow control
14536 DTR/DSR フロー制御を有効にする。非 POSIX。無効化できる。
14541 @subsection 入力に関する設定
14543 @cindex input settings
14544 以下の設定は、端末から受け取るデータに対する操作を制御する。
14549 @cindex breaks, ignoring
14550 ブレーク (break) 文字を無視する。無効化できる。
14554 @cindex breaks, cause interrupts
14555 ブレークが割り込みシグナルを発生するようにする。無効化できる。
14559 @cindex parity, ignoring
14560 パリティエラーのある文字を無視する。無効化できる。
14564 @cindex parity errors, marking
14565 パリティエラーをマークする (その印として 255, 0 (0xFF, 0x00) という
14566 2 文字の連続を使う)。無効化できる。
14570 入力のパリティチェックを有効にする。無効化できる。
14574 @cindex eight-bit input
14575 入力文字の高位ビット (8 番目のビット) をクリアする。無効化できる。
14579 @cindex newline, translating to return
14580 改行文字 (newline) を復帰文字 (carriage return) に変換する。無効化できる。
14584 @cindex return, ignoring
14589 @cindex return, translating to newline
14590 復帰文字を改行文字に変換する。無効化できる。
14594 @cindex input encoding, UTF-8
14595 入力文字が UTF-8 で符号化されていると見なす。無効化できる。
14599 @kindex C-s/C-q flow control
14600 @cindex XON/XOFF flow control
14601 XON/XOFF フロー制御を有効にする (すなわち、@kbd{Ctrl-S}/@kbd{Ctrl-Q}
14608 @cindex software flow control
14609 @cindex flow control, software
14610 システムの入力バッファが一杯になりかけたら、@code{stop} 文字を送り、
14611 バッファがほぼ空に戻ったら、@code{start} 文字を送るようにする。
14616 @cindex uppercase, translating to lowercase
14617 大文字を小文字に変換する。非 POSIX。無効化できる。
14618 ilcuc は実装されていないことに注意していただきたい。
14619 そんなものを有効にしたら、ほとんどの (小文字である) Unix のコマンドが、
14624 どんな文字でも出力を再開できるようにする (これを無効にすると、start
14625 文字のみが出力を再開する)。非 POSIX。無効化できる。
14629 @cindex beeping at input buffer full
14630 入力バッファが一杯のとき、文字を受け取ると、入力バッファをフラッシュせずに、
14631 ビープ音を鳴らすようにする。非 POSIX。無効化できる。
14636 @subsection 出力に関する設定
14638 @cindex output settings
14639 以下の設定は、端末に送るデータに対する操作を制御する。
14644 出力に対して後処理 (postprocess) を行う
14645 (訳注: すなわち、以下に列挙するようなことをする)。無効化できる。
14649 @cindex lowercase, translating to output
14650 小文字を大文字に変換する。非 POSIX。無効化できる。
14651 (ouclc は現在のところ、実装されていないことに注意。)
14655 @cindex return, translating to newline
14656 復帰文字 (carriage return) を改行文字 (newline) に変換する。
14661 @cindex newline, translating to crlf
14662 改行文字を復帰文字 + 改行文字に変換する。非 POSIX。無効化できる。
14666 行頭に復帰文字を出力しない。非 POSIX。無効化できる。
14670 改行が復帰として動作する。非 POSIX。無効化できる。
14674 @cindex pad instead of timing for delaying
14675 時間で間合いを計る代りに、充填文字 (埋め草文字) を何字か送ることで、遅延を行う。
14676 非 POSIX。無効化できる。(訳注: 遅延というのは、端末側の処理が済むまで、データの送出を遅らせること)。
14680 @cindex pad character
14681 充填文字として ASCII NUL 文字ではなく、ASCII DEL 文字を使う。
14687 改行 (newline) 用の遅延方式。非 POSIX。
14694 復帰 (carriage return) 用の遅延方式。非 POSIX。
14700 @opindex tab@var{n}
14701 水平タブ用の遅延方式。非 POSIX。
14706 バックスペース用の遅延方式。非 POSIX。
14711 垂直タブ用の遅延方式。非 POSIX。
14716 改ページ (form feed) 用の遅延方式。非 POSIX。
14723 @cindex local settings
14728 特殊文字 @code{interrupt}, @code{quit}, @code{suspend} を有効にする。無効化できる。
14732 特殊文字 @code{erase}, @code{kill}, @code{werase}, @code{rprnt}
14737 POSIX にない特殊文字を有効にする。無効化できる。
14741 入力した文字をエコーする。無効化できる。
14747 @code{erase} 文字を「バックスペース、スペース、バックスペース」としてエコーする。無効化できる。
14751 @cindex newline echoing after @code{kill}
14752 @code{kill} 文字に続けて、改行文字をエコーする。無効化できる。
14756 @cindex newline, echoing
14757 他の文字のエコーを行わないない場合でも、改行文字はエコーする。
14762 @cindex flushing, disabling
14763 特殊文字 @code{interrupt} や @code{quit} の後で、フラッシュを行わない。無効化できる。
14767 @cindex case translation
14768 @code{icanon} が設定されているとき、小文字を表す文字の頭に
14769 @samp{\} を付けることで、大文字の入出力を可能にする。非 POSIX。無効化できる。
14770 (訳注: たとえば、大文字しか入出力できない端末で、ただの @samp{A} なら小文字の
14771 a を意味し、@samp{\A} なら大文字の A を意味するようにすること。
14772 次節「組み合わせ設定」の lcase と termios(3) を参照。)
14776 @cindex background jobs, stopping at terminal write
14777 端末に書き込もうとしているバックグラウンドジョブを止める。
14784 削除した文字を @samp{\} と @samp{/} で囲んで、逆順にエコーする。非 POSIX。
14785 無効化できる。(訳注: プリンタ端末で使用する設定らしい。)
14791 @cindex control characters, using @samp{^@var{c}}
14792 @cindex hat notation for control characters
14793 制御文字をそのまま表示するのではなく、ハット記法 (@samp{^@var{c}}) でエコーする。
14800 行上の各文字を削除することで、特殊文字 @code{kill} のエコーを行う際、
14801 @code{echoctl} や @code{echok} の設定ではなく、@code{echoprt} や
14802 @code{echoe} の設定が指示するところに従う。非 POSIX。無効化できる。
14806 @samp{LINEMODE} を有効にする。@samp{LINEMODE}
14807 を使用すれば、各文字のエコーを遅延の大きいリンクを通して行わないで済む。
14808 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc1116.txt, Internet RFC 1116}
14809 も参照していただきたい。非 POSIX。無効化できる。
14813 出力を破棄する。この設定は、現在のところ GNU/Linux システムでは無視されることに注意。
14819 @subsection 組み合わせ設定
14821 @cindex combination settings
14829 @code{parenb -parodd cs7} に相当する。無効化できる。無効化した場合、
14830 @code{-parenb cs8} と同じになる。
14834 @code{parenb parodd cs7} に相当する。無効化できる。無効化した場合、
14835 @code{-parenb cs8} と同じになる。
14839 @code{-icrnl -onlcr} に相当する。無効化できる。無効化した場合、@code{icrnl
14840 -inlcr -igncr onlcr -ocrnl -onlret} と同じになる。
14844 特殊文字 @code{erase} と @code{kill} をデフォルトの値に戻す。
14850 @c This is too long to write inline.
14852 cread -ignbrk brkint -inlcr -igncr icrnl
14853 icanon iexten echo echoe echok -echonl -noflsh
14854 -ixoff -iutf8 -iuclc -ixany imaxbel -xcase -olcuc -ocrnl
14855 opost -ofill onlcr -onocr -onlret nl0 cr0 tab0 bs0 vt0 ff0
14856 isig -tostop -ofdel -echoprt echoctl echoke -extproc
14860 さらに、すべての特殊文字をそのデフォルトの値に設定する。
14864 @code{brkint ignpar istrip icrnl ixon opost isig icanon} に相当する。
14865 さらに、特殊文字 @code{eof} と @code{eol} が @code{min} 及び @code{time}
14866 文字と同じならば、@code{eof} と @code{eol} をデフォルトの値に設定する。
14867 無効化できる。無効化した場合は、@code{raw} と同じになる。
14874 -ignbrk -brkint -ignpar -parmrk -inpck -istrip
14875 -inlcr -igncr -icrnl -ixon -ixoff -icanon -opost
14876 -isig -iuclc -ixany -imaxbel -xcase min 1 time 0
14880 無効化できる。無効化した場合は、@code{cooked} と同じになる。
14884 @option{-icanon} と同じである。無効化できる。
14885 無効化した場合は、@code{icanon} と同じになる。
14889 @cindex eight-bit characters
14890 @code{-parenb -istrip cs8} に相当する。無効化できる。無効化した場合は、
14891 @code{parenb istrip cs7} と同じになる。
14895 @option{-parenb -istrip -opost cs8} に相当する。無効化できる。
14896 無効化した場合は、@code{parenb istrip opost cs7} と同じになる。
14900 @option{-ixany} と同じである。非 POSIX。無効化できる。
14904 @code{tab0} と同じである。非 POSIX。無効化できる。無効化した場合は、
14905 @code{tab3} と同じになる。
14911 @code{xcase iuclc olcuc} に相当する。非 POSIX。無効化できる。
14912 (この設定は、大文字しか扱えない端末で使用する。)
14916 @code{echoe echoctl echoke} に相当する。
14920 @code{echoe echoctl echoke -ixany intr ^C erase ^? kill ^U} に相当する。
14927 @cindex special characters
14928 @cindex characters, special
14930 特殊文字のデフォルトの値は、システムによって様々である。
14931 特殊文字を設定するには、@samp{name value} という書式を用いる。
14932 この name に何が指定できるかは、以下に列挙するが、value には、文字そのもの、
14933 ハット記法 (@samp{^@var{c}})、整数のいづれかを指定することができる。
14934 整数は、@samp{0x} で始まっていれば 16 進数、@samp{0} で始まっていれば
14935 8 進数、それ以外の数字なら 10 進数と見なされる。
14937 @cindex disabling special characters
14938 @kindex u@r{, and disabling special characters}
14939 GNU の stty では、値に @code{^-} や @code{undef} を指定すると、
14940 その特殊文字を無効にする。(これは、Ultrix の @command{stty}
14941 と互換性がない。そこでは、特殊文字を無効にするには @samp{u}
14942 という値が使用されるのだ。GNU の @command{stty} は、@samp{u}
14943 という値を特別扱いしない。すなわち、その特殊文字として @key{U}
14950 割り込み (interrupt) シグナルを送る。
14966 ファイル終端 (end of file) 文字を送る (入力を終了する)。
14974 行を終端する別の文字。非 POSIX。
14979 出力を廃棄するか否かをトグルで切り替える文字。非 POSIX。
14983 シェルの別の層 (a different shell layer) に切り換える。非 POSIX。
14987 info シグナルを送る。現在のところ Linux ではサポートされていない。非 POSIX。
14999 端末からの停止シグナル (terminal stop signal, SIGTSTP) を送る。
15003 入力をフラッシュしてから、端末からの停止シグナルを送る。非 POSIX。
15011 直前にタイプした単語 (word) を削除する。非 POSIX。
15015 次にタイプする文字が特殊文字であっても、タイプしたとおりの文字として入力する。
15016 非 POSIX。(訳注: たとえば、lnext が ^V の場合、^V^D
15017 と続けてタイプすると、^D を入力終了の印としてではなく、^D
15018 という文字そのものとして入力できるということ。)
15025 @cindex special settings
15030 @option{-icanon} が設定されている際、time の値として指定されている時間が経過するまでの間に、
15031 1 回分の読み込みの条件を満たす最少限の文字数を設定する。
15035 @option{-icanon} が設定されている際、最小限の文字数が読み込まれなかった場合に、
15036 読み込みが時間切れになるまでの時間を 10 分の 1 秒単位で設定する。
15038 @item ispeed @var{n}
15040 入力速度を @var{n} に設定する。
15042 @item ospeed @var{n}
15044 出力速度を @var{n} に設定する。
15048 端末の行数は @var{n} 行だと、tty カーネルドライバに伝える。非 POSIX。
15051 @itemx columns @var{n}
15054 端末の横幅は @var{n} 桁だと、カーネルに伝える。非 POSIX。
15058 @cindex nonblocking @command{stty} setting
15059 保留になっている出力が送出されるのを待ち、その後で設定を適用する。
15060 GNU の @command{stty} では、デフォルトで有効になっている。
15061 システムが、シリアルな伝送ができない状態になっているかもしれない場合には、
15063 たとえば、@code{ixon} (ソフトウェアによるフロー制御)
15064 が有効になっている場合に、システムが @samp{DC3} 文字を受け取っていたりすると
15065 (訳注: @samp{DC3} は device control 3、すなわち ASCII 0x13、@samp{^S})、
15066 @code{-drain} の指定なしでは、@command{stty} はブロッキングを起こすだろう。
15073 端末の行数と桁数を表示する。これは、端末が持っていると、カーネルが考えている行数と桁数である。
15074 (カーネルで行数や桁数をサポートしていないシステムでは、通常その代わりに、環境変数
15075 @env{LINES} や @env{COLUMNS} が使用される。
15076 それに対して、GNU の @command{stty} は、そうした環境変数について何も知らない。)
15081 ライン制御規則 (line discipline) @var{n} を使用する。非 POSIX。
15088 @cindex baud rate, setting
15089 入出力の速度を @var{n} に設定する。@var{n} には次の一つが使える。0 50 75 110
15090 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 19200 38400
15091 @code{exta} @code{extb}。@code{exta} は 19200 と同じであり、@code{extb} は 38400
15092 と同じである。GNU/Linux を含む多くのシステムが、もっと早い速度をサポートしている。
15093 @command{stty} は、システムがサポートしているならという条件で、次の速度もサポートしている。
15094 57600 115200 230400 460800 500000 576000 921600 1000000 1152000
15095 1500000 2000000 2500000 3000000 3500000 4000000。
15096 なお、0 は、@option{-clocal} が設定されている場合に、ラインを切断する。
15100 @node printenv invocation
15101 @section @command{printenv}: 環境変数のすべて、あるいは一部を表示する
15104 @cindex printing all or some environment variables
15105 @cindex environment variables, printing
15107 @command{printenv} は、環境変数の値を表示する。
15112 printenv [@var{option}] [@var{variable}]@dots{}
15115 @var{variable} が一つも指定されていない場合、@command{printenv}
15116 はすべての環境変数の値を表示する。@var{variable} が指定されている場合は、
15117 その変数それぞれについて、設定されていれば値を表示し、設定されていなければ何も表示しない。
15119 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
15127 @cindex exit status of @command{printenv}
15131 0: 指定されているすべての変数が見つかった。
15132 1: 指定されている変数のうちに、見つからなかったものがある。
15137 @node tty invocation
15138 @section @command{tty}: 標準入力に接続している端末のファイル名を表示する
15141 @cindex print terminal file name
15142 @cindex terminal file name, printing
15144 @command{tty} は、自分の標準入力に接続している端末のファイル名を表示する。
15145 標準入力が端末ではない場合は、@samp{not a tty} というメッセージを出す。
15150 tty [@var{option}]@dots{}
15153 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
15163 何も表示しない。終了ステータスを返すだけ。
15167 @cindex exit status of @command{tty}
15178 @node User information
15181 @cindex user information, commands for
15182 @cindex commands for printing user information
15184 この章では、ユーザ関係の情報を表示するコマンドの説明をする。
15185 誰がログインしているか、どんなグループに所属しているか、などである。
15188 * id invocation:: ユーザの ID を表示する。
15189 * logname invocation:: 現在のログイン名を表示する。
15190 * whoami invocation:: 実効ユーザ ID を表示する。
15191 * groups invocation:: ユーザが所属しているグループ名を表示する。
15192 * users invocation:: 現在ログインしている全ユーザのログイン名を表示する。
15193 * who invocation:: 現在誰がログインしているかを表示する。
15199 @node id invocation
15200 @section @command{id}: ユーザの ID を表示する
15203 @cindex real user and group IDs, printing
15204 @cindex effective user and group IDs, printing
15205 @cindex printing real and effective user and group IDs
15207 @command{id} は、指定されたユーザについて情報を表示する。
15208 ユーザが指定されていない場合は、@command{id} を実行しているプロセスについて情報を表示する。
15213 id [@var{option}]@dots{} [@var{user}]
15216 @var{user} にはユーザ ID (番号) とユーザ名のどちらも使えるが、ID が頭に
15217 @samp{+} を付けて指定されていないかぎり、まずユーザ名として検索が行われる。
15218 @xref{Disambiguating names and IDs}.
15220 @vindex POSIXLY_CORRECT
15221 デフォルトで表示するのは、実ユーザ ID、実グループ ID、実効ユーザ ID
15222 (実ユーザ ID と違う場合)、実効グループ ID (実グループID と違う場合)、
15223 それに、補助 (supplemental) グループ ID である。
15224 さらに、SELinux が有効になっていて、環境変数 @env{POSIXLY_CORRECT}
15225 が設定されていない場合は、@samp{context=@var{c}} も表示する。
15226 この @var{c} はセキュリティ・コンテキストである。
15228 表示される各数値には、それが何であるかを示す文字列が前に付き、
15229 対応するユーザ名やグループ名がカッコで囲まれて後ろに続く。
15231 オプションを指定すると、@command{id} は上で述べた情報のうち、一部のみを表示する。
15232 参照: @ref{Common options}.
15245 グループ ID と補助グループ ID のみ表示する。
15251 ID 番号の代りに、ユーザ名やグループ名を表示する。@option{-u}, @option{-g}, @option{-G}
15258 実効ユーザや実効グループの ID ではなく、実ユーザや実グループの ID を表示する。
15259 @option{-u}, @option{-g}, @option{-G} のどれか一つを指定する必要がある。
15272 @cindex security context
15273 現プロセスのセキュリティ・コンテキストのみを表示する。
15274 たいていの場合、それは、親プロセスから継承したユーザのセキュリティ・コンテキストである。
15275 SELinux と SMACK のどちらも有効になっていない場合は、
15276 警告メッセージを出し、終了ステータスを 1 にする。
15282 出力する項目を NUL 文字で区切る。
15283 このオプションは、デフォルトのフォーマットを使用しているときは、使うことができない。
15288 users <NUL> devs <NUL>
15293 @macro primaryAndSupplementaryGroups{cmd,arg}
15294 プロセスの基本 (primary) グループや 補助 (supplementary) グループは、
15295 通常その親プロセスから継承され、ログイン後ずっと変わらないのが普通だ。
15296 従って、ログイン後にグループ・データベースを変更しても、
15297 現在のログインセッションが続いている間は、@command{\cmd\} コマンドはその変更を反映しない。
15298 しかし、\arg\を指定して @command{\cmd\} を実行した場合は、
15299 ユーザ・データベースやグループ・データベースの参照が改めて行われるので、
15302 @primaryAndSupplementaryGroups{id,引数にユーザの名前}
15306 @node logname invocation
15307 @section @command{logname}: 現在のログイン名を表示する
15310 @cindex printing user's login name
15311 @cindex login name, printing
15312 @cindex user name, printing
15315 @command{logname} は、自分を呼び出しているユーザの名前を、システムが管理しているファイル
15316 (たいていは @file{/var/run/utmp} か @file{/etc/utmp})
15317 で調べて表示し、ステータス 0 で終了する。
15318 自分を呼び出しているプロセスのエントリが存在しない場合は、
15319 エラーメッセージを出し、ステータス 1 で終了する。
15321 オプションは、@option{--help} と @option{--version} だけである。
15322 @xref{Common options}.
15327 @node whoami invocation
15328 @section @command{whoami}: 実効ユーザ ID を表示する
15331 @cindex effective user ID, printing
15332 @cindex printing the effective user ID
15334 @command{whoami} は、現在の実効ユーザ ID に対応するユーザ名を表示する。
15335 @samp{id -un} コマンドと同じことである。
15337 オプションは、@option{--help} と @option{--version} だけである。
15338 @xref{Common options}.
15343 @node groups invocation
15344 @section @command{groups}: ユーザが所属しているグループ名を表示する
15347 @cindex printing groups a user is in
15348 @cindex supplementary groups, printing
15350 @command{groups} は、@var{username} が指定されていれば、指定された各ユーザの基本
15351 (primary) グループ名と補助 (supplementary) グループ名を表示し、
15352 ユーザ名が指定されていなければ、現在のプロセスの基本グループ名と補助グループ名を表示する。
15354 各ユーザの名前がグループのリストの前に置かれ、両者の間はコロンで区切られる。
15359 groups [@var{username}]@dots{}
15362 グループのリストは、@samp{id -Gn} コマンドの出力と同じである。
15364 オプションは、@option{--help} と @option{--version} だけである。
15365 @xref{Common options}.
15367 @primaryAndSupplementaryGroups{groups,ユーザのリスト}
15371 @node users invocation
15372 @section @command{users}: 現在ログインしている全ユーザのログイン名を表示する
15375 @cindex printing current usernames
15376 @cindex usernames, printing current
15378 @cindex login sessions, printing users with
15379 @command{users} は、目下使用しているホストに現在ログインしている全ユーザのユーザ名のリストを、
15381 ユーザ名はログインセッションごとに表示されるので、
15382 あるユーザが複数のログインセッションを行っていれば、
15383 そのユーザの名前はログインセッションの数だけ出力に現れることになる。
15393 引数 @var{file} の指定がない場合、@command{users} はシステムが管理するファイル
15394 (たいていは @file{/var/run/utmp} か @file{/etc/utmp})
15395 からログインしているユーザの情報を引き出す。引数 @var{file}
15396 が指定されている場合は、代りにそのファイルを使用する。@file{/var/log/wtmp}
15399 オプションは、@option{--help} と @option{--version} だけである。
15400 @xref{Common options}.
15402 @command{users} コマンドがインストールされるのは、POSIX 準拠の @code{<utmpx.h>}
15403 インクルードファイル、またはそれに相当するものが存在するプラットフォームだけである。
15404 従って、移植を考慮したスクリプトでは、非 POSIX
15405 のプラットフォームにも @command{users} コマンドが存在することを当てにしない方がよい。
15410 @node who invocation
15411 @section @command{who}: 現在誰がログインしているかを表示する
15414 @cindex printing current user information
15415 @cindex information, about current users
15417 @command{who} は、現在ログインしているユーザについての情報を表示する。
15422 @command{who} [@var{option}] [@var{file}] [am i]
15425 @cindex terminal lines, currently used
15427 @cindex remote hostname
15428 オプション以外の引数が一つもない場合、@command{who}
15429 は現在ログインしている各ユーザについて、次の情報を表示する。
15430 ログイン名、端末ライン、ログイン日時、それにリモート・ホスト名か X ディスプレー名。
15434 オプション以外の引数を一つだけ指定すると、@command{who}
15435 はそれを、ログインしたユーザを記録しているファイルの名前として、
15436 システムが管理しているデフォルトのファイル (たいていは @file{/var/run/utmp} か
15437 @file{/etc/utmp}) の代りに使用する。@command{who} に引数として @file{/var/log/wtmp}
15438 を渡して、これまでに誰がログインしたかを調べるのはよくあることである。
15442 オプション以外の引数を二つ指定すると、@command{who}は、
15443 自分を実行しているユーザの情報のみを (自分が接続している標準入力からユーザの見当を付けて)、
15444 ホスト名を前に付けて表示する。渡される二つの引数は、全体として
15445 @samp{who am i} になるように、@samp{am i} とするのが慣例である。
15448 タイムスタンプは、タイムゾーンのルールに従って表示されるが、
15449 そのルールを指定しているのは、環境変数 @env{TZ} である。
15450 @env{TZ} が設定されていない場合は、システムのデフォルトのルールに従って表示される。
15451 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
15452 The GNU C Library Reference Manual}.
15454 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
15462 @samp{-b -d --login -p -r -t -T -u} と同じである。
15468 システムをブートした直近の日時を表示する。
15474 終了したプロセスに関する情報を表示する。
15486 現在システムがログインの窓口としてユーザを待ち受けているプロセスに関する情報のみを表示する。
15487 ユーザ名は常に @samp{LOGIN} である。
15491 utmp で見つかったホスト名について DNS を検索して正規名を得ようとする。
15492 これがデフォルトになっていないのは、インターネットに自動ダイアルアップで接続しているシステムでは、
15497 @samp{who am i} と同じである。
15503 init によって生み出されたプロセスのうち、現在活動中のものをリストする。
15509 ログインしているユーザのログイン名と人数のみを表示する。他のすべてのオプションを無効にする。
15514 @opindex --runlevel
15515 init プロセスの現在のランレベルを表示する (たぶん、直前のランレベルも)。
15519 無視する。他の版の @command{who} との互換性のためにある。
15525 システムクロックを最後に変更した日時を表示する。
15530 ログイン日時の後ろに、ユーザが何時間何分端末を使用していないかを (idle 状態かを) 表示する。
15531 @samp{.} は、ユーザがここ 1 分以内に端末操作をしたことを意味する。
15532 @samp{old} は、ユーザが 24 時間以上端末を使用していないということである。
15543 @opindex --writable
15544 @cindex message status
15545 @pindex write@r{, allowed}
15546 ログイン名の後ろに、ユーザのメッセージ受け入れ状態を示す 1 文字を表示する。
15549 @samp{+} @code{write} によるメッセージを受け入れる。
15550 @samp{-} @code{write} によるメッセージを拒否する。
15551 @samp{?} 端末デバイスが見つからない。
15556 @command{who} コマンドがインストールされるのは、POSIX 準拠の @code{<utmpx.h>}
15557 インクルードファイル、またはそれに相当するものが存在するプラットフォームだけである。
15558 従って、移植を考慮したスクリプトでは、非 POSIX
15559 のプラットフォームにも @command{who} コマンドが存在することを当てにしない方がよい。
15564 @node System context
15567 @cindex system context
15568 @cindex context, system
15569 @cindex commands for system context
15571 この章では、システム全体に関わる情報を表示したり、変更したりするコマンドを説明する。
15574 * date invocation:: システムの日付や時刻を表示、設定する。
15575 * arch invocation:: マシンのハードウェア名を表示する。
15576 * nproc invocation:: プロセッサの数を表示する。
15577 * uname invocation:: システムについて情報を表示する。
15578 * hostname invocation:: システム名を表示、設定する。
15579 * hostid invocation:: 数値によるホストの識別名を表示する。
15580 * uptime invocation:: システムの連続稼働時間と負荷を表示する。
15583 @node date invocation
15584 @section @command{date}: システムの日付や時刻を表示、設定する
15587 @cindex time, printing or setting
15588 @cindex printing the current time
15593 date [@var{option}]@dots{} [+@var{format}]
15594 date [-u|--utc|--universal] @c this avoids a newline in the output
15595 [ MMDDhhmm[[CC]YY][.ss] ]
15599 @command{date} を @var{format} 引数なしで起動すると、
15600 デフォルトの書式を指定して起動するのと同じことになる。
15601 デフォルトの書式は、@env{LC_TIME} ロケール・カテゴリによって様々である。
15602 デフォルトの C ロケールの場合、その書式は @samp{'+%a %b %e %H:%M:%S %Z %Y'}
15603 なので、出力は @samp{Thu Mar @ 3 13:47:51 PST 2005} のような形になる。
15606 通常 @command{date} は、環境変数 @env{TZ} が指示しているタイムゾーンのルールを使用し、
15607 @env{TZ} が設定されていないときは、システムのデフォルトのルールを使用する。
15608 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
15609 The GNU C Library Reference Manual}.
15611 @findex strftime @r{and @command{date}}
15612 @cindex time formats
15613 @cindex formatting times
15614 @samp{+} で始まる引数を指定すると、@command{date} は現在の日付と時刻を
15615 (あるいは、後述する @option{--date} オプションで指定した日付と時刻を)、
15616 その引数によって定義された書式で表示する。書式を指定するこの引数は、@code{strftime}
15617 関数のそれとほぼ同じである。なお、@samp{%} で始まる変換指定子を除いて、
15618 書式文字列中の文字は、変更されずにそのまま表示される。
15619 変換指定子については、次節以降で説明する。
15624 * Time conversion specifiers:: 時刻関係の変換指定子 %[HIklMNpPrRsSTXzZ]。
15625 * Date conversion specifiers:: 日付関係の変換指定子 %[aAbBcCdDeFgGhjmuUVwWxyY]。
15626 * Literal conversion specifiers:: 文字変換指定子 %[%nt]。
15627 * Padding and other flags:: 0 や空白による空き埋め、その他。
15628 * Setting the time:: システムクロックの変更。
15629 * Options for date:: 現在の日時以外の指定。
15631 * Date input formats:: 日付文字列の指定法。
15633 * Examples of date:: 用例。
15636 @node Time conversion specifiers
15637 @subsection 時刻関係の変換指定子
15639 @cindex time conversion specifiers
15640 @cindex conversion specifiers, time
15642 @command{date} の時刻関係の変換指定子
15646 時 (@samp{00}@dots{}@samp{23})
15648 時 (@samp{01}@dots{}@samp{12})
15650 時。一桁のときは、0 ではなく、空白で埋める (@samp{ 0}@dots{}@samp{23})。
15651 @samp{%_H} と同じ。これは GNU の拡張である。
15653 時。一桁のときは、0 ではなく、空白で埋める (@samp{ 1}@dots{}@samp{12})。
15654 @samp{%_I} と同じ。これは GNU の拡張である。
15656 分 (@samp{00}@dots{}@samp{59})
15658 ナノ秒 (@samp{000000000}@dots{}@samp{999999999})。これは GNU の拡張である。
15660 現在のロケールで @samp{AM} や @samp{PM} に相当するもの。空白になるロケールも多い。
15661 正午は @samp{PM} として、真夜中は @samp{AM} として扱う。
15663 @samp{%p} と同様だが、小文字を使う。これは GNU の拡張である。
15665 現在のロケールによる 12 時間表記の時刻 (例: @samp{11:11:04 PM})
15667 24 時間表記の時と分。@samp{%H:%M} と同じ。
15669 @cindex epoch, seconds since
15670 @cindex seconds since the epoch
15671 @cindex beginning of time
15672 @cindex leap seconds
15673 ジ・エポック (the epoch、Unix 紀元)、すなわち 1970-01-01 00:00:00 UTC
15674 からの経過秒数。閏秒のサポートを利用できない場合、閏秒は計算に入れない。
15675 用例については、「@command{date} の用例」を見ること。
15676 @xref{%s-examples}. これは GNU の拡張である。
15678 @cindex leap seconds
15679 秒 (@samp{00}@dots{}@samp{60})。閏秒がサポートされている場合、@samp{60}
15682 24 時間表記の時、分、秒。@samp{%H:%M:%S} と同じ。
15684 現在のロケールによる時刻表示 (例: @samp{23:13:48})
15686 @w{RFC 2822/ISO 8601} 形式の数値によるタイムゾーン (たとえば、@samp{-0600} や
15687 @samp{+0530})。タイムゾーンが特定できない場合は、空になる。
15688 この値は、環境変数 @env{TZ} によって指定されたタイムゾーンのルールを使用することで、
15689 現在の日時に対応した、数値によるタイムゾーンを正しく反映する
15690 (訳注: 要するに、夏時間、冬時間が存在する地帯では、それを反映するということ)。
15691 操作の対象となる日時は (もしそうしたければ、その日時におけるタイムゾーンのルールも)、
15692 @option{--date} オプションによって変更することができる。
15694 @w{RFC 3339/ISO 8601} 形式の、@samp{:} を使用する数値によるタイムゾーン
15695 (たとえば、@samp{-06:00} や @samp{+05:30})。
15696 タイムゾーンが特定できない場合は、空になる。これは GNU による拡張である。
15698 @samp{:} を使用する数値によるタイムゾーンで、もっとも近い秒まで表示する
15699 (たとえば、@samp{-06:00:00} や @samp{+05:30:00})。
15700 タイムゾーンが特定できない場合は、空になる。これは GNU による拡張である。
15702 @samp{:} を使用する数値によるタイムゾーンで、時間の精度を必要最小限で済ます
15703 (たとえば、@samp{-06}, @samp{+05:30}, @samp{-04:56:02})。
15704 タイムゾーンが特定できない場合は、空になる。これは GNU による拡張である。
15706 アルファベットによるタイムゾーンの略称 (たとえば、@samp{EDT})。
15707 タイムゾーンが特定できない場合は、空になる。タイムゾーンがどのようにして特定されるか
15708 (訳注: たとえば、アメリカ東部なら、EST (冬時間) と EDT (夏時間)
15709 のどちらが選ばれるか) については、@samp{%z} を参照すること。
15713 @node Date conversion specifiers
15714 @subsection 日付関係の変換指定子
15716 @cindex date conversion specifiers
15717 @cindex conversion specifiers, date
15719 @command{date} の日付関係の変換指定子。
15723 現在のロケールによる曜日の省略形 (例: @samp{Sun})
15725 現在のロケールによる曜日の省略しない表現。長さは不定 (例: @samp{Sunday})
15727 現在のロケールによる月名の省略形 (例: @samp{Jan})
15729 現在のロケールによる月名の省略しない表現。長さは不定 (例: @samp{January})
15731 現在のロケールによる日付と時刻 (例: @samp{Thu Mar @ 3 23:05:25 2005})
15733 世紀。@samp{%Y} に似ているが、下二桁を省略している。たとえば、@samp{%Y} が
15734 @samp{2000} ならば、@samp{%C} は @samp{20}、@samp{%Y} が @samp{-001} ならば、@samp{%C}
15736 である。通例、少なくとも 2 個の文字からなるが、2 個以上のこともありえる。
15738 その月の何日目か (e.g., @samp{01})
15740 日付。@samp{%m/%d/%y} と同じ
15742 その月の何日目か。一桁のときは、0 ではなく、空白で埋める。@samp{%_d}
15745 ISO 8601 形式の完全な日付。@samp{%Y-%m-%d} と同じ。
15746 日付の形式にこれを選ぶのは、好判断である。標準的な形式だし、年度が 0000@dots{}9999
15747 の範囲にある通常の場合に、ソートしやすい。
15749 ISO 週番号に対応する年度表示だが、世紀の部分を省略している
15750 (その結果、@samp{00} から @samp{99} の範囲になる)。
15751 これは普通 @samp{%y} と同じ形式、同じ値になるが、ISO 週番号 (@samp{%V} 参照)
15752 が前年、または翌年に属する場合は、そちらの年度が代りに使用される点が異なる。
15754 ISO 週番号に対応する年度表示。これは普通 @samp{%Y} と同じ形式、同じ値になるが、
15755 ISO 週番号 (@samp{%V} 参照) が前年、または翌年に属する場合は、
15756 そちらの年度が代りに使用される点が異なる。通常、これが役に立つのは、
15757 @samp{%V} も一緒に使用するときだけである。たとえば、@samp{%G-%m-%d}
15758 という書式は、ISO 週番号による年度と普段使用する月や日を組み合わせているので、
15763 その年の何日目か (@samp{001}@dots{}@samp{366})
15765 月 (@samp{01}@dots{}@samp{12})
15767 四半期 (@samp{1}@dots{}@samp{4})
15769 その週の何日目か (@samp{1}@dots{}@samp{7})。@samp{1} は月曜日に当たる。
15771 日曜日を週の最初の日とする、その年の週番号 (@samp{00}@dots{}@samp{53})。
15772 新しい年の最初の日曜日より前の日々は、第 0 週に属する。
15774 ISO 週番号。すなわち、月曜日を週の最初の日とする、その年の週番号
15775 (@samp{01}@dots{}@samp{53})。1 月 1 日を含む週が、新しい年の日々を
15776 4 日以上含む場合は、その週が第 1 週であると見なされる。
15777 そうでない場合は、その週は前年の第 53 週であり、翌週が第 1 週になる。
15780 その週の何日目か (@samp{0}@dots{}@samp{6})。0 は日曜日に当たる。
15782 月曜日を週の最初の日とする、その年の週番号 (@samp{00}@dots{}@samp{53})。
15783 最初の月曜日より前の新しい年の日々は、第 0 週に属する。
15785 現在のロケールによる日付の表示 (例: @samp{12/31/99})
15787 年度の下二桁 (@samp{00}@dots{}@samp{99})
15789 年度。通例、少なくとも 4 文字だが、もっと多いこともある。@samp{0000} 年は
15790 @samp{0001} の前年であり、@samp{-001} 年は @samp{0000} の前年である。
15794 @node Literal conversion specifiers
15795 @subsection 文字変換指定子
15797 @cindex literal conversion specifiers
15798 @cindex conversion specifiers, literal
15800 日付や時刻以外の @command{date} の変換指定子。
15812 @node Padding and other flags
15813 @subsection 空き埋めなどのフラグ
15815 @cindex numeric field padding
15816 @cindex padding of numeric fields
15817 @cindex fields, padding numeric
15819 特に指定がないかぎり、@command{date} は通常、数値の入るフィールドの空きを
15820 0 で埋める。従って、たとえば、数値による月名は常に二桁の数字として出力される。
15821 しかし、ジ・エポック (Unix 紀元) 以来の経過秒数では、空きを埋めることはしない。
15822 この秒数には決まった長さがないからである。
15824 GNU の拡張として、以下に挙げるフラグの一つを @samp{%} の後ろに置くことができる
15829 (ハイフン) フィールドの空き埋めをしない。出力が人間に見せるためのものである場合に、役に立つ。
15831 (アンダースコア、下線) 空白で空き埋めをする。
15832 出力を一定の文字数にする必要があるが、0 で埋めたのでは見にくいという場合に、役に立つ。
15834 (ゼロ) 変換指定子が普通なら空白で埋める場合にも、ゼロで空き埋めをする。
15838 可能なら、反対の文字を使う。通常大文字のフィールドは小文字になり、
15846 date +%d/%m -d "Feb 1"
15848 date +%-d/%-m -d "Feb 1"
15850 date +%_d/%_m -d "Feb 1"
15854 これも GNU の拡張だが、フィールドの幅を 10 進数で指定することができる
15855 (数字は、上記のフラグがあれば、その後ろに置く)。
15856 そのフィールドの出力の加工前の長さが、幅として指定した文字数より短い場合は、
15857 右詰めにして、指定サイズにまで空き埋めした結果が書き出される。たとえば、@samp{%9B}
15858 は、右詰めにした月の名前を 9 文字分のフィールドに表示する。
15860 上記のフラグやフィールド幅の指定の後ろに、修飾子 (modifier) を付けることもできる
15861 (指定するしないは自由)。修飾子には、次のものがある。
15865 現在のロケールが持つもう一つの日時表記を使用する。この修飾子は、@samp{%c},
15866 @samp{%C}, @samp{%x}, @samp{%X}, @samp{%y}, @samp{%Y} に対して使用できる。
15867 たとえば、日本語ロケールで @samp{%Ex} とすれば、元号による日付を表示するだろう。
15870 現在のロケールが持つもう一つの数字表記を使用する。
15871 この修飾子は、数値を表す変換指定子にしか使用できない。
15874 書式が修飾子をサポートしていても、もう一つの表記が利用できない場合、
15878 @node Setting the time
15879 @subsection システムクロックの設定
15881 @cindex setting the time
15882 @cindex time setting
15883 @cindex appropriate privileges
15885 @samp{+} で始まらない引数を指定すると、@command{date} は、(以下で述べるように)
15886 その引数で指定した日時にシステムクロックを設定する。
15887 システムクロックを設定するには、しかるべき権限が必要である。リブート後も変更を維持するには、
15888 システムクロックに合わせてハードウェアクロックも更新する必要があるかもしれないことに注意していただきたい。
15889 ご使用のシステムでは、ハードウェアクロックの更新は、自動的に行われないかもしれないからだ。
15891 引き数の構成要素は、すべて数字でなければならない。それは以下の意味を持っている。
15893 (訳注: 念のため、この章の冒頭にあるシステムクロック設定用の書式を再掲しておく。
15894 date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ])
15913 注意していただきたいが、@option{--date} や @option{--set} オプションは、
15914 ここで述べている書式の引数と組み合わせて使うことができない。
15915 @option{--universal} オプションは、ここで述べている書式の引数と一緒に使うことができるが、
15916 その場合、指定されている日時が現在地のタイムゾーンではなく、協定世界時
15917 (UTC) に準じているのを示すことになる。
15920 @node Options for date
15921 @subsection @command{date} のオプション
15923 @cindex @command{date} options
15924 @cindex options for @command{date}
15926 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
15930 @item -d @var{datestr}
15931 @itemx --date=@var{datestr}
15934 @cindex parsing date strings
15935 @cindex date strings, parsing
15936 @cindex arbitrary date strings, parsing
15939 @opindex next @var{day}
15940 @opindex last @var{day}
15941 現在の日時の代りに、日付文字列 @var{datestr} で指定した日時を表示する。
15942 @var{datestr} には、よく使われる書式なら、ほとんどどんな書式でも使うことができる。
15943 月の名前、タイムゾーン、@samp{am} や @samp{pm}、@samp{yesterday}
15944 といった単語、などを含んでいてもよい。たとえば、@option{--date="2004-02-27
15945 14:19:13.489392193 +0530"} は、UTC よりも東 5 時間 30 分のタイムゾーンで
15946 2004 年 2 月 27 日 午後 2 時 19 分 13 秒から 489,392,193
15947 ナノ秒経過した瞬間を指定している。@*
15948 注意: 現在のところ、入力は、ロケールに依存しない書式でなければならない。
15949 たとえば、以下の例の LC_TIME=C は、多くのロケールで正しい日時を再表示させるために必要である。
15951 date -d "$(LC_TIME=C date)"
15953 参照: @xref{Date input formats}.
15957 @cindex debugging date strings
15958 @cindex date strings, debugging
15959 @cindex arbitrary date strings, debugging
15960 解析した日時について説明し、現在のタイムゾーンを表示し、
15961 間違えた使い方をしている疑いがあれば、警告を出す。
15963 @item -f @var{datefile}
15964 @itemx --file=@var{datefile}
15967 ファイル @var{datefile} の各行を @option{-d}
15968 の場合と同じように解析して、生成された日付と時刻を表示する。
15969 @var{datefile} が @samp{-} ならば、標準入力を使用する。
15970 処理する日付がたくさんある場合に、このオプションは重宝である。
15971 何故ならば、@command{date} コマンドを何度も起動するときのシステムのオーバーヘッドは、
15974 @item -I[@var{timespec}]
15975 @itemx --iso-8601[=@var{timespec}]
15976 @opindex -I[@var{timespec}]
15977 @opindex --iso-8601[=@var{timespec}]
15978 ISO 8601 の書式、@samp{%Y-%m-%d} を使って、日付を表示する。
15980 引数 @var{timespec} では、日付の後ろに時刻をどの単位まで追加するかを指定する。
15984 日付のみを表示する。@var{timespec} を省略した場合のデフォルト。
15999 時刻の部分まで表示するときは、@samp{%:z} の書式でタイムゾーンも付ける。
16000 @macro dateParseNote
16001 この書式は、使用しているロケールが何であるかを問わず、@option{--date} (@option{-d})
16002 や @option{--file} (@option{-f}) オプションに対する入力として、常に適切である。
16006 @item -r @var{file}
16007 @itemx --reference=@var{file}
16009 @opindex --reference
16010 現在の日付と時刻の代りに、@var{file} の内容を最後に更新した (the last
16011 modification) 日付と時刻を表示する。
16018 @opindex --rfc-2822
16019 日付と時刻を @samp{%a, %d %b %Y %H:%M:%S %z} という書式を使用し、
16020 C ロケールで評価して表示する。従って、月や曜日の省略形は常に英語になる。
16024 Fri, 09 Sep 2005 13:51:39 -0700
16027 この書式は、@uref{ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt, Internet RFC
16029 と @uref{ftp://ftp.rfc-editor.org/in-notes/rfc822.txt, RFC 822} に従っている。
16030 インターネットの E メールに関する現在と以前の規格である。
16032 @item --rfc-3339=@var{timespec}
16033 @opindex --rfc-3339=@var{timespec}
16034 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt, Internet RFC 3339}
16035 が規定している書式を使用して、日付を表示する。この書式は、ISO 8601
16036 の書式のサブセットだが、日付と時刻を区切るのに、@samp{T}
16037 という文字ではなく、空白を使うことをアプリケーションに許しているという相違点がある。
16040 引数 @var{timespec} では、時刻をどこまで表示するかを指定する。
16045 年から始まる日付だけを表示する。たとえば、@samp{2005-09-14}。
16046 これは、@samp{%Y-%m-%d} という書式と等価である。
16049 年から始まる日付と秒までの時刻を表示し、両者の間は空白で区切る。
16050 一例を挙げると、@samp{2005-09-14 00:56:06+05:30}。出力の末尾には、
16051 協定世界時からの時差が付く。例の場合、@samp{+05:30} は、地方時が
16052 UTC より 5 時間 30 分進んでいることを意味している。
16053 これは、@samp{%Y-%m-%d %H:%M:%S%:z} という書式と等価である。
16056 @samp{seconds} と似ているが、ナノ秒まで表示する。
16057 一例を挙げると、@samp{2005-09-14 00:56:06.998458565+05:30}。
16058 これは、@samp{%Y-%m-%d %H:%M:%S.%N%:z} という書式と等価である。
16062 @item -s @var{datestr}
16063 @itemx --set=@var{datestr}
16066 日付と時刻を @var{datestr} に設定する。上記の @option{-d} を参照。
16067 前節「システムクロックの設定」 も参照すること。@ref{Setting the time}.
16074 @opindex --universal
16075 @cindex Coordinated Universal Time
16077 @cindex Greenwich Mean Time
16079 @cindex leap seconds
16081 環境変数 @env{TZ} が、文字列 @samp{UTC0} に設定されているかのように、
16082 処理に協定世界時 (UTC, Coordinated Universal Time) を使用する。
16083 協定世界時は、歴史的な理由から「グリニッジ標準時 (GMT)」と呼ばれることもよくある。
16084 一般にシステムは閏秒を無視するので、日時は正真の UTC ではなく、UTC の近似値になる。
16088 @node Examples of date
16089 @subsection @command{date} の使用例
16091 @cindex examples of @command{date}
16093 用例をいくつか挙げてみる。前節の @option{-d} オプションの説明も参照していただきたい。
16101 date --date='2 days ago'
16105 今から 3 ヶ月と 1 日後の日付けを表示する。
16108 date --date='3 months 1 day'
16112 今年のクリスマスは年の初めから何日目かを表示する。
16115 date --date='25 Dec' +%j
16119 今日が何月何日かを、省略しない月の名前で表示する。
16125 しかし、月の最初の 9 日間では、@samp{%d} は空きを 0 で埋めた
16126 2 桁のフィールドに展開されるので、この結果はご希望のものとは違うかもしれない。
16127 たとえば、@samp{date -d 1may '+%B %d'} の出力は、@samp{May 01} になるのだ。
16130 月のうちの 1 桁の日々に対して、先頭に 0 を付けずに日付を表示したいのなら、
16131 (GNU の拡張である) @samp{-} フラグを使用すれば、空き埋めを全くしないようにすることができる。
16134 date -d 1may '+%B %-d'
16138 現在の日付と時刻を、non-GNU 版の @command{date}
16139 の多くでシステムクロックを設定するときに要求される書式で表示する。
16142 date +%m%d%H%M%Y.%S
16149 date --set='+2 minutes'
16153 日付を RFC 2822 の書式で表示するためには、@samp{date --rfc-2822}
16154 を使用する。ここに示すのは、出力の一例である。
16157 Fri, 09 Sep 2005 13:51:39 -0700
16160 @anchor{%s-examples}
16162 日付を表す文字列をジ・エポック (the epoch、Unix 紀元、すなわち、
16163 1970-01-01 00:00:00 UTC) からの経過秒数に変換するには、@option{--date}
16164 オプションを @samp{%s} 書式と組み合わせて使用する。
16165 これは、データを日付によってソートしたり、グラフ化したり、比較したりする際に、便利である。
16166 次のコマンドは、ジ・エポックから 2 分経ったときの、ジ・エポックからの経過秒数を出力する。
16169 date --date='1970-01-01 00:02:00 +0000' +%s
16173 日付を表す文字列でタイムゾーン情報を指定しない場合、@command{date}
16174 は、コンピュータが認識しているタイムゾーンを使用して、その文字列を解釈する。
16175 たとえば、使用しているコンピュータのタイムゾーンが、マサチューセッツ州のケンブリッジのものならば、
16176 それは UTC より 5 時間遅れているので、次のようになる。
16180 date --date='1970-01-01 00:02:00' +%s
16185 日付の付いたデータをソートしたり、グラフ化したりしているとしよう。
16186 その日付の加工前の値は、ジ・エポックからの経過秒数で表されているかもしれない。
16187 もっとも、@samp{946684800} といった日付を見て、
16188 「ああ、イギリスのグリニッジの 2000 年の最初の 0 秒だね」と、
16189 さりげなく言える人は、めったにいないけれど。
16192 date --date='2000-01-01 UTC' +%s
16196 なお、上と同じ結果は、@option{--utc} (@option{-u}) オプションを使っても得られ、
16197 その場合は、日付を表す文字列で @samp{UTC} を省略することができる。
16198 とは言え、@option{--utc} を使う方法は、@samp{%s} を始め、多くの書式文字列では、
16199 日付文字列で @samp{UTC} を使うのと同じ結果をもたらすものの、
16200 協定世界時からの時差が 0 ではないタイムゾーンでは、
16201 @samp{%z} など、タイムゾーンによって値が変わってくる書式文字列に対しては、
16202 異なる結果をもたらすことになるだろう。
16205 date -u --date=2000-01-01 +%s
16209 こうした秒数という扱いにくいデータをもっと読みやすい形に変換し直すには、
16214 date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z"
16215 1999-12-31 19:00:00 -0500
16218 coreutils 5.3.0 以来使用できるようになった @samp{@@}
16219 という表記に頼っても構わないなら、上記のコマンドを短くすることができる。
16222 date -d @@946684800 +"%F %T %z"
16223 1999-12-31 19:00:00 -0500
16226 UTC の日付や時刻を出力した方がよいことも多い。
16229 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
16230 2000-01-01 00:00:00 +0000
16234 @cindex leap seconds
16235 閏秒は秒数計算に入れないのが一般的だが、例外的なシステムもある。
16236 閏秒は予測できないものなので、閏秒を計算に入れる例外的なシステムでは、
16237 秒数による計算と未来の日時との対応は信頼性に欠ける。
16239 一般的なシステムと例外的なシステムの両者が、2012-06-30 23:59:60 UTC
16240 の閏秒をどのように処理しているかを以下に示す。
16243 # 一般的なシステムは閏秒を無視する:
16244 date --date='2012-06-30 23:59:59 +0000' +%s
16246 date --date='2012-06-30 23:59:60 +0000' +%s
16247 date: invalid date '2012-06-30 23:59:60 +0000'
16248 date --date='2012-07-01 00:00:00 +0000' +%s
16253 # 例外的なシステムは閏秒をカウントする:
16254 date --date='2012-06-30 23:59:59 +0000' +%s
16256 date --date='2012-06-30 23:59:60 +0000' +%s
16258 date --date='2012-07-01 00:00:00 +0000' +%s
16265 @node arch invocation
16266 @section @command{arch}: マシンのハードウェア名を表示する
16269 @cindex print machine hardware name
16270 @cindex system information, printing
16272 @command{arch} は、マシンのハードウェア名を表示する。@samp{uname -m} と同じことである。
16277 arch [@var{option}]
16280 このプログラムでは、共通オプションしか使用できない。@ref{Common options}.
16282 @command{arch} は、デフォルトではインストールされない。
16283 従って、移植を考慮したスクリプトでは、@command{arch} コマンドが存在することを当てにしない方がよい。
16288 @node nproc invocation
16289 @section @command{nproc}: 利用できるプロセッサの個数を表示する
16292 @cindex Print the number of processors
16293 @cindex system information, printing
16295 カレントプロセスが利用できるプロセシング・ユニットの個数を表示する。
16296 それは、稼働しているプロセッサの数より少ないかもしれない。
16297 そうした情報が取得できない場合は、搭載されているプロセッサの数を表示する。
16298 環境変数 @env{OMP_NUM_THREADS} が設定されている場合は、
16299 その変数が、返される値を決めることになる。なお、結果は必ず 0 より大きくなる。
16304 nproc [@var{option}]
16307 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16313 システムに搭載されているプロセッサの数を表示する。
16314 それは、稼働しているプロセッサや、カレントプロセスが利用できるプロセッサの数より多いかもしれない。
16315 このオプションを付けた場合、環境変数 @env{OMP_NUM_THREADS} は考慮されない。
16317 @item --ignore=@var{number}
16319 可能ならば、@var{number} 個のプロセシング・ユニットを除外する。
16326 @node uname invocation
16327 @section @command{uname}: システムについて情報を表示する
16330 @cindex print system information
16331 @cindex system information, printing
16333 @command{uname} は、自分がその上で実行されているマシンとオペレーティング・システムについて情報を表示する。
16334 オプションが一つも指定されない場合は、@option{-s} オプションが指定されたかのように振る舞う。
16339 uname [@var{option}]@dots{}
16342 複数のオプションや @option{-a} オプションが指定された場合、選択された情報は次の順番で表示される。
16345 @var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version}
16346 @var{machine} @var{processor} @var{hardware-platform} @var{operating-system}
16349 個々の情報が空白を含んでいることがある。そうした場合、出力のどこからどこまでが、
16350 ある情報に当たるかを判断することは難しい。以下の例で @var{release}
16351 に当たるのは、@samp{2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001} の部分である。
16353 (訳注: @var{release} が @var{kernel-release} のことならば、それに相当するのは
16354 @samp{2.2.18} だけである。#4 から 2001 までは @var{kernel-version}。
16355 原文は両者を合わせて、@var{release} と言っているのかもしれない。
16356 なお、以下の例はちょっと古い。最近の @command{uname -a} では、@option{-a}
16357 オプションの説明にあるように、unknown の部分は表示されないはずである。)
16361 @result{} Linux dumdum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686@c
16362 unknown unknown GNU/Linux
16366 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16374 以下の情報をすべて表示する。ただし、プロセッサ・タイプとハードウェア・プラットホームは、unknown ならば省略する。
16377 @itemx --hardware-platform
16379 @opindex --hardware-platform
16380 @cindex implementation, hardware
16381 @cindex hardware platform
16382 @cindex platform, hardware
16383 ハードウェア・プラットホームの名前を表示する (ハードウェア実装と呼ばれることもある)。
16384 その情報が取得できない場合は、@samp{unknown} と表示する。
16385 このオプションは、(GNU/Linux ディストリビューション同士の間ですら)
16392 @cindex machine type
16393 @cindex hardware class
16394 @cindex hardware type
16395 マシンのハードウェア名を表示する (ハードウェア・クラスとかハードウェア・タイプと呼ばれることもある)。
16400 @opindex --nodename
16403 @cindex network node name
16404 ネットワークノードのホスト名を表示する。
16409 @opindex --processor
16410 @cindex host processor type
16411 プロセッサ・タイプを表示する (命令セット体系、the instruction
16412 set architecture、ISA などと呼ばれることもある)。
16413 その情報が取得できない場合は、@samp{unknown} と表示する。
16414 このオプションは、(GNU/Linux ディストリビューション同士の間ですら)
16418 @itemx --operating-system
16420 @opindex --operating-system
16421 @cindex operating system name
16422 オペレーティング・システムの名前を表示する。
16425 @itemx --kernel-release
16427 @opindex --kernel-release
16428 @cindex kernel release
16429 @cindex release of kernel
16433 @itemx --kernel-name
16435 @opindex --kernel-name
16436 @cindex kernel name
16437 @cindex name of kernel
16438 カーネル名を表示する。POSIX 1003.1-2001 では (@pxref{Standards
16439 conformance})、これを「オペレーティング・システムの実装」と呼んでいる。
16440 POSIX の仕様には、カーネルという概念がないからである。
16441 カーネル名は、@option{-o} や @option{--operating-system}
16442 オプションで表示されるオペレーティング・システム名と同じかもしれないし、
16443 違うかもしれない。オペレーティング・システムによって、
16444 基盤となっているカーネルと名前が同じものもあれば (FreeBSD, HP-UX など)、
16445 違うものもある (GNU/Linux, Solaris など) からである。
16448 @itemx --kernel-version
16450 @opindex --kernel-version
16451 @cindex kernel version
16452 @cindex version of kernel
16460 @node hostname invocation
16461 @section @command{hostname}: システムの名前を表示、または設定する
16464 @cindex setting the hostname
16465 @cindex printing the hostname
16466 @cindex system name, printing
16467 @cindex appropriate privileges
16469 @command{hostname} は、引数なしで実行すると、使用しているホストシステムの名前を表示する。
16470 引数を一つ付けて実行すると、指定した文字列を使用しているホストの名前として設定する。
16471 ホストの名前を設定するには、しかるべき権限が必要である。
16476 hostname [@var{name}]
16479 オプションは、@option{--help} と @option{--version} だけである。
16480 @xref{Common options}.
16482 @command{hostname} は、デフォルトではインストールされない。
16483 また、coreutils 以外のパッケージにも @command{hostname} コマンドを提供するものがある。
16484 従って、移植を考慮したスクリプトでは、@command{hostname}
16485 コマンドが存在することや、上記通りの動作をすることを当てにしない方がよい。
16490 @node hostid invocation
16491 @section @command{hostid}: 数値によるホストの識別名を表示する
16494 @cindex printing the host identifier
16496 @command{hostid} は、使用しているホストの数値による識別名を 16 進数で表示する。
16497 このコマンドは引数を取らない。使用できるオプションは、@option{--help} と
16498 @option{--version} だけである。@xref{Common options}.
16500 たとえば、筆者が使っているシステムの一つでは、次のように表示される。
16507 たまたまこのシステムでは、識別名の 32 ビットの数値が、システムのインターネット・アドレスと密接な関係を持っているが、
16510 @command{hostid} がインストールされるのは、@code{gethostid} 関数が存在するシステムだけである。
16511 従って、移植を考慮したスクリプトでは、@command{hostid} の存在を当てにしない方がよい。
16515 @node uptime invocation
16516 @section @command{uptime}: システムの連続稼働時間と負荷を表示する
16519 @cindex printing the system uptime and load
16521 @command{uptime} は、現在の時刻、システムの連続稼働時間、ログインしているユーザの数、
16522 それに現在の平均負荷 (load average) を表示する。
16524 引数を指定すると、ユーザが何人ログインしているかを知るために読み込むファイルとして、その引数が使用される。
16525 引数を指定しない場合は、システムのデフォルトが使用される
16526 (@command{uptime --help} を実行すれば、デフォルトの設定がわかる)。
16528 オプションは、@option{--help} と @option{--version} だけである。
16529 @xref{Common options}.
16531 たとえば、以下の例は、筆者が使っているシステムの一つで、ちょうど今表示されたものだ。
16535 14:07 up 3:35, 3 users, load average: 1.39, 1.15, 1.04
16538 細かいことを言うと、平均負荷の計算方法は、システムによっていくらか異なっている。
16539 あるシステムでは、ここ 1 分間、5 分間、15 分間の、実行可能状態のプロセスの平均数として計算されるが、
16540 別のシステムでは、割り込み不可能なスリープ状態のプロセスも含めている
16541 (すなわち、ディスク I/O を待っているプロセスだ)。
16542 Linux のカーネルは、割り込み不可能なプロセスを含める方である。
16544 @command{uptime} がインストールされるのは、
16545 ブート日時を取得するための下部構造を備えているプラットフォームだけである。
16546 また、coreutils 以外のパッケージにも、@command{uptime} コマンドを提供しているものがある。
16547 従って、移植を考慮したスクリプトでは、@command{uptime} コマンドが存在することや、
16548 上記通りの動作をすることを当てにしない方がよい。
16552 @node SELinux context
16553 @chapter SELinux コンテキスト
16555 @cindex SELinux context
16556 @cindex SELinux, context
16557 @cindex commands for SELinux context
16559 この章では、SELinux コンテキスト関係の操作を行うコマンドを説明する。
16562 * chcon invocation:: ファイルの SELinux コンテキストを変更する
16563 * runcon invocation:: 指定された SELinux コンテキストでコマンドを実行する
16566 @node chcon invocation
16567 @section @command{chcon}: ファイルの SELinux コンテキストを変更する
16570 @cindex changing security context
16571 @cindex change SELinux context
16573 @command{chcon} は、指定されたファイルの SELinux セキュリティ・コンテキストを変更する。
16578 chcon [@var{option}]@dots{} @var{context} @var{file}@dots{}
16579 chcon [@var{option}]@dots{} [-u @var{user}] [-r @var{role}] [-l @var{range}]@c
16580 [-t @var{type}] @var{file}@dots{}
16581 chcon [@var{option}]@dots{} --reference=@var{rfile} @var{file}@dots{}
16584 各 @var{file} の SELinux セキュリティ・コンテキストを @var{context} に変更する。
16585 @option{--reference} オプションを使用した場合は、
16586 各 @var{file} のセキュリティ・コンテキストを @var{rfile} のそれに変更する。
16588 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16592 @item --dereference
16593 @opindex --dereference
16594 シンボリックリンクそのものではなく、リンクが指しているものを操作の対象にする。
16598 @itemx --no-dereference
16600 @opindex --no-dereference
16601 @cindex no dereference
16602 参照先のファイルではなく、シンボリックリンクそのものを操作の対象にする。
16604 @item --reference=@var{rfile}
16605 @opindex --reference
16606 @cindex reference file
16607 @var{context} の値を直接指定する代わりに、@var{rfile} のセキュリティ・コンテキストを使用する。
16612 @opindex --recursive
16613 ファイルやディレクトリに対して再帰的に動作する。
16615 @item --preserve-root
16616 @opindex --preserve-root
16617 @option{--recursive} オプションと一緒に使ったとき、ルートディレクトリ (@file{/})
16618 に対して再帰的に動作することを拒否する。 @xref{Treating / specially}.
16620 @item --no-preserve-root
16621 @opindex --no-preserve-root
16622 @option{--recursive} オプションと一緒に使ったとき、ルートディレクトリ (@file{/})
16623 を特別扱いしない。こちらがデフォルトの動作である。 @xref{Treating / specially}.
16625 @choptH @xref{Traversing symlinks}.
16627 @choptL @xref{Traversing symlinks}.
16629 @choptP @xref{Traversing symlinks}.
16636 処理したすべてのファイルについてメッセージを表示する。
16638 @item -u @var{user}
16639 @itemx --user=@var{user}
16642 操作対象のセキュリティ・コンテキストのユーザを @var{user} にする。
16644 @item -r @var{role}
16645 @itemx --role=@var{role}
16648 操作対象のセキュリティ・コンテキストのロールを @var{role} にする。
16650 @item -t @var{type}
16651 @itemx --type=@var{type}
16654 操作対象のセキュリティ・コンテキストのタイプを @var{type} にする。
16656 @item -l @var{range}
16657 @itemx --range=@var{range}
16660 操作対象のセキュリティ・コンテキストのセキュリティ・レベルの範囲を @var{range} にする。
16666 @node runcon invocation
16667 @section @command{runcon}: 指定された SELinux コンテキストでコマンドを実行する。
16670 @cindex run with security context
16673 @command{runcon} は、指定された SELinux セキュリティ・コンテキストでファイルを実行する。
16677 runcon @var{context} @var{command} [@var{args}]
16678 runcon [ -c ] [-u @var{user}] [-r @var{role}] [-t @var{type}]@c
16679 [-l @var{range}] @var{command} [@var{args}]
16682 セキュリティ・コンテキストのすべてを @var{context} で指定して、@var{command}
16683 を実行する。あるいは、現在の、または遷移後のセキュリティ・コンテキストのうち、
16684 @var{user}, @var{role}, @var{type}, @var{level}
16685 (訳注: 上の書式で言えば @var{range}) の一つ以上を変更して、@var{command} を実行する。
16687 @option{-c}, @option{-u}, @option{-r}, @option{-t}, @option{-l}
16688 のどのオプションも指定されていない場合は、最初の引数が完全なコンテキストとして使用される。
16689 @var{command} の後ろに続く引数があれば、それはそのコマンドに対する引数と見なされる。
16691 @var{context} と @var{command} のどちらも指定されていない場合は、
16692 現在のセキュリティ・コンテキストを表示する。
16694 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16702 セキュリティ・コンテキストの変更を行う前に、プロセスの遷移によるコンテキストを求める。
16704 @item -u @var{user}
16705 @itemx --user=@var{user}
16708 操作対象のセキュリティ・コンテキストのユーザを @var{user} にする。
16710 @item -r @var{role}
16711 @itemx --role=@var{role}
16714 操作対象のセキュリティ・コンテキストのロールを @var{role} にする。
16716 @item -t @var{type}
16717 @itemx --type=@var{type}
16720 操作対象のセキュリティ・コンテキストのタイプを @var{type} にする。
16722 @item -l @var{range}
16723 @itemx --range=@var{range}
16726 操作対象のセキュリティ・コンテキストのセキュリティ・レベルの範囲を @var{range} にする。
16730 @cindex exit status of @command{runcon}
16734 126: @var{command} が見つかったが、起動できなかった。
16735 127: @command{runcon} そのものの実行に失敗した。あるいは、@var{command} が
16737 それ以外は、@var{command} の終了ステータス。
16740 @node Modified command invocation
16741 @chapter コマンド実行条件の変更
16743 @cindex modified command invocation
16744 @cindex invocation of commands, modified
16745 @cindex commands for invoking other commands
16747 この章で説明するコマンドは、他のコマンドを現在の条件とは違った条件で実行するものである。
16748 たとえば、環境を変更して実行する、別のユーザとして実行するといったコマンドだ。
16750 (訳注: 「別のユーザとして実行する」というのは、@command{chroot}
16751 の @option{--userspec} オプションを指していると考えられなくもないが、
16752 元々は @command{su} コマンドのことを言っていたのだと思う。
16753 @command{su} も以前はこの章で説明されていたが、現在では coreutils
16757 * chroot invocation:: ルート・ディレクトリを変更する。
16758 * env invocation:: 環境変数を変更する。
16759 * nice invocation:: niceness を変更する。
16760 * nohup invocation:: ハングアップ・シグナルで終了しない。
16761 * stdbuf invocation:: 標準ストリームのバッファリングを変更する。
16762 * timeout invocation:: タイムリミット付きで実行する。
16766 @node chroot invocation
16767 @section @command{chroot}: ルートディレクトリを変更して、コマンドを実行する
16770 @cindex running a program in a specified root directory
16771 @cindex root directory, running a program in a specified
16773 @command{chroot} は、指定されたディレクトリをルートディレクトリにして、コマンドを実行する。
16774 多くのシステムでは、この操作を行うことができるのはスーパーユーザだけである。
16775 @footnote{もっとも、システムによっては (たとえば、FreeBSD がそうだが)、
16776 特定の一般ユーザが @code{chroot} システムコールを使用できるように設定できるものもある。
16777 従って、そうしたユーザは @command{chroot} コマンドを実行できるわけだ。
16778 また、Cygwin では、どんなユーザでも @command{chroot} コマンドを実行できる。
16779 MS-Windows では chroot 関数をサポートしていないため、
16780 内部で使用する関数が特権を要求しないからである。
16781 なお、@var{newroot} が元の @file{/} ディレクトリと同じ場合、@command{chroot}
16782 コマンドは @code{chroot} システムコールを使わないで済まそうとする。
16783 これは、非特権ユーザにもそういったことが許されているシステムとの一貫性を保つためである。}
16788 chroot @var{option} @var{newroot} [@var{command} [@var{args}]@dots{}]
16789 chroot @var{option}
16792 通常、ファイル名の検索は、ディレクトリ構造の根 (ルート、root)、すなわち
16793 @file{/} を起点として行われる。@command{chroot} はこのルートを @var{newroot}
16794 ディレクトリ (実在するディレクトリでなければならない) に変更し、
16795 さらに、作業ディレクトリを @file{/} に変更して、最後に @var{command}
16796 を、@var{args} の指定があれば @var{args} を付けて実行する。
16797 @var{command} が指定されていない場合、デフォルトのコマンドは、環境変数
16798 @env{SHELL} の値か、@env{SHELL} が設定されていなければ、@command{/bin/sh} であり、
16799 それが @option{-i} オプションを付けて、呼び出される。
16800 @var{command} は シェルの組み込みコマンドであってはならない
16801 (@pxref{Special built-in utilities})。
16803 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16804 オプションはオペランドの前に置かなければならない。
16808 @item --groups=@var{groups}
16810 このオプションを使えば、新しいプロセスが使用する補助 @var{groups}
16811 を変更することができる。グループのリストの各項目 (名前でも ID 番号でもよい)
16812 は、コンマで区切られていなければならない。
16813 @option{--userspec} オプションで自動的に行われる補助グループの照合をしないようにするには、
16814 @samp{--groups=''} を使用すればよい。
16816 @item --userspec=@var{user}[:@var{group}]
16817 @opindex --userspec
16818 デフォルトでは、@var{command} は呼び出し側のプロセスと同じ資格情報を使って実行されるが、
16819 このオプションを使えば、@var{command} を別の @var{user}
16820 の資格で実行することができる。別の基本 @var{group} を指定することも可能だ。
16821 @var{user} が指定された場合、補助グループは、そのユーザについてシステムが設定しているリストと同じものになる。
16822 ただし、@option{--groups} オプションによって置き換えられる場合は別だ。
16825 @opindex --skip-chdir
16826 ルートディレクトリを @var{newroot} に変更した後で
16827 (すなわち chroot 環境中で)、作業ディレクトリを @file{/}
16828 に変更したくなかったら、このオプションを使えばよい。
16829 このオプションが使用できるのは、@var{newroot} が元の @file{/}
16830 ディレクトリと同じときだけであり、従って、役に立つのは、
16831 @option{--groups} や "@option{--userspec} と一緒に使い、
16832 元の作業ディレクトリに留まっていたい場合がほとんどである。
16836 @option{--userspec} や @option{--groups} オプションによって行われるユーザ名やグループ名の照合は、
16837 chroot 環境の外側と内側の両方で行われるが、chroot 環境の内側で成功した照合が優先される。
16838 ユーザやグループの指定で ID 番号を使うつもりならば、数字の前に @samp{+}
16839 を付ければ、名前を ID 番号に還元するステップが行われないで済む。
16840 @xref{Disambiguating names and IDs}.
16842 chroot を使う上でよくある問題を避けることができるように、
16843 ちょっとした情報をいくつか挙げておく。まず簡単なことから言うと、@var{command}
16844 は、静的にリンクしたバイナリを指すようにした方がよい。
16845 もし、動的にリンクした実行ファイルを使用するのならば、
16846 共有ライブラリが新しいルートディレクトリ以下の適切な場所に存在するように、
16847 前もって準備しておく必要があるだろう。
16849 たとえば、静的にリンクした @command{ls} の実行ファイルを作成して、
16850 @file{/tmp/empty} に置けば、root ユーザとして次のようなコマンドを実行することができる。
16853 $ chroot /tmp/empty /ls -Rl /
16861 -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
16864 もし、動的にリンクした実行ファイル、たとえば @command{bash} を使いたいならば、
16865 まず @samp{ldd bash} を実行して、どんな共有オブジェクトファイルが必要かを調べることだ。
16866 それから、@command{bash} 自体のバイナリをコピーするだけでなく、@samp{ldd bash}
16867 でリストされたファイルも、新しいルートディレクトリになるディレクトリ以下のしかるべき場所にコピーしておく。
16868 さらに、実行ファイルが何か他のファイルも必要としているなら
16869 (たとえば、データファイル、ステータスファイル、デバイスファイルなど)、
16872 @command{chroot} がインストールされるのは、@code{chroot} 関数を持つシステムだけである。
16873 従って、移植を考慮したスクリプトでは、@command{chroot} が存在することを当てにしない方がよい。
16875 @cindex exit status of @command{chroot}
16879 125: @command{chroot} そのものの実行に失敗した。
16880 126: @var{command} は見つかったが、起動できなかった。
16881 127: @var{command} が見つからなかった。
16882 それ以外は、@var{command} の終了ステータス。
16886 @node env invocation
16887 @section @command{env}: 変更した環境でコマンドを実行する
16890 @cindex environment, running a program in a modified
16891 @cindex modified environment, running a program in a
16892 @cindex running a program in a modified environment
16894 @command{env} は、環境を変更して、コマンドを実行する。
16899 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
16900 [@var{command} [@var{args}]@dots{}]
16904 @samp{@var{variable}=@var{value}} という形のオペランドは、環境変数 @var{variable} の値を
16905 @var{value} に設定する。@var{value} は空っぽでも構わない (@samp{@var{variable}=})。
16906 変数の値を空に設定 (set) するのは、変数を破棄 (unset) するのとは別のことである。
16907 こうしたオペランドは、左から右へ評価されるので、二つのオペランドが同じ変数を対象にしている場合、前のものは無視される。
16909 環境変数名は、空でもよいし、@samp{=} と ASCII NUL 以外なら、どんな文字を含んでいても構わない。
16910 とは言え、変数名は、アンダースコア、数字、ASCII 文字のみから構成し、
16911 数字以外の文字で始めるようにした方が、賢明である。
16912 それ以外の名前だと、シェルなどのアプリケーションがうまく動作しないからだ。
16915 @samp{=} という文字を含まない最初のオペランドが、起動するプログラムであり、
16916 環境変数 @env{PATH} に従って、どこにあるかが検索される。
16917 残っている引数があれば、すべてそのプログラムに引数として渡される。
16918 起動するプログラムは、シェルの組み込みコマンドであってはならない
16919 (@pxref{Special built-in utilities})。
16921 @env{PATH} に対する変更は、@var{command} のありかを検索する前に有効になる。
16922 そこで、@env{PATH} を短縮するときには、気をつけなければならない。
16923 @env{PATH} を未定義にしたり、@file{/bin}
16924 のような重要なディレクトリを外したりすると、変更前と同じ動作にならないかもしれないからだ。
16926 めったにないことだが、プログラムの名前に @samp{=} という文字が含まれている場合、
16927 それを変数の指定と区別する唯一の方法は、@var{command} として仲介的なコマンドを使用し、
16928 その @var{args} として問題のあるプログラム名を渡すことである。
16929 たとえば、@file{./prog=} が現在の @env{PATH} 中に存在する実行ファイルだとしよう。
16933 # 環境変数 prog を空に設定して 'true' を実行する。
16935 # 環境変数 ./prog を空に設定して 'true' を実行する。
16937 # 環境変数 prog を空に設定して 'true' を実行する。
16938 env sh -c '\prog= true'
16939 # 'true' を引数にして 'prog=' を実行する。
16940 env sh -c 'exec "$@@"' sh prog= true
16941 # これも 'prog=' を実行する。
16944 @cindex environment, printing
16946 環境変数の設定の後にコマンド名が指定されていない場合は、生成された環境が表示される。
16947 これは、@var{command} に @command{printenv} を指定するのと同じことである。
16949 以下に例をいくつか挙げる。@command{env} に渡される環境は、@samp{LOGNAME=rms},
16950 @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks} からなっているものとする。
16957 $ env | LC_ALL=C sort
16960 PATH=.:/gnubin:/hacks
16964 環境を削減して、@command{foo} を実行する。@command{foo} が見つからないといけないので、
16965 @env{PATH} だけは元のまま残している。
16967 env - PATH="$PATH" foo
16971 @samp{LOGNAME=rms}, @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks}
16972 からなる環境で @command{foo} を実行する。
16973 @command{foo} には、シェルの組み込みコマンドではなく、
16974 ファイルシステム中で見つかった実行ファイルが必ず使用される。
16980 @samp{LOGNAME=foo}, @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks},
16981 @samp{DISPLAY=gnu:0}
16982 からなる環境で、@command{nemacs} を実行する。
16984 env DISPLAY=gnu:0 LOGNAME=foo nemacs
16988 プログラム @command{/energy/--} の実行を試みる (パスの検索でそれしか出てこないようにしている)。
16989 @command{--} というコマンドが存在する場合、環境は、@samp{LOGNAME=rms} と
16990 @samp{PATH=/energy} だけになり、引数には、@samp{e=mc2},
16991 @samp{bar}, @samp{baz} が使われる。
16993 env -u EDITOR PATH=/energy -- e=mc2 bar baz
16999 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17000 オプションはオペランドの前に置かなければならない。
17006 @item -u @var{name}
17007 @itemx --unset=@var{name}
17010 変数 @var{name} が環境中にあれば、それを環境から削除する。
17014 @itemx --ignore-environment
17017 @opindex --ignore-environment
17018 継承した環境を無視し、空っぽの環境から始める。
17022 @cindex exit status of @command{env}
17026 0: @var{command} が指定されなかったので、環境を出力した。
17027 125: @command{env} そのものの実行に失敗した。
17028 126: @var{command} は見つかったが、起動できなかった。
17029 127: @var{command} が見つからなかった。
17030 それ以外は、@var{command} の終了ステータス。
17034 @node nice invocation
17035 @section @command{nice}: niceness を変更して、コマンドを実行する
17039 @cindex scheduling, affecting
17040 @cindex appropriate privileges
17042 @command{nice} はプロセスの @dfn{niceness} を表示したり、niceness を変更してコマンドを実行したりする。
17043 @dfn{niceness} は、プロセスがシステム中でどの程度優先的にスケジュールされるかに影響を及ぼす。
17044 (訳注: niceness を「スケジューリング優先度」と訳さない理由については、
17045 三つほど下のパラグラフを御覧いただきたい。)
17050 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
17053 引数を指定しないと、@command{nice} は現在の niceness を表示する。引数に
17054 @var{command} を指定した場合は、niceness を調整して、その @var{command} を実行する。
17055 デフォルトでは、niceness が 10 増加する。
17057 niceness の値は、最小が @minus{}20 で、最大が 19 である
17058 (値が小さければ、プロセスの優先度が高くなり、使えるリソースも多くなるが、
17059 その分、他のプロセスの動作が遅くなる。また、値が大きければ、プロセスの優先度が低くなり、
17060 自分自身の動作は遅くなるが、実行中の他のプロセスの速度に与える影響は小さくなる)。
17061 システムによっては、niceness の値の範囲がもっと広いものもあるし、
17062 反対に、上下限の制限がもっときついものもある。サポートされている範囲を越えた niceness を指定すると、
17063 サポートされている値の最小、または最大を使用しようとしているものと見なされる。
17065 niceness をスケジューリング優先度 (scheduling priority) と混同してはならない。
17066 後者は、様々なスレッドをどういう序列で実行するかの予定を組む際に、
17067 その序列をアプリケーション側に決めさせるものである。
17068 優先度とは違って、niceness はスケジューラに対する単なるアドバイスにすぎず、
17069 スケジューラはそれを無視することができるのだ。また、用語について言うと、
17070 POSIX は @command{nice} の動作を @dfn{nice value} という用語で定義している。
17071 この nice value は、ある niceness と 最小の niceness との間の負ではない差である。
17072 @command{nice} コマンドは POSIX に準拠しているものの、
17073 この文書やエラーメッセージでは、従来の習慣との親和性を考慮して、
17074 ``niceness'' という言葉を使っている。
17076 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17077 built-in utilities})。
17079 @mayConflictWithShellBuiltIn{nice}
17081 注意: 現在動作中のプロセスの @dfn{niceness} を変更するには、@command{renice}
17084 このプログラムでは、以下のオプションが使用できる。参照: @ref{Common options}.
17085 オプションはオペランドの前に置かなければならない。
17088 @item -n @var{adjustment}
17089 @itemx --adjustment=@var{adjustment}
17091 @opindex --adjustment
17092 コマンドの niceness を 10 ではなく、@var{adjustment} 増加する。
17093 @var{adjustment} が負の数の場合、ユーザがしかるべき特権を持っていなければ、
17094 @command{nice} は警告を発する。とは言え、警告を出すだけで、@var{adjustment}
17095 として 0 が指定されたかのように振る舞う。
17097 互換性を考慮して、@command{nice} は @option{-@var{adjustment}}
17098 というオプションの古い書式もサポートしている。
17099 だが、新しいスクリプトでは、@option{-n @var{adjustment}} の方を使うべきである。
17103 @command{nice} がインストールされるのは、
17104 POSIX の @code{setpriority} 関数を持っているシステムだけである。
17105 従って、移植を考慮したシステムでは、非 POSIX のプラットフォームに
17106 @command{nice} コマンドがあることを当てにしない方がよい。
17108 @cindex exit status of @command{nice}
17112 0: @var{command} が指定されなかったので、niceness を出力した。
17113 125: @command{nice} そのものの実行に失敗した。
17114 126: @var{command} が見つかったが、起動できなかった。
17115 127: @var{command} が見つからなかった。
17116 それ以外は、@var{command} の終了ステータス。
17119 対話的ではないプログラムは、niceness を落として (訳注: すなわち、
17120 niceness の値を増やして) 実行すると、都合のよいことがある。
17123 $ nice factor 4611686018427387903
17126 @command{nice} は、現在の niceness を表示するので、@command{nice} を通して @command{nice}
17127 を起動すれば、それがどんな動作をするか、目の当たりに見ることができる。
17129 デフォルトの動作は、niceness を @samp{10} 増加することである。
17140 @var{adjustment} は、現在の niceness からいくら増減するかということである。
17141 次の例では、最初の @command{nice} が、二番目の @command{nice} を
17142 niceness 10 で実行し、二番目の @command{nice} は、niceness
17143 をさらに 3 増やして、三番目の @command{nice} を実行している。
17146 $ nice nice -n 3 nice
17150 サポートされている範囲より大きい niceness を指定するのは、
17151 サポートされている最大値を指定するのと同じことである。
17154 $ nice -n 10000000000 nice
17158 特権ユーザだけが niceness の値を下げて、プロセスを実行できる。
17162 nice: cannot set niceness: Permission denied
17164 $ sudo nice -n -1 nice
17169 @node nohup invocation
17170 @section @command{nohup}: ハングアップ・シグナルで終了しないコマンドを実行する
17173 @cindex hangups, immunity to
17174 @cindex immunity to hangups
17175 @cindex logging out and continuing to run
17178 @command{nohup} を使って、@var{command} を実行すると、
17179 指定されたコマンドがハングアップ・シグナルを無視するようになる。
17180 従って、そのコマンドは、ユーザがログアウトした後でも、バックグラウンドで実行を継続することができる。
17185 nohup @var{command} [@var{arg}]@dots{}
17188 標準入力が端末の場合は、標準入力がリダイレクトされる。
17189 @command{nohup} から実行されているコマンドが端末を使用していると、
17190 端末で行われるセッションが誤解しないようにするためである。
17191 さらに、標準入力の代わりになるファイルのファイル・ディスクリプタを読み込み不可にする。
17192 @command{nohup} から実行されているコマンドが、誤って標準入力から読み込を行おうとした場合に、
17193 エラーメッセージを出すことができるようにするためだ。
17194 このリダイレクションは GNU の拡張である。
17195 GNU 以外のホストでも使うことを考えているプログラムでは、GNU の拡張を当てにせず、
17196 @samp{nohup @var{command} [@var{arg}]@dots{} 0>/dev/null} を使えばよい。
17199 標準出力が端末の場合、コマンドの標準出力は、(訳注: カレントディレクトリの)
17200 @file{nohup.out} というファイルに追加されて行く。
17201 そのファイルに書き込めない場合は、@file{$HOME/nohup.out}
17202 に追記されることになる。そのファイルにも書き込めない場合は、コマンドの実行が行われない。
17203 @command{nohup} によって作成されるのが @file{nohup.out} であれ、
17204 @file{$HOME/nohup.out} であれ、それは、ファイルの所有者にのみ読み書き可能なものになる。
17205 現在の umask の設定の影響は受けない。
17207 標準エラーが端末の場合、コマンドの標準エラー出力は、基本的には標準出力
17208 (リダイレクトされているかもしれない) と同じファイル・ディスクリプタにリダイレクトされる。
17209 ただし、標準出力がクローズされている場合には、標準エラーの端末への出力は、
17210 リダイレクトされることなく、直接 @file{nohup.out} や @file{$HOME/nohup.out}
17211 というファイルに追加される。どちらのファイルが使用されるかは、上述のとおりである。
17213 コマンドの出力を @file{nohup.out} 以外のファイルに書き込みたければ、
17214 リダイレクトすればよい。たとえば、@command{make} の出力を @file{make.log}
17215 に書き込みたかったら、次のようにする。
17218 nohup make > make.log
17221 @command{nohup} は、実行するコマンドを自動的にバックグラウンドに送ることをしない。
17222 そこで、ユーザは、コマンドラインの末尾に @samp{&} を付けることで、
17223 明示的にそれを行わなければならない。また、@command{nohup} は、@var{command}
17224 の niceness を変更しない。niceness を変更したかったら、@command{nice}
17225 を使って、@samp{nohup nice @var{command}} のように実行すればよい。
17227 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17228 built-in utilities})。
17230 指定できるオプションは、@option{--help} と @option{--version} だけである。
17231 @xref{Common options}. オプションはオペランドの前に置かなければならない。
17233 @cindex exit status of @command{nohup}
17237 125: @env{POSIXLY_CORRECT} が設定されていない場合に、@command{nohup} そのものの
17239 126: @var{command} は見つかったが、起動できなかった。
17240 127: @var{command} が見つからなかった。
17241 それ以外の場合は、@var{command} の終了ステータス。
17244 @env{POSIXLY_CORRECT} が設定されている場合は、@command{nohup}
17245 そのものが実行に失敗したときの終了ステータスは、125 ではなく 127 になる。
17248 @node stdbuf invocation
17249 @section @command{stdbuf}: 入出力ストリームのバッファリングを変更して、コマンドを実行する
17252 @cindex standard streams, buffering
17253 @cindex line buffered
17255 @command{stdbuf} を使用すると、プログラムと結びついている
17256 3 種類の標準入出力ストリームに対して、そのバッファリング動作を変更することができる。
17261 stdbuf @var{option}@dots{} @var{command}
17264 @var{command} は、次の条件を満たすプログラムの名前で始まっていなければならない。
17267 入出力に ISO C @code{FILE} ストリームを使用している (注意: プログラム @command{dd} や
17268 @command{cat} は、これを使用していない)。
17271 自分で標準ストリームのバッファリングを調整していない
17272 (注意: プログラム @command{tee} は、この部類に入らない)。
17275 後に続く引数があれば、@var{command} に引数として渡される。
17277 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17281 @item -i @var{mode}
17282 @itemx --input=@var{mode}
17285 標準入力ストリームのバッファリングを調整する。
17287 @item -o @var{mode}
17288 @itemx --output=@var{mode}
17291 標準出力ストリームのバッファリングを調整する。
17293 @item -e @var{mode}
17294 @itemx --error=@var{mode}
17297 標準エラーストリームのバッファリングを調整する。
17301 @var{mode} には、以下のものを指定できる。
17306 ストリームを行単位のバッファ・モードにする。このモードでは、改行が出力されることになるか、
17307 あるいは、端末デバイスに結びついているストリームから入力が読み込まれるまで、データを溜めておく。
17308 このオプションは、標準入力に対しては無効である。
17311 選択したストリームのバッファリングを無効にする。
17312 このモードでは、データは即座に出力される。また、要求された量のデータしか入力から読み込まない。
17313 入力と出力で動作が違うことに気をつけていただきたい。
17314 なお、入力のバッファリングを無効にしても、ストリーム入力関数の応答性やブロッキング動作に影響することはない。
17315 たとえば、@code{fread} は、要求した量より少ないデータを、下層で動いている
17316 @code{read} が返してきても、@code{EOF} が来るか、エラーが起きるまで、
17320 バッファ一杯モード (fully buffered mode) で使用するバッファのサイズを指定する。
17321 @multiplierSuffixesNoBlocks{size}
17325 @command{stdbuf} がインストールされるのは、Executable and Linkable Format (ELF)
17326 を使用し、@code{constructor} アトリビュートをサポートしているプラットフォームだけである。
17327 従って、移植を考慮したスクリプトでは、@command{stdbuf}
17328 が存在することを当てにしない方がよい。
17330 @cindex exit status of @command{stdbuf}
17334 125: @command{stdbuf} そのものの実行に失敗した。
17335 126: @var{command} は見つかったが、起動できなかった。
17336 127: @var{command} が見つからなかった。
17337 それ以外は、@var{command} の終了ステータス。
17341 @node timeout invocation
17342 @section @command{timeout}: タイムリミット付きでコマンドを実行する
17346 @cindex run commands with bounded time
17348 @command{timeout} は渡されたコマンドを実行し、
17349 指定された時間が経過してもまだ実行が続いていたら、そのコマンドを終了させる。
17354 timeout [@var{option}] @var{duration} @var{command} [@var{arg}]@dots{}
17357 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17358 built-in utilities})。
17360 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17361 オプションはオペランドの前に置かなければならない。
17364 @item --preserve-status
17365 @opindex --preserve-status
17366 タイムアウトしたときに、タイムアウトであることを示す @command{timeout}
17367 コマンドの終了ステータスではなく、@command{timeout} が管理している
17368 @var{command} の終了ステータスを返す。このオプションは、管理される
17369 @var{command} が無期限の続行時間をサポートしている場合に役に立つ。
17372 @opindex --foreground
17373 独立したバックグラウンドのプログラム・グループを作成しない。
17374 その結果、@command{timeout} に管理される @var{command} が、フォアグラウンドの
17375 TTY を通常どおり使用できるようになる。
17376 対話的シェルから直接実行されないコマンドの時間制限をきちんと行うには
17377 (訳注: 言い換えれば、@command{timeout} コマンドをシェルスクリプト中で使用する場合には)、
17378 この動作が必要になることがあり、次の二つの場合がそれに当たる。
17381 @var{command} が対話的であり、たとえば端末からの読み込みが必要な場合。
17383 端末から直接 @var{command} にシグナルを送ることができるようにしたい場合。
17384 (たとえば、Ctrl-C を送るとか)。
17387 気をつけていただきたいが、この動作モードでは、@var{command}
17388 の子プロセスは、いかなるものもタイムアウトすることがない。
17389 また、SIGCONT シグナルが @var{command} に送られることもない。
17390 フォアグラウンドプロセスでは、そういったことは普通必要がないからであり、
17391 また、(たとえば、GDB のような) それ自身が他のプログラムを監視するモニターであるプログラムでは、
17392 断続的なシグナル送出を起こしかねないからである。
17394 @item -k @var{duration}
17395 @itemx --kill-after=@var{duration}
17397 @opindex --kill-after
17398 ここで指定した @var{duration} の経過後に、改めて @samp{KILL} シグナルを送り付けて、
17399 監視対象の @var{command} を確実に終了させる。
17400 このオプションを付けないと、選択したシグナルに @var{command}
17401 を終了させる力がなかった場合に、@command{timeout} は @var{command} を殺すことができない。
17403 @item -s @var{signal}
17404 @itemx --signal=@var{signal}
17407 制限時間が来たとき、デフォルトの @samp{TERM} シグナルではなく、指定した
17408 @var{signal} を @var{command} に送る。@var{signal} は @samp{HUP}
17409 のような名前でもよく、番号でもよい。@xref{Signal specifications}.
17413 @var{duration} は浮動小数点数であり、後ろに単位を付けることもできる。
17415 @samp{s} 何秒 (デフォルト)
17420 @var{duration} が 0 だと、対象となるコマンドが時間切れなしになる。
17421 実際の制限時間は、システムの制約を受けることに注意していただきたい。
17422 秒以下の制限時間を指定するときは、とりわけそれを考慮に入れるべきである。
17424 @cindex exit status of @command{timeout}
17428 124: @var{command} がタイムアウトした。
17429 125: @command{timeout} そのものの実行に失敗した。
17430 126: @var{command} は見つかったが、起動できなかった。
17431 127: @var{command} が見つからなかった。
17432 137: @var{command} に KILL(9) シグナルを送った (128+9)
17433 それ以外は、@var{command} の終了ステータス。
17437 @node Process control
17440 @cindex processes, commands for controlling
17441 @cindex commands for controlling processes
17444 * kill invocation:: プロセスにシグナルを送る。
17448 @node kill invocation
17449 @section @command{kill}: プロセスにシグナルを送る
17452 @cindex send a signal to processes
17454 @command{kill} コマンドは、プロセスにシグナルを送る。
17455 シグナルを送られたプロセスは、終了するか、
17456 あるいは、シグナルを受け取った時点で他の何らかの形で反応する。
17457 また、@command{kill} は、シグナルに関する情報を一覧表示する。
17462 kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
17463 kill [-l | --list | -t | --table] [@var{signal}]@dots{}
17466 @mayConflictWithShellBuiltIn{kill}
17468 @command{kill} コマンドの最初の書式では、すべての @var{pid} 引数に対してシグナルが送られる。
17469 シグナルが指定されていない場合に送られるデフォルトのシグナルは、@samp{TERM} である。
17470 @samp{0} という特別なシグナル番号は、有効なシグナルを表していないが、
17471 引数 @var{pid} が指しているプロセスに対してシグナルを送ることが可能かどうかを、調べるために使うことができる。
17473 @var{pid} が正の数なら、シグナルはプロセス ID が @var{pid} のプロセスに送られる。
17474 @var{pid} が 0 なら、シグナルはカレントプロセスのプロセスグループに属するすべてのプロセスに送られる。
17475 @var{pid} が @minus{}1 の場合、シグナルが送られるのは、
17476 ユーザがシグナルを送る権限を持っているすべてのプロセスである。
17477 @var{pid} が @minus{}1 より小さい場合は、@var{pid}
17478 の絶対値に等しいプロセスグループに属するすべてのプロセスにシグナルが送られる。
17480 @var{pid} が正の数ではない場合、システムプロセスに属するプロセス
17481 (システムによって様々である) は、シグナルが送られるプロセスのリストから除外される。
17483 最初の @var{pid} 引数として負の @var{pid} を使用したい場合は、その前に
17484 @option{--} オプションを置くべきである。
17485 とは言え、@samp{kill -@var{signal} -@var{pid}} という書式を使う場合は、
17486 @option{--} は必要がない。これは、POSIX に対する一般的な拡張である。
17487 そこで、次に挙げるコマンドは等価になる。
17496 最初の書式の @command{kill} コマンドは、すべての @var{pid} 引数が、
17497 シグナルが送られたプロセスをそれぞれ少なくとも一つは指している場合に、
17500 @command{kill} コマンドの二番目の書式では、シグナルに関する情報が表示される。
17501 @option{-l} または @option{--list}、あるいは、@option{-t} または @option{--table}
17502 オプションの指定は必須である。引数 @var{signal} を一つも指定しないと、
17503 サポートされているすべてのシグナルがリストされる。@option{-l} や @option{--list}
17504 の出力は、シグナル名のリストであり、1 行に一つづつ表示される。
17505 ただし、引数 @var{signal} がすでにシグナル名である場合は、名前ではなく、シグナル番号の表示になる。
17506 @option{-t} や @option{--table} の出力は、シグナル番号、シグナル名、その説明からなる表である。
17507 この書式の @command{kill} コマンドは、引数として指定されたすべての
17508 @var{signal} が有効なものであり、出力エラーがなかったとき、成功のステータスで終了する。
17510 @command{kill} コマンドでは、@option{--help} や @option{--version} オプションも使用できる。
17511 @xref{Common options}.
17513 @var{signal} の指定には、@samp{HUP} のようなシグナル名や、@samp{1}のようなシグナル番号、
17514 それに、シグナルによって終了させられるときのプロセスの終了ステータスを使うことができる
17515 (訳注: 最後のものは、GNU coreutils の @command{kill}
17516 コマンドでは使用できるが、他の系統の @command{kill} では使えないかもしれない)。
17517 シグナル名は、標準的な形式でも、頭に @samp{SIG} を付けた形式でも構わない。
17518 大文字小文字はどちらを使ってもよいが、@option{-@var{signal}}
17519 という形式のオプションの場合は例外で、大文字を使わなければならない。
17520 小文字を使うと、他のオプションとまぎらわしいからである。
17521 サポートしているシグナル名とシグナル番号については、「2.5 シグナルの指定」を参照していただきたい。
17522 @xref{Signal specifications}.
17527 @cindex delaying commands
17528 @cindex commands for delaying
17530 @c Perhaps @command{wait} or other commands should be described here also?
17533 * sleep invocation:: 指定された時間、停止する。
17537 @node sleep invocation
17538 @section @command{sleep}: 指定された時間、停止する
17541 @cindex delay for a specified time
17543 @command{sleep} は、コマンドラインで引数として指定された値を合計した時間だけ停止する。
17548 sleep @var{number}[smhd]@dots{}
17552 各引数は数値であり、後ろに単位を付けてもよい。デフォルトの単位は秒である。
17566 @command{sleep} の従来の実装では、@var{number} は整数でなければならず、
17567 引数は接尾辞なしのものが 1 個しか認められていなかった。それに対して GNU の
17568 @command{sleep} では、任意の浮動小数点数を複数個指定できる。 @xref{Floating point}.
17570 オプションは、@option{--help} と @option{--version} だけである。
17571 @xref{Common options}.
17573 @c sleep is a shell built-in at least with Solaris 11's /bin/sh
17574 @mayConflictWithShellBuiltIn{sleep}
17579 @node Numeric operations
17582 @cindex numeric operations
17583 以下のプログラムは、数に関係した作業をする。
17586 * factor invocation:: 素因数を表示する。
17587 * numfmt invocation:: 数値を整形し直す。
17588 * seq invocation:: 連続する数を表示する。
17592 @node factor invocation
17593 @section @command{factor}: 素因数を表示する
17596 @cindex prime factors
17598 @command{factor} は、素因数を表示する。
17603 factor [@var{number}]@dots{}
17604 factor @var{option}
17607 @var{number} がコマンドラインで指定されていない場合、@command{factor}
17609 このとき、改行、タブ、空白で区切って複数の数値を入力することができる。
17611 @command{factor} コマンドで使えるオプションは、いくつもない。
17615 簡単なヘルプメッセージを標準出力に表示し、それ以上の処理をせずに終了する。
17618 プログラムのバージョンを標準出力に表示し、それ以上の処理をせずに終了する。
17621 メルセンヌ素数の 8 番目と 9 番目の積を素因数に分解するには、2.2 GHz
17622 Athlon のシステムで、30 ミリセコンドの CPU 時間を要する。
17625 M8=$(echo 2^31-1|bc)
17626 M9=$(echo 2^61-1|bc)
17627 n=$(echo "$M8 * $M9" | bc)
17628 /usr/bin/time -f %U factor $n
17629 4951760154835678088235319297: 2147483647 2305843009213693951
17633 同様に、8 番目のフェルマー数、@math{2^{256}+1} では、同じマシンで約 20 秒かかる。
17635 大きな数の素因数分解は、そもそも大変な作業である。@command{factor} が使用している
17636 Pollard-Brent rho アルゴリズムは、比較的小さな因数を持つ数値に対してとりわけ効率がよい。
17637 もし、小さな因数を持たない大きな数値 (たとえば、二つの大きな素数の積からなる数値)
17638 の素因数分解をなさりたいのなら、他の方法の方がずっとすぐれている。
17640 @command{factor} が GNU MP を使用せずにビルドされている場合は、
17641 単精度の算術しか利用できない。従って、大きな数値 (一般には @math{2^{128}} 以上)
17642 には対応していない。単精度用のコードが使用しているアルゴリズムは、
17643 比較的小さな数値を素因数に分解するためのものなのである。
17648 @node numfmt invocation
17649 @section @command{numfmt}: 数値を整形し直す
17653 @command{numfmt} はさまざまな表記の数値を読み込んで、それを要求された形に整形し直す。
17654 一番よく使うのは、数値を人間が読みやすい形に変換する場合や、
17655 その逆を行う場合である (たとえば、@samp{4G} @expansion{} @samp{4,000,000,000})。
17658 numfmt [@var{option}]@dots{} [@var{number}]
17661 @command{numfmt} は、コマンドラインで与えられた各 @var{number} を、
17662 指定されたオプション (以下の節を参照) に従って変換する。
17663 @var{number} の指定がない場合は、標準入力から数値を読み込む。
17664 また、@command{numfmt} は、入力行中の特定のフィールドから数値を取り出すこともできる。
17665 その場合、列が揃うようにパディング (訳注: フィールドの空き埋め) が行われていれば、
17670 終了ステータスについては追加情報がある。@option{--invalid} をご覧になっていただきたい。
17673 * General options in numfmt:: 一般オプション
17674 * Possible UNITs:: 使用できる UNIT
17675 * Examples of using numfmt:: numfmt の使用例
17678 @node General options in numfmt
17679 @subsection 一般オプション
17681 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17687 間違えた使い方をしている疑いがあるとき、それについて警告メッセージを
17691 @itemx --delimiter=@var{d}
17693 @opindex --delimiter
17694 文字 @var{d} を入力フィールドの区切りとして使用する (デフォルトはホワイトスペース)。
17695 区切りにデフォルト以外の文字を使うと、自動的なパディングが行われなくなるのに注意していただきたい。
17697 @item --field=@var{fields}
17699 @var{field} 番目の入力フィールドの数値を変換する (@var{field} のデフォルトは 1)。
17700 @var{fields} では、@command{cut} と同じような範囲指定が使える。
17703 N N 番目のフィールド、1 から数える
17704 N- N 番目のフィールドから行末まで
17705 N-M N 番目から M 番目のフィールドまで (両端を含む)
17706 -M 行頭から M 番目のフィールドまで (両端を含む)
17711 @item --format=@var{format}
17713 浮動小数点数を表す printf 形式の @var{format} 文字列を出力の整形に使用する。
17714 文字列 @var{format} には、1 個の @samp{%f} 変換指定子が含まれていなければならない。
17715 なお、そうしたければ、@samp{'}, @samp{-}, @samp{0} といった修飾子や、
17716 フィールド幅修飾子 (訳注: 数値)、精度修飾子を @samp{%f} に付けることもできる。
17717 @samp{'} 修飾子は @option{--grouping} オプションを有効にし、@samp{-} 修飾子は
17718 @option{--padding} オプションを左詰めで有効に、フィールド幅修飾子は
17719 @option{--padding} オプションを右詰めで有効にする (訳注: @samp{-} 修飾子は、
17720 数値であるフィールド幅修飾子と併せて用いなければならない)。
17721 @samp{0} フィールド幅修飾子を使うと (@samp{-} も同時に指定されていなければ)、
17722 指定された幅になるまで数値の前に 0 を付けることになる。
17723 @samp{%.1f} のような精度指定は、入力データから引き出される精度や、@option{--to}
17724 オプションを使用したときの、数値の大きさや桁数の自動調整 (auto-scaling)
17727 @item --from=@var{unit}
17729 入力された数値の大きさや桁数を @var{unit} に従って自動調整 (auto-scaling)
17730 する (訳注: 一例を挙げると、入力数値が @samp{1K} だったとき、@samp{--from=si}
17731 が指定されていれば 1000 に変換し、@samp{--from=iec} が指定されていれば
17732 1024 に変換する)。@var{unit} については、次節「使用できる UNIT」を参照していただきたい。
17733 デフォルトでは数値の大きさや桁数の調節を行わない。
17734 それはまた、入力数値に接尾辞 (たとえば、@samp{M}, @samp{G} など)
17735 が付いていると、エラーになるということでもある。
17737 @item --from-unit=@var{n}
17738 @opindex --from-unit
17739 入力の 1 単位の大きさを (すなわち、デフォルトの 1 に代えて使う大きさを)
17740 指定する。入力する数値の 1 単位の大きさが、デフォルトの
17741 1 以外の場合に、このオプションを使用するわけだ (たとえば、入力する数値の
17742 @samp{10} が、1 単位 512 バイトの 10 単位を表している場合には、
17743 @samp{--from-unit=512} を使用する)。
17744 単位となる数値に接尾辞を付けると、@samp{--from=auto} の場合と同様に処理される。
17747 @opindex --grouping
17748 現在のロケールの桁区切りルールに従って、出力する数値を数桁ごとに区切る
17749 (たとえば、3 桁ごとの区切り記号は、たいてい @samp{.} (ドット) か
17750 @samp{,} (コンマ) である)。ロケールが @samp{POSIX/C} の場合は、このオプションに効果はない。
17752 @item --header[=@var{n}]
17754 @opindex --header=N
17755 最初の @var{n} (デフォルトは 1) 行を、いかなる変換もせずに出力する。
17757 @item --invalid=@var{mode}
17759 入力エラーに出会ったときのデフォルトの動作は、ステータスコード 2 で即座に終了することである。
17760 @option{--invalid=@samp{abort}} は、このデフォルトの動作を明示的に指定することになる。
17761 @var{mode} に @samp{fail} を指定すると、
17762 変換エラーがあるごとに警告メッセージを表示して、ステータス 2 で終了する。
17763 @var{mode} が @samp{warn} の場合は、変換エラーがあっても、ステータス 0
17764 で終了する。@var{mode} が @samp{ignore} の場合は、ステータス 0
17765 で終了するだけでなく、診断メッセージを出すことすらしない。
17767 @item --padding=@var{n}
17769 出力する数値が @var{n} 字分を占めるように、スペースを加えることでパディングを行う。
17770 @var{n} が正の数の場合は、数値が右詰めになり、負の数の場合は、数値が左詰めになる。
17771 デフォルトでは、数値は、入力行の幅に基づいて
17772 (訳注: 詳しく言うと、入力各行の変換する数値のあるフィールドが固定幅の場合、
17773 その幅を使用して) 自動的に揃えられる
17774 (ただし、それが行われるのは、フィールドの区切り文字がデフォルトの場合だけである)。
17776 @item --round=@var{method}
17778 @opindex --round=up
17779 @opindex --round=down
17780 @opindex --round=from-zero
17781 @opindex --round=towards-zero
17782 @opindex --round=nearest
17783 数値の表現を変換するときに、@var{method} に従って、数値を丸める。@var{method}
17784 には、@samp{up}, @samp{down}, @samp{from-zero} (デフォルト), @samp{towards-zero},
17785 @samp{nearest} が使用できる。(訳注: @samp{up} は切り上げ、@samp{down} は切り下げ、
17786 @samp{from-zero} はゼロから離れる方向へ、@samp{towards-zero} はゼロに近づく方向へ、
17787 @samp{nearest} は四捨五入である。)
17789 @item --suffix=@var{suffix}
17791 出力する数値に @samp{SUFFIX} を付ける。また、入力する数値に @samp{SUFFIX}
17794 @item --to=@var{unit}
17796 出力する数値の大きさや桁数を @var{unit} に従って自動調整する。
17797 @var{unit} については、次節「使用できる UNIT」を参照していただきたい。
17798 デフォルトでは、数値の大きさや桁数の調節をしないので、
17799 数値を構成するすべての数字が表示されることになる。
17801 @item --to-unit=@var{n}
17803 出力の 1 単位の大きさを (すなわち、デフォルトの 1 に代えて使う大きさを)
17804 指定する。出力する数値の 1 単位の大きさが、デフォルトの
17805 1 以外の場合に、このオプションを使用するわけだ (たとえば、1
17806 ブロック 1KB のブロック数で @samp{4,000,000} バイトを表現するには、
17807 @samp{--to=si --to-unit=1000} が使用できる)。
17808 単位となる数値に接尾辞を付けると、@samp{--from=auto} の場合と同様に処理される。
17810 @optZeroTerminated @newlineFieldSeparator
17814 @node Possible UNITs
17815 @subsection 使用できる @var{unit}
17817 @option{--from=UNIT} や @option{--to=UNIT} で指定する @var{unit} には、
17818 次のものを選択することができる。(訳注: @var{unit} の名前は、大文字ではなく、si, iec
17824 数値の大きさや桁数の調整を行わない。入力する数値には、いかなる接尾辞も付けることができない。
17825 従って、数値の直後に文字が続くとエラーになる。
17826 出力する数値については、その数値を構成するすべての数字を表示する。
17829 国際単位系 (International System of Units (SI)) の規格に従って、数値の大きさや桁数を自動調整する。
17830 入力する数値には、以下の接尾辞の一つが使用できる。
17831 出力する数値については、1000 以上の値は丸められて、以下の接尾辞の一つを付けて表示される。
17834 @samp{K} => @math{1000^1 = 10^3} (Kilo)
17835 @samp{M} => @math{1000^2 = 10^6} (Mega)
17836 @samp{G} => @math{1000^3 = 10^9} (Giga)
17837 @samp{T} => @math{1000^4 = 10^{12}} (Tera)
17838 @samp{P} => @math{1000^5 = 10^{15}} (Peta)
17839 @samp{E} => @math{1000^6 = 10^{18}} (Exa)
17840 @samp{Z} => @math{1000^7 = 10^{21}} (Zetta)
17841 @samp{Y} => @math{1000^8 = 10^{24}} (Yotta)
17845 International Electrotechnical Commission (IEC) の規格に従って、数値の大きさや桁数を自動調整する。
17846 入力する数値では、以下の接尾辞の一つが使用できる。
17847 出力する数値については、1024 以上の値は丸められて、以下の接尾辞の一つを付けて表示される。
17850 @samp{K} => @math{1024^1 = 2^{10}} (Kibi)
17851 @samp{M} => @math{1024^2 = 2^{20}} (Mebi)
17852 @samp{G} => @math{1024^3 = 2^{30}} (Gibi)
17853 @samp{T} => @math{1024^4 = 2^{40}} (Tebi)
17854 @samp{P} => @math{1024^5 = 2^{50}} (Pebi)
17855 @samp{E} => @math{1024^6 = 2^{60}} (Exbi)
17856 @samp{Z} => @math{1024^7 = 2^{70}} (Zebi)
17857 @samp{Y} => @math{1024^8 = 2^{80}} (Yobi)
17860 @option{iec} を選択すると、接尾辞に (@samp{G} など)
17861 1 文字の記号が使用されることになるが、これは規格に完全にかなってるとは言えない。
17862 IEC の規格では (@samp{Gi} など) 2 字の記号を推奨しているからだ。
17863 しかし、実際の使用では、1 文字の表記法が普通に使われている。
17864 @option{iec-i} を指定した場合と比較していただきたい。
17867 International Electrotechnical Commission (IEC) の規格に従って、数値の大きさや桁数を自動調整する。
17868 入力する数値では、以下の接尾辞の一つが使用できる。
17869 出力する数値については、1024 以上の値は丸められて、以下の接尾辞の一つを付けて表示される。
17872 @samp{Ki} => @math{1024^1 = 2^{10}} (Kibi)
17873 @samp{Mi} => @math{1024^2 = 2^{20}} (Mebi)
17874 @samp{Gi} => @math{1024^3 = 2^{30}} (Gibi)
17875 @samp{Ti} => @math{1024^4 = 2^{40}} (Tebi)
17876 @samp{Pi} => @math{1024^5 = 2^{50}} (Pebi)
17877 @samp{Ei} => @math{1024^6 = 2^{60}} (Exbi)
17878 @samp{Zi} => @math{1024^7 = 2^{70}} (Zebi)
17879 @samp{Yi} => @math{1024^8 = 2^{80}} (Yobi)
17882 @option{iec-i} を選択すると、接尾辞に (@samp{Gi} など)
17883 2 文字の記号が使用されることになる。これは、IEC の規格が推奨しているとおりだが、
17884 実際の使用では、必ずしもよく使われているわけではない。@option{iec}
17885 を指定した場合と、比較していただきたい。
17888 @samp{auto} は @option{--from} でしか使えない。これを選んだ場合、@samp{K},@samp{M},@samp{G},
17889 @samp{T},@samp{P},@samp{E},@samp{Z},@samp{Y} といった接尾辞が付いていれば、
17890 数値は SI の値と見なされる。接尾辞が
17891 @samp{Ki},@samp{Mi},@samp{Gi},@samp{Ti},@samp{Pi},@samp{Ei},@samp{Zi},@samp{Yi}
17893 数値は IEC の値と見なされることになる。
17897 @node Examples of using numfmt
17898 @subsection @command{nunfmt} の使用例
17900 1 個の数値を人間に読みやすい形に変換する (あるいは、その逆を行う)。
17902 $ numfmt --to=si 500000
17905 $ numfmt --to=iec 500000
17908 $ numfmt --to=iec-i 500000
17911 $ numfmt --from=si 1M
17914 $ numfmt --from=iec 1M
17917 # '--from=auto' を使用する。M=Mega, Mi=Mebi
17918 $ numfmt --from=auto 1M
17920 $ numfmt --from=auto 1Mi
17924 @samp{SI} 表記を @samp{IEC} 表記に換算する (たとえば、ハードディスクの容量が、
17925 メーカー表示では @samp{1TB} となっているが、実際に容量をチェックすると、
17929 $ numfmt --from=si --to=iec 1T
17934 ファイルやパイプから読み込んだ入力行にある、ある一つのフィールドを変換する
17935 (ここに示す数例は、あくまでも説明のために作ったものである。実際には、@command{ls}
17936 と @command{df} のどちらにも、人間に読みやすい形式でサイズを表示するための
17937 @option{--human-readable} オプションが存在している)。
17940 # 3 番目のフィールド (ファイルサイズ) を SI 表記で表示する
17941 $ ls -log | numfmt --field 3 --header --to=si | head -n4
17942 -rw-r--r-- 1 94K Aug 23 2011 ABOUT-NLS
17943 -rw-r--r-- 1 3.7K Jan 7 16:15 AUTHORS
17944 -rw-r--r-- 1 36K Jun 1 2011 COPYING
17945 -rw-r--r-- 1 0 Jan 7 15:15 ChangeLog
17946 (訳注: 実際には、この一番下の行は表示されず、一番上に「total @dots{}
17949 # 二番目のフィールド (サイズ) を IEC 表記で表示する
17950 $ df --block-size=1 | numfmt --field 2 --header --to=iec | head -n4
17951 File system 1B-blocks Used Available Use% Mounted on
17952 rootfs 132G 104741408 26554036 80% /
17953 tmpfs 794M 7580 804960 1% /run/shm
17954 /dev/sdb1 694G 651424756 46074696 94% /home
17958 出力は @option{--padding} や @option{--format} オプションを使って加工することができる。
17961 # フィールド幅が 10 字になるまで空白で埋める。右詰め表示。
17962 $ du -s * | numfmt --to=si --padding=10
17968 # フィールド幅が 10 字になるまで空白で埋める。左詰め表示。
17969 $ du -s * | numfmt --to=si --padding=-10
17975 # @option{--format} オプションを使用して、フィールド幅が 10 文字になるまで
17977 $ du -s * | numfmt --to=si --format="%10f"
17983 # @option{--format} オプションを使用して、フィールド幅が 10 文字になるまで
17985 $ du -s * | numfmt --to=si --padding="%-10f"
17992 桁区切りをサポートしているロケールでは、@option{--grouping} や @option{--format}
17993 オプションを使って、数値を数桁ごとに区切ることができる。ロケールが
17994 @samp{POSIX} や @samp{C} の場合は、桁区切りを指定しても、単に無視される。
17997 $ LC_ALL=C numfmt --from=iec --grouping 2G
18000 $ LC_ALL=en_US.utf8 numfmt --from=iec --grouping 2G
18003 $ LC_ALL=ta_IN numfmt --from=iec --grouping 2G
18006 $ LC_ALL=C numfmt --from=iec --format="==%'15f==" 2G
18009 $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'15f==" 2G
18012 $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'-15f==" 2G
18015 $ LC_ALL=ta_IN numfmt --from=iec --format="==%'15f==" 2G
18016 == 2,14,74,83,648==
18020 @node seq invocation
18021 @section @command{seq}: 数列を表示する
18024 @cindex numeric sequences
18025 @cindex sequence of numbers
18027 @command{seq} は、数列を標準出力に表示する。
18032 seq [@var{option}]@dots{} @var{last}
18033 seq [@var{option}]@dots{} @var{first} @var{last}
18034 seq [@var{option}]@dots{} @var{first} @var{increment} @var{last}
18037 @command{seq} は、@var{first} から @var{last} までの数を @var{increment} おきに表示する。
18038 デフォルトでは、それぞれの数は 1 行に 1 個づつ表示される。
18039 @var{increment} が指定されていない場合は、@var{first} が @var{last}
18040 より大きい場合でも、デフォルトの @samp{1} が @var{increment} として使用される。
18041 @var{first} のデフォルトもまた @samp{1} である。
18042 従って、@code{seq 1} は @samp{1} を表示するが、@code{seq 0} や @code{seq 10 5}
18043 は、何も出力しない。数列が終了するのは、現在の数値に @var{increment} を加えたら
18044 @var{last} より大きくなってしまう時点である。だから、@code{seq 1 10 10}
18045 は、@samp{1} しか表示しない。@var{increment} の値には @samp{0} を指定できない。
18046 同じ数を繰り返し出力したかったら、@command{yes} を使うべきである。また、@var{first},
18047 @var{increment}, @var{last} の値は、@code{NaN} (訳注: Not a Number)
18048 であってはならない。数値には浮動小数点数を指定することもできる。
18049 @xref{Floating point}.
18051 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
18052 オプションはオペランドの前に置かなければならない。
18055 @item -f @var{format}
18056 @itemx --format=@var{format}
18059 @cindex formatting of numbers in @command{seq}
18060 すべての数を @var{format} を使用して表示する。@var{format} は、 @samp{printf}
18061 形式の浮動小数点数の変換指定をただ一つ含むものでなければならない。
18062 すなわち、@samp{%a}, @samp{%e}, @samp{%f}, @samp{%g}, @samp{%A},
18063 @samp{%E}, @samp{%F}, @samp{%G} のいづれかである。
18064 @samp{%} の後ろには 0 個以上のフラグを、@samp{-+#0 '} のうちから選んで置くことができる。
18065 また、それに続けて、1 個以上の数字からなるフィールド幅を指定することもできるし、
18066 さらにその後ろに、@samp{.} とそれに続く 0 個以上の数字からなる精度を指定することもできる。
18067 @var{format} には、任意の数の @samp{%%} 変換指定が含まれていてもよい。
18068 変換指定はすべて、@samp{printf} の場合と同じ意味を持っている。
18070 デフォルトの表示形式は、@var{first}, @var{increment}, @var{last}
18071 がどういう表記を使用しているかよって決まる。そのすべてが固定小数点の
18072 10 進数表記を使用しているならば、デフォルトの表示形式は @samp{%.@var{p}f} になる。
18073 この @var{p} には、出力する数値を過不足なく表現できる最小の精度が来る。
18074 それ以外の場合、デフォルトの表示形式は @samp{%g} になる。
18076 @item -s @var{string}
18077 @itemx --separator=@var{string}
18079 @opindex --separator
18080 @cindex separator for numbers in @command{seq}
18081 数の区切りに @var{string} を使う。デフォルトは改行である。出力の最後には、必ず改行が付く。
18084 @itemx --equal-width
18086 @opindex --equal-width
18087 すべての数を同じ桁数で表示する。先頭の空きは 0 で埋める。@var{first},
18088 @var{increment}, @var{last} は、すべて固定小数点の 10 進数表記でなければならない
18089 (他のやり方で先頭を埋めたければ、@option{--format} を使うこと)。
18093 @option{-f} オプションを使えば、出力をもっときめ細かく制御することができる。
18096 $ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
18102 出力を 16 進数の整数にしたかったら、@command{printf} を使って変換すればよい。
18105 $ printf '%x\n' $(seq 1048575 1024 1050623)
18111 数のリストが非常に長くなる場合は、@command{xargs}
18112 を使用すると、引数リストの長さに対するシステムの制限を回避することができる。
18115 $ seq 1000000 | xargs printf '%x\n' | tail -n 3
18121 8 進数の出力を生成するには、printf に対して @code{%x} の代わりに、@code{%o}
18124 ほとんどのシステムで @command{seq} は、少なくとも @math{2^{53}}
18125 までの数値に対して整数の出力を生成することができる。それより大きい整数に対しては概算になる。
18126 細かい点は、ご使用のシステムの浮動小数点の実装によって異なっている。
18127 @xref{Floating point}. @command{seq} が @math{2^{64}}
18128 までの整数に対してなら、きちんと動作するが、
18129 それより大きな整数に対しては、数値が不正確になることがあるというのは、よくある話である。
18132 $ seq 50000000000000000000 2 50000000000000000004
18133 50000000000000000000
18134 50000000000000000000
18135 50000000000000000004
18138 とは言え、負ではない整数を対象とし、インクリメントが 1 で、
18139 フォーマット指定オプションはないという条件の元では、
18140 @command{seq} は任意の大きな数値を表示できることも心に留めておいていただきたい。
18142 @command{seq} でとんでもなく大きな桁の値を扱うときは、気をつけた方がよい。
18143 さもないと、@command{seq} は内部で浮動小数点を使用しているので、結果を見てびっくりするかもしれない。
18144 たとえば、x86 のプラットフォームでは、内部表現が 64 ビットの仮数部を使用しているが、
18148 seq 1 0.0000000000000000001 1.0000000000000000009
18151 @command{seq} は 1.0000000000000000007 を二度出力し、1.0000000000000000008
18152 をスキップする (訳注: 訳者の amd64 環境では、1.0000000000000000008
18153 ではなく、1.0000000000000000006 をスキップする)。
18158 @node File permissions
18160 @include perm-ja.texi
18162 @include parse-datetime-ja.texi
18166 @node Opening the software toolbox
18167 @chapter ソフトウェアの道具箱
18169 この章の初期のバージョンは、「GNU とは何か? (@cite{What's GNU?})」という連載記事として
18170 @cite{Linux Journal} 1994 年 6 月号に掲載された。
18171 執筆者は Arnold Robbins である。
18172 (@uref{http://www.linuxjournal.com/article.php?sid=2762})
18175 * Toolbox introduction:: はじめに
18176 * I/O redirection:: I/O リダイレクション
18177 * The who command:: @command{who} コマンド
18178 * The cut command:: @command{cut} コマンド
18179 * The sort command:: @command{sort} コマンド
18180 * The uniq command:: @command{uniq} コマンド
18181 * Putting the tools together:: 工具を組み合わせる
18185 @node Toolbox introduction
18186 @unnumberedsec はじめに
18188 今月の記事と GNU プロジェクトの関係は、周辺的なものにすぎない。お手元の
18189 GNU/Linux システムの GNU ツールをいくつか取り上げて、
18190 こんな使い方もありますよ、と説明している点で、関係があるにすぎないのだ。
18191 今月の記事の真の狙いは、プログラムを開発したり、使用したりする上での、
18192 「ソフトウェアは工具だ」という考え方を説明することである。
18194 ソフトウェアは工具だという思想は、Unix が最初に設計され、開発されたときの重要で不可欠な考え方だった
18195 (Linux も GNU も本質的には Unix のクローンである)。
18196 残念なことに、最近ではインターネットや見栄えのよい GUI の勢いに押されて、
18197 ソフトウェア工具論は流行らなくなっているようだ。
18198 この思想は、様々な問題を解決するための強力な思考モデルを提供してくれるのだから、
18201 スイス・アーミーナイフをズボンのポケットに (または、小物入れに)
18202 入れて、持ち歩いている人は多い。スイス・アーミーナイフは持っていると重宝な道具だ。
18203 それには、何本かのナイフ、ねじ回し、ピンセット、つまようじ、爪やすり、コルク抜き、
18204 他にもたぶん、いろいろ付いているだろう。
18205 日常のちょっとした雑用には、何にでも使える簡単な道具があれば済むのだから、
18206 そうした用途にはまさにピッタリの道具である。
18208 しかしながら、熟練した大工は、スイス・アーミーナイフを使って家を建てたりしない。
18209 彼は、その代わりに道具箱を持っていて、そこには用途別の工具
18210 --- のこぎり、金槌、ねじ回し、鉋など --- がぎっしり詰まっている。
18211 しかも、彼は一つ一つの工具について、適材適所を心得ている。
18212 ねじ回しの柄で釘を打ち込んだりすることは絶対にないのだ。
18214 ベル研究所にいた Unix の開発者たちは、プロのプログラマやコンピュータ・サイエンスの専門家ばかりだった。
18215 その彼らが、こういうことに気づいたのだ。
18216 万能型のプログラムは、たった一つのプログラムを使えばよいので、
18217 ユーザには受けがよいかもしれない。だが、いざ実際に作ってみると、そうしたプログラムは、
18227 新しい状況に合わせて機能を拡張するのが難しい。
18230 むしろ彼らは、プログラムは用途別の工具であるべきだと痛感した。
18231 要するに、個々のプログラムは、「一つの仕事をきちんとやってのければよい」。
18232 それ以上でもそれ以下でもない。そういったプログラムは、
18233 設計するのも、コードを書くのも、修正するのも、ずっと簡単である ---
18236 それだけではない。適切な仕組みを使って、プログラムを組み合わせると、
18237 全体が部分の総和以上になることにも、彼らは気づいた。
18238 ある用途専用のプログラムをいくつか組み合わせると、
18239 どのプログラムもそのために作られたのではない、ある特定の作業をやってのけることができる。
18240 それも、それ専用のプログラムを書かなければならない場合よりも、
18241 はるかに迅速に、かつ簡単にやってのけられるのだ。この記事の以下では、そうした使用法の
18242 (基本的な) 例をいくつか紹介する。(大事なことを一つ付記しておく。急がば回れだ。
18243 必要になるかもしれないソフトウェア工具があれば、まずそれを作ること。
18244 道具箱に適切な工具がまだない場合の話であるが。)
18246 @node I/O redirection
18247 @unnumberedsec I/O リダイレクション
18249 シェルの入出力リダイレクションについて、基本的なこと、
18250 とくに標準入力、標準出力、標準エラーがどういうものかを、読者はよく御存じだと思う。
18251 要するに、標準入力とは、データの入力元、すなわち、データがそこからやって来る場所のことだ。
18252 データの入力元が、ディスク上のファイルだろうと、キーボードだろうと、磁気テープだろうと、
18253 それどころかパンチカード・リーダーだろうと、プログラムはそれを知る必要もなければ、気にかける必要もない。
18254 同様に、標準出力とは、データの溜まる場所、データがそこに行く場所のことだ。
18255 プログラムとしては、それがどこになろうと、知らなくてもよく、気にかけなくてもよい。
18256 標準入力からデータを読み込み、それに対して何らかの処理を行い、標準出力に送り出すだけのプログラムを、
18257 水道のパイプラインのフィルターになぞらえて、「フィルター (@dfn{filter})」と呼ぶ。
18259 Unix のシェルでは、データのパイプラインを作るのはとてもやさしい。
18262 program_to_create_data | filter1 | ... | filterN > final.pretty.data
18265 ここでは、まず最初に生のデータを作成している。
18266 各フィルターがそのデータに対して何らかの変形を次々に行い、
18267 最終的に、データが希望どおりの形になって、パイプラインから抜け出してくる。
18269 標準入力と標準出力にとっては、それで十分だ。
18270 では、標準エラーはどこで登場し、どんな役割を果たすのだろうか?
18271 上記パイプラインの @command{filter1} について考えてほしい。
18272 データを読んでいるうちにエラーが起きたら、どうなるだろうか?
18273 @command{filter1} がエラーメッセージを標準出力に書き出したら、
18274 そのメッセージはパイプラインを下って @command{filter2} の入力に飲み込まれてしまう。
18275 そうなると、ユーザはたぶんメッセージをまったく目にしないことになるだろう。
18276 そこで、プログラムとしては、ユーザがエラーメッセージに気がついてくれるように、
18277 それを送ることのできる場所が必要になる。それが、標準エラーなのであり、
18278 標準エラーは通常、現在使用しているコンソールやウィンドウに結びついている。
18279 プログラムの標準出力を使用中のスクリーン以外にリダイレクトしている場合でも、それは変わらない。
18281 フィルター・プログラムが協力し合うためには、データのフォーマットについて互いに合意している必要がある。
18282 最も素直で使いやすいフォーマットと言えば、何と言っても、行分けされたテキストだ。
18283 そして、Unix のデータファイルは、たいていの場合、まさに、ASCII LF (Line Feed)
18284 文字によって行分けされたバイトの連続なのである。なお、この LF 文字は、Unix
18285 の文書では「改行 (newline)」と呼ばれる習慣になっている (C のプログラマにとっては
18286 @code{\n} だ)。これこそ、すべての伝統的なフィルター・プログラムによって使用されて来たフォーマットである。
18287 (昔のオペレーティング・システムの多くは、バイナリ・データを扱うための複雑な手段や専用のプログラムを備えていた。
18288 だが、Unix は、ただ単にテキストエディタでデータを見たり編集できたりする方がはるかに簡単だという考えから、
18289 そうした道具をずっと敬遠してきたのである。)
18291 さて、前置きはこれくらいで十分だ。まず、道具のいくつかをざっと見てみよう。
18292 その後で、そうした道具をおもしろいやり方で組み合わせる方法をご覧に入れる。
18293 以下の解説では、当面の問題に関係のあるコマンドライン・オプションしか取り上げない。
18294 いつでもそうすべきことだが、コマンドについて詳しいことを知りたかったら、
18295 ご使用のシステムの文書を参照なさるとよい。
18297 @node The who command
18298 @unnumberedsec @command{who} コマンド
18300 最初に取り上げるプログラムは、@command{who} コマンドだ。
18301 これは単独で使うと、現在ログインしているユーザのリストを生成する (参照: @ref{who invocation})。
18302 筆者がこの原稿を書いているのは、シングルユーザのシステムだが、数人のユーザがログインしていることにしよう。
18306 @print{} arnold console Jan 22 19:57
18307 @print{} miriam ttyp0 Jan 23 14:19(:0.0)
18308 @print{} bill ttyp1 Jan 21 09:32(:0.0)
18309 @print{} arnold ttyp2 Jan 23 20:48(:0.0)
18312 ここで @samp{$} はお馴染みのシェルプロンプトであり、筆者はそれに対して
18313 @samp{who} と打ち込んだわけだ。三人のユーザがログインしており、筆者は二度ログインしている。
18314 伝統的な Unix のシステムでは、ユーザ名はアルファベット
18315 8 文字までということになっている。このちょっとした豆知識が、後で役に立つことになる。
18316 @samp{who} の出力は悪くはない。だが、大しておもしろいデータでもない。
18318 @node The cut command
18319 @unnumberedsec @command{cut} コマンド
18321 次に注目するプログラムは @command{cut} コマンドだ。
18322 このコマンドは、入力されたデータから縦の列 (columns) やフィールドを切り出す
18323 (参照: @ref{cut invocation})。そこで、@command{cut} に命じて、@file{/etc/passwd}
18324 ファイルからログイン名とフルネームだけ表示させるといったことができる。
18325 @file{/etc/passwd} には、七つのフィールドがあり、おのおのコロンで区切られている。
18328 arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
18331 1 番目と 5 番目のフィールドを取り出すには、次のように @command{cut} を使用する。
18334 $ cut -d: -f1,5 /etc/passwd
18335 @print{} root:Operator
18337 @print{} arnold:Arnold D. Robbins
18338 @print{} miriam:Miriam A. Robbins
18342 @option{-c} オプションを付けると、 @command{cut} は入力行中の特定の文字
18343 (すなわち、特定の縦の列) を切り出す。これは、入力データが固定幅のフィールドを持ち、
18344 フィールド・セパレータがないときに便利である。
18345 たとえば、今月の月曜日は、何日と何日かをリストするには、次のようにする。
18347 @c Is using cal ok? Looked at gcal, but I don't like it.
18358 @node The sort command
18359 @unnumberedsec @command{sort} コマンド
18361 次に @command{sort} コマンドを一瞥する。
18362 これは Unix 風のシステムにおける最も強力なコマンドの一つであり、
18363 パイプを使って手の込んだデータ処理を行うとき、気がつくと使っていることがよくあるものだ。
18365 @command{sort} コマンドは、コマンドラインで指名された各ファイルを読み込んで、ソートする。
18366 その後で、ソートしたデータをマージし、それを標準出力に書き出す。
18367 コマンドラインでファイルが指定されていない場合は、標準入力を読み込む
18368 (こうして、フィルターになる)。ソートは、文字の照合順序、あるいは、
18369 ユーザが順序について指定した基準に基づいて行われる (参照: @ref{sort invocation})。
18372 @node The uniq command
18373 @unnumberedsec @command{uniq} コマンド
18375 最後に目を向けるのは (少なくとも今のところはだが)、@command{uniq} プログラムだ。
18376 データのソートをしていると、結果に重複行が現れることがよくある。
18377 内容が全く同じ行だ。たいていの場合、各行は一つだけあればよい。そこで、@command{uniq}
18378 の出番になる。@command{uniq} プログラムは、標準入力を読み込み、
18379 連続する同一行については、そのうちの一件だけを表示する。@command{uniq}
18380 には、オプションがいくつかある。後で @option{-c} オプションを使うことになるが、
18381 これはユニークな、つまり他と違っている各行を表示するとき、
18382 その行が入力中に現れた回数を前に付けるものである (参照: @ref{uniq invocation})。
18385 @node Putting the tools together
18386 @unnumberedsec 工具 (tools) を組み合わせる
18388 さて、大規模な ISP のサーバーシステムがあって、何十人ものユーザがログインしているとしよう。
18389 経営側がシステム管理者に、ログインしているユーザのソートしたリストを生成するプログラムを書くことを求めている。
18390 しかも、あるユーザが多重ログインをしていても、その人の名前は出力に
18391 1 回だけ現れればよいという条件がある。
18393 システム管理者は腰を据えてシステムのマニュアル類に取り組み、そうした作業を実行する
18394 C のプログラムを書くこともできるだろう。そのためには、たぶん数百行のコードが必要であり、
18395 プログラムを書いて、テストして、デバッグするには、2 時間ぐらいかかるはずだ。
18396 それに対して、ソフトウェアの道具箱に精通しているシステム管理者なら、
18397 C のプログラムを書く代わりに、ログインしているユーザのリストを生成するところから始めることができる。
18410 $ who | cut -c1-8 | sort
18417 最後に、ソートしたリストを @command{uniq} に渡して、重複を除く。
18420 $ who | cut -c1-8 | sort | uniq
18426 実を言うと、@command{sort} コマンドには @option{-u} というオプションがあって、@command{uniq}
18427 がやることをやってくれる。しかし、@command{uniq} にはほかの働きもあり、そちらは
18428 @samp{sort -u} で代用することができない。
18430 システム管理者が、以下のように、このパイプラインをシェルスクリプトにしておけば、
18431 システムのすべてのユーザが利用できるようになる
18432 (@samp{#} はシステム管理者、すなわち @code{root} のプロンプトだ)。
18435 # cat > /usr/local/bin/listusers
18436 who | cut -c1-8 | sort | uniq
18438 # chmod +x /usr/local/bin/listusers
18441 ここには、心に留めておくべき重要なことが四つある。
18442 まず第一に、1 行のコマンドラインにたった四つのプログラムを書くことで、システム管理者は約
18443 2 時間分の仕事をしないで済ますことができた。それだけではない。シェルのパイプラインは、
18444 C のプログラムを使った場合と比べても、ほぼ同じくらい効率がよく、
18445 プログラマの労働時間という点から見ると、ずっとずっと効率がよい。
18446 人間の労働時間はコンピュータの時間よりはるかに高価であり、
18447 「何もかもやるには、いつだって時間が足りない」現代社会では、プログラマの時間を
18448 2 時間も節約するのは、馬鹿にできない成果だ。
18450 二番目に、ツールを組み合わせることで、個々のプログラムの作者が想像もしなかったような、
18451 ある特定の目的のための仕事をやってのけることができる。
18452 これも、強調しておくべき重要なことである。
18454 第三に、ここでやって見せたように、段階を追ってパイプラインを構成するのも有益な方法だ。
18455 そうすれば、パイプラインの段階ごとにデータを目で見ることができるので、
18456 ツール類を間違いなく適切に使っているという自信を得ることができる。
18458 最後に、実行したパイプラインをシェルスクリプトにまとめておけば、他のユーザがそのコマンドを使うことができる。
18459 彼らのために作成した手の込んだコマンドの配管工事を、彼らは憶える必要すらないのだ。
18460 どうやって実行するかという点から見ると、シェルスクリプトもコンパイルされたプログラムも見分けが付かないのである。
18462 ここまでは準備運動だ。続いて、もっと複雑なパイプラインをもう二つご覧に入れよう。
18463 そのためには、工具をもう二つ紹介する必要がある。
18465 一つ目は @command{tr} コマンドだ。``transliterate (翻字する、字を置き換える)''
18466 の意味である。 @command{tr} コマンドは、一字一字処理して行くというやり方で、
18467 文字を置き換える (参照: @ref{tr invocation})。
18468 通常、このコマンドを使用するのは、大文字を小文字に変換するといったことのためである。
18471 $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
18472 @print{} this example has mixed case!
18475 役に立ちそうなオプションがいくつかある。
18479 リストされた文字の補集合を動作対象にする。
18480 言い換えると、指定された集合に存在しない文字に対して操作が行われる。
18483 一つ目の集合にある文字を出力から削除する。
18486 出力中の連続する同一文字を、ただの 1 文字に圧縮する。
18489 すぐ後で、この三つのオプションをすべて使うことになる。
18491 紹介するもう一つのコマンドは、@command{comm} だ。
18492 @command{comm} コマンドは、二つのソートされた入力ファイルを入力データとして受け取り、
18493 両ファイルの各行を三つの列に分けて表示する。
18494 出力される列は、一番目のファイルにのみ存在する行、二番目のファイルにのみ存在する行、
18495 両方のファイルに存在する行の順番である。@option{-1}, @option{-2}, @option{-3}
18496 というコマンドライン・オプションを付けると、対応する列を表示しないようになる。
18497 (これは直感的ではないので、ちょっとした慣れが必要だ。参照: @ref{comm invocation})
18520 ファイル名を @file{-} にすると、@command{comm} は通常ファイルではなく、標準入力を読み込む。
18522 これで、気の利いたパイプラインを組み立てる準備ができた。
18523 最初に作るアプリケーションは、単語の出現頻度カウンターである。
18524 これは、ある特定の単語を使いすぎていないかどうか、文書の作成者が判断するとき、役に立つ。
18526 最初のステップは、入力ファイル中のすべての文字を大文字か小文字のどちらかに統一することである。
18527 ``The'' と ``the'' は、頻度計算にとって同じ単語だ。
18530 $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
18533 次のステップは、句読点を除去することだ。
18534 引用符の付いている単語と付いていない単語も同じものとして扱った方がよいだろう。
18535 それならば、句読点類をすっぱり取り除いてしまうのが、一番簡単だ。
18538 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
18541 二番目の @command{tr} コマンドは、リストされた文字の補集合を操作対象にしている。
18542 すなわち、アルファベットのすべての文字、数字、アンダースコア、空白以外を対象にするわけだ。
18543 @samp{\n} は改行文字のことであり、これもそのまま残さなければならない。
18544 (実用に供するスクリプトでは、ついでに ASCII タブ文字も残した方がよいだろう。)
18546 この時点で、空白 (訳注: 改行を含む) で区切られた単語からなるデータができていることになる。
18547 単語には、英数字 (それにアンダースコア) しか含まれていない。
18548 次のステップは、データをバラして、1 行 1 単語になるようにすることだ。
18549 そうすれば、すぐ後で見るように、出現回数の計算がずっと楽になる。
18552 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18553 > tr -s ' ' '\n' | ...
18556 このコマンドは、空白を改行に変える。@option{-s} オプションが付いているので、
18557 出力中の連続する改行文字はたった 1 個に圧縮され、空行が取り除かれることになる。
18558 (なお、2 行目行頭の @samp{>} という記号は、シェルの二次プロンプトである。
18559 シェルがユーザに、コマンドがまだ最後まで打ち込まれていないと知らせるとき、これが表示される。)
18561 今や、1 行 1 単語からなるデータが手元にある。句読点は含まれず、すべて小文字だ。
18562 これで、各単語の出現回数を数える準備が整った。
18565 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18566 > tr -s ' ' '\n' | sort | uniq -c | ...
18569 この時点で、データはたぶんこんなふうになっているだろう。
18582 なんと、出力が出現回数ではなく、単語によってソートされている!
18583 こちらとしては、最も頻繁に使われる単語ほど先に表示したいのにだ。
18584 幸いなことに、それは簡単に実現できる。@command{sort} のオプションをもう二つ使うだけでよい。
18588 文字としてではなく、数値としてソートする。
18594 最終的なパイプラインは次のようになる。
18597 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18598 > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
18607 ふう、憶えることがどっさり! うん、でもね、同じ原則を応用してるだけなんだよ。
18608 たった 2 行、6 個のコマンドで (実際には、長い 1 行を便宜上 2 行に分割しているだけだが)
18609 興味深く有用な作業をするプログラムが出来上がった。それも、同じこことする
18610 C のプログラムを書くよりもずっと短い時間でだ。
18612 上記のパイプラインをちょっといじるだけで、なんと、簡単なスペルチェッカーが出来てしまう。
18613 ある単語の綴りが正しいかどうかを判断するには、辞書で調べさえすればよい。
18614 その単語が辞書になければ、綴りを間違えている可能性が高いわけだ。
18615 そこで、とりあえず、辞書が必要になる。辞書の在り処は、慣例からすると
18616 @file{/usr/dict/words} だ。筆者の GNU/Linux システムでは
18617 @footnote{この記事を 2000 年 11 月に改訂したとき使用したのは、Redhat Linux
18618 6.1 である}、それはソートされた 45,402 語からなる辞書である。
18620 それでは、自分の作ったファイルをどうやって辞書と比べるのか?
18621 前の例と同様、ソートした単語のリストを 1 行 1 語の形式で生成する。
18624 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18625 > tr -s ' ' '\n' | sort -u | ...
18628 必要なのは、辞書にない単語のリストだけだ。そこで、@command{comm} の出番になる。
18631 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18632 > tr -s ' ' '\n' | sort -u |
18633 > comm -23 - /usr/dict/words
18636 @option{-2} と @option{-3} のオプションを使うと、辞書 (2 番目のファイル)
18637 にしかない行と、両方のファイルにある行が排除される。1 番目のファイル
18638 (標準入力、すなわち、自分が使った単語のリストだ) にしかない行は、辞書に存在しない単語だ。
18639 そうした単語は、綴りを間違えている可能性がかなり高いわけである。
18640 ご覧に入れたこのパイプラインは、Unix における本格的なスペルチェッカーへの最初の一歩だったのである。
18642 他にも一言述べておくべきツールがいくつかある。
18646 ファイルを調べて、正規表現にマッチするテキストを検索する。
18652 データが流れるパイプのための T 字管。データをファイルと標準出力にコピーする。
18658 データ処理用の言語。これも上級ツール。
18661 ソフトウェア工具論が取り入れたものに、次のちょっとしたアドバイスもある。「骨の折れる部分は、他の奴にやらせろ」。
18662 すなわち、ある道具を選んで、必要なことの大部分をやらせ、それから、その結果に手を加えて、こちらの望む形にする、ということである。
18668 個々のプログラムは、一つの仕事をきちんとやってのければよい。それ以上でもそれ以下でもない。
18671 プログラムを適切な配管工事で組み合わせると、全体が部分の総和以上になる結果が生じる。
18672 作者が想像もしなかったようなプログラムの新しい使用法が見つかることもある。
18675 プログラムは決して余計なヘッダや追加情報を出力すべきではない。
18676 そうしたものもパイプラインの先へ送られてしまうかもしれないからだ。
18677 (これは、これまでに言及しなかったが、重要なことだ。)
18683 自分の道具箱をよく知れ! 個々のプログラムを適切に使え。適切なツールがなかったら、それを作れ。
18686 これを執筆している時点で、ここで取り上げたプログラムはすべて次の
18687 URL から手に入れることができる。@*
18688 @uref{http://ftp.gnu.org/old-gnu/textutils/textutils-1.22.tar.gz} @*
18689 もっと新しいバージョンは以下の場所にある。@*
18690 @uref{http://ftp.gnu.org/gnu/coreutils}
18692 この記事で筆者が述べたことに、新しいことは何もない。
18693 ソフトウェアは工具だという思想が最初に紹介されたのは、Brian Kernighan と P.J. Plauger
18694 による @cite{Software Tools} という本の中だった (Addison-Wesley, ISBN
18695 0-201-03669-X)。ソフトウェア工具の書き方と使い方を教えるこの本は、1976
18696 年に執筆され、@command{ratfor} (RATional FORtran) という名前の FORTRAN
18697 のプリプロセッサを使用している。その当時、C は今ほどありふれてはいず、FORTRAN
18698 がそうだったのだ。最後の章では、@command{ratfor} を FORTRAN に変換するプロセッサを
18699 @command{ratfor} で書いて見せている。@command{ratfor} は C にとてもよく似ているので、
18700 C を御存じの方なら、コードを追うのに何の苦労もないことだろう。
18701 (訳注: @cite{Software Tools} の翻訳は「ソフトウェア作法」という題で
18702 1981 年に出版されている。木村泉 訳、共立出版)
18704 1981 年に本は改訂され、@cite{Software Tools in Pascal}
18705 という形でも手に入るようになった (Addison-Wesley, ISBN 0-201-10342-7)。
18706 どちらの本も現在でも入手可能であり、プログラマなら、一読の価値が十分にある。
18707 この 2 冊の本が筆者のプログラミングに対する見方を大きく変えてくれたことに、疑いの余地はない。
18709 両方の本にあるプログラムは、Brian Kernighan のホームページから手に入れることができる
18710 (@uref{http://cm.bell-labs.com/who/bwk})。Software Tools Users Group
18711 という活動的なグループが長年に渡って存在し、そのメンバーがオリジナルの @command{ratfor}
18712 プログラムを、FORTRAN コンパイラを持っているほとんどすべてのコンピュータ・システムに移植していた。
18713 だが、1980 年代の中頃に Unix が大学を越えて浸透し出すにつれて、グループの人気は衰えて行った。
18715 現在では GNU のコードをはじめ、Unix クローンのプログラムがどんどん作られており、
18716 上記のプログラムはほとんど関心を持たれていない。
18717 それに、現代の C のバージョンの方がはるかに効率がよく、できることも上記のプログラムよりずっと多くなっている。
18718 それでも、よいプログラミング・スタイルのお手本として、
18719 また、今でも価値がある考え方を熱心に説いている点において、
18720 この 2 冊の本は肩を並べるものがない。筆者としては、大いにお薦めする次第だ。
18722 謝辞: ソフトウェア工具の最初の道具鍛冶である、Bell 研究所の Brian
18723 Kernighan 氏に、この記事を読んでチェックしてくださったことについて、
18726 @node About the translation
18729 この文書は GNU core utilities version @value{VERSION} の
18730 info マニュアルの翻訳である。間違いの御指摘や改良の御提案は
18731 Linux JM project 宛にメールでなさっていただきたい
18732 (@email{linuxjm-discuss@@lists.osdn.me})。
18734 まず最初に、coreutils の日本語版 info マニュアルの呼び出し方を簡単に説明する。
18735 coreutils の 日本語版 info が install-info
18736 コマンドを使ってきちんとシステムにインストールされているならば、コマンドラインから
18737 @samp{info coreutils-ja} で日本語マニュアル全体を、@samp{info chmod-ja}
18738 などで個々のプログラムの日本語マニュアルを呼び出すことができる。
18739 英語版を読むときは、今までどおり @samp{info coreutils} や @samp{info chmod}
18740 とすればよい。個々のコマンドについては、英語版なら
18741 @samp{info coreutils 'cp invocation'}、日本語版なら
18742 @samp{info coreutils-ja 'cp invocation'} といったマニュアルの呼び出し方もある。
18744 また、@samp{info} を引数なしで実行すると、
18745 info マニュアルのトップレベルのメニューが開く。
18746 ここで、メニュー項目にカーソルを合わせて、リターンキーを押せば、その項目に飛ぶ。
18747 しかし、読みたい項目をキー操作で指定する方が簡単である。たとえば、
18748 @kbd{m} キーを押した後 @kbd{chmod-ja}
18749 と打ち込んで、リターンキーを押せば、chmod コマンドの日本語版マニュアルが、
18750 @kbd{chmod} だけなら英語版マニュアルが表示される。
18752 @kbd{coreutils-ja}、@kbd{chmod-ja} などと
18753 @kbd{-ja} を付けるのは、@command{info} プログラムを起動するときと、
18754 info のトップレベル・メニューにいるときだけである。
18755 すでに日本語版 coreutils マニュアルのどれかを (それが
18756 coreutils-ja であれ、dd-ja であれ) @command{info} コマンドで開いている場合は、
18757 @kbd{-ja} を後ろに付ける必要がなくなる。と言うより、付けてはいけない。
18758 coreutils-ja の先頭ページのようにコマンドのメニューが存在するページでは
18759 (実際には、スクロールしないと、メニューが見えないが)、たとえば、
18760 @kbd{m} に続けて @kbd{chmod} と打ち込み、リターンキーを押すだけで、
18761 chmod の日本語の説明が開く。また、日本語 coreutils マニュアルの任意のページから
18762 coreutils-ja の他のノードへ直接飛ぶ場合も (ノードは、ほぼ章や節に相当する)、
18763 @kbd{g} キーを押してから、@kbd{chmod invocation} などとノード名を打ち込み、
18764 リターンキーを押せばよい。@kbd{m}, @kbd{g}、どちらの場合も、タブで文字列の補完ができる。
18766 info マニュアルの読み方の基本は、「メニューやクロスリファレンスにカーソルを合わせてリターンキーを押せば、その項目に飛ぶ。
18767 スペースで先に進み、バックスペースで後戻りする。@kbd{l} キーで直前に開いていたノードに戻る。
18768 @kbd{q} キーで終了する」である。たぶん coreutils-ja.info
18769 のパッケージには、README.ja というファイルが含まれていると思う。
18770 info マニュアルの呼び出し方や使用法について、そこにもう少し詳しい説明を書いておいたので、
18773 ここで、日本語の info マニュアルを使用するときの問題点を挙げておく。
18777 @command{info} コマンドのバージョンによっては、行末の処理が上手ではない。
18778 そのため、行末に余計な文字が入ることがある。そうしたときは、@kbd{C-l} を押して
18779 (Ctrl と l (エル) キーを同時に押す)、画面の再描画を行っていただきたい。
18781 Emacs の info リーダーでは、この問題はめったに起きない。
18784 最近の @command{info} コマンド (たとえば、バージョン 6.3)
18785 では、@kbd{s} や @kbd{/} による日本語の単語の検索ができるようになった。
18786 @kbd{C-s} による日本語のインクリメンタル検索も可能になっている。
18787 バージョンの古い @command{info} では、英単語による検索はできても、
18788 日本語の単語による検索はできないので、注意していただきたい。
18791 coreutils の info のこの翻訳では、インデックスの日本語化まで手が回らなかった。
18792 そのため、インデックスは英語のままである。
18795 古めの Emacs でこの翻訳を読もうとすると、文字化けするかもしれない。
18796 回避法があるのかもしれないが、訳者にはわからなかった。
18799 この翻訳の最初の版は、coreutils-8.20 所収の texinfo ファイルを元に、
18800 Linux JM project のために訳者が新たに翻訳したものだった。
18801 以下に、そのときの後書きをほぼそのまま載せておく。
18803 この info マニュアルの原文は、本文の「序」でも述べているように、
18804 各プログラムの man ページを統合し、増補・改訂したものである。この info
18805 マニュアルがまとめられるにともない、公式の man ページの方は、コマンドの
18806 @samp{--help} オプションで見ることができるものとほぼ同文の、
18809 従来どおりの詳しい man ページを希望する人たちも存在した。
18810 そのために作られたのが、gnumaniak の man ページであり、従来の man ページを
18811 info の情報で増補したものだったが、現在では保守されていないようだ。
18813 作成の経緯がそうしたものなので、この info マニュアルの原文には、
18814 gnumaniak の man ページの原文とほとんど内容が同じものがある。
18815 翻訳作業に当たっては、すべての項目について gnumaniak の
18816 man ページの翻訳を参考にした。あちらの訳文の方がよくできている項目もある
18818 @uref{http://linuxjm.osdn.jp/html/gnumaniak/man1/} にある)。
18820 この翻訳は、Linux JM project の gnumaniak の翻訳に多くを負っている。
18821 そこで、まず、gnumaniak の翻訳者の方々 --- 中野武雄、佐藤裕一、白方健太郎、
18822 Kazuyuki Tanisako、Omo Kazuki の諸氏にお礼を申し上げる。
18824 訳文を見直す際には、西尾太さんが以前翻訳なさった coreutils-5.2.1 の
18825 info を参考にした。また、当然ながら、新しい man ページ
18826 (こちらの翻訳者は、たぶん Yasuaki Taniguchi さんと Akihiro MOTOKI さん)
18827 とも、できるだけ突き合わせた。西尾さん、Taniguchi さん、元木さんにもお礼を申し上げる。
18829 gnumaniak や coreutils の man や info の翻訳をなさった方で、
18830 私がお名前を挙げ忘れた方がいらっしゃるかもしれない。
18833 訳文には間違った箇所がたくさんあると思う。そのへんは、ご寛恕いただきたい。
18834 皆さんがこの訳文を叩き台にして、増補・改訂・改訳を続け、
18835 より新しく、よりわかりやすい、そして、より正確な coreutils
18836 の翻訳を作ってくだされば、最初の翻訳者としてそれにまさる喜びはない。
18845 coreutils-8.20 を翻訳 by 長南洋一@*
18846 ptx, tsort, chcon, runcon は未訳
18850 coreutils-8.22 を元に増補・改訂 by 長南洋一@*
18851 numfmt, ptx, tsort, chcon, runcon を翻訳
18855 numfmt の章の構成を修正。訳文の訂正と細かい変更 by 長南洋一@*
18859 coreutils-8.26 を元に増補・改訂 by 長南洋一
18866 @node GNU Free Documentation License
18867 @appendix GNU Free Documentation License
18871 @node Concept index
18878 @c Local variables:
18879 @c texinfo-column-for-description: 32