目录

Linux 常用命令

find

1
2
3
4
5
6
7
8
find . -size +100M -exec du -sh {} \; #查找当前目录下大于100M的文件
find  . -maxdepth  2  -name 201507*   -exec  rm -rf {} \; #清理备份命令
find / -type f -name "test.txt" | xargs rm -f  #查找并删除
find / -type f -name "test.txt" -exec rm -rf {} \; #查找并删除
find / -type f -name "*.log" -mtime +5|xargs rm -f  #删除五天前的log文件  -type d 查找文件夹 -type f 查找文件
find / -type f -name 'test.txt' | xargs sed -i s#test#newtest#g    查找内容并替换
find / -type f -name '*.txt' | xargs cat  批量查看
find /mds -xdev -printf '%h\n' |sort|uniq -c|sort -k 1 -n # 查看Linux目录的inode数量

ls

1
ls -l --time-style=long-iso # 显示成年月日格式 

cut

1
2
3
4
5
6
7
-d :后面跟分隔字符,分隔字符要用单引号括起来
-c :后面接的是第几个字符
-f :后面接的是第几个区块
cut -d ':' -f 2 /etc/passwd
cut -d ':' -f 1-3 /etc/passwd
cut -d ':' -f 1,3 /etc/passwd
cut -c 2-5 /etc/passwd

sort

1
2
3
4
5
6
7
8
9
-t 分隔符 :作用跟cut的-d一个意思
-n :使用纯数字排序
-r :反向排序
-u :去重复
-kn1,n2 :由n1区间排序到n2区间,可以只写-kn1,即对n1字段排序
sort -t ':' -k3 /etc/passwd
sort -t ':' -k3 -n /etc/passwd |cut -d ':' -f 3
cut -d ':' -f 3 /etc/passwd  | sort -n  常用
cut -d ':' -f 3 1.txt | sort -nr|uniq -c

awk

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
以冒号为分隔符取出IP
ifconfig eth0 | awk -F: '/inet addr/ {print $2}'| awk '{print $1}'

以一个或者多个空格和单个冒号作为分隔符取出ip
ifconfig eth0 | grep 'inet addr'|awk -F ' +|:' '{print $4}'

以一个或者多个空格和一个或者多个空格冒号作为分隔符取出ip
ifconfig eth0 | grep 'inet addr'|awk -F '[ :]+' '{print $4}'

过滤出404URL
cat access.log  |awk '$9~/404/' 

过滤出IP和url
grep -Ev  '(HTTP|GET)' access.log|awk '{print $1,$7}' access.log|sort | uniq -c |sort -n -k 1 -r

压缩解压

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
tar打包当前目录到tarname.tar
tar cvf tarname.tar ./*.* #tar zcvf tarname.tar.gz ./*.*

tar解压到当前目录
tar xvf tarname.tar #tar zxvf tarname.tar

zip压缩
zip -r data.zip data

zip解压
unzip data.zip -d databak

rar解压
rar -x data.rar

nslookup

1
2
3
4
cmd-->nslookup -qt=mx mulinux.com #查看域名mx记录
cmd-->nslookup-->set q=mx-->mulinux.com #查看域名的mx记录
cmd-->nslookup-->set q=any-->mulinux.com #查看mulinux.com的解析服务情况
nslookup -qa=ptr  (ip) #检测反向解析

tracert

1
2
windows:tracert -d mulinux.com    
linux:traceroute -d www.baidu.com

DD

整盘数据备份与恢复

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
备份:
dd if=/dev/hdx of=/dev/hdy
将本地的/dev/hdx整盘备份到/dev/hdy

dd if=/dev/hdx of=/path/to/image
将/dev/hdx全盘数据备份到指定路径的image文件

dd if=/dev/hdx | gzip >/path/to/image.gz
备份/dev/hdx全盘数据,并利用gzip工具进行压缩,保存到指定路径

恢复:
dd if=/path/to/image of=/dev/hdx
将备份文件恢复到指定盘

gzip -dc /path/to/image.gz | dd of=/dev/hdx
将压缩的备份文件恢复到指定盘

利用netcat远程备份

1
2
3
4
5
6
7
8
9
dd if=/dev/hda bs=16065b | netcat < targethost-IP > 1234
在源主机上执行此命令备份/dev/hda

netcat -l -p 1234 | dd of=/dev/hdc bs=16065b
在目的主机上执行此命令来接收数据并写入/dev/hdc

netcat -l -p 1234 | bzip2 > partition.img
netcat -l -p 1234 | gzip > partition.img
以上两条指令是目的主机指令的变化分别采用bzip2 gzip对数据进行压缩,并将备份文件保存在当前目录。

备份MBR

1
2
3
4
5
6
7
备份:
dd if=/dev/hdx of=/path/to/image count=1 bs=512
备份磁盘开始的512Byte大小的MBR信息到指定文件

恢复:
dd if=/path/to/image of=/dev/hdx
将备份的MBR信息写到磁盘开始部分

备份软盘

1
2
dd if=/dev/fd0 of=disk.img count=1 bs=1440k
将软驱数据备份到当前目录的disk.img文件

拷贝内存资料到硬盘

1
2
dd if=/dev/mem of=/root/mem.bin bs=1024
将内存里的数据拷贝到root目录下的mem.bin文件

从光盘拷贝iso镜像

1
2
dd if=/dev/cdrom of=/root/cd.iso
拷贝光盘数据到root文件夹下,并保存为cd.iso文件     

增加Swap分区文件大小

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
dd if=/dev/zero of=/swapfile bs=1024 count=262144
创建一个足够大的文件(此处为256M)

mkswap /swapfile
把这个文件变成swap文件

swapon /swapfile
启用这个swap文件

/swapfile swap swap defaults 0 0
在每次开机的时候自动加载swap文件,需要在 /etc/fstab文件中增加一行

销毁磁盘数据

1
2
dd if=/dev/urandom of=/dev/hda1
利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。执行此操作以后,/dev/hda1将无法挂载,创建和拷贝操作无法执行。

得到最恰当的block size

1
2
3
4
5
dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file     
dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

测试硬盘读写速度

1
2
3
dd if=/root/1Gb.file bs=64k | dd of=/dev/null
dd if=/dev/zero of=/root/1Gb.file bs=1024 count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度     

修复硬盘

1
2
dd if=/dev/sda of=/dev/sda
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生magnetic flux point。当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

测试硬盘读写

1
2
3
4
5
6
7
dd if=/dev/zero of=test.dbf bs=8k count=200000 conv=fdatasync

参考文档:http://elf8848.iteye.com/blog/2089055

测试方式:使用dd指令,对磁盘进行连续写入,不使用内存缓冲区,每次写入8k的数据,总共写入20万次,产生1.6G大小的文件。

测试指令:dd if=/dev/zero of=/data01/test.dbf bs=8k count=200000 conv=fdatasync

正确的使用dd进行磁盘读写速度测试

dd是Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换,所以可以用来测试硬盘的顺序读写能力。可以写文件,可以写裸设备。

dd语法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
功能说明:读取,转换并输出数据。

语法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]

补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。

参数:

  bs=<字节数> 将ibs( 输入)与obs(输出)设成指定的字节数。

  cbs=<字节数> 转换时,每次只转换指定的字节数。

  conv=<关键字> 指定文件转换的方式。

  count=<区块数> 仅读取指定的区块数。

  ibs=<字节数> 每次读取的字节数。

  if=<文件> 从文件读取。

  obs=<字节数> 每次输出的字节数。

  of=<文件> 输出到文件。

  seek=<区块数> 一开始输出时,跳过指定的区块数。

  skip=<区块数> 一开始读取时,跳过指定的区块数。

  --help 帮助。

  --version 显示版本信息。

dd常用参数详解

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
if=xxx 从xxx读取,如if=/dev/zero,该设备无穷尽地提供0,(不产生读磁盘IO)

of=xxx 向xxx写出,可以写文件,可以写裸设备。如of=/dev/null,"黑洞",它等价于一个只写文件. 所有写入它的内容都会永远丢失. (不产生写磁盘IO)

bs=8k 每次读或写的大小,即一个块的大小。

count=xxx 读写块的总数量。

避免操作系统“写缓存”干扰测试成绩,使用sync、fsync、fdatasync

---------------------------------------------------------

关于sync、fsync、fdatasync请参考:http://elf8848.iteye.com/blog/2088986

dd bs=8k count=4k if=/dev/zero of=test.log conv=fsync 

dd bs=8k count=4k if=/dev/zero of=test.log conv=fdatasync

dd bs=8k count=4k if=/dev/zero of=test.log oflag=dsync

dd bs=8k count=4k if=/dev/zero of=test.log 默认“写缓存”启作用

dd bs=8k count=4k if=/dev/zero of=test.log conv=sync “写缓存”启作用

dd bs=8k count=4k if=/dev/zero of=test.log; sync “写缓存”启作用



dd bs=8k count=4k if=/dev/zero of=test.log conv=fsync 

加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。conv=fsync表示把文件的“数据”和“metadata”都写入磁盘(metadata包括size、访问时间st_atime & st_mtime等等),因为文件的数据和metadata通常存在硬盘的不同地方,因此fsync至少需要两次IO写操作,fsync 与fdatasync相差不大。(重要,最有参考价值)



dd bs=8k count=4k if=/dev/zero of=test.log conv=fdatasync

加入这个参数后,dd命令执行到最后会真正执行一次“同步(sync)”操作,,这样算出来的时间才是比较符合实际使用结果的。conv=fdatasync表示只把文件的“数据”写入磁盘,fsync 与fdatasync相差不大。(重要,最有参考价值)

dd bs=8k count=4k if=/dev/zero of=test.log oflag=dsync

加入这个参数后,每次读取8k后就要先把这8k写入磁盘,然后再读取下面一个8k,一共重复4K次。这是最慢的一种方式了。



dd bs=8k count=4k if=/dev/zero of=test

没加关于操作系统“写缓存”的参数,默认“写缓存”启作用。dd先把数据写的操作系统“写缓存”,就完成了写操作。通常称为update的系统守护进程会周期性地(一般每隔30秒)调用sync函数,把“写缓存”中的数据刷入磁盘。因为“写缓存”起作用,你会测试出一个超级快的性能。

如:163840000 bytes (164 MB) copied, 0.742906 seconds, 221 MB/s



dd bs=8k count=4k if=/dev/zero of=test conv=sync  

conv=sync参数明确“写缓存”启作用,默认值就是conv=sync 



dd bs=8k count=4k if=/dev/zero of=test; sync 

与第1个完全一样,分号隔开的只是先后两个独立的命令。当sync命令准备开始往磁盘上真正写入数据的时候,前面dd命令已经把错误的“写入速度”值显示在屏幕上了。所以你还是得不到真正的写入速度。

裸设备测试

1
2
3
4
5
6
7
8
1、裸设备到文件系统

dd if=/dev/rsd1b of=/backup/df1.dbf bs=8k skip=8 count=3841

2、文件系统到裸设备

dd if=/backup/df1.dbf of=/dev/rsd2b bs=8k seek=8
更多关于裸设备,请参考:http://czmmiao.iteye.com/blog/1748748

lsof

1
2
lsof | grep deleted 查找被删除的文件

日志分析示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
1、查看80端口的tcp连接
#netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

2、当前WEB服务器中联接次数最多的ip地址:
#netstat -ntu |awk '{print $5}' |sort | uniq -c| sort -n -r

3、查看日志中访问次数最多的前10个IP
#cat access_log |cut -d ' ' -f 1 |sort |uniq -c | sort -nr | awk '{print $0 }' | head -n 10 |less

4、查看日志中出现100次以上的IP
#cat access_log |cut -d ' ' -f 1 |sort |uniq -c | awk '{if ($1 > 100) print $0}'|sort -nr |less

5、查看最近访问量最高的文件
#cat access_log |tail -10000|awk '{print $7}'|sort|uniq -c|sort -nr|less

6、查看最近访问量最高的页面(.png)
#cat access_log |awk '{print $7}'|grep '.png'|sort|uniq -c|sort -nr |head -n 10

7、查看日志中访问超过100次的页面
#cat access_log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

8、access_log昨天一天的点击量(clicks);
cat access_log|grep '12/Nov/2009'|grep "******.jsp"|wc|awk '{print $1}'|uniq

9、昨天访问网站的独立IP有多少;
cat access_log|grep '12/Aug/2009'|grep "******"|wc|awk '{print $1}'|uniq

10、统计某url,一天的访问次数
#cat access_log|grep '12/Aug/2009'|grep '/images/index/e1.gif'|wc|awk '{print $1}'

11、拉出前五天的访问次数最多的网页前20名清单;进行五天日志对比,找出排名靠前重复的网页,即可得出本周访问量最大的前几个网页;
#cat access_log|awk '{print $7}'|uniq -c |sort -n -r|head -20


12、从日志里查看该ip在干嘛:
#cat access_log | grep 218.66.36.119| awk '{print $1"/t"$7}' | sort | uniq -c | sort -nr | less

13、列出传输时间超过 30 秒的文件
#cat access_log|awk ‘($NF > 30){print $7}’|sort -n|uniq -c|sort -nr|head -20

14、列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
#cat access_log |awk ‘($NF > 60 && $7~//.php/){print $7}’|sort -n|uniq -c|sort -nr|head -100