跳至主要內容

0.248 (16) 轉換成十進位分數的簡單解法 (基本資訊技術人員考試)

· 1 分鐘閱讀

「16 進位的小數 0.248 轉換成十進位的分數是什麼?」的問題,我將簡單介紹解法。

重點

16 進位的問題使用 2 進位

步驟

  1. 將 16 進位轉換成 2 進位
    0.248(16) = 0.0010 0100 1000(2)

  2. 去掉小數點
    0.0010 0100 1000(2) = 0.0010 0100 1000(2) × 0010 0000 0000(2) / 0010 0000 0000(2) = 0100 1001(2) / 0010 0000 0000(2)

  3. 將 2 進位轉換成 10 進位
    0100 1001(2) / 0010 0000 0000(2) = (64 + 8 + 1) / 512
    = 73 / 512

Matplotlib (Pyplot) 常用程式碼範例

· 7 分鐘閱讀

這裡介紹一些常用的程式碼和圖表範例。

目次

建立圖表

首先載入所需的函式庫。

import matplotlib.pyplot as plt
import numpy as np

單一圖表

fig, ax = plt.subplots()

2 x 3 的圖表

fig, axs = plt.subplots(2, 3)

繪製圖表

繪製拋物線

x = np.linspace(-1, 1, 201)
y = x ** 2

fig, ax = plt.subplots()
ax.plot(x, y)

用點繪製拋物線

fig, ax = plt.subplots()

x = np.linspace(-1, 1, 21)
y = x ** 2

ax.plot(x, y, 'o')

顏色設為橘色

fig, ax = plt.subplots()

x = np.linspace(-1, 1, 21)
y = x ** 2

ax.plot(x, y, color="tab:orange")

標準顏色如下:

顏色字串
tab:blue
tab:orange
tab:green
tab:red
tab:purple
tab:brown
粉紅tab:pink
tab:gray
橄欖tab:olive
tab:cyan

設定線的粗細為 4

fig, ax = plt.subplots()

x = np.linspace(-1, 1, 21)
y = x ** 2

ax.plot(x, y, lw=4)

設定標題

將標題設為 Title

fig, ax = plt.subplots()
ax.set_title("Title")

設定軸標籤

設定 x 軸標籤

將 x 軸標籤設為 Time (s)

fig, ax = plt.subplots()
ax.set_xlabel("Time (s)")

設定 y 軸標籤

將 y 軸標籤設為 Distance (m)

fig, ax = plt.subplots()
ax.set_ylabel("Distance (m)")

設定圖表的上限與下限

將上限設為 100

fig, ax = plt.subplots()
ax.set_ylim(top=100)

將下限設為 -100

fig, ax = plt.subplots()
ax.set_ylim(bottom=-100)

將上限設為 100,下限設為 -100

fig, ax = plt.subplots()
ax.set_ylim([-100, 100])

設定圖表的左邊與右邊

將左邊設為 -100

fig, ax = plt.subplots()
ax.set_xlim(left=-100)

將右邊設為 100

fig, ax = plt.subplots()
ax.set_xlim(right=100)

將左邊設為 -100,右邊設為 100

fig, ax = plt.subplots()
ax.set_xlim([-100, 100])

顯示網格

fig, ax = plt.subplots()
ax.grid()

僅顯示垂直網格

fig, ax = plt.subplots()
ax.grid(axis="x")

僅顯示水平網格

fig, ax = plt.subplots()
ax.grid(axis="y")

設定刻度

設定 x 軸刻度

fig, ax = plt.subplots()
xticks = range(6)
ax.set_xticks(xticks)

設定 x 軸刻度和刻度標籤

fig, ax = plt.subplots()
xticks = range(6)
ax.set_xticks(xticks, [f"{xtick}m" for xtick in xticks])

設定 y 軸刻度

fig, ax = plt.subplots()
yticks = [i * 20 for i in range(6)]
ax.set_yticks(yticks)

設定 y 軸刻度和刻度標籤

fig, ax = plt.subplots()
yticks = [i * 20 for i in range(6)]
ax.set_yticks(yticks, [f"{ytick}%" for ytick in yticks])

刪除刻度

刪除 x 軸刻度

fig, ax = plt.subplots()
ax.tick_params(bottom=False)

刪除 x 軸刻度標籤

fig, ax = plt.subplots()
ax.tick_params(labelbottom=False)

刪除 y 軸刻度

fig, ax = plt.subplots()
ax.tick_params(left=False)

刪除 y 軸刻度標籤

fig, ax = plt.subplots()
ax.tick_params(labelleft=False)

設定刻度顏色

將 x 軸刻度顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="x", color="tab:red")

將 x 軸刻度標籤顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="x", labelcolor="tab:red")

將 y 軸刻度顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="y", color="tab:red")

將 y 軸刻度標籤顏色設為紅色

fig, ax = plt.subplots()
ax.tick_params(axis="y", labelcolor="tab:red")

調整圖表間距

將縱向間距設為 0.2,橫向間距設為 0.3

fig, ax = plt.subplots(3, 3)
fig.subplots_adjust(hspace=0.2, wspace=0.3)

自動設定間距

fig, ax = plt.subplots(3, 3)
fig.tight_layout()

儲存圖片

以 PNG 格式儲存

fig, ax = plt.subplots()
plt.savefig("graph.png")

以 SVG 格式儲存

fig, ax = plt.subplots()
plt.savefig("svg.png")

以 PDF 格式儲存

fig, ax = plt.subplots()
plt.savefig("svg.pdf")

graph.pdf

以 300 dpi 儲存

fig, ax = plt.subplots()
plt.savefig("graph300.png", dpi=300)

.NET CLI 備忘錄

· 3 分鐘閱讀

這篇備忘錄記錄了 .NET CLI (命令行界面)。

資訊

.NET CLI 是一個跨平台的工具集,用於開發、構建、運行、發布和管理 .NET 項目。它提供了一組命令行命令,讓你可以在任何支持 .NET 的操作系統(Windows, Linux, macOS)上高效地工作,無需依賴 IDE。

1. 基本命令

A. 建立新專案

dotnet new 命令用於建立新專案、配置文件或解決方案。

dotnet new console -o MyConsoleApp   # 建立一個新的控制台應用程式
dotnet new webapi -o MyWebApi # 建立一個新的 ASP.NET Core Web API 專案
dotnet new sln -n MySolution # 建立一個新的解決方案文件
  • -o:指定輸出目錄(專案名稱)。
  • -n:指定解決方案名稱。

B. 還原依賴

dotnet restore 命令還原專案的依賴項和工具。

dotnet restore

通常,dotnet builddotnet rundotnet publish 命令會隱式執行還原操作。

C. 構建專案

dotnet build 命令編譯專案及其依賴項。

dotnet build
dotnet build --configuration Release # 以 Release 配置構建

D. 運行專案

dotnet run 命令在開發環境中運行專案。它會自動構建專案,然後運行可執行文件。

dotnet run

E. 測試專案

dotnet test 命令運行專案中的單元測試。

dotnet test

F. 發布專案

dotnet publish 命令將應用程式及其依賴項打包為部署單元。

dotnet publish -c Release -o ./publish # 以 Release 配置發布到 'publish' 目錄
  • -c Release:指定 Release 配置。
  • -o ./publish:指定輸出目錄。

2. 專案管理

A. 添加專案到解決方案

dotnet sln add MyConsoleApp/MyConsoleApp.csproj

B. 添加參考 (Reference)

將一個專案參考添加到另一個專案:

cd MyWebApi
dotnet add reference ../MyConsoleApp/MyConsoleApp.csproj

C. 添加套件 (Package)

添加 NuGet 套件到專案:

dotnet add package Newtonsoft.Json

D. 移除套件

移除 NuGet 套件:

dotnet remove package Newtonsoft.Json

3. 工具命令

A. 管理全局工具

dotnet tool 命令用於安裝、列出、更新或卸載 .NET 全局工具。

dotnet tool install --global dotnet-ef # 安裝 Entity Framework Core CLI 工具
dotnet tool list --global # 列出所有全局工具
dotnet tool update --global dotnet-ef # 更新工具
dotnet tool uninstall --global dotnet-ef # 卸載工具

4. 其他常用命令

A. 清理專案

dotnet clean 命令清理專案的輸出文件。

dotnet clean

B. 查看信息

dotnet --info 顯示有關 .NET SDK 和運行時環境的詳細信息。

dotnet --info

C. 查看幫助

幾乎所有 dotnet 命令都支持 --help 選項。

dotnet new --help
dotnet build --help

總結

.NET CLI 是一個功能強大且必不可少的工具,它為 .NET 開發者提供了一個高效、跨平台的工作流。無論是從頭開始創建專案、管理依賴、構建、測試還是發布,熟練掌握 .NET CLI 命令都能極大地提高你的開發效率。

Linux NetworkManager 備忘錄

· 4 分鐘閱讀

這篇備忘錄記錄了 Linux 上的 NetworkManager。

資訊

NetworkManager 是一個動態網絡配置和管理守護程式,主要用於 Linux 系統。它旨在簡化網絡配置過程,特別是對於那些經常在不同網絡環境之間切換的筆記本電腦用戶,或需要圖形界面管理網絡連接的桌面用戶。

NetworkManager 會監測網絡設備的狀態,並自動配置它們,包括有線、無線、移動寬帶等連接。

1. NetworkManager 的核心組件

  • NetworkManager 守護程式:主要的後台服務,負責管理網絡連接。
  • nmcli (NetworkManager Command Line Interface):命令行工具,用於配置和顯示 NetworkManager 的狀態。
  • nmtui (NetworkManager Text User Interface):基於文本的用戶界面工具,提供一個互動式的菜單來管理連接。
  • 圖形化前端:如 GNOME Shell 的網絡設置、KDE Plasma 的網絡管理小程式等。

2. nmcli 基本用法

nmcli 是與 NetworkManager 交互最常用的命令行工具。

A. 顯示網絡設備狀態

nmcli device status

輸出會列出所有網絡設備及其狀態(例如 ethernet wifi connected disconnected)。

B. 顯示連接信息

nmcli connection show

這會列出所有已配置的網絡連接。

C. 啟用/禁用網絡設備

nmcli device disconnect eth0   # 斷開 eth0
nmcli device connect eth0 # 連接 eth0
nmcli radio wifi off # 禁用 Wi-Fi
nmcli radio wifi on # 啟用 Wi-Fi

D. 創建新連接

創建有線連接

nmcli connection add type ethernet con-name "MyWiredConnection" ifname eth0 ip4 192.168.1.100/24 gw4 192.168.1.1 dns "8.1.1.1 8.8.4.4"
nmcli connection up "MyWiredConnection"
  • con-name:連接名稱。
  • ifname:接口名稱 (例如 eth0)。
  • ip4:IPv4 地址和子網掩碼。
  • gw4:IPv4 網關。
  • dns:DNS 服務器。

創建 Wi-Fi 連接

nmcli device wifi rescan                          # 掃描 Wi-Fi 網絡
nmcli device wifi list # 列出可用 Wi-Fi 網絡

nmcli connection add type wifi con-name "MyWiFi" ifname wlan0 ssid "Your_SSID"
wifi-sec.key-mgmt wpa-psk wifi-sec.psk "Your_WiFi_Password"
nmcli connection up "MyWiFi"
  • ssid:Wi-Fi 網絡名稱。
  • wifi-sec.key-mgmt wpa-psk:指定 WPA-PSK 密碼管理。
  • wifi-sec.psk:Wi-Fi 密碼。

E. 修改現有連接

nmcli connection modify "MyWiredConnection" ipv4.addresses 192.168.1.101/24
nmcli connection modify "MyWiredConnection" ipv4.gateway 192.168.1.2
nmcli connection modify "MyWiredConnection" ipv4.dns "8.8.8.8 8.8.4.4"
nmcli connection modify "MyWiredConnection" ipv4.method manual # 靜態 IP
nmcli connection modify "MyWiredConnection" ipv4.method auto # DHCP
nmcli connection up "MyWiredConnection" # 應用更改

F. 刪除連接

nmcli connection delete "MyWiredConnection"

3. nmtui 用法

nmtui 是一個基於文本的互動式工具,對於不習慣 nmcli 複雜語法的用戶來說非常方便。

sudo nmtui

它會打開一個菜單,允許你:

  • 編輯連接
  • 激活連接
  • 設置主機名

4. NetworkManager 和 systemd-networkd / netplan

在現代 Linux 發行版中,網絡配置有多種方法。

  • NetworkManager:主要針對桌面和筆記本用戶,提供豐富的自動配置和圖形界面。
  • systemd-networkd:Systemd 的網絡配置服務,更輕量,常用於伺服器環境。
  • Netplan (Ubuntu 專用):一個抽象層,用於統一管理網絡配置,底層可以是 NetworkManager 或 systemd-networkd

通常,在桌面 Ubuntu 系統中,NetworkManager 是預設的網絡管理工具。

5. 常見問題和故障排除

  • 連接失敗:檢查日誌 (journalctl -u NetworkManager) 以獲取錯誤信息。
  • 沒有網絡連接:確保 NetworkManager 服務正在運行 (sudo systemctl status NetworkManager)。
  • DNS 問題:檢查 /etc/resolv.conf 文件,它通常由 NetworkManager 管理。

總結

NetworkManager 是 Linux 系統中一個功能強大且靈活的網絡管理工具。無論是通過 nmcli 進行命令行配置,還是通過 nmtui 進行互動式配置,它都極大地簡化了網絡連接的管理,對於從普通用戶到系統管理員來說都是一個寶貴的工具。

Linux 上的日語環境設置

· 3 分鐘閱讀

這篇備忘錄記錄了在 Linux 上設置日語環境的方法。

資訊

在 Linux 系統中設置日語環境(包括語言、輸入法和字體)對於需要處理日語文本或開發日語應用程式的用戶來說至關重要。這確保了系統能夠正確顯示日語字符,並允許用戶使用日語輸入法。

1. 設置區域設置 (Locale)

區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。

A. 查看當前區域設置

locale

B. 生成日語區域設置

如果你的系統中沒有日語區域設置,你需要生成它。

  1. 編輯 locale.gen

    sudo vim /etc/locale.gen

    查找並取消註釋(刪除前面的 #)以下行:

    ja_JP.UTF-8 UTF-8

    保存並退出。

  2. 生成區域設置

    sudo locale-gen

C. 設置系統區域設置

你可以將系統的默認區域設置設置為日語。

sudo update-locale LANG=ja_JP.UTF-8

或者,對於基於 Systemd 的系統:

sudo localectl set-locale LANG=ja_JP.UTF-8

重啟系統或重新登錄以應用更改。

2. 安裝日語輸入法

最流行的日語輸入法是 Fcitx 和 Mozc。

A. 安裝 Fcitx 和 Mozc

  1. 安裝 Fcitx 輸入法框架

    sudo apt install fcitx fcitx-mozc fcitx-ui-classic fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5

    (對於基於 Debian/Ubuntu 的系統)

  2. 配置 Fcitx

    • 打開「設定」 -> 「地區和語言」(或類似名稱)。
    • 在「輸入來源」中,將 Fcitx 添加為輸入法系統。
    • 重啟系統。
  3. 啟用 Mozc

    • 重新登錄後,啟動 Fcitx 配置工具 (在應用程式菜單中搜索「Fcitx Configuration」)。
    • 在「Input Method」選項卡中,點擊左下角的「+」按鈕。
    • 取消勾選「Only Show Current Language」,然後搜索「Mozc」並添加它。
    • 將 Mozc 移動到列表的頂部或你偏好的位置。
  4. 切換輸入法: 通常默認的輸入法切換快捷鍵是 Ctrl + SpaceShift + Space

B. 安裝 IBus 和 Anthy/Mozc (另一種選擇)

IBus 是另一個流行的輸入法框架。

  1. 安裝 IBus 和 Mozc/Anthy

    sudo apt install ibus ibus-mozc # 或 ibus-anthy
  2. 配置 IBus

    • 打開「設定」 -> 「地區和語言」。
    • 在「輸入來源」中,添加「日語 (Mozc)」或「日語 (Anthy)」。
    • 重啟系統。

3. 安裝日語字體

為了正確顯示日語字符,你需要安裝日語字體。

A. 安裝常見的日語字體

sudo apt install fonts-noto-cjk fonts-ipafont fonts-japanese-gothic fonts-japanese-mincho
  • fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。
  • fonts-ipafont:IPA 明朝/哥特體字體。

B. 配置字體 (可選)

在 GNOME 環境中,你可以通過「設定」->「外觀」->「字體」來更改系統默認字體。或者使用 GNOME Tweaks 工具進行更細緻的調整。

4. 終端中的日語支持

A. 檢查終端編碼

大多數現代終端模擬器都支持 UTF-8 編碼,這對於顯示日語字符是必要的。

echo $LANG

確保輸出包含 UTF-8

B. 安裝日語 man page (可選)

如果你想查看日語版本的 man 手冊頁:

sudo apt install manpages-ja

5. 總結

在 Linux 上設置日語環境需要配置區域設置、安裝輸入法和字體。通過 Fcitx + Mozc 或 IBus + Mozc 的組合,你可以獲得一個功能齊全的日語輸入環境。安裝 Noto CJK 或 IPA 字體將確保日語字符的正確顯示。

Raspberry Pi 上的日語環境設置

· 3 分鐘閱讀

這篇備忘錄記錄了在 Raspberry Pi 上設置日語環境的方法。

資訊

在 Raspberry Pi OS (基於 Debian) 上設置日語環境,與在其他 Debian/Ubuntu 系統上的過程類似,但需要注意資源限制和 Raspberry Pi 特有的配置。正確配置後,你可以顯示和輸入日語。

1. 設置區域設置 (Locale)

區域設置決定了系統使用的語言、日期時間格式、貨幣符號等。

A. 打開 Raspberry Pi 配置工具

這是設置區域設置最簡單的方法。

  1. 在終端中運行:
    sudo raspi-config
  2. 導航到 5 Localisation Options (本地化選項)。
  3. 選擇 L1 Locale
  4. 在列表中找到 ja_JP.UTF-8 UTF-8,按下空白鍵選中它。確保 en_GB.UTF-8en_US.UTF-8 也被選中。
  5. 在下一個屏幕中,選擇 ja_JP.UTF-8 作為系統的默認區域設置。
  6. 選擇 L2 Timezone,並將時區設置為 Asia/Tokyo
  7. 完成後,重啟 Raspberry Pi。

B. 手動配置 (如果 raspi-config 無法使用)

如果出於某種原因無法使用 raspi-config,你可以手動配置。

  1. 編輯 locale.gen

    sudo vim /etc/locale.gen

    查找並取消註釋(刪除前面的 #)以下行:

    ja_JP.UTF-8 UTF-8

    保存並退出。

  2. 生成區域設置

    sudo locale-gen
  3. 設置系統區域設置

    sudo update-locale LANG=ja_JP.UTF-8

    重啟 Raspberry Pi。

2. 安裝日語字體

為了正確顯示日語字符,你需要安裝日語字體。

sudo apt update
sudo apt install fonts-noto-cjk fonts-ipafont fonts-ipaexfont
  • fonts-noto-cjk:Google 的 Noto CJK 字體,支持中文、日文、韓文,推薦。
  • fonts-ipafont:IPA 明朝/哥特體字體。
  • fonts-ipaexfont:IPAEX 明朝/哥特體字體。

安裝後,可以通過 Raspberry Pi OS 的桌面環境中的「設定」->「外觀」或「字體」來檢查和配置。

3. 安裝日語輸入法 (Fcitx + Mozc)

Fcitx 和 Mozc 是在 Linux 環境中最常用且效果最好的日語輸入法組合。

  1. 安裝 Fcitx 和 Mozc

    sudo apt install fcitx fcitx-mozc
  2. 設置 Fcitx 為默認輸入法框架

    im-config

    在彈出的界面中,選擇 fcitx 作為默認輸入法。

  3. 配置 Fcitx

    • 重啟 Raspberry Pi。
    • 登錄後,打開 Fcitx 配置工具 (在應用程式菜單中搜索「Fcitx Configuration」或運行 fcitx-configtool)。
    • 在「Input Method」選項卡中,點擊左下角的「+」按鈕。
    • 取消勾選「Only Show Current Language」,然後搜索「Mozc」並添加它。
    • 將 Mozc 移動到列表的頂部或你偏好的位置。
  4. 切換輸入法: 通常默認的輸入法切換快捷鍵是 Ctrl + SpaceShift + Space。你可以在 Fcitx 配置工具中修改它。

4. 終端中的日語支持

確保你的終端模擬器(如 LXTerminal)使用支持 UTF-8 的字體,並且其編碼設置為 UTF-8。通常,在 Raspberry Pi OS 上,這些都是默認配置。

5. 總結

在 Raspberry Pi 上設置日語環境是一個相對簡單的過程,主要通過 raspi-config 工具來完成區域設置,然後安裝必要的字體和輸入法(Fcitx + Mozc)。完成這些步驟後,你的 Raspberry Pi 將能夠正確顯示和處理日語文本。

pyenv 安裝

· 3 分鐘閱讀

這篇備忘錄記錄了 pyenv 的安裝。

資訊

pyenv 是一個命令行工具,用於管理多個 Python 版本。它允許你在同一台機器上輕鬆地安裝、切換和管理不同的 Python 環境,而不會相互衝突。

這對於需要使用不同 Python 版本進行開發的項目(例如,一個項目需要 Python 3.8,另一個需要 Python 3.10)非常有用。

1. 安裝 pyenv

安裝 pyenv 的方法因操作系統而異。

A. macOS (使用 Homebrew) - 推薦

在 macOS 上,使用 Homebrew 安裝 pyenv 是最簡單的方法。

brew update
brew install pyenv

B. Linux (使用 pyenv-installer 腳本) - 推薦

對於 Linux 系統,可以使用 pyenv-installer 腳本來自動化安裝 pyenv 及其常用的插件。

curl https://pyenv.run | bash

C. Windows (使用 pyenv-win)

對於 Windows 用戶,官方推薦使用 pyenv-win,它是 pyenv 的一個 Windows 版本。

# 通過 PowerShell 安裝
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" | Invoke-Expression

# 或者通過 pip 安裝 (需要先有 Python 環境)
pip install pyenv-win --target %USERPROFILE%\.pyenv

請參考 pyenv-win 的 GitHub 儲存庫獲取最新安裝說明:https://github.com/pyenv-win/pyenv-win

2. 配置 Shell 環境

安裝 pyenv 後,你需要將其添加到你的 Shell 環境中。這會讓 pyenv 命令在你的終端中可用。

A. Bash

將以下內容添加到你的 ~/.bashrc (或 ~/.bash_profile) 文件中:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)" # 確保 shell 能夠加載 pyenv
eval "$(pyenv virtualenv-init -)" # 如果你計劃使用虛擬環境

完成後,重新載入你的 shell 配置:

source ~/.bashrc

B. Zsh

將以下內容添加到你的 ~/.zshrc 文件中:

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

完成後,重新載入你的 shell 配置:

source ~/.zshrc

C. 驗證安裝

打開一個新的終端會話,然後運行:

pyenv --version

如果成功,它會顯示 pyenv 的版本號。

3. 安裝 Python 版本

現在你可以使用 pyenv install 命令來安裝你需要的 Python 版本。

查看可用的 Python 版本

pyenv install --list

這會列出所有可安裝的 Python 版本,包括 CPython、Jython、Anaconda 等。

安裝特定版本

pyenv install 3.9.10 # 安裝 Python 3.9.10
pyenv install 3.10.6 # 安裝 Python 3.10.6

安裝可能需要一些時間,因為它會下載源碼並編譯 Python。

4. 使用 Python 版本

全局設置 Python 版本

設置全局 Python 版本:

pyenv global 3.10.6

這會將 3.10.6 設置為你所有 shell 會話的默認 Python 版本。

局部設置 Python 版本 (專案目錄)

在專案目錄中,你可以設置一個局部 Python 版本。

cd my_project
pyenv local 3.9.10

這會在當前目錄中創建一個 .python-version 文件。當你進入這個目錄時,pyenv 會自動切換到指定的 Python 版本。

查看當前使用的 Python 版本

pyenv versions

當前使用的版本會被標記一個星號 *

* 3.10.6 (set by /home/user/.pyenv/version)
3.9.10

5. 總結

pyenv 是一個非常實用且強大的工具,用於管理 Python 版本。它提供了一種簡潔而可靠的方式來應對多個 Python 環境的需求,避免了版本衝突,讓你的開發工作流更加順暢。正確安裝和配置 pyenv 是任何嚴肅 Python 開發者的基本技能。

如何為 Ubuntu 安裝 .NET

· 3 分鐘閱讀

這篇備忘錄記錄了如何為 Ubuntu 安裝 .NET。

資訊

.NET 是一個免費、開源的開發平台,用於構建各種應用程式,包括 Web、移動、桌面、遊戲和物聯網。在 Ubuntu 上安裝 .NET 可以讓你開發和運行 .NET 應用程式。

1. 預覽 .NET 版本

在安裝之前,建議查看可用的 .NET SDK 和運行時版本,以選擇你需要的版本。

訪問官方 .NET 下載頁面:https://dotnet.microsoft.com/download/dotnet

通常你會看到 LTS (長期支持) 版本和 Current (當前) 版本。對於生產環境,通常建議使用 LTS 版本。

2. 安裝 .NET SDK (推薦)

安裝 SDK 會同時包含運行時 (Runtime),這對於開發和運行應用程式都是必要的。

A. 註冊 Microsoft 套件儲存庫

Microsoft 提供了一個套件儲存庫,以便你可以使用 apt 包管理器輕鬆安裝 .NET。

  1. 安裝必要工具

    sudo apt update
    sudo apt install -y apt-transport-https ca-certificates curl
  2. 下載並註冊 Microsoft 簽名密鑰

    curl -fSsL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null
  3. 添加 Microsoft 套件儲存庫: 根據你的 Ubuntu 版本,選擇對應的命令。 例如,對於 Ubuntu 22.04 (Jammy Jellyfish):

    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] https://packages.microsoft.com/ubuntu/22.04/prod $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/dotnet.list

    22.04 替換為你的 Ubuntu 版本號。$(lsb_release -cs) 會自動獲取你的 Ubuntu 代號。

B. 安裝 .NET SDK

  1. 更新套件列表

    sudo apt update
  2. 安裝 SDK: 安裝最新 LTS 版本的 .NET SDK。

    sudo apt install -y dotnet-sdk-8.0 # 安裝 .NET 8 SDK

    如果你想安裝特定版本,例如 .NET 6 SDK,可以使用 dotnet-sdk-6.0

C. 驗證安裝

dotnet --version

這應該會顯示已安裝的 .NET SDK 版本。

3. 安裝 .NET Runtime (如果只需運行應用程式)

如果你只打算運行使用 .NET 開發的應用程式,而不需要開發,可以只安裝運行時。

A. 安裝 ASP.NET Core Runtime

sudo apt install -y aspnetcore-runtime-8.0 # 安裝 .NET 8 ASP.NET Core Runtime

B. 安裝 .NET Runtime (標準版)

sudo apt install -y dotnet-runtime-8.0 # 安裝 .NET 8 Runtime

4. 其他安裝方法

A. 手動安裝

你可以從 .NET 官方網站下載二進制發行版並手動解壓縮到你喜歡的位置。

  1. 下載:從 dotnet.microsoft.com/download 下載 Linux x64 二進制文件。
  2. 解壓縮:將下載的文件解壓縮到一個目錄,例如 ~/dotnet
  3. 設置環境變量:將 ~/dotnet 添加到 PATH
    export DOTNET_ROOT=$HOME/dotnet
    export PATH=$PATH:$HOME/dotnet
    將這些行添加到 ~/.bashrc~/.zshrc 以便永久生效。

B. 使用 Snap (不推薦,可能不是最新版)

對於某些 Ubuntu 版本,你可以使用 Snap 安裝 .NET,但通常不推薦,因為 Snap 提供的版本可能不是最新的,或者與 apt 儲存庫的版本存在兼容性問題。

sudo snap install dotnet-sdk --classic --channel=8.0/stable # 安裝 .NET 8 SDK

5. 總結

在 Ubuntu 上安裝 .NET 最推薦的方法是通過 Microsoft 的 apt 套件儲存庫。這確保了你可以方便地獲取最新更新和安全補丁。無論你是開發者還是應用程式用戶,正確安裝 .NET 都能讓你充分利用這個強大的平台。

SSH Local Forward 備忘錄

· 4 分鐘閱讀

這篇備忘錄記錄了 SSH Local Forward。

資訊

SSH Local Forward (本地端口轉發) 是一種 SSH 隧道技術,它允許你將本地機器上的一個端口的流量,通過 SSH 連接轉發到遠端 SSH 伺服器可訪問的另一個目標主機和端口。

這通常用於訪問防火牆後面的服務,或者在本地開發環境中模擬對遠端服務的訪問。

1. SSH Local Forward 的原理

當你設置一個本地端口轉發時:

  1. SSH 客戶端(你的本地機器)會在本地監聽一個指定的端口。
  2. 當有流量發送到這個本地端口時,SSH 客戶端會將這些流量通過已建立的 SSH 加密連接發送到遠端 SSH 伺服器。
  3. 遠端 SSH 伺服器接收到這些流量後,會將它們轉發到指定的目標主機和端口。
  4. 目標主機處理請求並將響應發回遠端 SSH 伺服器。
  5. 遠端 SSH 伺服器將響應通過 SSH 連接傳回本地 SSH 客戶端。
  6. 本地 SSH 客戶端將響應發送回最初發起請求的本地應用程式。

流程簡圖:

本地應用 (localhost:LPORT) <---SSH隧道---> 本地SSH客戶端 ---加密通道---> 遠端SSH伺服器 ---非加密通道---> 目標主機:TPORT

2. 語法

ssh -L [本地端口]:[目標主機]:[目標端口] [SSH用戶]@[SSH伺服器]
  • -L:指定本地端口轉發。
  • [本地端口]:你本地機器上將要監聽的端口號。任何發送到 localhost:[本地端口] 的流量都將被轉發。
  • [目標主機]:遠端 SSH 伺服器能夠訪問的目標主機的 IP 地址或域名。
  • [目標端口]:目標主機上服務的端口號。
  • [SSH用戶]:用於登錄遠端 SSH 伺服器的用戶名。
  • [SSH伺服器]:遠端 SSH 伺服器的 IP 地址或域名。

3. 範例

範例 1:訪問防火牆後的遠端 Web 服務

假設:

  • 你的本地機器無法直接訪問 remote-web-server.com 的 80 端口。
  • 你有一台可以訪問 remote-web-server.com 的 SSH 伺服器 (ssh.example.com)。
  • 你希望通過本地的 localhost:8080 訪問 remote-web-server.com 的 Web 服務。

命令:

ssh -L 8080:remote-web-server.com:80 [email protected]

執行此命令後,當你在本地瀏覽器中訪問 http://localhost:8080 時,你的請求會通過 ssh.example.com 轉發到 remote-web-server.com 的 80 端口。

範例 2:安全地訪問遠端資料庫

假設:

  • 你本地機器無法直接訪問遠端資料庫伺服器 db.example.com 的 5432 端口 (PostgreSQL)。
  • 你有一台可以訪問該資料庫伺服器的 SSH 伺服器 (ssh.example.com)。
  • 你希望通過本地的 localhost:54320 連接到遠端資料庫。

命令:

ssh -L 54320:db.example.com:5432 [email protected]

執行此命令後,你可以配置你的本地資料庫客戶端(如 psql 或 DBeaver)連接到 localhost:54320,你的連接將安全地通過 SSH 隧道轉發到遠端資料庫。

範例 3:在後台運行隧道

如果你希望 SSH 隧道在後台運行,並且不執行遠端命令,可以使用 -N (不執行遠端命令) 和 -f (在後台運行) 選項。

ssh -fN -L 8080:remote-web-server.com:80 [email protected]

要停止這個後台運行的隧道,你需要找到 SSH 進程並終止它。

範例 4:訪問 SSH 伺服器本身的服務

如果你想訪問 SSH 伺服器上運行的服務,[目標主機] 可以是 localhost127.0.0.1

ssh -L 8000:localhost:8000 [email protected]

這將允許你通過本地的 localhost:8000 訪問 ssh.example.com 上運行的 8000 端口服務。

4. 安全注意事項

  • 身份驗證:確保你的 SSH 連接是安全的,最好使用公鑰認證而不是密碼。
  • 本地端口選擇:選擇一個未被佔用且高於 1024 的端口作為本地端口(非特權用戶無法綁定 1024 以下的端口)。
  • 目標主機可訪問性[目標主機] 必須是遠端 SSH 伺服器能夠訪問的主機。

總結

SSH Local Forward 是一個非常強大且常用的功能,它提供了一種安全、靈活的方式來訪問網絡受限的遠端服務。無論是繞過防火牆、訪問內部網絡服務還是本地開發,了解並熟練使用本地端口轉發都能極大地提高你的工作效率和安全性。