私はこの引用(下記)を数回読んだことがありますが、最近ではここで、dd
がどのようになっているのか常に戸惑っています。 すべてにパッチを適用するために使用できます コンパイラは言うまでもなく:
30年前に私が学校で使用したUnixシステムは、RAMとディスク容量が非常に限られていました。特に、
/usr/tmp
ファイルシステムが非常に小さかったため、誰かが大きなプログラムをコンパイルしようとすると問題が発生しました。もちろん、学生はとにかく「大規模なプログラム」を書くことは想定されていませんでした。大規模なプログラムは通常、「どこか」からコピーされたソースコードでした。私たちの多くは/usr/bin/cc
をコピーしました/home/<myname>/cc
へ 、および使用されたdd
/tmp
を使用するようにバイナリにパッチを適用します/usr/tmp
の代わりに 、大きかった。もちろん、これは問題をさらに悪化させました。これらのコピーが占めるディスク容量は、当時は重要でしたが、現在は/tmp
定期的にいっぱいになり、他のユーザーが自分のファイルを編集することさえできなくなります。彼らが何が起こったのかを知った後、システム管理者はchmod go-r /bin/* /usr/bin/*
を実行しました これで問題が「修正」され、Cコンパイラのすべてのコピーが削除されました。
(エンファシスマイン)
dd
マニュアルページにはパッチの適用については何も書かれておらず、とにかくこれを行うために再利用できるとは思わない。
バイナリは本当にdd
でパッチを当てることができますか ?これには歴史的な意味がありますか?
承認された回答:
試してみよう。ささいなCプログラムは次のとおりです。
#include <stdio.h>
int main(int argc, char **argv) {
puts("/usr/tmp");
}
これをtest
に組み込みます :
$ cc -o test test.c
実行すると、「/ usr/tmp」と出力されます。
「/usr/tmp
」はバイナリにあります:
$ strings -t d test | grep /usr/tmp
1460 /usr/tmp
-t d
見つかった各文字列のファイルに10進数のオフセットを出力します。
それでは、「/tmp」だけで一時ファイルを作成しましょう。