原创:味姐小姐姐(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。作为一个javaer,之前写过很多关于linux的文章。但是经过多年的观察,我发现,对于大多数人来说,有些东西是根本不需要的。用的最多的就是上网查一个问题,很苦恼。所以,让我们缩小范围。最有用的系列:《 Linux上,最常用的一批命令解析(10年精选)》《Linux生产环境上,最常用的一套“vim“技巧》《Linux生产环境上,最常用的一套“Sed“技巧》《Linux生产环境上,最常用的一套“AWK“技巧》《"Sed" 高级功能:我这小脑瓜都快绕晕了》Linux命令好像挺多的。根本原因是软件太多了。也有像ag这样的命令想要取代grep,但它们大多又旧又强。并不是因为这些软件设计的有多好,而是因为有些软件一开始就装在系统里,时间久了,就成了约定俗成。这种习惯改变代价太大,就像改变所有键盘的L和F一样。一样。本文假定您已经了解大多数Linux命令并了解操作系统的基本元素。如果您现在知道的命令少于10个,请不要阅读以下内容。除了最基本的东西,这篇文章还列出了一些最常见和最有收获的地方供你面试。有些组合可能是您以前从未见过的技能。但本文仅给出一个大概的轮廓和印象,为以后的专题研究点做一个序言。本文中的所有命令都要记住并熟练使用。几种典型的Linux系统先对目前的Linux版本有个大概的印象,大致分为Desktop版和Server版,百花齐放。Ubuntu最普通的Linux个人发行版,多愁善感的南非富豪,有钱也可以做二进制包,社区活跃,我个人最喜欢的是Gentoo。安装软件需要从源码编译,稳定,但是用起来会很痛苦。LFS从零开始构建Linux,搞定之后,Linux的每一根头发都看得一清二楚。Kali是专门用来渗透的,代表了release版本的一个开发路径,是本领域最先理解的概念。KISS保持简单和愚蠢。据说一切皆文件,这是一种哲学。通常一个文件被称为文件。进程、磁盘等也被抽象成文件。比较离谱的管道、设备、套接字等也是文件。这是组织Linux的最重要的方式。流水线|分隔开,前面命令的输出作为后面命令的输入,可以串联多个重定向<使用文件作为命令的输入>将命令的输出输出到文件中>>追加命令输出到文件SHELL首先确认你的Shell,一般最常用的是bash,也有很多使用csh、zsh等。通过echo$SHELL可以看到当前用户的shell,相应的配置文件也要改因此。比如.zshrc和.bashrc这四大要素进入Linux,我们首先关注的是四大要素:内存、cpu、存储、网络。Linux提供了足够多的命令让你可以窥视它的每一个角落。下面这几个命令是最常用的,不管你熟练不熟练,如果不想打屁股。CPU使用top查看cpu的负载情况,使用shift+p按cpu排序。需要理解wa、us等的意思。使用uptime检查系统启动时间和负载。负载是什么意思?什么算作系统过载?这是一个高频问题。别怪我没告诉你ps命令很强大。除了查看进程号外,还需要知道R、S、D、T、Z、<、N状态位的含义。top和ps的很多功能都是比如watch"ps-mo%cpu,%mem,pid,ppid,commandax"就相当于top的进程列表;top-n1-bc和ps-ef有相似的结果。有生有死,可以用kill杀掉进程。对于java,需要注意kill-9、kill-15、kill-3的含义。kill信号太多,可以使用kill-l查看,对于理解大部分信号很有帮助。如果暂时不想死,可以使用&符号在后台执行,比如tail-fa.log&。jobs命令可以查看当前后台的列表。如果要恢复,用fg回到前面。这些都是终端操作。当你关闭term时,你的后台命令也会消失,所以如果你想让你的程序继续执行,你需要nohup命令。这条命令需要牢记的是,mpstat显示的是系统中CPU的各种统计信息。理解cpuaffinitymemoryfree-m命令,理解free,used,cached,swap的含义不同命令显示的内容是一样的。slabtop用于显示内核缓存占用情况,比如遍历大量文件导致缓存的目录项。在生产环境中遇到了由于执行find/导致dentry_cache耗尽了服务器内存。vmstat命令是我最喜欢也是最常用的命令之一,它可以最快的获取系统的健康状态。必须理解每个参数的含义。swapon、swapoff打开、关闭交换空间sar是另一个统计轮,一般用作存储的采样工具使用df-h查看系统磁盘使用概况lsblk列出块设备信息du查看目录或文件大小网络rsync强大的同步工具,你可以增量netstat查看Linux中网络系统的状态信息,各种ss可以显示更多更详细的TCP和连接状态信息,而且比netstat更快更高效。curl、wget模拟请求工具、下载工具。比如wget-rhttp://site会下载整个站点abApache服务器的性能测试工具ifstat统计网络接口流量状态nslookup是一个查询域名DNS信息的工具。可惜不能当瑞士军刀用。arp可以显示和修改IP到MAC的转换表。traceroute显示从数据包到主机的路径。它通常被称为几跳。wall将信息打印到所有当前打开的终端。使用who命令发现女神在终端。可以在求爱网上推荐kaliLinux的安装和体验。以上工具会让你high到极致。如何组织Linux命令非常有趣。除了各种stats监控状态,还有各种traces进行深度跟踪,各种top统计资源消耗者,各种ls查看系统硬件,如lsblk、lsusb、lscpi等。基本上跟随你的直觉,你会找到工具,因为惯例是系统中最强大的指南。Linux有一个比较另类的目录/proc,里面承载着各个命令的蹂躏。和sysctl命令一样,是修改后的/proc/sys目录下的映射项。不信你看看find/proc/sys-typef|的结果wc-l和sysctl-a|wc-l非常相似?/proc文件系统是一个伪文件系统,只存在于内存中,不占用外存空间。它只是以文件系统的形式提供了访问系统内核数据的操作接口。系统的一切状态都逃不过它的眼睛。例如:cat/proc/vmstat看,是不是和vmstat命令的输出类似?cat/proc/meminfo是最全的内存信息吗cat/proc/slabinfo这是slabtop的信息吗?cat/proc/devicesalreadyLoadthedevicescat/proc/loadavgloadavg在这里cat/proc/stat所有CPU活动信息ls/proc/$pid/fdlsof的结果一般故障排除方法一般故障排除问题也围绕内存cpu等几个要素进行故障排除。下图是故障排除或性能问题的大致流程。看图不多说。应用场景示例以下示例从具体的应用场景来说明各种命令的组合应用。这样的场景不胜枚举,需要个人积累。但强烈建议熟练练习sed和awk。如何查看Java进程中占用CPU最高的线程的具体信息?获取进程中CPU使用率最高的线程,记为n。使用toptop-H-ppid,使用psps-mospid,lwp,stime,time,%cpu-ppid将线程号转成16进制printf0x%xn使用jstack找到对应进程,打印100行线程后的信息jstack-lpid|grepspid-A100统计每个网络状态的个数netstat-ant|awk'{print$6}'|排序|uniq-c|sort-n-k1-r首先使用netstat查看列表,使用'awk'截取第六列,使用uniq进行统计,并对统计结果进行排序。当然,这也是可能的。网络统计-ant|awk'{arr[$6]++}END{for(iinarr){printarr[i]""i}}'|sort-n-k1-r这和“分析apache日志,给出当天访问ip的降序排列”是同一个问题。如何查看是哪个进程在使用swap首先我们要明白/proc/$pid/smaps里面包含了我们需要的各种信息,其中Swap字段就是我们需要的。只是循环它。foriin`cd/proc;ls|grep"^[0-9]"|awk'$0>100'`;doawk'/Swap:/{a=a+$2}END{print'"$i"',a/1024"M"}'/proc/$i/smaps;done|sort-k2nr最后附上一张大图http://www.brendangregg.com/端软件领域的人才分两类,一个是工程,一个是研究。在linux领域,相对于搞内核研究的,搞命令行的都是工程类型。工程型也有自己的难处。例如,背命令是很痛苦的。一般来说,不建议背诵。一是覆盖面不广,二是忘得快,很浪费脑细胞。牛逼的记谱,是用时间冲淡了迷雾,看清了其中的细微之处,体会了其中的快乐。爱她,每天哄她上床,这才是真爱。作者简介:品味小姐姐(xjjdog),一个不让程序员走弯路的公众号。专注于基础架构和Linux。十年架构,每天百亿流量,与你探讨高并发世界,给你不一样的滋味。我的个人微信xjjdog0,欢迎加好友进一步交流。
