当前位置: 首页 > 科技观察

这些年收集的Linux常用命令

时间:2023-03-19 16:23:02 科技观察

通常都是和网络有关的,但是会接触到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]viewcommandpathwhich查看所有开启的进程ulimit-nconfigurednsvim/etc/resolv.confnslookup,查看域名路由表nslookupgoogle.comlast,最近登录信息列表#最近登录5个账号last-n5setfixedipifconfigem1192.168.5.177netmask255.255.255.0查看进程加载的环境变量#也可以到cd/proc目录查看进程内存加载的东西pseww-pXXXXX(进程号)查看进程树找到服务器进程psauwxf查看进程启动路径cd/proc/xxx(进程号)ls-all#cwd对应启动路径添加用户,配置sudo权限#添加新用户useradd用户名passwdusername#添加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*wccommand#查看文件中有多少行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下使用do用于文件格式化的s2unix查找.-名称“*.sh”|xargsdos2unixtee,重定向时输出到屏幕awk'{print$0}'xxx.log|teetest.logsearchrelatedgrep#反向匹配,搜索不包含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#使用':'作为分隔符,如果第五个字段有用户,则输出这一行awk-F':''{if($5~/user/)print$0}'/etc/passwd#统计单个文件中某个字符(字符串)(中文无效)出现的次数awk-vRS='character''END{print--NR}'xxx.txtfindsearchcommand#在目录中查找后缀为.mysql的文件find/home/eagleye-name'*.mysql'-print#会从/usr目录开始搜索,寻找最近3天内被访问过的文件Filefind/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#dump出本机的tcp包tcpdumpofport12301tcpdump-iem1tcpport12301-s1500-wabc.pcaptracenetworkroutingpath#traceroute默认使用udp模式,如果是-I,则改为icmp模式traceroute-Iwww.163.com#fromttl3rdhoptracetraceroute-M3www.163.com#添加端口tracetraceroute-p8080192.168.10.11ss#显示本地打开的所有端口ss-l#显示socketsss每个进程都打开-pl#显示所有tcp套接字-t-a#显示所有UDP套接字sss-u-a#显示所有已建立的SMTP连接ss-ostateestablished'(dport=:smtporsport=:smtp)'#showallestablishedHTTPconnectionsConnectionss-ostateestablished'(dport=:httporsport=:http)'#找出所有连接到X服务器的进程ss-xsrc/tmp/.X11-unix/*#列出当前socket统计ss-s解释:netstat遍历/proc下的各个PID目录,ss直接读取/proc/net下的统计信息,所以ss在执行ss时比netstat消耗的资源和时间少很多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:等待所有数据包到die#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-n20monitorlinuxperformancecommandstop按大写F或O键,然后按a-z按对应列对进程进行排序,然后回车.大写R键可以反转当前排序。PID进程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空闲内存数:232MsharedCurrentlyobsolete,always0buffersBuffer缓存内存数: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+cachedinthefile)表明-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:rbswpdfreebuffcachesisobiboincsussyidwa100349984031583638196600001200010000034995843158363819660000008815800010000000349970831583638196600000028616200000349970831583638196600010108101010101010349732315819666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666231581966666666660指标(即实际分配给CPU的进程有多少)。我测试的服务器CPU比较空闲,没有程序在运行。当这个值超过CPU数量时,就会出现CPU瓶颈。这也和top的负载有关。一般负载超过3就比较高,超过5就高,超过10就异常,服务器的状态很危险。top的负载类似于每秒运行队列。如果运行队列太大,说明你的CPU很忙,一般会导致CPU占用率高。b表示阻塞的进程。这个我就不多说了。大家都知道一个进程被阻塞了。swpd虚拟内存的已用大小。如果大于0,说明你的机器物理内存不足。如果不是程序内存泄漏的原因,那么就应该升级内存或者将耗内存的任务迁移到其他机器上。Free空闲物理内存的大小,我的机器内存总计8G,剩余3415M。buffLinux/Unix系统用来存放,目录里有什么,权限等等缓存,我的本机大概占了300多Mcahe缓存直接用来记住我们打开的文件,用来缓冲文件,我的本机大概占用了300多M(这里是Linux/Unix的巧妙之处,将部分空闲物理内存用作文件和目录缓存是为了提高程序执行的性能。当程序使用内存时,buffer/cached会使用quickly。)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时间。