Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

Organization

複数のファイルを終端に改行がなければ改行を追加して結合する

SSH の authorized_keys や SSL 証明書でサーバ証明書と中間証明書を結合するとき、単に複数のファイルを結合するなら cat すればいいだけですが、ファイルの終端が改行で終わっていない場合、改行なしでファイルが連結されてしまうことがあります。

例えば server.pem と chain.pem があったとして server.pem の終端が改行で終わっていないと cat server.pem chain.pem

-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----

などとなってしまいます。

cat ではなく awk 1 で連結すれば OK です。

awk 1 server.pem chain.pem
-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MII...
-----END CERTIFICATE-----

パイプするときも awk 1 を通せば終端が改行でなければ改行が追加されます。

curl -s http://gitlab.example.com/oreore.keys | awk 1

gitlab から公開鍵を取り出すと改行が無いので割と罠です。


1 は、パターンが 1 という式で、アクションは省略、という意味です。

パターンに式を記述した場合、0 ではない数字、または、空ではない文字列、のときにマッチと評価されるので、1 なら常にマッチします。

アクションが省略された場合は {print} となります。つまり、全行で print が行われます。

awk は最終行は改行が無くても行と認識します、そして print は行を改行付きで表示します。


いつも authorized_keys で awk 1 してるのなんで?と聞かれたのでその理由。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
10
Help us understand the problem. What are the problem?