生成式软件工程
搜索

Linux 与远程机器

你写的程序最后多半跑在一台没有显示器的 Linux 机器上。这一篇讲怎么在上面干活。

这一页讲什么
  • Linux 是什么,它和 Windows 差在哪里;
  • 服务器上为什么只有命令行,没有桌面;
  • Windows 那六个命令在 Linux 上分别叫什么;
  • 用 SSH 连到另一台机器,第一次连接会看到什么;
  • 权限那一串字母怎么读,sudo 为什么危险。

一、Linux 是另一个操作系统

操作系统管的是同一批东西:文件放在哪、程序怎么运行、谁能动谁。Windows 管这一套,Linux 也管这一套,只是分工的细节不一样。

对你来说,最直接的差别有三条:

日常学习不用装 Linux。等你需要把程序放到服务器上长期运行时,才需要真的进去操作。

生活类比 同一间宿舍,两个人收拾的方式不同。一个把东西按用途分抽屉,抽屉上贴标签;另一个按颜色分。东西还是那些东西,找起来的手感完全不同。 Windows 和 Linux 就是这两套收拾方式。会用一间,换到另一间不至于没法生活,但抽屉的位置得重新记一遍。

二、服务器上为什么只有命令行

服务器放在机房的机架上,通常没有显示器、没有键盘、没有鼠标。它只需要两件事:一直开着,以及让人能从远处连进来。

画面传过来是又慢又占带宽的。一行文字只有几百字节,一次请求一次响应,在几十毫秒内就能完成。所以服务器的界面就是命令行,而且这不是历史遗留,是当下的设计选择。

由此推出一个实际结论:在服务器上,你没法「打开一个窗口看看」。所有判断都要靠命令的输出。这也是第 3 篇讲的「读报错」在 Linux 上更重要的原因。

三、六个命令的 Linux 对照

第 2 篇的六个命令在 Linux 上都有对应物,名字不同,作用一样:

要做的事WindowsLinux
列出当前目录dirls(想看隐藏文件加 -a)
切换目录cd 路径cd 路径(一样)
看自己在哪pwdpwd(一样)
新建目录mkdir 名字mkdir 名字(一样)
看文件内容type 文件名cat 文件名
复制文件copy 源 目标cp 源 目标
删除文件del 文件名rm 文件名

真正需要单独记的只有三个新命令,它们都跟「文件很多、输出很长」有关:

常见坑:大小写与空格 Linux 上 ls 写成 LS 会报「command not found」,cd My Files 会被拆成两个参数。 路径里有空格时必须加引号,写成 cd "My Files"。这两类错误在 Windows 上不会出现,所以第一次上 Linux 的人经常在这里卡住。

四、用 SSH 连到另一台机器

SSH(Secure Shell)是一条加密的通道,把你的键盘输入送到另一台机器,把它的输出送回你的屏幕。连上之后,你打的每条命令都在对面执行。

在 Windows 上,PowerShell 自带 SSH 客户端,不需要额外安装:

PS> ssh 用户名@机器地址
The authenticity of host '10.0.0.5' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)?

这段提示的意思是:我以前没见过这台机器,你确认它是你要连的那台吗。第一次连一台新机器时都会出现,输入 yes 回车即可。它会把这台机器的指纹记到本地,下次不再问。

如果这次看到的指纹和上次不一样,SSH 会直接拒绝连接并给出警告。这种情况要认真对待:可能是机器重装了系统,也可能是有人在中间冒充。先找管理员确认,不要直接把记录删掉重来。

连上之后提示符会变,通常长这样:

用户名@机器名:~$

看到它就说明命令已经发到对面了。此时 ls 列出的是对面机器上的文件,不是你本机的。想断开,输入 exit 或按 Ctrl+D。

关键结论 连上 SSH 之后,你眼前这个窗口里的一切操作都发生在对面那台机器上。 删文件、改配置、装软件,影响的全是服务器。执行前先看一眼提示符,确认自己在哪台机器上。

五、权限那一串字母怎么读

在 Linux 上执行 ls -l,每行开头都有一串字母:

-rw-r--r--  1 user user  1024 Sep  1 10:23 note.txt
drwxr-xr-x  2 user user  4096 Sep  1 09:11 projects

这一串十位,分成四段读:

  1. 第一位:- 是普通文件,d 是目录。
  2. 第二到第四位:属主(文件的主人)能不能读、写、执行。rw- 表示能读能写不能执行。
  3. 第五到第七位:同组用户的权限。r-- 表示只能读。
  4. 第八到第十位:其他人的权限。同样是 r--。

三个字母的位置固定是「读、写、执行」,没有哪个权限就写成 -。所以 rw-r--r-- 读作:主人能读能写,其他人只能读,谁都不能执行。

改权限用 chmod。最常见的两种:

chmod +x run.sh      # 给脚本加上可执行权限
chmod 600 secret.txt # 只有主人能读能写,其他人一律不能碰
常见坑:sudo 不是万能钥匙 sudo 让你以管理员身份执行一条命令。它确实能解决「权限不足」的报错,但那条报错本身往往在提醒你:这个操作有风险。 先用 sudo 把问题压下去,等于放弃了这次提醒。执行前先弄清楚这条命令会改什么。

六、在 Windows 上练手的三种方式

不装双系统也能练。按省事程度排序:

现在就做 ① 在 PowerShell 里执行 wsl --install,装完重启,打开 Ubuntu 窗口。
② 依次执行 pwd、ls -l、cd /、ls,看看根目录下有哪些文件夹。
③ 用 mkdir ~/gse-practice 建一个练习目录,cd 进去,用 echo hello > a.txt 写一个文件,再用 cat a.txt 看内容。
④ 执行 ls -l,读出 a.txt 那一行前十个字母,说出谁能读、谁能写。

自测

1. Linux 上路径为什么没有 C 盘、D 盘?
Linux 把所有存储设备挂到同一棵目录树上,整台机器只有一个根目录 /。插进来的硬盘、U 盘都挂在某个目录下面,比如 /mnt/data,访问方式和普通目录一样,不需要盘符。
2. 第一次 SSH 连接时那段指纹提示,应该怎么处理?
确认要连的确实是这台机器,输入 yes 回车。SSH 会记住指纹,下次不再询问。如果之后指纹变了,说明机器换了系统或者有人在冒充,要先找管理员核实,不能直接把记录删掉重连。
3. rw-r--r-- 这串字母表示谁能做什么?
分三组:属主 rw- 能读能写不能执行;同组用户 r-- 只能读;其他人 r-- 只能读。没有执行权限,所以它不能被当作程序运行。
4. 在 SSH 窗口里执行 rm -rf ~,删掉的是哪台机器上的文件?
对面那台机器上当前用户的主目录。SSH 窗口里执行的命令全部在远端运行,本机文件不受影响,反之亦然。执行危险命令前先看提示符,确认自己连的是哪台机器。