Find查找命令的使用:
. 代表当前目录.
1). find . -name “.txt” ———> 在当前目录下找以.txt结尾的文件.
2). find . -name “[a-z]“ ———> 在当前目录下查找以所有子母开头的文件 , 支持简单的正则find . -name "file*" -------> 查找以file开头的文件.find . -name "file[1-6]*" -----> 查找file1-file6的文件, 支持简单正则.
3). find /etc -name “host*” ——-> 在/etc目录下查找以host开头的文件.
4). find . -perm 755 —————-> 在当前目录下查找权限为755的文件, perm代表的事permission.
5). find -user root ——————-> 在当前目录下查找属主为root的文件.find -user user1 -----------> 查找user1用户创建的文件.
6). find / -perm 755 | find -type f ————> 从根目录查找权限为755的文件, 在查找其中文件类型的文件.
-type : 代表的是指定文件的类型.
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后的命令操作.xargs ----> 可以将前面的结果提供给后面的命令操作.
14). find . -type f|xargs ls -l ———> 查找出文件并查看详细信息.
其他命令:
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的启动级别:init 0 : 关机init 1 : 单用户形式,只root进行维护init 2 : 多用户,不能使用net file systeminit 3 : 完全多用户 , 字符界面init 4 : 安全模式 , 未被使用init 5 : 图形化init 6 : 重启.
4). linux 是多用户系统,多个用户可以同时登陆系统, 而windows是单用户登陆系统,另一用户
要想使用,必须先注销该系统.
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 这台机器.-----> 也可以给当前的本机执行该命令. 则ssh 本机地址(192.168.1.100)就不需要密码了.
grep命令及linux中的正则:
find 用来将文件查找出来, 而 grep是用来检索文件中的内容的.
1). grep ‘linux’ file —-> 查找file文件中含有’linux’的行, 只要该行中含有’linux’字样就可以,不管位置, 但是严格区分大小写
2). grep ‘linux’
find . -name f*——> 也可以通过命令找到文件, 通过``来解析命令.
3). 常用正则表达式:1. ^linux : 以linux开头的行2. php$ : 以php结尾的行3. . : 匹配任意的单个字符4. .+ : 匹配任意多个字符,不包含0个5. .* : 匹配0个或者多个字符6. [0-9a-z]: 匹配[]内任意一个字符7. (linux)+: 出现多次linux单词8. (web){2}: web出现了2次以上(web){2,4}: web出现2-4次9. \ : 转义字符,只用来屏蔽一个元字符的特殊含义 : * , . , ? 都是有特殊含义的字符.10. ? : 匹配0个或一个前面的字符.-- grep -E --color 'ro?t' 1.log -----> 匹配'rt', 或'rot'11. grep -E = egrep
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’的行-E 表示增强, 个人理解为可以匹配正则, Regex.
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行也罗列出来.-A5 : 标示After 5 , 后面的5行也出来了.
22). grep -B5 -n ‘root’ 1.txt ————> 将查找的’root’所在的行, 以及之前的5行也罗列出来.
-B5 :标示Before 5 , 前面的5行也显示出来.
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)Awk 编程工具使用:
AWK模式:1). /正则表达式/:使用通配符的扩展集。2). 关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。3). 模式匹配表达式:用运算符~(匹配)和~!(不匹配)。4). BEGIN语句块、pattern语句块、END语句块:
AWK内置变量:
ARGC 命令行参数个数ARGV 命令行参数排列ENVIRON 支持队列中系统环境变量的使用FILENAME awk浏览的文件名FNR 浏览文件的记录数FS 设置输入域分隔符,等价于命令行 -F选项NF 浏览记录的域的个数NR 已读的记录数OFS 输出域分隔符ORS 输出记录分隔符RS 控制记录分隔符
AWK操作:
0). cat /etc/passwd |cut -d:-f4 ————> 以:分割文件的行, 并取出passwd文件的第四列.
cat /etc/passwd |cut -d:-f 1,2,3 ——> 取1,2,3列.cat /etc/passwd |cut -c 2,3 --------> 去2,3号位置的字符.
1). awk ‘{print $0}’ file ——————-> 查找出file文件中的每一列/整行. linux中的索引是从1开始, $0表示所有的列.
1.1) cat /etc/passwd | head -5 |awk -F: '{print $1,$3}' -----> 以:分割,取出第一列,第三列.1.2) awk -F ':' {print $2} 1.log ----------> -F 表示以什么分割.1.3) awk -F ':' '$1~/root/ {OFS="#";print $1,$2}' 1.txt ----------> 以:分割内容, 查找第一列匹配root(包含)的内容,然后输出内容, 并以#分割.1.4) awk -F ':' '$1=="root" {OFS="#";print $1,$2}' 1.txt ----------> 以:分割内容, 查找第一列精准匹配root(等于)的内容,然后输出内容, 并以#分割.1.5) awk -F ':' '$1="root" || NR>30 {OFS="#";print $1,$2}' 1.txt ----------> 以:分割内容, 查找第一列等于root或行数大于30的行的指定列的内容,然后输出内容, 并以#分割.1.6) awk -F ':' '$1="root" {OFS="#";print $1,$2}' 1.txt -----------> 将第一列赋值为root.
2). awk ‘{print $1 “\t” $7}’ file ———-> 查找出file文件中的第1列和第7列
3). cat file|awk ‘$0 !~/192.168.10.2/‘|grep “php”|wc -l ———-> 为不匹配.$0 !~/192.168.10.2/ ----> 表示匹配关系, !~表示不匹配.
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的时间函数:mktime( YYYY MM dd HH MM ss[ DST]) : 生成时间格式 , 生成的时间都是时间戳strftime([format [, timestamp]]) : 格式化时间输出,将时间戳转为时间字符串 具体格式,见下表.systime() : 得到时间戳,返回从1970年1月1日开始到当前时间(不计闰年)的整秒数%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)%% 百分号(%)
eg: 1). awk ‘BEGIN{tstamp=mktime(“2015 01 01 12 12 12”);print strftime(“%c”,tstamp);}’ —-> 以本地的日期和时间格式化
------> 结果: 2001年01月01日 星期一 12时12分12秒2). awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=mktime("2001 02 01 0 0 0");print tstamp2-tstamp1;}'------> 结果: 26344683). awk 'BEGIN{tstamp1=mktime("2001 01 01 12 12 12");tstamp2=systime();print tstamp2-tstamp1;}'------> 结果: 308201392
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);}’
------> 结果: 124.11,18446744073709551615,1.2,7C,174
4. 16). 字符串函数:
①. index(str1,str2) ——————-> 在str1中查找str2元素所在的位置.
eg : awk ‘BEGIN{info=”this is a test2010test!”;print index(info,”test”)?”ok”:”no found”;}’ ——> “ok”
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”
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 ————————-> 字符串中的每个小写字符变为大写.
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是数组的长度
5. Sed 行定位的使用:<br />1). sed -n '2'p file ------------> 只打印第二行,不打印其他的行.
p—-> 表示打印print.
5. 2). sed -n '1,4'p file -----------> 从第一行到第四行的记录.<br />3). sed '1,4'd file --------------> 除了第一行到第四行的记录.
d—-> 表示临时删除delete,不显示.
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 可以转移特殊符号, 如 * , ? , |
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的行。
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标志一起使用表示只打印那些发生替换的行。
也就是说,如果某一行开头的test被替换成mytest,就打印它。
c. sed ‘s/^192.168.0.1/&localhost/‘ example——- &符号表示替换字符串中被找到的部份。
所有以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命令的都被认为是新的分隔符,所以,“#”在这里是分隔符,代替了默认的“/”分隔符。
表示把所有10替换成100。
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替换。
5. 12).多点编辑:e命令
a. sed -e ‘1,5d’ -e ‘s/test/check/‘ example——-(-e)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除1至5行,第二条命令用check替换test。
命令的执 行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。
b. sed —expression=’s/test/check/‘ —expression=’/love/d’ example——-一个比-e更好的命令是—expression。它能给sed表达式赋值。
5. 13). 从文件读入:r命令
a. sed ‘/test/r file’ example——-file里的内容被读进来,显示在与test匹配的行后面,如果匹配多行,则file的内容将显示在所有匹配行的下面。
5. 14). 写入文件:w命令
a. sed -n ‘/test/w file’ example——-在example中所有包含test的行都被写入file里。
5. 15). 追加命令:a命令
a. sed ‘/^test/a\—->this is a example’ example<——-‘this is a example’被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
5. 16). 插入:i命令
a. sed ‘/test/i\ new line ————————————-‘ example 如果test被匹配,则把反斜杠后面的文本插入到匹配行的前面。
5. 17). 下一个:n命令
a. sed ‘/test/{ n; s/aa/bb/; }’ example——-如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续。
5. 18).变形:y命令
b. sed ‘1,10y/abcde/ABCDE/‘ example——-把1—10行内所有abcde转变为大写,注意,正则表达式元字符不能使用这个命令。
5. 19). 退出:q命令
a. sed ‘10q’ example——-打印完第10行后,退出sed。
5. 20). 保持和获取:h命令和G命令
a. sed -e ‘/test/h’ -e ‘$G example——-在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。
5. 21). 保持和互换:h命令和x命令
a. sed -e ‘/test/h’ -e ‘/check/x’ example ——-互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。
5. 21). 脚本
Sed脚本是一个sed的命令清单,启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔,在命令的末尾不能有任何空白或文本,如果在一行中有多个命令,要用分号分隔。以#开头的行为注释行,且不能跨行。
6. uniq行定位的使用:<br />1). uniq -c file ------------------> 打印紧挨的重复行出现的次数 , 去重求唯一.
uniq file —————————> 去除紧挨的重复的行.
6. 2). uniq -d file -------------------> 只打印重复的行;<br />3). awk '{print $1}' /var/log/httpd/access_log | sort | uniq -c
————> 把apache网站的所有访问的ip全部统计出来, 并打印出统计次数.
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
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 -nr7. split 文件切割的使用:<br />1). split -2 file spt ----------------> 生成sptab , sptac ... sptaa 等多个文件.
把file文件每两行分割成一个文件,每个文件的前缀都是以spt开头的.
-2 ——> 表示分割的单位,每两行成一个文件.
spt——> 是分割后文件名的前缀.
8. 2). split -b 1M file ----------------> 将file文件进行切割, 每个文件为1M.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开头的服务
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服务的初始化开启情况.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
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下.
10. 4). 特别注意服务脚本中的信息:
解析:
chkconfig: 2345 90 10
----------> 2345 代表这四种初始化级别.----------> 90 代表linux启动的优先级,尽量靠后,----------> 10 代表linux关闭时,停止进程的顺序, 尽量靠前.
description: mytest script 0204.sh runing/stoping…………
-----------> 描述信息.
10. 5). 如果需要自定义服务脚本, 需要加上 上面两句代码 . 并将脚本放在 /etc/rc.d/init.d 目录下.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 />############################################- <br />1. add a user- <br />1. set password for user- <br />1. delete a user- <br />1. print disk space- <br />1. print mem space- <br />1. quit- <br />1. back to main menu<br />############################################<br />$url $time<br />############################################<br />eof ----------------------> 结束标示符 , 必须顶格对其, 而且后面没有空格及其他字符.<br />}---------------------- 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
if [[ $? = 0 ]]; thenecho -e "\033[32;40m${username} created usccessfully!!!\033[0m"elseecho -e "\033[31;40m${username} created failly!!!\033[0m"fi;;2 )read -p "please input your set password username : " name# passwd $nameread -p "please input your new password : " passecho $pass | passwd --stdin $name &>/etc/nullif [[ $? = 0 ]]; thenecho -e "\033[32;40m ${name} password setted successfully!!!\033[0m"elseecho -e "\033[31;40m${name} password setted failly !!!!\033[0m"fi;;3 )read -p "please input your delete username : " useruserdel $user &>/etc/nullif [[ $? = 0 ]]; thenecho -e "\033[32;40m ${user} delete successfully!!!\033[0m"elseecho -e "\033[31;40m${user} delete failly !!!!\033[0m"fi;;4 )disk=`df -Th`echo -e "\033[30;47m$disk\033[0m";;5 )str=`free -m`echo -e "\033[30;47m$str\033[0m";;6 )read -p "are you sure to quit ?(y/n) :" responsecase $response iny)echo -e "\033[32;40mQuit successfully!!!!\033[0m"break;;*)continue;;esac;;7)clearmenu;;
esac
done12 . 制作字符菜单详情解析:
1). shell函数的定义:
function menu(){......}
2). shell函数的调用:
直接在脚本中写函数名就可以.menu
3). cat命令的heredoc的使用:
a. cat file ----> 查看文件.b. cat << eof..........eof-----> 保证其中的内容保持原格式输出.-----> 其中也可以引用变量.-----> 其中也可以执行命令 `` ;
4). 字符界面下的字符的颜色的控制:
echo -e "\033[31;40m .... \033[0m"
5). shell引入文件.
. file.sh ----> 在当前脚本中包含file.sh文件.menu ----------> 并执行file.sh中的menu函数.
6). while 写一个死循环:
while truedo......done
13. shell操作mysql数据库<br />1). /usr/local/mysql/bin/mysql -uroot -p2143" -e "show databases"
————> -e 后面直接跟sql语句, 必须使用双引号.
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”
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”
14. 日志切割1. date +%Y%m%d ---------> 201504061. date -d yesterday +%Y%m%d -------> 返回昨天的时间(20150405)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 , 并不是重启.1. 将脚本加入到任务计划中:<br />crontab -l -----> 查看任务计划.<br />vi crontab ------> 编辑任务计划. 时间 : 分时日月周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. done<br />rm -rf $tempfile<br />sql="select * from test.countab"<br />$mysql -e $sql1. date -s "2014/12/17" -----> 修改系统时间1. tree deng/ ---> 查看目录的树状结构.15. 常用命令积累:<br />1). dirname -------> 获取文件的目录部分, 如: dirname ./compare.log --> .
dirname /usr/compare.log --> /usr
15. 2). basename ------> 获取文件的文件名. 如: dirname ./compare.log --> compare.log
dirname /usr/compare.log --> compare.log
```
- 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
