当前位置: 首页 > Linux

任何说他们不熟悉Linux命令的人都会向他扔这个!

时间:2023-04-06 18:22:59 Linux

虽然平时大部分工作都是Java开发相关,但是我每天都会接触Linux系统,尤其是在使用了Mac之后,每天都是在黑色背景的命令行环境下工作。我记性不好,很多有用的Linux命令。基本操作Linux关机、重启#关机shutdown-hnow#重启shutdown-rnow查看系统、CPU信息#查看系统内核信息uname-a#查看系统内核版本cat/proc/version#查看当前用户环境变量envcat/proc/cpuinfo#查看逻辑CPU有多少个,包括CPU型号cat/proc/cpuinfo|grep名称|切-f2-d:|uniq-c#查看CPU有多少个,每个有多少核cat/proc/cpuinfo|grep物理|uniq-c#查看当前CPU是运行在32位还是64位模式。如果是运行在32bit,并不代表CPU不支持64bitgetconfLONG_BIT#结果大于0,说明支持64bit计算。lm指的是长模式,lm是64bitcat/proc/cpuinfo|grep标志|grep'lm'|wc-l建立软链接ln-s/usr/local/jdk1.8/jdkrpmrelated#查看软件是否通过rpm安装rpm-qa|grepsoftwarenamesshkey#创建sshkeyssh-keygen-trsa-Cyour_email@example.com#id_rsa.pub把内容复制到要控制的服务器的home/username/.ssh/authorized_keys中,如果没有就新建一个一个(.ssh权限为700,authorized_keys权限为600)命令重命名#在每个用户的.bash_profile中添加重命名配置aliasll='ls-alF'同步服务器时间sudontpdate-untp.api.bz后台运行命令#运行在后台使用nohup。outoutputnohupxxx#后台运行,不输出任何日志nohupxxx>/dev/null#后台运行,错误信息输出到日志nohupxxx>out.log2>&1&强制activeusertoexit#命令完成强制active用户退出。其中TTY代表终端名称pkill-kill-t[TTY]查看命令路径查看所有进程开启最大fd数ulimit-n配置dnsvim/etc/resolv.confnslookup,查看域名路由表nslookupgoogle.comlast,最近登录信息列表#最近登录5accountslast-n5setfixedipifconfigem1192.168.5.177netmask255.255.255.0查看进程加载的环境变量#也可以到cd/proc目录查看进程内存加载的东西pseww-pXXXXX(进程号)查看进程树找到服务器进程psauwxf查看进程启动路径cd/proc/xxx(进程号)ls-all#cwd对应启动路径添加用户,配置sudo权限#添加新用户useraddusernamepasswdusername#添加sudo权限vim/etc/sudoers#修改文件#rootALL=(ALL)ALL#UsernameALL=(ALL)ALL强制关闭所有进程名包含xxx的进程psaux|grepxxx|grep-vgrep|awk'{print$2}'|xargskill-9磁盘、文件、目录相关操作vim操作#普通模式下,g表示全局,x表示搜索内容,y表示替换内容:%s/x/y/g#普通模式下0#移动光标到beginningoftheline(number0)$#将光标移动到行尾shift+g#跳转到文件末尾gg#跳转到文件开头#显示行号:setnu#删除linenumber:setnonu#retrieve/xxx(retrievecontent)#从头检索,按n查找下一个?xxx(retrievecontent)#从尾检索打开只读文件,需要保存的时候修改后(不用切换用户即可保存的方式)#在普通模式下next:w!sudotee%查看磁盘和文件目录的基本信息#查看磁盘挂载状态mount#查看磁盘分区信息df#查看目录和子目录的大小du-H-h#查看当前目录下每个文件,文件夹占了多少空间,不会递归du-sh*wc命令#查看文件wc有多少行-lfilename#查看文件中有多少个单词wc-wfilename#文件中最长的行是多少个字wc-Lfilename#统计字节数wc-c常用的压缩和解压命令压缩命令tarczvfxxx.tar压缩目录zip-rxxx.zip压缩目录解压命令tarzxvfxxx.tar#解压到指定文件夹tarzxvfxxx.tar-C/xxx/yyy/unzipxxx.zip更改文件所属的用户和用户组chowneagleye.eagleyexxx.logcp,scp,mkdir#Copycpxxx.log#复制并覆盖同名文件cp-fxxx.log#复制文件夹cp-rxxx(源文件夹)yyy(目标文件夹)#远程复制scp-Psshportusername@10.10.10.101:/home/username/xxx/home/xxx#级联创建目录mkdir-p/xxx/yyy/zzz#批量创建文件夹,java会在test和main下创建,resources文件夹mkdir-psrc/{test,main}/{java,resources}比较两个文件diff-u1.txt2.txt日志输出的字节数,可以作为性能测试#如果做性能测试,可以输出"."每次执行到日志中,这样日志中的字节数就是实际性能测试运行的次数,还可以看到实时率。尾-fxxx.log|pv-bt查看,去除特殊字符#查看特殊字符cat-vxxx.sh#去除特殊字符sed-i's/^M//g'env.sh去除文件中的特殊字符,比如^M:你需要这样输入:ctrl+v+enter处理系统原因导致文件有特殊字符的问题#是转换成本系统下的文件格式catfile.sh>file.sh_bak#先将文件内容复制到file.sh然后运行,然后粘贴内容,最后ctrl+d保存退出cat>file1.sh#传入vim设置文件编码和文件格式如下:setfileencodings=utf-8,然后w(save)转换为utf8格式,:setfileformat=unix#mac下使用dos2unix用于文件格式查找.-名称“*.sh”|xargsdos2unixtee,重定向时输出到屏幕awk'{print$0}'xxx.log|teetest.log检索相关的grep(每天学一个Linux命令(五):grep)#反向匹配,查找不包含xxx的内容grep-vxxx#排除所有空行grep-v'^/pre>#返回结果2,说明第二行是空行grep-n"^$"111.txt#查询以abc开头的行grep-n"^abc"111.txt#列出文章中出现该词的行同时grep'xxx'-nxxx.log#计算单词字符串出现的次数grep'xxx'-cxxx.log#比较时不统计大小写的差异grep'xxx'-ixxx.logawk(oneLinuxcommandperday(4):awk)#以':'作为分隔符开始,如果第五个字段有用户,则输出这一行awk-F':''{if($5)~/user/)print$0}'/etc/passwd#统计单个文件中某个字符(字符串)(中文无效)出现的次数awk-vRS='character''END{print--NR}'xxx.txtfind搜索命令(每天学一个Linux命令(20):find)#在目录中查找后缀为.mysql的文件find/home/eagleye-name'*.mysql'-print#将从/usr目录查找最近3天内被访问过的文件find/usr-atime3–print#将从/usr目录开始往下查找查找最近5天内被修改过的文件。find/usr-ctime5–print#将从/doc目录开始搜索,查找文件名以j开头的jacky文件。find/doc-userjacky-name'j*'–print#将从/doc目录开始向下查找,查找文件名以ja或ma开头的文件。find/doc\(-name'ja*'-o--name'ma*'\)–print#会从/doc目录开始向下查找,找出所有文件名以bak结尾的文件,并删除。-exec选项表示执行,rm表示删除命令,{}表示文件名,"\;"是指定命令的结尾。find/doc-name'*bak'-execrm{}\;网络相关查看是什么进程使用这个端口lsof-i:por获取本地ip地址/sbin/ifconfig-a|grepinet|grep-v127.0.0.1|grep-vinet6|awk'{print$2}'|tr-d"addr:"iptables#查看iptables状态serviceiptablesstatus#阻止iptables-IINPUT-s***.***.***.***-jDROP#解封IP,使用以下命令:iptables-DINPUT-s***.***.***.***-jDROP备注:参数-I表示插入(add),-D表示删除(delete)。遵循规则,INPUT表示入站,***.***.***.***表示要屏蔽的IP,DROP表示放弃连接。#开放访问9090端口/sbin/iptables-IINPUT-ptcp--dport9090-jACCEPT#防火墙开启、关闭、重启/etc/init.d/iptablesstatus/etc/init.d/iptablesstart/etc/init.d/iptablesstop/etc/init.d/iptablesrestartnc命令,tcp调试工具#向某个端点发送TCP请求,并将数据内容发送给对端nc192.168.0.118000received_data#只监听一次,如果可以多次加-k参数nc-lk8000tcpdump(每天学一个Linux命令(72):tcpdump)#dump本机12301端口的tcp包tcpdump-iem1tcpport12301-s1500-wabc.pcaptracenetworkroutingpath#traceroute默认使用udp模式,如果是-I,改成icmp模式traceroute-Iwww.163.com#从ttl的第3跳跟踪traceroute-M3www.163.com#添加端口traceroute-p8080192.168.10.11ss#显示所有本地打开的端口ss-l#显示每个进程具体打开的socketss-pl#显示所有tcpsocketss-t-a#显示所有UDPSocektss-u-a#显示所有已建立的SMTP连接ss-ostateestablished'(dport=:smtporsport=:smtp)'#显示所有已建立的HTTP连接ss-ostateestablished'(dport=:httporsport=:http)'#查找所有连接到X服务器的进程ss-xsrc/tmp/.X11-unix/*#列出当前socket统计信息ss-s说明:netstat是遍历/对于proc下的每个PID目录,ss直接读取/proc/net下的统计信息,所以ss消耗资源netstat#输出每个ip的连接数,以及每个状态下的连接总数netstat-n|awk'/^tcp/{n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N}END{for(ainS){printf("%-20s%s\n",a,S[a]);++I}printf("%-20s%s\n","TOTAL_IP",I);for(ains)printf("%-20s%s\n",a,s[a]);printf("%-20s%s\n","TOTAL_LINK",N);}'#计算所有连接状态,#CLOSED:没有连接处于活动状态或正在进行中#LISTEN:服务器正在等待传入呼叫#SYN_RECV:连接请求已到达,等待确认#SYN_SENT:应用程序已启动,打开连接#ESTABLISHED:正常数据传输状态#FIN_WAIT1:应用程序表示已完成#FIN_WAIT2:另一方已同意释放#ITMED_WAIT:等待所有数据包死亡#CLOSING:双方都试图同时关闭#TIME_WAIT:当一端还没有等待另一端的反馈时,主动关闭连接状态#LAST_ACK:等待所有数据包消亡netstat-n|awk'/^tcp/{++state[$NF]}END{for(keyinstate)printkey,"\t",state[key]}'#查找更多time_wait连接netstat-n|grepTIME_WAIT|awk'{print$5}'|sort|uniq-c|sort-rn|head-n20监控Linux性能命令top按大写F或O键,然后按a-z按对应列对进程进行排序,然后回车.大写R键可以反转当前排序。每天学一个Linux命令(48):topPID进程idPPID父进程idRUSER真实用户名UID进程所有者的用户idUSER进程所有者的用户名GROUP进程所有者的组名TTY启动进程的终端名。不是从终端启动的进程显示为?PRPriorityNInice值。负值表示高优先级,正值表示低优先级P最近使用的CPU,只在多CPU环境下有意义%CPU从上次更新到现在占用的CPU时间百分比进程,单位秒TIME+进程使用的CPU总时间,单位是1/100秒%MEM进程使用的物理内存百分比VIRT进程使用的虚拟内存总量,单位是kb。VIRT=SWAP+RESSWAP进程使用的虚拟内存中,要换出的大小,单位是kb。RES进程使用且未换出的物理内存大小,以kb为单位。RES=CODE+DATACODE可执行代码占用的物理内存大小,单位为kbDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位为kbSHR共享内存大小,单位为kbnFLT页错误数nDRTlastwrite到目前为止已修改的页数。S过程状态。D=不间断睡眠状态,R=running,S=sleep,T=track/stop,Z=zombie进程COMMAND命令名/命令行WCHAN如果进程处于睡眠状态,会在sleepFlags任务中显示系统函数名flag,参考sched.hdmesg,查看系统日志dmesgiostat,磁盘IO状态监控iostat-xz1#r/s,w/s,rkB/s,wkB/s:分别表示每秒读写次数和每秒读取和写入的数据量(千字节)。过多的读写可能会导致性能问题。#await:IO操作的平均等待时间,单位毫秒。这是应用程序在与磁盘交互时需要消耗的时间,包括IO等待和实际操作所花费的时间。如果这个值太大,可能是硬件设备遇到了瓶颈或者出现了故障。#avgqu-sz:对设备发出的平均请求数。如果该值大于1,则可能是硬件设备饱和(部分前端硬件设备支持并行写入)。#%util:设备利用率。该值表示设备的繁忙程度。经验值是如果超过60,可能会影响IO性能(可以参考IO操作的平均等待时间)。如果达到100%,说明硬件设备已经饱和。#如果显示逻辑设备的数据,设备利用率不代表后端实际硬件设备饱和。值得注意的是,即使IO性能不理想,也不代表应用性能一定会差。可以使用预读和写缓存等策略来提高应用程序性能。free,memoryusagefree-meg:totalusedfreesharedbufferscachedMem:1002769232062421-/+buffers/cache:286715Swap:115301153Mem行的第一部分:totaltotalmemory:1002Mused的数量usedmemory:769Mfree空闲内存数:232Mshared当前过时,总是0buffersBuffer缓存内存数:62McachedPage缓存内存数:421M关系:total(1002M)=used(769M)+free(232M)第二部分(-/+buffers/cache):(-buffers/cache)usedmemory:286M(指used-buffers-cached在Mem行的第一部分)(+buffers/cache)freememory:715M(指第一部分mem行的free+buffers+cachedin)可以看出-buffers/cache反映的是程序实际吃掉的内存,+buffers/cache反映的是可以被盗用的内存总量。第三部分是指swap分区sar,checkNetworkthroughputstatus#sar命令可以在这里查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量来判断网络设备是否饱和。sar-nDEV1##这里使用sar命令查看TCP连接状态,包括:#active/s:每秒本地发起的TCP连接数,即connect调用创建的TCP连接数;#passive/s:每秒远程发起的TCP连接数,即accept调用创建的TCP连接数;#retrans/s:每秒TCP重传次数;#TCP连接数可以用来判断性能问题是否是因为建立的连接过多,进而可以判断是主动发起的连接还是被动接受的连接。TCP重传可能是网络环境差或者服务器压力过大导致丢包sar-nTCP,ETCP1vmstat,监控CPU使用率,内存使用率,虚拟内存交互,IO读写#2表示每2秒收集一次状态信息,1表示只收集一次(忽略表示总是收集)vmstat21eg:rbswpdfreebuffcachesisobiboincsussyidwa100349984031583638196600001200010000003499584315836381966000008815800100000000349970831583638196600002861620000349970831583638196600010810101034997323158196600000283154001000rindicatesthe运行队列(即实际分配给CPU的进程数)。我测试的服务器CPU比较空闲,没有程序在运行。当这个值超过CPU数量时,就会出现CPU瓶颈。这也和top的负载有关。一般负载超过3就比较高,超过5就高,超过10就异常,服务器的状态很危险。top的负载类似于每秒运行队列。如果运行队列太大,说明你的CPU很忙,一般会导致CPU占用率高。b表示阻塞的进程。这个我就不多说了。大家都知道一个进程被阻塞了。swpd虚拟内存的已用大小。如果大于0,说明你的机器物理内存不足。如果不是程序内存泄漏的原因,那么就应该升级内存或者将耗内存的任务迁移到其他机器上。Free空闲物理内存的大小,我的机器内存总计8G,剩余3415M。buffLinux/Unix系统用来存储,缓存目录里有什么内容,权限等,我的本机占用大概300Mcache缓存。直接用来记住我们打开的文件,缓冲文件。我的本机占用大概300多M(这里是Linux/Unix的巧妙之处,将一部分空闲的物理内存用作文件和目录缓存是为了提高程序执行的性能。当程序使用内存时,buffer/cached会很快用到。)si每秒从磁盘读取虚拟内存的大小。如果这个值大于0,说明物理内存不够或者内存泄露,需要找到耗内存的进程解决。我的机器有足够的内存,一切正常。so每秒写入磁盘的虚拟内存大小,如果这个值大于0,同上。bi块设备每秒接收的块数。这里的块设备是指系统中的所有磁盘和其他块设备。默认块大小为1024字节。我在这台机器上没有IO操作,所以一直是0,但是我一直在处理在一台复制大量数据(2-3T)的机器上看到它可以达到140000/s,并且磁盘写入速度几乎是每秒140M。bo块设备每秒发送的块数。比如我们读一个文件,bo必须大于0,bi和bo一般都接近0,否则IO太频繁,需要调整。in每秒CPU中断次数,包括时间中断cs每秒上下文切换次数,比如我们调用系统函数时,需要进行上下文切换,线程切换,进程上下文切换。值越小越好,太大了现在考虑减少线程数或进程数。比如在apache、nginx等web服务器中,我们在做性能测试的时候一般会进行几千甚至几万的并发测试。选择web服务器的过程可以根据进程或线程的峰值是否已经降低,进行压力测试,直到cs达到一个比较小的值。这个进程数和线程数是一个比较合适的值。系统调用也是如此。每调用一次系统函数,我们的代码就会进入内核空间,从而产生上下文切换。这是非常耗费资源的,我们应该尽量避免频繁调用系统函数。太多的上下文切换意味着你的大部分CPU都浪费在上下文切换上,导致CPU做正事的时间变少,CPU没有得到充分利用,这是不可取的。us用户CPU时间,我以前很频繁的在一台服务器上做加解密,可以看到us接近100,r运行队列达到80(机器在做压力测试,性能不好).sy系统CPU时间,如果太高说明系统调用时间长,比如频繁的IO操作。id空闲CPU时间,一般来说,id+us+sy=100,一般我认为id是空闲CPU占用率,us是用户CPU占用率,sy是系统CPU占用率。wt等待IOCPU时间。需要了解和学习更多Linux系统命令的读者可以参考:120《 必知必会的 Linux 系统常用命令 》来源:siye1982.github.io/2016/02/25/linux-list