6.51. Coreutils-8.25

Coreutils パッケージはシステムの基本的な特性を表示したり設定したりするためのユーティリティを提供します。

概算ビルド時間: 2.6 SBU
必要ディスク容量: 168 MB

6.51.1. Coreutils のインストール

POSIX では Coreutils により生成されるプログラムは、マルチバイトロケールであっても、文字データを正しく取り扱うことを求めています。 以下のパッチは標準に準拠することと、国際化処理に関連するバグを解消することを行います。

patch -Np1 -i ../coreutils-8.25-i18n-2.patch
[注記]

注記

このパッチには以前は多くのバグがありました。 新たなバグを発見したら、Coreutils の開発者に報告する前に、このパッチを適用せずにバグが再現するかどうかを確認してください。

Coreutils をコンパイルするための準備をします。

FORCE_UNSAFE_CONFIGURE=1 ./configure \
            --prefix=/usr            \
            --enable-no-install-program=kill,uptime

configure オプションの意味:

FORCE_UNSAFE_CONFIGURE=1

この環境変数は root ユーザーによりパッケージをビルドできるようにします。

--enable-no-install-program=kill,uptime

指定のプログラムは、後に他のパッケージからインストールするため Coreutils からはインストールしないことを指示します。

パッケージをコンパイルします。

FORCE_UNSAFE_CONFIGURE=1 make

テストスイートを実行しない場合はパッケージをインストールします。と書かれたところまで読み飛ばしてください。

テストスイートを実行します。 まずは root ユーザーに対するテストを実行します。

make NON_ROOT_USERNAME=nobody check-root

ここからのテストは nobody ユーザーにより実行します。 ただしいくつかのテストでは、複数のグループに属するユーザーを必要とします。 そのようなテストを確実に実施するために、一時的なグループを作って nobody ユーザーがそれに属するようにします。

echo "dummy:x:1000:nobody" >> /etc/group

特定のファイルのパーミッションを変更して root ユーザー以外でもコンパイルとテストができるようにします。

chown -Rv nobody . 

テストを実行します。 su 環境において PATH に /tools/bin が含まれていることを確認してください。

su nobody -s /bin/bash \
          -c "PATH=$PATH make RUN_EXPENSIVE_TESTS=yes check"

stty-pairs テストは仮想端末上では失敗します。 しかし X 端末では成功します。

一時的に作成したグループを削除します。

sed -i '/dummy/d' /etc/group

パッケージをインストールします。

make install

FHS が規定しているディレクトリにプログラムを移します。

mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8
sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8

BLFSブック以降で利用するパッケージの中には、以下に示すプログラムが /bin に存在することを前提としているものがあります。 そこでそれらのプログラムを移動させます。

mv -v /usr/bin/{head,sleep,nice,test,[} /bin

6.51.2. Coreutils の構成

インストールプログラム: [, base32, base64, basename, cat, chcon, chgrp, chmod, chown, chroot, cksum, comm, cp, csplit, cut, date, dd, df, dir, dircolors, dirname, du, echo, env, expand, expr, factor, false, fmt, fold, groups, head, hostid, id, install, join, link, ln, logname, ls, md5sum, mkdir, mkfifo, mknod, mktemp, mv, nice, nl, nohup, nproc, numfmt, od, paste, pathchk, pinky, pr, printenv, printf, ptx, pwd, readlink, realpath, rm, rmdir, runcon, seq, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, shred, shuf, sleep, sort, split, stat, stdbuf, stty, sum, sync, tac, tail, tee, test, timeout, touch, tr, true, truncate, tsort, tty, uname, unexpand, uniq, unlink, users, vdir, wc, who, whoami, yes
インストールライブラリ: libstdbuf.so
インストールディレクトリ: /usr/libexec/coreutils

概略説明

base32

base32 規格 (RFC 4648) に従ってデータのエンコード、デコードを行います。

base64

base64 規格 (RFC 3548) に従ってデータのエンコード、デコードを行います。

basename

ファイル名からパス部分と指定されたサフィックスを取り除きます。

cat

複数ファイルを連結して標準出力へ出力します。

chcon

ファイルやディレクトリに対してセキュリティコンテキスト (security context) を変更します。

chgrp

ファイルやディレクトリのグループ所有権を変更します。

chmod

指定されたファイルのパーミッションを、指定されたモードに変更します。 モードは、変更内容を表す文字表現か、8進数表現を用いることができます。

chown

ファイルやディレクトリの所有者またはグループを変更します。

chroot

指定したディレクトリを / ディレクトリとみなしてコマンドを実行します。

cksum

指定された複数のファイルについて、CRC (Cyclic Redundancy Check; 巡回冗長検査) チェックサム値とバイト数を表示します。

comm

ソート済の二つのファイルを比較して、一致しない固有の行と一致する行を三つのカラムに分けて出力します。

cp

ファイルをコピーします。

csplit

指定されたファイルを複数の新しいファイルに分割します。 分割は指定されたパターンか行数により行います。 そして分割後のファイルにはバイト数を出力します。

cut

指定されたフィールド位置や文字位置によってテキスト行を部分的に取り出します。

date

指定された書式により現在時刻を表示します。 またはシステム日付を設定します。

dd

指定されたブロックサイズとブロック数によりファイルをコピーします。 変換処理を行うことができます。

df

マウントされているすべてのファイルシステムに対して、ディスクの空き容量 (使用量) を表示します。 あるいは指定されたファイルを含んだファイルシステムについてのみの情報を表示します。

dir

指定されたディレクトリの内容を一覧表示します。(ls コマンドに同じ。)

dircolors

環境変数 LS_COLOR にセットするべきコマンドを出力します。 これは ls がカラー設定を行う際に利用します。

dirname

ファイル名から、ディレクトリ名以外のサフィックスを取り除きます。

du

カレントディレクトリ、指定ディレクトリ (サブディレクトリを含む)、指定された個々のファイルについて、それらが利用しているディスク使用量を表示します。

echo

指定された文字列を表示します。

env

環境設定を変更してコマンドを実行します。

expand

タブ文字を空白文字に変換します。

expr

表現式を評価します。

factor

指定された整数値すべてに対する素因数 (prime factor) を表示します。

false

何も行わず処理に失敗します。これは常に失敗を意味するステータスコードを返して終了します。

fmt

指定されたファイル内にて段落を整形します。

fold

指定されたファイル内の行を折り返します。

groups

ユーザーの所属グループを表示します。

head

指定されたファイルの先頭10行 (あるいは指定された行数) を表示します。

hostid

ホスト識別番号 (16進数) を表示します。

id

現在のユーザーあるいは指定されたユーザーについて、有効なユーザーID、グループID、所属グループを表示します。

install

ファイルコピーを行います。その際にパーミッションモードを設定し、可能なら所有者やグループも設定します。

join

2つのファイル内にて共通項を持つ行を結合します。

link

指定された名称により、ファイルへのハードリンクを生成します。

ln

ファイルに対するハードリンク、あるいはソフトリンク (シンボリックリンク) を生成します。

logname

現在のユーザーのログイン名を表示します。

ls

指定されたディレクトリ内容を一覧表示します。

md5sum

MD5 (Message Digest 5) チェックサム値を表示、あるいはチェックします。

mkdir

指定された名前のディレクトリを生成します。

mkfifo

指定された名前の FIFO (First-In, First-Out) を生成します。 これは UNIX の用語で "名前付きパイプ (named pipe)" とも呼ばれます。

mknod

指定された名前のデバイスノードを生成します。 デバイスノードはキャラクター型特殊ファイル (character special file)、ブロック特殊ファイル (block special file)、FIFO です。

mktemp

安全に一時ファイルを生成します。 これはスクリプト内にて利用されます。

mv

ファイルあるいはディレクトリを移動、名称変更します。

nice

スケジューリング優先度を変更してプログラムを実行します。

nl

指定されたファイル内の行を数えます。

nohup

ハングアップに関係なくコマンドを実行します。 その出力はログファイルにリダイレクトされます。

nproc

プロセスが利用可能なプロセスユニット (processing unit) の数を表示します。

numfmt

記述された文字列と数値を互いに変換します。

od

ファイル内容を 8進数または他の書式でダンプします。

paste

指定された複数ファイルを結合します。 その際には各行を順に並べて結合し、その間をタブ文字で区切ります。

pathchk

ファイル名が有効で移植可能であるかをチェックします。

pinky

軽量な finger クライアント。 指定されたユーザーに関する情報を表示します。

pr

ファイルを印刷するために、ページ番号を振りカラム整形を行います。

printenv

環境変数の内容を表示します。

printf

指定された引数を指定された書式で表示します。 C 言語の printf 関数に似ています。

ptx

指定されたファイル内のキーワードに対して整列済インデックス (permuted index) を生成します。

pwd

現在の作業ディレクトリ名を表示します。

readlink

指定されたシンボリックリンクの対象を表示します。

realpath

解析されたパスを表示します。

rm

ファイルまたはディレクトリを削除します。

rmdir

ディレクトリが空である時にそのディレクトリを削除します。

runcon

指定されたセキュリティコンテキストでコマンドを実行します。

seq

指定された範囲と増分に従って数値の並びを表示します。

sha1sum

160 ビットの SHA1 (Secure Hash Algorithm 1) チェックサム値を表示またはチェックします。

sha224sum

224 ビットの SHA1 チェックサム値を表示またはチェックします。

sha256sum

256 ビットの SHA1 チェックサム値を表示またはチェックします。

sha384sum

384 ビットの SHA1 チェックサム値を表示またはチェックします。

sha512sum

512 ビットの SHA1 チェックサム値を表示またはチェックします。

shred

指定されたファイルに対して、複雑なパターンデータを繰り返し上書きすることで、データ復旧を困難なものにします。

shuf

テキスト行を入れ替えます。

sleep

指定時間だけ停止します。

sort

指定されたファイル内の行をソートします。

split

指定されたファイルを、バイト数または行数を指定して分割します。

stat

ファイルやファイルシステムのステータスを表示します。

stdbuf

本コマンド実行により、標準ストリームに対するバッファリング操作を変更します。

stty

端末回線の設定や表示を行います。

sum

指定されたファイルのチェックサムやブロック数を表示します。

sync

ファイルシステムのバッファを消去します。 変更のあったブロックは強制的にディスクに書き出し、スーパーブロック (super block) を更新します。

tac

指定されたファイルを逆順にして連結します。

tail

指定されたファイルの最終の10行 (あるいは指定された行数) を表示します。

tee

標準入力を読み込んで、標準出力と指定ファイルの双方に出力します。

test

ファイルタイプの比較やチェックを行います。

timeout

指定時間内だけコマンドを実行します。

touch

ファイルのタイムスタンプを更新します。 そのファイルに対するアクセス時刻、更新時刻を現在時刻にするものです。 そのファイルが存在しなかった場合はゼロバイトのファイルを新規生成します。

tr

標準入力から読み込んだ文字列に対して、変換、圧縮、削除を行います。

true

何も行わず処理に成功します。これは常に成功を意味するステータスコードを返して終了します。

truncate

ファイルを指定されたサイズに縮小または拡張します。

tsort

トポロジカルソート (topological sort) を行います。 指定されたファイルの部分的な順序に従って並び替えリストを出力します。

tty

標準入力に接続された端末のファイル名を表示します。

uname

システム情報を表示します。

unexpand

空白文字をタブ文字に変換します。

uniq

連続する同一行を一行のみ残して削除します。

unlink

指定されたファイルを削除します。

users

現在ログインしているユーザー名を表示します。

vdir

ls -l と同じ。

wc

指定されたファイルの行数、単語数、バイト数を表示します。 複数ファイルが指定された場合はこれに加えて合計も出力します。

who

誰がログインしているかを表示します。

whoami

現在有効なユーザーIDに関連づいているユーザー名を表示します。

yes

処理が停止されるまで繰り返してyまたは指定文字を出力します。

libstdbuf

stdbuf が利用するライブラリ。