Linux 远程服务器操作基础笔记
这篇文章主要记录我在 Linux 远程服务器上常用的基础操作,偏向“够用、能查、能排错”的日常工作流,而不是系统化的 Linux 教程。
后续在使用过程中遇到新的坑、新的命令组合、新的部署经验,我会继续往这里补充,把它维护成一份长期可查的个人笔记。
一、连接服务器
远程服务器最常见的入口是 ssh。
ssh username@server_ipssh username@server_ip如果服务器不是默认的 22 端口:
ssh -p 2222 username@server_ipssh -p 2222 username@server_ip如果使用指定私钥:
ssh -i ~/.ssh/id_ed25519 username@server_ipssh -i ~/.ssh/id_ed25519 username@server_ip常见习惯:
- 优先使用密钥登录,而不是长期依赖密码
- 首次连接时确认指纹,避免连到错误主机
- 给常用服务器写
~/.ssh/config,减少重复输入
示例:
Host myserver
HostName 1.2.3.4
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519Host myserver
HostName 1.2.3.4
User ubuntu
Port 22
IdentityFile ~/.ssh/id_ed25519之后可以直接:
ssh myserverssh myserver二、文件传输
1. scp
适合简单传文件。
本地上传到服务器:
scp local_file username@server_ip:/path/to/remote/scp local_file username@server_ip:/path/to/remote/服务器下载到本地:
scp username@server_ip:/path/to/remote/file ./scp username@server_ip:/path/to/remote/file ./传目录时加 -r:
scp -r ./local_dir username@server_ip:/path/to/remote/scp -r ./local_dir username@server_ip:/path/to/remote/2. rsync
适合同步目录,比 scp 更稳,也更适合反复更新。
rsync -avz ./local_dir/ username@server_ip:/path/to/remote/rsync -avz ./local_dir/ username@server_ip:/path/to/remote/常用理解:
-a保留文件属性-v显示过程-z传输时压缩
如果网络不稳定或者目录较大,我通常优先考虑 rsync。
三、最常用的目录与文件操作
1. 看自己在哪
pwd
ls
ls -lahpwd
ls
ls -lahpwd:当前路径ls -lah:更适合看隐藏文件、权限、文件大小
2. 切换目录
cd /path/to/dir
cd ~
cd ..cd /path/to/dir
cd ~
cd ..3. 创建、复制、移动、删除
mkdir new_dir
mkdir -p a/b/c
cp file1 file2
cp -r dir1 dir2
mv old_name new_name
rm file
rm -r dirmkdir new_dir
mkdir -p a/b/c
cp file1 file2
cp -r dir1 dir2
mv old_name new_name
rm file
rm -r dir需要特别谨慎的命令:
rm -rf some_dirrm -rf some_dir执行 rm -rf 前最好先 pwd、再 ls,确认自己位置没错。
4. 查看文件内容
cat file.txt
less file.txt
head -n 20 file.txt
tail -n 20 file.txt
tail -f app.logcat file.txt
less file.txt
head -n 20 file.txt
tail -n 20 file.txt
tail -f app.logless适合看长文件tail -f适合实时追踪日志
5. 查找内容
grep "keyword" file.txt
grep -r "keyword" .
find . -name "*.log"grep "keyword" file.txt
grep -r "keyword" .
find . -name "*.log"如果系统装了 rg,一般比 grep 更快:
rg "keyword"rg "keyword"四、权限与身份
1. 查看权限
ls -lls -l常见权限位需要大致看懂,例如:
r:读w:写x:执行
2. 修改权限
chmod +x script.sh
chmod 644 file.txt
chmod 755 script.shchmod +x script.sh
chmod 644 file.txt
chmod 755 script.sh3. 修改所有者
chown user:user file.txt
chown -R user:user dir/chown user:user file.txt
chown -R user:user dir/4. 临时提权
sudo commandsudo command原则上:
- 能不用
sudo就不用 - 不要长期直接用
root做日常开发 - 改系统配置前先确认影响范围
五、进程管理
1. 看进程
ps aux
ps aux | grep python
topps aux
ps aux | grep python
top如果系统有 htop,交互体验更好。
2. 杀进程
kill PID
kill -9 PIDkill PID
kill -9 PID一般先用普通 kill,只有进程确实不响应时再考虑 kill -9。
3. 后台运行任务
nohup python app.py > app.log 2>&1 &nohup python app.py > app.log 2>&1 &解释:
nohup:退出终端后继续运行> app.log:标准输出写入日志2>&1:错误输出也写入同一日志&:放到后台
查看后台任务:
jobsjobs不过更稳定的长期方案通常是 tmux 或 systemd,而不是只靠 nohup。
六、tmux 很重要
远程服务器上跑长任务时,tmux 非常有用。断网、关终端后,任务不会直接消失。
创建会话:
tmux new -s traintmux new -s train分离会话:
Ctrl+b dCtrl+b d重新连接:
tmux attach -t traintmux attach -t train查看已有会话:
tmux lstmux ls我的理解是:只要任务不是几秒钟结束,最好都放进 tmux。
七、磁盘、内存与系统状态
1. 看磁盘空间
df -h
du -sh .
du -sh /path/to/dirdf -h
du -sh .
du -sh /path/to/dirdf -h:看整个磁盘分区使用情况du -sh:看某个目录占了多大空间
2. 看内存
free -hfree -h3. 看机器基本信息
uname -a
hostname
whoamiuname -a
hostname
whoami八、网络相关命令
1. 测试连通性
ping 8.8.8.8
curl https://example.com
wget https://example.com/fileping 8.8.8.8
curl https://example.com
wget https://example.com/file2. 看端口占用
ss -tulpn
lsof -i :8000ss -tulpn
lsof -i :8000这类命令在排查“服务起了但访问不到”时很有用。
3. 检查防火墙或监听地址
常见问题不一定是程序没启动,也可能是:
- 只监听了
127.0.0.1 - 服务器防火墙没放行端口
- 云平台安全组没开端口
所以看到“连接失败”时,不要只盯着代码本身。
九、服务管理与日志
如果服务由 systemd 管理,常见命令有:
sudo systemctl status nginx
sudo systemctl restart nginx
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl enable nginxsudo systemctl status nginx
sudo systemctl restart nginx
sudo systemctl start nginx
sudo systemctl stop nginx
sudo systemctl enable nginx查看日志:
journalctl -u nginx
journalctl -u nginx -n 100
journalctl -u nginx -fjournalctl -u nginx
journalctl -u nginx -n 100
journalctl -u nginx -f我的习惯是:
- 先看服务状态
- 再看最近日志
- 最后再去怀疑代码逻辑
十、开发环境相关
1. Git
git status
git pull
git branch
git log --oneline -n 5git status
git pull
git branch
git log --oneline -n 5在服务器直接改代码时要格外小心,尤其是生产环境。
2. Python 虚拟环境
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtpython3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt退出虚拟环境:
deactivatedeactivate3. 环境变量
临时设置:
export API_KEY=xxxexport API_KEY=xxx写入 ~/.bashrc 或 ~/.zshrc 后可长期生效,但涉及密钥时要注意权限与泄露风险。
十一、常见排错思路
遇到问题时,我更希望自己按固定顺序排,而不是上来就乱试。
1. 先确认自己在哪台机器上
hostname
pwd
whoamihostname
pwd
whoami有时候最离谱的问题不是命令错了,而是机器登错了。
2. 再确认服务是否真的在跑
ps aux | grep service_name
ss -tulpnps aux | grep service_name
ss -tulpn3. 再看日志
tail -f app.log
journalctl -u service_name -ftail -f app.log
journalctl -u service_name -f4. 再看资源是否打满
top
free -h
df -htop
free -h
df -h5. 最后再考虑权限、网络和配置
重点检查:
- 配置文件路径是否正确
- 端口是否开放
- 文件权限是否足够
- 环境变量是否生效
- 依赖是否安装完整
十二、安全习惯
这些不是高深技巧,但非常有必要:
- 优先使用 SSH 密钥登录
- 不随意开放所有公网端口
- 不把密码、私钥、Token 明文放进仓库
- 重要操作前先备份配置文件
- 不直接在生产环境做未经验证的实验
- 使用
history、日志和脚本记录关键操作
我觉得“少犯低级错误”本身就是服务器使用能力的一部分。
十三、我会持续补充的内容
后续准备继续加入这些部分:
vim/nano的基础编辑操作conda、CUDA、PyTorch 远程环境配置- Nginx 反向代理与 HTTPS
- Docker 基础使用
- 定时任务
crontab - Jupyter Notebook 远程端口转发
结语
对于远程服务器操作,我目前的目标不是背下所有命令,而是建立一套稳定的工作习惯:
- 先确认环境
- 再执行命令
- 先看日志
- 谨慎改权限
- 长任务放进
tmux
只要这几个基础动作逐渐熟练,很多服务器问题都不会再显得特别混乱。