Chuyển Đổi Lệnh Linux Sang PowerShell & Khác Biệt Cốt Lõi
Hướng dẫn chuyển đổi lệnh Linux sang PowerShell: bảng alias, native cmdlet và 2 khác biệt cốt lõi về Object vs Plain Text.
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 Linux | PowerShell Alias | Native PowerShell Cmdlet | Mô tả / Ví dụ sử dụng |
|---|---|---|---|
ls | ls / dir / gci | Get-ChildItem | Liệt kê file và thư mục. Xem file ẩn: Get-ChildItem -Force |
cd | cd / chdir / sl | Set-Location | Chuyển đổi thư mục làm việc hiện tại |
pwd | pwd / gl | Get-Location | In đường dẫn tuyệt đối của thư mục hiện tại |
cat | cat / type / gc | Get-Content | Đọc và hiển thị nội dung tệp tin |
mkdir | mkdir / ni | New-Item -ItemType Directory | Tạo một thư mục mới |
touch | (Không có) | New-Item -ItemType File | Tạo tệp tin rỗng (ví dụ: ni file.txt) |
cp | cp / copy / cpi | Copy-Item | Sao chép file hoặc thư mục đến đích |
mv | mv / move / mi | Move-Item | Di chuyển hoặc đổi tên file / thư mục |
rm | rm / del / ri | Remove-Item | Xoá file / thư mục. Ép xoá đệ quy: rm -Recurse -Force |
echo | echo / write | Write-Output | In văn bản ra pipeline của terminal |
grep | (Dùng sls) | Select-String | Tìm kiếm mẫu văn bản (vd: `cat file.txt \ |
clear | clear / cls | Clear-Host | Xóa sạch màn hình terminal |
ps | ps / gps | Get-Process | Liệt kê các tiến trình đang chạy |
kill | kill / pkill / sps | Stop-Process | Tắt tiến trình theo ID hoặc tên (vd: kill -Name notepad) |
curl / wget | curl / wget / iwr | Invoke-WebRequest | Gửi HTTP request (Lưu ý: alias curl đã bị gỡ từ PowerShell 7+) |
which | (Không có) | Get-Command | Tì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}'bashGet-Process chrome | Select-Object Id, CPU, ProcessNamepowershellflowchart 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:
powershellGet-Help Get-ChildItem -Detailed - 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ụ:
-Recursecó 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):powershellNew-Alias -Name which -Value Get-Command
Tài Liệu Tham Khảo#
- 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 ↗