メインコンテンツまでスキップ

「Linux」タグの記事が15件件あります

全てのタグを見る

WSL2 に Rocky Linux 8.10 をインストールする

· 約2分
ひかり
Main bloger

WSL 2 イメージのダウンロード

https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz

ここからダウンロードする。

参考: https://docs.rockylinux.org/8/guides/interoperability/import_rocky_to_wsl/

イメージを展開

tar.xz を展開し、tar 形式にする。 tar にすることで、WSL2 へのインポートが可能となる。

cd ~/Downloads

xz -d Rocky-8-Container-Base.latest.x86_64.tar.xz

※Windows にインストール済みの bsdtar では展開不可。 ※xz コマンドがない場合は、cygwin64 でインストールするか、別の WSL ディストリビューションを用いて展開する。

イメージのインポート

WSL2 にイメージをインポートする。

wsl --import RockyLinux-8.10 $HOME .\Rocky-8-Container-Base.latest.x86_64.tar --version 2

イメージの確認

wsl -l -v

ユーザーの追加とデフォルトユーザーの設定

ユーザー名: hikari の場合

wsl -d RockyLinux-8.10 -u root -- dnf install sudo passwd -y

wsl -d RockyLinux-8.10 -u root -- adduser hikari

wsl -d RockyLinux-8.10 -u root -- passwd -d hikari

wsl -d RockyLinux-8.10 -u root -- usermod -aG wheel hikari

wsl -d RockyLinux-8.10 -u root -- sed -i 's/^# %wheel/%wheel/' /etc/sudoers

wsl -d RockyLinux-8.10 -u root -- echo -e "[user]\\ndefault=hikari" `| tee -a /etc/wsl.conf

イメージの起動

wsl -d RockyLinux-8.10

AlmaLinux 10 (Raspberry Pi 5 / GNOME / aarch64) に Mozc をインストールする方法

· 約1分
ひかり
Main bloger

rpm ファイルをダウンロード

  • mozc
  • mozc-gui-tools
  • ibus-mozc

を検索し、rpmfind.net から検索してダウンロードする。

アーキテクチャが正しいかを確かめる。

  • Raspberry Pi 5 の場合は、aarch64
  • 一般的な PC の場合は、x86_64

rpm ファイルの例

  • mozc-2.31.5810.102-160000.1.2.aarch64.rpm
  • mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm
  • ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm

インストール

ダウンロードした rpm ファイルを指定し、dnf コマンドでインストールする。

cd ~/Downloads
sudo dnf install ./mozc-2.31.5810.102-160000.1.2.aarch64.rpm ./mozc-gui-tools-2.31.5810.102-160000.1.2.aarch64.rpm ./ibus-mozc-2.31.5810.102-160000.1.2.aarch64.rpm

ログアウト

一旦ログアウトする。

設定

「設定」→「キーボード」を開き、

  • Japanese (Mozc)
  • Japanese

の順に登録。

設定完了!

Rocky Linux 8.10 を WSL にインストールする

· 約2分
ひかり
Main bloger

Rocky Linux 8.10 のイメージをダウンロードする

$dest = Join-Path $env:TEMP "Rocky-8-Container-Base.latest.x86_64.tar.xz"
Invoke-WebRequest -Uri "https://dl.rockylinux.org/pub/rocky/8/images/x86_64/Rocky-8-Container-Base.latest.x86_64.tar.xz" -OutFile $dest

インポート

wsl --import RockyLinux-8.10 $HOME $dest

passwd のインストール

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y passwd

ユーザーの作成

$username = "hikari" # 好きなユーザー名を設定
wsl -d RockyLinux-8.10 -u root useradd -mG wheel $username
wsl -d RockyLinux-8.10 -u root passwd -d $username # ユーザーのパスワードを消去

sudo のインストール

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install sudo -y

デフォルトユーザーの設定

$username = "hikari" # 好きなユーザー名を設定
$uid = wsl -d RockyLinux-8.10 id $username -u
if (-not $uid) {
Write-Error "UID の取得に失敗しました。ユーザー '$username' が存在しない可能性があります。"
exit 1
}

$basePath = "HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss"

$targetKey = Get-ChildItem $basePath | Where-Object {
(Get-ItemProperty $_.PSPath).DistributionName -eq "RockyLinux-8.10"
}
if (-not $targetKey) {
Write-Error "DistributionName 'RockyLinux-8.10' が見つかりませんでした。"
exit 1
}

Set-ItemProperty -Path $targetKey.PSPath -Name "DefaultUid" -Value ([int]$uid)

EPEL の有効化

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install -y epel-release

起動

wsl -d RockyLinux-8.10

デフォルトのディストリビューションにする場合

wsl --set-default RockyLinux-8.10

FastFetch のインストール

wsl -d RockyLinux-8.10 -u root dnf update -y `&`& dnf install fastfetch

FastFetch の実行

> wsl -d RockyLinux-8.10 -u root fastfetch
__wgliliiligw_, root@DESKTOP-MS-7C56-B550
_williiiiiiliilililw, -------------------------
_%iiiiiilililiiiiiiiiiii_ OS: Rocky Linux 8.10 x86_64
.Qliiiililiiiiiiililililiilm. Host: Windows Subsystem for Linux (2.0.14.0)
_iiiiiliiiiiililiiiiiiiiiiliil, Kernel: 5.15.133.1-microsoft-standard-WSL2
.lililiiilililiiiilililililiiiii, Uptime: 8 mins
_liiiiiiliiiiiiiliiiiiF{iiiiiilili, Packages: 285 (rpm)
jliililiiilililiiili@` ~ililiiiiiL Shell: bash 4.4.20
iiiliiiiliiiiiiili>` ~liililii Display 1: 1920x1080 @ 60Hz
liliiiliiilililii` -9liiiil Display 2: 1920x1080 @ 60Hz
iiiiiliiliiiiii~ "4lili WM: WSLg (Wayland)
4ililiiiiilil~| -w, )4lf Terminal: Windows Terminal
-liiiiililiF' _liig, )' CPU: AMD Ryzen 9 3900X (24) @ 3.800018 GHz
)iiiliii@` _QIililig, GPU: Microsoft Corporation Basic Render Driver
)iiii>` .Qliliiiililw Memory: 458.57 MiB / 62.76 GiB (0%)
)<>~ .mliiiiiliiiiiil, Disk (/): 51.72 GiB / 1007 GiB (5%)
_gllilililiililii~ Locale: C.UTF-8
giliiiiiiiiiiiiT`
-^~$ililili@~~' ████████████████████████
████████████████████████

AWS で公式 Rocky Linux イメージを使う

· 約5分
ひかり
Main bloger

AMI の選び方

公式ページから AMI を入手します。

https://rockylinux.org/ja-JP/download

インスタンスに設定するアーキテクチャー (ARM (aarch64)) を選び、 Cloud Images の AWS AMI を選択。

alt text

バージョン番号でフィルターを掛け、条件にあったものを探す。

alt text

AMI ID はコピーできないので、デプロイボタンをクリックし、AWS コンソールからコピーする。

AMI ID で検索を掛けると、でてくる

alt text

所有者でフィルタリングしたほうが良いかも。

所有者 = 792107900819

alt text

事前準備

  • キーペアの登録
    • あらかじめ ssh-keygen -t ed25519 コマンドを実行て公開鍵を作成し、.ssh/id_ed25519.pub をキーペアにインポートしておく
  • AWS CLI の導入
    • CLI のインストール
    • アクセスキーの設定 (aws configure)

ネットワークを建てる

NAT ゲートウェイよりも、パブリック IP アドレスのほうが安いので、Elastic IP を作成。

図にするとこんな感じで建てる。

EC2 Instance Connect エンドポイントを作成

alt text

EC2 Instance Connect エンドポイントを作成することで AWS CLI からログインできる。

インスタンスを建てる

  • ping を要求を受け入れるため ICMP (エコー要求) を許可 (セキュリティグループ)
  • SSH 接続ができるようにこれを許可する (セキュリティグループ)
  • ムンバイリージョンと、arm64 が安い
  • vCPU あたり 1.5 GiB の RAM が必要 (最低でも t4g.medium)

というわけで、以下の条件で建てた。

  • ムンバイリージョン
  • アーキテクチャ: arm64
  • AMI: RHEL 8.10 (LVM, aarch64); ami-0415efd8380284dc4
  • インスタンスタイプ: t4g.medium
  • キーペア: PC で作った公開鍵 (.ssh/id_ed25519.pub)
  • ネットワーク: パブリックサブネット (インターネットゲートウェイへのルートが定義されているルートテーブルが関連付けされている)
  • セキュリティグループ: セキュリティグループを作成 (名前はデフォルト)
    • ssh, 0.0.0.0/0
    • カスタム ICMP - IPv4 (エコー要求), 0.0.0.0/0
  • ストレージ: 1x 10GiB, gp3

接続

PC のターミナルを開き、以下を実行。

aws ec2-instance-connect ssh --private-key-file .ssh/id_ed25519 --os-user rocky --instance-id i-*****************

Instance Connect パッケージのインストール

Rocky Linux の AMI イメージには、Instance Connect パッケージがなく、マネジメントコンソールからの接続ができない。 そのため、パッケージをインストールする。

https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-connect-set-up.html を参考にパッケージをダウンロード。

  • ※RHEL のパッケージを選択
  • ※OS のメジャーバージョンやアーキテクチャーが違うと正常に動作しないので注意

curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_arm64/ec2-instance-connect.rhel8.rpm -o /tmp/ec2-instance-connect.rpm
curl https://amazon-ec2-instance-connect-us-west-2.s3.us-west-2.amazonaws.com/latest/linux_amd64/ec2-instance-connect-selinux.noarch.rpm -o /tmp/ec2-instance-connect-selinux.rpm
sudo dnf install -y /tmp/ec2-instance-connect.rpm /tmp/ec2-instance-connect-selinux.rpm

インストールが完了すると、マネコン上からアクセスできるようになる

alt text

CDK (typescript)

CDK 作ったので載せておく。参考までに。

keyName (キーペア) の名前は変えておく。

import * as cdk from 'aws-cdk-lib';
import * as ec2 from 'aws-cdk-lib/aws-ec2';

export interface RockyLinuxStackProps extends cdk.StackProps {
}

export class RockyLinuxStack extends cdk.Stack {
public constructor(scope: cdk.App, id: string, props: RockyLinuxStackProps = {}) {
super(scope, id, props);

// Resources
const ec2dhcpOptions = new ec2.CfnDHCPOptions(this, 'EC2DHCPOptions', {
domainName: 'ap-south-1.compute.internal',
domainNameServers: [
'AmazonProvidedDNS',
],
],
});
ec2dhcpOptions.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2InternetGateway = new ec2.CfnInternetGateway(this, 'EC2InternetGateway', {
{
value: 'igw',
key: 'Name',
},
],
});
ec2InternetGateway.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2vpc = new ec2.CfnVPC(this, 'EC2VPC', {
cidrBlock: '10.0.0.0/16',
enableDnsSupport: true,
instanceTenancy: 'default',
enableDnsHostnames: true,
{
value: 'vpc',
key: 'Name',
},
],
});
ec2vpc.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2VPCGatewayAttachment = new ec2.CfnVPCGatewayAttachment(this, 'EC2VPCGatewayAttachment', {
vpcId: ec2vpc.ref,
internetGatewayId: ec2InternetGateway.ref,
});
ec2VPCGatewayAttachment.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2NetworkAcl = new ec2.CfnNetworkAcl(this, 'EC2NetworkAcl', {
vpcId: ec2vpc.ref,
],
});
ec2NetworkAcl.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2RouteTable = new ec2.CfnRouteTable(this, 'EC2RouteTable', {
vpcId: ec2vpc.ref,
});
ec2RouteTable.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2SecurityGroup = new ec2.CfnSecurityGroup(this, 'EC2SecurityGroup', {
groupDescription: 'launch-wizard-1 created 2025-04-27T00:11:58.641Z',
groupName: 'launch-wizard-1',
vpcId: ec2vpc.ref,
securityGroupIngress: [
{
cidrIp: '0.0.0.0/0',
ipProtocol: 'tcp',
fromPort: 22,
toPort: 22,
},
{
cidrIp: '0.0.0.0/0',
ipProtocol: 'icmp',
fromPort: 8,
toPort: -1,
},
],
securityGroupEgress: [
{
cidrIp: '0.0.0.0/0',
ipProtocol: '-1',
fromPort: -1,
toPort: -1,
},
],
});
ec2SecurityGroup.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2Subnet = new ec2.CfnSubnet(this, 'EC2Subnet', {
vpcId: ec2vpc.ref,
mapPublicIpOnLaunch: false,
enableDns64: false,
availabilityZoneId: 'aps1-az1',
privateDnsNameOptionsOnLaunch: {
EnableResourceNameDnsARecord: false,
HostnameType: 'ip-name',
EnableResourceNameDnsAAAARecord: false,
},
cidrBlock: '10.0.0.0/20',
ipv6Native: false,
{
value: 'subnet-public1-ap-south-1a',
key: 'Name',
},
],
});
ec2Subnet.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2InstanceConnectEndpoint = new ec2.CfnInstanceConnectEndpoint(this, 'EC2InstanceConnectEndpoint', {
preserveClientIp: false,
securityGroupIds: [
ec2SecurityGroup.attrGroupId,
],
subnetId: ec2Subnet.attrSubnetId,
});
ec2InstanceConnectEndpoint.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2vpcdhcpOptionsAssociation = new ec2.CfnVPCDHCPOptionsAssociation(this, 'EC2VPCDHCPOptionsAssociation', {
vpcId: ec2vpc.ref,
dhcpOptionsId: ec2dhcpOptions.ref,
});
ec2vpcdhcpOptionsAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2RouteHg = new ec2.CfnRoute(this, 'EC2RouteHG', {
routeTableId: ec2RouteTable.ref,
destinationCidrBlock: '0.0.0.0/0',
gatewayId: ec2InternetGateway.ref,
});
ec2RouteHg.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2SubnetNetworkAclAssociation = new ec2.CfnSubnetNetworkAclAssociation(this, 'EC2SubnetNetworkAclAssociation', {
networkAclId: ec2NetworkAcl.ref,
subnetId: ec2Subnet.ref,
});
ec2SubnetNetworkAclAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2SubnetRouteTableAssociation = new ec2.CfnSubnetRouteTableAssociation(this, 'EC2SubnetRouteTableAssociation', {
routeTableId: ec2RouteTable.ref,
subnetId: ec2Subnet.ref,
});
ec2SubnetRouteTableAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2Instance = new ec2.CfnInstance(this, 'EC2Instance', {
tenancy: 'default',
instanceInitiatedShutdownBehavior: 'stop',
cpuOptions: {
threadsPerCore: 1,
coreCount: 2,
},
blockDeviceMappings: [
{
ebs: {
volumeType: 'gp3',
iops: 3000,
volumeSize: 10,
encrypted: false,
deleteOnTermination: true,
},
deviceName: '/dev/sda1',
},
],
availabilityZone: 'ap-south-1a',
privateDnsNameOptions: {
enableResourceNameDnsARecord: false,
hostnameType: 'ip-name',
enableResourceNameDnsAaaaRecord: false,
},
ebsOptimized: true,
disableApiTermination: false,
keyName: 'hikari',
sourceDestCheck: true,
placementGroupName: '',
networkInterfaces: [
{
privateIpAddresses: [
{
privateIpAddress: '10.0.3.59',
primary: true,
},
],
secondaryPrivateIpAddressCount: 0,
deviceIndex: '0',
groupSet: [
ec2SecurityGroup.ref,
],
ipv6Addresses: [
],
subnetId: ec2Subnet.ref,
associatePublicIpAddress: true,
deleteOnTermination: true,
},
],
imageId: 'ami-0415efd8380284dc4',
instanceType: 't4g.medium',
monitoring: false,
],
creditSpecification: {
cpuCredits: 'unlimited',
},
});
ec2Instance.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2ElasticIp = new ec2.CfnEIP(this, 'EC2ElasticIp', {
domain: 'vpc',
{
key: 'Name',
value: 'elastic-ip',
},
],
});
ec2ElasticIp.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;

const ec2EipAssociation = new ec2.CfnEIPAssociation(this, 'EC2EipAssociation', {
eip: ec2ElasticIp.ref,
instanceId: ec2Instance.ref,
});
ec2EipAssociation.cfnOptions.deletionPolicy = cdk.CfnDeletionPolicy.DELETE;
}
}

Hyper-V の Ubuntu にシリアルコンソールで接続する方法

· 約2分
ひかり
Main bloger

VM の設定

「名前付きパイプ」を選択し、パイプ名を「COM1」に設定

Hyper-V Serial Settings

Ubuntu の設定

GRUB の設定

sudo nano /etc/default/grub で GRUB の設定ファイルを開き、

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash console=ttyS0,115200n8"

に変更する。

保存後、

sudo update-grub

で GRUB の設定を適用する。

シリアルポートの有効化

シリアルポートでログインできるようにサービスを設定する。

sudo systemctl enable [email protected]
sudo systemctl start [email protected]

接続

管理者権限で起動する

Tera Term から接続

Connect Serial port of Ubuntu on Hyper-V from Tera Term

PuTTY から接続

管理者権限で起動する

Serial lineSpeedConnection type:
\.\pipe\COM1115200Serial

に設定。

Connect Serial port of Ubuntu on Hyper-V from PuTTy

Connect Serial port of Ubuntu on Hyper-V from PuTTy

管理者権限で起動する

Connect Serial port of Ubuntu on Hyper-V from plink.exe on WindowsTerminal

[System.Console]::OutputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
[System.Console]::InputEncoding = [System.Text.Encoding]::GetEncoding("utf-8")
plink.exe -serial \\.\pipe\COM1 -sercfg 115200,8,n,1,N

Ctrl + C で終了

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

· 約2分
ひかり
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 プロンプトを日本語化する方法

· 約1分
ひかり
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 プロンプトが日本語化されます。

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

· 約1分
ひかり
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 をインストール方法

· 約1分
ひかり
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