运维的一些知识

1:统计出现在次数

cat access_20130819.log |awk '{print $1}'|sort|uniq -c

 2:awk中的if

awk '{if ($9 != "200")print $0 }' access_20130819.log |wc -l

3:得到目录下文件大小

du -sh *

 4:查看第n行以后的内容

cat -n customer_report_config.xml|awk '{if ($1 > n)print $0}'

 5:保持程序关机后自动运行   crontab    必须先cd到目录,在sh

if [ `ps aux|grep ContrastBandwidth-0.0.1|grep -v grep|wc -l` -ge "1" ];then echo ok; else cd /home/snp/www/qq/ContrastBandwidth/ && sh run.sh ;fi          

 如果手动可运行crontab不能运行则为环境变量有关

0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

 转自:

2. crontab与环境变量
不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:
1)脚本中涉及文件路径时写全局路径;
2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:
cat start_cbp.sh
#!/bin/sh
source /etc/profile
export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf
/usr/local/jboss-4.0.5/bin/run.sh -c mev &
3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:
0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

3. 其他应该注意的问题
1)新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
2)每条 JOB 执行完毕之后,系统会自动将输出发送邮件给当前系统用户。日积月累,非常的多,甚至会撑爆整个系统。所以每条 JOB 命令后面进行重定向处理是非常必要的: >/dev/null 2>&1 。前提是对 Job 中的命令需要正常输出已经作了一定的处理, 比如追加到某个特定日志文件。
3)当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
4)千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
5)在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’`。

6:shell中的比较

不相等 -ne (not equal)
大于 -gt (greater than)
小于 -lt (less than)
大于或等于 -ge (greater than or equal)
小于或等于 -le (less than or equal)

 7:查看设备的外网ip

curl http://members.3322.org/dyndns/getip

 8:查看操作日志

tail -n 1000 /var/log/secure

 9:windows下写shell,不能进行解决

sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)也可在Linux中转换:
首先要确保文件有可执行权限
#sh>chmod a+x filename
然后修改文件格式
#sh>vi filename
利用如下命令查看文件格式
:set ff 或 :set fileformat
可以看到如下信息
fileformat=dos 或 fileformat=unix
利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix
:wq (存盘退出)
最后再执行文件
#sh>./filename

 10:查看日志(过滤)

tail -f runtime.log |grep 'product'  持续更新包含‘product’的行

 11:查看设备到设备的链路情况(出现***为链路不好,内网设备为***)

traceroute 127.0.0.1

 12:run.sh(如果程序在运行就打出Pid ,)

. /etc/profile
cd /Application/billing/normandy
if ps U bill -Ho cmd | grep normandy.jar | grep -v grep > /dev/null
then
pid1=`ps U bill -Ho pid,cmd | grep normandy.jar | grep -v grep | head -1 |awk '{print $1}'`
echo "normandy.jar is running! main process id = $pid1"
else
if $JAVA_HOME/bin/java -jar normandy.jar ; then
echo normandy.jar complete `date +'%Y-%m-%d %H:%M'`
else
echo normandy.jar failed `date +'%Y-%m-%d %H:%M'`
fi
fi

 13:批量更改文件用户

chown -R fromcf.fromcf transfers/

 14:复制文件目录结构(包含子目录)

find . -type d 当前目录结构

mkdir -p ./transfers/aaa;    当前目录创建目录结构包含子目录

 15:判断文件是否已经更新

find /data/apps/normandy 2>/dev/null -type f -maxdepth 1 -mmin -30 -exec ls -lt {} \; |grep "channelinfo.xml" >/dev/null 2>&1 && echo 0 #判断文件是否30分钟未更新 0已经更新 不输出未更新

 16:后台运行

nohup rm -rf 201310* &

 17:移动文件时因为文件太多出错解决

find . -type f -exec mv "{}" ../back20131122/ \;

 18:关闭iptables

service iptables status 查看iptables状态
service iptables restart iptables服务重启
service iptables stop iptables服务禁用 

 19:同步文件脚本(同步完成后会删除文件)

#!/bin/bash
ls /proclog/transfers/FCBill_1/ >/data/list
for i in `cat /data/list`
do
rsync -av /proclog/transfers/FCBill_1/$i 目录ip::idc
rm -rf /proclog/transfers/FCBill_1/$i
done
rsync -av apache-tomcat-6.0.26 172.16.31.212:/data/apps/

scp:

(1)将本地文件拷贝到远程:scp 文件名 用户名@计算机IP或者计算机名称:远程路径
(2)从远程将文件拷回本地:scp 用户名@计算机IP或者计算机名称:文件名 本地路径
(3)将本地目录拷贝到远程:scp -r 目录名 用户名@计算机IP或者计算机名称:远程路径
(4)从远程将目录拷回本地:scp -r 用户名@计算机IP或者计算机名称:目录名 本地路径

20:ftp(批量)

1: ftp -i 223.202.44.21
输入用户名密码后
mput *.tgz

2: ftp 223.202.44.21
输入用户名密码后
prompt
mput *

 21:取到目录 下的前n个文件

ls|head -6

 22:查看历史记录

last命令可以用来查看用户的登陆记录。

history命令可以查看命令的执行历史。

  23:查看域名所对ip

nslookup
> www.google.com

 24:查看用户下的指定程序的pid

ps U fromcf -Ho pid,cmd | grep CCTransfers.jar | grep -v grep | head -1 |awk '{print $1}'

 查看程序占用的cpu

ps -eo pid,args,psr
参数的含义:
pid - 进程ID
args - 该进程执行时传入的命令行参数
psr - 分配给进程的CPU

25:echo输出不换行(下一个输出在一行)

echo –n “My name is:”

 26:修改root密码

请先用该建立的第一个用户登入,使用 sudo passwd root 即可修改 root 密码. ps: 若要输入密码,该密码就是执行 sudo 该用户的密码。

或者是 sudo su - 就可以变成管理者

 27:修改登入级别

/etc/inittab

 28:修改主机名

修改这个文件etc/sysconfig/network这个文件里的主机名.
NETWORKING=yes
HOSTNAME=主机名

 29:批量建目录

mkdir -p /data/aa/bb/cc/

 查看目录结构

tree 目录

30:snmpwalk 得到64位数据(与oid有关:1.3.6.1.2.1.2.2.1.16)

snmpwalk -v 2c -r 5 -t 10 -c ChinaCache 114.80.101.209 1.3.6.1.2.1.2.2.1.16

 31:查找 命令 安装  目录

which java

 32:关闭SELinux(是美国国家安全局(NSA)对于强制访问控制的实现)

查看SELinux状态:
1、/usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态
SELinux status: enabled
2、getenforce ##也可以用这个命令检查
关闭SELinux:
1、临时关闭(不用重启机器):
setenforce 0 ##设置SELinux 成为permissive模式
##setenforce 1 设置SELinux 成为enforcing模式
2、修改配置文件需要重启机器:
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启机器即可

 33:关闭iptable

service iptables status    查看状态
chkconfig iptables off      关闭
chkconfig --list iptables    列出所有规则

 34:查看系统信息

lsb_release -a
uname -a

 35:负载

top
w
uptime

 36:查看ssh连接

who

 37:T人

w 查看用户
who am i 查看哪个是自己的
pkill -kill -t pts/1 把pts/1提了 -9强制T

 38:多条命令

mkdir /root/aaa && mkdir aaa 第一个失败,第二个不会执行
mkdir /root/aaaa & mkdir aaa 第一个失败,第二个也会执行

 39:批量创建文件及目录

touch 456{1,2,3,4,5} 会在目录中生成(4561,4562,4563,4564,4565)五个目录文件
mkdir 456{1,2,3,4,5} 会在目录中生成(4561,4562,4563,4564,4565)五个文件夹

 脚本

mycomm.sh 写道(运行时输入:mycomm.sh user 1000
(user是文件夹的前缀,10000是要创建文件夹的书目))
#!/bin/bash
var1=1
while test $var1 -1e $2
do
mkdir $1$var1
var1=expr $var1 + 1
done

 40:自启动

# chkconfig --add keepalived
# chkconfig --level 35 keepalived on
# chkconfig --list keepalived 查看

 详解参数

等级0表示:表示关机
等级1表示:单用户模式
等级2表示:无网络连接的多用户命令行模式
等级3表示:有网络连接的多用户命令行模式
等级4表示:不可用
等级5表示:带图形界面的多用户模式
等级6表示:重新启动

 41:iptables 加入80访问

vi + /etc/sysconfig/iptables 写道
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

 42:监控脚本,循环命令

watch 写道
watch -d 命令 #高亮显示变动
watch -n 1 命令 #刷新时间,默认2s

 43:连接数

netstat -nat|grep -i "1521"|wc -l                       # 查看端口的连接数
netstat -nat||grep ESTABLISHED                  #查看正在传输的
netstat -na||grep ESTABLISHED                   #所有信息

SYN_RECV表示正在等待处理的请求数;
ESTABLISHED表示正常数据传输状态;
TIME_WAIT表示处理完毕,等待超时结束的请求数

 44:设置系统时间

date -s "20100405 14:31:00"

 持续更新中。。。

猜你喜欢

转载自692088846.iteye.com/blog/1927390