Ubuntu14.04 で、sendmail のオプションが使えなくなってた話

前回に続き、Ubuntu14.04 メモです。

Ubuntu10.04 では、以下のように mail コマンドで sendmail のオプションが使用できていました。

MAIL(1)                                      BSD General Commands Manual                                      MAIL(1)

NAME
     mail, mailx, Mail ― send and receive mail

SYNOPSIS
     mail [-dEIinv] [-a header] [-b bcc-addr] [-c cc-addr] [-s subject] to-addr ... [-- sendmail-options ...]
     mail [-dEIiNnv] -f [file]
     mail [-dEIiNnv] [-u user]

ハイフン 2 つ付けて以下のようにしていました。

$ mail -s "subject" to@xxx -- -f from@xxx

Ubuntu14.04 では、sendmail のオプションが 指定できなくなっていました。 (指定すると、送信先のアドレスと判定されてしまいます)

MAILX(1)                                            User Commands                                            MAILX(1)

NAME
       mailx - send and receive Internet mail

SYNOPSIS
       mailx [-BDdEFintv~] [-s subject] [-a attachment ] [-c cc-addr] [-b bcc-addr] [-r from-addr] [-h hops]
              [-A account] [-S variable[=value]] to-addr . . .
       mailx [-BDdeEHiInNRv~] [-T name] [-A account] [-S variable[=value]] -f [name]
       mailx [-BDdeEinNRv~] [-A account] [-S variable[=value]] [-u user]

前回の話のように bsd-mailx から heirloom-mailx に 替わったからかと思い mail コマンドを bsd-mailx に戻してみました。

$ sudo update-alternatives --config mailx
There are 3 choices for the alternative mailx (providing /usr/bin/mailx).

  Selection    Path                     Priority   Status
------------------------------------------------------------
* 0            /usr/bin/heirloom-mailx   60        auto mode
  1            /usr/bin/bsd-mailx        50        manual mode
  2            /usr/bin/heirloom-mailx   60        manual mode
  3            /usr/bin/mail.mailutils   30        manual mode

Press enter to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/bin/bsd-mailx to provide /usr/bin/mailx (mailx) in manual mode

しかし やはり、sendmail のオプションが なくなっていました。

MAIL(1)                                      BSD General Commands Manual                                      MAIL(1)

NAME
     mail, mailx, Mail ― send and receive mail

SYNOPSIS
     mail [-dEIinv] [-a header] [-b bcc-addr] [-c cc-addr] [-s subject] to-addr ...
     mail [-dEIiNnv] -f [file]
     mail [-dEIiNnv] [-u user]

ちなみに Ubuntu14.04 の heirloom-mailx では、送信元は以下のように指定します。

$ mail -s "subject" -r from@xxx to@xxx

Ubuntu14.04 で、標準メールが heirloom-mailx になってた話

Ubuntu14.04 での話です。

mail コマンドのシンボリックリンクを追っていきます。

$ readlink -f `which mail`
/usr/bin/heirloom-mailx

heirloom-mailx です。

Ubuntu10.04 では、bsd-mailx でした。

$ readlink -f `which mail`
/usr/bin/bsd-mailx

複数のメールパッケージを入れている場合は update-alternatives コマンドで 切り替えることができます。

$ sudo update-alternatives --config mailx
There are 3 choices for the alternative mailx (providing /usr/bin/mailx).

  Selection    Path                     Priority   Status
------------------------------------------------------------
* 0            /usr/bin/heirloom-mailx   60        auto mode
  1            /usr/bin/bsd-mailx        50        manual mode
  2            /usr/bin/heirloom-mailx   60        manual mode
  3            /usr/bin/mail.mailutils   30        manual mode

Press enter to keep the current choice[*], or type selection number:

HTML5 の <progress> タグ

広義の HTML5 は色々と進化をとげていますが 狭義の HTML5 としてのタグや属性も追加・削除があります。

今回は HTML5 で追加された <progress> タグです。

<progress> は 「進捗」を表すタグです。 対応しているブラウザであれば 以下のようにプログレスバーを表示してくれます。

(Firefox)
WRITE_0838_01

(GoogleChrome)
WRITE_0838_02

Windows のファイルコピーや ブラウザのロード時に表示される アレですね。

記述は簡単で、次のようになります。

<progress value="0" max="100">0%</progress>
<progress value="15" max="100">15%</progress>

「進捗」を表現するためのものなので 温度などの表示には使いません。 (<meter> というタグがあります)

また、 value 属性を定義しないと ブラウザによっては 「ただの進捗中」を表現してくれます。

<progress>(読み込み中)</progress>

(Firefox)
WRITE_0838_03

(GoogleChrome)
WRITE_0838_04

(矢印は動きのイメージです。実際には表示されません)

これなら進捗率が取得できない場合にも進捗中であることを表現できますね。

これまで「進捗バー」は、画像やスタイルで工夫して表現していました。 しかしそれでデータとして扱うのが大変です。 HTML5なのに、デザイン寄りにも見えるこのタグですが タグとして明確に意図を表現できるようになり 見た目はブラウザ(とスタイル)が整えてくれるようになったわけです。

LC_ALL と LANG を設定した時の違い

ちょっと気になったのでメモ。 環境は Ubuntu14.04 です。

設定する前。

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

LC_ALL に C を設定した場合。

$ env LC_ALL=C locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=C

LANG に C を設定した場合。

$ env LANG=C locale
LANG=C
LANGUAGE=en_US:en
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

LC_ALL に設定した場合は LANG は変わりませんでした。

コマンドプロンプトで SH1 や MD5 のハッシュ値を求める

この前の CERTUTIL を使うと ファイルのハッシュ値も求めることができます。

C:\> CERTUTIL -hashfile test.txt SHA1
SHA1 ハッシュ (ファイル decoded.txt):
05 f6 94 17 04 da 46 18 40 dd da a0 a8 87 0c 9a 21 cb 6e 17
CertUtil: -hashfile コマンドは正常に完了しました。

C:\> CERTUTIL -hashfile test.txt MD5
MD5 ハッシュ (ファイル decoded.txt):
77 c1 6d 26 74 1b 41 91 c9 25 8b 59 61 a0 c4 d3
CertUtil: -hashfile コマンドは正常に完了しました。

不要な行を FIND コマンドで取り除きます。

C:\> CERTUTIL -hashfile test.txt SHA1 | FIND /V ":"
05 f6 94 17 04 da 46 18 40 dd da a0 a8 87 0c 9a 21 cb 6e 17

間の空白も取り除きます。 FOR コマンドだと簡単です。

C:\> @FOR /F "delims=/" %i IN ('CERTUTIL -hashfile test.txt SHA1 ^| FIND /V ":"') DO @((SET ITEM=%i) && (ECHO %ITEM: =%))
05f6941704da461840dddaa0a8870c9a21cb6e17

何かに使えそうですね。

コマンドプロンプトで base64 ファイルをデコードする

Windows のコマンドプロンプトには CERTUTIL というコマンドがあります。 証明書とかをアレコレするコマンドなのですが このコマンドを使うことで base64 ファイルのデコードができます。

[参考]
Windowsコマンド集 - certutil:ITpro

まず Linux で base64 エンコードしたファイルを作ります。 (別にLinuxで作る必要はありません)

$ sudo vi source.txt

$ cat source.txt
おはよう
こんにちは
こんばんは

$ cat source.txt | nkf -s | base64 | tee encoded.txt
gqiCzYLmgqQKgrGC8YLJgr+CzQqCsYLxgs6C8YLNCg==

このファイルを Windows に持ってきて デコードしてみます。

C:\> CERTUTIL -decode encoded.txt decoded.txt
入力長 = 44
出力長 = 31
CertUtil: -decode コマンドは正常に完了しました。

C:\> TYPE decoded.txt
おはよう
こんにちは
こんばんは

CERTUTIL コマンドでエンコードもできます。

C:\> CERTUTIL -encode decoded.txt encoded.txt
入力長 = 31
出力長 = 102
CertUtil: -encode コマンドは正常に完了しました。

C:\> TYPE encoded.txt
-----BEGIN CERTIFICATE-----
gqiCzYLmgqQKgrGC8YLJgr+CzQqCsYLxgs6C8YLNCg==
-----END CERTIFICATE-----

コマンドの結果の2行目移行をソートする

1行目にヘッダーが出力されるコマンドの結果の 2行目以降のみをソートしようと思って力技。

$ df -T | sed '1d' | sort

sed で 1行目を削除しています。

で、ヘッダー行を追加。

$ (df -T | head -n 1) && (df -T | sed '1d' | sort)

Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/sda1      ext3      19091584 2018084  16097016  12% /
none           tmpfs       102400       0    102400   0% /run/user
none           tmpfs     16432604       0  16432604   0% /run/shm
none           tmpfs            4       0         4   0% /sys/fs/cgroup
none           tmpfs         5120       0      5120   0% /run/lock
tmpfs          tmpfs      3286524     844   3285680   1% /run
udev           devtmpfs  16421864       4  16421860   1% /dev

実行時パラメータの現在の設定を表示する SHOW

PostgreSQL の 現在実行中の psql で、パラメータを表示するには "SHOW" というコマンドを使用します。

psql=#  SHOW checkpoint_segments;

 checkpoint_segments
---------------------
 32
(1 row)

"SHOW ALL" だと一覧を表示することができます。

psql=#  \x
psql=#  SHOW ALL;

-[ RECORD 1 ]-------------------------------------------------------------------
name        | allow_system_table_mods
setting     | off
description | Allows modifications of the structure of system tables.
-[ RECORD 2 ]-------------------------------------------------------------------
name        | application_name
setting     | psql
description | Sets the application name to be reported in statistics and logs.
-[ RECORD 3 ]-------------------------------------------------------------------
name        | archive_command
setting     | (disabled)
description | Sets the shell command that will be called to archive a WAL file.

netstat でルーティング情報を表示する

知らないオプションだったので、メモ。

$ netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
localnet        *               255.255.255.0   U         0 0          0 eth0
default         192.168.1.1     0.0.0.0         UG        0 0          0 eth0

2つのコマンドの出力を1つにまとめる

たいしたことではないのですが。

コマンドの結果にヘッダーを付けたかったんですが cat でできたっけ?どうしようかと考えて結果力技。

$ (echo "MByte   Directory") && (du -sm /home /opt /tmp /var)

MByte   Directory
1       /home
1       /opt
87      /tmp
2       /var

コマンドをカッコで囲んで && でつなげたらできました。

Google サイト内検索

Amazonアソシエイト