Linux 运维需要掌握的实用技巧.docx
1.inux运维需要掌握的实用技巧1、查找当前目录下所有以.tar结尾的文件然后移动到指定目录:find.-name"*.tar"-execmv)./backup/;注解:find-name主要用于查找某个文件名字,-exec、XargS可以用来承接前面的结果,然后将要执行的动作,一般跟find在一起用的很多,find使用我们可以延伸-mtime查找修改时间、-type是指定对象类型(常见包括f代表文件、d代表目录),-size指定大小,例如经常用到的:查找当前目录30天以前大于100M的1.OG文件并删除。find.-name"*.Iogn-mtime+30-typef-size+1OOMxargsrm-rf;2、批量解压当前目录下以.zip结尾的所有文件到指定目录:fbriin'find.-name"*.zip"-typefdounzip-d$i/data/www/img/done注解:forlin(command)dodone为for循环的一个常用格式,其中I为变量,可以自己指定。3、Sed常用命收集:test.txt做测试如何去掉行首的.字符sed-i,s.g'test.txt在行首添加一个a字符sed,sag,test.txt在行尾添加一个a字符sed*s/$/a/'tets.txt在特定行后添加一个c字符sed7wuguangkeac,test.txt在行前加入一个c字符sed7wuguangkeic,test.txt更多sed命令请查阅相关文档。4、如何判断某个目录是否存在,不存在则新建,存在则打印信息。if!-ddatabackup;thenMkdir-pdatabackupelseecho"TheDirectoryalreadyexists,pleaseexitnfi注解:ifthenelse.fi:为if条件语句,!叹号表示反义“不存在",句代表目录。5、监控IinUX磁盘根分区,如果根分区空间大于等于90,发送邮件给1.inUXSA(1)打印根分区大小df-hsed-n7Sp'awk,print$5'awk-F""'print$l)'注解:awkiprintS5,意思是打印第5个域,-F的意思为分隔,例如以分隔,简单意思就是去掉百分号,awk-F.Print$1分隔点.号。(2)if条件判断该大小是否大于90,如果大于90则发送邮件报警whilesleep5mdoforiin'df-hsed-n7Sp,awk,p11ntS5'sed,sg,xdoechoSiiflSi-ge90;thenecho"MorethanQo1.inuxofdiskspacejPlease1.inuxSACheck1.inuxDisk!"mail-s"Warn1.inuxZPartsisSiwXXXXXX.XXfidonedone6、统计NginX访问日志,访问量排在前20的ip地址:cataccess.logawk'prints1,sortuniq-csort-nrhead-20注解:Sort排序、uniq(检查及删除文本文件中重复出现的行列)7、Sed另外一个用法找到当前行,然后在修改该行后面的参数:sed-i7SE1.INUXsenforcingdisabled7etcselinuxconfigSed冒号方式Sed-i飞/tmp/tmp/abc/g'test.txt意思是将tmp改成/tmp/abc/。8、打印出一个文件里面最大和最小值:cata.txtsort-nrawkiENDprintJNR=1,cata.txtsort-nrawk'ENDprintNR=I,这个才是真正的打印最大最小值:Sed'sg,a.txt|sort-nr|sed-n,1p;$p,9、使用snmpd抓取版本为v2的cacti数据方式:Snmpwalk-v2c-cpublic192.168.0.24110修改文本中以jk结尾的替换成yz:sed-e*sjkSyzg,b.txt11网络抓包:tcpdumptcpdump-nnhost192.168.56.7andport80抓取56.7通过80请求的数据包。tcpdump-nnhost192.168.56.7or!host192.168.0.22andport80排除0.2280端口!tcpip7层协议物理层-数据链路层-网络层传输层-会话层表示层-应用层。12、显示最常用的20条命令:cat.bash_history|grep-vA#|awk*print$1,sortuniq-csort-nrhead-2013、写一个脚本查找最后创建时间是3天前,后缀是*.1Og的文件并删除。find.-mtime+3-name,'*.log11xargsrm-rf;14、写一个脚本将某目录下大于100k的文件移动至tmp下。find.-size+100k-execmvtmp;15、写一个防火墙配置脚本,只允许远程主机访问本机的80端口。iptables-Fiptables-Xiptables-AINPUT-ptcpdport80-jacceptiptables-AINPUT-ptcp-jREJECT血者iptables-AINPUT-mstate-stateNEW-mtcp-ptcp-dport80-jACCEPT16、写一个脚本进行nginx日志统计,得至Ii访问ip最多的前10个(nginx日志路径:homelogsnginxdefaultaccess.log)ocd/home/logs.nginx/defaultsort-m-k4-oaccess.Iogokaccess.1access.2access.3cataccess.logokawk,print$1,sort-nuniq-csort-nrhead-l017.替换文件中的目录sed'suserlocaltmpg,test.txt或者sed-i,susrlocaltmpg,test.txt附1.inux运维应知必会一令运维工程师(OPerationS)在国内又称为运维开发工程师(DeVoPs),在国外称为SRE(SiteReliabilityEngineering)o负责维护并确保整个服务的高可用性,同时不断优化系统架构、提升部署效率、优化资源利用率提高整体的RO1.作为工作几年的1.inUX运维老司机,总结了1.inUX命令行的常用的一些用法,希望对您有所收获。1 .搜索在Vi和Vim中如果打开一个很大的文件,不容易找到对应的内容,可以使用自带的搜索关键字进行搜索定位:在Vi和Vim界面中输入“/"(反斜杠),之后会出现一个输入框让你输入,当你输入的关键字在文件中存在就会以高亮的形式显示出来,之后按回车就确定定位到当前高亮位置,如果不是你要找的,则可以按:“n“,意即寻找下一个输入关键字的内容。2 .vim恢复以及乱码问题(1)在vi和vim中如果不小心误删除了一些东西,想要恢复怎么办?首先要退出编辑状态,即按ESC键,之后再按U撤销之前的修改的内容。(2)在用Vi或Vim打开一个文件的时候,如果有些地方出现一些特殊符号或是乱码,可以通过以下命令尝试:vim-bmytest.php(其中-b一般是用来查看对应的二进制文件的)3 .管道命令,即竖杠->T上面的意思是:将查询出来的内容交给管道后面的命令装饰之后再展示出来例如:catinstall.logmore(more的意思是将一屏放不下的内容以分页的形式显示)ls-letcmore如果想看上一页的内容,可以通过:Shift+PageUp来查看管道配合gr叩(过滤)可以达到很好用的组合例如:cat-nhello.txtgrep"hello"(查看hello.txt文件内容,并过滤出来带有hello的内容),-n表示显示出来第几行的内容4 .find搜寻文件或目录findhome-namehe11o*(查找home目录下的文件名或目录为hello的)find/-nameh?m*(在跟目录下查找h开头第二个字符是任意的,第三个是m,后面的是任意的字符)find-size+l(X)0000k(表示在根目录下查询文件大于100OOOOK的文件)5字符串替换命令swellgood替换当前行第一个well为goods/well/good/g替换当前行所有well为goodn,$s/well/good/替换第n行开始到最后一行中每一行的第一个well为goodn,$s/well/good/g替换第n行开始到最后一行中每一行所有well为goodn为数字,若n为.,表示从当前行开始到最后一行swellgood(等同于gwe11sgood)替换每一行的第一个WeH为goods/well/good/g(等同于gwellsgoodg)替换每一行中所有well为good特殊符号转义:可以使用#作为分隔符,此时中间出现的/不会作为分隔符s#Wen/#good/#替换当前行第一个well/为good/s#/usr/bin#/bin#g可以把文件中所有路径usrbin换成/bin6 .重定向命令Is-IZetc/希望ls-letc>homemyback.txt(覆盖重定向)把显示的结果覆盖至Jhomemyback.txt中去ls-letc>>homemyback.txt(追加重定向)把显示的结果追加到/homeZmyback.txt中去7 .删除多行删除多行步骤如下:1.首先要显示对应的行数这样方能知道从第几行到第几行删除setnu2.按ESC键退出,在命令行中输入:190,6233d(即1190,623引都删除掉)如果想要情况整个文件内容,在直接运行以下命令:清空文件内容:>log.txt8 .行位定位直接定位到最后一行:按ESC键退出,在命令行中输入:G直接定位到第一行:按ESC键退出,在命令行中输入:IG直接定位到某一行:(第17行)按ESC键退出,在命令行中输入:17G9 .复制一行或多行<1.复制一行yy复制当前行P粘贴<2.复制多行7yy从当前行开始复制7行P粘贴10 .1.inux中查看python的版本python-V或者pythonversion11 .grep的用法< 1.显示匹配的后n行(after)grep-An< 2.显示匹配的前n行(before)grep-Bn< 3.显示匹配的前后n行(context)grep-Cn< 4.忽略大小写grep-istr12.11或Is显示说明11-ht(h会按照标准格式自动转换大小即:456M,1.2G等,t表示显示内容按照时间倒序排列)应用案例:清空8月份的日志文件:rm-rfll-htawk78月print6,6,NF,awk,Print$NF'、说明:awk7pattemaction,->awk,8月print6,6,NF只显示第六行与最后一行的内容且只保留8月的列表内容显示。Is中文件颜色的显示代表的意义为:1 .蓝色目录2 .绿色可执行文件3 .红色压缩文件4 .浅蓝色链接文件5 .灰色其他文件13 .查看某文件被哪个进程所占用ISof文件名(01rf2013042434loga(l>folx.logC0WUTDPIDUSERFDTYPtDEVICt5IZBOFFHoDeNAMEjava19111901r2"REGE,3101731396996668lr.l014 .创建用户以及查看当前用户Useraddredispasswdredis如果是Ubuntu系统则需要使用如下命令:useraddopenstack-m-s/bin/bashuserdel-ropenstack查看当前系统存在的用户组和用户etcgroup文件包含所有组etcshadow和/etc/passwd系统存在的所有用户名15 .常用查看文件大小与1.inux系统命令查看内存使用情况:free-m(m为MB,g为GB)9O12013042434/)(free-fltotaludfreesharedbufferscached129013xom?222”03186X65-/Iwffers/cache:3194492069:65534276SS07查看对应磁盘使用情况:df-lh(solrf2013042434J<df-l文件系筑容量己网可用己闲U飨口Zdevsda3212G38G16”19%/tapfa3G06”0«devaha<tev9dal194N32N1S3M171/bootdev9dbl5.47IIeGS,OT3«dm查看对应CPU使用情况:cat/proc/cpuinfo会有32个大致相同的内容展示(下标是从0开始的),这就说明该服务器为8:GefiUifteIntel:Xnttl()Xeoa(B):Sr9f:5199.29processoreufally:y:yvbo9oap>Clflueh1M:2SM.322040KBteppxgcpuMBtccbemPbyticalidSibliaotcoreidcpucompcdUUCIaIapcidpufpuexceptioeCpuidlevel核操作系统1y:tuVBedt叼tecMrpmbc«OKeapcMpBCrrp9bcCBOVpatpM3Celflumdt>cpi三xfor9ycalltuRPClgEucpIBcoest<att>crcj>erfBoapebbt4rvpv900dStopologyDOMtOPcerfaperfPtHpcIauICPIvexVBietta2”x3czl<XtPrPdCBPCXdc*m4m2s2pcPOPca。cc<ledlXMetiaerewvvfl<crdcXtaveoptpinptdttpr.dovwfleprortyeptVPXaf>gsboeneperuocbe_«lignBrot:M*ddre>>1ms:«bcphysical94(bitsvirtualpovrMn9atfit:或者有更牛逼的命令:catprocCPUinfOIgreP"modelname"head-1(只显示一行对应的CPU型号以及其他信息)catprocCPUinfOlgrep"modelname"(系统有几个核就会显示几行)catprocCPUinfolgreP"modelname"wc-l(统计出一共有多少核)查看对应服务器版本当前操作系统发行版信息:cat/etc/issue或cat/etc/redhat-release(9lr2013042434/$cat/etc/issueCentOSrelease6.4(Final)_Kernelronanm查看更为底层的版本信息:catprocVerSiOn(例如:CentOS实际最根源为RetHat,此命令将会显示所采用RetHat的版本)l(MlrfMlX)424Mctpmvetfioa>UbsmWMiaaJ.<.U<)S.XC.xli>4IaOCktaXl41c3.b9y95呻)<ccBraim4.4.72O12O3XJ(MBac4.4.7-3QCC>I11SWrFcb2200:31:24OTC2013=-1如果想查看某个文件夹当前所占用的空间使用:du-hnode(cddatasolr-4.8.0)-rwxrw-rw-1rootrootsolr16476月819936月1916:43aM>.properties2916:11-rw-rw-r-1solr-rwxr-xr-x1rootroot13436月1709:24Iocationinfoupdate_repeat.sh-rwxrw-rw-1rootroot53943047月209:04location.log-rwxrw-rw-1rootroot8045月2016:01log4j.properties-rwxr-xr-x1solrsolr13446月1512:31recoverdata.shsolr2013042434Iocationinfoupdate_repeat$du-hlocation.log6.2Mlocation.log如果想查看当前目录下的所有文件各个大小du-sh*(cd)9lr82013042434】6du-Sh*38Mlogs995MIOg1.75740sole33MSOlr-WebaPP16 .查看内存情况<l.jstat-gcpid可以看到对应各个内存大小、使用状况以及GC处理情况<2.jmap-he叩pid查看内存分布<3.jstat-gcutilpid1000每隔Is输出java进程的gc情况17 .修改文件夹及其里面的内容的权限chown-Rsolrsolr/home/solr/lib意思是将/home/SOlr/1ib文件夹及其里面内容的用户所属权限修改为Solr用户所属权限18 .查看某个端口链接状态的连接数netstat-nlapgrep-iestgrep-i6379awk'print$4'netstat-nlapgrep-iestgrep-i1121wc-l平时使用总结,使用此命令如果实在记不住后面参数有哪些,那么直接记住为:-nlap即可,大部分情况都可以满足我们的需求netstat常见参数如下:-a(a11)显示所有选项,默认不显示1.lSTEN相关-t(tcp)仅显示tcp相关选项- U(UdP)仅显示udp相关选项- n拒绝显示别名,能显示数字的全部转化成数字。- 1仅列出有在1.iSten(监听)的服矜状态- P显示建立相关链接的程序名- r显示路由信息,路由表- e显示扩展信息,例如Uid等- s按各个协议进行统计- C每隔一个固定时间,执行该netstat命令。提示:1.ISTEN和1.ISTENING的状态只有用-a或者-1才能看到grep-i(i表示忽略大小写)awkprint$4(表示只打印第4列)grep-iest(est表示:ESTAB1.ISHED,即只显示ESTAB1.ISHED即连接状态的端口)grep命令最后的那个显示出来的结果以它进行标红,即最后一个grep为:grep-i6379,那么打印出来的结果其中的6379标红,结果如下如所示:W*l.M.14.2Mtl.M.S0.230:*M.M.14.3MmO6lA.18.1.130s<Ol.M.l.nr-.AlA.Ml.l>0i0XM.IM.IM.JNiO11X42XIX:010.>ae.2M:iM.ua.1SlMM2aIMl>IU<IMINIMIMUttMJJIMB"XMM3IMi«e13192IK.<tIMlit14M44)M.11.Him1410«M.三iw三i=19.同步服务器的时间ntpdatepool.ntp.org将这个命令启用为定时脚本执行,具体如下所示:1*2*ntpdatepool.ntp.org20.不允许ssh登录如何配置修改VimetcsysconfigSShd_config文件,增加一行:AllowUserssolr,具体如下所示:f1.oginGraceTiJM2mPerBitRoot1.oginnoAllowUsersAllowUsersAllowUsersAllowUsersIowUsersAllowUsersyangzhiguoWUnan1iangyongxingwrmzxsyslogsolrStrictModesyesMaxAuthTries6MaxSessions10/etx/ssh/sshdConfig"1631.,4558CWriUen使其生效运行如下命令:Servicesshdreload常用系统级配置总结:1 .限制登录:etcsshSShd_config修改后需重启:Servicesshdrestart2 .用户配置:etcpasswd3 .sudo权限:etcsudoers21 .常用JDK系统环境变量配置1JAVA_HOME=/usr/java/jdk1.7.0_552.C1.ASSPATH=.$JAVA_HOME/lib.tools.jar3.PATH=$JAVA_HOME/bin$PATH4.exportIAVA_HOMEC1.ASSPATHPATH22 .查看Redis/Tomcat的版本redis-cliinfbgrep,redis-version,tomcat版本需要进入到安装目录下的bin/文件夹:./version.sh或者shversion.sh23 .怎么看Iinux的防火墙是否阻止80端口1iptables-vn1.grep"80u返回有内容说明开通,没返回内容,则说明阻。