mutao.net

いわゆる雑記。

netstatに変わるssコマンド

最近のディストリビューションでは、netstatコマンドに変わってssコマンドなるものがあるらしいのでメモ

RHEL7とかでは置き換えは終わっているらしいので適当にAWSインスタンスを作成してコマンドを打ってみた。

AWSLinuxって何がベースになっているかわからないけど多分RHELだと思う。(個人の感想、ぶっちゃけよくわからない。)

オプション 説明 省略前
-a 全てのソケット情報の表示 --all
-n アドレスやポートを数値で表示 --numeric
-l Listenポートを表示 --listening
-p PIDとプロセス名を表示 --process
-t TCPポートのみ表示 --tcp
-u UDPポートのみ表示 --udp
-4 IPv4のみ表示 --ipv4
-6 IPv6のみ表示 --ipv6
$ ss -a
Netid               State                 Recv-Q                Send-Q                                                  Local Address:Port                                               Peer Address:Port
nl                  UNCONN                0                     0                                                                rtnl:kernel                                                         *
nl                  UNCONN                0                     0                                                             tcpdiag:kernel                                                         *
$ ss -n
Netid                 State                  Recv-Q                  Send-Q                                                  Local Address:Port                                       Peer Address:Port
u_str                 ESTAB                  0                       0                                                                   * 19059                                                 * 19060
u_str                 ESTAB                  0                       0                                         /run/dbus/system_bus_socket 17342                                                 * 17341
u_str                 ESTAB                  0                       0                                                                   * 19060                                                 * 19059
$ ss -l
Netid               State                 Recv-Q                Send-Q                                                  Local Address:Port                                              Peer Address:Port
nl                  UNCONN                0                     0                                                                rtnl:kernel                                                        *
nl                  UNCONN                0                     0                                                             tcpdiag:kernel                                                        *
nl                  UNCONN                0                     0                                                             selinux:kernel                                                        *
$ ss -p
Netid                 State                  Recv-Q                  Send-Q                                                  Local Address:Port                                       Peer Address:Port
u_str                 ESTAB                  0                       0                                                                   * 19059                                                 * 19060
u_str                 ESTAB                  0                       0                                         /run/dbus/system_bus_socket 17342                                                 * 17341
u_str                 ESTAB                  0                       0                                                                   * 19060                                                 * 19059
$ ss -t
State                      Recv-Q                        Send-Q                                                Local Address:Port                                                Peer Address:Port
ESTAB                      0                             36                                                    XXXXX.XX.XXX:ssh                                                XXX.XX.XX.XXX:50925
$ ss -4
Netid                   State                    Recv-Q                    Send-Q                                        Local Address:Port                                         Peer Address:Port
tcp                     ESTAB                    0                         36                                            XXX.XX.XX.XXX:ssh                                         XXX.XX.XX.XXX50925

LinuC Level1 101 合格体験記

LinuC Level1 101 取得しました。

備忘録的に残します。

勉強期間

4ヶ月ほど。なぜここまでかかったかというと、LPICとLinuCを混同していたため。

LPICのバージョン4.0用の勉強を最初に初めて、LPICのバージョン5.0があることを知ってそっちにシフト。

1ヶ月半ほど勉強をしてからLinuC 10.0 があることを知って勉強を0からスタート。

試験範囲は重複しているので無駄ではなかったけど、参考書を合計3冊買うというアホをやらかした。

1冊だいたい4000円 * 3 = 12000円 なんて無駄なことをしてしまったのか本当に後悔している。

勉強方法

有名なあずき本とping-tを使用しました。

私の場合 LPIC バージョン4.0/5.0 LinuC バージョン 10.0 を持っているので取り違えて勉強してしまうこともしばしば。

私のような事前準備をしない怠惰なみなさまにおかれましては使わない参考書は捨てるか本棚の奥の方にしまっておきましょう。

あずき本を3回ほどさらっと読んでみて試験範囲の確認をして、1章ずつ熟読してping-tをやりました。

ping-tは101が無料なので使い放題です。注意事項としてはバージョン4.0もあるし5.0も10.0もあるのでちゃんと自分の受けるバージョンを選択しましょう。

ping-tは分野別問題と模擬試験をひたすら繰り返して勉強してました。

コマ問(コマンド問題の略称と思われる)という記述式の問題はほぼやってません。ちょっとやって大体80%超えだったので不要と判断。

そもそも101には1割程度しか記述式問題は出てこないので時間をかける必要ないかもしれません。

いろんなコマンドを覚えると使ってみたくなるのがエンジニアのサガというものです。

使っていないノートPCにCentOS入れて色々試してました。なのでコマ問いらなかったのかも。

感想

コマンドのオプションを覚えるのがきつすぎる問題

mutaonet.hatenablog.com

mutaonet.hatenablog.com

ブログにもPOSTしているがこれらを全て覚えるのが困難を極めた。

覚える必要があるのかしら、という疑問はさておき脊髄反射的に正解を選べるまでping-tを繰り返した。

f:id:mutaonet:20200925173735p:plain

実際こんな感じ模試は50回くらいやったかもしれない。

ぽちぽちしているだけなので涅槃に達するときもあったんじゃないかと思う。

試験範囲広すぎる問題

CISCO?とか狙っている人にはまず気にならないと思うが、試験範囲がめちゃくちゃ広い。

JavaSilver とか PHP7 とかに比べてかなりの物量がある。

AzureのAZ-900とかもとったことがあるけど、あれは過去最速で取れた。

合格だけしても意味がない気がしたので、ちゃんとLinuxの環境は用意した。

色々はまったりしたのでそれも込みでめっちゃ勉強した気がする。

スコア

スコアは666と悪魔のようなスコアで合格した。

こんだけ頑張ったわりにわりとギリギリで引いている。

「努力は必ず報われる」は報われる中でも最低限許容範囲までならなんとかなるよという意味らしい。

合格祝い

自分の合格祝いでアードベックを買った。これで102も頑張れる気がする。

f:id:mutaonet:20200925175120j:plain

Webフロントエンド ハイパフォーマンス チューニング

Webフロントエンド ハイパフォーマンス チューニング

f:id:mutaonet:20200921210843p:plain

Loading (リソースの読み込み)

  • HTML CSS JS 画像などを読み込む(リソースの読み込み)

  • Download、Parseの処理がある

  • Download:HTMLを含む様々なリソースの読み込みが走る

Parse

  • ダウンロードされたHTMLやCSSはDOMツリーやCSSOM(CSS Object Model)ツリーに変換される

  • HTMLの場合はDOMツリーに、CSSの場合はCSSOMツリーに変換される

  • DOMツリーがscriptタグ内のJavaScrptの内容に依存するように記載されていた場合、DOMツリーの構築がブロックされる

  • CSSOMツリーはJavaScriptからもアクセスでき、LayoutやPaintingのフェーズでスタイルの計算に使用される

Spripting JavaScript実行

Rendering

  • レイアウトの計算

Paiting

レンダリングエンジン

レンダリングエンジンとは?

ブラウザ名 レンダリングエンジン
Chrome Blink
Firefox Gecko
Safari Webkit
IE Trident
Edge EdgeHTML
Opera Blink
  • BlinkはWebkitをForkして作成されているため処理が似ている

JavaScriptエンジン

JavaScriptエンジンとは?

ブラウザ名 JavaScriptエンジン
Chrome V8
Firefox SpiderMonkey
Safari Nitro
IE Chakra
Edge Chakra
Opera V8
  • V8エンジンはJITコンパイルを備えた高速なJavaScrptエンジンのこと。Node.jsでも利用されている。

GraalVM②

  • Graalは言語間で呼び出しができるらしいのでお試しテスト

JavaScript -> Java

$ js
> const array = new(Java.type("int[]"))(2)
> array[1] = 1
1
  • 記法全然わからないけどうまくいったみたい

Ruby いれてみた

gu install ruby
Downloading: Component catalog from www.graalvm.org
Processing Component: TruffleRuby
Additional Components are required:
    LLVM.org toolchain (org.graalvm.llvm-toolchain, version 20.0.0), required by: TruffleRuby (org.graalvm.ruby)
Processing Component: LLVM.org toolchain
Downloading: Component ruby: TruffleRuby  from github.com
Downloading: Component org.graalvm.llvm-toolchain: LLVM.org toolchain  from github.com
Installing new component: TruffleRuby (org.graalvm.ruby, version 20.0.0)
Installing new component: LLVM.org toolchain (org.graalvm.llvm-toolchain, version 20.0.0)

IMPORTANT NOTE:
---------------
The Ruby openssl C extension needs to be recompiled on your system to work with the installed libssl.
First, make sure TruffleRuby's dependencies are installed, which are described at:
  https://github.com/oracle/truffleruby/blob/master/README.md#dependencies
Then run the following command:
        /usr/local/graalvm-ce/languages/ruby/lib/truffle/post_install_hook.sh


IMPORTANT NOTE:
---------------
Set of GraalVM components that provide language implementations have changed. The Polyglot native image and polyglot native C library may be out of sync:
- new languages may not be accessible
- removed languages may cause the native binary to fail on missing resources or libraries.
To rebuild and refresh the native binaries, use the following command:
        /usr/local/graalvm-ce/bin/gu rebuild-images
$ ruby -v
truffleruby 20.0.0, like ruby 2.6.5, GraalVM CE Native [x86_64-linux]
array = Polyglot.eval('js', '[1,2,3,4]');
puts array[2];
  • 実行
$ ruby --polyglot --jvm test.rb
3

Polyglot って何?

  • GrralVm上のTruffleRubyでは Polyglot.eval() メソッドに言語のidと実行するコードを渡して実行する
  • 実行時には --polyglot --jvm のようにオプションをつける

OpenSSH

SSHについて

SSH (Secure Shell)は暗号化を用いたリモートホストの遠隔操作用プロトコル

遠隔操作用のプロトコルTELNETは通信内容が暗号化されない。

SSHクライアントがSSHサーバへアクセスする際、ホスト認証とユーザ認証が行われる。

ホスト認証

  1. SSHクライアントがSSHサーバへアクセス
  2. SSHサーバは公開鍵をSSHクライアントに送信する
  3. SSHクライアントは受け取った公開鍵と ~/.ssh/known_hosts ファイルに格納されているSSHサーバの公開鍵と照らし合わせて認証を行う。

公開鍵方式

ユーザ毎に一対の公開鍵と秘密鍵を作成する事前準備が必要。

  1. 一対の公開鍵と秘密鍵を作成する
  2. ユーザの公開鍵を ~/.ssh/authorized_keys に登録する。
  3. SSHクライアントがSSHサーバにアクセスした際にユーザの公開鍵を送信する
  4. SSHサーバが認証すると、SSHクライアントはユーザの秘密鍵を用いて署名を作成する。
  5. データを作成した署名をSSHサーバへと送信する
  6. ユーザの公開鍵で署名を検証し、ログインを許可する

OpenSSHの設定ファイル

SSHクライアント SSHサーバ(sshd
config /etc/ssh/ssh_config /etc/ssh/sshd_config
秘密鍵 ~/.ssh/id_rsa /etc/ssh/ssh_host_rsa_key
公開鍵 ~/.ssh/id_rsa_pub /stc/ssh/ssh_host_rsa_key.pub
認証鍵のリスト ~/.ssh/known_hosts ~/.ssh/authorized_keys

micronaut入門

micronaut

入門

  • 公式Docを見ながら入門してみる
  • SDKMANで簡単にinstallできるらしいので、SDKMANを使う
$ sdk install micronaut

Downloading: micronaut 1.3.4

In progress...

############################################################################################################################################################################## 100.0%############################################################################################################################################################################## 100.0%

Installing: micronaut 1.3.4
Done installing!


Setting micronaut 1.3.4 as default.

project作成

$mn create-app hello-world
  • 起動してみる。めちゃくちゃ起動早い
$ ./gradlew run
Downloading https://services.gradle.org/distributions/gradle-6.1-bin.zip
............................................................................................

Welcome to Gradle 6.1!

Here are the highlights of this release:
 - Dependency cache is relocatable
 - Configurable compilation order between Groovy, Java & Scala
 - New sample projects in Gradle's documentation

For more details see https://docs.gradle.org/6.1/release-notes.html

Starting a Gradle Daemon (subsequent builds will be faster)

> Task :run
09:04:18.745 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 1098ms. Server Running: http://localhost:8080
<=========----> 75% EXECUTING [1m 9s]
> IDLE
> IDLE
> IDLE
> :run
$ curl http://localhost:8080/hello
Hello World

プロジェクトの構造

  • Dockerfileがデフォルトで作成されている。
  • GraalVM上で動かすことが前提になっているから?
 tree
.
├── Dockerfile
├── build
│   ├── classes
│   │   └── java
│   │       └── main
│   │           ├── META-INF
│   │           │   └── services
│   │           │       └── io.micronaut.inject.BeanDefinitionReference
│   │           └── hello
│   │               └── world
│   │                   ├── $HelloWorldControllerDefinition$$exec1.class
│   │                   ├── $HelloWorldControllerDefinition.class
│   │                   ├── $HelloWorldControllerDefinitionClass.class
│   │                   ├── Application.class
│   │                   └── HelloWorldController.class
│   ├── generated
│   │   └── sources
│   │       └── annotationProcessor
│   │           └── java
│   │               └── main
│   ├── resources
│   │   └── main
│   │       ├── application.yml
│   │       └── logback.xml
│   └── tmp
│       └── compileJava
├── build.gradle
├── gradle
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── micronaut-cli.yml
├── settings.gradle
└── src
    ├── main
    │   ├── java
    │   │   └── hello
    │   │       └── world
    │   │           ├── Application.java
    │   │           └── HelloWorldController.java
    │   └── resources
    │       ├── application.yml
    │       └── logback.xml
    └── test
        └── java
            └── hello
                └── world

Linux Debian系パッケージ管理コマンド覚えられない件について

Linux Debian系パッケージ管理まとめ

dpkg

Debian系のパッケージ管理システム

Debian形式のパッケージのインストール・アンインストールを行うこと可能。

オプション 説明 備考
-E (--skip-same-version) パッケージのインストールを行う。指定したバージョンが既にインストールされている場合はインストールしない。 -G との違いに注意。
-G (--refuse-downgrade) パッケージのインストールを行う。新バージョンがインストールされている場合はインストールしない。 -E との違いに注意。
-R (--recursive) 指定したディレクトリの中を再起的に検索し *.deb というパターンマッチをしてインストールを行う。 ディレクトリを指定して実行する
-i (--install) パッケージのインストールを行う。
-r (-remove) 設定ファイルを残してアンインストールを行う。
-P (--purge) 設定ファイルを削除してアンインストールを行う。
-l (--list) インストール済みのパッケージングを検索して表示する。 インストール済みと言うことに注意
-L (--listfiles) 指定したパッケージからインストールされたファイルを表示する。
-s (--status) インストール済みのパッケージの詳細情報を表示する。
-S (--search) 指定したファイルがどのパッケージからインストールされたかを表示する。
-c (--audit) 不完全にインストールされているパッケージを表示する。

apt-get

  • パッケージをインストールしたりできるコマンド。
  • dpkgとは異なり依存関係を調整しながら実行してくれる。
サブコマンド 説明 備考
install パッケージのインストール/アップデートを行う。
remove パッケージのアンインストールを行う。
upgrade インストール済みの全パッケージのアップグレードを行う。 updateとの違いに注意
dist-upgrde ディストリビューションを最新版にアップグレードする。
update パッケージのデータベースを最新版に更新する。
clean 過去にインストールしたパッケージを削除する。

apt-cache

  • aptライブラリのキャッシュへアクセスして検索するコマンド
サブコマンド 説明 備考
search キーワードを含むパッケージを検索する。
show 指定したパッケージ情報を表示する。
shwpkg 指定したパッケージの被依存関係を含めた情報を表示する。 被依存関係に注意
depends 指定したパッケージが依存しているパッケージの一覧を表示する。 依存していると言うことに注意。

apt-file

  • ファイルがどのパッケージに収録されているかを検索できるコマンド。
サブコマンド 説明 備考
update パッケージ情報を最新版に更新する。
search | find パスに検索パターンが入っているファイルを含むパッケージを検索する。 検索パターンを指定することに注意。何故か search と find で同じ挙動をとる。
list | show パッケージに含まれているファイルを一覧表示する。 パッケージ名を指定することに注意。何故か list と show で同じ挙動をとる。