Solaris

UNIXTime(数値形式)と DateTime(文字列 YYYY/mm/dd HH:MM:SS)形式の相互フォーマット変換の方法

UNIXTime(数値形式)と DateTime(文字列 YYYY/mm/dd HH:MM:SS)形式の相互フォーマット変換の方法

                              
 

キーワード: UNIXTime, UNIX時間, エポック時間, 時刻フォーマット変換、n時間後, bash, シェルスクリプト, date

このエントリーをはてなブックマークに追加

 

1. 概要

 

UNIXTime(UNIX時間) は Unix/Linux系OSでよく用いられる時刻表現で、1970年1月1日0時0分0秒からの経過秒数のことです。UNIX時間は、UTC(世界協定時刻)になっているので、JST(日本標準時刻)に変換するには+9時間する必要があります。

 

UNIXTime は数値なので計算しやすく、経過時間や何時間前、数日前などの計算をするのには便利ですが、人の目でみて何日なのか判断するが難しいです。このため、時刻計算はUNIXTimeの数値で行い、表示部分には文字列のDateTime形式を使うことが多いです。

 

2. UNIX/Linux の date コマンドを使った方

 

(1) UNIXTime から DateTime 形式にフォーマット変換

 
   

$ date --date "@1460295997"      
Sun Apr 10 22:46:37 JST 2016

 

(2) DateTime から UNIXTime 形式にフォーマット変換

 
   

$ date --date "2016/04/10 22:46:37" +%s      
1460295997

 

 

 

3. Perl の Time::localtime を使った方法

 

(1) UNIX時間の数値から文字列日付形式に変換(Perl)

 
   

$ perl -MTime::localtime -e '$TIME=0x498c8910; $tm=localtime($TIME); printf("%d/%02d/%02d %02d:%02d:%02d\n",$tm->year+1900,$tm->mon+1,$tm->mday,$tm->hour,$tm->min,$tm->sec);'

   

2009/02/07 04:01:36

 

(2) 文字列の日付形式から数値のUNIX時間に変換(Perl)

 
   

$ perl -e 'print 0x498c8910';

   

1233946896

 

 

 

4. n時間後の時刻を得る方法

 

date コマンドを使うと簡単に n 日後や、n時間後などを得ることが出来ます。また任意のフォーマットを指定することが可能です。

 

(1) 現在から n日後を得る方法

 

date --date "n days"

 

date コマンドの date オプションで n days の n に数値を入れます。1日後を得る例です。

 
   

$ date      
Sun Apr 10 22:51:09 JST 2016      
$ date --date "1 days"      
Mon Apr 11 22:51:12 JST 2016

 

(2) 現在から n 日前を得る方法

 

date --date "n days ago"

 

date コマンドの date オプションに n days ago と指定します。n部分に数値を入れます。1日前を得る例です。

 
   

$ date      
Sun Apr 10 22:53:04 JST 2016      
$ date --date "1 days ago"      
Sat Apr  9 22:53:08 JST 2016

 

(3) 指定時刻から n 日後を得る方法

 
   

$ date --date "2016/04/10 22:54:00 1 days ago"      
Sat Apr  9 22:54:00 JST 2016

 

(4) 指定時刻から n時間後を得る方法

 
   

$ date --date "2016/04/10 22:54:00 1 hours"      
Sun Apr 10 23:54:00 JST 2016

 

(5) 指定時刻から n時間前を得る方法

 
   

$ date --date "2016/04/10 22:54:00 1 hours ago"      
Sun Apr 10 21:54:00 JST 2016

 

4. 関連リンク

 

 

 

 

                              

TeraTerm のマクロ機能でSSHサーバでのコマンド処理を自動化する自動化する方法

TeraTerm のマクロ機能でSSHサーバでのコマンド処理を自動化する方法

teraterm   

スポンサーリンク

 

キーワード: TeraTerm、SSH、自動ログイン、自動化、サーバ運用、ログフォーマット

このエントリーをはてなブックマークに追加

 

 

 

1. 概要

 

Windows のSSH クライアントソフト TeraTerm のマクロ機能を使って自動でSSHログインしてサーバでのコマンド処理などを自動化する方法を紹介します。

 

server1 に公開鍵認証でログイン後、自動的に server2 にSSHログインするマクロの例です。TeraTerm接続ログを日付形式(YYYYmmdd-HHMM)で記録します。このマクロを使うことで、自動的に対象マシンにSSHでログインして、コマンド等を実行して結果を取得するなどの処理を自動化することが出来ます。

 

 

2. 自動SSHログインするTeraTerm マクロの概要

 
       
  1. ログファイルフォーマットの設定(YYYYmmdd-HHMM.log)
  2.    
  3. ログ取得開始
  4.    
  5. server1 へ SSH ログイン(公開鍵認証、パスフレーズを聞いてくる)
  6.    
  7. server1 から server2 へSSH ログイン(パスワード認証、パスワード自動送信)
 

 

 

3. TeraTerm マクロの例

 

スポンサーリンク

 

   

getdate curDate      
strcopy curDate 1 4 Year      
strcopy curDate 6 2 Month      
strcopy curDate 9 2 Day      
gettime curTime

   

strcopy curTime 1 2 Hour      
strcopy curTime 4 2 Min      
strcopy curTime 7 2 Sec

   

strconcat logfile 'c:\'      
strconcat logfile Year      
strconcat logfile Month      
strconcat logfile Day      
strconcat logfile '-'      
strconcat logfile Hour      
strconcat logfile Min      
strconcat logfile '.log'

   

connect 'SEREVR1:PORT /ssh /2 /auth=publickey /user=USER1 /ask4passwd /keyfile=id_rsa'

   

logopen logfile 0 1

   

wait '[USER1@SERVER1'      
sendln 'ssh SERVER2'      
wait USER2@SERVER2's password:      
sendln 'password'

   

sendln '自動実行したいコマンドやバッチ'

 
       
  • SERVER1:PORT 一段目のSSHサーバとポート番号
  •    
  • USER1 一段目のSSHサーバのログインユーザ名
  •    
  • id_ras 一段目のSSHサーバのログインユーザの秘密鍵
  •    
  • SERVER2 二段目のSSHサーバ
  •    
  • USER2 二段目のSSHサーバのログインユーザ名
 

 

 

4. TeraTerm マクロの実行

 

TeraTerm のマクロファイルは、拡張子が .ttl となっています。ttmacro.exe と関連付けされていれば、マクロファイルをダブルクリックすれば実行されます。    
実行できない場合は、%PROGRAMFILES%\teraterm\ttpmacro.exe と関連付けを行ってください。

 

スポンサーリンク

join コマンド - 2つのテキストファイルを共通フィールドで結合する Linux コマンド

join コマンド - 2 つのテキストファイルを共通フィールドで結合するLinuxコマンド

 

キーワード: join、ファイル結合、テキスト処理、Linux、Ubuntu、CentOS、Debian、Solaris、Unix

 

このエントリーをはてなブックマークに追加

 

スポンサーリンク

 

1. 概要

 

Linux の標準コマンドである join コマンドを使うと、2つのテキストファイルを共通フィールド(列)で結合することが出来ます。

 

2. join コマンドの使い方

 

(1) join コマンドの使い方

 

「フィールド区切り文字」、「結合したいフィールド番号」、「結合したいファイル1」と「結合したいファイル2」を指定します。

 
   

join [オプション] [結合したいファイル1] [結合したいファイル2]

   

例) join –t, –j 1 text1.txt text2.txt

 

(2) join コマンドのオプション

 
   

-t [フィールド区切り文字] 

 

「,」や「\t(タブ)」、「\ (スペース)」などを指定します。

 
   

-j [結合したいフィールド番号]

 

1列名で結合したければ「1」など数値を指定します。

 
   

-1 n  -2 n

 

「1つ目のファイルの n 列目」と2つ目のファイルのn列目」を結合する指定方法

 

 

 

スポンサーリンク

 

3. join コマンドを使った結合例

 

① 商品コード、商品名のテキスト

 
   

$ cat cat.txt      
001,carrot      
002,potato      
003,orange      
004,apple      
005,garlic

 

② 商品コード、価格のテキスト

 
   

$ cat price.txt      
001,100円      
002,200円      
003,300円      
004,400円      
005,500円

 

join コマンドで2つのテキストファイル ① cat.txt と ② price.txt を「商品コード」のフィールドで結合

 
   

$ join -t, -j 1 cat.txt price.txt      
001,carrot,100円      
002,potato,200円      
003,orange,300円      
004,apple,400円      
005,garlic,500円

 

スポンサーリンク

DAT テープでのバックアップとリストア方法

DAT テープでのバックアップとリストア方法


キーワード: Solaris、 Unix、バックアップ、リストア、DDS3、DATテープ

このエントリーをはてなブックマークに追加

1. 概要

Solaris の UFS ファイルシステムで DAT テープを使ってバックアップ、リストアする手順を紹介します。紹介する手順では、テープを操作するためのコマンドである mt と、ファイルシステム単位でのバックアップを取得することができる ufsdump コマンド、ファイルシステム単位でリストアするためのコマンド ufsrestore を使います。リストア後のブートブロックの作成を忘れると起動しないので注意してください。

2. バックアップ手順

  1. パーティション情報の確認

    # cat /etc/vfstab

  2. バックアップのサイズを見積もる(単位:はバイト)

    # ufsdump  S (filesystem)

  3. バックアップ取得
  • スーパーユーザーになる。

#  su root

  • システム停止。

#  init 0

  • システムをレベルSに遷移

  ok boot -s

  • ファイルシステム整合性チェック[省略可能]

  # fsck -m /dev/rdsk (device-name)

  • DATでバックアップ取得

# ufsdump  0ucf  /dev/rmt/0n   /     (ルートパーティション取得)
# ufsdump  0ucf  /dev/rmt/0n   /export/home

  • 他のパーティションに付いても同様に取得を繰り返す。

  #  mt  -f  /dev/rmt/0n rewind    (DATテープ巻きも度し)
  #  ufsrestore  tf  /dev/rmt/0     (ルートパーティション取得確認)
  #  ufsrestore  tf  /dev/rmt/0     (export/homeパーティション取得確認)

  • 他のパーティションに付いても同様に確認を繰り返す。


3. リストア手順

  • 新しいファイルシステムを仮にマウント

  # mount  /dev/dsk/device-name  /mnt

  • 復元ディレクトリに移動

  # cd  /mnt

  • テープデバイスのエントリ作成

  # tapes

  • ルートファイルシステムを復元

  # ufsrestore  rvf  /dev/rmt/0n
  # ufsrestore  rvf  /dev/rmt/0n
  必要なだけ繰り返す。

  • ファイル復元の確認

  #  ls

  • テンポラリーファイルの削除

  #  rm  restoresymtable

  • ルートディレクトリに移動

# cd  /

  • 仮のマウントポイントを解除

  # umount  /mnt

  • ファイルシステムの整合性確認

  #  fsck  /dev/rdsk/device-name

  • ブートブロック作成

(solaris2.6 )
  # installboot   /usr/platform/`uname  -i`/lib/fs/ufs/bootblk  \
                  /dev/rdsk/devicename
(SPARC)
  # installboot   /usr/platform/`uname  -i`  \
                  /lib/fs/ufs/bootblk  /dev/rdsk/c0t3d0s0

  • 新しいファイルシステムのバックアップを取得
  • 必要であればusrファイルシステムに付いても実行
  • システムをリブート

  #  init  6


Apache Struts2 の脆弱性(CVE-2014-0094) S2-020 を悪用する攻撃コードが公開

Apache Struts2 の脆弱性(CVE-2014-0094) S2-020 を悪用する攻撃コードが公開

概要

Java の Webアプリケーション開発で多く利用されているフレームワーク Apache Struts 2 のバージョン 2.0.0 ~ 2.3.16.1 に、ClassLoader を操作される脆弱性CVE-2014-0094CVE-2014-0112CVE-2014-0113CVE-2014-0116)(S2-021S2-022)が見つかっています。情報処理推進機構(IPA) によると、この CVE-2014-0094 の脆弱性を悪用する攻撃コードが公開されているとの情報があり、再現検証を実施した結果、ウェブアプリケーションの権限を使って情報窃取やファイル操作、ウェブアプリケーションを一時的に使用不可にできることを確認したとのこと。

Apache Struts は、昨年2013年7月にも深刻な脆弱性(S2-016; CVE-2013-2251)が発見されており、検証コード公開により攻撃が急増。ウェブサーバに不正に web shell (ウェブシェル)などを設置され、データベースなどの情報を盗み取られる等の被害が多数出ました。

CVE-2014-0094 (S2-020) についても、今回の攻撃コード公開により脆弱性を持つウェブサーバが被害を受ける可能性が非常に高まっています。早急に対策することをお勧めします。


CVE-2014-0094 (S2-020) の脆弱性の概要

Apache Struts2 のデフォルトアップロードメカニズムに DoS 攻撃可能な脆弱性がある。また、ParametersInterceptor には、class パラメータを使って ClassLoader を操作出来てしまう脆弱性がある。

The default upload mechanism in Apache Struts 2 is based on Commons FileUpload version 1.3 which is vulnerable and allows DoS attacks. Additional ParametersInterceptor allows access to 'class' parameter which is directly mapped to getClass() method and allows ClassLoader manipulation.


影響を受けるソフトウェア

CVE-2014-0094 の対策版である Apache Struts 2.3.16.1 も不備があり影響を受けます。 また、Apache Struts 1 についても同様の脆弱性があることが確認されました。


対策

脆弱性が修正された Apache Struts 2.3.16.1 にアップデートする

脆弱性が修正された Apache Struts 2.3.16.2 にアップデートする

Apache Software Foundation からのアナウンス
http://struts.apache.org/announce.html#a20140424

脆弱性が修正された Apache Struts 2.3.16.3 にアップデートする

Apache Struts 2.3.16.3 では、以下の複数の脆弱性が修正されている

RedHat Enterprise Linux  5 の Struts1 に関しては Struts1 CVE-2014-0114 修正アップデートを適用する


回避策(暫定対策)

すぐに Apache Struts のバージョンアップは難しい場合は回避策を実施する。また、Apache Struts1 は、すでにサポートが終了しているため対策版はリリースされません。回避策を参考に対策する必要があります。


攻撃情報

Apache Struts 2 の S2-020 の攻撃の検知情報が出てきました。早急に対策する必要があります。

Struts 1の内部動作上、「class」の先頭の大文字・小文字は区別されます。そのため、先頭の「c」が大文字の場合、今回の脆弱性をついた攻撃は成功しません。


関連URL

  • StrutsのClassLoader脆弱性はSAStrutsに影響しません - ひがやすを blog
  • http://d.hatena.ne.jp/higayasuo/20140425/1398403491

    このような問題を起こすリフレクションフレームワークで最も有名なのは、Apache Commons BeanUtilsです。リクエストのパラメータをBeanUtilsを使って、JavaBeansにセットしているフレームワークは、Strutsに限らず同じことが起きると思います。

  • 無償グループウェア「GroupSession」に「Apache Struts」起因の脆弱性 - 窓の杜
  • http://www.forest.impress.co.jp/docs/news/20140508_647318.html

    日本トータルシステム(株)は4月28日、無償で利用できるJava製の国産グループウェア「GroupSession」の最新版v4.2.6を公開した。本バージョンでは「Apache Struts」に起因する脆弱性が修正されている。

    「GroupSession」は、内部で「Apache Struts 1」を利用しているそうです。このため、脆弱性(CVE-2014-0094)の影響を受ける可能性がある。GroupSession v4.2.6 では修正されている。

  • CVE-2014-0114 は Red Hat 製品に含まれる Struts 1 に影響がありますか - Red Hat Customer Portal
  • https://access.redhat.com/site/ja/node/870563

    Struts 1 はすでにアップストリームでサポートされておらず、アップストリームではパッチ作成の責務はありません。Red Hat は、影響を受ける製品のパッチについて、高い優先度で対応中です。

    Red Hat はパッチ作成の責務はないけど、何らかの対応はするつもり?

  • 【セキュリティ ニュース】【修正】「Apache Struts 2.3.16.2」が公開 - 対応不十分だった深刻な脆弱性に対応:Security NEXT
    http://www.security-next.com/048414

  • Struts2 S2-020在Tomcat 8下的命令?行分析 - 百度安全中心
    http://sec.baidu.com/index.php?research/detail/id/18
  •   検証していませんが S2-020 の POC などの記載がありました。
    ClassLoader を使って Tomcat のログの出力先やファイル名を変更して、wepapps/ROOT などの公開ディレクトリ上に shell1.jsp を作成。
    shell1.jsp ログとして「<%Runtime.getRuntime().exec("calc");%>」などの jspコードを記録させて、shell1.jsp を呼び出すと calc が実行されるというもの。



Solaris システム停止コマンドの違い(halt,poweroff, telinit)

Solaris システム停止コマンドの違い(halt, poweroff, telinit)


  • /usr/sbin/halt
  •     プロセス停止、ディスク同期、ファイルシステムのマウント解除
        可能であれば電源を切る。
        ただし、rc0 スクリプトを実行しないため推奨できない

  • /usr/sbin/poweroff
  •     halt へのシンボリックリンク

  • /sbin/init
  •     rc* スクリプトを実行しプロセスを停止

  • /etc/telinit
  •     init へのシンボリックリンク

  • /usr/sbin/uadmin
  •     システム停止、リブート、サスペンドなどを行う
        /etc/inittab を参照しないため停止コマンドとしては推奨できない

    Solaris/Linux パフォーマンスをチェックするコマンド vmstat/iostat/sar

    Solaris/Linux パフォーマンスをチェックするコマンド vmstat/iostat/sar

    仮想メモリー統計情報 vmstat
    システムイベント情報 vmstat -s
    スワップ統計情報 vmstat -S
    キャッシュフラッシュ統計情報 vmstat -c
    各デバイス当たりの割り込み数 vmstat -i
    ディスクの使用状況 iostat
    拡張ディスク統計情報 iostat -xtc
    ファイルシステム情報
    df
    ファイルアクセスをチェック
    sar -a
    バッファー動作チェック
    sar -b
    システムコール統計情報
    sar -c
    ディスク動作をチェック
    sar -d
    ページアウトとメモリをチェック
    sar -g
    カーネルメモリーの割り当てチェック
    sar -k
    プロセス間通信チェック
    sar -m
    ページイン動作チェック
    sar -p
    待ち行列動作チェック
    sar -q
    未使用メモリーチェック
    sar -r
    CPU の使用状況チェック
    sar -u
    システムテーブルの状態チェック
    sar -v
    スワップ動作をチェック
    sar -w
    端末動作チェック
    sar -y
    システム全体の性能をチェック
    sar -A

    Solaris/Linux vmstat の見方

    Solaris/Linux vmstat の見方

    us    ユーザ時間
    sy    システム時間
    id    アイドル時間
    r      プロセスの実行キュー内にあるプロセス数

    id : 10 ~ 20%, 40% でCPU増設
    r  : 1 より大きい場合はプロセスの競合が発生していると考えられる。
         → CPU 増設

    ユーザ時間に比べて、システム時間が長くなる場合、
    ハードウェアに関わる要因を調査する必要がある

    ページングは、lotsfree で設定された値より空き容量が
    小さくなったときにページ・デーモンが起動され発生する

    リサイクルキャッシュにより連続したランダムI/O のスループットの
    向上と同じにメモリ割り当ての遅延の短縮が実現される。

    <swap>
    使用可能なスワップ空間(kb)

    <free>
    利用可能なメモリ空き容量(kb)

    <re(page reclaim)>
    ページアプトの対象となったが別プロセスで再利用されず
    元のメモリーイメージが残ったままになっているページの数

    ページフォルト
    <pi>
    ページインされたページ(kb/s)

    <mf(minor fault)>
    アドレス空間またはハードウェアアドレス変換フォルトによって
    発生したページフォルトで、ページインなしに解決できるもの

    ページアウトされたデータ量

    <po>
    ページアウトされたページ(kB/s)

    <fr>
    メモリが開放される速さを表示(kB/s)

    <de>
    一時的にメモリ不足が発生した場合のヒステリシスを測定するパラメータ

    <sr>
    ページデーモンの走査速度


    TeraTerm のマクロ機能でSSHサーバでのコマンド処理を自動化する自動化する方法

    TeraTerm のマクロ機能でSSHサーバでのコマンド処理を自動化する方法

    teraterm

    スポンサーリンク

    キーワード: TeraTerm、SSH、自動ログイン、自動化、サーバ運用、ログフォーマット

    このエントリーをはてなブックマークに追加

     

    1. 概要

    Windows のSSH クライアントソフト TeraTerm のマクロ機能を使って自動でSSHログインしてサーバでのコマンド処理などを自動化する方法を紹介します。

    server1 に公開鍵認証でログイン後、自動的に server2 にSSHログインするマクロの例です。TeraTerm接続ログを日付形式(YYYYmmdd-HHMM)で記録します。このマクロを使うことで、自動的に対象マシンにSSHでログインして、コマンド等を実行して結果を取得するなどの処理を自動化することが出来ます。

    2. 自動SSHログインするTeraTerm マクロの概要

    1. ログファイルフォーマットの設定(YYYYmmdd-HHMM.log)
    2. ログ取得開始
    3. server1 へ SSH ログイン(公開鍵認証、パスフレーズを聞いてくる)
    4. server1 から server2 へSSH ログイン(パスワード認証、パスワード自動送信)

     

    3. TeraTerm マクロの例

    スポンサーリンク

    getdate curDate
    strcopy curDate 1 4 Year
    strcopy curDate 6 2 Month
    strcopy curDate 9 2 Day
    gettime curTime

    strcopy curTime 1 2 Hour
    strcopy curTime 4 2 Min
    strcopy curTime 7 2 Sec

    strconcat logfile 'c:\'
    strconcat logfile Year
    strconcat logfile Month
    strconcat logfile Day
    strconcat logfile '-'
    strconcat logfile Hour
    strconcat logfile Min
    strconcat logfile '.log'

    connect 'SEREVR1:PORT /ssh /2 /auth=publickey /user=USER1 /ask4passwd /keyfile=id_rsa'

    logopen logfile 0 1

    wait '[USER1@SERVER1'
    sendln 'ssh SERVER2'
    wait USER2@SERVER2's password:
    sendln 'password'

    sendln '自動実行したいコマンドやバッチ'

    • SERVER1:PORT 一段目のSSHサーバとポート番号
    • USER1 一段目のSSHサーバのログインユーザ名
    • id_ras 一段目のSSHサーバのログインユーザの秘密鍵
    • SERVER2 二段目のSSHサーバ
    • USER2 二段目のSSHサーバのログインユーザ名

     

    4. TeraTerm マクロの実行

    TeraTerm のマクロファイルは、拡張子が .ttl となっています。ttmacro.exe と関連付けされていれば、マクロファイルをダブルクリックすれば実行されます。
    実行できない場合は、%PROGRAMFILES%\teraterm\ttpmacro.exe と関連付けを行ってください。

    スポンサーリンク

    IP アドレスを 2進数および 10進数に変換 (perl)

    IP アドレスを 2進数および 10進数に変換 (perl)


    キーワード: IPアドレス変換、2進数、10進数

                                       

    このエントリーをはてなブックマークに追加

    文字列のIPアドレスを数値に変換

    ログ解析や統計処理などを行う際、文字列のIPアドレス(例えば"10.0.0.1" など)を、数値("167772161" など)に変換して処理したいことがあります。その際に使える文字列の IPアドレスを数値に変換する簡単な perl スクリプトを紹介します。

    IP アドレス 10.0.0.1 を 2進数および 10進数に変換する

    perl -e 'my $bin = sprintf "%08b%08b%08b%08b", 10,0,0,1; print "$bin\n"; print oct("0b$bin") . "\n"';

    00001010000000000000000000000001
    167772161

    その逆

    perl -e '$dec = 167772161 ; $bin = sprintf "%032b", $dec; my @list = $bin =~ m/.{8}/g;  print oct("0b$list[0]") . "." . oct("0b$list[1]") . "." . oct("0b$list[2]") . "." . oct("0b$list[3]") . "\n"'

    10.0.0.1

    スポンサーリンク

    記事一覧

    スポンサードリンク


    Twitter


    無料ブログはココログ

    ブログ検索