blog.dopana

Back

PowerShell には多くの一般的な Linux コマンドに対するエイリアスが標準で組み込まれており、lscdcat といったおなじみのコマンドを Windows ターミナルでそのまま入力できます。

しかし内部的には、PowerShell は Unix のバイナリを実行しているわけではありません。これらのエイリアスを Windows のオブジェクト指向 cmdlet に自動変換して実行しています(例: ls は実際には Get-ChildItem を呼び出します)。

これらは単なるラッパー(エイリアス)であるため、Linux 特有のオプション(ls -larm -rf など)は そのままでは動作しません。PowerShell の構文に従う必要があります。

Linux ↔ PowerShell コマンド対応表#

日常的によく使う Linux コマンドと、PowerShell のエイリアスおよびネイティブ cmdlet の対応表です:

Linux コマンドPowerShell エイリアスネイティブ PowerShell Cmdlet説明 / 使用例
lsls / dir / gciGet-ChildItemディレクトリ内のアイテムを一覧表示。隠しファイル表示: Get-ChildItem -Force
cdcd / chdir / slSet-Locationカレントディレクトリを変更
pwdpwd / glGet-Locationカレントディレクトリの絶対パスを表示
catcat / type / gcGet-Contentファイルの内容を読み取って表示
mkdirmkdir / niNew-Item -ItemType Directory新しいディレクトリを作成
touch(なし)New-Item -ItemType File空ファイルを作成 (例: ni file.txt)
cpcp / copy / cpiCopy-Itemファイルやフォルダをコピー
mvmv / move / miMove-Itemファイルやフォルダを移動・名前変更
rmrm / del / riRemove-Itemファイルやフォルダを削除。再帰強制削除: rm -Recurse -Force
echoecho / writeWrite-Outputターミナルのパイプラインに文字列を出力
grep(代わりに sls)Select-Stringパターン文字列を検索 (例: `cat file.txt \
clearclear / clsClear-Hostターミナル画面全体をクリア
psps / gpsGet-Process実行中のプロセス一覧を表示
killkill / pkill / spsStop-Processプロセスを停止 (例: kill -Name notepad)
curl / wgetcurl / wget / iwrInvoke-WebRequestWeb リクエストを送信 (注: PowerShell 7+ で curl エイリアスは廃止)
which(なし)Get-Commandコマンドの絶対パスや実行元を特定

覚えておくべき2つの決定的な違い#

1. プレーンテキスト vs .NET オブジェクト#

Linux では、パイプライン(|)を通るデータはすべて プレーンテキスト です。そのため、必要な情報を取り出すには grepawksedcut といったテキスト処理ツールを組み合わせる必要があります。

一方、PowerShell ではデータが 構造化された .NET オブジェクト として流れます。文字列パースをすることなく、プロパティを直接抽出できます:

ps aux | grep "chrome" | awk '{print $2, $3}'
bash
Get-Process chrome | Select-Object Id, CPU, ProcessName
powershell
flowchart 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 形式を使用します。

  • コマンド実行時にエラーが出た場合は、組み込みヘルプでパラメータ名を確認できます:
    Get-Help Get-ChildItem -Detailed
    powershell
  • PowerShell のパラメータは Tab 補完に対応しており、一意に定まる前方一致(例: -Recurse-Rec)での省略も可能です。

[!TIP] ワンポイント: which のような使い慣れた Linux コマンドが見当たらない場合は、PowerShell プロファイル($PROFILE)にエイリアスを永続登録できます:

New-Alias -Name which -Value Get-Command
powershell

参考文献#