Corredor

ウェブ、プログラミングの勉強メモ。

Bash

JSON の結果をテーブル形式に変換して出力する

jq と column コマンドを使って、JSON 形式のファイルをテーブル形式で表示する。 $ cat << EOL > list.json [ { "id": "aaa", "name": "Aさん", "age": 25, "gender": "Male" }, { "id": "bbb", "name": "BBBBB太郎", "age": 19, "gender": "Female" } ] EO…

jq をインストールするワンライナー

jq をよく使うので、ワンライナーでインストールする方法をまとめておく。 公式の GitHub が Release しているバイナリをダウンロードするのがてっとり早そう。 sudo curl -sS -o /usr/local/bin/jq -L https://github.com/stedolan/jq/releases/download/jq…

df コマンドの結果を JSON 形式に変換する

ディスク使用量が分かる df コマンドの結果を JSON で処理したいなと思い、調べたら awk で JSON 変換するスクリプトがあったので、それをちょっと加工して自分用に作ってみた。 \df -P \ | tail -n +2 \ | awk ' BEGIN { printf "{\n"; printf " \"volumes\…

Docker コンテナの出力を jq にパイプしたらインデントが崩れるのを直す

docker run や docker exec を使って、AWS CLI 的な CLI ツールを動かす。実行結果は JSON 形式で返ってくるので、コレをパイプして jq で整形しようと思った。 # 「get status」的なサブコマンドを実行しているイメージ $ docker run --rm -it my-cli-conta…

Freenom ドメイン・Let's Encrypt 証明書の有効期限を確認・通知する仕組みを作った

最近、いくつかのサイトで Freenom で独自ドメインを取ったり、Let's Encrypt で証明書を取って HTTPS 化したりしている。 GCE https://neos21-gce.ga/ CentOS + Apache → Let's Encrypt を手動設定 OCI 1 https://neos21-oci.cf/ Oracle Linux + nginx → Le…

kubectl get で対象リソースがなくてもエラーにしない (--ignore-not-found)

Kubernetes の kubectl コマンドで、Pod の存在チェックをしたりする時に、対象が存在しないとコマンドの終了コードは 1 になる。 $ kubectl get pod my-app-server Error from server (NotFound): pods "my-app-server" not found $ echo $? 1 Bash スクリ…

シェルスクリプトファイルに実行権限を付与する意味は?

実行権限が必要な理由を考えた。 疑問 ユーザがインタプリタを知らずに実行できるようになる バイナリファイルを実行して良いかどうかの目印 インタプリタで実行するスクリプトは読み込み権限と実行権限が必要 腑に落ちた? 疑問 Linux で、次のようなシェル…

wsl-open:WSL で xdg-open する

デスクトップ環境を持つ Linux において、MacOS の open コマンドに相当することをやる際は、xdg-open というコマンドが使える。 一方、WSL を CUI でのみ使っている場合は、xdg-open では Windows 側の GUI アプリでファイルを開けない。 そこで使えるのが …

Vim でファイル保存時にディレクトリがなかったら作る

Vim で新規ファイルを作成する時、指定したサブディレクトリがないと保存できない。 # 「hoge/fuga/」ディレクトリが存在しないと保存できない $ vim hoge/fuga/test.txt その場でなんとかするなら :!mkdir -p %:h とシェルコマンドを打てばディレクトリが作…

WSL・Ubuntu に Linuxbrew (Homebrew) を入れてみる

MacOS でおなじみのパッケージ管理ツール、Homebrew。それを Linux でも利用できるということで、試してみた。 以前は Linuxbrew と呼ばれていたらしいが、現在は特に MacOS 版と区別なく Homebrew と呼称されている。WSL 上の Ubuntu 18.04 と、素の Ubuntu…

WSL2 で動作しているかどうかを判定する Bash スクリプト

自分はどの環境にでも汎用的に配置できる dotfiles を作ろうとしている。 github.com ~/.bash_profile や ~/.bashrc の中で OS 判定して初期処理を変えたい場合は、if と uname を使って処理してきた。 コレまでは MacOS 用、Linux 用、Windows (GitBash) 用…

GitHub Actions から FTP 転送する

自分のメインサイト Neo's World は GitHub で管理しているが、ファイルの FTP 転送は手動で行っていた。 github.com 一応 npm スクリプトを用意してコマンドラインから FTP 転送したりできるようにはしていたが、完全自動化したくなり、GitHub Actions でコ…

Ctrl + D でターミナルを閉じないようにする

通常の「ターミナル」で作業している時とか、docker exec でシェルに入っている時とかに Ctrl + D を押下すると、シェルからログアウトされてしまう。 Ctrl + D は EOF (End of File)、ファイルの終わりを示す特殊文字で、標準入力の終了を示すことから、シ…

moreutils の中の便利そうなコマンド : sponge と vidir

moreutils という便利コマンド集があって、Yum とか Homebrew とかで簡単に入れられるので試してみた。今回はその中でも特に有用そうな2つのコマンド、sponge と vidir を紹介する。 moreutils のインストール方法 sponge vidir 以上 moreutils のインストー…

ラズパイ4に接続している Bluetooth 機器を信頼する : bluetoothctl

ラズパイ4に Bluetooth キーボードを接続したのだが、どうも接続が切れやすい。自動で再接続してくれるように出来ないかなーと思い調べてみた。 ラズパイで Bluetooth 管理するためのツールとして、Bluez というパッケージが知られている。恐らくデフォルト…

chmod のシンボルモードを覚える

chmod コマンドは、3桁の数字を記載する「数値モード」と、rwx を +- とかで操作する「シンボルモード」という、2種類のパーミッション指定方法がある。 自分は数値モードの方が直感的で多用していたのだが、-R オプションでファイルやディレクトリに再帰的…

コマンドラインで Google 検索を行う googler を試してみた

コマンドラインから Google 検索を行える、Googler というツールを試してみた。 GitHub - jarun/googler: Google from the terminal 検証は MacOS にて。以下のコマンドでシングルバイナリをダウンロードしてインストールした。 sudo curl -o /usr/local/bin…

htop と gtop を試してみる

リッチな top コマンドである htop と gtop を試してみる。 htop gtop htop htop は OS に応じてパッケージマネージャでインストールする。C 言語製。 $ brew install htop # MacOS $ sudo apt install htop # Ubuntu など $ sudo yum install htop # CentOS…

xdg-open : Linux の GUI で Mac の open コマンドっぽいヤツ

MacOS において open コマンドを使うと、 ディレクトリを指定すれば Finder が開き、 ファイルを指定すれば「テキストエディタ」など適切なソフトでファイルが開く といった動きをする。 Windows の場合は start コマンドを使ったり、explorer.exe の引数に…

chown と chgrp を1回で実行する方法

root ユーザでファイルを作ったりしていて、やっぱり apache ユーザとグループで作らないといけなかったー、みたいな時に、 $ chown apache target_file $ chgrp apache target_file と2回コマンドを実行していた。コレがめんどくさいので、chown と chgrp …

自分の全ての GitHub リポジトリを横断的に検索・文字列置換する

はてなブログを HTTPS 配信に切り替えたので、はてなブログへのリンク URL が http:// から https:// に変わった。 neos21.hatenablog.com 自分は GitHub リポジトリの README.md などにはてなブログへのリンクを貼っているので、全ての GitHub リポジトリを…

Bash でコマンドをエディタで編集して実行する

私はどのようにしてLinuxカーネルを学んだか【電子書籍】[ 平田豊 ]価格: 550 円楽天で詳細を見る Bash 上で Ctrl + x → Ctrl + e とキーを押すと、エディタが開く。このエディタ上でコマンドを編集し、エディタを醜虜すると、入力したコマンドが一括実行で…

Bash でアスタリスクを展開させないようにする

Bash のコマンド中に、アスタリスク * を「文字列」として認識させたい場合があったりする。 # 以下のような場合は「アスタリスク展開」をさせたいが… $ cp ./* ../../dest/ # 以下のコマンドでは「アスタリスク」を文字として使いたい $ set_char * (set_ch…

yum や apt コマンドをラップする「pmw」コマンドを作った

Red Hat Enterprise Linux 7 (できるPRO) [ 平初 ]価格: 3300 円楽天で詳細を見る 僕は CentOS 歴が長いので、Ubuntu の apt コマンドに慣れず、ついつい yum コマンドの要領でコマンドを叩いてしまう。また、Windows の Git SDK に同梱される pacman は全…

Docker で Ubuntu 18.04 を動かしたら日本語入力ができなかったので対処

Ubuntu 18.04 LTS 日本語 Remix 使い方が全部わかる本【電子書籍】ジャンル: 本・雑誌・コミック > PC・システム開発 > その他ショップ: 楽天Kobo電子書籍ストア価格: 1,628円 以前、Docker で動かした CentOS で、日本語表示の文字化けを直す方法を紹介した…

Bash で空の if ブロックを書くにはコロン「:」を使う

難読化シェル芸の世界【電子書籍】[ kanata ]ジャンル: 本・雑誌・コミック > PC・システム開発 > OS > UNIXショップ: 楽天Kobo電子書籍ストア価格: 3,080円 次のような Bash スクリプトを書いた。 #!/bin/bash if [ 'a' == 'a' ]; then # 今は処理がないの…

ファイルを指定行数ごとに分割するスクリプトを PowerShell と Bash で

PowerShell実践ガイドブック クロスプラットフォーム対応の次世代シェルを徹底解説【電子書籍】[ 吉崎 生 ]ジャンル: 本・雑誌・コミック > PC・システム開発 > プログラミング > プログラミング入門ショップ: 楽天Kobo電子書籍ストア価格: 4,048円 PowerShe…

Node.js をシェルのパイプ中で使ってみる

Node.js 超入門 第2版 [ 掌田津耶乃 ]ジャンル: 本・雑誌・コミック > PC・システム開発 > その他ショップ: 楽天ブックス価格: 3,300円 Perl や Ruby だと、よくシェルの中でワンライナーを書いて実行していたりする。それを Node.js でもやってみようという…

指定コマンドを繰り返し実行してくれる watch コマンドを試してみた

Linuxシステム〈実践〉入門 沓名亮典/著ジャンル: 本・雑誌・コミック > PC・システム開発 > その他ショップ: ドラマ 本と中古ゲームの販売買取価格: 3,168円 REST API で動作ログが確認できるサービスがあり、CLI でログを見られるのだが、何度も同じコマン…

ログファイルに同一行が何行あるかカウントするワンライナー

アクセスログのファイルなんかを見ていて、「12時台に一番アクセスがあったページはどれかな?」みたいなのを探る時に、コマンドで探る方法を紹介する。 example.log 2020-01-01T00:01:24 /index.html 200 2020-01-01T00:01:25 /somepage.html 200 2020-01-0…