先日、Amazon FireTVを購入した。
もともとAppleTVは持っていたのだけど色々と他のことも出来そうなので、実家への導入テストも兼ねて購入。

大体いじって、プライムビデオだけでも十分楽しめる状態ではあったのだけど、その他DLNAクライアントにしたりゲームできるようにしたかったので、FireTVにAndroidアプリを導入してみることにした。

ただ、Amazon Fire端末の場合だとGooglePlayが使えなかったり、Android用のアプリを入れるのに手間がかかるようだ。Android端末があれば簡単なようだが、残念ながら今は持っていない(車に轢かれて破壊された…)。...


systemdで特定のサービスと連動して他のプロセス・サービスを起動・停止させる

※2016/01/26 13:00
そもそも、systemdだったら依存関係についてAfterやBefore、Requestがあることに気づいた。こんな回りくどいことしなくてもよさそうなので、2016/01/27に追記・修正を行っている。


仕事で、特定のプロセスが落ちたら強制的にそのプロセスを前提として動作しているサービスも落とす必要が出てきたので、どうにか実現できないか調べてみた。
そしたらCentOS7で採用されているsystemdでは、プロセスの依存関係について記述出来るようなので、それで実現することにした。

基本的には、「.service」ファイルの[UNIT]項目に、以下...


コンソール上で使用する計算用コマンド『wcalc』を入れてみた

コンソール上で色々な計算が出来る『wcalc』というコマンドがあるようなので、実際に入れてみる事にした。
試した環境は、Ubuntu 14.04 LTSだ。

1.インストール

まずはインストール。
以下のコマンドで行う。

apt-get install wcalc

2.コマンドを使ってみる

さて、それでは実際にコマンドを使ってみよう。
wclacでは、普通に計算式を打つことで、その解答を得る事が出来る。例えば、以下のように数式を実行してみる。

wcalc '(1+2+3+4+5+10)/(1112-41431)'

blacknon@BS-PUB-UBUNT...

自宅のUbuntu Server 14.04 LTSにスタティックルートを設定する機会があったので、その備忘。
Ubuntuでは、永続的なスタティックルートを追加する場合、以下の2通りの方法があるようだ。

1.『/etc/network/interfaces』に直接記述する

Ubuntuのネットワーク設定ファイルである、「/etc/network/interfaces」に、以下のように追記することで設定できる。

auto eth1
iface eth1 inet static
        address 192.168.0.100
        netmask 255.25...

Linux/UNIXのコンソール上で10進数⇔16進数変換を行う

ふと、コンソール上で10進数⇔16進数の変換を行う方法ってどんなものがあるのか、と思ったので、少し調べてみることにした。
とりあえず、以下の2つの手法が簡単に変換でき、おすすめだ。

1.echo+bcで対応する

echo+bcの組み合わせで、うまいこと変換させることが出来る。

10進数→16進数

echo "obase=16; 10進数"|bc

16進数→10進数

echo "ibase=16; 16進数"|bc

[root@localhost ~]# echo "obase=16; 162"|bc
A2
[root@localhost ~]#
[root@l...

AWSでElastiCacheにRedisを使っているのだが、その死活監視について調べていたところ、どうもパフォーマンスなんかはDatadogで取得出来そうなんだけど、死活監視って形では用意されていないようだった。
で、redis-cliでなら簡易的なヘルスチェックが出来そうなので、それで当面は対応しようかと思ったので、その備忘。

やることは単純で、redis-cliでping実行して、それでredisが上がってる(PONGが返ってくる)ようなら正常終了(exitコードが0になる)するので、それで判断する。

redis-cli -h Redisサーバのホスト ping

...

Linux/UNIXでプロセスごとのリソース消費量を確認する

Linux/UNIXで、OS全体ではなく特定のプロセスで使用しているリソースのみを取得したい場合は、主に以下の2通りになるだろう。

1.psコマンドで取得する

psコマンドでは、「u」を付与することでCPUやメモリ使用率について取得することも出来る。
例えば、以下の例では全ユーザで実行している、topコマンドについてCPU・メモリ使用率を出力させている(中身はgrepっぽいので、そのものずばりだけ抽出出来ないけど)。

ps au -C top

[root@localhost ~]# ps au -C top
USER       PID %CPU %MEM    VSZ...

VyOSでホスト名の静的マッピングを行う

諸事情あって、自宅のVyOSにホスト名の静的マッピングを行いたくなったので、その方法について調べてみた。
で、ちゃんとそれ用のコマンドが用意されているようなので、使ってみる事にする。

set system static-host-mapping host-name ホスト名 inet IPアドレス

vyos@BN-RT01# cat /etc/hosts
127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback...

CentOS 7をActive Directoryのドメインに参加させる

自宅にSamba4を用いたDomain Controllerを構築したので、それにCentOS 7を参加させてみる事にする。
まずは参加させるCentOS 7側で、以下のコマンドを実行し必要になるパッケージをインストールする。

1.必要パッケージの導入

yum -y install realmd sssd oddjob oddjob-mkhomedir adcli samba-common

2.AD参加設定

次に、参照するDNSサーバをDCのアドレスに変更する。

nmcli c modify インターフェイス名 ipv4.dns DCのアドレス
nmcli c down...

WindowsでLinux/UNIXのtouchコマンド相当(0Byteのファイル作成)の処理

Windowsでサンプルファイル(0Byteのファイルを20個くらい)を作成する事になったので、Linuxでいうtouchコマンドに当たるコマンドについて調べてみた。
といっても、別にタイムスタンプ変える事は考えず、単に空ファイル作成するだけなのだが。

コマンドプロンプトとPowerShell、それぞれで0Byteのファイルを作るコマンドは以下のようだ。

コマンドプロンプトで作成する

コマンドプロンプトで0Byteのファイルを作成する場合は、以下のようにnul(Linuxでいう/dev/null)をコピーして作成する方法がある。

copy nul 作成するファイル名(PATH...

UNIX/Linuxでコマンドのexitコードを反転させる

仕事で、正常終了時にコマンドのexitコードを0に、異常終了時には1にしたいとの話があり、やり方ってなんか無いのかな?と調べたので、その備忘。
やり方は簡単で、単に対象のコマンド実行時に頭に「!」をつけるだけだ。

! exitコードを反転させたいコマンド

Datadogで特定のプロセス数を監視(プロセス数がXX個以下、△△個以上だったらアラート出す)したい場合、Datadogの設定画面からの操作ではなく、まず各サーバに配布するDatadog Agentの設定ファイルに対象のプロセスとその閾値を設定してあげる必要がある。

対象プロセスとその閾値は、「/etc/dd-agent/conf.d/process.yaml」で設定できる。


Linux/UNIXでsed or awkを使ってファイルの特定列だけ置き換える

LinuxやUNIXで、区切り文字で句切られているファイルの、特定の列だけ値を置き換える場合は、sedかawkを用いる事で楽に行う事ができる。

sedで行う場合

sedで特定列のみ置き換える場合は、以下のようにコマンドを実行する。

sed '{s/"区切り文字"[^"区切り文字"]*}/"区切り文字"置換後の文字/置き換える列-1} 対象ファイル

例えば、「,(カンマ)」で句切られたファイルの3列目を「hige」に置き換える場合だと、以下のように記述する。

sed '{s/,[^,]*/,hige/2}' 対象ファイル

[root@localhost ~]# cat...

MariaDBでmysqlコマンドを使ってSQLの結果をカラム無しの値のみ取得する

仕事で、SQLで取得した値に応じて処理を変えるようなスクリプトが必要になったのだが、その際に普通にコマンドを実行するとカラムも一緒に出力されてしまい、データとして扱いにくいという事があった。

mysql -u root test -e 'SQL文;'

[root@localhost log]# mysql -u root test -e 'select name from test where num = 2;'
+--------+
| name   |
+--------+
| TEST-2 |
+--------+


ProxmoxVE4でPCIパススルーを行ってみた

以前、Proxmox VE 3.1でPCIパススルーを行っているが、それと同様の処理をProxmox VE 4でも行ってみる。
前回と同じく、まずは以下のコマンドでgrubを編集し、Intel VT-dを有効にする。

sed -i '/GRUB_CMDLINE_LINUX_DEFAULT/cGRUB_CMDLINE_LINUX_DEFAULT="quiet iommu=pt intel_iommu=on vfio_iommu_type1.allow_unsafe_interrupts=1"' /etc/default/grub
update-grub

再起動後、以下のコマンドでI...


jqコマンドで値の有無(null)を判別させる

最近、仕事でAWSやAzureを利用するようになってから、JSON形式のファイルに触れる事が多くなってきた。
JSON形式のファイルをイジる場合、MacやLinux環境だとjqコマンドというものを用いると楽に整形出来るので良く利用しているのだけど、これで特定の項目がnullの場合(nullじゃない場合)に対象のデータを表示させるような使い方(具体的には、AzureのパブリックIPに対してhostsの自動生成をする際、払いだされてない仮想マシンを除外するため)が必要になったので、その備忘。


timeoutコマンドによる指定時間経過時の処理切り替え

仕事で、わざわざその為にスクリプトを組むのも面倒な、プロセス停止に時間がかかるようであればプロセスをkillしてしまうという対応があった。
面倒なのでワンライナーで対処できないかなぁ。。。と思い調べたところ、Linuxのディストリではtimeoutコマンドというものが用意されているようだ。

使い方は簡単で、以下のようにtimeoutコマンドを実行するだけだ。

timeout 待機時間(秒) 実行コマンド

で、実行コマンドが待機秒内で終了しない場合、exitコード124で異常終了する。

[root@BS-PUB-CENT7-01 ~]# # 5秒でタイムアウト(2秒slee...

pfSenseで国ごとのアクセス制限を実施する

この年末年始を利用して、自宅環境を一新するにあたりFWをpfSenseにしたのだけど、ログを見ると結構いろんな国からのアクセス…というかアタックがあるようだ。
あんまり変なとこから来られても困るので、国レベルでの接続制限を設定することにした。

1.『pfBlockerNG』のインストール

まずはpfSenseのWebUIにアクセスし、[System] > [Package] >[Available packages]と開き、『pfBlockerNG』の横にある+ボタンをクリックする。

次の画面で本当にインストールしていいかどうか確認を求められるので、「Confirm」をクリッ...


この度、ラックを買ったので自宅環境を一新するにあたり、仮想基盤を全てProxmoxで統一(一部テスト用にESXi)したのだけど、その際に仮想マシンにUSBパススルー設定をする必要があったのでその備忘。
WebUIから設定が行えないので、基本的にCUIで設定を行う必要がある。

まず、ProxmoxVEホストにssh接続し、lsusbでパススルーしたいUSBのBUSを確認する。

lsusb
root@BS-PHY-PROX-01:~# lsusb
Bus 002 Device 002: ID 0bda:817f Realtek Semiconductor Corp. RTL8188R...

Linuxのpingコマンドの出力結果にタイムスタンプを付与する

Linuxでpingコマンドを打ち続けていると、どの時間帯では疎通が取れていたのに、この時間帯からは疎通が取れなくなった、というような情報が欲しい事がある。
だが、残念ながら現時点ではpingのオプションにタイムスタンプを追記するような機能は無い。。。というと嘘になって、「-D」というオプションがあるにはあるんだけど。。。UNIX時刻で表示するようなのだ。

[root@localhost ~]# ping -D 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
[1451860419.746687] 64 bytes from 8....

Linuxの標準出力の内容を複数のプロセスに渡す

Linuxで、標準出力の内容をそのまま複数のプロセスに渡したい時がある。
そんなときは、teeコマンドを用いると良いだろう。

コマンド | tee >(コマンド1) >(コマンド2) .... | コマンドN

もしくは

コマンド | tee >(コマンド1) >(コマンド2) ... 1 > /dev/null

これを用いる事で、以下のようにechoで出力した値に対し、複数の処理を行うことができる。
…まぁ...


Linuxで複数ファイルをリネームして一括コピーする

仕事で、大量にあるファイルの一部分のみをリネームしてコピーを行いたい事があったので、その備忘。
イメージとしては、以下のようなファイルがあって、それの一部、例えば以下の例だとhostname_aaa_*をhostname_bbb_*へリネームコピーしたい、といった具合。

[root@localhost work]# ls -la /work
合計 32
drwxr-xr-x.  2 root root 4096  1月  3 09:20 .
dr-xr-xr-x. 18 root root 4096  1月  3 09:08 ..
-rw-r--r--.  1 root root...

年末に第20回シェル芸勉強会に参加してきました(復習)

年末の2015年12月26日、第20回シェル芸勉強会に参加してきました。
で、その際の備忘録として、どんな感じで問題を解いていったか残しておくことにする。

なお、問題・解答などなどはこちらにあるので、お題用のファイルのダウンロード(github)含めまず参照。

Q1(各ファイルごとに最大の値を抽出)

file_A-*のグループ、file_B-*のグループからそれぞれ最大の数を探して、その値をグループごとに表示させるよ、という問題。

最初、for文使って解くんかいなと思ってたのだけどタイムオーバー。
模範解答のように、grepで空検索してファイル名を標準出力させて、そ...