技术改变世界 阅读塑造人生! - shaogx.com

This string was altered by TechBlog\Plugins\Example.; This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.

linux中创建本地yum库,轻松安装Linux软件

创建本地yum说明:此方法是针对于有5张LinuxCD盘所提供的创建本地yum repository的解决方案。如果您的系统盘是DVD盘,您可以通过直接将yum源指向DVD即可使用,而不用再采取这里给出的方法。... 全文

yum linux yum库 休闲 Linux软件

Linux命令行多线程、断点续传下载工具

 #######################################################如有转载,请务必保留本文链接及版权信息##欢迎广大运维同仁一起交流linux/unix网站运维技术!##QQ:335623998##E-mail:335623998@qq.com##博客: http://dreamway.blog.51cto.com/##weibo:http://weibo.com/zhaixiangpan#####################################################   运维工作中常会在linux命令行下载外网文件或内网进行大文件传输,经常使用的文本下载工具wget、curl,今天给大家推荐支持Linux命令行多线程、断点续传下载工具axel和myget。 1、系统环境# lsb_release -aLSB Version:    :core-4.0-amd64:core-4.0-ia32:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-ia32:graphics-4.0-noarch:printing-4.0-amd64:printing-4.0-ia32:printing-4.0-noarchDistributor ID: CentOSDescription:    CentOS release 5.8 (Final)Release:        5.8Codename:       Final2、下载工具安装、使用方法介绍2.1 wgetCentOS 默认已经安装,如需安装请运行# yum install wget -ywget版本信息# wget -VGNU Wget 1.11.4 Red Hat modified此工具比较常用,使用方法、参数略2.2 Axel 下载 安装官方站点http://axel.alioth.debian.org/ 源码包地址http://alioth.debian.org/frs/?group_id=100070最新版本axel-2.4源码包下载地址http://alioth.debian.org/frs/download.php/3015/axel-2.4.tar.gzrpm包地址http://pkgs.repoforge.org/axel/选择下载对应系统的rpm包# wget http://pkgs.repoforge.org/axel/axel-2.4-1.el5.rf.x86_64.rpm安装axel# rpm -ivh axel-2.4-1.el5.rf.x86_64.rpmaxel版本# axel -VAxel version 2.4 (Linux)axel命令使用方法:axel [选项参数] url1 [url2] [url……] axel 参数:--max-speed=x    #限速值最高速度    -s x Specify maximum speed (bytes per second)  --num-connections=x -n x #连接数Specify maximum number of connections  --output=f #下载为本地文件 -o f Specify local output file --search[=x] #搜索镜像 -S [x]Search for mirrors and download from x servers  --header=x  -H x     #添加头文件字符串Add header string --user-agent=x #设置UA -U xSet user agent --no-proxy     #不使用代理服务器 -NJust don't use any proxy server --quiet           --quiet, -q   No output to stdout. #静默模式,不输出到标准输出--verbose -vMore status information #更多状态信息 --alternate --help #帮助 -h--version #版本 -V2.3 myget 下载、安装[root@cobbler-1014 ~]# wget http://myget.sourceforge.net/release/myget-0.1.2.tar.gz[root@cobbler-1014 ~]# tar zxf myget-0.1.2.tar.gz [root@cobbler-1014 ~]# cd myget-0.1.2# ./configure && make && make installmytget版本,注意myget命令为mytget... 全文

Linux 命令行多线程 linux系统 linux命令

LINUX的帮助命令及文档

1.     whatis  command显示命令简要的描述信息。用数据库显示的,通常在装完系   统 后第二天建立数据库。可以用makewhatis手动生成whatis数据库。2.    --help 选项 ,显示命令的简要帮助信息和主要参数列表3.   man 分八个章节 ,最长用的是第五个章节,常用。空格:向下翻一页,B向下翻一页,回车键向下翻一行 ,K建向上翻一行。/ 从前先后搜索   --》 n 下一个  N 前一个  ?从后向前搜索4.  如果说记不清楚一个命令,  man -k com...  在whatis数据库中搜索以该字符串开头   的命令的概要信息,  -K在man压缩文件中找4.info 用的不多,主要讲命令的使用背景及其发展5. /usr/shar/doc/ 下是关于命令的文档 ,是开发团队开发时写的。6.官方文档http ://www.redhat.com./docs/7.问题解答 http://kbase.redhat.com 上面有大量已解决的难题,没准困扰你的难题上面多年前已经解决。8.谷歌 http://www.googlle/en查找问题... 全文

linux帮助信息的获取   LINUX查询问题 man命令 linux 休闲 职场

扩展Linux虚拟机硬盘、分区一例

在给客户部署Linux虚拟机时,我一般都会单独做出一个分区来存储客户的所有数据,并取名为data。/data分区的默认大小为35G,随着时间的发展,有的客户提出扩大/data分区的需求。下面是我在ESX4.0上的实施步骤:注:在生产环境中一定要先做好备份再做操作!1)关掉Linux虚拟机,运行vmkfstools命令扩展vmdk文件。原大小为50G,现在扩展为65G。vmkfstools -X 65G CentOS53.vmdk2)开启Linux虚拟机,可以通过以下命令可以查看新增的可用空间。[root@CentOS53 ~]# partedGNU Parted 1.8.1Using /dev/sda... 全文

Linux虚拟机硬盘 Linux虚拟机 展Linux虚拟机分区

用“凯普逊硬盘快克”网络克隆linux系统

准备条件:1.      下载镜像X-Clone_server_il_captain_cn_3.5.34.iso,刻录成光盘;2.      预先装好一个linux系统(所有软件都装好调试好),做为网络克隆的服务器;3.      克隆客户端与克隆服务器在一同一个网段;4.      克隆客户端硬盘容量>=克隆服务器硬盘容量5.      克隆客户端支持网卡启动操作步骤1.      设置克隆服务器光盘引导,用刻录好的凯普逊硬盘快克2.      在启动界面默认选第一项启动,当出现如下界面时不要动服务器3.    将各个克隆客户端都启动起来(因为这个软件是试用版所以只支持50个客户端)当客户端都准备就绪时,服务器端状如下(我这里只模拟了一个客户端)客户端会显示已连接到服务端4.在服务器端按回车进入如下界面,选择“磁盘到磁盘” 5.此后就等待网络克隆完成吧,百兆网络,克隆速度稳定可达650M/分钟以上千兆网络,克隆速度稳定可达1.8G/分钟以上本文出自 “老林的技术笔记” 博客,请务必保留此出处http://lilinqing.blog.51cto.com/1122687/296201... 全文

批量装linux 网络克隆linux linux 休闲 职场

Linux文本处理工具之awk

    调用方式         1.命令行             awk [-F  field-separator]  'commands'  input-file(s)                 commands是真正awk命令,[-F域分隔符]是可选的。input-file(s) 是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格(或者tab)。         2.shell脚本方式                 将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,以便通过键入脚本名称来调用。相当于shell脚本首行的:#!/bin/sh 可以换成:#!/bin/awk -f         3.将所有的awk命令插入一个单独文件,然后调用:awk -f awk-script-file input-file(s)其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。     内置变量         ARGC:命令行参数个数         ARGV:命令行参数排列         ENVIRON:UNIX环境变量         ERRNO:UNIX系统错误消息         FILENAME:awk浏览的文件名         OFMT:数字的输出格式 %.6g         FNR:浏览文件的记录数         FS:设置输入域分隔符,等价于命令行 -F选项         NF:浏览记录的域的个数         NR:已读的记录数,就是行号,从1开始         FNR:当前记录数         OFS:输出域分隔符         ORS:输出记录分隔符         RS:控制记录分隔符         $0:当前记录(作为单个变量)         $1~$n:当前记录的第n个字段,字段间由FS分隔     输出函数         print:参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已         printf:其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。具体格式如下:             %d     十进制有符号整数             %u     十进制无符号整数             %f     浮点数             %s     字符串             %c     单个字符             %p     指针的值             %e     指数形式的浮点数             %x     %X 无符号以十六进制表示的整数             %o     无符号以八进制表示的整数             %g     自动选择合适的表示法     获取外部变量         1.获取普通外部变量             awk ‘{action}’  变量名=变量值         2.BEGIN程序块中变量             awk –v 变量名=变量值 [–v 变量2=值2 …] 'BEGIN{action}’         3.环境变量             需要用到内置变量ENVIRON实现     运算符         1.赋值运算符             = += -= *= /= %= ^= **=         2.逻辑运算符             ||:逻辑或             &&:逻辑与         3.正则运算符             ~:匹配正则表达式             ~!:不匹配正则表达式         4.关系运算符             < <= > >= != ==         5.算术运算符             + - * / & ++ --         6.其它运算符             $:字段引用             空格:字符串连接符             ?:C条件表达式             in:数组中是否存在某键值     字符操作         1.字符串转数字             将变量通过”+”连接运算。自动强制将字符串转为整型。非数字变成0,发现第一个非数字字符,后面自动忽略         2.数字转字符串             只需要将变量与””符号连接起来运算即可         3.字符串连接             只需要将变量与””符号连接起来运算即可     数组操作         在awk中数组叫做关联数组,因为下标既可以是数也可以是串。awk中的数组不必提前声明,也不必声明大小。数组元素用0或空串来初始化,这根据上下文而定。需要注意的是不同版本下面函数不一定相同。其相关的函数有length、asort、delete、split。当然也可以实现多维数组。     流程控制语句         1.条件判断语句(if)             if(表达式){语句1}else{语句2}             if(表达式){语句1}else if(表达式){语句2}else{语句3}         2.循环语句(while、for、do while)             while(表达式){语句}             for(变量 in 数组){语句}             for(变量;条件;表达式){语句}             do{语句}while(条件)         3.关键字             break:当break语句用于while或for语句时,导致退出程序循环。             continue:当continue语句用于while或for语句时,使程序循环移动到下一个迭代。             next:能能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。             exit:语句使主输入循环退出并将控制转移到END,如果END存在的话。如果没有定义END规则,或在END中应用exit语句,则终止脚本的执行。     正则表达式         +:包含一个或多个字符或扩展正则表达式的具体值(在 +(加号)前)在这个字符串中,则字符串匹配。命令行:awk '/smith+ern/' testfile         ?:包含零个或一个字符或扩展正则表达式的具体值(在 ?(问号)之前)在字符串中,则字符串匹配。命令行:awk '/smith?/' testfile         |:以 |(垂直线)隔开的字符串的任何一个在字符串中,则字符串匹配。命令行:awk '/allen | alan /' testfile         ():在正则表达式中将字符串组合在一起。命令行:awk '/a(ll)?/' testfile         {m}:有m个模式的具体值位于字符串中,则字符串匹配。命令行:awk '/l{2}/' testfile         {m,}:至少m个模式的具体值在字符串中,则字符串匹配。命令行:awk '/t{2,}/' testfile         {m, n}:在m和n之间(包含的m和n)个模式的具体值在字符串中(其中m <= n),则字符串匹配。命令行:awk '/er{1, 2}/' testfile         [String]:正则表达式与方括号内String变量指定的任何字符匹配。命令行:awk '/sm[a-h]/' testfile         [^ String]:在 [ ](方括号)和在指定字符串开头的 ^ (插入记号) 指明正则表达式与方括号内的任何字符不匹配。这样,命令行:awk '/sm[^a-h]/' testfile         ~,!~:表示指定变量与正则表达式匹配或不匹配的条件语句。命令行:awk '$1 ~ /n/' testfile         ^:指定字段或记录的开头。命令行:awk '$2 ~ /^h/' testfile         $:指定字段或记录的末尾。命令行:awk '$2 ~ /y$/' testfile         .:表示除了在空白末尾的终端换行字符以外的任何一个字符。命令行:awk '/a..e/' testfile         \ :转义字符。当位于在扩展正则表达式中具有特殊含义的任何字符之前时,转义字符除去该字符的任何特殊含义。例如,命令行:/a\/\//     内置函数         1.算术函数             atan2( y, x )     返回 y/x 的反正切。             cos( x )     返回 x 的余弦;x 是弧度。             sin( x )     返回 x 的正弦;x 是弧度。             exp( x )     返回 x 幂函数。             log( x )     返回 x 的自然对数。             sqrt( x )     返回 x 平方根。             int( x )     返回 x 的截断至整数的值。             rand( )     返回任意数字 n,其中 0 <= n < 1。             srand( [Expr] )     将 rand 函数的种子值设置为 Expr 参数的值,或如果省略 Expr 参数则使用某天的时间。返回先前的种子值。         2.字符串函数             gsub( Ere, Repl, [ In ] )     除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行,。             sub( Ere, Repl, [ In ] )     用 Repl 参数指定的字符串替换 In 参数指定的字符串中的由 Ere 参数指定的扩展正则表达式的第一个具体值。sub 函数返回替换的数量。出现在 Repl 参数指定的字符串中的 &(和符号)由 In 参数指定的与 Ere 参数的指定的扩展正则表达式匹配的字符串替换。如果未指定 In 参数,缺省值是整个记录($0 记录变量)。             index( String1, String2 )     在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。             length [(String)]     返回 String 参数指定的字符串的长度(字符形式)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。             blength [(String)]     返回 String 参数指定的字符串的长度(以字节为单位)。如果未给出 String 参数,则返回整个记录的长度($0 记录变量)。             substr( String, M, [ N ] )     返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。             match( String, Ere )     在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。             split( String, A, [Ere] )     将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。             tolower( String )     返回 String 参数指定的字符串,字符串中每个大写字符将更改为小写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。             toupper( String )     返回 String 参数指定的字符串,字符串中每个小写字符将更改为大写。大写和小写的映射由当前语言环境的 LC_CTYPE 范畴定义。             sprintf(Format, Expr, Expr, . . . )     根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。         3.时间函数             mktime( YYYY MM DD HH MM SS[ DST])     生成时间格式             strftime([format [, timestamp]])     格式化时间输出,将时间戳转为时间字符串,具体格式如下:                 %a     星期几的缩写(Sun)                 %A     星期几的完整写法(Sunday)                 %b     月名的缩写(Oct)                 %B     月名的完整写法(October)                 %c     本地日期和时间                 %d     十进制日期                 %D     日期 08/20/99                 %e     日期,如果只有一位会补上一个空格                 %H     用十进制表示24小时格式的小时                 %I     用十进制表示12小时格式的小时                 %j     从1月1日起一年中的第几天                 %m     十进制表示的月份                 %M     十进制表示的分钟                 %p     12小时表示法(AM/PM)                 %S     十进制表示的秒                 %U     十进制表示的一年中的第几个星期(星期天作为一个星期的开始)                 %w     十进制表示的星期几(星期天是0)                 %W     十进制表示的一年中的第几个星期(星期一作为一个星期的开始)                 %x     重新设置本地日期(08/20/99)                 %X     重新设置本地时间(12:00:00)                 %y     两位数字表示的年(99)                 %Y     当前月份                 %Z     时区(PDT)                 %%     百分号(%)             systime()     得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数         4.其他函数             close( Expression )     用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。             system(Command )     执行 Command 参数指定的命令,并返回退出状态。等同于 system 子例程。             Expression | getline [ Variable ]     从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用 popen 子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。             getline [ Variable ] < Expression     从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。             getline [ Variable ]     将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。         5.排序函数             asort:对数组的值进行排序,并且会丢掉原先键值;             asorti:对数组的下标进行排序。     例如         1.内置变量             a.$0                 awk '/^root/{print $0}' /etc/passwd  #/^root/为选择表达式,$0代表是逐行             b.设置字段分隔符号(FS)                 awk 'BEGIN {FS=":"} /^root/ {print $1, NF}' /etc/passwd #FS为字段分隔符,可以自己设置,默认是空格,因为passwd里面是”:”分隔,所以需要修改默认分隔符。NF是字段总数,$0代表当前行记录,$1-$n是当前行,各个字段对应值。             c.记录条数(NR、FNR)                 awk 'BEGIN {FS=":"} {print NR, $1, FNR}' /etc/passwd #NR得到当前记录所在行             d.设置输出字段分隔符(OFS)                 awk 'BEGIN {FS=":"; OFS="~~"} /^root/ {print FNR, $1, $NF}' /etc/passwd #OFS设置默认字段分隔符             e.设置输出行记录分隔符(ORS)                 awk 'BEGIN {FS=":"; ORS="~~"} {print FNR, $1, $NF}' #ORS默认是换行符,这里修改为:”~~”,所有行之间用”~~”分隔了             f.输入参数获取(ARGC,ARGV)                 awk 'BEGIN {FS=":"; print "ARGC="ARGC; for (k in ARGV) {print k"="ARGV[k];}}' /etc/passwd #ARGC得到所有输入参数个数,ARGV获得输入参数内容,是一个数组             g.获得传入的文件名(FILENAME)                 awk 'BEGIN {FS=":"; print FILENAME} {print FILENAME}' /etc/passwd #FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能获得任何与文件记录操作的变量。             h.获得linux环境变量(ENVIRON)                 awk 'BEGIN {print ENVIRON["PATH"];}' /etc/passwd #ENVIRON是子典型数组,可以通过对应键值获得它的值。             i.输出数据格式设置(OFMT)                 awk 'BEGIN {OFMT="%.3f"; print 2/3,123.11111111;}' /etc/passwd #OFMT默认输出格式是:%.6g 保留六位小数,这里修改OFMT会修改默认数据输出格式             j.按宽度指定分隔符                  echo 20100117054932 | awk 'BEGIN {FIELDWIDTHS="4 2 2 2 2 3"} {print $1"-"$2"-"$3,$4":"$5":"$6}' #FIELDWIDTHS其格式为空格分隔的一串数字,用以对记录进行域的分隔,FIELDWIDTHS="4 2 2 2 2 2"就表示$1宽度是4,$2是2,$3是2  .... 。这个时候会忽略:FS分隔符             k.RSTART RLENGTH                 awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'                 awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }' #RSTART被匹配正则表达式首位置,RLENGTH匹配字符长度,没有找到为-1.         2.获取外部变量             a.获取普通的外部变量                 test='awk code'                 echo | awk '{print test}' test="$test"                 echo | wawk 'BEGIN {print test}' test="$test" #传入的变量可以在action中获取值,但是变量名与值放到'{action}'后边。其中BEGIN的action是不能获得             b.BEGIN程序块的变量                 test='awk code'                 echo | awk -v test="$test" 'BEGIN {print test}'                 echo | awk -v test="$test" '{print test}' #用-v 传入变量可以在3中类型的action 中都可以获得到,但顺序在  action前面             c.获得环境变量                 awk  'BEGIN {for (i in ENVIRON) {print i"="ENVIRON[i];}}'         3.运算符             a.赋值运算符、算术运算                 echo | awk 'BEGIN {a=1; b=5; c=3} {a+=5; b++; c--} END {print a, b, c, a*b}'             b.逻辑运算符                  awk 'BEGIN {a=1; b=2; print (a>5 && b<=2),(a>5 || b<=2);}'             c.关系运算符                 awk 'BEGIN{a="11";if(a >= 9){print "ok";}}' #> < 可以作为字符串比较,也可以用作数值比较,关键看操作数如果是字符串 就会转换为字符串比较。两个都为数字 才转为数值比较。字符串比较:按照ascii码顺序比较             d.其它运算符                 awk 'BEGIN {a="b"; print a=="b" ? "ok" : "err";}'  #三目运算                 awk 'BEGIN {a="b"; arr[0]="b"; arr[1]="c"; print (a in arr);}' #判断数组中是否存在该键值         3.字符操作             a.字符串转数字                 awk 'BEGIN {a="100"; b="10test10"; print (a+b+0);}'                 awk 'BEGIN {a="100"; b="10test10"; print a+b+0;}'             b.数字转字符串                 awk 'BEGIN {a=100; b=100; c=(a""b); print c}'                 awk 'BEGIN {a=100; b=100; c=a""b; print c}'             c.字符串连接                 awk 'BEGIN {a="a"; b="b"; c=a""b; print c}'         3.数组操作             a.赋值                 awk 'BEGIN {tB["a"]="a1"; tB["b"]=1;}'             b.数组长度(length)                 awk 'BEGIN {tB["a"]="a1"; tB["b"]=1; print length(tB)}'                 awk 'BEGIN {info="it is a test"; split(info,tA," "); print asort(tA);}'  #asort对数组进行排序,返回数组长度             c.字符串分割为数组(split)                 awk 'BEGIN {info="it is a test"; lens=split(info,tA," "); print length(tA), lens;}' #length返回字符串以及数组长度,split进行分割字符串为数组,也会返回分割得到数组长度             d.数组输出                 awk 'BEGIN {info="it is a test"; split(info,tA," "); for(k in tA){print k, tA[k];}}' #for…in 输出,因为数组是关联数组,默认是无序的。                 awk 'BEGIN {info="it is a test"; tlen=split(info,tA," "); for(k=1; k<=tlen; k++){print k, tA[k];}}' #如果需要得到有序数组,需要通过下标获得。数组下标是从1开始,与c数组不一样             e.判断键值是否存在                 awk 'BEGIN {tB["a"]="a1"; tB["b"]="b1"; if(tB["c"]!="1"){print "no found";}; for(k in tB){print k,tB[k];}}' #tB[“c”]没有定义,但是循环时候,发现已经存在该键值,它的值为空,这里需要注意,awk数组是关联数组,只要通过数组引用它的key,就会自动创建改序列                  awk 'BEGIN {tB["a"]="a1"; tB["b"]="b1"; if( "c" in tB){print "ok";}; for(k in tB){print k,tB[k];}}' #if(key in array) 通过这种方法判断数组中是否包含”key”键值,才能正确的判断             f.删除键值                 awk 'BEGIN {tB["a"]="a1"; tB["b"]="b1"; delete tB["a"]; for(k in tB){print k, tB[k];}}'             g.二维数组                 awk 'BEGIN{                     for(i=1;i<=9;i++)                     {                       for(j=1;j<=9;j++)                       {                     tarr[i,j]=i*j;                     print i,"*",j,"=",tarr[i,j];                       }                     }                     }'                 #array[k,k2]引用获得数组内容         4.流程控制操作             a.awk 'BEGIN{                     score=100;                     if(score>90)                     {                         print "优秀";                     }                     else if(score>80)                     {                         print "良好";                     }                     else if(score>70)                     {                         print "普通";                     }                     else if(score>60)                     {                         print "及格";                     }else                     {                         print "不及格";                     }                     }'             b.awk 'BEGIN{                     total=0;                     while(i<=100)                     {                         total+=i;                         i++;                     }                     print total;                     }'             c.awk 'BEGIN{                     for(k in ENVIRON)                     {                         print k"="ENVIRON[k];                     }                     }'  #ENVIRON是awk常量,是数组             d.awk 'BEGIN{                     total=0;                     for(i=0;i<=100;i++)                     {                         total+=i;                     }                     print total;                     }'             e.awk 'BEGIN{                     total=0;                     i=0;                     do                     {                         total+=i;                         i++;                     }while(i<=100)                     print total;                     }'         5.内置函数             a.算术函数                 awk 'BEGIN{OFMT="%.3f";fs=sin(1);fe=exp(10);fl=log(10);fi=int(3.1415);print fs,fe,fl,fi;}' #OFMT 设置输出数据格式是保留3位小数                 awk 'BEGIN{srand();fr=int(100*rand());print fr;}' #获得随机数             b.字符串函数                 awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}' #在 info中查找满足正则表达式,/[0-9]+/ 用””替换,并且替换后的值,赋值给info 未给info值,默认是$0                 awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'                 awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'  #正则匹配                 awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}' #从第 4个 字符开始,截取10个长度字符串                 awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}' #分割info,动态创建数组tA             c.时间函数                 awk 'BEGIN{tstamp=mktime("2001 01 01 12 12 12");print strftime("%c",tstamp);}'                 awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}' #求2个时间段中间时间差             d.其他函数                 awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}' #打开外部文件                 awk 'BEGIN{while(getline < "/etc/passwd"){print $0;};close("/etc/passwd");}' #逐行读取外部文件                 awk 'BEGIN{print "Enter your name:";getline name;print name;}'                 awk 'BEGIN{b=system("ls -al");print b;}' #调用外部应用程序         6.输出函数             a.printf                 awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%o\n",n1,n2,n3,n1,n1);}' #类似于C语音         7.awk脚本             #!/bin/awk -f             BEGIN{                 for(i=1;i<=9;i++)                     {                         for(j=1;j<=9;j++)                         {                             tarr[i,j]=i*j;                             print i,"*",j,"=",tarr[i,j];                         }                     }             }     注意         1.在awk中有两个特别的表达式,BEGIN和END,这两者都可用于pattern中,提供BEGIN和END的作用是给程序赋予初始状态和程序结束之后执行一些扫尾的工作。任何在BEGIN之后列出的操作(在{}内)将在awk开始扫描输入之前执行,而END之后的操作将在扫描完全部的输入之后执行。因此通常BEGIN来显示变量和初始化变量,使用END来输出最终结果。         2.awk中数据类型,是不需要定义,自适应的。 有时候需要通过(+、"")强制转换。         3.awk数组下标是从1开始,与c数组不一样。         4.awk的多维数组在本质上是一维数组,更确切一点,awk在存储上并不支持多维数组。awk提供了逻辑上模拟二维数组的访问方式。例 如,array[2,4] = 1这样的访问是允许的。awk使用一个特殊的字符串SUBSEP (\034)作为分割字段,在上面的例子中,关联数组array存储的键值实际上是2\0344。多维数组可以使用if((i,j) in array)这样的语法,但是下标必须放置在圆括号中。多维数组使用 for ( item in array )这样的语法遍历数组。与一维数组不同的是,多维数组必须使用split()函数来访问单独的下标分量。split ( item, subscr, SUBSEP)         5.awk实现的性能是比shell实现的强... 全文

Linux文本处理工具之awk Linux awk Linux awk命令 Liunx wak命令详解

linux使用join命令时切勿对文件进行数值排序

From:http://www.xiaoxiaozi.com/2009/12/02/1659/ 之前我介绍过linux的join命令和sort命令。有一点没有说明的是,使用join的时候要对两个比较的文件先排序的。但是这个排序是要小心进行的,一般要使用sort不附加任何参数即可以,因为join实际上是按字符串对两个文件进行“撞”的。所以千万不要使用例如-n -g这类参数对文件进行排序。 a.txt b.txt的内容如下:a.txt1 b.txt32121 简单的joinjoin a.txt b.txt#join: 文件2 没有被正确排序 排序-n后joinsort -n b.txt > c.txtjoin a.txt c.txt#1#join: 文件2 没有被正确排序 排序,不做数值排序后joinsort b.txt > c.txtjoin a.txt c.txt#1 join -v1 c.txt a.txt#2#21#3 ... 全文

Linux Linux join Linux join使用须知 休闲 职场

Linux里设置环境变量

有如下三种方法来设置环境变量:1、直接用export命令:(临时)export PATH=$PATH:/opt/tools/bin可用命令export查看2、修改profile文件:(永久)在文件中加入:export PATH="$PATH:/opt/tools/bin"执行:. /etc/profile  (注意:"."和"/etc/profile" 之间有空格.)3、修改.bashrc文件:(永久)(例:/root/.bashrc)在文件中加入:export PATH="$PATH:/opt/tools/bin"执行:. /root/.bashrc最后可以通过 echo $PATH 来查看环境变量 ... 全文

Linux里设置环境变量 Linux 设置环境变量 设置环境变量 linux 环境变量

第四集Linux系统工程师集训之网络部分视频课程

本视频是Linux系统工程师集训之网络部分视频课程的第四集,主要内容为现场演示如何连接交换机,以及注明的模拟器gns3的安装运行方法。工作中发现很多搞Linux系统运维的人由于缺乏基础的网络知识而遇到瓶颈,而且还是一个比较常见的现象(拜国内不实用的教育系统所赐)。出于公益 和个人 知识分享的角度,打算做一系列网络知识的分享,使用了CCNA的课件(实在是找不出不用CCNA的课件的原因,非常经典无法拒绝,但是稍作修改,本节由于是现场演示而没有课件),每周不定期推出2~3个视频,并在51cto进行同步(由于视频制作的原因会有1~2天延迟,如想抢先观看请关注我的微博或者易柏微博)... 全文

Linux linux系统 系统工程师 Linux系统工程师 视频课程

linux系统查看硬件以及系统信息常用命令汇总

[root@server ~] # uname –a                       # 查看内核/操作系统/CPU信息的linux系统信息命令 [root@server ~] # head -n 1 /etc/issue        # 查看操作系统版本,是数字1不是字母L [root@server ~] # cat /proc/cpuinfo            # 查看CPU信息的linux系统信息命令 [root@server ~] # hostname                       # 查看计算机名的linux系统信息命令 [root@server ~] # lspci -tv                         # 列出所有PCI设备 [root@server ~] # lsusb -tv              # 列出所有USB设备的linux系统信息命令 [root@server ~] # lsmod                 # 列出加载的内核模块 [root@server ~] # env                  # 查看环境变量资源 [root@server ~] # free -m                # 查看内存使用量和交换区使用量 [root@server ~] # df -h                 # 查看各分区使用情况 [root@server ~] # du -sh             # 查看指定目录的大小 [root@server ~] # grep MemTotal /proc/meminfo   # 查看内存总量 [root@server ~] # grep MemFree /proc/meminfo   # 查看空闲内存量 [root@server ~] # uptime             # 查看系统运行时间、用户数、负载 [root@server ~] # cat /proc/loadavg          # 查看系统负载磁盘和分区 [root@server ~] # mount | column -t          # 查看挂接的分区状态 [root@server ~] # fdisk -l             # 查看所有分区 [root@server ~] # swapon -s            # 查看所有交换分区 [root@server ~] # hdparm -i /dev/hda          # 查看磁盘参数(仅适用于IDE设备) [root@server ~] # dmesg | grep IDE          # 查看启动时IDE设备检测状况网络 [root@server ~] # ifconfig            # 查看所有网络接口的属性 [root@server ~] # iptables -L           # 查看防火墙设置 [root@server ~] # route -n            # 查看路由表 [root@server ~] # netstat -lntp          # 查看所有监听端口 [root@server ~] # netstat -antp          # 查看所有已经建立的连接 [root@server ~] # netstat -s           # 查看网络统计信息进程 [root@server ~] # ps -ef             # 查看所有进程 [root@server ~] # top               # 实时显示进程状态用户 [root@server ~] # w                # 查看活动用户 [root@server ~] # id                # 查看指定用户信息 [root@server ~] # last               # 查看用户登录日志 [root@server ~] # cut -d: -f1 /etc/passwd        # 查看系统所有用户 [root@server ~] # cut -d: -f1 /etc/group        # 查看系统所有组 [root@server ~] # crontab -l           # 查看当前用户的计划任务服务 [root@server ~] # chkconfig –list         # 列出所有系统服务 [root@server ~] # chkconfig –list | grep on   # 列出所有启动的系统服务程序 [root@server ~] # rpm -qa             # 查看所有安装的软件包 [root@server ~] # cat /proc/cpuinfo          # 查看CPU相关参数的linux系统命令 [root@server ~] # cat /proc/partitions          # 查看linux硬盘和分区信息的系统信息命令 [root@server ~] # cat /proc/meminfo          # 查看linux系统内存信息的linux系统命令 [root@server ~] # cat /proc/version          # 查看版本,类似uname -r [root@server ~] # cat /proc/ioports          # 查看设备io端口 [root@server ~] # cat /proc/interrupts          # 查看中断 [root@server ~] # cat /proc/pci              # 查看pci设备的信息 [root@server ~] # cat /proc/swaps            # 查看所有swap分区的信息... 全文

linux系统查看硬件 linux查看系统信息 linux 休闲 职场

马哥Linux大型免费公开课即将开始(马哥多年经验首次对外公开)

应51cto官方邀请,于9月12号晚上8点30分 将举办一场公开课,课程内容为:<<Linux运维岗位知识结构发展路线>>免费报名地址 (别忘了微博分享给你的小伙伴)... 全文

linux培训 马哥linux linux公开课

第三集Linux系统工程师集训之网络部分视频课程

本视频是Linux系统工程师集训之网络部分视频课程的第三集,主要内容为认识思科的常见端口以及设备如何连接。工作中发现很多搞Linux系统运维的人由于缺乏基础的网络知识而遇到瓶颈,而且还是一个比较常见的现象(拜国内不实用的教育系统所赐)。出于公益和个人 知识分享的角度,打算做一系列网络知识的分享,使用了CCNA的课件(实在是找不出不用CCNA的课件的原因,非常经典无法拒绝,但是稍作修改,在本页可 以找到本视频的课件下载),每周不定期推出2~3个视频,并在51cto进行同步(由于视频制作的原因会有1~2天延迟,如想抢先观看请关注我的微博或者易柏微博)... 全文

Linux linux系统 系统工程师 网络课程 Linux视频教程

从linux的文件删除机制解释为何linux的病毒那么少

很多人曾经说过,linux下的病毒没有windows多的原因在于linux使用的人不多,人们不屑于开发linux下的病毒,看到这个言论我笑了,想必很多人都有过explorer被注入的经历吧,explorer被替换然后怎么也删除不掉,或者一个system32下的一个顽固文件怎么也删除不掉,更不幸的是,它就是一个木马,此时,网上流行的一些工具就显得有用了,比如icesword,这些工具不得不动用内核驱动来靠内核的超高特权来删除那些文件,windows的注册表也是一个难缠的东西,一旦注册表被篡改,后果将不堪设想,因此注册表备份工具就显得必要,这一切的关键在于windows内核的架构,windows的启动过程非常的复杂,不仅是内核的启动,更有很多的用户空间的服务是用户所不能控制的,比如winlogon进程,在用户可以接手系统之前,很多的用户空间服务已经启动了,即便是安全模式也是这样,既然用户空间的东西可以在用户接手系统之前启动,那么如果这些是恶意程序的话,你的系统将乖乖的随黑客的心而动,恐怖吧,十分恐怖!windows的文件映射是一个十分令人又爱又恨的机制,它可以使你的重要文件在被访问期间不能被删除,当然也可以使病毒被使用期间不能被删除...这一切都是因为windows将文件的删除和文件保护以及系统安全统一在了一起,这是它微内核的架构所决定的,windows总是尽自己最大的努力保持系统的完整,而往往结构却适得其反,windows作为一个商品,它不希望初级用户由于自己的误操作删除了一个系统文件造成系统不能启动然后把过错归于微软,它需要考虑的问题太多了。linux呢,恰恰不是这样,它对于文件的保护采用了懒惰的机制,并且将最大的自由交给用户,它不阻止你删除任何文件,因为系统的根本归根结底都是磁盘的文件,所以它甚至允许你删除内核本身,结果就是下次不能再启动了,删除了内核本身难道还能继续运行下去,是的,可以,这就是linux的vfs对文件删除管理的懒惰机制,如果有人在用该文件,那么系统是不会删除它的,另外一个原因就是linux内核是大内核,并且全部映射到物理内存,对于内核而言没有分页内存的概念,即便磁盘的文件没有了,只要内存中还有就不会出现问题。对于文件的删除操作,不管是什么文件一律平等对待,linux系统看到的只是一个引用计数,一旦引用计数为0了,就要删除该文件了,如果有人使用着该文件,那么它的引用计数最起码是1,最起码也要等到该使用者不再使用的时候才可以删除该文件,这样的结果就是当你删除一个文件的时候,你放心的进行删除操作,系统等到没有用该文件的时候执行最终的删除,因此在linux中没有删除不了的文件,linux不对文件的删除处理提供任何的保护,不耦合任何别的机制,删除的语义很简单,就是递减一个引用计数。另外一点就是,linux的内核和用户空间分得很清晰,用户甚至可以在启动时定义自己的init=XXX参数使得用户空间的第一个进程是自己定义的,这种内核空间和内核空间的不耦合是十分重要的,内核在init内核线程中通过execve一个用户进程让用户接手系统,这个进程是可以自己定义的,不过一般是/sbin/init进程,这样的结果就是即使用户空间全部被注入了,那么你第一,可以删除这些肮脏的文件;第二,可以设置一个你自己定义的干净的init进程,需要做的就是重新启动一下系统,一切就搞定了,linux中强大shell命令使得你可以很简单的备份一份干净的无病毒的根文件系统,因此在linux下杀毒将是一件很简单的事情。用户可以自主控制用户空间的第一个进程是这里的要点,在windows下这是很难的,你想替换smss程序,试试看,系统会提示你“请确定磁盘未满或未被写保护而且文件未被使用”,并且system32下的dllcache也是一个让你又爱又恨的目录,不信的话,请手动删除一下IE试试看。... 全文

linux delete struct windows 磁盘 linux内核

使用Kickstart+pxe自动化安装部署无人值守的linux服务器

一、准备工作,1. 首先要在你当前的环境下有DHCP服务器,为你安装的客户端提供DHCP服务;DHCP的安装部署就不需要我们多重复了;2. 需要在安装无人值守的linux服务器的BIOS支持pxe协议;3. 服务端需要有tftp服务、NFS服务、HTTP服务;4. 安装服务kickstart、生成kickstart文件;二、安装部署;1. 首先查看服务端的IP地址;... 全文

linux自动化 linux运维 linux无人值守 Kickstart+pxe

LINUX安全第一课||关于GRUB加密图文教程全解

关于LINUX的启动装载程序GRUB加密,算是一件很平常的工作。但是今天我在网上查这个东西,发现好多人都写的很简单,而且方法都比较过时。所以,在此我更新下GRUB加密。和大家分享下。 所谓GRUB就是对/boot/grub/grub.conf文件进行配置。先说说GRUB加密的好处1、可以让不知道密码的人不能启动系统。2、可以防止他人修改启动参数。######################################################################GRUB加密分为两种。1、全局加密2、局部加密 全局加密:功能:锁定启动界面,禁止了e   to edit the commands before booting a   to modify the kernel arguments before bootingc   for a command-line这个全局加密最主要的功能就是edit the commands  ,因为这个超做会看到局部的密码。 然后我们看看全局加密码后的效果。他需要你按P,输入全局密码才可以编辑查看commands.这样就可以保护我们的局部密码了。不输入全局密码可以直接回车开始启动系统,如果你还有局部密码,就需要输入局部密码。局部加密:相对与某个特定的超做系统来进行控制。功能:用户必须输入密码才能进入系统。 。下面我们来看看怎么实现这些功能的。 ################################################################### 选说局部加密:由于每个系统都是由title 来标志的,所以我们局部加密就是在这个标志后加入相应的语句。加密分两种1、明文2、MD5加密。具体方法如下图     那个MD5加密是怎么生成的么? 使用下面命令就可以了 把图中我标记就是你输入的密码,MD5的值,直接拷贝到/boot/grub.grub.conf中就可以了。然后就保存推出,从新启动就需要你输入密码才能进入系统。但是我们可以在启动画面用e键编辑进入command模式就可以查看密码。我们需要怎么杜绝这种事情发生呢?那就需要全局加密,不让其他人具有编辑的权限。 全局加密: 如上先生成一个MD5密码。然后进入/boot/grub/grub.conf在第一个title标志前面加如我们的密码,如图,timeout5后面就是我们对全局的加密。这样其他人需要全局密码才能查看局部密码。 GRUB加密基本就这样了,具体情况需要您自己灵活运用。本文出自 “fenghao.cn's Soft..” 博客,请务必保留此出处http://linuxguest.blog.51cto.com/195664/112107... 全文

linux Linux学习月征文 职场 休闲 linux系统

linux驱动程序之基于输入子系统写驱动程序

基于输入子系统写按键驱动: 步骤:    分配input_dev结构体    设置这个结构体    注册    硬件相关操作(有数据产生时调用 input_event来上报)1、分配input_dev结构体 首先要定义这个结构体: static struct input_dev *buttons_dev; 然后在init函数中进行以下操作: buttons_dev = input_allocate_device();2、设置这个结构体 使用set_bit来设置这一个位。 ===========================================================能设置的的东西: unsigned long evbit[BITS_TO_LONGS(EV_CNT)];//能产生哪类事件 unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];//能产生哪些按键 unsigned long relbit[BITS_TO_LONGS(REL_CNT)];//能产生哪些相对位移事件x,y,滚轮 unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];//能产生哪些绝对位移事件,x,y unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)]; unsigned long ledbit[BITS_TO_LONGS(LED_CNT)]; unsigned long sndbit[BITS_TO_LONGS(SND_CNT)]; unsigned long ffbit[BITS_TO_LONGS(FF_CNT)]; unsigned long swbit[BITS_TO_LONGS(SW_CNT)]; ============================================================ /*2.1能产生哪类事件*/set_bit(EV_KEY,buttons_dev->evbit);//EV_KEY表示按键事件 set_bit(EV_REP,buttons_dev->evbit);//EV_REP表示重复事件 /*2.2能产生这类操作里的哪些事件 L,S,ENTER,LEFTSHIT*/3、注册input_register_device(buttons_dev);... 全文

linux按键驱动 linux驱动 linux驱动 按键消抖 input子系统

关掉linux文本模式下的滴滴声

关掉linux文本模式下的滴滴声1. 在shell中输入:  setterm -blength n 后,即可关闭.2.vi /etc/inputrc 找到set bell-style none将前面的#去掉,之后重启系统即可解决声音问题... 全文

关掉linux文本模式下的滴滴声 linux linux 滴滴声 休闲 滴滴声

初窥Linux 之 ext2/ext3文件系统

Linux最传统的磁盘文件系统(filesystem)使用的是ext2,所以要了解文件系统就得要由ext2开始。一、文件系统特性磁盘分区完毕后还需要进行格式化,之后操作系统才能够使用这个分区。这是因为每种操作系统所设置的文件属性/权限并不相同,为了存放这些文件所需的数据,因此就需要将分区进行格式化,以成为操作系统能够利用的文件系统格式。传统的磁盘与文件系统的应用中,一个分区誻只能够被格式化成为一个文件系统,所以我们可以说一个文件系统就是一个分区。操作系统的文件数据除文件内容外,通常还有非常多的属性,Linux中的文件权限(rxw)与文件属性(所有者,群组、时间参数等)。文件系统通常会将这两部分数据分别存放在不同的块,权限与属性放置到inode中,至于实际数据则放置到data block块中。另外还有一个超级块(super block)会记录整个文件系统的的整体信息,包括inode与block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。inode:记录文件的属性,一个文件占用一个inode,同时记录此文件的数据所在的block号码。block:实际记录文件的内容,若文件太大时,会占用多个block。由于每个inode与block都有编号,而每个文件都会占用一个inode,inode内则有文件数据放置的block号码。因此,如果能找到文件的inode的话,那么自然就会知道这个文件所放置数据的block号码,也就能够读出该文件的实际数据。如图,假设某一个文件的权限与属性数据放置到inode 4号下(小方格)而这个inode记录了文件数据的实际放置点为2,7,13,15这4个block号码,此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一下子将4个block内容读出来。二、Linux的ext2文件系统文件系统一开始就将inode与block规划好了,除非重新格式化(或者利用resize2fs等命令更改文件系统大小)否则inode与block固定后就不再变动。为了方便管理,ext2文件系统在格式化时基本上是区分为多个块组的。每个块组都有独立的inode/block/super block系统。如下图所示:文件系统最前面有一个启动扇区,这个启动扇区可以安装引导装载程序,这样我们就能够将不同的引导装载程序安装到个别的文件系统最前端,而不用覆盖整块硬盘唯一的MBR,这样也才能制作出多重引导的环境。*data block:用来放置文件内容的地方,在ext2文件系统中所支持的block的大小有1KB,2KB,4KB,在格式化时大小就固定了,每个block内最多只能放置一个文件的数据,如果文件大于一个block的大小,则一个文件会占用多个block数量,若文件小于block,则该block的剩余空间就不能够再被使用了。block的大小而产生的ext2文件系统限制如下:*inode table(inode 表格)inode记录的文件数据至少有:1、该文件的访问模式;(rwx)2、该文件的所有者与组(ower/group);3、该文件的大小;4、该文件创建或状态改变的时间(ctime);5、最近一次读的时间(atime);6、最近修改的时间(mtime);7、该文件的特性的标志(flag);8、该文件真正内容的指向(pointer);而有这么强大功能的inode的大小均固定为每个128B。inode除了文件权限属性记录区域外,还有12个直接,1个间接,一个双间接与一个三间接记录区。12个直接指向号码的对照,这12个记录就能够直接取得block号码,至于所谓的间接就是再拿一个block来当作block号码的记录区,如果文件太大,就会使用间接的block来记录编号。同理,如果文件持续长大,那么就复用所谓的双间接,第一个仅再指出下一个记录编号的block在哪里,实际记录在第二个block当中。依此类推,三间接就是复用第三层block来记录编号。如下图所示:*Super block:Super block是非常重要的,因为文件系统的基本信息都写在这里,一个文件系统应该仅有一个super block而已。它记录的信息主要有:1、block与inode总量;2、未使用与已使用的inode、block数量;3、block与inode的大小;4、文件系统的挂载时间、最近一次写入数据的时间,最近一次检验磁盘的时间等文件系统的相关信息;5、一个validbit数值,若此文件系统已挂载,则validbit为0,若未挂载,则validbit为1;*File system Description(文件系统描述说明)这个区段可以描述每个block group的开始与结束的号码,以及说明每个区段分别介于哪一个block号码之间。可以用dumpe2fs来查看。*block bitmap(块对照表)通过block bitmap可以知道哪些block是空的,因此我们的系统就能够很快速地找到可以使用的空间来处置文件。同样,如果你删除某些文件时,那么那些文件原本占用的block号码就得要释放出来,此时在block bitmap当中相对应到该block号码的标志就得要修改成为“未使用”。*inode bitmap(inode对照表)与block bitmap相似。三、与目录树的关系1、目录:在Linux下的ext2文件系统新建一个目录时,ext2会分配一个inode与至少一块block给该目录。inode记录该目录的相关权限与属性,并可记录分配到的那块block号码;而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据。2、文件:在Linux下的ext2文件系统新建一个文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件。注意,如果文件太大,block的数量还要加上间接,双间接和三间接指向所指向的block。3、由上述可知,inode本身并不记录文件名,文件名的记录是在目录的block当中。当我们要读取某个文件进,就务必会经过目录的inode与block,然后才能够找到那个待读取文件的inode号码,最终才会读到正确的文件的block内的数据。由于目录树是由根目录开始读起,因此系统通过挂载的信息可以找到挂载点的inode号码,此时就能够得到根目录的inode内容,并依据该inode读取根目录的block内的文件名数据,再一层层地往下读到正确的文件名。四、ext3文件系统为了避免文件系统不一致的情况发生,在文件系统当中规划出一个块,该块专门记录写入或修订文件时的步骤,也就是加入了日志文件系统。这就是ext3文件系统,它是ext2文件系统的升级版。五、挂载点的意义每个文件系统都有独立的inode、block、super block等信息,这个文件系统要能够链接到目录树才能被我们使用。将文件系统与目录树结合的操作我们称为挂载。挂载点一定是目录,该目录为进入该文件系统的入口,必须要“挂载”到目录树后,才能够使用该文件系统。 ... 全文

ext2 ext3 EXT3 linux Linux LINUX 文件系统

零零散散整理的一些linux内核参数和说明

其实也不能算是原创,日常工作的时候经常和这些参数打交道,遇到不明白的就去网上找到并记录下来,零零散散的记录了这么多,呵呵,如果你遇到没见过的参数,不妨来我这里找找,如果有不准确的地方,还请大家回复指出,谢谢$ /proc/sys/net/core/wmem_max 最大socket写buffer,可参考的优化值:873200 $ /proc/sys/net/core/rmem_max 最大socket读buffer,可参考的优化值:873200 $ /proc/sys/net/ipv4/tcp_wmem TCP写buffer,可参考的优化值: 8192 436600 873200 $ /proc/sys/net/ipv4/tcp_rmem TCP读buffer,可参考的优化值: 32768 436600 873200 $ /proc/sys/net/ipv4/tcp_mem 同样有3个值,意思是: net.ipv4.tcp_mem[0]:低于此值,TCP没有内存压力. net.ipv4.tcp_mem[1]:在此值下,进入内存压力阶段. net.ipv4.tcp_mem[2]:高于此值,TCP拒绝分配socket. 上述内存单位是页,而不是字节.可参考的优化值是:786432 1048576 1572864 $ /proc/sys/net/core/netdev_max_backlog 进入包的最大设备队列.默认是300,对重负载服务器而言,该值太低,可调整到1000. $ /proc/sys/net/core/somaxconn listen()的默认参数,挂起请求的最大数量.默认是128.对繁忙的服务器,增加该值有助于网络性能.可调整到256. $ /proc/sys/net/core/optmem_max socket buffer的最大初始化值,默认10K. $ /proc/sys/net/ipv4/tcp_max_syn_backlog 进入SYN包的最大请求队列.默认1024.对重负载服务器,增加该值显然有好处.可调整到2048. $ /proc/sys/net/ipv4/tcp_retries2 TCP失败重传次数,默认值15,意味着重传15次才彻底放弃.可减少到5,以尽早释放内核资源. $ /proc/sys/net/ipv4/tcp_keepalive_time $ /proc/sys/net/ipv4/tcp_keepalive_intvl $ /proc/sys/net/ipv4/tcp_keepalive_probes 这3个参数与TCP KeepAlive有关.默认值是: tcp_keepalive_time = 7200 seconds (2 hours) tcp_keepalive_probes = 9 tcp_keepalive_intvl = 75 seconds 意思是如果某个TCP连接在idle 2个小时后,内核才发起probe.如果probe 9次(每次75秒)不成功,内核才彻底放弃,认为该连接已失效.对服务器而言,显然上述值太大. 可调整到: /proc/sys/net/ipv4/tcp_keepalive_time 1800 /proc/sys/net/ipv4/tcp_keepalive_intvl 30 /proc/sys/net/ipv4/tcp_keepalive_probes 3 $ proc/sys/net/ipv4/ip_local_port_range 指定端口范围的一个配置,默认是32768 61000,已够大.   net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout = 30 表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 net.ipv4.ip_local_port_range = 1024 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为1024到65000。 net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。 net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为 5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死。 本文出自 “虚拟的现实” 博客,请务必保留此出处http://waringid.blog.51cto.com/65148/183496 kernel.hung_task_check_count The number of tasks checked:  */ unsigned long __read_mostly sysctl_hung_task_check_count = PID_MAX_LIMIT; 最大pid上限? ############################################### net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 每个消息队列的最大字节限制 kernel.msgmax = 65536 每个消息的最大size. kernel.shmmax = 68719476736 内核参数定义单个共享内存段的最大值 kernel.shmall = 4294967296 参数是控制共享内存页数 net.ipv4.tcp_max_syn_backlog = 65536 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数 net.core.netdev_max_backlog = 8192 每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目 net.ipv4.tcp_max_tw_buckets = 20000 表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于Squid,效果却不大。此项参数可以控制TIME_WAIT套接字的最大数量,避免Squid服务器被大量的TIME_WAIT套接字拖死 net.core.somaxconn = 32768 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数,默认值为1024 net.core.wmem_default = 8388608 该文件指定了发送套接字缓冲区大小的缺省值(以字节为单位)。 net.core.rmem_default = 8388608 该文件指定了接收套接字缓冲区大小的默认值(以字节为单位)。 net.core.rmem_max = 16777216    指定了接收套接字缓冲区(接收窗口)大小的最大值(以字节为单位)          最大的TCP数据接收缓冲 net.core.wmem_max = 16777216      指定了发送套接字缓冲区(接收窗口)大小的最大值(以字节为单位)                    最大的TCP数据发送缓冲 net.ipv4.tcp_timestamps = 0                                                        以一种比重发超时更精确的方法(请参阅 RFC 1323)来启用对 RTT 的计算;为了实现更好的性能应该启用这个选项,时间戳在(请参考RFC 1323)TCP的包头增加12个字节 net.ipv4.tcp_synack_retries = 2                     # syn-ack握手状态重试次数,默认5,遭受syn-flood攻击时改为1或2 net.ipv4.tcp_syn_retries = 2                          外向syn握手重试次数,默认4 net.ipv4.tcp_tw_recycle = 1                           # 默认0,tw快速回收 net.ipv4.tcp_tw_reuse = 1                                                       表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_mem = 94500000 915000000 927000000  确定 TCP 栈应该如何反映内存使用;每个值的单位都是内存页(通常是 4KB)。第一个值是内存使用的下限。第二个值是内存压力模式开始对缓冲区使用应用压力的上限。第三个值是内存上限。在这个层次上可以将报文丢弃,从而减少对内存的使用。对于较大的 BDP 可以增大这些值(但是要记住,其单位是内存页,而不是字节) net.ipv4.tcp_max_orphans = 3276800  系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤儿连接将即刻被复位并打印出警告信息。这个限制仅仅是为了防止简单的DoS攻击,你绝对不能过分依靠它或者人为地减小这个值,更应该增加这个值(如果增加了内存之后) net.ipv4.tcp_fin_timeout = 30                    表示如果套接字由本端要求关闭,这个参数决定了它保持在FIN-WAIT-2状态的时间。 net.ipv4.tcp_keepalive_time = 600                                 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 net.ipv4.tcp_keepalive_intvl = 30                当探测没有确认时,重新发送探测的频度。缺省是75秒 net.ipv4.tcp_keepalive_probes = 3                在认定连接失效之前,发送多少个TCP的keepalive探测包。缺省值是9。这个值乘以tcp_keepalive_intvl之后决定了,一个连接发送了keepalive之后可以有多少时间没有回应 net.ipv4.tcp_no_metrics_save = 1                 一个tcp连接关闭后,把这个连接曾经有的参数比如慢启动门限snd_sthresh,拥塞窗口snd_cwnd 还有srtt等信息保存到dst_entry中, 只要dst_entry 没有失效,下次新建立相同连接的时候就可以使用保存的参数来初始化这个连接.                                                  tcp_no_metrics_save 设置为1就是不保持这些参数(经验值),每次建立连接后都重新摸索一次. 我觉得没什么好处. 所以系统默认把它设为0. net.ipv4.ip_local_port_range = 1024  65535    指定端口范围的一个配置,默认是32768 61000 kernel.msgmni = 1024 这个参数决定了系统中同时运行的最大的message queue的个数 kernel.sem = 250 256000 32 2048 cat /proc/sys/kernel/sem 250 32000 100 128 4个数据分别对应 SEMMSL     250       表示每个信号集中的最大信号量数目 SEMMNS     32000  表示系统范围内的最大信号量总数目 SEMOPM     100      表示每个信号发生时的最大系统操作数目 SEMMNI       128      表示系统范围内的最大信号集总数目  ... 全文

sysctl.conf linux内核调优 linux内核参数 linux sysctl.conf参数

5 6 7 8 9 10 11 12 13 14