たかまるの雑記

たまに更新

bashで1時間前以降のmessagesを表示

作業をはじめた以降とか、スクリプトを実行した以降など
いまから○○時間 or ○○分前以降のmessagesを確認したい、というときは
こんな感じで表示している

1時間前以降のログを表示する(bash
starttime=$(LANG=C date +'%b %e %T' -d '1 hour ago')
awk '$1$2$3>="'${starttime// }'"' /var/log/messages

※ /var/log/messagesの日時が「Nov  7 23:55:40」のような形式のとき
dateの%Tは%H:%M:%Sと同じ


Hp-UXのsh(ksh)では変数のパターンの置換ができないから、
trで空白を削除している

OVAファイルをHyper-Vの形式に変換する

OVA形式のファイルをHyper-VのVHDX形式のファイルに変換する

1. Microsoft Virtual Machine Converter をつかう

  1. ovaファイルを解凍してvmdkファイルを取り出す
  2. Microsoft Virtual Machine Converter をインストールする https://www.microsoft.com/en-us/download/details.aspx?id=42497
    ※サポート終了
  3. Powershellを管理者で起動する
  4. モジュールをインポートする
    import-module "C:\Program Files\Microsoft Virtual Machine Converter\MvmcCmdlet.psd1"
  5. 変換する
    convertto-mvmcvirtualharddisk -sourceliteralpath file.vmdk -destinationliteralpath file.vhdx -vhdformat vhdx -vhdtype fixedharddisk or dynamicharddisk
エラーになったとき

The entry ○○○ is not a supported disk database entry for the descriptor.
と表示されたときは、dsfokツールを使用して修正する


2. vboxmanage(VirtualBox)をつかう

  1. ovaファイルを解凍してvmdkファイルを取り出す
  2. VirtualBox をインストールする https://www.virtualbox.org/wiki/Downloads
  3. Powershellを起動する
  4. 変換する
    c:\Program` Files\Oracle\VirtualBox\vboxmanage clonehd file.vmdk file.vhd -format VHD
vhdをvhdxに変換するときは、Hyper-V マネージャーをつかう
  1. ディスクの編集で仮想ハードディスク編集ウィザードを起動
  2. ディスクの場所でvhdファイルを選択
  3. 操作の選択で変換ををチェック
  4. ディスクフォーマットの選択でVHDXをチェック
  5. ディスクの種類で容量固定 or 容量可変をチェック
  6. ディスクの構成で出力ファルパスを入力

Hyper-Vの仮想マシンにCentOSをインストールするときはセキュアブートを無効にする

Hyper-V仮想マシンCentOSをインストールするときは
セキュアブートを無効にする

f:id:takamaruo:20181103002448p:plain


有効の状態で、ISOイメージをマウントしてインストールしようとすると
The image's hash and certificate are not allowed (DB). と表示されて
インストールできない

f:id:takamaruo:20181103003018p:plain

インストール後に有効に戻すと、OSが起動しなくなる

Ubontoのviの配色を変更する

Ubontoのviのデフォルトの配色が見づらい。
特にコメント。
:colorschemeでカラースキームを設定できる。


個人的には↓が見やすいと思った。

  • elflord
  • industry
  • murphy
  • ron


ホームディレクトリに.vimrcをつくって設定すれば
自動的に設定されるようになる。

$ ed -s ~/.vimrc
i
:colorscheme murphy
.
wq

shでの数値の計算

shでは(( exp ))で計算できる

$ a=100
$ a=$((a+1))
$ echo $a
101
$


数字以外を指定するとエラーになる

$ a=abc
$ a=$((a+1))
sh: 2: Illegal number: abc
$ echo $?
2
$ echo $a
abc
$


計算を関数にした場合、数値以外を指定すると、
エラーになった箇所で止まってしまう。
(a+1の次の行、ここではb=$?以降が実行されない)

f1()
{
  echo f1
  a="abc"
  a=$((a+1)) 2>/dev/null
  b=$?
  echo $a
  return $b
}

※計算の標準エラー出力をすてる場合、Ubuntoのshは上の方法で可能だが、
HP-UXではできない。HP-UXでは { a=a=$((a+1)); } 2>/dev/null

計算をexprで実施するとエラー以降の行も実行される a=$(expr $a + 1 2>/dev/null)

(( exp ))形式でのエラーのときも処理を止めないようにする方法はあるのだろうか。

bashで自分のファイル名をとる

bashスクリプトで自分自身のファイル名を取得するときは
BASH_SOURCE[0]をつかう。

sample1.sh
#/bin/bash

. $(dirname $0)/sample2.sh

function f1
{
  f2
}

f1
sample2.sh
#!/bin/bash

function f2
{
  echo $0
  basename ${BASH_SOURCE[0]}
}

sample1.shを実行すると、f2の$0には sample1.shが、
${BASH_SOURCE[0]}にはsample2.shが設定されている


ファイル名を取得するときに basename をつかわないで
${BASH_SOURCE[0]##*/}としてもファイル名だけが取得できる。
(先頭から*/と一致する部分を削除するので、ファイル名のみになる)

ディレクトリパスはdirname以外の簡単な方法は思いつかない。
${BASH_SOURCE[0]%%${BASH_SOURCE[0]##*/}}で取得できるけど
これならdirnameのほうが良い。
(後方からファイル名と一致する部分を削除するのでディレクトリパスになる)

ディレクトリの絶対パスを取得するときはこんな感じ。
$(cd -- $(dirname -- ${BASH_SOURCE[0]}) && pwd -P)

cdしてpwdしてディレクトリパスを取得する。
--ディレクトリ名の先頭が-でも良いようにつけている。
(先頭が - だとコマンドのオプションと判断されてしまうため)
pwdに-Pオプションをつけると、シンボリックリンクではなく、
実際のパスが表示される。