ラベル linux の投稿を表示しています。 すべての投稿を表示
ラベル linux の投稿を表示しています。 すべての投稿を表示

2018年1月9日火曜日

DBバックアップスクリプト

backup_mydb.sh、※「--ignore-table」は一部のテーブルを除外するときに使う

#!/bin/sh
dirpath='/home/admin/mydb_dump/dump'
filename=`date +%Y%m%d`
mysqldump -uDB_USER -pDB_PASSWORD DB_NAME --ignore-table=mydb.table1 --ignore-table=mydb.table2 > $dirpath/mydb_$filename.dump
chmod 700 $dirpath/mydb_$filename.dump
tar cpzvf $dirpath/mydb_$filename.dump.tar.gz $dirpath/mydb_$filename.dump
rm -f $dirpath/mydb_$filename.dump
find $dirpath/mydb_????????.dump.tar.gz -type f -mtime +365 -ls -exec rm -f -- {} \;

実行権限を付けます

chmod +x backup_mydb_db.sh

そしてcron設定、毎月1日零時10分くらいバックアップを取る+一年前のバックアップを削除

crontab -e
10 0 1 * * /home/admin/mydb_dump/backup_mydb.sh

2015年7月16日木曜日

Could not read chunk size: connection was closed by server

subversionでsvn upを打ったら、エラーメッセージが出てきました

Could not read chunk size: connection was closed by server

svnのタイムアウトを長くして解決できた人もいるみたいだけど、自分の場合そもそも
ソースコードのサイズが大きくので、タイムアウトとは考えにくい。

ゆくゆく調べたら、なんかファイルが壊れてる可能性があるらしい、直す方法は「上書き」です


例えばmysourecってリポジトリがあるとし、それが壊れている、リポジトリのURLは例えば「http://192.168.1.2/mysource」。
.
..
mysourec

#mkdir clone → まず一時フォルダを作成
#cd clone
#svn co http://192.168.1.2/mysource mysource → そこで一回同じフォルダ名でcheckout
#\cp -rf mysource ../ → 「\」を使うの理由は、cpが「cp -i」 にaliasされている可能性大きい。これでクローンしたソースで問題があったソースを上書きします。
#cd ../mysource
#svn up → 成功したかを確認
# rm -rf clone → 成功したら、クローンフォルダを削除


以上

2015年3月2日月曜日

違うIPセグメントの間のIP Messager Exchange Serverの作り方、社内のLANチャットツール


・ここからダウンロード
wget http://smart-pda.net/isourou/ipmsg/exchange/package/ipmsgex-0.2.12-perl.tar.gz

・解凍
tar xzvf ipmsgex-0.2.12-perl.tar.gz

・移動(しなくでもいい)
mv ipmsgex-0.2.12-perl /usr/local/
cd /usr/local/ipmsgex-0.2.12-perl/

・権限関係
chmod 755 ipmsgex.pl
chmod 666 Conf.pm
chmod 666 Cron.pm
chmod 600 ipmsgex.conf
chmod -R 666 Ipmsg/
chmod -R 444 readme/

・Perlの場所を確認
which perl
/usr/bin/perl

vi ipmsgex.pl
一行目は状況に応じて変更
#!/usr/bin/perl

・設定
vi ipmsgex.conf
文字コードの関係で文字化けの場合は
vi -c ":e ++enc=euc-jp" ipmsgex.conf

サーバ自分のIP
BindAddr[0] = '192.168.25.108'

仲介したいIPセグメント
BroadCast[0] = '192.168.25.0/255.255.255.0'
BroadCast[1] = '192.168.24.0/255.255.255.0'
BroadCast[2] = '192.168.23.0/255.255.255.0'
BroadCast[3] = '192.168.22.0/255.255.255.0'
BroadCast[4] = '192.168.21.0/255.255.255.0'


・起動スクリプトを作成
vi /etc/init.d/ipmsgexd
-------------------------------------------------------------------
#!/bin/bash

PATH=/bin:/usr/bin:/sbin:/usr/sbin

case "$1" in

start)
echo -n "Starting IP Messager Exchange Server...\n"
cd /usr/local/ipmsgex-0.2.12-perl
perl ipmsgex.pl
;;

*)
echo "Usage: /etc/init.d/ipmsgexd start"
exit 1
;;

esac

exit 0
-------------------------------------------------------------------

・起動に追加
vi /etc/rc.d/rc.local
/etc/init.d/ipmsgexd start


後はクライアント側でサーバを設定する

以上

2014年3月25日火曜日

centosディスク容量Usedが100%になりました!.xsession-errorsが肥大化しているせいだ

まず

# df -h

そして、どのフォルダーが一番容量を食っているかを調べる

# du -h --max-depth 1 /
# du -h --max-depth 1 /root

/root/.xsession-errorsが肥大化していること発見

全部削除して、そして全部「無」につなげてしまえ!

# rm -r ${HOME}/.xsession-errors
# ln -s /dev/null ${HOME}/.xsession-errors

以上、再起動(再起動しないと何故かdfで確認しでも更新されない)

# shutdown -r now

再起動したら、dfで確認したら、usedが100%→39%になりました

2014年2月23日日曜日

正規表現のパターンにヒットするファイルをmv

結論から

普通の正規表現
先頭不一致は「^」と「?!」で行けるはずが、egrepはなぜか癖がある?
例えば「先頭DELが付いていない」の正規表現は'^(?!DEL).*'ですが、egrepだと
'^[^(!DEL)].*'になります。

ls /home/from/ | egrep '^[^(DEL)][0-9]{6}.*(US)$' | xargs -I{} mv {} /home/to/

意味は"/home/from"の下のファイルやフォルダを対象に、先頭が"DEL"以外、数字6桁の次に
任意の長さの文字列が続き、最後"US"で終わるモノを全て"/home/to"に移動する

勉強:
ファイル名のみ縦表示する
#ls -1

すごくお世話になった正規表現チェッカー
http://regexpal.com/

egrepで先頭不一致(パターン)の正規表現
サンプルでは先頭が"DEL"以外すべてヒットする書き方
egrep '^[^(DEL)].*'
egrep
構文
egrep [オプション] [正規表現パターン] ファイル名

-i 検索する際、大文字小文字を区別しない
-n マッチした行の行番号も表示する。
-c マッチした行数を出力する。
-v マッチしない行を出力する。
-[数値] マッチした行の前後[数値]行も出力する。
-A [数値] マッチした行の後[数値]行も出力する。
-B [数値] マッチした行の前[数値]行も出力する。

以下正規表現
※「」は正規表現ではなく、パターン文字列を囲む記号です。
「.」→ 任意の一文字
「*」→ 0回以上の繰り返し

「.*」→ 任意文字列、空文字列もOK

「^」→ 行頭マッチ
「$」→ 行末マッチ

「^#.*t$」→ #から始め、tで終わる任意の長さの文字列
"#this is a comment" → ◯
"#this is a title" → ×
"this is not a comment" → ×

「[ABC]」→ A,B,Cのいずれか
「[A-Z]」→ A~Zの範囲いずれか

^[A~Za-z0-9]*$ → 文字列がすべて大文字と小文字と数字のモノがヒット
「\w」→ 英数字
「\W」→ 英数字以外
「\d」→ 数字
「\D」→ 数字以外
「\s」→ スペース
「\S」→ スペース以外

ですから
「^[A~Za-z0-9]*$」 と 「\w*$」 は同じ効果

"abcdefg1234" → ◯
"abc defg1234" → ×

「(abc)」→ "ABC"というフレーズがヒットする
「[^(ABC)]」→ "ABC"フレーズを含まない
「[^ABC]」→ ABCいずれでもない
「[^A-Z]」→ A~Zの範囲いずれでもない

"^(DEL).*" → 先頭が"DEL"なっている文字列
"^(?!DEL).*" → 先頭が"DEL"なっていない文字列

「{n}」→ n回の繰り返し

「^\d{8}.*」→ 8桁数字から始める文字列すべて
"20140102ABCDEFG123" → ◯


「{n},」→ n回以上の繰り返し
「{n,m}」→ n回以上m回以下の繰り返し
「p1|p2」→ 正規表現p1かp2のいずれか

「^(FR|CN).*(US)$」→ "FR"または"CN"で始め、"US"で終わる全ての文字列

2013年5月24日金曜日

svnサーバリポジトリURL変更時、コマンドラインでsvn switch relocateの例


旧URL:http://svn.myproj.com
新URL:https://svn.myproj.com

まずはinfoを見てみる
svn info

そしてURLを変更
svn switch --relocate --username kagen88 http://svn.myproj.com https://svn.myproj.com
passwordをいれて完了

確認
svn info
svn up

2013年5月14日火曜日

2012年12月14日金曜日

linuxのzipコマンドで特定フォルダーとファイルを除外する

特定フォルダーヤファイルを除外して圧縮するzipコマンドの例です。

zip -r what_ever_you_want.zip ./target_dir/ -x ./target_dir/dont_zip_me_dir\* '*.svn*' '*.tmp'

dont_zip_me_dirフォルダーとSVN関係フォルダーと'*.tmp'を除外したtarget_dirまるごとを圧縮する例です。


解凍先のディレクトリを指定する場合は

unzip what_ever_you_want.zip -d target_dir

2012年10月22日月曜日

2012年6月28日木曜日

crontabの設定

crontabの設定


>crontab -e
* * * * * 実行コマンド
- - - - -
| | | | |
| | | | +----- 曜日 (0 - 6) 日曜日は0
| | | +------- 月 (1 - 12)
| | +--------- 日 (1 - 31)
| +----------- 時間 (0 - 23)
+------------- 分 (0 - 59)



書き方 効果
43 23 * * * 23:43に実行
12 05 * * * 05:12に実行
0 17 * * * 17:00に実行
0 17 * * 1 毎週月曜の 17:00に実行
0,10 17 * * 0,2,3 毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * * 毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1 毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * * 毎月 1日の 4:42分に実行
0 21 * * 1-6 月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * * 10分おきに実行
*/10 * * * * 10分おきに実行
* 1 * * * 1:00から 1:59まで 1分おきに実行
0 1 * * * 1:00に実行
0 */1 * * * 毎時 0分に 1時間おきに実行
0 * * * * 毎時 0分に 1時間おきに実行
2 8-20/3 * * * 8:02,11:02,14:02,17:02,20:02に実行
30 5 1,15 * * 1日と 15日の 5:30に実行

2012年6月19日火曜日

centos 5.8(64bit) net install

centos 5.8(64bit) net install
first download net_install iso from
http://mirror.averse.net/centos/5.8/isos/x86_64/CentOS-5.8-x86_64-netinstall.iso

then install:
install method: http
web site:mirror.averse.net
centos path:/centos/5.8/os/x86_64/

2012年3月8日木曜日

なぜ"-f"(--force)オプションが効かないだろう

普通にCPコマンドを叩いたら

$ cp -rf from/dir_a to/
cp: `........................' を上書きしてもよろしいですか(yes/no)?

あれ、forceオプション追加したじゃないですか、なぜいちいち聞くの?と思ったらaliasで見たら

$ alias
alias cp='cp -i'
alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias mv='mv -i'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'

"-i"か!なるほど。ちなみに解決は

$ unalias cp
または
$ \cp -rf from/dir_a to/

2012年2月2日木曜日

ディレクトリのサイズを調べるコマンド、便利

ディレクトリのサイズを調べるコマンド、便利

# du -hx --max-depth=1 path
155M ./fcft
127M ./sd
218M ./gred
13M ./sdefv
697M ./repos
536K ./sdsds
5.5M ./brre
411M ./gtte
4.0G .

こんな感じ

2011年8月28日日曜日

plalaのOP25B対策、sendmail編

plalaのOP25B対策、sendmail編,centos
# vi /etc/mail/sendmail.mc
dnl define(`SMART_HOST', `smtp.your.provider')dnl ←この行のしたに
define(`SMART_HOST', `esmtp:[timmy.mail.plala.or.jp]')dnl
↑「timmy」の部分は個人差がある、契約書で確認
define(`ESMTP_MAILER_ARGS',`TCP $h 587')←追加
FEATURE(authinfo, DATABASE_MAP_TYPE` -o 'MAIL_SETTINGS_DIR`authinfo')←追加
↑上記三行を追加、:wqで保存
# yum -y install sendmail-cf
# m4 /usr/share/sendmail-cf/m4/cf.m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
# telnet timmy.mail.plala.or.jp 587
Trying 58.93.xxx.xx...
Connected to timmy.mail.plala.or.jp (58.93.xxx.xx).
Escape character is '^]'.
220 msa0Xx.plala.or.jp ESMTP server ready Fri, 12 Aug 2011 23:16:05 +0900

ehlo localhost ←情報を出力
250-msa0Xx.plala.or.jp
250-AUTH=LOGIN PLAIN CRAM-MD5 ←認証方法
250-AUTH LOGIN PLAIN CRAM-MD5
250-PIPELINING
250-DSN
250-8BITMIME
250 SIZE 20971520
quit ←一旦出る
221 msa0Xx.plala.or.jp ESMTP server closing connection
# echo AuthInfo:timmy.mail.plala.or.jp \"U:ユーザ名\" \"P:パスワード\" \"M:認証方法\" > /etc/mail/authinfo
※ここの「LOGIN PLAIN CRAM-MD5」は先情報出力時の認証方法
※アカウント名とパスワードは契約書で確認、アカウント名は「@」前の部分

# chmod 640 /etc/mail/authinfo
# makemap hash /etc/mail/authinfo.db < /etc/mail/authinfo # chgrp smmsp /etc/mail/authinfo.db # /etc/rc.d/init.d/sendmail reload sendmail を再読み込み中: [ OK ]
sm-client を再読み込み中: [ OK ]

2011年6月23日木曜日

shellのいろいろ基礎

常識かもしれないが、知らないと大変

変数とコマンド

#!/bin/bash
#変数に値を入れるとき=の前後スペースあってはならない
NAME="jacky"

#変数に値を入れるとき、$はいらない、変数を参照するときは$をつく
echo $NAME

#こういう書き方もあり
echo ${NAME}

#コマンドを使うときは`command`、または$(command)
echo `date "+%Y/%m/%d %H:%M:%S"` hello! $NAME


配列

#配列の一括定義
TODO=( lunch work milk walk )

#配列の個別定義
TODO[4]=5

#配列要素のfor..in..do
echo ${TODO[@]}
for o in ${TODO[@]}
do
echo $o
done


if文、case文、比較

#文字列の比較には、=の前後スペース無くてはならない
#また""を付けた方がいいです。unary operator expectedというエラーがでるので
if [ "${TODO[1]}" = "work" ]; then
echo "have to work"
elif [ "${TODO[1]}" = "play" ]; then
echo "can go play"
else
echo "have a rest"
fi

#数値の比較は=ではない
if [ ${TODO[4]} -gt 3 ]; then
echo "5 is greater then 3"
else
echo "unpossible"
fi

#ORなど論理計算
if [ "a" = "b" -o 1 -lt 2 ];
then
echo "ok"
else
echo "ng"
fi

#case文、第一引数
case $1 in
"help")
echo "help me!"
;;
"bye")
echo "byebye!"
;;
"")
echo "enter something!"
;;
*)
echo "anything else"
;;
esac


SQL実行

MYSQL_USER="user"
MYSQL_PASS="pass"
MYSQL_DB="test"
MYSQL_HOST="localhost"

#select * from...にすると、*がカレントディレクトリのファイル名になってしまうのでご注意
RUNME="select id,name from funds limit 10"
echo $RUNME|mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB


実行後結果

# ./test.sh help
jacky
jacky
2011/06/23 10:59:48 hello! jacky
lunch work milk walk 5
lunch
work
milk
walk
5
have to work
5 is greater then 3
ok
help me!
id name
1 ?????????
2 ?????????
3 ?????????
4 ?????????
5 ?????????
6 ?????????
7 ?????????
8 ?????????
9 ?????????
10 ?????????

2011年2月23日水曜日

mysqlインストール

Linux

# yum -y install mysql mysql-devel mysql-server
...
# /sbin/chkconfig mysqld on
# /sbin/chkconfig --list

2011年2月3日木曜日

viで文字化けの時

下記のviのコマンドが役に立てます

現在の設定を確認

#文字コードの確認
:set enc?

#開いているファイルエンコードの確認
:set fenc?

#自動判別の設定確認
:set fencs?


文字コードを指定してファイルを開き直す

#EUC
:e ++enc=euc-jp

#UTF8
:e ++enc=utf8

#SJIS
:e ++enc=sjis

日本語の文字化けは大抵これで解消できると思うが、
それでもダメなら、OSのencodeとteratermの受送信encodeを調整してみよう。

2011年2月2日水曜日

lsコマンドに年を表示


# ls --time-style=long-iso -l
合計 285664
-rwxr-xr-x 1 release sortial 182 2010-10-18 13:33 dump_prod.sh
-rw-r--r-- 1 release sortial 249508962 2011-02-02 04:20 production.dump
-rw-r--r-- 1 release sortial 42704075 2010-10-18 13:32 production.dump.gz

2010年12月29日水曜日

ユーザにsudo権限を付与する

サーバクリティカルなので、何でもかんでもrootでログインして弄るのは危険なこと、なのでちゃんとroot以外のuserを作って、ログインしましょう。しかし、rootしかできない操作はよくあるので、いちいちs「su -」コマンドでrootに切り替えるのはめんどくさいです。そこでsudoが役に立つ。

事前に、sudoが使えるユーザを/etc/sudoersに登録しなければならない
このファイルはデフォルト読み込み専用になっているので、変更をするなら

/etc/sudoersの所有者でログインしている前提

chmod u=rwx /etc/sudoers
vi /etc/sudoers

これをsudoersの最後に追加

kagen ALL=(ALL) ALL

念のため、sudoersを読み込み専用に戻そう

chmod 440 /etc/sudoers

こうするとrootとしてコマンドを実行できるようになる

sudo コマンド
パスワード:

最初はパスワード聞かれるが、自分のパスワードを入れてOK
パスワード聞かれない方法もあるが、推奨はしない

chmodコマンド

r = 4 読み出し可
w = 2 書き込み可
x = 1 実行可能(ディレクトリの場合、これがないと入れない)


このファイル(またはディレクトリ)のアクセス権限を設定するコマンドchmod

chmod 754 /path/file


ここの「754」という3桁数字の意味は:
第1桁: このファイル(またはディレクトリ)の所有者に対して
第2桁: 所有者のいるグループの他のユーザに対して
第3桁: その他ユーザ
(※ちなみにrootは何でも出来るよ!)

なので「754」は
1.所有者に対して:
7 = (4 + 2 + 1) = 読み出し可 + 書き込み可 + 実行可能(すべて可能)

2.所有者いるグループの他のユーザに対して:
5 = (4 + 1) = 読み出し可 + 実行可能

3.その他のユーザに対して:
4 = 実行のみ可能

下記2つコマンドは等価です:

chmod 750 /path/file
chmod u=rwx,g=rx,o= /path/file

u = 所有者
g = 所有者のいるグループの他のユーザ
o = その他ユーザ

他にも色々設定方法があるが、これが覚え安いので…
chmod --helpを参考してください