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

Java开发的Linux命令知识积累

时间:2023-04-01 19:33:17 Java

写在前面虽然平时大部分工作都是Java开发相关的,但是我每天都会接触Linux系统,尤其是用了Mac以后,会和命令一起工作每天在黑色背景下运行的环境中。我的记忆力不好,java培训中很多有用的linux命令都记不住了。现在我会逐步总结它们以供以后查看。基本操作linuxshutdown,restartshutdownshutdown-hnowrestartshutdown-rnow查看系统,CPU信息查看系统内核信息uname-a查看系统内核版本cat/proc/version查看当前用户环境变量envcat/proc/cpuinfo查看几个逻辑CPU,包括CPU模型cat/proc/cpuinfo|grep名称|剪切-f2-d:|uniq-c检查有多少个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/jdkrpm通过rpm查看软件是否安装rpm-qa|grep软件名sshkeycreatesshkeyssh-keygen-trsa-Cyour_email@example.comid_rsa.pub内容复制到要控制的服务器中home/username/.ssh/authorized_keys,如果没有新的(.ssh权限为700,authorized_keys权限为600)commandrename在每个用户的.bash_profile时间添加rename配置aliasll='ls-alF'到syncserversudontpdate-untp.api.bzbackgroundrunning命令后台运行,nohup.out输出nohupxxx&后台运行,没有输出任何日志nohupxxx>/dev/null&后台运行,将错误信息输出到log中为standardnohupxxx>out.log2>&1&forcetheactiveusertoexit命令完成强制active用户退出。TTY代表终端名称pkill-kill-t[TTY]查看命令路径查看所有进程开启的最大fd数ulimit-n配置dnsvim/etc/resolv.confnslookup,查看域名路由表nslookupgoogle.comlast,最近登录信息列出最近登录的5个账号-n5setfixedipifconfigem1192.168.5.177netmask255.255.255.0查看进程加载的环境变量也可以到cd/proc目录查看加载的东西进程内存pseww-pXXXXX(进程号)查看进程树找到Server进程psauwxf查看进程启动路径cd/proc/xxx(进程号)ls-allcwd对应启动路径添加用户,配置sudo权限添加用户useraddusernamepasswdusernameaddsudopermissionvim/etc/sudoers修改文件rootALL=(ALL)ALL用户名ALL=(ALL)ALL强制关闭进程名包含xxx的所有进程psaux|grepxxx|grep-vgrep|awk'{print$2}'|xargskill-9磁盘、文件、目录相关操作普通模式下的Vim操作g表示全局,x表示搜索内容,y表示替换内容:%s/x/y/gnormalmode0#将光标移动到行首(number0)$#将光标移动到行尾shift+g#跳转到文件末尾gg#跳转到文件开头显示行号:setnu删除行号:setnonuSearch/xxx(retrievecontent)#从头搜索,按n查找下一个?xxx(retrievecontent)#从尾部检索打开只读文件,修改后需要保存时(the不切换用户的保存方式)普通模式下: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,mkdircopycpxxx.logcopyandforce覆盖同名文件cp-fxxx.log复制文件夹cp-rxxx(源文件夹)yyy(目标文件夹)远程复制scp-Psshportusername@10.10.10.101:/home/username/xxx/home/xxxcascade创建目录mkdir-p/xxx/yyy/zzz批量创建文件夹,在test和main下创建java和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:你需要输入likethis:ctrl+v+enter处理系统引起的文件特殊字符问题可以转换为系统下的文件格式catfile.sh>file.sh_bak第一个文件。复制sh中文件内容运行,然后粘贴内容,最后ctrl+d保存退出cat>file1.sh在vim中设置文件编码和文件格式如下:setfileencodings=utf-8,进而w(存盘)可以一键转换为utf8格式,:setfileformat=unixmac下find使用dos2unix格式化文件。-名称“*.sh”|xargsdos2unixtee,重定向时输出到屏幕awk'{print$0}'xxx.log|teetest.log搜索相关grep反向匹配,查找不包含xxx的内容grep-vxxx排除所有空行grep-v'^$'返回结果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.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状态服务iptables状态来阻止iptables-IINPUT-s...-jDROP来解除阻止IP,使用以下命令:iptables-DINPUT-s...-jDROP注意:参数-I表示Insert(添加),-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把12301端口的tcp包转出本机的tcpdump-iem1tcpport12301-s1500-wabc.pcaptracenetworkroutingpathtraceroute默认使用udp模式,如果是-I,改为icmp模式traceroute-Iwww.163.comtracetraceroute从ttl的第3跳开始-M3www.163.complusporttracetraceroute-p8080192.168.10.11ss显示本地打开的所有端口ss-l显示每个进程专门打开的socketsss-pl显示所有tcpsocketss-t-a显示所有UDPsocketss-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直接读取//net下的proc统计信息。所以ss在执行的时候,比netstat消耗的资源和时间要少很多。netstat输出每个ip的连接数,以及每个状态下的连接总数。网络统计-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:等待所有数据包消亡Offnetstat-n|awk'/^tcp/{++state[$NF]}END{for(keyinstate)printkey,"\t",state[key]}'findmoretime_waitconnectionnetstat-n|grepTIME_WAIT|awk'{print$5}'|sort|uniq-c|sort-rn|head-n20monitorlinuxperformancecommandtop按大写F或O键,再按a-z按对应列对进程进行排序,回车。大写R键可以反转当前排序dmesg,查看系统日志dmesgiostat,磁盘IO状态监控iostat-xz1r/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,checknetworkthroughputstatussar命令可以在这里查看网络设备的吞吐率。在排查性能问题时,可以通过网络设备的吞吐量来判断网络设备是否饱和。这里使用sar-nDEV1sar命令查看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:rbswpdfreebuffcachesisobiboincsussyidwa100349984031583638196600001200010000003499584315836381966000008815800000034997083158363819660000286162000034997083158363819660001081010103499732315819660000283154001000r表示运行队列(即实际分配给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时间。转载于MarkerHub