@Column(columnDefinition = "int default 0")
2013/07/31
Gson: Java Object <=>json
便利ね。。。
gson.toJson(user, User.class, writer);
User user = gson.fromJson(reader, User.class);
gson.toJson(list, ArrayList.class, writer);
Type type = new TypeToken(){}.getType();
ArrayList list = gson.fromJson(reader, type);
gson.toJson(user, User.class, writer);
User user = gson.fromJson(reader, User.class);
gson.toJson(list, ArrayList.class, writer);
Type type = new TypeToken(){}.getType();
ArrayList list = gson.fromJson(reader, type);
2013/07/30
2013/07/30
営業利益、経常利益、特別損益、当期利益(最終利益)
売上高 | 経常損益の部 |
-売上原価 | |
売上総利益 | |
-販売費及び一般管理費 | |
営業利益 | |
+営業外収益 | |
-営業外費用 | |
経常利益 | |
+特別利益 | 特別損益の部 |
-特別損失 | |
税引前利益 | ↑この区分表示は 新会社法では不要 |
-法人税、住民税及び事業税 法人税調整額 |
|
当期純利益 |
javaFx dialogBox
There is no common dialog support. .....
do yourself...
Stage dialogStage = new Stage();
dialogStage.initModality(Modality.WINDOW_MODAL);
dialogStage.setScene(new Scene(VBoxBuilder.create().
children(new Text("Hi"), new Button("Ok.")).
alignment(Pos.CENTER).padding(new Insets(5)).build()));
dialogStage.show();
・controlsfx? jdk8からサーポート
・javafx-dialogs-0.0.3.jar 使える、かなり便利!
svn パーミッション 改行コード
windowsで開発、サーバーはlinuxのせいで、
SVNにcommit、checkOutして、パーミッション、改行コードが乱れ、
実行エラーになる。
$ ./test.pl
-bash: ./test.pl: Permission denied
-bash: ./test.pl: /bin/bash^M: bad interpreter: No such file or directory
★svn:executable
ファイルに対してこの属性名が設定されていると、OSが対応していれば実行ビットが有効になる。
属性値は無い。
★svn:eol-style=native
Checkoutする際に、ファイルに含まれる改行コードをCheckout先のOSに応じて変換する。
つまり、Windowsの場合は CRLF に変換され、UNIX系OSの場合は LF に変換されます。
逆にaddやcommitなどのコマンドでリポジトリにファイルを格納するときには、 オペレーティングシステムにはよらず、正規化された改行コード(LF)に変換されてリポジトリに格納されます。
OSが混在する環境でSubversionを使用している場合は、
・実行ビットが必要なファイルには、svn:executable 属性を設定。(svn:executable *)
・テキストファイルには、svn:eol-style 属性に native という値を設定
SVNにcommit、checkOutして、パーミッション、改行コードが乱れ、
実行エラーになる。
$ ./test.pl
-bash: ./test.pl: Permission denied
-bash: ./test.pl: /bin/bash^M: bad interpreter: No such file or directory
★svn:executable
ファイルに対してこの属性名が設定されていると、OSが対応していれば実行ビットが有効になる。
属性値は無い。
★svn:eol-style=native
Checkoutする際に、ファイルに含まれる改行コードをCheckout先のOSに応じて変換する。
つまり、Windowsの場合は CRLF に変換され、UNIX系OSの場合は LF に変換されます。
逆にaddやcommitなどのコマンドでリポジトリにファイルを格納するときには、 オペレーティングシステムにはよらず、正規化された改行コード(LF)に変換されてリポジトリに格納されます。
svn ps svn:executable '' test.pl ←svn:executableの設定
svn ps svn:eol-style 'native' test.pl ←svn:eol-style=nativeの設定
svn commit
OSが混在する環境でSubversionを使用している場合は、
・実行ビットが必要なファイルには、svn:executable 属性を設定。(svn:executable *)
・テキストファイルには、svn:eol-style 属性に native という値を設定
linux svn command
・インストール
sudo adduser svn
yum ..
・レポジトリを作成
mkdir /home/test/me
svnadmin create /home/test/me/project1
・import、管理する物をレポジトリにいれる
svn import project1 file://localhost/home/test/me/project1 \
svn import project1 svn+ssh://username@hostname/usr/local/subversion/project1
・checkout
svn checkout file://localhost/usr/local/subversion/project1
・状態確認など
svn status
svn add project1.README
svn delete project1.README
svn commit -m "first commit of project1"(説明)
svn diff project1.txt
svn revert project1.txt 修正を廃棄する
svn update -r 2 project.txt
sudo adduser svn
yum ..
・レポジトリを作成
mkdir /home/test/me
svnadmin create /home/test/me/project1
・import、管理する物をレポジトリにいれる
svn import project1 file://localhost/home/test/me/project1 \
svn import project1 svn+ssh://username@hostname/usr/local/subversion/project1
・checkout
svn checkout file://localhost/usr/local/subversion/project1
・状態確認など
svn status
svn add project1.README
svn delete project1.README
svn commit -m "first commit of project1"(説明)
svn diff project1.txt
svn revert project1.txt 修正を廃棄する
svn update -r 2 project.txt
2013/07/29
2013/07/29
JMeter プロキシ環境 no-uiなど
JMeterを使用するマシンがプロキシ環境下にある場合はJMeterの起動時に以下のパラメータを追加する。
-H:プロキシのホスト名またはIPアドレス
-P:プロキシのポート番号
-u:プロキシ認証ユーザー名
-a:プロキシ認証パスワード
例)プロキシサーバ「proxy_hoge.com」、プロキシポート番号「8080」の場合、下記のように実行する。
jmeter.bat -H proxy_hoge.com -P 8080
★Use JMeter in non-GUI mode
Find where you installed JMeter through command line or the terminal
Set the ‘bin’ directory as your current directory
Run ‘jmeter –n –t <location of script>.jmx
That’s it, when your test is complete you can do your analysis. You may be interested in seeing how your test is performing during execution in command line/terminal (rather than seeing a black window), to do this just uncomment the following within the JMeter properties file (remove the ‘#’):
・・JMeter properties file
#summariser.name=summary
#summariser.interval=180
#summariser.out=true
#summariser.file=true
-H:プロキシのホスト名またはIPアドレス
-P:プロキシのポート番号
-u:プロキシ認証ユーザー名
-a:プロキシ認証パスワード
例)プロキシサーバ「proxy_hoge.com」、プロキシポート番号「8080」の場合、下記のように実行する。
jmeter.bat -H proxy_hoge.com -P 8080
★Use JMeter in non-GUI mode
Find where you installed JMeter through command line or the terminal
Set the ‘bin’ directory as your current directory
Run ‘jmeter –n –t <location of script>.jmx
That’s it, when your test is complete you can do your analysis. You may be interested in seeing how your test is performing during execution in command line/terminal (rather than seeing a black window), to do this just uncomment the following within the JMeter properties file (remove the ‘#’):
・・JMeter properties file
#summariser.name=summary
#summariser.interval=180
#summariser.out=true
#summariser.file=true
2013/07/28
hibernate hql left join
from A as a
left join a.b as b1 with b1.column1 > 10 and b1.column2=:valueB
left join a.c as c1 with c1.column1 > 10 and c1.column2=:valueC
别名必须............................................
left join a.b as b1 with b1.column1 > 10 and b1.column2=:valueB
left join a.c as c1 with c1.column1 > 10 and c1.column2=:valueC
别名必须............................................
2013/07/24
linux Shebang
Shebangー>シバン
「#!/bin/sh」と「#!/bin/bash」
sh という名前で bash を起動すると、 bash は古くからある sh の起動動作(POSIX互換モード)をできるだけ真似する
動作が若干違う。
bash独自な書き方もある。
「#!/bin/sh」と「#!/bin/bash」
sh という名前で bash を起動すると、 bash は古くからある sh の起動動作(POSIX互換モード)をできるだけ真似する
動作が若干違う。
bash独自な書き方もある。
bash array 配列
・生成
配列の名前=("データ" "データ" "データ")
・追加
ARRAY1=("${ARRAY1[@]}" "give")
・指定所に格納
配列の名前[インデックス]="データ"
・取得(0から。。)
変数=${配列の名前[インデックス]}
・ループ
for (( I = 0; I < ${#ARRAY2[@]}; ++I ))
do
echo ${ARRAY2[$I]}
done
bash case
★
case 値 in
パターン1 ) 処理1 ;;
パターン2 ) 処理2 ;;
パターン3 ) 処理3 ;;
…
パターンn ) 処理n ;;
esac
★パターンに OR 条件を使用する
case "$var" in
"yes" | "Yes" | "YES" ) echo "イエスが入力されました" ;;
[nN]o | "NO" ) echo "ノーが入力されました" ;;
* ) echo "イエスでもノーでもありません" ;;
esac
case 値 in
パターン1 ) 処理1 ;;
パターン2 ) 処理2 ;;
パターン3 ) 処理3 ;;
…
パターンn ) 処理n ;;
esac
★パターンに OR 条件を使用する
case "$var" in
"yes" | "Yes" | "YES" ) echo "イエスが入力されました" ;;
[nN]o | "NO" ) echo "ノーが入力されました" ;;
* ) echo "イエスでもノーでもありません" ;;
esac
bash local 変数
bash では特に指定しない限り、変数は常にグローバルな変数として扱われる
変数をつくるたびに、グローバルな領域を汚染するので、
対策として bash のビルトインコマンド local を使用する
for ループに使用する変数や、read で受け取る変数もグローバル変数になる
for や read の変数名の前に local を置くと、残念ながら構文エラーになる
(#!/bin/zshでエラーにならない。。#!/bin/bashでエラー)
local と宣言する
local hoge
変数をつくるたびに、グローバルな領域を汚染するので、
対策として bash のビルトインコマンド local を使用する
for ループに使用する変数や、read で受け取る変数もグローバル変数になる
for や read の変数名の前に local を置くと、残念ながら構文エラーになる
(#!/bin/zshでエラーにならない。。#!/bin/bashでエラー)
local と宣言する
local hoge
linux ssh nohup プロセスのスケジューリング
★
・シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視する
・ログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまう
・親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill (kill -HUP) する。
・nohup コマンドは HUP シグナルを無視するようにプログラムを実行する
★% ssh localhost "cat foo.txt"
プロセスのスケジューリング:
ssh が子プロセスとしてシェルを起動し、シェルが cat foo.txt を起動する
cat foo.txt が ファイルの内容をパイプバッファに書き込む
cat foo.txt が終了する
cat の親プロセスである、シェルが終了する
シェルが終了したので ssh がコネクションを切断する
パイプバッファの内容が失われてしまう
よって、プロセスの終了を監視するだけでは不整合が起こるため、入出力ストリームを監視するのだ。
とりあえず、下記でうまく行った。。また調べる
ssh root@remoteserver 'nohup /root/backup.sh > /dev/null ' &
これも
Pseudo-terminal will not be allocated because stdin is not a terminal.
=>http://takat.exblog.jp/12216326/
ssh root@remoteserver screen -d -m ./script
-----------------
・シェルスクリプトを起動した親プロセスは子プロセスの終了状態を監視する
・ログアウトして親プロセスであるシェルが終了すると子プロセスはゾンビ プロセスとなってしまう
・親プロセスとなるシェル(ログインシェル)は子プロセスであるバックグラウンド ジョブを kill (kill -HUP) する。
・nohup コマンドは HUP シグナルを無視するようにプログラムを実行する
★% ssh localhost "cat foo.txt"
プロセスのスケジューリング:
ssh が子プロセスとしてシェルを起動し、シェルが cat foo.txt を起動する
cat foo.txt が ファイルの内容をパイプバッファに書き込む
cat foo.txt が終了する
cat の親プロセスである、シェルが終了する
シェルが終了したので ssh がコネクションを切断する
パイプバッファの内容が失われてしまう
よって、プロセスの終了を監視するだけでは不整合が起こるため、入出力ストリームを監視するのだ。
とりあえず、下記でうまく行った。。また調べる
ssh root@remoteserver 'nohup /root/backup.sh > /dev/null ' &
これも
Pseudo-terminal will not be allocated because stdin is not a terminal.
=>http://takat.exblog.jp/12216326/
ssh root@remoteserver screen -d -m ./script
-----------------
2013/07/19
linux command bash -- - オプション 処理
★Bash getopts 組み込みは、--長いオプションを処理できず、1文字のみ
while getopts "a:b:c" opt
do
case ${opt} in
a ) value_a=${OPTARG} ;;
b ) value_b=${OPTARG} ;;
c ) value_c=${OPTARG} ;;
esac
done
実行する
./test.sh -a a -b b -c c
★--と-
-:古典的なUNIX系コマンドでは、オプションは1文字
--:GNUが始めた新しいスタイルでは、長いがわかりやすい英単語でオプションを指定する
while getopts "a:b:c" opt
do
case ${opt} in
a ) value_a=${OPTARG} ;;
b ) value_b=${OPTARG} ;;
c ) value_c=${OPTARG} ;;
esac
done
実行する
./test.sh -a a -b b -c c
★--と-
-:古典的なUNIX系コマンドでは、オプションは1文字
--:GNUが始めた新しいスタイルでは、長いがわかりやすい英単語でオプションを指定する
2013/07/19
IE proxy設定 効かない
2013/07/16
Jmeter 動的 関数 function
・function: __P
jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu
${__P(group1.threads)} - 7
${__P(group1.loops)} - 1
${__P(hostname,www.dummy.org)} - return value of property hostname or www.dummy.org if not defined
・__V
The V (variable) function returns the result of evaluating a variable name expression. This can be used to evaluate nested variable references (which are not currently supported).
For example, if one has variables A1,A2 and N=1:
${A1} - works OK
${A${N}} - does not work (nested variable reference)
${__V(A${N})} - works OK. A${N} becomes A1, and the __V function returns the value of A1
・test_${__Random(1,30)}
・${__counter(TRUE,count)}
・${__StringFromFile(user.txt)}
・Cookieを使いたい
「HTTP クッキーマネージャ」はスレッドグループに追加するだけで利用できます。
・jmeter.bat/jmeter file from a command line with the following parameters:
-H [proxy server hostname or ip address]
-P [proxy server port]
-N [nonproxy hosts] (e.g. *.apache.org|localhost)
-u [username for proxy authentication - if required]
-a [password for proxy authentication - if required]
・インターリーブコントローラ
ーー>ループ毎に1個、順番に実行される
・乱数コントロール
ループ毎に、ランダムに1個選択して実行する
・スループットコントローラ
スループットコントローラに指定したスループットの数まで実行してそれ以上は実行しない
jmeter -Jgroup1.threads=7 -Jhostname1=www.realhost.edu
${__P(group1.threads)} - 7
${__P(group1.loops)} - 1
${__P(hostname,www.dummy.org)} - return value of property hostname or www.dummy.org if not defined
・__V
The V (variable) function returns the result of evaluating a variable name expression. This can be used to evaluate nested variable references (which are not currently supported).
For example, if one has variables A1,A2 and N=1:
${A1} - works OK
${A${N}} - does not work (nested variable reference)
${__V(A${N})} - works OK. A${N} becomes A1, and the __V function returns the value of A1
・test_${__Random(1,30)}
・${__counter(TRUE,count)}
・${__StringFromFile(user.txt)}
・Cookieを使いたい
「HTTP クッキーマネージャ」はスレッドグループに追加するだけで利用できます。
・jmeter.bat/jmeter file from a command line with the following parameters:
-H [proxy server hostname or ip address]
-P [proxy server port]
-N [nonproxy hosts] (e.g. *.apache.org|localhost)
-u [username for proxy authentication - if required]
-a [password for proxy authentication - if required]
・インターリーブコントローラ
ーー>ループ毎に1個、順番に実行される
・乱数コントロール
ループ毎に、ランダムに1個選択して実行する
・スループットコントローラ
スループットコントローラに指定したスループットの数まで実行してそれ以上は実行しない
2013/07/13
SVN ヒストリー比較 文字化け
projectの設定:
プロジェクト右クリック→プロパティー→情報のテキスト・ファイル・エンコード
workspaceの設定
:ウィンドウ→設定→一般→ワークスペースのテキスト・ファイル・エンコード
が一致であれば、治る
プロジェクト右クリック→プロパティー→情報のテキスト・ファイル・エンコード
workspaceの設定
:ウィンドウ→設定→一般→ワークスペースのテキスト・ファイル・エンコード
が一致であれば、治る
2013/07/12
eclipse javascript error エラー
JavaScript の解析から外す。
プロジェクト→プロパティ→JavaScript→インクルード・パス→ソース
[除外]を選んで、[編集]ボタンを押す。
後はクリーンしてリビルド。
プロジェクト→プロパティ→JavaScript→インクルード・パス→ソース
[除外]を選んで、[編集]ボタンを押す。
後はクリーンしてリビルド。
java classpath jar
lib下の全jarファイル、及びclassesフォルダー
java -cp .;lib\*;classes\; jp.co.sega.orion.batchtask.execute.BatchtaskMain
java -cp .;lib\*;classes\; jp.co.sega.orion.batchtask.execute.BatchtaskMain
2013/07/11
linux find
-follow symbolリンクの先も検索する
-type f ファイルであれば、真
d ディレクトリであれば、真
l リンクであれば、真
-group owner
-user owner
-regex -name [..] ファイル名正規表現に満たれば、真
-path [..] path名は正規表現に満たれば、真
-atime (+/-)n +n日より大きい -nn日より小さい
-mtime -mmin
-newer [file] 指定するファイルより新しい物
-perm +/- 755 パーミッションの権限比較
\(\) 中の物を優先する
! -not
-a and
-o or
-print
-fprint
-exec command '{}'\; ファイル名 ファイル数回実行され
-exec command '{}'+; ファイル名のグループ 一回実行され
find . -type f -print0 | xargs -0 コマンド 区切り文字を0にする そのコマンドは一回だけ実行
- find の -mtime +n のまとめ
find の -mtime +n の検索対象となるファイルは以下の通り。
mtime +0 今から24時間以上前のファイル
mtime +1 今から48時間以上前のファイル
mtime +2 今から72時間以上前のファイル
(n + 1) * 24 ってことだね。man にそう書いてあれば良かったのに。あとでスクリプトを書いて試してみよう。
試すパターン
find -mtime 日数
find -mtime +日数
find -mtime -日数
結果からいうと、
find -mtime -3 3日(72時間)前〜現在
find -mtime 3 3日(72時間)前〜4日(96時間)前
find -mtime +3 4日(96時間)前〜過去
こうなります。
find -maxdepth 1
・名前に日付を入れる
find /usr/local/backup/ -name `date +%Y%m%d -d '2day ago'` -exec rm -r {}\;
・find: `/usr/local/backup/20110115': No such file or directory
==>find が削除される前のディレクトリ配下もfindしようとしているから、findしようとした時にすでにディレクトリがなくなっているので、findできませんというエラーです
find | xargs rm -r
find -maxdepth 1
2>/dev/null
・-exec command ;
command を実行する。コマンドの戻り値が 0 ならば真。
find のコマンドラインで指定されたこれ以降の引き数は、 `;' を含む引き数にいたるまで、すべてcommand の引き数とみなされる。
文字列 `{}' は現在処理しているファイル名に置き換えられる。
これは command 引き数のどこにあってもよく、単独で置かれていなくてもよい (単独で置かれていなければならないような find もある)。
これらの文字はシェルによって展開されないよう、 `\' によってエスケープするか引用符で囲む必要がある。
コマンドは find を実行したディレクトリから実行される。
・-exec {} \; と -exec {} + の違い
まず \; の 頭についてるバックスラッシュはこれがないとセミコロンがシェルのコントロール文字列だと判別されるためについてるだけです。
そして肝心の違いですが -exec {} \; は find で見つかったそれぞれのファイルを別々にコマンドに渡して、 -exec {} + は全部まとめて渡します
$ mkdir test
$ touch test/{a,b}
$ find test -exec echo foo {} \;
foo test
foo test/a
foo test/b
$ find test -exec echo foo {} +
foo test test/a test/b
-exec echo {}
-type f ファイルであれば、真
d ディレクトリであれば、真
l リンクであれば、真
-group owner
-user owner
-regex -name [..] ファイル名正規表現に満たれば、真
-path [..] path名は正規表現に満たれば、真
-atime (+/-)n +n日より大きい -nn日より小さい
-mtime -mmin
-newer [file] 指定するファイルより新しい物
-perm +/- 755 パーミッションの権限比較
\(\) 中の物を優先する
! -not
-a and
-o or
-fprint
-exec command '{}'\; ファイル名 ファイル数回実行され
-exec command '{}'+; ファイル名のグループ 一回実行され
find . -type f -print0 | xargs -0 コマンド 区切り文字を0にする そのコマンドは一回だけ実行
- find の -mtime +n のまとめ
find の -mtime +n の検索対象となるファイルは以下の通り。
mtime +0 今から24時間以上前のファイル
mtime +1 今から48時間以上前のファイル
mtime +2 今から72時間以上前のファイル
(n + 1) * 24 ってことだね。man にそう書いてあれば良かったのに。あとでスクリプトを書いて試してみよう。
試すパターン
find -mtime 日数
find -mtime +日数
find -mtime -日数
結果からいうと、
find -mtime -3 3日(72時間)前〜現在
find -mtime 3 3日(72時間)前〜4日(96時間)前
find -mtime +3 4日(96時間)前〜過去
こうなります。
find -maxdepth 1
・名前に日付を入れる
find /usr/local/backup/ -name `date +%Y%m%d -d '2day ago'` -exec rm -r {}\;
・find: `/usr/local/backup/20110115': No such file or directory
==>find が削除される前のディレクトリ配下もfindしようとしているから、findしようとした時にすでにディレクトリがなくなっているので、findできませんというエラーです
find | xargs rm -r
find -maxdepth 1
2>/dev/null
・-exec command ;
command を実行する。コマンドの戻り値が 0 ならば真。
find のコマンドラインで指定されたこれ以降の引き数は、 `;' を含む引き数にいたるまで、すべてcommand の引き数とみなされる。
文字列 `{}' は現在処理しているファイル名に置き換えられる。
これは command 引き数のどこにあってもよく、単独で置かれていなくてもよい (単独で置かれていなければならないような find もある)。
これらの文字はシェルによって展開されないよう、 `\' によってエスケープするか引用符で囲む必要がある。
コマンドは find を実行したディレクトリから実行される。
・-exec {} \; と -exec {} + の違い
まず \; の 頭についてるバックスラッシュはこれがないとセミコロンがシェルのコントロール文字列だと判別されるためについてるだけです。
そして肝心の違いですが -exec {} \; は find で見つかったそれぞれのファイルを別々にコマンドに渡して、 -exec {} + は全部まとめて渡します
$ mkdir test
$ touch test/{a,b}
$ find test -exec echo foo {} \;
foo test
foo test/a
foo test/b
$ find test -exec echo foo {} +
foo test test/a test/b
-exec echo {}
linux grep
grep 検索内容 file
=>その行の内容を表示する
-i 大文字と小文字を区別しない
-l ファイル名だけを出力する
-n 行番号を表示する
-v 一致しない行を表示する
--color 一致文字列に色を付ける事ができる
-o 合致する文字だけ
・OR 検索する
grep -e "localhost" -e "dnc" 21show_master_status.log
grep "aomori\|yamanashi" fruits.txt
・AND
grep "localhost" 21show_master_status.log | grep "dnc"
=>その行の内容を表示する
-i 大文字と小文字を区別しない
-l ファイル名だけを出力する
-n 行番号を表示する
-v 一致しない行を表示する
--color 一致文字列に色を付ける事ができる
-o 合致する文字だけ
・OR 検索する
grep -e "localhost" -e "dnc" 21show_master_status.log
grep "aomori\|yamanashi" fruits.txt
・AND
grep "localhost" 21show_master_status.log | grep "dnc"
2013/07/10
linux bash substr
★cut
-c 切り出す文字数を指定する1,3 1-3
-d 区切り文字を指定する(デフォルトはタブ)-d ""
-f 表示する項目を指定。区切った順に左から1,2,3... -f1-3
-s 列の区切りのない行を無視する
・echo 1234567890 | cut -c 3-7
=>34567
・echo "12345" | cut -c1,3
=>13
・ echo "field1 field2 field3 field4 field5" | cut -d ' ' -f1,3
field1 field3
★
str="1234567890"
echo ${str:2:5}
最後から3文字目を取り出す
echo ${STRING: -3:1}
★
echo "abcdefg.tar.gz" | sed -e "s/.tar.gz//"
=>abcdefgecho $result
★
FILE=test.tar.gz
NAME=${FILE%.tar.gz}
=>test
FILE=test.tar.gz
NAME1=${FILE%.*}
=>test.tar
NAME2=${FILE%.*.*}
=>test
FILE=test.tar.gz
NAME1=${FILE#*.}
=>tar.gz
NAME2=${FILE#*.*.}
=>gz
FILE=/tmp/test1/test2/test.tar.gz
NAME=${FILE##*/}
=>test.tar.gz
★bashname
意外に使われなかった。。
パス名からディレクトリ部分を取りのぞいた名前を表示する.
指定があれば, 末尾の拡張子も取り除く.
--help この使い方を表示して終了
--version バージョン情報を表示して終了
Examples:
basename /usr/bin/sort Output "sort".
basename include/stdio.h .h Output "stdio".
-c 切り出す文字数を指定する1,3 1-3
-d 区切り文字を指定する(デフォルトはタブ)-d ""
-f 表示する項目を指定。区切った順に左から1,2,3... -f1-3
-s 列の区切りのない行を無視する
・echo 1234567890 | cut -c 3-7
=>34567
・echo "12345" | cut -c1,3
=>13
・ echo "field1 field2 field3 field4 field5" | cut -d ' ' -f1,3
field1 field3
★
str="1234567890"
echo ${str:2:5}
最後から3文字目を取り出す
echo ${STRING: -3:1}
★
echo "abcdefg.tar.gz" | sed -e "s/.tar.gz//"
=>abcdefgecho $result
★
FILE=test.tar.gz
NAME=${FILE%.tar.gz}
=>test
FILE=test.tar.gz
NAME1=${FILE%.*}
=>test.tar
NAME2=${FILE%.*.*}
=>test
FILE=test.tar.gz
NAME1=${FILE#*.}
=>tar.gz
NAME2=${FILE#*.*.}
=>gz
FILE=/tmp/test1/test2/test.tar.gz
NAME=${FILE##*/}
=>test.tar.gz
★bashname
意外に使われなかった。。
パス名からディレクトリ部分を取りのぞいた名前を表示する.
指定があれば, 末尾の拡張子も取り除く.
--help この使い方を表示して終了
--version バージョン情報を表示して終了
Examples:
basename /usr/bin/sort Output "sort".
basename include/stdio.h .h Output "stdio".
linux user group
・id 自分のアカウントIDと所属するグループの確認
uid=500(hoge) gid=501(hoge) 所属グループ=501(hoge),502(hoge2)
・groups 自分の所属するグループの確認
hoge hoge1 hoge2
・/etc/passwd ユーザーの一覧
username:password:uid:gid:comment:home_dir:login_shell
/etc/shadow ーー>passwordがある。
・sudo useradd **
passwd **
useradd 新規ユーザー usermod
コマンドでユーザーを作成した場合、ユーザー名と同じ名前のグループが作成される
useradd -D デフォルト設定値を表示する
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel 新規ユーザーのホームディレクトリのテンプレート /etc/default/useraddファイルでも確認できます
-M ホームディレクトリを無しにする。
-c comment 新規ユーザのコメント。
-d home_dir ホームディレクトリを指定する。
-e expire_date ユーザアカウントが無効となる日付。日付は YYYY-MM-DD の形式。
-f inactive_days パスワードがの使用期限が切れてから、永久に使用不能となる経過日数。
-g initial_group ユ ーザの属する主グループのグループ名またはグループ ID。
-G group,[...] ユーザの属するサブグループのグループ名またはグループ ID。グループはコンマで区切り、空白を含めてはいけな
-s shell ユーザのログインシェル名。
-u uid ユーザ ID。
-o UIDの重複を許可する
=>passwordは?デフォルト?
----------------------------
there is no default password!
If you don't set a password, then the user won't be able to login to the system.
=>test1:!!:15951:0:99999:7::: !!でロックされた。
#sudo passwd -u -f test1
ユーザー test1 用のパスワードをロック解除。
passwd: 成功
su test1=>OK
passwd -uというのは、ロックアウトされているアカウントのロックを解除するもの
現在postgresにはパスワードが設定されていないためpasswd -uだけだと「危険だべ」と拒否される。
ので、-fオプションをつけて強行する。
逆にロックする時は
# passwd -l postgres
--------------------------
・userdel
グループに、そのユーザーしか属していない場合は、グループも同時に削除される。
グループに、他のアカウントが所属している場合は、グループは削除されない。
-r オプションを指定しない場合は、ホームディレクトリ(/home/)、メールスプール(/var/spool/mail/)がファイルシステム上に残る
find / -uid 514
find / -user hogehoge -exec rm -rf {} \;
・/etc/group グループの一覧
hoge_group:x:501:hoge_user3,hoge_user2
・newgrp グループにログインする、
・gpasswd グループのパスワードの設定
・groupadd,groupdel
・whoami ユーザー名を表示する
uid=500(hoge) gid=501(hoge) 所属グループ=501(hoge),502(hoge2)
・groups 自分の所属するグループの確認
hoge hoge1 hoge2
・/etc/passwd ユーザーの一覧
username:password:uid:gid:comment:home_dir:login_shell
/etc/shadow ーー>passwordがある。
・sudo useradd **
passwd **
useradd 新規ユーザー usermod
コマンドでユーザーを作成した場合、ユーザー名と同じ名前のグループが作成される
useradd -D デフォルト設定値を表示する
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel 新規ユーザーのホームディレクトリのテンプレート /etc/default/useraddファイルでも確認できます
-M ホームディレクトリを無しにする。
-c comment 新規ユーザのコメント。
-d home_dir ホームディレクトリを指定する。
-e expire_date ユーザアカウントが無効となる日付。日付は YYYY-MM-DD の形式。
-f inactive_days パスワードがの使用期限が切れてから、永久に使用不能となる経過日数。
-g initial_group ユ ーザの属する主グループのグループ名またはグループ ID。
-G group,[...] ユーザの属するサブグループのグループ名またはグループ ID。グループはコンマで区切り、空白を含めてはいけな
-s shell ユーザのログインシェル名。
-u uid ユーザ ID。
-o UIDの重複を許可する
=>passwordは?デフォルト?
----------------------------
there is no default password!
If you don't set a password, then the user won't be able to login to the system.
=>test1:!!:15951:0:99999:7::: !!でロックされた。
#sudo passwd -u -f test1
ユーザー test1 用のパスワードをロック解除。
passwd: 成功
su test1=>OK
passwd -uというのは、ロックアウトされているアカウントのロックを解除するもの
現在postgresにはパスワードが設定されていないためpasswd -uだけだと「危険だべ」と拒否される。
ので、-fオプションをつけて強行する。
逆にロックする時は
# passwd -l postgres
--------------------------
・userdel
グループに、そのユーザーしか属していない場合は、グループも同時に削除される。
グループに、他のアカウントが所属している場合は、グループは削除されない。
-r オプションを指定しない場合は、ホームディレクトリ(/home/)、メールスプール(/var/spool/mail/)がファイルシステム上に残る
find / -uid 514
find / -user hogehoge -exec rm -rf {} \;
・/etc/group グループの一覧
hoge_group:x:501:hoge_user3,hoge_user2
・newgrp グループにログインする、
・gpasswd グループのパスワードの設定
・groupadd,groupdel
・whoami ユーザー名を表示する
Task: Change username from tom to jerry
Type usermod command as follows:# id tom
# usermod -l jerry tom
# id jerry
# id to
sudo visudo
2013/07/09
apache httpd.confの設定
★Apacheは、モジュールによって機能を追加する。組み込まれているモジュールは、以下のようにして確認できる
/usr/sbin/httpd -l
core.c
prefork.c ーープロセス
http_core.c
mod_so.c
Apache 2.0ではDSO(Dynamic Shared Object)を利用し、
実行時にモジュールを組み込む。
LoadModule php5_module modules/libphp5.so
★コンパイルオプション(稼働モードなど)を確認できる
/usr/sbin/httpd -V ←「-V」でコンパイルオプションを確認
Server version: Apache/2.0.54
Server built: May 23 2005 08:12:24
Server's Module Magic Number: 20020903:9
Architecture: 32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork" ←preforkになっている
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
★httpdの設定のみをチェックする
# /usr/sbin/httpd -t
★プロセス数関する設定
<IfModule prefork.c>
StartServers 8 立ち上げた際に最初に起動するプロセス数
MinSpareServers 5
MaxSpareServers 20 常時待機しているようにプロセス数
ServerLimit 256
MaxClients 256 上限プロセス数
MaxRequestsPerChild 4000 プロセスを定期的に再起動させる
処理中、メモリーの申請と放棄繰り返し、メモリーの利用効率が悪くなる。
一定回数に達すると、使い捨て。
</IfModule>
MaxClients=使用可能なメモリ量/Apacheの1プロセスが使用するメモリ量
難しい作業ね。1プロセスは、経験的には、静的コンテツの場合で数Mbytes、動的コンテンツで20?30Mbytes
値を少しずつ上げていき、vmstatやtopなどのコマンドでスワップへの書き込みが発生しない値にする
psコマンドでは、「VSZ 仮想」と「RSS物理」の値に注目
topコマンドの場合は、「VIRT仮想」と「RES物理」の値に注目
★Apache 2.0のデフォルト設定はプロセスベースの処理になっているため、
スレッドを使用する時、下記を修正する
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker ←httpdかhttpd.workerを指定
スレッドの設定
<IfModule worker.c>
ServerLimit プロセス
StartServers 2 プロセス
MaxClients 150 thread
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 1つのプロセスで生成されるスレッド数
MaxRequestsPerChild 0
</IfModule>
MaxClients数=ThreadsPerChild数×プロセス数
★セキュリティ設定
・OS情報
ServerTokens ProductOnly
ServerSignature Off
・
<Directory />
(省略)
AllowOverride None ←.htaccessによる制限上書きを禁止
</Directory>
/usr/sbin/httpd -l
core.c
prefork.c ーープロセス
http_core.c
mod_so.c
Apache 2.0ではDSO(Dynamic Shared Object)を利用し、
実行時にモジュールを組み込む。
LoadModule php5_module modules/libphp5.so
★コンパイルオプション(稼働モードなど)を確認できる
/usr/sbin/httpd -V ←「-V」でコンパイルオプションを確認
Server version: Apache/2.0.54
Server built: May 23 2005 08:12:24
Server's Module Magic Number: 20020903:9
Architecture: 32-bit
Server compiled with....
-D APACHE_MPM_DIR="server/mpm/prefork" ←preforkになっている
-D APR_HAS_SENDFILE
-D APR_HAS_MMAP
★httpdの設定のみをチェックする
# /usr/sbin/httpd -t
★プロセス数関する設定
<IfModule prefork.c>
StartServers 8 立ち上げた際に最初に起動するプロセス数
MinSpareServers 5
MaxSpareServers 20 常時待機しているようにプロセス数
ServerLimit 256
MaxClients 256 上限プロセス数
MaxRequestsPerChild 4000 プロセスを定期的に再起動させる
処理中、メモリーの申請と放棄繰り返し、メモリーの利用効率が悪くなる。
一定回数に達すると、使い捨て。
</IfModule>
MaxClients=使用可能なメモリ量/Apacheの1プロセスが使用するメモリ量
難しい作業ね。1プロセスは、経験的には、静的コンテツの場合で数Mbytes、動的コンテンツで20?30Mbytes
値を少しずつ上げていき、vmstatやtopなどのコマンドでスワップへの書き込みが発生しない値にする
psコマンドでは、「VSZ 仮想」と「RSS物理」の値に注目
topコマンドの場合は、「VIRT仮想」と「RES物理」の値に注目
★Apache 2.0のデフォルト設定はプロセスベースの処理になっているため、
スレッドを使用する時、下記を修正する
/etc/sysconfig/httpd
HTTPD=/usr/sbin/httpd.worker ←httpdかhttpd.workerを指定
スレッドの設定
<IfModule worker.c>
ServerLimit プロセス
StartServers 2 プロセス
MaxClients 150 thread
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25 1つのプロセスで生成されるスレッド数
MaxRequestsPerChild 0
</IfModule>
MaxClients数=ThreadsPerChild数×プロセス数
★セキュリティ設定
・OS情報
ServerTokens ProductOnly
ServerSignature Off
・
<Directory />
(省略)
AllowOverride None ←.htaccessによる制限上書きを禁止
</Directory>
httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied
httpd を起動中:
httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied
(13)Permission denied: Error retrieving pid file run/httpd.pid
ls -alで確認して、read権限がある。
ls -Zで確認して、他のファイルとの違う所をわかった。
drwxrwxrwx root root user_u:object_r:samba_share_t share
Display security context so it fits on mostdisplays.
Displays only mode, user, group,security context and file name
chcon -t httpd_config_t httpd.confで修正して、OK
更に、
SELinuxの無効化
/etc/sysconfig/selinux
=>SELINUX=disabled ← disabled に変更
httpd: Could not open configuration file /etc/httpd/conf/httpd.conf: Permission denied
(13)Permission denied: Error retrieving pid file run/httpd.pid
ls -alで確認して、read権限がある。
ls -Zで確認して、他のファイルとの違う所をわかった。
drwxrwxrwx root root user_u:object_r:samba_share_t share
Display security context so it fits on mostdisplays.
Displays only mode, user, group,security context and file name
chcon -t httpd_config_t httpd.confで修正して、OK
更に、
SELinuxの無効化
/etc/sysconfig/selinux
=>SELINUX=disabled ← disabled に変更
2013/07/07
javaFx: get stage from controller during initialization
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyGui.fxml"));
Parent root = loader.load();
MyController controller = (MyController)loader.getController();
controller.setStageAndSetupListeners(stage);
Parent root = loader.load();
MyController controller = (MyController)loader.getController();
controller.setStageAndSetupListeners(stage);
2013/07/05
2013/07/05
OpenJDK JDK
OpenJDK
⇒Sun Microsystems(今はOracle)のJDKをオープンソース化したもの
ただしSunが独占的使用権を持つコードはオープン化されなかった。
Icedtea
⇒OpenJDKの中に残る独占的使用権を持つコードを、オープンソース実装で置き換えたものである
Oracle と IBM の共同プロジェクトとしての OpenJDK
ああ。。大企業のやりとり。。。
⇒Sun Microsystems(今はOracle)のJDKをオープンソース化したもの
ただしSunが独占的使用権を持つコードはオープン化されなかった。
Icedtea
⇒OpenJDKの中に残る独占的使用権を持つコードを、オープンソース実装で置き換えたものである
Oracle と IBM の共同プロジェクトとしての OpenJDK
ああ。。大企業のやりとり。。。
linux RPMパッケージの強制インストール
rpm -ihv --replacepkgs hogehoge-3.5-1.i386.rpm
rpm -ihv --replacefiles hogehoge-3.5-1.i386.rpm
rpm -ihv --oldpackage hogehoge-3.5-1.i386.rpm
●オプション
--replacepkgs ... すでにインストールされているパッケージを無視してインストールする。
--replacefiles ... ファイルの重複を無視してインストールする。(重複ファイルは置き換えられる。)
--oldpackage ... ダウングレードを許可しインストールする。
--force ... 強制的にインストールする。(上記3つのオプションを指定したことと同じ。)
rpm -ihv --replacefiles hogehoge-3.5-1.i386.rpm
rpm -ihv --oldpackage hogehoge-3.5-1.i386.rpm
●オプション
--replacepkgs ... すでにインストールされているパッケージを無視してインストールする。
--replacefiles ... ファイルの重複を無視してインストールする。(重複ファイルは置き換えられる。)
--oldpackage ... ダウングレードを許可しインストールする。
--force ... 強制的にインストールする。(上記3つのオプションを指定したことと同じ。)
mysql 「Can't connect to local MySQL server through socket」
「ソケット'/tmp/mysql.sock'を通じてローカルのMySQLサーバーに接続することが出来ない」
ソケットとはプロセスやネットワーク間の通信機構のことで、
MySQLではこのソケットを通じてサーバーとクライアントとが接続される。
UNIXドメインソケット(ファイルシステムソケット)と言って、UNIX系OS特有のソケットで、
ローカルシステム内での通信を行う場合に用いられる。
このソケットの実態はサーバー・クライアント間の通信は、
このファイルの入出力を通じて行われる。
●MySQLサーバーが起動していない
「ps ax | grep mysqld」などのコマンドで確認して下さい。
●MySQLサーバーで使っているUNIXソケットとクライアントソフトで使っているUNIXソケットのパスが違う
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/tmp/mysql.sock
クライアント側で
ポート番号を指定する個所でソケットファイルへのパスを指定することが出来る
●ソケットファイルが削除されている
MySQLサーバーを一旦シャットダウンして再起動をかけるとソケットファイルが復元される
ソケットとはプロセスやネットワーク間の通信機構のことで、
MySQLではこのソケットを通じてサーバーとクライアントとが接続される。
UNIXドメインソケット(ファイルシステムソケット)と言って、UNIX系OS特有のソケットで、
ローカルシステム内での通信を行う場合に用いられる。
このソケットの実態はサーバー・クライアント間の通信は、
このファイルの入出力を通じて行われる。
●MySQLサーバーが起動していない
「ps ax | grep mysqld」などのコマンドで確認して下さい。
●MySQLサーバーで使っているUNIXソケットとクライアントソフトで使っているUNIXソケットのパスが違う
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/tmp/mysql.sock
クライアント側で
ポート番号を指定する個所でソケットファイルへのパスを指定することが出来る
●ソケットファイルが削除されている
MySQLサーバーを一旦シャットダウンして再起動をかけるとソケットファイルが復元される
2013/07/04
javaFx version バージョン確認
System.out.println(System.getProperty("javafx.version"));
2013/07/03
mysql rename database
MySQL 5.1.7 で導入された RENAME DATABASE構文がいつのまにかなくなった。
ーーー
mysql> rename database mysample1 to mysample2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database mysample1 to mysample2' at line 1
ーーー
「5.1.7 で導入されたけど、デンジャラスだったので 5.1.23 で亡く」
解決策:
・dumpを取って、新たのDBにリストアする。
他に下記の方法もある
mysql> CREATE DATABASE newdb;
echo "show tables;"|mysql --defaults-file=/etc/mysql/credentials.cnf dbname|head -n -1 >~/tables.txt
cat ~/tables.txt |xargs -L 1|awk '{print "RENAME TABLE dbname."$1" TO newdb."$1";"}' >~/rename.txt
cat ~/rename.txt|mysql --defaults-file=/etc/mysql/credentials.cnf
ーーー
mysql> rename database mysample1 to mysample2;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database mysample1 to mysample2' at line 1
ーーー
「5.1.7 で導入されたけど、デンジャラスだったので 5.1.23 で亡く」
解決策:
・dumpを取って、新たのDBにリストアする。
他に下記の方法もある
mysql> CREATE DATABASE newdb;
echo "show tables;"|mysql --defaults-file=/etc/mysql/credentials.cnf dbname|head -n -1 >~/tables.txt
cat ~/tables.txt |xargs -L 1|awk '{print "RENAME TABLE dbname."$1" TO newdb."$1";"}' >~/rename.txt
cat ~/rename.txt|mysql --defaults-file=/etc/mysql/credentials.cnf
2013/07/01
MySQL default-character-set エラー UTF-8 文字コード
MySQL 5.5ではdefault-character-setが廃止されてた…
★[client]、[mysql]で、default-character-set=utf8を設定する
character_set_client | cp932 クライアント送信用
character_set_connection | cp932 サーバー受信した後、変換用
character_set_results | cp932 サーバー返信用
★[mysqld]でcharacter-set-server=utf8で設定できる
character_set_database | latin1 デフォルト設定
character_set_server | latin1 サーバ側
character_set_filesystem | binary
character_set_system | utf8
character_sets_dir | D:\mysql-5.5.31-winx64\share\charsets\
skip-character-set-client-handshake enforce using of utf8 encoding in db.
★[client]、[mysql]で、default-character-set=utf8を設定する
character_set_client | cp932 クライアント送信用
character_set_connection | cp932 サーバー受信した後、変換用
character_set_results | cp932 サーバー返信用
★[mysqld]でcharacter-set-server=utf8で設定できる
character_set_database | latin1 デフォルト設定
character_set_server | latin1 サーバ側
character_set_filesystem | binary
character_set_system | utf8
character_sets_dir | D:\mysql-5.5.31-winx64\share\charsets\
skip-character-set-client-handshake enforce using of utf8 encoding in db.
java Unsupported major.minor version 51.0
javacでコンパイルしたclassファイルで
「どのバージョンのJavaVMで実行できるか」という“Javaクラスの形式”のバージョンが書かれる。
JavaVM(javaコマンド)では実行できるバージョンが限られており、別バージョンのclassファイルは実行することが出来ないかも
=>「java.lang.UnsupportedClassVersionError: クラス名 (Unsupported major.minor version Mj.Mi)」の例外が発生する。
1.4 =>48.0
1.5 =>49.0
1.6 =>50.0
1.7 =>51.0
使うJDK及びそのJARを修正し、
旧のclassファイルを削除し、
再コンパイルし、治った。
「どのバージョンのJavaVMで実行できるか」という“Javaクラスの形式”のバージョンが書かれる。
JavaVM(javaコマンド)では実行できるバージョンが限られており、別バージョンのclassファイルは実行することが出来ないかも
=>「java.lang.UnsupportedClassVersionError: クラス名 (Unsupported major.minor version Mj.Mi)」の例外が発生する。
1.4 =>48.0
1.5 =>49.0
1.6 =>50.0
1.7 =>51.0
使うJDK及びそのJARを修正し、
旧のclassファイルを削除し、
再コンパイルし、治った。
Eclipse tomcat java.lang.ClassNotFoundException: org.apache.catalina.loader.DevLoader
プロジェクトのプロパティでTomcatを選択し、
開発用クラスローダの設定がある
「使用する」をチェックを外す
治った。。。
開発用クラスローダの設定がある
「使用する」をチェックを外す
治った。。。