当前位置: 首页 > 后端技术 > Java

初学者必备的Linux命令,.

时间:2023-04-01 17:43:07 Java

来源:siye1982.github.io/2016/02/25/linux-list/虽然平时大部分工作都是Java开发相关的,但是我每天都会接触Linux系统,尤其是使用Mac之后,每天我在黑色背景的命令行环境中工作。我的记忆力不好,很多有用的Linux命令都记不住。下面我就逐步总结一下,供以后查看。Linuxshutdown、restart#shutdownshutdown-hnow#restartshutdown-rnow查看系统、CPU信息#查看系统内核信息uname-a#查看系统内核版本cat/proc/version#查看当前用户环境变量envcat/proc/cpuinfo#查看几个逻辑cpu,包括cpu型号cat/proc/cpuinfo|grep名称|切-f2-d:|uniq-c#查看有多少个CPU,每个CPU有多少核。猫/proc/cpuinfo|grep物理|uniq-c#查看当前CPU是运行在32bit还是64bit模式下,如果运行在32bit下,并不代表CPU不支持64bitgetconfLONG_BIT#结果大于0,说明支持64bit计算。lm指的是longmode,lm是64bitcat/proc/cpuinfo|grep标志|grep'lm'|wc-l建立软连接ln-s/usr/local/jdk1.8/jdkrpmrelated#查看软件是否通过rpm安装rpm-qa|grep软件名称sshkey#createsshkeyssh-keygen-trsa-Cyour_email@example.将com#id_rsa.pub的内容复制到要控制的服务器的home/username/.ssh/authorized_keys中,如果没有则新建一个(.ssh权限为700,authorized_keys权限为600)commandrename#inthe每个用户的.bash_profile添加重命名配置aliasll='ls-alF'同步服务器时间sudontpdate-untp.api.bzbackgroundrunningcommand#后台运行,和nohup.outoutputnohupxxx#后台运行,不输出任何日志nohupxxx>/dev/null#后台运行,错误信息按标准输出到日志nohupxxx>out.log2>&1&forcetheactiveusertoexit#command完成强制活动用户退出。TTY表示终端名称pkill-kill-t[TTY]查看命令路径查看所有开启的最大fd数ulimit-n配置dnsvim/etc/resolv.confnslookup,查看域名路由表nslookupgoogle.comlast,最近登录信息列表#最近登录的5个账号last-n5setafixedipifconfigem1192.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表示替换Contentafter:%s/x/y/g#在普通模式下0#移动光标到beginningoftheline(number0)$#将光标移动到行尾shift+g#跳转到文件末尾gg#跳转到文件开头#显示行号:setnu#删除行号:setnonu#Retrieve/xxx(retrievecontent)#从头检索,按n找下一个?xxx(retrievecontent)#从末尾检索打开只读文件,修改后需要保存时(不切换用户保存的方式)#innormalinmode:w!sudotee%查看磁盘和文件目录的基本信息#查看磁盘挂载状态mount#查看磁盘分区信息df#查看目录和子目录大小du-H-h#查看文件andfoldersinthecurrentdirectory占用了多少空间,不会递归du-sh*wccommand#查看文件中有多少行wc-lfilename#查看文件中有多少个单词wc-wfilename#文件中最长的一行有多少个字wc-L文件名#统计字节数wc-c常用压缩解压命令压缩命令tarczvfxxx.tar压缩目录zip-rxxx.zip压缩目录解压命令tarzxvfxxx.tar#解压到指定文件夹tarzxvfxxx.tar-C/xxx/yyy/unzipxxx.zip更改文件所属的用户和用户组cp-fxxx.log#复制文件夹cp-rxxx(源文件夹)yyy(目标文件夹)#远程复制scp-Psshportusername@10.10.10.101:/home/username/xxx/home/xxx#级联创建目录mkdir-p/xxx/yyy/zzz#批量创建文件夹,创建javatest和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另外整理了linux系列的所有面试题和答案。微信搜索Java技术栈后台发送:面试,可以在线阅读处理系统引起的文件特殊字符问题#可以转换成系统下的文件格式catfile.sh>file.sh_bak#先把file.sh里的文件内容复制出来运行,然后粘贴内容,最后ctrl+d保存退出cat>file1.sh#在vim中设置文件编码和文件格式如下:setfileencodings=utf-8,然后w(save)转换为utf8格式,:setfileformat=unix#在mac上使用dos2unix格式化文件find.-名称“*.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#使用':'作为分隔符,如果第五个字段有user,则输出这一行awk-F':''{if($5~/user/)print$0}'/etc/passwd#统计一个字符(字符串)出现的次数(中文无效)在单个文件中awk-vRS='character''END{print--NR}'xxx.txtfind搜索命令#在目录中查找后缀为.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:port获取本地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#显示各自打开的socketssprocess-pl#显示所有tcpsocketss-t-a#显示所有UDPsocketsss-u-a#显示所有已建立的SMTP连接ss-ostateestablished'(dport=:smtporsport=:smtp)'#显示所有已建立的HTTPconnectionsConnectss-ostateestablished'(dport=:httporsport=:http)'找出连接到X服务器的所有进程ss-xsrc/tmp/.X11-unix/*列出当前套接字统计信息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:等待所有数据包死亡#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-n20monitorlinuxperformancecommandtop大写F或O键,然后按a-z按对应列对进程进行排序,然后回车。大写R键可以反转当前排序列名含义PID进程idPPID父进程idRUSER真实用户名UID进程所有者用户idUSER进程所有者用户名GROUP进程所有者组名TTY启动进程的终端名称。不是从终端启动的进程显示为?PRpriorityNInice值。负值表示高优先级,正值表示低优先级P.lastCPUused,只在多CPU环境下有意义进程使用的CPU时间,单位秒TIME+进程使用的CPU总时间,单位是1/100秒.VIRT=SWAP+RESSWAP进程使用的虚拟内存中,要换出的大小,单位kb。RES进程使用且未换出的物理内存大小,以kb为单位。RES=CODE+DATACODE可执行代码占用的物理内存大小,单位为kbDATA可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位为kbSHR共享内存大小,单位为kbnFLT页面错误次数nDRT最后一次写入到目前为止已修改的页面数。S进程状态。D=不间断睡眠状态,R=running,S=sleep,T=tracking/stopping,Z=zombieprocessCOMMAND命令名/命令行WCHAN如果进程处于睡眠状态,显示系统函数名Flags任务标志在睡眠中,参考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:localinitiatedpersecond调用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时间。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!