图片:松金洋子
ls wc -l grep -l -h -p 都可以针对当前目录下的子目录执行,比如用 *。
------------------
-本身命令可以执行,crontab里面不行,查看当前shell类型,设置/etc/profile(配置jdk、resin设置的环境变量)或者这个用户的/home/username/.bash_profile,export 环境变量。
--------------
chkconfig [--level levels] name :设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,4,5运行级停止nfs服务,则命令如下:
chkconfig --level 345 nfs off
chkconfig --level 345 vsftpd on //kaige
-----------------------------
¥linux忘记root密码,重启系统,在启动出来“red hat Linux”的时候(这个时候系统读秒),按e,出现boot和kernel(还有项,共三项)的时候,选中kernel,按e,在新出来的界面,按空格,然后出入single,回车,进入单用户模式,重新设置password。
-----------------------
¥excel转置:复制,邮件,选择性粘贴,转置,确定,ok! //2011-10-19
-----
exp username/passwd file=/path/dbback.dmp owner=username
数据库实例、全局数据库名字、不同的用户。
可以创建一个数据库实例,一个项目建一个用户,这样可以建表、备份数据库。
exp expdp imp impdp *dp在oracle10g开始出现。
-------------------------------------------------------------------------------------------\
//设置Linux服务器禁ping!!!
终端命令行直接输入
echo 1 >/proc/sys/net/ipv4/icmp_echo_ignore_all
这个是关闭ping的命令.
如果你想要重新开启 让服务器接收ping的请求 运行一下命令:
echo 0 >/proc/sys/net/ipv4/icmp_echo_ignore_all
">"的使用,前面有空格,后面不带空格。
-------------------------------------------------------------------------------------------
linux32 --help | tr '[A-Z]' '[a-z]' //大写转换成小写
各主要操作系统下缺省的shell:
AIX 下是Korn Shell. Solaris缺省的是Bourne shell. FreeBSD缺省的是C shell HP-UX缺省的是POSIX shell. Linux是Bourne Again shell.
-------------------------------------------------------------------------------------------
4.:(){ :|:& };: 著名的 fork 炸弹,此命令将告诉你的系统执行海量的进程,直到你的系统僵死。
-------------------------------------------------------------------------------------------
鸟 数字1/数字2 最大各8位,可能有小数
[root@testcms test]# cat niao.txt |egrep "[0-9]{1,8}/[0-9]{1,8}"
12321/213123
[root@testcms test]#
# egrep "[0-9]{1,8}/[0-9]{1,8}" niao.txt
12321/213123
12321.121/213123.213
12321.32/213123
12321/213123.32
12321/21312311111
为什么我把小数点也给匹配到了
而且最后一行第二部分都超过8位了
//问题是匹配是匹配到了,但是没限定长度、额外的东西(比如.)//门头沟-胖子
[root@testcms test]# egrep "^[0-9]{1,8}/[0-9]{1,8}$" niao.txt
12321/213123
[root@testcms test]# //给鸟用的是^[0-9]{1,8}\.[0-9]+$这个。
-------------------------------------------------------------------------------------------\
exp file=bak.dmp log=bak.log buffer=10240
oracle 备份的关键。
-------------------------------------------------------------------------------------------\
凯哥也遇到过这样的问题。。。当时很无解。。。也没解决。。。
crontab中的%问题 2011-01-30 10:33:11| 分类: 小伍的linux之路 | 标签: |字号大中小 订阅 .
1、在服务器上用mysqldum备份mysql的数据,想做个定时任务每天备份一次,命令很简单不加定时任务的时候是可以执行的
mysqldump -uroot --all-database --single-transaction > /opt/authbak/`date +%Y%m%d`-all.sql
2、但是把这个命令加在定时任务里不知怎么回事就是不执行,查看日志好像也没报什么错,谷歌上查了好多文章大部分都说是环境变量的问题,但是我这个应该不是变量的问题,最后经过好多次的谷歌看到下面一篇帖子才找到原因
crontab文件中的神秘符号“%”
可能会遇到的一个问题是,在第六段中需要使用date生成日志文件名,比如:
0 4 * * * /opt/cron/mysql_dump.sh > /srv/logs/`date +%y-%m-%d`.dump.log
这时会发现crontab怎么也不运行这个mysql_dump.sh,也看不到有日志生成。这是因为在crontab文件中,”%”是有特殊含义的。假如不需要“%”的特殊作用,需要使用转义符转义。上面应该写成:
0 4 * * * /opt/cron/mysql_dump.sh > /srv/logs/`date +\%y-\%m-\%d`.dump.log
-------------------------------------------------------------------------------------------
Shell的RANDOM变量 2011-01-17 11:24:42| 分类: shell | 标签: |字号大中小 订阅 .
1、利用RANDOM取随机数
shell有一个环境变量RANDOM,范围是0--32767
如果我们想要产生0-25范围内的数:$(($RANDOM%26)) 在$(()) 是可以省略取值的$符号的。(All tokens in the expression undergo parameter expansion, string expansion, command substitu-tion, and quote removal.)
用这个环境变量对26取模即可。
如果想得到1--68范围内的数 : $(($RANDOM%68+1 ))
如果想得到6--87范围内的数 : $(($RANDOM%82+6 ))
2、Awk传递变量
awk 'BEGIN{srand();print rand()}'
-------------------------------------------------------------------------------------------
i=$((${i} + 1)) cat `ls -l |grep ^-` //这样才行。。。cat `ls ./` cat 多个文件
2011-9-2
linux下,除了nagios、cacti
1330161222 81329154
shell终端下:
ctrl + a 将光标移动到命令行开头相当于VIM里shift+^
ctrl + e 将光标移动到命令行结尾处相当于VIM里shift+$
for i in `seq 504` ; do echo -n " $i" ;done
行末加504个空格。//for(i=0;i<=504;i++);do;echo -n " $i";done
数组定义:a=(1 2 3 4 5) a[2]=3,用小括号定义shell数组,其中a=(1 2 3 4 5)可以用a=(`seq -s " " 5`)来代替。注:a=`seq -s " " 5`这样不加小括号的话,a就是一个常量,不再是数组。就对数组全体赋值,最好小括号!!!
sed 's/;[^;]*$/00&/' file
北京-深度蓝色() 15:35:18
关键是要理解那个&的意思
北京-深度蓝色() 15:35:39
&的意思就是把前面匹配到的串接到00后面
echo 111 222|while read number file;do echo $number $file;done
-bash-3.2$ awk 'a[$1]++' yuanwenjian
四大皆 jkdj12
李云峰 2j3k
李云峰 dsjkf
四大皆 jdskf32
四大皆 j2i3kj
-bash-3.2$ 为什么可以我也不太清楚。。。不对 少几个
awk 'NR==FNR{a[$1]++}NR>FNR&&a[$1]>1' ccc ccc |sort //文件处理了两轮。
----------------------------------------------------------------------------------------
脚本区
#!/bin/sh
mkdir $1
echo "make directory " $1 "successed!"
#$1为输入的(人输)第一个参数。
----------已测试,可以。//sh bianliang.sh bian1
#!/bin/bash
mkdir $1
echo "yi chuang jian $1"
a=`pwd`
b=`ls`
echo "$a"
echo "$b"
~
---------注意a、b的赋值方式。2011-9-5
:wq-------------------------------------------------------------------------------------------
tips 4
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
2011-8-23 author yk keywork sort log
[
网站日志分析篇1(Apache):
1.获得访问前10位的ip地址
cat access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -10
cat access.log|awk '{counts[$(11)]+=1}; END {for(url in counts) print counts[url], url}'
关于sort命令的一些常用:
sort -t: -k3 -n /etc/passwd
说明:该命令作用是根据passwd的第3列,uid进行排序
参数:
-t表示分割符,以:分割,默认情况下以空格分割
-k作用是根据某个列来排序,这里根据第3列,默认是第1列(从1开始)。
-n按照数字方式排序。不加-n参数时排序结果根据最左面的数字开始,等同于字母的比较方式。
补充,当需要比较多列时候,可再加上-k
sort -t: -k3 -k4 -n /etc/passwd
uniq -u -d -c
-f 2 //忽略前两个field
-s 3 //忽略前三个字符串
先根据第3列排序,相等再根据第4列排序。
××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
1.^(abcd|efgh)$ 匹配abcd和efgh这个两个字符串
2.^.*addr:
ifconfig eth0 | grep "inet addr:" | sed -e "s/^.*inet\ addr://g" -e "s/Bcast.*$//g"
3.\ 匹配结束有yangkai的 \ 仅匹配yangkai这个单词。
4.sed 's///g' substitutions glabol replace whole
sed yk.xml -e 's/Name/yangkai/g' -e 's/Parent/FEIFEI/g'
== sed yk.xml 's/Name/yangkai/g' ; 's/Parent/FEIFEI/g' this is not all can use
sed yk.xml '/kaishi/,/jieshu/ s/Name/yangkai/g' substitutions between kaishi and jieshu
6.head -n 11 yk.xml == sed 11q yk.xml
7.[root@testcms ~]# echo abc | sed 's/b*/1/'
1abc
[root@testcms ~]#
[root@wdredhat16 ~]# echo abc | sed 's/b*/1/g'
1a1c1
[root@wdredhat16 ~]#
*,通配符与正则表达式的含义是不同的。
8.line string record field ziduan
9.delimiter [di:'limit@] n 定界符 character extended regular expression
思维敏捷
10.redhat no found iptables this file ,so can't service iptables start.向勇删掉了。。。
11.awk -F : '{print $1,$6}' /etc/passwd
awk 'FN > 0 {print $0}' delete kong line awk print $0 -> print whole line
awk print 会自动提供换行符的,\n 。\r是回车。
cat file3 | awk 'BEGIN{sum=0}{sum=sum+$0}END{print sum}'
awk 'BEGIN{sum=0}
{sum=sum+$0}
END{print sum}'
------------------------------------------------------------------------------------------
小凡(395804072) 15:39:14
原先的文件:
1314145
1314145|4
1314145|5
要处理成的格式:
1314145|4|5
小凡(395804072) 15:39:24
大家有会写这个awk语句的吗?
北京-无名(97132323) 15:46:40
awk -F"|" 'NF>1{a[$1]=a[$1]"|"$2}END{for(i in a)print i""a[i]}'
niu bi!!! 2011-9-14
************************************************************************************
查找30分钟前的文件,并移走。chinaUnix
touch -t `date -d "-30 min" "+%m%d%H%M"` ChinaUnix
find . -type f -newer ChinaUnix -exec echo mv {} /tmp \; | sh
ifconfig eth0 | grep "inet addr:" | sed -e 's/.*inet\ addr://g' -e 's/Bcast.*$//g'
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8093 -j ACCEPT
PORT 模式成功, 请更新你的站点配置文件。
防火墙缺端口,59504 估计随机的。
************************************************************************************
apache 查看图片,没有权限,NOT permission,增加执行权限。
^[ \t]*\n
^[ ]
grep "吃草" $(ls | grep bms )
可查到xml文件信息
************************************************************************************************************************************************************************
find /ftprootpath/mediasource -maxdepth 2 -type d -name "201105[0-1]*" -exec echo rm -rfvd {} \; | sh
管用的,手机ftp清理。
find /ftprootpath/mediasource -maxdepth 2 -type d -name "201105[0-1]*" |xargs rm -rfvd
********************************************************************************************
chkconfig:
chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。
语法:
chkconfig --list [name]
chkconfig --add name
chkconfig --del name
chkconfig [--level levels] name
chkconfig [--level levels] name
chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。
--level选项可以指定要查看的运行级而不一定是当前运行级。
需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。
chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
chkconfig [--level levels] name :设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,4,5运行级停止nfs服务,则命令如下:
chkconfig --level 345 nfs off
运行级文件:
每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。
例如,random.init包含三行:
# chkconfig: 2345 20 80
# description: Saves and restores system entropy pool for \
# higher quality random number generation.
附加介绍一下Linux系统的运行级的概念:
Linux中有多种运行级,常见的就是多用户的2,3,4,5 ,很多人知道5是运行X-Windows的级别,而0就是关机了。运行级的改变可以通过init命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用init1来切换。在Linux的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K和S开头的文件,按后面的数字顺序,执行这些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux提供了chkconfig命令用来更新和查询不同运行级上的系统服务****************************************************************************
************************************************************************************************************************************************************************
1.service crontab status
2.crontab -l //显示列表
3.crontab -e // 编辑命令 直接简单编辑/etc/crontab不行。
4.*/1 * * * * /home/yangkai/cccrontab.sh
************************************************************************************************************************************************************************
cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业。由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
你也可以将这个服务在系统启动的时候自动启动:
在/etc/rc.d/rc.local这个脚本的末尾加上:
/sbin/service crond start
现在Cron这个服务已经在进程里面了,我们就可以用这个服务了,Cron服务提供以下几种接口供大家使用:
1、直接用crontab命令编辑
cron服务提供crontab命令来设定cron服务的,以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l
再例如,root想删除fred的cron设置:crontab -u fred -r
在编辑cron服务时,编辑的内容有一些格式和约定,输入:crontab -u root -e
进入vi编辑模式,编辑的内容一定要符合下面的格式:*/1 * * * * ls >> /tmp/ls.txt
每次编辑完某个用户的cron设置后,cron自动在/var/spool/cron下生成一个与此用户同名的文件,此用户的cron信息都记录在这个文件中,这个文件是不可以直接编辑的,只可以用crontab -e 来编辑。cron启动后每过一份钟读一次这个文件,检查是否要执行里面的命令。因此此文件修改后不需要重新启动cron服务。
方法二:
编辑/etc/crontab 文件配置cron
cron服务每分钟不仅要读一次/var/spool/cron内的所有文件,还需要读一次/etc/crontab,因此我们配置这个文件也能运用 cron服务做一些事情。用crontab配置是针对某个用户的,而编辑/etc/crontab是针对系统的任务。此文件的文件格式是:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=/ //使用者运行的路径,这里是根目录
# run-parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每星期执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月去执行/etc/cron.monthly内的脚本
大家注意"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是文件夹名了。
--------------------------------------
-------------------------------------------------------------------------------------------
为何2>&1要写在后面?
command > file 2>&1
首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出的行为,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。
command 2>&1 >file
2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是在终端。>file 后输出才被重定向到file,但标准错误仍然保持在终端。
-------------------------------------------------------------------------------------------
-bash-3.2$ cd /home/oracle/ >file
-bash: cd: /home/oracle/: Permission denied
-bash-3.2$ ls
file
-bash-3.2$ cat file
-bash-3.2$ cd /home/oracle/ >file1 2>&1
-bash-3.2$ cat file1
-bash: cd: /home/oracle/: Permission denied
-bash-3.2$ cd /home/oracle/ 2>&1 >file2
-bash: cd: /home/oracle/: Permission denied
-bash-3.2$
-------------------
-bash-3.2$ cat test.sh
#!/bin/bash
date +%F
yangkai
exit 0
-bash-3.2$
-bash-3.2$ sh test.sh
2011-12-26
test.sh: line 3: yangkai: command not found
-bash-3.2$ sh test.sh >chu1
test.sh: line 3: yangkai: command not found
-bash-3.2$ cat chu1
2011-12-26
-bash-3.2$ sh test.sh >chu1
test.sh: line 3: yangkai: command not found
-bash-3.2$ cat chu1
2011-12-26
-bash-3.2$ sh test.sh >>chu1
test.sh: line 3: yangkai: command not found
-bash-3.2$ cat chu1
2011-12-26
2011-12-26
-bash-3.2$ sh test.sh >>chu1 2>&1
-bash-3.2$ cat chu1
2011-12-26
2011-12-26
2011-12-26
test.sh: line 3: yangkai: command not found
-bash-3.2$ sh test.sh 2>&1 >>chu1
test.sh: line 3: yangkai: command not found
-bash-3.2$ cat chu1
2011-12-26
2011-12-26
2011-12-26
test.sh: line 3: yangkai: command not found
2011-12-26
-bash-3.2$ sh test.sh>>chu1
test.sh: line 3: yangkai: command not found
-bash-3.2$ cat chu1
2011-12-26
2011-12-26
2011-12-26
test.sh: line 3: yangkai: command not found
2011-12-26
2011-12-26
-bash-3.2$ sh test.sh 1>>chu1
test.sh: line 3: yangkai: command not found
-bash-3.2$ cat chu1
2011-12-26
2011-12-26
2011-12-26
test.sh: line 3: yangkai: command not found
2011-12-26
2011-12-26
2011-12-26
-bash-3.2$ sh test.sh 2>>chu1
2011-12-26
-bash-3.2$ cat chu1
2011-12-26
2011-12-26
2011-12-26
test.sh: line 3: yangkai: command not found
2011-12-26
2011-12-26
2011-12-26
test.sh: line 3: yangkai: command not found
-bash-3.2$
-------------------------------------------------------------------------------------------
wuming
du -sm /ftp/0001/ | awk '{if($1>5)print "cp -r /tmp/* /boot/"}' | sh
问题:用awk实现,/boot目录容量达到5M,就把/tmp下的所有文件拷到/boot文件。
//凯哥:注意print后面双引号,在双引号内部的都是常量,特殊字符失去其含义,比如空格等。
find . -name "*.js" -exec mv {} {}0803 \;
find ./ -name "*.js"|xargs -I {} mv {} {}0803
find /path -type d | awk '{printf $1"\t";system("ls "$1" | grep -v ^d|wc -l")}'
输出各个目录下的文件数量。
OSI是Open System Interconnect的缩写,意为开放式系统互联。国际标准组织(国际标准化组织)制定了OSI模型。这个模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层
while [ "$yn" != "yes" -a "$yn" != "YES" ]
-a是与 -o是或‘
-a and -o or
*******************************************************************************************
for ((i=1;i<5;i++));do echo $i;done
style
*******************************************************************************************
-bash-3.2$ echo aaa
aaa
-bash-3.2$
*******************************************************************************************
-bash-3.2$ cat iiif.sh
#!/bin/bash
# yangkai lurubijiao
set -x
read -p "input a number "a" " a
read -p "input a number "b" " b
if [ "$a" -gt "$b" ];then
#if [ ! "$a" -gt "$b" ];then
echo "$a is great $b";
else
echo "$a is limit than $b";
fi
*******************************************************************************************
-bash-3.2$ cat while1
#!/bin/bash
read -p "input a number: " num1
while [ "$num1" -lt 521 ]
do
echo "$num1 is limit than 521"
num1=$(($num1 + 100))
done
*******************************************************************************************
num1=$(($num1 + 100)) 网中人,(())数值计算,expr expr 1 + 3
duan=`netstat -ntl | grep 80`
for var in
do
done
//
while test
do
done
if test ;then
fi
for((i=1;i<=100;i++))
do
done
*******************************************************************************************
严格按照格式:-bash-3.2$ awk -F ":" -v 'OFS=|/' '{print $1, $3 ,$5}' /etc/passwd
nfsnobody|/65534|/Anonymous NFS User
xueping|/511|/
uniq -d duplicate 复制品(只能处理相邻的重复的行,得跟sort配合一起用。) sort
严格按照格式:-bash-3.2$ awk 'BEGIN{FS = ":" ; OFS = "//"}{print $1,$5}' /etc/passwd
-bash-3.2$ awk -F ":" 'BEGIN{OFS = "//"}{print $1,$5}' /etc/passwd
//-F 后面可以为文件里面的任意实际分隔符。
-bash-3.2$ echo "a_b_c_d_e" |awk -F "_" -v "OFS=@@@" '{print $1,$2,$3,$4,$5}'
nfsnobody//Anonymous NFS User
xueping//
*******************************************************************************************
*******************************************************************************************
*******************************************************************************************
*******************************************************************************************
crontab中无法执行
*/2 * * * * echo "$(date +%Y%m%d--%H%M%S)" >>/home/kaige/shijiancrontab
写在文件里面 通过shell执行就可以。
北京() 11:17:03
awk -F"\t" -vOFS="|" 'NF+=0'
IFS(Internal Field Seperator)内部字段分隔符
awk '{wc -l}'
NUM1=wc -l /filename
if [NUM1 -gt 10000] ; then
NUM2=NUM1-10000
sed -i '1,{NUM2}d' /filename
fi
通过ssh工具,rz,sz上传、下载文件。
2011-7-28 319 适配魔屏
800
1024
1280
高无所谓。
适合,再弄一个资讯的,上面不带“更多”的。
连续剧问题
资讯,子页面展现变形。
-bash-3.2$ echo -e "\n"{1..9}
1
2
3
4
5
6
7
8
9
默认分割符为空格。
{} 规定变量范围。
17.5 expr用法
expr命令一般用于整数值,但也可用于字符串。一般格式为:
expr argument operator argument
expr也是一个手工命令行计数器。
# expr 10 + 10
20
# expr 1500 + 900
2500
# expr 30 / 3
10
# expr 30 / 3 / 2
5
(注意运算符左右都有空格)
使用乘号时,必须用反斜线屏蔽其特定含义。因为shell可能会误解显示星号的意义。
# expr 30 * 3
90
17.5.1 增量计数
expr在循环中用于增量计算。首先,循环初始化为0,然后循环值加1,反引号的用法意
即替代命令。最基本的一种是从(expr)命令接受输出并将之放入循环变量。
# LOOP=0
# LOOP=`expr $LOOP + 1`
*******************************************************************************************
$() ${} 命令替换与变量替换。其实我觉得有的时候命令和变量是差不多的。。。
$() 支持N层命令替换,但是有的shell可能不支持,影响shell script的移植性,``多层的时候,里面的`需要转移,如:`\`\`` 。但是移植性好。
a=(1 3 2 5 6 9 8) a为数组, echo ${a[1]} ==3 shell arry begin 0
[root@testcms sh]# cat wumingawk | awk '{if($2<9)sum1+=$1;if($2<19&&$2>10)sum2+=$1}END{print sum1 "\t" sum2}'
197 51
源文件
75 00
18 01
15 02
53 03
36 04
39 25
51 26
29 37
10 39
11 10
25 11
26 12
输入数据如上所示,现在有这样的需求:
第二列在00-09的,把对应的第一列相加;第二列在10-19的,把对应的第一列相加…以此类推,到50-59为止
awk '{a[int($2/10)]+=$1}END{for(i in a)print i,a[i]}' wuming
*************************************************************************************
1 2 3 4
5 6 7 8
awk '{for(i=1;i<=NF;i++){a[FNR,i]=$i}}END{for(i=1;i<=NF;i++){for(j=1;j<=FNR;j++){printf a[j,i]" "}print ""}}' file
//FNR=2 NF=4
1 5
2 6
3 7
4 8
*************************************************************************************
awk '{for(d=1;d<=2;d++){for(i=1;i<=NF;i++){a[d,i]=$i}}}END{for(i=1;i<=NF;i++){for(j=1;j<=FNR;j++){printf a[j,i]" "}print ""}}'
在最初正确的基础上,修改a[FNR,i]=$i 中的FNR为1或者2,出入的都只有第二列。。。
while [i < FNR];do
i=1
j=$(awk 'END{print FNR}' aa)
if [i < j] ;then
sed -i '${i}iyk' aa
i=i+3
fi
*******************************************************************************************
*******************************************************************************************
ls *.log | xargs grep -l "Normal termination" | awk '{system("mv "$0" ../b")}'
mv -fv $(grep 'Normal termination' $(ls /filename) | sed 's/:.*$//g') /otherfile/
mv -fv $(grep 'Normal termination' $(ls /filename) | sed 's/:.*$//g' |uniq ) /otherfile/
*******************************************************************************************
seq
*******************************************************************************************
seq -f -s -w
-s 修改输出分隔符
-w equal width 设置数字相同的宽度
for example: seq -w -s "/" 3 20
-bash-3.2$ seq -w -s "/" 3 20
03/04/05/06/07/08/09/10/11/12/13/14/15/16/17/18/19/20
-bash-3.2$ echo {3..20} | sed 's/\ /\//g'
3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20
[root@testcms home]# seq 3 20 | awk -v ORS="/" '{print $0 }'
3/4/5/6/7/8/9/10/11/12/13/14/15/16/17/18/19/20/
-bash-3.2$ 可以创建N层目录。
*******************************************************************************************
seq 10 | awk 'i=!i' 只打印奇数行。。。
取出奇数行或者偶数行 seq 10 | sed '0~2d' //== seq 10 |awk 'NR%2!=0'
1
3
5
7
9
seq 10 | sed '1~2d' //== seq 10 |awk 'NR%2==0'
2
4
6
8
10
#seq -f "abc%03g" 10 3表示空格
*******************************************************************************************
awk 'BEGIN{ORS="\ "}{print $0}' filename
1 2
3 4
5 6
变成1 2 3 4 5 6
空格需要转义!!!
/sbin/ifconfig 直接执行ifconfig不行,因为root的path不全。
*******************************************************************************************
[url][/url]访问。但注意的是,在linux里,由于内核的限制,普通用户不能使用1024一下的端口。所以在linux里改成80,用普通用户是启动不了的。
此时,我们需要在linux下使用root用户运行一个命令,使访问80端口的应用转到8080上:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 80802、将WEB应用发布为默认应用程序
*******************************************************************************************
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\} 日期格式dd-mm-yyyy
[0-9]{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\} IP地址格式nnn.nnn.nnn.nnn
[^.*$] 匹配任意行
*******************************************************************************************
[root@testcms sh]# awk -v COLUMN=3 '{sum+=$COLUMN}END{print sum}' fangzhen
17
[root@testcms sh]# awk '{sum=0}{sum=sum+$4}{print sum}' fangzhen
32
33
2
2
3
6
1
[root@testcms sh]# awk '{sum=0}{sum=sum+$4}END{print sum}' fangzhen
1
[root@testcms sh]# awk 'BEGIN{sum=0}{sum=sum+$4}END{print sum}' fangzhen
79
[root@testcms sh]# awk 'BEGIN{sum=sum+$4}END{print sum}' fangzhen
0
[root@testcms sh]# awk '{sum=sum+$4}END{print sum}' fangzhen
79
[root@testcms sh]#
*******************************************************************************************
三约束:时间 成本 质量
新四要素:时间 成本 范围 质量
五过程:启动 规划 执行 监控 收尾
在不同场合下,CRM可能是一个管理学术语,可能是一个软件系统,而通常我们所指的CRM,是指用计算机自动化分析销售、市场营销、客户服务以及应用支持等流程的软件系统。它的目标是缩减销售周期和销售成本、增加收入、寻找扩展业务所需的新的市场和渠道以及提高客户的价值、满意度、赢利性和忠实度。
*******************************************************************************************
.bash_profile和.bashrc的什么区别
--------------------------------------------------------------------------------
作者:KornLee 2005-02-03 15:49:57 来自:Linux先生
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile:每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该
文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该
该文件被读取.
~/.bash_logout:当每次退出系统(退出bash shell)时,执行该文件.
另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是"父子"关系.
~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
通常二者设置大致相同,所以通常前者会调用后者。
*******************************************************************************************
*******************************************************************************************
1、脚本内容,自己创建一个脚本例如:scp.sh,拷贝一下内容
##############################################
expect -c "
set timeout 1200;
spawn /usr/bin/scp -r $1
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"$5\r\";}
}
expect eof;"
#############################################
2、执行命令:“chmod a+x scp.sh” 将scp.sh文件属性修改成可执行
3、远程拷贝运行方式:./scp.sh[空格][文件路径][空格][远端机器IP][空格][文件保存到远端机器的路径][空格][远端机器用户][空格][远端机器密码]
例如:"./scp.sh tt.sh 10.99.0.245 /home/ root 111111"
nginx+lvs+nginx+memcache+msyql
3.开机无法登陆图形界面
此状况大多是由于X-server配置有误,需重新配置。配置文件: /etc/X11/xorg.conf .运行X配置过程:sudo dpkg-reconfigure xserver-xorg
*******************************************************************************************
awk '{print NR,$0}' bijiao
=cat -n bijiao
=nl bijiao
head -n 10 bijao
sed -q 10 bijiao
awk 'NR<11' bijiao
awk '{print $1>"/home/outfile1"}' bijiao
awk '{print $1}' >/home/outfile1
$ awk 'BEGIN{while (getline < "/etc/passwd" > 0) lc++; print lc}'。awk将逐行读取文件/etc/passwd的内容,在到达文件末尾前,计数器lc一直增加,当到末尾时,打印lc的值。注意,如果文件不存在,getline返回-1,如果到达文件的末尾就返回0,如果读到一行,就返回1,所以命令 while (getline < "/etc/passwd")在文件不存在的情况下将陷入无限循环,因为返回-1表示逻辑真。
可以在awk中打开一个管道,且同一时刻只能有一个管道存在。通过close()可关闭管道。如:$ awk '{print $1, $2 | "sort" }' test END {close("sort")}。awd把print语句的输出通过管道作为linux命令sort的输入,END块执行关闭管道操作。
system函数可以在awk中执行linux的命令。如:$ awk 'BEGIN{system("clear")'。
fflush函数用以刷新输出缓冲区,如果没有参数,就刷新标准输出的缓冲区,如果以空字符串为参数,如fflush(""),则刷新所有文件和管道的输出缓冲区
*******************************************************************************************
下面是一个更为有用的脚本showrpm,其功能是打印一些RPM包的统计信息:
#!/bin/sh
# list a content summary of a number of RPM packages
# USAGE: showrpm rpmfile1 rpmfile2 ...
# EXAMPLE: showrpm /cdrom/RedHat/RPMS/*.rpm
for rpmpackage in $*; do
if [ -r "$rpmpackage" ];then
echo "=============== $rpmpackage =============="
rpm -qi -p $rpmpackage
else
echo "ERROR: cannot read file $rpmpackage"
fi
done
这里出现了第二个特殊的变量$*,该变量包含了所有输入的命令行参数值。
如果您运行showrpm openssh.rpm w3m.rpm webgrep.rpm
此时 $* 包含了 3 个字符串,即openssh.rpm, w3m.rpm and webgrep.rpm
*******************************************************************************************
cat是显示文件夹的命令,这个大家都知道,tac是cat的倒写,意思也和它是相反的。cat是从第一行显示到最后一行,而tac是从最后一行显示到第一行,而rev 则是从最后一个字符显示到第一个字符。例如:
cat 显示为:
asdf
sdfa
则tac显示为:
sdfa
asdf
rev显示为:
fdsa
afds
*******************************************************************************************