1. Find查找命令的使用:
    . 代表当前目录.
    1). find . -name “.txt” ———> 在当前目录下找以.txt结尾的文件.
    2). find . -name “[a-z]
    “ ———> 在当前目录下查找以所有子母开头的文件 , 支持简单的正则

    1. find . -name "file*" -------> 查找以file开头的文件.
    2. find . -name "file[1-6]*" -----> 查找file1-file6的文件, 支持简单正则.
  2. 3). find /etc -name “host*” ——-> 在/etc目录下查找以host开头的文件.
    4). find . -perm 755 —————-> 在当前目录下查找权限为755的文件, perm代表的事permission.
    5). find -user root ——————-> 在当前目录下查找属主为root的文件.

    1. find -user user1 -----------> 查找user1用户创建的文件.
  3. 6). find / -perm 755 | find -type f ————> 从根目录查找权限为755的文件, 在查找其中文件类型的文件.

    1. -type : 代表的是指定文件的类型.
  4. 7). 也可以简写为: find / -perm 755 -type f ——> 可以直接连着写.
    8). find /var -mtime -5 —————> 在/var下找更改时间在5天以内的文件.
    9). find /var -mtime +3 —————> 在/var下找更改时间在3天以前的文件.
    10). find /etc -type d ——————-> 在/etc下查找文件类型为d的目录文件.
    11). find /etc -type l ——————-> 在/etc下查找文件类型为l的链接文件.
    12). find . -size +1000000c ———-> 在当前目录下查找文件大小大于1M的文件,1M是1000000个字节.
    13). find . -perm 700|xargs rm -rf ——> 将管道前面查找的文件, 交给管道后xargs后的命令操作.

    1. xargs ----> 可以将前面的结果提供给后面的命令操作.
  5. 14). find . -type f|xargs ls -l ———> 查找出文件并查看详细信息.

  6. 其他命令:
    1). stat /opt/deng ————> 查看目录/文件的状态信息, 信息量如下:
    File: `/opt/deng’
    Size: 4096 Blocks: 16 IO Block: 4096 directory
    Device: 803h/2051d Inode: 530922 Links: 2
    Access: (0775/drwxrwxr-x) Uid: ( 0/ root) Gid: ( 0/ root)
    Access: 2015-01-26 05:47:35.883617429 -0800 ——> 最后访问时间
    Modify: 2015-01-22 06:15:54.564426943 -0800 ——> 最后修改时间
    Change: 2015-01-22 06:15:54.564426943 -0800 ——> 最后改变时间
    2). nl file ——————-> 查看file文件, 并显示对应的行号.
    3). init ——-> linux的启动级别:

    1. init 0 : 关机
    2. init 1 : 单用户形式,只root进行维护
    3. init 2 : 多用户,不能使用net file system
    4. init 3 : 完全多用户 , 字符界面
    5. init 4 : 安全模式 , 未被使用
    6. init 5 : 图形化
    7. init 6 : 重启.
  7. 4). linux 是多用户系统,多个用户可以同时登陆系统, 而windows是单用户登陆系统,另一用户

    1. 要想使用,必须先注销该系统.
  8. 5). 可以使用alt + F1-F7 来查看各个linux的终端.
    6). ctrl+alt+delete ————> 按住这三个键,linux系统将在3秒内重新启动.
    7). ssh 192.168.1.208 ———> 从当前的的linux机器,链接上208这台机器.
    8). ssh 192.168.1.208 mkdir /usr/mydir ————-> ssh发送命令到另一台机器, 执行shell指令.
    9). ssh-keygen -t rsa ——-> 生成ssh的公钥和私钥, rsa是一种加密算法.
    10). ssh-copy-id 192.168.1.208 ——> 执行该命令, 将当前机器的公钥拷贝给 208 这台机器.

    1. -----> 也可以给当前的本机执行该命令. ssh 本机地址(192.168.1.100)就不需要密码了.
  9. grep命令及linux中的正则:
    find 用来将文件查找出来, 而 grep是用来检索文件中的内容的.
    1). grep ‘linux’ file —-> 查找file文件中含有’linux’的行, 只要该行中含有’linux’字样就可以,

    1. 不管位置, 但是严格区分大小写
  10. 2). grep ‘linux’ find . -name f* ——> 也可以通过命令找到文件, 通过``来解析命令.
    3). 常用正则表达式:

    1. 1. ^linux : linux开头的行
    2. 2. php$ : php结尾的行
    3. 3. . : 匹配任意的单个字符
    4. 4. .+ : 匹配任意多个字符,不包含0
    5. 5. .* : 匹配0个或者多个字符
    6. 6. [0-9a-z]: 匹配[]内任意一个字符
    7. 7. (linux)+: 出现多次linux单词
    8. 8. (web){2}: web出现了2次以上
    9. (web){2,4}: web出现2-4
    10. 9. \ : 转义字符,只用来屏蔽一个元字符的特殊含义 : * , . , ? 都是有特殊含义的字符.
    11. 10. ? : 匹配0个或一个前面的字符.
    12. -- grep -E --color 'ro?t' 1.log -----> 匹配'rt', 'rot'
    13. 11. grep -E = egrep
  11. 4). grep -c ‘linux’ file ———> -c行数; 返回行数, file文件中包含’linux’有多少行. <结果为总共有几行>
    5). grep -n ‘linux’ file ———> -n表示行号; 返回那几行, 带行号的. <返回每一行的行号及内容>
    6). grep -i ‘linux’ file ———> -i 表示忽略大小写.
    7). grep -v ‘linux’ file ——-> 在file文件中过滤linux所在的行, 不包含’linux’的行

    1. -E 表示增强, 个人理解为可以匹配正则, Regex.
  12. 8). grep -E “2004:22:5[0-9]” file ——> 在file文件中查找时间在2004:22:50 -> 2004:22:59的所在行.
    9). grep -E “210]” file —————> 在file文件中查找不包含210的行; ^在[ ]以内的话,表示非的意思.
    10). grep -E “h*p” file ——————-> 查找file文件中包含h和p的行.
    11). grep -E “[5-8][6-9][0-3]” file —> 查找大于560小于893的行.
    12). grep -vin ‘linux’ file —————> -v -i -n 三个参数连着用.
    13). grep -E ‘.+linux.+’ file ————> 取出既不以linux开头,也不以linux结尾的,但包含linux的行.
    14). grep -E “4{2}” file ——————> 查找包含两个4的行
    15). grep -E “4{2,}” file —————-> 查找大于两个4的行
    16). grep -E “4{2,4}” file —————> 查找大于两个4小于4个4的行.
    17). grep -E “^$” file ———————-> 查找file文件中的空行
    18). grep “?” file —————————> 查找file文件中包含?的行.
    19). grep -E “p]” file ——————> 查找不是以p开头的file文件中的行.
    20). grep -n —color ‘mysql’ 1.txt——> —color 将查询的字符串高亮显示.
    21). grep -A5 -n ‘root’ 1.txt ————> 将查找的’root’所在的行, 以及之后的5行也罗列出来.

    1. -A5 : 标示After 5 , 后面的5行也出来了.
  13. 22). grep -B5 -n ‘root’ 1.txt ————> 将查找的’root’所在的行, 以及之前的5行也罗列出来.

    1. -B5 :标示Before 5 , 前面的5行也显示出来.
  14. 23). grep -r ‘root’ /etc/ ——————> 遍历/etc/下的所有文件,查找’root’ 字符串.
    24). grep -n ‘rot’ 1.log ——————> o是一个整体, 表示 r与t之间有0个或多个o.
    25). egrep -n —color ‘root|mysql’ file.log —————-> 查找出包含’root’或者包含’mysql’的行.
    26). grep -n —color ‘root|mysql’ file.log ————> 查找出包含’root’或者包含’mysql’的行.(不能加E)

  15. Awk 编程工具使用:
    AWK模式:

    1. 1). /正则表达式/:使用通配符的扩展集。
    2. 2). 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
    3. 3). 模式匹配表达式:用运算符~(匹配)和~!(不匹配)。
    4. 4). BEGIN语句块、pattern语句块、END语句块:
  16. AWK内置变量:

    1. ARGC 命令行参数个数
    2. ARGV 命令行参数排列
    3. ENVIRON 支持队列中系统环境变量的使用
    4. FILENAME awk浏览的文件名
    5. FNR 浏览文件的记录数
    6. FS 设置输入域分隔符,等价于命令行 -F选项
    7. NF 浏览记录的域的个数
    8. NR 已读的记录数
    9. OFS 输出域分隔符
    10. ORS 输出记录分隔符
    11. RS 控制记录分隔符
  17. AWK操作:
    0). cat /etc/passwd |cut -d:-f4 ————> 以:分割文件的行, 并取出passwd文件的第四列.
    cat /etc/passwd |cut -d:-f 1,2,3 ——> 取1,2,3列.

    1. cat /etc/passwd |cut -c 2,3 --------> 2,3号位置的字符.
  18. 1). awk ‘{print $0}’ file ——————-> 查找出file文件中的每一列/整行. linux中的索引是从1开始, $0表示所有的列.

    1. 1.1) cat /etc/passwd | head -5 |awk -F: '{print $1,$3}' -----> 以:分割,取出第一列,第三列.
    2. 1.2) awk -F ':' {print $2} 1.log ----------> -F 表示以什么分割.
    3. 1.3) awk -F ':' '$1~/root/ {OFS="#";print $1,$2}' 1.txt ----------> 以:分割内容, 查找第一列匹配root(包含)的内容,然后输出内容, 并以#分割.
    4. 1.4) awk -F ':' '$1=="root" {OFS="#";print $1,$2}' 1.txt ----------> 以:分割内容, 查找第一列精准匹配root(等于)的内容,然后输出内容, 并以#分割.
    5. 1.5) awk -F ':' '$1="root" || NR>30 {OFS="#";print $1,$2}' 1.txt ----------> 以:分割内容, 查找第一列等于root或行数大于30的行的指定列的内容,然后输出内容, 并以#分割.
    6. 1.6) awk -F ':' '$1="root" {OFS="#";print $1,$2}' 1.txt -----------> 将第一列赋值为root.
  19. 2). awk ‘{print $1 “\t” $7}’ file ———-> 查找出file文件中的第1列和第7列
    3). cat file|awk ‘$0 !~/192.168.10.2/‘|grep “php”|wc -l ———-> 为不匹配.

    1. $0 !~/192.168.10.2/ ----> 表示匹配关系, !~表示不匹配.
  20. 4). awk 默认的分隔符就是空格, 所以不需要写-F了
    5). df | awk ‘{if(NR==3){print $1}}’ ———-> 取出df查看结果的第三行,$1表示第一列.
    6). df | awk ‘{if(NR==3){print}}’ —————-> 取出df查看结果的第三行.
    7). df | awk ‘{if(NR==3){print $0}}’ ————> 取出df查看结果的第三行,$0表示全部列.
    8). df | awk ‘{if(NR==3){print int($4)}}’——> 取出df查看结果的第三行,第四列,并将第四列转为整数.
    9). df | awk ‘END{print NR}’ ————————> 查看df查询结果总共多少行.
    10). awk -F ‘/‘ ‘{print $NF}’ ———————> 打印最后一列的内容, $(NF-1) —-> 打印倒数第二列内容.
    ==============> {print NR} : 打印出行号.
    ==============> {print NF} : 打印出每一列被分割出来的个数.
    11). awk -F ‘:’ ‘{print NR ,NF,$0}END{print FILENAME}’ 3.out ————-> 打印出行号,分割的段数, 末尾行打印出文件名.
    12). awk ‘BEGIN{print “begin”} {print $0} END{print “end”}’ 3.out
    13). awk ‘NR%2==1{next}{print NR,$0;}’ text.txt —————-> awk中next语句使用:在循环逐行匹配,如果遇到next,就会跳过当前行,直接忽略下面语句。而进行下一行匹配。
    14). awk的时间函数:

    1. mktime( YYYY MM dd HH MM ss[ DST]) : 生成时间格式 , 生成的时间都是时间戳
    2. strftime([format [, timestamp]]) : 格式化时间输出,将时间戳转为时间字符串 具体格式,见下表.
    3. systime() : 得到时间戳,返回从197011日开始到当前时间(不计闰年)的整秒数
    4. %a 星期几的缩写(Sun)
    5. %A 星期几的完整写法(Sunday)
    6. %b 月名的缩写(Oct)
    7. %B 月名的完整写法(October)
    8. %c 本地日期和时间
    9. %d 十进制日期
    10. %D 日期 08/20/99
    11. %e 日期,如果只有一位会补上一个空格
    12. %H 用十进制表示24小时格式的小时
    13. %I 用十进制表示12小时格式的小时
    14. %j 11日起一年中的第几天
    15. %m 十进制表示的月份
    16. %M 十进制表示的分钟
    17. %p 12小时表示法(AM/PM)
    18. %S 十进制表示的秒
    19. %U 十进制表示的一年中的第几个星期(星期天作为一个星期的开始)
    20. %w 十进制表示的星期几(星期天是0)
    21. %W 十进制表示的一年中的第几个星期(星期一作为一个星期的开始)
    22. %x 重新设置本地日期(08/20/99)
    23. %X 重新设置本地时间(120000)
    24. %y 两位数字表示的年(99)
    25. %Y 当前月份
    26. %Z 时区(PDT)
    27. %% 百分号(%)
  21. eg: 1). awk ‘BEGIN{tstamp=mktime(“2015 01 01 12 12 12”);print strftime(“%c”,tstamp);}’ —-> 以本地的日期和时间格式化

    1. ------> 结果: 20010101 星期一 121212
    2. 2). awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'
    3. ------> 结果: 2634468
    4. 3). awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'
    5. ------> 结果: 308201392
  22. 15). 格式化字符串输出: printf使用. ``` 字符串的格式: 其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符,以”%”开始,后跟一个或几个规定字符,用来确定输出内容格式。

%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x/%X 无符号以十六进制表示的整数 %o 无符号以八进制表示的整数 %g 自动选择合适的表示法

eg: 1). awk ‘BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf(“%.2f,%.2u,%.2g,%X,%on”,n1,n2,n3,n1,n1);}’

  1. ------> 结果: 124.11,18446744073709551615,1.2,7C,174
  1. 4. 16). 字符串函数:

①. index(str1,str2) ——————-> 在str1中查找str2元素所在的位置.

eg : awk ‘BEGIN{info=”this is a test2010test!”;print index(info,”test”)?”ok”:”no found”;}’ ——> “ok”

  1. awk 'BEGIN{info="this is a test2010test!";print index(info,"test")}' ----> 11

②. match(str1,reg1) ——————> 在str1中查找reg1元素所在的位置.

eg: awk ‘BEGIN{info=”this is a test2010test!”;print match(info,/[0-9]+/)?”ok”:”no found”;}’ —-> “ok”

  1. awk 'BEGIN{info="this is a test 2015 , just a test";print match(info,/[0-9]+/)}' ----------> 16

③. substr(str1,start,length) —————-> 截取字符串, 指定开始索引和长度.

eg: awk ‘BEGIN{info=”thisisatestjustatest”;print substr(info,4,10)}’ ———-> sisatestju

④. length(str) ——————-> 求出字符串的长度.

⑤. tolower(str) ——————> 字符串中每个大写字符将更改为小写

⑥. toupper ————————-> 字符串中的每个小写字符变为大写.

  1. 4. 17). awk中的数组:

数组的定义:

①. 以数字为下表: Array[1]=”sun” Array[2]=”kai”

②. 以字符串做下表: Array[“first”]=”www” Array[“last”]=”name” Array[“birth”]=”1987”

读取数组中的值:

{ for(item in array) {print array[item]}; } #输出的顺序是随机的 { for(i=1;i<=len;i++) {print array[i]}; } #Len是数组的长度

  1. 5. Sed 行定位的使用:<br />1). sed -n '2'p file ------------> 只打印第二行,不打印其他的行.

p—-> 表示打印print.

  1. 5. 2). sed -n '1,4'p file -----------> 从第一行到第四行的记录.<br />3). sed '1,4'd file --------------> 除了第一行到第四行的记录.

d—-> 表示临时删除delete,不显示.

  1. 5. 4). cat file | sed -n '1,4'p -----><br />5). cat file | sed -n '/linux/'p -----> 查询file文件中含有linux的行.<br />6). cat file | sed -n '1,/Linux/'p -----> 查询file文件中从第一行开始到含有Linux的行的所有行.<br />7). cat file | sed -n '/Linux/,'p ------> 查询file文件中的行,从含有Linux的行至文件的结束.

cat file | sed -n -r ‘/root|mysql/p’ ———> 查找root或者mysql. -r 可以转移特殊符号, 如 * , ? , |

  1. 5. 8). cat file | sed -n '/Linux/,'p > file2 ------> 查询file文件中的行,从含有Linux的行至文件的结束, 并将结果重定向到file2文件中.<br />9). 删除 -- d :

a. sed ‘2’d example——-删除example文件的第二行。

b. sed ‘2,$’d example——-删除example文件的第二行到末尾所有行。

c. sed ‘$’d example——-删除example文件的最后一行。

d. sed ‘/test/‘d example——-删除example文件所有包含test的行。

  1. 5. 10).替换 -- s :

a. sed ‘s/test/mytest/g’ example——-在整行范围内把test替换为mytest。如果没有g标记,g表示全局,则只有每行第一个匹配的test被替换成mytest。

b. sed -n ‘s/^test/mytest/p’ example——-(-n)选项和p标志一起使用表示只打印那些发生替换的行。

  1. 也就是说,如果某一行开头的test被替换成mytest,就打印它。

c. sed ‘s/^192.168.0.1/&localhost/‘ example——- &符号表示替换字符串中被找到的部份。

  1. 所有以192.168.0.1开头的行都会被替换成它自已加 localhost,变成192.168.0.1localhost

d. sed -n ‘s/loveable/\1rs/p’ example——-love被标记为1,所有loveable会被替换成lovers,而且替换的行会被打印出来。

e. sed ‘s#10#100#g’ example——-不论什么字符,紧跟着s命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。

  1. 表示把所有10替换成100
  1. 5. 11). 选定行的范围:逗号-- ,

a. sed -n ‘/test/,/check/p’ example——-所有在模板test和check所确定的范围内的行都被打印。

b. sed -n ‘5,/^test/p’ example——-打印从第五行开始到第一个包含以test开始的行之间的所有行。

c. sed ‘/test/,/check/s/$/sed test/‘ example——-对于模板test和west之间的行,每行的末尾用字符串sed test替换。

  1. 5. 12).多点编辑:e命令

a. sed -e ‘1,5d’ -e ‘s/test/check/‘ example——-(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。

  1. 命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

b. sed —expression=’s/test/check/‘ —expression=’/love/d’ example——-一个比-e更好的命令是—expression。它能给sed表达式赋值。

  1. 5. 13). 从文件读入:r命令

a. sed ‘/test/r file’ example——-file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。

  1. 5. 14). 写入文件:w命令

a. sed -n ‘/test/w file’ example——-在example中所有包含test的行都被写入file里。

  1. 5. 15). 追加命令:a命令

a. sed ‘/^test/a\—->this is a example’ example<——-‘this is a example’被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。

  1. 5. 16). 插入:i命令

a. sed ‘/test/i\ new line ————————————-‘ example 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。

  1. 5. 17). 下一个:n命令

a. sed ‘/test/{ n; s/aa/bb/; }’ example——-如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。

  1. 5. 18).变形:y命令

b. sed ‘1,10y/abcde/ABCDE/‘ example——-把1—10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。

  1. 5. 19). 退出:q命令

a. sed ‘10q’ example——-打印完第10行后,退出sed。

  1. 5. 20). 保持和获取:h命令和G命令

a. sed -e ‘/test/h’ -e ‘$G example——-在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。

  1. 5. 21). 保持和互换:h命令和x命令

a. sed -e ‘/test/h’ -e ‘/check/x’ example ——-互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。

  1. 5. 21). 脚本

Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。

  1. 6. uniq行定位的使用:<br />1). uniq -c file ------------------> 打印紧挨的重复行出现的次数 , 去重求唯一.

uniq file —————————> 去除紧挨的重复的行.

  1. 6. 2). uniq -d file -------------------> 只打印重复的行;<br />3). awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c

————> 把apache网站的所有访问的ip全部统计出来, 并打印出统计次数.

  1. 7. sort排序:<br />1). sort file ------------> 把文件按字母的升序进行排序 , 数字在前,字母在后.<br />2). sort -r file -----------> 把文件按字母的降序进行排序. r: reverse<br />3). cat file | sort -t:-k1 -r ------> 为:进行分割后的第一列来倒序排序

-t ——-> 表示以什么来分割. -k1 ——> 表示取分割后的第几列 -r ——-> 表示反转 -n ——-> 表示按照数字排序 , 否则按照ASCII排序

————> 空格是默认的分割符, 可以不写-t

  1. 7. 4). sort -t ':' -k3 -n /etc/passwd | cut -d ':' -f 3 ---------> 将/etc/passwd 中的内容按':'切分,取第三列, 按照数据排序, 在获取第三列的内容.<br />5). cat 1.lo 2.lo | sort -nr | uniq -c | sort -nr
  2. 7. split 文件切割的使用:<br />1). split -2 file spt ----------------> 生成sptab , sptac ... sptaa 等多个文件.
  1. file文件每两行分割成一个文件,每个文件的前缀都是以spt开头的.

-2 ——> 表示分割的单位,每两行成一个文件.

spt——> 是分割后文件名的前缀.

  1. 8. 2). split -b 1M file ----------------> file文件进行切割, 每个文件为1M.
  2. 8. Linux的启动流程和脚本服务:<br /> 初始化阶段 ***<br />1). bios找到磁盘上的mbr主引导扇区.<br />2). 进入grub界面选择相应的启动内核<br />3). 读取kernel内核文件 -/boot/vmlinuz-*<br />4). 读取init的镜像文件 -/boot/initrd-*<br />5). init去读取/etc/inittab<br />6). 读取启动级别 (id:3:initdefault)<br />7). 读取/etc/rc.d/rc.sysinit,完成时钟设置, 主机名的设置,分区表的挂载/etc/fstab<br />8). 读取/etc/rc.d/rc 脚本, 通过该脚本吸收3级别, 然后启动/etc/rc.d/rc3.d下所有

以s开头的服务, 不启动该目录下的以k开头的服务

  1. 9. 9). 读取/etc/rc.d/rc.local脚本<br />10). 设置防火墙.<br />11). 检测硬件变化.<br />12). 启动网络服务<br />13). 启动init默认级别下允许启动的进程(如sshd).<br />14). 进入登录界面.<br />------------- 知识点 -----------<br />1). 可以修改/etc/inittab文件的id:3:initdefault, 可以修改init的级别, 5 是含有图形化界面, 3没有图形化界面.<br />2). chkconfig --level 3 sshd off ----> 设置初始化级别下sshd服务的开启情况为off . 调配服务是否启动.<br />3). chkconfig --list sshd -----------> 查看各个级别下的sshd服务的初始化开启情况.
  2. 9. 自定义服务脚本及制作rpm服务脚本:<br />1). 脚本程序: 0204.sh

/bin/bash

deng

chkconfig: 2345 90 10

description: mytest script 0204.sh runing/stoping…………

case $1 in start ) echo “system starting………………….” sleep 2 ;; stop) echo “system stoping………………….” sleep 2 ;; restart ) echo “system restarting………………….” sleep 2 ;; *) echo “please input start|stop|restart………………….” sleep 2 ;; esac

  1. 10. 2). 想让该0204.sh脚本随linux启动,可以将该脚本在 /etc/rc.d/rc.local中启动该脚本.<br />3). 只要脚本在/etc/rc.d/init.d 下,service就可以管理, 就可以使用 service 0204.sh start , 执行脚本 , 并传递位置变量.

service 命令在任何位置都会启动该脚本, 因为脚本放在了init.d下.

  1. 10. 4). 特别注意服务脚本中的信息:

解析:

chkconfig: 2345 90 10

  1. ----------> 2345 代表这四种初始化级别.
  2. ----------> 90 代表linux启动的优先级,尽量靠后,
  3. ----------> 10 代表linux关闭时,停止进程的顺序, 尽量靠前.

description: mytest script 0204.sh runing/stoping…………

  1. -----------> 描述信息.
  1. 10. 5). 如果需要自定义服务脚本, 需要加上 上面两句代码 . 并将脚本放在 /etc/rc.d/init.d 目录下.
  2. 10. 制作字符菜单:<br />1). 添加用户<br />2). 设置密码<br />3). 删除用户<br />4). 查看磁盘空间<br />5). 查看内存空间<br />6). 退出<br />7). 返回主菜单<br />--------------- menu.sh ---------------- 主要负责菜单界面的显示<br />#!/bin/bash<br />#deng<br />function menu(){ -------> 将其封装成为函数.<br />title="My menu"<br />url="www.itcast.com"<br />time=`date +%Y-%m-%d`<br />cat << eof ----------------> 利用cat多行输出文件<br />############################################<br />`echo -e "\033[32;40m$title\033[0m"`<br />############################################
  3. - <br />
  4. 1. add a user
  5. - <br />
  6. 1. set password for user
  7. - <br />
  8. 1. delete a user
  9. - <br />
  10. 1. print disk space
  11. - <br />
  12. 1. print mem space
  13. - <br />
  14. 1. quit
  15. - <br />
  16. 1. back to main menu<br />############################################<br />$url $time<br />############################################<br />eof ----------------------> 结束标示符 , 必须顶格对其, 而且后面没有空格及其他字符.<br />}
  17. ---------------------- index.sh ----------------- 菜单的功能脚本------------<br />#!/bin/bash<br />#deng<br />. menu.sh -----> 表示引入文件 menu.sh<br />clear -----> 清空当前的界面显示的内容<br />menu -----> 调用menu函数<br />while true<br />do<br />read -p "please input a option : " option

case $option in 1 ) read -p “please input your add username : “ username useradd $username &>/etc/null

  1. if [[ $? = 0 ]]; then
  2. echo -e "\033[32;40m${username} created usccessfully!!!\033[0m"
  3. else
  4. echo -e "\033[31;40m${username} created failly!!!\033[0m"
  5. fi
  6. ;;
  7. 2 )
  8. read -p "please input your set password username : " name
  9. # passwd $name
  10. read -p "please input your new password : " pass
  11. echo $pass | passwd --stdin $name &>/etc/null
  12. if [[ $? = 0 ]]; then
  13. echo -e "\033[32;40m ${name} password setted successfully!!!\033[0m"
  14. else
  15. echo -e "\033[31;40m${name} password setted failly !!!!\033[0m"
  16. fi
  17. ;;
  18. 3 )
  19. read -p "please input your delete username : " user
  20. userdel $user &>/etc/null
  21. if [[ $? = 0 ]]; then
  22. echo -e "\033[32;40m ${user} delete successfully!!!\033[0m"
  23. else
  24. echo -e "\033[31;40m${user} delete failly !!!!\033[0m"
  25. fi
  26. ;;
  27. 4 )
  28. disk=`df -Th`
  29. echo -e "\033[30;47m$disk\033[0m"
  30. ;;
  31. 5 )
  32. str=`free -m`
  33. echo -e "\033[30;47m$str\033[0m"
  34. ;;
  35. 6 )
  36. read -p "are you sure to quit ?(y/n) :" response
  37. case $response in
  38. y)
  39. echo -e "\033[32;40mQuit successfully!!!!\033[0m"
  40. break
  41. ;;
  42. *)
  43. continue
  44. ;;
  45. esac
  46. ;;
  47. 7)
  48. clear
  49. menu
  50. ;;

esac

  1. done
  2. 12 . 制作字符菜单详情解析:

1). shell函数的定义:

  1. function menu(){
  2. ......
  3. }

2). shell函数的调用:

  1. 直接在脚本中写函数名就可以.
  2. menu

3). cat命令的heredoc的使用:

  1. a. cat file ----> 查看文件.
  2. b. cat << eof
  3. .....
  4. .....
  5. eof
  6. -----> 保证其中的内容保持原格式输出.
  7. -----> 其中也可以引用变量.
  8. -----> 其中也可以执行命令 `` ;

4). 字符界面下的字符的颜色的控制:

  1. echo -e "\033[31;40m .... \033[0m"

5). shell引入文件.

  1. . file.sh ----> 在当前脚本中包含file.sh文件.
  2. menu ----------> 并执行file.sh中的menu函数.

6). while 写一个死循环:

  1. while true
  2. do
  3. ......
  4. done
  1. 13. shell操作mysql数据库<br />1). /usr/local/mysql/bin/mysql -uroot -p2143" -e "show databases"

————> -e 后面直接跟sql语句, 必须使用双引号.

  1. 13. 2). shell脚本中使用mysql数据库:

!/bin/bash

mysql.sh

mysql=”/usr/local/mysql/bin/mysql -uroot -92143”

sql=”create table deng.user( — 指定使用哪个库 id int unsigned auto_increment primary key, username varchar(50), password varchar(50) )”

$mysql -e “$sql”

  1. 13. ----------> 使用shell脚本创建一张表.<br />3). 采用shell中位置参数, 来传递参数, 操作mysql数据库

!/bin/bash

mysql.sh

deng

connection=”mysql -uroot -p2143”

case $1 in select ) sql=”select * from deng.user” ;; delete) sql=”delete from deng.user where id=$2” ;; update) sql=”update deng.user set username=$3 where id=$2” ;; insert) sql=”insert into deng.user(id,username,password) values($2,$3,$4)” ;; esac

$connection -e “$sql”

  1. 14. 日志切割
  2. 1. date +%Y%m%d ---------> 20150406
  3. 1. date -d yesterday +%Y%m%d -------> 返回昨天的时间(20150405)
  4. 1. 日志分割: -- logcut.sh<br />#!/bin/bash<br />#deng<br />#logcut.sh<br />yesterday=`date -d yesterday +%Y%m%d`<br />srclog="/usr/local/apache2/logs/access_log"<br />dstlog="/usr/local/apache2/logsbak/access_${yesterday}.log"<br />mv $srclog $dstlog -- 重命名<br />pkill -1 httpd -- 重构刷新apache , 并不是重启.
  5. 1. 将脚本加入到任务计划中:<br />crontab -l -----> 查看任务计划.<br />vi crontab ------> 编辑任务计划. 时间 : 分时日月周
  6. 1. 分割日志, 记录插入数据库<br />#!/bin/bash<br />#deng<br />#logcut.sh<br />yesterday=`date -d yesterday +%Y%m%d`<br />srclog="/usr/local/apache2/logs/access_log"<br />dstlog="/usr/local/apache2/logsbak/access_${yesterday}.log"<br />mv $srclog $dstlog<br />pkill -1 httpd<br />tempfile=$$.txt --生成临时文件,名称随机 7781.txt<br />cat $dstlog | awk '{print $1}' | sort|uniq -c | awk '{print $2":"$1}'>$tempfile<br />mysql="/usr/local/mysql/bin/mysql -uroot -p2143"<br />for i in `cat $tempfile`; do<br />ip=`cat $i | awk -F: '{print $1}'`<br />num=`cat $i|awk -F: '{print $2}'`

sql=”insert into test.countab(date,ip,num) values(‘$yesterday’,’$ip’,’$num’)” $mysql -e $sql

  1. 1. done<br />rm -rf $tempfile<br />sql="select * from test.countab"<br />$mysql -e $sql
  2. 1. date -s "2014/12/17" -----> 修改系统时间
  3. 1. tree deng/ ---> 查看目录的树状结构.
  4. 15. 常用命令积累:<br />1). dirname -------> 获取文件的目录部分, 如: dirname ./compare.log --> .
  1. dirname /usr/compare.log --> /usr
  1. 15. 2). basename ------> 获取文件的文件名. 如: dirname ./compare.log --> compare.log
  1. dirname /usr/compare.log --> compare.log

```

  1. 3). jobs —————> 查看暂停的命令 , 显示的结果中可以看出优先级 (+)
    4). fg id号 ———-> 可以继续执行任务, 如果不指定ID号, 将执行优先级高的id号.
    5). ctrl + z ———> 暂停执行命令.
    6). 系统变量(均为大写): HOME PATH LANG HOSTNAME
    7). env —————> 可以查看系统内置的变量
    8). set —————-> 可以查看系统和用户设置的所有的变量.
    9). export ————> 将变量声明为全局生效, 如果不这样, 只是在当前的shell中生效.
    10). . = source —-> 刷新当前配置文件, 注意 . 后面是有一个空格的.
    11). /etc/profile /etc/bashrc