As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

『試して理解 Linuxのしくみ』を試してLinuxを理解する(PART.2)

前書き

こんにちは。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

こちらの本を通して、Linuxを理解していきたいと思っています。
この記事はパート1です。

章ごとに記事を分けて投稿していこうと思っております。

本の内容をそのまま載せるのは良くないと思いますので、この本を読んで試したこと、理解したことのアウトプットが中心になると思います。
「わたしもやってみたい!」と思った人は、早速ポチりましょう。

本編

3章:プロセス管理

仮想記憶がない場合の単純な場合について説明してくれる。
実際の生成、削除のしくみは5章において説明してくれる

2つのプロセス生成がある

  • 同じプログラムの処理を複数のプロセスに分けて処理
    • fork()
  • まったく別のプログラムを生成する
    • exevce()

試す:fork()関数

forkの動き 1. 子プロセス用メモリ領域を作成して、親プロセスのメモリをコピーする 2. 親プロセスと子プロセスは違うコードを実行するように分岐する

子プロセスが自身PIDを出力て終了し、親プロセスが自身のPIDと子プロセスのPIDを出力して終了するプログラムの作成

プログラムを実行すると、fork関数がプロセスのメモリを子プロセスのメモリとしてコピーする。
そして処理を実行する。
例のプログラムでは、fork()関数の復帰時の * 親プロセスには子プロセスのPIDを * 子プロセスには0を 返すというのを利用して、処理を分岐させていた。

読む:execve()関数

全く別のプログラムを生成する場合は、「execve()関数」を発行する。

カーネルがプロセスを実行する流れ

  1. 実行ファイルを読み出し、プロセスのメモリマップに必要な情報を読み出す。
  2. 現在のプロセスのメモリを新しいプロセスのデータで上書きする。
  3. 新しいプロセスの最初の命令から実行開始する。

プロセスが増えるのではなく、プロセスを別のプロセスに置き換える

メモリマップ開始アドレスが必要な理由はCPU上で実行される機械語命令においては特定のメモリアドレスを指定する必要があるから。

ELF

ELF = 実行ファイルに用いいられるフォーマット。

「Executable Linkable Format」(多分本誤字ってる。)

readelf というコマンドでELFフォーマットのファイルの情報を確認する事ができる。

$ readelf -h /bin/sleep
ELF ヘッダ:
  マジック:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
  クラス:                            ELF64
  データ:                            2 の補数、リトルエンディアン
  バージョン:                        1 (current)
  OS/ABI:                            UNIX - System V
  ABI バージョン:                    0
  型:                                EXEC (実行可能ファイル)
  マシン:                            Advanced Micro Devices X86-64
  バージョン:                        0x1
  エントリポイントアドレス:               0x401760
  プログラムの開始ヘッダ:          64 (バイト)
  セクションヘッダ始点:          29552 (バイト)
  フラグ:                            0x0
  このヘッダのサイズ:                64 (バイト)
  プログラムヘッダサイズ:            56 (バイト)
  プログラムヘッダ数:                9
  セクションヘッダ:                  64 (バイト)
  セクションヘッダサイズ:            29
  セクションヘッダ文字列表索引:      28
readelf -S /bin/sleep

で大量の情報が出力される。

セクションヘッダ:
  [番] 名前              タイプ           アドレス          オフセット
       サイズ            EntSize          フラグ Link  情報  整列

「.txt」が、コード領域の情報
「.data」が、データ要域の情報

プログラム実行時に作成されたプロセスのメモリマップは「/proc/pid/mpas」というファイルによって得られる。

fork and exec

  • 親となるプロセスからfork()を発行し
  • 復帰後に子プロセスがexec()を呼ぶ

終了処理

  • exit_groupシステコール(exit関数)でプロセスに割り当てていたメモリを全て回収する。

3章終了。 次回は来週

トップへ
PART.1 PART.2 PART.3

『試して理解 Linuxのしくみ』を試してLinuxを理解する(PART.1)

前書き

こんにちは。

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

[試して理解]Linuxのしくみ ~実験と図解で学ぶOSとハードウェアの基礎知識

こちらの本を通して、Linuxを理解していきたいと思っています。
この記事はパート1です。

章ごとに記事を分けて投稿していこうと思っております。

本の内容をそのまま載せるのは良くないと思いますので、この本を読んで試したこと、理解したことのアウトプットが中心になると思います。
「わたしもやってみたい!」と思った人は、早速ポチりましょう。

本編

はじめに

この本によって、OSやハードウェアの理解を深めれば、

  • ハードウェアの特性を考慮した、良いソフトウェアを開発できるようになる。
  • どのような指標に基づいてシステムを設計すれば良いか分かるようになる。
  • OSやハードウェアに関するトラブルが起きた時に、冷静に対処できるようになる。

だそうです。

私の第一目標は、OSやハードウェアに関するトラブルが起きた時に、冷静に対処できるようになる。 です。 よく分からない問題を、分かる問題に変えていきたいところです。

実験環境はなるべく仮想マシンではなく実機上にシステムを構築してください。その理由は、仮想マシンを使用すると、一部の例については本書に記載したものと比べて挙動が変わることがあるからです。

私はUbuntu 16.04の実機を用いてい試していきます。

第1章:コンピュータシステムの概要

コンピュータは
インプット → 処理 → アウトプット
でできている。

1章は概要と章の説明でした。

第2章:ユーザモードで実現する機能

OSはカーネル以外にも、ユーザモードで動作する様々なプログラムから構成される。 ユーザモードのプロセス処理から、システムコールを介してカーネルの処理を呼び出す。

システムコール

システムコールの種類

  • プロセス生成、削除
  • メモリ確保、下方
  • プロセス間通信
  • ネットワーク
  • ファイルシステム操作
  • ファイル操作

システムコールとCPUに関するメモ

  • システムコールを発行すると、CPUに割り込みというイベントが発生する。
  • ユーザプロセスからシステムコールを介さずに直接CPUのモードを変更する方法はない。

試す:システムコール

straceを使って、どんなシステムコールを発行するか確認する。 hello.c

#include <stdio.h>

int main(void)
{
    puts("hello world");
    return 0;
}
strace -o hello.log ./hello
cat hello.log
execve("./hello", ["./hello"], [/* 28 vars */]) = 0
.
. 略
.
write(1, "hello world\n", 12)           = 12
exit_group(0)                           = ?
+++ exited with 0 +++

プログラム的なシステムコール

write(1, "hello world\n", 12)     

pythonの例でも試す。内容は割愛。 1行に対して一つのシステムコールの情報が出力される。

man 2 <システムコール>

システムコールの内容を確認できる。

man 2 getdents
NAME
       getdents, getdents64 - get directory entries
.
.
.

過去に書いたbashスクリプトシステムコールを確認したくなった。

試す:ユーザモード or カーネルモード

# 1秒ごとにCPUの情報を取得
sar -P ALL 1
^C
平均値:      CPU     %user     %nice   %system   %iowait    %steal     %idle
平均値:      all      0.05      0.00      0.05      0.00      0.00     99.90
平均値:        0      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        1      0.20      0.00      0.40      0.00      0.00     99.40
平均値:        2      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        3      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        4      0.00      0.00      0.20      0.00      0.00     99.80
平均値:        5      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        6      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        7      0.00      0.00      0.00      0.00      0.00    100.00

8つのCPUについての情報が得られる。ほとんど idle

  • ユーザモードのCPU時間の割合
    • %user + %nice
  • カーネルモードのCPU時間の割合
    • %system

その他のフィールドは適宜説明してくれる。

無限ループするだけのC言語の例

無限ループの例でのsarの結果

平均値:      CPU     %user     %nice   %system   %iowait    %steal     %idle
平均値:      all     12.50      0.00      0.00      0.00      0.00     87.50
平均値:        0      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        1      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        2      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        3      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        4      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        5      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        6    100.00      0.00      0.00      0.00      0.00      0.00
平均値:        7      0.00      0.00      0.00      0.00      0.00    100.00

CPUコア6がユーザモード100%になっている。

親プロセスのプロセスIDを得るシステムコールを無限ループするプログラムの例

getppid() を無限ループさせる

平均値:      CPU     %user     %nice   %system   %iowait    %steal     %idle
平均値:      all      4.53      0.00      7.97      0.00      0.00     87.50
平均値:        0      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        1     36.09      0.00     63.91      0.00      0.00      0.00
平均値:        2      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        3      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        4      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        5      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        6      0.00      0.00      0.00      0.00      0.00    100.00
平均値:        7      0.00      0.00      0.00      0.00      0.00    100.00

CPUコア1をユーザモードで36.09%使い、カーネルモードで63.91%使っていたことが分かる。
ユーザモードの処理は「ループさせる」という処理。

%systemが大きい値になっている場合は、システムコールを発行させすぎたりしている事が考えれる。

試す:システムコールの所要時間

strace -T を用いる。hello.cでためす

strace -T -o hello.t.log ./hello
execve("./hello", ["./hello"], [/* 28 vars */]) = 0 <0.000614>
.
. 略
.
write(1, "hello world\n", 12)           = 12 <0.000031>
exit_group(0)                           = ?
+++ exited with 0 +++

0.000031 秒でwriteシステムコールが処理されていることがわかる。
だが、何秒か分からない。

変換 時, マイクロ秒

ここのWebサイトで変換してみることをオススメする。
31マイクロ秒だった。

読む:システムコールのラッパー関数

Linuxではプログラム作成を助けるために、様々ななライブラリ関数が用意されている。
システムコール高級言語から呼び出す事ができず、アーキテクチャ依存のアセンブリコードを使って呼び出す必要がある。

OSの助けがなければ、各プログラムはシステムコールを発行するたびにアーキテクチャ依存のアセンブリソースを書いて、高級言語から呼び出さなくてはなりません。

OSが助けてくれない世界は住みにくい世界です。

それを解決するのが、システムコールのラッパー関数。
これのおかげで、これを呼び出すだけで、システムコールを呼び出すことができる。

試す:C標準ライブラリ

標準Cライブラリに関するメモ

  • GNUプロジェクトが提供するglibc を標準ライブラリとして使用する。
    • Cプログラムはほとんど、glibc をリンクしている。
  • glibcシステムコールのラッパー関数を含む

プログラムがどのようなライブラリをリンクしているかをldd コマンド を用いて確認する。

$ ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007ffc953b9000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007ff9b917a000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff9b8db0000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007ff9b8b40000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007ff9b893c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007ff9b939c000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007ff9b871f000)

libcが標準ライブラリだそう。

親プロセスのプロセスIDを得るシステムコールを無限ループするプログラムのライブラリ

$ ldd ppidloop
    linux-vdso.so.1 =>  (0x00007fff431cc000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f63a90ac000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f63a9476000)

pythonなどでも libcをリンクしていて、pythonからひ標準Cライブラリを使っているそう。

GOはこんな感じ。

ldd /usr/local/go/bin/go
    linux-vdso.so.1 =>  (0x00007ffd76709000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f3abe62f000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3abe265000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f3abe84c000)

1章、2章終了。 次回は来週

トップへ
なし PART.1 PART.2

apkコマンドのhelpを日本語訳した

apkコマンドのhelpを日本語訳しただけです。

実行環境

bash image

apk バージョン

bash-4.4# apk --version
apk-tools 2.10.1, compiled for x86_64.

英語/日本語

英語

bash-4.4# apk --help
apk-tools 2.10.1, compiled for x86_64.

Installing and removing packages:
  add       Add PACKAGEs to 'world' and install (or upgrade) them, while ensuring that all dependencies are met
  del       Remove PACKAGEs from 'world' and uninstall them

System maintenance:
  fix       Repair package or upgrade it without modifying main dependencies
  update    Update repository indexes from all remote repositories
  upgrade   Upgrade currently installed packages to match repositories
  cache     Download missing PACKAGEs to cache and/or delete unneeded files from cache

Querying information about packages:
  info      Give detailed information about PACKAGEs or repositories
  list      List packages by PATTERN and other criteria
  dot       Generate graphviz graphs
  policy    Show repository policy for packages

Repository maintenance:
  index     Create repository index file from FILEs
  fetch     Download PACKAGEs from global repositories to a local directory
  verify    Verify package integrity and signature
  manifest  Show checksums of package contents

Use apk <command> --help for command-specific help.
Use apk --help --verbose for a full command listing.

This apk has coffee making abilities.

日本語

apk-tools 2.10.1, compiled for x86_64.

パッケージのインストールと削除:
  add    すべての依存関係が満たされていることを確認しながら、PACKAGEsを「world」に追加してインストール(またはアップグレード)します。
  del    「world」からPACKAGEsを削除し、それらをアンインストールする

システムメンテナンス:
  fix    主な依存関係を変更せずにパッケージを修復またはアップグレードする
  update    すべてのリモートリポジトリからリポジトリインデックスを更新する
  upgrade    現在インストールされているパッケージをリポジトリに合わせてアップグレードする
  cache    見つからないPACKAGEsをキャッシュにダウンロードしたり、不要なファイルをキャッシュから削除したりする

パッケージ情報の問い合わせ:
  info    PACKAGEsまたはリポジトリに関する詳細情報を提供する
  list    PATTERNおよびその他の基準でパッケージを一覧表示する
  dot    graphvizグラフを生成する
  policy    パッケージのリポジトリポリシーを表示する

リポジトリメンテナンス:
  index    FILEsからリポジトリインデックスファイルを作成する
  fetch    グローバルリポジトリからローカルディレクトリへのPACKAGEのダウンロード
  verify    パッケージの整合性と署名を確認する
  manifest    パッケージコンテンツのチェックサムを表示する

コマンド固有のヘルプを表示するには、「apk <command> --help」を使用してください。
完全なコマンドリストを表示するには、「apk --help --verbose」を使用してください。

このapkはコーヒー作る能力があります。  <-(?)

不明点

最後のジョークっぽいものの真意がわかりませんでした。日本語チックな冗談にするにはどういう訳が正しいのだろうか。

  • コーヒーを作る時間を与えてくれる。
  • コーヒーを作るぐらいのことはできる。
  • apkパッケージによって、コーヒーを作る機材の組み込みプログラム(パッケージ)がインストールできる。
  • その他

はて、詳しい人教えてください。

最後に

Google翻訳して、ニュアンス合わしてコピペするだけの記事です。
アウトプットしないと覚えられない身体です。

GCPのIAMの日本語/英語対応のCSV作った。

ブラウザ側名前とAPIで取得する名前が、英語と日本語別なので、対応CSV作った。
これをつかってGoogle Spread Sheetにはりつけるなり、grepするなりする。
おかしいところあればご指摘ください。

※ 最終更新:2018年9月12日 (ブログ記事下の方に更新履歴あり)

親,子,API
Project,参照者,"roles/browser"
Project,編集者,"roles/editor"
Project,オーナー,"roles/owner"
Project,閲覧者,"roles/viewer"
Android Management,Android Management ユーザー,"roles/androidmanagement.user"
App Engine,App Engine 管理者,"roles/appengine.appAdmin"
App Engine,App Engine 閲覧者,"roles/appengine.appViewer"
App Engine,App Engine コード閲覧者,"roles/appengine.codeViewer"
App Engine,App Engine デプロイ担当者,"roles/appengine.deployer"
App Engine,App Engine サービス管理者,"roles/appengine.serviceAdmin"
BigQuery,BigQuery 管理者,"roles/bigquery.admin"
BigQuery,BigQuery データ編集者,"roles/bigquery.dataEditor"
BigQuery,BigQuery データオーナー,"roles/bigquery.dataOwner"
BigQuery,BigQuery データ閲覧者,"roles/bigquery.dataViewer"
BigQuery,BigQuery ジョブユーザー,"roles/bigquery.jobUser"
BigQuery,BigQuery ユーザー,"roles/bigquery.user"
Billing,プロジェクトの支払い管理者,"roles/billing.projectManager"
Binary Authorization,Binary Authorization アテスター管理者,"roles/binaryauthorization.attestorsAdmin"
Binary Authorization,Binary Authorization アテスター編集者,"roles/binaryauthorization.attestorsEditor"
Binary Authorization,Binary Authorization アテスター イメージ検証者,"roles/binaryauthorization.attestorsVerifier"
Binary Authorization,Binary Authorization アテスター閲覧者,"roles/binaryauthorization.attestorsViewer"
Binary Authorization,Binary Authorization ポリシー管理者,"roles/binaryauthorization.policyAdmin"
Binary Authorization,Binary Authorization ポリシー編集者,"roles/binaryauthorization.policyEditor"
Binary Authorization,Binary Authorization ポリシー閲覧者,"roles/binaryauthorization.policyViewer"
Cloud Bigtable,Bigtable 管理者,"roles/bigtable.admin"
Cloud Bigtable,Bigtable 読み取り,"roles/bigtable.reader"
Cloud Bigtable,Bigtable ユーザー,"roles/bigtable.user"
Cloud Bigtable,Bigtable 閲覧者,"roles/bigtable.viewer"
Cloud Build,Cloud Build サービス アカウント,"roles/cloudbuild.builds.builder"
Cloud Build,Cloud Build 編集者,"roles/cloudbuild.builds.editor"
Cloud Build,Cloud Build 閲覧者,"roles/cloudbuild.builds.viewer"
Cloud Composer,Composer 管理者,"roles/composer.admin"
Cloud Composer,環境とストレージ オブジェクトの管理者,"roles/composer.environmentAndStorageObjectAdmin"
Cloud Composer,環境ユーザーと Storage Object の閲覧者,"roles/composer.environmentAndStorageObjectViewer"
Cloud Composer,Composer ユーザー,"roles/composer.user"
Cloud Composer,Composer ワーカー,"roles/composer.worker"
Cloud DLP,DLP 管理者,"roles/dlp.admin"
Cloud DLP,DLP 分析リスク テンプレート編集者,"roles/dlp.analyzeRiskTemplatesEditor"
Cloud DLP,DLP 分析リスク テンプレート読み取り,"roles/dlp.analyzeRiskTemplatesReader"
Cloud DLP,DLP 匿名化テンプレート編集者,"roles/dlp.deidentifyTemplatesEditor"
Cloud DLP,DLP 匿名化テンプレート読み取り,"roles/dlp.deidentifyTemplatesReader"
Cloud DLP,DLP 検査テンプレート編集者,"roles/dlp.inspectTemplatesEditor"
Cloud DLP,DLP 検査テンプレート読み取り,"roles/dlp.inspectTemplatesReader"
Cloud DLP,DLP ジョブトリガー編集者,"roles/dlp.jobTriggersEditor"
Cloud DLP,DLP ジョブトリガー読み取り,"roles/dlp.jobTriggersReader"
Cloud DLP,DLP ジョブ編集者,"roles/dlp.jobsEditor"
Cloud DLP,DLP ジョブ読み取り,"roles/dlp.jobsReader"
Cloud DLP,DLP Stored InfoTypes 編集者,"roles/dlp.storedInfoTypesEditor"
Cloud DLP,DLP Stored InfoTypes 読み取り,"roles/dlp.storedInfoTypesReader"
Cloud DLP,DLP ユーザー,"roles/dlp.user"
Cloud Filestore,Cloud Filestore 閲覧者,"roles/file.viewer"
Cloud Filestore,IAP で保護されたウェブアプリ ユーザー,"roles/iap.httpsResourceAccessor"
Cloud Functions,Cloud Functions 開発者,"roles/cloudfunctions.developer"
Cloud Functions,Cloud Functions 閲覧者,"roles/cloudfunctions.viewer"
Cloud IAP,IAP ポリシー管理者,"roles/iap.admin"
Cloud IAP,IAP で保護されたウェブアプリ ユーザー,"roles/iap.httpsResourceAccessor"
Cloud IoT,Cloud IoT 管理者,"roles/cloudiot.admin"
Cloud IoT,Cloud IoT Device コントローラ,"roles/cloudiot.deviceController"
Cloud IoT,Cloud IoT 編集者,"roles/cloudiot.editor"
Cloud IoT,Cloud IoT プロビジョナー,"roles/cloudiot.provisioner"
Cloud IoT,Cloud IoT 閲覧者,"roles/cloudiot.viewer"
Cloud Job Discovery,管理,"roles/cloudjobdiscovery.admin"
Cloud Job Discovery,ジョブ編集者,"roles/cloudjobdiscovery.jobsEditor"
Cloud Job Discovery,ジョブ閲覧者,"roles/cloudjobdiscovery.jobsViewer"
Cloud KMS,クラウド KMS 管理者,"roles/cloudkms.admin"
Cloud KMS,クラウド KMS 暗号鍵の復号化,"roles/cloudkms.cryptoKeyDecrypter"
Cloud KMS,クラウド KMS 暗号鍵の暗号化,"roles/cloudkms.cryptoKeyEncrypter"
Cloud KMS,クラウド KMS 暗号鍵の暗号化 / 復号化,"roles/cloudkms.cryptoKeyEncrypterDecrypter"
Cloud KMS,Cloud KMS 暗号鍵の公開鍵閲覧者,"roles/cloudkms.publicKeyViewer"
Cloud KMS,Cloud KMS 暗号鍵の署名者,"roles/cloudkms.signer"
Cloud KMS,Cloud KMS 暗号鍵の署名者 / 検証者,"roles/cloudkms.signerVerifier"
Cloud Scheduler,Cloud Scheduler 管理者,"roles/cloudscheduler.admin"
Cloud Scheduler,Cloud Scheduler 閲覧者,"roles/cloudscheduler.viewer"
Cloud Security Scanner,Cloud Security Scanner 編集者,"roles/cloudsecurityscanner.editor"
Cloud Security Scanner,Cloud Security Scanner 実行者,"roles/cloudsecurityscanner.runner"
Cloud Security Scanner,Cloud Security Scanner 閲覧者,"roles/cloudsecurityscanner.viewer"
Cloud Services,Service Broker 管理者,"roles/servicebroker.admin"
Cloud Services,Service Broker のオペレータ,"roles/servicebroker.operator"
Cloud Spanner,Cloud Spanner 管理者,"roles/spanner.admin"
Cloud Spanner,Cloud Spanner データベース管理者,"roles/spanner.databaseAdmin"
Cloud Spanner,Cloud Spanner データベース読み取り,"roles/spanner.databaseReader"
Cloud Spanner,Cloud Spanner データベース ユーザー,"roles/spanner.databaseUser"
Cloud Spanner,Cloud Spanner 閲覧者,"roles/spanner.viewer"
Cloud SQL,Cloud SQL 管理者,"roles/cloudsql.admin"
Cloud SQL,Cloud SQL クライアント,"roles/cloudsql.client"
Cloud SQL,Cloud SQL 編集者,"roles/cloudsql.editor"
Cloud SQL,Cloud SQL 閲覧者,"roles/cloudsql.viewer"
Cloud Tasks,クラウドタスク管理者,"roles/cloudtasks.admin"
Cloud Tasks,クラウドタスクのデータ取り出し,"roles/cloudtasks.dequeuer"
Cloud Tasks,クラウドタスクへのデータ追加,"roles/cloudtasks.enqueuer"
Cloud Tasks,クラウド タスクキュー管理者,"roles/cloudtasks.queueAdmin"
Cloud Tasks,クラウドタスクのタスク削除,"roles/cloudtasks.taskDeleter"
Cloud Tasks,Cloud Tasks のタスク実行者,"roles/cloudtasks.taskRunner"
Cloud Tasks,クラウドタスク閲覧者,"roles/cloudtasks.viewer"
Cloud TPU,TPU 管理者,"roles/tpu.admin"
Cloud TPU,TPU 閲覧者,"roles/tpu.viewer"
Cloud Trace,Cloud Trace 管理者,"roles/cloudtrace.admin"
Cloud Trace,Cloud Trace エージェント,"roles/cloudtrace.agent"
Cloud Trace,Cloud Trace ユーザー,"roles/cloudtrace.user"
Compute Engine,Compute 管理者,"roles/compute.admin"
Compute Engine,Compute イメージ ユーザー,"roles/compute.imageUser"
Compute Engine,Compute インスタンス管理者(ベータ版),"roles/compute.instanceAdmin"
Compute Engine,Compute インスタンス管理者(v1),"roles/compute.instanceAdmin.v1"
Compute Engine,Compute ネットワーク管理者,"roles/compute.networkAdmin"
Compute Engine,Compute ネットワーク ユーザー,"roles/compute.networkUser"
Compute Engine,Compute ネットワーク閲覧者,"roles/compute.networkViewer"
Compute Engine,Compute OS 管理者ログイン,"roles/compute.osAdminLogin"
Compute Engine,Compute OS ログイン,"roles/compute.osLogin"
Compute Engine,Compute セキュリティ管理者,"roles/compute.securityAdmin"
Compute Engine,Compute ストレージ管理者,"roles/compute.storageAdmin"
Compute Engine,Compute 閲覧者,"roles/compute.viewer"
Container Analysis,Container Analysis 管理者,"roles/containeranalysis.admin"
Container Analysis,Container Analysis メモの添付者,"roles/containeranalysis.notes.attacher"
Container Analysis,Container Analysis メモの編集者,"roles/containeranalysis.notes.editor"
Container Analysis,Container Analysis メモの閲覧者,"roles/containeranalysis.notes.viewer"
Container Analysis,Container Analysis 実行回数の編集者,"roles/containeranalysis.occurrences.editor"
Container Analysis,Container Analysis 実行回数の閲覧者,"roles/containeranalysis.occurrences.viewer"
Dataflow,Dataflow 管理者,"roles/dataflow.admin"
Dataflow,Dataflow デベロッパー,"roles/dataflow.developer"
Dataflow,Dataflow 閲覧者,"roles/dataflow.viewer"
Dataflow,Dataflow ワーカー,"roles/dataflow.worker"
Dataprep,Dataprep ユーザー,"roles/dataprep.projects.user"
Dataproc,Dataproc 編集者,"roles/dataproc.editor"
Dataproc,Dataproc 閲覧者,"roles/dataproc.viewer"
Dataproc,Dataproc ワーカー,"roles/dataproc.worker"
Datastore,Cloud Datastore インポート / エクスポート管理者,"roles/datastore.importExportAdmin"
Datastore,Cloud Datastore インデックス管理者,"roles/datastore.indexAdmin"
Datastore,Cloud Datastore オーナー,"roles/datastore.owner"
Datastore,Cloud Datastore ユーザー,"roles/datastore.user"
Datastore,Cloud Datastore 閲覧者,"roles/datastore.viewer"
Deployment Manager,Deployment Manager 編集者,"roles/deploymentmanager.editor"
Deployment Manager,Deployment Manager タイプ編集者,"roles/deploymentmanager.typeEditor"
Deployment Manager,Deployment Manager タイプ閲覧者,"roles/deploymentmanager.typeViewer"
Deployment Manager,Deployment Manager 閲覧者,"roles/deploymentmanager.viewer"
Dialogflow,Dialogflow API 管理者,"roles/dialogflow.admin"
Dialogflow,Dialogflow API クライアント,"roles/dialogflow.client"
Dialogflow,Dialogflow API 読み取り,"roles/dialogflow.reader"
DNS,DNS 管理者,"roles/dns.admin"
DNS,DNS の読み取り,"roles/dns.reader"
Error Reporting,Error Reporting 管理者,"roles/errorreporting.admin"
Error Reporting,Error Reporting ユーザー,"roles/errorreporting.user"
Error Reporting,Error Reporting 閲覧者,"roles/errorreporting.viewer"
Error Reporting,エラー書き込み,"roles/errorreporting.writer"
Firebase,Firebase Test Lab 管理者,"roles/cloudtestservice.testAdmin"
Firebase,Firebase Test Lab 閲覧者,"roles/cloudtestservice.testViewer"
Firebase Crash Reporting,Firebase Crash Symbol アップロード,"roles/firebasecrash.symbolMappingsAdmin"
Genomics,Genomics 管理者,"roles/genomics.admin"
Genomics,Genomics 編集者,"roles/genomics.editor"
Genomics,Genomics Pipelines 実行者,"roles/genomics.pipelinesRunner"
Genomics,Genomics 閲覧者,"roles/genomics.viewer"
IAM,セキュリティ審査担当者,"roles/iam.securityReviewer"
Kubernetes Engine,Kubernetes Engine 管理者,"roles/container.admin"
Kubernetes Engine,Kubernetes Engine Cluster 管理者,"roles/container.clusterAdmin"
Kubernetes Engine,Kubernetes Engine 開発者,"roles/container.developer"
Kubernetes Engine,Kubernetes Engine Host サービス エージェント ユーザー,"roles/container.hostServiceAgentUser"
Kubernetes Engine,Kubernetes Engine 閲覧者,"roles/container.viewer"
Logging,Logging 管理者,"roles/logging.admin"
Logging,ログ設定書き込み,"roles/logging.configWriter"
Logging,ログ書き込み,"roles/logging.logWriter"
Logging,プライベート ログ閲覧者,"roles/logging.privateLogViewer"
Logging,ログ閲覧者,"roles/logging.viewer"
Machine Learning Engine,ML Engine 管理者,"roles/ml.admin"
Machine Learning Engine,ML Engine デベロッパー,"roles/ml.developer"
Machine Learning Engine,ML Engine 閲覧者,"roles/ml.viewer"
Memorystore Redis,Cloud Memorystore Redis 管理者,"roles/redis.admin"
Memorystore Redis,Cloud Memorystore Redis 編集者,"roles/redis.editor"
Memorystore Redis,Cloud Memorystore Redis 閲覧者,"roles/redis.viewer"
Proximity Beacon,ビーコン添付ファイル編集者,"roles/proximitybeacon.attachmentEditor"
Proximity Beacon,ビーコン添付ファイルの公開元,"roles/proximitybeacon.attachmentPublisher"
Proximity Beacon,ビーコン添付ファイル閲覧者,"roles/proximitybeacon.attachmentViewer"
Proximity Beacon,ビーコン編集者,"roles/proximitybeacon.beaconEditor"
Pub/Sub,Pub/Sub 管理者,"roles/pubsub.admin"
Pub/Sub,Pub/Sub 編集者,"roles/pubsub.editor"
Pub/Sub,Pub/Sub パブリッシャー,"roles/pubsub.publisher"
Pub/Sub,Pub/Sub サブスクライバー,"roles/pubsub.subscriber"
Pub/Sub,Pub/Sub 閲覧者,"roles/pubsub.viewer"
Reserve Partner,Reserve Partner 管理者,"roles/reservepartner.portalAdmin"
Reserve Partner,Reserve Partner 読み取り,"roles/reservepartner.portalReader"
Resource Manager,プロジェクト リーエンの変更,"roles/resourcemanager.lienModifier"
Resource Manager,組織の管理者,"roles/resourcemanager.organizationAdmin"
Resource Manager,プロジェクトの削除,"roles/resourcemanager.projectDeleter"
Resource Manager,Project IAM 管理者,"roles/resourcemanager.projectIamAdmin"
Resource Manager,プロジェクト移動,"roles/resourcemanager.projectMover"
Roles,役割の管理者,"roles/iam.roleAdmin"
Roles,役割の閲覧者,"roles/iam.roleViewer"
Service Accounts,サービス アカウント管理者,"roles/iam.serviceAccountAdmin"
Service Accounts,サービス アカウント キー管理者,"roles/iam.serviceAccountKeyAdmin"
Service Accounts,サービス アカウント トークン作成者,"roles/iam.serviceAccountTokenCreator"
Service Accounts,サービス アカウント ユーザー,"roles/iam.serviceAccountUser"
Service Usage,API キー管理者,"roles/serviceusage.apiKeysAdmin"
Service Usage,API キー閲覧者,"roles/serviceusage.apiKeysViewer"
Service Usage,Service Usage 管理者,"roles/serviceusage.serviceUsageAdmin"
Service Usage,Service Usage ユーザー,"roles/serviceusage.serviceUsageConsumer"
Service Usage,Service Usage 閲覧者,"roles/serviceusage.serviceUsageViewer"
Source,Source Repository 管理者,"roles/source.admin"
Source,Source Repository 読み取り,"roles/source.reader"
Source,Source Repository 書き込み,"roles/source.writer"
Stackdriver,Stackdriver Account 編集者,"roles/stackdriver.accounts.editor"
Stackdriver,Stackdriver Account 閲覧者,"roles/stackdriver.accounts.viewer"
Stackdriver,Stackdriver リソース メンテナンス時間枠の編集者,"roles/stackdriver.resourceMaintenanceWindow.editor"
Stackdriver,Stackdriver リソース メンテナンス時間枠の閲覧者,"roles/stackdriver.resourceMaintenanceWindow.viewer"
Stackdriver Debugger,Stackdriver Debugger エージェント,"roles/clouddebugger.agent"
Stackdriver Debugger,Stackdriver Debugger ユーザー,"roles/clouddebugger.user"
Stackdriver Profiler,Stackdriver Profiler エージェント,"roles/cloudprofiler.agent"
Stackdriver Profiler,Stackdriver Profiler ユーザー,"roles/cloudprofiler.user"
エンドポイント,Endpoints Portal 管理者,"roles/endpoints.portalAdmin"
サービスネットワーキング,Service Management 管理者,"roles/servicemanagement.admin"
サービス管理,Service Config 編集者,"roles/servicemanagement.configEditor"
サービス管理,割り当て管理者,"roles/servicemanagement.quotaAdmin"
サービス管理,割り当て閲覧者,"roles/servicemanagement.quotaViewer"
サービス管理,サービス コントローラ,"roles/servicemanagement.serviceController"
サービス管理,サービス ネットワーキング管理者,"roles/servicenetworking.networksAdmin"
ストレージ,ストレージ管理者,"roles/storage.admin"
ストレージ,ストレージのオブジェクト管理者,"roles/storage.objectAdmin"
ストレージ,ストレージのオブジェクト作成者,"roles/storage.objectCreator"
ストレージ,ストレージ オブジェクト閲覧者,"roles/storage.objectViewer"
その他,AutoML 管理者,"roles/automl.admin"
その他,AutoML 編集者,"roles/automl.editor"
その他,AutoML 予測者,"roles/automl.predictor"
その他,AutoML 閲覧者,"roles/automl.viewer"
その他,Firebase Crash Symbol アップローダー(非推奨),"roles/mobilecrashreporting.symbolMappingsAdmin"
その他,Cloud RuntimeConfig 管理者,"roles/runtimeconfig.admin"
その他,「Google で購読」デベロッパー,"roles/subscribewithgoogledeveloper.developer"
モニタリング,モニタリング管理者,"roles/monitoring.admin"
モニタリング,Monitoring AlertPolicy 編集者,"roles/monitoring.alertPolicyEditor"
モニタリング,Monitoring AlertPolicy 閲覧者,"roles/monitoring.alertPolicyViewer"
モニタリング,モニタリング編集者,"roles/monitoring.editor"
モニタリング,モニタリング指標の書き込み,"roles/monitoring.metricWriter"
モニタリング,モニタリング通知チャネルの編集者,"roles/monitoring.notificationChannelEditor"
モニタリング,モニタリング通知チャネルの閲覧者,"roles/monitoring.notificationChannelViewer"
モニタリング,稼働時間チェックのモニタリング設定の編集者,"roles/monitoring.uptimeCheckConfigEditor"
モニタリング,稼働時間チェックのモニタリング設定の閲覧者,"roles/monitoring.uptimeCheckConfigViewer"
モニタリング,モニタリング閲覧者,"roles/monitoring.viewer"
組織ポリシー,アクセスの透明性管理者,"roles/axt.admin"
組織ポリシー,組織ポリシー閲覧者,"roles/orgpolicy.policyViewer"

更新履歴

  • 2018/09/12 当時のもの

POSIX1日1コマンド[part12]: cal

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

cal

cal

とりあえず使ってみる

[vagrant@localhost 012]$ cal
   September 2018
Su Mo Tu We Th Fr Sa
                   1
 2  3  4  5  6  7  8
 9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

素敵。
カレンダーが出力されました。

calを知る

ざっくり使い方

cal [[month] year]
[vagrant@localhost 012]$ cal 2018
                               2018

       January               February                 March
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                1  2  3
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    4  5  6  7  8  9 10
14 15 16 17 18 19 20   11 12 13 14 15 16 17   11 12 13 14 15 16 17
21 22 23 24 25 26 27   18 19 20 21 22 23 24   18 19 20 21 22 23 24
28 29 30 31            25 26 27 28            25 26 27 28 29 30 31

        April                   May                   June
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7          1  2  3  4  5                   1  2
 8  9 10 11 12 13 14    6  7  8  9 10 11 12    3  4  5  6  7  8  9
15 16 17 18 19 20 21   13 14 15 16 17 18 19   10 11 12 13 14 15 16
22 23 24 25 26 27 28   20 21 22 23 24 25 26   17 18 19 20 21 22 23
29 30                  27 28 29 30 31         24 25 26 27 28 29 30

        July                  August                September
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7             1  2  3  4                      1
 8  9 10 11 12 13 14    5  6  7  8  9 10 11    2  3  4  5  6  7  8
15 16 17 18 19 20 21   12 13 14 15 16 17 18    9 10 11 12 13 14 15
22 23 24 25 26 27 28   19 20 21 22 23 24 25   16 17 18 19 20 21 22
29 30 31               26 27 28 29 30 31      23 24 25 26 27 28 29
                                              30
       October               November               December
Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa   Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6                1  2  3                      1
 7  8  9 10 11 12 13    4  5  6  7  8  9 10    2  3  4  5  6  7  8
14 15 16 17 18 19 20   11 12 13 14 15 16 17    9 10 11 12 13 14 15
21 22 23 24 25 26 27   18 19 20 21 22 23 24   16 17 18 19 20 21 22
28 29 30 31            25 26 27 28 29 30      23 24 25 26 27 28 29
                                              30 31
[vagrant@localhost 012]$ cal 8 2018
     August 2018
Su Mo Tu We Th Fr Sa
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

ざっくりDESCRIPTION

カレンダーを表示する。
[cal] ユーティリティーは、1752年9月14日にグレゴリオ暦が採用されたかのように、

を使用して標準出力にカレンダーを書き出します
オペランドが指定されていない場合、calは今年の今月の1か月のカレンダーを生成します。
[year] オペランドのみが与えられている場合、指定された暦年のすべての12ヶ月間のカレンダーを生成します。
[month] と [year] の両方のオペランドが与えられた場合、calは与えられた年の与えられた月の1カ月のカレンダーを生成します。

ざっくりOPTION

なし

ざっくりOPERANDS

  • month
    • 1(January)から12(December)までの10進整数で表される表示する月を指定します。
  • year
    • 表示されるカレンダーの年を指定します。1から9999までの10進整数で表されます。

ざっくりまとめ

ちょうどあなたが今、何かしらのシェルを使っているのなら、
スマホでみるよりも、卓上カレンダーをみるよりも早く、今週末が何日かを知ることができます。
特殊な形式(カレンダーとしては見やすい)で出力されるので、有効活用の方法は分からないです。
「月の1週目の今月に含まれる日数を調べる」...とか?

cal | head -n 3 | tail -1 | wc -w
1

POSIX1日1コマンド[part11]: c99

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

c99

c99

とりあえず使ってみる

[vagrant@localhost 011]$ c99
-bash: c99: command not found

コマンドが見つかりません。

yumでインストールしてみよう

[vagrant@localhost 011]$ sudo yum install c99
Failed to set locale, defaulting to C
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: ftp.riken.jp
 * extras: ftp.riken.jp
 * updates: ftp.riken.jp
base                                                                                                                                                          | 3.6 kB  00:00:00
extras                                                                                                                                                        | 3.4 kB  00:00:00
updates                                                                                                                                                       | 3.4 kB  00:00:00
(1/4): base/7/x86_64/group_gz                                                                                                                                 | 166 kB  00:00:00
(2/4): extras/7/x86_64/primary_db                                                                                                                             | 187 kB  00:00:00
(3/4): updates/7/x86_64/primary_db                                                                                                                            | 5.2 MB  00:00:01
(4/4): base/7/x86_64/primary_db                                                                                                                               | 5.9 MB  00:00:02
No package c99 available.
Error: Nothing to do

というわけでc99を使えるようにするところから書きます。

c99を使えるようにする

そもc99とは

C99 - Wikipedia

C99は、ISOで定められたC言語の規格である。正式な規格名は ISO/IEC 9899:1999。 ANSIの標準化プロセス(C89)のあと、C言語仕様はC++が標準化の取り組みによって進化しているのと比べて停滞していた。1995年には標準追補を作成したが、これはC89への細かい修正および国際文字集合対応の追加であった。1990年代の後半にいくつかの訂正を経て、ISO/IEC 9899:1999 として1999年に発行した。この標準は"C99"と呼ばれ、ANSI標準としても2000年5月に受理。国際的なC標準は作業部会ISO/IEC JTC1/SC22/WG14で保守している。

C言語の規格のようですね。

インストールする

gccに含まれているようです。
ですのでgccをpackage managerでインストールします。

$ sudo yum install gcc
$ sudo apt install gcc
$ c99
gcc: fatal error: no input files
compilation terminated.

c99コマンドが実行できるようになりました。

c99を使う

ざっくり使い方

C言語はわからないのでインターネットでしらべたHello Worldを準備します。

$ vim hello.c
#include <stdio.h>

int main(int argc, char *args[])
{
    printf("Hello, world!\n");
    return 0;
}

コンパイル

$ c99 hello.c
$ ./a.out
Hello, world!

アウトプットファイルの名前を指定

$ c99 -o hello hello.c
$ ls
a.out  hello  hello.c
$ ./hello
Hello, world!

ざっくりDESCRIPTION (翻訳)

Cプログラムをコンパイルする。
c99ユーティリティは、標準Cコンパイルシステムへのインタフェースである。 ISO C標準に準拠したソースコードを受け入れなければならない。システム概念的には、「コンパイラ」と「リンクエディタ」で構成されている。
[pathname] オペランドと[-l option-arguments] で参照される入力ファイルはコンパイルとリンクが行われ、実行可能ファイルが生成されます。 (リンクが完全にc99のオペレーション内で完全に起こるかは不特定です。一部の実装では、ファイルが実行されるまで完全には解決されないオブジェクトが生成されることがあります。)
[-c] オプションを指定すると、.cのフォームファイルのすべての [pathname] オペランドに対して、ファイルは次のようになります。

$(basename pathname .c).o

コンパイルが成功した結果として作成されるものとします。-cオプションが指定されていない場合、.cファイルオペランドに対してこのような.oファイルが作成されるか削除されるかは不定です。
リンクの編集を妨げるオプション(-cや-Eなど)がなく、すべての入力ファイルがエラーなしでコンパイルおよびリンクされた場合、結果の実行可能ファイルは [-o outfile] オプション(存在する場合)またはファイル [a.out] に書き込まれます。
実行可能ファイルは、ファイルの読み取り、書き込み、および作成で指定されているとおりに作成されますが、ファイルのパーミッションビットは次のように設定されます:S_IRWXO | S_IRWXG | S_IRWXU

プロセスの umask で指定されたビットはクリアされます。

ざっくりOPTION

C言語の知識がないのでオプションをざっくりキーワードだけ載せます。

  • -c
    • C言語の#defineディレクティブのように名前を定義します。
  • -D name[=value]
  • -E
    • C言語のソースファイルを標準出力にコピーし、すべてのプリプロセッサディレクティブを実行します。編集は行われません
  • -g
    • オブジェクトまたは実行可能ファイルに記号情報を生成する。
  • -I directory
  • -L directory
  • -l library
    • liblibrary.aという名前のライブラリを検索します。
  • -O optlevel
    • コード最適化のレベルを指定します。
  • -o outfile
    • 生成された実行可能ファイルには、デフォルトのa.outの代わりにパス名のoutfileを使用します。
  • -s
    • POSIX.1-2017のSystem Interfacesボリュームで定義されているexecファミリを使用して適切な実行に必要ないシンボリックおよび他の情報が削除(削除)されたオブジェクトまたは実行可能ファイル、またはその両方を生成する。
  • -U name
    • 名前の初期定義を削除します。

ざっくりまとめ

コンパイラの知識がない人からしたらc99は流石にコマンド名からどういう動作をするのか分からないのではないでしょうか。
私はC言語を使ったことがない + コンパイルとかをよく知らないのでこの程度のことしかかけませんでした。

gccGNUコンパイラコレクションですね。c99はc言語の規格なので様々な規格のコンパイラgccには入っているのでしょうね。

久しぶりにブログ投稿しようと思ったらポエム書いてた。

こんにちは。

久しぶりのブログ投稿です。

ポエムと戯言です。

mokicks.hatenablog.com

「さぁPOSIXを始めよう」というブログ投稿を始めてから、約半年が過ぎようとしています。

2月18日からこの投稿を始めました。そして現在は8月22日

$ expr \( `date --date "20180822" +%s` - `date --date "20180218" +%s` \) / 86400
185

185日経っています。

そして、POSIXコマンドの数が、

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/zcat.html#tag_20_160 (アルファベット順の最後のコマンド「zcat」) が160個

そして投稿した数が「9」記事

あれ?おかしいぞ185日あったのに、残り151コマンドもやってないぞ。

結論

1日1つの記事を書くのはしんどいです。

何が言いたいのか。

ブログ投稿は義務でやっているわけじゃないので途中でやめても死にません。
だから好きなタイミングで投稿してしまいます。

1日1記事を書くという自分へのプレッシャーが毎日投稿をやめる理由になりました。

というのを盾に飽き性を守っています。

人間は自分を守る生き物です。ガーディアンです。セルフガーディアンです。

ストイックな人はガーディアンを説得しているのでしょう。

何かしらの対策をとってガーディアンに守るのをやめさせるのか。
それは、できませんでした。 できる方法がわかる人教えください。

じゃあどうやってガーディアンがいる状況でアグレッシグなムーブを起こせるのか。

それは「ガーディアンに攻撃だと気づかれないこと」で解決すると考えました。

ここでいう攻撃は「努力」とか「我慢」とかです。

僕の好きなアイドルグループの歌の歌詞に

「好きな事は苦しくたって努力と感じないよ」

という言葉あります。(Dの純情)

じゃあ好きになれるのか?

好きになれる人はすでに好きなんだと思います。

好きにないないものの努力は「それなり」でいいのだと思います。
(好きなものは努力と感じないので、そもそも努力ではない)

ガーディアンに守らせつつ攻撃を与える

簡単に言うと、無理をしないことですね。

仕事から帰ってきて、家に帰って「努力」「我慢」をするのはつらいですよね。

家に着いたら好きな事したくなるんですよね。

好きな事すればいいんです。好きな事した時間の何パーセントかを努力にあてましょう。

そのパーセントの見極めは難しいです。

0%の人もいると思います。それは仕方ないです。いつかパーセントが上がる日がくるかもしれません。その日を待ちましょう。

最初は10%ぐらいから始めるといいと思います。
18時に家に帰ってきて0時に寝るとして、 6時間もあるので、
60 * 6 * 0.1 = 36min
1日36分努力すれば、人生の10%の時間を継続的に自身の成長に向けられているのです。

そして、36minという時間が少ないと感じたらパーセントをあげていけばいいんです。

なので、「努力」をしている時間を測るのをおすすめします。

自分がどれぐらいの時間(%)を努力に使っているのかを確認して無理の無いラインを見つけましょう。

それがある程度続けらえたら、それがあなたの

ガーディアンに攻撃だと気づかれない攻撃です。

最後に

POSIXの投稿を怠っていたので言い訳ポエムを書いてみました(笑)
POSIXの投稿は毎日じゃなくすが、続ける予定です。

今勉強していること、今後更新があるかもしれないことをリストとして出しておきます

この辺のブログを書いていきますので、興味あればみてください。