2

nano と rnano を使ってファイルを編集してみました。後者は実際には制限モードですが、まったく同じバイナリ ファイルです。なぜ彼らは異なる振る舞いをするのですか?

# which nano rnano
/usr/bin/nano
/bin/rnano

# md5sum /usr/bin/nano /bin/rnano
fa670e309a033718bad4b2051f5974fd  /usr/bin/nano
fa670e309a033718bad4b2051f5974fd  /bin/rnano

(ubuntu 12.04 x64 LTS)

4

1 に答える 1

4

引数ベクトル ( argv) の最初の要素 ( argv[0]) に実行中のファイルの名前が含まれているため、動作が異なります。

rnanoは別のファイルであるためnano(単なるシンボリック リンクですが)、独自の別のargv[0].

nano.cのメイン関数でこのチェックを確認できます。

/* If the executable filename starts with 'r', enable restricted
 * mode.
 */
if (*(tail(argv[0])) == 'r')
    SET(RESTRICTED);

これは、単純なシェル スクリプトを使用してテストすることもできます。ステートメントを 1 つだけ含むシェル スクリプトを作成しますecho $0。次に、別の名前でシンボリック リンクを作成します。違いを観察してください。

于 2014-11-20T03:57:33.970 に答える