(Linux)tarcat cat違うコマンドなのに使い方が同じ

『そして、誰もいなくなった』(2016) (藤原竜也主演)
ドラマ中では、パーソナルナンバーは国民一人一人が別IDとなっており重複するはずはないのですが、 主人公の「藤堂新一」とパーソナルナンバーと同じIDを持つ「藤堂新一」が逮捕されることにより、重複が発覚します。どちらかが偽って「藤堂新一」を名乗っているのですが、この重複により主人公の人生が転落していきます。
タイトルから察するに、どんどん周囲が人がいなくなって残るのは自分だけになるのでしょう。謎だらけです。

tarcatというコマンドがあります。

~$ man tarcat
TARCAT(1)                   General Commands Manual                  TARCAT(1)

NAME
       tarcat - concatenates the pieces of a GNU tar multi-volume archive

SYNOPSIS
       tarcat files ...

DESCRIPTION
       The  tarcat command simply concatenates the files from a GNU tar multi-
       volume archive into a single tar archive.

SEE ALSO
       tar(1).

AUTHORS
       The tarcat script was written by  Bruno  Haible  <bruno@clisp.org>  and
       Sergey Poznyakoff <gray@gnu.org.ua>.

       This document was written by Bdale Garbee <bdale@gag.com> for Debian.

                                                                     TARCAT(1)

おそらく、tarアーカイブの内容を結合してくれるのでしょう。
使ってみます。

~$ seq 20 | split -dl5
~$ ls
x00  x01  x02  x03
~$ for i in x*;do tar cf $i.tar $i;done
~$ ls
x00  x00.tar  x01  x01.tar  x02  x02.tar  x03  x03.tar
~$ rm x??
~$ ls
x00.tar  x01.tar  x02.tar  x03.tar
~$ 

ファイルを4つ作りました。
tarcatで結合してみます。

~$ tarcat x??.tar > all.tar
20+0 レコード入力
20+0 レコード出力
10240 bytes (10 kB, 10 KiB) copied, 0.000189986 s, 53.9 MB/s
20+0 レコード入力
20+0 レコード出力
10240 bytes (10 kB, 10 KiB) copied, 0.000145382 s, 70.4 MB/s
20+0 レコード入力
20+0 レコード出力
10240 bytes (10 kB, 10 KiB) copied, 0.000116431 s, 87.9 MB/s
~$ tar xf all.tar
~$ ls
all.tar  x00  x00.tar  x01.tar  x02.tar  x03.tar

おかしいです。tar xf all.tarの実行でx00しかファイルが増えていません。
tarcatは何をするコマンドなのでしょうか。引数を一つだけ指定して実行してみましょう。

~$ tarcat x00.tar
x000000664000175100017510000000001212753404327010062 0ustar  takktakk1
2
3
4
5
~$ 

あれ、表示された内容は、テキストで表示しているだけのような気がします。
つまりcatと同じ。
catで実行してみます。

~$ cat x00.tar
x000000664000175100017510000000001212753404327010062 0ustar  takktakk1
2
3
4
5
~$ 

まったく同じですね。
catとtarcat、同じなのでしょうか。
–helpで表示される内容を比較してみましょう。

~$ tarcat --help | tee tarcat.help
使用法: cat [オプション]... [ファイル]...
Concatenate FILE(s) to standard output.

ファイルの指定がなかったり, - であった場合, 標準入力から読み込みます.

  -A, --show-all           equivalent to -vET
  -b, --number-nonblank    number nonempty output lines, overrides -n
  -e                       equivalent to -vE
  -E, --show-ends          display $ at end of each line
  -n, --number             number all output lines
  -s, --squeeze-blank      suppress repeated empty output lines
  -t                       -vTと同じ
  -T, --show-tabs          TAB文字を`^I'で表示
  -u                       (無視)
  -v, --show-nonprinting   非表示文字と`^'や`^'を付けて表示 (LFDとTABは除く)
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

例:
  cat f - g  最初に f の中身を出力し、次に標準入力を出力します。
            そして g の中身を出力します。
  cat        標準入力を標準出力に複製します。

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
cat の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。
Full documentation at: <http://www.gnu.org/software/coreutils/cat>
or available locally via: info '(coreutils) cat invocation'
~$ 

catの–helpをcat.helpに出力して両者を比較します。

~$ cat --help > cat.help
~$ cmp cat.help tarcat.help
~$ 

一致しました。使い方が同じとは、どういうことでしょうか。

実体が同じなのか、md5sumで確認してみましょう。

~$ md5sum `which cat tarcat`
f0ffaf5f6a6af450a4976d8f621591f1  /bin/cat
fd2fab77cf4da2288c11a4de2c0c7fe0  /usr/sbin/tarcat
~$ 

実体は異なりました。
catとtarcat、似て非なるコマンド。謎です。
そのうち( 「藤堂新一」の謎が解けるころ) 謎を解きましょう。

コメント

タイトルとURLをコピーしました