1. Unix与Windows系统命令概述
作为长期在两种操作系统环境下工作的开发者,我深刻体会到掌握Unix/Linux和Windows系统命令的重要性。这两种操作系统有着截然不同的设计哲学和命令行工具集,但都提供了强大的系统管理能力。
Unix/Linux系统以其简洁、模块化的设计闻名,命令通常专注于做好一件事,通过管道可以灵活组合。而Windows命令提示符(CMD)虽然功能相对有限,但配合PowerShell后也展现出强大的系统管理能力。近年来随着WSL(Windows Subsystem for Linux)的普及,两种系统的界限正在逐渐模糊。
2. 文件与目录操作命令
2.1 Unix/Linux文件操作
在Unix-like系统中,文件操作是最基础也是最重要的技能之一:
# 列出目录内容(详细格式) ls -alh # 创建目录(递归创建多级目录) mkdir -p project/src/main/java # 复制文件(保留属性并递归复制目录) cp -rp source_dir/ dest_dir/ # 移动/重命名文件 mv old_file.txt new_file.txt # 删除文件或目录 rm -rf temp_dir/ # 谨慎使用!递归强制删除特别注意:Unix系统中
rm -rf /这样的命令极其危险,可能导致系统崩溃。建议在重要操作前使用ls命令先确认目标路径。
2.2 Windows文件操作
Windows命令提示符提供了类似的文件操作命令:
:: 列出目录内容 dir /w :: 创建目录(可创建多级) mkdir project\src\main\java :: 复制文件 copy source.txt destination.txt xcopy /e /i source_dir dest_dir # 递归复制目录 :: 移动/重命名文件 move old_file.txt new_file.txt :: 删除文件 del temp_file.txt rmdir /s /q temp_dir # 静默递归删除目录Windows 10之后,PowerShell提供了更强大的Remove-Item命令,支持通配符和复杂过滤条件。
3. 文本处理与查看命令
3.1 Unix文本处理三剑客
Unix系统以其强大的文本处理工具闻名:
# 查看文件内容 cat log.txt | less # 分页查看 head -n 20 log.txt # 查看前20行 tail -f app.log # 实时追踪日志变化 # 文本搜索 grep -i "error" *.log # 不区分大小写搜索 grep -r "function" ./src # 递归搜索目录 # 文本处理 awk '{print $1}' data.txt # 提取第一列 sed 's/foo/bar/g' file.txt # 全局替换 sort -u names.txt # 排序并去重3.2 Windows文本处理
Windows提供了基础的文本处理命令:
:: 查看文件内容 type log.txt | more findstr "error" *.log # 基本文本搜索 :: PowerShell提供了更强大的文本处理 Select-String -Path "*.log" -Pattern "error" Get-Content large_file.txt -Tail 10 # 查看最后10行4. 系统监控与管理命令
4.1 Unix系统监控
# 进程管理 ps aux | grep nginx # 查看进程 top # 动态查看系统资源 htop # 增强版top kill -9 1234 # 强制终止进程 # 磁盘空间 df -h # 查看磁盘使用情况 du -sh * # 查看当前目录各文件/目录大小 # 网络工具 netstat -tulnp # 查看网络连接 ss -plnt # 更现代的替代方案 lsof -i :8080 # 查看端口占用4.2 Windows系统监控
:: 进程管理 tasklist | findstr "chrome" taskkill /F /PID 1234 # 强制终止进程 :: 系统信息 systeminfo # 查看系统配置 wmic cpu get loadpercentage # CPU负载 :: 网络工具 netstat -ano | findstr "LISTENING" netsh interface ip show config # 网络配置PowerShell提供了更全面的系统监控能力:
Get-Process | Where-Object {$_.CPU -gt 50} Get-NetTCPConnection -State Listen Get-Disk | Select-Object Size,FreeSpace5. 用户与权限管理
5.1 Unix用户权限
# 用户管理 sudo useradd -m newuser # 创建用户 passwd username # 修改密码 # 权限管理 chmod 755 script.sh # 修改文件权限 chown user:group file.txt # 修改所有者 sudo visudo # 编辑sudo权限 # 切换用户 su - username # 切换用户(需要密码) sudo -i # 切换到root5.2 Windows用户权限
:: 用户管理 net user username password /add # 创建用户 net localgroup administrators username /add # 提升为管理员 :: 文件权限 icacls file.txt /grant username:(F) # 授予完全控制权限PowerShell提供了更精细的权限管理:
New-LocalUser -Name "newuser" -Password (ConvertTo-SecureString "P@ssw0rd" -AsPlainText -Force) Add-LocalGroupMember -Group "Administrators" -Member "newuser"6. 网络操作与远程连接
6.1 Unix网络工具
# 网络诊断 ping google.com traceroute example.com mtr example.com # 结合ping和traceroute # 文件传输 scp file.txt user@remote:/path/ # 安全复制 rsync -avz ./local_dir/ user@remote:/remote_dir/ # 高效同步 # 远程连接 ssh user@hostname # 安全shell ssh -L 8080:localhost:80 user@gateway # 端口转发6.2 Windows网络工具
:: 网络诊断 ping google.com tracert example.com pathping example.com # 结合ping和tracert :: 远程连接 mstsc /v:remote_pc # 远程桌面PowerShell提供了更现代的远程管理方式:
Enter-PSSession -ComputerName remote_pc # PowerShell远程会话 Invoke-Command -ComputerName server1 -ScriptBlock {Get-Process}7. 包管理与软件安装
7.1 Unix包管理
不同发行版有不同的包管理工具:
# Debian/Ubuntu apt update apt install nginx apt remove package apt search keyword # RedHat/CentOS yum install httpd dnf remove package # Arch Linux pacman -S package pacman -Rs package # 移除并清理依赖7.2 Windows包管理
Windows现在也有多种包管理选择:
:: 传统的MSI安装 msiexec /i package.msi /quiet :: Chocolatey (第三方包管理) choco install git choco upgrade allPowerShell的包管理:
Find-Package -Name "*editor*" Install-Package -Name notepadplusplus8. 脚本编程与自动化
8.1 Unix Shell脚本
#!/bin/bash # 简单备份脚本 BACKUP_DIR="/backups" DATE=$(date +%Y%m%d) tar -czf "$BACKUP_DIR/backup_$DATE.tar.gz" /important_data find "$BACKUP_DIR" -name "*.tar.gz" -mtime +30 -delete # 删除30天前的备份8.2 Windows批处理与PowerShell
@echo off :: 简单备份脚本 set BACKUP_DIR=C:\backups set DATE=%date:~10,4%%date:~4,2%%date:~7,2% 7z a "%BACKUP_DIR%\backup_%DATE%.7z" "C:\important_data" forfiles /p "%BACKUP_DIR%" /m *.7z /d -30 /c "cmd /c del @path"PowerShell脚本更加强大:
# 监控脚本示例 while($true) { $cpu = (Get-CimInstance Win32_Processor).LoadPercentage if($cpu -gt 90) { Send-MailMessage -To "admin@example.com" -Subject "High CPU Alert" -Body "CPU usage is $cpu%" } Start-Sleep -Seconds 300 }9. 实用技巧与高级用法
9.1 Unix命令组合
Unix命令的强大之处在于可以灵活组合:
# 查找并处理文件 find /var/log -name "*.log" -mtime +7 -exec gzip {} \; # 统计代码行数 find src/ -name "*.java" | xargs wc -l | sort -nr # 监控网络连接变化 watch -n 1 "netstat -an | grep ESTABLISHED | awk '{print \$5}' | cut -d: -f1 | sort | uniq -c"9.2 Windows命令技巧
Windows也有类似的技巧:
:: 批量重命名文件 for /f "tokens=*" %i in ('dir /b *.txt') do ren "%i" "new_%i" :: 查找大文件 forfiles /S /M * /C "cmd /c if @fsize GTR 10000000 echo @path"PowerShell提供了更优雅的解决方案:
# 批量重命名 Get-ChildItem *.txt | Rename-Item -NewName {$_.Name -replace '^','new_'} # 查找大文件 Get-ChildItem -Recurse | Where-Object {$_.Length -gt 10MB} | Select-Object FullName,Length10. 跨平台工具与替代方案
随着开发环境的多样化,许多工具已经实现了跨平台:
# 通用工具(在两种系统都可用) git status docker ps curl -I https://example.com对于需要在两种系统间切换的用户,我建议:
- 在Windows上使用WSL获得完整的Linux体验
- 使用跨平台工具如Git、Docker、VSCode等
- 学习PowerShell Core,它可以在Linux/macOS上运行
- 对于常用命令,可以创建别名或函数来统一体验
例如,在WSL中可以这样设置:
# 在~/.bashrc中添加 alias open=explorer.exe alias pbcopy=clip.exe而在PowerShell中可以:
# 在$PROFILE中添加 function ll { Get-ChildItem -Force | Format-Wide -AutoSize } function grep { Select-String -Pattern $args }