多段ssh接続が必要なサーバ上のファイルをvimで直接編集する方法

March 17,2020 11:55 PM
Category:[Linux]
Tag:[Linux, ssh]
Permalink

多段ssh接続が必要なサーバ上のファイルをvimで直接編集する方法を紹介します。

1.問題点

リモートサーバ上にファイル(test.txt)があります。

ここでは「SSHポートフォワーディング(トンネリング)とは」のウェブサーバ(10.10.10.123)上にあるものとします。

このファイルをクライアントサーバから編集する場合、

# ssh 10.10.10.10
# ssh 10.10.10.123
# vi test.txt

とします。

が、クライアントサーバからウェブサーバのファイルを直接編集する方法が分かりません。

ということで、多段ssh接続が必要なサーバ上のファイルをvimで直接編集する方法を紹介します。

2.多段ssh接続が必要なサーバ上のファイルをvimで直接編集する

多段ssh接続が必要なサーバ上のファイルをvimで直接編集するには、まず、1つめの画面でポートフォワーディングを実施します。

# ssh -N -L 10000:10.10.10.123:22 10.10.10.10

ここまでは通常のsshポートフォワーディングと同じです。なお、ポート番号はsshの「22」を指定しておきます。

そして、2つめの画面でvimを起動します。

# vim scp://root@localhost:10000//home/foo/test.txt

これで、多段ssh接続が必要なサーバ上のファイルのvim画面が開きます。

3.解説

vimは次のように指定することで、リモートサーバのファイルを編集することができます。

# vim scp://<ユーザ>@<リモートサーバのIPアドレス>//<編集対象ファイル>

今回は、この「リモートサーバのIPアドレス」にsshポートフォワーディング情報「localhost:10000」を与えます。

# vim scp://<ユーザ>@localhost:10000//<編集対象ファイル>

この設定により、多段ssh接続せずにvimの起動が行えます。

4.参考サイト

参考サイトは下記です。ありがとうございました。

Comments [0] | Trackbacks [0]

Linuxシェルでコマンド実行結果を入れた変数の改行を出力する方法

March 4,2020 11:55 PM
Category:[Linux]
Tag:[Linux]
Permalink

Linuxシェルでコマンド実行結果を入れた変数の改行を出力する方法を紹介します。

1.問題点

次のようなシェルスクリプト(test.sh)を作りました。

#!/bin/bash
 
result=`ls -l`
echo $result

このスクリプトを実行すると、

# ./test.sh
合計 16 -rw-r--r--. 1 root root 8 2月 13 17:40 2020 aaa -rw-r--r--. 1 root root 8 2月 13 17:40 2020 bbb -rw-r--r--. 1 root root 8 2月 13 17:40 2020 ccc -rwxrwxr-x. 1 root root 41 2月 13 17:38 2020 test.sh

となり、改行が失われますが、対処方法が分かりません。

ということで、シェルでコマンド実行結果を入れた変数の改行を出力する方法を紹介します。

2.コマンド実行結果を入れた変数の改行を出力する

コマンド実行結果を入れた変数の改行を出力するには、echoするときの変数をダブルクォーテーションで括ればOKです。

#!/bin/bash
 
result=`ls -l`
echo "$result"

これで改行が反映されます。

# ./test.sh
合計 16
-rw-r--r--. 1 root root  8  2月 13 17:40 2020 aaa
-rw-r--r--. 1 root root  8  2月 13 17:40 2020 bbb
-rw-r--r--. 1 root root  8  2月 13 17:40 2020 ccc
-rwxrwxr-x. 1 root root 41  2月 13 17:38 2020 test.sh
Comments [0] | Trackbacks [0]

cgroupsの利用方法

February 20,2020 11:55 PM
Category:[Linux]
Tag:[cgroups, Linux]
Permalink

cgroupsの利用方法を紹介します。

1.はじめに

cgroups(コントロールグループ)は、Linuxにおける、

  • CPUコア
  • CPU使用率
  • メモリ使用量
  • ディスクI/O
  • ネットワークI/O

などのプロセス資源を管理するためのサブシステムです。

ここではcpusetというサブシステムを利用して、

test1.sh
test2.sh

の2つのサンプルプログラムを、特定のCPUコアに割り当てる方法を紹介します。

なお、cgroupsが利用できるかどうかは、

# dmesg | grep cgroup
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Initializing cgroup subsys ns
Initializing cgroup subsys cpuacct
Initializing cgroup subsys memory
Initializing cgroup subsys devices
Initializing cgroup subsys freezer
Initializing cgroup subsys net_cls
Initializing cgroup subsys blkio
Initializing cgroup subsys perf_event
Initializing cgroup subsys net_prio

で確認できます。

上記の例では、

  • cpuset
  • cpu
  • ns
  • cpuacct
  • memory
  • devices
  • freezer
  • net_cls
  • blkio
  • perf_event
  • net_prio

のサブシステムが利用できます。

2.cgroupを使うための仮想ファイルシステムマウント

サブシステムのための仮想ファイルシステムをマウントします。

# mkdir /dev/cgroup
# mount -t cgroup -o cpuset cgroup /dev/cgroup

これで/dev/cgroup配下にcpusetというサブシステムが生成されます。

# cd /dev/cgroup
# ls -1
cgroup.event_control
cgroup.procs
cpuset.cpu_exclusive
cpuset.cpus
cpuset.mem_exclusive
cpuset.mem_hardwall
cpuset.memory_migrate
cpuset.memory_pressure
cpuset.memory_pressure_enabled
cpuset.memory_spread_page
cpuset.memory_spread_slab
cpuset.mems
cpuset.sched_load_balance
cpuset.sched_relax_domain_level
notify_on_release
release_agent
tasks

なお、デフォルトの設定では、ルートディレクトリに

/cgroups

があるようですが、コンフィグを利用して設定する回で解説するので今回は使用しません。

3.コントロールグループ作成

次にコントロールグループを作成します。

# cgcreate -g cpuset:/cpuset

これで

/dev/cgroup/cpuset

というコントロールグループが作成されます。

本当はcpuset配下にサブコントロールグループを作成したのですが、以降のコマンドでエラーになるため断念しました。

4.コントロールグループにCPU割り当て設定

CPU0を割り当てる設定を行います。

# cgset -r cpuset.mems=0 cpuset
# cgset -r cpuset.cpus=0 cpuset

これで、

/dev/cgroup/cpuset/cpuset.cpus

に"0"が設定されます。

cpuset.memsの設定を行わないと、次項のcgexecで

cgroup change of group failed

というエラーになります。

5.サンプルプログラムの実行(=CPUの割り当て)

前のメールではプログラム実行後にCPU割り当てを変更してますが
この方法であれば実行直後からCPU割り当てを変更できるようです。

# cgexec -g cpuset:/cpuset /root/test1.sh
# cgexec -g cpuset:/cpuset /root/test2.sh

この方法では、実際のcpコマンドも

# cgexec -g cpuset:/cpuset cp xxx xxx

のようになります。

6.top結果

このサーバではCPU0・CPU1の2コアがありますが、CPU0だけが使われていることが分かります。

top - 13:57:43 up 108 days,  7:03,  4 users,  load average: 2.00, 2.20, 2.19
Tasks: 157 total,   3 running, 154 sleeping,   0 stopped,   0 zombie
Cpu0  :100.0%us,  0.0%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Cpu1  :  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   7510584k total,  3404032k used,  4106552k free,   326780k buffers
Swap:  3833848k total,        0k used,  3833848k free,  2333140k cached
Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages