繰り返し文字生成の実行時間

2024/08/31 19:08 OS別::Linuxその他::シェル
bash で Separator のような、任意の文字を繰り返し出力する方法を探して、見つけたこちら。
https://genzouw.com/entry/2020/10/29/211143/2094/

選択肢が割とあって「お、おう……」となったので「実行速度」で選ぶことにした記事。
シェルスクリプトなので、普段は実行時間なんて気にしないのだけど。

ここで結論を先に書いておくと、ビルトインコマンドである for 文(for *1; do echo -n '='; done)を利用するのが最強のようです。
次点で、print (printf "=%0.s" 0..9)でした。

*1 : i=0; i<10; i++

テスト環境

テスト環境は、以下のような状況です。
$ uname -moi
armv7l unknown GNU/Linux
$
$ bash -version | head -n 1
GNU bash, バージョン 5.1.4(1)-release (arm-unknown-linux-gnueabihf)
$
$ . /etc/os-release
$ echo ${PRETTY_NAME}
Raspbian GNU/Linux 11 (bullseye)

テスト方法

スクリプトにしておいて、シンプルに time で計測します。

作成したスクリプトおよび内容は、以下の通りです。
$ ls -1
test-A.sh
test-B.sh
test-C.sh
test-D.sh
test-E.sh
test-F.sh
test-G.sh
work.sh
$
$ for i in *.sh
do
  echo "### ${i}"
  echo "----------------------------------------------------"
  cat ${i}
  echo "----------------------------------------------------"
  echo ""
done
### test-A.sh
----------------------------------------------------
#!/bin/bash
printf "=%0.s" {0..9}
----------------------------------------------------

### test-B.sh
----------------------------------------------------
#!/bin/bash
yes = | head -n 10 | tr -d '\n'
----------------------------------------------------

### test-C.sh
----------------------------------------------------
#!/bin/bash
seq -s '=' 0 10 | tr -d '[0-9]'
----------------------------------------------------

### test-D.sh
----------------------------------------------------
#!/bin/bash
seq -s '=' 0 10 | sed "s/[0-9]//g"
----------------------------------------------------

### test-E.sh
----------------------------------------------------
#!/bin/bash
for ((i=0; i<10; i++)); do echo -n '='; done
----------------------------------------------------

### test-F.sh
----------------------------------------------------
#!/bin/bash
seq 10 | xargs -i echo -n =
----------------------------------------------------

### test-G.sh
----------------------------------------------------
#!/bin/bash
seq 10 | xargs -i printf "="
----------------------------------------------------

### work.sh
----------------------------------------------------
#!/bin/bash

fnChecker() {
  echo "### ${1}"
  time ./${1}
}

fnChecker test-A.sh
fnChecker test-B.sh
fnChecker test-C.sh
fnChecker test-D.sh
fnChecker test-E.sh
fnChecker test-F.sh
fnChecker test-G.sh
----------------------------------------------------

$

計測

傾向が見えればよいと考えたため、とりあえず1回実行したところが、以下の数値です。
$ ./work.sh
### test-A.sh
==========
real    0m0.016s
user    0m0.013s
sys     0m0.003s
### test-B.sh
==========
real    0m0.028s
user    0m0.020s
sys     0m0.030s
### test-C.sh
==========

real    0m0.023s
user    0m0.024s
sys     0m0.007s
### test-D.sh
==========

real    0m0.028s
user    0m0.009s
sys     0m0.028s
### test-E.sh
==========
real    0m0.014s
user    0m0.001s
sys     0m0.013s
### test-F.sh
==========
real    0m0.082s
user    0m0.026s
sys     0m0.067s
### test-G.sh
==========
real    0m0.080s
user    0m0.036s
sys     0m0.051s
$

結論

for コマンドを使います。

感想

printf コマンド(test-A.sh)もなかなか良い数字なんだけど、ビルトインコマンドの for によるループ(test-E.sh)が強いですね。

その他、普通は bash の予約語なので利用されない time コマンドを使ってみての計測なんかもしてみましたが、メモリ使用率なんかは変化が少ないようです。

wait

time コマンドで計測できる wait の内容は、次の通り(man bash の引用)。
wait の回数、つまりそのプログラムが自発的にコンテキストスイッチされた回数。
例えば、I/O 操作の完了を待っている間などが該当する。
$ type time
time はシェルの予約語です
$
$ which time
/usr/bin/time
$
$ for i in test-*.sh
> do
>    /usr/bin/time -f "\nwait: %w" ./${i}
> done
==========
wait: 1
==========
wait: 8
==========

wait: 7
==========

wait: 5
==========
wait: 1
==========
wait: 31
==========
wait: 36
$
計測した結果は上記の通りですが、printf と for でのループ、待ちなんてほとんど発生してませんね。

その他

あと、こんな感じで他にもいろいろ計測できたりします。

これは、メモリ(プロセス生存中のそのプロセスの resident set size の最大値)。
$ for i in test-*.sh
do
   echo "### ${i}"
   /usr/bin/time -f "\n Memory: %MKB" ./${i}
done
### test-A.sh
==========
 Memory: 2752KB
### test-B.sh
==========
 Memory: 2820KB
### test-C.sh
==========

 Memory: 2820KB
### test-D.sh
==========

 Memory: 2816KB
### test-E.sh
==========
 Memory: 2692KB
### test-F.sh
==========
 Memory: 2868KB
### test-G.sh
==========
 Memory: 2868KB
$
うん。だいたい 3MB 程度ですね。

メジャーページフォルトの回数

外部コマンドでは、メジャーページフォルトの回数を計測も出来たりします。
$ for i in test-*.sh
do
   echo "### ${i}"
   /usr/bin/time -f "\n Page: %F" ./${i}
done
有意な差がないので結果は載せないですが、test-C.sh (seq -s '=' 0 10 | tr -d '[0-9]') はちょこちょこページフォルトが発生している模様。
他のも、合ったりなかったり。
$ for i in test-*.sh
do
   echo "### ${i}"
   /usr/bin/time -f "\n Memory: %MKB" ./${i}
done

Win ssh サーバ設定 @PowerShell

2024/03/28 00:09 OS別::Windowsその他::技術情報
Windows のバージョンごとに設定手順が変更されることがあるため、汎用的に利用できる PowerShell での設定方法を記載します。


確認環境

実際に動作を確認した環境は、以下の通りです。
Version 情報(23H2)
Version 情報(23H2)

ただし、想定する対象としては、Windows Server 2022, Windows Server 2019, Windows 11, Windows 10 (Microsoft 公式情報より)になります。

PowerShell 起動(管理者モード)

システムへの変更を行うため、管理者モードで PowerShell を起動します。

管理者モードで起動

Win キーを押し、そのまま power shell と入力します。

検索結果に Windows PowerShell が表示されたら、「管理者として実行する」を選択します。
PowerShell 起動
PowerShell 起動

このとき、ユーザアカウント制御が表示された場合は「はい」を押して続けます。

起動確認

タイトルバーに「管理者:Windows PowerShell」が表示された画面が起動することを確認します。
PowerShell 管理者モード
PowerShell 管理者モード

sshd インストール

対象バージョン名称確認

インストールする PowerShell のバージョン情報を表示します。
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
OpenSSH バージョン確認
OpenSSH バージョン確認

画像では見辛いですが、以下のように表示されることを確認します。
PS C:\WINDOWS\system32> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'


Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed



PS C:\WINDOWS\system32>

インストール

次のコマンドを実行します。
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
インストール画面
しばらく、CUI 上にインストール状況が表示されます。
OpenSSH インストール中
OpenSSH インストール中
インストール結果画面
続けて、OpenSSH がインストールされたことを確認します。
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
OpenSSH インストール結果
OpenSSH インストール結果
画面上に、以下のように Online: True が表示されます。
PS C:\WINDOWS\system32> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0


Path          :
Online        : True
RestartNeeded : False



PS C:\WINDOWS\system32>

サーバ設定

サービス起動

sshd サービスを起動します。
PS C:\WINDOWS\system32> Start-Service sshd

サービス自動起動

sshd サービスを、自動起動するよう設定変更します。
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType 'Automatic'

余談(スタートアップの種類を変更)

ちなみに、以下のコマンドでサービスの停止やスタートアップの種類を変更できます。
サービス停止
PS C:\WINDOWS\system32> Stop-Service -Name sshd
※ sshd は、中断と再開をサポートしていないため、中断できないようです。
スタートアップの種類
「自動」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Automatic
「手動」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Manual
「無効」の場合
PS C:\WINDOWS\system32> Set-Service -Name sshd -StartupType Disabled

Firewall

必要に応じて、ファイアウォール設定を行います。
# Confirm the Firewall rule is configured. It should be created automatically by setup. Run the following to verify
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "Firewall Rule 'OpenSSH-Server-In-TCP' does not exist, creating it..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "Firewall rule 'OpenSSH-Server-In-TCP' has been created and exists."
}

鍵の生成

鍵を生成するには、以下のコマンドを実行します。
ssh-keygen -t ed25519
※ 記事の作成時点では、rsa より ed25519 が推奨されています。適切に指定してください。

実行例
PS C:\WINDOWS\system32> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\test/.ssh/id_ed25519):
Created directory 'C:\\Users\\test/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\test/.ssh/id_ed25519
Your public key has been saved in C:\Users\test/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:vNdhiYXL3ci1SDWYKf+pv2SOLiXSdDBWWFCKsNJzlk0 test@Win100
The key's randomart image is:
+--[ED25519 256]--+
|      .   E*++o  |
|     . o =*o+. . |
|    . + =.+=o .  |
|     . = ..Bo* . |
|        So+.O.o. |
|        ..oo..o  |
|        ...o..o  |
|         .. .=   |
|           oo.+. |
+----[SHA256]-----+
PS C:\WINDOWS\system32>
PS C:\WINDOWS\system32> dir C:\Users\test\.ssh\


    ディレクトリ: C:\Users\test\.ssh


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024/03/27     23:29            399 id_ed25519
-a----        2024/03/27     23:29             95 id_ed25519.pub


PS C:\WINDOWS\system32>
公開鍵 id_ed25519.pub を、リモートアクセスしたい相手側サーバに適切に設定すると、鍵を利用した ssh 接続が可能になります。

公開鍵の格納先

Windows でも Linux でも、id_ed25519.pub の内容を、そのまま全部、1行で authorized_keys ファイルに記載してください。
公開鍵は「公開してしまう鍵」なので、ファイルを開いてコピペするなど、多少雑に扱っても問題ありません。
Windows ssh サーバ
sshd サービスが動いている Windows サーバの、ユーザプロファイル直下に .ssh フォルダを作成して配置します。

例として、test ユーザのユーザプロファイル情報を表示します。
PS C:\WINDOWS\system32> echo $env:USERPROFILE\.ssh\
C:\Users\test\.ssh\
PS C:\WINDOWS\system32> dir C:\Users\test\.ssh\authorized_keys


    ディレクトリ: C:\Users\test\.ssh


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        2024/03/27     23:29             95 authorized_keys


PS C:\WINDOWS\system32>
Linux サーバ
ユーザのホームディレクトリ直下に .ssh ディレクトリを作成して配置します。
例として、test ユーザのホームディレクトリ情報を表示します。
$ test@rasp080:~/.ssh $ ls -ld ~/.ssh
drwx------ 2 test test 4096  3月 27 23:41 /home/test/.ssh
test@raspberry:~/.ssh $
test@raspberry:~/.ssh $ ls -l ~/.ssh/authorized_keys
-rw------- 1 test test 0  3月 27 23:41 /home/test/.ssh/authorized_keys
※ Linux サーバは、特に権限情報が重要視されます。 .ssh ディレクトリは 700 かつ authorized_keys は 600 にしてください。

適切に設定すると、以下のように ssh 接続可能です。
PowerShell 画面から Linux へ ssh 実行
PowerShell 画面から Linux へ ssh 実行

sshd アンインストール

インストールした sshd をアンインストールするには、次のコマンドで実行できます。
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

参考

pwsh update

2024/03/27 06:43 OS別::Windowsその他::シェル
Windows PowerShell を Windows Terminal でアップデートする手順を記載します。

環境

この手順は、以下の Windows バージョンで確認しています。
OS Version
OS Version

バージョンアップ

Windows Terminal の起動

筆者の環境では PowerShell を起動すると、Windows Terminal が開きます。
Windows Terminal
Windows Terminal

バージョン確認

PowerShell のバージョンを確認しておきます。
PS C:\Users\test> $PSVersionTable.PSVersion

Major  Minor  Build  Revision
-----  -----  -----  --------
5      1      22621  2506


PS C:\Users\test>

インストール

次のコマンドで、Microsoft Store から PowerShell の最新版を確認し、インストールします。

なお、winget コマンドは Microsoft の パッケージ管理ツール になります。
PS> winget search Microsoft.PowerShell
PS> winget install --id Microsoft.Powershell --source winget
PS> winget install --id Microsoft.Powershell.Preview --source winget
もしユーザアカウント制御 (UAC) が表示された場合は、「はい」を選択してください。
PowerShell 7.4 install
PowerShell 7.4 をインストール中の画面です。
PowerShell 7.4 install
PowerShell 7.4 install
PowerShell 7.5 install
PowerShell 7.5 Preview をインストール中の画面です。
PowerShell 7.5 install
PowerShell 7.5 install

インストール完了画面

どちらもインストールを完了すると、下の画面のようになります。
PowerShell インストール完了
PowerShell インストール完了

Windows Terminal 設定

インストールしただけでは Windows Terminal に反映されないようです。
Windows Terminal を再起動するか、新しいプロファイルとして設定します。

なお、インストールした PowerShell は、別なディレクトリに格納されています。
C:\Program Files\PowerShell\7\pwsh.exe
新しいプロファイルとして設定する場合は、参考にしてみてください。
そのまま設定すると、自身のプロファイルを設定・保存した際に新しい PowerShell が定義されたので、Windows Terminal を再起動すれば設定されているのかもしれません(確認不能状態になってしまいました)

Windows Terminal 設定を開く

必要であれば Windows Terminal 設定画面を開きます。
Windows Terminal 設定
Windows Terminal 設定

新しいプロファイルを開く

「新しいプロファイルを開く」を選択します。
新しいプロファイルを追加します
新しいプロファイルを追加します

新しい空のプロファイルを開く

「新しい空のプロファイルを開く」を選択します。
新しい空のプロファイル
新しい空のプロファイル

プロファイルを設定する

必要事項を入力して、「保存」を選択します。
プロファイル設定
プロファイル設定

プロファイル設定後

筆者の環境では、設定してプロファイルを保存すると、自動的に 7.4 および 7.5 が適切に設定されました。
せっかく設定しましたが、自分で設定したプロファイルは「プロファイルの削除」を選択して削除しました。
PowerShell 7.4 プロファイル設定後
PowerShell 7.4 プロファイル設定後
PowerShell 7.4 プロファイル設定後
PowerShell 7.5 プロファイル設定後
PowerShell 7.5 プロファイル設定後
PowerShell 7.5 プロファイル設定後

PowerShell 7.4

新しく開く

新しく開く
新しく開く

バージョン確認

PowerShell 7.4 バージョン確認
PowerShell 7.4 バージョン確認

参考

Win11 SSH サーバ設定 @23H2

2024/03/26 08:19 OS別::Windowsその他::技術情報
Windows 10 での SSH サーバ設定で一度リライトしたのですが、そのバージョンからさらにアップデートすると手順が変更になっていたので、リライトしました。

GUI での説明記事を作成するには、限界を感じてしまいますね。

さて、ssh サーバの説明や接続方法等は別な記事を参照いただくとして、対象のバージョン、手順、起動方法、ログイン確認までを説明範囲とします。

Windows 対象バージョン

設定 選択

スタートメニューを右クリックして「システム」を選択します。
システム
システム

バージョン情報 選択

バージョン情報が表示されます。

表示されているバージョンが今回の記事で利用しているバージョンです。
この場合、Windows11 Pro のバージョンが 23H2 で、OS ビルドが 22631.3296 になります。
バージョン情報
バージョン情報

sshd インストール手順

システム

左ペインから「システム」を選択します。

システム画面が更新されたら、オプション機能を選択します。
「システム」画面
「システム」画面

システム> オプション機能

「オプション機能を追加する」の「機能を表示」を選択します。
「システム > オプション機能」画面
機能を表示

オプション機能を追加する

OpenSSH サーバーを選択して、チェックがついたら「次へ」を選択します。
「オプション機能を追加する」画面
オプション機能を追加する

インストール

追加する機能を確認されるので、OpenSSH サーバーが表示されていることを確認して「インストール」を選択します。
「インストール対象の確認画面
インストール対象確認
OpenSSH サーバーがインストールされるのを待ちます。
インストール中の画面
インストール 待機
インストールされると、インストール済みと表示されます。
もう一度アプリのオプション機能画面を表示して、OpenSSH サーバーがあればインストールされています。
インストールされている機能
インストール確認

sshd 利用

サービス起動手順

OpenSSH サーバーは、サービスとして起動しないと SSH ログインできません。

サービス起動するために、まずスタートメニューを右クリックして「コンピューターの管理」を起動します。

win
コンピューターの管理選択画面
ここから「サービスとアプリケーション」→「サービス」へ移動すると「OpenSSH SSH Server」があります。

サービス選択
サービス選択画面

「OpenSSH SSH Server」をダブルクリックして「OpenSSH Server のプロパティ」を開きます。

まず、サービスが停止していることが分かります。

OpenSSH SSH Server のプロパティ
OpenSSH SSH Server のプロパティ画面
「開始」ボタンをクリックして、サービスを実行しておきます*1

また、Windows を起動したらサービスも起動させたい場合は、「全般」タブの「スタートアップの種類」を「手動」から「自動」に変更して「OK」ボタンをクリックします。

スタートアップの種類選択
スタートアップの種類選択画面

sshd_conf

OpenSSH サーバーとして設定は、以下フォルダの設定ファイルで行います。
%SystemRoot%\System32\OpenSSH
管理者権限でテキストエディタを起動したら sshd_config_default を開いて sshd_config という名前で別名保存します。

コマンドプロンプトを管理者権限で起動すると、簡単にコピーできます。

Win キーを押して cmd を入力し、Ctrl + Shift キーを押しつつ Enter すると、管理者権限でコマンドプロンプトを起動できます。
C:\WINDOWS\system32>cd OpenSSH
C:\Windows\System32\OpenSSH>dir
C:\Windows\System32\OpenSSH>copy sshd_config_default sshd_config
C:\Windows\System32\OpenSSH>notepad sshd_config
C:\Windows\System32\OpenSSH>

アンチウィルスソフト

Norton Internet Security をインストールしていますが、LAN 内の Linux サーバからアクセスする場合、特に何の設定も必要なくアクセスできました。

アクセスできない場合、インストールされているアンチウィルスソフトの設定を確認してみてください。

*1 : プロパティ画面ではなく、サービス選択で「OpenSSH SSH Server」を右クリックして「開始」を選択しても SSH 接続を受け付けるようになります。

ユーザ作成

xxx@hotmail.co.jp のアカウント(いわゆる Microsoft アカウント)では、ssh によるリモートアクセスができません。
ということで、ローカルアカウントの作成が必要です。

ユーザ作成には、システム管理権限のあるユーザが必要です。

Tera Term でアクセスする場合、通常の UNIX / Linux へアクセスするのと手順は同じです。

そのまま localhost:22 へ ssh アクセスすると、通常のログイン処理でアクセス可能です。

Windows11 端末に、管理権限のあるユーザでログインしていることをユーザー作成の前提条件とします。

ローカルアカウント追加

ユーザー作成ですが、開いているタスクマネージャーのメニューからユーザーを選択して、そのままユーザーアカウントの管理をクリックします。
ユーザアカウントの管理

ユーザーアカウントの画面がでたら、別のアカウントの管理を選択します。
別のアカウントの管理

「PC 設定で新しいユーザーを追加」をクリックします。
PC 設定で新しいユーザーを追加

「アカウントの追加」をクリックします。
アカウントの追加

Microsoft アカウント画面が表示されたら「このユーザーのサインイン情報がありません」を選択します。
Microsoft アカウント 1

続いて「Microsoft アカウントを持たないユーザーを追加する」を選択します。
Microsoft アカウント 2

やっとローカルアカウントを作成する画面が表示されるので、必要事項を入力します。
Microsoft アカウント 3

ここでは、サンプルとして test ユーザーを作成します。
まず、ユーザー名とパスワードを入力します。
Microsoft アカウント 情報入力 1

下へスクロールして、パスワードを忘れた場合の質問に回答します。
ここでは、すぐに削除するので x で埋めていますが、忘れた際に必要になります。
Microsoft アカウント 情報入力 2

すべて入力して「次へ」をクリックすると、以下の「ほかのユーザー」画面に戻りますので、ユーザーが作られたことを確認します。

ここで作られたユーザーの「アカウントの種類」は「標準ユーザー」です。
アカウント確認画面

リモートアクセスするユーザーに管理者権限が必要な場合は、別途管理者権限を付与してください。

レビュービルド26052以降であれば、Linux の sudo コマンドと同じコマンドが実装されるとのこと。

Windows11 へ SSH アクセス

Tera Term で Windows 11 に対してアクセスし、先ほど設定したユーザー名およびパスワードを入力すると、Windows 11 のターミナル(ここではデフォルトの cmd.exe を利用)にログインできます。
Tera Term から SSH ログイン
ここでは Raspberry Pi からアクセスしていますが、ローカル (localhost)でもアクセス可能です。


SSHd が動作していれば、Windows 端末の「標準ユーザー」で Tera Term から SSH アクセスが可能です。

パッケージ管理ツール

2024/04/06 01:33 その他::技術情報
いろいろなパッケージ管理ツールについてのまとめになります。

OS

OS に対し、単体のアプリケーションをパッケージとして導入するためのツール群。
単純にアプリケーションをパッケージとしてまとめるものと、そのパッケージが動作するために必要な、依存パッケージも合わせてインストールするためのものとがあります。
種別代表的なコマンド名称備考
LinuxRed Hat 系rpmRedhat Package Manager
yumYellowdog Updater Modifiedrpm の依存関係等をみてインストール可能
dnfDandified Yumyum の後継
Debian 系dpkgDebian Package
apt-getdpkg の依存関係を解決するなど
aptAdvanced Packaging Toolapt-get の後継
MacHomebrewApple 非公式
WindowsWingetMicrosoft 公式。Win10 V2004以降で利用可能
Chocolatey

プログラム系

プログラミング言語が、独自にパッケージ管理を行うものが存在します。
たとえば、その言語を利用するために必要に応じてインストールするライブラリだったり、その言語で動作するアプリケーションだったりします。

Mac の Homebrew で Python をインストールした後、Python で pip を利用する。
そんな使われ方をします。
言語代表的なコマンド名称備考
JavaScript
(Node.js)
npmNode Package Manager
npxNode Package Executer
yarnYet Another Resource Negotiator
PerlcpanComprehensive Perl Archive NetworkPerl モジュール管理ツール
cpanm初期設定不要の Perl モジュール管理ツール*1
PHPComposerライブラリ依存管理ツール
PythonpipPip Installs Packages
RubygemRubyGems
JavaScript のパッケージシステムは、現在 Deno や Vlt といった後継が開発されつつある模様。