服务器|云|数据中心

服务器|云主机|vps|站群

存档七月 2019

美国KT机房,双程CN2网络!!更稳定,速度更快!!

谢谢各位朋友支持,美国KT机房上半年不仅因此购买了更多带宽,也提升了三倍的CN2质量,大受好评。

KT机房宣布:美国KT机房优化网络是100%双程CN2了!欢迎购买我们产品!!

另外:七月份美国服务器E3服务器月付85折,季付起65折。

美国KT机房新至强E-2146G/32G内存/G口/1TB SSD硬盘特价1299元 (Linux)/1399元(Win标准版)

联系QQ:2355257965  或   189323783

手机/微信:14714852695

联系QQ:2355257965  或 189323783

手机/微信:14714852695

网址:http://f.sendong.com

博客:http://www.zhuhanxuan.com

运维老司机总结:最常用的150个命令

说到运维大家总是想到的是修网络的,其实就修网络的学问也是很大的,现在来听听一位老运维总结下在运维工程中,常用的150个命令汇总。

运维/命令/网络

线上查询及帮助命令(2个)

  • man:查看命令帮助,命令的词典,更复杂的还有info,但不常用。
  • help:查看Linux内置命令的帮助,比如cd命令。

文件和目录操作命令(18个)

  • ls:全拼list,功能是列出目录的内容及其内容属性信息。
  • cd:全拼change directory,功能是从当前工作目录切换到指定的工作目录。
  • cp:全拼copy,其功能为复制文件或目录。
  • find:查找的意思,用于查找目录及目录下的文件。
  • mkdir:全拼make directories,其功能是创建目录。
  • mv:全拼move,其功能是移动或重命名文件。
  • pwd:全拼print working directory,其功能是显示当前工作目录的绝对路径。
  • rename:用于重命名文件。
  • rm:全拼remove,其功能是删除一个或多个文件或目录。
  • rmdir:全拼remove empty directories,功能是删除空目录。
  • touch:创建新的空文件,改变已有文件的时间戳属性。
  • tree:功能是以树形结构显示目录下的内容。
  • basename:显示文件名或目录名。
  • dirname:显示文件或目录路径。
  • chattr:改变文件的扩展属性。
  • lsattr:查看文件扩展属性。
  • file:显示文件的类型。
  • md5sum:计算和校验文件的MD5值。

查看文件及内容处理命令(21个)

  • cat:全拼concatenate,功能是用于连接多个文件并且打印到屏幕输出或重定向到指定文件中。
  • tactac:是cat的反向拼写,因此命令的功能为反向显示文件内容。
  • more:分页显示文件内容。
  • less:分页显示文件内容,more命令的相反用法。
  • head:显示文件内容的头部。
  • tail:显示文件内容的尾部。
  • cut:将文件的每一行按指定分隔符分割并输出。
  • split:分割文件为不同的小片段。
  • paste:按行合并文件内容。
  • sort:对文件的文本内容排序。
  • uniq:去除重复行。oldboy
  • wc:统计文件的行数、单词数或字节数。
  • iconv:转换文件的编码格式。
  • dos2unix:将DOS格式文件转换成UNIX格式。
  • diff:全拼difference,比较文件的差异,常用于文本文件。
  • vimdiff:命令行可视化文件比较工具,常用于文本文件。
  • rev:反向输出文件内容。
  • grep/egrep:过滤字符串,三剑客老三。
  • join:按两个文件的相同字段合并。
  • tr:替换或删除字符。
  • vi/vim:命令行文本编辑器。

文件压缩及解压缩命令(4个)

  • tar:打包压缩。oldboy
  • unzip:解压文件。
  • gzipgzip:压缩工具。
  • zip:压缩工具。

信息显示命令(11个)

  • uname:显示操作系统相关信息的命令。
  • hostname:显示或者设置当前系统的主机名。
  • dmesg:显示开机信息,用于诊断系统故障。
  • uptime:显示系统运行时间及负载。
  • stat:显示文件或文件系统的状态。
  • du:计算磁盘空间使用情况。
  • df:报告文件系统磁盘空间的使用情况。
  • top:实时显示系统资源使用情况。
  • free:查看系统内存。
  • date:显示与设置系统时间。
  • cal:查看日历等时间信息。

搜索文件命令(4个)

  • which:查找二进制命令,按环境变量PATH路径查找。
  • find:从磁盘遍历查找文件或目录。
  • whereis:查找二进制命令,按环境变量PATH路径查找。
  • locate:从数据库 (/var/lib/mlocate/mlocate.db) 查找命令,使用updatedb更新库。

用户管理命令(10个)老男孩

  • useradd:添加用户。
  • usermod:修改系统已经存在的用户属性。
  • userdel:删除用户。
  • groupadd:添加用户组。
  • passwd:修改用户密码。
  • chage:修改用户密码有效期限。
  • id:查看用户的uid,gid及归属的用户组。
  • su:切换用户身份。
  • visudo:编辑/etc/sudoers文件的专属命令。
  • sudo:以另外一个用户身份(默认root用户)执行事先在sudoers文件允许的命令。

基础网络操作命令(11个)老男孩

  • telnet:使用TELNET协议远程登录。
  • ssh:使用SSH加密协议远程登录。
  • scp:全拼secure copy,用于不同主机之间复制文件。
  • wget:命令行下载文件。
  • ping:测试主机之间网络的连通性。
  • route:显示和设置linux系统的路由表。
  • ifconfig:查看、配置、启用或禁用网络接口的命令。
  • ifup:启动网卡。
  • ifdown:关闭网卡。
  • netstat:查看网络状态。
  • ss:查看网络状态。

深入网络操作命令(9个)

  • nmap:网络扫描命令。
  • lsof:全名list open files,也就是列举系统中已经被打开的文件。
  • mail:发送和接收邮件。
  • mutt:邮件管理命令。
  • nslookup:交互式查询互联网DNS服务器的命令。
  • dig:查找DNS解析过程。
  • host:查询DNS的命令。
  • traceroute:追踪数据传输路由状况。
  • tcpdump:命令行的抓包工具。

有关磁盘与文件系统的命令(16个)

  • mount:挂载文件系统。
  • umount:卸载文件系统。
  • fsck:检查并修复Linux文件系统。
  • dd:转换或复制文件。
  • dumpe2fs:导出ext2/ext3/ext4文件系统信息。
  • dumpe:xt2/3/4文件系统备份工具。
  • fdisk:磁盘分区命令,适用于2TB以下磁盘分区。
  • parted:磁盘分区命令,没有磁盘大小限制,常用于2TB以下磁盘分区。
  • mkfs:格式化创建Linux文件系统。
  • partprobe:更新内核的硬盘分区表信息。
  • e2fsck:检查ext2/ext3/ext4类型文件系统。
  • mkswap:创建Linux交换分区。
  • swapon:启用交换分区。
  • swapoff:关闭交换分区。
  • sync:将内存缓冲区内的数据写入磁盘。
  • resize2fs:调整ext2/ext3/ext4文件系统大小。

系统权限及用户授权相关命令(4个)

  • chmod:改变文件或目录权限。
  • chown:改变文件或目录的属主和属组。
  • chgrp:更改文件用户组。
  • umask:显示或设置权限掩码。

查看系统用户登陆信息的命令(7个)

  • whoami:显示当前有效的用户名称,相当于执行id -un命令。
  • who:显示目前登录系统的用户信息。
  • w:显示已经登陆系统的用户列表,并显示用户正在执行的指令。
  • last:显示登入系统的用户。
  • lastlog:显示系统中所有用户最近一次登录信息。
  • users:显示当前登录系统的所有用户的用户列表。
  • finger:查找并显示用户信息。

内置命令及其它(19个)

  • echo:打印变量,或直接输出指定的字符串
  • printf:将结果格式化输出到标准输出。
  • rpm:管理rpm包的命令。
  • yum:自动化简单化地管理rpm包的命令。
  • watch:周期性的执行给定的命令,并将命令的输出以全屏方式显示。
  • alias:设置系统别名。
  • unalias:取消系统别名。
  • date:查看或设置系统时间。
  • clear:清除屏幕,简称清屏。
  • history:查看命令执行的历史纪录。
  • eject:弹出光驱。
  • time:计算命令执行时间。
  • nc:功能强大的网络工具。
  • xargs:将标准输入转换成命令行参数。
  • exec:调用并执行指令的命令。
  • export:设置或者显示环境变量。
  • unset:删除变量或函数。
  • type:用于判断另外一个命令是否是内置命令。
  • bc:命令行科学计算器

系统管理与性能监视命令(9个)

  • chkconfig:管理Linux系统开机启动项。
  • vmstat:虚拟内存统计。
  • mpstat:显示各个可用CPU的状态统计。
  • iostat:统计系统IO。
  • sar:全面地获取系统的CPU、运行队列、磁盘 I/O、分页(交换区)、内存、 CPU中断和网络等性能数据。
  • ipcs:用于报告Linux中进程间通信设施的状态,显示的信息包括消息列表、共享内存和信号量的信息。
  • ipcrm:用来删除一个或更多的消息队列、信号量集或者共享内存标识。
  • strace:用于诊断、调试Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。
  • ltrace:命令会跟踪进程的库函数调用,它会显现出哪个库函数被调用。

关机/重启/注销和查看系统信息的命令(6个)

  • shutdown:关机。
  • halt:关机。
  • poweroff:关闭电源。
  • logout:退出当前登录的Shell。
  • exit:退出当前登录的Shell。
  • Ctrl+d:退出当前登录的Shell的快捷键。

进程管理相关命令(15个)

  • bg:将一个在后台暂停的命令,变成继续执行 (在后台执行)。
  • fg:将后台中的命令调至前台继续运行。
  • jobs:查看当前有多少在后台运行的命令。
  • kill:终止进程。
  • killall:通过进程名终止进程。
  • pkill:通过进程名终止进程。
  • crontab:定时任务命令。
  • ps:显示进程的快照。
  • pstree:树形显示进程。
  • nice/renice:调整程序运行的优先级。
  • nohup:忽略挂起信号运行指定的命令。
  • pgrep:查找匹配条件的进程。
  • runlevel:查看系统当前运行级别。
  • init:切换运行级别。
  • service:启动、停止、重新启动和关闭系统服务,还可以显示所有系统服务的当前状态。

Linux防各类攻击包的优化

购买了LINUX服务器后,需要做一些安全优化保障服务器安全。

防止同步包洪水(Sync Flood)

# iptables -A FORWARD -p tcp –syn -m limit –limit 1/s -j ACCEPT

也可以这么写:

#iptables -A INPUT -p tcp –syn -m limit –limit 1/s -j ACCEPT

–limit 1/s 限制syn并发数每秒1次,可以根据自己的需要修改

防止各种端口扫描

# iptables -A FORWARD -p tcp –tcp-flags SYN,ACK,FIN,RST RST -m limit –limit 1/s -j ACCEPT

Ping洪水攻击(Ping of Death)

# iptables -A FORWARD -p icmp –icmp-type echo-request -m limit –limit 1/s -j ACCEPT

修改内核参数优化网络处理能力

vi /etc/sysctl.conf

net.ipv4.tcp_tw_reuse = 1

该文件表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接。

net.ipv4.tcp_tw_recycle = 1

recyse是加速TIME-WAIT sockets回收

对tcp_tw_reuse和tcp_tw_recycle的修改,可能会出现.warning, got duplicate tcp line warning, got BOGUS tcp line.上面这二个参数指的是存在这两个完全一样的TCP连接,这会发生在一个连接被迅速的断开并且重新连接的情况,而且使用的端口和地址相同。但基本上这样的事情不会发生,无论如何,使能上述设置会增加重现机会。这个提示不会有人和危害,而且也不会降低系统性能,目前正在进行工作

net.ipv4.tcp_syncookies = 1

表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 1200

表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时

net.ipv4.tcp_fin_timeout = 30

fin_wait1状态是在发起端主动要求关闭tcp连接,并且主动发送fin以后,等待接收端回复ack时候的状态。对于本端断开的socket连接,TCP保持在FIN-WAIT-2状态的时间。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_max_syn_backlog = 8192

该文件指定了,在接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_timestamps = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_synack_retries = 1

net.ipv4.tcp_keepalive_time = 1200

net.ipv4.tcp_fin_timeout = 30

net.ipv4.ip_local_port_range = 1024 65000

net.ipv4.tcp_max_syn_backlog = 8192

net.ipv4.tcp_max_tw_buckets = 5000

net.ipv4.tcp_syn_retries = 1

net.ipv4.tcp_sack = 1

net.ipv4.icmp_echo_ignore_broadcasts = 1

# 避免放大攻击

net.inet.udp.checksum=1

#防止不正确的udp包的攻击

net.ipv4.tcp_window_scaling = 1

修改完以上参数后保存退出并执行:sysctl -p 使得修改的参数生效。

香港和世界各地区机房比较

1. 香港机房:国内访问速度快,国内和海外用户访问速度稳定性最好。缺点:总宽度小,价格和其他地区稍贵
2. 新加坡机房:基本和香港机房差不多,稳定性稍差
3. 韩国机房:和上面两个相比,带宽比较大,网络环境好,缺点:海外延时和稳定性比香港大一些,较多用于私服,视频,聊天室对网络带宽要求比较大。
4. 美国机房:和上面的相比,带宽超大,内容无限制,只要没投诉一切OK! 缺点:延时稍大,国内访问慢一点。

美国机房E3之月,E3服务器65折定购!!

在活动期间,购买下列服务器,享“买一个月85折,买三个月以上至少65折”

联系方式:

QQ:2355257965  或   189323783

手机/微信:14714852695

定购网址:http://f.sendong.com

技术博客:http://www.zhuhanxuan.com

理解NVMe的内部实现原理,这一篇就够了

任何新技术的出现都是为了解决当前情况存在的问题。NVMe的出现也是为了解决当前存在的问题。这个问题就是日益快速增长的存储介质性能与传输通道性能太差之间的矛盾。基于SSD的存储设备性能都要上天了,但SAS和SATA接口的性能却没有本质的提升。

目前基于SCSI协议的SAS和SATA只能是单个队列而且每个队列的深度也比较低,分别是254和32的队列深度。而NVMe协议设计之初就考虑了该问题,它的最大队列数量可以是64K(65535个命令队列和1个管理队列),而每个队列的深度可以高达64K。与SCSI协议相比,就好比一个乡村的羊肠小路和一个双向八车道的高速公路的差别。

理解NVMe的内部实现原理,这一篇就够了
图1 美丽的乡村下路和京港澳高速
NVMe基本原理

为了便于理解主机和NVMe设备的关系,我们这里简化NVMe设备的内部结构。如图2所示为NVMe白皮书中的配图,这里主机称为Host,而NVMe设备称为Controller(控制器)。主机和控制器之间通过共享内存的队列实现交互。

理解NVMe的内部实现原理,这一篇就够了

图2 NVMe多队列示意图

NVMe的队列分为2种,其中一种是用于管理的队列,称为Admin Queue(管理队列),仅有一个,另外一种是命令队列(Command Queue),最多可以有65535个。其中命令队列的数量和模式都是通过管理队列来设置的。其中每一个队列实际上是一个队列对,也就是包括两个队列,分别是提交队列(Submission Queue)和完成队列(Completion Queue)。提交队列用于主机端向NVMe设备发送NVMe命令,而完成队列则用于NVMe设备向主机反馈命令执行情况。实际上NVMe还有另外一种模式,就是多个提交队列共享同一个完成队列的情况,本文暂时不做介绍。

NVMe队列及命令的处理流程

上文我们知道NVMe是通过队列传递控制命令和命令等内容的,那么这里的队列实体到底是什么呢?其实这里提交队列和完成队列就是内存的一个区域。在数据结构原理上这里的队列其实是一个环形缓冲区,如图3所示。

理解NVMe的内部实现原理,这一篇就够了

图3 环形缓冲区

NVMe通过一种门铃机制(Doorbell)来告知控制器命令队列是否有新数请求/命令。也就是说每个队列都有一个门铃指针。对于发送队列来说,这个指针表示的是发送队列的尾指针。主机端将数据写入到发送队列后,更新映射到位于设备寄存器空间中的门铃的尾指针。此时,在控制器端就知道有新的请求/命令到来,接下来就可以进行对其进行处理。

当控制器完成一个NVMe请求时,通过完成队列来把完成的结果告知主机端。与发送队列不同,完成队列是通过中断机制(可以是INTx,MSI或MSIx)告诉主机端。如图4是一个命令的完整处理流程。

理解NVMe的内部实现原理,这一篇就够了

图4 命令处理完整流程

NVMe的命令格式

前面我们介绍了命令的发送和处理流程,接下来我们看看NVMe的命令长什么样。如图5是NMVe命令的具体格式,如果大家了解TCP/IP协议或者SCSI协议,那么理解本图将相当容易。在图4中每一行为8个字节,命令大小总共为64字节。

理解NVMe的内部实现原理,这一篇就够了

图5 NVMe的命令格式

在这个命令格式中有几个字段本身是比较复杂的,限于篇幅,且不打算让大家看完本文后头疼,本文不打算介绍所有细节。本文简单的介绍一下该命令格式的几个关键字段。其中Command Identifier标识一个具体的命令。Namespace Identifier则表示命令发送到那个命名空间。Data Pointer 1 和Data Pointer 2则用于标识数据的具体位置。

这里有两点需要说明:

  • NVMe的一个控制器下面可以有多个命名空间(Namespace),通过Namespace ID来标识的。
  • 命令与数据是分离的,并不像TCP那样数据在命令后面。

我们这里重点介绍一下Command Identifier,该字段占用4个字节的空间。虽然仅有4个字节,但有分为3大部分,6小部分,具体如图6所示。

图6 命令标识格式

我们以从低位到高位的顺序分别介绍一下各个字段的含义:

  • OPC: 全称为Opcode,也就是被执行命令的操作码。具体来说就是想让控制器干什么,比如读数据、写数据或者刷写等。

理解NVMe的内部实现原理,这一篇就够了

图7 OPC定义

  • FUSE: 全称为Fused Operation, 用于标识该命令是普通命令还是复合命令。如图8是白皮书对该字段的说明。

理解NVMe的内部实现原理,这一篇就够了

图8 FUSE的定义

  • PSDT: 全称为PRP or SGL for Data Transfer,这个用于说明存储数据的内存的组织形式。

NVMe的性能

最后我们看一下NVMe与SAS和SATA存储设备的性能对比。为了避免广告嫌疑,本文就布局图说明设备的厂商和类型了。

理解NVMe的内部实现原理,这一篇就够了

图9 性能对比

通过上图可以清楚的看到SAS和SATA设备与NVMe设备的性能差异,特别是对于读操作,NVMe有绝对的性能优势