LinuxからPowerShellへのコマンド対応表と決定的な違い
LinuxコマンドをPowerShellのネイティブcmdletやエイリアスに変換。テキストとオブジェクトパイプラインの決定的差異も解説。
PowerShell には多くの一般的な Linux コマンドに対するエイリアスが標準で組み込まれており、ls、cd、cat といったおなじみのコマンドを Windows ターミナルでそのまま入力できます。
しかし内部的には、PowerShell は Unix のバイナリを実行しているわけではありません。これらのエイリアスを Windows のオブジェクト指向 cmdlet に自動変換して実行しています(例: ls は実際には Get-ChildItem を呼び出します)。
これらは単なるラッパー(エイリアス)であるため、Linux 特有のオプション(ls -la や rm -rf など)は そのままでは動作しません。PowerShell の構文に従う必要があります。
Linux ↔ PowerShell コマンド対応表#
日常的によく使う Linux コマンドと、PowerShell のエイリアスおよびネイティブ cmdlet の対応表です:
| Linux コマンド | PowerShell エイリアス | ネイティブ PowerShell Cmdlet | 説明 / 使用例 |
|---|---|---|---|
ls | ls / dir / gci | Get-ChildItem | ディレクトリ内のアイテムを一覧表示。隠しファイル表示: Get-ChildItem -Force |
cd | cd / chdir / sl | Set-Location | カレントディレクトリを変更 |
pwd | pwd / gl | Get-Location | カレントディレクトリの絶対パスを表示 |
cat | cat / type / gc | Get-Content | ファイルの内容を読み取って表示 |
mkdir | mkdir / ni | New-Item -ItemType Directory | 新しいディレクトリを作成 |
touch | (なし) | New-Item -ItemType File | 空ファイルを作成 (例: ni file.txt) |
cp | cp / copy / cpi | Copy-Item | ファイルやフォルダをコピー |
mv | mv / move / mi | Move-Item | ファイルやフォルダを移動・名前変更 |
rm | rm / del / ri | Remove-Item | ファイルやフォルダを削除。再帰強制削除: rm -Recurse -Force |
echo | echo / write | Write-Output | ターミナルのパイプラインに文字列を出力 |
grep | (代わりに sls) | Select-String | パターン文字列を検索 (例: `cat file.txt \ |
clear | clear / cls | Clear-Host | ターミナル画面全体をクリア |
ps | ps / gps | Get-Process | 実行中のプロセス一覧を表示 |
kill | kill / pkill / sps | Stop-Process | プロセスを停止 (例: kill -Name notepad) |
curl / wget | curl / wget / iwr | Invoke-WebRequest | Web リクエストを送信 (注: PowerShell 7+ で curl エイリアスは廃止) |
which | (なし) | Get-Command | コマンドの絶対パスや実行元を特定 |
覚えておくべき2つの決定的な違い#
1. プレーンテキスト vs .NET オブジェクト#
Linux では、パイプライン(|)を通るデータはすべて プレーンテキスト です。そのため、必要な情報を取り出すには grep、awk、sed、cut といったテキスト処理ツールを組み合わせる必要があります。
一方、PowerShell ではデータが 構造化された .NET オブジェクト として流れます。文字列パースをすることなく、プロパティを直接抽出できます:
ps aux | grep "chrome" | awk '{print $2, $3}'bashGet-Process chrome | Select-Object Id, CPU, ProcessNamepowershellflowchart TD
subgraph Linux["Linux パイプライン (プレーンテキストの流れ)"]
L1["コマンド A (テキスト)"] -->|Text Stream| L2["grep / awk / sed"]
L2 -->|Filtered Text| L3["文字列出力"]
end
subgraph PowerShell["PowerShell パイプライン (.NET オブジェクトの流れ)"]
P1["Cmdlet A (.NET オブジェクト)"] -->|Object Stream| P2["Select-Object / Where-Object"]
P2 -->|Structured Object| P3["プロパティ直接アクセス"]
end
2. オプションと引数(Flags & Arguments)#
PowerShell は Linux ネイティブの複合フラグ(-rf や -al など)を認識しません。明示的な -ParameterName 形式を使用します。
- コマンド実行時にエラーが出た場合は、組み込みヘルプでパラメータ名を確認できます:
powershellGet-Help Get-ChildItem -Detailed - PowerShell のパラメータは Tab 補完に対応しており、一意に定まる前方一致(例:
-Recurseを-Rec)での省略も可能です。
[!TIP] ワンポイント:
whichのような使い慣れた Linux コマンドが見当たらない場合は、PowerShell プロファイル($PROFILE)にエイリアスを永続登録できます:powershellNew-Alias -Name which -Value Get-Command
参考文献#
- Comparing Linux/Bash to PowerShell — Reddit r/PowerShell ↗
- Equivalent of Linux Commands in PowerShell — Nerdsid ↗
- Is PowerShell better than Linux for basic commands? — Reddit ↗
- PowerShell equivalent to Linux ls -la — Stack Overflow ↗
- Unix utilities in PowerShell — GitHub ↗
- PowerShell vs Bash Object Pipeline — YouTube ↗
- PowerShell equivalent to the Unix which command — SuperUser ↗