2016年05月17日

chown/chgrpを一発同時変更!(ディレクトリ階層にも対応)

chown/chgrpを一発同時変更!(ディレクトリ階層にも対応)


ディレクトリの階層を一発で作成する。
# mkdir -p test_1/test_2

階層ディレクトリの所有者、グループを一発で同時変更する
# chown -R apache:staff test_1

階層ディレクトリの権限を一発で同時変更する
# chmod -R 775 test_1

階層ディレクトリの所有者、グループを一発で確認する
# ls -Rl
合計 4
drwxrwxr-x 3 apache staff 4096 5月 17 14:03 test_1/

./pscom_event:
合計 4
drwxrwxr-x 2 apache staff 4096 5月 17 14:03 test_2/

./test_1/test_2:
合計 0  

Posted by kumagai_nori at 14:25Comments(0)TrackBack(0)clip!

2015年06月30日

プロセス指定したメモリ監視シェル サンプルプログラム

プロセス指定したメモリ監視シェル サンプルプログラム

指定したプロセスのメモリ使用量を1秒ごとに表示します。

#!/bin/sh
PROSESS_NAME=httpd
while [ 1 ]
do
ps aux | grep $PROSESS_NAME | grep -v grep |
awk '
BEGIN{ vsz=0;rss=0 } { vsz+=$5;rss+=$6 }
END{ print strftime("%Y/%m/%d %H:%M:%S",systime()) , "RSS="rss ,"KByte" , "VSZ="vsz ,"Kbyte";}'
sleep 1
done

  
Posted by kumagai_nori at 01:02Comments(0)TrackBack(0)clip!

2014年01月15日

RedHat Linux Sambaのパスワード設定

RedHat Linux Sambaのパスワード設定

rootでログインをして、
$pdbedit -a -u user1

確認は、
$pdbedit -L

パスワードは、バイナリファイルで保存される
/var/lib/samba/private/passdb.tdb

  
Posted by kumagai_nori at 20:38Comments(0)TrackBack(0)clip!

2013年11月19日

Kシェル プロセス排他制御プログラムサンプル

Kシェル プロセス排他制御プログラムサンプル

#!/bin/ksh
PS_RESULT=`ps -ef | grep "test.php" | grep -v "grep" | wc -l`

if (( $PS_RESULT > 0 )); then
echo "プロセスが起動中";
else
/usr/local/bin/test.php >/dev/null 2>&1
fi

コマンドは、以下の順で、コマンドラインで試してみると、
意味が理解できます。
ps -ef | grep "http"
ps -ef | grep "http" | grep -v "grep"
ps -ef | grep "http" | grep -v "grep" | wc -l

  
Posted by kumagai_nori at 16:09Comments(0)TrackBack(0)clip!

2013年09月30日

cron設定 週次(週1回)起動

クーロン(cron)設定 週次(週1回)起動

週1回日曜日の1時23分にクローン起動を設定する。
23 01 * * 0 start.sh
※5番目に0(日曜日)を指定する。

週1回月曜日の1時23分にクローン起動を設定する。
23 01 * * 1 start.sh
※5番目に1(月曜日)を指定する。

月曜日から金曜日のの1時23分にクローン起動を設定する。
23 01 * * 1-5 start.sh

cronを編集するコマンド
# crontab -e
vi編集をして、[:wq]でセーブ、クローズ。




  
Posted by kumagai_nori at 19:05Comments(0)TrackBack(0)clip!

2013年02月25日

ターミナルで、[1] + Stoppedが表示され、viが落ちた場合の対処

ターミナルで、[1] + Stoppedが表示され、viが落ちた場合

viを操作していたら、突然、以下のような表示がでて、viが落ちる現象がありますが、
**************************************************
#
vi test.txt
[1] + Stopped vi test.txt
**************************************************

これは、間違えて、
ctrl+z または、
ctrl+qを押してしまっているからです。

ctrl+z は、バックグラウンド処理にするときに使います。
実行ファイルを起動して、時間が掛かるときに、ctrl+zで、
バックグラウンド処理にして、ターミナルを切替ます。

フォアグランドに戻したいときは、
# fg
です。
これで、編集中のviがフォアグランドに戻ってきます。

もし、fgをしなくても、
OSによっては、スワップ(.swp)ファイルが残っていれば、
vi test.txt
で、編集中のviが復帰することもあります。

ちなみに、実行中にバックグラウンド処理にした場合でも、
ターミナルを落とすと、バックグランド処理も停止します。
ターミナルを落としたいときは、はじめから「nohup」コマンドを使って起動します。
  
Posted by kumagai_nori at 18:24Comments(0)TrackBack(0)clip!

2013年01月21日

tar: .: 読み込んだファイルが変更されています

tar: .: 読み込んだファイルが変更されています

tar -cvf ./test.tar ./
としていませんか?

つまり、
カレントディレクトリをtarにアーカイブしようとして、
そのカレントディレクトリに、test.tarがあるので、
「読み込もうとしているファイルが、誰かに更新されている」
と言っています。

たとえば、
tar -cvf ../test.tar ./
で試すと、うまくいきませんか?





  
Posted by kumagai_nori at 21:06Comments(0)TrackBack(0)clip!

2013年01月18日

シンボリックリンク コマンド ln -s

シンボリックリンク コマンド ln -s

ln -s (実体フォルダ) (リンクフォルダ)

ln -s /data/real_dir ./link_dir

※先にリンクフォルダを作成しておく必要はありません。

<確認>
ls -l
lrwxrwxrwx 1 user group 4 1月 18 15:40 2013 link_dir -> /data/real_dir

<シンボリックリンクの解除>
rm ./link_dir
※リンクフォルダを削除する。(実体は残ります。)

シンボリックリンクかハードリンクか?
基本的には、ディレクトリのハードリンクは使用しない。(できない)
できたとしても、循環ディレクトリが出来たり、慎重な管理が必要になります。
ファイルのハードリンクも慎重な管理が必要です。

  
Posted by kumagai_nori at 15:46Comments(0)TrackBack(0)clip!

2012年04月12日

historyコマンドの設定 HISTFILE HISTSIZE SAVEHIST

historyコマンドの設定 HISTFILE HISTSIZE SAVEHIST

同一ユーザIDを複数ユーザで共有する場合にhistoryが使えなくなります。
そこで、アクセスするクライアントPC毎に、historyを分ける設定をします。
HISTFILE=/tmp/${REMOTEHOST}.history ; export HISTFILE
※デフォルトだと、~/.sh_history

historyの保存コマンド数
HISTSIZE=10000

ターミナルを閉じた際の保存コマンド数
SAVEHIST=10000

[history]コマンドでは、表示コマンド数が10件なので、
[fc -l -20]で、件数を増やしたいので、エイリアスを設定。
alias 'hi=fc -l -20'

.profile
***********************************
HISTFILE=/tmp/${REMOTEHOST}.history ; export HISTFILE
HISTSIZE=10000
SAVEHIST=10000

alias 'hi=fc -l -20'
***********************************


<環境>
RHEL6.2
k-shell  
Posted by kumagai_nori at 18:24Comments(0)TrackBack(0)clip!

2011年11月16日

drwxrwsrwt ディレクトリパーミッション スティッキービット

drwxrwsrwt ディレクトリパーミッション スティッキービット

スティッキービットとは、ディレクトリ権限で、最後の「t」のことを指します。

スティッキービットがセットされるとディレクトリ配下のファイルのファイル名変更や削除はそのファイルの所有者、ディレクトリの所有者、スーパーユーザーのいずれかしかできなくなります。

解除するには、
chmod -t (directory-name)

設定するには、
chmod +t (directory-name)

参考)
ウィキペディア スティッキービット

  
Posted by kumagai_nori at 12:54Comments(0)TrackBack(0)clip!

2011年06月09日

PHP execとsystemの違い サンプルプログラム(PHPマニュアル)

PHP execとsystemの違い サンプルプログラム(PHPマニュアル)

まず、仕様は、マニュアルを読んでください。
exec
system

<サンプルプログラム例1>検証:正常例
■プログラム
$cmd = "ls -l";
echo "cmd[$cmd]\n";
print "******exec********\n";
exec( $cmd, $output, $return_code );
print_r( $output );
print "return_code[$return_code]\n\n";

print "******system********\n";
system( $cmd, $return_code );
print "return_code[$return_code]\n";

■実行結果
******exec********
Array
(
[0] => 合計 0
[1] => -rw-r--r-- 1 devuser devgroup 0 2011-06-09 17:14 test1
[2] => -rw-r--r-- 1 devuser devgroup 0 2011-06-09 17:14 test2
)
return_code[0]

******system********
合計 0
-rw-r--r-- 1 devuser devgroup 0 2011-06-09 17:14 test1
-rw-r--r-- 1 devuser devgroup 0 2011-06-09 17:14 test2
return_code[0]

■ポイント
 execの場合、標準出力を配列に格納する。(標準出力は表示されない。)
 systemの場合、標準出力がそのまま表示されている。


<サンプルプログラム例2>検証:異常例
■プログラム
//lsの不正オプションを指定、標準エラーをキャッチする
$cmd = "ls -z 2>&1";
echo "cmd[$cmd]\n";
print "******exec********\n";
exec( $cmd, $output, $return_code );
print_r( $output );
print "return_code[$return_code]\n\n";

print "******system********\n";
system( $cmd, $return_code );
print "return_code[$return_code]\n";

■実行結果
******exec********
Array
(
[0] => ls: オプションが違います -- z
[1] => 詳しくは `ls --help' を実行して下さい.
)
return_code[1]

******system********
ls: オプションが違います -- z
詳しくは `ls --help' を実行して下さい.
return_code[1]

■ポイント
2>&1で、標準エラーもキャッチすれば、標準エラーも配列に格納する。
2>&1を指定しない場合は、標準エラーは、配列に格納されず、画面出力される。


検証の結果、発行するコマンドや処理によって、使い分けが必要になると思います。
たとえば、tarコマンドを発行して、配列に結果を格納してしまったら、かなりのメモリを消費してしまうので、systemコマンドにしたり、lsの結果を使って処理が必要な場合は、execコマンドを使用することになります。

コマンドを発行して、成功か失敗かだけを知りたい場合は、systemを使用します。

<正式プログラム>
$cmd = "ls -l 2>&1";
print "******exec********\n";
exec( $cmd, $output2, $return_code );
if( $return_code != 0 ){
print "ERROR:コマンドエラー[$cmd]\n";
foreach($output2 as $val){
print "ERROR:$val\n";
}
exit;
}
foreach($output2 as $val){
print "OUTPUT:$val\n";
}


$cmd = "ls -l";
if( $return_code != 0 ){
print "ERROR:コマンドエラー[$cmd]\n";
exit;
}

※コマンドの生のエラーメッセージは、ログ出力できませんが、エラーになった$cmdを出力して、ターミナルで、叩いてみるといいと思います。

※systemもexecも復帰値は、微妙すぎて使いません。


  
Posted by kumagai_nori at 19:11Comments(0)TrackBack(0)clip!

2010年12月21日

ls/grep/find xargs パラメータ・リストが長すぎます。の対応方法


ls/grep/find xargs パラメータ・リストが長すぎます。の対応方法

***********************************************
$ grep "searchword" ./test/*.txt
ksh: /usr/bin/grep: 0403-027 パラメータ・リストが長すぎます。
***********************************************
こんなエラーがでたら、

***********************************************
$ ls ./test/*.txt | xargs grep "searchword"
***********************************************
これで、結果が得られます。

ディレクトリ構成
./test/001.txt
/002.txt
/003.txt


<解説>
たとえば、xargs を書かなかった場合
***********************************************
$ ls ./test/*.txt | grep "searchword"
***********************************************
これの結果は、
testディレクトリ以下にあるファイルのファイル名に、
"searchword"が含まれていないか?という意味になります。

***************
./test/001.txt
/002.txt
/003.txt
***************
こうゆうテキストファイルをgrepしている感じです。

そして、xargs を書いた場合
***********************************************
$ ls ./test/*.txt | xargs grep "searchword"
***********************************************

xargsは、ls結果をgrepに渡していくので、

$grep "searchword" ./test/001.txt
$grep "searchword" ./test/002.txt
$grep "searchword" ./test/003.txt

を一度にやってもらえます。

lsも同様なエラーメッセージを出力する場合もあります。
***********************************************
$ ls /*/*/*
ksh: /usr/bin/ls: 0403-027 パラメータ・リストが長すぎます。
***********************************************

そんなときは、echoに変えます。
***********************************************
$ echo /*/*/*
***********************************************
***********************************************
$ echo ./test/*.txt | xargs grep "searchword"
***********************************************


findコマンドで、xargsは、利用できます。

AIXで動作確認しています。



  
Posted by kumagai_nori at 17:26Comments(0)TrackBack(0)clip!

2010年12月09日

viの基礎基本 入門としてこれだけは覚えてほしい

viの基礎基本 入門としてこれだけは覚えてほしい
i カーソル位置から入力する insert
a カーソル位置の次から入力する
o カーソル行から改行して入力する
[esc] コマンドモードへ戻す
x 一文字づつ削除する
(→)右に移動
h (←)左に移動
k (↑)上に移動
(↓)下に移動
w 次のワードへの先頭文字に移動 word
0 行の先頭文字へ移動 0文字目
[shift]4 ($) 行の最後尾文字へ移動 $は、最後というイメージを持つといろいろ使える
[ctrl]f 下スクロール forward
[ctrl]b 上スクロール backward
[shift]g (G) 最後の行へ移動
:1 最初の行へ移動(1行目に移動) :(数値)で数値行目に移動する
yy 行をコピーする
dd 行を切り取る
p コピー、切り取ったものをペーストする
/(検索文字) 検索文字でファイル内を検索する
n 次を検索する
[shift]u (U) やり直し undo
[shift]j (J) 行の連結
:q ファイルを閉じる
:w ファイルをセーブする
:e ファイルを編集前に戻す
:q! 強制的に、ファイルを閉じる
:w! 強制的に、ファイルをセーブする view でファイルオープンして、:w!でセーブする習慣を付けてほしい。
:e! 強制的に、ファイルを編集前に戻す
:!(Linuxコマンド) Linuxコマンドを実行する :!ls や :!pwd を試してください。
. 前にやったコマンドを繰り替えす yy p の後に、「.」を連打してみてください。yypを繰り返します
r 一文字だけ書き換える
cw ワードを書き換える (応用)cw[esc]でワードを消す
c$ カーソル位置から最後の文字までを書き換える (応用)c$[esc]で行のカーソル以降を消す
[ctrl]g  ファイル名を見る編集中にファイル名を確認したくなることがあるのは自分だけでしょうか?
:w (ファイル名) 別ファイル名で保存編集中に別ファイル名で保存したくなるのは自分だけでしょうか?
<置換>
:1,$s/(検索文字)/(置換文字)
:1,$s/(検索文字)/(置換文字)/g
gを付けると、ファイル全体を置換してくれます。
gを付けないと、各行も先頭から1個だけ置換です。

1行目から最後の行まで、置換をしてくれというコマンドです。
$部分を数値にすると、数値の行までを置換してくれます。

変数名をリファクタリングするときに、よく使います。


VIの基礎基本のサイトを調べてみて、
ちょっとマニアックなVIコマンドが混ざっていたりして、
自分がよく使うやつだけを集めてみました。
  
Posted by kumagai_nori at 22:10Comments(0)TrackBack(0)clip!

2010年05月27日

rmコマンドで"*"は、絶対に使わないで!!

rmコマンドで"*"は、絶対に使わないで!!

カレントディレクトリのファイルを消すつもりが、
rm /*
冷や汗でますね。
rm ./*
が正解ですが、"*"は、使用しないでください。

複数のファイルを一度に消したいときは、
Shellを作成して消すようにしてください。

対象ディレクトリまで、移動して、
ls -1
を指定すると、ファイルが1列に並びます。

それをテキストにコピーして、
#!/bin/ksh
rm -f fail1
rm -f fail2
rm -f fail3
のようなShellを作成して消してください。

Shellのファイル名は、「rm.sh」のようにせずに、
「delete_files.sh」にしてください。

「rm」怖いコマンドですね。
できる限り、rootで「rm」コマンドをたたかないとかの
注意もしたほうがいいですね。

スクリプトを書くときも[*]を避けるロジックを考えたほうがいいですね。
$pass =""
$path = "/test/";
system( 'rm $pass/*' );
↑恐ろしいバグです。

眺めるだけで冷や汗でますね。
  
Posted by kumagai_nori at 17:10Comments(0)TrackBack(0)clip!

tarコマンドでまとめる際の注意点(linux/AIX)

tarコマンドでまとめる際の注意点

tarコマンドでまとめるときは、対象のディレクトリへ移動して、相対パスでまとめること。

cd (対象ディレクトリ)
tar -cvf directory.tar ./directory
※"./"を付けるのがポイント

フルパスでまとめた場合、不注意で展開した場合は、フルパスで展開されてしまう。

展開する際に、データ的な差分を見るために、テストディレクトリに解凍しようとしたら、実際のデータを上書きで解凍しまうというミスがないように。

tarファイルが相対パスか、フルパスかをチェックするには、
tar -tvf directory.tar

フルパスで、まとめられていた場合、以下のサイトで確認。
http://x68000.q-e-d.net/~68user/unix/pickup?tar

特に、他人がtarファイルを展開する可能性があるときは、注意しましょう。

軽い気持ちで展開してみたら、目の前で本番環境を上書きされてる状況がモニターに映し出され、冷や汗かいて、あわてて強制終了してしまい。中途半端に、データが上書きされていた・・・
なんて、辛い経験は、したくないですよね。


  
Posted by kumagai_nori at 16:39Comments(0)TrackBack(0)clip!