ホーム > 計算機関連 > アーカイブ:計算機FAQ

アーカイブ:計算機FAQ


  ここでは、計算機(Solaris, Tru64、Linux)の設定やプログラミング、作図等に関するFAQの2013年以前の情報をアーカイブしています。
  一般ユーザのコマンドプロンプトは%、rootのコマンドプロンプトは#で表記しています。



目次

  1. 初期設定
  2. Fortran関連
  3. ネットワーク関連
  4. ファイル関連
  5. その他


[top]





1、初期設定

Q1-1 Solarisのman コマンドをlessコマンド表示にしたい

Solarisでman コマンドを使うとmoreコマンドのような出力になります。lessコマンドのようにしたいのですが。


A1-1 manコマンドを使用するとSolarisではデフォルトでmoreコマンドを使って表示するように設定されています。lessコマンドに変えるには環境変数PAGERを変更します。
% setenv PAGER less (csh,tcshの場合)
% export PAGER=less (bashの場合)




Q1-2 Solarisでcrontabの編集ができない

Solarisを使っていますが、crontabを編集しようとすると見慣れない画面が出て終了もできません。どうしたらいいでしょうか?


Q1-2 システムの設定によってはデフォルトでcrontabなどの編集を行う際のエディタを指定する EDITOR 環境変数がedになっています。とりあえずqでedを終了します。
edを使える人はほとんどいないと思いますのでviやemacsで編集できるようにします。
% setenv EDITOR vi (csh,tcshの場合)
% export EDITOR=vi (bashの場合)

* edの基本的な操作について(viの最終行モードに似ています)
p ; 表示 (ex. 1,5p ; 1行目から5行目を表示、10,$p ; 10行目から最後まで表示)
1 ; 1行目にカーソルを移動し表示
$ ; 最終行にカーソルを移動し表示
. ; カーソルが現在置かれている行を表示
5i ; 5行目の前に挿入 (.で挿入モードから抜ける)
.a ; 現在の行にテキストを追加
4,5d ; 4,5行目を削除
s/パターン1/パターン2/ ; 行の最初にあるパターン1をパターン2に置換
s/パターン1/パターン2/g ; パターン1をパターン2に全て置換
1,5s/パターン1/パターン2/g ; 1-5行目のパターン1を全てパターン2に置換
w ; 変更をファイルに書き込む
q ; 終了(ファイルには書き込まない)




Q1-3 システムの設定とは違うデフォルトプリンタを使いたいのですがどうすればいいでしょうか?

A1-3 デフォルトプリンターは環境変数PRINTERで指定することができます。

% setenv PRINTER プリンタ名(csh, tcshの場合)
% export PRINTER=プリンタ名(bashの場合)
のようにして下さい。




目次

2、Fortran関連

Q2-1 Tru64 UNIXとSolarisでgradsの時刻表示が異なる

Tru64 UNIX のf77(f90)でコンパイルしたプログラムで作成したバイナリデータをgradsで見ると4レコードに1つしか図を作成できません。Solarisではうまくいくのですが。


A2-1 Tru64 UNIXのFortran CompilerはデフォルトでRECLの単位を4byteとみなすように設定されています。Solarisのf77やgnuのg77など他のコンパイラではRECLの単位は1byteですのでそれに合わせたプログラムを使うと、データの書き出しの際にレコード長が書き出したい配列の4倍になり、レコードの最初の1/4のみにしかデータが書き込まれないことになります。
 これを防ぐための方法としてRECLの単位を4byteとしてプログラムを書き換えることも可能ですが、プログラムを書き換えることなく利用したい場合には-assume byterecl というオプションが使えます。このオプションによりRECLの単位を1byteに変えることができます。例えば
% f77 -assume byterecl ファイル名
のように使用します。 big endianを扱いたいときには
% f77 -assume byterecl -convert big_endian ファイル名
となります。




Q2-2 Solarisで問題なく使えたプログラムをTru64でコンパイルして実行した場合のエラー

Solarisで問題なく使えたプログラムをTru64でコンパイルして実行するとread文の所で
sequential-access I/O to unit open for direct access
というエラーが出て実行できない。


A2-2 Tru64 UNIXのコンパイラでは

real A(100)
open(10, form='unformatted', access='direct', recl=100)
read(10) A

のようなプログラムがあった場合、Aをdirect accessではなくsequential accessで読み込もうとします。Solarisやgnuのコンパイラではopen文で指定されていればdirect accessで読み込んでくれるのでこのような問題が起きたのだと思われます。解決策としては
read(10) A 
の部分を
read(10,rec=1) A 
のように書き換えればdirect accessとして認識してくれるため問題なく実行できるかと思います。




Q2-3 自分のマシンのendianと違うendianのデータを扱いたい

自分のマシンのendianと違うendianのデータを扱いたいのですが、コンパイルオプションがあれば教えてください。


A2-3 下にOSとCPU、コンパイラと対応するオプションについて挙げておきますの で参考にして下さい。
intel(Pentium, Celeron, Core 2 Duo, Core i7/i5/i3, Itenum, Xeon)、AMD(Athlon, Opteron)、DEC(alpha)などはlittle endian、Sun(Sun Ultra SPARC)、昔のMacのPowerPC、SR11000、SX6、SX8などのスパコンのCPUはbig endianです。
OSCPUendianコンパイラオプション
Tru64alphalittlef77,f90,f95-assume byterecl
-convert big_endian
LinuxOpteron
Pentium
Core2 Duo
Core i7
Xeon等
littlepgf77
pgf90
-byteswapio
ifort(ifc)-assume byterecl
-convert big_endian
g95 -fendian=big
gfortran -fconvert=big-endian


* g77にはendianを変換するオプションはありません。

* Solarisのf77, f90にはendianを変換するオプションはありません。

* GCMの出力の場合、little endianのマシンで計算しても、出力はbig endianになるようにプログラムされています。

* GCMで出力されたデータのendianを変換したい場合には、GTOOLのgtwdir -r4r を使うことができます。詳細はマニュアルやGTOOLの使用法をご参照下さい。




Q2-4 ifortバージョン8.1のコンパイルエラー

ifort(バージョン8.1)をインストールしたがコンパイルしようとすると
ifort: error: could not find directory in which g++ resides
とのエラーが出て使えない。


Q2-4 環境変数GXX_ROOTを設定することで正常にコンパイルできるようになります。

% gcc --print-search-dirs 
でインストールされたディレクトリを探し、
% export GXX_ROOT=/usr/lib/gcc-lib/i386-vine-linux/3.3.2/ (bash)
% setenv GXX_ROOT /usr/lib/gcc-lib/i386-vine-linux/3.3.2/ (tcsh)
のように環境変数を設定します。




Q2-5 ifortバージョン11.0以降のコンパイルエラー

ifort(バージョン11.0以降)でコンパイル時に
relocation truncated to fit: R_X86_64_32S against `.bss
というエラーが出た


Q2-5 ifort 11.0以降ではコンパイル時にプログラムが確保するメモリの大きさをチェックするらしく、巨大な配列を使っているなど、ある程度以上のメモリ領域(正確な閾値は不明)を確保しようするとエラーになってしまいます。この場合には、ifortに

-shared-intel -mcmodel=large

のオプションを付けてコンパイルすることでエラーを回避可能です。




Q2-6 netcdfライブラリ4.1のリンクエラー

netcdfライブラリを4.1.2や4.1.3に変えたら、リンクに失敗するようになった。
というエラーが出た


Q2-6 netcdf-4.1.2以降では、FortranライブラリがCライブラリから分離されました。これに伴い、Fortranライブラリの名前がlibnetcdf.aではなく、libnetcdff.aとなりました。
4.1.1以前のバージョンでは、コンパイル時に
コンパイラ名 -c aaa.f90 -I${NETCDF}/include
コンパイラ名 -c bbb.f90 -I${NETCDF}/include
(${NETCDF}は、netcdfライブラリをインストールしたディレクトリ)
リンク時に、
コンパイラ名 bbb.o aaa.o -L${NETCDF}/lib64 -lnetcdf
または、
コンパイラ名 bbb.o aaa.o ${NETCDF}/lib64/libnetcdf.a
のようにしていたかと思います。

4.1.2以降のバージョンをリンクする場合には、netcdfの部分をnetcdffとして
コンパイラ名 bbb.o aaa.o -L${NETCDF}/lib64 -lnetcdff
または、
コンパイラ名 bbb.o aaa.o ${NETCDF}/lib64/libnetcdff.a
のようにリンクを行ってください。





目次

3、ネットワーク関連

Q3-1 環境変数でLANGの設定を行っているのにktermを使用すると文字化けが起こる。

A3-1 環境変数はshellとプログラムの中で参照されるため、多くのアプリケー ションではLANGの設定を行えば文字コードの問題を解決できます。ただktermと emacsは、これとは別の方法で文字コードの設定を行っています。ktermの場合、-km オプションで設定を行います。高橋研の計算機の場合、文字コードはeucなので
% kterm -km euc &
のようにして起動します。
Shift-JISなら
% kterm -km sjis &
のようになります。これをaliasに設定すると便利だと思います。

* xtermの場合、端末自体が日本語に対応していないので(日本語用にコンパイル されたxtermを除く) -km オプションを指定しても日本語表示ができません。

* ktermの文字コードを変更してからファイルを開いても文字化けする場合、開い たファイルの文字コードがktermの文字コードと一致しているか確認して下さい。 異なっている場合には
% nkf -e < ファイル名 > 新しいファイル名 
でeucに変換します。

* Windows 端末からXDMCPで接続している場合、端末のアプリケーションの側に日本語フォ ントがなければ文字化けするか、文字の代わりに四角形が表示されます。フォントサーバを利用するか、アプリケーションに日本語フォントをインストールして下さい。




Q3-2 AstecXでgradsのようなX関連のプログラムを実行できない

自分のPCからAstecXでhostAに接続し、hostAからhostBにloginしたがgradsのようなX関連のプログラムを実行できない。


A3-2 自分の端末でXサーバ(AstecX、Cygwin-X等)を起動して、あるホストにXDMCPで接続し、そこから別のホストにsshなどで接続してX関連のプログラムを実行するには次の2つの操作を行う必要があります。自分の端末からssh -Xで接続する場合にはこの操作は必要ありません。




* 端末のIPの調べ方
Windowsの場合、[プログラム]-[アクセサリ]-[コマンドプロンプト]でコマンド入力が できるようにしてから
% ipconfig 
として調べます。Cygwinの場合にも同じコマンドが使えます。

Linuxの場合には
% /sbin/ifconfig
で調べることができます。

* ディスプレイ番号とスクリーン番号
  環境変数DISPLAYでIPアドレスの後ろの 0.0 はディスプレイ番号とスクリーン番号を表します。ディスプレイ番号は1つの端末に接続された物理的なディスプレイのことで0から始まる整数を使用します。通常の使用(1つの端末で1つのディスプレイと1つのスクリーンを使用)では 0 で問題ありません。1つのディスプレイとは、1つのグラフィックカードに接続されたモニタやマウスなどの集合と考えて下さい。1つのディスプレイが複数のスクリーンを持つ場合には(例えば CygwinのXサーバをスクリーン番号を変えて複数起動する場合)、複数のスクリーンでキーボードとマウス(などのポインタ)を共有した状態となります。この場合にはスクリーン番号の指定が必要となります。スクリーン番号もディスプレイ番号同様0から始まる整数を使用しますが、通常の使用では 0 となります。スクリーン番号を指定しない場合には 0 に設定されるので通常の使用では省略することも可能です。
  ちなみに、ディスプレイ番号0はtcp/6000に、ディスプレイ番号1はtcp/6001を使用します。ssh接続でX11転送を有効にした場合、Xクライアントが実行されるホストの環境変数DISPLAYが例えばlocalhost:10.0に設定されますが、この時、tcp/6010が使用されることになります。この際にはXクライアントが実行されるホストのtcp/6010に送られたXクライアントの出力をssh接続を通してXサーバが起動しているホストのtcp/6000に転送するので、Xサーバが起動しているホストで表示できるということになるわけです。




Q3-3 Solarisからftpをした際のエラー

Solarisからftpをするとanonymous login はできたがデータを取得しようとすると
425 Unable to build data connection: No route to host
と表示されファイルを取得できない。


A3-3 ftpコマンドでpassive modeを試してみて下さい。
ftp> passive 
とすれば、passive mode になります。

* ftpコマンドの中にはデフォルトでactive mode になっているものがあります。 active modeでは、接続元のポート20を開けるように要求されます。ファイアウォールを導入しているシステムでは、接続元のポートを開けることを許可していない場合があります。passive modeでは接続先の指定した別のポートに接続し、そのポートを使ってデータを転送するのでこの方法で解決できるかと思います。




Q3-4 パスワードを入力しないでssh login (scp) する方法はありますか

A3-4 sshではパスワード認証のほかに公開鍵による認証も可能です。リモートホスト、ローカルホストで鍵のペアを作成すればパスワードなしで login できるようになります。
鍵の生成方法は
Qiita
を参考にして下さい。




Q3-5 ls -l /netとしてもホスト名が表示されません

A3-5 Linux、Solaris、Tru64 で自動マウントの設定をした場合、特別な設定をしない限り /net/ホスト名/ファイルシステム のようにマウントポイントが作成されます。暫くの間、誰もアクセスしないと自動的にアンマウントされますが、この際にマウントポイントも消えるようになっています。

% ls /net/ホスト名

とすれば再び表示されるようになります。




Q3-6 sshでloginしてemacsを使う際のエラー

Linuxマシンから他のマシンにsshでloginし、emacsを使うと画面に触れた瞬間に
X protocol error: BadWindow (invalid Window parameter) on protocol request 38
のようなエラーが出て終了する。


A3-6 emacsはsshに対してX11クッキーを要求します。X11クッキーはデフォルト の設定では信頼されていないため、エラーを出し終了しているものと思われます。

/etc/ssh/ssh_configに
------------------------------
ForwardX11Trusted yes
------------------------------
を追加して下さい。

* サーバ側がopenssh-5.0以降では、ssh接続でXを使う際には必ずForwardX11Trusted yesの設定が必要になります。




Q3-7 OpenSUSE 12.1でsftpが使えなくなった

A3-7 OpenSUSE 12.1にアップグレードした際、/etc/ssh/sshd_configが
------------------------------------------------------------------------
Subsystem       sftp    /usr/lib64/ssh/sftp-server
------------------------------------------------------------------------
となる場合があります。その場所にsftp-serverの実行ファイルが存在しないため、sshdが立ち上がっていてsshで接続できてもsftpによるファイル転送が使用不可になってしまいます。
対処方法としては、/usr/lib/ssh/sftp-serverに64 bit対応のsftpがあるので、この行を
------------------------------------------------------------------------
Subsystem       sftp    /usr/lib/ssh/sftp-server
------------------------------------------------------------------------
のように書き換えればsftpが使用可能です。

* 12.1を新規インストールした場合には、この症状は起きなかった。
* sftp-serverが64 bit対応なのに、/usr/lib64/ssh/以下になく32 bit用の/usr/lib/ssh/以下にあるのも、アップグレード時に存在しないパスに設定されてしまうのも謎。バグだろうか?





目次

4、ファイル関連

Q4-1 Windowsで作成したテキストファイルをUNIXに転送して表示すると行末に ^M が表示される

A4-1 Windowsでは改行コードにCR(キャレッジリターン, 文字コード015)とLF(ラインフィード, 012)を使用していますが、UNIXではLFのみを使っています。このため、 Windowsで作成したテキストファイルをUNIX上で見ようとすると、プログラムによってはCRが^Mとして表示されることがあります。 ^Mを取り除くには、
% cat 入力ファイル | tr -d '\015' >! 出力ファイル 

とします。trコマンドは標準入力からテキスト形式の文字列を受け取ると -d オプションで指定されたキーワード(この場合は文字コード \015)を取り除いて標準出力に出力します。

* Windowsのファイルは、改行コードだけでなく文字コードもUNIXと異なります。Windowsで作成したファイルをUNIXに転送して文字化けする場合には、文字コードの変換と改行コードの変換を行うnkfを使います。(nkfに関しては4-2参照)




Q4-2 WindowsとUNIX間の転送で文字化けする

A4-2 Windowsは文字コードにShift-JIS、UNIXでは文字コードにEUCかUTF-8を用いています。文字コードは文字に振られた番号のようなもので、たとえばShift-JISとEUCでは番号と文字の対応が異なるので、Shift-JISをEUCと思って表示しようとすると文字化けしてしまいます。また4-1に記述したように、WindowsとUNIXは改行コードも異なります。
  WindowsからUNIXに転送したファイル対し、nfkコマンドを用いて次のように文字コード、改行コードを変換します。
% cat 入力ファイル | nkf -e -Lu >! 出力ファイル

* nkfは標準入力から受け取った文字列を解析してどの文字コード、改行コードで記述されているかを判別し、コマンドで指定された(例えば、-e : EUC、-s : Shift-JIS、-j : 7bit jis、-w : UTF-8)文字コード、改行コード(-Lu : LF、-Lw : CR + LF、-Lm : CR)に変換するコマンドです。
% cat 入力ファイル | nkf  --unix >! 出力ファイル
でも同様の変換が可能です。

  逆に、unixからwindowsに転送したい場合には
% cat 入力ファイル | nkf  --windows >! 出力ファイル
macに転送したい場合には
% cat 入力ファイル | nkf  --mac >! 出力ファイル
で変換可能です。

* 最近のLinuxでは、UTF-8が標準の文字コードとなりつつあります。UTF-8のマシンでは、
% cat 入力ファイル | nkf -w -Lu >! 出力ファイル
で文字コードUTF-8、改行コードLFに変換します。




Q4-3 UNIX上でのtarやzipの扱い方を教えてください

A4-3 tar形式のファイルをUNIX上で解凍するには、
% tar xvf ファイル名
と打ちます。
tarを作成するには
% tar cvf 作成するファイル名 tarに入れたいファイルやディレクトリ
とします。

* gnuのtarコマンドであれば、gzipやbunzip2のフィルターに対応しているので、
% tar xzvf hoge.tar.gz 
% tar xjvf hoge.tar.bz2
でgzipやbunzip2で圧縮されたtarファイルを直接解凍可能です。

圧縮の場合も
% tar czvf hogehoge.tar.gz  tarに入れたいファイルやディレクトリ 
% tar cjvf hogehoge.tar.bz2 tarに入れたいファイルやディレクトリ
で作成可能です。

  zip形式のファイルを扱うには、zipとunzipコマンドがあります。zipを解凍するには、
% unzip hoge.zip 

  zipで圧縮するには、
% zip -r hogehoge.zip zipに入れたいファイルやディレクトリ
です。


* ちなみに、Vine-5.xではlha形式にも対応しており、
# apt-get insall lha
でlhaをダウンロード可能。
使用法は
lha a 圧縮先 圧縮元
lha e 解凍元




Q4-4 viでEUCコードのファイルを開いた際に文字化けする

A4-4 原因はいくつか考えられますが、viが文字コードの自動認識に失敗しているだけなら簡単に対処可能です。まずはviでファイルを開いた後、コマンドモード(最終行モード)で
:e ++enc=euc-jp
を試してみて下さい。

これでも文字化けするようでしたら、端末の文字コードが原因である可能性も考えられます。Linuxの端末では文字コードの選択ができるものがありますので、 EUCになっているか確かめてみてください。Solarisなどのktermではkterm -km eucで起動すればEUCになります(環境変数をEUCにしても端末の文字コードは変わらないので注意)。なおSolarisのxtermは日本語未対応です。

* ファイルが実はEUCではなかったという可能性もあります。その場合、
% nkf -e < ファイル名 > 出力ファイル名 
でEUCに変換してください。

* EUCで書き出したい場合、コマンドモードで
:set fileencoding=euc-jp
とします。




Q4-5 WindowsからLinuxにフラッシュメモリを渡すと、大文字が小文字になる

Windowsで使っているフラッシュメモリをLinuxマシンに接続すると、ファイルの大文字が小文字になる


A4-5 Windowsで使用しているフラッシュメモリは、たぶんFAT32(Linuxのファイルシステムタイプではvfat)でフォーマットされていると思います。Linuxでvfatをマウントする際のデフォルトのオプションはlowerとなっていて、このオプションでは大文字で始まっているファイル名が小文字で表示されてしまいます。そのままのファイル名で表示するようにするには、mixedのオプションを使います。具体的には、
# mount -t vfat -o shortname=mixed デバイス名 マウント先のディレクトリ名
でマウントします。




Q4-6 Linuxマシンで受信したメールの添付ファイルが読めない

A4-6 添付ファイルが読めないケースの代表的なものとして、winmail.datが添付されていた場合と、メールと添付ファイルが一体化している場合の対処方法について記載します。

  • winmail.datが添付されている場合

  •   WindowsのOutlookから送信されるメールには、winmail.datというファイルが添付されることがあります。中に何も入っていないファイルのこともあるのですが、Outlookで添付ファイルを付けた場合には、添付ファイルもwinmail.datに含まれてしまいます。この場合には、tnefというソフトウェアを使ってファイルを取り出すことで対処可能です。
      tnefをダウンロードし、
    ------------------------------
    % ./confugure
    % make
    # make install
    ------------------------------
    で/usr/local以下にインストールされます。

    root権限のないマシンで使用する場合には、
    ------------------------------
    % ./confugure --prefix=インストールしたい場所
    % make
    % make install
    ------------------------------
    で自分のホームディレクトリなど、書き込み可能な場所にインストールしてください。(勝手にソフトウェアをインストールしてもいいか分からない場合は、システムの管理者に確認するようにしてください。)

    tnefの使用法:
    % tnef -tv winmail.dat (ファイル名リストを閲覧する場合)
    % tnef winmail.dat (アーカイブされたファイルを取り出す場合)


  • メールと添付ファイルが一体化している場合

  •   メールソフトが自動で添付部分を取り出せず、メール本文の後に添付ファイルがそのままくっついて一体化しているケースもあります。この場合、メール全体を一旦テキストファイルとして保存し、テキストエディタで
    ------------------------------
    begin 666  ファイル名
    記号の羅列
    end
    ------------------------------
    までの添付部分を切り出し保存します。
      次にuudecodeを使って、切り出したテキストファイルを復号化します。
    % uudecode 切り出したテキストファイル名
    です。





    目次

    5、その他

    Q5-1 manコマンドで表示できないことがある

    manコマンドでマニュアルを表示しようとすると、
    /tmp/mpSgayTq may be a binary file. See it anyway?
    のようなエラーが出てマニュアルを見られません。何か良い方法はないでしょうか。


    A5-1 manコマンドはテキストと同時にコントロールシーケンスも出力しますが、pagerがそれに対応していなければうまく表示できません。
    % man マニュアル名 | col -b > file名
    としてファイルに出力してから読んで下さい。

    * col -b を使うとコントロールシーケンスのみを取り除くことができ、通常のテキストとして表示することが可能になります。

    * 表示したマニュアル中に良く分からない記号が出てくる場合にも同じ方法を利用してテキストに変換することが可能です。上記の方法を試してみて下さい。




    Q5-2 LinuxのX画面のエラー音を消したい

    A5-2 X画面が起動した状態でターミナルを開き、
    % xset b off
    とすればエラー音を消すことができます。




    Q5-3 OpenSUSE 12.1で日本語入力ができなくなった

    A5-3 OpenSUSE 12.1をインストール後、そのままではShift+Spaceで日本語入力メソッドが立ち上がりません。
    12.1でデフォルトのインプットメソッドがibusになり、Ctrl+Spaceで立ち上げるように変更になったのが原因のようです。ibus+anthyを使う場合には、画面下のibusアイコンから設定を選びインプットメソッドanthyを選択します。
    11.4同様Shift+Spaceで入力するには、キーの設定も必要です。

    * 11.4と同じようにscim+anthyを使用して日本語入力したい場合
    (1) yast2でscim、anthy、scim-anthy、scim-bridgeのバイナリがインストールされていることを確認します。
    (2) ${HOME}/.kde4/Autostart/scimを作成し、次のように記述
    -----------------------------------------------------------------
    #!/bin/sh
    scim -d &
    -----------------------------------------------------------------
    % chmod +x ${HOME}/.kde4/Autostart/scim

    (3) .profileの最後に
    -----------------------------------------------------------------
    export XMODIFIERS=@im=SCIM
    export QT_IM_MODULE=scim-bridge
    export GTK_IM_MODULE=scim-bridge
    export QT_IM_SWITCHER=imsw-multi
    -----------------------------------------------------------------
    を追記します(bashの場合)。
    (4) ログインし直せばShift+Spaceでscimが立ち上がります。
    ibusのアイコンが残っていれば、起動しないように設定しても問題ないと思います。(.profileの設定でインプットメソッドがscimに変更されたので、必要ないプロセスが動いている以上の悪影響はありませんが。)





    目次



    [top]