Erlang-一般的な特殊ファイル

4916 ワード

$HOME/.erlang
ファイル$HOME/.erlangが存在し、合法的なerlang文である場合、erlang仮想マシンが起動するとデフォルトで文が実行されます.実行文はc:erlangc().を参照します.これは、開いている間にconsoleやファイルにデフォルトでいくつかの内容を入力するなど、自分の仮想マシンの動作をカスタマイズするのに大きな用途があります.さらに、クッキーなどの起動パラメータを開いたときに上書きすることもできます.例は以下の通りです(もちろん、このような起動パラメータを修正する習慣は良い習慣ではありません).
%   .erlang  
alking-mbp:~ dev$ erl -sname abc -setcookie cookie
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V10.2  (abort with ^G)
(abc@alking-mbp)1> auth:cookie().
cookie
(abc@alking-mbp)2> 

%    .erlang  
alking-mbp:~ dev$ cat .erlang
io:format("hello,alking.~n",[]).%  console     
auth:cookie("adcaca").%      

alking-mbp:~ dev$ erl -sname abc -setcookie cookie
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

hello,alking.
Eshell V10.2  (abort with ^G)
(abc@alking-mbp)1> auth:cookie().
"adcaca"

$HOME/.erlang.cookie
ファイル$HOME/.erlang.cookieの用途は、仮想マシン起動パラメータ-setcookieに相当し、ファイルに文字列を保存し、起動時に起動パラメータ-setcookieがなければ、そのノードのcookieがファイルの内容であり、このファイルのファイルモード(mod)は400である必要があり、auth:read_cookie().参照
このファイルの利点は、自分のマシンが黒くならない限り、ソースコードが自分のクッキーを露出しないことです.起動パラメータ-setcookieがファイルクッキーの内容を上書きする方法を説明します.
alking-mbp:~ dev$ cat .erlang.cookie 
NKEFXULSNLVBRFDHWYFC

%      cookie       
erl -sname abc -setcookie cookie
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V10.2  (abort with ^G)
(abc@alking-mbp)1> auth:cookie().
cookie
$HOME/.erlang.crypt
ファイル$HOME/.erlang.cryptが存在する場合、erlファイルをbeamファイルにコンパイルするとデフォルトでコード暗号化されます.javaに詳しい学生はコード混同について知っているかもしれません.この暗号化には似たような機能があります.beam_lib:crypto_key_fun_from_file().を参照してください.
皆さんはテスト環境でコードをコンパイルする時、よくdebugを持っています.infoパラメータは、通常rebarに配置する.config内では、テストやオンラインデバッグが便利ですが、このオプションで生成されたbeamファイルは、他の人に入手されると、ソースコードに逆コンパイルされやすくなります.次に、説明します.
%    erlang_bullet_sup.erl
alking-mbp:src dev$ cat erlang_bullet_sup.erl 
-module(erlang_bullet_sup).
-behaviour(supervisor).
-export([start_link/0]).
-export([init/1]).
-define(SERVER, ?MODULE).

start_link() -> supervisor:start_link({local, ?SERVER}, ?MODULE, []).

init([]) -> {ok, {{one_for_all, 0, 1}, []}}.

%    beam  
alking-mbp:src dev$ erlc +debug_info erlang_bullet_sup.erl 


alking-mbp:src dev$ erl
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V10.2  (abort with ^G)
1> {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks("erlang_bullet_sup.beam",[abstract_code]).
{ok,{erlang_bullet_sup,[{abstract_code,{raw_abstract_v1,[{attribute,1,
                                                                    file,
                                                                    {"erlang_bullet_sup.erl",1}},
 ......
 ......
2> io:fwrite("~s~n", [erl_prettypr:format(erl_syntax:form_list(AC))]).
%          
-file("erlang_bullet_sup.erl", 1).
......

%      
alking-mbp:src dev$ cat ~/.erlang.crypt 
[{debug_info, des3_cbc, [], "secret"}].

erlc +encrypt_debug_info erlang_bullet_sup.erl 

%   crypt    ,          
alking-mbp:src dev$ mv ~/.erlang.crypt ~/.erlang.crypt.bak

alking-mbp:src dev$ erl
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V10.2  (abort with ^G)
1> {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks("erlang_bullet_sup.beam",[abstract_code]).
** exception error: no match of right hand side value {error,beam_lib,
                                                             {key_missing_or_invalid,"erlang_bullet_sup.beam",
                                                                                     abstract_code}}
                                                                                     
%    .erlang.crypt            
mv ~/.erlang.crypt.bak ~/.erlang.crypt
alking-mbp:src dev$ erl
Erlang/OTP 21 [erts-10.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1]

Eshell V10.2  (abort with ^G)
1> {ok,{_,[{abstract_code,{_,AC}}]}} = beam_lib:chunks("erlang_bullet_sup.beam",[abstract_code]).
{ok,{erlang_bullet_sup,[{abstract_code,{raw_abstract_v1,[{attribute,1,
                                                                    file
......

$HOME/.hosts.erlang or $OTP_ROOT/.hosts.erlang
ファイル.hosts.erlangの各ローは、次のようにホスト名です.
'super.eua.ericsson.se'.
'renat.eua.ericsson.se'.
'grouse.eua.ericsson.se'.
'gauffin1.eua.ericsson.se'.
...
net_adm:world().が実行されると、これらのホストと自動的にオンになります.詳細はnet_adm:world(). net_adm:host_file().参照
まとめ
開発された日常生活では、いくつかの特性を利用して柔軟かつ効率的に機能を実現することができます.