【Linux】 Windows上ファイルのアクセス ( mount cifs ) サンプルシェルスクリプト ― 2009年02月01日 09:08
メモ : 物忘れがひどく?なった私の覚書です。
☆ Linuxマシン側 設定ポイント
・Windows上のファイルにアクセスする為には samba-client パッケージが必要・・・たぶん (^-^;
インストールされているか、まず確認!
# rpm -aq | grep samba-client
samba-client-3.0.25b-1
インストールされていれば上記のように何か表示される。
もし、このパッケージがインストールされていない場合は、
yumコマンドでインストールする。
# yum install samba-client
・iptables によりパケットの検査が行われたりすると上手く接続できない場合がある。
そんな時は以下のように Windows マシンのIPアドレス・ポート(139,445)を開放する ように設定を行う。
# iptables -A OUTPUT_ALLOW -m state --state NEW -p tcp -d
192.168.1.123 --dport 139 -j OK
# iptables -A OUTPUT_ALLOW -m state --state NEW -p tcp -d
192.168.1.123 --dport 445 -j OK
☆ Windowsマシン側 設定ポイント
Windows側も準備が必要!
ファイルのアクセスを許可するフォルダの共有化と、
Windowsファイアウォールを有効としている場合はLinux側からのアクセスに対して 許可(ポート開放)が必要となる。
・ファイルアクセス対象となるフォルダの共有化設定
Wondowsエクスプローラでフォルダを選択
右クリックメニューの「共有とセキュリティ」を選択
① D:\FILE を共有化する。 ・・・例) D:ドライブのFILEフォルダ
Wondowsエクスプローラでフォルダを選択
右クリックメニューの「共有とセキュリティ」を選択
---<共有タグ>---
「このフォルダを共有する」を選択
※ 共有名(=FILE)等設定値はデフォルト値のまま。
② アクセス許可
---<セキュリティタグ>---
everyone = フルコントロール 設定
※ 任意ユーザ名を作成しアクセスできるようにする方が理想かも
・Windowsファイアウォールの設定
① Windowsファイアウォール = "有効" 設定 ?
もし、"無効" (・・・危ないよ!) となっている場合は②は必要なし
② 「例外」タグの「ファイルとプリンタ共有」をチェック、
さらに【編集】ボタンを押下しの TCP 139 及び TCP 445 をチェックする。
○ シェルスクリプト mount cifs
---<Windowsファイルマウント サンプルシェルスクリプト>----------
#!/bin/bash
SRC_PATH="//192.168.1.123/FILE"
MNT_PATH="/mnt/win"
# マウントポイント作成
if [ ! -d ${MNT_PATH} ]; then
/bin/mkdir -p ${MNT_PATH}
fi
# マウント済チェック
mount_flag=`/bin/mount | /bin/grep "${MNT_PATH}" | /usr/bin/wc -l`
if [ ${mount_flag} -ne 0 ]; then
exit 0
fi
# マウント!
/bin/mount -t cifs -o username=Administrator,password=※) ${SRC_PATH} ${MNT_PATH}
# ※) ユーザ(Administrator)のパスワードを設定 retval=$?
if [ ${retval} -ne 0 ]; then
echo "mount error !"
exit 1
fi
exit 0
これで、ls コマンドを実行してWindows上のファイルが見えるかチェック!
# ls -la /mnt/win
何かファイルが見えたらOK (^-^)v
---<Windowsファイルアンマウント サンプルシェルスクリプト>----------
#!/bin/bash
MNT_PATH="/mnt/win"
# アンマウント済チェック
mount_flag=`/bin/mount | /bin/grep "${MNT_PATH}" | /usr/bin/wc -l`
if [ ${mount_flag} -eq 0 ]; then
exit 0
fi
# アンマウント!
/bin/umount ${MNT_PATH}
retval=$?
if [ ${retval} -ne 0 ]; then
echo "umount error !"
exit 1
fi
exit 0
【Linux】 パラメータ取り込み ( shift ) サンプルシェルスクリプト ― 2009年02月01日 08:56
メモ : 物忘れがひどく?なった私の覚書です。
シェルスクリプトに渡されるパラメータの取得方法(変数)は、
引数1 = $1
引数2 = $2
引数3 = $3
:
と '$' に続く数字がカウントアップされた変数に入っている。
でも、何個パラメータが指定されるか分からないような場合
shift を使用して指定されたパラメータをシフトして
パラメータを順次取り込むことが出来る。
以下に簡単な例を
#!/bin/bash
TEST_FLAG=0
while [ ! -z "$1" ]; do
case $1 in
-a)
TEST_FLAG=1
;;
-b)
TEST_FLAG=2
;;
*)
param=$1
;;
esac
shift;
done
echo ${TEST_FLAG} : ${param}
このシェルをいろんなパターンで起動してみると
# /bin/bash /tmp/test.sh
0 :
# /bin/bash /tmp/test.sh -a
1 :
# /bin/bash /tmp/test.sh -a 123
1 : 123
# /bin/bash /tmp/test.sh -b 123
2 : 123
# /bin/bash /tmp/test.sh 123
0 : 123
# /bin/bash /tmp/test.sh -c
0 : -c
# /bin/bash /tmp/test.sh -a -b 123
2 : 123
# /bin/bash /tmp/test.sh -b -a 123
1 : 123
うん、shift を使えばパラメータ個数、パラメータ指定の順番など任意指定の
対応が簡単に出来そう (^-^)
【Linux】サンプルシェルスクリプト ( while, for ) ― 2009年01月10日 19:41
物忘れがひどく?なった私のメモです。
○ シェルスクリプト While, for文 繰返し
・変数を使用する場合では
#!bin/bash
#---< Sample 1 >-----------------
i=1
while [ ${i} -le 3 ]
do
echo "Count=${i}"
let i=i+1
done
ちょっと変数を定義したり、
変数値をインクリメント(+1)したりするのがちょっと面倒 (^-^;
そこで、seqコマンドを使って
#!bin/bash
#---< Sample 2 >-----------------
for i in `/usr/bin/seq 1 3`
do
echo "Count=${i}"
done
これで、前述のwhile文と同じ・・・
man の結果を拝借すると
seq - 単調増加 (減少) する数値列を表示する
seq [-w] [-f FORMAT] [-s SEP] [--equal-width] [--format=FORMAT]
[--separator=SEP] <LAST | FIRST LAST | FIRST INCR LAST>
seq [--help] [--version]
seq は FIRST から LAST まで、INCR ずつ加えた数値を表示する。
LAST または INCR が省略された場合、デフォルトは 1 になる。
すべての数値は浮動小数点数として解釈される。
オプション
-f FORMAT, --format=FORMAT
printf(3) のフォーマットに FORMAT を用いる。(デフォルト: %g)
-s SEP, --separator=SEP
数値を SEP で区切る。(デフォルト: ‘\n’)
-w, --equal-width
桁数を揃えるために (先頭を) 0 で埋める。
--help 使用法のメッセージを標準出力に表示し、正常終了する。
--version
バージョン情報を標準出力に表示し、正常終了する。
すなわち
/usr/bin/seq 1 3
初期値(1) から 最大値(3)までデフォルト値(1)を加えた結果が返ってくる。
プロンプトから以下のように
実行してみるとすぐ分かる (^-^)
#/usr/bin/seq 1 3
1
2
3
#
【Linux】 サンプルシェルスクリプト ― 2007年10月01日 08:23
物忘れがひどく?なった私のメモです。
○ シェルスクリプト プロセスの停止(kill)
#!/usr/bin/sh
######################################################################
#
# プロセスを停止(kill)シェルスクリプト
#
# 起動されているプロセスを停止(kill)する
#
# proc_kill.sh
#
#
# Ver Date Author Comment
# 0.00 yyyy/mm/dd Name
#
######################################################################
#
### 停止対象プロセス名 ###########################
# 停止したいプロセス情報
PMAX=6 # 停止したいプロセスの個数
PNAME[1]="main_proc" # ※ ps コマンドで表示されるプロセス名を記述
PNAME[2]="sub_proc1" # 停止したいプロセスが親子関係にある場合は
PNAME[3]="sub_proc2" # 親プロセスを先に記述
PNAME[4]="sub_proc3" # たまに、子プロセスが停止すると親プロセスが監視
# していて再起動される場合がある。
PNAME[5]="child_proc1"
PNAME[6]="child_proc2"
#
### シェルスクリプト処理 #########################
i=1
while [ ${i} -le ${PMAX} ]
do
# 停止対象プロセスが存在するかチェック
PEXIST=`/bin/ps -ef | /bin/grep ${PNAME[${i}]} | /bin/grep -v grep | /usr/bin/wc -l`
if [ ${PEXIST} -ne 0 ]; then
# 同プロセス名全て停止(Kill)
for PID in `/bin/ps -ef | /bin/grep ${PNAME[${i}]} | /bin/grep -v grep | /bin/awk '{print $2}'`
do
/bin/kill -9 ${PID} 1> /dev/null 2>&1
done
sleep 1 # 無くても・・・
fi
let i=i+1
done
exit
【Linux】パッケージソフトの確認 ― 2007年10月01日 08:04
物忘れがひどく?なった私のメモです。
○ rpm 《 RPM パッケージマネージャ 》
パッケージの検索と検査、パッケージのインストール・アップグレード・削除
などの機能を持つコマンド
はたして今どんなソフトがインストールされているのか?
rpm コマンドを使用してチェックしてみる。
以下にコマンド実行例を。。。
# rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}.rpm\n' | more
4Suite-1.0-3.x86_64.rpm
Canna-3.7p3-7.EL4.x86_64.rpm
Canna-libs-3.7p3-7.EL4.x86_64.rpm
FreeWnn-1.10pl020-5.x86_64.rpm
: 中略
a2ps-4.13b-41.x86_64.rpm
acl-2.2.23-5.x86_64.rpm
acpid-1.0.3-2.x86_64.rpm
actlog-1.10-2.noarch.rpm
alchemist-1.0.34-1.x86_64.rpm
--続ける-- 【スペース】キーで次頁
【改行(Enter)】キーで1行スクロール
【q】キーで終了
もし、パッケージの名称が一部でもわかっているら grep を
組み合わせてみる。
# rpm -qa --qf '%{name}-%{version}-%{release}.%{arch}.rpm\n' | grep X
%{name}など、どのようなものがあるかというと、;--querytagsオプション
をつけてみると一覧が表示される。
[root@EWSTUDIO01 ~]# rpm --querytags
HEADERIMAGE
HEADERSIGNATURES
HEADERIMMUTABLE
HEADERREGIONS
HEADERI18NTABLE
SIGSIZE
SIGPGP
SIGMD5
PKGID
SIGGPG
PUBKEYS
DSAHEADER
RSAHEADER
SHA1HEADER
HDRID
NAME ← パッケージ名
N
VERSION ← バージョン
V
RELEASE ← リリース
R
EPOCH
: 以下略
これらの文字は小文字指定でもOK
パッケージの詳細?は、%{group} と %{summary} を組み合わせてみると大体何のパッケージかわかるかも
# rpm -aq --qf '%{GROUP}\t%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}.rpm\t%{SUMMARY}\n'
システム環境/ベース hwdata-0.146.22.EL-1.noarch.rpm ハードウェアー識別用データ
システム環境/ライブラリ libgcc-3.4.6-3.i386.rpm GCC バージョン 3.0 共有サポートライブラリ
システム環境/ベース redhat-logos-1.1.26-1.noarch.rpm Red Hat 関連のアイコンとロゴ
: 以下略
この例では、グループ・パッケージ名・内容がタブで区切られているので
この出力内容をカット&ペーストでエクセルのシートに貼り付ければ簡単に
表にすることも