OSDN Git Service

info/GNU-coreutils: a few corrections and modifications.
[linuxjm/jm.git] / info / GNU_coreutils / release / coreutils-ja.texi
1 \input texinfo
2 @c ===========================================================================
3 @c
4 @c This file was generated with po4a. Translate the source file.
5 @c
6 @c ===========================================================================
7 @c %**start of header
8 @setfilename coreutils-ja.info
9 @settitle GNU Coreutils
10
11 @c %**end of header
12
13 @include version.texi
14 @include constants.texi
15
16 @c Define new indices.
17 @defcodeindex op
18 @defcodeindex fl
19
20 @c Put everything in one index (arbitrarily chosen to be the concept index).
21 @syncodeindex fl cp
22 @syncodeindex fn cp
23 @syncodeindex ky cp
24 @syncodeindex op cp
25 @syncodeindex pg cp
26 @syncodeindex vr cp
27
28 @dircategory Basics (in Japanese)
29 @direntry
30 * Coreutils-ja: (coreutils-ja).  Core GNU (file, text, shell) utilities.
31 * Common options-ja: (coreutils-ja)Common options.
32 * File permissions-ja: (coreutils-ja)File permissions.  Access modes.
33 * Date input formats-ja: (coreutils-ja)Date input formats.  
34 @end direntry
35
36 @c FIXME: the following need documentation
37 @c * [: (coreutils)[ invocation.                   File/string tests.
38 @c * pinky: (coreutils)pinky invocation.           FIXME.
39
40 @dircategory Individual utilities (in Japanese)
41 @direntry
42 * arch-ja: (coreutils-ja)arch invocation.          Print machine hardware name.
43 * base64-ja: (coreutils-ja)base64 invocation.      Base64 encode/decode data.
44 * basename-ja: (coreutils-ja)basename invocation.  Strip directory and suffix.
45 * cat-ja: (coreutils-ja)cat invocation.            Concatenate and write files.
46 * chcon-ja: (coreutils-ja)chcon invocation.        Change SELinux CTX of files.
47 * chgrp-ja: (coreutils-ja)chgrp invocation.        Change file group
48 * chmod-ja: (coreutils-ja)chmod invocation.        Change access permissions.
49 * chown-ja: (coreutils-ja)chown invocation.        Change file owners and groups.
50 * chroot-ja: (coreutils-ja)chroot invocation.      Specify the root directory.
51 * cksum-ja: (coreutils-ja)cksum invocation.        Print POSIX CRC checksum.
52 * comm-ja: (coreutils-ja)comm invocation.          Compare sorted files by line.
53 * cp-ja: (coreutils-ja)cp invocation.              Copy files.
54 * csplit-ja: (coreutils-ja)csplit invocation.      Split by context.
55 * cut-ja: (coreutils-ja)cut invocation.            Print selected parts of lines.
56 * date-ja: (coreutils-ja)date invocation.          Print/set system date and time.
57 * dd-ja: (coreutils-ja)dd invocation.              Copy and convert a file.
58 * df-ja: (coreutils-ja)df invocation.              Report file system disk usage.
59 * dir-ja: (coreutils-ja)dir invocation.            List directories briefly.
60 * dircolors-ja: (coreutils-ja)dircolors invocation.  Color setup for ls.
61 * dirname-ja: (coreutils-ja)dirname invocation.    Strip last file name component.
62 * du-ja: (coreutils-ja)du invocation.              Report on disk usage.
63 * echo-ja: (coreutils-ja)echo invocation.          Print a line of text.
64 * env-ja: (coreutils-ja)env invocation.            Modify the environment.
65 * expand-ja: (coreutils-ja)expand invocation.      Convert tabs to spaces.
66 * expr-ja: (coreutils-ja)expr invocation.          Evaluate expressions.
67 * factor-ja: (coreutils-ja)factor invocation.      Print prime factors.
68 * false-ja: (coreutils-ja)false invocation.        Do nothing, unsuccessfully.
69 * fmt-ja: (coreutils-ja)fmt invocation.            Reformat paragraph text.
70 * fold-ja: (coreutils-ja)fold invocation.          Wrap long input lines.
71 * groups-ja: (coreutils-ja)groups invocation.      Print group names a user is in.
72 * head-ja: (coreutils-ja)head invocation.          Output the first part of files.
73 * hostid-ja: (coreutils-ja)hostid invocation.      Print numeric host identifier.
74 * hostname-ja: (coreutils-ja)hostname invocation.  Print or set system name.
75 * id-ja: (coreutils-ja)id invocation.              Print user identity.
76 * install-ja: (coreutils-ja)install invocation.    Copy and change attributes.
77 * join-ja: (coreutils-ja)join invocation.          Join lines on a common field.
78 * kill-ja: (coreutils-ja)kill invocation.          Send a signal to processes.
79 * link-ja: (coreutils-ja)link invocation.          Make hard links between files.
80 * ln-ja: (coreutils-ja)ln invocation.              Make links between files.
81 * logname-ja: (coreutils-ja)logname invocation.    Print current login name.
82 * ls-ja: (coreutils-ja)ls invocation.              List directory contents.
83 * md5sum-ja: (coreutils-ja)md5sum invocation.      Print or check MD5 digests.
84 * mkdir-ja: (coreutils-ja)mkdir invocation.        Create directories.
85 * mkfifo-ja: (coreutils-ja)mkfifo invocation.      Create FIFOs (named pipes).
86 * mknod-ja: (coreutils-ja)mknod invocation.        Create special files.
87 * mktemp-ja: (coreutils-ja)mktemp invocation.      Create temporary files.
88 * mv-ja: (coreutils-ja)mv invocation.              Rename files.
89 * nice-ja: (coreutils-ja)nice invocation.          Modify niceness.
90 * nl-ja: (coreutils-ja)nl invocation.              Number lines and write files.
91 * nohup-ja: (coreutils-ja)nohup invocation.        Immunize to hangups.
92 * nproc-ja: (coreutils-ja)nproc invocation.        Print the number of processors.
93 * numfmt-ja: (coreutils-ja)numfmt invocation.      Reformat numbers.
94 * od-ja: (coreutils-ja)od invocation.              Dump files in octal, etc.
95 * paste-ja: (coreutils-ja)paste invocation.        Merge lines of files.
96 * pathchk-ja: (coreutils-ja)pathchk invocation.    Check file name portability.
97 * pr-ja: (coreutils-ja)pr invocation.              Paginate or columnate files.
98 * printenv-ja: (coreutils-ja)printenv invocation.  Print environment variables.
99 * printf-ja: (coreutils-ja)printf invocation.      Format and print data.
100 * ptx-ja: (coreutils-ja)ptx invocation.            Produce permuted indexes.
101 * pwd-ja: (coreutils-ja)pwd invocation.            Print working directory.
102 * readlink-ja: (coreutils-ja)readlink invocation.  Print referent of a symlink.
103 * realpath-ja: (coreutils-ja)realpath invocation.  Print resolved file names.
104 * rm-ja: (coreutils-ja)rm invocation.              Remove files.
105 * rmdir-ja: (coreutils-ja)rmdir invocation.        Remove empty directories.
106 * runcon-ja: (coreutils-ja)runcon invocation.      Run in specified SELinux CTX.
107 * seq-ja: (coreutils-ja)seq invocation.            Print numeric sequences.
108 * sha1sum-ja: (coreutils-ja)sha1sum invocation.    Print or check SHA-1 digests.
109 * sha2-ja: (coreutils-ja)sha2 utilities.           Print or check SHA-2 digests.
110 * shred-ja: (coreutils-ja)shred invocation.        Remove files more securely.
111 * shuf-ja: (coreutils-ja)shuf invocation.          Shuffling text files.
112 * sleep-ja: (coreutils-ja)sleep invocation.        Delay for a specified time.
113 * sort-ja: (coreutils-ja)sort invocation.          Sort text files.
114 * split-ja: (coreutils-ja)split invocation.        Split into pieces.
115 * stat-ja: (coreutils-ja)stat invocation.          Report file(system) status.
116 * stdbuf-ja: (coreutils-ja)stdbuf invocation.      Modify stdio buffering.
117 * stty-ja: (coreutils-ja)stty invocation.          Print/change terminal settings.
118 * sum-ja: (coreutils-ja)sum invocation.            Print traditional checksum.
119 * sync-ja: (coreutils-ja)sync invocation.          Synchronize memory and disk.
120 * tac-ja: (coreutils-ja)tac invocation.            Reverse files.
121 * tail-ja: (coreutils-ja)tail invocation.          Output the last part of files.
122 * tee-ja: (coreutils-ja)tee invocation.            Redirect to multiple files.
123 * test-ja: (coreutils-ja)test invocation.          File/string tests.
124 * timeout-ja: (coreutils-ja)timeout invocation.    Run with time limit.
125 * touch-ja: (coreutils-ja)touch invocation.        Change file timestamps.
126 * tr-ja: (coreutils-ja)tr invocation.              Translate characters.
127 * true-ja: (coreutils-ja)true invocation.          Do nothing, successfully.
128 * truncate-ja: (coreutils-ja)truncate invocation.  Shrink/extend size of a file.
129 * tsort-ja: (coreutils-ja)tsort invocation.        Topological sort.
130 * tty-ja: (coreutils-ja)tty invocation.            Print terminal name.
131 * uname-ja: (coreutils-ja)uname invocation.        Print system information.
132 * unexpand-ja: (coreutils-ja)unexpand invocation.  Convert spaces to tabs.
133 * uniq-ja: (coreutils-ja)uniq invocation.          Uniquify files.
134 * unlink-ja: (coreutils-ja)unlink invocation.      Removal via unlink(2).
135 * uptime-ja: (coreutils-ja)uptime invocation.      Print uptime and load.
136 * users-ja: (coreutils-ja)users invocation.        Print current user names.
137 * vdir-ja: (coreutils-ja)vdir invocation.          List directories verbosely.
138 * wc-ja: (coreutils-ja)wc invocation.              Line, word, and byte counts.
139 * who-ja: (coreutils-ja)who invocation.            Print who is logged in.
140 * whoami-ja: (coreutils-ja)whoami invocation.      Print effective user ID.
141 * yes-ja: (coreutils-ja)yes invocation.            Print a string indefinitely.
142 @end direntry
143
144 @copying
145 このマニュアルは、GNU core utilities version @value{VERSION} の詳細な解説である。
146 core utilities には、テキストやファイルを操作するための標準的な
147 プログラムが入っている。
148
149 Copyright @copyright{} 1994-2013 Free Software Foundation, Inc.
150 @sp 1
151 Japanese translation copyright @copyright{} 2014 Linux JM project
152
153 @quotation
154 Permission is granted to copy, distribute and/or modify this document under
155 the terms of the GNU Free Documentation License, Version 1.3 or any later
156 version published by the Free Software Foundation; with no Invariant
157 Sections, with no Front-Cover Texts, and with no Back-Cover Texts.  A copy
158 of the license is included in the section entitled ``GNU Free Documentation
159 License''.
160 @end quotation
161
162 【訳者から御注意】 この文書を info コマンドで閲覧なさっている場合
163 には、info コマンドは日本語の行末の表示があまり上手ではないため、
164 しばしば行末に余計な文字が入って、読みにくいことがある。そうしたときは、
165 Ctrl キーと l (エル) キーを同時に押して、画面を再描画していただきたい。
166 たぶん、表示が正常になるはずである。
167
168 お手元の coreutils のバージョンが @value{VERSION} 以外の場合、この文書の
169 説明と動作が違うことがあるかもしれない (たとえば、この文書に書いてある
170 オプションが使えない、あるいは、使えるはずのオプションの説明がないなど)。
171 そうした場合は、お使いの coreutils と同じバージョンの info マニュアルや
172 man ページに当ってみていただきたい。そちらの方が正しいはずである。
173 @end copying
174
175 @titlepage
176 @title GNU @code{Coreutils}
177 @subtitle Core GNU utilities
178 @subtitle for version @value{VERSION}, @value{UPDATED}
179 @author David MacKenzie et al.
180 @author translated by Linux JM project
181
182 @page
183 @vskip 0pt plus 1filll
184 @insertcopying
185 @end titlepage
186 @shortcontents
187 @contents
188
189 @ifnottex
190 @node Top
191 @top GNU Coreutils
192
193 @insertcopying
194 @end ifnottex
195
196 @cindex core utilities
197 @cindex text utilities
198 @cindex shell utilities
199 @cindex file utilities
200
201 @menu
202 * Introduction::             注意事項、概観、著者
203 * Common options::           共通オプション
204 * Output of entire files::   ファイル全体の出力 (cat tac nl od base64)
205 * Formatting file contents:: ファイルの整形 (fmt numfmt pr fold)
206 * Output of parts of files:: ファイルの部分出力 (head tail split csplit)
207 * Summarizing files::      チェックサムなど (wc sum cksum md5sum sha1sum sha2)
208 * Operating on sorted files::  ソートなど (sort shuf uniq comm ptx tsort)
209 * Operating on fields::      フィールド操作 (cut paste join)
210 * Operating on characters::  文字操作 (tr expand unexpand)
211 * Directory listing::        ディレクトリ一覧 (ls dir vdir dircolors)
212 * Basic operations::         基本操作 (cp dd install mv rm shred)
213 * Special file types::       特殊ファイル型 (mkdir rmdir unlink mkfifo mknod 
214                                ln link readlink)
215 * Changing file attributes::  ファイルの属性変更 (chgrp chmod chown touch)
216 * Disk usage::               ディスク使用量など (df du stat sync truncate)
217 * Printing text::            テキストの表示 (echo printf yes)
218 * Conditions::               条件 (false true test expr)
219 * Redirection::              リダイレクション (tee)
220 * File name manipulation::   ファイル名の操作 (dirname basename pathchk 
221                                mktemp realpath)
222 * Working context::          作業環境 (pwd stty printenv tty)
223 * User information::         ユーザ情報 (id logname whoami groups users who)
224 * System context::           システム情報 (date arch nproc uname hostname 
225                                hostid uptime)
226 * SELinux context::          SELinux コンテキスト (chcon runcon)
227 * Modified command invocation::  実行環境の変更 (chroot env nice nohup stdbuf 
228                                    timeout)
229 * Process control::          プロセス制御 (kill)
230 * Delaying::                 一時停止 (sleep)
231 * Numeric operations::       数値の操作 (factor seq)
232 * File permissions::         アクセス・モード
233 * Date input formats::       日付文字列の指定法
234 * Opening the software toolbox::  ソフトウェア工具という考え方
235 * About the translation::    翻訳について
236 * GNU Free Documentation License::  Copying and sharing this manual
237 * Concept index::            General index
238
239 @detailmenu
240  --- ノードの詳細なリスト ---
241
242 共通オプション
243
244 * Exit status::              プログラムが実行に成功したか失敗したかの指標
245 * Backup options::           バックアップ・オプション
246 * Block size::               ブロックサイズ
247 * Floating point::           浮動小数点数の表現
248 * Signal specifications::    シグナルの指定
249 * Disambiguating names and IDs::  chgrp や chown のシンタクス
250 * Random sources::           ランダムデータのソース
251 * Target directory::         出力先ディレクトリ
252 * Trailing slashes::         末尾のスラッシュ
253 * Traversing symlinks::      ディレクトリを指すシンボリックリンクのたどり方
254 * Treating / specially::     / (ルート) を特別扱いする
255 * Standards conformance::    規格への準拠
256
257 ファイル全体の出力
258
259 * cat invocation::           ファイルを結合して、書き出す
260 * tac invocation::           ファイルを結合して、ファイルごとに逆順で書き出す
261 * nl invocation::            行番号を付けて、ファイルを書き出す
262 * od invocation::            ファイルを 8 進数などの形式で書き出す
263 * base64 invocation::        データを ASCII 文字で表示可能なデータに変換する
264
265 ファイル内容の整形
266
267 * fmt invocation::           パラグラフに分かれたテキストを整形し直す
268 * numfmt invocation::        数値を整形し直す
269 * pr invocation::            ページ付けや段組みをしてファイルを表示する
270 * fold invocation::          入力行を指定された幅に合わせて折り返す
271
272 @command{numfmt}: 数値を整形し直す
273
274 * General options in numfmt::  一般オプション
275 * Possible UNITs::             使用できる UNIT
276 * Examples of using numfmt::   numfmt の使用例
277
278 ファイルの部分出力
279
280 * head invocation::          ファイルの先頭部分を出力する
281 * tail invocation::          ファイルの末尾部分を出力する
282 * split invocation::         ファイルを一定のサイズに分割する
283 * csplit invocation::        ファイルを内容を目印にして分割する
284
285 ファイルの要約
286
287 * wc invocation::            行数、単語数、バイト数を表示する
288 * sum invocation::           チェックサムとブロック数を表示する
289 * cksum invocation::         CRC チェックサムとバイト数を表示する
290 * md5sum invocation::        MD5 ダイジェストの表示、または検査をする
291 * sha1sum invocation::       SHA-1 ダイジェストの表示、または検査をする
292 * sha2 utilities::           SHA-2 ダイジェストの表示、または検査をする
293
294 ソートしたファイルの操作
295
296 * sort invocation::          テキストファイルを並べ替える
297 * shuf invocation::          テキストファイルをシャッフルする
298 * uniq invocation::          ファイルから重複を省く
299 * comm invocation::          ソート済みの二つのファイルを一行づつ比較する
300 * ptx invocation::           ファイル内容の permuted index を作成する
301 * tsort invocation::         トポロジカル・ソート
302
303 @command{ptx}: パミューテド・インデックスを作成する
304
305 * General options in ptx::   プログラム全体の動作に関係するオプション
306 * Charset selection in ptx:: 使用している文字セットについて
307 * Input processing in ptx::  入力のフィールドと文脈、及びキーワードの選択
308 * Output formatting in ptx:: 出力フォーマットのタイプ、及びフィールドの幅
309 * Compatibility in ptx::     GNU による @command{ptx} の拡張
310
311 フィールド操作
312
313 * cut invocation::           各行の選択した部分を表示する
314 * paste invocation::         複数のファイルの各行をマージする
315 * join invocation::          共通のフィールドに基づいて行を連結する
316
317 文字操作
318
319 * tr invocation::            文字の置換、圧縮、削除を行う
320 * expand invocation::        タブをスペースに変換する
321 * unexpand invocation::      スペースをタブに変換する
322
323 @command{tr}: 文字の置換、圧縮、削除を行う
324
325 * Character sets::           文字集合の指定
326 * Translating::              ある文字集合を別の文字集合に変換する
327 * Squeezing::                連続する文字の圧縮と文字の削除
328
329 ディレクトリの一覧表示
330
331 * ls invocation::            ディレクトリの内容を一覧表示する
332 * dir invocation::           ディレクトリの内容を簡潔に表示する
333 * vdir invocation::          ディレクトリの内容を詳細に表示する
334 * dircolors invocation::     @command{ls} のカラー設定
335
336 @command{ls}: ディレクトリの内容を一覧表示する
337
338 * Which files are listed::      表示対象にするファイル
339 * What information is listed::  表示する情報
340 * Sorting the output::          出力のソート
341 * Details about version sort::  バージョン・ソートの詳細
342 * General output formatting::   出力全体の形式
343 * Formatting file timestamps::  タイムスタンプのフォーマット
344 * Formatting the file names::   ファイル名のフォーマット
345
346 基本的なファイル操作
347
348 * cp invocation::            ファイルやディレクトリをコピーする
349 * dd invocation::            ファイルの変換とコピー
350 * install invocation::       ファイルをコピーし属性をセットする
351 * mv invocation::            ファイルの移動 (名前の変更) を行う
352 * rm invocation::            ファイルやディレクトリを削除する
353 * shred invocation::         セキュリティを向上させたファイルの削除
354
355 特殊なファイル型
356
357 * link invocation::     システムコール link を使って、ハードリンクを作成する
358 * ln invocation::       ファイル間のリンクを作成する
359 * mkdir invocation::    ディレクトリを作成する
360 * mkfifo invocation::   FIFO (名前付きパイプ) を作成する
361 * mknod invocation::    ブロック型やキャラクタ型のスペシャルファイルを作成する
362 * readlink invocation:: シムリンクの値、または正規化されたファイル名を表示する
363 * rmdir invocation::    空のディレクトリを削除する
364 * unlink invocation::   システムコール unlink を使って、ファイルを削除する
365
366 ファイルの属性変更
367
368 * chown invocation::         ファイルの所有者やグループを変更する
369 * chgrp invocation::         ファイルの所有グループを変更する
370 * chmod invocation::         アクセス権を変更する
371 * touch invocation::         ファイルのタイムスタンプを変更する
372
373 ディスク使用量
374
375 * df invocation::            ファイルシステムのディスク使用状態を報告する
376 * du invocation::            ファイルのディスク使用量を概算する
377 * stat invocation::          ファイルやファイルシステムの状態を報告する
378 * sync invocation::          ディスク上のデータをメモリと同期する
379 * truncate invocation::      ファイルサイズの短縮・伸長を行う
380
381 テキストの表示
382
383 * echo invocation::          テキストを 1 行表示する
384 * printf invocation::        データを整形して表示する
385 * yes invocation::           中断されるまで文字列を表示する
386
387 条件
388
389 * false invocation::         何もせず、実行失敗のステータスを返す
390 * true invocation::          何もせず、正常終了する
391 * test invocation::          ファイルタイプのチェックや値の比較を行う
392 * expr invocation::          式を評価する
393
394 @command{test}: ファイルタイプのチェックや値の比較を行う
395
396 * File type tests::            ファイルタイプのテスト
397 * Access permission tests::    アクセス許可のテスト
398 * File characteristic tests::  ファイル特性のテスト
399 * String tests::               文字列のテスト
400 * Numeric tests::              数値のテスト
401
402 @command{expr}: 式を評価する
403
404 * String expressions::       文字列式 (+ : match substr index length)
405 * Numeric expressions::      数式 (+ - * / %)
406 * Relations for expr::       論理結合と関係表現 (| & < <= = == != >= >)
407 * Examples of expr::         @command{expr} の使用例
408
409 リダイレクション
410
411 * tee invocation::           出力を複数のファイルやプロセスにリダイレクトする
412
413 ファイル名操作
414
415 * basename invocation::      ファイル名からディレクトリと接尾辞を取り除く
416 * dirname invocation::       ファイル名から最後の要素を取り除く
417 * pathchk invocation::       ファイル名の有効性や可搬性を検査する
418 * mktemp invocation::        テンポラリファイルやディレクトリを作成する
419 * realpath invocation::      ファイル名を展開して表示する
420
421 作業環境
422
423 * pwd invocation::           現在作業中のディレクトリを表示する
424 * stty invocation::          端末の諸特性を表示・変更する
425 * printenv invocation::      環境変数のすべて、あるいは一部を表示する
426 * tty invocation::           標準入力に接続している端末のファイル名を表示する
427
428 @command{stty}: 端末の諸特性を表示・変更する
429
430 * Control::                  制御関係の設定
431 * Input::                    入力に関する設定
432 * Output::                   出力に関する設定
433 * Local::                    ローカル設定
434 * Combination::              組み合わせ設定
435 * Characters::               特殊文字
436 * Special::                  特殊設定
437
438 ユーザ情報
439
440 * id invocation::            ユーザの ID を表示する
441 * logname invocation::       現在のログイン名を表示する
442 * whoami invocation::        実効ユーザ ID を表示する
443 * groups invocation::        ユーザが所属しているグループ名を表示する
444 * users invocation::         現在ログインしている全ユーザのログイン名を表示する
445 * who invocation::           現在誰がログインしているかを表示する
446
447 システム情報
448
449 * arch invocation::          マシンのハードウェア名を表示する
450 * date invocation::          システムの日付や時刻を表示、設定する
451 * nproc invocation::         プロセッサ数を表示する
452 * uname invocation::         システムについて情報を表示する
453 * hostname invocation::      システム名を表示、設定する
454 * hostid invocation::        数値によるホストの識別名を表示する
455 * uptime invocation::        システムの連続稼働時間と負荷を表示する
456
457 @command{date}: システムの日付や時刻を表示、設定する
458
459 * Time conversion specifiers:: 時刻関係の変換指定子 %[HIklMNpPrRsSTXzZ]
460 * Date conversion specifiers:: 日付関係の変換指定子 %[aAbBcCdDeFgGhjmuUVwWxyY]
461 * Literal conversion specifiers::  文字変換指定子 %[%nt]
462 * Padding and other flags::  0 や空白による空き埋め、その他。
463 * Setting the time::         システムクロックの変更
464 * Options for date::         現在時以外の指定
465 * Date input formats::       日付文字列の指定法
466 * Examples of date::         用例
467
468 SELinux コンテキスト
469
470 * chcon invocation::     ファイルの SELinux コンテキストを変更する
471 * runcon invocation::    指定された SELinux コンテキストでコマンドを実行する
472
473 コマンド実行条件の変更
474
475 * chroot invocation::    ルートディレクトリを変更して、コマンドを実行する
476 * env invocation::       変更した環境でコマンドを実行する
477 * nice invocation::      niceness を変更して、コマンドを実行する
478 * nohup invocation::     ハングアップ・シグナルで終了しないコマンドを実行する
479 * stdbuf invocation::    入出力バッファリングを変更して、コマンドを実行する
480 * timeout invocation::   タイムリミット付きでコマンドを実行する
481
482 プロセス制御
483
484 * kill invocation::          プロセスにシグナルを送る。
485
486 一時停止
487
488 * sleep invocation::         指定された時間、停止する
489
490 数値の操作
491
492 * factor invocation::        素因数を表示する
493 * seq invocation::           数列を表示する
494
495 ファイルの許可属性
496
497 * Mode Structure::           ファイルのモードビットの構成
498 * Symbolic Modes::           ファイルのモードビットの憶えやすい表記
499 * Numeric Modes::            ファイルのモードビットの 8 進数による表記
500 * Directory Setuid and Setgid::  ディレクトリの Set-User-ID と 
501                                    Set-Group-ID ビット
502
503 日付入力の書式
504
505 * General date syntax::      共通規則
506 * Calendar date items::      19 Dec 1994
507 * Time of day items::        9:20pm
508 * Time zone items::          EST, PDT, UTC, @dots{}
509 * Combined date and time of day items::  1972-09-24T20:02:00,000000-0500
510 * Day of week items::        Monday, Tuesday
511 * Relative items in date strings::  next tuesday, 2 years ago
512 * Pure numbers in date strings::  19931219, 1440
513 * Seconds since the Epoch::  @@1078100502
514 * Specifying time zone rules::  TZ="America/New_York", TZ="UTC0"
515 * Authors of parse_datetime::  Bellovin, Eggert, Salz, Berets, et al.
516
517 ソフトウェアの道具箱
518
519 * Toolbox introduction::     はじめに
520 * I/O redirection::          I/O リダイレクション
521 * The who command::          @command{who} コマンド
522 * The cut command::          @command{cut} コマンド
523 * The sort command::         @command{sort} コマンド
524 * The uniq command::         @command{uniq} コマンド
525 * Putting the tools together::  工具を組み合わせる
526
527 翻訳について
528
529 * About the translation::    翻訳について
530
531 Copying This Manual
532
533 * GNU Free Documentation License::  Copying and sharing this manual
534
535 @end detailmenu
536 @end menu
537
538
539 @node Introduction
540 @chapter 序
541
542 このマニュアルは作成の途上にある。たとえば、多くのセクションで、基本的な
543 概念を初心者にわかりやすく説明するといった試みがなされていない。そこで、
544 お願いがある。もし、関心がおありなら、このマニュアルの改良に参加して
545 いただきたい。そうしていただければ、GNU コミュニティ全体が恩恵に浴する
546 ことになる。
547
548 @cindex POSIX
549 このマニュアルで解説している GNU ユーティリティは、POSIX の規格に
550 おおむね準拠している。
551 @cindex bugs, reporting
552 バグの報告は、@email{bug-coreutils@@gnu.org} になさって
553 いただきたい。そのとき、バージョン番号、マシンのアーキテクチャ、入力に
554 使ったファイルといった情報はもとより、バグの再現に必要な他のいかなる
555 情報も、忘れずに記載していただきたい。たとえば、どんな入力をしたか、
556 どんな結果を期待していたか、実際の結果はどうだったか、それがおかしいと
557 考える理由は何なのかといったことである。差分の投稿は歓迎するが、何がどう
558 問題なのかの説明もやはり付けていただきたい。推測するのが難しいこともある
559 からだ。@xref{Bugs, , , gcc, Using and Porting GNU CC}.
560
561 @cindex Berry, K.
562 @cindex Paterson, R.
563 @cindex Stallman, R.
564 @cindex Pinard, F.
565 @cindex MacKenzie, D.
566 @cindex Meyering, J.
567 @cindex Youmans, B.
568 このマニュアルは、ユーティリティ・プログラムの配布に含まれる Unix
569 man page を元にして作られたものである。そうした man page は、David
570 MacKenzie によって書かれ、Jim Meyering によって改訂されていた。現在読者
571 がお読みになっているこのマニュアルは、そうしたユーティリティについての
572 公式文書であり、man page の方は、今では改訂作業が行われていない。なお、
573 @command{fmt} の最初の man page の著者は、 Ross Paterson だった。Texinfo 形式
574 への変換を最初に行ったのは、Fran@,{c}ois Pinard である。Karl Berry が索引を
575 作成し、構成に若干の変更を加えて、その結果に手を入れた。Free Software
576 Foundation の職員である Brian Youman が textutils, fileutils, sh-utils
577 のマニュアルを統合し、多数の項目を含む現在のマニュアルを作成した。こうした
578 作業全般に渡って、Richard Stallman が例によって洞察力に富む貴重な意見を
579 寄せてくれた。
580
581 @node Common options
582 @chapter 共通オプション
583
584 @macro optBackup
585 @item -b
586 @itemx @w{@kbd{--backup}[=@var{method}]}
587 @opindex -b
588 @opindex --backup
589 @vindex VERSION_CONTROL
590 @cindex backups, making
591 @xref{Backup options}.  そのままでは、上書きされるか、消去されて
592 しまう各ファイルのバックアップを作成する。
593 @end macro
594
595 @macro optBackupSuffix
596 @item -S @var{suffix}
597 @itemx --suffix=@var{suffix}
598 @opindex -S
599 @opindex --suffix
600 @option{-b} によって作られる各バックアップファイルの後ろに @var{suffix} を
601 付ける。 @xref{Backup options}.
602 @end macro
603
604 @macro optTargetDirectory
605 @item -t @var{directory}
606 @itemx @w{@kbd{--target-directory}=@var{directory}}
607 @opindex -t
608 @opindex --target-directory
609 @cindex target directory
610 @cindex destination directory
611 @var{directory} を出力先ディレクトリに指定する。 @xref{Target directory}.
612 @end macro
613
614 @macro optNoTargetDirectory
615 @item -T
616 @itemx --no-target-directory
617 @opindex -T
618 @opindex --no-target-directory
619 @cindex target directory
620 @cindex destination directory
621 最後のオペランドがディレクトリやディレクトリへのシンボリックリンク
622 でも、それを特別扱いしない。 @xref{Target directory}.
623 @end macro
624
625 @macro optNull{cmd}
626 @item -0
627 @opindex -0
628 @itemx --null
629 @opindex --null
630 @cindex output NUL-byte-terminated lines
631 各行の末尾に改行ではなく、ゼロバイト (ASCII NUL) を出力する。この
632 オプションを使用すると、@command{\cmd\} の出力するデータに、途中に改行を
633 挟むものがあっても、他のプログラムがその出力を解析できるようになる。
634 @end macro
635
636 @macro optSi
637 @item --si
638 @opindex --si
639 @cindex SI output
640 各サイズにの後ろに、メガバイトなら @samp{M} といった、SI 形式の略号
641 を付ける。1024 ではなく、1000 の累乗が使用されるので、@samp{M} は
642 1,000,000 バイトを表している。このオプションは、@option{--block-size=si}
643 と同じことである。1024 の累乗が使いたければ、@option{-h} や
644 @option{--human-readable} を使用すればよい。
645 @end macro
646
647 @macro optHumanReadable
648 @item -h
649 @itemx --human-readable
650 @opindex -h
651 @opindex --human-readable
652 @cindex human-readable output
653 各サイズの後ろに、メビバイトなら @samp{M} といった、大きさを示す文字を
654 付ける。1000 ではなく、1024 の累乗が使われるので、@samp{M} は 1,048,576
655 バイトを表している。このオプションは、@option{--block-size=human-readable}
656 と同じである。1000 の累乗が使いたければ、"@option{--si} オプションを使用
657 すればよい。
658 @end macro
659
660 @macro optStripTrailingSlashes
661 @item @w{@kbd{--strip-trailing-slashes}}
662 @opindex --strip-trailing-slashes
663 @cindex stripping trailing slashes
664 @var{source} 引数の後ろにスラッシュが付いていたら、それを削除する。
665 @xref{Trailing slashes}.
666 @end macro
667
668 @macro mayConflictWithShellBuiltIn{cmd}
669 @cindex conflicts with shell built-ins
670 @cindex built-in shell commands, conflicts with
671 シェルの組み込み機能の @command{\cmd\} やエイリアスのために、@command{\cmd\} に何の
672 修飾も付けずに対話的に使ったり、スクリプトの中で使ったりすると、動作が
673 ここで述べているものとは違うことがあるかもしれない。シェルによる干渉を
674 避けるためには、@command{env} 経由で @command{\cmd\} を起動すればよい (すなわち、
675 @code{env \cmd\ @dots{}} のようにだ)。
676
677 @end macro
678
679 @macro multiplierSuffixes{varName}
680 @var{\varName\} は、整数であり、
681 以下に挙げるような何倍かを示す接尾辞を
682 後ろに付けることもできる。
683 接尾辞だけ指定してもよい (訳注: その場合は、1 が前にあるものと
684 見なされる)。
685 @example
686 @samp{b}  =>            512 ("blocks")
687 @samp{KB} =>           1000 (KiloBytes)
688 @samp{K}  =>           1024 (KibiBytes)
689 @samp{MB} =>      1000*1000 (MegaBytes)
690 @samp{M}  =>      1024*1024 (MebiBytes)
691 @samp{GB} => 1000*1000*1000 (GigaBytes)
692 @samp{G}  => 1024*1024*1024 (GibiBytes)
693 @end example
694 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, @samp{Y} についても同様。
695 @end macro
696
697 @c FIXME: same as above, but no ``blocks'' line.
698 @macro multiplierSuffixesNoBlocks{varName}
699 @var{\varName\} は、整数であり、
700 以下に挙げるような何倍かを示す接尾辞を
701 後ろに付けることもできる。
702 接尾辞だけ指定してもよい (訳注: その場合は、1 が前にあるものと
703 見なされる)。
704 @example
705 @samp{KB} =>           1000 (KiloBytes)
706 @samp{K}  =>           1024 (KibiBytes)
707 @samp{MB} =>      1000*1000 (MegaBytes)
708 @samp{M}  =>      1024*1024 (MebiBytes)
709 @samp{GB} => 1000*1000*1000 (GigaBytes)
710 @samp{G}  => 1024*1024*1024 (GibiBytes)
711 @end example
712 @samp{T}, @samp{P}, @samp{E}, @samp{Z}, @samp{Y} についても同様。
713 @end macro
714
715 @cindex common options
716
717 いくつかのオプションは、このマニュアルで取り上げるすべてのプログラムで
718 利用することができる。そうしたオプションについては、個々のプログラムで
719 同じ説明を繰り返すことはせず、この場で説明しておく (実のところ、こうした
720 オプションは、GNU のすべてのプログラムで使用できる (はずである))。
721
722 @vindex POSIXLY_CORRECT
723 通常、オプションとオペランドは、どんな順番で指定してもよい。プログ
724 ラムは、すべてのオプションがいかなるオペランドよりも前にあるかのごとく
725 振る舞うようになっている。たとえば、@samp{sort -r passwd -t :} は、@samp{:} が
726 @option{-t} のオプション引数 (option-argument) なので、@samp{sort -r -t : passwd}
727 と同じ動作をする。しかしながら、環境変数 @env{POSIXLY_CORRECT} が設定されて
728 いる場合は、オプションはオペランドの前に置かなければならない。ただし、
729 オプションとオペランドの順番について、そのコマンドに別の決まりがある
730 ときはこのかぎりではない。
731
732 若干のプログラムでは、二番目以降のオペランドとして先頭に @samp{-} が付く
733 オペランドが使えると都合がよい。そうしたプログラムでは、@env{POSIXLY_CORRECT}
734 が設定されていない場合でも、オプションをオペランドの前に置く必要がある。
735 そこで、そうしたプログラムの説明には、その旨注意書きを付けておいた。
736 たとえば、@command{env} コマンドのオプションは、オペランドの前に置かなければ
737 ならない。オペランドとして指定したコマンドが、それ自身のオプションを
738 伴うことがあるからだ。
739
740 ロングオプションが使えるたいていのプログラムは、誤解の余地がない
741 かぎり、そうしたオプションの省略形を認識する。たとえば、@samp{rmdir
742 --ignore-fail-on-non-empty} は、@samp{rmdir --ignore-fail} という形でも
743 起動できるし、@samp{rmdir --i} でも大丈夫だ。@samp{ls --h} のような誤解の余地の
744 あるオプションは、まさに曖昧だと判定される。
745
746 このマニュアルで説明するプログラムの中には、@option{--help} や @option{--version}
747 オプションを、それが唯一のコマンドライン引数である場合にしか、認識
748 しないものがある。そうしたプログラムの場合、ロングオプションの省略形
749 は、常に認識されるとはかぎらない。
750
751 @table @samp
752
753 @item --help
754 @opindex --help
755 @cindex help, online
756 使用法を表示して利用できるすべてのオプションを列挙し、正常終了する。
757
758 @item --version
759 @opindex --version
760 @cindex version number, finding
761 バージョン番号を表示し、正常終了する。
762
763 @item --
764 @opindex --
765 @cindex option delimiter
766 オプション群の末尾を示す。これ以降に引数があれば、それが @samp{-} で
767 始まっている場合でも、オペランドとして扱われる。たとえば、@samp{sort -- -r}
768 は、@file{-r} という名前のファイルから読み込むということである。
769
770 @end table
771
772 @cindex standard input
773 @cindex standard output
774 単独の @samp{-} はオペランドであって、オプションのように見えるが、オプ
775 ションでは全くない。単独の @samp{-} は、標準入力、または標準出力を表して
776 いる。後者は、前後の状況からそれが明らかな場合だ。たとえば、@samp{sort -}
777 は、標準入力から読み込むということであり、ただの @samp{sort} と同じである。
778 また、@samp{tee -} は、入力したもののコピーを標準出力に二重に書き出す。使用
779 できないとはっきり断っていないかぎり、@samp{-} は、ファイル名が要求される
780 いかなるところでもオペランドとして使用することができる。
781
782 @menu
783 * Exit status::              プログラムが成功したか失敗したかの指標。
784 * Backup options::           バックアップ・オプション (-b と -S)。
785 * Block size::               ブロックサイズ (BLOCK_SIZE と --block-size)。
786 * Floating point::           浮動小数点数の表現。
787 * Signal specifications::    --signal オプションによるシグナルの指定。
788 * Disambiguating names and IDs::  chgrp や chown のシンタクス。
789 * Random sources::           ランダムデータのソース (--random-source)。
790 * Target directory::         出力先ディレクトリの指定。
791 * Trailing slashes::         末尾のスラッシュ (--strip-trailing-slashes)。
792 * Traversing symlinks::      シムリンクをたどる (-H, -L, -P)。
793 * Treating / specially::     --preserve-root や --no-preserve-root の使用。
794 * Special built-in utilities::  組み込みコマンド @command{break}, @command{:} など。
795 * Standards conformance::    POSIX 規格への準拠。
796 @end menu
797
798
799 @node Exit status
800 @section 終了ステータス
801
802 @macro exitstatus
803 終了ステータス 0 は成功を示し、0 以外の値は失敗を示す。
804 @end macro
805
806 ほとんどすべてのコマンドは、実行すると、整数の終了ステータス
807 (@dfn{exit status}) を返し、それは他のコマンドの動作を変更するために使用することが
808 できる。大多数のコマンドにとって、終了ステータス @samp{0} は成功を意味して
809 いる。失敗は @samp{0} 以外の値によって示され、通常は @samp{1} であるが、非標準的な
810 プラットフォームでは違うこともある。POSIX の規定が、@samp{0} 以外であること
811 しか要求していないからである。
812
813 しかしながら、ここで詳述しているプログラムの中にも、終了ステータスと
814 して上記以外の値を返すものがあり、@samp{0} や @samp{1} という値に別の意味を与えて
815 いるプログラムさえ、少数ながら存在する。そうした例外的なプログラムとして
816 は、@command{chroot}, @command{env}, @command{expr}, @command{nice},
817 @command{nohup}, @command{numfmt}, @command{printenv},
818 @command{sort}, @command{stdbuf}, @command{test}, @command{timeout},
819 @command{tty} などを挙げることができる。
820
821
822 @node Backup options
823 @section バックアップ・オプション
824
825 @cindex backup options
826
827 GNU のプログラムの中には、ファイルの新しいバージョンを書き出す前に、
828 もしそうしたければ、バックアップを作成できるものがある (少なくとも
829 @command{cp}, @command{install}, @command{ln}, @command{mv}
830 がそうだ)。下記のオプションは、そうした
831 バックアップを細かく制御する。こうしたオプションについては、個々の
832 プログラムの説明でも簡単に触れている。
833
834 @table @samp
835
836 @item -b
837 @itemx @w{@kbd{--backup}[=@var{method}]}
838 @opindex -b
839 @opindex --backup
840 @vindex VERSION_CONTROL
841 @cindex backups, making
842 通常では上書きされたり、消去されたりする各ファイルのバックアップを
843 作成する。このオプションを指定しないと、元のバージョンは破棄される
844 わけだ。作成するバックアップのタイプを決めるには、@var{method} を使用
845 する。@var{method} を指定せずに、このオプションを使った場合は、環境変数
846 @env{VERSION_CONTROL} の値が使用される。@env{VERSION_CONTROL} が設定されて
847 いない場合、デフォルトのバックアップタイプは @samp{existing} である。
848
849 このオプションの短縮形である @option{-b} は、引数を取らないことに注意して
850 いただきたい。@option{-b} の使用は、@option{--backup=existing} を使用するのと
851 同じことである。
852
853 @vindex version-control @r{Emacs variable}
854 このオプションは、Emacs の @samp{version-control} 変数に対応している。
855 すなわち、@var{method} に指定する値は、Emacs で使用される値と同じもの
856 である。とは言え、このオプションでは、より説明的な名前も使用できる。
857 @var{method} の有効な値は、以下のものである (他と区別できるならば、省略
858 した表現も使用できる)。
859
860 @table @samp
861 @item none
862 @itemx off
863 @opindex none @r{backup method}
864 バックアップを作成しない。
865
866 @item numbered
867 @itemx t
868 @opindex numbered @r{backup method}
869 どんな場合でも番号付きのバックアップを作成する。
870
871 @item existing
872 @itemx nil
873 @opindex existing @r{backup method}
874 番号付きのバックアップがすでに存在する場合は番号付きで、それ
875 以外の場合は単純形式で、ファイルのバックアップを作成する。
876 (訳注: 単純形式というのは、バックアップファイル名に番号を付け
877 ない形式である、@option{--suffix=@var{suffix}} の説明を参照。)
878
879 @item simple
880 @itemx never
881 @opindex simple @r{backup method}
882 どんな場合でも単純形式のバックアップを作成する。@samp{never} と
883 @samp{none} を混同なさらないようにしていただきたい。
884
885 @end table
886
887 @item -S @var{suffix}
888 @itemx --suffix=@var{suffix}
889 @opindex -S
890 @opindex --suffix
891 @cindex backup suffix
892 @vindex SIMPLE_BACKUP_SUFFIX
893 @option{-b} で作成される各バックアップファイルの名前の末尾に @var{suffix} を
894 付ける。このオプションが指定されていない場合は、環境変数
895 @env{SIMPLE_BACKUP_SUFFIX} の値が使用される。@env{SIMPLE_BACKUP_SUFFIX}
896 が設定されていない場合、デフォルトの @var{suffix} は Emacs の場合と
897 同じで、チルダ @samp{~} である。
898
899 @end table
900
901 @node Block size
902 @section ブロックサイズ
903
904 @cindex block size
905
906 GNU プログラムには、ディスクの使用量を「ブロック数」で表示するものが
907 いくつかある (少なくとも、@command{df}, @command{du},@command{ls} がそうだ)。ブロックのサイズや
908 表示の書式は、使用量をわかりやすくするために、変更することができる。
909 表示に使用されるブロックサイズは、ファイルシステムのブロックサイズとは、
910 無関係である。ブロック数に端数が出る場合は、切り上げて整数にする。
911
912 @opindex --block-size=@var{size}
913 @vindex BLOCKSIZE
914 @vindex BLOCK_SIZE
915 @vindex DF_BLOCK_SIZE
916 @vindex DU_BLOCK_SIZE
917 @vindex LS_BLOCK_SIZE
918 @vindex POSIXLY_CORRECT@r{, and block size}
919
920 デフォルトのブロックサイズの選択は、次の環境変数を順番に調べることで
921 行われる。設定されている最初のものがブロックサイズを決めることになる。
922
923 @table @code
924
925 @item DF_BLOCK_SIZE
926 この環境変数は、@command{df} コマンドで使うデフォルトのブロックサイズを
927 指定している。同様に、@env{DU_BLOCK_SIZE} は @command{du} のデフォルトを、
928 @env{LS_BLOCK_SIZE} は @command{ls} のデフォルトを指定している。
929
930 @item BLOCK_SIZE
931 この環境変数は、上記のようなコマンド専用の環境変数が設定されて
932 いない場合に、三つのコマンドのすべてが使用するデフォルトの
933 ブロックサイズを指定している。
934
935 @item BLOCKSIZE
936 この環境変数は、上記のようなコマンド専用の環境変数と @env{BLOCK_SIZE}
937 のどちらも設定されていない場合に、通常、ブロック数として表示される
938 すべての値が使用するデフォルトのブロックサイズを指定している。
939 ほかの環境変数とは違って、@env{BLOCKSIZE} は、たとえば @code{ls -l} の出力に
940 含まれるファイルサイズのような、通常バイト数として表示される値には
941 影響を及ぼさない。
942
943 @item POSIXLY_CORRECT
944 @env{@var{command}_BLOCK_SIZE}, @env{BLOCK_SIZE}, @env{BLOCKSIZE} のいづれも
945 設定されていず、この変数が設定されている場合は、ブロックサイズの
946 デフォルトは、512 バイトになる。
947
948 @end table
949
950 上記の環境変数のいづれも設定されていない場合、ブロックサイズの
951 デフォルトは、現在のところたいていの場合、 1024 バイトである。ただし、
952 この数値は、将来変更されるかもしれない。なお、@command{ls} の表示するファイル
953 サイズについては、ブロックサイズのデフォルトは 1 バイトである。
954
955 @cindex human-readable output
956 @cindex SI output
957
958 ブロックサイズの指定には、1 ブロックあたりのバイト数を示す正の整数を
959 使えばよい。あるいは、@code{human-readable} や @code{si} を指定して、「人間に読み
960 やすい」書式を選ぶこともできる。整数の後ろには接尾辞 (suffix) を
961 続けてもよい。そうした接尾辞は、単位の前に付けて @samp{10} の累乗倍を表す
962 SI (国際単位系) の接頭辞 (prefix) や、@samp{2} の累乗倍を表す
963 ISO/IEC 80000-13 (以前は IEC 60027-2 だった) の接頭辞の上位互換である。
964 単位の前に付ける接頭辞については、次の URL を参照していただきたい。@*
965 @uref{http://www.bipm.org/en/publications/si-brochure/chapter3.html, SI
966 prefixes:}.
967 @uref{http://physics.nist.gov/cuu/Units/binary.html, ISO/IEC 80000-13
968 prefixes:}.
969
970 「人間に読みやすい」書式の場合、出力するサイズの後ろに、メガバイト
971 なら @samp{M} といった、大きさを表す文字が続く。@code{BLOCK_SIZE=human-readable}
972 の方は、1024 の累乗を使うので、@samp{M} は 1,048,576 バイトを意味している。
973 @code{BLOCK_SIZE=si} も似ているが、こちらは 1000 の累乗を使用し、さらに @samp{B}
974 という文字を追加する。そこで、@samp{MB} は 1,000,000 バイトを意味すること
975 になる。
976
977 @vindex LC_NUMERIC
978 ブロックサイズの指定の先頭に @samp{'} を付けると、出力するサイズを数桁
979 ごとに区切って表示することができる。区切りに使う記号や区切りの位置は、
980 @env{LC_NUMERIC} のロケールによって決まる。たとえば、アメリカ英語のロケール
981 では、@samp{--block-size="'1kB"} と指定すれば、1234000 バイトという容量が
982 @samp{1,234} と表示されることになるだろう。デフォルトの C ロケールの場合は、
983 区切り記号が存在しないので、先頭の @samp{'} に効果はない。
984
985 ブロックサイズを指定する整数の後ろには、接尾辞を付けて、その整数の
986 何倍かを示すことができる。大きさを表す (訳注: M, G などの) 文字の後ろに
987 何も続けないときや、@samp{iB} を続けるときは、1024 の累乗倍ということである。
988 それに対して、大きさを表す文字に @samp{B} を続ける場合は、1000 の累乗倍
989 ということになる。たとえば、@samp{1M} や @samp{1MiB} は @samp{1048576} と同じであり、
990 @samp{1MB} は @samp{1000000} と同じである。
991
992 整数を前に付けずに、接尾辞だけを指定したときの動作は、@samp{1} が前に
993 付いているときとほぼ同じだが、大きさの表示が出力の後ろに付く点が違う。
994 たとえば、@samp{--block-size="kB"} は、3000 を @samp{3kB} という形で表示する。
995
996 以下の接尾辞が定義されている。@code{1Y} のような大きな量は、算術計算の
997 限界のためにお使いのコンピュータでは使用できないかもしれない。
998
999 @table @samp
1000 @item kB
1001 @cindex kilobyte, definition of
1002 キロバイト (kilobyte): @math{10^3 = 1000} バイト。
1003 @item k
1004 @itemx K
1005 @itemx KiB
1006 @cindex kibibyte, definition of
1007 キビバイト (kibibyte): @math{2^{10} = 1024} バイト。@samp{K} も使えるのは、おまけ
1008 である。なお本来、SI の接頭辞 (訳注: すなわち @math{10^3} 倍を表す接頭辞)
1009 が @samp{k} であり、ISO/IEC 80000-13 の接頭辞 (訳注: すなわち @math{2^{10}} 倍を
1010 表す接頭辞) が @samp{Ki} だが、これまでの習慣や POSIX の用法では、@samp{KiB}
1011 の意味で @samp{k} を使っている。
1012 @item MB
1013 @cindex megabyte, definition of
1014 メガバイト (megabyte): @math{10^6 = 1,000,000} バイト。
1015 @item M
1016 @itemx MiB
1017 @cindex mebibyte, definition of
1018 メビバイト (mebibyte): @math{2^{20} = 1,048,576} バイト。
1019 @item GB
1020 @cindex gigabyte, definition of
1021 ギガバイト (gigabyte): @math{10^9 = 1,000,000,000} バイト。
1022 @item G
1023 @itemx GiB
1024 @cindex gibibyte, definition of
1025 ギビバイト (gibibyte): @math{2^{30} = 1,073,741,824} バイト。
1026 @item TB
1027 @cindex terabyte, definition of
1028 テラバイト (terabyte): @math{10^{12} = 1,000,000,000,000} バイト。
1029 @item T
1030 @itemx TiB
1031 @cindex tebibyte, definition of
1032 テビバイト (tebibyte): @math{2^{40} = 1,099,511,627,776} バイト。
1033 @item PB
1034 @cindex petabyte, definition of
1035 ペタバイト (petabyte): @math{10^{15} = 1,000,000,000,000,000} バイト。
1036 @item P
1037 @itemx PiB
1038 @cindex pebibyte, definition of
1039 ペビバイト (pebibyte): @math{2^{50} = 1,125,899,906,842,624} バイト。
1040 @item EB
1041 @cindex exabyte, definition of
1042 エクサバイト (exabyte): @math{10^{18} = 1,000,000,000,000,000,000} バイト。
1043 @item E
1044 @itemx EiB
1045 @cindex exbibyte, definition of
1046 エクスビバイト (exbibyte): @math{2^{60} = 1,152,921,504,606,846,976} バイト。
1047 @item ZB
1048 @cindex zettabyte, definition of
1049 ゼタバイト (zettabyte): @math{10^{21} = 1,000,000,000,000,000,000,000} バイト。
1050 @item Z
1051 @itemx ZiB
1052 ゼビバイト (zebibyte): @math{2^{70} = 1,180,591,620,717,411,303,424} バイト。
1053 @item YB
1054 @cindex yottabyte, definition of
1055 ヨタバイト (yottabyte): @math{10^{24} = 1,000,000,000,000,000,000,000,000} バイト。
1056 @item Y
1057 @itemx YiB
1058 ヨビバイト (yobibyte): @math{2^{80} = 1,208,925,819,614,629,174,706,176} バイト。
1059 @end table
1060
1061 @opindex -k
1062 @opindex -h
1063 @opindex --block-size
1064 @opindex --human-readable
1065 @opindex --si
1066
1067 デフォルトのブロックサイズは、コマンドに対して @option{--block-size=@var{size}}
1068 オプションを明示的に指定することで、上書きすることができる。@option{-k}
1069 オプションは、@option{--block-size=1K} と同じであり、環境変数 @env{POSIXLY_CORRECT}
1070 が設定されていないときのデフォルトである。@option{-h} オプションや @option{--human
1071 -readable} オプションは、@option{--block-size=human-readable} と同じである。
1072 @option{--si} オプションは、@option{--block-size=si} と同じだ。なお、@command{ls} コマンドの
1073 場合、@option{-k} オプションはファイルの見かけのサイズの表示に影響しないのに
1074 対し、@option{--block-size} オプションは影響することに注意していただきたい。
1075
1076 @node Floating point
1077 @section 浮動小数点数
1078 @cindex floating point
1079 @cindex IEEE floating point
1080
1081 浮動小数点数を受け取ったり、生成したりするコマンドは、下層で動いている
1082 システムの浮動小数点表現法を使用しており、丸めエラー、オーバーフローなど、
1083 浮動小数点にかかわる問題をかかえている。最近のシステムでは、ほとんど
1084 すべてが IEEE-754 の浮動小数点を採用しているので、今日では IEEE-754 の
1085 動作を想定しておけば、たいていどこでも問題がない。IEEE-754 には、正と負
1086 の無限があり、正と負のゼロを区別する。また、NaN (訳注: not a number)
1087 という特別な値を使って、ゼロをゼロで割るといった無効な演算を表現する。
1088 より詳しい情報については、デイビッド・ゴールドバーグの論文
1089 @uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf, "What Every Computer
1090 Scientist Should Know About Floating-Point Arithmetic"} をご覧になるとよい。
1091
1092 @vindex LC_NUMERIC
1093 浮動小数点数をオプションやオペランドや入力として受け取るコマンドは、
1094 C の標準関数 @code{strtod} や @code{strtold} を使って、テキストを浮動小数点数に
1095 変換している。従って、そうした浮動小数点数には、@code{1.0e-34} や @code{-10e100}
1096 といった指数表現が使用できる。最近の C の実装では、16 進の浮動小数点数
1097 も使える。たとえば、@code{-0x.ep-3} といったものだが、これは @minus{}14/16 掛ける
1098 @math{2^-3} を表し、@minus{}0.109375 に等しい。小数点を表す記号が何になるかは、
1099 @env{LC_NUMERIC} のロケールによって決まる。@xref{Parsing of Floats,,, libc, The GNU C
1100 Library Reference Manual}.
1101
1102 @node Signal specifications
1103 @section シグナルの指定
1104 @cindex signals, specifying
1105
1106 @var{signal} の指定には、@samp{HUP} のようなシグナル名や @samp{1} のようなシグナル番号、
1107 それに、シグナルによって終了させられるときのプロセスの終了ステータスを
1108 使うことができる (訳注: 最後のものは、GNU coreutils の @command{kill} コマンド
1109 では使用できるが、シェルの組み込みコマンドのような、他の系統の @command{kill}
1110 では使えないかもしれない)。シグナル名は、標準的な形式でも、頭に @samp{SIG}
1111 を付けた形式でも構わない。大文字小文字は区別されない。以下に挙げる
1112 シグナル名とシグナル番号は、POSIX の規格に従っているすべてのシステムで
1113 使用できる。
1114
1115 @table @samp
1116 @item HUP
1117 1.  ハングアップ (Hangup)。
1118 @item INT
1119 2.  端末からの割り込みシグナル (Terminal interrupt)。
1120 @item QUIT
1121 3.  端末からの中止シグナル (Terminal quit)。
1122 @item ABRT
1123 6. プロセスの中断 (Process abort)。
1124 @item KILL
1125 9.  強制終了 (Kill) (捕獲することも無視することもできない)。
1126 @item ALRM
1127 14.  アラームクロック (Alarm Clock)。
1128 @item TERM
1129 15.  終了 (Termination)。
1130 @end table
1131
1132 @noindent
1133 これ以外にもサポートされているシグナル名があるが、それに対応する
1134 シグナル番号はシステムによって様々である。POSIX 1003.1-2001
1135 に準拠しているすべてのシステムでは、以下のシグナルも使用できる。
1136
1137 @table @samp
1138 @item BUS
1139 メモリオブジェクトの未定義領域へのアクセス。
1140 @item CHLD
1141 チャイルドプロセスが終了 (terminate)、一時停止 (stop)、または再開 (continue) した。
1142 @item CONT
1143 実行が停止 (stop) しているならば、再開 (continue) する。
1144 @item FPE
1145 誤った算術演算。
1146 @item ILL
1147 不正な命令。
1148 @item PIPE
1149 読み手のないパイプへの書き出し。
1150 @item SEGV
1151 無効なメモリ参照。
1152 @item STOP
1153 実行を一時停止する (stop) (捕獲することも無視することもできない)。
1154 @item TSTP
1155 端末からの一時停止シグナル。
1156 @item TTIN
1157 バックグラウンドプロセスが端末から読み込もうとしている。
1158 @item TTOU
1159 バックグラウンドプロセスが端末へ書き出そうとしている。
1160 @item URG
1161 高帯域幅のデータがソケットに達している。
1162 @item USR1
1163 ユーザ定義シグナル 1。
1164 @item USR2
1165 ユーザ定義シグナル 2。
1166 @end table
1167
1168 @noindent
1169 XSI 拡張に対応している POSIX 1003.1-2001 のシステムでは、以下の
1170 シグナルも使用できる。
1171
1172 @table @samp
1173 @item POLL
1174 ポーリング可能なイベント。
1175 @item PROF
1176 プロファイリング・タイマーがタイムアウトした。
1177 @item SYS
1178 不正なシステムコール。
1179 @item TRAP
1180 Trace/breakpoint トラップ。
1181 @item VTALRM
1182 バーチャル・タイマーがタイムアウトした。
1183 @item XCPU
1184 CPU 時間の上限を超過した。
1185 @item XFSZ
1186 ファイルサイズの上限を超過した。
1187 @end table
1188
1189 @noindent
1190 XRT 拡張に対応している POSIX 1003.1-2001 のシステムでは、上記以外にも、
1191 少なくとも 8 個のリアルタイム・シグナルが使用できる。すなわち、@samp{RTMIN},
1192 @samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX} などだ。
1193
1194 @node Disambiguating names and IDs
1195 @section chown と chgrp: ユーザ名かユーザ ID かを明確にする
1196 @cindex user names, disambiguating
1197 @cindex user IDs, disambiguating
1198 @cindex group names, disambiguating
1199 @cindex group IDs, disambiguating
1200 @cindex disambiguating group names and IDs
1201
1202 @command{chown} や @command{chgrp} コマンドでは、引数として @var{owner} や @var{group}
1203 を渡す際に
1204 名前で指定しても、ID 番号で指定してもよい。この指定法が曖昧であること
1205 は明らかである。もし、ユーザ名やグループ名が数字の連続だったら、どう
1206 だろう? @footnote{環境によっては、ユーザ名に数字を使うのは、よくあることである。}
1207 コマンドはそれをユーザ名と解釈すべきだろうか? ID 番号と
1208 解釈すべきだろうか? POSIX では、「@command{chown} や @command{chgrp} は、指定された
1209 文字列をまず名前として解決することを試み、それに失敗した場合のみ、ID
1210 番号として解釈しようとすること」と規定している。この規定では、ユーザが
1211 引数として ID 番号、たとえば 42 を指定しようとすると、厄介なことになる。
1212 42 というユーザ名が存在し、それにユーザ ID として別の数字、たとえば
1213 1000 が割り当てられているといったややこしい状況でも、うまく処理でき
1214 なければならないとすると、困ったことになるのだ。単に @code{chown 42 F} を
1215 実行したのでは、ファイル @file{F} の所有者の ID 番号が 1000 になってしまう。
1216 これはユーザが意図した動作ではない。
1217
1218 GNU の @command{chown} や @command{chgrp} は、この問題に対する回避策を提供している。
1219 この回避策を使用すると、データベースの検索を省略するので、処理速度が
1220 著しく向上することがあるというおまけまである。ユーザ ID 番号やグループ
1221 ID 番号を指定する際には、その前に @samp{+} を付けさえすればよいのだ。そうする
1222 ことで、整数として解釈するように強制できるのである。
1223
1224 @example
1225 chown +42 F
1226 chgrp +$numeric_group_id another-file
1227 chown +0:+0 /
1228 @end example
1229
1230 GNU の @command{chown} や @command{chgrp} は、@samp{+} が前に付く各文字列に対してユーザ名
1231 の検索プロセスを省略する。何故なら、@samp{+} を含む文字列が有効なユーザ名や
1232 グループ名であることは絶対にないからだ。この書き方は、よく使われている
1233 たいていの Unix システムで使用できるが、Solaris 10 では使用できない。
1234
1235 @node Random sources
1236 @section ランダムデータのソース
1237
1238 @cindex random sources
1239
1240 @command{shuf}, @command{shred}, @command{sort} コマンドは、作業を行うためにランダムデータを
1241 必要とすることがある。たとえば、@samp{sort -R} ではハッシュ関数をランダムに
1242 選ばねばならず、その選択のためにランダムデータを必要としている。
1243
1244 デフォルトでは、こうしたコマンドは、プログラム内部の擬似乱数ジェネ
1245 レータを、少量のエントロピーによって初期化して使用するが、
1246 @option{--random-source=@var{file}} オプションで、外部ソースを使うように指示すること
1247 も可能だ。@var{file} の中身のバイト数が不十分なときは、エラーが通知される。
1248
1249 たとえば、デバイスファイル @file{/dev/urandom} を、ランダムデータのソース
1250 として使用してもよい。通常、このデバイスは、デバイスドライバーなどのソース
1251 から環境ノイズを集めて、エントロピー・プールに入れ、そのプールを使って、
1252 ランダムなビットを生成する。プールにデータが足りない場合は、内部プールを
1253 再利用し、暗号的に安全な擬似乱数ジェネレータを使って、より多くのビットを
1254 作り出す。とは言え、このデバイスは、大量のランダムデータの生成のために
1255 設計されたものではなく、比較的動作が遅いことは、承知しておいた方がよい。
1256
1257 たいていの実用には、@file{/dev/urandom} で十分だが、プライベートなデータの
1258 高度で長期に渡る保護が必要になるアプリケーションでは、@file{/dev/random} や
1259 @file{/dev/arandom} のような他のデータソースが必要になるかもしれない。どんな
1260 データソースが利用できるかは、ご使用のオペレーティング・システム次第である。
1261
1262 前回コマンドを実行したときの結果を再現するには、何らかのランダム
1263 データをファイルに保存しておき、そのコマンドの一回目の実行でも二回目
1264 の実行でも、ランダムソースとしてそのファイルを使用すればよい。
1265
1266 @node Target directory
1267 @section 出力先ディレクトリ
1268
1269 @cindex target directory
1270
1271 通常、@command{cp}, @command{install}, @command{ln}, @command{mv}
1272 といったコマンドは、最後のオペランドが
1273 ディレクトリやディレクトリへのシンボリックリンクの場合、それを特別
1274 扱いする。たとえば、@samp{cp source dest} は、@file{dest} がディレクトリならば、
1275 @samp{cp source dest/source} と同じことである。時には、そうした動作が、
1276 ユーザが求めている動作とは違うこともある。そこで、こうしたコマンドは、
1277 よりきめ細かな制御ができるように、以下のオプションをサポートしている。
1278
1279 @table @samp
1280
1281 @item -T
1282 @itemx --no-target-directory
1283 @opindex --no-target-directory
1284 @cindex target directory
1285 @cindex destination directory
1286 最後のオペランドが、ディレクトリやディレクトリへのシンボリック
1287 リンクであっても、それを特別扱いしない。このオプションは、共有領域
1288 で作業する複数のプログラムが、競合状態にならないようにしてくれる。
1289 たとえば、@samp{mv /tmp/source /tmp/dest} というコマンドが正常終了して
1290 も、@file{/tmp/source} が @file{/tmp/dest} にリネームされたという保証はない。
1291 もし、何かほかのプロセスが @file{/tmp/dest} をディレクトリとして作成して
1292 いたら、@file{/tmp/dest/source} という名前のファイルになってしまうかも
1293 しれないのだ。それに対して、@file{mv -T /tmp/source /tmp/dest} が正常
1294 終了した場合は、@file{/tmp/source} は間違いなく @file{/tmp/dest} にリネーム
1295 されている。
1296
1297 反対に、最後のオペランドをディレクトリとして扱わせたい、それが
1298 できない場合は、エラーメッセージを出したい、ということもある。
1299 そういうときは、@option{--target-directory} (@option{-t}) オプションを使用すれば
1300 よい。(訳注: ターゲット・ディレクトリをコマンドラインの最後に置く
1301 代わりに、@option{--target-directory} オプションの引数にするということ
1302 である。)
1303
1304 @item -t @var{directory}
1305 @itemx @w{@kbd{--target-directory}=@var{directory}}
1306 @opindex --target-directory
1307 @cindex target directory
1308 @cindex destination directory
1309 @var{directory} を、出力されるファイルすべてのディレクトリ部分として
1310 使用する。
1311
1312 ほとんどのプログラムで、コマンドラインの扱いは次のようになって
1313 いる。オプションや、一定数の (0 個のこともある) 位置の固定した
1314 引数の処理が終われば、引数リストにはもう何も残っていないか、
1315 残っているとすれば、それはすべて同じように処理されることになる
1316 項目 (通常はファイル) のリストのはずある。@command{xargs} プログラムは、
1317 こうした約束ごとに沿ってうまく動くように作られている。
1318
1319 @command{mv} ファミリーのコマンドが変わっているのは、引数の数が不定であり、
1320 しかも最後の引数を特別扱いするという点である (すなわちターゲット・
1321 ディレクトリとして扱う)。そのため、ある種の作業の実行は、一筋縄では
1322 いかない。たとえば、「すべてのファイルをここから ../d/ に移動する」
1323 がそうだ。何故なら、@code{mv * ../d/} では、引数を入れておくための領域を
1324 使い切ってしまうかもしれないし、そうかと言って、@code{ls | xargs ...}
1325 には、実行対象コマンド (訳注: ここでは、@command{mv}) を起動するたびに
1326 最後の引数を特別に指定するためのすっきりした方法がないからである。
1327 (あるシェル・コマンドを駆使すれば、やることができるが、それでは、
1328 人間の労力と脳力を過当に要求することになる。)
1329
1330 @w{@kbd{--target-directory}} (@option{-t}) オプションを使用すると、@command{cp},
1331 @command{mv},
1332 @command{ln}, @command{install} といったプログラムを @command{xargs} と一緒に使うとき、
1333 たいへん都合がよい。たとえば、カレントディレクトリから、同じディ
1334 レクトリ階層にある  @code{d} ディレクトリへファイルを移動するには、
1335 こんなふうにすればよい。
1336
1337 @smallexample
1338 ls | xargs mv -t ../d --
1339 @end smallexample
1340
1341 しかし、これでは、ファイル名の先頭に @samp{.} の付くファイルが移動しな
1342 い。GNU @command{find} プログラムを使用しているなら、次のコマンドでそうした
1343 ファイルも移動させることができる。
1344
1345 @example
1346 find . -mindepth 1 -maxdepth 1 \
1347   | xargs mv -t ../d
1348 @end example
1349
1350 とは言え、上記のどちらの方法も、カレントディレクトリにファイルが
1351 一つもない場合や、空白などの特殊文字を名前に含むファイルがある場合
1352 には、うまく行かない。次の例はそうした制限を一掃しているが、GNU
1353 @command{find} と GNU @command{xargs} の両方が必要である。
1354
1355 @example
1356 find . -mindepth 1 -maxdepth 1 -print0 \
1357   | xargs --null --no-run-if-empty \
1358       mv -t ../d
1359 @end example
1360
1361 @end table
1362
1363 @noindent
1364 @option{--target-directory} (@option{-t}) オプションと
1365 @option{--no-target-directory} (@option{-T}) オプションを一緒に使うことはできない。
1366
1367 @node Trailing slashes
1368 @section 末尾のスラッシュ
1369
1370 @cindex trailing slashes
1371
1372 いくつかの GNU プログラム (少なくとも、@command{cp} と @command{mv}) では、@var{source} 引数を
1373 処理する前に、その引数の末尾にスラッシュが付いていたら、それを除去する
1374 ことができるようになっている。@w{@kbd{--strip-trailing-slashes}} オプションを
1375 使用することによって、この動作が有効になる。
1376
1377 @c FIXME: mv's behavior in this case is system-dependent
1378 これが役に立つのは、@var{source} 引数の末尾にスラッシュが付いていて、
1379 しかも、その引数がディレクトリへのシンボリックリンクを指定している
1380 かもしれないときだ。そうした状況は、実のところ、それほど珍しくない。
1381 と言うのも、シェルの中には、そうしたシンボリックリンクに対して
1382 ファイル名の補完を行うとき、末尾にスラッシュを自動的に付加するものが
1383 あるからだ。このオプションを指定しないと、たとえば @command{mv} は、(システムの
1384 rename 関数を通してだが、) 末尾にスラッシュが付いていることを、「シン
1385 ボリックリンクの参照をたどれ」という指示として解釈しなければならず、
1386 その結果、シンボリックリンクではなく、間接的に参照されているディレク
1387 トリの方をリネームしなければならなくなる。こうした動作がデフォルトに
1388 なっているのは意外に思えるかもしれないが、POSIX で要求されている動作
1389 であり、POSIX 規格のほかの部分とも首尾一貫している。
1390
1391 @node Traversing symlinks
1392 @section シンボリックリンクをたどる
1393
1394 @cindex symbolic link to directory, controlling traversal of
1395
1396 @c FIXME: note that 'du' has these options, too, but they have slightly
1397 @c different meaning.
1398 以下のオプションは、@option{--recursive} (@option{-R}) オプションも同時に指定されて
1399 いるとき、@command{chown} コマンドや @command{chgrp} コマンドがディレクトリ階層をどう
1400 たどるか、そのたどり方を変更する。以下のオプションを複数個指定した
1401 場合は、最後に指定したものだけが効果を持つ。こうしたオプションが指定
1402 しているのは、ディレクトリに対するシンボリックリンクを処理する際に、
1403 そのシンボリックリンクそのものを操作の対象にするのか、それとも、その
1404 ディレクトリ以下の階層にあるすべてのファイルを操作の対象にするのかと
1405 いうことである。
1406
1407 こうしたオプションは、@option{--dereference} や @option{--no-dereference} (@option{-h})
1408 とは、全く別のものである。あちらは、シンボリックリンクを変更するのか、
1409 それとも、その参照先を変更するのかを制御している。
1410
1411 @table @samp
1412
1413 @macro choptH
1414 @item -H
1415 @opindex -H
1416 @cindex symbolic link to directory, traverse if on the command line
1417  @option{--recursive} (@option{-R}) オプションが指定されている場合に、コマンド
1418 ラインで指定された引数がディレクトリへのシンボリックリンクならば、
1419 それをたどる。
1420 @end macro
1421 @choptH
1422
1423 @macro choptL
1424 @item -L
1425 @opindex -L
1426 @cindex symbolic link to directory, traverse each that is encountered
1427 ディレクトリ階層を再帰的にたどっている際に、ディレクトリへのシンボ
1428 リックリンクに出会ったら、必ずそれをたどる。
1429 @end macro
1430 @choptL
1431
1432 @macro choptP
1433 @item -P
1434 @opindex -P
1435 @cindex symbolic link to directory, never traverse
1436 シンボリックリンクを一切たどらない。これが、@option{-H}, @option{-L}, @option{-P} の
1437 どれも指定されていないときの、デフォルトである。
1438 @end macro
1439 @choptP
1440
1441 @end table
1442
1443
1444 @node Treating / specially
1445 @section @file{/} (ルート) を特別扱いする
1446
1447 ある種のコマンドは、ディレクトリ階層全体に対して破壊的な作用を及ぼす
1448 可能性がある。たとえば、しかるべき特権を持ったユーザが、間違えて
1449 @samp{rm -rf / tmp/junk} を実行したら、システム全体のすべてのファイルが消えて
1450 しまうかもしれないのだ。そうしたコマンドの使用が正当であることは、
1451 めったにないので、GNU の @command{rm} は、@file{/} に還元されるようないかなる
1452 ディレクトリに対しても、通常では、操作を拒否するようになっている。
1453 もし、本当にシステムのすべてのファイルを消去しようと思うのなら、
1454 @option{--no-preserve-root} オプションを使用すればよい。とは言え、ほとんどの
1455 用途で、デフォルトの動作 (明示的に指定するには、@option{--preserve-root}
1456 オプションを使う) の方が安全である。
1457
1458 @command{chgrp}, @command{chmod}, @command{chown} などのコマンドも、ディレクトリ階層全体に
1459 対して破壊的な作用を及ぼす可能性がある。従って、こうしたコマンドもまた、
1460 上記のオプションをサポートしている。こうしたコマンドは、@command{rm} とは
1461 違って、ファイルを実際に削除してしまうわけではないが、@file{/} から再帰的に
1462 働くときは、一層危険だと言うこともできる。と言うのは、たいていの場合、
1463 処理速度がずっと早いので、注意力のあるユーザがコマンドを中断できるより
1464 前に、@command{rm} の場合より、もっと多くのファイルに被害を与えてしまうからだ。
1465 Unix の習慣も POSIX の規格も、こうしたコマンドが @file{/} から再帰的に働く
1466 ことを要求している。それ故、デフォルトが @option{--no-preserve-root} になって
1467 いるのだが、こうしたコマンドは、@option{--preserve-root} オプションを使った方
1468 が、ほとんどの用途でより安全である。面倒ならば、エイリアスか、シェル関数
1469 を作って、@option{--preserve-root} を指定しておけばよいのだ。
1470
1471 また、@option{--preserve-root} を指定すると、@file{/} を指しているシンボリック
1472 リンクの参照をたどる場合でも、@command{chgrp} や @command{chown} が、@file{/} のグループや
1473 所有者を変更しなくなることも、憶えておいていただきたい。(訳注: @command{chgrp}
1474 や @command{chown} の解説を見ていただけばわかるが、これは、@option{--recursive} (@option{-R})
1475 を同時に使っているときの話である。)
1476
1477 @node Special built-in utilities
1478 @section 特殊ビルトイン・ユーティリティ
1479
1480 プログラムの中には、@command{nice} のように、ほかのプログラムを起動できるものが
1481 ある。たとえば、@samp{nice cat file} というコマンドは、コマンド @samp{cat file} を
1482 実行することによって、@command{cat} プログラムを起動する。しかしながら、@command{exit}
1483 のような特殊ビルトイン・ユーティリティ (@dfn{special built-in utilities})
1484 は、この方法で起動することができない。一例を挙げれば、@samp{nice exit} と
1485 いうコマンドは、どんな動作をするかが明確に定義されていない。終了する
1486 代わりに、エラーメッセージを出すかもしれないのだ。
1487
1488 POSIX 1003.1-2004 の規格では、特殊ビルトイン・ユーティリティとして
1489 次のものを挙げている。
1490
1491 @quotation
1492 @t{.@: : break continue eval exec exit export readonly return set shift times
1493 trap unset}
1494 @end quotation
1495
1496 たとえば、@samp{.}, @samp{:}, @samp{exec} は、特殊ビルトイン・ユーティリティなので、
1497 @samp{nice . foo.sh}, @samp{nice :}, @samp{nice exec pwd} といったコマンドの動作は、
1498 読者が予想なさるかもしれないようなものにはならない。
1499 @sp 1
1500 (訳注: exec, exit など対して、同じシェルの組み込みコマンドでも、cd,
1501 alias, fg, kill, pwd, true, umask などは、通常ビルトイン・ユーティリティ
1502 ("regular built-in utilities") と呼ばれている。もっとも、nice などから
1503 実行できないという点では、特殊ビルトイン・ユーティリティも通常ビルト
1504 イン・ユーティリティも変わりがない。nice などから起動できるとすれば、
1505 それは同名の実行ファイルが存在するからだ)。
1506
1507 多くのシェルは、上記のリストを拡張している。たとえば、bash では、
1508 @command{history} や @command{suspend} といったコマンドが特殊ビルトイン・ユーティリティ
1509 に追加されている。そこで、bash の場合、@samp{nice suspend} というコマンドを
1510 実行すると、シェルのサスペンドは起こらず、エラーメッセージが出力される。
1511
1512 @node Standards conformance
1513 @section 規格への準拠
1514
1515 @vindex POSIXLY_CORRECT
1516 GNU ユーティリティのデフォルトの動作が POSIX の規格と一致しない場合
1517 が、若干ながら存在する。そうした非互換性を抑制するには、環境変数
1518 @env{POSIXLY_CORRECT} を設定すればよい。もっとも、POSIX に準拠しているか
1519 否かを点検しているのでもないかぎり、@env{POSIXLY_CORRECT} を設定する必要は、
1520 おそらくないだろうが。
1521
1522 POSIX の新しいバージョンが、古いバージョンと非互換であることが、
1523 ときどきある。たとえば、POSIX の昔のバージョンでは、@samp{sort +1} という
1524 コマンドは、各入力行の二番目以後のフィールドに基づいて、行の並べ替えを
1525 行うことになっていた。ところが、POSIX 1003.1-2001 以降では、同じコマンド
1526 が @file{+1} という名前のファイルの行を並べ替えることになっている。そこで、
1527 フィールドに基づいた並べ替えを行うには、@samp{sort -k 2} という別のコマンド
1528 を使わなければならないのだ。
1529
1530 @vindex _POSIX2_VERSION
1531 通常 GNU のユーティリティは、お使いのシステムが規格として採用して
1532 いる POSIX のバージョンに従っている。GNU ユーティリティを POSIX の別の
1533 バージョンに準拠させるには、環境変数 @env{_POSIX2_VERSION} を設定すれば
1534 よい。この環境変数の値は、@var{yyyymm} という形式であり、その規格が何年の
1535 何月に採択されたかを示している。@env{_POSIX2_VERSION} の値としては、現在
1536 のところ、次の三つがサポートされている。すなわち、@samp{199209}, @samp{200112},
1537 @samp{200809} であり、それぞれ POSIX 1003.2-1992, POSIX 1003.1-2001, POSIX
1538 1003.1-2008 を表している。一例を挙げよう。使っているシステムが比較的
1539 新しいのに、動かしているソフトウェアが POSIX の昔のバージョンを前提と
1540 していて、@samp{sort +1} や @samp{tail +10} を使用している場合は、環境に
1541 @samp{_POSIX2_VERSION=199209} を設定することで、互換性の問題を回避する
1542 ことができる。
1543
1544 @node Output of entire files
1545 @chapter ファイル全体の出力
1546
1547 @cindex output of entire files
1548 @cindex entire files, output of
1549
1550 次のコマンドはファイル全体を読み込んで、書き出す。内容に対して何らかの
1551 変換を行うこともある。
1552
1553 @menu
1554 * cat invocation::           ファイルを結合して、書き出す。
1555 * tac invocation::           ファイルを結合し、ファイルごとに逆順で書き出す。
1556 * nl invocation::            行番号を付けて、ファイルを書き出す。
1557 * od invocation::            ファイルを 8 進数などの形式で書き出す。
1558 * base64 invocation::        データを ASCII 文字で表示可能なデータに変換する。
1559 @end menu
1560
1561 @node cat invocation
1562 @section @command{cat}: ファイルを結合して、書き出す
1563
1564 @pindex cat
1565 @cindex concatenate and write files
1566 @cindex copying files
1567
1568 @command{cat} は、各 @var{file} (@samp{-} は標準入力を意味する) を標準出力にコピーする。
1569 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1570 @sp 1
1571 書式:
1572
1573 @example
1574 cat [@var{option}] [@var{file}]@dots{}
1575 @end example
1576
1577 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1578
1579 @table @samp
1580
1581 @item -A
1582 @itemx --show-all
1583 @opindex -A
1584 @opindex --show-all
1585 @option{-vET} と同じ。
1586
1587 @item -b
1588 @itemx --number-nonblank
1589 @opindex -b
1590 @opindex --number-nonblank
1591 空行以外のすべての出力行に、1 から始まる番号を付ける。
1592
1593 @item -e
1594 @opindex -e
1595 @option{-vE} と同じ。
1596
1597 @item -E
1598 @itemx --show-ends
1599 @opindex -E
1600 @opindex --show-ends
1601 各行の末尾に @samp{$} 記号を付ける。
1602
1603 @item -n
1604 @itemx --number
1605 @opindex -n
1606 @opindex --number
1607 すべての出力行に、1 から始まる番号を付ける。このオプションは、@option{-b}
1608 が有効になっているときは、無視される。
1609
1610 @item -s
1611 @itemx --squeeze-blank
1612 @opindex -s
1613 @opindex --squeeze-blank
1614 @cindex squeezing empty lines
1615 連続する空行の表示を抑制する。すなわち、連続する複数の空行の代わりに、
1616 たった 1 行だけ空行を出力する。
1617
1618 @item -t
1619 @opindex -t
1620 @option{-vT} と同じ。
1621
1622 @item -T
1623 @itemx --show-tabs
1624 @opindex -T
1625 @opindex --show-tabs
1626 TAB 文字を @samp{^I} と表示する。
1627
1628 @item -u
1629 @opindex -u
1630 無視される。POSIX との互換のためにある。
1631
1632 @item -v
1633 @itemx --show-nonprinting
1634 @opindex -v
1635 @opindex --show-nonprinting
1636 LFD と TAB 以外の制御文字を @samp{^} 表記を使って表示する。高位ビットの
1637 セットされている文字の前には、@samp{M-} を付ける。
1638
1639 @end table
1640
1641 テキストファイルとバイナリファイルを区別する MS-DOS のようなシステム
1642 では、@command{cat} は通常、バイナリモードで読み書きを行う。しかしながら、
1643 @option{-bensAE} といったオプションの一つが使われている場合や、読み込みの
1644 対象が標準入力で、しかも、標準入力が端末である場合は、@command{cat} はテキスト
1645 モードで読み込みを行う。同様に出力においても、@option{-bensAE} といったオプ
1646 ションの一つが使用されていたり、標準出力が端末である場合は、@command{cat} は
1647 テキストモードで書き出しを行う。
1648
1649 @exitstatus
1650
1651 用例:
1652
1653 @smallexample
1654 # f の内容、標準入力、g の内容の順で出力する。
1655 cat f - g
1656
1657 # 標準入力を標準出力にコピーする。
1658 cat
1659 @end smallexample
1660
1661
1662 @node tac invocation
1663 @section @command{tac}: ファイルを結合し、ファイルごとに逆順で書き出す
1664
1665 @pindex tac
1666 @cindex reversing files
1667
1668 @command{tac} は、各 @var{file} (@samp{-} は標準入力を意味する) を、@var{file} ごとにレコード
1669 (records、デフォルトでは行) の順番を逆にして、標準出力にコピーする。
1670 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1671 @sp 1
1672 書式:
1673
1674 @example
1675 tac [@var{option}]@dots{} [@var{file}]@dots{}
1676 @end example
1677
1678 レコード (@dfn{records}) は、ある文字列 (デフォルトでは改行) が出現する
1679 ことによって区切られる。出力の際、デフォルトでは、この区切り文字列は、
1680 ファイル中でその区切り文字列の直前にあるレコードの末尾に付加される。
1681
1682 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1683
1684 @table @samp
1685
1686 @item -b
1687 @itemx --before
1688 @opindex -b
1689 @opindex --before
1690 出力の際、区切り文字列は、ファイル中でその区切り文字列の直後に来る
1691 レコードの先頭に付加される。
1692
1693 @item -r
1694 @itemx --regex
1695 @opindex -r
1696 @opindex --regex
1697 区切り文字列を正規表現として処理する。
1698
1699 @item -s @var{separator}
1700 @itemx --separator=@var{separator}
1701 @opindex -s
1702 @opindex --separator
1703 改行の代わりに、@var{separator} をレコード区切り文字列 (record separator)
1704 として使用する。
1705
1706 @end table
1707
1708 テキストファイルとバイナリファイルを区別する MS-DOS のようなシステム
1709 では、@command{tac} はバイナリモードで読み書きを行う。
1710
1711 @exitstatus
1712
1713 用例:
1714
1715 @example
1716 # ファイルを一字一字逆にする。
1717 tac -r -s 'x\|[^x]'
1718 @end example
1719
1720
1721 @node nl invocation
1722 @section @command{nl}: 行番号を付けて、ファイルを書き出す
1723
1724 @pindex nl
1725 @cindex numbering lines
1726 @cindex line numbering
1727
1728 @command{nl} は、各 @var{file} (@samp{-} は標準入力を意味する) を、全部の行、または、
1729 一部の行に行番号を付けて、標準出力に書き出す。@var{file} が一つも指定されて
1730 いない場合は、標準入力から読み込む。
1731 @sp 1
1732 書式:
1733
1734 @example
1735 nl [@var{option}]@dots{} [@var{file}]@dots{}
1736 @end example
1737
1738 @cindex logical pages, numbering on
1739 @command{nl} は、入力されたものを (論理) ページに分解する。デフォルトでは、
1740 行番号は各論理ページの先頭で 1 にリセットされる。@command{nl} は、すべての
1741 入力ファイルをまとめて、一つのドキュメントとして扱う。従って、入力
1742 ファイルが変わるたびに、論理ページや行番号がリセットされることはない。
1743
1744 @cindex headers, numbering
1745 @cindex body, numbering
1746 @cindex footers, numbering
1747 論理ページは、三つのセクションからなる。すなわち、ヘッダ、本文、
1748 フッタである。どのセクションも空であって構わない。セクションごとに
1749 他のセクションとは異なる番号付けの方式を選ぶこともできる。
1750
1751 入力ファイル中で論理ページの各セクションが始まる位置を指示するには、
1752 以下の区切り文字列の一つのみからなる行を使用する。
1753
1754 @table @samp
1755 @item \:\:\:
1756 ヘッダの先頭。
1757 @item \:\:
1758 本文の先頭。
1759 @item \:
1760 フッタの先頭。
1761 @end table
1762
1763 上記の文字列を構成する二文字は、オプションを使って (下記参照)、@samp{\}
1764 と @samp{:} の組み合わせ以外のものに、変更することができる。だが、各文字列
1765 のパターンや長さは、変えることができない。
1766
1767 セクションの区切りは、出力では空行に置き換えられる。入力ファイル中の
1768 最初のセクション区切り文字列より前にあるテキストは、いかなるテキストも、
1769 本文セクションの一部と見なされる。従って、@command{nl} は、セクションの区切りを
1770 全く含まないファイルを、一個の本文セクションとして扱う。
1771
1772 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1773
1774 @table @samp
1775
1776 @item -b @var{style}
1777 @itemx --body-numbering=@var{style}
1778 @opindex -b
1779 @opindex --body-numbering
1780 各論理ページの本文セクションにおける行の番号付けの方式を選択する。
1781 行に番号が付かない場合、行番号の現在値は増加しないが、それでも
1782 行番号の区切り文字は行の前に付く (訳注: ここで言う行番号の区切り
1783 文字 (line number separator character) とは、行番号とテキストの
1784 区切り文字ではなく、行番号を揃えるために行頭と行番号との間に
1785 置かれる空白のことらしい)。番号付けの方式には、以下のものがある。
1786
1787 @table @samp
1788 @item a
1789 すべての行に番号を振る。
1790 @item t
1791 空ではない行にのみ番号を振る (本文のデフォルト)。
1792 @item n
1793 行番号を付けない (ヘッダとフッタのデフォルト)。
1794 @item p@var{bre}
1795 基本正規表現 @var{bre} にマッチする部分を含む行にのみ番号を振る。
1796 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep
1797 Manual}.
1798 @end table
1799
1800 @item -d @var{cd}
1801 @itemx --section-delimiter=@var{cd}
1802 @opindex -d
1803 @opindex --section-delimiter
1804 @cindex section delimiters of pages
1805 セクションの区切り文字を @var{cd} にする。デフォルトは @samp{\:}。@var{c} のみを指定
1806 すると、二番目の文字は、デフォルトと同じ @samp{:} になる。(@samp{\} などの
1807 メタ文字は、シェルが展開しないように、引用符やバックスラッシュで保護
1808 するのをお忘れなく。)
1809
1810 @item -f @var{style}
1811 @itemx --footer-numbering=@var{style}
1812 @opindex -f
1813 @opindex --footer-numbering
1814 @option{--body-numbering} と同様。
1815
1816 @item -h @var{style}
1817 @itemx --header-numbering=@var{style}
1818 @opindex -h
1819 @opindex --header-numbering
1820 @option{--body-numbering} と同様。
1821
1822 @item -i @var{number}
1823 @itemx --line-increment=@var{number}
1824 @opindex -i
1825 @opindex --line-increment
1826 行番号を @var{number} づつ増やす (デフォルトは 1)。
1827
1828 @item -l @var{number}
1829 @itemx --join-blank-lines=@var{number}
1830 @opindex -l
1831 @opindex --join-blank-lines
1832 @cindex empty lines, numbering
1833 @cindex blank lines, numbering
1834 空行にも番号を付けるとき、連続する @var{number} (デフォルトは 1) 行の
1835 空行を 1 論理行と数え、最後の空行にのみ番号を振る。連続する空行が
1836 @var{number} 行未満のときは、番号を振らない。空行というのは、文字を全く
1837 含まない、スペースやタブさえも含まない行のことである。
1838
1839 @item -n @var{format}
1840 @itemx --number-format=@var{format}
1841 @opindex -n
1842 @opindex --number-format
1843 行番号付けのフォーマットを選択する (デフォルトは @code{rn})。
1844
1845 @table @samp
1846 @item ln
1847 @opindex ln @r{format for @command{nl}}
1848 左詰めにする。先頭を 0 で埋めない。
1849 @item rn
1850 @opindex rn @r{format for @command{nl}}
1851 右詰めにする。先頭を 0 で埋めない。
1852 @item rz
1853 @opindex rz @r{format for @command{nl}}
1854 右詰めにする。先頭を 0 で埋める。
1855 @end table
1856
1857 @item -p
1858 @itemx --no-renumber
1859 @opindex -p
1860 @opindex --no-renumber
1861 論理ページの先頭で行番号をリセットしない。
1862
1863 @item -s @var{string}
1864 @itemx --number-separator=@var{string}
1865 @opindex -s
1866 @opindex --number-separator
1867 出力中で行番号とテキスト部分との区切りに @var{string} を使う (デフォルト
1868 はタブ文字)。
1869
1870 @item -v @var{number}
1871 @itemx --starting-line-number=@var{number}
1872 @opindex -v
1873 @opindex --starting-line-number
1874 論理ページごとに行番号を @var{number} から始める (デフォルトは 1)。
1875
1876 @item -w @var{number}
1877 @itemx --number-width=@var{number}
1878 @opindex -w
1879 @opindex --number-width
1880 行番号に  @var{number} 個の文字を使用する (デフォルトは 6 文字)。
1881
1882 @end table
1883
1884 @exitstatus
1885
1886
1887 @node od invocation
1888 @section @command{od}: ファイルを 8 進数などの形式で書き出す
1889
1890 @pindex od
1891 @cindex octal dump of files
1892 @cindex hex dump of files
1893 @cindex ASCII dump of files
1894 @cindex file contents, dumping unambiguously
1895
1896 @command{od} は、各 @var{file} (@samp{-} は標準入力を意味する) の内容を、曖昧さの余地がない
1897 形で標準出力に書き出す。@var{file} が一つも指定されていない場合は、標準入力
1898 から読み込む。
1899 @sp 1
1900 書式:
1901
1902 @smallexample
1903 od [@var{option}]@dots{} [@var{file}]@dots{}
1904 od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]]
1905 od [@var{option}]@dots{} --traditional [@var{file}]@c
1906  [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1907 @end smallexample
1908
1909 各出力行の構成は、入力中の位置をオフセットで表したものの後に、
1910 ファイルのデータをいくつかのまとまりに分けたものが続くという形に
1911 なっている。デフォルトでは、@command{od} はオフセットを 8 進数で表示する。
1912 ファイル・データの個々のまとまりは、入力を C 言語の @code{short int} ごとに
1913 分けたものであり、1 個の 8 進数として表示される。
1914
1915 @var{offset} を指定した場合、それは、整形と出力を始める前に、入力を
1916 何バイト読み飛ばすかを示している。デフォルトでは、@var{offset} は 8 進数と
1917 見なされるが、数字の後ろに小数点を付ければ、10 進数と見なされる。
1918 小数点が指定されず、オフセットの数字が @samp{0x} や @samp{0X} で始まっている場合
1919 は、16 進数として解釈される。もし、数字の後ろに @samp{b} が付いているなら
1920 ば、読み飛ばすバイト数は、@var{offset} に 512 を掛けたものになる。
1921 @sp 1
1922 (訳注: 数字の後ろに小数点を付けることで @var{offset} が 10 進数であること
1923 を示す方法は、現在では無効のようである。オフセットを 10 進数で指定した
1924 ければ、@option{-j} オプションを使用した方がよい。)
1925
1926 コマンドが「書式」における第一の型と第二の型のどちらとも取れるとき
1927 は、最後のオペランドが @samp{+} で始まっている場合や、オペランドが 2 個で
1928 2 番目のオペランドが数字で始まっている場合は、第二の型だと見なされる。
1929 たとえば、@samp{od foo 10} や @samp{od +10} では、@samp{10} はオフセットである。
1930 それに対して、@samp{od 10} では、@samp{10} はファイル名である。
1931
1932 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1933
1934 @table @samp
1935
1936 @item -A @var{radix}
1937 @itemx --address-radix=@var{radix}
1938 @opindex -A
1939 @opindex --address-radix
1940 @cindex radix for file offsets
1941 @cindex file offset radix
1942 ファイル・オフセットの表示に使う基数を選択する。@var{radix} には、
1943 以下の一つが使える。
1944
1945 @table @samp
1946 @item d
1947 10 進数
1948 @item o
1949 8 進数
1950 @item x
1951 16 進数
1952 @item n
1953 なし (オフセットを表示しない)
1954 @end table
1955
1956 デフォルトは 8 進数である。
1957
1958 @item -j @var{bytes}
1959 @itemx --skip-bytes=@var{bytes}
1960 @opindex -j
1961 @opindex --skip-bytes
1962 整形と出力を行う前に、入力を @var{bytes} バイト読み飛ばす。@var{bytes} が @samp{0x}
1963 や @samp{0X} で始まっている場合は、16 進数と見なされる。@samp{0} のみで
1964 始まっている場合は、8 進数だ。どちらでもない場合は、10 進数である。
1965 @multiplierSuffixes{bytes}
1966
1967 @item -N @var{bytes}
1968 @itemx --read-bytes=@var{bytes}
1969 @opindex -N
1970 @opindex --read-bytes
1971 入力から最大で @var{bytes} バイト出力する。@code{bytes} に接頭辞や接尾辞を
1972 付けると、@option{-j} オプションの場合と同じように解釈される。
1973
1974 @item -S @var{bytes}
1975 @itemx --strings[=@var{bytes}]
1976 @opindex -S
1977 @opindex --strings
1978 @cindex string constants, outputting
1979 通常の出力はせず、文字列定数 (@dfn{string constants}) のみを出力する。
1980 すなわち、@var{bytes} バイト以上の連続する ASCII 表示文字で、ゼロバイト
1981 (ASCII NUL) が続くものを出力するわけだ。@var{bytes} に接頭辞や接尾辞を
1982 付けると、@option{-j} オプションの場合と同じように解釈される。
1983
1984 @option{--strings} に続く @var{bytes} が省略された場合、デフォルトは 3 である。
1985
1986 @item -t @var{type}
1987 @itemx --format=@var{type}
1988 @opindex -t
1989 @opindex --format
1990 ファイルデータの出力形式を選択する。@var{type} は、1 個以上の下記の形式
1991 指定文字からなる文字列である。一つの @var{type} 文字列に複数の形式指定
1992 文字が含まれている場合や、このオプションを複数回使用した場合は、@command{od}
1993 は出力行ごとに、指定された各データ形式で表現したその行を、指定された
1994 順番で書き出す。
1995
1996 どんな形式指定であれ、その最後に ``z'' を付けると、形式指定によって
1997 生成された出力行の後ろに、表示可能文字を 1 バイト文字によって表現
1998 したものが、出力される。
1999
2000 @table @samp
2001 @item a
2002 文字の名称 (訳注: たとえば、A は A、改行文字は nl)。最上位
2003 ビットは無視する。
2004 @item c
2005 表示可能な 1 バイト文字、C 言語のバックスラッシュ・
2006 エスケープ、あるいは 3 桁の 8 進数。
2007 @item d
2008 符号付き 10 進数
2009 @item f
2010 浮動小数点数 (@pxref{Floating point})
2011 @item o
2012 8 進数
2013 @item u
2014 符号なし 10 進数
2015 @item x
2016 16 進数
2017 @end table
2018
2019 @code{a} 形式の出力では、空白文字は @samp{sp}、改行文字は @samp{nl}、ゼロバイトは
2020 @samp{nul} といった具合に表現される。このとき、各バイトの下位 7 ビット
2021 のみが使われ、最上位ビットは無視される。@code{c} 形式の出力では、上記の
2022 例は、それぞれ @samp{ }、@samp{\n}、@code{\0} になる。
2023
2024 @cindex type size
2025 @samp{a} と @samp{c} 形式を除き、形式指定文字の後ろに 10 進数の整数を続ける
2026 ことによって、入力データの各数値を読み込んで、指定されたデータ形式に
2027 変換して行く際に、何バイトづつ使用するかを指定することができる。
2028 あるいは、形式指定文字の後ろに以下の文字の一つを続けることによって、
2029 C コンパイラの組み込みデータ型のいづれかのサイズを指定することも
2030 可能だ。すなわち、整数 (@samp{d}, @samp{o}, @samp{u}, @samp{x}) に対しては、以下を
2031 後置する。
2032
2033 @table @samp
2034 @item C
2035 char
2036 @item S
2037 short
2038 @item I
2039 int
2040 @item L
2041 long
2042 @end table
2043
2044  浮動小数点数 (@code{f}) に対しては、次のものが使用できる。
2045
2046 @table @asis
2047 @item F
2048 float
2049 @item D
2050 double
2051 @item L
2052 long double
2053 @end table
2054
2055 @item -v
2056 @itemx --output-duplicates
2057 @opindex -v
2058 @opindex --output-duplicates
2059 連続する行が同一であっても出力する。デフォルトでは、出力する行が、
2060 二行以上連続して全く同一になりそうな場合、@command{od} は最初の行だけを
2061 出力し、次の行にはアステリスクのみを置いて、二行目以下を省略した
2062 ことを示す。
2063
2064 @item -w[@var{n}]
2065 @itemx --width[=@var{n}]
2066 @opindex -w
2067 @opindex --width
2068 1 出力行当たり、@code{n} バイトの入力をダンプする。この値は、指定した
2069 各出力形式に結び付いているサイズの最小公倍数の倍数でなければ
2070 ならない。
2071
2072 このオプションが全く指定されないときのデフォルトは 16 である。
2073 このオプションが @var{n} なしで指定されたときのデフォルトは 32 である。
2074
2075 @end table
2076
2077 以下に挙げるいくつかのオプションは、形式指定の簡易版である。GNU @command{od}
2078 では、形式指定オプションと簡易版オプションをどのように組み合わせても
2079 構わない。こうしたオプションは、累加されていく。
2080
2081 @table @samp
2082
2083 @item -a
2084 @opindex -a
2085 文字の名称で出力する。@samp{-t a} と同じ。
2086
2087 @item -b
2088 @opindex -b
2089 1 バイトづつ 8 進数として出力する。@samp{-t o1} と同じ。
2090
2091 @item -c
2092 @opindex -c
2093 表示可能な 1 バイト文字か、C 言語のバックスラッシュ・エスケープ、
2094 あるいは 3 桁の 8 進数として出力する。@samp{-t c} と同じ。
2095
2096 @item -d
2097 @opindex -d
2098 2 バイトづつ符号なし 10 進数として出力する。@samp{-t u2} と同じ。
2099
2100 @item -f
2101 @opindex -f
2102 浮動小数点数として出力する。@samp{-t fF} と同じ。
2103
2104 @item -i
2105 @opindex -i
2106 10 進数の int として出力する。@samp{-t dI} と同じ。
2107
2108 @item -l
2109 @opindex -l
2110 10 進数の long int として出力する。@samp{-t dL} と同じ。
2111
2112 @item -o
2113 @opindex -o
2114 2 バイトづつ 8 進数として出力する。@option{-t o2} と同じ。
2115
2116 @item -s
2117 @opindex -s
2118 2 バイトづつ 10 進数として出力する。@option{-t d2} と同じ。
2119
2120 @item -x
2121 @opindex -x
2122 2 バイトづつ 16 進数として出力する。@samp{-t x2} と同じ。
2123
2124 @item --traditional
2125 @opindex --traditional
2126 昔の @command{od} で使用できた、オプションではない引数 @var{label} を認識する。
2127 書式は次のようになる。
2128
2129 @smallexample
2130 od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
2131 @end smallexample
2132
2133 @noindent
2134 この書式を使用すると、ファイルは 1 個までしか指定できないが、必要
2135 なら、オフセットを示す引数や、@var{label} という、開始位置の仮アドレス
2136 を示す引数を、続けて指定することができる。引数 @var{label} は @var{offset} と
2137 全く同じように解釈されるが、出力を開始する位置の仮アドレスを指定
2138 している。仮アドレスは、通常のアドレスの後ろに、カッコで囲まれて、
2139 表示される。
2140
2141 @end table
2142
2143 @exitstatus
2144
2145 @node base64 invocation
2146 @section @command{base64}: データを表示可能データ (printable data) に変換する
2147
2148 @pindex base64
2149 @cindex base64 encoding
2150
2151 "@command{base64} はファイル、または標準入力から読み込んだデータを、base64 で
2152 エンコードした形式に変換する (あるいは、その逆を行う)。base64 で
2153 エンコードした形式は、表示可能な ASCII 文字を用いて、バイナリデータを
2154 表現する。
2155 @sp 1
2156 書式:
2157
2158 @smallexample
2159 base64 [@var{option}]@dots{} [@var{file}]
2160 base64 --decode [@var{option}]@dots{} [@var{file}]
2161 @end smallexample
2162
2163 base64 でエンコードすると、データが元のデータのほぼ 133% に増大する。
2164 base64 エンコード形式は、RFC4648 に準拠している。
2165 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc4648.txt}
2166
2167 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2168
2169 @table @samp
2170
2171 @item -w @var{cols}
2172 @itemx --wrap=@var{cols}
2173 @opindex -w
2174 @opindex --wrap
2175 @cindex wrap data
2176 @cindex column to wrap data after
2177 エンコード中に、出力が @var{cols} 文字に達したら改行する。この値は、正の
2178 整数でなければならない。
2179
2180 デフォルトでは、76 文字で改行する。改行を全く行わないようにする
2181 には、値を 0 にする。
2182
2183 @item -d
2184 @itemx --decode
2185 @opindex -d
2186 @opindex --decode
2187 @cindex Decode base64 data
2188 @cindex Base64 decoding
2189 動作モードを変更する。デフォルトの、データをエンコードするモード
2190 ではなく、データをデコードするモードになる。入力には、base64 で
2191 エンコードしたデータが期待され、出力は、エンコードする前のデータ
2192 になる。
2193
2194 @item -i
2195 @itemx --ignore-garbage
2196 @opindex -i
2197 @opindex --ignore-garbage
2198 @cindex Ignore garbage in base64 stream
2199 デコードする際、改行文字がどこに現れても、適切に処理する。デコード
2200 中に ASCII 表示可能文字以外を表すバイトが現れたら、一部壊れたデータ
2201 でもデコードできるように、それを無視する。
2202
2203 @end table
2204
2205 @exitstatus
2206
2207
2208 @node Formatting file contents
2209 @chapter ファイル内容の整形
2210
2211 @cindex formatting file contents
2212
2213 以下のコマンドは、ファイルの内容を整形し直す。
2214
2215 @menu
2216 * fmt invocation::           パラグラフに分かれたテキストを整形し直す。
2217 * numfmt invocation::        数値を整形し直す。
2218 * pr invocation::            ページ付けや段組みをしてファイルを表示する。
2219 * fold invocation::          入力行を指定された幅に合わせて折り返す。
2220 @end menu
2221
2222
2223 @node fmt invocation
2224 @section @command{fmt}: パラグラフに分かれたテキストを整形し直す
2225
2226 @pindex fmt
2227 @cindex reformatting paragraph text
2228 @cindex paragraphs, reformatting
2229 @cindex text, reformatting
2230
2231 @command{fmt} は行を折り返したり、結合したりして、出力する各行が指定された
2232 文字数に納まるように調整する。1 行のデフォルトはアスキー文字で 75 文字
2233 である。(訳注: 日本語のテキストは、通常単語を空白で区切らないので、
2234 うまく整形できない。)
2235 @sp 1
2236 書式:
2237
2238 @example
2239 fmt [@var{option}]@dots{} [@var{file}]@dots{}
2240 @end example
2241
2242 @command{fmt} は、指定された引数 @var{file} から (指定されていない場合は、標準
2243 出力から) テキストを読み込んで、標準出力に書き出す。
2244
2245 デフォルトでは、空行、単語間の空白、インデント (字下げ) は、出力でも
2246 そのまま維持される。インデントの違う入力行が連続する場合は、行の結合は
2247 行われない。タブは入力のときにスペースに展開され、出力でタブに戻される。
2248
2249 @cindex line-breaking
2250 @cindex sentences and line-breaking
2251 @cindex Knuth, Donald E.
2252 @cindex Plass, Michael F.
2253 @command{fmt} は、できるだけ文の終わりで改行しようとする。また、文の最初の
2254 単語の直後や、文の最後の単語の直前で改行するのは避けようとする。「文の
2255 終わり (@dfn{sentence break})」の定義は、パラグラフがそこで終わっているか、
2256 あるいは、単語の末尾に @samp{.?!} のどれかが付き、さらにスペースが 2 個
2257 続くか、行末が来ることである。後者の場合、ピリオドなどとスペース 2 個、
2258 あるいは行末の間にカッコや引用符が入っていてもよい。@TeX{} と同様、@command{fmt}
2259 は、どこで行を折り返すかを決める前に、パラグラフ全体を読み込む。使用して
2260 いるアルゴリズムは、Donald E. Knuth と Michael F. Plass が ``Breaking
2261 Paragraphs Into Lines'' で提示しているものに変更を加えたものである
2262 (`Software---Practice & Experience 誌'、第 11 巻 第 11 号 (November
2263 1981) 1119-1184 ページ)。
2264
2265 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2266
2267 @table @samp
2268
2269 @item -c
2270 @itemx --crown-margin
2271 @opindex -c
2272 @opindex --crown-margin
2273 @cindex crown margin
2274 クラウンマージン・モード (@dfn{Crown margin} mode) である。パラグラフの
2275 最初の 2 行のインデントはそのまま踏襲し、それに続く各行の左の余白を
2276 2 行目のインデントに揃える。
2277
2278 @item -t
2279 @itemx --tagged-paragraph
2280 @opindex -t
2281 @opindex --tagged-paragraph
2282 @cindex tagged paragraphs
2283 タグ付きパラグラフ・モード (@dfn{Tagged paragraph} mode)。クラウンマー
2284 ジン・モードに似ているが、次の点が違う。パラグラフの最初の行と
2285 二番目の行のインデントが同じ場合、最初の行は 1 行からなるパラグラフ
2286 として扱われる。
2287
2288 @item -s
2289 @itemx --split-only
2290 @opindex -s
2291 @opindex --split-only
2292 行の分割のみを行う。短い行を結合して、長い行を作ることはしない。
2293 その結果、サンプル・コードの行のような、すでに整形されたテキストを
2294 むやみに結合しないで済む。
2295
2296 @item -u
2297 @itemx --uniform-spacing
2298 @opindex -u
2299 @opindex --uniform-spacing
2300 空白の数を一定にする。すなわち、単語間の空白は 1 個に、文の間の
2301 空白は 2 個にする。
2302
2303 @item -@var{width}
2304 @itemx -w @var{width}
2305 @itemx --width=@var{width}
2306 @opindex -@var{width}
2307 @opindex -w
2308 @opindex --width
2309 出力する各行を、長くても @var{width} 文字までにする (デフォルトは 75
2310 文字。@var{goal} が指定されている場合は、@var{goal} プラス 10 文字)。
2311
2312 @item -g @var{goal}
2313 @itemx --goal=@var{goal}
2314 @opindex -g
2315 @opindex --goal
2316 とりあえず、各行を @var{goal} 文字の長さにしてみようとする。これは、
2317 デフォルトでは @var{width} より 7% 短い。
2318
2319 @item -p @var{prefix}
2320 @itemx --prefix=@var{prefix}
2321 @var{prefix} で始まる行のみを整形の対象にする (@var{prefix} の前にホワイト
2322 スペースがあってもよい)。@var{prefix} とそれに先行するホワイトスペース
2323 は、整形の際に取り除かれ、整形後に各出力行に付け直される。この
2324 オプションの用途を一つ挙げると、プログラムのコメントのような行
2325 だけを整形し、コードには手を加えないことが考えられる。
2326
2327 @end table
2328
2329 @exitstatus
2330
2331 @node numfmt invocation
2332 @section @command{numfmt}: 数値を整形し直す
2333
2334 @pindex numfmt
2335
2336 @command{numfmt} はさまざまな表記の数値を読み込んで、それを要求された形に
2337 整形し直す。一番よく使うのは、数値を人間が読みやすい形に変換する場合や、
2338 その逆を行う場合である (たとえば、@samp{4G} @expansion{} @samp{4,000,000,000})。
2339
2340 @example
2341 numfmt [@var{option}]@dots{} [@var{number}]
2342 @end example
2343
2344 @command{numfmt} は、コマンドラインで与えられた各 @var{number} を、指定された
2345 オプション (以下の節を参照) に従って変換する。@var{number} の指定がない
2346 場合は、標準入力から数値を読み込む。また、@command{numfmt} は、入力行中の
2347 特定のフィールドから数値を取り出すこともできる。その場合、列が揃う
2348 ようにパディング (訳注: フィールドの空き埋め) が行われていれば、
2349 それも適切に維持する。
2350
2351 @exitstatus
2352
2353 終了ステータスについては追加情報がある。@option{--invalid} をご覧になって
2354 いただきたい。
2355
2356 @menu
2357 * General options in numfmt::  一般オプション
2358 * Possible UNITs::             使用できる UNIT
2359 * Examples of using numfmt::   numfmt の使用例
2360 @end menu
2361
2362 @node General options in numfmt
2363 @subsection 一般オプション
2364
2365 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2366
2367 @table @samp
2368
2369 @item --debug
2370 @opindex --debug
2371 間違えた使い方をしている疑いがあるとき、それについて警告メッセージを
2372 (標準エラーに) 表示する。
2373
2374 @item -d @var{d}
2375 @itemx --delimiter=@var{d}
2376 @opindex -d
2377 @opindex --delimiter
2378 文字 @var{d} を入力フィールドの区切りとして使用する (デフォルトはホワイト
2379 スペース)。区切りにデフォルト以外の文字を使うと、自動的なパディングが
2380 行われなくなるのに注意してほしい。
2381
2382 @item --field=@var{n}
2383 @opindex --field
2384 @var{n} 番目の入力フィールドの数値を変換する (@var{n} のデフォルトは 1)。
2385
2386 @item --format=@var{format}
2387 @opindex --format
2388 浮動小数点数を表す printf 形式の @var{format} 文字列を出力の整形に
2389 使用する。文字列 @var{format} には、1 個の @samp{%f} 変換指定子が含まれて
2390 いなければならない。なお、そうしたければ、@samp{'} や @samp{-} 修飾子、
2391 あるいは、フィールド幅修飾子 (訳注: 数値) を @samp{%f} に付けることも
2392 できる。@samp{'} 修飾子は @option{--grouping} オプションを有効にし、@samp{-} 修飾子
2393 は @option{--padding} オプションを左詰めで有効に、フィールド幅修飾子は
2394 @option{--padding} オプションを右詰めで有効にする。(訳注: @samp{-} 修飾子は、
2395 数値であるフィールド幅修飾子と併せて用いなければならない。)
2396
2397 @item --from=@var{unit}
2398 @opindex --from
2399 入力された数値の大きさや桁数を @var{unit} に従って自動調整 (auto-scaling)
2400 する (訳注: 一例を挙げると、入力数値が @samp{1K} だったとき、@samp{--from=si}
2401 が指定されていれば 1000 に変換し、@samp{--from=iec} が指定されていれば
2402 1024 に変換する)。@var{unit} については、次節「使用できる UNIT」を参照
2403 していただきたい。デフォルトでは数値の大きさや桁数の調節を行わない。
2404 それはまた、入力数値に接尾辞 (たとえば、@samp{M}, @samp{G} など) が付いて
2405 いると、エラーになるということでもある。
2406
2407 @item --from-unit=@var{n}
2408 @opindex --from-unit
2409 入力の 1 単位の大きさを (すなわち、デフォルトの 1 に代えて使う
2410 大きさを) 指定する。入力する数値の 1 単位の大きさが、デフォルトの
2411 1 以外の場合に、このオプションを使用するわけだ (たとえば、入力する
2412 数値の @samp{10} が、1 単位 512 バイトの 10 単位を表している場合には、
2413 @samp{--from-unit=512} を使用する)。
2414
2415 @item --grouping
2416 @opindex --grouping
2417 現在のロケールの桁区切りルールに従って、出力する数値を数桁ごとに
2418 区切る (たとえば、3 桁ごとの区切り記号は、たいてい @samp{.} (ドット) か
2419 @samp{,} (コンマ) である)。ロケールが @samp{POSIX/C} の場合は、このオプション
2420 に効果はない。
2421
2422 @item --header[=@var{n}]
2423 @opindex --header
2424 @opindex --header=N
2425 最初の @var{n} (デフォルトは 1) 行を、いかなる変換もせずに出力する。
2426
2427 @item --invalid=@var{mode}
2428 @opindex --invalid
2429 入力エラーに出会ったときのデフォルトの動作は、ステータスコード 2 で
2430 即座に終了することである。@option{--invalid=@samp{abort}} は、このデフォルト
2431 の動作を明示的に指定することになる。@var{mode} に @samp{fail} を指定すると、
2432 変換エラーがあるごとに警告メッセージを表示して、ステータス 2 で終了
2433 する。@var{mode} が @samp{warn} の場合は、変換エラーがあっても、ステータス 0
2434 で終了する。@var{mode} が @samp{ignore} の場合は、ステータス 0 で終了する
2435 だけでなく、診断メッセージを出すことすらしない。
2436
2437 @item --padding=@var{n}
2438 @opindex --padding
2439 出力する数値が @var{n} 字分を占めるように、スペースを加えることで
2440 パディングをする。@var{n} が正の数の場合は、数値が右詰めになり、負の
2441 数の場合は、数値が左詰めになる。デフォルトでは、数値は、入力行の
2442 幅に基づいて (訳注: 詳しく言うと、入力各行の数値のあるフィールド
2443 が固定幅の場合、その幅に基づいて)、自動的に揃えられる (これが
2444 行われるのは、フィールドの区切り文字がデフォルトの場合だけである)。
2445
2446 @item --round=@var{method}
2447 @opindex --round
2448 @opindex --round=up
2449 @opindex --round=down
2450 @opindex --round=from-zero
2451 @opindex --round=towards-zero
2452 @opindex --round=nearest
2453 数値の表現を変換するときに、@var{method} に従って、数値を丸める。@var{method}
2454 には、@samp{up}, @samp{down}, @samp{from-zero} (デフォルト), @samp{towards-zero},
2455 @samp{nearest} が使用できる。(訳注: @samp{up} は切り上げ、@samp{down} は切り下げ、
2456 @samp{from-zero} はゼロから離れる方向へ、@samp{towards-zero} はゼロに近づく
2457 方向へ、@samp{nearest} は四捨五入である。)
2458
2459 @item --suffix=@var{suffix}
2460 @opindex --suffix
2461 出力する数値に @samp{SUFFIX} を付ける。また、入力する数値に @samp{SUFFIX}
2462 が付いていても、エラーにしない。
2463
2464 @item --to=@var{unit}
2465 @opindex --to
2466 出力する数値の大きさや桁数を @var{unit} に従って自動調整する。@var{unit} に
2467 ついては、次節「使用できる UNIT」を参照していただきたい。デフォルト
2468 では、数値の大きさや桁数の調節をしないので、数値を構成するすべての
2469 数字が表示されることになる。
2470
2471 @item --to-unit=@var{n}
2472 @opindex --to-unit
2473 出力の 1 単位の大きさを (すなわち、デフォルトの 1 に代えて使う
2474 大きさを) 指定する。出力する数値の 1 単位の大きさが、デフォルトの
2475 1 以外の場合に、このオプションを使用するわけだ (たとえば、1
2476 ブロック 1KB のブロック数で @samp{4,000,000} バイトを表現するには、
2477 @samp{--to=si --to-unit=1000} が使用できる)。
2478
2479 @end table
2480
2481 @node Possible UNITs
2482 @subsection 使用できる @var{unit}
2483
2484 @option{--from=UNIT} や @option{--to=UNIT} で指定する @var{unit} には、次のものを選択する
2485 ことができる。(訳注: @var{unit} の名前は、大文字ではなく、si, iec などの
2486 小文字で指定すること。)
2487
2488 @table @var
2489
2490 @item none
2491 数値の大きさや桁数の調整を行わない。入力する数値には、いかなる
2492 接尾辞も付けることができない。従って、数値の直後に文字が続くと
2493 エラーになる。出力する数値については、その数値を構成するすべての
2494 数字を表示する。
2495
2496 @item si
2497 国際単位系 (International System of Units (SI)) の規格に従って、
2498 数値の大きさや桁数を自動調整する。入力する数値には、以下の接尾辞の
2499 一つが使用できる。出力する数値については、1000 以上の値は丸められ
2500 て、以下の接尾辞の一つを付けて表示される。
2501
2502 @example
2503 @samp{K}  =>  @math{1000^1 = 10^3} (Kilo)
2504 @samp{M}  =>  @math{1000^2 = 10^6} (Mega)
2505 @samp{G}  =>  @math{1000^3 = 10^9} (Giga)
2506 @samp{T}  =>  @math{1000^4 = 10^{12}} (Tera)
2507 @samp{P}  =>  @math{1000^5 = 10^{15}} (Peta)
2508 @samp{E}  =>  @math{1000^6 = 10^{18}} (Exa)
2509 @samp{Z}  =>  @math{1000^7 = 10^{21}} (Zetta)
2510 @samp{Y}  =>  @math{1000^8 = 10^{24}} (Yotta)
2511 @end example
2512
2513 @item iec
2514 International Electronical Commission (IEC) の規格に従って、数値の
2515 大きさや桁数を自動調整する。入力する数値では、以下の接尾辞の一つが
2516 使用できる。出力する数値については、1024 以上の値は丸められて、
2517 以下の接尾辞の一つを付けて表示される。
2518
2519 @example
2520 @samp{K}  =>  @math{1024^1 = 2^{10}} (Kibi)
2521 @samp{M}  =>  @math{1024^2 = 2^{20}} (Mebi)
2522 @samp{G}  =>  @math{1024^3 = 2^{30}} (Gibi)
2523 @samp{T}  =>  @math{1024^4 = 2^{40}} (Tebi)
2524 @samp{P}  =>  @math{1024^5 = 2^{50}} (Pebi)
2525 @samp{E}  =>  @math{1024^6 = 2^{60}} (Exbi)
2526 @samp{Z}  =>  @math{1024^7 = 2^{70}} (Zebi)
2527 @samp{Y}  =>  @math{1024^8 = 2^{80}} (Yobi)
2528 @end example
2529
2530 @option{iec} を選択すると、接尾辞に (@samp{G} など) 1 文字の記号が使用される
2531 ことになるが、これは規格に完全にかなってるとは言えない。IEC の
2532 規格では (@samp{Gi} など) 2 字の記号を推奨しているからだ。しかし、実際の
2533 使用では、1 文字の表記法が普通に使われている。@option{iec-i} を指定した
2534 場合と比較していただきたい。
2535
2536 @item iec-i
2537 International Electronical Commission (IEC) の規格に従って、数値の
2538 大きさや桁数を自動調整する。入力する数値では、以下の接尾辞の一つが
2539 使用できる。出力する数値については、1024 以上の値は丸められて、
2540 以下の接尾辞の一つを付けて表示される。
2541
2542 @example
2543 @samp{Ki}  =>  @math{1024^1 = 2^{10}} (Kibi)
2544 @samp{Mi}  =>  @math{1024^2 = 2^{20}} (Mebi)
2545 @samp{Gi}  =>  @math{1024^3 = 2^{30}} (Gibi)
2546 @samp{Ti}  =>  @math{1024^4 = 2^{40}} (Tebi)
2547 @samp{Pi}  =>  @math{1024^5 = 2^{50}} (Pebi)
2548 @samp{Ei}  =>  @math{1024^6 = 2^{60}} (Exbi)
2549 @samp{Zi}  =>  @math{1024^7 = 2^{70}} (Zebi)
2550 @samp{Yi}  =>  @math{1024^8 = 2^{80}} (Yobi)
2551 @end example
2552
2553 @option{iec-i} を選択すると、接尾辞に (@samp{Gi} など) 2 文字の記号が使用
2554 されることになる。これは、IEC の規格が推奨しているとおりだが、
2555 実際の使用では、必ずしもよく使われているわけではない。@option{iec}
2556 を指定した場合と、比較していただきたい。
2557
2558 @item auto
2559 @samp{auto} は @option{--from} でしか使えない。これを選んだ場合、@samp{K},@samp{M},
2560 @samp{G},@samp{T},@samp{P},@samp{E},@samp{Z},@samp{Y} といった接尾辞が付いていれば、数値は SI
2561 の値と見なされる。接尾辞が
2562 @samp{Ki},@samp{Mi},@samp{Gi},@samp{Ti},@samp{Pi},@samp{Ei},@samp{Zi},
2563 @samp{Yi} などの場合は、数値は IEC の値と見なされることになる。
2564
2565 @end table
2566
2567 @node Examples of using numfmt
2568 @subsection @command{nunfmt} の使用例
2569
2570 1 個の数値を人間に読みやすい形に変換する (あるいは、その逆を行う)。
2571 @example
2572 $ numfmt --to=si 500000
2573 500K
2574
2575 $ numfmt --to=iec 500000
2576 489K
2577
2578 $ numfmt --to=iec-i 500000
2579 489Ki
2580
2581 $ numfmt --from=si 1M
2582 1000000
2583
2584 $ numfmt --from=iec 1M
2585 1048576
2586
2587 # '--from=auto' を使用する。M=Mega, Mi=Mebi
2588 $ numfmt --from=auto 1M
2589 1000000
2590 $ numfmt --from=auto 1Mi
2591 1048576
2592 @end example
2593
2594 @samp{SI} 表記を @samp{IEC} 表記に換算する (たとえば、ハードディスクの容量が
2595 メーカー表示では @samp{1TB} となっているが、実際に容量をチェックすると、
2596 それより少ない場合)。
2597
2598 @example
2599 $ numfmt --from=si --to=iec 1T
2600 932G
2601 @end example
2602
2603
2604 ファイルやパイプから読み込んだ入力行にある、ある一つのフィールドを
2605 変換する (ここに示す数例は、あくまでも説明のために作ったものである。
2606 実際には、@command{ls} と @command{df} のどちらにも、人間に読みやすい形式でサイズを
2607 表示するための @option{--human-readable} オプションが存在している)。
2608
2609 @example
2610 # 3 番目のフィールド (ファイルサイズ) を SI 表記で表示する
2611 $ ls -log | numfmt --field 3 --header --to=si | head -n4
2612 -rw-r--r--  1     94K Aug 23  2011 ABOUT-NLS
2613 -rw-r--r--  1    3.7K Jan  7 16:15 AUTHORS
2614 -rw-r--r--  1     36K Jun  1  2011 COPYING
2615 -rw-r--r--  1       0 Jan  7 15:15 ChangeLog
2616 (訳注: 実際には、この一番下の行は表示されず、一番上に「total @dots{} 
2617 といった行が現れるはずである。)
2618
2619 # 二番目のフィールド (サイズ) を IEC 表記で表示する
2620 $ df --block-size=1 | numfmt --field 2 --header --to=iec | head -n4
2621 File system   1B-blocks        Used  Available Use% Mounted on
2622 rootfs             132G   104741408   26554036  80% /
2623 tmpfs              794M        7580     804960   1% /run/shm
2624 /dev/sdb1          694G   651424756   46074696  94% /home
2625 @end example
2626
2627
2628 出力は @option{--padding} や @option{--format} オプションを使って加工することが
2629 できる。
2630
2631 @example
2632 # フィールド幅が 10 字になるまで空白で埋める。右詰め表示。
2633 $ du -s * | numfmt --to=si --padding=10
2634       2.5K config.log
2635        108 config.status
2636       1.7K configure
2637         20 configure.ac
2638
2639 # フィールド幅が 10 字になるまで空白で埋める。左詰め表示。
2640 $ du -s * | numfmt --to=si --padding=-10
2641 2.5K       config.log
2642 108        config.status
2643 1.7K       configure
2644 20         configure.ac
2645
2646 # @option{--format} オプションを使用して、フィールド幅が 10 文字になるまで
2647 # 空白で埋める。右詰め表示。
2648 $ du -s * | numfmt --to=si --format="%10f"
2649       2.5K config.log
2650        108 config.status
2651       1.7K configure
2652         20 configure.ac
2653
2654 # @option{--format} オプションを使用して、フィールド幅が 10 文字になるまで
2655 # 空白で埋める。左詰め表示。
2656 $ du -s * | numfmt --to=si --padding="%-10f"
2657 2.5K       config.log
2658 108        config.status
2659 1.7K       configure
2660 20         configure.ac
2661 @end example
2662
2663 桁区切りをサポートしているロケールでは、@option{--grouping} や @option{--format}
2664 オプションを使って、数値を数桁ごとに区切ることができる。ロケールが
2665 @samp{POSIX} や @samp{C} の場合は、桁区切りを指定しても、単に無視される。
2666
2667 @example
2668 $ LC_ALL=C numfmt --from=iec --grouping 2G
2669 2147483648
2670
2671 $ LC_ALL=en_US.utf8 numfmt --from=iec --grouping 2G
2672 2,147,483,648
2673
2674 $ LC_ALL=ta_IN numfmt --from=iec --grouping 2G
2675 2,14,74,83,648
2676
2677 $ LC_ALL=C numfmt --from=iec --format="==%'15f==" 2G
2678 ==     2147483648==
2679
2680 $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'15f==" 2G
2681 ==  2,147,483,648==
2682
2683 $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'-15f==" 2G
2684 ==2,147,483,648  ==
2685
2686 $ LC_ALL=ta_IN numfmt --from=iec --format="==%'15f==" 2G
2687 == 2,14,74,83,648==
2688 @end example
2689
2690 @node pr invocation
2691 @section @command{pr}: ページ付けや段組みをしてファイルを表示する
2692
2693 @pindex pr
2694 @cindex printing, preparing files for
2695 @cindex multicolumn output, generating
2696 @cindex merging files in parallel
2697
2698 @command{pr} は、各 @var{file} (@samp{-} は標準入力を表す) を標準出力に書き出す。@var{file} が
2699 指定されていない場合は、標準入力を対象にする。その際、ページ付けを行い、
2700 指定があれば段組みをして出力する。また、すべての @var{file} を一つに統合し、
2701 1 段 1 ファイルの形式で平行して表示することもできる。(訳注: @command{pr} の
2702 日本語対応は完全ではない。とくに段組みがうまく行かない。)
2703 @sp 1
2704 書式:
2705
2706 @example
2707 pr [@var{option}]@dots{} [@var{file}]@dots{}
2708 @end example
2709
2710 @vindex LC_MESSAGES
2711 デフォルトでは、5 行のヘッダが各ページに付く。2 行の空行、日付・
2712 ファイル名・ページ番号からなる 1 行、そしてもう 2 行の空行である。
2713 5 行の空行からなるフッタも出力される。デフォルトのページ長 (@var{page_length})
2714 は 66 行なので、本文に使用されるデフォルトの行数は、56 行である。
2715 ヘッダのテキスト行は、@samp{@var{date} @var{string} @var{page}} の形を取り、@var{string} の両側に
2716 空白を入れて、行の幅がページ幅 (@var{page_width}) いっぱいになるように
2717 している。@var{date} は日付であり (詳細については、@option{--date-format} (@option{-D})
2718 オプションを参照)、@var{string} は中央揃えのヘッダ文字列 (訳注: デフォルト
2719 ではファイル名)、@var{page} はページ番号である。@var{page} という単語の綴りは、
2720 @env{LC_MESSAGES} ロケール・カテゴリによって変わってくる。デフォルトの C
2721 ロケールでは、@samp{Page @var{number}} であり、@var{number} は 10 進数のページ番号だ。
2722
2723 入力にフォームフィード (Form feed) があると、出力では改ページが行われ
2724 る。フォームフィードが続くと、白紙のページが生ずる。
2725
2726 段組みをした場合、どの段の幅も同じであり、段と段の間には任意の文字列
2727 (デフォルトはスペース) が置かれる。多段組みの出力では、@option{-J} オプション
2728 を使用しないかぎり、各行は常に @var{page_width} (デフォルトは 72) 文字までに
2729 切り詰められる (訳注: これは、各段や段間の空白などを合計した 1 行の
2730 長さが、最長でも @var{page_width} 文字までになるということであって、各段が
2731 それぞれ @var{page_width} 文字になるということではない)。1 段のみの出力では、
2732 デフォルトでは行の切り詰めは行われない。その場合でも、行の切り詰めを
2733 行うには、@option{-W} を使用する。
2734
2735 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2736
2737 @table @samp
2738
2739 @item +@var{first_page}[:@var{last_page}]
2740 @itemx --pages=@var{first_page}[:@var{last_page}]
2741 @c The two following @opindex lines evoke warnings because they contain ':'
2742 @c The 'info' spec does not permit that.  If we use those lines, we end
2743 @c up with truncated index entries that don't work.
2744 @c @opindex +@var{first_page}[:@var{last_page}]
2745 @c @opindex --pages=@var{first_page}[:@var{last_page}]
2746 @opindex +@var{page_range}
2747 @opindex --pages=@var{page_range}
2748 表示を @var{first_page} ページから始めて、 @var{last_page} ページで終了する。
2749 @samp{:@var{last_page}} の指定を省略するのは、ファイルの最後までということで
2750 ある。スキップするページ数を計算する際、入力ファイル中にフォーム
2751 フィードがあると、そのたびに 1 ページ進むことになる。ページ番号
2752 は、@samp{+@var{first_page}} があってもなくても、同じになる。デフォルトでは、
2753 入力ファイルの最初のページからページ数を数えるからだ (表示される
2754 最初のページからではない)。行番号については @option{-N} オプションで変更す
2755 ることができる。
2756
2757 @item -@var{column}
2758 @itemx --columns=@var{column}
2759 @opindex -@var{column}
2760 @opindex --columns
2761 @cindex down columns
2762 個々の @var{file} に対して @var{column} 段に段組みした出力を生成する (デフォ
2763 ルトは 1 段)。@option{-a} オプションを使用しない場合、ページ内で本文は、
2764 段内を上から下へと進む。段が増えると、段の幅は自動的に狭くなる。
2765 ただし、@option{-W/-w} を同時に使用して、@var{page_width} を増加させている
2766 場合は、そのかぎりではない。このオプションを使うと、切り詰められる
2767 行がおそらく生じるだろう。ページごとの各段の行数は、できるだけ揃え
2768 られる。多段組みの本文出力では、オプション @option{-e} と @option{-i} が
2769 有効になる。@option{-J} オプションと一緒に使った場合は、段の整列と行の
2770 切り詰めは行われない。各行は、元の長さのまま、不定長フィールド
2771 として (free field format) 結合されるのである。その際、@option{-S} オプ
2772 ションによってフィールド・セパレータを指定することが可能だ。なお
2773 @option{-@var{column}} は、@option{-m} オプションと一緒に使用できない。
2774
2775 @item -a
2776 @itemx --across
2777 @opindex -a
2778 @opindex --across
2779 @cindex across columns
2780 個々の @var{file} を段組みで表示するとき、本文の各行が、段内を上から
2781 下へではなく、左の段から右の段へと進むようにする。@option{-@var{column}}
2782 オプションに指定する段の数は、2 以上でなければならない。行が
2783 段の幅に納まらないほど長い場合、その行は切り詰められる。
2784
2785 @item -c
2786 @itemx --show-control-chars
2787 @opindex -c
2788 @opindex --show-control-chars
2789 制御文字をハット表記 (たとえば、@samp{^G}) を使って表示する。他の非表示
2790 文字は、バックスラッシュ付きの 8 進数表記になる。@command{pr} のデフォルト
2791 では、非表示文字の表示文字化は行われない。
2792
2793 @item -d
2794 @itemx --double-space
2795 @opindex -d
2796 @opindex --double-space
2797 @cindex double spacing
2798 ダブルスペースで出力する (訳注: すなわち、行間を 1 行分あける)。
2799
2800 @item -D @var{format}
2801 @itemx --date-format=@var{format}
2802 @cindex time formats
2803 @cindex formatting times
2804 ヘッダの日付を @var{format} を用いて整形する。@var{format} には、コマンド
2805 @samp{date +@var{format}} で使うのと同じ指定法が使用できる。@xref{date invocation}.
2806 @samp{%} で始まる日時の指定を除いて、@var{format} 中の文字は
2807 そのまま表示される。従って、このオプションを使用すれば、ヘッダの
2808 日付の位置に任意の文字列を指定することもできるわけだ。たとえば、
2809 @option{--date-format="Monday morning"} といった具合に。
2810
2811 @vindex POSIXLY_CORRECT
2812 @vindex LC_TIME
2813 デフォルトの日付書式は @samp{%Y-%m-%d %H:%M} という形である (たとえば、
2814 @samp{2001-12-04 23:59})。だが、環境変数 @env{POSIXLY_CORRECT} が設定され、
2815 しかも @env{LC_TIME} ロケール・カテゴリが POSIX ロケールを指定して
2816 いる場合は、デフォルトの書式は @samp{%b %e %H:%M %Y} になる (たとえば、
2817 @samp{Dec@ @ 4 23:59 2001})。
2818
2819 @vindex TZ
2820 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
2821 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
2822 いない場合は、システムのデフォルトのルールに従って表示される。
2823 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
2824 The GNU C Library Reference Manual}.
2825
2826 @item -e[@var{in-tabchar}[@var{in-tabwidth}]]
2827 @itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
2828 @opindex -e
2829 @opindex --expand-tabs
2830 @cindex input tabs
2831 入力の際にタブをスペースに展開する。省略できる引数 @var{in-tabchar} は、
2832 入力で使われるタブ文字である (デフォルトは TAB 文字)。これも省略
2833 できる二番目の引数 @var{in-tabwidth} は、入力で使われるタブ文字の幅で
2834 ある。(デフォルトは 8 桁)。
2835
2836 @item -f
2837 @itemx -F
2838 @itemx --form-feed
2839 @opindex -F
2840 @opindex -f
2841 @opindex --form-feed
2842 複数個の改行文字ではなく、1 個のフォームフィードを使用して、出力
2843 する各ページを分離する。このオプションによって、66 行というデフォ
2844 ルトのページの長さが変わることはない。
2845
2846 @item -h @var{header}
2847 @itemx --header=@var{header}
2848 @opindex -h
2849 @opindex --header
2850 ヘッダのファイル名の部分を、中央揃えの @var{header} という文字列で置き換
2851 える。シェル上では、@var{header} はクォートするべきである。また、@option{-h}
2852 との間に空白を入れた方がよい。
2853
2854 @item -i[@var{out-tabchar}[@var{out-tabwidth}]]
2855 @itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
2856 @opindex -i
2857 @opindex --output-tabs
2858 @cindex output tabs
2859 出力の際にスペースをタブで置き換える。省略できる引数 @var{out-tabchar}
2860 は、出力で使われるタブ文字である (デフォルトは TAB 文字)。これも
2861 省略できる二番目の引数 @var{out-tabwidth} は、出力で使われるタブ文字の
2862 幅である (デフォルトは 8 桁)。
2863
2864 @item -J
2865 @itemx --join-lines
2866 @opindex -J
2867 @opindex --join-lines
2868 長い行は長いまま結合する。段組みオプション @option{-@var{column}}, @option{-a -@var{column}},
2869 @option{-m} と併せて使用する。@option{-W/-w} による行の切り詰めが無効になる。段の
2870 整列も行わなくなる。@option{--sep-string[=@var{string}]} と併せて使ってもよい。
2871 @option{-J} というオプションが (@option{-W} や @option{--sep-string} とともに) 新たに
2872 設けられたのは、@option{-w} や @option{-s} という、前からある (POSIX に準拠した)
2873 オプションを 3 種の段組みオプションと組み合わせて使ったときの混乱を
2874 解消するためである。
2875
2876
2877 @item -l @var{page_length}
2878 @itemx --length=@var{page_length}
2879 @opindex -l
2880 @opindex --length
2881 1 ページの行数を、ヘッダ行 (及び フッタ行) を含めて、@var{page_length}
2882 行にする (デフォルトは 66 行)。@var{page_length} が 10 行以下だったら、
2883 @option{-t} オプションが指定されたかのように、 ヘッダとフッタは省略する。
2884
2885 @item -m
2886 @itemx --merge
2887 @opindex -m
2888 @opindex --merge
2889 すべての @var{file} を統合し、各段に 1 ファイルを割り当てて、平行表示
2890 する。長すぎて段に納まらない行があれば、@option{-J} オプションが使用
2891 されていないかぎり、切り詰めが行われる。@option{--sep-string[=@var{string}]} を
2892 指定してもよい。いづれかの @var{file} に (フォームフィードの指定により)
2893 空白のページが存在すると、空白の段が生ずるが、それでも段を分離する
2894 記号の @var{string} は表示される。すなわち、統合されたファイルの最初から
2895 最後まで、行番号と (訳注: これはもちろん、@option{-n} オプションが指定され
2896 ている場合) 段の分離記号は、連続して表示されるわけだ。ただし、統合
2897 されたページのどの段も空白の場合は、分離記号も行番号も表示されない。
2898 デフォルトのヘッダは、@samp{@var{date} @var{page}} という形式になり、中央には空白が
2899 挿入される。@option{-h} や @option{--header} オプションを @option{-m} と一緒に使えば、
2900 この中央の空白部分に文字列を入れることができる。
2901
2902 @item -n[@var{number-separator}[@var{digits}]]
2903 @itemx --number-lines[=@var{number-separator}[@var{digits}]]
2904 @opindex -n
2905 @opindex --number-lines
2906 @var{digits} の幅の行番号を表示する (@var{digits} のデフォルトは 5 桁)。通常の
2907 多段組みの出力では、行番号は、各段ごとに本文の最初の @var{digits} 桁分の
2908 位置を占めるが、@option{-m} の出力の場合は、各行の先頭だけに表示される。
2909 1 段組みでは、@option{-m} の場合と同様、各行の先頭に付く。デフォルトでは、
2910 行数は、入力ファイルの最初の行から数え始める (表示される最初の行
2911 からではない。@option{--page} や @option{-N} オプションを参照)。省略可能な引数
2912 @var{number-separator} は、行番号の後ろに付けて、後に続く本文と区別する
2913 ための文字であり、デフォルトのセパレータはタブ文字である。厳密に
2914 言うと、常にタブが表示されるのは、1 段組みの出力のときだけである。
2915 タブの幅は、本来タブの現れる位置によって変化し、たとえば、@option{-o}
2916 オプションで指定される左の余白 (@var{margin}) によって変わってくるもの
2917 である。しかし、多段組みの出力では、「出力される段の幅が同じになる」
2918 ことが優先されるため (POSIX の仕様)、タブの幅は、最初の段における
2919 値に固定され、左の余白の値が変わっても、変化することはない。従って、
2920 @var{number-separator} であるタブの位置には、常に一定数のスペースが表示
2921 されることになる。スペースをタブに置き換えるかどうかは、出力される
2922 位置次第である。
2923
2924 @item -N @var{line_number}
2925 @itemx --first-line-number=@var{line_number}
2926 @opindex -N
2927 @opindex --first-line-number
2928 表示される最初のページの最初の行を @var{line_number} として行を数えて
2929 行く (入力ファイルの最初の行以外から表示を始めるときによく使う)。
2930
2931 @item -o @var{margin}
2932 @itemx --indent=@var{margin}
2933 @opindex -o
2934 @opindex --indent
2935 @cindex indenting lines
2936 @cindex left margin
2937 スペース @var{margin} 個分の余白で各行をインデントする (デフォルトは、
2938 スペース 0 個)。ページの横幅は、@option{-W/-w} で指定した @var{page_width} と
2939 余白を合計したサイズになる。行番号付きの 1 段組み出力では、行から
2940 少しはみ出す文字が生ずるかもしれない (@option{-n} オプション参照)。
2941
2942 @item -r
2943 @itemx --no-file-warnings
2944 @opindex -r
2945 @opindex --no-file-warnings
2946 引数 @var{file} がオープンできないときも、警告メッセージを表示しない
2947 (終了ステータスは、それでもやはり 0 以外になる)。
2948
2949 @item -s[@var{char}]
2950 @itemx --separator[=@var{char}]
2951 @opindex -s
2952 @opindex --separator
2953 段と段の区切りに 1 個の文字 @var{char} を使う。@option{-s} オプションを
2954 指定したときのデフォルトの @var{char} は、@option{-w} オプションを同時に
2955 指定しなければタブ、指定すれば「なし」である。なお、@option{-s}
2956 オプションを指定しない場合のデフォルトのセパレータはスペースだ。
2957 @option{-s[char]} オプションを使用すると、@option{-w} も同時に指定しないかぎり、
2958 3 種の段組みオプション (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m})
2959 のすべてにおいて、行の切り詰めが行われない。
2960 これは、POSIX に準拠した仕様である。
2961
2962
2963 @item -S[@var{string}]
2964 @itemx --sep-string[=@var{string}]
2965 @opindex -S
2966 @opindex --sep-string
2967 出力される段の区切りに、文字列 @var{string} を使用する。@option{-s} オプション
2968 が @option{-W/-w} オプションに影響を及ぼすのとは異なり、@option{-S} オプション
2969 は @option{-W/-w} オプションに影響を及ぼさない。また、行の切り詰めや段の
2970 整列にも影響しない。@option{-S} オプションを指定せずに、@option{-J} オプション
2971 を指定すると、@command{pr} はデフォルトの出力セパレータであるタブを使用
2972 する (訳注: @option{-J} 使用時のデフォルトということだと思う)。@option{-S} も
2973 @option{-J} も指定しない場合、@command{pr} が区切りに使用するのはスペースである
2974 (@option{-S"@w{ }"} と同じこと)。@option{-S} だけで、引数の @samp{@var{string}} を指定しないと、
2975 空文字列 (@samp{""}) を指定したことになる。
2976
2977 @item -t
2978 @itemx --omit-header
2979 @opindex -t
2980 @opindex --omit-header
2981 常とは異なり、各ページにヘッダ (とフッタ) を表示しない。また、
2982 ページの最下部を (空行やフォームフィードで) 埋めることもしない。
2983 ページ構成は行わないが、入力ファイルにあるフォームフィードは、
2984 そのままにしておく。つまり、あらかじめ決めておいたページ分割は、
2985 変わらないわけだ。@option{-t} や @option{-T} オプションは、他のオプションと
2986 組み合わせて使うと、便利なことがある。たとえば、@option{-t -e4} は、入力
2987 ファイルのタブ文字を 4 個のスペースに展開するが、それ以外何の
2988 変更も行わない。@option{-t} オプションを使用すると、@option{-h} オプションが
2989 無効になる。
2990
2991 @item -T
2992 @itemx --omit-pagination
2993 @opindex -T
2994 @opindex --omit-pagination
2995 ヘッダ (とフッタ) を表示しない。さらに、入力ファイルにあるフォーム
2996 フィードをすべて取り除く。
2997
2998 @item -v
2999 @itemx --show-nonprinting
3000 @opindex -v
3001 @opindex --show-nonprinting
3002 非表示文字をバックスラッシュ付きの 8 進数表記で表示する。
3003
3004 @item -w @var{page_width}
3005 @itemx --width=@var{page_width}
3006 @opindex -w
3007 @opindex --width
3008 本文を多段組み出力にしたときのみ、ページの幅を @var{page_width} 文字に
3009 する (@var{page_width} のデフォルトは 72 字)。多段組みで @option{-w} オプション
3010 を指定せず、@option{-s[CHAR]} オプションだけ指定すると、デフォルトの
3011 ページ幅が無効になり、行の切り詰めや段の整列も行われなくなる。
3012 すなわち、多段組みのオプションが指定されているのに、各行が、
3013 長いものは長いまま結合されてしまうのだ。なお、1 段組みの出力では、
3014 @var{page_width} の指定はできない。以上は、POSIX に準拠した仕様である。
3015
3016 @item -W @var{page_width}
3017 @itemx --page_width=@var{page_width}
3018 @opindex -W
3019 @opindex --page_width
3020 ページの幅を @var{page_width} 文字にする。この指定は、段組みオプションが
3021 あってもなくても、有効である。@option{-J} オプションを使用しないかぎり、
3022 本文の行が切り詰められる。3 種の段組みオプション (@option{-@var{column}},
3023 @option{-a -@var{column}}, @option{-m}) と組み合わせて使った場合、段の整列が常に行われる。
3024 セパレータを指定するオプションの @option{-S} や @option{-s} は、@option{-W} オプションに
3025 影響を及ぼさない。デフォルトは 72 文字である。@option{-W @var{page_width}} も
3026 なく、段組みオプションも全く指定されていない場合に、行の切り詰めが
3027 行われることは絶対にない (下位互換を維持しつつ、よく行われる作業の
3028 ほとんどに対応するために、そうなっている)。この動作は、@option{-W 72 -J}
3029 と同じである。なお、ヘッダ行が切り詰められることは絶対にない。
3030
3031 @end table
3032
3033 @exitstatus
3034
3035
3036 @node fold invocation
3037 @section @command{fold}: 入力行を指定された幅に合わせて折り返す
3038
3039 @pindex fold
3040 @cindex wrapping long input lines
3041 @cindex folding long input lines
3042
3043 @command{fold} は、各 @var{file} (@option{-} は標準入力を表す) を、長い行は折り返して、標準
3044 出力に書き出す。@var{file} が指定されていない場合は、標準入力を対象にする。
3045 (訳注: @command{fold} の日本語対応は完全ではない。出力行の長さによっては、
3046 あるいは、日本語にアルファベットが混じると、文字化けすることがある。)
3047 @sp 1
3048 書式:
3049
3050 @example
3051 fold [@var{option}]@dots{} [@var{file}]@dots{}
3052 @end example
3053
3054 デフォルトでは、@command{fold} は 80 桁よりも長い行を折り返す。出力は必要なら
3055 何行にも分割されることになる。
3056
3057 @cindex screen columns
3058 @command{fold} はデフォルトでは、画面上の桁数を数える。従って、タブは 2 桁
3059 以上に数えられるかもしれないし、バックスペースは桁数を減らすことになる。
3060 また、復帰文字 (carriage return) は、桁数を 0 にする。
3061
3062 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3063
3064 @table @samp
3065
3066 @item -b
3067 @itemx --bytes
3068 @opindex -b
3069 @opindex --bytes
3070 桁数ではなく、バイト数を数える。従って、タブ、バックスペース、復帰
3071 文字も、他の文字と全く同じように、それぞれ 1 桁を占めるものとして
3072 計算される。
3073
3074 @item -s
3075 @itemx --spaces
3076 @opindex -s
3077 @opindex --spaces
3078 単語境界で折り返す。行は、行の最大長より前にある最後の空白の後ろで
3079 折り返される。行にそうした空白がない場合は、通常通り、行の最大長で
3080 折り返される。
3081
3082 @item -w @var{width}
3083 @itemx --width=@var{width}
3084 @opindex -w
3085 @opindex --width
3086 行の最大長に 80 桁ではなく、@var{width} 桁を使用する。
3087
3088 互換性のために、@command{fold} は古い書式のオプション @option{-@var{width}} もサポート
3089 している。新しいスクリプトでは、@option{-w @var{width}} の方を使用すべきである。
3090
3091 @end table
3092
3093 @exitstatus
3094
3095
3096 @node Output of parts of files
3097 @chapter ファイルの部分出力
3098
3099 @cindex output of parts of files
3100 @cindex parts of files, output of
3101
3102 以下のコマンドは、入力の一部を出力する。
3103
3104 @menu
3105 * head invocation::          ファイルの先頭部分を出力する。
3106 * tail invocation::          ファイルの末尾部分を出力する。
3107 * split invocation::         ファイルを分割する
3108 * csplit invocation::        ファイルを内容を目印にして分割する。
3109 @end menu
3110
3111 @node head invocation
3112 @section @command{head}: ファイルの先頭部分を出力する
3113
3114 @pindex head
3115 @cindex initial part of files, outputting
3116 @cindex first part of files, outputting
3117
3118 @command{head} は、各 @var{file} の先頭部分 (デフォルトでは 10 行) を表示する。
3119 ファイルが指定されていない場合や、@var{file} として @option{-} が指定されている
3120 場合は、標準入力から読み込む。
3121 @sp 1
3122 書式:
3123
3124 @example
3125 head [@var{option}]@dots{} [@var{file}]@dots{}
3126 @end example
3127
3128 指定された @var{file} が 2 個以上あると、@command{head} は、次のような 1 行
3129 からなるヘッダを出力する。
3130
3131 @example
3132 ==> @var{file name} <==
3133 @end example
3134
3135 @noindent
3136 このヘッダは、各 @var{file} の出力の前に置かれる。
3137
3138 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3139
3140 @table @samp
3141
3142 @item -c @var{k}
3143 @itemx --bytes=@var{k}
3144 @opindex -c
3145 @opindex --bytes
3146 ファイルの先頭数行を表示する代わりに、先頭から @var{k} バイトを表示する。
3147 ただし、@var{k} が @samp{-} で始まっている場合は、各ファイルについて、末尾の
3148 @var{k} バイトを除いたすべてを表示することになる。@multiplierSuffixes{k}
3149
3150 @item -n @var{k}
3151 @itemx --lines=@var{k}
3152 @opindex -n
3153 @opindex --lines
3154 ファイルの先頭から @var{k} 行を表示する。ただし、@var{k} が @samp{-} で始まっている
3155 場合は、各ファイルについて、末尾の @var{k} 行を除いたすべてを表示すること
3156 になる。サイズの乗数接尾辞は、@option{-c} オプションの場合と同様である。
3157
3158 @item -q
3159 @itemx --quiet
3160 @itemx --silent
3161 @opindex -q
3162 @opindex --quiet
3163 @opindex --silent
3164 ファイル名を示すヘッダを出力しない。
3165
3166 @item -v
3167 @itemx --verbose
3168 @opindex -v
3169 @opindex --verbose
3170 ファイル名を示すヘッダを常に出力する。
3171
3172 @end table
3173
3174 @command{head} は、互換性を考慮して、@option{-@var{count}[@var{options}]} というオプション指定
3175 の古い書式もサポートしている。ただし、この書式が認識されるのは、最初の
3176 オプションとして指定されたときだけである。@var{count} は 10 進数であり、@option{-c}
3177 オプションの場合と同様、サイズを示す文字 (@samp{b}, @samp{k}, @samp{m}) を後ろに続けて
3178 もよく、また、行数であることを明示する @samp{l} や、ほかのオプション文字
3179 (@samp{cqv}) を続けることもできる。標準的なホストで使うことを意図したスク
3180 リプトでは、古い書式ではなく、@option{-c @var{count}} や @option{-n @var{count}} を使用するべきで
3181 ある。そのスクリプトが、古い書式にしか対応していないホストでも動作する
3182 必要がある場合は、@command{head} を使わないで済ました方が、たいていの場合
3183 簡明である。たとえば、@samp{head -5} の代わりに、@samp{sed 5q} を使用するわけだ。
3184
3185 @exitstatus
3186
3187
3188 @node tail invocation
3189 @section @command{tail}: ファイルの末尾部分を出力する
3190
3191 @pindex tail
3192 @cindex last part of files, outputting
3193
3194 @command{tail} は、各 @var{file} の末尾部分 (デフォルトでは 10 行) を表示する。
3195 ファイルが指定されていない場合や、@var{file} として @samp{-} が指定されている
3196 場合は、標準入力から読み込む。
3197 @sp 1
3198 書式:
3199
3200 @example
3201 tail [@var{option}]@dots{} [@var{file}]@dots{}
3202 @end example
3203
3204 指定された @var{file} が 2 個以上あると、@command{tail} は、以下のような 1 行
3205 からなるヘッダを出力する。
3206
3207 @example
3208 ==> @var{file name} <==
3209 @end example
3210
3211 @noindent
3212 このヘッダは、各 @var{file} の出力の前に置かれる。
3213
3214 @cindex BSD @command{tail}
3215 GNU の @command{tail} は、出力するデータの量に制限がない (ほかの系統の
3216 @command{tail} には、制限があるものもある)。また、GNU の @command{tail} には、
3217 @option{-r} オプション (逆順で表示する) が存在しない。ファイルを逆順にするのは、
3218 ファイルの末端部分を表示するのとは、全く別の仕事だからだ。BSD の @command{tail}
3219 には、@option{-r} があるが、バッファの大きさまでのファイルしか逆順にできず、
3220 それは通常 32 KiB である。ファイルを逆順にするなら、GNU の @command{tac}
3221 コマンドの方が、信頼性という点でも、用途の広さという点でも優れている。
3222
3223 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3224
3225 @table @samp
3226
3227 @item -c @var{k}
3228 @itemx --bytes=@var{k}
3229 @opindex -c
3230 @opindex --bytes
3231 ファイルの末尾数行を出力する代わりに、末尾の @var{k} バイトを出力する。
3232 ただし、@var{k} が @samp{+} で始まっている場合は、各ファイルの末端から @var{k}
3233 バイト目ではなく、先頭から @var{k} バイト目を始点として出力を開始する。
3234 @multiplierSuffixes{k}
3235
3236 @item -f
3237 @itemx --follow[=@var{how}]
3238 @opindex -f
3239 @opindex --follow
3240 @cindex growing files
3241 @vindex name @r{follow option}
3242 @vindex descriptor @r{follow option}
3243 ファイルの末端まで達しても、さらに文字を読み込もうとして、無限
3244 ループする。たぶん、ファイルのサイズが増加し続けているからである。
3245 複数のファイルが指定されている場合、@command{tail} は、異なるファイル
3246 から出力があるたびに、その出力がどのファイルから来たものかわかる
3247 ように、ヘッダを表示する。
3248
3249 このオプションを使ってファイルの追跡をするとき、二つの方法が選択
3250 できるが、その違いがわかるのは、追いかけているファイルが消去され
3251 たり、名前を変更されたりしたときだけである。もし、増大しつつある
3252 ファイルが削除されたあとでも、そのファイルの末尾の追跡を続行したい
3253 ならば、@option{--follow=descriptor} を使用すればよい。これがデフォルト
3254 の動作だが、ログファイルを追跡している際には、役に立たない。ログ
3255 ファイルは、ローテートされる (すなわち、消去、または名前を変更
3256 されてから、改めてオープンされる) 可能性があるからだ。そうした
3257 場合には、@option{--follow=name} を使用すれば、指定した名前のファイルを
3258 追跡することができる。おそらく追跡には、定期的にその名前のファイル
3259 をオープンし直すことで、何らかのプログラムによってファイルが消去
3260 されてから再作成されなかったかどうかを確かめるといった方法が、
3261 使われることだろう。なお、inotify をベースにした実装では、こうした
3262 ケースを処理するのに、ファイルを定期的に再オープンする必要がない
3263 ことを付記しておく。
3264
3265 どちらの方法を使った場合でも、追跡中のファイルのサイズが小さく
3266 なっていることがわかると、 @command{tail} は、ファイルが短縮されたという
3267 メッセージを出し、ファイルの末端と改めて判断したところからファイル
3268 の追尾を再開する。
3269
3270 ファイルが消去されたときの @command{tail} の動作は、追いかけているものが、
3271 名前か (@option{--follow=name})、ディスクリプタか (@option{--follow=descriptor})
3272 によって異なっている。名前による追跡の場合、tail はファイルが消去
3273 されたことを検出できるので、その旨メッセージを表示する。このとき、
3274 @option{--retry} も指定されていると、同じ名前のファイルが再作成されている
3275 かどうか、定期的な検査を継続して行う。ディスクリプタを追跡する場合は、
3276 ファイルが削除されたり、名前の変更が行われたりしても、tail はそれを
3277 検出しないので、メッセージを出さない。そうしたファイルが、もはや元の
3278 名前ではアクセスできなくなっていても、なお増大し続けているということ
3279 もありえる。
3280
3281 @samp{descriptor} や @samp{name} というオプションの値は、長い方のオプションの
3282 形式によってのみ指定できる。@option{-f} では指定できない。
3283
3284 オペランド @var{file} が全く指定されていず、しかも標準入力が FIFO や
3285 パイプである場合、@option{-f} オプションは無視される。また、標準入力が
3286 FIFO やパイプである場合には、@samp{-} という形で指定されたオペランドが
3287 あっても、@option{-f} はそれに対して効果を持たない。
3288
3289 カーネルが inotify をサポートしていると、出力はファイルの変更が
3290 引き金になるので、一般に反応がキビキビしている。それに対して、
3291 カーネルが inotify をサポートしていないと、@command{tail} はチェック
3292 ごとに 1 秒間スリープするので (このデフォルトを変更するには、
3293 @option{--sleep-interval=@var{n}} を使用する)、出力の反応がやや遅めに感じられ
3294 たり、断続的に感じられたりするかもしれない。inotify のサポート
3295 なしで tail を使用する場合、反応を向上させるには、sleep する間隔を
3296 1 秒以下に設定すればよい。たとえば、次のようなエイリアスを作成する
3297 わけだ。
3298
3299 @example
3300 alias tail='tail -s.1'
3301 @end example
3302
3303 @item -F
3304 @opindex -F
3305 このオプションは @option{--follow=name --retry} と同じである。すなわち、
3306 ファイルが消去された場合、tail はその名前のファイルをオープン
3307 し直そうとする。それに失敗しても、ファイルに再びアクセスできるように
3308 なるまで、再オープンを試み続ける。
3309
3310 @item --retry
3311 @opindex --retry
3312 指定された名前のファイルを繰り返し何度でもオープンしようとする。
3313 このオプションが役に立つのは、ファイルの末尾を追跡している場合が
3314 ほとんどである (それ以外の場合は、警告メッセージを出す)。
3315
3316 ファイル・ディスクリプタによって追跡している場合は (すなわち、
3317 @option{--follow=descriptor} の場合は)、このオプションは、最初に
3318 ファイルをオープンするときの動作にしか影響しない。ひとたび
3319 オープンに成功してしまえば、@command{tail} は、ファイル名ではなく、
3320 ファイル・ディスクリプタを追跡することになるからである。
3321
3322 ファイル名によって追跡している場合は (すなわち、@option{--follow=name}
3323 の場合は)、@command{tail} は、ユーザによって中断 (kill) されるまで、
3324 いつまでも繰り返しその名前のファイルを再オープンしようとする。
3325
3326 このオプションを付けないと、 @command{tail} は、ファイルが存在しなく
3327 なったり、何かほかの理由でファイルにアクセスできなくなったりする
3328 ことがあっても、その旨報告するだけで、以後再検査を行うことがない。
3329
3330 @item --sleep-interval=@var{number}
3331 @opindex --sleep-interval
3332 何秒間隔で追尾・表示動作を行うかを変更する (デフォルトは 1.0 秒
3333 間隔)。@command{tail} は動作の繰り返しごとに、指定されたすべてのファイル
3334 について、サイズが変わっていないかどうかのチェックを行う。@command{tail}
3335 の伝統的な実装では、@var{number} は整数でなければならなかったが、GNU の
3336 @command{tail} では、任意の浮動小数点数を指定することが可能になっている。
3337 @xref{Floating point}.  @command{tail} が inotify を使用していると、
3338 このポーリング関係の (polling-related) オプションは通常無視される。
3339 ただし、@option{--pid=@var{p}} も一緒に指定されている場合は別で、その場合は、
3340 プロセス @var{p} が生きているかどうかを、@command{tail} が少なくとも
3341 @var{number} 間隔でチェックすることになる。
3342
3343 @item --pid=@var{pid}
3344 @opindex --pid
3345 追跡が名前によって行われていようと、ディスクリプタによって行われて
3346 いようと、@var{file} 引数で指定されたすべてのファイルに書き込みを行う
3347 プログラムがたった一つならば、そのプログラムのプロセス番号 @var{pid}
3348 を指定することができる。そうしておくと、そのプロセスが終了する直後に
3349 tail も終了するようになるのだ。これがきちんと動作するのは、書き込み
3350 プログラムと tail のプロセスが、同じマシンで動いているときだけで
3351 ある。たとえば、プログラムをビルドするとき、その出力をファイルに
3352 保存しながら、ファイルが増大して行くのを見守りたいならば、下記の
3353 ように @command{make} と @command{tail} を実行すればよい。そうすれば、ビルドが完了
3354 したとき、tail のプロセスも終了する。このオプションを使わない
3355 場合は、@code{tail -f} のプロセスを自分で止めなければならないだろう。
3356
3357 @example
3358 $ make >& makerr & tail --pid=$! -f makerr
3359 @end example
3360
3361 使用されていない @var{pid} を指定した場合や、tail が対象とするファイルに
3362 書き込んでいるプロセスとは別のプロセスの @var{pid} を指定した場合は、
3363 @command{tail} は、@var{file} の増大が止まるずっと前に終了してしまうかもしれ
3364 ないし、実際に書き込んでいるプログラムが終了してしまっても、当分
3365 の間終了しないかもしれない。気をつけてほしいが、システムによっては、
3366 @option{--pid} が使えないことがある。その場合、@command{tail} は警告メッセージ
3367 を出すはずだ。
3368
3369 @item --max-unchanged-stats=@var{n}
3370 @opindex --max-unchanged-stats
3371 名前によってファイルの追尾を行っているとき、連続して @var{n} 回 (デフォ
3372 ルトは n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS})
3373 追尾動作を実行しても、その間にファイルに変更がなかった
3374 場合に、ファイルを @code{open} し、@code{fstat} して、そのファイル名と結び
3375 ついている「デバイス番号/inode 番号」の組み合わせが、今でも前と同じ
3376 ままかどうかを確認する。ローテートを行うログファイルを追跡している
3377 場合、この @var{n} は、tail がローテートする前に最後の行を表示してから、
3378 新しいログファイルに溜まっている行を表示するまでの秒数に、ほぼ等
3379 しい。このオプションに意味があるのは、ポーリングを使用して (すな
3380 わち、inotify を使わずに)、名前による追跡を行うときだけである。
3381
3382 @item -n @var{k}
3383 @itemx --lines=@var{k}
3384 @opindex -n
3385 @opindex --lines
3386 末尾の  @var{k} 行を出力する。ただし、@var{k} が @samp{+} で始まっている場合は、
3387 各ファイルの末端から @var{k} 行目ではなく、先頭から @var{k} 行目を始点として
3388 出力を開始する。サイズの乗数接尾辞は、@option{-c} の場合と同様である。
3389
3390 @item -q
3391 @itemx --quiet
3392 @itemx --silent
3393 @opindex -q
3394 @opindex --quiet
3395 @opindex --silent
3396 ファイル名を示すヘッダを出力しない。
3397
3398 @item -v
3399 @itemx --verbose
3400 @opindex -v
3401 @opindex --verbose
3402 ファイル名を示すヘッダを常に出力する。
3403
3404 @end table
3405
3406 @command{tail} は互換性のために、@samp{tail -[@var{count}][bcl][f] [@var{file}]}
3407 という古い
3408 用法もサポートしているが、それが認識されるのは、上で説明した用法と衝突
3409 しないときだけである。この旧式の書式では、オプションはただ 1 個しか指定
3410 できず、ファイルも 1 個までしか指定できない。オプション中の @var{count} は、
3411 省略可能な 10 進数であり、サイズを表す文字 (@samp{b}, @samp{c}, @samp{l}) を後ろに
3412 続けて、1 ブロック当たり 512 バイトのブロック数か、バイト数か、行数かを
3413 示すことができる。また、@option{-f} と同じ意味を持つ、@samp{f} を続けてもよい。
3414
3415 @vindex _POSIX2_VERSION
3416 古いシステムでは、旧式のオプション書式において、先頭の @samp{-} を @option{-c}
3417 や @option{-n} オプションの場合と同じ意味で @samp{+} に置き換えることができる。
3418 また、そうしたシステムでは、古い用法と標準の用法が衝突する場合には、
3419 古い用法が優先される。そうした古い動作を有効にしたり、無効にしたりする
3420 には、環境変数 @env{_POSIX2_VERSION} を使用すればよい (@pxref{Standards conformance})。
3421
3422 標準的なホストで使用するためのスクリプトでは、古い書式を使わずに、
3423 @option{-c @var{count}[b]}, @option{-n @var{count}} オプションや @option{-f}
3424 オプションの方を使うべきで
3425 ある。そのスクリプトが、古い書式にしか対応していないホストでも動作しな
3426 ければならない場合でも、問題を起こしかねない表現を避けるように書き直す
3427 ことが、たいていはできるものだ。たとえば、@samp{tail -1} の代わりに、
3428 @samp{sed -n '$p'} を使うといった具合である。それさえ不可能な場合は、どちらの
3429 書式を使うべきかを判断するために、@samp{if tail -c +1 </dev/null >/dev/null
3430 2>&1; then @dots{}} といった条件文をスクリプトで使用すればよい。
3431
3432 作成するスクリプトが標準的な動作を想定している場合でも、POSIX の
3433 バージョンによって動作に違いのある用法には、気を付けた方がよい。
3434 たとえば、@samp{tail - main.c} は避けるべきである。@samp{tail main.c} と解釈する
3435 ことも、@samp{tail -- - main.c} と解釈することもできるからだ。@samp{tail -c 4}
3436 も避けるべきである。@samp{tail -c4} を意味するかもしれないし、@samp{tail -c 10 4}
3437 を意味するかもしれない。@samp{tail +4} も使わない方がよい。@samp{tail ./+4} の
3438 意味にも、@samp{tail -n +4} の意味にも取れるからである。
3439
3440 @exitstatus
3441
3442
3443 @node split invocation
3444 @section @command{split}: ファイルを分割する。
3445
3446 @pindex split
3447 @cindex splitting a file into pieces
3448 @cindex pieces, splitting a file into
3449
3450 @command{split} は、入力ファイル @var{input} を分割して複数の出力ファイルを作成する。
3451 各出力ファイルには、@var{input} の断片が、連続した形で、あるいは 1 行づつ
3452 順番に分配された形で含まれることになる (訳注: 前者は単純な分割であり、
3453 後者は後述の「ラウンド・ロビン方式」である。@option{-n} オプションを参照)。
3454 @var{input} が指定されていない場合や、@samp{-} である場合には、標準入力から
3455 読み込む。
3456 @sp 1
3457 書式:
3458
3459 @example
3460 split [@var{option}] [@var{input} [@var{prefix}]]
3461 @end example
3462
3463 デフォルトでは、@command{split} は @var{input} を 1000 行づつ各出力ファイルに
3464 書き込む (最後の断片については、何行であれ残っている行を書き込む)。
3465
3466 @cindex output file name prefix
3467 出力ファイルの名前は、上記書式の @var{prefix} (デフォルトでは @samp{x}) に複数
3468 の文字 (デフォルトでは、@samp{aa}, @samp{ab}, @dots{}) を続けたものであり、各出力
3469 ファイルをファイル名による伝統的なソート順で結合すると、元の入力ファイル
3470 が再構成されるようになっている (ただし、@option{-nr/@var{n}} オプションを指定した場合
3471 は除く)。デフォルトでは、split はまず、作成するファイルに 2 文字からなる
3472 接尾辞 (訳注: suffix、すなわち上記の @samp{aa}, @samp{ab} など) を生成して付け、
3473 その接尾辞の 1 番目の文字がアルファベットの最後に達した時点で、接尾辞を
3474 2 文字づつ増やして行く (@samp{yz} の次は @samp{zaaa}, @samp{zaab}, @dots{} という具合)。
3475 こうした命名法を使えば、出力ファイルがいくつあっても対応できるし、また
3476 @option{--additional-suffix} オプションを付けたときでも、出力ファイルが上で
3477 述べたような順に並ぶことになるわけだ。@option{-a} オプションが指定されている
3478 場合に、出力ファイルの名前が種切れになってしまうと、@command{split} はエラー
3479 メッセージを出すが、作成した出力ファイルを消去することはない。
3480
3481 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3482
3483 @table @samp
3484
3485 @item -l @var{lines}
3486 @itemx --lines=@var{lines}
3487 @opindex -l
3488 @opindex --lines
3489 @var{input} から @var{lines} 行づつ各出力ファイルに書き込む。
3490
3491 互換性を考慮して、@command{split} は @option{-@var{lines}} という古いオプションの書式も
3492 サポートしている。新規にスクリプトを書くなら、@option{-l @var{lines}} の方を使う
3493 べきである。
3494
3495 @item -b @var{size}
3496 @itemx --bytes=@var{size}
3497 @opindex -b
3498 @opindex --bytes
3499 @var{input} から @var{size} バイトづつ各出力ファイルに書き込む。
3500 @multiplierSuffixes{size}
3501
3502 @item -C @var{size}
3503 @itemx --line-bytes=@var{size}
3504 @opindex -C
3505 @opindex --line-bytes
3506 各出力ファイルに、ファイルサイズが @var{size} バイトを超過しない範囲で、
3507 @var{input} の完全な行をできるだけ多く書き込む。1 行の長さが @var{size} バイト
3508 を越える行は、複数のファイルに分割される。@var{size} の書式は、@option{--bytes}
3509 オプションの場合と同じである。
3510
3511 @item --filter=@var{command}
3512 @opindex --filter
3513 このオプションを使用すると、各出力は、そのままファイルに書き出さ
3514 れるのではなく、パイプを通して一つづつ、指定されたシェルコマンド
3515 @var{command} に引き渡される。@var{command} 中では、環境変数 $FILE を使用する
3516 べきであり、この変数には、シェルコマンドを実行するごとに、異なる
3517 出力ファイル名が代入される。たとえば、1TiB の圧縮ファイルがあると
3518 しよう。伸長したら、サイズが大きすぎて、ディスクに納まり切らない。
3519 しかし、それを分割して、もっと扱いやすいサイズの、それぞれ圧縮した
3520 ファイルを作らねばならない。そうした課題を解決するには、次のような
3521 コマンドを実行すればよいだろう。
3522
3523 @example
3524 xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
3525 @end example
3526
3527 圧縮率が 10:1 だとすると、上のコマンドは 20GiB のファイルを 50 個
3528 ほど生成することになるだろう。ファイルの名前は、@file{big-aa.xz},
3529 @file{big-ab.xz}, @file{big-ac.xz} などになる。
3530
3531 @item -n @var{chunks}
3532 @itemx --number=@var{chunks}
3533 @opindex -n
3534 @opindex --number
3535
3536 @var{input} を @var{chunks} 個の出力ファイルに分割する。@var{chunks} の部分には以下の
3537 ものが指定できる。
3538
3539 @example
3540 @var{n}      @var{input} の現在のサイズに基づいて @var{n} 個のファイルを生成する。
3541 @var{k}/@var{n}    @var{n} 個中の @var{k} 番目のみを標準出力へ出力する。
3542 l/@var{n}    @var{n} 個のファイルを生成する。行の途中で分割しない。
3543 l/@var{k}/@var{n}  同上。ただし、@var{n} 個中の @var{k} 番目のみを標準出力に出力する。
3544 r/@var{n}    @samp{l} に似ている。ただし、行をラウンド・ロビン方式で分配する。
3545        (訳注: トランプの親がカードを 1 枚づつ子に配るように、
3546                入力から 1 行づつ各出力ファイルに分配して行く。)
3547 r/@var{k}/@var{n}  同上。ただし、@var{n} 個中の @var{k} 番目のみを標準出力に出力する。
3548 @end example
3549
3550 @var{input} を  @var{n} 個の「部分 (chunk)」に分けたときに出た余りのバイトは、
3551 最後の「部分」に割り振られる。最初に行われる分割のための計算の後で
3552 追加されるバイトがあっても、それは捨て去られる (@samp{r} モードを使用
3553 している場合を除く)。
3554
3555 @var{input} の行数が @var{n} 行に足りなかったり、@var{input} が短縮された場合でも、
3556 @var{n} 個のファイルすべてが作成される。
3557
3558 @samp{l} モードについて言うと、「部分」の大きさは、「@var{input} サイズ / @var{n}」
3559 前後になる。@var{input} は、まず @var{n} 個の同一サイズの区画 (partition) に
3560 分割され、余りがあれば、それは最後の区画に割り当てられる。ある行の
3561 先頭が、ある区画の内側にある場合、その行は行末まで、その区画に対応
3562 するファイルに書き込まれる。行は、たとえ後続する区画にまではみ出して
3563 いても分割されないので、書き出されるファイルは、区画のサイズより
3564 大きくなることもあれば、小さくなることもある。行が後続する区画を
3565 すっぽり覆ってしまうほど長い場合には、空っぽのファイルができること
3566 さえある。
3567
3568 @samp{r} モードでは、@var{input} のサイズは問題にならない。だから、入力は、
3569 たとえば、パイプからであっても構わない。
3570
3571 @item -a @var{length}
3572 @itemx --suffix-length=@var{length}
3573 @opindex -a
3574 @opindex --suffix-length
3575 使用する接尾辞の長さを @var{length} 文字にする。@var{length} に 0 を指定する
3576 と、@option{-a} オプションを (すでに指定していた場合でも) 全く指定しな
3577 かったのと、同じことになり、従って、デフォルトの動作が有効になる。
3578 すなわち、接尾辞は、2 文字から始まり、@option{-n} や @option{--numeric-suffixes
3579 =@var{from}} オプションが指定されていないかぎり、必要になるごとに、2 文字
3580 づつ自動的に増えて行く。
3581
3582 @item -d
3583 @itemx --numeric-suffixes[=@var{from}]
3584 @opindex -d
3585 @opindex --numeric-suffixes
3586 接尾辞にアルファベットの小文字ではなく、数字を使用する。数字の接尾
3587 辞では、 @var{from} が指定されていれば @var{from} から、指定されていなければ 0
3588 から数を数えて行く。注意していただきたいが、@var{from} の値を指定すると、
3589 上で述べた接尾辞の長さを自動的に増やして行くデフォルトの機能まで無効
3590 になる。そこで、ユーザとしては、99 を越える数字を接尾辞として使える
3591 ようにするため、@option{-a} オプションも併せて指定したくなるかもしれない。
3592
3593 @item --additional-suffix=@var{suffix}
3594 @opindex --additional-suffix
3595 出力ファイル名の末尾に @var{suffix} をさらに追加する。@var{suffix} 中に
3596 スラッシュが含まれていてはならない。
3597
3598 @item -e
3599 @itemx --elide-empty-files
3600 @opindex -e
3601 @opindex --elide-empty-files
3602 サイズ 0 の出力ファイルができないようにする。そうしたものが生成
3603 されることがあるのは、@option{--number} を使ったときである。入力ファイル
3604 が (短縮されて) 指定された数の出力ファイルを作るには分量が
3605 足りなくなっている場合や、1 行が長すぎて、後続する「部分」を
3606 すっぽり飲み込んでしまっている場合などがそれに当たる。この
3607 オプションが指定されているときでも、出力ファイルの連続番号が、
3608 順番に増えていくことに変わりはない。
3609
3610 @item -u
3611 @itemx --unbuffered
3612 @opindex -u
3613 @opindex --unbuffered
3614 @option{--number r/@dots{}} モードにおいて入力を即座に出力する。このモードは、
3615 作業にかなり時間がかかるのだ。
3616
3617 @item --verbose
3618 @opindex --verbose
3619 各出力ファイルをオープンする直前に、診断メッセージを表示する。
3620
3621 @end table
3622
3623 @exitstatus
3624
3625 @option{--number} (@option{-n}) の動作を理解していただくために、用例をいくつか
3626 挙げてみる。
3627
3628 デフォルトでは、1 行が 2 行以上に分割されることがあるのに、注目して
3629 いただきたい。
3630
3631 @example
3632 $ seq -w 6 10 > k; split -n3 k; head xa?
3633 ==> xaa <==
3634 06
3635 07
3636 ==> xab <==
3637
3638 08
3639 0
3640 ==> xac <==
3641 9
3642 10
3643 @end example
3644
3645 "l/" 修飾子を使用して、行の途中で分割しないようにする。
3646
3647 @example
3648 $ seq -w 6 10 > k; split -nl/3 k; head xa?
3649 ==> xaa <==
3650 06
3651 07
3652
3653 ==> xab <==
3654 08
3655 09
3656
3657 ==> xac <==
3658 10
3659 @end example
3660
3661 "r/" 修飾子を使用して、ラウンド・ロビン方式で分配する。
3662
3663 @example
3664 $ seq -w 6 10 > k; split -nr/3 k; head xa?
3665 ==> xaa <==
3666 06
3667 09
3668
3669 ==> xab <==
3670 07
3671 10
3672
3673 ==> xac <==
3674 08
3675 @end example
3676
3677 K 番目の「部分」だけ取り出すこともできる。次の例は、33 の「部分」に
3678 分け、そのうちの  7 番目だけを取り出して、表示している。
3679
3680 @example
3681 $ seq 100 > k; split -nl/7/33 k
3682 20
3683 21
3684 22
3685 @end example
3686
3687
3688 @node csplit invocation
3689 @section @command{csplit}: ファイルを内容を目印にして分割する。
3690
3691 @pindex csplit
3692 @cindex context splitting
3693 @cindex splitting a file into pieces by context
3694
3695 @command{csplit} は、入力ファイル @var{input} を分割して 0 個以上の出力ファイルを
3696 生成する。@var{input} が @samp{-} である場合は、標準入力から読み込む。
3697 @sp 1
3698 書式:
3699
3700 @example
3701 csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{}
3702 @end example
3703
3704 出力ファイルの中身がどうなるかは、以下で詳しく述べるように、引数
3705 @var{pattern} によって決まってくる。引数 @var{pattern} が、入力ファイル中に存在
3706 しない行を指している場合は、エラーになる (たとえば、入力の残りの
3707 部分に、指定された正規表現にマッチする行がもう存在しない場合)。
3708 すべてのパターン・マッチが終わったとき、残っている入力があれば、
3709 最後の出力ファイルに書き出される。
3710
3711 デフォルトでは、@command{csplit} は、出力ファイルを生成した後で、各出力
3712 ファイルに書き込んだバイト数を表示する。
3713
3714 パターン引数 @var{pattern} には、以下のタイプがある。
3715
3716 @table @samp
3717
3718 @item @var{n}
3719 入力の最初から @var{n} 行目の直前までを含む (つまり、@var{n-1} 行目までの)
3720 出力ファイルを作成する (@var{n} は正の整数)。繰り返し回数の指定が後に
3721 続く場合は、繰り返しごとに、入力ファイルの次の @var{n} 行分を含む出力
3722 ファイルを作成していく。
3723
3724 @item /@var{regexp}/[@var{offset}]
3725 現在行から、入力ファイル中の次に @var{regexp} にマッチする行の直前までを
3726 内容とする (すなわち、マッチする行は含まない) 出力ファイルを作成
3727 する。整数の @var{offset} を指定してもよい。指定した場合は、マッチする行
3728 にプラス/マイナス @var{offset} した行の直前までの入力が (つまり、その行は
3729 含まない)、出力ファイルに書き込まれ、書き込まれた次の行から入力の
3730 後続部分が始まることになる。
3731
3732 @item %@var{regexp}%[@var{offset}]
3733 上記のタイプと同様だが、出力ファイルを作成しない点が異なる。要するに、
3734 入力ファイルのその部分は捨てられることになるわけだ。
3735
3736 @item @{@var{repeat-count}@}
3737 直前に行ったパターンの検索を、さらに @var{repeat-count} 回繰り返す。
3738 @var{repeat-count} には正の整数か、アステリスクを指定できる。後者は、
3739 入力がなくなるまで、必要なだけ何回でも繰り返すことを意味する。
3740 (訳注: @samp{csplit @var{input} '/@var{pattern_1}/' '@{3@}'
3741 '/@var{pattern_2}/' '@{*@}'}
3742 のように使用する。)
3743
3744 @end table
3745
3746 出力ファイルの名前は、接頭辞 (prefix、デフォルトでは @samp{xx}) に接尾辞
3747 (suffix) を続けたものになる。デフォルトの接尾辞は、二桁の 10 進数を @samp{00}
3748 から @samp{99} まで順番に増やして行ったものである。いかなる場合でも、出力
3749 ファイルを、ファイルの名前によってソートした順番で結合すると、元の入力
3750 ファイルが生成されるようになっている。
3751
3752 @command{csplit} のデフォルトでは、エラーになった場合や、ハングアップ、
3753 割り込み、中止、終了といったシグナルを受け取った場合には、それまでに
3754 作成した出力ファイルをすべて消去してから終了する。
3755
3756 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3757
3758 @table @samp
3759
3760 @item -f @var{prefix}
3761 @itemx --prefix=@var{prefix}
3762 @opindex -f
3763 @opindex --prefix
3764 @cindex output file name prefix
3765 @var{prefix} を出力ファイル名の接頭辞として使用する。
3766
3767 @item -b @var{suffix}
3768 @itemx --suffix=@var{suffix}
3769 @opindex -b
3770 @opindex --suffix
3771 @cindex output file name suffix
3772 @var{suffix} を出力ファイル名の接尾辞として使用する。このオプションを
3773 指定する場合、接尾辞として指定する文字列には、@code{printf(3)} 方式の
3774 変換指定が必ず一つは (それも、一つだけ) 含まれていなければなら
3775 ない。変換指定には、形式指定フラグ、フィールド幅、精度指定と
3776 いった修飾子を付けてもよく、3 種の修飾子をすべて付けることも
3777 できる。フォーマット文字は、バイナリの符号なし整数である引数を、
3778 人間に読みやすい形式に変換するものでなければならない。フォーマット
3779 文字の @samp{d} と @samp{i} は、@samp{u} の別名であり、@samp{u}, @samp{o}, @samp{x},
3780 @samp{X} 変換が
3781 可能である。@var{suffix} の全体が (現在の出力ファイルが何番目かという
3782 情報とともに) @code{sprintf(3)} 関数に引き渡され、出力ファイルの一つ一つ
3783 に対して、ファイル名に使う接尾辞が順番に作られることになる。なお、
3784 このオプションを使用すると、@option{--digits} オプションは無視される。
3785
3786 @item -n @var{digits}
3787 @itemx --digits=@var{digits}
3788 @opindex -n
3789 @opindex --digits
3790 出力ファイル名に含まれる数字の桁数を、デフォルトの 2 桁から
3791 @var{digits} 桁にする。
3792
3793 @item -k
3794 @itemx --keep-files
3795 @opindex -k
3796 @opindex --keep-files
3797 エラーが起きても、出力ファイルを消去しない。
3798
3799 @item --suppress-matched
3800 @opindex --suppress-matched
3801 指定した @var{pattern} にマッチする行を出力しない。言い換えれば、境界に
3802 なる行が、分割されたファイルの 2 番目以降の断片の先頭に現れない
3803 ようにする。(coreutils-8.22 の新機能。訳注: @var{pattern} が正規表現の
3804 場合には、境界になる行がファイル中にたとえ 1 箇所しかなくても、
3805 その行の表示を抑制するには、@samp{csplit --suppress-matched @var{input}
3806 @var{pattern} '@{*@}'} などと、繰り返しの指定をする必要があるようだ。)
3807
3808 @item -z
3809 @itemx --elide-empty-files
3810 @opindex -z
3811 @opindex --elide-empty-files
3812 サイズ 0 の出力ファイルができないようにする (入力ファイルを各部分
3813 に区切る行が、どの部分においても最初の行になることを期待している
3814 場合に、このオプションを使わないと、一番目の出力ファイルがたいてい
3815 サイズ 0 になる)。このオプションが指定されているときでも、出力
3816 ファイルの連続番号が 0 から始まって、順番に増えていくことに変わり
3817 はない。
3818
3819 @item -s
3820 @itemx -q
3821 @itemx --silent
3822 @itemx --quiet
3823 @opindex -s
3824 @opindex -q
3825 @opindex --silent
3826 @opindex --quiet
3827 出力ファイルのサイズを表示しない。
3828
3829 @end table
3830
3831 @exitstatus
3832
3833 用例を挙げてみよう。まず、練習用に空のディレクトリを作って、そこに
3834 移動する。
3835
3836 @example
3837 $ mkdir d && cd d
3838 @end example
3839
3840 次に、1 から 14 まで連続する数を、0 または 5 で終わる行で分割する。
3841
3842 @example
3843 $ seq 14 | csplit - '/[05]$/' '@{*@}'
3844 8
3845 10
3846 15
3847 @end example
3848
3849 ここで表示された各数字は、csplit が今作成した出力ファイルのサイズ
3850 である。その出力ファイルの名前をリストする。
3851
3852 @example
3853 $ ls
3854 xx00  xx01  xx02
3855 @end example
3856
3857 @command{head} を使って、内容を見る。
3858
3859 @example
3860 $ head xx*
3861 ==> xx00 <==
3862 1
3863 2
3864 3
3865 4
3866
3867 ==> xx01 <==
3868 5
3869 6
3870 7
3871 8
3872 9
3873
3874 ==> xx02 <==
3875 10
3876 11
3877 12
3878 13
3879 14
3880 @end example
3881
3882 次の例では、入力を空行で分割している。
3883
3884 @example
3885 $ csplit --suppress-matched @var{input.txt} '/^$/' '@{*@}'
3886 @end example
3887
3888 @c
3889 @c TODO: "uniq" already supports "--group".
3890 @c        when it gets the "--key" option, uncomment this example.
3891 @c
3892 @c Example of splitting input file, based on the value of column 2:
3893 @c
3894 @c @example
3895 @c $ cat @var{input.txt} |
3896 @c       sort -k2,2 |
3897 @c       uniq --group -k2,2 |
3898 @c       csplit -m '/^$/' '@{*@}'
3899 @c @end example
3900
3901 @node Summarizing files
3902 @chapter ファイルの要約 (行数、単語数、チェックサム)
3903
3904 @cindex summarizing files
3905
3906 以下のコマンドは、ファイル内容全体を表現する若干の数字を生成する。
3907
3908 @menu
3909 * wc invocation::            行数、単語数、バイト数を表示する。
3910 * sum invocation::           チェックサムとブロック数を表示する。
3911 * cksum invocation::         CRC チェックサムとバイト数を表示する。
3912 * md5sum invocation::        MD5 ダイジェストの表示、または検査をする。
3913 * sha1sum invocation::       SHA-1 ダイジェストの表示、または検査をする。
3914 * sha2 utilities::           SHA-2 ダイジェストの表示、または検査をする。
3915 @end menu
3916
3917
3918 @node wc invocation
3919 @section @command{wc}: 行数、単語数、バイト数を表示する
3920
3921 @pindex wc
3922 @cindex byte count
3923 @cindex character count
3924 @cindex word count
3925 @cindex line count
3926
3927 @command{wc} は、指定された各 @var{file} に含まれる、バイト数、文字数、ホワイト
3928 スペース (訳注: 空白、タブ、改行など) で区切られた単語数、改行数を算出
3929 する。@var{file} が指定されなかった場合や、@var{file} として @samp{-} が指定された
3930 場合は、標準入力を対象とする。
3931 @sp 1
3932 書式:
3933
3934 @example
3935 wc [@var{option}]@dots{} [@var{file}]@dots{}
3936 @end example
3937
3938 @cindex total counts
3939 @command{wc} は各ファイルにつき、一行の算出結果を出力する。引数として
3940 ファイルが指定されていれば、そのファイル名を数値の後ろに表示する。
3941 複数の @var{file} が指定されている場合は、最後の行で合計を表示し、ファイル
3942 名の部分に、@file{total} と書き込む。表示される数値の順番は、改行数、単語数、
3943 文字数、バイト数、最長行の長さになる。各数値は、フィールドに右詰めで
3944 表示され、フィールド間には、少なくとも一個の空白が置かれる。そうする
3945 ことで、複数の数字とファイル名が、たいていの場合きちんと整列するように
3946 なっているのだ。数値の入るフィールドの幅は、入力に応じて変化するので、
3947 一定のフィールド幅を当てにするべきではない。ただし、GNU の拡張として、
3948 表示される数値がただ 1 個だけの場合は、その数値の頭に空白を入れない
3949 ことになっている。
3950
3951 デフォルトでは、@command{wc} は 3 個の数値を表示する。すなわち、改行数、単語
3952 数、バイト数である。オプションによって、特定の数値のみを表示するように
3953 指定することもできる。どんなオプションも、それ以前に指定されたオプション
3954 を取り消すことはない。従って、
3955
3956 @example
3957 wc --bytes --words
3958 @end example
3959
3960 @noindent
3961 上記のコマンドは、バイト数と単語数の両方を表示することになる。
3962
3963 @option{--max-line-length} を指定すると、@command{wc} はファイルごとの最長行の
3964 長さを表示する。さらに、複数のファイルが存在する場合は、(各最長行の
3965 合計ではなく) 最長行中の最長のものを表示する。ここで言う行の長さは、
3966 画面に表示される桁数のことである。表示桁数の計算は現在のロケールに
3967 従って行われ、タブ位置は 8 桁ごとに来るものとされる。
3968
3969 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3970
3971 @table @samp
3972
3973 @item -c
3974 @itemx --bytes
3975 @opindex -c
3976 @opindex --bytes
3977 バイト数のみを表示する。
3978
3979 @item -m
3980 @itemx --chars
3981 @opindex -m
3982 @opindex --chars
3983 文字数のみを表示する。
3984
3985 @item -w
3986 @itemx --words
3987 @opindex -w
3988 @opindex --words
3989 単語数のみを表示する。
3990
3991 @item -l
3992 @itemx --lines
3993 @opindex -l
3994 @opindex --lines
3995 改行数のみを表示する。
3996
3997 @item -L
3998 @itemx --max-line-length
3999 @opindex -L
4000 @opindex --max-line-length
4001 最長行の長さのみを表示する。
4002
4003 @macro filesZeroFromOption{cmd,withTotalOption,subListOutput}
4004 @item --files0-from=@var{file}
4005 @opindex --files0-from=@var{file}
4006 @c This is commented out to avoid a texi2dvi failure.
4007 @c texi2dvi (GNU Texinfo 4.11) 1.104
4008 @c @cindex including files from @command{\cmd\}
4009 コマンドラインで名前を指定されたファイルの処理を行わない。その代わり
4010 に、ファイル @var{file} に名前が書き込まれているファイルの処理を行う。
4011 なお、@var{file} 中に書かれている各ファイル名は、ゼロバイト (ASCII NUL)
4012 で終端されていなければならない。このオプションは、ファイル名のリスト
4013 が長すぎて、コマンドライン長の上限を超過してしまいそうなときに、
4014 \withTotalOption\便利である。そうした場合、@command{\cmd\} を @command{xargs} 経由で実行するのは、
4015 望ましくない。なぜなら、@command{xargs} はファイルのリストをいくつかの部分
4016 に分割して @command{\cmd\} に渡すので、@command{\cmd\} はリスト全体の\subListOutput\ではなく、
4017 部分リストごとの\subListOutput\を表示してしまうからである。
4018 ASCII NUL で終端されたファイル名のリストを得る方法の一つは、
4019 GNU @command{find} に @option{-print0} を付けて使うことである。@var{file} に @samp{-}
4020 を指定すれば、
4021 ASCII NUL で終端されたファイル名を標準入力から読み込むことが
4022 できる。
4023 @end macro
4024 @filesZeroFromOption{wc,,合計}
4025
4026 たとえば、カレント・ディレクトリ以下にある、すべての @file{.c} ファイル
4027 や @file{.h} ファイルの内で、最長の行の長さを知るには、次のようにする。
4028
4029 @example
4030 find . -name '*.[ch]' -print0 |
4031   wc -L --files0-from=- | tail -n1
4032 @end example
4033
4034 @end table
4035
4036 @exitstatus
4037
4038
4039 @node sum invocation
4040 @section @command{sum}: チェックサムとブロック数を表示する
4041
4042 @pindex sum
4043 @cindex 16-bit checksum
4044 @cindex checksum, 16-bit
4045
4046 @command{sum} は、指定された各 @var{file} の 16-bit チェックサムを計算する。
4047 @var{file} が指定されなかった場合や、@var{file} として @samp{-} が指定された場合は、
4048 標準入力を対象とする。
4049 @sp 1
4050 書式:
4051
4052 @example
4053 sum [@var{option}]@dots{} [@var{file}]@dots{}
4054 @end example
4055
4056 @command{sum} は各 @var{file} のチェックサムを表示し、その後にファイルのブロック数
4057 (整数に切り上げたもの) を続ける。複数の @var{file} が指定されていると、
4058 ファイル名も表示される (デフォルト)。(@option{--sysv} オプションが指定されて
4059 いる場合は、引数に一つでもファイルがあれば、そのファイル名が表示される。)
4060
4061 デフォルトでは、GNU の @command{sum} は、BSD の @command{sum} と互換性のある
4062 アルゴリズムを使って、チェックサムを計算し、1 ブロック 1024 バイトの
4063 ブロック数でファイルサイズを表示する。
4064
4065 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
4066
4067 @table @samp
4068
4069 @item -r
4070 @opindex -r
4071 @cindex BSD @command{sum}
4072 デフォルトの (BSD と互換性のある) アルゴリズムを使用する。この
4073 オプションが存在しているのは、System V の @command{sum} との互換性のため
4074 である。前方に @option{-s} オプションも指定されているとき以外、このオプ
4075 ションは効果を持たない。
4076
4077 @item -s
4078 @itemx --sysv
4079 @opindex -s
4080 @opindex --sysv
4081 @cindex System V @command{sum}
4082 System V の @command{sum} のデフォルトと互換性のあるアルゴリズムを使って、
4083 チェックサムを計算し、1 ブロック 512 バイトのブロック数でファイル
4084 サイズを表示する。
4085
4086 @end table
4087
4088 @command{sum} は、互換性のために提供されている。新しいアプリケーションでは、
4089 @command{cksum} プログラム (次のセクションを参照) を使う方がよい。
4090
4091 @exitstatus
4092
4093
4094 @node cksum invocation
4095 @section @command{cksum}: CRC チェックサムとバイト数を表示する
4096
4097 @pindex cksum
4098 @cindex cyclic redundancy check
4099 @cindex CRC checksum
4100
4101 @command{cksum} は、指定された各 @var{file} の CRC (cyclic redundancy check、巡回
4102 冗長検査) チェックサムを計算する。@var{file} が指定されなかった場合や、
4103 @var{file} として @samp{-} が指定された場合は、標準入力を対象とする。
4104 @sp 1
4105 書式:
4106
4107 @example
4108 cksum [@var{option}]@dots{} [@var{file}]@dots{}
4109 @end example
4110
4111 @command{cksum} は、各ファイルの CRC チェックサムとバイト数を表示する。また、
4112 引数が指定されていない場合を除いて、ファイル名も表示する。
4113
4114 @command{cksum} は通常、信頼性の低い方法 (たとえば、netnews) によって転送
4115 されたファイルに損傷がないことを確認するために使用される。受信した
4116 ファイルに対する @command{cksum} の出力を、転送元のファイルに対する @command{cksum}
4117 の出力 (たいてい、配布物中に入っている) と比較するわけである。
4118
4119 CRC のアルゴリズムは、POSIX 規格によって規定されており、BSD や
4120 System V の @command{sum} のアルゴリズム (直前のセクションを参照) と互換性が
4121 ない。CRC アルゴリズムの方が信頼性が高い。
4122
4123 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
4124 options}.
4125
4126 @exitstatus
4127
4128
4129 @node md5sum invocation
4130 @section @command{md5sum}: MD5 ダイジェストの表示、または検査をする
4131
4132 @pindex md5sum
4133 @cindex MD5
4134 @cindex 128-bit checksum
4135 @cindex checksum, 128-bit
4136 @cindex fingerprint, 128-bit
4137 @cindex message-digest, 128-bit
4138
4139 @command{md5sum} は、指定された各 @var{file} の 128-bit チェックサムを計算する。
4140 チェックサムは、指紋 (@dfn{fingerprint}) とか、メッセージ・ダイジェスト
4141 (@dfn{message-digest}) とも呼ばれる (訳注: ハッシュ値と呼ばれることもある)。
4142
4143 注意: MD5 ダイジェストは、ファイルの不測の損傷を検知することに
4144 関して、単純な CRC (@command{cksum} コマンドで使用できる) よりも信頼性が高い。
4145 二つのファイルがたまたま同一の MD5 値を持っている確率は、ほとんどゼロ
4146 だからである。だからと言って、悪意のある改竄に対して安全だと考えては
4147 ならない。ある特定の MD5 指紋を持つファイルを見つけ出すことは、現在の
4148 ところ事実上不可能だと考えられているが、デジタル証明書などのファイルが
4149 署名に MD5 ダイジェストを使用しているとき、そうしたファイルに手を
4150 加えて、正当に見えるようする方法なら、周知のことだからである。もっと
4151 安全なハッシュ値が必要なら、SHA-2 の使用を考慮した方がよい。
4152 @xref{sha2 utilities}.
4153
4154 指定された @var{file} が @samp{-} の場合や、ファイルが全く指定されなかった
4155 場合は、@command{md5sum} は標準入力のチェックサムを計算する。また、@command{md5sum} は、
4156 ファイルとチェックサムの間に矛盾がないかどうかを判定することもできる。
4157 @sp 1
4158 書式:
4159
4160 @example
4161 md5sum [@var{option}]@dots{} [@var{file}]@dots{}
4162 @end example
4163
4164 各 @var{file} に対して @samp{md5sum} は、MD5 チェックサム、入力モードがバイ
4165 ナリかテキストかを示すフラグ、それにファイル名を出力する。@var{file} に
4166 バックスラッシュや改行文字が含まれている場合は、出力する行の先頭に
4167 バックスラッシュを付け、さらに、ファイル名中の問題のある各文字を
4168 バックスラッシュでエスケープする。そうすることで、わがままなファイル
4169 名があっても、出力に誤解の余地がないようにしているわけだ。@var{file} が
4170 指定されていなかったり、@samp{-} という形で指定されている場合は、標準入力
4171 から読み込む。
4172
4173 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
4174
4175 @table @samp
4176
4177 @item -b
4178 @itemx --binary
4179 @opindex -b
4180 @opindex --binary
4181 @cindex binary input files
4182 各入力ファイルをバイナリとして扱う。すなわち、入力ファイルをバイナリ
4183 モードで読み込み、出力に @samp{*} というフラグを付ける。このオプションは
4184 @option{--text} の反対である。バイナリファイルとテキストファイルを区別しな
4185 い GNU のようなシステムでは、このオプションは入力モードがバイナリ
4186 であるとのフラグを付けるだけであり、MD5 チェックサムの値には影響を
4187 及ぼさない。このオプションは、バイナリファイルとテキストファイルを
4188 区別する MS-DOS のようなシステムでは、デフォルトである。だだし、
4189 読み込みを標準入力から行い、その標準入力が端末であるときは除く。
4190
4191 @item -c
4192 @itemx --check
4193 各 @var{file} から (@var{file} が指定されなかった場合は、標準入力から)、ファ
4194 イル名とチェックサム情報を読み込み (@var{file} をチェックサム計算の対象と
4195 なるデータとして読み込むわけはない)、そのチェックサム情報が、名前を
4196 挙げられているファイルの内容に対応しているかどうかを報告する。この
4197 モードの @command{md5sum} に対する入力は、たいていの場合、事前に @samp{md5sum}
4198 を実行してチェックサムを作成したときの出力である。入力の有効な行は
4199 それぞれ、MD5 チェックサム、バイナリかテキストかのフラグ、ファイル
4200 名の順になっている。バイナリモードには @samp{*} の指標が付き、テキスト
4201 モードには、@samp{ } (空白) の指標が付く。そうした各行に対して、@command{md5sum}
4202 は、そこに名前を挙げられたファイルを読み込み、その MD5 チェックサム
4203 を計算する。そして、算出したメッセージダイジェストが、そのファイル名
4204 と同じ行にあるチェックサムと一致しない場合は、そのファイルがテストに
4205 失敗したことを報告するのである。両者が一致した場合は、テストにパス
4206 したことになる。デフォルトでは、有効な各行に対して標準出力にメッ
4207 セージを 1 行づつ書き出し、指名されたファイルがテストにパスしたか
4208 どうかを明かにする。また、すべてのチェックが完了したとき、テストに
4209 失敗したものが一つでもあれば、警告メッセージを標準エラーに出力する。
4210 この出力を抑制したければ、@option{--status} オプションを使用すればよい。
4211 リストされたファイルの中に、オープンできなかったり、読み込めなかっ
4212 たりするものがあった場合や、有効な行に書いてあるチェックサムが対応
4213 するファイルの実際の値と一致しなかった場合、それに、有効な行が全く
4214 存在しなかった場合は、@command{md5sum} は 0 以外のステータスで終了する。
4215 それ以外の場合は正常終了することになる。
4216
4217 @item --quiet
4218 @opindex --quiet
4219 @cindex verifying MD5 checksums
4220 このオプションが役に立つのは、チェックサムを照合するときだけである。
4221 このオプションを指定すると、チェックサムを照合する際、検査に成功した
4222 ファイルごとに 'OK' (訳注: 日本語では、「成功」または「完了」) の
4223 メッセージを出さなくなる。ただし、ファイルが照合に失敗した場合は、
4224 デフォルトと同じ 1 ファイル 1 行の形式で結果を報告する。チェック
4225 サムに何らかの不一致があった場合は、失敗を総括した警告メッセージも
4226 標準出力に表示する。
4227
4228 @item --status
4229 @opindex --status
4230 @cindex verifying MD5 checksums
4231 このオプションが役に立つのは、チェックサムを照合するときだけである。
4232 このオプションを指定すると、チェックサムを照合する際、デフォルトの
4233 1 ファイルに付き 1 行の判定メッセージを出さなくなる。また、照合の
4234 失敗があっても、それを総括した警告メッセージを出力することがない。
4235 とは言え、ファイルのオープンや読み込みに失敗した場合は、やはり
4236 それぞれの診断結果を標準エラーに表示する。リストされたすべての
4237 ファイルを読み込むことができ、しかも、すべてのファイルについて、
4238 対応する MD5 チェックサムと矛盾がなければ、正常終了する。それ以外
4239 の場合は、失敗があったことを示すステータスコードで終了する。
4240
4241 @item --tag
4242 @opindex --tag
4243 @cindex BSD output
4244 BSD スタイルのチェックサムを出力する。つまり、使用したチェックサム
4245 のアルゴリズムも表示するということだ。GNU の拡張として、問題を起こ
4246 しかねない文字を含むファイル名は、上述したようにエスケープされ、
4247 さらに、行の先頭に エスケープの指標に使われたのと同じ @samp{\} 文字が
4248 付けられる。@option{--tag} オプションはバイナリ・モードを意味し、@option{--text}
4249 オプションと一緒に使うことは認められていない。そんなことをサポート
4250 しても、出力の書式をむやみに繁雑にするだけで、利益はほとんどない
4251 からである。
4252
4253 @item -t
4254 @itemx --text
4255 @opindex -t
4256 @opindex --text
4257 @cindex text input files
4258 各入力ファイルをテキストとして扱う。すなわち、入力ファイルをテキスト
4259 モードで読み込み、出力に @samp{ } というフラグを付ける。このオプションは
4260 @option{--binary} の反対である。バイナリファイルとテクストファイルを区別
4261 しない GNU のようなシステムでは、このオプションはデフォルトである。
4262 ほかのシステムでも、読み込みを標準入力から行い、その標準入力が端末で
4263 あるときは、デフォルトになる。ただし、@option{--tag} が使用されているとき
4264 に、このモードがデフォルトになることはない。
4265
4266 @item -w
4267 @itemx --warn
4268 @opindex -w
4269 @opindex --warn
4270 @cindex verifying MD5 checksums
4271 チェックサムを照合する際、MD5 チェックサムを記載した行の書式に
4272 正しくないものがあると、その旨警告を発する。このオプションが
4273 役に立つのは、チェックされる入力中の、数行を除いたすべての行が、
4274 有効なときだけである。
4275
4276 @item --strict
4277 @opindex --strict
4278 @cindex verifying MD5 checksums
4279 チェックサムを照合する際、無効な入力行が 1 行でもあれば、そうした
4280 行のすべてについて警告を発したのち、0 以外の終了ステータスで終了
4281 する。
4282
4283 @end table
4284
4285 @exitstatus
4286
4287
4288 @node sha1sum invocation
4289 @section @command{sha1sum}: SHA-1 ダイジェストの表示、または検査をする
4290
4291 @pindex sha1sum
4292 @cindex SHA-1
4293 @cindex 160-bit checksum
4294 @cindex checksum, 160-bit
4295 @cindex fingerprint, 160-bit
4296 @cindex message-digest, 160-bit
4297
4298 @command{sha1sum} は、指定された各 @var{file} の 160-bit チェックサムを計算する。
4299 このコマンドの使用法やオプションは、@command{md5sum} と全く同じである。
4300 @xref{md5sum invocation}.
4301
4302 注意: SHA-1 ダイジェストは MD5 より安全であり、コリジョン
4303 (collision、衝突。別のファイルが同一の指紋を持つこと) が起きたという
4304 話を聞いたことはない。しかしながら、大量の --- と言っても非現実的な
4305 ほどではない --- リソースがあれば、コリジョンを作り出せることがわかって
4306 いる。この理由から、SHA-1 は、もっと安全な SHA-2 ハッシュ・アルゴリズム
4307 に徐々に移行すべきだと、一般に考えられている。 @xref{sha2 utilities}.
4308
4309
4310 @node sha2 utilities
4311 @section sha2 utilities: SHA-2 ダイジェストの表示、または検査をする
4312
4313 @pindex sha224sum
4314 @pindex sha256sum
4315 @pindex sha384sum
4316 @pindex sha512sum
4317 @cindex SHA-2
4318 @cindex 224-bit checksum
4319 @cindex 256-bit checksum
4320 @cindex 384-bit checksum
4321 @cindex 512-bit checksum
4322 @cindex checksum, 224-bit
4323 @cindex checksum, 256-bit
4324 @cindex checksum, 384-bit
4325 @cindex checksum, 512-bit
4326 @cindex fingerprint, 224-bit
4327 @cindex fingerprint, 256-bit
4328 @cindex fingerprint, 384-bit
4329 @cindex fingerprint, 512-bit
4330 @cindex message-digest, 224-bit
4331 @cindex message-digest, 256-bit
4332 @cindex message-digest, 384-bit
4333 @cindex message-digest, 512-bit
4334
4335 コマンド @command{sha224sum}, @command{sha256sum}, @command{sha384sum},
4336 @command{sha512sum} は、一まとめ
4337 にして SHA-2 ハッシュと呼ばれる様々な長さのチェックサムを計算する
4338 (それぞれ、224, 256, 384, 512 bits である)。こうしたコマンドの使用法
4339 とオプションは、@command{md5sum} と全く同じである。@xref{md5sum invocation}.
4340
4341 注意: SHA384 と SHA512 のダイジェストは、SHA224 や SHA256 に比べて、
4342 計算にかなり時間がかかる。32 ビットのコンピュータではなおさらである。
4343
4344
4345 @node Operating on sorted files
4346 @chapter ソートしたファイルの操作
4347
4348 @cindex operating on sorted files
4349 @cindex sorted files, operations on
4350
4351 以下のコマンドは、ソートしたファイルを操作 (生成) する。
4352
4353 @menu
4354 * sort invocation::          テキストファイルを並べ替える。
4355 * shuf invocation::          テキストファイルをシャッフルする。
4356 * uniq invocation::          ファイルから重複を省く。
4357 * comm invocation::          ソート済みの二つのファイルを一行づつ比較する。
4358 * ptx invocation::           ファイル内容の permuted index を作成する。
4359 * tsort invocation::         トポロジカル・ソート。
4360 @end menu
4361
4362
4363 @node sort invocation
4364 @section @command{sort}: テキストファイルを並べ替える
4365
4366 @pindex sort
4367 @cindex sorting files
4368
4369 @command{sort} は、指定されたファイルから読み込んだすべての行に対して、ソート
4370 (sort、一定の基準に従った並べ替え)、マージ (merge、統合)、比較を行う。
4371 ファイルが一つも指定されなかった場合や、@var{file} として @samp{-} が指定された
4372 場合は、標準入力から読み込む。デフォルトでは、@command{sort} は結果を標準出力
4373 に書き出す。
4374 @sp 1
4375 書式:
4376
4377 @example
4378 sort [@var{option}]@dots{} [@var{file}]@dots{}
4379 @end example
4380
4381 @command{sort} には三つの動作モードがある。ソート (これがデフォルト)、
4382 マージ、それに、すでにソートされているかどうかのチェックである。
4383 動作モードの変更には、以下のオプションを使用する。
4384
4385 @table @samp
4386
4387 @item -c
4388 @itemx --check
4389 @itemx --check=diagnose-first
4390 @opindex -c
4391 @opindex --check
4392 @cindex checking for sortedness
4393 指定されたファイルがすでにソートされているかどうかをチェックする。
4394 ファイル全体がソート済みでない場合は、診断メッセージを出し、順番
4395 から外れている最初の箇所を示してから、ステータス 1 で終了する。
4396 ファイルがソート済みの場合は、正常終了する。入力ファイルは、1 個
4397 しか指定できない。
4398
4399 @item -C
4400 @itemx --check=quiet
4401 @itemx --check=silent
4402 @opindex -c
4403 @opindex --check
4404 @cindex checking for sortedness
4405 指定されたファイルがすでにソート済みだったら、正常終了する。
4406 さもなければ、ステータス 1 で終了。入力ファイルは、1 個しか指定
4407 できない。このオプションは @option{-c} と同様だが、診断メッセージを
4408 出さない点が異なる。
4409
4410 @item -m
4411 @itemx --merge
4412 @opindex -m
4413 @opindex --merge
4414 @cindex merging sorted files
4415 指定された複数のファイルを、一つのグループとしてソートすることで
4416 統合を行う。各入力ファイルは、必ずそれぞれがソート済みでなければ
4417 ならない。マージモードの代わりにソートモードを使えば、そうした条件
4418 なしで、ソートとマージを行うことができる。マージモードがあるのは、
4419 それが使える場合は、その方が高速だからである。
4420
4421 @end table
4422
4423 @cindex sort stability
4424 @cindex sort's last-resort comparison
4425 二つの行の比較は、次のように行われる。@command{sort} は、対になる各フィールド
4426 を、コマンドラインで指定された順番で、そのフィールドに結びついた順序関係
4427 のオプションに従いつつ比較し、相違が見つかるか、比較するフィールドが
4428 なくなるまでそれを続ける。キーとなるフィールドが指定されていない場合は、
4429 デフォルトのキーである行全体が比較に使用される。最後に、すべてのキーが
4430 同じだったときは、最後の手段として、@option{--reverse} (@option{-r}) 以外の順序関係の
4431 どんなオプションも指定されていないかのように、行全体を比較する。
4432 @option{--stable} オプションを指定すると、この最後の手段の比較
4433 (@dfn{last-resort comparison}) を行わないようになり、その結果、すべてのキー・フィールドが
4434 等価である行は、互いに対する元の順序がそのまま維持される。
4435 @option{--unique} (@option{-u}) オプションも、最後の手段の比較を無効にする。
4436
4437 @vindex LC_ALL
4438 @vindex LC_COLLATE
4439 別の指定がなされていないかぎり、すべての比較は、@env{LC_COLLATE} の
4440 ロケールによって指定されている、文字の照合順序で行われる。
4441 @footnote{POSIX 以外のロケールを使用すると (たとえば、@env{LC_ALL} を @samp{en_US}
4442 に設定すると)、@command{sort} の出力が、見慣れない順序でソートされたものに
4443 なるかもしれない。その場合は、環境変数 @env{LC_ALL} を @samp{C} にすればよい。
4444 注意すべきは、@env{LC_COLLATE} だけを設定したのでは、二つの問題が生じて
4445 しまうということだ。一つは、@env{LC_ALL} も設定されている場合、@env{LC_COLLATE}
4446 は無効だということ。二つ目は、@env{LC_CTYPE} が (@env{LC_CTYPE} が設定されて
4447 いないときは、@env{LANG} が) @env{LC_COLLATE} と矛盾する値に設定されている場合、
4448 動作が未定義だということである。たとえば、@env{LC_CTYPE} が @code{ja_JP.PCK} で
4449 あるのに、@env{LC_COLLATE} が @code{en_US.UTF-8} の場合、@command{sort} の動作は未定義
4450 なのである。}
4451
4452 GNU の @command{sort} では (GNU のすべてのユーティリティについて規定されて
4453 いるとおり)、入力行の長さに上限がない。言い換えれば、各行に含まれる
4454 バイト数に制限がない。また、入力ファイルの最後のバイトが改行でなければ、
4455 GNU の @command{sort} は黙って改行を追加する。なお、行末の改行は、比較に当たって
4456 は、行の一部として扱われない。
4457
4458 @cindex exit status of @command{sort}
4459 終了ステータス:
4460
4461 @display
4462 0: エラーが起きなかった。
4463 1: @option{-c} や @option{-C} を付けて実行した際に、入力がソートされていなかった。
4464 2: エラーが起きた。
4465 @end display
4466
4467 @vindex TMPDIR
4468 環境変数 @env{TMPDIR} が設定されていれば、@command{sort} はその値をテンポラリ・
4469 ファイルを置くディレクトリとして @file{/tmp} の代わりに使用する。
4470 @option{--temporary-directory} (@option{-T}) オプションは、環境変数よりさらに優先さ
4471 れる。
4472
4473 以下に挙げるオプションは、出力する行の順序に影響を与える。こうした
4474 オプションは、グローバルなオプションとして指定することもできるし、キー
4475 となる特定のフィールドに対してのみ働くように指定することもできる。キー
4476 となるフィールドが全く指定されていない場合は、グローバルなオプションが
4477 行全体の比較に使用される。キー・フィールドの指定がある場合は、グローバル
4478 なオプションは、キー・フィールドのうち、それ自身のオプションが特に指定
4479 されていないフィールドに継承される。POSIX 以前の @command{sort} のバージョンを
4480 使用している場合、グローバルなオプションが効果を持つのは、それより後で
4481 指定されるキー・フィールドに対してだけなので、移植を考慮したシェルスク
4482 リプトでは、グローバル・オプションを最初に指定した方がよい。
4483
4484 @table @samp
4485
4486 @item -b
4487 @itemx --ignore-leading-blanks
4488 @opindex -b
4489 @opindex --ignore-leading-blanks
4490 @cindex blanks, ignoring leading
4491 @vindex LC_CTYPE
4492 各行中でソートに使うキーを捜すときに、文字の前にある空白を無視する。
4493 デフォルトの空白は、スペースまたはタブだが、@env{LC_CTYPE} のロケールに
4494 よっては違うかもしれない。なお、次のことに留意してほしい。空白は、
4495 使用しているロケールの照合ルールによっては無視されることがあるが、
4496 このオプションを指定しておかないと、@option{-k} オプションで指定される
4497 キー中の文字の位置に関して、空白が意味を持つことになる。
4498
4499 @item -d
4500 @itemx --dictionary-order
4501 @opindex -d
4502 @opindex --dictionary-order
4503 @cindex dictionary order
4504 @cindex phone directory order
4505 @cindex telephone directory order
4506 @vindex LC_CTYPE
4507 電話帳 (@dfn{phone directory}) 順にソートする。すなわち、ソートする際に
4508 アルファベット、数字、空白以外のすべての文字を無視する。デフォルト
4509 のアルファベットと数字は ASCII のそれであり、空白はスペースまたは
4510 タブだが、後者は @env{LC_CTYPE} のロケールによっては違うかもしれない。
4511
4512 @item -f
4513 @itemx --ignore-case
4514 @opindex -f
4515 @opindex --ignore-case
4516 @cindex ignoring case
4517 @cindex case folding
4518 @vindex LC_CTYPE
4519 アルファベットの小文字を、一回すべて対応する大文字に直してから、
4520 比較する。その結果、たとえば、@samp{b} と @samp{B} は等価なものとしてソート
4521 される。どの文字がどのタイプに属するか (訳注: たとえば、大文字か
4522 小文字か) を決めているのは、@env{LC_CTYPE} のロケールである。@option{--unique}
4523 オプションと一緒に使用したとき、小文字を使っている等価な行があると、
4524 その小文字の行は捨てられることになる。(大文字を使っている等価な行の
4525 方を捨てる方法は、現在のところ存在しない。(@option{--reverse} オプションが
4526 あっても、それが効果を発揮するのは、小文字の行が捨てられた後の最終
4527 結果に対してだけなのだ。)) (訳注: 実際の動作はこの説明と少し違う。
4528 最近の @command{sort} では、@option{--unique} と併せて使用した場合、小文字を
4529 使っている行が捨てられるのではなく、等価な行のうち、最初に現れた
4530 行が残り、それ以外のすべてが捨てられるようである。)
4531
4532 @item -g
4533 @itemx --general-numeric-sort
4534 @itemx --sort=general-numeric
4535 @opindex -g
4536 @opindex --general-numeric-sort
4537 @opindex --sort
4538 @cindex general numeric sort
4539 @vindex LC_NUMERIC
4540 各行の先頭部分を倍精度浮動小数点数 (long double-precision floating
4541 point number) に変換して、数値としてソートする。
4542 @xref{Floating point}.  オーバーフロー、アンダーフロー、変換エラーが起きても、
4543 通知しない。行の並ぶ順番は以下のようになる。
4544
4545 @itemize @bullet
4546 @item
4547 数字で始まっていない行 (すべて同じ数値と見なされる)。
4548 @item
4549 NaN (IEEE の浮動小数点演算で使う ``Not a Number'' を表す値) を
4550 一貫した、ただし、マシンに依存する順番で並べる。
4551 @item
4552 マイナスの無限大。
4553 @item
4554 有限数を数値として昇順で並べる (@math{-0} と @math{+0} は等価とする)。
4555 @item
4556 プラスの無限大。
4557 @end itemize
4558
4559 このオプションを使うのは、他に方法がないときのみにすること。
4560 処理速度が @option{--numeric-sort} (@option{-n}) よりずっと遅いし、浮動小数点数に
4561 変換するとき、情報を失う恐れがある。
4562
4563 @item -h
4564 @itemx --human-numeric-sort
4565 @itemx --sort=human-numeric
4566 @opindex -h
4567 @opindex --human-numeric-sort
4568 @opindex --sort
4569 @cindex human numeric sort
4570 @vindex LC_NUMERIC
4571 数値としてソートする。その際、ソートを、まず数が正か負かによって
4572 行い (負の数、ゼロ、正の数の順)、次に SI 接尾辞 によって行い
4573 (接尾辞なし、@samp{k} や @samp{K}、そして @samp{MGTPEZY} の順  @pxref{Block size})、
4574 最後に数値によって行う。たとえば、@samp{1023M} は @samp{1G} の
4575 前に来る。SI 接尾辞として @samp{M}(メガ) は @samp{G} (ギガ) の前になるから
4576 だ。つまり、このオプションでソートする対象は、接尾辞の意味が 1000
4577 の累乗か、1024 の累乗かを問わず、一貫したやり方で、数値の規模に
4578 もっともふさわしい接尾辞を付けられている数値である。従って、この
4579 オプションは、@command{df}, @command{du}, @command{ls} などのコマンドに
4580 @option{--human-readable} や
4581 @option{--si} オプションを付けて実行したときの、一回分の出力をソート
4582 するのに用いられる。数値の書式は、@option{--numeric-sort} の場合と同じ
4583 であり (訳注: すなわち、数値の前に付けた @samp{+} 符号を理解しない)、
4584 SI 接尾辞は、数値の後ろに直接続いていなければならない。なお、
4585 @command{numfmt} コマンドを使用することも考慮していただきたい。@command{numfmt}
4586 を使用すれば、数値をソートした後で、人間に読みやすい形に整形し直す
4587 ことができるので、たいていの場合 @command{sort} の対象に、より精密な数値を
4588 使うことが可能になるからだ。
4589
4590 @item -i
4591 @itemx --ignore-nonprinting
4592 @opindex -i
4593 @opindex --ignore-nonprinting
4594 @cindex nonprinting characters, ignoring
4595 @cindex unprintable characters, ignoring
4596 @vindex LC_CTYPE
4597 表示できない文字を無視する。どの文字がどのタイプに属するかを決めて
4598 いるのは、 @env{LC_CTYPE} のロケールである。より強力なオプションである
4599 @option{--dictionary-order} (@option{-d}) が一緒に指定されていると、このオプ
4600 ションは効果を持たない。
4601
4602 @item -M
4603 @itemx --month-sort
4604 @itemx --sort=month
4605 @opindex -M
4606 @opindex --month-sort
4607 @opindex --sort
4608 @cindex months, sorting by
4609 @vindex LC_TIME
4610 比較する部分の先頭が、0 個以上の空白に続いて、月名の短縮形になって
4611 いるとき、すべての文字を大文字に直して @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}
4612 の順序で比較する。月名として無効な名前は、有効な月名より前に置かれる。
4613 月名のつづりを決めているのは、@env{LC_TIME} カテゴリのロケールである
4614 (訳注: だから、英語の月名によってソートするには、ロケールを英語か
4615 C にしておく必要がある)。デフォルトの空白は、スペースまたはタブ
4616 だが、@env{LC_CTYPE} のロケールによっては違うかもしれない。
4617
4618 @item -n
4619 @itemx --numeric-sort
4620 @itemx --sort=numeric
4621 @opindex -n
4622 @opindex --numeric-sort
4623 @opindex --sort
4624 @cindex numeric sort
4625 @vindex LC_NUMERIC
4626 数値としてソートする。数値は行頭から始まり (訳注: 比較する位置が
4627 指定されていれば、実は行頭でなくてもよい)、任意個の空白、必要なら
4628 @samp{-} 符号、それに、0 個以上の数字から構成される。数値は、区切り
4629 記号で 3 桁づつ区切られていてもよく、小数点記号と 0 個以上の数字
4630 が続いていてもよい。数字がない場合は、@samp{0} と見なされる。小数点記号
4631 や桁区切りの記号を規定しているのは、@env{LC_NUMERIC} のロケールである。
4632 デフォルトの空白は、スペースまたはタブだが、@env{LC_CTYPE} のロケール
4633 によっては違うかもしれない。
4634
4635 比較は厳密であり、丸めによるエラーはない。
4636
4637 このオプションは、数値に前置した @samp{+} 符号や、指数表記を理解しない。
4638 そうした文字列を数値として比較するには、@option{--general-numeric-sort}
4639 (@option{-g}) を使用するべきである。
4640
4641 @item -V
4642 @itemx --version-sort
4643 @opindex -V
4644 @opindex --version-sort
4645 @cindex version number sort
4646 バージョン名とバージョン番号によってソートする。標準用法のソートと
4647 動作が似ているが、10 進数の数字が連続する各部分をインデックス番号や
4648 バージョン番号と見なし、(文字列としてではなく) 数値として取り扱う
4649 点が違う。(@xref{Details about version sort}.)
4650
4651 @item -r
4652 @itemx --reverse
4653 @opindex -r
4654 @opindex --reverse
4655 @cindex reverse sorting
4656 比較の結果を逆順にする。その結果、出力ではより大きなキーの値を
4657 持つ行が、後ではなく、先に表示される。
4658
4659 @item -R
4660 @itemx --random-sort
4661 @itemx --sort=random
4662 @opindex -R
4663 @opindex --random-sort
4664 @opindex --sort
4665 @cindex random sort
4666 ソートを行うのに、入力中のキーをハッシュしてから、そのハッシュ値
4667 をソートするという方法を用いる。ハッシュ関数はランダムに選択する。
4668 その際、衝突 (collision) が絶対起きないように関数を選択するので、
4669 値の違うキーは必ず違うハッシュ値を持つようになる。これは、入力の
4670 ランダムな並び替えに似ているが (@pxref{shuf invocation})、同じ値を
4671 持つキーは一緒に並べるという点が、異なっている。
4672
4673 ランダムソートを行うフィールドが複数指定されている場合は、ランダムに
4674 選択された一つの同じハッシュ関数が、すべてのフィールドで使用される。
4675 フィールドごとに別のランダムなハッシュ関数を使うようにするには、
4676 @command{sort} を複数回呼び出せばよい。
4677
4678 ハッシュ関数の選択は、 @option{--random-source} オプションの影響を受ける。
4679
4680 @end table
4681
4682 その他のオプション。
4683
4684 @table @samp
4685
4686 @item --compress-program=@var{prog}
4687 テンポラリ・ファイルを @var{prog} というプログラムで圧縮する。
4688
4689 @var{prog} プログラムは、引数が一つも存在しない場合に、標準入力を圧縮
4690 して標準出力に書き出し、@option{-d} オプションの指定があれば、標準入力を
4691 展開して標準出力に書き出すものでなければならない。
4692
4693 @var{prog} が 0 以外のステータスで終了した場合は、エラーメッセージを
4694 出して、@command{sort} の実行を中止する。
4695
4696 @var{prog} の指定中でホワイトスペース (訳注: 空白、タブ、改行など) や
4697 バックスラッシュ文字を使ってはならない。そうした文字は、将来の
4698 使用のために、予約されている。
4699
4700 @filesZeroFromOption{sort,,ソートした結果}
4701
4702 @item -k @var{pos1}[,@var{pos2}]
4703 @itemx --key=@var{pos1}[,@var{pos2}]
4704 @opindex -k
4705 @opindex --key
4706 @cindex sort field
4707 行中の @var{pos1} から @var{pos2} までの部分 (両者を含む) を、ソートの対象
4708 となる場所として指定する。@var{pos2} が省略されている場合は、@var{pos1} から
4709 行末までがソートの対象になる。
4710
4711 各 @var{pos} は、@samp{@var{f}[.@var{c}][@var{opts}]} という形式を取る。@var{f}
4712 は、比較に使用する
4713 フィールドは何番目かということであり、@var{c} は、そのフィールドの始め
4714 から数えて何番目の文字かということである。フィールドや文字の位置は、
4715 1 から数える。なお、@var{pos2} の文字の位置として 0 を指定すると、その
4716 フィールドの最後の文字を指すことになる。@samp{.@var{c}} が、@var{pos1} で省略されて
4717 いる場合は、デフォルトの 1 (フィールドの最初の文字) を指定したこと
4718 になり、@var{pos2} で省略されている場合は、デフォルトの 0 (フィールドの
4719 最後の文字) を指定したことになる。@var{opts} は順序関連のオプションで
4720 あり、これを指定することで、各キーを異なったルールでソートすること
4721 が可能になる。詳細については後述しているので、参照していただきたい。
4722 なお、キーは複数のフィールドにまたがることができる。
4723
4724 たとえば、二番目のフィールドでソートするには、@option{--key=2,2} (@option{-k 2,2})
4725 を使用する。後述部分で、キーについてさらに説明し、用例も
4726 もっとたくさん挙げているので、ご覧になっていただきたい。また、
4727 @option{--debug} オプションの説明もご覧になるとよい。@option{--debug} オプション
4728 を使うと、行中のどの部分がソートに使用されているかが明らかになる。
4729
4730 @item --debug
4731 各行のソートに使われている部分を強調表示する。また、使用法に問題が
4732 あるときは、標準エラーに警告メッセージを出す。
4733
4734 @item --batch-size=@var{nmerge}
4735 @opindex --batch-size
4736 @cindex number of inputs to merge, nmerge
4737 一度にマージする入力ファイルの数を多くても @var{nmerge} 個までとする。
4738
4739 @var{nmerge} 個を越える入力ファイルをマージしなければならない場合、@command{sort}
4740 は @var{nmerge} 個のファイルからなるグループを作ってマージし、その結果を
4741 テンポラリ・ファイルに保存する。そして、今度はそれを入力として使用
4742 して、後に続くマージを行うのである。
4743
4744 @var{nmerge} の値が大きいと、実行速度が向上し、ハードディスクの一時的な
4745 使用が減るかもしれないが、その分、メモリの使用量と I/O が増加する。
4746 逆に、@var{nmerge} の値が小さいと、メモリに対する要求と I/O は減少する
4747 かもしれないが、その分、ハードディスクの一時的な使用が増え、実行速度
4748 が低下することになる。
4749
4750 @var{nmerge} の値は、2 以上でなければならない。デフォルトの値は 16 だが、
4751 これは実装次第なので、将来は変わるかもしれない。
4752
4753 @var{nmerge} の値は、オープンできるファイル・ディスクリプタの上限によって
4754 制限されているかもしれない。@samp{ulimit -n} や @samp{getconf OPEN_MAX}
4755 コマンドを使えば、使用しているシステムの上限を知ることができる。
4756 ただし、そうした上限がさらに小さくなっていることもあり、使用中の
4757 プログラムがすでにファイルをいくつかオープンしている場合や、オープン
4758 できるファイルの数についてオペレーティング・システムに他の制限がある
4759 場合が、それに当たる。@var{nmerge} がリソースの上限を越えているときは、
4760 @command{sort} は警告メッセージを出さずに、より小さい値を使用する。
4761
4762 @item -o @var{output-file}
4763 @itemx --output=@var{output-file}
4764 @opindex -o
4765 @opindex --output
4766 @cindex overwriting of input, allowed
4767 出力を標準出力ではなく、@var{output-file} に書き出す。通常、@command{sort} は、
4768 入力をすべて読み込んでから、@var{output-file} をオープンする。従って、
4769 @code{sort -o F F} や "@code{cat F | sort -o F} といったコマンドを使って、
4770 ファイルを直接書き変えるやり方で、ソートをしても問題がない。
4771 これに対して、@option{--merge} (@option{-m}) オプションを指定した場合は、
4772 @command{sort} は、入力をすべて読み込む前に、出力ファイルをオープンするかも
4773 しれない。そのため、@code{cat F | sort -m -o F - G} といったコマンドは
4774 安全ではない。@command{cat} が @file{F} の読み込みを済ます前に、
4775 @command{sort} が @file{F} への書き込みを始めてしまうかもしれないからだ。
4776
4777 @vindex POSIXLY_CORRECT
4778 比較的新しいシステムでも、環境変数 @env{POSIXLY_CORRECT} を設定して
4779 いる場合は、たとえば @samp{sort F -o F} のように、入力ファイルの後に
4780 @option{-o} オプションを置くことはできない。移植を考慮したスクリプトでは、
4781 @option{-o @var{output-file}} を入力ファイルの前で指定するべきである。
4782
4783 @item --random-source=@var{file}
4784 @opindex --random-source
4785 @cindex random source for sorting
4786 @var{file} をランダムデータのソースとして使用する。そのランダムデータは、
4787 @option{-R} オプションでどのランダムハッシュ関数を使うかを決めるのに使用
4788 される。 @xref{Random sources}.
4789
4790 @item -s
4791 @itemx --stable
4792 @opindex -s
4793 @opindex --stable
4794 @cindex sort stability
4795 @cindex sort's last-resort comparison
4796
4797 最後の手段の比較 (last-resort comparison) を行うのを止めて、@command{sort}
4798 を入力順尊重 (stable) にする。このオプションは、フィールド指定オプ
4799 ションや、@option{--reverse} (@option{-r}) 以外のグローバルな順序関係のオプション
4800 が指定されていなければ、効果を持たない。(訳注: いわゆる stable sort
4801 (普通、安定ソート、固定ソートと訳される) である。たとえば、@option{-b}
4802 オプションを使って、先行する空白を無視して比較した場合に、等価となる
4803 行があったとしよう。通常では、それでも、最後の手段の比較によって、
4804 先行する空白の有無も考慮に入れた行全体の比較が行われ、等価な行に
4805 順序を付けることになるが、@option{--stable} オプションが指定されていると、
4806 それをしないので、等価な行は入力されたときの順序で出力される)。
4807
4808 @item -S @var{size}
4809 @itemx --buffer-size=@var{size}
4810 @opindex -S
4811 @opindex --buffer-size
4812 @cindex size for main memory sorting
4813 指定された @var{size} のメインメモリをソート用のバッファとして使用する。
4814 デフォルトでは、@var{size} は 1024 バイトを 1 単位とする数値である。@samp{%}
4815 を後ろに付けると、@var{size} は、物理メモリの何パーセントの意味になる。
4816 後置するのが @samp{K} ならば、@var{size} は 1024 倍され (デフォルトと同じ)、
4817 @samp{M} なら 1,048,576 倍、@samp{G} なら 1,073,741,824 倍される。@samp{T}, @samp{P},
4818 @samp{E}, @samp{Z}, @samp{Y} の後置も、同じ理屈である。@samp{b} を後置すると、@var{size} は
4819 バイト数と見なされ、掛け算は行われない。
4820
4821 このオプションを指定すると、@command{sort} は作業を始めるとき、デフォルト
4822 よりも大きかったり、小さかったりするソート用のバッファを使用する
4823 ことになり、そのために動作速度が向上することがある。とは言え、この
4824 オプションは起動直後のバッファサイズにしか影響を持たない。@command{sort} が
4825 @var{size} を越える入力行に出会うと、バッファのサイズは @var{size} 以上に拡大
4826 されるからである。
4827
4828 @item -t @var{separator}
4829 @itemx --field-separator=@var{separator}
4830 @opindex -t
4831 @opindex --field-separator
4832 @cindex field separator character
4833 各行でソートに使うキーを探すとき、文字 @var{separator} をフィールド・
4834 セパレータとして使用する。デフォルトでフィールドを区分するのは、
4835 非空白文字と空白文字の間の空文字列である。デフォルトの空白は、
4836 スペースとタブだが、@env{LC_CTYPE} のロケールによっては、違うかも
4837 しれない。
4838
4839 たとえば、入力行が @w{@samp{ foo bar}} だったとしよう。@command{sort} はこれを
4840 @w{@samp{ foo}} と @w{@samp{ bar}} のフィールドに分割する。フィールド・セパレータは
4841 前後どちらのフィールドにも属さないことになっている。そこで、
4842 @samp{sort @w{-t " "}} を使用した場合は、同じ入力行が、空っぽのフィールド、
4843 @samp{foo}、それに @samp{bar} という 3 個のフィールドを持つことになる。
4844 とは言え、キー・フィールドが、@option{-k 2} のように、行末まで続く場合や、
4845 @option{-k 2,3} のように、範囲からなる場合は、範囲の両端の間に存在する
4846 フィールド・セパレータは、キー・フィールド中にそのまま保持される。
4847
4848 ASCII NUL をフィールド・セパレータに指定するには、二文字からなる
4849 文字列 @samp{\0} を使用すればよい。@samp{sort -t '\0'} のようにだ。
4850
4851 @item -T @var{tempdir}
4852 @itemx --temporary-directory=@var{tempdir}
4853 @opindex -T
4854 @opindex --temporary-directory
4855 @cindex temporary directory
4856 @vindex TMPDIR
4857 テンポラリファイルの置き場所にディレクトリ @var{tempdir} を使用する。
4858 この指定は、環境変数 @env{TMPDIR} に優先する。このオプションを二回
4859 以上指定すると、テンポラリファイルの置き場所として、指定された
4860 すべてのディレクトリが使用されることになる。大規模なソートや
4861 マージを行って、I/O が足枷になる場合、このオプションを使って、
4862 別のディスク上にあり、別のコントローラを使用している複数の
4863 ディレクトリを指定すると、実行速度が向上することがよくある。
4864
4865 @item --parallel=@var{n}
4866 @opindex --parallel
4867 @cindex multithreaded sort
4868 平行して実行するソートの数を  @var{n} に設定する。デフォルトでは、
4869 @var{n} は、利用できるプロセッサーの数になっている。ただし、上限は
4870 8 であり、これは、それ以上にしても、速度の向上が頭打ちになるからだ。
4871 @var{n} 個のスレッドを使用すると、メモリの使用量が log @var{n} 倍になること
4872 にも注意していただきたい。参照 @ref{nproc invocation}.
4873
4874 @item -u
4875 @itemx --unique
4876 @opindex -u
4877 @opindex --unique
4878 @cindex uniquifying output
4879
4880 通常は、等価と評価される複数の行の内、最初のもののみを出力する。
4881 @option{--check} (@option{-c} または @option{-C}) オプションが指定されている場合は、
4882 等価と評価される行が、2 行連続していないかをチェックする (訳注:
4883 等価な行の連続があると、終了ステータスが 1 になる)。
4884
4885 また、このオプションを指定すると、デフォルトでは実行する、最後の
4886 手段の比較を行わなくなる。
4887
4888 コマンド @code{sort -u} と @code{sort | uniq} は等価である。しかし、その
4889 等価性は、@command{sort} に何か他のオプションが付いたときにまでは及ばない。
4890 たとえば、@code{sort -n -u} は、唯一性のチェックをするとき、行頭にある
4891 数字の並びの値しか調べないが、@code{sort -n | uniq} の方は、行全体を検査
4892 するのである。@xref{uniq invocation}.
4893
4894 @macro zeroTerminatedOption
4895 @item -z
4896 @itemx --zero-terminated
4897 @opindex -z
4898 @opindex --zero-terminated
4899 @cindex process zero-terminated items
4900 項目の区切りに、改行 (ASCII LF) ではなく、ゼロバイトを使用する。
4901 すなわち、入力を ASCII NUL で分離された項目として扱い、出力する
4902 各項目の末尾に ASCII NUL を付加する。このオプションは、@samp{perl -0},
4903 @samp{find -print0}, @samp{xargs -0} などと組み合わせて使用すると、便利な
4904 ことがある。そうしたコマンドも、わがままなファイル名を (空白など
4905 の特殊文字を含んでいる場合でも) きちんと確実に処理するために、
4906 同様なことをしているのである。
4907 @end macro
4908 @zeroTerminatedOption
4909
4910 @end table
4911
4912 @command{sort} の従来の (すなわち BSD と System V の) 実装では、いくつかの
4913 オプションの解釈が互いに異なっていた。とりわけ、@option{-b}, @option{-f}, @option{-n} に
4914 ついてそうだった。GNU の sort は、POSIX 規格の動作に従っており、これは、
4915 たいていの場合 (常にではない!)、System V の動作と同じである。POSIX
4916 によると、@option{-n} はもはや @option{-b} を自動的に設定しない。そこで、動作の
4917 一貫性のために、@option{-M} も同様に変更した。この変更によって、フィールドを
4918 指定するとき、文字の位置がどこを指すかが、微妙なケースでは変わってくる
4919 かもしれない。これに対する唯一の対処法は、明示的に @option{-b} オプションを
4920 指定することである。
4921
4922 @option{-k} によってソート・フィールドを指定するとき、その位置指定の後ろに
4923 オプション文字 @samp{MbdfghinRrV} のうち任意のものを付けることができる。その
4924 場合、そのフィールドは、グローバルな順序関係のオプションを一切引き継が
4925 ないことになる。@option{-b} オプションは、フィールド限定のオプションとしては、
4926 フィールド指定の開始位置と終端位置の片方、あるいは両方に付けることが
4927 できるが、グローバル・オプションから継承した場合は、両方に付いている
4928 ことになる。入力行が、行頭やフィールド間に複数の空白を含んでいる可能性
4929 があって、しかも @option{-t} を使っていない場合は、@option{-k} を使用するとき、@option{-b}
4930 と組み合わせるか、先行する空白を暗黙のうちに無視するオプション (すなわち
4931 @samp{Mghn}) と組み合わせるのが普通だ。そうしないと、フィールドにある先行する
4932 空白の数の違いのせいで、結果がわけのわからないものになりかねないからで
4933 ある。
4934
4935 ソートフィールド指定の開始位置が、行末より後ろや、終端側のフィールド
4936 より後ろに来てしまうと、そのフィールドは空になる。@option{-b} オプションを
4937 指定した場合、フィールド指定の @samp{.@var{c}} の部分は、そのフィールドの最初の
4938 非空白文字から数えることになる。
4939
4940 @vindex _POSIX2_VERSION
4941 @vindex POSIXLY_CORRECT
4942 古いシステムの @command{sort} では、ソート・キーの指定に、@samp{+@var{pos1} [-@var{pos2}]}
4943 という 0 から数える旧式の書式が使用できる。@samp{sort +@var{a}.@var{x} -@var{b}.@var{y}} という
4944 旧式の表現は、もし @var{y} が @samp{0} であるか、指定されていない場合は、
4945 @samp{sort -k @var{a+1}.@var{x+1},@var{b}} と同じである。それ以外の場合は、
4946 @samp{sort -k @var{a+1}.@var{x+1},@var{b+1}.@var{y}}
4947 と同じだ。
4948 @sp 1
4949 (訳注: 旧式の書式と新しい書式の違いは、フィールドやフィールド中の
4950 文字の位置を 0 から数えるか、1 から数えるかだけではない。終端指定の
4951 位置が旧式の書式ではキー・フィールドに含まれないのに対し (つまり、
4952 その直前までなのに対し)、新しい書式では含まれるという違いもある。
4953 そこで、上のようになる。)
4954
4955 この旧式の動作は、環境変数 @env{_POSIX2_VERSION} を使って
4956 (@pxref{Standards conformance}) 有効にしたり、無効にしたりすることができる。
4957 また、@env{POSIXLY_CORRECT} が設定されていないときに、@samp{-@var{pos2}} が存在する旧式
4958 の書式を使っても、有効になる。
4959
4960 標準的なホストで使用することを意図したスクリプトでは、旧式の書式は
4961 使わずに、@option{-k} の方を使用するべきである。たとえば、@samp{sort +2} は使わない
4962 方がよい。@samp{sort ./+2} と解釈されるか、@samp{sort -k 3} と解釈されるか、わから
4963 ないからである。そのスクリプトが、旧式の書式にしか対応していないホスト
4964 でも動作しなければならないのなら、スクリプト中で
4965 @w{@samp{if sort -k 1 </dev/null >/dev/null 2>&1; then @dots{}}} といったテストを
4966 行って、どちらの書式を使うべきかを判断すればよい。
4967
4968 用例をいくつか挙げて、オプションの様々な組み合わせを説明する。
4969
4970 @itemize @bullet
4971
4972 @item
4973 数値としてソートし、降順に (つまり、通常の逆に) 並べる。
4974
4975 @example
4976 sort -n -r
4977 @end example
4978
4979 @item
4980 同時にソートを 4 つまで行う。バッファサイズを 10M にする。
4981
4982 @example
4983 sort --parallel=4 -S 10M
4984 @end example
4985
4986 @item
4987 1 番目と 2 番目のフィールドを無視し、さらに 3 番目のフィールドの
4988 先頭の空白も無視して、アルファベット順に並べる。ここで使っている
4989 キーは一つであり、それは 3 番目のフィールドの最初の非空白文字に
4990 始まって、各行の末尾まで続くすべての文字からなっている。
4991
4992 @example
4993 sort -k 3b
4994 @end example
4995
4996 @item
4997 2 番目のフィールドを数値としてソートし、同点の決着を付けるために、
4998 5 番目のフィールドの 3 番目と 4 番目の文字をアルファベット順で
4999 ソートする。フィールドの区切りには @samp{:} を使用する。
5000
5001 @example
5002 sort -t : -k 2,2n -k 5.3,5.4
5003 @end example
5004
5005 ここで注意していただきたいが、もし @option{-k 2,2n} の代わりに @option{-k 2n}
5006 と書いたなら、@command{sort} は、2 番目のフィールドに始まり、行末まで
5007 続くすべての文字を、主キー (primary key) として、それも「数値」の
5008 キーとして使用したことだろう。@command{sort} を実行するたいていの場合に
5009 ついて言えることだが、複数のフィールドにまたがるキーを数値として
5010 使用しても、期待する結果は得られないものである。
5011
5012 もう一つ注意していただきたい。上の例では、@samp{n} 修飾子を最初のキーの
5013 フィールド終端指定に付けている。これは、@option{-k 2n,2} とか @option{-k 2n,2n}
5014 とか指定しても、同じことだったろう。@samp{b} を除くすべての修飾子は、
5015 キー指定のフィールド開始側に付けるか、フィールド終端側に付けるか、
5016 あるいは、その両方に付けるかにかかわりなく、付けられた「キー・
5017 フィールド全体」に適用されるのである。
5018
5019 @item
5020 パスワードファイルを 5 番目のフィールドでソートする。このとき、
5021 先頭の空白は無視する。5 番目のフィールドが同じ値になる行について
5022 は、3 番目のフィールドのユーザ ID 番号でソートする。フィールドの
5023 区切りは、@samp{:} という文字である。
5024
5025 @example
5026 sort -t : -k 5b,5 -k 3,3n /etc/passwd
5027 sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
5028 sort -t : -b -k 5,5 -k 3,3n /etc/passwd
5029 @end example
5030
5031 この三つのコマンドは同じ働きをする。1 番目のコマンドは、最初の
5032 キーの開始位置では先行する空白を無視し、二番目のキーを数値として
5033 ソートするように指定している。他の二つのコマンドは、グローバル・
5034 オプションは修飾子がないソート・キーによって継承されるという
5035 特性を利用している。この場合、継承がうまく働くのは、@option{-k 5b,5b} と
5036 @option{-k 5b,5} が同じことだからだ (訳注: 「@option{-b} オプションは @dots{}
5037 グローバル・オプションから継承した場合は、(開始位置と終端位置の)
5038 両方に付いていることになる」ので、3 番目のコマンドは、@option{-k 5b,5b}
5039 と指定するのと事実上等しい)。両者が同じになるのは、@samp{.@var{c}} という
5040 文字位置を欠いたフィールド終端の指定では、先頭の空白をスキップしても
5041 しなくても、終端位置は変わらないからである。
5042
5043 @item
5044 一群のログファイルをソートする。主キーとして IPv4 アドレスを
5045 使用し、副キーとしてタイムスタンプを使用する。二つの行の
5046 主キーと副キーが全く同じ場合は、入力されたときと同じ順番で、
5047 その行を出力する。ログファイルは、次のような行からなっている。
5048
5049 @example
5050 4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1
5051 211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2
5052 @end example
5053
5054 フィールドは、ただ 1 個の空白で区切られている。IPv4 アドレスの
5055 ソートは辞書順で行う。たとえば、212.61.52.2 は 212.129.233.201 の
5056 前に来る。61 は 129 よりも小さいからだ。
5057
5058 @example
5059 sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
5060 sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
5061 @end example
5062
5063 この例の場合は、@command{sort} を一回起動するだけでは、ことがすまない。
5064 日付が空白 1 個のすぐ後に置かれているだけなのに対して、IPv4 の
5065 構成要素は @samp{.} で区切られているからである。そこで、作業を分割し、
5066 @command{sort} を 2 回起動している。1 回目はタイムスタンプでソートし、
5067 2 回目は IPv4 アドレスでソートするわけだ。タイムスタンプは、年、月、
5068 日のフィールドの順番でソートし、最後に、時・分・秒のフィールドで
5069 ソートしているが、それは @option{-k} オプションを使って、各フィールドを
5070 分離することで実現している。時・分・秒を除いて、各キー・フィールド
5071 の終端を指定する必要はない。@samp{n} や @samp{M} 修飾子は、フィールドの先頭
5072 にある数値や月名の短縮形に基づいてソートを行うが、そうしたものは、
5073 フィールドの境界を越えられないからである。IPv4 アドレスのソートは、
5074 辞書順で行っている。なお、二回目のソートで @samp{-s} を使っているのは、
5075 主キーで一ヶ所にまとめられる行が、副キーによってソートされている
5076 ようにするためである。それに対して、一回目のソートで  @samp{-s} を使って
5077 いるのは、二つのソートの組み合わせ全体を入力順尊重 (stable) にする
5078 ためだ。
5079
5080 @item
5081 アルファベットの大文字小文字の違いを無視してソートし、その順番で
5082 tags ファイルを作成する。
5083
5084 @smallexample
5085 find src -type f -print0 | sort -z -f | xargs -0 etags --append
5086 @end smallexample
5087
5088 この例では、@option{-print0}, @option{-z}, @option{-0} といったオプションを使っている。
5089 そのため、空白などの特殊文字を含んでいるファイル名が、ソート操作に
5090 よって分断されることがない。
5091
5092 @c This example is a bit contrived and needs more explanation.
5093 @c @item
5094 @c Sort records separated by an arbitrary string by using a pipe to convert
5095 @c each record delimiter string to @samp{\0}, then using sort's -z option,
5096 @c and converting each @samp{\0} back to the original record delimiter.
5097 @c
5098 @c @example
5099 @c printf 'c\n\nb\n\na\n' |
5100 @c perl -0pe 's/\n\n/\n\0/g' |
5101 @c sort -z |
5102 @c perl -0pe 's/\0/\n/g'
5103 @c @end example
5104
5105 @item
5106 慣用句 DSU (Decorate Sort Undecorate) の手法 (訳注: 指標を付けて、
5107 ソートして、指標を取る) を採用して、短いものから長いものへと、
5108 行を並べる。
5109
5110 @example
5111 awk '@{print length, $0@}' /etc/passwd | sort -n | cut -f2- -d' '
5112 @end example
5113
5114 一般に、あるデータが @command{sort} コマンドでは直接ソートできないとか、
5115 効率が悪いというとき、そうしたデータをソートするのに、この手法が
5116 役に立つ。
5117
5118 @item
5119 ディレクトリをランダムな順番でで並べる。ただし、各ディレクトリ内の
5120 ファイルについては、その順番を維持する。一例を挙げると、この方法で
5121 演奏リストを作成すれば、アルバムはシャッフルするけれど、各アルバム
5122 内の曲は通常のソート順で演奏するといったことが可能になる。
5123
5124 @example
5125 ls */* | sort -t / -k 1,1R -k 2,2
5126 @end example
5127
5128 @end itemize
5129
5130
5131 @node shuf invocation
5132 @section @command{shuf}: テキストをシャッフルする
5133
5134 @pindex shuf
5135 @cindex shuffling files
5136
5137 @command{shuf} は、入力された行をランダムに並べ替えてから出力することによって、
5138 入力のシャッフルを行う。どの並び替えが出力されるかは、確率的に等しい。
5139 @sp 1
5140 書式:
5141
5142 @example
5143 shuf [@var{option}]@dots{} [@var{file}]
5144 shuf -e [@var{option}]@dots{} [@var{arg}]@dots{}
5145 shuf -i @var{lo}-@var{hi} [@var{option}]@dots{}
5146 @end example
5147
5148 @command{shuf} には三つの動作モードがあり、それぞれ、入力行をどこから取得
5149 するかが違っている。デフォルトでは、標準入力から行を読み込む。以下の
5150 オプションは、動作モードを変更する。
5151
5152 @table @samp
5153
5154 @item -e
5155 @itemx --echo
5156 @opindex -c
5157 @opindex --echo
5158 @cindex command-line operands to shuffle
5159 コマンドラインの各オペランドを入力行として扱う。
5160
5161 @item -i @var{lo}-@var{hi}
5162 @itemx --input-range=@var{lo}-@var{hi}
5163 @opindex -i
5164 @opindex --input-range
5165 @cindex input range to shuffle
5166 @var{lo} から @var{hi} の範囲の符号なしの 10 進整数を 1 行に 1 個含むファイル
5167 から入力があったかのように動作する。
5168
5169 @end table
5170
5171 @command{shuf} の他のオプションは、どの動作モードでも、その動作に影響を
5172 与える。
5173
5174 @table @samp
5175
5176 @item -n @var{lines}
5177 @itemx --head-count=@var{count}
5178 @opindex -n
5179 @opindex --head-count
5180 @cindex head of output
5181 最大でも @var{count} 行までしか出力しない。デフォルトでは、入力された
5182 すべての行を出力する。
5183
5184 @item -o @var{output-file}
5185 @itemx --output=@var{output-file}
5186 @opindex -o
5187 @opindex --output
5188 @cindex overwriting of input, allowed
5189 出力を、標準出力ではなく、@var{output-file} に書き出す。@command{shuf} は、
5190 入力をすべて読み込んでから、@var{output-file} をオープンする。従って、
5191 @code{shuf -o F <F} や @code{cat F | shuf -o F} というコマンドを使って、
5192 ファイルを直接書き変える形でシャッフルしても安全である。
5193
5194 @item --random-source=@var{file}
5195 @opindex --random-source
5196 @cindex random source for shuffling
5197 ランダムデータのソースとして  @var{file} を使用する。そのランダムデータは
5198 どんな並べ替えになるかを決めるのに使用される。@xref{Random sources}.
5199
5200 @item -r
5201 @itemx --repeat
5202 @opindex -r
5203 @opindex --repeat
5204 @cindex repeat output values
5205 値の反復出力を行う。別の言い方をすると、置き換えるものについて
5206 そのつど選択を行う。このオプションを使用した場合、出力は入力を
5207 並び替えたものになるのではない。そうではなく、各出力行がすべての
5208 入力からランダムに選ばれるのである。このオプションは、たいてい
5209 @option{--head-count} と組み合わせて使用する。@option{--head-count} を指定
5210 しないと、@command{shuf} はいつまでも出力を続けることになる。
5211 (coreutils-8.22 の新機能)
5212
5213 @zeroTerminatedOption
5214
5215 @end table
5216
5217 例を挙げる。
5218
5219 @example
5220 shuf <<EOF
5221 A man,
5222 a plan,
5223 a canal:
5224 Panama!
5225 EOF
5226 @end example
5227
5228 @noindent
5229 上記の結果は、こんな出力になるかもしれない。
5230
5231 @example
5232 Panama!
5233 A man,
5234 a canal:
5235 a plan,
5236 @end example
5237
5238 @noindent
5239 同様に、次のコマンドの出力は、
5240
5241 @example
5242 shuf -e clubs hearts diamonds spades
5243 @end example
5244
5245 @noindent
5246 こうなるかもしれない。
5247
5248 @example
5249 clubs
5250 diamonds
5251 spades
5252 hearts
5253 @end example
5254
5255 @noindent
5256 下記は、@samp{shuf -i 1-4} というコマンドの出力の一例である。
5257
5258 @example
5259 4
5260 2
5261 1
5262 3
5263 @end example
5264
5265 @noindent
5266 上記のどの例でも、入力行は 4 行である。従って、入力は 24 とおりに並べ
5267 替えることが可能であり、@command{shuf} が生成するのは、そのどれか一つである。
5268 一般的に言うと、入力行が @var{n} 行なら、@var{n}! とおりに (@var{n} の階乗、すなわち、
5269 @w{@var{n} * (@var{n} - 1) * @dots{} * 1} とおりに) 並べ替えて、出力することができる。
5270
5271 @noindent
5272 それぞれが 0 から 9 までの範囲にある数値を 50 回ランダムに出力する
5273 には、次のようにする。
5274
5275 @example
5276 shuf -r -n 50 -i 0-9
5277 @end example
5278
5279 @noindent
5280 コイン・トス 100 回をシミュレートする。
5281
5282 @example
5283 shuf -r -n 100 -e Head Tail
5284 @end example
5285
5286 @exitstatus
5287
5288
5289 @node uniq invocation
5290 @section @command{uniq}: ファイルから重複を省く
5291
5292 @pindex uniq
5293 @cindex uniquify files
5294
5295 @command{uniq} は、指定された @var{input} ファイルにある行を、重複を省いて書き出す。
5296 ファイルが指定されていない場合や、@var{input} として @samp{-} が指定されている
5297 場合は、標準入力を対象とする。
5298 @sp 1
5299 書式:
5300
5301 @example
5302 uniq [@var{option}]@dots{} [@var{input} [@var{output}]]
5303 @end example
5304
5305 デフォルトでは、@command{uniq} は入力された行を表示するとき、隣接する同一行
5306 があれば、出力に重複する行が現れないように、最初の行だけを残して、残りの
5307 行を捨ててしまう。また、オプションによっては、重複しない行を捨てることや、
5308 すべての隣接する同一行を捨てることもできる。
5309
5310 入力はソートされている必要はないが、重複する入力行が検出されるのは、
5311 それが隣接しているときだけである。もし、隣接していない重複行も捨てたい
5312 のなら、@code{sort -u} を使うとよいだろう。 @xref{sort invocation}.
5313
5314 @vindex LC_COLLATE
5315 比較には @env{LC_COLLATE} ロケール・カテゴリが指定しているルールを使用
5316 する。
5317
5318 @var{output} ファイルが指定されていない場合、@command{uniq} は標準出力に書き出す。
5319
5320 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
5321
5322 @table @samp
5323
5324 @item -f @var{n}
5325 @itemx --skip-fields=@var{n}
5326 @opindex -f
5327 @opindex --skip-fields
5328 重複の検査を行う前に、各行のフィールドを @var{n} 個スキップする。その行に
5329 @var{n} 個より少ないフィールドしかない場合は、比較に null 文字列を使用
5330 する。フィールドとは、少なくとも 1 個以上のスペースやタブで間を区切
5331 られた、スペースやタブを含まない文字の連続である。
5332
5333 互換性のために、@command{uniq} は @option{-@var{n}} という古いオプションの書式をサポート
5334 している。新しいスクリプトでは、@option{-f @var{n}} の方を使うべきである。
5335
5336 @item -s @var{n}
5337 @itemx --skip-chars=@var{n}
5338 @opindex -s
5339 @opindex --skip-chars
5340 重複の検査を行う前に、@var{n} 文字スキップする。その行に @var{n} 個より少ない
5341 文字しかない場合は、比較に null 文字列を使用する。フィールドを
5342 スキップするオプションと、文字をスキップするオプションの両方を
5343 使っている場合は、フィールドのスキップが先に行われる。
5344
5345 @vindex _POSIX2_VERSION
5346 古めのシステムでは、@command{uniq} が @option{+@var{n}} という古いオプションの書式を
5347 サポートしている。環境変数 @env{_POSIX2_VERSION} を使えば、この旧式の
5348 動作を有効したり、無効にしたりできる (@pxref{Standards conformance})。
5349 とは言え、移植を考慮したスクリプトでは、
5350 この環境変数に動作が依存するコマンドの使用は、避けた方がよい。
5351 たとえば、@samp{uniq +10} ではなく、@samp{uniq ./+10} や @samp{uniq -s 10} を使う
5352 べきである。前者では、@samp{+10} が、オプションかファイル名か、まぎらわ
5353 しいからだ。
5354
5355 @item -c
5356 @itemx --count
5357 @opindex -c
5358 @opindex --count
5359 各行に出現回数を付けて表示する。
5360
5361 @item -i
5362 @itemx --ignore-case
5363 @opindex -i
5364 @opindex --ignore-case
5365 行を比較するとき、アルファベットの大文字小文字を区別しない。
5366
5367 @item -d
5368 @itemx --repeated
5369 @opindex -d
5370 @opindex --repeated
5371 @cindex repeated lines, outputting
5372 重複していない行を除去する。このオプションを単独で使った場合、@command{uniq}
5373 は、連続する同一行のうち、最初の 1 行だけを表示し、それ以外の何も
5374 表示しない。
5375
5376 @item -D
5377 @itemx --all-repeated[=@var{delimit-method}]
5378 @opindex -D
5379 @opindex --all-repeated
5380 @cindex all repeated lines, outputting
5381 入力行のうち、連続する同一行の二行目以降を除去せず、重複していない
5382 行だけを除去する。このオプションが役に立つのは、主として、大文字
5383 小文字を無視するとか、選択したフィールドのみを比較するとかいった、
5384 他のオプションと組み合わせて使うときである。@var{delimit-method} は
5385 省略可能であり、指定した場合は、重複行のグループ間の区切り方を
5386 指示することになる。@var{delimit-method} は、以下の一つでなければ
5387 ならない。
5388
5389 @table @samp
5390
5391 @item none
5392 重複行のグループ間に、区切りの印を置かない。@option{--all-repeated}
5393 (@option{-D}) とのみ指定するのと同じことである。
5394
5395 @item prepend
5396 重複行の各グループの前に改行を出力する。
5397 @macro nulOutputNote
5398 @option{--zero-terminated}
5399 (@option{-z}) を指定している場合は、区切りの印として
5400 改行の代わりに、
5401 ゼロバイト (ASCII NUL) を使用する。
5402 @end macro
5403 @nulOutputNote
5404
5405 @item separate
5406 重複行のグループ間を 1 個の改行で分離する。これは、@samp{prepend}
5407 を使うのとほぼ同じだが、最初のグループの前に区切りの印を挿入
5408 しないのが異なっている。それ故、ユーザが出力を直接見る場合に、
5409 より適しているかもしれない。@nulOutputNote
5410 @end table
5411
5412 @macro ambiguousGroupNote
5413 注意していただきたいが、グループ同士を改行で分離しているとき、
5414 入力ストリームに連続する 2 行以上の空行があると、出力がまぎらわ
5415 しいものになる。これを避けるには、入力を @samp{tr -s '\\n'} でフィルタ
5416 リングして、連続する改行をそれぞれの場所で 1 個の改行に置き換え
5417 ればよい。
5418 @end macro
5419 @ambiguousGroupNote
5420
5421 @c FIXME: give an example showing *how* it's useful
5422 このオプションは、GNU による拡張である。
5423
5424 @item --group[=@var{delimit-method}]
5425 @opindex --group
5426 @cindex all lines, grouping
5427 すべての行を出力し、他と区別される各グループの間に区切りを入れる。
5428 @nulOutputNote @var{delimit-method}
5429 は省略可能であり、指定した場合は、グループ間の区切り方を指示する
5430 ことになる。@var{delimit-method} は、以下の一つでなければならない。
5431 (coreutils-8.22 の新機能)
5432
5433 @table @samp
5434
5435 @item separate
5436 他と区別されるグループを 1 個の区切りの印で分離する。これが、
5437 何も指定されていないときの、デフォルトの区切り方であり、出力を
5438 ユーザに直接見せる場合に適している。
5439
5440 @item prepend
5441 他と区別される各グループの前に区切りの印を出力する。
5442
5443 @item append
5444 他と区別される各グループの後ろに区切りの印を出力する。
5445
5446 @item both
5447 他と区別される各グループの前後に区切りの印を出力する。
5448 @end table
5449
5450 @ambiguousGroupNote
5451
5452 このオプションは、GNU による拡張である。
5453
5454 @item -u
5455 @itemx --unique
5456 @opindex -u
5457 @opindex --unique
5458 @cindex unique lines, outputting
5459 連続する同一行は、1 行目も除去する。このオプションを単独で使うと、
5460 @command{uniq} はユニークな (訳注: この場合、同一行が直後に続かないという
5461 意味) 行だけを表示し、それ以外の何も表示しない。
5462
5463 @item -w @var{n}
5464 @itemx --check-chars=@var{n}
5465 @opindex -w
5466 @opindex --check-chars
5467 各行で (フィールドや文字をスキップする指定があれば、スキップした
5468 後で) 文字を何個まで比較するかを指定する。デフォルトでは、行の残り
5469 全部が比較の対象になる。
5470
5471 @zeroTerminatedOption
5472
5473 @end table
5474
5475 @exitstatus
5476
5477
5478 @node comm invocation
5479 @section @command{comm}: ソート済みの二つのファイルを一行づつ比較する
5480
5481 @pindex comm
5482 @cindex line-by-line comparison
5483 @cindex comparing sorted files
5484
5485 @command{comm} は、二つの入力ファイルの共通する行と独自な行を、標準出力に区別
5486 して書き出す。@samp{-} というファイル名は、標準入力を意味している。
5487 @sp 1
5488 書式:
5489
5490 @example
5491 comm [@var{option}]@dots{} @var{file1} @var{file2}
5492 @end example
5493
5494 @vindex LC_COLLATE
5495 入力ファイルは、@command{comm} に渡す前に、@env{LC_COLLATE} のロケールによって
5496 規定された照合順序でソートされていなければならない。入力ファイルが
5497 改行以外の文字で終わっている場合は、自動的に改行が追加される。
5498 @command{sort} コマンドをオプションなしで実行すると、@command{comm} の入力にふさわしい
5499 ファイルが必ず得られる。
5500
5501 @cindex differing lines
5502 @cindex common lines
5503 @c FIXME: when there's an option to supply an alternative separator
5504 @c string, append "by default" to the above sentence.
5505 オプションを付けずに実行すると、@command{comm} は 3 列の出力を生成する。
5506 1 列目は @var{file1} にのみある行であり、2 列目は @var{file2} にのみある行、そして
5507 3 列目は両方のファイルに共通する行である。各列は、1 個のタブ文字で
5508 区切られる。
5509
5510 @opindex -1
5511 @opindex -2
5512 @opindex -3
5513 @option{-1}, @option{-2}, @option{-3} というオプションは、対応する列 (と区切り記号) を
5514 表示しないようにする。オプションについては、「共通オプション」の章も
5515 参照すること。@ref{Common options}.
5516
5517 比較のための他のユーティリティとは違って、@command{comm} の終了ステータスは、
5518 比較結果の如何によらない。@command{comm} は、正常終了すると 0 の終了コードを
5519 返す。エラーがあれば、0 以外のステータスで終了する。
5520
5521 @macro checkOrderOption{cmd}
5522 @option{--check-order} を指定した場合、入力がソートされていないと、エラー
5523 メッセージを出して、実行を中断する。@option{--nocheck-order} オプションを指定
5524 した場合は、入力がソートされていなくても、エラーメッセージを出すことは
5525 ない。どちらのオプションも指定されていない場合に、入力がソートされて
5526 いないとの診断を下すのは、
5527 @ifset JOIN_COMMAND
5528 片方の入力ファイルにもう一方と対にならない
5529 行が見つかったときだけであり、それも入力ファイルのどちらも空ではなく、
5530 中身を持っているときだけである。
5531 @end ifset
5532 @ifclear JOIN_COMMAND
5533 片方の入力ファイルにもう一方と対にならない
5534 行が見つかったときだけである。
5535 @end ifclear
5536 入力ファイルがソートされていないと診断
5537 すると、@command{\cmd\}
5538 は 0 以外のステータスで終了する (従って、そうした出力は
5539 使用するべき
5540 ではない)。
5541
5542 入力ファイルがきちんとソートされていず、しかも、対にならない行を
5543 含む場合に、@option{--nocheck-order} を指定して、そうしたファイルを @command{\cmd\} で
5544 無理矢理処理しても、何か特定の結果をもたらすことは保証できない。おそらく
5545 出力は、期待に添わないものになるだろう。
5546 @end macro
5547 @checkOrderOption{comm}
5548
5549 @table @samp
5550
5551 @item --check-order
5552 入力ファイルのどちらかの内容がきちんとソートされていないと、
5553 エラーメッセージを出して、実行に失敗する。
5554
5555 @item --nocheck-order
5556 入力ファイルの内容がソートされた順番になっているかどうかを、
5557 どちらのファイルについてもチェックしない。
5558
5559 その他のオプション。
5560
5561 @item --output-delimiter=@var{str}
5562 出力における隣り合う列の間に、デフォルトのタブ文字 1 個ではなく、
5563 @var{str} を出力する。
5564
5565 区切り記号の @var{str} は、空であってはならない。
5566
5567 @end table
5568
5569 @node ptx invocation
5570 @section @command{ptx}: パミューテド・インデックスを作成する
5571
5572 @pindex ptx
5573
5574 @command{ptx} の基本的な働きは、テキストファイルを読み込んで、パミューテド・
5575 インデックスを作成することである。パミューテド・インデックスというのは、
5576 各キーワードに前後の文脈を付けて索引項目にするインデックスのことだ。
5577 @sp 1
5578 (訳注: パミューテド・インデックスは、KWIC (Key Word In Context)
5579 インデックスとも言われる。簡単に言えば、本文にあるとおり、キーワードに
5580 前後の文脈を付けて項目として立てる索引のことである。たとえば、"The cow
5581 jumped over the moon." という文があるとしよう。今、キーワードを
5582 角カッコ ([]) で示すとすると、@command{ptx} による一番素朴なパミューテド・
5583 インデックスの作成では、この文から、
5584
5585 @example
5586 [The] cow jumped over the moon.
5587 The [cow] jumped over the moon.
5588 The cow [jumped] over the moon.
5589 The cow jumped [over] the moon.
5590 The cow jumped over [the] moon.
5591 The cow jumped over the [moon].
5592 @end example
5593
5594 @noindent
5595 という、キーワードの位置だけが違う 6 個の索引項目が作られ、キーワード
5596 によってソートされて、出力されるのである。「パミューテド (permuted)」
5597 というのは、文中でキーワードが順番に移動するのを、円順列 (cyclic
5598 permutation) に見立てているかららしい。「順列索引」と訳されることも
5599 ある。パミューテド・インデックスの代表的な例としては、英語などの聖書の
5600 巻末に付属している文脈付きの語句索引、「コンコーダンス」を挙げることが
5601 できる。実際、この文書でもコンコーダンスをパミューテド・インデックスの
5602 同義語として使用している。なお、この @command{ptx} プログラムは、日本語に
5603 対応していない。)
5604 @sp 1
5605 @command{ptx} 実行の書式は次のうちのどちらかである。
5606
5607 @example
5608 ptx [@var{option} @dots{}] [@var{file} @dots{}]
5609 ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
5610 @end example
5611
5612 @option{-G} (または、それと等価な @option{--traditional}) オプションを指定すると、
5613 GNU によるすべての拡張が無効になり、従来のモードで動作するようになる。
5614 従って、いくつかの制限が課されるようになり、プログラムのオプションの
5615 デフォルトの値がいくつか変更される。@option{-G} が指定されていない場合は、GNU
5616 による拡張が常に有効になる。@command{ptx} に対する GNU の拡張については、
5617 この文書では折に触れて説明している。拡張の詳細なリストについては、
5618 「GNU による @command{ptx} の拡張」の節を御覧になっていただきたい。
5619 @xref{Compatibility in ptx}.
5620
5621 個々のオプションについては、以下に続く節で説明する。
5622
5623 GNU による拡張が有効になっていれば、オプションの後ろに 0 個以上の
5624 @var{file} を指定することができる。@var{file} を一つも指定しない場合は、標準入力が
5625 読み込まれる。@var{file} を 1 個以上指定した場合、それは入力ファイルの名前で
5626 あり、入力ファイルはすべて順番に、あたかもすべてのファイルが結合されて
5627 いるかのように読み込まれる。とは言え、各ファイル同士は文脈的に完全に
5628 分離しており、参照箇所情報の自動作成を指定している場合に、参照箇所の
5629 ファイル名や行番号が指し示すのは、個々の入力テキストファイルのそれで
5630 ある。どの場合でも、@command{ptx} は、パミューテド・インデックスを標準出力に
5631 出力する。
5632
5633 GNU による拡張が有効になっていない場合、すなわち、プログラムが従来
5634 モードで動作する場合は、オプションのほかに 0 から 2 個のパラメータを
5635 指定できる。パラメータがない場合、プログラムは標準入力を読み込んで、
5636 標準出力にパミューテド・インデックスを出力する。パラメータが 1 個だけ
5637 の場合、それが示しているのは、標準入力の代わりに読み込まれるテキスト
5638 ファイル (訳注: 上記書式の @var{input}) の名前である。パラメータが二つある
5639 場合、それぞれが示しているのは、読み込み対象の @var{input} ファイルと出力先
5640 の @var{output} ファイルの名前だ。この場合、二番目のパラメータによって指定
5641 されたファイルの元の内容が破壊されることに、くれぐれも気をつけていた
5642 だきたい。この動作は、System V の @command{ptx} との互換性を維持するために
5643 必要になっているものだが、通常 GNU の規格では、オプションによって
5644 指定されるのではない出力パラメータを、使用しないように勧めている。
5645
5646 オプションの値や入力テキストファイルとして指定するいかなるファイルに
5647 対しても、ファイル名の代わりに 1 個のダッシュ @kbd{-} を使用することが
5648 できる。その場合は、標準入力が使われることになる。もっとも、この習慣を
5649 プログラム 1 回の起動につき 1 回以上使うのは、たぶん理屈に合わない。
5650
5651 @menu
5652 * General options in ptx::   プログラム全体の動作に関係するオプション。
5653 * Charset selection in ptx:: 使用している文字セットについて。
5654 * Input processing in ptx::  入力のフィールドと文脈、及びキーワードの選択。
5655 * Output formatting in ptx:: 出力フォーマットのタイプ、及びフィールドの幅。
5656 * Compatibility in ptx::     
5657 @end menu
5658
5659
5660 @node General options in ptx
5661 @subsection 一般オプション
5662
5663 @table @samp
5664
5665 @item -G
5666 @itemx --traditional
5667 すでに述べたように、このオプションは @command{ptx} に対する GNU による
5668 拡張のすべてを無効にして、動作を従来モードに切り替える。
5669
5670 @item --help
5671 簡単なヘルプメッセージを標準出力に表示し、それ以上の処理をせずに
5672 終了する。
5673
5674 @item --version
5675 プログラムのバージョンを標準出力に表示し、それ以上の処理をせずに
5676 終了する。
5677
5678 @end table
5679
5680 @exitstatus
5681
5682
5683 @node Charset selection in ptx
5684 @subsection @command{ptx} が使用する文字セット
5685
5686 @c FIXME:  People don't necessarily know what an IBM-PC was these days.
5687 現在の設定では、@command{ptx} プログラムは、入力ファイルが符号化に 8-bit の
5688 ISO 8859-1 コード (Latin-1 文字セットとも言われる) を使用しているものと
5689 見なすようになっている。ただし、MS-DOS 用にコンパイルされている場合は
5690 別で、その場合は、IBM-PC の文字セットが使用される (GNU の @command{ptx} が
5691 MS-DOS マシンで使えるかどうか、今ではわからないけれど)。7-bit ASCII
5692 と比べると、ISO 8859-1 の文字セットは、アルファベットの部分が異なって
5693 いる。そのため、正規表現におけるマッチングの振る舞いが変わってくる。
5694 キーワードに対するデフォルトの正規表現が (訳注: つまり、GNU の拡張が
5695 有効なときの @samp{\w+} が)、英語で使用しない文字や、ウムラウトやアクセント
5696 のような発音区別符の付いた文字を受け入れることになるわけである。
5697 とは言え、キーワードのソート方法は今だに大雑把であり、使用している
5698 文字セットの順序にきわめて盲目的に従っている。
5699
5700 @table @samp
5701
5702 @item -f
5703 @itemx --ignore-case
5704 ソートするとき、小文字を大文字と同じものとして扱う。
5705
5706 @end table
5707
5708
5709 @node Input processing in ptx
5710 @subsection 単語の選択と入力の処理
5711
5712 @table @samp
5713
5714 @item -b @var{file}
5715 @itemx --break-file=@var{file}
5716
5717 このオプションを使えば、単語を構成するのはどんな文字かを、@option{-W} とは
5718 別のやり方で定義することができる。このオプションでファイルを指名し、
5719 そこに、単語の構成要素になることができない文字のリストを入れておく
5720 のである。このファイルは、@dfn{Break file} と呼ばれる。Break file に
5721 含まれていないいかなる文字も、単語の構成要素になるわけだ。@option{-b}
5722 と @option{-W} の両方のオプションが指定されている場合は、@option{-W} の方が優先
5723 され、@option{-b} は無視される。
5724
5725 GNU の拡張が有効になっているとき、改行を単語区切り文字 (break
5726 character) にしない唯一の方法は、単語区切り文字をすべて Break file
5727 に書き込み、そこに改行を全く含めないことである。Break file 末尾の
5728 改行も除かなければならない。GNU の拡張が無効な場合、スペース、
5729 タブ、改行は、それが Break file に含まれていなくても、常に単語
5730 区切り文字と見なされる。
5731
5732 @item -i @var{file}
5733 @itemx --ignore-file=@var{file}
5734
5735 このオプションで指名するファイルには、出力するコンコーダンスで
5736 キーワードとして採用しない単語のリストを入れておく。このファイルは、
5737 @dfn{Ignore file} と呼ばれる。このファイルは、1 行 1 単語の形式であり、
5738 単語の分離は常に行末によって行われて、@option{-S} オプションの値の影響を
5739 受けることはない。
5740
5741 @item -o @var{file}
5742 @itemx --only-file=@var{file}
5743
5744 このオプションで指名するファイルには、出力するコンコーダンスで
5745 キーワードとして採用する単語のリストを入れておく。このファイルに
5746 書かれていないどんな単語も、キーワードとして採用されることはない。
5747 このファイルは、@dfn{Only file} と呼ばれる。このファイルは、1 行 1 単語
5748 の形式であり、単語の分離は常に行末によって行われて、@option{-S} オプション
5749 の値の影響を受けることはない。
5750
5751 Only file として使われるデフォルトのファイルは存在しない。Only file
5752 と Ignore file の両方が指定されている場合に、ある単語がキーワードと
5753 見なされるのは、その単語が Only file に存在し、しかも Ignore file
5754 に存在しないときだけである。
5755
5756 @item -r
5757 @itemx --references
5758
5759 各入力行において、行頭にあるホワイトスペース以外の文字の連続を
5760 参照箇所情報 (訳注: たとえば、ファイル名、ページ番号、行番号など)
5761 として扱うようにする。この参照箇所情報は、その入力行がどこに
5762 あるかを、作成されるパミューテド・インデックス中で示すために
5763 用いられる。参照箇所情報の生成についての詳細は、次節「出力の
5764 フォーマット」を御覧いただきたい。@xref{Output formatting in ptx}.
5765 このオプションを使用すると、@option{-S} オプションのデフォルトの値が
5766 変更されることになる (訳注: すなわち、GNU の拡張が有効な場合も、
5767 @option{-S} オプションのデフォルト値が文末ではなく、行末になる)。
5768
5769 このオプションを使用したとき、@command{ptx} プログラムは、参照箇所情報が
5770 出力される文脈に混入しないようにするが、その試みはそれほど徹底した
5771 ものではない。しかし、文脈が改行できちんと終止していれば、@command{ptx}
5772 はその試みに成功する。もし、@option{-r} オプションが @option{-S} オプションの
5773 デフォルト値とともに使われているか、あるいは、GNU の拡張が無効に
5774 なっているならば、この条件は必ず満たされることになる。従って、
5775 その場合は、参照箇所情報が出力される文脈からきちんと分離される。
5776 @sp 1
5777 (訳注: 文脈 (context) というのは、出力については、キーワードと
5778 その前後と考えておけばよいが、入力について言うと、@command{ptx} が操作の
5779 対象にする本文の単位 --- 入力のまとまり --- を指すことになる。@option{-S}
5780 の値によって、普通は文か、行になる。)
5781
5782 @item -S @var{regexp}
5783 @itemx --sentence-regexp=@var{regexp}
5784
5785 このオプションでは、行の終わり、または文の終わりを示す正規表現を
5786 指定する。
5787 @sp 1
5788 (訳注: もう少し説明すると、このオプションで指定するのは、入力を
5789 何で区切るかということである。改行で区切れば、いわゆる行が、@command{ptx}
5790 の操作の対象となる入力のまとまり (入力の単位) になり、ピリオド
5791 などで区切れば、いわゆる文が、入力のまとまりになる。このまとまりが
5792 @command{ptx} にとっての文脈でもある。ただし、出力では、文脈のすべてが
5793 表示されるとはかぎらない。なお、そうしたければ、行末や文末以外で
5794 入力を区切ることもできる。)
5795 @sp 1
5796 実際のテキストでは、ここで指定される正規表現のみが、行の終わりや
5797 文の終わりの指標として使われているとはかぎらない。また、入力の
5798 区切りに何を指定しようとも、このオプションの外で特別な意味を
5799 持つことはない (訳注: すなわち、オプション @option{-A}, @option{-i}, @option{-o} など
5800 には影響が及ばない)。デフォルトでは、GNU の拡張が有効なとき、@option{-r}
5801 オプションが使われていなければ、文の終わりの方が入力の区切りとして
5802 使用される。その場合、次の正規表現が GNU Emacs から取り込まれる。
5803
5804 @example
5805 [.?!][]\"')@}]*\\($\\|\t\\|  \\)[ \t\n]*
5806 @end example
5807
5808 GNU の拡張が無効になっている場合や、@option{-r} オプションが指定されて
5809 いる場合は、行の終わりの方が入力の区切りとして使用される。その場合、
5810 デフォルトの正規表現は、単に次のものである。
5811
5812 @example
5813 \n
5814 @end example
5815
5816 空の @var{regexp} を使用するのは、行末や文末の認識を全く無効にするのと
5817 同じである。その場合、ファイル全体が、たった 1 個の長い行、
5818 あるいは、長い文と見なされることになる。ユーザとしては、オプション
5819 @option{-F ""} を使用して、省略の印の生成も全く行わないようにしたくなる
5820 かもしれない。@xref{Regexps, , Syntax of Regular Expressions, emacs,
5821 The GNU Emacs Manual}.
5822
5823 キーワードがたまたま入力行や入力文の先頭近くにあると、出力する
5824 文脈行の行頭に、使用しない領域が生ずることがよくある。また、
5825 キーワードが入力行や入力文の末尾近くにあると、出力する文脈行の
5826 行末に、使用しない領域がしばしば生ずる。@command{ptx} プログラムは、
5827 その文脈を折り返して、そうした不使用領域を埋めようと試みる。
5828 すなわち、その入力行や入力文の後続する部分 (@var{tail}) を使って、
5829 出力する行の左にある不使用領域を埋め、その入力行や入力文の
5830 先行する部分 (@var{head}) を使って、出力する行の右にある不使用領域を
5831 埋めるのである。
5832
5833 このオプションの引数中では、ユーザーの便宜のために、C 言語由来の
5834 よく使うバックスラッシュ・エスケープシーケンスの多くが、@command{ptx}
5835 そのものによって認識され、対応する文字に変換されるようになっている。
5836
5837 @item -W @var{regexp}
5838 @itemx --word-regexp=@var{regexp}
5839
5840 このオプションでは、各キーワードとなる単語とはどのようなものかを
5841 示す正規表現を指定する。デフォルトでは、GNU の拡張が有効になって
5842 いれば、単語とはアルファベットの文字の連続である。すなわち、使用
5843 される正規表現は @samp{\w+} だ。GNU の拡張が無効な場合、デフォルトで
5844 単語と見なされるのは、何であれ、スペース、タブ、改行で区切られる
5845 ものである。この場合、使用される正規表現は @samp{[^ \t\n]+} になる。
5846
5847 @var{regexp} に空の文字列を指定するのは、このオプションを使用しないのと
5848 同じことである。@xref{Regexps, , Syntax of Regular Expressions, emacs,
5849 The GNU Emacs Manual}.
5850
5851 このオプションの引数中では、ユーザーの便宜のために、C 言語で
5852 見られるような、よく使うバックスラッシュ・エスケープシーケンスの
5853 多くが、@command{ptx} そのものによって認識され、対応する文字に変換される
5854 ようになっている。
5855
5856 @end table
5857
5858
5859 @node Output formatting in ptx
5860 @subsection 出力のフォーマット
5861
5862 出力のフォーマットを決めるのは、主として @option{-O} と @option{-T} オプションだが、
5863 両者については、以下のオプション一覧で説明している。@option{-O} も @option{-T} も
5864 指定されず、しかも、GNU の拡張が有効な場合、@command{ptx} プログラムは、
5865 ダム端末に適した出力フォーマットを選択する。各キーワードは一行の
5866 中央に表示され、前後の文脈がその左右に出力される。コンコーダンス
5867 としての出力が一目でわかるように (訳注: すなわち、どれがキーワードで、
5868 どれがその前後の語句かわかりやすいように)、各フィールドはきちんと
5869 揃えられる。おまけの機能として、次のものがある。参照箇所情報の
5870 自動作成が @option{-A} オプションによって選択され、参照箇所が左側の文脈の
5871 前に表示される場合には (すなわち、@option{-R} オプションが選択されていない
5872 場合には)、参照箇所の後ろにコロンが追加される。こうしておくと、
5873 参照箇所を GNU Emacs の @code{next-error} 処理にうまく渡せるようになる
5874 のである。このデフォルトの出力フォーマットでは、改行やタブのような
5875 ホワイトスペース文字は、それぞれ単にただ 1 個のスペースに変換される
5876 だけであり、連続するスペースをわざわざ圧縮するようなことは行われない。
5877 この動作は、将来変更されるかもしれない。そうしたホワイトスペース文字
5878 を除いて、使用している 256 文字からなる文字セット中のほかのすべての
5879 文字は、入力から出力へと手を加えずにそのまま送り出される。
5880
5881 出力フォーマットは、以下のオプションによって、さらに制御される。
5882
5883 @table @samp
5884
5885 @item -g @var{number}
5886 @itemx --gap-size=@var{number}
5887
5888 出力行の各フィールドは、ホワイトスペースによって区切られるが、
5889 そのフィールド同士の間隔の最小サイズを指定する。
5890
5891 @item -w @var{number}
5892 @itemx --width=@var{number}
5893
5894 最終的に出力される各行の最大長を指定する。参照箇所を使用する際、
5895 その長さが最大長に含まれるかどうかは、@option{-R} オプションを付けるか
5896 付けないかよって決まる。@option{-R} オプションを指定しない場合、すなわち、
5897 参照箇所が左の文脈より前に表示される場合は、すべての参照箇所中
5898 の最大長が、出力行の最大長の長さの内に含まれることになる。@option{-R}
5899 オプションを指定した場合、すなわち、参照箇所が右の文脈より後に
5900 表示される場合は、参照箇所や、それに先行するフィールドの区切りが
5901 占める領域は、出力行の最大長の長さに含まれない。
5902
5903 @item -A
5904 @itemx --auto-reference
5905
5906 参照箇所情報の自動生成を選択する。ファイル名と行番号からなる参照
5907 箇所が自動的に生成されて、各入力行に付くことになる。ファイル名と
5908 行番号は 1 個のコロンで区切られる。ただし、標準入力から読み込んで
5909 いる場合は、ファイル名は空になる。@option{-A} と @option{-r} の両方のオプション
5910 が指定されている場合は、入力中にある参照箇所情報が読み込まれた上で
5911 本文から外されることは、@option{-r} 単独の場合と同じだが、出力時に使用
5912 されるのは、自動生成された参照箇所の方である。すなわち、入力中に
5913 ある参照箇所情報は、自動生成されたもので置き換えられる。
5914
5915 @item -R
5916 @itemx --right-side-refs
5917
5918 デフォルトの出力フォーマットでは、@option{-R} オプションを使用しない場合、
5919 @option{-r} や @option{-A} オプションの働きによって生成される参照箇所は、出力行
5920 の左の端、すなわち、左の文脈の前に表示される。それに対して、
5921 デフォルトの出力フォーマットで @option{-R} オプションを指定した場合、
5922 参照箇所が表示されるのは、各出力行の右端、すなわち、右の文脈の
5923 後ろになる。ほかのいかなる出力フォーマットにおいても、基本的に @option{-R}
5924 オプションは無視されるが (訳注: デフォルト以外の出力フォーマット
5925 では、@option{-R} オプションがあってもなくても、参照箇所は右端に出力
5926 される)、それでも、@option{-R} オプションが付いていると、参照箇所の
5927 長さが、@option{-w} で指定した出力行全体の長さの内に入らないという働き
5928 だけは残る。
5929
5930 このオプションは、GNU の拡張が無効であるときは、常に自動的に選択
5931 される。
5932
5933 @item -F @var{string}
5934 @itemx --flac-truncation=@var{string}
5935
5936 このオプションを指定すると、出力に省略があった場合、それを示す
5937 ために文字列 @var{string} を使用するようになる。ほとんどの出力フィールド
5938 は、理論上では、@option{-S} オプションで何を選択するかによって、現在の行、
5939 または、現在の文の、先頭や末尾に向かって伸びて行くものである。
5940 しかし、@option{-w} オプションによって長さを変更できるとは言え、出力行には
5941 許される最大長というものがあり、その最大長はさらにさまざまな出力
5942 フィールドで使用する領域に分割されている。従って、フィールドは、
5943 それを収納する現在の出力行の先頭や末尾を越えて伸ばすことができない
5944 ために、切り詰めなければならないことがあり、そういうときに、省略が
5945 行われるのである。省略の指標として使用されるデフォルトの文字列は、
5946 1 個のスラッシュである。これは、@option{-F /} と指定した場合と同じだ。
5947
5948 @var{string} には、@option{-F @dots{}} のように 1 個以上の文字を指定してもよい。
5949 また、@var{string} が空文字列 (@option{-F ""}) の場合には、省略のフラグは
5950 立てられないことになり、従って、省略の指標は一切付加されない。
5951
5952 このオプションの引数中では、ユーザーの便宜のために、C 言語で
5953 見られるような、よく使うバックスラッシュ・エスケープシーケンスの
5954 多くが、@command{ptx} そのものによって認識され、対応する文字に変換される
5955 ようになっている。
5956
5957 @item -M @var{string}
5958 @itemx --macro-name=@var{string}
5959
5960 @command{nroff} や @command{troff}、あるいは @TeX{} で処理するのにふさわしい出力
5961 フォーマットを生成するとき、@samp{xx} の代わりに使用する別の文字列
5962 @var{string} を指定する。(訳注: @option{-O} や @option{-T} オプションを参照。)
5963
5964 @item -O
5965 @itemx --format=roff
5966
5967 出力フォーマットとして、@command{nroff} や @command{troff} で処理するのに適した
5968 形式を選択する。各出力行は次のようになる。
5969 @sp 1
5970 (訳注: 下記の @var{tail} と @var{head} については、前節 @option{--sentence-regexp}
5971 オプションの説明の終わりから 2 番目のパラグラフをご覧いただきたい。
5972 @var{ref} は参照箇所である。)
5973
5974 @smallexample
5975 .xx "@var{tail}" "@var{before}" "@var{keyword_and_after}"@c
5976  "@var{head}" "@var{ref}"
5977 @end smallexample
5978
5979 従って、あとは、出力の整形を担当する roff のマクロ @samp{.xx} を出力
5980 ファイルに書き込めばよいことになる。この出力フォーマットは、GNU の
5981 拡張が無効なときのデフォルトである。@samp{xx} を別のマクロ名に変更する
5982 には、@option{-M} オプションを使用すればよい (訳注: @option{-M "xx"} のように、
5983 @samp{xx} の部分のみ指定する)。
5984
5985 この出力フォーマットでは、改行やタブのような非表示文字は、それぞれ
5986 ただ 1 個のスペースに変換されるだけで、連続するスペースをわざわざ
5987 圧縮するようなことは行われない。ダブルクォート文字 @kbd{"} はそれぞれ
5988 二重化されるので、@command{nroff} や @command{troff} によって正しく処理される。
5989
5990 @item -T
5991 @itemx --format=tex
5992
5993 出力フォーマットとして、@TeX{} で処理するのに適した形式を選択する。
5994 各出力行は、次のようになる。
5995 @sp 1
5996 (訳注: 下記の @var{tail} と @var{head} については、前節 @option{--sentence-regexp}
5997 オプションの説明の終わりから 2 番目のパラグラフをご覧いただきたい。
5998 @var{ref} は参照箇所である。)
5999
6000 @smallexample
6001 \xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@c
6002 @{@var{after}@}@{@var{head}@}@{@var{ref}@}
6003 @end smallexample
6004
6005 @noindent
6006 従って、あとは、出力の整形を担当する @code{\xx} コマンドの定義を
6007 出力ファイルに書き込めばよいことになる。なお、参照箇所の生成が
6008 行われていない場合、すなわち、@option{-A} オプションも @option{-r} オプションも
6009 指定されていない場合には、各 @code{\xx} 呼び出しの最後の引数は出力
6010 されないことに注意していただきたい。@samp{xx} を別のマクロ名に変更する
6011 には、@option{-M} オプションを使用すればよい (訳注: @option{-M "xx"} のように、
6012 @samp{xx} の部分のみ指定する)。
6013
6014 この出力フォーマットでは、@kbd{$}, @kbd{%}, @kbd{&}, @kbd{#}, @kbd{_} のような特殊文字
6015 のいくつかは、自動的にバックスラッシュで保護される。中カッコ @kbd{@{},
6016 @kbd{@}} は、一対のドル記号とバックスラッシュとで保護される (強引に
6017 数式モードにするわけだ)。バックスラッシュそのものは、@code{\backslash@{@}}
6018 というシーケンスになる。同形の他の文字と区別するために文字の上下に
6019 付ける発音区別符のうち、サーカムフレックスとチルダは、それぞれ
6020 @code{\^@{ @}} と @code{\~@{ @}} というシーケンスになる (訳注: 実際には @code{@{@}}
6021 の位置に a  なり e なりといった文字が来る)。使用している文字セット
6022 中の他の発音区別符が付いている文字についても、可能なかぎり、適切な
6023 @TeX{} のシーケンスが生成される。それ以外の文字については、改行やタブ
6024 のような非表示文字や、ASCII の文字セットに属さない他のすべての文字
6025 は、単にただ 1 個のスペースに変換され、連続するスペースをわざわざ
6026 圧縮するようなことは行われない。@TeX{} のための特殊文字の処理は以上の
6027 ようなものだが、改善する方法があれば、作者までお知らせいただきたい。
6028
6029 @end table
6030
6031
6032 @node Compatibility in ptx
6033 @subsection GNU による @command{ptx} の拡張
6034
6035 このバージョンの @command{ptx} には、System V の @command{ptx} には存在しない機能が
6036 いくつかある。そうした追加機能は、コマンドラインオプションの @option{-G} を
6037 使えば、働かなくなるが、ほかのコマンドラインオプションによって上書き
6038 されれば、話は別である。もっとも、GNU の拡張の中には、上書きによって
6039 回復できないものもあるので、GNU の拡張を使いたければ、@option{-G} オプション
6040 を最初から使わないのが、すっきりした方法だ。以下に、このプログラムと
6041 System V の @command{ptx} の相違点を挙げておく。
6042
6043 @itemize @bullet
6044
6045 @item
6046 このプログラムでは、一度に複数の入力ファイルを読み込むことが
6047 できる。また、生成したコンコーダンスは、常に標準出力に書き出さ
6048 れる。それに対して、System V の @command{ptx} は、ファイルをたった 1 個
6049 しか読み込まず、結果を書き出すのは、標準出力のこともあるが、
6050 コマンドに 2 番目の @var{file} パラメータが指定されていれば、その @var{file}
6051 に対してである。
6052
6053 オプションで指定しない出力パラメータを持つのは、危険な習慣であり、
6054 GNU では、できるだけ避けるようにしている。従って、@command{ptx} を GNU と
6055 System V のどちらでも、問題なく同じように使いたいなら、入力ファイル
6056 は常に一つしか使わず、実行結果は常に標準出力に出力されるものと考えて
6057 おいた方がよい。また、@command{ptx} を使用してアプリケーションを作成する
6058 場合には、インストールされている @command{ptx} で @option{-G} オプションが使用
6059 できるとわかれば、@command{ptx} を呼び出すとき、@option{-G} オプションを必ず付ける
6060 ようにしたくなるかもしれない。
6061
6062 @item
6063 System V の @command{ptx} で利用できるオプションは、@option{-b}, @option{-f}, @option{-g},
6064 @option{-i},
6065 @option{-o}, @option{-r}, @option{-t}, @option{-w} だけである。他のオプションは、すべて GNU の
6066 拡張だが、今この箇条書きで繰り返すことはしない。なお、オプションの
6067 中には、以下でも述べているように、GNU の拡張が有効になっていると、
6068 効果が少し変わるものもある。
6069
6070 @item
6071 GNU の拡張のデフォルトでは、コンコーダンス出力のフォーマットは、
6072 @command{troff} や @command{nroff} 向けになっていない。むしろ、ダム端末向けの
6073 フォーマットになっている。@command{troff} や @command{nroff} 向けの出力を選択し
6074 たかったら、@option{-O} オプションを使用すればよい。
6075
6076 @item
6077 @option{-R} オプションを使用しないと、参照箇所の最大長が、出力行全体
6078 の長さから差し引かれる。GNU の拡張を無効にすると、参照箇所の
6079 長さは、出力行の長さの勘定に入らないことになる。
6080
6081 @item
6082 GNU の拡張が無効になっていても、256 バイトの文字セットのすべての
6083 文字が --- ASCII NUL バイト含めて --- 常に入力ファイルから読み込
6084 まれて処理され、有害な作用をもたらすことはない。それに対して、
6085 System V の @command{ptx} は、8-bit の文字を受け付けない。若干の制御文字
6086 も拒否する。また、チルダ @kbd{~} も拒否する。
6087
6088 @item
6089 GNU の拡張が無効になっていても、入力行の長さは、利用できるメモリに
6090 よってしか制限されない。それに対して、System V の @command{ptx} が処理の
6091 対象にするのは、各行に付き最初の 200 文字だけである。
6092
6093 @item
6094 単語区切り文字 (break character、単語を構成しない文字) のデフォルト
6095 は、使用している文字セットにおけるアルファベットのすべての文字
6096 (発音区別符のあるなしを問わない) 以外のあらゆる文字である。GNU の
6097 拡張が無効な場合は、単語区切り文字のデフォルトは、スペース、タブ、
6098 改行のみになる。
6099
6100 @item
6101 このプログラムは、出力行の長さを System V の @command{ptx} より上手に処理
6102 する。GNU の拡張が無効になっている場合、このプログラムは System V
6103 の @command{ptx} の動作をなるべく真似ようとするが、それでも、System V の
6104 ちょっとした癖のいくつかは、完全には再現できない。
6105
6106 @item
6107 ユーザは Ignore file と Only file の両方を指定することができる。
6108 System V の @command{ptx} では、そんなことはできない。
6109
6110 @end itemize
6111
6112
6113 @node tsort invocation
6114 @section @command{tsort}: トポロジカル・ソート
6115
6116 @pindex tsort
6117 @cindex topological sort
6118
6119 @command{tsort} は、指定された @var{file} に対してトポロジカル・ソートを行う。
6120 入力ファイルが指定されていない場合や、@var{file} として @samp{-} が指定されて
6121 いる場合は、標準入力を対象にする。より詳しい説明や、このコマンドが
6122 作成された事情については、次節「@command{tsort}: 誕生の背景」を御覧に
6123 なっていただきたい。 @ref{tsort background}
6124 @sp 1
6125 書式:
6126
6127 @example
6128 tsort [@var{option}] [@var{file}]
6129 @end example
6130
6131 @command{tsort} は入力を、空白で区切られた 2 個一組の文字列として読み込む。
6132 そうした文字列の各組は、部分的な順序を示している。出力は、与えられた
6133 部分的な順序に対応する全体としての順序である。
6134
6135 例を挙げよう。
6136
6137 @example
6138 tsort <<EOF
6139 a b c
6140 d
6141 e f
6142 b c d e
6143 EOF
6144 @end example
6145
6146 @noindent
6147 (訳注: 上の例は、"a b/c d/e f/b c/d e" という組を与えている。)
6148 @sp 1
6149 出力は、こうなる。
6150
6151 @example
6152 a
6153 b
6154 c
6155 d
6156 e
6157 f
6158 @end example
6159
6160 もっと現実的な例を考えてみよう。たくさんの関数をすべて一つのファイル
6161 に書いているとしよう。しかも、一つを除いて、他のすべての関数を static
6162 として宣言している。現在のところ、その例外 (@code{main} ということにする)
6163 が、ファイル中で定義されている最初の関数であり、それが直接呼び出す
6164 関数群がそれに続き、さらにその後に、その関数群が呼び出す関数が続く @dots{}
6165 という形になっている。さて、ここで、プロトタイプを利用することにしたと
6166 しよう。そうなると、呼び出される関数のすべてを宣言するか (そのためには、
6167 定義の部分から情報をどっさりコピーしなければならない)、あるいは、
6168 できるだけ多くの関数が、使用される前に定義されているように、関数群を
6169 並べ替えるか、どちらかを選ばなければならない。後者の作業を自動化する
6170 方法の一つが、各関数についてそれが直接呼び出す関数のリストを作成する
6171 ことである。そうしたリストを生成するプログラムはたくさんある。いわゆる
6172 コール・グラフを作成するプログラムだ。以下のリストをご覧になって
6173 いただきたい。各行は、左側の関数が右側の関数を直接呼び出していることを
6174 示している。
6175
6176 @example
6177 main parse_options
6178 main tail_file
6179 main tail_forever
6180 tail_file pretty_name
6181 tail_file write_header
6182 tail_file tail
6183 tail_forever recheck
6184 tail_forever pretty_name
6185 tail_forever write_header
6186 tail_forever dump_remainder
6187 tail tail_lines
6188 tail tail_bytes
6189 tail_lines start_lines
6190 tail_lines dump_remainder
6191 tail_lines file_lines
6192 tail_lines pipe_lines
6193 tail_bytes xlseek
6194 tail_bytes start_bytes
6195 tail_bytes dump_remainder
6196 tail_bytes pipe_bytes
6197 file_lines dump_remainder
6198 recheck pretty_name
6199 @end example
6200
6201 ここで @command{tsort} を使用すると、こうした関数について、上記の後者の要求を
6202 満たすような順番を作成することができる。
6203
6204 @example
6205 example$ tsort call-graph | tac
6206 dump_remainder
6207 start_lines
6208 file_lines
6209 pipe_lines
6210 xlseek
6211 start_bytes
6212 pipe_bytes
6213 tail_lines
6214 tail_bytes
6215 pretty_name
6216 write_header
6217 tail
6218 recheck
6219 parse_options
6220 tail_file
6221 tail_forever
6222 main
6223 @end example
6224
6225 @command{tsort} は、入力にループがあれば検出し、出会った最初のループを
6226 標準エラーに書き出す。
6227
6228 一般に、ある部分的な順序に対して、唯一の全体的な順序というものは存在
6229 しないことに、留意していただきたい。上記のコール・グラフの場合で言えば、
6230 関数 @code{parse_options} は、@code{main} の前でありさえすれば、リストのどこに
6231 でも来ることができる。
6232
6233 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
6234 options}.
6235
6236 @exitstatus
6237
6238 @menu
6239 * tsort background::         tsort が誕生した経緯。
6240 @end menu
6241
6242 @node tsort background
6243 @subsection @command{tsort}: 誕生の背景
6244
6245 @command{tsort} が存在しているのは、Unix のリンカのごく初期のバージョンでは、
6246 一つのアーカイブファイルの処理をたった一回しか行わず、それも、
6247 ファイルの最初から最後へと順番に見ていくだけだったからである。当時の
6248 @command{ld} は、アーカイブ中の各オブジェクトを読み込むとき、そのオブジェクトが
6249 プログラムに必要かどうかの判断を、リンク作業のその時点でまだ定義
6250 されていない何らかのシンボルを定義しているかどうかを基準にして
6251 行っていた。
6252
6253 そのため、アーカイブ中の依存関係には、特別な扱いが必要になった。
6254 たとえば、@code{scanf} はたぶん @code{read} を呼んでいる。それは、リンカが
6255 アーカイブをたった一回最初から順番に読んで行くとき、@code{scanf.o} が
6256 @code{read.o} より前にあることが重要だったということである。なぜなら、
6257 そうなっていないと、@code{scanf} を呼ぶけれど、@code{read} を呼ばないプログラム
6258 では、@code{read} に対する参照が、予期に反して "unresolved" になってしまい
6259 かねなかったからだ。
6260
6261 この問題に対処する方法は、次のようなものだった。まず、オブジェクト
6262 ファイル同士の依存関係の集合を生成した。この作業は、@command{lorder} という
6263 シェルスクリプトによって行われていた。筆者の知るかぎり、現在 GNU では
6264 lorder というツールを提供していないが、BSD 系のディストリビューション
6265 では、今でもなお見つけることができる。
6266
6267 次に、この @command{lorder} の出力に対して @command{tsort} を実行した。そして、
6268 そのソートされた結果を使って、アーカイブにオブジェクトを追加する順番を
6269 決めたのである。
6270
6271 こうした作業全体が、1980 年ごろから時代遅れのものになった。
6272 というのは、Unix のアーカイブは現在ではシンボル・テーブルを内蔵して
6273 おり (従来は @command{ranlib} によって作られていたが、今ではたいてい @command{ar}
6274 そのものによって作られている)、Unix のリンカはこのシンボル・テーブルを
6275 使用して、アーカイブファイルに対する複数回の読み込みを効率的に行うから
6276 である。
6277
6278 ともあれ、これが tsort が誕生した経緯である。すなわち、当時のリンカ
6279 のアーカイブファイルを取り扱う方法に問題があり、その問題を解決するため
6280 の工夫だったのだ。そして、その問題は、その後、別のやり方で解決される
6281 ようになったのである。
6282
6283
6284 @node Operating on fields
6285 @chapter フィールド操作
6286
6287 @menu
6288 * cut invocation::           各行の選択した部分を表示する。
6289 * paste invocation::         複数のファイルの各行をマージする。
6290 * join invocation::          共通のフィールドに基づいて行を連結する。
6291 @end menu
6292
6293
6294 @node cut invocation
6295 @section @command{cut}: 各行の選択した部分を表示する
6296
6297 @pindex cut
6298 @command{cut} は、各ファイルから各行の一部を抜き出して、標準出力に書き出す。
6299 ファイルが指定されていない場合や、ファイル名として @samp{-} が指定されて
6300 いる場合は、標準入力を対象とする。
6301 @sp 1
6302 書式:
6303
6304 @example
6305 cut @var{option}@dots{} [@var{file}]@dots{}
6306 @end example
6307
6308 以下のオプション一覧で @var{byte-list}, @var{character-list}, @var{field-list} と
6309 表記されているものは、コンマで区切られた、1 個以上の数字や範囲から
6310 なるリストである (範囲は、ダッシュを間に挟む 2 個の数字)。バイト、
6311 文字、フィールドは 1 から数える。不完全な範囲を指定することもでき、
6312 @option{-@var{m}} は @samp{1-@var{m}} と同じことであり、@samp{@var{n}-} は
6313 @samp{@var{n}} から行末、あるいは最後の
6314 フィールドまでと同じことである。リストの要素は、繰り返してもよく、
6315 部分的に重なり合ってもよく、どんな順序で指定してもよい。ただし、
6316 入力中の選択した部分が書き出されるのは、読み込まれたときと同じ順序
6317 であり、しかも、ただ一度だけである。(訳注: たとえば、@samp{-f 3,1,3}
6318 などと指定することはできるが、出力されるときは field-1, field-3
6319 の順番であり、field-3 が二度出力されることもない。)
6320
6321 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6322
6323 @table @samp
6324
6325 @item -b @var{byte-list}
6326 @itemx --bytes=@var{byte-list}
6327 @opindex -b
6328 @opindex --bytes
6329 @var{byte-list} で指定された位置にあるバイトのみを選択して、表示する。
6330 タブやバックスペースも他の文字と同様に扱う。すなわち、そうした
6331 ものも 1 バイトを占める。出力用のデリミタ (delimiter、区切りの印)
6332 が指定されている場合は (@option{--output-delimiter} の説明を参照)、選択
6333 されたバイトからなる範囲同士の間にデリミタ文字列を出力する。
6334
6335 @item -c @var{character-list}
6336 @itemx --characters=@var{character-list}
6337 @opindex -c
6338 @opindex --characters
6339 @var{character-list} で指定された位置にある文字のみを選択して、表示する。
6340 現在のところ、@option{-b} と同じだが、プログラムの国際化が進むと、動作が
6341 変わることになるだろう。タブやバックスペースも他の文字と同様に
6342 扱う。すなわち、そうしたものも 1 文字と数える。出力用のデリミタが
6343 指定されている場合は (@option{--output-delimiter} の説明を参照)、選択
6344 された文字からなる範囲同士の間にデリミタ文字列を出力する。
6345
6346 @item -f @var{field-list}
6347 @itemx --fields=@var{field-list}
6348 @opindex -f
6349 @opindex --fields
6350 @var{field-list} で指定されたフィールドのみを選択して、表示する。
6351 フィールドの区切りは、デフォルトではタブ文字 1 個である。なお、
6352 @option{--only-delimited} (@option{-s}) オプションが指定されていない場合は、
6353 デリミタ文字を全く含まない行も表示する。
6354
6355 一言言っておくと、@command{awk} を使えば、もっと洗練されたフィールド処理が
6356 可能になる。また、@command{awk} ならデフォルトで、フィールドの区切りに空白
6357 文字の連続を使用し (すなわち、フィールドの前後から除去し)、さらに、
6358 行頭と行末の空白を無視してくれるだろう。
6359 @example
6360 @verbatim
6361 awk '{print $2}'      # 2 番目のフィールドを表示する
6362 awk '{print $(NF-1)}' # 最後から 2 番目のフィールドを表示する
6363 awk '{print $2,$1}'   # 最初の 2 フィールドを逆に並べる
6364 @end verbatim
6365 @end example
6366
6367 ありそうにないことだが、@command{awk} が利用できない状況だとしよう。その
6368 場合は、@command{join} コマンドを使えば、上記で @command{awk} がやっているように、
6369 空白文字を処理することができる。
6370 @example
6371 @verbatim
6372 join -a1 -o 1.2     - /dev/null # 2 番目のフィールドを表示する
6373 join -a1 -o 1.2,1.1 - /dev/null # 最初の 2 フィールドを逆に並べる
6374 @end verbatim
6375 @end example
6376
6377 @item -d @var{input_delim_byte}
6378 @itemx --delimiter=@var{input_delim_byte}
6379 @opindex -d
6380 @opindex --delimiter
6381 @option{-f} と併せて使うと、入力のフィールド区切りに @var{input_delim_byte} の
6382 最初のバイトが使用される (デフォルトはタブ)。
6383
6384 @item -n
6385 @opindex -n
6386 マルチバイト文字を分割しない (現在のところ、機能しない)。
6387
6388 @item -s
6389 @itemx --only-delimited
6390 @opindex -s
6391 @opindex --only-delimited
6392 @option{-f} を使うとき、フィールド区切り文字を含まない行の表示をしない。
6393 通常は、フィールド区切り文字を含まない行は、行全体がそのまま表示
6394 される。
6395
6396 @item --output-delimiter=@var{output_delim_string}
6397 @opindex --output-delimiter
6398 @option{-f} と一緒に使った場合は、出力フィールド間が @var{output_delim_string}
6399 で区切られる。@option{-f} を指定したときのデフォルトは、入力時のデリミタを
6400 使用することである。@option{-b} や @option{-c} を使用して、(フィールドの範囲では
6401 なく) バイト位置や文字位置の範囲を選択した場合は、選択されたバイト
6402 の重なり合わない範囲同士の間に @var{output_delim_string} が出力される。
6403
6404 @item --complement
6405 @opindex --complement
6406 このオプションは GNU の拡張である。@option{-b}, @option{-c}, @option{-f} オプションで
6407 選択されたバイト、文字、フィールドを含まない部分を選択して、表示する。
6408 言い換えれば、そうしたオプションによって指定されたバイトや文字や
6409 フィールドは「表示しない」ということだ。このオプションは、フィールドが
6410 たくさんあるとき、そのうちの一部を除いたすべてを表示したい場合に
6411 便利である。
6412
6413 @end table
6414
6415 @exitstatus
6416
6417
6418 @node paste invocation
6419 @section @command{paste}: 複数のファイルの各行をマージする
6420
6421 @pindex paste
6422 @cindex merging files
6423
6424 @command{paste} は、指定された各ファイルの行番号が同じ行を、タブ文字を
6425 間にはさんで連結して、標準出力に書き出す。入力ファイルが全く
6426 指定されていない場合や、ファイル名が @samp{-} だった場合は、標準入力が
6427 使用される。
6428
6429 書式:
6430
6431 @example
6432 paste [@var{option}]@dots{} [@var{file}]@dots{}
6433 @end example
6434
6435 たとえば、次のような 2 個のファイルに対して、
6436 @example
6437 $ cat num2
6438 1
6439 2
6440 $ cat let3
6441 a
6442 b
6443 c
6444 @end example
6445
6446 各ファイルから行を順番に拾う。
6447 @example
6448 $ paste num2 let3
6449 1       a
6450 2       b
6451        @ c
6452 @end example
6453
6454 片方のファイルの行を二回使う。
6455 @example
6456 $ paste num2 let3 num2
6457 1       a      1
6458 2       b      2
6459        @ c
6460 @end example
6461
6462 標準入力から行を取得して混ぜる。
6463 @example
6464 $ paste - let3 - < num2
6465 1       a      2
6466        @ b
6467        @ c
6468 @end example
6469
6470 連続する行を、スペースを間にはさんで結合する。
6471 @example
6472 $ seq 4 | paste -d ' ' - -
6473 1 2
6474 3 4
6475 @end example
6476
6477 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6478
6479 @table @samp
6480
6481 @item -s
6482 @itemx --serial
6483 @opindex -s
6484 @opindex --serial
6485 各ファイルから 1 行づつ取り出して連結するのではなく、一つの
6486 ファイルのすべての行をまとめて 1 行に連結する。上の例のデータを
6487 使用すると、
6488
6489 @example
6490 $ paste -s num2 let3
6491 1       2
6492 a       b       c
6493 @end example
6494
6495 @item -d @var{delim-list}
6496 @itemx --delimiters=@var{delim-list}
6497 @opindex -d
6498 @opindex --delimiters
6499 連結する行の区切りに、タブではなく、@var{delim-list} の各文字を順番に
6500 使用する。@var{delim-list} を使い切ってしまった場合は、最初の文字に
6501 戻って使用して行く。上記のデータを例に取ると、
6502
6503 @example
6504 $ paste -d '%_' num2 let3 num2
6505 1%a_1
6506 2%b_2
6507 %c_
6508 @end example
6509
6510 @end table
6511
6512 @exitstatus
6513
6514
6515 @node join invocation
6516 @section @command{join}: 共通のフィールドに基づいて行を結合する
6517
6518 @pindex join
6519 @cindex common field, joining on
6520
6521 @command{join} は、二つの入力ファイルを対象に、同一の共通フィールド (join
6522 field) を持つことで「対」になっている各行を、1 行にまとめて、標準出力
6523 に書き出す。
6524 @sp 1
6525 書式:
6526
6527 @example
6528 join [@var{option}]@dots{} @var{file1} @var{file2}
6529 @end example
6530
6531 @var{file1} と @var{file2} の片方は @samp{-}、すなわち標準入力であってもよい (両方とも
6532 標準入力は不可)。@var{file1} と @var{file2} は、共通フィールドに基づいてソートされて
6533 いるべきである。
6534
6535 @vindex LC_COLLATE
6536 通常、ソート順は、@env{LC_COLLATE} のロケールが規定している照合順序で
6537 ある。@option{-t} オプションが指定されていない場合は、両ファイルについて
6538 並び方を比較する際、@code{sort -b} の場合と同様に、共通フィールドの先頭に
6539 ある空白が無視される。また、@option{--ignore-case} が指定されている場合は、
6540 @code{sort -f} と同様、共通フィールドでアルファベットの大文字と小文字は
6541 区別されない。
6542
6543 @command{sort} の出力を @command{join} に渡すなら、@command{sort} と @command{join}
6544 が使用する
6545 ロケールやオプションは首尾一貫していなければならない。@samp{sort -k 1b,1}
6546 のようなコマンドを使用すれば、デフォルトの共通フィールドに基づいて、
6547 ファイルをソートすることができる。しかし、ロケール、共通フィールド、
6548 区切り記号、比較オプションなどにデフォルト以外のものを使用する場合は、
6549 @command{join} と @command{sort} の間で矛盾が起きないように、そうしたものを選択
6550 しなければならないのだ。@samp{join -t ''} が指定された場合は、行全体が共通
6551 フィールドとして考慮の対象になるが、これは、sort のデフォルトの動作に
6552 対応している。
6553
6554 入力のすべての行が対になっている場合は、GNU による拡張が利用できる。
6555 この場合、並んでいる順番は、対になる二つのフィールドが同じであると判断
6556 されるならば、どんな順番でもよい。ただし、並び方の比較を上述のように
6557 行ったとき、二つのフィールドが同じだと判断される場合であり、その場合
6558 のみである。例を挙げよう。
6559
6560 @example
6561 $ cat file1
6562 a a1
6563 c c1
6564 b b1
6565 $ cat file2
6566 a a2
6567 c c2
6568 b b2
6569 $ join file1 file2
6570 a a1 a2
6571 c c1 c2
6572 b b1 b2
6573 @end example
6574
6575 @set JOIN_COMMAND
6576 @checkOrderOption{join}
6577 @clear JOIN_COMMAND
6578
6579 デフォルトの動作は次のようになっている。
6580 @itemize
6581 @item 共通フィールド (join field) は、各行の最初のフィールドである。
6582 @item 入力の各フィールドは、1 個以上の空白 (スペースやタブ) で区切られる。
6583 行頭の空白は無視される。
6584 @item 出力の各フィールドは、1 個のスペースで区切られる。
6585 @item 各出力行の構成は、共通フィールド、@var{file1} の残りのフィールド、
6586 @var{file2} の残りのフィールドの順になる。
6587 @end itemize
6588
6589 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6590
6591 @table @samp
6592
6593 @item -a @var{file-number}
6594 @opindex -a
6595 @var{file-number} (@samp{1} か @samp{2}) のファイルに、もう一方のファイルと対に
6596 ならない行がある場合、通常の出力のほかに、その行も表示する。
6597
6598 @item --check-order
6599 入力ファイルのどちらかの内容がきちんとソートされていないと、
6600 エラーメッセージを出して、実行に失敗する。
6601
6602 @item --nocheck-order
6603 入力ファイルの内容がソートされた順番になっているかどうかを、どちらの
6604 ファイルについてもチェックしない。これが、デフォルトである。
6605
6606 @item -e @var{string}
6607 @opindex -e
6608 入力では欠けているフィールドを、出力では @var{string} で補う。すなわち、
6609 オプション @option{-1}, @option{-2}, @option{-j}, @option{-o} などを指定したときに、欠けている
6610 フィールドがそれに当たる。
6611
6612 @item --header
6613 @opindex --header
6614 各入力ファイルの最初の行をヘッダ行と見なす。ヘッダ行も結合され、
6615 最初の出力行として表示される。@option{-o} を使って、出力フォーマットを
6616 指定している場合は、ヘッダ行もそのフォーマットに従って出力される。
6617 ヘッダ行は、@option{--check-order} が指定されていても、並び順のチェックを
6618 受けない。なお、両ファイルのヘッダ行がマッチしない場合は、一番目の
6619 ファイルのヘッダ・フィールドが使用される。
6620
6621 @item -i
6622 @itemx --ignore-case
6623 @opindex -i
6624 @opindex --ignore-case
6625 キーを比較する際、アルファベットの大文字小文字を区別しない。この
6626 オプションを使用するときは、両方の入力ファイルの行が、同じように
6627 大文字小文字を区別せず並んでいなければならない。そうした順番で並
6628 べるには、@samp{sort -f} を使えばよい。
6629
6630 @item -1 @var{field}
6631 @opindex -1
6632 ファイル 1 では @var{field} 番目のフィールドを共通フィールドとする
6633 (@var{field} は正の整数)。
6634
6635 @item -2 @var{field}
6636 @opindex -2
6637 ファイル 2 では @var{field} 番目のフィールドを共通フィールドとする
6638 (@var{field} は正の整数)。
6639
6640 @item -j @var{field}
6641 @option{-1 @var{field} -2 @var{field}} と等価。
6642
6643 @item -o @var{field-list}
6644 @itemx -o auto
6645 キーワードの @samp{auto} が指定されると、@command{join} は各ファイルの最初の
6646 行を元にして、出力フォーマットを推測する。それは、デフォルトの
6647 出力フォーマットとほぼ同じだが、それだけでなく、各行に必ず同数の
6648 フィールドを出力するようにする。また、欠けているフィールドがあれば、
6649 @option{-e} オプションの指定する文字列で補う。余分なフィールドは除去する。
6650
6651 @samp{auto} が指定されていない場合は、@var{field-list} のフォーマットに従っ
6652 て、各出力行を構成する。@var{field-list} の各要素は、@samp{0} 一文字か、@var{m.n}
6653 という形を取る。ここで、@var{m} はファイル番号であり、@samp{1} か @samp{2} である。
6654 @var{n} はフィールド番号であり、正の整数である。
6655
6656 @samp{0} というフィールド指定は、共通フィールドを指している。ほとんどの
6657 場合、@samp{0} というフィールド指定と同じことが、共通フィールドを明示的
6658 に @var{m.n} で示すことでも、実現できるだろう。しかしながら、(@option{-a} オプ
6659 ションなり @option{-v} オプションなりを使用して)、対にならない行を表示
6660 する場合、対にならない行が両方のファイルに存在すると、@var{field-list} で
6661 @var{m.n} をどう使おうとも、共通フィールドを指定できないのだ。@command{join} で
6662 共通フィールドの指定が常に可能になるように、POSIX は @samp{0} という
6663 フィールド指定法を考案したのである。
6664
6665 @var{field-list} の各要素は、コンマ、または空白で区切られる。区切りに空白
6666 を使用するときは、シェルによって解釈されないように、たいていの場合
6667 引用符で囲む必要がある。たとえば、コマンド @samp{join -o 1.2,2.2} と
6668 @samp{join -o '1.2 2.2'} は、同じ動作になる。
6669
6670 @var{field-list} の指定は、すべての出力行に適用される。これは、@option{-a} や
6671 @option{-v} オプションによって出力されるものにも当てはまる。
6672
6673 @item -t @var{char}
6674 入出力のフィールドの区切りに、文字 @var{char} を使用する。@var{char} は、入力
6675 ファイルに現れる一つ一つが、有意なものとして扱われる。@samp{sort -t @var{char}}
6676 を @option{-b} なしで実行すれば、このオプションに対応する順序に行を
6677 並べることができる。@samp{join -t ''} を指定すると、行全体が共通フィー
6678 ルドとして考慮の対象になり、これは sort のデフォルトの動作に対応
6679 している。@samp{-t '\0'} を指定すると、ASCII NUL 文字がフィールドの
6680 区切りに使用される。
6681
6682 @item -v @var{file-number}
6683 通常の出力はせず、@var{file-number} (@samp{1} か @samp{2} である) のファイルに存在
6684 する、対にならない各行を表示する。
6685
6686 @zeroTerminatedOption
6687
6688 @end table
6689
6690 @exitstatus
6691
6692
6693 @node Operating on characters
6694 @chapter 文字操作
6695
6696 @cindex operating on characters
6697
6698 以下のコマンドは、個々の文字に対して操作を行う。
6699
6700 @menu
6701 * tr invocation::            文字の置換、圧縮、削除を行う。
6702 * expand invocation::        タブをスペースに変換する。
6703 * unexpand invocation::      スペースをタブに変換する。
6704 @end menu
6705
6706
6707 @node tr invocation
6708 @section @command{tr}: 文字の置換、圧縮、削除を行う
6709
6710 @pindex tr
6711
6712 書式:
6713
6714 @example
6715 tr [@var{option}]@dots{} @var{set1} [@var{set2}]
6716 @end example
6717
6718 @command{tr} は標準入力を標準出力にコピーするが、その際に次の操作の一つを
6719 行う。
6720
6721 @itemize @bullet
6722 @item
6723 文字を置換する。置換した結果に同一文字の連続があるときは、それを
6724 1 文字に圧縮することもできる。
6725 @item
6726 同一文字の連続を 1 文字に圧縮する。
6727 @item
6728 文字を削除する。
6729 @item
6730 文字を削除する。さらに、削除した結果に同一文字の連続があるときは、
6731 それを 1 文字に圧縮する。
6732 @end itemize
6733
6734 上記書式の @var{set1} と (もし、指定しているなら) @var{set2} の二つの引数には、
6735 順序が意味を持つ文字の集合を指定する。以下の説明で、それぞれ @var{set1}、@var{set2}
6736 と呼ばれることになるそうした文字集合こそ、入力中に存在する文字のうちで
6737 @command{tr} が操作の対象とする文字群である。@option{--complement} (@option{-c},
6738 @option{-C})
6739 オプションを指定すると、@var{set1} の代わりにその補集合 (@var{set1} に含まれない
6740 すべての文字) が使われることになる。
6741
6742 現在のところ、@command{tr} が完全に対応しているのは、シングルバイト文字
6743 だけである。将来は、マルチバイト文字もサポートすることになるだろうが、
6744 そのときは、@option{-C} オプションで文字集合の補集合を作り、@option{-c} オプションで
6745 値 (訳注: いわゆる文字コード) の集合の補集合を作ることになるだろう。
6746 この区別が意味を持つのは、指定する値の中に文字ではないものがあるとき
6747 だけだが、そういった事態は、マルチバイト・エンコーディングを使用して
6748 いるロケールで、入力にエンコーディング・エラーが含まれるときしか起き
6749 そうにない。
6750
6751 このプログラムでは、@option{--help} や @option{--version} オプションも使える。
6752 @xref{Common options}. なお、オプションは、オペランドの前で指定しなけ
6753 ればならない。
6754
6755 @exitstatus
6756
6757 @menu
6758 * Character sets::           文字集合の指定。
6759 * Translating::              ある文字集合の別の文字集合への変換。
6760 * Squeezing::                連続する同一文字の圧縮と文字の削除。
6761 @end menu
6762
6763
6764 @node Character sets
6765 @subsection 文字集合の指定
6766
6767 @cindex specifying sets of characters
6768
6769 @var{set1} や @var{set2} 引数の書式は、正規表現の書式に似ているが、正規表現では
6770 なく、文字のリストにすぎない。そうした文字列中のほとんどの文字は、単に
6771 その文字自身を表しているだけだが、便宜のため文字列中では以下に列挙する
6772 簡易記法も使うことができる。簡易記法によっては、以下で述べているように、
6773 @var{set1} と @var{set2} のどちらか一方でしか使えないこともある。
6774
6775 @table @asis
6776
6777 @item バックスラッシュ・エスケープ
6778 @cindex backslash escapes
6779
6780 以下のバックスラッシュ・エスケープ・シーケンスを認識する。
6781
6782 @table @samp
6783 @item \a
6784 Control-G (ベル).
6785 @item \b
6786 Control-H (バックスペース).
6787 @item \f
6788 Control-L (フォームフィード).
6789 @item \n
6790 Control-J (改行).
6791 @item \r
6792 Control-M (復帰).
6793 @item \t
6794 Control-I (水平タブ).
6795 @item \v
6796 Control-K (垂直タブ).
6797 @item \@var{ooo}
6798 1 から 3 桁の 8 進数 @var{ooo} によって表される値を持つ 8 ビット
6799 文字。@samp{\400} は、@samp{\040} @samp{0} という連続する 2 バイトに解釈
6800 されるので、注意すること。
6801 @item \\
6802 1 個のバックスラッシュ。
6803 @end table
6804
6805 上記以外の 1 個の文字がバックスラッシュに続く場合は、その文字
6806 として解釈される。またバックスラッシュには、特別な意味を打ち消す
6807 働きもあるので、@samp{[}, @samp{]}, @samp{*}, @samp{-} をエスケープするのにも使用
6808 できる。
6809
6810 @item 範囲指定
6811 @cindex ranges
6812
6813 @samp{@var{m}-@var{n}} という表記は、昇順で @var{m} から @var{n} までのすべての文字に展開
6814 される。@var{m} は文字の照合順序で @var{n} より前のものでなければならず、
6815 さもないと、エラーになる。たとえば、@samp{0-9} は @samp{0123456789}
6816 と同じである。
6817
6818 System V の書式では、範囲は、角カッコ (square brackets)を使って
6819 囲むことになっているが、GNU の @command{tr} はこの書式をサポートして
6820 いない。System V の書式で指定した場合でも、置換が期待どおり行われる
6821 こともあるが、それは、たいていの場合、角カッコが角カッコに置換される
6822 からである。そうだとしても、予想外の動作をすることもあるので、
6823 角カッコの使用は避けた方がよい。たとえば、@samp{tr -d '[0-9]'} は、数字
6824 だけでなく、角カッコも削除してしまう。
6825
6826 昔からよく使われている範囲の指定法の多くが --- 正しい用法として
6827 認められているものでさえ --- 他のシステムで使えるとはかぎらない。
6828 たとえば、EBCDIC のホストでは、 @samp{A-Z} という範囲の指定をしても、
6829 たいていの人が予想するような結果は得られないだろう。なぜなら、
6830 そこでは @samp{A} から @samp{Z} までが、ASCII におけるように隣り合っては
6831 いないからである。POSIX 準拠の @command{tr} を使うことができるならば、
6832 この問題を回避する最善の方法は、文字クラスを使用することである
6833 (下記参照)。それができない場合は、範囲の要素を一つ一つ書き込むのが、
6834 一番可搬性のある方法だ (一番野暮ったい方法でもあるけれど)。
6835
6836 @item 文字の繰り返し
6837 @cindex repeated characters
6838
6839 @var{set2} における @samp{[@var{c}*@var{n}]} という表記は、文字 @var{c} の @var{n} 個の連続に展開
6840 される。従って、@samp{[y*6]} は @samp{yyyyyy} と同じである。また、@var{set2} に
6841 おける @samp{[@var{c}*]} という表記は、@var{set2} を @var{set1} と同じ長さにするのに
6842 必要な数の @var{c} の連続に展開される。@var{n} が @samp{0} で始まっている場合は、
6843 8 進数として扱われる。それ以外の場合は、10 進数である。
6844
6845 @item 文字クラス
6846 @cindex character classes
6847
6848 @samp{[:@var{class}:]} という表記は、(あらかじめ定義されている) 文字クラス
6849 @var{class} に属するすべての文字に展開される。展開された文字に特定の
6850 順序はないが、@code{upper} と @code{lower} の文字クラスは別で、この二つは、
6851 昇順に展開される。@option{--delete} (@option{-d}) と @option{--squeeze-repeats}
6852 (@option{-s})
6853 オプションの両方を指定している場合は、@var{set2} で任意の文字クラスを
6854 使用することができる。それ以外の場合 @var{set2} で使えるのは、@code{lower}
6855 と @code{upper} の文字クラスだけであり、それも、対応する文字クラスを
6856 (すなわち、@code{upper} に対しては @code{lower}、@code{lower} に対しては @code{upper}
6857 を)、@var{set1} の対応する位置で指定しているときだけである。その場合は、
6858 大文字小文字の変換を指定していることになるわけだ。以下に文字クラス
6859 の名前を列挙する。なお、無効なクラス名を指定すると、エラーになる。
6860
6861 @table @code
6862 @item alnum
6863 @opindex alnum
6864 アルファベットの文字と数字。
6865 @item alpha
6866 @opindex alpha
6867 アルファベットの文字。
6868 @item blank
6869 @opindex blank
6870 水平方向の空白 (Horizontal whitespace)。
6871 @item cntrl
6872 @opindex cntrl
6873 制御文字。
6874 @item digit
6875 @opindex digit
6876 数字。
6877 @item graph
6878 @opindex graph
6879 表示可能文字。空白を含まない (訳注: スペースもタブも改行も、
6880 すなわち、ホワイトスペースを一切含まない)。
6881 @item lower
6882 @opindex lower
6883 アルファベットの小文字。
6884 @item print
6885 @opindex print
6886 表示可能文字。空白を含む (訳注: タブや改行は含まないが、
6887 スペース (0x20) は含む)。
6888 @item punct
6889 @opindex punct
6890 句読点 (訳注: 引用符なども含む)。
6891 @item space
6892 @opindex space
6893 水平方向や垂直方向の空白 (Horizontal or vertical whitespace)。
6894 @item upper
6895 @opindex upper
6896 アルファベットの大文字。
6897 @item xdigit
6898 @opindex xdigit
6899 16 進数の数字。
6900 @end table
6901
6902 @item 等価クラス
6903 @cindex equivalence classes
6904
6905 @samp{[=@var{c}=]} という書式は、@var{c} と等価な文字のすべてに展開される。
6906 展開される文字の間に特定の順序はない。等価クラスは、比較的最近の
6907 発明であり、英語以外のアルファベットをサポートするためのものである。
6908 しかしながら、等価クラスを定義したり、何が等価クラスに含まれるかを
6909 決定したりする標準的な方法は存在しないようだ。そのため、GNU の
6910 @command{tr} は、等価クラスを十分に実装していない。各文字の等価クラスには
6911 その文字しか含まれていないので、あまり使い道がない。
6912
6913 @end table
6914
6915
6916 @node Translating
6917 @subsection 置換
6918
6919 @cindex translating characters
6920
6921 @command{tr} は、@var{set1} と @var{set2} の両方が指定され、@option{--delete}
6922 (@option{-d}) オプションが
6923 指定されていない場合は、文字の置換を行う。@command{tr} は入力の中に @var{set1} に存在
6924 する文字が現れるたびに、それを @var{set2} の対応する文字に置き換える。入力中の
6925 @var{set1} に存在しない文字は、読み飛ばして、変更しない。ある文字が @var{set1} 中に
6926 2 個以上存在し、@var{set2} 中のそれに対応する文字がすべて同じでない場合、置換
6927 に使用するのは、最後の文字だけである。たとえば、次の二つのコマンドは、
6928 同じ動作をする。
6929
6930 @example
6931 tr aaa xyz
6932 tr a z
6933 @end example
6934
6935 @command{tr} がよく使われるのは、アルファベットの小文字を大文字に変換する
6936 ときである。それには、いろいろな方法がある。例を三つほど挙げてみる。
6937
6938 @example
6939 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
6940 tr a-z A-Z
6941 tr '[:lower:]' '[:upper:]'
6942 @end example
6943
6944 @noindent
6945 ただし、上記の @code{a-z} のような範囲指定の使用は、可搬性がないことに
6946 注意していただきたい。
6947
6948 @command{tr} で置換を行う際には、普通 @var{set1} と @var{set2} を同じ長さにする。@var{set1} が
6949 @var{set2} より短いと、@var{set2} の後尾にある余分な文字が無視されることになる。
6950
6951 逆に、@var{set1} が @var{set2} より長い場合は、可搬性がなくなる。POSIX の規定で
6952 は、結果は未定義なのだ。こうした場合、BSD の @command{tr} は、@var{set2} の最後の
6953 文字を必要なだけ繰り返して、@var{set2} が @var{set1} と同じ長さになるようにする。
6954 System V の @command{tr} は、@var{set1} を @var{set2} と同じ長さに切り詰める。
6955
6956 デフォルトでは、GNU 版の @command{tr} は、この問題を BSD の @command{tr} と同じ
6957 やり方で処理する。そして、@option{--truncate-set1} (@option{-t}) オプションが指定
6958 されている場合のみ、System V の @command{tr} のように処理するのである。
6959 このオプション (@option{--truncate-set1}) は、置換以外の操作では無視される。
6960
6961 この問題で System V の @command{tr} の動作を選ぶと、比較的よく使われる、
6962 BSD 式の次の慣用表現が使えなくなる。
6963
6964 @example
6965 tr -cs A-Za-z0-9 '\012'
6966 @end example
6967
6968 @noindent
6969 なぜなら、System V の動作では、アルファベットと数字以外のすべての文字を
6970 改行文字に変換するのではなく、ゼロバイトしか (ASCII NUL 文字、それが
6971 @var{set1} の補集合の最初の要素である) 改行文字に変換しないからだ。
6972
6973 @noindent
6974 ちなみに、上記の慣用表現は、システムによってはうまく動作しない。
6975 なぜなら、範囲指定を使っているからであり、また、改行の 8 進数による
6976 コードを 012 と決め込んでいるからでもある。@command{tr} が POSIX に準拠して
6977 いるなら、以下の方が、よりよい書き方である。
6978
6979 @example
6980 tr -cs '[:alnum:]' '[\n*]'
6981 @end example
6982
6983
6984 @node Squeezing
6985 @subsection 連続する文字の圧縮と文字の削除
6986
6987 @cindex squeezing repeat characters
6988 @cindex deleting characters
6989
6990 @option{--delete} (@option{-d}) オプションのみが指定された場合、@command{tr} は、@var{set1} に
6991 存在する文字が入力中にあれば、それを削除する。
6992
6993 @option{--squeeze-repeats} (@option{-s}) オプションのみが指定された場合、@command{tr} は、
6994 @var{set1} に存在する文字が入力中に連続して現れるたびに、その部分をただ 1 個
6995 のその文字に置き換える。
6996
6997 @option{--delete} と @option{--squeeze-repeats} の両方が指定された場合、@command{tr} は、
6998 まず @var{set1} を使って削除を行い、その後で、残っている文字に対して、
6999 @var{set2} を使って連続する同一文字の圧縮を行う。
7000
7001 @option{--squeeze-repeats} オプションは、置換の際に使用することもできる。
7002 その場合、@command{tr} は、まず置換を実行し、その後で、置換結果に対して、
7003 @var{set2} を使って連続する同一文字の圧縮を行う。
7004
7005 例をいくつか挙げて、オプションの様々な組み合わせを説明する。
7006
7007 @itemize @bullet
7008
7009 @item
7010 すべてのゼロバイトを削除する。
7011
7012 @example
7013 tr -d '\0'
7014 @end example
7015
7016 @item
7017 入力中のすべての単語 (訳注: 空白などで前後を区切られた文字列) を
7018 1 行に 1 個づつ書き出す。このコマンドは、アルファベットと数字以外の
7019 すべてを改行文字に変換し、さらに、改行が連続して現れるそれぞれの
7020 箇所を 1 個の改行文字に圧縮している。
7021
7022 @example
7023 tr -cs '[:alnum:]' '[\n*]'
7024 @end example
7025
7026 @item
7027 連続する改行文字が現れるごとに、それを一個の改行文字に変換する。
7028
7029 @example
7030 tr -s '\n'
7031 @end example
7032
7033 @item
7034 @c Separate the following two "the"s, so typo checkers don't complain.
7035 文書中の単語の重複を探し出す。たとえば、 改行を挟んで同じ単語を
7036 繰り返して、``the @w{}the'' のように書いてしまうとことは、よくあること
7037 である。以下の Bourne シェルのスクリプトは、次のように動作する。
7038 まず、句読点や空白文字が 1 個以上続けて現れるたびに、それを 1 個の
7039 改行文字に置き換える。そうすることで、単語が 1 行に 1 個づつ
7040 出力されることになるわけだ。次には、すべての大文字を小文字に
7041 変換する。そして、最後に、@command{uniq} を @option{-d} オプション付きで実行して、
7042 重複した単語のみを書き出すのである。
7043
7044 @example
7045 #!/bin/sh
7046 cat -- "$@@" \
7047   | tr -s '[:punct:][:blank:]' '[\n*]' \
7048   | tr '[:upper:]' '[:lower:]' \
7049   | uniq -d
7050 @end example
7051
7052 @item
7053 文字のちょっとした集団を削除するのは、たいていの場合ごく簡単
7054 である。たとえば、@samp{a}, @samp{x}, @samp{M} という文字をすべて消すには、次の
7055 ようにするだけでよい。
7056
7057 @example
7058 tr -d axM
7059 @end example
7060
7061 ところが、削除する文字の一つに  @samp{-} があると、@samp{-} は特殊な意味を
7062 もっているので、厄介なことになりかねない。上記と同様の作業を行う
7063 けれど、今度は @samp{-} という文字もついでにすべて削除するとしよう。
7064 @code{tr -d -axM} をやってみるかもしれないが、うまく行かないだろう。
7065 @command{tr} が @option{-a} をコマンドライン・オプションとして解釈しようとする
7066 からである。それではと、ハイフンを文字列の内側に入れてみることも
7067 できる。@code{tr -d a-xM} のようにだ。だが、これもうまく行きそうにない。
7068 @command{tr} が @code{a-x} を 3 個の文字としてではなく、@samp{a}@dots{}@samp{x} という文字の
7069 範囲として解釈することになるからだ。この問題を解決する方法の一つは、
7070 ハイフンを文字のリストの最後に置くことである。
7071
7072 @example
7073 tr -d axM-
7074 @end example
7075
7076 あるいは、@samp{--} を使って、オプション処理はここで終わりと明示する
7077 こともできる。
7078
7079 @example
7080 tr -d -- -axM
7081 @end example
7082
7083 より普遍的な方法は、等価クラスの記法  @code{[=c=]} を、@samp{c} を @samp{-} で
7084 (あるいは、他の任意の文字で) 置き換えて使うことである。
7085
7086 @example
7087 tr -d '[=-=]axM'
7088 @end example
7089
7090 上記の例では、角カッコがシェルによって解釈されないように、シングル
7091 クォートを使っていることに注意していただきたい。
7092
7093 @end itemize
7094
7095
7096 @node expand invocation
7097 @section @command{expand}: タブをスペースに変換する
7098
7099 @pindex expand
7100 @cindex tabs to spaces, converting
7101 @cindex converting tabs to spaces
7102
7103 @command{expand} は指定された各 @var{file} の内容を標準出力に書き出し、その際に
7104 タブ文字を適切な数のスペースに変換する。@var{file} が指定されていない
7105 場合や、@var{file} として @samp{-} が指定されている場合は、標準入力を対象にする。
7106 @sp 1
7107 書式:
7108
7109 @example
7110 expand [@var{option}]@dots{} [@var{file}]@dots{}
7111 @end example
7112
7113 デフォルトでは、@command{expand} はすべてのタブをスペースに変換する。
7114 バックスペース文字は、出力にそのまま残しておく。バックスペースには、
7115 タブ幅を計算する際に、桁数を減らす働きがあるのだ。デフォルトの動作は、
7116 @option{-t 8} を指定したときと同じである (タブ位置を 8 桁ごとにする)。
7117
7118 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
7119
7120 @table @samp
7121
7122 @item -t @var{tab1}[,@var{tab2}]@dots{}
7123 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7124 @opindex -t
7125 @opindex --tabs
7126 @cindex tab stops, setting
7127 タブ位置 (tab stop) が一つだけ指定された場合には、(訳注: 入力行に
7128 おける) タブ位置が @var{tab1} 桁ごとあるものとする (デフォルトは 8
7129 桁ごと)。それ以外の場合は、タブ位置を @var{tab1}, @var{tab2}, @dots{} 桁目に置き
7130 (行頭を 0 桁目として数える)、指定された最後のタブ位置より後ろに
7131 あるタブは 1 個のスペースで置き換える。タブ位置の指定は、コンマで
7132 区切ってもよく、空白で区切ってもよい。
7133
7134 互換性を考慮して、GNU の @command{expand} は、@option{-@var{tab1}[,@var{tab2}]@dots{}}
7135 という、
7136 このオプションの古い書式も認めている。新しいスクリプトでは、
7137 @option{-t @var{tab1}[,@var{tab2}]@dots{}} の方を使うべきである。
7138
7139 @item -i
7140 @itemx --initial
7141 @opindex -i
7142 @opindex --initial
7143 @cindex initial tabs, converting
7144 各行の行頭にあるタブ群だけを (言い換えれば、スペースでもタブでも
7145 ないどんな文字よりも前にある 1 個以上のタブだけを) スペースに変換
7146 する。
7147
7148 @end table
7149
7150 @exitstatus
7151
7152
7153 @node unexpand invocation
7154 @section @command{unexpand}: スペースをタブに変換する
7155
7156 @pindex unexpand
7157
7158 @command{unexpand} は、指定された各 @var{file} の内容を標準出力に書き出し、その際に
7159 各行の先頭にある複数の空白 (blank) を、必要な数のタブ文字に変換する。
7160 @var{file} が指定されていない場合や、@var{file} として @samp{-} が指定されている場合は、
7161 標準入力を対象にする。デフォルトの POSIX ロケールでは、空白 (@dfn{blank})
7162 とは、スペースかタブのことである。他のロケールでは、ほかの空白文字が
7163 追加されているかもしれない。
7164 @sp 1
7165 書式:
7166
7167 @example
7168 unexpand [@var{option}]@dots{} [@var{file}]@dots{}
7169 @end example
7170
7171 デフォルトでは、@command{unexpand} が変換するのは、各行の行頭にある複数の
7172 空白だけである (言い換えれば、空白以外のどんな文字よりも前にある複数
7173 の空白だけ)。バックスペース文字は、出力にそのまま残しておく。バック
7174 スペースには、タブ幅を計算する際に、桁数を減らす働きがあるのだ。
7175 デフォルトでは、タブ位置は 8 桁ごとに置かれる。
7176
7177 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
7178
7179 @table @samp
7180
7181 @item -t @var{tab1}[,@var{tab2}]@dots{}
7182 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7183 @opindex -t
7184 @opindex --tabs
7185 タブ位置 (tab stop) が一つだけ指定された場合には、(訳注: 入力行に
7186 おける) タブ位置をデフォルトの 8 桁ごとではなく、@var{tab1} 桁ごとに
7187 設定する。それ以外の場合は、タブ位置を @var{tab1}, @var{tab2}, @dots{} 桁目に置き
7188 (行頭を 0 桁目として数える)、指定された最後のタブ位置より後ろに
7189 ある空白は、変換せず、そのままにする。タブ位置の指定は、コンマで
7190 区切ってもよく、空白で区切ってもよい。このオプションを指定すると、
7191 @option{-a} オプションが自動的に設定される。
7192 @sp 1
7193 (訳注: 一例を挙げておく。たとえば、@samp{-t 8,12} なら、入力行は、先頭を
7194 0 桁目として、8 桁目、12 桁目にタブ位置があると見なされる。そこで、
7195 先頭に 12 個のスペースがある行に対して @code{unexpand -t 8,12} を行う
7196 と、空白がタブ 2 個に変換される。出力におけるタブ位置はデフォルトの
7197 ままなので、出力ではその行は、 0 から数えて 16 桁目から文字が始まる
7198 ことになる。)
7199
7200 互換性を考慮して、GNU の @command{unexpand} は、@option{-@var{tab1}[,@var{tab2}]@dots{}}
7201 という、
7202 このオプションの古い書式も認めている。そちらを使う場合は、タブ位置を
7203 必ずコンマで区切らなければならない。なお、@option{-t} とは違って、この古い
7204 オプションは、@option{-a} を自動的に設定しない。新しいスクリプトでは
7205 (訳注: 古い書式と同じ動作をさせたい場合)、古い書式に代えて、
7206 @option{--first-only -t @var{tab1}[,@var{tab2}]@dots{}} を使うべきである。
7207
7208 @item -a
7209 @itemx --all
7210 @opindex -a
7211 @opindex --all
7212 空白の連続が、行の中で空白以外の文字の後ろにある場合でも、タブ位置の
7213 直前にある 2 個以上の空白の連続は、すべて変換する。
7214
7215 @end table
7216
7217 @exitstatus
7218
7219
7220 @node Directory listing
7221 @chapter ディレクトリの一覧表示
7222
7223 この章では、@command{ls} とその変種の @command{dir} 及び @command{vdir} について説明する。
7224 こうしたコマンドは、ファイルに関する情報を一覧表示する。
7225
7226 @menu
7227 * ls invocation::            ディレクトリの内容を一覧表示する。
7228 * dir invocation::           簡潔な ls。
7229 * vdir invocation::          詳細な ls。
7230 * dircolors invocation::     ls のカラー設定など。
7231 @end menu
7232
7233
7234 @node ls invocation
7235 @section @command{ls}: ディレクトリの内容を一覧表示する
7236
7237 @pindex ls
7238 @cindex directory listing
7239
7240 @command{ls} プログラムはファイルに関する情報を一覧表示する (ファイルは、
7241 いかなるタイプでもよく、ディレクトリでもよい)。オプションとファイルを
7242 示す引数は、ほとんどのコマンドと同様、どんな順番で指定しても構わない。
7243
7244 コマンドラインで指定したオプション以外の引数がディレクトリならば、
7245 デフォルトでは、@command{ls} はそのディレクトリの内容を一覧表示する。その際、
7246 再帰的な表示はせず、名前が @samp{.} で始まるファイルも表示しない。
7247 オプション以外の引数がディレクトリでなければ、単にそのファイルの名前を
7248 表示するのが、@command{ls} のデフォルトの動作である。オプション以外の引数が
7249 一つも指定されていない場合は、@command{ls} はカレントディレクトリを対象にし、
7250 あたかも @samp{.} という引数を一つだけ付けて起動したかのように動作する。
7251
7252 @vindex LC_ALL
7253 デフォルトでは、出力を、現在のロケール設定に従って、アルファベット
7254 順でソートする
7255 @footnote{POSIX 以外のロケールを使用している場合は (たとえば、@env{LC_ALL} を
7256 @samp{en_US} に設定している場合は)、@command{ls} の出力が、見慣れない順序で並んで
7257 いるかもしれない。そうした場合は、環境変数 @env{LC_ALL} を @samp{C} にしてみる
7258 とよい。}。
7259 標準出力が端末の場合は、出力を多段組みで (訳注:
7260 すなわち、1 行に複数ファイルの形式で) 表示し、制御文字を疑問符として
7261 出力する (ソートは縦方向に行う)。それ以外の場合は、出力が 1 行 1
7262 ファイルの形式になり、制御文字はそのまま手を加えずに出力する。
7263
7264 @command{ls} はきわめて基本的なプログラムなので、長年の間にオプションが
7265 どんどん増えてしまった。以下のサブセクションでは、そうしたオプション
7266 について説明している。各サブセクション内では、オプションを (大文字
7267 小文字を無視して) アルファベット順に並べている。このようにオプションを
7268 サブセクションに分けてはみたが、この分類法は完全なものではない。オプ
7269 ションの中には、@command{ls} の動作の複数の側面に作用するものもあるからである。
7270
7271 @cindex exit status of @command{ls}
7272 終了ステータス:
7273
7274 @display
7275 0: 成功
7276 1: 軽微な問題 (たとえば、コマンドライン引数として指定されていない
7277    ファイルやディレクトリにアクセスできなかった場合。ディレクトリの
7278    内容を一覧表示しようとしたとき、その中にあるエントリが今まさに
7279    削除やリネームの最中だと、そういうことが起きる)
7280 2: 深刻なトラブル (たとえば、メモリの不足、無効なオプション、
7281    コマンドライン引数として指定されたファイルやディレクトリに
7282    アクセスできなかった場合、ディレクトリのループなど)@end display
7283
7284 参照 @ref{Common options}.
7285
7286 @menu
7287 * Which files are listed::          表示対象にするファイル。
7288 * What information is listed::      表示する情報。
7289 * Sorting the output::              出力のソート。
7290 * Details about version sort::      バージョン・ソートの詳細。
7291 * General output formatting::       出力全体の形式。
7292 * Formatting file timestamps::      タイムスタンプのフォーマット。
7293 * Formatting the file names::       ファイル名のフォーマット。
7294 @end menu
7295
7296
7297 @node Which files are listed
7298 @subsection 表示対象にするファイル
7299
7300 以下のオプションは、どんなファイルについて @command{ls} が情報を表示するか
7301 を決定する。デフォルトで @command{ls} が表示するのは、コマンドラインで指定
7302 されたファイルだが、ディレクトリが指定された場合は、その内容になる。
7303 ただし、ディレクトリの内容のうち、名前が @samp{.} で始まるファイルは表示
7304 しない。
7305
7306 @table @samp
7307
7308 @item -a
7309 @itemx --all
7310 @opindex -a
7311 @opindex --all
7312 ディレクトリの内容を表示する際、@samp{.} で始まるファイル名も無視
7313 しない。
7314
7315 @item -A
7316 @itemx --almost-all
7317 @opindex -A
7318 @opindex --almost-all
7319 ディレクトリの内容を表示する際、@file{.} と @file{..} は無視するが、
7320 それ以外の @samp{.} で始まるいかなるファイル名も無視しない。@option{--all}
7321 (@option{-a}) オプションは、このオプションに優先する。
7322
7323 @item -B
7324 @itemx --ignore-backups
7325 @opindex -B
7326 @opindex --ignore-backups
7327 @cindex backup files, ignoring
7328 ディレクトリの内容表示において、@samp{~} で終わるファイルを無視する。
7329 このオプションは、@samp{--ignore='*~' --ignore='.*~'} と同じである。
7330
7331 @item -d
7332 @itemx --directory
7333 @opindex -d
7334 @opindex --directory
7335 @c The following sentence is the same as the one for -F.
7336 ディレクトリについても、ディレクトリ内容の一覧ではなく、他のタイプ
7337 のファイルの場合と同じように、名前だけを表示する。また、
7338 @option{--dereference-command-line} (@option{-H}), @option{--dereference}
7339 (@option{-L}),
7340 @option{--dereference-command-line-symlink-to-dir} といったオプションが
7341 指定されていないかぎり、コマンドラインでシンボリックリンクが指定
7342 されても、それをたどらない。
7343
7344 @item -H
7345 @itemx --dereference-command-line
7346 @opindex -H
7347 @opindex --dereference-command-line
7348 @cindex symbolic links, dereferencing
7349 コマンドライン引数がシンボリックリンクを指定している場合、リンク
7350 そのものではなく、リンクが参照しているファイルの情報を表示する。
7351
7352 @item --dereference-command-line-symlink-to-dir
7353 @opindex --dereference-command-line-symlink-to-dir
7354 @cindex symbolic links, dereferencing
7355 原則としてシンボリックリンクの参照を行わないが、一つだけ例外が
7356 ある。すなわち、コマンドライン引数がシンボリックリンクを指定し、
7357 それがディレクトリを指している場合は、リンクそのものではなく、
7358 そのディレクトリの情報を表示する。この動作は、リンクの参照に関係
7359 する他のオプションが全く指定されていないときの、@command{ls} のデフォルトの
7360 動作である (リンクの参照に関係する他のオプションには、@option{--classify}
7361 (@option{-F}), @option{--directory} (@option{-d}), @option{-l},
7362 @option{--dereference}
7363 (@option{-L}), @option{--dereference-command-line} (@option{-H}) がある)。
7364
7365 @item --group-directories-first
7366 @opindex --group-directories-first
7367 すべてのディレクトリをまとめてファイルの前に置き、その上で、選択
7368 したソート・キーを使って (@option{--sort} オプション参照)、ディレクトリと
7369 ファイルをそれぞれ別々にソートする。別の言い方をすると、このオプ
7370 ションはソートする際の主キーを設定し、@option{--sort} オプションが副キー
7371 を設定するということだ。ただし、@option{--sort=none} (@option{-U}) を使ったり
7372 すると、このオプションは全く無効になる。
7373
7374 @item --hide=PATTERN
7375 @opindex --hide=@var{pattern}
7376 ディレクトリの内容表示において、@option{--all} (@option{-a}) や @option{--almost-all}
7377 (@option{-A}) が同時に指定されていないかぎり、シェルのパターン @var{pattern}
7378 に名前がマッチするファイルを無視する。このオプションの動作は、
7379 @option{--ignore=@var{pattern}} とほぼ同じだが、@option{--all} (@option{-a}) や
7380 @option{--almost-all}
7381 (@option{-A}) が併せて指定されていると、効果がないという点が違う。
7382
7383 このオプションは、シェルのエイリアスで使うと、便利かもしれない。
7384 たとえば、@command{lx} が @samp{ls --hide='*~'} のエイリアスで、@command{ly} は
7385 @samp{ls --ignore='*~'} のエイリアスだとしよう。その場合、@samp{lx -A} という
7386 コマンドは、ファイル @file{README~} を表示するが、@samp{ly -A} は表示しない
7387 ことになる。
7388
7389 @item -I @var{pattern}
7390 @itemx --ignore=@var{pattern}
7391 @opindex -I
7392 @opindex --ignore=@var{pattern}
7393 ディレクトリの内容表示において、シェルのパターン (正規表現ではない)
7394 @var{pattern} に名前がマッチするファイルを無視する。シェルの場合と同様、
7395 ファイル名の先頭にある @samp{.} は @var{pattern} の先頭のワイルドカードと
7396 マッチしない。このオプションを二度以上使うと、便利なことがある。
7397 たとえば、
7398
7399 @smallexample
7400 $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
7401 @end smallexample
7402
7403 最初のオプションは @samp{.} で始まる 3 文字以上のファイル名を無視する。
7404 二番目のオプションは @samp{.} で始まる二文字のファイル名のうち、 @samp{..}
7405 を除くすべて無視し、三番目のオプションは @samp{#} で始まるファイル名を
7406 無視する。
7407
7408 @item -L
7409 @itemx --dereference
7410 @opindex -L
7411 @opindex --dereference
7412 @cindex symbolic links, dereferencing
7413 シンボリックリンクについてファイル情報を表示する際、リンクそのもの
7414 ではなく、リンクが参照しているファイルの情報を表示する。とは言え、
7415 このオプションを使用した場合でも、表示されるファイル名については、
7416 リンクそのものの名前のままであり、リンクが指しているファイルの名前
7417 にはならない。
7418
7419 @item -R
7420 @itemx --recursive
7421 @opindex -R
7422 @opindex --recursive
7423 @cindex recursive directory listing
7424 @cindex directory listing, recursive
7425 すべてのディレクトリの内容を再帰的に一覧表示する。
7426
7427 @end table
7428
7429
7430 @node What information is listed
7431 @subsection 表示する情報
7432
7433 以下のオプションは、@command{ls} がどんな情報を表示するかに関係している。
7434 @command{ls} がデフォルトで表示するのは、ファイル名だけである。
7435
7436 @table @samp
7437
7438 @item --author
7439 @opindex --author
7440 @cindex hurd, author, printing
7441 詳細形式でディレクトリ内容のリストを出力する際、各ファイルの作成者
7442 情報を表示する。GNU/Hurd では、ファイルの作成者 (author) はファイル
7443 の所有者 (owner) と別人であることがあるが、他のオペレーティング・
7444 システムでは、両者は同一である。
7445
7446 @item -D
7447 @itemx --dired
7448 @opindex -D
7449 @opindex --dired
7450 @cindex dired Emacs mode support
7451 詳細表示形式 (@option{-l}) と併せて使用すると、出力本体の後ろに以下の
7452 ような追加の行を表示する。
7453
7454 @example
7455 //DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{}
7456 @end example
7457
7458 @noindent
7459 @var{begn} や @var{endn} は符号なしの整数であり、出力における各ファイル名の
7460 開始バイト位置と終了バイト位置を示している。このようにすることで、
7461 ファイル名に空白や改行のような普段使わない文字が含まれている場合
7462 でも、手の込んだ検索をするまでもなく、Emacs が簡単にファイル名を
7463 見つけられるようにしているのである。
7464
7465 ディレクトリを再帰的にリストしている場合には (@option{-R})、
7466 各サブディレクトリ名のオフセットを記した同様の行も出力する。
7467
7468 @example
7469 //SUBDIRED// @var{beg1} @var{end1} @dots{}
7470 @end example
7471
7472 そして最後に、次の形式の行を出力する。
7473
7474 @example
7475 //DIRED-OPTIONS// --quoting-style=@var{word}
7476 @end example
7477
7478 @noindent
7479 ここで、@var{word} はクォートの方式である (@pxref{Formatting the file names})。
7480
7481 実例を挙げてみる。
7482
7483 @example
7484 $ mkdir -p a/sub/deeper a/sub2
7485 $ touch a/f1 a/f2
7486 $ touch a/sub/deeper/file
7487 $ ls -gloRF --dired a
7488   a:
7489   total 8
7490   -rw-r--r-- 1    0 Jun 10 12:27 f1
7491   -rw-r--r-- 1    0 Jun 10 12:27 f2
7492   drwxr-xr-x 3 4096 Jun 10 12:27 sub/
7493   drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
7494
7495   a/sub:
7496   total 4
7497   drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
7498
7499   a/sub/deeper:
7500   total 0
7501   -rw-r--r-- 1 0 Jun 10 12:27 file
7502
7503   a/sub2:
7504   total 0
7505 //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
7506 //SUBDIRED// 2 3 167 172 228 240 290 296
7507 //DIRED-OPTIONS// --quoting-style=literal
7508 @end example
7509
7510 上記 @samp{//DIRED//} 行の 2 個づつ組になっているオフセットは、次の
7511 6 個の名前の区切りとなるバイト位置を示している (訳注: 別の言い方を
7512 するなら、出力の先頭からある名前の直前までのバイト数と、その名前の
7513 最後の文字までのバイト数を示している)。6 個の名前とは、すなわち
7514 @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper}, @file{file}
7515 である。@samp{//SUBDIRED//}
7516 の行のオフセットが示しているのは、次のディレクトリ名の区切りである。
7517 @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}。
7518
7519 下記の例では、5 番目の項目の名前 @samp{deeper} を抜き出してみせている。
7520 この項目の名前は、217 と 223 のオフセットの組に対応している。
7521
7522 @example
7523 $ ls -gloRF --dired a > out
7524 $ dd bs=1 skip=217 count=6 < out 2>/dev/null; echo
7525 deeper
7526 @end example
7527
7528 上記のファイル一覧表示では、@samp{deeper} という項目の後ろにスラッシュ
7529 が付いているが、オフセットが名前として選択しているのは、後ろの
7530 スラッシュを除いた部分であることに注目していただきたい。しかしながら、
7531 @command{ls} を @option{--dired} とともに @option{--escape} (短縮形は @option{-b})
7532 のような
7533 オプションを付けて実行し、名前に特殊文字が入っているファイルを処理の
7534 対象にする場合には、バックスラッシュがオフセットの示す範囲のうちに
7535 含まれることに注意しなければならない。
7536
7537 @example
7538 $ touch 'a b'
7539 $ ls -blog --dired 'a b'
7540   -rw-r--r-- 1 0 Jun 10 12:28 a\ b
7541 //DIRED// 30 34
7542 //DIRED-OPTIONS// --quoting-style=escape
7543 @end example
7544
7545 引用符を付加するクォート方式を使用している場合には (たとえば、
7546 @option{--quoting-style=c})、引用符もオフセットの示す範囲に含まれる。
7547 そこで、ユーザが環境変数 @env{QUOTING_STYLE} を設定して、そうした
7548 クォート方式を選択しているかもしれないことに気を付けなければ
7549 ならない。要するに、@option{--dired} を使用するアプリケーションでは、
7550 コマンドラインで明示的に @option{--quoting-style=literal} オプションを
7551 指定するか (@option{-N} や @option{--literal} と指定しても同じことだ)、あるいは、
7552 エスケープされた名前を解析できるするようにしておくか、どちらかを
7553 するべきだということである。
7554
7555 @item --full-time
7556 @opindex --full-time
7557 詳細形式でディレクトリ内容のリストを生成し、日時の情報を省略なしで
7558 表示する。これは、@option{--format=long} を @option{--time-style=full-iso} と
7559 一緒に使うのと同じである (@pxref{Formatting file timestamps})。
7560
7561 @item -g
7562 @opindex -g
7563 詳細形式でディレクトリ内容のリストを生成するが、所有者情報は表示しない。
7564
7565 @item -G
7566 @itemx --no-group
7567 @opindex -G
7568 @opindex --no-group
7569 詳細形式でディレクトリ内容をリスト表示する際に、グループ情報を
7570 表示しない (GNU 版以外の @command{ls} には、この動作がデフォルトの
7571 ものがある。そこで、互換性のために、このオプションを用意している)。
7572
7573 @optHumanReadable
7574
7575 @item -i
7576 @itemx --inode
7577 @opindex -i
7578 @opindex --inode
7579 @cindex inode number, printing
7580 ファイル名の左側にそのファイルの inode 番号を表示する (inode
7581 番号は、ファイル連続番号とか、インデックスナンバーとも呼ばれる。
7582 この番号は、ある特定のファイルシステムにある各ファイルを、一意に
7583 指し示す)。
7584
7585 @item -l
7586 @itemx --format=long
7587 @itemx --format=verbose
7588 @opindex -l
7589 @opindex --format
7590 @opindex long ls @r{format}
7591 @opindex verbose ls @r{format}
7592 各ファイルの名前のほかに、(訳注: 行頭から順に) ファイルのタイプ、
7593 ファイルのモードビット(訳注: 一般に「アクセス権」とか「許可属性」
7594 と言われるもの)、ハードリンク数、所有者名、グループ名、サイズ、
7595 タイムスタンプを表示する (@pxref{Formatting file timestamps})。
7596 タイムスタンプは、通常は更新日時 (訳注: いわゆる mtime) である。
7597 特定することのできない情報については、疑問符を表示する。
7598
7599 通常、サイズは、桁を区切る記号を付けずに、バイト数で表示されるが、
7600 この表示法は変更することができる (@pxref{Block size})。たとえば、
7601 @option{-h} オプションを指定すると、人間に読みやすい短縮表示になり、
7602 @samp{--block-size="'1"} を指定すると、現在のロケールの区切り記号で
7603 3 桁ごとに区切ったバイト数が表示される。
7604
7605 ディレクトリの内容をリストする場合は、対象となるディレクトリ
7606 ごとに、ファイルのリストの前に @samp{total @var{blocks}} という行を置く。
7607 ここで、@var{blocks} は、そのディレクトリにあるすべてのファイルに
7608 割り当てられたディスク容量の合計である。現在のところブロック
7609 サイズはデフォルトでは 1024 バイトであるが、この値は変更する
7610 ことができる (@pxref{Block size})。@var{blocks} の計算では、
7611 各ハードリンクを別のものとして計算している。これはバグだと
7612 言えないこともない。
7613
7614 ファイルタイプには、以下の文字の一つが使われる。
7615
7616 @c The commented-out entries are ones we're not sure about.
7617
7618 @table @samp
7619 @item -
7620 通常ファイル
7621 @item b
7622 ブロック・スペシャルファイル
7623 @item c
7624 キャラクタ・スペシャルファイル
7625 @item C
7626 ハイパフォーマンス (``contiguous data'') ファイル
7627 @item d
7628 ディレクトリ
7629 @item D
7630 @c @item F
7631 @c semaphore, if this is a distinct file type
7632 ドア (Solaris 2.5 以上)
7633 @item l
7634 @c @item m
7635 @c multiplexed file (7th edition Unix; obsolete)
7636 シンボリックリンク
7637 @item M
7638 オフライン (``migrated'') ファイル (Cray DMF)
7639 @item n
7640 ネットワーク・スペシャルファイル (HP-UX)
7641 @item p
7642 FIFO (名前付きパイプ)
7643 @item P
7644 @c @item Q
7645 @c message queue, if this is a distinct file type
7646 ポート (Solaris 10 以上)
7647 @item s
7648 @c @item S
7649 @c shared memory object, if this is a distinct file type
7650 @c @item T
7651 @c typed memory object, if this is a distinct file type
7652 @c @item w
7653 @c whiteout (4.4BSD; not implemented)
7654 ソケット
7655 @item ?
7656 上記以外のファイルタイプ
7657 @end table
7658
7659 @cindex permissions, output by @command{ls}
7660 ファイルのモードビットの表示は、アクセス権を設定する際のシンボ
7661 リックモードの仕様とほぼ同じである (@pxref{Symbolic Modes})。
7662 ただし、@command{ls} は、以下のように、複数のモードビットを一つに
7663 まとめて、アクセス権の各セットの 3 番目の文字で表現している。
7664
7665 @table @samp
7666 @item s
7667 set-user-ID ビット、または set-group-ID ビットと、対応する
7668 実行ビットの両方が立っている場合。
7669
7670 @item S
7671 set-user-ID ビット、または set-group-ID ビットが立っているが、
7672 対応する実行ビットは立っていない場合。
7673
7674 @item t
7675 削除制限フラグ、またはスティキー・ビット (sticky bit) と、
7676 その他のユーザ (other) の実行ビットの両方が立っている場合。
7677 削除制限フラグは、スティッキー・ビットの別名である。@xref{Mode Structure}.
7678
7679 @item T
7680 削除制限フラグ、またはスティキー・ビットが立っているが、その他の
7681 ユーザの実行ビットが立っていない場合。
7682
7683 @item x
7684 実行ビットが立っていて、上記のどれにも当てはまらない場合。
7685
7686 @item -
7687 それ以外。
7688 @end table
7689
7690 ファイルのモードビットの後に続く 1 個の文字は、アクセス・コント
7691 ロール・リスト (ACL) のような他のアクセス方式が、そのファイルに
7692 使われているかどうかを表している。ファイルのモードビットに続く
7693 文字が空白の場合は、他のアクセス方式を使用していないということ
7694 である。表示文字が続く場合は、そうしたアクセス方式を使用している
7695 ということだ。
7696
7697 GNU の @command{ls} は、SELinux セキュリティ・コンテキストを持つが、
7698 それ以外に他のアクセス方式を使用していないファイルを示すのに、
7699 ピリオド (@samp{.}) を使う。
7700
7701 それ以外で、ファイルが、標準以外のアクセス方式の何らかの組み
7702 合わせを使用している場合には、@samp{+} 文字が印として付く。
7703
7704 @item -n
7705 @itemx --numeric-uid-gid
7706 @opindex -n
7707 @opindex --numeric-uid-gid
7708 @cindex numeric uid and gid
7709 @cindex numeric user and group IDs
7710 詳細形式でディレクトリの内容をリストするが、所有者やグループの
7711 名前の代わりに、数字の user-ID や group-ID を表示する。
7712
7713 @item -o
7714 @opindex -o
7715 詳細形式でディレクトリの内容をリストするが、グループ情報を表示
7716 しない。これは、@option{--format=long} を @option{--no-group} と併せて使うのと
7717 同じである。
7718
7719 @item -s
7720 @itemx --size
7721 @opindex -s
7722 @opindex --size
7723 @cindex disk allocation
7724 @cindex size of files, reporting
7725 各ファイルに対するディスク割り当て量をファイル名の左側に表示する。
7726 これはファイルが使用しているディスクスペースの量であり、普通は
7727 ファイルのサイズより少し多いが、穴空きファイル (sparse file) の
7728 場合は、少ないこともある。
7729
7730 通常、ディスク割り当て量は 1024 バイトを単位として表示されるが、
7731 これは変更することができる (@pxref{Block size})。
7732
7733 @cindex NFS mounts from BSD to HP-UX
7734 ファイルが HP-UX のシステムから BSD のシステムに NFS マウント
7735 されている場合、このオプションで報告されるディスク使用量は、正確な
7736 値の半分である。それに対して、HP-UX システムの場合は、BSD システム
7737 から NFS マウントされているファイルについて、このオプションは正確な
7738 値の 2 倍の量を報告する。これは、HP-UX システムにある欠陥のせい
7739 であり、HP-UX の @command{ls} プログラムも、そのとばっちりを受けている
7740 のである。
7741
7742 @optSi
7743
7744 @item -Z
7745 @itemx --context
7746 @opindex -Z
7747 @opindex --context
7748 @cindex SELinux
7749 @cindex security context
7750 SELinux セキュリティ・コンテキストを表示する。ない場合は、@samp{?} を
7751 表示する。@option{-l} オプションと一緒に使った場合は、サイズの左に
7752 セキュリティ・コンテキストを出力する。
7753
7754 @end table
7755
7756
7757 @node Sorting the output
7758 @subsection 出力のソート
7759
7760 @cindex sorting @command{ls} output
7761 以下のオプションは、@command{ls} が出力する情報を並べる際の順序を変更する。
7762 デフォルトでは、情報は文字コードによってソートされる (たとえば
7763 ASCII コード順)。
7764
7765 @table @samp
7766
7767 @item -c
7768 @itemx --time=ctime
7769 @itemx --time=status
7770 @opindex -c
7771 @opindex --time
7772 @opindex ctime@r{, printing or sorting by}
7773 @opindex status time@r{, printing or sorting by}
7774 @opindex use time@r{, printing or sorting files by}
7775 詳細表示形式 (たとえば、@option{-l}, @option{-o}) を使用しているときは、更新日時
7776 (modification time) の代わりに、ステータス変更日時 (status change
7777 time、inode の @samp{ctime}) を表示する。日時によって明示的にソートして
7778 いるときや (@option{--sort=time} あるいは @option{-t})、詳細表示形式を使用して
7779 いないときは、ステータス変更日時によってソートする。
7780
7781 @item -f
7782 @opindex -f
7783 @cindex unsorted directory listing
7784 @cindex directory order, listing by
7785 主な働きは、@option{-U} と同じで、ソートしないことである。すなわち、
7786 ファイルをリストする際、ファイルがディレクトリにどんな順序で
7787 格納されていようと、そのままの順序で出力する。それだけでなく、
7788 @option{-a} (すべてのファイルをリストする) を有効にし、@option{-l}, @option{--color},
7789 @option{-s} を (@option{-f} より前で指定されていたら) 無効にする働きもある。
7790
7791 @item -r
7792 @itemx --reverse
7793 @opindex -r
7794 @opindex --reverse
7795 @cindex reverse sorting
7796 どんな方法でソートされていようと、逆順にする。たとえば、ファイルを
7797 並べる際に、アルファベットの後ろから並べる、最新バージョンから先に
7798 並べる、サイズの小さいものから先に並べる、などなど。
7799
7800 @item -S
7801 @itemx --sort=size
7802 @opindex -S
7803 @opindex --sort
7804 @opindex size of files@r{, sorting files by}
7805 ファイルのサイズによってソートし、大きいものから順に並べる。
7806
7807 @item -t
7808 @itemx --sort=time
7809 @opindex -t
7810 @opindex --sort
7811 @opindex modification time@r{, sorting files by}
7812 更新日時 (modification time、inode の @samp{mtime}) によってソートし、
7813 新しいものから順に並べる。
7814
7815 @item -u
7816 @itemx --time=atime
7817 @itemx --time=access
7818 @itemx --time=use
7819 @opindex -u
7820 @opindex --time
7821 @opindex use time@r{, printing or sorting files by}
7822 @opindex atime@r{, printing or sorting files by}
7823 @opindex access time@r{, printing or sorting files by}
7824 詳細表示形式 (たとえば、@option{--format=long}) を使用しているときは、
7825 最終アクセス日時 (last access time、inode の @samp{atime}) を表示する。
7826 日時によって明示的にソートしているときや (@option{--sort=time} あるいは
7827 @option{-t})、詳細表示形式を使用していないときは、アクセス日時によって
7828 ソートする。
7829
7830 @item -U
7831 @itemx --sort=none
7832 @opindex -U
7833 @opindex --sort
7834 @opindex none@r{, sorting option for @command{ls}}
7835 ソートを行わない。すなわち、ファイルをリストする際、ファイルが
7836 ディレクトリにどんな順序で格納されていようと、そのままの順序で
7837 出力する (@option{-f} が行う、ソートに無関係な他のことは、何もしない)。
7838 このオプションは非常に大きなディレクトリを一覧表示するとき、
7839 ことのほか役に立つ。ソートを全くしないことで、作業速度が著しく
7840 向上するからである。
7841
7842 @item -v
7843 @itemx --sort=version
7844 @opindex -v
7845 @opindex --sort
7846 @opindex version@r{, sorting option for @command{ls}}
7847 バージョン名とバージョン番号によってソートし、低いバージョンから
7848 順に並べる。デフォルトのソート方法と動作が似ているが、 10 進数の
7849 数字が連続する各部分を、インデックス番号やバージョン番号と見なし、
7850 (文字列としてではなく) 数値として取り扱う点が違う。
7851 (@xref{Details about version sort}.)
7852
7853 @item -X
7854 @itemx --sort=extension
7855 @opindex -X
7856 @opindex --sort
7857 @opindex extension@r{, sorting files by}
7858 ディレクトリの内容をファイルの拡張子 (最後の @samp{.} の後に続く文字)
7859 によってアルファベット順でソートする。拡張子のないファイルは、
7860 最初に並べられる。
7861
7862 @end table
7863
7864
7865 @node Details about version sort
7866 @subsection バージョン・ソートの詳細
7867
7868 ファイル名にはインデックス番号やバージョン番号が含まれていることが
7869 しばしばあるが、バージョン・ソートは、そうした状況に対処している。
7870 通常のソートでは、1 文字づつ文字の比較を行うので、結果がこちらの
7871 期待する順番にならないことがよくあるのだ。バージョン・ソートが特に
7872 役に立つのは、インデックス番号やバージョン番号を名前に含むファイルが
7873 たくさんあるディレクトリを一覧するときである。
7874
7875 @example
7876 $ ls -1            $ ls -1v
7877 abc.zml-1.gz       abc.zml-1.gz
7878 abc.zml-12.gz      abc.zml-2.gz
7879 abc.zml-2.gz       abc.zml-12.gz
7880 @end example
7881
7882 バージョン・ソートにおける文字列の比較は、次のように行われる。
7883 @var{ver1} と @var{ver2} がバージョン番号で、@var{prefix} (前置部分) と @var{suffix} (後置部分)
7884 が文字列だとしよう (@var{suffix} は正規表現の @samp{(\.[A-Za-z~][A-Za-z0-9~]*)*}
7885 にマッチするもの)。その場合、@var{ver1} < @var{ver2} ならば、``@var{prefix} @var{ver1}
7886 @var{suffix}''
7887 から構成される名前は ``@var{prefix} @var{ver2} @var{suffix}'' より前に来る。
7888
7889 数字の部分の先行する 0 は無視されることにも注意していただきたい。
7890
7891 @example
7892 $ ls -1            $ ls -1v
7893 abc-1.007.tgz      abc-1.01a.tgz
7894 abc-1.012b.tgz     abc-1.007.tgz
7895 abc-1.01a.tgz      abc-1.012b.tgz
7896 @end example
7897
7898 この機能は gnulib の @code{filevercmp} 関数を使って実装されている。
7899 そこで、知っておいた方がよい注意事項がいくつかある。
7900
7901 @itemize @bullet
7902 @item @env{LC_COLLATE} は無視される。そのため、@samp{ls -v} や @samp{sort -V} は、
7903 数値ではない PREFIX (前置部分) を、@env{LC_COLLATE} ロケール・カテゴリ
7904 が @samp{C} に設定されているかのようにソートする。
7905 @item SUFFIX (後置部分) に上記の正規表現がマッチしてくれないことがある。
7906 従って、以下の例は、期待通りの順序ではないかもしれない。
7907
7908 @example
7909 abc-1.2.3.4.7z
7910 abc-1.2.3.7z
7911 @end example
7912
7913 @example
7914 abc-1.2.3.4.x86_64.rpm
7915 abc-1.2.3.x86_64.rpm
7916 @end example
7917 @end itemize
7918
7919 @node General output formatting
7920 @subsection 出力全体の形式
7921
7922 以下のオプションは出力全体の見かけに影響を及ぼす。
7923
7924 @table @samp
7925
7926 @item -1
7927 @itemx --format=single-column
7928 @opindex -1
7929 @opindex --format
7930 @opindex single-column @r{output of files}
7931 1 行 に 1 ファイルを表示する。標準出力が端末でないときの
7932 @command{ls} のデフォルトである。
7933
7934 @item -C
7935 @itemx --format=vertical
7936 @opindex -C
7937 @opindex --format
7938 @opindex vertical @r{sorted files in columns}
7939 ファイルのリストを多段組みで (訳注: すなわち、1 行に複数ファイル
7940 の形式で) 表示し、ソートは縦方向に行う。これは、標準出力が端末の
7941 ときの @command{ls} のデフォルトである。@command{dir} コマンドにとっては、これが
7942 常にデフォルトになる。GNU の @command{ls} は、できるだけ少ない行数でできる
7943 だけ多くのファイルを表示するために、段の幅を可変にしている。
7944
7945 @item --color[=@var{when}]
7946 @opindex --color
7947 @cindex color, distinguishing file types with
7948 ファイルのタイプを区別するためにカラー表示を使用するかどうかを
7949 指定する。@var{when} は省略してもよく、以下の一つでもよい。
7950 @itemize @bullet
7951 @item none
7952 @vindex none @r{color option}
7953 カラー表示を全く使用しない。これがデフォルトである。
7954 @item auto
7955 @vindex auto @r{color option}
7956 @cindex terminal, using color iff
7957 標準出力が端末の場合のみ、カラー表示を使用する。
7958 @item always
7959 @vindex always @r{color option}
7960 常にカラー表示を使用する。
7961 @end itemize
7962 @option{--color} を @var{when} を付けずに指定するのは、"@option{--color=always} と
7963 同じことである。カラー表示にしたファイル・リストをパイプで @command{more}
7964 や @command{less} のようなページャに送ると、たいての場合、判読に苦しむ
7965 羽目になる。ただし、@code{more -f} を使うと、うまく行くようだ。(訳注:
7966 訳者の手元では、@code{less -R} や @code{lv -c} で一応問題なくカラー表示が
7967 できているように見える。)
7968
7969 @vindex LS_COLORS
7970 @vindex SHELL @r{environment variable, and color}
7971 留意すべきは、@option{--color} オプションを使用すると、大量のファイルが
7972 あるディレクトリで @command{ls} を実行したとき、目に見えて動作速度が低下
7973 するかもしれないことである。これは、カラー表示のデフォルトの設定
7974 では、@command{ls} は、リストするファイルを一つづつ @code{stat} システムコールで
7975 調べる必要があるからだ。とは言え、ファイルタイプのカラー表示は
7976 おおむね使用したいけれど、他の色付けオプションは使わなくてもよい
7977 こともある (たとえば、実行属性、リンク切れ、スティッキー・ビット、
7978 その他のユーザの書き込み権限、ケーパビリティなどは、色で表示しなく
7979 てもよい)。その場合は、こんなふうに、@command{dircolors} コマンドを使用
7980 して、環境変数 @env{LS_COLORS} を設定すればよい。
7981 @example
7982 eval $(dircolors -p | perl -pe \
7983   's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
7984 @end example
7985 そうすれば、@code{dirent.d_type} が使えるファイルシステムなら、@command{ls} は
7986 各コマンドライン引数に対してたった一回だけ @code{stat} システムコールを
7987 行うだけですむようになる。
7988
7989 @item -F
7990 @itemx --classify
7991 @itemx --indicator-style=classify
7992 @opindex -F
7993 @opindex --classify
7994 @opindex --indicator-style
7995 @cindex file type and executables, marking
7996 @cindex executables and file type, marking
7997 @c The following sentence is the same as the one for -d.
7998 各ファイル名の後ろに、ファイルタイプを示す 1 文字を付ける。
7999 通常ファイルの場合も、実行可能ファイルならば、@samp{*} を後置する。
8000 ファイルタイプの指標は、ディレクトリならば @samp{/}、シンボリック
8001 リンクならば @samp{@@}、FIFO ならば @samp{|}、ソケットならば @samp{=}、ドアならば
8002 @samp{>} であり、通常ファイルを表す指標はない。なお、
8003 @option{--dereference-command-line} (@option{-H}), @option{--dereference}
8004 (@option{-L}),
8005 @option{--dereference-command-line-symlink-to-dir} といったオプションが
8006 指定されていないかぎり、コマンドラインで指定されたシンボリックリンク
8007 をたどることはない。
8008
8009 @item --file-type
8010 @itemx --indicator-style=file-type
8011 @opindex --file-type
8012 @opindex --indicator-style
8013 @cindex file type, marking
8014 各ファイル名の後ろに、ファイルタイプを示す 1 文字を付ける。
8015 @option{-F} に似ているが、こちらは、実行ファイルに指標を付けない。
8016
8017 @item --indicator-style=@var{word}
8018 @opindex --indicator-style
8019 ファイル名の後ろに指標文字を付けるとき、@var{word} というスタイルを
8020 使用する。@var{word} には次のものがある。
8021
8022 @table @samp
8023 @item none
8024 指標文字を全く付けない。これがデフォルトである。
8025 @item slash
8026 ディレクトリの後ろに @samp{/} を付ける。これは、@option{-p} オプションと
8027 同じである。
8028 @item file-type
8029 ディレクトリ、シンボリックリンク、FIFO、ソケットの後ろに、
8030 それぞれ @samp{/}, @samp{@@}, @samp{|},  @samp{=} を付け、通常ファイルの後ろには
8031 何も付けない。これは、@option{--file-type} オプションと同じである。
8032 @item classify
8033 実行可能な通常ファイルの後ろに @samp{*} を付ける。それ以外は、
8034 @samp{file-type} の場合と同じ動作をする。これは、@option{-F} や
8035 @option{--classify} オプションと同じである。
8036 @end table
8037
8038 @item -k
8039 @itemx --kibibytes
8040 @opindex -k
8041 @opindex --kibibytes
8042 デフォルトのブロックサイズを標準の値の 1024 バイトに設定する。
8043 そのとき、環境変数でそれ以外のどんな値が設定されていても、
8044 それを上書きする (@pxref{Block size})。このオプション自身も、
8045 @option{--block-size}, @option{--human-readable} (@option{-h}),
8046 @option{--si} オプションが
8047 現れれば、それによって上書きされる。
8048
8049 @option{--kibibytes} (@option{-k}) オプションが影響を及ぼすのは、@option{-l} などの
8050 オプションが書き出すディレクトリごとのブロック数や、@option{--size}
8051 (@option{-s}) オプションが表示するディスク割り当て量に対してである。
8052 @option{-l} の表示するファイルサイズには影響を及ぼさない。
8053
8054 @item -m
8055 @itemx --format=commas
8056 @opindex -m
8057 @opindex --format
8058 @opindex commas@r{, outputting between files}
8059 ファイルを横に並べ、各行に収まる範囲でできるだけ多くの項目を
8060 表示する。ファイル同士は @samp{, } (コンマとスペース) で区切る。
8061
8062 @item -p
8063 @itemx --indicator-style=slash
8064 @opindex -p
8065 @opindex --indicator-style
8066 @cindex file type, marking
8067 ディレクトリ名の後ろに @samp{/} を付ける。
8068
8069 @item -x
8070 @itemx --format=across
8071 @itemx --format=horizontal
8072 @opindex -x
8073 @opindex --format
8074 @opindex across@r{, listing files}
8075 @opindex horizontal@r{, listing files}
8076 ファイルのリストを多段組みで (訳注: すなわち、1 行に複数ファイル
8077 の形式で) 表示し、ソートは横方向に行う。
8078
8079 @item -T @var{cols}
8080 @itemx --tabsize=@var{cols}
8081 @opindex -T
8082 @opindex --tabsize
8083 タブ位置が @var{cols} 桁ごとにあると想定する。デフォルトは 8 桁ごと。
8084 @command{ls} は効率を考慮し、使えるときはタブを出力で使用する。
8085 @var{cols} が 0 の場合は、タブを使用しない。
8086
8087 端末エミュレータの中には、ASCII 以外のバイトが前にあると、列を
8088 タブ位置の右にきちんと揃えてくれないものがあるかもしれない。
8089 この問題を回避するには、@option{-T0} オプションを使うか、環境変数
8090 @code{TABSIZE=0} を設定するかして、列を揃えるのにタブではなく、
8091 スペースを使うよう、@command{ls} に指示すればよい。
8092
8093 @item -w
8094 @itemx --width=@var{cols}
8095 @opindex -w
8096 @opindex --width
8097 @vindex COLUMNS
8098 スクリーンの横幅が @var{cols} 桁だと想定する。デフォルトの値は、
8099 可能ならば端末の設定から取得する。取得できないときは、環境変数
8100 @env{COLUMNS} を使用し、それも設定されていなければ、80 をデフォルト
8101 にする。
8102
8103 @end table
8104
8105
8106 @node Formatting file timestamps
8107 @subsection タイムスタンプのフォーマット
8108
8109 デフォルトでは、ファイルのタイムスタンプは短縮形式で表示される。
8110 すなわち、最近のタイムスタンプ以外は、@samp{Mar 30@ @ 2002} といった
8111 日付表示になり、最近のタイムスタンプは、@samp{Mar 30 23:45} といった
8112 年度なしの日付と時刻の表示になる。この書式は、後で詳しく述べる
8113 ように、現在のロケールによっては違ったものになるかもしれない。
8114
8115 @cindex clock skew
8116 タイムスタンプは、ここ 6 ヶ月以内のもので、未来の日付が付いて
8117 いなければ、最近 (@dfn{recent}) として扱われる。今日の日付のタイム
8118 スタンプが、最近用の書式で表示されない場合、そのタイムスタンプは
8119 未来扱いされている。それは、おそらく時計に狂いが生じているという
8120 ことであり、@command{make} のような、ファイルのタイムスタンプに頼っている
8121 プログラムは、まともに動かないかもしれない。
8122
8123 @vindex TZ
8124 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
8125 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
8126 いない場合は、システムのデフォルトのルールに従って表示される。
8127 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
8128 The GNU C Library Reference Manual}.
8129
8130 以下のオプションは、ファイルのタイムスタンプの表示方法を変更する。
8131
8132 @table @samp
8133 @item --time-style=@var{style}
8134 @opindex --time-style
8135 @cindex time style
8136 タイムスタンプを @var{style} 形式で表示する。@var{style} は以下の一つで
8137 なければならない。
8138
8139 @table @samp
8140 @item +@var{format}
8141 @vindex LC_TIME
8142 @var{format} を使って、タイムスタンプを表示する。その場合、@var{format}
8143 は、@command{date} コマンドの書式引数と同じように解釈される (@pxref{date invocation})。
8144 たとえば、@option{--time-style="+%Y-%m-%d %H:%M:%S"} と指定すると、
8145 @command{ls} の表示するタイムスタンプは、
8146 @samp{2002-03-30 23:45:56} のようになる。@command{date} の場合と同様、
8147 @var{format} の解釈は、@env{LC_TIME} ロケール・カテゴリの影響を受ける。
8148
8149 @var{format} に改行で分離された二つの書式文字列がある場合、前半は
8150 最近のファイル以外に使用され、後半は最近のファイルに使用される。
8151 出力される列をきちんと揃えたいならば、二つの書式のどちらかに、
8152 空白をいくつか入れる必要があるかもしれない。
8153
8154 @item full-iso
8155 タイムスタンプを省略なしで表示する。すなわち、ISO 8601 の
8156 日付、時刻、タイムゾーンという書式を nanosecond (10 億分の 1 秒)
8157 の精度で使用するわけだ。一例を挙げると、@samp{2002-03-30 23:45:56.477817180 -0700}
8158 といった表示になる。この形式は、
8159 @samp{+%Y-%m-%d %H:%M:%S.%N %z} と同じである。
8160
8161 これが有用なのは、タイムスタンプが、オペレーティング・システム
8162 から取得できる時間関係のすべての情報を含んでいるからである。
8163 たとえば、GNU の @command{make} は、あるファイルが古いかどうかを
8164 判定するのに、省略なしのタイムスタンプを使用する。そのため、
8165 この情報が、@command{make} の動作を説明してくれるのである。
8166
8167 @item long-iso
8168 ISO 8601 の書式で日付と時刻を分の単位まで表示する。たとえば、
8169 @samp{2002-03-30 23:45}。このタイムスタンプは、@samp{full-iso} タイム
8170 スタンプより短く、日常作業にはたいてい十分である。この形式は
8171 @samp{+%Y-%m-%d %H:%M} と同じである。
8172
8173 @item iso
8174 最近以外のタイムスタンプでは、ISO 8601 書式の日付を表示し
8175 (たとえば @samp{2002-03-30@ })、最近のタイムスタンプでは、ISO
8176 8601 書式の月・日・時・分を表示する (たとえば @samp{03-30 23:45})。
8177 この形式は、@samp{long-iso} の形式に比べて見かけがよくないが、より
8178 狭いスペースでほぼ同量の情報を伝えており、また、簡潔なので
8179 @command{ls} の出力を伝統的な 1 行 80 桁の出力行に納めるのに都合が
8180 よい。@command{ls} を実行する以下の二つの方法は、同じことである。
8181
8182 @example
8183 newline='
8184 '
8185 ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
8186 ls -l --time-style="iso"
8187 @end example
8188
8189 @item locale
8190 @vindex LC_TIME
8191 タイムスタンプをロケール依存形式で表示する。たとえば、
8192 フィンランド語のロケールだと、最近以外のタイムスタンプを
8193 @samp{maalis 30@ @ 2002} のように表示し、最近のタイムスタンプは
8194 @samp{maalis 30 23:45} のように表示するかもしれない。ロケール
8195 依存のタイムスタンプは、概して @samp{iso} のタイムスタンプより
8196 長くなるし、ロケールごとの規則の違いは非常に大きいので、
8197 プログラムによる解析がずっと難しくなる。だが、こちらの方が
8198 わかりやすい人も大勢いる。
8199
8200 タイムスタンプの書式を決めているのは、@env{LC_TIME} ロケール・
8201 カテゴリである。デフォルトの POSIX ロケールでは、@samp{Mar 30@ @ 2002} や
8202 @samp{Mar 30 23:45} といったタイムスタンプを使っている。
8203 POSIX ロケールでは、@command{ls} を実行する次の二つの方法は、同じこと
8204 である。
8205
8206 @example
8207 newline='
8208 '
8209 ls -l --time-style="+%b %e  %Y$newline%b %e %H:%M"
8210 ls -l --time-style="locale"
8211 @end example
8212
8213 しかし、他のロケールでは動作が違う。たとえば、ドイツ語の
8214 ロケールだと、@option{--time-style="locale"} は @option{--time-style="+%e. %b %Y
8215 $newline%e. %b %H:%M"}
8216 とおそらく同じになり、@samp{30. M@"ar 2002@ }
8217 や @samp{30. M@"ar 23:45} といったタイムスタンプを生成する
8218 だろう。
8219
8220 @item posix-@var{style}
8221 @vindex LC_TIME
8222 @env{LC_TIME} ロケール・カテゴリが POSIX なら、POSIX ロケールの
8223 タイムスタンプを表示し、それ以外なら、@var{style} 形式のタイム
8224 スタンプを表示する。たとえば、@samp{posix-long-iso} という指定は、
8225 POSIX ロケールでは @samp{Mar 30@ @ 2002} や @samp{Mar 30 23:45} といった
8226 タイムスタンプを表示し、それ以外のロケールでは @samp{2002-03-30 23:45}
8227 といったタイムスタンプを表示する。
8228 @end table
8229 @end table
8230
8231 @vindex TIME_STYLE
8232 @option{--time-style} オプションのデフォルト値は、環境変数 @env{TIME_STYLE}
8233 を使って指定することができる。@env{TIME_STYLE} が設定されていない場合、
8234 デフォルトの形式は @samp{locale} である。GNU Emacs のバージョン 21.3
8235 以降では、@command{ls} の @option{--dired} オプションを使用しており、従って、
8236 どんな日付のフォーマットでも解析することができる。しかし、Emacs 21.1
8237 や 21.2 を使っていて、POSIX 以外のロケールを指定している場合は、
8238 @samp{TIME_STYLE="posix-long-iso"} を設定する必要があるかもしれない。
8239
8240 ある種のサービス不能化攻撃 (denial-of-service attacks) を回避する
8241 ため、1000 バイトより長くなりそうなタイムスタンプは、エラーとして処理
8242 されることがある。
8243
8244
8245 @node Formatting the file names
8246 @subsection ファイル名のフォーマット
8247
8248 以下のオプションは、ファイル名の表示方法を変更する。
8249
8250 @table @samp
8251
8252 @item -b
8253 @itemx --escape
8254 @itemx --quoting-style=escape
8255 @opindex -b
8256 @opindex --escape
8257 @opindex --quoting-style
8258 @cindex backslash sequences for file names
8259 ファイル名中の非表示文字 (nongraphic characters) を、C 言語で
8260 使うような、バックスラッシュにアルファベットや 8 進数を続ける方法を
8261 使用して、クォートする。
8262
8263 @item -N
8264 @itemx --literal
8265 @itemx --quoting-style=literal
8266 @opindex -N
8267 @opindex --literal
8268 @opindex --quoting-style
8269 ファイル名をクォートしない。とは言え、@command{ls} では、出力先が端末の
8270 場合、@option{--show-control-chars} が指定されていなければ、非表示文字を
8271 疑問符として表示するぐらいのことは行う。
8272
8273 @item -q
8274 @itemx --hide-control-chars
8275 @opindex -q
8276 @opindex --hide-control-chars
8277 ファイル名中の非表示文字に代えて、疑問符を表示する、この動作は、
8278 出力先が端末で、プログラムが @command{ls} の場合のデフォルトである。
8279
8280 @item -Q
8281 @itemx --quote-name
8282 @itemx --quoting-style=c
8283 @opindex -Q
8284 @opindex --quote-name
8285 @opindex --quoting-style
8286 ファイル名をダブル・クォートで囲み、非表示文字を C 言語と同じ
8287 やり方でクォートする。
8288
8289 @item --quoting-style=@var{word}
8290 @opindex --quoting-style
8291 @cindex quoting style
8292 ファイル名などの文字列には、通常使われない文字が含まれているかも
8293 しれない。このオプションを指定すると、@var{word} というスタイルを使って、
8294 そうした文字列をクォートすることになる。@var{word} は、以下に挙げるものの
8295 一つでなければならない。
8296
8297 @table @samp
8298 @item literal
8299 文字列に手を加えず、そのまま出力する。これは、@option{-N} や
8300 @option{--literal} オプションと同じである。
8301 @item shell
8302 文字列にシェルのメタ文字がある場合や、出力が誤解を招くものに
8303 なりそうな場合に、シェル向けのクォートを施す。このクォート
8304 方法は、@command{bash} のような POSIX 互換のシェルにはふさわしいもの
8305 だが、@command{csh} のような非互換のシェルでは、必ずしもうまく働く
8306 とはかぎらない。
8307 @item shell-always
8308 普通ならクォートが不要な場合でも、文字列にシェル向けのクォートを
8309 施す。
8310 @item c
8311 C 言語の文字列リテラルをクォートするときのように、文字列を
8312 クォートする。文字列をダブル・クォートで囲むことも行う。
8313 これは、@option{-Q} や @option{--quote-name} オプションと同じである。
8314 @item escape
8315 C 言語の文字列リテラルをクォートするときのように、文字列を
8316 クォートする。ただし、文字列をダブル・クォートで囲むことは
8317 しない。これは、@option{-b} や @option{--escape} と同じである。
8318 @item clocale
8319 C 言語の文字列リテラルをクォートするときのように、文字列を
8320 クォートする。ただし、文字列を囲む引用符には、ロケールに
8321 ふさわしいものを使う。
8322 @item locale
8323 @c Use @t instead of @samp to avoid duplicate quoting in some output styles.
8324 C 言語の文字列リテラルをクォートするときのように、文字列を
8325 クォートする。ただし、文字列を囲む引用符には、ロケールに
8326 ふさわしいものを使い、さらに、デフォルトの C ロケールで
8327 言うと、@t{"like this"} ではなく、@t{'like this'} のように
8328 クォートを行う。この方が見栄えのよいディスプレイが多い。
8329 @end table
8330
8331 @option{--quoting-style} オプションのデフォルト値は、環境変数
8332 @env{QUOTING_STYLE} によって指定することができる。この環境変数が
8333 設定されていない場合、デフォルトの値は @samp{literal} だが、
8334 このパッケージの将来のバージョンでは、デフォルトを @samp{shell} に
8335 変更するかもしれない。
8336
8337 @item --show-control-chars
8338 @opindex --show-control-chars
8339 ファイル名中の非表示文字に手を加えず、そのまま出力する。
8340 この動作は、出力先が端末ではない場合や、プログラムが @command{ls} では
8341 ない場合の (訳注: たとえば、@command{wc} や @command{du} の) デフォルトである。
8342
8343 @end table
8344
8345
8346 @node dir invocation
8347 @section @command{dir}: ディレクトリの内容を簡潔に表示する
8348
8349 @pindex dir
8350 @cindex directory listing, brief
8351
8352 @command{dir} の動作は、@code{ls -C -b} と同じである。すなわち、デフォルトでは、
8353 ファイルのリストを多段組みで (訳注: 1 行に複数ファイルの形式で) 表示し、
8354 ソートは縦方向に行う。また、特殊文字は、バックスラッシュ・エスケープ
8355 シーケンスを使って表示する。
8356
8357 @xref{ls invocation, @command{ls}}.
8358
8359
8360 @node vdir invocation
8361 @section @command{vdir}: ディレクトリの内容を詳細に表示する
8362
8363 @pindex vdir
8364 @cindex directory listing, verbose
8365
8366 @command{vdir} の動作は、@code{ls -l -b} と同じである。すなわち、デフォルトでは、
8367 詳細形式でファイルをリストし、特殊文字は、バックスラッシュ・エスケープ
8368 シーケンスを使って表示する。
8369
8370 @node dircolors invocation
8371 @section @command{dircolors}: @command{ls} のカラー設定
8372
8373 @pindex dircolors
8374 @cindex color setup
8375 @cindex setup for color
8376
8377 @command{dircolors} は、@command{ls} (や @command{dir} など) でカラー出力をするのに必要な
8378 端末設定のためのシェル・コマンドのシーケンスを出力する。通常、次の
8379 ような形で使用される。
8380
8381 @example
8382 eval "$(dircolors [@var{option}]@dots{} [@var{file}])"
8383 @end example
8384
8385 @var{file} が指定されていると、@command{dircolors} はそれを読み込んで、
8386 どのファイルタイプや拡張子に対してどの色を使うかを決定する。
8387 @var{file} が指定されていない場合は、プログラムに埋め込まれているデータベース
8388 が使用される。そうした設定ファイルの書式について詳しいことを知りた
8389 かったら、@samp{dircolors --print-database} を実行してみるとよい。
8390
8391 ファイル @file{~/.dircolors} が存在していたら、@command{dircolors} がそれを
8392 読み込むようにするには、以下の行を自分の @file{~/.bashrc} に書き込めばよい
8393 (お気に入りのシェルが bash でないなら、適切に書き直すこと)。
8394
8395 @example
8396 d=.dircolors
8397 test -r $d && eval "$(dircolors $d)"
8398 @end example
8399
8400 @vindex LS_COLORS
8401 @vindex SHELL @r{environment variable, and color}
8402 @command{dircolors} の出力は、環境変数 @env{LS_COLORS} を設定するシェル・
8403 コマンドである。どのシェルの文法にするかは、コマンドラインで
8404 指定することができる。指定しない場合は、環境変数 @env{SHELL} の値から
8405 @command{dircolors} が推測する。
8406
8407 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
8408
8409 @table @samp
8410 @item -b
8411 @itemx --sh
8412 @itemx --bourne-shell
8413 @opindex -b
8414 @opindex --sh
8415 @opindex --bourne-shell
8416 @cindex Bourne shell syntax for color setup
8417 @cindex @command{sh} syntax for color setup
8418 Bourne シェルのコマンドを出力する。これが、環境変数 @env{SHELL} が
8419 設定されていて、その値が @samp{csh} や @samp{tcsh} で終わっていないときの
8420 デフォルトである。
8421
8422 @item -c
8423 @itemx --csh
8424 @itemx --c-shell
8425 @opindex -c
8426 @opindex --csh
8427 @opindex --c-shell
8428 @cindex C shell syntax for color setup
8429 @cindex @command{csh} syntax for color setup
8430 C シェルのコマンドを出力する。これは、環境変数 @code{SHELL} の値が、
8431 @command{csh} や @command{tcsh} で終わっているときのデフォルトである。
8432
8433 @item -p
8434 @itemx --print-database
8435 @opindex -p
8436 @opindex --print-database
8437 @cindex color database, printing
8438 @cindex database for color setup, printing
8439 @cindex printing color database
8440 (プログラムに埋め込まれている) デフォルトのカラー設定データベースを
8441 出力する。この出力は、それ自体有効な設定ファイルであり、どういう
8442 設定が可能かについてかなり詳しく説明している。
8443
8444 @end table
8445
8446 @exitstatus
8447
8448
8449 @node Basic operations
8450 @chapter 基本的なファイル操作
8451
8452 @cindex manipulating files
8453
8454 この章では、基本的なファイル操作のためのコマンドを説明する。
8455 すなわち、コピー、移動 (名前の変更)、消去 (削除) といった操作である。
8456
8457 @menu
8458 * cp invocation::            ファイルをコピーする。
8459 * dd invocation::            ファイルの変換とコピー。
8460 * install invocation::       ファイルをコピーし属性をセットする。
8461 * mv invocation::            ファイルの移動 (名前の変更) を行う。
8462 * rm invocation::            ファイルやディレクトリを削除する。
8463 * shred invocation::         セキュリティを向上させたファイルの削除。
8464 @end menu
8465
8466
8467 @node cp invocation
8468 @section @command{cp}: ファイルやディレクトリをコピーする
8469
8470 @pindex cp
8471 @cindex copying files and directories
8472 @cindex files, copying
8473 @cindex directories, copying
8474
8475 @command{cp} はファイルをコピーする (もしそうしたければ、ディレクトリの
8476 コピーもできる)。コピーによって作られたファイルは、コピー元から全く
8477 独立したものになる。一つのファイルを別のファイルにコピーすることも
8478 できるし、好きなだけたくさんのファイルをコピー先のディレクトリに
8479 一遍にコピーすることもできる。
8480 @sp 1
8481 書式:
8482
8483 @example
8484 cp [@var{option}]@dots{} [-T] @var{source} @var{dest}
8485 cp [@var{option}]@dots{} @var{source}@dots{} @var{directory}
8486 cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
8487 @end example
8488
8489 @itemize @bullet
8490 @item
8491 ファイル名を二つ指定すると、@command{cp} は最初のファイルを 2 番目の
8492 ファイルにコピーする。
8493
8494 @item
8495 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
8496 それを指定しないでも、最後のファイルがディレクトリであり、しかも
8497 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
8498 @command{cp} は、各コピー元 (@var{source}) ファイルを、指定されたディレクトリに
8499 コピー元 (@var{source}) と同じ名前でコピーする。
8500 @end itemize
8501
8502 ほとんどの場合、ファイルは読み込まれたとおりに書き出される。例外に
8503 ついては、後述の @option{--sparse} オプションをご覧になっていただきたい。
8504
8505 デフォルトでは、@command{cp} はディレクトリをコピーしない。ただし、
8506 @option{-R}, @option{-a}, @option{-r} オプションを指定すると、@command{cp} は再帰的なコピーを行う。
8507 すなわち、コピー元のディレクトリを段階的に下って、対応するコピー先の
8508 ディレクトリにファイルをコピーすることになる。
8509
8510 コピー元がシンボリックリンクの場合、@command{cp} がリンクをたどるのは、
8511 (訳注: すなわち、リンクそのものではなく、参照先の実ファイルをコピー
8512 するのは)、通常では、再帰的なコピーをしていないときか、あるいは、
8513 @option{--link} (@option{-l}) オプションが使用されているときだけである。このデフォ
8514 ルトの動作は、次に挙げるオプションによって上書きすることができる。
8515 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
8516 (@option{-L}), @option{--no-dereference}
8517 (@option{-P}), @option{-H}。こうしたオプションを二つ以上指定すると、@command{cp} は警告を
8518 出さず、最後のオプションで他のものを上書きする。
8519 @sp 1
8520 (訳注: coreutils-8.22 の @command{cp} では @option{--link} オプションの動作が変更
8521 になった。コピー元がシンボリックリンクの場合、coreutils-8.21 までは、
8522 デフォルトでは、シンボリックリンクのハードリンクを作っていたが、8.22
8523 の @command{cp} では参照先ファイルのハードリンクを作るようになっている。)
8524
8525 コピー先がシンボリックリンクの場合、@command{cp} がリンクをたどるのは、
8526 (訳注: すなわち、コピー元ファイルで、リンクそのものではなく、参照先の
8527 ファイルを上書きするのは)、そのリンクが、存在する通常ファイルを指して
8528 いるときだけである。それに対して、コピー先のシンボリックリンクがリンク
8529 切れしている場合は、@command{cp} は、デフォルトではコピーを拒否し、エラーメッ
8530 セージを出して、実行に失敗する。そうした操作は、本質的に危険だからで
8531 ある。この動作は、伝統的な習慣や POSIX の仕様に反している。たとえリスク
8532 があろうとも、リンク切れしたシンボリックリンクの参照先を @command{cp} が作成する
8533 ようにしたいなら、環境変数 @env{POSIXLY_CORRECT} を設定すればよい。なお
8534 @option{--backup} や @option{--link} といったオプションが、コピーする前にコピー先
8535 ファイルの名前変更や削除を行う場合、@command{cp} は、リンクが指しているファイル
8536 ではなく、シンボリックリンクの名前変更や削除を行う。
8537
8538 デフォルトでは、@command{cp} がスペシャルファイルの内容をコピーするのは、
8539 再帰的なコピーをしていないときだけである。このデフォルトの動作は、
8540 @option{--copy-contents} によって変更できる。
8541
8542 @cindex self-backups
8543 @cindex backups, making only
8544 @command{cp} は通常、ファイルを自分自身にコピーすることを拒否するが、次の
8545 例外がある。@var{source} と @var{dest} が同一で、しかも、通常ファイルを指している
8546 とき、@option{--force --backup} オプションが指定されると、@command{cp} は バックアップ
8547 ファイルを作成することになる。バックアップファイルを標準のものにするか
8548 (訳注: ファイルの末尾にチルダ @samp{~} が 1 個付く)、番号付きのものにするか
8549 は、いつもどおりの方法で指定できる (@pxref{Backup options})。存在する
8550 ファイルに変更を加える前に、そのバックアップをちょっと作っておきたい
8551 場合、この動作は便利である。
8552
8553 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
8554
8555 @table @samp
8556 @item -a
8557 @itemx --archive
8558 @opindex -a
8559 @opindex --archive
8560 コピーを行う際、コピー元ファイルの構造や属性をできるかぎり維持
8561 する (ただし、ディレクトリの内部構造を維持しようとはしない。その
8562 ため、コピー先で @samp{ls -U} を実行すると、コピー元とは違った順序で
8563 ファイルがリストされるかもしれない)。SELinux コンテキストや拡張
8564 属性 (xattr) も維持しようとするが、そうした操作に失敗しても無視し、
8565 その旨エラーメッセージを表示することはない。エラーメッセージが
8566 少ないだけで、@option{-dR --preserve=all} と同じある。
8567
8568 @item --attributes-only
8569 @opindex --attributes-only
8570 コピー元ファイルの指定された属性のみを、コピー先にコピーする。
8571 コピー先ファイルがすでに存在している場合、その内容を変更する
8572 ことはない。属性のうち、何をコピーするかを決める方法については、
8573 @option{--preserve} オプションの項を見ていただきたい。
8574
8575 @item -b
8576 @itemx @w{@kbd{--backup}[=@var{method}]}
8577 @opindex -b
8578 @opindex --backup
8579 @vindex VERSION_CONTROL
8580 @cindex backups, making
8581 @xref{Backup options}.  そのままでは、上書きされるか、消去されて
8582 しまう各ファイルのバックアップを作成する。特殊な用法としては、
8583 次のものがある。force と backup の両方のオプションが指定されて
8584 いるとき、コピー元 (@var{source}) とコピー先 (@var{dest}) が同じ名前で、
8585 しかも実在する通常ファイルを指していると、@command{cp} はコピー元 (@var{source})
8586 のバックアップを作成する。次のちょっとした Bourne シェルの
8587 スクリプトは、オプションのこの組み合わせの応用だが、便利である。
8588
8589 @example
8590 #!/bin/sh
8591 # Usage: backup FILE...
8592 # リストされた各 FILE について GNU スタイルのバックアップを
8593 # 作成する
8594 fail=0
8595 for i; do
8596   cp --backup --force --preserve=all -- "$i" "$i" || fail=1
8597 done
8598 exit $fail
8599 @end example
8600
8601 @item --copy-contents
8602 @cindex directories, copying recursively
8603 @cindex copying directories recursively
8604 @cindex recursively copying directories
8605 @cindex non-directories, copying as special files
8606 再帰的なコピーを行っている際に、スペシャルファイル (たとえば、
8607 FIFO やデバイスファイル) の内容を、操作対象が通常ファイルで
8608 あるかのようにコピーする。要するに、コピー元の各ファイルから
8609 データを読み込んで、それをコピー先に書き出そうとするわけである。
8610 このオプションを使うのは、ほとんどの場合誤りである。なぜなら、
8611 FIFO や、通常 @file{/dev} ディレクトリにあるようなスペシャルファイルを
8612 対象にした場合、望ましくない結果を生ずることが珍しくないからだ。
8613 @code{cp -R --copy-contents} は、FIFO や @file{/dev/console} のような
8614 スペシャルファイルからデータを読み込もうとすると、たいていの
8615 場合、いつまでも無反応になるだろうし、@file{/dev/zero} をコピーしよう
8616 とすれば、コピー先のディスクを溢れさせてしまうだろう。この
8617 オプションは、再帰的なコピーをするとき以外、効果を持たない。
8618 また、シンボリックリンクのコピーには影響しない。
8619
8620 @item -d
8621 @opindex -d
8622 @cindex symbolic links, copying
8623 @cindex hard links, preserving
8624 シンボリックリンクをコピーする際、リンクが指しているファイルを
8625 コピーするのではなく、シンボリックリンクをシンボリックリンクとして
8626 コピーする。また、コピー元において複数のファイルがハードリンクの
8627 関係にある場合、コピー先でもその関係を維持する。
8628 @option{--no-dereference --preserve=links} と同じである。
8629
8630 @item -f
8631 @itemx --force
8632 @opindex -f
8633 @opindex --force
8634 このオプションを付けずにコピーを行う場合、コピー先ファイルが
8635 すでに存在し、しかも書き込みモードでオープンできないと、コピー
8636 に失敗する。それに対して、@option{--force} を付けた場合は、コピー先
8637 ファイルがオープンできないと、@command{cp} は、まずそれを削除してから、
8638 再度オープンを試みる。この動作は、@option{--force} と一緒に @option{--link} や
8639 @option{--symbolic-link} を使用した場合に行われる動作とは、違うことに
8640 注意していただきたい。後者の場合は、すでに存在するコピー先ファイル
8641 は一度もオープンされず、むしろ無条件で削除されるのである。
8642 @option{--remove-destination} の説明も参照すること。
8643
8644 このオプションは、@option{--interactive} や @option{-i} オプションとは無関係
8645 である。どちらも他方の効果を無効にすることはない。
8646
8647 @option{--no-clobber} や @option{-n} オプションを使用している場合、このオプション
8648 は無視される。
8649
8650 @item -H
8651 @opindex -H
8652 コマンドラインの引数がシンボリックリンクを指定している場合には、
8653 シンボリックリンクそのものではなく、それが指しているファイルを
8654 コピーする。とは言え、再帰的にディレクトリ・ツリーをたどっている
8655 ときにシンボリックに出会った場合は、そのまま (つまり、シンボリック
8656 リンクとして) コピーする。
8657
8658 @item -i
8659 @itemx --interactive
8660 @opindex -i
8661 @opindex --interactive
8662 ディレクトリ以外のファイルをコピーする際に、コピー先ファイルが
8663 すでに存在していると、プロンプトを出して、ファイルを上書きして
8664 よいかどうか、ユーザに問い合わせる。@option{-i} オプションは、@option{-n}
8665 オプションが前にあるとき、それを無効にする。
8666
8667 @item -l
8668 @itemx --link
8669 @opindex -l
8670 @opindex --link
8671 コピー元がディレクトリ以外の場合、コピーする代わりに、ハードリンクを
8672 作成する。
8673
8674 @item -L
8675 @itemx --dereference
8676 @opindex -L
8677 @opindex --dereference
8678 コピー元がシンボリックリンクの場合は、その参照先をコピーする。
8679 また、このオプションを使った場合、@command{cp} はシンボリックリンクを
8680 作ることができない。たとえば、コピー元のディレクトリ・ツリー中に
8681 (通常ファイルに対する) シンボリックリンクがあると、コピー先のディ
8682 レクトリ・ツリーには、通常ファイルとしてコピーされることになる。
8683
8684 @item -n
8685 @itemx --no-clobber
8686 @opindex -n
8687 @opindex --no-clobber
8688 存在するファイルを上書きしない。@option{-n} オプションは、@option{-i} オプション
8689 が前にあるとき、それを無効にする。このオプションと @option{-b} (@option{--backup})
8690 オプションは、どちらか一方しか指定できない。
8691
8692 @item -P
8693 @itemx --no-dereference
8694 @opindex -P
8695 @opindex --no-dereference
8696 @cindex symbolic links, copying
8697 コピー元がシンボリックリンクの場合、それが指しているファイルを
8698 コピーするのではなく、シンボリックリンクとしてコピーする。この
8699 オプションが作用を及ぼすのは、コピー元のシンボリックリンクに対して
8700 だけであり、コピー先に指定されたシンボリックリンクについては、
8701 可能なかぎり常に参照先がたどられる。
8702
8703 @item -p
8704 @itemx @w{@kbd{--preserve}[=@var{attribute_list}]}
8705 @opindex -p
8706 @opindex --preserve
8707 @cindex file information, preserving, extended attributes, xattr
8708 コピー元ファイルの属性のうち、指定されたものをコピー先でも維持する。
8709 @var{attribute_list} を指定する場合は、一つ以上の以下の文字列をコンマで
8710 区切ったリストでなければならない。
8711
8712 @table @samp
8713 @item mode
8714 ファイルのモードビット (訳注: 一般にアクセス権とか、許可属性と
8715 言われるもの) やアクセス・コントロール・リストを維持する。
8716 @item ownership
8717 所有者とグループを維持する。ほとんどの最近のシステムでは、
8718 ファイルの所有者を変更できるのは、しかるべき権限を持ったユーザ
8719 だけである。また、一般ユーザにファイルのグループが維持できるの
8720 は、維持しようとするグループに、たまたまそのユーザが属している
8721 ときのみである。
8722 @item timestamps
8723 最終アクセス日時 (last access time) と最終更新日時 (last
8724 modification time) を、可能ならば、維持する。古いシステム
8725 では、対象となるファイルがシンボリックリンクの場合、そうした
8726 属性を維持することができない。それに対して、最近のシステム
8727 では、たいていのものが @code{utimensat} 関数を用意しているので、
8728 シンボリックリンクの場合でも、日時関係の属性維持が可能である。
8729 @item links
8730 コピー元のファイル同士が (ハードリンクであれ、シンボリック
8731 リンクであれ)リンクの関係にあるとき、コピー先の対応する
8732 ファイル同士でも、その関係を維持する。ただし、@option{-L} や @option{-H} と
8733 一緒に使った場合、このオプションがシンボリックリンクを
8734 ハードリンクに変更することがあるのに、注意していただきたい。
8735 一例を挙げる。
8736 @example
8737 $ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
8738 74161745 a
8739 74161745 b
8740 @end example
8741 @noindent
8742 コピー元に注目していただきたい。@file{b} は、通常ファイル @file{a} を
8743 指すシンボリックリンクである。ところが、コピー先ディレクトリ
8744 @file{c/} の二つのファイルは、ハードリンクになっている。@option{-a} は
8745 @option{--no-dereference} を意味するのだから、シンボリックリンクが
8746 コピーされそうに思えるが、この場合は、後に続く @option{-H} が、
8747 コマンドライン引数の参照をたどるように @command{cp} に命じているので、
8748 @command{cp} には、同じ inode 番号を持った 2 個のファイルがコマンド
8749 ラインで指定されているように見えるのである。さらに、@option{-a} は
8750 @option{--preserve=links} オプションを意味してもいるので、この働きに
8751 よって、ハードリンクと認識された両ファイルの関係が、コピー先で
8752 維持されることになるのである。
8753
8754 次のものは、@command{cp} の @option{-L} を使った場合の類似例である。
8755 @smallexample
8756 $ mkdir b c; (cd b; : > a; ln -s a b); cp -aL b c; ls -i1 c/b
8757 74163295 a
8758 74163295 b
8759 @end smallexample
8760
8761 @item context
8762 ファイルの SELinux セキュリティ・コンテキストを維持する。
8763 それができないときは、詳細なエラーメッセージを出し、失敗の
8764 ステータスで終了する。
8765 @item xattr
8766 ファイルの拡張属性を維持する。それができないときは、詳細な
8767 エラーメッセージを出し、失敗のステータスで終了する。@command{cp} が
8768 xattr のサポートなしでビルドされている場合は、このオプション
8769 は無視される。SELinux コンテキスト、ACL、ケーパビリティなどを
8770 xattr を使って実装している場合には、そうした属性もこのオプ
8771 ションによって、明示的な指定がない場合でも維持される。すなわち、
8772 @option{--preserve=mode} や @option{--preserve=context} を指定しないでも維持
8773 されるわけだ。
8774 @item all
8775 ファイルの属性をすべて維持する。上記のすべてを指定するのと
8776 同じことだが、SELinux セキュリティ・コンテキストや拡張属性の
8777 維持に失敗しても、@command{cp} の終了ステータスが変わらないという点が
8778 異なっている。@option{-a} とは違って、@samp{Operation not supported} 以外のすべての
8779 警告メッセージを出力する。
8780 @end table
8781
8782 @var{attribute_list} なしで @option{--preserve} を使用するのは、
8783 @option{--preserve=mode,ownership,timestamps} と同じことである。
8784
8785 このオプションを使わない場合、コピー先ファイルがすでに存在して
8786 いる場合は、その許可属性は変更されない。一方、新しくファイルが
8787 作成される場合は、各コピー先ファイルのモードビットは、対応する
8788 コピー元ファイルのモードビットを元にして、そこから umask で設定
8789 されているビットと、set-user-ID や set-group-ID ビットを落とした
8790 ものになる。@xref{File permissions}.
8791
8792 @item @w{@kbd{--no-preserve}=@var{attribute_list}}
8793 @cindex file information, preserving
8794 指定された属性を維持しない。@var{attribute_list} の書式は、@option{--preserve}
8795 の場合と同じである。
8796
8797 @item --parents
8798 @opindex --parents
8799 @cindex parent directories and @command{cp}
8800 コピー先の各ファイル名を生成する際、出力先に指定されたディレクトリ
8801 の末尾にスラッシュを付け、その後ろにコピー元として指定された
8802 ファイル名を付け足すことによってそれを行う。@command{cp} に渡す最後の
8803 引数は、実在するディレクトリの名前でなければならない。一例を挙げる。
8804
8805 @example
8806 cp --parents a/b/c existing_dir
8807 @end example
8808
8809 @noindent
8810 ファイル @file{a/b/c} を上記のコマンドでコピーすると、ファイル
8811 @file{existing_dir/a/b/c} が出来る。途中のディレクトリが存在して
8812 いなければ、それも作成される。
8813
8814 @item -R
8815 @itemx -r
8816 @itemx --recursive
8817 @opindex -R
8818 @opindex -r
8819 @opindex --recursive
8820 @cindex directories, copying recursively
8821 @cindex copying directories recursively
8822 @cindex recursively copying directories
8823 @cindex non-directories, copying as special files
8824 ディレクトリを再帰的にコピーする。デフォルトでは、@option{--link} (@option{-l})
8825 オプションが同時に使われていないかぎり、コピー元にあるシンボリック
8826 リンクの参照先をたどることをしない。@option{--archive} (@option{-a}), @option{-d},
8827 @option{--dereference} (@option{-L}), @option{--no-dereference}
8828 (@option{-P}), @option{-H} などの
8829 オプションを参照。スペシャルファイルについては、コピーする際に、
8830 コピー元ファイルと同じファイル型のコピー先ファイルを作成する。
8831 @option{--copy-contents} を参照。シンボリックリンクやスペシャルファイルの
8832 コピーに @option{-r} オプションを使用するのは、どのシステムでも通用する
8833 ことではない。GNU 以外のシステムの中には、歴史的な理由から、
8834 @option{-r} が、@option{-L} と @option{--copy-contents} を同時に指定するのと等価になっている
8835 ものもあるのだ。また、シンボリックリンクをコピーするのに @option{-R} を
8836 使用するのも、@option{-P} も併せて指定しないかぎり、どのシステムでも通用
8837 することではない。デフォルトでシンボリックリンクの参照先をたどる
8838 実装が、POSIX で認められているからである。
8839
8840 @item --reflink[=@var{when}]
8841 @opindex --reflink[=@var{when}]
8842 @cindex COW
8843 @cindex clone
8844 @cindex copy on write
8845 ファイルシステムがサポートしていれば、軽便コピー、すなわち、
8846 書き込み時コピー(copy-on-write (COW) copy) を行う。留意すべきは、
8847 これが成功した場合、コピー元とコピー先のファイルは、どちらかに
8848 対して変更が加えられるまで、ディスクの同じデータブロックを共有
8849 しているということである。従って、ディスク I/O エラーが起きて、
8850 片方のファイルのデータブロックが損傷を受ければ、もう一方の
8851 ファイルも同じ被害に会う。
8852
8853 @var{when} の値には、次のうちの一つが使える。
8854
8855 @table @samp
8856 @item always
8857 デフォルトの動作である。copy-on-write がサポートされていない
8858 場合は、各ファイルについて失敗した旨を報告し、失敗を示す
8859 ステータスで終了する。
8860
8861 @item auto
8862 copy-on-write 操作がサポートされていない場合は、copy-on-write
8863 をあきらめて、標準のコピー動作を行う。
8864 @end table
8865
8866 このオプションは、@option{--link}, @option{--symbolic-link}
8867 @option{--attributes-only}
8868 オプションによって無効になるので、データをコピーする際の @command{cp} の
8869 デフォルト動作の設定に使用することができる。たとえば、次のエイリ
8870 アスを使うと、@command{cp} は、ファイルシステムがサポートする範囲で、
8871 ディスクスペースの使用を最少に留めるようになる。
8872
8873 @example
8874 alias cp='cp --reflink=auto --sparse=always'
8875 @end example
8876
8877 @item --remove-destination
8878 @opindex --remove-destination
8879 コピー先ファイルがすでに存在する場合、その各々についてオープンを
8880 試みる前に、削除する (上述の @option{-f} と比較すること)。
8881
8882 @item --sparse=@var{when}
8883 @opindex --sparse=@var{when}
8884 @cindex sparse files, copying
8885 @cindex holes, copying files with
8886 @findex read @r{system call, and holes}
8887 穴空きファイル (@dfn{sparse file}) とは、穴 (@dfn{holes}) を含むファイル
8888 である。穴というのは、物理的なディスクブロック上には存在しない
8889 ゼロバイトの連続で、@samp{read} システムコールがそれを読む込むとき、
8890 ゼロの連続として扱うものである。バイナリ・ファイルには、連続する
8891 ゼロバイトがたくさん含まれていることが多いので、この仕組みは、
8892 ディスクスペースを大いに節約してくれるし、動作速度の向上を
8893 もたらしてもくれる。デフォルトで @command{cp} は、かなり大雑把な発見的
8894 手法を使って、コピー元ファイルにある穴を検出し、対応するコピー先
8895 ファイルも穴空きファイルにする。なお、穴空きファイルにできるのは、
8896 通常ファイルだけである。
8897
8898 @var{when} の値には、次のうちの一つが使える。
8899
8900 @table @samp
8901 @item auto
8902 デフォルトの動作である。すなわち、コピー元が穴空きファイルなら、
8903 コピー先も穴空きファイルにしようとする。ただし、コピー先
8904 ファイルがすでに存在し、通常ファイル以外を指している場合は、
8905 それを穴空きにしようとはしない。
8906
8907 @item always
8908 たとえ、コピー元ファイルが穴空きファイルに見えなくても、十分に
8909 長いゼロバイトの連続があれば、その各々に対応する穴をコピー先
8910 ファイルに設けようとする。この動作が役に立つのは、コピー元
8911 ファイルが、穴空きファイルをサポートしていないファイルシステム
8912 にあるのに対し (たとえば、SGI IRIX 5.3 以前の @samp{efs} ファイル
8913 システム)、コピー先ファイルは穴空きファイルをしっかりサポート
8914 するタイプのファイルシステムにある場合である。穴を作ることが
8915 できるのは、通常ファイルだけなので、コピー先が通常ファイル以外
8916 なら、@command{cp} がそのファイルを穴空きにしようと試みることもない。
8917
8918 @item never
8919 コピー先ファイルを穴空きにしない。これは、@command{mkswap} コマンドで
8920 使用するファイルを作成するときに役に立つ。そうしたファイルには、
8921 穴があってはならないからである。
8922 @end table
8923
8924 @optStripTrailingSlashes
8925
8926 @item -s
8927 @itemx --symbolic-link
8928 @opindex -s
8929 @opindex --symbolic-link
8930 @cindex symbolic links, copying with
8931 コピー元がディレクトリ以外の場合、コピーする代わりに、シンボリック
8932 リンクを作成する。出力先ファイルをカレント・ディレクトリに作成する
8933 場合を除いて、コピー元ファイルの名前は、すべて (@samp{/} で始まる) 絶対
8934 パス表記でなければならない。シンボリックリンクをサポートしていない
8935 システムでは、このオプションはエラーメッセージを出すだけである。
8936
8937 @optBackupSuffix
8938
8939 @optTargetDirectory
8940
8941 @optNoTargetDirectory
8942
8943 @item -u
8944 @itemx --update
8945 @opindex -u
8946 @opindex --update
8947 @cindex newer files, copying only
8948 ディレクトリ以外のものをコピーする際、それがコピー先にも存在し、
8949 しかもその更新日時 (modification time) がコピー元と同じか、より
8950 新しい場合、コピーを行わない。コピー元からコピー先へタイムスタンプを
8951 引き継がせている場合には、コピー元のタイムスタンプの精度を、コピー先
8952 のファイルシステム、及びタイプスタンプの更新に使われるシステムコール
8953 の精度に落とした上で、比較を行う。これは、同じコピー元とコピー先の
8954 ファイルに対して @samp{cp -pu} コマンドを何回か実行する場合に、余計な
8955 コピー作業が起きるのを避けるためである。@option{--preserve=links} が一緒に
8956 指定されている場合は (たとえば、@samp{cp -au} だとそうなる)、そちらが
8957 優先されることになる。その結果、コピー元でファイルが処理される順番
8958 によっては、コピー元のハードリンクを反映させるために、コピー先の
8959 より新しいファイルが置き換えられることもある。
8960
8961 @item -v
8962 @itemx --verbose
8963 @opindex -v
8964 @opindex --verbose
8965 コピーを行う前に、コピーするファイル名を表示する。
8966
8967 @item -x
8968 @itemx --one-file-system
8969 @opindex -x
8970 @opindex --one-file-system
8971 @cindex file systems, omitting copying to different
8972 あるファイルシステムでコピーを始めた場合、別のファイルシステム
8973 にあるサブディレクトリをスキップする。ただし、マウントポイントの
8974 ディレクトリはコピーされる。
8975
8976 @macro optContext
8977 @item -Z
8978 @itemx --context[=@var{context}]
8979 @opindex -Z
8980 @opindex --context
8981 @cindex SELinux, setting/restoring security context
8982 @cindex security context
8983 @var{context} が指定されていない場合は、出力するファイルの SELinux
8984 セキュリティ・コンテキストを、出力先におけるシステムのデフォルト
8985 のタイプによって調整する。これは、@command{restorecon} コマンドの動作に
8986 似ている。このオプションの長い形式を使って、コンテキストを明示的に
8987 指定した場合、そのコンテキストが設定されるのは、新しく作成される
8988 ファイルに対してのみである。コンテキストを指定した場合に、SELinux
8989 が無効になっていると、警告メッセージを出す。
8990 @end macro
8991 @optContext このオプションと
8992 @option{--preserve=context} を一緒に使うことはできない。また、この
8993 オプションは @option{--preserve=all} や @option{-a} オプションに優先する。
8994 (coreutils-8.22 の新機能)
8995
8996 @end table
8997
8998 @exitstatus
8999
9000
9001 @node dd invocation
9002 @section @command{dd}: ファイルの変換とコピー
9003
9004 @pindex dd
9005 @cindex converting while copying a file
9006
9007 @command{dd} はファイルをコピーする (デフォルトでは、標準入力から標準出力へ
9008 コピーする)。その際、入出力のブロックサイズを変更することができる。
9009 また、コピーと同時にデータ形式の変換を行うこともできる。
9010 @sp 1
9011 書式:
9012
9013 @example
9014 dd [@var{operand}]@dots{}
9015 dd @var{option}
9016 @end example
9017
9018 指定できるオプションは、@option{--help} と @option{--version} だけである。
9019 @xref{Common options}.  @command{dd} では、以下のオペランドが使える。オペランドの
9020 書式の元になったのは、OS/360 の JCL (Job Control Language) の DD 文
9021 (Data Definition statement) である。
9022
9023 @table @samp
9024
9025 @item if=@var{file}
9026 @opindex if
9027 標準入力の代わりに、@var{file} から読み込む。
9028
9029 @item of=@var{file}
9030 @opindex of
9031 標準出力の代わりに、@var{file} に書き出す。@samp{conv=notrunc} が指定されて
9032 いない場合、@command{dd} は、出力を開始する前に、@var{file} を 0 バイトに
9033 (あるいは、@samp{seek=} で指定されたサイズに) 短縮する。
9034
9035 @item ibs=@var{bytes}
9036 @opindex ibs
9037 @cindex block size of input
9038 @cindex input block size
9039 入力ブロックサイズを @var{bytes} にする。@command{dd} が 1 ブロック @var{bytes}
9040 バイトで読み込みを行うようになる。デフォルトは 512 バイトである。
9041
9042 @item obs=@var{bytes}
9043 @opindex obs
9044 @cindex block size of output
9045 @cindex output block size
9046 出力ブロックサイズを @var{bytes} にする。@command{dd} が 1 ブロック @var{bytes}
9047 バイトで書き出しを行うようになる。デフォルトは 512 バイトである。
9048
9049 @item bs=@var{bytes}
9050 @opindex bs
9051 @cindex block size
9052 入力、出力、両方のブロックサイズを @var{bytes} にする。@command{dd} が
9053 1 ブロック @var{bytes} バイトで読み書きを行うようになり、@samp{ibs} や @samp{obs}
9054 の指定は、あっても無効になる。さらに、データ変換を行う @option{conv}
9055 オプションが指定されていない場合には、入力は、それがブロックサイズ
9056 より小さくても、読み込まれるやいなや、出力にコピーされることになる。
9057
9058 @item cbs=@var{bytes}
9059 @opindex cbs
9060 @cindex block size of conversion
9061 @cindex conversion block size
9062 @cindex fixed-length records, converting to variable-length
9063 @cindex variable-length records, converting to fixed-length
9064 変換ブロックサイズを @var{bytes} にする。可変長のレコードを固定長の
9065 レコードに変換するときや (@option{conv=block})、その逆を行うとき
9066 (@option{conv=unblock})、固定長レコードの長さとして @var{bytes} の値を使用する。
9067
9068 @item skip=@var{n}
9069 @opindex skip
9070 入力ファイルで @samp{ibs} バイトのブロックを @var{n} 個読み飛ばしてから、
9071 コピーを行う。@samp{iflag=skip_bytes} が指定されている場合は、@var{n} は
9072 ブロック数ではなく、バイト数と見なされる。
9073
9074 @item seek=@var{n}
9075 @opindex seek
9076 出力ファイルで @samp{obs} バイトのブロックを @var{n} 個スキップしてから、
9077 コピーを行う。@samp{oflag=seek_bytes} が指定されている場合は、 @var{n} は
9078 ブロック数ではなく、バイト数と見なされる。
9079
9080 @item count=@var{n}
9081 @opindex count
9082 入力ファイルの末尾まで全部ではなく、@samp{ibs} バイトのブロックを @var{n}
9083 個だけ入力ファイルからコピーする。@samp{iflag=count_bytes} が指定
9084 されている場合は、@var{n} はブロック数ではなく、バイト数と見なされる。
9085 なお、次のことに注意してほしい。パイプから読み込んでいる場合
9086 などに時おり起きることだが、入力からの読み込みがブロックの
9087 大きさに足りないことがある。そうした場合に @samp{iflag=fullblock} が
9088 指定してあると、@samp{count=} は、一杯になるまで読み込むブロックの
9089 個数に対応するようになる。入力から読み込みを実行する回数という
9090 POSIX で規定されている伝統的な動作には、対応しなくなるのだ。
9091
9092 @item status=@var{which}
9093 @opindex status
9094 通常では @samp{INFO} シグナルを受け取った時点や、@command{dd} が終了したときに、
9095 転送情報が標準エラーに出力される。@var{which} を指定することで、どの情報
9096 を表示しないかを設定できる。
9097
9098 @table @samp
9099
9100 @item noxfer
9101 @opindex noxfer @r{dd status=}
9102 転送速度や転送量の統計を表示しない。通常は、そうした情報が
9103 ステータス表示の最後の行になる。
9104
9105 @item none
9106 @opindex none @r{dd status=}
9107 情報メッセージや警告メッセージを標準エラーに全く表示しない。
9108 エラーメッセージは通常どおり出力する。
9109
9110 @end table
9111
9112 @item conv=@var{conversion}[,@var{conversion}]@dots{}
9113 @opindex conv
9114 @var{conversion} 引数 (複数可) で指定されたようにファイルを変換する。
9115 (コンマの前後にスペースを入れてはいけない。)
9116
9117 @var{conversion} には次のものが指定できる:
9118
9119 @table @samp
9120
9121 @item ascii
9122 @opindex ascii@r{, converting to}
9123 POSIX が規定している変換テーブルを使って、EBCDIC を ASCII に
9124 変換する。変換テーブル中の 256 バイトのすべてについて、
9125 1 対 1 の変換が行われる。
9126
9127 @item ebcdic
9128 @opindex ebcdic@r{, converting to}
9129 ASCII を EBCDIC に変換する。これは @samp{ascii} 変換の逆の動作で
9130 ある。
9131
9132 @item ibm
9133 @opindex alternate ebcdic@r{, converting to}
9134 POSIX が規定しているもう一つの変換テーブルを使って、ASCII を
9135 EBCDIC の別の形式に変換する。こちらは 1 対 1 の変換ではない
9136 が、@samp{~}, @samp{[}, @samp{]} について、よく使われる伝統的な慣行を反映
9137 している。
9138
9139 @samp{ascii}, @samp{ebcdic}, @samp{ibm} は、どれか一つしか指定できない。
9140
9141 @item block
9142 @opindex block @r{(space-padding)}
9143 入力 1 行あたり、@samp{cbs} バイト分を出力する。入力中の改行は
9144 スペースに置き換え、@samp{cbs} バイトに足りない分はスペースで
9145 埋める。
9146
9147 @item unblock
9148 @opindex unblock
9149 @samp{cbs} バイトの大きさからなる各入力ブロックに対して、末尾に
9150 スペースがあれば、それをすべて削除し、改行を追加する。
9151
9152 @samp{block} と @samp{unblock} は、どちらか一方しか指定できない。
9153
9154 @item lcase
9155 @opindex lcase@r{, converting to}
9156 大文字を小文字に変換する。
9157
9158 @item ucase
9159 @opindex ucase@r{, converting to}
9160 小文字を大文字に変換する。
9161
9162 @samp{lcase} と @samp{ucase} は、どちらか一方しか指定できない。
9163
9164 @item sparse
9165 @opindex sparse
9166 出力ブロックが NUL のみからなっているとき、それを書き出さず
9167 に、seek を試みる。穴空きファイル (sparse file) をサポート
9168 しているシステムでは、この動作は、出力ファイルを書き出して
9169 いるときに、穴空きの出力を作成することになる。このオプションを
9170 @samp{conv=notrunc} や @samp{oflag=append} と一緒に使う際は、気をつけ
9171 なければならない。@samp{conv=notrunc} が付いていると、入力中の NUL
9172 ブロックに対応する位置にある、出力ファイル中の存在するデータは、
9173 そのまま保持されることになる。@samp{oflag=append} を付けた場合は、
9174 seek は行っても効果がない。なお、@samp{conv=sparse} では、出力先が
9175 ファイルではなく、デバイスの場合も、入力中の NUL ブロックは
9176 やはりコピーされない。そんなわけで、このオプションが最も役に
9177 立つのは、仮想デバイスや、前もって 0 で初期化したデバイスに
9178 対してである。
9179
9180 @item swab
9181 @opindex swab @r{(byte-swapping)}
9182 @cindex byte-swapping
9183 入力された全バイトを 2 個づつ組にして、前後を入れ替える。GNU
9184 の @command{dd} は、他の @command{dd} とは違って、読み込むバイトが奇数個でも
9185 動作する。最後のバイトは (入れ替えるものがないので) そのまま
9186 コピーするのである。
9187
9188 @item sync
9189 @opindex sync @r{(padding with ASCII NULs)}
9190 すべての入力ブロックに対して @samp{ibs} の大きさになるまで、末尾を
9191 ゼロバイトで埋める。@samp{block} や @samp{unblock} と一緒に使用する
9192 と、ゼロバイトの代わりにスペースで埋める。
9193
9194 @end table
9195
9196 以下の @var{conversion} は、実のところファイルの扱いに関するフラグ
9197 なので、内的な処理には影響を及ぼさない。
9198
9199 @table @samp
9200 @item excl
9201 @opindex excl
9202 @cindex creating output file, requiring
9203 出力ファイルがすでに存在する場合は、実行に失敗する。
9204 言い換えれば、@command{dd} が出力ファイルを自分で作成しなければ
9205 ならないということである。
9206
9207 @item nocreat
9208 @opindex nocreat
9209 @cindex creating output file, avoiding
9210 出力ファイルを作成しない。言い換えれば、出力ファイルは前もって
9211 存在していなければならないということだ。
9212
9213 @samp{excl} と @samp{nocreat} は、どちらか一方しか指定できない。
9214
9215 @item notrunc
9216 @opindex notrunc
9217 @cindex truncating output file, avoiding
9218 出力ファイルに対して短縮操作をしない (訳注: @samp{of=@var{file}} の項を
9219 参照)。
9220
9221 @item noerror
9222 @opindex noerror
9223 @cindex read errors, ignoring
9224 読み込みエラーがあっても、作業を続行する。
9225
9226 @item fdatasync
9227 @opindex fdatasync
9228 @cindex synchronized data writes, before finishing
9229 コマンドを終了する直前に、出力データを同期させる。すなわち、
9230 出力データをディスクに実際に書き込む。
9231
9232 @item fsync
9233 @opindex fsync
9234 @cindex synchronized data and metadata writes, before finishing
9235 コマンドを終了する直前に、出力データだけでなく、メタデータも
9236 同期させる。すなわち、出力データとメタデータをディスクに
9237 実際に書き込む。
9238
9239 @end table
9240
9241 @item iflag=@var{flag}[,@var{flag}]@dots{}
9242 @opindex iflag
9243 引数 @var{flag} によって指定されたフラグを使って、入力ファイルに
9244 アクセスする。(コンマの前後にスペースを入れてはいけない。)
9245
9246 @item oflag=@var{flag}[,@var{flag}]@dots{}
9247 @opindex oflag
9248 引数 @var{flag} によって指定されたフラグを使って、出力ファイルに
9249 アクセスする。(コンマの前後にスペースを入れてはいけない。)
9250
9251 フラグには次のものがある。どのオペレーティング・システムでも、
9252 すべてのフラグが使えるわけではない。
9253
9254 @table @samp
9255
9256 @item append
9257 @opindex append
9258 @cindex appending to the output file
9259 追加モードで書き込む。従って、何か別のプロセスが問題の
9260 ファイルに書き出している場合でも、@command{dd} の書き込みは、
9261 書き込むたびに、そのファイルの今現在の内容に追加されること
9262 になる。このフラグは出力に対してしか意味がない。なお、この
9263 フラグを @samp{of=@var{file}} オペランドと組み合わせて使うのなら、
9264 @samp{conv=notrunc} も一緒に指定した方がよい。さもないと、出力
9265 ファイルは、追加書き込みが始まる前に、短縮操作を受けること
9266 になる。
9267
9268 @item cio
9269 @opindex cio
9270 @cindex concurrent I/O
9271 データに対してコンカレント I/O (CIO) モードを使用する。この
9272 モードでは、ダイレクト I/O を行いつつ、同じファイルに対する
9273 すべての I/O は順番に行わなければならないという POSIX の
9274 要件は無視する。一つのファイルを CIO モードと標準的な方法の
9275 両方で同時にオープンすることはできない。
9276
9277 @item direct
9278 @opindex direct
9279 @cindex direct I/O
9280 データに対してダイレクト I/O を使用し、バッファ・キャッシュを
9281 介さないようにする。カーネルが read バッファや write バッファ
9282 のサイズに制限をかけていることがあるのに注意していただきたい。
9283 たとえば、出力先のファイルシステムが ext4 で、カーネルが linux
9284 ベースの場合、出力バッファのサイズが 512 の倍数でなければ、
9285 @samp{oflag=direct} を指定すると、@code{EINVAL} で書き込みに失敗する。
9286
9287 @item directory
9288 @opindex directory
9289 @cindex directory I/O
9290
9291 ファイルがディレクトリでなければ、実行に失敗する。ほとんどの
9292 オペレーティング・システムがディレクトリに対する I/O を許して
9293 いない。従って、このフラグが役に立つ機会はめったにない。
9294
9295 @item dsync
9296 @opindex dsync
9297 @cindex synchronized data reads
9298 データに対して同期 I/O を使用する。出力ファイルについては、
9299 このフラグは、各書き込みごとに出力データをディスクに実際に
9300 書き込ませる。入力ファイルについてこのフラグが意味を持つかも
9301 しれないのは、読み込んでいるのがリモートのファイルであり、
9302 それが何か他のプロセスによって同期的に書き込まれているとき
9303 である。メタデータ (たとえば、最終アクセス日時や最終更新日時)
9304 は、必ずしも同期されない。
9305
9306 @item sync
9307 @opindex sync
9308 @cindex synchronized data and metadata I/O
9309 データとメタデータに対して同期された I/O を使用する。
9310
9311 @item nocache
9312 @opindex nocache
9313 @cindex discarding file cache
9314 ファイルのデータ・キャッシュを廃棄する。count=0 の場合は、
9315 キャッシュが全部捨てられる。それ以外の場合は、ファイルの
9316 キャッシュのうち、処理の対象になる部分だけが捨てられる。
9317 また、count=0 のとき、キャッシュの廃棄に失敗すると、その旨
9318 メッセージが表示され、終了ステータスに反映する。以下に、
9319 使用法の例をいくつか挙げておく。
9320
9321 @example
9322 # ファイル全体のキャッシュを捨てるように指示する。
9323 dd if=ifile iflag=nocache count=0
9324
9325 # ファイル全体のキャッシュを確実に捨てる。
9326 dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0
9327
9328 # ファイル中の一部分のキャッシュを捨てる。
9329 dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null
9330
9331 # read-ahead キャッシュのみを使って、データを転送する。
9332 dd if=ifile of=ofile iflag=nocache oflag=nocache
9333 @end example
9334
9335 @item nonblock
9336 @opindex nonblock
9337 @cindex nonblocking I/O
9338 ノンブロッキング I/O を使用する。
9339
9340 @item noatime
9341 @opindex noatime
9342 @cindex access time
9343 ファイルのアクセス日時を更新しない。古いシステムの中には、
9344 エラーや警告も出さずに、このフラグを無視するものがある。
9345 そこで、このフラグを使用する前に、有効かどうか、お手元の
9346 ファイルで試してみるとよい。
9347
9348 @item noctty
9349 @opindex noctty
9350 @cindex controlling terminal
9351 入力 (または、出力) ファイルを @command{dd} の制御端末にしない。この
9352 フラグは、そのファイルが端末でなければ、効果がない。この
9353 フラグが全く効果を持たないホストが、たくさんある (たとえば、
9354 GNU/Linux ホストがそうである)。
9355
9356 @item nofollow
9357 @opindex nofollow
9358 @cindex symbolic links, following
9359 シンボリックリンクをたどらない。
9360
9361 @item nolinks
9362 @opindex nolinks
9363 @cindex hard links
9364 ファイルに複数のハードリンクがあれば、実行に失敗する。
9365
9366 @item binary
9367 @opindex binary
9368 @cindex binary I/O
9369 バイナリ I/O を使用する。このフラグは、バイナリ I/O と
9370 テキスト I/O を区別する非標準的なプラットフォームでしか
9371 効果がない。
9372
9373 @item text
9374 @opindex text
9375 @cindex text I/O
9376 テキスト I/O を使用する。このフラグが標準的なプラットフォーム
9377 で効果がないのは、@samp{binary} と同様である。
9378
9379 @item fullblock
9380 @opindex fullblock
9381 各ブロックが一杯になるまで入力から読み込む。@code{read} システム
9382 コールは、入力がブロックの分量に足りない場合、早めに戻って
9383 くることがある。そうした場合に、@code{read} の呼び出しを繰り返
9384 して、ブロックの残りを埋めようとする。このフラグは、@code{iflag}
9385 でのみ使える。このフラグが役に立つのは、たとえばパイプと組み
9386 合わせて使うときである。パイプとの組み合わせでは、入力からの
9387 読み込みがブロックの大きさに足りないことがあるからだ。そうした
9388 場合に、@samp{count=} の引数が、読み込み動作の回数ではなく、読み
9389 込むブロック数だと間違いなく解釈されるようにするには、この
9390 フラグが必要になる。
9391
9392 @item count_bytes
9393 @opindex count_bytes
9394 @samp{count=} オペランドをブロック数ではなく、バイト数の指定と
9395 見なす。そうすることで、I/O ブロックサイズの倍数ではない
9396 長さが、指定できるようになるわけだ。このフラグは @code{iflag}
9397 でしか使用できない。
9398
9399 @item skip_bytes
9400 @opindex skip_bytes
9401 @samp{skip=} オペランドをブロック数ではなく、バイト数の指定と
9402 見なす。そうすることで、I/O ブロックサイズの倍数ではない
9403 オフセットが、指定できるようになるわけだ。このフラグは
9404 @code{iflag} でしか使用できない。
9405
9406 @item seek_bytes
9407 @opindex seek_bytes
9408 @samp{seek=} オペランドをブロック数ではなく、バイト数の指定と
9409 見なす。そうすることで、I/O ブロックサイズの倍数ではない
9410 オフセットが、指摘できるようになるわけだ。このフラグは
9411 @code{oflag} でしか使用できない。
9412
9413 @end table
9414
9415 以上のフラグは、すべてのシステムでサポートされているわけではなく、
9416 サポートされていないシステムで使用しようとすると、@samp{dd} に拒否
9417 される。標準入力から読み込んでいる場合や、標準出力に書き出して
9418 いる場合は、@samp{nofollow} や @samp{noctty} フラグは指定するべきではない。
9419 また、他のフラグ (たとえば @samp{nonblock}) は、対象となるファイルの
9420 ファイル・ディスクリプタに対する他のプロセスの動作に、@command{dd} が
9421 終了した後までも、影響を及ぼすかもしれない。
9422
9423 @end table
9424
9425 @cindex multipliers after numbers
9426 上記中の数値を表す文字列  (@var{n} や @var{bytes}) には、乗数を示す文字を後ろに
9427 付けることができる。すなわち、@samp{b}=512, @samp{c}=1, @samp{w}=2, @samp{x@var{m}}=@var{m}
9428 といった
9429 文字である (訳注: 最後のものは、10xM という表記は 10M と書くのと同じだ
9430 ということ)。あるいは、@samp{k}=1024 のような、ブロックサイズに付ける標準の
9431 接尾辞の一つを続けてもよい (@pxref{Block size})。
9432
9433 @samp{bs=}, @samp{ibs=}, @samp{obs=}, "@samp{cbs=} を使って指定するブロックサイズは、
9434 大きすぎない方がよい。数メガバイトを越える値は、一般的に言って無駄だし、
9435 (ギガバイト @dots{} エクサバイトを使ったときのように) 全く逆効果だったり、
9436 エラーの元になったりする。
9437
9438 データのオフセット位置やサイズが I/O ブロックサイズの倍数ではない
9439 場合に、そうしたデータを処理するには、@samp{skip_bytes}, @samp{seek_bytes},
9440 @samp{count_bytes} といったフラグを使用すればよい。あるいは、@command{dd} を別々に
9441 呼び出すという伝統的な手法を使用することもできる。一例を挙げると、
9442 以下のシェルコマンドは、1 ブロック を 512 KiB にして、ディスクと
9443 テープの間でデータをコピーしている。ただし、ディスクの先頭にある
9444 4 KiB のラベルについては、保存も復元も行っていない。
9445
9446 @example
9447 disk=/dev/rdsk/c0t1d0s2
9448 tape=/dev/rmt/0
9449
9450 # ラベル以外のすべてをディスクからテープへコピーする。
9451 (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
9452
9453 # テープからディスクへ書き戻す。ただし、ディスクのラベルには手を
9454 # 付けない。
9455 (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
9456 @end example
9457
9458 実行中の @command{dd} のプロセスに @samp{INFO} シグナルを送ると、@command{dd} は入出力の
9459 統計情報を標準エラーに書き出してから、コピー作業を続行する。以下の
9460 例では、@command{dd} がバックグラウンドで動作し、1 千万ブロックのコピーを行って
9461 いる。@command{kill} コマンドが実行されると、@command{dd} は実行途中の入出力統計を
9462 表示する。そして、正常に作業を完了するか、@code{SIGINT} シグナルによって
9463 中断されたとき、最終的な統計情報を出力する。
9464
9465 @example
9466 $ dd if=/dev/zero of=/dev/null count=10MB & pid=$!
9467 $ kill -s INFO $pid; wait $pid
9468 3385223+0 records in
9469 3385223+0 records out
9470 1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
9471 10000000+0 records in
9472 10000000+0 records out
9473 5120000000 bytes (5.1 GB) copied, 18.913 seconds, 271 MB/s
9474 @end example
9475
9476 @vindex POSIXLY_CORRECT
9477 @samp{INFO} シグナルが存在しないシステムでは、 環境変数 @env{POSIXLY_CORRECT}
9478 が設定されていないかぎり、@command{dd} は @samp{INFO} の代わりに @samp{USR1} に反応する。
9479
9480 @exitstatus
9481
9482
9483 @node install invocation
9484 @section @command{install}: ファイルをコピーし属性をセットする
9485
9486 @pindex install
9487 @cindex copying files and setting attributes
9488
9489 @command{install} はファイルをコピーするとき、ファイルのモードビット
9490 (訳注: 一般にアクセス権とか、許可属性と言われるもの) をセットし、可能ならば、
9491 所有者やグループも設定する。
9492 @sp 1
9493 書式:
9494
9495 @example
9496 install [@var{option}]@dots{} [-T] @var{source} @var{dest}
9497 install [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9498 install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9499 install [@var{option}]@dots{} -d @var{directory}@dots{}
9500 @end example
9501
9502 @itemize @bullet
9503 @item
9504 ファイル名を二つ指定すると、@command{install} は最初のファイルを 2 番目の
9505 ファイルにコピーする。
9506
9507 @item
9508 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
9509 それを指定しないでも、最後のファイルがディレクトリであり、しかも
9510 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
9511 @command{install} は各 @var{source} ファイルを指定されたディレクトリに、@var{source}
9512 の名前でコピーする。
9513
9514 @item
9515 @option{--directory} (@option{-d}) を指定すると、@command{install} は各
9516 @var{directory} を
9517 作成する。このとき、親ディレクトリが存在しなければ、それも
9518 作成する。作成される親ディレクトリのモードは、@option{-m} オプションの
9519 指定や現在の umask にかかわりなく、@samp{u=rwx,go=rx} (755) になる。
9520 親ディレクトリの set-user-ID ビットや set-group-ID ビットの継承に
9521 ついては、次の節を参照していただきたい。@xref{Directory Setuid and Setgid}.
9522 @end itemize
9523
9524 @cindex Makefiles, installing programs in
9525 @command{install} は @command{cp} に似ているが、コピー先ファイルの属性を自由に
9526 設定できる点が違う。@command{install} は通常、Makefile の中で、プログラムを
9527 目標のディレクトリにコピーするために使用される。@command{install} では、ファイル
9528 をそれ自身にコピーすることはできない。
9529
9530 @cindex extended attributes, xattr
9531 @command{install} が拡張属性 (xattr) を保存することはない。
9532
9533 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9534
9535 @table @samp
9536
9537 @optBackup
9538
9539 @item -C
9540 @itemx --compare
9541 @opindex -C
9542 @opindex --compare
9543 インストール元とインストール先の対応するファイルを比較し、
9544 インストール先にあるファイルがインストール元と同じ内容を持ち、
9545 しかも、所有者、グループ、許可属性、場合によっては SELinux
9546 コンテキストについて、そのどれもが指定されているものと同一で
9547 あるときは、インストール先ファイルを全く変更しない。このオプ
9548 ションは、@option{--user}, @option{--group}, @option{--mode} オプションと組み合わせて
9549 使うのが、最善である。そうしたオプションと組み合わせて使えば、
9550 @command{install} コマンドが、(たとえば、ディレクトリに setgid が付いて
9551 いるか否かや、POSIX のデフォルトの ACL を顧慮しないせいで)、
9552 インストールされるファイルがデフォルトで持つはずの属性を不正確に
9553 決めてしまうのを避けることができる。そういうことがあると、
9554 無駄なコピーが行われたり、属性が正しいデフォルト値に設定し直され
9555 なかったりといった不都合が生じかねないのだ。
9556
9557 @item -c
9558 @opindex -c
9559 無視する。Unix の古いバージョンの  @command{install} との互換性のために
9560 ある。
9561
9562 @item -D
9563 @opindex -D
9564 @var{dest} の指定中に存在していない親ディレクトリがあれば、それを作成
9565 してから、@var{source} を @var{dest} にコピーする。インストール先ディレクトリ
9566 が @option{--target-directory=DIR} によって指定されている場合は、この
9567 オプションは無視される。
9568
9569 @item -d
9570 @itemx --directory
9571 @opindex -d
9572 @opindex --directory
9573 @cindex directories, creating with given attributes
9574 @cindex parent directories, creating missing
9575 @cindex leading directories, creating missing
9576 まず、存在していない親ディレクトリがあれば作成し、それにデフォルトの
9577 属性を与える。それから、指定された各ディレクトリを作成し、所有者、
9578 グループ、許可属性を、コマンドラインで指定されたとおりに、または
9579 デフォルトの値に設定する。
9580
9581 @item -g @var{group}
9582 @itemx --group=@var{group}
9583 @opindex -g
9584 @opindex --group
9585 @cindex group ownership of installed files, setting
9586 インストールするファイルやディレクトリの所有グループを @var{group} に
9587 設定する。デフォルトは、プロセスの現在のグループである。@var{group} は、
9588 グループ名でも、グループの ID 番号でもよい。
9589
9590 @item -m @var{mode}
9591 @itemx --mode=@var{mode}
9592 @opindex -m
9593 @opindex --mode
9594 @cindex permissions of installed files, setting
9595 インストールするファイルやディレクトリのモードビットを @var{mode} に
9596 設定する。@var{mode} の指定は、@samp{a=} (誰にもアクセスを許さない) を
9597 基点として行い、8 進数でも、@command{chmod} で使うようなシンボリック
9598 モードでもよい (@pxref{File permissions})。デフォルトのモードは、
9599 @samp{u=rwx,go=rx,a-s} である。すなわち、所有者には読み、書き、実行を
9600 許可し、グループとその他のユーザには読みと実行のみを許可、
9601 set-user-ID と set-group-ID は無効にする。このデフォルトは、@samp{755}
9602 と全く同じではない。なぜなら、デフォルトの方は、ディレクトリに
9603 ついて set-user-ID や set-group-ID を引き継がず、無効にしている
9604 からである。 @xref{Directory Setuid and Setgid}. 
9605
9606 @item -o @var{owner}
9607 @itemx --owner=@var{owner}
9608 @opindex -o
9609 @opindex --owner
9610 @cindex ownership of installed files, setting
9611 @cindex appropriate privileges
9612 @vindex root @r{as default owner}
9613 @command{install} が適切な権限を持っている場合に (つまり、root 権限で
9614 実行されている場合に)、インストールするファイルやディレクトリの
9615 所有者を @var{owner} に設定する。デフォルトは @code{root} である。@var{owner} の
9616 指定は、ユーザ名でも、ユーザの ID 番号でもよい。
9617
9618 @item --preserve-context
9619 @opindex --preserve-context
9620 @cindex SELinux
9621 @cindex security context
9622 ファイルやディレクトリの SElinux セキュリティ・コンテキストを引き
9623 継ぐ。ファイルやディレクトリすべてのセキュリティ・コンテキストを
9624 引き継げなかった場合は、終了ステータスが 1 になる。SElinux が
9625 無効になっているときは、警告を出し、このオプションを無視する。
9626
9627 @item -p
9628 @itemx --preserve-timestamps
9629 @opindex -p
9630 @opindex --preserve-timestamps
9631 @cindex timestamps of installed files, preserving
9632 インストール先各ファイルの最終アクセス日時 (last access time) と
9633 最終更新日時 (last modification time) を、対応するインストール元
9634 各ファイルのそれぞれの日時に合わせる。このオプションを付けずに
9635 インストールした場合、各ファイルの最終アクセス日時と最終更新日時は、
9636 両方ともインストールした日時になる。インストール先ファイルの最終
9637 更新日時を、最後にインストールした日付ではなく、最後にビルドした
9638 日付の記録として使用したい場合、このオプションは便利である。
9639
9640 @item -s
9641 @itemx --strip
9642 @opindex -s
9643 @opindex --strip
9644 @cindex symbol table information, stripping
9645 @cindex stripping symbol table information
9646 インストールされるバイナリの実行ファイルからシンボル・テーブルを
9647 取り除く。
9648
9649 @item --strip-program=@var{program}
9650 @opindex --strip-program
9651 @cindex symbol table information, stripping, program
9652 バイナリからシンボル・テーブルを取り除くために使用するプログラムを
9653 指定する。
9654
9655 @optBackupSuffix
9656
9657 @optTargetDirectory
9658
9659 @optNoTargetDirectory
9660
9661 @item -v
9662 @itemx --verbose
9663 @opindex -v
9664 @opindex --verbose
9665 コピーを行う前に、コピーするファイル名を表示する。
9666
9667 @optContext このオプションと @option{--preserve-context}
9668 オプションは、どちらか一方しか指定できない。
9669 (@var{context} を省略できるのは、coreutils-8.22 から)
9670
9671
9672 @end table
9673
9674 @exitstatus
9675
9676
9677 @node mv invocation
9678 @section @command{mv}: ファイルの移動 (名前の変更) を行う
9679
9680 @pindex mv
9681
9682 @command{mv} は、ファイル (やディレクトリ) の移動、または名前の変更を行う。
9683 @sp 1
9684 書式:
9685
9686 @example
9687 mv [@var{option}]@dots{} [-T] @var{source} @var{dest}
9688 mv [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9689 mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9690 @end example
9691
9692 @itemize @bullet
9693 @item
9694 ファイル名を二つ指定すると、@command{mv} は最初のファイルを 2 番目の
9695 ファイルに移動する。
9696
9697 @item
9698 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
9699 それを指定しないでも、最後のファイルがディレクトリであり、しかも
9700 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
9701 @command{mv} は各 @var{source} ファイルを指定されたディレクトリに、@var{source} の
9702 名前で移動する。
9703 @end itemize
9704
9705 @command{mv} はいかなるタイプのファイルでも、一つのファイルシステムから
9706 別のファイルシステムへ移動させることができる。fileutils パッケージの
9707 バージョン @code{4.0} 以前では、@command{mv} がファイルシステム間を移動させる
9708 ことができたのは、通常ファイルだけだった。それに対して、現在の @command{mv}
9709 では、たとえば、スペシャル・デバイスファイルを含むディレクトリ階層の
9710 全体を、あるパーティションから別のパーティションへ移動させることが
9711 可能になっている。@command{mv} は、まず @code{cp -a} が使用するのと同じコードを
9712 使って、指定されたディレクトリやファイルをコピーし、その後で (コピーに
9713 成功した場合は) コピー元を削除する。コピーに失敗した場合は、移動先の
9714 パーティションにすでにコピーした部分を消去することになる。仮に、ある
9715 パーティションから別のパーティションに、3 個のディレクトリをコピー
9716 しようとして、最初のディレクトリのコピーには成功したものの、2 番目の
9717 ディレクトリのコピーに失敗したとしよう。その場合、最初のディレクトリ
9718 は、移動先のパーティションに残るが、2 番目と 3 番目のディレクトリは、
9719 元のパーティションに残ることになる。
9720
9721 @cindex extended attributes, xattr
9722 @command{mv} は拡張属性 (xattr) を常にコピーしようとする。この拡張属性は、
9723 SELinux コンテキストや ACL、ケーパビリティであってもよい。拡張属性の
9724 コピーに失敗したときは、@samp{Operation not supported} 以外のすべての
9725 警告が出力される。
9726
9727 @cindex prompting, and @command{mv}
9728 移動先ファイルがすでに存在し、それが普通なら書き込みのできないもの
9729 である場合、標準入力が端末であり、@option{-f} や @option{--force} オプションが指定
9730 されていなければ、@command{mv} はプロンプトを出して、ファイルを置き換えるか
9731 どうか、ユーザに問い合わせる (ファイルの書き込み権限がなくても、自分
9732 がそのファイルの所有者であったり、そのディレクトリの書き込み権限を
9733 持っていたりすることは、ありえることである)。答えが肯定でなければ、
9734 そのファイルはスキップされる。
9735
9736 警告: 名前変更の対象 (または、移動元) がディレクトリへのシンボリック
9737 リンクかもしれないときは、その名前を指定する際に、末尾にスラッシュを
9738 付けてはいけない。さもないと、@command{mv} の動作は内部で使っている rename
9739 システムコール次第なので、全く予想外のことが起きるかもしれないのだ。
9740 Linux ベースの最近のカーネルを使っているシステムでは、@code{errno=ENOTDIR}
9741 で実行に失敗する。しかし、他のシステムでは (少なくとも、FreeBSD 6.1
9742 や Solaris 10 では)、シンボリックリンクではなく、リンクが参照している
9743 ディレクトリの名前の方を、警告なしで変更するのである。 @xref{Trailing slashes}.
9744
9745 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9746
9747 @table @samp
9748
9749 @optBackup
9750
9751 @item -f
9752 @itemx --force
9753 @opindex -f
9754 @opindex --force
9755 @cindex prompts, omitting
9756 移動先のファイルを消去する前に、プロンプトを出してユーザに問い合わ
9757 せることをしない。
9758 @macro mvOptsIfn
9759 @option{-i}, @option{-f}, @option{-n} オプションを
9760 同時に指定している
9761 場合は、最後に指定したもののみが
9762 効果を持つ。
9763 @end macro
9764 @mvOptsIfn
9765
9766 @item -i
9767 @itemx --interactive
9768 @opindex -i
9769 @opindex --interactive
9770 @cindex prompts, forcing
9771 ファイルの許可属性に関係なく、存在する各移動先ファイルを上書き
9772 するかどうかを、プロンプトを出してユーザに問い合わせる。答えが
9773 肯定でなければ、そのファイルをスキップする。@mvOptsIfn
9774
9775 @item -n
9776 @itemx --no-clobber
9777 @opindex -n
9778 @opindex --no-clobber
9779 @cindex prompts, omitting
9780 存在するファイルを上書きしない。@mvOptsIfn
9781 このオプションは、@option{-b} や @option{--backup} オプションと一緒には使えない。
9782
9783 @item -u
9784 @itemx --update
9785 @opindex -u
9786 @opindex --update
9787 @cindex newer files, moving only
9788 ディレクトリ以外のものを移動する際、それが移動先にも存在し、
9789 しかもその更新日時 (modification time) が移動元と同じか、より
9790 新しい場合には、移動を行わない。移動が別のファイルシステムに
9791 向かって行われる場合、タイムスタンプの比較は、移動元のタイム
9792 スタンプを移動先のファイルシステム、及びタイムスタンプの更新に
9793 使われるシステムコールの精度に落とした上で行われる。これは、
9794 同じ移動元と移動先に対して、@samp{mv -u} コマンドが何回か実行される
9795 場合に、コピー作業が繰り返されるのを避けるためである。
9796
9797 @item -v
9798 @itemx --verbose
9799 @opindex -v
9800 @opindex --verbose
9801 移動する前に各ファイルの名前を表示する。
9802
9803 @optStripTrailingSlashes
9804
9805 @optBackupSuffix
9806
9807 @optTargetDirectory
9808
9809 @optNoTargetDirectory
9810
9811 @item -Z
9812 @itemx --context
9813 @opindex -Z
9814 @opindex --context
9815 @cindex SELinux, restoring security context
9816 @cindex security context
9817 このオプションは @command{restorecon} と同様の働きをする。すなわち、
9818 移動先ファイルの SELinux セキュリティ・コンテキストを、移動先に
9819 おけるシステムのデフォルトのタイプによって調整する。(coreutils-8.22
9820 の新機能)
9821
9822 @end table
9823
9824 @exitstatus
9825
9826
9827 @node rm invocation
9828 @section @command{rm}: ファイルやディレクトリを削除する
9829
9830 @pindex rm
9831 @cindex removing files or directories
9832
9833 @command{rm} は、指定された各ファイルを削除する。デフォルトでは、ディレクトリ
9834 の削除は行わない。
9835 @sp 1
9836 書式:
9837
9838 @example
9839 rm [@var{option}]@dots{} [@var{file}]@dots{}
9840 @end example
9841
9842 @cindex prompting, and @command{rm}
9843 @option{-I} または @option{--interactive=once} オプションが指定されている場合に、
9844 削除するファイルが 4 個以上あるか、あるいは @option{-r}, @option{-R}, @option{--recursive}
9845 などのオプションが指定されていると、@command{rm} はプロンプトを出して、作業を
9846 最後まで行うかどうか、ユーザに問い合わせる。答えが肯定でなければ、
9847 コマンド全体が中止になる。
9848
9849 それ以外の場合でも、削除するファイルが書き込み不可で、標準入力が
9850 端末、しかも @option{--force} (@option{-f}) オプションが指定されていない場合や、@option{-i}
9851 または @option{--interactive=always} オプションが指定されている場合には、@command{rm}
9852 はプロンプトを出して、そのファイルを削除するかどうか、ユーザに問い合わ
9853 せる。答えが肯定でなければ、そのファイルをスキップする。
9854
9855 ファイル名の最後の構成要素 (訳注: ファイル名 (いわゆるパス名) の
9856 最後の / より後ろの部分) が @file{.} や @file{..} であるファイルを削除しようと
9857 しても、@command{rm} はそれを実行せず、ユーザに問い合わせることもない。これは
9858 POSIX が要求している動作である。
9859
9860 警告: @command{rm} を使って、ファイルを削除しても、たいていの場合、その
9861 ファイルの内容を復元することが可能である。ファイルの内容が間違いなく
9862 復元不可能であるとの、より一層の保証が欲しいのなら、@command{shred} コマンドの
9863 使用をお考えになるとよい。
9864
9865 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9866
9867 @table @samp
9868
9869 @item -d
9870 @itemx --dir
9871 @opindex -d
9872 @opindex --dir
9873 @cindex directories, removing
9874 指定されたディレクトリが空ならば、それを削除する。
9875
9876 @item -f
9877 @itemx --force
9878 @opindex -f
9879 @opindex --force
9880 指定したファイルが存在しなかったり、ユーザが削除の対象を一つも
9881 指定しなかったりしても、問題にしない (訳注: 言い換えれば、エラー
9882 にならない)。また、ユーザに対する問い合わせも全く行わない。
9883 @option{--interactive} (@option{-i}) オプションが前にあっても、それを無視する。
9884
9885 @item -i
9886 @opindex -i
9887 プロンプトを出して、各ファイルを削除するかどうか、ユーザに問い
9888 合わせる。答えが肯定でなければ、そのファイルをスキップする。
9889 @option{--force} (@option{-f}) オプションが前にあっても、それを無視する。
9890
9891 @item -I
9892 @opindex -I
9893 4 個以上のファイルが指定された場合や、再帰的な削除が要求された
9894 場合に、プロンプトを出して、コマンドを続行するかどうか、ユーザに
9895 一度だけ尋ねる。@option{--force} (@option{-f}) オプションが前にあっても、それを
9896 無視する。@option{--interactive=once} と同じである。
9897
9898 @item --interactive [=@var{when}]
9899 @opindex --interactive
9900 問い合わせのプロンプトをいつ出すかを指定する。@var{when} には以下の一つを
9901 指定できるが、なくてもよい。
9902 @itemize @bullet
9903 @item never
9904 @vindex never @r{interactive option}
9905 - 問い合わせを全くしない。
9906 @item once
9907 @vindex once @r{interactive option}
9908 - 4 個以上のファイルが指定された場合や、再帰的な削除が
9909 要求された場合に、一度だけ問い合わせをする。@option{-I} と同じ。
9910 @item always
9911 @vindex always @r{interactive option}
9912 - 削除されるすべてのファイルに対して問い合わせをする。
9913 @option{-i} と同じ。
9914 @end itemize
9915 @option{--interactive} に @var{when} を指定しないのは、@option{--interactive=always} と
9916 同じである。
9917
9918 @item --one-file-system
9919 @opindex --one-file-system
9920 @cindex one file system, restricting @command{rm} to
9921 ディレクトリ階層を再帰的に削除する際に、コマンドラインで引数として
9922 指定したディレクトリが存在するファイルシステムとは別のファイル
9923 システム上にある、いかなるディレクトリも削除しない。
9924
9925 @cindex bind mount
9926 このオプションが役に立つのは、ビルド用の ``chroot'' ディレクトリ
9927 階層を削除する場合である。通常、そうしたディレクトリ階層に重要な
9928 データは含まれていない。しかしながら、普段使っているスタートアップ・
9929 ファイルを利用しやすくするために、そうしたディレクトリ階層に
9930 @file{/home} を bind-mount するのは、珍しいことではない。問題は、@file{/home}
9931 のアンマウントを忘れやすいことである。アンマウントをやり忘れたまま、
9932 @command{rm -rf} を使って、通常使い捨てにする chroot 環境を削除しようと
9933 すると、@file{/home} 以下にあるすべてまで削除してしまうことになる。
9934 @option{--one-file-system} オプションを使えば、@command{rm} は警告を出した上で、
9935 他のファイルシステムにあるディレクトリをスキップしてくれる。
9936 当然ながら、@file{/home} と chroot 環境が同じファイルシステムにある
9937 場合は、このオプションを使っても、@file{/home} が助かるわけではない。
9938
9939 @item --preserve-root
9940 @opindex --preserve-root
9941 @cindex root directory, disallow recursive destruction
9942 @option{--recursive} オプションと一緒に使った場合、ルートディレクトリ
9943 (@file{/}) を削除しようとすると、エラーになる。これがデフォルトの
9944 動作である。 @xref{Treating / specially}.
9945 @sp 1
9946 (訳注: 確かに @option{--preserve-root} が有効になっていれば、@code{rm -rf /}
9947 とした場合に、ルートディレクトリを保護することになる。だが、
9948 @code{rm -rf /*} とした場合には、あまり役に立たない。なぜなら、@file{/*} は、
9949 @file{/bin}, @file{/usr}, @file{/home} などに展開されるが、そうしたディレクトリの
9950 消去は、@option{--preserve-root} によっては止められないからである。)
9951
9952 @item --no-preserve-root
9953 @opindex --no-preserve-root
9954 @cindex root directory, allow recursive destruction
9955 再帰的に削除を行う際、@file{/} を特別扱いしない。コンピュータ上にある
9956 すべてのファイルを本当に削除したい場合以外、このオプションの使用は
9957 お勧めできない。 @xref{Treating / specially}.
9958
9959 @item -r
9960 @itemx -R
9961 @itemx --recursive
9962 @opindex -r
9963 @opindex -R
9964 @opindex --recursive
9965 @cindex directories, removing (recursively)
9966 コマンドラインにリストされたディレクトリとその中身を再帰的に削除する。
9967
9968 @item -v
9969 @itemx --verbose
9970 @opindex -v
9971 @opindex --verbose
9972 削除を行う前に、各ファイルの名前を表示する。
9973
9974 @end table
9975
9976 @cindex files beginning with @samp{-}, removing
9977 @cindex @samp{-}, removing files beginning with
9978 よくある質問の一つに、名前が @samp{-} で始まるファイルを削除するには、
9979 どうしたらよいか、というものがある。GNU の @command{rm} では、@code{getopt} を
9980 使用して引数の解析を行っているあらゆるプログラムと同様、@samp{--} オプション
9981 を使って、以下の引数はすべてオプションではない、と示すことが可能に
9982 なっている。カレントディレクトリにある @file{-f} というファイルを削除する
9983 には、次のどちらかをタイプすればよい。
9984
9985 @example
9986 rm -- -f
9987 @end example
9988
9989 @noindent
9990 あるいは、
9991
9992 @example
9993 rm ./-f
9994 @end example
9995
9996 @opindex - @r{and Unix @command{rm}}
9997 Unix の @command{rm} プログラムが、この用途に @samp{-} を 1 個だけ使っていたのは、
9998 getopt の標準シンタックスが開発される以前のことである。
9999
10000 @exitstatus
10001
10002
10003 @node shred invocation
10004 @section @command{shred}: セキュリティを向上させたファイルの削除
10005
10006 @pindex shred
10007 @cindex data, erasing
10008 @cindex erasing data
10009
10010 @command{shred} はデバイスやファイルを上書きして、非常に高価な装置を使用
10011 しても、データの復元ができないようにする。
10012
10013 通常、ファイルを削除しても (@pxref{rm invocation})、データが実際に
10014 消去されるわけではない。単に、ファイルが格納されている場所をリストした
10015 インデックスが破棄されるだけであり、そうすることで、そのデータの
10016 格納場所が再利用可能になるのである。世の中には、インデックスの再構築を
10017 試みる復元ソフト (undelete utilities) というものが存在する。そうした
10018 ものは、ファイルの存在したスペースが再利用されていなければ、ファイルを
10019 復元することができるのだ。
10020
10021 頻繁に使われているシステムで、ディスクがほとんど一杯になっている
10022 場合、スペースは数秒のうちに再利用されるかもしれない。だが、それを
10023 確実に知る方法は全くない。また、他人に見られては困るデータがあった
10024 ところで、見られても構わないデータでそのファイルを上書きしてしまえ
10025 ば、復元は絶対不可能だと考えたいかもしれない。
10026
10027 しかしながら、そういうことをした後でも、ディスクを研究所に持ち
10028 込んで、高感度の (そして高価な) 装置を山ほど使用すれば、上書きされた
10029 データの下にある元のデータのかすかな「痕跡 (echoes)」を検出することが
10030 可能なのだ。もし、データがたった一回しか上書きされていなかったら、
10031 それはさほど難しいことでもない。
10032
10033 データを復元できないように消去する最善の方法は、それが載っている
10034 メディアを酸で破壊するとか、熱で溶かすとかすることである。フロッピー
10035 ディスクのような廉価なリムーバブル・メディアの場合、それがよく使わ
10036 れる方法だ。だが、ハードディスクは高価だし、熱で溶かすのも難しい。
10037 そこで、@command{shred} ユーティリティは、物質的な破壊以外の方法で、同様の
10038 効果を実現しようとするのである。
10039
10040 そのためには、元のデータに与える損傷を最大にするように選ばれた
10041 データパターンで繰り返し上書きするという方法が採られる。この方法は、
10042 フロッピーディスクにも効果があるものの、パターンはハードディスクで
10043 最も効果を上げるように工夫されたものだ。詳細については、ソースコード
10044 や、第 6 回 USENIX セキュリティ・シンポジウム (San Jose, California,
10045 July 22--25, 1996) の議事録にある Peter Gutmann の次の論文をご覧に
10046 なっていただきたい。@*
10047 @uref{http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html,
10048 @cite{Secure Deletion of Data from Magnetic and Solid-State Memory}}
10049
10050 ここで心に銘記してしていただきたいのは、@command{shred} には非常に重要な
10051 前提があるということである。すなわち、ファイルシステムはデータを、
10052 それが存在する場所で上書きするものでなければならない。それは、こうした
10053 操作を行うときの伝統的な方法であるが、最近のファイルシステムの設計には、
10054 この前提を満たさないものが多い。そうした例外には、次のようなものがある。
10055
10056 @itemize @bullet
10057
10058 @item
10059 ログ構造化 (log-structured) ファイルシステムや、ジャーナル化
10060 (journaled) ファイルシステム。たとえば、ATX や Solaris で
10061 提供されているもの。JFS, ReiserFS, XFS, Ext3 (@code{data=journal}
10062 モードの場合), BFS, NTFS などが、「データ」のジャーナリングを
10063 するように設定されている場合もこれに当たる。
10064
10065 @item
10066 データを冗長化して書き込んだり、一部の書き込みに失敗することが
10067 あっても、動作し続けるファイルシステム。たとえば、RAID ベースの
10068 ファイルシステム。
10069
10070 @item
10071 Network Appliance の NFS サーバのように、スナップショットを作成する
10072 ファイルシステム。
10073
10074 @item
10075 NFS バージョン 3 のクライアントのように、一時領域にキャッシュを作る
10076 ファイルシステム。
10077
10078 @item
10079 圧縮ファイルシステム。
10080 @end itemize
10081
10082 特に ext3 ファイルシステムについて言うと、上記の例外に当てはまるのは
10083 (その結果、@command{shred} が限定された効果しか持たないのは)、@code{data=journal}
10084 モードの場合だけである。これは、メタデータだけでなく、ファイルデータも
10085 ジャーナリングするモードだ。@code{data=ordered} (デフォルト) と
10086 @code{data=writeback} の両モードでは、@command{shred} は通常どおり役に立つ。ext3 の
10087 ジャーナリング・モードを変更するには、mount のマニュアルに書いてある
10088 ように (man mount)、@file{/etc/fstab} ファイルで問題のファイルシステムの
10089 マウントオプションに @code{data=something} オプションを追加すればよい。
10090
10091 ファイルシステムがどういう動作をしているか、よくわからない場合は、
10092 データをそれが存在する場所で上書きしていないと考えておいた方がよい。
10093 すなわち、そのファイルシステムでは、通常ファイルに対する @command{shred} の
10094 動作は、信頼できないということである。
10095
10096 一般的に言って、@command{shred} は、ファイルよりデバイスに対して使った方が
10097 信頼できる。そうすれば、上に述べたファイルシステムの設計の問題を回避
10098 できるからだ。しかしながら、@command{shred} のデバイスに対する使用も、必ずしも
10099 全面的に信頼できるわけではない。たとえば、ほとんどのディスクが、バッド
10100 セクターを使用に割り当てる領域から外して、アプリケーションから見えない
10101 ようにしている。そこで、バッドセクターに他人に見られたくないデータが
10102 ある場合、@command{shred} はそれを破壊できないことになる。
10103
10104 @command{shred} は、バックアップに対して何の対処も行おうとしないが、バッド
10105 セクターの問題についても全く同様で、検知しようともしないし、通知しよう
10106 ともしない。それでも、@command{shred} はファイルに対して行うより、デバイスに
10107 対して行う方が信頼できるので、デフォルトでは、出力ファイルをサイズ 0 に
10108 短縮したり、削除したりしないようになっている。このデフォルトは、ファイル
10109 よりデバイスに適した動作だ。デバイスは一般に短縮できないし、削除するべき
10110 でもないからである。
10111
10112 最後になったが、バックアップやミラーの持つリスクも考慮した方がよい。
10113 削除することのできないファイルのコピーが、ファイルシステムのバックアップ
10114 やリモートのミラーに残っていることもありえる。そして、そうしたものが
10115 残っていれば、@command{shred} で破壊したファイルを後日復元することが可能に
10116 なるのだ。だから、後で @command{shred} を使って抹消したくなるようなデータが
10117 ある場合には、そのバックアップやミラーがないことを確認すべきなのである。
10118
10119 @example
10120 shred [@var{option}]@dots{} @var{file}[@dots{}]
10121 @end example
10122
10123 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10124
10125 @table @samp
10126
10127 @item -f
10128 @itemx --force
10129 @opindex -f
10130 @opindex --force
10131 @cindex force deletion
10132 必要ならば、ファイルの許可属性を無視して、上書きできるようにする。
10133
10134 @item -@var{number}
10135 @itemx -n @var{number}
10136 @itemx --iterations=@var{number}
10137 @opindex -n @var{number}
10138 @opindex --iterations=@var{number}
10139 @cindex iterations, selecting the number of
10140 デフォルトで @command{shred} は、上書きを @value{SHRED_DEFAULT_PASSES} 回する。時間を節約するために、
10141 回数を減らすこともできるし、その方がよいと思えば、回数を増やすことも
10142 できる。25 回上書きすると、プログラムが内部に持っている上書き用の
10143 パターンのすべてが、少なくとも一回は使われたことになる。
10144
10145 @item --random-source=@var{file}
10146 @opindex --random-source
10147 @cindex random source for shredding
10148 上書きに使用するランダムデータのソースとして @var{file} を使用する。
10149 また、このランダムデータは、上書きパターンの順番を決めるのにも
10150 使用される。
10151
10152 @item -s @var{bytes}
10153 @itemx --size=@var{bytes}
10154 @opindex -s @var{bytes}
10155 @opindex --size=@var{bytes}
10156 @cindex size of file to shred
10157 ファイルの最初の @var{bytes} バイトを shred 処理する。デフォルトは、
10158 ファイル全体の shred である。@var{bytes} の後ろには、その何倍かを示す
10159 ために @samp{K}, @samp{M}, @samp{G} といった、サイズの指定を付けることができる。
10160  @xref{Block size}.
10161
10162 @item -u
10163 @itemx --remove[=@var{how}]
10164 @opindex -u
10165 @opindex --remove
10166 @opindex --remove=unlink
10167 @opindex --remove=wipe
10168 @opindex --remove=wipesync
10169 @cindex removing files after shredding
10170 shred 処理したファイルを (可能ならば) サイズ 0 に短縮し
10171 (truncate)、その上で削除する。ファイルが複数のリンクを持って
10172 いる場合に、削除されるのは名前を指定されたリンクだけである。
10173 ファイルの名前は、ファイルの内容ほど秘密性を必要としないことも
10174 多い。そうした場合は、@var{how} パラメータを付けることで、各ディレ
10175 クトリエントリのより効率的な削除法を指定することができる。@var{how}
10176 パラメータに @samp{unlink} を指定した場合は、お定まりの unlink の
10177 呼び出しをするだけだが、@samp{wipe} を指定すると、unlink する前に
10178 ファイル名を構成するバイトの難読化を行う。@samp{wipesync} を指定した
10179 場合は、ファイル名を難読化するだけでなく、それを 1 バイトづつ
10180 ディスクに sync することまで行う。留意していただきたいのは、
10181 @samp{wipesync} はデフォルトの方法だが、すべてのファイル名のすべての
10182 文字ごとに sync を行うことになるので、負荷が重くなるかもしれない
10183 ということである。ファイル数が多い場合には、無視できない負荷に
10184 なるかもしれない。また、使用しているシステムがメタデータの
10185 同期アップデートを提供している場合には、やらないでもよいこと
10186 かもしれない。(@option{--remove} に対する @var{how} パラメータの指定は、
10187 coreutils-8.22 の新機能)
10188
10189 @item -v
10190 @itemx --verbose
10191 @opindex -v
10192 @opindex --verbose
10193 shred 処理が進行する間、更新される進行状態の情報のすべてを
10194 標準エラーに表示する。
10195
10196 @item -x
10197 @itemx --exact
10198 @opindex -x
10199 @opindex --exact
10200 デフォルトでは、@command{shred} は、ファイルの最後のブロックを完全に消す
10201 ために、通常ファイルのサイズを、ファイルシステムのブロックサイズの
10202 倍数に切り上げることになっている。この動作を抑制したかったら、
10203 @option{--exact} オプションを使用すればよい。すなわち、デフォルトでは、
10204 1 ブロック 512 バイトのシステムで 10 バイトの通常ファイルを shred
10205 すると、結果として 512 バイトのファイルが出来上がる。ところが、
10206 このオプションを使えば、shred はファイルの見かけのサイズを増加
10207 させないのである。
10208
10209 @item -z
10210 @itemx --zero
10211 @opindex -z
10212 @opindex --zero
10213 通常、@command{shred} は、最後の 1 回でもランダムデータを書き込む。
10214 そんなファイルがハードディスクにあると、(たとえば、暗号化された
10215 データに見えて) 目立ってしまうのではないかと思うのなら、あるいは、
10216 単にそっちの方がもっとすっきりしていると思うのなら、@option{--zero}
10217 オプションを指定して、もう一回、 すべて 0 ビットで上書きさせれば
10218 よい。これは、@option{--iterations} オプションで指定した上書き回数の
10219 ほかに、もう一回ということである。
10220
10221 @end table
10222
10223 第 1 ドライブのフロッピーディスクに作成したファイルシステムを跡形
10224 もなく消し去るには、次のコマンドを使えばよいだろう。このコマンドで
10225 ``1.44MB'' (実際には 1440 KiB) のフロッピーを消去するには、約 20 分
10226 かかる。
10227
10228 @example
10229 shred --verbose /dev/fd0
10230 @end example
10231
10232 同様に、ハードディスクの選択したパーティションからすべてのデータを
10233 消去するには、以下のコマンドを打ち込めばよい。
10234
10235 @example
10236 shred --verbose /dev/sda5
10237 @end example
10238
10239 最近のディスクでは、1 回の書き込みで十分なはずだ。それならば、
10240 書き込みを 3 回行うデフォルトの 3 分の 1 の時間ですむ。
10241
10242 @example
10243 # 擬似ランダムデータを 1 回書き込む。デフォルトより 3 倍速い。
10244 shred --verbose -n1 /dev/sda5
10245 @end example
10246
10247 念のため、少なくとも 1 回は擬似ランダムデータで上書きをした方がよい。
10248 言い換えると、つい使いたくなっても、@samp{-n0 --zero} を使ってはいけない。
10249 ディスク・コントローラの中には、すべてが 0 のブロックを書き込む際に、
10250 処理の最適化を行っているものがあり、そのため、ブロック中のバイト
10251 すべてがクリアされない恐れがあるからである。SSD の中には、まさにそう
10252 いうことをするものがある。
10253
10254 @samp{-} という @var{file} は、標準出力を表している。これの使い道は、削除した
10255 テンポラリ・ファイルを shred することである。たとえば、次のようにだ。
10256
10257 @example
10258 i=$(mktemp)
10259 exec 3<>"$i"
10260 rm -- "$i"
10261 echo "Hello, world" >&3
10262 shred - >&3
10263 exec 3>&-
10264 @end example
10265
10266 しかしながら、@samp{shred - >file} というコマンドを使っても、ファイルの
10267 内容を shred することにはならない。なぜなら、シェルは @command{shred} を呼び
10268 出す前に、ファイルをサイズ 0 に短縮 (truncate) してしまうからである。
10269 @samp{shred file}、あるいは (Bourne 互換シェルをお使いなら) @samp{shred - 1<>file}
10270 というコマンドを、代わりに使った方がよい。
10271
10272 @exitstatus
10273
10274
10275 @node Special file types
10276 @chapter 特殊なファイル型
10277
10278 @cindex special file types
10279 @cindex file types, special
10280
10281 この章では、特殊なタイプのファイルを作成するコマンドの説明を行う
10282 (さらに @command{rmdir} の説明もするが、これはディレクトリという特殊な
10283 ファイル型の一つを削除するコマンドである)。
10284
10285 @cindex special file types
10286 @cindex file types
10287 Unix 系統のオペレーティング・システムでは、ほかのオペレーティング・
10288 システムと比べて、特殊なファイル型というものが著しく少ないが、それでも
10289 普通のファイル (@dfn{normal files}) がそうであるような、のっぺらぼうなバイト
10290 ストリームとして、何でもかんでも扱えさえすればよいというものではない。
10291 たとえば、ファイルを作成したり、削除したりするとき、システムはその情報
10292 を記録しなければならないが、それはディレクトリ (@dfn{directory}) --- これも
10293 特殊なタイプのファイルである --- に書き込まれる。もし興味があれば、
10294 ディレクトリを普通のファイルのように読むこともできるが、システムが
10295 システムとしての役割を果たすためには、ディレクトリはそのファイル内容
10296 であるバイトに、構造というか、何らかの秩序を持っていなければならない。
10297 そういう意味で、ディレクトリは、「特殊な」タイプのファイルなのである。
10298
10299 ディレクトリ以外の特殊なファイル型としては、名前付きパイプ (FIFO)、
10300 シンボリックリンク、ソケット、それに、いわゆるスペシャルファイル
10301 (@dfn{special files}) がある。
10302
10303 @menu
10304 * link invocation::     システムコール link を使って、ハードリンクを作成する。
10305 * ln invocation::       ファイル間のリンクを作成する。
10306 * mkdir invocation::    ディレクトリを作成する。
10307 * mkfifo invocation::   FIFO (名前付きパイプ) を作成する。
10308 * mknod invocation::    ブロック型やキャラクタ型のスペシャルファイルを作成する。
10309 * readlink invocation:: シムリンクの値、または正規化されたファイル名を表示する。
10310 * rmdir invocation::    空のディレクトリを削除する。
10311 * unlink invocation::   システムコール unlink を使って、ファイルを削除する。
10312 @end menu
10313
10314
10315 @node link invocation
10316 @section @command{link}: システムコール link を使って、ハードリンクを作成する
10317
10318 @pindex link
10319 @cindex links, creating
10320 @cindex hard links, creating
10321 @cindex creating links (hard only)
10322
10323 @command{link} は、一度に 1 個のハードリンクを作成する。これは、システムが
10324 提供する @code{link} 関数への必要最小のインターフェースである。
10325 @xref{Hard Links, , , libc, The GNU C Library Reference Manual}.
10326 従って、より一般に使われる @command{ln} コマンドの
10327 ような、様々な付加機能をあえて備えていない (@pxref{ln invocation})。
10328 @sp 1
10329 書式:
10330
10331 @example
10332 link @var{filename} @var{linkname}
10333 @end example
10334
10335 @var{filename} は、実在するファイルを指していなければならない。また、
10336 @var{linkname} は、実在するディレクトリ中の実在しないファイルを指していな
10337 ければならない。@command{link} は、リンクを作成するために、@code{link (@var{filename},
10338 @var{linkname})} をコールするだけである。
10339
10340 GNU のシステムでは、このコマンドは、@samp{ln --directory
10341 --no-target-directory @var{filename} @var{linkname}} と同様に振る舞う。しかし、
10342 @option{--directory} や @option{--no-target-directory} は、POSIX の規格にあるオプ
10343 ションではないので、@command{link} の方が、実用上より可搬性がある。
10344
10345 @var{filename} がシンボリックリンクの場合、@var{linkname} がシンボリックリンク
10346 へのハードリンクになるか、シンボリックリンクの参照先へのハードリンクに
10347 なるかは、規定されていない。望む方の動作をはっきり指定するには、@command{ln -P} や
10348 @command{ln -L} を使用するべきである。
10349
10350 @exitstatus
10351
10352
10353 @node ln invocation
10354 @section @command{ln}: ファイル間のリンクを作成する
10355
10356 @pindex ln
10357 @cindex links, creating
10358 @cindex hard links, creating
10359 @cindex symbolic (soft) links, creating
10360 @cindex creating links (hard or soft)
10361
10362 @cindex file systems and hard links
10363 @command{ln} はファイル間のリンクを作成する。デフォルトではハードリンクを作成
10364 するが、@option{-s} オプションを指定すると、シンボリックリンク (@dfn{soft} link
10365 とも言う) を作ることになる。
10366 @sp 1
10367 書式:
10368
10369 @example
10370 ln [@var{option}]@dots{} [-T] @var{target} @var{linkname}
10371 ln [@var{option}]@dots{} @var{target}
10372 ln [@var{option}]@dots{} @var{target}@dots{} @var{directory}
10373 ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{}
10374 @end example
10375
10376 @itemize @bullet
10377
10378 @item
10379 ファイル名を二つ指定すると、@command{ln} は 1 番目に対するリンクを 2 番目
10380 の名前で作成する。
10381
10382 @item
10383 @var{target} のみを指定すると、@command{ln} はそのファイルに対するリンクを
10384 カレントディレクトリに作成する。
10385
10386 @item
10387 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
10388 それを指定しないでも、最後のファイルがディレクトリであり、しかも
10389 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
10390 @command{ln} は各 @var{target} ファイルに対するリンクを、指定されたディレクトリに
10391 @var{target} の名前で作成する。
10392
10393 @end itemize
10394
10395 通常 @command{ln} は存在するファイルを削除しない。既存のファイルを無条件で
10396 削除するには、@option{--force} (@option{-f}) オプションを使う。また、ユーザに問い
10397 合わせた上で削除するには、@option{--interactive} (@option{-i}) オプションを使う。
10398 既存のファイルを、名前を変更して残すには、@option{--backup} (@option{-b}) オプション
10399 を使用する。(訳注: ここで述べているのは、存在するファイルの名前を
10400 リンクファイル名として使う場合の話である。)
10401
10402 @cindex hard link, defined
10403 @cindex inode, and hard links
10404 ハードリンク (@dfn{hard link}) というのは、存在するファイルが持つ別の名前
10405 である。だから、リンクとオリジナルは、区別ができない。専門的な言い方を
10406 すると、両者は同じ inode を共有するものである。inode には、ファイルに
10407 関する情報がすべて含まれているので、全くのところ、inode こそファイルで
10408 あると言っても、過言ではないほどだ。たいていのシステムでは、ディレクトリ
10409 に対するハードリンクの作成は禁じられている。許可されているシステムでも、
10410 それができるのは、スーパーユーザだけである (その場合でも、ファイル
10411 システムにループが生じると、ほかの様々なユーティリティ・プログラムで
10412 問題が起きるので、慎重にやらなければならない)。なお、ハードリンクは、
10413 ファイルシステムの境界を越えることができない。(もっとも、ハードリンクに
10414 対するこうした制限は、POSIX で規定されているわけではない。)
10415
10416 @cindex dereferencing symbolic links
10417 @cindex symbolic link, defined
10418 それに対して、シンボリックリンク (@dfn{symbolic link}、略称はシムリンク
10419 @dfn{symlink}) は、特殊なファイル型の一つである (すべてのカーネルがサポート
10420 しているわけではない。たとえば、System V release 3 やそれ以前の
10421 システムにはシムリンクが存在しない)。このファイル型では、リンク
10422 ファイルは、実際には別のファイルを、名前を使って参照している。
10423 ほとんどのファイル操作では (ファイルのオープン、読み込み、書き出し
10424 など)、シンボリックリンク・ファイルが渡されると、カーネルが自動的に
10425 リンクの参照を読み解いて (@dfn{dereference})、リンクの参照先を操作の
10426 対象にする。ただし、操作によっては (たとえば、ファイルの削除)、
10427 参照先ではなく、リンクファイルそのものを対象にするものもある。
10428 シムリンクの所有者やグループは、リンクを通して行われるファイルアクセス
10429 に対して意味を持たないが、削除制限ビットが立っているディレクトリから
10430 シンボリックリンクを削除する際には、かかわりを持ってくる。GNU の
10431 システムでは、シムリンクのモードには意味がなく、変更することもでき
10432 ない。だが、BSD システムの中には、モードが変更でき、ファイル名の解決に
10433 おいてシムリンクをたどるかどうかに影響するものもある。
10434 @xref{Symbolic Links,,, libc, The GNU C Library Reference Manual}.
10435
10436 シンボリックリンクの中身には、どんな文字列が含まれていてもよい。
10437 シンボリックリンクに含まれる文字列が、実在するファイルの名前になって
10438 いないときは、リンク切れ (@dfn{dangling symlink}) が生ずる。リンク切れの
10439 シンボリックリンクを作成することは、禁止されているわけではない。
10440 シムリンクの作成に絶対パスを使うか、相対パスを使うかには、それぞれ
10441 一長一短がある。絶対パスのシムリンクは、リンクファイルの存在する
10442 ディレクトリが移動しても、常に同じファイルを指す。もっとも、その
10443 シムリンクが複数のマシンから見えるような場合には (たとえば、ネット
10444 ワークでつながったファイルシステムにあるような場合には)、リンクが
10445 指しているファイルは、必ずしも同じではないかもしれない。相対パスの
10446 シンボリックリンクの方は、それが存在しているディレクトリからの相対パス
10447 で参照先が決まる。そこで、リンクファイルがネットワークでつながっている
10448 マシンからアクセスされることがある場合に、リンクと同じデバイス上に
10449 存在するファイルを、そのデバイスのマウントポイントが何という名前かを
10450 気にせずに指示することができて、便利であることが多い。
10451
10452 相対パスのシムリンクをカレントディレクトリ以外の場所に作成すると、
10453 そのシムリンクが実際に指しているファイルは、同じ文字列がカレント
10454 ディレクトリを基点として指しているファイルとは別のものになる。
10455 そのため、ユーザの多くが、まずカレントディレクトリを変更して、相対
10456 パスのシムリンクを作成する場所へ移動することを好んでいる。そうすれば、
10457 タブ補完などのファイル名参照方法を用いて、シムリンクに格納する参照先の
10458 適切な相対パスを見つけることができるからである。
10459
10460 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10461
10462 @table @samp
10463
10464 @optBackup
10465
10466 @item -d
10467 @itemx -F
10468 @itemx --directory
10469 @opindex -d
10470 @opindex -F
10471 @opindex --directory
10472 @cindex hard links to directories
10473 ユーザが適切な権限を持っていれば、ディレクトリに対するハードリンク
10474 を作成しようとしても許可する。とは言え、たぶんシステムによって禁止
10475 されているので、たとえスパーユーザでも作成に失敗するだろう。
10476
10477 @item -f
10478 @itemx --force
10479 @opindex -f
10480 @opindex --force
10481 リンクの作成先に、作成するリンクファイルと同名のファイルがすでに
10482 存在していたら、それを削除する。
10483
10484 @item -i
10485 @itemx --interactive
10486 @opindex -i
10487 @opindex --interactive
10488 @cindex prompting, and @command{ln}
10489 リンクの作成先に、作成するリンクファイルと同名のファイルがすでに
10490 存在していたら、削除するかどうか、ユーザに問い合わせる。
10491
10492 @item -L
10493 @itemx --logical
10494 @opindex -L
10495 @opindex --logical
10496 @option{-s} オプションが有効になっていないとき、リンク対象として指定
10497 されたファイル (訳注: 上記書式の @var{target}) がシンボリックリンク
10498 ならば、シンボリックリンクそのものではなく、シンボリックリンクが
10499 参照しているファイルへのハードリンクを作成する。
10500
10501 @item -n
10502 @itemx --no-dereference
10503 @opindex -n
10504 @opindex --no-dereference
10505 最後のオペランドがディレクトリに対するシンボリックリンクである
10506 とき、それをディレクトリとして特別扱いしない (訳注: すなわち、
10507 ディレクトリ内に @var{target} と同名でリンクを作ることはしない)。
10508 むしろ、普通のファイルであるかのように扱う。
10509
10510 リンクの作成先として指定されたのが (ディレクトリに対するシムリンク
10511 ではなく) 本物のディレクトリならば、曖昧なところは全くない。その
10512 ディレクトリ内にリンクを作るだけの話だ。ところが、指定された作成先
10513 が、ディレクトリに対するシムリンクの場合は、ユーザの要求を処理する
10514 のに、二つの行き方がある。@command{ln} は、通常のディレクトリを扱う場合と
10515 全く同じように作成先を扱って、そこにリンクを作成することができる。
10516 あるいは、作成先をディレクトリではないもの、すなわち、他ならぬシム
10517 リンクと見なすことも可能だ。後者の場合、@command{ln} は、新しいリンクを
10518 作成する前に、そのシムリンクを消去するなり、バックアップするなり
10519 しなければならない。@command{ln} のデフォルトは、作成先がディレクトリに
10520 対するシムリンクであっても、ディレクトリと全く同様に扱うことである。
10521
10522 このオプションは、@option{--no-target-directory} (@option{-T}) の弱いバージョン
10523 である。従って、両方のオプションを指定した場合、こちらは効果がない。
10524
10525 @item -P
10526 @itemx --physical
10527 @opindex -P
10528 @opindex --physical
10529 @option{-s} オプションが有効になっていないとき、リンク対象として指定
10530 されたファイル (訳注: 上記書式の @var{target}) がシンボリックリンク
10531 ならば、シンボリックリンクそのものへのハードリンクを作成する。
10532 そういった動作をカーネルがサポートしていないプラットホームでは、
10533 このオプションを指定すると、リンク対象のシンボリックリンクと全く
10534 同じ内容を持つシンボリックリンクが作成される。このとき、シンボ
10535 リックリンクの内容に手が加えられることは決してないので、どちらの
10536 シンボリックリンクを使って行われるファイル名の解決も、シンボリック
10537 リンクへのハードリンクが作成された場合と結局同じになる。
10538
10539 @item -r
10540 @itemx --relative
10541 @opindex -r
10542 @opindex --relative
10543 リンクファイルを置く場所を基点とする相対パスのシンボリックリンクを
10544 作成する。
10545
10546 用例:
10547
10548 @smallexample
10549 ln -srv /a/file /tmp
10550 '/tmp/file' -> '../a/file'
10551 @end smallexample
10552
10553 相対パスのシンボリックリンクは、それを置くディレクトリと参照先の
10554 ファイル名を正規化した上で、それに基づいて作成される。すなわち、
10555 そうしたファイル名中にあるすべてのシンボリックリンクは、実体に
10556 還元されることになるわけだ。なお、@command{realpath} コマンドを使用すれば、
10557 以下の例に示すように、相対パスを生成する際にもっと融通が利く
10558 (訳注: たとえば、@command{realpath} を使うと、ファイル名中のシンボリック
10559 リンクをシンボリックリンクのままにしておくこともできる)。
10560 @xref{realpath invocation}.
10561
10562 @example
10563 @verbatim
10564 ln--relative() {
10565   test "$1" = --no-symlinks && { nosym=$1; shift; }
10566   target="$1";
10567   test -d "$2" && link="$2/." || link="$2"
10568   rtarget="$(realpath $nosym -m "$target" \
10569               --relative-to "$(dirname "$link")")"
10570   ln -s -v "$rtarget" "$link"
10571 }
10572 @end verbatim
10573 @end example
10574
10575 @item -s
10576 @itemx --symbolic
10577 @opindex -s
10578 @opindex --symbolic
10579 ハードリンクではなく、シンボリックリンクを作る。このオプションは、
10580 シンボリックリンクをサポートしていないシステムでは、エラー・
10581 メッセージを表示するだけである。
10582
10583 @optBackupSuffix
10584
10585 @optTargetDirectory
10586
10587 @optNoTargetDirectory
10588
10589 @item -v
10590 @itemx --verbose
10591 @opindex -v
10592 @opindex --verbose
10593 リンクの作成に成功した後で、各ファイルの名前を表示する。
10594
10595 @end table
10596
10597 @cindex hard links to symbolic links
10598 @cindex symbolic links and @command{ln}
10599 @option{-L} と @option{-P} の両方を指定すると、最後に指定したものが効果を持つ。
10600 さらに @option{-s} も指定した場合は、エラーや警告は出ないが、@option{-L} や @option{-P} は
10601 無視される。@option{-L} と @option{-P} のどちらのオプションも指定しない場合、@command{ln} の
10602 この実装では、システムの @code{link} 関数がシンボリックリンクに対するハード
10603 リンクをサポートしていれば (たとえば、GNU のシステム)、デフォルトの
10604 動作は @option{-P} になる。@code{link} 関数がシンボリックリンクをたどるものならば
10605 (たとえば、BSD)、デフォルトの動作は @option{-L} である。
10606
10607 @exitstatus
10608
10609 用例:
10610
10611 @smallexample
10612 悪い例:
10613
10614 # カレントディレクトリにあるファイル a を指す ../a というリンクを
10615 # 作成する。実のところ役に立たない。../a が自分自身を指すリンクに
10616 # なってしまうからだ。
10617 ln -s a ..
10618
10619 よりよい例:
10620
10621 # 頭がこんがらかってしまわないように、シムリンクを作成する前に、
10622 # リンクを作るディレクトリに移動する。
10623 cd ..
10624 ln -s adir/a .
10625
10626 悪い例:
10627
10628 # 絶対パスによるリンク対象の指定は、リンク対象の位置が変わると、
10629 # 役に立たない。
10630 ln -s $(pwd)/a /some/dir/
10631
10632 よりよい例:
10633
10634 # 相対パスによるリンク対象の指定は、リンクやその対象を含む
10635 # ディレクトリが移動しても、両者の相対的な位置関係が変わらない
10636 # かぎり、問題がない。また、ネットワークでつながったファイル
10637 # システム間でも通用する。
10638 ln -s afile anotherfile
10639 ln -s ../adir/afile yetanotherfile@end smallexample
10640
10641
10642 @node mkdir invocation
10643 @section @command{mkdir}: ディレクトリを作成する
10644
10645 @pindex mkdir
10646 @cindex directories, creating
10647 @cindex creating directories
10648
10649 @command{mkdir} は、指定された名前でディレクトリを作成する。
10650 @sp 1
10651 書式:
10652
10653 @example
10654 mkdir [@var{option}]@dots{} @var{name}@dots{}
10655 @end example
10656
10657 @command{mkdir} は、@var{name} で指定された各ディレクトリを、指定された順番で
10658 作成する。@var{name} がすでに存在していると、エラーになり、その旨メッセージ
10659 を出すが、@var{name} がすでに存在していても、@option{-p} オプションが指定され、@var{name}
10660 がディレクトリの場合は、エラーにならない。
10661
10662 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10663
10664 @table @samp
10665
10666 @item -m @var{mode}
10667 @itemx --mode=@var{mode}
10668 @opindex -m
10669 @opindex --mode
10670 @cindex modes of created directories, setting
10671 作成するディレクトリの許可属性ビットを @var{mode} に設定する。@var{mode} には
10672 @command{chmod} と同じ書式を使用し、@samp{a=rwx} (すべてのユーザに、読み、書き、
10673 実行を許可する) を基点とする。@xref{File permissions}. 
10674
10675 通常、ディレクトリには、作成された時点で、要求したとおりのファイル
10676 モードビットが付く。GNU の拡張として、@var{mode} で特殊モードビットも指定
10677 できるが、その場合は、ディレクトリは存在しているが、特殊モードビット
10678 は要求どおりではないという、時間の隙間が生じるかもしれない。ディレ
10679 クトリの set-user-ID ビットと set-group-ID ビットが、このオプション
10680 を使って変更しない場合にどのように継承されるかについては、次の節を
10681 参照していただきたい。@xref{Directory Setuid and Setgid}.
10682
10683 @item -p
10684 @itemx --parents
10685 @opindex -p
10686 @opindex --parents
10687 @cindex parent directories, creating
10688 各引数について、存在していない親ディレクトリがあれば、それを作成し、
10689 その許可属性ビットを umask を基にして @samp{u+wx} になるように設定する。
10690 親ディレクトリがすでに存在している場合は、このオプションは何もせず、
10691 その許可属性ビットを変更することもない。
10692
10693 新たに作成するいかなる親ディレクトリの許可属性ビットも、@samp{u+wx}
10694 を含むある一定の値に設定するには、@command{mkdir} を実行する前に、umask
10695 を設定すればよい。たとえば、@samp{(umask u=rwx,go=rx; mkdir -p P/Q)}
10696 というシェルコマンドで @file{P} という親ディレクトリを作れば、その
10697 許可属性ビットは @samp{u=rwx,go=rx} になる。また、親ディレクトリに特殊
10698 モードビットも設定するには、@command{chmod} を @command{mkdir} の後で実行すれば
10699 よい。新たに作成される親ディレクトリの set-user-ID ビットと
10700 set-group-ID ビットがどのように継承されるかについては、次の節を
10701 参照していただきたい。 @xref{Directory Setuid and Setgid}.
10702
10703 @item -v
10704 @itemx --verbose
10705 @opindex -v
10706 @opindex --verbose
10707 ディレクトリを作成するごとに、メッセージを表示する。@option{--parents}
10708 と併せて使うと、大変便利である。
10709
10710 @optContext (@var{context} を省略できる
10711 のは、coreutils-8.22 から)
10712
10713 @end table
10714
10715 @exitstatus
10716
10717
10718 @node mkfifo invocation
10719 @section @command{mkfifo}: FIFO (名前付きパイプ) を作成する
10720
10721 @pindex mkfifo
10722 @cindex FIFOs, creating
10723 @cindex named pipes, creating
10724 @cindex creating FIFOs (named pipes)
10725
10726 @command{mkfifo} は、指定された名前で FIFO (名前付きパイプ @dfn{named pipes}
10727 とも言う) を作成する。
10728 @sp 1
10729 書式:
10730
10731 @example
10732 mkfifo [@var{option}] @var{name}@dots{}
10733 @end example
10734
10735 @dfn{FIFO} は特殊なファイル型の一つであり、これを利用すると、独立した
10736 プロセスの間でデータのやりとりが可能になる。片方のプロセスが FIFO を
10737 書き出し用にオープンし、もう一方のプロセスが読み込み用にオープンする。
10738 そうすると、シェルなどにある普通の名前のない (anonymous) パイプを
10739 使ったときのように、データを一方から他方へ流すことができるのである。
10740
10741 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
10742
10743 @table @samp
10744
10745 @item -m @var{mode}
10746 @itemx --mode=@var{mode}
10747 @opindex -m
10748 @opindex --mode
10749 @cindex modes of created FIFOs, setting
10750 作成する FIFO の許可属性を @var{mode} にする。@var{mode} は @command{chmod} で
10751 使用するのと同じシンボル表記であり、@samp{a=rw} (すべてのユーザに、
10752 読み、書きを許可する) を基点として使う。@var{mode} で指定するのは、
10753 ファイルの許可属性ビットのみにするべきである。 @xref{File permissions}.
10754
10755 @optContext (@var{context} を省略できる
10756 のは、coreutils-8.22 から)
10757
10758 @end table
10759
10760 @exitstatus
10761
10762
10763 @node mknod invocation
10764 @section @command{mknod}: ブロック型やキャラクタ型のスペシャルファイルを作成する。
10765
10766 @pindex mknod
10767 @cindex block special files, creating
10768 @cindex character special files, creating
10769
10770 @command{mknod} は、指定された名前で FIFO、キャラクター・スペシャルファイル、
10771 ブロック・スペシャルファイルを作成する。
10772 @sp 1
10773 書式:
10774
10775 @example
10776 mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}]
10777 @end example
10778
10779 @cindex special files
10780 @cindex block special files
10781 @cindex character special files
10782 これまでに使ってきた「特殊なファイル型 (``special file type''」
10783 という言い回しとは違って、「スペシャルファイル (@dfn{special file})」
10784 という用語には、Unix では技術的な意味が存在する。すなわち、それは、
10785 データを生成したり、受け取ったりできるもののことである。たいていの
10786 場合、それはハードウェアという物理的なものを指し、たとえば、プリンタ
10787 やディスクがそれに当たる。(なお、そうしたスペシャルファイルは、通常、
10788 システムの設定時に作られる。) @command{mknod} は、このタイプのファイルを
10789 作成するコマンドである。そうしたデバイスには、そこから一度に 1 文字
10790 (a character) づつしか読むことのできないものもあれば、一度に 1 ブロックを
10791 (すなわち、たくさんの character を) 読み込むことのできるものもある。
10792 それ故、スペシャルファイルには、ブロック・スペシャルファイル (@dfn{block
10793 special} files) とキャラクタ・スペシャルファイル (@dfn{character special}
10794 files) があると言われるのである。
10795
10796 @c mknod is a shell built-in at least with OpenBSD's /bin/sh
10797 @mayConflictWithShellBuiltIn{mknod}
10798
10799 @var{name} に続く引数では、作成するファイルのタイプを指定する。
10800
10801 @table @samp
10802
10803 @item p
10804 @opindex p @r{for FIFO file}
10805 FIFO を作成する
10806
10807 @item b
10808 @opindex b @r{for block special file}
10809 ブロック・スペシャルファイルを作成する
10810
10811 @item c
10812 @c Don't document the 'u' option -- it's just a synonym for 'c'.
10813 @c Do *any* versions of mknod still use it?
10814 @c @itemx u
10815 @opindex c @r{for character special file}
10816 @c @opindex u @r{for character special file}
10817 キャラクタ・スペシャルファイルを作成する
10818
10819 @end table
10820
10821 ブロック型やキャラクタ型のスペシャルファイルを作成する際には、
10822 ファイルタイプに続いて、メージャー・デバイス番号とマイナー・デバイス
10823 番号を指定する必要がある。メージャーやマイナーのデバイス番号が @samp{0x} や
10824 @samp{0X} で始まっていれば、番号は 16 進数と見なされる。@samp{0} で始まっていれば
10825 8 進数、それ以外の場合は 10 進数である。
10826
10827 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
10828
10829 @table @samp
10830
10831 @item -m @var{mode}
10832 @itemx --mode=@var{mode}
10833 @opindex -m
10834 @opindex --mode
10835 作成するファイルの許可属性を @var{mode} にする。@var{mode} は @command{chmod} で
10836 使用するのと同じシンボル表記であり、@samp{a=rw} を基点として使う。
10837 @var{mode} で指定するのは、ファイルの許可属性ビットのみにするべきである。
10838 @xref{File permissions}.
10839
10840 @optContext (@var{context} を省略できる
10841 のは、coreutils-8.22 から)
10842
10843 @end table
10844
10845 @exitstatus
10846
10847
10848 @node readlink invocation
10849 @section @command{readlink}: シムリンクの値、または正規化されたファイル名を表示する
10850
10851 @pindex readlink
10852 @cindex displaying value of a symbolic link
10853 @cindex canonical file name
10854 @cindex canonicalize a file name
10855 @findex realpath
10856
10857 @command{readlink} には、二つの動作モードがある。
10858
10859 @table @samp
10860
10861 @item Readlink モード
10862
10863 このモードでは、@command{readlink} は、指定されたシンボリックリンクの値を
10864 表示する。引数がシンボリックの名前以外だったときは、何も出力せず、
10865 0 以外の終了コードで終了する。
10866
10867 @item Canonicalize (正規化) モード
10868
10869 このモードでは、@command{readlink} は、指定されたファイルの絶対パスによる
10870 名前を表示する。その絶対パスには、@file{.} や @file{..} といった構成要素や
10871 重複するパスの区切り (@file{/})、シンボリックリンクは含まれない。
10872
10873 @end table
10874
10875 @example
10876 readlink [@var{option}]@dots{} @var{file}@dots{}
10877 @end example
10878
10879 デフォルトでは、@command{readlink} は readlink モードで動作する。
10880
10881 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10882
10883 @table @samp
10884
10885 @item -f
10886 @itemx --canonicalize
10887 @opindex -f
10888 @opindex --canonicalize
10889 canonicalize モードで動かす。ファイル名を構成する要素のうち、最後の
10890 要素以外のどれかが、存在しなかったり、利用できなかったりすると、
10891 @command{readlink} は何も出力せず、0 以外の終了コードで終了する。引数の
10892 末尾のスラッシュは無視される。
10893
10894 @item -e
10895 @itemx --canonicalize-existing
10896 @opindex -e
10897 @opindex --canonicalize-existing
10898 canonicalize モードで動かす。ファイル名を構成する要素に、存在しな
10899 かったり、利用できなかったりするものが一つでもあれば、@command{readlink} は
10900 何も出力せず、 0 以外の終了コードで終了する。ファイル名のの末尾に
10901 スラッシュを付けると、その名前はディレクトリであるという指定になる。
10902
10903 @item -m
10904 @itemx --canonicalize-missing
10905 @opindex -m
10906 @opindex --canonicalize-missing
10907 canonicalize モードで動かす。ファイル名を構成する要素に、存在しな
10908 かったり、利用できなかったりするものがあれば、@command{readlink} はそれを
10909 ディレクトリと見なす。
10910
10911 @item -n
10912 @itemx --no-newline
10913 @opindex -n
10914 @opindex --no-newline
10915 @var{file} が 1 個しか指定されなかったときは、ファイル名同士を区切る
10916 デリミタを出力しない。複数の @var{file} とともに、このオプションが
10917 指定されたときは、 警告メッセージを出す。
10918
10919 @item -s
10920 @itemx -q
10921 @itemx --silent
10922 @itemx --quiet
10923 @opindex -s
10924 @opindex -q
10925 @opindex --silent
10926 @opindex --quiet
10927 ほとんどのエラーメッセージを出さないようにする。
10928
10929 @item -v
10930 @itemx --verbose
10931 @opindex -v
10932 @opindex --verbose
10933 エラーメッセージを表示する。
10934
10935 @item -z
10936 @itemx --zero
10937 @opindex -z
10938 @opindex --zero
10939 出力する項目を NUL 文字で区切る。
10940
10941 @end table
10942
10943 @command{readlink} ユーティリティが初めて登場したのは、OpenBSD 2.1. だった。
10944
10945 @command{realpath} コマンドをオプションなしで使うと、canonicalize モードの
10946 @command{readlink} と同じ動作をする。
10947
10948 @exitstatus
10949
10950
10951 @node rmdir invocation
10952 @section @command{rmdir}: 空のディレクトリを削除する
10953
10954 @pindex rmdir
10955 @cindex removing empty directories
10956 @cindex directories, removing empty
10957
10958 @command{rmdir} は、空のディレクトリを削除する。
10959 @sp 1
10960 書式:
10961
10962 @example
10963 rmdir [@var{option}]@dots{} @var{directory}@dots{}
10964 @end example
10965
10966 引数 @var{directory} が実在する空のディレクトリを指していない場合、
10967 エラーになる。
10968
10969 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10970
10971 @table @samp
10972
10973 @item --ignore-fail-on-non-empty
10974 @opindex --ignore-fail-on-non-empty
10975 @cindex directory deletion, ignoring failures
10976 ディレクトリの削除に失敗しても、その理由が単にディレクトリが空では
10977 ないせいならば、その失敗を無視する。
10978
10979 @item -p
10980 @itemx --parents
10981 @opindex -p
10982 @opindex --parents
10983 @cindex parent directories, removing
10984 @var{directory} を削除するとき、@var{directory} を構成する各要素の削除を
10985 試みる。そこで、たとえば、@samp{rmdir -p a/b/c} は、@samp{rmdir a/b/c a/b a}
10986 と同じになる。従って、そうしたディレクトリのどれかが空ではないこと
10987 が判明すると、動作に失敗する。動作に失敗しても、エラーメッセージを
10988 出して失敗のステータスで終了しないようにするには、
10989 @option{--ignore-fail-on-non-empty} オプションを使えばよい。
10990
10991 @item -v
10992 @itemx --verbose
10993 @opindex -v
10994 @opindex --verbose
10995 @cindex directory deletion, reporting
10996 @var{directory} の削除に成功するごとに、その旨メッセージを出す。
10997
10998 @end table
10999
11000 空ではないディレクトリを (再帰的に) 削除する方法については、@command{rm}
11001 コマンドの説明を参照していただきたい。@xref{rm invocation}. 
11002
11003 @exitstatus
11004
11005
11006 @node unlink invocation
11007 @section @command{unlink}: システムコール unlink を使って、ファイルを削除する
11008
11009 @pindex unlink
11010 @cindex removing files or directories (via the unlink syscall)
11011
11012 @command{unlink} は、指定された 1 個のファイル名の削除を行う。これは、
11013 システムが提供する @code{unlink} 関数への必要最小のインターフェース
11014 である。@xref{Deleting Files, , , libc, The GNU C Library Reference Manual}.
11015 従って、より一般に使われる @command{rm} コマンドのような、様々な付加機能を
11016 あえて備えていない (@pxref{rm invocation})。
11017 @sp 1
11018 書式:
11019
11020 @example
11021 unlink @var{filename}
11022 @end example
11023
11024 システムによっては、@code{unlink} を使って、ディレクトリの名前を削除
11025 できるものもある。また、それができるのは、特権を持ったユーザだけである
11026 システムもある。GNU のシステムでは、@code{unlink} は、ディレクトリの名前を
11027 全く削除できない。
11028
11029 @command{unlink} コマンドは、@option{--help} と @option{--version} オプションを認識する。
11030 名前が @samp{-} で始まるファイルを削除するには、名前の前に @samp{./} を付ければ
11031 よい。たとえば、@samp{unlink ./--help} のようにだ。
11032
11033 @exitstatus
11034
11035
11036 @node Changing file attributes
11037 @chapter ファイルの属性変更
11038
11039 @cindex changing file attributes
11040 @cindex file attributes, changing
11041 @cindex attributes, file
11042
11043 ファイルについては、内容と名前とファイル型 (@pxref{Special file types})
11044 で、すべてが尽くされるわけではない。ファイルには、他の情報も存在する。
11045 たとえば、所有者 (ユーザ ID)、グループ (グループ ID)、アクセス権
11046 (そのファイルに対して、所有者、グループに属するユーザ、それ以外の
11047 一般ユーザは、それぞれ何ができるのか)、様々なタイムスタンプ、といった
11048 情報も存在するのである。そうしたものは、一まとめにして、ファイルの属性
11049 (@dfn{attributes}) と呼ばれている。
11050
11051 以下のコマンドは、ファイルの属性を変更する。
11052
11053 @menu
11054 * chown invocation::         ファイルの所有者やグループを変更する。
11055 * chgrp invocation::         ファイルのグループを変更する。
11056 * chmod invocation::         アクセス権を変更する。
11057 * touch invocation::         ファイルのタイムスタンプを変更する。
11058 @end menu
11059
11060
11061 @node chown invocation
11062 @section @command{chown}: ファイルの所有者やグループを変更する
11063
11064 @pindex chown
11065 @cindex file ownership, changing
11066 @cindex group ownership, changing
11067 @cindex changing file ownership
11068 @cindex changing group ownership
11069
11070 @command{chown} は、指定された各 @var{file} の所有者や所有グループを @var{new-owner} に
11071 変更する。所有者とグループを、存在する参照用ファイル (reference file)
11072 のそれと同じものに変更することもできる。
11073 @sp 1
11074 書式:
11075
11076 @example
11077 chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@}@c
11078  @var{file}@dots{}
11079 @end example
11080
11081 @var{new-owner} では、新しい所有者やグループを以下のような形で指定する
11082 (@samp{:} の前後に空白を入れてはいけない)。
11083
11084 @example
11085 [@var{owner}] [ : [@var{group}] ]
11086 @end example
11087
11088 細かく説明しよう。
11089
11090 @table @var
11091 @item owner
11092 @var{owner} (ユーザ名、またはユーザ ID 番号) だけが指定されている場合は、
11093 そのユーザが指定された各ファイルの所有者になる。ファイルの
11094 グループは変化しない。
11095
11096 @item owner@samp{:}group
11097 @var{owner} の後に、コロンと @var{group} (グループ名、またはグループ ID 番号)
11098 が、間に空白をはさまずに続く場合は、ファイルの所有グループも
11099 (@var{group} に) 変更される。
11100
11101 @item owner@samp{:}
11102 @var{owner} の後ろにコロンがあるのみで、グループ名が続かない場合は、
11103 そのユーザがファイルの所有者になり、ファイルのグループは、@var{owner}
11104 のログイン・グループに変更される。
11105
11106 @item @samp{:}group
11107 コロンとそれに続く @var{group} のみが指定され、所有者が省略されている
11108 場合は、ファイルのグループだけが変更される。この場合、@command{chown}
11109 は、@command{chgrp} と同じ動作をするわけだ。
11110
11111 @item @samp{:}
11112 コロンのみが指定されている場合や、@var{new-owner} に何も指定されていない
11113 場合は、所有者もグループも変更されない。
11114
11115 @end table
11116
11117 @var{owner} や @var{group} にユーザ ID 番号やグループ ID 番号を使用する場合は、
11118 番号の頭に @samp{+} を付ければ、ID 番号だと明示することができる。
11119 @xref{Disambiguating names and IDs}.
11120
11121 古めのスクリプトの中には、区切りの印として @samp{:} ではなく、@samp{.} を
11122 今だに使っているものがあるかもしれない。POSIX 1003.1-2001 (@pxref{Standards conformance})
11123 では、これに対するサポートを要求していないが、
11124 後方互換のために、GNU の @command{chown} では、曖昧さが生じないかぎり、@samp{.} の
11125 使用をサポートしている。とは言え、新しく書くスクリプトでは、@samp{.} の
11126 使用を避けるべきである。他のシステムでも使えるとはかぎらないし、また、
11127 @var{owner@samp{.}group} という全体が、名前に @samp{.} を含むユーザを指していたり
11128 すると、不都合が生じるからだ。
11129
11130 @command{chown} コマンドを実行すると、set-user-ID ビットや set-group-ID
11131 ビットが消えてしまうことがある。そうしたことが起きるかどうかは、
11132 裏で動いている @code{chown} システムコールのポリシーや機能次第であり、
11133 従って、システムによるファイルモードの変更が、@command{chown} コマンドの
11134 コントロール外になることがあるのだ。しかるべき特権を持ったユーザが
11135 実行した場合や、問題のビットが実行権とは関係のない何か別の機能
11136 (たとえば、強制ロック) を表している場合などでは、@command{chown} コマンド
11137 を実行しても、そうしたビットが変わらないかもしれない。どうなるか
11138 よくわからない場合は、裏で動いているシステムの動作を調べるとよい。
11139
11140 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11141
11142 @table @samp
11143
11144 @item -c
11145 @itemx --changes
11146 @opindex -c
11147 @opindex --changes
11148 @cindex changed owners, verbosely describing
11149 所有者の変更が実際に行われた各 @var{file} について、何を実行したかを
11150 詳しく表示する。
11151
11152 @item -f
11153 @itemx --silent
11154 @itemx --quiet
11155 @opindex -f
11156 @opindex --silent
11157 @opindex --quiet
11158 @cindex error messages, omitting
11159 所有者を変更できないファイルがあっても、エラーメッセージを出さない。
11160
11161 @item @w{@kbd{--from}=@var{old-owner}}
11162 @opindex --from
11163 @cindex symbolic links, changing owner
11164 @var{file} が @var{old-owner} で指定された属性を現在持っているときにのみ、
11165 その所有者を変更する。@var{old-owner} の書式は、上記の @var{new-owner} と同じ
11166 である。このオプションは、ファイルの不正使用が可能になる時間を
11167 大幅に狭めるという点で、主としてセキュリティの見地から役に立つ。
11168 一例を挙げると、この種のオプションを使わない場合、ユーザの ID
11169 番号の変更を、そのユーザのファイルに反映させるために、@code{root} は
11170 次のようなコマンドを実行するかもしれない。
11171
11172 @smallexample
11173 find / -user OLDUSER -print0 | xargs -0 chown -h NEWUSER
11174 @end smallexample
11175
11176 しかし、これは危険なことである。なぜなら、@command{find} が存在する
11177 ファイルの所有者を検査するときと、@command{chown} が実際に実行される
11178 ときとの間に時間差があり、それはかなり大きいかもしれないからだ。
11179 この時間差を小さくする方法の一つは、ファイルが見つかるごとに、
11180 @command{chown} を実行することだろう。
11181
11182 @example
11183 find / -user OLDUSER -exec chown -h NEWUSER @{@} \;
11184 @end example
11185
11186 しかし、動作の対象になるファイルがたくさんあると、この方法は
11187 非常に時間がかかる。@option{--from=@var{old-owner}} オプションを使う方が、
11188 完璧とまでは言えないにしても、より安全である (時間差がさらに
11189 小さくなるので)。
11190
11191 @example
11192 chown -h -R --from=OLDUSER NEWUSER /
11193 @end example
11194
11195 @item --dereference
11196 @opindex --dereference
11197 @cindex symbolic links, changing owner
11198 @findex lchown
11199 シンボリックリンクそのものを動作の対象とせず、リンクが指している
11200 ものを動作の対象にする。これがデフォルトである。
11201
11202 @item -h
11203 @itemx --no-dereference
11204 @opindex -h
11205 @opindex --no-dereference
11206 @cindex symbolic links, changing owner
11207 @findex lchown
11208 シンボリックリンクが指しているものではなく、シンボリックリンク
11209 そのものを動作の対象にする。このモードは、システムコール @code{lchown}
11210 に依存している。システムコール @code{lchown} を提供していないシステム
11211 では、コマンドラインで指定されたファイルがシンボリックリンクだと、
11212 @command{chown} は実行に失敗する。なお、再帰的にディレクトリ階層をたどって
11213 いる際にシンボリックリンクに出会っても、デフォルトでは診断メッセージ
11214 を表示しない。ただし、@option{--verbose} を指定している場合は別なので、
11215 そちらの説明も参照していただきたい。
11216
11217 @item --preserve-root
11218 @opindex --preserve-root
11219 @cindex root directory, disallow recursive modification
11220 ルートディレクトリ (@file{/}) を再帰的に変更しようとすると、
11221 エラーになる。@option{--recursive} オプションを指定していない場合、
11222 このオプションは効果がない。 @xref{Treating / specially}.
11223
11224 @item --no-preserve-root
11225 @opindex --no-preserve-root
11226 @cindex root directory, allow recursive modification
11227 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11228 @xref{Treating / specially}.
11229
11230 @item --reference=@var{ref_file}
11231 @opindex --reference
11232 各 @var{file} の所有者とグループを @var{ref_file} のそれと同じものに変更する。
11233 @var{ref_file} がシンボリックリンクの場合は、シンボリックリンクの
11234 所有者とグループではなく、リンクが指しているファイルの所有者と
11235 グループを使用する。
11236
11237 @item -v
11238 @itemx --verbose
11239 @opindex -v
11240 @opindex --verbose
11241 処理したすべてのファイルについてメッセージを表示する。システム
11242 コール @code{lchown} を持っていないシステムで、再帰的にディレクトリ
11243 階層をたどっている際にシンボリックリンクに出会った場合、
11244 @option{--no-dereference} が有効になっていれば、「シンボリックリンクも
11245 その参照先も変更しない」というメッセージを出す。
11246
11247 @item -R
11248 @itemx --recursive
11249 @opindex -R
11250 @opindex --recursive
11251 @cindex recursively changing file ownership
11252 ディレクトリとその中身の所有者を再帰的に変更する。
11253
11254 @choptH @xref{Traversing symlinks}.
11255
11256 @choptL @xref{Traversing symlinks}.
11257
11258 @choptP @xref{Traversing symlinks}.
11259
11260 @end table
11261
11262 @exitstatus
11263
11264 用例:
11265
11266 @smallexample
11267 # /u の所有者を "root" に変更する。
11268 chown root /u
11269
11270 # 同様だが、グループも "staff" に変更する。
11271 chown root:staff /u
11272
11273 # /u 及び、それ以下にあるファイルの所有者を "root" に変更する。
11274 chown -hR root /u
11275 @end smallexample
11276
11277
11278 @node chgrp invocation
11279 @section @command{chgrp}: ファイルの所有グループを変更する
11280
11281 @pindex chgrp
11282 @cindex group ownership, changing
11283 @cindex changing group ownership
11284
11285 @command{chgrp} は、指定された各 @var{file} の所有グループを @var{group} に変更する (@var{group}
11286 は、グループ名でもグループ ID 番号でもよい)。所有グループを、存在する
11287 参照用ファイル (reference file) のグループと同じものに変更することも
11288 できる。
11289 @sp 1
11290 書式:
11291
11292 @example
11293 chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@}@c
11294  @var{file}@dots{}
11295 @end example
11296
11297 @var{group} にグループ ID 番号を使用する場合は、番号の頭に @samp{+} を付ければ、
11298 ID 番号だと明示することができる。 @xref{Disambiguating names and IDs}.
11299
11300 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11301
11302 @table @samp
11303
11304 @item -c
11305 @itemx --changes
11306 @opindex -c
11307 @opindex --changes
11308 @cindex changed files, verbosely describing
11309 グループの変更が実際に行われた各 @var{file} について、何を実行したかを
11310 詳しく表示する。
11311
11312 @item -f
11313 @itemx --silent
11314 @itemx --quiet
11315 @opindex -f
11316 @opindex --silent
11317 @opindex --quiet
11318 @cindex error messages, omitting
11319 グループを変更できないファイルがあっても、エラーメッセージを
11320 出さない。
11321
11322 @item --dereference
11323 @opindex --dereference
11324 @cindex symbolic links, changing owner
11325 @findex lchown
11326 シンボリックリンクそのものを動作の対象とせず、リンクが指している
11327 ものを動作の対象にする。これがデフォルトである。
11328
11329 @item -h
11330 @itemx --no-dereference
11331 @opindex -h
11332 @opindex --no-dereference
11333 @cindex symbolic links, changing group
11334 @findex lchown
11335 シンボリックリンクが指しているものではなく、シンボリックリンク
11336 そのものを動作の対象にする。このモードは、システムコール @code{lchown}
11337 に依存している。システムコール @code{lchown} を提供していないシステム
11338 では、コマンドラインで指定されたファイルがシンボリックリンクだと、
11339 @command{chgrp} は実行に失敗する。なお、再帰的にディレクトリ階層をたどって
11340 いる際にシンボリックリンクに出会っても、デフォルトでは診断メッセージ
11341 を表示しない。ただし、@option{--verbose} を指定している場合は別なので、
11342 そちらの説明も参照していただきたい。
11343
11344 @item --preserve-root
11345 @opindex --preserve-root
11346 @cindex root directory, disallow recursive modification
11347 ルートディレクトリ (@file{/}) を再帰的に変更しようとすると、
11348 エラーになる。@option{--recursive} オプションを指定していない場合、
11349 このオプションは効果がない。 @xref{Treating / specially}.
11350
11351 @item --no-preserve-root
11352 @opindex --no-preserve-root
11353 @cindex root directory, allow recursive modification
11354 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11355 @xref{Treating / specially}.
11356
11357 @item --reference=@var{ref_file}
11358 @opindex --reference
11359 各 @var{file} のグループを @var{ref_file} のグループと同じものに変更する。
11360 @var{ref_file} がシンボリックリンクの場合は、シンボリックリンクの
11361 グループではなく、リンクが指しているファイルのグループを使用する。
11362
11363 @item -v
11364 @itemx --verbose
11365 @opindex -v
11366 @opindex --verbose
11367 処理したすべてのファイルについてメッセージを表示する。システム
11368 コール @code{lchown} を持っていないシステムで、再帰的にディレクトリ
11369 階層をたどっている際にシンボリックリンクに出会った場合、
11370 @option{--no-dereference} が有効になっていれば、「シンボリックリンクも
11371 その参照先も変更しない」というメッセージを出す。
11372
11373 @item -R
11374 @itemx --recursive
11375 @opindex -R
11376 @opindex --recursive
11377 @cindex recursively changing group ownership
11378 ディレクトリとその中身の所有グループを再帰的に変更する。
11379
11380 @choptH @xref{Traversing symlinks}.
11381
11382 @choptL @xref{Traversing symlinks}.
11383
11384 @choptP @xref{Traversing symlinks}.
11385
11386 @end table
11387
11388 @exitstatus
11389
11390 用例:
11391
11392 @smallexample
11393 # /u のグループを "staff" に変更する。
11394 chgrp staff /u
11395
11396 # /u 及び、それ以下にあるファイルのグループを "staff" に変更する。
11397 chgrp -hR staff /u
11398 @end smallexample
11399
11400
11401 @node chmod invocation
11402 @section @command{chmod}: アクセス権を変更する
11403
11404 @pindex chmod
11405 @cindex changing access permissions
11406 @cindex access permissions, changing
11407 @cindex permissions, changing access
11408
11409 @command{chmod} は、名前を指定したファイルのアクセス権を変更する。
11410 @sp 1
11411 書式:
11412
11413 @example
11414 chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@}@c
11415  @var{file}@dots{}
11416 @end example
11417
11418 @cindex symbolic links, permissions of
11419 @command{chmod} コマンドがシンボリックリンクのアクセス権を変更することは
11420 ない。@command{chmod} システムコールがシンボリックリンクのアクセス権を変更
11421 できないからである。シンボリックリンクのアクセス権が利用されることは
11422 全くないので、この制限は問題にならない。とは言え、コマンドラインで
11423 指定された @var{file} が、シンボリックリンクだということはあるだろうが、
11424 そうした場合、@command{chmod} は、指定された各シンボリックリンクが参照して
11425 いるファイルのアクセス権を変更する。それに対して、ディレクトリを
11426 再帰的にたどっている最中にシンボリックリンクに出会った場合は、
11427 @command{chmod} はそれを無視することになる。
11428
11429 @command{chmod} の実行に成功したとき、通常ファイルの set-group-ID ビットが
11430 消えることがあるが、それは、ファイルのグループ ID が、@command{chmod} を実行
11431 したユーザの実効グループ ID や、補助グループ ID の一つに一致しなかった
11432 場合である。もっとも、そのユーザがしかるべき特権を持っている場合には、
11433 set-group-ID ビットが消えることはない。また、制限事項が他にも存在して、
11434 指定した @var{mode} 中や @var{ref_file} の、set-user-ID ビットや set-group-ID
11435 ビットが無視されることもある。そうした動作は、裏で動いている @code{chmod}
11436 システムコールのポリシーや機能次第なのだ。どうなるかよくわからない
11437 場合には、裏で動いているシステムの動作を調べればよい。
11438
11439 @var{mode} には、ファイルの新しいモードビット (訳注: すなわち、アクセス
11440 権) を指定する。詳細については、「ファイルの許可属性」の章を参照して
11441 いただきたい (@pxref{File permissions})。@var{mode} を指定するとき、@var{mode} を
11442 どうしても @samp{-} で始めたいのなら、前に @option{--} を置いた方がよい。たとえば、
11443 @samp{chmod -- -w file} のようにだ。とは言え、たいていの場合、@samp{chmod a-w file}
11444 の方が望ましい。なお、@command{chmod -w file} (@option{--} がない) が
11445 @samp{chmod a-w file} と別の動作になる場合には、警告が出る。
11446
11447 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11448
11449 @table @samp
11450
11451 @item -c
11452 @itemx --changes
11453 @opindex -c
11454 @opindex --changes
11455 アクセス権の変更が実際に行われた各 @var{file} について、何を実行したかを
11456 詳しく表示する。
11457
11458 @item -f
11459 @itemx --silent
11460 @itemx --quiet
11461 @opindex -f
11462 @opindex --silent
11463 @opindex --quiet
11464 @cindex error messages, omitting
11465 アクセス権が変更できないファイルがあっても、エラーメッセージを
11466 出さない。
11467
11468 @item --preserve-root
11469 @opindex --preserve-root
11470 @cindex root directory, disallow recursive modification
11471 ルートディレクトリ (@file{/}) を再帰的に変更しようとすると、
11472 エラーになる。@option{--recursive} オプションを指定していない場合、
11473 このオプションは効果がない。 @xref{Treating / specially}.
11474
11475 @item --no-preserve-root
11476 @opindex --no-preserve-root
11477 @cindex root directory, allow recursive modification
11478 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11479 @xref{Treating / specially}.
11480
11481 @item -v
11482 @itemx --verbose
11483 @opindex -v
11484 @opindex --verbose
11485 すべての @var{file} について、何を実行し、何を実行しなかったかを詳しく
11486 表示する。
11487
11488 @item --reference=@var{ref_file}
11489 @opindex --reference
11490 各 @var{file} のモードを @var{ref_file} のそれと同じものに変更する。
11491 @xref{File permissions}.  @var{ref_file} がシンボリックリンクの場合は、
11492 シンボリックリンクのモードではなく、リンクが参照しているファイルの
11493 モードを使用する。
11494
11495 @item -R
11496 @itemx --recursive
11497 @opindex -R
11498 @opindex --recursive
11499 @cindex recursively changing access permissions
11500 ディレクトリとその中身のアクセス権を再帰的に変更する。
11501
11502 @end table
11503
11504 @exitstatus
11505
11506
11507 @node touch invocation
11508 @section @command{touch}: ファイルのタイムスタンプを変更する
11509
11510 @pindex touch
11511 @cindex changing file timestamps
11512 @cindex file timestamps, changing
11513 @cindex timestamps, changing file
11514
11515 @command{touch} は指定されたファイルのアクセス日時 (access time) や更新日時
11516 (modification time) を変更する。
11517 @sp 1
11518 書式:
11519
11520 @example
11521 touch [@var{option}]@dots{} @var{file}@dots{}
11522 @end example
11523
11524 @cindex empty files, creating
11525 引数 @var{file} に存在しないファイルを指定すると、空のファイルが作成
11526 される。ただし、@option{--no-create} (@option{-c}) や @option{--no-dereference}
11527 (@option{-h}) が
11528 有効な場合は、ファイルは作成されない。
11529
11530 引数 @var{file} が @samp{-} という文字列の場合は、特別な扱いする。@command{touch} は、
11531 標準出力に結びついているファイルの日時を変更するのである。
11532
11533 @cindex clock skew
11534 @command{touch} は、デフォルトではファイルのタイムスタンプを現在の日時に
11535 セットする。@command{touch} はオペランドを左から右へと順番に処理するので、
11536 生成されたタイムスタンプが、前後のオペランドで一致しないこともある。
11537 また、「現在」とはいつかを決めるのは、プラットフォーム次第である。
11538 ネットワーク・ファイルシステムを使用しているプラットフォームでは、
11539 オペレーティング・システムとファイルシステムとで別のクロックを使用
11540 していることも珍しくない。@command{touch} は通常、デフォルトではファイル
11541 システムのクロックを使用するので、クロックのずれのために、生成された
11542 ファイルのタイムスタンプが、あるプログラムにとっては「未来」に
11543 見えたり、「過去」に見えたりすることがある。
11544
11545 @cindex file timestamp resolution
11546 @command{touch} コマンドは、ファイルのタイムスタンプを、ユーザが指定した
11547 日時よりも精度が高くならない範囲で、表現できる最大の値にセットする。
11548 この値がユーザが指定した日時と違うことがあるが、それにはいくつかの
11549 理由がある。第一に、ユーザが指定した日時が、サポートされている精度を
11550 越えていることがある。第二に、ファイルシステムが、日時のタイプに
11551 よって別の精度を使っていることがある。第三に、ファイルのタイム
11552 スタンプが、オペレーティング・システムのタイムスタンプとは別の精度を
11553 使っていることがある。第四に、オペレーティング・システムでタイム
11554 スタンプの更新に使用されている基本データ型が、さらに違う精度を採用
11555 していることがある。そんなわけで、理屈の上では、たとえば、ファイル
11556 システムでは、アクセス日時には 10 マイクロ秒の精度を、更新日時には
11557 100 ナノ秒の精度を使用し、オペレーティング・システムの方では、現在の
11558 時刻にはナノ秒の精度を、@command{touch} がファイルのタイムスタンプを任意の
11559 値に設定するために使う基本データ型には、マイクロ秒の精度を使用して
11560 いる、そういうこともありえるのである。
11561
11562 @cindex permissions, for changing file timestamps
11563 タイムスタンプを現在の時刻にセットする場合には、ユーザが所有して
11564 いないファイルでも、書き込み権限さえ持っていれば、@command{touch} はその
11565 タイムスタンプを変更することができる。しかし、現在の時刻以外にセット
11566 するには、ユーザはそのファイルを所有していなければならない。古い
11567 システムの中には、制限がさらに厳しいものもある。たとえば、アクセス
11568 日時と更新日時の両方を現在の時刻にセットするとき以外、対象となる
11569 ファイルを所有していなければならないといった具合だ。
11570
11571 @command{touch} が提供するオプションを使えば、ファイルの 2 種類の日時 ---
11572 最終アクセス日時と最終更新日時 --- を変更することができるが、標準の
11573 日時には、実はそのほかに 3 番目のものがある。すなわち、inode の変更日時
11574 (inode change time) だ。これは、ファイルの @code{ctime} と呼ばれることが
11575 多い。inode の変更日時は、ファイルのメタ情報が最後に変更された日時を
11576 表している。メタ情報の変更のよくある例の一つは、ファイルのアクセス権
11577 の変更である。アクセス権の変更では、ファイルにアクセスするわけではない
11578 ので、atime (アクセス日時) は変化しないし、またファイルの内容を変更
11579 するわけでもないので、mtime (更新日時) も変化しない。しかし、ファイル
11580 そのものに関する何ものかが変化しているわけであり、それはどこかに記録
11581 されなければならない。まさにそれが、inode の ctime フィールドの役割
11582 なのだ。たとえば、バックアップ・プログラムが、ファイルのアクセス権に
11583 変更があった場合も含めて、ファイルのコピーを最新に保つことができる
11584 ようにするには、ctime が不可欠である。ファイルの ctime は変更するが、
11585 他の日時には影響を及ぼさない別の操作には、ファイル名の変更がある。
11586 なお、いかなる場合であれ、通常の操作では、ユーザが ctime フィールドを
11587 自分で指定する値に変更することはできない。オペーレーティングシステムや
11588 ファイルシステムの中には、4 番目の日時をサポートしているものもある。
11589 すなわち、作成日時 (birth time) であり、ファイルが最初に作られた日時だ。
11590 名前からして当然だが、このタイムスタンプが変更されることはない。
11591
11592 @vindex TZ
11593 タイムスタンプは、タイムゾーンのルールに従うが、そのルールを指定して
11594 いるのは、環境変数 @env{TZ} である。@env{TZ} が設定されていない場合は、システム
11595 のデフォルトのルールに従う。 @xref{TZ Variable,, Specifying the Time Zone
11596 with @env{TZ}, libc, The GNU C Library Reference Manual}.
11597 なお、UTC のタイムスタンプを使えば、夏 (冬) 時間への
11598 移行時の曖昧さを避けることができる。
11599
11600 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11601
11602 @table @samp
11603
11604 @item -a
11605 @itemx --time=atime
11606 @itemx --time=access
11607 @itemx --time=use
11608 @opindex -a
11609 @opindex --time
11610 @opindex atime@r{, changing}
11611 @opindex access @r{time, changing}
11612 @opindex use @r{time, changing}
11613 アクセス日時のみ変更する。
11614
11615 @item -c
11616 @itemx --no-create
11617 @opindex -c
11618 @opindex --no-create
11619 存在しないファイルについて警告を出さず、ファイルの作成もしない。
11620
11621 @item -d
11622 @itemx --date=@var{time}
11623 @opindex -d
11624 @opindex --date
11625 @opindex time
11626 現在の日時の代わりに @var{time} を使用する。@var{time} には、月の名前、
11627 タイムゾーン、@samp{am} や @samp{pm}、@samp{yesterday} なども使うことができる。
11628 たとえば、@option{--date="2004-02-27 14:19:13.489392193 +0530"} とすると、
11629 UTC より 5 時間 30 分東のタイムゾーンで、2004 年 2 月 27 日 午後
11630 2 時 19 分 13 秒 から 489,392,193 ナノ秒経過した瞬間を指定することに
11631 なる。@xref{Date input formats}.  精度の高いタイムスタンプを
11632 サポートしていないファイルシステムでは、精度の超過分は単に無視
11633 される。
11634
11635 @item -f
11636 @opindex -f
11637 @cindex BSD @command{touch} compatibility
11638 何もしない。BSD 版の @command{touch} との互換性のためにある。
11639
11640 @item -h
11641 @itemx --no-dereference
11642 @opindex -h
11643 @opindex --no-dereference
11644 @cindex symbolic links, changing time
11645 @findex lutimes
11646 シンボリックリンクが参照しているファイルではなく、シンボリック
11647 リンクのタイムスタンプの変更を試みる。このオプションを使用すると、
11648 空のファイルは作成されないが、ファイルが存在しないという警告まで
11649 出ないようにするには、@option{-c} オプションも併せて使用する必要がある。
11650 すべてのシステムが、シンボリックリンクのタイムスタンプの変更を
11651 サポートしているわけではない。なぜならば、POSIX 2008 までは、
11652 下層で動いているシステムに対して、そうした動作のサポートを要求
11653 していなかったからである。また、システムによっては、シンボリック
11654 リンクは、調べるだけでアクセス日時が変わってしまうので、変更の
11655 結果が後々まで残って観察できるのは、更新日時だけだというものも
11656 ある。なお、このオプションを @option{-r} オプションと一緒に使用すると、
11657 参照するタイムスタンプが、リンクが指しているファイルからではなく、
11658 シンボリックリンクから取得される。
11659
11660 @item -m
11661 @itemx --time=mtime
11662 @itemx --time=modify
11663 @opindex -m
11664 @opindex --time
11665 @opindex mtime@r{, changing}
11666 @opindex modify @r{time, changing}
11667 更新日時 (modification time) のみ変更する。
11668
11669 @item -r @var{file}
11670 @itemx --reference=@var{file}
11671 @opindex -r
11672 @opindex --reference
11673 現在の日時の代わりに、参照ファイル @var{file} の日時を使用する。この
11674 オプションを @option{--date=@var{time}} (@option{-d @var{time}}) オプションと組み合わせて
11675 使うと、@var{time} が相対時間で指定されている場合は、参照ファイル @var{file}
11676 の日時がその基点となるが、それ以外の場合は、@var{file} の日時は無視され
11677 る。たとえば、@samp{-r foo -d '-5 seconds'} は、@file{foo} のタイムスタンプ
11678 より 5 秒前のタイムスタンプを指定している。@var{file} がシンボリック
11679 リンクの場合は、@option{-h} が同時に有効になっていないかぎり、参照する
11680 タイムスタンプは、シンボリックリンクの参照先から取得される。
11681
11682 @item -t [[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]
11683 @cindex leap seconds
11684 現在の日時の代わりに、@option{-t} オプションの引数を使用する (引数の構成
11685 は、4 桁または 2 桁の年 (省略可)、月、日、時、分、秒 (秒も省略可)
11686 である)。年が 2 桁のみ指定された場合、0 @dots{} 68 の範囲の年ならば、
11687 @var{cc} は 20 であり、69 @dots{} 99 の範囲の年では、@var{cc} は 19 である。
11688 年が全く指定されない場合は、引数は今年の日付だと解釈される。閏秒に
11689 対応している例外的なシステムでは、@var{ss} が @samp{60} のこともありえる。
11690
11691 @end table
11692
11693 @vindex _POSIX2_VERSION
11694 古めのシステムでは、@command{touch} は次のような旧式の書式もサポートして
11695 いる。すなわち、@option{-d}, @option{-r}, @option{-t} のいづれによってもタイムスタンプが指定
11696 されていず、しかも、2 個以上の @var{file} が指定されていて、最初の @var{file} が
11697 @samp{@var{mmddhhmm}[@var{yy}]} の形を持ち、それが (@var{yy} が存在するなら、それを先頭に
11698 移せば) @option{-t} オプションに対する有効な引数と見なすことができる場合に、
11699 その引数の表している年度が 1969--1999 の範囲にあるならば、その引数を
11700 ファイル名ではなく、他のファイルに適用する日時と解釈する、というもの
11701 である。この旧式の動作は、環境変数 @env{_POSIX2_VERSION} によって有効に
11702 したり、無効にしたりできるが (@pxref{Standards conformance})、移植を
11703 考慮したスクリプトでは、動作がこの環境変数に依存するコマンドの使用は
11704 避けるべきである。たとえば、二通りの解釈ができる @samp{touch 12312359 main.c}
11705 を使うより、@samp{touch ./12312359 main.c} や @samp{touch -t 12312359 main.c} を
11706 使用した方がよい。
11707
11708 @exitstatus
11709
11710
11711 @node Disk usage
11712 @chapter ディスク使用量
11713
11714 @cindex disk usage
11715
11716 データをいくらでも無限に入れることのできるディスクはない。この章で説明
11717 するコマンドには、使用しているディスク容量や利用可能なディスク容量を報告
11718 するもの、それ以外のファイル情報やファイルステータス情報を報告するもの、
11719 それに、バッファの内容をディスクに書き込むものがある。
11720
11721 @menu
11722 * df invocation::            ファイルシステムのディスク使用量を報告する。
11723 * du invocation::            ファイルのディスク使用量を概算する。
11724 * stat invocation::          ファイルやファイルシステムのステータスを報告する。
11725 * sync invocation::          メモリとディスクを同期させる。
11726 * truncate invocation::      ファイルサイズの短縮・伸長を行う。
11727 @end menu
11728
11729
11730 @node df invocation
11731 @section @command{df}: ファイルシステムのディスク使用状態を報告する
11732
11733 @pindex df
11734 @cindex file system disk usage
11735 @cindex disk usage by file system
11736
11737 @command{df} は、ファイルシステムごとに、使用されているディスク容量と利用可能な
11738 ディスクス容量を報告する。
11739 @sp 1
11740 書式:
11741
11742 @example
11743 df [@var{option}]@dots{} [@var{file}]@dots{}
11744 @end example
11745
11746 引数を指定しないと、@command{df} は、現在マウントされているすべてのファイル
11747 システム (ファイルシステムのタイプを問わない) について、使用されている
11748 ディスク容量と、利用可能なディスク容量を報告する。引数が指定されている
11749 場合は、引数として指定された各 @var{file} が存在するファイルシステムについて
11750 報告する。
11751
11752 通常、ディスク容量は 1024 バイトを 1 単位として表示するが、この動作は
11753 変更することができる (@pxref{Block size})。なお、小数点以下は切り上げて
11754 整数にする。
11755
11756 bind マウントについては、引数が指定されていない場合に @command{df} が
11757 表示するのは、そのデバイスに関する統計情報のうち、ファイルシステムの
11758 リスト中で (すなわち、@var{mtab} 中で) マウントポイントの名前が最も短い
11759 ものに関する情報のみである。すなわち、@option{-a} オプションが指定されて
11760 いないときは、情報が重複するエントリは表示しない。
11761
11762 同じ理屈で、ダミーの擬似デバイスについては、そのマウントポイントに
11763 対する別のマウントエントリが存在し、それが実在のブロックデバイスの
11764 ものであり、しかもデバイス番号が同じ場合、@command{df} は擬似デバイスの
11765 マウントエントリの方は省略する。たとえば、ブート初期に作成される
11766 擬似ファイルシステムの @samp{rootfs} は、実際のルートデバイスがすでに
11767 マウントされていれば、デフォルトでは表示されない。
11768
11769 @cindex disk device file
11770 @cindex device file, disk
11771 引数 @var{file} がスペシャルファイルに還元され、そのスペシャルファイル
11772 上に存在するファイルシステムが現在マウントされている場合、@command{df} が
11773 表示するのは、そのファイルシステムの利用可能な容量であって、デバイス・
11774 ノードが存在するファイルシステムの利用可能な容量ではない。また、GNU の
11775 @command{df} は、マウントされていないファイルシステムのディスク使用量を測定
11776 しようとはしない。なぜなら、ほとんどのファイルシステムにおいて、そういう
11777 ことを行うには、ファイルシステムの構造について他と全く共通性のない内奥の
11778 知識が必要だからである。
11779 @sp 1
11780 (訳注: このパラグラフの前半については、実際にはもう少し複雑である。
11781 確かに、/dev/sda5 が /home にマウントされているとき (ついでに、
11782 /dev/HOME が /dev/sda5 のシンボリックリンクだとしよう)、@samp{df /dev/sda5}
11783 や @samp{df /dev/HOME} は、/dev/sda5 の情報を表示する。しかし、
11784 ルートデバイスの場合は、事情が異なる。訳者の手元の linux-3.2.0 に
11785 coreutils-8.22 という環境で /dev/sda3 が / にマウントされている場合、
11786 @samp{df /dev/sda3} は、/dev/sda3 上にあるファイルシステムではなく、/dev に
11787 マウントされた udev ファイルシステムの情報を表示するのである。カーネルや
11788 coreutils のバージョンによって動作が微妙に違うかもしれないので、実際に
11789 動かして確認することをお勧めする。)
11790
11791 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11792
11793 @table @samp
11794
11795 @item -a
11796 @itemx --all
11797 @opindex -a
11798 @opindex --all
11799 @cindex automounter file systems
11800 @cindex ignore file systems
11801 一覧表示にダミーのファイルシステムを含める。そうしたものは、デフォルト
11802 の表示では省略されている。たいていの場合、そうしたファイルシステムは、
11803 たとえばオートマウンタのエントリのような、特殊な用途のための擬似
11804 ファイルシステムである。
11805
11806 @item -B @var{size}
11807 @itemx --block-size=@var{size}
11808 @opindex -B
11809 @opindex --block-size
11810 @cindex file system sizes
11811 @var{size} によって単位の大きさを変更してから、サイズを表示する (@pxref{Block size})。
11812 たとえば、@option{-BG} と指定すれば、1,073,741,824 バイト
11813 を 1 単位として、サイズを表示する。
11814
11815 @item --total
11816 @opindex --total
11817 @cindex grand total of disk size, usage and available space
11818 すべての引数を処理した後で、全引数からなる総計を表示する。
11819 このオプションを使用すれば、ディスクの容量、使用した量、使用可能
11820 な量について、リストされたすべてのデバイスを合わせた総量を知ること
11821 ができる。
11822
11823 総計の行において @command{df} は @var{source} の列に @samp{"total"} と表示し、
11824 @var{target}
11825 の列に @samp{"-"} という文字を表示する (訳注: @var{source}, @var{target} などの列に
11826 ついては、@option{--output} の説明を参照していただきたい)。@var{source} の列が
11827 存在しない場合は、@var{target} の列が存在すれば、@command{df} は @var{target} の列に
11828 @samp{"total"} と表示する。
11829
11830 @optHumanReadable
11831
11832 @item -H
11833 @opindex -H
11834 @option{--si} オプションと同じである。
11835
11836 @item -i
11837 @itemx --inodes
11838 @opindex -i
11839 @opindex --inodes
11840 @cindex inode usage
11841 ブロックの使用量ではなく、inode の使用情報を一覧表示する。inode
11842 (index node の略称) には、ファイルの所有者、許可属性、タイム
11843 スタンプ、ディスク上の位置といった、ファイルに関する情報が含まれ
11844 ている。
11845
11846 @item -k
11847 @opindex -k
11848 @cindex kibibytes for file system sizes
11849 デフォルトのブロックサイズがどうなっていようと、1 ブロック 1024
11850 バイトでサイズを表示する (@pxref{Block size})。このオプションは @option{--block-size=1K}
11851 に等しい。
11852
11853 @item -l
11854 @itemx --local
11855 @opindex -l
11856 @opindex --local
11857 @cindex file system types, limiting output to certain
11858 一覧表示するのをローカルのファイルシステムに限定する。デフォルトでは、
11859 リモートのファイルシステムも表示される。
11860
11861 @item --no-sync
11862 @opindex --no-sync
11863 @cindex file system space, retrieving old data more quickly
11864 使用量に関するデータを取得する前に @code{sync} システムコールを実行
11865 しない。そのため、多数のディスクを搭載しているシステムでは、@command{df}
11866 の実行速度が目に見えて向上するが、システムによっては (特に SunOS
11867 では)、出力結果がほんの少し古いものになるかもしれない。これが
11868 デフォルトの動作である。
11869
11870 @item --output
11871 @itemx @w{@kbd{--output}[=@var{field_list}]}
11872 @opindex --output
11873 @var{field_list} で定義した出力フォーマットを使用する。@var{field_list} を省略
11874 した場合は、すべてのフィールドを表示する。後者の場合、列の順序は、
11875 以下に挙げているフィールドの説明の順序と同じである。
11876
11877 @option{--output} オプションは、@option{-i}, @option{-P}, @option{-T} のどのオプションとも
11878 一緒に使うことができない。
11879
11880 @var{field_list} は、@command{df} の出力に含まれることになる、コンマで区切った
11881 列のリストであり、このリストによって出力する列の順序を制御する
11882 ことができる。従って、各フィールドは任意の場所に置くことができるが、
11883 一度しか使うことができない。
11884
11885 @var{field_list} で使える有効なフィールドの名前は、次のものである。
11886 @table @samp
11887 @item source
11888 マウントポイントにマウントする対象。たいていはデバイス。
11889 @item fstype
11890 ファイルシステムのタイプ。
11891
11892 @item itotal
11893 inode の総数。
11894 @item iused
11895 使用 inode 数。
11896 @item iavail
11897 使用可能な inode 数。
11898 @item ipcent
11899 @var{iused} を @var{itotal} で割ったパーセント表示。
11900
11901 @item size
11902 ブロックの総数。
11903 @item used
11904 使用ブロック数。
11905 @item avail
11906 使用可能なブロック数。
11907 @item pcent
11908 @var{used} を @var{size} で割ったパーセント表示。
11909
11910 @item file
11911 ファイル名をコマンドラインで指定した場合、そのファイル名。
11912 (coreutils-8.22 の新機能)
11913 @item target
11914 マウントポイント。
11915 @end table
11916
11917 ブロックや inode の統計情報を表すフィールドは、他の場合と同じく、
11918 @option{-h} のような数値の大きさを調整するオプションの影響を受ける。
11919
11920 @var{field_list} の定義は、複数の @option{--output} オプションを使用して、
11921 分割しても構わない。
11922
11923 @example
11924 #!/bin/sh
11925 # TARGET (すなわち、マウントポイント) に続けて、そのブロックや 
11926 # inode の使用状態をパーセントで表示する。
11927 df --out=target --output=pcent,ipcent
11928
11929 # 表示できるすべてのフィールドを表示する。
11930 df --o
11931 @end example
11932
11933
11934 @item -P
11935 @itemx --portability
11936 @opindex -P
11937 @opindex --portability
11938 @cindex one-line output format
11939 @cindex POSIX output format
11940 @cindex portable output format
11941 @cindex output format, portable
11942 POSIX の出力形式を使用する。デフォルトの形式に似ているが、次の
11943 点で異なっている。
11944
11945 @enumerate
11946 @item
11947 各ファイルシステムついての情報が、常にぴったり 1 行で表示
11948 され、マウントされるデバイスが、それのみで 1 行を占めることが
11949 ない。そのため、マウントされるデバイスの名前の長さが 20 字を
11950 越えると (たとえば、ネットワーク・マウントの場合にそういう
11951 ことがありそうだ)、各項目の列がずれることになる。
11952
11953 @item
11954 ヘッダ行の項目名が、POSIX に準拠したものになる。
11955
11956 @item
11957 デフォルトのブロックサイズや出力の書式が、環境変数
11958 @env{DF_BLOCK_SIZE}, @env{BLOCK_SIZE}, @env{BLOCKSIZE} の影響を受けなく
11959 なる。とは言え、デフォルトのブロックサイズについては、
11960 @env{POSIXLY_CORRECT} の影響だけは、やはり受ける。すなわち、
11961 @env{POSIXLY_CORRECT} が設定されていれば、ブロックサイズは
11962 512 バイトであり、さもなければ 1024 バイトである。 @xref{Block size}.
11963 @end enumerate
11964
11965 @optSi
11966
11967 @item --sync
11968 @opindex --sync
11969 @cindex file system space, retrieving current data more slowly
11970 使用量に関するデータを取得する前に `sync' システムコールを実行
11971 する。システムによっては (特に SunOS では)、そうすることでより
11972 最近の結果が得られるが、一般的に言って、このオプションを使用すると、
11973 @command{df} の実行速度がかなり低下する。ファイルシステムをたくさんマウント
11974 している場合や、作業が頻繁に行われているファイルシステムでは、
11975 とりわけ遅くなる。
11976
11977 @item -t @var{fstype}
11978 @itemx --type=@var{fstype}
11979 @opindex -t
11980 @opindex --type
11981 @cindex file system types, limiting output to certain
11982 一覧表示するファイルシステムを @var{fstype} というタイプに限定する。
11983 @option{-t} オプションを複数回使うことによって、複数のタイプのファイル
11984 システムを指定することができる。デフォルトでは、いかなるタイプの
11985 ファイルシステムも除外しない。
11986
11987 @item -T
11988 @itemx --print-type
11989 @opindex -T
11990 @opindex --print-type
11991 @cindex file system types, printing
11992 各ファイルシステムのタイプを表示する。このとき表示されるタイプは、
11993 @option{-t} や @option{-x} オプションを使って、一覧表示に含めたり、一覧表示から
11994 除外したりできるタイプと同じものである。すなわち、表示されるタイプ
11995 は何であれ、システムによってサポートされているということだ。以下に、
11996 よく見受けられるタイプの名前をいくつか挙げておく (当然ながら、
11997 ここに挙げるものがすべてではない)。
11998
11999 @table @samp
12000
12001 @item nfs
12002 @cindex NFS file system type
12003 NFS ファイルシステム。すなわち、ネットワーク越しにほかの
12004 マシンからマウントしているファイルシステム。このタイプ名は、
12005 あらゆるシステムで共通して使われているようである。
12006
12007 @item ext2@r{, }ext3@r{, }ext4@r{, }xfs@r{, }btrfs@dots{}
12008 @cindex Linux file system types
12009 @cindex local file system types
12010 @opindex ext2 @r{file system type}
12011 @opindex ext3 @r{file system type}
12012 @opindex ext4 @r{file system type}
12013 @opindex xfs @r{file system type}
12014 @opindex btrfs @r{file system type}
12015 ローカルでマウントしているハードディスクのファイルシステム。
12016 (ローカルのマウントでは、システムが複数のタイプをサポートして
12017 いることもある。たとえば、Linux がそうだ。)
12018
12019 @item iso9660@r{, }cdfs
12020 @cindex CD-ROM file system type
12021 @cindex DVD file system type
12022 @cindex ISO9660 file system type
12023 @opindex iso9660 @r{file system type}
12024 @opindex cdfs @r{file system type}
12025 CD や DVD ドライブのファイルシステム。HP-UX は @samp{cdfs} を
12026 使用し、ほかのシステムのほとんどは @samp{iso9660} を使用している。
12027
12028 @item ntfs@r{,}fat
12029 @cindex NTFS file system
12030 @cindex DOS file system
12031 @cindex MS-DOS file system
12032 @cindex MS-Windows file system
12033 @opindex ntfs @r{file system file}
12034 @opindex fat @r{file system file}
12035 MS-Windows や MS-DOS で使用されるファイルシステム。
12036
12037 @end table
12038
12039 @item -x @var{fstype}
12040 @itemx --exclude-type=@var{fstype}
12041 @opindex -x
12042 @opindex --exclude-type
12043 一覧表示するファイルシステムを @var{fstype} というタイプ以外のものに
12044 限定する。@option{-x} オプションを複数回使うことによって、複数のタイプの
12045 ファイルシステムを除外することができる。デフォルトでは、いかなる
12046 タイプのファイルシステムも除外しない。
12047
12048 @item -v
12049 無視される。System V 版の @command{df} との互換のためにある。
12050
12051 @end table
12052
12053 @exitstatus 実行に失敗
12054 しても、何もメッセージが出力されないことがある。そこで、そうしたときに、
12055 ディレクトリ @var{dir} が @samp{ext3} や @samp{reiserfs} というタイプのファイルシステム
12056 上にあるかどうかを調べるには、@samp{df -t ext3 -t reiserfs @var{dir}} といった
12057 コマンドを実行して、終了ステータスを検査すればよい。
12058
12059 ファイルシステムのタイプを判断するには、ファイルシステムのリスト
12060 (@var{mtab}) が必要になる。従って、ファイルシステムのリストを読み込む
12061 ことができないときに、ファイル名引数とともに @option{-a}, @option{-l}, @option{-t}, @option{-x}
12062 といったオプションが一つ以上使われた場合、@command{df} は実行に失敗する。
12063
12064
12065 @node du invocation
12066 @section @command{du}: ファイルのディスク使用量を概算する
12067
12068 @pindex du
12069 @cindex file space usage
12070 @cindex disk usage for files
12071
12072 @command{du} は、指定したファイルのディスク使用量を報告する。引数がディレ
12073 クトリの場合は、サブディレクトリごとのディスク使用量も報告する。
12074 @sp 1
12075 書式:
12076
12077 @example
12078 du [@var{option}]@dots{} [@var{file}]@dots{}
12079 @end example
12080
12081 引数を指定しないと、@command{du} は、カレントディレクトリのディスク使用量を
12082 報告する。通常、ディスク使用量は 1024 バイトを 1 単位として表示するが、
12083 この動作は変更することができる (@pxref{Block size})。なお、小数点以下
12084 は、切り上げて整数にする。
12085
12086 2 個以上のハードリンクが同一のファイルを指している場合は、そのうちの
12087 1 個のみが計算の対象になる。引数 @var{file} の順番によって、どのリンクが計算の
12088 対象になるかが変わってくるので、引数の順番を変更すると、@command{du} が出力する
12089 数値が変化するかもしれない。
12090
12091 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
12092
12093 @table @samp
12094
12095 @optNull{du}
12096
12097 @item -a
12098 @itemx --all
12099 @opindex -a
12100 @opindex --all
12101 ディレクトリだけでなく、すべてのファイルについて使用量を表示する。
12102
12103 @item --apparent-size
12104 @opindex --apparent-size
12105 ディスクの使用量ではなく、見かけのサイズを表示する。ファイルの
12106 見かけのサイズとは、通常ファイルに対して @code{wc -c}、あるいは、もっと
12107 普通に @code{ls -l --block-size=1} や @code{stat --format=%s} を実行したとき
12108 に返されるバイト数である。たとえば、@samp{zoo} という単語を改行を付けず
12109 に書き込んだファイルなら、当然ながら、見かけのサイズは 3 になる。
12110 だが、そうした小さなファイルも、そのファイルが存在するファイル
12111 システムのタイプと設定次第で、0 から 16 KiB、あるいは、それ以上の
12112 ディスクスペースを占有するかもしれないのだ。もっとも、穴空きファ
12113 イル (sparse file) の場合は事情が別である。たとえば、
12114
12115 @example
12116 dd bs=1 seek=2GiB if=/dev/null of=big
12117 @end example
12118
12119 @noindent
12120 上記のコマンドで作成した穴空きファイルは、見かけのサイズこそ 2 GiB
12121 だが、最近のほとんどのシステムでは、実際に使用するディスクスペースは、
12122 ほとんど 0 である。
12123
12124 @item -B @var{size}
12125 @itemx --block-size=@var{size}
12126 @opindex -B
12127 @opindex --block-size
12128 @cindex file sizes
12129 @var{size} によって単位の大きさを変更してから、サイズを表示する (@pxref{Block size})。
12130 たとえば、@option{-BG} と指定すれば、1,073,741,824 バイト
12131 を 1 単位として、サイズを表示する。
12132
12133 @item -b
12134 @itemx --bytes
12135 @opindex -b
12136 @opindex --bytes
12137 @code{--apparent-size --block-size=1} と同じ。
12138
12139 @item -c
12140 @itemx --total
12141 @opindex -c
12142 @opindex --total
12143 @cindex grand total of disk space
12144 すべての引数を処理した後で、全引数からなる総計を表示する。
12145 このオプションを使用すれば、指定したファイルやディレクトリについて
12146 ディスク使用量の合計を知ることができる。
12147
12148 @item -D
12149 @itemx --dereference-args
12150 @opindex -D
12151 @opindex --dereference-args
12152 コマンドラインで引数に指定されたシンボリックリンクの参照を行う。
12153 コマンドライン引数以外のシンボリックリンクには影響がない。この
12154 オプションは、@file{/usr/tmp} のような、シンボリックリンクであることが
12155 多いディレクトリのディスク使用量を調べるときに、重宝である。
12156
12157 @item -d @var{depth}
12158 @itemx --max-depth=@var{depth}
12159 @opindex -d @var{depth}
12160 @opindex --max-depth=@var{depth}
12161 @cindex limiting output of @command{du}
12162 ディレクトリ階層の基点 (訳注: 要するに、コマンドラインで指定
12163 されたディレクトリ) から最大 @var{DEPTH} 段階下がったところまでにある
12164 各ディレクトリについて、ディスク使用量の合計を表示する (@option{--all}
12165 オプションが付いているときは、ファイルについても表示する)。基点
12166 自体は段階 0 なので、@code{du --max-depth=0} は @code{du -s} と同じことに
12167 なる。
12168
12169 @c --files0-from=FILE
12170 @filesZeroFromOption{du,, @ @option{--total} (@option{-c}) オプションを使用した結果}
12171
12172 @item -H
12173 @opindex -H
12174 @option{--dereference-args} (@option{-D}) と同じである。
12175
12176 @optHumanReadable
12177
12178 @item --inodes
12179 @opindex --inodes
12180 @cindex inode usage, dereferencing in @command{du}
12181 ブロックの使用状態ではなく、inode の使用状態をリストする。
12182 このオプションが役に立つのは、多くのファイルを収納しているために、
12183 ファイルシステムの inode スペースを大量に消費しているディレクトリ
12184 を探すときである (@command{df} の @option{--inodes} オプションも参照すること)。
12185 このオプションは、@option{-a}, @option{-c}, @option{-h}, @option{-l}, @option{-s},
12186 @option{-S}, @option{-t}, @option{-x}
12187 といったオプションと組み合わせて使ってもよい。しかし、ブロック
12188 サイズ関係の他のオプション、たとえば、@option{-b}, @option{-m}, @option{--apparent-size}
12189 などを渡しても、無視される。(coreutils-8.22 の新機能)
12190
12191 @item -k
12192 @opindex -k
12193 @cindex kibibytes for file sizes
12194 デフォルトのブロックサイズがどうなっていようと、1 ブロック 1024
12195 バイトでサイズを表示する (@pxref{Block size})。このオプションは @option{--block-size=1K}
12196 に等しい。
12197
12198 @item -L
12199 @itemx --dereference
12200 @opindex -L
12201 @opindex --dereference
12202 @cindex symbolic links, dereferencing in @command{du}
12203 シンボリックリンクの参照を行う (リンク自体のディスク使用量では
12204 なく、リンクが指しているファイルやディレクトリの使用量を表示する)。
12205
12206 @item -l
12207 @itemx --count-links
12208 @opindex -l
12209 @opindex --count-links
12210 @cindex hard links, counting in @command{du}
12211 すべてのファイルを計算に入れる。すなわち、(ハードリンクとして) 前に
12212 現れたことがあっても、計算に入れる。
12213
12214 @item -m
12215 @opindex -m
12216 @cindex mebibytes for file sizes
12217 デフォルトのブロックサイズを変更し、1 ブロック 1,048,576 バイトの
12218 ブロック数でサイズを表示する (@pxref{Block size})。
12219 このオプションは、@option{--block-size=1M} と同じである。
12220
12221 @item -P
12222 @itemx --no-dereference
12223 @opindex -P
12224 @opindex --no-dereference
12225 @cindex symbolic links, dereferencing in @command{du}
12226 @command{du} が出会った各シンボリックリンクについて、シンボリック自体の
12227 使用ディスクスペースを計算する。
12228
12229 @item -S
12230 @itemx --separate-dirs
12231 @opindex -S
12232 @opindex --separate-dirs
12233 通常、(@option{--summarize} オプションを使用しない場合の) @command{du} の出力に
12234 おいて、@var{d} というディレクトリ名の隣に表示されるサイズは、@var{d} 以下に
12235 あるすべてのエントリのサイズの合計に、@var{d} 自体のサイズを加えたもの
12236 である。それに対して、@option{--separate-dirs} オプションを指定すると、
12237 @var{d} というディレクトリ名に対して報告されるサイズは、いかなるサブ
12238 ディレクトリのサイズも含まないものになる。
12239
12240 @optSi
12241
12242 @item -s
12243 @itemx --summarize
12244 @opindex -s
12245 @opindex --summarize
12246 各引数についてその合計ディスク使用量のみを表示する (訳注: すなわち、
12247 引数がディレクトリの場合、そのサブディレクトリごとの
12248 情報まで表示しない)。
12249
12250 @item -t @var{size}
12251 @itemx --threshold=@var{size}
12252 @opindex -t
12253 @opindex --threshold
12254 指定された @var{size} を目安にして、表示する対象を取捨する。@var{size} は、
12255 通常モードではディスク使用量を指し (@pxref{Block size})、@option{--inodes}
12256 オプションと組み合わせた場合は inode 使用数を指す。(訳注: ディスク
12257 使用量の目安として使う場合、@var{size} の単位は、デフォルトではバイト
12258 である。もちろん、K, M, G などの接尾辞を付けることもできる。)
12259
12260 @var{size} が正の数ならば、@command{du} はサイズがそれ以上である対象のみを
12261 表示する。
12262
12263 @var{size} が負の数ならば、@command{du} はサイズがそれ以下である対象のみを
12264 表示する。
12265
12266 GNU の @command{find} を使えば、特定のサイズのファイルを見つけることが
12267 できる。それに対して、@command{du} の @option{--threshold} を使うと、ディレクトリ
12268 も指定サイズに基づいて篩い分けることができるのである。
12269
12270 @option{--threshold} オプションは、@option{--apparent-size} オプションと
12271 組み合わせることができるのに留意していただきたい。その場合は、
12272 見かけのサイズに基づいて表示対象を絞り込むことになる。
12273
12274 @option{--threshold} オプションは、@option{--inodes} オプションと組み合わせる
12275 こともできる。その場合は、inode 数に基づいて表示対象を絞り込む
12276 ことになる。
12277
12278 200 メガバイト以上のサイズを持つディレクトリを捜すには、
12279 @option{--threshold} オプションを次のように使えばよいだろう。
12280
12281 @example
12282 du --threshold=200MB
12283 @end example
12284
12285 見かけのサイズが 500 バイト以下のディレクトリやファイルを捜すには
12286 (@option{-a} を使っていることに注意)、@option{--threshold} を次のように使えば
12287 よい。
12288
12289 @example
12290 du -a -t -500 --apparent-size
12291 @end example
12292
12293 ルートファイルシステム上にあるディレクトリで、20000 以上の inode
12294 を使用しているものを、/ 以下のディレクトリ階層で捜すには、
12295 @option{--threshold} を次のように使えばよい。
12296
12297 @example
12298 du --inodes -x --threshold=20000 /
12299 @end example
12300
12301
12302 @item --time
12303 @opindex --time
12304 @cindex last modified dates, displaying in @command{du}
12305 ディレクトリやそのサブディレクトリに存在するファイルについて表示
12306 する際に、その最終更新日時 (modification time) も表示する。
12307 @sp 1
12308 (訳注: 一つ留意していただきたいことがある。ディレクトリのタイム
12309 スタンプについては、そのディレクトリ以下にあるファイルのうち
12310 (そのディレクトリ直下のファイルとはかぎらない)、最終更新日時が
12311 もっとも新しいファイルのタイムスタンプと同一のものが表示される。
12312 すなわち、ディレクトリのタイムスタンプは、@samp{ls -l} で表示される
12313 ものとは違うことがあるわけだ。このオプションや、そのバリエーション
12314 である次の二つのオプションは、あるディレクトリ以下を最後に使用
12315 したのはいつかを知るのに便利である。)
12316
12317 @item --time=ctime
12318 @itemx --time=status
12319 @itemx --time=use
12320 @opindex --time
12321 @opindex ctime@r{, show the most recent}
12322 @opindex status time@r{, show the most recent}
12323 @opindex use time@r{, show the most recent}
12324 ディレクトリ以下にあるファイルについて表示する際に、最終更新日時
12325 ではなく、最終ステータス変更日時 (inode 中の @samp{ctime}) を表示する。
12326 @sp 1
12327 (訳注: 原文でもこの三つのオプションを等価なものとして並べているが、
12328 訳者としては、@option{--time=use} と等価なのは、@option{--time=ctime} ではなく、
12329 @option{--time=atime} ではないかと思う。ご自分で確かめていただきたい。)
12330
12331 @item --time=atime
12332 @itemx --time=access
12333 @opindex --time
12334 @opindex atime@r{, show the most recent}
12335 @opindex access time@r{, show the most recent}
12336 ディレクトリ以下にあるファイルについて表示する際に、最終更新日時
12337 ではなく、最終アクセス日時 (inode 中の @samp{atime}) を表示する。
12338
12339 @item --time-style=@var{style}
12340 @opindex --time-style
12341 @cindex time style
12342 タイムスタンプを @var{style} 形式で表示する。このオプションは、@option{--time}
12343 オプションと併せて指定したときにのみ効果がある。@var{style} は以下の一つ
12344 でなければならない。
12345
12346 @table @samp
12347 @item +@var{format}
12348 @vindex LC_TIME
12349 @var{format} を使って、タイムスタンプを表示する。その場合、@var{format}
12350 は、@command{date} コマンドの書式引数と同じように解釈される (@pxref{date invocation})。
12351 たとえば、@option{--time-style="+%Y-%m-%d %H:%M:%S"} と指定すると、
12352 @command{du} の表示するタイムスタンプは、
12353 @samp{2002-03-30 23:45:56} のようになる。@command{date} の場合と同様、
12354 @var{format} の解釈は、@env{LC_TIME} ロケール・カテゴリの影響を受ける。
12355
12356 @item full-iso
12357 タイムスタンプを省略なしで表示する。すなわち、ISO 8601 の
12358 日付、時刻、タイムゾーンという書式を nanosecond (10 億分の 1 秒)
12359 の精度で使用するわけだ。一例を挙げると、@samp{2002-03-30 23:45:56.477817180 -0700}
12360 といった表示になる。この形式は、
12361 @samp{+%Y-%m-%d %H:%M:%S.%N %z} と同じである。
12362
12363 @item long-iso
12364 ISO 8601 の書式で日付と時刻を分の単位まで表示する。たとえば、
12365 @samp{2002-03-30 23:45}。このタイムスタンプは、@samp{full-iso} タイム
12366 スタンプより短く、日常作業にはたいてい十分である。この形式は
12367 @samp{+%Y-%m-%d %H:%M} と同じである。
12368
12369 @item iso
12370 タイムスタンプに ISO 8601 書式の日付を表示する。たとえば、
12371 @samp{2002-03-30} といった具合である。この形式は、@samp{+%Y-%m-%d} と
12372 同じである。
12373 @end table
12374
12375 @vindex TIME_STYLE
12376 @option{--time-style} オプションのデフォルト値は、環境変数 @env{TIME_STYLE} を
12377 使って指定することができる。@env{TIME_STYLE} が設定されていない場合、
12378 デフォルトの形式は @samp{long-iso} である。@command{ls} と共通の @env{TIME_STYLE} を
12379 使えるようにするため、@samp{+} で始まる @env{TIME_STYLE} の値が、改行を
12380 含んでいる場合は、改行以後の文字は無視されることになる。また、
12381 @env{TIME_STYLE} の値が @samp{posix-} で始まる場合、@samp{posix-} は無視される。
12382 さらに、@env{TIME_STYLE} の値が @samp{locale} の場合、@env{TIME_STYLE} は無視
12383 される。
12384
12385 @item -X @var{file}
12386 @itemx --exclude-from=@var{file}
12387 @opindex -X @var{file}
12388 @opindex --exclude-from=@var{file}
12389 @cindex excluding files from @command{du}
12390 @option{--exclude} に似ているが、除外するパターンを @var{file} から 1 行につき
12391 1 パターン読み込む点が違う。@var{file} が @samp{-} なら、パターンを標準入力
12392 から読み込む。
12393
12394 @item --exclude=@var{pattern}
12395 @opindex --exclude=@var{pattern}
12396 @cindex excluding files from @command{du}
12397 再帰的な処理を行っているとき、@var{pattern} にマッチするサブディレクトリ
12398 やファイルをスキップする。たとえば、@code{du --exclude='*.o'} と指定
12399 すると、名前が @samp{.o} で終わるファイルを除外することになる。
12400
12401 @item -x
12402 @itemx --one-file-system
12403 @opindex -x
12404 @opindex --one-file-system
12405 @cindex one file system, restricting @command{du} to
12406 処理される引数が存在するファイルシステムとは別のファイルシステムに
12407 あるディレクトリをスキップする。
12408
12409 @end table
12410
12411 @cindex NFS mounts from BSD to HP-UX
12412 BSD システムでは、HP-UX システムから NFS マウントしているファイルに
12413 ついて、@command{du} は正確な値の半分のサイズを報告する。逆に、HP-UX システム
12414 では、BSD システムから NFS マウントしているファイルについて、@command{du} は
12415 正確な値の 2 倍のサイズを報告する。これは HP-UX にある欠陥のせいであり、
12416 HP-UX の @command{du} プログラムも、そのとばっちりを受けているのである。
12417
12418 @exitstatus
12419
12420
12421 @node stat invocation
12422 @section @command{stat}: ファイルやファイルシステムの状態を報告する
12423
12424 @pindex stat
12425 @cindex file status
12426 @cindex file system status
12427
12428 @command{stat} は指定されたファイルに関する情報を表示する。
12429 @sp 1
12430 書式:
12431
12432 @example
12433 stat [@var{option}]@dots{} [@var{file}]@dots{}
12434 @end example
12435
12436 オプションなしで実行すると、@command{stat} は指定されたファイルについて
12437 すべての情報を報告する。また、@command{stat} を使って、指定されたファイルが
12438 存在しているファイルシステムの情報を報告させることもできる。ファイルが
12439 リンクの場合は、リンクが指しているファイルについて情報を提供させること
12440 も可能だ。
12441
12442 @mayConflictWithShellBuiltIn{stat}
12443
12444 @table @samp
12445
12446 @item -L
12447 @itemx --dereference
12448 @opindex -L
12449 @opindex --dereference
12450 @cindex symbolic links, dereferencing in @command{stat}
12451 @command{stat} がシンボリックリンクを処理する方法を変更する。この
12452 オプションを付けると、@command{stat} は、引数中の各シンボリックリンク
12453 が参照しているファイルを操作の対象にする。このオプションがないと、
12454 @command{stat} が対象にするのは、引数のシンボリックリンクそのものになる。
12455
12456 @item -f
12457 @itemx --file-system
12458 @opindex -f
12459 @opindex --file-system
12460 @cindex file systems
12461 指定されたファイルそのものについての情報ではなく、そのファイルが
12462 存在しているファイルシステムについての情報を報告する。このオプション
12463 を指定すると、自動的に @option{-L} オプションも指定される。
12464
12465 @item -c
12466 @itemx --format=@var{format}
12467 @opindex -c
12468 @opindex --format=@var{format}
12469 @cindex output format
12470 デフォルトの書式の代わりに、@var{format} を使用する。@var{format} の末尾には
12471 自動的に改行が付けられるので、下記のようなコマンドを 2 個以上の
12472 @var{file} オペランドに対して実行すると、各オペランドあたり 1 行の
12473 出力を生じることになる。
12474 @example
12475 $ stat --format=%d:%i / /usr
12476 2050:2
12477 2057:2
12478 @end example
12479
12480 @item --printf=@var{format}
12481 @opindex --printf=@var{format}
12482 @cindex output format
12483 デフォルトの書式の代わりに、@var{format} を使用する。@option{--format} に似て
12484 いるが、バックスラッシュ・エスケープを解釈して変換する。また、
12485 行末に自動的に改行を付けることもしない。そこで、改行がしたければ、
12486 @var{format} の中で @samp{\n} を指定する必要がある。@option{--printf} を使って @file{/}
12487 と @file{/usr} のデバイス番号と inode 番号を表示するには、こんなふうに
12488 する。
12489 @example
12490 $ stat --printf='%d:%i\n' / /usr
12491 2050:2
12492 2057:2
12493 @end example
12494
12495 @item -t
12496 @itemx --terse
12497 @opindex -t
12498 @opindex --terse
12499 @cindex terse output
12500 情報を簡潔な形式で表示する。他のプログラムで解析するときに都合がよい。
12501
12502 @end table
12503
12504 @option{--format} や "@option{--printf} の @var{format} 中で、ファイルに対して使用できる
12505 書式指定子には以下のものがある。
12506
12507 @itemize @bullet
12508 @item %a - 8 進数で表現したアクセス権
12509 @item %A - 人間にわかりやすい形式で表現したアクセス権
12510 @item %b - 割り当てられているブロック数 (@samp{%B} を参照)
12511 @item %B - @samp{%b} の報告で使われる 1 ブロックのバイト数
12512 @item %C - ファイルの SELinux セキュリティ・コンテキスト (取得できる場合)
12513 @item %d - 10 進数で表現したデバイス番号
12514 @item %D - 16 進数で表現したデバイス番号
12515 @item %f - 16 進数で表現した Raw モード
12516 @item %F - ファイルの種類
12517 @item %g - 所有グループの ID 番号
12518 @item %G - 所有グループ名
12519 @item %h - ハードリンク数
12520 @item %i - Inode 番号
12521 @item %m - マウントポイント (下記の説明を参照)
12522 @item %n - ファイル名
12523 @item %N - 引用符で囲んだファイル名。シンボリックリンクなら、参照先も表示
12524 @item %o - I/O 転送サイズの最適値の提案
12525 @item %s - ファイル全体の大きさ。サイズはバイト数
12526 @item %t - 16 進数で表現したメジャー・デバイス番号 (下記参照)
12527 @item %T - 16 進数で表現したマイナー・デバイス番号 (下記参照)
12528 @item %u - 所有者のユーザ ID 番号
12529 @item %U - 所有者のユーザ名
12530 @item %w - ファイルの作成日時 (the birth time)。不明の場合は @samp{-} を表示
12531 @item %W - Unix 紀元からの秒数で表したファイルの作成日時、または @samp{0}
12532 @item %x - 最終アクセス日時 (atime)
12533 @item %X - Unix 紀元からの秒数で表した最終アクセス日時
12534 @item %y - 最終更新日時 (mtime)
12535 @item %Y - Unix 紀元からの秒数で表した最終更新日時
12536 @item %z - 最終ステータス変更日時 (ctime)
12537 @item %Z - Unix 紀元からの秒数で表した最終ステータス変更日時
12538 @end itemize
12539
12540 @samp{%t} や @samp{%T} という書式指定子は、stat(2) 構造体の st_rdev メンバ
12541 に対応するものであり、従って、キャラクタ・スペシャルファイルや
12542 ブロック・スペシャルファイルに対してしか動作が定義されていない。
12543 システムやファイルタイプによっては、st_rdev が他のものを表現する
12544 ために使われていることもありえる。
12545
12546 @samp{%W}, @samp{%X}, @samp{%Y}, @samp{%Z} では、ピリオドに続けて精度を書くことで、
12547 小数点以下何桁まで表示するかを指定することができる。たとえば、@samp{%.3X}
12548 と指定すると、最終アクセス日時がミリ秒の精度で出力される。ピリオド
12549 だけ指定して、精度を省略すると、@command{stat} は 9 桁を使用する。従って、
12550 @samp{%.X} は @samp{%.9X} と同じことになるわけだ。なお、余分な精度を捨てる際、
12551 タイムスタンプは負の無限大方向に切り下げられる (訳注: 日常の言葉で
12552 言うと、タイムスタンプのような正の数値の場合、指定された桁数より下の
12553 部分は切り捨てられるということ。以下の例を参照)。
12554
12555 @example
12556 0 で埋める:
12557   $ stat -c '[%015Y]' /usr
12558   [000001288929712]
12559 スペースで位置を揃える:
12560   $ stat -c '[%15Y]' /usr
12561   [     1288929712]
12562   $ stat -c '[%-15Y]' /usr
12563   [1288929712     ]
12564 精度指定:
12565   $ stat -c '[%.3Y]' /usr
12566   [1288929712.114]
12567   $ stat -c '[%.Y]' /usr
12568   [1288929712.114951834]
12569 @end example
12570
12571 @samp{%m} によって表示されるマウントポイントは、@command{df} によるマウント
12572 ポイントの出力とほぼ同じである。ただし、以下の点で異なっている。
12573 @itemize @bullet
12574 @item
12575 stat はデフォルトでは、シムリンクの参照を行わない (そのためには、
12576 @option{-L} を指定する必要がある)。
12577 @item
12578 引数としてデバイスノードが指定された場合、stat はファイルシステムの
12579 リスト中にそのノードを捜し求めたりはせず、デバイスノードそのものを
12580 動作の対象にする (訳注: すなわち、そのデバイス上に存在するファイル
12581 システムのマウントポイントではなく、デバイスノードそのもののマウント
12582 ポイントを表示する)。
12583 @item
12584 @cindex bind mount
12585 bind マウントされているファイルについては、stat はそのファイルが
12586 載っているデバイスの最初のマウントポイントではなく、bind マウントで
12587 指定された別名 (訳注: 原文は alias。@samp{mount --bind olddir newdir}
12588 における newdir のことか) の方を出力する。出力に変化がなくなる
12589 まで、再帰的に stat を呼び出せば、現在ベースになっているマウント
12590 ポイントを知ることができる。
12591 @sp 1
12592 (訳注: 訳者には意味不明。「現在ベースになっているマウントポイント
12593 (the current base mount point)」が、上記訳注の newdir のことなら、
12594 stat を再帰的に呼び出すまでもない。@samp{stat -c "%m" newdir/@var{FILE}} は、
12595 newdir を表示する。また the current base mount point が「根底にある
12596 (すなわち、デバイスを最初にマウントした) マウントポイント」のこと
12597 なら、stat を再帰的に呼び出しても、それを突き止めることはできない。
12598 ひょっとすると、書式指定子に @samp{%m} が追加された coreutils-8.6 以降の
12599 stat を linux-2.6 時代の古いカーネルと組み合わせて使ったときの動作
12600 を言っているのかもしれない。その場合は、@samp{stat -c "%m" newdir/@var{FILE}}
12601 は上記の olddir を出力するようだ。従って、そうした組み合わせでは、
12602 stat を再帰的に実行することで、最初にデバイスをマウントしたときの
12603 マウントポイントを知ることができる。)
12604 @end itemize
12605
12606 ファイルシステムの情報をリストする際には (すなわち、@option{--file-system}
12607 (@option{-f}) 使用時には)、書式指定子の別の一群を使わなければならない。
12608
12609 @itemize @bullet
12610 @item %a - スーパーユーザ以外にも利用できる未使用ブロック数
12611 @item %b - ファイルシステムの総データブロック数。
12612 @item %c - ファイルシステムの総 inode 数
12613 @item %d - ファイルシステムの未使用 inode 数
12614 @item %f - ファイルシステムの未使用ブロック数
12615 @item %i - 16 進数で表現したファイルシステム ID
12616 @item %l - ファイル名の最大長
12617 @item %n - ファイル名
12618 @item %s - ブロックサイズ (高速転送用)
12619 @item %S - 基本ブロックサイズ (ブロック計算用)
12620 @item %t - 16 進数で表現したファイルシステムのタイプ
12621 @item %T - 人間にわかりやすい形式で表現したファイルシステムのタイプ
12622 @end itemize
12623
12624 @vindex TZ
12625 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
12626 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
12627 いない場合は、システムのデフォルトのルールに従って表示される。
12628 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
12629 The GNU C Library Reference Manual}.
12630
12631 @exitstatus
12632
12633
12634 @node sync invocation
12635 @section @command{sync}: ディスク上のデータをメモリと同期する
12636
12637 @pindex sync
12638 @cindex synchronize disk and memory
12639
12640 @cindex superblock, writing
12641 @cindex inodes, written buffered
12642 @command{sync} は、メモリにバッファされているあらゆるデータをディスクに
12643 書き出す。そうした書き出しには、スーパーブロックの変更、 inode の
12644 変更、遅延読み書きを含むことができる (が、それだけに止まらない)。
12645 この機能はカーネルによって実装されていなければならない。@command{sync}
12646 プログラムは、@code{sync} システムコールを実行する以外、何もしないのである。
12647
12648 @cindex crashes and corruption
12649 カーネルは、(比較的遅い) ディスクの読み書きをできるだけしないで
12650 済ますために、メモリにデータを保持している。このことによって、動作速度
12651 が向上するが、コンピュータがクラッシュした場合、データが失われたり、
12652 ファイルシステムが壊れたりという結果が生じかねない。@command{sync} コマンドを
12653 使えば、メモリ上にあるすべてが間違いなくディスクに書き出されることに
12654 なる。
12655
12656 @option{--help} や @option{--version} を単独で使用することはできるが、それ以外の
12657 いかなる引数も無視される (@pxref{Common options})。
12658
12659 @exitstatus
12660
12661
12662 @node truncate invocation
12663 @section @command{truncate}: ファイルサイズの短縮・伸長を行う
12664
12665 @pindex truncate
12666 @cindex truncating, file sizes
12667
12668 @command{truncate} は、各 @var{file} のサイズを指定したサイズにまで短縮したり、引き
12669 伸ばしたりする。
12670 @sp 1
12671 書式:
12672
12673 @example
12674 truncate @var{option}@dots{} @var{file}@dots{}
12675 @end example
12676
12677 @cindex files, creating
12678 @var{file} が存在していないときは、作成する。
12679
12680 @cindex sparse files, creating
12681 @cindex holes, creating files with
12682 @var{file} が指定したサイズより大きい場合は、データのサイズを越える部分
12683 は失われる。@var{file} が指定したサイズより小さい場合は、ファイルは引き伸ば
12684 され、引き伸ばされた部分は、ゼロバイト (ASCII NUL) の連続に見えるよう
12685 になる (引き伸ばされた部分は、穴空きファイル (sparse file) の穴になる)。
12686
12687 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
12688
12689 @table @samp
12690
12691 @item -c
12692 @itemx --no-create
12693 @opindex -c
12694 @opindex --no-create
12695 ファイルが存在しない場合は、作成しない。
12696
12697 @item -o
12698 @itemx --io-blocks
12699 @opindex -o
12700 @opindex --io-blocks
12701 @var{size} をバイト数ではなく、@var{file} を構成する I/O ブロック数と見なす。
12702
12703 @item -r @var{rfile}
12704 @itemx --reference=@var{rfile}
12705 @opindex -r
12706 @opindex --reference
12707 @var{rfile} のサイズを基準に、各 @var{file} のサイズを揃える。
12708
12709 @item -s @var{size}
12710 @itemx --size=@var{size}
12711 @opindex -s
12712 @opindex --size
12713 各 @var{file} のサイズを @var{size} にする。@option{--io-blocks} が指定されていない
12714 場合、@var{size} はバイト数である。@multiplierSuffixesNoBlocks{size}
12715
12716 @var{size} の前に以下の記号の一つを置くと、現在のサイズを元にして、各 @var{file} のサイズを
12717 調節することができる。
12718 @example
12719 @samp{+}  => @var{size} だけ増やす
12720 @samp{-}  => @var{size} だけ減らす
12721 @samp{<}  => @var{size} 以下に
12722 @samp{>}  => @var{size} 以上に
12723 @samp{/}  => @var{size} の倍数に切り下げる
12724 @samp{%}  => @var{size} の倍数に切り上げる
12725 @end example
12726
12727 @end table
12728
12729 @exitstatus
12730
12731
12732 @node Printing text
12733 @chapter テキストの表示
12734
12735 @cindex printing text, commands for
12736 @cindex commands for printing text
12737
12738 この章では、テキスト文字列を表示するコマンドについて説明する。
12739
12740 @menu
12741 * echo invocation::          テキストを 1 行表示する。
12742 * printf invocation::        データを整形して表示する。
12743 * yes invocation::           中断されるまで文字列を表示する。
12744 @end menu
12745
12746
12747 @node echo invocation
12748 @section @command{echo}: テキストを 1 行表示する
12749
12750 @pindex echo
12751 @cindex displaying text
12752 @cindex printing text
12753 @cindex text, displaying
12754 @cindex arbitrary text, displaying
12755
12756 @command{echo} は、指定された @var{string} を標準出力に書き出す。その際、各 @var{string}
12757 の間に 1 個のスペースを置き、行末に改行を付け加える。
12758 @sp 1
12759 書式:
12760
12761 @example
12762 echo [@var{option}]@dots{} [@var{string}]@dots{}
12763 @end example
12764
12765 @mayConflictWithShellBuiltIn{echo}
12766
12767 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
12768 オプションはオペランドの前に置かなければならない。また、
12769 通常は特別な引数として使われる @samp{--} は、特別な意味を持たず、他の
12770 いかなる @var{string} とも同じように扱われる。
12771
12772 @table @samp
12773 @item -n
12774 @opindex -n
12775 出力の末尾に改行を付けない。
12776
12777 @item -e
12778 @opindex -e
12779 @cindex backslash escapes
12780 各 "@var{string} の中に以下に挙げるバックスラッシュでエスケープした
12781 文字があると、それを解釈して変換する。
12782
12783 @table @samp
12784 @item \a
12785 警告 (ベル)
12786 @item \b
12787 バックスペース
12788 @item \c
12789 この位置より後を出力しない
12790 @item \e
12791 エスケープ
12792 @item \f
12793 フォームフィード (form feed)
12794 @item \n
12795 改行 (newline)
12796 @item \r
12797 復帰 (carriage return)
12798 @item \t
12799 水平タブ
12800 @item \v
12801 垂直タブ
12802 @item \\
12803 バックスラッシュ
12804 @item \0@var{nnn}
12805 8 進数 @var{nnn} (0 桁から 3 桁までの 8 進数) で表される 8 ビットの
12806 値に対応する文字。@var{nnn} が 9 ビットの値だと、9 ビット目 (最上位
12807 ビット) は無視される。
12808 @item \@var{nnn}
12809 8 進数 @var{nnn} (1 桁から 3 桁までの 8 進数) で表される 8 ビットの
12810 値に対応する文字。@var{nnn} が 9 ビットの値だと、9 ビット目 (最上位
12811 ビット) は無視される。
12812 @item \x@var{hh}
12813 16 進数 @var{hh} (1 または 2 桁の 16 進数) で表される 8 ビットの
12814 値に対応する文字。
12815 @end table
12816
12817 @item -E
12818 @opindex -E
12819 @cindex backslash escapes
12820 各 @var{string} の中にあるバックスラッシュ・エスケープの解釈をしない。
12821 これがデフォルトである。@option{-e} と @option{-E} の両方が指定されている場合は、
12822 後で指定した方が効果を持つ。
12823
12824 @end table
12825
12826 @vindex POSIXLY_CORRECT
12827 環境変数 @env{POSIXLY_CORRECT} が指定されている場合に、@command{echo} の最初の
12828 引数が (単独の) @option{-n} 以外だと、@command{echo} はそうした引数をオプション
12829 として扱わずに、形がオプションに似た引数として出力する。たとえば、
12830 @code{echo -ne hello} は、単なる @samp{hello} ではなく、@samp{-ne hello} を出力する。
12831
12832 POSIX では、いかなるオプションのサポートも要求していない。また、
12833 POSIX では、@var{string} がバックスラッシュを含む場合や、最初の引数が @option{-n}
12834 の場合に、@command{echo} がどう振る舞うかは、実装側で決めることになっている。
12835 従って、他のシステムで使うことも考慮したプログラムで、行末の改行を
12836 省略したり、制御文字やバックスラッシュ・エスケープを出力したりする
12837 必要があるのならば、@command{echo} の代わりに @command{printf} コマンドを使用することを
12838 考えてもよい。@xref{printf invocation}.
12839
12840 @exitstatus
12841
12842
12843 @node printf invocation
12844 @section @command{printf}: データを整形して表示する
12845
12846 @pindex printf
12847 @command{printf} は、テキストを整形して表示する。
12848 @sp 1
12849 書式:
12850
12851 @example
12852 printf @var{format} [@var{argument}]@dots{}
12853 @end example
12854
12855 @command{printf} は、文字列 @var{format} を表示する。その際、C の @samp{printf} 関数と
12856 ほとんど同じやり方で、@samp{%} 書式指定子と @samp{\} エスケープシーケンスを解釈
12857 して、数値や文字列の引数 (上記書式の @var{argument}) を整形する。詳細に
12858 ついては、次の項目を参照すること。
12859 @xref{Output Conversion Syntax,, @command{printf} format directives, libc,
12860 The GNU C Library Reference Manual}.  C の関数との相違点については、
12861 以下の箇条書きのとおりである。
12862
12863 @mayConflictWithShellBuiltIn{printf}
12864
12865 @itemize @bullet
12866
12867 @item
12868 @var{format} 引数は、指定された @var{argument} のすべてを変換するのに必要な
12869 だけ、繰り返し使用される。たとえば、@samp{printf %s a b} という
12870 コマンドは、@samp{ab} を出力する。
12871
12872 @item
12873 @var{argument} の指定がない場合は、文脈が文字列と数値のどちらを期待して
12874 いるかによって、空文字列、または 0 を指定したものと見なされる。
12875 たとえば、@samp{printf %sx%d} というコマンドは、@samp{x0} を表示する。
12876
12877 @item
12878 @kindex \c
12879 @samp{\c} というエスケープシーケンスが追加されている。@samp{\c} より後の部分
12880 を、@command{printf} は出力しない。たとえば、@samp{printf 'A%sC\cD%sF' B E} と
12881 いうコマンドは、@samp{ABC} を表示する。
12882
12883 @item
12884 16 進数エスケープシーケンス @samp{\x@var{hh}} は、最大でも 2 桁である。
12885 桁数に制限のない C と、その点が違う。たとえば、@samp{printf '\x07e'}
12886 というコマンドは、2 バイトを表示するが (訳注: \x07 (ベル) と e)、
12887 C の @samp{printf ("\x07e")} という文の方は、1 バイトしか表示しない。
12888
12889 @item
12890 @kindex %b
12891 @command{printf} コマンドの書式指定子には、@samp{%b} が追加されている。@samp{%b}
12892 は、対応する引数文字列中の @samp{\} エスケープシーケンスを、それが
12893 @var{format} 文字列中にあるときと同じように解釈・変換して、引数文字列
12894 を表示する。ただし、引数中の 8 進数エスケープシーケンスは @samp{\0@var{ooo}}
12895 の形を取る。@var{ooo} は 0 から 3 桁の 8 進数である。@samp{\@var{ooo}} が 9 ビット
12896 の値ならば、9 ビット目 (訳注: すなわち最上位ビット) は無視される。
12897 @samp{%b} に精度も指定すると、変換した文字列の先頭から何バイトを表示
12898 するかが、それによって決まる。
12899
12900 @item
12901 数値の引数は、単独の C の定数でなければならない。前に @samp{+} や @samp{-}
12902 が付いていてもよい。たとえば、@samp{printf %.4d -3} は、@samp{-0003} を
12903 出力する。
12904
12905 @item
12906 @vindex POSIXLY_CORRECT
12907 数値が期待される引数の先頭文字が @samp{"} や @samp{'} である場合、その引数の
12908 値は、引用符の直後に来る文字の数値である (訳注: すなわち、一般に
12909 は、その文字の ASCII コードの 10 進数表記が出力される)。その後に
12910 さらに文字が続く場合は、環境変数 @env{POSIXLY_CORRECT} が設定されて
12911 いれば、ただ単に無視され、設定されていなければ、警告が出される。
12912 一例を挙げておくと、@samp{printf "%d" "'a"} は、ASCII 文字セットを使用
12913 しているホストでは、@samp{97} を出力する。ASCII における @samp{a} の数値は、
12914 10 進数表記で 97 だからだ。
12915
12916 @end itemize
12917
12918 @vindex LC_NUMERIC
12919 引数が浮動小数点数の場合は、小数部の前にはピリオドを置かなければ
12920 ならない。ただし、表示は、現在のロケールの @env{LC_NUMERIC} カテゴリの
12921 ルールに合わせたものになる。たとえば、小数点を表す文字がコンマの
12922 ロケールでは、@samp{printf %g 3.14} というコマンドは、@samp{3,14} を出力するが、
12923 @samp{printf %g 3,14} というコマンドはエラーになる。 @xref{Floating point}.
12924
12925 @kindex \@var{ooo}
12926 @kindex \x@var{hh}
12927 @command{printf} は、@var{format} 中の @samp{\@var{ooo}} を (@var{ooo} が 1 から 3
12928 桁の 8 進数なら
12929 ば) 表示すべき 1 バイトを指定している 8 進数と見なす。また、@samp{\x@var{hh}}
12930 を (@var{hh} が 1 から 2 桁の 16 進数ならば) 表示すべき 1 文字を指定している
12931 16 進数だと解釈する。ただし、注意していただきたいが、@samp{\@var{ooo}} が 255 より
12932 大きな 10 進数に相当するときは、@command{printf} は 9 ビット目を無視する。
12933 従って、たとえば、@samp{printf '\400'} は @samp{printf '\0'} と同じである。
12934
12935 @kindex \uhhhh
12936 @kindex \Uhhhhhhhh
12937 @cindex Unicode
12938 @cindex ISO/IEC 10646
12939 @vindex LC_CTYPE
12940 @command{printf} は、ISO C 99 で導入された 2 種類のキャラクタ・シンタクス
12941 (訳注: 要するに、コードによる文字の指定法) を解釈することができる。
12942 一つは、Unicode (ISO/IEC 10646) の文字を 16 ビットで表すための @samp{\u}
12943 であり、4 桁の 16 進数 @var{hhhh} で指定する。もう一つは、Unicode の文字を
12944 32 ビットで表すための @samp{\U} で、こちらは 8 桁の 16 進数 @var{hhhhhhhh} で指定
12945 する。@command{printf} は Unicode の文字を出力するに当たって、@env{LC_CTYPE} の
12946 ロケールに従う。なお、U+0000@dots{}U+009F と U+D800@dots{}U+DFFF の範囲にある
12947 Unicode の文字は、U+0024 ($), U+0040 (@@), U+0060 (`) を除いて、
12948 このシンタクスでは指定することができない。
12949
12950 @samp{\u} や @samp{\U} を処理するには、フル装備の @code{iconv} の能力が必要である。
12951 glibc 2.2 以降を採用しているシステムでは、そうした能力は使えるように
12952 なっている。coreutils パッケージをインストールする前に、@code{libiconv} を
12953 インストールしている場合も同様だ。どちらにも当てはまらない場合は、@samp{\u}
12954 や @samp{\U} は、変換されずに、そのままの形で表示される。
12955
12956 オプションとして指定できるのは、単独の @option{--help} か @option{--version} だけ
12957 である。@xref{Common options}.  オプションはオペランドの前に置かなけれ
12958 ばならない。
12959
12960 Unicode のキャラクタ・シンタクスを使えば、ロケールに影響されない方法
12961 で文字列を書くことができて、便利である。たとえば、次のようにすれば、
12962
12963 @example
12964 $ env printf '\u20AC 14.95'
12965 @end example
12966
12967 @noindent
12968 ユーロ通貨記号を含む文字列が、ユーロ記号をサポートするすべてのロケール
12969 (ISO-8859-15, UTF-8 など) で正しく出力されることになる。同様に、
12970
12971 @example
12972 $ env printf '\u4e2d\u6587'
12973 @end example
12974
12975 @noindent
12976 とすれば、漢字の文字列が、すべての中国語のロケール (GB2312, BIG5,
12977 UTF-8 など) で正しく表示される。
12978
12979 上記の例では、@command{printf} コマンドを @command{env} 経由で呼び出していることに
12980 注目していただきたい。これは、シェルのエイリアスや組み込み関数ではなく、
12981 シェルのサーチパスを使って見つけたプログラムを、確実に実行するためである。
12982
12983 文字列がもっと長い場合でも、各文字に対応する 16 進数コードを一つ
12984 一つ捜す必要はない。 ASCII 文字に \u エスケープ・シーケンスを混ぜる
12985 書き方は、JAVA のソースファイルで使用されるエンコーディング (JAVA
12986 source file encoding) としても知られているが、GNU の recode コマンド
12987 3.5c 以降を使用すれば、任意の文字列をこのエンコーディングに変換する
12988 ことができるのだ。以下に示すのは、1 個の短文を、ロケールに影響されずに
12989 その短文を出力するシェルスクリプトに変換する方法である。
12990
12991 @smallexample
12992 $ LC_CTYPE=zh_TW.big5 /usr/local/bin/printf \
12993     '\u4e2d\u6587\n' > sample.txt
12994   #
12995   # 訳注: もちろん、漢字入力の可能な LANG=zh_TW.big5 (あるいは、
12996   #       LANG=ja_JP.eucJP) の環境なら、コマンドラインで直接「中文」
12997   #       と打ち込んでもよい。その方が、「各文字に対応する 16 進数
12998   #       コードを一つ一つ捜す必要はない」という上記の説明に、
12999   #       例としてはふさわしいだろう。LANG=ja_JP.eucJP の場合、
13000   #       下のコマンドは、当然ながら、recode eucJP..JAVA になる。
13001   #
13002 $ recode BIG5..JAVA < sample.txt \
13003     | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
13004     > sample.sh
13005 @end smallexample
13006
13007 @exitstatus
13008
13009
13010 @node yes invocation
13011 @section @command{yes}: 中断されるまで文字列を表示する
13012
13013 @pindex yes
13014 @cindex repeated output of a string
13015
13016 @command{yes} は、コマンドラインで指定された引数を、空白で区切り、末尾に
13017 改行を付けて、意図的に中断されるまで (訳注: たとえば @kbd{CTRL-C} で
13018 中断されるまで) 延々と表示する。引数が指定されていない場合は、@samp{y}
13019 の後ろに改行を付けて、中断されるまで延々と表示する。
13020
13021 書き込みエラーがあると、@command{yes} はステータス @samp{1} で終了する。
13022
13023 指定できるオプションは、単独の @option{--help} か @option{--version} だけである。
13024 @samp{-} で始まる引数を出力するには、その引数の前に @option{--} を置けばよい。
13025 たとえば、@samp{yes -- --help} というようにだ。@xref{Common options}.
13026
13027
13028 @node Conditions
13029 @chapter 条件
13030
13031 @cindex conditions
13032 @cindex commands for exit status
13033 @cindex exit status commands
13034
13035 この章で説明するのは、その出力よりも終了ステータスの方が主として役に
13036 立つコマンドである。従って、こうしたコマンドは、シェルの @code{if} 文の
13037 条件として、あるいは、パイプラインの最後のコマンドとして使用される
13038 ことが多い。
13039
13040 @menu
13041 * false invocation::         何もせず、実行失敗のステータスを返す。
13042 * true invocation::          何もせず、正常終了する。
13043 * test invocation::          ファイルタイプのチェックや値の比較を行う。
13044 * expr invocation::          式を評価する。
13045 @end menu
13046
13047
13048 @node false invocation
13049 @section @command{false}: 何もせず、実行失敗のステータスを返す
13050
13051 @pindex false
13052 @cindex do nothing, unsuccessfully
13053 @cindex failure exit status
13054 @cindex exit status of @command{false}
13055
13056 @command{false} は、実行に失敗したこと (@dfn{failure}) を示す終了ステータス 1 を
13057 返す以外、何もしない。従って、シェルスクリプト中の、実行に失敗する
13058 コマンドが必要な場所で、仮のコマンドとして使用することができる。
13059 最近のほとんどのシェルでは、@command{false} は組み込みコマンドになっている
13060 ので、スクリプト中で @samp{false} を使う際に使用しているのは、ここで説明
13061 している @samp{false} ではなく、たぶん組み込みコマンドの方である。
13062
13063 @command{false} は、@option{--help} と @option{--version} オプションを認識する。
13064
13065 このバージョンの @command{false} は、C のプログラムとして実装されている。
13066 従って、シェルスクリプトによる実装より安全かつ高速であり、アカウントを
13067 無効化するための安全なダミー・シェルとして使用することができる。
13068
13069 注意していただきたいが、@command{false} は、@option{--help} や@option{--version} を付けて
13070 実行した場合でも (このマニュアルで説明している他のすべてのプログラム
13071 とは違って)、実行失敗のステータスで終了する。
13072
13073 移植を考慮したプログラムでは、@command{false} の終了ステータスを 1 だと
13074 決めてかからない方がよい。GNU 以外のホストでは、終了ステータスが
13075 1 より大きいこともあるからだ。
13076
13077
13078 @node true invocation
13079 @section @command{true}: 何もせず、正常終了する
13080
13081 @pindex true
13082 @cindex do nothing, successfully
13083 @cindex no-op
13084 @cindex successful exit
13085 @cindex exit status of @command{true}
13086
13087 @command{true} は、実行に成功したこと (@dfn{success}) を示す終了ステータス 0 を
13088 返す以外、何もしない。従って、シェルスクリプト中の、実行に成功する
13089 コマンドが必要な場所で、仮のコマンドとして使用することができる。
13090 とは言え、シェルの組み込みコマンド @code{:} (コロン) の方が、同じことを
13091 より高速に実行してくれるかもしれない。最近のほとんどのシェルでは、
13092 @command{true} は組み込みコマンドになっているので、スクリプト中で @samp{true} を
13093 使う際に使用しているのは、ここで説明している @samp{true} ではなく、たぶん
13094 組み込みコマンドの方である。
13095
13096 @command{true} は、@option{--help} と @option{--version} オプションを認識する。
13097
13098 もっとも、@command{true} を 0 以外のステータスで終了させることも可能だと
13099 いうことも、心に留めておいていただきたい。@option{--help} や @option{--version} を
13100 使用したとき、標準出力がすでにクローズされていたり、I/O エラーを引き
13101 起こすようなファイルにリダイレクトしたりすると、そういうことが起きる。
13102 たとえば、Bourne 互換のシェルを使用して、次のようにするときだ。
13103
13104 @example
13105 $ ./true --version >&-
13106 ./true: write error: Bad file number
13107 $ ./true --version > /dev/full
13108 ./true: write error: No space left on device
13109 @end example
13110
13111 このバージョンの @command{true} は、C のプログラムとして実装されている。
13112 従って、シェルスクリプトによる実装より安全かつ高速であり、アカウントを
13113 無効化するための安全なダミー・シェルとして使用することができる。
13114
13115 @node test invocation
13116 @section @command{test}: ファイルタイプのチェックや値の比較を行う
13117
13118 @pindex test
13119 @cindex check file types
13120 @cindex compare values
13121 @cindex expression evaluation
13122
13123 @command{test} は、条件式 @var{expression} の評価次第で、0 (真) または 1 (偽) の
13124 ステータスを返す。式を構成する各部分は、独立した引数でなければならない。
13125
13126 @command{test} は、ファイルのステータスを検査することができる。また、文字列を
13127 扱う演算子や、数値を比較するための演算子も備えている。
13128
13129 @command{test} には、@samp{test} で始める書式のほかに、一対の角カッコを使用する
13130 もう一つの書式がある。たとえば、@samp{test -d /} の代わりに、@samp{[ -d / ]} と
13131 書いても構わない。角カッコは、それぞれ独立した引数でなければならない
13132 (訳注: 言い換えれば、他の引数と空白で分離されていなければならない)。
13133 だから、たとえば、@samp{[-d /]} では、望みの結果を得られないわけだ。@samp{test
13134 @var{expression}} と @samp{[ @var{expression} ]} は、同じ意味なので、以下では前者の書式
13135 についてのみ解説する。
13136
13137 書式:
13138
13139 @example
13140 test @var{expression}
13141 test
13142 [ @var{expression} ]
13143 [ ]
13144 [ @var{option}
13145 @end example
13146
13147 @mayConflictWithShellBuiltIn{test}
13148
13149 @var{expression} を省略した場合、@command{test} は、偽を返す。@var{expression} が引数
13150 1 個だけだった場合、@command{test} は、その引数が空 (null) ならば、偽を返し、さも
13151 なければ、真を返す。引数には、@samp{-d}, @samp{-1}, @samp{--}, @samp{--help},
13152 @samp{--version} と
13153 いった、他のほとんどのプログラムでなら、オプションとして扱われるものも
13154 含めて、どんな文字列でも指定することができる。そこで、ヘルプやバージョン
13155 情報を取得するには、@samp{[ --help} や @samp{[ --version} という形でコマンドを
13156 実行する必要がある。この場合、いつもと違って、閉じカッコは付けない。
13157 @xref{Common options}.
13158
13159 @cindex exit status of @command{test}
13160 終了ステータス:
13161
13162 @display
13163 0: 式が真の場合。
13164 1: 式が偽の場合。
13165 2: エラーが起きた場合。
13166 @end display
13167
13168 @menu
13169 * File type tests::          ファイルタイプのテスト (-[gkruwxOG])。
13170 * Access permission tests::  アクセス許可のテスト (-[gkruwxOG])。
13171 * File characteristic tests::  ファイル特性のテスト (-e -s -nt -ot -ef)。
13172 * String tests::             文字列のテスト (-z -n = == !=)。
13173 * Numeric tests::            数値のテスト (-eq -ne -lt -le -gt -ge)。
13174 * Connectives for test::     @command{test} の論理結合演算子 (! -a -o)。
13175 @end menu
13176
13177
13178 @node File type tests
13179 @subsection File type tests
13180
13181 @cindex file type tests
13182
13183 以下のオプションは、ある特定のファイルタイプか否かの検査を行う。(Unix
13184 では、あらゆるものがファイルだ。だが、ファイルならみんな同じだという
13185 わけではない!)
13186
13187 @table @samp
13188
13189 @item -b @var{file}
13190 @opindex -b
13191 @cindex block special check
13192 @var{file} が存在し、ブロック・スペシャルデバイスならば、真。
13193
13194 @item -c @var{file}
13195 @opindex -c
13196 @cindex character special check
13197 @var{file} が存在し、キャラクタ・スペシャルデバイスならば、真。
13198
13199 @item -d @var{file}
13200 @opindex -d
13201 @cindex directory check
13202 @var{file} が存在し、ディレクトリならば、真。
13203
13204 @item -f @var{file}
13205 @opindex -f
13206 @cindex regular file check
13207 @var{file} が存在し、通常ファイルならば、真。
13208
13209 @item -h @var{file}
13210 @itemx -L @var{file}
13211 @opindex -L
13212 @opindex -h
13213 @cindex symbolic link check
13214 @var{file} が存在し、シンボリックリンクならば、真。ファイル関係の他の
13215 すべてのテストとは違って、このテストは、@var{file} がシンボリックリンク
13216 の場合、リンクの参照を行わない。
13217
13218 @item -p @var{file}
13219 @opindex -p
13220 @cindex named pipe check
13221 @var{file} が存在し、名前付きパイプならば、真。
13222
13223 @item -S @var{file}
13224 @opindex -S
13225 @cindex socket check
13226 @var{file} が存在し、ソケットならば、真。
13227
13228 @item -t @var{fd}
13229 @opindex -t
13230 @cindex terminal check
13231 @var{fd} が端末と結びついているファイルディスクリプタならば、真。
13232
13233 @end table
13234
13235
13236 @node Access permission tests
13237 @subsection アクセス許可のテスト
13238
13239 @cindex access permission tests
13240 @cindex permission tests
13241
13242 以下のオプションは、特定のアクセス許可について検査をする。
13243
13244 @table @samp
13245
13246 @item -g @var{file}
13247 @opindex -g
13248 @cindex set-group-ID check
13249 @var{file} が存在し、set-group-ID ビットが立っていれば、真。
13250
13251 @item -k @var{file}
13252 @opindex -k
13253 @cindex sticky bit check
13254 @var{file} が存在し、@dfn{sticky} ビットが立っていれば、真
13255
13256 @item -r @var{file}
13257 @opindex -r
13258 @cindex readable file check
13259 @var{file} が存在し、読み出しが許可されていれば、真。
13260
13261 @item -u @var{file}
13262 @opindex -u
13263 @cindex set-user-ID check
13264 @var{file} が存在し、set-user-ID ビットが立っていれば、真。
13265
13266 @item -w @var{file}
13267 @opindex -w
13268 @cindex writable file check
13269 @var{file} が存在し、書き込みが許可されていれば、真。
13270
13271 @item -x @var{file}
13272 @opindex -x
13273 @cindex executable file check
13274 @var{file} が存在し、実行が許可されていれば (ディレクトリの場合は、
13275 検索が許可されていれば)、真。
13276
13277 @item -O @var{file}
13278 @opindex -O
13279 @cindex owned by effective user ID check
13280 @var{file} が存在し、その所有者が test コマンド実行者の実効ユーザ ID
13281 と同じならば、真。
13282
13283 @item -G @var{file}
13284 @opindex -G
13285 @cindex owned by effective group ID check
13286 @var{file} が存在し、そのグループが test コマンド実行者の実効グループ ID
13287 と同じならば、真。
13288
13289 @end table
13290
13291 @node File characteristic tests
13292 @subsection ファイル特性のテスト
13293
13294 @cindex file characteristic tests
13295
13296 以下のオプションは、ファイルの他の特性を検査する。
13297
13298 @table @samp
13299
13300 @item -e @var{file}
13301 @opindex -e
13302 @cindex existence-of-file check
13303 @var{file} が存在すれば、真。
13304
13305 @item -s @var{file}
13306 @opindex -s
13307 @cindex nonempty file check
13308 @var{file} が存在し、サイズが 0 よりも大きければ、真。
13309
13310 @item @var{file1} -nt @var{file2}
13311 @opindex -nt
13312 @cindex newer-than file check
13313 @var{file1} が @var{file2} より (更新日時 (modification date) で比較して)
13314 新しいか、あるいは、@var{file1} が存在して、@var{file2} が存在しなければ、真。
13315
13316 @item @var{file1} -ot @var{file2}
13317 @opindex -ot
13318 @cindex older-than file check
13319 @var{file1} が @var{file2} より (更新日時で比較して) 古いか、あるいは、@var{file2} が
13320 存在して、@var{file1} が存在しなければ、真。
13321
13322 @item @var{file1} -ef @var{file2}
13323 @opindex -ef
13324 @cindex same file check
13325 @cindex hard link check
13326 @var{file1} と @var{file2} が同じデバイス番号と同じ inode 番号を持っていれば、
13327 言い換えれば、両者が互いのハードリンクならば、真。
13328
13329 @end table
13330
13331
13332 @node String tests
13333 @subsection 文字列のテスト
13334
13335 @cindex string tests
13336
13337 以下のオプションは、文字列の特性を検査する。シェルに対して引数 @var{string} を
13338 引用符で保護する必要があるかもしれない。たとえば、こんなふうにだ。
13339
13340 @example
13341 test -n "$V"
13342 @end example
13343
13344 ここで引用符は、@samp{$V} が空だったり、特殊文字を含んでいたりする場合に、
13345 意図に反した引数が @command{test} に渡ることを防いでいる。
13346
13347 @table @samp
13348
13349 @item -z @var{string}
13350 @opindex -z
13351 @cindex zero-length string check
13352 @var{string} の長さが 0 ならば、真。
13353
13354 @item -n @var{string}
13355 @itemx @var{string}
13356 @opindex -n
13357 @cindex nonzero-length string check
13358 @var{string} の長さが 0 でなければ、真。
13359
13360 @item @var{string1} = @var{string2}
13361 @opindex =
13362 @cindex equal string check
13363 両文字列が等しければ、真。
13364
13365 @item @var{string1} == @var{string2}
13366 @opindex ==
13367 @cindex equal string check
13368 両文字列が等しければ、真 (= と同じ意味)。
13369
13370 @item @var{string1} != @var{string2}
13371 @opindex !=
13372 @cindex not-equal string check
13373 両文字列が等しくなければ、真。
13374
13375 @end table
13376
13377
13378 @node Numeric tests
13379 @subsection 数値のテスト
13380
13381 @cindex numeric tests
13382 @cindex arithmetic tests
13383
13384 数値間の関係を調べる演算子を挙げる。引数は、数字のみで表現される整数か
13385 (負数も使用できる)、@w{@code{-l @var{string}}} という特別な式でなければならない。後者は
13386 @var{string} の長さとして評価される。
13387 @sp 1
13388 (訳注: 要するに、普通は 10 進数の整数を引数として取るということ。
13389 @command{expr} コマンドとは違って、@command{test} では @samp{+2} といった表現も可能だ。)
13390
13391 @table @samp
13392
13393 @item @var{arg1} -eq @var{arg2}
13394 @itemx @var{arg1} -ne @var{arg2}
13395 @itemx @var{arg1} -lt @var{arg2}
13396 @itemx @var{arg1} -le @var{arg2}
13397 @itemx @var{arg1} -gt @var{arg2}
13398 @itemx @var{arg1} -ge @var{arg2}
13399 @opindex -eq
13400 @opindex -ne
13401 @opindex -lt
13402 @opindex -le
13403 @opindex -gt
13404 @opindex -ge
13405 こうした二項算術演算子は、それぞれ次の場合に真を返す。上から順に、
13406 @var{arg1} が @var{arg2} と比べて、等しい場合、等しくない場合、より小さい場合、
13407 より小さいか等しい場合、より大きい場合、より大きいか等しい場合。
13408
13409 @end table
13410
13411 例を挙げる。
13412
13413 @example
13414 test -1 -gt -2 && echo yes
13415 @result{} yes
13416 test -l abc -gt 1 && echo yes
13417 @result{} yes
13418 test 0x100 -eq 1
13419 @error{} test: integer expression expected before -eq
13420 @end example
13421
13422
13423 @node Connectives for test
13424 @subsection @command{test} の論理結合演算子
13425
13426 @cindex logical connectives
13427 @cindex connectives, logical
13428
13429 おなじみの論理結合演算子である。
13430
13431 @table @samp
13432
13433 @item ! @var{expr}
13434 @opindex !
13435 @var{expr} が偽ならば、真。
13436
13437 @item @var{expr1} -a @var{expr2}
13438 @opindex -a
13439 @cindex logical and operator
13440 @cindex and operator
13441 @var{expr1} と @var{expr2} の両方が真ならば、真。
13442
13443 @item @var{expr1} -o @var{expr2}
13444 @opindex -o
13445 @cindex logical or operator
13446 @cindex or operator
13447 @var{expr1} と @var{expr2} のどちらかが真ならば、真。
13448
13449 @end table
13450
13451
13452 @node expr invocation
13453 @section @command{expr}: 式を評価する
13454
13455 @pindex expr
13456 @cindex expression evaluation
13457 @cindex evaluation of expressions
13458
13459 @command{expr} は、式を評価して、結果を標準出力に書き出す。式の各構成要素
13460 (token) は、独立した引数でなければならない。
13461
13462 オペランド (演算対象) は、整数か文字列である。整数は、1 個以上の
13463 10 進数の数字から構成され、先頭に @samp{-} が付いていてもよい。@command{expr} は、
13464 オペランドの位置にあるものが何であれ、それを整数、または、文字列に
13465 変換する。どちらになるかは、それに対して行われる演算次第である。
13466
13467 @command{expr} そのものに対しては、文字列をクォートする必要がない。だが、
13468 シェルにとって特別な意味がある、たとえば空白のような文字を保護する
13469 ためには、文字列を引用符で囲むなどの方法でクォートする必要があるかも
13470 しれない。とは言え、クォートされているかどうかに関わりなく、文字列の
13471 オペランドは、丸カッコ 1 個であってはならないし、@code{+} のような @command{expr}
13472 の演算子の一つであるべきでもない。すなわち、シェルに対してクォートする
13473 だけでは、エラーを引き起こすことなく、任意の文字列 @code{$str} を @command{expr} に
13474 渡すことはできないのだ。この問題を回避する方法の一つは、GNU の拡張
13475 である @code{+} 演算子 (訳注: この @code{+} は、算術演算子の @code{+} ではなく、直後に
13476 来る引数が文字列であることを示す文字列演算子である) を使用することだ
13477 (たとえば、@code{+ "$str" = foo} といった具合に)。もっと移植性のある方法は、
13478 @code{@w{" $str"}} という先頭に空白を入れた表現を使用し、式の残りの部分でも
13479 それに合わせて、先頭のスペースを考慮に入れるようにすることである
13480 (たとえば、@code{@w{" $str" = " foo"}} のように)。
13481
13482 負の整数や、@samp{-} で始まる文字列を @command{expr} の 1 番目の引数として渡す
13483 べきではない。オプションと間違われかねないからだ。それを避けるため
13484 には、カッコでくくればよい (訳注: たとえば、@code{expr \( -1 + 1 \)})。
13485 また、移植を考慮したスクリプトでは、文字列のオペランドに、形が整数と
13486 同じになってしまうものを使うべきではない。こちらは、先頭にスペースを
13487 入れる上記の方法で回避できる。
13488
13489 @cindex parentheses for grouping
13490 演算子には、記号としてオペランドとオペランドの間に置くものもあれば、
13491 キーワードとしてオペランドの前に付けるものもある。丸カッコは、おなじみの
13492 やり方で、グループ化に使用できる。ただし、丸カッコや、演算子の多くは、
13493 シェルによって評価されないように、クォートしなければならない。
13494
13495 GNU MP ライブラリ対応でビルドされた場合、@command{expr} は任意精度演算を
13496 使用する。そうでない場合は、ネイティブな算術型を使用するので、算術
13497 オーバーフローのために実行に失敗することがあるかもしれない。
13498
13499 指定できるオプションは、@option{--help} と @option{--version} だけである。
13500 @xref{Common options}.  オプションはオペランドの前に置かなければならない。
13501
13502 @cindex exit status of @command{expr}
13503 終了ステータス:
13504
13505 @display
13506 0: 式が null でも 0 でもない場合。
13507 1: 式が null または 0 の場合。
13508 2: 式が無効な場合。
13509 3: 内部エラーが起きた場合 (例: 算術オーバーフロー)。
13510 @end display
13511
13512 @menu
13513 * String expressions::       文字列式 (+ : match substr index length)。
13514 * Numeric expressions::      数式 (+ - * / %)。
13515 * Relations for expr::       論理結合と関係表現 (| & < <= = == != >= >)。
13516 * Examples of expr::         用例。
13517 @end menu
13518
13519
13520 @node String expressions
13521 @subsection 文字列式
13522
13523 @cindex string expressions
13524 @cindex expressions, string
13525
13526 @command{expr} は、パターンマッチなどの文字列演算子をサポートしている。文字列
13527 演算子の優先順位は、算術演算子や関係演算子よりも高い (算術/関係演算子
13528 については後述する)。
13529
13530 @table @samp
13531
13532 @item @var{string} : @var{regex}
13533 @cindex pattern matching
13534 @cindex regular expression matching
13535 @cindex matching patterns
13536 パターンマッチを行う。まず、左右の項を文字列に変換し、右項を、
13537 先頭に @code{^} が暗黙のうちに付いている正規表現と見なす (@code{grep} 風の
13538 基本正規表現)。それから、その正規表現と左項がマッチするかどうかを
13539 調べる。
13540
13541 マッチが成功した場合、@var{regex} 中でカッコ (@samp{\(} と @samp{\)}) を使用して
13542 いれば、@code{:} 演算子は、そのカッコ内の部分表現にマッチした @var{string}
13543 中の部分文字列を返す。カッコを使っていなければ、返すのはマッチした
13544 文字数である。
13545
13546 マッチに失敗した場合、@code{:} 演算子は、@var{regex} 中でカッコ (@samp{\(} と @samp{\)})
13547 を使用していれば、空文字列を、さもなければ、0 を返す。
13548
13549 @kindex \( @r{regexp operator}
13550 最初の @samp{\( @dots{} \)} のペアだけが、返り値に関係する。二番目以降の
13551 カッコのペアには、正規表現の演算子をグループ化する働きしかない。
13552
13553 @kindex \+ @r{regexp operator}
13554 @kindex \? @r{regexp operator}
13555 @kindex \| @r{regexp operator}
13556 正規表現では、@code{\+}, @code{\?}, @code{\|} は演算子であり、それぞれ、1 個以上
13557 にマッチする、あってもなくてもよい、候補のうちのどちらか、を意味して
13558 いる。ところが、SunOS などの @command{expr} では、こうした記号を通常の文字
13559 として扱っている (POSIX は、どちらの動作も認めている)。正規表現の
13560 文法については次のものが詳しい。@xref{Top, , Regular Expression Library, regex, Regex}.
13561 実例をいくつか、「@command{expr} の使用例」に挙げておいた。
13562 @ref{Examples of expr}.
13563
13564 @item match @var{string} @var{regex}
13565 @findex match
13566 パターンマッチを行う別の方法。これは、@w{@samp{@var{string} : @var{regex}}} と同じ
13567 である。
13568
13569 @item substr @var{string} @var{position} @var{length}
13570 @findex substr
13571 @var{string} の部分文字列を返す。部分文字列は、@var{position} の位置から
13572 始まり、最長でも @var{length} の長さである。@var{position} と @var{length} のどちらか
13573 が、負数や 0 だったり、数値以外だったりする場合は、空文字列を返す。
13574
13575 @item index @var{string} @var{charset}
13576 @findex index
13577 @var{charset} 中の文字が最初に見つかった @var{string} 中の位置を返す。@var{string} 中に
13578 @var{charset} 中のどの文字も見つからなかった場合は、0 を返す。
13579
13580 @item length @var{string}
13581 @findex length
13582 @var{string} の長さを返す。
13583
13584 @item + @var{token}
13585 @kindex +
13586 たとえ、@var{token} が @code{match} のようなキーワードや、 @code{/} のような演算子
13587 であっても、@var{token} を文字列として解釈する。これを使用すると、@code{expr
13588 length + "$x"} や @code{expr + "$x" : '.*/\(.\)'} を実行したとき、@code{$x}
13589 の値が (たとえば) たまたま @code{/} や @code{index} であっても、適切な動作を
13590 させることができる。この演算子は、GNU の拡張である。移植を考慮した
13591 シェルスクリプトでは、@code{+ "$token"} ではなく、@code{@w{" $token"} : @w{' \(.*\)'}}
13592 を使うべきである。
13593
13594 @end table
13595
13596 @command{expr} にキーワードを文字列として解釈させるためには、クォート演算子
13597 (すなわち、上で述べている @code{+} 演算子) を使用しなければならない。
13598
13599
13600 @node Numeric expressions
13601 @subsection 数式
13602
13603 @cindex numeric expressions
13604 @cindex expressions, numeric
13605
13606 @command{expr} は、以下に挙げる通常の算術演算子を、昇順の優先順位で、サポート
13607 している。こうした算術演算子は、前節で述べた文字列演算子より優先順位が
13608 低く、次節で述べる関係演算子より優先順位が高い。
13609
13610 @table @samp
13611
13612 @item + -
13613 @kindex +
13614 @kindex -
13615 @cindex addition
13616 @cindex subtraction
13617 加算と減算。左右の項は両方とも整数に変換される。整数に変換できない
13618 場合は、エラーになる。
13619
13620 @item * / %
13621 @kindex *
13622 @kindex /
13623 @kindex %
13624 @cindex multiplication
13625 @cindex division
13626 @cindex remainder
13627 乗算、除算、剰余演算。左右の項は両方とも整数に変換される。整数に
13628 変換できない場合は、エラーになる。
13629
13630 @end table
13631
13632
13633 @node Relations for expr
13634 @subsection @command{expr} の関係表現
13635
13636 @cindex connectives, logical
13637 @cindex logical connectives
13638 @cindex relations, numeric or string
13639
13640 @command{expr} は、通常の論理結合や関係表現をサポートしている。そうした演算子
13641 は、前の節で述べた文字列演算子や算術演算子より優先順位が低い。論理結合や
13642 関係表現の演算子を、優先順位の低いものから高いものへ順に並べておく。
13643
13644 @table @samp
13645
13646 @item |
13647 @kindex |
13648 @cindex logical or operator
13649 @cindex or operator
13650 左項が null でも 0 でもなければ、左項を返す。左項が null または
13651 0 の場合は、右項が null でも 0 でもなければ、右項を返す。両項とも
13652 null または 0 の場合は、0 を返す。左項が null でも 0 でもない場合、
13653 右項の評価は行われない。
13654
13655 @item &
13656 @kindex &
13657 @cindex logical and operator
13658 @cindex and operator
13659 両項とも null でも 0 でもなければ、左項を返し、それ以外の場合は、0
13660 を返す。左項が null または 0 の場合、右項の評価は行われない。
13661
13662 @item < <= = == != >= >
13663 @kindex <
13664 @kindex <=
13665 @kindex =
13666 @kindex ==
13667 @kindex >
13668 @kindex >=
13669 @cindex comparison operators
13670 @vindex LC_COLLATE
13671 両項を比較し、関係が真ならば、1 を返し、偽の場合は、0 を返す。
13672 @code{==} は @code{=} と同じ意味である。@command{expr} は、まず両項を整数に変換し、
13673 数値としての比較を試みる。左右どちらかの項の変換に失敗した場合は、
13674 @env{LC_COLLATE} のロケールで指定されている、文字の照合順を使用して、
13675 辞書的な比較を行う。
13676
13677 @end table
13678
13679
13680 @node Examples of expr
13681 @subsection @command{expr} の使用例
13682
13683 @cindex examples of @command{expr}
13684 シェルのメタ文字をクオートする例も含めて、用例をいくつか挙げておく。
13685
13686 Bourne 互換シェルで、シェル変数 @code{foo} に 1 を加える。
13687
13688 @example
13689 foo=$(expr $foo + 1)
13690 @end example
13691
13692 変数 @code{$fname} に格納されているファイル名から、ディレクトリではない
13693 部分を取り出して、表示する。@code{$fname} に @code{/} が含まれていなくてもよい。
13694
13695 @example
13696 expr $fname : '.*/\(.*\)' '|' $fname
13697 @end example
13698
13699 次の例で @code{\+} は演算子である (訳注: 細かいことを言うと、@command{grep} 流
13700 の基本正規表現の演算子。ちなみに、最後の例の @code{+} は、@command{expr} の文字列
13701 演算子である)。
13702
13703 @example
13704 expr aaa : 'a\+'
13705 @result{} 3
13706 @end example
13707
13708 @example
13709 expr abc : 'a\(.\)c'
13710 @result{} b
13711 expr index abcdef cz
13712 @result{} 3
13713 expr index index a
13714 @error{} expr: syntax error
13715 expr index + index a
13716 @result{} 0
13717 @end example
13718
13719
13720 @node Redirection
13721 @chapter リダイレクション
13722
13723 @cindex redirection
13724 @cindex commands for redirection
13725
13726 Unix のシェルは、いくつかの形式のリダイレクション (@dfn{redirection})
13727 --- コマンドの入力元や出力先を変更する手段 --- をたいてい用意している。
13728 しかし、ある一つの便利なリダイレクションは、シェルではなく、独立した
13729 コマンドによって行われる。この章では、そのコマンドについて説明する。
13730
13731 @menu
13732 * tee invocation::           出力を複数のファイルやプロセスにリダイレクトする。
13733 @end menu
13734
13735
13736 @node tee invocation
13737 @section @command{tee}: 出力を複数のファイルやプロセスにリダイレクトする
13738
13739 @pindex tee
13740 @cindex pipe fitting
13741 @cindex destinations, multiple output
13742 @cindex read from stdin and write to stdout and files
13743
13744 @command{tee} コマンドは、標準入力を標準出力にコピーするとともに、引数として
13745 指定されたファイル (複数可) にもコピーする。これは、あるデータをパイプ
13746 に送るだけでなく、同時にそのコピーを保存したい場合に、便利である。
13747 @sp 1
13748 書式:
13749
13750 @example
13751 tee [@var{option}]@dots{} [@var{file}]@dots{}
13752 @end example
13753
13754 書き出し先のファイルがまだ存在していなければ、作成される。書き出し
13755 先のファイルがすでに存在している場合は、@option{-a} オプションを使用しない
13756 かぎり、ファイルに前からあったデータは上書きされる。
13757
13758 @var{file} の一つに @samp{-} を指定すると、@command{tee} は、入力のコピーをもう一つ、
13759 標準出力に送出する。だが、コピー同士が重なり合うので、たいていの場合、
13760 これはあまり役に立たない。
13761
13762 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13763
13764 @table @samp
13765 @item -a
13766 @itemx --append
13767 @opindex -a
13768 @opindex --append
13769 指定されたファイルの末尾に標準入力を追加する。すなわち、ファイルを
13770 上書きしない。
13771
13772 @item -i
13773 @itemx --ignore-interrupts
13774 @opindex -i
13775 @opindex --ignore-interrupts
13776 割り込みシグナルを無視する。
13777
13778 @end table
13779
13780 大量のデータの転送を行いながら、同時にそのデータのサマライズも
13781 行いたい、改めてデータを読み直すようなことはしたくない。@command{tee} は、
13782 そういうときに便利である。たとえば、DVD イメージをダウンロードして
13783 いるとき、その場ですぐ、署名やチェックサムを確認したくなることがよく
13784 ある。単に次のようにするのは、効率が悪い。
13785
13786 @example
13787 wget http://example.com/some.iso && sha1sum some.iso
13788 @end example
13789
13790 上記コマンドの問題点の一つは、ただでさえ時間のかかる SHA1 の計算に
13791 取りかかる前に、ダウンロードが完了するのを待たなければならないことだ。
13792 たぶん、さらに問題なのは、上記のやり方では、DVD イメージを改めて
13793 読み直さなければならないことだろう (一度目の読み込みは、ネットワーク
13794 からである)。
13795
13796 こうした作業を行う効率的な方法は、ダウンロードと SHA1 の計算を
13797 同時に、交互に実行することである。そうすれば、プロセス全体が平行して
13798 スムーズに進むので、無駄な時間を使わずに、チェックサムが手に入る。
13799
13800 @example
13801 # ちょっと凝った方法。プロセス置換の実例をご覧に入れるため。
13802 wget -O - http://example.com/dvd.iso \
13803   | tee >(sha1sum > dvd.sha1) > dvd.iso
13804 @end example
13805
13806 こうすれば、@command{tee} は、出力を目当てのファイルに書き出すだけでなく、
13807 パイプにも書き出す。そして、後者では、 @command{sha1sum} を実行し、最終的に
13808 チェックサムを @file{dvd.sha1} という名前のファイルに保存することになる。
13809
13810 しかし、気をつけていただきたい。上記の例は、プロセス置換 (@dfn{process
13811 substitution}) と呼ばれる最近のシェルの機能を当てにしている (上記の
13812 @samp{>(command)} という構文のことである。@xref{Process Substitution,,
13813 Process Substitution, bash, The Bash Reference Manual}.)。
13814 そのため、@command{zsh}, @command{bash}, @command{ksh} では
13815 うまく動作するが、@command{/bin/sh} では動作しない。従って、こうしたコードを
13816 シェルスクリプトで使用するときは、スクリプトの先頭に @samp{#!/bin/bash} など
13817 と書くことを忘れてはいけない。
13818
13819 上記の例は、書き出しを 1 個のファイルと 1 個のプロセスに行っている
13820 だけだ。その程度なら、もっと普通の、もっと移植性のある使い方をした方が
13821 ずっとよい。
13822
13823 @example
13824 wget -O - http://example.com/dvd.iso \
13825   | tee dvd.iso | sha1sum > dvd.sha1
13826 @end example
13827
13828 @command{tee} が二つのプロセスに書き込むように、この例を拡張して、MD5 と
13829 SHA1 のチェックサムを平行して計算させることもできる。その場合は、
13830 プロセス置換が必要になる。
13831
13832 @example
13833 wget -O - http://example.com/dvd.iso \
13834   | tee >(sha1sum > dvd.sha1) \
13835         >(md5sum > dvd.md5) \
13836   > dvd.iso
13837 @end example
13838
13839 このテクニックは、パイプから入ってくるデータの圧縮したコピーを作り
13840 たいときにも、役に立つ。@samp{du -ak} の出力するディスク使用量のデータを
13841 要約して、グラフィカルに表示するツールを考えていただきたい。
13842 ディレクトリ階層が膨大だと、@samp{du -ak} は実行に長い時間がかかるだろう
13843 し、いともたやすくテラバイトのデータを作成してくれるだろう。そこで、
13844 @samp{du} コマンドをむやみに再実行することはやりたくない。また、圧縮される
13845 前のデータを保存しておきたくもない。
13846
13847 これを効率の悪い方法でやると、@command{du} の出力全部の圧縮を済ませるまで、
13848 GUI ツールを起動することすらできない。
13849
13850 @example
13851 du -ak | gzip -9 > /tmp/du.gz
13852 gzip -d /tmp/du.gz | xdiskusage -a
13853 @end example
13854
13855 @command{tee} とプロセス置換を使えば、GUI ツールを直ちに起動できるし、
13856 圧縮ファイルの展開も全くやらないですむ。
13857
13858 @example
13859 du -ak | tee >(gzip -9 > /tmp/du.gz) | xdiskusage -a
13860 @end example
13861
13862 最後にもう一つ。常に 2 種類以上の圧縮した tar アーカイブ (tarball)
13863 を一度に作ることにしている場合は、より効率のよいやり方ができるかも
13864 しれない。たとえば、@code{make dist} が @command{gzip} と @command{bzip2} の両方で圧縮した
13865 tar アーカイブを作成するような場合だ。@command{automake} が生成する @file{Makefile}
13866 のルールは、たいてい、こんなふうにコマンドを連続して実行することで、
13867 圧縮した tar アーカイブを二つ作成している (少し単純化してある)。
13868
13869 @example
13870 tardir=your-pkg-M.N
13871 tar chof - "$tardir" | gzip  -9 -c > your-pkg-M.N.tar.gz
13872 tar chof - "$tardir" | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13873 @end example
13874
13875 しかしながら、アーカイブの作成・圧縮の対象になっているディレクトリ
13876 階層が、数メガバイトより大きい場合は --- 使用しているシステムがマルチ
13877 プロセッサを搭載し、メモリがふんだんにある場合はなおさらそうだが ---
13878 ディレクトリの中身を 1 回だけ読み込み、圧縮プログラムを平行して走ら
13879 せることで、ずっと効率のよい仕事ができる。
13880
13881 @example
13882 tardir=your-pkg-M.N
13883 tar chof - "$tardir" \
13884   | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
13885   | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13886 @end example
13887
13888 @exitstatus
13889
13890
13891 @node File name manipulation
13892 @chapter ファイル名操作
13893
13894 @cindex file name manipulation
13895 @cindex manipulation of file names
13896 @cindex commands for file name manipulation
13897
13898 この章では、ファイル名操作に使うコマンドについて説明する。
13899
13900 @menu
13901 * basename invocation::      ファイル名からディレクトリと接尾辞を取り除く。
13902 * dirname invocation::       ファイル名から最後の要素を取り除く。
13903 * pathchk invocation::       ファイル名の有効性や可搬性を検査する。
13904 * mktemp invocation::        テンポラリファイルやディレクトリを作成する。
13905 * realpath invocation::      ファイル名を展開して表示する。
13906 @end menu
13907
13908
13909 @node basename invocation
13910 @section @command{basename}: ファイル名からディレクトリと接尾辞を取り除く
13911
13912 @pindex basename
13913 @cindex strip directory and suffix from file names
13914 @cindex directory, stripping from file names
13915 @cindex suffix, stripping from file names
13916 @cindex file names, stripping directory and suffix
13917 @cindex leading directory components, stripping
13918
13919 @command{basename} は、@var{name} の先頭にディレクトリ部分があれば、それを取り除く。
13920 @sp 1
13921 書式:
13922
13923 @example
13924 basename @var{name} [@var{suffix}]
13925 basename @var{option}@dots{} @var{name}@dots{}
13926 @end example
13927
13928 @var{suffix} が指定されていて、それが @var{name} の末尾と同一ならば、@var{suffix} の
13929 部分も @var{name} から取り除かれる。気をつけていただきたいが、ファイル名の
13930 末尾のスラッシュは、接尾辞のマッチングに先立って除去されるので、@var{suffix}
13931 にスラッシュが含まれていると、指定に効果がないことになる。@command{basename} は、
13932 結果を標準出力に表示する。
13933
13934 @c This test is used both here and in the section on dirname.
13935 @macro basenameAndDirname
13936 @command{basename} と @command{dirname} は合わせて設計されており、もし @samp{ls "$name"}
13937 が成功するならば、@samp{cd "$(dirname "$name")"; ls "$(basename "$name")"}
13938 というコマンドの連続も成功するようになっている。これは、ファイル名の
13939 末尾に改行が付いている場合を除いて、あらゆる場合にうまく行く。
13940 @end macro
13941 @basenameAndDirname
13942
13943 POSIX によれば、@var{name} が空の場合や @samp{//} の場合に、結果がどうなるかは、
13944 実装側で決めてよいことになっている。前者の場合、GNU の @command{basename} は、
13945 空文字列を返す。後者の場合、@var{//} と @var{/} とが別のものであるプラットフォーム
13946 では、結果は @samp{//} になり、全く区別しないプラットフォームでは、結果は @samp{/}
13947 になる。
13948
13949 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13950 オプションはオペランドの前に置かなければならない。
13951
13952 @table @samp
13953
13954 @item -a
13955 @itemx --multiple
13956 @opindex -a
13957 @opindex --multiple
13958 複数の引数を受け付ける。すべての引数は @var{name} として処理される。この
13959 オプションを使用する場合、@var{suffix} を指定するならば、@option{-s} オプション
13960 を使わなければならない。
13961
13962 @item -s @var{suffix}
13963 @itemx --suffix=@var{suffix}
13964 @opindex -s
13965 @opindex --suffix
13966 末尾にある @var{suffix} を除去する。このオプションを指定すると @option{-a} オプ
13967 ションも指定したことになる。
13968
13969 @item -z
13970 @itemx --zero
13971 @opindex -z
13972 @opindex --zero
13973 出力する項目を NUL 文字で区切る。
13974
13975 @end table
13976
13977 @exitstatus
13978
13979 用例:
13980
13981 @smallexample
13982 # "sort" を出力する。
13983 basename /usr/bin/sort
13984
13985 # "stdio" を出力する。
13986 basename include/stdio.h .h
13987
13988 # "stdio" を出力する。
13989 basename -s .h include/stdio.h
13990
13991 # "stdio", "stdlib" の順に出力する。
13992 basename -a -s .h include/stdio.h include/stdlib.h
13993 @end smallexample
13994
13995
13996 @node dirname invocation
13997 @section @command{dirname}: ファイル名から最後の要素を取り除く
13998
13999 @pindex dirname
14000 @cindex directory components, printing
14001 @cindex stripping non-directory suffix
14002 @cindex non-directory suffix, stripping
14003
14004 @command{dirname} は、各 @var{name} からスラッシュで区切られた最後の要素を取り除いて、
14005 残りのすべてを表示する。その際、最後の要素の左右どちらにあるスラッシュ
14006 も除去される。@var{name} を構成する文字列にスラッシュが一つも含まれない場合、
14007 @command{dirname} は (カレントディレクトリを意味する) @samp{.} を表示する。
14008 @sp 1
14009 書式:
14010
14011 @example
14012 dirname [@var{option}] @var{name}@dots{}
14013 @end example
14014
14015 @var{name} は実在するファイル名でなくても構わないが、実在するファイル名
14016 ならば、この操作によって、最後の要素それ自体がディレクトリである場合も
14017 含めて、最後の要素が存在するディレクトリが、利用できる形で表示される。
14018
14019 @basenameAndDirname
14020
14021 POSIX によれば、@var{name} が @samp{//} の場合に、結果がどうなるかは、実装側で
14022 決めてよいことになっている。GNU の @command{dirname} について言うと、@var{//} と @var{/}
14023 とが別のものであるプラットフォームでは、結果は @samp{//} になり、全く区別
14024 しないプラットフォームでは、結果は @samp{/} になる。
14025
14026 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
14027
14028 @table @samp
14029
14030 @item -z
14031 @itemx --zero
14032 @opindex -z
14033 @opindex --zero
14034 出力する項目を NUL 文字で区切る。
14035
14036 @end table
14037
14038 @exitstatus
14039
14040 用例:
14041
14042 @smallexample
14043 # "/usr/bin" を出力する。
14044 dirname /usr/bin/sort
14045 dirname /usr/bin//.//
14046
14047 # "dir1", "dir2" の順に出力する。
14048 dirname dir1/str dir2/str
14049
14050 # "." を出力する。
14051 dirname stdio.h
14052 @end smallexample
14053
14054
14055 @node pathchk invocation
14056 @section @command{pathchk}: ファイル名の有効性や可搬性を検査する
14057
14058 @pindex pathchk
14059 @cindex file names, checking validity and portability
14060 @cindex valid file names, checking for
14061 @cindex portable file names, checking for
14062
14063 @command{pathchk} は、ファイル名が有効かどうか、可搬性があるかどうかを検査する。
14064 @sp 1
14065 書式:
14066
14067 @example
14068 pathchk [@var{option}]@dots{} @var{name}@dots{}
14069 @end example
14070
14071 @command{pathchk} は各 @var{name} に対して、以下の条件のどれかが真ならば、エラー
14072 メッセージを表示する。
14073
14074 @enumerate
14075 @item
14076 @var{name} 中の実在するディレクトリの一つが、検索 (実行) 許可を持って
14077 いない。
14078 @item
14079 @var{name} の長さが、オペレーティング・システムによってサポートされている
14080 最大長を越えている。
14081 @item
14082 @var{name} の構成要素の一つの長さが、それが存在することになるファイル
14083 システムによってサポートされている最大長を越えている。
14084 @end enumerate
14085
14086 実在しないファイル名を指定しても、エラーにはならない。その名前の
14087 ファイルが、上記の条件内で作成可能であればよい。
14088
14089 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14090 オプションはオペランドの前に置かなければならない。
14091
14092 @table @samp
14093
14094 @item -p
14095 @opindex -p
14096 実際に使用しているファイルシステムに基づいて検査を行うのではなく、
14097 以下の条件を調べて、そのどれかが真ならば、エラーメッセージを表示
14098 する。
14099
14100 @enumerate
14101 @item
14102 ファイル名が空である。
14103
14104 @item
14105 ファイル名に、どのシステムでもファイル名に使用できる文字と
14106 して POSIX が規定している文字セット以外の文字が含まれている。
14107 すなわち、ASCII 英数字、@samp{.}、@samp{_}、@samp{-}、@samp{/} 以外の文字が使用
14108 されている。
14109
14110 @item
14111 ファイル名の長さや、その構成要素の一つの長さが、POSIX の規格で
14112 可搬性のために最小限サポートすべしとされている長さを越えている。
14113 @end enumerate
14114
14115 @item -P
14116 @opindex -P
14117 ファイル名が空だったり、@samp{-} で始まる構成要素を含んでいたりすると、
14118 エラーメッセージを表示する。
14119
14120 @item --portability
14121 @opindex --portability
14122 ファイル名が POSIX に準拠しているすべてのホストで使えるもので
14123 なければ、エラーメッセージを表示する。このオプションは、@samp{-p -P} と
14124 同じことである。
14125
14126 @end table
14127
14128 @cindex exit status of @command{pathchk}
14129 終了ステータス:
14130
14131 @display
14132 0: 指定されたすべてのファイル名が検査のすべてにパスした場合。
14133 1: それ以外。
14134 @end display
14135
14136 @node mktemp invocation
14137 @section @command{mktemp}: テンポラリファイルやディレクトリを作成する
14138
14139 @pindex mktemp
14140 @cindex file names, creating temporary
14141 @cindex directory, creating temporary
14142 @cindex temporary files and directories
14143
14144 @command{mktemp} は、テンポラリファイルやテンポラリディレクトリの作成を行う。
14145 @sp 1
14146 書式:
14147
14148 @example
14149 mktemp [@var{option}]@dots{} [@var{template}]
14150 @end example
14151
14152 @command{mktemp} は、@var{template} を基にして、安全なテンポラリファイルや
14153 ディレクトリを作成し、その名前を表示する。@var{template} を指定する場合、
14154 その最後の構成部分に少なくとも 3 個の連続する @samp{X} が含まれていなければ
14155 ならない。@var{template} を省略した場合は、@samp{tmp.XXXXXXXXXX} というテンプレート
14156 が使用され、@option{--tmpdir} オプションが暗黙のうちに指定されることになる。
14157 @var{template} 中の @samp{X} が連続する最後の部分は、英数字で置き換えられる。
14158 従って、大文字小文字を区別するファイルシステムなら、テンプレートに
14159 連続する @var{n} 個の @samp{X} が含まれていると、作成されるファイル名には、
14160 62 の @var{n} 乗とおりの可能性があることになる。
14161
14162 昔のスクリプトでは、テンポラリファイルを作成する際、単にプログラムの
14163 名前にプロセス ID (@samp{$$}) を拡張子として付けるのが習慣だった。しかし、
14164 この命名法は、名前の推測が容易であり、従って、競合状態を起こしやすい
14165 という弱点がある。攻撃者としては、テンポラリファイルに使われそうな名前で
14166 シンボリックリンクを作っておけばよい。そうすれば、スクリプトが未使用の
14167 ファイルだと考えて、テンポラリファイルのファイルハンドルを開いたとき、
14168 実際にはすでに存在しているファイルに書き込みをしているという羽目になる。
14169 同じ命名法を使ってディレクトリを作成するのは、もう少し安全である。作成
14170 しようとするディレクトリがすでに存在していると、@command{mkdir} は実行に失敗
14171 するからだ。とは言え、こちらもサービス不能化攻撃 (denial of service
14172 attacks) を可能にしてしまうわけで、やはり良策とは言えない。それ故、
14173 新しいスクリプトでは @command{mktemp} コマンドを使用するべきである。そうすれば、
14174 生成されるファイル名が確実に予測不可能になるので、実行中のスクリプトが
14175 テンポラリファイルの名前を知っているというまさにその事実が、ファイルを
14176 作成したのがそのスクリプトであり、他のユーザはそのファイルを変更でき
14177 ないと、間違いなく示すことになる。
14178
14179 ファイルを作成する場合、作成されるファイルには現在のユーザに対する
14180 読み込みと書き出しの許可が付くが、グループやその他のユーザに対しては、
14181 いかなる許可も付かない。現在の umask がより厳格な場合、付けられる許可は
14182 さらに厳しくなる。
14183
14184 用例をいくつか挙げてみる (ただし、注意していただきたいが、お手元で
14185 この通り実行しても、おそらくファイル名は違ったものになるはずだ)。
14186
14187 @itemize @bullet
14188
14189 @item
14190 カレントディレクトリにテンポラリファイルを作成する。
14191 @example
14192 $ mktemp file.XXXX
14193 file.H47c
14194 @end example
14195
14196 @item
14197 一般的な拡張子を付けて、テンポラリファイルを作成する。
14198 @example
14199 $ mktemp --suffix=.txt file-XXXX
14200 file-H08W.txt
14201 $ mktemp file-XXXX-XXXX.txt
14202 file-XXXX-eI9L.txt
14203 @end example
14204
14205 @item
14206 ユーザが環境変数 @env{TMPDIR} で指定しているディレクトリを基点として、
14207 その下に安全な FIFO を作成する。@env{TMPDIR} が設定されていない場合は、
14208 @file{/tmp} ではなく、カレントディレクトリを基点として使用する。肝腎な
14209 点は、@command{mktemp} は FIFO を作成しないが、FIFO を置くことができる
14210 安全なディレクトリなら作成できるということである。ディレクトリや
14211 FIFO を作成することができなかったときは、シェルを終了する。
14212 @example
14213 $ dir=$(mktemp -p "$@{TMPDIR:-.@}" -d dir-XXXX) || exit 1
14214 $ fifo=$dir/fifo
14215 $ mkfifo "$fifo" || @{ rmdir "$dir"; exit 1; @}
14216 @end example
14217
14218 @item
14219 可能ならば、テンポラリファイルを作成して使用するが、作成に失敗
14220 しても、エラーメッセージを出さない。ファイルは、環境変数 @env{TMPDIR}
14221 が設定されていれば、そこで指名されているディレクトリに作られるが、
14222 設定されていなければ、@file{/tmp} に作られる。
14223 @example
14224 $ file=$(mktemp -q) && @{
14225 >   # $file の使用をこのブロックの内側に限定しておけば、
14226 >   # 安全である。$file を引用符で囲んでいるのは、$TMPDIR が、
14227 >   # 従って、$file が、ホワイトスペースを含んでいるかも
14228 >   # しれないからだ。
14229 >   echo ... > "$file"
14230 >   rm "$file"
14231 > @}
14232 @end example
14233
14234 @item
14235 擬似ランダム文字発生装置として動作する (カレントディレクトリの内容
14236 によって影響を受けるので、完全にランダムではない)。セキュリティ
14237 ホールを避けたいならば、生成された名前を使って、ファイルを作っては
14238 いけない。
14239 @example
14240 $ mktemp -u XXX
14241 Gb9
14242 $ mktemp -u XXX
14243 nzC
14244 @end example
14245
14246 @end itemize
14247
14248 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14249
14250 @table @samp
14251
14252 @item -d
14253 @itemx --directory
14254 @opindex -d
14255 @opindex --directory
14256 ファイルではなく、ディレクトリを作成する。作成されるディレクトリには
14257 現在のユーザに対して、読み、書き、検索の許可が付くが、グループや
14258 その他のユーザに対しては、いかなる許可も付かない。現在の umask が
14259 より厳格な場合、付けられる許可はさらに厳しくなる。
14260
14261 @item -q
14262 @itemx --quiet
14263 @opindex -q
14264 @opindex --quiet
14265 ファイルやディレクトリの作成に失敗しても、エラーメッセージを出さない。
14266 終了ステータスは、ファイルが作成されたかどうかをやはり反映する。
14267
14268 @item -u
14269 @itemx --dry-run
14270 @opindex -u
14271 @opindex --dry-run
14272 既存のファイルの名前と重ならないテンポラリファイル用の名前を生成
14273 するが、ファイルシステムの内容を変更することはない (訳注: 要する
14274 に、テンポラリファイル名を生成表示するだけで、実際にファイルを
14275 作成することはないということ)。このコマンドの出力を使って、新しい
14276 ファイルを作るのは、本質的に安全ではない。名前の生成とその使用との
14277 間には、時間差があり、その間に他のプロセスが同じ名前でオブジェクト
14278 を作成することもありえるからである。
14279
14280 @item -p @var{dir}
14281 @itemx --tmpdir[=@var{dir}]
14282 @opindex -p
14283 @opindex --tmpdir
14284 @var{template} をディレクトリ @var{dir} を基点とする相対パスとして扱う。
14285 @var{dir} が指定されていない場合や (ロングオプションの @option{--tmpdir} でのみ
14286 可能)、空文字列の場合は、環境変数 @env{TMPDIR} が設定されていれば、その
14287 値を使用し、設定されていなければ、@samp{/tmp} を使用する。このオプション
14288 を指定する場合、 @var{template} は絶対パスであってはならない。とは言え、
14289 @var{template} にスラッシュが含まれていても構わないが、その場合、途中に
14290 あるディレクトリはすでに存在していなければならない。
14291
14292 @item --suffix=@var{suffix}
14293 @opindex --suffix
14294 @var{template} の末尾に @var{suffix} を追加する。@var{suffix} はスラッシュを含んで
14295 いてはならない。@option{--suffix} を指定する場合、@var{template} は @samp{X} で終わっ
14296 ていなければならない。@option{--suffix} が指定されていない場合は、@var{template}
14297 中の最後の @samp{X} の位置を調べることで、@var{suffix} としてふさわしいもの
14298 を割り出す。このオプションが存在するのは、デフォルトの @var{template} を
14299 使用しているとき、@samp{X} で始まる @var{suffix} を付けられるようにするため
14300 である。
14301
14302 @item -t
14303 @opindex -t
14304 @var{template} を、環境変数 @env{TMPDIR} が設定されていれば、その値である
14305 ディレクトリ直下の 1 個のファイルとして扱う。@env{TMPDIR} が設定されて
14306 いなければ、@option{-p} で指定されるディレクトリ直下、それ以外の場合は、
14307 @samp{/tmp} 直下になる。なお、@var{template} にスラッシュが含まれていてはなら
14308 ない。このオプションは非推奨である。@option{-t} なしで @option{-p} を使う方が
14309 (@env{TMPDIR} よりコマンドラインの指定を優先するという点で) デフォルト
14310 の動作として優れているし、(途中のディレクトリも指定できるという
14311 点で) 柔軟性も上だからである。
14312
14313 @end table
14314
14315 @cindex exit status of @command{mktemp}
14316 終了ステータス:
14317
14318 @display
14319 0: ファイルが作成された場合。
14320 1: それ以外。
14321 @end display
14322
14323
14324 @node realpath invocation
14325 @section @command{realpath}: ファイル名を展開して表示する
14326
14327 @pindex realpath
14328 @cindex file names, canonicalization
14329 @cindex symlinks, resolution
14330 @cindex canonical file name
14331 @cindex canonicalize a file name
14332 @pindex realpath
14333 @findex realpath
14334
14335 @command{realpath} は、すべてのシンボリックリンクを展開し、@samp{/./} や @samp{/../} に
14336 対する参照を解決する。さらに、余分な @samp{/} 文字の削除も行う。デフォルト
14337 では、指定したファイル名のうち、最後の要素以外のすべての要素が実在して
14338 いなければならない。
14339 @sp 1
14340 書式:
14341
14342 @example
14343 realpath [@var{option}]@dots{} @var{file}@dots{}
14344 @end example
14345
14346 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14347
14348 @table @samp
14349
14350 @item -e
14351 @itemx --canonicalize-existing
14352 @opindex -e
14353 @opindex --canonicalize-existing
14354 指定されたファイル名中のすべての構成要素が実在することを確認する。
14355 存在しなかったり、利用できなかったりする要素があると、@option{-q} オプ
14356 ションが指定されていないかぎり、@command{realpath} はエラーメッセージを
14357 出し、0 以外の終了コードで終了する。ファイル名の末尾にスラッシュ
14358 を付けると、その名前はディレクトリであるという指定になる。
14359
14360 @item -m
14361 @itemx --canonicalize-missing
14362 @opindex -m
14363 @opindex --canonicalize-missing
14364 指定されたファイル名中に存在しなかったり、使用できなかったりする
14365 構成要素があれば、それをディレクトリとして処理する。
14366
14367 @item -L
14368 @itemx --logical
14369 @opindex -L
14370 @opindex --logical
14371 指定されたファイル名中にあるシンボリックリンクを展開する。ただし、
14372 シンボリックリンクに @samp{..} という要素が後続している場合は、シンボ
14373 リックリンクの展開を行う前に、そちらを先に処理する。(訳注: 例を
14374 挙げた方が、わかりやすいだろう。@samp{symlink-directory/../..} といった
14375 ファイル名が与えられた場合、symlink-directory というシンボリック
14376 リンクそのものの親ディレクトリの親ディレクトリに展開するという
14377 こと。次項の注と比較していただきたい。)
14378
14379 @item -P
14380 @itemx --physical
14381 @opindex -P
14382 @opindex --physical
14383 指定されたファイル名中にあるシンボリックリンクを展開する。シンボ
14384 リックリンクに @samp{..} という要素が後続している場合も、シンボリック
14385 リンクを展開してから、@samp{..} の処理を行う。こちらがデフォルトの動作
14386 モードである。(訳注: すなわち、@samp{symlink-directory/../..} といった
14387 ファイル名が与えられた場合、シンボリックリンクの参照先の親ディレ
14388 クトリの親ディレクトリに展開する。)
14389
14390 @item -q
14391 @itemx --quiet
14392 @opindex -q
14393 @opindex --quiet
14394 指定されたファイル名についてエラーメッセージを出力しない。
14395
14396 @item -s
14397 @itemx --strip
14398 @itemx --no-symlinks
14399 @opindex -s
14400 @opindex --strip
14401 @opindex --no-symlinks
14402 シンボリックリンクの展開を行わない。すなわち、@samp{/./} や @samp{/../} の
14403 参照の解決と、余分な @samp{/} 文字の削除だけを行う。@option{-m} オプションと
14404 組み合わせた場合、@command{realpath} は与えられたファイル名に対して操作を
14405 行うだけであり、その各要素が存在しているかどうか、実在のファイルに
14406 当たってみることはない。
14407
14408 @item -z
14409 @itemx --zero
14410 @opindex -z
14411 @opindex --zero
14412 出力する項目を NUL 文字で区切る。
14413
14414 @item --relative-to=@var{file}
14415 @opindex --relative-to
14416 @cindex relpath
14417 オプション引数に指定したファイルを基点とする相対パスとして、
14418 ファイル名を展開する。このオプションは、ファイルの存在に関して
14419 @option{-m} や @option{-e} オプションを認識することに注意していただきたい。
14420
14421 @item --relative-base=@var{base}
14422 @opindex --relative-base
14423 このオプションは @option{--relative-to} と一緒に使うこともでき、その
14424 場合は、操作対象の @var{file} が @var{base} 以下のディレクトリに存在するとき
14425 にのみ、相対パス名を表示するように、@option{--relative-to} の出力に制限
14426 を課す。@var{file} が @var{base} 以下のディレクトリに存在しないときは、出力
14427 は絶対パスのファイル名になる。@option{--relative-to} を指定しなかった
14428 場合、@var{base} 以下のディレクトリに存在するファイルは、@var{base} を基点
14429 とする相対パスで表示される。@option{--relative-to} も指定するなら、その
14430 ディレクトリは @var{base} の下位ディレクトリでなければならず、さもない
14431 と、このオプションは効果を持たない。このオプションは、ファイル
14432 の存在に関して @option{-m} や @option{-e} オプションを認識することに注意して
14433 いただきたい。例を挙げよう。
14434
14435 @example
14436 realpath --relative-to=/usr /tmp /usr/bin
14437 @result{} ../tmp
14438 @result{} bin
14439 realpath --relative-base=/usr /tmp /usr/bin
14440 @result{} /tmp
14441 @result{} bin
14442 @end example
14443
14444 @end table
14445
14446 @cindex exit status of @command{realpath}
14447 終了ステータス:
14448
14449 @display
14450 0: すべてのファイル名が問題なく表示できた場合。
14451 1: それ以外。
14452 @end display
14453
14454
14455 @node Working context
14456 @chapter 作業環境
14457
14458 @cindex working context
14459 @cindex commands for printing the working context
14460
14461 この章では、現在作業中の環境を表示したり、変更したりするコマンドを説明
14462 する。ここで環境というのは、カレントディレクトリ、端末の設定などである。
14463 次章で取り上げるユーザ関係のコマンドも参照していただきたい。
14464
14465 @menu
14466 * pwd invocation::           現在作業中のディレクトリを表示する。
14467 * stty invocation::          端末の諸特性を表示・変更する。
14468 * printenv invocation::      環境変数を表示する。
14469 * tty invocation::           標準入力に接続している端末のファイル名を表示する。
14470 @end menu
14471
14472
14473 @node pwd invocation
14474 @section @command{pwd}: 現在作業中のディレクトリを表示する
14475
14476 @pindex pwd
14477 @cindex print name of current directory
14478 @cindex current working directory, printing
14479 @cindex working directory, printing
14480
14481
14482 @command{pwd} は、カレントディレクトリの名前を表示する。
14483 @sp 1
14484 書式:
14485
14486 @example
14487 pwd [@var{option}]@dots{}
14488 @end example
14489
14490 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14491
14492 @table @samp
14493 @item -L
14494 @itemx --logical
14495 @opindex -L
14496 @opindex --logical
14497 環境変数 @env{PWD} の値が、@samp{.} や @samp{..} を含まないカレントディレクトリ
14498 の絶対パス名であっても、シンボリックリンクは含んでいるかもしれない。
14499 その場合は、その値をそのまま出力する。それ以外の場合は、デフォルトの
14500 @option{-P} オプションと同じ処理を行う。
14501
14502 @item -P
14503 @itemx --physical
14504 @opindex -P
14505 @opindex --physical
14506 カレントディレクトリについて、参照を完全に解決した名前を表示する。
14507 すなわち、表示される名前のすべての要素が、本物のディレクトリの名前
14508 になり、シンボリックリンクは一つも含まれない。
14509 @end table
14510
14511 @cindex symbolic links and @command{pwd}
14512 @option{-L} と @option{-P} のオプションが両方とも指定されている場合は、最後に
14513 指定された方が優先される。どちらのオプションも指定されない場合は、
14514 環境変数  @env{POSIXLY_CORRECT} が設定されていないかぎり、この実装では、
14515 @option{-P} がデフォルトとして使用される。
14516
14517 @mayConflictWithShellBuiltIn{pwd}
14518
14519 @exitstatus
14520
14521
14522 @node stty invocation
14523 @section @command{stty}: 端末の諸特性を表示・変更する
14524
14525 @pindex stty
14526 @cindex change or print terminal settings
14527 @cindex terminal settings
14528 @cindex line settings of terminal
14529
14530 @command{stty} は、たとえばボーレート (baud rate) のような、端末の諸特性を表示、
14531 または変更する。
14532 @sp 1
14533 書式:
14534
14535 @example
14536 stty [@var{option}] [@var{setting}]@dots{}
14537 stty [@var{option}]
14538 @end example
14539
14540 tty ラインの設定 (訳注: 上記書式の @var{setting}) を一つも指定しない場合、
14541 @command{stty} は、ボーレートと (それをサポートしているシステムでは) ライン
14542 制御規則番号 (line discipline number)、それに、ライン設定のうち
14543 @samp{stty sane} によって設定される値から変更のあるものを表示する。デフォルト
14544 では、モードの取得や設定は、標準入力に結びついている tty ラインに
14545 対して行うが、これは @option{--file} オプションによって変更することができる。
14546
14547 @command{stty} では、以下で述べるように、オプションではないたくさんの
14548 引数が使える。そうした引数は、端末ライン運用の様々な面を変更する。
14549
14550 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14551
14552 @table @samp
14553 @item -a
14554 @itemx --all
14555 @opindex -a
14556 @opindex --all
14557 現在のすべての設定を人間に読みやすい形で表示する。このオプションを
14558 指定したときには、ラインの設定はできない。
14559
14560 @item -F @var{device}
14561 @itemx --file=@var{device}
14562 @opindex -F
14563 @opindex --file
14564 標準入力に結びついている tty ラインを操作の対象にする代わりに、
14565 @var{device} で指定されたファイル名を使ってオープンするラインを操作
14566 の対象にする。このオプションが必要なのは、POSIX 準拠の tty を
14567 オープンするには、@code{O_NONDELAY} フラグを使う必要があるからだ。
14568 そうしないと、POSIX 準拠の tty は、@code{clocal} フラグがセットされて
14569 いない場合に、キャリア検出線 (carrier detect line) が活発化する
14570 まで、ブロッキングを起こす。そんなわけで、デバイスのオープンは、
14571 いつも通りのやり方で (訳注: たとえば、@samp{stty < /dev/ttyS1} といった
14572 形で) シェルにやらせておけばよい、というわけには必ずしも行かない
14573 のである。
14574
14575 @item -g
14576 @itemx --save
14577 @opindex -g
14578 @opindex --save
14579 @cindex machine-readable @command{stty} output
14580 現在の設定を別の @command{stty} コマンドを使って再現する際に、その引数と
14581 して使えるような形で、現在のすべての設定を表示する。このオプション
14582 を指定したときには、ラインの設定はできない。
14583
14584 @end table
14585
14586 設定の多くは、前に @samp{-} を付けることで OFF にすることができる。以下
14587 では、そうした引数については、説明中に「無効化できる」と記しておいた。
14588 説明そのものは、有効にする場合について、すなわち、@samp{-} で OFF にしない
14589 場合について述べている (「無効にした場合」とはっきりことわっている場合
14590 は、もちろん別である)。
14591
14592 設定の中には、すべての POSIX 準拠システムで利用できるとはかぎらない
14593 ものもある。そうしたものは、拡張機能を使用しているからだ。以下では、
14594 そうした引数については、説明中に「非 POSIX」と記しておいた。非 POSIX
14595 のシステムであっても、そうした設定が使えないことがあるかもしれないが、
14596 あらゆる場合について書いておくことは、不可能である。とりあえず、試して
14597 みていただきたい。
14598
14599 @exitstatus
14600
14601 @menu
14602 * Control::                  制御関係の設定
14603 * Input::                    入力に関する設定
14604 * Output::                   出力に関する設定
14605 * Local::                    ローカル設定
14606 * Combination::              組み合わせ設定
14607 * Characters::               特殊文字
14608 * Special::                  特殊設定
14609 @end menu
14610
14611
14612 @node Control
14613 @subsection 制御関係の設定
14614
14615 @cindex control settings
14616 制御関係の設定:
14617
14618 @table @samp
14619 @item parenb
14620 @opindex parenb
14621 @cindex two-way parity
14622 出力にパリティビットを生成し、入力にもパリティビットがあるものと
14623 期待する。無効化できる。
14624
14625 @item parodd
14626 @opindex parodd
14627 @cindex odd parity
14628 @cindex even parity
14629 パリティを奇数に設定する。無効化できる (この設定の場合、@samp{-} の前置
14630 は偶数パリティを意味する)。
14631
14632 @item cmspar
14633 @opindex cmspar
14634 @cindex constant parity
14635 @cindex stick parity
14636 @cindex mark parity
14637 @cindex space parity
14638 "stick" (mark/space) パリティを使用する。parodd が設定されている
14639 場合、このパリティビットは常に 1 である。parodd が設定されていない
14640 場合、このパリティビットは常に 0 だ。非 POSIX。無効化できる。
14641 (coreutils-8.22 の新機能)
14642
14643 @item cs5
14644 @itemx cs6
14645 @itemx cs7
14646 @itemx cs8
14647 @opindex cs@var{n}
14648 @cindex character size
14649 @cindex eight-bit characters
14650 キャラクタ・サイズを 5, 6, 7, 8 ビットにする。
14651
14652 @item hup
14653 @itemx hupcl
14654 @opindex hup[cl]
14655 最後のプロセスが tty をクローズするとき、ハングアップ・シグナルを
14656 送る。無効化できる。
14657
14658 @item cstopb
14659 @opindex cstopb
14660 @cindex stop bits
14661 1 キャラクタにつき 2 個のストップビットを使用する。無効化できる
14662 (この設定の場合、@samp{-} の前置は 1 個のストップビット使用を意味する)。
14663
14664 @item cread
14665 @opindex cread
14666 入力の受信を許可する。無効化できる。
14667
14668 @item clocal
14669 @opindex clocal
14670 @cindex modem control
14671 モデムのコントロール・シグナルを無効にする。無効化できる。
14672
14673 @item crtscts
14674 @opindex crtscts
14675 @cindex hardware flow control
14676 @cindex flow control, hardware
14677 @cindex RTS/CTS flow control
14678 RTS/CTS フロー制御を有効にする。非 POSIX。無効化できる。
14679
14680 @item cdtrdsr
14681 @opindex cdtrdsr
14682 @cindex hardware flow control
14683 @cindex flow control, hardware
14684 @cindex DTR/DSR flow control
14685 DTR/DSR フロー制御を有効にする。非 POSIX。無効化できる。
14686 @end table
14687
14688
14689 @node Input
14690 @subsection 入力に関する設定
14691
14692 @cindex input settings
14693 以下の設定は、端末から受け取るデータに対する操作を制御する。
14694
14695 @table @samp
14696 @item ignbrk
14697 @opindex ignbrk
14698 @cindex breaks, ignoring
14699 ブレーク (break) 文字を無視する。無効化できる。
14700
14701 @item brkint
14702 @opindex brkint
14703 @cindex breaks, cause interrupts
14704 ブレークが割り込みシグナルを発生するようにする。無効化できる。
14705
14706 @item ignpar
14707 @opindex ignpar
14708 @cindex parity, ignoring
14709 パリティエラーのある文字を無視する。無効化できる。
14710
14711 @item parmrk
14712 @opindex parmrk
14713 @cindex parity errors, marking
14714 パリティエラーをマークする (その印として 255, 0 (0xFF, 0x00) という
14715 2 文字の連続を使う)。無効化できる。
14716
14717 @item inpck
14718 @opindex inpck
14719 入力のパリティチェックを有効にする。無効化できる。
14720
14721 @item istrip
14722 @opindex istrip
14723 @cindex eight-bit input
14724 入力文字の高位ビット (8 番目のビット) をクリアする。無効化できる。
14725
14726 @item inlcr
14727 @opindex inlcr
14728 @cindex newline, translating to return
14729 改行文字 (newline) を復帰文字 (carriage return) に変換する。無効化
14730 できる。
14731
14732 @item igncr
14733 @opindex igncr
14734 @cindex return, ignoring
14735 復帰文字を無視する。無効化できる。
14736
14737 @item icrnl
14738 @opindex icrnl
14739 @cindex return, translating to newline
14740 復帰文字を改行文字に変換する。無効化できる。
14741
14742 @item iutf8
14743 @opindex iutf8
14744 @cindex input encoding, UTF-8
14745 入力文字が UTF-8 で符号化されていると見なす。無効化できる。
14746
14747 @item ixon
14748 @opindex ixon
14749 @kindex C-s/C-q flow control
14750 @cindex XON/XOFF flow control
14751 XON/XOFF フロー制御を有効にする (すなわち、@kbd{CTRL-S}/@kbd{CTRL-Q} を
14752 有効にする)。無効化できる。
14753
14754 @item ixoff
14755 @itemx tandem
14756 @opindex ixoff
14757 @opindex tandem
14758 @cindex software flow control
14759 @cindex flow control, software
14760 システムの入力バッファが一杯になりかけたら、@code{stop} 文字を送り、
14761 バッファがほぼ空に戻ったら、@code{start} 文字を送るようにする。
14762 無効化できる。
14763
14764 @item iuclc
14765 @opindex iuclc
14766 @cindex uppercase, translating to lowercase
14767 大文字を小文字に変換する。非 POSIX。無効化できる。ilcuc は実装
14768 されていないことに注意していただきたい。そんなものを有効にしたら、
14769 ほとんどの (小文字である) Unix のコマンドが、打ち込めなくなって
14770 しまうからである。
14771
14772 @item ixany
14773 @opindex ixany
14774 どんな文字でも出力を再開できるようにする (これを無効にすると、start
14775 文字のみが出力を再開する)。非 POSIX。無効化できる。
14776
14777 @item imaxbel
14778 @opindex imaxbel
14779 @cindex beeping at input buffer full
14780 入力バッファが一杯のとき、文字を受け取ると、入力バッファをフラッシュ
14781 せずに、ビープ音を鳴らすようにする。非 POSIX。無効化できる。
14782 @end table
14783
14784
14785 @node Output
14786 @subsection 出力に関する設定
14787
14788 @cindex output settings
14789 以下の設定は、端末に送るデータに対する操作を制御する。
14790
14791 @table @samp
14792 @item opost
14793 @opindex opost
14794 出力に対して後処理 (postprocess) を行う (訳注: すなわち、以下に列挙
14795 するようなことをする)。無効化できる。
14796
14797 @item olcuc
14798 @opindex olcuc
14799 @cindex lowercase, translating to output
14800 小文字を大文字に変換する。非 POSIX。無効化できる。(ouclc は現在の
14801 ところ、実装されていないことに注意。)
14802
14803 @item ocrnl
14804 @opindex ocrnl
14805 @cindex return, translating to newline
14806 復帰文字 (carriage return) を改行文字 (newline) に変換する。
14807 非 POSIX。無効化できる。
14808
14809 @item onlcr
14810 @opindex onlcr
14811 @cindex newline, translating to crlf
14812 改行文字を復帰文字 + 改行文字に変換する。非 POSIX。無効化できる。
14813
14814 @item onocr
14815 @opindex onocr
14816 行頭に復帰文字を出力しない。非 POSIX。無効化できる。
14817
14818 @item onlret
14819 @opindex onlret
14820 改行が復帰として動作する。非 POSIX。無効化できる。
14821
14822 @item ofill
14823 @opindex ofill
14824 @cindex pad instead of timing for delaying
14825 時間で間合いを計る代りに、充填文字 (埋め草文字) を何字か送る
14826 ことで、遅延を行う。非 POSIX。無効化できる。(訳注: 遅延という
14827 のは、端末側の処理が済むまで、データの送出を遅らせること)。
14828
14829 @item ofdel
14830 @opindex ofdel
14831 @cindex pad character
14832 充填文字として ASCII NUL 文字ではなく、ASCII DEL 文字を使う。
14833 非 POSIX。無効化できる。
14834
14835 @item nl1
14836 @itemx nl0
14837 @opindex nl@var{n}
14838 改行 (newline) 用の遅延方式。非 POSIX。
14839
14840 @item cr3
14841 @itemx cr2
14842 @itemx cr1
14843 @itemx cr0
14844 @opindex cr@var{n}
14845 復帰 (carriage return) 用の遅延方式。非 POSIX。
14846
14847 @item tab3
14848 @itemx tab2
14849 @itemx tab1
14850 @itemx tab0
14851 @opindex tab@var{n}
14852 水平タブ用の遅延方式。非 POSIX。
14853
14854 @item bs1
14855 @itemx bs0
14856 @opindex bs@var{n}
14857 バックスペース用の遅延方式。非 POSIX。
14858
14859 @item vt1
14860 @itemx vt0
14861 @opindex vt@var{n}
14862 垂直タブ用の遅延方式。非 POSIX。
14863
14864 @item ff1
14865 @itemx ff0
14866 @opindex ff@var{n}
14867 改ページ (form feed) 用の遅延方式。非 POSIX。
14868 @end table
14869
14870
14871 @node Local
14872 @subsection ローカル設定
14873
14874 @cindex local settings
14875
14876 @table @samp
14877 @item isig
14878 @opindex isig
14879 特殊文字 @code{interrupt}, @code{quit}, @code{suspend} を有効にする。無効化
14880 できる。
14881
14882 @item icanon
14883 @opindex icanon
14884 特殊文字 @code{erase}, @code{kill}, @code{werase}, @code{rprnt} を有効にする。無効化
14885 できる。
14886
14887 @item iexten
14888 @opindex iexten
14889 POSIX にない特殊文字を有効にする。無効化できる。
14890
14891 @item echo
14892 @opindex echo
14893 入力した文字をエコーする。無効化できる。
14894
14895 @item echoe
14896 @itemx crterase
14897 @opindex echoe
14898 @opindex crterase
14899 @code{erase} 文字を「バックスペース、スペース、バックスペース」として
14900 エコーする。無効化できる。
14901
14902 @item echok
14903 @opindex echok
14904 @cindex newline echoing after @code{kill}
14905 @code{kill} 文字に続けて、改行文字をエコーする。無効化できる。
14906
14907 @item echonl
14908 @opindex echonl
14909 @cindex newline, echoing
14910 他の文字のエコーを行わないない場合でも、改行文字はエコーする。
14911 無効化できる。
14912
14913 @item noflsh
14914 @opindex noflsh
14915 @cindex flushing, disabling
14916 特殊文字 @code{interrupt} や @code{quit} の後で、フラッシュを行わない。無効化
14917 できる。
14918
14919 @item xcase
14920 @opindex xcase
14921 @cindex case translation
14922 @code{icanon} が設定されているとき、小文字を表す文字の頭に @samp{\} を付ける
14923 ことで、大文字の入出力を可能にする。非 POSIX。無効化できる。
14924 (訳注: たとえば、大文字しか入出力できない端末で、ただの @samp{A} なら
14925 小文字の a を意味し、@samp{\A} なら大文字の A を意味するということ。
14926 次節「組み合わせ設定」の lcase と termios(3) を参照。)
14927
14928 @item tostop
14929 @opindex tostop
14930 @cindex background jobs, stopping at terminal write
14931 端末に書き込もうとしているバックグラウンドジョブを止める。
14932 非 POSIX。無効化できる。
14933
14934 @item echoprt
14935 @itemx prterase
14936 @opindex echoprt
14937 @opindex prterase
14938 削除した文字を @samp{\} と @samp{/} で囲んで、逆順にエコーする。非 POSIX。
14939 無効化できる。(訳注: プリンタ端末で使用する設定らしい。)
14940
14941 @item echoctl
14942 @itemx ctlecho
14943 @opindex echoctl
14944 @opindex ctlecho
14945 @cindex control characters, using @samp{^@var{c}}
14946 @cindex hat notation for control characters
14947 制御文字をそのまま表示するのではなく、ハット記法 (@samp{^@var{c}}) で
14948 エコーする。非 POSIX。無効化できる。
14949
14950 @item echoke
14951 @itemx crtkill
14952 @opindex echoke
14953 @opindex crtkill
14954 行上の各文字を削除することで、特殊文字 @code{kill} のエコーを行う際、
14955 @code{echoctl} や @code{echok} の設定ではなく、@code{echoprt} や @code{echoe} の設定が
14956 指示するところに従う。非 POSIX。無効化できる。
14957 @end table
14958
14959
14960 @node Combination
14961 @subsection 組み合わせ設定
14962
14963 @cindex combination settings
14964 組み合わせ設定:
14965
14966 @table @samp
14967 @item evenp
14968 @opindex evenp
14969 @itemx parity
14970 @opindex parity
14971 @code{parenb -parodd cs7} に相当する。無効化できる。無効化した場合、
14972 @code{-parenb cs8} と同じになる。
14973
14974 @item oddp
14975 @opindex oddp
14976 @code{parenb parodd cs7} に相当する。無効化できる。無効化した場合、
14977 @code{-parenb cs8} と同じになる。
14978
14979 @item nl
14980 @opindex nl
14981 @code{-icrnl -onlcr} に相当する。無効化できる。無効化した場合、@code{icrnl
14982 -inlcr -igncr onlcr -ocrnl -onlret} と同じになる。
14983
14984 @item ek
14985 @opindex ek
14986 特殊文字 @code{erase} と @code{kill} をデフォルトの値に戻す。
14987
14988 @item sane
14989 @opindex sane
14990 以下の設定に相当する。
14991
14992 @c This is too long to write inline.
14993 @example
14994 cread -ignbrk brkint -inlcr -igncr icrnl -ixoff
14995 -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr
14996 -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
14997 ff0 isig icanon iexten echo echoe echok -echonl
14998 -noflsh -xcase -tostop -echoprt echoctl echoke
14999 @end example
15000
15001 @noindent
15002 さらに、すべての特殊文字をそのデフォルトの値に設定する。
15003
15004 @item cooked
15005 @opindex cooked
15006 @code{brkint ignpar istrip icrnl ixon opost isig icanon} に相当する。
15007 さらに、特殊文字 @code{eof} と @code{eol} が @code{min} 及び @code{time} 文字と同じ
15008 ならば、@code{eof} と @code{eol} をデフォルトの値に設定する。無効化できる。
15009 無効化した場合は、@code{raw} と同じになる。
15010
15011 @item raw
15012 @opindex raw
15013 以下の設定に相当する。
15014
15015 @example
15016 -ignbrk -brkint -ignpar -parmrk -inpck -istrip
15017 -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
15018 -imaxbel -opost -isig -icanon -xcase min 1 time 0
15019 @end example
15020
15021 @noindent
15022 無効化できる。無効化した場合は、@code{cooked} と同じになる。
15023
15024 @item cbreak
15025 @opindex cbreak
15026 @option{-icanon} と同じである。無効化できる。無効化した場合は、@code{icanon}
15027 と同じになる。
15028
15029 @item pass8
15030 @opindex pass8
15031 @cindex eight-bit characters
15032 @code{-parenb -istrip cs8} に相当する。無効化できる。無効化した場合は、
15033 @code{parenb istrip cs7} と同じになる。
15034
15035 @item litout
15036 @opindex litout
15037 @option{-parenb -istrip -opost cs8} に相当する。無効化できる。無効化した
15038 場合は、@code{parenb istrip opost cs7} と同じになる。
15039
15040 @item decctlq
15041 @opindex decctlq
15042 @option{-ixany} と同じである。非 POSIX。無効化できる。
15043
15044 @item tabs
15045 @opindex tabs
15046 @code{tab0} と同じである。非 POSIX。無効化できる。無効化した場合は、
15047 @code{tab3} と同じになる。
15048
15049 @item lcase
15050 @itemx LCASE
15051 @opindex lcase
15052 @opindex LCASE
15053 @code{xcase iuclc olcuc} に相当する。非 POSIX。無効化できる。(この設定
15054 は、大文字しか扱えない端末で使用する。)
15055
15056 @item crt
15057 @opindex crt
15058 @code{echoe echoctl echoke} に相当する。
15059
15060 @item dec
15061 @opindex dec
15062 @code{echoe echoctl echoke -ixany intr ^C erase ^? kill ^U} に相当する。
15063 @end table
15064
15065
15066 @node Characters
15067 @subsection 特殊文字
15068
15069 @cindex special characters
15070 @cindex characters, special
15071
15072 特殊文字のデフォルトの値は、システムによって様々である。特殊文字を設定
15073 するには、@samp{name value} という書式を用いる。この name に何が指定できる
15074 かは、以下に列挙するが、value には、文字そのもの、ハット記法 (@samp{^@var{c}})、
15075 整数のいづれかを指定することができる。整数は、@samp{0x} で始まっていれば
15076 16 進数、@samp{0} で始まっていれば 8 進数、それ以外の数字なら 10 進数と
15077 見なされる。
15078
15079 @cindex disabling special characters
15080 @kindex u@r{, and disabling special characters}
15081 GNU の stty では、値に @code{^-} や @code{undef} を指定すると、その特殊文字を
15082 無効にする。(これは、Ultrix の @command{stty} と互換性がない。そこでは、特殊
15083 文字を無効にするには @samp{u} という値が使用されるのだ。GNU の @command{stty} は、
15084 @samp{u} という値を特別扱いしない。すなわち、その特殊文字として @key{U} を設定
15085 するだけである。)
15086
15087 @table @samp
15088
15089 @item intr
15090 @opindex intr
15091 割り込み (interrupt) シグナルを送る。
15092
15093 @item quit
15094 @opindex quit
15095 中止 (quit) シグナルを送る。
15096
15097 @item erase
15098 @opindex erase
15099 直前にタイプした文字を削除する。
15100
15101 @item kill
15102 @opindex kill
15103 現在行を削除する。
15104
15105 @item eof
15106 @opindex eof
15107 ファイル終端 (end of file) 文字を送る (入力を終了する)。
15108
15109 @item eol
15110 @opindex eol
15111 行を終端する。
15112
15113 @item eol2
15114 @opindex eol2
15115 行を終端する別の文字。非 POSIX。
15116
15117 @item swtch
15118 @opindex swtch
15119 シェルの別の層 (a different shell layer) に切り換える。非 POSIX。
15120
15121 @item start
15122 @opindex start
15123 停止している出力を再開する。
15124
15125 @item stop
15126 @opindex stop
15127 出力を停止する。
15128
15129 @item susp
15130 @opindex susp
15131 端末からの停止シグナル (terminal stop signal, SIGTSTP) を送る。
15132
15133 @item dsusp
15134 @opindex dsusp
15135 入力をフラッシュしてから、端末からの停止シグナルを送る。非 POSIX。
15136
15137 @item rprnt
15138 @opindex rprnt
15139 現在行を表示し直す。非 POSIX。
15140
15141 @item werase
15142 @opindex werase
15143 直前にタイプした単語 (word) を削除する。非 POSIX。
15144
15145 @item lnext
15146 @opindex lnext
15147 次にタイプする文字が特殊文字であっても、タイプしたとおりの文字として
15148 入力する。非 POSIX。(訳注: たとえば、lnext が ^V の場合、^V^D と
15149 続けてタイプすると、^D を入力終了の印としてではなく、^D という文字
15150 そのものとして入力できるということ。)
15151 @end table
15152
15153
15154 @node Special
15155 @subsection 特殊設定
15156
15157 @cindex special settings
15158
15159 @table @samp
15160 @item min @var{n}
15161 @opindex min
15162 @option{-icanon} が設定されている際、time の値として指定されている時間が
15163 経過するまでの間に、1 回分の読み込みの条件を満たす最少限の文字数を
15164 設定する。
15165
15166 @item time @var{n}
15167 @opindex time
15168 @option{-icanon} が設定されている際、最小限の文字数が読み込まれなかった
15169 場合に、読み込みが時間切れになるまでの時間を 10 分の 1 秒単位で
15170 設定する。
15171
15172 @item ispeed @var{n}
15173 @opindex ispeed
15174 入力速度を @var{n} に設定する。
15175
15176 @item ospeed @var{n}
15177 @opindex ospeed
15178 出力速度を @var{n} に設定する。
15179
15180 @item rows @var{n}
15181 @opindex rows
15182 端末の行数は @var{n} 行だと、tty カーネルドライバに伝える。非 POSIX。
15183
15184 @item cols @var{n}
15185 @itemx columns @var{n}
15186 @opindex cols
15187 @opindex columns
15188 端末の横幅は @var{n} 桁だと、カーネルに伝える。非 POSIX。
15189
15190 @item size
15191 @opindex size
15192 @vindex LINES
15193 @vindex COLUMNS
15194 端末の行数と桁数を表示する。これは、端末が持っていると、カーネルが
15195 考えている行数と桁数である。(カーネルで行数や桁数をサポートして
15196 いないシステムでは、通常その代わりに、環境変数 @env{LINES} や @env{COLUMNS}
15197 が使用される。それに対して、GNU の @command{stty} は、そうした環境変数
15198 について何も知らない。) 非 POSIX。
15199
15200 @item line @var{n}
15201 @opindex line
15202 ライン制御規則 (line discipline) @var{n} を使用する。非 POSIX。
15203
15204 @item speed
15205 @opindex speed
15206 端末速度を表示する。
15207
15208 @item @var{n}
15209 @cindex baud rate, setting
15210 入出力の速度を @var{n} に設定する。@var{n} には次の一つが使える。0 50 75 110
15211 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 19200 38400
15212 @code{exta} @code{extb}。@code{exta} は 19200 と同じであり、@code{extb} は 38400 と
15213 同じである。GNU/Linux を含む多くのシステムが、もっと早い速度を
15214 サポートしている。@command{stty} は、システムがサポートしているならという
15215 条件で、次の速度もサポートしている。57600 115200 230400 460800
15216 500000 576000 921600 1000000 1152000 1500000 2000000 2500000
15217 3000000 3500000 4000000。なお、0 は、@option{-clocal} が設定されている場合
15218 に、ラインを切断する。
15219 @end table
15220
15221
15222 @node printenv invocation
15223 @section @command{printenv}: 環境変数のすべて、あるいは一部を表示する
15224
15225 @pindex printenv
15226 @cindex printing all or some environment variables
15227 @cindex environment variables, printing
15228
15229 @command{printenv} は、環境変数の値を表示する。
15230 @sp 1
15231 書式:
15232
15233 @example
15234 printenv [@var{option}] [@var{variable}]@dots{}
15235 @end example
15236
15237 @var{variable} が一つも指定されていない場合、@command{printenv} はすべての環境変数
15238 の値を表示する。@var{variable} が指定されている場合は、その変数それぞれに
15239 ついて、設定されていれば値を表示し、設定されていなければ何も表示しない。
15240
15241 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
15242
15243 @table @samp
15244
15245 @optNull{printenv}
15246
15247 @end table
15248
15249 @cindex exit status of @command{printenv}
15250 終了ステータス:
15251
15252 @display
15253 0: 指定されているすべての変数が見つかった。
15254 1: 指定されている変数のうちに、見つからなかったものがある。
15255 2: 書き込みエラーが生じた。
15256 @end display
15257
15258
15259 @node tty invocation
15260 @section @command{tty}: 標準入力に接続している端末のファイル名を表示する
15261
15262 @pindex tty
15263 @cindex print terminal file name
15264 @cindex terminal file name, printing
15265
15266 @command{tty} は、自分の標準入力に接続している端末のファイル名を表示する。
15267 標準入力が端末ではない場合は、@samp{not a tty} というメッセージを出す。
15268 @sp 1
15269 書式:
15270
15271 @example
15272 tty [@var{option}]@dots{}
15273 @end example
15274
15275 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
15276
15277 @table @samp
15278
15279 @item -s
15280 @itemx --silent
15281 @itemx --quiet
15282 @opindex -s
15283 @opindex --silent
15284 @opindex --quiet
15285 何も表示しない。終了ステータスを返すだけ。
15286
15287 @end table
15288
15289 @cindex exit status of @command{tty}
15290 終了ステータス:
15291
15292 @display
15293 0: 標準入力が端末である。
15294 1: 標準入力が端末ではない。
15295 2: 指定した引数が正しくない。
15296 3: 書き込みエラーが生じた。
15297 @end display
15298
15299
15300 @node User information
15301 @chapter ユーザ情報
15302
15303 @cindex user information, commands for
15304 @cindex commands for printing user information
15305
15306 この章では、ユーザ関係の情報を表示するコマンドの説明をする。誰がログイン
15307 しているか、どんなグループに所属しているか、などである。
15308
15309 @menu
15310 * id invocation::        ユーザの ID を表示する。
15311 * logname invocation::   現在のログイン名を表示する。
15312 * whoami invocation::    実効ユーザ ID を表示する。
15313 * groups invocation::    ユーザが所属しているグループ名を表示する。
15314 * users invocation::     現在ログインしている全ユーザのログイン名を表示する。
15315 * who invocation::       現在誰がログインしているかを表示する。
15316 @end menu
15317
15318
15319 @node id invocation
15320 @section @command{id}: ユーザの ID を表示する
15321
15322 @pindex id
15323 @cindex real user and group IDs, printing
15324 @cindex effective user and group IDs, printing
15325 @cindex printing real and effective user and group IDs
15326
15327 @command{id} は、指定されたユーザについて情報を表示する。ユーザが指定されて
15328 いない場合は、@command{id} を実行しているプロセスについて情報を表示する。
15329 @sp 1
15330 書式:
15331
15332 @example
15333 id [@var{option}]@dots{} [@var{user}]
15334 @end example
15335
15336 @var{user} にはユーザ ID (番号) とユーザ名のどちらも使えるが、ID が頭に
15337 @samp{+} を付けて指定されていないかぎり、まずユーザ名として検索が行われる。
15338
15339 @vindex POSIXLY_CORRECT
15340 デフォルトで表示するのは、実ユーザ ID、実グループ ID、実効ユーザ ID
15341 (実ユーザ ID と違う場合)、実効グループ ID (実グループID と違う場合)、
15342 それに、補助 (supplemental) グループ ID である。さらに、SELinux が
15343 有効になっていて、環境変数 @env{POSIXLY_CORRECT} が設定されていない場合は、
15344 @samp{context=@var{c}} も表示する。この @var{c} はセキュリティ・コンテキストである。
15345
15346 表示される各数値には、それが何であるかを示す文字列が前に付き、対応
15347 するユーザ名やグループ名がカッコで囲まれて後ろに続く。
15348
15349 オプションを指定すると、@command{id} は上で述べた情報のうち、一部のみを表示
15350 する。参照: @ref{Common options}.
15351
15352 @table @samp
15353 @item -g
15354 @itemx --group
15355 @opindex -g
15356 @opindex --group
15357 グループ ID のみ表示する。
15358
15359 @item -G
15360 @itemx --groups
15361 @opindex -G
15362 @opindex --groups
15363 グループ ID と補助グループ ID のみ表示する。
15364
15365 @item -n
15366 @itemx --name
15367 @opindex -n
15368 @opindex --name
15369 ID 番号の代りに、ユーザ名やグループ名を表示する。@option{-u}, @option{-g}, @option{-G}
15370 の一つを指定する必要がある。
15371
15372 @item -r
15373 @itemx --real
15374 @opindex -r
15375 @opindex --real
15376 実効ユーザや実効グループの ID ではなく、実ユーザや実グループの ID
15377 を表示する。@option{-u}, @option{-g}, @option{-G} のどれか一つを指定する必要がある。
15378
15379 @item -u
15380 @itemx --user
15381 @opindex -u
15382 @opindex --user
15383 ユーザ ID のみ表示する。
15384
15385 @item -Z
15386 @itemx --context
15387 @opindex -Z
15388 @opindex --context
15389 @cindex SELinux
15390 @cindex security context
15391 実行中のユーザのセキュリティ・コンテキストのみを表示する。SELinux
15392 が無効になっている場合は、警告メッセージを出し、終了ステータスを
15393 1 にする。
15394
15395 @item -z
15396 @itemx --zero
15397 @opindex -z
15398 @opindex --zero
15399 出力する項目を NUL 文字で区切る。このオプションは、デフォルトの
15400 フォーマットを使用しているときは、使うことができない。
15401 (coreutils-8.22 の新機能)
15402
15403 用例:
15404 @example
15405 $ id -Gn --zero
15406 users <NUL> devs <NUL>
15407 @end example
15408
15409 @end table
15410
15411 @macro primaryAndSupplementaryGroups{cmd,arg}
15412 プロセスの基本 (primary) グループや 補助 (supplementary) グループは、
15413 通常その親プロセスから継承され、ログイン後ずっと変わらないのが普通だ。
15414 従って、ログイン後にグループ・データベースを変更しても、現在のログイン
15415 セッションが続いている間は、@command{\cmd\} コマンドはその変更を反映しない。
15416 しかし、\arg\を指定して @command{\cmd\} を実行した場合は、ユーザ・
15417 データベースやグループ・データベースの参照が改めて行われるので、
15418 変更した結果が表示されることになる。
15419 @end macro
15420 @primaryAndSupplementaryGroups{id,引数にユーザの名前}
15421
15422 @exitstatus
15423
15424 @node logname invocation
15425 @section @command{logname}: 現在のログイン名を表示する
15426
15427 @pindex logname
15428 @cindex printing user's login name
15429 @cindex login name, printing
15430 @cindex user name, printing
15431
15432 @flindex utmp
15433 @command{logname} は、自分を呼び出したユーザの名前を、システムが管理して
15434 いるファイル (たいていは @file{/var/run/utmp} か @file{/etc/utmp}) で調べて
15435 表示し、ステータス 0 で終了する。自分を呼び出しているプロセスの
15436 エントリが存在しない場合は、@command{logname} はエラーメッセージを出し、
15437 ステータス 1 で終了する。
15438
15439 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15440 options}.
15441
15442 @exitstatus
15443
15444
15445 @node whoami invocation
15446 @section @command{whoami}: 実効ユーザ ID を表示する
15447
15448 @pindex whoami
15449 @cindex effective user ID, printing
15450 @cindex printing the effective user ID
15451
15452 @command{whoami} は、現在の実効ユーザ ID に対応するユーザ名を表示する。
15453 @samp{id -un} コマンドと同じことである。
15454
15455 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15456 options}.
15457
15458 @exitstatus
15459
15460
15461 @node groups invocation
15462 @section @command{groups}: ユーザが所属しているグループ名を表示する
15463
15464 @pindex groups
15465 @cindex printing groups a user is in
15466 @cindex supplementary groups, printing
15467
15468 @command{groups} は、@var{username} が指定されていれば、指定された各ユーザの基本
15469 (primary) グループ名と補助 (supplementary) グループ名を表示し、
15470 ユーザ名が指定されていなければ、現在のプロセスの基本グループ名と
15471 補助グループ名を表示する。複数の名前が指定されている場合は、
15472 各ユーザの名前がグループのリストの前に置かれ、両者の間はコロンで
15473 区切られる。
15474 @sp 1
15475 書式:
15476
15477 @example
15478 groups [@var{username}]@dots{}
15479 @end example
15480
15481 グループのリストは、@samp{id -Gn} コマンドの出力と同じである。
15482
15483 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15484 options}.
15485
15486 @primaryAndSupplementaryGroups{groups,ユーザのリスト}
15487
15488 @exitstatus
15489
15490 @node users invocation
15491 @section @command{users}: 現在ログインしている全ユーザのログイン名を表示する
15492
15493 @pindex users
15494 @cindex printing current usernames
15495 @cindex usernames, printing current
15496
15497 @cindex login sessions, printing users with
15498 @command{users} は、目下使用しているホストに現在ログインしている全ユーザの
15499 ユーザ名のリストを、空白で区切って 1 行に表示する。ユーザ名はログイン
15500 セッションごとに表示されるので、あるユーザが複数のログインセッションを
15501 行っていれば、そのユーザの名前はログインセッションの数だけ出力に現れる
15502 ことになる。
15503 @sp 1
15504 書式:
15505
15506 @example
15507 users [@var{file}]
15508 @end example
15509
15510 @flindex utmp
15511 @flindex wtmp
15512 引数 @var{file} の指定がない場合、@command{users} はシステムが管理するファイル
15513 (たいていは @file{/var/run/utmp} か @file{/etc/utmp}) からログインしているユーザの
15514 情報を引き出す。引数 @var{file} が指定されている場合は、代りにそのファイルを
15515 使用する。@file{/var/log/wtmp} が使われることが多い。
15516
15517 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15518 options}.
15519
15520 @exitstatus
15521
15522
15523 @node who invocation
15524 @section @command{who}: 現在誰がログインしているかを表示する
15525
15526 @pindex who
15527 @cindex printing current user information
15528 @cindex information, about current users
15529
15530 @command{who} は、現在ログインしているユーザについての情報を表示する。
15531 @sp 1
15532 書式:
15533
15534 @example
15535 @command{who} [@var{option}] [@var{file}] [am i]
15536 @end example
15537
15538 @cindex terminal lines, currently used
15539 @cindex login time
15540 @cindex remote hostname
15541 オプション以外の引数が一つもない場合、@command{who} は現在ログインしている
15542 各ユーザについて、次の情報を表示する。ログイン名、端末ライン、ログイン
15543 日時、それにリモート・ホスト名か X ディスプレー名。
15544
15545 @flindex utmp
15546 @flindex wtmp
15547 オプション以外の引数を一つだけ指定すると、@command{who} はそれを、ログイン
15548 したユーザを記録しているファイルの名前として、システムが管理している
15549 デフォルトのファイル (たいていは @file{/var/run/utmp} か @file{/etc/utmp}) の
15550 代りに使用する。@command{who} に引数として @file{/var/log/wtmp} を渡して、これまでに
15551 誰がログインしたかを調べるのはよくあることである。
15552
15553 @opindex am i
15554 @opindex who am i
15555 オプション以外の引数を二つ指定すると、@command{who} は、自分を実行している
15556 ユーザの情報のみを (自分が接続している標準入力からユーザの見当を
15557 付けて)、ホスト名を前に付けて表示する。渡される二つの引数は、
15558 全体として @samp{who am i} になるように、@samp{am i} とするのが慣例である。 
15559
15560 @vindex TZ
15561 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
15562 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
15563 いない場合は、システムのデフォルトのルールに従って表示される。
15564 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
15565 The GNU C Library Reference Manual}.
15566
15567 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
15568
15569 @table @samp
15570
15571 @item -a
15572 @itemx --all
15573 @opindex -a
15574 @opindex --all
15575 @samp{-b -d --login -p -r -t -T -u} と同じである。
15576
15577 @item -b
15578 @itemx --boot
15579 @opindex -b
15580 @opindex --boot
15581 システムをブートした直近の日時を表示する。
15582
15583 @item -d
15584 @itemx --dead
15585 @opindex -d
15586 @opindex --dead
15587 終了したプロセスに関する情報を表示する。
15588
15589 @item -H
15590 @itemx --heading
15591 @opindex -H
15592 @opindex --heading
15593 最初の行に各列の見出しを表示する。
15594
15595 @item -l
15596 @itemx --login
15597 @opindex -l
15598 @opindex --login
15599 現在システムがログインの窓口としてユーザを待ち受けているプロセス
15600 に関する情報のみを表示する。ユーザ名は常に @samp{LOGIN} である。
15601
15602 @item --lookup
15603 @opindex --lookup
15604 utmp で見つかったホスト名について DNS を検索して正規名を得ようと
15605 する。これがデフォルトになっていないのは、インターネットに自動
15606 ダイアルアップで接続しているシステムでは、深刻な遅滞を招きかねない
15607 からである。
15608
15609 @item -m
15610 @opindex -m
15611 @samp{who am i} と同じである。
15612
15613 @item -p
15614 @itemx --process
15615 @opindex -p
15616 @opindex --process
15617 init によって生み出されたプロセスのうち、現在活動中のものをリスト
15618 する。
15619
15620 @item -q
15621 @itemx --count
15622 @opindex -q
15623 @opindex --count
15624 ログインしているユーザのログイン名と人数のみを表示する。他のすべての
15625 オプションを無効にする。
15626
15627 @item -r
15628 @itemx --runlevel
15629 @opindex -r
15630 @opindex --runlevel
15631 init プロセスの現在のランレベルを表示する (たぶん、直前のラン
15632 レベルも)。
15633
15634 @item -s
15635 @opindex -s
15636 無視する。他の版の @command{who} との互換性のためにある。
15637
15638 @item -t
15639 @itemx --time
15640 @opindex -t
15641 @opindex --time
15642 システムクロックを最後に変更した日時を表示する。
15643
15644 @item -u
15645 @opindex -u
15646 @cindex idle time
15647 ログイン日時の後ろに、ユーザが何時間何分端末を使用していないかを
15648 (idle 状態かを) 表示する。@samp{.} は、ユーザがここ 1 分以内に端末操作
15649 をしたことを意味する。@samp{old} は、ユーザが 24 時間以上端末を使用
15650 していないいうことである。
15651
15652 @item -w
15653 @itemx -T
15654 @itemx --mesg
15655 @itemx --message
15656 @itemx --writable
15657 @opindex -w
15658 @opindex -T
15659 @opindex --mesg
15660 @opindex --message
15661 @opindex --writable
15662 @cindex message status
15663 @pindex write@r{, allowed}
15664 ログイン名の後ろに、ユーザのメッセージ受け入れ状態を示す 1 文字を
15665 表示する。
15666
15667 @display
15668 @samp{+} @code{write} によるメッセージを受け入れる。
15669 @samp{-} @code{write} によるメッセージを拒否する。
15670 @samp{?} 端末デバイスが見つからない。
15671 @end display
15672
15673 @end table
15674
15675 @exitstatus
15676
15677
15678 @node System context
15679 @chapter システム情報
15680
15681 @cindex system context
15682 @cindex context, system
15683 @cindex commands for system context
15684
15685 この章では、システム全体に関わる情報を表示したり、変更したりするコマンドを
15686 説明する。
15687
15688 @menu
15689 * date invocation::          システムの日付や時刻を表示、設定する。
15690 * arch invocation::          マシンのハードウェア名を表示する。
15691 * nproc invocation::         プロセッサの数を表示する。
15692 * uname invocation::         システムについて情報を表示する。
15693 * hostname invocation::      システム名を表示、設定する。
15694 * hostid invocation::        数値によるホストの識別名を表示する。
15695 * uptime invocation::        システムの連続稼働時間と負荷を表示する。
15696 @end menu
15697
15698 @node date invocation
15699 @section @command{date}: システムの日付や時刻を表示、設定する
15700
15701 @pindex date
15702 @cindex time, printing or setting
15703 @cindex printing the current time
15704
15705 書式:
15706
15707 @example
15708 date [@var{option}]@dots{} [+@var{format}]
15709 date [-u|--utc|--universal] @c this avoids a newline in the output
15710 [ MMDDhhmm[[CC]YY][.ss] ]
15711 @end example
15712
15713 @vindex LC_TIME
15714 @command{date} を @var{format} 引数なしで起動すると、デフォルトの書式を指定して
15715 起動するのと同じことになる。デフォルトの書式は、@env{LC_TIME} ロケール・
15716 カテゴリによって様々である。デフォルトの C ロケールの場合、その書式は
15717 @samp{'+%a %b %e %H:%M:%S %Z %Y'} なので、出力は @samp{Thu Mar @ 3 13:47:51 PST
15718 2005}
15719 のような形になる。
15720
15721 @vindex TZ
15722 通常 @command{date} は、環境変数 @env{TZ} が指示しているタイムゾーンのルールを
15723 使用し、@env{TZ} が設定されていないときは、システムのデフォルトのルールを
15724 使用する。@xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
15725 The GNU C Library Reference Manual}.
15726
15727 @findex strftime @r{and @command{date}}
15728 @cindex time formats
15729 @cindex formatting times
15730 @samp{+} で始まる引数を指定すると、@command{date} は現在の日付と時刻を (あるいは、
15731 後述する @option{--date} オプションで指定した日付と時刻を)、その引数によって
15732 定義された書式で表示する。書式を指定するこの引数は、@code{strftime} 関数の
15733 それとほぼ同じである。なお、@samp{%} で始まる変換指定子を除いて、書式文字列
15734 中の文字は、変更されずにそのまま表示される。変換指定子については、次節
15735 以降で説明する。
15736
15737 @exitstatus
15738
15739 @menu
15740 * Time conversion specifiers:: 時刻関係の変換指定子 %[HIklMNpPrRsSTXzZ]。
15741 * Date conversion specifiers:: 日付関係の変換指定子 %[aAbBcCdDeFgGhjmuUVwWxyY]。
15742 * Literal conversion specifiers::  文字変換指定子 %[%nt]。
15743 * Padding and other flags::  0 や空白による空き埋め、その他。
15744 * Setting the time::         システムクロックの変更。
15745 * Options for date::         現在の日時以外の指定。
15746 @detailmenu
15747 * Date input formats::       日付文字列の指定法。
15748 @end detailmenu
15749 * Examples of date::         用例。
15750 @end menu
15751
15752 @node Time conversion specifiers
15753 @subsection 時刻関係の変換指定子
15754
15755 @cindex time conversion specifiers
15756 @cindex conversion specifiers, time
15757
15758 @command{date} の時刻関係の変換指定子
15759
15760 @table @samp
15761 @item %H
15762 時 (@samp{00}@dots{}@samp{23})
15763 @item %I
15764 時 (@samp{01}@dots{}@samp{12})
15765 @item %k
15766 時。一桁のときは、0 ではなく、空白で埋める (@samp{ 0}@dots{}@samp{23})。@samp{%_H} と
15767 同じ。これは GNU の拡張である。
15768 @item %l
15769 時。一桁のときは、0 ではなく、空白で埋める (@samp{ 1}@dots{}@samp{12})。@samp{%_I} と
15770 同じ。これは GNU の拡張である。
15771 @item %M
15772 分 (@samp{00}@dots{}@samp{59})
15773 @item %N
15774 ナノ秒 (@samp{000000000}@dots{}@samp{999999999})。これは GNU の拡張である。
15775 @item %p
15776 現在のロケールで @samp{AM} や @samp{PM} に相当するもの。空白になるロケール
15777 も多い。正午は @samp{PM} として、真夜中は @samp{AM} として扱う。
15778 @item %P
15779 @samp{%p} と同様だが、小文字を使う。これは GNU の拡張である。
15780 @item %r
15781 現在のロケールによる 12 時間表記の時刻 (例: @samp{11:11:04 PM})
15782 @item %R
15783 24 時間表記の時と分。@samp{%H:%M} と同じ。
15784 @item %s
15785 @cindex epoch, seconds since
15786 @cindex seconds since the epoch
15787 @cindex beginning of time
15788 @cindex leap seconds
15789 ジ・エポック (the epoch、Unix 紀元)、すなわち 1970-01-01 00:00:00 UTC
15790 からの経過秒数。閏秒のサポートを利用できない場合、閏秒は計算に
15791 入れない。用例については、「@command{date} の用例」を見ること。
15792 @xref{%s-examples}. これは GNU の拡張である。
15793 @item %S
15794 @cindex leap seconds
15795 秒 (@samp{00}@dots{}@samp{60})。閏秒がサポートされている場合、@samp{60} になることが
15796 ある。
15797 @item %T
15798 24 時間表記の時、分、秒。@samp{%H:%M:%S} と同じ。
15799 @item %X
15800 現在のロケールによる時刻表示 (例: @samp{23:13:48})
15801 @item %z
15802 @w{RFC 2822/ISO 8601} 形式の数値によるタイムゾーン (たとえば、@samp{-0600} や
15803 @samp{+0530})。タイムゾーンが特定できない場合は、空になる。この値は、
15804 環境変数 @env{TZ} によって指定されたタイムゾーンのルールを使用する
15805 ことで、現在の日時に対応した、数値によるタイムゾーンを正しく反映
15806 する (訳注: 要するに、夏時間、冬時間が存在する地帯では、それを
15807 反映するということ)。操作の対象となる日時は (もしそうしたければ、
15808 その日時におけるタイムゾーンのルールも)、@option{--date} オプションに
15809 よって変更することができる。
15810 @item %:z
15811 @w{RFC 3339/ISO 8601} 形式の、@samp{:} を使用する数値によるタイムゾーン
15812 (たとえば、@samp{-06:00} や @samp{+05:30})。タイムゾーンが特定できない
15813 場合は、空になる。これは GNU による拡張である。
15814 @item %::z
15815 @samp{:} を使用する数値によるタイムゾーンで、もっとも近い秒まで表示する
15816 (たとえば、@samp{-06:00:00} や @samp{+05:30:00})。タイムゾーンが特定できない
15817 場合は、空になる。これは GNU による拡張である。
15818 @item %:::z
15819 @samp{:} を使用する数値によるタイムゾーンで、時間の精度は必要最小限で
15820 済ます (たとえば、@samp{-06}, @samp{+05:30}, @samp{-04:56:02})。タイムゾーンが
15821 特定できない場合は、空になる。これは GNU による拡張である。
15822 @item %Z
15823 アルファベットによるタイムゾーンの略称 (たとえば、@samp{EDT})。タイム
15824 ゾーンが特定できない場合は、空になる。タイムゾーンがどのようにして
15825 特定されるか (訳注: たとえば、アメリカ東部なら、EST (冬時間) と EDT
15826 (夏時間) のどちらが選ばれるか) については、@samp{%z} を参照すること。
15827 @end table
15828
15829
15830 @node Date conversion specifiers
15831 @subsection 日付関係の変換指定子
15832
15833 @cindex date conversion specifiers
15834 @cindex conversion specifiers, date
15835
15836 @command{date} の日付関係の変換指定子。
15837
15838 @table @samp
15839 @item %a
15840 現在のロケールによる曜日の省略形 (例: @samp{Sun})
15841 @item %A
15842 現在のロケールによる曜日の省略しない表現。長さは不定 (例: @samp{Sunday})
15843 @item %b
15844 現在のロケールによる月名の省略形 (例: @samp{Jan})
15845 @item %B
15846 現在のロケールによる月名の省略しない表現。長さは不定 (例: @samp{January})
15847 @item %c
15848 現在のロケールによる日付と時刻 (例: @samp{Thu Mar @ 3 23:05:25 2005})
15849 @item %C
15850 世紀。@samp{%Y} に似ているが、下二桁を省略している。たとえば、@samp{%Y} が
15851 @samp{2000} ならば、@samp{%C} は @samp{20}、@samp{%Y} が @samp{-001} ならば、@samp{%C}
15852 は @samp{-0}
15853 である。通例、少なくとも 2 個の文字からなるが、2 個以上のことも
15854 ありえる。
15855 @item %d
15856 その月の何日目か (e.g., @samp{01})
15857 @item %D
15858 日付。@samp{%m/%d/%y} と同じ
15859 @item %e
15860 その月の何日目か。一桁のときは、0 ではなく、空白で埋める。@samp{%_d}
15861 と同じ。
15862 @item %F
15863 ISO 8601 形式の完全な日付。@samp{%Y-%m-%d} と同じ。日付の形式にこれを
15864 選ぶのは、好判断である。標準的な形式だし、年度が 0000@dots{}9999 の
15865 範囲にある通常の場合に、ソートしやすい。
15866 @item %g
15867 ISO 週番号に対応する年度表示だが、世紀の部分を省略している (その
15868 結果、@samp{00} から @samp{99} の範囲になる)。これは普通 @samp{%y} と同じ形式、
15869 同じ値になるが、ISO 週番号 (@samp{%V} 参照) が前年、または翌年に
15870 属する場合は、そちらの年度が代りに使用される点が異なる。
15871 @item %G
15872 ISO 週番号に対応する年度表示。これは普通 @samp{%Y} と同じ形式、同じ値
15873 になるが、ISO 週番号 (@samp{%V} 参照) が前年、または翌年に属する場合は、
15874 そちらの年度が代りに使用される点が異なる。通常、これが役に立つのは、
15875 @samp{%V} も一緒に使用するときだけである。たとえば、@samp{%G-%m-%d} という
15876 書式は、ISO 週番号による年度と普段使用する月や日を組み合わせている
15877 ので、たぶん指定の仕方を間違えている。
15878 @item %h
15879 @samp{%b} と同じ。
15880 @item %j
15881 その年の何日目か (@samp{001}@dots{}@samp{366})
15882 @item %m
15883 月 (@samp{01}@dots{}@samp{12})
15884 @item %u
15885 その週の何日目か (@samp{1}@dots{}@samp{7})。@samp{1} は月曜日に当たる。
15886 @item %U
15887 日曜日を週の最初の日とする、その年の週番号 (@samp{00}@dots{}@samp{53})。新しい
15888 年の最初の日曜日より前の日々は、第 0 週に属する。
15889 @item %V
15890 ISO 週番号。すなわち、月曜日を週の最初の日とする、その年の週番号
15891 (@samp{01}@dots{}@samp{53})。1 月 1 日を含む週が、新しい年の日々を 4 日以上含む
15892 場合は、その週が第 1 週であると見なされる。そうでない場合は、
15893 その週は前年の第 53 週であり、翌週が第 1 週になる。(ISO 8601 の
15894 規格を参照。)
15895 @item %w
15896 その週の何日目か (@samp{0}@dots{}@samp{6})。0 は日曜日に当たる。
15897 @item %W
15898 月曜日を週の最初の日とする、その年の週番号 (@samp{00}@dots{}@samp{53})。最初の
15899 月曜日より前の新しい年の日々は、第 0 週に属する。
15900 @item %x
15901 現在のロケールによる日付の表示 (例: @samp{12/31/99})
15902 @item %y
15903 年度の下二桁 (@samp{00}@dots{}@samp{99})
15904 @item %Y
15905 年度。通例、少なくとも 4 文字だが、もっと多いこともある。@samp{0000} 年は
15906 @samp{0001} の前年であり、@samp{-001} 年は @samp{0000} の前年である。
15907 @end table
15908
15909
15910 @node Literal conversion specifiers
15911 @subsection 文字変換指定子
15912
15913 @cindex literal conversion specifiers
15914 @cindex conversion specifiers, literal
15915
15916 日付や時刻以外の @command{date} の変換指定子。
15917
15918 @table @samp
15919 @item %%
15920 1 個の % という文字
15921 @item %n
15922 改行
15923 @item %t
15924 水平タブ
15925 @end table
15926
15927
15928 @node Padding and other flags
15929 @subsection 空き埋めなどのフラグ
15930
15931 @cindex numeric field padding
15932 @cindex padding of numeric fields
15933 @cindex fields, padding numeric
15934
15935 特に指定がないかぎり、@command{date} は通常、数値の入るフィールドの空きを
15936 0 で埋める。従って、たとえば、数値による月名は常に二桁の数字として
15937 出力される。しかし、ジ・エポック (Unix 紀元) 以来の経過秒数では、
15938 空きを埋めることはしない。この秒数には決まった長さがないからである。
15939
15940 GNU の拡張として、以下に挙げるフラグの一つを @samp{%} の後ろに置くことが
15941 できる (指定するしないは自由)。
15942
15943 @table @samp
15944 @item -
15945 (ハイフン) フィールドの空き埋めをしない。出力が人間に見せるための
15946 ものである場合に、役に立つ。
15947 @item _
15948 (アンダースコア、下線) 空白で空き埋めをする。出力を一定の文字数に
15949 する必要があるが、0 で埋めたのでは見にくいという場合に、役に立つ。
15950 @item 0
15951 (ゼロ) 変換指定子が普通なら空白で埋める場合にも、ゼロで空き埋めを
15952 する。
15953 @item ^
15954 可能なら、大文字を使う。
15955 @item #
15956 可能なら、反対の文字を使う。通常大文字のフィールドは小文字になり、
15957 小文字のフィールドは大文字になる。
15958 @end table
15959
15960 @noindent
15961 空き埋めの例をいくつか挙げておく。
15962
15963 @example
15964 date +%d/%m -d "Feb 1"
15965 @result{} 01/02
15966 date +%-d/%-m -d "Feb 1"
15967 @result{} 1/2
15968 date +%_d/%_m -d "Feb 1"
15969 @result{}  1/ 2
15970 @end example
15971
15972 これも GNU の拡張だが、フィールドの幅を 10 進数で指定することができ
15973 る (数字は、上記のフラグがあれば、その後ろに置く)。そのフィールドの
15974 出力の加工前の長さが、幅として指定した文字数より短い場合は、右詰めに
15975 して、指定サイズにまで空き埋めした結果が書き出される。たとえば、@samp{%9B}
15976 は、右詰めにした月の名前を 9 文字分のフィールドに表示する。
15977
15978 上記のフラグやフィールド幅の指定の後ろに、修飾子 (modifier) を付ける
15979 こともできる (指定するしないは自由)。修飾子には、次のものがある。
15980
15981 @table @samp
15982 @item E
15983 現在のロケールが持つもう一つの日時表記を使用する。この修飾子は、
15984 @samp{%c}, @samp{%C}, @samp{%x}, @samp{%X}, @samp{%y}, @samp{%Y}
15985 に対して使用できる。たとえば、
15986 日本語ロケールで @samp{%Ex} とすれば、元号による日付を表示するだろう。
15987
15988 @item O
15989 現在のロケールが持つもう一つの数字表記を使用する。この修飾子は、
15990 数値を表す変換指定子にしか使用できない。
15991 @end table
15992
15993 書式が修飾子をサポートしていても、もう一つの表記が利用できない場合、
15994 修飾子は無視される。
15995
15996
15997 @node Setting the time
15998 @subsection システムクロックの設定
15999
16000 @cindex setting the time
16001 @cindex time setting
16002 @cindex appropriate privileges
16003
16004 @samp{+} で始まらない引数を指定すると、@command{date} は、(以下で述べるように) その
16005 引数で指定した日時にシステムクロックを設定する。システムクロックを設定
16006 するには、しかるべき権限が必要である。リブート後も変更を維持するには、
16007 システムクロックに合わせてハードウェアクロックも更新する必要があるかも
16008 しれないことに注意していただきたい。ご使用のシステムでは、ハードウェア
16009 クロックの更新は、自動的に行われないかもしれないからだ。
16010
16011 引き数の構成要素は、すべて数字でなければならない。それは以下の意味を
16012 持っている。
16013 @sp 1
16014 (訳注: 念のため、この章の冒頭にあるシステムクロック設定用の書式を
16015 再掲しておく。date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ])
16016
16017 @table @samp
16018 @item MM
16019 何月
16020 @item DD
16021 (何月の) 何日
16022 @item hh
16023 何時
16024 @item mm
16025 何分
16026 @item CC
16027 年度の上二桁 (省略可)
16028 @item YY
16029 年度の下二桁 (省略可)
16030 @item ss
16031 何秒 (省略可)
16032 @end table
16033
16034 注意していただきたいが、@option{--date} や @option{--set} オプションは、ここで
16035 述べている書式の引数と組み合わせて使うことができない。@option{--universal}
16036 オプションは、ここで述べている書式の引数と一緒に使うことができるが、
16037 その場合、指定されている日時が現在地のタイムゾーンではなく、協定世界時
16038 (UTC) に準じているのを示すことになる。
16039
16040
16041 @node Options for date
16042 @subsection @command{date} のオプション
16043
16044 @cindex @command{date} options
16045 @cindex options for @command{date}
16046
16047 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16048
16049 @table @samp
16050
16051 @item -d @var{datestr}
16052 @itemx --date=@var{datestr}
16053 @opindex -d
16054 @opindex --date
16055 @cindex parsing date strings
16056 @cindex date strings, parsing
16057 @cindex arbitrary date strings, parsing
16058 @opindex yesterday
16059 @opindex tomorrow
16060 @opindex next @var{day}
16061 @opindex last @var{day}
16062 現在の日時の代りに、日付文字列 @var{datestr} で指定した日時を表示する。
16063 @var{datestr} には、よく使われる書式なら、ほとんどどんな書式でも使う
16064 ことができる。月の名前、タイムゾーン、@samp{am} や @samp{pm}、@samp{yesterday}
16065 といった単語、などを含んでいてもよい。たとえば、@option{--date="2004-02-27
16066 14:19:13.489392193 +0530"} は、UTC よりも東 5 時間 30 分のタイム
16067 ゾーンで 2004 年 2 月 27 日 午後 2 時 19 分 13 秒から 489,392,193
16068 ナノ秒経過した瞬間を指定している。
16069 @*注意: 現在のところ、入力は、ロケールに依存しない書式でなければ
16070 ならない。たとえば、以下の例の LC_TIME=C は、多くのロケールで正しい
16071 日時を再表示させるために必要である。
16072 @example
16073 date -d "$(LC_TIME=C date)"
16074 @end example
16075 参照: @xref{Date input formats}.
16076
16077 @item -f @var{datefile}
16078 @itemx --file=@var{datefile}
16079 @opindex -f
16080 @opindex --file
16081 @var{datefile} の各行を @option{-d} の場合と同じように解析して、生成された日付
16082 と時刻を表示する。@var{datefile} が @samp{-} ならば、標準入力を使用する。処理
16083 する日付がたくさんある場合に、このオプションは重宝である。何故ならば、
16084 @command{date} コマンドを何度も起動するときのシステムのオーバーヘッドは、
16085 馬鹿にならないことがあるからだ。
16086
16087 @item -I[@var{timespec}]
16088 @itemx --iso-8601[=@var{timespec}]
16089 @opindex -I[@var{timespec}]
16090 @opindex --iso-8601[=@var{timespec}]
16091 ISO 8601 の書式、@samp{%Y-%m-%d} を使って、日付を表示する。
16092
16093 引数 @var{timespec} では、日付の後ろに時刻をどの単位まで追加するかを
16094 指定する。以下の一つを指定することができる。
16095 @table @samp
16096 @item date
16097 日付のみを表示する。@var{timespec} を省略した場合のデフォルト。
16098
16099 @item hours
16100 日付にその日の何時かを追加する。
16101
16102 @item minutes
16103 何時何分まで追加する。
16104
16105 @item seconds
16106 何時何分何秒まで追加する。
16107
16108 @item ns
16109 何時何分何秒何ナノ秒まで追加する。
16110 @end table
16111
16112 時刻の部分まで表示するときは、@samp{%z} の書式でタイムゾーンも付ける。
16113
16114 @item -r @var{file}
16115 @itemx --reference=@var{file}
16116 @opindex -r
16117 @opindex --reference
16118 現在の日付と時刻の代りに、@var{file} の内容を最後に更新した (the last
16119 modification) 日付と時刻を表示する。
16120
16121 @item -R
16122 @itemx --rfc-822
16123 @itemx --rfc-2822
16124 @opindex -R
16125 @opindex --rfc-822
16126 @opindex --rfc-2822
16127 日付と時刻を @samp{%a, %d %b %Y %H:%M:%S %z} という書式を使用し、C
16128 ロケールで評価して表示する。従って、月や曜日の省略形は常に英語に
16129 なる。一例を挙げると、こんな表示である。
16130
16131 @example
16132 Fri, 09 Sep 2005 13:51:39 -0700
16133 @end example
16134
16135 この書式は、@uref{ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt, Internet RFC
16136 2822}
16137 と @uref{ftp://ftp.rfc-editor.org/in-notes/rfc822.txt, RFC 822} に従っている。
16138 インターネットの E メールに関する現在と以前の規格である。
16139
16140 @item --rfc-3339=@var{timespec}
16141 @opindex --rfc-3339=@var{timespec}
16142 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt, Internet RFC 3339}
16143 が規定している書式を使用して、日付を表示する。この書式は、ISO 8601
16144 の書式のサブセットだが、日付と時刻を区切るのに、@samp{T} という文字では
16145 なく、空白を使うことをアプリケーションに許している、という相違点も
16146 ある。他の標準の書式とは違って、RFC 3339 の書式は、現在のロケール
16147 が何であろうとも、@option{--date} (@option{-d}) や @option{--file} (@option{-f})
16148 オプションに
16149 対する入力として常に適切である。
16150
16151 引数 @var{timespec} では、時刻をどこまで表示するかを指定する。以下の一つ
16152 を指定することができる。
16153
16154 @table @samp
16155 @item date
16156 年から始まる日付だけを表示する。たとえば、@samp{2005-09-14}。これは、
16157 @samp{%Y-%m-%d} という書式と等価ある。
16158
16159 @item seconds
16160 年から始まる日付と秒までの時刻を表示し、両者の間は空白で区切る。
16161 一例を挙げると、@samp{2005-09-14 00:56:06+05:30}。出力の末尾には、
16162 協定世界時からの時差が付く。例の場合、@samp{+05:30} は、地方時が
16163 UTC より 5 時間 30 分進んでいることを意味している。これは、
16164 @samp{%Y-%m-%d %H:%M:%S%:z} という書式と等価である。
16165
16166 @item ns
16167 @samp{seconds} と似ているが、ナノ秒まで表示する。一例を挙げると、
16168 @samp{2005-09-14 00:56:06.998458565+05:30}。これは、@samp{%Y-%m-%d
16169 %H:%M:%S.%N%:z} という書式と等価である。
16170
16171 @end table
16172
16173 @item -s @var{datestr}
16174 @itemx --set=@var{datestr}
16175 @opindex -s
16176 @opindex --set
16177 日付と時刻を @var{datestr} に設定する。上記の @option{-d} を参照。前節「システム
16178 クロックの設定」 も参照すること。@ref{Setting the time}.
16179
16180 @item -u
16181 @itemx --utc
16182 @itemx --universal
16183 @opindex -u
16184 @opindex --utc
16185 @opindex --universal
16186 @cindex Coordinated Universal Time
16187 @cindex UTC
16188 @cindex Greenwich Mean Time
16189 @cindex GMT
16190 @cindex leap seconds
16191 @vindex TZ
16192 環境変数 @env{TZ} が、文字列 @samp{UTC0} に設定されているかのように、処理に
16193 協定世界時 (UTC, Coordinated Universal Time) を使用する。協定世界時
16194 は、歴史的な理由から「グリニッジ標準時 (GMT)」と呼ばれることもよく
16195 ある。一般にシステムは閏秒を無視するので、日時は正真の UTC では
16196 なく、UTC の近似値になる。
16197 @end table
16198
16199
16200 @node Examples of date
16201 @subsection @command{date} の使用例
16202
16203 @cindex examples of @command{date}
16204
16205 用例をいくつか挙げてみる。前節の @option{-d} オプションの説明も参照して
16206 いただきたい。
16207
16208 @itemize @bullet
16209
16210 @item
16211 一昨日の日付を表示する。
16212
16213 @example
16214 date --date='2 days ago'
16215 @end example
16216
16217 @item
16218 今から 3 ヶ月と 1 日後の日付けを表示する。
16219
16220 @example
16221 date --date='3 months 1 day'
16222 @end example
16223
16224 @item
16225 今年のクリスマスは年の初めから何日目かを表示する。
16226
16227 @example
16228 date --date='25 Dec' +%j
16229 @end example
16230
16231 @item
16232 今日が何月何日かを、省略しない月の名前で表示する。
16233
16234 @example
16235 date '+%B %d'
16236 @end example
16237
16238 しかし、月の最初の 9 日間では、@samp{%d} は空きを 0 で埋めた 2 桁の
16239 フィールドに展開されるので、この結果はご希望のものとは違うかも
16240 しれない。たとえば、@samp{date -d 1may '+%B %d'} の出力は、@samp{May 01} に
16241 なるのだ。
16242
16243 @item
16244 月のうちの 1 桁の日々に対して、先頭に 0 を付けずに日付を表示したい
16245 のなら、(GNU の拡張である) @samp{-} フラグを使用すれば、空き埋めを全く
16246 しないようにすることができる。
16247
16248 @example
16249 date -d 1may '+%B %-d'
16250 @end example
16251
16252 @item
16253 現在の日付と時刻を、non-GNU 版の @command{date} の多くでシステムクロックを
16254 設定するときに要求される書式で表示する。
16255
16256 @example
16257 date +%m%d%H%M%Y.%S
16258 @end example
16259
16260 @item
16261 システムクロックを 2 分進める。
16262
16263 @example
16264 date --set='+2 minutes'
16265 @end example
16266
16267 @item
16268 日付を RFC 2822 の書式で表示するためには、@samp{date --rfc-2822} を使用
16269 する。ここに示すのは、出力の一例である。
16270
16271 @example
16272 Fri, 09 Sep 2005 13:51:39 -0700
16273 @end example
16274
16275 @anchor{%s-examples}
16276 @item
16277 日付を表す文字列をジ・エポック (the epoch、Unix 紀元、すなわち、
16278 1970-01-01 00:00:00 UTC) からの経過秒数に変換するには、@option{--date}
16279 オプションを @samp{%s} 書式と組み合わせて使用する。これは、データを日付
16280 によってソートしたり、グラフ化したり、比較したりする際に、便利
16281 である。次のコマンドは、ジ・エポックから 2 分経ったときの、
16282 ジ・エポックからの経過秒数を出力する。
16283
16284 @example
16285 date --date='1970-01-01 00:02:00 +0000' +%s
16286 120
16287 @end example
16288
16289 日付を表す文字列でタイムゾーン情報を指定しない場合、@command{date} は、
16290 コンピュータが認識しているタイムゾーンを使用して、その文字列を
16291 解釈する。たとえば、使用しているコンピュータのタイムゾーンが、
16292 マサチューセッツ州のケンブリッジのものならば、それは UTC より
16293 5 時間遅れているので、次のようになる。
16294
16295 @example
16296 # 現在地のタイムゾーンを使用
16297 date --date='1970-01-01 00:02:00' +%s
16298 18120
16299 @end example
16300
16301 @item
16302 日付の付いたデータをソートしたり、グラフ化したりしているとしよう。
16303 その日付の加工前の値は、ジ・エポックからの経過秒数で表されている
16304 かもしれない。もっとも、@samp{946684800} といった日付を見て、「ああ、
16305 イギリスのグリニッジの 2000 年の最初の 0 秒だね」と、さりげなく
16306 言える人は、めったにいないけれど。
16307
16308 @example
16309 date --date='2000-01-01 UTC' +%s
16310 946684800
16311 @end example
16312
16313 なお、上と同じ結果は、@option{--utc} (@option{-u}) オプションを使っても得られ、
16314 その場合は、日付を表す文字列で @samp{UTC} を省略することができる。
16315 とは言え、@option{--utc} を使う方法は、@samp{%s} を始め、多くの書式文字列では、
16316 日付文字列で @samp{UTC} を使うのと同じ結果をもたらすものの、協定世界時
16317 からの時差が 0 ではないタイムゾーンでは、@samp{%z} など、タイムゾーン
16318 によって値が変わってくる書式文字列に対しては、異なる結果をもたらす
16319 ことになるだろう。
16320
16321 @example
16322 date -u --date=2000-01-01 +%s
16323 946684800
16324 @end example
16325
16326 こうした秒数という扱いにくいデータをもっと読みやすい形に変換し直す
16327 には、次のようなコマンドを使う。
16328
16329 @smallexample
16330 # 現在地のタイムゾーンを使用
16331 date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z"
16332 1999-12-31 19:00:00 -0500
16333 @end smallexample
16334
16335 coreutils 5.3.0 以来使用できるようになった @samp{@@} という表記に頼っても
16336 構わないなら、上記のコマンドを短くすることができる。
16337
16338 @smallexample
16339 date -d @@946684800 +"%F %T %z"
16340 1999-12-31 19:00:00 -0500
16341 @end smallexample
16342
16343 UTC の日付や時刻を出力した方がよいことも多い。
16344
16345 @smallexample
16346 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
16347 2000-01-01 00:00:00 +0000
16348 @end smallexample
16349
16350 @item
16351 @cindex leap seconds
16352 閏秒は秒数計算に入れないのが一般的だが、例外的なシステムもある。
16353 閏秒は予測できないものなので、閏秒を計算に入れる例外的なシステム
16354 では、秒数による計算と未来の日時との対応は信頼性に欠ける。
16355
16356 一般的なシステムと例外的なシステムの両者が、2012-06-30 23:59:60 UTC
16357 の閏秒をどのように処理しているかを以下に示す。
16358
16359 @example
16360 # 一般的なシステムは閏秒を無視する:
16361 date --date='2012-06-30 23:59:59 +0000' +%s
16362 1341100799
16363 date --date='2012-06-30 23:59:60 +0000' +%s
16364 date: invalid date '2012-06-30 23:59:60 +0000'
16365 date --date='2012-07-01 00:00:00 +0000' +%s
16366 1341100800
16367 @end example
16368
16369 @example
16370 # 例外的なシステムは閏秒をカウントする:
16371 date --date='2012-06-30 23:59:59 +0000' +%s
16372 1341100823
16373 date --date='2012-06-30 23:59:60 +0000' +%s
16374 1341100824
16375 date --date='2012-07-01 00:00:00 +0000' +%s
16376 1341100825
16377 @end example
16378
16379 @end itemize
16380
16381
16382 @node arch invocation
16383 @section @command{arch}: マシンのハードウェア名を表示する
16384
16385 @pindex arch
16386 @cindex print machine hardware name
16387 @cindex system information, printing
16388
16389 @command{arch} は、マシンのハードウェア名を表示する。@samp{uname -m} と同じこと
16390 である。
16391 @sp 1
16392 書式:
16393
16394 @example
16395 arch [@var{option}]
16396 @end example
16397
16398 このプログラムでは、共通オプションしか使用できない。@ref{Common options}.
16399
16400 @exitstatus
16401
16402
16403 @node nproc invocation
16404 @section @command{nproc}: 利用できるプロセッサの個数を表示する
16405
16406 @pindex nproc
16407 @cindex Print the number of processors
16408 @cindex system information, printing
16409
16410 カレントプロセスが利用できるプロセシング・ユニットの個数を表示する。
16411 それは、稼働しているプロセッサの数より少ないかもしれない。そうした
16412 情報が取得できない場合は、搭載されているプロセッサの数を表示する。
16413 環境変数 @env{OMP_NUM_THREADS} が設定されている場合は、その変数が、返さ
16414 れる値を決めることになる。なお、結果は必ず 0 より大きくなる。
16415 @sp 1
16416 書式:
16417
16418 @example
16419 nproc [@var{option}]
16420 @end example
16421
16422 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16423
16424 @table @samp
16425
16426 @item --all
16427 @opindex --all
16428 システムに搭載されているプロセッサの数を表示する。それは、稼働して
16429 いるプロセッサや、カレントプロセスが利用できるプロセッサの数より
16430 多いかもしれない。このオプションを付けた場合、環境変数
16431 @env{OMP_NUM_THREADS} は考慮されない。
16432
16433 @item --ignore=@var{number}
16434 @opindex --ignore
16435 可能ならば、@var{number} 個のプロセシング・ユニットを除外する。
16436
16437 @end table
16438
16439 @exitstatus
16440
16441
16442 @node uname invocation
16443 @section @command{uname}: システムについて情報を表示する
16444
16445 @pindex uname
16446 @cindex print system information
16447 @cindex system information, printing
16448
16449 @command{uname} は、自分がその上で実行されているマシンとオペレーティング・
16450 システムについて情報を表示する。オプションが一つも指定されない場合は、
16451 @option{-s} オプションが指定されたかのように振る舞う。
16452 @sp 1
16453 書式:
16454
16455 @example
16456 uname [@var{option}]@dots{}
16457 @end example
16458
16459 複数のオプションや @option{-a} オプションが指定された場合、選択された情報は
16460 次の順番で表示される。
16461
16462 @example
16463 @var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version}
16464 @var{machine} @var{processor} @var{hardware-platform} @var{operating-system}
16465 @end example
16466
16467 個々の情報が空白を含んでいることがある。そうした場合、出力のどこから
16468 どこまでが、ある情報に当たるかを判断することは難しい。以下の例で @var{release}
16469 に当たるのは、@samp{2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001} の部分である。
16470 @sp 1
16471 (訳注: @var{release} が @var{kernel-release} のことならば、それに相当するのは
16472 @samp{2.2.18} だけである。#4 から 2001 までは @var{kernel-version}。原文は両者を
16473 合わせて、@var{release} と言っているのかもしれない。なお、以下の例はちょっと
16474 古い。最近の @command{uname -a} では、@option{-a} オプションの説明にあるように、unknown
16475 の部分は表示されないはずである。)
16476
16477 @smallexample
16478 uname -a
16479 @result{} Linux dumdum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686@c
16480  unknown unknown GNU/Linux
16481 @end smallexample
16482
16483
16484 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16485
16486 @table @samp
16487
16488 @item -a
16489 @itemx --all
16490 @opindex -a
16491 @opindex --all
16492 以下の情報をすべて表示する。ただし、プロセッサ・タイプとハードウェア・
16493 プラットホームは、unknown ならば省略する。
16494
16495 @item -i
16496 @itemx --hardware-platform
16497 @opindex -i
16498 @opindex --hardware-platform
16499 @cindex implementation, hardware
16500 @cindex hardware platform
16501 @cindex platform, hardware
16502 ハードウェア・プラットホームの名前を表示する (ハードウェア実装と
16503 呼ばれることもある)。この情報がカーネルから簡単に取得できるように
16504 なっていない場合は、@samp{unknown} と表示する。Linux のカーネルがその
16505 一例である。
16506
16507 @item -m
16508 @itemx --machine
16509 @opindex -m
16510 @opindex --machine
16511 @cindex machine type
16512 @cindex hardware class
16513 @cindex hardware type
16514 マシンのハードウェア名を表示する (ハードウェア・クラスとかハード
16515 ウェア・タイプと呼ばれることもある)。
16516
16517 @item -n
16518 @itemx --nodename
16519 @opindex -n
16520 @opindex --nodename
16521 @cindex hostname
16522 @cindex node name
16523 @cindex network node name
16524 ネットワークノードのホスト名を表示する。
16525
16526 @item -p
16527 @itemx --processor
16528 @opindex -p
16529 @opindex --processor
16530 @cindex host processor type
16531 プロセッサ・タイプを表示する (命令セット体系、the instruction
16532 set architecture、ISA などと呼ばれることもある)。この情報が
16533 カーネルから簡単に取得できるようになっていない場合は、@samp{unknown} と
16534 表示する。Linux のカーネルがその一例である。
16535
16536 @item -o
16537 @itemx --operating-system
16538 @opindex -o
16539 @opindex --operating-system
16540 @cindex operating system name
16541 オペレーティング・システムの名前を表示する。
16542
16543 @item -r
16544 @itemx --kernel-release
16545 @opindex -r
16546 @opindex --kernel-release
16547 @cindex kernel release
16548 @cindex release of kernel
16549 カーネルのリリース名を表示する。
16550
16551 @item -s
16552 @itemx --kernel-name
16553 @opindex -s
16554 @opindex --kernel-name
16555 @cindex kernel name
16556 @cindex name of kernel
16557 カーネル名を表示する。POSIX 1003.1-2001 では (@pxref{Standards
16558 conformance})、これを「オペレーティング・システムの実装」と
16559 呼んでいる。POSIX の仕様には、カーネルという概念がないから
16560 である。カーネル名は、@option{-o} や  @option{--operating-system} オプション
16561 で表示されるオペレーティング・システム名と同じかもしれないし、
16562 違うかもしれない。オペレーティング・システムによって、基盤と
16563 なっているカーネルと名前が同じものもあれば (FreeBSD, HP-UX など)、
16564 違うものもある (GNU/Linux, Solaris など) からである。
16565
16566 @item -v
16567 @itemx --kernel-version
16568 @opindex -v
16569 @opindex --kernel-version
16570 @cindex kernel version
16571 @cindex version of kernel
16572 カーネルのバージョンを表示する。
16573
16574 @end table
16575
16576 @exitstatus
16577
16578
16579 @node hostname invocation
16580 @section @command{hostname}: システムの名前を表示、または設定する
16581
16582 @pindex hostname
16583 @cindex setting the hostname
16584 @cindex printing the hostname
16585 @cindex system name, printing
16586 @cindex appropriate privileges
16587
16588 @command{hostname} は、引数なしで実行すると、使用しているホストシステムの
16589 名前を表示する。引数を一つ付けると、使用しているホストの名前を指定
16590 された文字列に設定する。ホストの名前を設定するには、しかるべき権限が
16591 必要である。
16592 @sp 1
16593 書式:
16594
16595 @example
16596 hostname [@var{name}]
16597 @end example
16598
16599 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
16600 options}.
16601
16602 @exitstatus
16603
16604
16605 @node hostid invocation
16606 @section @command{hostid}: 数値によるホストの識別名を表示する
16607
16608 @pindex hostid
16609 @cindex printing the host identifier
16610
16611 @command{hostid} は、使用しているホストの数値による識別名を 16 進数で表示する。
16612 このコマンドは引数を取らない。使用できるオプションは、@option{--help} と
16613 @option{--version} だけである。@xref{Common options}.
16614
16615 たとえば、筆者が使っているシステムの一つでは、次のように表示される。
16616
16617 @example
16618 $ hostid
16619 1bac013d
16620 @end example
16621
16622 たまたまこのシステムでは、識別名の 32 ビットの数値が、システムの
16623 インターネット・アドレスと密接な関係を持っているが、いつでもそうとは
16624 かぎらない。
16625
16626 @exitstatus
16627
16628 @node uptime invocation
16629 @section @command{uptime}: システムの連続稼働時間と負荷を表示する
16630
16631 @pindex uptime
16632 @cindex printing the system uptime and load
16633
16634 @command{uptime} は、現在の時刻、システムの連続稼働時間、ログインしているユーザ
16635 の数、それに現在の平均負荷 (load average) を表示する。
16636
16637 引数を指定すると、ユーザが何人ログインしているかを知るために読み込む
16638 ファイルとして、その引数が使用される。引数を指定しない場合は、システムの
16639 デフォルトが使用される (@command{uptime --help} を実行すれば、デフォルトの設定が
16640 わかる)。
16641
16642 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
16643 options}.
16644
16645 たとえば、以下の例は、筆者が使っているシステムの一つで、ちょうど今表示
16646 されたものだ。
16647
16648 @example
16649 $ uptime
16650  14:07  up   3:35,  3 users,  load average: 1.39, 1.15, 1.04
16651 @end example
16652
16653 細かいことを言うと、平均負荷の計算方法は、システムによっていくらか
16654 異なっている。あるシステムでは、ここ 1 分間、5 分間、15 分間の、実行
16655 可能状態のプロセスの平均数として計算されるが、別のシステムでは、割り込み
16656 不可能なスリープ状態のプロセスも含めている (すなわち、ディスク I/O を
16657 待っているプロセスだ)。Linux のカーネルは、割り込み不可能なプロセスを
16658 含める方である。
16659
16660 @node SELinux context
16661 @chapter SELinux コンテキスト
16662
16663 @cindex SELinux context
16664 @cindex SELinux, context
16665 @cindex commands for SELinux context
16666
16667 この章では、SELinux コンテキスト関係の操作を行うコマンドを説明する。
16668
16669 @menu
16670 * chcon invocation::     ファイルの SELinux コンテキストを変更する
16671 * runcon invocation::    指定された SELinux コンテキストでコマンドを実行する
16672 @end menu
16673
16674 @node chcon invocation
16675 @section @command{chcon}: ファイルの SELinux コンテキストを変更する
16676
16677 @pindex chcon
16678 @cindex changing security context
16679 @cindex change SELinux context
16680
16681 @command{chcon} は、指定されたファイルの SELinux セキュリティ・コンテキストを
16682 変更する。
16683 @sp 1
16684 書式:
16685
16686 @smallexample
16687 chcon [@var{option}]@dots{} @var{context} @var{file}@dots{}
16688 chcon [@var{option}]@dots{} [-u @var{user}] [-r @var{role}] [-l @var{range}]@c
16689  [-t @var{type}] @var{file}@dots{}
16690 chcon [@var{option}]@dots{} --reference=@var{rfile} @var{file}@dots{}
16691 @end smallexample
16692
16693 各 @var{file} の SELinux セキュリティ・コンテキストを @var{context} に変更する。
16694 @option{--reference} オプションを使用した場合は、各 @var{file} のセキュリティ・
16695 コンテキストを @var{rfile} のそれに変更する。
16696
16697 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16698
16699 @table @samp
16700
16701 @item --dereference
16702 @opindex --dereference
16703 シンボリックリンクそのものではなく、リンクが指しているものを操作の
16704 対象にする。これがデフォルトである。
16705
16706 @item -h
16707 @itemx --no-dereference
16708 @opindex -h
16709 @opindex --no-dereference
16710 @cindex no dereference
16711 参照先のファイルではなく、シンボリックリンクそのものを操作の対象
16712 にする。
16713
16714 @item --reference=@var{rfile}
16715 @opindex --reference
16716 @cindex reference file
16717 @var{context} の値を直接指定する代わりに、@var{rfile} のセキュリティ・
16718 コンテキストを使用する。
16719
16720 @item -R
16721 @itemx --recursive
16722 @opindex -R
16723 @opindex --recursive
16724 ファイルやディレクトリに対して再帰的に動作する。
16725
16726 @item --preserve-root
16727 @opindex --preserve-root
16728 @option{--recursive} オプションと一緒に使ったとき、ルートディレクトリ (@file{/})
16729 に対して再帰的に動作することを拒否する。 @xref{Treating / specially}.
16730
16731 @item --no-preserve-root
16732 @opindex --no-preserve-root
16733 @option{--recursive} オプションと一緒に使ったとき、ルートディレクトリ (@file{/})
16734 を特別扱いしない。こちらがデフォルトの動作である。 @xref{Treating / specially}.
16735
16736 @choptH @xref{Traversing symlinks}.
16737
16738 @choptL @xref{Traversing symlinks}.
16739
16740 @choptP @xref{Traversing symlinks}.
16741
16742 @item -v
16743 @itemx --verbose
16744 @opindex -v
16745 @opindex --verbose
16746 @cindex diagnostic
16747 処理したすべてのファイルについてメッセージを表示する。
16748
16749 @item -u @var{user}
16750 @itemx --user=@var{user}
16751 @opindex -u
16752 @opindex --user
16753 操作対象のセキュリティ・コンテキストのユーザを @var{user} にする。
16754
16755 @item -r @var{role}
16756 @itemx --role=@var{role}
16757 @opindex -r
16758 @opindex --role
16759 操作対象のセキュリティ・コンテキストのロールを @var{role} にする。
16760
16761 @item -t @var{type}
16762 @itemx --type=@var{type}
16763 @opindex -t
16764 @opindex --type
16765 操作対象のセキュリティ・コンテキストのタイプを @var{type} にする。
16766
16767 @item -l @var{range}
16768 @itemx --range=@var{range}
16769 @opindex -l
16770 @opindex --range
16771 操作対象のセキュリティ・コンテキストのセキュリティ・レベルの
16772 範囲を @var{range} にする。
16773
16774 @end table
16775
16776 @exitstatus
16777
16778 @node runcon invocation
16779 @section @command{runcon}: 指定された SELinux コンテキストでコマンドを実行する。
16780
16781 @pindex runcon
16782 @cindex run with security context
16783
16784
16785 @command{runcon} は、指定された SELinux セキュリティ・コンテキストでファイルを
16786 実行する。
16787
16788 書式:
16789 @smallexample
16790 runcon @var{context} @var{command} [@var{args}]
16791 runcon [ -c ] [-u @var{user}] [-r @var{role}] [-t @var{type}]@c
16792  [-l @var{range}] @var{command} [@var{args}]
16793 @end smallexample
16794
16795 セキュリティ・コンテキストのすべてを @var{context} で指定して、@var{command} を
16796 実行する。あるいは、現在の、または遷移後のセキュリティ・コンテキストの
16797 うち、@var{user}, @var{role}, @var{type}, @var{level} (訳注: 上の書式で言えば
16798 @var{range}) の一つ以上
16799 を変更して、@var{command} を実行する。
16800
16801 @option{-c}, @option{-u}, @option{-r}, @option{-t}, @option{-l}
16802 のどのオプションも指定されていない場合
16803 は、最初の引数が完全なコンテキストとして使用される。@var{command} の後ろに続く
16804 引数があれば、それはそのコマンドに対する引数と見なされる。
16805
16806 @var{context} と @var{command} のどちらも指定されていない場合は、現在の
16807 セキュリティ・コンテキストを表示する。
16808
16809 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16810
16811 @table @samp
16812
16813 @item -c
16814 @itemx --compute
16815 @opindex -c
16816 @opindex --compute
16817 セキュリティ・コンテキストの変更を行う前に、プロセスの遷移による
16818 コンテキストを求めておく。
16819
16820 @item -u @var{user}
16821 @itemx --user=@var{user}
16822 @opindex -u
16823 @opindex --user
16824 操作対象のセキュリティ・コンテキストのユーザを @var{user} にする。
16825
16826 @item -r @var{role}
16827 @itemx --role=@var{role}
16828 @opindex -r
16829 @opindex --role
16830 操作対象のセキュリティ・コンテキストのロールを @var{role} にする。
16831
16832 @item -t @var{type}
16833 @itemx --type=@var{type}
16834 @opindex -t
16835 @opindex --type
16836 操作対象のセキュリティ・コンテキストのタイプを @var{type} にする。
16837
16838 @item -l @var{range}
16839 @itemx --range=@var{range}
16840 @opindex -l
16841 @opindex --range
16842 操作対象のセキュリティ・コンテキストのセキュリティ・レベルの
16843 範囲を @var{range} にする。
16844
16845 @end table
16846
16847 @cindex exit status of @command{runcon}
16848 終了ステータス:
16849
16850 @display
16851 126: @var{command} が見つかったが、起動できなかった。
16852 127: @command{runcon} そのものの実行に失敗した。あるいは、@var{command} が
16853      見つからなかった。
16854 それ以外は、@var{command} の終了ステータス。
16855 @end display
16856
16857 @node Modified command invocation
16858 @chapter コマンド実行条件の変更
16859
16860 @cindex modified command invocation
16861 @cindex invocation of commands, modified
16862 @cindex commands for invoking other commands
16863
16864 この章で説明するコマンドは、他のコマンドを現在の条件とは違った条件で
16865 実行するものである。たとえば、環境を変更して実行する、別のユーザとして
16866 実行するといったコマンドだ。
16867 @sp 1
16868 (訳注: 「別のユーザとして実行する」というのは、@command{chroot} の
16869 @option{--userspec} オプションを指していると考えられなくもないが、元々は
16870 @command{su} コマンドのことを言っていたのだと思う。@command{su} も以前はこの章で説明されて
16871 いたが、現在では coreutils に収録されていない。)
16872
16873 @menu
16874 * chroot invocation::        ルート・ディレクトリを変更する。
16875 * env invocation::           環境変数を変更する。
16876 * nice invocation::          niceness を変更する。
16877 * nohup invocation::         ハングアップ・シグナルで終了しない。
16878 * stdbuf invocation::        標準ストリームのバッファリングを変更する。
16879 * timeout invocation::       タイムリミット付きで実行する。
16880 @end menu
16881
16882
16883 @node chroot invocation
16884 @section @command{chroot}: ルートディレクトリを変更して、コマンドを実行する
16885
16886 @pindex chroot
16887 @cindex running a program in a specified root directory
16888 @cindex root directory, running a program in a specified
16889
16890 @command{chroot} は、指定されたディレクトリをルートディレクトリにして、コマンド
16891 を実行する。多くのシステムでは、この操作を行うことができるのはスーパー
16892 ユーザだけである。
16893 @footnote{もっとも、システムによっては (たとえば、FreeBSD がそうだが)、
16894 特定の一般ユーザが @code{chroot} システムコールを使用できるように設定
16895 できるものもある。従って、そうしたユーザは @command{chroot} コマンドを実行
16896 できるわけだ。また、Cygwin では、どんなユーザでも @command{chroot} コマンド
16897 を実行できる。MS-Windows では chroot 関数をサポートしていないため、
16898 内部で使用する関数が特権を要求しないからである。}
16899 @sp 1
16900 書式:
16901
16902 @example
16903 chroot @var{option} @var{newroot} [@var{command} [@var{args}]@dots{}]
16904 chroot @var{option}
16905 @end example
16906
16907 通常、ファイル名の検索は、ディレクトリ構造の根 (ルート、root)、
16908 すなわち @file{/} を起点として行われる。@command{chroot} はこのルートを @var{newroot}
16909 ディレクトリ (実在するディレクトリでなければならない) に変更し、
16910 その上で @var{command} を、@var{args} の指定があれば @var{args} を付けて実行する。
16911 @var{command} が指定されていない場合、デフォルトのコマンドは、環境変数
16912 @env{SHELL} の値か、@env{SHELL} が設定されていなければ、@command{/bin/sh} であり、
16913 それが @option{-i} オプションを付けて、呼び出される。@var{command} は シェルの
16914 組み込みコマンドであってはならない (@pxref{Special built-in utilities})。
16915
16916 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16917 オプションはオペランドの前に置かなければならない。
16918
16919 @table @samp
16920
16921 @item --userspec=@var{user}[:@var{group}]
16922 @opindex --userspec
16923 デフォルトでは、@var{command} は呼び出し側のプロセスと同じ資格情報を
16924 使って実行されるが、このオプションを使えば、@var{command} を別の @var{user}
16925 として実行することができる。別の基本 @var{group} を指定することも可能だ。
16926 (訳注: coreutils-8.22 では、場合によっては @var{user} や @var{group} を名前
16927 ではなく、ID 番号で指定しなければならないことがある。)
16928
16929 @item --groups=@var{groups}
16930 @opindex --groups
16931 このオプションを使えば、新しいプロセスが使用する補助 @var{groups} を指定
16932 することができる。グループのリスト (名前でも ID 番号でもよい) は、
16933 コンマで区切られていなければならない。(訳注: coreutils-8.22 では、
16934 このオプションが使用できない場合もある。)
16935
16936 @end table
16937
16938 chroot を使う上でよくある問題を避けることができるように、ちょっと
16939 した情報をいくつか挙げておく。まず簡単なことから言うと、@var{command} は、
16940 静的にリンクしたバイナリを指すようにした方がよい。もし、動的にリンク
16941 した実行ファイルを使用するのならば、共有ライブラリが新しいルート
16942 ディレクトリ以下の適切な場所に存在するように、前もって準備しておく
16943 必要があるだろう。
16944
16945 たとえば、静的にリンクした @command{ls} の実行ファイルを作成して、
16946 @file{/tmp/empty} に置けば、root ユーザとして次のようなコマンドを実行する
16947 ことができる。
16948
16949 @example
16950 $ chroot /tmp/empty /ls -Rl /
16951 @end example
16952
16953 出力はこんなふうになるだろう。
16954
16955 @example
16956 /:
16957 total 1023
16958 -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
16959 @end example
16960
16961 もし、動的にリンクした実行ファイル、たとえば @command{bash} を使いたい
16962 ならば、まず @samp{ldd bash} を実行して、どんな共有オブジェクトファイルが
16963 必要かを調べることだ。それから、@command{bash} 自体のバイナリをコピーするだけ
16964 でなく、@samp{ldd bash} でリストされたファイルも、新しいルートディレクトリ
16965 になるディレクトリ以下のしかるべき場所にコピーしておく。さらに、
16966 実行ファイルが何か他のファイルも必要としているなら (たとえば、データ
16967 ファイル、ステータスファイル、デバイスファイルなど)、それも適切な
16968 場所にコピーする。
16969
16970 @cindex exit status of @command{chroot}
16971 終了ステータス:
16972
16973 @display
16974 125: @command{chroot} そのものの実行に失敗した。
16975 126: @var{command} は見つかったが、起動できなかった。
16976 127: @var{command} が見つからなかった。
16977 それ以外は、@var{command} の終了ステータス。
16978 @end display
16979
16980
16981 @node env invocation
16982 @section @command{env}: 変更した環境でコマンドを実行する
16983
16984 @pindex env
16985 @cindex environment, running a program in a modified
16986 @cindex modified environment, running a program in a
16987 @cindex running a program in a modified environment
16988
16989 @command{env} は、環境を変更して、コマンドを実行する。
16990 @sp 1
16991 書式:
16992
16993 @example
16994 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
16995 [@var{command} [@var{args}]@dots{}]
16996 env
16997 @end example
16998
16999 @samp{@var{variable}=@var{value}} という形のオペランドは、環境変数 @var{variable} の値を
17000 @var{value} に設定する。@var{value} は空っぽでも構わない (@samp{@var{variable}=})。変数の値を
17001 空に設定 (set) するのは、変数を破棄 (unset) するのとは別のことである。
17002 こうしたオペランドは、左から右へ評価されるので、二つのオペランドが同じ
17003 変数を対象にしている場合、前のものは無視される。
17004
17005 環境変数名は、空でもよいし、@samp{=} と ASCII NUL 以外なら、どんな文字を
17006 含んでいても構わない。とは言え、変数名は、アンダースコア、数字、ASCII
17007 文字のみから構成し、数字以外の文字で始めるようにした方が、賢明である。
17008 それ以外の名前だと、シェルなどのアプリケーションがうまく動作しないからだ。
17009
17010 @vindex PATH
17011 @samp{=} という文字を含まない最初のオペランドが、起動するプログラムで
17012 あり、環境変数 @env{PATH} に従って、どこにあるかが検索される。残っている
17013 引数があれば、すべてそのプログラムに引数として渡される。起動するプロ
17014 グラムは、シェルの組み込みコマンドであってはならない (@pxref{Special built-in
17015 utilities})。
17016
17017 @env{PATH} に対する変更は、@var{command} のありかを検索する前に有効になる。
17018 そこで、@env{PATH} を短縮するときには、気をつけなければならない。@env{PATH} が
17019 空だったり、@file{/bin} のような重要なディレクトリを欠いていると、@env{PATH} を
17020 変更する前と同じ動作にならないからだ。
17021
17022 めったにないことだが、プログラムの名前に @samp{=} という文字が含まれて
17023 いる場合、それを変数の指定と区別する唯一の方法は、@var{command} として仲介的
17024 なコマンドを使用し、その @var{args} として問題のあるプログラム名を渡すこと
17025 である。たとえば、@file{./prog=} が現在の @env{PATH} 中に存在する実行ファイルだ
17026 としよう。
17027
17028 @example
17029 env prog= true 
17030   # 環境変数 prog を空に設定して 'true' を実行する。
17031 env ./prog= true 
17032   # 環境変数 ./prog を空に設定して 'true' を実行する。
17033 env -- prog= true 
17034   # 環境変数 prog を空に設定して 'true' を実行する。
17035 env sh -c '\prog= true' 
17036   # 'true' を引数にして 'prog=' を実行する。
17037 env sh -c 'exec "$@@"' sh prog= true 
17038   # これも 'prog=' を実行する。
17039 @end example
17040
17041 @cindex environment, printing
17042
17043 環境変数の設定の後にコマンド名が指定されていない場合は、生成された
17044 環境が表示される。これは、@var{command} に @command{printenv} を指定するのと同じこと
17045 である。
17046
17047 以下に例をいくつか挙げる。@command{env} に渡される環境は、@samp{LOGNAME=rms},
17048 @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks} からなっているものとする。
17049
17050 @itemize @bullet
17051
17052 @item
17053 現在の環境を出力する。
17054 @example
17055 $ env | LC_ALL=C sort
17056 EDITOR=emacs
17057 LOGNAME=rms
17058 PATH=.:/gnubin:/hacks
17059 @end example
17060
17061 @item
17062 環境を削減して、@command{foo} を実行する。@command{foo} が見つからないといけない
17063 ので、@env{PATH} だけは元のまま残している。
17064 @example
17065 env - PATH="$PATH" foo
17066 @end example
17067
17068 @item
17069 @samp{LOGNAME=rms}, @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks} からなる環境
17070 で @command{foo} を実行する。@command{foo} には、シェルの組み込みコマンドではなく、
17071 ファイルシステム中で見つかった実行ファイルが必ず使用される。
17072 @example
17073 env foo
17074 @end example
17075
17076 @item
17077 @samp{LOGNAME=foo}, @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks},
17078 @samp{DISPLAY=gnu:0}
17079 からなる環境で、@command{nemacs} を実行する。
17080 @example
17081 env DISPLAY=gnu:0 LOGNAME=foo nemacs
17082 @end example
17083
17084 @item
17085 プログラム @command{/energy/--} の実行を試みる (パスの検索でそれしか出て
17086 こないようにしている)。@command{--} というコマンドが存在する場合、環境
17087 は、@samp{LOGNAME=rms} と @samp{PATH=/energy} だけになり、引数には、@samp{e=mc2},
17088 @samp{bar}, @samp{baz} が使われる。
17089 @example
17090 env -u EDITOR PATH=/energy -- e=mc2 bar baz
17091 @end example
17092
17093 @end itemize
17094
17095
17096 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17097 オプションはオペランドの前に置かなければならない。
17098
17099 @table @samp
17100
17101 @optNull{env}
17102
17103 @item -u @var{name}
17104 @itemx --unset=@var{name}
17105 @opindex -u
17106 @opindex --unset
17107 変数 @var{name} が環境中にあれば、それを環境から削除する。
17108
17109 @item -
17110 @itemx -i
17111 @itemx --ignore-environment
17112 @opindex -
17113 @opindex -i
17114 @opindex --ignore-environment
17115 継承した環境を無視し、空っぽの環境から始める。
17116
17117 @end table
17118
17119 @cindex exit status of @command{env}
17120 終了ステータス:
17121
17122 @display
17123 0:   @var{command} が指定されなかったので、環境を出力した。
17124 125: @command{env} そのものの実行に失敗した。
17125 126: @var{command} は見つかったが、起動できなかった。
17126 127: @var{command} が見つからなかった。
17127 それ以外は、@var{command} の終了ステータス。
17128 @end display
17129
17130
17131 @node nice invocation
17132 @section @command{nice}: niceness を変更して、コマンドを実行する
17133
17134 @pindex nice
17135 @cindex niceness
17136 @cindex scheduling, affecting
17137 @cindex appropriate privileges
17138
17139 "@command{nice} はプロセスの @dfn{niceness} を表示したり、niceness を変更して
17140 コマンドを実行したりする。@dfn{niceness} は、プロセスがシステム中でどの程度
17141 優先的にスケジュールされるかに影響を与える。(訳注: niceness を「スケ
17142 ジューリング優先度」と訳さない理由については、三つほど下のパラグラフを
17143 御覧いただきたい。)
17144 @sp 1
17145 書式:
17146
17147 @example
17148 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
17149 @end example
17150
17151 引数を指定しないと、@command{nice} は現在の niceness を表示する。引数に
17152 @var{command} を指定した場合は、niceness を調整して、その @var{command} を実行する。
17153 デフォルトでは、niceness が 10 増加する。
17154
17155 niceness の値は、最小が @minus{}20 で、最大が 19 である (値が小さければ、
17156 プロセスの優先度が高くなり、使えるリソースも多くなるが、その分、他の
17157 プロセスの動作が遅くなる。また、値が大きければ、プロセスの優先度が低く
17158 なり、自分自身の動作は遅くなるが、実行中の他のプロセスの速度に与える
17159 影響は小さくなる)。システムによっては、niceness の値の範囲がもっと広い
17160 ものもあるし、反対に、上下限の制限がもっときついものもある。サポート
17161 されている範囲を越えた niceness を指定すると、サポートされている値の
17162 最小、または最大を使用しようとしているものとみなされる。
17163
17164 niceness をスケジューリング優先度 (scheduling priority) と混同しては
17165 ならない。後者は、様々なスレッドをどういう序列で実行するかの予定を組む
17166 際に、その序列をアプリケーション側に決めさせるものである。優先度とは
17167 違って、niceness はスケジューラに対する単なるアドバイスにすぎず、スケ
17168 ジューラはそれを無視することができるのだ。また、用語について言うと、
17169 POSIX は @command{nice} の動作を @dfn{nice value} という用語で定義している。
17170 この nice value は、ある niceness と 最小の niceness との間の負ではない
17171 差である。@command{nice} コマンドは POSIX に準拠しているものの、この文書や
17172 エラーメッセージでは、従来の習慣との親和性を考慮して、``niceness'' という
17173 言葉を使っている。
17174
17175 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17176 built-in utilities})。
17177
17178 @mayConflictWithShellBuiltIn{nice}
17179
17180 注意: 現在動作中のプロセスの @dfn{niceness} を変更するには、@command{renice}
17181 コマンドを使う必要がある。
17182
17183 このプログラムでは、以下のオプションが使用できる。参照: @ref{Common options}.
17184 オプションはオペランドの前に置かなければならない。
17185
17186 @table @samp
17187 @item -n @var{adjustment}
17188 @itemx --adjustment=@var{adjustment}
17189 @opindex -n
17190 @opindex --adjustment
17191 コマンドの niceness を 10 ではなく、@var{adjustment} 増加する。@var{adjustment}
17192 が負の数の場合、ユーザがしかるべき特権を持っていなければ、@command{nice} は
17193 警告を発する。とは言え、警告を出すだけで、@var{adjustment} として 0 が
17194 指定されたかのように振る舞う。
17195
17196 互換性を考慮して、@command{nice} は @option{-@var{adjustment}} というオプションの古い
17197 書式もサポートしている。だが、新しいスクリプトでは、@option{-n @var{adjustment}}
17198 の方を使うべきである。
17199
17200 @end table
17201
17202 @cindex exit status of @command{nice}
17203 終了ステータス:
17204
17205 @display
17206 0:   @var{command} が指定されなかったので、niceness を出力した。
17207 125: @command{nice} そのものの実行に失敗した。
17208 126: @var{command} が見つかったが、起動できなかった。
17209 127: @var{command} が見つからなかった。
17210 それ以外は、@var{command} の終了ステータス。
17211 @end display
17212
17213 対話的ではないプログラムは、niceness を落として (訳注: すなわち、
17214 niceness の値を増やして) 実行すると、都合のよいことがある。
17215
17216 @example
17217 $ nice factor 4611686018427387903
17218 @end example
17219
17220 @command{nice} は、現在の niceness を表示するので、@command{nice} を通して @command{nice}
17221 を起動すれば、それがどんな動作をするか、目の当たりに見ることができる。
17222
17223 デフォルトの動作は、niceness を @samp{10} 増加することである。
17224
17225 @example
17226 $ nice
17227 0
17228 $ nice nice
17229 10
17230 $ nice -n 10 nice
17231 10
17232 @end example
17233
17234 @var{adjustment} は、現在の niceness からいくら増減するかということである。
17235 次の例では、最初の @command{nice} が、二番目の @command{nice} を niceness 10 で実行し、
17236 二番目の @command{nice} は、niceness をさらに 3 増やして、三番目の @command{nice} を
17237 実行している。
17238
17239 @example
17240 $ nice nice -n 3 nice
17241 13
17242 @end example
17243
17244 サポートされている範囲より大きい niceness を指定するのは、サポート
17245 されている最大値を指定するのと同じことである。
17246
17247 @example
17248 $ nice -n 10000000000 nice
17249 19
17250 @end example
17251
17252 特権ユーザだけが niceness の値を下げて、プロセスを実行できる。
17253
17254 @example
17255 $ nice -n -1 nice
17256 nice: cannot set niceness: Permission denied
17257 0
17258 $ sudo nice -n -1 nice
17259 -1
17260 @end example
17261
17262
17263 @node nohup invocation
17264 @section @command{nohup}: ハングアップ・シグナルで終了しないコマンドを実行する
17265
17266 @pindex nohup
17267 @cindex hangups, immunity to
17268 @cindex immunity to hangups
17269 @cindex logging out and continuing to run
17270
17271 @flindex nohup.out
17272 @command{nohup} を使って、@var{command} を実行すると、指定されたコマンドがハング
17273 アップ・シグナルを無視するようになる。従って、そのコマンドは、ユーザが
17274 ログアウトした後でも、バックグラウンドで実行を継続することができる。
17275 @sp 1
17276 書式:
17277
17278 @example
17279 nohup @var{command} [@var{arg}]@dots{}
17280 @end example
17281
17282 標準入力が端末の場合、標準入力は @file{/dev/null} に付け換えられる。その
17283 結果、端末セッションが、@command{nohup} によって実行されているコマンドが端末を
17284 使用していると勘違いすることがなくなる。これは GNU の拡張である。
17285 GNU 以外のホストでも使うことを考えているプログラムでは、GNU の拡張を当てに
17286 せず、@samp{nohup @var{command} [@var{arg}]@dots{} </dev/null} を使った方がよい。
17287
17288 @flindex nohup.out
17289 標準出力が端末の場合、コマンドの標準出力は、@file{nohup.out} というファ
17290 イルに追加されて行く。そのファイルに書き込めない場合は、@file{$HOME/nohup.out}
17291 に追記されることになる。そのファイルにも書き込めない場合は、コマンドの
17292 実行が行われない。@command{nohup} によって作成されるのが @file{nohup.out} であれ、
17293 @file{$HOME/nohup.out} であれ、それは、ファイルの所有者にのみ読み書き可能な
17294 ものになる。現在の umask の設定の影響は受けない。
17295
17296 標準エラーが端末の場合、コマンドの標準エラー出力は、基本的には
17297 標準出力 (リダイレクトされているかもしれない) と同じファイル・
17298 ディスクリプタにリダイレクトされる。ただし、標準出力がクローズ
17299 されている場合には、標準エラーの端末への出力は、リダイレクトされる
17300 ことなく、直接 @file{nohup.out} や @file{$HOME/nohup.out} というファイルに
17301 追加される。どちらのファイルが使用されるかは、上述のとおりである。
17302
17303 コマンドの出力を @file{nohup.out} 以外のファイルに書き込みたければ、
17304 リダイレクトすればよい。たとえば、@command{make} の出力を @file{make.log} に書き
17305 込みたかったら、次のようにする。
17306
17307 @example
17308 nohup make > make.log
17309 @end example
17310
17311 @command{nohup} は、実行するコマンドを自動的にバックグラウンドに送ることを
17312 しない。そこで、ユーザは、コマンドラインの末尾に @samp{&} を付けることで、
17313 明示的にそれを行わなければならない。また、@command{nohup} は、@var{command} の
17314 niceness を変更しない。niceness を変更したかったら、@command{nice} を使って、
17315 @samp{nohup nice @var{command}} のように実行すればよい。
17316
17317 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17318 built-in utilities})。
17319
17320 指定できるオプションは、@option{--help} と @option{--version} だけである。
17321 @xref{Common options}.  オプションはオペランドの前に置かなければならない。
17322
17323 @cindex exit status of @command{nohup}
17324 終了ステータス:
17325
17326 @display
17327 125: @env{POSIXLY_CORRECT} が設定されていない場合に、@command{nohup} そのものの
17328       実行に失敗した。
17329 126: @var{command} は見つかったが、起動できなかった。
17330 127: @var{command} が見つからなかった。 
17331 それ以外の場合は、@var{command} の終了ステータス。
17332 @end display
17333
17334 @env{POSIXLY_CORRECT} が設定されている場合は、@command{nohup} そのものが実行に
17335 失敗したときの終了ステータスは、125 ではなく 127 になる。
17336
17337
17338 @node stdbuf invocation
17339 @section @command{stdbuf}: 入出力ストリームのバッファリングを変更して、コマンドを実行する
17340
17341 @pindex stdbuf
17342 @cindex standard streams, buffering
17343 @cindex line buffered
17344
17345 @command{stdbuf} を使用すると、プログラムと結びついている 3 種類の標準入出力
17346 ストリームに対して、そのバッファリング動作を変更することができる。
17347 @sp 1
17348 書式:
17349
17350 @example
17351 stdbuf @var{option}@dots{} @var{command}
17352 @end example
17353
17354 @var{command} は、次の条件を満たすプログラムの名前で始まっていなければ
17355 ならない。
17356 @enumerate
17357 @item
17358 入出力に ISO C @code{FILE} ストリームを使用している (注意: プログラム @command{dd} や
17359 @command{cat} は、これを使用していない)。
17360
17361 @item
17362 自分で標準ストリームのバッファリングを調整していない (注意: プログ
17363 ラム @command{tee} は、この部類に入らない)。
17364 @end enumerate
17365
17366 後に続く引数があれば、@var{command} に引数として渡される。
17367
17368 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17369
17370 @table @samp
17371
17372 @item -i @var{mode}
17373 @itemx --input=@var{mode}
17374 @opindex -i
17375 @opindex --input
17376 標準入力ストリームのバッファリングを調整する。
17377
17378 @item -o @var{mode}
17379 @itemx --output=@var{mode}
17380 @opindex -o
17381 @opindex --output
17382 標準出力ストリームのバッファリングを調整する。
17383
17384 @item -e @var{mode}
17385 @itemx --error=@var{mode}
17386 @opindex -e
17387 @opindex --error
17388 標準エラーストリームのバッファリングを調整する。
17389
17390 @end table
17391
17392 @var{mode} には、以下のものを指定できる。
17393
17394 @table @samp
17395
17396 @item L
17397 ストリームを行単位のバッファ・モードにする。このモードでは、
17398 改行が出力されることになるか、あるいは、端末デバイスに結びついて
17399 いるストリームから入力が読み込まれるまで、データを溜めておく。
17400 このオプションは、標準入力に対しては無効である。
17401
17402 @item 0
17403 選択したストリームのバッファリングを無効にする。このモードでは、
17404 データは即座に出力される。また、要求された量のデータしか入力から
17405 読み込まない。入力と出力で動作が違うことに気をつけていただきたい。
17406 なお、入力のバッファリングを無効にしても、ストリーム入力関数の
17407 応答性やブロッキング動作に影響することはない。たとえば、@code{fread}
17408 は、要求した量より少ないデータを、下層で動いている @code{read} が返して
17409 きても、@code{EOF} が来るか、エラーが起きるまで、やはりブロッキングを
17410 行うのである。
17411
17412 @item @var{size}
17413 バッファ一杯モード (fully buffered mode) で使用するバッファのサイズ
17414 を指定する。
17415 @multiplierSuffixesNoBlocks{size}
17416
17417 @end table
17418
17419 @cindex exit status of @command{stdbuf}
17420 終了ステータス:
17421
17422 @display
17423 125: @command{stdbuf} そのものの実行に失敗した。
17424 126: @var{command} は見つかったが、起動できなかった。
17425 127: @var{command} が見つからなかった。
17426 それ以外は、@var{command} の終了ステータス。
17427 @end display
17428
17429
17430 @node timeout invocation
17431 @section @command{timeout}: タイムリミット付きでコマンドを実行する
17432
17433 @pindex timeout
17434 @cindex time limit
17435 @cindex run commands with bounded time
17436
17437 @command{timeout} は渡されたコマンドを実行し、指定された時間が経過しても
17438 まだ実行が続いていたら、そのコマンドを終了させる。
17439 @sp 1
17440 書式:
17441
17442 @example
17443 timeout [@var{option}] @var{duration} @var{command} [@var{arg}]@dots{}
17444 @end example
17445
17446 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17447 built-in utilities})。
17448
17449 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17450 オプションはオペランドの前に置かなければならない。
17451
17452 @table @samp
17453 @item --preserve-status
17454 @opindex --preserve-status
17455 タイムアウトしたときに、タイムアウトであることを示す @command{timeout}
17456 コマンドの終了ステータスではなく、@command{timeout} が管理している
17457 @var{command} の終了ステータスを返す。このオプションが役に立つのは、
17458 管理される @var{command} が無期限の続行時間をサポートしている場合である。
17459
17460 @item --foreground
17461 @opindex --foreground
17462 独立したバックグラウンドのプログラム・グループを作成しない。
17463 その結果、@command{timeout} に管理される @var{command} が、フォアグラウンドの
17464 TTY を通常どおり使用できるようになる。コマンドが対話的シェルから
17465 直接実行されない場合でも、コマンドの時間制限をきちんと行うには、
17466 (訳注: 言い換えれば、@command{timeout} コマンドをシェルスクリプト中で使用
17467 する場合には)、この動作が必要になることがあり、次の二つの場合が
17468 それに当たる。
17469 @enumerate
17470 @item
17471 @var{command} が対話的であり、たとえば端末からの読み込みが必要な
17472 場合。
17473 @item
17474 端末から直接 @var{command} にシグナルを送ることができるようにしたい
17475 場合。(たとえば、Ctrl-C を送るとか)。
17476 @end enumerate
17477
17478 この動作モードでは、@var{command} のいかなる子プロセスも、時間切れで
17479 終了することがないのに注意すること。
17480
17481 @item -k @var{duration}
17482 @itemx --kill-after=@var{duration}
17483 @opindex -k
17484 @opindex --kill-after
17485 ここで指定した @var{duration} の経過後に、改めて @samp{KILL} シグナルを送り
17486 付けて、監視対象の @var{command} を確実に終了させる。このオプションを
17487 付けないと、選択したシグナルに @var{command} を終了させる力がなかった
17488 場合に、@command{timeout} は @var{command} を殺すことができない。
17489
17490 @item -s @var{signal}
17491 @itemx --signal=@var{signal}
17492 @opindex -s
17493 @opindex --signal
17494 制限時間が来たとき、デフォルトの @samp{TERM} シグナルではなく、指定した
17495 @var{signal} を @var{command} に送る。@var{signal} は @samp{HUP} のような名前でもよく、
17496 番号でもよい。@xref{Signal specifications}.
17497 @end table
17498
17499 @cindex time units
17500 @var{duration} は浮動小数点数であり、後ろに単位を付けることもできる。
17501 @display
17502 @samp{s} 何秒 (デフォルト)
17503 @samp{m} 何分
17504 @samp{h} 何時間
17505 @samp{d} 何日
17506 @end display
17507 @var{duration} が 0 だと、対象となるコマンドが時間切れなしになる。実際の
17508 制限時間は、システムの制約を受けることに注意していただきたい。秒以下の
17509 制限時間を指定するときは、とりわけそれを考慮に入れるべきである。
17510
17511 @cindex exit status of @command{timeout}
17512 終了ステータス:
17513
17514 @display
17515 124: @var{command} がタイムアウトした。
17516 125: @command{timeout} そのものの実行に失敗した。 
17517 126: @var{command} は見つかったが、起動できなかった。
17518 127: @var{command} が見つからなかった。
17519 137: @var{command} に KILL(9) シグナルを送った (128+9)
17520 それ以外は、@var{command} の終了ステータス。
17521 @end display
17522
17523
17524 @node Process control
17525 @chapter プロセス制御
17526
17527 @cindex processes, commands for controlling
17528 @cindex commands for controlling processes
17529
17530 @menu
17531 * kill invocation::          プロセスにシグナルを送る。
17532 @end menu
17533
17534
17535 @node kill invocation
17536 @section @command{kill}: プロセスにシグナルを送る
17537
17538 @pindex kill
17539 @cindex send a signal to processes
17540
17541 @command{kill} コマンドは、プロセスにシグナルを送る。シグナルを送られた
17542 プロセスは、終了するか、あるいは、シグナルを受け取った瞬間に他の
17543 何らかの形で反応する。また、@command{kill} は、シグナルに関する情報を一覧
17544 表示する。
17545 @sp 1
17546 書式:
17547
17548 @example
17549 kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
17550 kill [-l | --list | -t | --table] [@var{signal}]@dots{}
17551 @end example
17552
17553 @mayConflictWithShellBuiltIn{kill}
17554
17555 @command{kill} コマンドの最初の書式では、すべての @var{pid} 引数に対してシグナルが
17556 送られる。シグナルが指定されていない場合に送られるデフォルトのシグナル
17557 は、@samp{TERM} である。 @samp{0} という特別なシグナル番号は、有効なシグナルを
17558 表していないが、引数 @var{pid} が指しているプロセスに対してシグナルを送る
17559 ことが可能かどうかを、調べるために使うことができる。
17560
17561 @var{pid} が正の数なら、シグナルはプロセス ID が @var{pid} のプロセスに送られる。
17562 @var{pid} が 0 なら、シグナルはカレントプロセスのプロセスグループに属する
17563 すべてのプロセスに送られる。@var{pid} が @minus{}1 の場合、シグナルが送られるのは、
17564 ユーザがシグナルを送る権限を持っているすべてのプロセスである。@var{pid} が @minus{}1
17565 より小さい場合は、@var{pid} の絶対値に等しいプロセスグループに属するすべての
17566 プロセスにシグナルが送られる。
17567
17568 @var{pid} が正の数ではない場合、システムプロセスに属するプロセス (システム
17569 によって様々である) は、シグナルが送られるプロセスのリストから除外
17570 される。
17571
17572 最初の @var{pid} 引数として負の @var{pid} を使用したい場合は、その前に@option{--} オプ
17573 ションを置くべきである。とは言え、@samp{kill -@var{signal} -@var{pid}} という書式を使う
17574 場合は、@option{--} は必要がない。これは、POSIX に対する一般的な拡張である。
17575 そこで、次に挙げるコマンドは等価になる。
17576
17577 @example
17578 kill -15 -1
17579 kill -TERM -1
17580 kill -s TERM -- -1
17581 kill -- -1
17582 @end example
17583
17584 最初の書式の @command{kill} コマンドは、すべての @var{pid} 引数が、シグナルが
17585 送られたプロセスをそれぞれ少なくとも一つは指している場合に、成功の
17586 ステータスで終了する。
17587
17588 @command{kill} コマンドの二番目の書式では、シグナルに関する情報が表示される。
17589 @option{-l} または @option{--list}、あるいは、@option{-t} または @option{--table} オプションの
17590 指定は必須である。引数 @var{signal} を一つも指定しないと、サポートされている
17591 すべてのシグナルがリストされる。@option{-l} や @option{--list} の出力は、シグナル名の
17592 リストであり、1 行に一つづつ表示される。ただし、引数 @var{signal} がすでに
17593 シグナル名である場合に表示されるのは、名前ではなく、シグナル番号だ。
17594 @option{-t} や @option{--table} の出力は、シグナル番号、シグナル名、その説明からなる
17595 表である。この書式の @command{kill} コマンドは、引数として指定されたすべての
17596 @var{signal} が有効なものであり、出力エラーがなかったとき、成功のステータスで
17597 終了する。
17598
17599 @command{kill} コマンドでは、@option{--help} や @option{--version} オプションも使用できる。
17600 @xref{Common options}.
17601
17602 @var{signal} の指定には、@samp{HUP} のようなシグナル名や、@samp{1}のようなシグナル
17603 番号、それに、シグナルによって終了させられるときのプロセスの終了ステー
17604 タスを使うことができる (訳注: 最後のものは、GNU coreutils の @command{kill}
17605 コマンドでは使用できるが、他の系統の @command{kill} では使えないかもしれない)。
17606 シグナル名は、標準的な形式でも、頭に @samp{SIG} を付けた形式でも構わない。
17607 大文字小文字はどちらを使ってもよいが、@option{-@var{signal}} という形式のオプション
17608 の場合は例外で、大文字を使わなければならない。小文字を使うと、他の
17609 オプションとまぎらわしいからである。サポートしているシグナル名と
17610 シグナル番号については、「2.5 シグナルの指定」を参照していただきたい。
17611 @xref{Signal specifications}.
17612
17613 @node Delaying
17614 @chapter 一時停止
17615
17616 @cindex delaying commands
17617 @cindex commands for delaying
17618
17619 @c Perhaps @command{wait} or other commands should be described here also?
17620
17621 @menu
17622 * sleep invocation::         指定された時間、停止する。
17623 @end menu
17624
17625
17626 @node sleep invocation
17627 @section @command{sleep}: 指定された時間、停止する
17628
17629 @pindex sleep
17630 @cindex delay for a specified time
17631
17632 @command{sleep} は、コマンドラインで引数として指定された値を合計した時間だけ
17633 停止する。
17634 @sp 1
17635 書式:
17636
17637 @example
17638 sleep @var{number}[smhd]@dots{}
17639 @end example
17640
17641 @cindex time units
17642 各引数は数値であり、後ろに単位を付けてもよい。デフォルトの単位は
17643 秒である。単位には、以下のものが指定できる。
17644
17645 @table @samp
17646 @item s
17647
17648 @item m
17649
17650 @item h
17651
17652 @item d
17653
17654 @end table
17655
17656 @command{sleep} の従来の実装では、@var{number} は整数でなければならず、引数は
17657 接尾辞なしのものが 1 個しか認められていなかった。それに対して GNU の
17658 @command{sleep} では、任意の浮動小数点数を複数個指定できる。 @xref{Floating point}.
17659
17660 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
17661 options}.
17662
17663 @c sleep is a shell built-in at least with Solaris 11's /bin/sh
17664 @mayConflictWithShellBuiltIn{sleep}
17665
17666 @exitstatus
17667
17668
17669 @node Numeric operations
17670 @chapter 数値の操作
17671
17672 @cindex numeric operations
17673 以下のプログラムは、数に関係した作業をする。
17674
17675 @menu
17676 * factor invocation::        素因数を表示する。
17677 * seq invocation::           連続する数を表示する。
17678 @end menu
17679
17680
17681 @node factor invocation
17682 @section @command{factor}: 素因数を表示する
17683
17684 @pindex factor
17685 @cindex prime factors
17686
17687 @command{factor} は、素因数を表示する。
17688 @sp 1
17689 書式:
17690
17691 @example
17692 factor [@var{number}]@dots{}
17693 factor @var{option}
17694 @end example
17695
17696 @var{number} がコマンドラインで指定されていない場合、@command{factor} は標準入力
17697 から数値を読み込む。このとき、改行、タブ、空白で区切って複数の数値を
17698 入力することができる。
17699
17700 @command{factor} コマンドで使えるオプションは、いくつもない。
17701
17702 @table @samp
17703 @item --help
17704 簡単なヘルプメッセージを標準出力に表示し、それ以上の処理をせずに
17705 終了する。
17706
17707 @item --version
17708 プログラムのバージョンを標準出力に表示し、それ以上の処理をせずに
17709 終了する。
17710 @end table
17711
17712 メルセンヌ素数の 8 番目と 9 番目の積を素因数に分解するには、2.2 GHz
17713 Athlon のシステムで、30 ミリセコンドの CPU 時間を要する。
17714
17715 @example
17716 M8=$(echo 2^31-1|bc)
17717 M9=$(echo 2^61-1|bc)
17718 n=$(echo "$M8 * $M9" | bc)
17719 /usr/bin/time -f %U factor $n
17720 4951760154835678088235319297: 2147483647 2305843009213693951
17721 0.03
17722 @end example
17723
17724 同様に、8 番目のフェルマー数、@math{2^{256}+1} では、同じマシンで約 20 秒
17725 かかる。
17726
17727 大きな数の素因数分解は、そもそも大変な作業である。@command{factor} が使用
17728 している Pollard Rho アルゴリズムは、比較的小さな因数を持つ数値に
17729 対してとりわけ効率がよい。もし、小さな因数を持たない大きな数値 (たと
17730 えば、二つの大きな素数の積からなる数値) の素因数分解をなさりたいのなら、
17731 他の方法の方がずっとすぐれている。
17732
17733 @command{factor} が GNU MP を使用せずにビルドされている場合は、単精度の
17734 算術しか利用できない。従って、大きな数値 (一般には @math{2^{64}} 以上)
17735 には対応していない。単精度用のコードが使用しているアルゴリズムは、
17736 比較的小さな数値を素因数に分解するためのものなのである。
17737
17738 @exitstatus
17739
17740
17741 @node seq invocation
17742 @section @command{seq}: 数列を表示する
17743
17744 @pindex seq
17745 @cindex numeric sequences
17746 @cindex sequence of numbers
17747
17748 @command{seq} は、数列を標準出力に表示する。
17749 @sp 1
17750 書式:
17751
17752 @example
17753 seq [@var{option}]@dots{} @var{last}
17754 seq [@var{option}]@dots{} @var{first} @var{last}
17755 seq [@var{option}]@dots{} @var{first} @var{increment} @var{last}
17756 @end example
17757
17758 @command{seq} は、@var{first} から @var{last} までの数を @var{increment} おきに表示する。
17759 デフォルトでは、それぞれの数は 1 行に 1 個づつ表示される。@var{increment} が
17760 指定されていない場合は、@var{first} が @var{last} より大きい場合でも、デフォルトの
17761 @samp{1} が @var{increment} として使用される。@var{first} のデフォルトもまた @samp{1} である。
17762 従って、@code{seq 1} は @samp{1} を表示するが、@code{seq 0} や @code{seq 10 5} は、何も出力
17763 しない。数列が終了するのは、現在の数値に @var{increment} を加えたら @var{last} より
17764 大きくなってしまう時点である。だから、@code{seq 1 10 10} は、@samp{1} しか表示
17765 しない。なお、数値には浮動小数点数を指定してもよい。@xref{Floating point}.
17766
17767 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17768 オプションはオペランドの前に置かなければならない。
17769
17770 @table @samp
17771 @item -f @var{format}
17772 @itemx --format=@var{format}
17773 @opindex -f @var{format}
17774 @opindex --format=@var{format}
17775 @cindex formatting of numbers in @command{seq}
17776 すべての数を @var{format} を使用して表示する。@var{format} は、 @samp{printf} 形式の
17777 浮動小数点数の変換指定をただ一つ含むものでなければならない。すなわち、
17778 @samp{%a}, @samp{%e}, @samp{%f}, @samp{%g}, @samp{%A}, @samp{%E}, @samp{%F},
17779 @samp{%G} のいづれかである。
17780 @samp{%} の後ろには 0 個以上のフラグを、@samp{-+#0 '} のうちから選んで置く
17781 ことができる。また、それに続けて、1 個以上の数字からなるフィールド
17782 幅を指定することもできるし、さらにその後ろに、@samp{.} とそれに続く 0 個
17783 以上の数字からなる精度を指定することもできる。@var{format} には、任意の
17784 数の @samp{%%} 変換指定が含まれていてもよい。変換指定はすべて、@samp{printf}
17785 の場合と同じ意味を持っている。
17786
17787 デフォルトの表示形式は、@var{first}, @var{increment}, @var{last} がどういう表記を使用
17788 しているかよって決まる。そのすべてが固定小数点の 10進数表記を使用
17789 しているならば、デフォルトの表示形式は @samp{%.@var{p}f} になる。ここで @var{p} は、
17790 出力する数値を過不足なく表現できる最小の精度である。それ以外の場合、
17791 デフォルトの表示形式は @samp{%g} になる。
17792
17793 @item -s @var{string}
17794 @itemx --separator=@var{string}
17795 @cindex separator for numbers in @command{seq}
17796 数の区切りに @var{string} を使う。デフォルトは改行である。出力の最後
17797 には、必ず改行が付く。
17798
17799 @item -w
17800 @itemx --equal-width
17801 すべての数を同じ桁数で表示する。先頭の空きは 0 で埋める。@var{first},
17802 @var{increment}, @var{last} は、すべて固定小数点の 10 進数表記でなければなら
17803 ない (他のやり方で先頭を埋めたければ、@option{--format} を使うこと)。
17804
17805 @end table
17806
17807 @option{-f} オプションを使えば、出力をもっときめ細かく制御することができる。
17808
17809 @example
17810 $ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
17811 (-9.00E+05)
17812 ( 2.00E+05)
17813 ( 1.30E+06)
17814 @end example
17815
17816 出力を 16 進数の整数にしたかったら、@command{printf} を使って変換すればよい。
17817
17818 @example
17819 $ printf '%x\n' $(seq 1048575 1024 1050623)
17820 fffff
17821 1003ff
17822 1007ff
17823 @end example
17824
17825 数のリストが非常に長くなる場合は、@command{xargs} を使用すると、引数リストの
17826 長さに対するシステムの制限を回避することができる。
17827
17828 @example
17829 $ seq 1000000 | xargs printf '%x\n' | tail -n 3
17830 f423e
17831 f423f
17832 f4240
17833 @end example
17834
17835 8 進数の出力を生成するには、printf に対して @code{%x} の代わりに、@code{%o}
17836 フォーマットを使用すればよい。
17837
17838 ほとんどのシステムで @command{seq} は、少なくとも @math{2^{53}} までの数値に対して
17839 整数の出力を生成することができる。それより大きい整数に対しては概算に
17840 なる。細かい点は、ご使用のシステムの浮動小数点の実装によって異なって
17841 いる。@xref{Floating point}.  @command{seq} が @math{2^{64}} までの整数に対しては、
17842 きちんと動作するが、それより大きな整数に対しては、数値が不正確になる
17843 ことがあるというのは、よくある話である。
17844
17845 @example
17846 $ seq 50000000000000000000 2 50000000000000000004
17847 50000000000000000000
17848 50000000000000000000
17849 50000000000000000004
17850 @end example
17851
17852 とは言え、負ではない整数を対象とし、インクリメントが 1 で、フォー
17853 マット指定オプションはないという条件の元では、@command{seq} は任意の大きな
17854 数値を表示できることも心に留めておいていただきたい。
17855
17856 @command{seq} でとんでもなく大きな桁の値を扱うときは、気をつけた方がよい。
17857 さもないと、@command{seq} は内部で浮動小数点を使用しているので、結果を見て
17858 びっくりするかもしれない。たとえば、x86 のプラットフォームでは、
17859 内部表現が 64 ビットの仮数部を使用しているが、そこで次のコマンドを
17860 実行すると、
17861
17862 @example
17863 seq 1 0.0000000000000000001 1.0000000000000000009
17864 @end example
17865
17866 @command{seq} は 1.0000000000000000007 を二度出力し、1.0000000000000000008
17867 をスキップする (訳注: 訳者の amd64 環境では、1.0000000000000000008 では
17868 なく、1.0000000000000000006 をスキップする)。
17869
17870 @exitstatus
17871
17872
17873 @node File permissions
17874 @chapter ファイルの許可属性
17875 @include perm-ja.texi
17876
17877 @include parse-datetime-ja.texi
17878
17879 @c              What's GNU?
17880 @c              Arnold Robbins
17881 @node Opening the software toolbox
17882 @chapter ソフトウェアの道具箱
17883
17884 この章の初期のバージョンは、「GNU とは何か? (@cite{What's GNU?})」という
17885 連載記事として @cite{Linux Journal} 1994 年 6 月号に掲載された。執筆者は
17886 Arnold Robbins である。
17887 (@uref{http://www.linuxjournal.com/article.php?sid=2762})
17888
17889 @menu
17890 * Toolbox introduction::     はじめに
17891 * I/O redirection::          I/O リダイレクション
17892 * The who command::          @command{who} コマンド
17893 * The cut command::          @command{cut} コマンド
17894 * The sort command::         @command{sort} コマンド
17895 * The uniq command::         @command{uniq} コマンド
17896 * Putting the tools together::  工具を組み合わせる
17897 @end menu
17898
17899
17900 @node Toolbox introduction
17901 @unnumberedsec はじめに
17902
17903 今月の記事と GNU プロジェクトの関係は、周辺的なものにすぎない。お手元の
17904 GNU/Linux システムの GNU ツールをいくつか取り上げて、こんな使い方もあり
17905 ますよ、と説明している点で、関係があるにすぎないのだ。今月の記事の真の
17906 狙いは、プログラムを開発したり、使用したりする上での、「ソフトウェアは
17907 工具だ」という考え方を説明することである。
17908
17909 ソフトウェアは工具だという思想は、Unix が最初に設計され、開発された
17910 ときの重要で不可欠な考え方だった (Linux も GNU も本質的には Unix の
17911 クローンである)。残念なことに、最近ではインターネットや見栄えのよい
17912 GUI の勢いに押されて、ソフトウェア工具論は流行らなくなっているようだ。
17913 この思想は、様々な問題を解決するための強力な思考モデルを提供してくれる
17914 のだから、まことに残念な話である。
17915
17916 スイス・アーミーナイフをズボンのポケットに (または、小物入れに)
17917 入れて、持ち歩いている人は多い。スイス・アーミーナイフは持っていると
17918 重宝な道具だ。それには、何本かのナイフ、ねじ回し、ピンセット、つまようじ、
17919 爪やすり、コルク抜き、他にもたぶん、いろいろ付いているだろう。日常の
17920 ちょっとした雑用には、何にでも使える簡単な道具があれば済むのだから、
17921 そうした用途にはまさにピッタリの道具である。
17922
17923 しかしながら、熟練した大工は、スイス・アーミーナイフを使って家を建て
17924 たりしない。彼は、その代わりに道具箱を持っていて、そこには用途別の工具
17925 --- のこぎり、金槌、ねじ回し、鉋など --- がぎっしり詰まっている。しかも、
17926 彼は一つ一つの工具について、いつどこで使えばよいかをきちんと心得ている。
17927 ねじ回しの柄で釘を打ち込んだりすることは絶対にないのだ。
17928
17929 ベル研究所にいた Unix の開発者たちは、プロのプログラマやコンピュー
17930 タ・サイエンスの専門家ばかりだった。その彼らが、こういうことに気づいた
17931 のだ。万能型のプログラムは、たった一つのプログラムを使えばよいので、
17932 ユーザには受けがよいかもしれない。だが、いざ実際に作ってみると、そうした
17933 プログラムは、
17934
17935 @enumerate a
17936 @item
17937 書くのが難しく、
17938
17939 @item
17940 保守やデバッグが難しく、
17941
17942 @item
17943 新しい状況に合わせて機能を拡張するのが難しい。
17944 @end enumerate
17945
17946 むしろ彼らは、プログラムは用途別の工具であるべきだと痛感した。
17947 要するに、個々のプログラムは、「一つの仕事をきちんとやってのければ
17948 よい」。それ以上でもそれ以下でもない。そういったプログラムは、設計
17949 するのも、コードを書くのも、修正するのも、ずっと簡単である ---
17950 たった一つのことしかしないからだ。
17951
17952 それだけではない。適切な仕組みを使って、プログラムを組み合わせると、
17953 全体が部分の総和以上になることにも、彼らは気づいた。ある用途専用の
17954 プログラムをいくつか組み合わせると、どのプログラムもそのために作られた
17955 のではない、ある特定の作業をやってのけることができる。それも、それ専用の
17956 プログラムを書かなければならない場合よりも、はるかに迅速に、かつ簡単に
17957 やってのけられるのだ。この記事の以下では、そうした使用法の (典型的な)
17958 例をいくつか紹介する。(大事なことを一つ付記しておく。急がば回れだ。
17959 必要になるかもしれないソフトウェア工具があれば、まずそれを作ること。
17960 道具箱に適切な工具がまだない場合の話であるが。)
17961
17962 @node I/O redirection
17963 @unnumberedsec I/O リダイレクション
17964
17965 シェルの入出力リダイレクションについて、基本的なこと、とくに標準入力、
17966 標準出力、標準エラーがどういうものかを、読者がよく御存じだとして、話を
17967 進める。簡単に言うと、標準入力とは、データの入力元、すなわち、データが
17968 そこからやって来る場所のことだ。データの入力元が、ディスク上のファイル
17969 だろうと、キーボードだろうと、磁気テープだろうと、それどころかパンチ
17970 カード・リーダーだろうと、プログラムはそれを知る必要もなければ、気に
17971 かける必要もない。同様に、標準出力とは、データの溜まる場所、データが
17972 そこに行く場所のことだ。プログラムとしては、それがどこになろうと、知ら
17973 なくてもよく、気にかけなくてもよい。標準入力からデータを読み込み、それに
17974 対して何らかの処理を行い、標準出力に送り出すだけのプログラムを、水道の
17975 パイプラインのフィルターになぞらえて、「フィルター (@dfn{filter})」と呼ぶ。
17976
17977 Unix のシェルでは、データのパイプラインを作るのはとてもやさしい。
17978
17979 @smallexample
17980 program_to_create_data | filter1 | ... | filterN > final.pretty.data
17981 @end smallexample
17982
17983 ここでは、まず最初に生のデータを作成している。各フィルターがその
17984 データに対して何らかの変形を次々に行い、最終的に、データが希望どおりの
17985 形になって、パイプラインから抜け出してくる。
17986
17987 標準入力と標準出力にとっては、それで十分だ。では、標準エラーはどこ
17988 で登場し、どんな役割を果たすのだろうか? 上記パイプラインの @command{filter1} に
17989 ついて考えてほしい。データを読んでいるうちにエラーが起きたら、どうなる
17990 だろうか? @command{filter1} がエラーメッセージを標準出力に書き出したら、その
17991 メッセージはパイプラインを下って @command{filter2} の入力に飲み込まれてしまう。
17992 そうなると、ユーザはたぶんメッセージをまったく目にしないことになるだろう。
17993 そこで、プログラムとしては、ユーザがエラーメッセージに気がついてくれる
17994 ように、それを送ることのできる場所が必要になる。それが、標準エラー
17995 なのであり、標準エラーは通常、現在使用しているコンソールやウィンドウ
17996 に結びついている。プログラムの標準出力を使用中のスクリーン以外に
17997 リダイレクトしている場合でも、それは変わらない。
17998
17999 フィルター・プログラムが協力し合うためには、データのフォーマットに
18000 ついて互いに合意している必要がある。最も素直で使いやすいフォーマットと
18001 言えば、何と言っても、行分けされたテキストだ。そして、Unix のデータファ
18002 イルは、たいていの場合、まさに、ASCII LF (Line Feed) 文字によって行分け
18003 されたバイトの連続なのである。なお、この LF 文字は、Unix の文書では
18004 「改行 (newline)」と呼ばれる習慣になっている (C のプログラマにとっては
18005 @code{\n} だ)。これこそ、すべての伝統的なフィルター・プログラムによって使用
18006 されて来たフォーマットである。(昔のオペレーティング・システムの多くは、
18007 バイナリ・データを扱うための複雑な手段や専用のプログラムを備えていた。
18008 だが、Unix は、ただ単にテキストエディタでデータを見たり編集できたり
18009 する方がはるかに簡単だという考えから、そうした道具をずっと敬遠してきた
18010 のである。)
18011
18012 さて、前置きはこれくらいで十分だ。まず、道具のいくつかをざっと見て
18013 みよう。その後で、そうした道具をおもしろいやり方で組み合わせる方法を
18014 ご覧に入れる。以下の解説では、当面の問題に関係のあるコマンドライン・
18015 オプションしか取り上げない。いつでもそうすべきことだが、コマンドについて
18016 詳しいことを知りたかったら、ご使用のシステムの文書を参照なさるとよい。
18017
18018 @node The who command
18019 @unnumberedsec @command{who} コマンド
18020
18021 最初に取り上げるプログラムは、@command{who} コマンドだ。これは単独で使うと、
18022 現在ログインしているユーザのリストを生成する (参照: @ref{who invocation})。
18023 筆者がこの原稿を書いているのは、シングルユーザのシステム
18024 だが、数人のユーザがログインしていることにしよう。
18025
18026 @example
18027 $ who
18028 @print{} arnold   console Jan 22 19:57
18029 @print{} miriam   ttyp0   Jan 23 14:19(:0.0)
18030 @print{} bill     ttyp1   Jan 21 09:32(:0.0)
18031 @print{} arnold   ttyp2   Jan 23 20:48(:0.0)
18032 @end example
18033
18034 ここで @samp{$} はお馴染みのシェルプロンプトであり、筆者はそれに対して
18035 @samp{who} と打ち込んだわけだ。三人のユーザがログインしており、筆者は二度
18036 ログインしている。伝統的な Unix のシステムでは、ユーザ名はアルファベット
18037 8 文字までということになっている。このちょっとした豆知識が、後で役に
18038 立つことになる。@samp{who} の出力は悪くはない。だが、大しておもしろいデータ
18039 でもない。
18040
18041 @node The cut command
18042 @unnumberedsec @command{cut} コマンド
18043
18044 次に注目するプログラムは @command{cut} コマンドだ。このコマンドは、入力された
18045 データから縦の列 (columns) やフィールドを切り出す (参照: @ref{cut invocation})。
18046 そこで、@command{cut} に命じて、@file{/etc/passwd} ファイルから
18047 ログイン名とフルネームだけ表示させるといったことができる。@file{/etc/passwd}
18048 には、七つのフィールドがあり、おのおのコロンで区切られている。
18049
18050 @example
18051 arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
18052 @end example
18053
18054 1 番目と 5 番目のフィールドを取り出すには、次のように @command{cut} を使用
18055 する。
18056
18057 @example
18058 $ cut -d: -f1,5 /etc/passwd
18059 @print{} root:Operator
18060 @dots{}
18061 @print{} arnold:Arnold D. Robbins
18062 @print{} miriam:Miriam A. Robbins
18063 @dots{}
18064 @end example
18065
18066 @option{-c} オプションを付けると、 @command{cut} は入力行中の特定の文字 (すなわち、
18067 特定の縦の列) を切り出す。これは、入力データが固定幅のフィールドを持ち、
18068 フィールド・セパレータがないときに便利である。たとえば、今月の月曜日は、
18069 何日と何日かをリストするには、次のようにする。
18070
18071 @c Is using cal ok?  Looked at gcal, but I don't like it.
18072 @example
18073 $ cal | cut -c 3-5
18074 @print{} Mo
18075 @print{}
18076 @print{}  6
18077 @print{} 13
18078 @print{} 20
18079 @print{} 27
18080 @end example
18081
18082 @node The sort command
18083 @unnumberedsec @command{sort} コマンド
18084
18085 次に @command{sort} コマンドを一瞥する。これは Unix 風のシステムにおける最も
18086 強力なコマンドの一つであり、パイプを使って手の込んだデータ処理を行う
18087 とき、気がつくと使っていることがよくあるものだ。
18088
18089  @command{sort} コマンドは、コマンドラインで指名された各ファイルを読み込んで、
18090 ソートする。その後で、ソートしたデータをマージし、それを標準出力に書き
18091 出す。コマンドラインでファイルが指定されていない場合は、標準入力を読み
18092 込む (こうして、フィルターになる)。ソートは、文字の照合順序、あるいは、
18093 ユーザが順序について指定した基準に基づいて行われる (参照: @ref{sort invocation})。
18094
18095
18096 @node The uniq command
18097 @unnumberedsec @command{uniq} コマンド
18098
18099 最後に目を向けるのは (少なくとも今のところはだが)、@command{uniq} プログラムだ。
18100 データのソートをしていると、結果に重複行が現れることがよくある。内容が
18101 全く同じ行だ。たいていの場合、各行は一つだけあればよい。そこで、@command{uniq}
18102 の出番になる。@command{uniq} プログラムは、標準入力を読み込み、連続する同一行に
18103 ついては、そのうちの一件だけを表示する。@command{uniq} には、オプションがいくつ
18104 かある。後で @option{-c} オプションを使うことになるが、これはユニークな、つまり
18105 他と違っている各行を表示するとき、その行が入力中に現れた回数を前に付ける
18106 ものである (参照: @ref{uniq invocation})。
18107
18108
18109 @node Putting the tools together
18110 @unnumberedsec 工具 (tools) を組み合わせる
18111
18112 さて、大規模な ISP のサーバーシステムがあって、何十人ものユーザが
18113 ログインしているとしよう。経営側がシステム管理者に、ログインしている
18114 ユーザのソートしたリストを生成するプログラムを書くことを求めている。
18115 しかも、あるユーザが多重ログインをしていても、その人の名前は出力に
18116 1 回だけ現れればよいという条件がある。
18117
18118 システム管理者は腰を据えてシステムのマニュアル類に取り組み、そうした
18119 作業を実行する C のプログラムを書くこともできるだろう。そのためには、
18120 たぶん数百行のコードが必要であり、プログラムを書いて、テストして、
18121 デバッグするには、2 時間ぐらいかかるはずだ。それに対して、ソフトウェアの
18122 道具箱に精通しているシステム管理者なら、C のプログラムを書く代わりに、
18123 ログインしているユーザのリストを生成するところから始めることができる。
18124
18125 @example
18126 $ who | cut -c1-8
18127 @print{} arnold
18128 @print{} miriam
18129 @print{} bill
18130 @print{} arnold
18131 @end example
18132
18133 次に、リストをソートする。
18134
18135 @example
18136 $ who | cut -c1-8 | sort
18137 @print{} arnold
18138 @print{} arnold
18139 @print{} bill
18140 @print{} miriam
18141 @end example
18142
18143 最後に、ソートしたリストを @command{uniq} に渡して、重複を除く。
18144
18145 @example
18146 $ who | cut -c1-8 | sort | uniq
18147 @print{} arnold
18148 @print{} bill
18149 @print{} miriam
18150 @end example
18151
18152 実を言うと、@command{sort} コマンドには @option{-u} というオプションがあって、@command{uniq}
18153 がやることをやってくれる。しかし、@command{uniq} にはほかの働きもあり、そちらは
18154 @samp{sort -u} で代用することができない。
18155
18156 システム管理者が、以下のように、このパイプラインをシェルスクリプトに
18157 しておけば、システムのすべてのユーザが利用できるようになる (@samp{#} は
18158 システム管理者、すなわち @code{root} のプロンプトだ)。
18159
18160 @example
18161 # cat > /usr/local/bin/listusers
18162 who | cut -c1-8 | sort | uniq
18163 ^D
18164 # chmod +x /usr/local/bin/listusers
18165 @end example
18166
18167 ここには、心に留めておくべき重要なことが四つある。まず第一に、1 行の
18168 コマンドラインにたった四つのプログラムを書くことで、システム管理者は約
18169 2 時間分の仕事をしないで済ますことができた。それだけではない。シェルの
18170 パイプラインは、C のプログラムを使った場合と比べても、ほぼ同じくらい
18171 効率がよく、プログラマの労働時間という点から見ると、ずっとずっと効率が
18172 よい。人間の労働時間はコンピュータの時間よりはるかに高価であり、「何も
18173 かもやるには、いつだって時間が足りない」現代社会では、プログラマの時間
18174 を 2 時間も節約するのは、馬鹿にできない成果だ。
18175
18176 二番目に、ツールを組み合わせることで、個々のプログラムの作者が想像も
18177 しなかったような、ある特定の目的のための仕事をやってのけることができる。
18178 これも、強調しておくべき重要なことである。
18179
18180 第三に、ここでやって見せたように、段階を追ってパイプラインを構成する
18181 のも有益な方法だ。そうすれば、パイプラインの段階ごとにデータを目で見る
18182 ことができるので、ツール類を間違いなく適切に使っているという自信を得る
18183 ことができる。
18184
18185 最後に、実行したパイプラインをシェルスクリプトにまとめておけば、
18186 他のユーザがそのコマンドを使うことができる。彼らのために作成した
18187 手の込んだコマンドの配管工事を、彼らは憶える必要すらないのだ。どう
18188 やって実行するかという点から見ると、シェルスクリプトもコンパイル
18189 されたプログラムも見分けが付かないのである。
18190
18191 ここまでは準備運動だ。続いて、もっと複雑なパイプラインをもう二つ
18192 ご覧に入れよう。そのためには、工具をもう二つ紹介する必要がある。
18193
18194 一つ目は @command{tr} コマンドだ。``transliterate (翻字する、字を置き換える)''
18195 の意味である。 @command{tr} コマンドは、一字一字処理して行くというやり方で、
18196 文字を置き換える (参照: @ref{tr invocation})。通常、このコマンドを使用
18197 するのは、大文字を小文字に変換するといったことのためである。
18198
18199 @example
18200 $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
18201 @print{} this example has mixed case!
18202 @end example
18203
18204 役に立ちそうなオプションがいくつかある。
18205
18206 @table @code
18207 @item -c
18208 リストされた文字の補集合を動作対象にする。言い換えると、指定された
18209 集合に存在しない文字に対して操作が行われる。
18210
18211 @item -d
18212 一つ目の集合にある文字を出力から削除する。
18213
18214 @item -s
18215 出力中の連続する同一文字を、ただの 1 文字に圧縮する。
18216 @end table
18217
18218 すぐ後で、この三つのオプションをすべて使うことになる。
18219
18220 紹介するもう一つのコマンドは、@command{comm} だ。@command{comm} コマンドは、二つの
18221 ソートされた入力ファイルを入力データとして受け取り、両ファイルの各行を
18222 三つの列に分けて表示する。出力される列は、一番目のファイルにのみ存在
18223 する行、二番目のファイルにのみ存在する行、両方のファイルに存在する行の
18224 順番である。@option{-1}, @option{-2}, @option{-3} というコマンドライン・オプションを
18225 付けると、対応する列を表示しないようになる。 (これは直感的ではないので、
18226 ちょっとした慣れが必要だ。参照: @ref{comm invocation}) 例を挙げよう。
18227
18228 @example
18229 $ cat f1
18230 @print{} 11111
18231 @print{} 22222
18232 @print{} 33333
18233 @print{} 44444
18234 $ cat f2
18235 @print{} 00000
18236 @print{} 22222
18237 @print{} 33333
18238 @print{} 55555
18239 $ comm f1 f2
18240 @print{}         00000
18241 @print{} 11111
18242 @print{}                 22222
18243 @print{}                 33333
18244 @print{} 44444
18245 @print{}         55555
18246 @end example
18247
18248 ファイル名を @file{-} にすると、@command{comm} は通常ファイルではなく、標準入力を
18249 読み込む。
18250
18251 これで、気の利いたパイプラインを組み立てる準備ができた。最初に作る
18252 アプリケーションは、単語の出現頻度カウンターである。これは、ある特定の
18253 単語を使いすぎていないかどうか、文書の作成者が判断するとき、役に立つ。
18254
18255 最初のステップは、入力ファイル中のすべての文字を大文字か小文字の
18256 どちらかに統一することである。``The'' と ``the'' は、頻度計算にとって同じ
18257 単語だ。
18258
18259 @example
18260 $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
18261 @end example
18262
18263 次のステップは、句読点を除去することだ。引用符の付いている単語と
18264 付いていない単語も同じものとして扱った方がよいだろう。それならば、
18265 句読点類をすっぱり取り除いてしまうのが、一番簡単だ。
18266
18267 @smallexample
18268 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
18269 @end smallexample
18270
18271 二番目の @command{tr} コマンドは、リストされた文字の補集合を操作対象にして
18272 いる。すなわち、アルファベットのすべての文字、数字、アンダースコア、空白
18273 以外を対象にするわけだ。@samp{\n} は改行文字のことであり、これもそのまま残さ
18274 なければならない。(市販のアプリで使うスクリプトなら、念のため ASCII タブ
18275 文字も含めた方がよいだろう。)
18276
18277 この時点で、空白 (訳注: 改行を含む) で区切られた単語からなるデータが
18278 できていることになる。単語には、英数字 (それにアンダースコア) しか含まれ
18279 ていない。次のステップは、データをバラして、1 行 1 単語になるようにする
18280 ことだ。そうすれば、すぐ後で見るように、出現回数の計算がずっと楽になる。
18281
18282 @smallexample
18283 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18284 > tr -s ' ' '\n' | ...
18285 @end smallexample
18286
18287 このコマンドは、空白を改行に変える。@option{-s} オプションが付いているので、
18288 出力中の連続する改行文字は、たった 1 個に圧縮される。これで、空行を
18289 なくすことができるわけだ。(なお、2 行目行頭の @samp{>} という記号は、シェル
18290 の二次プロンプトである。シェルがユーザに、コマンドがまだ最後まで打ち
18291 込まれていないと知らせるとき、これが表示される。)
18292
18293 今や、1 行 1 単語からなるデータが手元にある。句読点は含まれず、すべて
18294 小文字だ。これで、各単語の出現回数を数える準備が整った。
18295
18296 @smallexample
18297 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18298 > tr -s ' ' '\n' | sort | uniq -c | ...
18299 @end smallexample
18300
18301 この時点で、データはたぶんこんなふうになっているだろう。
18302
18303 @example
18304      60 a
18305       2 able
18306       6 about
18307       1 above
18308       2 accomplish
18309       1 acquire
18310       1 actually
18311       2 additional
18312 @end example
18313
18314 なんと、出力が出現回数ではなく、単語によってソートされている! こちら
18315 としては、最も頻繁に使われる単語ほど先に表示したいのにだ。幸いなことに、
18316 それは簡単に実現できる。@command{sort} のオプションをもう二つ使うだけでよい。
18317
18318 @table @code
18319 @item -n
18320 文字としてではなく、数値としてソートする。
18321
18322 @item -r
18323 逆順にソートする。
18324 @end table
18325
18326 最終的なパイプラインは次のようになる。
18327
18328 @smallexample
18329 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18330 > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
18331 @print{}    156 the
18332 @print{}     60 a
18333 @print{}     58 to
18334 @print{}     51 of
18335 @print{}     51 and
18336 @dots{}
18337 @end smallexample
18338
18339 ふう、憶えることがどっさり! うん、でもね、同じ原則を応用してるだけ
18340 なんだよ。たった 2 行、6 個のコマンドで (実際には、長い 1 行を便宜上
18341 2 行に分割しているだけだが) 興味深く有用な作業をするプログラムが
18342 出来上がった。それも、同じこことする C のプログラムを書くよりもずっと
18343 短い時間でだ。
18344
18345 上記のパイプラインをちょっといじるだけで、なんと、簡単なスペル
18346 チェッカーが出来てしまう。ある単語の綴りが正しいかどうかを判断するには、
18347 辞書で調べさえすればよい。その単語が辞書になければ、綴りを間違えている
18348 可能性が高いわけだ。そこで、とりあえず、辞書が必要になる。辞書の在り処
18349 は、慣例からすると @file{/usr/dict/words} だ。筆者の GNU/Linux システムでは
18350 @footnote{この記事を 2000 年 11 月に改訂したとき使用したのは、Redhat Linux
18351 6.1 である}、それはソートされた 45,402 語からなる辞書である。
18352
18353 それでは、自分の作ったファイルをどうやって辞書と比べるのか? 前の例と
18354 同様、ソートした単語のリストを 1 行 1 語の形式で生成する。
18355
18356 @smallexample
18357 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18358 > tr -s ' ' '\n' | sort -u | ...
18359 @end smallexample
18360
18361 必要なのは、辞書にない単語のリストだけだ。そこで、@command{comm} の出番に
18362 なる。
18363
18364 @smallexample
18365 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18366 > tr -s ' ' '\n' | sort -u |
18367 > comm -23 - /usr/dict/words
18368 @end smallexample
18369
18370 @option{-2} と @option{-3} のオプションを使うと、辞書 (2 番目のファイル) にしかない
18371 行と、両方のファイルにある行が排除される。1 番目のファイル (標準入力、
18372 すなわち、自分が使った単語のリストだ) にしかない行は、辞書に存在しない
18373 単語だ。そうした単語は、綴りを間違えている可能性がかなり高いわけである。
18374 ご覧に入れたこのパイプラインは、Unix における市販のスペルチェッカーに
18375 対する最初の一太刀だったのである。
18376
18377 他にも一言述べておくべきツールがいくつかある。
18378
18379 @table @command
18380 @item grep
18381 ファイルを調べて、正規表現にマッチするテキストを検索する。
18382
18383 @item wc
18384 行数、単語数、文字数を計算する。
18385
18386 @item tee
18387 データが流れるパイプのための T 字管。データをファイルと標準出力に
18388 コピーする。
18389
18390 @item sed
18391 ストリーム・エディタ。上級ツール。
18392
18393 @item awk
18394 データ処理用の言語。これも上級ツール。
18395 @end table
18396
18397 ソフトウェア工具論が取り入れたものに、次のちょっとしたアドバイスも
18398 ある。「骨の折れる部分は、他の奴にやらせろ」。すなわち、ある道具を
18399 選んで、必要なことの大部分をやらせ、それから、その結果に手を加えて、
18400 こちらの望む形にする、ということである。
18401
18402 要約しておこう。
18403
18404 @enumerate 1
18405 @item
18406 個々のプログラムは、一つの仕事をきちんとやってのければよい。それ
18407 以上でもそれ以下でもない。
18408
18409 @item
18410 プログラムを適切な配管工事で組み合わせると、全体が部分の総和以上に
18411 なる結果が生じる。作者が想像もしなかったようなプログラムの新しい
18412 使用法が見つかることもある。
18413
18414 @item
18415 プログラムは決して余計なヘッダや追加情報を出力すべきではない。
18416 そうしたものもパイプラインの先へ送られてしまうかもしれないからだ。
18417 (これは、これまでに言及しなかったが、重要なことだ。)
18418
18419 @item
18420 骨の折れる部分は、他の奴にやらせろ。
18421
18422 @item
18423 自分の道具箱をよく知れ! 個々のプログラムを適切に使え。適切なツール
18424 がなかったら、それを作れ。
18425 @end enumerate
18426
18427 これを執筆している時点で、ここで取り上げたプログラムはすべて次の
18428 URL から手に入れることができる。@*
18429 @uref{http://ftp.gnu.org/old-gnu/textutils/textutils-1.22.tar.gz} @*
18430 もっと新しいバージョンは以下の場所にある。@*
18431 @uref{http://ftp.gnu.org/gnu/coreutils}
18432
18433 この記事で筆者が述べたことに、新しいことは何もない。ソフトウェアは
18434 工具だという思想が最初に紹介されたのは、Brian Kernighan と P.J. Plauger
18435 による @cite{Software Tools} という本の中だった (Addison-Wesley, ISBN
18436 0-201-03669-X)。ソフトウェア工具の書き方と使い方を教えるこの本は、1976
18437 年に執筆され、@command{ratfor} (RATional FORtran) という名前の FORTRAN のプリ
18438 プロセッサを使用している。その当時、C は今ほどありふれてはいず、FORTRAN
18439 がそうだったのだ。最後の章では、@command{ratfor} を FORTRAN に変換するプロセッサ
18440 を @command{ratfor} で書いて見せている。@command{ratfor} は C にとてもよく似ているので、
18441 C を御存じの方なら、コードを追うのに何の苦労もないことだろう。
18442 (訳注: @cite{Software Tools} の翻訳は「ソフトウェア作法」という題で 1981 年に
18443 出版されている。木村泉 訳、共立出版)
18444
18445 1981 年に本は改訂され、@cite{Software Tools in Pascal} という形でも手に
18446 入るようになった (Addison-Wesley, ISBN 0-201-10342-7)。どちらの本も
18447 現在でも入手可能であり、プログラマなら、一読の価値が十分にある。この
18448 2 冊の本が筆者のプログラミングに対する見方を大きく変えてくれたことに、
18449 疑いの余地はない。
18450
18451 両方の本にあるプログラムは、Brian Kernighan のホームページから手に
18452 入れることができる (@uref{http://cm.bell-labs.com/who/bwk})。Software Tools
18453 Users Group という活動的なグループが長年に渡って存在し、そのメンバーが
18454 オリジナルの @command{ratfor} プログラムを、FORTRAN コンパイラを持っている
18455 ほとんどすべてのコンピュータ・システムに移植していた。だが、1980 年代の
18456 中頃に Unix が大学を越えて浸透し出すにつれて、グループの人気は衰えて
18457 行った。
18458
18459 現在では GNU のコードをはじめ、Unix クローンのプログラムがどんどん
18460 作られており、上記のプログラムはほとんど関心を持たれていない。それに、
18461 現代の C のバージョンの方がはるかに効率がよく、できることも上記の
18462 プログラムよりずっと多くなっている。それでも、よいプログラミング・
18463 スタイルのお手本として、また、今でも価値がある考え方を熱心に説いている
18464 点において、この 2 冊の本は肩を並べるものがない。筆者としては、大いに
18465 お薦めする次第だ。
18466
18467 謝辞: ソフトウェア工具の最初の道具鍛冶である、Bell 研究所の Brian
18468 Kernighan 氏に、この記事を読んでチェックしてくださったことについて、
18469 心からお礼を申し上げる。
18470
18471 @node About the translation
18472 @appendix 翻訳について
18473
18474 この文書は GNU core utilities version @value{VERSION} の info マニュアルの翻訳
18475 である。間違いの御指摘や改良の御提案は Linux JM project 宛にメールで
18476 なさっていただきたい (@email{linuxjm-discuss@@lists.osdn.me})。
18477  
18478 まず最初に、coreutils の日本語版 info マニュアルの呼び出し方を簡単に
18479 説明する。coreutils の 日本語版 info が install-info コマンドを使って
18480 きちんとシステムにインストールされているならば、コマンドラインから 
18481 @samp{info coreutils-ja} で日本語マニュアル全体を、@samp{info chmod-ja} などで
18482 個々のプログラムの日本語マニュアルを呼び出すことができる。英語版を
18483 読むときは、今までどおり @samp{info coreutils} や @samp{info chmod} とすればよい。
18484 個々のコマンドについては、英語版なら @samp{info coreutils 'cp invocation'}、
18485 日本語版なら @samp{info coreutils-ja 'cp invocation'} といったマニュアルの
18486 呼び出し方もある。
18487
18488 (注意: ご使用の coreutils のバージョンが 8.23 の場合は、info 
18489 マニュアルのトップレベルのメニューに、Coreutils というメニュー項目 
18490 (英語版 coreutils マニュアルの最初のページ) のほかに、 coreutils 
18491 という小文字のメニュー項目もあるので、話がもう少し複雑である。英語版 
18492 coreutils マニュアルの最初のページを info コマンドで開くときは、
18493 @samp{info Coreutils} と大文字で指定していただきたい。また、
18494 @samp{info coreutils 'cp invocation'} といった呼び出し方をする場合も、
18495 @samp{info Coreutils 'cp invocation'} などと Coreutils を大文字にする必要がある。
18496 バージョン 8.22 には、英語版、日本語版とも、この問題はない。)
18497
18498 また、@samp{info} を引数なしで実行すると、info マニュアルのトップレベルの
18499 メニューが開く。ここで、メニュー項目にカーソルを合わせて、リターンキーを
18500 押せば、その項目に飛ぶ。しかし、読みたい項目をキー操作で指定する方が簡単
18501 である。たとえば、@kbd{m} キーを押した後 @kbd{chmod-ja} と打ち込んで、リターン
18502 キーを押せば、chmod コマンドの日本語版マニュアルが、@kbd{chmod} だけなら
18503 英語版マニュアルが表示される。
18504
18505 @kbd{coreutils-ja}、@kbd{chmod-ja} などと @kbd{-ja} を付けるのは、@command{info} 
18506 プログラムを起動するときと、info のトップレベル・メニューにいるとき
18507 だけである。すでに日本語版 coreutils マニュアルのどれかを (それが 
18508 coreutils-ja であれ、dd-ja であれ) @command{info} コマンドで開いている場合は、
18509 @kbd{-ja} を後ろに付ける必要がなくなる。と言うより、付けてはいけない。
18510 coreutils-ja の先頭ページのようにコマンドのメニューが存在するページ
18511 では (実際には、スクロールしないと、メニューが見えないが)、たとえば、
18512 @kbd{m} に続けて @kbd{chmod} と打ち込み、リターンキーを押すだけで、chmod の
18513 日本語の説明が開く。また、日本語 coreutils マニュアルの任意のページ
18514 から coreutils-ja の他のノードへ直接飛ぶ場合も (ノードは、ほぼ章や節に
18515 相当する)、@kbd{g} キーを押してから、@kbd{chmod invocation} などとノード名を
18516 打ち込み、リターンキーを押せばよい。@kbd{m} の場合はタブやスペースで、
18517 @kbd{g} の場合はタブで、文字列の補完ができる。(たぶん coreutils-ja.info の
18518 パッケージには、README.ja というファイルが含まれていると思う。その
18519 「2.1 日本語 info マニュアルの呼び出し方」という節にもう少し詳しい
18520 説明を書いておいたので、ご覧になっていただきたい。)
18521
18522 ここで、日本語の info マニュアルを使用するときの問題点を挙げておく。
18523
18524 @enumerate
18525 @item
18526 @command{info} コマンドは、日本語の行末表示が上手ではない。そのため、
18527 行末に余計な文字が入ることがある。そうしたときは、@kbd{C-l} を押して 
18528 (Ctrl と l (エル) キーを同時に押す)、画面の再描画を行っていただき
18529 たい。表示が正常になるはずである。Emacs の info リーダーでは、この
18530 問題はめったに起きない。
18531
18532 @item
18533 現在のところ、@command{info} コマンドでは、@kbd{s} や @kbd{/} で日本語の単語を検索
18534 できないようだ。@kbd{C-s} による日本語の検索は、単語によっては成功する
18535 こともあるが、''Unknown command'' で失敗することもあり、これもあまり
18536 頼りにならない。それに対して、Emacs の info リーダーでは、@kbd{s} でも 
18537 @kbd{C-s} でも日本語の検索ができる。
18538
18539 @item
18540 coreutils の info のこの翻訳では、インデックスの日本語化まで手が
18541 回らなかった。そのため、インデックスは英語のままである。
18542
18543 @item
18544 古めの Emacs でこの翻訳を読もうとすると、文字化けするかもしれない。
18545 回避法があるのかもしれないが、訳者にはわからなかった。
18546 @end enumerate
18547
18548 この翻訳の最初の版は、coreutils-8.20 所収の texinfo ファイルを元に、
18549 Linux JM project のために訳者が新たに翻訳したものだった。以下に、
18550 そのときの後書きをほぼそのまま載せておく。
18551
18552 この info マニュアルの原文は、本文の「序」でも述べているように、
18553 各プログラムの man ページを統合し、増補・改訂したものである。この info 
18554 マニュアルがまとめられるにともない、公式の man ページの方はコマンドの 
18555 @samp{--help} オプションで見ることができるものとほぼ同文の、簡単な内容の
18556 ものになった。
18557
18558 従来どおりの詳しい man ページを希望する人たちも存在した。そのために
18559 作られたのが、gnumaniak の man ページであり、従来の man ページを info 
18560 の情報で増補したものだったが、現在では保守されていないようだ。
18561
18562 作成の経緯がそうしたものなので、この info マニュアルの原文には、
18563 gnumaniak の man ページの原文とほとんど内容が同じものがある。翻訳作業
18564 に当たっては、すべての項目について gnumaniak の man ページの翻訳を
18565 参考にした。あちらの訳文の方がよくできている項目もある (gnumaniak の
18566 翻訳は @uref{http://linuxjm.osdn.jp/html/gnumaniak/man1/} にある)。
18567
18568 この翻訳は、Linux JM project の gnumaniak の翻訳に多くを負っている。
18569 そこで、まず、gnumaniak の翻訳者の方々 --- 中野武雄、佐藤裕一、
18570 白方健太郎、Kazuyuki Tanisako、Omo Kazuki の諸氏にお礼を申し上げる。
18571
18572 訳文を見直す際には、西尾太さんが以前翻訳なさった coreutils-5.2.1 の 
18573 info を参考にした。また、当然ながら、新しい man ページ (こちらの
18574 翻訳者は、たぶん Yasuaki Taniguchi さんと Akihiro MOTOKI さん) とも、
18575 できるだけ突き合わせた。西尾さん、Taniguchi さん、元木さんにもお礼を
18576 申し上げる。
18577
18578 gnumaniak や coreutils の man や info の翻訳をなさった方で、私が
18579 お名前を挙げ忘れた方がいらっしゃるかもしれない。お知らせくだされば、
18580 追加訂正する。
18581
18582 訳文には間違った箇所がたくさんあると思う。そのへんは、ご寛恕いただき
18583 たい。皆さんがこの訳文を叩き台にして、増補・改訂・改訳を続け、より
18584 新しく、よりわかりやすい、そして、より正確な coreutils の翻訳を作って
18585 くだされば、最初の翻訳者としてそれにまさる喜びはない。
18586
18587 2014-10-07 訳者
18588
18589 [翻訳履歴]
18590
18591 @itemize @bullet
18592 @item
18593 2014-03-15@*
18594 coreutils-8.20 を翻訳    by 長南洋一@*
18595 ptx, tsort, chcon, runcon は未訳
18596
18597 @item
18598 2014-11-25@*
18599 coreutils-8.22 を元に増補・改訂    by 長南洋一@*
18600 numfmt, ptx, tsort, chcon, runcon を翻訳
18601
18602 @item
18603 2016-05-29@*
18604 numfmt の章の構成を修正。訳文の訂正と細かい変更    by 長南洋一
18605 @end itemize
18606
18607 @node GNU Free Documentation License
18608 @appendix GNU Free Documentation License
18609
18610 @include fdl.texi
18611
18612 @node Concept index
18613 @unnumbered Index
18614
18615 @printindex cp
18616
18617 @bye
18618
18619 @c Local variables:
18620 @c texinfo-column-for-description: 32
18621 @c End: