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
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側)
手順(Windows側)
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に翻訳方法があったので記載通りに実施したら
何の問題も無く日本語化ができました。
日本語化した時のメモ。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に翻訳方法があったので記載通りに実施したら
何の問題も無く日本語化ができました。