Core utilities
この記事では less, ls, grep などの GNU/Linux システムのコアユーティリティを扱っています。この記事の扱う範囲は GNU coreutils パッケージに含まれているユーティリティに留まりません。ユーティリティに関連する様々なヒント・小技、その他便利な情報を載せています。
目次
基本コマンド
以下の表には全ての Linux ユーザーが知っておくべき基本的なシェルコマンドを載せています。太字のコマンドはシェルに含まれており、その他のコマンドはシェルとは別個のプログラムです。詳しくは下のセクションや関連記事を見て下さい。
コマンド | 説明 | 例 |
---|---|---|
man | コマンドのマニュアルページを表示 | man ed |
cd | ディレクトリを変更 | cd /etc/pacman.d |
mkdir | ディレクトリを作成 | mkdir ~/newfolder |
rmdir | 空のディレクトリを削除 | rmdir ~/emptyfolder |
rm | ファイルを削除 | rm ~/file.txt |
rm -r | ディレクトリとその中身を削除 | rm -r ~/.cache |
ls | ファイルを一覧表示 | ls *.mkv |
ls -a | 隠しファイルを一覧表示 | ls -a /home/archie |
ls -al | 隠しファイルとファイルのプロパティを一覧表示 | |
mv | ファイルを移動 | mv ~/compressed.zip ~/archive/compressed2.zip |
cp | ファイルをコピー | cp ~/.bashrc ~/.bashrc.bak |
chmod +x | ファイルに実行可能属性を付与 | chmod +x ~/.local/bin/myscript.sh |
cat | ファイルの中身を表示 | cat /etc/hostname |
strings | バイナリファイル内の出力可能文字を表示 | strings /usr/bin/free |
find | ファイルを検索 | find ~ -name myfile |
mount | パーティションをマウント | mount /dev/sdc1 /media/usb |
df -h | パーティションの残り容量を表示 | |
ps -A | 実行中のプロセスを表示 | |
killall | プロセスの実行中のインスタンスを終了 | |
ss -at | 開かれている TCP ソケットのリストを表示 |
cat
cat (catenate) はファイルを連結して表示する標準の Unix ユーティリティです。
- cat はシェルにビルトインされていないため、多くの場合でリダイレクションを使ったほうが便利です (例: スクリプト、もしくはパフォーマンスが必要な場合)。実際
< file
はcat file
と全く同じです。
- cat は複数行でも動作します:
$ cat << EOF >> path/file first line ... last line EOF
代わりに printf
コマンドを使用:
$ printf '%s\n' 'first line' ... 'last line'
- ファイルの行を逆順で cat する必要がある場合、tac (cat reversed) という名前のユーティリティがあります。
dd
dd は主にファイルを変換・コピーするために使われる Unix や Unix ライクなオペレーティングシステムのコマンドです。
実行中に dd の進行度を確認する
デフォルトでは、dd は作業が完了するまで何も出力をしません。kill と USR1
シグナルを使うことでプログラムを終了することなく状態を出力させることが可能です。新しい root のターミナルを開いて次のコマンドを実行してください:
# killall -USR1 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
パイプビューアを使う
pv を使って dd のパイプラインを監視することもできます:
# dd if=/source/filestream | pv -monitor_options -s size_of_file | dd of=/destination/filestream
パイプビューアを使う場合は以下を bashrc や zshrc に追記すると楽です:
copy() { size=$(stat -c%s $1) dd if=$1 &> /dev/null | pv -petrb -s $size | dd of=$2 }
そして次のコマンドを使用して下さい:
# copy /source/file /destination/file
dd 派生
他の dd ライクなプログラムには定期的に状態を出力する (例: シンプルなプログレスバー) 機能があります。
- dcfldd
- dcfldd は dd にフォレンジクスやセキュリティの面で改良を加えたバージョンです。ほとんどの dd のパラメータを扱うことができステータスの出力もできます。dcfldd の最後の安定版は2006年12月19日にリリースされました。[1]
grep
grep (ed の g/re/p, global/regular expression/print から) は Unix のために書かれたコマンドラインの文章検索ユーティリティです。grep コマンドはファイルや標準入力から与えられた正規表現と一致する行を検索し、プログラムの標準出力に表示します。
- grep はファイルを処理できるので、
cat file | grep pattern
のようなコンストラクトはgrep pattern file
に置き換えられます - VCS のソースコードを grep する場合、ack や the_silver_searcher などの最適化されたユーティリティが存在します。
-n
オプションを使うことで出力にファイルの行番号が含まれているようになります。
カラー出力についてはコンソールのカラー出力#grep を見てください。
find
find は findutils パッケージに含まれており、base パッケージグループのひとつとしてインストールされます。
find コマンドはファイル名を引数としてファイルシステムの中に名前が一致するファイルがないか検索するコマンドではありません。下の #locate を見てください。
find はディレクトリのセットとマッチするファイルの正規表現を引数として取ります。非常に強力なワンライナーを作ることができますが、直感的な検索コマンドとしては使えません。詳しい使用方法は UsingFind を見てください。
iconv
iconv
は文字列のエンコーディングをあるコードセットから他のコードセットへ変換します。
次のコマンドはファイル foo
を ISO-8859-15 から UTF-8 へ変換して foo.utf
として保存します:
$ iconv -f ISO-8859-15 -t UTF-8 foo >foo.utf
詳しくは man iconv
を読んで下さい。
ファイルを変換する
sed とは異なり、iconv にはファイルを変換するオプションはありません。しかしながら、(moreutils に含まれている) sponge
を使うことでファイルを変換することもできます:
$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt
詳しくは man sponge
を参照。
ip
ip を使うことで Linux の IP ソフトウェアスタックにおけるネットワークデバイス・IP アドレス・ルーティングテーブルなどの情報を表示することができます。様々なコマンドを加えることで、オブジェクトの操作や設定をすることも可能です。
オブジェクト | 用途 | 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
と入力すればアドレスオブジェクトで利用できるコマンド構文が表示されます。高度な利用方法は iproute2 documentation を見て下さい。
ネットワーク設定の記事では実際問題として ip コマンドを様々な作業でどうやって使えばいいのか解説しています。
locate
mlocate パッケージをインストールしてください。インストール後、自動的にデータベースを更新するスクリプトが毎日実行されるようになります。手動で root で updatedb を実行することでいつでもデータベースは更新できます。デフォルトでは /media
や /mnt
などのパスは無視されるので locate は外部デバイスのファイルを検索できません。詳しくは updatedb(1) を見てください。
locate コマンドはファイルを名前で検索する一般的な Unix ツールです。あらかじめ作成しておいたデータベースファイルを使って検索するためファイルシステムを直接検索する find ツールよりも高速に検索できます。欠点としてデータベースが作成された後に作られたファイルは locate で検索できません。データベースを更新する updatedb コマンドを定期的に実行することで問題は抑えられます。
locate は使う前にデータベースの作成が必要です。root で updatedb
を実行してください。
How locate works and rewrite it in one minute も参照。
less
less はテキストファイルの中身を一画面単位で表示するのに使われるターミナルページャプログラムです。more や pg といった他のページャと同じですが、less はより高度なインターフェイスと完全な feature-set を提供します。
less の代替プログラムについてはアプリケーション一覧#ターミナルページャを見て下さい。
もうひとつのページャとしての Vim
Vim (visual editor improved) にはテキストファイル・圧縮ファイル・バイナリ・ディレクトリの中身を表示するスクリプトが含まれています。次の行をシェルの設定ファイルに追加することでページャとして使うことが可能です:
~/.bashrc
alias less='/usr/share/vim/vim74/macros/less.sh'
また、less.sh マクロの代替も存在し、PAGER
環境変数として使えます。vimpager をインストールしてシェルの設定ファイルに以下を加えて下さい:
~/.bashrc
export PAGER='vimpager' alias less=$PAGER
これで PAGER
環境変数を使うプログラム、git などはページャとして vim を使うようになります。
ls
ls (list) は Unix や Unix ライクなオペレーティングシステムで使われる、ファイルを一覧するコマンドです。
- ls はファイルのパーミッションを表示できます。
- カラー出力はシンプルなエイリアスで有効にできます。
~/.bashrc
ファイルには/etc/skel/.bashrc
からコピーされた次のエントリが既に含まれているはずです:
alias ls='ls --color=auto'
- 次のステップはカラーになった ls 出力をさらに向上させることです; 例えば、壊れた (孤立した) シンボリックリンクを赤色で表示するようにします。以下をシェルの設定ファイルに追加してください:
eval $(dircolors -b)
mkdir
mkdir (make directory) はディレクトリを作成するコマンドです。
- ディレクトリと階層全体を作るには、
-p
スイッチを使って下さい。そうしないとエラーが表示されます。-p
スイッチをデフォルトで使うようにすることもできます:
alias mkdir='mkdir -p -v'
-v
スイッチはメッセージを有効にします。
- 作成したディレクトリのモードを変更するのに chmod を使う必要はありません。
-m
オプションでアクセス権限を定義できます。
mv
mv (move) はファイルやディレクトリを移動したり名前の変更をするコマンドです。
- 危険なコマンドになる可能性があるので範囲に制限をかけたほうが賢明です:
alias mv=' timeout 8 mv -iv'
- このエイリアスは8秒後に mv を中止し、3つ以上のファイルの削除を確認し、進行中の操作を表示し、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。
od
od (octal dump) コマンドは人間が読める形式になっていないデータ (プログラムの実行形式のコードやフォーマットされていないデバイスの中身など) を可視化するのに役立ちます。詳しくは マニュアル を参照してください。
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 を使ったワンライナーのリストがあります。
seq
seq (sequence) は連続する数字を生成するユーティリティです。シェルに内蔵されている代替があるので、Wikipedia で説明されているように使うと良いでしょう。
tar
初期の Unix の圧縮形式として、tar
ファイル (別名 tarball) は Unix ライクなオペレーティングシステムでパッケージの作成に広く使われています。pacman と AUR のパッケージはどちらも tarball であり、Arch はデフォルトで GNU の Tar
プログラムを使います。
tar
アーカイブを扱うとき、tar
はデフォルトで拡張子にあわせてファイルを展開します:
$ tar xvf file.EXTENSION
特定の形式を指定する場合:
ファイルタイプ | 解凍コマンド |
---|---|
file.tar |
tar xvf file.tar
|
file.tgz |
tar xvzf file.tgz
|
file.tar.gz |
tar xvzf file.tar.gz
|
file.tar.bz |
bzip -cd file.bz | tar xvf -
|
file.tar.bz2 |
tar xvjf file.tar.bz2 bzip2 -cd file.bz2 | tar xvf -
|
file.tar.xz |
tar xvJf file.tar.xz xz -cd file.xz | tar xvf -
|
上記の tar
引数の中にはレガシーなものもありますが、特定の操作をするときは未だに有用です。詳しい説明は tar
の man ページの Compatibility セクションを見て下さい。
which
which コマンドは実行可能ファイルのパスを確認したいときに便利です。例:
# journalctl $(which sshd)
wipefs
wipefs は指定したデバイスのファイルシステム, RAID, パーティションテーブルのシグネチャ (マジック文字列) を確認・消去することができます。ファイルシステム自体は消去せず、デバイスの他のデータが消去されることもありません。
詳しくは wipefs(8) を参照してください。
例えば、/dev/sdb
デバイスのシグネチャを全て消去してシグネチャのバックアップファイル ~/wipefs-sdb-offset.bak
を作成するには:
# wipefs --all --backup /dev/sdb
参照
- A sampling of coreutils , part 2 , part 3 - coreutils のコマンドの概要
- GNU Coreutils オンラインドキュメント
- Learn the DD command