• 1. 文件处理命令
  • 2. 回顾pwconv:开启用户的shadow口令. pwunconv:关闭用户的shadow口令 pwconv投影密码将文件内的密码改存在/etc目录下的shadow和gshadow 文件内,只允许系统管理者读取,同时把原密码置换为“x”字符,有效的 强化了系统的安全性。   pwconv依赖于passwd中的密码区'x'来同步/etc/passwd/etc/shadow 这两个文件;以/etc/passwd为主来控制/etc/shadow中的各项:   A:若/etc/shadow不存在,则pwconv将用/etc/passwd来建立   B:若/etc/shadow已存在,则:   1.若条目在passwd中已存在,而不在shadow中,则在shadow中添加相关条目  2.若条目在shadow中已存在,而不在passwd中,则从shadow中删除相关条目
  • 3. 回顾 depmod可检测模块的相依性,供modprobe在安装模块时 使用,它是怎么做到这一点的呢?     Linux内核模块可以为其它模块提供服务(在代码中使用EXPORT_SYMBOL),这种服务被称作"symbols"。若第二个模块使用了这个symbol,则该模块很明显依赖于第一个模块。这些依赖关系是非常繁杂的。     depmod读取在/lib/modules/version 目录下的所有模块,并检查每个模块导出 的symbol和需要的symbol,然后创建一个依赖关系列表。默认地,该列表写入 到/lib/moudules /version目录下的modules.dep文件中。 每个模块的symbol又是在哪个地方呢?
  • 4. find名称:find   用法:find [path] [expression]   使用说明:   expression 中可使用的选项有二三十个之多,在此只介绍最常用的部分。   -mount, -xdev : 只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案   -amin -n : 在最近的 n 分钟内被读取过   -amin n : 在 n 分钟之前被读取过   -anewer file : 比档案 file 更晚被读取过的档案   -atime -n : 在最近的 n 天内读取过的档案   -atime n : 在 n 天前读取过的档案   -cmin -n : 在最近的 n 分钟内被修改过   -cmin n : 在 n 分钟前被修改过   -cnewer file :比档案 file 更新的档案   -ctime -n : 在最近的 n 天内修改过的档案   -ctime n : 在 n 天前修改过的档案   -empty : 空的档案-gid n or -group name : gid 是 n 或是 group 名称是 name   -ipath p, -path p : 路径名称符合 p 的档案,ipath 会忽略大小写   -name name, -iname name : 档案名称符合 name 的档案。iname 会忽略大小写
  • 5. find -size n[cwbkMG] : 文件大小为 n 个由后缀决定的数据块。其中后缀含义为:   b: bit 位数(如果用户没有指定后缀,则默认为 b)   c: 表示字节数   k: 表示 kilo bytes (1024字节)   w: 字 (2字节)   M: 兆字节   G: 千兆字节  -type c : 文件类型是 c 的档案。   d: 目录   c: 字符型文件   b: 设备块型文件   p: 管道文件   f: 普通文件   l: 链接型文件   s: socket 套接字符文件  -pid n : process id 是 n 的文件
  • 6. find范例:  将目前目录及其子目录下所有文件扩展名是 c 的档案列出来。   # find . -name "*.c"   将目前目录及其下子目录中所有文件列出   # find . -type f   将目前目录及其子目录下所有最近 20 天内更新过的文件列出   # find . -ctime -20 将目前目录及其下子目录中所有空文件列出   # find . -empty
  • 7. grepgrep 它在一个或多个文件中搜索字符串。如果字符串中包括空格,则必须被引用,搜索的结果被输出,不影响原文件内容。 grep可用于shell脚本,因为grep通过返回一个状态值来说 明搜索的状态,如果模板搜索成功,则返回0,如果搜索不 成功,则返回1,如果搜索的文件不存在,则返回2。我们利 用这些返回值就可进行一些自动化的文本处理工作。
  • 8. grep2. grep正则表达式元字符集(基本集)   ^   行的开始 如:'^grep'匹配所有以grep开头的行。   $   行的结束 如:'grep$'匹配所有以grep结尾的行。   .   匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。   *   匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep行。 .*一起用代表任意字符。   []   匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。   [^]   匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
  • 9. grep \(..\)   标记匹配字符,如'\(love\)',love被标记为1。   \<   单词的开始,如:'\   单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。   x\{m\}   重复字符x,m次,如:'o\{5\}'匹配包含5个o的行。   x\{m,\}   重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。   x\{m,n\}   重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。   \w   匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。   \W   \w的反置形式,匹配一个或多个非单词字符,如点号句号等。   \b   单词锁定符,如: '\bgrep\b'只匹配grep。
  • 10. grep5. Grep命令选项   -?   同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。   -a, --text   等价于匹配text,用于(Binary file (standard input) matches)报错   -b,--byte-offset   打印匹配行前面打印该行所在的块号码。   -c,--count   只打印匹配的行数,不显示匹配的内容。   -f File,--file=File   从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。   -h,--no-filename   当搜索多个文件时,不显示匹配文件名前缀。
  • 11. grep -i,--ignore-case   忽略大小写差别。   -q,--quiet   取消显示,只返回退出状态。0则表示找到了匹配的行。   -l,--files-with-matches   显示匹配模板的文件列表。   -L,--files-without-match   显示不匹配模板的文件列表。   -n,--line-number   在匹配的行前面加上行号。   -s,--silent   不显示关于不存在或者无法读取文件的错误信息。   -v,--revert-match   反检索,只显示不匹配的行。   -w,--word-regexp   如果被\<和\>引用,就把表达式做为一个单词搜索。   -R, -r, --recursive   递归的读取目录下的所有文件,包括子目录。 比如 grep -R 'pattern' test 会在 test 及其子目录下的所有文件中,匹配 pattern。   -V,--version   显示软件版本信息。
  • 12. grep6. 实例   要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子,讲解一个正则表达式的写法。   $ ls -l | grep '^a'   通过管道过滤ls -l输出的内容,只显示以a开头的行。   $ grep 'test' d*   显示所有以d开头的文件中包含test的行。   $ grep 'test' aa bb cc   显示在aa,bb,cc文件中匹配test的行。   $ grep '[a-z]\{5\}' aa   显示所有包含每个字符串有5个连续小写字符的字符串的行。   $ grep 'w\(es\)t.*\1' aa   如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep -E,就不用"\"号进行转义,直接写成'w(es)t.*\1'就可以了。
  • 13. egrep用于egrep和grep –E的元字符扩展集 + 匹配一个或多个先前的字符。如:‘[a-z]+able’,匹配一个或多个小写字母 后跟able的串,如loveable,enable等 ? 匹配0个或一个先前的字符。如:‘gr?p’匹配gr后跟一个或没有字符,然 后是p的行。 a|b|c 匹配a或b或c。如:grep|sed匹配grep或sed () 分组符号,如:love(able|rs)ov+ 匹配loveable或lovers,匹配一个或 多个ov。 x{m},x{m,},x{m,n} 作用同x\{m\},x\{m,\},x\{m,n\} egrep 接受所有的正则表达式,一个显著特性是可以以一个文件作为保存的字符串,然后将至传给egrep作为参数,为此使用-f选项。 egrep –f part2 file par2中包括各种匹配的具体格式。
  • 14. grep7.注意 grep命令中不加任何参数,默认情况下,只检索两层目录。    在某些机器上,要使用-E参数才能够进行逻辑匹配(详见下) grep "a|b" (匹配包含字符样式为"a|b"的行) grep -E "a|b" (匹配包含字符样式为"a"或"b"的行)
  • 15. egrepgrep的手册里面说: Basic vs Extended Regular Expressions In basic regular expressions the meta-characters ?, +, {, |, (, and ) lose their special meaning; instead use the backslashed versions \?, \+, \{, \|, \(, and \). Egrep is the same as grep -E grep默认不是Extended模式,需要加参数-E。可是扩展模式才是习惯 的模式,用的时候还得记着。
  • 16. find&grepfind 根据文件的特点,查找文件或目录。 grep 检索文件中的内容 grep用途: 我们只知道文件中的一部分内容,而不知道文件名,想查看文件的全部 及路径 如:grep –R wang . 查找当前目录或子目录中包含wang的文件 find 用途: 我们知道文件名,找出文件的具体路径。 如:find . –name “*liang” 查找当前目录下以liang结尾的文件 find . -type f 查找当前目录下所有的文件
  • 17. sed1. Sed简介   sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个 或多个文件;简化对文件的反复操作;编写转换程序等。 2. 定址   可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定。
  • 18. sed3. Sed命令   调用sed命令有两种形式:                          sed [options] 'command' file(s)   sed [options] -f scriptfile file(s)   a\在当前行后面加入一行文本。   b lable分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。   c\用新的文本改变本行的文本。   d从模板块(Pattern space)位置删除行。   D删除模板块的第一行。   i\在当前行上面插入文本。   h拷贝模板块的内容到内存中的缓冲区。   H追加模板块的内容到内存中的缓冲区   g获得内存缓冲区的内容,并替代当前模板块中的文本。   G获得内存缓冲区的内容,并追加到当前模板块文本的后面。   l列表不能打印字符的清单。   n读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。   N追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。   p打印模板块的行。
  • 19. sed P(大写)打印模板块的第一行。   q退出Sed。   r file从file中读行。   t labelif分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。   T label错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。   w file写并追加模板块到file末尾。   W file写并追加模板块的第一行到file末尾。   !表示后面的命令对所有没有被选定的行发生作用。   s/re/string用string替换正则表达式re。   =打印当前行号码。   #把注释扩展到下一个换行符以前。   以下的是替换标记g表示行内全面替换。   p表示打印行。   w表示把行写入一个文件。   x表示互换模板块中的文本和缓冲区中的文本。   y表示把一个字符翻译为另外的字符(但是不用于正则表达式)
  • 20. sed4. 选项   -e command, --expression=command 允许多台编辑。   -h, --help 显示帮助。   -n, --quiet, --silent 取消默认输出。   -f, --filer=script-file 使用sed 脚本文件。   -V, --version 显示版本和版权信息。 -i,insert 直接修改。用模式空间里的内容直接覆盖以前的内容。
  • 21. sed5. 元字符集   ^行的开始 如:/^sed/匹配所有以sed开头的行。   $行的结束 如:/sed$/匹配所有以sed结尾的行。   .匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。   *匹配零或多个字符 如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。   []匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。   [^]匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。   \(..\)保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。   &保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。   \<单词的开始,如:/\单词的结束,如/love\>/匹配包含以love结尾的单词的行。   x\{m\}重复字符x,m次,如:/o\{5\}/匹配包含5个o的行。   x\{m,\}重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。   x\{m,n\}重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。
  • 22. sed6. 实例   删除:d命令$ sed '2d' example-----删除example文件的第二行。   $ sed '2,$d' example-----删除example文件的第二行到末尾所有行。   $ sed '$d' example-----删除example文件的最后一行。   $ sed '/test/'d example-----删除example文件所有包含test的行。   替换:s命令$ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。   $ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。   $ sed 's/^192.168.0.1/&localhost/' example-----&符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加localhost,变成192.168.0.1localhost。   $ sed -n 's/\(love\)able/\1rs/p' example-----love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。   $ sed 's#10#100#g' example-----不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。表示把所有10替换成100。   选定行的范围:逗号$ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。  
  • 23. sed  $ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。   $ sed '/test/,/check/s/$/sed test/' example-----对于模板test和check之间的行,每行的末尾用字符串sed test替换。 多点编辑:e命令$ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。   $ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。   从文件读入:r命令$ sed '/test/r file' example-----file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。   写入文件:w命令$ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。   追加命令:a命令$ sed '/^test/a\\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。   插入:i命令$ sed '/test/i\\   new line   -------------------------' example   如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。   
  • 24. sed   下一个:n命令$ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。   变形:y命令$ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。   退出:q命令$ sed '10q' example-----打印完第10行后,退出sed。   保持和获取:h命令和G命令$ sed -e '/test/h' -e '$G' example-----在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。   保持和互换:h命令和x命令$ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。
  • 25. sed(实例理解)-i 选项:注意命令是有前后顺序的,顺序不一样输出的结果也是不一样的。 第一个命令,最后的p参数先与-i结合变成了对模式空间里的数据的复制。 第二个命令, p参数,与-n结合,变成了打印,显示的意思。-n的选项达到的效 果(liang变zhang)放在缓存中。 -i再用缓存中的数据覆盖掉以前的内容。
  • 26. sed(实例理解)
  • 27. awkAWK是一种优良的文本处理工具,它不仅是Linux中也是任何环境中现有 的功能最强大的数据处理引擎之一。 awk操作可能很复杂,但命令的语法始终是: awk ‘{pattern+action}’ 其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时 所执行的一系列命令。花括号({})不需要在程序中始终出现,但它 们用于根据特定的模式对一系列指令进行分组。 调用方式: 1,awk命令行 2,使用-f选项调用awk程序 3,利用命令解释器调用awk程序:我们可以将awk程序写入文本文件,然后在它的第一行加上: #!/bin/awk -f awk 脚本文件名 待处理文件
  • 28. awk语法 与其它unix命令一样,awk拥有自己的语法: awk [-F re] [parameter...] [‘prog’] [-f progfile] 参数说明: -F re:允许awk更改其字段分段符 parameter:该参数帮助为不同变量赋值 ‘prog’:awk的程序语句段。这个语句段必须 用单引号,一方被shell解释。这个程序语句段的标 准形式。 ‘pattern’ 其中patten参数可以是egrep正则表达式中的任何一 个,它可以使用语法/re/再加上一些样式匹配技巧构成。与 sed类似,你也可以使用“,”分隔。awk解释它们,并在pattern给定的样 好似匹配的记录上执行其操作。使用“#”作为注释。 -f progfile:允许awk调用并执行progfile指定有程序文件。progfile是一个文本文 件,他必须符合awk的语法。 in_file :awk 的输入文件,awk允许对多个输入文件处理。值得注意的是awk不修改输入文 件。
  • 29. awk记录、字段与内置变量 awk处理的工作与数据库的处理方式有相同之处,就是awk支持对记录和字段的处理,其中对字段的处理是grep和sed不能实现的,这也是awk优于二者的原因之一。 awk用0表示整个行(记录)。不同的字段之间使用称做分隔符的字符分割开的。系统默认的分隔符是空格。 awk允许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符。awk中有好几个这样的内置变量,例如,记录分隔符变量RS、当前工作的记录数NR等等。 例如:显示文本文件myfile中第七行到第十五行中以字符%分割的第一字段,第三字段和第七字段: awk –F % ‘NR==7,NR=15 {print $1 $3 $7}’ myfile
  • 30. awk命令行的使用 例:显示文本文件mydoc匹配(含有)字符串“sun”的所有行。 awk ‘/sun/’ mydoc 由于显示整个记录(全行)是awk的缺省动作,因此可以省略action项。 awk ‘/sun/’ mydoc 显示第一个匹配Sun和sun的行第一个匹配Moon和moon的行之间的行,并显示到标准输出上。 awk ‘/[Ss]un/,/[Mm]oon/ ’myfile 例:下面的示例显示了内置变量和内置函数length()使 用: awk ‘length($0)>80 {print NR}’ myfile 显示出文本myfile中所有超过80个字符的行号,子啊这里,用0表示整个 记录(行),同时,内置变量NR不使用标识符”。
  • 31. awkAwk通常被用来进行格式扫描和处理。通过扫描一个或多个文件中的 行,查看是否匹配指定的正则表达式,并执行相关的操作。 Awk的主要特性包含: 1,awk以记录和字段的方式来查看文本文件 2,和其他编程语言一样,Awk包含变量、条件和循环 3,awk能够进行运算和字符串操作 4,awk能够生成格式化的报表数据 awk从一个文件或者标准输入中读取数据,并输出结果到标准输出中。
  • 32. awkAwk语法 awk ‘/search pattern1/ {Actions} /search pattern2/ {Actions}’ file 在上述语法中: search pattern是正则表达式 Action输出的语法 在Awk中可以存在多个正则表达式和多个输出定义 file 输入文件名 单引号的作用是防止shell转意
  • 33. awk2,awk的工作方式: awk一次读取文件中的一行 对于一行,按照给定的正则表达式的顺序进行匹配,如果匹配则执行对应的Action 如果没有匹配上则不执行任何动作 在上述的语法中,search pattern和Action是可选的,但是必须提供其中一个 如果search pattern未提供,则对所有的输入行执行Action操作 如果Action未提供,则默认打印出该行的数据 {}这种Action不做任何事情,和未提供Action的工作方式不一样 action中的语句应该使用分号分隔
  • 34. awk根据例子来理解: 默认情况下awk显示文件中的每一行 上面的例子中,匹配的正则表达式未给出,因此后续的Action适用于所 有的行,Action中的print没有任何参数的情况下将显示整行,注意其中 的action必须使用{}括起来
  • 35. awkawk显示匹配的行: 在下面的例子中第二个命令中action没有给出,将显示包含wyl和liang的 行,awk可以接受任意数量的正则表达式,但是每个组合(正则表达式 和Action)必须用新行来分隔,否则就出现命令三的情况。
  • 36. awkawk仅显示指定的域(字段) awk默认按照空格进行分割,并将分隔后的值存入对应的$n变量中,其 中$1代表第一个域依次类推,$0代表整行,NF代表示域的个数,$NF自 然就是最后一个域。这个例子中我们需要指定分割方式是“ :”
  • 37. awkawk找出uid大于等于500的用户 下面的例子中:$1代表用户,$3代表uid,如果uid大于等于500则执行显 示出$1(用户名)
  • 38. awkawk显示宿主目录是/home的用户名 主目录是在第六个域,~操作符是和正则表达 式中的值进行比较。
  • 39. awkAwk的两个关键字BEGIN和END BEGIN:让用户指定在第一条输入记录被处理之前所发生的 动作,通常可在这里设置全局变量。 如:awk ‘BEGIN{FS=“:”} {print $1,NF} ’ /etc/passwd END:让用户在最后一条输入记录被读取之后发生的动作。 BEGIN {Actions} {Action} #Action for everyline in a file END {Actions} # Awk的注释
  • 40. awk system函数可以在awk中执行linux的命令。
  • 41. awkawk可使用shell的重定向输出: 如果第一个域的值等于100,则把它输出到liang.txt中。
  • 42. awk综合应用实例: ps –ef 显示当前所有进程列表 | 为管道符号 grep –v grep 去除含有grep的一行,即忽略grep命令本身那个进程 grep firefox 只显示firefox进程的那一行 awk ‘{print $2}’ 只显示第二个域(列),即为进程号 awk ‘{print $2}’|xargs kill -9 将awk ‘{print $2}’输出并作为kill -9 的参数
  • 43. xargsxargs命令的基本用法 用途:构造参数列表并运行命令。即为:将前一个命令的输出作为下一 个命令的参数。