わたしの名はフレイ 作家・デザイナー見習い
神々とともに生きる詩人 一等星シリウスの導きを信じて

UNIXコマンド

ホスト名とtelnet

まず、「ホスト名」とは、ネットワーク上のそのホストマシンの愛称のこと。

ワークステーションに接続要求をするには、ホスト名あるいはIPアドレスを指定する。

telnetで接続要求をする時は、

telnet ホスト名

とする。Windowstelnetを行うには、TeraTermなどを用いる。

カレントディレクト

UNIXのコマンド操作を行うには、まず、カレントディレクトリの概念を知っておく必要がある。

カレントディレクトリとは、「ユーザーが今作業を行っているディレクトリ」のこと。

今いる場所を変えるには、cdコマンドを使う。

たとえば、/usr/ディレクトリに移動するには、

cd /usr/

とする。~はホームディレクトリ、/はルートディレクトリ、.あるいは./は現在のディレクトリ、..あるいは../はひとつ上のディレクトリを表す。単にhogeとした場合は、現在のディレクトリの中のhogeディレクトリあるいはhogeファイルを表す。

コマンド操作とパイプ・リダイレクト
現在のディレクトリの中のhogeファイルを読みたいなら、

cat hoge

とすれば、hogeファイルの中身をターミナルに全出力する。しかしながら、上の方が流れてしまうため、通常はパイプを使ってlessに渡す。lessはページャと呼ばれるコマンドプログラムで、テキストを上下にスクロールして閲覧することができる。

cat hoge | less

UNIXでは、このように「catコマンドの出力を別のlessコマンドに渡す」といったことが|を使って簡単にできる。これをパイプという。

また、lessに渡すのではなく、いったんファイルに出力して、そのファイルを表示したい時などに、リダイレクトと呼ばれる機能が使える。

cat hoge > hoge1.txt

>とすればファイルへと出力でき、逆に<とすればファイルから全行を入力に使うことができる。この時、C言語のプログラムでは、標準入出力と呼ばれる機構を使って入出力管理が行われているため、どんなソフトウェアでも、標準入力や標準出力としてリダイレクトやパイプによるストリームを渡すことができる。

オプション

コマンドにはオプションがあり、標準で実行されるプログラムに「このようにしてほしい」というオプション命令を加えて実行することができる。

たとえば、lsで詳細表示と全てのファイルを表示する場合は、

ls -al

とする。オプションの詳細については、manコマンドを実行することでオンラインマニュアルを読むことができる。たとえば、

man ls

と実行すれば、lsコマンドのオンラインマニュアルを閲覧できる。

rootユーザー

UNIXシステムの管理者ユーザー。システムを変え、破壊する権限を持つ。rootになるためには、su -を実行する。

基本的に、ホームディレクトリ以外はrootの管理に置かれるため、ホームディレクトリ以外のファイルを変更したい時は、su -を実行して、rootパスワードを入力する。

Ubuntuなどでは、rootユーザーが存在せず、suの代わりにsudoを使う。

また、rootが所有者となっているシステムのファイルにアクセスできるかどうかは、パーミッションによる。パーミッションはファイルの読み込み、書き込み、実行に関する権限を与えるもので、所有ユーザ、所有グループ、その他のユーザに対して許可と不許可を設定できる。

ホームディレクトリ(~/)

ユーザーに与えられた、自由なディレクトリ。

通常は/home/username/の中にあり、自分の好きなように使うことができ、他のユーザーからは秘匿にすることができる。

端末とシェル

コマンドを入力し、実行するための、端末とシェルについて。

$や%は一般ユーザーでの操作、#はrootユーザーでの操作。

シェル

シェルとは、ライン入力からコマンドのプログラムを実行するソフトウェア。Linuxでは、標準的にbashが使われる。

初期化ファイル

bashは、初期化設定ファイルを読み込みます。

~/.bashrcはユーザーの設定で、シェルの起動時に毎回読み込まれる。

~/.bash_profileはユーザーの設定で、ログイン時のシェル(ログインシェル)で一回だけ読み込まれる。

/etc/profileは、システムの標準設定で、ログインシェルで読み込まれる。

/etc/bashrcは、システムの標準設定で、シェルの起動時に毎回読み込まれる。

コマンド補完

途中まで打ち込んで、タブキーを押すと、コマンド補完が出来ます。

ワイルドカード

シェルでコマンドを実行する際、ファイル名などに*や?などのワイルドカードが使える。

*は任意の文字列(複数文字)、?は任意の文字(1文字)を表す。

たとえば、

ls /etc/*.conf

などとできる。

man

マニュアルページを表示する。

man man

less/more

ファイルの中身を表示する。lessではスクロールでファイルの全体を観覧出来る。

find / | less

lv

lessと同様にファイルの内容を表示するページャだが、EUC-JP、UTF-8、Shift-JISなどの文字コードに対応している。

ls

ディレクトリの中身のリスト(ファイル一覧)を表示する。

ls -Al

主なオプションは-a(隠しファイルの表示)、-l(詳細表示)、-t(更新時間でソート)、-x(拡張子でソート)、-F(ディレクトリや実行ファイルをマーキング)。

cd

現在のディレクトリを変更(移動)する。

cd ..

pwd

作業中のディレクトリのパスを表示する。

pwd

mkdir

ディレクトリを新しく作成する。

mkdir -m 0755 test

主なオプションは-p(上位ディレクトリも含めて作成する)。

cp

ファイルやディレクトリをコピーする。

cp -r hoge1 hoge2

mv

ファイルやディレクトリを移動・名前変更する。

mv hoge1 hoge2

rm

ファイルやディレクトリを削除する。

rm hoge

主なオプションは-i(削除の確認を表示)。

cat

ファイルの中身を表示する。ファイルの全体をコマンドラインに出力する。

cat a.txt b.txt > c.txt

ln

ファイルのリンク(ハードリンク・シンボリックリンク)を作る。

ln -s /usr/local/bin bin

chmod/chown

ファイルのパーミッション・オーナーを変更する。

ps

実行中のプロセス一覧を表示する。

kill/killall

プロセスを強制終了する。Ctrl+Cも使います。

find

ファイルを検索して一覧表示する。

find /

grep

特定の文字列を含む行を抽出する。

find . | grep keyword

tar

アーカイブファイルを作成・展開する。

date/cal

dateは日付を表示・設定する。calはカレンダーを表示する。

adduser

ユーザを追加する。

passwd

パスワードを変更する。

halt/shutdown

システムを停止させるコマンド。

tr, cut, paste

trは、テキストファイル内の特定の文字を置換する。trコマンドは、複数の置換をまとめて記述できるのが特徴で、たとえばa-zをA-Zにすることができる(全ての小文字が大文字に置換される)。これに対して、sedのようなストリームエディタでは、正規表現を用いたパターンマッチングの置換ができる。

cutは、各行から指定した範囲を切り出すコマンド。テキストファイル内で特定の列を取り出す。空白によって分けられた文章を分割したりすることもできる。

pasteは、複数ファイルの行をマージする。テキストファイルを列方向に結合する。

sort

テキストをソート(並べ替え)してくれる。

sortはパイプで使われることが多く、またviなどで使うととても強力である。headコマンドで先頭の行だけを取り出すこともできる。

uniq

重複した行をひとつにまとめてくれる。

sortやwcと同様に、パイプで使うことが多い。

join

2つの入力ファイルから共通するフィールド(項目)を結合する。

たとえば、

$ cat test1.txt
1 Assy
2 Schwarz
$ cat test2.txt
1 150
2 250
$ join test1.txt test2.txt
1 Assy 150
2 Schwarz 250

となる。SQLにおけるJOINと同様のものであると考えればいいかも。

wc

文字数や行数を数えてくれる。特に行数を数えてスクリプト処理を通して出力したりするのに使える。

head, tail

headはテキストファイルの先頭部分、tailはテキストファイルの末尾の部分を表示する。パイプを使って、ストリームの最初の方や最後の方だけを表示する時に使うことが多い(たとえば、ソートして上から10行表示する)。

rev

各行の文字を逆に並べ替える。そのままtacに送ればファイルの行末から表示できる。

$ cat hoge.txt | rev | tac

ページャ

コマンドが大量の出力を吐く場合など、ストリームをスクロールして表示させたい時は、パイプでless(ページャ)に送るのが有用だ。

$ find /usr/src/linux | less

vi/nano

viは無駄に使える。もっと簡単なテキストエディタが欲しい時は、nanoを使うと良い。

viでは、:!commandでUNIXコマンドを実行できる。:1,10!sortなどとすれば、1~10行目をソートすることもできる。

UNIXコマンドはviで使うと真価を発揮する

viでは、先に書いたようにsortコマンドをコードブロックの中で実行できるが、このように、viでUNIXコマンドを実行することで、UNIXコマンドははじめて真価を発揮する。

source-highlight

シンタックスハイライトをしてくれるツール。

ctags

ctagsは、vimなどと一緒に使うことで、C言語の関数定義情報が入ったtagsファイルを作成し、tagsに基づいて関数定義がどこのファイルに入っているかを検出し、指定の関数定義を探し出すことができる。

make

コンパイルやインストールを一括で実行する。

scriptとtee

scriptコマンドは、scriptを実行してからexitを実行するまでの端末の操作(全てのキータイプと出力)を記録する。

ファイル名を指定した場合はそのファイルに、指定しなかった場合はデフォルトではtypescriptというファイルに記録される。

teeコマンドは、パイプでコマンド出力の「写しを取る」。

DNF/Yum/Aptなどで、「どんなパッケージを(依存関係などを含めて)インストールしたかメモしたい」などといった状況で使える。

watch

コマンドを繰り返し実行して結果を再描画する。

pv

パイプを使った処理の進歩状況を表示する。

git

gitは使える。

最近、僕もgitを使うようになりました。ローカルだけで使うのであっても、差分を見事に管理してくれます。また、GitHubを使うことで、別の場所で変更・編集したファイルを同期することも簡単です。僕はホームページのファイルの同期に使っています。

shred

ファイルを復元できないように削除する。重要な情報が書かれたファイルを削除するために使う。作業状況を表示するためには-vオプション。

$ shred -v daiji.txt
  • zオプションを使うと、shred処理を隠すため、最後にゼロクリアする(nullデータで上書きする)。

file

fileコマンドを使うと、ファイルのファイル形式を確認できる。

Ncurses

NcursesはTUIの対話的インターフェース。コマンドではなく、メニュー選択、テキスト欄への入力、ボタンの選択のような形で、CUI環境から対話的インターフェースを利用できる。Linuxカーネルの設定やDebconfなどでも使われている。

複数のコマンドを結びつけるパイプはGUIワープロと良く似ている

UNIXのコマンドで多用される仕組みとして、パイプがある。これは、「あるコマンドの出力を、別のコマンドの入力として、出力した内容をさらに加工する」ということができる。

僕は、これがGUIワープロと良く似ていると思う。GUIワープロでは、ひとつのドキュメントをさまざまな機能で加工し、目的の出力を得るが、これはパイプでストリームデータを加工し続け、磨きをかけていくのと同じだからである。

そう、僕はUNIXGUIは共存できると思う。特にUNIXはプレーンテキストデータを好むが、viなどでUNIXコマンドを使うこともできる。

su -

rootユーザーになってシェルを実行する。

$ su -
Password: (root のパスワードを入力)
# (rootのシェルになった)

終了する時はexitを実行する。

# exit
$ (ユーザーに戻る)

sudo

そのコマンドだけをroot権限で実行出来る。僕はあまり好きではないが、使いやすさを考えてUbuntuでは標準である。

chroot

ルートディレクトリを変更してシェルを実行する。

特に、ディストリビューションの手動によるインストールなどの際、マウントしたディレクトリに入る時などに使われる。

Gentoo Linuxではハンドブックによるインストールの時の必須ツールである。

lftp

FTPクライアント。コマンドでFTP操作が可能。

wget

コマンドからURLを直接渡してファイルをダウンロードするためには、wgetを使うのが良い。

links/lynx/w3m

CUI環境でインターネットのWebページを見たい時には、linksやlynxw3mのようなテキストブラウザが使える。

特に、Gentoo Linuxのインストール時などにハンドブックを確認するのに有用だ。だが、英語でしか文字が表示出来ないCUI環境もあるので注意が必要だ。

ps

psはプロセス状態を表示するコマンド。killと一緒に使う。

kill

killはプロセスにシグナルを送るコマンド。

nice

niceは実行優先度をつけてコマンドを実行するコマンド。

killall

killallを使うと、プロセスを殺す時に、killのようなプロセスIDではなく、プロセスの名前で指定できる。同じ名前のプロセスは全部死ぬ。

killを使うよりも使いやすいが、別のプロセスまで一緒に殺さないように注意しよう。

free/vmstat

freeは、空きメモリや利用中メモリを表示する。vmstatは、仮想メモリの統計情報を表示する。

man

manは、マニュアルドキュメントを表示する。以下はlsコマンドのマニュアルを表示する例。

$ man ls

英語のmanページを表示したい時は、以下のようにする。

$ LANG=en_US man ls

コマンドの概要や詳細なコマンドラインオプションなどが表示される。また、manのマニュアルは設定ファイルやシステムコール・ライブラリ関数などのドキュメントも表示することができる。これが分かっていないと、Linuxをそもそも使うことができない。だが、manのマニュアルは詳しい反面、とても理解するのが難しい。

とりあえずmanコマンド

Linuxのコマンドで困った時は、まずmanコマンド。とりあえずmanコマンドをすることで、何でもすぐに分かる。

catコマンドについて知りたい時は、端末にman catと入力してエンター。そうすると、troffで書かれたcatについてのmanページがすぐに出てくる。ここに詳細なcatの使い方が全部書いてある。端末で読むのが見づらいのであれば、Mozilla FirefoxなどでブラウザからJMプロジェクトなどの検索欄にcatと叩けば良い。

GNUのツールであれば、infoコマンドの方が文書が整備されていることもある。info catと入力してエンター。文書内のリンクなどが整備されており、特定の機能だけにアクセスしやすくなっている。

groff (troff)

groffはUNIXの文書整形コマンドroffのGNUによる実装で、manページの整形に使われている。

info/Texinfo

GNU系のアプリでは「info」コマンドでinfoページを表示することもできる。リンクなどがそろっていて利用しやすい。

infoでは、manとは違い章ごとにページが分かれており、リンクを辿ってテキストブラウザのように各ページを表示できる。ただ、「manと何が違うのか良く分からない」というユーザも多く、良く嫌われている。

TexinfoはGNU infoで使われているドキュメント形式。

JM Project

JM Projectから、APIのマニュアルを読むことが出来ます。セクションは2がシステムコール、3がライブラリ関数です。検索機能もあるので、ここに記述された関数名からすぐにAPIのドキュメントを検索できます。

情報の探し方

Linuxに関する情報を探す際に、良く言われることは既知の情報があるかどうかを探すことです。たとえば、以下のような方法があります。

・コマンドに類することであれば、manコマンド・infoコマンドの実行。

・ソフトウェア個別のことであれば、tarballの中にあるREADME(インストール方法であればINSTALL)や、システムのdocディレクトリ(/usr/share/doc/や/usr/docや/usr/share/[アプリケーション名]などのディレクトリ)を参照する。

・TLDPやJFなどでLinux関連のマニュアルを読む。

Webブラウザを起動し、アプリケーションを開発しているプロジェクトのサイトに行って、公式のドキュメントやリファレンスを探す。特にチュートリアルAPIリファレンスなど。

ディストリビューション付属のマニュアルを読む。

GNOMEKDEのヘルプなどのヘルプ機能から使い方を探す。

Googleで検索する。ブログや個人サイトを検索できるほか、エラーメッセージや設定ファイル名などを検索するとピンポイントでダイレクトに分かる場合が多い。

・フォーラムやメーリングリストIRCで教えてもらう。過去のアーカイブなどから同じ質問がないか調べてみる。

grep, sed, awk

grep, sed, awkはストリーム編集用のコマンドで、ストリームの検索・置換・抽出を行う。

grepは検索、sedは編集(置換・抽出など)、awkは空白やタブを想定したスクリプト処理が出来ます。

grep

grepはテキストの中でマッチする行だけを取り出すコマンド。grep, sed, awkとして検索・置換の三人衆と知られている。

grepの例

grepはパイプを使ってストリームの中のパターンにマッチする行を抽出するために使うことができます。データベースで言えばフィルターのようなものです。

find /usr/src/linux | grep fs

こんなこともできる。

grep -rn "Linus" /usr/src/linux

あるいは、

find /usr/src/linux -name "*.c" | xargs grep -l "Linus"

-rオプションはディレクトリ内の再帰的な検索、-nは行番号を表示、-lはファイル名のみを表示。

ちなみに、正規表現を使用しない場合はfgrepで高速検索ができる。

find

findはファイル名を検索したり、ツリー構造のファイル一覧を出力したりするコマンド。

特にオプションを使ってたとえば更新日時の新しいファイルを探したり、xargsを用いてgrepsedをかける前のファイル一覧の出力(パイプでxargsに送る)などに使える。

findとlocate

findはファイルを検索する際、色んなオプションが使える。locateはオプションは貧弱だが、事前に作られたデータベースから検索するために、検索速度が速い。

データベースはcronで自動で作られるが、手動で作る場合はrootユーザーになってupdatedbを実行する。

xargs

xargsを上手く使うことで、一覧されたテキストから全てに対するコマンドを実行できる。findとともに使うことで、手作業でうんざりする作業をしなくても済む。

xargsコマンドを上手く使うことで、findやgrepなどの結果から、「全ての行に対するコマンド」を実行出来る。

全てのファイルの内容を正規表現で置換

xargsは、たとえば、findで一覧した全てのファイルに対して、sedのようなコマンドで正規表現をかけ、保存したい場合などに使える。

同様のことをWindowsで行うためには、フリーソフトサクラエディタGrepGrep検索機能を使う。あるいはxyzzyなどでも同じ機能がある。

xargs & parallel

GNU parallelはコマンドを並列実行するツール。簡単な並列実行ならxargsに-Pオプションでもいける。

sed

正規表現で検索や置換を行ったり、パターンにマッチする行だけを抜き出したい・削除したいなど、ストリームの編集を行いたい時は、sedを使う。

コマンド行に変換してbashに送る、などといった荒業も可能だ。

viは入力されたデータをそのまま出力するためビジュアルエディタと呼ばれる。sedは入力されたデータを行単位で処理するためストリームエディタと呼ばれる。

sedと一緒にviも使おう

sedはコマンドで使うと強力だが、テキストを編集する際にはviを使おう。とても便利で簡単にテキスト処理ができる。sedとviを制するものはLinuxを制す。

awk

awkは昔からあるUNIXスクリプト言語で、空白やタブで区切られたテキストに対してスクリプト処理をかけることができる。

特に、特定のカラムを表示させたい時は、awkを使うと便利です。

awk '{ print $3 }'

とすれば、空白やタブで区切られた3列目のカラムだけを出力できます。

計算や比較演算もできるため、フィルターで使う際に簡単なスクリプト処理(たとえば3列目のファイルサイズの数値が3MB以上のものだけを出力するなど)もできます。

awk '$3 >= 3{print}'

awkの使いどころ

実際のところ、UNIXではgrep, sed, awkなどを使うことで、何でもかんでも一行で便利かつ効率的に操作することができます。

split, csplit

splitはバイト単位・行単位で、csplitは任意の文字列でファイルを分割することの出来るコマンド。

sort

テキストを並び替えられる便利なコマンド。シェルから実行できるほか、viなどで:1,10!sortとすれば、1~10行目をソートできる。

diff

diffは:

diff -u test_before.txt test_after.txt > test.patch

ディレクトリを再帰的に比較する場合は-rオプション。

-uはunified diff形式でパッチを出力する。-cの場合、context diff形式での出力になる。基本的に-uを使おう。

diffは使えます。僕はWindowsでもcygwinをインストールしてdiffを使っています。

Windowsで使う場合は、オプション--strip-trailing-crをつけて改行コードCRを削除しましょう。

$ diff -ru --strip-trailing-cr dir1/ dir2/

ちなみに、Windowsで使えるサクラエディタにもDiffの機能があります。

patch

patchは:

patch -u < test.patch

-uはunified diff形式のパッチを適用する。-cの場合、context diff形式での適用になる。

comm/cmp

diffのほかにも、comm(行単位で比較)やcmp(1バイトごとに比較)などのツールがある。

md5sum/sha1sum

MD5/SHA1メッセージダイジェスト(そのファイルが変更されていないことを示すためのファイル内容の整合性を確認するハッシュ値)を表示する。

MD5/SHA1ハッシュはLinuxディストリビューションのISOファイルのダウンロードの際などに使われており、ファイルが壊れていないか(あるいは改竄されていないか)のチェックに使うことができる。

ファイル内容が完全に同じであれば、同じハッシュ値となる。もし少しでも壊れていれば、ハッシュ値は同じにならない。

uuencode/uudecode

バイナリファイルをテキストファイルに変換・復元する。

base64

入力をBase64エンコード・デコードする。

Base64は、文字の種類が64文字の印刷可能な英数文字しか使えない通信環境で、マルチバイト文字やバイナリデータなどを扱うための技術。7ビットのデータしか使えない電子メールで広く使われている。

tar

tarを使うことで、ファイルをまとめて圧縮し、圧縮ファイルを作ることが出来る。また、圧縮ファイルから元のファイルを展開(解凍)することもできる。

tarは複数のファイルをひとつのファイルにアーカイブするプログラム。gzipやbzip2を使用しており、それらのアルゴリズムに基づいてアーカイブを圧縮・解凍できる。

rsync

ディレクトリ間のファイルの同期を行う。

rsyncを使うことで、データをディレクトリ間で同期することが出来ます。

rsyncを使うと、ディレクトリの中で変更があったファイルだけを探し出し、新しいファイルだけをコピーできる。オプションでアーカイブモードを選択することで、サブディレクトリを再帰的に実行したり、ファイルの属性(パーミッション、タイムスタンプ、シンボリックリンク)をそのまま保持することができる。

$ rsync -av 同期元/ 同期先/

rsyncシェルスクリプトにしてcronに指定することで、毎日夜に定期的に同期してくれるように設定することもできる。tarとの併用で、たまに全体のバックアップをとっても良いだろう。

dumpとrestore

イメージ単位でファイルシステム全体をバックアップ・復旧できる。

UNIXのバックアップツールとして最も一般的で最適だが、ファイルシステムの一部だけをバックアップしたり、複数のファイルシステムにまたがるディレクトリツリーをバックアップすることはできない。

そのような場合にはtarやrsync, cpioを用いる。

dumpとrestoreを使うのは、システム全体をバックアップ・復旧したい場合で、他にddコマンドなどがあり、ddコマンドは環境をまるごと複製する際に便利。システム管理者としては覚えておかなければならないコマンドである。

gzip/gunzip

gzipアーカイブに圧縮・展開する。

そもそもUNIXではcompressという圧縮コマンドを使っていたが、それで使われていたLZWは特許侵害の恐れがあり、GNUが安全・安心な代替として開発した。

bzip2/bunzip2

bzip2アーカイブに圧縮・展開する。

gzipよりも高い圧縮率を持つが、処理速度の点でgzipよりも劣っている。

cpio

cpio形式に圧縮・展開する。アーカイブへのコピーやアーカイブからのコピーができる。

cpioよりもtarの方が良く知られている。RPMパッケージに採用されていることで有名。RPMパッケージはrpm2cpioコマンドでcpio形式に変換することができる。

unzip/lhasa/unrar

ZIP/LHA/RAR形式のアーカイブを展開する。

たとえば、Windowsで圧縮したzip形式の圧縮ファイルを解凍したりするのに使う。

暗号化されたzipを解凍したい場合は、zipcloakコマンドを使用する。

あるいは、zipの-eオプションやunzipの-Pオプションを使う。

df

ディスクの使用容量を確認する。

$ df -h

du

ファイルやディレクトリの使用容量を確認する。

$ du -h

dd

ブロックファイルや変換形式を指定して、ファイルを変換してコピーする。

ddコマンドでは、入力(if=/dev/sdb1など)と出力(of=/dev/sdb2など)を指定する。ここでデバイスを指定できるため、デバイスの内容をそのままコピーできる。

用途としては、簡単なファイルの複製や、デバイスファイル(HDDやCD-ROM)からファイルへのコピー、ディスクイメージをデバイスに出力する際に利用できる。またKVMXenの仮想イメージ作成にも利用できる。作成したイメージはファイルシステムの作成後に、mount(8)に「-o loop」をつけてマウントできる。

バイスをそのままイメージに出力したり、イメージからデバイスに出力したり、といった用途に使うことが多い。

lsattr/chattr

ext2/3/4のファイル属性を表示・変更する。追記専用、変更不可、安全な削除、復旧可能など、さまざまな機能が使える。

zchunk/zsync & jigdo

zchunkは差分圧縮フォーマットで、zsyncは差分同期システム。

ひとつのファイルを複数の「チャンク」に分割し、コピーする時は必要なチャンクだけを差分コピーすれば良い。

Fedora 30でDNFがzchunkに対応した。zsyncはUbuntuなどの毎日更新されるテスト版(日本のミラーサーバーにミラーリングされない)を高率的にダウンロードするために、isoファイルの差分同期を行うために使える。

ちなみに、Debianには昔からjigdoと呼ばれるパッケージのダウンロードシステムがある。パッケージを個別にダウンロードし、最後にCD形式にまとめる。

ファイル名が文字化けした時はconvmv

特に、Windowsからzip圧縮ファイルを持ってきて展開した場合などに、ファイル名が文字化けすることがあります。

この場合、convmvコマンドを使って、ファイル名を変換できます。