それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ssh 秘密鍵のパスフレーズを変更(解除)する

ssh秘密鍵のパスワード変更

パスフレーズを変更する。(パーミッション変更が必要)

chmod 600  ~/my.ssh.id_rsa
ssh-keygen -p -f  ~/my.ssh.id_rsa

sshパスフレーズを解除する

パスフレーズを解除するときは、Enterを押す。空のパスワードを設定する。

Enter old passphrase:
Enter new passphrase (empty for no passphrase):
Enter same passphrase again:

以前の投稿

秘密鍵のパスフレーズを解除してパスフレーズなしの秘密鍵を作る。 - それマグで!

ookla のスピードテストが安定しないうえにサーバー指定できなくなった

定期的に speedtest で速度測定してる

もうかれこれ2年位毎日スピードテストしてはログをためてたんだけど、サーバー指定ができなくなった。

いままでは、speedtest-cli でサーバー指定ができたのだけど、2021/08/29から最寄りのサーバーしか接続できなくなった。

f:id:takuya_1st:20211012032800p:plain

測定しすぎと怒られそうではあるが。。。ユーチューブが普及してインターネットが遅くなるピーク時間帯の速度変化を観察することで、混雑時間帯を避けて、apt update / upgrade やdocker の更新など個人で使うにはとんでもない量のパケットを流し続ける負い目がどうしてもあったので、速度測定の結果をダウンロードやアップロードの負荷分散に利用していた。どの時間帯が混んでいるか、PPPoEを複数ISPで接続して測定したんですが、統計的にデータを取るためには測定結果ブレ幅が大きいので、サーバー指定してたわけです。しかしできなくなった。

オフィシャルのクライアントなら指定できる

f:id:takuya_1st:20211012033521p:plain

speedtest-cli ではなく、オフィシャルのspeedtestコマンドを使えばいまでもID指定は可能なのですが。いつ終わるかわからないし、有志のCPUパワーなのでずっと気が引けてたわけで。これを期に乗り換えようと思ったわけです。

代替のスピードテスト

そこで、Cloudflareのスピードテストがサービス開始していたことを思い出して、そのクライアントを探したら・・・あった

私は断続的に測定して結果の変化を知りたいので、最高速度が知りたいわけでもなく。継続的に安定した測定結果を求めていた。

たぶんもっといい方法はある。VPS借りてHTTPの転送速度をCurlで測るとかしとけばだいぶ正確に出るとは思うけど。管理するサーバーが増えるのは困るし。どこかの画像をずっとダウンロードし続けるのも気が引ける。

cloudflareのスピードテスト用のcli

speed-cloudflare-cli - npm

takuya@~$ npm i -g speed-cloudflare-cli

added 1 package, and audited 2 packages in 3s

found 0 vulnerabilities
takuya@~$ speed-cloudflare-cli
 Server location: Tokyo (NRT)
         Your IP: 27.230.xxxxx (JP)
         Latency: 48.63 ms
          Jitter: 2.80 ms
     100kB speed: 24.94 Mbps
       1MB speed: 61.60 Mbps
      10MB speed: 189.32 Mbps
      25MB speed: 213.41 Mbps
     100MB speed: 274.18 Mbps
  Download speed: 207.27 Mbps
    Upload speed: 29.66 Mbps
takuya@~$

いけそう

grep の後方参照の代替案 4つ

grep では 後方参照ができないので、代替案を考えることになる。

方法1基本的な方法 -o

マッチした箇所だけを取り出す -o を使って、マッチした箇所だけを取り出す。

cat out.txt  | \grep -Po  'Abc.*Xyz'

方法2 先読み+あとよみ

先読み・後ろ読みにマッチした箇所だけを取り出す -o を組み合わせる。

cat out.txt  | \grep -Po  '(?<=Abc).*(?=Xyz)'

方法3 perlruby などワンライナーを使う

もはや、grep ではないが、代替案としては行ける

cat out.txt  | ruby -pe 'sub(/^Abc(.*)Xyz/, "\\1")'

方法4 sed で置換する

もはや、grep ではない。が代替案としては行けるし、sedは手軽に使える。

cat out.txt | sed  -nr 's/Abc(.+)Xyz/\1/p' 

ただし、sedでは、非マッチ箇所が残る。 sedはマッチした箇所を置換するだけなので、マッチしない箇所は出力される。

そこで、-nをつけて、マッチした箇所だけを表示するようにする。

感想

grep正規表現と後方参照の代替は、「後方参照」を「置換」と考えて、sedで行うのがベターだと思われる。

grep でマッチした箇所を取り出す -o などと併せて覚えおけば、ちょっとしたフィルタ処理やデータを整形するときに使えるのではないかと思う。

後方参照=置換と考えるのが大事。マッチした箇所を取り出す。だと限界がある。