4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】Linuxリモートサーバを使うときに役に立つメモ

4
Last updated at Posted at 2023-09-28

はじめに

本記事では、Linuxサーバでよく使用されるコマンドとツール、そして特にリモートサーバへのアクセス方法、ファイルのやり取り方法、Anacondaを使用した環境構築、そしてEmacsエディタの基本的な使い方、Screenコマンドの基本的な使い方について詳しく説明します。これらの情報は、Linuxユーザーにとって役立つ基本的なスキルを身につけるのに役立つでしょう。

リモートサーバへのアクセス方法

リモートサーバーにアクセスするには、SSH(Secure Shell)プロトコルを使用します。以下のようにsshコマンドを使います。

ssh remote_username@remote_host

ここで、remote_usernameは事前にサーバに登録されたリモートサーバーへのユーザー名を、remote_hostはリモートサーバーのホスト名またはIPアドレスを指定します。たとえば、ユーザ名がtaroでIPアドレスが198.51.100.255の場合、次のように入力します。

ssh taro@198.51.100.255

sshセッションを終了してローカルシェルセッションに戻るには、

exit

と入力、またはCrtl + dキーを押します。

X11転送を有効にする

リモートサーバー上でグラフィカルなアプリケーションを実行する場合、X11転送を有効にすることが必要です。X11転送を有効にするには、-Yオプションをsshコマンドに追加します。下記のようにコマンドを書きます。

ssh -Y remote_username@remote_host

X11転送を有効にすることで、リモートサーバー上でGUIアプリケーションを実行し、ローカルデスクトップに表示することができます。これは、グラフィカルなツールやエディタをリモートサーバ上で使用する場合に非常に便利です。

ローカルとリモートサーバ間のファイルのやり取り

ローカルとリモートサーバ間でファイルをやり取りする方法の一つとして、rsyncコマンドを使用することができます。rsyncは、ファイルをコピーおよび同期するための強力なツールで、デフォルトではファイルの更新差分だけを転送することができます。以下は、ローカル側からのrsyncを使用したファイルの送信を説明した例です。

リモートサーバからのファイル転送について
リモートサーバ側からローカルへのファイルのやり取りは、セキュリティの観点から推奨されていないので、本記事ではローカル側からのファイルのやり取りのみを示します。

1. ローカルからリモートサーバへのファイルの転送

基本構文:

rsync [オプション] [送信元ファイル/ディレクトリ] [リモートユーザー@リモートホスト:送信先ディレクトリ]

例:

rsync -avz my_file.txt remote_username@remote_host:/path/to/destination/
  • -a オプション: アーカイブモード。ファイル属性やタイムスタンプを保持しつつコピーします。
  • -v オプション: 冗長モード。詳細な情報を表示します。
  • -z オプション: 圧縮モード。データ転送時に圧縮を行います。

このコマンドは、my_file.txtをリモートサーバーの/path/to/destination/ディレクトリにコピーします。必要に応じて、オプション等を変更してください。

2. リモートサーバからロカールへのファイルの転送

基本構文:

rsync [オプション] [リモートユーザー@リモートホスト:送信元ファイル/ディレクトリ] [受信先ディレクトリ]

例:

rsync -avz remote_username@remote_host:/path/to/remote_file.txt /path/to/loacl_destination/

このコマンドは、リモートサーバーから/path/to/remote_file.txtをローカルの/path/to/loacl_destination/ディレクトリにコピーします。

仮想環境の構築ができるAnacondaの基本的な使い方

AnacondaはPythonプログラミング環境で、データサイエンス、機械学習、科学技術計算などの分野で幅広く使用されています。Anacondaの特徴の一つに、仮想環境の容易な作成が可能であり、Pythonのプロジェクトごとに仮想環境を作成することで、パッケージのバージョンや依存関係を安全に管理できます。

以下では、LinuxでAnacondaをインストールする手順と、基本的な使い方を紹介します。

1. Anacondaのダウンロードとインストール

1. Anacondaの公式ウェブサイトにアクセスし、ページ下部の「Linux」>「64-Bit (x86) installer」を右クリックし、リンクをコピーします。

2. サーバ内でターミナルを開き、wgetコマンドを使ってAnacondaをダウンロードします。
wgetは、Webからリモートサーバ上に直接ファイルをダウンロードする際に便利なコマンドです。
(下記は2023年9月時点での最新版のリンクですので、最新版のリンクを使用してください。)

wget https://repo.anaconda.com/archive/Anaconda3-2023.07-2-Linux-x86_64.sh

3. ダウンロードしたシェルスクリプトを実行し、Anacondaのインストールプロセスを開始します。

bash Anaconda3-2023.07-2-Linux-x86_64.sh

インストールプロセスが開始され、以下の項目が表示されます。

  • ライセンスの受諾
  • インストール先の設定

必要な情報を提供してインストールを完了します。下記は私の環境での実行例で、特に問題がなければ下記のように設定してください。

(略)
Do you accept the license terms? [yes|no]
[no] >>> yes
(略)
[/home/user_name/anaconda3] >>> 
PREFIX=/home/user_name/anaconda3
Unpacking payload ...
(略)
installation finished.
Do you wish the installer to initialize Anaconda3
by running conda init? [yes|no]
[no] >>> yes
(略)
Thank you for installing Anaconda3!

2. PATHの設定

1. Anacondaが正常にインストールされたら、~/.bashrcファイルを読み込んでAnacondaの環境を有効にするため、以下のコマンドを実行します。

source ~/.bashrc

2. 実行後、下記のようにプロンプトが(base)という状態になっていればAnacondaが使用可能です。

user@host:~$ source ~/.bashrc
(base) user@host:~$ 

3. 念の為、以下のコマンドでcondaを使えることを確認します。

conda --version
conda 23.7.2

バージョンが表示されていれば、condaが使えている状態です。後は、必要に応じて仮想環境などを作ります。

3. 仮想環境の作成と利用

1. condaで環境環境を作るには、conda create -n [環境名]を実行します。例えば、myenvの名前の仮想環境を作るには、下記のように書きます。

conda create -n myenv

2. 仮想環境を作成したら、それをアクティベーション(有効化)して使用します。有効化は下記のコマンドのように書きます。

conda activate myenv

ここでは、先ほど作成したmyenvにアクティベーションする例を示しています。プロンプトが下記のように(myenv)になるはずです。

(base) user@host:~$ conda activate myenv
(myenv) user@host:~$ 

3. 現在のプロンプトが表示されているので、この状態でconda install [パッケージ名]とすると、myenvの環境の中にパッケージがインストールされます。

仮想環境の作り方は下記などが参考になります。

AnacondaでGPU対応のTensorFlowの利用方法

Anacondaを使ってGPU対応のTensorFlowを使うには以下のようなコマンドを使います。

$ conda create --name tf-gpu-env tensorflow=*=gpu_*

この例では、tf-gpu-envを作り、そこにGPU対応のtensorflowをインストールしています。他のライブラリを入れていない新しい環境にインストールすることで、バージョン依存などのエラーをできるだけ抑えることができます。
また、基本的には仮想環境内はプロジェクト毎に必要最低限のライブラリのインストールに留めておくことでライブラリ同士の依存関係を把握しやすくなります。

TensorFlowのインストール方法の詳細はこちらにまとめていますので、よろしければ合わせてご覧ください。

テキストエディタEmacsの基本的な使い方

リモートサーバ上でのファイル編集は、主にCUIを介して行われ、そのためにテキストエディタを利用します。Linux環境では、代表的なテキストエディタとして「nano」、「vim」、「Emacs」などがあります。本記事では、Emacsを使用したターミナル内でのファイルの保存と編集について、基本的な手順を紹介します。Emacsは高度なカスタマイズが可能で、初めて使う方にも使いやすいテキストエディタの一つです。

1. ファイルを開く

以下のコマンドでファイルを開きます。

emacs ファイル名

例えば、ファイル名がhoge.txtの場合、次のように入力します。

emacs hoge.txt

ただし、sshセッションで-Yオプションを使用している場合、ターミナル上でファイルを開くには以下のコマンドを使用します。

emacs ファイル名 -nw

このように、-nwオプションを追加することで、Emacsをターミナル内で起動します。-Yオプションを使用する場合、グラフィカルなインターフェースを備えたEmacsを使用できますが、ターミナル上でのファイル編集が必要な場合は-nwオプションを使用します。

2. ファイルを編集

ファイルが開かれると、Emacsの編集モードに入ります。以下は、簡単なコマンドの例です。

  • カーソルを上下左右に移動するには、矢印キーを使用できます。
    • 上に移動:Ctrl-pまたはキー
    • 下に移動:Ctrl-nまたはキー
    • 左に移動:Ctrl-bまたはキー
    • 下に移動:Ctrl-fまたはキー
  • Undo操作(取り消し):直前の操作を取り消すには、Ctrl-_キーまたはCtrl-x uキーを入力します。
  • Redo操作(やり直し):直前のUndo(取り消し)を取り消して前の状態に戻るには、Ctrl-gキーを押してからUndoで使うキーを入力します。

Emacsでは多くのキーボードショートカットが使用されますが、これらの基本操作を覚えることで効果的にファイルを編集できるようになります。さらなるコマンドや機能に関する情報は、Emacsコマンド一覧(PDF)を参照ください。

3. ファイルを保存

ファイルに変更を加えた場合、ファイルを保存して変更を確定させます。
Ctrl-x Ctrl-sキーを押してファイルを上書き保存します。(この操作をスキップしても後述の手順のEmacsを終了の際、ファイルに変更がある場合は、ファイルの変更を保存するかどうかを尋ねるプロンプトが表示されます。)

4. Emacsを終了

Emacsを終了するにはCtrl-x Ctrl-cキーを押します。
このコマンドを実行すると、Emacsが終了し、ファイルの変更があった場合、保存するかどうかを尋ねるプロンプトが表示されます。この終了時にファイルを保存しなかった場合、Emacsは変更を失うことになります。ファイルを保存するかどうかは、確認プロンプトで選択できます。

Linuxでの基本的な確認とプロセス操作

リモートサーバを使い始めたばかりの頃は、「今どんなOSを使っているのか」「容量は足りているのか」「今動いている処理をどう扱えばいいのか」といった基本的なところで戸惑うことがあります。特に共有サーバでは、今どの環境で何を実行しているのかを把握することが重要になります。ここでは、そのために役立つ基本コマンドを簡潔にまとめます。

OSの情報を確認する

ログインしているサーバのOSは以下で確認できます。

cat /etc/os-release

例えば Ubuntu 20.04 では次のように表示されます。

NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
PRETTY_NAME="Ubuntu 20.04.6 LTS"

PRETTY_NAME を見れば環境の概要がわかります。Linuxはディストリビューションごとに挙動が異なるため、この情報はトラブル対応や環境構築で役に立ちます。

ディスク容量を確認する

容量不足はよくあるトラブルの原因です。まず全体の使用状況を確認します。

df -h

どのディレクトリが容量を使っているかは以下で確認できます。

du -sh *

例えば、

2.1G data
5.6G results
120M scripts

のように表示されれば、results が特に容量を使っていることがわかります。

プロセスID(PID)とは何か

Linuxでは実行中のプログラムはプロセスとして管理され、それぞれにPID(Process ID)が割り当てられます。この番号を使って、処理の確認・終了・優先度変更などを行います。

ps -u $USER

例えば、

  PID TTY          TIME CMD
12380 pts/0    00:00:02 python
12410 pts/0    00:00:00 emacs

と表示されます。例えば、この場合、python のPIDは 12380 です。この番号を使うことで、そのプロセスを終了したり、優先度を変更したりといった制御ができます。

なお、このPIDは top コマンドを実行したときにも表示されます。リアルタイムでCPU使用率やメモリ使用量と一緒に確認できるため、動いている処理を把握したいときに便利です。

jobs / bg / fg の使い方

これらは現在のターミナル内でのプロセス操作に使います。

例えば、

python long_job.py

を実行中に Ctrl-z を押すと、一時停止されます。

[1]+  Stopped                 python long_job.py

この状態で、

jobs

とすると、

[1]+  Stopped                 python long_job.py

と表示されます。

バックグラウンドで再開するには:

bg %1

前面に戻すには:

fg %1

を使います。

kill の使い方

PIDを使ってプロセスを終了します。例えば、ps で確認した python(PID=12380)を終了したい場合に使います。

kill 12380

通常はこのコマンドで終了できますが、プロセスが応答しない場合は強制終了として

kill -9 12380

を使います。kill -9 はプロセスを強制的に停止するため、基本的には最後の手段として使います。

ジョブ番号でも指定できます。

kill %1

nice / renice(優先度の調整)

共有サーバでは、重い処理の優先度を下げて実行することがあります。

例えば、

nice -n 10 python heavy_job.py

とすると、少し優先度を下げて実行されます。

すでに動いているプロセスに対しては:

renice 10 -p 12380

とします。

Linuxでは、nice値が小さいほど優先度が高く、大きいほど優先度が低くなります。通常は 0 が基準で、top コマンドなどで見ると -20 のような値も表示されますが、これは主にシステム側の重要なプロセスに割り当てられているものです。そのため、一般ユーザが優先度を上げるよりも「下げる」方向で使うことが多く、特に長時間の処理では 1020 といった値を指定することがあります。

基本的には、長時間かかる処理であれば優先度を少し下げて実行するのがよいと思います。nice値は、他に誰も使っていなければ結果的にフルに計算資源を使えるため、「誰かが使う余地を少し残しておく」という意思表示に近いものです。共有サーバは複数人で使う前提のものなので、「自分の処理が他の人の作業を圧迫する可能性がある」という点を意識しておくと、全体として快適に使える環境になると思います。

特に並列計算などでCPUやメモリを大きく消費する処理では、この影響が顕著になるため、優先度の設定がより重要になります。

Ctrl-c と Ctrl-z の違い

  • Ctrl-c:処理を終了
  • Ctrl-z:一時停止(あとで bg / fg で再開)

プロセス操作と Screen の関係

ここまで紹介した操作は、現在のターミナル内での制御に限られます。そのため、SSH接続が切れると実行中の処理も停止してしまいます。

長時間の処理を実行する場合は、途中でSSH接続を切ることも多いため、この点には注意が必要です。このような場合には、後述する screen を使うことで、処理を継続したままセッションを離れることができます。

長時間処理には screen、軽い並行作業には bg と使い分けるとイメージしやすいと思います。

バックグラウンドで処理を継続できるScreenコマンドの基本的な使い方

リモートサーバを使用する際、大規模な処理を行うことがあります。そのような場合、SSH接続を切断しても処理を継続できるようにするために、screen コマンドを使用します。

screen はリモートシェルセッションを保持し、バックグラウンドでタスクを実行できるツールです。これにより、SSH接続が切断されても作業を中断することなく進めることができます。

以下では、この記事で解説するScreenコマンドの基本的な使い方に焦点を当てて紹介します。詳細な情報や具体的なコマンドの使い方については、次の記事を参照してください。

1つのScreenでの基本的な使い方

以下の手順で使います。

1. 新しいセッションの開始

新しいセッションを作るにはリモートサーバのターミナル内でscreenを使います。

2. 何かバックグラウンドしたい処理を走らせる

何か時間がかかるコードを走らせます。

3. セッションからのデタッチ (セッションをバックグラウンドで実行)

コードを走らせた状態でセッションからデタッチするには、Ctrl-a dを使います。そうするとサーバからログアウトしたりしても、バッググラウンドで処理が継続されます。

4. 処理が継続されているか確認する

デタッチした状態で本当に処理が動作しているか確認します。
よく使うのがtopコマンドで、このコマンドはさまざまなコマンドが動作をリアルタイムで確認できます。デタッチした後で、topと入力しUSERCOMMANDをみて確かに動いていることを確認しましょう。

topコマンドを終了するには、Ctrl-cを入力します。

5. デタッチしたセッションへの再接続

デタッチしたセッションに戻るにはscreen -rを使います。

6. 不要になったセッションの削除

セッションにscreen -rでアタッチし、exitを入力します。

7. セッションの表示

screen -lsコマンドを使用して、現在のscreenのセッションを表示できます。

しかし、複数のScreenセッションが起動している場合、単にscreen -rだけではアタッチできず、どのセッションにアタッチするか指定する必要があります。以下にその一例を示します。

例えば、2つの異なるscreenセッションが存在する場合、screen -rコマンドを実行すると、次のように表示されます。

$ screen -r
(出力)
There are several suitable screens on:
	3817692.pts-0.hoge	(2023年09月22日 11時01分15秒)	(Detached)
	3817646.pts-0.hoge	(2023年09月22日 11時00分58秒)	(Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.

これは現在2つのscreenが立ち上がっている状態なので、例えばscreen -r 3817692というようセッション名を指定してアタッチします。

セッションに名前をつけて複数実行したい場合

Screenセッションに名前をつけて複数走らせたい場合は、screen -S [プロセス名]を使います。

以下は、名前のついた2つのセッションの例です。

1. 最初のセッションを作成します。

$ screen -S session_a

この後、Ctrl-a dを押してセッションをデタッチします。

2. 次のセッションを作成します。

$ screen -S session_b

同様に、Ctrl-a dでセッションをデタッチします。

3. 作成したセッションを一覧表示します。

$ screen -ls
(出力)
There are screens on:
	3818262.session_b	(2023年09月22日 11時14分53秒)	(Detached)
	3818219.session_a	(2023年09月22日 11時14分42秒)	(Detached)
2 Sockets in /run/screen/S-name.

この例では、session_asession_bという名前が付いた2つのセッションが作成され、それぞれ一意の識別子で一覧表示されています。例えば、3818262.session_bのセッションにアタッチするには、以下のコマンドを使用します。

$ screen -r session_b

名前でセッションを管理することで、より簡単に識別することができます。

知っておくと便利かも

デタッチした状態で不要なセッションの削除

不要になったセッションを消すとき、6. 不要になったセッションの削除で紹介した方法では、セッションにアタッチした状態で消す必要があり少し手間がかかるので、Screenからデタッチした状態からでも以下のコマンドでセッションを削除することもできます。

screen -X -S セッション名 quit

Screen内でターミナルログの閲覧方法

Screenにアタッチしていると、デフォルトでマウスの操作がコマンドの巻き戻りに割り当てられており、テキストの選択やスクロールが制限されます。ここでは、マウス操作でターミナルログを閲覧する方法について説明します。

表示されているログを巻き戻って見たい場合は、マウスの操作を切り替えるために、Ctrl-aキーを押しながらescキーを押します。これにより、Screen内でスクロールモードに入ります。
スクロールモードでは、マウスのホイールまたはキーボードの矢印キーを使用して、ログを巻き戻って閲覧できます。
通常のモードに戻るためにescキーを再度押します。

まとめ

本記事では、Linuxサーバでの基本的な操作について説明しました。リモートサーバへのアクセス方法やファイルのやり取り、Anacondaを使用した環境構築、Emacsエディタの基本的な使い方、そしてScreenコマンドの基本的な使い方を紹介しました。

本記事が、どなたかの役に立てば幸いです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?