アーカイブ:計算機FAQ
ここでは、計算機(Solaris, Tru64、Linux)の設定やプログラミング、作図等に関するFAQの2013年以前の情報をアーカイブしています。
一般ユーザのコマンドプロンプトは%、rootのコマンドプロンプトは#で表記しています。
目次
- 初期設定
- Fortran関連
- Q2-1 Tru64 UNIXのf77(f90)でコンパイルしたプログラムで作成したバイナリデータをgradsで見ると4レコードに1つしか図を作成できない。
- Q2-2 Solarisで問題なく使えたプログラムをTru64でコンパイルして実行するとread文の所でsequential-access I/O to unit open for direct accessというエラーが出て実行できない。
- Q2-3 自分のマシンのendianと違うendianのデータを扱いたいのですが、コンパイルオプションがあれば教えてください。
- Q2-4 ifort(バージョン8.1)をインストールしたがifort: error: could not find directory in which g++ residesとのエラーが出て使えない。
- Q2-5 ifort(バージョン11.0以降)でコンパイル時に relocation truncated to fit: R_X86_64_32S against `.bss というエラーが出た。
- Q2-6 netcdfライブラリを4.1.2や4.1.3に変えたら、リンクに失敗するようになった。
- ネットワーク関連
- Q3-1 環境変数でLANGの設定を行っているのにktermを使用すると文字化けが起こる。
- Q3-2 自分のPCからAstecXで接続し、そこから他のホストにloginしたがgradsのようなX関連のプログラムを実行できない。
- Q3-3 Solarisからftpをするとno route to host と表示されファイルを取得できない。
- Q3-4 パスワードを入力しないでssh login (scp) する方法はありますか。
- Q3-5 ls -l /netとしてもホスト名が表示されません。
- Q3-6 Linuxマシンから他のマシンにsshでloginし、emacsを使うと画面に触れた瞬間に終了する。
- Q3-7 OpenSUSE 12.1でsftpが使えなくなった。
- ファイル関連
- その他
[top]
1、初期設定
Q1-1 Solarisのman コマンドをlessコマンド表示にしたい
Solarisでman コマンドを使うとmoreコマンドのような出力になります。lessコマンドのようにしたいのですが。
% setenv PAGER less (csh,tcshの場合)
% export PAGER=less (bashの場合)
Q1-2 Solarisでcrontabの編集ができない
Solarisを使っていますが、crontabを編集しようとすると見慣れない画面が出て終了もできません。どうしたらいいでしょうか?
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 システムの設定とは違うデフォルトプリンタを使いたいのですがどうすればいいでしょうか?
% setenv PRINTER プリンタ名(csh, tcshの場合)のようにして下さい。
% export PRINTER=プリンタ名(bashの場合)
目次
2、Fortran関連
Q2-1 Tru64 UNIXとSolarisでgradsの時刻表示が異なる
Tru64 UNIX のf77(f90)でコンパイルしたプログラムで作成したバイナリデータをgradsで見ると4レコードに1つしか図を作成できません。Solarisではうまくいくのですが。
これを防ぐための方法として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
というエラーが出て実行できない。
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のデータを扱いたいのですが、コンパイルオプションがあれば教えてください。
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です。
OS | CPU | endian | コンパイラ | オプション |
Tru64 | alpha | little | f77,f90,f95 | -assume byterecl -convert big_endian |
Linux | Opteron Pentium Core2 Duo Core i7 Xeon等 | little | pgf77 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
とのエラーが出て使えない。
% 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
というエラーが出た
-shared-intel -mcmodel=large
のオプションを付けてコンパイルすることでエラーを回避可能です。
Q2-6 netcdfライブラリ4.1のリンクエラー
netcdfライブラリを4.1.2や4.1.3に変えたら、リンクに失敗するようになった。
というエラーが出た
4.1.1以前のバージョンでは、コンパイル時に
コンパイラ名 -c aaa.f90 -I${NETCDF}/include(${NETCDF}は、netcdfライブラリをインストールしたディレクトリ)
コンパイラ名 -c bbb.f90 -I${NETCDF}/include
リンク時に、
コンパイラ名 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を使用すると文字化けが起こる。
% 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関連のプログラムを実行できない。
- リモートホストに接続する前に必要な操作(xhostの実行)
(この質問の場合はhostAがローカルホスト、hostBがリモートホスト)
xhostはコマンドが実行されたホストからコマンドで指定されたホストまでのXを 使った接続を許可(or 許可の取消)するためのコマンドです。
% xhost +hostB (Xを使ったhostBへの接続を許可)
- リモートホストに接続した後に必要となる操作(環境変数DISPLAYの設定)
環境変数DISPLAYは実行されたプログラム(Xクライアント)からのリクエストをどのXサーバに出すかという情報を保持します。自分の端末でXサーバが動いていて自分の端末上のプログラム(Xクライアント)からのリクエストを受ける場合には localhost:0.0 (Xクライアントが実行されたホストと同一のホストのXサーバ)となります。
今回の場合には自分の端末ではXサーバが動いていて、それを使ってhostAに接続しhostAからhostBに接続したことを想定しているので、XクライアントはhostBで実行されるプログラムとなり、Xサーバは自分の端末のXサーバとなり、環境変数DISPLAYは 自分の端末のIP:0.0 となります。
環境変数DISPLAYは.cshrcや.bashrcの中で設定していれば問題ありませんが、設定を行わなかった場合、Xクライアントは localhost:0.0 (この場合にはhostBにloginしているのでhostBのディスプレイ)のXサーバにリクエストを出そうとするので、自分の端末のXサーバにリクエストが行くようにするには
% setenv DISPLAY 192.168.0.22(自分の端末のIPに変える) :0.0 (csh、tcshの場合)
のように設定します。IPアドレスと:の間にスペースは入らないので注意してく ださい。使用する端末のIPが常に変わらない場合には.cshrcや.bashrc の中で設定した方が便利だと思います。
% export DISPLAY=`192.168.0.22(自分の端末のIPに変える) :0.0` (bashの場合)
* Reflection X、X Win32の場合、XDMCPによる接続は行いません。
* ssh -Xあるいはssh -o "ForwardX11 yes" を使用する場合、転送されたX11をループバックアドレス(localhost)にbindし、環境変数 DISPLAY を localhost:10.0 のように自動的に書き換えます。この際には localhost:10.0 に出されたXクライアントのリクエストはsshを通してXサーバに届きますのでDISPLAYの設定を変更する必要はありません(手動で変更してしまうとXが飛ばなくなるので注意)。
* hostAとhostBの間にファイアウォールがある場合、通常はX11プロトコル(ポート6000 番)をブロックするように設定していると思います。この際にはsshのX11転送を使って下さい。
* sshの接続の際、クライアント側で常にX11転送を有効にしておくと便利です。sshクライアントの設定ファイルは、Linuxでは/etc/ssh/ssh_config、Solarisのopensshでは/usr/local/etc/ssh_configです。その中でForwardX11 yesの行を有効にしてください。emacsが落ちる場合は、ForwardX11Trusted yesも有効にします。
* 端末の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
と表示されファイルを取得できない。
ftp> passiveとすれば、passive mode になります。
* ftpコマンドの中にはデフォルトでactive mode になっているものがあります。 active modeでは、接続元のポート20を開けるように要求されます。ファイアウォールを導入しているシステムでは、接続元のポートを開けることを許可していない場合があります。passive modeでは接続先の指定した別のポートに接続し、そのポートを使ってデータを転送するのでこの方法で解決できるかと思います。
Q3-4 パスワードを入力しないでssh login (scp) する方法はありますか
鍵の生成方法は
Qiita
を参考にして下さい。
Q3-5 ls -l /netとしてもホスト名が表示されません
% ls /net/ホスト名
とすれば再び表示されるようになります。
Q3-6 sshでloginしてemacsを使う際のエラー
Linuxマシンから他のマシンにsshでloginし、emacsを使うと画面に触れた瞬間に
X protocol error: BadWindow (invalid Window parameter) on protocol request 38
のようなエラーが出て終了する。
/etc/ssh/ssh_configに
------------------------------ ForwardX11Trusted yes ------------------------------を追加して下さい。
* サーバ側がopenssh-5.0以降では、ssh接続でXを使う際には必ずForwardX11Trusted yesの設定が必要になります。
Q3-7 OpenSUSE 12.1でsftpが使えなくなった
------------------------------------------------------------------------ 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 が表示される
% cat 入力ファイル | tr -d '\015' >! 出力ファイル
とします。trコマンドは標準入力からテキスト形式の文字列を受け取ると -d オプションで指定されたキーワード(この場合は文字コード \015)を取り除いて標準出力に出力します。
* Windowsのファイルは、改行コードだけでなく文字コードもUNIXと異なります。Windowsで作成したファイルをUNIXに転送して文字化けする場合には、文字コードの変換と改行コードの変換を行うnkfを使います。(nkfに関しては4-2参照)
Q4-2 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の扱い方を教えてください
% tar xvf ファイル名と打ちます。
tarを作成するには
% tar cvf 作成するファイル名 tarに入れたいファイルやディレクトリとします。
* gnuのtarコマンドであれば、gzipやbunzip2のフィルターに対応しているので、
% tar xzvf hoge.tar.gzでgzipやbunzip2で圧縮されたtarファイルを直接解凍可能です。
% tar xjvf hoge.tar.bz2
圧縮の場合も
% 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コードのファイルを開いた際に文字化けする
: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マシンに接続すると、ファイルの大文字が小文字になる
# mount -t vfat -o shortname=mixed デバイス名 マウント先のディレクトリ名でマウントします。
Q4-6 Linuxマシンで受信したメールの添付ファイルが読めない
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?
のようなエラーが出てマニュアルを見られません。何か良い方法はないでしょうか。
% man マニュアル名 | col -b > file名としてファイルに出力してから読んで下さい。
* col -b を使うとコントロールシーケンスのみを取り除くことができ、通常のテキストとして表示することが可能になります。
* 表示したマニュアル中に良く分からない記号が出てくる場合にも同じ方法を利用してテキストに変換することが可能です。上記の方法を試してみて下さい。
Q5-2 LinuxのX画面のエラー音を消したい
% xset b offとすればエラー音を消すことができます。
Q5-3 OpenSUSE 12.1で日本語入力ができなくなった
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]