覚えておくと案外役に立つbashのhistory機能の使い方いろいろ

CentOSやUbuntuといったLinuxをコンソールで使っていれば、必ず使ったことがあるであろうbashのhistory機能。
この機能、結構いろいろなことができるので、今回はそれらを紹介していく。

1.基本的な使い方

ただhistoryコマンドを実行して今までの履歴を確認する、といった使い方。
一度は使ったことがあるだろう。

[test@BS-PUB-CENT7-01 ~]$ history
    1  cd
    2  passwd
    3  clear
    4  exit
    5  passwd
    6  clear
    7  pwgen...

先日、シーザー暗号についての@ebanさんの解法でそういうのがあったので、後からの見返し用に記述しておく。
(GNU sedでしか見てないので注意。)

sedで、行を横にn文字ずらしていき、元あった文字は行頭に戻る(ループする)ような処理をする場合、以下のようにする。

sed -E 's/^(.{n})(.*)/\2\1/'
[root@BS-PUB-CENT7-01 ~]# sed -E 's/^(.{3})(.*)/\2\1/' <(printf %s {a..z})
defghijklmnopqrstuvwxyzabc

以下、シーザー暗号のとこでも書いてるけど、...


Linuxで全コマンドの実行履歴を記録する方法いろいろ

以前に、いろいろとLinuxでコマンドの実行履歴をログに記録する方法について書いてたので、まとめてみることにした。

1.シェルのhistoryを利用する

まぁ、基本といえば基本。
シェルのhistory機能を使って記録しておくというもの。

ただ、デフォルトだとファイルへの書き出しがセッションクローズ後で、タイムスタンプもついてないので、そのままでは使いにくい。
また、コマンドの実行ユーザが権限を持っているので、ファイルを直接編集できるのもよくないかも。

2.bashの機能を用いる

bash 4.1以降だと、実行したコマンドをsyslogで記録させることができるように...


LinuxやWindowsで、自身のグローバルIPアドレスを調べたいときがある。
そんなときは、以下のようにするとよいだろう。

Linux or Macの場合

LinuxやMacの場合、コンソール上で以下のコマンドを実行するとよいだろう。

curl inet-ip.info/ip
curl inet-ip.info # 改行をつける場合
curl inet-ip.info/json # json形式

Wind

...
CentOS 7でauditログに実行コマンドを記録する

今まで、実行コマンドのログ記録ではSnoopy Loggerを用いることが多かったのだけど、CentOS 7の場合auditでうまいこと設定してやることで実行したコマンドをログに記録することができるようなので、やってみることにした。
(厳密には、ユーザのキーボード入力をすべて記録するだけなので、上下キーやTab、エンターキーの入力についてもログに記録されてしまうため、ちょっと読みづらい。)

設定方法は簡単。以下の内容を「/etc/pam.d/system-auth」および「/etc/pam.d/password-auth」に記述するだけだ。

session     requi...

sedで、最初に条件が合致した行に対してのみ置換や行の挿入、削除といった処理を行わせる場合、以下のようにコマンドを実行する。

最初に出てくる空白行を削除する

こちらでも紹介しているが、最初に出てくる空白行を削除する場合、以下のようにコマンドを実行する。

sed '0,/^$/{//d}'
[root@BS-PUB-CENT7-01 ~]# cat /tmp/test123_3
1111

222

3333

33333

[root@BS-PUB-CENT7-01 ~]# sed '0,/^$/{//d}' /tmp/test123_3
1111
222

3333

33...

Linuxで、0バイトのファイルや空ディレクトリを一括削除するには、どうすればよいのだろうか。
答えは簡単で、findコマンド一発でできる。

find PATH -empty -delete
[root@BS-PUB-CENT7-01 tmp]# mkdir -p /tmp/empty/{aaa,bbb,ccc,ddd,eee/fff}
[root@BS-PUB-CENT7-01 tmp]# touch /tmp/empty/{1,2,3,4,5}
[root@BS-PUB-CENT7-01 tmp]# echo ' ' > /tmp/empty/6
[root@BS-PUB-CEN...

かっこいいUIのオープンソースDCIM(データセンター管理システム)『Ralph』

少し調べものをしていたところ、『Ralph』という、以前紹介したDevice42を彷彿とさせるOSSのDCIMパッケージを見かけたので、手元のサーバにインストールしてみることにした。
ちなみに、デモはトップページからか、こちらからID/PW「ralph/ralph」でログインしてみるといいだろう。

画像を見てもらってわかるように、Device42のようにマウス操作でラックの位置をいじったりすることができる。
残念ながらまだラック内のサーバの配置についてはマウスでドラック&ドロップしての操作はできないようだけど、ここまでやっているからにはそのうちできるようになりそ...


Linuxで、ファイルのいらない空行をよく削除するので、削除する空行のパターン別にコマンドをまとめてみることにした。
(まぁ、大体はsed使うだけなんだけど…)

1.すべての空行を削除する

ファイルの、すべての空行を削除する場合、以下のようにsedを実行すればよい。

sed '/^$/d' PATH
[root@BS-PUB-CENT7-01 doc]# cat /tmp/test123

1111
222

3333

33333

[root@BS-PUB-CENT7-01 doc]# sed '/^$/d' /tmp/test123
1111
222
3333
3333...

先日、CSV版のjqコマンドを目指しているというコマンド『miller』というものを見かけたので、試しに使ってみることにする。
今回はインストール先としてCentOS 7を用いる。

1.インストール

まずはインストール。
以下のコマンドを実行する。

yum install flex
wget https://github.com/johnkerl/miller/releases/download/v4.1.0/mlr-4.1.0.tar.gz
tar xzvf mlr-4.1.0.tar.gz
cd mlr-4.1.0
./configure
make && make in...

Linuxコンソール上でQRコードを表示させる

Linuxコンソール上で得られた情報を、そのままスマホなどに連携させるため、QRコードとして使えないか調べてみた。
調べた結果、「qrencode」や「qrcode-terminal」というコマンドでコンソール上にQRコードを出力したり、既存のQRコードから情報を取り出すことができるようだ。

今回は、Ubuntu 14.04 LTSにこれらを導入してみる。

1.qrencodeを使う

まずはインストール。
以下のコマンドを実行する。

sudo apt-get install libqrencode3
sudo apt-get install qrencode

さて、イン...


ふと気になったので調べてみた。
どうやら、以下のようにsedを実行すればいけるようだ。

sed '${/^$/d;}' ファイルPATH
blacknon@BS-PUB-UBUNTU-01:~$ cat /tmp/test123

1111
222

3333

33333

blacknon@BS-PUB-UBUNTU-01:~$ cat -ET /tmp/test123
$
1111$
222$
$
$
3333$
$
33333$
$
blacknon@BS-PUB-UBUNTU-01:~$ sed '${/^$/d;}' /tmp/test123

1111
222

333...

Microsoft Azureに構築した環境で負荷試験を行った際、インフラ回りでひっかかったことについて念のため記述しておく。
一応、サポートから正式に回答いただいた(電話で聞いたとき聞き間違いかな?と思ったのでメールで詳細についてももらって確認している)ことなので、事実…ではあるようだ。

なお、この情報は2016年06月時点のものなので、仕様が変更される可能性もある。
設計前に一度MSに問い合わせたほうが良いだろう。

OS側で要求するIOPSがディスクの制限値を上回ると、ディスクの応答を数秒間停止させる

…らしい。
規定のIOPS(プレミアムストレージ以外だと500が上限)...


grep(+その他のコマンド)でor検索、and検索を行う場合、以下のようにすればよい。

or検索を行う

or検索は簡単で、「-e」オプションを使うことで複数条件での検索が可能だ。

grep -e 'キーワード1' -e 'キーワード2' ファイルPATH

その他、以下のようにパイプでつなげてやることでor検索が行える。

grep "キーワード1\|キーワード2" ファイルPATH
grep -E "キーワード1|キーワード2" ファイルPATH
egrep "キーワード1|キーワード2" ファイルPATH

その他、awkやsedを使うことでも同様の結果を得ることができ...


小文字⇔大文字の変換方法については、以前にsedでの処理方法について記述したことがあったが、処理の仕方としてはsedだけではなく、Bashの構文を使ったりtrやawkを使ったりといろいろなアプローチの仕方がある。
今回は、それらについてを紹介する。

1.Bash 4.0以降での方法

Bash 4.0以降では、構文として変数を呼び出す際に小文字⇔大文字の変換をさせることができる。

大文字化

${変数^} # 最初の一文字目のみ大文字化
${変数^^} # すべて大文字化
[root@BS-PUB-CENT7-01 test1]# v=test;echo ${v^}
Te...

アルファベット順にn文字ずらした文字列を生成する、いわゆるシーザー暗号(Caesar cipher)
これをLinuxコンソール上でワンライナーで作成させるには、どうすればよいのだろう?と思ったので、少し調べてみた。

とりあえず、以下のようにコマンドを実行することでアルファベットの小文字を任意の数ずらすことが可能だ。
(○にずらす数を入れる)

コマンド | tr $(printf %○s | tr ' ' '.' | tac)\a-z a-za-z # アルファベットをずらす
コマンド | tr a-z $(printf %○s | tr ' ' '.')\a-z # ずらし...

Linuxコンソール上で、同じ文字列を繰り返し出力させるにはどうすればよいだろう?という疑問が出てきたので、少し調べてみた。
perlやpythonを呼び出すの含め、以下のような方法があるようだ。

bashのprintfやseq

printfをうまく使ったり、seqやprintfをtrとうまく組み合わせるといいだろう。
(○のとこに繰り返させる数字を入れる)

printf %○s | tr ' ' '文字列'
printf "%0.s文字列" {1..○}
seq -s文字列 ○|tr -d '[:digit:]'
seq  -f "文字列" -s '' ○ # ←Macのみ
...

先日、Twitter上でタイトルのようなお題が出ていたので、少し調べてみた。
ただ単に空行だけを排除するならば、以下のようなやり方がある。

grep . PATH
sed '/^$/d' PATH

ただし、これらだとスペースやタブだけの行については排除してくれない。

[root@BS-PUB-CENT7-01 tmp]# 行末は「$」、タブは「^I」で表示されている
[root@BS-PUB-CENT7-01 tmp]# cat -ET /tmp/test7.txt
111$
222$
$
333$
4444$
   $
  5555 $
  556566 $
^I$
66465...

netpbmとpbmtobrailleを使ってLinuxコンソール上でフローチャート作成

ぼーっとネットサーフィンをしていたところ、Linuxコンソール上でフローチャートを作ることができるコマンドとして「pbmtobraille」というものがあったので試してみることにした。
なお、このコマンドは点字フォントでフローを表現するので、ちゃんと点字を表現できるターミナルで利用する必要がある。今回は、Ubuntu 14.04 LTSでこれを実際に使ってみる事にする。

1.インストール

事前に、一緒に使うコマンドが入っている「netpbm」をインストールする。

sudo apt-get install netpbm ivtools-bin

それでは、実際に「pbmtob...


第23回シェル芸勉強会に参加してきたので、その復習。
今回は初めて来る人が多かったのか、比較的難易度は低めで、かつ(今までのより)実用的、説明も丁寧にされていたような気がする。
テーマがデータ集計ということもあって、全体的にawkが多めになっているようだ。テーマが集計・統計なので、復習では個人的な趣味嗜好によりこないだ知ったdatamashをできる限り使ってみようと思う。問題及び模範解答はこちら

Q1.

年ごとの台風の上陸データについてのCSVデータをダウンロードしてきて、それを年+月の状態に編集する、という問題。
どうもこのCSVファイル、UTF-8のBOMがついち...


『もしOSをXXXに例えたら』系の記事をまとめてみた

以前、『もしプログラミング言語をXXXに例えたら』系の記事をまとめたが、今度はOSを何かに例えた記事のまとめ。

各OS(Mac,Linux,Windows)で比較している記事

【翻訳】UNIX,Windows,Linux,Mac OS X…もしOSを家に例えるなら

元ネタはこちらの「What If Unix, Windows, Linux And OS-X Were Houses?」。
各OSを家に例えてみた、という記事。

【翻訳】OSを自転車にたとえてみた

元ネタはこちらの「IfComputers Were Bikes, What Bikes Would ...


dstatコマンドで覚えておきたい使い方6個

Linuxなどでパフォーマンスのモニタリングを行うコマンドといえば、vmstatやtopなどいくつかあるが、その中でも比較的情報が見やすいのが、このdstatコマンドだ。
今回は、このdstatコマンドで覚えておきたい使い方についてを紹介する。

1.基本的な使い方

基本的には、得たい情報に合わせてオプションを指定して実行してやる。
もちろん、オプションなしでもそれなりの情報を得ることができる。

dstat

それぞれのオプションを指定して得られる情報は以下の通り。
なお、オプションは指定された順番に左から表示されていくので、指定する順番も重要だ。

  • -t … システム時間...

Linux/UNIXで、指定したファイルの文字コード(UTF-8とか、EUC-JPとか)を調べる場合は、以下のような方法がある。

1.fileコマンドで調べる

UTF-8か、EUC-JPなのか、それともShift_JISなのか…
日本語のファイルだとはわかっていて、その違いを調べるだけであれば、fileコマンドで事足りる。

以下のように、「-i」オプションを付与してfileコマンドを実行することで、文字コードを調べることができる(Shift_JISのみ、「unknown-8bit」として出力される)。

file -i ファイルPATH
blacknon@BS-PUB-UB...

LinuxやUNIXのシェルでよく利用されるbashで、四則演算や割り算のあまりを求めるといったやり方について。
bashでは、「$(( 計算文 ))」のように記述することで、簡単な計算を行うことができる。

四則演算

$(( 値1 + 値2 )) # 足し算
$(( 値1 - 値2 )) # 引き算
$(( 値1 * 値2 )) # 掛け算
$(( 値1 / 値2 )) # 割り算
[root@BS-PUB-CENT7-01 ~]# #足し算
[root@BS-PUB-CENT7-01 ~]# echo $(( 20 + 2 ))
22
[root@BS-PUB-CENT7-...

ちょっとやり方ど忘れしてググった際にうまいこと出てこなかったので、念のため残しておく。日本語って難しいなぁと…。

1.指定した列の合計を求める

特定の列全体の合計を求める場合は、以下のようにforで対象の列を足していく。
例えば2列目の合計のみを求める場合なら、以下のようにコマンドを実行する。

awk '{a+=$2} END{print a;}' ファイルPATH
[root@BS-PUB-CENT7-01 tmp]# cat test5.txt
1 2 3 1 2
1 2 2 1 3
1 2 3 1 2
2 2 2 1 2 4
2 2 2 1 2 1 1 1
3 2 2...

【翻訳】OSを自転車にたとえてみた

久々に翻訳系。
各種OSを、自転車の種類にたとえてみるという記事。

元ネタはこちらの「If Computers Were Bikes, What Bikes Would They Be?」という記事。
2009年の記事なのでちょっと古いけど、自転車に例えるというのが珍しいのでちょっとおもしろかった。

至らない翻訳だと思うのですが、その辺は多めに見てもらえれば…

MacOS X = フィクシーバイク

Mac OS Xを例えるのは簡単。フィクシーバイク(ピストバイク)だ。
このバイクはシンプルで美しく、少し使いやすさを犠牲にしている、そんなところがMacに似ていま...


Linuxコンソール上で、指定したファイルからランダムに行を取得させたい時がある。
そんなときは、shufコマンドを用いれば良い。

以下のようにコマンドを実行することで、指定されたファイルからランダムに「-n N」で指定したN行を抽出する。

shuf -n N ファイルPATH