# Core Utilities (日本語)

関連記事

- Bash
- Zsh
- 全般的な推奨事項
- GNU プロジェクト

この記事では less, ls, grep などの GNU/Linux システムのコアユーティリティを扱っています。この記事の扱う範囲は GNU coreutils パッケージに含まれているユーティリティに留まりません。ユーティリティに関連する様々なヒント・小技、その他便利な情報を載せています。

## cat

cat (catenate) はファイルを連結して表示する標準の Unix ユーティリティです。

- cat はシェルにビルトインされていないため、多くの場合でリダイレクションを使ったほうが便利です (例: スクリプト、もしくはパフォーマンスが必要な場合)。実際 `< file` は `cat file` と全く同じです。

- cat は複数行でも動作しますが、バッドプラクティスとして言われることもあります:

    $ cat << EOF >> path/file
    first line
    ...
    last line
    EOF

代わりに echo コマンドを使うほうが良いでしょう:

    $ echo "\
    first line
    ...
    last line" \
    >> path/file

- ファイルの行を逆順で cat する必要がある場合、tac (cat reversed) という名前のユーティリティがあります。

## cron

cron は Unix ライクなコンピュータオペレーティングシステムにおける時間基準のジョブスケジューラです。

メインの記事を参照してください。

Note: systemd は様々な cron のユースケースを処理することが可能です。関連記事を見て下さい。

## dd

dd は主にファイルを変換・コピーするために使われる Unix や Unix ライクなオペレーティングシステムのコマンドです。

Note: cp はいくつかのオペランドを除いて dd と同じですが、多目的のディスク消去作業向きには作られてはいません。

### 実行中に dd の進行度を確認する

デフォルトでは、dd は作業が完了するまで何も出力をしません。kill と `USR1` シグナルを使うことでプログラムを終了することなく状態を出力させることが可能です。新しい root のターミナルを開いて次のコマンドを実行してください:

    # killall -USR1 dd

Note: これは動作中の全ての dd プロセスに影響を与えます。

もしくは:

    # kill -USR1 pid_of_dd_command

例えば:

    # kill -USR1 $(pidof dd)

これで dd は当面の進捗をターミナルに出力するようになります。例:

    605+0 records in
    605+0 records out
    634388480 bytes (634 MB) copied, 8.17097 s, 77.6 MB/s

### dd 派生

他の dd ライクなプログラムには定期的に状態を出力する (例: シンプルなプログレスバー) 機能があります。

dcfldd
  dcfldd は dd にフォレンジクスやセキュリティの面で改良を加えたバージョンです。ほとんどの dd のパラメータを扱うことができステータスの出力もできます。dcfldd の最後の安定版は2006年12月19日にリリースされました。[1]

ddrescue
  GNU ddrescue はデータ復旧ツールです。ディスク消去でほとんどの場合無用な機能である読み込みエラーを無視できます。詳しくは 公式マニュアル を見て下さい。

## grep

grep (ed の g/re/p, global/regular expression/print から) は Unix のために書かれたコマンドラインの文章検索ユーティリティです。grep コマンドはファイルや標準入力から与えられた正規表現と一致する行を検索し、プログラムの標準出力に表示します。

- Remember that grep はファイルを処理できるので、`cat file | grep pattern` のようなコンストラクトは `grep pattern file` に置き換えられます

- VCS のソースコードを grep する場合、ack や the_silver_searcher などの最適化されたユーティリティが存在します。

### 出力のカラー化

grep のカラー出力は画面が美しくなるだけでなく regexp や grep の機能を学ぶのにとても便利です。

grep のデフォルトカラーを使うには、以下のエントリをシェルの設定ファイルに書いて下さい。例えば Bash を使っている場合:

    ~/.bashrc

    alias grep='grep --color=auto'

また、`GREP_OPTIONS` 環境変数を設定することも可能ですが、これを使うと grep を使うスクリプトを壊してしまう可能性があるので注意してください [2]:

    export GREP_OPTIONS='--color=auto'

ファイルの行番号を出力に含めたいときは、`-n` を追加してください:

    alias grep='grep -n --color=auto'

環境変数 `GREP_COLORS` を使ってデフォルトとは異なる色を指定することもできます。

## iconv

`iconv` は文字列のエンコーディングをあるコードセットから他のコードセットへ変換します。

次のコマンドはファイル `foo` を ISO-8859-15 から UTF-8 へ変換して `foo.utf` として保存します:

    $ iconv -f ISO-8859-15 -t UTF-8 foo >foo.utf

詳しくは `man iconv` を読んで下さい。

## ip

ip を使うことで Linux の IP ソフトウェアスタックにおけるネットワークデバイス・IP アドレス・ルーティングテーブルなどの情報を表示することができます。様々なコマンドを加えることで、オブジェクトの操作や設定をすることも可能です。

Note: ip ユーティリティは iproute2 パッケージに含まれており、このパッケージは base グループに入っています。

オブジェクト | 用途 | man ページ
--- | --- | ---
ip addr | プロトコルアドレス管理 | ip-address
ip addrlabel | プロトコルアドレスラベル管理 | ip-addrlabel
ip l2tp | tunnel ethernet over IP (L2TPv3) | ip-l2tp
ip link | ネットワークデバイス設定 | ip-link
ip maddr | マルチキャストアドレス管理 | ip-maddress
ip monitor | netlink メッセージの監視 | ip-monitor
ip mroute | マルチキャストルーティングキャッシュ管理 | ip-mroute
ip mrule | マルチキャストルーティングポリシー db のルール
ip neigh | neighbour/arp テーブル管理 | ip-neighbour
ip netns | プロセスネットワーク名前空間管理 | ip-netns
ip ntable | neighbour テーブル設定 | ip-ntable
ip route | ルーティングテーブル管理 | ip-route
ip rule | ルーティングポリシーデータベース管理 | ip-rule
ip tcp_metrics | TCP Metrics の管理 | ip-tcp_metrics
ip tunnel | トンネル設定 | ip-tunnel
ip tuntap | TUN/TAP デバイスの管理
ip xfrm | IPsec ポリシーの管理 | ip-xfrm

全てのオブジェクトで `help` コマンドが利用可能です。例えば、`ip addr help` と入力すればアドレスオブジェクトで利用できるコマンド構文が表示されます。

Network Configuration (日本語) の記事では実際問題として ip コマンドを様々な作業でどうやって使えばいいのか解説しています。

Note: もしかしたら ifconfig コマンドの方が親しみがあるかもしれません。このコマンドは Linux の旧バージョンでインターフェイス設定に使われていました。現在 Arch Linux では廃止されているため、代わりに ip を使って下さい。

## less

less はテキストファイルの中身を一画面単位で表示のに使われるターミナルページャプログラムです。more や pg といった他のページと同じですが、less はより高度なインターフェイスと完全な feature-set を提供します。

### 環境変数を使った出力のカラー化

以下の行をシェルの設定ファイルに加えて下さい:

    ~/.bashrc

    export LESS=-R
    export LESS_TERMCAP_me=$(printf '\e[0m')
    export LESS_TERMCAP_se=$(printf '\e[0m')
    export LESS_TERMCAP_ue=$(printf '\e[0m')
    export LESS_TERMCAP_mb=$(printf '\e[1;32m')
    export LESS_TERMCAP_md=$(printf '\e[1;34m')
    export LESS_TERMCAP_us=$(printf '\e[1;32m')
    export LESS_TERMCAP_so=$(printf '\e[1;44;1m')

値は好きなように変更してください。参照: ANSI escape code。

### wrappers を使った出力のカラー化

less でシンタックスハイライトを有効にすることができます。まず、source-highlight をインストールし、次に以下の行をシェルの設定ファイルに追加してください:

    ~/.bashrc

    export LESSOPEN="| /usr/bin/source-highlight-esc.sh %s"
    export LESS='-R '

コマンドラインインターフェイスを頻繁に使う場合 lesspipe をインストールすると良いかもしれません。

ページャを使ってアーカイブの中の圧縮されたファイルを表示することができるようになります:

    $ less compressed_file.tar.gz

    ==> use tar_file:contained_file to view a file in the archive
    -rw------- username/group  695 2008-01-04 19:24 compressed_file/content1
    -rw------- username/group   43 2007-11-07 11:17 compressed_file/content2
    compressed_file.tar.gz (END)

lesspipe はファイルタイプに関連付けられたコマンドの代替として (例えば html2text で HTML を回覧する)、アーカイブ以外のファイルも less のインターフェイスに接続します。

lesspipe を有効にするにはログインしなおすか、`/etc/profile.d/lesspipe.sh` を実行してください。

### もうひとつのページャとしての Vim

Vim (visual editor improved) にはテキストファイル・圧縮ファイル・バイナリ・ディレクトリの中身を表示するスクリプトが含まれています。次の行をシェルの設定ファイルに追加することでページャとして使うことが可能です:

    ~/.bashrc

    alias less='/usr/share/vim/vim74/macros/less.sh'

また、less.sh マクロの代替も存在し、`PAGER` 環境変数として使えます。vimpager-git をインストールしてシェルの設定ファイルに以下を加えて下さい:

    ~/.bashrc

    export PAGER='vimpager'
    alias less=$PAGER

これで `PAGER` 環境変数を使うプログラム、git などはページャとして vim を使うようになります。

## locate

locate はファイルシステム上のファイルを探します。updatedb やデーモンによって生成しインクリメンタルエンコードを使って圧縮した、事前に作ったファイルのデータベースを使って検索を行います。find よりも圧倒的に高速ですが、データベースの定期的な更新が必要です。

メインの記事を参照してください。

## ls

ls (list) は Unix や Unix ライクなオペレーティングシステムで使われる、ファイルを一覧するコマンドです。

- ls はファイルのパーミッションを表示できます。
- カラー出力はシンプルなエイリアスで有効にできます。`~/.bashrc` ファイルには `/etc/skel/.bashrc` からコピーされた次のエントリが既に含まれているはずです:

  `alias ls='ls --color=auto'`
  次のステップはカラーになった ls 出力をさらに向上させることです; 例えば、壊れた (孤立した) シンボリックリンクを赤色で表示するようにします。以下をシェルの設定ファイルに追加してください:
  `eval $(dircolors -b)`

## man

man (manual page) はオンラインのソフトウェアドキュメントの一つで基本的に Unix や Unix ライクなオペレーティングシステムで使われます。(ライブラリやシステムコールを含む) コンピュータプログラム、正式の標準・規則、さらに抽象的な概念などをカバーしています。Man Pages を見て下さい。

## mkdir

mkdir (make directory) はディレクトリを作成するコマンドです。

- ディレクトリと階層全体を作るには、`-p` スイッチを使って下さい。そうしないとエラーが表示されます。`-p` スイッチをデフォルトで使うようにすることもできます。

      alias mkdir='mkdir -p -v'

  `-v` スイッチはメッセージを有効にします。

- 作成したディレクトリのモードを変更するのに chmod を使う必要はありません。`-m` オプションでアクセス権限を定義できます。

Tip: 一時ディレクトリが欲しいときは代わりに mktemp (make termporary) を使って下さい: `mktemp -p`。

## mv

mv (move) はファイルやディレクトリを移動したり名前の変更をするコマンドです。危険なコマンドになる可能性があるので範囲に制限をしたほうが賢明です:

    alias mv=' timeout 8 mv -iv'

このエイリアスは8秒後に mv を中止し、3つ以上のファイルの削除を確認し、進行中の操作を表示し、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。

## rm

rm (remove) はファイルやディレクトリを削除するコマンドです。

- 使い方によっては危険性があるので範囲に制限をかけると良いでしょう:

      alias rm=' timeout 3 rm -Iv --one-file-system'

  このエイリアスは3秒後に rm を中止し、3つ以上のファイルの削除を確認し、進行中の操作を表示し、複数のファイルシステムに影響を与えず、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。たった1つのファイルでも確認が必要ならば `-I` の代わりに `-i` を使って下さい。
  Zsh のユーザーは `timeout` の前に `noglob` を記述することで暗示的な拡張を避けることができます。

- 空のディレクトリを削除するときは、rmdir を使ってください。

## sed

sed (stream editor) は文章をパース・変換する Unix ユーティリティです。

ここに sed を使ったワンライナーの 一覧 があります。

Tip: より強力に sed を置き換えるものとして AWK や Perl 言語があります。

## seq

seq (sequence) は連続する数字を生成するユーティリティです。シェルに内蔵されている代替があるので、Wikipedia で説明されているように使うと良いでしょう。

## shred

shred は完全にファイルやディレクトリを削除するコマンドです。使い方によっては大変危険なので範囲は限るべきです:

    alias shred=' timeout 3 shred -v'

このエイリアスは3秒後に shred を中止し、進行中の操作を表示し、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。

Zsh のユーザーは `timeout` の前に `noglob` を記述することで暗示的な拡張を避けることができます。

## sudo

Sudo (as superuser do) はユーザーが他のユーザー (通常はスーパーユーザー、もしくは root) のセキュリティ特権を使ってプログラムを実行することができる、Unix ライクなコンピュータオペレーティングシステムのためのプログラムです。Sudo (日本語) を見て下さい。

## パーミッションに関連するユーティリティ

- chmod (change mode) はファイルシステムオブジェクト (ファイルとディレクトリ) のアクセス権限を変更したり特別なフラグを指定する Unix のシェルコマンドとシステムコールの名前です。

- chown (change owner) はファイルの所有者を変更するために Unix ライクなシステムで使われます。

- chattr (change attributes) は様々な Linux ファイルシステムに入っているファイルに特定の属性を設定する Linux オペレーティングシステムのコマンドです。

- lsattr (list attributes) は Linux の extended file system の属性を表示するコマンドラインプログラムです。

- `ls -l` はファイルの属性を表示します。

以上のユーティリティは File permissions and attributes の記事で説明しています。もっと高度なパーミッションの使い方は capabilities や ACL を参照してください。

## 参照

- A sampling of coreutils , part 2 , part 3 - Overview of commands in coreutils
- GNU Coreutils Manpage
- Learn the DD command

Categories:

- System administration (日本語)
- Command shells (日本語)