Vi中输入中文乱码

Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding

它们的意义如下:

encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。
fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。
fileencodings: Vim 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将 Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。
termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的 Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。 用英文菜单和提示最好,可以免去下面对菜单和提示信息(B,C部分)的设置如果用英文菜单和提示在安装gvim的时候,将支持本地语言的选项去掉。

解决vim文件乱码,打开文件乱码,菜单,提示信息乱码:

有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding 在linux中修改.vimrc(在win中是_vimrc)

A:设置文件的代码形式: 

set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese,cp936

B:vim的菜单乱码解决: 

同样在 _vimrc文件里以上的中文设置后加上下列命令

source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim

C:vim提示信息乱码的解决:

language messages zh_CN.utf-8

37个常用Shell组合命令

序号

任务

命令组合

1

删除0字节文件

find . -type f -size 0 -exec rm -rf {} \;
find . type f -size 0 -delete

2

查看进程,按内存从大到小排列

ps -e -o “%C : %p : %z : %a”|sort -k5 -nr

3

按cpu利用率从大到小排列

ps -e -o “%C : %p : %z : %a”|sort -nr

4

打印说cache里的URL

grep -r -a jpg /data/cache/* | strings | grep “http:” | awk -F’http:’ ‘{print “http:”$2;}’

5

查看http的并发请求数及其TCP连接状态

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

6

sed在这个文里Root的一行,匹配Root一行,将no替换成yes。

sed -i ‘/Root/s/no/yes/’ /etc/ssh/sshd_config

7

如何杀掉mysql进程

ps aux |grep mysql |grep -v grep  |awk ‘{print $2}’ |xargs kill -9
killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid`

8

显示运行3级别开启的服务(从中了解到cut的用途,截取数据)

ls /etc/rc3.d/S* |cut -c 15-

9

如何在编写SHELL显示多个信息,用EOF

cat << EOF
+————————————————————–+
|   === Welcome to Tunoff services ===                         |
+————————————————————–+
EOF

10

for的用法(如给mysql建软链接)

cd /usr/local/mysql/bin
for i in *
do ln /usr/local/mysql/bin/$i /usr/bin/$i
done

11

取IP地址

ifconfig eth0 |grep “inet addr:” |awk ‘{print $2}’|cut -c 6-
ifconfig | grep ‘inet addr:’| grep -v ’127.0.0.1′ |cut -d: -f2 | awk ‘{ print $1}’

12

内存的大小

free -m |grep “Mem” | awk ‘{print $2}’

13

查看80端口的连接,并排序

netstat -an -t | grep “:80″ | grep ESTABLISHED | awk ‘{printf “%s %s\n”,$5,$6}’ | sort

14

查看Apache的并发请求数及其TCP连接状态

netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

15

统计一下服务器下面所有的jpg的文件的大小

find / -name *.jpg -exec wc -c {} \;|awk ‘{print $1}’|awk ‘{a+=$1}END{print a}’

16

CPU的数量

cat /proc/cpuinfo |grep -c processor

17

CPU负载

cat /proc/loadavg

18

CPU负载

mpstat 1 1

19

内存空间

free

20

磁盘空间

df -h

21

如发现某个分区空间接近用尽,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录

du -cks * | sort -rn | head -n 10

22

磁盘I/O负载

iostat -x 1 2

23

网络负载

sar -n DEV

24

网络错误

netstat -i
cat /proc/net/dev

25

网络连接数目

netstat -an | grep -E “^(tcp)” | cut -c 68- | sort | uniq -c | sort -n

26

进程总数

ps aux | wc -l

27

查看进程树

ps aufx

28

可运行进程数目

vmwtat 1 5

29

检查DNS Server工作是否正常,这里以61.139.2.69为例

dig www.baidu.com @61.139.2.69

30

检查当前登录的用户个数

who | wc -l

31

日志查看、搜索

cat /var/log/rflogview/*errors
grep -i error /var/log/messages
grep -i fail /var/log/messages
tail -f -n 2000 /var/log/messages

32

内核日志

dmesg

33

时间

date

34

已经打开的句柄数

lsof | wc -l

35

网络抓包,直接输出摘要信息到文件。

tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts

36

然后检查IP的重复数 并从小到大排序 注意 “-t\  +0″ 中间是两个空格,less命令的用法。

less pkts | awk {‘printf $3″\n”‘} | cut -d. -f 1-4 | sort | uniq -c | awk {‘printf $1″ “$2″\n”‘} | sort -n -t\  +0

37

kudzu查看网卡型号

kudzu –probe –class=network

 

Shell免密码使用SFTP

最近编程中用到sftp上传文件,且需要用crontab预设定时上传事件。而sftp不同于ftp,没有提供选项如 -i 可以将密码直接编码进程序。使用sftp指令,会自动请求用户输入密码。

总结一下可以避免sftp输入密码的三种方式:

1. lftp方式

LFTP是一款非常著名的字符界面的文件传输工具。支持FTP、HTTP、FISH、SFTP、HTTPS和FTPS协议。
例子:(本例为下载例子)

[codesyntax lang=”bash”]
#!/bin/sh
HOST=192.168.11.22
USER=test
PASS=iprayzTest
echo “Starting to sftp…”
lftp -u ${USER},${PASS} sftp://${HOST} <<EOF
cd /kagou/datafile
mget *.*
bye
EOF
echo “done”
[/codesyntax]

2. expect方式

Expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。

要使用expect需要预先安装tcl这个东西,然后再安装expect包。

tcl: http://prdownloads.sourceforge.net/tcl/tcl8.4.16-src.tar.gz
expect: http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download

例子:

[codesyntax lang=”bash”]
#!/usr/local/bin/expect -f
#<—insert here your expect program location
#procedure to attempt connecting; result 0 if OK, 1 elsewhere
proc connect {passw} {
expect {
“(yes/no)?” {send “yes/r”;exp_continue} #第一次使用SFTP时候会要求输入yes/no
“password:” {send “$passw/r” #自动输入密码
expect {
“sftp*” { #检测返回sftp>
return 0
}
}
}
}
# timed out
return 1
}

#read the input parameters
set user [lindex $argv 0]
set passw [lindex $argv 1]
set host [lindex $argv 2]
set location [lindex $argv 3]
set file1 [lindex $argv 4]

#puts “Am citit:/n”;
#puts “user: $user”;
#puts “passw: $passw”;
#puts “host: $host”;
#puts “location: $location”;
#puts “file1: $file1”;

#check if all were provided
if { $user == “” || $passw == “” || $host == “” || $location == “” || $file1 == “” } {
puts “Usage: <user> <passw> <host> <location> <file1 to send>/n”
exit 1
}

#sftp to specified host and send the files
spawn sftp $user@$host

set rez [connect $passw]
if { $rez == 0 } {
send “cd $location/r”
set timeout -1
send “put $file1/r”
#send “ls -l/r”
#send “quit/r”
#send “mkdir testsftp/r”
send “quit/r”
expect eof
exit 0
}
puts “/nCMD_ERR: connecting to server: $host!/n”
exit 1
0
[/codesyntax]
expect也可以用两种形式调用

1 ./my.exp $usr $pwd $host $local $file
2. 代码中直接插入:

expect<<!

!

 

3. (推荐)生成密钥对

因为这种方式不用把密钥卸载程序里,所以更安全

第一步:生成密匙对,我用的是rsa的密钥。使用命令 “ssh-keygen -t rsa”

[codesyntax lang=”bash”]
[user1@rh user1]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user1/.ssh/id_rsa):
Created directory ‘/home/user1/.ssh’.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user1/.ssh/id_rsa.
Your public key has been saved in /home/user1/.ssh/id_rsa.pub.
The key fingerprint is:
e0:f0:3b:d3:0a:3d:da:42:01:6a:61:2f:6c:a0:c6:e7user1@rh.test.com
[user1@rh user1]$
[/codesyntax]

生成的过程中提示输入密钥对保存位置,直接回车,接受默认值就行了。接着会提示输入一个不同于你的password的密码,直接回车,让它空着。
当然,也可以输入一个。(我比较懒,不想每次都要输入密码。) 这样,密钥对就生成完了。

其中公共密钥保存在 ~/.ssh/id_rsa.pub
私有密钥保存在 ~/.ssh/id_rsa
然后改一下 .ssh 目录的权限,使用命令 “chmod 755 ~/.ssh”
[user1@rh user1]$ chmod 755 ~/.ssh

之后把这个密钥对中的公共密钥复制到你要访问的机器上去,并保存为
~/.ssh/authorized_keys

[codesyntax lang=”bash”]
[user1@rh user1]$ scp ~/.ssh/id_rsa.pub rh1:/home/user1/.ssh/authorized_keys

user1@rh1’s password:
id_rsa.pub 100% 228 3.2MB/s 00:00
[user1@rh user1]$
[/codesyntax]

之这样就大功告成了。之后再用ssh scp sftp 之类的访问那台机器时,就不用输入密码
了,用在script上更是方便。

Shell访问MySQL数据库方法

原有搭建了两台Mysql主从数据库服务器

先准备每日从主服务器进行数据增量备份 然后在子机上进行数据增量恢复

而实现数据库的每日增量备份还原

 

主机数据库的备份比较好弄  直接mysqldump就可以了

但是子机上的还原 有那么一点小麻烦

上网搜索了一下 然后自己整理了一下用脚本访问数据库的两种方法:

1. 直接利用mysql的参数进行控制

[codesyntax lang=”bash”]

#!/bin/sh
#数据库基本信息
DBUSER=bak
DBPASSWD=backup
#数据库连接
mysql -u${DBUSER} -p${DBPASSWD}

[/codesyntax]
这种方法 只能是直接进入到数据库 但是后续的处理还需要进行二次编写

 

2. 直接编写expect脚本进行控制

首先下载expect,这个比较好处理  直接yum或者是sudo apt-get就可以了

然后就是编写脚本 也没有想象中的要困难
[codesyntax lang=”bash”]

#!/usr/bin/expect
spawn mysql -ubak -p
expect "Enter password:"
send "backup\n"
expect "mysql>"
send "select * from mysql.user;\n"
expect "mysql>"
send "show databases;\n"
#echo 正在显示用户数据
expect eof

[/codesyntax]
用第二种方法至少可以进行数据库的相对操作,毕竟expect本来就是进行交互式脚本运行的

 

当然还有其他的方式进行的  这个后续进行补充吧……

毕竟现在主要的是将任务给完成