tar of FreeBSD
Table of Contents
tar of FreeBSD
FreeBSDのtarはどうなっている? /usr/bin/bsdtar が、正式名称。 ソースは、
sakae@fb:/usr/src/contrib/libarchive $ ls COPYING README.md libarchive/ FREEBSD-Xlist build/ libarchive_fe/ FREEBSD-upgrade cat/ tar/ NEWS cpio/ test_utils/
catは、zcatの類いね。
tar –help
ちょいとヘルプなんて語句が見付かったので、反応してみた。
sakae@fb:/usr/src/contrib/libarchive $ tar --help tar(bsdtar): manipulate archive files First option must be a mode specifier: -c Create -r Add/Replace -t List -u Update -x Extract Common Options: -b # Use # 512-byte records per I/O block -f <filename> Location of archive (default /dev/sa0) -v Verbose -w Interactive Create: tar -c [options] [<file> | <dir> | @<archive> | -C <dir> ] <file>, <dir> add these items to archive -z, -j, -J, --lzma Compress archive with gzip/bzip2/xz/lzma --format {ustar|pax|cpio|shar} Select archive format --exclude <pattern> Skip files that match pattern -C <dir> Change to <dir> before processing remaining files @<archive> Add entries from <archive> to output List: tar -t [options] [<patterns>] <patterns> If specified, list only entries that match Extract: tar -x [options] [<patterns>] <patterns> If specified, extract only entries that match -k Keep (don't overwrite) existing files -m Don't restore modification times -O Write entries to stdout, don't restore to disk -p Restore permissions (including ACLs, owner, file flags) bsdtar 3.6.2 - libarchive 3.6.2 zlib/1.3.1 liblzma/5.4.5 bz2lib/1.0.8 libzstd/1.4.8
statの逆演算
tarでアーカイブを展開する時、ファイル属性(オーナーとかモード等)が再現 される。これって、どうやってるの? statはファイル属性を取得する関数な んだから、その逆をやってくれる関数が有れば良い。stat(2)に関連が載って いるかと調べてみるも、そんなの無い。
どうする? どうやって調べる? 3秒考えて、オーナーを変更するなら、chown だよな。その関連でクラスターを形成していないか?
sakae@fb:/tmp $ man -S2 chown : int chown(const char *path, uid_t owner, gid_t group); int fchown(int fd, uid_t owner, gid_t group); int lchown(const char *path, uid_t owner, gid_t group); int fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag);
fchownあたりかな? でも、ヒットしない。少しコードを検索。
set_ownership
内に有るんだけど、やはりヒットせず。恨みっぽく、更新時
間の方を追うと、
(gdb) bt #0 set_time (fd=4, name=0x2044c3c0 "my.scm", atime=<optimized out>, atime_nsec=<optimized out>, mtime=<optimized out>, mtime_nsec=0, mode=<optimized out>) at /usr/src/contrib/libarchive/libarchive/archive_write_disk_posix.c:3501 #1 set_times (a=<optimized out>, fd=<optimized out>, mode=<optimized out>, name=0x2044c3c0 "my.scm", atime=1716097555, atime_nanos=0, birthtime=1716097555, birthtime_nanos=0, mtime=1716071148, mtime_nanos=0, cctime=<optimized out>, ctime_nanos=<optimized out>) at /usr/src/contrib/libarchive/libarchive/archive_write_disk_posix.c:3638 #2 0x204e9857 in set_times_from_entry (a=<optimized out>) at /usr/src/contrib/libarchive/libarchive/archive_write_disk_posix.c:3684 #3 _archive_write_disk_finish_entry (_a=0x20b1e000) at /usr/src/contrib/libarchive/libarchive/archive_write_disk_posix.c:1861 #4 0x204e631a in archive_write_finish_entry (a=0x20b1e000) at /usr/src/contrib/libarchive/libarchive/archive_virtual.c:124 #5 0x2049f585 in archive_read_extract2 (_a=0x20b13500, entry=0x20b3f000, ad=0x20b1e000) at /usr/src/contrib/libarchive/libarchive/archive_read_extract2.c:101 #6 0x00409473 in read_archive (bsdtar=bsdtar@entry=0xffbfea9c, mode=mode@entry=120 'x', writer=0x20b1e000) at /usr/src/contrib/libarchive/tar/read.c:371 #7 0x004096bb in tar_mode_x (bsdtar=0xffbfea9c) at /usr/src/contrib/libarchive/tar/read.c:112 #8 0x00407d84 in main (argc=3, argv=0xffbfebb8) at /usr/src/contrib/libarchive/tar/bsdtar.c:948
全体がオイラーの嫌いなオブジェクト指向式に記述してあって、かつ多数のプ ラットフォーム対応なので、すっかり 見る気が失せた。
archive(3) なんてのが有るんで眺めておけ、かな?
bug ??
sakae@fb:/tmp $ tar tvf test.tar -rw-r--r-- 0 sakae wheel 18 May 19 07:25 aa.txt -rw-r--r-- 0 sakae wheel 23 May 19 07:25 my.scm
なんでリンク数が0なの? お前、高級そうな事をやってて、抜けていないか。 通報しちゃうぞ。
pax
上で見たツリーにpaxが同梱されていない。どこにある? /usr/src/bin/pax あれ? OpenBSDの配置と一緒じゃん。
options(int argc, char **argv) { if (strcmp(NM_TAR, argv0) == 0) { tar_options(argc, argv); return; } else if (strcmp(NM_CPIO, argv0) == 0) { cpio_options(argc, argv); return; } /* * assume pax as the default */ argv0 = NM_PAX; pax_options(argc, argv); return; }
main()の中から呼ばれる解析ルーチンも同一。ただしpaxがデフォに設定され ている。こんなルーチンで、カメレオン・プログラムを実現してるんだな。
sakae@fb:/tmp $ cp /bin/pax tar sakae@fb:/tmp $ ./tar hoge ./tar: unknown option g usage: tar [-]{crtux}[-befhjmopqsvwyzHLOPXZ014578] [blocksize] [archive] [replstr] [-C directory] [-I file] [file ...] sakae@fb:/tmp $ mv tar a.out sakae@fb:/tmp $ ./a.out ^C pax: Signal caught, cleaning up.
OpenBSDみたいに、このツリーを使い回せばいいと思うけど、それじゃ進化が 覚つかないってんで、新種に舵を切ったんだな。
sakae@fb:/tmp $ ./tar tvf test.tar -rw-r--r-- 1 sakae wheel 18 May 19 07:25 aa.txt -rw-r--r-- 1 sakae wheel 23 May 19 07:25 my.scm
こちらは、ちゃんとリンク数が、1になってて真面だ。
ar
これは、libarchive の一群だった。
sakae@fb:/tmp $ ar usage: ar -d [-Tjsvz] archive file ... ar -m [-Tjsvz] archive file ... ar -m [-Tabijsvz] position archive file ... ar -p [-Tv] archive [file ...] ar -q [-TcDjsUvz] archive file ... ar -r [-TcDjsUuvz] archive file ... ar -r [-TabcDijsUuvz] position archive file ... ar -s [-jz] archive ar -t [-Tv] archive [file ...] ar -x [-CTouv] archive [file ...] ar -V
まあOpenBSDと一緒だな。
sakae@fb:/tmp $ ar -ru zz.a aa.txt my.scm ar: warning: creating zz.a sakae@fb:/tmp $ ar -tv zz.a rw-r--r-- 0/0 18 Jan 1 09:00 1970 aa.txt rw-r--r-- 0/0 23 Jan 1 09:00 1970 my.scm sakae@fb:/tmp $ hd zz.a 00000000 21 3c 61 72 63 68 3e 0a 61 61 2e 74 78 74 2f 20 |!<arch>.aa.txt/ | 00000010 20 20 20 20 20 20 20 20 30 20 20 20 20 20 20 20 | 0 | 00000020 20 20 20 20 30 20 20 20 20 20 30 20 20 20 20 20 | 0 0 | 00000030 31 30 30 36 34 34 20 20 31 38 20 20 20 20 20 20 |100644 18 | 00000040 20 20 60 0a 49 20 61 6d 20 66 69 6c 65 20 6f 66 | `.I am file of| 00000050 20 74 65 78 74 0a 6d 79 2e 73 63 6d 2f 20 20 20 | text.my.scm/ | 00000060 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20 20 | 0 | 00000070 20 20 30 20 20 20 20 20 30 20 20 20 20 20 31 30 | 0 0 10| 00000080 30 36 34 34 20 20 32 33 20 20 20 20 20 20 20 20 |0644 23 | 00000090 60 0a 28 64 65 66 69 6e 65 20 6d 79 6e 61 6d 65 |`.(define myname| 000000a0 20 27 73 61 6b 61 65 29 0a 0a | 'sakae)..| 000000aa
ちょいと違うのは、replを介してハンドリング出来る事。これの何が嬉しいか は、ボンクラーズなオイラーには不明。
sakae@fb:/tmp $ ar -M AR >create ex.a AR >addmod aa.txt my.scm AR >save AR >end
スクリプトの操作が出来る様に、レクサーとパーサーが構成員になってた。
sakae@fb:/usr/src/usr.bin/ar $ ls Makefile ar.1 util.c Makefile.depend ar.c write.c acplex.l ar.h acpyacc.y read.c
オブジェクト・ファイルを前後に移動させたり、追加・削除が可能だったり、 これの主ユーザーであるld(リンカー)って、かなり気難し屋さんなんだろうね。
*.deb
そんな事より、こじま先生の紹介を受けたdebianのパッケージを調べてみたい。 題材は何でもいいんだけど、たまたま思い出してOpenBSDのhexeditを入れたん で、それに習ってみる。
ob$ ftp https://ftp.jaist.ac.jp/pub/Linux/debian/pool/main/h/hexedit/hexedit_1> Trying 150.65.7.130... Requesting https://ftp.jaist.ac.jp/pub/Linux/debian/pool/main/h/hexedit/hexedit_1.6-1_i386.deb 100% |**************************************************| 35768 00:00 35768 bytes received in 0.04 seconds (705.39 KB/s) ob$ ls hexedit_1.6-1_i386.deb ob$ file hexedit_1.6-1_i386.deb hexedit_1.6-1_i386.deb: Debian binary package (format 2.0) current ar archive
うん、確かにarで固めてあるな。
ob$ ar tv hexedit_1.6-1_i386.deb rw-r--r-- 0/0 4 Jul 11 05:35 2022 debian-binary rw-r--r-- 0/0 1044 Jul 11 05:35 2022 control.tar.xz rw-r--r-- 0/0 34532 Jul 11 05:35 2022 data.tar.xz ob$ ar x hexedit_1.6-1_i386.deb ob$ ls -l total 144 -rw-r--r-- 1 sakae wheel 1044 May 21 07:04 control.tar.xz -rw-r--r-- 1 sakae wheel 34532 May 21 07:04 data.tar.xz -rw-r--r-- 1 sakae wheel 4 May 21 07:04 debian-binary -rw-r--r-- 1 sakae wheel 35768 Jul 11 2022 hexedit_1.6-1_i386.deb
debian-binaryって怪しげなファイルには、2.0と記述されてた。じゃ、他は?
ob$ xzcat control.tar.xz | tar xf - ob$ cat md5sums c5765a27f9dc230e17d4dcc8cb5463ab usr/bin/hexedit 3599029063915a5aeed187a966ad7e33 usr/share/doc/hexedit/README.Debian 5cf95bcd4e1cf256adf2ca79f3e615c5 usr/share/doc/hexedit/changelog.Debian.gz 337acf39a90c396c7a14bee95ce552f0 usr/share/doc/hexedit/changelog.gz 731cf37f01499854fe30c5ff6130eb73 usr/share/doc/hexedit/copyright 3c5044707a59eab4ed98c67ac5bc1fda usr/share/man/man1/hexedit.1.gz ob$ cat control Package: hexedit Version: 1.6-1 Architecture: i386 Maintainer: Joao Eriberto Mota Filho <eriberto@debian.org> Installed-Size: 76 Depends: libc6 (>= 2.33), libncurses6 (>= 6), libtinfo6 (>= 6) Section: editors Priority: optional Homepage: https://github.com/pixel/hexedit Description: viewer and editor in hexadecimal or ASCII for files or devices hexedit shows a target both in hexadecimal and in ASCII. This target can be a device or a file. You can edit the target and search through it. There are also copy&paste and save to file functions. Is allowed truncating or appending to the target. All modifications are shown in bold. . hexedit is ideal to edit or inspect very large files or devices, as hard disks or its partitions, flash drives, etc. These elements will not be wholly read because hexedit loads a piece at a time. . hexedit can be used by programmers in several activities. It also is useful for debugging, forensics investigations and recovering from digital disasters.
md5sumとcontrollに展開されたので、内容確認。
ob$ xzcat data.tar.xz | tar tvf - drwxr-xr-x 2 root wheel 0 Jul 11 2022 . drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr/bin -rwxr-xr-x 1 root wheel 50596 Jul 11 2022 ./usr/bin/hexedit drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr/share drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr/share/doc drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr/share/doc/hexedit -rw-r--r-- 1 root wheel 1214 Jul 11 2022 ./usr/share/doc/hexedit/README.Debian -rw-r--r-- 1 root wheel 4347 Jul 11 2022 ./usr/share/doc/hexedit/changelog.Debian.gz -rw-r--r-- 1 root wheel 3596 Apr 22 2022 ./usr/share/doc/hexedit/changelog.gz -rw-r--r-- 1 root wheel 1592 Jul 11 2022 ./usr/share/doc/hexedit/copyright drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr/share/man drwxr-xr-x 2 root wheel 0 Jul 11 2022 ./usr/share/man/man1 -rw-r--r-- 1 root wheel 3905 Jul 11 2022 ./usr/share/man/man1/hexedit.1.gz
今度は、リストを確認。これを見ると、/ の場所で展開しなさいって判るな。 arコマンドは隠れた所で働いているのね。納得しました。
GPT-4o
あのGPTが進化してるらしい(暴走と言う人も居るけど)。盛んに客寄せしてる。
Introducing GPT-4o and more tools to ChatGPT free users
Q: 三平方の定理を、3つの方法で証明して下さい。もし、図形が必要なら、底 辺 a 垂辺 b そして、斜辺が c の、直角三角形としましょう。
A: 三平方の定理(ピタゴラスの定理)は、直角三角形において、斜辺の長さの二乗が他の二辺の長さの二乗の和に等しいことを述べています。つまり、直角三角形の辺 \(a\)、\(b\)、および斜辺 \(c\) について次の式が成り立ちます:
\[ c^2 = a^2 + b^2 \]
以下に、この定理を3つの異なる方法で証明します。
### 方法1:代数的証明 この方法は、正方形の面積を使った代数的な証明です。
- 辺の長さが \(a + b\) の正方形を考えます。これは、大きな正方形です。
- この大きな正方形の中に、辺の長さが \(c\) の正方形を斜めに配置し、その周りに4つの直角三角形を配置します。
- 大きな正方形の面積は \((a + b)^2\) です。
- 中央の正方形の面積は \(c^2\) です。
- 4つの直角三角形の面積の合計は \(4 \times \frac{1}{2}ab = 2ab\) です。
したがって、大きな正方形の面積は、中央の正方形の面積と4つの直角三角形の面積の合計に等しいので、
\[ (a + b)^2 = c^2 + 2ab \]
この式を展開すると、
\[ a^2 + 2ab + b^2 = c^2 + 2ab \]
両辺から \(2ab\) を引くと、
\[ a^2 + b^2 = c^2 \]
よって、証明されました。
### 方法2:幾何学的証明(エリザベスの証明) エリザベスの証明は、4つの直角三角形を使った幾何学的な証明です。
- 同じく、辺の長さが \(a + b\) の正方形を考えます。
- この正方形の中に、斜辺が \(c\) である4つの直角三角形を配置します。これにより、中心にもう一つの正方形が残ります。
- 大きな正方形の面積は \((a + b)^2\) です。
- 中心の正方形の面積は \(c^2\) です。
- 4つの直角三角形の面積は \(4 \times \frac{1}{2}ab = 2ab\) です。
したがって、大きな正方形の面積は、
\[ (a + b)^2 = 4 \times \frac{1}{2}ab + c^2 \] \[ (a + b)^2 = 2ab + c^2 \]
この式を展開すると、
\[ a^2 + 2ab + b^2 = 2ab + c^2 \]
両辺から \(2ab\) を引くと、
\[ a^2 + b^2 = c^2 \]
よって、証明されました。
### 方法3:座標幾何による証明 座標幾何を用いて証明します。
- 直角三角形を座標平面上に配置します。例えば、点 \(A(0, 0)\)、点 \(B(a, 0)\)、点 \(C(0, b)\) とします。
- 点 \(A\) と点 \(B\) の距離は \(a\) です。
- 点 \(A\) と点 \(C\) の距離は \(b\) です。
- 点 \(B\) と点 \(C\) の距離を求めます。この距離が斜辺 \(c\) になります。
距離公式を用いて、点 \(B(a, 0)\) と点 \(C(0, b)\) の距離を求めます:
\[ c = \sqrt{(a - 0)^2 + (0 - b)^2} \] \[ c = \sqrt{a^2 + b^2} \]
これにより、
\[ c^2 = a^2 + b^2 \]
よって、証明されました。
以上が、三平方の定理の3つの異なる証明方法です。
この他に100種類ぐらいの証明方法が有るらしい。世の中、暇人が多い脳。 いや、暇なんて言ってないで、感銘ですよ、感銘。 感銘を受けた数学「三平方の定理の美しき証明たち」
Q: オイラーの公式を証明してください。
A: オイラーの公式 \( e^{ix} = \cos x + i\sin x \) の証明はいくつかの方法がありますが、ここではテイラー展開を用いた証明を示します。
まず、関数 \( e^{ix} \)、\( \cos x \)、および \( \sin x \) のテイラー展開を考えます。
### 1. \( e^{ix} \) のテイラー展開
指数関数 \( e^z \) のテイラー展開は以下の通りです: \[ e^z = \sum_{n=0}^{\infty} \frac{z^n}{n!} \]
ここで、\( z = ix \) とすると: \[ e^{ix} = \sum_{n=0}^{\infty} \frac{(ix)^n}{n!} \]
この展開を実際に計算してみましょう。偶数次と奇数次で分けると:
### 偶数次項 (n = 2k) \[ (ix)^{2k} = (i^2)^k x^{2k} = (-1)^k x^{2k} \] \[ \frac{(ix)^{2k}}{(2k)!} = \frac{(-1)^k x^{2k}}{(2k)!} \]
### 奇数次項 (n = 2k+1) \[ (ix)^{2k+1} = i(i^2)^k x^{2k+1} = i(-1)^k x^{2k+1} \] \[ \frac{(ix)^{2k+1}}{(2k+1)!} = i \frac{(-1)^k x^{2k+1}}{(2k+1)!} \]
これをすべての項に適用してまとめると: \[ e^{ix} = \sum_{k=0}^{\infty} \frac{(ix)^{2k}}{(2k)!} + \sum_{k=0}^{\infty} \frac{(ix)^{2k+1}}{(2k+1)!} \] \[ = \sum_{k=0}^{\infty} \frac{(-1)^k x^{2k}}{(2k)!} + i \sum_{k=0}^{\infty} \frac{(-1)^k x^{2k+1}}{(2k+1)!} \]
### 2. \( \cos x \) と \( \sin x \) のテイラー展開
次に、\( \cos x \) と \( \sin x \) のテイラー展開を確認します。
#### \( \cos x \) のテイラー展開 \[ \cos x = \sum_{k=0}^{\infty} \frac{(-1)^k x^{2k}}{(2k)!} \]
#### \( \sin x \) のテイラー展開 \[ \sin x = \sum_{k=0}^{\infty} \frac{(-1)^k x^{2k+1}}{(2k+1)!} \]
### 3. テイラー展開の比較
ここで、\( e^{ix} \) のテイラー展開と \( \cos x \)、\( \sin x \) のテイラー展開を比較します: \[ e^{ix} = \sum_{k=0}^{\infty} \frac{(-1)^k x^{2k}}{(2k)!} + i \sum_{k=0}^{\infty} \frac{(-1)^k x^{2k+1}}{(2k+1)!} \] \[ = \cos x + i \sin x \]
したがって、オイラーの公式が証明されました: \[ e^{ix} = \cos x + i \sin x \]
これでオイラーの公式の証明が完了しました。
スマート・グラス着用で、早稲田の試験を突破しようと、契約ユーザーにXを 使って助けを依頼した あんちゃんが居たな。今なら、ChatGPTだろうね。
free VMware Pro
仮想マシンの作成&実行アプリ「VMware Workstation Pro」と「VMware Fusion Pro」が無償化されたので実際にインストールしてみた
こんな記事が掲載されてた。オイラーが愛用してるPlayerはどうなっちゃうか と言うと、廃止になるそうだ。Proもいいけど、余計な機能がついて、重くな るのは、勘弁ね。
etc
教養としてのラジオ用語辞典 なんて辞典を読んでいる。辞典なんで、どこから読んでもいいし、どこで止め てもいい、お手軽さ。
業界用語として、イッテQあたりの出川君やらが、盛んに使ってる 尺が足りな い の説 明が出てた。元々は映画業界の用語らしい。1秒でフィルムが24コマ。:長さ にすると1フィート、304mm。これと1尺、303mmが近かった為、転用されたとか。 知らんかったなあ。
AM放送の巨大な垂直アンテナ。高さをなるべく抑える為、頂上に円形のリング が付いている。頂冠と言うらしい。ローディング・コイルの一種かな。また、 アンテナは川岸とかの水気の多い場所が好まれる。低い接地抵抗を得て効率を 上げる為だ。アマチュア無線と一緒だね。
アマチュア無線と言えば、昨今の無線離れを防ぐため、小中学生を対象に、ラ ジオの制作会とかが催されているみたい。FMラジオですって。普通は、鉱石ラ ジオからでしょうと思ったら、それは昭和のおじさん世代の発想。 今は、ちょいちょいとICを半田付けして作った気にさせる。こんな事で、電子立国が成り立つ のか?
まあ、秋葉原でエナメル線を手に入れようとしても、苦労する時代みたいです から。