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入れて色々試してました。なのでコマ問いらなかったのかも。
感想
コマンドのオプションを覚えるのがきつすぎる問題
ブログにもPOSTしているがこれらを全て覚えるのが困難を極めた。
覚える必要があるのかしら、という疑問はさておき脊髄反射的に正解を選べるまでping-tを繰り返した。
実際こんな感じ模試は50回くらいやったかもしれない。
ぽちぽちしているだけなので涅槃に達するときもあったんじゃないかと思う。
試験範囲広すぎる問題
CISCO?とか狙っている人にはまず気にならないと思うが、試験範囲がめちゃくちゃ広い。
JavaSilver とか PHP7 とかに比べてかなりの物量がある。
AzureのAZ-900とかもとったことがあるけど、あれは過去最速で取れた。
合格だけしても意味がない気がしたので、ちゃんとLinuxの環境は用意した。
色々はまったりしたのでそれも込みでめっちゃ勉強した気がする。
スコア
スコアは666と悪魔のようなスコアで合格した。
こんだけ頑張ったわりにわりとギリギリで引いている。
「努力は必ず報われる」は報われる中でも最低限許容範囲までならなんとかなるよという意味らしい。
合格祝い
自分の合格祝いでアードベックを買った。これで102も頑張れる気がする。
Webフロントエンド ハイパフォーマンス チューニング
Webフロントエンド ハイパフォーマンス チューニング
Loading (リソースの読み込み)
HTML CSS JS 画像などを読み込む(リソースの読み込み)
Download、Parseの処理がある
Download:HTMLを含む様々なリソースの読み込みが走る
Parse
HTMLの場合はDOMツリーに、CSSの場合はCSSOMツリーに変換される
DOMツリーがscriptタグ内のJavaScrptの内容に依存するように記載されていた場合、DOMツリーの構築がブロックされる
CSSOMツリーはJavaScriptからもアクセスでき、LayoutやPaintingのフェーズでスタイルの計算に使用される
Spripting JavaScript実行
レンダリングエンジンはJavaScriptのコードをJavaScriptエンジンに引き渡して実行させる。
JavaScriptのコードをトークン列をパースして抽象構文木を作成してコンパイルする
JavaScriptの実行はDOMイベントが実行されてイベントリスナが起動するときにも発生する
Rendering
- レイアウトの計算
Paiting
- レンダリング結果の描画
レンダリングエンジン
レンダリングエンジンとは?
ブラウザ名 | レンダリングエンジン |
---|---|
Chrome | Blink |
Firefox | Gecko |
Safari | Webkit |
IE | Trident |
Edge | EdgeHTML |
Opera | Blink |
- BlinkはWebkitをForkして作成されているため処理が似ている
JavaScriptエンジン
JavaScriptエンジンとは?
- JavaScrpitの実行環境を提供するソフトウェアコンポーネントのこと
ブラウザ名 | JavaScriptエンジン |
---|---|
Chrome | V8 |
Firefox | SpiderMonkey |
Safari | Nitro |
IE | Chakra |
Edge | Chakra |
Opera | V8 |
GraalVM②
- Graalは言語間で呼び出しができるらしいのでお試しテスト
JavaScript -> Java
- Javaの配列をJavaScriptの配列に入れてみるテスト
$ 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]
- Rubyを書く
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サーバへアクセスする際、ホスト認証とユーザ認証が行われる。
ホスト認証
- SSHクライアントがSSHサーバへアクセス
- SSHサーバは公開鍵をSSHクライアントに送信する
- SSHクライアントは受け取った公開鍵と
~/.ssh/known_hosts
ファイルに格納されているSSHサーバの公開鍵と照らし合わせて認証を行う。
公開鍵方式
ユーザ毎に一対の公開鍵と秘密鍵を作成する事前準備が必要。
- 一対の公開鍵と秘密鍵を作成する
- ユーザの公開鍵を
~/.ssh/authorized_keys
に登録する。 - SSHクライアントがSSHサーバにアクセスした際にユーザの公開鍵を送信する
- SSHサーバが認証すると、SSHクライアントはユーザの秘密鍵を用いて署名を作成する。
- データを作成した署名をSSHサーバへと送信する
- ユーザの公開鍵で署名を検証し、ログインを許可する
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
- https://micronaut.io/index.html
- JVMベースのフルスタックフレームワーク
- Java Groovy Kotlin をサポートしているみたい
- とにかく高速で起動できて、メモリ消費率がかなり少ないみたい
入門
- 公式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
色々とライブラリがインストールされているのを眺めていたら終わったのでhttp://localhost:8080/ にアクセス https://gyazo.com/acda7787293e720c6e03049318038a7f
JSON形式で表示された
HelloWorldしてみる https://gyazo.com/0c1425d33e86c64e18b6bcf4c17c4299
$ 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 で同じ挙動をとる。 |