FAQ

作者

Ryo Nakagami

更新日

2025-12-19

統計分析

ノート統計スキル習得の5つの観点
  1. 統計手法そのものの理解と,その背後にある数学を用いた理論の理解
  2. 実際のデータに対して統計手法を用いた分析を実行するためのプログラミングスキル
  3. データの前処理,環境構築,ソースコードのテストや管理,実装した推定量のデプロイなどのエンジニアリングスキル
  4. 統計学の考え方や発想(例:データ分析のお作法や結果の解釈方法など)
  5. そもそも解くべきの問題の見つけ方とその問題を解くにあたっての方法論

統計学の考え方や発想

「統計学の考え方や発想」を身につけることは

  • データを取得したときに最初にすべきこと
  • データ解析で意識しておくべきこと
  • 結果を解釈するときに肝に銘じておきたいこと

へ繋がってきます.

分析コミュニケーション

分析コミュニケーションとは「課題を起点に,データと論理に基づいて洞察を導き,それを意思決定者に理解・納得可能な形で伝達する一連のプロセス」のこと

ノート回帰の目標
  • \(N\) 個の観測値 \(\{\pmb x_n\}\) と対応する目標値 \(\{t_n\}\) からなる訓練データ集合が与えられたとき,新しい \(\pmb x\) に対する \(t\) を予測すること
  • それぞれの \(\pmb x\) の値に対する \(t\) の値の不確かさを表すたのに予測分布 \(p(t\vert \pmb x)\) をモデル化すること

基底関数を用いた線形モデル

  • パラメータに関して線形であり解析が容易な一方,入力変数に関しては非線形という特徴がある

正則化ペナルティ項はログスケール

  • 正則化項 \(\lambda \|\pmb w\|^2\) の係数 \(\lambda\) は,\(\ln \lambda\) のスケール(ログスケール)で探索・表示するのが一般的
  • \(\lambda\) の影響はオーダーで効く(1→10の影響と10→19の影響は異なる)
  • PRML では \(\ln \lambda\) を横軸にとってテスト誤差や係数の変化をプロットしている(例:PRML Figure 1.8)

Machine Learning

ノートNeural Netと解釈性と計算的還元性
  • 現段階では,Neural Net全体が何をしているか「説明的に語る」手段はない
  • NNは事実として計算的に還元不能であり,各段階を確実に追跡していく以外に,そのふるまいを知る方法はない

LLM

ノートChatGPTと教師なし学習の関係
  • ChatGPTの基本的な処理は,「与えられた文脈に続く単語(トークン)を予測すること」
  • 訓練では,文章の一部(文脈)を入力とし,その続きの単語(トークン)を出力として学習する
    • このとき訓練は,文章の一部を用意した上で,次ぐ木の部分を隠したデータを訓練の「入力」に用い,隠していない元文章を「出力」として使うだけで済む
    • 人手でラベルを付与する必要はなく,元の文章そのものを正解データとして利用できる

Math

ノート不等式

\[ \begin{align} \vert X \vert \leq 1 + X^2 \end{align} \]

定義 1 \(L_p\)ノルム

\(1 \leq p < \infty\) とする.ベクトル \(\boldsymbol{x} = (x_1, x_2, \ldots, x_n)^\top \in \mathbb{R}^n\) に対して,

\[ \|\boldsymbol{x}\|_p = \left(\sum_{i=1}^{n} |x_i|^p\right)^{1/p} \]

\(L_p\) ノルム(\(p\)-ノルム)という.特に,

  • \(p = 1\): \(\|\boldsymbol{x}\|_1 = \sum_{i=1}^{n} |x_i|\)(マンハッタンノルム)
  • \(p = 2\): \(\|\boldsymbol{x}\|_2 = \sqrt{\sum_{i=1}^{n} x_i^2}\)(ユークリッドノルム)
  • \(p = \infty\): \(\|\boldsymbol{x}\|_\infty = \max_{1 \leq i \leq n} |x_i|\)(上限ノルム)

定義 2 距離空間

集合 \(X\) の任意の2つの要素 \(x, y\) に対して実数値関数 \(d(x, y)\) が定義され,次の三条件

\[ \begin{aligned} (1)\quad\;& d(x,y) \ge 0 \quad\quad\text{等号は} x = y \text{のとき}\\ (2)\quad\;& d(x,y) = d(y,x) \\ (3)\quad\;& d(x,z) \le d(x,y) + d(y,z) \end{aligned} \]

が成り立つとき,\(d\)\(X\) 上の距離(metric)といい,組 \((X, d)\) を距離空間(metric space)という

Linux

ノートOSの役割

OSは以下の役割を担う:

  • ユーザとのインタフェース機能(入力の受付・結果表示など)
  • 記憶装置(ハードディスク,テープ等)やプリンタなどへのデータ入出力の管理
  • メモリの管理やリソースの割り当て
  • アプリケーションソフトウェアの実行管理(OSが存在しないと,アプリケーションは動作できない)
  • システム全体を統括する中心部分としてカーネルを持ち,GNU/LinuxシステムではLinuxがそのカーネルにあたる

プログラムが動作する根本的仕組み

メモリにロードされたマシン語のプログラムが,CPUによって解釈・実行され,それによってコンピューターというシステム全体の制御やデータの演算が行われる

ノートカーネル情報の確認
% uname -a
Linux kirby-Desktop 6.14.0-35-generic #35~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue Oct 14 13:55:17 UTC 2 x86_64 x86_64 x86_64 GNU/Linux

表示フィールドは

kernel-name nodename kernel-release kernel-version
machine processor hardware-platform operating-system
フィールド 例(あなたの環境) 説明
Kernel name Linux カーネルの種類(通常 Linux)
Hostname ryo-billiken-Desktop ホスト名(マシン名)
Kernel release 6.14.0-35-generic カーネルのリリースバージョン
Kernel version #35~24.04.1-Ubuntu カーネルのビルド番号+ディストリビューション情報
Build date Tue Oct 14 13:55:17 UTC カーネルがビルドされた日時
Build number / ABI 2 ABI 番号や追加のビルドメタ情報
Machine hardware name x86_64 CPU アーキテクチャ(ハードウェア)
Processor type x86_64 プロセッサタイプ(多くの Linux は machine と同じ値)
Hardware platform x86_64 ハードウェアプラットフォーム(多くの環境で machine と同じ)
Operating system GNU/Linux OS 種別
ノートLinuxを学ぶ意義は?
  • Linuxは世界でもっとも使われているOSであり,サーバやクラウド環境で広く採用されている
  • コンピューターはOS上で動作し,多くの機器がLinuxを搭載していることから,身の回りのコンピュータがどのような仕組みで動いているか理解する上でLinuxを学ぶ意義がある
  • データ分析実践の場面では,分析サーバやクラウド環境の多くがLinuxを基盤としており,操作や管理能力は実務上重要
  • Linuxの知識を身につけることで,効率的なデータ処理,自動化,環境構築など幅広いタスクを自力で行えるようになる
ノートUbuntuとは?
  • Debian GNU/Linuxをベースとしたディストリビューション
  • パッケージはDebianと同じく .deb 形式,パッケージマネージャも APT(Advanced Packaging Tool) を基本的には用いる
  • Canonical社から支援を受けつつ,コミュニティーベースで開発

Ubuntuにもいろいろなバリエ=ションがあり,代表例は以下

バリエーション 用途・特徴 デスクトップ環境 サポート期間
Ubuntu Desktop 一般ユーザー向けデスクトップ GNOME LTS: 5年
Ubuntu Server サーバー向け,GUIなし なし(CLI中心) LTS: 5年
Ubuntu Cloud クラウド環境向け(AWS, Azure, OpenStackなど) なし LTS: 5年
Ubuntu Core IoT・組み込み向け,スナップ中心 なし リリースによる

LTS系を使うときは,初回リリースには「未知のバグやハードウェア非対応」がある場合があるので基本的には 22.04.2 のような .2 ポイントリリース以降を用いること

Debian形式パッケージとRPM

  • Linuxではパッケージ(実行ファイル+ライブラリ+設定ファイル+マニュアル)という単位でソフトウェアを管理
  • DebianやUbuntuではDebian形式パッケージ
  • Red Hat, CentOS, DeforaではRPM形式
  • Linuxはディストリビューションに応じてシステテムライブラリが異なり,それに起因する依存関係のため,それぞれのパッケージを別のプラットフォームで利用することは基本できません(Flatpakという仕組みはある)

apt install --no-install-recommends package のすすめ

  • Dependsは入るが,Recommendsはインストールしない
  • Docker環境や分析環境では,不要パッケージ排除,管理対象を減らす,セキュリティリスク低減という観点から基本的には使用することを推奨
  • GUIデスクトップでは厳密にオプション付与すべきとは考えない
ノートディレクトリ構造の理解が必須
  1. データ取得・前処理・Notebookの配置・スクリプト実行など分析の中心はファイルやフォルダの操作
  • CLI のほうが正確で速い
  • CLI はパス指定で動くためディレクトリ構造の把握が必須
  1. サーバーやクラウドは GUI が使えない
  2. 再現性と品質管理にディレクトリ設計が不可欠
  3. CLI コマンドはそのまま自動化できるが,GUI 操作はできない
  4. そもそもUnix / Linux システムでは,「UNIXがインストールされたコンピューター(ホスト)に,ネットワーク経由で複数の別のコンピューター(ターミナル)から接続して作業を行う」という利用方法が基本なので,CLI利用が基本
ノートUbuntuセットアップ命名規則
<username>@<hostname>
  • username: 小文字英数字, 先頭文字は英字, - は避ける,_ はOK
  • hostname: アンダースコア _ は避ける,小文字英数字
ノートUbuntu Hostname Guideline
カテゴリー 特徴
① 動物・神話生物 ryo-griffin
ryo-pegasus
ryo-dragon
・印象に残る
・長期運用向き
② プロジェクト名 ryo-regmonkey
ryo-digitaltwin
ryo-hvac
・用途が明確
・ワークスペースや実験環境に最適
③ 英語の形容詞+名詞 ryo-silverfox
ryo-blueoak
・自由度が高い
ノートLinuxディストリビューションのインストール基本手順
  1. インストーラーの作成(USBメモリ等)
  2. インストーラーの起動(BIOS / UEFI 設定)
  3. インストール方法の選択(GUI / CLI,言語など)
  4. ストレージ設定
    • パーティション分割(必要に応じて LVM / 暗号化)
  5. ネットワーク設定
    • DHCP / 固定IP(※ディストリビューションにより前後する)
  6. キーボード配列・タイムゾーンの設定
  7. 初期ユーザー設定
    • root パスワード
    • 一般ユーザー
    • hostname
  8. インストールの実行
  9. システムの起動(再起動)
ノートアプリケーションの導入(ソースコードから)
  1. ソースコードの入手
  2. ソースコードの配置と展開
    • 一時ディレクトリ(/tmp など)に配置し,アーカイブを展開
  3. 事前準備(依存関係の確認・導入)
  4. 設定(./configure の実行)と Makefile の生成
  5. コンパイル(make
  6. インストール(make install
  7. 動作確認
ノートSysV init の runlevel

古い Fedora Coreでは rhgb quiet 3 と知っていするとCUI環境でのログイン画面が表示されますが,これはSysV initのrunlevelの指定に対応しています.

  • rhgb: Red Hat Graphical Boot
  • quiet: カーネルのログ出力量を減らすオプション
  • 3: SysV init における マルチユーザーモード(ネットワーク有効・GUIなし) を指定
runlevel 意味
0 halt(電源断)
1 single user mode(保守用, rootのみ)
2 ネットワークなしのmulti-user
3 multi-user + network(CUI)
4 未定義
5 multi-user + network + X(GUI) = グラフィカルログインによるマルチユーザーモード
6 システムの再起動(reboot)
ノートsystemctl主要コマンド
コマンド 役割 即時影響 起動時の状態への影響 主な用途
start サービスを起動 起動する なし 手動でサービスを立ち上げる
stop サービスを停止 停止する なし 一時的にサービスを止める
restart サービスを再起動 停止→起動 なし 設定変更後の再起動
reload 設定を再読み込み 再起動せず反映 なし 設定のみ反映(対応サービスのみ)
enable 自動起動を有効化 なし 起動時に自動起動 サーバー起動時に常に起動させる
disable 自動起動を無効化 なし 起動時に起動しない 常駐不要なサービスを外す

環境構築

ノートなぜデータサイエンティストにとって,ネットワークやサーバーなどの基盤知識が必要なのか?
  • 自分で好きなように分析環境を整えられるようになる
  • リソース不足時に,アルゴリズムの最適化のほか,スケールアップなどのインフラ計画まで踏み込んだ包括的な対応ができるようになる
  • システムトラブル時にどこに問題があるか,どのように対策すれば良いかが判断できるようになる
ノートバックアップ

バックアップは「何の単位でどこに保存するか」で適切な手段が変わる.分析サーバの運用では3つのレイヤを意識して使い分けるとよい.

レイヤ 対象 ユースケース 代表コマンド
① ファイルシステム単位 ブロックデバイス全体 / パーティション OS 再インストール対策,物理障害からの復旧 dd, dump
② ディレクトリ単位 プロジェクト,$HOME,特定パス 日次の差分バックアップ,作業ディレクトリの保全 tar, cp -a, rsync, borg, restic
③ ネットワーク経由 リモートホスト / クラウドストレージ オフサイト保管,世代管理付きの自動バックアップ rsync -e ssh, scp, rclone, borg(ssh://), restic(s3:/b2:)

バックアップと復元テスト

  • バックアップは リストアできて初めて完成.定期的にダミー環境へ復元テストを行う

バックアップの種類

「いつ何を取るか」という観点では,バックアップは以下の4種類に大別される.運用ではフル + 増分(または差分)の組み合わせが基本で,復元手順の単純さストレージ消費・取得時間のトレードオフで設計する.

種類 取得対象 取得時間/容量 リストア手順 代表ツール
フル (Full) 対象すべて 最も長く・大きい フル1本だけで復元可 tar, dd, rsync, borg create
増分 (Incremental) 直前のバックアップからの差分 最も短く・小さい フル + すべての増分を順に適用 tar -g(GNU listed-incremental), rsync --link-dest, borg, restic
差分 (Differential) 直近フルからの差分 増分より大きく・フルより小さい フル + 最新の差分1本 rsync --compare-dest, dump -1
スナップショット (Snapshot) ある時点のFS/ボリューム状態 (CoW) ほぼ瞬時・容量は変化分のみ スナップショットをマウント or rollback LVM snapshot, Btrfs/ZFS snapshot, EBS snapshot, docker volume snapshot

フル / 増分 / 差分の関係

  • フルは単独で完結するが容量・時間コストが大きいので,週次や月次など低頻度で取得するのが定石
  • 増分は前回 (フル or 増分) との差分のみを記録するため最も軽量.ただし どれか1本でも欠落すると以降の復元が破綻する
  • 差分は常に「最後のフル」との差分を取り続ける.日が経つほど膨らむが,リストアは「フル + 差分1本」だけで済むので運用が単純
  • borg / restic は内部的に重複排除 (deduplication)を行うため,ユーザから見ればすべて「フル」だが容量効率は増分相当になる

スナップショットはバックアップではない

  • LVM/Btrfs/ZFS のスナップショットは 同一ストレージ上のCoW参照であり,物理障害が起きると元データもろとも失われる
  • 作業前のロールバックポイント」や「整合性のある状態で tar/rsync を走らせるための一時凍結」として使うのが本来の用途
  • 真のバックアップにするには,スナップショットを別ストレージや別ホストへ転送する必要がある (btrfs send | btrfs receive, zfs send | zfs receive, EBS snapshot copy など)

Claude Code

10人の開発者がいたら,エージェントを正しく使えているのは3人くらい.残りはslopを作っている

ノートモデルの使い分け

Haikuなどの安価なモデルの出番として

  • 要約
  • コード探索
  • 翻訳

など最高精度が必須ではないタスクに対して割り当てる

Opus vs Codex

  • Opus: thinkingはあまり行わず,高速に質の高い回答を生成.知っているパターンに対して得意
  • Codex: 大量のthinkingを行う傾向がある.新しい問題,見たことのない問題に対して,ファーストプリンシプルから推論ができる

領域とモデル

  • フロントエンド領域では,技術の変化が速く,知識カットオフが新しいモデルほど良い
ノートエージェントハーネスの役割
役割 説明
コンテキスト管理 OSにおけるメモリ管理に相当.コンテキストウィンドウの使用量監視,要約,圧縮など
ツール実行管理 OSのI/O管理に相当.エージェントが使えるツールを管理し,検索・コード実行・API呼び出しなどのアクセス制御や実行結果の受け渡しを行う
タスク計画 OSのプロセス計画に相当.ユーザーの依頼を複数のサブタスクへ分解し,実行順序や依存関係を管理して目標達成までのワークフローを構築

上記の3つの役割は,いずれもAIモデルの中ではなく,外で行われる処理

skill の配置場所

skill をどこに置くかで利用できるユーザの範囲が決まる.

レベル パス 適用範囲
エンタープライズ (managed settings 参照) 組織内のすべてのユーザ
パーソナル ~/.claude/skills/<skill-name>/SKILL.md 自分のすべてのプロジェクト
プロジェクト .claude/skills/<skill-name>/SKILL.md そのプロジェクトのみ
プラグイン <plugin>/skills/<skill-name>/SKILL.md プラグインが有効化されている場所のみ

名前衝突時の優先順位

  • 同じ名前の skill が複数レベルに存在する場合,エンタープライズ > パーソナル > プロジェクト の順で上書きされる
  • プラグイン由来の skill は <plugin-name>:<skill-name> という名前空間を持つため,他レベルとは衝突しない
  • .claude/commands/ 配下のコマンドファイルも同じ仕組みで動作するが,skill と command が同じ名前を持つ場合は skill が優先される

Python分析環境

ノートQuick setup for ad-hoc analysis
  • pytestruffをこだわりなくクイックに用いたい場合は uvx(or uv tool run) を用いる
  • Pyproject.tomlで管理されていないディレクトリでもコマンド自体は利用可能

プログラミング

ノートプログラミングとは?
  • プログラミングとは,コンピューターにユーザーの考えを実行可能な形で伝える作業のことをいう
  • 単にコードを書くことではなく,「何をしたいか」を整理し,「実行可能な形」で処理を構造化することが重要

エージェントAiの登場により,人間が詳細な処理手順を書く,というプログラミングの側面の比重は小さくなりつつありますが,

  • 「何を実現したいか」を与えることは依然として必要であり,根本である「コンピューターにユーザーの考えを伝える」という本質は変わらない.

また,

  • 「何を実現したいか」というゴール定義
  • エージェントAIとの協調における Discernment(評価・判断)
  • AI が生成した手順や結果の妥当性検証やそれに基づく意思決定

には,人間側が引き続き,アルゴリズム・データ構造・システム構成・問題分解などを理解していることが重要です.

ノートコンピューターの語源
  • 計算や2つの数の足し算を示すラテン語の computare が語源
ノート哲学としてのオブジェクト指向設計(OOD)
  • 解決しようとする現実の問題を上手く理解できる形に整理・表現(モデリング)した上で,自分の経験やベストプラクティスをパターンという形に結晶化し,それを再利用すること
  • 問題をどう捉え,どう構造化するかという思考法そのものを重視
  • 「オブジェクト指向設計」自体に拘るのではなく「問題解決に使えるオブジェクト指向設計」という考えが重要
ノートスペック駆動開発
  • 仕様書を「信頼できる情報源」として,コーディングエージェントにコード生成を委ねる開発手法
  • これまでのソフトウェア開発でも仕様書を正として実装を勧めますが,実装時の制約や使用バグを放置してコーディングが進む事でコードが正となり,実装の「意図」が文書的に失われることが多くあるところに違いがある

man vs help

外部コマンドの公式マニュアル表示としての man と,プログラム内部でのマニュアル表示の実装としての --help という違いもありますが

  • man は 仕様としての正確さ(何を保証するか)
  • --help は 実装としての正確さ(今このバイナリで何が使えるか)

という違いがあります.--help

  • 実装から直接出力されるため,存在しないオプションは出ない
  • コード変更と同時に更新される

という特徴があるため,「実装時の制約や使用バグを放置してコーディングが進む事でコードが正となり,実装の「意図」が文書的に失われる」という事象が,man--help の内容の差分として現れることがあります.

ノートCLIコマンドの引数とオプションの順番
  • 「通常は オプション → 引数 の順番」だが,あくまで慣習
  • サブコマンド型CLIでは「コマンド → サブコマンド → オプション → 引数」とかもあり得る
command [options] [arguments]
ノートPythonの特徴
  • Javaのようにオブジェクト指向を全面に出さないため,クラスに属さない関数やグローバル変数が定義可能
  • 一方,データ型はすべてクラスであり,個々のデータ値はインスタンス
ノートデーモンからのメール

Gmailを使用していると mailer-daemon@googlemail.com が差出人となっているメールが届くことがあります.大抵の場合, メールの送信にかんするエラーが発生し,メールサーバーがそのことを知らせるためにメールを送ってくれています.

ここでいう DAEMONは常駐プログラム的な意味のデーモンのことです.つまり,メールサーバーのプログラムが自動的に送信しているメールなので, DAEMONからのメールに返事を出しても意味がありません.

ノートトラブルシューティングのあり方
  • 原因探索より先に,問題の型を固定する
    • 不具合発生時は,症状をカテゴリのどれかに当てはめてから対処に進む
  • 「動かない」「効かない」のような曖昧な記述で深追いしない:まず分類してから具体策へ

正規表現

ノートワイルドカードと正規表現の違い
  • ワイルドカード(globパターン)はシェルでのファイル名マッチングに使用
  • 正規表現はテキスト内のパターンマッチングに使用
項目 ワイルドカード(glob) 正規表現
主な用途 シェルでのファイル名・パス指定 テキスト検索・置換(grep, sed, etc.)
* の意味 0文字以上の任意の文字列 直前の文字の0回以上の繰り返し
. の意味 ただのドット文字 任意の1文字(メタ文字)
? の意味 任意の1文字 直前の文字の0または1回
使用例 ls *.txt
cp file?.log /tmp/
grep "a.*b" file.txt
sed 's/[0-9]\+/X/g'

具体例

# ワイルドカード(シェル)
ls *.txt          # file1.txt, data.txt などにマッチ
rm test?.log      # test1.log, testA.log などにマッチ

# 正規表現(grep)
grep "test.*log" file.txt   # "test" と "log" の間に任意の文字列
grep "file[0-9]+" file.txt  # "file" の後に1つ以上の数字

シェル

ノート内部コマンドと外部コマンド

シェルには 内部コマンド(builtin)外部コマンド の2種類があります.

種類
内部コマンド cd, export, set, echo, read
外部コマンド ls, cp, mv, grep, awk

内部コマンド

  • シェルの本体が持っているコマンド
  • シェル自身が処理するコマンドで,外部プログラムを起動しない
  • 高速で,カレントディレクトリ・変数・ジョブ状態などシェル自身の状態を直接変更できる

外部コマンド - /bin/usr/bin などに存在する実行ファイルで,シェルは fork/exec によって別プロセスとして実行. - 多くの場合,「実行ファイル名 = コマンド名」

判定方法

内部コマンドかどうかは type で確認できます(which でも可能)

$ type cd
cd is a shell builtin

$ type cp
cp is /usr/bin/cp
ノートシェル特殊変数

$ がつく特殊変数

変数 意味 example
$0 実行中のスクリプト名 echo $0
$1$9 位置パラメータ ./script.sh foo$1=foo
$# 引数の個数 echo $#
$@ 全引数(配列的) for a in "$@"; do echo $a; done
$* 全引数(1文字列) echo "$*"
$$ 自分のPID echo $$
$? 直前コマンドの終了コード ls /nope; echo $?
$! 直前バックグラウンドPID sleep 10 & echo $!
$_ 直前コマンドの最後の引数 ls /tmp; echo $_

bashの展開系

変数 意味 example
$RANDOM 乱数 (0–32767) echo $RANDOM
$SECONDS シェル起動後の秒数 sleep 2; echo $SECONDS
$LINENO 現在の行番号 echo $LINENO
$FUNCNAME 関数名 関数内で echo $FUNCNAME

履歴展開

書き方 意味 example
!^ 直前コマンドの 最初の引数 cmd var1 var2echo !^var1
!$ 直前コマンドの 最後の引数 cmd var1 var2echo !$var2
!* 直前コマンドの 全引数 cmd var1 var2echo !*var1 var2
!:n n番目の引数 cmd var1 var2 var3echo !:2var2
!:n-m n〜m番目 cmd var1 var2 var3echo !:2-3var2 var3
!:^ 最初の引数(!^ と同じ) cmd var1 var2echo !:^var1
!:$ 最後の引数(!$ と同じ) cmd var1 var2echo !:$var2

条件式

条件式 説明
-d <PATH> 指定した PATH が存在し,ディレクトリである場合に true
-f <PATH> 通常ファイルが存在する場合に true.ブロックデバイスの場合は false
-e <PATH> ファイルまたはディレクトリが存在すれば true
-L <PATH> シンボリックリンクの場合に true
-x <PATH> 実行可能な場合に true
数値1 -eq 数値2 2つの数値が同じ場合に true
数値1 -le 数値2 数値1 less than or equal to 数値2, then true
数値1 -ge 数値2 数値1 greater than or equal to 数値2, then true

クォートの種類

特殊文字の意味を打ち消す(quoting)方法は3種類

記号 意味
\ 直後の1文字のみ展開を抑止
'...' 中の すべての文字 の展開を抑止
"..." $`!除く すべての文字の展開を抑止
  • $ … 変数参照(例:$HOME
  • ` … コマンド置換(例:`date`
  • ! … ヒストリ展開(!!, !数字 等).末尾の ! は展開対象にならないためクオート不要

ドキュメント

ノートman ドキュメント
man [section] [command/file name]
  • デフォルトでは less を用いて表示される
  • passwd コマンドと /etc/passwd ファイルなど,同じ名前のコマンドやファイルはセクションによって区別します
  • コマンドやファイル名の一部しかわからない場合は,apropos コマンドを用いると見出し一部部分マッチで候補を検索することができる
セクション番号 セクション名 内容
1 User Commands 一般ユーザ向けコマンド(例:ls, cat, grep
2 System Calls カーネルが提供するシステムコール(例:open, read
3 Library Calls ライブラリ関数(例:printf, malloc
4 Special Files デバイスファイル・特殊ファイル(例:/dev/null
5 File Formats 設定ファイル・ファイル形式(例:passwd, fstab
6 Games ゲーム・娯楽プログラム
7 Miscellaneous 規約・標準・マクロ・プロトコル等
8 System Administration 管理者向けコマンド(例:mount, iptables
9 Kernel Routines カーネル内部 API(主に開発者向け)

OSSライセンス

ノートライセンス早見表
ライセンス OSI分類 個人利用 組織内利用 著作権表示の保持 免責事項の保持 特徴
GPL コピーレフト(強) 適用外 適用外 必須 必須 バイナリを配布する場合は,そのソースコードも公開しなくてはならない
Apache License 2.0 パーミッシブ 必須(NOTICE含む) 必須 特許ライセンス条項あり
NOTICE保持が必要
改変箇所は別ライセンスでも配布可能
改変再配布でもソース公開義務なし
MIT パーミッシブ 必須 必須 著作権表示を残せば再配布・商用利用OK
改変再配布でもソース公開義務なし
Mozilla 2.0 コピーレフト(弱・ファイル単位) 必須 必須 変更したファイルのみソース公開が必要(file-level copyleft)
単独ソフトの場合は再配布時にソース公開が必要

Business Communication Skill

ノートなぜWriting Skillsを学ぶ必要があるのか?
  • writingは重要なコミュニケーションツールの一つ
  • writing skillがなければどのような才能があっても,自分の考えはvoicelessになってしまう
  It is important for you to recognize that academic success depends not only on the content of 
  your written work but also on the way you write your reports and papers.
ノート語彙の重要性
  • word(語彙)は言語や文章,パラグラフの重要なbuilding blocks(構成要素)
  • どのような語彙が適切かはどのような場面でのコミュニケーションを想定しているかに依存する