转linux命令Reclouds

sort-n#按数字排序sort-nr#按数字倒叙sort-u#过滤重复行sort-ma.txtc.txt#将两个文件内容整合到一起sort-n-t''-k2-k3a.txt#第二域相同,将从第三域进行升降处理sort-n-t':'-k3ra.txt#以:为分割域的第三域进行倒叙排列sort-k1.3a.txt#从第三个字母起进行排序sort-t""-k2n-ua.txt#以第二域进行排序,如果遇到重复的,就删除

find查找{

vim编辑器{

归档解压缩{

}文件ACL权限控制{

getfacl1.test#查看文件ACL权限setfacl-R-mu:xuesong:rw-1.test#对文件增加用户的读写权限-R递归

}svn更新代码{

--force#强制覆盖/usr/bin/svn--usernameuser--passwordpasswdco$Code${SvnPath}src/#检出整个项目/usr/bin/svn--usernameuser--passwordpasswdup$Code${SvnPath}src/#更新项目/usr/bin/svn--usernameuser--passwordpasswdexport$Code$File${SvnPath}src/$File#导出个别文件/usr/bin/svn--usernameuser--passwordpasswdexport-r版本号svn路径本地路径--force#导出指定版本

}git{

#编译安装git-1.8.4.4./configure--with-curl--with-expatmakemakeinstallgitclonegit@10.10.10.10:gittest.git./gittest/#克隆项目到指定目录gitpull#更新项目需要cd到项目目录中gitadd.#更新所有文件gitcommit-m"gittestup"#提交操作并添加备注gitpush#正式提交到远程git服务器gitreset--hard#本地恢复整个项目gitrm-r-n--cached./img#-n执行命令时,不会删除任何文件,而是展示此命令要删除的文件列表预览gitrm-r--cached./img#执行删除命令需要commit和push让远程生效gitinit--baresmc-content-check.git#初始化新git项目需要手动创建此目录并给git用户权限chown-Rgit:gitsmc-content-check.gitgitconfig--globalcredential.helperstore#记住密码

恢复rm删除的文件{

#debugfs针对ext2#ext3grep针对ext3#extundelete针对ext4df-T#首先查看磁盘分区格式umount/data/#卸载挂载,数据丢失请首先卸载挂载,或重新挂载只读ext3grep/dev/sdb1--ls--inode2#记录信息继续查找目录下文件inode信息ext3grep/dev/sdb1--ls--inode131081#此处是inodeext3grep/dev/sdb1--restore-inode49153#记录下inode信息开始恢复目录

openssl{

opensslrand15-base64#口令生成opensslsha1filename#哈希算法校验文件opensslmd5filename#MD5校验文件opensslbase64filename.txt#base64编码/解码文件(发送邮件附件之类功能会可以使用)opensslbase64-dfilename.bin#base64编码/解码二进制文件opensslenc-aes-128-cbcfilename.aes-128-cbc#加密文档#推荐使用的加密算法是bf(Blowfish)和-aes-128-cbc(运行在CBC模式的128位密匙AES加密算法),加密强度有保障opensslenc-d-aes-128-cbc-infilename.aes-128-cbc>filename#解密文档

2软件{

rpm{

rpm-ivhlynx#rpm安装rpm-elynx#卸载包rpm-elynx--nodeps#强制卸载rpm-qa#查看所有安装的rpm包rpm-qa|greplynx#查找包是否安装rpm-ql#软件包路径rpm-Uvh#升级包rpm--testlynx#测试rpm-qc#软件包配置文档rpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6#导入rpm的签名信息rpm--initdb#初始化rpm数据库rpm--rebuilddb#重建rpm数据库在rpm和yum无响应的情况使用先rm-f/var/lib/rpm/__db.00*在重建

yum{

yum使用epel源{

自定义yum源{

#导入keyrpm--import/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5

编译{

源码安装{

./configure--help#查看所有编译参数./configure--prefix=/usr/local/#配置参数make#编译#make-j8#多线程编译,速度较快,但有些软件不支持makeinstall#安装包makeclean#清除编译结果

perl程序编译{

perlMakefile.PLmakemaketestmakeinstall

python程序编译{

pythonfile.py#源码包编译安装pythonsetup.pybuildpythonsetup.pyinstall

}编译c程序{

gcc-ghello.c-ohello

3系统{

开机启动脚本顺序{

/etc/profile/etc/profile.d/*.sh~/bash_profile~/.bashrc/etc/bashrc

进程管理{

ps-eaf#查看所有进程kill-9PID#强制终止某个PID进程kill-15PID#安全退出需程序内部处理信号cmd&#命令后台运行nohupcmd&#后台运行不受shell退出影响ctrl+z#将前台放入后台(暂停)jobs#查看后台运行程序bg2#启动后台暂停进程fg2#调回后台进程pstree#进程树vmstat19#每隔一秒报告系统性能信息9次sar#查看cpu等状态lsoffile#显示打开指定文件的所有进程lsof-i:32768#查看端口的进程renice+1180#把180号进程的优先级加1ps{

}top{

第四、五行:为内存信息。内容如下:Mem:191272ktotal物理内存总量173656kused使用的物理内存总量17616kfree空闲内存总量22052kbuffers用作内核缓存的内存量Swap:192772ktotal交换区总量0kused使用的交换区总量192772kfree空闲交换区总量123988kcached缓冲的交换区总量。内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

进程信息区,各列的含义如下:#显示各个进程的详细信息

列出正在占用swap的进程{

}linux操作系统提供的信号{kill-l#查看linux提供的信号trap"echoaaa"2315#shell使用trap捕捉退出信号

#发送信号一般有两种原因:#1(被动式)内核检测到一个系统事件.例如子进程退出会像父进程发送SIGCHLD信号.键盘按下control+c会发送SIGINT信号#2(主动式)通过系统调用kill来向指定进程发送信号#进程结束信号SIGTERM和SIGKILL的区别:SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。#如果一个进程收到一个SIGUSR1信号,然后执行信号绑定函数,第二个SIGUSR2信号又来了,第一个信号没有被处理完毕的话,第二个信号就会丢弃。

日志管理{

selinux{

查看剩余内存{

free-m#-/+buffers/cache:64581649#6458M为真实使用内存1649M为真实剩余内存(剩余内存+缓存+缓冲器)#linux会利用所有的剩余内存作为缓存,所以要保证linux运行速度,就需要保证内存的缓存大小

}系统信息{

}硬件信息{

more/proc/cpuinfo#查看cpu信息lscpu#查看cpu信息cat/proc/cpuinfo|grepname|cut-f2-d:|uniq-c#查看cpu型号和逻辑核心数getconfLONG_BIT#cpu运行的位数cat/proc/cpuinfo|grep'physicalid'|sort|uniq-c#物理cpu个数cat/proc/cpuinfo|grepflags|grep'lm'|wc-l#结果大于0支持64位cat/proc/cpuinfo|grepflags#查看cpu是否支持虚拟化pae支持半虚拟化IntelVT支持全虚拟化more/proc/meminfo#查看内存信息dmidecode#查看全面硬件信息dmidecode|grep"ProductName"#查看服务器型号dmidecode|grep-P-A5"Memory\s+Device"|grepSize|grep-vRange#查看内存插槽cat/proc/mdstat#查看软raid信息cat/proc/scsi/scsi#查看Dell硬raid信息(IBM、HP需要官方检测工具)lspci#查看硬件信息lspci|grepRAID#查看是否支持raidlspci-vvv|grepEthernet#查看网卡型号lspci-vvv|grepKernel|grepdriver#查看驱动模块modinfotg2#查看驱动版本(驱动模块)ethtool-iem1#查看网卡驱动版本ethtoolem1#查看网卡带宽

}终端快捷键{

Ctrl+A#行前Ctrl+E#行尾Ctrl+S#终端锁屏Ctrl+Q#解锁屏Ctrl+D#退出

开机启动模式{

vi/etc/inittabid:3:initdefault:#3为多用户命令#ca::ctrlaltdel:/sbin/shutdown-t3-rnow#注释此行禁止ctrl+alt+del关闭计算机

终端提示显示{

echo$PS1#环境变量控制提示显示PS1='[\u@\H\w\A\@#]\$'PS1='[\u@\h\W]\$'

定时任务{

at5pm+3days/bin/ls#单次定时任务指定三天后下午5:00执行/bin/lscrontab-e#编辑周期任务#分钟小时天月星期命令或脚本1,301-3/2***命令或脚本>>file.log2>&1echo"407**2/root/sh">>/var/spool/cron/root#直接将命令写入周期任务crontab-l#查看自动周期性任务crontab-r#删除自动周期性任务cron.deny和cron.allow#禁止或允许用户使用周期任务servicecrondstart|stop|restart#启动自动周期性服务*****echo"d">>d$(date+\%Y\%m\%d).log#让定时任务直接生成带日期的log需要转义%

date{星期日[SUN]星期一[MON]星期二[TUE]星期三[WED]星期四[THU]星期五[FRI]星期六[SAT]一月[JAN]二月[FEB]三月[MAR]四月[APR]五月[MAY]六月[JUN]七月[JUL]八月[AUG]九月[SEP]十月[OCT]十一月[NOV]十二月[DEC]

limits.conf{

ulimit-SHn65535#临时设置文件描述符大小进程最大打开文件柄数还有socket最大连接数,等同配置nofileulimit-SHu65535#临时设置用户最大进程数ulimit-a#查看

/etc/security/limits.conf

#文件描述符大小openfiles#lsof|wc-l查看当前文件句柄数使用数量*softnofile16384#设置太大,进程使用过多会把机器拖死*hardnofile32768

#用户最大进程数maxuserprocesses#echo$((`psuxm|wc-l`-`psux|wc-l`))查看当前用户占用的进程数[包括线程]usersoftnproc16384userhardnproc32768

#如果/etc/security/limits.d/有配置文件,将会覆盖/etc/security/limits.conf里的配置#即/etc/security/limits.d/的配置文件里就不要有同样的参量设置/etc/security/limits.d/90-nproc.conf#centos6.3的默认这个文件会覆盖limits.confusersoftnproc16384userhardnproc32768

sysctl-p#修改配置文件后让系统生效

百万长链接设置{#内存消耗需要较大vim/root/.bash_profile#添加如下2行,退出bash重新登陆echo20000500>/proc/sys/fs/nr_openulimit-n10000000

libc.so故障修复{

#由于升级glibc导致libc.so不稳定,突然报错,幸好还有未退出的终端grep:errorwhileloadingsharedlibraries:/lib64/libc.so.6:ELFfileOSABIinvalid

#看看当前系统有多少版本libc.sols/lib64/libc-[tab]

#更改环境变量指向其他libc.so文件测试exportLD_PRELOAD=/lib64/libc-2.7.so#如果不改变LD_PRELOAD变量,ln不能用,需要使用/sbin/sln命令做链接

#当前如果好使了,在执行下面强制替换软链接。如不好使,测试其他版本的libc.so文件ln-f-s/lib64/libc-2.7.so/lib64/libc.so.6

sudo{

echomyPassword|sudo-Sls/tmp#直接输入sudo的密码非交互,从标准输入读取密码而不是终端设备visudo#sudo命令权限添加/etc/sudoers用户别名(可用all)=NOPASSWD:命令1,命令2userALL=NOPASSWD:/bin/su#免root密码切换root身份wangminglinuxfan=NOPASSWD:/sbin/apachestart,/sbin/apacherestartUserNameALL=(ALL)ALLUserNameALL=(ALL)NOPASSWD:ALLpeterliALL=(ALL)NOPASSWD:/sbin/serviceDefaultsrequiretty#sudo不允许后台运行,注释此行既允许Defaults!visiblepw#sudo不允许远程,去掉!既允许

grub开机启动项添加{

vim/etc/grub.conftitlems-dosrootnoverify(hd0,0)chainloader+1

stty{

#stty时一个用来改变并打印终端行设置的常用命令

sttyiuclc#在命令行下禁止输出大写stty-iuclc#恢复输出大写sttyolcuc#在命令行下禁止输出小写stty-olcuc#恢复输出小写sttysize#打印出终端的行数和列数sttyeof"string"#改变系统默认ctrl+D来表示文件的结束stty-echo#禁止回显sttyecho#打开回显stty-echo;read;sttyecho;read#测试禁止回显sttyigncr#忽略回车符stty-igncr#恢复回车符sttyerase'#'#将#设置为退格字符sttyerase'^'#恢复退格字符定时输入{timeout_read(){timeout=$1old_stty_settings=`stty-g`#savecurrentsettingsstty-icanonmin0time100#set10seconds,not100secondsevalreadvarname#=read$varnamestty"$old_stty_settings"#recoversettings}read-t10varname#更简单的方法就是利用read命令的-t选项}

检测用户按键{

#!/bin/bashold_tty_settings=$(stty-g)#保存老的设置(为什么).stty-icanonKeypress=$(head-c1)#或者使用$(ddbs=1count=12>/dev/null)echo"Keypressedwas\""$Keypress"\"."stty"$old_tty_settings"#恢复老的设置.exit0

iptables{

内建三个表:natmangle和filterfilter预设规则表,有INPUT、FORWARD和OUTPUT三个规则链vi/etc/sysconfig/iptables#配置文件INPUT#进入FORWARD#转发OUTPUT#出去ACCEPT#将封包放行REJECT#拦阻该封包DROP#丢弃封包不予处理-A#在所选择的链(INPUT等)末添加一条或更多规则-D#删除一条-E#修改-p#tcp、udp、icmp0相当于所有all!取反-P#设置缺省策略(与所有链都不匹配强制使用此策略)-s#IP/掩码(IP/24)主机名、网络名和清楚的IP地址!取反-j#目标跳转,立即决定包的命运的专用内建目标-i#进入的(网络)接口[名称]eth0-o#输出接口[名称]-m#模块--sport#源端口--dport#目标端口iptables-F#将防火墙中的规则条目清除掉#注意:iptables-PINPUTACCEPTiptables-restore<规则文件#导入防火墙规则/etc/init.d/iptablessave#保存防火墙设置/etc/init.d/iptablesrestart#重启防火墙服务iptables-L-n#查看规则iptables-tnat-nL#查看转发

iptables配置实例文件{

iptables配置实例{

#允许某段IP访问任何端口iptables-AINPUT-s192.168.0.3/24-ptcp-jACCEPT#设定预设规则(拒绝所有的数据包,再允许需要的,如只做WEB服务器.还是推荐三个链都是DROP)iptables-PINPUTDROPiptables-PFORWARDDROPiptables-POUTPUTACCEPT#注意:直接设置这三条会掉线#开启22端口iptables-AINPUT-ptcp--dport22-jACCEPT#如果OUTPUT设置成DROP的,要写上下面一条iptables-AOUTPUT-ptcp--sport22-jACCEPT#注:不写导致无法SSH.其他的端口一样,OUTPUT设置成DROP的话,也要添加一条链#如果开启了web服务器,OUTPUT设置成DROP的话,同样也要添加一条链iptables-AOUTPUT-ptcp--sport80-jACCEPT#做WEB服务器,开启80端口,其他同理iptables-AINPUT-ptcp--dport80-jACCEPT#做邮件服务器,开启25,110端口iptables-AINPUT-ptcp--dport110-jACCEPTiptables-AINPUT-ptcp--dport25-jACCEPT#允许icmp包通过,允许pingiptables-AOUTPUT-picmp-jACCEPT(OUTPUT设置成DROP的话)iptables-AINPUT-picmp-jACCEPT(INPUT设置成DROP的话)#允许loopback!(不然会导致DNS无法正常关闭等问题)IPTABLES-AINPUT-ilo-pall-jACCEPT(如果是INPUTDROP)IPTABLES-AOUTPUT-olo-pall-jACCEPT(如果是OUTPUTDROP)

centos6的iptables基本配置{*filter:INPUTACCEPT[0:0]:FORWARDACCEPT[0:0]:OUTPUTACCEPT[0:0]-AINPUT-mstate--stateESTABLISHED,RELATED-jACCEPT-AINPUT-picmp-jACCEPT-AINPUT-ilo-jACCEPT-AINPUT-s222.186.135.61-ptcp-jACCEPT-AINPUT-ptcp--dport80-jACCEPT-AINPUT-mstate--stateNEW-mtcp-ptcp--dport22-jACCEPT-AINPUT-jREJECT--reject-withicmp-host-prohibited-AINPUT-ptcp-mtcp--tcp-flagsFIN,SYN,RST,PSH,URGRST-jDROP-AFORWARD-jREJECT--reject-withicmp-host-prohibitedCOMMIT}

添加网段转发{

#例如通过vpn上网echo1>/proc/sys/net/ipv4/ip_forward#在内核里打开ip转发功能iptables-tnat-APOSTROUTING-s10.8.0.0/24-jMASQUERADE#添加网段转发iptables-tnat-APOSTROUTING-s10.0.0.0/255.0.0.0-oeth0-jSNAT--to192.168.10.158#原IP网段经过哪个网卡IP出去iptables-tnat-nL#查看转发

端口映射{#内网通过有外网IP的机器映射端口#内网主机添加路由routeadd-net10.10.20.0netmask255.255.255.0gw10.10.20.111#内网需要添加默认网关,并且网关开启转发#网关主机echo1>/proc/sys/net/ipv4/ip_forward#在内核里打开ip转发功能iptables-tnat-APREROUTING-d外网IP-ptcp--dport9999-jDNAT--to10.10.20.55:22#进入iptables-tnat-APOSTROUTING-s10.10.20.0/24-jSNAT--to外网IP#转发回去iptables-tnat-nL#查看转发

4服务{

chkconfig{

nginx{

yuminstall-ymakegccopenssl-develpcre-develbzip2-devellibxml2libxml2-develcurl-devellibmcrypt-devellibjpeglibjpeg-devellibpnglibpng-developenssl

groupaddnginxuseraddnginx-gnginx-M-s/sbin/nologinmkdir-p/opt/nginx-tmp

#./configure--help#--with#默认不加载需指定编译此参数才使用#--without#默认加载,可用此参数禁用#--add-module=path#添加模块的路径#--add-module=/opt/ngx_module_upstream_check\#nginx代理状态页面#ngx_module_upstream_check编译前需要打对应版本补丁patch-p1

make&&makeinstall

/usr/local/nginx/sbin/nginx–t#检查Nginx配置文件但并不执行/usr/local/nginx/sbin/nginx-t-c/opt/nginx/conf/nginx.conf#检查Nginx配置文件/usr/local/nginx/sbin/nginx#启动nginx/usr/local/nginx/sbin/nginx-sreload#重载配置/usr/local/nginx/sbin/nginx-sstop#关闭nginx服务

编译参数{

#so模块用来提供DSO支持的apache核心模块#如果编译中包含任何DSO模块,则mod_so会被自动包含进核心。#如果希望核心能够装载DSO,但不实际编译任何DSO模块,则需明确指定"--enable-so=static"

./configure--prefix=/usr/local/apache--enable-so--enable-mods-shared=most--enable-rewrite--enable-forward#实例编译

转发{

mysql源码安装{groupaddmysqluseraddmysql-gmysql-M-s/bin/falsetarzxvfmysql-5.0.22.tar.gzcdmysql-5.0.22./configure--prefix=/usr/local/mysql\--with-client-ldflags=-all-static\--with-mysqld-ldflags=-all-static\--with-mysqld-user=mysql\--with-extra-charsets=all\--with-unix-socket-path=/var/tmp/mysql.sockmake&&makeinstall#生成mysql用户数据库和表文件,在安装包中输入scripts/mysql_install_db--user=mysqlvi~/.bashrcexportPATH="$PATH:/usr/local/mysql/bin"#配置文件,有large,medium,small三个,根据机器性能选择cpsupport-files/my-medium.cnf/etc/my.cnfcpsupport-files/mysql.server/etc/init.d/mysqldchmod700/etc/init.d/mysqldcd/usr/localchmod750mysql-Rchgrpmysqlmysql-Rchownmysqlmysql/var-Rcp/usr/local/mysql/libexec/mysqldmysqld.oldln-s/usr/local/mysql/bin/mysql/sbin/mysqlln-s/usr/local/mysql/bin/mysqladmin/sbin/mysqladminln-s-f/usr/local/mysql/bin/mysqld_safe/etc/rc.d/rc3.d/S15mysql5ln-s-f/usr/local/mysql/bin/mysqld_safe/etc/rc.d/rc0.d/K15mysql5}

mysql常用命令{./mysql/bin/mysqld_safe--user=mysql&#启动mysql服务./mysql/bin/mysqladmin-uroot-p-S./mysql/data/mysql.sockshutdown#停止mysql服务mysqlcheck-uroot-p-Smysql.sock--optimize--databasesaccount#检查、修复、优化MyISAM表mysqlbinlogslave-relay-bin.000001#查看二进制日志(报错加绝对路径)mysqladmin-hmyhost-uroot-pcreatedbname#创建数据库

#格式:mysql-h主机地址-u用户名-p用户密码mysql-h110.110.110.110-P3306-uroot-pmysql-uroot-p-S/data1/mysql5/data/mysql.sock-A--default-character-set=GBK

shell执行mysql命令{mysql-uroot-p'123'xuesong

备份数据库{

mysqldump-hhost-uroot-p--default-character-set=utf8dbname>dbname_backup.sql#不包括库名,还原需先创建库,在usemysqldump-hhost-uroot-p--database--default-character-set=utf8dbname>dbname_backup.sql#包括库名,还原不需要创建库/bin/mysqlhotcopy-uroot-p#mysqlhotcopy只能备份MyISAM引擎mysqldump-uroot-p-Smysql.sock--default-character-set=utf8dbnametable1table2>/data/db.sql#备份表mysqldump-uroot-p123-ddatabase>database.sql#备份数据库结构innobackupex--user=root--password=""--defaults-file=/data/mysql5/data/my_3306.cnf--socket=/data/mysql5/data/mysql.sock--slave-info--stream=tar--tmpdir=/data/dbbackup/temp/data/dbbackup/2>/data/dbbackup/dbbackup.log|gzip1>/data/dbbackup/db50.tar.gz#xtrabackup备份需单独安装软件优点:速度快,压力小,可直接恢复主从复制

还原数据库{

mysql-hhost-uroot-pdbname

赋权限{

#指定IP:$IP本机:localhost所有IP地址:%#通常指定多条grantallonzabbix.*touser@"$IP";#对现有账号赋予权限grantselectondatabase.*touser@"%"Identifiedby"passwd";#赋予查询权限(没有用户,直接创建)grantallprivilegesondatabase.*touser@"$IP"identifiedby'passwd';#赋予指定IP指定用户所有权限(不允许对当前库给其他用户赋权限)grantallprivilegesondatabase.*touser@"localhost"identifiedby'passwd'withgrantoption;#赋予本机指定用户所有权限(允许对当前库给其他用户赋权限)grantselect,insert,update,deleteondatabase.*touser@'ip'identifiedby"passwd";#开放管理操作指令revokeallon*.*fromuser@localhost;#回收权限

更改密码{

updateusersetpassword=password('passwd')whereuser='root'mysqladmin-urootpassword'xuesong'

mysql忘记密码后重置{

cd/data/mysql5/data/mysql5/bin/mysqld_safe--user=mysql--skip-grant-tables--skip-networking&usemysql;updateusersetpassword=password('123123')whereuser='root';

mysql主从复制失败恢复{

slavestop;resetslave;changemastertomaster_host='10.10.10.110',master_port=3306,master_user='repl',master_password='repl',master_log_file='master-bin.000010',master_log_pos=107,master_connect_retry=60;slavestart;

sql语句使用变量{

检测mysql主从复制延迟{1、在从库定时执行更新主库中的一个timeout数值2、同时取出从库中的timeout值对比判断从库与主库的延迟}

mysql慢查询{select*frominformation_schema.processlistwherecommandin('Query')andtime>5\G#查询操作大于5S的进程

}mysqldumpslow慢查询日志查看{

}}

mysql操作次数查询{

select*frominformation_schema.global_status;

com_selectcom_deletecom_insertcom_update

mongodb{

一、启动{#不启动认证./mongod--port27017--fork--logpath=/opt/mongodb/mongodb.log--logappend--dbpath=/opt/mongodb/data/#启动认证./mongod--port27017--fork--logpath=/opt/mongodb/mongodb.log--logappend--dbpath=/opt/mongodb/data/--auth

二、关闭{

#方法:kill传递信号两种皆可kill-2pidkill-15pid

三、开启认证与用户管理{

#恢复密码只需要重启mongodb不加--auth参数

五、查看状态{

#状态信息从服务器启动开始计算,如果过大就会复位,发送复位,所有计数都会复位,asserts中的roolovers值增加

六、常用命令{

db.listCommands()#当前MongoDB支持的所有命令(同样可通过运行命令db.runCommand({"listCommands":`1})来查询所有命令)

七、进程控制{

db.currentOp()#查看活动进程db.$cmd.sys.inprog.findOne()#查看活动进程与上面一样opid#操作进程号op#操作类型(查询\更新)ns#命名空间,指操作的是哪个对象query#如果操作类型是查询,这里将显示具体的查询内容lockType#锁的类型,指明是读锁还是写锁

db.killOp(opid值)#结束进程db.$cmd.sys.killop.findOne({op:opid值})#结束进程

八、备份还原{

./mongoexport-dtest-ct1-ot1.dat#导出JSON格式-c#指明导出集合-d#使用库./mongoexport-dtest-ct1-csv-fnum-ot1.dat#导出csv格式-csv#指明导出csv格式-f#指明需要导出那些例

./mongodump-dtest-o/bak/mongodump#mongodump数据备份./mongorestore-dtest--drop/bak/mongodump/*#mongorestore恢复--drop#恢复前先删除db.t1.find()#查看

#mongodump虽然能不停机备份,但市区了获取实时数据视图的能力,使用fsync命令能在运行时复制数据目录并且不会损坏数据#fsync会强制服务器将所有缓冲区的数据写入磁盘.配合lock还阻止对数据库的进一步写入,知道释放锁为止#备份在从库上备份,不耽误读写还能保证实时快照备份db.runCommand({"fsync":1,"lock":1})#执行强制更新与写入锁db.$cmd.sys.unlock.findOne()#解锁db.currentOp()#查看解锁是否正常

九、修复{

十、python使用mongodb{

文档添加,_id自动创建importdatetimepost={"author":"Mike","text":"Myfirstblogpost!","tags":["mongodb","python","pymongo"],"date":datetime.datetime.utcnow()}posts=db.postsposts.insert(post)ObjectId('...')

批量插入new_posts=[{"author":"Mike","text":"Anotherpost!","tags":["bulk","insert"],"date":datetime.datetime(2009,11,12,11,14)},{"author":"Eliot","title":"MongoDBisfun","text":"andprettyeasytoo!","date":datetime.datetime(2009,11,10,10,45)}]posts.insert(new_posts)[ObjectId('...'),ObjectId('...')]获取所有collectiondb.collection_names()#相当于SQL的showtables获取单个文档posts.find_one()

查询多个文档forpostinposts.find():post

加条件的查询posts.find_one({"author":"Mike"})

高级查询posts.find({"date":{"$lt":"d"}}).sort("author")

统计数量posts.count()

加索引frompymongoimportASCENDING,DESCENDINGposts.create_index([("date",DESCENDING),("author",ASCENDING)])

查看查询语句的性能posts.find({"date":{"$lt":"d"}}).sort("author").explain()["cursor"]posts.find({"date":{"$lt":"d"}}).sort("author").explain()["nscanned"]

JDK安装{

chmod744jdk-1.7.0_79-linux-i586.bin./jdk-1.7.0_79-linux-i586.binvi/etc/profile#添加环境变量JAVA_HOME=/usr/java/jdk1.7.0_79CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/tools.jarPATH=$JAVA_HOME/bin:$PATHexportJAVA_HOMEPATHCLASSPATH

./etc/profile#加载新的环境变量jps-ml#查看java进程}

redis动态加内存{

./redis-cli-h10.10.10.11-p6401save#保存当前快照configget*#列出所有当前配置configgetmaxmemory#查看指定配置configsetmaxmemory15360000000#动态修改最大内存配置参数

nfs{

#依赖rpc服务通信portmap[centos5]或rpcbind[centos6]yuminstallnfs-utilsportmap#centos5安装yuminstallnfs-utilsrpcbind#centos6安装

vim/etc/exports#配置文件#sync#同步写入#async#暂存并非直接写入#no_root_squash#开放用户端使用root身份操作#root_squash#使用者身份为root则被压缩成匿名使用,即nobody,相对安全#all_squash#所有NFS的使用者身份都被压缩为匿名/data/images10.10.10.0/24(rw,sync,no_root_squash)

serviceportmaprestart#重启centos5的nfs依赖的rpc服务servicerpcbindrestart#重启centos6的nfs依赖的rpc服务servicenfsrestart#重启nfs服务确保依赖portmap或rpcbind服务已启动servicenfsreload#重载NFS服务配置文件showmount-e#服务端查看自己共享的服务showmount-a#显示已经与客户端连接上的目录信息showmount-e10.10.10.3#列出服务端可供使用的NFS共享客户端测试能否访问nfs服务mount-tnfs10.10.10.3:/data/images//data/img#挂载nfs如果延迟影响大加参数noac

hdfs{hdfs--help#所有参数

hdfsdfs-help#运行文件系统命令在Hadoop文件系统hdfsdfs-ls/logs#查看hdfsdfs-ls/user/#查看用户hdfsdfs-cathdfsdfs-dfhdfsdfs-duhdfsdfs-rmhdfsdfs-tail

hdfsdfsadmin-help#hdfs集群节点管理hdfsdfsadmin-report#基本的文件系统统计信息}

5网络{

watchmore/proc/net/dev#实时监控流量文件系统累计值iptraf#网卡流量查看工具nethogs-d5eth0eth1#按进程实时统计网络流量epel源nethogssar{-n参数有6个不同的开关:DEV|EDEV|NFS|NFSD|SOCK|ALLDEV显示网络接口信息EDEV显示关于网络错误的统计数据NFS统计活动的NFS客户端的信息NFSD统计NFS服务器的信息SOCK显示套接字信息ALL显示所有5个开关sar-nDEV110rxpck/s#每秒钟接收的数据包txpck/s#每秒钟发送的数据包rxbyt/s#每秒钟接收的字节数txbyt/s#每秒钟发送的字节数rxcmp/s#每秒钟接收的压缩数据包txcmp/s#每秒钟发送的压缩数据包rxmcst/s#每秒钟接收的多播数据包}

}netstat{

#几十万并发的情况下netstat会没有响应,建议使用ss命令-a#显示所有连接中的Socket-t#显示TCP连接-u#显示UDP连接-n#显示所有已建立的有效连接netstat-anlp#查看链接netstat-tnlp#只查看tcp监听端口netstat-r#查看路由表}

ss{

}并发数查看{

netstat-n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'SYN_RECV#正在等待处理的请求ESTABLISHED#正常数据传输状态,既当前并发数TIME_WAIT#处理完毕,等待超时结束的请求CLOSE_WAIT#客户端异常关闭,没有完成4次挥手如大量可能存在攻击行为

ssh{

SSH反向连接{

#外网A要控制内网B

ssh-NfR1234:localhost:2223user1@123.123.123.123-p22#将A主机的1234端口和B主机的2223端口绑定,相当于远程端口映射ss-ant#这时在A主机上sshd会listen本地1234端口#LISTEN0128127.0.0.1:1234*:*sshlocalhost-p1234#在A主机连接本地1234端口

网卡配置文件{

vi/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0BOOTPROTO=noneBROADCAST=192.168.1.255HWADDR=00:0C:29:3F:E1:EAIPADDR=192.168.1.55NETMASK=255.255.255.0NETWORK=192.168.1.0ONBOOT=yesTYPE=EthernetGATEWAY=192.168.1.1#ARPCHECK=no#进制arp检查

route{

route#查看路由表routeadddefaultgw192.168.1.1deveth0#添加默认路由routeadd-net172.16.0.0netmask255.255.0.0gw10.39.111.254#添加静态路由网关routedel-net172.16.0.0netmask255.255.0.0gw10.39.111.254#删除静态路由网关

静态路由{

vim/etc/sysconfig/static-routesanynet192.168.12.0/24gw192.168.0.254anynet192.168.13.0/24gw192.168.0.254

解决ssh链接慢{

sed-i's/GSSAPIAuthenticationyes/GSSAPIAuthenticationno/'/etc/ssh/sshd_configsed-i'/#UseDNSyes/a\UseDNSno'/etc/ssh/sshd_config/etc/init.d/sshdrestart

ftp上传{

ftp-i-v-n$HOST<

nmap{

nmap-PT192.168.1.1-111#先ping在扫描主机开放端口nmap-O192.168.1.1#扫描出系统内核版本nmap-sV192.168.1.1-111#扫描端口的软件版本nmap-sS192.168.1.1-111#半开扫描(通常不会记录日志)nmap-P0192.168.1.1-111#不ping直接扫描nmap-d192.168.1.1-111#详细信息nmap-D192.168.1.1-111#无法找出真正扫描主机(隐藏IP)nmap-p20-30,139,60000-#端口范围表示:扫描20到30号端口,139号端口以及所有大于60000的端口nmap-P0-sV-O-v192.168.30.251#组合扫描(不ping、软件版本、内核版本、详细信息)#不支持windows的扫描(可用于判断是否是windows)nmap-sF192.168.1.1-111nmap-sX192.168.1.1-111nmap-sN192.168.1.1-111

流量切分线路{

#程序判断进入IP线路,设置服务器路由规则控制返回vi/etc/iproute2/rt_tables#添加一条策略252bgp2#注意策略的序号顺序iprouteadddefaultvia第二个出口上线IP(非默认网关)deveth1tablebgp2iprouteaddfrom本机第二个iptablebgp2#查看iproutelisttable252iprulelist#成功后将语句添加开机启动

创建swap文件方法{

ddif=/dev/zeroof=/swapbs=1024count=4096000#创建一个足够大的文件#count的值等于1024x你想要的文件大小,4096000是4Gmkswap/swap#把这个文件变成swap文件swapon/swap#启用这个swap文件/swapswapswapdefaults00#在每次开机的时候自动加载swap文件,需要在/etc/fstab文件中增加一行cat/proc/swaps#查看swapswapoff-a#关闭swapswapon-a#开启swap

新硬盘挂载{

fdisk/dev/sdcp#打印分区d#删除分区n#创建分区,(一块硬盘最多4个主分区,扩展占一个主分区位置。p主分区e扩展)w#保存退出mkfs-text3-L卷标/dev/sdc1#格式化相应分区mount/dev/sdc1/mnt#挂载vi/etc/fstab#添加开机挂载分区LABEL=/data/dataext3defaults12#用卷标挂载/dev/sdb1/data4ext3defaults12#用真实分区挂载/dev/sdb2/data4ext3noatime,defaults12

第一个数字"1"该选项被"dump"命令使用来检查一个文件系统应该以多快频率进行转储,若不需要转储就设置该字段为0第二个数字"2"该字段被fsck命令用来决定在启动时需要被扫描的文件系统的顺序,根文件系统"/"对应该字段的值应该为1,其他文件系统应该为2。若该文件系统无需在启动时扫描则设置该字段为0当以noatime选项加载(mount)文件系统时,对文件的读取不会更新文件属性中的atime信息。设置noatime的重要性是消除了文件系统对文件的写操作,文件只是简单地被系统读取。由于写操作相对读来说要更消耗系统资源,所以这样设置可以明显提高服务器的性能.wtime信息仍然有效,任何时候文件被写,该信息仍被更新。

大磁盘2T和16T分区{

parted/dev/sdb#针对磁盘分区(parted)mklabelgpt#设置为gpt(parted)print(parted)mkpartprimary0KB22.0TB#指定分区大小IsthisstillacceptabletoyouYes/NoYesIgnore/CancelIgnore(parted)printModel:LSIMR9271-8i(scsi)Disk/dev/sdb:22.0TBSectorsize(logical/physical):512B/512BPartitionTable:gptNumberStartEndSizeFilesystemNameFlags117.4kB22.0TB22.0TBprimary(parted)quit

mkfs.ext4-b4096/dev/sdb1#小于16T如使用ext4指定块大小块大小影响磁盘分区大小

#大于16T的单个分区ext4格式化报错Sizeofdevice/dev/sdb1toobigtobeexpressedin32bitsusingablocksizeof4096.#修改ext4的文件添加一行,解决ext4格式化大于16T报错vim/etc/mke2fs.conf

[fs_types]ext4={features=has_journal,extent,huge_file,flex_bg,uninit_bg,dir_nlink,extra_isizeauto_64-bit_support=1#添加此行inode_size=256}

yum-yinstallxfsprogsmkfs.xfs-f/dev/sdb1#大于16T单个分区或使用XFS分区也可

raid原理与区别{

raid0至少2块硬盘.吞吐量大,性能好,同时读写,但损坏一个就完蛋raid1至少2块硬盘.相当镜像,一个存储,一个备份.安全性比较高.但是性能比0弱raid5至少3块硬盘.分别存储校验信息和数据,坏了一个根据校验信息能恢复raid6至少4块硬盘.两个独立的奇偶系统,可坏两块磁盘,写性能非常差

7用户{

#即进入单用户模式:在linux出现grub后,在安装的系统上面按"e",然后出现grub的配置文件,按键盘移动光标到第二行"Ker……",再按"e",然后在这一行的结尾加上:空格single或者空格1回车,然后按"b"重启,就进入了"单用户模式"}特殊权限{

s或S(SUID):对应数值4s或S(SGID):对应数值2t或T:对应数值1大S:代表拥有root权限,但是没有执行权限小s:拥有特权且拥有执行权限,这个文件可以访问系统任何root用户可以访问的资源T或T(Sticky):/tmp和/var/tmp目录供所有用户暂时存取文件,亦即每位用户皆拥有完整的权限进入该目录,去浏览、删除和移动文件

正则表达式{^#行首定位$#行尾定位.#匹配除换行符以外的任意字符*#匹配0或多个重复字符+#重复一次或更多次#重复零次或一次#结束贪婪因子.*表示最小匹配[]#匹配一组中任意一个字符[^]#匹配不在指定组内的字符\#用来转义元字符<#词首定位符(支持vi和grep)#词尾定位符(支持vi和grep)love>x\{m\}#重复出现m次x\{m,\}#重复出现至少m次x\{m,n\}#重复出现至少m次不超过n次X#匹配出现零次或一次的大写字母XX+#匹配一个或多个字母X()#括号内的字符为一组(ab|de)+#匹配一连串的(最少一个)abc或def;abc和def将匹配[[:alpha:]]#代表所有字母不论大小写[[:lower:]]#表示小写字母[[:upper:]]#表示大写字母[[:digit:]]#表示数字字符[[:digit:][:lower:]]#表示数字字符加小写字母

元字符{

\d#匹配任意一位数字\D#匹配任意单个非数字字符\w#匹配任意单个字母数字下划线字符,同义词是[:alnum:]\W#匹配非数字型的字符

字符类:空白字符{

\s#匹配任意的空白符\S#匹配非空白字符\b#匹配单词的开始或结束\n#匹配换行符\r#匹配回车符\t#匹配制表符\b#匹配退格符\0#匹配空值字符

字符类:锚定字符{

\b#匹配字边界(不在[]中时)\B#匹配非字边界\A#匹配字符串开头\Z#匹配字符串或行的末尾\z#只匹配字符串末尾\G#匹配前一次m//g离开之处

捕获{

(exp)#匹配exp,并捕获文本到自动命名的组里(exp)#匹配exp,并捕获文本到名称为name的组里,也可以写成('name'exp)(:exp)#匹配exp,不捕获匹配的文本,也不给此分组分配组号

零宽断言{

(=exp)#匹配exp前面的位置(<=exp)#匹配exp后面的位置(!exp)#匹配后面跟的不是exp的位置(

特殊字符{

流程结构{if判断{

if[$a==$b]thenecho"等于"elseecho"不等于"fi

}case分支选择{

case$xsin0)echo"0";;1)echo"1";;*)echo"其他";;esac

}while循环{

#whiletrue等同while:#读文件为整行读入num=1while[$num-lt10]doecho$num((num=$num+2))done###########################grepaa.txt|whilereadadoecho$adone###########################whilereadadoecho$adone

}for循环{

#读文件已空格分隔w=`awk-F":"'{print$1}'c`fordin$wdo$ddone###########################for((i=0;i<${#o[*]};i++))doecho${o[$i]}done

}until循环{

#当command不为0时循环untilcommanddobodydone

}流程控制{

breakN#跳出几层循环continueN#跳出几层循环,循环次数不变continue#重新循环次数不变

变量{A="abcdef"#将字符串复制给变量A=`cmd`#将命令结果赋给变量A=$(cmd)#将命令结果赋给变量evala=\$$a#间接调用i=2&&echo$((i+3))#计算后打印新变量结果i=2&&echo$[i+3]#计算后打印新变量结果a=$((2>65:8))#判断两个值满足条件的赋值给变量$1$2$*#位置参数*代表所有env#查看环境变量env|grep"name"#查看定义的环境变量set#查看环境变量和本地变量readname#输入变量readonlyname#把name这个变量设置为只读变量,不允许再次设置readonly#查看系统存在的只读文件exportname#变量name由本地升为环境exportname="RedHat"#直接定义name为环境变量exportStat$nu=2222#变量引用变量赋值unsetname#变量清除export-nname#去掉只读变量shift#用于移动位置变量,调整位置变量,使$3的值赋给$2.$2的值赋予$1name+0#将字符串转换为数字number""#将数字转换成字符串a='ee';b='a';echo${!b}#间接引用name变量的值:${a="cc"}#如果a有值则不改变,如果a无值则赋值a变量为cc

数组{

A=(abcdef)#将变量定义为数組${#A[*]}#数组个数${A[*]}#数组所有元素,大字符串${A[@]}#数组所有元素,类似列表可迭代${A[2]}#脚本的一个参数或数组第三位}

定义变量类型{

declare或typeset-r只读(readonly一样)-i整形-a数组-f函数-xexportdeclare-in=0

系统变量{

$0#脚本启动名(包括路径)$n#第n个参数,n=1,2,…9$*#所有参数列表(不包括脚本本身)$@#所有参数列表(独立字符串)$##参数个数(不包括脚本本身)$$#当前程式的PID$!#执行上一个指令的PID$#执行上一个指令的返回值

变量引用技巧{

}}test条件判断{

#符号[]等同test命令

expression为字符串操作{

-nstr#字符串str是否不为空-zstr#字符串str是否为空

expression为文件操作{

-a#并且,两条件为真-b#是否块文件-p#文件是否为一个命名管道-c#是否字符文件-r#文件是否可读-d#是否一个目录-s#文件的长度是否不为零-e#文件是否存在-S#是否为套接字文件-f#是否普通文件-x#文件是否可执行,则为真-g#是否设置了文件的SGID位-u#是否设置了文件的SUID位-G#文件是否存在且归该组所有-w#文件是否可写,则为真-k#文件是否设置了的粘贴位-tfd#fd是否是个和终端相连的打开的文件描述符(fd默认为1)-o#或,一个条件为真-O#文件是否存在且归该用户所有!#取反

expression为整数操作{

expr1-aexpr2#如果expr1和expr2评估为真,则为真expr1-oexpr2#如果expr1或expr2评估为真,则为真

两值比较{

整数字符串-lt<#小于-gt>#大于-le<=#小于或等于-ge>=#大于或等于-eq==#等于-ne!=#不等于

test10-lt5#判断大小echo$#查看上句test命令返回状态#结果0为真,1为假test-n"hello"#判断字符串长度是否为0[$-eq0]&&echo"success"||exit#判断成功提示,失败则退出

}重定向{#标准输出stdout和标准错误stderr标准输入stdincmd1>fiel#把标准输出重定向到file文件中cmd>file2>&1#把标准输出和标准错误一起重定向到file文件中cmd2>file#把标准错误重定向到file文件中cmd2>>file#把标准错误重定向到file文件中(追加)cmd>>file2>&1#把标准输出和标准错误一起重定向到file文件中(追加)cmdfile2#cmd命令以file文件作为stdin(标准输入),以file2文件作为标准输出cat<>file#以读写的方式打开filecmd

>&n#使用系统调用dup(2)复制文件描述符n并把结果用作标准输出<&n#标准输入复制自文件描述符n<&-#关闭标准输入(键盘)>&-#关闭标准输出n<&-#表示将n号输入关闭n>&-#表示将n号输出关闭

}运算符{$[]等同于$(())#$[]表示形式告诉shell求中括号中的表达式的值~var#按位取反运算符,把var中所有的二进制为1的变为0,为0的变为1var\<>str#右移运算符,把var中所有的二进制位向右移动str位,忽略最右移出的各位,最左的各位上补0,每次做一次右移就有实现var除以2var&str#与比较运算符,var和str对应位,对于每个二进制来说,如果二都为1,结果为1.否则为0var^str#异或运算符,比较var和str对应位,对于二进制来说如果二者互补,结果为1,否则为0var|str#或运算符,比较var和str的对应位,对于每个二进制来说,如二都该位有一个1或都是1,结果为1,否则为0

运算符优先级{级别运算符说明1=,+=,-=,/=,%=,*=,&=,^=,|=,<<=,>>=#赋值运算符2||#逻辑或前面不成功执行3&&#逻辑与前面成功后执行4|#按位或5^#按位异或6&#按位与7==,!=#等于/不等于8<=,>=,<,>#小于或等于/大于或等于/小于/大于9\<<,>>#按位左移/按位右移(无转意符号)10+,-#加减11*,/,%#乘,除,取余12!,~#逻辑非,按位取反或补码13-,+#正负}}

数学运算{$(())#整数运算+-*/**#分別为"加、減、乘、除、密运算"&|^!#分別为"AND、OR、XOR、NOT"运算%#余数运算

let{let#运算letx=16/4letx=5**5}

expr{expr14%9#整数运算SUM=`expr2\*3`#乘后结果赋值给变量LOOP=`expr$LOOP+1`#增量计数(加循环即可)LOOP=0exprlength"bkeepzbb"#计算字串长度exprsubstr"bkeepzbb"49#抓取字串exprindex"bkeepzbb"e#抓取第一个字符数字串出现的位置expr30/3/2#运算符号有空格exprbkeep.doc:'.*'#模式匹配(可以使用expr通过指定冒号选项计算字符串中字符数)exprbkeep.doc:'\(.*\).doc'#在expr中可以使用字符串匹配操作,这里使用模式抽取.doc文件附属名

数值测试{

#如果试图计算非整数,则会返回错误rr=3.4expr$rr+1expr:non-numericargumentrr=5expr$rr+16

}}bc{

echo"m^n"|bc#次方计算seq-s'+'1000|bc#从1加到1000seq11000|tr"\n""+"|sed's/+$/\n/'|bc#从1加到1000}}grep{

-c#显示匹配到得行的数目,不显示内容-h#不显示文件名-i#忽略大小写-l#只列出匹配行所在文件的文件名-n#在每一行中加上相对行号-s#无声操作只显示报错,检查退出状态-v#反向查找-e#使用正则表达式-w#精确匹配-wc#精确匹配次数-o#查询所有匹配字段-P#使用perl正则表达式-A3#打印匹配行和下三行-B3#打印匹配行和上三行-C3#打印匹配行和上下三行

grep-v"a"txt#过滤关键字符行grep-w'a\>'txt#精确匹配字符串grep-i"a"txt#大小写敏感grep"a[bB]"txt#同时匹配大小写grep'[0-9]\{3\}'txt#查找0-9重复三次的所在行grep-E"word1|word2|word3"file#任意条件匹配grepword1file|grepword2|grepword3#同时匹配三个echoquan@163.com|grep-Po'(<=@.).*(=.$)'#零宽断言截取字符串#63.coecho"I'msingingwhileyou'redancing"|grep-Po'\b\w+(=ing\b)'#零宽断言匹配echo'RxOpticalPower:-5.01dBm,TxOpticalPower:-2.41dBm'|grep-Po'(<=:).*(=d)'#取出d前面数字#为最小匹配echo'RxOpticalPower:-5.01dBm,TxOpticalPower:-2.41dBm'|grep-Po'[-0-9.]+'#取出d前面数字#为最小匹配echo'["mem",ok],["hardware",false],["filesystem",false]'|grep-Po'[^"]+(=",false)'#取出false前面的字母echo'["mem",ok],["hardware",false],["filesystem",false]'|grep-Po'\w+",false'|grep-Po'^\w+'#取出false前面的字母grep用于if判断{

ifechoabc|grep"a">/dev/null2>&1thenecho"abc"elseecho"null"fi

}tr{-c#用字符串1中字符集的补集替换此字符集,要求字符集为ASCII-d#删除字符串1中所有输入字符-s#删除所有重复出现字符序列,只保留第一个:即将重复出现字符串压缩为一个字符串[a-z]#a-z内的字符组成的字符串[A-Z]#A-Z内的字符组成的字符串[0-9]#数字串\octal#一个三位的八进制数,对应有效的ASCII字符[O*n]#表示字符O重复出现指定次数n。因此[O*2]匹配OO的字符串

tr中特定控制字符表达方式{

\aCtrl-G\007#铃声\bCtrl-H\010#退格符\fCtrl-L\014#走行换页\nCtrl-J\012#新行\rCtrl-M\015#回车\tCtrl-I\011#tab键\vCtrl-X\030

trA-Za-z#将所有大写转换成小写字母tr"""\n"#将空格替换为换行tr-s"[\012]"unixfile#Mac->UNIXtr"\n""\r"macfile#UNIX->Mactr-d"\r"unixfile#DOS->UNIXMicrosoftDOS/Windows约定,文本的每行以回车字符(\r)并后跟换行符(\n)结束awk'{print$0"\r"}'dosfile#UNIX->DOS:在这种情况下,需要用awk,因为tr不能插入两个字符来替换一个字符

}seq{

#不指定起始数值,则默认为1-s#选项主要改变输出的分格符,预设是\n-w#等位补全,就是宽度相等,不足的前面补0-f#格式化输出,就是指定打印的格式

seq10100#列出10-100seq110|tac#倒叙列出seq-s'+'90100|bc#从90加到100seq-f'dir%g'110|xargsmkdir#创建dir1-10seq-f'dir%03g'110|xargsmkdir#创建dir001-010

trap{

awk{#默认是执行打印全部print$0#1为真打印$0#0为假不打印

-F#改变FS值(分隔符)~#域匹配==#变量匹配!~#匹配不包含=#赋值!=#不等于+=#叠加\b#退格\f#换页\n#换行\r#回车\t#制表符Tab\c#代表任一其他字符-F"[]+|[%]+"#多个空格或多个%为分隔符[a-z]+#多个小写字母[a-Z]#代表所有大小写字母(aAbB...zZ)[a-z]#代表所有大小写字母(ab...z)[:alnum:]#字母数字字符[:alpha:]#字母字符[:cntrl:]#控制字符[:digit:]#数字字符[:graph:]#非空白字符(非空格、控制字符等)[:lower:]#小写字母[:print:]#与[:graph:]相似,但是包含空格字符[:punct:]#标点字符[:space:]#所有的空白字符(换行符、空格、制表符)[:upper:]#大写字母[:xdigit:]#十六进制的数字(0-9a-fA-F)[[:digit:][:lower:]]#数字和小写字母(占一个字符)

内建变量{$n#当前记录的第n个字段,字段间由FS分隔$0#完整的输入记录ARGC#命令行参数的数目ARGIND#命令行中当前文件的位置(从0开始算)ARGV#包含命令行参数的数组CONVFMT#数字转换格式(默认值为%.6g)ENVIRON#环境变量关联数组ERRNO#最后一个系统错误的描述FIELDWIDTHS#字段宽度列表(用空格键分隔)FILENAME#当前文件名FNR#同NR,但相对于当前文件FS#字段分隔符(默认是任何空格)IGNORECASE#如果为真(即非0值),则进行忽略大小写的匹配NF#当前记录中的字段数(列)NR#当前行数OFMT#数字的输出格式(默认值是%.6g)OFS#输出字段分隔符(默认值是一个空格)ORS#输出记录分隔符(默认值是一个换行符)RLENGTH#由match函数所匹配的字符串的长度RS#记录分隔符(默认是一个换行符)RSTART#由match函数所匹配的字符串的第一个位置SUBSEP#数组下标分隔符(默认值是/034)BEGIN#先处理(可不加文件参数)END#结束时处理}

内置函数{gsub(r,s)#在整个$0中用s替代r相当于sed's///g'gsub(r,s,t)#在整个t中用s替代rindex(s,t)#返回s中字符串t的第一位置length(s)#返回s长度match(s,r)#测试s是否包含匹配r的字符串split(s,a,fs)#在fs上将s分成序列asprint(fmt,exp)#返回经fmt格式化后的expsub(r,s)#用$0中最左边最长的子串代替s相当于sed's///'substr(s,p)#返回字符串s中从p开始的后缀部分substr(s,p,n)#返回字符串s中从p开始长度为n的后缀部分}

awk判断{awk'{print($1>$2)"第一排"$1:"第二排"$2}'#条件判断括号代表if语句判断""代表then":"代表elseawk'{max=($1>$2)$1:$2;printmax}'#条件判断如果$1大于$2,max值为为$1,否则为$2awk'{if($6>50)print$1"Toohigh";\elseprint"RangeisOK"}'fileawk'{if($6>50){count++;print$3}\else{x+5;print$2}}'file}

查看磁盘空间{df-h|awk-F"[]+|%"'$5>14{print$5}'df-h|awk'NR!=1{if(NF==6){print$5}elseif(NF==5){print$4}}'df-h|awk'NR!=1&&/%/{sub(/%/,"");print$(NF-1)}'df-h|sed'1d;//!N;s/\n//;s/\+//;'#将磁盘分区整理成一行可直接用df-P}

排列打印{awk'END{printf"%-10s%-10s\n%-10s%-10s\n%-10s%-10s\n","server","name","123","12345","234","1234"}'txtawk'BEGIN{printf"|%-10s|%-10s|\n|%-10s|%-10s|\n|%-10s|%-10s|\n","server","name","123","12345","234","1234"}'awk'BEGIN{print"***开始***";print"+-----------------+";printf"|%-5s|%-5s|%-5s|\n","id","name","ip";}$1!=1&&NF==4{printf"|%-5s|%-5s|%-5s|\n",$1,$2,$3""$11}END{print"+-----------------+";print"***结束***"}'txt}

老男孩awk经典题{分析图片服务日志,把日志(每个图片访问次数*图片大小的总和)排行,也就是计算每个url的总访问大小说明:本题生产环境应用:这个功能可以用于IDC网站流量带宽很高,然后通过分析服务器日志哪些元素占用流量过大,进而进行优化或裁剪该图片,压缩js等措施。本题需要输出三个指标:【被访问次数】【访问次数*单个被访问文件大小】【文件名(带URL)】测试数据59.33.26.105--[08/Dec/2010:15:43:56+0800]"GET/static/images/photos/2.jpgHTTP/1.1"20011299

awk'{array_num[$7]++;array_size[$7]+=$10}END{for(iinarray_num){printarray_num[i]""array_size[i]""i}}'}

awk练习题{

wang4cui3zhao4liu3liu3chang5li2

1通过第一个域找出字符长度为4的2当第二列值大于3时,创建空白文件,文件名为当前行第一个域$1(touch$1)3将文档中liu字符串替换为hong4求第二列的和5求第二列的平均值6求第二列中的最大值7将第一列过滤重复后,列出每一项,每一项的出现次数,每一项的大小总和

1、字符串长度awk'length($1)=="4"{print$1}'2、执行系统命令awk'{if($2>3){system("touch"$1)}}'3、gsub(/r/,"s",域)在指定域(默认$0)中用s替代r(sed's///g')awk'{gsub(/liu/,"hong",$1);print$0}'a.txt4、列求和awk'{a+=$2}END{printa}'5、列求平均值awk'{a+=$2}END{printa/NR}'awk'{a+=$2;b++}END{printa,a/b}'6、列求最大值awk'BEGIN{a=0}{if($2>a)a=$2}END{printa}'7、将第一列过滤重复列出每一项,每一项的出现次数,每一项的大小总和awk'{a[$1]++;b[$1]+=$2}END{for(iina){printi,a[i],b[i]}}'}

awk处理复杂日志{6.19:DHB_014_号百总机服务业务日报:广州到达数异常!DHB_023_号百漏话提醒日报:珠海到达数异常!6.20:DHB_014_号百总机服务业务日报:广州到达数异常!到

awk-F'[_:]+''NF>2{print$4,$1"_"$2,b|"sort";next}{b=$1}'#当前行NF小于等于2只针对{print$4,$1"_"$2,b|"sort";next}有效即6.19:行跳过此操作,{b=$1}仍然执行#当前行NF大于2执行到next强制跳过本行,即跳过后面的{b=$1}

广州DHB_0146.19}}

b#跳过匹配的行p#打印d#删除s#替换g#配合s全部替换i#行前插入a#行后插入r#读y#转换q#退出

&#代表查找的串内容*#任意多个前驱字符(前导符)#0或1个最小匹配没加-r参数需转义\$#最后一行.*#匹配任意多个字符\(a\)#保存a作为标签1(\1)

模式空间{

#模式空间(两行两行处理)模式匹配的范围,一般而言,模式空间是输入文本中某一行,但是可以通过使用N函数把多于一行读入模式空间#暂存空间里默认存储一个空行n#读入下一行(覆盖上一行)h#把模式空间里的行拷贝到暂存空间H#把模式空间里的行追加到暂存空间g#用暂存空间的内容替换模式空间的行G#把暂存空间的内容追加到模式空间的行后x#将暂存空间的内容于模式空间里的当前行互换!#对其前面的要匹配的范围取反D#删除当前模式空间中直到并包含第一个换行符的所有字符(/.*/匹配模式空间中所有内容,匹配到就执行D,没匹配到就结束D)N#追加下一个输入行到模式空间后面并在第二者间嵌入一个换行符,改变当前行号码,模式匹配可以延伸跨域这个内嵌换行p#打印模式空间中的直到并包含第一个换行的所有字符

标签函数{

:lable#建立命令标记,配合b,t函数使用跳转blable#分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。tlabe#判断分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令出,或者到脚本末尾。与b函数不同在于t在执行跳转前会先检查其前一个替换命令是否成功,如成功,则执行跳转。

sed-e'{:p1;/A/s/A/AA/;/B/s/B/BB/;/[AB]\{10\}/b;bp1;}'#文件内容第一行A第二行B:建立标签p1;两个替换函数(A替换成AA,B替换成BB)当A或者B达到10个以后调用b,返回echo'sdff[abccdddeee]'|sed':n;s#\(\[[^]*\)*#\1#;tn'#标签函数t使用方法,替换[]里的空格echo"198723124.03"|sed-r':a;s/([0-9]+)([0-9]{3})/\1,\2/;ta'#每三个字符加一个逗号

引用外部变量{

sed-n''$a',10p'sed-n""$a",10p"

修改keepalive配置剔除后端服务器{

sed-i'/real_server.*10.0.1.158.*8888/,+8s/^/#/'keepalived.confsed-i'/real_server.*10.0.1.158.*8888/,+8s/^#//'keepalived.conf

}模仿rev功能{

echo123|sed'/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//;'/\n/!G;#没有\n换行符,要执行G,因为保留空间中为空,所以在模式空间追加一空行s/\(.\)\(.*\n\)/&\2\1/;#标签替换&\n23\n1$(关键在于&,可以让后面//匹配到空行)//D;#D命令会引起循环删除模式空间中的第一部分,如果删除后,模式空间中还有剩余行,则返回D之前的命令,重新执行,如果D后,模式空间中没有任何内容,则将退出。//D匹配空行执行D,如果上句s没有匹配到,//也无法匹配到空行,"//D;"命令结束s/.//;#D结束后,删除开头的\n

xargs{#命令替换-t先打印命令,然后再执行-i用每项替换{}find/-perm+7000|xargsls-l#将前面的内容,作为后面命令的参数seq110|xargs-idate-d"{}days"+%Y-%m-%d#列出10天日期

dialog菜单{#默认将所有输出用stderr输出,不显示到屏幕使用参数--stdout可将选择赋给变量#退出状态0正确1错误

窗体类型{--calendar#日历--checklist#允许你显示一个选项列表,每个选项都可以被单独的选择(复选框)--form#表单,允许您建立一个带标签的文本字段,并要求填写--fselect#提供一个路径,让你选择浏览的文件--gauge#显示一个表,呈现出完成的百分比,就是显示出进度条。--infobox#显示消息后,(没有等待响应)对话框立刻返回,但不清除屏幕(信息框)--inputbox#让用户输入文本(输入框)--inputmenu#提供一个可供用户编辑的菜单(可编辑的菜单框)--menu#显示一个列表供用户选择(菜单框)--msgbox(message)#显示一条消息,并要求用户选择一个确定按钮(消息框)--password#密码框,显示一个输入框,它隐藏文本--pause#显示一个表格用来显示一个指定的暂停期的状态--radiolist#提供一个菜单项目组,但是只有一个项目,可以选择(单选框)--tailbox#在一个滚动窗口文件中使用tail命令来显示文本--tailboxbg#跟tailbox类似,但是在background模式下操作--textbox#在带有滚动条的文本框中显示文件的内容(文本框)--timebox#提供一个窗口,选择小时,分钟,秒--yesno(yes/no)#提供一个带有yes和no按钮的简单信息框}

select菜单{

#输入项不在菜单自动会提示重新输入selectmenuiteminpick1pick2pick3退出doecho$menuitemcase$menuitemin退出)exit;;*)selectareainarea1area2area3返回doecho$areacase$areain返回)break;;*)echo"对$area操作";;esacdone;;esacdone

shift{

./cs.sh123#!/bin/shuntil[$#-eq0]doecho"第一个参数为:$1参数个数为:$#"#shift命令执行前变量$1的值在shift命令执行后不可用shiftdone

}getopts给脚本加参数{

#!/bin/shwhilegetopts:ab:namedocase$nameina)aflag=1;;b)bflag=1bval=$OPTARG;;\)echo"USAGE:`basename$0`[-a][-bvalue]"exit1;;esacdoneif[!-z$aflag];thenecho"option-aspecified"echo"$aflag"echo"$OPTIND"fiif[!-z$bflag];thenecho"option-bspecified"echo"$bflag"echo"$bval"echo"$OPTIND"fiecho"here$OPTIND"shift$(($OPTIND-1))echo"$OPTIND"echo"`shift$(($OPTIND-1))`"

tclsh{

expect交互{

exp_continue#多个spawn命令时并行interact#执行完成后保持交互状态,把控制权交给控制台expect"password:"#判断关键字符send"passwd\r"#执行交互动作,与手工输入密码的动作等效。字符串结尾加"\r"

ssh后sudo{

#!/bin/bash#sudo注释下行允许后台运行#Defaultsrequiretty#sudo去掉!允许远程#Defaults!visiblepw

/usr/bin/expect-c'settimeout5spawnssh-oStrictHostKeyChecking=noxuesong1@192.168.42.128"sudogrepxuesong1/etc/passwd"expect{"passphrase"{send_user"sshkey\n"send"xuesong\r";expect{"sudo"{send_user"sudo\n"send"xuesong\r"interact}eof{send_user"sudoeof\n"}}}"password:"{send_user"ssh\n"send"xuesong\r";expect{"sudo"{send_user"sudo\n"send"xuesong\r"interact}eof{send_user"sudoeof\n"}}}"sudo"{send_user"sudo\n"send"xuesong\r"interact}eof{send_user"ssheof\n"}}'

交互双引号引用较长变量{#!/bin/bashRemoteUser=xuesong12Ip=192.168.1.2RemotePasswd=xuesongCmd="/bin/echo"$PubKey">"$RemoteKey"/authorized_keys"

/usr/bin/expect-c"settimeout10spawnssh-oStrictHostKeyChecking=no$RemoteUser@$Ip{$Cmd};expect{password:{send_userRemotePasswd\nsend${RemotePasswd}\r;interact;}eof{send_usereof\n}}"

telnet交互{#!/bin/bashIp="10.0.1.53"a="\{\'method\'\:\'doLogin\'\,\'params\'\:\{\'uName\'\:\'bobbietest\'\}"/usr/bin/expect-c"settimeout15spawntelnet${Ip}8000expect"Escape"send"${a}\\r"expect{-re"\"err.*none\""{exit0}timeout{exit1}eof{exit2}}"echo$

#!/bin/bashIp='192.168.1.6'#循环就行RemoteUser='user'#普通用户RemotePasswd='userpasswd'#普通用户的密码RemoteRootPasswd='rootpasswd'/usr/bin/expect-c"settimeout-1spawnssh-t-p$Port-oStrictHostKeyChecking=no$RemoteUser@$Ipexpect{password{send_userRemotePasswdsend${RemotePasswd}\r;expect{\"doesnotexist\"{send_user\"rootuserdoesnotexist\n\"exit10}password{send_user\"userpasswderror\n\"exit5}Last{send\"su-batch\n\"expect{Password{send_userRemoteRootPasswdsend${RemoteRootPasswd}\r;expect{\"]#\"{send\"sh/tmp/update.shupdate\n\"expect{\"]#\"{send_user${Ip}_Update_Done\n}eof}}}}}}}}\"Noroutetohost\"{send_user\"hostnotfound\n\"exit4}\"Invalidargument\"{send_user\"incorrectparameter\n\"exit8}\"Connectionrefused\"{send_user\"invalidportparameters\n\"exit9}\"doesnotexist\"{send_user\"rootuserdoesnotexist\"exit10}timeout{send_user\"connectiontimeout\n\"exit3}eof}"state=`echo$`

9实例{

从1叠加到100{

echo$[$(echo+{1..100})]echo$[(100+1)*(100/2)]seq-s'+'100|bc

判断参数是否为空-空退出并打印null{

#!/bin/shecho$1name=${1:"null"}echo$name

循环数组{

for((i=0;i<${#o[*]};i++))doecho${o[$i]}done

判断路径{

if[-d/root/Desktop/text/123];thenecho"找到了123"if[-d/root/Desktop/text]thenecho"找到了text"elseecho"没找到text"fielseecho"没找到123文件夹"fi

找出出现次数最多{

awk'{print$1}'file|sort|uniq-c|sort-k1r

}判断脚本参数是否正确{

./test.sh-p123-P3306-h127.0.0.1-uroot#!/bin/shif[$#-ne8];thenecho"USAGE:$0-uuser-ppasswd-Pport-hhost"exit1fi

whilegetopts:u:p:P:h:namedocase$nameinu)mysql_user=$OPTARG;;p)mysql_passwd=$OPTARG;;P)mysql_port=$OPTARG;;h)mysql_host=$OPTARG;;*)echo"USAGE:$0-uuser-ppasswd-Pport-hhost"exit1;;esacdone

if[-z$mysql_user]||[-z$mysql_passwd]||[-z$mysql_port]||[-z$mysql_host]thenecho"USAGE:$0-uuser-ppasswd-Pport-hhost"exit1fi

echo$mysql_user$mysql_passwd$mysql_port$mysql_host#结果root1233306127.0.0.1}

#!/bin/shclearawk'BEGIN{print"+--------------------+--------------------+";printf"|%-20s|%-20s|\n","Name","Number";print"+--------------------+--------------------+";}'a=`grep"^[A-Z]"a.txt|sort+1-n|awk'{print$1":"$2}'`#cata.txt|sort+1-n|whilereadlistforlistin$adoname=`echo$list|awk-F:'{print$1}'`number=`echo$list|awk-F:'{print$2}'`awk'BEGIN{printf"|%-20s|%-20s|\n","'"$name"'","'"$number"'";print"+--------------------+--------------------+";}'doneawk'BEGIN{print"***TheEnd***"print""}'

}判断日期是否合法{

#!/bin/shwhilereadadoifecho$a|grep-q"-"&&date-d$a+%Y%m%d>/dev/null2>&1thenifecho$a|grep-e'^[0-9]\{4\}-[01][0-9]-[0-3][0-9]$'thenbreakelseecho"您输入的日期不合法,请从新输入!"fielseecho"您输入的日期不合法,请从新输入!"fidoneecho"日期为$a"

}打印日期段所有日期{

#!/bin/bashqsrq=20010101jsrq=20010227n=0>tmpwhile:;docurrent=$(date+%Y%m%d-d"$nday$qsrq")if[[$current==$jsrq]];thenecho$current>>tmp;breakelseecho$current>>tmp((n++))fidonerq=`awk'NR==1{print}'tmp`

}打印提示{

cat<

登陆远程执行命令{

#特殊符号需要\转义sshroot@ip<

数学计算的小算法{

#!/bin/shA=1B=1while[$A-le10]doSUM=`expr$A\*$B`echo"$SUM"if[$A=10]thenB=`expr$B+1`A=1fiA=`expr$A+1`done

多行合并{

sed'{N;s/\n//}'file#将两行合并一行(去掉换行符)awk'{printf(NR%2!=0)$0"":$0"\n"}'#将两行合并一行awk'{printf"%s",$0}'#将所有行合并awk'{if(NR%4==0){print$0}else{printf"%s",$0}}'file#将4行合并为一行(可扩展)

}横竖转换{

cata.txt|xargs#列转行cata.txt|xargs-n1#行转列

竖行转横行{

catfile|tr'\n'''echo$(catfile)#!/bin/shforiin`catfile`doa=${a}""${i}doneecho$a

取用户的根目录{

#!/bin/bashwhilereadnamepassuidgidgecoshomeshelldoecho$homedone

远程打包{ssh-n$ip'find'$path'/data/opt-typef-name"*.sh"-or-name"*.py"-or-name"*.pl"|xargstarzcvpf/tmp/data_backup.tar.gz'}

把汉字转成encode格式{

echo论坛|tr-d"\n"|xxd-i|sed-e"s/0x/%/g"|tr-d",\n"%c2%db%cc%b3echo论坛|tr-d"\n"|xxd-i|sed-e"s/0x/%/g"|tr-d",\n"|tr"[a-f]""[A-F]"#大写的%C2%DB%CC%B3

把目录带有大写字母的文件名改为全部小写{

#!/bin/bashforfin*;domv$f`echo$f|tr"[A-Z]""[a-z]"`done

查找连续多行,在不连续的行前插入{

#/bin/bashlastrow=nulli=0catincl|whilereadlinedoi=`expr$i+1`ifecho"$lastrow"|grep"#include<[A-Z].h>"thenifecho"$line"|grep-v"#include<[A-Z].h>"thensed-i''$i'i\\/\/Allheaderfilesareinclude'incli=`expr$i+1`fifilastrow="$line"done

查询数据库其它引擎{

#/bin/bashpath1=/data/mysql/data/dbpasswd=db123#MyISAM或InnoDBengine=InnoDB

if[-d$path1];then

dir=`ls-p$path1|awk'/\/$/'|awk-F'/''{print$1}'`fordbin$dirdonumber=`mysql-uroot-p$dbpasswd-A-S"$path1"mysql.sock-e"use${db};showtablestatus;"|grep-c$engine`if[$number-ne0];thenecho"${db}"fidonefi

批量修改数据库引擎{#/bin/bashfordbintesttest1test3dotables=`mysql-uroot-pdb123-A-S/data/mysql/data/mysql.sock-e"use$db;showtables;"|awk'NR!=1{print}'`

fortablein$tablesdomysql-uroot-pdb123-A-S/data/mysql/data/mysql.sock-e"use$db;altertable$tableengine=MyISAM;"donedone}

将shell取到的数据插入mysql数据库{mysql-u$username-p$passwd-h$dbhost-P$dbport-A-e"use$dbname;insertintodatavalues('','$ip','$date','$time','$data')"

两日期间隔天数{D1=`date-d'20070409'+"%s"`D2=`date-d'20070304'+"%s"`D3=$(($D1-$D2))echo$(($D3/60/60/24))}

while执行ssh只循环一次{cat-#让cat读连接文件stdin的信息seq10|whilereadline;dosshlocalhost"cat-";done#显示的9次是被ssh吃掉的seq10|whilereadline;dossh-nlocalhost"cat-";done#ssh加上-n参数可避免只循环一次}

ssh批量执行命令{

#版本1#!/bin/bashwhilereadlinedoIp=`echo$line|awk'{print$1}'`Passwd=`echo$line|awk'{print$2}'`ssh-nlocalhost"cat-"sshpass-p"$Passwd"ssh-n-t-oStrictHostKeyChecking=noroot@$Ip"id"done

#版本2#!/bin/bashIplist=`awk'{print$1}'iplist.txt`forIpin$IplistdoPasswd=`awk'/'$Ip'/{print$2}'iplist.txt`sshpass-p"$Passwd"ssh-n-t-oStrictHostKeyChecking=noroot@$Ip"id"done

在同一位置打印字符{

#!/bin/bashecho-ne"\t"foriin`seq-w100-11`doecho-ne"$i\b\b\b";#关键\b退格sleep1;done

多进程后台并发简易控制{

#!/bin/bashtest(){echo$asleep5}forain`seq130`dotest&echo$!((num++))if[$num-eq6];thenecho"wait..."waitnum=0fidonewait

shell并发{

#!/bin/bashtmpfile=$$.fifo#创建管道名称mkfifo$tmpfile#创建管道exec4<>$tmpfile#创建文件标示4,以读写方式操作管道$tmpfilerm$tmpfile#将创建的管道文件清除thred=4#指定并发个数seq=(12345678921222324253132333435)#创建任务列表

#为并发线程创建相应个数的占位{for((i=1;i<=${thred};i++))doecho;#因为read命令一次读取一行,一个echo默认输出一个换行符,所以为每个线程输出一个占位换行done}>&4#将占位信息写入管道

foridin${seq}#从任务列表seq中按次序获取每一个任务doread#读取一行,即fd4中的一个占位符(./ur_command${id};echo>&4)&#在后台执行任务ur_command并将任务${id}赋给当前任务;任务执行完后在fd4种写入一个占位符done<&4#指定fd4为整个for的标准输入wait#等待所有在此shell脚本中启动的后台任务完成exec4>&-#关闭管道#!/bin/bash

FifoFile="$$.fifo"mkfifo$FifoFileexec6<>$FifoFilerm$FifoFilefor((i=0;i<=20;i++));doecho;done>&6

shell并发函数{functionConCurrentCmd(){#进程数Thread=30

#列表文件CurFileName=iplist.txt

#定义fifo文件FifoFile="$$.fifo"

#新建一个fifo类型的文件mkfifo$FifoFile

#将fd6与此fifo类型文件以读写的方式连接起来exec6<>$FifoFilerm$FifoFile

#事实上就是在文件描述符6中放置了$Thread个回车符for((i=0;i<=$Thread;i++));doecho;done>&6

#此后标准输入将来自fd5exec5<$CurFileName

#开始循环读取文件列表中的行Count=0whileread-u5linedoread-u6letCount+=1#此处定义一个子进程放到后台执行#一个read-u6命令执行一次,就从fd6中减去一个回车符,然后向下执行#fd6中没有回车符的时候,就停在这了,从而实现了进程数量控制{echo$Count#这段代码框就是执行具体的操作了function

echo>&6#当进程结束以后,再向fd6中追加一个回车符,即补上了read-u6减去的那个}&done

#等待所有后台子进程结束wait

#关闭fd6exec6>&-

#关闭fd5exec5>&-}并发例子{#!/bin/bash

函数{

ip(){echo"a1"|awk'$1=="'"$1"'"{print$2}'}web=aip$web

检测软件包是否存在{

rpm-qdialog>/dev/nullif["$"-ge1];thenecho"installdialog,Pleasewait..."yum-yinstalldialogrpm-qdialog>/dev/null[$-ge1]&&echo"dialoginstallationfailure,exit"&&exitecho"dialogdone"readfi

游戏维护菜单-修改配置文件{#!/bin/bash

conf=serverlist.xmlAreaList=`awk-F'"''/

selectareain$AreaList全部退出doecho""echo$areacase$areain退出)exit;;*)selectoperatein"修改版本号""添加维护中""删除维护中""返回菜单"doecho""echo$operatecase$operatein修改版本号)echo请输入版本号whilereadversiondoifecho$version|grep-w10[12][0-9][0-9][0-9][0-9][0-9][0-9]thenbreakfiecho请从新输入正确的版本号donecase$areain全部)case$versionin101*)echo"请确认操作对$area体验区$operate"readsed-i's/101[0-9][0-9][0-9][0-9][0-9][0-9]/'$version'/'$conf;;102*)echo"请确认操作对$area正式区$operate"readsed-i's/102[0-9][0-9][0-9][0-9][0-9][0-9]/'$version'/'$conf;;esac;;*)type=`awk-F'"''/'$area'/{print$14}'$conf|cut-c1-3`readtype=`echo$version|cut-c1-3`if[$type!=$readtype]thenecho"版本号不对应,请从新操作"continuefiecho"请确认操作对$area区$operate"read

awk-F'"''/'$area'/{print$12}'$conf|xargs-ised-i'/'{}'/s/10[12][0-9][0-9][0-9][0-9][0-9][0-9]/'$version'/'$conf;;esac;;添加维护中)case$areain全部)echo"请确认操作对$area区$operate"readawk-F'"''/

keepalive剔除后端服务{

#!/bin/bash#行数请自定义,默认8行if[X$2==X];thenecho"error:IPnull"readexitficase$1indel)sed-i'/real_server.*'$2'.*8888/,+8s/^/#/'/etc/keepalived/keepalived.conf/etc/init.d/keepalivedreload;;add)sed-i'/real_server.*'$2'.*8888/,+8s/^#//'/etc/keepalived/keepalived.conf/etc/init.d/keepalivedreload;;*)echo"Parametererror";;esac}

申诉中国反垃圾邮件联盟黑名单{

#!/bin/bash

IpList=`awk'$1!~"^#"&&$1!=""{print$1}'host.list`

CONTENT='我们是一家正规的XXX。xxxxxxx。恳请将我们的发送服务器IP移出黑名单。谢谢!处理措施:1.XXXX。2.XXXX。'CORP='abc.com'WWW='www.abc.cm'NAME='def'MAIL='def@163.com.cn'TEL='010-50000000'LEVEL='0'

forIpin$IpListdoStatus=`curl-d"IP=$Ip"$QueryAdd|grep'Getout/ShowFormIP='|grep-wc'申诉脱离'`if[$Status-ge1];thenIpStatus="黑名单中"results=`curl-d"IP=${Ip}&CONTENT=${CONTENT}&CORP=${CORP}&WWW=${WWW}&NAME=${NAME}&MAIL=${MAIL}&TEL=${TEL}&LEVEL=${LEVEL}"$ComplaintAdd|grep-E'您的黑名单脱离申请已提交|该IP的脱离申请已被他人提交|申请由于近期内有被拒绝的记录'`echo$resultsifecho$results|grep'您的黑名单脱离申请已提交'>/dev/null2>&1thencomplaint='申诉成功'elifecho$results|grep'该IP的脱离申请已被他人提交'>/dev/null2>&1thencomplaint='申诉重复'elifecho$results|grep'申请由于近期内有被拒绝的记录'>/dev/null2>&1thencomplaint='申诉拒绝'elsecomplaint='异常'fielseIpStatus='正常'complaint='无需申诉'fiecho"$Ip$IpStatus$complaint">>$(date+%Y%m%d_%H%M%S).logdone

functionBye(){tmp="\Simplegawkserver\

ScriptTerminated...\"returntmp}

functionRunApp(app){if(app=="xterm"){system("xterm&");return}if(app=="xcalc"){system("xcalc&");return}if(app=="xload"){system("xload&");return}if(app=="exit"){x=0}}

THE END
1.一招教你关闭手机随机MAC地址,轻松解决反复认证问题!网络中每台设备都有唯一的网络标识,称为MAC地址或网卡地址。真实的网卡设备MAC地址写在硬件内部,全球具有唯一性。随机MAC地址是新版本操作系统拥有的一项功能,可以让终端上网时使用随机生成的MAC地址,且默认为启用状态。 2、为什么禁用随机MAC地址 经技术人员检查,校园无线网具备“无感知认证”功能,该功能使用户在校园http://hhxygzs.hhstu.edu.cn/info/1105/2499.htm
2.注册查询中心开局华为高品质酒店网络解决方案交付一本通系统管理员进行如下操作: 已配置注册查询中心,详细操作请参见对接注册查询中心。 租户管理员进行如下操作: 已在DHCP服务器上配置DHCP协议,设备获取IP地址和其他网络配置信息。 已在DNS服务器上配置DNS,设备可以解析注册查询中心域名对应的IP地址。 特性限制 V600版本WAC设备不支持注册查询中心开局。 V600R024C00及之后版https://support.huawei.com/enterprise/zh/doc/EDOC1100307924/f1482ef8
3.硬件产品步骤二:系统后台lspci信息判断,下图为异常值。 正常情况,lspci有识别加密卡为: 步骤三:上传脚本 GetDevInfo (见附件)工具,到tmp 路径,增加权限,执行指令(当设备恢复识别加密卡情况下执行) 老版本固件:CCP907T SDFESXF 2.15 20230824 v4 异常版本新版本固件:CCP907T SDFESXF 2.16 20240112 V4 更新后版本 解决方https://support.sangfor.com.cn/cases/list?product_id=156&category_id=30427
4.WAPI产业联盟(江苏省信息安全测评中心)、西电捷通公司、北京数字认证股份有限公司、华为技术有限公司、新华三技术有限公司、北京联盛德微电子有限责任公司、深圳市信锐网科技术有限公司、北京华信傲天网络技术有限公司、广州莲雾科技有限公司、上海乐研电气有限公司、深圳市智开科技有限公司、西安芯语慧联信息科技有限公司、南京博洛米通信http://www.wapia.org.cn/yaowen/detail_342507.shtml
5.网络安全及信息安全保障措施登逆认证网络安全 系统服务器及其他计算机设备均设置经过公安部认证的防火墙与安全设备,确保网络传输的安全性。 正版防病毒软件 在系统的服务器和工作站上均安装正版防病毒软件,并定期更新,防止病毒和恶意软件的侵入。 生产日志管理 系统具备保存60天以上的系统运行日志及用户使用日志功能,记录内容包括IP地址、访问情况、主页https://denlee.cc/archives/d0oIyNlm
6.重庆政府采购网网络安全等级保护测评及信息安全服务 重庆电子科技职业大学指定信息系统 对指定系统开展安全运营、安全巡检、脆弱性检查、渗透测试、安全加固;开展安全管理体系建设、驻场安全运维、新系统上线前安全评估等工作 2025年1月1日至2025年12月31日 新系统上线前安全评估不少于8个信息系统;其他服务对象不少于50个信息系统(以最https://www.ccgp-chongqing.gov.cn/info-notice/procument-notice-detail/1444771087685824512
7.2222校园网认证登录入口校园网认证登录入口关于2.2.2.2.校园网认证登录入口,校园网认证登录入口很多人还不知道,很多读大学的小伙伴最近都碰到了笔记本连不上校园网认证页面的情况,导致自己不能上网冲浪,很是困扰,为了帮助大家排忧解难,小编特意到网上搜集了两种解决方法,亲测有效,大家如果碰到这个问题的话,赶紧来IT百科看看小编带来的教程https://zhidao.baidu.com/question/1906066217953720300.html
8.2222C. 业务设备是指对编排设备引入的业务流进行安全业务处理的设备,主要包括防火墙设备、防病毒设备和上网行为控制设备 D. 业务链是指由经过GRE隧道处理的业务自动化控制系统,可以提供统一的策略引擎,在整个组织内实施统一的 访问策略,实现基于用户身份,接入时间、接入地址、接 入类型、接入方式(简称5H1W)的认证与https://www.wjx.cn/vm/rjwApRc.aspx
9.GA:WA3011.1公共场所无线上网安全管理系统数据传输交换规范 GA/WA 3011.5-2015 公共场所无线上网安全管理系统统一XML Schema接口规范上网服务场所端技术要求上网管理上网用户管理应具备互联网访问管理功能,具体要求如下:对未通过认证的上网终端禁止访问互联网,对于认证成功的上网终端允许访问互联网;上网终端若一段时间无上网操作,应将其https://max.book118.com/html/2022/0426/8143041025004075.shtm
10.深信服信锐无线AP系列DIS二维码审核认证访客终端接入无线网络后,终端自动弹出二维码页面,审核人通过手机扫描访客终端二维码,访客即可上网。并以审核人+备注+访客终端MAC三维记录该访客用户,具有用户可追溯性,保证了网络安全性。 临时访客认证内置临时用户信息管理系统,临时用户在有效期内可以登录,超过有效期无法登录;内置临时账号管理的二级权限系统,http://www.itbuy365.com/index.php?product-2222.html
11.原理ipv6机制绕过认证限制双路由器宿舍组网云控系统而tplink的无线网 Vff0c;所有系统的方法也都可以全天连贯上网 Vff0c;并且每天只用一个账号认证一次便可 Vff0c;后续方法都不用再认证。同时tplink路由器可以获与到ipZZZ6地址 Vff0c;但也没有任何用 Vff0c;因为没有前缀授权 Vff0c;基层子网是获与不到ipZZZ6地址的。 http://m.news.weimengcloud.com/yk/10284.html
12.一次简单的计网实践——浅谈校园网认证原理ipv6机制绕过认证限制本文详细介绍了山东大学威海校区的校园网ipv4和ipv6的认证机制,包括深澜软件的认证系统、ipv4+mac+学号的认证流程以及ipv6的分配方式。文章还探讨了如何通过ipv6地址绕过晚上的认证限制,并提到了宿舍双路由器的组网方案,以支持更多设备的网络需求。 摘要由CSDN通过智能技术生成 https://blog.csdn.net/zsq_csh1/article/details/129322631
13.2.2.2.1上网认证登录盖复18829493326》无线路由器怎么要认证才能上网 - 仲樊608……》 1、首先你必须连接正确,路由器的WAN口通过网线连接到猫上面,必须用直通网线,路由器连接电脑的也得是直通网线,2、你的设置必须正确,正确的设置方法是:将电脑和路由器连接上以后显示出本地连接已连接,并且连接正常.如果https://www.da-quan.net/ti/2.2.2.1%E4%B8%8A%E7%BD%91%E8%AE%A4%E8%AF%81%E7%99%BB%E5%BD%95.html
14.交换机802.1X认证配置IEEE802.1x的体系结构中包括三个部分:Supplicant System,客户端;Authenticator System,认证设备;Authentication Sever System,认证服务器。 在客户端(如LanSwitch)实现 IEEE802.1x的认证系统部分,即Authenticator;IEEE802.1x的客户端一般安装在用户PC中,典型的为Windows XP操作系统自带的客户端; IEEE802.1x的认证服务器系统https://network.51cto.com/article/412349.html
15.支持API代理认证。websocke代理tcp代理udp代理socket一款轻量级、功能强大、高性能的http代理、https代理、socks5代理、内网穿透代理服务器、ss代理、游戏盾、游戏代理,支持API代理认证。websocke代理、tcp代理、然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。 5.4.SOCKS三级代理https://github.com/snail007/goproxy-cn
16.警惕远程访问威胁日后使用远程桌面连接功能远程访问本地计算机系统时,必须通过“IP地址:端口”方式来进行。比方说,笔者单位局域网中有一台61.155.50.140的服务器,现在要在家中使用远程桌面连接功能远程控制该服务器,那就需要先打开远程桌面连接对话框,在如图2所示的地址框中输入“61.155.50.140:2222”,这样才能确保远程访问操作成功进行。http://www.360doc.com/content/12/0512/08/5727660_210447930.shtml
17.农产品质量安全工作总结精选20篇根据“加快基地建设,推进名牌战略”的实施意见,今年,我局积极扶持农业龙头企业、农民专业合作组织,搞好无公害农产品、绿色食品认证,支持农产品企业按照市场化和今年上半年,全市农业系统共出动执法车辆321台次,出动执法人员1179人次,检查整顿农资市场449个,检查农资经营企业及经营户2222个,受理投诉案件20件,查获收缴各类https://www.oh100.com/a/202305/6811747.html
18.农产品质量安全工作计划3、强化“三品一标”建设管理。现代农业园区的主导产业示范区和精品园应100%取得“无公害农产品”认证,鼓励主要农产品达到绿色食品认证标准。开展对“三品”基地的规范化指导与监管工作,严格证后监管,规范“三品”农产品的用标行为。 4、强化产地准出管理。完善提升农产品基地快速检测点和追溯示范点管理,建立农产品生https://www.ruiwen.com/gongwen/gongzuojihua/1311315.html
19.www.scmc系统要求: 5.41以上 应用介绍 一,diyecao68 ,birty男男gv网站 二,a v偷拍,TuBEⅩⅩXX24 三japan乱videos老少配 2023最新实名认证身份号大全 大雷操逼av观看 国产pornxxxxx 狂操坦克熟女 青柠无码在厨房作爱在线观看 2222eeee精品视频 日本电影巜寂寞人妻喂奶 亚洲高清无码电影在线观看 精子饮http://www.scmc-xa.com/xxxr/732004.htm
20.小作坊备案证可以上网销售吗认证律师:18万+普法人次:15亿+ 您好, 请问有什么可以帮您? 律师24小时在线,咨询后将为您解答。 您好, 请问有什么可以帮您? 律师24小时在线,咨询后将为您解答。 您好, 请问有什么可以帮您? 律师24小时在线,咨询后将为您解答。 小作坊备案证可以上网销售吗 立即提问 近7日解答 80243 次· 平均回复速度 https://m.64365.com/tuwen/aacnine/
21.关于公示重庆市2016年拟认定高新技术产品(服务)名单的通知关于公示重庆市2016年拟认定高新技术产品(服务)名单的通知 各有关单位: 根据《重庆市高新技术产品(服务)认定管理办法》及《国家重点支持的高新技术领域》的有关规定,经初审及组织专家评审,拟认定干式粉磨分选集成系统等2510项产品(服务)为重庆市高http://www.cqkjw.org/zx/522.html
22.ssh的基本介绍和SSH服务(包含隧道内容)(6).ssh支持多种身份验证,最常用的是密码验证机制和公钥认证机制,其中公钥认证机制在某些场景实现双机互信时几乎是必须的。虽然常用上述两种认证机制,但认证时的顺序默认是gssapi-with-mic,hostbased,publickey,keyboard-interactive,password。注意其中的主机认证机制hostbased不是主机验证,由于主机认证用的非常少(它所读https://www.pianshen.com/article/766947448/
23.权威认证,尊享独特优势:下载网址专属?♂系统要求:7.6以上 应用介绍 彩票分分彩2017gt.com10086客户端下载,欧亚国际公司开户,ip地址196.168.8.14,ng1.cc,高频彩342v.cc,https//ihlw23.com.cn,1973棋牌苹果,今晚澳门特马买什么,660507域名查询10669聊天室123彩票网手机app,j9com九游会,178zb6直播体育,www.逍遥阁.com,welcome新2登录乐鱼app官网下载登录http://m.diorvank.cn/20241219/18833.html
24.史上最全SSH暗黑技巧详解plantegg然后再在 /etc/hosts 中将域名 k8s.gcr.io 指向 127.0.0.1, 那么本来要访问 k8s.gcr.io:443的,变成了访问本地 127.0.0.1:443 而 127.0.0.1:443 又通过ssh重定向到了 108.177.125.82:443 这样就实现了http代理或者说这种特殊情况下的科学上网。这个方案不需要装任何东西,但是每个访问目标都要这样处理,好在这种https://plantegg.github.io/2019/06/02/%E5%8F%B2%E4%B8%8A%E6%9C%80%E5%85%A8_SSH_%E6%9A%97%E9%BB%91%E6%8A%80%E5%B7%A7%E8%AF%A6%E8%A7%A3--%E6%94%B6%E8%97%8F%E4%BF%9D%E5%B9%B3%E5%AE%89/
25.权威认证,尊享独特优势:下载网址专属平台6分app,2肖4码默认论坛,www,2222ga,com,0158棋牌,2020在线娱乐平台河豚NBA直播,乐游棋牌官网接口,77966摇钱树棋牌,10元提现的平台正规,九五资讯app飞天168赛车微信群,bet体育在线网址,pg大奖视频 30万,e彩在线游戏厅,ManBetX手机客户端哪里下载800a网站,凯时kb88U来就送38,九游娱乐官网享誉中外,K8凯发app端,http://m.cwglh.cn/20241218/454.html
26.权威认证,马上抢购:网址抢先网站权威系统要求:7.6以上 应用介绍 90421.cc115官网登录界面bet16最新官方网址,186棋牌网页入口横版,bet网站,傲世皇朝公司网站链接,boda博大下载安装553娱乐,KOK体育软件APP下载,038彩票平台是黑平台吗,55世纪大发下载,118kj开奖现场六肖彩票丫丫,六玄网开奖资料,ace78.Vip,大玩家棋牌老版本2019,分分28预测网最精准彩99aphttp://m.lcjxwl.cn/20241219/4165.html
27.600449宁夏建材最新消息公告正点财经本公司董事会及全体董事保证本公告内容不存在任何虚假记载、误导性陈述或者重大遗漏,并对其内容的真实性、准确性和完整性承担个别及连带责任。 重要内容提示: ●委托理财受托方:交通银行股份有限公司(以下简称“交通银行”) ●本次委托理财金额:10,000 万元。 http://www.zdcj.net/zuixinxiaoxi/600449.html