2019年11月27日水曜日

研究室の計算機をリモートで使うときのコマンドまとめ

研究室で想定させる解析環境として、各自がPCを持っていて、それに加えて解析用のちょっと性能のいいLinux機(xeonやi7、RAM100~200Gbほど)などが1〜2台あり、リモートログインで使っているというような状況が考えられる。こういったときに比較的軽い解析やプログラミングは手元のPCで行い、重めの解析はLinux機でやるといった運用が一般的かなと思う。そういったときにリモートログインを含め、色々と便利なコマンド操作をまとめておく。研究室に分属した学生がとりあえず解析マシンにアクセスできるようになる、ということを目標にして、知っておいたほうが良いことだと思う。

(1)マシンスペック、環境

現在の環境を簡単にまとめる。
手元のパソコン:MacBook Pro 15inch corei7 16GbRAM 1TbSSD
Linux機:CentOS6.7(final) Xeon  CPU E5-2630 v3 2.4GHz 256GbRAM 500GbSSD+1.8TbSSD+6TbHHD+5TbHDD

主に手元のMacで日々の作業を行い、解析はLinux機に投げている。学科が所有している解析サーバーがあり、そちらは1TbRAMを積んでいてアッセンブルなども滞りなくできる。

(2)ログイン、ログアウト

ssh接続でログインする場合、以下のように接続する。
> ssh username@133.101.... 

ポート指定が必要な場合は、-pで指定する。
> ssh username@133.101....  -p xxxx

これでログインすると、向こうのホームディレクトリにいく。
ログアウトする場合は、exitコマンドを叩く。
> exit

ssh:
https://www.atmarkit.co.jp/ait/articles/1701/26/news015.html
exit:
https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230763/

 

(3)シャットダウン

ssh接続しているコマンドラインからシャットダウンする場合、sudoで行う。
> sudo shutdown -h now

これで接続が切断して、こちら側に帰ってくる。
https://www.atmarkit.co.jp/ait/articles/1701/19/news012.html

 

(4)データのコピー

scpコマンドを使って、リモートで接続しているパソコンにデータをコピーすることができる。
> scp mydata.txt username@133.101....:/path/to/copy/
https://www.atmarkit.co.jp/ait/articles/1701/27/news009.html

linux側からmacにコピーする場合、macの側のシステム環境設定で、共有のリモートログインがオンになっている必要がある。設定は、システム環境設定>共有>リモートログイン:オン

(5)外部ストレージのマウント

外付けhddやssdを接続した場合、マウントポイントにマウントしてあげる必要がある。
初めての場合、mkdirでマウントポイントになるディレクトリを 作成する。現在自分は解析用ディレクトリの中にマウントポイントを作っている。一度作れば、次回以降そこにマウントする。再度mkdirは必要ない。

> mkdir /path/to/mountpoint/dir1 

先ほど作ったdir1にマウントする場合、あらかじめデバイスの名前を検索しておく必要がある。上記環境の場合、/devの下にある名前を探して、sdd1だった場合、
> sudo mount /dev/sdd1 /path/to/mountpoint/dir1
https://www.atmarkit.co.jp/ait/articles/1802/15/news035.html

使い終わって外付けのsddなどを取り除く場合、
> sudo umount /path/to/mountpoint/dir1
https://www.atmarkit.co.jp/ait/articles/1802/16/news025.html

(6)マシンスペックの確認


GUIで使っていればアプリケーションからマシンスペックは簡単に確認できるが、コマンドラインで確認しようと思った場合、以下のようなものが使える。

# CPU
> cat /proc/cpuinfo
# コア数だけ表示
> nproc --all

# RAM
> cat /proc/meminfo
 または、dmidecodeを使って、
> sudo dmidecode -t memory
https://www.atmarkit.co.jp/ait/articles/1904/04/news018.html

# ストレージ
## マウントポイント、容量
> df -h
https://www.atmarkit.co.jp/ait/articles/1610/24/news017.html
ディスクの空き領域を示すことができる。 --totalで、全体の合計も表示してくれる。
## hddの詳しい内容
> sudo parted -l
https://www.atmarkit.co.jp/ait/articles/1803/08/news017.html 
-l(--list)オプションで、全てのブロックデバイスの情報を示すことができる。
## パーティション情報
> lsblk
https://www.atmarkit.co.jp/ait/articles/1802/02/news021.html
## osのバージョン(centosの場合)
> cat /etc/redhat-release

(7) Nvidia GPU使用状況

nvidiaのGPUを使っている場合、搭載されているGPUの情報や使用状況は、以下のコマンドで確かめられる。
> nvidia-smi
https://developer.nvidia.com/nvidia-system-management-interface

(8)ラン状況の確認

投入したランの状況の確認
> jobs
https://tech.nikkeibp.co.jp/it/article/COLUMN/20060227/230804/

プロセスの確認
> ps a
https://www.atmarkit.co.jp/ait/articles/1603/28/news022.html

> top
https://www.atmarkit.co.jp/ait/articles/1706/30/news018.html

(9)ジョブの投入、キル

手元のターミナルからsshでジョブを投入する場合、途中で手元のPCからログアウトする可能性もある。このとき単純にコマンドを実行している場合、手元のターミナルを閉じた段階で実行中のランも終了してしまう。そうならないために、nohupコマンドを使う。

> nohup ./runscript.sh > nohup.1.out &

ラン実行中の標準出力はnohup.1.outの方に保存されている。&をつけることで、バックグラウンドジョブとして動く。これで、手元でターミナルを閉じてもrunscript,shは実行されたままになる。
https://www.atmarkit.co.jp/ait/articles/1708/24/news022.html

 たまに、実行したけど後から設定の間違いに気づき、実行途中のジョブを取りやめたい場合などがある。その場合は、まず実行されているプロセスIDを調べる。
> ps a
このとき、終了させたいプロセスのPIDを確認する。PIDが6631だった場合、
> kill 6631
とすれば、6631のプロセスを終了させることができる。
https://www.atmarkit.co.jp/ait/articles/1604/05/news022.html
他人が解析しているランを間違って終了させてしまった場合とても悲惨なことになるので、注意する。