Linux操作系统是目前互联网研发工程师最常用的操作系统,无论是前端还是后端或者客户端同学,都会接触到。尤其对后端工程师来说,不了解linux系统,几乎寸步难行。我在面试中常常碰到应聘者连最基本的linux操作都不会,最常用的命令也不知道,那么很难说他可以胜任一份研发工程师的工作。
对于一些比较负载或者功能强大的shell命令,可能用到的少,不会情有可原,但是如何查看机器的配置,一些常见的文件操作,vim命令等应该是最基本的。
操作系统
1.如何查看系统基本配置
内存:free -m / -g
磁盘 :df -h , du -sh *
cpu 核数: top
查看系统配置:ulimit -a 比如文件句柄数,core文件数
2. 如何分析系统负载
top 看load average, 如果这个值超过了核数就表示负载比较高, 或者一般不超过70%说明系统还算比较稳定。比如8核,如果load average不超过8表示负载还可以。
top命令还可以分析系统的运行任务数,用户,内存等情况。
3.如何查看本机网络链接情况
netstat 命令
netstat命令可以查看与IP,TCP,UDP和ICMP相关的统计。显示网络连接,路由表和网络接口信息。
注意TIME_WAIT状态,TIME_WAIT表示当客户端断开连接后要等待一段时间确定是否还有没有发完的信息。
4.如何查看本机主机名,ip,查看是否有出口ip?
hostname, ifconfig, hostname -i, curl ifconfig.me
5.查看进程状态
ps命令
ps命令可以查看进程的状态,pid,运行事件等信息,配合grep命令可以过滤。
6.文件相关命令
head:取头部
tail:取尾部
cat:查看整个文件
grep:过滤条件
awk,sed:统计分析文件等操作
5.进程与多进程
进程是运行中的程序,我们自己写的程序运行起来就是一个或多个进程。计算机中的很多软件运行起来也是进程。在linux系统下可以通过fork机制生成子进程,子进程不占用父进程的资源,可以独立运行。
6.线程与多线程
线程是操作系统可以调度的最小单元,线程是进程的子集。一个进程可以有多个并发线程,可以用来做不同的事情。Linux可以通过pthread生成线程。
网络
1. 如何查看网络是否通还有延迟情况?
ping命令可以用来测试网络联通情况,延迟情况,还有查看对方ip。
2. ping命令的回复是什么?
pong
3.tcp协议与udp协议区别?
tcp是面向连接的,可以保证不丢有序。udp是无连接的,不保证安全。tcp通过三次握手建立连接,四次挥手断开连接。tcp还可以进行拥塞控制,流量控制。tcp是通过字节流的方式传递数据,udp是以数据报文的方式。udp的优点就是更快,占用系统资源更少。
HTTP
http协议的数据格式是请求行,请求头,请求正文。请求行包括协议,scheme,方法等。至少要知道方法有get,post,delete,put,trace,options等。
1. http请求头与含义
request header
accept: 表示客户端接收的一些要求
accept-encoding:客户端接受的编码
cookie: 客户端携带的用户标识
cache-control:max-age=0 接受的cache时间
Cache-Control:Public 可以被任何缓存所缓存
Cache-Control:Private 内容只缓存到私有缓存中
Cache-Control:no-cache 所有内容都不会被缓存
user-agent:用户代理信息,包含客户端版本,系统版本等。
referer:当前请求是从哪个请求跳转过来的
host: 请求域名
Connection:是否保持连接
If-Modified-Since: 如果自某个时间后没有修改就返回304状态码。
If-None-Match: 与Etag一起使用,如果请求时带上值是etag的If-None-Match,服务器会比对,如果没有变就返回304状态码。
2. http返回头response header
Expires: 失效时间,cache缓存相关
Content-Type : 文本类型
Content-Length :长度
Content-Encoding :编码
ETag: 与If-None-Match一起使用,如果请求时带上值是etag的If-None-Match,服务器会比对,如果没有变就返回304状态码。
Status:返回状态码
Last-Modified: 上次修改时间
Http各种状态码的含义
1xx表示服务器成功接收到请求,继续处理。(用的不多)
2xx表示成功,
3xx重定向相关
4xx客户端错误
5xx服务器错误
自定义错误码:根据服务器业务需求自己定义。
200 OK
最常见的是200
301 永久重定向
表示资源被永久删除
302 临时重定向
新的url会以location头返回
304没有修改
资源自从上次访问后没有变
400 Bad Request
客户端语法错误
403 Forbidden
请求未授权,或者服务器禁掉了对方的ip或者封禁请求。
404 Not Found
请求的资源不存在,可能是url写错了
499 客户端断开
常见在服务端还没有返回请求结果,客户端主动断开连接
500 Internal Server Error 服务器错误
常见的代码逻辑错误
502 Bad Network 服务器网关错误
常见的是服务器上游服务返回错误信息,或者php-fpm超时或者负载过高,或者并发请求过高php-fpm处理不过来。
503 Server Unavialiable 服务器不可用
一般是网站需要停服维护使用,暂时不可用,后续会恢复
504 Timeout 超时
一般是上游程序执行时间过程,nginx没有在指定时间内收到请求结果。可能是代码没执行完,也可能是读数据库太慢等。
总结
linux是互联网时代很重要的系统,无论是mac,安卓还是ios系统都是基于linux或者Unix的衍生。作为程序员,尤其是web开发几乎都是类lnmp架构,n可以是nginx,openresty,apache或者tomcat,light等,m可以mysql,postgre或者mongodb等,p可以是php,golang,java,python等。但是l几乎都是linux,对于不同的发行版本都离不开linux。所以,对于linux掌握的越熟悉,好处越大。
说实话,我个人的linux熟悉程度只能算是入门级别。虽然工作了5年,但是在linux上还没有下过苦功夫,今后一定要更注意学习linux系统。
TO BE CONTINU
欢迎关注微信公众号『野狐』