blog.dopana

Back

Nếu bạn chuyển từ môi trường Linux hoặc macOS sang Windows, bạn sẽ ngạc nhiên khi thấy những lệnh quen thuộc như ls, cd, cat hay rm vẫn chạy ngon lành trong PowerShell.

Tuy nhiên, bên dưới bề mặt, PowerShell không thực thi các file binary Unix. Nó dịch các lệnh này thành cmdlet hướng đối tượng (object-oriented) của Windows (ví dụ: gõ ls thực chất gọi cmdlet Get-ChildItem).

Vì các alias này chỉ là lớp vỏ bọc (wrapper), các tham số cờ quen thuộc của Linux (như ls -la hay rm -rf) sẽ không hoạt động trừ khi bạn dùng đúng cú pháp của PowerShell.

Bảng Tra Cứu Lệnh Linux Sang PowerShell#

Dưới đây là bảng chuyển đổi chi tiết các tác vụ thường dùng trong Linux sang PowerShell native cmdlet và alias có sẵn:

Lệnh LinuxPowerShell AliasNative PowerShell CmdletMô tả / Ví dụ sử dụng
lsls / dir / gciGet-ChildItemLiệt kê file và thư mục. Xem file ẩn: Get-ChildItem -Force
cdcd / chdir / slSet-LocationChuyển đổi thư mục làm việc hiện tại
pwdpwd / glGet-LocationIn đường dẫn tuyệt đối của thư mục hiện tại
catcat / type / gcGet-ContentĐọc và hiển thị nội dung tệp tin
mkdirmkdir / niNew-Item -ItemType DirectoryTạo một thư mục mới
touch(Không có)New-Item -ItemType FileTạo tệp tin rỗng (ví dụ: ni file.txt)
cpcp / copy / cpiCopy-ItemSao chép file hoặc thư mục đến đích
mvmv / move / miMove-ItemDi chuyển hoặc đổi tên file / thư mục
rmrm / del / riRemove-ItemXoá file / thư mục. Ép xoá đệ quy: rm -Recurse -Force
echoecho / writeWrite-OutputIn văn bản ra pipeline của terminal
grep(Dùng sls)Select-StringTìm kiếm mẫu văn bản (vd: `cat file.txt \
clearclear / clsClear-HostXóa sạch màn hình terminal
psps / gpsGet-ProcessLiệt kê các tiến trình đang chạy
killkill / pkill / spsStop-ProcessTắt tiến trình theo ID hoặc tên (vd: kill -Name notepad)
curl / wgetcurl / wget / iwrInvoke-WebRequestGửi HTTP request (Lưu ý: alias curl đã bị gỡ từ PowerShell 7+)
which(Không có)Get-CommandTìm đường dẫn tuyệt đối hoặc nguồn gốc của một lệnh

2 Khác Biệt Cốt Lõi Bạn Cần Nắm Rõ#

1. Plain Text vs .NET Objects#

Trong Linux, dữ liệu di chuyển qua các pipeline (|) dưới dạng chuỗi văn bản thuần túy (plain text). Bạn thường phải kết hợp các công cụ parse văn bản như grep, awk, sed, hay cut để lấy thông tin mong muốn.

Ngược lại, PowerShell truyền dữ liệu dưới dạng đối tượng có cấu trúc (.NET objects). Bạn có thể truy xuất trực tiếp các thuộc tính mà không cần lọc chuỗi:

ps aux | grep "chrome" | awk '{print $2, $3}'
bash
Get-Process chrome | Select-Object Id, CPU, ProcessName
powershell
flowchart TD
    subgraph Linux["Pipeline trong Linux (Dòng Text thuần)"]
        L1["Lệnh A (Raw Text)"] -->|Text Stream| L2["grep / awk / sed"]
        L2 -->|Filtered Text| L3["Kết quả chuỗi"]
    end

    subgraph PowerShell["Pipeline trong PowerShell (Đối tượng .NET)"]
        P1["Cmdlet A (.NET Object)"] -->|Object Stream| P2["Select-Object / Where-Object"]
        P2 -->|Structured Object| P3["Truy xuất trực tiếp Property"]
    end

2. Cờ Lệnh & Tham Số (Flags & Arguments)#

PowerShell không nhận diện các cờ ghép ngắn kiểu Linux như -rf hay -la. PowerShell áp dụng hệ thống tham số đặt tên rõ ràng theo chuẩn -ParameterName.

  • Khi chạy lệnh bị báo lỗi cờ không hợp lệ, hãy tra cứu danh sách tham số qua tài liệu trợ giúp tích hợp:
    Get-Help Get-ChildItem -Detailed
    powershell
  • Các tham số trong PowerShell hỗ trợ tự động hoàn thành (Tab completion) và có thể viết tắt nếu tiền tố không bị trùng (ví dụ: -Recurse có thể viết ngắn thành -Rec).

[!TIP] Mẹo: Nếu bạn nhớ các lệnh Linux quen thuộc như which, bạn có thể tạo alias vĩnh viễn trong file PowerShell Profile ($PROFILE):

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

Tài Liệu Tham Khảo#