ディレクトリごと、別のサーバに送って展開したい
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
-----------------------------------
-----------------------------------
2行目に挿入したとする
# sed -i -e "2i BANANA" test.txt
- 『-i』:上書きモードで実行する
- 『-e』:指定したスクリプト(条件式)で変換処理を行う
- 『2』:挿入したい行番号
- 『i 文字列』:挿入したい文字列を記載
実行結果
# cat test.txt
-----------------------------------
BANANA
-----------------------------------
ちゃんと、ファイルの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
コマンドモードで、次のように入力します。
- 『Ctrl+V』を押す
- 『Ctrl+M』を押す
スクリプトは無事に実行されました。
以上、本日の学びでした。