Quantcast
Browsing Latest Articles All 701 Live
Mark channel Not-Safe-For-Work? (0 votes)
Are you the publisher? or about this channel.
No ratings yet.
Articles:

Bashの${@}と${*}の違いについて

ShellCheckとは

シェルスクリプトの構文をチェックしてくれるソフトです。
「動くけどやめたほうがいい」というコードも教えてくれるので非常に便利です。

SC2145

以下のコードでエラーが出ました。(実際の関数じゃないけど同じようなやつ)

say (){echo${@}}

どうやらこちらのサイトによると${@}ではなく${*}を使うべきらしいです。

正確には${@}だとIFSを考慮せずそのまま連結してしまうためだそうです。

自分も深くは理解してないので間違ってたらコメントでお願いします。

今日の月齢を絵文字で表示するシェルスクリプト

Unicode絵文字が表示可能なフォントが設定されたターミナル上で実行すると、本日のおおよその月齢を計算して対応する絵文字を出力するシェルスクリプトです。

moonage.sh
#!/bin/bashyear=`date +%Y`month=`date +%m`date=`date +%d`#簡易月齢計算法第1表array=(0 2 0 2 2 4 5 6 7 8 9 10)#西暦年数から11を引き、その値を19で割った余りを求め、11を掛ける。この値をaとする。a=$((($year-11)%19*11))#月数から、表に従って値を求める。この値をbとする。b=$((${array[$(($month-1))]}))age=$((($a+$b+$date)%30))if["$age"= 0 ]||["$age"= 29 ];then
    echo-n"🌑新月"elif["$age"-ge 1 ]&&["$age"-le 6 ];then
    echo-n"🌒三日月"elif["$age"-ge 7 ]&&["$age"-le 9 ];then
    echo-n"🌓上弦の月"elif["$age"-ge 10 ]&&["$age"-le 13 ];then
    echo-n"🌔十三夜月"elif["$age"-ge 14 ]&&["$age"-le 15 ];then
    echo-n"🌕満月"elif["$age"-ge 16 ]&&["$age"-le 20 ];then
    echo-n"🌖寝待月"elif["$age"-ge 21 ]&&["$age"-le 24 ];then
    echo-n"🌗下弦の月"elif["$age"-ge 25 ]&&["$age"-le 28 ];then
    echo-n"🌘二十六夜月"fi
echo"(月齢:"$age")"

実行結果

~% chmod +x moonage.sh
~% date
2020年  7月  2日 木曜日 14:47:54 JST
~% ./moonage.sh
🌔十三夜月(月齢:11)

参考にしたサイト
月齢 - Wikipedia
月齢計算
Googleカレンダーに月齢を表示する

「fish shell」を導入したら、システム開発の作業効率が改善したよ❗

私は、Mac 環境で「fish」と呼ばれるシェルを使用してシステム開発をしています。

fish は、スマートでユーザーフレンドリーなコマンドラインシェルです。

fish

他にも、旧 Mac 標準の「bash」や macOS Catalina からデフォルトシェルになった「zsh」もあります。

たまに案件によって使用禁止というところもありますので、3つのシェルを使えるようにカスタマイズしています。

zsh を Mac のデフォルトシェルとして使う

一度「fish」を使用してみると、快適すぎて他のシェルに戻れなくなってしまいました(苦笑)

この note を読んでいるってことは、大多数がエンジニアさんだと思いますので、その魅力を少しでもお伝えできれば幸いです。

目次

fish とは
事前準備
fish のインストール
設定
ドキュメント
プラグイン管理ツールのインストール
プラグインのインストール
その他
プログラミング環境


fish とは

普通に読めば”お魚”と思いますが、”Friendly interactive shell”の略称だそうです。

スクリーンショット 2020-06-17 15.15.14.png

デフォルトで強力な機能が備わっているので、インストールしただけでも十分に活用できます。

メリットはたくさんありますが、ブレット的に書くとこんな感じ。

✓ カラフルでわかりやすい(24bit カラーのサポート)
✓ シンタックスハイライトが効く
✓ ブラウザから細かな設定ができる
✓ コマンドやパスなどのオートサジェスチョン機能の搭載
✓ タブ補完ができる
✓ コマンドエラー判定がある
✓ 存在しないコマンドやディレクトリの場合は赤文字で表示される
✓ grep に 色がつく

など

実際に使用してみるのがわかりやすいので、まずはインストールしてみましょう❗

事前準備

Xcode:

まずは事前準備として、Xcode をインストールしましょう。

お好きな方からインストールしてください。

App store から Xcode をインストールする場合

Xcode

コマンドラインからインストールする場合

$ xcode-select --install

Homebrew からインストールする場合

# Homebrewをインストール
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Homebrewインストール完了確認
$ brew doctor

Powerline フォント(お好み)

お好みになるので必須ではないですが、テーマによっては文字化けすることがあるため、私は powerline フォントをインストールしています。

ターミナルのほか、iTerm2 にもフォントを変更しております。

powerline/fonts

# Gitでクローン
$ git clone https://github.com/powerline/fonts.git --depth=1

# インストール
$ cd fonts
$ ./install.sh

# 要らないファイルを削除
$ cd ..
$ rm -rf fonts/

iTerm2(お好み)

こちらもお好みですが、いざ乗り換えてみると細かい環境設定や便利な機能があったりと、意外と Hotkey が便利だったりします。

私のまわりでも iTerm2 を使用しているエンジニアは多いです。

詳細は、過去の note に書いていますのでご覧ください。

コマンドラインツール「iTerm2」の環境構築をしよう❗

こちらの記事も Qiita にまとめる予定です。

もうしばらくお待ちください。

ということで、iTerm2 のインストールは、上記の記事に書いていますので、今回は省きます。

iTerm2 のフォント変更は、以下になります。

「Profiles > Text > Font」を選択し、フォントを変更します。

スクリーンショット_2019-10-08_16_00_44.png

私の場合は、"Hack Nerd Font" を使用しています。

fish のインストール

公式サイトからインストールしてください。

fish shell

画像の通り、インストール方法はいろいろあります。

スクリーンショット 2020-06-17 16.01.57.png

Homebrew の場合

# インストール
$ brew install fish

# バージョンが表示されることを確認
$ fish -v
fish, version 3.1.2

インストール後、デフォルトシェルを変更をします。

$ chsh -s /usr/local/bin/fish

もし fish をインストールしても ”/etc/shells” に ”/usr/local/bin/fish” が追加されていない場合は、次のコマンドで追加してください。

$ echo /usr/local/bin/fish | sudo tee -a /etc/shells

設定後、シェルを再起動すると fish が起動されるようになります。

設定

fish 上で、以下のコマンドを入力すると各種設定や履歴などが確認できるページがブラウザで表示されます。

$ fish_config

こんな感じ。

カラーバリエーションが豊富ですよね。

※ iTerm2 を使っている場合、配色の変更は iTerm2 側に依存するため反映されません。

スクリーンショット 2020-06-17 16.54.31.png

デフォルトの設定でカラーやプロンプトを変更してみましょう。

プロンプトで表示する情報を増やすことで、業務効率の向上に繋がります。

プロンプトに気に入ったものがない場合は、後述するプラグインを導入してカスタマイズすることができます。

ドキュメント

fish 上で、以下のコマンドを入力すると、本家ドキュメントがブラウザで表示されます。

$ help document

こんな感じ。

スクリーンショット 2020-06-17 17.02.00.png

日本語のドキュメントを見たい方は、全訳!fishシェル普及計画さんのページをご覧ください。

fish2.4日本語ドキュメント:すぐ使える25の便利機能と実例

ここまででも充分に便利ですが、更に便利にするためプラグインを導入してみましょう。

できれば、紹介しているプラグインをすべてインストールするのではなく、機能を理解したうえで自分に合ったものだけインストールするようにしましょう。

プラグイン管理ツールのインストール

Jorge Bucaran さんが、fish 情報をまとめて下さっていますので、こちらを参考に進めてもいいと思います。

jorgebucaran/awesome-fish

Fisher:

fisher は fish のパッケージ管理ツールです。

昔は、fisherman という名前でした。

プラグイン導入に必須ですので、インストールしましょう。

jorgebucaran/fisher

fisher のインストール

※隠れている文字もありますのですべてコピーしてね。

$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

fisher でプラグイン追加

fisher でプラグインを追加するには、次のように ”fisher add” を使用します。

$ fisher add <パッケージ名>

ヘルプの表示

コマンドは install、update、remove、list、help のみです。

$ fisher help

fisher: unknown flag or command "help"
usage: fisher add <package...>     Add packages
      fisher rm  <package...>     Remove packages
      fisher                      Update all packages
      fisher ls  [<regex>]        List installed packages matching <regex>
      fisher --help               Show this help
      fisher --version            Show the current version
      fisher self-update          Update to the latest version
      fisher self-uninstall       Uninstall from your system
examples:
      fisher add jethrokuan/z rafaelrinaldi/pure
      fisher add gitlab.com/foo/bar@v2
      fisher add ~/path/to/local/pkg
      fisher add <file
      fisher rm rafaelrinaldi/pure
      fisher ls | fisher rm
      fisher ls fish-\*

コマンドを忘れてしまっても help さえ覚えておけば問題ないと思います。

英語も簡単なので親切ですね。

プラグインのインストール

〜 oh-my-fish 編 〜

【oh-my-fish/plugin-balias】

alias の代わりに balias と書くことで、alias を補間してくれます。

エイリアスを定義した上で、なおかつ登録したエイリアスも他のコマンドと同じように補完できます。

oh-my-fish/plugin-balias

インストール

$ fisher add oh-my-fish/plugin-balias

設定

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

$ vim ~/.config/fish/config.fish

# 例:git のエイリアスを追加する場合
# git コマンドを g で打てるように登録

# 下記を追記
balias g git

以上


【oh-my-fish/plugin-expand】

cd を冒頭につけなくてもディレクトリ移動ができるようになります。

oh-my-fish/plugin-expand

インストール

$ fisher add oh-my-fish/plugin-expand

以上


【oh-my-fish/plugin-peco】

使い勝手の良いフィルタリングツールです。

コマンドの実行履歴の絞り込みには peco、もしくは、後述の fzf のどちらか一方で良いと思います。

以下、2つの機能を提供してくれます。

  • peco_kill ・・・ プロセスキル
  • peco_select_history ・・・ コマンド履歴

peco/peco

oh-my-fish/plugin-peco

インストール

$ brew install peco

$ fisher add oh-my-fish/plugin-peco

設定

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

peco_select_history と peco_kill をそれぞれキーバインド設定しています。

$ vim ~/.config/fish/config.fish

# 下記を追記
function fish_user_key_bindings
  bind \cr 'peco_select_history (commandline -b)' # control + R
  bind \cx\ck peco_kill # control + X からの control + K
end

peco を使ってヒストリーをフィルタリングできるようにしています。

$ vim ~/.config/fish/config.fish

# 下記を追記
function peco_select_history_order
  if test (count $argv) = 0
    set peco_flags --layout=top-down
  else
    set peco_flags --layout=bottom-up --query "$argv"
  end

  history|peco $peco_flags|read foo

  if [ $foo ]
    commandline $foo
  else
    commandline ''
  end
end

function fish_user_key_bindings
  bind /cr 'peco_select_history_order' # control + R
end

以上


【oh-my-fish/plugin-extract】

どんな圧縮ファイルも解凍してくれる extract コマンドです。

oh-my-fish/plugin-extract

インストール

$ fisher add oh-my-fish/plugin-extract

以上


【jethrokuan/fzf】

よく使うプラグインで、ファイル検索や実行コマンド検索を、あいまい検索で絞り込みができるコマンドラインツールです。

control + R で実行履歴を表示し、コマンドが選択できます。

上へ移動する場合 ・・・ control + K or ↑
下へ移動する場合 ・・・ control + J or ↓

jethrokuan/fzf

インストール

$ brew install fzf

$ fisher add jethrokuan/fzf

設定

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

$ vim ~/.config/fish/config.fish

# 下記を追記
set -U FZF_LEGACY_KEYBINDINGS 0
set -U FZF_REVERSE_ISEARCH_OPTS "--reverse --height=100%"

FZF_LEGACY_KEYBINDINGS:

新しいキーバインドを使用するのに必要

FZF_REVERSE_ISEARCH_OPTS:

”–reverse”オプション ・・・ 入力欄をターミナル上部に表示させる
”–height”オプション ・・・ フルスクリーンで表示させる

もし、peco を設定している場合は、キーバインドが重複しないように注意ください。

以上


【sijad/gitignore】

.gitignore を作成できます。

sijad/gitignore

インストール

$ fisher add sijad/gitignore

以上


【jorgebucaran/fish-bax】

時間がかかる処理のときクルクル回るアイコンを表示されます。

jorgebucaran/fish-bax

インストール

$ fisher add jorgebucaran/fish-bax

以上


【jethrokuan/z】

よく使うプラグインで、過去に訪れたディレクトリを記憶・移動できるコマンドです。

スペースの後にタブで補完することができるので、ディレクトリの移動が楽になります。

z + -l でトラックしているディレクトリのリストを表示したり、z + 文字列 で履歴から移動するディレクトリの候補を表示してくれます。

jethrokuan/z

インストール

$ fisher add jethrokuan/z

以上


【ghq】

git repository を置いているディレクトリを設定します。

ghq は、Go 言語で作成されたツールで、リポジトリを一元管理してくれるツールです。

少しややこしいので、GitHubのページをよく読んでインストールと設定をしましょう。

decors/fish-ghq

インストール

$ brew install go

$ brew install ghq

# git repositoryを置いているディレクトリを設定
# 例:~/dev
$ git config --global ghq.root ~/dev

$ fisher add decors/fish-ghq

クローンしたリポジトリを一括管理できます。

ghq.root を設定することで、保存先のディレクトリを意識せず手軽にクローンできます。

$ ghq get <リポジトリURL>

clone したリポジトリは、~/.ghq/github.com で管理されているので、peco または fzf でリポジトリ一覧をフィルタリングし、選択したディレクトリに cd するようにすれば、リポジトリへの移動が非常に楽になります。

Go をインストールしたら、”~/.config/fish/config.fish” で GOPATH を設定します。

# Golang
set -x GOPATH $HOME/dev
set -x PATH $PATH $GOPATH/bin

go get を実行して ghq をインストールします。

$ go get github.com/motemen/ghq

$ source ~/.config/fish/config.fish

以降は peco または fzf で使いたい方を設定してください。

ghq + peco の設定:

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

# ghq + peco
function ghq_peco_repo
  set selected_repository (ghq list -p | peco --query "$LBUFFER")
  if [ -n "$selected_repository" ]
    cd $selected_repository
    echo " $selected_repository "
    commandline -f repaint
  end
end

# fish key bindings
function fish_user_key_bindings
  bind /cg ghq_peco_repo
end

ghq + fzf の設定

fisher でプラグインを追加します。

$ fisher add decors/fish-ghq

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

# ghq + fzf
function ghq_fzf_repo -d 'Repository search'
  ghq list --full-path | fzf --reverse --height=100% | read select
  [ -n "$select" ]; and cd "$select"
  echo " $select "
  commandline -f repaint
end

# fish key bindings
function fish_user_key_bindings
  bind \cg ghq_fzf_repo
end

以上


【hub】

GitHub に対する操作をコマンドラインから簡単に行うためのツール。

github/hub

インストール

$ brew install hub

$ hub version
git version 2.27.0
hub version 2.14.2

~/.config/fish/config.fish ファイルを編集して以下のように設定を追記します。

eval (hub alias -s)

以上


その他

【edc/bass】

Bash の文法を fish シェルでも使えるようにしてくれる。

edc/bass

インストール

$ fisher add edc/bass

以上


【0rax/fish-bd】

ディレクトリを遡ることができます。

$ cd ../../../ のような相対パスを打たなくてよくなります。

0rax/fish-bd

インストール

$ fisher add 0rax/fish-bd

以上


【yoshiori/fish-peco_select_ghq_repository】

ghq コマンドと peco の連携ができます。

ghq リポジトリ群を peco で選択して移動できる。

yoshiori/fish-peco_select_ghq_repository

インストール

$ fisher add yoshiori/fish-peco_select_ghq_repository

設定

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

# yoshiori/fish-peco_select_ghq_repository
function fish_user_key_bindings
  bind \c] 'stty sane; peco_select_ghq_repository'
end

以上


【tsu-nera/fish-peco_open_gh_repository】

ghq コマンドと peco の連携ができます。

ghq リポジトリ群を peco で選択して gh-open コマンドで開くことができます。

tsu-nera/fish-peco_open_gh_repository

インストール

$ fisher tsu-nera/fish-peco_open_gh_repository

設定

~/.config/fish/config.fish ファイルを編集して、以下のように設定を追記します。

function fish_user_key_bindings
  bind \cx\cl peco_open_gh_repository
end

以上


【franciscolourenco/done】

通知を表示する秒数を変更する。

franciscolourenco/done

インストール

$ brew install terminal-notifier

$ fisher add franciscolourenco/done

設定

指定した時間を超えたときに通知をするように変更するには、~/.config/fish/config.fish に __done_min_cmd_duration をセットします。

# デフォルトの設定であれば、実行に5秒以上掛かる場合に通知が表示されます
set -U __done_min_cmd_duration 5000  # default: 5000 ms
end

以上


プログラミング環境

詳細は、過去の note に書いていますのでご覧ください。

「anyenv」の環境構築をしよう❗

こちらの記事も Qiita にまとめる予定です。

もうしばらくお待ちください。


ちなみに、こんな感じになります。

他にもいじっているので、同じようにはなりませんが・・・

スクリーンショット 2020-06-21 15.55.33.png

以上です。

プラグインの内容は、過去にメモったものをまとめただけなので、もしかしたら古くなっている可能性がありますので、GitHubのページを確認しながらインストールや設定をしてください。

bash の coproc について

Overview

bash 4 から coprocess があるのを知ったので試してみます。
ざっくり言うと、メインプロセスと stdin/stdout を繋ぎながら、バックグラウンドでサブプロセスを起動できる機能です。

イメージ的には cmd &に近いですが、入出力が繋がってるのがイケてるポイントです。
具体的には、 coprocで起動すると、メインプロセス側の配列変数にファイルディスクリプタが割り当てられて、それがサブプロセスの stdin/stdout に繋がります。

こんな感じ
                 +-- ${COPROC[1]}  --> stdin
                 +                      ↓
[main process] --+                 [sub process &]
                 +                      ↓
                 +-- ${COPROC[0]}  <-- stdout       

cf.

詳しい使い方とかはこの辺見てください。

https://qiita.com/angel_p_57/items/7b54493e6e66aea01437
https://www.gnu.org/software/bash/manual/html_node/Coprocesses.html
https://unix.stackexchange.com/questions/86270/how-do-you-use-the-command-coproc-in-various-shells

あと bash と ksh zsh とかだと挙動が微妙に違うみたいです。
bash の縛りがきついw

usage

具体的に見た方がたぶん理解が早いので、

1000行の tsv を while readで 1行ずつ csv に変換する場合

を考えてみます。

使用したバージョン
$ echo$BASH_VERSION
5.0.17(1)-release

なお、サブプロセスの出力がバッファリングされると詰まるので、awk で試してみます。
1行ずつ処理する際のパフォーマンスを確認したいので、awk の stdin に直接流し込むとかは今は忘れてください。

coproc を使わないケース

1行ずつ読むたびに毎回 awk を起動するので、

nouse-coproc.sh
#!/bin/bashseq-f'%04g' 3000 | paste - - - \
| while read x;do
    echo"$x" | awk-vOFS=, '{$1=$1; print $0; }'done

けっこう時間がかかりますね。

$ time bash nouse-coproc.sh >/dev/null

real    0m2.685s
user    0m2.250s
sys     0m0.722s

coproc を使うと

use-coproc.sh
#!/bin/bash

coproc hoge {awk-vOFS=, '{ $1=$1; print $0; fflush(); }';}while read x;do
    echo"$x">&${hoge[1]}read-u${hoge[0]} a
    echo"$a"done< <(seq-f'%04g' 3000 | paste - - -)

めっちゃ速くなります。

$ time bash use-coproc.sh >/dev/null

real    0m0.079s
user    0m0.054s
sys     0m0.023s

なんで速くなるか

もう上に答え書いちゃったんですけど、
1行ずつ毎回プロセスを起動するときのオーバヘッドが遅くなる原因です。
このオーバヘッドは入力行数が増えれば増えるほど線形に増大していきます。

それに対して、 coproc は最初に1つだけプロセスを起動して、
1行ずつ stdin に流し込んで、処理結果を stdout から read していくので、
普通に stdin からコマンドに流し込むのと同じ効果があります。

シェル芸で1行ずつ処理する場合に捗りそうですね。

appendix

ファイルディスクリプタがプロセスをまたいで引き継げない問題

たぶん bash 縛りだと思うんでうけど、
サブプロセスにはファイルディスクリプタが引き継げず、直で fd 値を指定しても 不正なファイル記述子ですみたいなエラーになってしまいます。

なので seq | while read x; do ...; doneでやろうとすると、パイプの先は別プロセスなので、残念ながら動きません。
代わりに while read x; do ... ; done < <(seq)のプロセス置換でやったのはこれが理由です。

バッファリングについて

今回は awk の fflush() で挙動を確認しましたが、 stdbuf を使えばコマンドのバッファリングを切り替えられるみたいです。
https://linuxjm.osdn.jp/html/GNU_coreutils/man1/stdbuf.1.html

これだとNGだが
$ coproc hoge {tr$'\t' , ;}
こっちならOK
$ coproc hoge {stdbuf-oLtr$'\t' , ;}

おわり。

私的、Macのターミナル(Bash)外観設定

こんにちは。
MacbookPro2016のキーボードがチャタって辛いyagrushです...
これはだめかもわからんね...

さて、もはや完全に私的メモですが:sunglasses:
Macのターミナルを↓な風にしたい方、ご参考になれば幸いです。
カレントディレクトリがGitリポジトリの場合、ブランチ名も表示されます。
スクリーンショット 2020-07-03 12.58.06.png

(MBP君がやたらzshをお勧めしてくるけど、Windows作業もあったりするので私はbashを使っています。)

必要なもの

  • Mac
  • Homebrewを導入済みである。
  • Git ... Homebrewなどでインストール済みである。

手順

クールなMacターミナルテーマIcebergのインストール

https://cocopon.github.io/iceberg.vim/
こちらの公式サイトのした〜〜〜〜の方に、Mac用ダウンロードボタンがあります。

ダウンロードしたZIPを解凍するとiceberg.terminalがあるので、ターミナルの設定画面でインポートするか、ダブルクリックしてください。(「ネットからダウンロードした信用できないファイルです!」ってMacOSが怒るかもですが、無視して【開く】でOK。)

ターミナルのデフォルトテーマをIcebergに変更する

ターミナルの設定画面を開きIcebergを選択した状態で【デフォルト】ボタンを押す。

スクリーンショット 2020-07-03 12.32.41.png

coolなフォントSF Monoのインストール

これほんとすき...フォントだけに(激ウマギャグ)

DLとかしなくてもHomebrewでコマンドでインストールできちゃいます。

xcode-select --install
brew tap delphinus/sfmono-square
brew install sfmono-square

ターミナルのフォントを変更する

ターミナルの設定画面でIcebergを選択した状態でフォントの【変更】ボタンを押す。
太さやサイズなど、細かい設定は好みに合わせてください。

スクリーンショット 2020-07-03 12.41.54.png

色設定などを反映させるコードを仕込む

ターミナル(Bash)起動時に必ず読み込まれるファイルに、色設定などを反映するコードを仕込んでいきます。

~/.bashrcを編集する

vimなどのテキストエディタを使って、~/.bashrcに以下の設定を追記します。

vim ~/.bashrc

もし~/.bashrcが無かったら、そのまま新規作成でOK。

~/.bashrc
source /usr/local/etc/bash_completion.d/git-prompt.sh
source /usr/local/etc/bash_completion.d/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true

HOST='\u@\h'PS1="\[\033]0;$HOST\007\]"# set window titlePS1="$PS1"'\n'# new linePS1="$PS1"'\[\033[32m\]'# change colorPS1="$PS1"'\u@\h '# user@host<space>PS1="$PS1"'\[\033[33m\]'# change colorPS1="$PS1"'\w'# current working directoryif test-z"$WINELOADERNOEXEC"then
    PS1="$PS1"'\[\033[36m\]'PS1="$PS1"'$(__git_ps1)'# bash functionfi
PS1="$PS1"'\[\033[0m\]'# change colorPS1="$PS1"'\n'# new linePS1="$PS1"'$ '# prompt: always $# "-F":ディレクトリに"/"を表示 / "-G"でディレクトリを色表示alias ls='ls -FG'alias ll='ls -alFG'

~/.bash_profileを編集する

vimなどのテキストエディタを使って、~/.bash_profileに以下の設定を追記します。

vim ~/.bash_profile

もし~/.bash_profileが無かったら、そのまま新規作成でOK。

~/.bash_profile
if[-f ~/.bashrc ];then. ~/.bashrc
fi

設定を反映する

以下のコマンドを打ってください。

source ~/.bashrc

どうでしょう、即座に変わりましたか?
もちろん、今後は起動しただけでもこうなってくれます。

参考記事

ありがとうございます!

シェルスクリプトでArchLinuxにインストールされているパッケージを確認する

何をするコード?

シェルスクリプトでインストールされているパッケージを確認して、もしパッケージがインストールされていなかったり古かったりしたら警告を出します。

コード

dependence=("git""wget""make""hoge""archiso""search-in-dir-git")installed_pkg=($(pacman -Q | awk'{print $1}'))installed_ver=($(pacman -Q | awk'{print $2}'))

check_pkg(){local i
    local latest_ver
    for i in$(seq 0 $((${#installed_pkg[@]}-1)));do
        if[["${installed_pkg[${i}]}"=${1}]];then
            latest_ver=$(pacman -Sp--print-format'%v'${1} 2> /dev/null)if[["${installed_ver[${i}]}"="${latest_ver}"]];then
                echo-n"installed"return 0
            elif[[-z${latest_ver}]];then
                echo-n"norepo"return 0
            else
                echo-n"old"return 0
            fi
        fi
    done
    echo-n"not"return 0
}echo"Checking dependencies ..."for pkg in${dependence[@]};do
    echo-n"Checking ${pkg} ..."case$(check_pkg ${pkg})in"old")echo-en" $(pacman -Q${pkg} | awk'{print $2}')\n\n"echo"${pkg} is not the latest package."echo"Local: $(pacman -Q${pkg} 2> /dev/null | awk'{print $2}') Latest: $(pacman -Sp--print-format'%v'${pkg} 2> /dev/null)"echo;;"not")echo-e" ${pkg} is not installed.";check_failed=true;;"norepo")echo-en" $(pacman -Q${pkg} | awk'{print $2}')\n\n"echo"${pkg} is not a repository package.";;"installed")echo-ne" $(pacman -Q${pkg} | awk'{print $2}')\n";;esacdone

if[["${check_failed}"=true]];then
    exit 1
fi

解説もどき

check_pkg関数でパッケージの状態を判定しています。あとは依存関係の配列をforで変数pkgに順番にぶち込んで関数を実行させます。
この関数は最低限の値しか返しません。それぞれの値の意味は以下のとおりです。

not→インストールされていない
norepo→リポジトリのパッケージではない(インストールはされている)
installed→最新版が正常にインストールされている
old→古いバージョンがインストールされている

あとは関数の実行結果をcaseで別の処理にしているだけです。

bash で タブ補完するときに大文字小文字を区別しないようにする

bash / .bash_profile / .bashrcについて「とりあえず」部分を理解する

この記事の目的

bash、.bashrc、.bash_profileについて「とりあえず」理解すること。

環境構築時に、「.bashrc」と「.bash_profile」というファイルを訳も分からず編集しました。

訳もわからないまま突き進むといつかきっとドツボにハマるので、個人的に「ひとまずこれだけ分かれば良いかしら?」という部分をまとめました。

まずは、bashとは?

shellの種類の一つで、shのパワーアップ版のこと。

shellって?

ユーザーがOSカーネルへ指示を出すために使う、CLI(Command Line Interface)のソフトウェア。

「shell」は上記に挙げた機能をもつソフトウェア全般のことを指し、実際に私たちが使用する「shell」には、いくつか種類があるようです。

shellには、2流派+1がある

「+1」というのは、2つの流派の両方の特徴を備えたshellのこと。具体的には、zshがそれに当たります。

流派が同じだと、コマンドや機能も似ていることが多いようです。

shellの種類

  • sh系
    • sh
      • もっとも基本的なshell
      • 他のsh系shellの元
    • bash
      • shの後継
      • GNUプロジェクトの一部で、オープンソースソフトウェア
      • Linuxディストリビューションの多くで標準shellとして同包されている
      • Macでは、Catalinaより前にログインshellとして使われていた
    • ksh
      • 多くのUNIX系OSで標準的に用いられているshellの一つ
      • cshの機能を多く取り入れている
  • csh系
    • csh
      • BSD系UNIXの一つである2BSDを利用するためのshell
      • 対話的に利用する際に便利な機能が多数ある
    • tcsh
      • cshのパワーアップ版
      • 特にユーザーインターフェイスの部分を中心に拡張された
  • zsh
    • sh系とcsh系の良いとことを採用して作られたshell
    • MacではCatalinaから、ログインshellにzshを採用

よく耳にするのはbashzshかな。

...私が使っているshellは何だろう?

自分のshellの種類がわからないときは、このコマンドで確認できる。

  • echo "$SHELL":現在のshell
  • cat /etc/shells:システムにインストールされているshell一覧

その他shell情報を確認するコマンドは、こちらのマイナビニュースの記事が参考になりそうです。

.bash_profile.bashrcは実行タイミングが違う

.bash_profile.bashrcは、どちらもbashの設定です。
では、具体的にどう違うのか?
man bashBash入門を参考にして、2つ説明を要約すると、こんな感じです。

  • .bash_profile
    • 対話的(コマンド入力によって起動)なログインシェルまたは、--loginオプション付きの非対話的シェルとしてbashが起動された時に呼ばれる
    • 実行順番は、/etc/profile~/.bash_profile~/.bash_login~/.profile
    • ログアウト時に~/.bash_logoutがあればこれも実行
  • .bashrc
    • ログインシェルではない非対話型(shell script実行時など)起動の時に実行される

特に重要そうなポイントとして、「.bash_profileはログイン時の1回だけ呼び出される」、「.bashrcはshell起動のたびに呼び出される」と覚えてればいいのかなと思いました。

結局、どう使うのか

Linux: .bashrcと.bash_profileの違いを今度こそ理解するから引用させていただくと、結論はこうです。

そこまで厳密に書かなくても動くのが設定ファイルですし、書き方は人それぞれになると思います。

しかし、少なくとも~/.bashrcで何も出力してはならない、という部分は外さないようにする必要があります。

とりあえずはシンプルに、こう覚えておきましょう。

  • .bash_profile

    • ログイン時に必ず呼ばれるので、出来るだけ余計なものは書かない
    • .bashrcはここで読み込む
  • .bashrc

    • 出力されるようなものは書かない
    • 書くなら、例えばエイリアスやコマンドライン補完の設定
    • .bash_profileに、.bashrcを呼び出す処理を書く必要がある
sample -r ~/.bashrc && . ~/.bashrc

まとめ: bashはshell。.bashrcに出力のある設定を書かなければ一旦はOK

記事によって結論が様々で何が正解なのかわからなかったのですが、「設定ファイルなので、書き方は人の好みによる」という答えで納得しました。

(もし記事中に間違いがあったらコメントいただけると大変ありがたいです...!)

参考サイト

Markdown環境でパスワードを管理してるので…

はじめに

Vivalidのメモ機能でパスワードを管理しています。パスワードは大小英数の20桁としていますが、ストック用として10個パスワードを作ります。
ここでは10個のパスワードを作るスクリプトを紹介します。

注意

大半のパスワードはVivalidのメモ機能で管理していますが、「他の環境で重複して管理しているパスワード」「Vivaldiのメモ機能では管理していないパスワード」「頭の中にだけあるパスワード」が少数あります。

スクリプト

内容

#!/usr/bin/bash

PWD_NUM=21

readonly HOW_MANY_PWDS=10
readonly PWD_LEN=20

main()
{
        local pwd cnt num
        cnt=0

        while [ $cnt -lt $HOW_MANY_PWDS ]
        do
                num=`expr $PWD_NUM + $cnt`
                pwd=`makepasswd --chars $PWD_LEN`

                echo "| | $num | $pwd |"

                cnt=`expr $cnt + 1`
        done
        return 0
}

main
exit $?

実行結果

| | 21 | nuBBGNb6E42WxmFgx1pa |
| | 22 | u433M7wS95KeJFIUDsDN |
| | 23 | w4eR6j6otw3rx42vm6dj |
| | 24 | HNKTAKmpftaDK3eXpDMj |
| | 25 | xUTbuW4atrtRJnQPsr7i |
| | 26 | Fw3tz8QLaHAuITKwPgdc |
| | 27 | cPHwVUSfH1dtzWQojzzo |
| | 28 | Sgt7YP9HPL5DPpvcMEfd |
| | 29 | gVKhTvrnYNAshT7EqcyC |
| | 30 | UYtNuiLidGtCx85MhhBy |

Macのコマンドラインで明日を表現する方法

macのdate表現で困った

macユーザーになってまだ3ヶ月の私にとっては、bashのdateコマンドすら手強い相手でした。
今回、目的にあった形で日付の表現をするのに、小一時間以上かかってしまい軽く自分にショックを受けてしまいました。

他のmacビギナーにとっても日付の表現で時間を多く無駄にしてしまうことはショッキングなことだと思ったので、ここにナリッジをまとめておきたいと考えました。

そもそも:macのコマンドラインで日付表現をしたかったわけ

macにはautomatorという非常に便利なツールがあることを最近になって知りました。
これを使えば、macに最初から入っているツールを組み合わせて、自分好みの自動化アプリケーションを簡単に作ることができます。

今回は、毎日の日記を自動で作成するアプリケーションを作るために、bashで日付表現を使う必要がありました。

date -d '1 days'では明日を表せない?

検索ボックスで、「bash 日付」と打ってでてきたのが、見出しのワンライナーでした。

bash
date-d'1 days'

これで、明日の日付を取得して自動でファイルの作成ができる!
と思ったら...これがうまく行かないのです。

というのも、この表記はGNUとよばれるパターンの表記方法だったのです。

GNUって?

GNUはwindowsのコマンドラインでの書き方になります。
ところが、私はmacユーザー。
どうりでこの表現ができないわけですね。

windowsがGNUならMacは

もちろんmacにも明日の表現方法はあります。
macの表現方法はBSDと呼ばれる表記方法になるそうです。

BSD表記になると、明日を表すコマンドは以下の通り。

bash
date-v+1d

よかった!macでも簡単に表現できました!

こうして、``(バッククォーテ)を組み合わせたところ、
念願の「本日付けのファイルをコピーして明日の日付のファイルを作成する」ことができました!

bash
cp`date +%Y%m%d`.txt `date-v+1d +%Y%m%d`.txt

WSLからコマンドラインでエクスプローラを実行する方法

はじめに

WSL(Windows Subsystem for Linux)Git Bashのようにターミナル上からエクスプローラーを起動したいと思い、実行方法を調べてみました。

実行環境は以下のとおりです。

  • Windows : Windows 10 Pro
  • WSL : Ubuntu 18.04.2 LTS

やりたかったこと

Git Bashではコマンドプロンプトのstartコマンドを使用してエクスプローラーを実行することができます。

$ start explorer [ディレクトリパス]

これと同じように、コマンドラインからエクスプローラを実行できるかをWSLで確認します。

結果

結果としてWSLでは下記のコマンドでエクスプローラーを実行することができました。

$ explorer.exe [ディレクトリパス]

Windows側のファイルを実行できる理由

envコマンドを用いてWSL側の環境変数PATHの中身を確認してみました。

$ echo $PATH | sed s/:/\\n/g | grep -Ei "/mnt/c/windows"
/mnt/c/Windows/system32
/mnt/c/Windows
/mnt/c/Windows/System32/Wbem
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/
/mnt/c/WINDOWS/system32
/mnt/c/WINDOWS
/mnt/c/WINDOWS/System32/Wbem
/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/
/mnt/c/WINDOWS/System32/OpenSSH/
/mnt/c/WINDOWS/system32
/mnt/c/WINDOWS
/mnt/c/WINDOWS/System32/Wbem
/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/
/mnt/c/WINDOWS/System32/OpenSSH/

どうやらWSLではWindows側の環境変数がデフォルトで反映される為、Windowsの標準コマンドなどの実行ファイルを指定できるようです。

.exeを指定しないでコマンドを実行する

実行方法は分かりましたが、いちいち.exeを指定して実行するのが億劫なのでエイリアスを登録します。

エイリアスの登録

bashの設定ファイル.bashrcの中にエイリアスを登録し、.exeなしでコマンドが実行できるよう設定します。

$ vim ~/.bashrc

vimの編集画面が開かれるので、以下のように.bashrcに内容を追記してください。

alias [コマンド名]='[実行ファイル名]'

私は以下のように設定しました。

# aliases
alias explorer='explorer.exe'

編集が終わったら、sourceコマンド.bashrcを再度読み込ませて、エイリアスを反映させます。

$ source ~/.bashrc

sourceコマンド実施後、.exeなしでコマンドを実行できるか確認します。

$ explorer .

無事に.exeなしで実行することができました。
ちなみに設定したエイリアスの一覧はaliasコマンドで確認することができます。

「BashでFizzBuzz」からShellScriptの基本的な書き方を思い出してみる

はじめに

あるとき自分のFacebookにこんな記事が出てきたんですよ。

image.png

ああ、8年……そんな経ったのですね……ちょうど特許検索エンジンのUI側をjQueryを鬼駆使ししてSPAなどという言葉もなかった頃にSPAみたいなことをやっていた時期だったと思います。

んで、その頃に当時の現場のCTO(頭脳も物理的にもつよつよなエンジニア)から腕試し的に書いてみろって言われたんですよ。
これくらい書けなきゃMac使わせない的なこと言われたんだったかな……?

FizzBussとは3の倍数のときに「Fizz」、5の倍数のときに「Buzz」と出力させる、コードの基礎が全て詰まっていると言われているよくある練習課題です。
3の倍数のときにアホになる例のネタと同じようなやつです。
Hello Worldの次ぐらいにやるやつですね。

えーと、コードは……

for((i=1; i < 101; ++i));do if((i%3==0 && i%5==0));then echo fizzbuzz;elif((i%3==0));then echo fizz;elif((i%5==0));then echo buzz;else echo$i;fi;done

ワンライナーなのでよくわかりませんね。

Beautifyしてみた

整形するとこんな感じです。

for((i = 1; i < 101; ++i));do
    if((i % 3 == 0 && i % 5 == 0));then
        echo fizzbuzz
    elif((i % 3 == 0));then
        echo fizz
    elif((i % 5 == 0));then
        echo buzz
    else
        echo$ifi
done

なんか、「今だったらこんな書き方しないな?」な箇所がいくつかはあるんですが、どうして今そうしないのかよくわからないので、細かく紐解いてみましょう。

For文のループ

for((i = 1; i < 101; ++i));do# なんか処理done

初期化式に再初期化式を実行して継続条件式が falseになったら止めるっていう基本のループです。
doから doneまでの間の処理を継続条件式が trueである限り繰り返し実行します。
今日日、式を3つ並べるforループなんてなかなか書かないですよね。
この書き方の場合、カッコは2つ使う必要があるようです。

for i in{1..100};do# なんか処理done

多分この形のいわゆる for-in型のほうが使い勝手がいいのかなと思います。

if文の条件分岐

if((i % 3 == 0 && i % 5 == 0));then
        echo fizzbuzz
    elif((i % 3 == 0));then
        echo fizz
    elif((i % 5 == 0));then
        echo buzz
    else
        echo$ifi

条件分岐ですね。 ifで始まって、 elifとか elseで分岐して、 fiで終わります。
でもShellScriptの条件文ってこんな感じに書くんじゃなかったっけ?って思ってたですよ。

if[ i -eq 5 ];then# なんか処理fi

この、ブラケット []で囲まれた部分って、 testというコマンドのシンタックスシュガーなんですよね。
んで、このFizzBuzzではブラケットの代わりに二重括弧を使ってます。
実は二重括弧で囲まれた部分は letコマンドのシンタックスシュガーなんだそうで、数値の比較で絶大な威力を発揮します。(その代わり文字列比較ができません)

変数

変数への代入は普通に

i = 5

みたいな感じでできます。
参照のときは

echo$i

みたいな感じで、ドルマークを付けます。
letコマンドで参照するときはいらないようです。

参考ページ

Visual Studio CodeでshellをLinuxにする方法(windows)

メモとして記述
VScodeのターミナルをベースのpowershellからbashに変える方法
VScode.PNG
この一番下の歯車マークを押して、設定を開く。
検索バーにshellと入力。
VScode2.PNG
そうすると上画像のようにTerminal>Integrated>Shell Args: Windowsとか書いてある。
そのURLに飛ぶ。
いろいろ書いてあるのは気にしないで下の方へ行くと
VScode1.PNG
このようなコードが書いてある。その中の一番下をコピーしてVScodeに戻る。
さっきのterminalなんちゃらのところの一番下にsettings.jsonで編集って書いてあるからそこを開いて、
コピーしたのを張り付ける。
保存した後、ctrl+@でターミナルを開く。最初は元のPowershellのまま。
その横に+と書いてあるので押すと新しく開いた画面はbashとなっていた。VScode3.PNG

ディレクトリ内のファイルを一括リネーム

こんな感じ。

sedname.sh
#!/bin/bashfile_all=(`ls`)for((i=0; i<${#file_all[*]}; i++)){
  file_subd[i]=`echo${file_all[i]}| sed$1`if[${file_subd[i]}];then
    echo mv${file_all[i]}${file_subd[i]}mv${file_all[i]}${file_subd[i]}fi}

スクリプトをコマンド的に使いたいなら、aliasを忘れずに。下は一例。

~/.bashrc
alias sedname="sh ~/docs/tools/sedname.sh"

実行結果。
Screen Shot 2020-07-08 at 9.01.11 copy.png

その他、リネームするファイルのリストを別のテキストファイルから取得したいなら

file_all=(`cat list.txt`)

というように書き換えればいいと思います。

IBM Cloud の File Storage 使用率を確認するスクリプト

IBM Cloud の File Storage 使用率を確認する簡易なスクリプトを作成して確認してみました

前提環境

・Local PC(Mac) のターミナルから実行
・IBM Cloud のアカウントを保持している
・IBM Cloud 上で FileStorage を使用している
・実行環境で ibmcloud CLI が使用できる

IBM Cloud File Storage について:
https://cloud.ibm.com/docs/FileStorage?topic=FileStorage-getting-started&locale=ja

IBM Cloud File Storage サービス CLI操作について:
https://cloud.ibm.com/docs/cli?topic=cloud-cli-sl-file-storage-service&locale=ja

処理は主に "ibmcloud sl file volume-list" コマンドを使用しています:
https://cloud.ibm.com/docs/cli?topic=cli-sl-file-storage-service&locale=ja#sl_file_volume_list


処理はシェルスクリプト(bash)で実施しています。
IBM Cloud アカウントに紐づく File Storage操作が可能な API key を使用します。

IBM Cloud API key について:
https://cloud.ibm.com/docs/iam?topic=iam-manapikey&locale=ja

IBM Cloud CLI ログイン・オプション:
https://cloud.ibm.com/docs/cli?topic=cli-ibmcloud_cli#ibmcloud_login


サンプル・スクリプト

filestorage.sh
#!/bin/bash

ibmcloud login --apikey"apikey"-r"region"-g"resource group"> /dev/null

ibmcloud sl file volume-list --column username | grep-v username > FileStorage.txt

echo"IBM Cloud FileStorage Usage: Username = % , ( total ) "> result.txt

while read line
do
 used_b=`ibmcloud sl file volume-list -u"$line"--column bytes_used | grep-v bytes_used`capacity_gb=`ibmcloud sl file volume-list -u"$line"--column capacity_gb | grep-v capacity_gb`capacity_b=`echo$(($capacity_gb*10000000))`tag=`ibmcloud sl file volume-list -u"$line"--column notes | grep-v notes`result=`awk"BEGIN { print $used_b/$capacity_b }"`echo$line, $tag=$result % "("$capacity_gb GB ")"done<FileStorage.txt >> result.txt

cat result.txt

rm FileStorage.txt
rm result.txt

処理概要

・IBM Cloud ログイン
・使用している File Storage 対象取得
・対象分のループ処理: File Storage の総容量、使用容量を取得し使用率を計算
・結果を出力
・一時ファイルを削除


使用している値についての注釈

項目内容
1"apikey"IBM Cloud アカウントに紐づく、File Storage 操作ができるAPI key。実行する際は対象のAPI key に置き換える
2"region"実行する際は対象リージョンに置き換える
3"resource group"実行する際は対象リソースグループに置き換える
4FileStorage.txtスクリプト処理内で File Storage 情報を一時的に保管するファイル
5used_bクリプト処理内の File Storage の byte使用率の一時的変数
6capacity_gbスクリプト処理内の File Storage の GB使用率の一時的変数
7cabacity_bスクリプト処理内の File Storage の byte使用率の一時的変数
8-- column notesibmcloud sl オプション。 FileStorageに notes(tag) を使用していると表示することが可能になる
9result.txtスクリプト処理内で 処理結果 を一時的に保管するファイル

実行

以下のような結果が得られます。

 ./filestorage.sh
IBM Cloud FileStorage Usage: Username = % ,  ( total )
Dxxxxxxxxxxxxxx_1, filestorage1 = 62.8373 % , ( 600 GB )
Dxxxxxxxxxxxxxx_2, filestorage2  = 11.032 % , ( 500 GB )
Dxxxxxxxxxxxxxx_3, filestorage3 = 50.8622 % , ( 100 GB )

対象アカウントで使用している 3つの File Storage の使用率が確認できました。

この処理をジョブ化したり、Slack 連携したりしたいと思いつつ..

以上です。

ubuntuのshとbashで環境変数内の改行記号\nの扱いが違う

ホストからdockerコンテナに環境変数経由でjsonデータを渡し、echoとリダイレクトでファイル化してアプリから読み込もうとした。
結果、以下のエラーが発生。

Illegal unquoted character ((CTRL-CHAR, code 10)): has to be escaped using backslash to be included in string value

原因は、jsonの中に入っていた環境変数\nを、shのcatでファイル化したこと。
shではなくbashにしたら解決した、という話。

shとbashの比較

ホストからコンテナに環境変数経由で\nが入ったjson文字列を渡し、echoで表示してみる。

bashの場合

$ docker run -eTEST="{ \"value\":\"hoge\nhuga\npiyo\" }"-it ubuntu /bin/bash
root@36d386fa2f27:/# echo${TEST}{"value":"hoge\nhuga\npiyo"}

jsonとして正しいフォーマットを維持したままファイル化できる。

shの場合

$ docker run -eTEST="{ \"value\":\"hoge\nhuga\npiyo\" }"-it ubuntu /bin/sh
# echo ${TEST}{"value":"hoge
huga
piyo"}

このままリダイレクトしてファイル化し、アプリを読み込むと、不適切な改行でエラーになる。

bashからshに切り替えても同じように壊れてしまうので、shは取り出すときに\nをエスケープしてくれない様子。

$ docker run -eTEST="{ \"value\":\"hoge\nhuga\npiyo\" }"-it ubuntu /bin/bash
root@3dd58b596f66:/# echo${TEST}{"value":"hoge\nhuga\npiyo"}
root@3dd58b596f66:/# /bin/sh
# echo ${TEST}{"value":"hoge
huga
piyo"}

ちなみにCentOSの場合

$ docker run -eTEST="{ \"value\":\"hoge\nhuga\npiyo\" }"-it centos /bin/sh
sh-4.4# echo${TEST}{"value":"hoge\nhuga\npiyo"}

CentOSであれば、shでも特に問題なくjsonが復元できる。
他にも、Debian系であってもイメージによっては普通に動いた。

変なところでハマってしまった。

Spofity視聴中の曲をSlackステータスに投稿 (macOS専用)

Step 1: OAuth

これの「準備2」まで行う
(Slackワークスペースにアプリのインストールを行う必要がある)

https://qiita.com/keiya/items/b72f89e3a8a75121c02e

Step 2: こちらのコードを持ってきて動かす

APIKEYに Step 1 で取ってきたアクセストークンをいれて、動かす
https://gist.github.com/jgamblin/9701ed50398d138c65ead316b5d11b26#gistcomment-2792595

#!/bin/bash# from: https://gist.github.com/jgamblin/9701ed50398d138c65ead316b5d11b26#gistcomment-2792595# by laurentfite@github# Get it from here : https://api.slack.com/custom-integrations/legacy-tokensAPIKEY="XXXXXXXXXX"trap onexit INT

function reset(){echo'Resetting status'TEXT='Winter%20is%20coming%20(at%20last)'EMOJI='snowflake'
    curl -s-d"payload=$json""https://slack.com/api/users.profile.set?token="$APIKEY"&profile=%7B%22status_text%22%3A%22"$TEXT"%22%2C%22status_emoji%22%3A%22%3A"$EMOJI"%3A%22%7D"> /dev/null
}function onexit(){echo'Exiting'
    reset
    exit}while true;do
    state=$(osascript -e'tell application "Spotify" to player state')date
    echo"Spotify: "$stateif[["$state"!="playing"]];then
        reset
    else
        SONG=$(osascript -e'tell application "Spotify" to artist of current track & " - " & name of current track')URLSONG=$(echo"$SONG" | perl -MURI::Escape -ne'chomp;print uri_escape($_),"\n"')echo$SONG

        curl -s-d"payload=$json""https://slack.com/api/users.profile.set?token="$APIKEY"&profile=%7B%22status_text%22%3A%22"$URLSONG"%22%2C%22status_emoji%22%3A%22%3Aheadphones%3A%22%7D"> /dev/null
    fi

    sleep 60
done

さらに以下のように launchd に設定すれば、自動起動される
https://gist.github.com/jgamblin/9701ed50398d138c65ead316b5d11b26#gistcomment-2775093

Docker。自分がよく使うコマンドをaliasに設定「説明付き」

はじめに

私が思うよく使うDockerコマンドは、bash_profileや、bash_rcでaliasに設定して使っています。

自分の誹謗録ようなものですが、興味のある方はお試しください。
そして、もし有用なaliasを使っているならぜひ共有頂けると嬉しいです。

自分も勉強目的で書いているので、間違った情報があるかもしれません。
そこはご指摘頂けるとありがたいです。

alias設定内容

~/.bash_profile

以下の構文を追加

if[-f ~/.myalias ];then
  source ~/.myalias
fi

~/.myalias

● gist
https://gist.github.com/genie-oh/d73a224e7cb3cffab2868182eb79ccad

# show full command & execute alias al='_(){ CMD=$(alias | grep "alias $1=" | cut -d = -f 2- | sed "s:^.\(.*\).$:\1:"); ARG=$(echo $@ | sed "s/^$1//"); CMD="${CMD}${ARG}"; echo "execute : ${CMD}"; echo " "; bash -c "${CMD}"; };_'# dockeralias al-dock='cat ~/.myalias | grep dock | sed "s/=/      \t\= /"'alias dock='docker'alias docki='docker images'alias dockps='docker ps -a'alias dockrrm='docker run --rm'alias dockeit='docker exec -it'alias dockrm='docker rm -f'alias dockrmi='docker rmi -f'alias dockrma='docker rm -f $(docker ps -aq)'alias dockrmia='docker rmi -f $(docker images -aq)'alias dockins='docker inspect'alias dockip='docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}"'alias docklogs='dock logs --tail 50 --follow --timestamps'alias dockc='docker-compose'alias dockcb='docker-compose build'alias dockcu='docker-compose up -d'alias dockcd='docker-compose down'alias dockccl='grep container_name docker-compose.yml'

※説明

al-dock

Docker関連aliasのリストを表示

$ al al-dock
execute : cat ~/.myalias | grep dock | sed"s/=/      \t\= /"# dockeralias al-dock           ='cat ~/.myalias | grep dock | sed "s/=/      \t\= /"'alias dock              ='docker'alias docki             ='docker images'alias dockps            ='docker ps -a'alias dockrrm           ='docker run --rm'alias dockeit           ='docker exec -it'alias dockrm            ='docker rm -f'alias dockrmi           ='docker rmi -f'alias dockrma           ='docker rm -f $(docker ps -aq)'alias dockrmia          ='docker rmi -f $(docker images -aq)'alias dockins           ='docker inspect'alias dockip            ='docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}"'alias docklogs          ='dock logs --tail 50 --follow --timestamps'alias dockc             ='docker-compose'alias dockcb            ='docker-compose build'alias dockcu            ='docker-compose up -d'alias dockcd            ='docker-compose down'alias dockccl           ='grep container_name docker-compose.yml'

dockc, dockcb, dockcu, dockcd

docker-compose関連
docker-composeのbuild,up,down

alias dockc             ='docker-compose'alias dockcb            ='docker-compose build'alias dockcd            ='docker-compose down'alias dockcu            ='docker-compose up -d'

dockccl

docker-compose.yml内のコンテナーネームのリストを出力

alias dockccl           ='grep container_name docker-compose.yml'
$ al dockccl
execute : grep container_name docker-compose.yml

    container_name: lamp-web
    container_name: lamp-php
...省略

docki

docker imageのリストを出力

alias docki             ='docker images'
$ al docki
execute : docker images

REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
centos                   7                   b5b4d78bc90c        8 weeks ago         203MB
docker-lamp-test_php     latest              e6d67d8f48cf        17 minutes ago      666MB
...省略

dockps

dockerのコンテナーリストと実行状態を表示

alias dockps            ='docker ps -a'
$ al dockps
execute : docker ps -a

CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                          PORTS                     NAMES
6116324251dd        docker-lamp-test_php     "docker-php-entrypoi…"   17 minutes ago      Up 17 minutes                   0.0.0.0:32769->9000/tcp   lamp-php
...省略

dockeit

実行中のコンテナーで、interactive&ttyモードでコマンド実行
docker exec --interective --tty

alias dockeit           ='docker exec -it'
$ al dockeit lamp-php bash
execute : docker exec-it lamp-php bash

root@37bcdbd02f92:/var/www/html# ls
config  gulpfile.js  home_root  home_sub  nodeapp

dockrrm

コンテナーでコマンドを実行後、即時にコンテナーを終了する
コンテナー作成▶コマンド実行▶コンテナー終了

alias dockrrm           ='docker run --rm'
$ al dockrrm composer php -v
execute : docker run --rm composer php -v

PHP 7.4.7 (cli)(built: Jun 11 2020 18:58:32)( NTS )
...省略

dockins

コンテナーの状態を確認

alias dockins           ='docker inspect'
$ al dockins lamp-php
execute : docker inspect lamp-php

[{"Id": "6116324251ddffc8090cc605d391f89a951aeb46d32636dd62476a225a894c51",
        "Created": "2020-07-01T13:30:27.11145Z",
...省略

dockip

コンテナーの状態で、IPだけを取得

alias dockip            ='docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}"'
$ al dockip lamp-php
execute : docker inspect --format="{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}" lamp-php

172.30.0.5

docklogs

コンテナーのログを確認

alias docklogs          ='dock logs --tail 50 --follow --timestamps'
$ al docklogs lamp-php
execute : docker logs --tail 50 --follow--timestamps lamp-php

2020-07-01T13:30:28.338589500Z [01-Jul-2020 22:30:28] NOTICE: fpm is running, pid 1
2020-07-01T13:30:28.340324600Z [01-Jul-2020 22:30:28] NOTICE: ready to handle connections

dockrm, dockrmi

特定のコンテナー、またはイメージを削除

alias dockrm            ='docker rm -f'alias dockrmi           ='docker rmi -f'

dockrma, dockrmia

すべてのコンテナー、またはイメージを削除

alias dockrma           ='docker rm -f $(docker ps -aq)'alias dockrmia          ='docker rmi -f $(docker images -aq)'

cygwinのcronで実行されないスクリプト

タイトルの現象について一応は解決しました。解決したのですが、うまく行かなかった原因も、うまく行った理由もよく分かっていません。
確認したことを簡単にまとめておきます。

スクリプトの内容

  • テキストデータを処理するスクリプト
  • 中間ファイル、実行の様子を確認できるログファイルを書き出す

動かない状況

  • 他のスクリプト(同じものを3個登録)の実行実績がある環境
  • コマンドラインから「./script.sh」だと動く
  • コマンドラインから「/path/to/script.sh」だと動く
  • cronだと動かない
  • 登録当初は「chmod 744」だったのを「755」に変更。
  • コマンドラインでbashのパス補完で確認した「/path/to/script.sh」のコピペもダメ

確認したこと

  • croneventsでは実行した様子がログとして出力されない
  • /var/log/cron.logで見ると「/path/to/script.sh」があることは認識している
    • 起動時に「-x ext,sch,proc,pars,load,misc」を指定しています

解決した方法

  • 最終行にあった「/path/to/script.sh」を先頭行に移動したら動いた

備考

なんで、この方法で動いたのか不明。途中で「chmod 755」に変更したのがポイントで、この変更状況がcronに認識されていなかったのかもしれない。しばらく様子見。

AWSプロダクト1行まとめ(を取得する)

tl;dr

  • AWSのプロダクトが色々ありすぎて、正直フォローしきれない
  • 年に1度くらいQiitaに上がるAWSサービス3行まとめ記事を読むけど、3歩歩いたら忘れてしまう
  • Qiitaの記事待ちじゃなくて、その時々で最新の情報をサクッと把握したい

やり方

  • 下記のシェルスクリプトを実行する。
curl -s"https://aws.amazon.com/jp/products/" | awk'f==1{f=0;gsub(/ {2,}/,"",$0);split($0,s,"<span>");gsub(/<[^>]*>/,"",s[1]);gsub(/<[^>]*>/,"",s[2]);if(length(s[2])){print "  *"s[1]": "s[2]}}/lb-content-item/{f=1}/lb-trigger /{gsub(/ {2,}/,"",$0);gsub(/<[^>]*>/,"",$0);sub(/^ /,"* ",$0);print $0}' | sed-E"s:amp;::g" | sed-E"s: *$::g"
  • WindowsだしWSLも導入して無いよ、という人はWSLを導入する。下記のPowerShellで代用する。ogvはフィルタで絞れて便利だし。
Invoke-WebRequest"https://aws.amazon.com/jp/products/"|%{$_.Content-split"`n"|?{$_-match'<a href="/'}|?{$_-match"span"}|%{($_-replace"<[^>]+>","`t").Trim()|%{$s=$_-split"`t";[PSCustomObject]@{"name"=$s[0];"desc"=$s[1]}}}}|sort-Uniquename|ogv

2020/7/10時点でのレスポンス

* 分析
  * Amazon Athena: SQL を使用した S3 でのデータクエリ
  * Amazon CloudSearch: マネージド型検索サービス
  * Amazon Elasticsearch Service: Elasticsearch クラスターを実行し、スケールする
  * Amazon EMR: ホスト型 Hadoop フレームワーク
  * Amazon Kinesis: リアルタイムストリーミングデータとの連携
  * Amazon Managed Streaming for Apache Kafka: フルマネージド型 Apache Kafka サービス
  * Amazon Redshift: 高速かつシンプルで、費用対効果の高いデータウェアハウス
  * Amazon QuickSight: 高速ビジネス分析サービス
  * AWS Data Exchange: クラウド内サードパーティのデータを検索、購読、および使用
  * AWS Data Pipeline: 定期的なデータ駆動型ワークフローに対するオーケストレーションサービス
  * AWS Glue: データの準備とロード
  * AWS Lake Formation: 安全なデータレイクを数日で構築
* アプリケーション統合
  * AWS Step Functions: 分散アプリケーションの調整
  * Amazon AppFlow: SaaS アプリと AWS のサービス向けにコード統合が不要
  * Amazon EventBridge: SaaS アプリと AWS のサービス向けサーバーレスイベントバス
  * Amazon MQ: ActiveMQ 向けマネージド型メッセージブローカーサービス
  * Amazon Simple Notification Service (SNS): Pub/Sub、モバイルプッシュ、SMS
  * Amazon Simple Queue Service (SQS) : マネージド型メッセージキュー
  * Amazon AppSync: 多くのソースから適切なデータを使用して、大規模にアプリを強化
* AR およびバーチャルリアリティ
  * Amazon Sumerian: VR および AR アプリケーションの構築と実行
* AWS コスト管理
  * AWS Cost Explorer: AWS のコストと使用状況を分析する
  * AWS 予算: カスタムコストと使用予算を設定する
  * AWS のコストと使用状況レポート: 包括的なコストと使用状況情報へのアクセス
  * リザーブドインスタンスレポート: リザーブドインスタンス (RI) の詳細を把握する
  * Savings Plans: 柔軟な料金設定でコンピューティング使用コストを最大 72% 節約
* ブロックチェーン
  * Amazon Managed Blockchain: スケーラブルなブロックチェーンネットワークを作成および管理
  * Amazon Quantum Ledger Database (QLDB): フルマネージド型台帳データベース
* ビジネスアプリケーション
  * Alexa for Business: Alexa を使って組織を強化
  * Amazon Chime: フラストレーションフリーの会議、ビデオ電話、チャット
  * Amazon Honeycode (ベータ): プログラミングなしでモバイルおよびウェブアプリケーションを構築
  * Amazon WorkDocs: エンタープライズドキュメントの安全なストレージと共有
  * Amazon WorkMail: セキュリティで保護されたマネージド型の企業向け E メールおよびカレンダー
* コンピューティング
  * Amazon EC2: クラウド内の仮想サーバー
  * Amazon EC2 Auto Scaling: 需要に合わせてコンピューティング性能をスケール
  * Amazon Lightsail: 仮想プライベートサーバーを起動および管理
  * AWS Batch: あらゆる規模でバッチジョブを実行
  * AWS Elastic Beanstalk: ウェブアプリの実行と管理
  * AWS Lambda: イベント発生時にコードを実行
  * AWS Outposts: AWS サービスをオンプレミスで実行
  * AWS Serverless Application Repository: サーバーレスアプリケーションを検索、デプロイ、公開する
  * AWS Snow ファミリー: エッジロケーションでデータを集約および処理してから AWS に転送する物理デバイス
  * AWS Wavelength: 5G デバイスのための超低レイテンシーアプリケーションを提供
  * AWS における VMware クラウド: カスタムハードウェアを使用せずにハイブリッドクラウドを構築する
* コンテナ
  * AWS App2Container: 既存のアプリケーションをコンテナ化して移行
  * Amazon Elastic Container Registry: コンテナイメージを簡単に保存、管理、デプロイ
  * Amazon Elastic Container Service (ECS): コンテナを実行するためのきわめて安全で、信頼性と拡張性が高い方法
  * Amazon Elastic Kubernetes Service (EKS): Kubernetes のもっとも信頼性の高い実行方法
  * AWS Fargate: コンテナ向けサーバーレスコンピューティング
* カスタマーエンゲージメント
  * Amazon Connect: クラウドベースのコンタクトセンター
  * Amazon Pinpoint: チャンネル間でのパーソナライズされたユーザーエンゲージメント
  * Amazon Simple Email Service (SES): E メールの送受信
  * Contact Lens for Amazon Connect: ML 駆動のコンタクトセンター分析
* データベース
  * Amazon Aurora: 高性能マネージドリレーショナルデータベース
  * Amazon DynamoDB: マネージド型 NoSQL データベース
  * Amazon DocumentDB (MongoDB 互換): フルマネージド型ドキュメントデータベース
  * Amazon ElastiCache: インメモリキャッシングシステム
  * Amazon Keyspaces (Apache Cassandra 用): マネージド型の Cassandra 対応データベース
  * Amazon Neptune : フルマネージド型グラフデータベースサービス
  * Amazon Quantum Ledger Database (QLDB): フルマネージド型台帳データベース
  * Amazon RDS: MySQL、PostgresSQL、Oracle、SQL Server、MariaDB 向けのマネージドリレーショナルデータベースサービス
  * Amazon RDS on VMware: オンプレミスデータベースの管理を自動化
  * Amazon Redshift: 高速、シンプル、費用対効果の高いデータウェアハウジング
  * Amazon Timestream: フルマネージド型の時系列データベース
  * AWS Database Migration Service: 最小限のダウンタイムでデータベースを移行
* 開発者用ツール
  * Amazon Corretto: 本番環境に向けて OpenJDK を配信
  * AWS Cloud Development Kit (CDK): コードを使用してクラウドインフラストラクチャをモデル化する
  * AWS Cloud9: Cloud IDE でコードを記述、実行、デバッグ
  * AWS CodeArtifact: ソフトウェア開発のための安全かつスケーラブルで費用対効果の高いアーティファクト管理
  * AWS CodeBuild: コードのビルドとテスト
  * AWS CodeCommit: プライベート Git リポジトリでのコードの保存
  * AWS CodeDeploy: コードデプロイの自動化
  * AWS CodePipeline: 継続的デリバリーを使用したソフトウェアのリリース
  * AWS CodeStar: AWS アプリケーションの開発とデプロイ
  * AWS コマンドラインインターフェイス: AWS サービスを管理するための統合ツール
  * AWS Device Farm: AWS クラウド内の実際のデバイスを使った Android、iOS、ウェブアプリケーションのテスト
  * AWS ツールと SDK: AWS のツールと SDK
  * AWS X-Ray: アプリケーションの分析とデバッグ
* エンドユーザーコンピューティング
  * Amazon AppStream 2.0: デスクトップアプリケーションを安全にブラウザへストリーミングするサービスです
  * Amazon WorkDocs: エンタープライズドキュメントの安全なストレージと共有
  * Amazon WorkLink: 社内のウェブサイトへのモバイルアクセスを可能にする
  * Amazon WorkSpaces: デスクトップコンピューティングサービス
* Game Tech
  * Amazon GameLift: シンプルで高速な費用対効果の高い専用ゲームサーバーホスティング
  * Amazon Lumberyard: AWS や Twitch と統合された完全なソースを利用できる、無料のクロスプラットフォーム 3D ゲームエンジンです。
* IoT(モノのインターネット)
  * AWS IoT Core: デバイスをクラウドに接続
  * AWS Greengrass: デバイスのローカルでのコンピューティング、メッセージング、および同期
  * AWS IoT 1-Click: AWS Lambda トリガーのワンクリック作成
  * AWS IoT Analytics: IoT デバイスの分析
  * AWS IoT ボタン: クラウドのプログラミング可能なダッシュボタン
  * AWS IoT Device Defender: IoT デバイスのセキュリティ管理
  * AWS IoT Device Management: IoT デバイスのオンボード、編成、リモート管理
  * AWS IoT Events: IoT イベントを検出し、対応
  * AWS IoT SiteWise: IoT データコレクターおよびインタプリタ
  * AWS IoT Things Graph: デバイスおよびウェブサービスを簡単に接続
  * AWS Partner Device Catalog: AWS 互換の IoT ハードウェアの精選カタログ
  * FreeRTOS: マイクロコントローラ向けリアルタイムオペレーティングシステム
* Machine Learning
  * Amazon SageMaker: 機械学習モデルを大規模に構築、トレーニング、デプロイ
  * Amazon Augmented AI: ML 予測のヒューマンレビューを簡単に導入
  * Amazon CodeGuru: 最もコストがかかるコード行を見つける
  * Amazon Comprehend: テキストのインサイトや関係性を検出
  * Amazon Elastic Inference: 深層学習の推論を高速化
  * Amazon Forecast: 機械学習を使用して予測の精度を向上させる
  * Amazon Fraud Detector (プレビュー): オンライン詐欺をより素早く検知
  * Amazon Kendra: ML を利用してエンタープライズ検索をさらに進化
  * Amazon Lex: 音声やテキストに対応するチャットボットの構築
  * Amazon Personalize: アプリケーションにリアルタイムの推奨を構築する
  * Amazon Polly: テキストを生きた話し声に変換
  * Amazon Rekognition: イメージとビデオを分析
  * Amazon SageMaker Ground Truth: 精度の高い機械学習トレーニングデータセットの構築
  * Amazon Textract: ドキュメントからテキストやデータを抽出する
  * Amazon Translate: 自然で流ちょうな言語翻訳
  * Amazon Transcribe: 自動音声認識
  * AWS 深層学習 AMI: EC2 で今すぐ深層学習を始める
  * AWS Deep Learning Containers: 深層学習向け Docker イメージ
  * AWS DeepComposer: ML が有効化されたミュージカルキーボード
  * AWS DeepLens: 深層学習に対応したビデオカメラ
  * AWS DeepRacer: 機械学習による 18 分の 1 のスケールでの自律走行型レースカー
  * Amazon Inferentia: 機械学習推論チップ
  * AWS での PyTorch: 柔軟なオープンソースの機械学習フレームワーク
  * AWS での Apache MXNet: スケーラブルでパフォーマンスに優れた深層学習
  * AWS での TensorFlow: オープンソースの Machine Intelligence Library
* マネジメントとガバナンス
  * Amazon CloudWatch: リソースとアプリケーションのモニタリング
  * AWS Auto Scaling: 需要に合わせて複数のリソースをスケール
  * AWS Chatbot: ChatOps for AWS
  * AWS CloudFormation: テンプレートを使ったリソースの作成と管理
  * AWS CloudTrail: ユーザーアクティビティと API 使用状況の追跡
  * AWS コマンドラインインターフェイス: AWS サービスを管理するための統合ツール
  * AWS Compute Optimizer: 最適な AWS コンピューティングリソースを特定
  * AWS Config: リソースのインベントリと変更の追跡
  * AWS Control Tower: 安全かつ基準に準拠した複数のアカウント環境をセットアップおよび管理
  * AWS コンソールモバイルアプリケーション: リソースの状態を外出先で確認
  * AWS License Manager: ライセンスの追跡、管理、制御
  * AWS マネジメントコンソール: ウェブベースのユーザーインターフェイス
  * AWS Managed Services: AWS のインフラストラクチャ運用管理
  * AWS OpsWorks: Chef や Puppet を使って運用を自動化する
  * AWS Organizations: AWS アカウント全体の一元管理
  * AWS Personal Health Dashboard: AWS のサービス状態のパーソナライズされた表示
  * AWS Service Catalog: 標準化された製品の作成および使用
  * AWS Systems Manager: 運用時の洞察を改善し、実行
  * AWS Trusted Advisor: パフォーマンスとセキュリティの最適化
  * AWS Well-Architected Tool: ワークロードの見直しと改善
* メディアサービス
  * Amazon Elastic Transcoder: スケーラブルで使いやすいメディア変換サービス
  * Amazon Kinesis Video Streams: ビデオストリームの処理と分析
  * AWS Elemental MediaConnect: 高信頼性、高安全性のライブ動画転送
  * AWS Elemental MediaConvert: ファイルベースのビデオコンテンツを変換
  * AWS Elemental MediaLive: ライブビデオコンテンツを変換
  * AWS Elemental MediaPackage: 動画の発信とパッケージ化
  * AWS Elemental MediaStore: メディアストレージとシンプルな HTTP オリジン
  * AWS Elemental MediaTailor: 動画のパーソナライズと収益化
  * AWS Elemental アプライアンスとソフトウェア: オンプレミスメディアソリューション
* 移行と転送
  * AWS Migration Hub: 複数の移行を 1 か所で追跡
  * AWS Application Discovery Service: オンプレミスのアプリケーションを検出して合理的に移行
  * AWS Database Migration Service: 最小限のダウンタイムでデータベースを移行
  * AWS DataSync: シンプルかつ高速なオンラインデータ転送
  * AWS Server Migration Service : AWS へのオンプレミスサーバーの移行
  * AWS Snow ファミリー: AWS との間でデータを移行するための物理的デバイス
  * AWS Transfer Family: フルマネージド SFTP、FTPS、および FTP サービス
  * CloudEndure Migration: AWS への大規模な移行を自動化
  * Migration Evaluator (旧 TSO Logic): クラウド移行のビジネスケースを作成
* モバイル
  * AWS Amplify: モバイルアプリケーションとウェブアプリケーションの構築とデプロイ
  * Amazon API Gateway: API を構築し、デプロイし、管理する
  * Amazon Pinpoint: チャンネル間でのパーソナライズされたユーザーエンゲージメント
  * AWS AppSync: 多くのソースから適切なデータを使用して、大規模にアプリを強化
  * AWS Device Farm: AWS クラウド内の実際のデバイスを使った Android、iOS、ウェブアプリケーションのテスト
* ネットワーキングとコンテンツ配信
  * Amazon VPC: 独立したクラウドリソース
  * Amazon API Gateway: API を構築、デプロイ、管理
  * Amazon CloudFront: グローバルコンテンツ配信ネットワーク
  * Amazon Route 53: スケーラブルなドメインネームシステム (DNS)
  * AWS PrivateLink: AWS でホストされているサービスに安全にアクセス
  * AWS App Mesh: マイクロサービスをモニタリングおよびコントロール
  * AWS Cloud Map: マイクロサービス向けのアプリケーションリソースレジストリ
  * AWS Direct Connect: AWS への専用ネットワーク接続
  * AWS Global Accelerator: アプリケーションの可用性とパフォーマンスを向上
  * AWS Transit Gateway: VPC およびアカウント接続を簡単にスケール
  * Elastic Load Balancing: 複数のターゲットにわたる着信トラフィックの分配
* 量子テクノロジー
  * Amazon Braket: 量子コンピューティングを探索して実験
* ロボット工学
  * AWS RoboMaker: ロボット工学アプリケーションの開発、テスト、デプロイ
* 人工衛星
  * AWS Ground Station: サービスとしてのフルマネージド型地上局
* セキュリティ、アイデンティティ、コンプライアンス
  * AWS Identity & Access Management: サービスとリソースへのアクセスを安全に管理
  * Amazon Cognito: アプリの ID 管理
  * Amazon Detective: 潜在的なセキュリティ問題を調査
  * Amazon GuardDuty: マネージド型脅威検出サービス
  * Amazon Inspector: アプリケーションのセキュリティの分析
  * Amazon Macie: 大規模な機密データを検出して保護する
  * AWS Artifact: AWS のコンプライアンスレポートへのオンデマンドアクセス
  * AWS Certificate Manager: SSL/TLS 証明書のプロビジョン、管理およびデプロイ
  * AWS CloudHSM: 法令遵守のためのハードウェアベースキーストレージ
  * AWS Directory Service: Active Directory のホスティングと管理
  * AWS Firewall Manager: ファイアウォールルールの一元管理
  * AWS Key Management Service: マネージド型の暗号化キー作成と管理
  * AWS Resource Access Manager: AWS のリソースを共有するためのシンプルで安全なサービス
  * AWS Secrets Manager: シークレットのローテーション、管理、取得
  * AWS Security Hub: 統合された AWS セキュリティ & コンプライアンスセンター
  * AWS Shield: DDoS 保護
  * AWS Single Sign-On: クラウドシングルサインオン (SSO) サービス
  * AWS WAF: 悪意のあるウェブトラフィックのフィルター
* ストレージ
  * Amazon Simple Storage Service (S3): スケーラブルなクラウドストレージ
  * Amazon Elastic Block Store (EBS): EC2 ブロックストレージボリューム
  * Amazon Elastic File System (EFS): EC2 用フルマネージド型ファイルシステム
  * Amazon FSx for Lustre: S3 と統合されたハイパフォーマンスファイルシステム
  * Amazon FSx for Windows File Server: フルマネージド型 Windows ネイティブのファイルシステム
  * Amazon S3 Glacier: クラウド上の低コストなアーカイブストレージ
  * AWS Backup: AWS のサービス全体にわたる一元管理型バックアップ
  * AWS Snow ファミリー: 厳しい環境や切断された環境向けの物理エッジコンピューティングおよびストレージデバイス
  * AWS Storage Gateway: ハイブリッドストレージの統合
  * CloudEndure の災害対策: 高度に自動化した災害対策

おまけ

  • AWSのリージョン一覧を取得する(curlとjqを使用)
curl -s https://raw.githubusercontent.com/boto/botocore/develop/botocore/data/endpoints.json | jq -r'.partitions[] as $p | $p.regions as $r | $r|keys[] | [$p.partitionName, ., $r[.].description] | @tsv'
Browsing Latest Articles All 701 Live