OSDN Git Service

info/GNU-coreutils: some corrections in the du section.
[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} の累乗倍 (訳注: 10^3 倍、10^6 倍など)
962 を示す場合は、SI (国際単位系) の単位の前に付ける接頭辞 (prefix) の上位
963 互換であり、@samp{2} の累乗倍 (訳注: 2^10 倍、2^20 倍など) を示す場合は、
964 ISO/IEC 80000-13 (以前は IEC 60027-2 だった) の接頭辞の上位互換である。
965 単位の前に付ける接頭辞については、次の URL を参照していただきたい。@*
966 @uref{http://www.bipm.org/en/si/si_brochure/chapter3/prefixes.html, SI
967 prefixes:}.
968 @uref{http://physics.nist.gov/cuu/Units/binary.html, ISO/IEC 80000-13
969 prefixes:}.
970
971 「人間に読みやすい」書式の場合、出力するサイズの後ろに、メガバイト
972 なら @samp{M} といった、大きさを表す文字が続く。@code{BLOCK_SIZE=human-readable}
973 の方は、1024 の累乗を使うので、@samp{M} は 1,048,576 バイトを意味している。
974 @code{BLOCK_SIZE=si} も似ているが、こちらは 1000 の累乗を使用し、さらに @samp{B}
975 という文字を追加する。そこで、@samp{MB} は 1,000,000 バイトを意味すること
976 になる。
977
978 @vindex LC_NUMERIC
979 ブロックサイズの指定の先頭に @samp{'} を付けると、出力するサイズを数桁
980 ごとに区切って表示することができる。区切りに使う記号や区切りの位置は、
981 @env{LC_NUMERIC} のロケールによって決まる。たとえば、アメリカ英語のロケール
982 では、@samp{--block-size="'1kB"} と指定すれば、1234000 バイトという容量が
983 @samp{1,234} と表示されることになるだろう。デフォルトの C ロケールの場合は、
984 区切り記号が存在しないので、先頭の @samp{'} に効果はない。
985
986 ブロックサイズを指定する整数の後ろには、接尾辞を付けて、その整数の
987 何倍かを示すことができる。大きさを表す (訳注: M, G などの) 文字の後ろに
988 何も続けないときや、@samp{iB} を続けるときは、1024 の累乗倍ということである。
989 それに対して、大きさを表す文字に @samp{B} を続ける場合は、1000 の累乗倍
990 ということになる。たとえば、@samp{1M} や @samp{1MiB} は @samp{1048576} と同じであり、
991 @samp{1MB} は @samp{1000000} と同じである。
992
993 整数を前に付けずに、接尾辞だけを指定したときの動作は、@samp{1} が前に
994 付いているときとほぼ同じだが、大きさの表示が出力の後ろに付く点が違う。
995 たとえば、@samp{--block-size="kB"} は、3000 を @samp{3kB} という形で表示する。
996
997 以下の接尾辞が定義されている。@code{1Y} のような大きな量は、算術計算の
998 限界のためにお使いのコンピュータでは使用できないかもしれない。
999
1000 @table @samp
1001 @item kB
1002 @cindex kilobyte, definition of
1003 キロバイト (kilobyte): @math{10^3 = 1000} バイト。
1004 @item k
1005 @itemx K
1006 @itemx KiB
1007 @cindex kibibyte, definition of
1008 キビバイト (kibibyte): @math{2^{10} = 1024} バイト。@samp{K} も使えるのは、おまけ
1009 である。なお本来、SI の接頭辞 (訳注: すなわち @math{10^3} 倍を表す接頭辞)
1010 が @samp{k} であり、ISO/IEC 80000-13 の接頭辞 (訳注: すなわち @math{2^{10}} 倍を
1011 表す接頭辞) が @samp{Ki} だが、これまでの習慣や POSIX の用法では、@samp{KiB}
1012 の意味で @samp{k} を使っている。
1013 @item MB
1014 @cindex megabyte, definition of
1015 メガバイト (megabyte): @math{10^6 = 1,000,000} バイト。
1016 @item M
1017 @itemx MiB
1018 @cindex mebibyte, definition of
1019 メビバイト (mebibyte): @math{2^{20} = 1,048,576} バイト。
1020 @item GB
1021 @cindex gigabyte, definition of
1022 ギガバイト (gigabyte): @math{10^9 = 1,000,000,000} バイト。
1023 @item G
1024 @itemx GiB
1025 @cindex gibibyte, definition of
1026 ギビバイト (gibibyte): @math{2^{30} = 1,073,741,824} バイト。
1027 @item TB
1028 @cindex terabyte, definition of
1029 テラバイト (terabyte): @math{10^{12} = 1,000,000,000,000} バイト。
1030 @item T
1031 @itemx TiB
1032 @cindex tebibyte, definition of
1033 テビバイト (tebibyte): @math{2^{40} = 1,099,511,627,776} バイト。
1034 @item PB
1035 @cindex petabyte, definition of
1036 ペタバイト (petabyte): @math{10^{15} = 1,000,000,000,000,000} バイト。
1037 @item P
1038 @itemx PiB
1039 @cindex pebibyte, definition of
1040 ペビバイト (pebibyte): @math{2^{50} = 1,125,899,906,842,624} バイト。
1041 @item EB
1042 @cindex exabyte, definition of
1043 エクサバイト (exabyte): @math{10^{18} = 1,000,000,000,000,000,000} バイト。
1044 @item E
1045 @itemx EiB
1046 @cindex exbibyte, definition of
1047 エクスビバイト (exbibyte): @math{2^{60} = 1,152,921,504,606,846,976} バイト。
1048 @item ZB
1049 @cindex zettabyte, definition of
1050 ゼタバイト (zettabyte): @math{10^{21} = 1,000,000,000,000,000,000,000} バイト。
1051 @item Z
1052 @itemx ZiB
1053 ゼビバイト (zebibyte): @math{2^{70} = 1,180,591,620,717,411,303,424} バイト。
1054 @item YB
1055 @cindex yottabyte, definition of
1056 ヨタバイト (yottabyte): @math{10^{24} = 1,000,000,000,000,000,000,000,000} バイト。
1057 @item Y
1058 @itemx YiB
1059 ヨビバイト (yobibyte): @math{2^{80} = 1,208,925,819,614,629,174,706,176} バイト。
1060 @end table
1061
1062 @opindex -k
1063 @opindex -h
1064 @opindex --block-size
1065 @opindex --human-readable
1066 @opindex --si
1067
1068 デフォルトのブロックサイズは、コマンドに対して @option{--block-size=@var{size}}
1069 オプションを明示的に指定することで、上書きすることができる。@option{-k}
1070 オプションは、@option{--block-size=1K} と同じであり、環境変数 @env{POSIXLY_CORRECT}
1071 が設定されていないときのデフォルトである。@option{-h} オプションや @option{--human
1072 -readable} オプションは、@option{--block-size=human-readable} と同じである。
1073 @option{--si} オプションは、@option{--block-size=si} と同じだ。なお、@command{ls} コマンドの
1074 場合、@option{-k} オプションはファイルの見かけのサイズの表示に影響しないのに
1075 対し、@option{--block-size} オプションは影響することに注意していただきたい。
1076
1077 @node Floating point
1078 @section 浮動小数点数
1079 @cindex floating point
1080 @cindex IEEE floating point
1081
1082 浮動小数点数を受け取ったり、生成したりするコマンドは、下層で動いている
1083 システムの浮動小数点表現法を使用しており、丸めエラー、オーバーフローなど、
1084 浮動小数点にかかわる問題をかかえている。最近のシステムでは、ほとんど
1085 すべてが IEEE-754 の浮動小数点を採用しているので、今日では IEEE-754 の
1086 動作を想定しておけば、たいていどこでも問題がない。IEEE-754 には、正と負
1087 の無限があり、正と負のゼロを区別する。また、NaN (訳注: not a number)
1088 という特別な値を使って、ゼロをゼロで割るといった無効な演算を表現する。
1089 より詳しい情報については、デイビッド・ゴールドバーグの論文
1090 @uref{http://@/www.validlab.com/@/goldberg/@/paper.pdf, "What Every Computer
1091 Scientist Should Know About Floating-Point Arithmetic"} をご覧になるとよい。
1092
1093 @vindex LC_NUMERIC
1094 浮動小数点数をオプションやオペランドや入力として受け取るコマンドは、
1095 C の標準関数 @code{strtod} や @code{strtold} を使って、テキストを浮動小数点数に
1096 変換している。従って、そうした浮動小数点数には、@code{1.0e-34} や @code{-10e100}
1097 といった指数表現が使用できる。最近の C の実装では、16 進の浮動小数点数
1098 も使える。たとえば、@code{-0x.ep-3} といったものだが、これは @minus{}14/16 掛ける
1099 @math{2^-3} を表し、@minus{}0.109375 に等しい。小数点を表す記号が何になるかは、
1100 @env{LC_NUMERIC} のロケールによって決まる。@xref{Parsing of Floats,,, libc, The GNU C
1101 Library Reference Manual}.
1102
1103 @node Signal specifications
1104 @section シグナルの指定
1105 @cindex signals, specifying
1106
1107 @var{signal} の指定には、@samp{HUP} のようなシグナル名や @samp{1} のようなシグナル番号、
1108 それに、シグナルによって終了させられるときのプロセスの終了ステータスを
1109 使うことができる (訳注: 最後のものは、GNU coreutils の @command{kill} コマンド
1110 では使用できるが、シェルの組み込みコマンドのような、他の系統の @command{kill}
1111 では使えないかもしれない)。シグナル名は、標準的な形式でも、頭に @samp{SIG}
1112 を付けた形式でも構わない。大文字小文字は区別されない。以下に挙げる
1113 シグナル名とシグナル番号は、POSIX の規格に従っているすべてのシステムで
1114 使用できる。
1115
1116 @table @samp
1117 @item HUP
1118 1.  ハングアップ (Hangup)。
1119 @item INT
1120 2.  端末からの割り込みシグナル (Terminal interrupt)。
1121 @item QUIT
1122 3.  端末からの中止シグナル (Terminal quit)。
1123 @item ABRT
1124 6. プロセスの中断 (Process abort)。
1125 @item KILL
1126 9.  強制終了 (Kill) (キャッチすることも無視することもできない)。
1127 @item ALRM
1128 14.  アラームクロック (Alarm Clock)。
1129 @item TERM
1130 15.  終了 (Termination)。
1131 @end table
1132
1133 @noindent
1134 これ以外にもサポートされているシグナル名があるが、それに対応する
1135 シグナル番号はシステムによって様々である。POSIX 1003.1-2001
1136 に準拠しているすべてのシステムでは、以下のシグナルも使用できる。
1137
1138 @table @samp
1139 @item BUS
1140 メモリオブジェクトの未定義領域へのアクセス。
1141 @item CHLD
1142 チャイルドプロセスが終了 (terminate)、一時停止 (stop)、または再開 (continue) した。
1143 @item CONT
1144 実行が停止 (stop) しているならば、再開 (continue) する。
1145 @item FPE
1146 誤った算術演算。
1147 @item ILL
1148 不正な命令。
1149 @item PIPE
1150 読み手のないパイプへの書き出し。
1151 @item SEGV
1152 無効なメモリ参照。
1153 @item STOP
1154 実行を一時停止する (stop) (キャッチすることも無視することも
1155 できない)。
1156 @item TSTP
1157 端末からの一時停止シグナル。
1158 @item TTIN
1159 バックグラウンドプロセスが端末から読み込もうとしている。
1160 @item TTOU
1161 バックグラウンドプロセスが端末へ書き出そうとしている。
1162 @item URG
1163 高帯域幅のデータがソケットに達している。
1164 @item USR1
1165 ユーザ定義シグナル 1。
1166 @item USR2
1167 ユーザ定義シグナル 2。
1168 @end table
1169
1170 @noindent
1171 XSI 拡張に対応している POSIX 1003.1-2001 のシステムでは、以下の
1172 シグナルも使用できる。
1173
1174 @table @samp
1175 @item POLL
1176 ポーリング可能なイベント。
1177 @item PROF
1178 プロファイリング・タイマーがタイムアウトした。
1179 @item SYS
1180 不正なシステムコール。
1181 @item TRAP
1182 Trace/breakpoint トラップ。
1183 @item VTALRM
1184 バーチャル・タイマーがタイムアウトした。
1185 @item XCPU
1186 CPU 時間の上限を超過した。
1187 @item XFSZ
1188 ファイルサイズの上限を超過した。
1189 @end table
1190
1191 @noindent
1192 XRT 拡張に対応している POSIX 1003.1-2001 のシステムでは、上記以外にも、
1193 少なくとも 8 個のリアルタイム・シグナルが使用できる。すなわち、@samp{RTMIN},
1194 @samp{RTMIN+1}, @dots{}, @samp{RTMAX-1}, @samp{RTMAX} などだ。
1195
1196 @node Disambiguating names and IDs
1197 @section chown と chgrp: ユーザ名かユーザ ID かを明確にする
1198 @cindex user names, disambiguating
1199 @cindex user IDs, disambiguating
1200 @cindex group names, disambiguating
1201 @cindex group IDs, disambiguating
1202 @cindex disambiguating group names and IDs
1203
1204 @command{chown} や @command{chgrp} コマンドでは、引数として @var{owner} や @var{group}
1205 を渡す際に
1206 名前で指定しても、ID 番号で指定してもよい。この指定法が曖昧であること
1207 は明らかである。もし、ユーザ名やグループ名が数字の連続だったら、どう
1208 だろう? @footnote{環境によっては、ユーザ名に数字を使うのは、よくあることである。}
1209 コマンドはそれをユーザ名と解釈すべきだろうか? ID 番号と
1210 解釈すべきだろうか? POSIX では、「@command{chown} や @command{chgrp} は、指定された
1211 文字列をまず名前として解決することを試み、それに失敗した場合のみ、ID
1212 番号として解釈しようとすること」と規定している。この規定では、ユーザが
1213 引数として ID 番号、たとえば 42 を指定しようとすると、厄介なことになる。
1214 42 というユーザ名が存在し、それにユーザ ID として別の数字、たとえば
1215 1000 が割り当てられているといったややこしい状況でも、うまく処理でき
1216 なければならないとすると、困ったことになるのだ。単に @code{chown 42 F} を
1217 実行したのでは、ファイル @file{F} の所有者の ID 番号が 1000 になってしまう。
1218 これはユーザが意図した動作ではない。
1219
1220 GNU の @command{chown} や @command{chgrp} は、この問題に対する回避策を提供している。
1221 この回避策を使用すると、データベースの検索を省略するので、処理速度が
1222 著しく向上することがあるというおまけまである。ユーザ ID 番号やグループ
1223 ID 番号を指定する際には、その前に @samp{+} を付けさえすればよいのだ。そうする
1224 ことで、整数として解釈するように強制できるのである。
1225
1226 @example
1227 chown +42 F
1228 chgrp +$numeric_group_id another-file
1229 chown +0:+0 /
1230 @end example
1231
1232 GNU の @command{chown} や @command{chgrp} は、@samp{+} が前に付く各文字列に対してユーザ名
1233 の検索プロセスを省略する。何故なら、@samp{+} を含む文字列が有効なユーザ名や
1234 グループ名であることは絶対にないからだ。この書き方は、よく使われている
1235 たいていの Unix システムで使用できるが、Solaris 10 では使用できない。
1236
1237 @node Random sources
1238 @section ランダムデータのソース
1239
1240 @cindex random sources
1241
1242 @command{shuf}, @command{shred}, @command{sort} コマンドは、作業を行うためにランダムデータを
1243 必要とすることがある。たとえば、@samp{sort -R} ではハッシュ関数をランダムに
1244 選ばねばならず、その選択のためにランダムデータを必要としている。
1245
1246 デフォルトでは、こうしたコマンドは、プログラム内部の擬似乱数ジェネ
1247 レータを、少量のエントロピーによって初期化して使用するが、
1248 @option{--random-source=@var{file}} オプションで、外部ソースを使うように指示すること
1249 も可能だ。@var{file} の中身のバイト数が不十分なときは、エラーが通知される。
1250
1251 たとえば、デバイスファイル @file{/dev/urandom} を、ランダムデータのソース
1252 として使用してもよい。通常、このデバイスは、デバイスドライバーなどのソース
1253 から環境ノイズを集めて、エントロピー・プールに入れ、そのプールを使って、
1254 ランダムなビットを生成する。プールにデータが足りない場合は、内部プールを
1255 再利用し、暗号的に安全な擬似乱数ジェネレータを使って、より多くのビットを
1256 作り出す。とは言え、このデバイスは、大量のランダムデータの生成のために
1257 設計されたものではなく、比較的動作が遅いことは、承知しておいた方がよい。
1258
1259 たいていの実用には、@file{/dev/urandom} で十分だが、プライベートなデータの
1260 高度で長期に渡る保護が必要になるアプリケーションでは、@file{/dev/random} や
1261 @file{/dev/arandom} のような他のデータソースが必要になるかもしれない。どんな
1262 データソースが利用できるかは、ご使用のオペレーティング・システム次第である。
1263
1264 前回コマンドを実行したときの結果を再現するには、何らかのランダム
1265 データをファイルに保存しておき、そのコマンドの一回目の実行でも二回目
1266 の実行でも、ランダムソースとしてそのファイルを使用すればよい。
1267
1268 @node Target directory
1269 @section 出力先ディレクトリ
1270
1271 @cindex target directory
1272
1273 通常、@command{cp}, @command{install}, @command{ln}, @command{mv}
1274 といったコマンドは、最後のオペランドが
1275 ディレクトリやディレクトリへのシンボリックリンクの場合、それを特別
1276 扱いする。たとえば、@samp{cp source dest} は、@file{dest} がディレクトリならば、
1277 @samp{cp source dest/source} と同じことである。時には、そうした動作が、
1278 ユーザが求めている動作とは違うこともある。そこで、こうしたコマンドは、
1279 よりきめ細かな制御ができるように、以下のオプションをサポートしている。
1280
1281 @table @samp
1282
1283 @item -T
1284 @itemx --no-target-directory
1285 @opindex --no-target-directory
1286 @cindex target directory
1287 @cindex destination directory
1288 最後のオペランドが、ディレクトリやディレクトリへのシンボリック
1289 リンクであっても、それを特別扱いしない。このオプションは、共有領域
1290 で作業する複数のプログラムが、競合状態にならないようにしてくれる。
1291 たとえば、@samp{mv /tmp/source /tmp/dest} というコマンドが正常終了して
1292 も、@file{/tmp/source} が @file{/tmp/dest} にリネームされたという保証はない。
1293 もし、何かほかのプロセスが @file{/tmp/dest} をディレクトリとして作成して
1294 いたら、@file{/tmp/dest/source} という名前のファイルになってしまうかも
1295 しれないのだ。それに対して、@file{mv -T /tmp/source /tmp/dest} が正常
1296 終了した場合は、@file{/tmp/source} は間違いなく @file{/tmp/dest} にリネーム
1297 されている。
1298
1299 反対に、最後のオペランドをディレクトリとして扱わせたい、それが
1300 できない場合は、エラーメッセージを出したい、ということもある。
1301 そういうときは、@option{--target-directory} (@option{-t}) オプションを使用すれば
1302 よい。(訳注: ターゲット・ディレクトリをコマンドラインの最後に置く
1303 代わりに、@option{--target-directory} オプションの引数にするということ
1304 である。)
1305
1306 @item -t @var{directory}
1307 @itemx @w{@kbd{--target-directory}=@var{directory}}
1308 @opindex --target-directory
1309 @cindex target directory
1310 @cindex destination directory
1311 @var{directory} を、出力されるファイルすべてのディレクトリ部分として
1312 使用する。
1313
1314 ほとんどのプログラムで、コマンドラインの扱いは次のようになって
1315 いる。オプションや、一定数の (0 個のこともある) 位置の固定した
1316 引数の処理が終われば、引数リストにはもう何も残っていないか、
1317 残っているとすれば、それはすべて同じように処理されることになる
1318 項目 (通常はファイル) のリストのはずある。@command{xargs} プログラムは、
1319 こうした約束ごとに沿ってうまく動くように作られている。
1320
1321 @command{mv} ファミリーのコマンドが変わっているのは、引数の数が不定であり、
1322 しかも最後の引数を特別扱いするという点である (すなわちターゲット・
1323 ディレクトリとして扱う)。そのため、ある種の作業の実行は、一筋縄では
1324 いかない。たとえば、「すべてのファイルをここから ../d/ に移動する」
1325 がそうだ。何故なら、@code{mv * ../d/} では、引数を入れておくための領域を
1326 使い切ってしまうかもしれないし、そうかと言って、@code{ls | xargs ...}
1327 には、実行対象コマンド (訳注: ここでは、@command{mv}) を起動するたびに
1328 最後の引数を特別に指定するためのすっきりした方法がないからである。
1329 (あるシェル・コマンドを駆使すれば、やることができるが、それでは、
1330 人間の労力と脳力を過当に要求することになる。)
1331
1332 @w{@kbd{--target-directory}} (@option{-t}) オプションを使用すると、@command{cp},
1333 @command{mv},
1334 @command{ln}, @command{install} といったプログラムを @command{xargs} と一緒に使うとき、
1335 たいへん都合がよい。たとえば、カレントディレクトリから、同じディ
1336 レクトリ階層にある  @code{d} ディレクトリへファイルを移動するには、
1337 こんなふうにすればよい。
1338
1339 @smallexample
1340 ls | xargs mv -t ../d --
1341 @end smallexample
1342
1343 しかし、これでは、ファイル名の先頭に @samp{.} の付くファイルが移動しな
1344 い。GNU @command{find} プログラムを使用しているなら、次のコマンドでそうした
1345 ファイルも移動させることができる。
1346
1347 @example
1348 find . -mindepth 1 -maxdepth 1 \
1349   | xargs mv -t ../d
1350 @end example
1351
1352 とは言え、上記のどちらの方法も、カレントディレクトリにファイルが
1353 一つもない場合や、空白などの特殊文字を名前に含むファイルがある場合
1354 には、うまく行かない。次の例はそうした制限を一掃しているが、GNU
1355 @command{find} と GNU @command{xargs} の両方が必要である。
1356
1357 @example
1358 find . -mindepth 1 -maxdepth 1 -print0 \
1359   | xargs --null --no-run-if-empty \
1360       mv -t ../d
1361 @end example
1362
1363 @end table
1364
1365 @noindent
1366 @option{--target-directory} (@option{-t}) オプションと
1367 @option{--no-target-directory} (@option{-T}) オプションを一緒に使うことはできない。
1368
1369 @node Trailing slashes
1370 @section 末尾のスラッシュ
1371
1372 @cindex trailing slashes
1373
1374 いくつかの GNU プログラム (少なくとも、@command{cp} と @command{mv}) では、@var{source} 引数を
1375 処理する前に、その引数の末尾にスラッシュが付いていたら、それを除去する
1376 ことができるようになっている。@w{@kbd{--strip-trailing-slashes}} オプションを
1377 使用することによって、この動作が有効になる。
1378
1379 @c FIXME: mv's behavior in this case is system-dependent
1380 これが役に立つのは、@var{source} 引数の末尾にスラッシュが付いていて、
1381 しかも、その引数がディレクトリへのシンボリックリンクを指定している
1382 かもしれないときだ。そうした状況は、実のところ、それほど珍しくない。
1383 と言うのも、シェルの中には、そうしたシンボリックリンクに対して
1384 ファイル名の補完を行うとき、末尾にスラッシュを自動的に付加するものが
1385 あるからだ。このオプションを指定しないと、たとえば @command{mv} は、(システムの
1386 rename 関数を通してだが、) 末尾にスラッシュが付いていることを、「シン
1387 ボリックリンクの参照をたどれ」という指示として解釈しなければならず、
1388 その結果、シンボリックリンクではなく、間接的に参照されているディレク
1389 トリの方をリネームしなければならなくなる。こうした動作がデフォルトに
1390 なっているのは意外に思えるかもしれないが、POSIX で要求されている動作
1391 であり、POSIX 規格のほかの部分とも首尾一貫している。
1392
1393 @node Traversing symlinks
1394 @section シンボリックリンクをたどる
1395
1396 @cindex symbolic link to directory, controlling traversal of
1397
1398 @c FIXME: note that 'du' has these options, too, but they have slightly
1399 @c different meaning.
1400 以下のオプションは、@option{--recursive} (@option{-R}) オプションも同時に指定されて
1401 いるとき、@command{chown} コマンドや @command{chgrp} コマンドがディレクトリ階層をどう
1402 たどるか、そのたどり方を変更する。以下のオプションを複数個指定した
1403 場合は、最後に指定したものだけが効果を持つ。こうしたオプションが指定
1404 しているのは、ディレクトリに対するシンボリックリンクを処理する際に、
1405 そのシンボリックリンクそのものを操作の対象にするのか、それとも、その
1406 ディレクトリ以下の階層にあるすべてのファイルを操作の対象にするのかと
1407 いうことである。
1408
1409 こうしたオプションは、@option{--dereference} や @option{--no-dereference} (@option{-h})
1410 とは、全く別のものである。あちらは、シンボリックリンクを変更するのか、
1411 それとも、その参照先を変更するのかを制御している。
1412
1413 @table @samp
1414
1415 @macro choptH
1416 @item -H
1417 @opindex -H
1418 @cindex symbolic link to directory, traverse if on the command line
1419  @option{--recursive} (@option{-R}) オプションが指定されている場合に、コマンド
1420 ラインで指定された引数がディレクトリへのシンボリックリンクならば、
1421 それをたどる。
1422 @end macro
1423 @choptH
1424
1425 @macro choptL
1426 @item -L
1427 @opindex -L
1428 @cindex symbolic link to directory, traverse each that is encountered
1429 ディレクトリ階層を再帰的にたどっている際に、ディレクトリへのシンボ
1430 リックリンクに出会ったら、必ずそれをたどる。
1431 @end macro
1432 @choptL
1433
1434 @macro choptP
1435 @item -P
1436 @opindex -P
1437 @cindex symbolic link to directory, never traverse
1438 シンボリックリンクを一切たどらない。これが、@option{-H}, @option{-L}, @option{-P} の
1439 どれも指定されていないときの、デフォルトである。
1440 @end macro
1441 @choptP
1442
1443 @end table
1444
1445
1446 @node Treating / specially
1447 @section @file{/} (ルート) を特別扱いする
1448
1449 ある種のコマンドは、ディレクトリ階層全体に対して破壊的な作用を及ぼす
1450 可能性がある。たとえば、しかるべき特権を持ったユーザが、間違えて
1451 @samp{rm -rf / tmp/junk} を実行したら、システム全体のすべてのファイルが消えて
1452 しまうかもしれないのだ。そうしたコマンドの使用が正当であることは、
1453 めったにないので、GNU の @command{rm} は、@file{/} に還元されるようないかなる
1454 ディレクトリに対しても、通常では、操作を拒否するようになっている。
1455 もし、本当にシステムのすべてのファイルを消去しようと思うのなら、
1456 @option{--no-preserve-root} オプションを使用すればよい。とは言え、ほとんどの
1457 用途で、デフォルトの動作 (明示的に指定するには、@option{--preserve-root}
1458 オプションを使う) の方が安全である。
1459
1460 @command{chgrp}, @command{chmod}, @command{chown} などのコマンドも、ディレクトリ階層全体に
1461 対して破壊的な作用を及ぼす可能性がある。従って、こうしたコマンドもまた、
1462 上記のオプションをサポートしている。こうしたコマンドは、@command{rm} とは
1463 違って、ファイルを実際に削除してしまうわけではないが、@file{/} から再帰的に
1464 働くときは、一層危険だと言うこともできる。と言うのは、たいていの場合、
1465 処理速度がずっと早いので、注意力のあるユーザがコマンドを中断できるより
1466 前に、@command{rm} の場合より、もっと多くのファイルに被害を与えてしまうからだ。
1467 Unix の習慣も POSIX の規格も、こうしたコマンドが @file{/} から再帰的に働く
1468 ことを要求している。それ故、デフォルトが @option{--no-preserve-root} になって
1469 いるのだが、こうしたコマンドは、@option{--preserve-root} オプションを使った方
1470 が、ほとんどの用途でより安全である。面倒ならば、エイリアスか、シェル関数
1471 を作って、@option{--preserve-root} を指定しておけばよいのだ。
1472
1473 また、@option{--preserve-root} を指定すると、@file{/} を指しているシンボリック
1474 リンクの参照をたどる場合でも、@command{chgrp} や @command{chown} が、@file{/} のグループや
1475 所有者を変更しなくなることも、憶えておいていただきたい。(訳注: @command{chgrp}
1476 や @command{chown} の解説を見ていただけばわかるが、これは、@option{--recursive} (@option{-R})
1477 を同時に使っているときの話である。)
1478
1479 @node Special built-in utilities
1480 @section 特殊ビルトイン・ユーティリティ
1481
1482 プログラムの中には、@command{nice} のように、ほかのプログラムを起動できるものが
1483 ある。たとえば、@samp{nice cat file} というコマンドは、コマンド @samp{cat file} を
1484 実行することによって、@command{cat} プログラムを起動する。しかしながら、@command{exit}
1485 のような特殊ビルトイン・ユーティリティ (@dfn{special built-in utilities})
1486 は、この方法で起動することができない。一例を挙げれば、@samp{nice exit} と
1487 いうコマンドは、どんな動作をするかが明確に定義されていない。終了する
1488 代わりに、エラーメッセージを出すかもしれないのだ。
1489
1490 POSIX 1003.1-2004 の規格では、特殊ビルトイン・ユーティリティとして
1491 次のものを挙げている。
1492
1493 @quotation
1494 @t{.@: : break continue eval exec exit export readonly return set shift times
1495 trap unset}
1496 @end quotation
1497
1498 たとえば、@samp{.}, @samp{:}, @samp{exec} は、特殊ビルトイン・ユーティリティなので、
1499 @samp{nice . foo.sh}, @samp{nice :}, @samp{nice exec pwd} といったコマンドの動作は、
1500 読者が予想なさるかもしれないようなものにはならない。
1501 @sp 1
1502 (訳注: exec, exit など対して、同じシェルの組み込みコマンドでも、cd,
1503 alias, fg, kill, pwd, true, umask などは、通常ビルトイン・ユーティリティ
1504 ("regular built-in utilities") と呼ばれている。もっとも、nice などから
1505 実行できないという点では、特殊ビルトイン・ユーティリティも通常ビルト
1506 イン・ユーティリティも変わりがない。nice などから起動できるとすれば、
1507 それは同名の実行ファイルが存在するからだ)。
1508
1509 多くのシェルは、上記のリストを拡張している。たとえば、bash では、
1510 @command{history} や @command{suspend} といったコマンドが特殊ビルトイン・ユーティリティ
1511 に追加されている。そこで、bash の場合、@samp{nice suspend} というコマンドを
1512 実行すると、シェルのサスペンドは起こらず、エラーメッセージが出力される。
1513
1514 @node Standards conformance
1515 @section 規格への準拠
1516
1517 @vindex POSIXLY_CORRECT
1518 GNU ユーティリティのデフォルトの動作が POSIX の規格と一致しない場合
1519 が、若干ながら存在する。そうした非互換性を抑制するには、環境変数
1520 @env{POSIXLY_CORRECT} を設定すればよい。もっとも、POSIX に準拠しているか
1521 否かを点検しているのでもないかぎり、@env{POSIXLY_CORRECT} を設定する必要は、
1522 おそらくないだろうが。
1523
1524 POSIX の新しいバージョンが、古いバージョンと非互換であることが、
1525 ときどきある。たとえば、POSIX の昔のバージョンでは、@samp{sort +1} という
1526 コマンドは、各入力行の二番目以後のフィールドに基づいて、行の並べ替えを
1527 行うことになっていた。ところが、POSIX 1003.1-2001 以降では、同じコマンド
1528 が @file{+1} という名前のファイルの行を並べ替えることになっている。そこで、
1529 フィールドに基づいた並べ替えを行うには、@samp{sort -k 2} という別のコマンド
1530 を使わなければならないのだ。
1531
1532 @vindex _POSIX2_VERSION
1533 通常 GNU のユーティリティは、お使いのシステムが規格として採用して
1534 いる POSIX のバージョンに従っている。GNU ユーティリティを POSIX の別の
1535 バージョンに準拠させるには、環境変数 @env{_POSIX2_VERSION} を設定すれば
1536 よい。この環境変数の値は、@var{yyyymm} という形式であり、その規格が何年の
1537 何月に採択されたかを示している。@env{_POSIX2_VERSION} の値としては、現在
1538 のところ、次の三つがサポートされている。すなわち、@samp{199209}, @samp{200112},
1539 @samp{200809} であり、それぞれ POSIX 1003.2-1992, POSIX 1003.1-2001, POSIX
1540 1003.1-2008 を表している。一例を挙げよう。使っているシステムが比較的
1541 新しいのに、動かしているソフトウェアが POSIX の昔のバージョンを前提と
1542 していて、@samp{sort +1} や @samp{tail +10} を使用している場合は、環境に
1543 @samp{_POSIX2_VERSION=199209} を設定することで、互換性の問題を回避する
1544 ことができる。
1545
1546 @node Output of entire files
1547 @chapter ファイル全体の出力
1548
1549 @cindex output of entire files
1550 @cindex entire files, output of
1551
1552 次のコマンドはファイル全体を読み込んで、書き出す。内容に対して何らかの
1553 変換を行うこともある。
1554
1555 @menu
1556 * cat invocation::           ファイルを結合して、書き出す。
1557 * tac invocation::           ファイルを結合し、ファイルごとに逆順で書き出す。
1558 * nl invocation::            行番号を付けて、ファイルを書き出す。
1559 * od invocation::            ファイルを 8 進数などの形式で書き出す。
1560 * base64 invocation::        データを ASCII 文字で表示可能なデータに変換する。
1561 @end menu
1562
1563 @node cat invocation
1564 @section @command{cat}: ファイルを結合して、書き出す
1565
1566 @pindex cat
1567 @cindex concatenate and write files
1568 @cindex copying files
1569
1570 @command{cat} は、各 @var{file} (@samp{-} は標準入力を意味する) を標準出力にコピーする。
1571 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1572 @sp 1
1573 書式:
1574
1575 @example
1576 cat [@var{option}] [@var{file}]@dots{}
1577 @end example
1578
1579 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1580
1581 @table @samp
1582
1583 @item -A
1584 @itemx --show-all
1585 @opindex -A
1586 @opindex --show-all
1587 @option{-vET} と同じ。
1588
1589 @item -b
1590 @itemx --number-nonblank
1591 @opindex -b
1592 @opindex --number-nonblank
1593 空行以外のすべての出力行に、1 から始まる番号を付ける。
1594
1595 @item -e
1596 @opindex -e
1597 @option{-vE} と同じ。
1598
1599 @item -E
1600 @itemx --show-ends
1601 @opindex -E
1602 @opindex --show-ends
1603 各行の末尾に @samp{$} 記号を付ける。
1604
1605 @item -n
1606 @itemx --number
1607 @opindex -n
1608 @opindex --number
1609 すべての出力行に、1 から始まる番号を付ける。このオプションは、@option{-b}
1610 が有効になっているときは、無視される。
1611
1612 @item -s
1613 @itemx --squeeze-blank
1614 @opindex -s
1615 @opindex --squeeze-blank
1616 @cindex squeezing empty lines
1617 連続する空行の表示を抑制する。すなわち、連続する複数の空行の代わりに、
1618 たった 1 行だけ空行を出力する。
1619
1620 @item -t
1621 @opindex -t
1622 @option{-vT} と同じ。
1623
1624 @item -T
1625 @itemx --show-tabs
1626 @opindex -T
1627 @opindex --show-tabs
1628 TAB 文字を @samp{^I} と表示する。
1629
1630 @item -u
1631 @opindex -u
1632 無視される。POSIX との互換のためにある。
1633
1634 @item -v
1635 @itemx --show-nonprinting
1636 @opindex -v
1637 @opindex --show-nonprinting
1638 LFD と TAB 以外の制御文字を @samp{^} 表記を使って表示する。高位ビットの
1639 セットされている文字の前には、@samp{M-} を付ける。
1640
1641 @end table
1642
1643 テキストファイルとバイナリファイルを区別する MS-DOS のようなシステム
1644 では、@command{cat} は通常、バイナリモードで読み書きを行う。しかしながら、
1645 @option{-bensAE} といったオプションの一つが使われている場合や、読み込みの
1646 対象が標準入力で、しかも、標準入力が端末である場合は、@command{cat} はテキスト
1647 モードで読み込みを行う。同様に出力においても、@option{-bensAE} といったオプ
1648 ションの一つが使用されていたり、標準出力が端末である場合は、@command{cat} は
1649 テキストモードで書き出しを行う。
1650
1651 @exitstatus
1652
1653 用例:
1654
1655 @smallexample
1656 # f の内容、標準入力、g の内容の順で出力する。
1657 cat f - g
1658
1659 # 標準入力を標準出力にコピーする。
1660 cat
1661 @end smallexample
1662
1663
1664 @node tac invocation
1665 @section @command{tac}: ファイルを結合し、ファイルごとに逆順で書き出す
1666
1667 @pindex tac
1668 @cindex reversing files
1669
1670 @command{tac} は、各 @var{file} (@samp{-} は標準入力を意味する) を、@var{file} ごとにレコード
1671 (records、デフォルトでは行) の順番を逆にして、標準出力にコピーする。
1672 @var{file} が一つも指定されていない場合は、標準入力から読み込む。
1673 @sp 1
1674 書式:
1675
1676 @example
1677 tac [@var{option}]@dots{} [@var{file}]@dots{}
1678 @end example
1679
1680 レコード (@dfn{records}) は、ある文字列 (デフォルトでは改行) が出現する
1681 ことによって区切られる。出力の際、デフォルトでは、この区切り文字列は、
1682 ファイル中でその区切り文字列の直前にあるレコードの末尾に付加される。
1683
1684 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1685
1686 @table @samp
1687
1688 @item -b
1689 @itemx --before
1690 @opindex -b
1691 @opindex --before
1692 出力の際、区切り文字列は、ファイル中でその区切り文字列の直後に来る
1693 レコードの先頭に付加される。
1694
1695 @item -r
1696 @itemx --regex
1697 @opindex -r
1698 @opindex --regex
1699 区切り文字列を正規表現として処理する。
1700
1701 @item -s @var{separator}
1702 @itemx --separator=@var{separator}
1703 @opindex -s
1704 @opindex --separator
1705 改行の代わりに、@var{separator} をレコード区切り文字列 (record separator)
1706 として使用する。
1707
1708 @end table
1709
1710 テキストファイルとバイナリファイルを区別する MS-DOS のようなシステム
1711 では、@command{tac} はバイナリモードで読み書きを行う。
1712
1713 @exitstatus
1714
1715 用例:
1716
1717 @example
1718 # ファイルを一字一字逆にする。
1719 tac -r -s 'x\|[^x]'
1720 @end example
1721
1722
1723 @node nl invocation
1724 @section @command{nl}: 行番号を付けて、ファイルを書き出す
1725
1726 @pindex nl
1727 @cindex numbering lines
1728 @cindex line numbering
1729
1730 @command{nl} は、各 @var{file} (@samp{-} は標準入力を意味する) を、全部の行、または、
1731 一部の行に行番号を付けて、標準出力に書き出す。@var{file} が一つも指定されて
1732 いない場合は、標準入力から読み込む。
1733 @sp 1
1734 書式:
1735
1736 @example
1737 nl [@var{option}]@dots{} [@var{file}]@dots{}
1738 @end example
1739
1740 @cindex logical pages, numbering on
1741 @command{nl} は、入力されたものを (論理) ページに分解する。デフォルトでは、
1742 行番号は各論理ページの先頭で 1 にリセットされる。@command{nl} は、すべての
1743 入力ファイルをまとめて、一つのドキュメントとして扱う。従って、入力
1744 ファイルが変わるたびに、論理ページや行番号がリセットされることはない。
1745
1746 @cindex headers, numbering
1747 @cindex body, numbering
1748 @cindex footers, numbering
1749 論理ページは、三つのセクションからなる。すなわち、ヘッダ、本文、
1750 フッタである。どのセクションも空であって構わない。セクションごとに
1751 他のセクションとは異なる番号付けの方式を選ぶこともできる。
1752
1753 入力ファイル中で論理ページの各セクションが始まる位置を指示するには、
1754 以下の区切り文字列の一つのみからなる行を使用する。
1755
1756 @table @samp
1757 @item \:\:\:
1758 ヘッダの先頭。
1759 @item \:\:
1760 本文の先頭。
1761 @item \:
1762 フッタの先頭。
1763 @end table
1764
1765 上記の文字列を構成する二文字は、オプションを使って (下記参照)、@samp{\}
1766 と @samp{:} の組み合わせ以外のものに、変更することができる。だが、各文字列
1767 のパターンや長さは、変えることができない。
1768
1769 セクションの区切りは、出力では空行に置き換えられる。入力ファイル中の
1770 最初のセクション区切り文字列より前にあるテキストは、いかなるテキストも、
1771 本文セクションの一部と見なされる。従って、@command{nl} は、セクションの区切りを
1772 全く含まないファイルを、一個の本文セクションとして扱う。
1773
1774 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1775
1776 @table @samp
1777
1778 @item -b @var{style}
1779 @itemx --body-numbering=@var{style}
1780 @opindex -b
1781 @opindex --body-numbering
1782 各論理ページの本文セクションにおける行の番号付けの方式を選択する。
1783 行に番号が付かない場合、行番号の現在値は増加しないが、それでも
1784 行番号の区切り文字は行の前に付く (訳注: ここで言う行番号の区切り
1785 文字 (line number separator character) とは、行番号とテキストの
1786 区切り文字ではなく、行番号を揃えるために行頭と行番号との間に
1787 置かれる空白のことらしい)。番号付けの方式には、以下のものがある。
1788
1789 @table @samp
1790 @item a
1791 すべての行に番号を振る。
1792 @item t
1793 空ではない行にのみ番号を振る (本文のデフォルト)。
1794 @item n
1795 行番号を付けない (ヘッダとフッタのデフォルト)。
1796 @item p@var{bre}
1797 基本正規表現 @var{bre} にマッチする部分を含む行にのみ番号を振る。
1798 @xref{Regular Expressions, , Regular Expressions, grep, The GNU Grep
1799 Manual}.
1800 @end table
1801
1802 @item -d @var{cd}
1803 @itemx --section-delimiter=@var{cd}
1804 @opindex -d
1805 @opindex --section-delimiter
1806 @cindex section delimiters of pages
1807 セクションの区切り文字を @var{cd} にする。デフォルトは @samp{\:}。@var{c} のみを指定
1808 すると、二番目の文字は、デフォルトと同じ @samp{:} になる。(@samp{\} などの
1809 メタ文字は、シェルが展開しないように、引用符やバックスラッシュで保護
1810 するのをお忘れなく。)
1811
1812 @item -f @var{style}
1813 @itemx --footer-numbering=@var{style}
1814 @opindex -f
1815 @opindex --footer-numbering
1816 @option{--body-numbering} と同様。
1817
1818 @item -h @var{style}
1819 @itemx --header-numbering=@var{style}
1820 @opindex -h
1821 @opindex --header-numbering
1822 @option{--body-numbering} と同様。
1823
1824 @item -i @var{number}
1825 @itemx --line-increment=@var{number}
1826 @opindex -i
1827 @opindex --line-increment
1828 行番号を @var{number} づつ増やす (デフォルトは 1)。
1829
1830 @item -l @var{number}
1831 @itemx --join-blank-lines=@var{number}
1832 @opindex -l
1833 @opindex --join-blank-lines
1834 @cindex empty lines, numbering
1835 @cindex blank lines, numbering
1836 空行にも番号を付けるとき、連続する @var{number} (デフォルトは 1) 行の
1837 空行を 1 論理行と数え、最後の空行にのみ番号を振る。連続する空行が
1838 @var{number} 行未満のときは、番号を振らない。空行というのは、文字を全く
1839 含まない、スペースやタブさえも含まない行のことである。
1840
1841 @item -n @var{format}
1842 @itemx --number-format=@var{format}
1843 @opindex -n
1844 @opindex --number-format
1845 行番号付けのフォーマットを選択する (デフォルトは @code{rn})。
1846
1847 @table @samp
1848 @item ln
1849 @opindex ln @r{format for @command{nl}}
1850 左詰めにする。先頭を 0 で埋めない。
1851 @item rn
1852 @opindex rn @r{format for @command{nl}}
1853 右詰めにする。先頭を 0 で埋めない。
1854 @item rz
1855 @opindex rz @r{format for @command{nl}}
1856 右詰めにする。先頭を 0 で埋める。
1857 @end table
1858
1859 @item -p
1860 @itemx --no-renumber
1861 @opindex -p
1862 @opindex --no-renumber
1863 論理ページの先頭で行番号をリセットしない。
1864
1865 @item -s @var{string}
1866 @itemx --number-separator=@var{string}
1867 @opindex -s
1868 @opindex --number-separator
1869 出力中で行番号とテキスト部分との区切りに @var{string} を使う (デフォルト
1870 はタブ文字)。
1871
1872 @item -v @var{number}
1873 @itemx --starting-line-number=@var{number}
1874 @opindex -v
1875 @opindex --starting-line-number
1876 論理ページごとに行番号を @var{number} から始める (デフォルトは 1)。
1877
1878 @item -w @var{number}
1879 @itemx --number-width=@var{number}
1880 @opindex -w
1881 @opindex --number-width
1882 行番号に  @var{number} 個の文字を使用する (デフォルトは 6 文字)。
1883
1884 @end table
1885
1886 @exitstatus
1887
1888
1889 @node od invocation
1890 @section @command{od}: ファイルを 8 進数などの形式で書き出す
1891
1892 @pindex od
1893 @cindex octal dump of files
1894 @cindex hex dump of files
1895 @cindex ASCII dump of files
1896 @cindex file contents, dumping unambiguously
1897
1898 @command{od} は、各 @var{file} (@samp{-} は標準入力を意味する) の内容を、曖昧さの余地がない
1899 形で標準出力に書き出す。@var{file} が一つも指定されていない場合は、標準入力
1900 から読み込む。
1901 @sp 1
1902 書式:
1903
1904 @smallexample
1905 od [@var{option}]@dots{} [@var{file}]@dots{}
1906 od [-abcdfilosx]@dots{} [@var{file}] [[+]@var{offset}[.][b]]
1907 od [@var{option}]@dots{} --traditional [@var{file}]@c
1908  [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
1909 @end smallexample
1910
1911 各出力行の構成は、入力中の位置をオフセットで表したものの後に、
1912 ファイルのデータをいくつかのまとまりに分けたものが続くという形に
1913 なっている。デフォルトでは、@command{od} はオフセットを 8 進数で表示する。
1914 ファイル・データの個々のまとまりは、入力を C 言語の @code{short int} ごとに
1915 分けたものであり、1 個の 8 進数として表示される。
1916
1917 @var{offset} を指定した場合、それは、整形と出力を始める前に、入力を
1918 何バイト読み飛ばすかを示している。デフォルトでは、@var{offset} は 8 進数と
1919 見なされるが、数字の後ろに小数点を付ければ、10 進数と見なされる。
1920 小数点が指定されず、オフセットの数字が @samp{0x} や @samp{0X} で始まっている場合
1921 は、16 進数として解釈される。もし、数字の後ろに @samp{b} が付いているなら
1922 ば、読み飛ばすバイト数は、@var{offset} に 512 を掛けたものになる。
1923 @sp 1
1924 (訳注: 数字の後ろに小数点を付けることで @var{offset} が 10 進数であること
1925 を示す方法は、現在では無効のようである。オフセットを 10 進数で指定した
1926 ければ、@option{-j} オプションを使用した方がよい。)
1927
1928 コマンドが「書式」における第一の型と第二の型のどちらとも取れるとき
1929 は、最後のオペランドが @samp{+} で始まっている場合や、オペランドが 2 個で
1930 2 番目のオペランドが数字で始まっている場合は、第二の型だと見なされる。
1931 たとえば、@samp{od foo 10} や @samp{od +10} では、@samp{10} はオフセットである。
1932 それに対して、@samp{od 10} では、@samp{10} はファイル名である。
1933
1934 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
1935
1936 @table @samp
1937
1938 @item -A @var{radix}
1939 @itemx --address-radix=@var{radix}
1940 @opindex -A
1941 @opindex --address-radix
1942 @cindex radix for file offsets
1943 @cindex file offset radix
1944 ファイル・オフセットの表示に使う基数を選択する。@var{radix} には、
1945 以下の一つが使える。
1946
1947 @table @samp
1948 @item d
1949 10 進数
1950 @item o
1951 8 進数
1952 @item x
1953 16 進数
1954 @item n
1955 なし (オフセットを表示しない)
1956 @end table
1957
1958 デフォルトは 8 進数である。
1959
1960 @item -j @var{bytes}
1961 @itemx --skip-bytes=@var{bytes}
1962 @opindex -j
1963 @opindex --skip-bytes
1964 整形と出力を行う前に、入力を @var{bytes} バイト読み飛ばす。@var{bytes} が @samp{0x}
1965 や @samp{0X} で始まっている場合は、16 進数と見なされる。@samp{0} のみで
1966 始まっている場合は、8 進数だ。どちらでもない場合は、10 進数である。
1967 @multiplierSuffixes{bytes}
1968
1969 @item -N @var{bytes}
1970 @itemx --read-bytes=@var{bytes}
1971 @opindex -N
1972 @opindex --read-bytes
1973 入力から最大で @var{bytes} バイト出力する。@code{bytes} に接頭辞や接尾辞を
1974 付けると、@option{-j} オプションの場合と同じように解釈される。
1975
1976 @item -S @var{bytes}
1977 @itemx --strings[=@var{bytes}]
1978 @opindex -S
1979 @opindex --strings
1980 @cindex string constants, outputting
1981 通常の出力はせず、文字列定数 (@dfn{string constants}) のみを出力する。
1982 すなわち、@var{bytes} バイト以上の連続する ASCII 表示文字で、ゼロバイト
1983 (ASCII NUL) が続くものを出力するわけだ。@var{bytes} に接頭辞や接尾辞を
1984 付けると、@option{-j} オプションの場合と同じように解釈される。
1985
1986 @option{--strings} に続く @var{bytes} が省略された場合、デフォルトは 3 である。
1987
1988 @item -t @var{type}
1989 @itemx --format=@var{type}
1990 @opindex -t
1991 @opindex --format
1992 ファイルデータの出力形式を選択する。@var{type} は、1 個以上の下記の形式
1993 指定文字からなる文字列である。一つの @var{type} 文字列に複数の形式指定
1994 文字が含まれている場合や、このオプションを複数回使用した場合は、@command{od}
1995 は出力行ごとに、指定された各データ形式で表現したその行を、指定された
1996 順番で書き出す。
1997
1998 どんな形式指定であれ、その最後に ``z'' を付けると、形式指定によって
1999 生成された出力行の後ろに、表示可能文字を 1 バイト文字によって表現
2000 したものが、出力される。
2001
2002 @table @samp
2003 @item a
2004 文字の名称 (訳注: たとえば、A は A、改行文字は nl)。最上位
2005 ビットは無視する。
2006 @item c
2007 表示可能な 1 バイト文字、C 言語のバックスラッシュ・
2008 エスケープ、あるいは 3 桁の 8 進数。
2009 @item d
2010 符号付き 10 進数
2011 @item f
2012 浮動小数点数 (@pxref{Floating point})
2013 @item o
2014 8 進数
2015 @item u
2016 符号なし 10 進数
2017 @item x
2018 16 進数
2019 @end table
2020
2021 @code{a} 形式の出力では、空白文字は @samp{sp}、改行文字は @samp{nl}、ゼロバイトは
2022 @samp{nul} といった具合に表現される。このとき、各バイトの下位 7 ビット
2023 のみが使われ、最上位ビットは無視される。@code{c} 形式の出力では、上記の
2024 例は、それぞれ @samp{ }、@samp{\n}、@code{\0} になる。
2025
2026 @cindex type size
2027 @samp{a} と @samp{c} 形式を除き、形式指定文字の後ろに 10 進数の整数を続ける
2028 ことによって、入力データの各数値を読み込んで、指定されたデータ形式に
2029 変換して行く際に、何バイトづつ使用するかを指定することができる。
2030 あるいは、形式指定文字の後ろに以下の文字の一つを続けることによって、
2031 C コンパイラの組み込みデータ型のいづれかのサイズを指定することも
2032 可能だ。すなわち、整数 (@samp{d}, @samp{o}, @samp{u}, @samp{x}) に対しては、以下を
2033 後置する。
2034
2035 @table @samp
2036 @item C
2037 char
2038 @item S
2039 short
2040 @item I
2041 int
2042 @item L
2043 long
2044 @end table
2045
2046  浮動小数点数 (@code{f}) に対しては、次のものが使用できる。
2047
2048 @table @asis
2049 @item F
2050 float
2051 @item D
2052 double
2053 @item L
2054 long double
2055 @end table
2056
2057 @item -v
2058 @itemx --output-duplicates
2059 @opindex -v
2060 @opindex --output-duplicates
2061 連続する行が同一であっても出力する。デフォルトでは、出力する行が、
2062 二行以上連続して全く同一になりそうな場合、@command{od} は最初の行だけを
2063 出力し、次の行にはアステリスクのみを置いて、二行目以下を省略した
2064 ことを示す。
2065
2066 @item -w[@var{n}]
2067 @itemx --width[=@var{n}]
2068 @opindex -w
2069 @opindex --width
2070 1 出力行当たり、@code{n} バイトの入力をダンプする。この値は、指定した
2071 各出力形式に結び付いているサイズの最小公倍数の倍数でなければ
2072 ならない。
2073
2074 このオプションが全く指定されないときのデフォルトは 16 である。
2075 このオプションが @var{n} なしで指定されたときのデフォルトは 32 である。
2076
2077 @end table
2078
2079 以下に挙げるいくつかのオプションは、形式指定の簡易版である。GNU @command{od}
2080 では、形式指定オプションと簡易版オプションをどのように組み合わせても
2081 構わない。こうしたオプションは、累加されていく。
2082
2083 @table @samp
2084
2085 @item -a
2086 @opindex -a
2087 文字の名称で出力する。@samp{-t a} と同じ。
2088
2089 @item -b
2090 @opindex -b
2091 1 バイトづつ 8 進数として出力する。@samp{-t o1} と同じ。
2092
2093 @item -c
2094 @opindex -c
2095 表示可能な 1 バイト文字か、C 言語のバックスラッシュ・エスケープ、
2096 あるいは 3 桁の 8 進数として出力する。@samp{-t c} と同じ。
2097
2098 @item -d
2099 @opindex -d
2100 2 バイトづつ符号なし 10 進数として出力する。@samp{-t u2} と同じ。
2101
2102 @item -f
2103 @opindex -f
2104 浮動小数点数として出力する。@samp{-t fF} と同じ。
2105
2106 @item -i
2107 @opindex -i
2108 10 進数の int として出力する。@samp{-t dI} と同じ。
2109
2110 @item -l
2111 @opindex -l
2112 10 進数の long int として出力する。@samp{-t dL} と同じ。
2113
2114 @item -o
2115 @opindex -o
2116 2 バイトづつ 8 進数として出力する。@option{-t o2} と同じ。
2117
2118 @item -s
2119 @opindex -s
2120 2 バイトづつ 10 進数として出力する。@option{-t d2} と同じ。
2121
2122 @item -x
2123 @opindex -x
2124 2 バイトづつ 16 進数として出力する。@samp{-t x2} と同じ。
2125
2126 @item --traditional
2127 @opindex --traditional
2128 昔の @command{od} で使用できた、オプションではない引数 @var{label} を認識する。
2129 書式は次のようになる。
2130
2131 @smallexample
2132 od --traditional [@var{file}] [[+]@var{offset}[.][b] [[+]@var{label}[.][b]]]
2133 @end smallexample
2134
2135 @noindent
2136 この書式を使用すると、ファイルは 1 個までしか指定できないが、必要
2137 なら、オフセットを示す引数や、@var{label} という、開始位置の仮アドレス
2138 を示す引数を、続けて指定することができる。引数 @var{label} は @var{offset} と
2139 全く同じように解釈されるが、出力を開始する位置の仮アドレスを指定
2140 している。仮アドレスは、通常のアドレスの後ろに、カッコで囲まれて、
2141 表示される。
2142
2143 @end table
2144
2145 @exitstatus
2146
2147 @node base64 invocation
2148 @section @command{base64}: データを表示可能データ (printable data) に変換する
2149
2150 @pindex base64
2151 @cindex base64 encoding
2152
2153 "@command{base64} はファイル、または標準入力から読み込んだデータを、base64 で
2154 エンコードした形式に変換する (あるいは、その逆を行う)。base64 で
2155 エンコードした形式は、表示可能な ASCII 文字を用いて、バイナリデータを
2156 表現する。
2157 @sp 1
2158 書式:
2159
2160 @smallexample
2161 base64 [@var{option}]@dots{} [@var{file}]
2162 base64 --decode [@var{option}]@dots{} [@var{file}]
2163 @end smallexample
2164
2165 base64 でエンコードすると、データが元のデータのほぼ 133% に増大する。
2166 base64 エンコード形式は、RFC4648 に準拠している。
2167 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc4648.txt}
2168
2169 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2170
2171 @table @samp
2172
2173 @item -w @var{cols}
2174 @itemx --wrap=@var{cols}
2175 @opindex -w
2176 @opindex --wrap
2177 @cindex wrap data
2178 @cindex column to wrap data after
2179 エンコード中に、出力が @var{cols} 文字に達したら改行する。この値は、正の
2180 整数でなければならない。
2181
2182 デフォルトでは、76 文字で改行する。改行を全く行わないようにする
2183 には、値を 0 にする。
2184
2185 @item -d
2186 @itemx --decode
2187 @opindex -d
2188 @opindex --decode
2189 @cindex Decode base64 data
2190 @cindex Base64 decoding
2191 動作モードを変更する。デフォルトの、データをエンコードするモード
2192 ではなく、データをデコードするモードになる。入力には、base64 で
2193 エンコードしたデータが期待され、出力は、エンコードする前のデータ
2194 になる。
2195
2196 @item -i
2197 @itemx --ignore-garbage
2198 @opindex -i
2199 @opindex --ignore-garbage
2200 @cindex Ignore garbage in base64 stream
2201 デコードする際、改行文字がどこに現れても、適切に処理する。デコード
2202 中に ASCII 表示可能文字以外を表すバイトが現れたら、一部壊れたデータ
2203 でもデコードできるように、それを無視する。
2204
2205 @end table
2206
2207 @exitstatus
2208
2209
2210 @node Formatting file contents
2211 @chapter ファイル内容の整形
2212
2213 @cindex formatting file contents
2214
2215 以下のコマンドは、ファイルの内容を整形し直す。
2216
2217 @menu
2218 * fmt invocation::           パラグラフに分かれたテキストを整形し直す。
2219 * numfmt invocation::        数値を整形し直す。
2220 * pr invocation::            ページ付けや段組みをしてファイルを表示する。
2221 * fold invocation::          入力行を指定された幅に合わせて折り返す。
2222 @end menu
2223
2224
2225 @node fmt invocation
2226 @section @command{fmt}: パラグラフに分かれたテキストを整形し直す
2227
2228 @pindex fmt
2229 @cindex reformatting paragraph text
2230 @cindex paragraphs, reformatting
2231 @cindex text, reformatting
2232
2233 @command{fmt} は行を折り返したり、結合したりして、出力する各行が指定された
2234 文字数に納まるように調整する。1 行のデフォルトはアスキー文字で 75 文字
2235 である。(訳注: 日本語のテキストは、通常単語を空白で区切らないので、
2236 うまく整形できない。)
2237 @sp 1
2238 書式:
2239
2240 @example
2241 fmt [@var{option}]@dots{} [@var{file}]@dots{}
2242 @end example
2243
2244 @command{fmt} は、指定された引数 @var{file} から (指定されていない場合は、標準
2245 出力から) テキストを読み込んで、標準出力に書き出す。
2246
2247 デフォルトでは、空行、単語間の空白、インデント (字下げ) は、出力でも
2248 そのまま維持される。インデントの違う入力行が連続する場合は、行の結合は
2249 行われない。タブは入力のときにスペースに展開され、出力でタブに戻される。
2250
2251 @cindex line-breaking
2252 @cindex sentences and line-breaking
2253 @cindex Knuth, Donald E.
2254 @cindex Plass, Michael F.
2255 @command{fmt} は、できるだけ文の終わりで改行しようとする。また、文の最初の
2256 単語の直後や、文の最後の単語の直前で改行するのは避けようとする。「文の
2257 終わり (@dfn{sentence break})」の定義は、パラグラフがそこで終わっているか、
2258 あるいは、単語の末尾に @samp{.?!} のどれかが付き、さらにスペースが 2 個
2259 続くか、行末が来ることである。後者の場合、ピリオドなどとスペース 2 個、
2260 あるいは行末の間にカッコや引用符が入っていてもよい。@TeX{} と同様、@command{fmt}
2261 は、どこで行を折り返すかを決める前に、パラグラフ全体を読み込む。使用して
2262 いるアルゴリズムは、Donald E. Knuth と Michael F. Plass が ``Breaking
2263 Paragraphs Into Lines'' で提示しているものに変更を加えたものである
2264 (`Software---Practice & Experience 誌'、第 11 巻 第 11 号 (November
2265 1981) 1119-1184 ページ)。
2266
2267 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2268
2269 @table @samp
2270
2271 @item -c
2272 @itemx --crown-margin
2273 @opindex -c
2274 @opindex --crown-margin
2275 @cindex crown margin
2276 クラウンマージン・モード (@dfn{Crown margin} mode) である。パラグラフの
2277 最初の 2 行のインデントはそのまま踏襲し、それに続く各行の左の余白を
2278 2 行目のインデントに揃える。
2279
2280 @item -t
2281 @itemx --tagged-paragraph
2282 @opindex -t
2283 @opindex --tagged-paragraph
2284 @cindex tagged paragraphs
2285 タグ付きパラグラフ・モード (@dfn{Tagged paragraph} mode)。クラウンマー
2286 ジン・モードに似ているが、次の点が違う。パラグラフの最初の行と
2287 二番目の行のインデントが同じ場合、最初の行は 1 行からなるパラグラフ
2288 として扱われる。
2289
2290 @item -s
2291 @itemx --split-only
2292 @opindex -s
2293 @opindex --split-only
2294 行の分割のみを行う。短い行を結合して、長い行を作ることはしない。
2295 その結果、サンプル・コードの行のような、すでに整形されたテキストを
2296 むやみに結合しないで済む。
2297
2298 @item -u
2299 @itemx --uniform-spacing
2300 @opindex -u
2301 @opindex --uniform-spacing
2302 空白の数を一定にする。すなわち、単語間の空白は 1 個に、文の間の
2303 空白は 2 個にする。
2304
2305 @item -@var{width}
2306 @itemx -w @var{width}
2307 @itemx --width=@var{width}
2308 @opindex -@var{width}
2309 @opindex -w
2310 @opindex --width
2311 出力する各行を、長くても @var{width} 文字までにする (デフォルトは 75
2312 文字。@var{goal} が指定されている場合は、@var{goal} プラス 10 文字)。
2313
2314 @item -g @var{goal}
2315 @itemx --goal=@var{goal}
2316 @opindex -g
2317 @opindex --goal
2318 とりあえず、各行を @var{goal} 文字の長さにしてみようとする。これは、
2319 デフォルトでは @var{width} より 7% 短い。
2320
2321 @item -p @var{prefix}
2322 @itemx --prefix=@var{prefix}
2323 @var{prefix} で始まる行のみを整形の対象にする (@var{prefix} の前にホワイト
2324 スペースがあってもよい)。@var{prefix} とそれに先行するホワイトスペース
2325 は、整形の際に取り除かれ、整形後に各出力行に付け直される。この
2326 オプションの用途を一つ挙げると、プログラムのコメントのような行
2327 だけを整形し、コードには手を加えないことが考えられる。
2328
2329 @end table
2330
2331 @exitstatus
2332
2333 @node numfmt invocation
2334 @section @command{numfmt}: 数値を整形し直す
2335
2336 @pindex numfmt
2337
2338 @command{numfmt} はさまざまな表記の数値を読み込んで、それを要求された形に
2339 整形し直す。一番よく使うのは、数値を人間が読みやすい形に変換する場合や、
2340 その逆を行う場合である (たとえば、@samp{4G} @expansion{} @samp{4,000,000,000})。
2341
2342 @example
2343 numfmt [@var{option}]@dots{} [@var{number}]
2344 @end example
2345
2346 @command{numfmt} は、コマンドラインで与えられた各 @var{number} を、指定された
2347 オプション (以下の節を参照) に従って変換する。@var{number} の指定がない
2348 場合は、標準入力から数値を読み込む。また、@command{numfmt} は、入力行中の
2349 特定のフィールドから数値を取り出すこともできる。その場合、列が揃う
2350 ようにパディング (訳注: フィールドの空き埋め) が行われていれば、
2351 それも適切に維持する。
2352
2353 @exitstatus
2354
2355 終了ステータスについては追加情報がある。@option{--invalid} をご覧になって
2356 いただきたい。
2357
2358 @menu
2359 * General options in numfmt::  一般オプション
2360 * Possible UNITs::             使用できる UNIT
2361 * Examples of using numfmt::   numfmt の使用例
2362 @end menu
2363
2364 @node General options in numfmt
2365 @subsection 一般オプション
2366
2367 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2368
2369 @table @samp
2370
2371 @item --debug
2372 @opindex --debug
2373 間違えた使い方をしている疑いがあるとき、それについて警告メッセージを
2374 (標準エラーに) 表示する。
2375
2376 @item -d @var{d}
2377 @itemx --delimiter=@var{d}
2378 @opindex -d
2379 @opindex --delimiter
2380 文字 @var{d} を入力フィールドの区切りとして使用する (デフォルトはホワイト
2381 スペース)。区切りにデフォルト以外の文字を使うと、自動的なパディングが
2382 行われなくなるのに注意してほしい。
2383
2384 @item --field=@var{n}
2385 @opindex --field
2386 @var{n} 番目の入力フィールドの数値を変換する (@var{n} のデフォルトは 1)。
2387
2388 @item --format=@var{format}
2389 @opindex --format
2390 浮動小数点数を表す printf 形式の @var{format} 文字列を出力の整形に
2391 使用する。文字列 @var{format} には、1 個の @samp{%f} 変換指定子が含まれて
2392 いなければならない。なお、そうしたければ、@samp{'} や @samp{-} 修飾子、
2393 あるいは、フィールド幅修飾子 (訳注: 数値) を @samp{%f} に付けることも
2394 できる。@samp{'} 修飾子は @option{--grouping} オプションを有効にし、@samp{-} 修飾子
2395 は @option{--padding} オプションを左詰めで有効に、フィールド幅修飾子は
2396 @option{--padding} オプションを右詰めで有効にする。(訳注: @samp{-} 修飾子は、
2397 数値であるフィールド幅修飾子と併せて用いなければならない。)
2398
2399 @item --from=@var{unit}
2400 @opindex --from
2401 入力された数値の大きさや桁数を @var{unit} に従って自動調整 (auto-scaling)
2402 する (訳注: 一例を挙げると、入力数値が @samp{1K} だったとき、@samp{--from=si}
2403 が指定されていれば 1000 に変換し、@samp{--from=iec} が指定されていれば
2404 1024 に変換する)。@var{unit} については、次節「使用できる UNIT」を参照
2405 していただきたい。デフォルトでは数値の大きさや桁数の調節を行わない。
2406 それはまた、入力数値に接尾辞 (たとえば、@samp{M}, @samp{G} など) が付いて
2407 いると、エラーになるということでもある。
2408
2409 @item --from-unit=@var{n}
2410 @opindex --from-unit
2411 入力の 1 単位の大きさを (すなわち、デフォルトの 1 に代えて使う
2412 大きさを) 指定する。入力する数値の 1 単位の大きさが、デフォルトの
2413 1 以外の場合に、このオプションを使用するわけだ (たとえば、入力する
2414 数値の @samp{10} が、1 単位 512 バイトの 10 単位を表している場合には、
2415 @samp{--from-unit=512} を使用する)。
2416
2417 @item --grouping
2418 @opindex --grouping
2419 現在のロケールの桁区切りルールに従って、出力する数値を数桁ごとに
2420 区切る (たとえば、3 桁ごとの区切り記号は、たいてい @samp{.} (ドット) か
2421 @samp{,} (コンマ) である)。ロケールが @samp{POSIX/C} の場合は、このオプション
2422 に効果はない。
2423
2424 @item --header[=@var{n}]
2425 @opindex --header
2426 @opindex --header=N
2427 最初の @var{n} (デフォルトは 1) 行を、いかなる変換もせずに出力する。
2428
2429 @item --invalid=@var{mode}
2430 @opindex --invalid
2431 入力エラーに出会ったときのデフォルトの動作は、ステータスコード 2 で
2432 即座に終了することである。@option{--invalid=@samp{abort}} は、このデフォルト
2433 の動作を明示的に指定することになる。@var{mode} に @samp{fail} を指定すると、
2434 変換エラーがあるごとに警告メッセージを表示して、ステータス 2 で終了
2435 する。@var{mode} が @samp{warn} の場合は、変換エラーがあっても、ステータス 0
2436 で終了する。@var{mode} が @samp{ignore} の場合は、ステータス 0 で終了する
2437 だけでなく、診断メッセージを出すことすらしない。
2438
2439 @item --padding=@var{n}
2440 @opindex --padding
2441 出力する数値が @var{n} 字分を占めるように、スペースを加えることで
2442 パディングをする。@var{n} が正の数の場合は、数値が右詰めになり、負の
2443 数の場合は、数値が左詰めになる。デフォルトでは、数値は、入力行の
2444 幅に基づいて (訳注: 詳しく言うと、入力各行の数値のあるフィールド
2445 が固定幅の場合、その幅に基づいて)、自動的に揃えられる (これが
2446 行われるのは、フィールドの区切り文字がデフォルトの場合だけである)。
2447
2448 @item --round=@var{method}
2449 @opindex --round
2450 @opindex --round=up
2451 @opindex --round=down
2452 @opindex --round=from-zero
2453 @opindex --round=towards-zero
2454 @opindex --round=nearest
2455 数値の表現を変換するときに、@var{method} に従って、数値を丸める。@var{method}
2456 には、@samp{up}, @samp{down}, @samp{from-zero} (デフォルト), @samp{towards-zero},
2457 @samp{nearest} が使用できる。(訳注: @samp{up} は切り上げ、@samp{down} は切り下げ、
2458 @samp{from-zero} はゼロから離れる方向へ、@samp{towards-zero} はゼロに近づく
2459 方向へ、@samp{nearest} は四捨五入である。)
2460
2461 @item --suffix=@var{suffix}
2462 @opindex --suffix
2463 出力する数値に @samp{SUFFIX} を付ける。また、入力する数値に @samp{SUFFIX}
2464 が付いていても、エラーにしない。
2465
2466 @item --to=@var{unit}
2467 @opindex --to
2468 出力する数値の大きさや桁数を @var{unit} に従って自動調整する。@var{unit} に
2469 ついては、次節「使用できる UNIT」を参照していただきたい。デフォルト
2470 では、数値の大きさや桁数の調節をしないので、数値を構成するすべての
2471 数字が表示されることになる。
2472
2473 @item --to-unit=@var{n}
2474 @opindex --to-unit
2475 出力の 1 単位の大きさを (すなわち、デフォルトの 1 に代えて使う
2476 大きさを) 指定する。出力する数値の 1 単位の大きさが、デフォルトの
2477 1 以外の場合に、このオプションを使用するわけだ (たとえば、1
2478 ブロック 1KB のブロック数で @samp{4,000,000} バイトを表現するには、
2479 @samp{--to=si --to-unit=1000} が使用できる)。
2480
2481 @end table
2482
2483 @node Possible UNITs
2484 @subsection 使用できる @var{unit}
2485
2486 @option{--from=UNIT} や @option{--to=UNIT} で指定する @var{unit} には、次のものを選択する
2487 ことができる。(訳注: @var{unit} の名前は、大文字ではなく、si, iec などの
2488 小文字で指定すること。)
2489
2490 @table @var
2491
2492 @item none
2493 数値の大きさや桁数の調整を行わない。入力する数値には、いかなる
2494 接尾辞も付けることができない。従って、数値の直後に文字が続くと
2495 エラーになる。出力する数値については、その数値を構成するすべての
2496 数字を表示する。
2497
2498 @item si
2499 国際単位系 (International System of Units (SI)) の規格に従って、
2500 数値の大きさや桁数を自動調整する。入力する数値には、以下の接尾辞の
2501 一つが使用できる。出力する数値については、1000 以上の値は丸められ
2502 て、以下の接尾辞の一つを付けて表示される。
2503
2504 @example
2505 @samp{K}  =>  @math{1000^1 = 10^3} (Kilo)
2506 @samp{M}  =>  @math{1000^2 = 10^6} (Mega)
2507 @samp{G}  =>  @math{1000^3 = 10^9} (Giga)
2508 @samp{T}  =>  @math{1000^4 = 10^{12}} (Tera)
2509 @samp{P}  =>  @math{1000^5 = 10^{15}} (Peta)
2510 @samp{E}  =>  @math{1000^6 = 10^{18}} (Exa)
2511 @samp{Z}  =>  @math{1000^7 = 10^{21}} (Zetta)
2512 @samp{Y}  =>  @math{1000^8 = 10^{24}} (Yotta)
2513 @end example
2514
2515 @item iec
2516 International Electronical Commission (IEC) の規格に従って、数値の
2517 大きさや桁数を自動調整する。入力する数値では、以下の接尾辞の一つが
2518 使用できる。出力する数値については、1024 以上の値は丸められて、
2519 以下の接尾辞の一つを付けて表示される。
2520
2521 @example
2522 @samp{K}  =>  @math{1024^1 = 2^{10}} (Kibi)
2523 @samp{M}  =>  @math{1024^2 = 2^{20}} (Mebi)
2524 @samp{G}  =>  @math{1024^3 = 2^{30}} (Gibi)
2525 @samp{T}  =>  @math{1024^4 = 2^{40}} (Tebi)
2526 @samp{P}  =>  @math{1024^5 = 2^{50}} (Pebi)
2527 @samp{E}  =>  @math{1024^6 = 2^{60}} (Exbi)
2528 @samp{Z}  =>  @math{1024^7 = 2^{70}} (Zebi)
2529 @samp{Y}  =>  @math{1024^8 = 2^{80}} (Yobi)
2530 @end example
2531
2532 @option{iec} を選択すると、接尾辞に (@samp{G} など) 1 文字の記号が使用される
2533 ことになるが、これは規格に完全にかなってるとは言えない。IEC の
2534 規格では (@samp{Gi} など) 2 字の記号を推奨しているからだ。しかし、実際の
2535 使用では、1 文字の表記法が普通に使われている。@option{iec-i} を指定した
2536 場合と比較していただきたい。
2537
2538 @item iec-i
2539 International Electronical Commission (IEC) の規格に従って、数値の
2540 大きさや桁数を自動調整する。入力する数値では、以下の接尾辞の一つが
2541 使用できる。出力する数値については、1024 以上の値は丸められて、
2542 以下の接尾辞の一つを付けて表示される。
2543
2544 @example
2545 @samp{Ki}  =>  @math{1024^1 = 2^{10}} (Kibi)
2546 @samp{Mi}  =>  @math{1024^2 = 2^{20}} (Mebi)
2547 @samp{Gi}  =>  @math{1024^3 = 2^{30}} (Gibi)
2548 @samp{Ti}  =>  @math{1024^4 = 2^{40}} (Tebi)
2549 @samp{Pi}  =>  @math{1024^5 = 2^{50}} (Pebi)
2550 @samp{Ei}  =>  @math{1024^6 = 2^{60}} (Exbi)
2551 @samp{Zi}  =>  @math{1024^7 = 2^{70}} (Zebi)
2552 @samp{Yi}  =>  @math{1024^8 = 2^{80}} (Yobi)
2553 @end example
2554
2555 @option{iec-i} を選択すると、接尾辞に (@samp{Gi} など) 2 文字の記号が使用
2556 されることになる。これは、IEC の規格が推奨しているとおりだが、
2557 実際の使用では、必ずしもよく使われているわけではない。@option{iec}
2558 を指定した場合と、比較していただきたい。
2559
2560 @item auto
2561 @samp{auto} は @option{--from} でしか使えない。これを選んだ場合、@samp{K},@samp{M},
2562 @samp{G},@samp{T},@samp{P},@samp{E},@samp{Z},@samp{Y} といった接尾辞が付いていれば、数値は SI
2563 の値と見なされる。接尾辞が
2564 @samp{Ki},@samp{Mi},@samp{Gi},@samp{Ti},@samp{Pi},@samp{Ei},@samp{Zi},
2565 @samp{Yi} などの場合は、数値は IEC の値と見なされることになる。
2566
2567 @end table
2568
2569 @node Examples of using numfmt
2570 @subsection @command{nunfmt} の使用例
2571
2572 1 個の数値を人間に読みやすい形に変換する (あるいは、その逆を行う)。
2573 @example
2574 $ numfmt --to=si 500000
2575 500K
2576
2577 $ numfmt --to=iec 500000
2578 489K
2579
2580 $ numfmt --to=iec-i 500000
2581 489Ki
2582
2583 $ numfmt --from=si 1M
2584 1000000
2585
2586 $ numfmt --from=iec 1M
2587 1048576
2588
2589 # '--from=auto' を使用する。M=Mega, Mi=Mebi
2590 $ numfmt --from=auto 1M
2591 1000000
2592 $ numfmt --from=auto 1Mi
2593 1048576
2594 @end example
2595
2596 @samp{SI} 表記を @samp{IEC} 表記に換算する (たとえば、ハードディスクの容量が
2597 メーカー表示では @samp{1TB} となっているが、実際に容量をチェックすると、
2598 それより少ない場合)。
2599
2600 @example
2601 $ numfmt --from=si --to=iec 1T
2602 932G
2603 @end example
2604
2605
2606 ファイルやパイプから読み込んだ入力行にある、ある一つのフィールドを
2607 変換する (ここに示す数例は、あくまでも説明のために作ったものである。
2608 実際には、@command{ls} と @command{df} のどちらにも、人間に読みやすい形式でサイズを
2609 表示するための @option{--human-readable} オプションが存在している)。
2610
2611 @example
2612 # 3 番目のフィールド (ファイルサイズ) を SI 表記で表示する
2613 $ ls -log | numfmt --field 3 --header --to=si | head -n4
2614 -rw-r--r--  1     94K Aug 23  2011 ABOUT-NLS
2615 -rw-r--r--  1    3.7K Jan  7 16:15 AUTHORS
2616 -rw-r--r--  1     36K Jun  1  2011 COPYING
2617 -rw-r--r--  1       0 Jan  7 15:15 ChangeLog
2618 (訳注: 実際には、この一番下の行は表示されず、一番上に「total @dots{} 
2619 といった行が現れるはずである。)
2620
2621 # 二番目のフィールド (サイズ) を IEC 表記で表示する
2622 $ df --block-size=1 | numfmt --field 2 --header --to=iec | head -n4
2623 File system   1B-blocks        Used  Available Use% Mounted on
2624 rootfs             132G   104741408   26554036  80% /
2625 tmpfs              794M        7580     804960   1% /run/shm
2626 /dev/sdb1          694G   651424756   46074696  94% /home
2627 @end example
2628
2629
2630 出力は @option{--padding} や @option{--format} オプションを使って加工することが
2631 できる。
2632
2633 @example
2634 # フィールド幅が 10 字になるまで空白で埋める。右詰め表示。
2635 $ du -s * | numfmt --to=si --padding=10
2636       2.5K config.log
2637        108 config.status
2638       1.7K configure
2639         20 configure.ac
2640
2641 # フィールド幅が 10 字になるまで空白で埋める。左詰め表示。
2642 $ du -s * | numfmt --to=si --padding=-10
2643 2.5K       config.log
2644 108        config.status
2645 1.7K       configure
2646 20         configure.ac
2647
2648 # @option{--format} オプションを使用して、フィールド幅が 10 文字になるまで
2649 # 空白で埋める。右詰め表示。
2650 $ du -s * | numfmt --to=si --format="%10f"
2651       2.5K config.log
2652        108 config.status
2653       1.7K configure
2654         20 configure.ac
2655
2656 # @option{--format} オプションを使用して、フィールド幅が 10 文字になるまで
2657 # 空白で埋める。左詰め表示。
2658 $ du -s * | numfmt --to=si --padding="%-10f"
2659 2.5K       config.log
2660 108        config.status
2661 1.7K       configure
2662 20         configure.ac
2663 @end example
2664
2665 桁区切りをサポートしているロケールでは、@option{--grouping} や @option{--format}
2666 オプションを使って、数値を数桁ごとに区切ることができる。ロケールが
2667 @samp{POSIX} や @samp{C} の場合は、桁区切りを指定しても、単に無視される。
2668
2669 @example
2670 $ LC_ALL=C numfmt --from=iec --grouping 2G
2671 2147483648
2672
2673 $ LC_ALL=en_US.utf8 numfmt --from=iec --grouping 2G
2674 2,147,483,648
2675
2676 $ LC_ALL=ta_IN numfmt --from=iec --grouping 2G
2677 2,14,74,83,648
2678
2679 $ LC_ALL=C numfmt --from=iec --format="==%'15f==" 2G
2680 ==     2147483648==
2681
2682 $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'15f==" 2G
2683 ==  2,147,483,648==
2684
2685 $ LC_ALL=en_US.utf8 numfmt --from=iec --format="==%'-15f==" 2G
2686 ==2,147,483,648  ==
2687
2688 $ LC_ALL=ta_IN numfmt --from=iec --format="==%'15f==" 2G
2689 == 2,14,74,83,648==
2690 @end example
2691
2692 @node pr invocation
2693 @section @command{pr}: ページ付けや段組みをしてファイルを表示する
2694
2695 @pindex pr
2696 @cindex printing, preparing files for
2697 @cindex multicolumn output, generating
2698 @cindex merging files in parallel
2699
2700 @command{pr} は、各 @var{file} (@samp{-} は標準入力を表す) を標準出力に書き出す。@var{file} が
2701 指定されていない場合は、標準入力を対象にする。その際、ページ付けを行い、
2702 指定があれば段組みをして出力する。また、すべての @var{file} を一つに統合し、
2703 1 段 1 ファイルの形式で平行して表示することもできる。(訳注: @command{pr} の
2704 日本語対応は完全ではない。とくに段組みがうまく行かない。)
2705 @sp 1
2706 書式:
2707
2708 @example
2709 pr [@var{option}]@dots{} [@var{file}]@dots{}
2710 @end example
2711
2712 @vindex LC_MESSAGES
2713 デフォルトでは、5 行のヘッダが各ページに付く。2 行の空行、日付・
2714 ファイル名・ページ番号からなる 1 行、そしてもう 2 行の空行である。
2715 5 行の空行からなるフッタも出力される。デフォルトのページ長 (@var{page_length})
2716 は 66 行なので、本文に使用されるデフォルトの行数は、56 行である。
2717 ヘッダのテキスト行は、@samp{@var{date} @var{string} @var{page}} の形を取り、@var{string} の両側に
2718 空白を入れて、行の幅がページ幅 (@var{page_width}) いっぱいになるように
2719 している。@var{date} は日付であり (詳細については、@option{--date-format} (@option{-D})
2720 オプションを参照)、@var{string} は中央揃えのヘッダ文字列 (訳注: デフォルト
2721 ではファイル名)、@var{page} はページ番号である。@var{page} という単語の綴りは、
2722 @env{LC_MESSAGES} ロケール・カテゴリによって変わってくる。デフォルトの C
2723 ロケールでは、@samp{Page @var{number}} であり、@var{number} は 10 進数のページ番号だ。
2724
2725 入力にフォームフィード (Form feed) があると、出力では改ページが行われ
2726 る。フォームフィードが続くと、白紙のページが生ずる。
2727
2728 段組みをした場合、どの段の幅も同じであり、段と段の間には任意の文字列
2729 (デフォルトはスペース) が置かれる。多段組みの出力では、@option{-J} オプション
2730 を使用しないかぎり、各行は常に @var{page_width} (デフォルトは 72) 文字までに
2731 切り詰められる (訳注: これは、各段や段間の空白などを合計した 1 行の
2732 長さが、最長でも @var{page_width} 文字までになるということであって、各段が
2733 それぞれ @var{page_width} 文字になるということではない)。1 段のみの出力では、
2734 デフォルトでは行の切り詰めは行われない。その場合でも、行の切り詰めを
2735 行うには、@option{-W} を使用する。
2736
2737 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
2738
2739 @table @samp
2740
2741 @item +@var{first_page}[:@var{last_page}]
2742 @itemx --pages=@var{first_page}[:@var{last_page}]
2743 @c The two following @opindex lines evoke warnings because they contain ':'
2744 @c The 'info' spec does not permit that.  If we use those lines, we end
2745 @c up with truncated index entries that don't work.
2746 @c @opindex +@var{first_page}[:@var{last_page}]
2747 @c @opindex --pages=@var{first_page}[:@var{last_page}]
2748 @opindex +@var{page_range}
2749 @opindex --pages=@var{page_range}
2750 表示を @var{first_page} ページから始めて、 @var{last_page} ページで終了する。
2751 @samp{:@var{last_page}} の指定を省略するのは、ファイルの最後までということで
2752 ある。スキップするページ数を計算する際、入力ファイル中にフォーム
2753 フィードがあると、そのたびに 1 ページ進むことになる。ページ番号
2754 は、@samp{+@var{first_page}} があってもなくても、同じになる。デフォルトでは、
2755 入力ファイルの最初のページからページ数を数えるからだ (表示される
2756 最初のページからではない)。行番号については @option{-N} オプションで変更す
2757 ることができる。
2758
2759 @item -@var{column}
2760 @itemx --columns=@var{column}
2761 @opindex -@var{column}
2762 @opindex --columns
2763 @cindex down columns
2764 個々の @var{file} に対して @var{column} 段に段組みした出力を生成する (デフォ
2765 ルトは 1 段)。@option{-a} オプションを使用しない場合、ページ内で本文は、
2766 段内を上から下へと進む。段が増えると、段の幅は自動的に狭くなる。
2767 ただし、@option{-W/-w} を同時に使用して、@var{page_width} を増加させている
2768 場合は、そのかぎりではない。このオプションを使うと、切り詰められる
2769 行がおそらく生じるだろう。ページごとの各段の行数は、できるだけ揃え
2770 られる。多段組みの本文出力では、オプション @option{-e} と @option{-i} が
2771 有効になる。@option{-J} オプションと一緒に使った場合は、段の整列と行の
2772 切り詰めは行われない。各行は、元の長さのまま、不定長フィールド
2773 として (free field format) 結合されるのである。その際、@option{-S} オプ
2774 ションによってフィールド・セパレータを指定することが可能だ。なお
2775 @option{-@var{column}} は、@option{-m} オプションと一緒に使用できない。
2776
2777 @item -a
2778 @itemx --across
2779 @opindex -a
2780 @opindex --across
2781 @cindex across columns
2782 個々の @var{file} を段組みで表示するとき、本文の各行が、段内を上から
2783 下へではなく、左の段から右の段へと進むようにする。@option{-@var{column}}
2784 オプションに指定する段の数は、2 以上でなければならない。行が
2785 段の幅に納まらないほど長い場合、その行は切り詰められる。
2786
2787 @item -c
2788 @itemx --show-control-chars
2789 @opindex -c
2790 @opindex --show-control-chars
2791 制御文字をハット表記 (たとえば、@samp{^G}) を使って表示する。他の非表示
2792 文字は、バックスラッシュ付きの 8 進数表記になる。@command{pr} のデフォルト
2793 では、非表示文字の表示文字化は行われない。
2794
2795 @item -d
2796 @itemx --double-space
2797 @opindex -d
2798 @opindex --double-space
2799 @cindex double spacing
2800 ダブルスペースで出力する (訳注: すなわち、行間を 1 行分あける)。
2801
2802 @item -D @var{format}
2803 @itemx --date-format=@var{format}
2804 @cindex time formats
2805 @cindex formatting times
2806 ヘッダの日付を @var{format} を用いて整形する。@var{format} には、コマンド
2807 @samp{date +@var{format}} で使うのと同じ指定法が使用できる。@xref{date invocation}.
2808 @samp{%} で始まる日時の指定を除いて、@var{format} 中の文字は
2809 そのまま表示される。従って、このオプションを使用すれば、ヘッダの
2810 日付の位置に任意の文字列を指定することもできるわけだ。たとえば、
2811 @option{--date-format="Monday morning"} といった具合に。
2812
2813 @vindex POSIXLY_CORRECT
2814 @vindex LC_TIME
2815 デフォルトの日付書式は @samp{%Y-%m-%d %H:%M} という形である (たとえば、
2816 @samp{2001-12-04 23:59})。だが、環境変数 @env{POSIXLY_CORRECT} が設定され、
2817 しかも @env{LC_TIME} ロケール・カテゴリが POSIX ロケールを指定して
2818 いる場合は、デフォルトの書式は @samp{%b %e %H:%M %Y} になる (たとえば、
2819 @samp{Dec@ @ 4 23:59 2001})。
2820
2821 @vindex TZ
2822 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
2823 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
2824 いない場合は、システムのデフォルトのルールに従って表示される。
2825 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
2826 The GNU C Library Reference Manual}.
2827
2828 @item -e[@var{in-tabchar}[@var{in-tabwidth}]]
2829 @itemx --expand-tabs[=@var{in-tabchar}[@var{in-tabwidth}]]
2830 @opindex -e
2831 @opindex --expand-tabs
2832 @cindex input tabs
2833 入力の際にタブをスペースに展開する。省略できる引数 @var{in-tabchar} は、
2834 入力で使われるタブ文字である (デフォルトは TAB 文字)。これも省略
2835 できる二番目の引数 @var{in-tabwidth} は、入力で使われるタブ文字の幅で
2836 ある。(デフォルトは 8 桁)。
2837
2838 @item -f
2839 @itemx -F
2840 @itemx --form-feed
2841 @opindex -F
2842 @opindex -f
2843 @opindex --form-feed
2844 複数個の改行文字ではなく、1 個のフォームフィードを使用して、出力
2845 する各ページを分離する。このオプションによって、66 行というデフォ
2846 ルトのページの長さが変わることはない。
2847
2848 @item -h @var{header}
2849 @itemx --header=@var{header}
2850 @opindex -h
2851 @opindex --header
2852 ヘッダのファイル名の部分を、中央揃えの @var{header} という文字列で置き換
2853 える。シェル上では、@var{header} はクォートするべきである。また、@option{-h}
2854 との間に空白を入れた方がよい。
2855
2856 @item -i[@var{out-tabchar}[@var{out-tabwidth}]]
2857 @itemx --output-tabs[=@var{out-tabchar}[@var{out-tabwidth}]]
2858 @opindex -i
2859 @opindex --output-tabs
2860 @cindex output tabs
2861 出力の際にスペースをタブで置き換える。省略できる引数 @var{out-tabchar}
2862 は、出力で使われるタブ文字である (デフォルトは TAB 文字)。これも
2863 省略できる二番目の引数 @var{out-tabwidth} は、出力で使われるタブ文字の
2864 幅である (デフォルトは 8 桁)。
2865
2866 @item -J
2867 @itemx --join-lines
2868 @opindex -J
2869 @opindex --join-lines
2870 長い行は長いまま結合する。段組みオプション @option{-@var{column}}, @option{-a -@var{column}},
2871 @option{-m} と併せて使用する。@option{-W/-w} による行の切り詰めが無効になる。段の
2872 整列も行わなくなる。@option{--sep-string[=@var{string}]} と併せて使ってもよい。
2873 @option{-J} というオプションが (@option{-W} や @option{--sep-string} とともに) 新たに
2874 設けられたのは、@option{-w} や @option{-s} という、前からある (POSIX に準拠した)
2875 オプションを 3 種の段組みオプションと組み合わせて使ったときの混乱を
2876 解消するためである。
2877
2878
2879 @item -l @var{page_length}
2880 @itemx --length=@var{page_length}
2881 @opindex -l
2882 @opindex --length
2883 1 ページの行数を、ヘッダ行 (及び フッタ行) を含めて、@var{page_length}
2884 行にする (デフォルトは 66 行)。@var{page_length} が 10 行以下だったら、
2885 @option{-t} オプションが指定されたかのように、 ヘッダとフッタは省略する。
2886
2887 @item -m
2888 @itemx --merge
2889 @opindex -m
2890 @opindex --merge
2891 すべての @var{file} を統合し、各段に 1 ファイルを割り当てて、平行表示
2892 する。長すぎて段に納まらない行があれば、@option{-J} オプションが使用
2893 されていないかぎり、切り詰めが行われる。@option{--sep-string[=@var{string}]} を
2894 指定してもよい。いづれかの @var{file} に (フォームフィードの指定により)
2895 空白のページが存在すると、空白の段が生ずるが、それでも段を分離する
2896 記号の @var{string} は表示される。すなわち、統合されたファイルの最初から
2897 最後まで、行番号と (訳注: これはもちろん、@option{-n} オプションが指定され
2898 ている場合) 段の分離記号は、連続して表示されるわけだ。ただし、統合
2899 されたページのどの段も空白の場合は、分離記号も行番号も表示されない。
2900 デフォルトのヘッダは、@samp{@var{date} @var{page}} という形式になり、中央には空白が
2901 挿入される。@option{-h} や @option{--header} オプションを @option{-m} と一緒に使えば、
2902 この中央の空白部分に文字列を入れることができる。
2903
2904 @item -n[@var{number-separator}[@var{digits}]]
2905 @itemx --number-lines[=@var{number-separator}[@var{digits}]]
2906 @opindex -n
2907 @opindex --number-lines
2908 @var{digits} の幅の行番号を表示する (@var{digits} のデフォルトは 5 桁)。通常の
2909 多段組みの出力では、行番号は、各段ごとに本文の最初の @var{digits} 桁分の
2910 位置を占めるが、@option{-m} の出力の場合は、各行の先頭だけに表示される。
2911 1 段組みでは、@option{-m} の場合と同様、各行の先頭に付く。デフォルトでは、
2912 行数は、入力ファイルの最初の行から数え始める (表示される最初の行
2913 からではない。@option{--page} や @option{-N} オプションを参照)。省略可能な引数
2914 @var{number-separator} は、行番号の後ろに付けて、後に続く本文と区別する
2915 ための文字であり、デフォルトのセパレータはタブ文字である。厳密に
2916 言うと、常にタブが表示されるのは、1 段組みの出力のときだけである。
2917 タブの幅は、本来タブの現れる位置によって変化し、たとえば、@option{-o}
2918 オプションで指定される左の余白 (@var{margin}) によって変わってくるもの
2919 である。しかし、多段組みの出力では、「出力される段の幅が同じになる」
2920 ことが優先されるため (POSIX の仕様)、タブの幅は、最初の段における
2921 値に固定され、左の余白の値が変わっても、変化することはない。従って、
2922 @var{number-separator} であるタブの位置には、常に一定数のスペースが表示
2923 されることになる。スペースをタブに置き換えるかどうかは、出力される
2924 位置次第である。
2925
2926 @item -N @var{line_number}
2927 @itemx --first-line-number=@var{line_number}
2928 @opindex -N
2929 @opindex --first-line-number
2930 表示される最初のページの最初の行を @var{line_number} として行を数えて
2931 行く (入力ファイルの最初の行以外から表示を始めるときによく使う)。
2932
2933 @item -o @var{margin}
2934 @itemx --indent=@var{margin}
2935 @opindex -o
2936 @opindex --indent
2937 @cindex indenting lines
2938 @cindex left margin
2939 スペース @var{margin} 個分の余白で各行をインデントする (デフォルトは、
2940 スペース 0 個)。ページの横幅は、@option{-W/-w} で指定した @var{page_width} と
2941 余白を合計したサイズになる。行番号付きの 1 段組み出力では、行から
2942 少しはみ出す文字が生ずるかもしれない (@option{-n} オプション参照)。
2943
2944 @item -r
2945 @itemx --no-file-warnings
2946 @opindex -r
2947 @opindex --no-file-warnings
2948 引数 @var{file} がオープンできないときも、警告メッセージを表示しない
2949 (終了ステータスは、それでもやはり 0 以外になる)。
2950
2951 @item -s[@var{char}]
2952 @itemx --separator[=@var{char}]
2953 @opindex -s
2954 @opindex --separator
2955 段と段の区切りに 1 個の文字 @var{char} を使う。@option{-s} オプションを
2956 指定したときのデフォルトの @var{char} は、@option{-w} オプションを同時に
2957 指定しなければタブ、指定すれば「なし」である。なお、@option{-s}
2958 オプションを指定しない場合のデフォルトのセパレータはスペースだ。
2959 @option{-s[char]} オプションを使用すると、@option{-w} も同時に指定しないかぎり、
2960 3 種の段組みオプション (@option{-COLUMN}|@option{-a -COLUMN}|@option{-m})
2961 のすべてにおいて、行の切り詰めが行われない。
2962 これは、POSIX に準拠した仕様である。
2963
2964
2965 @item -S[@var{string}]
2966 @itemx --sep-string[=@var{string}]
2967 @opindex -S
2968 @opindex --sep-string
2969 出力される段の区切りに、文字列 @var{string} を使用する。@option{-s} オプション
2970 が @option{-W/-w} オプションに影響を及ぼすのとは異なり、@option{-S} オプション
2971 は @option{-W/-w} オプションに影響を及ぼさない。また、行の切り詰めや段の
2972 整列にも影響しない。@option{-S} オプションを指定せずに、@option{-J} オプション
2973 を指定すると、@command{pr} はデフォルトの出力セパレータであるタブを使用
2974 する (訳注: @option{-J} 使用時のデフォルトということだと思う)。@option{-S} も
2975 @option{-J} も指定しない場合、@command{pr} が区切りに使用するのはスペースである
2976 (@option{-S"@w{ }"} と同じこと)。@option{-S} だけで、引数の @samp{@var{string}} を指定しないと、
2977 空文字列 (@samp{""}) を指定したことになる。
2978
2979 @item -t
2980 @itemx --omit-header
2981 @opindex -t
2982 @opindex --omit-header
2983 常とは異なり、各ページにヘッダ (とフッタ) を表示しない。また、
2984 ページの最下部を (空行やフォームフィードで) 埋めることもしない。
2985 ページ構成は行わないが、入力ファイルにあるフォームフィードは、
2986 そのままにしておく。つまり、あらかじめ決めておいたページ分割は、
2987 変わらないわけだ。@option{-t} や @option{-T} オプションは、他のオプションと
2988 組み合わせて使うと、便利なことがある。たとえば、@option{-t -e4} は、入力
2989 ファイルのタブ文字を 4 個のスペースに展開するが、それ以外何の
2990 変更も行わない。@option{-t} オプションを使用すると、@option{-h} オプションが
2991 無効になる。
2992
2993 @item -T
2994 @itemx --omit-pagination
2995 @opindex -T
2996 @opindex --omit-pagination
2997 ヘッダ (とフッタ) を表示しない。さらに、入力ファイルにあるフォーム
2998 フィードをすべて取り除く。
2999
3000 @item -v
3001 @itemx --show-nonprinting
3002 @opindex -v
3003 @opindex --show-nonprinting
3004 非表示文字をバックスラッシュ付きの 8 進数表記で表示する。
3005
3006 @item -w @var{page_width}
3007 @itemx --width=@var{page_width}
3008 @opindex -w
3009 @opindex --width
3010 本文を多段組み出力にしたときのみ、ページの幅を @var{page_width} 文字に
3011 する (@var{page_width} のデフォルトは 72 字)。多段組みで @option{-w} オプション
3012 を指定せず、@option{-s[CHAR]} オプションだけ指定すると、デフォルトの
3013 ページ幅が無効になり、行の切り詰めや段の整列も行われなくなる。
3014 すなわち、多段組みのオプションが指定されているのに、各行が、
3015 長いものは長いまま結合されてしまうのだ。なお、1 段組みの出力では、
3016 @var{page_width} の指定はできない。以上は、POSIX に準拠した仕様である。
3017
3018 @item -W @var{page_width}
3019 @itemx --page_width=@var{page_width}
3020 @opindex -W
3021 @opindex --page_width
3022 ページの幅を @var{page_width} 文字にする。この指定は、段組みオプションが
3023 あってもなくても、有効である。@option{-J} オプションを使用しないかぎり、
3024 本文の行が切り詰められる。3 種の段組みオプション (@option{-@var{column}},
3025 @option{-a -@var{column}}, @option{-m}) と組み合わせて使った場合、段の整列が常に行われる。
3026 セパレータを指定するオプションの @option{-S} や @option{-s} は、@option{-W} オプションに
3027 影響を及ぼさない。デフォルトは 72 文字である。@option{-W @var{page_width}} も
3028 なく、段組みオプションも全く指定されていない場合に、行の切り詰めが
3029 行われることは絶対にない (下位互換を維持しつつ、よく行われる作業の
3030 ほとんどに対応するために、そうなっている)。この動作は、@option{-W 72 -J}
3031 と同じである。なお、ヘッダ行が切り詰められることは絶対にない。
3032
3033 @end table
3034
3035 @exitstatus
3036
3037
3038 @node fold invocation
3039 @section @command{fold}: 入力行を指定された幅に合わせて折り返す
3040
3041 @pindex fold
3042 @cindex wrapping long input lines
3043 @cindex folding long input lines
3044
3045 @command{fold} は、各 @var{file} (@option{-} は標準入力を表す) を、長い行は折り返して、標準
3046 出力に書き出す。@var{file} が指定されていない場合は、標準入力を対象にする。
3047 (訳注: @command{fold} の日本語対応は完全ではない。出力行の長さによっては、
3048 あるいは、日本語にアルファベットが混じると、文字化けすることがある。)
3049 @sp 1
3050 書式:
3051
3052 @example
3053 fold [@var{option}]@dots{} [@var{file}]@dots{}
3054 @end example
3055
3056 デフォルトでは、@command{fold} は 80 桁よりも長い行を折り返す。出力は必要なら
3057 何行にも分割されることになる。
3058
3059 @cindex screen columns
3060 @command{fold} はデフォルトでは、画面上の桁数を数える。従って、タブは 2 桁
3061 以上に数えられるかもしれないし、バックスペースは桁数を減らすことになる。
3062 また、復帰文字 (carriage return) は、桁数を 0 にする。
3063
3064 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3065
3066 @table @samp
3067
3068 @item -b
3069 @itemx --bytes
3070 @opindex -b
3071 @opindex --bytes
3072 桁数ではなく、バイト数を数える。従って、タブ、バックスペース、復帰
3073 文字も、他の文字と全く同じように、それぞれ 1 桁を占めるものとして
3074 計算される。
3075
3076 @item -s
3077 @itemx --spaces
3078 @opindex -s
3079 @opindex --spaces
3080 単語境界で折り返す。行は、行の最大長より前にある最後の空白の後ろで
3081 折り返される。行にそうした空白がない場合は、通常通り、行の最大長で
3082 折り返される。
3083
3084 @item -w @var{width}
3085 @itemx --width=@var{width}
3086 @opindex -w
3087 @opindex --width
3088 行の最大長に 80 桁ではなく、@var{width} 桁を使用する。
3089
3090 互換性のために、@command{fold} は古い書式のオプション @option{-@var{width}} もサポート
3091 している。新しいスクリプトでは、@option{-w @var{width}} の方を使用すべきである。
3092
3093 @end table
3094
3095 @exitstatus
3096
3097
3098 @node Output of parts of files
3099 @chapter ファイルの部分出力
3100
3101 @cindex output of parts of files
3102 @cindex parts of files, output of
3103
3104 以下のコマンドは、入力の一部を出力する。
3105
3106 @menu
3107 * head invocation::          ファイルの先頭部分を出力する。
3108 * tail invocation::          ファイルの末尾部分を出力する。
3109 * split invocation::         ファイルを分割する
3110 * csplit invocation::        ファイルを内容を目印にして分割する。
3111 @end menu
3112
3113 @node head invocation
3114 @section @command{head}: ファイルの先頭部分を出力する
3115
3116 @pindex head
3117 @cindex initial part of files, outputting
3118 @cindex first part of files, outputting
3119
3120 @command{head} は、各 @var{file} の先頭部分 (デフォルトでは 10 行) を表示する。
3121 ファイルが指定されていない場合や、@var{file} として @option{-} が指定されている
3122 場合は、標準入力から読み込む。
3123 @sp 1
3124 書式:
3125
3126 @example
3127 head [@var{option}]@dots{} [@var{file}]@dots{}
3128 @end example
3129
3130 指定された @var{file} が 2 個以上あると、@command{head} は、次のような 1 行
3131 からなるヘッダを出力する。
3132
3133 @example
3134 ==> @var{file name} <==
3135 @end example
3136
3137 @noindent
3138 このヘッダは、各 @var{file} の出力の前に置かれる。
3139
3140 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3141
3142 @table @samp
3143
3144 @item -c @var{k}
3145 @itemx --bytes=@var{k}
3146 @opindex -c
3147 @opindex --bytes
3148 ファイルの先頭数行を表示する代わりに、先頭から @var{k} バイトを表示する。
3149 ただし、@var{k} が @samp{-} で始まっている場合は、各ファイルについて、末尾の
3150 @var{k} バイトを除いたすべてを表示することになる。@multiplierSuffixes{k}
3151
3152 @item -n @var{k}
3153 @itemx --lines=@var{k}
3154 @opindex -n
3155 @opindex --lines
3156 ファイルの先頭から @var{k} 行を表示する。ただし、@var{k} が @samp{-} で始まっている
3157 場合は、各ファイルについて、末尾の @var{k} 行を除いたすべてを表示すること
3158 になる。サイズの乗数接尾辞は、@option{-c} オプションの場合と同様である。
3159
3160 @item -q
3161 @itemx --quiet
3162 @itemx --silent
3163 @opindex -q
3164 @opindex --quiet
3165 @opindex --silent
3166 ファイル名を示すヘッダを出力しない。
3167
3168 @item -v
3169 @itemx --verbose
3170 @opindex -v
3171 @opindex --verbose
3172 ファイル名を示すヘッダを常に出力する。
3173
3174 @end table
3175
3176 @command{head} は、互換性を考慮して、@option{-@var{count}[@var{options}]} というオプション指定
3177 の古い書式もサポートしている。ただし、この書式が認識されるのは、最初の
3178 オプションとして指定されたときだけである。@var{count} は 10 進数であり、@option{-c}
3179 オプションの場合と同様、サイズを示す文字 (@samp{b}, @samp{k}, @samp{m}) を後ろに続けて
3180 もよく、また、行数であることを明示する @samp{l} や、ほかのオプション文字
3181 (@samp{cqv}) を続けることもできる。標準的なホストで使うことを意図したスク
3182 リプトでは、古い書式ではなく、@option{-c @var{count}} や @option{-n @var{count}} を使用するべきで
3183 ある。そのスクリプトが、古い書式にしか対応していないホストでも動作する
3184 必要がある場合は、@command{head} を使わないで済ました方が、たいていの場合
3185 簡明である。たとえば、@samp{head -5} の代わりに、@samp{sed 5q} を使用するわけだ。
3186
3187 @exitstatus
3188
3189
3190 @node tail invocation
3191 @section @command{tail}: ファイルの末尾部分を出力する
3192
3193 @pindex tail
3194 @cindex last part of files, outputting
3195
3196 @command{tail} は、各 @var{file} の末尾部分 (デフォルトでは 10 行) を表示する。
3197 ファイルが指定されていない場合や、@var{file} として @samp{-} が指定されている
3198 場合は、標準入力から読み込む。
3199 @sp 1
3200 書式:
3201
3202 @example
3203 tail [@var{option}]@dots{} [@var{file}]@dots{}
3204 @end example
3205
3206 指定された @var{file} が 2 個以上あると、@command{tail} は、以下のような 1 行
3207 からなるヘッダを出力する。
3208
3209 @example
3210 ==> @var{file name} <==
3211 @end example
3212
3213 @noindent
3214 このヘッダは、各 @var{file} の出力の前に置かれる。
3215
3216 @cindex BSD @command{tail}
3217 GNU の @command{tail} は、出力するデータの量に制限がない (ほかの系統の
3218 @command{tail} には、制限があるものもある)。また、GNU の @command{tail} には、
3219 @option{-r} オプション (逆順で表示する) が存在しない。ファイルを逆順にするのは、
3220 ファイルの末端部分を表示するのとは、全く別の仕事だからだ。BSD の @command{tail}
3221 には、@option{-r} があるが、バッファの大きさまでのファイルしか逆順にできず、
3222 それは通常 32 KiB である。ファイルを逆順にするなら、GNU の @command{tac}
3223 コマンドの方が、信頼性という点でも、用途の広さという点でも優れている。
3224
3225 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3226
3227 @table @samp
3228
3229 @item -c @var{k}
3230 @itemx --bytes=@var{k}
3231 @opindex -c
3232 @opindex --bytes
3233 ファイルの末尾数行を出力する代わりに、末尾の @var{k} バイトを出力する。
3234 ただし、@var{k} が @samp{+} で始まっている場合は、各ファイルの末端から @var{k}
3235 バイト目ではなく、先頭から @var{k} バイト目を始点として出力を開始する。
3236 @multiplierSuffixes{k}
3237
3238 @item -f
3239 @itemx --follow[=@var{how}]
3240 @opindex -f
3241 @opindex --follow
3242 @cindex growing files
3243 @vindex name @r{follow option}
3244 @vindex descriptor @r{follow option}
3245 ファイルの末端まで達しても、さらに文字を読み込もうとして、無限
3246 ループする。たぶん、ファイルのサイズが増加し続けているからである。
3247 複数のファイルが指定されている場合、@command{tail} は、異なるファイル
3248 から出力があるたびに、その出力がどのファイルから来たものかわかる
3249 ように、ヘッダを表示する。
3250
3251 このオプションを使ってファイルの追跡をするとき、二つの方法が選択
3252 できるが、その違いがわかるのは、追いかけているファイルが消去され
3253 たり、名前を変更されたりしたときだけである。もし、増大しつつある
3254 ファイルが削除されたあとでも、そのファイルの末尾の追跡を続行したい
3255 ならば、@option{--follow=descriptor} を使用すればよい。これがデフォルト
3256 の動作だが、ログファイルを追跡している際には、役に立たない。ログ
3257 ファイルは、ローテートされる (すなわち、消去、または名前を変更
3258 されてから、改めてオープンされる) 可能性があるからだ。そうした
3259 場合には、@option{--follow=name} を使用すれば、指定した名前のファイルを
3260 追跡することができる。おそらく追跡には、定期的にその名前のファイル
3261 をオープンし直すことで、何らかのプログラムによってファイルが消去
3262 されてから再作成されなかったかどうかを確かめるといった方法が、
3263 使われることだろう。なお、inotify をベースにした実装では、こうした
3264 ケースを処理するのに、ファイルを定期的に再オープンする必要がない
3265 ことを付記しておく。
3266
3267 どちらの方法を使った場合でも、追跡中のファイルのサイズが小さく
3268 なっていることがわかると、 @command{tail} は、ファイルが短縮されたという
3269 メッセージを出し、ファイルの末端と改めて判断したところからファイル
3270 の追尾を再開する。
3271
3272 ファイルが消去されたときの @command{tail} の動作は、追いかけているものが、
3273 名前か (@option{--follow=name})、ディスクリプタか (@option{--follow=descriptor})
3274 によって異なっている。名前による追跡の場合、tail はファイルが消去
3275 されたことを検出できるので、その旨メッセージを表示する。このとき、
3276 @option{--retry} も指定されていると、同じ名前のファイルが再作成されている
3277 かどうか、定期的な検査を継続して行う。ディスクリプタを追跡する場合は、
3278 ファイルが削除されたり、名前の変更が行われたりしても、tail はそれを
3279 検出しないので、メッセージを出さない。そうしたファイルが、もはや元の
3280 名前ではアクセスできなくなっていても、なお増大し続けているということ
3281 もありえる。
3282
3283 @samp{descriptor} や @samp{name} というオプションの値は、長い方のオプションの
3284 形式によってのみ指定できる。@option{-f} では指定できない。
3285
3286 オペランド @var{file} が全く指定されていず、しかも標準入力が FIFO や
3287 パイプである場合、@option{-f} オプションは無視される。また、標準入力が
3288 FIFO やパイプである場合には、@samp{-} という形で指定されたオペランドが
3289 あっても、@option{-f} はそれに対して効果を持たない。
3290
3291 カーネルが inotify をサポートしていると、出力はファイルの変更が
3292 引き金になるので、一般に反応がキビキビしている。それに対して、
3293 カーネルが inotify をサポートしていないと、@command{tail} はチェック
3294 ごとに 1 秒間スリープするので (このデフォルトを変更するには、
3295 @option{--sleep-interval=@var{n}} を使用する)、出力の反応がやや遅めに感じられ
3296 たり、断続的に感じられたりするかもしれない。inotify のサポート
3297 なしで tail を使用する場合、反応を向上させるには、sleep する間隔を
3298 1 秒以下に設定すればよい。たとえば、次のようなエイリアスを作成する
3299 わけだ。
3300
3301 @example
3302 alias tail='tail -s.1'
3303 @end example
3304
3305 @item -F
3306 @opindex -F
3307 このオプションは @option{--follow=name --retry} と同じである。すなわち、
3308 ファイルが消去された場合、tail はその名前のファイルをオープン
3309 し直そうとする。それに失敗しても、ファイルに再びアクセスできるように
3310 なるまで、再オープンを試み続ける。
3311
3312 @item --retry
3313 @opindex --retry
3314 指定された名前のファイルを繰り返し何度でもオープンしようとする。
3315 このオプションが役に立つのは、ファイルの末尾を追跡している場合が
3316 ほとんどである (それ以外の場合は、警告メッセージを出す)。
3317
3318 ファイル・ディスクリプタによって追跡している場合は (すなわち、
3319 @option{--follow=descriptor} の場合は)、このオプションは、最初に
3320 ファイルをオープンするときの動作にしか影響しない。ひとたび
3321 オープンに成功してしまえば、@command{tail} は、ファイル名ではなく、
3322 ファイル・ディスクリプタを追跡することになるからである。
3323
3324 ファイル名によって追跡している場合は (すなわち、@option{--follow=name}
3325 の場合は)、@command{tail} は、ユーザによって中断 (kill) されるまで、
3326 いつまでも繰り返しその名前のファイルを再オープンしようとする。
3327
3328 このオプションを付けないと、 @command{tail} は、ファイルが存在しなく
3329 なったり、何かほかの理由でファイルにアクセスできなくなったりする
3330 ことがあっても、その旨報告するだけで、以後再検査を行うことがない。
3331
3332 @item --sleep-interval=@var{number}
3333 @opindex --sleep-interval
3334 何秒間隔で追尾・表示動作を行うかを変更する (デフォルトは 1.0 秒
3335 間隔)。@command{tail} は動作の繰り返しごとに、指定されたすべてのファイル
3336 について、サイズが変わっていないかどうかのチェックを行う。@command{tail}
3337 の伝統的な実装では、@var{number} は整数でなければならなかったが、GNU の
3338 @command{tail} では、任意の浮動小数点数を指定することが可能になっている。
3339 @xref{Floating point}.  @command{tail} が inotify を使用していると、
3340 このポーリング関係の (polling-related) オプションは通常無視される。
3341 ただし、@option{--pid=@var{p}} も一緒に指定されている場合は別で、その場合は、
3342 プロセス @var{p} が生きているかどうかを、@command{tail} が少なくとも
3343 @var{number} 間隔でチェックすることになる。
3344
3345 @item --pid=@var{pid}
3346 @opindex --pid
3347 追跡が名前によって行われていようと、ディスクリプタによって行われて
3348 いようと、@var{file} 引数で指定されたすべてのファイルに書き込みを行う
3349 プログラムがたった一つならば、そのプログラムのプロセス番号 @var{pid}
3350 を指定することができる。そうしておくと、そのプロセスが終了する直後に
3351 tail も終了するようになるのだ。これがきちんと動作するのは、書き込み
3352 プログラムと tail のプロセスが、同じマシンで動いているときだけで
3353 ある。たとえば、プログラムをビルドするとき、その出力をファイルに
3354 保存しながら、ファイルが増大して行くのを見守りたいならば、下記の
3355 ように @command{make} と @command{tail} を実行すればよい。そうすれば、ビルドが完了
3356 したとき、tail のプロセスも終了する。このオプションを使わない
3357 場合は、@code{tail -f} のプロセスを自分で止めなければならないだろう。
3358
3359 @example
3360 $ make >& makerr & tail --pid=$! -f makerr
3361 @end example
3362
3363 使用されていない @var{pid} を指定した場合や、tail が対象とするファイルに
3364 書き込んでいるプロセスとは別のプロセスの @var{pid} を指定した場合は、
3365 @command{tail} は、@var{file} の増大が止まるずっと前に終了してしまうかもしれ
3366 ないし、実際に書き込んでいるプログラムが終了してしまっても、当分
3367 の間終了しないかもしれない。気をつけてほしいが、システムによっては、
3368 @option{--pid} が使えないことがある。その場合、@command{tail} は警告メッセージ
3369 を出すはずだ。
3370
3371 @item --max-unchanged-stats=@var{n}
3372 @opindex --max-unchanged-stats
3373 名前によってファイルの追尾を行っているとき、連続して @var{n} 回 (デフォ
3374 ルトは n=@value{DEFAULT_MAX_N_UNCHANGED_STATS_BETWEEN_OPENS})
3375 追尾動作を実行しても、その間にファイルに変更がなかった
3376 場合に、ファイルを @code{open} し、@code{fstat} して、そのファイル名と結び
3377 ついている「デバイス番号/inode 番号」の組み合わせが、今でも前と同じ
3378 ままかどうかを確認する。ローテートを行うログファイルを追跡している
3379 場合、この @var{n} は、tail がローテートする前に最後の行を表示してから、
3380 新しいログファイルに溜まっている行を表示するまでの秒数に、ほぼ等
3381 しい。このオプションに意味があるのは、ポーリングを使用して (すな
3382 わち、inotify を使わずに)、名前による追跡を行うときだけである。
3383
3384 @item -n @var{k}
3385 @itemx --lines=@var{k}
3386 @opindex -n
3387 @opindex --lines
3388 末尾の  @var{k} 行を出力する。ただし、@var{k} が @samp{+} で始まっている場合は、
3389 各ファイルの末端から @var{k} 行目ではなく、先頭から @var{k} 行目を始点として
3390 出力を開始する。サイズの乗数接尾辞は、@option{-c} の場合と同様である。
3391
3392 @item -q
3393 @itemx --quiet
3394 @itemx --silent
3395 @opindex -q
3396 @opindex --quiet
3397 @opindex --silent
3398 ファイル名を示すヘッダを出力しない。
3399
3400 @item -v
3401 @itemx --verbose
3402 @opindex -v
3403 @opindex --verbose
3404 ファイル名を示すヘッダを常に出力する。
3405
3406 @end table
3407
3408 @command{tail} は互換性のために、@samp{tail -[@var{count}][bcl][f] [@var{file}]}
3409 という古い
3410 用法もサポートしているが、それが認識されるのは、上で説明した用法と衝突
3411 しないときだけである。この旧式の書式では、オプションはただ 1 個しか指定
3412 できず、ファイルも 1 個までしか指定できない。オプション中の @var{count} は、
3413 省略可能な 10 進数であり、サイズを表す文字 (@samp{b}, @samp{c}, @samp{l}) を後ろに
3414 続けて、1 ブロック当たり 512 バイトのブロック数か、バイト数か、行数かを
3415 示すことができる。また、@option{-f} と同じ意味を持つ、@samp{f} を続けてもよい。
3416
3417 @vindex _POSIX2_VERSION
3418 古いシステムでは、旧式のオプション書式において、先頭の @samp{-} を @option{-c}
3419 や @option{-n} オプションの場合と同じ意味で @samp{+} に置き換えることができる。
3420 また、そうしたシステムでは、古い用法と標準の用法が衝突する場合には、
3421 古い用法が優先される。そうした古い動作を有効にしたり、無効にしたりする
3422 には、環境変数 @env{_POSIX2_VERSION} を使用すればよい (@pxref{Standards conformance})。
3423
3424 標準的なホストで使用するためのスクリプトでは、古い書式を使わずに、
3425 @option{-c @var{count}[b]}, @option{-n @var{count}} オプションや @option{-f}
3426 オプションの方を使うべきで
3427 ある。そのスクリプトが、古い書式にしか対応していないホストでも動作しな
3428 ければならない場合でも、問題を起こしかねない表現を避けるように書き直す
3429 ことが、たいていはできるものだ。たとえば、@samp{tail -1} の代わりに、
3430 @samp{sed -n '$p'} を使うといった具合である。それさえ不可能な場合は、どちらの
3431 書式を使うべきかを判断するために、@samp{if tail -c +1 </dev/null >/dev/null
3432 2>&1; then @dots{}} といった条件文をスクリプトで使用すればよい。
3433
3434 作成するスクリプトが標準的な動作を想定している場合でも、POSIX の
3435 バージョンによって動作に違いのある用法には、気を付けた方がよい。
3436 たとえば、@samp{tail - main.c} は避けるべきである。@samp{tail main.c} と解釈する
3437 ことも、@samp{tail -- - main.c} と解釈することもできるからだ。@samp{tail -c 4}
3438 も避けるべきである。@samp{tail -c4} を意味するかもしれないし、@samp{tail -c 10 4}
3439 を意味するかもしれない。@samp{tail +4} も使わない方がよい。@samp{tail ./+4} の
3440 意味にも、@samp{tail -n +4} の意味にも取れるからである。
3441
3442 @exitstatus
3443
3444
3445 @node split invocation
3446 @section @command{split}: ファイルを分割する。
3447
3448 @pindex split
3449 @cindex splitting a file into pieces
3450 @cindex pieces, splitting a file into
3451
3452 @command{split} は、入力ファイル @var{input} を分割して複数の出力ファイルを作成する。
3453 各出力ファイルには、@var{input} の断片が、連続した形で、あるいは 1 行づつ
3454 順番に分配された形で含まれることになる (訳注: 前者は単純な分割であり、
3455 後者は後述の「ラウンド・ロビン方式」である。@option{-n} オプションを参照)。
3456 @var{input} が指定されていない場合や、@samp{-} である場合には、標準入力から
3457 読み込む。
3458 @sp 1
3459 書式:
3460
3461 @example
3462 split [@var{option}] [@var{input} [@var{prefix}]]
3463 @end example
3464
3465 デフォルトでは、@command{split} は @var{input} を 1000 行づつ各出力ファイルに
3466 書き込む (最後の断片については、何行であれ残っている行を書き込む)。
3467
3468 @cindex output file name prefix
3469 出力ファイルの名前は、上記書式の @var{prefix} (デフォルトでは @samp{x}) に複数
3470 の文字 (デフォルトでは、@samp{aa}, @samp{ab}, @dots{}) を続けたものであり、各出力
3471 ファイルをファイル名による伝統的なソート順で結合すると、元の入力ファイル
3472 が再構成されるようになっている (ただし、@option{-nr/@var{n}} オプションを指定した場合
3473 は除く)。デフォルトでは、split はまず、作成するファイルに 2 文字からなる
3474 接尾辞 (訳注: suffix、すなわち上記の @samp{aa}, @samp{ab} など) を生成して付け、
3475 その接尾辞の 1 番目の文字がアルファベットの最後に達した時点で、接尾辞を
3476 2 文字づつ増やして行く (@samp{yz} の次は @samp{zaaa}, @samp{zaab}, @dots{} という具合)。
3477 こうした命名法を使えば、出力ファイルがいくつあっても対応できるし、また
3478 @option{--additional-suffix} オプションを付けたときでも、出力ファイルが上で
3479 述べたような順に並ぶことになるわけだ。@option{-a} オプションが指定されている
3480 場合に、出力ファイルの名前が種切れになってしまうと、@command{split} はエラー
3481 メッセージを出すが、作成した出力ファイルを消去することはない。
3482
3483 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3484
3485 @table @samp
3486
3487 @item -l @var{lines}
3488 @itemx --lines=@var{lines}
3489 @opindex -l
3490 @opindex --lines
3491 @var{input} から @var{lines} 行づつ各出力ファイルに書き込む。
3492
3493 互換性を考慮して、@command{split} は @option{-@var{lines}} という古いオプションの書式も
3494 サポートしている。新規にスクリプトを書くなら、@option{-l @var{lines}} の方を使う
3495 べきである。
3496
3497 @item -b @var{size}
3498 @itemx --bytes=@var{size}
3499 @opindex -b
3500 @opindex --bytes
3501 @var{input} から @var{size} バイトづつ各出力ファイルに書き込む。
3502 @multiplierSuffixes{size}
3503
3504 @item -C @var{size}
3505 @itemx --line-bytes=@var{size}
3506 @opindex -C
3507 @opindex --line-bytes
3508 各出力ファイルに、ファイルサイズが @var{size} バイトを超過しない範囲で、
3509 @var{input} の完全な行をできるだけ多く書き込む。1 行の長さが @var{size} バイト
3510 を越える行は、複数のファイルに分割される。@var{size} の書式は、@option{--bytes}
3511 オプションの場合と同じである。
3512
3513 @item --filter=@var{command}
3514 @opindex --filter
3515 このオプションを使用すると、各出力は、そのままファイルに書き出さ
3516 れるのではなく、パイプを通して一つづつ、指定されたシェルコマンド
3517 @var{command} に引き渡される。@var{command} 中では、環境変数 $FILE を使用する
3518 べきであり、この変数には、シェルコマンドを実行するごとに、異なる
3519 出力ファイル名が代入される。たとえば、1TiB の圧縮ファイルがあると
3520 しよう。伸長したら、サイズが大きすぎて、ディスクに納まり切らない。
3521 しかし、それを分割して、もっと扱いやすいサイズの、それぞれ圧縮した
3522 ファイルを作らねばならない。そうした課題を解決するには、次のような
3523 コマンドを実行すればよいだろう。
3524
3525 @example
3526 xz -dc BIG.xz | split -b200G --filter='xz > $FILE.xz' - big-
3527 @end example
3528
3529 圧縮率が 10:1 だとすると、上のコマンドは 20GiB のファイルを 50 個
3530 ほど生成することになるだろう。ファイルの名前は、@file{big-aa.xz},
3531 @file{big-ab.xz}, @file{big-ac.xz} などになる。
3532
3533 @item -n @var{chunks}
3534 @itemx --number=@var{chunks}
3535 @opindex -n
3536 @opindex --number
3537
3538 @var{input} を @var{chunks} 個の出力ファイルに分割する。@var{chunks} の部分には以下の
3539 ものが指定できる。
3540
3541 @example
3542 @var{n}      @var{input} の現在のサイズに基づいて @var{n} 個のファイルを生成する。
3543 @var{k}/@var{n}    @var{n} 個中の @var{k} 番目のみを標準出力へ出力する。
3544 l/@var{n}    @var{n} 個のファイルを生成する。行の途中で分割しない。
3545 l/@var{k}/@var{n}  同上。ただし、@var{n} 個中の @var{k} 番目のみを標準出力に出力する。
3546 r/@var{n}    @samp{l} に似ている。ただし、行をラウンド・ロビン方式で分配する。
3547        (訳注: トランプの親がカードを 1 枚づつ子に配るように、
3548                入力から 1 行づつ各出力ファイルに分配して行く。)
3549 r/@var{k}/@var{n}  同上。ただし、@var{n} 個中の @var{k} 番目のみを標準出力に出力する。
3550 @end example
3551
3552 @var{input} を  @var{n} 個の「部分 (chunk)」に分けたときに出た余りのバイトは、
3553 最後の「部分」に割り振られる。最初に行われる分割のための計算の後で
3554 追加されるバイトがあっても、それは捨て去られる (@samp{r} モードを使用
3555 している場合を除く)。
3556
3557 @var{input} の行数が @var{n} 行に足りなかったり、@var{input} が短縮された場合でも、
3558 @var{n} 個のファイルすべてが作成される。
3559
3560 @samp{l} モードについて言うと、「部分」の大きさは、「@var{input} サイズ / @var{n}」
3561 前後になる。@var{input} は、まず @var{n} 個の同一サイズの区画 (partition) に
3562 分割され、余りがあれば、それは最後の区画に割り当てられる。ある行の
3563 先頭が、ある区画の内側にある場合、その行は行末まで、その区画に対応
3564 するファイルに書き込まれる。行は、たとえ後続する区画にまではみ出して
3565 いても分割されないので、書き出されるファイルは、区画のサイズより
3566 大きくなることもあれば、小さくなることもある。行が後続する区画を
3567 すっぽり覆ってしまうほど長い場合には、空っぽのファイルができること
3568 さえある。
3569
3570 @samp{r} モードでは、@var{input} のサイズは問題にならない。だから、入力は、
3571 たとえば、パイプからであっても構わない。
3572
3573 @item -a @var{length}
3574 @itemx --suffix-length=@var{length}
3575 @opindex -a
3576 @opindex --suffix-length
3577 使用する接尾辞の長さを @var{length} 文字にする。@var{length} に 0 を指定する
3578 と、@option{-a} オプションを (すでに指定していた場合でも) 全く指定しな
3579 かったのと、同じことになり、従って、デフォルトの動作が有効になる。
3580 すなわち、接尾辞は、2 文字から始まり、@option{-n} や @option{--numeric-suffixes
3581 =@var{from}} オプションが指定されていないかぎり、必要になるごとに、2 文字
3582 づつ自動的に増えて行く。
3583
3584 @item -d
3585 @itemx --numeric-suffixes[=@var{from}]
3586 @opindex -d
3587 @opindex --numeric-suffixes
3588 接尾辞にアルファベットの小文字ではなく、数字を使用する。数字の接尾
3589 辞では、 @var{from} が指定されていれば @var{from} から、指定されていなければ 0
3590 から数を数えて行く。注意していただきたいが、@var{from} の値を指定すると、
3591 上で述べた接尾辞の長さを自動的に増やして行くデフォルトの機能まで無効
3592 になる。そこで、ユーザとしては、99 を越える数字を接尾辞として使える
3593 ようにするため、@option{-a} オプションも併せて指定したくなるかもしれない。
3594
3595 @item --additional-suffix=@var{suffix}
3596 @opindex --additional-suffix
3597 出力ファイル名の末尾に @var{suffix} をさらに追加する。@var{suffix} 中に
3598 スラッシュが含まれていてはならない。
3599
3600 @item -e
3601 @itemx --elide-empty-files
3602 @opindex -e
3603 @opindex --elide-empty-files
3604 サイズ 0 の出力ファイルができないようにする。そうしたものが生成
3605 されることがあるのは、@option{--number} を使ったときである。入力ファイル
3606 が (短縮されて) 指定された数の出力ファイルを作るには分量が
3607 足りなくなっている場合や、1 行が長すぎて、後続する「部分」を
3608 すっぽり飲み込んでしまっている場合などがそれに当たる。この
3609 オプションが指定されているときでも、出力ファイルの連続番号が、
3610 順番に増えていくことに変わりはない。
3611
3612 @item -u
3613 @itemx --unbuffered
3614 @opindex -u
3615 @opindex --unbuffered
3616 @option{--number r/@dots{}} モードにおいて入力を即座に出力する。このモードは、
3617 作業にかなり時間がかかるのだ。
3618
3619 @item --verbose
3620 @opindex --verbose
3621 各出力ファイルをオープンする直前に、診断メッセージを表示する。
3622
3623 @end table
3624
3625 @exitstatus
3626
3627 @option{--number} (@option{-n}) の動作を理解していただくために、用例をいくつか
3628 挙げてみる。
3629
3630 デフォルトでは、1 行が 2 行以上に分割されることがあるのに、注目して
3631 いただきたい。
3632
3633 @example
3634 $ seq -w 6 10 > k; split -n3 k; head xa?
3635 ==> xaa <==
3636 06
3637 07
3638 ==> xab <==
3639
3640 08
3641 0
3642 ==> xac <==
3643 9
3644 10
3645 @end example
3646
3647 "l/" 修飾子を使用して、行の途中で分割しないようにする。
3648
3649 @example
3650 $ seq -w 6 10 > k; split -nl/3 k; head xa?
3651 ==> xaa <==
3652 06
3653 07
3654
3655 ==> xab <==
3656 08
3657 09
3658
3659 ==> xac <==
3660 10
3661 @end example
3662
3663 "r/" 修飾子を使用して、ラウンド・ロビン方式で分配する。
3664
3665 @example
3666 $ seq -w 6 10 > k; split -nr/3 k; head xa?
3667 ==> xaa <==
3668 06
3669 09
3670
3671 ==> xab <==
3672 07
3673 10
3674
3675 ==> xac <==
3676 08
3677 @end example
3678
3679 K 番目の「部分」だけ取り出すこともできる。次の例は、33 の「部分」に
3680 分け、そのうちの  7 番目だけを取り出して、表示している。
3681
3682 @example
3683 $ seq 100 > k; split -nl/7/33 k
3684 20
3685 21
3686 22
3687 @end example
3688
3689
3690 @node csplit invocation
3691 @section @command{csplit}: ファイルを内容を目印にして分割する。
3692
3693 @pindex csplit
3694 @cindex context splitting
3695 @cindex splitting a file into pieces by context
3696
3697 @command{csplit} は、入力ファイル @var{input} を分割して 0 個以上の出力ファイルを
3698 生成する。@var{input} が @samp{-} である場合は、標準入力から読み込む。
3699 @sp 1
3700 書式:
3701
3702 @example
3703 csplit [@var{option}]@dots{} @var{input} @var{pattern}@dots{}
3704 @end example
3705
3706 出力ファイルの中身がどうなるかは、以下で詳しく述べるように、引数
3707 @var{pattern} によって決まってくる。引数 @var{pattern} が、入力ファイル中に存在
3708 しない行を指している場合は、エラーになる (たとえば、入力の残りの
3709 部分に、指定された正規表現にマッチする行がもう存在しない場合)。
3710 すべてのパターン・マッチが終わったとき、残っている入力があれば、
3711 最後の出力ファイルに書き出される。
3712
3713 デフォルトでは、@command{csplit} は、出力ファイルを生成した後で、各出力
3714 ファイルに書き込んだバイト数を表示する。
3715
3716 パターン引数 @var{pattern} には、以下のタイプがある。
3717
3718 @table @samp
3719
3720 @item @var{n}
3721 入力の最初から @var{n} 行目の直前までを含む (つまり、@var{n-1} 行目までの)
3722 出力ファイルを作成する (@var{n} は正の整数)。繰り返し回数の指定が後に
3723 続く場合は、繰り返しごとに、入力ファイルの次の @var{n} 行分を含む出力
3724 ファイルを作成していく。
3725
3726 @item /@var{regexp}/[@var{offset}]
3727 現在行から、入力ファイル中の次に @var{regexp} にマッチする行の直前までを
3728 内容とする (すなわち、マッチする行は含まない) 出力ファイルを作成
3729 する。整数の @var{offset} を指定してもよい。指定した場合は、マッチする行
3730 にプラス/マイナス @var{offset} した行の直前までの入力が (つまり、その行は
3731 含まない)、出力ファイルに書き込まれ、書き込まれた次の行から入力の
3732 後続部分が始まることになる。
3733
3734 @item %@var{regexp}%[@var{offset}]
3735 上記のタイプと同様だが、出力ファイルを作成しない点が異なる。要するに、
3736 入力ファイルのその部分は捨てられることになるわけだ。
3737
3738 @item @{@var{repeat-count}@}
3739 直前に行ったパターンの検索を、さらに @var{repeat-count} 回繰り返す。
3740 @var{repeat-count} には正の整数か、アステリスクを指定できる。後者は、
3741 入力がなくなるまで、必要なだけ何回でも繰り返すことを意味する。
3742 (訳注: @samp{csplit @var{input} '/@var{pattern_1}/' '@{3@}'
3743 '/@var{pattern_2}/' '@{*@}'}
3744 のように使用する。)
3745
3746 @end table
3747
3748 出力ファイルの名前は、接頭辞 (prefix、デフォルトでは @samp{xx}) に接尾辞
3749 (suffix) を続けたものになる。デフォルトの接尾辞は、二桁の 10 進数を @samp{00}
3750 から @samp{99} まで順番に増やして行ったものである。いかなる場合でも、出力
3751 ファイルを、ファイルの名前によってソートした順番で結合すると、元の入力
3752 ファイルが生成されるようになっている。
3753
3754 @command{csplit} のデフォルトでは、エラーになった場合や、ハングアップ、
3755 割り込み、中止、終了といったシグナルを受け取った場合には、それまでに
3756 作成した出力ファイルをすべて消去してから終了する。
3757
3758 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3759
3760 @table @samp
3761
3762 @item -f @var{prefix}
3763 @itemx --prefix=@var{prefix}
3764 @opindex -f
3765 @opindex --prefix
3766 @cindex output file name prefix
3767 @var{prefix} を出力ファイル名の接頭辞として使用する。
3768
3769 @item -b @var{suffix}
3770 @itemx --suffix=@var{suffix}
3771 @opindex -b
3772 @opindex --suffix
3773 @cindex output file name suffix
3774 @var{suffix} を出力ファイル名の接尾辞として使用する。このオプションを
3775 指定する場合、接尾辞として指定する文字列には、@code{printf(3)} 方式の
3776 変換指定が必ず一つは (それも、一つだけ) 含まれていなければなら
3777 ない。変換指定には、形式指定フラグ、フィールド幅、精度指定と
3778 いった修飾子を付けてもよく、3 種の修飾子をすべて付けることも
3779 できる。フォーマット文字は、バイナリの符号なし整数である引数を、
3780 人間に読みやすい形式に変換するものでなければならない。フォーマット
3781 文字の @samp{d} と @samp{i} は、@samp{u} の別名であり、@samp{u}, @samp{o}, @samp{x},
3782 @samp{X} 変換が
3783 可能である。@var{suffix} の全体が (現在の出力ファイルが何番目かという
3784 情報とともに) @code{sprintf(3)} 関数に引き渡され、出力ファイルの一つ一つ
3785 に対して、ファイル名に使う接尾辞が順番に作られることになる。なお、
3786 このオプションを使用すると、@option{--digits} オプションは無視される。
3787
3788 @item -n @var{digits}
3789 @itemx --digits=@var{digits}
3790 @opindex -n
3791 @opindex --digits
3792 出力ファイル名に含まれる数字の桁数を、デフォルトの 2 桁から
3793 @var{digits} 桁にする。
3794
3795 @item -k
3796 @itemx --keep-files
3797 @opindex -k
3798 @opindex --keep-files
3799 エラーが起きても、出力ファイルを消去しない。
3800
3801 @item --suppress-matched
3802 @opindex --suppress-matched
3803 指定した @var{pattern} にマッチする行を出力しない。言い換えれば、境界に
3804 なる行が、分割されたファイルの 2 番目以降の断片の先頭に現れない
3805 ようにする。(coreutils-8.22 の新機能。訳注: @var{pattern} が正規表現の
3806 場合には、境界になる行がファイル中にたとえ 1 箇所しかなくても、
3807 その行の表示を抑制するには、@samp{csplit --suppress-matched @var{input}
3808 @var{pattern} '@{*@}'} などと、繰り返しの指定をする必要があるようだ。)
3809
3810 @item -z
3811 @itemx --elide-empty-files
3812 @opindex -z
3813 @opindex --elide-empty-files
3814 サイズ 0 の出力ファイルができないようにする (入力ファイルを各部分
3815 に区切る行が、どの部分においても最初の行になることを期待している
3816 場合に、このオプションを使わないと、一番目の出力ファイルがたいてい
3817 サイズ 0 になる)。このオプションが指定されているときでも、出力
3818 ファイルの連続番号が 0 から始まって、順番に増えていくことに変わり
3819 はない。
3820
3821 @item -s
3822 @itemx -q
3823 @itemx --silent
3824 @itemx --quiet
3825 @opindex -s
3826 @opindex -q
3827 @opindex --silent
3828 @opindex --quiet
3829 出力ファイルのサイズを表示しない。
3830
3831 @end table
3832
3833 @exitstatus
3834
3835 用例を挙げてみよう。まず、練習用に空のディレクトリを作って、そこに
3836 移動する。
3837
3838 @example
3839 $ mkdir d && cd d
3840 @end example
3841
3842 次に、1 から 14 まで連続する数を、0 または 5 で終わる行で分割する。
3843
3844 @example
3845 $ seq 14 | csplit - '/[05]$/' '@{*@}'
3846 8
3847 10
3848 15
3849 @end example
3850
3851 ここで表示された各数字は、csplit が今作成した出力ファイルのサイズ
3852 である。その出力ファイルの名前をリストする。
3853
3854 @example
3855 $ ls
3856 xx00  xx01  xx02
3857 @end example
3858
3859 @command{head} を使って、内容を見る。
3860
3861 @example
3862 $ head xx*
3863 ==> xx00 <==
3864 1
3865 2
3866 3
3867 4
3868
3869 ==> xx01 <==
3870 5
3871 6
3872 7
3873 8
3874 9
3875
3876 ==> xx02 <==
3877 10
3878 11
3879 12
3880 13
3881 14
3882 @end example
3883
3884 次の例では、入力を空行で分割している。
3885
3886 @example
3887 $ csplit --suppress-matched @var{input.txt} '/^$/' '@{*@}'
3888 @end example
3889
3890 @c
3891 @c TODO: "uniq" already supports "--group".
3892 @c        when it gets the "--key" option, uncomment this example.
3893 @c
3894 @c Example of splitting input file, based on the value of column 2:
3895 @c
3896 @c @example
3897 @c $ cat @var{input.txt} |
3898 @c       sort -k2,2 |
3899 @c       uniq --group -k2,2 |
3900 @c       csplit -m '/^$/' '@{*@}'
3901 @c @end example
3902
3903 @node Summarizing files
3904 @chapter ファイルの要約 (行数、単語数、チェックサム)
3905
3906 @cindex summarizing files
3907
3908 以下のコマンドは、ファイル内容全体を表現する若干の数字を生成する。
3909
3910 @menu
3911 * wc invocation::            行数、単語数、バイト数を表示する。
3912 * sum invocation::           チェックサムとブロック数を表示する。
3913 * cksum invocation::         CRC チェックサムとバイト数を表示する。
3914 * md5sum invocation::        MD5 ダイジェストの表示、または検査をする。
3915 * sha1sum invocation::       SHA-1 ダイジェストの表示、または検査をする。
3916 * sha2 utilities::           SHA-2 ダイジェストの表示、または検査をする。
3917 @end menu
3918
3919
3920 @node wc invocation
3921 @section @command{wc}: 行数、単語数、バイト数を表示する
3922
3923 @pindex wc
3924 @cindex byte count
3925 @cindex character count
3926 @cindex word count
3927 @cindex line count
3928
3929 @command{wc} は、指定された各 @var{file} に含まれる、バイト数、文字数、ホワイト
3930 スペース (訳注: 空白、タブ、改行など) で区切られた単語数、改行数を算出
3931 する。@var{file} が指定されなかった場合や、@var{file} として @samp{-} が指定された
3932 場合は、標準入力を対象とする。
3933 @sp 1
3934 書式:
3935
3936 @example
3937 wc [@var{option}]@dots{} [@var{file}]@dots{}
3938 @end example
3939
3940 @cindex total counts
3941 @command{wc} は各ファイルにつき、一行の算出結果を出力する。引数として
3942 ファイルが指定されていれば、そのファイル名を数値の後ろに表示する。
3943 複数の @var{file} が指定されている場合は、最後の行で合計を表示し、ファイル
3944 名の部分に、@file{total} と書き込む。表示される数値の順番は、改行数、単語数、
3945 文字数、バイト数、最長行の長さになる。各数値は、フィールドに右詰めで
3946 表示され、フィールド間には、少なくとも一個の空白が置かれる。そうする
3947 ことで、複数の数字とファイル名が、たいていの場合きちんと整列するように
3948 なっているのだ。数値の入るフィールドの幅は、入力に応じて変化するので、
3949 一定のフィールド幅を当てにするべきではない。ただし、GNU の拡張として、
3950 表示される数値がただ 1 個だけの場合は、その数値の頭に空白を入れない
3951 ことになっている。
3952
3953 デフォルトでは、@command{wc} は 3 個の数値を表示する。すなわち、改行数、単語
3954 数、バイト数である。オプションによって、特定の数値のみを表示するように
3955 指定することもできる。どんなオプションも、それ以前に指定されたオプション
3956 を取り消すことはない。従って、
3957
3958 @example
3959 wc --bytes --words
3960 @end example
3961
3962 @noindent
3963 上記のコマンドは、バイト数と単語数の両方を表示することになる。
3964
3965 @option{--max-line-length} を指定すると、@command{wc} はファイルごとの最長行の
3966 長さを表示する。さらに、複数のファイルが存在する場合は、(各最長行の
3967 合計ではなく) 最長行中の最長のものを表示する。ここで言う行の長さは、
3968 画面に表示される桁数のことである。表示桁数の計算は現在のロケールに
3969 従って行われ、タブ位置は 8 桁ごとに来るものとされる。
3970
3971 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
3972
3973 @table @samp
3974
3975 @item -c
3976 @itemx --bytes
3977 @opindex -c
3978 @opindex --bytes
3979 バイト数のみを表示する。
3980
3981 @item -m
3982 @itemx --chars
3983 @opindex -m
3984 @opindex --chars
3985 文字数のみを表示する。
3986
3987 @item -w
3988 @itemx --words
3989 @opindex -w
3990 @opindex --words
3991 単語数のみを表示する。
3992
3993 @item -l
3994 @itemx --lines
3995 @opindex -l
3996 @opindex --lines
3997 改行数のみを表示する。
3998
3999 @item -L
4000 @itemx --max-line-length
4001 @opindex -L
4002 @opindex --max-line-length
4003 最長行の長さのみを表示する。
4004
4005 @macro filesZeroFromOption{cmd,withTotalOption,subListOutput}
4006 @item --files0-from=@var{file}
4007 @opindex --files0-from=@var{file}
4008 @c This is commented out to avoid a texi2dvi failure.
4009 @c texi2dvi (GNU Texinfo 4.11) 1.104
4010 @c @cindex including files from @command{\cmd\}
4011 コマンドラインで名前を指定されたファイルの処理を行わない。その代わり
4012 に、ファイル @var{file} に名前が書き込まれているファイルの処理を行う。
4013 なお、@var{file} 中に書かれている各ファイル名は、ゼロバイト (ASCII NUL)
4014 で終端されていなければならない。このオプションは、ファイル名のリスト
4015 が長すぎて、コマンドライン長の上限を超過してしまいそうなときに、
4016 \withTotalOption\便利である。そうした場合、@command{\cmd\} を @command{xargs} 経由で実行するのは、
4017 望ましくない。なぜなら、@command{xargs} はファイルのリストをいくつかの部分
4018 に分割して @command{\cmd\} に渡すので、@command{\cmd\} はリスト全体の\subListOutput\ではなく、
4019 部分リストごとの\subListOutput\を表示してしまうからである。
4020 ASCII NUL で終端されたファイル名のリストを得る方法の一つは、
4021 GNU @command{find} に @option{-print0} を付けて使うことである。@var{file} に @samp{-}
4022 を指定すれば、
4023 ASCII NUL で終端されたファイル名を標準入力から読み込むことが
4024 できる。
4025 @end macro
4026 @filesZeroFromOption{wc,,合計}
4027
4028 たとえば、カレント・ディレクトリ以下にある、すべての @file{.c} ファイル
4029 や @file{.h} ファイルの内で、最長の行の長さを知るには、次のようにする。
4030
4031 @example
4032 find . -name '*.[ch]' -print0 |
4033   wc -L --files0-from=- | tail -n1
4034 @end example
4035
4036 @end table
4037
4038 @exitstatus
4039
4040
4041 @node sum invocation
4042 @section @command{sum}: チェックサムとブロック数を表示する
4043
4044 @pindex sum
4045 @cindex 16-bit checksum
4046 @cindex checksum, 16-bit
4047
4048 @command{sum} は、指定された各 @var{file} の 16-bit チェックサムを計算する。
4049 @var{file} が指定されなかった場合や、@var{file} として @samp{-} が指定された場合は、
4050 標準入力を対象とする。
4051 @sp 1
4052 書式:
4053
4054 @example
4055 sum [@var{option}]@dots{} [@var{file}]@dots{}
4056 @end example
4057
4058 @command{sum} は各 @var{file} のチェックサムを表示し、その後にファイルのブロック数
4059 (整数に切り上げたもの) を続ける。複数の @var{file} が指定されていると、
4060 ファイル名も表示される (デフォルト)。(@option{--sysv} オプションが指定されて
4061 いる場合は、引数に一つでもファイルがあれば、そのファイル名が表示される。)
4062
4063 デフォルトでは、GNU の @command{sum} は、BSD の @command{sum} と互換性のある
4064 アルゴリズムを使って、チェックサムを計算し、1 ブロック 1024 バイトの
4065 ブロック数でファイルサイズを表示する。
4066
4067 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
4068
4069 @table @samp
4070
4071 @item -r
4072 @opindex -r
4073 @cindex BSD @command{sum}
4074 デフォルトの (BSD と互換性のある) アルゴリズムを使用する。この
4075 オプションが存在しているのは、System V の @command{sum} との互換性のため
4076 である。前方に @option{-s} オプションも指定されているとき以外、このオプ
4077 ションは効果を持たない。
4078
4079 @item -s
4080 @itemx --sysv
4081 @opindex -s
4082 @opindex --sysv
4083 @cindex System V @command{sum}
4084 System V の @command{sum} のデフォルトと互換性のあるアルゴリズムを使って、
4085 チェックサムを計算し、1 ブロック 512 バイトのブロック数でファイル
4086 サイズを表示する。
4087
4088 @end table
4089
4090 @command{sum} は、互換性のために提供されている。新しいアプリケーションでは、
4091 @command{cksum} プログラム (次のセクションを参照) を使う方がよい。
4092
4093 @exitstatus
4094
4095
4096 @node cksum invocation
4097 @section @command{cksum}: CRC チェックサムとバイト数を表示する
4098
4099 @pindex cksum
4100 @cindex cyclic redundancy check
4101 @cindex CRC checksum
4102
4103 @command{cksum} は、指定された各 @var{file} の CRC (cyclic redundancy check、巡回
4104 冗長検査) チェックサムを計算する。@var{file} が指定されなかった場合や、
4105 @var{file} として @samp{-} が指定された場合は、標準入力を対象とする。
4106 @sp 1
4107 書式:
4108
4109 @example
4110 cksum [@var{option}]@dots{} [@var{file}]@dots{}
4111 @end example
4112
4113 @command{cksum} は、各ファイルの CRC チェックサムとバイト数を表示する。また、
4114 引数が指定されていない場合を除いて、ファイル名も表示する。
4115
4116 @command{cksum} は通常、信頼性の低い方法 (たとえば、netnews) によって転送
4117 されたファイルに損傷がないことを確認するために使用される。受信した
4118 ファイルに対する @command{cksum} の出力を、転送元のファイルに対する @command{cksum}
4119 の出力 (たいてい、配布物中に入っている) と比較するわけである。
4120
4121 CRC のアルゴリズムは、POSIX 規格によって規定されており、BSD や
4122 System V の @command{sum} のアルゴリズム (直前のセクションを参照) と互換性が
4123 ない。CRC アルゴリズムの方が信頼性が高い。
4124
4125 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
4126 options}.
4127
4128 @exitstatus
4129
4130
4131 @node md5sum invocation
4132 @section @command{md5sum}: MD5 ダイジェストの表示、または検査をする
4133
4134 @pindex md5sum
4135 @cindex MD5
4136 @cindex 128-bit checksum
4137 @cindex checksum, 128-bit
4138 @cindex fingerprint, 128-bit
4139 @cindex message-digest, 128-bit
4140
4141 @command{md5sum} は、指定された各 @var{file} の 128-bit チェックサムを計算する。
4142 チェックサムは、指紋 (@dfn{fingerprint}) とか、メッセージ・ダイジェスト
4143 (@dfn{message-digest}) とも呼ばれる (訳注: ハッシュ値と呼ばれることもある)。
4144
4145 注意: MD5 ダイジェストは、ファイルの不測の損傷を検知することに
4146 関して、単純な CRC (@command{cksum} コマンドで使用できる) よりも信頼性が高い。
4147 二つのファイルがたまたま同一の MD5 値を持っている確率は、ほとんどゼロ
4148 だからである。だからと言って、悪意のある改竄に対して安全だと考えては
4149 ならない。ある特定の MD5 指紋を持つファイルを見つけ出すことは、現在の
4150 ところ事実上不可能だと考えられているが、デジタル証明書などのファイルが
4151 署名に MD5 ダイジェストを使用しているとき、そうしたファイルに手を
4152 加えて、正当に見えるようする方法なら、周知のことだからである。もっと
4153 安全なハッシュ値が必要なら、SHA-2 の使用を考慮した方がよい。
4154 @xref{sha2 utilities}.
4155
4156 指定された @var{file} が @samp{-} の場合や、ファイルが全く指定されなかった
4157 場合は、@command{md5sum} は標準入力のチェックサムを計算する。また、@command{md5sum} は、
4158 ファイルとチェックサムの間に矛盾がないかどうかを判定することもできる。
4159 @sp 1
4160 書式:
4161
4162 @example
4163 md5sum [@var{option}]@dots{} [@var{file}]@dots{}
4164 @end example
4165
4166 各 @var{file} に対して @samp{md5sum} は、MD5 チェックサム、入力モードがバイ
4167 ナリかテキストかを示すフラグ、それにファイル名を出力する。@var{file} に
4168 バックスラッシュや改行文字が含まれている場合は、出力する行の先頭に
4169 バックスラッシュを付け、さらに、ファイル名中の問題のある各文字を
4170 バックスラッシュでエスケープする。そうすることで、わがままなファイル
4171 名があっても、出力に誤解の余地がないようにしているわけだ。@var{file} が
4172 指定されていなかったり、@samp{-} という形で指定されている場合は、標準入力
4173 から読み込む。
4174
4175 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
4176
4177 @table @samp
4178
4179 @item -b
4180 @itemx --binary
4181 @opindex -b
4182 @opindex --binary
4183 @cindex binary input files
4184 各入力ファイルをバイナリとして扱う。すなわち、入力ファイルをバイナリ
4185 モードで読み込み、出力に @samp{*} というフラグを付ける。このオプションは
4186 @option{--text} の反対である。バイナリファイルとテキストファイルを区別しな
4187 い GNU のようなシステムでは、このオプションは入力モードがバイナリ
4188 であるとのフラグを付けるだけであり、MD5 チェックサムの値には影響を
4189 及ぼさない。このオプションは、バイナリファイルとテキストファイルを
4190 区別する MS-DOS のようなシステムでは、デフォルトである。だだし、
4191 読み込みを標準入力から行い、その標準入力が端末であるときは除く。
4192
4193 @item -c
4194 @itemx --check
4195 各 @var{file} から (@var{file} が指定されなかった場合は、標準入力から)、ファ
4196 イル名とチェックサム情報を読み込み (@var{file} をチェックサム計算の対象と
4197 なるデータとして読み込むわけはない)、そのチェックサム情報が、名前を
4198 挙げられているファイルの内容に対応しているかどうかを報告する。この
4199 モードの @command{md5sum} に対する入力は、たいていの場合、事前に @samp{md5sum}
4200 を実行してチェックサムを作成したときの出力である。入力の有効な行は
4201 それぞれ、MD5 チェックサム、バイナリかテキストかのフラグ、ファイル
4202 名の順になっている。バイナリモードには @samp{*} の指標が付き、テキスト
4203 モードには、@samp{ } (空白) の指標が付く。そうした各行に対して、@command{md5sum}
4204 は、そこに名前を挙げられたファイルを読み込み、その MD5 チェックサム
4205 を計算する。そして、算出したメッセージダイジェストが、そのファイル名
4206 と同じ行にあるチェックサムと一致しない場合は、そのファイルがテストに
4207 失敗したことを報告するのである。両者が一致した場合は、テストにパス
4208 したことになる。デフォルトでは、有効な各行に対して標準出力にメッ
4209 セージを 1 行づつ書き出し、指名されたファイルがテストにパスしたか
4210 どうかを明かにする。また、すべてのチェックが完了したとき、テストに
4211 失敗したものが一つでもあれば、警告メッセージを標準エラーに出力する。
4212 この出力を抑制したければ、@option{--status} オプションを使用すればよい。
4213 リストされたファイルの中に、オープンできなかったり、読み込めなかっ
4214 たりするものがあった場合や、有効な行に書いてあるチェックサムが対応
4215 するファイルの実際の値と一致しなかった場合、それに、有効な行が全く
4216 存在しなかった場合は、@command{md5sum} は 0 以外のステータスで終了する。
4217 それ以外の場合は正常終了することになる。
4218
4219 @item --quiet
4220 @opindex --quiet
4221 @cindex verifying MD5 checksums
4222 このオプションが役に立つのは、チェックサムを照合するときだけである。
4223 このオプションを指定すると、チェックサムを照合する際、検査に成功した
4224 ファイルごとに 'OK' (訳注: 日本語では、「成功」または「完了」) の
4225 メッセージを出さなくなる。ただし、ファイルが照合に失敗した場合は、
4226 デフォルトと同じ 1 ファイル 1 行の形式で結果を報告する。チェック
4227 サムに何らかの不一致があった場合は、失敗を総括した警告メッセージも
4228 標準出力に表示する。
4229
4230 @item --status
4231 @opindex --status
4232 @cindex verifying MD5 checksums
4233 このオプションが役に立つのは、チェックサムを照合するときだけである。
4234 このオプションを指定すると、チェックサムを照合する際、デフォルトの
4235 1 ファイルに付き 1 行の判定メッセージを出さなくなる。また、照合の
4236 失敗があっても、それを総括した警告メッセージを出力することがない。
4237 とは言え、ファイルのオープンや読み込みに失敗した場合は、やはり
4238 それぞれの診断結果を標準エラーに表示する。リストされたすべての
4239 ファイルを読み込むことができ、しかも、すべてのファイルについて、
4240 対応する MD5 チェックサムと矛盾がなければ、正常終了する。それ以外
4241 の場合は、失敗があったことを示すステータスコードで終了する。
4242
4243 @item --tag
4244 @opindex --tag
4245 @cindex BSD output
4246 BSD スタイルのチェックサムを出力する。つまり、使用したチェックサム
4247 のアルゴリズムも表示するということだ。GNU の拡張として、問題を起こ
4248 しかねない文字を含むファイル名は、上述したようにエスケープされ、
4249 さらに、行の先頭に エスケープの指標に使われたのと同じ @samp{\} 文字が
4250 付けられる。@option{--tag} オプションはバイナリ・モードを意味し、@option{--text}
4251 オプションと一緒に使うことは認められていない。そんなことをサポート
4252 しても、出力の書式をむやみに繁雑にするだけで、利益はほとんどない
4253 からである。
4254
4255 @item -t
4256 @itemx --text
4257 @opindex -t
4258 @opindex --text
4259 @cindex text input files
4260 各入力ファイルをテキストとして扱う。すなわち、入力ファイルをテキスト
4261 モードで読み込み、出力に @samp{ } というフラグを付ける。このオプションは
4262 @option{--binary} の反対である。バイナリファイルとテクストファイルを区別
4263 しない GNU のようなシステムでは、このオプションはデフォルトである。
4264 ほかのシステムでも、読み込みを標準入力から行い、その標準入力が端末で
4265 あるときは、デフォルトになる。ただし、@option{--tag} が使用されているとき
4266 に、このモードがデフォルトになることはない。
4267
4268 @item -w
4269 @itemx --warn
4270 @opindex -w
4271 @opindex --warn
4272 @cindex verifying MD5 checksums
4273 チェックサムを照合する際、MD5 チェックサムを記載した行の書式に
4274 正しくないものがあると、その旨警告を発する。このオプションが
4275 役に立つのは、チェックされる入力中の、数行を除いたすべての行が、
4276 有効なときだけである。
4277
4278 @item --strict
4279 @opindex --strict
4280 @cindex verifying MD5 checksums
4281 チェックサムを照合する際、無効な入力行が 1 行でもあれば、そうした
4282 行のすべてについて警告を発したのち、0 以外の終了ステータスで終了
4283 する。
4284
4285 @end table
4286
4287 @exitstatus
4288
4289
4290 @node sha1sum invocation
4291 @section @command{sha1sum}: SHA-1 ダイジェストの表示、または検査をする
4292
4293 @pindex sha1sum
4294 @cindex SHA-1
4295 @cindex 160-bit checksum
4296 @cindex checksum, 160-bit
4297 @cindex fingerprint, 160-bit
4298 @cindex message-digest, 160-bit
4299
4300 @command{sha1sum} は、指定された各 @var{file} の 160-bit チェックサムを計算する。
4301 このコマンドの使用法やオプションは、@command{md5sum} と全く同じである。
4302 @xref{md5sum invocation}.
4303
4304 注意: SHA-1 ダイジェストは MD5 より安全であり、コリジョン
4305 (collision、衝突。別のファイルが同一の指紋を持つこと) が起きたという
4306 話を聞いたことはない。しかしながら、大量の --- と言っても非現実的な
4307 ほどではない --- リソースがあれば、コリジョンを作り出せることがわかって
4308 いる。この理由から、SHA-1 は、もっと安全な SHA-2 ハッシュ・アルゴリズム
4309 に徐々に移行すべきだと、一般に考えられている。 @xref{sha2 utilities}.
4310
4311
4312 @node sha2 utilities
4313 @section sha2 utilities: SHA-2 ダイジェストの表示、または検査をする
4314
4315 @pindex sha224sum
4316 @pindex sha256sum
4317 @pindex sha384sum
4318 @pindex sha512sum
4319 @cindex SHA-2
4320 @cindex 224-bit checksum
4321 @cindex 256-bit checksum
4322 @cindex 384-bit checksum
4323 @cindex 512-bit checksum
4324 @cindex checksum, 224-bit
4325 @cindex checksum, 256-bit
4326 @cindex checksum, 384-bit
4327 @cindex checksum, 512-bit
4328 @cindex fingerprint, 224-bit
4329 @cindex fingerprint, 256-bit
4330 @cindex fingerprint, 384-bit
4331 @cindex fingerprint, 512-bit
4332 @cindex message-digest, 224-bit
4333 @cindex message-digest, 256-bit
4334 @cindex message-digest, 384-bit
4335 @cindex message-digest, 512-bit
4336
4337 コマンド @command{sha224sum}, @command{sha256sum}, @command{sha384sum},
4338 @command{sha512sum} は、一まとめ
4339 にして SHA-2 ハッシュと呼ばれる様々な長さのチェックサムを計算する
4340 (それぞれ、224, 256, 384, 512 bits である)。こうしたコマンドの使用法
4341 とオプションは、@command{md5sum} と全く同じである。@xref{md5sum invocation}.
4342
4343 注意: SHA384 と SHA512 のダイジェストは、SHA224 や SHA256 に比べて、
4344 計算にかなり時間がかかる。32 ビットのコンピュータではなおさらである。
4345
4346
4347 @node Operating on sorted files
4348 @chapter ソートしたファイルの操作
4349
4350 @cindex operating on sorted files
4351 @cindex sorted files, operations on
4352
4353 以下のコマンドは、ソートしたファイルを操作 (生成) する。
4354
4355 @menu
4356 * sort invocation::          テキストファイルを並べ替える。
4357 * shuf invocation::          テキストファイルをシャッフルする。
4358 * uniq invocation::          ファイルから重複を省く。
4359 * comm invocation::          ソート済みの二つのファイルを一行づつ比較する。
4360 * ptx invocation::           ファイル内容の permuted index を作成する。
4361 * tsort invocation::         トポロジカル・ソート。
4362 @end menu
4363
4364
4365 @node sort invocation
4366 @section @command{sort}: テキストファイルを並べ替える
4367
4368 @pindex sort
4369 @cindex sorting files
4370
4371 @command{sort} は、指定されたファイルから読み込んだすべての行に対して、ソート
4372 (sort、一定の基準に従った並べ替え)、マージ (merge、統合)、比較を行う。
4373 ファイルが一つも指定されなかった場合や、@var{file} として @samp{-} が指定された
4374 場合は、標準入力から読み込む。デフォルトでは、@command{sort} は結果を標準出力
4375 に書き出す。
4376 @sp 1
4377 書式:
4378
4379 @example
4380 sort [@var{option}]@dots{} [@var{file}]@dots{}
4381 @end example
4382
4383 @command{sort} には三つの動作モードがある。ソート (これがデフォルト)、
4384 マージ、それに、すでにソートされているかどうかのチェックである。
4385 動作モードの変更には、以下のオプションを使用する。
4386
4387 @table @samp
4388
4389 @item -c
4390 @itemx --check
4391 @itemx --check=diagnose-first
4392 @opindex -c
4393 @opindex --check
4394 @cindex checking for sortedness
4395 指定されたファイルがすでにソートされているかどうかをチェックする。
4396 ファイル全体がソート済みでない場合は、診断メッセージを出し、順番
4397 から外れている最初の箇所を示してから、ステータス 1 で終了する。
4398 ファイルがソート済みの場合は、正常終了する。入力ファイルは、1 個
4399 しか指定できない。
4400
4401 @item -C
4402 @itemx --check=quiet
4403 @itemx --check=silent
4404 @opindex -c
4405 @opindex --check
4406 @cindex checking for sortedness
4407 指定されたファイルがすでにソート済みだったら、正常終了する。
4408 さもなければ、ステータス 1 で終了。入力ファイルは、1 個しか指定
4409 できない。このオプションは @option{-c} と同様だが、診断メッセージを
4410 出さない点が異なる。
4411
4412 @item -m
4413 @itemx --merge
4414 @opindex -m
4415 @opindex --merge
4416 @cindex merging sorted files
4417 指定された複数のファイルを、一つのグループとしてソートすることで
4418 統合を行う。各入力ファイルは、必ずそれぞれがソート済みでなければ
4419 ならない。マージモードの代わりにソートモードを使えば、そうした条件
4420 なしで、ソートとマージを行うことができる。マージモードがあるのは、
4421 それが使える場合は、その方が高速だからである。
4422
4423 @end table
4424
4425 @cindex sort stability
4426 @cindex sort's last-resort comparison
4427 二つの行の比較は、次のように行われる。@command{sort} は、対になる各フィールド
4428 を、コマンドラインで指定された順番で、そのフィールドに結びついた順序関係
4429 のオプションに従いつつ比較し、相違が見つかるか、比較するフィールドが
4430 なくなるまでそれを続ける。キーとなるフィールドが指定されていない場合は、
4431 デフォルトのキーである行全体が比較に使用される。最後に、すべてのキーが
4432 同じだったときは、最後の手段として、@option{--reverse} (@option{-r}) 以外の順序関係の
4433 どんなオプションも指定されていないかのように、行全体を比較する。
4434 @option{--stable} オプションを指定すると、この最後の手段の比較
4435 (@dfn{last-resort comparison}) を行わないようになり、その結果、すべてのキー・フィールドが
4436 等価である行は、互いに対する元の順序がそのまま維持される。
4437 @option{--unique} (@option{-u}) オプションも、最後の手段の比較を無効にする。
4438
4439 @vindex LC_ALL
4440 @vindex LC_COLLATE
4441 別の指定がなされていないかぎり、すべての比較は、@env{LC_COLLATE} の
4442 ロケールによって指定されている、文字の照合順序で行われる。
4443 @footnote{POSIX 以外のロケールを使用すると (たとえば、@env{LC_ALL} を @samp{en_US}
4444 に設定すると)、@command{sort} の出力が、見慣れない順序でソートされたものに
4445 なるかもしれない。その場合は、環境変数 @env{LC_ALL} を @samp{C} にすればよい。
4446 注意すべきは、@env{LC_COLLATE} だけを設定したのでは、二つの問題が生じて
4447 しまうということだ。一つは、@env{LC_ALL} も設定されている場合、@env{LC_COLLATE}
4448 は無効だということ。二つ目は、@env{LC_CTYPE} が (@env{LC_CTYPE} が設定されて
4449 いないときは、@env{LANG} が) @env{LC_COLLATE} と矛盾する値に設定されている場合、
4450 動作が未定義だということである。たとえば、@env{LC_CTYPE} が @code{ja_JP.PCK} で
4451 あるのに、@env{LC_COLLATE} が @code{en_US.UTF-8} の場合、@command{sort} の動作は未定義
4452 なのである。}
4453
4454 GNU の @command{sort} では (GNU のすべてのユーティリティについて規定されて
4455 いるとおり)、入力行の長さに上限がない。言い換えれば、各行に含まれる
4456 バイト数に制限がない。また、入力ファイルの最後のバイトが改行でなければ、
4457 GNU の @command{sort} は黙って改行を追加する。なお、行末の改行は、比較に当たって
4458 は、行の一部として扱われない。
4459
4460 @cindex exit status of @command{sort}
4461 終了ステータス:
4462
4463 @display
4464 0: エラーが起きなかった。
4465 1: @option{-c} や @option{-C} を付けて実行した際に、入力がソートされていなかった。
4466 2: エラーが起きた。
4467 @end display
4468
4469 @vindex TMPDIR
4470 環境変数 @env{TMPDIR} が設定されていれば、@command{sort} はその値をテンポラリ・
4471 ファイルを置くディレクトリとして @file{/tmp} の代わりに使用する。
4472 @option{--temporary-directory} (@option{-T}) オプションは、環境変数よりさらに優先さ
4473 れる。
4474
4475 以下に挙げるオプションは、出力する行の順序に影響を与える。こうした
4476 オプションは、グローバルなオプションとして指定することもできるし、キー
4477 となる特定のフィールドに対してのみ働くように指定することもできる。キー
4478 となるフィールドが全く指定されていない場合は、グローバルなオプションが
4479 行全体の比較に使用される。キー・フィールドの指定がある場合は、グローバル
4480 なオプションは、キー・フィールドのうち、それ自身のオプションが特に指定
4481 されていないフィールドに継承される。POSIX 以前の @command{sort} のバージョンを
4482 使用している場合、グローバルなオプションが効果を持つのは、それより後で
4483 指定されるキー・フィールドに対してだけなので、移植を考慮したシェルスク
4484 リプトでは、グローバル・オプションを最初に指定した方がよい。
4485
4486 @table @samp
4487
4488 @item -b
4489 @itemx --ignore-leading-blanks
4490 @opindex -b
4491 @opindex --ignore-leading-blanks
4492 @cindex blanks, ignoring leading
4493 @vindex LC_CTYPE
4494 各行中でソートに使うキーを捜すときに、文字の前にある空白を無視する。
4495 デフォルトの空白は、スペースまたはタブだが、@env{LC_CTYPE} のロケールに
4496 よっては違うかもしれない。なお、次のことに留意してほしい。空白は、
4497 使用しているロケールの照合ルールによっては無視されることがあるが、
4498 このオプションを指定しておかないと、@option{-k} オプションで指定される
4499 キー中の文字の位置に関して、空白が意味を持つことになる。
4500
4501 @item -d
4502 @itemx --dictionary-order
4503 @opindex -d
4504 @opindex --dictionary-order
4505 @cindex dictionary order
4506 @cindex phone directory order
4507 @cindex telephone directory order
4508 @vindex LC_CTYPE
4509 電話帳 (@dfn{phone directory}) 順にソートする。ソートする際、表示可能
4510 文字、数字、空白以外のすべての文字を無視する。デフォルトの表示可能
4511 文字と数字は ASCII のそれであり、空白はスペースまたはタブだが、後者
4512 は @env{LC_CTYPE} のロケールによっては違うかもしれない。
4513
4514 @item -f
4515 @itemx --ignore-case
4516 @opindex -f
4517 @opindex --ignore-case
4518 @cindex ignoring case
4519 @cindex case folding
4520 @vindex LC_CTYPE
4521 アルファベットの小文字を、一回すべて対応する大文字に直してから、
4522 比較する。その結果、たとえば、@samp{b} と @samp{B} は等価なものとしてソート
4523 される。どの文字がどのタイプに属するか (訳注: たとえば、大文字か
4524 小文字か) を決めているのは、@env{LC_CTYPE} のロケールである。@option{--unique}
4525 オプションと一緒に使用したとき、小文字を使っている等価な行があると、
4526 その小文字の行は捨てられることになる。(大文字を使っている等価な行の
4527 方を捨てる方法は、現在のところ存在しない。(@option{--reverse} オプションが
4528 あっても、それが効果を発揮するのは、小文字の行が捨てられた後の最終
4529 結果に対してだけなのだ。)) (訳注: 実際の動作はこの説明と少し違う。
4530 最近の @command{sort} では、@option{--unique} と併せて使用した場合、小文字を
4531 使っている行が捨てられるのではなく、等価な行のうち、最初に現れた
4532 行が残り、それ以外のすべてが捨てられるようである。)
4533
4534 @item -g
4535 @itemx --general-numeric-sort
4536 @itemx --sort=general-numeric
4537 @opindex -g
4538 @opindex --general-numeric-sort
4539 @opindex --sort
4540 @cindex general numeric sort
4541 @vindex LC_NUMERIC
4542 各行の先頭部分を倍精度浮動小数点数 (long double-precision floating
4543 point number) に変換して、数値としてソートする。
4544 @xref{Floating point}.  オーバーフロー、アンダーフロー、変換エラーが起きても、
4545 通知しない。行の並ぶ順番は以下のようになる。
4546
4547 @itemize @bullet
4548 @item
4549 数字で始まっていない行 (すべて同じ数値と見なされる)。
4550 @item
4551 NaN (IEEE の浮動小数点演算で使う ``Not a Number'' を表す値) を
4552 一貫した、ただし、マシンに依存する順番で並べる。
4553 @item
4554 マイナスの無限大。
4555 @item
4556 有限数を数値として昇順で並べる (@math{-0} と @math{+0} は等価とする)。
4557 @item
4558 プラスの無限大。
4559 @end itemize
4560
4561 このオプションを使うのは、他に方法がないときのみにすること。
4562 処理速度が @option{--numeric-sort} (@option{-n}) よりずっと遅いし、浮動小数点数に
4563 変換するとき、情報を失う恐れがある。
4564
4565 @item -h
4566 @itemx --human-numeric-sort
4567 @itemx --sort=human-numeric
4568 @opindex -h
4569 @opindex --human-numeric-sort
4570 @opindex --sort
4571 @cindex human numeric sort
4572 @vindex LC_NUMERIC
4573 数値としてソートする。その際、ソートを、まず数が正か負かによって
4574 行い (負の数、ゼロ、正の数の順)、次に SI 接尾辞 によって行い
4575 (接尾辞なし、@samp{k} や @samp{K}、そして @samp{MGTPEZY} の順  @pxref{Block size})、
4576 最後に数値によって行う。たとえば、@samp{1023M} は @samp{1G} の
4577 前に来る。SI 接尾辞として @samp{M}(メガ) は @samp{G} (ギガ) の前になるから
4578 だ。つまり、このオプションでソートする対象は、接尾辞の意味が 1000
4579 の累乗か、1024 の累乗かを問わず、一貫したやり方で、数値の規模に
4580 もっともふさわしい接尾辞を付けられている数値である。従って、この
4581 オプションは、@command{df}, @command{du}, @command{ls} などのコマンドに
4582 @option{--human-readable} や
4583 @option{--si} オプションを付けて実行したときの、一回分の出力をソート
4584 するのに用いられる。数値の書式は、@option{--numeric-sort} の場合と同じ
4585 であり (訳注: すなわち、数値の前に付けた @samp{+} 符号を理解しない)、
4586 SI 接尾辞は、数値の後ろに直接続いていなければならない。なお、
4587 @command{numfmt} コマンドを使用することも考慮していただきたい。@command{numfmt}
4588 を使用すれば、数値をソートした後で、人間に読みやすい形に整形し直す
4589 ことができるので、たいていの場合 @command{sort} の対象に、より精密な数値を
4590 使うことが可能になるからだ。
4591
4592 @item -i
4593 @itemx --ignore-nonprinting
4594 @opindex -i
4595 @opindex --ignore-nonprinting
4596 @cindex nonprinting characters, ignoring
4597 @cindex unprintable characters, ignoring
4598 @vindex LC_CTYPE
4599 表示できない文字を無視する。どの文字がどのタイプに属するかを決めて
4600 いるのは、 @env{LC_CTYPE} のロケールである。より強力なオプションである
4601 @option{--dictionary-order} (@option{-d}) が一緒に指定されていると、このオプ
4602 ションは効果を持たない。
4603
4604 @item -M
4605 @itemx --month-sort
4606 @itemx --sort=month
4607 @opindex -M
4608 @opindex --month-sort
4609 @opindex --sort
4610 @cindex months, sorting by
4611 @vindex LC_TIME
4612 比較する部分の先頭が、0 個以上の空白に続いて、月名の短縮形になって
4613 いるとき、すべての文字を大文字に直して @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}
4614 の順序で比較する。月名として無効な名前は、有効な月名より前に置かれる。
4615 月名のつづりを決めているのは、@env{LC_TIME} カテゴリのロケールである
4616 (訳注: だから、英語の月名によってソートするには、ロケールを英語か
4617 C にしておく必要がある)。デフォルトの空白は、スペースまたはタブ
4618 だが、@env{LC_CTYPE} のロケールによっては違うかもしれない。
4619
4620 @item -n
4621 @itemx --numeric-sort
4622 @itemx --sort=numeric
4623 @opindex -n
4624 @opindex --numeric-sort
4625 @opindex --sort
4626 @cindex numeric sort
4627 @vindex LC_NUMERIC
4628 数値としてソートする。数値は行頭から始まり (訳注: 比較する位置が
4629 指定されていれば、実は行頭でなくてもよい)、任意個の空白、必要なら
4630 @samp{-} 符号、それに、0 個以上の数字から構成される。数値は、区切り
4631 記号で 3 桁づつ区切られていてもよく、小数点記号と 0 個以上の数字
4632 が続いていてもよい。数字がない場合は、@samp{0} と見なされる。小数点記号
4633 や桁区切りの記号を規定しているのは、@env{LC_NUMERIC} のロケールである。
4634 デフォルトの空白は、スペースまたはタブだが、@env{LC_CTYPE} のロケール
4635 によっては違うかもしれない。
4636
4637 比較は厳密であり、丸めによるエラーはない。
4638
4639 このオプションは、数値に前置した @samp{+} 符号や、指数表記を理解しない。
4640 そうした文字列を数値として比較するには、@option{--general-numeric-sort}
4641 (@option{-g}) を使用するべきである。
4642
4643 @item -V
4644 @itemx --version-sort
4645 @opindex -V
4646 @opindex --version-sort
4647 @cindex version number sort
4648 バージョン名とバージョン番号によってソートする。標準用法のソートと
4649 動作が似ているが、10 進数の数字が連続する各部分をインデックス番号や
4650 バージョン番号と見なし、(文字列としてではなく) 数値として取り扱う
4651 点が違う。(@xref{Details about version sort}.)
4652
4653 @item -r
4654 @itemx --reverse
4655 @opindex -r
4656 @opindex --reverse
4657 @cindex reverse sorting
4658 比較の結果を逆順にする。その結果、出力ではより大きなキーの値を
4659 持つ行が、後ではなく、先に表示される。
4660
4661 @item -R
4662 @itemx --random-sort
4663 @itemx --sort=random
4664 @opindex -R
4665 @opindex --random-sort
4666 @opindex --sort
4667 @cindex random sort
4668 ソートを行うのに、入力中のキーをハッシュしてから、そのハッシュ値
4669 をソートするという方法を用いる。ハッシュ関数はランダムに選択する。
4670 その際、衝突 (collision) が絶対起きないように関数を選択するので、
4671 値の違うキーは必ず違うハッシュ値を持つようになる。これは、入力の
4672 ランダムな並び替えに似ているが (@pxref{shuf invocation})、同じ値を
4673 持つキーは一緒に並べるという点が、異なっている。
4674
4675 ランダムソートを行うフィールドが複数指定されている場合は、ランダムに
4676 選択された一つの同じハッシュ関数が、すべてのフィールドで使用される。
4677 フィールドごとに別のランダムなハッシュ関数を使うようにするには、
4678 @command{sort} を複数回呼び出せばよい。
4679
4680 ハッシュ関数の選択は、 @option{--random-source} オプションの影響を受ける。
4681
4682 @end table
4683
4684 その他のオプション。
4685
4686 @table @samp
4687
4688 @item --compress-program=@var{prog}
4689 テンポラリ・ファイルを @var{prog} というプログラムで圧縮する。
4690
4691 @var{prog} プログラムは、引数が一つも存在しない場合に、標準入力を圧縮
4692 して標準出力に書き出し、@option{-d} オプションの指定があれば、標準入力を
4693 展開して標準出力に書き出すものでなければならない。
4694
4695 @var{prog} が 0 以外のステータスで終了した場合は、エラーメッセージを
4696 出して、@command{sort} の実行を中止する。
4697
4698 @var{prog} の指定中でホワイトスペース (訳注: 空白、タブ、改行など) や
4699 バックスラッシュ文字を使ってはならない。そうした文字は、将来の
4700 使用のために、予約されている。
4701
4702 @filesZeroFromOption{sort,,ソートした結果}
4703
4704 @item -k @var{pos1}[,@var{pos2}]
4705 @itemx --key=@var{pos1}[,@var{pos2}]
4706 @opindex -k
4707 @opindex --key
4708 @cindex sort field
4709 行中の @var{pos1} から @var{pos2} までの部分 (両者を含む) を、ソートの対象
4710 となる場所として指定する。@var{pos2} が省略されている場合は、@var{pos1} から
4711 行末までがソートの対象になる。
4712
4713 各 @var{pos} は、@samp{@var{f}[.@var{c}][@var{opts}]} という形式を取る。@var{f}
4714 は、比較に使用する
4715 フィールドは何番目かということであり、@var{c} は、そのフィールドの始め
4716 から数えて何番目の文字かということである。フィールドや文字の位置は、
4717 1 から数える。なお、@var{pos2} の文字の位置として 0 を指定すると、その
4718 フィールドの最後の文字を指すことになる。@samp{.@var{c}} が、@var{pos1} で省略されて
4719 いる場合は、デフォルトの 1 (フィールドの最初の文字) を指定したこと
4720 になり、@var{pos2} で省略されている場合は、デフォルトの 0 (フィールドの
4721 最後の文字) を指定したことになる。@var{opts} は順序関連のオプションで
4722 あり、これを指定することで、各キーを異なったルールでソートすること
4723 が可能になる。詳細については後述しているので、参照していただきたい。
4724 なお、キーは複数のフィールドにまたがることができる。
4725
4726 たとえば、二番目のフィールドでソートするには、@option{--key=2,2} (@option{-k 2,2})
4727 を使用する。後述部分で、キーについてさらに説明し、用例も
4728 もっとたくさん挙げているので、ご覧になっていただきたい。また、
4729 @option{--debug} オプションの説明もご覧になるとよい。@option{--debug} オプション
4730 を使うと、行中のどの部分がソートに使用されているかが明らかになる。
4731
4732 @item --debug
4733 各行のソートに使われている部分を強調表示する。また、使用法に問題が
4734 あるときは、標準エラーに警告メッセージを出す。
4735
4736 @item --batch-size=@var{nmerge}
4737 @opindex --batch-size
4738 @cindex number of inputs to merge, nmerge
4739 一度にマージする入力ファイルの数を多くても @var{nmerge} 個までとする。
4740
4741 @var{nmerge} 個を越える入力ファイルをマージしなければならない場合、@command{sort}
4742 は @var{nmerge} 個のファイルからなるグループを作ってマージし、その結果を
4743 テンポラリ・ファイルに保存する。そして、今度はそれを入力として使用
4744 して、後に続くマージを行うのである。
4745
4746 @var{nmerge} の値が大きいと、実行速度が向上し、ハードディスクの一時的な
4747 使用が減るかもしれないが、その分、メモリの使用量と I/O が増加する。
4748 逆に、@var{nmerge} の値が小さいと、メモリに対する要求と I/O は減少する
4749 かもしれないが、その分、ハードディスクの一時的な使用が増え、実行速度
4750 が低下することになる。
4751
4752 @var{nmerge} の値は、2 以上でなければならない。デフォルトの値は 16 だが、
4753 これは実装次第なので、将来は変わるかもしれない。
4754
4755 @var{nmerge} の値は、オープンできるファイル・ディスクリプタの上限によって
4756 制限されているかもしれない。@samp{ulimit -n} や @samp{getconf OPEN_MAX}
4757 コマンドを使えば、使用しているシステムの上限を知ることができる。
4758 ただし、そうした上限がさらに小さくなっていることもあり、使用中の
4759 プログラムがすでにファイルをいくつかオープンしている場合や、オープン
4760 できるファイルの数についてオペレーティング・システムに他の制限がある
4761 場合が、それに当たる。@var{nmerge} がリソースの上限を越えているときは、
4762 @command{sort} は警告メッセージを出さずに、より小さい値を使用する。
4763
4764 @item -o @var{output-file}
4765 @itemx --output=@var{output-file}
4766 @opindex -o
4767 @opindex --output
4768 @cindex overwriting of input, allowed
4769 出力を標準出力ではなく、@var{output-file} に書き出す。通常、@command{sort} は、
4770 入力をすべて読み込んでから、@var{output-file} をオープンする。従って、
4771 @code{sort -o F F} や "@code{cat F | sort -o F} といったコマンドを使って、
4772 ファイルを直接書き変えるやり方で、ソートをしても問題がない。
4773 これに対して、@option{--merge} (@option{-m}) オプションを指定した場合は、
4774 @command{sort} は、入力をすべて読み込む前に、出力ファイルをオープンするかも
4775 しれない。そのため、@code{cat F | sort -m -o F - G} といったコマンドは
4776 安全ではない。@command{cat} が @file{F} の読み込みを済ます前に、
4777 @command{sort} が @file{F} への書き込みを始めてしまうかもしれないからだ。
4778
4779 @vindex POSIXLY_CORRECT
4780 比較的新しいシステムでも、環境変数 @env{POSIXLY_CORRECT} を設定して
4781 いる場合は、たとえば @samp{sort F -o F} のように、入力ファイルの後に
4782 @option{-o} オプションを置くことはできない。移植を考慮したスクリプトでは、
4783 @option{-o @var{output-file}} を入力ファイルの前で指定するべきである。
4784
4785 @item --random-source=@var{file}
4786 @opindex --random-source
4787 @cindex random source for sorting
4788 @var{file} をランダムデータのソースとして使用する。そのランダムデータは、
4789 @option{-R} オプションでどのランダムハッシュ関数を使うかを決めるのに使用
4790 される。 @xref{Random sources}.
4791
4792 @item -s
4793 @itemx --stable
4794 @opindex -s
4795 @opindex --stable
4796 @cindex sort stability
4797 @cindex sort's last-resort comparison
4798
4799 最後の手段の比較 (last-resort comparison) を行うのを止めて、@command{sort}
4800 を入力順尊重 (stable) にする。このオプションは、フィールド指定オプ
4801 ションや、@option{--reverse} (@option{-r}) 以外のグローバルな順序関係のオプション
4802 が指定されていなければ、効果を持たない。(訳注: いわゆる stable sort
4803 (普通、安定ソート、固定ソートと訳される) である。たとえば、@option{-b}
4804 オプションを使って、先行する空白を無視して比較した場合に、等価となる
4805 行があったとしよう。通常では、それでも、最後の手段の比較によって、
4806 先行する空白の有無も考慮に入れた行全体の比較が行われ、等価な行に
4807 順序を付けることになるが、@option{--stable} オプションが指定されていると、
4808 それをしないので、等価な行は入力されたときの順序で出力される)。
4809
4810 @item -S @var{size}
4811 @itemx --buffer-size=@var{size}
4812 @opindex -S
4813 @opindex --buffer-size
4814 @cindex size for main memory sorting
4815 指定された @var{size} のメインメモリをソート用のバッファとして使用する。
4816 デフォルトでは、@var{size} は 1024 バイトを 1 単位とする数値である。@samp{%}
4817 を後ろに付けると、@var{size} は、物理メモリの何パーセントの意味になる。
4818 後置するのが @samp{K} ならば、@var{size} は 1024 倍され (デフォルトと同じ)、
4819 @samp{M} なら 1,048,576 倍、@samp{G} なら 1,073,741,824 倍される。@samp{T}, @samp{P},
4820 @samp{E}, @samp{Z}, @samp{Y} の後置も、同じ理屈である。@samp{b} を後置すると、@var{size} は
4821 バイト数と見なされ、掛け算は行われない。
4822
4823 このオプションを指定すると、@command{sort} は作業を始めるとき、デフォルト
4824 よりも大きかったり、小さかったりするソート用のバッファを使用する
4825 ことになり、そのために動作速度が向上することがある。とは言え、この
4826 オプションは起動直後のバッファサイズにしか影響を持たない。@command{sort} が
4827 @var{size} を越える入力行に出会うと、バッファのサイズは @var{size} 以上に拡大
4828 されるからである。
4829
4830 @item -t @var{separator}
4831 @itemx --field-separator=@var{separator}
4832 @opindex -t
4833 @opindex --field-separator
4834 @cindex field separator character
4835 各行でソートに使うキーを探すとき、文字 @var{separator} をフィールド・
4836 セパレータとして使用する。デフォルトでフィールドを区分するのは、
4837 非空白文字と空白文字の間の空文字列である。デフォルトの空白は、
4838 スペースとタブだが、@env{LC_CTYPE} のロケールによっては、違うかも
4839 しれない。
4840
4841 たとえば、入力行が @w{@samp{ foo bar}} だったとしよう。@command{sort} はこれを
4842 @w{@samp{ foo}} と @w{@samp{ bar}} のフィールドに分割する。フィールド・セパレータは
4843 前後どちらのフィールドにも属さないことになっている。そこで、
4844 @samp{sort @w{-t " "}} を使用した場合は、同じ入力行が、空っぽのフィールド、
4845 @samp{foo}、それに @samp{bar} という 3 個のフィールドを持つことになる。
4846 とは言え、キー・フィールドが、@option{-k 2} のように、行末まで続く場合や、
4847 @option{-k 2,3} のように、範囲からなる場合は、範囲の両端の間に存在する
4848 フィールド・セパレータは、キー・フィールド中にそのまま保持される。
4849
4850 ASCII NUL をフィールド・セパレータに指定するには、二文字からなる
4851 文字列 @samp{\0} を使用すればよい。@samp{sort -t '\0'} のようにだ。
4852
4853 @item -T @var{tempdir}
4854 @itemx --temporary-directory=@var{tempdir}
4855 @opindex -T
4856 @opindex --temporary-directory
4857 @cindex temporary directory
4858 @vindex TMPDIR
4859 テンポラリファイルの置き場所にディレクトリ @var{tempdir} を使用する。
4860 この指定は、環境変数 @env{TMPDIR} に優先する。このオプションを二回
4861 以上指定すると、テンポラリファイルの置き場所として、指定された
4862 すべてのディレクトリが使用されることになる。大規模なソートや
4863 マージを行って、I/O が足枷になる場合、このオプションを使って、
4864 別のディスク上にあり、別のコントローラを使用している複数の
4865 ディレクトリを指定すると、実行速度が向上することがよくある。
4866
4867 @item --parallel=@var{n}
4868 @opindex --parallel
4869 @cindex multithreaded sort
4870 平行して実行するソートの数を  @var{n} に設定する。デフォルトでは、
4871 @var{n} は、利用できるプロセッサーの数になっている。ただし、上限は
4872 8 であり、これは、それ以上にしても、速度の向上が頭打ちになるからだ。
4873 @var{n} 個のスレッドを使用すると、メモリの使用量が log @var{n} 倍になること
4874 にも注意していただきたい。参照 @ref{nproc invocation}.
4875
4876 @item -u
4877 @itemx --unique
4878 @opindex -u
4879 @opindex --unique
4880 @cindex uniquifying output
4881
4882 通常は、等価と評価される複数の行の内、最初のもののみを出力する。
4883 @option{--check} (@option{-c} または @option{-C}) オプションが指定されている場合は、
4884 等価と評価される行が、2 行連続していないかをチェックする (訳注:
4885 等価な行の連続があると、終了ステータスが 1 になる)。
4886
4887 また、このオプションを指定すると、デフォルトでは実行する、最後の
4888 手段の比較を行わなくなる。
4889
4890 コマンド @code{sort -u} と @code{sort | uniq} は等価である。しかし、その
4891 等価性は、@command{sort} に何か他のオプションが付いたときにまでは及ばない。
4892 たとえば、@code{sort -n -u} は、唯一性のチェックをするとき、行頭にある
4893 数字の並びの値しか調べないが、@code{sort -n | uniq} の方は、行全体を検査
4894 するのである。@xref{uniq invocation}.
4895
4896 @macro zeroTerminatedOption
4897 @item -z
4898 @itemx --zero-terminated
4899 @opindex -z
4900 @opindex --zero-terminated
4901 @cindex process zero-terminated items
4902 項目の区切りに、改行 (ASCII LF) ではなく、ゼロバイトを使用する。
4903 すなわち、入力を ASCII NUL で分離された項目として扱い、出力する
4904 各項目の末尾に ASCII NUL を付加する。このオプションは、@samp{perl -0},
4905 @samp{find -print0}, @samp{xargs -0} などと組み合わせて使用すると、便利な
4906 ことがある。そうしたコマンドも、わがままなファイル名を (空白など
4907 の特殊文字を含んでいる場合でも) きちんと確実に処理するために、
4908 同様なことをしているのである。
4909 @end macro
4910 @zeroTerminatedOption
4911
4912 @end table
4913
4914 @command{sort} の従来の (すなわち BSD と System V の) 実装では、いくつかの
4915 オプションの解釈が互いに異なっていた。とりわけ、@option{-b}, @option{-f}, @option{-n} に
4916 ついてそうだった。GNU の sort は、POSIX 規格の動作に従っており、これは、
4917 たいていの場合 (常にではない!)、System V の動作と同じである。POSIX
4918 によると、@option{-n} はもはや @option{-b} を自動的に設定しない。そこで、動作の
4919 一貫性のために、@option{-M} も同様に変更した。この変更によって、フィールドを
4920 指定するとき、文字の位置がどこを指すかが、微妙なケースでは変わってくる
4921 かもしれない。これに対する唯一の対処法は、明示的に @option{-b} オプションを
4922 指定することである。
4923
4924 @option{-k} によってソート・フィールドを指定するとき、その位置指定の後ろに
4925 オプション文字 @samp{MbdfghinRrV} のうち任意のものを付けることができる。その
4926 場合、そのフィールドは、グローバルな順序関係のオプションを一切引き継が
4927 ないことになる。@option{-b} オプションは、フィールド限定のオプションとしては、
4928 フィールド指定の開始位置と終端位置の片方、あるいは両方に付けることが
4929 できるが、グローバル・オプションから継承した場合は、両方に付いている
4930 ことになる。入力行が、行頭やフィールド間に複数の空白を含んでいる可能性
4931 があって、しかも @option{-t} を使っていない場合は、@option{-k} を使用するとき、@option{-b}
4932 と組み合わせるか、先行する空白を暗黙のうちに無視するオプション (すなわち
4933 @samp{Mghn}) と組み合わせるのが普通だ。そうしないと、フィールドにある先行する
4934 空白の数の違いのせいで、結果がわけのわからないものになりかねないからで
4935 ある。
4936
4937 ソートフィールド指定の開始位置が、行末より後ろや、終端側のフィールド
4938 より後ろに来てしまうと、そのフィールドは空になる。@option{-b} オプションを
4939 指定した場合、フィールド指定の @samp{.@var{c}} の部分は、そのフィールドの最初の
4940 非空白文字から数えることになる。
4941
4942 @vindex _POSIX2_VERSION
4943 @vindex POSIXLY_CORRECT
4944 古いシステムの @command{sort} では、ソート・キーの指定に、@samp{+@var{pos1} [-@var{pos2}]}
4945 という 0 から数える旧式の書式が使用できる。@samp{sort +@var{a}.@var{x} -@var{b}.@var{y}} という
4946 旧式の表現は、もし @var{y} が @samp{0} であるか、指定されていない場合は、
4947 @samp{sort -k @var{a+1}.@var{x+1},@var{b}} と同じである。それ以外の場合は、
4948 @samp{sort -k @var{a+1}.@var{x+1},@var{b+1}.@var{y}}
4949 と同じだ。
4950 @sp 1
4951 (訳注: 旧式の書式と新しい書式の違いは、フィールドやフィールド中の
4952 文字の位置を 0 から数えるか、1 から数えるかだけではない。終端指定の
4953 位置が旧式の書式ではキー・フィールドに含まれないのに対し (つまり、
4954 その直前までなのに対し)、新しい書式では含まれるという違いもある。
4955 そこで、上のようになる。)
4956
4957 この旧式の動作は、環境変数 @env{_POSIX2_VERSION} を使って
4958 (@pxref{Standards conformance}) 有効にしたり、無効にしたりすることができる。
4959 また、@env{POSIXLY_CORRECT} が設定されていないときに、@samp{-@var{pos2}} が存在する旧式
4960 の書式を使っても、有効になる。
4961
4962 標準的なホストで使用することを意図したスクリプトでは、旧式の書式は
4963 使わずに、@option{-k} の方を使用するべきである。たとえば、@samp{sort +2} は使わない
4964 方がよい。@samp{sort ./+2} と解釈されるか、@samp{sort -k 3} と解釈されるか、わから
4965 ないからである。そのスクリプトが、旧式の書式にしか対応していないホスト
4966 でも動作しなければならないのなら、スクリプト中で
4967 @w{@samp{if sort -k 1 </dev/null >/dev/null 2>&1; then @dots{}}} といったテストを
4968 行って、どちらの書式を使うべきかを判断すればよい。
4969
4970 用例をいくつか挙げて、オプションの様々な組み合わせを説明する。
4971
4972 @itemize @bullet
4973
4974 @item
4975 数値としてソートし、降順に (つまり、通常の逆に) 並べる。
4976
4977 @example
4978 sort -n -r
4979 @end example
4980
4981 @item
4982 同時にソートを 4 つまで行う。バッファサイズを 10M にする。
4983
4984 @example
4985 sort --parallel=4 -S 10M
4986 @end example
4987
4988 @item
4989 1 番目と 2 番目のフィールドを無視し、さらに 3 番目のフィールドの
4990 先頭の空白も無視して、アルファベット順に並べる。ここで使っている
4991 キーは一つであり、それは 3 番目のフィールドの最初の非空白文字に
4992 始まって、各行の末尾まで続くすべての文字からなっている。
4993
4994 @example
4995 sort -k 3b
4996 @end example
4997
4998 @item
4999 2 番目のフィールドを数値としてソートし、同点の決着を付けるために、
5000 5 番目のフィールドの 3 番目と 4 番目の文字をアルファベット順で
5001 ソートする。フィールドの区切りには @samp{:} を使用する。
5002
5003 @example
5004 sort -t : -k 2,2n -k 5.3,5.4
5005 @end example
5006
5007 ここで注意していただきたいが、もし @option{-k 2,2n} の代わりに @option{-k 2n}
5008 と書いたなら、@command{sort} は、2 番目のフィールドに始まり、行末まで
5009 続くすべての文字を、主キー (primary key) として、それも「数値」の
5010 キーとして使用したことだろう。@command{sort} を実行するたいていの場合に
5011 ついて言えることだが、複数のフィールドにまたがるキーを数値として
5012 使用しても、期待する結果は得られないものである。
5013
5014 もう一つ注意していただきたい。上の例では、@samp{n} 修飾子を最初のキーの
5015 フィールド終端指定に付けている。これは、@option{-k 2n,2} とか @option{-k 2n,2n}
5016 とか指定しても、同じことだったろう。@samp{b} を除くすべての修飾子は、
5017 キー指定のフィールド開始側に付けるか、フィールド終端側に付けるか、
5018 あるいは、その両方に付けるかにかかわりなく、付けられた「キー・
5019 フィールド全体」に適用されるのである。
5020
5021 @item
5022 パスワードファイルを 5 番目のフィールドでソートする。このとき、
5023 先頭の空白は無視する。5 番目のフィールドが同じ値になる行について
5024 は、3 番目のフィールドのユーザ ID 番号でソートする。フィールドの
5025 区切りは、@samp{:} という文字である。
5026
5027 @example
5028 sort -t : -k 5b,5 -k 3,3n /etc/passwd
5029 sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
5030 sort -t : -b -k 5,5 -k 3,3n /etc/passwd
5031 @end example
5032
5033 この三つのコマンドは同じ働きをする。1 番目のコマンドは、最初の
5034 キーの開始位置では先行する空白を無視し、二番目のキーを数値として
5035 ソートするように指定している。他の二つのコマンドは、グローバル・
5036 オプションは修飾子がないソート・キーによって継承されるという
5037 特性を利用している。この場合、継承がうまく働くのは、@option{-k 5b,5b} と
5038 @option{-k 5b,5} が同じことだからだ (訳注: 「@option{-b} オプションは @dots{}
5039 グローバル・オプションから継承した場合は、(開始位置と終端位置の)
5040 両方に付いていることになる」ので、3 番目のコマンドは、@option{-k 5b,5b}
5041 と指定するのと事実上等しい)。両者が同じになるのは、@samp{.@var{c}} という
5042 文字位置を欠いたフィールド終端の指定では、先頭の空白をスキップしても
5043 しなくても、終端位置は変わらないからである。
5044
5045 @item
5046 一群のログファイルをソートする。主キーとして IPv4 アドレスを
5047 使用し、副キーとしてタイムスタンプを使用する。二つの行の
5048 主キーと副キーが全く同じ場合は、入力されたときと同じ順番で、
5049 その行を出力する。ログファイルは、次のような行からなっている。
5050
5051 @example
5052 4.150.156.3 - - [01/Apr/2004:06:31:51 +0000] message 1
5053 211.24.3.231 - - [24/Apr/2004:20:17:39 +0000] message 2
5054 @end example
5055
5056 フィールドは、ただ 1 個の空白で区切られている。IPv4 アドレスの
5057 ソートは辞書順で行う。たとえば、212.61.52.2 は 212.129.233.201 の
5058 前に来る。61 は 129 よりも小さいからだ。
5059
5060 @example
5061 sort -s -t ' ' -k 4.9n -k 4.5M -k 4.2n -k 4.14,4.21 file*.log |
5062 sort -s -t '.' -k 1,1n -k 2,2n -k 3,3n -k 4,4n
5063 @end example
5064
5065 この例の場合は、@command{sort} を一回起動するだけでは、ことがすまない。
5066 日付が空白 1 個のすぐ後に置かれているだけなのに対して、IPv4 の
5067 構成要素は @samp{.} で区切られているからである。そこで、作業を分割し、
5068 @command{sort} を 2 回起動している。1 回目はタイムスタンプでソートし、
5069 2 回目は IPv4 アドレスでソートするわけだ。タイムスタンプは、年、月、
5070 日のフィールドの順番でソートし、最後に、時・分・秒のフィールドで
5071 ソートしているが、それは @option{-k} オプションを使って、各フィールドを
5072 分離することで実現している。時・分・秒を除いて、各キー・フィールド
5073 の終端を指定する必要はない。@samp{n} や @samp{M} 修飾子は、フィールドの先頭
5074 にある数値や月名の短縮形に基づいてソートを行うが、そうしたものは、
5075 フィールドの境界を越えられないからである。IPv4 アドレスのソートは、
5076 辞書順で行っている。なお、二回目のソートで @samp{-s} を使っているのは、
5077 主キーで一ヶ所にまとめられる行が、副キーによってソートされている
5078 ようにするためである。それに対して、一回目のソートで  @samp{-s} を使って
5079 いるのは、二つのソートの組み合わせ全体を入力順尊重 (stable) にする
5080 ためだ。
5081
5082 @item
5083 アルファベットの大文字小文字の違いを無視してソートし、その順番で
5084 tags ファイルを作成する。
5085
5086 @smallexample
5087 find src -type f -print0 | sort -z -f | xargs -0 etags --append
5088 @end smallexample
5089
5090 この例では、@option{-print0}, @option{-z}, @option{-0} といったオプションを使っている。
5091 そのため、空白などの特殊文字を含んでいるファイル名が、ソート操作に
5092 よって分断されることがない。
5093
5094 @c This example is a bit contrived and needs more explanation.
5095 @c @item
5096 @c Sort records separated by an arbitrary string by using a pipe to convert
5097 @c each record delimiter string to @samp{\0}, then using sort's -z option,
5098 @c and converting each @samp{\0} back to the original record delimiter.
5099 @c
5100 @c @example
5101 @c printf 'c\n\nb\n\na\n' |
5102 @c perl -0pe 's/\n\n/\n\0/g' |
5103 @c sort -z |
5104 @c perl -0pe 's/\0/\n/g'
5105 @c @end example
5106
5107 @item
5108 慣用句 DSU (Decorate Sort Undecorate) の手法 (訳注: 指標を付けて、
5109 ソートして、指標を取る) を採用して、短いものから長いものへと、
5110 行を並べる。
5111
5112 @example
5113 awk '@{print length, $0@}' /etc/passwd | sort -n | cut -f2- -d' '
5114 @end example
5115
5116 一般に、あるデータが @command{sort} コマンドでは直接ソートできないとか、
5117 効率が悪いというとき、そうしたデータをソートするのに、この手法が
5118 役に立つ。
5119
5120 @item
5121 ディレクトリをランダムな順番でで並べる。ただし、各ディレクトリ内の
5122 ファイルについては、その順番を維持する。一例を挙げると、この方法で
5123 演奏リストを作成すれば、アルバムはシャッフルするけれど、各アルバム
5124 内の曲は通常のソート順で演奏するといったことが可能になる。
5125
5126 @example
5127 ls */* | sort -t / -k 1,1R -k 2,2
5128 @end example
5129
5130 @end itemize
5131
5132
5133 @node shuf invocation
5134 @section @command{shuf}: テキストをシャッフルする
5135
5136 @pindex shuf
5137 @cindex shuffling files
5138
5139 @command{shuf} は、入力された行をランダムに並べ替えてから出力することによって、
5140 入力のシャッフルを行う。どの並び替えが出力されるかは、確率的に等しい。
5141 @sp 1
5142 書式:
5143
5144 @example
5145 shuf [@var{option}]@dots{} [@var{file}]
5146 shuf -e [@var{option}]@dots{} [@var{arg}]@dots{}
5147 shuf -i @var{lo}-@var{hi} [@var{option}]@dots{}
5148 @end example
5149
5150 @command{shuf} には三つの動作モードがあり、それぞれ、入力行をどこから取得
5151 するかが違っている。デフォルトでは、標準入力から行を読み込む。以下の
5152 オプションは、動作モードを変更する。
5153
5154 @table @samp
5155
5156 @item -e
5157 @itemx --echo
5158 @opindex -c
5159 @opindex --echo
5160 @cindex command-line operands to shuffle
5161 コマンドラインの各オペランドを入力行として扱う。
5162
5163 @item -i @var{lo}-@var{hi}
5164 @itemx --input-range=@var{lo}-@var{hi}
5165 @opindex -i
5166 @opindex --input-range
5167 @cindex input range to shuffle
5168 @var{lo} から @var{hi} の範囲の符号なしの 10 進整数を 1 行に 1 個含むファイル
5169 から入力があったかのように動作する。
5170
5171 @end table
5172
5173 @command{shuf} の他のオプションは、どの動作モードでも、その動作に影響を
5174 与える。
5175
5176 @table @samp
5177
5178 @item -n @var{lines}
5179 @itemx --head-count=@var{count}
5180 @opindex -n
5181 @opindex --head-count
5182 @cindex head of output
5183 最大でも @var{count} 行までしか出力しない。デフォルトでは、入力された
5184 すべての行を出力する。
5185
5186 @item -o @var{output-file}
5187 @itemx --output=@var{output-file}
5188 @opindex -o
5189 @opindex --output
5190 @cindex overwriting of input, allowed
5191 出力を、標準出力ではなく、@var{output-file} に書き出す。@command{shuf} は、
5192 入力をすべて読み込んでから、@var{output-file} をオープンする。従って、
5193 @code{shuf -o F <F} や @code{cat F | shuf -o F} というコマンドを使って、
5194 ファイルを直接書き変える形でシャッフルしても安全である。
5195
5196 @item --random-source=@var{file}
5197 @opindex --random-source
5198 @cindex random source for shuffling
5199 ランダムデータのソースとして  @var{file} を使用する。そのランダムデータは
5200 どんな並べ替えになるかを決めるのに使用される。@xref{Random sources}.
5201
5202 @item -r
5203 @itemx --repeat
5204 @opindex -r
5205 @opindex --repeat
5206 @cindex repeat output values
5207 値の反復出力を行う。別の言い方をすると、置き換えるものについて
5208 そのつど選択を行う。このオプションを使用した場合、出力は入力を
5209 並び替えたものになるのではない。そうではなく、各出力行がすべての
5210 入力からランダムに選ばれるのである。このオプションは、たいてい
5211 @option{--head-count} と組み合わせて使用する。@option{--head-count} を指定
5212 しないと、@command{shuf} はいつまでも出力を続けることになる。
5213 (coreutils-8.22 の新機能)
5214
5215 @zeroTerminatedOption
5216
5217 @end table
5218
5219 例を挙げる。
5220
5221 @example
5222 shuf <<EOF
5223 A man,
5224 a plan,
5225 a canal:
5226 Panama!
5227 EOF
5228 @end example
5229
5230 @noindent
5231 上記の結果は、こんな出力になるかもしれない。
5232
5233 @example
5234 Panama!
5235 A man,
5236 a canal:
5237 a plan,
5238 @end example
5239
5240 @noindent
5241 同様に、次のコマンドの出力は、
5242
5243 @example
5244 shuf -e clubs hearts diamonds spades
5245 @end example
5246
5247 @noindent
5248 こうなるかもしれない。
5249
5250 @example
5251 clubs
5252 diamonds
5253 spades
5254 hearts
5255 @end example
5256
5257 @noindent
5258 下記は、@samp{shuf -i 1-4} というコマンドの出力の一例である。
5259
5260 @example
5261 4
5262 2
5263 1
5264 3
5265 @end example
5266
5267 @noindent
5268 上記のどの例でも、入力行は 4 行である。従って、入力は 24 とおりに並べ
5269 替えることが可能であり、@command{shuf} が生成するのは、そのどれか一つである。
5270 一般的に言うと、入力行が @var{n} 行なら、@var{n}! とおりに (@var{n} の階乗、すなわち、
5271 @w{@var{n} * (@var{n} - 1) * @dots{} * 1} とおりに) 並べ替えて、出力することができる。
5272
5273 @noindent
5274 それぞれが 0 から 9 までの範囲にある数値を 50 回ランダムに出力する
5275 には、次のようにする。
5276
5277 @example
5278 shuf -r -n 50 -i 0-9
5279 @end example
5280
5281 @noindent
5282 コイン・トス 100 回をシミュレートする。
5283
5284 @example
5285 shuf -r -n 100 -e Head Tail
5286 @end example
5287
5288 @exitstatus
5289
5290
5291 @node uniq invocation
5292 @section @command{uniq}: ファイルから重複を省く
5293
5294 @pindex uniq
5295 @cindex uniquify files
5296
5297 @command{uniq} は、指定された @var{input} ファイルにある行を、重複を省いて書き出す。
5298 ファイルが指定されていない場合や、@var{input} として @samp{-} が指定されている
5299 場合は、標準入力を対象とする。
5300 @sp 1
5301 書式:
5302
5303 @example
5304 uniq [@var{option}]@dots{} [@var{input} [@var{output}]]
5305 @end example
5306
5307 デフォルトでは、@command{uniq} は入力された行を表示するとき、隣接する同一行
5308 があれば、出力に重複する行が現れないように、最初の行だけを残して、残りの
5309 行を捨ててしまう。また、オプションによっては、重複しない行を捨てることや、
5310 すべての隣接する同一行を捨てることもできる。
5311
5312 入力はソートされている必要はないが、重複する入力行が検出されるのは、
5313 それが隣接しているときだけである。もし、隣接していない重複行も捨てたい
5314 のなら、@code{sort -u} を使うとよいだろう。 @xref{sort invocation}.
5315
5316 @vindex LC_COLLATE
5317 比較には @env{LC_COLLATE} ロケール・カテゴリが指定しているルールを使用
5318 する。
5319
5320 @var{output} ファイルが指定されていない場合、@command{uniq} は標準出力に書き出す。
5321
5322 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
5323
5324 @table @samp
5325
5326 @item -f @var{n}
5327 @itemx --skip-fields=@var{n}
5328 @opindex -f
5329 @opindex --skip-fields
5330 重複の検査を行う前に、各行のフィールドを @var{n} 個スキップする。その行に
5331 @var{n} 個より少ないフィールドしかない場合は、比較に null 文字列を使用
5332 する。フィールドとは、少なくとも 1 個以上のスペースやタブで間を区切
5333 られた、スペースやタブを含まない文字の連続である。
5334
5335 互換性のために、@command{uniq} は @option{-@var{n}} という古いオプションの書式をサポート
5336 している。新しいスクリプトでは、@option{-f @var{n}} の方を使うべきである。
5337
5338 @item -s @var{n}
5339 @itemx --skip-chars=@var{n}
5340 @opindex -s
5341 @opindex --skip-chars
5342 重複の検査を行う前に、@var{n} 文字スキップする。その行に @var{n} 個より少ない
5343 文字しかない場合は、比較に null 文字列を使用する。フィールドを
5344 スキップするオプションと、文字をスキップするオプションの両方を
5345 使っている場合は、フィールドのスキップが先に行われる。
5346
5347 @vindex _POSIX2_VERSION
5348 古めのシステムでは、@command{uniq} が @option{+@var{n}} という古いオプションの書式を
5349 サポートしている。環境変数 @env{_POSIX2_VERSION} を使えば、この旧式の
5350 動作を有効したり、無効にしたりできる (@pxref{Standards conformance})。
5351 とは言え、移植を考慮したスクリプトでは、
5352 この環境変数に動作が依存するコマンドの使用は、避けた方がよい。
5353 たとえば、@samp{uniq +10} ではなく、@samp{uniq ./+10} や @samp{uniq -s 10} を使う
5354 べきである。前者では、@samp{+10} が、オプションかファイル名か、まぎらわ
5355 しいからだ。
5356
5357 @item -c
5358 @itemx --count
5359 @opindex -c
5360 @opindex --count
5361 各行に出現回数を付けて表示する。
5362
5363 @item -i
5364 @itemx --ignore-case
5365 @opindex -i
5366 @opindex --ignore-case
5367 行を比較するとき、アルファベットの大文字小文字を区別しない。
5368
5369 @item -d
5370 @itemx --repeated
5371 @opindex -d
5372 @opindex --repeated
5373 @cindex repeated lines, outputting
5374 重複していない行を除去する。このオプションを単独で使った場合、@command{uniq}
5375 は、連続する同一行のうち、最初の 1 行だけを表示し、それ以外の何も
5376 表示しない。
5377
5378 @item -D
5379 @itemx --all-repeated[=@var{delimit-method}]
5380 @opindex -D
5381 @opindex --all-repeated
5382 @cindex all repeated lines, outputting
5383 入力行のうち、連続する同一行の二行目以降を除去せず、重複していない
5384 行だけを除去する。このオプションが役に立つのは、主として、大文字
5385 小文字を無視するとか、選択したフィールドのみを比較するとかいった、
5386 他のオプションと組み合わせて使うときである。@var{delimit-method} は
5387 省略可能であり、指定した場合は、重複行のグループ間の区切り方を
5388 指示することになる。@var{delimit-method} は、以下の一つでなければ
5389 ならない。
5390
5391 @table @samp
5392
5393 @item none
5394 重複行のグループ間に、区切りの印を置かない。@option{--all-repeated}
5395 (@option{-D}) とのみ指定するのと同じことである。
5396
5397 @item prepend
5398 重複行の各グループの前に改行を出力する。
5399 @macro nulOutputNote
5400 @option{--zero-terminated}
5401 (@option{-z}) を指定している場合は、区切りの印として
5402 改行の代わりに、
5403 ゼロバイト (ASCII NUL) を使用する。
5404 @end macro
5405 @nulOutputNote
5406
5407 @item separate
5408 重複行のグループ間を 1 個の改行で分離する。これは、@samp{prepend}
5409 を使うのとほぼ同じだが、最初のグループの前に区切りの印を挿入
5410 しないのが異なっている。それ故、ユーザが出力を直接見る場合に、
5411 より適しているかもしれない。@nulOutputNote
5412 @end table
5413
5414 @macro ambiguousGroupNote
5415 注意していただきたいが、グループ同士を改行で分離しているとき、
5416 入力ストリームに連続する 2 行以上の空行があると、出力がまぎらわ
5417 しいものになる。これを避けるには、入力を @samp{tr -s '\\n'} でフィルタ
5418 リングして、連続する改行をそれぞれの場所で 1 個の改行に置き換え
5419 ればよい。
5420 @end macro
5421 @ambiguousGroupNote
5422
5423 @c FIXME: give an example showing *how* it's useful
5424 このオプションは、GNU による拡張である。
5425
5426 @item --group[=@var{delimit-method}]
5427 @opindex --group
5428 @cindex all lines, grouping
5429 すべての行を出力し、他と区別される各グループの間に区切りを入れる。
5430 @nulOutputNote @var{delimit-method}
5431 は省略可能であり、指定した場合は、グループ間の区切り方を指示する
5432 ことになる。@var{delimit-method} は、以下の一つでなければならない。
5433 (coreutils-8.22 の新機能)
5434
5435 @table @samp
5436
5437 @item separate
5438 他と区別されるグループを 1 個の区切りの印で分離する。これが、
5439 何も指定されていないときの、デフォルトの区切り方であり、出力を
5440 ユーザに直接見せる場合に適している。
5441
5442 @item prepend
5443 他と区別される各グループの前に区切りの印を出力する。
5444
5445 @item append
5446 他と区別される各グループの後ろに区切りの印を出力する。
5447
5448 @item both
5449 他と区別される各グループの前後に区切りの印を出力する。
5450 @end table
5451
5452 @ambiguousGroupNote
5453
5454 このオプションは、GNU による拡張である。
5455
5456 @item -u
5457 @itemx --unique
5458 @opindex -u
5459 @opindex --unique
5460 @cindex unique lines, outputting
5461 連続する同一行は、1 行目も除去する。このオプションを単独で使うと、
5462 @command{uniq} はユニークな (訳注: この場合、同一行が直後に続かないという
5463 意味) 行だけを表示し、それ以外の何も表示しない。
5464
5465 @item -w @var{n}
5466 @itemx --check-chars=@var{n}
5467 @opindex -w
5468 @opindex --check-chars
5469 各行で (フィールドや文字をスキップする指定があれば、スキップした
5470 後で) 文字を何個まで比較するかを指定する。デフォルトでは、行の残り
5471 全部が比較の対象になる。
5472
5473 @zeroTerminatedOption
5474
5475 @end table
5476
5477 @exitstatus
5478
5479
5480 @node comm invocation
5481 @section @command{comm}: ソート済みの二つのファイルを一行づつ比較する
5482
5483 @pindex comm
5484 @cindex line-by-line comparison
5485 @cindex comparing sorted files
5486
5487 @command{comm} は、二つの入力ファイルの共通する行と独自な行を、標準出力に区別
5488 して書き出す。@samp{-} というファイル名は、標準入力を意味している。
5489 @sp 1
5490 書式:
5491
5492 @example
5493 comm [@var{option}]@dots{} @var{file1} @var{file2}
5494 @end example
5495
5496 @vindex LC_COLLATE
5497 入力ファイルは、@command{comm} に渡す前に、@env{LC_COLLATE} のロケールによって
5498 規定された照合順序でソートされていなければならない。入力ファイルが
5499 改行以外の文字で終わっている場合は、自動的に改行が追加される。
5500 @command{sort} コマンドをオプションなしで実行すると、@command{comm} の入力にふさわしい
5501 ファイルが必ず得られる。
5502
5503 @cindex differing lines
5504 @cindex common lines
5505 @c FIXME: when there's an option to supply an alternative separator
5506 @c string, append "by default" to the above sentence.
5507 オプションを付けずに実行すると、@command{comm} は 3 列の出力を生成する。
5508 1 列目は @var{file1} にのみある行であり、2 列目は @var{file2} にのみある行、そして
5509 3 列目は両方のファイルに共通する行である。各列は、1 個のタブ文字で
5510 区切られる。
5511
5512 @opindex -1
5513 @opindex -2
5514 @opindex -3
5515 @option{-1}, @option{-2}, @option{-3} というオプションは、対応する列 (と区切り記号) を
5516 表示しないようにする。オプションについては、「共通オプション」の章も
5517 参照すること。@ref{Common options}.
5518
5519 比較のための他のユーティリティとは違って、@command{comm} の終了ステータスは、
5520 比較結果の如何によらない。@command{comm} は、正常終了すると 0 の終了コードを
5521 返す。エラーがあれば、0 以外のステータスで終了する。
5522
5523 @macro checkOrderOption{cmd}
5524 @option{--check-order} を指定した場合、入力がソートされていないと、エラー
5525 メッセージを出して、実行を中断する。@option{--nocheck-order} オプションを指定
5526 した場合は、入力がソートされていなくても、エラーメッセージを出すことは
5527 ない。どちらのオプションも指定されていない場合に、入力がソートされて
5528 いないとの診断を下すのは、
5529 @ifset JOIN_COMMAND
5530 片方の入力ファイルにもう一方と対にならない
5531 行が見つかったときだけであり、それも入力ファイルのどちらも空ではなく、
5532 中身を持っているときだけである。
5533 @end ifset
5534 @ifclear JOIN_COMMAND
5535 片方の入力ファイルにもう一方と対にならない
5536 行が見つかったときだけである。
5537 @end ifclear
5538 入力ファイルがソートされていないと診断
5539 すると、@command{\cmd\}
5540 は 0 以外のステータスで終了する (従って、そうした出力は
5541 使用するべき
5542 ではない)。
5543
5544 入力ファイルがきちんとソートされていず、しかも、対にならない行を
5545 含む場合に、@option{--nocheck-order} を指定して、そうしたファイルを @command{\cmd\} で
5546 無理矢理処理しても、何か特定の結果をもたらすことは保証できない。おそらく
5547 出力は、期待に添わないものになるだろう。
5548 @end macro
5549 @checkOrderOption{comm}
5550
5551 @table @samp
5552
5553 @item --check-order
5554 入力ファイルのどちらかの内容がきちんとソートされていないと、
5555 エラーメッセージを出して、実行に失敗する。
5556
5557 @item --nocheck-order
5558 入力ファイルの内容がソートされた順番になっているかどうかを、
5559 どちらのファイルについてもチェックしない。
5560
5561 その他のオプション。
5562
5563 @item --output-delimiter=@var{str}
5564 出力における隣り合う列の間に、デフォルトのタブ文字 1 個ではなく、
5565 @var{str} を出力する。
5566
5567 区切り記号の @var{str} は、空であってはならない。
5568
5569 @end table
5570
5571 @node ptx invocation
5572 @section @command{ptx}: パミューテド・インデックスを作成する
5573
5574 @pindex ptx
5575
5576 @command{ptx} の基本的な働きは、テキストファイルを読み込んで、パミューテド・
5577 インデックスを作成することである。パミューテド・インデックスというのは、
5578 各キーワードに前後の文脈を付けて索引項目にするインデックスのことだ。
5579 @sp 1
5580 (訳注: パミューテド・インデックスは、KWIC (Key Word In Context)
5581 インデックスとも言われる。簡単に言えば、本文にあるとおり、キーワードに
5582 前後の文脈を付けて項目として立てる索引のことである。たとえば、"The cow
5583 jumped over the moon." という文があるとしよう。今、キーワードを
5584 角カッコ ([]) で示すとすると、@command{ptx} による一番素朴なパミューテド・
5585 インデックスの作成では、この文から、
5586
5587 @example
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 The cow jumped over [the] moon.
5593 The cow jumped over the [moon].
5594 @end example
5595
5596 @noindent
5597 という、キーワードの位置だけが違う 6 個の索引項目が作られ、キーワード
5598 によってソートされて、出力されるのである。「パミューテド (permuted)」
5599 というのは、文中でキーワードが順番に移動するのを、円順列 (cyclic
5600 permutation) に見立てているかららしい。「順列索引」と訳されることも
5601 ある。パミューテド・インデックスの代表的な例としては、英語などの聖書の
5602 巻末に付属している文脈付きの語句索引、「コンコーダンス」を挙げることが
5603 できる。実際、この文書でもコンコーダンスをパミューテド・インデックスの
5604 同義語として使用している。なお、この @command{ptx} プログラムは、日本語に
5605 対応していない。)
5606 @sp 1
5607 @command{ptx} 実行の書式は次のうちのどちらかである。
5608
5609 @example
5610 ptx [@var{option} @dots{}] [@var{file} @dots{}]
5611 ptx -G [@var{option} @dots{}] [@var{input} [@var{output}]]
5612 @end example
5613
5614 @option{-G} (または、それと等価な @option{--traditional}) オプションを指定すると、
5615 GNU によるすべての拡張が無効になり、従来のモードで動作するようになる。
5616 従って、いくつかの制限が課されるようになり、プログラムのオプションの
5617 デフォルトの値がいくつか変更される。@option{-G} が指定されていない場合は、GNU
5618 による拡張が常に有効になる。@command{ptx} に対する GNU の拡張については、
5619 この文書では折に触れて説明している。拡張の詳細なリストについては、
5620 「GNU による @command{ptx} の拡張」の節を御覧になっていただきたい。
5621 @xref{Compatibility in ptx}.
5622
5623 個々のオプションについては、以下に続く節で説明する。
5624
5625 GNU による拡張が有効になっていれば、オプションの後ろに 0 個以上の
5626 @var{file} を指定することができる。@var{file} を一つも指定しない場合は、標準入力が
5627 読み込まれる。@var{file} を 1 個以上指定した場合、それは入力ファイルの名前で
5628 あり、入力ファイルはすべて順番に、あたかもすべてのファイルが結合されて
5629 いるかのように読み込まれる。とは言え、各ファイル同士は文脈的に完全に
5630 分離しており、参照箇所情報の自動作成を指定している場合に、参照箇所の
5631 ファイル名や行番号が指し示すのは、個々の入力テキストファイルのそれで
5632 ある。どの場合でも、@command{ptx} は、パミューテド・インデックスを標準出力に
5633 出力する。
5634
5635 GNU による拡張が有効になっていない場合、すなわち、プログラムが従来
5636 モードで動作する場合は、オプションのほかに 0 から 2 個のパラメータを
5637 指定できる。パラメータがない場合、プログラムは標準入力を読み込んで、
5638 標準出力にパミューテド・インデックスを出力する。パラメータが 1 個だけ
5639 の場合、それが示しているのは、標準入力の代わりに読み込まれるテキスト
5640 ファイル (訳注: 上記書式の @var{input}) の名前である。パラメータが二つある
5641 場合、それぞれが示しているのは、読み込み対象の @var{input} ファイルと出力先
5642 の @var{output} ファイルの名前だ。この場合、二番目のパラメータによって指定
5643 されたファイルの元の内容が破壊されることに、くれぐれも気をつけていた
5644 だきたい。この動作は、System V の @command{ptx} との互換性を維持するために
5645 必要になっているものだが、通常 GNU の規格では、オプションによって
5646 指定されるのではない出力パラメータを、使用しないように勧めている。
5647
5648 オプションの値や入力テキストファイルとして指定するいかなるファイルに
5649 対しても、ファイル名の代わりに 1 個のダッシュ @kbd{-} を使用することが
5650 できる。その場合は、標準入力が使われることになる。もっとも、この習慣を
5651 プログラム 1 回の起動につき 1 回以上使うのは、たぶん理屈に合わない。
5652
5653 @menu
5654 * General options in ptx::   プログラム全体の動作に関係するオプション。
5655 * Charset selection in ptx:: 使用している文字セットについて。
5656 * Input processing in ptx::  入力のフィールドと文脈、及びキーワードの選択。
5657 * Output formatting in ptx:: 出力フォーマットのタイプ、及びフィールドの幅。
5658 * Compatibility in ptx::     
5659 @end menu
5660
5661
5662 @node General options in ptx
5663 @subsection 一般オプション
5664
5665 @table @samp
5666
5667 @item -G
5668 @itemx --traditional
5669 すでに述べたように、このオプションは @command{ptx} に対する GNU による
5670 拡張のすべてを無効にして、動作を従来モードに切り替える。
5671
5672 @item --help
5673 簡単なヘルプメッセージを標準出力に表示し、それ以上の処理をせずに
5674 終了する。
5675
5676 @item --version
5677 プログラムのバージョンを標準出力に表示し、それ以上の処理をせずに
5678 終了する。
5679
5680 @end table
5681
5682 @exitstatus
5683
5684
5685 @node Charset selection in ptx
5686 @subsection @command{ptx} が使用する文字セット
5687
5688 @c FIXME:  People don't necessarily know what an IBM-PC was these days.
5689 現在の設定では、@command{ptx} プログラムは、入力ファイルが符号化に 8-bit の
5690 ISO 8859-1 コード (Latin-1 文字セットとも言われる) を使用しているものと
5691 見なすようになっている。ただし、MS-DOS 用にコンパイルされている場合は
5692 別で、その場合は、IBM-PC の文字セットが使用される (GNU の @command{ptx} が
5693 MS-DOS マシンで使えるかどうか、今ではわからないけれど)。7-bit ASCII
5694 と比べると、ISO 8859-1 の文字セットは、アルファベットの部分が異なって
5695 いる。そのため、正規表現におけるマッチングの振る舞いが変わってくる。
5696 キーワードに対するデフォルトの正規表現が (訳注: つまり、GNU の拡張が
5697 有効なときの @samp{\w+} が)、英語で使用しない文字や、ウムラウトやアクセント
5698 のような発音区別符の付いた文字を受け入れることになるわけである。
5699 とは言え、キーワードのソート方法は今だに大雑把であり、使用している
5700 文字セットの順序にきわめて盲目的に従っている。
5701
5702 @table @samp
5703
5704 @item -f
5705 @itemx --ignore-case
5706 ソートするとき、小文字を大文字と同じものとして扱う。
5707
5708 @end table
5709
5710
5711 @node Input processing in ptx
5712 @subsection 単語の選択と入力の処理
5713
5714 @table @samp
5715
5716 @item -b @var{file}
5717 @itemx --break-file=@var{file}
5718
5719 このオプションを使えば、単語を構成するのはどんな文字かを、@option{-W} とは
5720 別のやり方で定義することができる。このオプションでファイルを指名し、
5721 そこに、単語の構成要素になることができない文字のリストを入れておく
5722 のである。このファイルは、@dfn{Break file} と呼ばれる。Break file に
5723 含まれていないいかなる文字も、単語の構成要素になるわけだ。@option{-b}
5724 と @option{-W} の両方のオプションが指定されている場合は、@option{-W} の方が優先
5725 され、@option{-b} は無視される。
5726
5727 GNU の拡張が有効になっているとき、改行を単語区切り文字 (break
5728 character) にしない唯一の方法は、単語区切り文字をすべて Break file
5729 に書き込み、そこに改行を全く含めないことである。Break file 末尾の
5730 改行も除かなければならない。GNU の拡張が無効な場合、スペース、
5731 タブ、改行は、それが Break file に含まれていなくても、常に単語
5732 区切り文字と見なされる。
5733
5734 @item -i @var{file}
5735 @itemx --ignore-file=@var{file}
5736
5737 このオプションで指名するファイルには、出力するコンコーダンスで
5738 キーワードとして採用しない単語のリストを入れておく。このファイルは、
5739 @dfn{Ignore file} と呼ばれる。このファイルは、1 行 1 単語の形式であり、
5740 単語の分離は常に行末によって行われて、@option{-S} オプションの値の影響を
5741 受けることはない。
5742
5743 @item -o @var{file}
5744 @itemx --only-file=@var{file}
5745
5746 このオプションで指名するファイルには、出力するコンコーダンスで
5747 キーワードとして採用する単語のリストを入れておく。このファイルに
5748 書かれていないどんな単語も、キーワードとして採用されることはない。
5749 このファイルは、@dfn{Only file} と呼ばれる。このファイルは、1 行 1 単語
5750 の形式であり、単語の分離は常に行末によって行われて、@option{-S} オプション
5751 の値の影響を受けることはない。
5752
5753 Only file として使われるデフォルトのファイルは存在しない。Only file
5754 と Ignore file の両方が指定されている場合に、ある単語がキーワードと
5755 見なされるのは、その単語が Only file に存在し、しかも Ignore file
5756 に存在しないときだけである。
5757
5758 @item -r
5759 @itemx --references
5760
5761 各入力行において、行頭にあるホワイトスペース以外の文字の連続を
5762 参照箇所情報 (訳注: たとえば、ファイル名、ページ番号、行番号など)
5763 として扱うようにする。この参照箇所情報は、その入力行がどこに
5764 あるかを、作成されるパミューテド・インデックス中で示すために
5765 用いられる。参照箇所情報の生成についての詳細は、次節「出力の
5766 フォーマット」を御覧いただきたい。@xref{Output formatting in ptx}.
5767 このオプションを使用すると、@option{-S} オプションのデフォルトの値が
5768 変更されることになる (訳注: すなわち、GNU の拡張が有効な場合も、
5769 @option{-S} オプションのデフォルト値が文末ではなく、行末になる)。
5770
5771 このオプションを使用したとき、@command{ptx} プログラムは、参照箇所情報が
5772 出力される文脈に混入しないようにするが、その試みはそれほど徹底した
5773 ものではない。しかし、文脈が改行できちんと終止していれば、@command{ptx}
5774 はその試みに成功する。もし、@option{-r} オプションが @option{-S} オプションの
5775 デフォルト値とともに使われているか、あるいは、GNU の拡張が無効に
5776 なっているならば、この条件は必ず満たされることになる。従って、
5777 その場合は、参照箇所情報が出力される文脈からきちんと分離される。
5778 @sp 1
5779 (訳注: 文脈 (context) というのは、出力については、キーワードと
5780 その前後と考えておけばよいが、入力について言うと、@command{ptx} が操作の
5781 対象にする本文の単位 --- 入力のまとまり --- を指すことになる。@option{-S}
5782 の値によって、普通は文か、行になる。)
5783
5784 @item -S @var{regexp}
5785 @itemx --sentence-regexp=@var{regexp}
5786
5787 このオプションでは、行の終わり、または文の終わりを示す正規表現を
5788 指定する。
5789 @sp 1
5790 (訳注: もう少し説明すると、このオプションで指定するのは、入力を
5791 何で区切るかということである。改行で区切れば、いわゆる行が、@command{ptx}
5792 の操作の対象となる入力のまとまり (入力の単位) になり、ピリオド
5793 などで区切れば、いわゆる文が、入力のまとまりになる。このまとまりが
5794 @command{ptx} にとっての文脈でもある。ただし、出力では、文脈のすべてが
5795 表示されるとはかぎらない。なお、そうしたければ、行末や文末以外で
5796 入力を区切ることもできる。)
5797 @sp 1
5798 実際のテキストでは、ここで指定される正規表現のみが、行の終わりや
5799 文の終わりの指標として使われているとはかぎらない。また、入力の
5800 区切りに何を指定しようとも、このオプションの外で特別な意味を
5801 持つことはない (訳注: すなわち、オプション @option{-A}, @option{-i}, @option{-o} など
5802 には影響が及ばない)。デフォルトでは、GNU の拡張が有効なとき、@option{-r}
5803 オプションが使われていなければ、文の終わりの方が入力の区切りとして
5804 使用される。その場合、次の正規表現が GNU Emacs から取り込まれる。
5805
5806 @example
5807 [.?!][]\"')@}]*\\($\\|\t\\|  \\)[ \t\n]*
5808 @end example
5809
5810 GNU の拡張が無効になっている場合や、@option{-r} オプションが指定されて
5811 いる場合は、行の終わりの方が入力の区切りとして使用される。その場合、
5812 デフォルトの正規表現は、単に次のものである。
5813
5814 @example
5815 \n
5816 @end example
5817
5818 空の @var{regexp} を使用するのは、行末や文末の認識を全く無効にするのと
5819 同じである。その場合、ファイル全体が、たった 1 個の長い行、
5820 あるいは、長い文と見なされることになる。ユーザとしては、オプション
5821 @option{-F ""} を使用して、省略の印の生成も全く行わないようにしたくなる
5822 かもしれない。@xref{Regexps, , Syntax of Regular Expressions, emacs,
5823 The GNU Emacs Manual}.
5824
5825 キーワードがたまたま入力行や入力文の先頭近くにあると、出力する
5826 文脈行の行頭に、使用しない領域が生ずることがよくある。また、
5827 キーワードが入力行や入力文の末尾近くにあると、出力する文脈行の
5828 行末に、使用しない領域がしばしば生ずる。@command{ptx} プログラムは、
5829 その文脈を折り返して、そうした不使用領域を埋めようと試みる。
5830 すなわち、その入力行や入力文の後続する部分 (@var{tail}) を使って、
5831 出力する行の左にある不使用領域を埋め、その入力行や入力文の
5832 先行する部分 (@var{head}) を使って、出力する行の右にある不使用領域を
5833 埋めるのである。
5834
5835 このオプションの引数中では、ユーザーの便宜のために、C 言語由来の
5836 よく使うバックスラッシュ・エスケープシーケンスの多くが、@command{ptx}
5837 そのものによって認識され、対応する文字に変換されるようになっている。
5838
5839 @item -W @var{regexp}
5840 @itemx --word-regexp=@var{regexp}
5841
5842 このオプションでは、各キーワードとなる単語とはどのようなものかを
5843 示す正規表現を指定する。デフォルトでは、GNU の拡張が有効になって
5844 いれば、単語とはアルファベットの文字の連続である。すなわち、使用
5845 される正規表現は @samp{\w+} だ。GNU の拡張が無効な場合、デフォルトで
5846 単語と見なされるのは、何であれ、スペース、タブ、改行で区切られる
5847 ものである。この場合、使用される正規表現は @samp{[^ \t\n]+} になる。
5848
5849 @var{regexp} に空の文字列を指定するのは、このオプションを使用しないのと
5850 同じことである。@xref{Regexps, , Syntax of Regular Expressions, emacs,
5851 The GNU Emacs Manual}.
5852
5853 このオプションの引数中では、ユーザーの便宜のために、C 言語で
5854 見られるような、よく使うバックスラッシュ・エスケープシーケンスの
5855 多くが、@command{ptx} そのものによって認識され、対応する文字に変換される
5856 ようになっている。
5857
5858 @end table
5859
5860
5861 @node Output formatting in ptx
5862 @subsection 出力のフォーマット
5863
5864 出力のフォーマットを決めるのは、主として @option{-O} と @option{-T} オプションだが、
5865 両者については、以下のオプション一覧で説明している。@option{-O} も @option{-T} も
5866 指定されず、しかも、GNU の拡張が有効な場合、@command{ptx} プログラムは、
5867 ダム端末に適した出力フォーマットを選択する。各キーワードは一行の
5868 中央に表示され、前後の文脈がその左右に出力される。コンコーダンス
5869 としての出力が一目でわかるように (訳注: すなわち、どれがキーワードで、
5870 どれがその前後の語句かわかりやすいように)、各フィールドはきちんと
5871 揃えられる。おまけの機能として、次のものがある。参照箇所情報の
5872 自動作成が @option{-A} オプションによって選択され、参照箇所が左側の文脈の
5873 前に表示される場合には (すなわち、@option{-R} オプションが選択されていない
5874 場合には)、参照箇所の後ろにコロンが追加される。こうしておくと、
5875 参照箇所を GNU Emacs の @code{next-error} 処理にうまく渡せるようになる
5876 のである。このデフォルトの出力フォーマットでは、改行やタブのような
5877 ホワイトスペース文字は、それぞれ単にただ 1 個のスペースに変換される
5878 だけであり、連続するスペースをわざわざ圧縮するようなことは行われない。
5879 この動作は、将来変更されるかもしれない。そうしたホワイトスペース文字
5880 を除いて、使用している 256 文字からなる文字セット中のほかのすべての
5881 文字は、入力から出力へと手を加えずにそのまま送り出される。
5882
5883 出力フォーマットは、以下のオプションによって、さらに制御される。
5884
5885 @table @samp
5886
5887 @item -g @var{number}
5888 @itemx --gap-size=@var{number}
5889
5890 出力行の各フィールドは、ホワイトスペースによって区切られるが、
5891 そのフィールド同士の間隔の最小サイズを指定する。
5892
5893 @item -w @var{number}
5894 @itemx --width=@var{number}
5895
5896 最終的に出力される各行の最大長を指定する。参照箇所を使用する際、
5897 その長さが最大長に含まれるかどうかは、@option{-R} オプションを付けるか
5898 付けないかよって決まる。@option{-R} オプションを指定しない場合、すなわち、
5899 参照箇所が左の文脈より前に表示される場合は、すべての参照箇所中
5900 の最大長が、出力行の最大長の長さの内に含まれることになる。@option{-R}
5901 オプションを指定した場合、すなわち、参照箇所が右の文脈より後に
5902 表示される場合は、参照箇所や、それに先行するフィールドの区切りが
5903 占める領域は、出力行の最大長の長さに含まれない。
5904
5905 @item -A
5906 @itemx --auto-reference
5907
5908 参照箇所情報の自動生成を選択する。ファイル名と行番号からなる参照
5909 箇所が自動的に生成されて、各入力行に付くことになる。ファイル名と
5910 行番号は 1 個のコロンで区切られる。ただし、標準入力から読み込んで
5911 いる場合は、ファイル名は空になる。@option{-A} と @option{-r} の両方のオプション
5912 が指定されている場合は、入力中にある参照箇所情報が読み込まれた上で
5913 本文から外されることは、@option{-r} 単独の場合と同じだが、出力時に使用
5914 されるのは、自動生成された参照箇所の方である。すなわち、入力中に
5915 ある参照箇所情報は、自動生成されたもので置き換えられる。
5916
5917 @item -R
5918 @itemx --right-side-refs
5919
5920 デフォルトの出力フォーマットでは、@option{-R} オプションを使用しない場合、
5921 @option{-r} や @option{-A} オプションの働きによって生成される参照箇所は、出力行
5922 の左の端、すなわち、左の文脈の前に表示される。それに対して、
5923 デフォルトの出力フォーマットで @option{-R} オプションを指定した場合、
5924 参照箇所が表示されるのは、各出力行の右端、すなわち、右の文脈の
5925 後ろになる。ほかのいかなる出力フォーマットにおいても、基本的に @option{-R}
5926 オプションは無視されるが (訳注: デフォルト以外の出力フォーマット
5927 では、@option{-R} オプションがあってもなくても、参照箇所は右端に出力
5928 される)、それでも、@option{-R} オプションが付いていると、参照箇所の
5929 長さが、@option{-w} で指定した出力行全体の長さの内に入らないという働き
5930 だけは残る。
5931
5932 このオプションは、GNU の拡張が無効であるときは、常に自動的に選択
5933 される。
5934
5935 @item -F @var{string}
5936 @itemx --flac-truncation=@var{string}
5937
5938 このオプションを指定すると、出力に省略があった場合、それを示す
5939 ために文字列 @var{string} を使用するようになる。ほとんどの出力フィールド
5940 は、理論上では、@option{-S} オプションで何を選択するかによって、現在の行、
5941 または、現在の文の、先頭や末尾に向かって伸びて行くものである。
5942 しかし、@option{-w} オプションによって長さを変更できるとは言え、出力行には
5943 許される最大長というものがあり、その最大長はさらにさまざまな出力
5944 フィールドで使用する領域に分割されている。従って、フィールドは、
5945 それを収納する現在の出力行の先頭や末尾を越えて伸ばすことができない
5946 ために、切り詰めなければならないことがあり、そういうときに、省略が
5947 行われるのである。省略の指標として使用されるデフォルトの文字列は、
5948 1 個のスラッシュである。これは、@option{-F /} と指定した場合と同じだ。
5949
5950 @var{string} には、@option{-F @dots{}} のように 1 個以上の文字を指定してもよい。
5951 また、@var{string} が空文字列 (@option{-F ""}) の場合には、省略のフラグは
5952 立てられないことになり、従って、省略の指標は一切付加されない。
5953
5954 このオプションの引数中では、ユーザーの便宜のために、C 言語で
5955 見られるような、よく使うバックスラッシュ・エスケープシーケンスの
5956 多くが、@command{ptx} そのものによって認識され、対応する文字に変換される
5957 ようになっている。
5958
5959 @item -M @var{string}
5960 @itemx --macro-name=@var{string}
5961
5962 @command{nroff} や @command{troff}、あるいは @TeX{} で処理するのにふさわしい出力
5963 フォーマットを生成するとき、@samp{xx} の代わりに使用する別の文字列
5964 @var{string} を指定する。(訳注: @option{-O} や @option{-T} オプションを参照。)
5965
5966 @item -O
5967 @itemx --format=roff
5968
5969 出力フォーマットとして、@command{nroff} や @command{troff} で処理するのに適した
5970 形式を選択する。各出力行は次のようになる。
5971 @sp 1
5972 (訳注: 下記の @var{tail} と @var{head} については、前節 @option{--sentence-regexp}
5973 オプションの説明の終わりから 2 番目のパラグラフをご覧いただきたい。
5974 @var{ref} は参照箇所である。)
5975
5976 @smallexample
5977 .xx "@var{tail}" "@var{before}" "@var{keyword_and_after}"@c
5978  "@var{head}" "@var{ref}"
5979 @end smallexample
5980
5981 従って、あとは、出力の整形を担当する roff のマクロ @samp{.xx} を出力
5982 ファイルに書き込めばよいことになる。この出力フォーマットは、GNU の
5983 拡張が無効なときのデフォルトである。@samp{xx} を別のマクロ名に変更する
5984 には、@option{-M} オプションを使用すればよい (訳注: @option{-M "xx"} のように、
5985 @samp{xx} の部分のみ指定する)。
5986
5987 この出力フォーマットでは、改行やタブのような非表示文字は、それぞれ
5988 ただ 1 個のスペースに変換されるだけで、連続するスペースをわざわざ
5989 圧縮するようなことは行われない。ダブルクォート文字 @kbd{"} はそれぞれ
5990 二重化されるので、@command{nroff} や @command{troff} によって正しく処理される。
5991
5992 @item -T
5993 @itemx --format=tex
5994
5995 出力フォーマットとして、@TeX{} で処理するのに適した形式を選択する。
5996 各出力行は、次のようになる。
5997 @sp 1
5998 (訳注: 下記の @var{tail} と @var{head} については、前節 @option{--sentence-regexp}
5999 オプションの説明の終わりから 2 番目のパラグラフをご覧いただきたい。
6000 @var{ref} は参照箇所である。)
6001
6002 @smallexample
6003 \xx @{@var{tail}@}@{@var{before}@}@{@var{keyword}@}@c
6004 @{@var{after}@}@{@var{head}@}@{@var{ref}@}
6005 @end smallexample
6006
6007 @noindent
6008 従って、あとは、出力の整形を担当する @code{\xx} コマンドの定義を
6009 出力ファイルに書き込めばよいことになる。なお、参照箇所の生成が
6010 行われていない場合、すなわち、@option{-A} オプションも @option{-r} オプションも
6011 指定されていない場合には、各 @code{\xx} 呼び出しの最後の引数は出力
6012 されないことに注意していただきたい。@samp{xx} を別のマクロ名に変更する
6013 には、@option{-M} オプションを使用すればよい (訳注: @option{-M "xx"} のように、
6014 @samp{xx} の部分のみ指定する)。
6015
6016 この出力フォーマットでは、@kbd{$}, @kbd{%}, @kbd{&}, @kbd{#}, @kbd{_} のような特殊文字
6017 のいくつかは、自動的にバックスラッシュで保護される。中カッコ @kbd{@{},
6018 @kbd{@}} は、一対のドル記号とバックスラッシュとで保護される (強引に
6019 数式モードにするわけだ)。バックスラッシュそのものは、@code{\backslash@{@}}
6020 というシーケンスになる。同形の他の文字と区別するために文字の上下に
6021 付ける発音区別符のうち、サーカムフレックスとチルダは、それぞれ
6022 @code{\^@{ @}} と @code{\~@{ @}} というシーケンスになる (訳注: 実際には @code{@{@}}
6023 の位置に a  なり e なりといった文字が来る)。使用している文字セット
6024 中の他の発音区別符が付いている文字についても、可能なかぎり、適切な
6025 @TeX{} のシーケンスが生成される。それ以外の文字については、改行やタブ
6026 のような非表示文字や、ASCII の文字セットに属さない他のすべての文字
6027 は、単にただ 1 個のスペースに変換され、連続するスペースをわざわざ
6028 圧縮するようなことは行われない。@TeX{} のための特殊文字の処理は以上の
6029 ようなものだが、改善する方法があれば、作者までお知らせいただきたい。
6030
6031 @end table
6032
6033
6034 @node Compatibility in ptx
6035 @subsection GNU による @command{ptx} の拡張
6036
6037 このバージョンの @command{ptx} には、System V の @command{ptx} には存在しない機能が
6038 いくつかある。そうした追加機能は、コマンドラインオプションの @option{-G} を
6039 使えば、働かなくなるが、ほかのコマンドラインオプションによって上書き
6040 されれば、話は別である。もっとも、GNU の拡張の中には、上書きによって
6041 回復できないものもあるので、GNU の拡張を使いたければ、@option{-G} オプション
6042 を最初から使わないのが、すっきりした方法だ。以下に、このプログラムと
6043 System V の @command{ptx} の相違点を挙げておく。
6044
6045 @itemize @bullet
6046
6047 @item
6048 このプログラムでは、一度に複数の入力ファイルを読み込むことが
6049 できる。また、生成したコンコーダンスは、常に標準出力に書き出さ
6050 れる。それに対して、System V の @command{ptx} は、ファイルをたった 1 個
6051 しか読み込まず、結果を書き出すのは、標準出力のこともあるが、
6052 コマンドに 2 番目の @var{file} パラメータが指定されていれば、その @var{file}
6053 に対してである。
6054
6055 オプションで指定しない出力パラメータを持つのは、危険な習慣であり、
6056 GNU では、できるだけ避けるようにしている。従って、@command{ptx} を GNU と
6057 System V のどちらでも、問題なく同じように使いたいなら、入力ファイル
6058 は常に一つしか使わず、実行結果は常に標準出力に出力されるものと考えて
6059 おいた方がよい。また、@command{ptx} を使用してアプリケーションを作成する
6060 場合には、インストールされている @command{ptx} で @option{-G} オプションが使用
6061 できるとわかれば、@command{ptx} を呼び出すとき、@option{-G} オプションを必ず付ける
6062 ようにしたくなるかもしれない。
6063
6064 @item
6065 System V の @command{ptx} で利用できるオプションは、@option{-b}, @option{-f}, @option{-g},
6066 @option{-i},
6067 @option{-o}, @option{-r}, @option{-t}, @option{-w} だけである。他のオプションは、すべて GNU の
6068 拡張だが、今この箇条書きで繰り返すことはしない。なお、オプションの
6069 中には、以下でも述べているように、GNU の拡張が有効になっていると、
6070 効果が少し変わるものもある。
6071
6072 @item
6073 GNU の拡張のデフォルトでは、コンコーダンス出力のフォーマットは、
6074 @command{troff} や @command{nroff} 向けになっていない。むしろ、ダム端末向けの
6075 フォーマットになっている。@command{troff} や @command{nroff} 向けの出力を選択し
6076 たかったら、@option{-O} オプションを使用すればよい。
6077
6078 @item
6079 @option{-R} オプションを使用しないと、参照箇所の最大長が、出力行全体
6080 の長さから差し引かれる。GNU の拡張を無効にすると、参照箇所の
6081 長さは、出力行の長さの勘定に入らないことになる。
6082
6083 @item
6084 GNU の拡張が無効になっていても、256 バイトの文字セットのすべての
6085 文字が --- ASCII NUL バイト含めて --- 常に入力ファイルから読み込
6086 まれて処理され、有害な作用をもたらすことはない。それに対して、
6087 System V の @command{ptx} は、8-bit の文字を受け付けない。若干の制御文字
6088 も拒否する。また、チルダ @kbd{~} も拒否する。
6089
6090 @item
6091 GNU の拡張が無効になっていても、入力行の長さは、利用できるメモリに
6092 よってしか制限されない。それに対して、System V の @command{ptx} が処理の
6093 対象にするのは、各行に付き最初の 200 文字だけである。
6094
6095 @item
6096 単語区切り文字 (break character、単語を構成しない文字) のデフォルト
6097 は、使用している文字セットにおけるアルファベットのすべての文字
6098 (発音区別符のあるなしを問わない) 以外のあらゆる文字である。GNU の
6099 拡張が無効な場合は、単語区切り文字のデフォルトは、スペース、タブ、
6100 改行のみになる。
6101
6102 @item
6103 このプログラムは、出力行の長さを System V の @command{ptx} より上手に処理
6104 する。GNU の拡張が無効になっている場合、このプログラムは System V
6105 の @command{ptx} の動作をなるべく真似ようとするが、それでも、System V の
6106 ちょっとした癖のいくつかは、完全には再現できない。
6107
6108 @item
6109 ユーザは Ignore file と Only file の両方を指定することができる。
6110 System V の @command{ptx} では、そんなことはできない。
6111
6112 @end itemize
6113
6114
6115 @node tsort invocation
6116 @section @command{tsort}: トポロジカル・ソート
6117
6118 @pindex tsort
6119 @cindex topological sort
6120
6121 @command{tsort} は、指定された @var{file} に対してトポロジカル・ソートを行う。
6122 入力ファイルが指定されていない場合や、@var{file} として @samp{-} が指定されて
6123 いる場合は、標準入力を対象にする。より詳しい説明や、このコマンドが
6124 作成された事情については、次節「@command{tsort}: 誕生の背景」を御覧に
6125 なっていただきたい。 @ref{tsort background}
6126 @sp 1
6127 書式:
6128
6129 @example
6130 tsort [@var{option}] [@var{file}]
6131 @end example
6132
6133 @command{tsort} は入力を、空白で区切られた 2 個一組の文字列として読み込む。
6134 そうした文字列の各組は、部分的な順序を示している。出力は、与えられた
6135 部分的な順序に対応する全体としての順序である。
6136
6137 例を挙げよう。
6138
6139 @example
6140 tsort <<EOF
6141 a b c
6142 d
6143 e f
6144 b c d e
6145 EOF
6146 @end example
6147
6148 @noindent
6149 (訳注: 上の例は、"a b/c d/e f/b c/d e" という組を与えている。)
6150 @sp 1
6151 出力は、こうなる。
6152
6153 @example
6154 a
6155 b
6156 c
6157 d
6158 e
6159 f
6160 @end example
6161
6162 もっと現実的な例を考えてみよう。たくさんの関数をすべて一つのファイル
6163 に書いているとしよう。しかも、一つを除いて、他のすべての関数を static
6164 として宣言している。現在のところ、その例外 (@code{main} ということにする)
6165 が、ファイル中で定義されている最初の関数であり、それが直接呼び出す
6166 関数群がそれに続き、さらにその後に、その関数群が呼び出す関数が続く @dots{}
6167 という形になっている。さて、ここで、プロトタイプを利用することにしたと
6168 しよう。そうなると、呼び出される関数のすべてを宣言するか (そのためには、
6169 定義の部分から情報をどっさりコピーしなければならない)、あるいは、
6170 できるだけ多くの関数が、使用される前に定義されているように、関数群を
6171 並べ替えるか、どちらかを選ばなければならない。後者の作業を自動化する
6172 方法の一つが、各関数についてそれが直接呼び出す関数のリストを作成する
6173 ことである。そうしたリストを生成するプログラムはたくさんある。いわゆる
6174 コール・グラフを作成するプログラムだ。以下のリストをご覧になって
6175 いただきたい。各行は、左側の関数が右側の関数を直接呼び出していることを
6176 示している。
6177
6178 @example
6179 main parse_options
6180 main tail_file
6181 main tail_forever
6182 tail_file pretty_name
6183 tail_file write_header
6184 tail_file tail
6185 tail_forever recheck
6186 tail_forever pretty_name
6187 tail_forever write_header
6188 tail_forever dump_remainder
6189 tail tail_lines
6190 tail tail_bytes
6191 tail_lines start_lines
6192 tail_lines dump_remainder
6193 tail_lines file_lines
6194 tail_lines pipe_lines
6195 tail_bytes xlseek
6196 tail_bytes start_bytes
6197 tail_bytes dump_remainder
6198 tail_bytes pipe_bytes
6199 file_lines dump_remainder
6200 recheck pretty_name
6201 @end example
6202
6203 ここで @command{tsort} を使用すると、こうした関数について、上記の後者の要求を
6204 満たすような順番を作成することができる。
6205
6206 @example
6207 example$ tsort call-graph | tac
6208 dump_remainder
6209 start_lines
6210 file_lines
6211 pipe_lines
6212 xlseek
6213 start_bytes
6214 pipe_bytes
6215 tail_lines
6216 tail_bytes
6217 pretty_name
6218 write_header
6219 tail
6220 recheck
6221 parse_options
6222 tail_file
6223 tail_forever
6224 main
6225 @end example
6226
6227 @command{tsort} は、入力にループがあれば検出し、出会った最初のループを
6228 標準エラーに書き出す。
6229
6230 一般に、ある部分的な順序に対して、唯一の全体的な順序というものは存在
6231 しないことに、留意していただきたい。上記のコール・グラフの場合で言えば、
6232 関数 @code{parse_options} は、@code{main} の前でありさえすれば、リストのどこに
6233 でも来ることができる。
6234
6235 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
6236 options}.
6237
6238 @exitstatus
6239
6240 @menu
6241 * tsort background::         tsort が誕生した経緯。
6242 @end menu
6243
6244 @node tsort background
6245 @subsection @command{tsort}: 誕生の背景
6246
6247 @command{tsort} が存在しているのは、Unix のリンカのごく初期のバージョンでは、
6248 一つのアーカイブファイルの処理をたった一回しか行わず、それも、
6249 ファイルの最初から最後へと順番に見ていくだけだったからである。当時の
6250 @command{ld} は、アーカイブ中の各オブジェクトを読み込むとき、そのオブジェクトが
6251 プログラムに必要かどうかの判断を、リンク作業のその時点でまだ定義
6252 されていない何らかのシンボルを定義しているかどうかを基準にして
6253 行っていた。
6254
6255 そのため、アーカイブ中の依存関係には、特別な扱いが必要になった。
6256 たとえば、@code{scanf} はたぶん @code{read} を呼んでいる。それは、リンカが
6257 アーカイブをたった一回最初から順番に読んで行くとき、@code{scanf.o} が
6258 @code{read.o} より前にあることが重要だったということである。なぜなら、
6259 そうなっていないと、@code{scanf} を呼ぶけれど、@code{read} を呼ばないプログラム
6260 では、@code{read} に対する参照が、予期に反して "unresolved" になってしまい
6261 かねなかったからだ。
6262
6263 この問題に対処する方法は、次のようなものだった。まず、オブジェクト
6264 ファイル同士の依存関係の集合を生成した。この作業は、@command{lorder} という
6265 シェルスクリプトによって行われていた。筆者の知るかぎり、現在 GNU では
6266 lorder というツールを提供していないが、BSD 系のディストリビューション
6267 では、今でもなお見つけることができる。
6268
6269 次に、この @command{lorder} の出力に対して @command{tsort} を実行した。そして、
6270 そのソートされた結果を使って、アーカイブにオブジェクトを追加する順番を
6271 決めたのである。
6272
6273 こうした作業全体が、1980 年ごろから時代遅れのものになった。
6274 というのは、Unix のアーカイブは現在ではシンボル・テーブルを内蔵して
6275 おり (従来は @command{ranlib} によって作られていたが、今ではたいてい @command{ar}
6276 そのものによって作られている)、Unix のリンカはこのシンボル・テーブルを
6277 使用して、アーカイブファイルに対する複数回の読み込みを効率的に行うから
6278 である。
6279
6280 ともあれ、これが tsort が誕生した経緯である。すなわち、当時のリンカ
6281 のアーカイブファイルを取り扱う方法に問題があり、その問題を解決するため
6282 の工夫だったのだ。そして、その問題は、その後、別のやり方で解決される
6283 ようになったのである。
6284
6285
6286 @node Operating on fields
6287 @chapter フィールド操作
6288
6289 @menu
6290 * cut invocation::           各行の選択した部分を表示する。
6291 * paste invocation::         複数のファイルの各行をマージする。
6292 * join invocation::          共通のフィールドに基づいて行を連結する。
6293 @end menu
6294
6295
6296 @node cut invocation
6297 @section @command{cut}: 各行の選択した部分を表示する
6298
6299 @pindex cut
6300 @command{cut} は、各ファイルから各行の一部を抜き出して、標準出力に書き出す。
6301 ファイルが指定されていない場合や、ファイル名として @samp{-} が指定されて
6302 いる場合は、標準入力を対象とする。
6303 @sp 1
6304 書式:
6305
6306 @example
6307 cut @var{option}@dots{} [@var{file}]@dots{}
6308 @end example
6309
6310 以下のオプション一覧で @var{byte-list}, @var{character-list}, @var{field-list} と
6311 表記されているものは、コンマで区切られた、1 個以上の数字や範囲から
6312 なるリストである (範囲は、ダッシュを間に挟む 2 個の数字)。バイト、
6313 文字、フィールドは 1 から数える。不完全な範囲を指定することもでき、
6314 @option{-@var{m}} は @samp{1-@var{m}} と同じことであり、@samp{@var{n}-} は
6315 @samp{@var{n}} から行末、あるいは最後の
6316 フィールドまでと同じことである。リストの要素は、繰り返してもよく、
6317 部分的に重なり合ってもよく、どんな順序で指定してもよい。ただし、
6318 入力中の選択した部分が書き出されるのは、読み込まれたときと同じ順序
6319 であり、しかも、ただ一度だけである。(訳注: たとえば、@samp{-f 3,1,3}
6320 などと指定することはできるが、出力されるときは field-1, field-3
6321 の順番であり、field-3 が二度出力されることもない。)
6322
6323 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6324
6325 @table @samp
6326
6327 @item -b @var{byte-list}
6328 @itemx --bytes=@var{byte-list}
6329 @opindex -b
6330 @opindex --bytes
6331 @var{byte-list} で指定された位置にあるバイトのみを選択して、表示する。
6332 タブやバックスペースも他の文字と同様に扱う。すなわち、そうした
6333 ものも 1 バイトを占める。出力用のデリミタ (delimiter、区切りの印)
6334 が指定されている場合は (@option{--output-delimiter} の説明を参照)、選択
6335 されたバイトからなる範囲同士の間にデリミタ文字列を出力する。
6336
6337 @item -c @var{character-list}
6338 @itemx --characters=@var{character-list}
6339 @opindex -c
6340 @opindex --characters
6341 @var{character-list} で指定された位置にある文字のみを選択して、表示する。
6342 現在のところ、@option{-b} と同じだが、プログラムの国際化が進むと、動作が
6343 変わることになるだろう。タブやバックスペースも他の文字と同様に
6344 扱う。すなわち、そうしたものも 1 文字と数える。出力用のデリミタが
6345 指定されている場合は (@option{--output-delimiter} の説明を参照)、選択
6346 された文字からなる範囲同士の間にデリミタ文字列を出力する。
6347
6348 @item -f @var{field-list}
6349 @itemx --fields=@var{field-list}
6350 @opindex -f
6351 @opindex --fields
6352 @var{field-list} で指定されたフィールドのみを選択して、表示する。
6353 フィールドの区切りは、デフォルトではタブ文字 1 個である。なお、
6354 @option{--only-delimited} (@option{-s}) オプションが指定されていない場合は、
6355 デリミタ文字を全く含まない行も表示する。
6356
6357 一言言っておくと、@command{awk} を使えば、もっと洗練されたフィールド処理が
6358 可能になる。また、@command{awk} ならデフォルトで、フィールドの区切りに空白
6359 文字の連続を使用し (すなわち、フィールドの前後から除去し)、さらに、
6360 行頭と行末の空白を無視してくれるだろう。
6361 @example
6362 @verbatim
6363 awk '{print $2}'      # 2 番目のフィールドを表示する
6364 awk '{print $(NF-1)}' # 最後から 2 番目のフィールドを表示する
6365 awk '{print $2,$1}'   # 最初の 2 フィールドを逆に並べる
6366 @end verbatim
6367 @end example
6368
6369 ありそうにないことだが、@command{awk} が利用できない状況だとしよう。その
6370 場合は、@command{join} コマンドを使えば、上記で @command{awk} がやっているように、
6371 空白文字を処理することができる。
6372 @example
6373 @verbatim
6374 join -a1 -o 1.2     - /dev/null # 2 番目のフィールドを表示する
6375 join -a1 -o 1.2,1.1 - /dev/null # 最初の 2 フィールドを逆に並べる
6376 @end verbatim
6377 @end example
6378
6379 @item -d @var{input_delim_byte}
6380 @itemx --delimiter=@var{input_delim_byte}
6381 @opindex -d
6382 @opindex --delimiter
6383 @option{-f} と併せて使うと、入力のフィールド区切りに @var{input_delim_byte} の
6384 最初のバイトを使用する (デフォルトはタブ)。
6385
6386 @item -n
6387 @opindex -n
6388 マルチバイト文字を分割しない (現在のところ、機能しない)。
6389
6390 @item -s
6391 @itemx --only-delimited
6392 @opindex -s
6393 @opindex --only-delimited
6394 @option{-f} を使うとき、フィールド区切り文字を含まない行の表示をしない。
6395 通常は、フィールド区切り文字を含まない行は、行全体がそのまま表示
6396 される。
6397
6398 @item --output-delimiter=@var{output_delim_string}
6399 @opindex --output-delimiter
6400 @option{-f} と一緒に使った場合は、出力フィールド間が @var{output_delim_string}
6401 で区切られる。@option{-f} を指定したときのデフォルトは、入力時のデリミタを
6402 使用することである。@option{-b} や @option{-c} を使用して、(フィールドの範囲では
6403 なく) バイト位置や文字位置の範囲を選択した場合は、選択されたバイト
6404 の重なり合わない範囲同士の間に @var{output_delim_string} が出力される。
6405
6406 @item --complement
6407 @opindex --complement
6408 このオプションは GNU の拡張である。@option{-b}, @option{-c}, @option{-f} オプションで
6409 選択されたバイト、文字、フィールドを含まない部分を選択して、表示する。
6410 言い換えれば、そうしたオプションによって指定されたバイトや文字や
6411 フィールドは「表示しない」ということだ。このオプションは、フィールドが
6412 たくさんあるとき、そのうちの一部を除いたすべてを表示したい場合に
6413 便利である。
6414
6415 @end table
6416
6417 @exitstatus
6418
6419
6420 @node paste invocation
6421 @section @command{paste}: 複数のファイルの各行をマージする
6422
6423 @pindex paste
6424 @cindex merging files
6425
6426 @command{paste} は、指定された各ファイルの行番号が同じ行を、タブ文字を
6427 間にはさんで連結して、標準出力に書き出す。入力ファイルが全く
6428 指定されていない場合や、ファイル名が @samp{-} だった場合は、標準入力が
6429 使用される。
6430
6431 書式:
6432
6433 @example
6434 paste [@var{option}]@dots{} [@var{file}]@dots{}
6435 @end example
6436
6437 たとえば、次のような 2 個のファイルに対して、
6438 @example
6439 $ cat num2
6440 1
6441 2
6442 $ cat let3
6443 a
6444 b
6445 c
6446 @end example
6447
6448 各ファイルから行を順番に拾う。
6449 @example
6450 $ paste num2 let3
6451 1       a
6452 2       b
6453        @ c
6454 @end example
6455
6456 片方のファイルの行を二回使う。
6457 @example
6458 $ paste num2 let3 num2
6459 1       a      1
6460 2       b      2
6461        @ c
6462 @end example
6463
6464 標準入力から行を取得して混ぜる。
6465 @example
6466 $ paste - let3 - < num2
6467 1       a      2
6468        @ b
6469        @ c
6470 @end example
6471
6472 連続する行を、スペースを間にはさんで結合する。
6473 @example
6474 $ seq 4 | paste -d ' ' - -
6475 1 2
6476 3 4
6477 @end example
6478
6479 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6480
6481 @table @samp
6482
6483 @item -s
6484 @itemx --serial
6485 @opindex -s
6486 @opindex --serial
6487 各ファイルから 1 行づつ取り出して連結するのではなく、一つの
6488 ファイルのすべての行をまとめて 1 行に連結する。上の例のデータを
6489 使用すると、
6490
6491 @example
6492 $ paste -s num2 let3
6493 1       2
6494 a       b       c
6495 @end example
6496
6497 @item -d @var{delim-list}
6498 @itemx --delimiters=@var{delim-list}
6499 @opindex -d
6500 @opindex --delimiters
6501 連結する行の区切りに、タブではなく、@var{delim-list} の各文字を順番に
6502 使用する。@var{delim-list} を使い切ってしまった場合は、最初の文字に
6503 戻って使用して行く。上記のデータを例に取ると、
6504
6505 @example
6506 $ paste -d '%_' num2 let3 num2
6507 1%a_1
6508 2%b_2
6509 %c_
6510 @end example
6511
6512 @end table
6513
6514 @exitstatus
6515
6516
6517 @node join invocation
6518 @section @command{join}: 共通のフィールドに基づいて行を結合する
6519
6520 @pindex join
6521 @cindex common field, joining on
6522
6523 @command{join} は、二つの入力ファイルを対象に、同一の共通フィールド (join
6524 field) を持つことで「対」になっている各行を、1 行にまとめて、標準出力
6525 に書き出す。
6526 @sp 1
6527 書式:
6528
6529 @example
6530 join [@var{option}]@dots{} @var{file1} @var{file2}
6531 @end example
6532
6533 @var{file1} と @var{file2} の片方は @samp{-}、すなわち標準入力であってもよい (両方とも
6534 標準入力は不可)。@var{file1} と @var{file2} は、共通フィールドに基づいてソートされて
6535 いるべきである。
6536
6537 @vindex LC_COLLATE
6538 通常、ソート順は、@env{LC_COLLATE} のロケールが規定している照合順序で
6539 ある。@option{-t} オプションが指定されていない場合は、両ファイルについて
6540 並び方を比較する際、@code{sort -b} の場合と同様に、共通フィールドの先頭に
6541 ある空白が無視される。また、@option{--ignore-case} が指定されている場合は、
6542 @code{sort -f} と同様、共通フィールドでアルファベットの大文字と小文字は
6543 区別されない。
6544
6545 @command{sort} の出力を @command{join} に渡すなら、@command{sort} と @command{join}
6546 が使用する
6547 ロケールやオプションは首尾一貫していなければならない。@samp{sort -k 1b,1}
6548 のようなコマンドを使用すれば、デフォルトの共通フィールドに基づいて、
6549 ファイルをソートすることができる。しかし、ロケール、共通フィールド、
6550 区切り記号、比較オプションなどにデフォルト以外のものを使用する場合は、
6551 @command{join} と @command{sort} の間で矛盾が起きないように、そうしたものを選択
6552 しなければならないのだ。@samp{join -t ''} が指定された場合は、行全体が共通
6553 フィールドとして考慮の対象になるが、これは、sort のデフォルトの動作に
6554 対応している。
6555
6556 入力のすべての行が対になっている場合は、GNU による拡張が利用できる。
6557 この場合、並んでいる順番は、対になる二つのフィールドが同じであると判断
6558 されるならば、どんな順番でもよい。ただし、並び方の比較を上述のように
6559 行ったとき、二つのフィールドが同じだと判断される場合であり、その場合
6560 のみである。例を挙げよう。
6561
6562 @example
6563 $ cat file1
6564 a a1
6565 c c1
6566 b b1
6567 $ cat file2
6568 a a2
6569 c c2
6570 b b2
6571 $ join file1 file2
6572 a a1 a2
6573 c c1 c2
6574 b b1 b2
6575 @end example
6576
6577 @set JOIN_COMMAND
6578 @checkOrderOption{join}
6579 @clear JOIN_COMMAND
6580
6581 デフォルトの動作は次のようになっている。
6582 @itemize
6583 @item 共通フィールド (join field) は、各行の最初のフィールドである。
6584 @item 入力の各フィールドは、1 個以上の空白 (スペースやタブ) で区切られる。
6585 行頭の空白は無視される。
6586 @item 出力の各フィールドは、1 個のスペースで区切られる。
6587 @item 各出力行の構成は、共通フィールド、@var{file1} の残りのフィールド、
6588 @var{file2} の残りのフィールドの順になる。
6589 @end itemize
6590
6591 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
6592
6593 @table @samp
6594
6595 @item -a @var{file-number}
6596 @opindex -a
6597 @var{file-number} (@samp{1} か @samp{2}) のファイルに、もう一方のファイルと対に
6598 ならない行がある場合、通常の出力のほかに、その行も表示する。
6599
6600 @item --check-order
6601 入力ファイルのどちらかの内容がきちんとソートされていないと、
6602 エラーメッセージを出して、実行に失敗する。
6603
6604 @item --nocheck-order
6605 入力ファイルの内容がソートされた順番になっているかどうかを、どちらの
6606 ファイルについてもチェックしない。これが、デフォルトである。
6607
6608 @item -e @var{string}
6609 @opindex -e
6610 入力では欠けているフィールドを、出力では @var{string} で補う。すなわち、
6611 オプション @option{-1}, @option{-2}, @option{-j}, @option{-o} などを指定したときに、欠けている
6612 フィールドがそれに当たる。
6613
6614 @item --header
6615 @opindex --header
6616 各入力ファイルの最初の行をヘッダ行と見なす。ヘッダ行も結合され、
6617 最初の出力行として表示される。@option{-o} を使って、出力フォーマットを
6618 指定している場合は、ヘッダ行もそのフォーマットに従って出力される。
6619 ヘッダ行は、@option{--check-order} が指定されていても、並び順のチェックを
6620 受けない。なお、両ファイルのヘッダ行がマッチしない場合は、一番目の
6621 ファイルのヘッダ・フィールドが使用される。
6622
6623 @item -i
6624 @itemx --ignore-case
6625 @opindex -i
6626 @opindex --ignore-case
6627 キーを比較する際、アルファベットの大文字小文字を区別しない。この
6628 オプションを使用するときは、両方の入力ファイルの行が、同じように
6629 大文字小文字を区別せず並んでいなければならない。そうした順番で並
6630 べるには、@samp{sort -f} を使えばよい。
6631
6632 @item -1 @var{field}
6633 @opindex -1
6634 ファイル 1 では @var{field} 番目のフィールドを共通フィールドとする
6635 (@var{field} は正の整数)。
6636
6637 @item -2 @var{field}
6638 @opindex -2
6639 ファイル 2 では @var{field} 番目のフィールドを共通フィールドとする
6640 (@var{field} は正の整数)。
6641
6642 @item -j @var{field}
6643 @option{-1 @var{field} -2 @var{field}} と等価。
6644
6645 @item -o @var{field-list}
6646 @itemx -o auto
6647 キーワードの @samp{auto} が指定されると、@command{join} は各ファイルの最初の
6648 行を元にして、出力フォーマットを推測する。それは、デフォルトの
6649 出力フォーマットとほぼ同じだが、それだけでなく、各行に必ず同数の
6650 フィールドを出力するようにする。また、欠けているフィールドがあれば、
6651 @option{-e} オプションの指定する文字列で補う。余分なフィールドは除去する。
6652
6653 @samp{auto} が指定されていない場合は、@var{field-list} のフォーマットに従っ
6654 て、各出力行を構成する。@var{field-list} の各要素は、@samp{0} 一文字か、@var{m.n}
6655 という形を取る。ここで、@var{m} はファイル番号であり、@samp{1} か @samp{2} である。
6656 @var{n} はフィールド番号であり、正の整数である。
6657
6658 @samp{0} というフィールド指定は、共通フィールドを指している。ほとんどの
6659 場合、@samp{0} というフィールド指定と同じことが、共通フィールドを明示的
6660 に @var{m.n} で示すことでも、実現できるだろう。しかしながら、(@option{-a} オプ
6661 ションなり @option{-v} オプションなりを使用して)、対にならない行を表示
6662 する場合、対にならない行が両方のファイルに存在すると、@var{field-list} で
6663 @var{m.n} をどう使おうとも、共通フィールドを指定できないのだ。@command{join} で
6664 共通フィールドの指定が常に可能になるように、POSIX は @samp{0} という
6665 フィールド指定法を考案したのである。
6666
6667 @var{field-list} の各要素は、コンマ、または空白で区切られる。区切りに空白
6668 を使用するときは、シェルによって解釈されないように、たいていの場合
6669 引用符で囲む必要がある。たとえば、コマンド @samp{join -o 1.2,2.2} と
6670 @samp{join -o '1.2 2.2'} は、同じ動作になる。
6671
6672 @var{field-list} の指定は、すべての出力行に適用される。これは、@option{-a} や
6673 @option{-v} オプションによって出力されるものにも当てはまる。
6674
6675 @item -t @var{char}
6676 入出力のフィールドの区切りに、文字 @var{char} を使用する。@var{char} は、入力
6677 ファイルに現れる一つ一つが、有意なものとして扱われる。@samp{sort -t @var{char}}
6678 を @option{-b} なしで実行すれば、このオプションに対応する順序に行を
6679 並べることができる。@samp{join -t ''} を指定すると、行全体が共通フィー
6680 ルドとして考慮の対象になり、これは sort のデフォルトの動作に対応
6681 している。@samp{-t '\0'} を指定すると、ASCII NUL 文字がフィールドの
6682 区切りに使用される。
6683
6684 @item -v @var{file-number}
6685 通常の出力はせず、@var{file-number} (@samp{1} か @samp{2} である) のファイルに存在
6686 する、対にならない各行を表示する。
6687
6688 @zeroTerminatedOption
6689
6690 @end table
6691
6692 @exitstatus
6693
6694
6695 @node Operating on characters
6696 @chapter 文字操作
6697
6698 @cindex operating on characters
6699
6700 以下のコマンドは、個々の文字に対して操作を行う。
6701
6702 @menu
6703 * tr invocation::            文字の置換、圧縮、削除を行う。
6704 * expand invocation::        タブをスペースに変換する。
6705 * unexpand invocation::      スペースをタブに変換する。
6706 @end menu
6707
6708
6709 @node tr invocation
6710 @section @command{tr}: 文字の置換、圧縮、削除を行う
6711
6712 @pindex tr
6713
6714 書式:
6715
6716 @example
6717 tr [@var{option}]@dots{} @var{set1} [@var{set2}]
6718 @end example
6719
6720 @command{tr} は標準入力を標準出力にコピーするが、その際に次の操作の一つを
6721 行う。
6722
6723 @itemize @bullet
6724 @item
6725 文字を置換する。置換した結果に同一文字の連続があるときは、それを
6726 1 文字に圧縮することもできる。
6727 @item
6728 同一文字の連続を 1 文字に圧縮する。
6729 @item
6730 文字を削除する。
6731 @item
6732 文字を削除する。さらに、削除した結果に同一文字の連続があるときは、
6733 それを 1 文字に圧縮する。
6734 @end itemize
6735
6736 上記書式の @var{set1} と (もし、指定しているなら) @var{set2} の二つの引数には、
6737 順序が意味を持つ文字の集合を指定する。以下の説明で、それぞれ @var{set1}、@var{set2}
6738 と呼ばれることになるそうした文字集合こそ、入力中に存在する文字のうちで
6739 @command{tr} が操作の対象とする文字群である。@option{--complement} (@option{-c},
6740 @option{-C})
6741 オプションを指定すると、@var{set1} の代わりにその補集合 (@var{set1} に含まれない
6742 すべての文字) が使われることになる。
6743
6744 現在のところ、@command{tr} が完全に対応しているのは、シングルバイト文字
6745 だけである。将来は、マルチバイト文字もサポートすることになるだろうが、
6746 そのときは、@option{-C} オプションで文字集合の補集合を作り、@option{-c} オプションで
6747 値 (訳注: いわゆる文字コード) の集合の補集合を作ることになるだろう。
6748 この区別が意味を持つのは、指定する値の中に文字ではないものがあるとき
6749 だけだが、そういった事態は、マルチバイト・エンコーディングを使用して
6750 いるロケールで、入力にエンコーディング・エラーが含まれるときしか起き
6751 そうにない。
6752
6753 このプログラムでは、@option{--help} や @option{--version} オプションも使える。
6754 @xref{Common options}. なお、オプションは、オペランドの前で指定しなけ
6755 ればならない。
6756
6757 @exitstatus
6758
6759 @menu
6760 * Character sets::           文字集合の指定。
6761 * Translating::              ある文字集合の別の文字集合への変換。
6762 * Squeezing::                連続する同一文字の圧縮と文字の削除。
6763 @end menu
6764
6765
6766 @node Character sets
6767 @subsection 文字集合の指定
6768
6769 @cindex specifying sets of characters
6770
6771 @var{set1} や @var{set2} 引数の書式は、正規表現の書式に似ているが、正規表現では
6772 なく、文字のリストにすぎない。そうした文字列中のほとんどの文字は、単に
6773 その文字自身を表しているだけだが、便宜のため文字列中では以下に列挙する
6774 簡易記法も使うことができる。簡易記法によっては、以下で述べているように、
6775 @var{set1} と @var{set2} のどちらか一方でしか使えないこともある。
6776
6777 @table @asis
6778
6779 @item バックスラッシュ・エスケープ
6780 @cindex backslash escapes
6781
6782 以下のバックスラッシュ・エスケープ・シーケンスを認識する。
6783
6784 @table @samp
6785 @item \a
6786 Control-G (ベル).
6787 @item \b
6788 Control-H (バックスペース).
6789 @item \f
6790 Control-L (フォームフィード).
6791 @item \n
6792 Control-J (改行).
6793 @item \r
6794 Control-M (復帰).
6795 @item \t
6796 Control-I (水平タブ).
6797 @item \v
6798 Control-K (垂直タブ).
6799 @item \@var{ooo}
6800 1 から 3 桁の 8 進数 @var{ooo} によって表される値を持つ 8 ビット
6801 文字。@samp{\400} は、@samp{\040} @samp{0} という連続する 2 バイトに解釈
6802 されるので、注意すること。
6803 @item \\
6804 1 個のバックスラッシュ。
6805 @end table
6806
6807 上記以外の 1 個の文字がバックスラッシュに続く場合は、その文字
6808 として解釈される。またバックスラッシュには、特別な意味を打ち消す
6809 働きもあるので、@samp{[}, @samp{]}, @samp{*}, @samp{-} をエスケープするのにも使用
6810 できる。
6811
6812 @item 範囲指定
6813 @cindex ranges
6814
6815 @samp{@var{m}-@var{n}} という表記は、昇順で @var{m} から @var{n} までのすべての文字に展開
6816 される。@var{m} は文字の照合順序で @var{n} より前のものでなければならず、
6817 さもないと、エラーになる。たとえば、@samp{0-9} は @samp{0123456789}
6818 と同じである。
6819
6820 System V の書式では、範囲は、角カッコ (square brackets)を使って
6821 囲むことになっているが、GNU の @command{tr} はこの書式をサポートして
6822 いない。System V の書式で指定した場合でも、置換が期待どおり行われる
6823 こともあるが、それは、たいていの場合、角カッコが角カッコに置換される
6824 からである。そうだとしても、予想外の動作をすることもあるので、
6825 角カッコの使用は避けた方がよい。たとえば、@samp{tr -d '[0-9]'} は、数字
6826 だけでなく、角カッコも削除してしまう。
6827
6828 昔からよく使われている範囲の指定法の多くが --- 正しい用法として
6829 認められているものでさえ --- 他のシステムで使えるとはかぎらない。
6830 たとえば、EBCDIC のホストでは、 @samp{A-Z} という範囲の指定をしても、
6831 たいていの人が予想するような結果は得られないだろう。なぜなら、
6832 そこでは @samp{A} から @samp{Z} までが、ASCII におけるように隣り合っては
6833 いないからである。POSIX 準拠の @command{tr} を使うことができるならば、
6834 この問題を回避する最善の方法は、文字クラスを使用することである
6835 (下記参照)。それができない場合は、範囲の要素を一つ一つ書き込むのが、
6836 一番可搬性のある方法だ (一番野暮ったい方法でもあるけれど)。
6837
6838 @item 文字の繰り返し
6839 @cindex repeated characters
6840
6841 @var{set2} における @samp{[@var{c}*@var{n}]} という表記は、文字 @var{c} の @var{n} 個の連続に展開
6842 される。従って、@samp{[y*6]} は @samp{yyyyyy} と同じである。また、@var{set2} に
6843 おける @samp{[@var{c}*]} という表記は、@var{set2} を @var{set1} と同じ長さにするのに
6844 必要な数の @var{c} の連続に展開される。@var{n} が @samp{0} で始まっている場合は、
6845 8 進数として扱われる。それ以外の場合は、10 進数である。
6846
6847 @item 文字クラス
6848 @cindex character classes
6849
6850 @samp{[:@var{class}:]} という表記は、(あらかじめ定義されている) 文字クラス
6851 @var{class} に属するすべての文字に展開される。展開された文字に特定の
6852 順序はないが、@code{upper} と @code{lower} の文字クラスは別で、この二つは、
6853 昇順に展開される。@option{--delete} (@option{-d}) と @option{--squeeze-repeats}
6854 (@option{-s})
6855 オプションの両方を指定している場合は、@var{set2} で任意の文字クラスを
6856 使用することができる。それ以外の場合 @var{set2} で使えるのは、@code{lower}
6857 と @code{upper} の文字クラスだけであり、それも、対応する文字クラスを
6858 (すなわち、@code{upper} に対しては @code{lower}、@code{lower} に対しては @code{upper}
6859 を)、@var{set1} の対応する位置で指定しているときだけである。その場合は、
6860 大文字小文字の変換を指定していることになるわけだ。以下に文字クラス
6861 の名前を列挙する。なお、無効なクラス名を指定すると、エラーになる。
6862
6863 @table @code
6864 @item alnum
6865 @opindex alnum
6866 アルファベットの文字と数字。
6867 @item alpha
6868 @opindex alpha
6869 アルファベットの文字。
6870 @item blank
6871 @opindex blank
6872 水平方向の空白 (Horizontal whitespace)。
6873 @item cntrl
6874 @opindex cntrl
6875 制御文字。
6876 @item digit
6877 @opindex digit
6878 数字。
6879 @item graph
6880 @opindex graph
6881 表示可能文字。空白を含まない (訳注: スペースもタブも改行も、
6882 すなわち、ホワイトスペースを一切含まない)。
6883 @item lower
6884 @opindex lower
6885 アルファベットの小文字。
6886 @item print
6887 @opindex print
6888 表示可能文字。空白を含む (訳注: タブや改行は含まないが、
6889 スペース (0x20) は含む)。
6890 @item punct
6891 @opindex punct
6892 句読点 (訳注: 引用符なども含む)。
6893 @item space
6894 @opindex space
6895 水平方向や垂直方向の空白 (Horizontal or vertical whitespace)。
6896 @item upper
6897 @opindex upper
6898 アルファベットの大文字。
6899 @item xdigit
6900 @opindex xdigit
6901 16 進数の数字。
6902 @end table
6903
6904 @item 等価クラス
6905 @cindex equivalence classes
6906
6907 @samp{[=@var{c}=]} という書式は、@var{c} と等価な文字のすべてに展開される。
6908 展開される文字の間に特定の順序はない。等価クラスは、比較的最近の
6909 発明であり、英語以外のアルファベットをサポートするためのものである。
6910 しかしながら、等価クラスを定義したり、何が等価クラスに含まれるかを
6911 決定したりする標準的な方法は存在しないようだ。そのため、GNU の
6912 @command{tr} は、等価クラスを十分に実装していない。各文字の等価クラスには
6913 その文字しか含まれていないので、あまり使い道がない。
6914
6915 @end table
6916
6917
6918 @node Translating
6919 @subsection 置換
6920
6921 @cindex translating characters
6922
6923 @command{tr} は、@var{set1} と @var{set2} の両方が指定され、@option{--delete}
6924 (@option{-d}) オプションが
6925 指定されていない場合は、文字の置換を行う。@command{tr} は入力の中に @var{set1} に存在
6926 する文字が現れるたびに、それを @var{set2} の対応する文字に置き換える。入力中の
6927 @var{set1} に存在しない文字は、読み飛ばして、変更しない。ある文字が @var{set1} 中に
6928 2 個以上存在し、@var{set2} 中のそれに対応する文字がすべて同じでない場合、置換
6929 に使用するのは、最後の文字だけである。たとえば、次の二つのコマンドは、
6930 同じ動作をする。
6931
6932 @example
6933 tr aaa xyz
6934 tr a z
6935 @end example
6936
6937 @command{tr} がよく使われるのは、アルファベットの小文字を大文字に変換する
6938 ときである。それには、いろいろな方法がある。例を三つほど挙げてみる。
6939
6940 @example
6941 tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ
6942 tr a-z A-Z
6943 tr '[:lower:]' '[:upper:]'
6944 @end example
6945
6946 @noindent
6947 ただし、上記の @code{a-z} のような範囲指定の使用は、可搬性がないことに
6948 注意していただきたい。
6949
6950 @command{tr} で置換を行う際には、普通 @var{set1} と @var{set2} を同じ長さにする。@var{set1} が
6951 @var{set2} より短いと、@var{set2} の後尾にある余分な文字が無視されることになる。
6952
6953 逆に、@var{set1} が @var{set2} より長い場合は、可搬性がなくなる。POSIX の規定で
6954 は、結果は未定義なのだ。こうした場合、BSD の @command{tr} は、@var{set2} の最後の
6955 文字を必要なだけ繰り返して、@var{set2} が @var{set1} と同じ長さになるようにする。
6956 System V の @command{tr} は、@var{set1} を @var{set2} と同じ長さに切り詰める。
6957
6958 デフォルトでは、GNU 版の @command{tr} は、この問題を BSD の @command{tr} と同じ
6959 やり方で処理する。そして、@option{--truncate-set1} (@option{-t}) オプションが指定
6960 されている場合のみ、System V の @command{tr} のように処理するのである。
6961 このオプション (@option{--truncate-set1}) は、置換以外の操作では無視される。
6962
6963 この問題で System V の @command{tr} の動作を選ぶと、比較的よく使われる、
6964 BSD 式の次の慣用表現が使えなくなる。
6965
6966 @example
6967 tr -cs A-Za-z0-9 '\012'
6968 @end example
6969
6970 @noindent
6971 なぜなら、System V の動作では、アルファベットと数字以外のすべての文字を
6972 改行文字に変換するのではなく、ゼロバイトしか (ASCII NUL 文字、それが
6973 @var{set1} の補集合の最初の要素である) 改行文字に変換しないからだ。
6974
6975 @noindent
6976 ちなみに、上記の慣用表現は、システムによってはうまく動作しない。
6977 なぜなら、範囲指定を使っているからであり、また、改行の 8 進数による
6978 コードを 012 と決め込んでいるからでもある。@command{tr} が POSIX に準拠して
6979 いるなら、以下の方が、よりよい書き方である。
6980
6981 @example
6982 tr -cs '[:alnum:]' '[\n*]'
6983 @end example
6984
6985
6986 @node Squeezing
6987 @subsection 連続する文字の圧縮と文字の削除
6988
6989 @cindex squeezing repeat characters
6990 @cindex deleting characters
6991
6992 @option{--delete} (@option{-d}) オプションのみが指定された場合、@command{tr} は、@var{set1} に
6993 存在する文字が入力中にあれば、それを削除する。
6994
6995 @option{--squeeze-repeats} (@option{-s}) オプションのみが指定された場合、@command{tr} は、
6996 @var{set1} に存在する文字が入力中に連続して現れるたびに、その部分をただ 1 個
6997 のその文字に置き換える。
6998
6999 @option{--delete} と @option{--squeeze-repeats} の両方が指定された場合、@command{tr} は、
7000 まず @var{set1} を使って削除を行い、その後で、残っている文字に対して、
7001 @var{set2} を使って連続する同一文字の圧縮を行う。
7002
7003 @option{--squeeze-repeats} オプションは、置換の際に使用することもできる。
7004 その場合、@command{tr} は、まず置換を実行し、その後で、置換結果に対して、
7005 @var{set2} を使って連続する同一文字の圧縮を行う。
7006
7007 例をいくつか挙げて、オプションの様々な組み合わせを説明する。
7008
7009 @itemize @bullet
7010
7011 @item
7012 すべてのゼロバイトを削除する。
7013
7014 @example
7015 tr -d '\0'
7016 @end example
7017
7018 @item
7019 入力中のすべての単語 (訳注: 空白などで前後を区切られた文字列) を
7020 1 行に 1 個づつ書き出す。このコマンドは、アルファベットと数字以外の
7021 すべてを改行文字に変換し、さらに、改行が連続して現れるそれぞれの
7022 箇所を 1 個の改行文字に圧縮している。
7023
7024 @example
7025 tr -cs '[:alnum:]' '[\n*]'
7026 @end example
7027
7028 @item
7029 連続する改行文字が現れるごとに、それを一個の改行文字に変換する。
7030
7031 @example
7032 tr -s '\n'
7033 @end example
7034
7035 @item
7036 @c Separate the following two "the"s, so typo checkers don't complain.
7037 文書中の単語の重複を探し出す。たとえば、 改行を挟んで同じ単語を
7038 繰り返して、``the @w{}the'' のように書いてしまうとことは、よくあること
7039 である。以下の Bourne シェルのスクリプトは、次のように動作する。
7040 まず、句読点や空白文字が 1 個以上続けて現れるたびに、それを 1 個の
7041 改行文字に置き換える。そうすることで、単語が 1 行に 1 個づつ
7042 出力されることになるわけだ。次には、すべての大文字を小文字に
7043 変換する。そして、最後に、@command{uniq} を @option{-d} オプション付きで実行して、
7044 重複した単語のみを書き出すのである。
7045
7046 @example
7047 #!/bin/sh
7048 cat -- "$@@" \
7049   | tr -s '[:punct:][:blank:]' '[\n*]' \
7050   | tr '[:upper:]' '[:lower:]' \
7051   | uniq -d
7052 @end example
7053
7054 @item
7055 文字のちょっとした集団を削除するのは、たいていの場合ごく簡単
7056 である。たとえば、@samp{a}, @samp{x}, @samp{M} という文字をすべて消すには、次の
7057 ようにするだけでよい。
7058
7059 @example
7060 tr -d axM
7061 @end example
7062
7063 ところが、削除する文字の一つに  @samp{-} があると、@samp{-} は特殊な意味を
7064 もっているので、厄介なことになりかねない。上記と同様の作業を行う
7065 けれど、今度は @samp{-} という文字もついでにすべて削除するとしよう。
7066 @code{tr -d -axM} をやってみるかもしれないが、うまく行かないだろう。
7067 @command{tr} が @option{-a} をコマンドライン・オプションとして解釈しようとする
7068 からである。それではと、ハイフンを文字列の内側に入れてみることも
7069 できる。@code{tr -d a-xM} のようにだ。だが、これもうまく行きそうにない。
7070 @command{tr} が @code{a-x} を 3 個の文字としてではなく、@samp{a}@dots{}@samp{x} という文字の
7071 範囲として解釈することになるからだ。この問題を解決する方法の一つは、
7072 ハイフンを文字のリストの最後に置くことである。
7073
7074 @example
7075 tr -d axM-
7076 @end example
7077
7078 あるいは、@samp{--} を使って、オプション処理はここで終わりと明示する
7079 こともできる。
7080
7081 @example
7082 tr -d -- -axM
7083 @end example
7084
7085 より普遍的な方法は、等価クラスの記法  @code{[=c=]} を、@samp{c} を @samp{-} で
7086 (あるいは、他の任意の文字で) 置き換えて使うことである。
7087
7088 @example
7089 tr -d '[=-=]axM'
7090 @end example
7091
7092 上記の例では、角カッコがシェルによって解釈されないように、シングル
7093 クォートを使っていることに注意していただきたい。
7094
7095 @end itemize
7096
7097
7098 @node expand invocation
7099 @section @command{expand}: タブをスペースに変換する
7100
7101 @pindex expand
7102 @cindex tabs to spaces, converting
7103 @cindex converting tabs to spaces
7104
7105 @command{expand} は指定された各 @var{file} の内容を標準出力に書き出し、その際に
7106 タブ文字を適切な数のスペースに変換する。@var{file} が指定されていない
7107 場合や、@var{file} として @samp{-} が指定されている場合は、標準入力を対象にする。
7108 @sp 1
7109 書式:
7110
7111 @example
7112 expand [@var{option}]@dots{} [@var{file}]@dots{}
7113 @end example
7114
7115 デフォルトでは、@command{expand} はすべてのタブをスペースに変換する。
7116 バックスペース文字は、出力にそのまま残しておく。バックスペースには、
7117 タブ幅を計算する際に、桁数を減らす働きがあるのだ。デフォルトの動作は、
7118 @option{-t 8} を指定したときと同じである (タブ位置を 8 桁ごとにする)。
7119
7120 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
7121
7122 @table @samp
7123
7124 @item -t @var{tab1}[,@var{tab2}]@dots{}
7125 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7126 @opindex -t
7127 @opindex --tabs
7128 @cindex tab stops, setting
7129 タブ位置 (tab stop) が一つだけ指定された場合には、(訳注: 入力行に
7130 おける) タブ位置が @var{tab1} 桁ごとあるものとする (デフォルトは 8
7131 桁ごと)。それ以外の場合は、タブ位置を @var{tab1}, @var{tab2}, @dots{} 桁目に置き
7132 (行頭を 0 桁目として数える)、指定された最後のタブ位置より後ろに
7133 あるタブは 1 個のスペースで置き換える。タブ位置の指定は、コンマで
7134 区切ってもよく、空白で区切ってもよい。
7135
7136 互換性を考慮して、GNU の @command{expand} は、@option{-@var{tab1}[,@var{tab2}]@dots{}}
7137 という、
7138 このオプションの古い書式も認めている。新しいスクリプトでは、
7139 @option{-t @var{tab1}[,@var{tab2}]@dots{}} の方を使うべきである。
7140
7141 @item -i
7142 @itemx --initial
7143 @opindex -i
7144 @opindex --initial
7145 @cindex initial tabs, converting
7146 各行の行頭にあるタブ群だけを (言い換えれば、スペースでもタブでも
7147 ないどんな文字よりも前にある 1 個以上のタブだけを) スペースに変換
7148 する。
7149
7150 @end table
7151
7152 @exitstatus
7153
7154
7155 @node unexpand invocation
7156 @section @command{unexpand}: スペースをタブに変換する
7157
7158 @pindex unexpand
7159
7160 @command{unexpand} は、指定された各 @var{file} の内容を標準出力に書き出し、その際に
7161 各行の先頭にある複数の空白 (blank) を、必要な数のタブ文字に変換する。
7162 @var{file} が指定されていない場合や、@var{file} として @samp{-} が指定されている場合は、
7163 標準入力を対象にする。デフォルトの POSIX ロケールでは、空白 (@dfn{blank})
7164 とは、スペースかタブのことである。他のロケールでは、ほかの空白文字が
7165 追加されているかもしれない。
7166 @sp 1
7167 書式:
7168
7169 @example
7170 unexpand [@var{option}]@dots{} [@var{file}]@dots{}
7171 @end example
7172
7173 デフォルトでは、@command{unexpand} が変換するのは、各行の行頭にある複数の
7174 空白だけである (言い換えれば、空白以外のどんな文字よりも前にある複数
7175 の空白だけ)。バックスペース文字は、出力にそのまま残しておく。バック
7176 スペースには、タブ幅を計算する際に、桁数を減らす働きがあるのだ。
7177 デフォルトでは、タブ位置は 8 桁ごとに置かれる。
7178
7179 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
7180
7181 @table @samp
7182
7183 @item -t @var{tab1}[,@var{tab2}]@dots{}
7184 @itemx --tabs=@var{tab1}[,@var{tab2}]@dots{}
7185 @opindex -t
7186 @opindex --tabs
7187 タブ位置 (tab stop) が一つだけ指定された場合には、(訳注: 入力行に
7188 おける) タブ位置をデフォルトの 8 桁ごとではなく、@var{tab1} 桁ごとに
7189 設定する。それ以外の場合は、タブ位置を @var{tab1}, @var{tab2}, @dots{} 桁目に置き
7190 (行頭を 0 桁目として数える)、指定された最後のタブ位置より後ろに
7191 ある空白は、変換せず、そのままにする。タブ位置の指定は、コンマで
7192 区切ってもよく、空白で区切ってもよい。このオプションを指定すると、
7193 @option{-a} オプションが自動的に設定される。
7194 @sp 1
7195 (訳注: 一例を挙げておく。たとえば、@samp{-t 8,12} なら、入力行は、先頭を
7196 0 桁目として、8 桁目、12 桁目にタブ位置があると見なされる。そこで、
7197 先頭に 12 個のスペースがある行に対して @code{unexpand -t 8,12} を行う
7198 と、空白がタブ 2 個に変換される。出力におけるタブ位置はデフォルトの
7199 ままなので、出力ではその行は、 0 から数えて 16 桁目から文字が始まる
7200 ことになる。)
7201
7202 互換性を考慮して、GNU の @command{unexpand} は、@option{-@var{tab1}[,@var{tab2}]@dots{}}
7203 という、
7204 このオプションの古い書式も認めている。そちらを使う場合は、タブ位置を
7205 必ずコンマで区切らなければならない。なお、@option{-t} とは違って、この古い
7206 オプションは、@option{-a} を自動的に設定しない。新しいスクリプトでは
7207 (訳注: 古い書式と同じ動作をさせたい場合)、古い書式に代えて、
7208 @option{--first-only -t @var{tab1}[,@var{tab2}]@dots{}} を使うべきである。
7209
7210 @item -a
7211 @itemx --all
7212 @opindex -a
7213 @opindex --all
7214 空白の連続が、行の中で空白以外の文字の後ろにある場合でも、タブ位置の
7215 直前にある 2 個以上の空白の連続は、すべて変換する。
7216
7217 @end table
7218
7219 @exitstatus
7220
7221
7222 @node Directory listing
7223 @chapter ディレクトリの一覧表示
7224
7225 この章では、@command{ls} とその変種の @command{dir} 及び @command{vdir} について説明する。
7226 こうしたコマンドは、ファイルに関する情報を一覧表示する。
7227
7228 @menu
7229 * ls invocation::            ディレクトリの内容を一覧表示する。
7230 * dir invocation::           簡潔な ls。
7231 * vdir invocation::          詳細な ls。
7232 * dircolors invocation::     ls のカラー設定など。
7233 @end menu
7234
7235
7236 @node ls invocation
7237 @section @command{ls}: ディレクトリの内容を一覧表示する
7238
7239 @pindex ls
7240 @cindex directory listing
7241
7242 @command{ls} プログラムはファイルに関する情報を一覧表示する (ファイルは、
7243 いかなるタイプでもよく、ディレクトリでもよい)。オプションとファイルを
7244 示す引数は、ほとんどのコマンドと同様、どんな順番で指定しても構わない。
7245
7246 コマンドラインで指定したオプション以外の引数がディレクトリならば、
7247 デフォルトでは、@command{ls} はそのディレクトリの内容を一覧表示する。その際、
7248 再帰的な表示はせず、名前が @samp{.} で始まるファイルも表示しない。
7249 オプション以外の引数がディレクトリでなければ、単にそのファイルの名前を
7250 表示するのが、@command{ls} のデフォルトの動作である。オプション以外の引数が
7251 一つも指定されていない場合は、@command{ls} はカレントディレクトリを対象にし、
7252 あたかも @samp{.} という引数を一つだけ付けて起動したかのように動作する。
7253
7254 @vindex LC_ALL
7255 デフォルトでは、出力を、現在のロケール設定に従って、アルファベット
7256 順でソートする
7257 @footnote{POSIX 以外のロケールを使用している場合は (たとえば、@env{LC_ALL} を
7258 @samp{en_US} に設定している場合は)、@command{ls} の出力が、見慣れない順序で並んで
7259 いるかもしれない。そうした場合は、環境変数 @env{LC_ALL} を @samp{C} にしてみる
7260 とよい。}。
7261 標準出力が端末の場合は、出力を多段組みで (訳注:
7262 すなわち、1 行に複数ファイルの形式で) 表示し、制御文字を疑問符として
7263 出力する (ソートは縦方向に行う)。それ以外の場合は、出力が 1 行 1
7264 ファイルの形式になり、制御文字はそのまま手を加えずに出力する。
7265
7266 @command{ls} はきわめて基本的なプログラムなので、長年の間にオプションが
7267 どんどん増えてしまった。以下のサブセクションでは、そうしたオプション
7268 について説明している。各サブセクション内では、オプションを (大文字
7269 小文字を無視して) アルファベット順に並べている。このようにオプションを
7270 サブセクションに分けてはみたが、この分類法は完全なものではない。オプ
7271 ションの中には、@command{ls} の動作の複数の側面に作用するものもあるからである。
7272
7273 @cindex exit status of @command{ls}
7274 終了ステータス:
7275
7276 @display
7277 0: 成功
7278 1: 軽微な問題 (たとえば、コマンドライン引数として指定されていない
7279    ファイルやディレクトリにアクセスできなかった場合。ディレクトリの
7280    内容を一覧表示しようとしたとき、その中にあるエントリが今まさに
7281    削除やリネームの最中だと、そういうことが起きる)
7282 2: 深刻なトラブル (たとえば、メモリの不足、無効なオプション、
7283    コマンドライン引数として指定されたファイルやディレクトリに
7284    アクセスできなかった場合、ディレクトリのループなど)@end display
7285
7286 参照 @ref{Common options}.
7287
7288 @menu
7289 * Which files are listed::          表示対象にするファイル。
7290 * What information is listed::      表示する情報。
7291 * Sorting the output::              出力のソート。
7292 * Details about version sort::      バージョン・ソートの詳細。
7293 * General output formatting::       出力全体の形式。
7294 * Formatting file timestamps::      タイムスタンプのフォーマット。
7295 * Formatting the file names::       ファイル名のフォーマット。
7296 @end menu
7297
7298
7299 @node Which files are listed
7300 @subsection 表示対象にするファイル
7301
7302 以下のオプションは、どんなファイルについて @command{ls} が情報を表示するか
7303 を決定する。デフォルトで @command{ls} が表示するのは、コマンドラインで指定
7304 されたファイルだが、ディレクトリが指定された場合は、その内容になる。
7305 ただし、ディレクトリの内容のうち、名前が @samp{.} で始まるファイルは表示
7306 しない。
7307
7308 @table @samp
7309
7310 @item -a
7311 @itemx --all
7312 @opindex -a
7313 @opindex --all
7314 ディレクトリの内容を表示する際、@samp{.} で始まるファイル名も無視
7315 しない。
7316
7317 @item -A
7318 @itemx --almost-all
7319 @opindex -A
7320 @opindex --almost-all
7321 ディレクトリの内容を表示する際、@file{.} と @file{..} は無視するが、
7322 それ以外の @samp{.} で始まるいかなるファイル名も無視しない。@option{--all}
7323 (@option{-a}) オプションは、このオプションに優先する。
7324
7325 @item -B
7326 @itemx --ignore-backups
7327 @opindex -B
7328 @opindex --ignore-backups
7329 @cindex backup files, ignoring
7330 ディレクトリの内容表示において、@samp{~} で終わるファイルを無視する。
7331 このオプションは、@samp{--ignore='*~' --ignore='.*~'} と同じである。
7332
7333 @item -d
7334 @itemx --directory
7335 @opindex -d
7336 @opindex --directory
7337 @c The following sentence is the same as the one for -F.
7338 ディレクトリについても、ディレクトリ内容の一覧ではなく、他のタイプ
7339 のファイルの場合と同じように、名前だけを表示する。また、
7340 @option{--dereference-command-line} (@option{-H}), @option{--dereference}
7341 (@option{-L}),
7342 @option{--dereference-command-line-symlink-to-dir} といったオプションが
7343 指定されていないかぎり、コマンドラインでシンボリックリンクが指定
7344 されても、それをたどらない。
7345
7346 @item -H
7347 @itemx --dereference-command-line
7348 @opindex -H
7349 @opindex --dereference-command-line
7350 @cindex symbolic links, dereferencing
7351 コマンドライン引数がシンボリックリンクを指定している場合、リンク
7352 そのものではなく、リンクが参照しているファイルの情報を表示する。
7353
7354 @item --dereference-command-line-symlink-to-dir
7355 @opindex --dereference-command-line-symlink-to-dir
7356 @cindex symbolic links, dereferencing
7357 原則としてシンボリックリンクの参照を行わないが、一つだけ例外が
7358 ある。すなわち、コマンドライン引数がシンボリックリンクを指定し、
7359 それがディレクトリを指している場合は、リンクそのものではなく、
7360 そのディレクトリの情報を表示する。この動作は、リンクの参照に関係
7361 する他のオプションが全く指定されていないときの、@command{ls} のデフォルトの
7362 動作である (リンクの参照に関係する他のオプションには、@option{--classify}
7363 (@option{-F}), @option{--directory} (@option{-d}), @option{-l},
7364 @option{--dereference}
7365 (@option{-L}), @option{--dereference-command-line} (@option{-H}) がある)。
7366
7367 @item --group-directories-first
7368 @opindex --group-directories-first
7369 すべてのディレクトリをまとめてファイルの前に置き、その上で、選択
7370 したソート・キーを使って (@option{--sort} オプション参照)、ディレクトリと
7371 ファイルをそれぞれ別々にソートする。別の言い方をすると、このオプ
7372 ションはソートする際の主キーを設定し、@option{--sort} オプションが副キー
7373 を設定するということだ。ただし、@option{--sort=none} (@option{-U}) を使ったり
7374 すると、このオプションは全く無効になる。
7375
7376 @item --hide=PATTERN
7377 @opindex --hide=@var{pattern}
7378 ディレクトリの内容表示において、@option{--all} (@option{-a}) や @option{--almost-all}
7379 (@option{-A}) が同時に指定されていないかぎり、シェルのパターン @var{pattern}
7380 に名前がマッチするファイルを無視する。このオプションの動作は、
7381 @option{--ignore=@var{pattern}} とほぼ同じだが、@option{--all} (@option{-a}) や
7382 @option{--almost-all}
7383 (@option{-A}) が併せて指定されていると、効果がないという点が違う。
7384
7385 このオプションは、シェルのエイリアスで使うと、便利かもしれない。
7386 たとえば、@command{lx} が @samp{ls --hide='*~'} のエイリアスで、@command{ly} は
7387 @samp{ls --ignore='*~'} のエイリアスだとしよう。その場合、@samp{lx -A} という
7388 コマンドは、ファイル @file{README~} を表示するが、@samp{ly -A} は表示しない
7389 ことになる。
7390
7391 @item -I @var{pattern}
7392 @itemx --ignore=@var{pattern}
7393 @opindex -I
7394 @opindex --ignore=@var{pattern}
7395 ディレクトリの内容表示において、シェルのパターン (正規表現ではない)
7396 @var{pattern} に名前がマッチするファイルを無視する。シェルの場合と同様、
7397 ファイル名の先頭にある @samp{.} は @var{pattern} の先頭のワイルドカードと
7398 マッチしない。このオプションを二度以上使うと、便利なことがある。
7399 たとえば、
7400
7401 @smallexample
7402 $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
7403 @end smallexample
7404
7405 最初のオプションは @samp{.} で始まる 3 文字以上のファイル名を無視する。
7406 二番目のオプションは @samp{.} で始まる二文字のファイル名のうち、 @samp{..}
7407 を除くすべて無視し、三番目のオプションは @samp{#} で始まるファイル名を
7408 無視する。
7409
7410 @item -L
7411 @itemx --dereference
7412 @opindex -L
7413 @opindex --dereference
7414 @cindex symbolic links, dereferencing
7415 シンボリックリンクについてファイル情報を表示する際、リンクそのもの
7416 ではなく、リンクが参照しているファイルの情報を表示する。とは言え、
7417 このオプションを使用した場合でも、表示されるファイル名については、
7418 リンクそのものの名前のままであり、リンクが指しているファイルの名前
7419 にはならない。
7420
7421 @item -R
7422 @itemx --recursive
7423 @opindex -R
7424 @opindex --recursive
7425 @cindex recursive directory listing
7426 @cindex directory listing, recursive
7427 すべてのディレクトリの内容を再帰的に一覧表示する。
7428
7429 @end table
7430
7431
7432 @node What information is listed
7433 @subsection 表示する情報
7434
7435 以下のオプションは、@command{ls} がどんな情報を表示するかに関係している。
7436 @command{ls} がデフォルトで表示するのは、ファイル名だけである。
7437
7438 @table @samp
7439
7440 @item --author
7441 @opindex --author
7442 @cindex hurd, author, printing
7443 詳細形式でディレクトリ内容のリストを出力する際、各ファイルの作成者
7444 情報を表示する。GNU/Hurd では、ファイルの作成者 (author) はファイル
7445 の所有者 (owner) と別人であることがあるが、他のオペレーティング・
7446 システムでは、両者は同一である。
7447
7448 @item -D
7449 @itemx --dired
7450 @opindex -D
7451 @opindex --dired
7452 @cindex dired Emacs mode support
7453 詳細表示形式 (@option{-l}) と併せて使用すると、出力本体の後ろに以下の
7454 ような追加の行を表示する。
7455
7456 @example
7457 //DIRED// @var{beg1} @var{end1} @var{beg2} @var{end2} @dots{}
7458 @end example
7459
7460 @noindent
7461 @var{begn} や @var{endn} は符号なしの整数であり、出力における各ファイル名の
7462 開始バイト位置と終了バイト位置を示している。このようにすることで、
7463 ファイル名に空白や改行のような普段使わない文字が含まれている場合
7464 でも、手の込んだ検索をするまでもなく、Emacs が簡単にファイル名を
7465 見つけられるようにしているのである。
7466
7467 ディレクトリを再帰的にリストしている場合には (@option{-R})、
7468 各サブディレクトリ名のオフセットを記した同様の行も出力する。
7469
7470 @example
7471 //SUBDIRED// @var{beg1} @var{end1} @dots{}
7472 @end example
7473
7474 そして最後に、次の形式の行を出力する。
7475
7476 @example
7477 //DIRED-OPTIONS// --quoting-style=@var{word}
7478 @end example
7479
7480 @noindent
7481 ここで、@var{word} はクォートの方式である (@pxref{Formatting the file names})。
7482
7483 実例を挙げてみる。
7484
7485 @example
7486 $ mkdir -p a/sub/deeper a/sub2
7487 $ touch a/f1 a/f2
7488 $ touch a/sub/deeper/file
7489 $ ls -gloRF --dired a
7490   a:
7491   total 8
7492   -rw-r--r-- 1    0 Jun 10 12:27 f1
7493   -rw-r--r-- 1    0 Jun 10 12:27 f2
7494   drwxr-xr-x 3 4096 Jun 10 12:27 sub/
7495   drwxr-xr-x 2 4096 Jun 10 12:27 sub2/
7496
7497   a/sub:
7498   total 4
7499   drwxr-xr-x 2 4096 Jun 10 12:27 deeper/
7500
7501   a/sub/deeper:
7502   total 0
7503   -rw-r--r-- 1 0 Jun 10 12:27 file
7504
7505   a/sub2:
7506   total 0
7507 //DIRED// 48 50 84 86 120 123 158 162 217 223 282 286
7508 //SUBDIRED// 2 3 167 172 228 240 290 296
7509 //DIRED-OPTIONS// --quoting-style=literal
7510 @end example
7511
7512 上記 @samp{//DIRED//} 行の 2 個づつ組になっているオフセットは、次の
7513 6 個の名前の区切りとなるバイト位置を示している (訳注: 別の言い方を
7514 するなら、出力の先頭からある名前の直前までのバイト数と、その名前の
7515 最後の文字までのバイト数を示している)。6 個の名前とは、すなわち
7516 @file{f1}, @file{f2}, @file{sub}, @file{sub2}, @file{deeper}, @file{file}
7517 である。@samp{//SUBDIRED//}
7518 の行のオフセットが示しているのは、次のディレクトリ名の区切りである。
7519 @file{a}, @file{a/sub}, @file{a/sub/deeper}, @file{a/sub2}。
7520
7521 下記の例では、5 番目の項目の名前 @samp{deeper} を抜き出してみせている。
7522 この項目の名前は、217 と 223 のオフセットの組に対応している。
7523
7524 @example
7525 $ ls -gloRF --dired a > out
7526 $ dd bs=1 skip=217 count=6 < out 2>/dev/null; echo
7527 deeper
7528 @end example
7529
7530 上記のファイル一覧表示では、@samp{deeper} という項目の後ろにスラッシュ
7531 が付いているが、オフセットが名前として選択しているのは、後ろの
7532 スラッシュを除いた部分であることに注目していただきたい。しかしながら、
7533 @command{ls} を @option{--dired} とともに @option{--escape} (短縮形は @option{-b})
7534 のような
7535 オプションを付けて実行し、名前に特殊文字が入っているファイルを処理の
7536 対象にする場合には、バックスラッシュがオフセットの示す範囲のうちに
7537 含まれることに注意しなければならない。
7538
7539 @example
7540 $ touch 'a b'
7541 $ ls -blog --dired 'a b'
7542   -rw-r--r-- 1 0 Jun 10 12:28 a\ b
7543 //DIRED// 30 34
7544 //DIRED-OPTIONS// --quoting-style=escape
7545 @end example
7546
7547 引用符を付加するクォート方式を使用している場合には (たとえば、
7548 @option{--quoting-style=c})、引用符もオフセットの示す範囲に含まれる。
7549 そこで、ユーザが環境変数 @env{QUOTING_STYLE} を設定して、そうした
7550 クォート方式を選択しているかもしれないことに気を付けなければ
7551 ならない。要するに、@option{--dired} を使用するアプリケーションでは、
7552 コマンドラインで明示的に @option{--quoting-style=literal} オプションを
7553 指定するか (@option{-N} や @option{--literal} と指定しても同じことだ)、あるいは、
7554 エスケープされた名前を解析できるするようにしておくか、どちらかを
7555 するべきだということである。
7556
7557 @item --full-time
7558 @opindex --full-time
7559 詳細形式でディレクトリ内容のリストを生成し、日時の情報を省略なしで
7560 表示する。これは、@option{--format=long} を @option{--time-style=full-iso} と
7561 一緒に使うのと同じである (@pxref{Formatting file timestamps})。
7562
7563 @item -g
7564 @opindex -g
7565 詳細形式でディレクトリ内容のリストを生成するが、所有者情報は表示しない。
7566
7567 @item -G
7568 @itemx --no-group
7569 @opindex -G
7570 @opindex --no-group
7571 詳細形式でディレクトリ内容をリスト表示する際に、グループ情報を
7572 表示しない (GNU 版以外の @command{ls} には、この動作がデフォルトの
7573 ものがある。そこで、互換性のために、このオプションを用意している)。
7574
7575 @optHumanReadable
7576
7577 @item -i
7578 @itemx --inode
7579 @opindex -i
7580 @opindex --inode
7581 @cindex inode number, printing
7582 ファイル名の左側にそのファイルの inode 番号を表示する (inode
7583 番号は、ファイル連続番号とか、インデックスナンバーとも呼ばれる。
7584 この番号は、ある特定のファイルシステムにある各ファイルを、一意に
7585 指し示す)。
7586
7587 @item -l
7588 @itemx --format=long
7589 @itemx --format=verbose
7590 @opindex -l
7591 @opindex --format
7592 @opindex long ls @r{format}
7593 @opindex verbose ls @r{format}
7594 各ファイルの名前のほかに、(訳注: 行頭から順に) ファイルのタイプ、
7595 ファイルのモードビット(訳注: 一般に「アクセス権」とか「許可属性」
7596 と言われるもの)、ハードリンク数、所有者名、グループ名、サイズ、
7597 タイムスタンプを表示する (@pxref{Formatting file timestamps})。
7598 タイムスタンプは、通常は更新日時 (訳注: いわゆる mtime) である。
7599 特定することのできない情報については、疑問符を表示する。
7600
7601 通常、サイズは、桁を区切る記号を付けずに、バイト数で表示されるが、
7602 この表示法は変更することができる (@pxref{Block size})。たとえば、
7603 @option{-h} オプションを指定すると、人間に読みやすい短縮表示になり、
7604 @samp{--block-size="'1"} を指定すると、現在のロケールの区切り記号で
7605 3 桁ごとに区切ったバイト数が表示される。
7606
7607 ディレクトリの内容をリストする場合は、対象となるディレクトリ
7608 ごとに、ファイルのリストの前に @samp{total @var{blocks}} という行を置く。
7609 ここで、@var{blocks} は、そのディレクトリにあるすべてのファイルに
7610 割り当てられたディスク容量の合計である。現在のところブロック
7611 サイズはデフォルトでは 1024 バイトであるが、この値は変更する
7612 ことができる (@pxref{Block size})。@var{blocks} の計算では、
7613 各ハードリンクを別のものとして計算している。これはバグだと
7614 言えないこともない。
7615
7616 ファイルタイプには、以下の文字の一つが使われる。
7617
7618 @c The commented-out entries are ones we're not sure about.
7619
7620 @table @samp
7621 @item -
7622 通常ファイル
7623 @item b
7624 ブロック・スペシャルファイル
7625 @item c
7626 キャラクタ・スペシャルファイル
7627 @item C
7628 ハイパフォーマンス (``contiguous data'') ファイル
7629 @item d
7630 ディレクトリ
7631 @item D
7632 @c @item F
7633 @c semaphore, if this is a distinct file type
7634 ドア (Solaris 2.5 以上)
7635 @item l
7636 @c @item m
7637 @c multiplexed file (7th edition Unix; obsolete)
7638 シンボリックリンク
7639 @item M
7640 オフライン (``migrated'') ファイル (Cray DMF)
7641 @item n
7642 ネットワーク・スペシャルファイル (HP-UX)
7643 @item p
7644 FIFO (名前付きパイプ)
7645 @item P
7646 @c @item Q
7647 @c message queue, if this is a distinct file type
7648 ポート (Solaris 10 以上)
7649 @item s
7650 @c @item S
7651 @c shared memory object, if this is a distinct file type
7652 @c @item T
7653 @c typed memory object, if this is a distinct file type
7654 @c @item w
7655 @c whiteout (4.4BSD; not implemented)
7656 ソケット
7657 @item ?
7658 上記以外のファイルタイプ
7659 @end table
7660
7661 @cindex permissions, output by @command{ls}
7662 ファイルのモードビットの表示は、アクセス権を設定する際のシンボ
7663 リックモードの仕様とほぼ同じである (@pxref{Symbolic Modes})。
7664 ただし、@command{ls} は、以下のように、複数のモードビットを一つに
7665 まとめて、アクセス権の各セットの 3 番目の文字で表現している。
7666
7667 @table @samp
7668 @item s
7669 set-user-ID ビット、または set-group-ID ビットと、対応する
7670 実行ビットの両方が立っている場合。
7671
7672 @item S
7673 set-user-ID ビット、または set-group-ID ビットが立っているが、
7674 対応する実行ビットは立っていない場合。
7675
7676 @item t
7677 削除制限フラグ、またはスティキー・ビット (sticky bit) と、
7678 その他のユーザ (other) の実行ビットの両方が立っている場合。
7679 削除制限フラグは、スティッキー・ビットの別名である。@xref{Mode Structure}.
7680
7681 @item T
7682 削除制限フラグ、またはスティキー・ビットが立っているが、その他の
7683 ユーザの実行ビットが立っていない場合。
7684
7685 @item x
7686 実行ビットが立っていて、上記のどれにも当てはまらない場合。
7687
7688 @item -
7689 それ以外。
7690 @end table
7691
7692 ファイルのモードビットの後に続く 1 個の文字は、アクセス・コント
7693 ロール・リスト (ACL) のような他のアクセス方式が、そのファイルに
7694 使われているかどうかを表している。ファイルのモードビットに続く
7695 文字が空白の場合は、他のアクセス方式を使用していないということ
7696 である。表示文字が続く場合は、そうしたアクセス方式を使用している
7697 ということだ。
7698
7699 GNU の @command{ls} は、SELinux セキュリティ・コンテキストを持つが、
7700 それ以外に他のアクセス方式を使用していないファイルを示すのに、
7701 ピリオド (@samp{.}) を使う。
7702
7703 それ以外で、ファイルが、標準以外のアクセス方式の何らかの組み
7704 合わせを使用している場合には、@samp{+} 文字が印として付く。
7705
7706 @item -n
7707 @itemx --numeric-uid-gid
7708 @opindex -n
7709 @opindex --numeric-uid-gid
7710 @cindex numeric uid and gid
7711 @cindex numeric user and group IDs
7712 詳細形式でディレクトリの内容をリストするが、所有者やグループの
7713 名前の代わりに、数字の user-ID や group-ID を表示する。
7714
7715 @item -o
7716 @opindex -o
7717 詳細形式でディレクトリの内容をリストするが、グループ情報を表示
7718 しない。これは、@option{--format=long} を @option{--no-group} と併せて使うのと
7719 同じである。
7720
7721 @item -s
7722 @itemx --size
7723 @opindex -s
7724 @opindex --size
7725 @cindex disk allocation
7726 @cindex size of files, reporting
7727 各ファイルに対するディスク割り当て量をファイル名の左側に表示する。
7728 これはファイルが使用しているディスクスペースの量であり、普通は
7729 ファイルのサイズより少し多いが、穴空きファイル (sparse file) の
7730 場合は、少ないこともある。
7731
7732 通常、ディスク割り当て量は 1024 バイトを単位として表示されるが、
7733 これは変更することができる (@pxref{Block size})。
7734
7735 @cindex NFS mounts from BSD to HP-UX
7736 ファイルが HP-UX のシステムから BSD のシステムに NFS マウント
7737 されている場合、このオプションで報告されるディスク使用量は、正確な
7738 値の半分である。それに対して、HP-UX システムの場合は、BSD システム
7739 から NFS マウントされているファイルについて、このオプションは正確な
7740 値の 2 倍の量を報告する。これは、HP-UX システムにある欠陥のせい
7741 であり、HP-UX の @command{ls} プログラムも、そのとばっちりを受けている
7742 のである。
7743
7744 @optSi
7745
7746 @item -Z
7747 @itemx --context
7748 @opindex -Z
7749 @opindex --context
7750 @cindex SELinux
7751 @cindex security context
7752 SELinux セキュリティ・コンテキストを表示する。ない場合は、@samp{?} を
7753 表示する。@option{-l} オプションと一緒に使った場合は、サイズの左に
7754 セキュリティ・コンテキストを出力する。
7755
7756 @end table
7757
7758
7759 @node Sorting the output
7760 @subsection 出力のソート
7761
7762 @cindex sorting @command{ls} output
7763 以下のオプションは、@command{ls} が出力する情報を並べる際の順序を変更する。
7764 デフォルトでは、情報は文字コードによってソートされる (たとえば
7765 ASCII コード順)。
7766
7767 @table @samp
7768
7769 @item -c
7770 @itemx --time=ctime
7771 @itemx --time=status
7772 @opindex -c
7773 @opindex --time
7774 @opindex ctime@r{, printing or sorting by}
7775 @opindex status time@r{, printing or sorting by}
7776 @opindex use time@r{, printing or sorting files by}
7777 詳細表示形式 (たとえば、@option{-l}, @option{-o}) を使用しているときは、更新日時
7778 (modification time) の代わりに、ステータス変更日時 (status change
7779 time、inode の @samp{ctime}) を表示する。日時によって明示的にソートして
7780 いるときや (@option{--sort=time} あるいは @option{-t})、詳細表示形式を使用して
7781 いないときは、ステータス変更日時によってソートする。
7782
7783 @item -f
7784 @opindex -f
7785 @cindex unsorted directory listing
7786 @cindex directory order, listing by
7787 主な働きは、@option{-U} と同じで、ソートしないことである。すなわち、
7788 ファイルをリストする際、ファイルがディレクトリにどんな順序で
7789 格納されていようと、そのままの順序で出力する。それだけでなく、
7790 @option{-a} (すべてのファイルをリストする) を有効にし、@option{-l}, @option{--color},
7791 @option{-s} を (@option{-f} より前で指定されていたら) 無効にする働きもある。
7792
7793 @item -r
7794 @itemx --reverse
7795 @opindex -r
7796 @opindex --reverse
7797 @cindex reverse sorting
7798 どんな方法でソートされていようと、逆順にする。たとえば、ファイルを
7799 並べる際に、アルファベットの後ろから並べる、最新バージョンから先に
7800 並べる、サイズの小さいものから先に並べる、などなど。
7801
7802 @item -S
7803 @itemx --sort=size
7804 @opindex -S
7805 @opindex --sort
7806 @opindex size of files@r{, sorting files by}
7807 ファイルのサイズによってソートし、大きいものから順に並べる。
7808
7809 @item -t
7810 @itemx --sort=time
7811 @opindex -t
7812 @opindex --sort
7813 @opindex modification time@r{, sorting files by}
7814 更新日時 (modification time、inode の @samp{mtime}) によってソートし、
7815 新しいものから順に並べる。
7816
7817 @item -u
7818 @itemx --time=atime
7819 @itemx --time=access
7820 @itemx --time=use
7821 @opindex -u
7822 @opindex --time
7823 @opindex use time@r{, printing or sorting files by}
7824 @opindex atime@r{, printing or sorting files by}
7825 @opindex access time@r{, printing or sorting files by}
7826 詳細表示形式 (たとえば、@option{--format=long}) を使用しているときは、
7827 最終アクセス日時 (last access time、inode の @samp{atime}) を表示する。
7828 日時によって明示的にソートしているときや (@option{--sort=time} あるいは
7829 @option{-t})、詳細表示形式を使用していないときは、アクセス日時によって
7830 ソートする。
7831
7832 @item -U
7833 @itemx --sort=none
7834 @opindex -U
7835 @opindex --sort
7836 @opindex none@r{, sorting option for @command{ls}}
7837 ソートを行わない。すなわち、ファイルをリストする際、ファイルが
7838 ディレクトリにどんな順序で格納されていようと、そのままの順序で
7839 出力する (@option{-f} が行う、ソートに無関係な他のことは、何もしない)。
7840 このオプションは非常に大きなディレクトリを一覧表示するとき、
7841 ことのほか役に立つ。ソートを全くしないことで、作業速度が著しく
7842 向上するからである。
7843
7844 @item -v
7845 @itemx --sort=version
7846 @opindex -v
7847 @opindex --sort
7848 @opindex version@r{, sorting option for @command{ls}}
7849 バージョン名とバージョン番号によってソートし、低いバージョンから
7850 順に並べる。デフォルトのソート方法と動作が似ているが、 10 進数の
7851 数字が連続する各部分を、インデックス番号やバージョン番号と見なし、
7852 (文字列としてではなく) 数値として取り扱う点が違う。
7853 (@xref{Details about version sort}.)
7854
7855 @item -X
7856 @itemx --sort=extension
7857 @opindex -X
7858 @opindex --sort
7859 @opindex extension@r{, sorting files by}
7860 ディレクトリの内容をファイルの拡張子 (最後の @samp{.} の後に続く文字)
7861 によってアルファベット順でソートする。拡張子のないファイルは、
7862 最初に並べられる。
7863
7864 @end table
7865
7866
7867 @node Details about version sort
7868 @subsection バージョン・ソートの詳細
7869
7870 ファイル名にはインデックス番号やバージョン番号が含まれていることが
7871 しばしばあるが、バージョン・ソートは、そうした状況に対処している。
7872 通常のソートでは、1 文字づつ文字の比較を行うので、結果がこちらの
7873 期待する順番にならないことがよくあるのだ。バージョン・ソートが特に
7874 役に立つのは、インデックス番号やバージョン番号を名前に含むファイルが
7875 たくさんあるディレクトリを一覧するときである。
7876
7877 @example
7878 $ ls -1            $ ls -1v
7879 abc.zml-1.gz       abc.zml-1.gz
7880 abc.zml-12.gz      abc.zml-2.gz
7881 abc.zml-2.gz       abc.zml-12.gz
7882 @end example
7883
7884 バージョン・ソートにおける文字列の比較は、次のように行われる。
7885 @var{ver1} と @var{ver2} がバージョン番号で、@var{prefix} (前置部分) と @var{suffix} (後置部分)
7886 が文字列だとしよう (@var{suffix} は正規表現の @samp{(\.[A-Za-z~][A-Za-z0-9~]*)*}
7887 にマッチするもの)。その場合、@var{ver1} < @var{ver2} ならば、``@var{prefix} @var{ver1}
7888 @var{suffix}''
7889 から構成される名前は ``@var{prefix} @var{ver2} @var{suffix}'' より前に来る。
7890
7891 数字の部分の先行する 0 は無視されることにも注意していただきたい。
7892
7893 @example
7894 $ ls -1            $ ls -1v
7895 abc-1.007.tgz      abc-1.01a.tgz
7896 abc-1.012b.tgz     abc-1.007.tgz
7897 abc-1.01a.tgz      abc-1.012b.tgz
7898 @end example
7899
7900 この機能は gnulib の @code{filevercmp} 関数を使って実装されている。
7901 そこで、知っておいた方がよい注意事項がいくつかある。
7902
7903 @itemize @bullet
7904 @item @env{LC_COLLATE} は無視される。そのため、@samp{ls -v} や @samp{sort -V} は、
7905 数値ではない PREFIX (前置部分) を、@env{LC_COLLATE} ロケール・カテゴリ
7906 が @samp{C} に設定されているかのようにソートする。
7907 @item SUFFIX (後置部分) に上記の正規表現がマッチしてくれないことがある。
7908 従って、以下の例は、期待通りの順序ではないかもしれない。
7909
7910 @example
7911 abc-1.2.3.4.7z
7912 abc-1.2.3.7z
7913 @end example
7914
7915 @example
7916 abc-1.2.3.4.x86_64.rpm
7917 abc-1.2.3.x86_64.rpm
7918 @end example
7919 @end itemize
7920
7921 @node General output formatting
7922 @subsection 出力全体の形式
7923
7924 以下のオプションは出力全体の見かけに影響を及ぼす。
7925
7926 @table @samp
7927
7928 @item -1
7929 @itemx --format=single-column
7930 @opindex -1
7931 @opindex --format
7932 @opindex single-column @r{output of files}
7933 1 行 に 1 ファイルを表示する。標準出力が端末でないときの
7934 @command{ls} のデフォルトである。
7935
7936 @item -C
7937 @itemx --format=vertical
7938 @opindex -C
7939 @opindex --format
7940 @opindex vertical @r{sorted files in columns}
7941 ファイルのリストを多段組みで (訳注: すなわち、1 行に複数ファイル
7942 の形式で) 表示し、ソートは縦方向に行う。これは、標準出力が端末の
7943 ときの @command{ls} のデフォルトである。@command{dir} コマンドにとっては、これが
7944 常にデフォルトになる。GNU の @command{ls} は、できるだけ少ない行数でできる
7945 だけ多くのファイルを表示するために、段の幅を可変にしている。
7946
7947 @item --color[=@var{when}]
7948 @opindex --color
7949 @cindex color, distinguishing file types with
7950 ファイルのタイプを区別するためにカラー表示を使用するかどうかを
7951 指定する。@var{when} は省略してもよく、以下の一つでもよい。
7952 @itemize @bullet
7953 @item none
7954 @vindex none @r{color option}
7955 カラー表示を全く使用しない。これがデフォルトである。
7956 @item auto
7957 @vindex auto @r{color option}
7958 @cindex terminal, using color iff
7959 標準出力が端末の場合のみ、カラー表示を使用する。
7960 @item always
7961 @vindex always @r{color option}
7962 常にカラー表示を使用する。
7963 @end itemize
7964 @option{--color} を @var{when} を付けずに指定するのは、"@option{--color=always} と
7965 同じことである。カラー表示にしたファイル・リストをパイプで @command{more}
7966 や @command{less} のようなページャに送ると、たいての場合、判読に苦しむ
7967 羽目になる。ただし、@code{more -f} を使うと、うまく行くようだ。(訳注:
7968 訳者の手元では、@code{less -R} や @code{lv -c} で一応問題なくカラー表示が
7969 できているように見える。)
7970
7971 @vindex LS_COLORS
7972 @vindex SHELL @r{environment variable, and color}
7973 留意すべきは、@option{--color} オプションを使用すると、大量のファイルが
7974 あるディレクトリで @command{ls} を実行したとき、目に見えて動作速度が低下
7975 するかもしれないことである。これは、カラー表示のデフォルトの設定
7976 では、@command{ls} は、リストするファイルを一つづつ @code{stat} システムコールで
7977 調べる必要があるからだ。とは言え、ファイルタイプのカラー表示は
7978 おおむね使用したいけれど、他の色付けオプションは使わなくてもよい
7979 こともある (たとえば、実行属性、リンク切れ、スティッキー・ビット、
7980 その他のユーザの書き込み権限、ケーパビリティなどは、色で表示しなく
7981 てもよい)。その場合は、こんなふうに、@command{dircolors} コマンドを使用
7982 して、環境変数 @env{LS_COLORS} を設定すればよい。
7983 @example
7984 eval $(dircolors -p | perl -pe \
7985   's/^((CAP|S[ET]|O[TR]|M|E)\w+).*/$1 00/' | dircolors -)
7986 @end example
7987 そうすれば、@code{dirent.d_type} が使えるファイルシステムなら、@command{ls} は
7988 各コマンドライン引数に対してたった一回だけ @code{stat} システムコールを
7989 行うだけですむようになる。
7990
7991 @item -F
7992 @itemx --classify
7993 @itemx --indicator-style=classify
7994 @opindex -F
7995 @opindex --classify
7996 @opindex --indicator-style
7997 @cindex file type and executables, marking
7998 @cindex executables and file type, marking
7999 @c The following sentence is the same as the one for -d.
8000 各ファイル名の後ろに、ファイルタイプを示す 1 文字を付ける。
8001 通常ファイルの場合も、実行可能ファイルならば、@samp{*} を後置する。
8002 ファイルタイプの指標は、ディレクトリならば @samp{/}、シンボリック
8003 リンクならば @samp{@@}、FIFO ならば @samp{|}、ソケットならば @samp{=}、ドアならば
8004 @samp{>} であり、通常ファイルを表す指標はない。なお、
8005 @option{--dereference-command-line} (@option{-H}), @option{--dereference}
8006 (@option{-L}),
8007 @option{--dereference-command-line-symlink-to-dir} といったオプションが
8008 指定されていないかぎり、コマンドラインで指定されたシンボリックリンク
8009 をたどることはない。
8010
8011 @item --file-type
8012 @itemx --indicator-style=file-type
8013 @opindex --file-type
8014 @opindex --indicator-style
8015 @cindex file type, marking
8016 各ファイル名の後ろに、ファイルタイプを示す 1 文字を付ける。
8017 @option{-F} に似ているが、こちらは、実行ファイルに指標を付けない。
8018
8019 @item --indicator-style=@var{word}
8020 @opindex --indicator-style
8021 ファイル名の後ろに指標文字を付けるとき、@var{word} というスタイルを
8022 使用する。@var{word} には次のものがある。
8023
8024 @table @samp
8025 @item none
8026 指標文字を全く付けない。これがデフォルトである。
8027 @item slash
8028 ディレクトリの後ろに @samp{/} を付ける。これは、@option{-p} オプションと
8029 同じである。
8030 @item file-type
8031 ディレクトリ、シンボリックリンク、FIFO、ソケットの後ろに、
8032 それぞれ @samp{/}, @samp{@@}, @samp{|},  @samp{=} を付け、通常ファイルの後ろには
8033 何も付けない。これは、@option{--file-type} オプションと同じである。
8034 @item classify
8035 実行可能な通常ファイルの後ろに @samp{*} を付ける。それ以外は、
8036 @samp{file-type} の場合と同じ動作をする。これは、@option{-F} や
8037 @option{--classify} オプションと同じである。
8038 @end table
8039
8040 @item -k
8041 @itemx --kibibytes
8042 @opindex -k
8043 @opindex --kibibytes
8044 デフォルトのブロックサイズを標準の値の 1024 バイトに設定する。
8045 そのとき、環境変数でそれ以外のどんな値が設定されていても、
8046 それを上書きする (@pxref{Block size})。このオプション自身も、
8047 @option{--block-size}, @option{--human-readable} (@option{-h}),
8048 @option{--si} オプションが
8049 現れれば、それによって上書きされる。
8050
8051 @option{--kibibytes} (@option{-k}) オプションが影響を及ぼすのは、@option{-l} などの
8052 オプションが書き出すディレクトリごとのブロック数や、@option{--size}
8053 (@option{-s}) オプションが表示するディスク割り当て量に対してである。
8054 @option{-l} の表示するファイルサイズには影響を及ぼさない。
8055
8056 @item -m
8057 @itemx --format=commas
8058 @opindex -m
8059 @opindex --format
8060 @opindex commas@r{, outputting between files}
8061 ファイルを横に並べ、各行に収まる範囲でできるだけ多くの項目を
8062 表示する。ファイル同士は @samp{, } (コンマとスペース) で区切る。
8063
8064 @item -p
8065 @itemx --indicator-style=slash
8066 @opindex -p
8067 @opindex --indicator-style
8068 @cindex file type, marking
8069 ディレクトリ名の後ろに @samp{/} を付ける。
8070
8071 @item -x
8072 @itemx --format=across
8073 @itemx --format=horizontal
8074 @opindex -x
8075 @opindex --format
8076 @opindex across@r{, listing files}
8077 @opindex horizontal@r{, listing files}
8078 ファイルのリストを多段組みで (訳注: すなわち、1 行に複数ファイル
8079 の形式で) 表示し、ソートは横方向に行う。
8080
8081 @item -T @var{cols}
8082 @itemx --tabsize=@var{cols}
8083 @opindex -T
8084 @opindex --tabsize
8085 タブ位置が @var{cols} 桁ごとにあると想定する。デフォルトは 8 桁ごと。
8086 @command{ls} は効率を考慮し、使えるときはタブを出力で使用する。
8087 @var{cols} が 0 の場合は、タブを使用しない。
8088
8089 端末エミュレータの中には、ASCII 以外のバイトが前にあると、列を
8090 タブ位置の右にきちんと揃えてくれないものがあるかもしれない。
8091 この問題を回避するには、@option{-T0} オプションを使うか、環境変数
8092 @code{TABSIZE=0} を設定するかして、列を揃えるのにタブではなく、
8093 スペースを使うよう、@command{ls} に指示すればよい。
8094
8095 @item -w
8096 @itemx --width=@var{cols}
8097 @opindex -w
8098 @opindex --width
8099 @vindex COLUMNS
8100 スクリーンの横幅が @var{cols} 桁だと想定する。デフォルトの値は、
8101 可能ならば端末の設定から取得する。取得できないときは、環境変数
8102 @env{COLUMNS} を使用し、それも設定されていなければ、80 をデフォルト
8103 にする。
8104
8105 @end table
8106
8107
8108 @node Formatting file timestamps
8109 @subsection タイムスタンプのフォーマット
8110
8111 デフォルトでは、ファイルのタイムスタンプは短縮形式で表示される。
8112 すなわち、最近のタイムスタンプ以外は、@samp{Mar 30@ @ 2002} といった
8113 日付表示になり、最近のタイムスタンプは、@samp{Mar 30 23:45} といった
8114 年度なしの日付と時刻の表示になる。この書式は、後で詳しく述べる
8115 ように、現在のロケールによっては違ったものになるかもしれない。
8116
8117 @cindex clock skew
8118 タイムスタンプは、ここ 6 ヶ月以内のもので、未来の日付が付いて
8119 いなければ、最近 (@dfn{recent}) として扱われる。今日の日付のタイム
8120 スタンプが、最近用の書式で表示されない場合、そのタイムスタンプは
8121 未来扱いされている。それは、おそらく時計に狂いが生じているという
8122 ことであり、@command{make} のような、ファイルのタイムスタンプに頼っている
8123 プログラムは、まともに動かないかもしれない。
8124
8125 @vindex TZ
8126 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
8127 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
8128 いない場合は、システムのデフォルトのルールに従って表示される。
8129 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
8130 The GNU C Library Reference Manual}.
8131
8132 以下のオプションは、ファイルのタイムスタンプの表示方法を変更する。
8133
8134 @table @samp
8135 @item --time-style=@var{style}
8136 @opindex --time-style
8137 @cindex time style
8138 タイムスタンプを @var{style} 形式で表示する。@var{style} は以下の一つで
8139 なければならない。
8140
8141 @table @samp
8142 @item +@var{format}
8143 @vindex LC_TIME
8144 @var{format} を使って、タイムスタンプを表示する。その場合、@var{format}
8145 は、@command{date} コマンドの書式引数と同じように解釈される (@pxref{date invocation})。
8146 たとえば、@option{--time-style="+%Y-%m-%d %H:%M:%S"} と指定すると、
8147 @command{ls} の表示するタイムスタンプは、
8148 @samp{2002-03-30 23:45:56} のようになる。@command{date} の場合と同様、
8149 @var{format} の解釈は、@env{LC_TIME} ロケール・カテゴリの影響を受ける。
8150
8151 @var{format} に改行で分離された二つの書式文字列がある場合、前半は
8152 最近のファイル以外に使用され、後半は最近のファイルに使用される。
8153 出力される列をきちんと揃えたいならば、二つの書式のどちらかに、
8154 空白をいくつか入れる必要があるかもしれない。
8155
8156 @item full-iso
8157 タイムスタンプを省略なしで表示する。すなわち、ISO 8601 の
8158 日付、時刻、タイムゾーンという書式を nanosecond (10 億分の 1 秒)
8159 の精度で使用するわけだ。一例を挙げると、@samp{2002-03-30 23:45:56.477817180 -0700}
8160 といった表示になる。この形式は、
8161 @samp{+%Y-%m-%d %H:%M:%S.%N %z} と同じである。
8162
8163 これが有用なのは、タイムスタンプが、オペレーティング・システム
8164 から取得できる時間関係のすべての情報を含んでいるからである。
8165 たとえば、GNU の @command{make} は、あるファイルが古いかどうかを
8166 判定するのに、省略なしのタイムスタンプを使用する。そのため、
8167 この情報が、@command{make} の動作を説明してくれるのである。
8168
8169 @item long-iso
8170 ISO 8601 の書式で日付と時刻を分の単位まで表示する。たとえば、
8171 @samp{2002-03-30 23:45}。このタイムスタンプは、@samp{full-iso} タイム
8172 スタンプより短く、日常作業にはたいてい十分である。この形式は
8173 @samp{+%Y-%m-%d %H:%M} と同じである。
8174
8175 @item iso
8176 最近以外のタイムスタンプでは、ISO 8601 書式の日付を表示し
8177 (たとえば @samp{2002-03-30@ })、最近のタイムスタンプでは、ISO
8178 8601 書式の月・日・時・分を表示する (たとえば @samp{03-30 23:45})。
8179 この形式は、@samp{long-iso} の形式に比べて見かけがよくないが、より
8180 狭いスペースでほぼ同量の情報を伝えており、また、簡潔なので
8181 @command{ls} の出力を伝統的な 1 行 80 桁の出力行に納めるのに都合が
8182 よい。@command{ls} を実行する以下の二つの方法は、同じことである。
8183
8184 @example
8185 newline='
8186 '
8187 ls -l --time-style="+%Y-%m-%d $newline%m-%d %H:%M"
8188 ls -l --time-style="iso"
8189 @end example
8190
8191 @item locale
8192 @vindex LC_TIME
8193 タイムスタンプをロケール依存形式で表示する。たとえば、
8194 フィンランド語のロケールだと、最近以外のタイムスタンプを
8195 @samp{maalis 30@ @ 2002} のように表示し、最近のタイムスタンプは
8196 @samp{maalis 30 23:45} のように表示するかもしれない。ロケール
8197 依存のタイムスタンプは、概して @samp{iso} のタイムスタンプより
8198 長くなるし、ロケールごとの規則の違いは非常に大きいので、
8199 プログラムによる解析がずっと難しくなる。だが、こちらの方が
8200 わかりやすい人も大勢いる。
8201
8202 タイムスタンプの書式を決めているのは、@env{LC_TIME} ロケール・
8203 カテゴリである。デフォルトの POSIX ロケールでは、@samp{Mar 30@ @ 2002} や
8204 @samp{Mar 30 23:45} といったタイムスタンプを使っている。
8205 POSIX ロケールでは、@command{ls} を実行する次の二つの方法は、同じこと
8206 である。
8207
8208 @example
8209 newline='
8210 '
8211 ls -l --time-style="+%b %e  %Y$newline%b %e %H:%M"
8212 ls -l --time-style="locale"
8213 @end example
8214
8215 しかし、他のロケールでは動作が違う。たとえば、ドイツ語の
8216 ロケールだと、@option{--time-style="locale"} は @option{--time-style="+%e. %b %Y
8217 $newline%e. %b %H:%M"}
8218 とおそらく同じになり、@samp{30. M@"ar 2002@ }
8219 や @samp{30. M@"ar 23:45} といったタイムスタンプを生成する
8220 だろう。
8221
8222 @item posix-@var{style}
8223 @vindex LC_TIME
8224 @env{LC_TIME} ロケール・カテゴリが POSIX なら、POSIX ロケールの
8225 タイムスタンプを表示し、それ以外なら、@var{style} 形式のタイム
8226 スタンプを表示する。たとえば、@samp{posix-long-iso} という指定は、
8227 POSIX ロケールでは @samp{Mar 30@ @ 2002} や @samp{Mar 30 23:45} といった
8228 タイムスタンプを表示し、それ以外のロケールでは @samp{2002-03-30 23:45}
8229 といったタイムスタンプを表示する。
8230 @end table
8231 @end table
8232
8233 @vindex TIME_STYLE
8234 @option{--time-style} オプションのデフォルト値は、環境変数 @env{TIME_STYLE}
8235 を使って指定することができる。@env{TIME_STYLE} が設定されていない場合、
8236 デフォルトの形式は @samp{locale} である。GNU Emacs のバージョン 21.3
8237 以降では、@command{ls} の @option{--dired} オプションを使用しており、従って、
8238 どんな日付のフォーマットでも解析することができる。しかし、Emacs 21.1
8239 や 21.2 を使っていて、POSIX 以外のロケールを指定している場合は、
8240 @samp{TIME_STYLE="posix-long-iso"} を設定する必要があるかもしれない。
8241
8242 ある種のサービス不能化攻撃 (denial-of-service attacks) を回避する
8243 ため、1000 バイトより長くなりそうなタイムスタンプは、エラーとして処理
8244 されることがある。
8245
8246
8247 @node Formatting the file names
8248 @subsection ファイル名のフォーマット
8249
8250 以下のオプションは、ファイル名の表示方法を変更する。
8251
8252 @table @samp
8253
8254 @item -b
8255 @itemx --escape
8256 @itemx --quoting-style=escape
8257 @opindex -b
8258 @opindex --escape
8259 @opindex --quoting-style
8260 @cindex backslash sequences for file names
8261 ファイル名中の非表示文字 (nongraphic characters) を、C 言語で
8262 使うような、バックスラッシュにアルファベットや 8 進数を続ける方法を
8263 使用して、クォートする。
8264
8265 @item -N
8266 @itemx --literal
8267 @itemx --quoting-style=literal
8268 @opindex -N
8269 @opindex --literal
8270 @opindex --quoting-style
8271 ファイル名をクォートしない。とは言え、@command{ls} では、出力先が端末の
8272 場合、@option{--show-control-chars} が指定されていなければ、非表示文字を
8273 疑問符として表示するぐらいのことは行う。
8274
8275 @item -q
8276 @itemx --hide-control-chars
8277 @opindex -q
8278 @opindex --hide-control-chars
8279 ファイル名中の非表示文字に代えて、疑問符を表示する、この動作は、
8280 出力先が端末で、プログラムが @command{ls} の場合のデフォルトである。
8281
8282 @item -Q
8283 @itemx --quote-name
8284 @itemx --quoting-style=c
8285 @opindex -Q
8286 @opindex --quote-name
8287 @opindex --quoting-style
8288 ファイル名をダブル・クォートで囲み、非表示文字を C 言語と同じ
8289 やり方でクォートする。
8290
8291 @item --quoting-style=@var{word}
8292 @opindex --quoting-style
8293 @cindex quoting style
8294 ファイル名などの文字列には、通常使われない文字が含まれているかも
8295 しれない。このオプションを指定すると、@var{word} というスタイルを使って、
8296 そうした文字列をクォートすることになる。@var{word} は、以下に挙げるものの
8297 一つでなければならない。
8298
8299 @table @samp
8300 @item literal
8301 文字列に手を加えず、そのまま出力する。これは、@option{-N} や
8302 @option{--literal} オプションと同じである。
8303 @item shell
8304 文字列にシェルのメタ文字がある場合や、出力が誤解を招くものに
8305 なりそうな場合に、シェル向けのクォートを施す。このクォート
8306 方法は、@command{bash} のような POSIX 互換のシェルにはふさわしいもの
8307 だが、@command{csh} のような非互換のシェルでは、必ずしもうまく働く
8308 とはかぎらない。
8309 @item shell-always
8310 普通ならクォートが不要な場合でも、文字列にシェル向けのクォートを
8311 施す。
8312 @item c
8313 C 言語の文字列リテラルをクォートするときのように、文字列を
8314 クォートする。文字列をダブル・クォートで囲むことも行う。
8315 これは、@option{-Q} や @option{--quote-name} オプションと同じである。
8316 @item escape
8317 C 言語の文字列リテラルをクォートするときのように、文字列を
8318 クォートする。ただし、文字列をダブル・クォートで囲むことは
8319 しない。これは、@option{-b} や @option{--escape} と同じである。
8320 @item clocale
8321 C 言語の文字列リテラルをクォートするときのように、文字列を
8322 クォートする。ただし、文字列を囲む引用符には、ロケールに
8323 ふさわしいものを使う。
8324 @item locale
8325 @c Use @t instead of @samp to avoid duplicate quoting in some output styles.
8326 C 言語の文字列リテラルをクォートするときのように、文字列を
8327 クォートする。ただし、文字列を囲む引用符には、ロケールに
8328 ふさわしいものを使い、さらに、デフォルトの C ロケールで
8329 言うと、@t{"like this"} ではなく、@t{'like this'} のように
8330 クォートを行う。この方が見栄えのよいディスプレイが多い。
8331 @end table
8332
8333 @option{--quoting-style} オプションのデフォルト値は、環境変数
8334 @env{QUOTING_STYLE} によって指定することができる。この環境変数が
8335 設定されていない場合、デフォルトの値は @samp{literal} だが、
8336 このパッケージの将来のバージョンでは、デフォルトを @samp{shell} に
8337 変更するかもしれない。
8338
8339 @item --show-control-chars
8340 @opindex --show-control-chars
8341 ファイル名中の非表示文字に手を加えず、そのまま出力する。
8342 この動作は、出力先が端末ではない場合や、プログラムが @command{ls} では
8343 ない場合の (訳注: たとえば、@command{wc} や @command{du} の) デフォルトである。
8344
8345 @end table
8346
8347
8348 @node dir invocation
8349 @section @command{dir}: ディレクトリの内容を簡潔に表示する
8350
8351 @pindex dir
8352 @cindex directory listing, brief
8353
8354 @command{dir} の動作は、@code{ls -C -b} と同じである。すなわち、デフォルトでは、
8355 ファイルのリストを多段組みで (訳注: 1 行に複数ファイルの形式で) 表示し、
8356 ソートは縦方向に行う。また、特殊文字は、バックスラッシュ・エスケープ
8357 シーケンスを使って表示する。
8358
8359 @xref{ls invocation, @command{ls}}.
8360
8361
8362 @node vdir invocation
8363 @section @command{vdir}: ディレクトリの内容を詳細に表示する
8364
8365 @pindex vdir
8366 @cindex directory listing, verbose
8367
8368 @command{vdir} の動作は、@code{ls -l -b} と同じである。すなわち、デフォルトでは、
8369 詳細形式でファイルをリストし、特殊文字は、バックスラッシュ・エスケープ
8370 シーケンスを使って表示する。
8371
8372 @node dircolors invocation
8373 @section @command{dircolors}: @command{ls} のカラー設定
8374
8375 @pindex dircolors
8376 @cindex color setup
8377 @cindex setup for color
8378
8379 @command{dircolors} は、@command{ls} (や @command{dir} など) でカラー出力をするのに必要な
8380 端末設定のためのシェル・コマンドのシーケンスを出力する。通常、次の
8381 ような形で使用される。
8382
8383 @example
8384 eval "$(dircolors [@var{option}]@dots{} [@var{file}])"
8385 @end example
8386
8387 @var{file} が指定されていると、@command{dircolors} はそれを読み込んで、
8388 どのファイルタイプや拡張子に対してどの色を使うかを決定する。
8389 @var{file} が指定されていない場合は、プログラムに埋め込まれているデータベース
8390 が使用される。そうした設定ファイルの書式について詳しいことを知りた
8391 かったら、@samp{dircolors --print-database} を実行してみるとよい。
8392
8393 ファイル @file{~/.dircolors} が存在していたら、@command{dircolors} がそれを
8394 読み込むようにするには、以下の行を自分の @file{~/.bashrc} に書き込めばよい
8395 (お気に入りのシェルが bash でないなら、適切に書き直すこと)。
8396
8397 @example
8398 d=.dircolors
8399 test -r $d && eval "$(dircolors $d)"
8400 @end example
8401
8402 @vindex LS_COLORS
8403 @vindex SHELL @r{environment variable, and color}
8404 @command{dircolors} の出力は、環境変数 @env{LS_COLORS} を設定するシェル・
8405 コマンドである。どのシェルの文法にするかは、コマンドラインで
8406 指定することができる。指定しない場合は、環境変数 @env{SHELL} の値から
8407 @command{dircolors} が推測する。
8408
8409 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
8410
8411 @table @samp
8412 @item -b
8413 @itemx --sh
8414 @itemx --bourne-shell
8415 @opindex -b
8416 @opindex --sh
8417 @opindex --bourne-shell
8418 @cindex Bourne shell syntax for color setup
8419 @cindex @command{sh} syntax for color setup
8420 Bourne シェルのコマンドを出力する。これが、環境変数 @env{SHELL} が
8421 設定されていて、その値が @samp{csh} や @samp{tcsh} で終わっていないときの
8422 デフォルトである。
8423
8424 @item -c
8425 @itemx --csh
8426 @itemx --c-shell
8427 @opindex -c
8428 @opindex --csh
8429 @opindex --c-shell
8430 @cindex C shell syntax for color setup
8431 @cindex @command{csh} syntax for color setup
8432 C シェルのコマンドを出力する。これは、環境変数 @code{SHELL} の値が、
8433 @command{csh} や @command{tcsh} で終わっているときのデフォルトである。
8434
8435 @item -p
8436 @itemx --print-database
8437 @opindex -p
8438 @opindex --print-database
8439 @cindex color database, printing
8440 @cindex database for color setup, printing
8441 @cindex printing color database
8442 (プログラムに埋め込まれている) デフォルトのカラー設定データベースを
8443 出力する。この出力は、それ自体有効な設定ファイルであり、どういう
8444 設定が可能かについてかなり詳しく説明している。
8445
8446 @end table
8447
8448 @exitstatus
8449
8450
8451 @node Basic operations
8452 @chapter 基本的なファイル操作
8453
8454 @cindex manipulating files
8455
8456 この章では、基本的なファイル操作のためのコマンドを説明する。
8457 すなわち、コピー、移動 (名前の変更)、消去 (削除) といった操作である。
8458
8459 @menu
8460 * cp invocation::            ファイルをコピーする。
8461 * dd invocation::            ファイルの変換とコピー。
8462 * install invocation::       ファイルをコピーし属性をセットする。
8463 * mv invocation::            ファイルの移動 (名前の変更) を行う。
8464 * rm invocation::            ファイルやディレクトリを削除する。
8465 * shred invocation::         セキュリティを向上させたファイルの削除。
8466 @end menu
8467
8468
8469 @node cp invocation
8470 @section @command{cp}: ファイルやディレクトリをコピーする
8471
8472 @pindex cp
8473 @cindex copying files and directories
8474 @cindex files, copying
8475 @cindex directories, copying
8476
8477 @command{cp} はファイルをコピーする (もしそうしたければ、ディレクトリの
8478 コピーもできる)。コピーによって作られたファイルは、コピー元から全く
8479 独立したものになる。一つのファイルを別のファイルにコピーすることも
8480 できるし、好きなだけたくさんのファイルをコピー先のディレクトリに
8481 一遍にコピーすることもできる。
8482 @sp 1
8483 書式:
8484
8485 @example
8486 cp [@var{option}]@dots{} [-T] @var{source} @var{dest}
8487 cp [@var{option}]@dots{} @var{source}@dots{} @var{directory}
8488 cp [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
8489 @end example
8490
8491 @itemize @bullet
8492 @item
8493 ファイル名を二つ指定すると、@command{cp} は最初のファイルを 2 番目の
8494 ファイルにコピーする。
8495
8496 @item
8497 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
8498 それを指定しないでも、最後のファイルがディレクトリであり、しかも
8499 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
8500 @command{cp} は、各コピー元 (@var{source}) ファイルを、指定されたディレクトリに
8501 コピー元 (@var{source}) と同じ名前でコピーする。
8502 @end itemize
8503
8504 ほとんどの場合、ファイルは読み込まれたとおりに書き出される。例外に
8505 ついては、後述の @option{--sparse} オプションをご覧になっていただきたい。
8506
8507 デフォルトでは、@command{cp} はディレクトリをコピーしない。ただし、
8508 @option{-R}, @option{-a}, @option{-r} オプションを指定すると、@command{cp} は再帰的なコピーを行う。
8509 すなわち、コピー元のディレクトリを段階的に下って、対応するコピー先の
8510 ディレクトリにファイルをコピーすることになる。
8511
8512 コピー元がシンボリックリンクの場合、@command{cp} がリンクをたどるのは、
8513 (訳注: すなわち、リンクそのものではなく、参照先の実ファイルをコピー
8514 するのは)、通常では、再帰的なコピーをしていないときか、あるいは、
8515 @option{--link} (@option{-l}) オプションが使用されているときだけである。このデフォ
8516 ルトの動作は、次に挙げるオプションによって上書きすることができる。
8517 @option{--archive} (@option{-a}), @option{-d}, @option{--dereference}
8518 (@option{-L}), @option{--no-dereference}
8519 (@option{-P}), @option{-H}。こうしたオプションを二つ以上指定すると、@command{cp} は警告を
8520 出さず、最後のオプションで他のものを上書きする。
8521 @sp 1
8522 (訳注: coreutils-8.22 の @command{cp} では @option{--link} オプションの動作が変更
8523 になった。コピー元がシンボリックリンクの場合、coreutils-8.21 までは、
8524 デフォルトでは、シンボリックリンクのハードリンクを作っていたが、8.22
8525 の @command{cp} では参照先ファイルのハードリンクを作るようになっている。)
8526
8527 コピー先がシンボリックリンクの場合、@command{cp} がリンクをたどるのは、
8528 (訳注: すなわち、コピー元ファイルで、リンクそのものではなく、参照先の
8529 ファイルを上書きするのは)、そのリンクが、存在する通常ファイルを指して
8530 いるときだけである。それに対して、コピー先のシンボリックリンクがリンク
8531 切れしている場合は、@command{cp} は、デフォルトではコピーを拒否し、エラーメッ
8532 セージを出して、実行に失敗する。そうした操作は、本質的に危険だからで
8533 ある。この動作は、伝統的な習慣や POSIX の仕様に反している。たとえリスク
8534 があろうとも、リンク切れしたシンボリックリンクの参照先を @command{cp} が作成する
8535 ようにしたいなら、環境変数 @env{POSIXLY_CORRECT} を設定すればよい。なお
8536 @option{--backup} や @option{--link} といったオプションが、コピーする前にコピー先
8537 ファイルの名前変更や削除を行う場合、@command{cp} は、リンクが指しているファイル
8538 ではなく、シンボリックリンクの名前変更や削除を行う。
8539
8540 デフォルトでは、@command{cp} がスペシャルファイルの内容をコピーするのは、
8541 再帰的なコピーをしていないときだけである。このデフォルトの動作は、
8542 @option{--copy-contents} によって変更できる。
8543
8544 @cindex self-backups
8545 @cindex backups, making only
8546 @command{cp} は通常、ファイルを自分自身にコピーすることを拒否するが、次の
8547 例外がある。@var{source} と @var{dest} が同一で、しかも、通常ファイルを指している
8548 とき、@option{--force --backup} オプションが指定されると、@command{cp} は バックアップ
8549 ファイルを作成することになる。バックアップファイルを標準のものにするか
8550 (訳注: ファイルの末尾にチルダ @samp{~} が 1 個付く)、番号付きのものにするか
8551 は、いつもどおりの方法で指定できる (@pxref{Backup options})。存在する
8552 ファイルに変更を加える前に、そのバックアップをちょっと作っておきたい
8553 場合、この動作は便利である。
8554
8555 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
8556
8557 @table @samp
8558 @item -a
8559 @itemx --archive
8560 @opindex -a
8561 @opindex --archive
8562 コピーを行う際、コピー元ファイルの構造や属性をできるかぎり維持
8563 する (ただし、ディレクトリの内部構造を維持しようとはしない。その
8564 ため、コピー先で @samp{ls -U} を実行すると、コピー元とは違った順序で
8565 ファイルがリストされるかもしれない)。SELinux コンテキストや拡張
8566 属性 (xattr) も維持しようとするが、そうした操作に失敗しても無視し、
8567 その旨エラーメッセージを表示することはない。エラーメッセージが
8568 少ないだけで、@option{-dR --preserve=all} と同じある。
8569
8570 @item --attributes-only
8571 @opindex --attributes-only
8572 コピー元ファイルの指定された属性のみを、コピー先にコピーする。
8573 コピー先ファイルがすでに存在している場合、その内容を変更する
8574 ことはない。属性のうち、何をコピーするかを決める方法については、
8575 @option{--preserve} オプションの項を見ていただきたい。
8576
8577 @item -b
8578 @itemx @w{@kbd{--backup}[=@var{method}]}
8579 @opindex -b
8580 @opindex --backup
8581 @vindex VERSION_CONTROL
8582 @cindex backups, making
8583 @xref{Backup options}.  そのままでは、上書きされるか、消去されて
8584 しまう各ファイルのバックアップを作成する。特殊な用法としては、
8585 次のものがある。force と backup の両方のオプションが指定されて
8586 いるとき、コピー元 (@var{source}) とコピー先 (@var{dest}) が同じ名前で、
8587 しかも実在する通常ファイルを指していると、@command{cp} はコピー元 (@var{source})
8588 のバックアップを作成する。次のちょっとした Bourne シェルの
8589 スクリプトは、オプションのこの組み合わせの応用だが、便利である。
8590
8591 @example
8592 #!/bin/sh
8593 # Usage: backup FILE...
8594 # リストされた各 FILE について GNU スタイルのバックアップを
8595 # 作成する
8596 fail=0
8597 for i; do
8598   cp --backup --force --preserve=all -- "$i" "$i" || fail=1
8599 done
8600 exit $fail
8601 @end example
8602
8603 @item --copy-contents
8604 @cindex directories, copying recursively
8605 @cindex copying directories recursively
8606 @cindex recursively copying directories
8607 @cindex non-directories, copying as special files
8608 再帰的なコピーを行っている際に、スペシャルファイル (たとえば、
8609 FIFO やデバイスファイル) の内容を、操作対象が通常ファイルで
8610 あるかのようにコピーする。要するに、コピー元の各ファイルから
8611 データを読み込んで、それをコピー先に書き出そうとするわけである。
8612 このオプションを使うのは、ほとんどの場合誤りである。なぜなら、
8613 FIFO や、通常 @file{/dev} ディレクトリにあるようなスペシャルファイルを
8614 対象にした場合、望ましくない結果を生ずることが珍しくないからだ。
8615 @code{cp -R --copy-contents} は、FIFO や @file{/dev/console} のような
8616 スペシャルファイルからデータを読み込もうとすると、たいていの
8617 場合、いつまでも無反応になるだろうし、@file{/dev/zero} をコピーしよう
8618 とすれば、コピー先のディスクを溢れさせてしまうだろう。この
8619 オプションは、再帰的なコピーをするとき以外、効果を持たない。
8620 また、シンボリックリンクのコピーには影響しない。
8621
8622 @item -d
8623 @opindex -d
8624 @cindex symbolic links, copying
8625 @cindex hard links, preserving
8626 シンボリックリンクをコピーする際、リンクが指しているファイルを
8627 コピーするのではなく、シンボリックリンクをシンボリックリンクとして
8628 コピーする。また、コピー元において複数のファイルがハードリンクの
8629 関係にある場合、コピー先でもその関係を維持する。
8630 @option{--no-dereference --preserve=links} と同じである。
8631
8632 @item -f
8633 @itemx --force
8634 @opindex -f
8635 @opindex --force
8636 このオプションを付けずにコピーを行う場合、コピー先ファイルが
8637 すでに存在し、しかも書き込みモードでオープンできないと、コピー
8638 に失敗する。それに対して、@option{--force} を付けた場合は、コピー先
8639 ファイルがオープンできないと、@command{cp} は、まずそれを削除してから、
8640 再度オープンを試みる。この動作は、@option{--force} と一緒に @option{--link} や
8641 @option{--symbolic-link} を使用した場合に行われる動作とは、違うことに
8642 注意していただきたい。後者の場合は、すでに存在するコピー先ファイル
8643 は一度もオープンされず、むしろ無条件で削除されるのである。
8644 @option{--remove-destination} の説明も参照すること。
8645
8646 このオプションは、@option{--interactive} や @option{-i} オプションとは無関係
8647 である。どちらも他方の効果を無効にすることはない。
8648
8649 @option{--no-clobber} や @option{-n} オプションを使用している場合、このオプション
8650 は無視される。
8651
8652 @item -H
8653 @opindex -H
8654 コマンドラインの引数がシンボリックリンクを指定している場合には、
8655 シンボリックリンクそのものではなく、それが指しているファイルを
8656 コピーする。とは言え、再帰的にディレクトリ・ツリーをたどっている
8657 ときにシンボリックに出会った場合は、そのまま (つまり、シンボリック
8658 リンクとして) コピーする。
8659
8660 @item -i
8661 @itemx --interactive
8662 @opindex -i
8663 @opindex --interactive
8664 ディレクトリ以外のファイルをコピーする際に、コピー先ファイルが
8665 すでに存在していると、プロンプトを出して、ファイルを上書きして
8666 よいかどうか、ユーザに問い合わせる。@option{-i} オプションは、@option{-n}
8667 オプションが前にあるとき、それを無効にする。
8668
8669 @item -l
8670 @itemx --link
8671 @opindex -l
8672 @opindex --link
8673 コピー元がディレクトリ以外の場合、コピーする代わりに、ハードリンクを
8674 作成する。
8675
8676 @item -L
8677 @itemx --dereference
8678 @opindex -L
8679 @opindex --dereference
8680 コピー元がシンボリックリンクの場合は、その参照先をコピーする。
8681 また、このオプションを使った場合、@command{cp} はシンボリックリンクを
8682 作ることができない。たとえば、コピー元のディレクトリ・ツリー中に
8683 (通常ファイルに対する) シンボリックリンクがあると、コピー先のディ
8684 レクトリ・ツリーには、通常ファイルとしてコピーされることになる。
8685
8686 @item -n
8687 @itemx --no-clobber
8688 @opindex -n
8689 @opindex --no-clobber
8690 存在するファイルを上書きしない。@option{-n} オプションは、@option{-i} オプション
8691 が前にあるとき、それを無効にする。このオプションと @option{-b} (@option{--backup})
8692 オプションは、どちらか一方しか指定できない。
8693
8694 @item -P
8695 @itemx --no-dereference
8696 @opindex -P
8697 @opindex --no-dereference
8698 @cindex symbolic links, copying
8699 コピー元がシンボリックリンクの場合、それが指しているファイルを
8700 コピーするのではなく、シンボリックリンクとしてコピーする。この
8701 オプションが作用を及ぼすのは、コピー元のシンボリックリンクに対して
8702 だけであり、コピー先に指定されたシンボリックリンクについては、
8703 可能なかぎり常に参照先がたどられる。
8704
8705 @item -p
8706 @itemx @w{@kbd{--preserve}[=@var{attribute_list}]}
8707 @opindex -p
8708 @opindex --preserve
8709 @cindex file information, preserving, extended attributes, xattr
8710 コピー元ファイルの属性のうち、指定されたものをコピー先でも維持する。
8711 @var{attribute_list} を指定する場合は、一つ以上の以下の文字列をコンマで
8712 区切ったリストでなければならない。
8713
8714 @table @samp
8715 @item mode
8716 ファイルのモードビット (訳注: 一般にアクセス権とか、許可属性と
8717 言われるもの) やアクセス・コントロール・リストを維持する。
8718 @item ownership
8719 所有者とグループを維持する。ほとんどの最近のシステムでは、
8720 ファイルの所有者を変更できるのは、しかるべき権限を持ったユーザ
8721 だけである。また、一般ユーザにファイルのグループが維持できるの
8722 は、維持しようとするグループに、たまたまそのユーザが属している
8723 ときのみである。
8724 @item timestamps
8725 最終アクセス日時 (last access time) と最終更新日時 (last
8726 modification time) を、可能ならば、維持する。古いシステム
8727 では、対象となるファイルがシンボリックリンクの場合、そうした
8728 属性を維持することができない。それに対して、最近のシステム
8729 では、たいていのものが @code{utimensat} 関数を用意しているので、
8730 シンボリックリンクの場合でも、日時関係の属性維持が可能である。
8731 @item links
8732 コピー元のファイル同士が (ハードリンクであれ、シンボリック
8733 リンクであれ)リンクの関係にあるとき、コピー先の対応する
8734 ファイル同士でも、その関係を維持する。ただし、@option{-L} や @option{-H} と
8735 一緒に使った場合、このオプションがシンボリックリンクを
8736 ハードリンクに変更することがあるのに、注意していただきたい。
8737 一例を挙げる。
8738 @example
8739 $ mkdir c; : > a; ln -s a b; cp -aH a b c; ls -i1 c
8740 74161745 a
8741 74161745 b
8742 @end example
8743 @noindent
8744 コピー元に注目していただきたい。@file{b} は、通常ファイル @file{a} を
8745 指すシンボリックリンクである。ところが、コピー先ディレクトリ
8746 @file{c/} の二つのファイルは、ハードリンクになっている。@option{-a} は
8747 @option{--no-dereference} を意味するのだから、シンボリックリンクが
8748 コピーされそうに思えるが、この場合は、後に続く @option{-H} が、
8749 コマンドライン引数の参照をたどるように @command{cp} に命じているので、
8750 @command{cp} には、同じ inode 番号を持った 2 個のファイルがコマンド
8751 ラインで指定されているように見えるのである。さらに、@option{-a} は
8752 @option{--preserve=links} オプションを意味してもいるので、この働きに
8753 よって、ハードリンクと認識された両ファイルの関係が、コピー先で
8754 維持されることになるのである。
8755
8756 次のものは、@command{cp} の @option{-L} を使った場合の類似例である。
8757 @smallexample
8758 $ mkdir b c; (cd b; : > a; ln -s a b); cp -aL b c; ls -i1 c/b
8759 74163295 a
8760 74163295 b
8761 @end smallexample
8762
8763 @item context
8764 ファイルの SELinux セキュリティ・コンテキストを維持する。
8765 それができないときは、詳細なエラーメッセージを出し、失敗の
8766 ステータスで終了する。
8767 @item xattr
8768 ファイルの拡張属性を維持する。それができないときは、詳細な
8769 エラーメッセージを出し、失敗のステータスで終了する。@command{cp} が
8770 xattr のサポートなしでビルドされている場合は、このオプション
8771 は無視される。SELinux コンテキスト、ACL、ケーパビリティなどを
8772 xattr を使って実装している場合には、そうした属性もこのオプ
8773 ションによって、明示的な指定がない場合でも維持される。すなわち、
8774 @option{--preserve=mode} や @option{--preserve=context} を指定しないでも維持
8775 されるわけだ。
8776 @item all
8777 ファイルの属性をすべて維持する。上記のすべてを指定するのと
8778 同じことだが、SELinux セキュリティ・コンテキストや拡張属性の
8779 維持に失敗しても、@command{cp} の終了ステータスが変わらないという点が
8780 異なっている。@option{-a} とは違って、@samp{Operation not supported} 以外のすべての
8781 警告メッセージを出力する。
8782 @end table
8783
8784 @var{attribute_list} なしで @option{--preserve} を使用するのは、
8785 @option{--preserve=mode,ownership,timestamps} と同じことである。
8786
8787 このオプションを使わない場合、コピー先ファイルがすでに存在して
8788 いる場合は、その許可属性は変更されない。一方、新しくファイルが
8789 作成される場合は、各コピー先ファイルのモードビットは、対応する
8790 コピー元ファイルのモードビットを元にして、そこから umask で設定
8791 されているビットと、set-user-ID や set-group-ID ビットを落とした
8792 ものになる。@xref{File permissions}.
8793
8794 @item @w{@kbd{--no-preserve}=@var{attribute_list}}
8795 @cindex file information, preserving
8796 指定された属性を維持しない。@var{attribute_list} の書式は、@option{--preserve}
8797 の場合と同じである。
8798
8799 @item --parents
8800 @opindex --parents
8801 @cindex parent directories and @command{cp}
8802 コピー先の各ファイル名を生成する際、出力先に指定されたディレクトリ
8803 の末尾にスラッシュを付け、その後ろにコピー元として指定された
8804 ファイル名を付け足すことによってそれを行う。@command{cp} に渡す最後の
8805 引数は、実在するディレクトリの名前でなければならない。一例を挙げる。
8806
8807 @example
8808 cp --parents a/b/c existing_dir
8809 @end example
8810
8811 @noindent
8812 ファイル @file{a/b/c} を上記のコマンドでコピーすると、ファイル
8813 @file{existing_dir/a/b/c} が出来る。途中のディレクトリが存在して
8814 いなければ、それも作成される。
8815
8816 @item -R
8817 @itemx -r
8818 @itemx --recursive
8819 @opindex -R
8820 @opindex -r
8821 @opindex --recursive
8822 @cindex directories, copying recursively
8823 @cindex copying directories recursively
8824 @cindex recursively copying directories
8825 @cindex non-directories, copying as special files
8826 ディレクトリを再帰的にコピーする。デフォルトでは、@option{--link} (@option{-l})
8827 オプションが同時に使われていないかぎり、コピー元にあるシンボリック
8828 リンクの参照先をたどることをしない。@option{--archive} (@option{-a}), @option{-d},
8829 @option{--dereference} (@option{-L}), @option{--no-dereference}
8830 (@option{-P}), @option{-H} などの
8831 オプションを参照。スペシャルファイルについては、コピーする際に、
8832 コピー元ファイルと同じファイル型のコピー先ファイルを作成する。
8833 @option{--copy-contents} を参照。シンボリックリンクやスペシャルファイルの
8834 コピーに @option{-r} オプションを使用するのは、どのシステムでも通用する
8835 ことではない。GNU 以外のシステムの中には、歴史的な理由から、
8836 @option{-r} が、@option{-L} と @option{--copy-contents} を同時に指定するのと等価になっている
8837 ものもあるのだ。また、シンボリックリンクをコピーするのに @option{-R} を
8838 使用するのも、@option{-P} も併せて指定しないかぎり、どのシステムでも通用
8839 することではない。デフォルトでシンボリックリンクの参照先をたどる
8840 実装が、POSIX で認められているからである。
8841
8842 @item --reflink[=@var{when}]
8843 @opindex --reflink[=@var{when}]
8844 @cindex COW
8845 @cindex clone
8846 @cindex copy on write
8847 ファイルシステムがサポートしていれば、軽便コピー、すなわち、
8848 書き込み時コピー(copy-on-write (COW) copy) を行う。留意すべきは、
8849 これが成功した場合、コピー元とコピー先のファイルは、どちらかに
8850 対して変更が加えられるまで、ディスクの同じデータブロックを共有
8851 しているということである。従って、ディスク I/O エラーが起きて、
8852 片方のファイルのデータブロックが損傷を受ければ、もう一方の
8853 ファイルも同じ被害に会う。
8854
8855 @var{when} の値には、次のうちの一つが使える。
8856
8857 @table @samp
8858 @item always
8859 デフォルトの動作である。copy-on-write がサポートされていない
8860 場合は、各ファイルについて失敗した旨を報告し、失敗を示す
8861 ステータスで終了する。
8862
8863 @item auto
8864 copy-on-write 操作がサポートされていない場合は、copy-on-write
8865 をあきらめて、標準のコピー動作を行う。
8866 @end table
8867
8868 このオプションは、@option{--link}, @option{--symbolic-link}
8869 @option{--attributes-only}
8870 オプションによって無効になるので、データをコピーする際の @command{cp} の
8871 デフォルト動作の設定に使用することができる。たとえば、次のエイリ
8872 アスを使うと、@command{cp} は、ファイルシステムがサポートする範囲で、
8873 ディスクスペースの使用を最少に留めるようになる。
8874
8875 @example
8876 alias cp='cp --reflink=auto --sparse=always'
8877 @end example
8878
8879 @item --remove-destination
8880 @opindex --remove-destination
8881 コピー先ファイルがすでに存在する場合、その各々についてオープンを
8882 試みる前に、削除する (上述の @option{-f} と比較すること)。
8883
8884 @item --sparse=@var{when}
8885 @opindex --sparse=@var{when}
8886 @cindex sparse files, copying
8887 @cindex holes, copying files with
8888 @findex read @r{system call, and holes}
8889 穴空きファイル (@dfn{sparse file}) とは、穴 (@dfn{holes}) を含むファイル
8890 である。穴というのは、物理的なディスクブロック上には存在しない
8891 ゼロバイトの連続で、@samp{read} システムコールがそれを読む込むとき、
8892 ゼロの連続として扱うものである。バイナリ・ファイルには、連続する
8893 ゼロバイトがたくさん含まれていることが多いので、この仕組みは、
8894 ディスクスペースを大いに節約してくれるし、動作速度の向上を
8895 もたらしてもくれる。デフォルトで @command{cp} は、かなり大雑把な発見的
8896 手法を使って、コピー元ファイルにある穴を検出し、対応するコピー先
8897 ファイルも穴空きファイルにする。なお、穴空きファイルにできるのは、
8898 通常ファイルだけである。
8899
8900 @var{when} の値には、次のうちの一つが使える。
8901
8902 @table @samp
8903 @item auto
8904 デフォルトの動作である。すなわち、コピー元が穴空きファイルなら、
8905 コピー先も穴空きファイルにしようとする。ただし、コピー先
8906 ファイルがすでに存在し、通常ファイル以外を指している場合は、
8907 それを穴空きにしようとはしない。
8908
8909 @item always
8910 たとえ、コピー元ファイルが穴空きファイルに見えなくても、十分に
8911 長いゼロバイトの連続があれば、その各々に対応する穴をコピー先
8912 ファイルに設けようとする。この動作が役に立つのは、コピー元
8913 ファイルが、穴空きファイルをサポートしていないファイルシステム
8914 にあるのに対し (たとえば、SGI IRIX 5.3 以前の @samp{efs} ファイル
8915 システム)、コピー先ファイルは穴空きファイルをしっかりサポート
8916 するタイプのファイルシステムにある場合である。穴を作ることが
8917 できるのは、通常ファイルだけなので、コピー先が通常ファイル以外
8918 なら、@command{cp} がそのファイルを穴空きにしようと試みることもない。
8919
8920 @item never
8921 コピー先ファイルを穴空きにしない。これは、@command{mkswap} コマンドで
8922 使用するファイルを作成するときに役に立つ。そうしたファイルには、
8923 穴があってはならないからである。
8924 @end table
8925
8926 @optStripTrailingSlashes
8927
8928 @item -s
8929 @itemx --symbolic-link
8930 @opindex -s
8931 @opindex --symbolic-link
8932 @cindex symbolic links, copying with
8933 コピー元がディレクトリ以外の場合、コピーする代わりに、シンボリック
8934 リンクを作成する。出力先ファイルをカレント・ディレクトリに作成する
8935 場合を除いて、コピー元ファイルの名前は、すべて (@samp{/} で始まる) 絶対
8936 パス表記でなければならない。シンボリックリンクをサポートしていない
8937 システムでは、このオプションはエラーメッセージを出すだけである。
8938
8939 @optBackupSuffix
8940
8941 @optTargetDirectory
8942
8943 @optNoTargetDirectory
8944
8945 @item -u
8946 @itemx --update
8947 @opindex -u
8948 @opindex --update
8949 @cindex newer files, copying only
8950 ディレクトリ以外のものをコピーする際、それがコピー先にも存在し、
8951 しかもその更新日時 (modification time) がコピー元と同じか、より
8952 新しい場合、コピーを行わない。コピー元からコピー先へタイムスタンプを
8953 引き継がせている場合には、コピー元のタイムスタンプの精度を、コピー先
8954 のファイルシステム、及びタイプスタンプの更新に使われるシステムコール
8955 の精度に落とした上で、比較を行う。これは、同じコピー元とコピー先の
8956 ファイルに対して @samp{cp -pu} コマンドを何回か実行する場合に、余計な
8957 コピー作業が起きるのを避けるためである。@option{--preserve=links} が一緒に
8958 指定されている場合は (たとえば、@samp{cp -au} だとそうなる)、そちらが
8959 優先されることになる。その結果、コピー元でファイルが処理される順番
8960 によっては、コピー元のハードリンクを反映させるために、コピー先の
8961 より新しいファイルが置き換えられることもある。
8962
8963 @item -v
8964 @itemx --verbose
8965 @opindex -v
8966 @opindex --verbose
8967 コピーを行う前に、コピーするファイル名を表示する。
8968
8969 @item -x
8970 @itemx --one-file-system
8971 @opindex -x
8972 @opindex --one-file-system
8973 @cindex file systems, omitting copying to different
8974 あるファイルシステムでコピーを始めた場合、別のファイルシステム
8975 にあるサブディレクトリをスキップする。ただし、マウントポイントの
8976 ディレクトリはコピーされる。
8977
8978 @macro optContext
8979 @item -Z
8980 @itemx --context[=@var{context}]
8981 @opindex -Z
8982 @opindex --context
8983 @cindex SELinux, setting/restoring security context
8984 @cindex security context
8985 @var{context} が指定されていない場合は、出力するファイルの SELinux
8986 セキュリティ・コンテキストを、出力先におけるシステムのデフォルト
8987 のタイプによって調整する。これは、@command{restorecon} コマンドの動作に
8988 似ている。このオプションの長い形式を使って、コンテキストを明示的に
8989 指定した場合、そのコンテキストが設定されるのは、新しく作成される
8990 ファイルに対してのみである。コンテキストを指定した場合に、SELinux
8991 が無効になっていると、警告メッセージを出す。
8992 @end macro
8993 @optContext このオプションと
8994 @option{--preserve=context} を一緒に使うことはできない。また、この
8995 オプションは @option{--preserve=all} や @option{-a} オプションに優先する。
8996 (coreutils-8.22 の新機能)
8997
8998 @end table
8999
9000 @exitstatus
9001
9002
9003 @node dd invocation
9004 @section @command{dd}: ファイルの変換とコピー
9005
9006 @pindex dd
9007 @cindex converting while copying a file
9008
9009 @command{dd} はファイルをコピーする (デフォルトでは、標準入力から標準出力へ
9010 コピーする)。その際、入出力のブロックサイズを変更することができる。
9011 また、コピーと同時にデータ形式の変換を行うこともできる。
9012 @sp 1
9013 書式:
9014
9015 @example
9016 dd [@var{operand}]@dots{}
9017 dd @var{option}
9018 @end example
9019
9020 指定できるオプションは、@option{--help} と @option{--version} だけである。
9021 @xref{Common options}.  @command{dd} では、以下のオペランドが使える。オペランドの
9022 書式の元になったのは、OS/360 の JCL (Job Control Language) の DD 文
9023 (Data Definition statement) である。
9024
9025 @table @samp
9026
9027 @item if=@var{file}
9028 @opindex if
9029 標準入力の代わりに、@var{file} から読み込む。
9030
9031 @item of=@var{file}
9032 @opindex of
9033 標準出力の代わりに、@var{file} に書き出す。@samp{conv=notrunc} が指定されて
9034 いない場合、@command{dd} は、出力を開始する前に、@var{file} を 0 バイトに
9035 (あるいは、@samp{seek=} で指定されたサイズに) 短縮する。
9036
9037 @item ibs=@var{bytes}
9038 @opindex ibs
9039 @cindex block size of input
9040 @cindex input block size
9041 入力ブロックサイズを @var{bytes} にする。@command{dd} が 1 ブロック @var{bytes}
9042 バイトで読み込みを行うようになる。デフォルトは 512 バイトである。
9043
9044 @item obs=@var{bytes}
9045 @opindex obs
9046 @cindex block size of output
9047 @cindex output block size
9048 出力ブロックサイズを @var{bytes} にする。@command{dd} が 1 ブロック @var{bytes}
9049 バイトで書き出しを行うようになる。デフォルトは 512 バイトである。
9050
9051 @item bs=@var{bytes}
9052 @opindex bs
9053 @cindex block size
9054 入力、出力、両方のブロックサイズを @var{bytes} にする。@command{dd} が
9055 1 ブロック @var{bytes} バイトで読み書きを行うようになり、@samp{ibs} や @samp{obs}
9056 の指定は、あっても無効になる。さらに、データ変換を行う @option{conv}
9057 オプションが指定されていない場合には、入力は、それがブロックサイズ
9058 より小さくても、読み込まれるやいなや、出力にコピーされることになる。
9059
9060 @item cbs=@var{bytes}
9061 @opindex cbs
9062 @cindex block size of conversion
9063 @cindex conversion block size
9064 @cindex fixed-length records, converting to variable-length
9065 @cindex variable-length records, converting to fixed-length
9066 変換ブロックサイズを @var{bytes} にする。可変長のレコードを固定長の
9067 レコードに変換するときや (@option{conv=block})、その逆を行うとき
9068 (@option{conv=unblock})、固定長レコードの長さとして @var{bytes} の値を使用する。
9069
9070 @item skip=@var{n}
9071 @opindex skip
9072 入力ファイルで @samp{ibs} バイトのブロックを @var{n} 個読み飛ばしてから、
9073 コピーを行う。@samp{iflag=skip_bytes} が指定されている場合は、@var{n} は
9074 ブロック数ではなく、バイト数と見なされる。
9075
9076 @item seek=@var{n}
9077 @opindex seek
9078 出力ファイルで @samp{obs} バイトのブロックを @var{n} 個スキップしてから、
9079 コピーを行う。@samp{oflag=seek_bytes} が指定されている場合は、 @var{n} は
9080 ブロック数ではなく、バイト数と見なされる。
9081
9082 @item count=@var{n}
9083 @opindex count
9084 入力ファイルの末尾まで全部ではなく、@samp{ibs} バイトのブロックを @var{n}
9085 個だけ入力ファイルからコピーする。@samp{iflag=count_bytes} が指定
9086 されている場合は、@var{n} はブロック数ではなく、バイト数と見なされる。
9087 なお、次のことに注意してほしい。パイプから読み込んでいる場合
9088 などに時おり起きることだが、入力からの読み込みがブロックの
9089 大きさに足りないことがある。そうした場合に @samp{iflag=fullblock} が
9090 指定してあると、@samp{count=} は、一杯になるまで読み込むブロックの
9091 個数に対応するようになる。入力から読み込みを実行する回数という
9092 POSIX で規定されている伝統的な動作には、対応しなくなるのだ。
9093
9094 @item status=@var{which}
9095 @opindex status
9096 通常では @samp{INFO} シグナルを受け取った時点や、@command{dd} が終了したときに、
9097 転送情報が標準エラーに出力される。@var{which} を指定することで、どの情報
9098 を表示しないかを設定できる。
9099
9100 @table @samp
9101
9102 @item noxfer
9103 @opindex noxfer @r{dd status=}
9104 転送速度や転送量の統計を表示しない。通常は、そうした情報が
9105 ステータス表示の最後の行になる。
9106
9107 @item none
9108 @opindex none @r{dd status=}
9109 情報メッセージや警告メッセージを標準エラーに全く表示しない。
9110 エラーメッセージは通常どおり出力する。
9111
9112 @end table
9113
9114 @item conv=@var{conversion}[,@var{conversion}]@dots{}
9115 @opindex conv
9116 @var{conversion} 引数 (複数可) で指定されたようにファイルを変換する。
9117 (コンマの前後にスペースを入れてはいけない。)
9118
9119 @var{conversion} には次のものが指定できる:
9120
9121 @table @samp
9122
9123 @item ascii
9124 @opindex ascii@r{, converting to}
9125 POSIX が規定している変換テーブルを使って、EBCDIC を ASCII に
9126 変換する。変換テーブル中の 256 バイトのすべてについて、
9127 1 対 1 の変換が行われる。
9128
9129 @item ebcdic
9130 @opindex ebcdic@r{, converting to}
9131 ASCII を EBCDIC に変換する。これは @samp{ascii} 変換の逆の動作で
9132 ある。
9133
9134 @item ibm
9135 @opindex alternate ebcdic@r{, converting to}
9136 POSIX が規定しているもう一つの変換テーブルを使って、ASCII を
9137 EBCDIC の別の形式に変換する。こちらは 1 対 1 の変換ではない
9138 が、@samp{~}, @samp{[}, @samp{]} について、よく使われる伝統的な慣行を反映
9139 している。
9140
9141 @samp{ascii}, @samp{ebcdic}, @samp{ibm} は、どれか一つしか指定できない。
9142
9143 @item block
9144 @opindex block @r{(space-padding)}
9145 入力 1 行あたり、@samp{cbs} バイト分を出力する。入力中の改行は
9146 スペースに置き換え、@samp{cbs} バイトに足りない分はスペースで
9147 埋める。
9148
9149 @item unblock
9150 @opindex unblock
9151 @samp{cbs} バイトの大きさからなる各入力ブロックに対して、末尾に
9152 スペースがあれば、それをすべて削除し、改行を追加する。
9153
9154 @samp{block} と @samp{unblock} は、どちらか一方しか指定できない。
9155
9156 @item lcase
9157 @opindex lcase@r{, converting to}
9158 大文字を小文字に変換する。
9159
9160 @item ucase
9161 @opindex ucase@r{, converting to}
9162 小文字を大文字に変換する。
9163
9164 @samp{lcase} と @samp{ucase} は、どちらか一方しか指定できない。
9165
9166 @item sparse
9167 @opindex sparse
9168 出力ブロックが NUL のみからなっているとき、それを書き出さず
9169 に、seek を試みる。穴空きファイル (sparse file) をサポート
9170 しているシステムでは、この動作は、出力ファイルを書き出して
9171 いるときに、穴空きの出力を作成することになる。このオプションを
9172 @samp{conv=notrunc} や @samp{oflag=append} と一緒に使う際は、気をつけ
9173 なければならない。@samp{conv=notrunc} が付いていると、入力中の NUL
9174 ブロックに対応する位置にある、出力ファイル中の存在するデータは、
9175 そのまま保持されることになる。@samp{oflag=append} を付けた場合は、
9176 seek は行っても効果がない。なお、@samp{conv=sparse} では、出力先が
9177 ファイルではなく、デバイスの場合も、入力中の NUL ブロックは
9178 やはりコピーされない。そんなわけで、このオプションが最も役に
9179 立つのは、仮想デバイスや、前もって 0 で初期化したデバイスに
9180 対してである。
9181
9182 @item swab
9183 @opindex swab @r{(byte-swapping)}
9184 @cindex byte-swapping
9185 入力された全バイトを 2 個づつ組にして、前後を入れ替える。GNU
9186 の @command{dd} は、他の @command{dd} とは違って、読み込むバイトが奇数個でも
9187 動作する。最後のバイトは (入れ替えるものがないので) そのまま
9188 コピーするのである。
9189
9190 @item sync
9191 @opindex sync @r{(padding with ASCII NULs)}
9192 すべての入力ブロックに対して @samp{ibs} の大きさになるまで、末尾を
9193 ゼロバイトで埋める。@samp{block} や @samp{unblock} と一緒に使用する
9194 と、ゼロバイトの代わりにスペースで埋める。
9195
9196 @end table
9197
9198 以下の @var{conversion} は、実のところファイルの扱いに関するフラグ
9199 なので、内的な処理には影響を及ぼさない。
9200
9201 @table @samp
9202 @item excl
9203 @opindex excl
9204 @cindex creating output file, requiring
9205 出力ファイルがすでに存在する場合は、実行に失敗する。
9206 言い換えれば、@command{dd} が出力ファイルを自分で作成しなければ
9207 ならないということである。
9208
9209 @item nocreat
9210 @opindex nocreat
9211 @cindex creating output file, avoiding
9212 出力ファイルを作成しない。言い換えれば、出力ファイルは前もって
9213 存在していなければならないということだ。
9214
9215 @samp{excl} と @samp{nocreat} は、どちらか一方しか指定できない。
9216
9217 @item notrunc
9218 @opindex notrunc
9219 @cindex truncating output file, avoiding
9220 出力ファイルに対して短縮操作をしない (訳注: @samp{of=@var{file}} の項を
9221 参照)。
9222
9223 @item noerror
9224 @opindex noerror
9225 @cindex read errors, ignoring
9226 読み込みエラーがあっても、作業を続行する。
9227
9228 @item fdatasync
9229 @opindex fdatasync
9230 @cindex synchronized data writes, before finishing
9231 コマンドを終了する直前に、出力データを同期させる。すなわち、
9232 出力データをディスクに実際に書き込む。
9233
9234 @item fsync
9235 @opindex fsync
9236 @cindex synchronized data and metadata writes, before finishing
9237 コマンドを終了する直前に、出力データだけでなく、メタデータも
9238 同期させる。すなわち、出力データとメタデータをディスクに
9239 実際に書き込む。
9240
9241 @end table
9242
9243 @item iflag=@var{flag}[,@var{flag}]@dots{}
9244 @opindex iflag
9245 引数 @var{flag} によって指定されたフラグを使って、入力ファイルに
9246 アクセスする。(コンマの前後にスペースを入れてはいけない。)
9247
9248 @item oflag=@var{flag}[,@var{flag}]@dots{}
9249 @opindex oflag
9250 引数 @var{flag} によって指定されたフラグを使って、出力ファイルに
9251 アクセスする。(コンマの前後にスペースを入れてはいけない。)
9252
9253 フラグには次のものがある。どのオペレーティング・システムでも、
9254 すべてのフラグが使えるわけではない。
9255
9256 @table @samp
9257
9258 @item append
9259 @opindex append
9260 @cindex appending to the output file
9261 追加モードで書き込む。従って、何か別のプロセスが問題の
9262 ファイルに書き出している場合でも、@command{dd} の書き込みは、
9263 書き込むたびに、そのファイルの今現在の内容に追加されること
9264 になる。このフラグは出力に対してしか意味がない。なお、この
9265 フラグを @samp{of=@var{file}} オペランドと組み合わせて使うのなら、
9266 @samp{conv=notrunc} も一緒に指定した方がよい。さもないと、出力
9267 ファイルは、追加書き込みが始まる前に、短縮操作を受けること
9268 になる。
9269
9270 @item cio
9271 @opindex cio
9272 @cindex concurrent I/O
9273 データに対してコンカレント I/O (CIO) モードを使用する。この
9274 モードでは、ダイレクト I/O を行いつつ、同じファイルに対する
9275 すべての I/O は順番に行わなければならないという POSIX の
9276 要件は無視する。一つのファイルを CIO モードと標準的な方法の
9277 両方で同時にオープンすることはできない。
9278
9279 @item direct
9280 @opindex direct
9281 @cindex direct I/O
9282 データに対してダイレクト I/O を使用し、バッファ・キャッシュを
9283 介さないようにする。カーネルが read バッファや write バッファ
9284 のサイズに制限をかけていることがあるのに注意していただきたい。
9285 たとえば、出力先のファイルシステムが ext4 で、カーネルが linux
9286 ベースの場合、出力バッファのサイズが 512 の倍数でなければ、
9287 @samp{oflag=direct} を指定すると、@code{EINVAL} で書き込みに失敗する。
9288
9289 @item directory
9290 @opindex directory
9291 @cindex directory I/O
9292
9293 ファイルがディレクトリでなければ、実行に失敗する。ほとんどの
9294 オペレーティング・システムがディレクトリに対する I/O を許して
9295 いない。従って、このフラグが役に立つ機会はめったにない。
9296
9297 @item dsync
9298 @opindex dsync
9299 @cindex synchronized data reads
9300 データに対して同期 I/O を使用する。出力ファイルについては、
9301 このフラグは、各書き込みごとに出力データをディスクに実際に
9302 書き込ませる。入力ファイルについてこのフラグが意味を持つかも
9303 しれないのは、読み込んでいるのがリモートのファイルであり、
9304 それが何か他のプロセスによって同期的に書き込まれているとき
9305 である。メタデータ (たとえば、最終アクセス日時や最終更新日時)
9306 は、必ずしも同期されない。
9307
9308 @item sync
9309 @opindex sync
9310 @cindex synchronized data and metadata I/O
9311 データとメタデータに対して同期された I/O を使用する。
9312
9313 @item nocache
9314 @opindex nocache
9315 @cindex discarding file cache
9316 ファイルのデータ・キャッシュを廃棄する。count=0 の場合は、
9317 キャッシュが全部捨てられる。それ以外の場合は、ファイルの
9318 キャッシュのうち、処理の対象になる部分だけが捨てられる。
9319 また、count=0 のとき、キャッシュの廃棄に失敗すると、その旨
9320 メッセージが表示され、終了ステータスに反映する。以下に、
9321 使用法の例をいくつか挙げておく。
9322
9323 @example
9324 # ファイル全体のキャッシュを捨てるように指示する。
9325 dd if=ifile iflag=nocache count=0
9326
9327 # ファイル全体のキャッシュを確実に捨てる。
9328 dd of=ofile oflag=nocache conv=notrunc,fdatasync count=0
9329
9330 # ファイル中の一部分のキャッシュを捨てる。
9331 dd if=ifile iflag=nocache skip=10 count=10 of=/dev/null
9332
9333 # read-ahead キャッシュのみを使って、データを転送する。
9334 dd if=ifile of=ofile iflag=nocache oflag=nocache
9335 @end example
9336
9337 @item nonblock
9338 @opindex nonblock
9339 @cindex nonblocking I/O
9340 ノンブロッキング I/O を使用する。
9341
9342 @item noatime
9343 @opindex noatime
9344 @cindex access time
9345 ファイルのアクセス日時を更新しない。古いシステムの中には、
9346 エラーや警告も出さずに、このフラグを無視するものがある。
9347 そこで、このフラグを使用する前に、有効かどうか、お手元の
9348 ファイルで試してみるとよい。
9349
9350 @item noctty
9351 @opindex noctty
9352 @cindex controlling terminal
9353 入力 (または、出力) ファイルを @command{dd} の制御端末にしない。この
9354 フラグは、そのファイルが端末でなければ、効果がない。この
9355 フラグが全く効果を持たないホストが、たくさんある (たとえば、
9356 GNU/Linux ホストがそうである)。
9357
9358 @item nofollow
9359 @opindex nofollow
9360 @cindex symbolic links, following
9361 シンボリックリンクをたどらない。
9362
9363 @item nolinks
9364 @opindex nolinks
9365 @cindex hard links
9366 ファイルに複数のハードリンクがあれば、実行に失敗する。
9367
9368 @item binary
9369 @opindex binary
9370 @cindex binary I/O
9371 バイナリ I/O を使用する。このフラグは、バイナリ I/O と
9372 テキスト I/O を区別する非標準的なプラットフォームでしか
9373 効果がない。
9374
9375 @item text
9376 @opindex text
9377 @cindex text I/O
9378 テキスト I/O を使用する。このフラグが標準的なプラットフォーム
9379 で効果がないのは、@samp{binary} と同様である。
9380
9381 @item fullblock
9382 @opindex fullblock
9383 各ブロックが一杯になるまで入力から読み込む。@code{read} システム
9384 コールは、入力がブロックの分量に足りない場合、早めに戻って
9385 くることがある。そうした場合に、@code{read} の呼び出しを繰り返
9386 して、ブロックの残りを埋めようとする。このフラグは、@code{iflag}
9387 でのみ使える。このフラグが役に立つのは、たとえばパイプと組み
9388 合わせて使うときである。パイプとの組み合わせでは、入力からの
9389 読み込みがブロックの大きさに足りないことがあるからだ。そうした
9390 場合に、@samp{count=} の引数が、読み込み動作の回数ではなく、読み
9391 込むブロック数だと間違いなく解釈されるようにするには、この
9392 フラグが必要になる。
9393
9394 @item count_bytes
9395 @opindex count_bytes
9396 @samp{count=} オペランドをブロック数ではなく、バイト数の指定と
9397 見なす。そうすることで、I/O ブロックサイズの倍数ではない
9398 長さが、指定できるようになるわけだ。このフラグは @code{iflag}
9399 でしか使用できない。
9400
9401 @item skip_bytes
9402 @opindex skip_bytes
9403 @samp{skip=} オペランドをブロック数ではなく、バイト数の指定と
9404 見なす。そうすることで、I/O ブロックサイズの倍数ではない
9405 オフセットが、指定できるようになるわけだ。このフラグは
9406 @code{iflag} でしか使用できない。
9407
9408 @item seek_bytes
9409 @opindex seek_bytes
9410 @samp{seek=} オペランドをブロック数ではなく、バイト数の指定と
9411 見なす。そうすることで、I/O ブロックサイズの倍数ではない
9412 オフセットが、指摘できるようになるわけだ。このフラグは
9413 @code{oflag} でしか使用できない。
9414
9415 @end table
9416
9417 以上のフラグは、すべてのシステムでサポートされているわけではなく、
9418 サポートされていないシステムで使用しようとすると、@samp{dd} に拒否
9419 される。標準入力から読み込んでいる場合や、標準出力に書き出して
9420 いる場合は、@samp{nofollow} や @samp{noctty} フラグは指定するべきではない。
9421 また、他のフラグ (たとえば @samp{nonblock}) は、対象となるファイルの
9422 ファイル・ディスクリプタに対する他のプロセスの動作に、@command{dd} が
9423 終了した後までも、影響を及ぼすかもしれない。
9424
9425 @end table
9426
9427 @cindex multipliers after numbers
9428 上記中の数値を表す文字列  (@var{n} や @var{bytes}) には、乗数を示す文字を後ろに
9429 付けることができる。すなわち、@samp{b}=512, @samp{c}=1, @samp{w}=2, @samp{x@var{m}}=@var{m}
9430 といった
9431 文字である (訳注: 最後のものは、10xM という表記は 10M と書くのと同じだ
9432 ということ)。あるいは、@samp{k}=1024 のような、ブロックサイズに付ける標準の
9433 接尾辞の一つを続けてもよい (@pxref{Block size})。
9434
9435 @samp{bs=}, @samp{ibs=}, @samp{obs=}, "@samp{cbs=} を使って指定するブロックサイズは、
9436 大きすぎない方がよい。数メガバイトを越える値は、一般的に言って無駄だし、
9437 (ギガバイト @dots{} エクサバイトを使ったときのように) 全く逆効果だったり、
9438 エラーの元になったりする。
9439
9440 データのオフセット位置やサイズが I/O ブロックサイズの倍数ではない
9441 場合に、そうしたデータを処理するには、@samp{skip_bytes}, @samp{seek_bytes},
9442 @samp{count_bytes} といったフラグを使用すればよい。あるいは、@command{dd} を別々に
9443 呼び出すという伝統的な手法を使用することもできる。一例を挙げると、
9444 以下のシェルコマンドは、1 ブロック を 512 KiB にして、ディスクと
9445 テープの間でデータをコピーしている。ただし、ディスクの先頭にある
9446 4 KiB のラベルについては、保存も復元も行っていない。
9447
9448 @example
9449 disk=/dev/rdsk/c0t1d0s2
9450 tape=/dev/rmt/0
9451
9452 # ラベル以外のすべてをディスクからテープへコピーする。
9453 (dd bs=4k skip=1 count=0 && dd bs=512k) <$disk >$tape
9454
9455 # テープからディスクへ書き戻す。ただし、ディスクのラベルには手を
9456 # 付けない。
9457 (dd bs=4k seek=1 count=0 && dd bs=512k) <$tape >$disk
9458 @end example
9459
9460 実行中の @command{dd} のプロセスに @samp{INFO} シグナルを送ると、@command{dd} は入出力の
9461 統計情報を標準エラーに書き出してから、コピー作業を続行する。以下の
9462 例では、@command{dd} がバックグラウンドで動作し、1 千万ブロックのコピーを行って
9463 いる。@command{kill} コマンドが実行されると、@command{dd} は実行途中の入出力統計を
9464 表示する。そして、正常に作業を完了するか、@code{SIGINT} シグナルによって
9465 中断されたとき、最終的な統計情報を出力する。
9466
9467 @example
9468 $ dd if=/dev/zero of=/dev/null count=10MB & pid=$!
9469 $ kill -s INFO $pid; wait $pid
9470 3385223+0 records in
9471 3385223+0 records out
9472 1733234176 bytes (1.7 GB) copied, 6.42173 seconds, 270 MB/s
9473 10000000+0 records in
9474 10000000+0 records out
9475 5120000000 bytes (5.1 GB) copied, 18.913 seconds, 271 MB/s
9476 @end example
9477
9478 @vindex POSIXLY_CORRECT
9479 @samp{INFO} シグナルが存在しないシステムでは、 環境変数 @env{POSIXLY_CORRECT}
9480 が設定されていないかぎり、@command{dd} は @samp{INFO} の代わりに @samp{USR1} に反応する。
9481
9482 @exitstatus
9483
9484
9485 @node install invocation
9486 @section @command{install}: ファイルをコピーし属性をセットする
9487
9488 @pindex install
9489 @cindex copying files and setting attributes
9490
9491 @command{install} はファイルをコピーするとき、ファイルのモードビット
9492 (訳注: 一般にアクセス権とか、許可属性と言われるもの) をセットし、可能ならば、
9493 所有者やグループも設定する。
9494 @sp 1
9495 書式:
9496
9497 @example
9498 install [@var{option}]@dots{} [-T] @var{source} @var{dest}
9499 install [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9500 install [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9501 install [@var{option}]@dots{} -d @var{directory}@dots{}
9502 @end example
9503
9504 @itemize @bullet
9505 @item
9506 ファイル名を二つ指定すると、@command{install} は最初のファイルを 2 番目の
9507 ファイルにコピーする。
9508
9509 @item
9510 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
9511 それを指定しないでも、最後のファイルがディレクトリであり、しかも
9512 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
9513 @command{install} は各 @var{source} ファイルを指定されたディレクトリに、@var{source}
9514 の名前でコピーする。
9515
9516 @item
9517 @option{--directory} (@option{-d}) を指定すると、@command{install} は各
9518 @var{directory} を
9519 作成する。このとき、親ディレクトリが存在しなければ、それも
9520 作成する。作成される親ディレクトリのモードは、@option{-m} オプションの
9521 指定や現在の umask にかかわりなく、@samp{u=rwx,go=rx} (755) になる。
9522 親ディレクトリの set-user-ID ビットや set-group-ID ビットの継承に
9523 ついては、次の節を参照していただきたい。@xref{Directory Setuid and Setgid}.
9524 @end itemize
9525
9526 @cindex Makefiles, installing programs in
9527 @command{install} は @command{cp} に似ているが、コピー先ファイルの属性を自由に
9528 設定できる点が違う。@command{install} は通常、Makefile の中で、プログラムを
9529 目標のディレクトリにコピーするために使用される。@command{install} では、ファイル
9530 をそれ自身にコピーすることはできない。
9531
9532 @cindex extended attributes, xattr
9533 @command{install} が拡張属性 (xattr) を保存することはない。
9534
9535 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9536
9537 @table @samp
9538
9539 @optBackup
9540
9541 @item -C
9542 @itemx --compare
9543 @opindex -C
9544 @opindex --compare
9545 インストール元とインストール先の対応するファイルを比較し、
9546 インストール先にあるファイルがインストール元と同じ内容を持ち、
9547 しかも、所有者、グループ、許可属性、場合によっては SELinux
9548 コンテキストについて、そのどれもが指定されているものと同一で
9549 あるときは、インストール先ファイルを全く変更しない。このオプ
9550 ションは、@option{--user}, @option{--group}, @option{--mode} オプションと組み合わせて
9551 使うのが、最善である。そうしたオプションと組み合わせて使えば、
9552 @command{install} コマンドが、(たとえば、ディレクトリに setgid が付いて
9553 いるか否かや、POSIX のデフォルトの ACL を顧慮しないせいで)、
9554 インストールされるファイルがデフォルトで持つはずの属性を不正確に
9555 決めてしまうのを避けることができる。そういうことがあると、
9556 無駄なコピーが行われたり、属性が正しいデフォルト値に設定し直され
9557 なかったりといった不都合が生じかねないのだ。
9558
9559 @item -c
9560 @opindex -c
9561 無視する。Unix の古いバージョンの  @command{install} との互換性のために
9562 ある。
9563
9564 @item -D
9565 @opindex -D
9566 @var{dest} の指定中に存在していない親ディレクトリがあれば、それを作成
9567 してから、@var{source} を @var{dest} にコピーする。インストール先ディレクトリ
9568 が @option{--target-directory=DIR} によって指定されている場合は、この
9569 オプションは無視される。
9570
9571 @item -d
9572 @itemx --directory
9573 @opindex -d
9574 @opindex --directory
9575 @cindex directories, creating with given attributes
9576 @cindex parent directories, creating missing
9577 @cindex leading directories, creating missing
9578 まず、存在していない親ディレクトリがあれば作成し、それにデフォルトの
9579 属性を与える。それから、指定された各ディレクトリを作成し、所有者、
9580 グループ、許可属性を、コマンドラインで指定されたとおりに、または
9581 デフォルトの値に設定する。
9582
9583 @item -g @var{group}
9584 @itemx --group=@var{group}
9585 @opindex -g
9586 @opindex --group
9587 @cindex group ownership of installed files, setting
9588 インストールするファイルやディレクトリの所有グループを @var{group} に
9589 設定する。デフォルトは、プロセスの現在のグループである。@var{group} は、
9590 グループ名でも、グループの ID 番号でもよい。
9591
9592 @item -m @var{mode}
9593 @itemx --mode=@var{mode}
9594 @opindex -m
9595 @opindex --mode
9596 @cindex permissions of installed files, setting
9597 インストールするファイルやディレクトリのモードビットを @var{mode} に
9598 設定する。@var{mode} の指定は、@samp{a=} (誰にもアクセスを許さない) を
9599 基点として行い、8 進数でも、@command{chmod} で使うようなシンボリック
9600 モードでもよい (@pxref{File permissions})。デフォルトのモードは、
9601 @samp{u=rwx,go=rx,a-s} である。すなわち、所有者には読み、書き、実行を
9602 許可し、グループとその他のユーザには読みと実行のみを許可、
9603 set-user-ID と set-group-ID は無効にする。このデフォルトは、@samp{755}
9604 と全く同じではない。なぜなら、デフォルトの方は、ディレクトリに
9605 ついて set-user-ID や set-group-ID を引き継がず、無効にしている
9606 からである。 @xref{Directory Setuid and Setgid}. 
9607
9608 @item -o @var{owner}
9609 @itemx --owner=@var{owner}
9610 @opindex -o
9611 @opindex --owner
9612 @cindex ownership of installed files, setting
9613 @cindex appropriate privileges
9614 @vindex root @r{as default owner}
9615 @command{install} が適切な権限を持っている場合に (つまり、root 権限で
9616 実行されている場合に)、インストールするファイルやディレクトリの
9617 所有者を @var{owner} に設定する。デフォルトは @code{root} である。@var{owner} の
9618 指定は、ユーザ名でも、ユーザの ID 番号でもよい。
9619
9620 @item --preserve-context
9621 @opindex --preserve-context
9622 @cindex SELinux
9623 @cindex security context
9624 ファイルやディレクトリの SElinux セキュリティ・コンテキストを引き
9625 継ぐ。ファイルやディレクトリすべてのセキュリティ・コンテキストを
9626 引き継げなかった場合は、終了ステータスが 1 になる。SElinux が
9627 無効になっているときは、警告を出し、このオプションを無視する。
9628
9629 @item -p
9630 @itemx --preserve-timestamps
9631 @opindex -p
9632 @opindex --preserve-timestamps
9633 @cindex timestamps of installed files, preserving
9634 インストール先各ファイルの最終アクセス日時 (last access time) と
9635 最終更新日時 (last modification time) を、対応するインストール元
9636 各ファイルのそれぞれの日時に合わせる。このオプションを付けずに
9637 インストールした場合、各ファイルの最終アクセス日時と最終更新日時は、
9638 両方ともインストールした日時になる。インストール先ファイルの最終
9639 更新日時を、最後にインストールした日付ではなく、最後にビルドした
9640 日付の記録として使用したい場合、このオプションは便利である。
9641
9642 @item -s
9643 @itemx --strip
9644 @opindex -s
9645 @opindex --strip
9646 @cindex symbol table information, stripping
9647 @cindex stripping symbol table information
9648 インストールされるバイナリの実行ファイルからシンボル・テーブルを
9649 取り除く。
9650
9651 @item --strip-program=@var{program}
9652 @opindex --strip-program
9653 @cindex symbol table information, stripping, program
9654 バイナリからシンボル・テーブルを取り除くために使用するプログラムを
9655 指定する。
9656
9657 @optBackupSuffix
9658
9659 @optTargetDirectory
9660
9661 @optNoTargetDirectory
9662
9663 @item -v
9664 @itemx --verbose
9665 @opindex -v
9666 @opindex --verbose
9667 コピーを行う前に、コピーするファイル名を表示する。
9668
9669 @optContext このオプションと @option{--preserve-context}
9670 オプションは、どちらか一方しか指定できない。
9671 (@var{context} を省略できるのは、coreutils-8.22 から)
9672
9673
9674 @end table
9675
9676 @exitstatus
9677
9678
9679 @node mv invocation
9680 @section @command{mv}: ファイルの移動 (名前の変更) を行う
9681
9682 @pindex mv
9683
9684 @command{mv} は、ファイル (やディレクトリ) の移動、または名前の変更を行う。
9685 @sp 1
9686 書式:
9687
9688 @example
9689 mv [@var{option}]@dots{} [-T] @var{source} @var{dest}
9690 mv [@var{option}]@dots{} @var{source}@dots{} @var{directory}
9691 mv [@var{option}]@dots{} -t @var{directory} @var{source}@dots{}
9692 @end example
9693
9694 @itemize @bullet
9695 @item
9696 ファイル名を二つ指定すると、@command{mv} は最初のファイルを 2 番目の
9697 ファイルに移動する。
9698
9699 @item
9700 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
9701 それを指定しないでも、最後のファイルがディレクトリであり、しかも
9702 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
9703 @command{mv} は各 @var{source} ファイルを指定されたディレクトリに、@var{source} の
9704 名前で移動する。
9705 @end itemize
9706
9707 @command{mv} はいかなるタイプのファイルでも、一つのファイルシステムから
9708 別のファイルシステムへ移動させることができる。fileutils パッケージの
9709 バージョン @code{4.0} 以前では、@command{mv} がファイルシステム間を移動させる
9710 ことができたのは、通常ファイルだけだった。それに対して、現在の @command{mv}
9711 では、たとえば、スペシャル・デバイスファイルを含むディレクトリ階層の
9712 全体を、あるパーティションから別のパーティションへ移動させることが
9713 可能になっている。@command{mv} は、まず @code{cp -a} が使用するのと同じコードを
9714 使って、指定されたディレクトリやファイルをコピーし、その後で (コピーに
9715 成功した場合は) コピー元を削除する。コピーに失敗した場合は、移動先の
9716 パーティションにすでにコピーした部分を消去することになる。仮に、ある
9717 パーティションから別のパーティションに、3 個のディレクトリをコピー
9718 しようとして、最初のディレクトリのコピーには成功したものの、2 番目の
9719 ディレクトリのコピーに失敗したとしよう。その場合、最初のディレクトリ
9720 は、移動先のパーティションに残るが、2 番目と 3 番目のディレクトリは、
9721 元のパーティションに残ることになる。
9722
9723 @cindex extended attributes, xattr
9724 @command{mv} は拡張属性 (xattr) を常にコピーしようとする。この拡張属性は、
9725 SELinux コンテキストや ACL、ケーパビリティであってもよい。拡張属性の
9726 コピーに失敗したときは、@samp{Operation not supported} 以外のすべての
9727 警告が出力される。
9728
9729 @cindex prompting, and @command{mv}
9730 移動先ファイルがすでに存在し、それが普通なら書き込みのできないもの
9731 である場合、標準入力が端末であり、@option{-f} や @option{--force} オプションが指定
9732 されていなければ、@command{mv} はプロンプトを出して、ファイルを置き換えるか
9733 どうか、ユーザに問い合わせる (ファイルの書き込み権限がなくても、自分
9734 がそのファイルの所有者であったり、そのディレクトリの書き込み権限を
9735 持っていたりすることは、ありえることである)。答えが肯定でなければ、
9736 そのファイルはスキップされる。
9737
9738 警告: 名前変更の対象 (または、移動元) がディレクトリへのシンボリック
9739 リンクかもしれないときは、その名前を指定する際に、末尾にスラッシュを
9740 付けてはいけない。さもないと、@command{mv} の動作は内部で使っている rename
9741 システムコール次第なので、全く予想外のことが起きるかもしれないのだ。
9742 Linux ベースの最近のカーネルを使っているシステムでは、@code{errno=ENOTDIR}
9743 で実行に失敗する。しかし、他のシステムでは (少なくとも、FreeBSD 6.1
9744 や Solaris 10 では)、シンボリックリンクではなく、リンクが参照している
9745 ディレクトリの名前の方を、警告なしで変更するのである。 @xref{Trailing slashes}.
9746
9747 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9748
9749 @table @samp
9750
9751 @optBackup
9752
9753 @item -f
9754 @itemx --force
9755 @opindex -f
9756 @opindex --force
9757 @cindex prompts, omitting
9758 移動先のファイルを消去する前に、プロンプトを出してユーザに問い合わ
9759 せることをしない。
9760 @macro mvOptsIfn
9761 @option{-i}, @option{-f}, @option{-n} オプションを
9762 同時に指定している
9763 場合は、最後に指定したもののみが
9764 効果を持つ。
9765 @end macro
9766 @mvOptsIfn
9767
9768 @item -i
9769 @itemx --interactive
9770 @opindex -i
9771 @opindex --interactive
9772 @cindex prompts, forcing
9773 ファイルの許可属性に関係なく、存在する各移動先ファイルを上書き
9774 するかどうかを、プロンプトを出してユーザに問い合わせる。答えが
9775 肯定でなければ、そのファイルをスキップする。@mvOptsIfn
9776
9777 @item -n
9778 @itemx --no-clobber
9779 @opindex -n
9780 @opindex --no-clobber
9781 @cindex prompts, omitting
9782 存在するファイルを上書きしない。@mvOptsIfn
9783 このオプションは、@option{-b} や @option{--backup} オプションと一緒には使えない。
9784
9785 @item -u
9786 @itemx --update
9787 @opindex -u
9788 @opindex --update
9789 @cindex newer files, moving only
9790 ディレクトリ以外のものを移動する際、それが移動先にも存在し、
9791 しかもその更新日時 (modification time) が移動元と同じか、より
9792 新しい場合には、移動を行わない。移動が別のファイルシステムに
9793 向かって行われる場合、タイムスタンプの比較は、移動元のタイム
9794 スタンプを移動先のファイルシステム、及びタイムスタンプの更新に
9795 使われるシステムコールの精度に落とした上で行われる。これは、
9796 同じ移動元と移動先に対して、@samp{mv -u} コマンドが何回か実行される
9797 場合に、コピー作業が繰り返されるのを避けるためである。
9798
9799 @item -v
9800 @itemx --verbose
9801 @opindex -v
9802 @opindex --verbose
9803 移動する前に各ファイルの名前を表示する。
9804
9805 @optStripTrailingSlashes
9806
9807 @optBackupSuffix
9808
9809 @optTargetDirectory
9810
9811 @optNoTargetDirectory
9812
9813 @item -Z
9814 @itemx --context
9815 @opindex -Z
9816 @opindex --context
9817 @cindex SELinux, restoring security context
9818 @cindex security context
9819 このオプションは @command{restorecon} と同様の働きをする。すなわち、
9820 移動先ファイルの SELinux セキュリティ・コンテキストを、移動先に
9821 おけるシステムのデフォルトのタイプによって調整する。(coreutils-8.22
9822 の新機能)
9823
9824 @end table
9825
9826 @exitstatus
9827
9828
9829 @node rm invocation
9830 @section @command{rm}: ファイルやディレクトリを削除する
9831
9832 @pindex rm
9833 @cindex removing files or directories
9834
9835 @command{rm} は、指定された各ファイルを削除する。デフォルトでは、ディレクトリ
9836 の削除は行わない。
9837 @sp 1
9838 書式:
9839
9840 @example
9841 rm [@var{option}]@dots{} [@var{file}]@dots{}
9842 @end example
9843
9844 @cindex prompting, and @command{rm}
9845 @option{-I} または @option{--interactive=once} オプションが指定されている場合に、
9846 削除するファイルが 4 個以上あるか、あるいは @option{-r}, @option{-R}, @option{--recursive}
9847 などのオプションが指定されていると、@command{rm} はプロンプトを出して、作業を
9848 最後まで行うかどうか、ユーザに問い合わせる。答えが肯定でなければ、
9849 コマンド全体が中止になる。
9850
9851 それ以外の場合でも、削除するファイルが書き込み不可で、標準入力が
9852 端末、しかも @option{--force} (@option{-f}) オプションが指定されていない場合や、@option{-i}
9853 または @option{--interactive=always} オプションが指定されている場合には、@command{rm}
9854 はプロンプトを出して、そのファイルを削除するかどうか、ユーザに問い合わ
9855 せる。答えが肯定でなければ、そのファイルをスキップする。
9856
9857 ファイル名の最後の構成要素 (訳注: ファイル名 (いわゆるパス名) の
9858 最後の / より後ろの部分) が @file{.} や @file{..} であるファイルを削除しようと
9859 しても、@command{rm} はそれを実行せず、ユーザに問い合わせることもない。これは
9860 POSIX が要求している動作である。
9861
9862 警告: @command{rm} を使って、ファイルを削除しても、たいていの場合、その
9863 ファイルの内容を復元することが可能である。ファイルの内容が間違いなく
9864 復元不可能であるとの、より一層の保証が欲しいのなら、@command{shred} コマンドの
9865 使用をお考えになるとよい。
9866
9867 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
9868
9869 @table @samp
9870
9871 @item -d
9872 @itemx --dir
9873 @opindex -d
9874 @opindex --dir
9875 @cindex directories, removing
9876 指定されたディレクトリが空ならば、それを削除する。
9877
9878 @item -f
9879 @itemx --force
9880 @opindex -f
9881 @opindex --force
9882 指定したファイルが存在しなかったり、ユーザが削除の対象を一つも
9883 指定しなかったりしても、問題にしない (訳注: 言い換えれば、エラー
9884 にならない)。また、ユーザに対する問い合わせも全く行わない。
9885 @option{--interactive} (@option{-i}) オプションが前にあっても、それを無視する。
9886
9887 @item -i
9888 @opindex -i
9889 プロンプトを出して、各ファイルを削除するかどうか、ユーザに問い
9890 合わせる。答えが肯定でなければ、そのファイルをスキップする。
9891 @option{--force} (@option{-f}) オプションが前にあっても、それを無視する。
9892
9893 @item -I
9894 @opindex -I
9895 4 個以上のファイルが指定された場合や、再帰的な削除が要求された
9896 場合に、プロンプトを出して、コマンドを続行するかどうか、ユーザに
9897 一度だけ尋ねる。@option{--force} (@option{-f}) オプションが前にあっても、それを
9898 無視する。@option{--interactive=once} と同じである。
9899
9900 @item --interactive [=@var{when}]
9901 @opindex --interactive
9902 問い合わせのプロンプトをいつ出すかを指定する。@var{when} には以下の一つを
9903 指定できるが、なくてもよい。
9904 @itemize @bullet
9905 @item never
9906 @vindex never @r{interactive option}
9907 - 問い合わせを全くしない。
9908 @item once
9909 @vindex once @r{interactive option}
9910 - 4 個以上のファイルが指定された場合や、再帰的な削除が
9911 要求された場合に、一度だけ問い合わせをする。@option{-I} と同じ。
9912 @item always
9913 @vindex always @r{interactive option}
9914 - 削除されるすべてのファイルに対して問い合わせをする。
9915 @option{-i} と同じ。
9916 @end itemize
9917 @option{--interactive} に @var{when} を指定しないのは、@option{--interactive=always} と
9918 同じである。
9919
9920 @item --one-file-system
9921 @opindex --one-file-system
9922 @cindex one file system, restricting @command{rm} to
9923 ディレクトリ階層を再帰的に削除する際に、コマンドラインで引数として
9924 指定したディレクトリが存在するファイルシステムとは別のファイル
9925 システム上にある、いかなるディレクトリも削除しない。
9926
9927 @cindex bind mount
9928 このオプションが役に立つのは、ビルド用の ``chroot'' ディレクトリ
9929 階層を削除する場合である。通常、そうしたディレクトリ階層に重要な
9930 データは含まれていない。しかしながら、普段使っているスタートアップ・
9931 ファイルを利用しやすくするために、そうしたディレクトリ階層に
9932 @file{/home} を bind-mount するのは、珍しいことではない。問題は、@file{/home}
9933 のアンマウントを忘れやすいことである。アンマウントをやり忘れたまま、
9934 @command{rm -rf} を使って、通常使い捨てにする chroot 環境を削除しようと
9935 すると、@file{/home} 以下にあるすべてまで削除してしまうことになる。
9936 @option{--one-file-system} オプションを使えば、@command{rm} は警告を出した上で、
9937 他のファイルシステムにあるディレクトリをスキップしてくれる。
9938 当然ながら、@file{/home} と chroot 環境が同じファイルシステムにある
9939 場合は、このオプションを使っても、@file{/home} が助かるわけではない。
9940
9941 @item --preserve-root
9942 @opindex --preserve-root
9943 @cindex root directory, disallow recursive destruction
9944 @option{--recursive} オプションと一緒に使った場合、ルートディレクトリ
9945 (@file{/}) を削除しようとすると、エラーになる。これがデフォルトの
9946 動作である。 @xref{Treating / specially}.
9947 @sp 1
9948 (訳注: 確かに @option{--preserve-root} が有効になっていれば、@code{rm -rf /}
9949 とした場合に、ルートディレクトリを保護することになる。だが、
9950 @code{rm -rf /*} とした場合には、あまり役に立たない。なぜなら、@file{/*} は、
9951 @file{/bin}, @file{/usr}, @file{/home} などに展開されるが、そうしたディレクトリの
9952 消去は、@option{--preserve-root} によっては止められないからである。)
9953
9954 @item --no-preserve-root
9955 @opindex --no-preserve-root
9956 @cindex root directory, allow recursive destruction
9957 再帰的に削除を行う際、@file{/} を特別扱いしない。コンピュータ上にある
9958 すべてのファイルを本当に削除したい場合以外、このオプションの使用は
9959 お勧めできない。 @xref{Treating / specially}.
9960
9961 @item -r
9962 @itemx -R
9963 @itemx --recursive
9964 @opindex -r
9965 @opindex -R
9966 @opindex --recursive
9967 @cindex directories, removing (recursively)
9968 コマンドラインにリストされたディレクトリとその中身を再帰的に削除する。
9969
9970 @item -v
9971 @itemx --verbose
9972 @opindex -v
9973 @opindex --verbose
9974 削除を行う前に、各ファイルの名前を表示する。
9975
9976 @end table
9977
9978 @cindex files beginning with @samp{-}, removing
9979 @cindex @samp{-}, removing files beginning with
9980 よくある質問の一つに、名前が @samp{-} で始まるファイルを削除するには、
9981 どうしたらよいか、というものがある。GNU の @command{rm} では、@code{getopt} を
9982 使用して引数の解析を行っているあらゆるプログラムと同様、@samp{--} オプション
9983 を使って、以下の引数はすべてオプションではない、と示すことが可能に
9984 なっている。カレントディレクトリにある @file{-f} というファイルを削除する
9985 には、次のどちらかをタイプすればよい。
9986
9987 @example
9988 rm -- -f
9989 @end example
9990
9991 @noindent
9992 あるいは、
9993
9994 @example
9995 rm ./-f
9996 @end example
9997
9998 @opindex - @r{and Unix @command{rm}}
9999 Unix の @command{rm} プログラムが、この用途に @samp{-} を 1 個だけ使っていたのは、
10000 getopt の標準シンタックスが開発される以前のことである。
10001
10002 @exitstatus
10003
10004
10005 @node shred invocation
10006 @section @command{shred}: セキュリティを向上させたファイルの削除
10007
10008 @pindex shred
10009 @cindex data, erasing
10010 @cindex erasing data
10011
10012 @command{shred} はデバイスやファイルを上書きして、非常に高価な装置を使用
10013 しても、データの復元ができないようにする。
10014
10015 通常、ファイルを削除しても (@pxref{rm invocation})、データが実際に
10016 消去されるわけではない。単に、ファイルが格納されている場所をリストした
10017 インデックスが破棄されるだけであり、そうすることで、そのデータの
10018 格納場所が再利用可能になるのである。世の中には、インデックスの再構築を
10019 試みる復元ソフト (undelete utilities) というものが存在する。そうした
10020 ものは、ファイルの存在したスペースが再利用されていなければ、ファイルを
10021 復元することができるのだ。
10022
10023 頻繁に使われているシステムで、ディスクがほとんど一杯になっている
10024 場合、スペースは数秒のうちに再利用されるかもしれない。だが、それを
10025 確実に知る方法は全くない。また、他人に見られては困るデータがあった
10026 ところで、見られても構わないデータでそのファイルを上書きしてしまえ
10027 ば、復元は絶対不可能だと考えたいかもしれない。
10028
10029 しかしながら、そういうことをした後でも、ディスクを研究所に持ち
10030 込んで、高感度の (そして高価な) 装置を山ほど使用すれば、上書きされた
10031 データの下にある元のデータのかすかな「痕跡 (echoes)」を検出することが
10032 可能なのだ。もし、データがたった一回しか上書きされていなかったら、
10033 それはさほど難しいことでもない。
10034
10035 データを復元できないように消去する最善の方法は、それが載っている
10036 メディアを酸で破壊するとか、熱で溶かすとかすることである。フロッピー
10037 ディスクのような廉価なリムーバブル・メディアの場合、それがよく使わ
10038 れる方法だ。だが、ハードディスクは高価だし、熱で溶かすのも難しい。
10039 そこで、@command{shred} ユーティリティは、物質的な破壊以外の方法で、同様の
10040 効果を実現しようとするのである。
10041
10042 そのためには、元のデータに与える損傷を最大にするように選ばれた
10043 データパターンで繰り返し上書きするという方法が採られる。この方法は、
10044 フロッピーディスクにも効果があるものの、パターンはハードディスクで
10045 最も効果を上げるように工夫されたものだ。詳細については、ソースコード
10046 や、第 6 回 USENIX セキュリティ・シンポジウム (San Jose, California,
10047 July 22--25, 1996) の議事録にある Peter Gutmann の次の論文をご覧に
10048 なっていただきたい。@*
10049 @uref{http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html,
10050 @cite{Secure Deletion of Data from Magnetic and Solid-State Memory}}
10051
10052 ここで心に銘記してしていただきたいのは、@command{shred} には非常に重要な
10053 前提があるということである。すなわち、ファイルシステムはデータを、
10054 それが存在する場所で上書きするものでなければならない。それは、こうした
10055 操作を行うときの伝統的な方法であるが、最近のファイルシステムの設計には、
10056 この前提を満たさないものが多い。そうした例外には、次のようなものがある。
10057
10058 @itemize @bullet
10059
10060 @item
10061 ログ構造化 (log-structured) ファイルシステムや、ジャーナル化
10062 (journaled) ファイルシステム。たとえば、ATX や Solaris で
10063 提供されているもの。JFS, ReiserFS, XFS, Ext3 (@code{data=journal}
10064 モードの場合), BFS, NTFS などが、「データ」のジャーナリングを
10065 するように設定されている場合もこれに当たる。
10066
10067 @item
10068 データを冗長化して書き込んだり、一部の書き込みに失敗することが
10069 あっても、動作し続けるファイルシステム。たとえば、RAID ベースの
10070 ファイルシステム。
10071
10072 @item
10073 Network Appliance の NFS サーバのように、スナップショットを作成する
10074 ファイルシステム。
10075
10076 @item
10077 NFS バージョン 3 のクライアントのように、一時領域にキャッシュを作る
10078 ファイルシステム。
10079
10080 @item
10081 圧縮ファイルシステム。
10082 @end itemize
10083
10084 特に ext3 ファイルシステムについて言うと、上記の例外に当てはまるのは
10085 (その結果、@command{shred} が限定された効果しか持たないのは)、@code{data=journal}
10086 モードの場合だけである。これは、メタデータだけでなく、ファイルデータも
10087 ジャーナリングするモードだ。@code{data=ordered} (デフォルト) と
10088 @code{data=writeback} の両モードでは、@command{shred} は通常どおり役に立つ。ext3 の
10089 ジャーナリング・モードを変更するには、mount のマニュアルに書いてある
10090 ように (man mount)、@file{/etc/fstab} ファイルで問題のファイルシステムの
10091 マウントオプションに @code{data=something} オプションを追加すればよい。
10092
10093 ファイルシステムがどういう動作をしているか、よくわからない場合は、
10094 データをそれが存在する場所で上書きしていないと考えておいた方がよい。
10095 すなわち、そのファイルシステムでは、通常ファイルに対する @command{shred} の
10096 動作は、信頼できないということである。
10097
10098 一般的に言って、@command{shred} は、ファイルよりデバイスに対して使った方が
10099 信頼できる。そうすれば、上に述べたファイルシステムの設計の問題を回避
10100 できるからだ。しかしながら、@command{shred} のデバイスに対する使用も、必ずしも
10101 全面的に信頼できるわけではない。たとえば、ほとんどのディスクが、バッド
10102 セクターを使用に割り当てる領域から外して、アプリケーションから見えない
10103 ようにしている。そこで、バッドセクターに他人に見られたくないデータが
10104 ある場合、@command{shred} はそれを破壊できないことになる。
10105
10106 @command{shred} は、バックアップに対して何の対処も行おうとしないが、バッド
10107 セクターの問題についても全く同様で、検知しようともしないし、通知しよう
10108 ともしない。それでも、@command{shred} はファイルに対して行うより、デバイスに
10109 対して行う方が信頼できるので、デフォルトでは、出力ファイルをサイズ 0 に
10110 短縮したり、削除したりしないようになっている。このデフォルトは、ファイル
10111 よりデバイスに適した動作だ。デバイスは一般に短縮できないし、削除するべき
10112 でもないからである。
10113
10114 最後になったが、バックアップやミラーの持つリスクも考慮した方がよい。
10115 削除することのできないファイルのコピーが、ファイルシステムのバックアップ
10116 やリモートのミラーに残っていることもありえる。そして、そうしたものが
10117 残っていれば、@command{shred} で破壊したファイルを後日復元することが可能に
10118 なるのだ。だから、後で @command{shred} を使って抹消したくなるようなデータが
10119 ある場合には、そのバックアップやミラーがないことを確認すべきなのである。
10120
10121 @example
10122 shred [@var{option}]@dots{} @var{file}[@dots{}]
10123 @end example
10124
10125 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10126
10127 @table @samp
10128
10129 @item -f
10130 @itemx --force
10131 @opindex -f
10132 @opindex --force
10133 @cindex force deletion
10134 必要ならば、ファイルの許可属性を無視して、上書きできるようにする。
10135
10136 @item -@var{number}
10137 @itemx -n @var{number}
10138 @itemx --iterations=@var{number}
10139 @opindex -n @var{number}
10140 @opindex --iterations=@var{number}
10141 @cindex iterations, selecting the number of
10142 デフォルトで @command{shred} は、上書きを @value{SHRED_DEFAULT_PASSES} 回する。時間を節約するために、
10143 回数を減らすこともできるし、その方がよいと思えば、回数を増やすことも
10144 できる。25 回上書きすると、プログラムが内部に持っている上書き用の
10145 パターンのすべてが、少なくとも一回は使われたことになる。
10146
10147 @item --random-source=@var{file}
10148 @opindex --random-source
10149 @cindex random source for shredding
10150 上書きに使用するランダムデータのソースとして @var{file} を使用する。
10151 また、このランダムデータは、上書きパターンの順番を決めるのにも
10152 使用される。
10153
10154 @item -s @var{bytes}
10155 @itemx --size=@var{bytes}
10156 @opindex -s @var{bytes}
10157 @opindex --size=@var{bytes}
10158 @cindex size of file to shred
10159 ファイルの最初の @var{bytes} バイトを shred 処理する。デフォルトは、
10160 ファイル全体の shred である。@var{bytes} の後ろには、その何倍かを示す
10161 ために @samp{K}, @samp{M}, @samp{G} といった、サイズの指定を付けることができる。
10162  @xref{Block size}.
10163
10164 @item -u
10165 @itemx --remove[=@var{how}]
10166 @opindex -u
10167 @opindex --remove
10168 @opindex --remove=unlink
10169 @opindex --remove=wipe
10170 @opindex --remove=wipesync
10171 @cindex removing files after shredding
10172 shred 処理したファイルを (可能ならば) サイズ 0 に短縮し
10173 (truncate)、その上で削除する。ファイルが複数のリンクを持って
10174 いる場合に、削除されるのは名前を指定されたリンクだけである。
10175 ファイルの名前は、ファイルの内容ほど秘密性を必要としないことも
10176 多い。そうした場合は、@var{how} パラメータを付けることで、各ディレ
10177 クトリエントリのより効率的な削除法を指定することができる。@var{how}
10178 パラメータに @samp{unlink} を指定した場合は、お定まりの unlink の
10179 呼び出しをするだけだが、@samp{wipe} を指定すると、unlink する前に
10180 ファイル名を構成するバイトの難読化を行う。@samp{wipesync} を指定した
10181 場合は、ファイル名を難読化するだけでなく、それを 1 バイトづつ
10182 ディスクに sync することまで行う。留意していただきたいのは、
10183 @samp{wipesync} はデフォルトの方法だが、すべてのファイル名のすべての
10184 文字ごとに sync を行うことになるので、負荷が重くなるかもしれない
10185 ということである。ファイル数が多い場合には、無視できない負荷に
10186 なるかもしれない。また、使用しているシステムがメタデータの
10187 同期アップデートを提供している場合には、やらないでもよいこと
10188 かもしれない。(@option{--remove} に対する @var{how} パラメータの指定は、
10189 coreutils-8.22 の新機能)
10190
10191 @item -v
10192 @itemx --verbose
10193 @opindex -v
10194 @opindex --verbose
10195 shred 処理が進行する間、更新される進行状態の情報のすべてを
10196 標準エラーに表示する。
10197
10198 @item -x
10199 @itemx --exact
10200 @opindex -x
10201 @opindex --exact
10202 デフォルトでは、@command{shred} は、ファイルの最後のブロックを完全に消す
10203 ために、通常ファイルのサイズを、ファイルシステムのブロックサイズの
10204 倍数に切り上げることになっている。この動作を抑制したかったら、
10205 @option{--exact} オプションを使用すればよい。すなわち、デフォルトでは、
10206 1 ブロック 512 バイトのシステムで 10 バイトの通常ファイルを shred
10207 すると、結果として 512 バイトのファイルが出来上がる。ところが、
10208 このオプションを使えば、shred はファイルの見かけのサイズを増加
10209 させないのである。
10210
10211 @item -z
10212 @itemx --zero
10213 @opindex -z
10214 @opindex --zero
10215 通常、@command{shred} は、最後の 1 回でもランダムデータを書き込む。
10216 そんなファイルがハードディスクにあると、(たとえば、暗号化された
10217 データに見えて) 目立ってしまうのではないかと思うのなら、あるいは、
10218 単にそっちの方がもっとすっきりしていると思うのなら、@option{--zero}
10219 オプションを指定して、もう一回、 すべて 0 ビットで上書きさせれば
10220 よい。これは、@option{--iterations} オプションで指定した上書き回数の
10221 ほかに、もう一回ということである。
10222
10223 @end table
10224
10225 第 1 ドライブのフロッピーディスクに作成したファイルシステムを跡形
10226 もなく消し去るには、次のコマンドを使えばよいだろう。このコマンドで
10227 ``1.44MB'' (実際には 1440 KiB) のフロッピーを消去するには、約 20 分
10228 かかる。
10229
10230 @example
10231 shred --verbose /dev/fd0
10232 @end example
10233
10234 同様に、ハードディスクの選択したパーティションからすべてのデータを
10235 消去するには、以下のコマンドを打ち込めばよい。
10236
10237 @example
10238 shred --verbose /dev/sda5
10239 @end example
10240
10241 最近のディスクでは、1 回の書き込みで十分なはずだ。それならば、
10242 書き込みを 3 回行うデフォルトの 3 分の 1 の時間ですむ。
10243
10244 @example
10245 # 擬似ランダムデータを 1 回書き込む。デフォルトより 3 倍速い。
10246 shred --verbose -n1 /dev/sda5
10247 @end example
10248
10249 念のため、少なくとも 1 回は擬似ランダムデータで上書きをした方がよい。
10250 言い換えると、つい使いたくなっても、@samp{-n0 --zero} を使ってはいけない。
10251 ディスク・コントローラの中には、すべてが 0 のブロックを書き込む際に、
10252 処理の最適化を行っているものがあり、そのため、ブロック中のバイト
10253 すべてがクリアされない恐れがあるからである。SSD の中には、まさにそう
10254 いうことをするものがある。
10255
10256 @samp{-} という @var{file} は、標準出力を表している。これの使い道は、削除した
10257 テンポラリ・ファイルを shred することである。たとえば、次のようにだ。
10258
10259 @example
10260 i=$(mktemp)
10261 exec 3<>"$i"
10262 rm -- "$i"
10263 echo "Hello, world" >&3
10264 shred - >&3
10265 exec 3>&-
10266 @end example
10267
10268 しかしながら、@samp{shred - >file} というコマンドを使っても、ファイルの
10269 内容を shred することにはならない。なぜなら、シェルは @command{shred} を呼び
10270 出す前に、ファイルをサイズ 0 に短縮 (truncate) してしまうからである。
10271 @samp{shred file}、あるいは (Bourne 互換シェルをお使いなら) @samp{shred - 1<>file}
10272 というコマンドを、代わりに使った方がよい。
10273
10274 @exitstatus
10275
10276
10277 @node Special file types
10278 @chapter 特殊なファイル型
10279
10280 @cindex special file types
10281 @cindex file types, special
10282
10283 この章では、特殊なタイプのファイルを作成するコマンドの説明を行う
10284 (さらに @command{rmdir} の説明もするが、これはディレクトリという特殊な
10285 ファイル型の一つを削除するコマンドである)。
10286
10287 @cindex special file types
10288 @cindex file types
10289 Unix 系統のオペレーティング・システムでは、ほかのオペレーティング・
10290 システムと比べて、特殊なファイル型というものが著しく少ないが、それでも
10291 普通のファイル (@dfn{normal files}) がそうであるような、のっぺらぼうなバイト
10292 ストリームとして、何でもかんでも扱えさえすればよいというものではない。
10293 たとえば、ファイルを作成したり、削除したりするとき、システムはその情報
10294 を記録しなければならないが、それはディレクトリ (@dfn{directory}) --- これも
10295 特殊なタイプのファイルである --- に書き込まれる。もし興味があれば、
10296 ディレクトリを普通のファイルのように読むこともできるが、システムが
10297 システムとしての役割を果たすためには、ディレクトリはそのファイル内容
10298 であるバイトに、構造というか、何らかの秩序を持っていなければならない。
10299 そういう意味で、ディレクトリは、「特殊な」タイプのファイルなのである。
10300
10301 ディレクトリ以外の特殊なファイル型としては、名前付きパイプ (FIFO)、
10302 シンボリックリンク、ソケット、それに、いわゆるスペシャルファイル
10303 (@dfn{special files}) がある。
10304
10305 @menu
10306 * link invocation::     システムコール link を使って、ハードリンクを作成する。
10307 * ln invocation::       ファイル間のリンクを作成する。
10308 * mkdir invocation::    ディレクトリを作成する。
10309 * mkfifo invocation::   FIFO (名前付きパイプ) を作成する。
10310 * mknod invocation::    ブロック型やキャラクタ型のスペシャルファイルを作成する。
10311 * readlink invocation:: シムリンクの値、または正規化されたファイル名を表示する。
10312 * rmdir invocation::    空のディレクトリを削除する。
10313 * unlink invocation::   システムコール unlink を使って、ファイルを削除する。
10314 @end menu
10315
10316
10317 @node link invocation
10318 @section @command{link}: システムコール link を使って、ハードリンクを作成する
10319
10320 @pindex link
10321 @cindex links, creating
10322 @cindex hard links, creating
10323 @cindex creating links (hard only)
10324
10325 @command{link} は、一度に 1 個のハードリンクを作成する。これは、システムが
10326 提供する @code{link} 関数への必要最小のインターフェースである。
10327 @xref{Hard Links, , , libc, The GNU C Library Reference Manual}.
10328 従って、より一般に使われる @command{ln} コマンドの
10329 ような、様々な付加機能をあえて備えていない (@pxref{ln invocation})。
10330 @sp 1
10331 書式:
10332
10333 @example
10334 link @var{filename} @var{linkname}
10335 @end example
10336
10337 @var{filename} は、実在するファイルを指していなければならない。また、
10338 @var{linkname} は、実在するディレクトリ中の実在しないファイルを指していな
10339 ければならない。@command{link} は、リンクを作成するために、@code{link (@var{filename},
10340 @var{linkname})} をコールするだけである。
10341
10342 GNU のシステムでは、このコマンドは、@samp{ln --directory
10343 --no-target-directory @var{filename} @var{linkname}} と同様に振る舞う。しかし、
10344 @option{--directory} や @option{--no-target-directory} は、POSIX の規格にあるオプ
10345 ションではないので、@command{link} の方が、実用上より可搬性がある。
10346
10347 @var{filename} がシンボリックリンクの場合、@var{linkname} がシンボリックリンク
10348 へのハードリンクになるか、シンボリックリンクの参照先へのハードリンクに
10349 なるかは、規定されていない。望む方の動作をはっきり指定するには、@command{ln -P} や
10350 @command{ln -L} を使用するべきである。
10351
10352 @exitstatus
10353
10354
10355 @node ln invocation
10356 @section @command{ln}: ファイル間のリンクを作成する
10357
10358 @pindex ln
10359 @cindex links, creating
10360 @cindex hard links, creating
10361 @cindex symbolic (soft) links, creating
10362 @cindex creating links (hard or soft)
10363
10364 @cindex file systems and hard links
10365 @command{ln} はファイル間のリンクを作成する。デフォルトではハードリンクを作成
10366 するが、@option{-s} オプションを指定すると、シンボリックリンク (@dfn{soft} link
10367 とも言う) を作ることになる。
10368 @sp 1
10369 書式:
10370
10371 @example
10372 ln [@var{option}]@dots{} [-T] @var{target} @var{linkname}
10373 ln [@var{option}]@dots{} @var{target}
10374 ln [@var{option}]@dots{} @var{target}@dots{} @var{directory}
10375 ln [@var{option}]@dots{} -t @var{directory} @var{target}@dots{}
10376 @end example
10377
10378 @itemize @bullet
10379
10380 @item
10381 ファイル名を二つ指定すると、@command{ln} は 1 番目に対するリンクを 2 番目
10382 の名前で作成する。
10383
10384 @item
10385 @var{target} のみを指定すると、@command{ln} はそのファイルに対するリンクを
10386 カレントディレクトリに作成する。
10387
10388 @item
10389 @option{--target-directory} (@option{-t}) オプションを指定した場合や、あるいは
10390 それを指定しないでも、最後のファイルがディレクトリであり、しかも
10391 @option{--no-target-directory} (@option{-T}) オプションを指定していない場合は、
10392 @command{ln} は各 @var{target} ファイルに対するリンクを、指定されたディレクトリに
10393 @var{target} の名前で作成する。
10394
10395 @end itemize
10396
10397 通常 @command{ln} は存在するファイルを削除しない。既存のファイルを無条件で
10398 削除するには、@option{--force} (@option{-f}) オプションを使う。また、ユーザに問い
10399 合わせた上で削除するには、@option{--interactive} (@option{-i}) オプションを使う。
10400 既存のファイルを、名前を変更して残すには、@option{--backup} (@option{-b}) オプション
10401 を使用する。(訳注: ここで述べているのは、存在するファイルの名前を
10402 リンクファイル名として使う場合の話である。)
10403
10404 @cindex hard link, defined
10405 @cindex inode, and hard links
10406 ハードリンク (@dfn{hard link}) というのは、存在するファイルが持つ別の名前
10407 である。だから、リンクとオリジナルは、区別ができない。専門的な言い方を
10408 すると、両者は同じ inode を共有するものである。inode には、ファイルに
10409 関する情報がすべて含まれているので、全くのところ、inode こそファイルで
10410 あると言っても、過言ではないほどだ。たいていのシステムでは、ディレクトリ
10411 に対するハードリンクの作成は禁じられている。許可されているシステムでも、
10412 それができるのは、スーパーユーザだけである (その場合でも、ファイル
10413 システムにループが生じると、ほかの様々なユーティリティ・プログラムで
10414 問題が起きるので、慎重にやらなければならない)。なお、ハードリンクは、
10415 ファイルシステムの境界を越えることができない。(もっとも、ハードリンクに
10416 対するこうした制限は、POSIX で規定されているわけではない。)
10417
10418 @cindex dereferencing symbolic links
10419 @cindex symbolic link, defined
10420 それに対して、シンボリックリンク (@dfn{symbolic link}、略称はシムリンク
10421 @dfn{symlink}) は、特殊なファイル型の一つである (すべてのカーネルがサポート
10422 しているわけではない。たとえば、System V release 3 やそれ以前の
10423 システムにはシムリンクが存在しない)。このファイル型では、リンク
10424 ファイルは、実際には別のファイルを、名前を使って参照している。
10425 ほとんどのファイル操作では (ファイルのオープン、読み込み、書き出し
10426 など)、シンボリックリンク・ファイルが渡されると、カーネルが自動的に
10427 リンクの参照を読み解いて (@dfn{dereference})、リンクの参照先を操作の
10428 対象にする。ただし、操作によっては (たとえば、ファイルの削除)、
10429 参照先ではなく、リンクファイルそのものを対象にするものもある。
10430 シムリンクの所有者やグループは、リンクを通して行われるファイルアクセス
10431 に対して意味を持たないが、削除制限ビットが立っているディレクトリから
10432 シンボリックリンクを削除する際には、かかわりを持ってくる。GNU の
10433 システムでは、シムリンクのモードには意味がなく、変更することもでき
10434 ない。だが、BSD システムの中には、モードが変更でき、ファイル名の解決に
10435 おいてシムリンクをたどるかどうかに影響するものもある。
10436 @xref{Symbolic Links,,, libc, The GNU C Library Reference Manual}.
10437
10438 シンボリックリンクの中身には、どんな文字列が含まれていてもよい。
10439 シンボリックリンクに含まれる文字列が、実在するファイルの名前になって
10440 いないときは、リンク切れ (@dfn{dangling symlink}) が生ずる。リンク切れの
10441 シンボリックリンクを作成することは、禁止されているわけではない。
10442 シムリンクの作成に絶対パスを使うか、相対パスを使うかには、それぞれ
10443 一長一短がある。絶対パスのシムリンクは、リンクファイルの存在する
10444 ディレクトリが移動しても、常に同じファイルを指す。もっとも、その
10445 シムリンクが複数のマシンから見えるような場合には (たとえば、ネット
10446 ワークでつながったファイルシステムにあるような場合には)、リンクが
10447 指しているファイルは、必ずしも同じではないかもしれない。相対パスの
10448 シンボリックリンクの方は、それが存在しているディレクトリからの相対パス
10449 で参照先が決まる。そこで、リンクファイルがネットワークでつながっている
10450 マシンからアクセスされることがある場合に、リンクと同じデバイス上に
10451 存在するファイルを、そのデバイスのマウントポイントが何という名前かを
10452 気にせずに指示することができて、便利であることが多い。
10453
10454 相対パスのシムリンクをカレントディレクトリ以外の場所に作成すると、
10455 そのシムリンクが実際に指しているファイルは、同じ文字列がカレント
10456 ディレクトリを基点として指しているファイルとは別のものになる。
10457 そのため、ユーザの多くが、まずカレントディレクトリを変更して、相対
10458 パスのシムリンクを作成する場所へ移動することを好んでいる。そうすれば、
10459 タブ補完などのファイル名参照方法を用いて、シムリンクに格納する参照先の
10460 適切な相対パスを見つけることができるからである。
10461
10462 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10463
10464 @table @samp
10465
10466 @optBackup
10467
10468 @item -d
10469 @itemx -F
10470 @itemx --directory
10471 @opindex -d
10472 @opindex -F
10473 @opindex --directory
10474 @cindex hard links to directories
10475 ユーザが適切な権限を持っていれば、ディレクトリに対するハードリンク
10476 を作成しようとしても許可する。とは言え、たぶんシステムによって禁止
10477 されているので、たとえスパーユーザでも作成に失敗するだろう。
10478
10479 @item -f
10480 @itemx --force
10481 @opindex -f
10482 @opindex --force
10483 リンクの作成先に、作成するリンクファイルと同名のファイルがすでに
10484 存在していたら、それを削除する。
10485
10486 @item -i
10487 @itemx --interactive
10488 @opindex -i
10489 @opindex --interactive
10490 @cindex prompting, and @command{ln}
10491 リンクの作成先に、作成するリンクファイルと同名のファイルがすでに
10492 存在していたら、削除するかどうか、ユーザに問い合わせる。
10493
10494 @item -L
10495 @itemx --logical
10496 @opindex -L
10497 @opindex --logical
10498 @option{-s} オプションが有効になっていないとき、リンク対象として指定
10499 されたファイル (訳注: 上記書式の @var{target}) がシンボリックリンク
10500 ならば、シンボリックリンクそのものではなく、シンボリックリンクが
10501 参照しているファイルへのハードリンクを作成する。
10502
10503 @item -n
10504 @itemx --no-dereference
10505 @opindex -n
10506 @opindex --no-dereference
10507 最後のオペランドがディレクトリに対するシンボリックリンクである
10508 とき、それをディレクトリとして特別扱いしない (訳注: すなわち、
10509 ディレクトリ内に @var{target} と同名でリンクを作ることはしない)。
10510 むしろ、普通のファイルであるかのように扱う。
10511
10512 リンクの作成先として指定されたのが (ディレクトリに対するシムリンク
10513 ではなく) 本物のディレクトリならば、曖昧なところは全くない。その
10514 ディレクトリ内にリンクを作るだけの話だ。ところが、指定された作成先
10515 が、ディレクトリに対するシムリンクの場合は、ユーザの要求を処理する
10516 のに、二つの行き方がある。@command{ln} は、通常のディレクトリを扱う場合と
10517 全く同じように作成先を扱って、そこにリンクを作成することができる。
10518 あるいは、作成先をディレクトリではないもの、すなわち、他ならぬシム
10519 リンクと見なすことも可能だ。後者の場合、@command{ln} は、新しいリンクを
10520 作成する前に、そのシムリンクを消去するなり、バックアップするなり
10521 しなければならない。@command{ln} のデフォルトは、作成先がディレクトリに
10522 対するシムリンクであっても、ディレクトリと全く同様に扱うことである。
10523
10524 このオプションは、@option{--no-target-directory} (@option{-T}) の弱いバージョン
10525 である。従って、両方のオプションを指定した場合、こちらは効果がない。
10526
10527 @item -P
10528 @itemx --physical
10529 @opindex -P
10530 @opindex --physical
10531 @option{-s} オプションが有効になっていないとき、リンク対象として指定
10532 されたファイル (訳注: 上記書式の @var{target}) がシンボリックリンク
10533 ならば、シンボリックリンクそのものへのハードリンクを作成する。
10534 そういった動作をカーネルがサポートしていないプラットホームでは、
10535 このオプションを指定すると、リンク対象のシンボリックリンクと全く
10536 同じ内容を持つシンボリックリンクが作成される。このとき、シンボ
10537 リックリンクの内容に手が加えられることは決してないので、どちらの
10538 シンボリックリンクを使って行われるファイル名の解決も、シンボリック
10539 リンクへのハードリンクが作成された場合と結局同じになる。
10540
10541 @item -r
10542 @itemx --relative
10543 @opindex -r
10544 @opindex --relative
10545 リンクファイルを置く場所を基点とする相対パスのシンボリックリンクを
10546 作成する。
10547
10548 用例:
10549
10550 @smallexample
10551 ln -srv /a/file /tmp
10552 '/tmp/file' -> '../a/file'
10553 @end smallexample
10554
10555 相対パスのシンボリックリンクは、それを置くディレクトリと参照先の
10556 ファイル名を正規化した上で、それに基づいて作成される。すなわち、
10557 そうしたファイル名中にあるすべてのシンボリックリンクは、実体に
10558 還元されることになるわけだ。なお、@command{realpath} コマンドを使用すれば、
10559 以下の例に示すように、相対パスを生成する際にもっと融通が利く
10560 (訳注: たとえば、@command{realpath} を使うと、ファイル名中のシンボリック
10561 リンクをシンボリックリンクのままにしておくこともできる)。
10562 @xref{realpath invocation}.
10563
10564 @example
10565 @verbatim
10566 ln--relative() {
10567   test "$1" = --no-symlinks && { nosym=$1; shift; }
10568   target="$1";
10569   test -d "$2" && link="$2/." || link="$2"
10570   rtarget="$(realpath $nosym -m "$target" \
10571               --relative-to "$(dirname "$link")")"
10572   ln -s -v "$rtarget" "$link"
10573 }
10574 @end verbatim
10575 @end example
10576
10577 @item -s
10578 @itemx --symbolic
10579 @opindex -s
10580 @opindex --symbolic
10581 ハードリンクではなく、シンボリックリンクを作る。このオプションは、
10582 シンボリックリンクをサポートしていないシステムでは、エラー・
10583 メッセージを表示するだけである。
10584
10585 @optBackupSuffix
10586
10587 @optTargetDirectory
10588
10589 @optNoTargetDirectory
10590
10591 @item -v
10592 @itemx --verbose
10593 @opindex -v
10594 @opindex --verbose
10595 リンクの作成に成功した後で、各ファイルの名前を表示する。
10596
10597 @end table
10598
10599 @cindex hard links to symbolic links
10600 @cindex symbolic links and @command{ln}
10601 @option{-L} と @option{-P} の両方を指定すると、最後に指定したものが効果を持つ。
10602 さらに @option{-s} も指定した場合は、エラーや警告は出ないが、@option{-L} や @option{-P} は
10603 無視される。@option{-L} と @option{-P} のどちらのオプションも指定しない場合、@command{ln} の
10604 この実装では、システムの @code{link} 関数がシンボリックリンクに対するハード
10605 リンクをサポートしていれば (たとえば、GNU のシステム)、デフォルトの
10606 動作は @option{-P} になる。@code{link} 関数がシンボリックリンクをたどるものならば
10607 (たとえば、BSD)、デフォルトの動作は @option{-L} である。
10608
10609 @exitstatus
10610
10611 用例:
10612
10613 @smallexample
10614 悪い例:
10615
10616 # カレントディレクトリにあるファイル a を指す ../a というリンクを
10617 # 作成する。実のところ役に立たない。../a が自分自身を指すリンクに
10618 # なってしまうからだ。
10619 ln -s a ..
10620
10621 よりよい例:
10622
10623 # 頭がこんがらかってしまわないように、シムリンクを作成する前に、
10624 # リンクを作るディレクトリに移動する。
10625 cd ..
10626 ln -s adir/a .
10627
10628 悪い例:
10629
10630 # 絶対パスによるリンク対象の指定は、リンク対象の位置が変わると、
10631 # 役に立たない。
10632 ln -s $(pwd)/a /some/dir/
10633
10634 よりよい例:
10635
10636 # 相対パスによるリンク対象の指定は、リンクやその対象を含む
10637 # ディレクトリが移動しても、両者の相対的な位置関係が変わらない
10638 # かぎり、問題がない。また、ネットワークでつながったファイル
10639 # システム間でも通用する。
10640 ln -s afile anotherfile
10641 ln -s ../adir/afile yetanotherfile@end smallexample
10642
10643
10644 @node mkdir invocation
10645 @section @command{mkdir}: ディレクトリを作成する
10646
10647 @pindex mkdir
10648 @cindex directories, creating
10649 @cindex creating directories
10650
10651 @command{mkdir} は、指定された名前でディレクトリを作成する。
10652 @sp 1
10653 書式:
10654
10655 @example
10656 mkdir [@var{option}]@dots{} @var{name}@dots{}
10657 @end example
10658
10659 @command{mkdir} は、@var{name} で指定された各ディレクトリを、指定された順番で
10660 作成する。@var{name} がすでに存在していると、エラーになり、その旨メッセージ
10661 を出すが、@var{name} がすでに存在していても、@option{-p} オプションが指定され、@var{name}
10662 がディレクトリの場合は、エラーにならない。
10663
10664 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10665
10666 @table @samp
10667
10668 @item -m @var{mode}
10669 @itemx --mode=@var{mode}
10670 @opindex -m
10671 @opindex --mode
10672 @cindex modes of created directories, setting
10673 作成するディレクトリの許可属性ビットを @var{mode} に設定する。@var{mode} には
10674 @command{chmod} と同じ書式を使用し、@samp{a=rwx} (すべてのユーザに、読み、書き、
10675 実行を許可する) を基点とする。@xref{File permissions}. 
10676
10677 通常、ディレクトリには、作成された時点で、要求したとおりのファイル
10678 モードビットが付く。GNU の拡張として、@var{mode} で特殊モードビットも指定
10679 できるが、その場合は、ディレクトリは存在しているが、特殊モードビット
10680 は要求どおりではないという、時間の隙間が生じるかもしれない。ディレ
10681 クトリの set-user-ID ビットと set-group-ID ビットが、このオプション
10682 を使って変更しない場合にどのように継承されるかについては、次の節を
10683 参照していただきたい。@xref{Directory Setuid and Setgid}.
10684
10685 @item -p
10686 @itemx --parents
10687 @opindex -p
10688 @opindex --parents
10689 @cindex parent directories, creating
10690 各引数について、存在していない親ディレクトリがあれば、それを作成し、
10691 その許可属性ビットを umask を基にして @samp{u+wx} になるように設定する。
10692 親ディレクトリがすでに存在している場合は、このオプションは何もせず、
10693 その許可属性ビットを変更することもない。
10694
10695 新たに作成するいかなる親ディレクトリの許可属性ビットも、@samp{u+wx}
10696 を含むある一定の値に設定するには、@command{mkdir} を実行する前に、umask
10697 を設定すればよい。たとえば、@samp{(umask u=rwx,go=rx; mkdir -p P/Q)}
10698 というシェルコマンドで @file{P} という親ディレクトリを作れば、その
10699 許可属性ビットは @samp{u=rwx,go=rx} になる。また、親ディレクトリに特殊
10700 モードビットも設定するには、@command{chmod} を @command{mkdir} の後で実行すれば
10701 よい。新たに作成される親ディレクトリの set-user-ID ビットと
10702 set-group-ID ビットがどのように継承されるかについては、次の節を
10703 参照していただきたい。 @xref{Directory Setuid and Setgid}.
10704
10705 @item -v
10706 @itemx --verbose
10707 @opindex -v
10708 @opindex --verbose
10709 ディレクトリを作成するごとに、メッセージを表示する。@option{--parents}
10710 と併せて使うと、大変便利である。
10711
10712 @optContext (@var{context} を省略できる
10713 のは、coreutils-8.22 から)
10714
10715 @end table
10716
10717 @exitstatus
10718
10719
10720 @node mkfifo invocation
10721 @section @command{mkfifo}: FIFO (名前付きパイプ) を作成する
10722
10723 @pindex mkfifo
10724 @cindex FIFOs, creating
10725 @cindex named pipes, creating
10726 @cindex creating FIFOs (named pipes)
10727
10728 @command{mkfifo} は、指定された名前で FIFO (名前付きパイプ @dfn{named pipes}
10729 とも言う) を作成する。
10730 @sp 1
10731 書式:
10732
10733 @example
10734 mkfifo [@var{option}] @var{name}@dots{}
10735 @end example
10736
10737 @dfn{FIFO} は特殊なファイル型の一つであり、これを利用すると、独立した
10738 プロセスの間でデータのやりとりが可能になる。片方のプロセスが FIFO を
10739 書き出し用にオープンし、もう一方のプロセスが読み込み用にオープンする。
10740 そうすると、シェルなどにある普通の名前のない (anonymous) パイプを
10741 使ったときのように、データを一方から他方へ流すことができるのである。
10742
10743 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
10744
10745 @table @samp
10746
10747 @item -m @var{mode}
10748 @itemx --mode=@var{mode}
10749 @opindex -m
10750 @opindex --mode
10751 @cindex modes of created FIFOs, setting
10752 作成する FIFO の許可属性を @var{mode} にする。@var{mode} は @command{chmod} で
10753 使用するのと同じシンボル表記であり、@samp{a=rw} (すべてのユーザに、
10754 読み、書きを許可する) を基点として使う。@var{mode} で指定するのは、
10755 ファイルの許可属性ビットのみにするべきである。 @xref{File permissions}.
10756
10757 @optContext (@var{context} を省略できる
10758 のは、coreutils-8.22 から)
10759
10760 @end table
10761
10762 @exitstatus
10763
10764
10765 @node mknod invocation
10766 @section @command{mknod}: ブロック型やキャラクタ型のスペシャルファイルを作成する。
10767
10768 @pindex mknod
10769 @cindex block special files, creating
10770 @cindex character special files, creating
10771
10772 @command{mknod} は、指定された名前で FIFO、キャラクター・スペシャルファイル、
10773 ブロック・スペシャルファイルを作成する。
10774 @sp 1
10775 書式:
10776
10777 @example
10778 mknod [@var{option}]@dots{} @var{name} @var{type} [@var{major} @var{minor}]
10779 @end example
10780
10781 @cindex special files
10782 @cindex block special files
10783 @cindex character special files
10784 これまでに使ってきた「特殊なファイル型 (``special file type''」
10785 という言い回しとは違って、「スペシャルファイル (@dfn{special file})」
10786 という用語には、Unix では技術的な意味が存在する。すなわち、それは、
10787 データを生成したり、受け取ったりできるもののことである。たいていの
10788 場合、それはハードウェアという物理的なものを指し、たとえば、プリンタ
10789 やディスクがそれに当たる。(なお、そうしたスペシャルファイルは、通常、
10790 システムの設定時に作られる。) @command{mknod} は、このタイプのファイルを
10791 作成するコマンドである。そうしたデバイスには、そこから一度に 1 文字
10792 (a character) づつしか読むことのできないものもあれば、一度に 1 ブロックを
10793 (すなわち、たくさんの character を) 読み込むことのできるものもある。
10794 それ故、スペシャルファイルには、ブロック・スペシャルファイル (@dfn{block
10795 special} files) とキャラクタ・スペシャルファイル (@dfn{character special}
10796 files) があると言われるのである。
10797
10798 @c mknod is a shell built-in at least with OpenBSD's /bin/sh
10799 @mayConflictWithShellBuiltIn{mknod}
10800
10801 @var{name} に続く引数では、作成するファイルのタイプを指定する。
10802
10803 @table @samp
10804
10805 @item p
10806 @opindex p @r{for FIFO file}
10807 FIFO を作成する
10808
10809 @item b
10810 @opindex b @r{for block special file}
10811 ブロック・スペシャルファイルを作成する
10812
10813 @item c
10814 @c Don't document the 'u' option -- it's just a synonym for 'c'.
10815 @c Do *any* versions of mknod still use it?
10816 @c @itemx u
10817 @opindex c @r{for character special file}
10818 @c @opindex u @r{for character special file}
10819 キャラクタ・スペシャルファイルを作成する
10820
10821 @end table
10822
10823 ブロック型やキャラクタ型のスペシャルファイルを作成する際には、
10824 ファイルタイプに続いて、メージャー・デバイス番号とマイナー・デバイス
10825 番号を指定する必要がある。メージャーやマイナーのデバイス番号が @samp{0x} や
10826 @samp{0X} で始まっていれば、番号は 16 進数と見なされる。@samp{0} で始まっていれば
10827 8 進数、それ以外の場合は 10 進数である。
10828
10829 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
10830
10831 @table @samp
10832
10833 @item -m @var{mode}
10834 @itemx --mode=@var{mode}
10835 @opindex -m
10836 @opindex --mode
10837 作成するファイルの許可属性を @var{mode} にする。@var{mode} は @command{chmod} で
10838 使用するのと同じシンボル表記であり、@samp{a=rw} を基点として使う。
10839 @var{mode} で指定するのは、ファイルの許可属性ビットのみにするべきである。
10840 @xref{File permissions}.
10841
10842 @optContext (@var{context} を省略できる
10843 のは、coreutils-8.22 から)
10844
10845 @end table
10846
10847 @exitstatus
10848
10849
10850 @node readlink invocation
10851 @section @command{readlink}: シムリンクの値、または正規化されたファイル名を表示する
10852
10853 @pindex readlink
10854 @cindex displaying value of a symbolic link
10855 @cindex canonical file name
10856 @cindex canonicalize a file name
10857 @findex realpath
10858
10859 @command{readlink} には、二つの動作モードがある。
10860
10861 @table @samp
10862
10863 @item Readlink モード
10864
10865 このモードでは、@command{readlink} は、指定されたシンボリックリンクの値を
10866 表示する。引数がシンボリックの名前以外だったときは、何も出力せず、
10867 0 以外の終了コードで終了する。
10868
10869 @item Canonicalize (正規化) モード
10870
10871 このモードでは、@command{readlink} は、指定されたファイルの絶対パスによる
10872 名前を表示する。その絶対パスには、@file{.} や @file{..} といった構成要素や
10873 重複するパスの区切り (@file{/})、シンボリックリンクは含まれない。
10874
10875 @end table
10876
10877 @example
10878 readlink [@var{option}]@dots{} @var{file}@dots{}
10879 @end example
10880
10881 デフォルトでは、@command{readlink} は readlink モードで動作する。
10882
10883 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10884
10885 @table @samp
10886
10887 @item -f
10888 @itemx --canonicalize
10889 @opindex -f
10890 @opindex --canonicalize
10891 canonicalize モードで動かす。ファイル名を構成する要素のうち、最後の
10892 要素以外のどれかが、存在しなかったり、利用できなかったりすると、
10893 @command{readlink} は何も出力せず、0 以外の終了コードで終了する。引数の
10894 末尾のスラッシュは無視される。
10895
10896 @item -e
10897 @itemx --canonicalize-existing
10898 @opindex -e
10899 @opindex --canonicalize-existing
10900 canonicalize モードで動かす。ファイル名を構成する要素に、存在しな
10901 かったり、利用できなかったりするものが一つでもあれば、@command{readlink} は
10902 何も出力せず、 0 以外の終了コードで終了する。ファイル名のの末尾に
10903 スラッシュを付けると、その名前はディレクトリであるという指定になる。
10904
10905 @item -m
10906 @itemx --canonicalize-missing
10907 @opindex -m
10908 @opindex --canonicalize-missing
10909 canonicalize モードで動かす。ファイル名を構成する要素に、存在しな
10910 かったり、利用できなかったりするものがあれば、@command{readlink} はそれを
10911 ディレクトリと見なす。
10912
10913 @item -n
10914 @itemx --no-newline
10915 @opindex -n
10916 @opindex --no-newline
10917 @var{file} が 1 個しか指定されなかったときは、ファイル名同士を区切る
10918 デリミタを出力しない。複数の @var{file} とともに、このオプションが
10919 指定されたときは、 警告メッセージを出す。
10920
10921 @item -s
10922 @itemx -q
10923 @itemx --silent
10924 @itemx --quiet
10925 @opindex -s
10926 @opindex -q
10927 @opindex --silent
10928 @opindex --quiet
10929 ほとんどのエラーメッセージを出さないようにする。
10930
10931 @item -v
10932 @itemx --verbose
10933 @opindex -v
10934 @opindex --verbose
10935 エラーメッセージを表示する。
10936
10937 @item -z
10938 @itemx --zero
10939 @opindex -z
10940 @opindex --zero
10941 出力する項目を NUL 文字で区切る。
10942
10943 @end table
10944
10945 @command{readlink} ユーティリティが初めて登場したのは、OpenBSD 2.1. だった。
10946
10947 @command{realpath} コマンドをオプションなしで使うと、canonicalize モードの
10948 @command{readlink} と同じ動作をする。
10949
10950 @exitstatus
10951
10952
10953 @node rmdir invocation
10954 @section @command{rmdir}: 空のディレクトリを削除する
10955
10956 @pindex rmdir
10957 @cindex removing empty directories
10958 @cindex directories, removing empty
10959
10960 @command{rmdir} は、空のディレクトリを削除する。
10961 @sp 1
10962 書式:
10963
10964 @example
10965 rmdir [@var{option}]@dots{} @var{directory}@dots{}
10966 @end example
10967
10968 引数 @var{directory} が実在する空のディレクトリを指していない場合、
10969 エラーになる。
10970
10971 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
10972
10973 @table @samp
10974
10975 @item --ignore-fail-on-non-empty
10976 @opindex --ignore-fail-on-non-empty
10977 @cindex directory deletion, ignoring failures
10978 ディレクトリの削除に失敗しても、その理由が単にディレクトリが空では
10979 ないせいならば、その失敗を無視する。
10980
10981 @item -p
10982 @itemx --parents
10983 @opindex -p
10984 @opindex --parents
10985 @cindex parent directories, removing
10986 @var{directory} を削除するとき、@var{directory} を構成する各要素の削除を
10987 試みる。そこで、たとえば、@samp{rmdir -p a/b/c} は、@samp{rmdir a/b/c a/b a}
10988 と同じになる。従って、そうしたディレクトリのどれかが空ではないこと
10989 が判明すると、動作に失敗する。動作に失敗しても、エラーメッセージを
10990 出して失敗のステータスで終了しないようにするには、
10991 @option{--ignore-fail-on-non-empty} オプションを使えばよい。
10992
10993 @item -v
10994 @itemx --verbose
10995 @opindex -v
10996 @opindex --verbose
10997 @cindex directory deletion, reporting
10998 @var{directory} の削除に成功するごとに、その旨メッセージを出す。
10999
11000 @end table
11001
11002 空ではないディレクトリを (再帰的に) 削除する方法については、@command{rm}
11003 コマンドの説明を参照していただきたい。@xref{rm invocation}. 
11004
11005 @exitstatus
11006
11007
11008 @node unlink invocation
11009 @section @command{unlink}: システムコール unlink を使って、ファイルを削除する
11010
11011 @pindex unlink
11012 @cindex removing files or directories (via the unlink syscall)
11013
11014 @command{unlink} は、指定された 1 個のファイル名の削除を行う。これは、
11015 システムが提供する @code{unlink} 関数への必要最小のインターフェース
11016 である。@xref{Deleting Files, , , libc, The GNU C Library Reference Manual}.
11017 従って、より一般に使われる @command{rm} コマンドのような、様々な付加機能を
11018 あえて備えていない (@pxref{rm invocation})。
11019 @sp 1
11020 書式:
11021
11022 @example
11023 unlink @var{filename}
11024 @end example
11025
11026 システムによっては、@code{unlink} を使って、ディレクトリの名前を削除
11027 できるものもある。また、それができるのは、特権を持ったユーザだけである
11028 システムもある。GNU のシステムでは、@code{unlink} は、ディレクトリの名前を
11029 全く削除できない。
11030
11031 @command{unlink} コマンドは、@option{--help} と @option{--version} オプションを認識する。
11032 名前が @samp{-} で始まるファイルを削除するには、名前の前に @samp{./} を付ければ
11033 よい。たとえば、@samp{unlink ./--help} のようにだ。
11034
11035 @exitstatus
11036
11037
11038 @node Changing file attributes
11039 @chapter ファイルの属性変更
11040
11041 @cindex changing file attributes
11042 @cindex file attributes, changing
11043 @cindex attributes, file
11044
11045 ファイルについては、内容と名前とファイル型 (@pxref{Special file types})
11046 で、すべてが尽くされるわけではない。ファイルには、他の情報も存在する。
11047 たとえば、所有者 (ユーザ ID)、グループ (グループ ID)、アクセス権
11048 (そのファイルに対して、所有者、グループに属するユーザ、それ以外の
11049 一般ユーザは、それぞれ何ができるのか)、様々なタイムスタンプ、といった
11050 情報も存在するのである。そうしたものは、一まとめにして、ファイルの属性
11051 (@dfn{attributes}) と呼ばれている。
11052
11053 以下のコマンドは、ファイルの属性を変更する。
11054
11055 @menu
11056 * chown invocation::         ファイルの所有者やグループを変更する。
11057 * chgrp invocation::         ファイルのグループを変更する。
11058 * chmod invocation::         アクセス権を変更する。
11059 * touch invocation::         ファイルのタイムスタンプを変更する。
11060 @end menu
11061
11062
11063 @node chown invocation
11064 @section @command{chown}: ファイルの所有者やグループを変更する
11065
11066 @pindex chown
11067 @cindex file ownership, changing
11068 @cindex group ownership, changing
11069 @cindex changing file ownership
11070 @cindex changing group ownership
11071
11072 @command{chown} は、指定された各 @var{file} の所有者や所有グループを @var{new-owner} に
11073 変更する。所有者とグループを、存在する参照用ファイル (reference file)
11074 のそれと同じものに変更することもできる。
11075 @sp 1
11076 書式:
11077
11078 @example
11079 chown [@var{option}]@dots{} @{@var{new-owner} | --reference=@var{ref_file}@}@c
11080  @var{file}@dots{}
11081 @end example
11082
11083 @var{new-owner} では、新しい所有者やグループを以下のような形で指定する
11084 (@samp{:} の前後に空白を入れてはいけない)。
11085
11086 @example
11087 [@var{owner}] [ : [@var{group}] ]
11088 @end example
11089
11090 細かく説明しよう。
11091
11092 @table @var
11093 @item owner
11094 @var{owner} (ユーザ名、またはユーザ ID 番号) だけが指定されている場合は、
11095 そのユーザが指定された各ファイルの所有者になる。ファイルの
11096 グループは変化しない。
11097
11098 @item owner@samp{:}group
11099 @var{owner} の後に、コロンと @var{group} (グループ名、またはグループ ID 番号)
11100 が、間に空白をはさまずに続く場合は、ファイルの所有グループも
11101 (@var{group} に) 変更される。
11102
11103 @item owner@samp{:}
11104 @var{owner} の後ろにコロンがあるのみで、グループ名が続かない場合は、
11105 そのユーザがファイルの所有者になり、ファイルのグループは、@var{owner}
11106 のログイン・グループに変更される。
11107
11108 @item @samp{:}group
11109 コロンとそれに続く @var{group} のみが指定され、所有者が省略されている
11110 場合は、ファイルのグループだけが変更される。この場合、@command{chown}
11111 は、@command{chgrp} と同じ動作をするわけだ。
11112
11113 @item @samp{:}
11114 コロンのみが指定されている場合や、@var{new-owner} に何も指定されていない
11115 場合は、所有者もグループも変更されない。
11116
11117 @end table
11118
11119 @var{owner} や @var{group} にユーザ ID 番号やグループ ID 番号を使用する場合は、
11120 番号の頭に @samp{+} を付ければ、ID 番号だと明示することができる。
11121 @xref{Disambiguating names and IDs}.
11122
11123 古めのスクリプトの中には、区切りの印として @samp{:} ではなく、@samp{.} を
11124 今だに使っているものがあるかもしれない。POSIX 1003.1-2001 (@pxref{Standards conformance})
11125 では、これに対するサポートを要求していないが、
11126 後方互換のために、GNU の @command{chown} では、曖昧さが生じないかぎり、@samp{.} の
11127 使用をサポートしている。とは言え、新しく書くスクリプトでは、@samp{.} の
11128 使用を避けるべきである。他のシステムでも使えるとはかぎらないし、また、
11129 @var{owner@samp{.}group} という全体が、名前に @samp{.} を含むユーザを指していたり
11130 すると、不都合が生じるからだ。
11131
11132 @command{chown} コマンドを実行すると、set-user-ID ビットや set-group-ID
11133 ビットが消えてしまうことがある。そうしたことが起きるかどうかは、
11134 裏で動いている @code{chown} システムコールのポリシーや機能次第であり、
11135 従って、システムによるファイルモードの変更が、@command{chown} コマンドの
11136 コントロール外になることがあるのだ。しかるべき特権を持ったユーザが
11137 実行した場合や、問題のビットが実行権とは関係のない何か別の機能
11138 (たとえば、強制ロック) を表している場合などでは、@command{chown} コマンド
11139 を実行しても、そうしたビットが変わらないかもしれない。どうなるか
11140 よくわからない場合は、裏で動いているシステムの動作を調べるとよい。
11141
11142 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11143
11144 @table @samp
11145
11146 @item -c
11147 @itemx --changes
11148 @opindex -c
11149 @opindex --changes
11150 @cindex changed owners, verbosely describing
11151 所有者の変更が実際に行われた各 @var{file} について、何を実行したかを
11152 詳しく表示する。
11153
11154 @item -f
11155 @itemx --silent
11156 @itemx --quiet
11157 @opindex -f
11158 @opindex --silent
11159 @opindex --quiet
11160 @cindex error messages, omitting
11161 所有者を変更できないファイルがあっても、エラーメッセージを出さない。
11162
11163 @item @w{@kbd{--from}=@var{old-owner}}
11164 @opindex --from
11165 @cindex symbolic links, changing owner
11166 @var{file} が @var{old-owner} で指定された属性を現在持っているときにのみ、
11167 その所有者を変更する。@var{old-owner} の書式は、上記の @var{new-owner} と同じ
11168 である。このオプションは、ファイルの不正使用が可能になる時間を
11169 大幅に狭めるという点で、主としてセキュリティの見地から役に立つ。
11170 一例を挙げると、この種のオプションを使わない場合、ユーザの ID
11171 番号の変更を、そのユーザのファイルに反映させるために、@code{root} は
11172 次のようなコマンドを実行するかもしれない。
11173
11174 @smallexample
11175 find / -user OLDUSER -print0 | xargs -0 chown -h NEWUSER
11176 @end smallexample
11177
11178 しかし、これは危険なことである。なぜなら、@command{find} が存在する
11179 ファイルの所有者を検査するときと、@command{chown} が実際に実行される
11180 ときとの間に時間差があり、それはかなり大きいかもしれないからだ。
11181 この時間差を小さくする方法の一つは、ファイルが見つかるごとに、
11182 @command{chown} を実行することだろう。
11183
11184 @example
11185 find / -user OLDUSER -exec chown -h NEWUSER @{@} \;
11186 @end example
11187
11188 しかし、動作の対象になるファイルがたくさんあると、この方法は
11189 非常に時間がかかる。@option{--from=@var{old-owner}} オプションを使う方が、
11190 完璧とまでは言えないにしても、より安全である (時間差がさらに
11191 小さくなるので)。
11192
11193 @example
11194 chown -h -R --from=OLDUSER NEWUSER /
11195 @end example
11196
11197 @item --dereference
11198 @opindex --dereference
11199 @cindex symbolic links, changing owner
11200 @findex lchown
11201 シンボリックリンクそのものを動作の対象とせず、リンクが指している
11202 ものを動作の対象にする。これがデフォルトである。
11203
11204 @item -h
11205 @itemx --no-dereference
11206 @opindex -h
11207 @opindex --no-dereference
11208 @cindex symbolic links, changing owner
11209 @findex lchown
11210 シンボリックリンクが指しているものではなく、シンボリックリンク
11211 そのものを動作の対象にする。このモードは、システムコール @code{lchown}
11212 に依存している。システムコール @code{lchown} を提供していないシステム
11213 では、コマンドラインで指定されたファイルがシンボリックリンクだと、
11214 @command{chown} は実行に失敗する。なお、再帰的にディレクトリ階層をたどって
11215 いる際にシンボリックリンクに出会っても、デフォルトでは診断メッセージ
11216 を表示しない。ただし、@option{--verbose} を指定している場合は別なので、
11217 そちらの説明も参照していただきたい。
11218
11219 @item --preserve-root
11220 @opindex --preserve-root
11221 @cindex root directory, disallow recursive modification
11222 ルートディレクトリ (@file{/}) を再帰的に変更しようとすると、
11223 エラーになる。@option{--recursive} オプションを指定していない場合、
11224 このオプションは効果がない。 @xref{Treating / specially}.
11225
11226 @item --no-preserve-root
11227 @opindex --no-preserve-root
11228 @cindex root directory, allow recursive modification
11229 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11230 @xref{Treating / specially}.
11231
11232 @item --reference=@var{ref_file}
11233 @opindex --reference
11234 各 @var{file} の所有者とグループを @var{ref_file} のそれと同じものに変更する。
11235 @var{ref_file} がシンボリックリンクの場合は、シンボリックリンクの
11236 所有者とグループではなく、リンクが指しているファイルの所有者と
11237 グループを使用する。
11238
11239 @item -v
11240 @itemx --verbose
11241 @opindex -v
11242 @opindex --verbose
11243 処理したすべてのファイルについてメッセージを表示する。システム
11244 コール @code{lchown} を持っていないシステムで、再帰的にディレクトリ
11245 階層をたどっている際にシンボリックリンクに出会った場合、
11246 @option{--no-dereference} が有効になっていれば、「シンボリックリンクも
11247 その参照先も変更しない」というメッセージを出す。
11248
11249 @item -R
11250 @itemx --recursive
11251 @opindex -R
11252 @opindex --recursive
11253 @cindex recursively changing file ownership
11254 ディレクトリとその中身の所有者を再帰的に変更する。
11255
11256 @choptH @xref{Traversing symlinks}.
11257
11258 @choptL @xref{Traversing symlinks}.
11259
11260 @choptP @xref{Traversing symlinks}.
11261
11262 @end table
11263
11264 @exitstatus
11265
11266 用例:
11267
11268 @smallexample
11269 # /u の所有者を "root" に変更する。
11270 chown root /u
11271
11272 # 同様だが、グループも "staff" に変更する。
11273 chown root:staff /u
11274
11275 # /u 及び、それ以下にあるファイルの所有者を "root" に変更する。
11276 chown -hR root /u
11277 @end smallexample
11278
11279
11280 @node chgrp invocation
11281 @section @command{chgrp}: ファイルの所有グループを変更する
11282
11283 @pindex chgrp
11284 @cindex group ownership, changing
11285 @cindex changing group ownership
11286
11287 @command{chgrp} は、指定された各 @var{file} の所有グループを @var{group} に変更する (@var{group}
11288 は、グループ名でもグループ ID 番号でもよい)。所有グループを、存在する
11289 参照用ファイル (reference file) のグループと同じものに変更することも
11290 できる。
11291 @sp 1
11292 書式:
11293
11294 @example
11295 chgrp [@var{option}]@dots{} @{@var{group} | --reference=@var{ref_file}@}@c
11296  @var{file}@dots{}
11297 @end example
11298
11299 @var{group} にグループ ID 番号を使用する場合は、番号の頭に @samp{+} を付ければ、
11300 ID 番号だと明示することができる。 @xref{Disambiguating names and IDs}.
11301
11302 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11303
11304 @table @samp
11305
11306 @item -c
11307 @itemx --changes
11308 @opindex -c
11309 @opindex --changes
11310 @cindex changed files, verbosely describing
11311 グループの変更が実際に行われた各 @var{file} について、何を実行したかを
11312 詳しく表示する。
11313
11314 @item -f
11315 @itemx --silent
11316 @itemx --quiet
11317 @opindex -f
11318 @opindex --silent
11319 @opindex --quiet
11320 @cindex error messages, omitting
11321 グループを変更できないファイルがあっても、エラーメッセージを
11322 出さない。
11323
11324 @item --dereference
11325 @opindex --dereference
11326 @cindex symbolic links, changing owner
11327 @findex lchown
11328 シンボリックリンクそのものを動作の対象とせず、リンクが指している
11329 ものを動作の対象にする。これがデフォルトである。
11330
11331 @item -h
11332 @itemx --no-dereference
11333 @opindex -h
11334 @opindex --no-dereference
11335 @cindex symbolic links, changing group
11336 @findex lchown
11337 シンボリックリンクが指しているものではなく、シンボリックリンク
11338 そのものを動作の対象にする。このモードは、システムコール @code{lchown}
11339 に依存している。システムコール @code{lchown} を提供していないシステム
11340 では、コマンドラインで指定されたファイルがシンボリックリンクだと、
11341 @command{chgrp} は実行に失敗する。なお、再帰的にディレクトリ階層をたどって
11342 いる際にシンボリックリンクに出会っても、デフォルトでは診断メッセージ
11343 を表示しない。ただし、@option{--verbose} を指定している場合は別なので、
11344 そちらの説明も参照していただきたい。
11345
11346 @item --preserve-root
11347 @opindex --preserve-root
11348 @cindex root directory, disallow recursive modification
11349 ルートディレクトリ (@file{/}) を再帰的に変更しようとすると、
11350 エラーになる。@option{--recursive} オプションを指定していない場合、
11351 このオプションは効果がない。 @xref{Treating / specially}.
11352
11353 @item --no-preserve-root
11354 @opindex --no-preserve-root
11355 @cindex root directory, allow recursive modification
11356 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11357 @xref{Treating / specially}.
11358
11359 @item --reference=@var{ref_file}
11360 @opindex --reference
11361 各 @var{file} のグループを @var{ref_file} のグループと同じものに変更する。
11362 @var{ref_file} がシンボリックリンクの場合は、シンボリックリンクの
11363 グループではなく、リンクが指しているファイルのグループを使用する。
11364
11365 @item -v
11366 @itemx --verbose
11367 @opindex -v
11368 @opindex --verbose
11369 処理したすべてのファイルについてメッセージを表示する。システム
11370 コール @code{lchown} を持っていないシステムで、再帰的にディレクトリ
11371 階層をたどっている際にシンボリックリンクに出会った場合、
11372 @option{--no-dereference} が有効になっていれば、「シンボリックリンクも
11373 その参照先も変更しない」というメッセージを出す。
11374
11375 @item -R
11376 @itemx --recursive
11377 @opindex -R
11378 @opindex --recursive
11379 @cindex recursively changing group ownership
11380 ディレクトリとその中身の所有グループを再帰的に変更する。
11381
11382 @choptH @xref{Traversing symlinks}.
11383
11384 @choptL @xref{Traversing symlinks}.
11385
11386 @choptP @xref{Traversing symlinks}.
11387
11388 @end table
11389
11390 @exitstatus
11391
11392 用例:
11393
11394 @smallexample
11395 # /u のグループを "staff" に変更する。
11396 chgrp staff /u
11397
11398 # /u 及び、それ以下にあるファイルのグループを "staff" に変更する。
11399 chgrp -hR staff /u
11400 @end smallexample
11401
11402
11403 @node chmod invocation
11404 @section @command{chmod}: アクセス権を変更する
11405
11406 @pindex chmod
11407 @cindex changing access permissions
11408 @cindex access permissions, changing
11409 @cindex permissions, changing access
11410
11411 @command{chmod} は、名前を指定したファイルのアクセス権を変更する。
11412 @sp 1
11413 書式:
11414
11415 @example
11416 chmod [@var{option}]@dots{} @{@var{mode} | --reference=@var{ref_file}@}@c
11417  @var{file}@dots{}
11418 @end example
11419
11420 @cindex symbolic links, permissions of
11421 @command{chmod} コマンドがシンボリックリンクのアクセス権を変更することは
11422 ない。@command{chmod} システムコールがシンボリックリンクのアクセス権を変更
11423 できないからである。シンボリックリンクのアクセス権が利用されることは
11424 全くないので、この制限は問題にならない。とは言え、コマンドラインで
11425 指定された @var{file} が、シンボリックリンクだということはあるだろうが、
11426 そうした場合、@command{chmod} は、指定された各シンボリックリンクが参照して
11427 いるファイルのアクセス権を変更する。それに対して、ディレクトリを
11428 再帰的にたどっている最中にシンボリックリンクに出会った場合は、
11429 @command{chmod} はそれを無視することになる。
11430
11431 @command{chmod} の実行に成功したとき、通常ファイルの set-group-ID ビットが
11432 消えることがあるが、それは、ファイルのグループ ID が、@command{chmod} を実行
11433 したユーザの実効グループ ID や、補助グループ ID の一つに一致しなかった
11434 場合である。もっとも、そのユーザがしかるべき特権を持っている場合には、
11435 set-group-ID ビットが消えることはない。また、制限事項が他にも存在して、
11436 指定した @var{mode} 中や @var{ref_file} の、set-user-ID ビットや set-group-ID
11437 ビットが無視されることもある。そうした動作は、裏で動いている @code{chmod}
11438 システムコールのポリシーや機能次第なのだ。どうなるかよくわからない
11439 場合には、裏で動いているシステムの動作を調べればよい。
11440
11441 @var{mode} には、ファイルの新しいモードビット (訳注: すなわち、アクセス
11442 権) を指定する。詳細については、「ファイルの許可属性」の章を参照して
11443 いただきたい (@pxref{File permissions})。@var{mode} を指定するとき、@var{mode} を
11444 どうしても @samp{-} で始めたいのなら、前に @option{--} を置いた方がよい。たとえば、
11445 @samp{chmod -- -w file} のようにだ。とは言え、たいていの場合、@samp{chmod a-w file}
11446 の方が望ましい。なお、@command{chmod -w file} (@option{--} がない) が
11447 @samp{chmod a-w file} と別の動作になる場合には、警告が出る。
11448
11449 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11450
11451 @table @samp
11452
11453 @item -c
11454 @itemx --changes
11455 @opindex -c
11456 @opindex --changes
11457 アクセス権の変更が実際に行われた各 @var{file} について、何を実行したかを
11458 詳しく表示する。
11459
11460 @item -f
11461 @itemx --silent
11462 @itemx --quiet
11463 @opindex -f
11464 @opindex --silent
11465 @opindex --quiet
11466 @cindex error messages, omitting
11467 アクセス権が変更できないファイルがあっても、エラーメッセージを
11468 出さない。
11469
11470 @item --preserve-root
11471 @opindex --preserve-root
11472 @cindex root directory, disallow recursive modification
11473 ルートディレクトリ (@file{/}) を再帰的に変更しようとすると、
11474 エラーになる。@option{--recursive} オプションを指定していない場合、
11475 このオプションは効果がない。 @xref{Treating / specially}.
11476
11477 @item --no-preserve-root
11478 @opindex --no-preserve-root
11479 @cindex root directory, allow recursive modification
11480 @option{--preserve-root} オプションが前にあれば、その効果を無効にする。
11481 @xref{Treating / specially}.
11482
11483 @item -v
11484 @itemx --verbose
11485 @opindex -v
11486 @opindex --verbose
11487 すべての @var{file} について、何を実行し、何を実行しなかったかを詳しく
11488 表示する。
11489
11490 @item --reference=@var{ref_file}
11491 @opindex --reference
11492 各 @var{file} のモードを @var{ref_file} のそれと同じものに変更する。
11493 @xref{File permissions}.  @var{ref_file} がシンボリックリンクの場合は、
11494 シンボリックリンクのモードではなく、リンクが参照しているファイルの
11495 モードを使用する。
11496
11497 @item -R
11498 @itemx --recursive
11499 @opindex -R
11500 @opindex --recursive
11501 @cindex recursively changing access permissions
11502 ディレクトリとその中身のアクセス権を再帰的に変更する。
11503
11504 @end table
11505
11506 @exitstatus
11507
11508
11509 @node touch invocation
11510 @section @command{touch}: ファイルのタイムスタンプを変更する
11511
11512 @pindex touch
11513 @cindex changing file timestamps
11514 @cindex file timestamps, changing
11515 @cindex timestamps, changing file
11516
11517 @command{touch} は指定されたファイルのアクセス日時 (access time) や更新日時
11518 (modification time) を変更する。
11519 @sp 1
11520 書式:
11521
11522 @example
11523 touch [@var{option}]@dots{} @var{file}@dots{}
11524 @end example
11525
11526 @cindex empty files, creating
11527 引数 @var{file} に存在しないファイルを指定すると、空のファイルが作成
11528 される。ただし、@option{--no-create} (@option{-c}) や @option{--no-dereference}
11529 (@option{-h}) が
11530 有効な場合は、ファイルは作成されない。
11531
11532 引数 @var{file} が @samp{-} という文字列の場合は、特別な扱いする。@command{touch} は、
11533 標準出力に結びついているファイルの日時を変更するのである。
11534
11535 @cindex clock skew
11536 @command{touch} は、デフォルトではファイルのタイムスタンプを現在の日時に
11537 セットする。@command{touch} はオペランドを左から右へと順番に処理するので、
11538 生成されたタイムスタンプが、前後のオペランドで一致しないこともある。
11539 また、「現在」とはいつかを決めるのは、プラットフォーム次第である。
11540 ネットワーク・ファイルシステムを使用しているプラットフォームでは、
11541 オペレーティング・システムとファイルシステムとで別のクロックを使用
11542 していることも珍しくない。@command{touch} は通常、デフォルトではファイル
11543 システムのクロックを使用するので、クロックのずれのために、生成された
11544 ファイルのタイムスタンプが、あるプログラムにとっては「未来」に
11545 見えたり、「過去」に見えたりすることがある。
11546
11547 @cindex file timestamp resolution
11548 @command{touch} コマンドは、ファイルのタイムスタンプを、ユーザが指定した
11549 日時よりも精度が高くならない範囲で、表現できる最大の値にセットする。
11550 この値がユーザが指定した日時と違うことがあるが、それにはいくつかの
11551 理由がある。第一に、ユーザが指定した日時が、サポートされている精度を
11552 越えていることがある。第二に、ファイルシステムが、日時のタイプに
11553 よって別の精度を使っていることがある。第三に、ファイルのタイム
11554 スタンプが、オペレーティング・システムのタイムスタンプとは別の精度を
11555 使っていることがある。第四に、オペレーティング・システムでタイム
11556 スタンプの更新に使用されている基本データ型が、さらに違う精度を採用
11557 していることがある。そんなわけで、理屈の上では、たとえば、ファイル
11558 システムでは、アクセス日時には 10 マイクロ秒の精度を、更新日時には
11559 100 ナノ秒の精度を使用し、オペレーティング・システムの方では、現在の
11560 時刻にはナノ秒の精度を、@command{touch} がファイルのタイムスタンプを任意の
11561 値に設定するために使う基本データ型には、マイクロ秒の精度を使用して
11562 いる、そういうこともありえるのである。
11563
11564 @cindex permissions, for changing file timestamps
11565 タイムスタンプを現在の時刻にセットする場合には、ユーザが所有して
11566 いないファイルでも、書き込み権限さえ持っていれば、@command{touch} はその
11567 タイムスタンプを変更することができる。しかし、現在の時刻以外にセット
11568 するには、ユーザはそのファイルを所有していなければならない。古い
11569 システムの中には、制限がさらに厳しいものもある。たとえば、アクセス
11570 日時と更新日時の両方を現在の時刻にセットするとき以外、対象となる
11571 ファイルを所有していなければならないといった具合だ。
11572
11573 @command{touch} が提供するオプションを使えば、ファイルの 2 種類の日時 ---
11574 最終アクセス日時と最終更新日時 --- を変更することができるが、標準の
11575 日時には、実はそのほかに 3 番目のものがある。すなわち、inode の変更日時
11576 (inode change time) だ。これは、ファイルの @code{ctime} と呼ばれることが
11577 多い。inode の変更日時は、ファイルのメタ情報が最後に変更された日時を
11578 表している。メタ情報の変更のよくある例の一つは、ファイルのアクセス権
11579 の変更である。アクセス権の変更では、ファイルにアクセスするわけではない
11580 ので、atime (アクセス日時) は変化しないし、またファイルの内容を変更
11581 するわけでもないので、mtime (更新日時) も変化しない。しかし、ファイル
11582 そのものに関する何ものかが変化しているわけであり、それはどこかに記録
11583 されなければならない。まさにそれが、inode の ctime フィールドの役割
11584 なのだ。たとえば、バックアップ・プログラムが、ファイルのアクセス権に
11585 変更があった場合も含めて、ファイルのコピーを最新に保つことができる
11586 ようにするには、ctime が不可欠である。ファイルの ctime は変更するが、
11587 他の日時には影響を及ぼさない別の操作には、ファイル名の変更がある。
11588 なお、いかなる場合であれ、通常の操作では、ユーザが ctime フィールドを
11589 自分で指定する値に変更することはできない。オペーレーティングシステムや
11590 ファイルシステムの中には、4 番目の日時をサポートしているものもある。
11591 すなわち、作成日時 (birth time) であり、ファイルが最初に作られた日時だ。
11592 名前からして当然だが、このタイムスタンプが変更されることはない。
11593
11594 @vindex TZ
11595 タイムスタンプは、タイムゾーンのルールに従うが、そのルールを指定して
11596 いるのは、環境変数 @env{TZ} である。@env{TZ} が設定されていない場合は、システム
11597 のデフォルトのルールに従う。 @xref{TZ Variable,, Specifying the Time Zone
11598 with @env{TZ}, libc, The GNU C Library Reference Manual}.
11599 なお、UTC のタイムスタンプを使えば、夏 (冬) 時間への
11600 移行時の曖昧さを避けることができる。
11601
11602 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11603
11604 @table @samp
11605
11606 @item -a
11607 @itemx --time=atime
11608 @itemx --time=access
11609 @itemx --time=use
11610 @opindex -a
11611 @opindex --time
11612 @opindex atime@r{, changing}
11613 @opindex access @r{time, changing}
11614 @opindex use @r{time, changing}
11615 アクセス日時のみ変更する。
11616
11617 @item -c
11618 @itemx --no-create
11619 @opindex -c
11620 @opindex --no-create
11621 存在しないファイルについて警告を出さず、ファイルの作成もしない。
11622
11623 @item -d
11624 @itemx --date=@var{time}
11625 @opindex -d
11626 @opindex --date
11627 @opindex time
11628 現在の日時の代わりに @var{time} を使用する。@var{time} には、月の名前、
11629 タイムゾーン、@samp{am} や @samp{pm}、@samp{yesterday} なども使うことができる。
11630 たとえば、@option{--date="2004-02-27 14:19:13.489392193 +0530"} とすると、
11631 UTC より 5 時間 30 分東のタイムゾーンで、2004 年 2 月 27 日 午後
11632 2 時 19 分 13 秒 から 489,392,193 ナノ秒経過した瞬間を指定することに
11633 なる。@xref{Date input formats}.  精度の高いタイムスタンプを
11634 サポートしていないファイルシステムでは、精度の超過分は単に無視
11635 される。
11636
11637 @item -f
11638 @opindex -f
11639 @cindex BSD @command{touch} compatibility
11640 何もしない。BSD 版の @command{touch} との互換性のためにある。
11641
11642 @item -h
11643 @itemx --no-dereference
11644 @opindex -h
11645 @opindex --no-dereference
11646 @cindex symbolic links, changing time
11647 @findex lutimes
11648 シンボリックリンクが参照しているファイルではなく、シンボリック
11649 リンクのタイムスタンプの変更を試みる。このオプションを使用すると、
11650 空のファイルは作成されないが、ファイルが存在しないという警告まで
11651 出ないようにするには、@option{-c} オプションも併せて使用する必要がある。
11652 すべてのシステムが、シンボリックリンクのタイムスタンプの変更を
11653 サポートしているわけではない。なぜならば、POSIX 2008 までは、
11654 下層で動いているシステムに対して、そうした動作のサポートを要求
11655 していなかったからである。また、システムによっては、シンボリック
11656 リンクは、調べるだけでアクセス日時が変わってしまうので、変更の
11657 結果が後々まで残って観察できるのは、更新日時だけだというものも
11658 ある。なお、このオプションを @option{-r} オプションと一緒に使用すると、
11659 参照するタイムスタンプが、リンクが指しているファイルからではなく、
11660 シンボリックリンクから取得される。
11661
11662 @item -m
11663 @itemx --time=mtime
11664 @itemx --time=modify
11665 @opindex -m
11666 @opindex --time
11667 @opindex mtime@r{, changing}
11668 @opindex modify @r{time, changing}
11669 更新日時 (modification time) のみ変更する。
11670
11671 @item -r @var{file}
11672 @itemx --reference=@var{file}
11673 @opindex -r
11674 @opindex --reference
11675 現在の日時の代わりに、参照ファイル @var{file} の日時を使用する。この
11676 オプションを @option{--date=@var{time}} (@option{-d @var{time}}) オプションと組み合わせて
11677 使うと、@var{time} が相対時間で指定されている場合は、参照ファイル @var{file}
11678 の日時がその基点となるが、それ以外の場合は、@var{file} の日時は無視され
11679 る。たとえば、@samp{-r foo -d '-5 seconds'} は、@file{foo} のタイムスタンプ
11680 より 5 秒前のタイムスタンプを指定している。@var{file} がシンボリック
11681 リンクの場合は、@option{-h} が同時に有効になっていないかぎり、参照する
11682 タイムスタンプは、シンボリックリンクの参照先から取得される。
11683
11684 @item -t [[@var{cc}]@var{yy}]@var{mmddhhmm}[.@var{ss}]
11685 @cindex leap seconds
11686 現在の日時の代わりに、@option{-t} オプションの引数を使用する (引数の構成
11687 は、4 桁または 2 桁の年 (省略可)、月、日、時、分、秒 (秒も省略可)
11688 である)。年が 2 桁のみ指定された場合、0 @dots{} 68 の範囲の年ならば、
11689 @var{cc} は 20 であり、69 @dots{} 99 の範囲の年では、@var{cc} は 19 である。
11690 年が全く指定されない場合は、引数は今年の日付だと解釈される。閏秒に
11691 対応している例外的なシステムでは、@var{ss} が @samp{60} のこともありえる。
11692
11693 @end table
11694
11695 @vindex _POSIX2_VERSION
11696 古めのシステムでは、@command{touch} は次のような旧式の書式もサポートして
11697 いる。すなわち、@option{-d}, @option{-r}, @option{-t} のいづれによってもタイムスタンプが指定
11698 されていず、しかも、2 個以上の @var{file} が指定されていて、最初の @var{file} が
11699 @samp{@var{mmddhhmm}[@var{yy}]} の形を持ち、それが (@var{yy} が存在するなら、それを先頭に
11700 移せば) @option{-t} オプションに対する有効な引数と見なすことができる場合に、
11701 その引数の表している年度が 1969--1999 の範囲にあるならば、その引数を
11702 ファイル名ではなく、他のファイルに適用する日時と解釈する、というもの
11703 である。この旧式の動作は、環境変数 @env{_POSIX2_VERSION} によって有効に
11704 したり、無効にしたりできるが (@pxref{Standards conformance})、移植を
11705 考慮したスクリプトでは、動作がこの環境変数に依存するコマンドの使用は
11706 避けるべきである。たとえば、二通りの解釈ができる @samp{touch 12312359 main.c}
11707 を使うより、@samp{touch ./12312359 main.c} や @samp{touch -t 12312359 main.c} を
11708 使用した方がよい。
11709
11710 @exitstatus
11711
11712
11713 @node Disk usage
11714 @chapter ディスク使用量
11715
11716 @cindex disk usage
11717
11718 データをいくらでも無限に入れることのできるディスクはない。この章で説明
11719 するコマンドには、使用しているディスク容量や利用可能なディスク容量を報告
11720 するもの、それ以外のファイル情報やファイルステータス情報を報告するもの、
11721 それに、バッファの内容をディスクに書き込むものがある。
11722
11723 @menu
11724 * df invocation::            ファイルシステムのディスク使用量を報告する。
11725 * du invocation::            ファイルのディスク使用量を概算する。
11726 * stat invocation::          ファイルやファイルシステムのステータスを報告する。
11727 * sync invocation::          メモリとディスクを同期させる。
11728 * truncate invocation::      ファイルサイズの短縮・伸長を行う。
11729 @end menu
11730
11731
11732 @node df invocation
11733 @section @command{df}: ファイルシステムのディスク使用状態を報告する
11734
11735 @pindex df
11736 @cindex file system disk usage
11737 @cindex disk usage by file system
11738
11739 @command{df} は、ファイルシステムごとに、使用されているディスク容量と利用可能な
11740 ディスクス容量を報告する。
11741 @sp 1
11742 書式:
11743
11744 @example
11745 df [@var{option}]@dots{} [@var{file}]@dots{}
11746 @end example
11747
11748 引数を指定しないと、@command{df} は、現在マウントされているすべてのファイル
11749 システム (ファイルシステムのタイプを問わない) について、使用されている
11750 ディスク容量と、利用可能なディスク容量を報告する。引数が指定されている
11751 場合は、引数として指定された各 @var{file} が存在するファイルシステムについて
11752 報告する。
11753
11754 通常、ディスク容量は 1024 バイトを 1 単位として表示するが、この動作は
11755 変更することができる (@pxref{Block size})。なお、小数点以下は切り上げて
11756 整数にする。
11757
11758 bind マウントについては、引数が指定されていない場合に @command{df} が
11759 表示するのは、そのデバイスに関する統計情報のうち、ファイルシステムの
11760 リスト中で (すなわち、@var{mtab} 中で) マウントポイントの名前が最も短い
11761 ものに関する情報のみである。すなわち、@option{-a} オプションが指定されて
11762 いないときは、情報が重複するエントリは表示しない。
11763
11764 同じ理屈で、ダミーの擬似デバイスについては、そのマウントポイントに
11765 対する別のマウントエントリが存在し、それが実在のブロックデバイスの
11766 ものであり、しかもデバイス番号が同じ場合、@command{df} は擬似デバイスの
11767 マウントエントリの方は省略する。たとえば、ブート初期に作成される
11768 擬似ファイルシステムの @samp{rootfs} は、実際のルートデバイスがすでに
11769 マウントされていれば、デフォルトでは表示されない。
11770
11771 @cindex disk device file
11772 @cindex device file, disk
11773 引数 @var{file} がスペシャルファイルに還元され、そのスペシャルファイル
11774 上に存在するファイルシステムが現在マウントされている場合、@command{df} が
11775 表示するのは、そのファイルシステムの利用可能な容量であって、デバイス・
11776 ノードが存在するファイルシステムの利用可能な容量ではない。また、GNU の
11777 @command{df} は、マウントされていないファイルシステムのディスク使用量を測定
11778 しようとはしない。なぜなら、ほとんどのファイルシステムにおいて、そういう
11779 ことを行うには、ファイルシステムの構造について他と全く共通性のない内奥の
11780 知識が必要だからである。
11781 @sp 1
11782 (訳注: このパラグラフの前半については、実際にはもう少し複雑である。
11783 確かに、/dev/sda5 が /home にマウントされているとき (ついでに、
11784 /dev/HOME が /dev/sda5 のシンボリックリンクだとしよう)、@samp{df /dev/sda5}
11785 や @samp{df /dev/HOME} は、/dev/sda5 の情報を表示する。しかし、
11786 ルートデバイスの場合は、事情が異なる。訳者の手元の linux-3.2.0 に
11787 coreutils-8.22 という環境で /dev/sda3 が / にマウントされている場合、
11788 @samp{df /dev/sda3} は、/dev/sda3 上にあるファイルシステムではなく、/dev に
11789 マウントされた udev ファイルシステムの情報を表示するのである。カーネルや
11790 coreutils のバージョンによって動作が微妙に違うかもしれないので、実際に
11791 動かして確認することをお勧めする。)
11792
11793 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
11794
11795 @table @samp
11796
11797 @item -a
11798 @itemx --all
11799 @opindex -a
11800 @opindex --all
11801 @cindex automounter file systems
11802 @cindex ignore file systems
11803 一覧表示にダミーのファイルシステムを含める。そうしたものは、デフォルト
11804 の表示では省略されている。たいていの場合、そうしたファイルシステムは、
11805 たとえばオートマウンタのエントリのような、特殊な用途のための擬似
11806 ファイルシステムである。
11807
11808 @item -B @var{size}
11809 @itemx --block-size=@var{size}
11810 @opindex -B
11811 @opindex --block-size
11812 @cindex file system sizes
11813 @var{size} によって単位の大きさを変更してから、サイズを表示する (@pxref{Block size})。
11814 たとえば、@option{-BG} と指定すれば、1,073,741,824 バイト
11815 を 1 単位として、サイズを表示する。
11816
11817 @item --total
11818 @opindex --total
11819 @cindex grand total of disk size, usage and available space
11820 すべての引数を処理した後で、全引数からなる総計を表示する。
11821 このオプションを使用すれば、ディスクの容量、使用した量、使用可能
11822 な量について、リストされたすべてのデバイスを合わせた総量を知ること
11823 ができる。
11824
11825 総計の行において @command{df} は @var{source} の列に @samp{"total"} と表示し、
11826 @var{target}
11827 の列に @samp{"-"} という文字を表示する (訳注: @var{source}, @var{target} などの列に
11828 ついては、@option{--output} の説明を参照していただきたい)。@var{source} の列が
11829 存在しない場合は、@var{target} の列が存在すれば、@command{df} は @var{target} の列に
11830 @samp{"total"} と表示する。
11831
11832 @optHumanReadable
11833
11834 @item -H
11835 @opindex -H
11836 @option{--si} オプションと同じである。
11837
11838 @item -i
11839 @itemx --inodes
11840 @opindex -i
11841 @opindex --inodes
11842 @cindex inode usage
11843 ブロックの使用量ではなく、inode の使用情報を一覧表示する。inode
11844 (index node の略称) には、ファイルの所有者、許可属性、タイム
11845 スタンプ、ディスク上の位置といった、ファイルに関する情報が含まれ
11846 ている。
11847
11848 @item -k
11849 @opindex -k
11850 @cindex kibibytes for file system sizes
11851 デフォルトのブロックサイズがどうなっていようと、1 ブロック 1024
11852 バイトでサイズを表示する (@pxref{Block size})。このオプションは @option{--block-size=1K}
11853 に等しい。
11854
11855 @item -l
11856 @itemx --local
11857 @opindex -l
11858 @opindex --local
11859 @cindex file system types, limiting output to certain
11860 一覧表示するのをローカルのファイルシステムに限定する。デフォルトでは、
11861 リモートのファイルシステムも表示される。
11862
11863 @item --no-sync
11864 @opindex --no-sync
11865 @cindex file system space, retrieving old data more quickly
11866 使用量に関するデータを取得する前に @code{sync} システムコールを実行
11867 しない。そのため、多数のディスクを搭載しているシステムでは、@command{df}
11868 の実行速度が目に見えて向上するが、システムによっては (特に SunOS
11869 では)、出力結果がほんの少し古いものになるかもしれない。これが
11870 デフォルトの動作である。
11871
11872 @item --output
11873 @itemx @w{@kbd{--output}[=@var{field_list}]}
11874 @opindex --output
11875 @var{field_list} で定義した出力フォーマットを使用する。@var{field_list} を省略
11876 した場合は、すべてのフィールドを表示する。後者の場合、列の順序は、
11877 以下に挙げているフィールドの説明の順序と同じである。
11878
11879 @option{--output} オプションは、@option{-i}, @option{-P}, @option{-T} のどのオプションとも
11880 一緒に使うことができない。
11881
11882 @var{field_list} は、@command{df} の出力に含まれることになる、コンマで区切った
11883 列のリストであり、このリストによって出力する列の順序を制御する
11884 ことができる。従って、各フィールドは任意の場所に置くことができるが、
11885 一度しか使うことができない。
11886
11887 @var{field_list} で使える有効なフィールドの名前は、次のものである。
11888 @table @samp
11889 @item source
11890 マウントポイントにマウントする対象。たいていはデバイス。
11891 @item fstype
11892 ファイルシステムのタイプ。
11893
11894 @item itotal
11895 inode の総数。
11896 @item iused
11897 使用 inode 数。
11898 @item iavail
11899 使用可能な inode 数。
11900 @item ipcent
11901 @var{iused} を @var{itotal} で割ったパーセント表示。
11902
11903 @item size
11904 ブロックの総数。
11905 @item used
11906 使用ブロック数。
11907 @item avail
11908 使用可能なブロック数。
11909 @item pcent
11910 @var{used} を @var{size} で割ったパーセント表示。
11911
11912 @item file
11913 ファイル名をコマンドラインで指定した場合、そのファイル名。
11914 (coreutils-8.22 の新機能)
11915 @item target
11916 マウントポイント。
11917 @end table
11918
11919 ブロックや inode の統計情報を表すフィールドは、他の場合と同じく、
11920 @option{-h} のような数値の大きさを調整するオプションの影響を受ける。
11921
11922 @var{field_list} の定義は、複数の @option{--output} オプションを使用して、
11923 分割しても構わない。
11924
11925 @example
11926 #!/bin/sh
11927 # TARGET (すなわち、マウントポイント) に続けて、そのブロックや 
11928 # inode の使用状態をパーセントで表示する。
11929 df --out=target --output=pcent,ipcent
11930
11931 # 表示できるすべてのフィールドを表示する。
11932 df --o
11933 @end example
11934
11935
11936 @item -P
11937 @itemx --portability
11938 @opindex -P
11939 @opindex --portability
11940 @cindex one-line output format
11941 @cindex POSIX output format
11942 @cindex portable output format
11943 @cindex output format, portable
11944 POSIX の出力形式を使用する。デフォルトの形式に似ているが、次の
11945 点で異なっている。
11946
11947 @enumerate
11948 @item
11949 各ファイルシステムついての情報が、常にぴったり 1 行で表示
11950 され、マウントされるデバイスが、それのみで 1 行を占めることが
11951 ない。そのため、マウントされるデバイスの名前の長さが 20 字を
11952 越えると (たとえば、ネットワーク・マウントの場合にそういう
11953 ことがありそうだ)、各項目の列がずれることになる。
11954
11955 @item
11956 ヘッダ行の項目名が、POSIX に準拠したものになる。
11957
11958 @item
11959 デフォルトのブロックサイズや出力の書式が、環境変数
11960 @env{DF_BLOCK_SIZE}, @env{BLOCK_SIZE}, @env{BLOCKSIZE} の影響を受けなく
11961 なる。とは言え、デフォルトのブロックサイズについては、
11962 @env{POSIXLY_CORRECT} の影響だけは、やはり受ける。すなわち、
11963 @env{POSIXLY_CORRECT} が設定されていれば、ブロックサイズは
11964 512 バイトであり、さもなければ 1024 バイトである。 @xref{Block size}.
11965 @end enumerate
11966
11967 @optSi
11968
11969 @item --sync
11970 @opindex --sync
11971 @cindex file system space, retrieving current data more slowly
11972 使用量に関するデータを取得する前に `sync' システムコールを実行
11973 する。システムによっては (特に SunOS では)、そうすることでより
11974 最近の結果が得られるが、一般的に言って、このオプションを使用すると、
11975 @command{df} の実行速度がかなり低下する。ファイルシステムをたくさんマウント
11976 している場合や、作業が頻繁に行われているファイルシステムでは、
11977 とりわけ遅くなる。
11978
11979 @item -t @var{fstype}
11980 @itemx --type=@var{fstype}
11981 @opindex -t
11982 @opindex --type
11983 @cindex file system types, limiting output to certain
11984 一覧表示するファイルシステムを @var{fstype} というタイプに限定する。
11985 @option{-t} オプションを複数回使うことによって、複数のタイプのファイル
11986 システムを指定することができる。デフォルトでは、いかなるタイプの
11987 ファイルシステムも除外しない。
11988
11989 @item -T
11990 @itemx --print-type
11991 @opindex -T
11992 @opindex --print-type
11993 @cindex file system types, printing
11994 各ファイルシステムのタイプを表示する。このとき表示されるタイプは、
11995 @option{-t} や @option{-x} オプションを使って、一覧表示に含めたり、一覧表示から
11996 除外したりできるタイプと同じものである。すなわち、表示されるタイプ
11997 は何であれ、システムによってサポートされているということだ。以下に、
11998 よく見受けられるタイプの名前をいくつか挙げておく (当然ながら、
11999 ここに挙げるものがすべてではない)。
12000
12001 @table @samp
12002
12003 @item nfs
12004 @cindex NFS file system type
12005 NFS ファイルシステム。すなわち、ネットワーク越しにほかの
12006 マシンからマウントしているファイルシステム。このタイプ名は、
12007 あらゆるシステムで共通して使われているようである。
12008
12009 @item ext2@r{, }ext3@r{, }ext4@r{, }xfs@r{, }btrfs@dots{}
12010 @cindex Linux file system types
12011 @cindex local file system types
12012 @opindex ext2 @r{file system type}
12013 @opindex ext3 @r{file system type}
12014 @opindex ext4 @r{file system type}
12015 @opindex xfs @r{file system type}
12016 @opindex btrfs @r{file system type}
12017 ローカルでマウントしているハードディスクのファイルシステム。
12018 (ローカルのマウントでは、システムが複数のタイプをサポートして
12019 いることもある。たとえば、Linux がそうだ。)
12020
12021 @item iso9660@r{, }cdfs
12022 @cindex CD-ROM file system type
12023 @cindex DVD file system type
12024 @cindex ISO9660 file system type
12025 @opindex iso9660 @r{file system type}
12026 @opindex cdfs @r{file system type}
12027 CD や DVD ドライブのファイルシステム。HP-UX は @samp{cdfs} を
12028 使用し、ほかのシステムのほとんどは @samp{iso9660} を使用している。
12029
12030 @item ntfs@r{,}fat
12031 @cindex NTFS file system
12032 @cindex DOS file system
12033 @cindex MS-DOS file system
12034 @cindex MS-Windows file system
12035 @opindex ntfs @r{file system file}
12036 @opindex fat @r{file system file}
12037 MS-Windows や MS-DOS で使用されるファイルシステム。
12038
12039 @end table
12040
12041 @item -x @var{fstype}
12042 @itemx --exclude-type=@var{fstype}
12043 @opindex -x
12044 @opindex --exclude-type
12045 一覧表示するファイルシステムを @var{fstype} というタイプ以外のものに
12046 限定する。@option{-x} オプションを複数回使うことによって、複数のタイプの
12047 ファイルシステムを除外することができる。デフォルトでは、いかなる
12048 タイプのファイルシステムも除外しない。
12049
12050 @item -v
12051 無視される。System V 版の @command{df} との互換のためにある。
12052
12053 @end table
12054
12055 @exitstatus 実行に失敗
12056 しても、何もメッセージが出力されないことがある。そこで、そうしたときに、
12057 ディレクトリ @var{dir} が @samp{ext3} や @samp{reiserfs} というタイプのファイルシステム
12058 上にあるかどうかを調べるには、@samp{df -t ext3 -t reiserfs @var{dir}} といった
12059 コマンドを実行して、終了ステータスを検査すればよい。
12060
12061 ファイルシステムのタイプを判断するには、ファイルシステムのリスト
12062 (@var{mtab}) が必要になる。従って、ファイルシステムのリストを読み込む
12063 ことができないときに、ファイル名引数とともに @option{-a}, @option{-l}, @option{-t}, @option{-x}
12064 といったオプションが一つ以上使われた場合、@command{df} は実行に失敗する。
12065
12066
12067 @node du invocation
12068 @section @command{du}: ファイルのディスク使用量を概算する
12069
12070 @pindex du
12071 @cindex file space usage
12072 @cindex disk usage for files
12073
12074 @command{du} は、指定したファイルのディスク使用量を報告する。引数がディレ
12075 クトリの場合は、サブディレクトリごとのディスク使用量も報告する。
12076 @sp 1
12077 書式:
12078
12079 @example
12080 du [@var{option}]@dots{} [@var{file}]@dots{}
12081 @end example
12082
12083 引数を指定しないと、@command{du} は、カレントディレクトリのディスク使用量を
12084 報告する。通常、ディスク使用量は 1024 バイトを 1 単位として表示するが、
12085 この動作は変更することができる (@pxref{Block size})。なお、小数点以下
12086 は、切り上げて整数にする。
12087
12088 2 個以上のハードリンクが同一のファイルを指している場合は、そのうちの
12089 1 個のみが計算の対象になる。引数 @var{file} の順番によって、どのリンクが計算の
12090 対象になるかが変わってくるので、引数の順番を変更すると、@command{du} が出力する
12091 数値が変化するかもしれない。
12092
12093 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
12094
12095 @table @samp
12096
12097 @optNull{du}
12098
12099 @item -a
12100 @itemx --all
12101 @opindex -a
12102 @opindex --all
12103 ディレクトリだけでなく、すべてのファイルについて使用量を表示する。
12104
12105 @item --apparent-size
12106 @opindex --apparent-size
12107 ディスクの使用量ではなく、見かけのサイズを表示する。ファイルの
12108 見かけのサイズとは、通常ファイルに対して @code{wc -c}、あるいは、もっと
12109 普通に @code{ls -l --block-size=1} や @code{stat --format=%s} を実行したとき
12110 に返されるバイト数である。たとえば、@samp{zoo} という単語を改行を付けず
12111 に書き込んだファイルなら、当然ながら、見かけのサイズは 3 になる。
12112 だが、そうした小さなファイルも、そのファイルが存在するファイル
12113 システムのタイプと設定次第で、0 から 16 KiB、あるいは、それ以上の
12114 ディスクスペースを占有するかもしれないのだ。もっとも、穴空きファ
12115 イル (sparse file) の場合は事情が別である。たとえば、
12116
12117 @example
12118 dd bs=1 seek=2GiB if=/dev/null of=big
12119 @end example
12120
12121 @noindent
12122 上記のコマンドで作成した穴空きファイルは、見かけのサイズこそ 2 GiB
12123 だが、最近のほとんどのシステムでは、実際に使用するディスクスペースは、
12124 ほとんど 0 である。
12125
12126 @item -B @var{size}
12127 @itemx --block-size=@var{size}
12128 @opindex -B
12129 @opindex --block-size
12130 @cindex file sizes
12131 @var{size} によって単位の大きさを変更してから、サイズを表示する (@pxref{Block size})。
12132 たとえば、@option{-BG} と指定すれば、1,073,741,824 バイト
12133 を 1 単位として、サイズを表示する。
12134
12135 @item -b
12136 @itemx --bytes
12137 @opindex -b
12138 @opindex --bytes
12139 @code{--apparent-size --block-size=1} と同じ。
12140
12141 @item -c
12142 @itemx --total
12143 @opindex -c
12144 @opindex --total
12145 @cindex grand total of disk space
12146 すべての引数を処理した後で、全引数からなる総計を表示する。
12147 このオプションを使用すれば、指定したファイルやディレクトリについて
12148 ディスク使用量の合計を知ることができる。
12149
12150 @item -D
12151 @itemx --dereference-args
12152 @opindex -D
12153 @opindex --dereference-args
12154 コマンドラインで引数に指定されたシンボリックリンクの参照を行う。
12155 コマンドライン引数以外のシンボリックリンクには影響がない。この
12156 オプションは、@file{/usr/tmp} のような、シンボリックリンクであることが
12157 多いディレクトリのディスク使用量を調べるときに、重宝である。
12158
12159 @item -d @var{depth}
12160 @itemx --max-depth=@var{depth}
12161 @opindex -d @var{depth}
12162 @opindex --max-depth=@var{depth}
12163 @cindex limiting output of @command{du}
12164 ディレクトリ階層の基点 (訳注: 要するに、コマンドラインで指定
12165 されたディレクトリ) から最大 @var{DEPTH} 段階下がったところまでにある
12166 各ディレクトリについて、ディスク使用量の合計を表示する (@option{--all}
12167 オプションが付いているときは、ファイルについても表示する)。基点
12168 自体は段階 0 なので、@code{du --max-depth=0} は @code{du -s} と同じことに
12169 なる。
12170
12171 @c --files0-from=FILE
12172 @filesZeroFromOption{du,, @ @option{--total} (@option{-c}) オプションを使用した結果}
12173
12174 @item -H
12175 @opindex -H
12176 @option{--dereference-args} (@option{-D}) と同じである。
12177
12178 @optHumanReadable
12179
12180 @item --inodes
12181 @opindex --inodes
12182 @cindex inode usage, dereferencing in @command{du}
12183 ブロックの使用状態ではなく、inode の使用状態をリストする。
12184 このオプションが役に立つのは、多くのファイルを収納しているために、
12185 ファイルシステムの inode スペースを大量に消費しているディレクトリ
12186 を探すときである (@command{df} の @option{--inodes} オプションも参照すること)。
12187 このオプションは、@option{-a}, @option{-c}, @option{-h}, @option{-l}, @option{-s},
12188 @option{-S}, @option{-t}, @option{-x}
12189 といったオプションと組み合わせて使ってもよい。しかし、ブロック
12190 サイズ関係の他のオプション、たとえば、@option{-b}, @option{-m}, @option{--apparent-size}
12191 などを渡しても、無視される。(coreutils-8.22 の新機能)
12192
12193 @item -k
12194 @opindex -k
12195 @cindex kibibytes for file sizes
12196 デフォルトのブロックサイズがどうなっていようと、1 ブロック 1024
12197 バイトでサイズを表示する (@pxref{Block size})。このオプションは @option{--block-size=1K}
12198 に等しい。
12199
12200 @item -L
12201 @itemx --dereference
12202 @opindex -L
12203 @opindex --dereference
12204 @cindex symbolic links, dereferencing in @command{du}
12205 シンボリックリンクの参照を行う (リンク自体のディスク使用量では
12206 なく、リンクが指しているファイルやディレクトリの使用量を表示する)。
12207
12208 @item -l
12209 @itemx --count-links
12210 @opindex -l
12211 @opindex --count-links
12212 @cindex hard links, counting in @command{du}
12213 すべてのファイルを計算に入れる。すなわち、(ハードリンクとして) 前に
12214 現れたことがあっても、計算に入れる。
12215
12216 @item -m
12217 @opindex -m
12218 @cindex mebibytes for file sizes
12219 デフォルトのブロックサイズを変更し、1 ブロック 1,048,576 バイトの
12220 ブロック数でサイズを表示する (@pxref{Block size})。
12221 このオプションは、@option{--block-size=1M} と同じである。
12222
12223 @item -P
12224 @itemx --no-dereference
12225 @opindex -P
12226 @opindex --no-dereference
12227 @cindex symbolic links, dereferencing in @command{du}
12228 @command{du} が出会った各シンボリックリンクについて、シンボリック自体の
12229 使用ディスクスペースを計算する。
12230
12231 @item -S
12232 @itemx --separate-dirs
12233 @opindex -S
12234 @opindex --separate-dirs
12235 通常、(@option{--summarize} オプションを使用しない場合の) @command{du} の出力に
12236 おいて、@var{d} というディレクトリ名の隣に表示されるサイズは、@var{d} 以下に
12237 あるすべてのエントリのサイズの合計に、@var{d} 自体のサイズを加えたもの
12238 である。それに対して、@option{--separate-dirs} オプションを指定すると、
12239 @var{d} というディレクトリ名に対して報告されるサイズは、いかなるサブ
12240 ディレクトリのサイズも含まないものになる。
12241
12242 @optSi
12243
12244 @item -s
12245 @itemx --summarize
12246 @opindex -s
12247 @opindex --summarize
12248 各引数についてその合計ディスク使用量のみを表示する (訳注: すなわち、
12249 引数がディレクトリの場合、そのサブディレクトリごとの
12250 情報まで表示しない)。
12251
12252 @item -t @var{size}
12253 @itemx --threshold=@var{size}
12254 @opindex -t
12255 @opindex --threshold
12256 指定された @var{size} を目安にして、表示する対象を取捨する。@var{size} は、
12257 通常モードではディスク使用量を指し (@pxref{Block size})、@option{--inodes}
12258 オプションと組み合わせた場合は inode 使用数を指す。(訳注: ディスク
12259 使用量の目安として使う場合、@var{size} の単位は、デフォルトではバイト
12260 である。もちろん、K, M, G などの接尾辞を付けることもできる。)
12261
12262 @var{size} が正の数ならば、@command{du} はサイズがそれ以上である対象のみを
12263 表示する。
12264
12265 @var{size} が負の数ならば、@command{du} はサイズがそれ以下である対象のみを
12266 表示する。
12267
12268 GNU の @command{find} を使えば、特定のサイズのファイルを見つけることが
12269 できる。それに対して、@command{du} の @option{--threshold} を使うと、ディレクトリ
12270 も指定サイズに基づいて篩い分けることができるのである。
12271
12272 @option{--threshold} オプションは、@option{--apparent-size} オプションと
12273 組み合わせることができるのに留意していただきたい。その場合は、
12274 見かけのサイズに基づいて表示対象を絞り込むことになる。
12275
12276 @option{--threshold} オプションは、@option{--inodes} オプションと組み合わせる
12277 こともできる。その場合は、inode 数に基づいて表示対象を絞り込む
12278 ことになる。
12279
12280 200 メガバイト以上のサイズを持つディレクトリを捜すには、
12281 @option{--threshold} オプションを次のように使えばよいだろう。
12282
12283 @example
12284 du --threshold=200MB
12285 @end example
12286
12287 見かけのサイズが 500 バイト以下のディレクトリやファイルを捜すには
12288 (@option{-a} を使っていることに注意)、@option{--threshold} を次のように使えば
12289 よい。
12290
12291 @example
12292 du -a -t -500 --apparent-size
12293 @end example
12294
12295 ルートファイルシステム上にあるディレクトリで、20000 以上の inode
12296 を使用しているものを、/ 以下のディレクトリ階層で捜すには、
12297 @option{--threshold} を次のように使えばよい。
12298
12299 @example
12300 du --inodes -x --threshold=20000 /
12301 @end example
12302
12303
12304 @item --time
12305 @opindex --time
12306 @cindex last modified dates, displaying in @command{du}
12307 ディレクトリやそのサブディレクトリに存在するファイルについて表示
12308 する際に、その最終更新日時 (modification time) を表示する。
12309 @sp 1
12310 (訳注: 一つ留意していただきたいことがある。ディレクトリのタイム
12311 スタンプについては、そのディレクトリ以下にあるファイルのうち
12312 (そのディレクトリ直下のファイルとはかぎらない)、最終更新日時が
12313 もっとも新しいファイルのタイムスタンプと同一のものが表示される。
12314 すなわち、ディレクトリのタイムスタンプは、@samp{ls -l} で表示される
12315 ものとは違うことがあるわけだ。このオプションや、そのバリエーション
12316 である次の二つのオプションは、あるディレクトリ以下を最後に使用
12317 したのはいつかを知るのに便利である。)
12318
12319 @item --time=ctime
12320 @itemx --time=status
12321 @itemx --time=use
12322 @opindex --time
12323 @opindex ctime@r{, show the most recent}
12324 @opindex status time@r{, show the most recent}
12325 @opindex use time@r{, show the most recent}
12326 ディレクトリ以下にあるファイルについて表示する際に、最終更新日時
12327 ではなく、最終ステータス変更日時 (inode 中の @samp{ctime}) を表示する。
12328 @sp 1
12329 (訳注: 原文でもこの三つのオプションを等価なものとして並べているが、
12330 訳者としては、@option{--time=use} と等価なのは、@option{--time=ctime} ではなく、
12331 @option{--time=atime} ではないかと思う。ご自分で確かめていただきたい。)
12332
12333 @item --time=atime
12334 @itemx --time=access
12335 @opindex --time
12336 @opindex atime@r{, show the most recent}
12337 @opindex access time@r{, show the most recent}
12338 ディレクトリ以下にあるファイルについて表示する際に、最終更新日時
12339 ではなく、最終アクセス日時 (inode 中の @samp{atime}) を表示する。
12340
12341 @item --time-style=@var{style}
12342 @opindex --time-style
12343 @cindex time style
12344 タイムスタンプを @var{style} 形式で表示する。このオプションは、@option{--time}
12345 オプションと併せて指定したときにのみ効果がある。@var{style} は以下の一つ
12346 でなければならない。
12347
12348 @table @samp
12349 @item +@var{format}
12350 @vindex LC_TIME
12351 @var{format} を使って、タイムスタンプを表示する。その場合、@var{format}
12352 は、@command{date} コマンドの書式引数と同じように解釈される (@pxref{date invocation})。
12353 たとえば、@option{--time-style="+%Y-%m-%d %H:%M:%S"} と指定すると、
12354 @command{du} の表示するタイムスタンプは、
12355 @samp{2002-03-30 23:45:56} のようになる。@command{date} の場合と同様、
12356 @var{format} の解釈は、@env{LC_TIME} ロケール・カテゴリの影響を受ける。
12357
12358 @item full-iso
12359 タイムスタンプを省略なしで表示する。すなわち、ISO 8601 の
12360 日付、時刻、タイムゾーンという書式を nanosecond (10 億分の 1 秒)
12361 の精度で使用するわけだ。一例を挙げると、@samp{2002-03-30 23:45:56.477817180 -0700}
12362 といった表示になる。この形式は、
12363 @samp{+%Y-%m-%d %H:%M:%S.%N %z} と同じである。
12364
12365 @item long-iso
12366 ISO 8601 の書式で日付と時刻を分の単位まで表示する。たとえば、
12367 @samp{2002-03-30 23:45}。このタイムスタンプは、@samp{full-iso} タイム
12368 スタンプより短く、日常作業にはたいてい十分である。この形式は
12369 @samp{+%Y-%m-%d %H:%M} と同じである。
12370
12371 @item iso
12372 タイムスタンプに ISO 8601 書式の日付を表示する。たとえば、
12373 @samp{2002-03-30} といった具合である。この形式は、@samp{+%Y-%m-%d} と
12374 同じである。
12375 @end table
12376
12377 @vindex TIME_STYLE
12378 @option{--time-style} オプションのデフォルト値は、環境変数 @env{TIME_STYLE} を
12379 使って指定することができる。@env{TIME_STYLE} が設定されていない場合、
12380 デフォルトの形式は @samp{long-iso} である。@command{ls} と共通の @env{TIME_STYLE} を
12381 使えるようにするため、@samp{+} で始まる @env{TIME_STYLE} の値が、改行を
12382 含んでいる場合は、改行以後の文字は無視されることになる。また、
12383 @env{TIME_STYLE} の値が @samp{posix-} で始まる場合、@samp{posix-} は無視される。
12384 さらに、@env{TIME_STYLE} の値が @samp{locale} の場合、@env{TIME_STYLE} は無視
12385 される。
12386
12387 @item -X @var{file}
12388 @itemx --exclude-from=@var{file}
12389 @opindex -X @var{file}
12390 @opindex --exclude-from=@var{file}
12391 @cindex excluding files from @command{du}
12392 @option{--exclude} に似ているが、除外するパターンを @var{file} から 1 行につき
12393 1 パターン読み込む点が違う。@var{file} が @samp{-} なら、パターンを標準入力
12394 から読み込む。
12395
12396 @item --exclude=@var{pattern}
12397 @opindex --exclude=@var{pattern}
12398 @cindex excluding files from @command{du}
12399 再帰的な処理を行っているとき、@var{pattern} にマッチするサブディレクトリ
12400 やファイルをスキップする。たとえば、@code{du --exclude='*.o'} と指定
12401 すると、名前が @samp{.o} で終わるファイルを除外することになる。
12402
12403 @item -x
12404 @itemx --one-file-system
12405 @opindex -x
12406 @opindex --one-file-system
12407 @cindex one file system, restricting @command{du} to
12408 処理される引数が存在するファイルシステムとは別のファイルシステムに
12409 あるディレクトリをスキップする。
12410
12411 @end table
12412
12413 @cindex NFS mounts from BSD to HP-UX
12414 BSD システムでは、HP-UX システムから NFS マウントしているファイルに
12415 ついて、@command{du} は正確な値の半分のサイズを報告する。逆に、HP-UX システム
12416 では、BSD システムから NFS マウントしているファイルについて、@command{du} は
12417 正確な値の 2 倍のサイズを報告する。これは HP-UX にある欠陥のせいであり、
12418 HP-UX の @command{du} プログラムも、そのとばっちりを受けているのである。
12419
12420 @exitstatus
12421
12422
12423 @node stat invocation
12424 @section @command{stat}: ファイルやファイルシステムの状態を報告する
12425
12426 @pindex stat
12427 @cindex file status
12428 @cindex file system status
12429
12430 @command{stat} は指定されたファイルに関する情報を表示する。
12431 @sp 1
12432 書式:
12433
12434 @example
12435 stat [@var{option}]@dots{} [@var{file}]@dots{}
12436 @end example
12437
12438 オプションなしで実行すると、@command{stat} は指定されたファイルについて
12439 すべての情報を報告する。また、@command{stat} を使って、指定されたファイルが
12440 存在しているファイルシステムの情報を報告させることもできる。ファイルが
12441 リンクの場合は、リンクが指しているファイルについて情報を提供させること
12442 も可能だ。
12443
12444 @mayConflictWithShellBuiltIn{stat}
12445
12446 @table @samp
12447
12448 @item -L
12449 @itemx --dereference
12450 @opindex -L
12451 @opindex --dereference
12452 @cindex symbolic links, dereferencing in @command{stat}
12453 @command{stat} がシンボリックリンクを処理する方法を変更する。この
12454 オプションを付けると、@command{stat} は、引数中の各シンボリックリンク
12455 が参照しているファイルを操作の対象にする。このオプションがないと、
12456 @command{stat} が対象にするのは、引数のシンボリックリンクそのものになる。
12457
12458 @item -f
12459 @itemx --file-system
12460 @opindex -f
12461 @opindex --file-system
12462 @cindex file systems
12463 指定されたファイルそのものについての情報ではなく、そのファイルが
12464 存在しているファイルシステムについての情報を報告する。このオプション
12465 を指定すると、自動的に @option{-L} オプションも指定される。
12466
12467 @item -c
12468 @itemx --format=@var{format}
12469 @opindex -c
12470 @opindex --format=@var{format}
12471 @cindex output format
12472 デフォルトの書式の代わりに、@var{format} を使用する。@var{format} の末尾には
12473 自動的に改行が付けられるので、下記のようなコマンドを 2 個以上の
12474 @var{file} オペランドに対して実行すると、各オペランドあたり 1 行の
12475 出力を生じることになる。
12476 @example
12477 $ stat --format=%d:%i / /usr
12478 2050:2
12479 2057:2
12480 @end example
12481
12482 @item --printf=@var{format}
12483 @opindex --printf=@var{format}
12484 @cindex output format
12485 デフォルトの書式の代わりに、@var{format} を使用する。@option{--format} に似て
12486 いるが、バックスラッシュ・エスケープを解釈して変換する。また、
12487 行末に自動的に改行を付けることもしない。そこで、改行がしたければ、
12488 @var{format} の中で @samp{\n} を指定する必要がある。@option{--printf} を使って @file{/}
12489 と @file{/usr} のデバイス番号と inode 番号を表示するには、こんなふうに
12490 する。
12491 @example
12492 $ stat --printf='%d:%i\n' / /usr
12493 2050:2
12494 2057:2
12495 @end example
12496
12497 @item -t
12498 @itemx --terse
12499 @opindex -t
12500 @opindex --terse
12501 @cindex terse output
12502 情報を簡潔な形式で表示する。他のプログラムで解析するときに都合がよい。
12503
12504 @end table
12505
12506 @option{--format} や "@option{--printf} の @var{format} 中で、ファイルに対して使用できる
12507 書式指定子には以下のものがある。
12508
12509 @itemize @bullet
12510 @item %a - 8 進数で表現したアクセス権
12511 @item %A - 人間にわかりやすい形式で表現したアクセス権
12512 @item %b - 割り当てられているブロック数 (@samp{%B} を参照)
12513 @item %B - @samp{%b} の報告で使われる 1 ブロックのバイト数
12514 @item %C - ファイルの SELinux セキュリティ・コンテキスト (取得できる場合)
12515 @item %d - 10 進数で表現したデバイス番号
12516 @item %D - 16 進数で表現したデバイス番号
12517 @item %f - 16 進数で表現した Raw モード
12518 @item %F - ファイルの種類
12519 @item %g - 所有グループの ID 番号
12520 @item %G - 所有グループ名
12521 @item %h - ハードリンク数
12522 @item %i - Inode 番号
12523 @item %m - マウントポイント (下記の説明を参照)
12524 @item %n - ファイル名
12525 @item %N - 引用符で囲んだファイル名。シンボリックリンクなら、参照先も表示
12526 @item %o - I/O 転送サイズの最適値の提案
12527 @item %s - ファイル全体の大きさ。サイズはバイト数
12528 @item %t - 16 進数で表現したメジャー・デバイス番号 (下記参照)
12529 @item %T - 16 進数で表現したマイナー・デバイス番号 (下記参照)
12530 @item %u - 所有者のユーザ ID 番号
12531 @item %U - 所有者のユーザ名
12532 @item %w - ファイルの作成日時 (the birth time)。不明の場合は @samp{-} を表示
12533 @item %W - Unix 紀元からの秒数で表したファイルの作成日時、または @samp{0}
12534 @item %x - 最終アクセス日時 (atime)
12535 @item %X - Unix 紀元からの秒数で表した最終アクセス日時
12536 @item %y - 最終更新日時 (mtime)
12537 @item %Y - Unix 紀元からの秒数で表した最終更新日時
12538 @item %z - 最終ステータス変更日時 (ctime)
12539 @item %Z - Unix 紀元からの秒数で表した最終ステータス変更日時
12540 @end itemize
12541
12542 @samp{%t} や @samp{%T} という書式指定子は、stat(2) 構造体の st_rdev メンバ
12543 に対応するものであり、従って、キャラクタ・スペシャルファイルや
12544 ブロック・スペシャルファイルに対してしか動作が定義されていない。
12545 システムやファイルタイプによっては、st_rdev が他のものを表現する
12546 ために使われていることもありえる。
12547
12548 @samp{%W}, @samp{%X}, @samp{%Y}, @samp{%Z} では、ピリオドに続けて精度を書くことで、
12549 小数点以下何桁まで表示するかを指定することができる。たとえば、@samp{%.3X}
12550 と指定すると、最終アクセス日時がミリ秒の精度で出力される。ピリオド
12551 だけ指定して、精度を省略すると、@command{stat} は 9 桁を使用する。従って、
12552 @samp{%.X} は @samp{%.9X} と同じことになるわけだ。なお、余分な精度を捨てる際、
12553 タイムスタンプは負の無限大方向に切り下げられる (訳注: 日常の言葉で
12554 言うと、タイムスタンプのような正の数値の場合、指定された桁数より下の
12555 部分は切り捨てられるということ。以下の例を参照)。
12556
12557 @example
12558 0 で埋める:
12559   $ stat -c '[%015Y]' /usr
12560   [000001288929712]
12561 スペースで位置を揃える:
12562   $ stat -c '[%15Y]' /usr
12563   [     1288929712]
12564   $ stat -c '[%-15Y]' /usr
12565   [1288929712     ]
12566 精度指定:
12567   $ stat -c '[%.3Y]' /usr
12568   [1288929712.114]
12569   $ stat -c '[%.Y]' /usr
12570   [1288929712.114951834]
12571 @end example
12572
12573 @samp{%m} によって表示されるマウントポイントは、@command{df} によるマウント
12574 ポイントの出力とほぼ同じである。ただし、以下の点で異なっている。
12575 @itemize @bullet
12576 @item
12577 stat はデフォルトでは、シムリンクの参照を行わない (そのためには、
12578 @option{-L} を指定する必要がある)。
12579 @item
12580 引数としてデバイスノードが指定された場合、stat はファイルシステムの
12581 リストを調べて、そのノードを見つけたりはせず、デバイスノードを直接
12582 動作の対象にする (訳注: すなわち、そのデバイス上に存在するファイル
12583 システムのマウントポイントではなく、デバイスノードそのもののマウント
12584 ポイントを表示する)。
12585 @item
12586 @cindex bind mount
12587 bind マウントされているファイルについては、stat はそのファイルが
12588 載っているデバイスの最初のマウントポイントではなく、bind マウントで
12589 指定された別名 (訳注: 原文は alias。@samp{mount --bind olddir newdir}
12590 における newdir のことか) の方を出力する。出力に変化がなくなる
12591 まで、再帰的に stat を呼び出せば、現在ベースになっているマウント
12592 ポイントを知ることができる。
12593 @sp 1
12594 (訳注: 訳者には意味不明。「現在ベースになっているマウントポイント
12595 (the current base mount point)」が、上記訳注の newdir のことなら、
12596 stat を再帰的に呼び出すまでもない。@samp{stat -c "%m" newdir/@var{FILE}} は、
12597 newdir を表示する。また the current base mount point が「根底にある
12598 (すなわち、デバイスを最初にマウントした) マウントポイント」のこと
12599 なら、stat を再帰的に呼び出しても、それを突き止めることはできない。
12600 ひょっとすると、書式指定子に @samp{%m} が追加された coreutils-8.6 から
12601 coreutils-8.20 あたりまでの stat を linux-2.6 時代の古いカーネルと
12602 組み合わせて使ったときの動作を言っているのかもしれない。その場合は、
12603 @samp{stat -c "%m" newdir/@var{FILE}} は上記の olddir を出力するようだ。
12604 従って、そうした組み合わせでは、stat を再帰的に実行することで、
12605 最初にデバイスをマウントしたときのマウントポイントを知ることが
12606 できる。)
12607 @end itemize
12608
12609 ファイルシステムの情報をリストする際には (すなわち、@option{--file-system}
12610 (@option{-f}) 使用時には)、書式指定子の別の一群を使わなければならない。
12611
12612 @itemize @bullet
12613 @item %a - スーパーユーザ以外にも利用できる未使用ブロック数
12614 @item %b - ファイルシステムの総データブロック数。
12615 @item %c - ファイルシステムの総 inode 数
12616 @item %d - ファイルシステムの未使用 inode 数
12617 @item %f - ファイルシステムの未使用ブロック数
12618 @item %i - 16 進数で表現したファイルシステム ID
12619 @item %l - ファイル名の最大長
12620 @item %n - ファイル名
12621 @item %s - ブロックサイズ (高速転送用)
12622 @item %S - 基本ブロックサイズ (ブロック計算用)
12623 @item %t - 16 進数で表現したファイルシステムのタイプ
12624 @item %T - 人間にわかりやすい形式で表現したファイルシステムのタイプ
12625 @end itemize
12626
12627 @vindex TZ
12628 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
12629 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
12630 いない場合は、システムのデフォルトのルールに従って表示される。
12631 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
12632 The GNU C Library Reference Manual}.
12633
12634 @exitstatus
12635
12636
12637 @node sync invocation
12638 @section @command{sync}: ディスク上のデータをメモリと同期する
12639
12640 @pindex sync
12641 @cindex synchronize disk and memory
12642
12643 @cindex superblock, writing
12644 @cindex inodes, written buffered
12645 @command{sync} は、メモリにバッファされているあらゆるデータをディスクに
12646 書き出す。そうした書き出しには、スーパーブロックの変更、 inode の
12647 変更、遅延読み書きを含むことができる (が、それだけに止まらない)。
12648 この機能はカーネルによって実装されていなければならない。@command{sync}
12649 プログラムは、@code{sync} システムコールを実行する以外、何もしないのである。
12650
12651 @cindex crashes and corruption
12652 カーネルは、(比較的遅い) ディスクの読み書きをできるだけしないで
12653 済ますために、メモリにデータを保持している。このことによって、動作速度
12654 が向上するが、コンピュータがクラッシュした場合、データが失われたり、
12655 ファイルシステムが壊れたりという結果が生じかねない。@command{sync} コマンドを
12656 使えば、メモリ上にあるすべてが間違いなくディスクに書き出されることに
12657 なる。
12658
12659 @option{--help} や @option{--version} を単独で使用することはできるが、それ以外の
12660 いかなる引数も無視される (@pxref{Common options})。
12661
12662 @exitstatus
12663
12664
12665 @node truncate invocation
12666 @section @command{truncate}: ファイルサイズの短縮・伸長を行う
12667
12668 @pindex truncate
12669 @cindex truncating, file sizes
12670
12671 @command{truncate} は、各 @var{file} のサイズを指定したサイズにまで短縮したり、引き
12672 伸ばしたりする。
12673 @sp 1
12674 書式:
12675
12676 @example
12677 truncate @var{option}@dots{} @var{file}@dots{}
12678 @end example
12679
12680 @cindex files, creating
12681 @var{file} が存在していないときは、作成する。
12682
12683 @cindex sparse files, creating
12684 @cindex holes, creating files with
12685 @var{file} が指定したサイズより大きい場合は、データのサイズを越える部分
12686 は失われる。@var{file} が指定したサイズより小さい場合は、ファイルは引き伸ば
12687 され、引き伸ばされた部分は、ゼロバイト (ASCII NUL) の連続に見えるよう
12688 になる (引き伸ばされた部分は、穴空きファイル (sparse file) の穴になる)。
12689
12690 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
12691
12692 @table @samp
12693
12694 @item -c
12695 @itemx --no-create
12696 @opindex -c
12697 @opindex --no-create
12698 ファイルが存在しない場合は、作成しない。
12699
12700 @item -o
12701 @itemx --io-blocks
12702 @opindex -o
12703 @opindex --io-blocks
12704 @var{size} をバイト数ではなく、@var{file} を構成する I/O ブロック数と見なす。
12705
12706 @item -r @var{rfile}
12707 @itemx --reference=@var{rfile}
12708 @opindex -r
12709 @opindex --reference
12710 @var{rfile} のサイズを基準に、各 @var{file} のサイズを揃える。
12711
12712 @item -s @var{size}
12713 @itemx --size=@var{size}
12714 @opindex -s
12715 @opindex --size
12716 各 @var{file} のサイズを @var{size} にする。@option{--io-blocks} が指定されていない
12717 場合、@var{size} はバイト数である。@multiplierSuffixesNoBlocks{size}
12718
12719 @var{size} の前に以下の記号の一つを置くと、現在のサイズを元にして、各 @var{file} のサイズを
12720 調節することができる。
12721 @example
12722 @samp{+}  => @var{size} だけ増やす
12723 @samp{-}  => @var{size} だけ減らす
12724 @samp{<}  => @var{size} 以下に
12725 @samp{>}  => @var{size} 以上に
12726 @samp{/}  => @var{size} の倍数に切り下げる
12727 @samp{%}  => @var{size} の倍数に切り上げる
12728 @end example
12729
12730 @end table
12731
12732 @exitstatus
12733
12734
12735 @node Printing text
12736 @chapter テキストの表示
12737
12738 @cindex printing text, commands for
12739 @cindex commands for printing text
12740
12741 この章では、テキスト文字列を表示するコマンドについて説明する。
12742
12743 @menu
12744 * echo invocation::          テキストを 1 行表示する。
12745 * printf invocation::        データを整形して表示する。
12746 * yes invocation::           中断されるまで文字列を表示する。
12747 @end menu
12748
12749
12750 @node echo invocation
12751 @section @command{echo}: テキストを 1 行表示する
12752
12753 @pindex echo
12754 @cindex displaying text
12755 @cindex printing text
12756 @cindex text, displaying
12757 @cindex arbitrary text, displaying
12758
12759 @command{echo} は、指定された @var{string} を標準出力に書き出す。その際、各 @var{string}
12760 の間に 1 個のスペースを置き、行末に改行を付け加える。
12761 @sp 1
12762 書式:
12763
12764 @example
12765 echo [@var{option}]@dots{} [@var{string}]@dots{}
12766 @end example
12767
12768 @mayConflictWithShellBuiltIn{echo}
12769
12770 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
12771 オプションはオペランドの前に置かなければならない。また、
12772 通常は特別な引数として使われる @samp{--} は、特別な意味を持たず、他の
12773 いかなる @var{string} とも同じように扱われる。
12774
12775 @table @samp
12776 @item -n
12777 @opindex -n
12778 出力の末尾に改行を付けない。
12779
12780 @item -e
12781 @opindex -e
12782 @cindex backslash escapes
12783 各 "@var{string} の中に以下に挙げるバックスラッシュでエスケープした
12784 文字があると、それを解釈して変換する。
12785
12786 @table @samp
12787 @item \a
12788 警告 (ベル)
12789 @item \b
12790 バックスペース
12791 @item \c
12792 この位置より後を出力しない
12793 @item \e
12794 エスケープ
12795 @item \f
12796 フォームフィード (form feed)
12797 @item \n
12798 改行 (newline)
12799 @item \r
12800 復帰 (carriage return)
12801 @item \t
12802 水平タブ
12803 @item \v
12804 垂直タブ
12805 @item \\
12806 バックスラッシュ
12807 @item \0@var{nnn}
12808 8 進数 @var{nnn} (0 桁から 3 桁までの 8 進数) で表される 8 ビットの
12809 値に対応する文字。@var{nnn} が 9 ビットの値だと、9 ビット目 (最上位
12810 ビット) は無視される。
12811 @item \@var{nnn}
12812 8 進数 @var{nnn} (1 桁から 3 桁までの 8 進数) で表される 8 ビットの
12813 値に対応する文字。@var{nnn} が 9 ビットの値だと、9 ビット目 (最上位
12814 ビット) は無視される。
12815 @item \x@var{hh}
12816 16 進数 @var{hh} (1 または 2 桁の 16 進数) で表される 8 ビットの
12817 値に対応する文字。
12818 @end table
12819
12820 @item -E
12821 @opindex -E
12822 @cindex backslash escapes
12823 各 @var{string} の中にあるバックスラッシュ・エスケープの解釈をしない。
12824 これがデフォルトである。@option{-e} と @option{-E} の両方が指定されている場合は、
12825 後で指定した方が効果を持つ。
12826
12827 @end table
12828
12829 @vindex POSIXLY_CORRECT
12830 環境変数 @env{POSIXLY_CORRECT} が指定されている場合に、@command{echo} の最初の
12831 引数が (単独の) @option{-n} 以外だと、@command{echo} はそうした引数をオプション
12832 として扱わずに、形がオプションに似た引数として出力する。たとえば、
12833 @code{echo -ne hello} は、単なる @samp{hello} ではなく、@samp{-ne hello} を出力する。
12834
12835 POSIX では、いかなるオプションのサポートも要求していない。また、
12836 POSIX では、@var{string} がバックスラッシュを含む場合や、最初の引数が @option{-n}
12837 の場合に、@command{echo} がどう振る舞うかは、実装側で決めることになっている。
12838 従って、他のシステムで使うことも考慮したプログラムで、行末の改行を
12839 省略したり、制御文字やバックスラッシュ・エスケープを出力したりする
12840 必要があるのならば、@command{echo} の代わりに @command{printf} コマンドを使用することを
12841 考えてもよい。@xref{printf invocation}.
12842
12843 @exitstatus
12844
12845
12846 @node printf invocation
12847 @section @command{printf}: データを整形して表示する
12848
12849 @pindex printf
12850 @command{printf} は、テキストを整形して表示する。
12851 @sp 1
12852 書式:
12853
12854 @example
12855 printf @var{format} [@var{argument}]@dots{}
12856 @end example
12857
12858 @command{printf} は、文字列 @var{format} を表示する。その際、C の @samp{printf} 関数と
12859 ほとんど同じやり方で、@samp{%} 書式指定子と @samp{\} エスケープシーケンスを解釈
12860 して、数値や文字列の引数 (上記書式の @var{argument}) を整形する。詳細に
12861 ついては、次の項目を参照すること。
12862 @xref{Output Conversion Syntax,, @command{printf} format directives, libc,
12863 The GNU C Library Reference Manual}.  C の関数との相違点については、
12864 以下の箇条書きのとおりである。
12865
12866 @mayConflictWithShellBuiltIn{printf}
12867
12868 @itemize @bullet
12869
12870 @item
12871 @var{format} 引数は、指定された @var{argument} のすべてを変換するのに必要な
12872 だけ、繰り返し使用される。たとえば、@samp{printf %s a b} という
12873 コマンドは、@samp{ab} を出力する。
12874
12875 @item
12876 @var{argument} の指定がない場合は、文脈が文字列と数値のどちらを期待して
12877 いるかによって、空文字列、または 0 を指定したものと見なされる。
12878 たとえば、@samp{printf %sx%d} というコマンドは、@samp{x0} を表示する。
12879
12880 @item
12881 @kindex \c
12882 @samp{\c} というエスケープシーケンスが追加されている。@samp{\c} より後の部分
12883 を、@command{printf} は出力しない。たとえば、@samp{printf 'A%sC\cD%sF' B E} と
12884 いうコマンドは、@samp{ABC} を表示する。
12885
12886 @item
12887 16 進数エスケープシーケンス @samp{\x@var{hh}} は、最大でも 2 桁である。
12888 桁数に制限のない C と、その点が違う。たとえば、@samp{printf '\x07e'}
12889 というコマンドは、2 バイトを表示するが (訳注: \x07 (ベル) と e)、
12890 C の @samp{printf ("\x07e")} という文の方は、1 バイトしか表示しない。
12891
12892 @item
12893 @kindex %b
12894 @command{printf} コマンドの書式指定子には、@samp{%b} が追加されている。@samp{%b}
12895 は、対応する引数文字列中の @samp{\} エスケープシーケンスを、それが
12896 @var{format} 文字列中にあるときと同じように解釈・変換して、引数文字列
12897 を表示する。ただし、引数中の 8 進数エスケープシーケンスは @samp{\0@var{ooo}}
12898 の形を取る。@var{ooo} は 0 から 3 桁の 8 進数である。@samp{\@var{ooo}} が 9 ビット
12899 の値ならば、9 ビット目 (訳注: すなわち最上位ビット) は無視される。
12900 @samp{%b} に精度も指定すると、変換した文字列の先頭から何バイトを表示
12901 するかが、それによって決まる。
12902
12903 @item
12904 数値の引数は、単独の C の定数でなければならない。前に @samp{+} や @samp{-}
12905 が付いていてもよい。たとえば、@samp{printf %.4d -3} は、@samp{-0003} を
12906 出力する。
12907
12908 @item
12909 @vindex POSIXLY_CORRECT
12910 数値が期待される引数の先頭文字が @samp{"} や @samp{'} である場合、その引数の
12911 値は、引用符の直後に来る文字の数値である (訳注: すなわち、一般に
12912 は、その文字の ASCII コードの 10 進数表記が出力される)。その後に
12913 さらに文字が続く場合は、環境変数 @env{POSIXLY_CORRECT} が設定されて
12914 いれば、ただ単に無視され、設定されていなければ、警告が出される。
12915 一例を挙げておくと、@samp{printf "%d" "'a"} は、ASCII 文字セットを使用
12916 しているホストでは、@samp{97} を出力する。ASCII における @samp{a} の数値は、
12917 10 進数表記で 97 だからだ。
12918
12919 @end itemize
12920
12921 @vindex LC_NUMERIC
12922 引数が浮動小数点数の場合は、小数部の前にはピリオドを置かなければ
12923 ならない。ただし、表示は、現在のロケールの @env{LC_NUMERIC} カテゴリの
12924 ルールに合わせたものになる。たとえば、小数点を表す文字がコンマの
12925 ロケールでは、@samp{printf %g 3.14} というコマンドは、@samp{3,14} を出力するが、
12926 @samp{printf %g 3,14} というコマンドはエラーになる。 @xref{Floating point}.
12927
12928 @kindex \@var{ooo}
12929 @kindex \x@var{hh}
12930 @command{printf} は、@var{format} 中の @samp{\@var{ooo}} を (@var{ooo} が 1 から 3
12931 桁の 8 進数なら
12932 ば) 表示すべき 1 バイトを指定している 8 進数と見なす。また、@samp{\x@var{hh}}
12933 を (@var{hh} が 1 から 2 桁の 16 進数ならば) 表示すべき 1 文字を指定している
12934 16 進数だと解釈する。ただし、注意していただきたいが、@samp{\@var{ooo}} が 255 より
12935 大きな 10 進数に相当するときは、@command{printf} は 9 ビット目を無視する。
12936 従って、たとえば、@samp{printf '\400'} は @samp{printf '\0'} と同じである。
12937
12938 @kindex \uhhhh
12939 @kindex \Uhhhhhhhh
12940 @cindex Unicode
12941 @cindex ISO/IEC 10646
12942 @vindex LC_CTYPE
12943 @command{printf} は、ISO C 99 で導入された 2 種類のキャラクタ・シンタクス
12944 (訳注: 要するに、コードによる文字の指定法) を解釈することができる。
12945 一つは、Unicode (ISO/IEC 10646) の文字を 16 ビットで表すための @samp{\u}
12946 であり、4 桁の 16 進数 @var{hhhh} で指定する。もう一つは、Unicode の文字を
12947 32 ビットで表すための @samp{\U} で、こちらは 8 桁の 16 進数 @var{hhhhhhhh} で指定
12948 する。@command{printf} は Unicode の文字を出力するに当たって、@env{LC_CTYPE} の
12949 ロケールに従う。なお、U+0000@dots{}U+009F と U+D800@dots{}U+DFFF の範囲にある
12950 Unicode の文字は、U+0024 ($), U+0040 (@@), U+0060 (`) を除いて、
12951 このシンタクスでは指定することができない。
12952
12953 @samp{\u} や @samp{\U} を処理するには、フル装備の @code{iconv} の能力が必要である。
12954 glibc 2.2 以降を採用しているシステムでは、そうした能力は使えるように
12955 なっている。coreutils パッケージをインストールする前に、@code{libiconv} を
12956 インストールしている場合も同様だ。どちらにも当てはまらない場合は、@samp{\u}
12957 や @samp{\U} は、変換されずに、そのままの形で表示される。
12958
12959 オプションとして指定できるのは、単独の @option{--help} か @option{--version} だけ
12960 である。@xref{Common options}.  オプションはオペランドの前に置かなけれ
12961 ばならない。
12962
12963 Unicode のキャラクタ・シンタクスを使えば、ロケールに影響されない方法
12964 で文字列を書くことができて、便利である。たとえば、次のようにすれば、
12965
12966 @example
12967 $ env printf '\u20AC 14.95'
12968 @end example
12969
12970 @noindent
12971 ユーロ通貨記号を含む文字列が、ユーロ記号をサポートするすべてのロケール
12972 (ISO-8859-15, UTF-8 など) で正しく出力されることになる。同様に、
12973
12974 @example
12975 $ env printf '\u4e2d\u6587'
12976 @end example
12977
12978 @noindent
12979 とすれば、漢字の文字列が、すべての中国語のロケール (GB2312, BIG5,
12980 UTF-8 など) で正しく表示される。
12981
12982 上記の例では、@command{printf} コマンドを @command{env} 経由で呼び出していることに
12983 注目していただきたい。これは、シェルのエイリアスや組み込み関数ではなく、
12984 シェルのサーチパスを使って見つけたプログラムを、確実に実行するためである。
12985
12986 文字列がもっと長い場合でも、各文字に対応する 16 進数コードを一つ
12987 一つ捜す必要はない。 ASCII 文字に \u エスケープ・シーケンスを混ぜる
12988 書き方は、JAVA のソースファイルで使用されるエンコーディング (JAVA
12989 source file encoding) としても知られているが、GNU の recode コマンド
12990 3.5c 以降を使用すれば、任意の文字列をこのエンコーディングに変換する
12991 ことができるのだ。以下に示すのは、1 個の短文を、ロケールに影響されずに
12992 その短文を出力するシェルスクリプトに変換する方法である。
12993
12994 @smallexample
12995 $ LC_CTYPE=zh_TW.big5 /usr/local/bin/printf \
12996     '\u4e2d\u6587\n' > sample.txt
12997   #
12998   # 訳注: もちろん、漢字入力の可能な LANG=zh_TW.big5 (あるいは、
12999   #       LANG=ja_JP.eucJP) の環境なら、コマンドラインで直接「中文」
13000   #       と打ち込んでもよい。その方が、「各文字に対応する 16 進数
13001   #       コードを一つ一つ捜す必要はない」という上記の説明に、
13002   #       例としてはふさわしいだろう。LANG=ja_JP.eucJP の場合、
13003   #       下のコマンドは、当然ながら、recode eucJP..JAVA になる。
13004   #
13005 $ recode BIG5..JAVA < sample.txt \
13006     | sed -e "s|^|/usr/local/bin/printf '|" -e "s|$|\\\\n'|" \
13007     > sample.sh
13008 @end smallexample
13009
13010 @exitstatus
13011
13012
13013 @node yes invocation
13014 @section @command{yes}: 中断されるまで文字列を表示する
13015
13016 @pindex yes
13017 @cindex repeated output of a string
13018
13019 @command{yes} は、コマンドラインで指定された引数を、空白で区切り、末尾に
13020 改行を付けて、意図的に中断されるまで (訳注: たとえば @kbd{CTRL-C} で
13021 中断されるまで) 延々と表示する。引数が指定されていない場合は、@samp{y}
13022 の後ろに改行を付けて、中断されるまで延々と表示する。
13023
13024 書き込みエラーがあると、@command{yes} はステータス @samp{1} で終了する。
13025
13026 指定できるオプションは、単独の @option{--help} か @option{--version} だけである。
13027 @samp{-} で始まる引数を出力するには、その引数の前に @option{--} を置けばよい。
13028 たとえば、@samp{yes -- --help} というようにだ。@xref{Common options}.
13029
13030
13031 @node Conditions
13032 @chapter 条件
13033
13034 @cindex conditions
13035 @cindex commands for exit status
13036 @cindex exit status commands
13037
13038 この章で説明するのは、その出力よりも終了ステータスの方が主として役に
13039 立つコマンドである。従って、こうしたコマンドは、シェルの @code{if} 文の
13040 条件として、あるいは、パイプラインの最後のコマンドとして使用される
13041 ことが多い。
13042
13043 @menu
13044 * false invocation::         何もせず、実行失敗のステータスを返す。
13045 * true invocation::          何もせず、正常終了する。
13046 * test invocation::          ファイルタイプのチェックや値の比較を行う。
13047 * expr invocation::          式を評価する。
13048 @end menu
13049
13050
13051 @node false invocation
13052 @section @command{false}: 何もせず、実行失敗のステータスを返す
13053
13054 @pindex false
13055 @cindex do nothing, unsuccessfully
13056 @cindex failure exit status
13057 @cindex exit status of @command{false}
13058
13059 @command{false} は、実行に失敗したこと (@dfn{failure}) を示す終了ステータス 1 を
13060 返す以外、何もしない。従って、シェルスクリプト中の、実行に失敗する
13061 コマンドが必要な場所で、仮のコマンドとして使用することができる。
13062 最近のほとんどのシェルでは、@command{false} は組み込みコマンドになっている
13063 ので、スクリプト中で @samp{false} を使う際に使用しているのは、ここで説明
13064 している @samp{false} ではなく、たぶん組み込みコマンドの方である。
13065
13066 @command{false} は、@option{--help} と @option{--version} オプションを認識する。
13067
13068 このバージョンの @command{false} は、C のプログラムとして実装されている。
13069 従って、シェルスクリプトによる実装より安全かつ高速であり、アカウントを
13070 無効化するための安全なダミー・シェルとして使用することができる。
13071
13072 注意していただきたいが、@command{false} は、@option{--help} や@option{--version} を付けて
13073 実行した場合でも (このマニュアルで説明している他のすべてのプログラム
13074 とは違って)、実行失敗のステータスで終了する。
13075
13076 移植を考慮したプログラムでは、@command{false} の終了ステータスを 1 だと
13077 決めてかからない方がよい。GNU 以外のホストでは、終了ステータスが
13078 1 より大きいこともあるからだ。
13079
13080
13081 @node true invocation
13082 @section @command{true}: 何もせず、正常終了する
13083
13084 @pindex true
13085 @cindex do nothing, successfully
13086 @cindex no-op
13087 @cindex successful exit
13088 @cindex exit status of @command{true}
13089
13090 @command{true} は、実行に成功したこと (@dfn{success}) を示す終了ステータス 0 を
13091 返す以外、何もしない。従って、シェルスクリプト中の、実行に成功する
13092 コマンドが必要な場所で、仮のコマンドとして使用することができる。
13093 とは言え、シェルの組み込みコマンド @code{:} (コロン) の方が、同じことを
13094 より高速に実行してくれるかもしれない。最近のほとんどのシェルでは、
13095 @command{true} は組み込みコマンドになっているので、スクリプト中で @samp{true} を
13096 使う際に使用しているのは、ここで説明している @samp{true} ではなく、たぶん
13097 組み込みコマンドの方である。
13098
13099 @command{true} は、@option{--help} と @option{--version} オプションを認識する。
13100
13101 もっとも、@command{true} を 0 以外のステータスで終了させることも可能だと
13102 いうことも、心に留めておいていただきたい。@option{--help} や @option{--version} を
13103 使用したとき、標準出力がすでにクローズされていたり、I/O エラーを引き
13104 起こすようなファイルにリダイレクトしたりすると、そういうことが起きる。
13105 たとえば、Bourne 互換のシェルを使用して、次のようにするときだ。
13106
13107 @example
13108 $ ./true --version >&-
13109 ./true: write error: Bad file number
13110 $ ./true --version > /dev/full
13111 ./true: write error: No space left on device
13112 @end example
13113
13114 このバージョンの @command{true} は、C のプログラムとして実装されている。
13115 従って、シェルスクリプトによる実装より安全かつ高速であり、アカウントを
13116 無効化するための安全なダミー・シェルとして使用することができる。
13117
13118 @node test invocation
13119 @section @command{test}: ファイルタイプのチェックや値の比較を行う
13120
13121 @pindex test
13122 @cindex check file types
13123 @cindex compare values
13124 @cindex expression evaluation
13125
13126 @command{test} は、条件式 @var{expression} の評価次第で、0 (真) または 1 (偽) の
13127 ステータスを返す。式を構成する各部分は、独立した引数でなければならない。
13128
13129 @command{test} は、ファイルのステータスを検査することができる。また、文字列を
13130 扱う演算子や、数値を比較するための演算子も備えている。
13131
13132 @command{test} には、@samp{test} で始める書式のほかに、一対の角カッコを使用する
13133 もう一つの書式がある。たとえば、@samp{test -d /} の代わりに、@samp{[ -d / ]} と
13134 書いても構わない。角カッコは、それぞれ独立した引数でなければならない
13135 (訳注: 言い換えれば、他の引数と空白で分離されていなければならない)。
13136 だから、たとえば、@samp{[-d /]} では、望みの結果を得られないわけだ。@samp{test
13137 @var{expression}} と @samp{[ @var{expression} ]} は、同じ意味なので、以下では前者の書式
13138 についてのみ解説する。
13139
13140 書式:
13141
13142 @example
13143 test @var{expression}
13144 test
13145 [ @var{expression} ]
13146 [ ]
13147 [ @var{option}
13148 @end example
13149
13150 @mayConflictWithShellBuiltIn{test}
13151
13152 @var{expression} を省略した場合、@command{test} は、偽を返す。@var{expression} が引数
13153 1 個だけだった場合、@command{test} は、その引数が空 (null) ならば、偽を返し、さも
13154 なければ、真を返す。引数には、@samp{-d}, @samp{-1}, @samp{--}, @samp{--help},
13155 @samp{--version} と
13156 いった、他のほとんどのプログラムでなら、オプションとして扱われるものも
13157 含めて、どんな文字列でも指定することができる。そこで、ヘルプやバージョン
13158 情報を取得するには、@samp{[ --help} や @samp{[ --version} という形でコマンドを
13159 実行する必要がある。この場合、いつもと違って、閉じカッコは付けない。
13160 @xref{Common options}.
13161
13162 @cindex exit status of @command{test}
13163 終了ステータス:
13164
13165 @display
13166 0: 式が真の場合。
13167 1: 式が偽の場合。
13168 2: エラーが起きた場合。
13169 @end display
13170
13171 @menu
13172 * File type tests::          ファイルタイプのテスト (-[gkruwxOG])。
13173 * Access permission tests::  アクセス許可のテスト (-[gkruwxOG])。
13174 * File characteristic tests::  ファイル特性のテスト (-e -s -nt -ot -ef)。
13175 * String tests::             文字列のテスト (-z -n = == !=)。
13176 * Numeric tests::            数値のテスト (-eq -ne -lt -le -gt -ge)。
13177 * Connectives for test::     @command{test} の論理結合演算子 (! -a -o)。
13178 @end menu
13179
13180
13181 @node File type tests
13182 @subsection File type tests
13183
13184 @cindex file type tests
13185
13186 以下のオプションは、ある特定のファイルタイプか否かの検査を行う。(Unix
13187 では、あらゆるものがファイルだ。だが、ファイルならみんな同じだという
13188 わけではない!)
13189
13190 @table @samp
13191
13192 @item -b @var{file}
13193 @opindex -b
13194 @cindex block special check
13195 @var{file} が存在し、ブロック・スペシャルデバイスならば、真。
13196
13197 @item -c @var{file}
13198 @opindex -c
13199 @cindex character special check
13200 @var{file} が存在し、キャラクタ・スペシャルデバイスならば、真。
13201
13202 @item -d @var{file}
13203 @opindex -d
13204 @cindex directory check
13205 @var{file} が存在し、ディレクトリならば、真。
13206
13207 @item -f @var{file}
13208 @opindex -f
13209 @cindex regular file check
13210 @var{file} が存在し、通常ファイルならば、真。
13211
13212 @item -h @var{file}
13213 @itemx -L @var{file}
13214 @opindex -L
13215 @opindex -h
13216 @cindex symbolic link check
13217 @var{file} が存在し、シンボリックリンクならば、真。ファイル関係の他の
13218 すべてのテストとは違って、このテストは、@var{file} がシンボリックリンク
13219 の場合、リンクの参照を行わない。
13220
13221 @item -p @var{file}
13222 @opindex -p
13223 @cindex named pipe check
13224 @var{file} が存在し、名前付きパイプならば、真。
13225
13226 @item -S @var{file}
13227 @opindex -S
13228 @cindex socket check
13229 @var{file} が存在し、ソケットならば、真。
13230
13231 @item -t @var{fd}
13232 @opindex -t
13233 @cindex terminal check
13234 @var{fd} が端末と結びついているファイルディスクリプタならば、真。
13235
13236 @end table
13237
13238
13239 @node Access permission tests
13240 @subsection アクセス許可のテスト
13241
13242 @cindex access permission tests
13243 @cindex permission tests
13244
13245 以下のオプションは、特定のアクセス許可について検査をする。
13246
13247 @table @samp
13248
13249 @item -g @var{file}
13250 @opindex -g
13251 @cindex set-group-ID check
13252 @var{file} が存在し、set-group-ID ビットが立っていれば、真。
13253
13254 @item -k @var{file}
13255 @opindex -k
13256 @cindex sticky bit check
13257 @var{file} が存在し、@dfn{sticky} ビットが立っていれば、真
13258
13259 @item -r @var{file}
13260 @opindex -r
13261 @cindex readable file check
13262 @var{file} が存在し、読み出しが許可されていれば、真。
13263
13264 @item -u @var{file}
13265 @opindex -u
13266 @cindex set-user-ID check
13267 @var{file} が存在し、set-user-ID ビットが立っていれば、真。
13268
13269 @item -w @var{file}
13270 @opindex -w
13271 @cindex writable file check
13272 @var{file} が存在し、書き込みが許可されていれば、真。
13273
13274 @item -x @var{file}
13275 @opindex -x
13276 @cindex executable file check
13277 @var{file} が存在し、実行が許可されていれば (ディレクトリの場合は、
13278 検索が許可されていれば)、真。
13279
13280 @item -O @var{file}
13281 @opindex -O
13282 @cindex owned by effective user ID check
13283 @var{file} が存在し、その所有者が test コマンド実行者の実効ユーザ ID
13284 と同じならば、真。
13285
13286 @item -G @var{file}
13287 @opindex -G
13288 @cindex owned by effective group ID check
13289 @var{file} が存在し、そのグループが test コマンド実行者の実効グループ ID
13290 と同じならば、真。
13291
13292 @end table
13293
13294 @node File characteristic tests
13295 @subsection ファイル特性のテスト
13296
13297 @cindex file characteristic tests
13298
13299 以下のオプションは、ファイルの他の特性を検査する。
13300
13301 @table @samp
13302
13303 @item -e @var{file}
13304 @opindex -e
13305 @cindex existence-of-file check
13306 @var{file} が存在すれば、真。
13307
13308 @item -s @var{file}
13309 @opindex -s
13310 @cindex nonempty file check
13311 @var{file} が存在し、サイズが 0 よりも大きければ、真。
13312
13313 @item @var{file1} -nt @var{file2}
13314 @opindex -nt
13315 @cindex newer-than file check
13316 @var{file1} が @var{file2} より (更新日時 (modification date) で比較して)
13317 新しいか、あるいは、@var{file1} が存在して、@var{file2} が存在しなければ、真。
13318
13319 @item @var{file1} -ot @var{file2}
13320 @opindex -ot
13321 @cindex older-than file check
13322 @var{file1} が @var{file2} より (更新日時で比較して) 古いか、あるいは、@var{file2} が
13323 存在して、@var{file1} が存在しなければ、真。
13324
13325 @item @var{file1} -ef @var{file2}
13326 @opindex -ef
13327 @cindex same file check
13328 @cindex hard link check
13329 @var{file1} と @var{file2} が同じデバイス番号と同じ inode 番号を持っていれば、
13330 言い換えれば、両者が互いのハードリンクならば、真。
13331
13332 @end table
13333
13334
13335 @node String tests
13336 @subsection 文字列のテスト
13337
13338 @cindex string tests
13339
13340 以下のオプションは、文字列の特性を検査する。シェルに対して引数 @var{string} を
13341 引用符で保護する必要があるかもしれない。たとえば、こんなふうにだ。
13342
13343 @example
13344 test -n "$V"
13345 @end example
13346
13347 ここで引用符は、@samp{$V} が空だったり、特殊文字を含んでいたりする場合に、
13348 意図に反した引数が @command{test} に渡ることを防いでいる。
13349
13350 @table @samp
13351
13352 @item -z @var{string}
13353 @opindex -z
13354 @cindex zero-length string check
13355 @var{string} の長さが 0 ならば、真。
13356
13357 @item -n @var{string}
13358 @itemx @var{string}
13359 @opindex -n
13360 @cindex nonzero-length string check
13361 @var{string} の長さが 0 でなければ、真。
13362
13363 @item @var{string1} = @var{string2}
13364 @opindex =
13365 @cindex equal string check
13366 両文字列が等しければ、真。
13367
13368 @item @var{string1} == @var{string2}
13369 @opindex ==
13370 @cindex equal string check
13371 両文字列が等しければ、真 (= と同じ意味)。
13372
13373 @item @var{string1} != @var{string2}
13374 @opindex !=
13375 @cindex not-equal string check
13376 両文字列が等しくなければ、真。
13377
13378 @end table
13379
13380
13381 @node Numeric tests
13382 @subsection 数値のテスト
13383
13384 @cindex numeric tests
13385 @cindex arithmetic tests
13386
13387 数値間の関係を調べる演算子を挙げる。引数は、数字のみで表現される整数か
13388 (負数も使用できる)、@w{@code{-l @var{string}}} という特別な式でなければならない。後者は
13389 @var{string} の長さとして評価される。
13390 @sp 1
13391 (訳注: 要するに、普通は 10 進数の整数を引数として取るということ。
13392 @command{expr} コマンドとは違って、@command{test} では @samp{+2} といった表現も可能だ。)
13393
13394 @table @samp
13395
13396 @item @var{arg1} -eq @var{arg2}
13397 @itemx @var{arg1} -ne @var{arg2}
13398 @itemx @var{arg1} -lt @var{arg2}
13399 @itemx @var{arg1} -le @var{arg2}
13400 @itemx @var{arg1} -gt @var{arg2}
13401 @itemx @var{arg1} -ge @var{arg2}
13402 @opindex -eq
13403 @opindex -ne
13404 @opindex -lt
13405 @opindex -le
13406 @opindex -gt
13407 @opindex -ge
13408 こうした二項算術演算子は、それぞれ次の場合に真を返す。上から順に、
13409 @var{arg1} が @var{arg2} と比べて、等しい場合、等しくない場合、より小さい場合、
13410 より小さいか等しい場合、より大きい場合、より大きいか等しい場合。
13411
13412 @end table
13413
13414 例を挙げる。
13415
13416 @example
13417 test -1 -gt -2 && echo yes
13418 @result{} yes
13419 test -l abc -gt 1 && echo yes
13420 @result{} yes
13421 test 0x100 -eq 1
13422 @error{} test: integer expression expected before -eq
13423 @end example
13424
13425
13426 @node Connectives for test
13427 @subsection @command{test} の論理結合演算子
13428
13429 @cindex logical connectives
13430 @cindex connectives, logical
13431
13432 おなじみの論理結合演算子である。
13433
13434 @table @samp
13435
13436 @item ! @var{expr}
13437 @opindex !
13438 @var{expr} が偽ならば、真。
13439
13440 @item @var{expr1} -a @var{expr2}
13441 @opindex -a
13442 @cindex logical and operator
13443 @cindex and operator
13444 @var{expr1} と @var{expr2} の両方が真ならば、真。
13445
13446 @item @var{expr1} -o @var{expr2}
13447 @opindex -o
13448 @cindex logical or operator
13449 @cindex or operator
13450 @var{expr1} と @var{expr2} のどちらかが真ならば、真。
13451
13452 @end table
13453
13454
13455 @node expr invocation
13456 @section @command{expr}: 式を評価する
13457
13458 @pindex expr
13459 @cindex expression evaluation
13460 @cindex evaluation of expressions
13461
13462 @command{expr} は、式を評価して、結果を標準出力に書き出す。式の各構成要素
13463 (token) は、独立した引数でなければならない。
13464
13465 オペランド (演算対象) は、整数か文字列である。整数は、1 個以上の
13466 10 進数の数字から構成され、先頭に @samp{-} が付いていてもよい。@command{expr} は、
13467 オペランドの位置にあるものが何であれ、それを整数、または、文字列に
13468 変換する。どちらになるかは、それに対して行われる演算次第である。
13469
13470 @command{expr} そのものに対しては、文字列をクォートする必要がない。だが、
13471 シェルにとって特別な意味がある、たとえば空白のような文字を保護する
13472 ためには、文字列を引用符で囲むなどの方法でクォートする必要があるかも
13473 しれない。とは言え、クォートされているかどうかに関わりなく、文字列の
13474 オペランドは、丸カッコ 1 個であってはならないし、@code{+} のような @command{expr}
13475 の演算子の一つであるべきでもない。すなわち、シェルに対してクォートする
13476 だけでは、エラーを引き起こすことなく、任意の文字列 @code{$str} を @command{expr} に
13477 渡すことはできないのだ。この問題を回避する方法の一つは、GNU の拡張
13478 である @code{+} 演算子 (訳注: この @code{+} は、算術演算子の @code{+} ではなく、直後に
13479 来る引数が文字列であることを示す文字列演算子である) を使用することだ
13480 (たとえば、@code{+ "$str" = foo} といった具合に)。もっと移植性のある方法は、
13481 @code{@w{" $str"}} という先頭に空白を入れた表現を使用し、式の残りの部分でも
13482 それに合わせて、先頭のスペースを考慮に入れるようにすることである
13483 (たとえば、@code{@w{" $str" = " foo"}} のように)。
13484
13485 負の整数や、@samp{-} で始まる文字列を @command{expr} の 1 番目の引数として渡す
13486 べきではない。オプションと間違われかねないからだ。それを避けるため
13487 には、カッコでくくればよい (訳注: たとえば、@code{expr \( -1 + 1 \)})。
13488 また、移植を考慮したスクリプトでは、文字列のオペランドに、形が整数と
13489 同じになってしまうものを使うべきではない。こちらは、先頭にスペースを
13490 入れる上記の方法で回避できる。
13491
13492 @cindex parentheses for grouping
13493 演算子には、記号としてオペランドとオペランドの間に置くものもあれば、
13494 キーワードとしてオペランドの前に付けるものもある。丸カッコは、おなじみの
13495 やり方で、グループ化に使用できる。ただし、丸カッコや、演算子の多くは、
13496 シェルによって評価されないように、クォートしなければならない。
13497
13498 GNU MP ライブラリ対応でビルドされた場合、@command{expr} は任意精度演算を
13499 使用する。そうでない場合は、ネイティブな算術型を使用するので、算術
13500 オーバーフローのために実行に失敗することがあるかもしれない。
13501
13502 指定できるオプションは、@option{--help} と @option{--version} だけである。
13503 @xref{Common options}.  オプションはオペランドの前に置かなければならない。
13504
13505 @cindex exit status of @command{expr}
13506 終了ステータス:
13507
13508 @display
13509 0: 式が null でも 0 でもない場合。
13510 1: 式が null または 0 の場合。
13511 2: 式が無効な場合。
13512 3: 内部エラーが起きた場合 (例: 算術オーバーフロー)。
13513 @end display
13514
13515 @menu
13516 * String expressions::       文字列式 (+ : match substr index length)。
13517 * Numeric expressions::      数式 (+ - * / %)。
13518 * Relations for expr::       論理結合と関係表現 (| & < <= = == != >= >)。
13519 * Examples of expr::         用例。
13520 @end menu
13521
13522
13523 @node String expressions
13524 @subsection 文字列式
13525
13526 @cindex string expressions
13527 @cindex expressions, string
13528
13529 @command{expr} は、パターンマッチなどの文字列演算子をサポートしている。文字列
13530 演算子の優先順位は、算術演算子や関係演算子よりも高い (算術/関係演算子
13531 については後述する)。
13532
13533 @table @samp
13534
13535 @item @var{string} : @var{regex}
13536 @cindex pattern matching
13537 @cindex regular expression matching
13538 @cindex matching patterns
13539 パターンマッチを行う。まず、左右の項を文字列に変換し、右項を、
13540 先頭に @code{^} が暗黙のうちに付いている正規表現と見なす (@code{grep} 風の
13541 基本正規表現)。それから、その正規表現と左項がマッチするかどうかを
13542 調べる。
13543
13544 マッチが成功した場合、@var{regex} 中でカッコ (@samp{\(} と @samp{\)}) を使用して
13545 いれば、@code{:} 演算子は、そのカッコ内の部分表現にマッチした @var{string}
13546 中の部分文字列を返す。カッコを使っていなければ、返すのはマッチした
13547 文字数である。
13548
13549 マッチに失敗した場合、@code{:} 演算子は、@var{regex} 中でカッコ (@samp{\(} と @samp{\)})
13550 を使用していれば、空文字列を、さもなければ、0 を返す。
13551
13552 @kindex \( @r{regexp operator}
13553 最初の @samp{\( @dots{} \)} のペアだけが、返り値に関係する。二番目以降の
13554 カッコのペアには、正規表現の演算子をグループ化する働きしかない。
13555
13556 @kindex \+ @r{regexp operator}
13557 @kindex \? @r{regexp operator}
13558 @kindex \| @r{regexp operator}
13559 正規表現では、@code{\+}, @code{\?}, @code{\|} は演算子であり、それぞれ、1 個以上
13560 にマッチする、あってもなくてもよい、候補のうちのどちらか、を意味して
13561 いる。ところが、SunOS などの @command{expr} では、こうした記号を通常の文字
13562 として扱っている (POSIX は、どちらの動作も認めている)。正規表現の
13563 文法については次のものが詳しい。@xref{Top, , Regular Expression Library, regex, Regex}.
13564 実例をいくつか、「@command{expr} の使用例」に挙げておいた。
13565 @ref{Examples of expr}.
13566
13567 @item match @var{string} @var{regex}
13568 @findex match
13569 パターンマッチを行う別の方法。これは、@w{@samp{@var{string} : @var{regex}}} と同じ
13570 である。
13571
13572 @item substr @var{string} @var{position} @var{length}
13573 @findex substr
13574 @var{string} の部分文字列を返す。部分文字列は、@var{position} の位置から
13575 始まり、最長でも @var{length} の長さである。@var{position} と @var{length} のどちらか
13576 が、負数や 0 だったり、数値以外だったりする場合は、空文字列を返す。
13577
13578 @item index @var{string} @var{charset}
13579 @findex index
13580 @var{charset} 中の文字が最初に見つかった @var{string} 中の位置を返す。@var{string} 中に
13581 @var{charset} 中のどの文字も見つからなかった場合は、0 を返す。
13582
13583 @item length @var{string}
13584 @findex length
13585 @var{string} の長さを返す。
13586
13587 @item + @var{token}
13588 @kindex +
13589 たとえ、@var{token} が @code{match} のようなキーワードや、 @code{/} のような演算子
13590 であっても、@var{token} を文字列として解釈する。これを使用すると、@code{expr
13591 length + "$x"} や @code{expr + "$x" : '.*/\(.\)'} を実行したとき、@code{$x}
13592 の値が (たとえば) たまたま @code{/} や @code{index} であっても、適切な動作を
13593 させることができる。この演算子は、GNU の拡張である。移植を考慮した
13594 シェルスクリプトでは、@code{+ "$token"} ではなく、@code{@w{" $token"} : @w{' \(.*\)'}}
13595 を使うべきである。
13596
13597 @end table
13598
13599 @command{expr} にキーワードを文字列として解釈させるためには、クォート演算子
13600 (すなわち、上で述べている @code{+} 演算子) を使用しなければならない。
13601
13602
13603 @node Numeric expressions
13604 @subsection 数式
13605
13606 @cindex numeric expressions
13607 @cindex expressions, numeric
13608
13609 @command{expr} は、以下に挙げる通常の算術演算子を、昇順の優先順位で、サポート
13610 している。こうした算術演算子は、前節で述べた文字列演算子より優先順位が
13611 低く、次節で述べる関係演算子より優先順位が高い。
13612
13613 @table @samp
13614
13615 @item + -
13616 @kindex +
13617 @kindex -
13618 @cindex addition
13619 @cindex subtraction
13620 加算と減算。左右の項は両方とも整数に変換される。整数に変換できない
13621 場合は、エラーになる。
13622
13623 @item * / %
13624 @kindex *
13625 @kindex /
13626 @kindex %
13627 @cindex multiplication
13628 @cindex division
13629 @cindex remainder
13630 乗算、除算、剰余演算。左右の項は両方とも整数に変換される。整数に
13631 変換できない場合は、エラーになる。
13632
13633 @end table
13634
13635
13636 @node Relations for expr
13637 @subsection @command{expr} の関係表現
13638
13639 @cindex connectives, logical
13640 @cindex logical connectives
13641 @cindex relations, numeric or string
13642
13643 @command{expr} は、通常の論理結合や関係表現をサポートしている。そうした演算子
13644 は、前の節で述べた文字列演算子や算術演算子より優先順位が低い。論理結合や
13645 関係表現の演算子を、優先順位の低いものから高いものへ順に並べておく。
13646
13647 @table @samp
13648
13649 @item |
13650 @kindex |
13651 @cindex logical or operator
13652 @cindex or operator
13653 左項が null でも 0 でもなければ、左項を返す。左項が null または
13654 0 の場合は、右項が null でも 0 でもなければ、右項を返す。両項とも
13655 null または 0 の場合は、0 を返す。左項が null でも 0 でもない場合、
13656 右項の評価は行われない。
13657
13658 @item &
13659 @kindex &
13660 @cindex logical and operator
13661 @cindex and operator
13662 両項とも null でも 0 でもなければ、左項を返し、それ以外の場合は、0
13663 を返す。左項が null または 0 の場合、右項の評価は行われない。
13664
13665 @item < <= = == != >= >
13666 @kindex <
13667 @kindex <=
13668 @kindex =
13669 @kindex ==
13670 @kindex >
13671 @kindex >=
13672 @cindex comparison operators
13673 @vindex LC_COLLATE
13674 両項を比較し、関係が真ならば、1 を返し、偽の場合は、0 を返す。
13675 @code{==} は @code{=} と同じ意味である。@command{expr} は、まず両項を整数に変換し、
13676 数値としての比較を試みる。左右どちらかの項の変換に失敗した場合は、
13677 @env{LC_COLLATE} のロケールで指定されている、文字の照合順を使用して、
13678 辞書的な比較を行う。
13679
13680 @end table
13681
13682
13683 @node Examples of expr
13684 @subsection @command{expr} の使用例
13685
13686 @cindex examples of @command{expr}
13687 シェルのメタ文字をクオートする例も含めて、用例をいくつか挙げておく。
13688
13689 Bourne 互換シェルで、シェル変数 @code{foo} に 1 を加える。
13690
13691 @example
13692 foo=$(expr $foo + 1)
13693 @end example
13694
13695 変数 @code{$fname} に格納されているファイル名から、ディレクトリではない
13696 部分を取り出して、表示する。@code{$fname} に @code{/} が含まれていなくてもよい。
13697
13698 @example
13699 expr $fname : '.*/\(.*\)' '|' $fname
13700 @end example
13701
13702 次の例で @code{\+} は演算子である (訳注: 細かいことを言うと、@command{grep} 流
13703 の基本正規表現の演算子。ちなみに、最後の例の @code{+} は、@command{expr} の文字列
13704 演算子である)。
13705
13706 @example
13707 expr aaa : 'a\+'
13708 @result{} 3
13709 @end example
13710
13711 @example
13712 expr abc : 'a\(.\)c'
13713 @result{} b
13714 expr index abcdef cz
13715 @result{} 3
13716 expr index index a
13717 @error{} expr: syntax error
13718 expr index + index a
13719 @result{} 0
13720 @end example
13721
13722
13723 @node Redirection
13724 @chapter リダイレクション
13725
13726 @cindex redirection
13727 @cindex commands for redirection
13728
13729 Unix のシェルは、いくつかの形式のリダイレクション (@dfn{redirection})
13730 --- コマンドの入力元や出力先を変更する手段 --- をたいてい用意している。
13731 しかし、ある一つの便利なリダイレクションは、シェルではなく、独立した
13732 コマンドによって行われる。この章では、そのコマンドについて説明する。
13733
13734 @menu
13735 * tee invocation::           出力を複数のファイルやプロセスにリダイレクトする。
13736 @end menu
13737
13738
13739 @node tee invocation
13740 @section @command{tee}: 出力を複数のファイルやプロセスにリダイレクトする
13741
13742 @pindex tee
13743 @cindex pipe fitting
13744 @cindex destinations, multiple output
13745 @cindex read from stdin and write to stdout and files
13746
13747 @command{tee} コマンドは、標準入力を標準出力にコピーするとともに、引数として
13748 指定されたファイル (複数可) にもコピーする。これは、あるデータをパイプ
13749 に送るだけでなく、同時にそのコピーを保存したい場合に、便利である。
13750 @sp 1
13751 書式:
13752
13753 @example
13754 tee [@var{option}]@dots{} [@var{file}]@dots{}
13755 @end example
13756
13757 書き出し先のファイルがまだ存在していなければ、作成される。書き出し
13758 先のファイルがすでに存在している場合は、@option{-a} オプションを使用しない
13759 かぎり、ファイルに前からあったデータは上書きされる。
13760
13761 @var{file} の一つに @samp{-} を指定すると、@command{tee} は、入力のコピーをもう一つ、
13762 標準出力に送出する。だが、コピー同士が重なり合うので、たいていの場合、
13763 これはあまり役に立たない。
13764
13765 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13766
13767 @table @samp
13768 @item -a
13769 @itemx --append
13770 @opindex -a
13771 @opindex --append
13772 指定されたファイルの末尾に標準入力を追加する。すなわち、ファイルを
13773 上書きしない。
13774
13775 @item -i
13776 @itemx --ignore-interrupts
13777 @opindex -i
13778 @opindex --ignore-interrupts
13779 割り込みシグナルを無視する。
13780
13781 @end table
13782
13783 大量のデータの転送を行いながら、同時にそのデータのサマライズも
13784 行いたい、改めてデータを読み直すようなことはしたくない。@command{tee} は、
13785 そういうときに便利である。たとえば、DVD イメージをダウンロードして
13786 いるとき、その場ですぐ、署名やチェックサムを確認したくなることがよく
13787 ある。単に次のようにするのは、効率が悪い。
13788
13789 @example
13790 wget http://example.com/some.iso && sha1sum some.iso
13791 @end example
13792
13793 上記コマンドの問題点の一つは、ただでさえ時間のかかる SHA1 の計算に
13794 取りかかる前に、ダウンロードが完了するのを待たなければならないことで
13795 ある。たぶん、さらに問題なのは、上記のやり方では、DVD イメージを改めて
13796 読み直さなければならないことだろう (一度目の読み込みは、ネットワーク
13797 からだ)。
13798
13799 こうした作業を行う効率的な方法は、ダウンロードと SHA1 の計算を
13800 同時に、交互に実行することである。そうすれば、プロセス全体が平行して
13801 スムーズに進むので、無駄な時間を使わずに、チェックサムが手に入る。
13802
13803 @example
13804 # ちょっと凝った方法。プロセス置換の実例をご覧に入れるため。
13805 wget -O - http://example.com/dvd.iso \
13806   | tee >(sha1sum > dvd.sha1) > dvd.iso
13807 @end example
13808
13809 こうすれば、@command{tee} は、出力を目当てのファイルに書き出すだけでなく、
13810 パイプにも書き出す。そして、後者では、 @command{sha1sum} を実行し、最終的に
13811 チェックサムを @file{dvd.sha1} という名前のファイルに保存することになる。
13812
13813 しかし、気をつけていただきたい。上記の例は、プロセス置換 (@dfn{process
13814 substitution}) と呼ばれる最近のシェルの機能を当てにしている (上記の
13815 @samp{>(command)} という構文のことである。@xref{Process Substitution,,
13816 Process Substitution, bash, The Bash Reference Manual}.)。
13817 そのため、@command{zsh}, @command{bash}, @command{ksh} では
13818 うまく動作するが、@command{/bin/sh} では動作しない。従って、こうしたコードを
13819 シェルスクリプトで使用するときは、スクリプトの先頭に @samp{#!/bin/bash} など
13820 と書くことを忘れてはいけない。
13821
13822 上記の例は、書き出しを 1 個のファイルと 1 個のプロセスに行っている
13823 だけだ。その程度なら、もっと普通の、もっと移植性のある使い方をした方が
13824 ずっとよい。
13825
13826 @example
13827 wget -O - http://example.com/dvd.iso \
13828   | tee dvd.iso | sha1sum > dvd.sha1
13829 @end example
13830
13831 @command{tee} が二つのプロセスに書き込むように、この例を拡張して、MD5 と
13832 SHA1 のチェックサムを平行して計算させることもできる。その場合は、
13833 プロセス置換が必要になる。
13834
13835 @example
13836 wget -O - http://example.com/dvd.iso \
13837   | tee >(sha1sum > dvd.sha1) \
13838         >(md5sum > dvd.md5) \
13839   > dvd.iso
13840 @end example
13841
13842 このテクニックは、パイプから入ってくるデータの圧縮したコピーを作り
13843 たいときにも、役に立つ。@samp{du -ak} の出力するディスク使用量のデータを
13844 要約して、グラフィカルに表示するツールを考えていただきたい。
13845 ディレクトリ階層が膨大だと、@samp{du -ak} は実行に長い時間がかかるだろう
13846 し、いともたやすくテラバイトのデータを作成してくれるだろう。そこで、
13847 @samp{du} コマンドをむやみに再実行することはやりたくない。また、圧縮される
13848 前のデータを保存しておきたくもない。
13849
13850 これを効率の悪い方法でやると、@command{du} の出力全部の圧縮を済ませるまで、
13851 GUI ツールを起動することすらできない。
13852
13853 @example
13854 du -ak | gzip -9 > /tmp/du.gz
13855 gzip -d /tmp/du.gz | xdiskusage -a
13856 @end example
13857
13858 @command{tee} とプロセス置換を使えば、GUI ツールを直ちに起動できるし、
13859 圧縮ファイルの展開も全くやらないですむ。
13860
13861 @example
13862 du -ak | tee >(gzip -9 > /tmp/du.gz) | xdiskusage -a
13863 @end example
13864
13865 最後にもう一つ。常に 2 種類以上の圧縮した tar アーカイブ (tarball)
13866 を一度に作ることにしている場合は、より効率のよいやり方ができるかも
13867 しれない。たとえば、@code{make dist} が @command{gzip} と @command{bzip2} の両方で圧縮した
13868 tar アーカイブを作成するような場合だ。@command{automake} が生成する @file{Makefile}
13869 のルールは、たいてい、こんなふうにコマンドを連続して実行することで、
13870 圧縮した tar アーカイブを二つ作成している (少し単純化してある)。
13871
13872 @example
13873 tardir=your-pkg-M.N
13874 tar chof - "$tardir" | gzip  -9 -c > your-pkg-M.N.tar.gz
13875 tar chof - "$tardir" | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13876 @end example
13877
13878 しかしながら、アーカイブの作成・圧縮の対象になっているディレクトリ
13879 階層が、数メガバイトより大きい場合は --- 使用しているシステムがマルチ
13880 プロセッサを搭載し、メモリがふんだんにある場合はなおさらそうだが ---
13881 ディレクトリの中身を 1 回だけ読み込み、圧縮プログラムを平行して走ら
13882 せることで、ずっと効率のよい仕事ができる。
13883
13884 @example
13885 tardir=your-pkg-M.N
13886 tar chof - "$tardir" \
13887   | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
13888   | bzip2 -9 -c > your-pkg-M.N.tar.bz2
13889 @end example
13890
13891 @exitstatus
13892
13893
13894 @node File name manipulation
13895 @chapter ファイル名操作
13896
13897 @cindex file name manipulation
13898 @cindex manipulation of file names
13899 @cindex commands for file name manipulation
13900
13901 この章では、ファイル名操作に使うコマンドについて説明する。
13902
13903 @menu
13904 * basename invocation::      ファイル名からディレクトリと接尾辞を取り除く。
13905 * dirname invocation::       ファイル名から最後の要素を取り除く。
13906 * pathchk invocation::       ファイル名の有効性や可搬性を検査する。
13907 * mktemp invocation::        テンポラリファイルやディレクトリを作成する。
13908 * realpath invocation::      ファイル名を展開して表示する。
13909 @end menu
13910
13911
13912 @node basename invocation
13913 @section @command{basename}: ファイル名からディレクトリと接尾辞を取り除く
13914
13915 @pindex basename
13916 @cindex strip directory and suffix from file names
13917 @cindex directory, stripping from file names
13918 @cindex suffix, stripping from file names
13919 @cindex file names, stripping directory and suffix
13920 @cindex leading directory components, stripping
13921
13922 @command{basename} は、@var{name} の先頭にディレクトリ部分があれば、それを取り除く。
13923 @sp 1
13924 書式:
13925
13926 @example
13927 basename @var{name} [@var{suffix}]
13928 basename @var{option}@dots{} @var{name}@dots{}
13929 @end example
13930
13931 @var{suffix} が指定されていて、それが @var{name} の末尾と同一ならば、@var{suffix} の
13932 部分も @var{name} から取り除かれる。気をつけていただきたいが、ファイル名の
13933 末尾のスラッシュは、接尾辞のマッチングに先立って除去されるので、@var{suffix}
13934 にスラッシュが含まれていると、指定に効果がないことになる。@command{basename} は、
13935 結果を標準出力に表示する。
13936
13937 @c This test is used both here and in the section on dirname.
13938 @macro basenameAndDirname
13939 @command{basename} と @command{dirname} は合わせて設計されており、もし @samp{ls "$name"}
13940 が成功するならば、@samp{cd "$(dirname "$name")"; ls "$(basename "$name")"}
13941 というコマンドの連続も成功するようになっている。これは、ファイル名の
13942 末尾に改行が付いている場合を除いて、あらゆる場合にうまく行く。
13943 @end macro
13944 @basenameAndDirname
13945
13946 POSIX によれば、@var{name} が空の場合や @samp{//} の場合に、結果がどうなるかは、
13947 実装側で決めてよいことになっている。前者の場合、GNU の @command{basename} は、
13948 空文字列を返す。後者の場合、@var{//} と @var{/} とが別のものであるプラットフォーム
13949 では、結果は @samp{//} になり、全く区別しないプラットフォームでは、結果は @samp{/}
13950 になる。
13951
13952 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
13953 オプションはオペランドの前に置かなければならない。
13954
13955 @table @samp
13956
13957 @item -a
13958 @itemx --multiple
13959 @opindex -a
13960 @opindex --multiple
13961 複数の引数を受け付ける。すべての引数は @var{name} として処理される。この
13962 オプションを使用する場合、@var{suffix} を指定するならば、@option{-s} オプション
13963 を使わなければならない。
13964
13965 @item -s @var{suffix}
13966 @itemx --suffix=@var{suffix}
13967 @opindex -s
13968 @opindex --suffix
13969 末尾にある @var{suffix} を除去する。このオプションを指定すると @option{-a} オプ
13970 ションも指定したことになる。
13971
13972 @item -z
13973 @itemx --zero
13974 @opindex -z
13975 @opindex --zero
13976 出力する項目を NUL 文字で区切る。
13977
13978 @end table
13979
13980 @exitstatus
13981
13982 用例:
13983
13984 @smallexample
13985 # "sort" を出力する。
13986 basename /usr/bin/sort
13987
13988 # "stdio" を出力する。
13989 basename include/stdio.h .h
13990
13991 # "stdio" を出力する。
13992 basename -s .h include/stdio.h
13993
13994 # "stdio", "stdlib" の順に出力する。
13995 basename -a -s .h include/stdio.h include/stdlib.h
13996 @end smallexample
13997
13998
13999 @node dirname invocation
14000 @section @command{dirname}: ファイル名から最後の要素を取り除く
14001
14002 @pindex dirname
14003 @cindex directory components, printing
14004 @cindex stripping non-directory suffix
14005 @cindex non-directory suffix, stripping
14006
14007 @command{dirname} は、各 @var{name} からスラッシュで区切られた最後の要素を取り除いて、
14008 残りのすべてを表示する。その際、最後の要素の左右どちらにあるスラッシュ
14009 も除去される。@var{name} を構成する文字列にスラッシュが一つも含まれない場合、
14010 @command{dirname} は (カレントディレクトリを意味する) @samp{.} を表示する。
14011 @sp 1
14012 書式:
14013
14014 @example
14015 dirname [@var{option}] @var{name}@dots{}
14016 @end example
14017
14018 @var{name} は実在するファイル名でなくても構わないが、実在するファイル名
14019 ならば、この操作によって、最後の要素それ自体がディレクトリである場合も
14020 含めて、最後の要素が存在するディレクトリが、利用できる形で表示される。
14021
14022 @basenameAndDirname
14023
14024 POSIX によれば、@var{name} が @samp{//} の場合に、結果がどうなるかは、実装側で
14025 決めてよいことになっている。GNU の @command{dirname} について言うと、@var{//} と @var{/}
14026 とが別のものであるプラットフォームでは、結果は @samp{//} になり、全く区別
14027 しないプラットフォームでは、結果は @samp{/} になる。
14028
14029 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
14030
14031 @table @samp
14032
14033 @item -z
14034 @itemx --zero
14035 @opindex -z
14036 @opindex --zero
14037 出力する項目を NUL 文字で区切る。
14038
14039 @end table
14040
14041 @exitstatus
14042
14043 用例:
14044
14045 @smallexample
14046 # "/usr/bin" を出力する。
14047 dirname /usr/bin/sort
14048 dirname /usr/bin//.//
14049
14050 # "dir1", "dir2" の順に出力する。
14051 dirname dir1/str dir2/str
14052
14053 # "." を出力する。
14054 dirname stdio.h
14055 @end smallexample
14056
14057
14058 @node pathchk invocation
14059 @section @command{pathchk}: ファイル名の有効性や可搬性を検査する
14060
14061 @pindex pathchk
14062 @cindex file names, checking validity and portability
14063 @cindex valid file names, checking for
14064 @cindex portable file names, checking for
14065
14066 @command{pathchk} は、ファイル名が有効かどうか、可搬性があるかどうかを検査する。
14067 @sp 1
14068 書式:
14069
14070 @example
14071 pathchk [@var{option}]@dots{} @var{name}@dots{}
14072 @end example
14073
14074 @command{pathchk} は各 @var{name} に対して、以下の条件のどれかが真ならば、エラー
14075 メッセージを表示する。
14076
14077 @enumerate
14078 @item
14079 @var{name} 中の実在するディレクトリの一つが、検索 (実行) 許可を持って
14080 いない。
14081 @item
14082 @var{name} の長さが、オペレーティング・システムによってサポートされている
14083 最大長を越えている。
14084 @item
14085 @var{name} の構成要素の一つの長さが、それが存在することになるファイル
14086 システムによってサポートされている最大長を越えている。
14087 @end enumerate
14088
14089 実在しないファイル名を指定しても、エラーにはならない。その名前の
14090 ファイルが、上記の条件内で作成可能であればよい。
14091
14092 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14093 オプションはオペランドの前に置かなければならない。
14094
14095 @table @samp
14096
14097 @item -p
14098 @opindex -p
14099 実際に使用しているファイルシステムに基づいて検査を行うのではなく、
14100 以下の条件を調べて、そのどれかが真ならば、エラーメッセージを表示
14101 する。
14102
14103 @enumerate
14104 @item
14105 ファイル名が空である。
14106
14107 @item
14108 ファイル名に、どのシステムでもファイル名に使用できる文字と
14109 して POSIX が規定している文字セット以外の文字が含まれている。
14110 すなわち、ASCII 英数字、@samp{.}、@samp{_}、@samp{-}、@samp{/} 以外の文字が使用
14111 されている。
14112
14113 @item
14114 ファイル名の長さや、その構成要素の一つの長さが、POSIX の規格で
14115 可搬性のために最小限サポートすべしとされている長さを越えている。
14116 @end enumerate
14117
14118 @item -P
14119 @opindex -P
14120 ファイル名が空だったり、@samp{-} で始まる構成要素を含んでいたりすると、
14121 エラーメッセージを表示する。
14122
14123 @item --portability
14124 @opindex --portability
14125 ファイル名が POSIX に準拠しているすべてのホストで使えるもので
14126 なければ、エラーメッセージを表示する。このオプションは、@samp{-p -P} と
14127 同じことである。
14128
14129 @end table
14130
14131 @cindex exit status of @command{pathchk}
14132 終了ステータス:
14133
14134 @display
14135 0: 指定されたすべてのファイル名が検査のすべてにパスした場合。
14136 1: それ以外。
14137 @end display
14138
14139 @node mktemp invocation
14140 @section @command{mktemp}: テンポラリファイルやディレクトリを作成する
14141
14142 @pindex mktemp
14143 @cindex file names, creating temporary
14144 @cindex directory, creating temporary
14145 @cindex temporary files and directories
14146
14147 @command{mktemp} は、テンポラリファイルやテンポラリディレクトリの作成を行う。
14148 @sp 1
14149 書式:
14150
14151 @example
14152 mktemp [@var{option}]@dots{} [@var{template}]
14153 @end example
14154
14155 @command{mktemp} は、@var{template} を基にして、安全なテンポラリファイルや
14156 ディレクトリを作成し、その名前を表示する。@var{template} を指定する場合、
14157 その最後の構成部分に少なくとも 3 個の連続する @samp{X} が含まれていなければ
14158 ならない。@var{template} を省略した場合は、@samp{tmp.XXXXXXXXXX} というテンプレート
14159 が使用され、@option{--tmpdir} オプションが暗黙のうちに指定されることになる。
14160 @var{template} 中の @samp{X} が連続する最後の部分は、英数字で置き換えられる。
14161 従って、大文字小文字を区別するファイルシステムなら、テンプレートに
14162 連続する @var{n} 個の @samp{X} が含まれていると、作成されるファイル名には、
14163 62 の @var{n} 乗とおりの可能性があることになる。
14164
14165 昔のスクリプトでは、テンポラリファイルを作成する際、単にプログラムの
14166 名前にプロセス ID (@samp{$$}) を拡張子として付けるのが習慣だった。しかし、
14167 この命名法は、名前の推測が容易であり、従って、競合状態を起こしやすい
14168 という弱点がある。攻撃者としては、テンポラリファイルに使われそうな名前で
14169 シンボリックリンクを作っておけばよい。そうすれば、スクリプトが未使用の
14170 ファイルだと考えて、テンポラリファイルのファイルハンドルを開いたとき、
14171 実際にはすでに存在しているファイルに書き込みをしているという羽目になる。
14172 同じ命名法を使ってディレクトリを作成するのは、もう少し安全である。作成
14173 しようとするディレクトリがすでに存在していると、@command{mkdir} は実行に失敗
14174 するからだ。とは言え、こちらもサービス不能化攻撃 (denial of service
14175 attacks) を可能にしてしまうわけで、やはり良策とは言えない。それ故、
14176 新しいスクリプトでは @command{mktemp} コマンドを使用するべきである。そうすれば、
14177 生成されるファイル名が確実に予測不可能になるので、実行中のスクリプトが
14178 テンポラリファイルの名前を知っているというまさにその事実が、ファイルを
14179 作成したのがそのスクリプトであり、他のユーザはそのファイルを変更でき
14180 ないと、間違いなく示すことになる。
14181
14182 ファイルを作成する場合、作成されるファイルには現在のユーザに対する
14183 読み込みと書き出しの許可が付くが、グループやその他のユーザに対しては、
14184 いかなる許可も付かない。現在の umask がより厳格な場合、付けられる許可は
14185 さらに厳しくなる。
14186
14187 用例をいくつか挙げてみる (ただし、注意していただきたいが、お手元で
14188 この通り実行しても、おそらくファイル名は違ったものになるはずだ)。
14189
14190 @itemize @bullet
14191
14192 @item
14193 カレントディレクトリにテンポラリファイルを作成する。
14194 @example
14195 $ mktemp file.XXXX
14196 file.H47c
14197 @end example
14198
14199 @item
14200 一般的な拡張子を付けて、テンポラリファイルを作成する。
14201 @example
14202 $ mktemp --suffix=.txt file-XXXX
14203 file-H08W.txt
14204 $ mktemp file-XXXX-XXXX.txt
14205 file-XXXX-eI9L.txt
14206 @end example
14207
14208 @item
14209 ユーザが環境変数 @env{TMPDIR} で指定しているディレクトリを基点として、
14210 その下に安全な FIFO を作成する。@env{TMPDIR} が設定されていない場合は、
14211 @file{/tmp} ではなく、カレントディレクトリを基点として使用する。肝腎な
14212 点は、@command{mktemp} は FIFO を作成しないが、FIFO を置くことができる
14213 安全なディレクトリなら作成できるということである。ディレクトリや
14214 FIFO を作成することができなかったときは、シェルを終了する。
14215 @example
14216 $ dir=$(mktemp -p "$@{TMPDIR:-.@}" -d dir-XXXX) || exit 1
14217 $ fifo=$dir/fifo
14218 $ mkfifo "$fifo" || @{ rmdir "$dir"; exit 1; @}
14219 @end example
14220
14221 @item
14222 可能ならば、テンポラリファイルを作成して使用するが、作成に失敗
14223 しても、エラーメッセージを出さない。ファイルは、環境変数 @env{TMPDIR}
14224 が設定されていれば、そこで指名されているディレクトリに作られるが、
14225 設定されていなければ、@file{/tmp} に作られる。
14226 @example
14227 $ file=$(mktemp -q) && @{
14228 >   # $file の使用をこのブロックの内側に限定しておけば、
14229 >   # 安全である。$file を引用符で囲んでいるのは、$TMPDIR が、
14230 >   # 従って、$file が、ホワイトスペースを含んでいるかも
14231 >   # しれないからだ。
14232 >   echo ... > "$file"
14233 >   rm "$file"
14234 > @}
14235 @end example
14236
14237 @item
14238 擬似ランダム文字発生装置として動作する (カレントディレクトリの内容
14239 によって影響を受けるので、完全にランダムではない)。セキュリティ
14240 ホールを避けたいならば、生成された名前を使って、ファイルを作っては
14241 いけない。
14242 @example
14243 $ mktemp -u XXX
14244 Gb9
14245 $ mktemp -u XXX
14246 nzC
14247 @end example
14248
14249 @end itemize
14250
14251 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14252
14253 @table @samp
14254
14255 @item -d
14256 @itemx --directory
14257 @opindex -d
14258 @opindex --directory
14259 ファイルではなく、ディレクトリを作成する。作成されるディレクトリには
14260 現在のユーザに対して、読み、書き、検索の許可が付くが、グループや
14261 その他のユーザに対しては、いかなる許可も付かない。現在の umask が
14262 より厳格な場合、付けられる許可はさらに厳しくなる。
14263
14264 @item -q
14265 @itemx --quiet
14266 @opindex -q
14267 @opindex --quiet
14268 ファイルやディレクトリの作成に失敗しても、エラーメッセージを出さない。
14269 終了ステータスは、ファイルが作成されたかどうかをやはり反映する。
14270
14271 @item -u
14272 @itemx --dry-run
14273 @opindex -u
14274 @opindex --dry-run
14275 既存のファイルの名前と重ならないテンポラリファイル用の名前を生成
14276 するが、ファイルシステムの内容を変更することはない (訳注: 要する
14277 に、テンポラリファイル名を生成表示するだけで、実際にファイルを
14278 作成することはないということ)。このコマンドの出力を使って、新しい
14279 ファイルを作るのは、本質的に安全ではない。名前の生成とその使用との
14280 間には、時間差があり、その間に他のプロセスが同じ名前でオブジェクト
14281 を作成することもありえるからである。
14282
14283 @item -p @var{dir}
14284 @itemx --tmpdir[=@var{dir}]
14285 @opindex -p
14286 @opindex --tmpdir
14287 @var{template} をディレクトリ @var{dir} を基点とする相対パスとして扱う。
14288 @var{dir} が指定されていない場合や (ロングオプションの @option{--tmpdir} でのみ
14289 可能)、空文字列の場合は、環境変数 @env{TMPDIR} が設定されていれば、その
14290 値を使用し、設定されていなければ、@samp{/tmp} を使用する。このオプション
14291 を指定する場合、 @var{template} は絶対パスであってはならない。とは言え、
14292 @var{template} にスラッシュが含まれていても構わないが、その場合、途中に
14293 あるディレクトリはすでに存在していなければならない。
14294
14295 @item --suffix=@var{suffix}
14296 @opindex --suffix
14297 @var{template} の末尾に @var{suffix} を追加する。@var{suffix} はスラッシュを含んで
14298 いてはならない。@option{--suffix} を指定する場合、@var{template} は @samp{X} で終わっ
14299 ていなければならない。@option{--suffix} が指定されていない場合は、@var{template}
14300 中の最後の @samp{X} の位置を調べることで、@var{suffix} としてふさわしいもの
14301 を割り出す。このオプションが存在するのは、デフォルトの @var{template} を
14302 使用しているとき、@samp{X} で始まる @var{suffix} を付けられるようにするため
14303 である。
14304
14305 @item -t
14306 @opindex -t
14307 @var{template} を、環境変数 @env{TMPDIR} が設定されていれば、その値である
14308 ディレクトリ直下の 1 個のファイルとして扱う。@env{TMPDIR} が設定されて
14309 いなければ、@option{-p} で指定されるディレクトリ直下、それ以外の場合は、
14310 @samp{/tmp} 直下になる。なお、@var{template} にスラッシュが含まれていてはなら
14311 ない。このオプションは非推奨である。@option{-t} なしで @option{-p} を使う方が
14312 (@env{TMPDIR} よりコマンドラインの指定を優先するという点で) デフォルト
14313 の動作として優れているし、(途中のディレクトリも指定できるという
14314 点で) 柔軟性も上だからである。
14315
14316 @end table
14317
14318 @cindex exit status of @command{mktemp}
14319 終了ステータス:
14320
14321 @display
14322 0: ファイルが作成された場合。
14323 1: それ以外。
14324 @end display
14325
14326
14327 @node realpath invocation
14328 @section @command{realpath}: ファイル名を展開して表示する
14329
14330 @pindex realpath
14331 @cindex file names, canonicalization
14332 @cindex symlinks, resolution
14333 @cindex canonical file name
14334 @cindex canonicalize a file name
14335 @pindex realpath
14336 @findex realpath
14337
14338 @command{realpath} は、すべてのシンボリックリンクを展開し、@samp{/./} や @samp{/../} に
14339 対する参照を解決する。さらに、余分な @samp{/} 文字の削除も行う。デフォルト
14340 では、指定したファイル名のうち、最後の要素以外のすべての要素が実在して
14341 いなければならない。
14342 @sp 1
14343 書式:
14344
14345 @example
14346 realpath [@var{option}]@dots{} @var{file}@dots{}
14347 @end example
14348
14349 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14350
14351 @table @samp
14352
14353 @item -e
14354 @itemx --canonicalize-existing
14355 @opindex -e
14356 @opindex --canonicalize-existing
14357 指定されたファイル名中のすべての構成要素が実在することを確認する。
14358 存在しなかったり、利用できなかったりする要素があると、@option{-q} オプ
14359 ションが指定されていないかぎり、@command{realpath} はエラーメッセージを
14360 出し、0 以外の終了コードで終了する。ファイル名の末尾にスラッシュ
14361 を付けると、その名前はディレクトリであるという指定になる。
14362
14363 @item -m
14364 @itemx --canonicalize-missing
14365 @opindex -m
14366 @opindex --canonicalize-missing
14367 指定されたファイル名中に存在しなかったり、使用できなかったりする
14368 構成要素があれば、それをディレクトリとして処理する。
14369
14370 @item -L
14371 @itemx --logical
14372 @opindex -L
14373 @opindex --logical
14374 指定されたファイル名中にあるシンボリックリンクを展開する。ただし、
14375 シンボリックリンクに @samp{..} という要素が後続している場合は、シンボ
14376 リックリンクの展開を行う前に、そちらを先に処理する。(訳注: 例を
14377 挙げた方が、わかりやすいだろう。@samp{symlink-directory/../..} といった
14378 ファイル名が与えられた場合、symlink-directory というシンボリック
14379 リンクそのものの親ディレクトリの親ディレクトリに展開するという
14380 こと。次項の注と比較していただきたい。)
14381
14382 @item -P
14383 @itemx --physical
14384 @opindex -P
14385 @opindex --physical
14386 指定されたファイル名中にあるシンボリックリンクを展開する。シンボ
14387 リックリンクに @samp{..} という要素が後続している場合も、シンボリック
14388 リンクを展開してから、@samp{..} の処理を行う。こちらがデフォルトの動作
14389 モードである。(訳注: すなわち、@samp{symlink-directory/../..} といった
14390 ファイル名が与えられた場合、シンボリックリンクの参照先の親ディレ
14391 クトリの親ディレクトリに展開する。)
14392
14393 @item -q
14394 @itemx --quiet
14395 @opindex -q
14396 @opindex --quiet
14397 指定されたファイル名についてエラーメッセージを出力しない。
14398
14399 @item -s
14400 @itemx --strip
14401 @itemx --no-symlinks
14402 @opindex -s
14403 @opindex --strip
14404 @opindex --no-symlinks
14405 シンボリックリンクの展開を行わない。すなわち、@samp{/./} や @samp{/../} の
14406 参照の解決と、余分な @samp{/} 文字の削除だけを行う。@option{-m} オプションと
14407 組み合わせた場合、@command{realpath} は与えられたファイル名に対して操作を
14408 行うだけであり、その各要素が存在しているかどうか、実在のファイルに
14409 当たってみることはない。
14410
14411 @item -z
14412 @itemx --zero
14413 @opindex -z
14414 @opindex --zero
14415 出力する項目を NUL 文字で区切る。
14416
14417 @item --relative-to=@var{file}
14418 @opindex --relative-to
14419 @cindex relpath
14420 オプション引数に指定したファイルを基点とする相対パスとして、
14421 ファイル名を展開する。このオプションは、ファイルの存在に関して
14422 @option{-m} や @option{-e} オプションを認識することに注意していただきたい。
14423
14424 @item --relative-base=@var{base}
14425 @opindex --relative-base
14426 このオプションは @option{--relative-to} と一緒に使うこともでき、その
14427 場合は、操作対象の @var{file} が @var{base} 以下のディレクトリに存在するとき
14428 にのみ、相対パス名を表示するように、@option{--relative-to} の出力に制限
14429 を課す。@var{file} が @var{base} 以下のディレクトリに存在しないときは、出力
14430 は絶対パスのファイル名になる。@option{--relative-to} を指定しなかった
14431 場合、@var{base} 以下のディレクトリに存在するファイルは、@var{base} を基点
14432 とする相対パスで表示される。@option{--relative-to} も指定するなら、その
14433 ディレクトリは @var{base} の下位ディレクトリでなければならず、さもない
14434 と、このオプションは効果を持たない。このオプションは、ファイル
14435 の存在に関して @option{-m} や @option{-e} オプションを認識することに注意して
14436 いただきたい。例を挙げよう。
14437
14438 @example
14439 realpath --relative-to=/usr /tmp /usr/bin
14440 @result{} ../tmp
14441 @result{} bin
14442 realpath --relative-base=/usr /tmp /usr/bin
14443 @result{} /tmp
14444 @result{} bin
14445 @end example
14446
14447 @end table
14448
14449 @cindex exit status of @command{realpath}
14450 終了ステータス:
14451
14452 @display
14453 0: すべてのファイル名が問題なく表示できた場合。
14454 1: それ以外。
14455 @end display
14456
14457
14458 @node Working context
14459 @chapter 作業環境
14460
14461 @cindex working context
14462 @cindex commands for printing the working context
14463
14464 この章では、現在作業中の環境を表示したり、変更したりするコマンドを説明
14465 する。ここで環境というのは、カレントディレクトリ、端末の設定などである。
14466 次章で取り上げるユーザ関係のコマンドも参照していただきたい。
14467
14468 @menu
14469 * pwd invocation::           現在作業中のディレクトリを表示する。
14470 * stty invocation::          端末の諸特性を表示・変更する。
14471 * printenv invocation::      環境変数を表示する。
14472 * tty invocation::           標準出力に接続している端末のファイル名を表示する。
14473 @end menu
14474
14475
14476 @node pwd invocation
14477 @section @command{pwd}: 現在作業中のディレクトリを表示する
14478
14479 @pindex pwd
14480 @cindex print name of current directory
14481 @cindex current working directory, printing
14482 @cindex working directory, printing
14483
14484
14485 @command{pwd} は、カレントディレクトリの名前を表示する。
14486 @sp 1
14487 書式:
14488
14489 @example
14490 pwd [@var{option}]@dots{}
14491 @end example
14492
14493 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14494
14495 @table @samp
14496 @item -L
14497 @itemx --logical
14498 @opindex -L
14499 @opindex --logical
14500 環境変数 @env{PWD} の値が、@samp{.} や @samp{..} を含まないカレントディレクトリ
14501 の絶対パス名であっても、シンボリックリンクは含んでいるかもしれない。
14502 その場合は、その値をそのまま出力する。それ以外の場合は、デフォルトの
14503 @option{-P} オプションと同じ処理を行う。
14504
14505 @item -P
14506 @itemx --physical
14507 @opindex -P
14508 @opindex --physical
14509 カレントディレクトリについて、参照を完全に解決した名前を表示する。
14510 すなわち、表示される名前のすべての要素が、本物のディレクトリの名前
14511 になり、シンボリックリンクは一つも含まれない。
14512 @end table
14513
14514 @cindex symbolic links and @command{pwd}
14515 @option{-L} と @option{-P} のオプションが両方とも指定されている場合は、最後に
14516 指定された方が優先される。どちらのオプションも指定されない場合は、
14517 環境変数  @env{POSIXLY_CORRECT} が設定されていないかぎり、この実装では、
14518 @option{-P} がデフォルトとして使用される。
14519
14520 @mayConflictWithShellBuiltIn{pwd}
14521
14522 @exitstatus
14523
14524
14525 @node stty invocation
14526 @section @command{stty}: 端末の諸特性を表示・変更する
14527
14528 @pindex stty
14529 @cindex change or print terminal settings
14530 @cindex terminal settings
14531 @cindex line settings of terminal
14532
14533 @command{stty} は、たとえばボーレート (baud rate) のような、端末の諸特性を表示、
14534 または変更する。
14535 @sp 1
14536 書式:
14537
14538 @example
14539 stty [@var{option}] [@var{setting}]@dots{}
14540 stty [@var{option}]
14541 @end example
14542
14543 tty ラインの設定 (訳注: 上記書式の @var{setting}) を一つも指定しない場合、
14544 @command{stty} は、ボーレートと (それをサポートしているシステムでは) ライン
14545 制御規則番号 (line discipline number)、それに、ライン設定のうち
14546 @samp{stty sane} によって設定される値から変更のあるものを表示する。デフォルト
14547 では、モードの取得や設定は、標準入力に結びついている tty ラインに
14548 対して行うが、これは @option{--file} オプションによって変更することができる。
14549
14550 @command{stty} では、以下で述べるように、オプションではないたくさんの
14551 引数が使える。そうした引数は、端末ライン運用の様々な面を変更する。
14552
14553 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
14554
14555 @table @samp
14556 @item -a
14557 @itemx --all
14558 @opindex -a
14559 @opindex --all
14560 現在のすべての設定を人間に読みやすい形で表示する。このオプションを
14561 指定したときには、ラインの設定はできない。
14562
14563 @item -F @var{device}
14564 @itemx --file=@var{device}
14565 @opindex -F
14566 @opindex --file
14567 標準入力に結びついている tty ラインを操作の対象にする代わりに、
14568 @var{device} で指定されたファイル名を使ってオープンするラインを操作
14569 の対象にする。このオプションが必要なのは、POSIX 準拠の tty を
14570 オープンするには、@code{O_NONDELAY} フラグを使う必要があるからだ。
14571 そうしないと、POSIX 準拠の tty は、@code{clocal} フラグがセットされて
14572 いない場合に、キャリア検出線 (carrier detect line) が活発化する
14573 まで、ブロッキングを起こす。そんなわけで、デバイスのオープンは、
14574 いつも通りのやり方で (訳注: たとえば、@samp{stty < /dev/ttyS1} といった
14575 形で) シェルにやらせておけばよい、というわけには必ずしも行かない
14576 のである。
14577
14578 @item -g
14579 @itemx --save
14580 @opindex -g
14581 @opindex --save
14582 @cindex machine-readable @command{stty} output
14583 現在の設定を別の @command{stty} コマンドを使って再現する際に、その引数と
14584 して使えるような形で、現在のすべての設定を表示する。このオプション
14585 を指定したときには、ラインの設定はできない。
14586
14587 @end table
14588
14589 設定の多くは、前に @samp{-} を付けることで OFF にすることができる。以下
14590 では、そうした引数については、説明中に「無効化できる」と記しておいた。
14591 説明そのものは、有効にする場合について、すなわち、@samp{-} で OFF にしない
14592 場合について述べている (「無効にした場合」とはっきりことわっている場合
14593 は、もちろん別である)。
14594
14595 設定の中には、すべての POSIX 準拠システムで利用できるとはかぎらない
14596 ものもある。そうしたものは、拡張機能を使用しているからだ。以下では、
14597 そうした引数については、説明中に「非 POSIX」と記しておいた。非 POSIX
14598 のシステムであっても、そうした設定が使えないことがあるかもしれないが、
14599 あらゆる場合について書いておくことは、不可能である。とりあえず、試して
14600 みていただきたい。
14601
14602 @exitstatus
14603
14604 @menu
14605 * Control::                  制御関係の設定
14606 * Input::                    入力に関する設定
14607 * Output::                   出力に関する設定
14608 * Local::                    ローカル設定
14609 * Combination::              組み合わせ設定
14610 * Characters::               特殊文字
14611 * Special::                  特殊設定
14612 @end menu
14613
14614
14615 @node Control
14616 @subsection 制御関係の設定
14617
14618 @cindex control settings
14619 制御関係の設定:
14620
14621 @table @samp
14622 @item parenb
14623 @opindex parenb
14624 @cindex two-way parity
14625 出力にパリティビットを生成し、入力にもパリティビットがあるものと
14626 期待する。無効化できる。
14627
14628 @item parodd
14629 @opindex parodd
14630 @cindex odd parity
14631 @cindex even parity
14632 パリティを奇数に設定する。無効化できる (この設定の場合、@samp{-} の前置
14633 は偶数パリティを意味する)。
14634
14635 @item cmspar
14636 @opindex cmspar
14637 @cindex constant parity
14638 @cindex stick parity
14639 @cindex mark parity
14640 @cindex space parity
14641 "stick" (mark/space) パリティを使用する。parodd が設定されている
14642 場合、このパリティビットは常に 1 である。parodd が設定されていない
14643 場合、このパリティビットは常に 0 だ。非 POSIX。無効化できる。
14644 (coreutils-8.22 の新機能)
14645
14646 @item cs5
14647 @itemx cs6
14648 @itemx cs7
14649 @itemx cs8
14650 @opindex cs@var{n}
14651 @cindex character size
14652 @cindex eight-bit characters
14653 キャラクタ・サイズを 5, 6, 7, 8 ビットにする。
14654
14655 @item hup
14656 @itemx hupcl
14657 @opindex hup[cl]
14658 最後のプロセスが tty をクローズするとき、ハングアップ・シグナルを
14659 送る。無効化できる。
14660
14661 @item cstopb
14662 @opindex cstopb
14663 @cindex stop bits
14664 1 キャラクタにつき 2 個のストップビットを使用する。無効化できる
14665 (この設定の場合、@samp{-} の前置は 1 個のストップビット使用を意味する)。
14666
14667 @item cread
14668 @opindex cread
14669 入力の受信を許可する。無効化できる。
14670
14671 @item clocal
14672 @opindex clocal
14673 @cindex modem control
14674 モデムのコントロール・シグナルを無効にする。無効化できる。
14675
14676 @item crtscts
14677 @opindex crtscts
14678 @cindex hardware flow control
14679 @cindex flow control, hardware
14680 @cindex RTS/CTS flow control
14681 RTS/CTS フロー制御を有効にする。非 POSIX。無効化できる。
14682
14683 @item cdtrdsr
14684 @opindex cdtrdsr
14685 @cindex hardware flow control
14686 @cindex flow control, hardware
14687 @cindex DTR/DSR flow control
14688 DTR/DSR フロー制御を有効にする。非 POSIX。無効化できる。
14689 @end table
14690
14691
14692 @node Input
14693 @subsection 入力に関する設定
14694
14695 @cindex input settings
14696 以下の設定は、端末から受け取るデータに対する操作を制御する。
14697
14698 @table @samp
14699 @item ignbrk
14700 @opindex ignbrk
14701 @cindex breaks, ignoring
14702 ブレーク (break) 文字を無視する。無効化できる。
14703
14704 @item brkint
14705 @opindex brkint
14706 @cindex breaks, cause interrupts
14707 ブレークが割り込みシグナルを発生するようにする。無効化できる。
14708
14709 @item ignpar
14710 @opindex ignpar
14711 @cindex parity, ignoring
14712 パリティエラーのある文字を無視する。無効化できる。
14713
14714 @item parmrk
14715 @opindex parmrk
14716 @cindex parity errors, marking
14717 パリティエラーをマークする (その印として 255, 0 (0xFF, 0x00) という
14718 2 文字の連続を使う)。無効化できる。
14719
14720 @item inpck
14721 @opindex inpck
14722 入力のパリティチェックを有効にする。無効化できる。
14723
14724 @item istrip
14725 @opindex istrip
14726 @cindex eight-bit input
14727 入力文字の高位ビット (8 番目のビット) をクリアする。無効化できる。
14728
14729 @item inlcr
14730 @opindex inlcr
14731 @cindex newline, translating to return
14732 改行文字 (newline) を復帰文字 (carriage return) に変換する。無効化
14733 できる。
14734
14735 @item igncr
14736 @opindex igncr
14737 @cindex return, ignoring
14738 復帰文字を無視する。無効化できる。
14739
14740 @item icrnl
14741 @opindex icrnl
14742 @cindex return, translating to newline
14743 復帰文字を改行文字に変換する。無効化できる。
14744
14745 @item iutf8
14746 @opindex iutf8
14747 @cindex input encoding, UTF-8
14748 入力文字が UTF-8 で符号化されていると見なす。無効化できる。
14749
14750 @item ixon
14751 @opindex ixon
14752 @kindex C-s/C-q flow control
14753 @cindex XON/XOFF flow control
14754 XON/XOFF フロー制御を有効にする (すなわち、@kbd{CTRL-S}/@kbd{CTRL-Q} を
14755 有効にする)。無効化できる。
14756
14757 @item ixoff
14758 @itemx tandem
14759 @opindex ixoff
14760 @opindex tandem
14761 @cindex software flow control
14762 @cindex flow control, software
14763 システムの入力バッファが一杯になりかけたら、@code{stop} 文字を送り、
14764 バッファがほぼ空に戻ったら、@code{start} 文字を送るようにする。
14765 無効化できる。
14766
14767 @item iuclc
14768 @opindex iuclc
14769 @cindex uppercase, translating to lowercase
14770 大文字を小文字に変換する。非 POSIX。無効化できる。ilcuc は実装
14771 されていないことに注意していただきたい。そんなものを有効にしたら、
14772 ほとんどの (小文字である) Unix のコマンドが、打ち込めなくなって
14773 しまうからである。
14774
14775 @item ixany
14776 @opindex ixany
14777 どんな文字でも出力を再開できるようにする (これを無効にすると、start
14778 文字のみが出力を再開する)。非 POSIX。無効化できる。
14779
14780 @item imaxbel
14781 @opindex imaxbel
14782 @cindex beeping at input buffer full
14783 入力バッファが一杯のとき、文字を受け取ると、入力バッファをフラッシュ
14784 せずに、ビープ音を鳴らすようにする。非 POSIX。無効化できる。
14785 @end table
14786
14787
14788 @node Output
14789 @subsection 出力に関する設定
14790
14791 @cindex output settings
14792 以下の設定は、端末に送るデータに対する操作を制御する。
14793
14794 @table @samp
14795 @item opost
14796 @opindex opost
14797 出力に対して後処理 (postprocess) を行う (訳注: すなわち、以下に列挙
14798 するようなことをする)。無効化できる。
14799
14800 @item olcuc
14801 @opindex olcuc
14802 @cindex lowercase, translating to output
14803 小文字を大文字に変換する。非 POSIX。無効化できる。(ouclc は現在の
14804 ところ、実装されていないことに注意。)
14805
14806 @item ocrnl
14807 @opindex ocrnl
14808 @cindex return, translating to newline
14809 復帰文字 (carriage return) を改行文字 (newline) に変換する。
14810 非 POSIX。無効化できる。
14811
14812 @item onlcr
14813 @opindex onlcr
14814 @cindex newline, translating to crlf
14815 改行文字を復帰文字 + 改行文字に変換する。非 POSIX。無効化できる。
14816
14817 @item onocr
14818 @opindex onocr
14819 行頭に復帰文字を出力しない。非 POSIX。無効化できる。
14820
14821 @item onlret
14822 @opindex onlret
14823 改行が復帰として動作する。非 POSIX。無効化できる。
14824
14825 @item ofill
14826 @opindex ofill
14827 @cindex pad instead of timing for delaying
14828 時間で間合いを計る代りに、充填文字 (埋め草文字) を何字か送る
14829 ことで、遅延を行う。非 POSIX。無効化できる。(訳注: 遅延という
14830 のは、端末側の処理が済むまで、データの送出を遅らせること)。
14831
14832 @item ofdel
14833 @opindex ofdel
14834 @cindex pad character
14835 充填文字として ASCII NUL 文字ではなく、ASCII DEL 文字を使う。
14836 非 POSIX。無効化できる。
14837
14838 @item nl1
14839 @itemx nl0
14840 @opindex nl@var{n}
14841 改行 (newline) 用の遅延方式。非 POSIX。
14842
14843 @item cr3
14844 @itemx cr2
14845 @itemx cr1
14846 @itemx cr0
14847 @opindex cr@var{n}
14848 復帰 (carriage return) 用の遅延方式。非 POSIX。
14849
14850 @item tab3
14851 @itemx tab2
14852 @itemx tab1
14853 @itemx tab0
14854 @opindex tab@var{n}
14855 水平タブ用の遅延方式。非 POSIX。
14856
14857 @item bs1
14858 @itemx bs0
14859 @opindex bs@var{n}
14860 バックスペース用の遅延方式。非 POSIX。
14861
14862 @item vt1
14863 @itemx vt0
14864 @opindex vt@var{n}
14865 垂直タブ用の遅延方式。非 POSIX。
14866
14867 @item ff1
14868 @itemx ff0
14869 @opindex ff@var{n}
14870 改ページ (form feed) 用の遅延方式。非 POSIX。
14871 @end table
14872
14873
14874 @node Local
14875 @subsection ローカル設定
14876
14877 @cindex local settings
14878
14879 @table @samp
14880 @item isig
14881 @opindex isig
14882 特殊文字 @code{interrupt}, @code{quit}, @code{suspend} を有効にする。無効化
14883 できる。
14884
14885 @item icanon
14886 @opindex icanon
14887 特殊文字 @code{erase}, @code{kill}, @code{werase}, @code{rprnt} を有効にする。無効化
14888 できる。
14889
14890 @item iexten
14891 @opindex iexten
14892 POSIX にない特殊文字を有効にする。無効化できる。
14893
14894 @item echo
14895 @opindex echo
14896 入力した文字をエコーする。無効化できる。
14897
14898 @item echoe
14899 @itemx crterase
14900 @opindex echoe
14901 @opindex crterase
14902 @code{erase} 文字を「バックスペース、スペース、バックスペース」として
14903 エコーする。無効化できる。
14904
14905 @item echok
14906 @opindex echok
14907 @cindex newline echoing after @code{kill}
14908 @code{kill} 文字に続けて、改行文字をエコーする。無効化できる。
14909
14910 @item echonl
14911 @opindex echonl
14912 @cindex newline, echoing
14913 他の文字のエコーを行わないない場合でも、改行文字はエコーする。
14914 無効化できる。
14915
14916 @item noflsh
14917 @opindex noflsh
14918 @cindex flushing, disabling
14919 特殊文字 @code{interrupt} や @code{quit} の後で、フラッシュを行わない。無効化
14920 できる。
14921
14922 @item xcase
14923 @opindex xcase
14924 @cindex case translation
14925 @code{icanon} が設定されているとき、小文字を表す文字の頭に @samp{\} を付ける
14926 ことで、大文字の入出力を可能にする。非 POSIX。無効化できる。
14927 (訳注: たとえば、大文字しか入出力できない端末で、ただの @samp{A} なら
14928 小文字の a を意味し、@samp{\A} なら大文字の A を意味するということ。
14929 次節「組み合わせ設定」の lcase と termios(3) を参照。)
14930
14931 @item tostop
14932 @opindex tostop
14933 @cindex background jobs, stopping at terminal write
14934 端末に書き込もうとしているバックグラウンドジョブを止める。
14935 非 POSIX。無効化できる。
14936
14937 @item echoprt
14938 @itemx prterase
14939 @opindex echoprt
14940 @opindex prterase
14941 削除した文字を @samp{\} と @samp{/} で囲んで、逆順にエコーする。非 POSIX。
14942 無効化できる。(訳注: プリンタ端末で使用する設定らしい。)
14943
14944 @item echoctl
14945 @itemx ctlecho
14946 @opindex echoctl
14947 @opindex ctlecho
14948 @cindex control characters, using @samp{^@var{c}}
14949 @cindex hat notation for control characters
14950 制御文字をそのまま表示するのではなく、ハット記法 (@samp{^@var{c}}) で
14951 エコーする。非 POSIX。無効化できる。
14952
14953 @item echoke
14954 @itemx crtkill
14955 @opindex echoke
14956 @opindex crtkill
14957 行上の各文字を削除することで、特殊文字 @code{kill} のエコーを行う際、
14958 @code{echoctl} や @code{echok} の設定ではなく、@code{echoprt} や @code{echoe} の設定が
14959 指示するところに従う。非 POSIX。無効化できる。
14960 @end table
14961
14962
14963 @node Combination
14964 @subsection 組み合わせ設定
14965
14966 @cindex combination settings
14967 組み合わせ設定:
14968
14969 @table @samp
14970 @item evenp
14971 @opindex evenp
14972 @itemx parity
14973 @opindex parity
14974 @code{parenb -parodd cs7} に相当する。無効化できる。無効化した場合、
14975 @code{-parenb cs8} と同じになる。
14976
14977 @item oddp
14978 @opindex oddp
14979 @code{parenb parodd cs7} に相当する。無効化できる。無効化した場合、
14980 @code{-parenb cs8} と同じになる。
14981
14982 @item nl
14983 @opindex nl
14984 @code{-icrnl -onlcr} に相当する。無効化できる。無効化した場合、@code{icrnl
14985 -inlcr -igncr onlcr -ocrnl -onlret} と同じになる。
14986
14987 @item ek
14988 @opindex ek
14989 特殊文字 @code{erase} と @code{kill} をデフォルトの値に戻す。
14990
14991 @item sane
14992 @opindex sane
14993 以下の設定に相当する。
14994
14995 @c This is too long to write inline.
14996 @example
14997 cread -ignbrk brkint -inlcr -igncr icrnl -ixoff
14998 -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr
14999 -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0
15000 ff0 isig icanon iexten echo echoe echok -echonl
15001 -noflsh -xcase -tostop -echoprt echoctl echoke
15002 @end example
15003
15004 @noindent
15005 さらに、すべての特殊文字をそのデフォルトの値に設定する。
15006
15007 @item cooked
15008 @opindex cooked
15009 @code{brkint ignpar istrip icrnl ixon opost isig icanon} に相当する。
15010 さらに、特殊文字 @code{eof} と @code{eol} が @code{min} 及び @code{time} 文字と同じ
15011 ならば、@code{eof} と @code{eol} をデフォルトの値に設定する。無効化できる。
15012 無効化した場合は、@code{raw} と同じになる。
15013
15014 @item raw
15015 @opindex raw
15016 以下の設定に相当する。
15017
15018 @example
15019 -ignbrk -brkint -ignpar -parmrk -inpck -istrip
15020 -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany
15021 -imaxbel -opost -isig -icanon -xcase min 1 time 0
15022 @end example
15023
15024 @noindent
15025 無効化できる。無効化した場合は、@code{cooked} と同じになる。
15026
15027 @item cbreak
15028 @opindex cbreak
15029 @option{-icanon} と同じである。無効化できる。無効化した場合は、@code{icanon}
15030 と同じになる。
15031
15032 @item pass8
15033 @opindex pass8
15034 @cindex eight-bit characters
15035 @code{-parenb -istrip cs8} に相当する。無効化できる。無効化した場合は、
15036 @code{parenb istrip cs7} と同じになる。
15037
15038 @item litout
15039 @opindex litout
15040 @option{-parenb -istrip -opost cs8} に相当する。無効化できる。無効化した
15041 場合は、@code{parenb istrip opost cs7} と同じになる。
15042
15043 @item decctlq
15044 @opindex decctlq
15045 @option{-ixany} と同じである。非 POSIX。無効化できる。
15046
15047 @item tabs
15048 @opindex tabs
15049 @code{tab0} と同じである。非 POSIX。無効化できる。無効化した場合は、
15050 @code{tab3} と同じになる。
15051
15052 @item lcase
15053 @itemx LCASE
15054 @opindex lcase
15055 @opindex LCASE
15056 @code{xcase iuclc olcuc} に相当する。非 POSIX。無効化できる。(この設定
15057 は、大文字しか扱えない端末で使用する。)
15058
15059 @item crt
15060 @opindex crt
15061 @code{echoe echoctl echoke} に相当する。
15062
15063 @item dec
15064 @opindex dec
15065 @code{echoe echoctl echoke -ixany intr ^C erase ^? kill ^U} に相当する。
15066 @end table
15067
15068
15069 @node Characters
15070 @subsection 特殊文字
15071
15072 @cindex special characters
15073 @cindex characters, special
15074
15075 特殊文字のデフォルトの値は、システムによって様々である。特殊文字を設定
15076 するには、@samp{name value} という書式を用いる。この name に何が指定できる
15077 かは、以下に列挙するが、value には、文字そのもの、ハット記法 (@samp{^@var{c}})、
15078 整数のいづれかを指定することができる。整数は、@samp{0x} で始まっていれば
15079 16 進数、@samp{0} で始まっていれば 8 進数、それ以外の数字なら 10 進数と
15080 見なされる。
15081
15082 @cindex disabling special characters
15083 @kindex u@r{, and disabling special characters}
15084 GNU の stty では、値に @code{^-} や @code{undef} を指定すると、その特殊文字を
15085 無効にする。(これは、Ultrix の @command{stty} と互換性がない。そこでは、特殊
15086 文字を無効にするには @samp{u} という値が使用されるのだ。GNU の @command{stty} は、
15087 @samp{u} という値を特別扱いしない。すなわち、その特殊文字として @key{U} を設定
15088 するだけである。)
15089
15090 @table @samp
15091
15092 @item intr
15093 @opindex intr
15094 割り込み (interrupt) シグナルを送る。
15095
15096 @item quit
15097 @opindex quit
15098 中止 (quit) シグナルを送る。
15099
15100 @item erase
15101 @opindex erase
15102 直前にタイプした文字を削除する。
15103
15104 @item kill
15105 @opindex kill
15106 現在行を削除する。
15107
15108 @item eof
15109 @opindex eof
15110 ファイル終端 (end of file) 文字を送る (入力を終了する)。
15111
15112 @item eol
15113 @opindex eol
15114 行を終端する。
15115
15116 @item eol2
15117 @opindex eol2
15118 行を終端する別の文字。非 POSIX。
15119
15120 @item swtch
15121 @opindex swtch
15122 シェルの別の層 (a different shell layer) に切り換える。非 POSIX。
15123
15124 @item start
15125 @opindex start
15126 停止している出力を再開する。
15127
15128 @item stop
15129 @opindex stop
15130 出力を停止する。
15131
15132 @item susp
15133 @opindex susp
15134 端末からの停止シグナル (terminal stop signal, SIGTSTP) を送る。
15135
15136 @item dsusp
15137 @opindex dsusp
15138 入力をフラッシュしてから、端末からの停止シグナルを送る。非 POSIX。
15139
15140 @item rprnt
15141 @opindex rprnt
15142 現在行を表示し直す。非 POSIX。
15143
15144 @item werase
15145 @opindex werase
15146 直前にタイプした単語 (word) を削除する。非 POSIX。
15147
15148 @item lnext
15149 @opindex lnext
15150 次にタイプする文字が特殊文字であっても、タイプしたとおりの文字として
15151 入力する。非 POSIX。(訳注: たとえば、lnext が ^V の場合、^V^D と
15152 続けてタイプすると、^D を入力終了の印としてではなく、^D という文字
15153 そのものとして入力できるということ。)
15154 @end table
15155
15156
15157 @node Special
15158 @subsection 特殊設定
15159
15160 @cindex special settings
15161
15162 @table @samp
15163 @item min @var{n}
15164 @opindex min
15165 @option{-icanon} が設定されている際、time の値として指定されている時間が
15166 経過するまでの間に、1 回分の読み込みの条件を満たす最少限の文字数を
15167 設定する。
15168
15169 @item time @var{n}
15170 @opindex time
15171 @option{-icanon} が設定されている際、最小限の文字数が読み込まれなかった
15172 場合に、読み込みが時間切れになるまでの時間を 10 分の 1 秒単位で
15173 設定する。
15174
15175 @item ispeed @var{n}
15176 @opindex ispeed
15177 入力速度を @var{n} に設定する。
15178
15179 @item ospeed @var{n}
15180 @opindex ospeed
15181 出力速度を @var{n} に設定する。
15182
15183 @item rows @var{n}
15184 @opindex rows
15185 端末の行数は @var{n} 行だと、tty カーネルドライバに伝える。非 POSIX。
15186
15187 @item cols @var{n}
15188 @itemx columns @var{n}
15189 @opindex cols
15190 @opindex columns
15191 端末の横幅は @var{n} 桁だと、カーネルに伝える。非 POSIX。
15192
15193 @item size
15194 @opindex size
15195 @vindex LINES
15196 @vindex COLUMNS
15197 端末の行数と桁数を表示する。これは、端末が持っていると、カーネルが
15198 考えている行数と桁数である。(カーネルで行数や桁数をサポートして
15199 いないシステムでは、通常その代わりに、環境変数 @env{LINES} や @env{COLUMNS}
15200 が使用される。それに対して、GNU の @command{stty} は、そうした環境変数
15201 について何も知らない。) 非 POSIX。
15202
15203 @item line @var{n}
15204 @opindex line
15205 ライン制御規則 (line discipline) @var{n} を使用する。非 POSIX。
15206
15207 @item speed
15208 @opindex speed
15209 端末速度を表示する。
15210
15211 @item @var{n}
15212 @cindex baud rate, setting
15213 入出力の速度を @var{n} に設定する。@var{n} には次の一つが使える。0 50 75 110
15214 134 134.5 150 200 300 600 1200 1800 2400 4800 9600 19200 38400
15215 @code{exta} @code{extb}。@code{exta} は 19200 と同じであり、@code{extb} は 38400 と
15216 同じである。GNU/Linux を含む多くのシステムが、もっと早い速度を
15217 サポートしている。@command{stty} は、システムがサポートしているならという
15218 条件で、次の速度もサポートしている。57600 115200 230400 460800
15219 500000 576000 921600 1000000 1152000 1500000 2000000 2500000
15220 3000000 3500000 4000000。なお、0 は、@option{-clocal} が設定されている場合
15221 に、ラインを切断する。
15222 @end table
15223
15224
15225 @node printenv invocation
15226 @section @command{printenv}: 環境変数のすべて、あるいは一部を表示する
15227
15228 @pindex printenv
15229 @cindex printing all or some environment variables
15230 @cindex environment variables, printing
15231
15232 @command{printenv} は、環境変数の値を表示する。
15233 @sp 1
15234 書式:
15235
15236 @example
15237 printenv [@var{option}] [@var{variable}]@dots{}
15238 @end example
15239
15240 @var{variable} が一つも指定されていない場合、@command{printenv} はすべての環境変数
15241 の値を表示する。@var{variable} が指定されている場合は、その変数それぞれに
15242 ついて、設定されていれば値を表示し、設定されていなければ何も表示しない。
15243
15244 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
15245
15246 @table @samp
15247
15248 @optNull{printenv}
15249
15250 @end table
15251
15252 @cindex exit status of @command{printenv}
15253 終了ステータス:
15254
15255 @display
15256 0: 指定されているすべての変数が見つかった。
15257 1: 指定されている変数のうちに、見つからなかったものがある。
15258 2: 書き込みエラーが生じた。
15259 @end display
15260
15261
15262 @node tty invocation
15263 @section @command{tty}: 標準出力に接続している端末のファイル名を表示する
15264
15265 @pindex tty
15266 @cindex print terminal file name
15267 @cindex terminal file name, printing
15268
15269 @command{tty} は、自分の標準入力に接続している端末のファイル名を表示する。
15270 標準入力が端末ではない場合は、@samp{not a tty} というメッセージを出す。
15271 @sp 1
15272 書式:
15273
15274 @example
15275 tty [@var{option}]@dots{}
15276 @end example
15277
15278 このプログラムでは、以下のオプションが使える。参照: @ref{Common options}.
15279
15280 @table @samp
15281
15282 @item -s
15283 @itemx --silent
15284 @itemx --quiet
15285 @opindex -s
15286 @opindex --silent
15287 @opindex --quiet
15288 何も表示しない。終了ステータスを返すだけ。
15289
15290 @end table
15291
15292 @cindex exit status of @command{tty}
15293 終了ステータス:
15294
15295 @display
15296 0: 標準入力が端末である。
15297 1: 標準入力が端末ではない。
15298 2: 指定した引数が正しくない。
15299 3: 書き込みエラーが生じた。
15300 @end display
15301
15302
15303 @node User information
15304 @chapter ユーザ情報
15305
15306 @cindex user information, commands for
15307 @cindex commands for printing user information
15308
15309 この章では、ユーザ関係の情報を表示するコマンドの説明をする。誰がログイン
15310 しているか、どんなグループに所属しているか、などである。
15311
15312 @menu
15313 * id invocation::        ユーザの ID を表示する。
15314 * logname invocation::   現在のログイン名を表示する。
15315 * whoami invocation::    実効ユーザ ID を表示する。
15316 * groups invocation::    ユーザが所属しているグループ名を表示する。
15317 * users invocation::     現在ログインしている全ユーザのログイン名を表示する。
15318 * who invocation::       現在誰がログインしているかを表示する。
15319 @end menu
15320
15321
15322 @node id invocation
15323 @section @command{id}: ユーザの ID を表示する
15324
15325 @pindex id
15326 @cindex real user and group IDs, printing
15327 @cindex effective user and group IDs, printing
15328 @cindex printing real and effective user and group IDs
15329
15330 @command{id} は、指定されたユーザについて情報を表示する。ユーザが指定されて
15331 いない場合は、@command{id} を実行しているプロセスについて情報を表示する。
15332 @sp 1
15333 書式:
15334
15335 @example
15336 id [@var{option}]@dots{} [@var{user}]
15337 @end example
15338
15339 @var{user} にはユーザ ID (番号) とユーザ名のどちらも使えるが、ID が頭に
15340 @samp{+} を付けて指定されていないかぎり、まずユーザ名として検索が行われる。
15341
15342 @vindex POSIXLY_CORRECT
15343 デフォルトで表示するのは、実ユーザ ID、実グループ ID、実効ユーザ ID
15344 (実ユーザ ID と違う場合)、実効グループ ID (実グループID と違う場合)、
15345 それに、補助 (supplemental) グループ ID である。さらに、SELinux が
15346 有効になっていて、環境変数 @env{POSIXLY_CORRECT} が設定されていない場合は、
15347 @samp{context=@var{c}} も表示する。この @var{c} はセキュリティ・コンテキストである。
15348
15349 表示される各数値には、それが何であるかを示す文字列が前に付き、対応
15350 するユーザ名やグループ名がカッコで囲まれて後ろに続く。
15351
15352 オプションを指定すると、@command{id} は上で述べた情報のうち、一部のみを表示
15353 する。参照: @ref{Common options}.
15354
15355 @table @samp
15356 @item -g
15357 @itemx --group
15358 @opindex -g
15359 @opindex --group
15360 グループ ID のみ表示する。
15361
15362 @item -G
15363 @itemx --groups
15364 @opindex -G
15365 @opindex --groups
15366 グループ ID と補助グループ ID のみ表示する。
15367
15368 @item -n
15369 @itemx --name
15370 @opindex -n
15371 @opindex --name
15372 ID 番号の代りに、ユーザ名やグループ名を表示する。@option{-u}, @option{-g}, @option{-G}
15373 の一つを指定する必要がある。
15374
15375 @item -r
15376 @itemx --real
15377 @opindex -r
15378 @opindex --real
15379 実効ユーザや実効グループの ID ではなく、実ユーザや実グループの ID
15380 を表示する。@option{-u}, @option{-g}, @option{-G} のどれか一つを指定する必要がある。
15381
15382 @item -u
15383 @itemx --user
15384 @opindex -u
15385 @opindex --user
15386 ユーザ ID のみ表示する。
15387
15388 @item -Z
15389 @itemx --context
15390 @opindex -Z
15391 @opindex --context
15392 @cindex SELinux
15393 @cindex security context
15394 実行中のユーザのセキュリティ・コンテキストのみを表示する。SELinux
15395 が無効になっている場合は、警告メッセージを出し、終了ステータスを
15396 1 にする。
15397
15398 @item -z
15399 @itemx --zero
15400 @opindex -z
15401 @opindex --zero
15402 出力する項目を NUL 文字で区切る。このオプションは、デフォルトの
15403 フォーマットを使用しているときは、使うことができない。
15404 (coreutils-8.22 の新機能)
15405
15406 用例:
15407 @example
15408 $ id -Gn --zero
15409 users <NUL> devs <NUL>
15410 @end example
15411
15412 @end table
15413
15414 @macro primaryAndSupplementaryGroups{cmd,arg}
15415 プロセスの基本 (primary) グループや 補助 (supplementary) グループは、
15416 通常その親プロセスから継承され、ログイン後ずっと変わらないのが普通だ。
15417 従って、ログイン後にグループ・データベースを変更しても、現在のログイン
15418 セッションが続いている間は、@command{\cmd\} コマンドはその変更を反映しない。
15419 しかし、\arg\を指定して @command{\cmd\} を実行した場合は、ユーザ・
15420 データベースやグループ・データベースの参照が改めて行われるので、
15421 変更した結果が表示されることになる。
15422 @end macro
15423 @primaryAndSupplementaryGroups{id,引数にユーザの名前}
15424
15425 @exitstatus
15426
15427 @node logname invocation
15428 @section @command{logname}: 現在のログイン名を表示する
15429
15430 @pindex logname
15431 @cindex printing user's login name
15432 @cindex login name, printing
15433 @cindex user name, printing
15434
15435 @flindex utmp
15436 @command{logname} は、自分を呼び出したユーザの名前を、システムが管理して
15437 いるファイル (たいていは @file{/var/run/utmp} か @file{/etc/utmp}) で調べて
15438 表示し、ステータス 0 で終了する。自分を呼び出しているプロセスの
15439 エントリが存在しない場合は、@command{logname} はエラーメッセージを出し、
15440 ステータス 1 で終了する。
15441
15442 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15443 options}.
15444
15445 @exitstatus
15446
15447
15448 @node whoami invocation
15449 @section @command{whoami}: 実効ユーザ ID を表示する
15450
15451 @pindex whoami
15452 @cindex effective user ID, printing
15453 @cindex printing the effective user ID
15454
15455 @command{whoami} は、現在の実効ユーザ ID に対応するユーザ名を表示する。
15456 @samp{id -un} コマンドと同じことである。
15457
15458 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15459 options}.
15460
15461 @exitstatus
15462
15463
15464 @node groups invocation
15465 @section @command{groups}: ユーザが所属しているグループ名を表示する
15466
15467 @pindex groups
15468 @cindex printing groups a user is in
15469 @cindex supplementary groups, printing
15470
15471 @command{groups} は、@var{username} が指定されていれば、指定された各ユーザの基本
15472 (primary) グループ名と補助 (supplementary) グループ名を表示し、
15473 ユーザ名が指定されていなければ、現在のプロセスの基本グループ名と
15474 補助グループ名を表示する。複数の名前が指定されている場合は、
15475 各ユーザの名前がグループのリストの前に置かれ、両者の間はコロンで
15476 区切られる。
15477 @sp 1
15478 書式:
15479
15480 @example
15481 groups [@var{username}]@dots{}
15482 @end example
15483
15484 グループのリストは、@samp{id -Gn} コマンドの出力と同じである。
15485
15486 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15487 options}.
15488
15489 @primaryAndSupplementaryGroups{groups,ユーザのリスト}
15490
15491 @exitstatus
15492
15493 @node users invocation
15494 @section @command{users}: 現在ログインしている全ユーザのログイン名を表示する
15495
15496 @pindex users
15497 @cindex printing current usernames
15498 @cindex usernames, printing current
15499
15500 @cindex login sessions, printing users with
15501 @command{users} は、目下使用しているホストに現在ログインしている全ユーザの
15502 ユーザ名のリストを、空白で区切って 1 行に表示する。ユーザ名はログイン
15503 セッションごとに表示されるので、あるユーザが複数のログインセッションを
15504 行っていれば、そのユーザの名前はログインセッションの数だけ出力に現れる
15505 ことになる。
15506 @sp 1
15507 書式:
15508
15509 @example
15510 users [@var{file}]
15511 @end example
15512
15513 @flindex utmp
15514 @flindex wtmp
15515 引数 @var{file} の指定がない場合、@command{users} はシステムが管理するファイル
15516 (たいていは @file{/var/run/utmp} か @file{/etc/utmp}) からログインしているユーザの
15517 情報を引き出す。引数 @var{file} が指定されている場合は、代りにそのファイルを
15518 使用する。@file{/var/log/wtmp} が使われることが多い。
15519
15520 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
15521 options}.
15522
15523 @exitstatus
15524
15525
15526 @node who invocation
15527 @section @command{who}: 現在誰がログインしているかを表示する
15528
15529 @pindex who
15530 @cindex printing current user information
15531 @cindex information, about current users
15532
15533 @command{who} は、現在ログインしているユーザについての情報を表示する。
15534 @sp 1
15535 書式:
15536
15537 @example
15538 @command{who} [@var{option}] [@var{file}] [am i]
15539 @end example
15540
15541 @cindex terminal lines, currently used
15542 @cindex login time
15543 @cindex remote hostname
15544 オプション以外の引数が一つもない場合、@command{who} は現在ログインしている
15545 各ユーザについて、次の情報を表示する。ログイン名、端末ライン、ログイン
15546 日時、それにリモート・ホスト名か X ディスプレー名。
15547
15548 @flindex utmp
15549 @flindex wtmp
15550 オプション以外の引数を一つだけ指定すると、@command{who} はそれを、ログイン
15551 したユーザを記録しているファイルの名前として、システムが管理している
15552 デフォルトのファイル (たいていは @file{/var/run/utmp} か @file{/etc/utmp}) の
15553 代りに使用する。@command{who} に引数として @file{/var/log/wtmp} を渡して、これまでに
15554 誰がログインしたかを調べるのはよくあることである。
15555
15556 @opindex am i
15557 @opindex who am i
15558 オプション以外の引数を二つ指定すると、@command{who} は、自分を実行している
15559 ユーザの情報のみを (自分が接続している標準入力からユーザの見当を
15560 付けて)、ホスト名を前に付けて表示する。渡される二つの引数は、
15561 全体として @samp{who am i} になるように、@samp{am i} とするのが慣例である。 
15562
15563 @vindex TZ
15564 タイムスタンプは、タイムゾーンのルールに従って表示されるが、その
15565 ルールを指定しているのは、環境変数 @env{TZ} である。@env{TZ} が設定されて
15566 いない場合は、システムのデフォルトのルールに従って表示される。
15567 @xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
15568 The GNU C Library Reference Manual}.
15569
15570 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
15571
15572 @table @samp
15573
15574 @item -a
15575 @itemx --all
15576 @opindex -a
15577 @opindex --all
15578 @samp{-b -d --login -p -r -t -T -u} と同じである。
15579
15580 @item -b
15581 @itemx --boot
15582 @opindex -b
15583 @opindex --boot
15584 システムをブートした直近の日時を表示する。
15585
15586 @item -d
15587 @itemx --dead
15588 @opindex -d
15589 @opindex --dead
15590 終了したプロセスに関する情報を表示する。
15591
15592 @item -H
15593 @itemx --heading
15594 @opindex -H
15595 @opindex --heading
15596 最初の行に各列の見出しを表示する。
15597
15598 @item -l
15599 @itemx --login
15600 @opindex -l
15601 @opindex --login
15602 現在システムがログインの窓口としてユーザを待ち受けているプロセス
15603 に関する情報のみを表示する。ユーザ名は常に @samp{LOGIN} である。
15604
15605 @item --lookup
15606 @opindex --lookup
15607 utmp で見つかったホスト名について DNS を検索して正規名を得ようと
15608 する。これがデフォルトになっていないのは、インターネットに自動
15609 ダイアルアップで接続しているシステムでは、深刻な遅滞を招きかねない
15610 からである。
15611
15612 @item -m
15613 @opindex -m
15614 @samp{who am i} と同じである。
15615
15616 @item -p
15617 @itemx --process
15618 @opindex -p
15619 @opindex --process
15620 init によって生み出されたプロセスのうち、現在活動中のものをリスト
15621 する。
15622
15623 @item -q
15624 @itemx --count
15625 @opindex -q
15626 @opindex --count
15627 ログインしているユーザのログイン名と人数のみを表示する。他のすべての
15628 オプションを無効にする。
15629
15630 @item -r
15631 @itemx --runlevel
15632 @opindex -r
15633 @opindex --runlevel
15634 init プロセスの現在のランレベルを表示する (たぶん、直前のラン
15635 レベルも)。
15636
15637 @item -s
15638 @opindex -s
15639 無視する。他の版の @command{who} との互換性のためにある。
15640
15641 @item -t
15642 @itemx --time
15643 @opindex -t
15644 @opindex --time
15645 システムクロックを最後に変更した日時を表示する。
15646
15647 @item -u
15648 @opindex -u
15649 @cindex idle time
15650 ログイン日時の後ろに、ユーザが何時間何分端末を使用していないかを
15651 (idle 状態かを) 表示する。@samp{.} は、ユーザがここ 1 分以内に端末操作
15652 をしたことを意味する。@samp{old} は、ユーザが 24 時間以上端末を使用
15653 していないいうことである。
15654
15655 @item -w
15656 @itemx -T
15657 @itemx --mesg
15658 @itemx --message
15659 @itemx --writable
15660 @opindex -w
15661 @opindex -T
15662 @opindex --mesg
15663 @opindex --message
15664 @opindex --writable
15665 @cindex message status
15666 @pindex write@r{, allowed}
15667 ログイン名の後ろに、ユーザのメッセージ受け入れ状態を示す 1 文字を
15668 表示する。
15669
15670 @display
15671 @samp{+} @code{write} によるメッセージを受け入れる。
15672 @samp{-} @code{write} によるメッセージを拒否する。
15673 @samp{?} 端末デバイスが見つからない。
15674 @end display
15675
15676 @end table
15677
15678 @exitstatus
15679
15680
15681 @node System context
15682 @chapter システム情報
15683
15684 @cindex system context
15685 @cindex context, system
15686 @cindex commands for system context
15687
15688 この章では、システム全体に関わる情報を表示したり、変更したりするコマンドを
15689 説明する。
15690
15691 @menu
15692 * date invocation::          システムの日付や時刻を表示、設定する。
15693 * arch invocation::          マシンのハードウェア名を表示する。
15694 * nproc invocation::         プロセッサの数を表示する。
15695 * uname invocation::         システムについて情報を表示する。
15696 * hostname invocation::      システム名を表示、設定する。
15697 * hostid invocation::        数値によるホストの識別名を表示する。
15698 * uptime invocation::        システムの連続稼働時間と負荷を表示する。
15699 @end menu
15700
15701 @node date invocation
15702 @section @command{date}: システムの日付や時刻を表示、設定する
15703
15704 @pindex date
15705 @cindex time, printing or setting
15706 @cindex printing the current time
15707
15708 書式:
15709
15710 @example
15711 date [@var{option}]@dots{} [+@var{format}]
15712 date [-u|--utc|--universal] @c this avoids a newline in the output
15713 [ MMDDhhmm[[CC]YY][.ss] ]
15714 @end example
15715
15716 @vindex LC_TIME
15717 @command{date} を @var{format} 引数なしで起動すると、デフォルトの書式を指定して
15718 起動するのと同じことになる。デフォルトの書式は、@env{LC_TIME} ロケール・
15719 カテゴリによって様々である。デフォルトの C ロケールの場合、その書式は
15720 @samp{'+%a %b %e %H:%M:%S %Z %Y'} なので、出力は @samp{Thu Mar @ 3 13:47:51 PST
15721 2005}
15722 のような形になる。
15723
15724 @vindex TZ
15725 通常 @command{date} は、環境変数 @env{TZ} が指示しているタイムゾーンのルールを
15726 使用し、@env{TZ} が設定されていないときは、システムのデフォルトのルールを
15727 使用する。@xref{TZ Variable,, Specifying the Time Zone with @env{TZ}, libc,
15728 The GNU C Library Reference Manual}.
15729
15730 @findex strftime @r{and @command{date}}
15731 @cindex time formats
15732 @cindex formatting times
15733 @samp{+} で始まる引数を指定すると、@command{date} は現在の日付と時刻を (あるいは、
15734 後述する @option{--date} オプションで指定した日付と時刻を)、その引数によって
15735 定義された書式で表示する。書式を指定するこの引数は、@code{strftime} 関数の
15736 それとほぼ同じである。なお、@samp{%} で始まる変換指定子を除いて、書式文字列
15737 中の文字は、変更されずにそのまま表示される。変換指定子については、次節
15738 以降で説明する。
15739
15740 @exitstatus
15741
15742 @menu
15743 * Time conversion specifiers:: 時刻関係の変換指定子 %[HIklMNpPrRsSTXzZ]。
15744 * Date conversion specifiers:: 日付関係の変換指定子 %[aAbBcCdDeFgGhjmuUVwWxyY]。
15745 * Literal conversion specifiers::  文字変換指定子 %[%nt]。
15746 * Padding and other flags::  0 や空白による空き埋め、その他。
15747 * Setting the time::         システムクロックの変更。
15748 * Options for date::         現在の日時以外の指定。
15749 @detailmenu
15750 * Date input formats::       日付文字列の指定法。
15751 @end detailmenu
15752 * Examples of date::         用例。
15753 @end menu
15754
15755 @node Time conversion specifiers
15756 @subsection 時刻関係の変換指定子
15757
15758 @cindex time conversion specifiers
15759 @cindex conversion specifiers, time
15760
15761 @command{date} の時刻関係の変換指定子
15762
15763 @table @samp
15764 @item %H
15765 時 (@samp{00}@dots{}@samp{23})
15766 @item %I
15767 時 (@samp{01}@dots{}@samp{12})
15768 @item %k
15769 時。一桁のときは、0 ではなく、空白で埋める (@samp{ 0}@dots{}@samp{23})。@samp{%_H} と
15770 同じ。これは GNU の拡張である。
15771 @item %l
15772 時。一桁のときは、0 ではなく、空白で埋める (@samp{ 1}@dots{}@samp{12})。@samp{%_I} と
15773 同じ。これは GNU の拡張である。
15774 @item %M
15775 分 (@samp{00}@dots{}@samp{59})
15776 @item %N
15777 ナノ秒 (@samp{000000000}@dots{}@samp{999999999})。これは GNU の拡張である。
15778 @item %p
15779 現在のロケールで @samp{AM} や @samp{PM} に相当するもの。空白になるロケール
15780 も多い。正午は @samp{PM} として、真夜中は @samp{AM} として扱う。
15781 @item %P
15782 @samp{%p} と同様だが、小文字を使う。これは GNU の拡張である。
15783 @item %r
15784 現在のロケールによる 12 時間表記の時刻 (例: @samp{11:11:04 PM})
15785 @item %R
15786 24 時間表記の時と分。@samp{%H:%M} と同じ。
15787 @item %s
15788 @cindex epoch, seconds since
15789 @cindex seconds since the epoch
15790 @cindex beginning of time
15791 @cindex leap seconds
15792 ジ・エポック (the epoch、Unix 紀元)、すなわち 1970-01-01 00:00:00 UTC
15793 からの経過秒数。閏秒のサポートを利用できない場合、閏秒は計算に
15794 入れない。用例については、「@command{date} の用例」を見ること。
15795 @xref{%s-examples}. これは GNU の拡張である。
15796 @item %S
15797 @cindex leap seconds
15798 秒 (@samp{00}@dots{}@samp{60})。閏秒がサポートされている場合、@samp{60} になることが
15799 ある。
15800 @item %T
15801 24 時間表記の時、分、秒。@samp{%H:%M:%S} と同じ。
15802 @item %X
15803 現在のロケールによる時刻表示 (例: @samp{23:13:48})
15804 @item %z
15805 @w{RFC 2822/ISO 8601} 形式の数値によるタイムゾーン (たとえば、@samp{-0600} や
15806 @samp{+0530})。タイムゾーンが特定できない場合は、空になる。この値は、
15807 環境変数 @env{TZ} によって指定されたタイムゾーンのルールを使用する
15808 ことで、現在の日時に対応した、数値によるタイムゾーンを正しく反映
15809 する (訳注: 要するに、夏時間、冬時間が存在する地帯では、それを
15810 反映するということ)。操作の対象となる日時は (もしそうしたければ、
15811 その日時におけるタイムゾーンのルールも)、@option{--date} オプションに
15812 よって変更することができる。
15813 @item %:z
15814 @w{RFC 3339/ISO 8601} 形式の、@samp{:} を使用する数値によるタイムゾーン
15815 (たとえば、@samp{-06:00} や @samp{+05:30})。タイムゾーンが特定できない
15816 場合は、空になる。これは GNU による拡張である。
15817 @item %::z
15818 @samp{:} を使用する数値によるタイムゾーンで、もっとも近い秒まで表示する
15819 (たとえば、@samp{-06:00:00} や @samp{+05:30:00})。タイムゾーンが特定できない
15820 場合は、空になる。これは GNU による拡張である。
15821 @item %:::z
15822 @samp{:} を使用する数値によるタイムゾーンで、時間の精度は必要最小限で
15823 済ます (たとえば、@samp{-06}, @samp{+05:30}, @samp{-04:56:02})。タイムゾーンが
15824 特定できない場合は、空になる。これは GNU による拡張である。
15825 @item %Z
15826 アルファベットによるタイムゾーンの略称 (たとえば、@samp{EDT})。タイム
15827 ゾーンが特定できない場合は、空になる。タイムゾーンがどのようにして
15828 特定されるか (訳注: たとえば、アメリカ東部なら、EST (冬時間) と EDT
15829 (夏時間) のどちらが選ばれるか) については、@samp{%z} を参照すること。
15830 @end table
15831
15832
15833 @node Date conversion specifiers
15834 @subsection 日付関係の変換指定子
15835
15836 @cindex date conversion specifiers
15837 @cindex conversion specifiers, date
15838
15839 @command{date} の日付関係の変換指定子。
15840
15841 @table @samp
15842 @item %a
15843 現在のロケールによる曜日の省略形 (例: @samp{Sun})
15844 @item %A
15845 現在のロケールによる曜日の省略しない表現。長さは不定 (例: @samp{Sunday})
15846 @item %b
15847 現在のロケールによる月名の省略形 (例: @samp{Jan})
15848 @item %B
15849 現在のロケールによる月名の省略しない表現。長さは不定 (例: @samp{January})
15850 @item %c
15851 現在のロケールによる日付と時刻 (例: @samp{Thu Mar @ 3 23:05:25 2005})
15852 @item %C
15853 世紀。@samp{%Y} に似ているが、下二桁を省略している。たとえば、@samp{%Y} が
15854 @samp{2000} ならば、@samp{%C} は @samp{20}、@samp{%Y} が @samp{-001} ならば、@samp{%C}
15855 は @samp{-0}
15856 である。通例、少なくとも 2 個の文字からなるが、2 個以上のことも
15857 ありえる。
15858 @item %d
15859 その月の何日目か (e.g., @samp{01})
15860 @item %D
15861 日付。@samp{%m/%d/%y} と同じ
15862 @item %e
15863 その月の何日目か。一桁のときは、0 ではなく、空白で埋める。@samp{%_d}
15864 と同じ。
15865 @item %F
15866 ISO 8601 形式の完全な日付。@samp{%Y-%m-%d} と同じ。日付の形式にこれを
15867 選ぶのは、好判断である。標準的な形式だし、年度が 0000@dots{}9999 の
15868 範囲にある通常の場合に、ソートしやすい。
15869 @item %g
15870 ISO 週番号に対応する年度表示だが、世紀の部分を省略している (その
15871 結果、@samp{00} から @samp{99} の範囲になる)。これは普通 @samp{%y} と同じ形式、
15872 同じ値になるが、ISO 週番号 (@samp{%V} 参照) が前年、または翌年に
15873 属する場合は、そちらの年度が代りに使用される点が異なる。
15874 @item %G
15875 ISO 週番号に対応する年度表示。これは普通 @samp{%Y} と同じ形式、同じ値
15876 になるが、ISO 週番号 (@samp{%V} 参照) が前年、または翌年に属する場合は、
15877 そちらの年度が代りに使用される点が異なる。通常、これが役に立つのは、
15878 @samp{%V} も一緒に使用するときだけである。たとえば、@samp{%G-%m-%d} という
15879 書式は、ISO 週番号による年度と普段使用する月や日を組み合わせている
15880 ので、たぶん指定の仕方を間違えている。
15881 @item %h
15882 @samp{%b} と同じ。
15883 @item %j
15884 その年の何日目か (@samp{001}@dots{}@samp{366})
15885 @item %m
15886 月 (@samp{01}@dots{}@samp{12})
15887 @item %u
15888 その週の何日目か (@samp{1}@dots{}@samp{7})。@samp{1} は月曜日に当たる。
15889 @item %U
15890 日曜日を週の最初の日とする、その年の週番号 (@samp{00}@dots{}@samp{53})。新しい
15891 年の最初の日曜日より前の日々は、第 0 週に属する。
15892 @item %V
15893 ISO 週番号。すなわち、月曜日を週の最初の日とする、その年の週番号
15894 (@samp{01}@dots{}@samp{53})。1 月 1 日を含む週が、新しい年の日々を 4 日以上含む
15895 場合は、その週が第 1 週であると見なされる。そうでない場合は、
15896 その週は前年の第 53 週であり、翌週が第 1 週になる。(ISO 8601 の
15897 規格を参照。)
15898 @item %w
15899 その週の何日目か (@samp{0}@dots{}@samp{6})。0 は日曜日に当たる。
15900 @item %W
15901 月曜日を週の最初の日とする、その年の週番号 (@samp{00}@dots{}@samp{53})。最初の
15902 月曜日より前の新しい年の日々は、第 0 週に属する。
15903 @item %x
15904 現在のロケールによる日付の表示 (例: @samp{12/31/99})
15905 @item %y
15906 年度の下二桁 (@samp{00}@dots{}@samp{99})
15907 @item %Y
15908 年度。通例、少なくとも 4 文字だが、もっと多いこともある。@samp{0000} 年は
15909 @samp{0001} の前年であり、@samp{-001} 年は @samp{0000} の前年である。
15910 @end table
15911
15912
15913 @node Literal conversion specifiers
15914 @subsection 文字変換指定子
15915
15916 @cindex literal conversion specifiers
15917 @cindex conversion specifiers, literal
15918
15919 日付や時刻以外の @command{date} の変換指定子。
15920
15921 @table @samp
15922 @item %%
15923 1 個の % という文字
15924 @item %n
15925 改行
15926 @item %t
15927 水平タブ
15928 @end table
15929
15930
15931 @node Padding and other flags
15932 @subsection 空き埋めなどのフラグ
15933
15934 @cindex numeric field padding
15935 @cindex padding of numeric fields
15936 @cindex fields, padding numeric
15937
15938 特に指定がないかぎり、@command{date} は通常、数値の入るフィールドの空きを
15939 0 で埋める。従って、たとえば、数値による月名は常に二桁の数字として
15940 出力される。しかし、ジ・エポック (Unix 紀元) 以来の経過秒数では、
15941 空きを埋めることはしない。この秒数には決まった長さがないからである。
15942
15943 GNU の拡張として、以下に挙げるフラグの一つを @samp{%} の後ろに置くことが
15944 できる (指定するしないは自由)。
15945
15946 @table @samp
15947 @item -
15948 (ハイフン) フィールドの空き埋めをしない。出力が人間に見せるための
15949 ものである場合に、役に立つ。
15950 @item _
15951 (アンダースコア、下線) 空白で空き埋めをする。出力を一定の文字数に
15952 する必要があるが、0 で埋めたのでは見にくいという場合に、役に立つ。
15953 @item 0
15954 (ゼロ) 変換指定子が普通なら空白で埋める場合にも、ゼロで空き埋めを
15955 する。
15956 @item ^
15957 可能なら、大文字を使う。
15958 @item #
15959 可能なら、反対の文字を使う。通常大文字のフィールドは小文字になり、
15960 小文字のフィールドは大文字になる。
15961 @end table
15962
15963 @noindent
15964 空き埋めの例をいくつか挙げておく。
15965
15966 @example
15967 date +%d/%m -d "Feb 1"
15968 @result{} 01/02
15969 date +%-d/%-m -d "Feb 1"
15970 @result{} 1/2
15971 date +%_d/%_m -d "Feb 1"
15972 @result{}  1/ 2
15973 @end example
15974
15975 これも GNU の拡張だが、フィールドの幅を 10 進数で指定することができ
15976 る (数字は、上記のフラグがあれば、その後ろに置く)。そのフィールドの
15977 出力の加工前の長さが、幅として指定した文字数より短い場合は、右詰めに
15978 して、指定サイズにまで空き埋めした結果が書き出される。たとえば、@samp{%9B}
15979 は、右詰めにした月の名前を 9 文字分のフィールドに表示する。
15980
15981 上記のフラグやフィールド幅の指定の後ろに、修飾子 (modifier) を付ける
15982 こともできる (指定するしないは自由)。修飾子には、次のものがある。
15983
15984 @table @samp
15985 @item E
15986 現在のロケールが持つもう一つの日時表記を使用する。この修飾子は、
15987 @samp{%c}, @samp{%C}, @samp{%x}, @samp{%X}, @samp{%y}, @samp{%Y}
15988 に対して使用できる。たとえば、
15989 日本語ロケールで @samp{%Ex} とすれば、元号による日付を表示するだろう。
15990
15991 @item O
15992 現在のロケールが持つもう一つの数字表記を使用する。この修飾子は、
15993 数値を表す変換指定子にしか使用できない。
15994 @end table
15995
15996 書式が修飾子をサポートしていても、もう一つの表記が利用できない場合、
15997 修飾子は無視される。
15998
15999
16000 @node Setting the time
16001 @subsection システムクロックの設定
16002
16003 @cindex setting the time
16004 @cindex time setting
16005 @cindex appropriate privileges
16006
16007 @samp{+} で始まらない引数を指定すると、@command{date} は、(以下で述べるように) その
16008 引数で指定した日時にシステムクロックを設定する。システムクロックを設定
16009 するには、しかるべき権限が必要である。リブート後も変更を維持するには、
16010 システムクロックに合わせてハードウェアクロックも更新する必要があるかも
16011 しれないことに注意していただきたい。ご使用のシステムでは、ハードウェア
16012 クロックの更新は、自動的に行われないかもしれないからだ。
16013
16014 引き数の構成要素は、すべて数字でなければならない。それは以下の意味を
16015 持っている。
16016 @sp 1
16017 (訳注: 念のため、この章の冒頭にあるシステムクロック設定用の書式を
16018 再掲しておく。date [-u|--utc|--universal] [ MMDDhhmm[[CC]YY][.ss] ])
16019
16020 @table @samp
16021 @item MM
16022 何月
16023 @item DD
16024 (何月の) 何日
16025 @item hh
16026 何時
16027 @item mm
16028 何分
16029 @item CC
16030 年度の上二桁 (省略可)
16031 @item YY
16032 年度の下二桁 (省略可)
16033 @item ss
16034 何秒 (省略可)
16035 @end table
16036
16037 注意していただきたいが、@option{--date} や @option{--set} オプションは、ここで
16038 述べている書式の引数と組み合わせて使うことができない。@option{--universal}
16039 オプションは、ここで述べている書式の引数と一緒に使うことができるが、
16040 その場合、指定されている日時が現在地のタイムゾーンではなく、協定世界時
16041 (UTC) に準じているのを示すことになる。
16042
16043
16044 @node Options for date
16045 @subsection @command{date} のオプション
16046
16047 @cindex @command{date} options
16048 @cindex options for @command{date}
16049
16050 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16051
16052 @table @samp
16053
16054 @item -d @var{datestr}
16055 @itemx --date=@var{datestr}
16056 @opindex -d
16057 @opindex --date
16058 @cindex parsing date strings
16059 @cindex date strings, parsing
16060 @cindex arbitrary date strings, parsing
16061 @opindex yesterday
16062 @opindex tomorrow
16063 @opindex next @var{day}
16064 @opindex last @var{day}
16065 現在の日時の代りに、日付文字列 @var{datestr} で指定した日時を表示する。
16066 @var{datestr} には、よく使われる書式なら、ほとんどどんな書式でも使う
16067 ことができる。月の名前、タイムゾーン、@samp{am} や @samp{pm}、@samp{yesterday}
16068 といった単語、などを含んでいてもよい。たとえば、@option{--date="2004-02-27
16069 14:19:13.489392193 +0530"} は、UTC よりも東 5 時間 30 分のタイム
16070 ゾーンで 2004 年 2 月 27 日 午後 2 時 19 分 13 秒から 489,392,193
16071 ナノ秒経過した瞬間を指定している。
16072 @*注意: 現在のところ、入力は、ロケールに依存しない書式でなければ
16073 ならない。たとえば、以下の例の LC_TIME=C は、多くのロケールで正しい
16074 日時を再表示させるために必要である。
16075 @example
16076 date -d "$(LC_TIME=C date)"
16077 @end example
16078 参照: @xref{Date input formats}.
16079
16080 @item -f @var{datefile}
16081 @itemx --file=@var{datefile}
16082 @opindex -f
16083 @opindex --file
16084 @var{datefile} の各行を @option{-d} の場合と同じように解析して、生成された日付
16085 と時刻を表示する。@var{datefile} が @samp{-} ならば、標準入力を使用する。処理
16086 する日付がたくさんある場合に、このオプションは重宝である。何故ならば、
16087 @command{date} コマンドを何度も起動するときのシステムのオーバーヘッドは、
16088 馬鹿にならないことがあるからだ。
16089
16090 @item -I[@var{timespec}]
16091 @itemx --iso-8601[=@var{timespec}]
16092 @opindex -I[@var{timespec}]
16093 @opindex --iso-8601[=@var{timespec}]
16094 ISO 8601 の書式、@samp{%Y-%m-%d} を使って、日付を表示する。
16095
16096 引数 @var{timespec} では、日付の後ろに時刻をどの単位まで追加するかを
16097 指定する。以下の一つを指定することができる。
16098 @table @samp
16099 @item date
16100 日付のみを表示する。@var{timespec} を省略した場合のデフォルト。
16101
16102 @item hours
16103 日付にその日の何時かを追加する。
16104
16105 @item minutes
16106 何時何分まで追加する。
16107
16108 @item seconds
16109 何時何分何秒まで追加する。
16110
16111 @item ns
16112 何時何分何秒何ナノ秒まで追加する。
16113 @end table
16114
16115 時刻の部分まで表示するときは、@samp{%z} の書式でタイムゾーンも付ける。
16116
16117 @item -r @var{file}
16118 @itemx --reference=@var{file}
16119 @opindex -r
16120 @opindex --reference
16121 現在の日付と時刻の代りに、@var{file} の内容を最後に更新した (the last
16122 modification) 日付と時刻を表示する。
16123
16124 @item -R
16125 @itemx --rfc-822
16126 @itemx --rfc-2822
16127 @opindex -R
16128 @opindex --rfc-822
16129 @opindex --rfc-2822
16130 日付と時刻を @samp{%a, %d %b %Y %H:%M:%S %z} という書式を使用し、C
16131 ロケールで評価して表示する。従って、月や曜日の省略形は常に英語に
16132 なる。一例を挙げると、こんな表示である。
16133
16134 @example
16135 Fri, 09 Sep 2005 13:51:39 -0700
16136 @end example
16137
16138 この書式は、@uref{ftp://ftp.rfc-editor.org/in-notes/rfc2822.txt, Internet RFC
16139 2822}
16140 と @uref{ftp://ftp.rfc-editor.org/in-notes/rfc822.txt, RFC 822} に従っている。
16141 インターネットの E メールに関する現在と以前の規格である。
16142
16143 @item --rfc-3339=@var{timespec}
16144 @opindex --rfc-3339=@var{timespec}
16145 @uref{ftp://ftp.rfc-editor.org/in-notes/rfc3339.txt, Internet RFC 3339}
16146 が規定している書式を使用して、日付を表示する。この書式は、ISO 8601
16147 の書式のサブセットだが、日付と時刻を区切るのに、@samp{T} という文字では
16148 なく、空白を使うことをアプリケーションに許している、という相違点も
16149 ある。他の標準の書式とは違って、RFC 3339 の書式は、現在のロケール
16150 が何であろうとも、@option{--date} (@option{-d}) や @option{--file} (@option{-f})
16151 オプションに
16152 対する入力として常に適切である。
16153
16154 引数 @var{timespec} では、時刻をどこまで表示するかを指定する。以下の一つ
16155 を指定することができる。
16156
16157 @table @samp
16158 @item date
16159 年から始まる日付だけを表示する。たとえば、@samp{2005-09-14}。これは、
16160 @samp{%Y-%m-%d} という書式と等価ある。
16161
16162 @item seconds
16163 年から始まる日付と秒までの時刻を表示し、両者の間は空白で区切る。
16164 一例を挙げると、@samp{2005-09-14 00:56:06+05:30}。出力の末尾には、
16165 協定世界時からの時差が付く。例の場合、@samp{+05:30} は、地方時が
16166 UTC より 5 時間 30 分進んでいることを意味している。これは、
16167 @samp{%Y-%m-%d %H:%M:%S%:z} という書式と等価である。
16168
16169 @item ns
16170 @samp{seconds} と似ているが、ナノ秒まで表示する。一例を挙げると、
16171 @samp{2005-09-14 00:56:06.998458565+05:30}。これは、@samp{%Y-%m-%d
16172 %H:%M:%S.%N%:z} という書式と等価である。
16173
16174 @end table
16175
16176 @item -s @var{datestr}
16177 @itemx --set=@var{datestr}
16178 @opindex -s
16179 @opindex --set
16180 日付と時刻を @var{datestr} に設定する。上記の @option{-d} を参照。前節「システム
16181 クロックの設定」 も参照すること。@ref{Setting the time}.
16182
16183 @item -u
16184 @itemx --utc
16185 @itemx --universal
16186 @opindex -u
16187 @opindex --utc
16188 @opindex --universal
16189 @cindex Coordinated Universal Time
16190 @cindex UTC
16191 @cindex Greenwich Mean Time
16192 @cindex GMT
16193 @cindex leap seconds
16194 @vindex TZ
16195 環境変数 @env{TZ} が、文字列 @samp{UTC0} に設定されているかのように、処理に
16196 協定世界時 (UTC, Coordinated Universal Time) を使用する。協定世界時
16197 は、歴史的な理由から「グリニッジ標準時 (GMT)」と呼ばれることもよく
16198 ある。一般にシステムは閏秒を無視するので、日時は正真の UTC では
16199 なく、UTC の近似値になる。
16200 @end table
16201
16202
16203 @node Examples of date
16204 @subsection @command{date} の使用例
16205
16206 @cindex examples of @command{date}
16207
16208 用例をいくつか挙げてみる。前節の @option{-d} オプションの説明も参照して
16209 いただきたい。
16210
16211 @itemize @bullet
16212
16213 @item
16214 一昨日の日付を表示する。
16215
16216 @example
16217 date --date='2 days ago'
16218 @end example
16219
16220 @item
16221 今から 3 ヶ月と 1 日後の日付けを表示する。
16222
16223 @example
16224 date --date='3 months 1 day'
16225 @end example
16226
16227 @item
16228 今年のクリスマスは年の初めから何日目かを表示する。
16229
16230 @example
16231 date --date='25 Dec' +%j
16232 @end example
16233
16234 @item
16235 今日が何月何日かを、省略しない月の名前で表示する。
16236
16237 @example
16238 date '+%B %d'
16239 @end example
16240
16241 しかし、月の最初の 9 日間では、@samp{%d} は空きを 0 で埋めた 2 桁の
16242 フィールドに展開されるので、この結果はご希望のものとは違うかも
16243 しれない。たとえば、@samp{date -d 1may '+%B %d'} の出力は、@samp{May 01} に
16244 なるのだ。
16245
16246 @item
16247 月のうちの 1 桁の日々に対して、先頭に 0 を付けずに日付を表示したい
16248 のなら、(GNU の拡張である) @samp{-} フラグを使用すれば、空き埋めを全く
16249 しないようにすることができる。
16250
16251 @example
16252 date -d 1may '+%B %-d'
16253 @end example
16254
16255 @item
16256 現在の日付と時刻を、non-GNU 版の @command{date} の多くでシステムクロックを
16257 設定するときに要求される書式で表示する。
16258
16259 @example
16260 date +%m%d%H%M%Y.%S
16261 @end example
16262
16263 @item
16264 システムクロックを 2 分進める。
16265
16266 @example
16267 date --set='+2 minutes'
16268 @end example
16269
16270 @item
16271 日付を RFC 2822 の書式で表示するためには、@samp{date --rfc-2822} を使用
16272 する。ここに示すのは、出力の一例である。
16273
16274 @example
16275 Fri, 09 Sep 2005 13:51:39 -0700
16276 @end example
16277
16278 @anchor{%s-examples}
16279 @item
16280 日付を表す文字列をジ・エポック (the epoch、Unix 紀元、すなわち、
16281 1970-01-01 00:00:00 UTC) からの経過秒数に変換するには、@option{--date}
16282 オプションを @samp{%s} 書式と組み合わせて使用する。これは、データを日付
16283 によってソートしたり、グラフ化したり、比較したりする際に、便利
16284 である。次のコマンドは、ジ・エポックから 2 分経ったときの、
16285 ジ・エポックからの経過秒数を出力する。
16286
16287 @example
16288 date --date='1970-01-01 00:02:00 +0000' +%s
16289 120
16290 @end example
16291
16292 日付を表す文字列でタイムゾーン情報を指定しない場合、@command{date} は、
16293 コンピュータが認識しているタイムゾーンを使用して、その文字列を
16294 解釈する。たとえば、使用しているコンピュータのタイムゾーンが、
16295 マサチューセッツ州のケンブリッジのものならば、それは UTC より
16296 5 時間遅れているので、次のようになる。
16297
16298 @example
16299 # 現在地のタイムゾーンを使用
16300 date --date='1970-01-01 00:02:00' +%s
16301 18120
16302 @end example
16303
16304 @item
16305 日付の付いたデータをソートしたり、グラフ化したりしているとしよう。
16306 その日付の加工前の値は、ジ・エポックからの経過秒数で表されている
16307 かもしれない。もっとも、@samp{946684800} といった日付を見て、「ああ、
16308 イギリスのグリニッジの 2000 年の最初の 0 秒だね」と、さりげなく
16309 言える人は、めったにいないけれど。
16310
16311 @example
16312 date --date='2000-01-01 UTC' +%s
16313 946684800
16314 @end example
16315
16316 なお、上と同じ結果は、@option{--utc} (@option{-u}) オプションを使っても得られ、
16317 その場合は、日付を表す文字列で @samp{UTC} を省略することができる。
16318 とは言え、@option{--utc} を使う方法は、@samp{%s} を始め、多くの書式文字列では、
16319 日付文字列で @samp{UTC} を使うのと同じ結果をもたらすものの、協定世界時
16320 からの時差が 0 ではないタイムゾーンでは、@samp{%z} など、タイムゾーン
16321 によって値が変わってくる書式文字列に対しては、異なる結果をもたらす
16322 ことになるだろう。
16323
16324 @example
16325 date -u --date=2000-01-01 +%s
16326 946684800
16327 @end example
16328
16329 こうした秒数という扱いにくいデータをもっと読みやすい形に変換し直す
16330 には、次のようなコマンドを使う。
16331
16332 @smallexample
16333 # 現在地のタイムゾーンを使用
16334 date -d '1970-01-01 UTC 946684800 seconds' +"%Y-%m-%d %T %z"
16335 1999-12-31 19:00:00 -0500
16336 @end smallexample
16337
16338 coreutils 5.3.0 以来使用できるようになった @samp{@@} という表記に頼っても
16339 構わないなら、上記のコマンドを短くすることができる。
16340
16341 @smallexample
16342 date -d @@946684800 +"%F %T %z"
16343 1999-12-31 19:00:00 -0500
16344 @end smallexample
16345
16346 UTC の日付や時刻を出力した方がよいことも多い。
16347
16348 @smallexample
16349 date -u -d '1970-01-01 946684800 seconds' +"%Y-%m-%d %T %z"
16350 2000-01-01 00:00:00 +0000
16351 @end smallexample
16352
16353 @item
16354 @cindex leap seconds
16355 閏秒は秒数計算に入れないのが一般的だが、例外的なシステムもある。
16356 閏秒は予測できないものなので、閏秒を計算に入れる例外的なシステム
16357 では、秒数による計算と未来の日時との対応は信頼性に欠ける。
16358
16359 一般的なシステムと例外的なシステムの両者が、2012-06-30 23:59:60 UTC
16360 の閏秒をどのように処理しているかを以下に示す。
16361
16362 @example
16363 # 一般的なシステムは閏秒を無視する:
16364 date --date='2012-06-30 23:59:59 +0000' +%s
16365 1341100799
16366 date --date='2012-06-30 23:59:60 +0000' +%s
16367 date: invalid date '2012-06-30 23:59:60 +0000'
16368 date --date='2012-07-01 00:00:00 +0000' +%s
16369 1341100800
16370 @end example
16371
16372 @example
16373 # 例外的なシステムは閏秒をカウントする:
16374 date --date='2012-06-30 23:59:59 +0000' +%s
16375 1341100823
16376 date --date='2012-06-30 23:59:60 +0000' +%s
16377 1341100824
16378 date --date='2012-07-01 00:00:00 +0000' +%s
16379 1341100825
16380 @end example
16381
16382 @end itemize
16383
16384
16385 @node arch invocation
16386 @section @command{arch}: マシンのハードウェア名を表示する
16387
16388 @pindex arch
16389 @cindex print machine hardware name
16390 @cindex system information, printing
16391
16392 @command{arch} は、マシンのハードウェア名を表示する。@samp{uname -m} と同じこと
16393 である。
16394 @sp 1
16395 書式:
16396
16397 @example
16398 arch [@var{option}]
16399 @end example
16400
16401 このプログラムでは、共通オプションしか使用できない。@ref{Common options}.
16402
16403 @exitstatus
16404
16405
16406 @node nproc invocation
16407 @section @command{nproc}: 利用できるプロセッサの個数を表示する
16408
16409 @pindex nproc
16410 @cindex Print the number of processors
16411 @cindex system information, printing
16412
16413 カレントプロセスが利用できるプロセシング・ユニットの個数を表示する。
16414 それは、稼働しているプロセッサの数より少ないかもしれない。そうした
16415 情報が取得できない場合は、搭載されているプロセッサの数を表示する。
16416 環境変数 @env{OMP_NUM_THREADS} が設定されている場合は、その変数が、返さ
16417 れる値を決めることになる。なお、結果は必ず 0 より大きくなる。
16418 @sp 1
16419 書式:
16420
16421 @example
16422 nproc [@var{option}]
16423 @end example
16424
16425 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16426
16427 @table @samp
16428
16429 @item --all
16430 @opindex --all
16431 システムに搭載されているプロセッサの数を表示する。それは、稼働して
16432 いるプロセッサや、カレントプロセスが利用できるプロセッサの数より
16433 多いかもしれない。このオプションを付けた場合、環境変数
16434 @env{OMP_NUM_THREADS} は考慮されない。
16435
16436 @item --ignore=@var{number}
16437 @opindex --ignore
16438 可能ならば、@var{number} 個のプロセシング・ユニットを除外する。
16439
16440 @end table
16441
16442 @exitstatus
16443
16444
16445 @node uname invocation
16446 @section @command{uname}: システムについて情報を表示する
16447
16448 @pindex uname
16449 @cindex print system information
16450 @cindex system information, printing
16451
16452 @command{uname} は、自分がその上で実行されているマシンとオペレーティング・
16453 システムについて情報を表示する。オプションが一つも指定されない場合は、
16454 @option{-s} オプションが指定されたかのように振る舞う。
16455 @sp 1
16456 書式:
16457
16458 @example
16459 uname [@var{option}]@dots{}
16460 @end example
16461
16462 複数のオプションや @option{-a} オプションが指定された場合、選択された情報は
16463 次の順番で表示される。
16464
16465 @example
16466 @var{kernel-name} @var{nodename} @var{kernel-release} @var{kernel-version}
16467 @var{machine} @var{processor} @var{hardware-platform} @var{operating-system}
16468 @end example
16469
16470 個々の情報が空白を含んでいることがある。そうした場合、出力のどこから
16471 どこまでが、ある情報に当たるかを判断することは難しい。以下の例で @var{release}
16472 に当たるのは、@samp{2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001} の部分である。
16473 @sp 1
16474 (訳注: @var{release} が @var{kernel-release} のことならば、それに相当するのは
16475 @samp{2.2.18} だけである。#4 から 2001 までは @var{kernel-version}。原文は両者を
16476 合わせて、@var{release} と言っているのかもしれない。なお、以下の例はちょっと
16477 古い。最近の @command{uname -a} では、@option{-a} オプションの説明にあるように、unknown
16478 の部分は表示されないはずである。)
16479
16480 @smallexample
16481 uname -a
16482 @result{} Linux dumdum 2.2.18 #4 SMP Tue Jun 5 11:24:08 PDT 2001 i686@c
16483  unknown unknown GNU/Linux
16484 @end smallexample
16485
16486
16487 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16488
16489 @table @samp
16490
16491 @item -a
16492 @itemx --all
16493 @opindex -a
16494 @opindex --all
16495 以下の情報をすべて表示する。ただし、プロセッサ・タイプとハードウェア・
16496 プラットホームは、unknown ならば省略する。
16497
16498 @item -i
16499 @itemx --hardware-platform
16500 @opindex -i
16501 @opindex --hardware-platform
16502 @cindex implementation, hardware
16503 @cindex hardware platform
16504 @cindex platform, hardware
16505 ハードウェア・プラットホームの名前を表示する (ハードウェア実装と
16506 呼ばれることもある)。この情報がカーネルから簡単に取得できるように
16507 なっていない場合は、@samp{unknown} と表示する。Linux のカーネルがその
16508 一例である。
16509
16510 @item -m
16511 @itemx --machine
16512 @opindex -m
16513 @opindex --machine
16514 @cindex machine type
16515 @cindex hardware class
16516 @cindex hardware type
16517 マシンのハードウェア名を表示する (ハードウェア・クラスとかハード
16518 ウェア・タイプと呼ばれることもある)。
16519
16520 @item -n
16521 @itemx --nodename
16522 @opindex -n
16523 @opindex --nodename
16524 @cindex hostname
16525 @cindex node name
16526 @cindex network node name
16527 ネットワークノードのホスト名を表示する。
16528
16529 @item -p
16530 @itemx --processor
16531 @opindex -p
16532 @opindex --processor
16533 @cindex host processor type
16534 プロセッサ・タイプを表示する (命令セット体系、the instruction
16535 set architecture、ISA などと呼ばれることもある)。この情報が
16536 カーネルから簡単に取得できるようになっていない場合は、@samp{unknown} と
16537 表示する。Linux のカーネルがその一例である。
16538
16539 @item -o
16540 @itemx --operating-system
16541 @opindex -o
16542 @opindex --operating-system
16543 @cindex operating system name
16544 オペレーティング・システムの名前を表示する。
16545
16546 @item -r
16547 @itemx --kernel-release
16548 @opindex -r
16549 @opindex --kernel-release
16550 @cindex kernel release
16551 @cindex release of kernel
16552 カーネルのリリース名を表示する。
16553
16554 @item -s
16555 @itemx --kernel-name
16556 @opindex -s
16557 @opindex --kernel-name
16558 @cindex kernel name
16559 @cindex name of kernel
16560 カーネル名を表示する。POSIX 1003.1-2001 では (@pxref{Standards
16561 conformance})、これを「オペレーティング・システムの実装」と
16562 呼んでいる。POSIX の仕様には、カーネルという概念がないから
16563 である。カーネル名は、@option{-o} や  @option{--operating-system} オプション
16564 で表示されるオペレーティング・システム名と同じかもしれないし、
16565 違うかもしれない。オペレーティング・システムによって、基盤と
16566 なっているカーネルと名前が同じものもあれば (FreeBSD, HP-UX など)、
16567 違うものもある (GNU/Linux, Solaris など) からである。
16568
16569 @item -v
16570 @itemx --kernel-version
16571 @opindex -v
16572 @opindex --kernel-version
16573 @cindex kernel version
16574 @cindex version of kernel
16575 カーネルのバージョンを表示する。
16576
16577 @end table
16578
16579 @exitstatus
16580
16581
16582 @node hostname invocation
16583 @section @command{hostname}: システムの名前を表示、または設定する
16584
16585 @pindex hostname
16586 @cindex setting the hostname
16587 @cindex printing the hostname
16588 @cindex system name, printing
16589 @cindex appropriate privileges
16590
16591 @command{hostname} は、引数なしで実行すると、使用しているホストシステムの
16592 名前を表示する。引数を一つ付けると、使用しているホストの名前を指定
16593 された文字列に設定する。ホストの名前を設定するには、しかるべき権限が
16594 必要である。
16595 @sp 1
16596 書式:
16597
16598 @example
16599 hostname [@var{name}]
16600 @end example
16601
16602 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
16603 options}.
16604
16605 @exitstatus
16606
16607
16608 @node hostid invocation
16609 @section @command{hostid}: 数値によるホストの識別名を表示する
16610
16611 @pindex hostid
16612 @cindex printing the host identifier
16613
16614 @command{hostid} は、使用しているホストの数値による識別名を 16 進数で表示する。
16615 このコマンドは引数を取らない。使用できるオプションは、@option{--help} と
16616 @option{--version} だけである。@xref{Common options}.
16617
16618 たとえば、筆者が使っているシステムの一つでは、次のように表示される。
16619
16620 @example
16621 $ hostid
16622 1bac013d
16623 @end example
16624
16625 たまたまこのシステムでは、識別名の 32 ビットの数値が、システムの
16626 インターネット・アドレスと密接な関係を持っているが、いつでもそうとは
16627 かぎらない。
16628
16629 @exitstatus
16630
16631 @node uptime invocation
16632 @section @command{uptime}: システムの連続稼働時間と負荷を表示する
16633
16634 @pindex uptime
16635 @cindex printing the system uptime and load
16636
16637 @command{uptime} は、現在の時刻、システムの連続稼働時間、ログインしているユーザ
16638 の数、それに現在の平均負荷 (load average) を表示する。
16639
16640 引数を指定すると、ユーザが何人ログインしているかを知るために読み込む
16641 ファイルとして、その引数が使用される。引数を指定しない場合は、システムの
16642 デフォルトが使用される (@command{uptime --help} を実行すれば、デフォルトの設定が
16643 わかる)。
16644
16645 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
16646 options}.
16647
16648 たとえば、以下の例は、筆者が使っているシステムの一つで、ちょうど今表示
16649 されたものだ。
16650
16651 @example
16652 $ uptime
16653  14:07  up   3:35,  3 users,  load average: 1.39, 1.15, 1.04
16654 @end example
16655
16656 細かいことを言うと、平均負荷の計算方法は、システムによっていくらか
16657 異なっている。あるシステムでは、ここ 1 分間、5 分間、15 分間の、実行
16658 可能状態のプロセスの平均数として計算されるが、別のシステムでは、割り込み
16659 不可能なスリープ状態のプロセスも含めている (すなわち、ディスク I/O を
16660 待っているプロセスだ)。Linux のカーネルは、割り込み不可能なプロセスを
16661 含める方である。
16662
16663 @node SELinux context
16664 @chapter SELinux コンテキスト
16665
16666 @cindex SELinux context
16667 @cindex SELinux, context
16668 @cindex commands for SELinux context
16669
16670 この章では、SELinux コンテキスト関係の操作を行うコマンドを説明する。
16671
16672 @menu
16673 * chcon invocation::     ファイルの SELinux コンテキストを変更する
16674 * runcon invocation::    指定された SELinux コンテキストでコマンドを実行する
16675 @end menu
16676
16677 @node chcon invocation
16678 @section @command{chcon}: ファイルの SELinux コンテキストを変更する
16679
16680 @pindex chcon
16681 @cindex changing security context
16682 @cindex change SELinux context
16683
16684 @command{chcon} は、指定されたファイルの SELinux セキュリティ・コンテキストを
16685 変更する。
16686 @sp 1
16687 書式:
16688
16689 @smallexample
16690 chcon [@var{option}]@dots{} @var{context} @var{file}@dots{}
16691 chcon [@var{option}]@dots{} [-u @var{user}] [-r @var{role}] [-l @var{range}]@c
16692  [-t @var{type}] @var{file}@dots{}
16693 chcon [@var{option}]@dots{} --reference=@var{rfile} @var{file}@dots{}
16694 @end smallexample
16695
16696 各 @var{file} の SELinux セキュリティ・コンテキストを @var{context} に変更する。
16697 @option{--reference} オプションを使用した場合は、各 @var{file} のセキュリティ・
16698 コンテキストを @var{rfile} のそれに変更する。
16699
16700 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16701
16702 @table @samp
16703
16704 @item --dereference
16705 @opindex --dereference
16706 シンボリックリンクそのものではなく、リンクが指しているものを操作の
16707 対象にする。これがデフォルトである。
16708
16709 @item -h
16710 @itemx --no-dereference
16711 @opindex -h
16712 @opindex --no-dereference
16713 @cindex no dereference
16714 参照先のファイルではなく、シンボリックリンクそのものを操作の対象
16715 にする。
16716
16717 @item --reference=@var{rfile}
16718 @opindex --reference
16719 @cindex reference file
16720 @var{context} の値を直接指定する代わりに、@var{rfile} のセキュリティ・
16721 コンテキストを使用する。
16722
16723 @item -R
16724 @itemx --recursive
16725 @opindex -R
16726 @opindex --recursive
16727 ファイルやディレクトリに対して再帰的に動作する。
16728
16729 @item --preserve-root
16730 @opindex --preserve-root
16731 @option{--recursive} オプションと一緒に使ったとき、ルートディレクトリ (@file{/})
16732 に対して再帰的に動作することを拒否する。 @xref{Treating / specially}.
16733
16734 @item --no-preserve-root
16735 @opindex --no-preserve-root
16736 @option{--recursive} オプションと一緒に使ったとき、ルートディレクトリ (@file{/})
16737 を特別扱いしない。こちらがデフォルトの動作である。 @xref{Treating / specially}.
16738
16739 @choptH @xref{Traversing symlinks}.
16740
16741 @choptL @xref{Traversing symlinks}.
16742
16743 @choptP @xref{Traversing symlinks}.
16744
16745 @item -v
16746 @itemx --verbose
16747 @opindex -v
16748 @opindex --verbose
16749 @cindex diagnostic
16750 処理したすべてのファイルについてメッセージを表示する。
16751
16752 @item -u @var{user}
16753 @itemx --user=@var{user}
16754 @opindex -u
16755 @opindex --user
16756 操作対象のセキュリティ・コンテキストのユーザを @var{user} にする。
16757
16758 @item -r @var{role}
16759 @itemx --role=@var{role}
16760 @opindex -r
16761 @opindex --role
16762 操作対象のセキュリティ・コンテキストのロールを @var{role} にする。
16763
16764 @item -t @var{type}
16765 @itemx --type=@var{type}
16766 @opindex -t
16767 @opindex --type
16768 操作対象のセキュリティ・コンテキストのタイプを @var{type} にする。
16769
16770 @item -l @var{range}
16771 @itemx --range=@var{range}
16772 @opindex -l
16773 @opindex --range
16774 操作対象のセキュリティ・コンテキストのセキュリティ・レベルの
16775 範囲を @var{range} にする。
16776
16777 @end table
16778
16779 @exitstatus
16780
16781 @node runcon invocation
16782 @section @command{runcon}: 指定された SELinux コンテキストでコマンドを実行する。
16783
16784 @pindex runcon
16785 @cindex run with security context
16786
16787
16788 @command{runcon} は、指定された SELinux セキュリティ・コンテキストでファイルを
16789 実行する。
16790
16791 書式:
16792 @smallexample
16793 runcon @var{context} @var{command} [@var{args}]
16794 runcon [ -c ] [-u @var{user}] [-r @var{role}] [-t @var{type}]@c
16795  [-l @var{range}] @var{command} [@var{args}]
16796 @end smallexample
16797
16798 セキュリティ・コンテキストのすべてを @var{context} で指定して、@var{command} を
16799 実行する。あるいは、現在の、または遷移後のセキュリティ・コンテキストの
16800 うち、@var{user}, @var{role}, @var{type}, @var{level} (訳注: 上の書式で言えば
16801 @var{range}) の一つ以上
16802 を変更して、@var{command} を実行する。
16803
16804 @option{-c}, @option{-u}, @option{-r}, @option{-t}, @option{-l}
16805 のどのオプションも指定されていない場合
16806 は、最初の引数が完全なコンテキストとして使用される。@var{command} の後ろに続く
16807 引数があれば、それはそのコマンドに対する引数と見なされる。
16808
16809 @var{context} と @var{command} のどちらも指定されていない場合は、現在の
16810 セキュリティ・コンテキストを表示する。
16811
16812 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16813
16814 @table @samp
16815
16816 @item -c
16817 @itemx --compute
16818 @opindex -c
16819 @opindex --compute
16820 セキュリティ・コンテキストの変更を行う前に、プロセスの遷移による
16821 コンテキストを求めておく。
16822
16823 @item -u @var{user}
16824 @itemx --user=@var{user}
16825 @opindex -u
16826 @opindex --user
16827 操作対象のセキュリティ・コンテキストのユーザを @var{user} にする。
16828
16829 @item -r @var{role}
16830 @itemx --role=@var{role}
16831 @opindex -r
16832 @opindex --role
16833 操作対象のセキュリティ・コンテキストのロールを @var{role} にする。
16834
16835 @item -t @var{type}
16836 @itemx --type=@var{type}
16837 @opindex -t
16838 @opindex --type
16839 操作対象のセキュリティ・コンテキストのタイプを @var{type} にする。
16840
16841 @item -l @var{range}
16842 @itemx --range=@var{range}
16843 @opindex -l
16844 @opindex --range
16845 操作対象のセキュリティ・コンテキストのセキュリティ・レベルの
16846 範囲を @var{range} にする。
16847
16848 @end table
16849
16850 @cindex exit status of @command{runcon}
16851 終了ステータス:
16852
16853 @display
16854 126: @var{command} が見つかったが、起動できなかった。
16855 127: @command{runcon} そのものの実行に失敗した。あるいは、@var{command} が
16856      見つからなかった。
16857 それ以外は、@var{command} の終了ステータス。
16858 @end display
16859
16860 @node Modified command invocation
16861 @chapter コマンド実行条件の変更
16862
16863 @cindex modified command invocation
16864 @cindex invocation of commands, modified
16865 @cindex commands for invoking other commands
16866
16867 この章で説明するコマンドは、他のコマンドを現在の条件とは違った条件で
16868 実行するものである。たとえば、環境を変更して実行する、別のユーザとして
16869 実行するといったコマンドだ。
16870 @sp 1
16871 (訳注: 「別のユーザとして実行する」というのは、@command{chroot} の
16872 @option{--userspec} オプションを指していると考えられなくもないが、元々は
16873 @command{su} コマンドのことを言っていたのだと思う。@command{su} も以前はこの章で説明されて
16874 いたが、現在では coreutils に収録されていない。)
16875
16876 @menu
16877 * chroot invocation::        ルート・ディレクトリを変更する。
16878 * env invocation::           環境変数を変更する。
16879 * nice invocation::          niceness を変更する。
16880 * nohup invocation::         ハングアップ・シグナルで終了しない。
16881 * stdbuf invocation::        標準ストリームのバッファリングを変更する。
16882 * timeout invocation::       タイムリミット付きで実行する。
16883 @end menu
16884
16885
16886 @node chroot invocation
16887 @section @command{chroot}: ルートディレクトリを変更して、コマンドを実行する
16888
16889 @pindex chroot
16890 @cindex running a program in a specified root directory
16891 @cindex root directory, running a program in a specified
16892
16893 @command{chroot} は、指定されたディレクトリをルートディレクトリにして、コマンド
16894 を実行する。多くのシステムでは、この操作を行うことができるのはスーパー
16895 ユーザだけである。
16896 @footnote{もっとも、システムによっては (たとえば、FreeBSD がそうだが)、
16897 特定の一般ユーザが @code{chroot} システムコールを使用できるように設定
16898 できるものもある。従って、そうしたユーザは @command{chroot} コマンドを実行
16899 できるわけだ。また、Cygwin では、どんなユーザでも @command{chroot} コマンド
16900 を実行できる。MS-Windows では chroot 関数をサポートしていないため、
16901 内部で使用する関数が特権を要求しないからである。}
16902 @sp 1
16903 書式:
16904
16905 @example
16906 chroot @var{option} @var{newroot} [@var{command} [@var{args}]@dots{}]
16907 chroot @var{option}
16908 @end example
16909
16910 通常、ファイル名の検索は、ディレクトリ構造の根 (ルート、root)、
16911 すなわち @file{/} を起点として行われる。@command{chroot} はこのルートを @var{newroot}
16912 ディレクトリ (実在するディレクトリでなければならない) に変更し、
16913 その上で @var{command} を、@var{args} の指定があれば @var{args} を付けて実行する。
16914 @var{command} が指定されていない場合、デフォルトのコマンドは、環境変数
16915 @env{SHELL} の値か、@env{SHELL} が設定されていなければ、@command{/bin/sh} であり、
16916 それが @option{-i} オプションを付けて、呼び出される。@var{command} は シェルの
16917 組み込みコマンドであってはならない (@pxref{Special built-in utilities})。
16918
16919 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
16920 オプションはオペランドの前に置かなければならない。
16921
16922 @table @samp
16923
16924 @item --userspec=@var{user}[:@var{group}]
16925 @opindex --userspec
16926 デフォルトでは、@var{command} は呼び出し側のプロセスと同じ資格情報を
16927 使って実行されるが、このオプションを使えば、@var{command} を別の @var{user}
16928 として実行することができる。別の基本 @var{group} を指定することも可能だ。
16929 (訳注: coreutils-8.22 では、場合によっては @var{user} や @var{group} を名前
16930 ではなく、ID 番号で指定しなければならないことがある。)
16931
16932 @item --groups=@var{groups}
16933 @opindex --groups
16934 このオプションを使えば、新しいプロセスが使用する補助 @var{groups} を指定
16935 することができる。グループのリスト (名前でも ID 番号でもよい) は、
16936 コンマで区切られていなければならない。(訳注: coreutils-8.22 では、
16937 このオプションが使用できない場合もある。)
16938
16939 @end table
16940
16941 chroot を使う上でよくある問題を避けることができるように、ちょっと
16942 した情報をいくつか挙げておく。まず簡単なことから言うと、@var{command} は、
16943 静的にリンクしたバイナリを指すようにした方がよい。もし、動的にリンク
16944 した実行ファイルを使用するのならば、共有ライブラリが新しいルート
16945 ディレクトリ以下の適切な場所に存在するように、前もって準備しておく
16946 必要があるだろう。
16947
16948 たとえば、静的にリンクした @command{ls} の実行ファイルを作成して、
16949 @file{/tmp/empty} に置けば、root ユーザとして次のようなコマンドを実行する
16950 ことができる。
16951
16952 @example
16953 $ chroot /tmp/empty /ls -Rl /
16954 @end example
16955
16956 出力はこんなふうになるだろう。
16957
16958 @example
16959 /:
16960 total 1023
16961 -rwxr-xr-x 1 0 0 1041745 Aug 16 11:17 ls
16962 @end example
16963
16964 もし、動的にリンクした実行ファイル、たとえば @command{bash} を使いたい
16965 ならば、まず @samp{ldd bash} を実行して、どんな共有オブジェクトファイルが
16966 必要かを調べることだ。それから、@command{bash} 自体のバイナリをコピーするだけ
16967 でなく、@samp{ldd bash} でリストされたファイルも、新しいルートディレクトリ
16968 になるディレクトリ以下のしかるべき場所にコピーしておく。さらに、
16969 実行ファイルが何か他のファイルも必要としているなら (たとえば、データ
16970 ファイル、ステータスファイル、デバイスファイルなど)、それも適切な
16971 場所にコピーする。
16972
16973 @cindex exit status of @command{chroot}
16974 終了ステータス:
16975
16976 @display
16977 125: @command{chroot} そのものの実行に失敗した。
16978 126: @var{command} は見つかったが、起動できなかった。
16979 127: @var{command} が見つからなかった。
16980 それ以外は、@var{command} の終了ステータス。
16981 @end display
16982
16983
16984 @node env invocation
16985 @section @command{env}: 変更した環境でコマンドを実行する
16986
16987 @pindex env
16988 @cindex environment, running a program in a modified
16989 @cindex modified environment, running a program in a
16990 @cindex running a program in a modified environment
16991
16992 @command{env} は、環境を変更して、コマンドを実行する。
16993 @sp 1
16994 書式:
16995
16996 @example
16997 env [@var{option}]@dots{} [@var{name}=@var{value}]@dots{} @c
16998 [@var{command} [@var{args}]@dots{}]
16999 env
17000 @end example
17001
17002 @samp{@var{variable}=@var{value}} という形のオペランドは、環境変数 @var{variable} の値を
17003 @var{value} に設定する。@var{value} は空っぽでも構わない (@samp{@var{variable}=})。変数の値を
17004 空に設定 (set) するのは、変数を破棄 (unset) するのとは別のことである。
17005 こうしたオペランドは、左から右へ評価されるので、二つのオペランドが同じ
17006 変数を対象にしている場合、前のものは無視される。
17007
17008 環境変数名は、空でもよいし、@samp{=} と ASCII NUL 以外なら、どんな文字を
17009 含んでいても構わない。とは言え、変数名は、アンダースコア、数字、ASCII
17010 文字のみから構成し、数字以外の文字で始めるようにした方が、賢明である。
17011 それ以外の名前だと、シェルなどのアプリケーションがうまく動作しないからだ。
17012
17013 @vindex PATH
17014 @samp{=} という文字を含まない最初のオペランドが、起動するプログラムで
17015 あり、環境変数 @env{PATH} に従って、どこにあるかが検索される。残っている
17016 引数があれば、すべてそのプログラムに引数として渡される。起動するプロ
17017 グラムは、シェルの組み込みコマンドであってはならない (@pxref{Special built-in
17018 utilities})。
17019
17020 @env{PATH} に対する変更は、@var{command} のありかを検索する前に有効になる。
17021 そこで、@env{PATH} を短縮するときには、気をつけなければならない。@env{PATH} が
17022 空だったり、@file{/bin} のような重要なディレクトリを欠いていると、@env{PATH} を
17023 変更する前と同じ動作にならないからだ。
17024
17025 めったにないことだが、プログラムの名前に @samp{=} という文字が含まれて
17026 いる場合、それを変数の指定と区別する唯一の方法は、@var{command} として仲介的
17027 なコマンドを使用し、その @var{args} として問題のあるプログラム名を渡すこと
17028 である。たとえば、@file{./prog=} が現在の @env{PATH} 中に存在する実行ファイルだ
17029 としよう。
17030
17031 @example
17032 env prog= true 
17033   # 環境変数 prog を空に設定して 'true' を実行する。
17034 env ./prog= true 
17035   # 環境変数 ./prog を空に設定して 'true' を実行する。
17036 env -- prog= true 
17037   # 環境変数 prog を空に設定して 'true' を実行する。
17038 env sh -c '\prog= true' 
17039   # 'true' を引数にして 'prog=' を実行する。
17040 env sh -c 'exec "$@@"' sh prog= true 
17041   # これも 'prog=' を実行する。
17042 @end example
17043
17044 @cindex environment, printing
17045
17046 環境変数の設定の後にコマンド名が指定されていない場合は、生成された
17047 環境が表示される。これは、@var{command} に @command{printenv} を指定するのと同じこと
17048 である。
17049
17050 以下に例をいくつか挙げる。@command{env} に渡される環境は、@samp{LOGNAME=rms},
17051 @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks} からなっているものとする。
17052
17053 @itemize @bullet
17054
17055 @item
17056 現在の環境を出力する。
17057 @example
17058 $ env | LC_ALL=C sort
17059 EDITOR=emacs
17060 LOGNAME=rms
17061 PATH=.:/gnubin:/hacks
17062 @end example
17063
17064 @item
17065 環境を削減して、@command{foo} を実行する。@command{foo} が見つからないといけない
17066 ので、@env{PATH} だけは元のまま残している。
17067 @example
17068 env - PATH="$PATH" foo
17069 @end example
17070
17071 @item
17072 @samp{LOGNAME=rms}, @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks} からなる環境
17073 で @command{foo} を実行する。@command{foo} には、シェルの組み込みコマンドではなく、
17074 ファイルシステム中で見つかった実行ファイルが必ず使用される。
17075 @example
17076 env foo
17077 @end example
17078
17079 @item
17080 @samp{LOGNAME=foo}, @samp{EDITOR=emacs}, @samp{PATH=.:/gnubin:/hacks},
17081 @samp{DISPLAY=gnu:0}
17082 からなる環境で、@command{nemacs} を実行する。
17083 @example
17084 env DISPLAY=gnu:0 LOGNAME=foo nemacs
17085 @end example
17086
17087 @item
17088 プログラム @command{/energy/--} の実行を試みる (パスの検索でそれしか出て
17089 こないようにしている)。@command{--} というコマンドが存在する場合、環境
17090 は、@samp{LOGNAME=rms} と @samp{PATH=/energy} だけになり、引数には、@samp{e=mc2},
17091 @samp{bar}, @samp{baz} が使われる。
17092 @example
17093 env -u EDITOR PATH=/energy -- e=mc2 bar baz
17094 @end example
17095
17096 @end itemize
17097
17098
17099 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17100 オプションはオペランドの前に置かなければならない。
17101
17102 @table @samp
17103
17104 @optNull{env}
17105
17106 @item -u @var{name}
17107 @itemx --unset=@var{name}
17108 @opindex -u
17109 @opindex --unset
17110 変数 @var{name} が環境中にあれば、それを環境から削除する。
17111
17112 @item -
17113 @itemx -i
17114 @itemx --ignore-environment
17115 @opindex -
17116 @opindex -i
17117 @opindex --ignore-environment
17118 継承した環境を無視し、空っぽの環境から始める。
17119
17120 @end table
17121
17122 @cindex exit status of @command{env}
17123 終了ステータス:
17124
17125 @display
17126 0:   @var{command} が指定されなかったので、環境を出力した。
17127 125: @command{env} そのものの実行に失敗した。
17128 126: @var{command} は見つかったが、起動できなかった。
17129 127: @var{command} が見つからなかった。
17130 それ以外は、@var{command} の終了ステータス。
17131 @end display
17132
17133
17134 @node nice invocation
17135 @section @command{nice}: niceness を変更して、コマンドを実行する
17136
17137 @pindex nice
17138 @cindex niceness
17139 @cindex scheduling, affecting
17140 @cindex appropriate privileges
17141
17142 "@command{nice} はプロセスの @dfn{niceness} を表示したり、niceness を変更して
17143 コマンドを実行したりする。@dfn{niceness} は、プロセスがシステム中でどの程度
17144 優先的にスケジュールされるかに影響を与える。(訳注: niceness を「スケ
17145 ジューリング優先度」と訳さない理由については、三つほど下のパラグラフを
17146 御覧いただきたい。)
17147 @sp 1
17148 書式:
17149
17150 @example
17151 nice [@var{option}]@dots{} [@var{command} [@var{arg}]@dots{}]
17152 @end example
17153
17154 引数を指定しないと、@command{nice} は現在の niceness を表示する。引数に
17155 @var{command} を指定した場合は、niceness を調整して、その @var{command} を実行する。
17156 デフォルトでは、niceness が 10 増加する。
17157
17158 niceness の値は、最小が @minus{}20 で、最大が 19 である (値が小さければ、
17159 プロセスの優先度が高くなり、使えるリソースも多くなるが、その分、他の
17160 プロセスの動作が遅くなる。また、値が大きければ、プロセスの優先度が低く
17161 なり、自分自身の動作は遅くなるが、実行中の他のプロセスの速度に与える
17162 影響は小さくなる)。システムによっては、niceness の値の範囲がもっと広い
17163 ものもあるし、反対に、上下限の制限がもっときついものもある。サポート
17164 されている範囲を越えた niceness を指定すると、サポートされている値の
17165 最小、または最大を使用しようとしているものとみなされる。
17166
17167 niceness をスケジューリング優先度 (scheduling priority) と混同しては
17168 ならない。後者は、様々なスレッドをどういう序列で実行するかの予定を組む
17169 際に、その序列をアプリケーション側に決めさせるものである。優先度とは
17170 違って、niceness はスケジューラに対する単なるアドバイスにすぎず、スケ
17171 ジューラはそれを無視することができるのだ。また、用語について言うと、
17172 POSIX は @command{nice} の動作を @dfn{nice value} という用語で定義している。
17173 この nice value は、ある niceness と 最小の niceness との間の負ではない
17174 差である。@command{nice} コマンドは POSIX に準拠しているものの、この文書や
17175 エラーメッセージでは、従来の習慣との親和性を考慮して、``niceness'' という
17176 言葉を使っている。
17177
17178 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17179 built-in utilities})。
17180
17181 @mayConflictWithShellBuiltIn{nice}
17182
17183 注意: 現在動作中のプロセスの @dfn{niceness} を変更するには、@command{renice}
17184 コマンドを使う必要がある。
17185
17186 このプログラムでは、以下のオプションが使用できる。参照: @ref{Common options}.
17187 オプションはオペランドの前に置かなければならない。
17188
17189 @table @samp
17190 @item -n @var{adjustment}
17191 @itemx --adjustment=@var{adjustment}
17192 @opindex -n
17193 @opindex --adjustment
17194 コマンドの niceness を 10 ではなく、@var{adjustment} 増加する。@var{adjustment}
17195 が負の数の場合、ユーザがしかるべき特権を持っていなければ、@command{nice} は
17196 警告を発する。とは言え、警告を出すだけで、@var{adjustment} として 0 が
17197 指定されたかのように振る舞う。
17198
17199 互換性を考慮して、@command{nice} は @option{-@var{adjustment}} というオプションの古い
17200 書式もサポートしている。だが、新しいスクリプトでは、@option{-n @var{adjustment}}
17201 の方を使うべきである。
17202
17203 @end table
17204
17205 @cindex exit status of @command{nice}
17206 終了ステータス:
17207
17208 @display
17209 0:   @var{command} が指定されなかったので、niceness を出力した。
17210 125: @command{nice} そのものの実行に失敗した。
17211 126: @var{command} が見つかったが、起動できなかった。
17212 127: @var{command} が見つからなかった。
17213 それ以外は、@var{command} の終了ステータス。
17214 @end display
17215
17216 対話的ではないプログラムは、niceness を落として (訳注: すなわち、
17217 niceness の値を増やして) 実行すると、都合のよいことがある。
17218
17219 @example
17220 $ nice factor 4611686018427387903
17221 @end example
17222
17223 @command{nice} は、現在の niceness を表示するので、@command{nice} を通して @command{nice}
17224 を起動すれば、それがどんな動作をするか、目の当たりに見ることができる。
17225
17226 デフォルトの動作は、niceness を @samp{10} 増加することである。
17227
17228 @example
17229 $ nice
17230 0
17231 $ nice nice
17232 10
17233 $ nice -n 10 nice
17234 10
17235 @end example
17236
17237 @var{adjustment} は、現在の niceness からいくら増減するかということである。
17238 次の例では、最初の @command{nice} が、二番目の @command{nice} を niceness 10 で実行し、
17239 二番目の @command{nice} は、niceness をさらに 3 増やして、三番目の @command{nice} を
17240 実行している。
17241
17242 @example
17243 $ nice nice -n 3 nice
17244 13
17245 @end example
17246
17247 サポートされている範囲より大きい niceness を指定するのは、サポート
17248 されている最大値を指定するのと同じことである。
17249
17250 @example
17251 $ nice -n 10000000000 nice
17252 19
17253 @end example
17254
17255 特権ユーザだけが niceness の値を下げて、プロセスを実行できる。
17256
17257 @example
17258 $ nice -n -1 nice
17259 nice: cannot set niceness: Permission denied
17260 0
17261 $ sudo nice -n -1 nice
17262 -1
17263 @end example
17264
17265
17266 @node nohup invocation
17267 @section @command{nohup}: ハングアップ・シグナルで終了しないコマンドを実行する
17268
17269 @pindex nohup
17270 @cindex hangups, immunity to
17271 @cindex immunity to hangups
17272 @cindex logging out and continuing to run
17273
17274 @flindex nohup.out
17275 @command{nohup} を使って、@var{command} を実行すると、指定されたコマンドがハング
17276 アップ・シグナルを無視するようになる。従って、そのコマンドは、ユーザが
17277 ログアウトした後でも、バックグラウンドで実行を継続することができる。
17278 @sp 1
17279 書式:
17280
17281 @example
17282 nohup @var{command} [@var{arg}]@dots{}
17283 @end example
17284
17285 標準入力が端末の場合、標準入力は @file{/dev/null} に付け換えられる。その
17286 結果、端末セッションが、@command{nohup} によって実行されているコマンドが端末を
17287 使用していると勘違いすることがなくなる。これは GNU の拡張である。
17288 GNU 以外のホストでも使うことを考えているプログラムでは、GNU の拡張を当てに
17289 せず、@samp{nohup @var{command} [@var{arg}]@dots{} </dev/null} を使った方がよい。
17290
17291 @flindex nohup.out
17292 標準出力が端末の場合、コマンドの標準出力は、@file{nohup.out} というファ
17293 イルに追加されて行く。そのファイルに書き込めない場合は、@file{$HOME/nohup.out}
17294 に追記されることになる。そのファイルにも書き込めない場合は、コマンドの
17295 実行が行われない。@command{nohup} によって作成されるのが @file{nohup.out} であれ、
17296 @file{$HOME/nohup.out} であれ、それは、ファイルの所有者にのみ読み書き可能な
17297 ものになる。現在の umask の設定の影響は受けない。
17298
17299 標準エラーが端末の場合、コマンドの標準エラー出力は、基本的には
17300 標準出力 (リダイレクトされているかもしれない) と同じファイル・
17301 ディスクリプタにリダイレクトされる。ただし、標準出力がクローズ
17302 されている場合には、標準エラーの端末への出力は、リダイレクトされる
17303 ことなく、直接 @file{nohup.out} や @file{$HOME/nohup.out} というファイルに
17304 追加される。どちらのファイルが使用されるかは、上述のとおりである。
17305
17306 コマンドの出力を @file{nohup.out} 以外のファイルに書き込みたければ、
17307 リダイレクトすればよい。たとえば、@command{make} の出力を @file{make.log} に書き
17308 込みたかったら、次のようにする。
17309
17310 @example
17311 nohup make > make.log
17312 @end example
17313
17314 @command{nohup} は、実行するコマンドを自動的にバックグラウンドに送ることを
17315 しない。そこで、ユーザは、コマンドラインの末尾に @samp{&} を付けることで、
17316 明示的にそれを行わなければならない。また、@command{nohup} は、@var{command} の
17317 niceness を変更しない。niceness を変更したかったら、@command{nice} を使って、
17318 @samp{nohup nice @var{command}} のように実行すればよい。
17319
17320 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17321 built-in utilities})。
17322
17323 指定できるオプションは、@option{--help} と @option{--version} だけである。
17324 @xref{Common options}.  オプションはオペランドの前に置かなければならない。
17325
17326 @cindex exit status of @command{nohup}
17327 終了ステータス:
17328
17329 @display
17330 125: @env{POSIXLY_CORRECT} が設定されていない場合に、@command{nohup} そのものの
17331       実行に失敗した。
17332 126: @var{command} は見つかったが、起動できなかった。
17333 127: @var{command} が見つからなかった。 
17334 それ以外の場合は、@var{command} の終了ステータス。
17335 @end display
17336
17337 @env{POSIXLY_CORRECT} が設定されている場合は、@command{nohup} そのものが実行に
17338 失敗したときの終了ステータスは、125 ではなく 127 になる。
17339
17340
17341 @node stdbuf invocation
17342 @section @command{stdbuf}: 入出力ストリームのバッファリングを変更して、コマンドを実行する
17343
17344 @pindex stdbuf
17345 @cindex standard streams, buffering
17346 @cindex line buffered
17347
17348 @command{stdbuf} を使用すると、プログラムと結びついている 3 種類の標準入出力
17349 ストリームに対して、そのバッファリング動作を変更することができる。
17350 @sp 1
17351 書式:
17352
17353 @example
17354 stdbuf @var{option}@dots{} @var{command}
17355 @end example
17356
17357 @var{command} は、次の条件を満たすプログラムの名前で始まっていなければ
17358 ならない。
17359 @enumerate
17360 @item
17361 入出力に ISO C @code{FILE} ストリームを使用している (注意: プログラム @command{dd} や
17362 @command{cat} は、これを使用していない)。
17363
17364 @item
17365 自分で標準ストリームのバッファリングを調整していない (注意: プログ
17366 ラム @command{tee} は、この部類に入らない)。
17367 @end enumerate
17368
17369 後に続く引数があれば、@var{command} に引数として渡される。
17370
17371 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17372
17373 @table @samp
17374
17375 @item -i @var{mode}
17376 @itemx --input=@var{mode}
17377 @opindex -i
17378 @opindex --input
17379 標準入力ストリームのバッファリングを調整する。
17380
17381 @item -o @var{mode}
17382 @itemx --output=@var{mode}
17383 @opindex -o
17384 @opindex --output
17385 標準出力ストリームのバッファリングを調整する。
17386
17387 @item -e @var{mode}
17388 @itemx --error=@var{mode}
17389 @opindex -e
17390 @opindex --error
17391 標準エラーストリームのバッファリングを調整する。
17392
17393 @end table
17394
17395 @var{mode} には、以下のものを指定できる。
17396
17397 @table @samp
17398
17399 @item L
17400 ストリームを行単位のバッファ・モードにする。このモードでは、
17401 改行が出力されることになるか、あるいは、端末デバイスに結びついて
17402 いるストリームから入力が読み込まれるまで、データを溜めておく。
17403 このオプションは、標準入力に対しては無効である。
17404
17405 @item 0
17406 選択したストリームのバッファリングを無効にする。このモードでは、
17407 データは即座に出力される。また、要求された量のデータしか入力から
17408 読み込まない。入力と出力で動作が違うことに気をつけていただきたい。
17409 なお、入力のバッファリングを無効にしても、ストリーム入力関数の
17410 応答性やブロッキング動作に影響することはない。たとえば、@code{fread}
17411 は、要求した量より少ないデータを、下層で動いている @code{read} が返して
17412 きても、@code{EOF} が来るか、エラーが起きるまで、やはりブロッキングを
17413 行うのである。
17414
17415 @item @var{size}
17416 バッファ一杯モード (fully buffered mode) で使用するバッファのサイズ
17417 を指定する。
17418 @multiplierSuffixesNoBlocks{size}
17419
17420 @end table
17421
17422 @cindex exit status of @command{stdbuf}
17423 終了ステータス:
17424
17425 @display
17426 125: @command{stdbuf} そのものの実行に失敗した。
17427 126: @var{command} は見つかったが、起動できなかった。
17428 127: @var{command} が見つからなかった。
17429 それ以外は、@var{command} の終了ステータス。
17430 @end display
17431
17432
17433 @node timeout invocation
17434 @section @command{timeout}: タイムリミット付きでコマンドを実行する
17435
17436 @pindex timeout
17437 @cindex time limit
17438 @cindex run commands with bounded time
17439
17440 @command{timeout} は渡されたコマンドを実行し、指定された時間が経過しても
17441 まだ実行が続いていたら、そのコマンドを終了させる。
17442 @sp 1
17443 書式:
17444
17445 @example
17446 timeout [@var{option}] @var{duration} @var{command} [@var{arg}]@dots{}
17447 @end example
17448
17449 @var{command} は、シェルの組み込みコマンドであってはならない (@pxref{Special
17450 built-in utilities})。
17451
17452 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17453 オプションはオペランドの前に置かなければならない。
17454
17455 @table @samp
17456 @item --preserve-status
17457 @opindex --preserve-status
17458 タイムアウトしたときに、タイムアウトであることを示す @command{timeout}
17459 コマンドの終了ステータスではなく、@command{timeout} が管理している
17460 @var{command} の終了ステータスを返す。このオプションが役に立つのは、
17461 管理される @var{command} が無期限の続行時間をサポートしている場合である。
17462
17463 @item --foreground
17464 @opindex --foreground
17465 独立したバックグラウンドのプログラム・グループを作成しない。
17466 その結果、@command{timeout} に管理される @var{command} が、フォアグラウンドの
17467 TTY を通常どおり使用できるようになる。コマンドが対話的シェルから
17468 直接実行されない場合でも、コマンドの時間制限をきちんと行うには、
17469 (訳注: 言い換えれば、@command{timeout} コマンドをシェルスクリプト中で使用
17470 する場合には)、この動作が必要になることがあり、次の二つの場合が
17471 それに当たる。
17472 @enumerate
17473 @item
17474 @var{command} が対話的であり、たとえば端末からの読み込みが必要な
17475 場合。
17476 @item
17477 端末から直接 @var{command} にシグナルを送ることができるようにしたい
17478 場合。(たとえば、Ctrl-C を送るとか)。
17479 @end enumerate
17480
17481 この動作モードでは、@var{command} のいかなる子プロセスも、時間切れで
17482 終了することがないのに注意すること。
17483
17484 @item -k @var{duration}
17485 @itemx --kill-after=@var{duration}
17486 @opindex -k
17487 @opindex --kill-after
17488 ここで指定した @var{duration} の経過後に、改めて @samp{KILL} シグナルを送り
17489 付けて、監視対象の @var{command} を確実に終了させる。このオプションを
17490 付けないと、選択したシグナルに @var{command} を終了させる力がなかった
17491 場合に、@command{timeout} は @var{command} を殺すことができない。
17492
17493 @item -s @var{signal}
17494 @itemx --signal=@var{signal}
17495 @opindex -s
17496 @opindex --signal
17497 制限時間が来たとき、デフォルトの @samp{TERM} シグナルではなく、指定した
17498 @var{signal} を @var{command} に送る。@var{signal} は @samp{HUP} のような名前でもよく、
17499 番号でもよい。@xref{Signal specifications}.
17500 @end table
17501
17502 @cindex time units
17503 @var{duration} は浮動小数点数であり、後ろに単位を付けることもできる。
17504 @display
17505 @samp{s} 何秒 (デフォルト)
17506 @samp{m} 何分
17507 @samp{h} 何時間
17508 @samp{d} 何日
17509 @end display
17510 @var{duration} が 0 だと、対象となるコマンドが時間切れなしになる。実際の
17511 制限時間は、システムの制約を受けることに注意していただきたい。秒以下の
17512 制限時間を指定するときは、とりわけそれを考慮に入れるべきである。
17513
17514 @cindex exit status of @command{timeout}
17515 終了ステータス:
17516
17517 @display
17518 124: @var{command} がタイムアウトした。
17519 125: @command{timeout} そのものの実行に失敗した。 
17520 126: @var{command} は見つかったが、起動できなかった。
17521 127: @var{command} が見つからなかった。
17522 137: @var{command} に KILL(9) シグナルを送った (128+9)
17523 それ以外は、@var{command} の終了ステータス。
17524 @end display
17525
17526
17527 @node Process control
17528 @chapter プロセス制御
17529
17530 @cindex processes, commands for controlling
17531 @cindex commands for controlling processes
17532
17533 @menu
17534 * kill invocation::          プロセスにシグナルを送る。
17535 @end menu
17536
17537
17538 @node kill invocation
17539 @section @command{kill}: プロセスにシグナルを送る
17540
17541 @pindex kill
17542 @cindex send a signal to processes
17543
17544 @command{kill} コマンドは、プロセスにシグナルを送る。シグナルを送られた
17545 プロセスは、終了するか、あるいは、シグナルを受け取った瞬間に他の
17546 何らかの形で反応する。また、@command{kill} は、シグナルに関する情報を一覧
17547 表示する。
17548 @sp 1
17549 書式:
17550
17551 @example
17552 kill [-s @var{signal} | --signal @var{signal} | -@var{signal}] @var{pid}@dots{}
17553 kill [-l | --list | -t | --table] [@var{signal}]@dots{}
17554 @end example
17555
17556 @mayConflictWithShellBuiltIn{kill}
17557
17558 @command{kill} コマンドの最初の書式では、すべての @var{pid} 引数に対してシグナルが
17559 送られる。シグナルが指定されていない場合に送られるデフォルトのシグナル
17560 は、@samp{TERM} である。 @samp{0} という特別なシグナル番号は、有効なシグナルを
17561 表していないが、引数 @var{pid} が指しているプロセスに対してシグナルを送る
17562 ことが可能かどうかを、調べるために使うことができる。
17563
17564 @var{pid} が正の数なら、シグナルはプロセス ID が @var{pid} のプロセスに送られる。
17565 @var{pid} が 0 なら、シグナルはカレントプロセスのプロセスグループに属する
17566 すべてのプロセスに送られる。@var{pid} が @minus{}1 の場合、シグナルが送られるのは、
17567 ユーザがシグナルを送る権限を持っているすべてのプロセスである。@var{pid} が @minus{}1
17568 より小さい場合は、@var{pid} の絶対値に等しいプロセスグループに属するすべての
17569 プロセスにシグナルが送られる。
17570
17571 @var{pid} が正の数ではない場合、システムプロセスに属するプロセス (システム
17572 によって様々である) は、シグナルが送られるプロセスのリストから除外
17573 される。
17574
17575 最初の @var{pid} 引数として負の @var{pid} を使用したい場合は、その前に@option{--} オプ
17576 ションを置くべきである。とは言え、@samp{kill -@var{signal} -@var{pid}} という書式を使う
17577 場合は、@option{--} は必要がない。これは、POSIX に対する一般的な拡張である。
17578 そこで、次に挙げるコマンドは等価になる。
17579
17580 @example
17581 kill -15 -1
17582 kill -TERM -1
17583 kill -s TERM -- -1
17584 kill -- -1
17585 @end example
17586
17587 最初の書式の @command{kill} コマンドは、すべての @var{pid} 引数が、シグナルが
17588 送られたプロセスをそれぞれ少なくとも一つは指している場合に、成功の
17589 ステータスで終了する。
17590
17591 @command{kill} コマンドの二番目の書式では、シグナルに関する情報が表示される。
17592 @option{-l} または @option{--list}、あるいは、@option{-t} または @option{--table} オプションの
17593 指定は必須である。引数 @var{signal} を一つも指定しないと、サポートされている
17594 すべてのシグナルがリストされる。@option{-l} や @option{--list} の出力は、シグナル名の
17595 リストであり、1 行に一つづつ表示される。ただし、引数 @var{signal} がすでに
17596 シグナル名である場合に表示されるのは、名前ではなく、シグナル番号だ。
17597 @option{-t} や @option{--table} の出力は、シグナル番号、シグナル名、その説明からなる
17598 表である。この書式の @command{kill} コマンドは、引数として指定されたすべての
17599 @var{signal} が有効なものであり、出力エラーがなかったとき、成功のステータスで
17600 終了する。
17601
17602 @command{kill} コマンドでは、@option{--help} や @option{--version} オプションも使用できる。
17603 @xref{Common options}.
17604
17605 @var{signal} の指定には、@samp{HUP} のようなシグナル名や、@samp{1}のようなシグナル
17606 番号、それに、シグナルによって終了させられるときのプロセスの終了ステー
17607 タスを使うことができる (訳注: 最後のものは、GNU coreutils の @command{kill}
17608 コマンドでは使用できるが、他の系統の @command{kill} では使えないかもしれない)。
17609 シグナル名は、標準的な形式でも、頭に @samp{SIG} を付けた形式でも構わない。
17610 大文字小文字はどちらを使ってもよいが、@option{-@var{signal}} という形式のオプション
17611 の場合は例外で、大文字を使わなければならない。小文字を使うと、他の
17612 オプションとまぎらわしいからである。サポートしているシグナル名と
17613 シグナル番号については、「2.5 シグナルの指定」を参照していただきたい。
17614 @xref{Signal specifications}.
17615
17616 @node Delaying
17617 @chapter 一時停止
17618
17619 @cindex delaying commands
17620 @cindex commands for delaying
17621
17622 @c Perhaps @command{wait} or other commands should be described here also?
17623
17624 @menu
17625 * sleep invocation::         指定された時間、停止する。
17626 @end menu
17627
17628
17629 @node sleep invocation
17630 @section @command{sleep}: 指定された時間、停止する
17631
17632 @pindex sleep
17633 @cindex delay for a specified time
17634
17635 @command{sleep} は、コマンドラインで引数として指定された値を合計した時間だけ
17636 停止する。
17637 @sp 1
17638 書式:
17639
17640 @example
17641 sleep @var{number}[smhd]@dots{}
17642 @end example
17643
17644 @cindex time units
17645 各引数は数値であり、後ろに単位を付けてもよい。デフォルトの単位は
17646 秒である。単位には、以下のものが指定できる。
17647
17648 @table @samp
17649 @item s
17650
17651 @item m
17652
17653 @item h
17654
17655 @item d
17656
17657 @end table
17658
17659 @command{sleep} の従来の実装では、@var{number} は整数でなければならず、引数は
17660 接尾辞なしのものが 1 個しか認められていなかった。それに対して GNU の
17661 @command{sleep} では、任意の浮動小数点数を複数個指定できる。 @xref{Floating point}.
17662
17663 オプションは、@option{--help} と @option{--version} だけである。@xref{Common
17664 options}.
17665
17666 @c sleep is a shell built-in at least with Solaris 11's /bin/sh
17667 @mayConflictWithShellBuiltIn{sleep}
17668
17669 @exitstatus
17670
17671
17672 @node Numeric operations
17673 @chapter 数値の操作
17674
17675 @cindex numeric operations
17676 以下のプログラムは、数に関係した作業をする。
17677
17678 @menu
17679 * factor invocation::        素因数を表示する。
17680 * seq invocation::           連続する数を表示する。
17681 @end menu
17682
17683
17684 @node factor invocation
17685 @section @command{factor}: 素因数を表示する
17686
17687 @pindex factor
17688 @cindex prime factors
17689
17690 @command{factor} は、素因数を表示する。
17691 @sp 1
17692 書式:
17693
17694 @example
17695 factor [@var{number}]@dots{}
17696 factor @var{option}
17697 @end example
17698
17699 @var{number} がコマンドラインで指定されていない場合、@command{factor} は標準入力
17700 から数値を読み込む。このとき、改行、タブ、空白で区切って複数の数値を
17701 入力することができる。
17702
17703 @command{factor} コマンドで使えるオプションは、いくつもない。
17704
17705 @table @samp
17706 @item --help
17707 簡単なヘルプメッセージを標準出力に表示し、それ以上の処理をせずに
17708 終了する。
17709
17710 @item --version
17711 プログラムのバージョンを標準出力に表示し、それ以上の処理をせずに
17712 終了する。
17713 @end table
17714
17715 メルセンヌ素数の 8 番目と 9 番目の積を素因数に分解するには、2.2 GHz
17716 Athlon のシステムで、30 ミリセコンドの CPU 時間を要する。
17717
17718 @example
17719 M8=$(echo 2^31-1|bc)
17720 M9=$(echo 2^61-1|bc)
17721 n=$(echo "$M8 * $M9" | bc)
17722 /usr/bin/time -f %U factor $n
17723 4951760154835678088235319297: 2147483647 2305843009213693951
17724 0.03
17725 @end example
17726
17727 同様に、8 番目のフェルマー数、@math{2^{256}+1} では、同じマシンで約 20 秒
17728 かかる。
17729
17730 大きな数の素因数分解は、そもそも大変な作業である。@command{factor} が使用
17731 している Pollard Rho アルゴリズムは、比較的小さな因数を持つ数値に
17732 対してとりわけ効率がよい。もし、小さな因数を持たない大きな数値 (たと
17733 えば、二つの大きな素数の積からなる数値) の素因数分解をなさりたいのなら、
17734 他の方法の方がずっとすぐれている。
17735
17736 @command{factor} が GNU MP を使用せずにビルドされている場合は、単精度の
17737 算術しか利用できない。従って、大きな数値 (一般には @math{2^{64}} 以上)
17738 には対応していない。単精度用のコードが使用しているアルゴリズムは、
17739 比較的小さな数値を素因数に分解するためのものなのである。
17740
17741 @exitstatus
17742
17743
17744 @node seq invocation
17745 @section @command{seq}: 数列を表示する
17746
17747 @pindex seq
17748 @cindex numeric sequences
17749 @cindex sequence of numbers
17750
17751 @command{seq} は、数列を標準出力に表示する。
17752 @sp 1
17753 書式:
17754
17755 @example
17756 seq [@var{option}]@dots{} @var{last}
17757 seq [@var{option}]@dots{} @var{first} @var{last}
17758 seq [@var{option}]@dots{} @var{first} @var{increment} @var{last}
17759 @end example
17760
17761 @command{seq} は、@var{first} から @var{last} までの数を @var{increment} おきに表示する。
17762 デフォルトでは、それぞれの数は 1 行に 1 個づつ表示される。@var{increment} が
17763 指定されていない場合は、@var{first} が @var{last} より大きい場合でも、デフォルトの
17764 @samp{1} が @var{increment} として使用される。@var{first} のデフォルトもまた @samp{1} である。
17765 従って、@code{seq 1} は @samp{1} を表示するが、@code{seq 0} や @code{seq 10 5} は、何も出力
17766 しない。数列が終了するのは、現在の数値に @var{increment} を加えると @var{last} より
17767 大きくなる時点である。だから、@code{seq 1 10 10} は、@samp{1} しか表示しない。
17768 なお、数値には浮動小数点数を指定してもよい。@xref{Floating point}.
17769
17770 このプログラムでは以下のオプションが使用できる。参照: @ref{Common options}.
17771 オプションはオペランドの前に置かなければならない。
17772
17773 @table @samp
17774 @item -f @var{format}
17775 @itemx --format=@var{format}
17776 @opindex -f @var{format}
17777 @opindex --format=@var{format}
17778 @cindex formatting of numbers in @command{seq}
17779 すべての数を @var{format} を使用して表示する。@var{format} は、 @samp{printf} 形式の
17780 浮動小数点数の変換指定をただ一つ含むものでなければならない。すなわち、
17781 @samp{%a}, @samp{%e}, @samp{%f}, @samp{%g}, @samp{%A}, @samp{%E}, @samp{%F},
17782 @samp{%G} のいづれかである。
17783 @samp{%} の後ろには 0 個以上のフラグを、@samp{-+#0 '} のうちから選んで置く
17784 ことができる。また、それに続けて、1 個以上の数字からなるフィールド
17785 幅を指定することもできるし、さらにその後ろに、@samp{.} とそれに続く 0 個
17786 以上の数字からなる精度を指定することもできる。@var{format} には、任意の
17787 数の @samp{%%} 変換指定が含まれていてもよい。変換指定はすべて、@samp{printf}
17788 の場合と同じ意味を持っている。
17789
17790 デフォルトの表示形式は、@var{first}, @var{increment}, @var{last} がどういう表記を使用
17791 しているかよって決まる。そのすべてが固定小数点の 10進数表記を使用
17792 しているならば、デフォルトの表示形式は @samp{%.@var{p}f} になる。ここで @var{p} は、
17793 出力する数値を過不足なく表現できる最小の精度である。それ以外の場合、
17794 デフォルトの表示形式は @samp{%g} になる。
17795
17796 @item -s @var{string}
17797 @itemx --separator=@var{string}
17798 @cindex separator for numbers in @command{seq}
17799 数の区切りに @var{string} を使う。デフォルトは改行である。出力の最後
17800 には、必ず改行が付く。
17801
17802 @item -w
17803 @itemx --equal-width
17804 すべての数を同じ桁数で表示する。先頭の空きは 0 で埋める。@var{first},
17805 @var{increment}, @var{last} は、すべて固定小数点の 10 進数表記でなければなら
17806 ない (他のやり方で先頭を埋めたければ、@option{--format} を使うこと)。
17807
17808 @end table
17809
17810 @option{-f} オプションを使えば、出力をもっときめ細かく制御することができる。
17811
17812 @example
17813 $ seq -f '(%9.2E)' -9e5 1.1e6 1.3e6
17814 (-9.00E+05)
17815 ( 2.00E+05)
17816 ( 1.30E+06)
17817 @end example
17818
17819 出力を 16 進数の整数にしたかったら、@command{printf} を使って変換すればよい。
17820
17821 @example
17822 $ printf '%x\n' $(seq 1048575 1024 1050623)
17823 fffff
17824 1003ff
17825 1007ff
17826 @end example
17827
17828 数のリストが非常に長くなる場合は、@command{xargs} を使用すると、引数リストの
17829 長さに対するシステムの制限を回避することができる。
17830
17831 @example
17832 $ seq 1000000 | xargs printf '%x\n' | tail -n 3
17833 f423e
17834 f423f
17835 f4240
17836 @end example
17837
17838 8 進数の出力を生成するには、printf に対して @code{%x} の代わりに、@code{%o}
17839 フォーマットを使用すればよい。
17840
17841 ほとんどのシステムで @command{seq} は、少なくとも @math{2^{53}} までの数値に対して
17842 整数の出力を生成することができる。それより大きい整数に対しては概算に
17843 なる。細かい点は、ご使用のシステムの浮動小数点の実装によって異なって
17844 いる。@xref{Floating point}.  @command{seq} が @math{2^{64}} までの整数に対しては、
17845 きちんと動作するが、それより大きな整数に対しては、数値が不正確になる
17846 ことがあるというのは、よくある話である。
17847
17848 @example
17849 $ seq 50000000000000000000 2 50000000000000000004
17850 50000000000000000000
17851 50000000000000000000
17852 50000000000000000004
17853 @end example
17854
17855 とは言え、負ではない整数を対象とし、インクリメントが 1 で、フォー
17856 マット指定オプションはないという条件の元では、@command{seq} は任意の大きな
17857 数値を表示できることも心に留めておいていただきたい。
17858
17859 @command{seq} でとんでもなく大きな桁の値を扱うときは、気をつけた方がよい。
17860 さもないと、@command{seq} は内部で浮動小数点を使用しているので、結果を見て
17861 びっくりするかもしれない。たとえば、x86 のプラットフォームでは、
17862 内部表現が 64 ビットの仮数部を使用しているが、そこで次のコマンドを
17863 実行すると、
17864
17865 @example
17866 seq 1 0.0000000000000000001 1.0000000000000000009
17867 @end example
17868
17869 @command{seq} は 1.0000000000000000007 を二度出力し、1.0000000000000000008
17870 をスキップする (訳注: 訳者の amd64 環境では、1.0000000000000000008 では
17871 なく、1.0000000000000000006 をスキップする)。
17872
17873 @exitstatus
17874
17875
17876 @node File permissions
17877 @chapter ファイルの許可属性
17878 @include perm-ja.texi
17879
17880 @include parse-datetime-ja.texi
17881
17882 @c              What's GNU?
17883 @c              Arnold Robbins
17884 @node Opening the software toolbox
17885 @chapter ソフトウェアの道具箱
17886
17887 この章の初期のバージョンは、「GNU とは何か? (@cite{What's GNU?})」という
17888 連載記事として @cite{Linux Journal} 1994 年 6 月号に掲載された。執筆者は
17889 Arnold Robbins である。
17890 (@uref{http://www.linuxjournal.com/article.php?sid=2762})
17891
17892 @menu
17893 * Toolbox introduction::     はじめに
17894 * I/O redirection::          I/O リダイレクション
17895 * The who command::          @command{who} コマンド
17896 * The cut command::          @command{cut} コマンド
17897 * The sort command::         @command{sort} コマンド
17898 * The uniq command::         @command{uniq} コマンド
17899 * Putting the tools together::  工具を組み合わせる
17900 @end menu
17901
17902
17903 @node Toolbox introduction
17904 @unnumberedsec はじめに
17905
17906 今月の記事と GNU プロジェクトの関係は、周辺的なものにすぎない。お手元の
17907 GNU/Linux システムの GNU ツールをいくつか取り上げて、こんな使い方もあり
17908 ますよ、と説明している点で、関係があるにすぎないのだ。今月の記事の真の
17909 狙いは、プログラムを開発したり、使用したりする上での、「ソフトウェアは
17910 工具だ」という考え方を説明することである。
17911
17912 ソフトウェアは工具だという思想は、Unix が最初に設計され、開発された
17913 ときの重要で不可欠な考え方だった (Linux も GNU も本質的には Unix の
17914 クローンである)。残念なことに、最近ではインターネットや見栄えのよい
17915 GUI の勢いに押されて、ソフトウェア工具論は流行らなくなっているようだ。
17916 この思想は、様々な問題を解決するための強力な思考モデルを提供してくれる
17917 のだから、まことに残念な話である。
17918
17919 スイス・アーミーナイフをズボンのポケットに (または、小物入れに)
17920 入れて、持ち歩いている人は多い。スイス・アーミーナイフは持っていると
17921 重宝な道具だ。それには、何本かのナイフ、ねじ回し、ピンセット、つまようじ、
17922 爪やすり、コルク抜き、他にもたぶん、いろいろ付いているだろう。日常の
17923 ちょっとした雑用には、何にでも使える簡単な道具があれば済むのだから、
17924 そうした用途にはまさにピッタリの道具である。
17925
17926 しかしながら、熟練した大工は、スイス・アーミーナイフを使って家を建て
17927 たりしない。彼は、その代わりに道具箱を持っていて、そこには用途別の工具
17928 --- のこぎり、金槌、ねじ回し、鉋など --- がぎっしり詰まっている。しかも、
17929 彼は一つ一つの工具について、いつどこで使えばよいかをきちんと心得ている。
17930 ねじ回しの柄で釘を打ち込んだりすることは絶対にないのだ。
17931
17932 ベル研究所にいた Unix の開発者たちは、プロのプログラマやコンピュー
17933 タ・サイエンスの専門家ばかりだった。その彼らが、こういうことに気づいた
17934 のだ。万能型のプログラムは、たった一つのプログラムを使えばよいので、
17935 ユーザには受けがよいかもしれない。だが、いざ実際に作ってみると、そうした
17936 プログラムは、
17937
17938 @enumerate a
17939 @item
17940 書くのが難しく、
17941
17942 @item
17943 保守やデバッグが難しく、
17944
17945 @item
17946 新しい状況に合わせて機能を拡張するのが難しい。
17947 @end enumerate
17948
17949 むしろ彼らは、プログラムは用途別の工具であるべきだと痛感した。
17950 要するに、個々のプログラムは、「一つの仕事をきちんとやってのければ
17951 よい」。それ以上でもそれ以下でもない。そういったプログラムは、設計
17952 するのも、コードを書くのも、修正するのも、ずっと簡単である ---
17953 たった一つのことしかしないからだ。
17954
17955 それだけではない。適切な仕組みを使って、プログラムを組み合わせると、
17956 全体が部分の総和以上になることにも、彼らは気づいた。ある用途専用の
17957 プログラムをいくつか組み合わせると、どのプログラムもそのために作られた
17958 のではない、ある特定の作業をやってのけることができる。それも、それ専用の
17959 プログラムを書かなければならない場合よりも、はるかに迅速に、かつ簡単に
17960 やってのけられるのだ。この記事の以下では、そうした使用法の (典型的な)
17961 例をいくつか紹介する。(大事なことを一つ付記しておく。急がば回れだ。
17962 必要になるかもしれないソフトウェア工具があれば、まずそれを作ること。
17963 道具箱に適切な工具がまだない場合の話であるが。)
17964
17965 @node I/O redirection
17966 @unnumberedsec I/O リダイレクション
17967
17968 シェルの入出力リダイレクションについて、基本的なこと、とくに標準入力、
17969 標準出力、標準エラーがどういうものかを、読者がよく御存じだとして、話を
17970 進める。簡単に言うと、標準入力とは、データの入力元、すなわち、データが
17971 そこからやって来る場所のことだ。データの入力元が、ディスク上のファイル
17972 だろうと、キーボードだろうと、磁気テープだろうと、それどころかパンチ
17973 カード・リーダーだろうと、プログラムはそれを知る必要もなければ、気に
17974 かける必要もない。同様に、標準出力とは、データの溜まる場所、データが
17975 そこに行く場所のことだ。プログラムとしては、それがどこになろうと、知ら
17976 なくてもよく、気にかけなくてもよい。標準入力からデータを読み込み、それに
17977 対して何らかの処理を行い、標準出力に送り出すだけのプログラムを、水道の
17978 パイプラインのフィルターになぞらえて、「フィルター (@dfn{filter})」と呼ぶ。
17979
17980 Unix のシェルでは、データのパイプラインを作るのはとてもやさしい。
17981
17982 @smallexample
17983 program_to_create_data | filter1 | ... | filterN > final.pretty.data
17984 @end smallexample
17985
17986 ここでは、まず最初に生のデータを作成している。各フィルターがその
17987 データに対して何らかの変形を次々に行い、最終的に、データが希望どおりの
17988 形になって、パイプラインから抜け出してくる。
17989
17990 標準入力と標準出力にとっては、それで十分だ。では、標準エラーはどこ
17991 で登場し、どんな役割を果たすのだろうか? 上記パイプラインの @command{filter1} に
17992 ついて考えてほしい。データを読んでいるうちにエラーが起きたら、どうなる
17993 だろうか? @command{filter1} がエラーメッセージを標準出力に書き出したら、その
17994 メッセージはパイプラインを下って @command{filter2} の入力に飲み込まれてしまう。
17995 そうなると、ユーザはたぶんメッセージをまったく目にしないことになるだろう。
17996 そこで、プログラムとしては、ユーザがエラーメッセージに気がついてくれる
17997 ように、それを送ることのできる場所が必要になる。それが、標準エラー
17998 なのであり、標準エラーは通常、現在使用しているコンソールやウィンドウ
17999 に結びついている。プログラムの標準出力を使用中のスクリーン以外に
18000 リダイレクトしている場合でも、それは変わらない。
18001
18002 フィルター・プログラムが協力し合うためには、データのフォーマットに
18003 ついて互いに合意している必要がある。最も素直で使いやすいフォーマットと
18004 言えば、何と言っても、行分けされたテキストだ。そして、Unix のデータファ
18005 イルは、たいていの場合、まさに、ASCII LF (Line Feed) 文字によって行分け
18006 されたバイトの連続なのである。なお、この LF 文字は、Unix の文書では
18007 「改行 (newline)」と呼ばれる習慣になっている (C のプログラマにとっては
18008 @code{\n} だ)。これこそ、すべての伝統的なフィルター・プログラムによって使用
18009 されて来たフォーマットである。(昔のオペレーティング・システムの多くは、
18010 バイナリ・データを扱うための複雑な手段や専用のプログラムを備えていた。
18011 だが、Unix は、ただ単にテキストエディタでデータを見たり編集できたり
18012 する方がはるかに簡単だという考えから、そうした道具をずっと敬遠してきた
18013 のである。)
18014
18015 さて、前置きはこれくらいで十分だ。まず、道具のいくつかをざっと見て
18016 みよう。その後で、そうした道具をおもしろいやり方で組み合わせる方法を
18017 ご覧に入れる。以下の解説では、当面の問題に関係のあるコマンドライン・
18018 オプションしか取り上げない。いつでもそうすべきことだが、コマンドについて
18019 詳しいことを知りたかったら、ご使用のシステムの文書を参照なさるとよい。
18020
18021 @node The who command
18022 @unnumberedsec @command{who} コマンド
18023
18024 最初に取り上げるプログラムは、@command{who} コマンドだ。これは単独で使うと、
18025 現在ログインしているユーザのリストを生成する (参照: @ref{who invocation})。
18026 筆者がこの原稿を書いているのは、シングルユーザのシステム
18027 だが、数人のユーザがログインしていることにしよう。
18028
18029 @example
18030 $ who
18031 @print{} arnold   console Jan 22 19:57
18032 @print{} miriam   ttyp0   Jan 23 14:19(:0.0)
18033 @print{} bill     ttyp1   Jan 21 09:32(:0.0)
18034 @print{} arnold   ttyp2   Jan 23 20:48(:0.0)
18035 @end example
18036
18037 ここで @samp{$} はお馴染みのシェルプロンプトであり、筆者はそれに対して
18038 @samp{who} と打ち込んだわけだ。三人のユーザがログインしており、筆者は二度
18039 ログインしている。伝統的な Unix のシステムでは、ユーザ名はアルファベット
18040 8 文字までということになっている。このちょっとした豆知識が、後で役に
18041 立つことになる。@samp{who} の出力は悪くはない。だが、大しておもしろいデータ
18042 でもない。
18043
18044 @node The cut command
18045 @unnumberedsec @command{cut} コマンド
18046
18047 次に注目するプログラムは @command{cut} コマンドだ。このコマンドは、入力された
18048 データから縦の列 (columns) やフィールドを切り出す (参照: @ref{cut invocation})。
18049 そこで、@command{cut} に命じて、@file{/etc/passwd} ファイルから
18050 ログイン名とフルネームだけ表示させるといったことができる。@file{/etc/passwd}
18051 には、七つのフィールドがあり、おのおのコロンで区切られている。
18052
18053 @example
18054 arnold:xyzzy:2076:10:Arnold D. Robbins:/home/arnold:/bin/bash
18055 @end example
18056
18057 1 番目と 5 番目のフィールドを取り出すには、次のように @command{cut} を使用
18058 する。
18059
18060 @example
18061 $ cut -d: -f1,5 /etc/passwd
18062 @print{} root:Operator
18063 @dots{}
18064 @print{} arnold:Arnold D. Robbins
18065 @print{} miriam:Miriam A. Robbins
18066 @dots{}
18067 @end example
18068
18069 @option{-c} オプションを付けると、 @command{cut} は入力行中の特定の文字 (すなわち、
18070 特定の縦の列) を切り出す。これは、入力データが固定幅のフィールドを持ち、
18071 フィールド・セパレータがないときに便利である。たとえば、今月の月曜日は、
18072 何日と何日かをリストするには、次のようにする。
18073
18074 @c Is using cal ok?  Looked at gcal, but I don't like it.
18075 @example
18076 $ cal | cut -c 3-5
18077 @print{} Mo
18078 @print{}
18079 @print{}  6
18080 @print{} 13
18081 @print{} 20
18082 @print{} 27
18083 @end example
18084
18085 @node The sort command
18086 @unnumberedsec @command{sort} コマンド
18087
18088 次に @command{sort} コマンドを一瞥する。これは Unix 風のシステムにおける最も
18089 強力なコマンドの一つであり、パイプを使って手の込んだデータ処理を行う
18090 とき、気がつくと使っていることがよくあるものだ。
18091
18092  @command{sort} コマンドは、コマンドラインで指名された各ファイルを読み込んで、
18093 ソートする。その後で、ソートしたデータをマージし、それを標準出力に書き
18094 出す。コマンドラインでファイルが指定されていない場合は、標準入力を読み
18095 込む (こうして、フィルターになる)。ソートは、文字の照合順序、あるいは、
18096 ユーザが順序について指定した基準に基づいて行われる (参照: @ref{sort invocation})。
18097
18098
18099 @node The uniq command
18100 @unnumberedsec @command{uniq} コマンド
18101
18102 最後に目を向けるのは (少なくとも今のところはだが)、@command{uniq} プログラムだ。
18103 データのソートをしていると、結果に重複行が現れることがよくある。内容が
18104 全く同じ行だ。たいていの場合、各行は一つだけあればよい。そこで、@command{uniq}
18105 の出番になる。@command{uniq} プログラムは、標準入力を読み込み、連続する同一行に
18106 ついては、そのうちの一件だけを表示する。@command{uniq} には、オプションがいくつ
18107 かある。後で @option{-c} オプションを使うことになるが、これはユニークな、つまり
18108 他と違っている各行を表示するとき、その行が入力中に現れた回数を前に付ける
18109 ものである (参照: @ref{uniq invocation})。
18110
18111
18112 @node Putting the tools together
18113 @unnumberedsec 工具 (tools) を組み合わせる
18114
18115 さて、大規模な ISP のサーバーシステムがあって、何十人ものユーザが
18116 ログインしているとしよう。経営側がシステム管理者に、ログインしている
18117 ユーザのソートしたリストを生成するプログラムを書くことを求めている。
18118 しかも、あるユーザが多重ログインをしていても、その人の名前は出力に
18119 1 回だけ現れればよいという条件がある。
18120
18121 システム管理者は腰を据えてシステムのマニュアル類に取り組み、そうした
18122 作業を実行する C のプログラムを書くこともできるだろう。そのためには、
18123 たぶん数百行のコードが必要であり、プログラムを書いて、テストして、
18124 デバッグするには、2 時間ぐらいかかるはずだ。それに対して、ソフトウェアの
18125 道具箱に精通しているシステム管理者なら、C のプログラムを書く代わりに、
18126 ログインしているユーザのリストを生成するところから始めることができる。
18127
18128 @example
18129 $ who | cut -c1-8
18130 @print{} arnold
18131 @print{} miriam
18132 @print{} bill
18133 @print{} arnold
18134 @end example
18135
18136 次に、リストをソートする。
18137
18138 @example
18139 $ who | cut -c1-8 | sort
18140 @print{} arnold
18141 @print{} arnold
18142 @print{} bill
18143 @print{} miriam
18144 @end example
18145
18146 最後に、ソートしたリストを @command{uniq} に渡して、重複を除く。
18147
18148 @example
18149 $ who | cut -c1-8 | sort | uniq
18150 @print{} arnold
18151 @print{} bill
18152 @print{} miriam
18153 @end example
18154
18155 実を言うと、@command{sort} コマンドには @option{-u} というオプションがあって、@command{uniq}
18156 がやることをやってくれる。しかし、@command{uniq} にはほかの働きもあり、そちらは
18157 @samp{sort -u} で代用することができない。
18158
18159 システム管理者が、以下のように、このパイプラインをシェルスクリプトに
18160 しておけば、システムのすべてのユーザが利用できるようになる (@samp{#} は
18161 システム管理者、すなわち @code{root} のプロンプトだ)。
18162
18163 @example
18164 # cat > /usr/local/bin/listusers
18165 who | cut -c1-8 | sort | uniq
18166 ^D
18167 # chmod +x /usr/local/bin/listusers
18168 @end example
18169
18170 ここには、心に留めておくべき重要なことが四つある。まず第一に、1 行の
18171 コマンドラインにたった四つのプログラムを書くことで、システム管理者は約
18172 2 時間分の仕事をしないで済ますことができた。それだけではない。シェルの
18173 パイプラインは、C のプログラムを使った場合と比べても、ほぼ同じくらい
18174 効率がよく、プログラマの労働時間という点から見ると、ずっとずっと効率が
18175 よい。人間の労働時間はコンピュータの時間よりはるかに高価であり、「何も
18176 かもやるには、いつだって時間が足りない」現代社会では、プログラマの時間
18177 を 2 時間も節約するのは、馬鹿にできない成果だ。
18178
18179 二番目に、ツールを組み合わせることで、個々のプログラムの作者が想像も
18180 しなかったような、ある特定の目的のための仕事をやってのけることができる。
18181 これも、強調しておくべき重要なことである。
18182
18183 第三に、ここでやって見せたように、段階を追ってパイプラインを構成する
18184 のも有益な方法だ。そうすれば、パイプラインの段階ごとにデータを目で見る
18185 ことができるので、ツール類を間違いなく適切に使っているという自信を得る
18186 ことができる。
18187
18188 最後に、実行したパイプラインをシェルスクリプトにまとめておけば、
18189 他のユーザがそのコマンドを使うことができる。彼らのために作成した
18190 手の込んだコマンドの配管工事を、彼らは憶える必要すらないのだ。どう
18191 やって実行するかという点から見ると、シェルスクリプトもコンパイル
18192 されたプログラムも見分けが付かないのである。
18193
18194 ここまでは準備運動だ。続いて、もっと複雑なパイプラインをもう二つ
18195 ご覧に入れよう。そのためには、工具をもう二つ紹介する必要がある。
18196
18197 一つ目は @command{tr} コマンドだ。``transliterate (翻字する、字を置き換える)''
18198 の意味である。 @command{tr} コマンドは、一字一字処理して行くというやり方で、
18199 文字を置き換える (参照: @ref{tr invocation})。通常、このコマンドを使用
18200 するのは、大文字を小文字に変換するといったことのためである。
18201
18202 @example
18203 $ echo ThIs ExAmPlE HaS MIXED case! | tr '[:upper:]' '[:lower:]'
18204 @print{} this example has mixed case!
18205 @end example
18206
18207 役に立ちそうなオプションがいくつかある。
18208
18209 @table @code
18210 @item -c
18211 リストされた文字の補集合を動作対象にする。言い換えると、指定された
18212 集合に存在しない文字に対して操作が行われる。
18213
18214 @item -d
18215 一つ目の集合にある文字を出力から削除する。
18216
18217 @item -s
18218 出力中の連続する同一文字を、ただの 1 文字に圧縮する。
18219 @end table
18220
18221 すぐ後で、この三つのオプションをすべて使うことになる。
18222
18223 紹介するもう一つのコマンドは、@command{comm} だ。@command{comm} コマンドは、二つの
18224 ソートされた入力ファイルを入力データとして受け取り、両ファイルの各行を
18225 三つの列に分けて表示する。出力される列は、一番目のファイルにのみ存在
18226 する行、二番目のファイルにのみ存在する行、両方のファイルに存在する行の
18227 順番である。@option{-1}, @option{-2}, @option{-3} というコマンドライン・オプションを
18228 付けると、対応する列を表示しないようになる。 (これは直感的ではないので、
18229 ちょっとした慣れが必要だ。参照: @ref{comm invocation}) 例を挙げよう。
18230
18231 @example
18232 $ cat f1
18233 @print{} 11111
18234 @print{} 22222
18235 @print{} 33333
18236 @print{} 44444
18237 $ cat f2
18238 @print{} 00000
18239 @print{} 22222
18240 @print{} 33333
18241 @print{} 55555
18242 $ comm f1 f2
18243 @print{}         00000
18244 @print{} 11111
18245 @print{}                 22222
18246 @print{}                 33333
18247 @print{} 44444
18248 @print{}         55555
18249 @end example
18250
18251 ファイル名を @file{-} にすると、@command{comm} は通常ファイルではなく、標準入力を
18252 読み込む。
18253
18254 これで、気の利いたパイプラインを組み立てる準備ができた。最初に作る
18255 アプリケーションは、単語の出現頻度カウンターである。これは、ある特定の
18256 単語を使いすぎていないかどうか、文書の作成者が判断するとき、役に立つ。
18257
18258 最初のステップは、入力ファイル中のすべての文字を大文字か小文字の
18259 どちらかに統一することである。``The'' と ``the'' は、頻度計算にとって同じ
18260 単語だ。
18261
18262 @example
18263 $ tr '[:upper:]' '[:lower:]' < whats.gnu | ...
18264 @end example
18265
18266 次のステップは、句読点を除去することだ。引用符の付いている単語と
18267 付いていない単語も同じものとして扱った方がよいだろう。それならば、
18268 句読点類をすっぱり取り除いてしまうのが、一番簡単だ。
18269
18270 @smallexample
18271 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' | ...
18272 @end smallexample
18273
18274 二番目の @command{tr} コマンドは、リストされた文字の補集合を操作対象にして
18275 いる。すなわち、アルファベットのすべての文字、数字、アンダースコア、空白
18276 以外を対象にするわけだ。@samp{\n} は改行文字のことであり、これもそのまま残さ
18277 なければならない。(市販のアプリで使うスクリプトなら、念のため ASCII タブ
18278 文字も含めた方がよいだろう。)
18279
18280 この時点で、空白 (訳注: 改行を含む) で区切られた単語からなるデータが
18281 できていることになる。単語には、英数字 (それにアンダースコア) しか含まれ
18282 ていない。次のステップは、データをバラして、1 行 1 単語になるようにする
18283 ことだ。そうすれば、すぐ後で見るように、出現回数の計算がずっと楽になる。
18284
18285 @smallexample
18286 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18287 > tr -s ' ' '\n' | ...
18288 @end smallexample
18289
18290 このコマンドは、空白を改行に変える。@option{-s} オプションが付いているので、
18291 出力中の連続する改行文字は、たった 1 個に圧縮される。これで、空行を
18292 なくすことができるわけだ。(なお、2 行目行頭の @samp{>} という記号は、シェル
18293 の二次プロンプトである。シェルがユーザに、コマンドがまだ最後まで打ち
18294 込まれていないと知らせるとき、これが表示される。)
18295
18296 今や、1 行 1 単語からなるデータが手元にある。句読点は含まれず、すべて
18297 小文字だ。これで、各単語の出現回数を数える準備が整った。
18298
18299 @smallexample
18300 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18301 > tr -s ' ' '\n' | sort | uniq -c | ...
18302 @end smallexample
18303
18304 この時点で、データはたぶんこんなふうになっているだろう。
18305
18306 @example
18307      60 a
18308       2 able
18309       6 about
18310       1 above
18311       2 accomplish
18312       1 acquire
18313       1 actually
18314       2 additional
18315 @end example
18316
18317 なんと、出力が出現回数ではなく、単語によってソートされている! こちら
18318 としては、最も頻繁に使われる単語ほど先に表示したいのにだ。幸いなことに、
18319 それは簡単に実現できる。@command{sort} のオプションをもう二つ使うだけでよい。
18320
18321 @table @code
18322 @item -n
18323 文字としてではなく、数値としてソートする。
18324
18325 @item -r
18326 逆順にソートする。
18327 @end table
18328
18329 最終的なパイプラインは次のようになる。
18330
18331 @smallexample
18332 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18333 > tr -s ' ' '\n' | sort | uniq -c | sort -n -r
18334 @print{}    156 the
18335 @print{}     60 a
18336 @print{}     58 to
18337 @print{}     51 of
18338 @print{}     51 and
18339 @dots{}
18340 @end smallexample
18341
18342 ふう、憶えることがどっさり! うん、でもね、同じ原則を応用してるだけ
18343 なんだよ。たった 2 行、6 個のコマンドで (実際には、長い 1 行を便宜上
18344 2 行に分割しているだけだが) 興味深く有用な作業をするプログラムが
18345 出来上がった。それも、同じこことする C のプログラムを書くよりもずっと
18346 短い時間でだ。
18347
18348 上記のパイプラインをちょっといじるだけで、なんと、簡単なスペル
18349 チェッカーが出来てしまう。ある単語の綴りが正しいかどうかを判断するには、
18350 辞書で調べさえすればよい。その単語が辞書になければ、綴りを間違えている
18351 可能性が高いわけだ。そこで、とりあえず、辞書が必要になる。辞書の在り処
18352 は、慣例からすると @file{/usr/dict/words} だ。筆者の GNU/Linux システムでは
18353 @footnote{この記事を 2000 年 11 月に改訂したとき使用したのは、Redhat Linux
18354 6.1 である}、それはソートされた 45,402 語からなる辞書である。
18355
18356 それでは、自分の作ったファイルをどうやって辞書と比べるのか? 前の例と
18357 同様、ソートした単語のリストを 1 行 1 語の形式で生成する。
18358
18359 @smallexample
18360 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18361 > tr -s ' ' '\n' | sort -u | ...
18362 @end smallexample
18363
18364 必要なのは、辞書にない単語のリストだけだ。そこで、@command{comm} の出番に
18365 なる。
18366
18367 @smallexample
18368 $ tr '[:upper:]' '[:lower:]' < whats.gnu | tr -cd '[:alnum:]_ \n' |
18369 > tr -s ' ' '\n' | sort -u |
18370 > comm -23 - /usr/dict/words
18371 @end smallexample
18372
18373 @option{-2} と @option{-3} のオプションを使うと、辞書 (2 番目のファイル) にしかない
18374 行と、両方のファイルにある行が排除される。1 番目のファイル (標準入力、
18375 すなわち、自分が使った単語のリストだ) にしかない行は、辞書に存在しない
18376 単語だ。そうした単語は、綴りを間違えている可能性がかなり高いわけである。
18377 ご覧に入れたこのパイプラインは、Unix における市販のスペルチェッカーに
18378 対する最初の一太刀だったのである。
18379
18380 他にも一言述べておくべきツールがいくつかある。
18381
18382 @table @command
18383 @item grep
18384 ファイルを調べて、正規表現にマッチするテキストを検索する。
18385
18386 @item wc
18387 行数、単語数、文字数を計算する。
18388
18389 @item tee
18390 データが流れるパイプのための T 字管。データをファイルと標準出力に
18391 コピーする。
18392
18393 @item sed
18394 ストリーム・エディタ。上級ツール。
18395
18396 @item awk
18397 データ処理用の言語。これも上級ツール。
18398 @end table
18399
18400 ソフトウェア工具論が取り入れたものに、次のちょっとしたアドバイスも
18401 ある。「骨の折れる部分は、他の奴にやらせろ」。すなわち、ある道具を
18402 選んで、必要なことの大部分をやらせ、それから、その結果に手を加えて、
18403 こちらの望む形にする、ということである。
18404
18405 要約しておこう。
18406
18407 @enumerate 1
18408 @item
18409 個々のプログラムは、一つの仕事をきちんとやってのければよい。それ
18410 以上でもそれ以下でもない。
18411
18412 @item
18413 プログラムを適切な配管工事で組み合わせると、全体が部分の総和以上に
18414 なる結果が生じる。作者が想像もしなかったようなプログラムの新しい
18415 使用法が見つかることもある。
18416
18417 @item
18418 プログラムは決して余計なヘッダや追加情報を出力すべきではない。
18419 そうしたものもパイプラインの先へ送られてしまうかもしれないからだ。
18420 (これは、これまでに言及しなかったが、重要なことだ。)
18421
18422 @item
18423 骨の折れる部分は、他の奴にやらせろ。
18424
18425 @item
18426 自分の道具箱をよく知れ! 個々のプログラムを適切に使え。適切なツール
18427 がなかったら、それを作れ。
18428 @end enumerate
18429
18430 これを執筆している時点で、ここで取り上げたプログラムはすべて次の
18431 URL から手に入れることができる。@*
18432 @uref{http://ftp.gnu.org/old-gnu/textutils/textutils-1.22.tar.gz} @*
18433 もっと新しいバージョンは以下の場所にある。@*
18434 @uref{http://ftp.gnu.org/gnu/coreutils}
18435
18436 この記事で筆者が述べたことに、新しいことは何もない。ソフトウェアは
18437 工具だという思想が最初に紹介されたのは、Brian Kernighan と P.J. Plauger
18438 による @cite{Software Tools} という本の中だった (Addison-Wesley, ISBN
18439 0-201-03669-X)。ソフトウェア工具の書き方と使い方を教えるこの本は、1976
18440 年に執筆され、@command{ratfor} (RATional FORtran) という名前の FORTRAN のプリ
18441 プロセッサを使用している。その当時、C は今ほどありふれてはいず、FORTRAN
18442 がそうだったのだ。最後の章では、@command{ratfor} を FORTRAN に変換するプロセッサ
18443 を @command{ratfor} で書いて見せている。@command{ratfor} は C にとてもよく似ているので、
18444 C を御存じの方なら、コードを追うのに何の苦労もないことだろう。
18445 (訳注: @cite{Software Tools} の翻訳は「ソフトウェア作法」という題で 1981 年に
18446 出版されている。木村泉 訳、共立出版)
18447
18448 1981 年に本は改訂され、@cite{Software Tools in Pascal} という形でも手に
18449 入るようになった (Addison-Wesley, ISBN 0-201-10342-7)。どちらの本も
18450 現在でも入手可能であり、プログラマなら、一読の価値が十分にある。この
18451 2 冊の本が筆者のプログラミングに対する見方を大きく変えてくれたことに、
18452 疑いの余地はない。
18453
18454 両方の本にあるプログラムは、Brian Kernighan のホームページから手に
18455 入れることができる (@uref{http://cm.bell-labs.com/who/bwk})。Software Tools
18456 Users Group という活動的なグループが長年に渡って存在し、そのメンバーが
18457 オリジナルの @command{ratfor} プログラムを、FORTRAN コンパイラを持っている
18458 ほとんどすべてのコンピュータ・システムに移植していた。だが、1980 年代の
18459 中頃に Unix が大学を越えて浸透し出すにつれて、グループの人気は衰えて
18460 行った。
18461
18462 現在では GNU のコードをはじめ、Unix クローンのプログラムがどんどん
18463 作られており、上記のプログラムはほとんど関心を持たれていない。それに、
18464 現代の C のバージョンの方がはるかに効率がよく、できることも上記の
18465 プログラムよりずっと多くなっている。それでも、よいプログラミング・
18466 スタイルのお手本として、また、今でも価値がある考え方を熱心に説いている
18467 点において、この 2 冊の本は肩を並べるものがない。筆者としては、大いに
18468 お薦めする次第だ。
18469
18470 謝辞: ソフトウェア工具の最初の道具鍛冶である、Bell 研究所の Brian
18471 Kernighan 氏に、この記事を読んでチェックしてくださったことについて、
18472 心からお礼を申し上げる。
18473
18474 @node About the translation
18475 @appendix 翻訳について
18476
18477 この文書は GNU core utilities version @value{VERSION} の info マニュアルの翻訳
18478 である。間違いの御指摘や改良の御提案は Linux JM project 宛にメールで
18479 なさっていただきたい (@email{linuxjm-discuss@@lists.osdn.me})。
18480  
18481 まず最初に、coreutils の日本語版 info マニュアルの呼び出し方を簡単に
18482 説明する。coreutils の 日本語版 info が install-info コマンドを使って
18483 きちんとシステムにインストールされているならば、コマンドラインから 
18484 @samp{info coreutils-ja} で日本語マニュアル全体を、@samp{info chmod-ja} などで
18485 個々のプログラムの日本語マニュアルを呼び出すことができる。英語版を
18486 読むときは、今までどおり @samp{info coreutils} や @samp{info chmod} とすればよい。
18487 個々のコマンドについては、英語版なら @samp{info coreutils 'cp invocation'}、
18488 日本語版なら @samp{info coreutils-ja 'cp invocation'} といったマニュアルの
18489 呼び出し方もある。
18490
18491 (注意: ご使用の coreutils のバージョンが 8.23 の場合は、info 
18492 マニュアルのトップレベルのメニューに、Coreutils というメニュー項目 
18493 (英語版 coreutils マニュアルの最初のページ) のほかに、 coreutils 
18494 という小文字のメニュー項目もあるので、話がもう少し複雑である。英語版 
18495 coreutils マニュアルの最初のページを info コマンドで開くときは、
18496 @samp{info Coreutils} と大文字で指定していただきたい。また、
18497 @samp{info coreutils 'cp invocation'} といった呼び出し方をする場合も、
18498 @samp{info Coreutils 'cp invocation'} などと Coreutils を大文字にする必要がある。
18499 バージョン 8.22 には、英語版、日本語版とも、この問題はない。)
18500
18501 また、@samp{info} を引数なしで実行すると、info マニュアルのトップレベルの
18502 メニューが開く。ここで、メニュー項目にカーソルを合わせて、リターンキーを
18503 押せば、その項目に飛ぶ。しかし、読みたい項目をキー操作で指定する方が簡単
18504 である。たとえば、@kbd{m} キーを押した後 @kbd{chmod-ja} と打ち込んで、リターン
18505 キーを押せば、chmod コマンドの日本語版マニュアルが、@kbd{chmod} だけなら
18506 英語版マニュアルが表示される。
18507
18508 @kbd{coreutils-ja}、@kbd{chmod-ja} などと @kbd{-ja} を付けるのは、@command{info} 
18509 プログラムを起動するときと、info のトップレベル・メニューにいるとき
18510 だけである。すでに日本語版 coreutils マニュアルのどれかを (それが 
18511 coreutils-ja であれ、dd-ja であれ) @command{info} コマンドで開いている場合は、
18512 @kbd{-ja} を後ろに付ける必要がなくなる。と言うより、付けてはいけない。
18513 coreutils-ja の先頭ページのようにコマンドのメニューが存在するページ
18514 では (実際には、スクロールしないと、メニューが見えないが)、たとえば、
18515 @kbd{m} に続けて @kbd{chmod} と打ち込み、リターンキーを押すだけで、chmod の
18516 日本語の説明が開く。また、日本語 coreutils マニュアルの任意のページ
18517 から coreutils-ja の他のノードへ直接飛ぶ場合も (ノードは、ほぼ章や節に
18518 相当する)、@kbd{g} キーを押してから、@kbd{chmod invocation} などとノード名を
18519 打ち込み、リターンキーを押せばよい。@kbd{m} の場合はタブやスペースで、
18520 @kbd{g} の場合はタブで、文字列の補完ができる。(たぶん coreutils-ja.info の
18521 パッケージには、README.ja というファイルが含まれていると思う。その
18522 「2.1 日本語 info マニュアルの呼び出し方」という節にもう少し詳しい
18523 説明を書いておいたので、ご覧になっていただきたい。)
18524
18525 ここで、日本語の info マニュアルを使用するときの問題点を挙げておく。
18526
18527 @enumerate
18528 @item
18529 @command{info} コマンドは、日本語の行末表示が上手ではない。そのため、
18530 行末に余計な文字が入ることがある。そうしたときは、@kbd{C-l} を押して 
18531 (Ctrl と l (エル) キーを同時に押す)、画面の再描画を行っていただき
18532 たい。表示が正常になるはずである。Emacs の info リーダーでは、この
18533 問題はめったに起きない。
18534
18535 @item
18536 現在のところ、@command{info} コマンドでは、@kbd{s} や @kbd{/} で日本語の単語を検索
18537 できないようだ。@kbd{C-s} による日本語の検索は、単語によっては成功する
18538 こともあるが、''Unknown command'' で失敗することもあり、これもあまり
18539 頼りにならない。それに対して、Emacs の info リーダーでは、@kbd{s} でも 
18540 @kbd{C-s} でも日本語の検索ができる。
18541
18542 @item
18543 coreutils の info のこの翻訳では、インデックスの日本語化まで手が
18544 回らなかった。そのため、インデックスは英語のままである。
18545
18546 @item
18547 古めの Emacs でこの翻訳を読もうとすると、文字化けするかもしれない。
18548 回避法があるのかもしれないが、訳者にはわからなかった。
18549 @end enumerate
18550
18551 この翻訳の最初の版は、coreutils-8.20 所収の texinfo ファイルを元に、
18552 Linux JM project のために訳者が新たに翻訳したものだった。以下に、
18553 そのときの後書きをほぼそのまま載せておく。
18554
18555 この info マニュアルの原文は、本文の「序」でも述べているように、
18556 各プログラムの man ページを統合し、増補・改訂したものである。この info 
18557 マニュアルがまとめられるにともない、公式の man ページの方はコマンドの 
18558 @samp{--help} オプションで見ることができるものとほぼ同文の、簡単な内容の
18559 ものになった。
18560
18561 従来どおりの詳しい man ページを希望する人たちも存在した。そのために
18562 作られたのが、gnumaniak の man ページであり、従来の man ページを info 
18563 の情報で増補したものだったが、現在では保守されていないようだ。
18564
18565 作成の経緯がそうしたものなので、この info マニュアルの原文には、
18566 gnumaniak の man ページの原文とほとんど内容が同じものがある。翻訳作業
18567 に当たっては、すべての項目について gnumaniak の man ページの翻訳を
18568 参考にした。あちらの訳文の方がよくできている項目もある (gnumaniak の
18569 翻訳は @uref{http://linuxjm.osdn.jp/html/gnumaniak/man1/} にある)。
18570
18571 この翻訳は、Linux JM project の gnumaniak の翻訳に多くを負っている。
18572 そこで、まず、gnumaniak の翻訳者の方々 --- 中野武雄、佐藤裕一、
18573 白方健太郎、Kazuyuki Tanisako、Omo Kazuki の諸氏にお礼を申し上げる。
18574
18575 訳文を見直す際には、西尾太さんが以前翻訳なさった coreutils-5.2.1 の 
18576 info を参考にした。また、当然ながら、新しい man ページ (こちらの
18577 翻訳者は、たぶん Yasuaki Taniguchi さんと Akihiro MOTOKI さん) とも、
18578 できるだけ突き合わせた。西尾さん、Taniguchi さん、元木さんにもお礼を
18579 申し上げる。
18580
18581 gnumaniak や coreutils の man や info の翻訳をなさった方で、私が
18582 お名前を挙げ忘れた方がいらっしゃるかもしれない。お知らせくだされば、
18583 追加訂正する。
18584
18585 訳文には間違った箇所がたくさんあると思う。そのへんは、ご寛恕いただき
18586 たい。皆さんがこの訳文を叩き台にして、増補・改訂・改訳を続け、より
18587 新しく、よりわかりやすい、そして、より正確な coreutils の翻訳を作って
18588 くだされば、最初の翻訳者としてそれにまさる喜びはない。
18589
18590 2014-10-07 訳者
18591
18592 [翻訳履歴]
18593
18594 @itemize @bullet
18595 @item
18596 2014-03-15@*
18597 coreutils-8.20 を翻訳    by 長南洋一@*
18598 ptx, tsort, chcon, runcon は未訳
18599
18600 @item
18601 2014-11-25@*
18602 coreutils-8.22 を元に増補・改訂    by 長南洋一@*
18603 numfmt, ptx, tsort, chcon, runcon を翻訳
18604
18605 @item
18606 2016-02-26@*
18607 numfmt の章の構成を修正。訳文の訂正と細かい変更    by 長南洋一
18608 @end itemize
18609
18610 @node GNU Free Documentation License
18611 @appendix GNU Free Documentation License
18612
18613 @include fdl.texi
18614
18615 @node Concept index
18616 @unnumbered Index
18617
18618 @printindex cp
18619
18620 @bye
18621
18622 @c Local variables:
18623 @c texinfo-column-for-description: 32
18624 @c End: