Skip to main content

Linux のネットワーク管理コマンド nmcli と nmtui

· 2 min read
ひかり
Main bloger

nmcli

nmcli connection: すべての接続を表示

pi@raspberrypi:~ $ nmcli connection
NAME UUID TYPE DEVICE
preconfigured 1b29633c-51a7-42a8-8357-a23ddbb791b9 wifi wlan0
lo 37334688-5c87-47fc-87d3-8c4e31934dd2 loopback lo
有線接続 1 0df9157e-b1a9-3026-9bd5-f05234e1cf4b ethernet --

nmcli device: デバイスと状態を表示

pi@raspberrypi:~ $ nmcli device
DEVICE TYPE STATE CONNECTION
wlan0 wifi 接続済み preconfigured
lo loopback 接続済み (外部) lo
p2p-dev-wlan0 wifi-p2p 切断済み --
eth0 ethernet 利用不可 --

nmcli connection show ...: プロパティを表示

nmcli connection show プロファイル名 を実行し、プロパティを表示できる。

pi@raspberrypi:~ $ nmcli connection show <プロファイル名>
connection.id: <プロファイル名>
connection.uuid: 1b29633c-51a7-42a8-8357-a23ddbb791b9
connection.stable-id: --
connection.type: 802-11-wireless
connection.interface-name: --
connection.autoconnect: はい
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.multi-connect: 0 (default)
connection.auth-retries: -1
connection.timestamp: 1710955164
connection.read-only: いいえ
connection.permissions: --
connection.zone: --
connection.master: --
connection.slave-type: --
connection.autoconnect-slaves: -1 (default)
connection.secondaries: --
connection.gateway-ping-timeout: 0
connection.metered: 不明
connection.lldp: default
connection.mdns: -1 (default)
connection.llmnr: -1 (default)
connection.dns-over-tls: -1 (default)
lines 1-24

IP アドレスの確認

pi@raspberrypi:~ $ nmcli connection show <プロファイル名> | grep ipv4.addresses
ipv4.addresses: 192.168.10.113/24

IP アドレスの設定

以下の例では、IP アドレスを 192.168.10.113、プレフィックス長を 24 に設定。

sudo nmcli connection modify <プロファイル名> ipv4.addresses 192.168.10.113/24

DNS サーバーの確認

pi@raspberrypi:~ $ nmcli connection show <プロファイル名> | grep ipv4.dns:
ipv4.dns: 192.168.10.1

DNS サーバーの設定

以下の例では、DNS サーバーを 192.168.10.1 に設定

sudo nmcli connection modify <プロファイル名> ipv4.dns 192.168.10.1

接続を切断

sudo nmcli connection down <プロファイル名>

接続

sudo nmcli connection up <プロファイル名>

nmtui: TUI でネットワーク接続を設定

sudo nmtui

Linux プロンプトを日本語化する方法

· One min read
ひかり
Main bloger

Linux のプロンプトを日本語化する方法を紹介します。

1. 日本語ロケールのインストール

次に、日本語のロケールが存在しない場合は、それをインストールします。以下のコマンドを実行します。

sudo apt update
sudo apt install language-pack-ja

2. ロケールの設定

日本語のロケールを設定します。以下のコマンドを実行します。

sudo update-locale LANG=ja_JP.UTF8

3. システムの再起動

最後に、システムを再起動します。これにより、新しいロケール設定が反映されます。

sudo reboot

以上で、Linux プロンプトが日本語化されます。

RaspberryPi のプロンプトを日本語化する方法

· One min read
ひかり
Main bloger

Raspberry Pi のプロンプトを日本語化する方法を紹介します。

1. ロケールの設定

日本語のロケールを設定します。以下のコマンドを実行します。

  1. スペースで以下のようにチェックを入れ OK する
  2. ja_JP.UTF-8 を選択し OK する
sudo dpkg-reconfigure locales

# [*] ja_JP.UTF-8 UTF-8

2. 再起動

再起動します。

sudo reboot

以上。

Ubuntu (WSL2 含む) に pyenv と Python をインストールする方法

· One min read
ひかり
Main bloger

依存パッケージのインストール

参考: Home · pyenv/pyenv Wiki

sudo apt update
sudo apt install build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev curl \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

Pyenv のインストール

参考: pyenv/pyenv-installer: This tool is used to install pyenv and friends.

curl https://pyenv.run | bash

~/.bashrc に初期化スクリプトを書き込む

# ~/.bashrc を開く
code ~/.bashrc

以下を書き込みます。

export PYENV_ROOT="$HOME/.pyenv"
[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

eval "$(pyenv virtualenv-init -)"

Python のインストール

インストール可能なバージョン一覧を表示

pyenv install -l

Python のインストール

Python 3.12.2 をインストールします。

pyenv install 3.12.2

Python のバージョンを指定

デフォルトのバージョンを Python 3.12.2 に設定します。

pyenv global 3.12.2

python -V # Python 3.12.2

Ubuntu (WSL2 含む) に dotnet をインストール方法

· One min read
ひかり
Main bloger

参考: パッケージ マネージャーを使用せずに Linux に .NET をインストールする - .NET | Microsoft Learn

インストールスクリプトのダウンロード

wget https://dot.net/v1/dotnet-install.sh -O dotnet-install.sh

インストールスクリプトへ実行権限付与

chmod +x ./dotnet-install.sh

dotnet SDK をインストール

./dotnet-install.sh

最新版をインストールする場合は

./dotnet-install.sh --version latest

パスを通す

$HOME/.bashrc を開き、以下を追記

export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools

WSL2 で SSH のトンネルを使用して、WSL2 上のサーバーを LAN に公開する方法

· 2 min read
ひかり
Main bloger

Step1. WSL 側に OpenSSH Server をインストール

WSL2 に OpenSSH Server をインストールします。 それと、sshd サービスを立ち上げます。

# WSL2 側
sudo apt install openssh-server
sudo service sshd start

Step2. Windows 側で公開鍵を登録

Windows に公開鍵を登録していない場合は、以下のコマンドを実行します。

# Windows 側
ssh-keygent -t ed25519

次に WSL2 に公開鍵を登録します。

# Windows 側
$pubkey = $(cat $HOME\.ssh\id_ed25519.pub)
wsl -- echo $pubkey `| tee -a `$HOME/.ssh/authorized_keys

Step3. SSH でトンネルを通す

Windows から WSL2 に対し、SSH 接続を行います。

# Windows 側
ssh (wsl -- hostname -I).trim() -g -L8081:localhost:8080

コマンドを区切って説明します。

  • (wsl -- hostname -I).trim() は WSL2 の IP アドレスを取得します
  • -g はポートを LAN にフォワーディングします (外部の端末から 192.168.x.x のようなアドレスで参照可能になります)
  • -L はローカルフォワードのオプションです。サーバーのポートをローカルに転送します
  • 8081localhost:8080 は ローカルの 8081 にアクセスすると、localhost:8080 に転送されるという意味です。 ここでいう localhost はサーバー側から見た localhost です

Step4. サーバーを立ち上げる

公開対象となるサーバーを WSL2 上で立ち上げます。

# WSL2 側
ruby -run -e httpd . # ディレクトリ一覧が公開される

Step5. サーバーにアクセスする

http://localhost:8081 または、http://<ipconfig で表示される IP アドレス>:8081 でサービスにアクセスできます。

トンネル接続によるデメリットとしては毎回トンネルを通すのが面倒なことです。 不安定ですが、netsh interface portproxy ~ による設定を行っても同じようにできます。

JavaScript と HTML と CSS で右クリックメニューを実装

· One min read
ひかり
Main bloger

JavaScript

id="contextmenu" がメニュー本体で、id="main" がメニューを表示する対象の部分。

const contextmenu = document.getElementById('contextmenu');
const main = document.getElementById("main");
main.addEventListener('contextmenu', (e) => {
e.preventDefault();
contextmenu.style.left = e.pageX + 'px';
contextmenu.style.top = e.pageY + 'px';
contextmenu.style.display = 'block';
});
main.addEventListener('click', () => {
contextmenu.style.display = 'none';
});

HTML

<div id="contextmenu">
<ul>
<li>削除</li>
</ul>
</div>

CSS

#contextmenu {
display: none;
position: fixed;
left: 0;
top: 0;
border-radius: 8px;
background-color: #F9F9F9;
border: solid 1px #E3E3E3;
padding: 4px;
width: 192px;
}

#contextmenu ul{
padding-left: 0;
margin: 0;
}

#contextmenu li {
cursor: pointer;
margin: 0;
padding: 4.75px 0 4.75px 16px;
border-radius: 4px;
list-style: none;
font-size: 14px;
}

※クリックしたときのイベントと機能は別途作成する必要がある。

rbenv (WSL2 / Ubuntu) へのインストール方法

· One min read
ひかり
Main bloger

依存パッケージのインストール

sudo apt update
sudo apt install autoconf patch build-essential rustc libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libgmp-dev libncurses5-dev libffi-dev libgdbm6 libgdbm-dev libdb-dev uuid-dev -y

rbenv のインストール

# rbenv と ruby-build をインストール
curl -fsSL https://github.com/rbenv/rbenv-installer/raw/HEAD/bin/rbenv-installer | bash

# 起動時に rbenv を読み込み
echo 'eval "$($HOME/.rbenv/bin/rbenv init - bash)"' | tee -a ~/.bashrc

参考

Ruby 3.3.0 のインストール

source ~/.bashrc     # rbenv を初期化 (WSL 再ログインでも可)
rbenv install 3.3.0 # Ruby 3.3.0 のインストール
rbenv global 3.3.0 # Ruby 3.3.0 を規定に設定

参考

Windows Terminal と plink を使ってシリアルコンソールを使う

· One min read
ひかり
Main bloger

Arduino シリアル通信のプログラムを書く

Windows Terminal と plink を用いたシリアル通信を試すために、 Arduino にシリアル通信のプログラムを書き込みます。

void setup() {
Serial.begin(9600);
}

void loop() {
if(Serial.available() <= 0) return;
char data = Serial.read();
if(data == '\r'){
Serial.print("\n");
}else{
Serial.print(data);
}
}

以下のコマンドで Windows Terminal から plink コマンドを実行してシリアル通信を行います。

plink -serial COM1 -sercfg 9600,8,1,N,N

基本情報データベースまとめ

· 12 min read
ひかり
Main bloger

関係モデル

関係モデルと関係データベースの対応

関係モデル関係データベース
関係
属性
タプル
定義域データ型。属性がとりえる値の集合。
  • 属性に順序はない
  • 属性名は関係内で一意
  • 属性名には必ず名前を付ける

(基本情報技術者試験平成 28 年春期午前問 26)
(基本情報技術者試験平成 31 年春期午前問 26)

関係データベース, リレーショナルデータベース (RDB, Relational DataBase)

関係データベースは、データを 2 次元の表によって表現する。

(基本情報技術者試験平成 23 年秋期午前問 31)

スキーマ

スキーマとは、データの性質、形式、ほかのデータとの関連などデータ定義の集合である。

(基本情報技術者試験平成 26 年秋期午前問 26)

3 層スキーマ

3 層スキーマには、

  • 外部スキーマ: 利用者からみえるもの
  • 概念スキーマ: 開発者からみえるもの
  • 内部スキーマ: 物理的な構造

3 層スキーマの目的は、データの物理的な格納構造を変更しても,アプリケーションプログラムに影響が及ばないようにする。

(基本情報技術者試験平成 27 年春期午前問 26)

データベース管理システム (DBMS, DataBase Management System)

データベースを管理するソフトウェア。

機能概要
保全機能排他制御や参照制約、表制約によってデータの完全性を保つ機能
障害回復機能ロールバック、ロールフォワード、チェックポイント、ログによってデータベース障害から回復する機能
機密保護機能データの改ざんや漏洩を防ぐ機能

(基本情報技術者試験平成 16 年春期午前問 70)

E-R 図 (Entity-Relationship Diagram)

E-R 図は、エンティティ間の関連を示す。 エンティティとは実体のこと。

(基本情報技術者試験平成 18 年春期午前問 38)

表の設計

主キー (Primary Key)

表中の行を一意に識別するための列。

  • 一意制約
  • 非 (NOT) NULL 制約
  • 先頭でなくても OK
  • 複数の列と合わせて主キーとしても OK (複合キー)

(基本情報技術者試験平成 25 年秋期午前問 30)

外部キー (Foreign Key)

他の表の主キーを参照している列。

  • 参照制約 (参照一貫性が維持される制約)

(基本情報技術者試験平成 28 年春期午前問 29)

リレーションとは、主キーと外部キーを用いた表間の関連付け。

データの正規化

データベースを構築する際に、データの重複や矛盾を排除する。

(基本情報技術者試験平成 15 年春期午前問 67)
(基本情報技術者試験平成 16 年秋期午前問 67)
(基本情報技術者試験平成 18 年秋期午前問 61)

第 1 正規化

  • 繰り返しの項目をなくす
  • 計算で求められる項目をなくす

第 2 正規化

主キーの一部で一意に決まるものを別表に移す

  • 部分関数従属: 主キーの一部によって項目が一意に決定する関係
  • 完全関数従属: 主キーによって項目が一意に決定する関係

第 3 正規化

主キー以外によって決まる項目を、別表に移す

  • 推移的関数従属: 主キー以外の項目によって項目が一意に決定する関係

(基本情報技術者試験平成 20 年秋期午前問 57)

トランザクション処理

一連の処理をひとまとめにしたもの。

ACID 特性

トランザクションの性質

特性概要
原子性 (Atomicity)トランザクションが完了したか、してないか
一貫性 (Consistency)データベースの内容に矛盾がない。整合性がある
独立性 (Isolation)同時に実行した場合と順番に実行した場合で結果が同じ
耐久性 (Durability)トランザクション正常終了後、障害時にデータが消失しない

(基本情報技術者試験平成 24 年秋期午前問 30)
(基本情報技術者試験平成 26 年春期午前問 29)

排他制御

データベースの一貫性を保つためにほかのトランザクションからのアクセスを制限 (ロック)

排他制御の目的は、データの整合性を保つこと

(基本情報技術者試験平成 24 年春期午前問 33)
(基本情報技術者試験平成 28 年春期午前問 30)

共有ロック

トランザクションがデータを参照する前にかけるロック

専有ロック

トランザクションがデータを更新する前にかけるロック

共有ロックした後に、他のトランザクションは共有ロックすることだけが可能

ロックの粒度

ロックの粒度を大きく (表単位など) すると、他のトランザクションの待ちが多くなり、全体のスループットが低下する。

(基本情報技術者試験平成 30 年秋期午前問 29)

表単位などロックの粒度が大きいとロックの競合が起こりやすく、 行単位などロックの粒度が小さいとメモリ使用領域が多く必要になる。

(基本情報技術者試験平成 30 年春期午前問 30)

デッドロック

複数のトランザクションが、互いに相手の専有ロックしている資源を要求して待ち状態となり、実行できなくなること。

(基本情報技術者試験平成 16 年春期午前問 69)

デッドロックが発生した場合は、片方のトランザクションをロールバックする。

(基本情報技術者試験平成 18 年春期午前問 59)

2 相コミットメント

一連のトランザクション処理を行う複数サイトに更新処理が確定可能かどうかを問い合わせ、すべてのサイトが確定可能である場合、更新処理を確定する方式。

(基本情報技術者試験平成 17 年春期午前問 63) (基本情報技術者試験平成 29 年春期午前問 28)

トランザクションの途中で障害が発生した場合はロールバックする

データベースの障害回復

ロールフォワード

フルバックアップファイルと更新後ログを用いて復旧する

ロールバック

更新前ログを用いて復旧する

チェックポイント

データベース更新バッファの内容をデータベースに書出す。

関係演算

  • 射影: 列を取出す
  • 選択: 行を取出す
  • 結合: 複数の表から一つの表を生成
  • 和: 二つの表の行を取出す。同じ行はまとめる。
  • 積: 共通の行を取出す
  • 差: 一つの表からもう片方の表の行を除いたものを取出す

SQL

DDL, Data Definition Language (データ定義言語)

CREATE TABLE

テーブルを作成する。 概念スキーマに相当。実表。

CREATE TABLE TableName(ColumnName1 Type1, ...)

CREATE VIEW

ビューを定義する。 外部スキーマに相当。仮想表。

DML, Data Manipulation Language (データ操作言語)

SELECT

クエリ (問合せ) を行う。

SELECT Column, ... FROM Table, ... WHERE Conditions
  • 射影

    列を取り出す操作

    Col を取り出す場合

    SELECT Col FROM Table
  • 選択

    行を取り出す操作

    Price が 100 または 120 である行を取り出す場合

    SELECT * FROM Table WHERE Price=100 OR Price=120
    SELECT * FROM Table WHERE Price IN (100, 120)

    Price が 100 以上 200 以下である行を取り出す場合

    SELECT * FROM Table WHERE Price >= 100 AND Price <= 200
    SELECT * FROM Table WHERE BETWEEN 100 AND 200

    Name が "田" で終わる行を取り出す場合

    SELECT * FROM Table WHERE Name LIKE "%田"
    • %: 0 文字以上にマッチ
    • _: 1 文字以上にマッチ

結合

  • DISTINCT: 重複した行を一つにまとめる

並び替え (ORDER BY)

昇順 (ASC)

SELECT ... FROM ... ORDER BY ColumnName ASC

ASC は省略可。

降順 (DESC)

SELECT ... FROM ... ORDER BY ColumnName DESC

集合関数

関数意味
AVG平均
COUNT行数
MIN最小値
MAX最大値
SUM合計

グループ化 (GROUP BY)

SELECT ... FROM ... GROUP BY ColumnName

別名 (AS)

SUM(ColumnName) AS GOUKEI

グループの条件 (HAVING)

GROUP BY ColumnName HAVING ...

含まれる行を抽出 (IN)

... WHERE IN (SELECT ...)

含まれない行の場合は NOT IN

相関副問合せ (EXISTS)

存在する場合は真

... WHERE EXISTS (SELECT ...)

データベースの活用

データウェアハウス

企業の様々な活動を介して得られた大量のデータを整理・統合して蓄積しておき,意思決定支援などに利用するもの。

(基本情報技術者試験平成 22 年春期午前問 33)

データマイニング

企業が保有する顧客や市場などの膨大なデータから,有用な情報や関係を見つけ出す手法

(基本情報技術者試験平成 19 年秋期午前問 38)
(基本情報技術者試験平成 24 年春期午前問 64)
(基本情報技術者試験平成 29 年春期午前問 29)

ビッグデータ

  • SNS、動画、画像、音声などの多種多様なデータ
  • 膨大なデータ容量
  • リアルタイムで収集されるデータ

(基本情報技術者試験平成 29 年春期午前問 63)

オープンデータ

原則無償で自由に二次利用可能な官民データ