操作系统

Linux运维基础技能: 接入层与网络基础

本系列文章一共三篇,分别为《脚本编程与 Linux 命令》、《接入层与网络基础》和《 MySQL 与 SQL 优化》,由腾讯高级工程师 luaruan(阮永顺) 原创、张戈博客整理分享,如有勘误请在博客留言。 希望对需要学习、面试 Linux 运维的同学有所帮助。 MSS与MTU的区别,默认大小各是多少? 标准以太网接口缺省的MTU(最大传输单元)为1500 字节,是最大帧1518减去源宿的MAC、FCS后最大的IP packet大小; MTU减去20字节IP包头减去20字节TCP包头 ,即是MSS,1460字节 一台交换机要保证接口MTU的一致性。如果在一个VLAN上、或整个交换机都采用同样的MTU,避免一些奇怪的问题 参考:https://www.zhihu.com/question/21524257 TIME_WAIT 与CLOSE_WAIT 的区别 主动关闭连接的一方进入TIME_WAIT ,若客户端高并发访问HTTP接口又没有使用会话或者线程池机制,可能会导致本地端口耗尽。 CLOSE_WAIT 出现在被动断开连接。可能常见在Server端,例如在Netty的I/O线程里做DB读写、日志记录这种不可控的阻塞行为,可能会引发客户端超时。 如何查看机器上所有的tcp连接? natstat -ant netstat -antp 如何统计time_wait 状态的连接? IP 包头大小? 20 字节 url.cn 是几级域名? -- 二级 www.qq.com 是几级域名? -- 三级 url.cn 可以CNAME到 demo.te.isc.demo-cloud.net 吗? 不建议这么操作,实际上很多场合是不可以这么操作的。 https://serverfault.com/questions/613829/why-cant-a-cname-record-be-used-at-the-apex-aka-root-of-a-domain 递归解析与迭代解析的区别? 先理解13组根DNS服务器、顶级域DNS服务器(各解析.com .net .gov 等)、权威DNS服务器、本地DNS服务器。 考虑浏览器客户端访问www.qq.com ,会向小区宽带的本地DNS查询域名解析IP ,而本地DNS会向根DNS、顶级域DNS、权威DNS逐个查询。 从客户端到本地DNS的查询是递归的;而其余的查询是迭代的。(参考《自顶向下理解计算机网络》89页) x-forwarded-for 与 remote_addr 的区别? X-Forwarded-For: client1, proxy1, proxy2 <proxy1>, <proxy2>如果一个请求经过了多个代理服务器,那么每一个代理服务器的IP地址都会被依次记录在内。也就是说,最右端的IP地址表示最近通过的代理服务器,而最左端的IP地址表示最初发起请求的客户端的IP地址。 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/X-Forwarded-For 鉴于伪造这一字段非常容易,应该谨慎使用X-Forwarded-For字段。正常情况下XFF中最后一个IP地址是最后一个代理服务器的IP地址 remote_addr 是通讯客户端与服务器实际进行TCP通信的IP IPv4地址分类 (IPv4地址32位) A 类 0.0.0.0/8 127.255.255.255 结束 B 类 128.0.0.0/16 191.255.255.255 结束 C 类 192.0.0.0/24 D 类 224.0.0.0~239.255.255.255 192.168.2.47/26 这个子网的开始IP 和结束IP是? (32-26)=6 , 2^6 = 64...
阅读全文
操作系统

Linux运维基础技能: 脚本编程与Linux命令

本系列文章一共三篇,分别为《脚本编程与Linux命令》、《接入层与网络基础》和《 MySQL 与 SQL 优化》,由腾讯高级工程师 luaruan(阮永顺) 原创、张戈博客整理分享,如有勘误请在博客留言。 希望对需要学习、面试Linux运维的同学有所帮助。 $1 入参,空值时默认赋值技巧 $* 和 [email protected] 区别 $* 和 [email protected] 都表示传递给函数或脚本的所有参数,不被双引号(" ")包含 时,都以"$1" "$2" … "$n" 的形式输出所有参数。 但是当它们被双引号(" ")包含时,"$*" 会将所有的参数作为一个整体, 以"$1 $2 … $n"的形式输出所有参数;" [email protected]" 会将各个参数分开,以"$1" "$2" … "$n" 的形式输出所有参数。 区别在于,分别输出 1 2 3 和 1 2 3 几个 Shell 里的内置变量 Tips: awk 教程 https://coolshell.cn/articles/9070.html sed 教程 https://coolshell.cn/articles/9104.html Shell script 基础问答 https://linux.cn/article-5607-1.html Shell 四则运算方法 函数定义与调用 条件判断 字符串与序列、随机数 name=John && echo 'My name is $name' 输出'My name is $name ,因为单引号里面的$只会当作字面值 字符串截取 a=123456789 ; echo ${a:0:3} 输出 123 echo 替换字符 序列 随机数 使用 cksum 从管道灌进去一些随机文本可生成一些随机数字,需要使用 cut 切 割 字符串截取 提取最后一位 日期 删除空行 Shell script 语法在线检查与建议:https://www.shellcheck.net...
阅读全文
操作系统

替代crontab,统一定时任务管理系统cronsun简介

cronsun 是一个分布式任务系统,单个节点和 Linux 机器上的 crontab 近似。是为了解决多台 Linux  机器上 crontab 任务管理不方便的问题,同时提供任务高可用的支持(当某个节点死机的时候可以自动调度到正常的节点执行)。支持界面管理机器上的任务,支持任务失败邮件提醒,安装简单,使用方便,是替换 crontab 一个不错的选择。
阅读全文
操作系统

远程桌面报错解决:No Remote Desktop License Servers Available

用户发来反馈,使用部门Windows跳板机报错:The remote session was disconnected because there are no Remote Desktop License Servers available to provide a license.Please contact the server administrator,最后发现是微软RDP远程桌面套件的一个BUG,可通过安装微软补丁或修改注册表来解决,本文简单记录分享下解决过程...
阅读全文
操作系统

Linux系统LVM逻辑卷创建过程以及自动化脚本

最近在上海新建机房的时候,给了我2台M2机型服务器,在做初始化的时候发现有一堆磁盘: 其中挂载的只有 /dev/sda,其他都在那闲着。运管那边告诉我这个机型不能做raid。而根据我这边的业务需求,我并不能一次用到这么多分区,所以必须使用LVM合并使用。 关于LVM的创建,目前网络上一堆详细教程,用起来也非常简单,这里就只贴一下我的过程。 ①、用fdisk给每一个磁盘创建一个8e分区: 这样就完成了一块磁盘,接着我们依次将其他 sdc到sdl的磁盘也操作一把。 ②、全部完成后,使用 pvcreate 将所有分区转化成物理卷,即添加LVM属性信息并划分PE存储单元: 创建完PV之后,就可以使用 pvdisplay 或 pvs 查看详细信息了,篇幅有限,这里我就不贴了。 ③、下面我们需要创建一个VG,然后PV都加入到这个卷组当中,卷名可自定义,比如 vg: 同样,在创建好VG以后,我们也可以使用 vgdisplay 或者 vgs 命来来查看VG的信息(略) ④、接着,使用 lvcreate 命令基于VG创建逻辑卷,vg 和 lvm 我们自定义的名称: 同样我们可以使用 lvdisplay 或者 lvs 命令来查看创建好的逻辑卷的信息(略) ⑤、格式化创建的逻辑卷: ⑥、挂载分区: 这样,我们就完成了LVM的手工创建过程了,我还有一台M2要弄,而且听运管说以后会继续交付这类机型,我可不想这么苦逼的操作了,光那个创建8e格式分区就已经很坑了。 所以,就将上面的操作串成脚本,一键完成: 哦了,就写这么多,以备后用。
阅读全文
操作系统

Linux系统 df 命令显示异常、分区丢失问题解决

本文记录2种因 /etc/mtab 文件异常导致 df 命令显示异常、分区丢失问题的解决过程,以备后用。 一、根目录丢失 前些日子,同事在RTX群里问大家,有台服务器执行 df -h 看不到根目录,该如何解决? 于是我帮忙解决了一把,看了下 /etc/fstab 内容,根目录挂载信息是正常的: 接着,看了下 /etc/mtab 文件内容,发现根目录缺失: 执行 grep -v rootfs /proc/mounts 命令进行修复: 可以看到,根目录已经出现了,再执行 df -h 就正常了: 二、df命令报错 帮同事解决问题后,不巧自己负责的服务器也出现类似问题,执行 df 命令报如下错误: df: cannot read table of mounted file systems: No such file or directory 想着应该可以上述问题原因一样,所以直接执行修复命令,发现报错: 看来是空间不足,找了下发现是 maildrop 目录把根目录撑爆了: 直接清空,在执行 grep -v rootfs /proc/mounts >/etc/mtab 命令进行修复: 已经正常了,maildrop 爆满的问题一般是 crontab 未屏蔽错误造成的,于是顺手将crontab 里面的条目都带上了 2>&1 屏蔽了,下次应该不会出现因为目录爆满导致 mtab 异常的情况了。 三、区别与联系 继续记录一下/etc/fstab和/etc/mtab的区别和联系。 /etc/fstab 文件记录了服务器上硬盘分区信息,启动 Linux 的时候,检查分区的 fsck 命令和挂载分区的 mount 命令都需要 fstab 中的信息,来检查和挂载分区。 /etc/mtab 文件记载的是现在系统已经装载的文件系统,包括操作系统建立的虚拟文件等,每当 mount 挂载分区、umount 卸载分区,都会动态更新 mtab,mtab总是保持着当前系统中已挂载的分区信息,fdisk、df 这类程序,必须要读取 mtab 文件,才能获得当前系统中的分区挂载情况。 当然我们自己还可以通过读取/proc/mount也可以来获取当前挂载信息(即使用文章中用到的修复命令 grep -v rootfs /proc/mounts)。 当 /etc/mtab 因为磁盘满或文件系统异常,导致该文件内缺失常或直接为空,就会出现上文记录的问题了。
阅读全文