SSブログ

Linux bashでファイルの同期 [Linux]


 久しぶりにLinuxを触ったので、bashの勉強方々ファイルの同期スクリプトを作成してみた。
subdir内のfile検索のための再帰処理、fileの更新日比較のためのfile名の連想配列、file名操作のための前方一致での削除(最短マッチ)等、bashについて勉強になった。

#!/bin/bash
# file同期スクリプト
# 更新元dir: dr_s
# 更新先dir: dr_d

dr_s="/vv/ww/"
dr_d="/xx/yy"
declare -A s_array
declare -A d_array
s_dir="s"
d_dir="d"

#dir内のfileを再帰的に検索して連想配列に格納する関数
# x_array[file name] = "D" or 更新日時のUTC秒
#
walk(){
  for e in $1/*; do
    path=$e
    if [ -d "$path" ]; then
      #echo "D:$path"
      if [ $2 = $s_dir ]; then
        s_array[$path]="D"
      else
        d_array[$path]="D"
      fi
      walk $path $2
    elif [ -f "$path" ]; then
      e_date=`date +%s -r $path`
      if [ $2 = $s_dir ]; then
        s_array[$path]=$e_date
      else
        d_array[$path]=$e_date
      fi
      #echo "  f:"${path##*/}","$e_date
    fi
  done
}
echo "同期開始"
echo "  更新元 $dr_s"
echo "  更新先 $dr_d"

walk $dr_s $s_dir  #更新元のdir/fileを配列に格納
walk $dr_d $d_dir  #更新先のdir/fileを配列に格納

echo "dir更新"
for key in ${!s_array[@]};do
#  echo "${key} => [${s_array[$key]}]"
  if [ ${s_array[$key]} = "D" ]; then
    str_fname=$dr_d${key#$dr_s}
    if [ ! -e $str_fname ]; then
      echo "  Dir $str_fname not exist"
      mkdir $str_fname
    fi
  fi
done

echo "file更新"
for key in ${!s_array[@]};do
  if [ ${s_array[$key]} != "D" ]; then
    str_fname=$dr_d${key#$dr_s}
    if [ ! -e $str_fname ]; then
      echo "  file $str_fname not exist"
      cp $key $str_fname
    else
      if [ ${s_array[$key]} -gt ${d_array[$str_fname]} ]; then
        echo "  file $key is new!!"
        cp $key -f $str_fname
      fi
    fi
  fi
done
echo "同期完了"

cronにbashスクリプト登録 [Linux]

 毎日の定時バックアップ処理をbashで作成したのでcron登録した。年のせいもあるが、linuxは余り触らないので直ぐに忘れるため忘れた時のための備忘録。
cron登録はcrontab -eで直接登録する方法があるが、一番簡単な/etc/cron.d/にファイルを置く方法を選んだ。

毎日22時にmysql_backup.shを起動
# min hour day mth wday user command
0 22 * * * root /var/www/html/mysql_backup.sh > /dev/null 2>&1

cron登録
/etc/cron.d/ に上記ファイルを適当な名前で書き込む

cronの状態表示
$ sudo /etc/init.d/cron status

log確認
 /var/log/syslog

MySQLバックアップの世代管理(bash) [Linux]


UbuntuのMySQL DBのバックアップを世代管理してみたときの備忘録。
# DB名、ユーザー/パスワード定義定義
db_name="xxxx"
user_mysql="yyyy"
password_mysql="zzzz"

# バックアップ先定義
backup_dir="/tmp/backup_xxxx/"

## タイムスタンプ(書式:YYYYMMDD_HHMISS)
timestamp=`date +%Y%m%d_%H%M%S`

# バックアップファイル名定義(db_name_backup_timestamp.sql)
str="_backup_"
backup_db_file=$backup_dir$db_name$str$timestamp.sql

# バックアップ実行
mysqldump -u$user_mysql -p$password_mysql $db_name > $backup_db_file

# 7世代分より古いバックアップファイルを削除
DAYAGO="6"
ref_day=`date -d "${DAYAGO} day ago" +%Y%m%d`

ls $backup_dir|while read list
do 
  if [[ $list=_[0-9]{8}_ ]];then
    #ファイル名から日付(%Y%m%d)を抜き出し
    chk_day=`expr $list : ".*\([0-9]\{8\}\)_.*"`
    #基準日より小さい場合は削除
    if [ $chk_day -lt $ref_day ]; then
      rm $backup_dir$list
    fi
  fi
done

Ubuntu16のファイルをWindows上の秀丸で編集 [Linux]

 Ubuntu16のファイルをgeditで編集しようとしたが、tSJISファイルの日本語が文字化け。文字コードを指定しようとしたが文字コードが指定できない。pluginを入れれば、文字コードが指定できるようだが、Ubuntu16上のgeditではpluginが上手く入らない。その他でも使い勝手が悪く編集作業がなかなか進まないので、
Windowsとファイル共用してWindows上の使い慣れた秀丸で編集することにした。

手順(Ubuntu側)
  • sambaのインストール
  • 対象Dirを右クリックでプロパィを表示
  • ローカルネットワーク共用tab表示
    • このフォウダーを共用する(F)をチェック共有名を入力
    • このフォルダー内でのファイル作成・削除を他のユーザに許可する(A)をチェック

手順(Windows側)
  • ネットワークドライブの割り当て
  • ドライブ(D)を指定

Ubuntu16にPHP5をインストール [Linux]


 Windows7上のVMwarePlayerゲストUbuntu 15を何も考えずにUbuntu16にUpgradeしたらPHP5がPHP7になり、WebDBシステムがPHP7で削除されたmysql_から始まる関数群を使用していたため動かなくなってしまった。mysql_から始まる関数はPHP5.5で非推奨となっていたので使用を止めようと思っていたが使い慣れたいたのでついつい使い続けていたのが災いしてしまった。Ubuntu16にはPHP5が含まれていないので簡単にはPHP5にダウングレードもできない。またmysql_から始まる関数を全て変更するには大変な作業となる。Web検索するとPHP5にダウングレードする方法がここにあったので参照にしてPHP7をPHP5にした時の備忘録。
//で全てのPHPに関するファイルを削除
sudo apt autoremove php
sudo apt purge php
sudo apt-get install python-software-properties
//repository追加
sudo add-apt-repository -y ppa:ondrej/phpsudo apt update
sudo apt install php5.6-fpm
sudo apt install libapache2-mod-php5
sudo apt install  php5-mcrypt


MySQLデータのWindowsからUbuntu(Linux)への移動 [Linux]


 Windows環境で運用しているWebDBをUbuntu(Linux)に移植するため、久しぶりにLinuxをいじったので勘が鈍ってしまい少し手間取った。
 元々Accessで運用されていたシステムをWeb化したとき、データをphpMyAdminでMySQLにインポートした。このときのテーブル作成sql文が
CREATE TABLE IF NOT EXISTS `T_テーブル名` (
 略
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=501 ;

できたテーブル名が `t_テーブル名`になっていたが、PHPでの検索が
SELECT * FROM `T_テーブル名`

でもWindows上は問題なく動作しているのでそのままにしていた。
 このデータをphpMyAdminでExportしてUbuntu側にInportしたので、テーブル作成sql文が
CREATE TABLE IF NOT EXISTS `t_テーブル名` (
 略
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=501 ;

になり、テーブル名が `t_テーブル名`となった。
 Unubutuで
SELECT * FROM `T_テーブル名`

で検索したので該当テーブルが無いのでエラーが。
そうだWindowsは大文字・小文字を区別しないが、Linuxは大文字・小文字を区別するのだった!!




Ubuntu13.04にF#(Mono)をインストール [Linux]



Windows7上のVMwarePlayerのゲストOSとしてUbuntu13.04をインストール
後、特に何をすると言う目的がない物の好きでF#をインスト-ルしたときのメモ。
今回もHello Worldで終わりそう。こちらこちらを参照しました。

環境
 •VMWare Player
 •ホストOS: Windows7
 •ゲストOS: Ubuntu13.04
 •Mono : 4.0.30319

インスト-ル
 •F#ソースの取得とコンパイル
$ cd ~/
$ git clone git://github.com/fsharp/fsharp
$ cd fsharp/
$ ./autogen.sh --prefix=/usr/local
$ make
$ sudo make install

 •インストール確認
 -インタラクティブモード
$ fsharpi
F# Interactive for F# 3.0 (Open Source Edition)
Freely distributed under the Apache 2.0 Open Source License

For help type #help;;
>
> open System;;
> Console.WriteLine "Hello, F#";;
Hello, F#
val it : unit = ()
> #q;;
- Exit... 


 -コンパイルモード
$ cd fsharp
$ fsharpc hello.fs
F# Compiler for F# 3.0 (Open Source Edition)
Freely distributed under the Apache 2.0 Open Source License
$ ./hello.exe 
Hello, F#

hello.fs ソース
System.Console.WriteLine "Hello, F#"


Ubuntu13.04にPIL(Python Imaging Library)をインストール [Linux]



Windows7上のVMwarePlayerのゲストOSとしてUbuntu13.04をインストール
後、PythonのPIL(Python Imaging Library)をインスト-ルしたときのメモ。

環境
 •VMWare Player
 •ホストOS: Windows7
 •ゲストOS: Ubuntu13.04
 •Python: 2.7.4
 •PIL:1.1.7+2.0.0-1ubuntu

PILのインストール
 •SynapticにてPILをインストール
 •PILを使用してみる
# -*- coding: utf-8 -*- 
import Image

im = Image.open("infile")
im.show()

 •show()で画像が表示されない。調べてみるとPILが画像表示に"xv"を使用するらしいが
  Ubuntuに"xv"が無いため表示できないようだ。imageMagicで代用できるようなので、
  imagMagicをインストール。ここ参照
  無事画像が表示できた。

 

Ubuntu13.04にIronPython/IronRubyをインストール [Linux]


Windows7上のVMwarePlayerのゲストOSとしてUbuntu13.04をインストール
後、IronPython/IronRubyをインスト-ルしたときのメモ。

環境
 •VMWare Player
 •ホストOS: Windows7
 •ゲストOS: Ubuntu13.04
 •Mono : 4.0.30319
 •IronPython : 2.9.9a0
 •IronRuby : 1.1.4.0

IronPythonここを参考にしています。
 •.NET環境のためにMonoをインストール
$ sudo apt-get install mono-complete

 •IronLanguages(IronPython,IronRuby)のソースコードをgithubからダウンロード(/usr/local/src/)
  $ sudo git clone https://github.com/IronLanguages/main.git IronLanguages

 •ビルドを実行
$ cd IronLanguages
$ sudo xbuild Solutions/IronPython.sln /p:Configuration="Release"

 •パス設定
PATH="$PATH:/usr/local/src/IronLanguages/bin/Release"

 •モジュールのコピー.
$ sudo cp /usr/local/src/IronLanguages/External.LCA_RESTRICTED/Languages/IronPython/27/Lib/*.py ./ 

 •IronPythonの起動
$ ipy.exe

IronRubyここを参考にしています。
 •IronPythonインストール時にMono,IronLanguagesをインストールしたので
  IrinRubyのビルドを実行
$ sudo xbuild Solutions/Ruby.sln /p:Configuration="Release"

 •ライブラリ追加
$ sudo gacutil -i IronRuby.dll
$ sudo gacutil -i Microsoft.Scripting.dll
$ sudo gacutil -i Microsoft.Dynamic.dll
$ sudo gacutil -i IronRuby.Libraries.dll

 •IronRuby実行
$ ir.exe


geditの正規表現検索/置換Plugin advanced-findの日本語化 [Linux]

Ubuntu13.04のgeditに追加した正規表現検索/置換Plugin advanced-findのメニューを
日本語化した時のメモ。advanced-findをインストールした時のメモはこちら

環境
 •VMWare Player
 •ホストOS: Windows7
 •ゲストOS: Ubuntu13.04
 •gedit : 3.6.2
 •advanced-find: 3.5.4

メニュー日本語化
 •プラグイン追加画面の日本語化
  /usr/lib/gedit/plugin/advancedfind.pluginに以下を追加
  Name[ja]=拡張検索/置換
  Description[ja]=すべてのドキュメント/タブをすべて検索・置換

 •advanced-findのHome pageに翻訳方法があったので記載通りに実施したら
 何の問題も無く日本語化ができました。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。