系统学习 学习路径总入口:先选领域,再建立模型,最后用故障演练验证

Linux 与 macOS 对照:命令映射、路径权限服务差异和迁移坑

结论先行

两者都是 Unix-like,命令行都遵循 POSIX,但底层模型不同:Linux 用 GNU 用户态、systemd、FHS 和 ext4/XFS;macOS 用 BSD 用户态、launchd、APFS 和 SIP/TCC。迁移时先换模型,再换命令;会 ls 不等于会用 launchctl。

最容易被忽略的三点是:BSD 工具选项与 GNU 不同,服务由 launchd 而不是 systemd 管理,系统路径和用户数据同时受 SIP 与 TCC 限制。下面按命令、路径、权限、服务和坑点展开。

命令对照表

用途 Linux macOS
列目录 ls ls
文本过滤 grep grep(BSD)
查找文件 find find、mdfind
复制 cp cp
删除 rm rm
权限 chmod chmod
属主 chown chown
扩展属性 getfattr/setfattr xattr
打开文件 xdg-open open
进程 ps ps
结束进程 kill kill、killall
服务管理 systemctl launchctl
定时任务 crontab launchd(StartCalendarInterval)
日志 journalctl log show
地址与接口 ip ifconfig
端口连接 ss netstat、lsof
DNS dig dig
包管理 apt/dnf brew
磁盘与镜像 parted、mount -o loop diskutil、hdiutil
默认配置 gsettings defaults

路径差异

权限差异

服务差异

常见迁移坑

相关条目

参考链接

读完自测

  1. sed -i 's/a/b/' file 在 macOS 上会发生什么?正确写法是什么?
  2. 终端里能运行的自定义命令,为什么放进 LaunchDaemon 就找不到?
  3. 为什么 sudo 仍然删不掉 /System/Library 下的文件?
答案
  1. BSD sed 会把 's/a/b/' 当成 -i 的备份后缀并报错;正确写法是 sed -i '' -e 's/a/b/' file,空字符串表示不备份。
  2. launchd 不加载用户的 shell 配置,PATH 只有系统默认值;用绝对路径,或在 plist 的 EnvironmentVariables 里显式设置 PATH,并确认文件对运行用户可读可执行。
  3. SIP 和只读系统卷在内核层拦截对系统路径的修改,root 也不能绕过;应把配置改到 /Library、/usr/local 或用户目录,而不是关闭 SIP。
微信小程序码:扫码打开命令速查小程序

小程序版

微信扫码,随时查命令