news 2026/9/30 9:01:30

Linux服务器入门:从SSH登录到开发环境配置全流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux服务器入门:从SSH登录到开发环境配置全流程

1. 服务器到手之前,先把这些事想明白

我第一次远程登录一台Linux服务器的时候,盯着黑乎乎的终端界面愣了大概三分钟,光标在那儿一闪一闪,脑子里只有一个问题:我现在该敲什么?后来带过几个新人,发现大家卡住的地方几乎一模一样——不是命令记不住,而是没人告诉他们这台机器是怎么回事、自己手上有什么、下一步该干嘛。所以这篇东西我打算按"拿到一台裸机之后我会怎么一步步收拾它"的顺序来写,尽量把每一步背后的原因也讲清楚,而不是甩一堆命令让人照抄。

这篇文章里说的"服务器",默认是你在云服务商那里买的一台云服务器,装的是主流Linux发行版(Ubuntu、Debian、CentOS、Rocky、Alma这些都很常见)。文章覆盖登录、初始化配置、常用开发环境搭建、日常使用习惯和问题排查,面向的是完全没碰过Linux服务器的人,也适合用了一段时间但配置得比较乱的读者回头梳理一遍。如果你本地装的是虚拟机(比如 VMware 或 VirtualBox 里跑的 Linux),思路完全一样,只是"登录"这一步换成本地终端而已。

1.1 买机器时真正该关心的几个参数

很多人挑服务器的时候只看价格,结果用了两个月发现磁盘爆了、内存不够、或者系统版本太老装不上新软件,又重新折腾一遍。我自己的经验是,下面这几个参数比CPU核数更值得花时间去确认。

操作系统镜像版本。这一步最容易被忽略。同是Ubuntu,20.04和22.04的软件源差异就不小,24.04又换了一批默认组件。选镜像时优先选长期支持版本(LTS),一般能得到五年左右的安全更新。如果你不确定自己要用什么,选 Ubuntu 的LTS版本容错率最高,社区资料也最全,遇到问题搜出来能用的答案多。

磁盘和内存的配比。纯跑Web服务、做反向代理,2核2G够用;如果要在上面编译东西(比如前端项目打包、Maven构建),内存最好4G起步,因为构建过程吃内存很凶,2G经常会被OOM Killer直接干掉进程,表现就是"编译到一半终端断了"。磁盘方面,系统盘20G只是温饱线,Docker镜像、日志、依赖缓存加起来涨得飞快,我一般给系统盘至少40G。

带宽与流量计费方式。这个坑很隐蔽。有些套餐是固定带宽(比如1Mbps),有些是"按流量计费"。前者便宜但下载速度慢,从服务器往外拉大文件会很痛苦;后者速度快但一旦被刷流量,账单会很难看。个人使用固定小带宽基本够,但你要是打算传数据集或者对外提供下载,就得算清楚。

地域节点。选离你和你的用户都近的节点,网络延迟会差出好几倍。这点没有特别玄乎的技术含量,就是物理距离决定的事。

使用场景建议配置说明
学习Linux命令、跑小脚本1核1G,系统盘20G够用,但别指望编译大项目
部署个人网站、博客2核2G,系统盘40G装个Nginx+数据库比较从容
前端/后端构建、Docker多容器2核4G起步,系统盘60G构建过程吃内存,4G是心理安全线
跑数据库、做长期服务4核8G,独立数据盘数据盘方便单独备份和扩容

1.2 你会拿到哪几样东西

购买完成后,服务商的控制台里通常会给你三样东西:公网IP地址、登录用户名、登录凭证。凭证有两种形式,一种是初始密码,另一种是让你在控制台下载一个密钥文件(.pem或类似的私钥文件)。这两者的区别很重要:密码登录方便但容易被暴力破解,密钥登录安全但文件丢了就进不去。后面第三章我会详细讲怎么从密码切换成密钥。

还有一个东西经常被忽略:安全组。阿里云、腾讯云、华为云这类平台都叫"安全组",AWS叫"安全组"(Security Group),有些平台叫防火墙规则。它和服务器内部的防火墙是两套东西,很多新手改了服务器里的iptables或firewalld,发现端口还是不通,就是因为云平台那一层没放行。记住一句话:云平台的安全组在最外层,先过它,才轮到系统防火墙。

2. 登录这台机器:从密码到密钥

登录是所有人面对的第一道坎,也是新人报错最多的地方。"Permission denied"、"Connection timed out"、"Host key verification failed"这三句话,基本上能覆盖新手80%的登录问题。这一章把登录的完整流程讲透,包括怎么从最不安全的密码登录逐步过渡到密钥登录。

2.1 密码登录的完整过程和第一个坑

在Windows上,现在最省事的方式是用系统自带的终端(Windows Terminal)或者 PowerShell,直接敲 ssh 命令。老系统上如果没有ssh命令,装个 OpenSSH 客户端或者用 Xshell、MobaXterm 这类图形化工具也行。macOS和Linux用户直接用终端就好。

命令格式非常简单:

ssh 用户名@服务器IP

比如ssh root@123.45.67.89,回车之后会提示你输入密码。这里第一个坑就来了:输入密码的时候屏幕上不会有任何显示,不会出现星号,光标也不动。很多人以为键盘坏了,其实这是正常的安全设计。直接盲敲,敲完回车就行。

第一次连接时还会弹出一段提示,大意是"这台主机的真实性未知,指纹是XXX,是否继续连接",输入yes回车即可。这个指纹是服务器公钥的哈希值,第一次连接时没得比对,接受就行。它的作用是防止你在后续连接中被中间人掉包,如果某天突然提示指纹变了,那才是需要警惕的信号。

登录成功后你会看到命令行提示符变了,通常长这样:

root@iZbp1xxxxx:~#

@前面是当前用户,后面是主机名,~表示当前在用户的家目录,#表示是root用户(普通用户一般是$)。看到这行东西,就说明你已经站在服务器里面了。

2.2 从密码登录切换到密钥登录

密码登录最大的问题是会被扫。任何一台暴露在公网的22端口服务器,一天被尝试登录几百上千次是常态,日志里全是各种陌生IP在猜密码。解决办法就是换成密钥登录:你本地持有一把私钥,服务器上存着对应的公钥,登录时用数学方式验证,根本不给对方猜的机会。

整个过程分三步。

第一步,在本地生成密钥对:

ssh-keygen -t ed25519 -C "my-server-2024"

一路回车就行。如果想要更保险,可以在提示"passphrase"的时候设一个密码,这样私钥文件被偷了也用不了,代价是每次登录都要输一遍(可以用ssh-agent缓存,后面说)。生成的密钥默认放在~/.ssh/目录下,id_ed25519是私钥,id_ed25519.pub是公钥。私钥文件绝对不能发给任何人,也不能上传到服务器上。

第二步,把公钥传到服务器:

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@123.45.67.89

这条命令做了一件看起来很魔法的事:它自动把公钥追加到了服务器的~/.ssh/authorized_keys文件里,并且顺手把目录权限设成了700、文件权限设成了600。这一步很关键,因为SSH对权限非常挑剔,如果authorized_keys是777或者其他用户可写的状态,SSH会直接拒绝使用它,而且不会告诉你原因,只会让你继续输密码——这是新手最常见的困惑之一。

如果你用的是Windows且没有ssh-copy-id,可以手动复制公钥内容,然后在服务器上执行:

mkdir -p ~/.ssh && chmod 700 ~/.ssh echo "粘贴你的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys

第三步,验证并关闭密码登录。先别急着关,新开一个终端窗口,试着用密钥登录一次,确认能进去,再动手改配置。这个习惯能救命,我见过太多人改完配置重启SSH服务,然后把自己彻底锁在外面,只能去控制台走VNC救援。

确认密钥登录没问题后,编辑/etc/ssh/sshd_config:

PubkeyAuthentication yes PasswordAuthentication no PermitRootLogin prohibit-password

改完执行sudo systemctl restart sshd重启服务。这里有个细节:Ubuntu系的服务名可能是ssh而不是sshd,两个都试试,用systemctl status ssh看哪个存在。另外,改配置之前建议先cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak备份一份,改坏了还能从救援模式恢复。

注意:修改SSH配置后一定要保留当前这个已经登录成功的终端窗口不要关,另开一个窗口测试新配置是否生效。万一配置写错,当前窗口还能救你。

2.3 登录失败怎么一步步排查

登录不上,先别慌,按下面的顺序排查,基本上能定位到问题在哪一层。

报错信息大概率原因处理方法
Connection timed out网络不通、IP错、安全组没放行22端口ping一下IP,检查云平台安全组规则
Connection refusedSSH服务没启动、端口被改从控制台VNC进入,检查systemctl status sshd
Permission denied (publickey)密钥不匹配、权限不对、用户名错检查authorized_keys内容和权限
Host key verification failed服务器重装过,本地缓存的指纹过期删除~/.ssh/known_hosts里对应那行
卡住很久然后超时云平台安全组或系统防火墙拦截逐层检查安全组和firewalld/ufw

Permission denied是最常见的。你要确认三件事:登录用的用户名对不对(不是所有系统都允许root直连)、公钥是不是真的写进了目标用户的authorized_keys(多用户环境下经常写错用户)、以及权限设置对不对。有一个快速验证方法,在服务器上执行ssh-keygen -l -f ~/.ssh/authorized_keys,能看到指纹就说明文件格式没问题。

还有一个很隐蔽的情况:sshd_config里有一行AuthorizedKeysFile .ssh/authorized_keys,如果你把家目录或者文件路径改了,SSH就找不到了。还有SELinux在CentOS/Rocky上会额外限制家目录的访问,遇到诡异问题时可以临时setenforce 0测试一下,确认是SELinux的问题再针对性配置。

3. 系统初始化:上机第一小时该做什么

登录成功之后,别急着装软件。一台刚装好的系统有几件事必须先做,否则后面会反复踩坑。这一章的内容是我每次开新机器都会执行的固定动作,大概花二十分钟,但能省掉后面很多麻烦。

3.1 更新系统、校正时区和时间同步

第一件事是更新软件源和已安装的包。Ubuntu/Debian系:

sudo apt update && sudo apt upgrade -y

CentOS/Rocky/Alma系:

sudo dnf update -y

为什么第一步做这个?因为云服务商给的镜像可能已经放了几个月,仓库索引是旧的,你先装别的软件容易遇到依赖冲突。而且更新过程本身会顺带暴露一些源配置问题,早发现早处理。

第二件事是设时区。默认时区一般是UTC,如果你跑的是面向国内用户的服务,日志时间会比本地时间差8小时,排查问题的时候要不停做心算,非常折磨人。

sudo timedatectl set-timezone Asia/Shanghai timedatectl status

第三件事是时间同步。服务器时间不准会引发一堆奇怪问题:HTTPS证书校验失败、数据库主从同步异常、分布式任务调度错乱、日志顺序对不上。现在主流发行版默认都启用了 systemd-timesyncd 或 chrony,检查一下状态:

timedatectl

如果看到System clock synchronized: yes就没问题。如果没有,可以装 chrony 并指定公共时间服务器:

sudo apt install chrony -y

编辑/etc/chrony/chrony.conf,加上几行公共NTP服务地址,比如ntp.aliyun.com、cn.pool.ntp.org、time.cloudflare.com这类公开可用的服务,然后sudo systemctl restart chrony。用chronyc sources -v能看到同步状态,^*开头的那行就是当前正在使用的源。

注意:不要把服务器时间往回调。如果时间差了,直接用同步服务拉平,手动date -s修改容易导致依赖时间的服务出现数据错乱。

3.2 新建普通用户,别一直用root

一直用root操作是个很坏的习惯。root权限太大,一条命令敲错就可能删掉系统文件,而且很多服务默认拒绝以root身份运行。正确做法是建一个普通用户,需要提权时用sudo。

adduser zhangsan usermod -aG sudo zhangsan # Ubuntu/Debian usermod -aG wheel zhangsan # CentOS/Rocky

adduser会交互式地问密码和用户信息,比useradd友好。加完组之后,切换到新用户测试一下sudo whoami,能输出root就说明配置好了。

接下来把新用户的密钥也配上,这样就能用新用户登录了。同时建议在sshd_config里把PermitRootLogin设成no,彻底禁止root直接登录。这一步做完,即使root密码泄露,攻击者也进不来。

用户管理这块还有几个常用操作值得记住:id 用户名查看用户的UID和所属组;groups 用户名看组信息;su - 用户名切换用户;deluser 用户名或userdel -r 用户名删除用户(-r会一起删家目录,谨慎使用)。

3.3 装齐基础工具,避免后面反复折腾

刚装好的系统往往很"素",连vim、wget、unzip都不一定有。我一般会一次性装一批常用工具,省得后面用到再一个个找。

Ubuntu/Debian:

sudo apt install -y vim wget curl git unzip zip htop net-tools \ build-essential python3-pip tree tmux lsof

CentOS/Rocky:

sudo dnf install -y vim wget curl git unzip zip htop net-tools \ gcc gcc-c++ make python3-pip tree tmux lsof

这里面有几个我觉得特别值得单独说。tmux是保命工具,它能让你的会话在断开连接后继续运行。比如你在服务器上跑一个要两小时的构建,网络一抖SSH断了,进程就跟着挂了,前面的时间全白费。用tmux new -s build开个会话,断线后用tmux attach -t build回来,进程还在跑。htop比自带的 top 好看太多,CPU、内存、进程一目了然。lsof用来查文件被哪个进程占用、端口被谁监听,排查问题非常顺手。

3.4 文件解压乱码:一个几乎人人会踩的坑

在Windows上打的压缩包传到Linux解压,中文文件名经常变成一堆问号或者方块,这是编码不一致导致的。Windows中文环境默认用GBK,Linux默认用UTF-8。

对于zip文件,可以先看看压缩包内部的文件名编码:

unzip -l 包名.zip

如果显示乱码,试着用指定编码解压:

unzip -O cp936 包名.zip -d 目标目录

不过-O参数并不是所有版本的unzip都支持,Debian/Ubuntu上自带的unzip就不一定认。这时候可以换个思路,用 Python 的 zipfile 模块处理,或者先解压再用convmv批量转换文件名:

sudo apt install convmv -y convmv -f gbk -t utf-8 -r --notest 目录名

对于 tar.gz 包,如果里面的文本文件内容乱码,可以用 iconv 转:

iconv -f gbk -t utf-8 原文件.txt -o 新文件.txt

最省事的办法其实是从源头解决:在Windows上打包时就用支持UTF-8的工具(比如7-Zip在设置里可以指定文件名编码),或者干脆用tar打包,tar默认不记录编码问题,跨平台传输再配合正确解压参数基本不会乱。

4. 开发环境搭建:按需装,别贪多

环境配置这块最大的误区是"看到什么装什么"。实际上你应该先想清楚这台服务器要跑什么,再决定装什么。装多了不仅占空间,还会带来版本冲突——比如系统自带的Python和你自己装的Python打架,是新手最容易遇到的噩梦。这一章按语言/工具分类讲,每种都给两条路:一条是包管理器安装(快),一条是手动安装(版本可控)。

4.1 Node.js 环境的两种装法

方案一:用 nvm 管理版本(推荐)。nvm 是 Node Version Manager,好处是能同时装多个Node版本并随时切换,写前端项目时特别有用。

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm use 20 node -v

如果curl拉取脚本失败,可以换用wget -qO- 地址 | bash。装完后如果提示nvm: command not found,检查~/.bashrc末尾有没有被写入nvm的初始化片段,没有的话手动加上。

方案二:下载官方二进制包(免安装)。适合没有外网脚本执行环境、或者想要完全可控的场景。去官网找Linux x64的 tar.xz 包,下载后解压到/usr/local/:

wget https://nodejs.org/dist/v20.11.1/node-v20.11.1-linux-x64.tar.xz sudo tar -xf node-v20.11.1-linux-x64.tar.xz -C /usr/local/ sudo mv /usr/local/node-v20.11.1-linux-x64 /usr/local/nodejs

然后配置环境变量,编辑/etc/profile或者~/.bashrc:

export NODE_HOME=/usr/local/nodejs export PATH=$NODE_HOME/bin:$PATH

执行source /etc/profile生效。用which node确认指向的是你刚装的路径,而不是系统里可能存在的旧版本。国内环境下npm安装依赖慢的话,可以设置镜像源,这个属于常规操作,配置一次就行。

4.2 Python 环境与虚拟环境隔离

大多数Linux发行版自带Python3,但不要动系统自带的Python,很多系统工具依赖它,升级或替换会导致系统命令崩溃(最典型的就是 apt/yum 直接报错)。正确做法是另装一个独立版本。

Ubuntu上可以用 deadsnakes 源装指定版本,或者用 pyenv 管理多版本。但更简单实用的方式是直接用虚拟环境把项目依赖隔离开:

sudo apt install python3-venv -y python3 -m venv myproject source myproject/bin/activate pip install -r requirements.txt

激活后命令行前面会出现(myproject)前缀,这时候pip install装的包只影响这个环境,不会污染系统。退出用deactivate。

如果你需要做深度学习相关的环境,conda 系列会更省事,它能同时管理Python版本和CUDA等非Python依赖:

wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh

安装过程会问是否初始化shell,选yes。装完后conda create -n pytorch python=3.11建环境,conda activate pytorch激活。PyTorch的安装命令建议去官网用它的选择器生成,因为要匹配你的显卡驱动和CUDA版本,直接复制粘贴比自己猜靠谱。

注意:虚拟环境本质就是一个目录。不要把它提交到Git仓库,在.gitignore里加上venv/、.venv/、env/这类规则,否则仓库会变得又大又乱。

4.3 Java 与 Maven:版本对齐是关键

Java环境最常见的坑是"版本对不上"。项目用JDK 17编译,服务器上装的是JDK 8,报错信息往往很晦涩。

装JDK最简单的方式是用包管理器:

sudo apt install openjdk-17-jdk -y

多版本共存时用update-alternatives --config java切换。手动安装的话,下载tar.gz解压到/usr/local/,然后设置JAVA_HOME和PATH:

export JAVA_HOME=/usr/local/jdk-17 export PATH=$JAVA_HOME/bin:$PATH

Maven的安装类似,解压后配环境变量:

export MAVEN_HOME=/usr/local/apache-maven-3.9.6 export PATH=$MAVEN_HOME/bin:$PATH

Maven有个必做的优化:改镜像源。默认从中央仓库拉依赖,在国内网络环境下速度感人,经常卡在下载阶段。编辑$MAVEN_HOME/conf/settings.xml,在<mirrors>标签里加一个国内公共镜像地址,构建速度会有肉眼可见的提升。同时建议把本地仓库路径从默认的~/.m2/repository改到空间大的数据盘上,避免系统盘被依赖包撑爆。

验证安装是否成功:java -version、mvn -v,两个都能正常输出版本信息就说明环境变量配对了。

5. 把本地编辑器和服务器打通

在服务器上用vim写代码,短期可以,长期效率不高。比较舒服的方式是用VS Code的远程开发功能,本地编辑、远端运行,体验几乎和在本地开发一样。

5.1 Remote-SSH 插件的配置流程

装好VS Code后,在扩展市场搜索 "Remote - SSH" 安装。安装完左侧会出现一个远程资源管理器图标。

配置过程很简单:按Ctrl+Shift+P打开命令面板,输入 "Remote-SSH: Add New SSH Host",然后输入连接命令ssh 用户名@服务器IP。VS Code会问你配置文件存哪,一般选用户目录下的.ssh/config。之后在配置里可以补上几个实用参数:

Host myserver HostName 123.45.67.89 User zhangsan IdentityFile ~/.ssh/id_ed25519 ServerAliveInterval 60

ServerAliveInterval 60这行很实用,它让客户端每60秒发一次心跳,防止长时间不操作被服务器或中间网络设备断开连接。配好之后,在远程资源管理器里右键主机名选 "Connect to Host in New Window",新窗口左下角会显示 "SSH: myserver",这时候打开终端,就是在服务器上执行命令了。

如果连接卡在 "Setting up SSH Host" 很久然后失败,多半是服务器上要下载一个VS Code服务端组件但网络太慢。可以看输出面板的具体日志,一般会有明确的错误提示。常见原因是服务器磁盘满了、或者用户家目录没有写权限。

5.2 远程开发时的几个习惯

配置和工作区分开。VS Code的远程插件会把配置写在服务器家目录的.vscode-server里,这个目录会随着装插件慢慢变大,几百兆很常见。如果你系统盘小,可以定期清理或者把它软链到数据盘。

用工作区文件管理多项目。如果你在服务器上有好几个项目目录,不用每次开新窗口,可以把它们加进同一个.code-workspace文件,一次打开多个文件夹。

终端里保持tmux习惯。即使在VS Code里操作,长时间跑的任务还是放在tmux里更保险。VS Code的远程连接偶尔会断开重连,普通终端里的进程会跟着死掉。

Python解释器和Node版本在VS Code里单独指定。远程环境下,VS Code可能会用系统默认的Python或Node,而不是你虚拟环境里的。用Ctrl+Shift+P里的 "Python: Select Interpreter" 指定到虚拟环境路径下的python,能避免"本地跑得好好的,远端就是找不到包"这类问题。

6. 日常使用必会的命令与运维习惯

命令不用背全,但有几类必须熟练。这一章按使用频率排序,把最常用的整理出来,配合真实场景说明什么时候用。

6.1 文件与目录操作

这是最基础也最高频的一类。

命令作用常见用法示例
ls列出目录内容ls -lah显示详细信息含隐藏文件
cd切换目录cd /var/log、cd ~回家目录
cp复制cp -r 源目录 目标目录
mv移动或重命名mv 旧名 新名
rm删除rm -rf 目录(极度危险,慎用)
find查找文件find / -name "*.log" -size +100M
du统计目录大小du -sh *看当前目录下各子项占用
chmod改权限chmod 755 脚本.sh
chown改属主chown -R 用户:组 目录

rm -rf这个命令我要单独强调:它没有回收站,删了就没了。在服务器上执行之前,先确认当前路径(pwd),把命令完整写出来再回车,不要在rm -rf后面跟通配符又不检查。我见过有人想删/tmp/xxx/*,结果多打了一个空格变成/tmp/xxx/ *,直接把根目录下的东西扫了一遍。

find配合du是最好的磁盘排查组合。磁盘满了的时候,先df -h看哪个分区满,然后du -sh /path/* | sort -rh | head -20找到具体是谁占的。

6.2 进程、端口和服务管理

现在的Linux基本都用systemd管理服务,几个命令记牢就够用:

systemctl status 服务名 # 查看状态 systemctl start 服务名 # 启动 systemctl stop 服务名 # 停止 systemctl restart 服务名 # 重启 systemctl enable 服务名 # 设置开机自启 journalctl -u 服务名 -n 100 # 看最近100行日志 journalctl -u 服务名 -f # 实时跟踪日志

排查"端口被占用"或"服务起不来",ss命令比netstat更快:

ss -tulnp | grep 8080

这行命令能告诉你是哪个进程占了8080端口。如果服务启动失败,先看systemctl status输出,再看journalctl日志,90%的问题日志里都写了原因,只是很多人不看。

进程管理方面,ps aux | grep 关键词找进程,kill -9 PID强杀。但强杀是最后手段,先试kill PID(发送TERM信号让进程自己清理退出),不行再-9。

6.3 磁盘、内存和资源的实时监控

df -h看磁盘、free -h看内存、top或htop看整体负载,这三个是日常巡检的基本动作。

内存这块有个容易被误读的点:free -h里的 "available" 列才是真正可用的内存,不是 "free" 列。Linux会把空闲内存拿去做文件缓存,这是正常且有益的行为,看起来free很少其实不影响使用。真正要担心的是 swap 使用率持续很高,那说明物理内存确实不够了。

负载方面,uptime输出的三个数字是1分钟、5分钟、15分钟的平均负载。判断标准是把它和CPU核数对比:4核机器负载长期在4以上就说明压力大了,15分钟负载比1分钟高说明压力在缓解,反过来就是在恶化。

还有个小技巧,排查"网站变慢了"这类问题,先看dmesg -T | tail -50,内核级别的错误(比如OOM Killer杀进程、磁盘IO错误)都会记录在这里,而且带时间戳。

7. 常见问题排查实录

这一章是我这些年遇到过的、新手最常问的问题,整理成速查表,配上排查思路。

7.1 连接与权限类问题

现象排查思路解决方案
服务器连不上,ping也不通云平台控制台看实例状态、安全组检查安全组是否放行、实例是否在运行
能ping通但SSH连不上检查SSH服务、端口、防火墙控制台VNC登录,systemctl status sshd
提示权限不足无法写入看目标目录属主和权限用sudo或改chown/chmod
sudo命令报"不在sudoers中"用户没加进sudo/wheel组usermod -aG sudo 用户名,需重新登录

关于防火墙要再强调一遍层级关系。云平台的安全组 → 系统防火墙(firewalld/ufw)→ 应用本身监听地址。三层任何一层没放行,端口就是不通。排查时从上往下逐层验证,别跳步。ufw的常用操作是sudo ufw allow 8080/tcp,firewalld是sudo firewall-cmd --permanent --add-port=8080/tcp然后sudo firewall-cmd --reload,注意firewalld加了--permanent之后必须reload才生效,这个细节坑过很多人。

7.2 环境与依赖类问题

"命令找不到"是最常见的一类。遇到command not found,按这个顺序查:which 命令名看能不能找到;echo $PATH看路径里有没有包含安装目录;检查环境变量是在~/.bashrc还是/etc/profile里配的,前者只对当前用户和交互式shell生效。改完记得source一下或者重新登录。

"版本不对"的问题,用which -a python3能看到所有同名命令的路径,确认实际调用的是哪一个。多版本共存时,update-alternatives是Linux上统一管理版本切换的标准工具,比手动改软链接规范。

"依赖装不上"通常是两个原因:网络问题(换镜像源)和编译工具缺失(缺 gcc、make、python-devel 这类头文件包)。报错信息里如果出现 "fatal error: xxx.h: No such file or directory",就是缺开发头文件,装上对应的-dev或-devel包即可。

7.3 几点踩过坑才明白的经验

改配置前先备份。这句话听起来老生常谈,但真出事的时候,有没有.bak文件就是能不能五分钟恢复的区别。cp 配置文件 配置文件.bak.日期这个习惯我坚持了很多年。

别在服务器上直接改生产配置做实验。想测试某个参数,先复制一份配置,用另一个端口起一个测试实例验证,确认没问题再动正式的。

日志是最诚实的朋友。遇到任何服务异常,第一反应应该是去看它的日志,而不是去搜索引擎搜报错。因为日志里有你这台机器的具体上下文,而搜索结果里的是别人的环境。journalctl、/var/log/目录、应用自己的日志文件,这三个地方轮流看。

给关键操作加个"确认反射"。执行删除、重启、改权限这类命令之前,停三秒,把命令从右往左再读一遍。这个习惯帮我避免过至少两次灾难性的误操作。

定期看看磁盘。服务器挂掉的原因里,磁盘满了绝对排前三。日志文件、Docker镜像、npm缓存、临时文件都是增长大户。可以写个简单的定时任务,每周把超过30天的日志清一清,比等出事了再救火从容得多。

最后分享一个我很喜欢的小组合:把常用的巡检命令写成一个脚本,放在~/check.sh,需要的时候一把梭:

#!/bin/bash echo "=== 时间 ==="; date echo "=== 运行时长 ==="; uptime echo "=== 磁盘 ==="; df -h | grep -v tmpfs echo "=== 内存 ==="; free -h echo "=== 占资源前5的进程 ==="; ps aux --sort=-%mem | head -6

配上chmod +x check.sh,以后登录服务器第一件事就是跑一下,几十秒就能对机器状态心里有数。这个脚本本身很简单,但把"每次都要敲好几条命令"变成"一条命令搞定",长期下来省的时间和精力相当可观。环境配置这件事没有一劳永逸的终点,每次装新东西都是一次小小的踩坑和积累,把这篇文章当成一个起点,比当成一本手册更有用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 9:01:14

MoE显存优化实战:三层内存隔离架构破局稀疏计算瓶颈

1. 这不是“又一篇MoE综述”&#xff0c;而是实操级架构破局手记你点开这篇&#xff0c;大概率正被三件事反复折磨&#xff1a;训练时显存爆掉、推理时延迟飙升、调参时负载不均——这恰恰是MoE&#xff08;Mixture of Experts&#xff09;模型落地最真实的“经典三难困境”&am…

作者头像 李华
网站建设 2026/9/30 9:01:12

大地电磁神经网络反演:从迭代寻优到离线训练在线推理

简介&#xff1a;一篇题为“大地电磁人工神经网络反演”的学术论文&#xff0c;发表于《中南大学学报&#xff08;自然科学版&#xff09;》&#xff0c;面向地球物理学、电磁法勘探及机器学习交叉领域的研究人员和学生。论文将人工神经网络引入大地电磁非线性反演&#xff0c;…

作者头像 李华
网站建设 2026/9/30 9:00:40

遥感建筑物像分割系统:传统+深度混合的工程落地方案

1. 项目概述&#xff1a;这不是一个“调包跑通”的Demo&#xff0c;而是一套能落地到测绘院、国土所、城建规划一线的遥感建筑物提取系统“算法分享——遥感建筑物像分割系统”这个标题里&#xff0c;“像分割”不是笔误&#xff0c;而是刻意为之的行业术语缩写——它特指遥感影…

作者头像 李华
网站建设 2026/9/30 9:00:23

字节跳动职位分析:东南亚物流精益管理 - TikTok Shop

一、职位概述该职位隶属于字节跳动旗下 TikTok Shop 东南亚物流体系&#xff0c;核心定位为物流精益管理专家&#xff0c;聚焦快递中转、分拣、配送全链路的流程优化、人力效率管理、自动化设备应用与成本管控。职位以工业工程&#xff08;IE&#xff09;方法论为底层工具&…

作者头像 李华
网站建设 2026/9/30 8:59:56

Chrome密码保存失效的底层机制与跨平台修复指南

1. 问题本质与真实场景还原&#xff1a;这不是“记不住”&#xff0c;而是密码管理机制被意外切断你点开 Chrome&#xff0c;输入常用网站的账号密码&#xff0c;勾选“保存密码”&#xff0c;页面刷新后再次进入——密码框空空如也。你打开chrome://settings/passwords&#x…

作者头像 李华
网站建设 2026/9/30 8:59:56

基于Node.js+Vue的健康医疗体检管理系统全栈实战解析

作为一个长期做全栈项目、也给不少医院和体检机构开发过业务系统的开发者&#xff0c;我看到很多朋友一拿到这类"基于nodejsVue框架的健康医疗体检管理系统"的题目&#xff0c;第一反应就是去搜"nodejs怎么装"、"Vue环境怎么配"&#xff0c;然后…

作者头像 李华