Core utilities

提供: ArchWiki
2020年7月9日 (木) 20:45時点におけるKusanaginoturugi (トーク | 投稿記録)による版 ({{Related|コマンドシェル}}を追加)
ナビゲーションに移動 検索に移動

関連記事

この記事では 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 はシェルにビルトインされていないため、多くの場合でリダイレクションを使ったほうが便利です (例: スクリプト、もしくはパフォーマンスが必要な場合)。実際 < filecat file と全く同じです。
  • cat は複数行でも動作します:
$ cat << EOF >> path/file
first line
...
last line
EOF

代わりに printf コマンドを使用:

$ printf '%s\n' 'first line' ... 'last line'
  • ファイルの行を逆順で cat する必要がある場合、tac (cat reversed) という名前のユーティリティがあります。

chmod

ファイルのパーミッションと属性#パーミッションを変更を見てください。

chown

ファイルのパーミッションと属性#所有者を変更を見てください。

dd

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

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

ヒント: デフォルトでは、dd は作業が完了するまで何も出力しません。操作の進捗を監視したい場合、コマンドに status=progress オプションを追加してください。このオプションは古いバージョン (8.24 以前) の coreutils では使えません。

'dd' は以下のような作業ができます:

  • ドライブ関連の作業:
    • イメージの作成。
    • イメージの書き込み。
    • ドライブやパーティションの複製。
    • ドライブやパーティションの消去。
    • パーティションテーブルやブートセクタの消去。
    • ブートセクタのバックアップ。
    • システムの復元。
  • デバイスや dd /dev/random、あるいは入力デバイスからストリームを取得
  • CPU に負担をかける (例: dd if=/dev/zero of=/dev/null).
  • ディスクに負担をかける (例: dd if=/dev/zero of=/path/testfile bs=number_ofG count=times oflag=fdatasync)
  • バックアップユーティリティとして使用
  • ファイルを大文字・小文字に変換

詳しくは dd(1)ドキュメント を読んでください。

dd 派生

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

dcfldd 
dcfldd は dd にフォレンジクスやセキュリティの面で改良を加えたバージョンです。ほとんどの dd のパラメータを扱うことができステータスの出力もできます。dcfldd の最後の安定版は2006年12月19日にリリースされました。[1]
ddrescue 
GNU ddrescue はデータ復旧ツールです。ディスク消去でほとんどの場合無用な機能である読み込みエラーを無視できます。詳しくは 公式マニュアル を見て下さい。

find

findfindutils パッケージに含まれており、base パッケージグループのひとつとしてインストールされます。

ヒント: fd はシンプルかつ高速でユーザーフレンドリーな find の代替です。デフォルト設定がわかりやすいものになっています (例: 隠しファイル・ディレクトリや .gitignore で指定されたファイルは無視する、find -iname '*PATTERN*' ではなく fd PATTERN で検索できる)。特徴として (ls と同じような) カラー出力や Unicode 対応、正規表現が使用できます。

find コマンドはファイル名を引数としてファイルシステムの中に名前が一致するファイルがないか検索するコマンドではありません。下の #locate を見てください。

find はディレクトリのセットとマッチするファイルの正規表現を引数として取ります。非常に強力なワンライナーを作ることができますが、直感的な検索コマンドとしては使えません。詳しい使用方法は UsingFind を見てください。

grep

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

  • grep はファイルを処理できるので、cat file | grep pattern のようなコンストラクトは grep pattern file に置き換えられます
  • VCS のソースコードを grep する場合、ripgrepackthe_silver_searcher などの最適化されたユーティリティが存在します。
  • -n オプションを使うことで出力にファイルの行番号が含まれているようになります。
ノート: コマンドによっては標準エラー出力の方に出力が送信されることもありますが、grep は標準エラー出力を解釈しません。このような場合、標準エラー出力を標準出力にリダイレクトする必要があります: command 2>&1 | grep args または (Bash 4 の場合) command |& grep argsI/O Redirection を参照してください。

カラー出力についてはコンソールのカラー出力#grep を見てください。

iconv

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

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

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

詳しくは iconv(1) を読んで下さい。

ファイルを変換する

ヒント: mtime を変えてほしくない場合 iconv の代わりに recode を使うことができます。

sed とは異なり、iconv にはファイルを変換するオプションはありません。しかしながら、(moreutils に含まれている) sponge を使うことでファイルを変換することもできます:

$ iconv -f WINDOWS-1251 -t UTF-8 foobar.txt | sponge foobar.txt

詳しくは sponge(1) を参照。

ip

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

ノート: ip ユーティリティは iproute2 パッケージに含まれており、このパッケージは base グループに入っています。
オブジェクト 用途 man ページ
ip addr プロトコルアドレス管理 ip-address(8)
ip addrlabel プロトコルアドレスラベル管理 ip-addrlabel(8)
ip l2tp tunnel ethernet over IP (L2TPv3) ip-l2tp(8)
ip link ネットワークデバイス設定 ip-link(8)
ip maddr マルチキャストアドレス管理 ip-maddress(8)
ip monitor netlink メッセージの監視 ip-monitor(8)
ip mroute マルチキャストルーティングキャッシュ管理 ip-mroute(8)
ip mrule マルチキャストルーティングポリシー db のルール
ip neigh neighbour/arp テーブル管理 ip-neighbour(8)
ip netns プロセスネットワーク名前空間管理 ip-netns(8)
ip ntable neighbour テーブル設定 ip-ntable(8)
ip route ルーティングテーブル管理 ip-route(8)
ip rule ルーティングポリシーデータベース管理 ip-rule(8)
ip tcp_metrics TCP Metrics の管理 ip-tcp_metrics(8)
ip tunnel トンネル設定 ip-tunnel(8)
ip tuntap TUN/TAP デバイスの管理
ip xfrm IPsec ポリシーの管理 ip-xfrm(8)

全てのオブジェクトで help コマンドが利用可能です。例えば、ip addr help と入力すればアドレスオブジェクトで利用できるコマンド構文が表示されます。高度な利用方法は iproute2 documentation を見て下さい。

ネットワーク設定の記事では実際問題として ip コマンドを様々な作業でどうやって使えばいいのか解説しています。

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

less

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

less の代替プログラムについてはアプリケーション一覧#ターミナルページャを見て下さい。

locate

mlocate パッケージをインストールしてください。インストール後、自動的にデータベースを更新するスクリプトが毎日実行されるようになります。手動で root で updatedb を実行することでいつでもデータベースは更新できます。デフォルトでは /media/mnt などのパスは無視されるので locate は外部デバイスのファイルを検索できません。詳しくは updatedb(8) を見てください。

locate コマンドはファイルを名前で検索する一般的な Unix ツールです。あらかじめ作成しておいたデータベースファイルを使って検索するためファイルシステムを直接検索する find ツールよりも高速に検索できます。欠点としてデータベースが作成された後に作られたファイルは locate で検索できません。データベースを更新する updatedb コマンドを定期的に実行することで問題は抑えられます。

locate は使う前にデータベースの作成が必要です。root で updatedb を実行してください。

How locate works and rewrite it in one minute も参照。

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

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

~/.bashrc
alias less='/usr/share/vim/vim80/macros/less.sh'

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

~/.bashrc
export PAGER='vimpager'
alias less=$PAGER

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

ls

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

詳しい情報は info lsオンラインマニュアル を見てください。

exa は近代的でユーザーフレンドリーな lstree の代替ユーティリティです。ファイル名と一緒に Git の変更を表示したり、--long モードで各カラムをカラー化したり、--long モードで tree ビューとメタデータを同時に表示する機能があります。

長い出力

-l オプションはメタデータを表示します。例:

$ ls -l /path/to/directory
total 128
drwxr-xr-x 2 archie users  4096 Jul  5 21:03 Desktop
drwxr-xr-x 6 archie users  4096 Jul  5 17:37 Documents
drwxr-xr-x 2 archie users  4096 Jul  5 13:45 Downloads
-rw-rw-r-- 1 archie users  5120 Jun 27 08:28 customers.ods
-rw-r--r-- 1 archie users  3339 Jun 27 08:28 todo
-rwxr-xr-x 1 archie users  2048 Jul  6 12:56 myscript.sh

total の値はディレクトリ内のファイルに割り当てられたディスクのブロック数を表します。

ファイルやサブディレクトリの行は7つのメタデータフィールドに分けられます:

  • タイプとパーミッション:
    • 最初の文字はタイプです。タイプの説明は info ls -n "What information is listed" を見てください。例:
      • - は通常のファイルです。
      • d はディレクトリです。
      • p は名前付きパイプ (別名 FIFO) です。
      • l はシンボリックリンクです。
    • 他の文字はパーミッションです。
  • ハードリンクの数。ファイルは最低でも1になります。フォルダは最低でも2になります。
  • 所有者のユーザーの名前。
  • グループの名前。
  • サイズ。
  • 最後に更新されたタイムスタンプ。
  • エンティティ名。

空白を含むファイル名がクォートで囲まれる

デフォルトで、空白を含むファイル名やディレクトリ名はシングルクォートで囲まれて表示されます。-N--quoting-style=literal オプションを使うことでクォートを消せます。また、QUOTING_STYLE 環境変数literal に設定することでも同じ効果があります [2]

lsblk

lsblk(8) は利用可能なブロックデバイスとパーティションスキームを表示します。例:

$ lsblk -f
NAME   FSTYPE   LABEL       UUID                                 MOUNTPOINT
sda
├─sda1 vfat                 C4DA-2C4D                            /boot
├─sda2 swap                 5b1564b2-2e2c-452c-bcfa-d1f572ae99f2 [SWAP]
└─sda3 ext4                 56adc99b-a61e-46af-aab7-a6d07e504652 /

デバイスの名前はブロックデバイスのタイプを表します。近代的なストレージデバイス (例: ハードディスク, SSD, USB フラッシュドライブ) は大抵 SCSI ディスク (sd) と認識されます。タイプの後に付いている小文字は a なら1番目のデバイス (sda)、b なら2番目のデバイス (sdb) を示します。デバイス内に存在するパーティションも同じように1番目のパーティション (sda1), 2番目のパーティション (sda2) と 1 からの数字が付きます。上記の例の場合、利用できるデバイスはひとつだけ (sda) で、デバイスには3つのパーティション (sda1 から sda3) が存在し、それぞれ異なるファイルシステムが使われていることが確認できます。

他によく使われるブロックデバイスのタイプとしてはメモリカードの mmcblkNVMe デバイスの nvme などがあります。知らないタイプは カーネルドキュメント で検索してください。

mkdir

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

  • ディレクトリと階層全体を作るには、-p スイッチを使って下さい。そうしないとエラーが表示されます。-p スイッチをデフォルトで使うようにすることもできます:
alias mkdir='mkdir -p -v'
-v スイッチはメッセージを有効にします。
  • 作成したディレクトリのモードを変更するのに chmod を使う必要はありません。-m オプションでアクセス権限を定義できます。
ヒント: 一時ディレクトリが欲しいときは代わりに mktemp (make termporary) を使って下さい: mktemp -d

mv

mv (move) はファイルやディレクトリを移動したり名前の変更をするコマンドです。

  • 危険なコマンドになる可能性があるので範囲に制限をかけたほうが賢明です:
alias mv=' timeout 8 mv -iv'
このエイリアスは8秒後に mv を中止し、3つ以上のファイルの削除を確認し、進行中の操作を表示し、(スペースから始まるコマンドを無視するようシェルが設定されている場合) シェルの history ファイルに操作を保存しません。

od

od (octal dump) コマンドは人間が読める形式になっていないデータ (プログラムの実行形式のコードやフォーマットされていないデバイスの中身など) を可視化するのに役立ちます。詳しくは マニュアル を参照してください。

pv

pv (pipe viewer) を使うことでデータ操作の進捗をパイプラインで監視できます。例:

# dd if=/source/filestream | pv -monitor_options -s size_of_file | dd of=/destination/filestream

大抵の場合 pvcat の代替として機能します。

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 を使ったワンライナーのリストがあります。

ヒント: より強力に sed を置き換えるものとして AWKPerl 言語があります。

seq

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

ss

ss はネットワークポートを確認するユーティリティです。iproute2 パッケージに含まれており base グループのひとつとしてインストールされます。非推奨 となった netstat ユーティリティと同じような機能を持っています。

一般的な使用方法:

全ての TCP ソケットとサービス名を表示:

$ ss -at

全ての TCP ソケットとポート番号を表示:

$ ss -atn

全ての UDP ソケットを表示:

$ ss -au

詳しくは ss(8)iproute2 パッケージの ss.html を見てください。

tar

初期の Unix の圧縮形式として、tar ファイル (別名 tarball) は Unix ライクなオペレーティングシステムでパッケージの作成に広く使われています。pacmanAUR のパッケージはどちらも tarball であり、Arch はデフォルトで GNUTar プログラムを使います。

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 -
file.tar.zst tar -I zstd xvf file.tar.zst

上記の tar 引数の中にはレガシーなものもありますが、特定の操作をするときは未だに有用です。詳しい説明は tar(1)man ページCompatibility セクションを見て下さい。

which

which コマンドは実行可能ファイルのパスを確認したいときに便利です。例:

# journalctl $(which sshd)

wipefs

wipefs は指定したデバイスのファイルシステム, RAID, パーティションテーブルのシグネチャ (マジック文字列) を確認・消去することができます。ファイルシステム自体は消去せず、デバイスの他のデータが消去されることもありません。

詳しくは wipefs(8) を参照してください。

例えば、/dev/sdb デバイスのシグネチャを全て消去してシグネチャのバックアップファイル ~/wipefs-sdb-offset.bak を作成するには:

# wipefs --all --backup /dev/sdb

参照