增加一个虚IP: ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0
删除虚IP: ip addr del 192.168.0.1 dev eth0
得到进程的pid:
ps -ef | grep process_name | grep -v "grep" | awk '{print $2}'
查看进程的所有线程
# ps mp 6648 -o THREAD,tid
USER %CPU PRI SCNT WCHAN USER SYSTEM TID
root 0.0 - - - - - -
root 0.0 24 - - - - 6648
root 0.0 21 - - - - 6650
root 1.0 24 - - - - 14214
root 0.0 23 - futex_ - - 14216
root 0.0 22 - 184466 - - 15374
root 0.0 23 - 184466 - - 15376
root 0.0 23 - 184466 - - 15378
root 0.0 23 - 184466 - - 15380
root 0.0 23 - 184466 - - 15392
root 0.0 23 - 184466 - - 15394
root 0.0 23 - 184466 - - 15398
查看所有子进程:
# pstree -p 6648
agent_executor(6648)─┬─tar(15601)───gzip(15607)
├─{agent_executor}(6650)
├─{agent_executor}(14214)
├─{agent_executor}(14216)
├─{agent_executor}(15374)
├─{agent_executor}(15376)
├─{agent_executor}(15378)
├─{agent_executor}(15380)
├─{agent_executor}(15392)
├─{agent_executor}(15394)
└─{agent_executor}(15398)
查看/proc/pid/status可以看到一些进程的当前状态:
Name: bash
State: S (sleeping)
SleepAVG: 98%
Tgid: 11237
Pid: 11237
PPid: 11235
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256
Groups: 0 1 2 3 4 6 10
VmPeak: 66260 kB
VmSize: 66228 kB
VmLck: 0 kB
VmHWM: 1684 kB
VmRSS: 1684 kB
VmData: 456 kB
VmStk: 88 kB
VmExe: 712 kB
VmLib: 1508 kB
VmPTE: 68 kB
StaBrk: 008c3000 kB
Brk: 011b1000 kB
StaStk: 7fff8b728170 kB
Threads: 1
SigQ: 1/30222
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000010000
SigIgn: 0000000000384004
SigCgt: 000000004b813efb
CapInh: 0000000000000000
CapPrm: 00000000fffffeff
CapEff: 00000000fffffeff
Cpus_allowed: 00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000003
Mems_allowed: 1
1.load average
top
uptime
2.CPU利用率
top
1多核CPU查看
Shift+H 用线程查看
-p 指定查看的进程
top | grep Cpu
3.磁盘剩余空间
df
-h 按单位格式输出
du
-h 按单位格式输出
4.网络traffic
sar -n DEV 1 1
-n 汇报网络状况
DEV 查看各个网卡网络流量
n 间隔秒数
n 总共取几次
5.磁盘I/O
iostat -d -k
6.内存使用
free
-m 以MB为单位
-g 以GB为单位
vmstat [-V] [-n] [delay [count]]
-V表示打印出版本信息
-n表示在周期性循环输出时,输出的头部信息仅显示一次;
delay是两次输出之间的延迟时间;
count是指按照这个时间间隔统计的次数。
对于vmstat输出各字段的含义,可运行man vmstat查看
1.查看文件内容
cat
-n 显示行号
2.分页显示
more
Enter 显示下一行
空格 显示下一页
F 显示下一屏
B 显示上一屏
less
/get 查询"get"字符串并高亮显示
3.显示文件尾
tail
-f 不退出持续显示
-n 显示文件最后n行
4.显示头文件
head
-n 显示文件开始n行
5.内容排序
sort
-n 按照数字排序
-r 按照逆序排序
-k 表示排序列
-t 指定分隔符
6.字符统计
wc
-l 统计文件中行数
-c 统计文件字节数
-L 查看最长行长度
-w 查看文件包含多少个单词
7.查看重复出现的行
uniq
-c 查看该行内容出现的次数
-u 只显示出现一次的行
-d 只显示重复出现的行
8.字符串查找
grep
9.文件查找
find
which
whereis
10.表达式求值
expr
11.归档文件
tar
zip
unzip
12.URL访问工具
curl
wget
13. 查看请求访问量
页面访问排名前十的IP
cat access.log | cut -f1 -d " " | sort | uniq -c | sort -k 1 -r | head -10
页面访问排名前十的URL
cat access.log | cut -f4 -d " " | sort | uniq -c | sort -k 1 -r | head -10
查看最耗时的页面
cat access.log | sort -k 2 -n -r | head 10
14.大杀器
sed
sed 's/xxx/hello' access.log 将 xxx 替换成 hello 输出(s是文本替换命令)
sed -n '2,6p' access.log 只输出第第2到第6之间的行(-n表示输出指定的行)
sed '/qq/d' access.log 删除包含qq的行(d是文本删除命令)
sed '=' access.log 显示文件行号
sed -e 'i\head' access.log 在每行的前面插入head字符串(i在行首插入命令)
sed -e 'a\end' access.log 在每行的末尾追加end字符串(i在行尾追加命令)
sed -e '/google/c\hello' access.log 查找google匹配的行,用hello替换(c是对行文本替换命令)
awk
sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出。如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序。
sort语法
[root@www ~]# sort [-fbMnrtuk] [file or stdin] 选项与参数: -f :忽略大小写的差异,例如 A 与 a 视为编码相同; -b :忽略最前面的空格符部分; -M :以月份的名字来排序,例如 JAN, DEC 等等的排序方法; -n :使用『纯数字』进行排序(默认是以文字型态来排序的); -r :反向排序; -u :就是 uniq ,相同的数据中,仅出现一行代表; -t :分隔符,默认是用 [tab] 键来分隔; -k :以那个区间 (field) 来进行排序的意思
对/etc/passwd 的账号进行排序
[root@www ~]# cat /etc/passwd | sort adm:x:3:4:adm:/var/adm:/sbin/nologin apache:x:48:48:Apache:/var/www:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin
sort 是默认以第一个数据来排序,而且默认是以字符串形式来排序,所以由字母 a 开始升序排序。
/etc/passwd 内容是以 : 来分隔的,我想以第三栏来排序,该如何
[root@www ~]# cat /etc/passwd | sort -t ':' -k 3 root:x:0:0:root:/root:/bin/bash uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin
默认是以字符串来排序的,如果想要使用数字排序:
cat /etc/passwd | sort -t ':' -k 3n root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh
默认是升序排序,如果要倒序排序,如下
cat /etc/passwd | sort -t ':' -k 3nr nobody:x:65534:65534:nobody:/nonexistent:/bin/sh ntp:x:106:113::/home/ntp:/bin/false messagebus:x:105:109::/var/run/dbus:/bin/false sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
如果要对/etc/passwd,先以第六个域的第2个字符到第4个字符进行正向排序,再基于第一个域进行反向排序。
cat /etc/passwd | sort -t':' -k 6.2,6.4 -k 1r sync:x:4:65534:sync:/bin:/bin/sync proxy:x:13:13:proxy:/bin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh
查看/etc/passwd有多少个shell:对/etc/passwd的第七个域进行排序,然后去重:
cat /etc/passwd | sort -t':' -k 7 -u root:x:0:0:root:/root:/bin/bash syslog:x:101:102::/home/syslog:/bin/false daemon:x:1:1:daemon:/usr/sbin:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync sshd:x:104:65534::/var/run/sshd:/usr/sbin/nologin
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
uniq语法
[root@www ~]# uniq [-icu] 选项与参数: -i :忽略大小写字符的不同; -c :进行计数 -u :只显示唯一的行
testfile的内容如下
cat testfile hello world friend hello world hello
直接删除未经排序的文件,将会发现没有任何行被删除
#uniq testfile hello world friend hello world hello
排序文件,默认是去重
#cat words | sort |uniq friend hello world
排序之后删除了重复行,同时在行首位置输出该行重复的次数
#sort testfile | uniq -c 1 friend 3 hello 2 world
仅显示存在重复的行,并在行首显示该行重复的次数
#sort testfile | uniq -dc 3 hello 2 world
仅显示不重复的行
sort testfile | uniq -u friend
cut命令可以从一个文本文件或者文本流中提取文本列。
cut语法
[root@www ~]# cut -d'分隔字符' -f fields <==用于有特定分隔字符 [root@www ~]# cut -c 字符区间 <==用于排列整齐的信息 选项与参数: -d :后面接分隔字符。与 -f 一起使用; -f :依据 -d 的分隔字符将一段信息分割成为数段,用 -f 取出第几段的意思; -c :以字符 (characters) 的单位取出固定字符区间;
PATH 变量如下
[root@www ~]# echo $PATH /bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games # 1 | 2 | 3 | 4 | 5 | 6 | 7
将 PATH 变量取出,我要找出第五个路径。
#echo $PATH | cut -d ':' -f 5 /usr/local/bin
将 PATH 变量取出,我要找出第三和第五个路径。
#echo $PATH | cut -d ':' -f 3,5 /sbin:/usr/local/bin
将 PATH 变量取出,我要找出第三到最后一个路径。
echo $PATH | cut -d ':' -f 3-
/sbin:/usr/sbin:/usr/local/bin:/usr/X11R6/bin:/usr/games
将 PATH 变量取出,我要找出第一到第三个路径。
#echo $PATH | cut -d ':' -f 1-3
/bin:/usr/bin:/sbin:
将 PATH 变量取出,我要找出第一到第三,还有第五个路径。
echo $PATH | cut -d ':' -f 1-3,5
/bin:/usr/bin:/sbin:/usr/local/bin
实用例子:只显示/etc/passwd的用户和shell
#cat /etc/passwd | cut -d ':' -f 1,7 root:/bin/bash daemon:/bin/sh bin:/bin/sh
统计文件里面有多少单词,多少行,多少字符。
wc语法
[root@www ~]# wc [-lwm] 选项与参数: -l :仅列出行; -w :仅列出多少字(英文单字); -m :多少字符;
默认使用wc统计/etc/passwd
#wc /etc/passwd 40 45 1719 /etc/passwd
40是行数,45是单词数,1719是字节数
wc的命令比较简单使用,每个参数使用如下:
#wc -l /etc/passwd #统计行数,在对记录数时,很常用 40 /etc/passwd #表示系统有40个账户 #wc -w /etc/passwd #统计单词出现次数 45 /etc/passwd #wc -m /etc/passwd #统计文件的字节数 1719
1.查看SWAP
[root@192 oc]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 8024 104 -1
[root@192 oc]#
查看日志去除重复
cat catalina.out |grep "xxxxx"|awk -F ']' '{print $2}'|sort|uniq
统计去除重复的行数
cat catalina.out |grep "xxxxx"|awk -F ']' '{print $2}'|sort|uniq|wc -l
查询日志大于某一个时间点的日志,并且去重复
cat catalina.out | grep "xxxxxxxx"|awk '($0>"05-19 18:20:00"){print $0}'|awk -F ']' '{print $2}'|sort|uniq
统计行数
cat catalina.out | grep "xxxxxxxx"|awk '($0>"05-19 18:20:00"){print $0}'|awk -F ']' '{print $2}'|sort|uniq|wc -l
2.通过DD创建文件
[root@192 oc]# dd if=/dev/zero of=/oc/swap bs=512 count=2000000
2000000+0 records in
2000000+0 records out
1024000000 bytes (1.0 GB) copied, 23.4213 seconds, 43.7 MB/s
[root@192 oc]#
[root@192 oc]# ll
总计 1001012
drwx------ 2 root root 16384 06-03 06:56 lost+found
-rw-r--r-- 1 root root 1024000000 06-12 10:24 swap
drwxr-xr-x 4 root root 4096 06-08 16:15 tmp
[root@192 oc]#
3.转化为swap格式
[root@192 oc]# mkswap /oc/swap
Setting up swapspace version 1, size = 1023995 kB
[root@192 oc]#
[root@192 oc]# free
total used free shared buffers cached
Mem: 1035108 1018168 16940 0 14716 892500
-/+ buffers/cache: 110952 924156
Swap: 8024 104 7920
[root@192 oc]#
启用,加入到swap池中。
[root@192 oc]# swapon /oc/swap
[root@192 oc]# free
total used free shared buffers cached
Mem: 1035108 1018228 16880 0 14748 892592
-/+ buffers/cache: 110888 924220
Swap: 1008016 104 1007912
[root@192 oc]#
[root@192 oc]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 8024 104 -1
/oc/swap file 999992 0 -4
[root@192 oc]#
从swap池中拿掉
[root@192 oc]# swapoff /oc/swap
[root@192 oc]# free
total used free shared buffers cached
Mem: 1035108 1018780 16328 0 15096 892760
-/+ buffers/cache: 110924 924184
Swap: 8024 104 7920
[root@192 oc]# cat /proc/swaps
Filename Type Size Used Priority
/dev/sda3 partition 8024 104 -1
[root@192 oc]#
开机自动启动:
[root@192 oc]# echo "/oc/swap swap swap defaults 0 0" >> /etc/fstab
[root@192 oc]# cat /etc/fstab
LABEL=/ / ext3 defaults 1 1
LABEL=/boot /boot ext3 defaults 1 2
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
LABEL=SWAP-sda3 swap swap defaults 0 0
/dev/sdb1 /oa ext3 defaults 0 0
/dev/sdc1 /ob ext3 defaults 0 0
/dev/sdd1 /oc ext3 defaults 0 0
/dev/hdc /media/dvd iso9660 ro,auto 0 0
/oc/swap swap swap defaults 0 0
[root@192 oc]#
另:
将整个设备划为swap分区
fdisk时代码为82 linux swap,
分区后:
# mkswap /dev/sdc3
# swapon /dev/sdc3
--------------错误信息
[root@dn01 ~]# mkswap /var/swap
mkswap: /var/swap: warning: don't erase bootbits sectors
on whole disk. Use -f to force.
Setting up swapspace version 1, size = 49996 KiB
no label, UUID=fafeb1a4-7b37-4f25-bb67-fef3b89e4fc3
在vi /etc/fstab 添加
/var/swap swap swap defaults 0 0
然后直接swapon就可以了
cat /proc/cpuinfo中的信息
processor 逻辑处理器的id。
physical id 物理封装的处理器的id。
core id 每个核心的id。
cpu cores 位于相同物理封装的处理器中的内核数量。
siblings 位于相同物理封装的处理器中的逻辑处理器的数量。
1 查看物理CPU的个数
#cat /proc/cpuinfo |grep "physical id"|sort |uniq|wc –l
2、 查看逻辑CPU的个数
#cat /proc/cpuinfo |grep "processor"|wc –l
3、 查看CPU是几核
#cat /proc/cpuinfo |grep "cores"|uniq
4、 查看CPU的主频
#cat /proc/cpuinfo |grep MHz|uniq
5、 # uname -a
6、 Linux euis1 2.6.9-55.ELsmp #1 SMP Fri Apr 20 17:03:35 EDT 2007 i686 i686 i386 GNU/Linux
(查看当前操作系统内核信息)
7、 # cat /etc/issue | grep Linux
8、 Red Hat Enterprise Linux AS release 4 (Nahant Update 5(查看当前操作系统发行版信息)
9、 # cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
8 Intel(R) Xeon(R) CPU E5410 @ 2.33GHz
(看到有8个逻辑CPU, 也知道了CPU型号)
9 # cat /proc/cpuinfo | grep physical | uniq -c
4 physical id : 0
4 physical id : 1
(说明实际上是两颗4核的CPU)
10、# getconf LONG_BIT
32
(说明当前CPU运行在32bit模式下, 但不代表CPU不支持64bit)
11、# cat /proc/cpuinfo | grep flags | grep ' lm ' | wc –l
8(结果大于0, 说明支持64bit计算. lm指long mode, 支持lm则是64bit)
12、如何获得CPU的详细信息:
linux命令:cat /proc/cpuinfo
13、用命令判断几个物理CPU,几个核等:
逻辑CPU个数:
# cat /proc/cpuinfo | grep "processor" | wc -l
物理CPU个数:
# cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l
14、每个物理CPU中Core的个数:
# cat /proc/cpuinfo | grep "cpu cores" | wc -l
15、是否为超线程?如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的。每个物理CPU中逻辑CPU(可能是core, threads或both)的个数:
# cat /proc/cpuinfo | grep "siblings"
1.查看CPU信息命令
cat /proc/cpuinfo
2.查看内存信息命令
cat /proc/meminfo
3.查看硬盘信息命令
fdisk -l
4、查看版本
cat /proc/version或者
cat /etc/issue | grep Linux
linux下查看某个程序占用系统资源的情况
top u mysql
linux下top命令参数解释
linux下top命令参数解释 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
统计信息区
前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行时间,格式为时:分
1 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
最后两行为内存信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区
统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
top -d 1 | grep -E "^Cpu|^Mem"
举例来说明一下:
-|rw-|r--|r--
1、r代表可读,w表示可写,-表示该文件的所有者没有对文件的执行权限,具有可执行权限则用x表示。
2、第一个字符是文件类型(文件类型分两种:普通文件和目录文件,若为普通文件,用连字号-表示;若为目录文件就用d表示。)
3、剩下的字符表示对文件的访问权限
4、第一个字符的后3个字符表示文件所有者对文件的访问权限。
5、后续3个字符表示组成员用户对文件的访问权限。
6、再后续的3个字符为文件的其他用户对文件的访问权限。
/ 根目录 在所有的Linux系统文件的结构中,它是所有文件的祖先。
/bin 基本命令的二进制文件 包含启动系统和在单用户模式下运行所需的文件。
/boot 引导系统加载的静态文件 包含引导系统启动的大多数文件
/dev 设备文件 包含代表所有外围设备。
/etc 本地计算机系统配置文件 包含管理文件、配置文件和一些系统文件。
其中最重要的是/etc/passwd目录,它包含使用系统的所有授权用户列表。
/etc/X11 对X Windows 系统的本地计算机配置
/etc/opt 包含/opt目录下附加软件包的配置文件
/home home目录 一般地,每个用户主目录都是/home目录的子目录。例如,
如果用户的目录都是在/home目录下,那么loiy用户的主目录即为
/home/loiy。有些系统的用户主目录不在/home目录下,而在/inhouse
或/clients目录下。
/lib 共享库和内核模块。(在64位系统会多出一个lib64目录)
/lib/modules 可加载内核模块
/mnt 临时文件系统挂载点
/opt 附加软件包
/proc 虚拟文件系统的内核和进程信息
/root root用户的主目录
/sbin 基本的二进制系统文件 用于系统关键的工具都存储在/sbin 或 /usr/sbin
中。其中,/sbin中包含引导进程所需的工具,/usr/sbin包含系统启动运
行后使用的工具。在比较老版本的Linux系统中,用于系统管理的工具分布
在许多包含其他系统文件的目录下(如/etc、/usr/bin、/usr/adm 和/usr/include)。
/tmp 临时文件夹 存放临时文件
/usr 第二主文件层次 包含存放系统所需信息的子目录,这些子目录内的文件不经常改动,
可由多个系统共享。
/usr/bin 大多数用户命令 包含标准Linux工具,对应的二进制文件在单用户模式下不需要。
/usr/bin/X11 到目录/usr/X11R6/bind的符号链接
/usr/games 游戏和教育软件
/usr/include C程序包含的头文件
/usr/lib 库文件
/usr/lib/X11 到/usr/X11R6/lib/X11的符号链接
/usr/local 本地文件层次结构 包含要添加到系统的重要文件和目录。其子目录有:
bin、games、include、lib、sbin、share和src
/usr/man 联机手册
/usr/sbin 非关键的用于系统管理的二进制文件
/usr/share 体系结构无关数据
/usr/share/ 各种各样的文档
/var/log 日志文件
1.查看配置文件语法
1 |
vim /etc/* |
2.查看端口
1 |
netstat -an | grep * |
3.查看进程
1 |
ps aux | grep * |
4.看错误日志
1 |
tail -f /var/log/messages |
Linux 常用查看设备命令
1.系统相关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
uname -a 查看内核/操作系统/CPU信息 head -n 1 /etc/issue 查看操作系统版本 cat /proc/cpuinfo 查看CPU信息 hostname 查看计算机名 lspci -tv 列出所有PCI设备 lsusb -tv 列出所有USB设备 lsmod 列出加载的内核模块 env 查看环境变量 资源 free -m 查看内存使用量和交换区使用量 df -h 查看各分区使用情况 du -sh <目录名> 查看指定目录的大小 grep MemTotal /proc/meminfo 查看内存总量 grep MemFree /proc/meminfo 查看空闲内存量 uptime 查看系统运行时间、用户数、负载 cat /proc/loadavg 查看系统负载 磁盘和分区 mount | column -t 查看挂接的分区状态 fdisk -l 查看所有分区 swapon -s 查看所有交换分区 hdparm -i /dev/hda 查看磁盘参数(仅适用于IDE设备) dmesg | grep IDE 查看启动时IDE设备检测状况 |
2.网络相关
1 2 3 4 5 6 |
ifconfig 查看所有网络接口的属性 iptables -L 查看防火墙设置 route -n 查看路由表 netstat -lntp 查看所有监听端口 netstat -antp 查看所有已经建立的连接 netstat -s 查看网络统计信息 |
3.进程相关
1 2 |
ps -ef 查看所有进程 top 实时显示进程状态 |
4.用户相关
1 2 3 4 5 6 7 8 |
w 查看活动用户 id <用户名> 查看指定用户信息 last 查看用户登录日志 cut -d: -f1 /etc/passwd 查看系统所有用户 cut -d: -f1 /etc/group 查看系统所有组 crontab -l 查看当前用户的计划任务 服务 chkconfig --list 列出所有系统服务 chkconfig --list | grep on 列出所有启动的系统服务 |
常用解压命令
tar.bz2 命令: tar -jxvf *.tar.bz2
tar.z 命令: tar -zxvf *.tar.z
tar.gz 命令: tar -Zxvf *.tar.gz
PS:关于这些参数你可以用man 帮助,注意区分大小写.
大多以tar.gz 和tar.bz2打包软件,大多是通过 ./configure ;make ;make install 来安装的;有的软件是直接make;make install
常用压缩命令
压缩:tar -j c v -f filename.tar.bz2 要被压缩的档案或目录名称
查询:tar -j t v -f filename.tar.bz2
解压缩:tar -j x v -f filename.tar.bz2 -C 欲解压缩的目录
常用开关机命令
关机命令:
shutdown 在root权限才可以
init 0
重启命令:
init 1
reboot
目录命令
切换目录:cd 想切换的目录
常看当前目录:pwd
查看该目录下的文件:ls
[root@tsai bin]# ls --color 以彩色显示档案资料
[root@tsai bin]# ls -l 详细列出档案系统结构
[root@tsai bin]# ls -a 显示隐藏档(以"."开头的档案)
[root@tsai bin]# ls -al 同时显示隐藏档与详细资料
[root@tsai bin]# ls -al|more 将档案内容以一页一页显示
创建新目录:mkdir 新目录名称
删除目录:rmdir 目录名称
如果目录有东西,使用 rm -rf 文件目录
文件命令:
覆盖原文件的复制:cp -rf 源文件 目标文件
覆盖原文件的移动:mv -i 源文件 目标文件
查看文件内容:cat
比较两个文件不同:diff
查找文件命令:
查找ls命令目录:whereis ls
查找带test的文件:find | grep 'test'
网络命令:
查看80端口占用情况:netstat -anp | grep 80
下载命令:wget http://example.com/packages/
批量下载的情形:wget -i filename.txt
把链接地址存在filename.txt里面
查看ip等信息:ifconfig
rmp类的软件使用;
安装:rpm -i your-package.rpm
查询安装的pcre的包: rpm -qa | grep pcre
删除pcre的包:rpm -e --nodeps pcre-6.6-2.el5_1.7
升级:rpm -Uvh xxxxx.rpm <==将xxxxx.rpm升级
Linux防火墙的关闭和开启
1) 重启后生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
2) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
查杀命令
查杀命令:查找相关进程:ps aux | grep program_filter_word
查杀命令:killall -9 nginx //杀掉nginx进程
查看网站的服务器情况:curl --head www.sohu.com
其他命令:
yum安装软件:yum install autoconf
添加apache开机自启:
echo "/usr/local/apache/bin/apachectl start" >> /etc/rc.local
1.删除0字节文件
find -type f -size 0 -exec rm -rf {} \;
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 -i '/Root/s/no/yes/' /etc/ssh/sshd_config sed在这个文里Root的一行,匹配Root一行,将no替换成yes.
7.1.如何杀掉mysql进程:
ps aux |grep mysql |grep -v grep |awk '{print $2}' |xargs kill -9 (从中了解到awk的用途)
killall -TERM mysqld
kill -9 `cat /usr/local/apache2/logs/httpd.pid` 试试查杀进程PID
8.显示运行3级别开启的服务:
ls /etc/rc3.d/S* |cut -c 15- (从中了解到cut的用途,截取数据)
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.
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的文件的大小,写了个shell给他来统计.原来用xargs实现,但他一次处理一部分,搞的有多个总和....,下面的命令就能解决啦.
find / -name *.jpg -exec wc -c {} \;|awk '{print $1}'|awk '{a+=$1}END{print a}'
CPU的数量(多核算多个CPU,cat /proc/cpuinfo |grep -c processor)越多,系统负载越低,每秒能处理的请求数也越多。
16 CPU负载 # cat /proc/loadavg
检查前三个输出值是否超过了系统逻辑CPU的4倍。
18 CPU负载 #mpstat 1 1
检查%idle是否过低(比如小于5%)
19 内存空间 # free
检查free值是否过低 也可以用 # cat /proc/meminfo
20 swap空间 # free
检查swap used值是否过高 如果swap used值过高,进一步检查swap动作是否频繁:
# vmstat 1 5
观察si和so值是否较大
21 磁盘空间 # df -h
检查是否有分区使用率(Use%)过高(比如超过90%) 如发现某个分区空间接近用尽,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录:
# du -cks * | sort -rn | head -n 10
22 磁盘I/O负载 # iostat -x 1 2
检查I/O使用率(%util)是否超过100%
23 网络负载 # sar -n DEV
检查网络流量(rxbyt/s, txbyt/s)是否过高
24 网络错误 # netstat -i
检查是否有网络错误(drop fifo colls carrier) 也可以用命令:# cat /proc/net/dev
25 网络连接数目 # netstat -an | grep -E “^(tcp)” | cut -c 68- | sort | uniq -c | sort -n
26 进程总数 # ps aux | wc -l
检查进程个数是否正常 (比如超过250)
27 可运行进程数目 # vmwtat 1 5
列给出的是可运行进程的数目,检查其是否超过系统逻辑CPU的4倍
28 进程 # top -id 1
观察是否有异常进程出现
29 网络状态 检查DNS, 网关等是否可以正常连通
30 用户 # who | wc -l
检查登录用户是否过多 (比如超过50个) 也可以用命令:# uptime
31 系统日志 # cat /var/log/rflogview/*errors
检查是否有异常错误记录 也可以搜寻一些异常关键字,例如:
# grep -i error /var/log/messages
# grep -i fail /var/log/messages
32 核心日志 # dmesg
检查是否有异常错误记录
33 系统时间 # date
检查系统时间是否正确
34 打开文件数目 # lsof | wc -l
检查打开文件总数是否过多
35 日志 # logwatch –print 配置/etc/log.d/logwatch.conf,将 Mailto 设置为自己的email 地址,启动mail服务(sendmail或者postfix),这样就可以每天收到日志报告了。
缺省logwatch只报告昨天的日志,可以用# logwatch –print –range all 获得所有的日志分析结果。
可以用# logwatch –print –detail high 获得更具体的日志分析结果(而不仅仅是出错日志)。
36.杀掉80端口相关的进程
lsof -i :80|grep -v "ID"|awk '{print "kill -9",$2}'|sh
37.清除僵死进程。
ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
38.tcpdump 抓包 ,用来防止80端口被人攻击时可以分析数据
# tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts
39.然后检查IP的重复数 并从小到大排序 注意 "-t\ +0" 中间是两个空格
# less pkts | awk {'printf $3"\n"'} | cut -d. -f 1-4 | sort | uniq -c | awk {'printf $1" "$2"\n"'} | sort -n -t\ +0
40.查看有多少个活动的php-cgi进程
netstat -anp | grep php-cgi | grep ^tcp | wc -l
41.查看系统自启动的服务
chkconfig --list | awk '{if ($5=="3:on") print $1}'
42.kudzu查看网卡型号
kudzu --probe --class=network
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
评注:匹配中文还真是个头疼的事,有了这个表达式就好办了
匹配双字节字符(包括汉字在内):[^\x00-\xff]
评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
匹配空白行的正则表达式:\n\s*\r
评注:可以用来删除空白行
匹配HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? />
评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力
匹配首尾空白字符的正则表达式:^\s*|\s*$
评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式
匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
评注:表单验证时很实用
匹配网址URL的正则表达式:[a-zA-z]+://[^\s]*
评注:网上流传的版本功能很有限,上面这个基本可以满足需求
匹配帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
评注:表单验证时很实用
匹配国内电话号码:\d{3}-\d{8}|\d{4}-\d{7}
评注:匹配形式如 0511-4405222 或 021-87888822
匹配腾讯QQ号:[1-9][0-9]{4,}
评注:腾讯QQ号从10000开始
匹配中国邮政编码:[1-9]\d{5}(?!\d)
评注:中国邮政编码为6位数字
匹配身份证:\d{15}|\d{18}
评注:中国的身份证为15位或18位
匹配ip地址:\d+\.\d+\.\d+\.\d+
评注:提取ip地址时有用
匹配特定数字:
^[1-9]\d*$ //匹配正整数
^-[1-9]\d*$ //匹配负整数
^-?[1-9]\d*$ //匹配整数
^[1-9]\d*|0$ //匹配非负整数(正整数 + 0)
^-[1-9]\d*|0$ //匹配非正整数(负整数 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ //匹配正浮点数
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ //匹配负浮点数
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ //匹配浮点数
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮点数(负浮点数 + 0)
评注:处理大量数据时有用,具体应用时注意修正
匹配特定字符串:
^[A-Za-z]+$ //匹配由26个英文字母组成的字符串
^[A-Z]+$ //匹配由26个英文字母的大写组成的字符串
^[a-z]+$ //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$ //匹配由数字和26个英文字母组成的字符串
^\w+$ //匹配由数字、26个英文字母或者下划线组成的字符串
评注:最基本也是最常用的一些表达式
1、linux启动过程
开启电源 --> BIOS开机自检 --> 引导程序lilo或grub --> 内核的引导(kernel boot)--> 执行init(rc.sysinit、rc)--> mingetty(建立终端) --> Shell
2、网卡绑定多ip
# ifconfig eth0:1 192.168.1.99 netmask 255.255.255.0
3、设置DNS、网关
# echo "nameserver 202.16.53.68" >> /etc/resolv.conf # route add default gw 192.168.1.1
4、弹出、收回光驱
# eject # eject -t
5、用date查询昨天的日期
# date --date=yesterday
6、查询file1里面空行的所在行号
# grep ^$ file
7、查询file1以abc结尾的行
# grep abc$ file1
8、打印出file1文件第1到第三行
# sed -n '1,3p' file1 # head -3 file1
9、清空文件
# true > 1.txt # echo "" > 1.txt # > 1.txt # cat /dev/null > 1.txt
10、删除所有空目录
# find /data -type d -empty -exec rm -rf {} ;
11、linux下批量删除空文件(大小等于0的文件)的方法
# find /data -type f -size 0c -exec rm -rf {} ; # find /data -type f -size 0c|xargs rm –f
12、删除五天前的文件
# find /data -mtime +5 -type f -exec rm -rf {} ;
13、删除两个文件重复的部份,打印其它
# cat 1.txt 3.txt |sort |uniq
14、攻取远程服务器主机名
# echo `ssh $IP cat /etc/sysconfig/network|awk -F = '/hostname/ {print $2}'`
15、实时监控网卡流量(安装iftop)
# /usr/local/iftop/sbin/iftop -i eth1 -n
16、查看系统版本
# lsb_release -a
17、强制踢出登陆用户
# pkill -kill -t pts/1
18、tar增理备份、还原
# tar -g king -zcvf kerry_full.tar.gz kerry # tar -g king -zcvf kerry_diff_1.tar.gz kerry # tar -g king -zcvf kerry_diff_2.tar.gz kerry # tar -zxvf kerry_full.tar.gz # tar -zxvf kerry_diff_1.tar.gz # tar -zxvf kerry_diff_2.tar.gz
19、将本地80端口的请求转发到8080端口,当前主机外网IP为202.96.85.46
-A PREROUTING -d 202.96.85.46 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.9.10:8080
20、在11月份内,每天的早上6点到12点中,每隔2小时执行一次/usr/bin/httpd.sh
# crontab -e 0 6-12/2 * 11 * /usr/bin/httpd.sh
21、查看占用端口8080的进程
# netstat -tnlp | grep 8080 lsof -i:8080
22、在Shell环境下,如何查看远程Linux系统运行了多少时间?
# ssh user@被监控主机ip "uptime"
23、查看CPU使用情况的命令
每5秒刷新一次,最右侧有CPU的占用率的数据 # vmstat 5 top 然后按Shift+P,按照进程处理器占用率排序 # top
24、查看内存使用情况的命令
用free命令查看内存使用情况 # free -m top 然后按Shift+M, 按照进程内存占用率排序 # top
25、查看磁盘i/o
用iostat查看磁盘/dev/sdc3的磁盘i/o情况,每两秒刷新一次 # iostat -d -x /dev/sdc3 2
26、修复文件系统
# fsck –yt ext3 / -t 指定文件系统 -y 对发现的问题自动回答yes
27、read 命令5秒后自动退出
# read -t 5
28、grep -E -P 是什么意思
-E, --extended-regexp 采用扩展正规表达式。 -P,--perl-regexp 采用perl正规表达式
29、vi编辑器(涉及到修改,添加,查找)
插入(insert)模式
i 光标前插入 I 光标行首插入 a 光标后插入 A 光标行尾插入 o 光标所在行下插入一行,行首插入 O 光标所在行上插入一行,行首插入 G 移至最后一行行首 nG 移至第n行行首 n+ 下移n行,行首 n- 上移n行,行首 :/str/ 从当前往右移动到有str的地方 :?str? 从当前往左移动到有str的地方 :s/str1/str2/ 将找到的第一个str1替换为str2 :s/str2/str2/g 将当前行找到的所有str1替换为str2 :n1,n2s/str1/str2/g 将从n1行至n2行找到的所有的str1替换为str2 :1,.s/str1/str2/g 将从第1行至当前行的所有str1替换为str2 :.,$s/str1/str2/g 将从当前行至最后一行的所有str1替换为str2
30、linux服务器之间相互复制文件
copy 本地文件1.sh到远程192.168.9.10服务器的/data/目录下 # scp /etc/1.sh [email protected]:/data/ copy远程192.168.9.10服务器/data/2.sh文件到本地/data/目录 # scp [email protected]:/data/2.sh /data/
31、使用sed命令把test.txt文件的第23行的TEST换成TSET.
# sed -i '23s/TEST/TSET/' test.txt # sed -i '23 s/TEST/TSET/' test.txt
32、使history命令能显示时间
# export HISTTIMEFORMAT="%F %T "
33、如何查看目标主机192.168.0.1开放那些端口
# nmap -ps 192.168.0.1
34、如何查看网络连接
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
35、如何查看当前系统使用了那些库文件
# ldconfig -v
36、如何查看网卡的驱动版本
# ethtool -i eth0
37、使用tcpdump来监视主机192.168.0.1的tcp的80端口
# tcpdump tcp port 80 host 192.168.0.1
38、 如何看其它用户的邮件列表
# mial -u king
39、对大文件进行切割
按每个文件1000行来分割 # split -l 1000 httperr8007.log httperr 按照每个文件5m来分割 # split -b 5m httperr8007.log httperr
40、合并文件
取出两个文件的并集(重复的行只保留一份) # cat file1 file2 | sort | uniq 取出两个文件的交集(只留下同时存在于两个文件中的文件) # cat file1 file2 | sort | uniq -d 删除交集,留下其他的行 # cat file1 file2 | sort | uniq –u
41、打印文本模式下运行的服务
# chkconfig --list|awk '$5~/on/{print $1,$5}'
42、删除0字节文件
# find -type f -size 0 -exec rm -rf {} ;
43、查看进程,按内存从大到小排列
# ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
44、查看http的并发请求数及其TCP连接状态
# netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
45、获取IP地址
# ifconfig eth0|sed -n '2p'|awk '{print $2}'|cut -c 6-30 perl实现获取IP地址: # ifconfig -a | perl -ne 'if ( m/^s*inet (?:addr:)?([d.]+).*?cast/ ) { print qq($1n); exit 0; }'
46、获取内存大小
# free -m |grep "Mem" | awk '{print $2}'
47、查看CPU核心数
# cat /proc/cpuinfo |grep -c processor
48、查看磁盘使用情况
# df -h
49、查看有多少个活动的PHP-cgi进程
# netstat -anp | grep php-cgi | grep ^tcp | wc -l
50、查看硬件制造商
# dmidecode -s system-product-name
系统连接状态篇:
1.查看TCP连接状态
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn netstat -n | awk '/^tcp/ {++S[$NF]};END {for(a in S) print a, S[a]}' 或 netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key,"t",state[key]}' netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k,"t",arr[k]}' netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
2.查找请求数请20个IP(常用于查找攻来源):
netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n20
3.用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
4.查找较多time_wait连接
netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
5.找查较多的SYN连接
netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
6.根据端口列进程
netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
网站日志分析篇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}'
2.访问次数最多的文件或页面,取前20
cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
3.列出传输最大的几个exe文件(分析下载站的时候常用)
cat access.log |awk '($7~/.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20
4.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
cat access.log |awk '($10 > 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
5.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
6.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
cat access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
7.列出传输时间超过 30 秒的文件
cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
8.统计网站流量(G)
cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
9.统计404的连接
awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort
10. 统计http status
cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}' cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
10.蜘蛛分析,查看是哪些蜘蛛在抓取内容。
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
网站日分析2(Squid篇)按域统计流量
zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%st%dn",domain,trfc[domain]}}'
数据库篇
1.查看数据库执行的sql
/usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
系统Debug分析篇
1.调试命令
strace -p pid
2.跟踪指定进程的PID
gdb -p pi
在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要。在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况。运行 top 命令后,CPU 使用状态会以全屏的方式显示,并且会处在对话的模式 -- 用基于 top 的命令,可以控制显示方式等等。退出 top 的命令为 q (在 top 运行中敲 q 键一次)。
操作实例:
在命令行中输入 “top”
即可启动 top
top 的全屏对话模式可分为3部分:系统信息栏、命令输入栏、进程列表栏。
第一部分 -- 最上部的 系统信息栏 :
第一行(top):
“00:11:04”为系统当前时刻;
“3:35”为系统启动后到现在的运作时间;
“2 users”为当前登录到系统的用户,更确切的说是登录到用户的终端数 -- 同一个用户同一时间对系统多个终端的连接将被视为多个用户连接到系统,这里的用户数也将表现为终端的数目;
“load average”为当前系统负载的平均值,后面的三个值分别为1分钟前、5分钟前、15分钟前进程的平均数,一般的可以认为这个数值超过 CPU 数目时,CPU 将比较吃力的负载当前系统所包含的进程;
第二行(Tasks):
“59 total”为当前系统进程总数;
“1 running”为当前运行中的进程数;
“58 sleeping”为当前处于等待状态中的进程数;
“0 stoped”为被停止的系统进程数;
“0 zombie”为被复原的进程数;
第三行(Cpus):
分别表示了 CPU 当前的使用率;
第四行(Mem):
分别表示了内存总量、当前使用量、空闲内存量、以及缓冲使用中的内存量;
第五行(Swap):
表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
第二部分 -- 中间部分的内部命令提示栏:
top 运行中可以通过 top 的内部命令对进程的显示方式进行控制。内部命令如下表:
s
- 改变画面更新频率
l - 关闭或开启第一部分第一行 top 信息的表示
t - 关闭或开启第一部分第二行 Tasks 和第三行 Cpus 信息的表示
m - 关闭或开启第一部分第四行 Mem 和 第五行 Swap 信息的表示
N - 以 PID 的大小的顺序排列表示进程列表(第三部分后述)
P - 以 CPU 占用率大小的顺序排列进程列表 (第三部分后述)
M - 以内存占用率大小的顺序排列进程列表 (第三部分后述)
h - 显示帮助
n - 设置在进程列表所显示进程的数量
q - 退出 top
s -
改变画面更新周期
第三部分 -- 最下部分的进程列表栏:
以 PID 区分的进程列表将根据所设定的画面更新时间定期的更新。通过 top 内部命令可以控制此处的显示方式
在Linux下查看内存我们一般用free命令:
[root@scs-2 tmp]# free
total used free shared buffers cached
Mem: 3266180 3250004 16176 0 110652 2668236
-/+ buffers/cache: 471116 2795064
Swap: 2048276 80160 1968116
下面是对这些数值的解释:
total:总计物理内存的大小。
used:已使用多大。
free:可用有多少。
Shared:多个进程共享的内存总额。
Buffers/cached:磁盘缓存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解释了。
区别:第二行(mem)的used/free与第三行(-/+ buffers/cache) used/free的区别。 这两个的区别在于使用的角度来看,第一行是从OS的角度来看,因为对于OS,buffers/cached 都是属于被使用,所以他的可用内存是16176KB,已用内存是3250004KB,其中包括,内核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是从应用程序角度来看,对于应用程序来说,buffers/cached 是等于可用的,因为buffer/cached是为了提高文件读取的性能,当应用程序需在用到内存的时候,buffer/cached会很快地被回收。
所以从应用程序的角度来说,可用内存=系统free memory+buffers+cached。
如上例:
2795064=16176+110652+2668236
接下来解释什么时候内存会被交换,以及按什么方交换。 当可用内存少于额定值的时候,就会开会进行交换。
如何看额定值:
cat /proc/meminfo
[root@scs-2 tmp]# cat /proc/meminfo
MemTotal: 3266180 kB
MemFree: 17456 kB
Buffers: 111328 kB
Cached: 2664024 kB
SwapCached: 0 kB
Active: 467236 kB
Inactive: 2644928 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 3266180 kB
LowFree: 17456 kB
SwapTotal: 2048276 kB
SwapFree: 1968116 kB
Dirty: 8 kB
Writeback: 0 kB
Mapped: 345360 kB
Slab: 112344 kB
Committed_AS: 535292 kB
PageTables: 2340 kB
VmallocTotal: 536870911 kB
VmallocUsed: 272696 kB
VmallocChunk: 536598175 kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2048 kB
用free -m查看的结果:
[root@scs-2 tmp]# free -m
total used free shared buffers cached
Mem: 3189 3173 16 0 107 2605
-/+ buffers/cache: 460 2729
Swap: 2000 78 1921
查看/proc/kcore文件的大小(内存镜像):
[root@scs-2 tmp]# ll -h /proc/kcore
-r-------- 1 root root 4.1G Jun 12 12:04 /proc/kcore
备注:
占用内存的测量
测量一个进程占用了多少内存,linux为我们提供了一个很方便的方法,/proc目录为我们提供了所有的信息,实际上top等工具也通过这里来获取相应的信息。
/proc/meminfo 机器的内存使用信息
/proc/pid/maps pid为进程号,显示当前进程所占用的虚拟地址。
/proc/pid/statm 进程所占用的内存
[root@localhost ~]# cat /proc/self/statm
654 57 44 0 0 334 0
输出解释
CPU 以及CPU0。。。的每行的每个参数意思(以第一行为例)为:
参数 解释 /proc//status
Size (pages) 任务虚拟地址空间的大小 VmSize/4
Resident(pages) 应用程序正在使用的物理内存的大小 VmRSS/4
Shared(pages) 共享页数 0
Trs(pages) 程序所拥有的可执行虚拟内存的大小 VmExe/4
Lrs(pages) 被映像到任务的虚拟内存空间的库的大小 VmLib/4
Drs(pages) 程序数据段和用户态的栈的大小 (VmData+ VmStk )4
dt(pages) 04
查看机器可用内存
/proc/28248/>free
total used free shared buffers cached
Mem: 1023788 926400 97388 0 134668 503688
-/+ buffers/cache: 288044 735744
Swap: 1959920 89608 1870312
我们通过free命令查看机器空闲内存时,会发现free的值很小。这主要是因为,在linux中有这么一种思想,内存不用白不用,因此它尽可能的cache和buffer一些数据,以方便下次使用。但实际上这些内存也是可以立刻拿来使用的。
所以 空闲内存=free+buffers+cached=total-used
top命令 是Linux下常用的性能 分析工具 ,能够实时显示系统 中各个进程的资源占用状况,类似于Windows的任务管理 器。下面详细介绍它的使用方法。
top - 02:53:32 up 16 days, 6:34, 17 users, load average: 0.24, 0.21, 0.24
Tasks: 481 total, 3 running, 474 sleeping, 0 stopped, 4 zombie
Cpu(s): 10.3%us, 1.8%sy, 0.0%ni, 86.6%id, 0.5%wa, 0.2%hi, 0.6%si, 0.0%st
Mem: 4042764k total, 4001096k used, 41668k free, 383536k buffers
Swap: 2104472k total, 7900k used, 2096572k free, 1557040k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
32497 jacky 20 0 669m 222m 31m R 10 5.6 29:27.62 firefox
4788 yiuwing 20 0 257m 18m 13m S 5 0.5 5:42.44 konsole
5657 Liuxiaof 20 0 585m 159m 30m S 4 4.0 5:25.06 firefox
4455 xiefc 20 0 542m 124m 30m R 4 3.1 7:23.03 firefox
6188 Liuxiaof 20 0 191m 17m 13m S 4 0.5 0:01.16 konsole
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
01:06:48 当前时间
up 1:22 系统运行 时间,格式为时:分
1 user 当前登录用户 数
load average: 0.06, 0.60, 0.48 系统负载 ,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核 空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi
0.0% si
最后两行为内存 信息。内容如下:
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存 的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中 的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。
进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境 下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存 百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理 内存大小,单位kb
s DATA 可执行代码以外的部分(数据 段+栈)占用的物理 内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D =不可中断的睡眠状态
R =运行
S =睡眠
T =跟踪/停止
Z =僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h
默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
更改显示内容通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
==============================
top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
<空格>:立刻刷新。
P:根据CPU使用大小进行排序。
T:根据时间、累计时间排序。
q:退出top命令。
m:切换显示内存信息。
t:切换显示进程和CPU状态信息。
c:切换显示命令名称和完整命令行。
M:根据使用内存大小进行排序。
W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。
可以看到,top命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗很多系统资源。
应用实例
使用top命令可以监视指定用户,缺省情况是监视所有用户的进程。如果想查看指定用户的情况,在终端中按“U”键,然后输入用户名,系统就会切换为指定用户的进程运行界面。
a.作用
free命令用来显示内存的使用情况,使用权限是所有用户。
b.格式
free [-b -k -m] [-o] [-s delay] [-t] [-V]
c.主要参数
-b -k -m:分别以字节(KB、MB)为单位显示内存使用情况。
-s delay:显示每隔多少秒数来显示一次内存使用情况。
-t:显示内存总和列。
-o:不显示缓冲区调节列。
d.应用实例
free命令是用来查看内存使用情况的主要命令。和top命令相比,它的优点是使用简单,并且只占用很少的系统资源。通过-S参数可以使用free命令不间断地监视有多少内存在使用,这样可以把它当作一个方便实时监控器。
#free -b -s5
使用这个命令后终端会连续不断地报告内存使用情况(以字节为单位),每5秒更新一次。
#相对路径、绝对路径在所有命令行内通用,在此只提一次 $ cd /home/bookthief/Application # 绝对路径跳转 $ pwd # 显示当前路径 /home/bookthief/Application # pwd 结果 $ cd ./Application # 相对路径跳转 当前目录下有Application子目录 $ cd ../picture # 相对路径跳转 跳转到上级目录下的picture子目录 $ cd # 直接跳转到用户目录 /home/bookthief $ cd - # 跳转回刚跳转前的目录
$ cp file file2 # 文件复制 $ cp -r dir dir2 # 目录复制 $ mv file .. # 将文件移动到上级目录 $ mv file file2 # 将文件重命名 # mv命令 若后一参数为已存在路径,则是移动 $ rm file # 删除文件 目录加 -r 参数 $ touch a.txt # 创建文件 方式1 $ >a.txt # 方式2 $ mkdir dir # 创建目录 $ cat file # 查看文件 方式1 $ less file # 方式2 $ file a.txt # 查看文件类型
$ unzip *.zip # 解压zip文件 $ zip -r name.zip dir # 压缩为zip文件 $ tar zxvf *.tar.gz # 解压tar.gz包 $ tar zcvf name.tar.gz dir # 压缩为tar.gz包 $ tar jxvf *.tar.bz2 # 解压tar.bz2包 $ tar jcvf name.tar.bz2 dir # 压缩为tar.bz2包
这幅图我认为很重要,描述了标准输入文件、标准输出文件、便准错误输出文件。
$ cat file1 > file # 将file1里内容输出重定向到file $ cat file1 >> file # 将file1内容链接到file内容之后 $ cat file1 file2 > file # 将file1和file2内容链接并重定向输出到file $ ls non 2> out.txt # 将标准错误输出重定向到文件
$ cowsay < in.txt # 将in.txt作为参数输入
根据owner、group、world三类用户提供reading、writing、executing三种权限。
$ ls -l file.txt # 查看文件权限 $ ls -ld dir # 查看目录权限
结果前10位依次表示:对象类型、owner's r w x 、group's r w x、world's r w x。
$ chmod 777 file.txt # 通过第1-9位置位进行更改权限 $ chmod u+x file.txt # 直观的修改权限 u == owner $ chmod g-w file.txt # 直观的修改权限 g == group $ chmod o-x file.txt # 直观的修改权限 o == world $ chmod a-x file.txt # 直观的修改权限 a == all
$ ps aux # 查看当先启动的进程 $ kill PID # 根据PID关闭进程 $ prosess & # 可后台运行图形化进程
进程这一部分应该有很多内容,鉴于在初学阶段接触的不多,仅备注这三个命令。
Tips: ctrl + alt + F1 进入纯命令行模式 ctrl + alt + F7 回到图形界面
$ locate file # 直接从数据库中调文件,很快,但每天一更
$ find . -type f -exec ls -l '{}' ';' # find用于超找给定的目录 # -exec 命令用于扩展执行 # '{}' 为结果列表 ‘;’ 为结束标志
特别说明一下,以上内容是观看慕课视频时所作的笔记
在此特别感谢 Peter Wang 所做的视频,以及今天刚发现老师做的网站 HappyCasts
这节暂时有点用不到,留着回头有了自己的VPS再看看
$ ssh [email protected] # 这是我手机上连 kali 用过的命令
$ tar jxvf Dir\ file.tar.bz2 # 手动解压tar包 $ ln -s ~/Dir/file ~/bin/file # 创建软链接 $ ./configure # 源码安装三部曲 $ make $ sudo make install
$ sudo dpkg -i file.deb # deb包安装 $ dpkg -l | grep file # 查看以安装的包 $ dpkg -L p # 查看该包共安装了哪些文件 $ dpkg -S location # 查看该文件来自于哪个包
$ sudo apt-get install file # 这个就不说了 $ sudo apt-get remove file # 删除 $ sudo apt-get purge file # 连同配置文件一同删除 $ apt-cache search ncurse | less # 查询包名
#!/usr/bin/env bash # 制定解析器 python ruby 可选 say_hi() # 命令即语句 { echo "hi" } say_hi $ file.sh a.txt b.txt # $0 - 第一个参数 $# 参数的总个数
一个简单的bash脚本
#!/usr/bin/env bash cd $1 for file in `ls` do mv $file $file.txt done
1.描述linux shell中单引号、双引号及不加引号的简单区别
简要总结:
单引号:
可以说是所见即所得:即将单引号内的内容原样输出,或者描述为单引号里面看到的是什么就会输出什么。
双引号:
把双引号内的内容输出出来;如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来。
不加引号:
不会将含有空格的字符串视为一个整体输出, 如果内容中有命令、变量等,会先把变量、命令解析出结果,然后在输出最终内容来,如果字符串中带有空格等特殊字符,则不能完整的输出,需要改加双引号,一般连续的字符串,数字,路径等可以用。
2. 描述linux运行级别0-6的各自含义
0:关机
1:单用户模式
2:无网络支持的多用户模式
3:有网络支持的多用户模式(文本模式,工作中最常使用的模式)
4:保留,未使用
5:有网络支持有X-Window支持的多用户模式
6:重新引导系统,即重启
3.df 和du 的区别 linux磁盘命令详解
df 命令:通过文件系统中未分配的空间来确定文件系统中已分配空间的大小。例如:如果一个文件系统中有 8192个512-byte 块, 并且4096 个块没有被分配出去,那么已分配的空间就是4096 个512-byte 的块。
已分配空间 = 空间总数 - 未分配空间
因为基于文件系统总体来计算,所以df 命令是报告文件系统空间使用情况最可靠的命令。
du 命令
是面向文件的命令,它计算分配给指定文件或者目录的空间。 du 命令必须跟着目的参数,而且不能隔离文件系统。
例 如:运行 # du / 命令将计算所有在 / 文件系统下所有文件的空间分配信息。其中包括 / 文件系统所有的文件和安装在 / 下面的,例如 /tmp, /var 和 /usr 下面的其他文件系统的文件。可以用 du 命令带 -x 参数来限制仅在文件系统内进行操作。但是有时候会导致输出结果不完全。
du 命令只计算被文件占用的空间。不计算文件系统metadata 占用的空间,如inodes, inode maps, 或者disk maps。
du 命令只计算那些可以访问的文件所占用的存储空间, 有下面两种情况 du 命令不会计算已经分配给文件的空间。
Case1:
文件被隐藏了。
例如:如果一个文件存放在 /bobby 目录下, 接着有文件系统安装在 /bobby 目录下, 那么, du 命令将不会计算 /bobby 目录下的文件所占用的存储空间。
case 2:
文件被其他的应用的打开了,接着文件被删除了。 在这种情况下, 文件所占用的存储空间将维持着被分配的状态直到所有对这个文件的访问都被关闭。由于目录中没有这个文件的相关纪录,du 命令将不会计算这个文件的被分配空间,然而df 命令将计算这部分已分配的空间
4.Linux文件删除原理:
Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除。一般来说,每个文件都有2个link计数器:i_count 和 i_nlink。
i_count的意义是当前文件使用者(或被调用)的数量,i_nlink 的意义是介质连接的数量(硬链接的数量);可以理解为i_count是内存引用计数器,i_nlink是磁盘的引用计数器。
当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加。
对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink。这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容。这又是为什么呢?
这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除。也就是说,还需要解除该进程的对该文件的调用才行。
以上讲的i_nlink及i_count是文件删除的真实条件,但是当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?
前面说了,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了。
5.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r-- 为644,要求使用命令取得644这样的数字。
stat /ett #==>通过stat命令可以看到文件的数字权限
6.描述linux下软链接和硬链接的区别。
在linux系统中,链接分两种 :一种被称为硬链接(Hard Link),另一种被称为符号链接或软链接(Symbolic Link)。
1)默认不带参数情况下,ln命令创建的是硬链接。
2)硬链接文件与源文件的inode节点号相同,而软链接文件的inode节点号与源文件不同。3)ln命令不能对目录创建硬链接,但可以创建软链接,对目录的软链接会经常被用到。
4)删除软链接文件,对源文件及硬链接文件无任何影响;
5)删除文件的硬链接文件,对源文件及软链接文件无任何影响;
6)删除链接文件的原文件,对硬链接文件无影响,会导致其软链接失效(红底白字闪烁状);
7)同时删除原文件及其硬链接文件,整个文件才会被真正的删除。
8)很多硬件设备中的快照功能,使用的就类似硬链接的原理。
9)软连接可以跨文件系统,硬链接不可以跨文件系统。