你发一条微信,对方秒回。你点开一个网页,内容瞬间加载。你叫一辆网约车,司机两分钟就接单了。这些事情背后都有同一台机器在工作——服务器。
服务器是什么?说白了,它就是一台电脑。和你桌上那台笔记本电脑一样,有CPU、有内存、有硬盘、有网卡。没什么神秘的。
那它和你电脑的区别在哪?两件事:开机时间和同时服务的人数。 你的电脑:你用的时候开机,不用就关。一次服务一个人。服务器:一年365天不关机。同时给几千甚至几万人服务。你可以这样理解:你的电脑是一个私人厨师,一次只做一个人的饭。服务器是一个大型食堂,同时给几百人供餐。
服务器里装的是什么系统
你电脑上装的是Windows或者macOS。服务器上装的,绝大多数是Linux。
Linux也是一个操作系统,和Windows一样管理着电脑的一切——硬件驱动、文件存储、网络连接、软件运行。只不过它没有漂亮的桌面图标,没有开始菜单,你看到的是一个黑底白字的命令行窗口,光标一闪一闪地等你输入命令。
为什么要用这么"原始"的东西?因为服务器不需要"好看",它需要"稳定、快速、省钱"。
你在Windows上装一个软件,要点击"下一步"七八次。在Linux上,一行命令就搞定:
apt install nginx
回车,安装完成。没有下一步,没有弹窗,没有"是否设为首页"。
再比如,你想让一个程序在后台一直跑。Windows上要配置服务、写脚本。Linux上:
nohup python app.py &
一行命令,程序就在后台跑起来了,关掉窗口也不会停。全球排名前十的网站——Google、Amazon、百度、淘宝——全部跑在Linux上。不是因为没有别的选择,而是因为在服务器的世界里,Linux就是最合适的工具。
SSH:怎么操作一台远程的机器
你不需要坐在服务器旁边——它可能在另一个城市的数据中心。你只需要在自己的电脑上打开一个终端,输入一条命令就能连上去:
ssh admin@47.100.50.***
这条命令翻译成人话就是:用"admin"这个身份,连接到IP地址是"47.100.50.***"的机器。输入密码,你就"进去"了。
你的屏幕上出现的提示符大概长这样:
admin@server:~$
root是超级管理员,admin是普通用户。普通用户权限有限,做危险操作时要加sudo临时提权。
三个最常用的命令,先学会这三个
登录之后,先认识三个最基本的命令。
pwd——"我现在在哪?"
admin@server:~$ pwd/home/admin
pwd就是Print Working Directory,告诉你当前在哪个目录下。Linux的目录结构是一棵倒着的树:最上面是根目录/,下面分出很多分支——/etc放配置,/var放日志,/usr放软件,/home放用户文件。
ls——"这里有什么?"
admin@server:~$ lsconfig.yml data logs script.sh
ls就是"列出"——列出当前目录下的所有文件和文件夹。
加-l参数看详细信息:-开头是文件,d开头是文件夹;后面的字母是权限,r是读,w是写,x是执行。
cd——"去另一个地方"
cd /var/log # 去日志目录cd .. # 回到上一级cd ~ # 回到家目录cd / # 回到根目录
三个命令组合起来:pwd看自己在哪,ls看周围有什么,cd移动到你想去的地方。学会这三个,你就能在整台服务器上自由走动。
看文件、改文件、删文件
看文件内容
cat config.yml # 显示全部内容head -20 config.yml # 只看前20行tail -20 config.yml # 只看后20行tail -f error.log # 实时盯着日志,新内容出现就显示
tail -f是排查线上问题最常用的命令——它像实时监控屏幕,程序一报错你就看到了。
改文件
新手推荐用nano:
nano config.yml
打开后直接打字,和记事本一模一样。改完之后按Ctrl+O保存,回车确认,再按Ctrl+X退出。
vim更强大但学习曲线陡——很多人第一次用vim,打开文件后连怎么退出都找不到(按Esc,然后输入:q回车)。等熟悉Linux再用vim,初期nano完全够。
创建、复制、移动、删除
touch newfile.txt # 创建空文件mkdir myfolder # 创建文件夹cp config.yml config.bak # 复制文件(另存为)mv oldname.txt newname.txt # 移动文件,或重命名rm useless.txt # 删除文件(不可恢复!)
Linux删除文件没有回收站。删了就是删了。 所以删之前想清楚,或者养成习惯:改文件之前先cp一份备份。
搜索内容
grep "error" /var/log/syslog # 在日志里搜"error"find / -name "nginx.conf" # 找nginx.conf在哪
grep是你以后用得最多的命令之一。服务器出了问题,第一反应就是grep看日志。
装软件和管理服务
安装软件
Ubuntu系统用apt:
apt update # 先更新软件源列表apt install nginx # 安装nginx
CentOS系统用yum或dnf:
yum install nginx
卸载的话,把install换成remove。
管理服务
装完软件后,怎么启动、停止、设置开机自启?
systemctl start nginx # 启动systemctl stop nginx # 停止systemctl restart nginx # 重启systemctl status nginx # 查看状态(绿色active就是正在运行)systemctl enable nginx # 设置开机自动启动
systemctl后面跟的是服务名。服务就是一个在后台一直跑的程序。nginx是一个服务,MySQL是一个服务,你写的Python脚本也可以配成一个服务。
排查问题从哪入手
服务器出问题了,从哪查起?
看状态。systemctl status nginx——服务是不是在跑?如果是红色failed,说明服务挂了。
看日志。tail -f /var/log/nginx/error.log——有什么错误信息?最近一行报错是什么时间?
看资源。df -h——硬盘是不是快满了?top——CPU是不是被某个进程吃满了?
测试配置。nginx -t——nginx配置文件有没有语法错误?每次改完配置都要先跑一遍这个命令。
一个标准排查流程:服务状态→错误日志→系统资源→配置文件语法。按这个顺序,大多数问题5分钟内能找到原因。
三条最重要的忠告
第一:不要用root账户做日常操作。
root权限太大。rm -rf /这一条命令就能删掉服务器上的全部数据。日常用普通用户登录,需要管理员权限时加sudo:
sudo systemctl restart nginx
第二:改配置之前先备份。
cp config.yml config.yml.bak
改坏了就恢复:cp config.yml.bak config.yml。这个习惯能救你无数次。
第三:不确定的命令先查,不要猜。
Linux命令没有"试一下看看会怎样"的余地。rm删错文件就是删错了,没有撤回。敲回车之前,花10秒钟在搜索引擎里搜一下这条命令会做什么。
Linux服务器看起来门槛高,但常用命令就二十来个:pwd、ls、cd、cat、tail、grep、nano、apt、systemctl、top、df。掌握这些,你就能完成80%的服务器日常操作。剩下的遇到再搜就行。
最好的学习方式是:花几十块钱买一台最便宜的云服务器,自己上去敲。 敲错了也不怕——大不了重装系统,几分钟恢复如初。