我的linux总结


增加一个虚IP: ifconfig eth0:1 192.168.0.1 netmask 255.255.255.0

删除虚IP: ip addr del 192.168.0.1 dev eth0

Linux查看进程的所有子进程和线程

得到进程的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

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命令可以去除排序过的文件中的重复行,因此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命令可以从一个文本文件或者文本流中提取文本列。

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

统计文件里面有多少单词,多少行,多少字符。

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 


linux 查看内存CPU使用

top -d 1 | grep -E "^Cpu|^Mem"


linux 文件访问权限说明

举例来说明一下: 
-|rw-|r--|r-- 
1、r代表可读,w表示可写,-表示该文件的所有者没有对文件的执行权限,具有可执行权限则用x表示。 
2、第一个字符是文件类型(文件类型分两种:普通文件和目录文件,若为普通文件,用连字号-表示;若为目录文件就用d表示。) 
3、剩下的字符表示对文件的访问权限 
4、第一个字符的后3个字符表示文件所有者对文件的访问权限。 
5、后续3个字符表示组成员用户对文件的访问权限。 
6、再后续的3个字符为文件的其他用户对文件的访问权限。



linux 目录作用

/ 根目录 在所有的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

Linux运维常用命令总结 


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个英文字母或者下划线组成的字符串

评注:最基本也是最常用的一些表达式

linux下常用一句话


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

linux网络命令

系统连接状态篇:

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


Linux查看CPU和内存使用情况

在系统维护的过程中,随时可能有需要查看 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命令

#相对路径、绝对路径在所有命令行内通用,在此只提一次

$ 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包

重定向

重定向 
图片转自慕课网

这幅图我认为很重要,描述了标准输入文件、标准输出文件、便准错误输出文件。

I、输出重定向

$ cat file1 > file                      # 将file1里内容输出重定向到file
$ cat file1 >> file                     # 将file1内容链接到file内容之后
$ cat file1 file2 > file                # 将file1和file2内容链接并重定向输出到file

$ ls non 2> out.txt                     # 将标准错误输出重定向到文件

II、输入重定向

$ 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                           # 直接从数据库中调文件,很快,但每天一更

Locate 
图片转自慕课网

$ find . -type f -exec ls -l '{}' ';'   # find用于超找给定的目录
                                        # -exec 命令用于扩展执行 
                                        # '{}' 为结果列表  ‘;’ 为结束标志

特别说明一下,以上内容是观看慕课视频时所作的笔记 
在此特别感谢 Peter Wang 所做的视频,以及今天刚发现老师做的网站 HappyCasts

网络操作

这节暂时有点用不到,留着回头有了自己的VPS再看看

SSH

$ ssh [email protected]             # 这是我手机上连 kali 用过的命令

rsync

安装软件

I、手动安装

$ tar jxvf Dir\  file.tar.bz2           # 手动解压tar包
$ ln -s ~/Dir/file ~/bin/file           # 创建软链接

$ ./configure                           # 源码安装三部曲
$ make
$ sudo make install

II、deb包安装

$ sudo dpkg -i file.deb                 # deb包安装
$ dpkg -l | grep file                   # 查看以安装的包

$ dpkg -L p                             # 查看该包共安装了哪些文件
$ dpkg -S location                      # 查看该文件来自于哪个包

III、apt-get 软件仓库

$ 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)软连接可以跨文件系统,硬链接不可以跨文件系统。

你可能感兴趣的:(我的linux总结)