クローゼの色々備忘録

仕事や私生活で学んだこと、ゲームの感想などを記録。お役に立てれば幸いです。

ディレクトリごと、別のサーバに送って展開したい

1.送りたいディレクトリをまとめる

# tar cvf /tmp/dir.tar /var/sample/dir1
# ls /tmp
dir.tar

※ここでは、「dir1」というディレクトリを「dir.tar」というファイル名で「/tmp」配下にまとめる

2.まとめたファイルを送る

# scp /tmp/dir.tar root@10.10.xx.xx:/tmp
※送り先のrootユーザーのパスワードを入力

※「scp」コマンドを使って、送り先の「/tmp」配下にファイルを送る

3.送り先のサーバで、送ったファイルを展開する

# cd /var/test/
# tar xvf /tmp/dir.tar
# ls

※ここでは、「/var/test」配下にファイルを展開する


以上

ある文字列を、ファイルの行を指定して挿入したい

きっかけ

下記のように、コマンドの実行結果をあるファイルに書き出す「リダイレクト」という方法がある。

 

# echo "Hello!" >> test.txt

 

『>>』だと追記になるんだけど、これだとファイルの末尾に挿入される。

ユーザー追加とかした際に、その情報をファイルに追記するんだけど、どしても間に入れたかったのね。

なのでどうにかして、行を指定して挿入できんもんだろかと考えた。

 

方法

てっきり『>>』に何かオプションでもあるのかと思ってたけど、

そんなものはなく・・・

 

なんと、『sed』コマンドが使えるそう!

 

こんなファイルがあったとする

# cat test.txt

-----------------------------------

PEACH

APPLE

-----------------------------------

 

2行目に挿入したとする

# sed -i -e "2i BANANA" test.txt

  • -i』:上書きモードで実行する
  • -e』:指定したスクリプト(条件式)で変換処理を行う
  • 2』:挿入したい行番号
  • i 文字列』:挿入したい文字列を記載

 

実行結果

# cat test.txt

-----------------------------------

PEACH

BANANA

APPLE

-----------------------------------

 

ちゃんと、ファイルの2行目に挿入された。

なんと素晴らしい!

これは、今後も使えそうです。

 

 

以上、本日の学びでした。

 

 

ファイルを別のサーバにコピーしたい!     役に立つ『scp』 コマンド

きっかけ

開発サーバで作成したシェルスクリプトを本番サーバにコピーしたい。

WinSCPでダウンロードして、アップロードしなおすなんて手間は取りたくないし、以前のように改行コードが入ってたら困る・・・

さて、どうしよう。

 

方法

『scp』コマンドを使えば、サーバ間でファイルのこぴーができるようです。

 

例)サーバAに、コピーしたいファイル(/var/script/test.sh)があり、

  そのファイルをサーバBの『/var/script』配下にコピーするとします。

 

サーバAにログイン後、下記のコマンドを実行

# scp -p /var/script/test.sh root@192.168.10.10:/var/script/

 

詳細

  • -p』は、更新時間・アクセス時間・モードを保持する
  • /var/script/test.sh』は、サーバAにあるコピーしたいファイルを指定
  • root』は、 サーバBに接続する際のユーザー名(別ユーザでも可)
  • 192.168.10.10』は、サーバBのIPアドレス
  • /var/script/』は、サーバBに存在するディレクト

 

注意

サーバBに接続する際のユーザは、SSH接続できることが前提です。

サーバBのコピー先ディレクトリは、事前に作成されてないと失敗します。 

 

 

以上、本日の学びでした!

 

シェルスクリプト なぜかうまく実行できない!? 改行コードにご注意

シェルスクリプトが実行できない

 自分の端末にある、Atomというエディタでスクリプトを書き、

WinSCPを使ってサーバ(Cent OS6.5)にアップロードし、

root ユーザで下記のように実行権限を与えた。

 

# chmod 755 /var/script/test.sh

 

よし、実行だ!・・・ん(・ω・)?

「そんなファイルは存在しません」って怒られた。

 

うーん、権限も付与されてるし、ファイルのコマンドにも間違いはなさそう。 

一体なにが原因なのか分からず、お隣の先輩に見てもらった。

 

 

 原因

先輩:「これ、改行コードが入ってるよ。これ消したらいけるよ。」

クローゼ:「え?そうなんです?どこに入ってるんです?」

 

先輩:「ファイルを開くときに "-b" オプションをつけると見えるよ。」

※"-b"は、ファイルをバイナリモードで開くこと 

 

# vi /var/script/test.sh -b

 

なんと、一行ごとに『^M』が入ってる!!!

なんじゃこれー

 

対処

とにかく、『^M』を消さないと。

けど毎行入ってるので、一つずつ消すのは辛い。

 

そうか、置換すればいいのか!

 

# vi /var/script/test.sh -b

で、ファイルを開いた後に、viのコマンドモードで、

 

:%s/^M//g

 

と入力して [Enter] を押せば、一括で置換してくれました!

 

『^M』の入力方法に注意

これ、文字列じゃないんです。クローゼは間違たwww

コマンドモードで、次のように入力します。

  1. 『Ctrl+V』を押す
  2. 『Ctrl+M』を押す

 

スクリプトは無事に実行されました。

 

 

以上、本日の学びでした。