dir 就是 ls -l,type 是 cat,findstr 是 grep,ipconfig 是 ip addr,tasklist 是 ps aux,netstat -ano 是 ss -tulpn。完整对照表在下面,但对照只是简单的部分:真正让第一周难受的是大小写敏感、没有回收站,以及 CRLF 换行。
| Windows | Linux |
|---|---|
dir |
ls -l |
cd |
cd,再加 pwd 看自己在哪 |
type |
cat |
findstr |
grep |
copy / move / del |
cp / mv / rm |
md / rd |
mkdir / rmdir |
cls |
clear |
tasklist / taskkill |
ps aux / kill |
ipconfig |
ip addr |
netstat -ano |
ss -tulpn |
where |
command -v |
systeminfo |
uname -a、/etc/os-release |
shutdown /r |
reboot |
1. dir → ls -l
$ clai 列出这里的文件和大小→ ls -ltotal 12-rw-r--r-- 1 root root 23 Aug 27 15:38 hosts.csvdrwxr-xr-x 2 root root 4096 Aug 27 15:38 logs-rw-r--r-- 1 root root 17 Aug 27 15:38 notes.txt
第一列是权限,开头的 d 表示目录。不带参数的 ls 只打印名字,-l 补上大小和日期,-a 显示以点开头的文件——这就是这里所谓的"隐藏文件"。
2. type → cat
$ clai 显示 notes.txt 的内容→ cat notes.txtalphabetagamma
cat 会把整个文件倒出来。文件很长就用 less(按 q 退出),只要头尾就用 head 和 tail。
3. findstr → grep
$ clai 在这个文件夹的所有文件里找 ERROR 这个词→ grep -rn "ERROR" ../logs/app.log:1:ERROR timeout after 30s
-r 会进入子目录,-n 打印行号。大小写是有区别的:ERROR 和 error 是两个词,不在乎的话加 -i。
4. ipconfig → ip addr
$ clai 显示我的网卡 ip 地址→ ip addr show eth0122: eth0@if123: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue state UP link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever
inet 是 IPv4 地址,link/ether 是 MAC。网卡不一定叫 eth0:真机上可能是 enp5s0 或 wlan0,不带参数的 ip addr 会把它们全列出来。
5. tasklist → ps
$ clai 显示正在运行的进程和它们的编号→ ps -o pid,commPID COMMAND 1 sh 13 sleep 14 ps
裸的 ps 只显示你自己这个会话。完整列表是 ps aux,而 taskkill /PID 对应 kill <pid>。
6. netstat -ano → ss -tulpn
$ clai 看看谁在监听 8099 端口→ ss -tulpn 'sport = :8099'Netid State Recv-Q Send-Q Local Address:Port Peer Address:PortProcess tcp LISTEN 0 5 127.0.0.1:8099 0.0.0.0:* users:(("python3",pid=1027487,fd=3))
ss 取代了 netstat,新发行版已经不再自带后者。参数这样读:-t tcp,-u udp,-l 只看监听,-p 进程,-n 不做域名解析。Process 这一列就相当于 netstat -ano 里的 PID。
Gotchas
- 哪里都区分大小写。
Notes.txt和notes.txt是两个文件,LS也不是命令。脚本"在我机器上是好的"的头号原因就是这个。 - 没有回收站。
rm立刻永久删除,del至少还有个去处。执行rm -r之前,先用同样的通配符跑一次ls看看名单。 - 在 Windows 上写的脚本跑不起来。 CRLF 换行会得到
bash: ./crlf.sh: /bin/sh^M: bad interpreter: No such file or directory,退出码 126。用sed -i 's/\r$//' script.sh修好,并把编辑器换成 LF。
Related questions
我用的是哪个版本? cat /etc/os-release 给出发行版和版本号,uname -srm 给出内核和架构。两者合起来相当于 systeminfo。
Program Files 在哪? 可执行文件在 /usr/bin,数据在 /usr/share,配置在 /etc,第三方软件常在 /opt。没有统一的程序文件夹。
资源管理器用什么代替? mc 在终端里提供双栏文件管理器,记得 Far 或 Norton Commander 的人会觉得亲切。
See also
CliAI 让你按原来的思路描述任务,并在执行前把 Linux 命令显示出来。一行安装。