ssh ip address show

表題ではいまいち伝わらない気もするが…。単なるメモである。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ ssh ${HOST} ip address show

スクリプトの中で、複数のホストにSSH接続し、`ip address show`の結果を確認して表示を変えたい。当初、単に下記のように実装したらエラーであった。

$ ssh ${HOST} ip a
bash: ip: command not found
$

実際にSSH接続でログイン後に同じコマンドを実行したところ、正常に結果を得られるのは確認している。

$ ssh ${HOST}
[ec2-user@withsin ~]$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:fa:1f:80:b8:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.11/24 brd 10.1.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4fa:1fff:fe80:b89b/64 scope link
       valid_lft forever preferred_lft forever
[ec2-user@withsint ~]$

さてどういうことかと思ったが、思い当たることをいくつか実施したところ”PATH“の問題であった。下記のように実行することで思い通りの結果を得られた。

$ ssh ${HOST} /sbin/ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 06:fa:1f:80:b8:9b brd ff:ff:ff:ff:ff:ff
    inet 192.168.33.11/24 brd 10.1.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::4fa:1fff:fe80:b89b/64 scope link
       valid_lft forever preferred_lft forever
$

満足である。

以上。

dateで前日の日付

表題の通り。前にも書いた気がするのだが見つけられなかったので書いてしまう。

■ 環境

  • Linux
  • Mac OSX El Capitan

■ date

現在時刻を表示するには下記。

$ date
Fri Jun 16 19:10:10 JST 2017
$

1日後の日時を取得するには下記。

$ date -d '1 day'
Sat Jun 17 19:10:15 JST 2017
$

day“だけでなく、”year“, “month“, “hour“, “minute“, “second“とかいける。

1日前の日時を取得するには下記。

$ date -d '1 day ago'
Thu Jun 17 19:10:32 JST 2017
$

ちなみに次の月曜とかも取得ができる。

$ date -d '1 monday'
Mon Jun 19 00:00:00 JST 2017
$

結構便利だ。

ちなみにMacでは下記のように取得できる。

$ date -v 1d
2017年 6月 1日 木曜日 19時17分09秒 JST
$
$ date -v -1d
2017年 6月15日 木曜日 19時17分14秒 JST
$

以上。

sedで改行文字を削除

表題の通り。いつも忘れるのでメモ。

■ 環境

  • sed
  • Linux
  • Mac OSX El Capitan

■ sed

何かしらのスクリプトで、ファイルから読み取って変数に入れて使用している時、たまに行末の改行文字が含まれたままのやつがあり、予期せぬ場所で改行がされてしまうことがある。

改行を削除すれば良いか、と下記のようにしてしまうのだが、これでは削除ができない。

sed -e 's/\r//'

下記のようにしなければならない。

sed -e 's/^M//'

この”^M“を入力するのが少々厄介で、単に文字列として”^M“を入れるでは思い通りに動かない。

control + V
control + M

上記のように入力すると良い。

以上。

base64 encode/decode

Macにおいて表題を実施する。

■ 環境

  • Mac OSX El Capitan

■ base64

Macには`base64`コマンドが存在する。

$ which base64
/usr/bin/base64
$
$ base64 --help
Usage:    base64 [-dhvD] [-b num] [-i in_file] [-o out_file]
  -h, --help     display this message
  -D, --decode   decodes input
  -b, --break    break encoded string into num character lines
  -i, --input    input file (default: "-" for stdin)
  -o, --output   output file (default: "-" for stdout)
$

■ encode

文字列”withsin“を”encode“してみる。

$ echo -n "withsin" | base64
d2l0aHNpbg==
$

■ decode

前述の”encode“で取得できた文字列を”decode“する。

$ echo "d2l0aHNpbg==" | base64 -D
withsin$

最後の改行を”encode“時に含んでいないので、”decode“は改行されなかった。

以上。

httpie

表題を知ったのでメモ書き。

■ 環境

  • HTTPie 0.9.9
  • Homebrew
  • Mac OSX El Capitan

■ httpie

`brew`でインストールする。

$ brew update
$ brew install httpie

python3“に依存しているようである。

$ brew list httpie
/usr/local/Cellar/httpie/0.9.9/bin/http
/usr/local/Cellar/httpie/0.9.9/libexec/bin/ (16 files)
/usr/local/Cellar/httpie/0.9.9/libexec/lib/ (790 files)
/usr/local/Cellar/httpie/0.9.9/libexec/ (2 files)
$
$ which http
/usr/local/bin/http
$

コマンドは`http`がインストールされている。

$ http httpie.org
HTTP/1.1 301 Moved Permanently
CF-RAY: 36d9e671b1842e45-NRT
Cache-Control: max-age=3600
Connection: keep-alive
Date: Mon, 12 Jun 2017 09:59:55 GMT
Expires: Mon, 12 Jun 2017 10:59:55 GMT
Location: https://httpie.org/
Server: cloudflare-nginx
Transfer-Encoding: chunked

$

シンタックスハイライトされていて見やすい。上記はドキュメントままのサンプルであるが、自身が管理しているサイトに対して実行したところ、HTMLもシンタックスハイライトされていてとても見やすかった。

以上。