Diary

Diary

日々学んだことをアウトプットする場として初めてみました

Linux

ターミナルで RDB の JOIN

join というコマンドがすごい便利だったので共有です。 概要 manual page にもあるように、RDB の join と同じことができます。 $ man join JOIN(1) General Commands Manual JOIN(1) NAME join – relational database operator RDB に多少触れたことがある…

rm コマンドはファイルを削除するわけではない: Linux のファイルシステム深掘り

Linux システムにおけるファイル管理は、その強力な機能性と柔軟性により、開発者やシステム管理者に広く利用されています。 多くのユーザーが頻繁に使用する rm コマンドは、ファイルを『削除する』と一般に認識されていますが、その背後にはより複雑なメカ…

grep で特定のフォルダを無視して再帰検索する

プログラミングにおいてコード内の特定の文字列を探すことは多いですが、特に大規模なプロジェクトでは、この作業が一筋縄ではいかないことがあります。 node_modules や dist といったディレクトリを含めたくない場合がその典型例です。 今回は, grep のオ…

【AWS-CLI】Lightsail の push-container-image 実行時に Is the docker daemon running? エラー

[目次] 環境 まとめ 背景 おわりに 環境 Host: mac m1 Docker: v24.0.6 Docker context: Docker Desktop AWS CLI: aws-cli/2.13.25 Python/3.11.6 Darwin/22.1.0 source/arm64 prompt/off まとめ エラー内容 $ aws lightsail push-container-image --region …

正規表現でキャメルケースをスネークケースにする

ユースケース HogeFuga → hogeFuga みたいな『先頭のみの大文字小文字を変換する』ということがしたいケースがありました。 同じ要領で『キャメルケース → スネークケース(逆も)』ができたのでその紹介です。 (注: 以下コマンドの結果はすべて GNU sed に…

systemd で定期実行する

『systemd で定期実行をする』というよくある内容ですが、設定できたつもりになってた自分自身の反省を兼ねてメモしておきます。 (細かい設定方法については説明しません。) systemd などのタスク系に関しては、うまく動いてるかの確認がより大事になって…

terminal で alias の定義場所を探す

ターミナルで作業をする時、alias 等を使い極力文字数を減らして打ち間違いを防ぐ事が多いかと思います。 しかし oh-my-zsh などのツールによって設定された値など、たまに「あれ?これどこで定義された alias だっけ?」ってなる事があります。 そんな時は…

bash でシェルオプションを確認・変更する

『現在のシェルセッションにおける変数と関数の一覧を表示』するには set コマンドに何もつけずに叩きます。 # 240 行もあり。 $ set | wc -l 242 # PATH だけを出力。 set | grep PATH シェルオプションの現在の状態を表示するには o オプションをつけて叩…

bash で標準エラー出力のリダイレクト・パイプラインを扱う

今更感ですが、標準エラー出力をリダイレクトやパイプに渡す方法をメモしておきます。 [目次] 標準エラー出力とは 標準エラー出力を特定のファイルにリダイレクトさせる 標準エラー出力を切り捨てる 標準エラー出力をパイプに渡す

bash のみで progress bar をつくる

特に bash のみで作る理由はないですが、こんなことも出来るんだという紹介です。 [目次] echo のオプション r c progress bar 実装

zsh: history から失敗したコマンドを削除する

課題 terminal 上のコマンドは実行履歴が残っており、それを shell の history と呼ぶのですが、そんな history は情報の山となってます。 自分は主に『過去のコマンドを history から呼び出し fzf で曖昧に検索する』みたいな用途で使っているのですが、そ…

どうしてもヌルバイトを使用したい

どうしてもヌルバイト (NUL) を出力・使用したいことがあったで、その時の出し方についてメモしておきます。 [目次] ヌルバイトとは ターミナルからの出力 どんな問題が? db: postgresql コマンドの結果が期待値とならない シェル設定によってはセパレータ…

システムコールを元に HTTP サーバーの解像度を上げる (with Go 実装)

HTTP サーバーってどんな仕組みで動いてるのかずっと気になっていたのですが、 『ふつうのLinuxプログラミング』に説明 + c での実装があったため、その理解を元に適当に Go でやってみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べるg…

mac と Linux で特定のポートを使用しているプロセスを調べる

lsof を使うのが簡単で良さそうです。 lsof -i:8080 $ lsof -i:8080 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME main 77228 kokoichi 4u IPv6 0x50df81af803226e5 0t0 TCP *:http-alt (LISTEN) # その後該当プロセスを削除する場合。 # 77228 は上…

パイプの中身をシステムコールレベルで理解・実装する

パイプの中身をシステムコールレベルで理解・実装する 『ふつうのLinuxプログラミング』を読んで勉強させてもらったメモになります。 コードは載ってなかったため自分で実装してみました。 ふつうのLinuxプログラミング 第2版 Linuxの仕組みから学べる…

Basic 認証のあれこれ

非常に今更ですが、徳丸本 §3.1 ででてきたため、実際に手を動かして確認してみました。 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版[固定版] 脆弱性が生まれる原理と対策の実践新品価格¥3,344から(2023/10/18 00:27時点) 目次 まとめ おさら…

はてなブログ API の結果を xml から json へ変換(xq, sed, jq)

はてなブログ API を叩いた時の備忘録と、その際 jq を使ってみたのでそのメモになります。 レスポンスが xml だったので、xq と sed と jq を使って一歩ずつ理想とする形に近づけました。 結論 xq を使って xml を json にしたら要素が 1 つの時は string, …

シェルのパイプ連結をシステムコールから理解する

シェルの上でよく遊ぶ方であれば、パイプ | は非常にお世話になっているかと思います。 今回はそんなパイプについて、どのようなシステムコールが呼ばれているかを追うことで理解を深めてみました。 [目次] - まとめ - 環境 - pipe status の復習 - システム…

Apache2 で特定のパスへの reverse proxy

いつもやり方がわからなくなるので、備忘録として残しておきます。 やりたいこと 同じローカルマシンに立てたサーバーに、特定のパスを reverse proxy したい。 例: <base_url>/status にアクセスが来たとき、localhost:3000 に立てたサーバーに reverse proxy する。 </base_url>…

datadog で apache のログを収集してる際の /server-status を無視する

個人で勉強のために datadog を入れてみてラズパイで動かしているのですが、CPU 等を監視するために datadog-agent が 15 秒おきに /server-status?auto へアクセスを行なっているようです。 気づい時には 3 万 4000 ほど /server-status?auto へのログが da…

Go 言語で CLI ツールを爆速で作る方法

TOC なぜ Go 言語で CLI ツールを作るのか 作り方 サブコマンドを取らない場合 サブコマンドを取る場合 cobra の使用例 urfave/cli 実際にやってみる setup 初期化 サブコマンドの追加 注意点 なぜ Go 言語で CLI ツールを作るのか 以下の 4 点がぱっと思い…

jq: 階層化された json で UNIX タイムスタンプ を ISO 8601 形式の時間に変換する

TOC 目標 結論 解説 多階層を扱う jq で時刻を扱う 文字列操作 メモ 疑問 おまけ 目標 ↓ の 1 つ目の json を 2 つ目の json のように変換することです。 .*_timestamp の key を持った部分をターゲットとし、key から _timestamp の suffix を削除、value …

bash [[ 内での <,> は文字列比較になるよ

bash で変数の評価を行う際に [[ をよく使うんですが、その中の <, > の意味を間違っていたがために、無駄に時間を使ってしまう事件がありました。 (未来の自分を含めた)皆さんには変なところで躓いて欲しくないため、こちらにメモしておきます。 [目次] …

bash スクリプト初心者が知っておきたいことまとめ

いまだに自分も初心者ですが、 初心者から見て初めに知っておきたかったこと、思いがけず詰まったことをメモしておきたいと思います。 誰か(来年のぼく)の参考になればと思います。 [目次] 環境 結論 スタイル編 変数 [ はコマンドです! エラーが起きても…

bash で `!` は特殊な意味を持つっていう話

bash で ! は特殊な意味を持つので注意しよう、という話をしたいと思います。 私は語尾に ! をつける癖があるのですが、そのせいで予想と異なる挙動をすることがありました。 [目次] 時間がないひとまとめ 環境 なにが起こったか とりあえずはマニュアル ! !…

bash リダイレクトはファイルを初期化します

これはかつての自分が本当に体験したことなのですが、『ファイルの情報源』と『リダイレクトの出力先』を同一にしてしまったために起きた怖い怖い現象の話をしたいと思います。 [目次] 環境 時間ない人向けまとめ 自己リダイレクト system call をみてみる …

IFS を変えてセミコロンで文字列を分割する

IFS とは IFS とは Internal Filed Separator の略語であり、シェルの環境変数で設定されています。 現在の値確認 では実際に、現在設定されている IFS を確認してみます。 # ubuntu: # bash: version 5.0.17(1)-release (aarch64-unknown-linux-gnu) $ echo…

Bash スクリプトでよく使うテクニックまとめ

コマンド単位の使い方ではなく、作業効率化のためのスクリプトを書く際などに使えるテクニックをまとめてみました。 便利なものがあれば随時追加していきます。 [目次] エラー対策 set -e 指定時にエラーでも止めないようにする ファイル内容のコメント 複数…

bash でコマンドの実行結果をファイルとして扱う

プロセス置換(Process Substitution)を用います。使い方と一緒に、ぜひ名前も覚えましょう。 使い方 # 通常のファイル入力の場合 $ cat test.txt # コマンドの実行結果をファイルとして扱う場合 $ cat <(echo "hoge from echo command") hoge from echo co…

awk 1 とは何か

awk 1という表現についてメモしておきます。 awk 大前提として、awkの基本パターンは『(マッチ)パターン+アクション』です。 そして awk では以下のように記述します # awk 'pattern {action}' $ echo 'hoge fuga pien' | awk '/fuga/ {print $0}' hoge f…