Diary

Diary

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

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

Linux システムにおけるファイル管理は、その強力な機能性と柔軟性により、開発者やシステム管理者に広く利用されています。

多くのユーザーが頻繁に使用する rm コマンドは、ファイルを『削除する』と一般に認識されていますが、その背後にはより複雑なメカニズムが存在します。
本記事では、rm コマンドが実際に何を行っているのか、そしてLinuxファイルシステムの核心概念であるinodeとディレクトリエントリについて掘り下げていきます。
また、lnコマンドと比較することで、ファイルシステムの理解を一層深めます。

まとめ

  • inode とディレクトリエントリを分けて考える
  • rm コマンドの実態は unlink システムコール
    • そのファイルを開いているプロセスが 0 の場合は実態ごと削除される
    • ln コマンドと逆の操作

目次

続きを読む

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

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

今回は, grep のオプションで解決する方法をメモしておきます。

続きを読む

Go で是非とも使いたいオプション一覧

Go のコマンドには様々なオプションが存在します。

今回は、現時点でつけておいて損がないのではないかと思ってるフラグを紹介させてもらいます。

まとめ

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -trimpath -o ./api2 ./app

go test -race -cover -shuffle=on ./... -v

go run -race app/*

[目次]

続きを読む

【Cloudflare】R2 を Go から扱う

Cloudflare でオブジェクトストレージといえば R2 ですが、
ドキュメントにもあるように S3 との互換性を大切にしています。

今回は Cloudflare の web 画面での R2 バケットの作成から、s3 の sdk を使って object の作成・取得を試してみたいと思います。

※ 本記事の内容は 2024/02/16 現在の情報をもとに作成しております。

[目次]

続きを読む

【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 ap-northeast-1 --service-name Amazon_Linux_2-1 --service-name container-service-1 --label testlabel --image web-backend:ee0e066df842

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
Command '['lightsailctl', '--plugin', '--input-stdin']' returned non-zero exit status 1.

原因

Docker context の指す endpoint がデフォルト値(unix:///var/run/docker.sock)と異なること。

$ docker context ls
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT                                  KUBERNETES ENDPOINT   ORCHESTRATOR
default             moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock                                            
desktop-linux *     moby                Docker Desktop                            unix:///Users/kokoichi/.docker/run/docker.sock 

解決方法

コマンド実行時に HOST を明示して上書きしてあげる。

$ DOCKER_HOST=unix:///Users/kokoichi/.docker/run/docker.sock aws lightsail push-container-image --region ap-northeast-1 --service-name Amazon_Linux_2-1 --service-name container-service-1 --label testlabel --image sns-app-backend:ee0e066df842
続きを読む

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

ユースケース

HogeFuga → hogeFuga みたいな『先頭のみの大文字小文字を変換する』ということがしたいケースがありました。

同じ要領で『キャメルケース → スネークケース(逆も)』ができたのでその紹介です。

(注: 以下コマンドの結果はすべて GNU sed によるものです。)

まとめ

# キャメルケース → スネークケース
$ echo HogeFuga | gsed 's@[A-Z]@_\L&@g' | gsed 's/^_//'
hoge_fuga

# スネークケース → キャメルケース
$ echo hoge_fuga_pien | gsed -E 's@_(.)@\U\1@g'
hogeFugaPien
$ echo hoge_fuga_pien | gsed -E 's@_(.)@\U\1@g' | gsed 's@^.@\U&@'
HogeFugaPien
続きを読む

systemd で定期実行する

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

systemd などのタスク系に関しては、うまく動いてるかの確認がより大事になってきます。

[目次]

続きを読む