3、Linux基础:SSH连接、文件操作、进程管理、环境变量配置

说实话,很多刚入行的朋友觉得Linux就是敲命令,没什么了不起。但我在带团队时发现,线上事故十有八九跟基础操作不扎实有关。SSH连不上、文件找不着、进程杀不掉、环境变量配错——这些看似简单的问题,真能让你加班到凌晨三点。

这一章,我把日常工作中最常用的四个模块串起来讲。你跟着走一遍,至少能少踩一半的坑。

本章核心脉络:SSH打通远程连接 → 文件操作管理配置 → 进程监控与排障 → 环境变量统一管控。这四个环节环环相扣,缺一不可。

Linux 基础四模块知识体系 Linux 基础操作 SSH 连接 文件操作 进程管理 环境变量 💡 日常工作中,这四个模块是串联使用的:SSH 上服务器 → 编辑配置文件 → 重启进程 → 验证环境变量 任何一个环节出问题,都可能导致服务异常。建议逐个模块掌握后再综合练习。

3.1 SSH 连接:你的远程操作入口

SSH 是运维人员的「门」。门都进不去,后面什么都别谈。我个人习惯在项目初始化时就把 SSH 配置整理好,省得每次上线都手忙脚乱。

3.1.1 基本连接与密钥认证

密码登录虽然简单,但生产环境我强烈建议禁用。为什么?暴力破解脚本满天飞,你想想看,一个 8 位纯数字密码能撑多久?

# 生成密钥对(推荐 ed25519,比 rsa 更安全)
ssh-keygen -t ed25519 -C "your_email@example.com"

# 将公钥复制到服务器
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

# 测试免密登录
ssh user@server_ip

我的习惯:在 ~/.ssh/config 里配置主机别名,这样就不用每次都敲完整 IP 了。

Host myserver
    HostName 192.168.1.100
    Port 22
    User deploy
    IdentityFile ~/.ssh/id_ed25519

之后直接 ssh myserver 就能登录,省事不少。

3.1.2 常见连接问题排查

我曾经有一次线上故障,折腾了半小时才发现是服务器 SSH 端口被安全组改了。嗯,这里要注意,连不上时先检查这几点:

  • 网络通不通:ping server_ip,不通就先查防火墙/安全组
  • 端口是否开放:telnet server_ip 22 或 nc -vz server_ip 22
  • 密钥权限对不对:~/.ssh 目录权限必须是 700,authorized_keys 是 600
  • 服务是否运行:systemctl status sshd 或 service sshd status

⚠️ 安全红线:永远不要在生产环境使用 root 密码登录。建议在 /etc/ssh/sshd_config 中设置 PermitRootLogin prohibit-password 并 PasswordAuthentication no。

3.2 文件操作:日常工作的基本功

文件操作是 Linux 里最频繁的动作。说白了,你部署应用、改配置、看日志,全在跟文件打交道。

3.2.1 常用命令速查

命令 用途 常用参数
ls 列出目录内容 -lh 人性化显示,-la 显示隐藏文件
cp 复制文件/目录 -r 递归复制目录,-p 保留属性
mv 移动或重命名 源和目标在同一目录就是重命名
rm 删除文件/目录 -rf 强制递归删除(慎用!)
find 查找文件 -name "*.log" 按名字,-mtime +7 按修改时间
grep 搜索文件内容 -r 递归,-n 显示行号,-i 忽略大小写

3.2.2 文件权限与归属

我记得有一次部署新服务,启动脚本一直报权限错误。查了半天,原来是配置文件的所有者是 root,而应用是用 www-data 用户跑的。你想想看,权限不对,服务能正常才怪。

# 修改文件所有者
chown user:group file.txt

# 修改权限(数字法)
chmod 755 script.sh    # rwxr-xr-x
chmod 644 config.conf  # rw-r--r--

# 递归修改目录
chown -R deploy:deploy /app/

权限速记口诀:r=4, w=2, x=1。755 就是所有者有全部权限(7),组和其他人只有读和执行(5)。

3.3 进程管理:让服务稳定运行

进程管理是线上排障的核心技能。服务挂了、CPU 飙高了、内存泄漏了——这些场景你早晚会遇到。

3.3.1 查看进程状态

我个人最常用的组合是 ps aux 配合 grep,快速定位目标进程。

# 查看所有进程
ps aux

# 查找特定进程
ps aux | grep nginx

# 动态监控(类似 Windows 的任务管理器)
top

# 更友好的监控(推荐)
htop

3.3.2 进程信号与控制

我曾经在线上误杀了数据库进程,还好有备份。从那以后,我杀进程前一定会先确认 PID。

信号 编号 行为 使用场景
SIGTERM 15 优雅终止 正常关闭服务,进程会清理资源
SIGKILL 9 强制杀死 进程无响应时使用,不会清理资源
SIGHUP 1 重载配置 让 nginx、sshd 等重新读取配置文件
SIGINT 2 中断 相当于 Ctrl+C,终止前台进程
# 优雅停止
kill -15 PID

# 强制杀死(最后手段)
kill -9 PID

# 重载配置(不中断服务)
kill -1 PID

# 按名字杀进程(小心误杀)
pkill -f "process_name"

⚠️ 杀进程原则:先 SIGTERM,等 5 秒没反应再用 SIGKILL。直接 kill -9 可能导致数据丢失或文件损坏。

3.4 环境变量配置:让应用找到「家」

环境变量说白了就是给程序指路的。Java 要找 JAVA_HOME,Python 要找 PYTHONPATH,这些全得靠环境变量。

3.4.1 环境变量作用域

不同的配置文件,生效范围不一样。我见过有人把配置写在 /etc/profile 里,结果非登录 Shell 不生效,排查了半天。

配置文件 生效范围 加载时机
/etc/environment 所有用户、所有 Shell 系统启动时
/etc/profile 所有用户的登录 Shell 用户登录时
~/.bashrc 当前用户的交互式非登录 Shell 打开终端时
~/.bash_profile 当前用户的登录 Shell 用户登录时
~/.profile 当前用户的登录 Shell(备用) 如果 .bash_profile 不存在则加载

3.4.2 配置与验证

我个人习惯把应用相关的环境变量统一放在 /etc/profile.d/ 下,每个应用一个文件,方便管理。

# 创建自定义环境变量文件
sudo vim /etc/profile.d/myapp.sh

# 文件内容示例
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export APP_HOME=/opt/myapp
export APP_ENV=production

# 使配置生效
source /etc/profile.d/myapp.sh

# 验证
echo $JAVA_HOME
echo $APP_ENV

调试技巧:如果环境变量不生效,用 env 命令查看当前所有变量,或者用 echo $VARIABLE_NAME 逐个检查。我曾经用 strace 跟踪进程的环境变量加载过程,虽然有点重,但确实能定位到深层问题。

3.4.3 常见坑点

  • 变量名拼写错误:Linux 是大小写敏感的,JAVA_HOME 和 java_home 是两个变量
  • 忘记 export:不加 export 的变量只在当前 Shell 有效,子进程拿不到
  • 路径写死:尽量用 $变量 拼接路径,方便后续迁移
  • 覆盖系统变量:修改 PATH 时记得保留原有路径:export PATH=$NEW_PATH:$PATH

一句话总结:SSH 是门,文件操作是手,进程管理是眼,环境变量是路。四者配合好了,你在 Linux 上基本就能横着走了。