linux常用命令与问题排查命令记录

文章目录

    • 1. 硬件相关
      • 1.1 网卡
      • 1.2 内存
        • 1.2.1 free - 查看系统内存信息
          • 1.2.1.1 使用方式
          • 1.2.1.2 举例说明
        • 1.2.2 vmstat - 虚拟内存统计
          • 1.2.2.1 使用方式
          • 1.2.2.2 举例说明
            • 1.2.2.2.1 显示虚拟内存的使用情况
            • 1.2.2.2.2 显示活跃和非活跃内存
            • 1.2.2.2.3 查看内存使用的详细信息
      • 1.3 numa
      • 1.4 超线程
      • 1.5 时钟源
      • 1.6 raid
      • 1.7 文件
      • 1.8 磁盘
        • 1.8.1 iostat - I/O信息统计
          • 1.8.1.1 使用方式
          • 1.8.1.2 举例说明
            • 1.8.1.2.1 显示所有设备的负载情况
            • 1.8.1.2.2 定时显示所有信息
            • 1.8.1.2.3 只显示磁盘统计信息
            • 1.8.1.2.4 查看扩展信息
            • 1.8.1.2.5 只查看CPU的统计信息
        • 1.8.2 iotop - 动态显示磁盘I/O统计信息
          • 1.8.2.1 使用方式
          • 1.8.2.2 举例说明
      • 1.9 sn
      • 1.10 CPU
        • 1.10.1 mpstat - CPU信息统计
          • 1.10.1.1 使用方式
          • 1.10.1.2 举例说明
            • 1.10.1.2.1 显示CPU信息统计
            • 1.10.1.2.2 显示指定CPU信息的统计
      • 1.11 sar - 收集系统信息
        • 1.11.1 使用方式
        • 1.11.2 举例说明
          • 1.11.2.1 查看系统CPU的整体负载情况
          • 1.11.2.2 显示运行队列的大小
          • 1.11.2.3 显示系统内存的使用状况
          • 1.11.2.4 显示缓冲区的使用情况
          • 1.11.2.5 显示网络的运行状态
          • 1.11.2.6 查看系统磁盘的读写性能
    • 2. 容器相关
      • 2.1 docker
      • 2.2 kubernetes
    • 3. 快捷方式
      • 3.1 切屏
      • 3.2 命令行快捷方式
      • 3.3 vim快捷方式
    • 4. 问题排查相关
      • 4.1 进程管理命令
        • 4.1.1 ps - 查看进程
          • 4.1.1.1 使用方式
          • 4.1.1.2 命令输出后第一行参数的解释说明
        • 4.1.2 kill - 结束进程
          • 4.1.2.1 使用方式
          • 4.1.2.2 举例说明
            • 4.1.2.2.1 列出所有信号的名称
            • 4.1.2.2.2 终止进程
        • 4.1.3 killall - 通过进程名终止进程
          • 4.1.3.1 使用方式
          • 4.1.3.2 举例说明
            • 4.1.3.2.1 终止定时任务服务进程
            • 4.1.3.2.2 终止指定用户的所有进程
        • 4.1.4 pkill - 通过进程名终止进程
          • 4.1.4.1 使用方式
          • 4.1.4.2 举例说明
            • 4.1.4.2.1 通过进程名终止进程
            • 4.1.4.2.2 通过终端名终止进程
            • 4.1.4.2.3 通过用户名终止进程
        • 4.1.5 top - 实时显示系统中各个进程的资源占用状况
          • 4.1.5.1 使用方式
          • 4.1.5.2 举例说明
            • 4.1.5.2.1 显示进程信息
            • 4.1.5.2.2 将进程按照使用内存排序
            • 4.1.5.2.3 以批处理模式显示进程信息
            • 4.1.5.2.4 显示进程的完整路径
            • 4.1.5.2.5 其他使用补充
        • 4.1.6 nohup - 用户退出系统进程继续工作
          • 4.1.6.1 使用方式
          • 4.1.6.2 举例说明
        • 4.1.7 strace - 跟踪进程的系统调用
          • 4.1.7.1 使用方式
          • 4.1.7.2 举例说明
            • 4.1.7.2.1 排查Nginx 403 forbidden错误
            • 4.1.7.2.2 只跟踪与文件操作有关的系统调用(使用过滤器)
            • 4.1.7.2.3 通过pid跟踪进程
            • 4.1.7.2.4 跟踪系统调用统计
            • 4.1.7.2.5 重定向输出
            • 4.1.7.2.6 对系统调用进行计时
        • 4.1.8 ltrace - 跟踪进程调用库函数
          • 4.1.8.1 使用方式
          • 4.1.8.2 举例说明
    • 5. 网络相关
      • 5.1 tcpdump - 监听网络流量
        • 5.1.1 使用方式
        • 5.1.2 举例说明
          • 5.1.2.1 不加参数运行tcpdump命令监听网络
          • 5.1.2.2 精简输出信息
          • 5.1.2.3 监听指定网卡收到的数据包
          • 5.1.2.4 监听指定主机的数据包
          • 5.1.2.5 监听指定端口的数据包
          • 5.1.2.6 监听指定协议的数据包
          • 5.1.2.7 利用tcpdump抓包详解tcp/ip连接和断开过程的案例
      • 5.2 nmap - 网络探测工具和安全/端口扫描器
        • 5.2.1 使用方式
        • 5.2.2 举例说明
          • 5.2.2.1 查看主机当前开放的端口
          • 5.2.2.2 扫描主机的指定端口
          • 5.2.2.3 扫描局域网内所有的IP
          • 5.2.2.4 探测目标主机的服务和操作系统的版本

1. 硬件相关

1.1 网卡

lspci | grep -i eth		#查询网卡信息,可查询网卡数量,型号等
ethtool ethX 		 	#查询eth*网口基本信息
ethtool –i ethX     	#查询ethX网口的相关信息
ethtool –d ethX   		#查询ethX网口注册性信息
ethtool –S ethX  		#查询ethX网口收发包统计
dmesg | grep -i eth

//更改网卡名:前提网卡down掉且onboot=yes
ip link set [$现在的名字] name [$预期的名字]	#重启会失效

//查询网口对应的交换机口
tcpdump -i eth0 -c 1 -n -e -v ether proto 0x88cc 2>/dev/null | egrep 'Subtype Interface Name|System Name'|awk -F':' '{print $2}'

1.2 内存

1.2.1 free - 查看系统内存信息
1.2.1.1 使用方式
参数选项 解释说明
-b 以Byte为单位显示内存的使用情况
-m 以MB为单位显示内存的使用情况@
-K 以KB为单位显示内存的使用情况
-h 以人类可读的形式显示内存的使用情况@
-t 显示内存总和列
-s <间隔秒数> 根据指定的间隔秒数持续显示内存的使用情况@
-o 不显示系统缓冲区列
1.2.1.2 举例说明

(1)查看系统内存

[root@nginx ~]# free  #不加参数默认显示的是字节数,很难读懂
             total       used       free     shared    buffers     cached
Mem:       1004412      85788     918624          0       6168      22904
-/+ buffers/cache:      56716     947696
Swap:      2031608          0    2031608
[root@nginx ~]# free -m   #使用-m选项,以MB为单位显示内存的使用情况
             total       used       free     shared    buffers     cached
Mem:           980         83        897          0          6         22
-/+ buffers/cache:         55        925
Swap:         1983          0       1983

(2)定时查询内存

[root@nginx ~]# free -s 10    #使用-s选项定时刷新内存的使用情况,单位为秒
             total       used       free     shared    buffers     cached
Mem:       1004412      85888     918524          0       6168      22932
-/+ buffers/cache:      56788     947624
Swap:      2031608          0    2031608

(3)检查使用超过100m的进程

cat /proc/slabinfo |awk '{if($3*$4/1024/1024 > 100){print $1,$3*$4/1024/1024} }'
1.2.2 vmstat - 虚拟内存统计
1.2.2.1 使用方式
参数选项 解释说明
-a 显示活跃和非活跃内存
-f 显示从系统启动至今的fork进程数量
-m 显示slab信息
-n 只在开始时显示一次各字段名称
-s 显示内存相关统计信息及多种系统活动数量@
-d 显示磁盘相关统计信息
-p 显示指定磁盘分区统计信息
-S 使用指定单位显示。参数有k,K,m,M,分别代表1000,1024,1000000,1048576字节(byte)。默认单位为K(1024byte)
-t 统计信息带上时间戳
1.2.2.2 举例说明
1.2.2.2.1 显示虚拟内存的使用情况
[root@nginx ~]# vmstat    		#如果省略“间隔时间”和“次数”的参数,则仅显示一次报告后就退出
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 915796   8792  22900    0    0  1188    54  203  474  2  6 90  1  0
[root@nginx ~]# vmstat 5 		#表示每5秒钟更新一次输出信息,循环输出,按Ctrl + C组合键停止输出
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 915796   8792  22928    0    0   343    24   64  144  1  2 97  0  0    
[root@nginx ~]# vmstat 5 6    	#表示每5秒钟更新一次输出信息,统计6次后停止输出
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 915796   8792  22928    0    0   781    53  137  316  1  4 94  1  0
  • 第1列:procs
    • r列表示运行和等待CPU时间片的进程数。
    • b列表示正在等待资源的进程数。
  • 第2列:memory
    • swpd列表示使用虚拟内存的大小。
    • free列表示当前空闲的物理内存数量.
    • buff列表示buffers的内存数量.
    • cache列表示cache的内存数量.
  • 第3列:swap
    • si(swap in)列表示由磁盘调入内存,也就是内存进入内存交换区的数量。
    • so(swap out)列表示由内存调入磁盘,也就是内存交换区进入内存的数量。
  • 第4列:I/O项显示磁盘读写状况
    • bi列表示从块设备读入数据的总量(即读磁盘)(块/s)
    • bo列表示写入块设备的数据总量(即写磁盘))(块/s)
  • 第5列:system显示采集间隔内发生的中断数
    • in列表示在某一时间间隔中观测到的每秒设备中断数。
    • cs列表示每秒产生的上下文切换次数。
  • 第6列:CPU项显示了CPU的使用状态
    • us列显示了用户进程消耗的CPU时间百分比。
    • sy列显示了系统(内核)进程消耗的CPU时间百分比。
    • id列显示了CPU处在空闲状态的时间百分比。
    • wa列显示了I/O等待所占用的CPU时间百分比
    • st列显示了虚拟机占用的CPU时间的百分比。
1.2.2.2.2 显示活跃和非活跃内存
[root@nginx ~]# vmstat -a 2 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 915324  19284  18180    0    0     5     0    6    9  0  0 100  0  0   
 0  0      0 915284  19284  18180    0    0     0     0   10    9  0  0 100  0  0   
 0  0      0 915284  19284  18180    0    0     0     0   10   10  0  0 100  0  0   
 0  0      0 915284  19284  18212    0    0     0     0    9   10  0  0 100  0  0   
 0  0      0 915284  19284  18212    0    0     0     0    9   11  0  0 100  0  0
1.2.2.2.3 查看内存使用的详细信息
[root@nginx ~]# vmstat -s
      1004412  total memory
        89096  used memory
        18196  active memory
        19268  inactive memory
       915316  free memory
         8816  buffer memory
        23244  swap cache
      2031608  total swap
            0  used swap
      2031608  free swap
      ......

这些信息分别来自于/proc/meminfo,/proc/stat和/proc/vmstat

[root@nginx ~]# vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
ram0       0      0       0       0      0      0       0       0      0      0
ram1       0      0       0       0      0      0       0       0      0      0
ram2       0      0       0       0      0      0       0       0      0      0
ram3       0      0       0       0      0      0       0       0      0      0
ram4       0      0       0       0      0      0       0       0      0      0
ram5       0      0       0       0      0      0       0       0      0      0
ram6       0      0       0       0      0      0       0       0      0      0
ram7       0      0       0       0      0      0       0       0      0      0
ram8       0      0       0       0      0      0       0       0      0      0
ram9       0      0       0       0      0      0       0       0      0      0
ram10      0      0       0       0      0      0       0       0      0      0
ram11      0      0       0       0      0      0       0       0      0      0
ram12      0      0       0       0      0      0       0       0      0      0
ram13      0      0       0       0      0      0       0       0      0      0
ram14      0      0       0       0      0      0       0       0      0      0
ram15      0      0       0       0      0      0       0       0      0      0
loop0      0      0       0       0      0      0       0       0      0      0
loop1      0      0       0       0      0      0       0       0      0      0
loop2      0      0       0       0      0      0       0       0      0      0
loop3      0      0       0       0      0      0       0       0      0      0
disk- ------------reads------------ ------------writes----------- -----IO------
       total merged sectors      ms  total merged sectors      ms    cur    sec
loop4      0      0       0       0      0      0       0       0      0      0
loop5      0      0       0       0      0      0       0       0      0      0
loop6      0      0       0       0      0      0       0       0      0      0
loop7      0      0       0       0      0      0       0       0      0      0
sr0       33      0     264      47      0      0       0       0      0      0
sda     2144   1571   70016     659    411    452    6898     277      0      0
dm-0    2786      0   62426    1755    854      0    6832     583      0      0
dm-1     287      0    2296      35      0      0       0       0      0      0

这些信息主要来自于/proc/diskstats。其中的merged表示一次来自于合并的写/读请求,系统一般会把多个连接/邻近的读/写请求合并到一起来操作。

(5)查看/dev/sda1磁盘的读写统计信息

[root@nginx ~]# vmstat -p /dev/sda1
sda1          reads   read sectors  writes    requested writes
                 431       3518          9         66
  • 说明:
  • reads:来自于该分区的读的次数
  • read sectors:来自于该分区的读扇区的次数
  • writes:来自于该分区的写的次数
  • requested writes:来自于该分区的写请求次数。

1.3 numa

lscpu | grep -i numa	#查询numa开关,1为关闭
dmesg | grep -i numa	#同上

1.4 超线程

//检查超线程的开关
grep 'siblings' /proc/cpuinfo
grep 'cpu cores' /proc/cpuinfo
如果“siblings”和“cpu cores”一致,则说明不支持超线程,或者超线程未打开。
如果“siblings”是“cpu cores”的两倍,则说明支持超线程,并且超线程已打开。

1.5 时钟源

chronyc -n sources -v
cat /etc/ntp.conf

1.6 raid

storcli64 /c0 show				#查看磁盘模式与raid
storcli64 /c0/v0 delete			#清空raid组
storcli64 /c0 set jbod=on		#设置jbod
storcli64 /c0/eall/sall show	#显示控制器为0的所有物理磁盘信息

//设置raid模式 = ‘8:4-1’根据环境情况而定
storcli64 /c0 add vd type=raid1 size=all names=t1 drives=8:4-1

1.7 文件

//过滤大文件
find . -type f -size +200M -print | xargs ls -lh

//权限
chmod 755 test				#将文件设置为755权限
chown	admin:admin test	#将文件的属组属主设置为admin

1.8 磁盘

e2label /dev/sda3		#查看磁盘标签
lsblk					#查看磁盘大小,分区,挂载
df -hT					#查看磁盘大小,分区,挂载,格式,使用量
1.8.1 iostat - I/O信息统计
1.8.1.1 使用方式
参数选项 解释说明
-c 显示CPU的使用情况@
-d 显示磁盘的使用情况@
-k 每秒以kB为单位显示数据
-m 每秒以MB为单位显示数据
-n 显示NFS的使用情况
-t 显示每次统计的执行时间
-p device 指定要统计的磁盘设备名称,默认为所有的磁盘设备
-x 显示扩展统计
1.8.1.2 举例说明
1.8.1.2.1 显示所有设备的负载情况
[root@nginx ~]# iostat    #如果省略“时间间隔”和“次数”参数,则仅显示一次报告后就退出
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.02    0.00    0.05    0.01    0.00   99.93

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.02         0.13         0.00       1976          0
sda               0.34        28.21         7.76     445866     122724
dm-0              1.30        27.73         7.76     438306     122664
dm-1              0.02         0.15         0.00       2296          0
  • 以下是命令结果说明
    第1~2行中各列的含义具体如下
  • %user : 用户进程消耗的CPU时间百分比
  • %nice : 改变过优先级的进程占用的CPU时间百分比
  • %system : 系统(内核)进程消耗的CPU时间百分比
  • %iowait : IO等待所占用的CPU时间百分比
  • %steal : 虚拟机强制CPU等待的时间百分比
  • %idle : CPU处在空闲状态的时间百分比
    第3~4行中各列的含义如下
  • tps : 表示该设备每秒的传输次数,“一次传输”的意思是“一次I/O请求”,多个逻辑请求可能会被合并为“一次I/O请求”,“一次传输”请求的大小是未知的。
  • Blk_read/s : 表示每秒读取的数据块数
  • Blk_wrtn/s : 表示每秒写入的数据块数
  • Blk_read : 表示读取的所有块数
  • Blk_wrtn : 表示写入的所有块数
1.8.1.2.2 定时显示所有信息
[root@nginx ~]#  iostat 2 3   #每隔2秒刷新显示一次,共显示3次
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.04    0.00    0.00   99.94

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.02         0.09         0.00       1976          0
sda               0.25        19.82         5.51     445866     123988
dm-0              0.92        19.48         5.51     438306     123928
dm-1              0.01         0.10         0.00       2296          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
dm-0              0.00         0.00         0.00          0          0
dm-1              0.00         0.00         0.00          0          0

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.50    0.00    0.00   99.50

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.00         0.00         0.00          0          0
sda               0.00         0.00         0.00          0          0
dm-0              0.00         0.00         0.00          0          0
dm-1              0.00         0.00         0.00          0          0
1.8.1.2.3 只显示磁盘统计信息
[root@nginx ~]# iostat -d #选项-d只显示磁盘的统计信息
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
scd0              0.02         0.09         0.00       1976          0
sda               0.24        19.50         5.43     445866     124108
dm-0              0.91        19.17         5.42     438306     124048
dm-1              0.01         0.10         0.00       2296          0
[root@nginx ~]# iostat -d -k  #选项-k以KB为单位显示数据
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.02         0.04         0.00        988          0
sda               0.24         9.72         2.70     222933      62054
dm-0              0.91         9.55         2.70     219153      62024
dm-1              0.01         0.05         0.00       1148          0
[root@nginx ~]# iostat -d -m  #选项-m以MB为单位显示数据
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

Device:            tps    MB_read/s    MB_wrtn/s    MB_read    MB_wrtn
scd0              0.02         0.00         0.00          0          0
sda               0.24         0.01         0.00        217         60
dm-0              0.90         0.01         0.00        214         60
dm-1              0.01         0.00         0.00          1          0
1.8.1.2.4 查看扩展信息
[root@nginx ~]# iostat -d -x -k   #选项-x显示扩展信息
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
scd0              0.00     0.00    0.02    0.00     0.04     0.00     5.41     0.00    1.09   1.09   0.00
sda               0.08     0.61    0.18    0.05     9.49     2.65   102.62     0.00    0.79   0.42   0.01
dm-0              0.00     0.00    0.22    0.66     9.33     2.65    27.03     0.01    6.17   0.11   0.01
dm-1              0.00     0.00    0.01    0.00     0.05     0.00     8.00     0.00    0.24   0.13   0.00
  • 命令结果说明
  • rrqm/s:每秒进行merge的读操作数目
  • wrqm/s:每秒进行merge的写操作数目
  • r/s:每秒完成的读I/O设备次数
  • w/s:每秒完成的写I/O设备次数
  • rkB/s:每秒读入的千字节数
  • wkB/s:每秒写入的千字节数
  • avgrq-sz:设备平均每次进行I/O操作的数据大小(扇区)
  • avgqu-sz:平均I/O队列长度
  • await:设备平均每次I/O操作的等待时间(毫秒)
  • svctm:设备平均每次I/O操作的服务时间(毫秒)
  • %util:每秒钟用于I/O操作的百分比
1.8.1.2.5 只查看CPU的统计信息
[root@nginx ~]# iostat -c #使用-c选项只显示系统CPU的统计信息
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.01    0.00    0.04    0.00    0.00   99.95
1.8.2 iotop - 动态显示磁盘I/O统计信息
1.8.2.1 使用方式
参数选项 解释说明
-o 显示正在使用I/O的进程或者线程,默认是显示所有@
-d 设置显示的间隔秒数
-p 只显示指定PID的信息@
-u 显示指定用户的信息
-P 只显示进程,一般是显示所有的线程
-a 显示从iotop启动后每个线程完成了的I/O总数
-k 设置显示单位为KB
-t 在每一行前添加一个当前的时间
1.8.2.2 举例说明
  • 不接任何参数启动iotop命令
[root@nginx ~]# iotop     

Total DISK READ: 0.00 B/s | Total DISK WRITE: 0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND                                                                      
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % init
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    3 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    4 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    5 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    6 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [watchdog/0]
    7 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [events/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [cgroup]
    9 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khelper]
   10 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [netns]
   11 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [async/mgr]
   12 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [pm]
   13 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [sync_supers]
   14 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [bdi-default]
   15 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kintegrityd/0]
   16 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kblockd/0]
   17 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpid]
   18 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpi_notify]
   19 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kacpi_hotplug]
   20 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata_aux]
   21 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ata_sff/0]
   22 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksuspend_usbd]
   23 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [khubd]
   24 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kseriod]
  • 命令结果说明
  • Total DISK READ:总的磁盘读取速度
  • Total DISK WRITE:总的磁盘写入速度
  • TID:进程pid值
  • PRIO:优先级
  • USER:用户
  • DISK READ:磁盘读取速度
  • DISK WRITE:磁盘写入速度
  • SWAPIN:从swap分区读取数据占用的百分比
  • IO:I/O占用的百分比
  • COMMAND:消耗I/O的进程名

1.9 sn

dmidecode |grep "Serial Number"
或
dmidecode -t 1 

1.10 CPU

1.10.1 mpstat - CPU信息统计
1.10.1.1 使用方式
参数选项 解释说明
-P 指定CPU编号,例如:-P 0表示第一个CPU,-P 1表示第二个CPU,-P ALL表示所有CPU
1.10.1.2 举例说明
1.10.1.2.1 显示CPU信息统计
[root@nginx ~]# mpstat    		#如果省略“时间间隔”和“次数”参数,则仅显示一次报告后就退出
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

06:13:34 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
06:13:34 PM  all    0.01    0.00    0.06    0.01    0.00    0.00    0.00    0.00   99.93
[root@nginx ~]# mpstat 5 6    	#表示每5秒更新一次输出信息,统计6次后停止输出。
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

06:15:16 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
06:15:21 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
06:15:26 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
06:15:31 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
06:15:36 PM  all    0.00    0.00    0.20    0.00    0.00    0.00    0.00    0.00   99.80
06:15:41 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
06:15:46 PM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
Average:     all    0.00    0.00    0.03    0.00    0.00    0.00    0.00    0.00   99.97

说明 :
第1列:06:13:34 PM,表示当前时间
第2列:CPU,all表示所有CPU,0表示第一个CPU…
后面9列的含义分别如下:

  • %usr:用户进程消耗的CPU时间百分比。
  • %nice:改变过优先级的进程占用的CPU时间百分比
  • %sys:系统(内核)进程消耗的CPU时间百分比
  • %iowait:IO等待所占用的CPU时间百分比
  • %irq:硬中断占用的CPU时间百分比
  • %soft:软中断占用的CPU时间百分比
  • %steal:虚拟机强制CPU等待的时间百分比
  • %guest:虚拟机占用CPU时间的百分比
  • %idle:CPU处于空闲状态的时间百分比
1.10.1.2.2 显示指定CPU信息的统计
[root@nginx ~]# mpstat -P 0   #显示第一个CPU信息
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

06:29:46 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
06:29:46 PM    0    0.01    0.00    0.05    0.01    0.00    0.00    0.00    0.00   99.93

1.11 sar - 收集系统信息

1.11.1 使用方式
参数选项 解释说明
-A 显示系统所有资源设备(CPU,内存,磁盘)的运行状态
-u 显示系统所有CPU在采样时间内的负载状态@
-P 显示当前系统中指定CPU的使用情况
-d 显示系统所有硬盘设备在采样时间内的使用状况@
-r 显示在采样时间内系统内存的使用状况@
-b 显示在采样时间内缓冲区的使用情况@
-v 显示索引节点,文件和其他内核表的状态
-n 显示网络运行状态@
-q 显示运行队列的大小,它与系统当时的平均负载相同@
-R 显示进程在采样时间内的活动情况
-y 显示终端设备在采样时间内的活动情况
-w 显示系统交换活动在采样时间内的状态
-o filename 将命令结果以二进制格式存放在文件中,filename是文件名
1.11.2 举例说明
1.11.2.1 查看系统CPU的整体负载情况
[root@nginx ~]# sar -u 2 3
Linux 2.6.32-431.el6.x86_64 (test)   03/10/2018  _x86_64_    (1 CPU)

11:44:34 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
11:44:36 PM     all      0.00      0.00      1.00      0.00      0.00     99.00
11:44:38 PM     all      0.00      0.00      0.50      0.00      0.00     99.50
11:44:40 PM     all      0.00      0.00      0.00      0.00      0.00    100.00
Average:        all      0.00      0.00      0.50      0.00      0.00     99.50
  • 命令结果说明
  • %user:用户进程消耗的CPU时间百分比
  • %nice:改变过优先级的进程占用的CPU时间百分比
  • %system:系统(内核)进程消耗的CPU时间百分比
  • %iowait:IO等待所占用的CPU时间百分比
  • steal:虚拟机强制CPU等待的时间百分比
  • idle:CPU处在空闲状态的时间百分比
1.11.2.2 显示运行队列的大小
[root@nginx ~]# sar -q 2 3  #使用-q选项显示运行队列的大小
Linux 2.6.32-431.el6.x86_64 (localhost)     03/14/2018  _x86_64_    (1 CPU)

04:59:18 PM   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15
04:59:20 PM         0        69      0.00      0.00      0.00
04:59:22 PM         0        69      0.00      0.00      0.00
04:59:24 PM         0        70      0.00      0.00      0.00
Average:            0        69      0.00      0.00      0.00
  • 命令结果的详解说明
  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(process)和线程(thread)的数量
  • ldavg-1:最后一分钟的系统平均负载(system load average)
  • ldavg-5:过去5分钟的系统平均负载
  • ldavg-15:过去15分钟的系统平均负载
1.11.2.3 显示系统内存的使用状况
[root@nginx ~]# sar -r 2 3  #使用-r选项显示系统内存在采样时间内的使用状况
Linux 2.6.32-431.el6.x86_64 (localhost)     03/14/2018  _x86_64_    (1 CPU)

05:03:44 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit
05:03:46 PM    913012     91400      9.10     11136     23324     43344      1.43
05:03:48 PM    913012     91400      9.10     11136     23324     43344      1.43
05:03:50 PM    913012     91400      9.10     11136     23324     43344      1.43
Average:       913012     91400      9.10     11136     23324     43344      1.43
  • 以下命令结果的详细说明
  • kbmemfree:空闲物理内存量
  • kbmemused:使用中的物理内存量
  • %memused:物理内存量的使用率
  • kbbuffers:内核中作为缓冲区使用的物理内存容量
  • kbcached:内核中作为缓存使用的物理内存容量
  • kbcommit:应用程序当前使用的内存大小
  • %commit:应用程序当前使用的内存大小占总大小的使用百分比
1.11.2.4 显示缓冲区的使用情况
[root@nginx ~]# sar -b 2 3  #使用-b选项显示缓冲区在采样时间内的使用情况
Linux 2.6.32-431.el6.x86_64 (localhost)     03/14/2018  _x86_64_    (1 CPU)

05:15:01 PM       tps      rtps      wtps   bread/s   bwrtn/s
05:15:03 PM      0.00      0.00      0.00      0.00      0.00
05:15:05 PM      0.00      0.00      0.00      0.00      0.00
05:15:07 PM      0.00      0.00      0.00      0.00      0.00
Average:         0.00      0.00      0.00      0.00      0.00
  • 以下是命令的详细结果说明
  • tps:每秒钟物理设备的I/O传输总量
  • rtps:每秒钟从物理设备读入的数据总量
  • wtps:每秒钟向物理设备写入的数据总量
  • bread/s:每秒钟从物理设备读入的数据量,单位为块/s
  • bwrtn/s:每秒钟向物理设备写入的数据量,单位为块/s
1.11.2.5 显示网络的运行状态

(1)查看网络接口信息

[root@nginx ~]# sar -n DEV 2 3  #使用-n DEV显示网络接口的信息
Linux 2.6.32-431.el6.x86_64 (localhost)     03/14/2018  _x86_64_    (1 CPU)

05:22:13 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
05:22:15 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:22:15 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:22:15 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:22:15 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
05:22:17 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:22:17 PM      eth0      0.50      0.50      0.03      0.24      0.00      0.00      0.00
05:22:17 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:22:17 PM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
05:22:19 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:22:19 PM      eth0      0.50      0.50      0.03      0.24      0.00      0.00      0.00
05:22:19 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0      0.33      0.33      0.02      0.16      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • 命令结果说明
  • IFACE:网络接口
  • rxpck/s:每秒钟接收的数据包
  • txpck/s:每秒钟发送的数据包
  • rxkB/s:每秒钟接收的字节数
  • txkB/s:每秒钟发送的字节数
  • rxcmp/s:每秒钟接收的压缩数据包
  • txcmp/s:每秒钟发送的压缩数据包
  • rxmcst/s:每秒钟接收的多播数据包

(2) 查看网络错误的统计数据

[root@nginx ~]# sar -n EDEV 2 3 #使用-n EDEV显示网络错误的统计数据
Linux 2.6.32-431.el6.x86_64 (localhost)     03/14/2018  _x86_64_    (1 CPU)

05:32:03 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
05:32:05 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:32:05 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:32:05 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:32:05 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
05:32:07 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:32:07 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:32:07 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:32:07 PM     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
05:32:09 PM        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:32:09 PM      eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:32:09 PM      eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:        IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
Average:           lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:         eth1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • 以下是命令结果的详细说明
  • IFACE:网络接口
  • rxerr/s:每秒钟接收的坏数据包
  • txerr/s:每秒钟发送的坏数据包
  • coll/s:每秒的冲突数
  • rxdrop/s:因为缓冲充满,每秒钟丢弃的已接收数据包数
  • txdrop/s:因为缓冲充满,每秒钟丢弃的已发送数据包数
  • txcarr/s:发送数据包时,每秒载波错误数
  • rxfram/s:每秒接收数据包的帧对齐错误数
  • rxfifo/s:接收的数据包每秒FIFO过速的错误数
  • txfifo/s:发送的数据包每秒FIFO过速的错误数

(3)查看套接字信息

[root@nginx ~]# sar -n SOCK 2 3   #使用-n SOCK显示套接字信息
Linux 2.6.32-431.el6.x86_64 (test)   03/14/2018  _x86_64_    (1 CPU)

05:42:12 PM    totsck    tcpsck    udpsck    rawsck   ip-frag    tcp-tw
05:42:14 PM       281         2         0         0         0         0
05:42:16 PM       281         2         0         0         0         0
05:42:18 PM       281         2         0         0         0         0
Average:          281         2         0         0         0         0
  • 命令结果说明
  • totsck:使用的套接字总数量
  • tcpsck:使用的TCP套接字数量
  • udpsck:使用的UDP套接字数量
  • rawsck:使用的raw套接字数量
  • ip-frag:使用的IP段数量
  • tcp-tw:处于TIME_WAIT状态的TCP套接字数量
1.11.2.6 查看系统磁盘的读写性能
[root@nginx ~]# sar -d 2 3    #使用-d选项显示系统所有硬盘设备在采样时间内的使用状况
Linux 2.6.32-431.el6.x86_64 (test)   03/14/2018  _x86_64_    (1 CPU)

05:47:59 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:48:01 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:01 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:01 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:01 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:48:01 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:48:03 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:03 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:03 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:03 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

05:48:03 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
05:48:05 PM   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:05 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:05 PM  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
05:48:05 PM  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:      dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:       dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
Average:     dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • 以下是命令结果的详细说明
  • DEV:表示磁盘的设备名称
  • tps:表示该设备每秒的传输次数,“一次传输”的意思是“一次I/O请求”,多个逻辑请求可能会被合并为“一次I/O请求”,“一次传输”请求的大小是未知的。
  • rd_sec/s:表示每秒从设备读取的扇区数
  • wr_sec/s:表示每秒写入设备的扇区数目
  • avgrq-sz:设备平均每次I/O操作的数据大小(扇区)
  • avgqu-sz:平均I/O队列长度
  • await:设备平均每次I/O操作的等待时间(毫秒)
  • svctm:设备平均每次I/O操作的服务时间(毫秒)
  • %util:每秒钟用于I/O操作的百分比

2. 容器相关

2.1 docker

docker logs [$container_id]								#查看容器日志信息
docker exec -it [$container_id] bash					#进入容器内
docker rm [$container_id]								#删除容器
docker rmi [$container_id]								#删除镜像
docker stop(start/restart) [$container_id]				#停止(启动/重启)容器
docker save -o [$xxx.tar] [$镜像名称]:[$镜像tag]			#打包镜像文件
docker images											#查看所有镜像
docker ps (-a)	 	 									#查看容器(-a可查看已经退出的容器)
docker pull(push) [$镜像名称]:[$镜像tag]					#拉取/上传镜像
docker run -it [$container_id]							#启动容器
docker cp [$container_id]:[$文件绝对路径] [文件存放路径]	#复制文件
docker kill [$container_id]								#杀死正在运行的容器
docker stats [$container_id]	  						#显示一个容器的实时资源占用
docker pause  [$container_id]							#暂停容器内所有进程
docker unpause  [$container_id]							#恢复容器内被所有暂停的进程
docker logs -f -t --tail=100 [$container_id]	 		#查看容器后百行日志
docker version 											#查看docker版本
docker info												#查看docker系统信息

2.2 kubernetes

kubectl get nodes				#查询节点
kubectl get pod -A				#查询pod,-n可通过命名空间查看对应命名空间内的pod
kubectl get cs
kubectl get ns					#查询命名空间
kubectl describe po {pod_name} 	#查看pod的基础信息
kubectl cluster-info 			#查看k8s集群的信息
kubectl version					#查看版本
kubectl logs {pod_name} -n {namespace}				#查看pod日志
kubectl run pod --image={image_name} -n {namespace}	#运行pod
kubectl delete pod {pod_name} -n {namespace} 		#删除pod

3. 快捷方式

3.1 切屏

screen -dmS test #创建名为test的切屏
screen -x test	 #进入切屏
ctrl +a+d		 #退出切屏
screen  -ls		 #查看创建的切屏

3.2 命令行快捷方式

//每输入一个字符,终端都会滚动显示历史命令。提示:(reverse-i-search), 
Ctrl + r

//移动操作快捷键
ESC + f			#向右移动一个单词,MAC下建议用ALT + →
ESC + b			#向左移动一个单词,MAC下建议用ALT + ←
Ctrl + a		#跳到行首
Ctrl + e		#跳到行尾

//删除操作快捷键
Ctrl + d		#向右删除一个字符
Ctrl + h		#向左删除一个字符
Ctrl + u		#删除当前位置字符至行首(输入密码错误的时候多用下这个)
Ctrl + k		#删除当前位置字符至行尾
Ctrl + w		#删除从光标到当前单词开头

3.3 vim快捷方式

vim编辑方式/vimrc自动加载文件头等操作记录

4. 问题排查相关

4.1 进程管理命令

4.1.1 ps - 查看进程
4.1.1.1 使用方式
参数选项 解释说明
-a 显示所有终端下执行的进程
a 显示与终端相关的所有进程,包含每个进程的完整路径
x 显示与终端无关的所有进程
u 显示进程的用户信息
-u 显示指定用户相关的进程信息
-e 显示所有进程
-f 额外显示UID,PPID,C与STIME栏位
f 显示进程树
-H 显示进程树
-l 以详细的格式来显示进程的状况
-o 自定义输出指定的字段,以逗号分隔
-sort key key表示为指定字段排序,默认升序,+key升序,-key降序
4.1.1.2 命令输出后第一行参数的解释说明
  1. ps
[root@test1 ~]# ps
   PID TTY          TIME CMD
  1135 pts/0    00:00:00 bash
  1152 pts/0    00:00:00 bash
  1162 pts/0    00:00:00 bash
  1173 pts/0    00:00:00 bash
  1182 pts/0    00:00:00 ps
  • PID是进程的标识号
  • TTY是进程所属的终端控制台
  • TIME列是进程所使用的总的CPU时间
  • CMD列是正在执行的命令行
  1. ps -ef
[root@test1 ~]# ps -ef    # -e显示所有进程,-f格外显示UID,PPID,C与STIME栏位
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 15:00 ?        00:00:00 /sbin/init
root          2      0  0 15:00 ?        00:00:00 [kthreadd]
root          3      2  0 15:00 ?        00:00:00 [migration/0]
root          4      2  0 15:00 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 15:00 ?        00:00:00 [migration/0]
root          6      2  0 15:00 ?        00:00:00 [watchdog/0]
root          7      2  0 15:00 ?        00:00:00 [events/0]
root          8      2  0 15:00 ?        00:00:00 [cgroup]
root          9      2  0 15:00 ?        00:00:00 [khelper]
root         10      2  0 15:00 ?        00:00:00 [netns]
root         11      2  0 15:00 ?        00:00:00 [async/mgr]
root         12      2  0 15:00 ?        00:00:00 [pm]
root         13      2  0 15:00 ?        00:00:00 [sync_supers]
root         14      2  0 15:00 ?        00:00:00 [bdi-default]
root         15      2  0 15:00 ?        00:00:00 [kintegrityd/0]
root         16      2  0 15:00 ?        00:00:00 [kblockd/0]
root         17      2  0 15:00 ?        00:00:00 [kacpid]
  • UID:进程被该UID所拥有
  • PPID:进程的父进程的标识号
  • C:CPU使用的资源百分比
  • STIME:进程开始的时间
  • TTY:该进程是在哪个终端机上面运作,若与终端机无关,则显示“?”,另外,tty1-tty6是本机上面的登入者进程,若为pts/0等,则表示为由网络连接进主机的进程。
  1. ps -aux
[root@test1 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.1  19232  1488 ?        Ss   15:00   0:00 /sbin/init
root          2  0.0  0.0      0     0 ?        S    15:00   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    15:00   0:00 [migration/0]
root          4  0.0  0.0      0     0 ?        S    15:00   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S    15:00   0:00 [migration/0]
root          6  0.0  0.0      0     0 ?        S    15:00   0:00 [watchdog/0]
root          7  0.0  0.0      0     0 ?        S    15:00   0:00 [events/0]
  • USER:该进程属于的用户。
  • %CPU:该进程使用掉的CPU资源百分比。
  • %MEM:该进程所占用的物理内存百分比。
  • VSZ:该进程使用掉的虚拟内存量(单位Kbytes)
  • RSS:该进程占用的固定的内存量(单位Kbytes)
  • STAT:该进程目前的状态,主要的状态包括如下几种。
    • R:正在运行,或者是可以运行。
    • S:正在终端睡眠中,可以由某些信号唤醒。
    • D:不可中断睡眠。
    • T:正在侦测或者是停止了。
    • Z:已经终止,但是其父进程无法正常终止它,从而变成zombie(僵尸)进程的状态
    • +:前台进程。
    • l:多线程进程。
    • N:低优先级进程。
    • <:高优先级进程。
    • s:进程领导者。
    • L:已将页面锁定到内存中。
  • START:该进程被触发启动的时间
  • COMMAND:该进程的实际命令。
  1. 显示指定用户的相关进程信息
[root@test1 ~]# ps -u testuser
   PID TTY          TIME CMD
  1315 pts/1    00:00:00 bash
  1335 pts/1    00:00:00 vim
  1. 以详细格式显示进程状态
[root@test1 ~]# ps -u testuser -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1315   1314  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
0 T   500   1335   1315  0  80   0 - 35884 signal pts/1    00:00:00 vim
  • F:代表这个进程的标志(flag),4代表使用者为super user。
  • S:代表这个进程的状态(STAT),前面已经讲解过了
  • C:CPU使用的资源百分比。
  • PRI:Priority(优先执行序)的缩写
  • NI:Nice值
  • ADDR:指出该进程在内存的哪个部分。如果是个running的进程,则一般是“-”。
  • SZ:使用掉的内存大小。
  • WCHAN:目前这个进程是否正在运作当中,若为“-”则表示正在运作。
  1. 查看某个进程在哪个CPU上运行
[root@test1 ~]# ps -eo pid,args,psr
   PID COMMAND                     PSR
     1 /usr/lib/systemd/systemd --   1
     2 [kthreadd]                    1
     3 [ksoftirqd/0]                 0
     5 [kworker/0:0H]                0
     7 [migration/0]                 0
     8 [rcu_bh]                      0
     9 [rcu_sched]                   0
    10 [lru-add-drain]               0
    11 [watchdog/0]                  0
    12 [watchdog/1]                  1
#省略#
4.1.2 kill - 结束进程
4.1.2.1 使用方式
参数选项 解释说明
-l 列出全部的信号名称
-p 指定kill命令只打印相关进程的进程号,而不发送任何信号
-s 指定要发送的信号
4.1.2.2 举例说明
4.1.2.2.1 列出所有信号的名称
[root@test1 ~]# kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG  24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF 28) SIGWINCH    29) SIGIO   30) SIGPWR
31) SIGSYS  34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX    
[root@test1 ~]# kill -l kill  #可以使用-l参数对信号名和数字信号互换
9
[root@test1 ~]# kill -l 9
KILL
  • 常用信号:
信号 说明
HUP(1) 挂起,通常因终端掉线或用户退出而引发
INT(2) 中断,通常是按下Ctrl+c组合键来发出这个信号
QUIT(3) 退出,通常是按下CTRL+\组合键来发出这个信号
KILL(9) 立即结束进程的运行
TERM(15) 终止,通常在系统关机时发送
TSTP(20) 暂停进程的运行,通常是按下Ctrl+z组合键来发出这个信号
4.1.2.2.2 终止进程
  • kill指令默认使用的信号为15,用于结束进程。如果进程忽略此信号,则可以使用信号9强制终止进程。
kill 2203   	#kill 命令默认使用的信号为15,这种格式最常用、
kill -s 15 2203 #这种格式使用-s参数明确指定发送值为15的信号,效果和kill 2203一样
kill -15 2203   #上面的-s 15可以简写为-15
kill -9 2203    #信号9会强行终止进程
4.1.3 killall - 通过进程名终止进程
4.1.3.1 使用方式
参数选项 解释说明
-I 不区分大小写匹配
-g 终止属于该进程组的进程
-i 在终止进程之前询问是否确认
-l 列出所有已知的信号名
-q 如果没有进程终止则不提示
-r 使用正则表达式匹配要终止的进程名称
-s 用指定的信号代替默认信号
-u 终止指定用户的进程
-v 报告信号是否发送成功
-w 等待所有被终止的进程死去。killall每秒都会检查一次被终止的进程是否仍然存在,其仅在都死光后才返回。注意,如果信号被忽略,或者没有起作用,或者进程停留在僵尸状态,那么killall可能会永久等待
4.1.3.2 举例说明
4.1.3.2.1 终止定时任务服务进程
[root@test1 ~]# killall crond
[root@test1 ~]# killall crond 				#用killall终止进程可执行多次
crond: no process killed      				#等看到这个结果说明进程死了
[root@test1 ~]# 
[root@test1 ~]# /etc/init.d/crond start		#启动服务
Starting crond:                                            [  OK  ]
[root@test1 ~]# killall -w crond  			#使用-w参数,会看到等待几秒后结束命令操作
[root@test1 ~]# killall -w crond
crond: no process killed
4.1.3.2.2 终止指定用户的所有进程
[root@test1 ~]# ps -u testuser -l    		#查看普通用户的所有进程详细信息
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
0 T   500   1235   1210  0  80   0 - 35884 signal pts/1    00:00:00 vim
[root@test1 ~]# killall -u testuser vim		#杀掉指定用户的vim进程
[root@test1 ~]# ps -u testuser -l			#成功
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
4.1.4 pkill - 通过进程名终止进程
4.1.4.1 使用方式
参数选项 解释说明
-t终端 杀死指定终端的进程
-u用户 杀死指定用户的进程
4.1.4.2 举例说明
4.1.4.2.1 通过进程名终止进程
[root@test1 ~]# /etc/init.d/crond status  	#查看定时任务程序运行状态
crond (pid  1274) is running...
[root@test1 ~]# pkill crond   				#终止定时任务进程
[root@test1 ~]# /etc/init.d/crond status  
crond dead but subsys locked    			#进程被终止
4.1.4.2.2 通过终端名终止进程
[root@test1 ~]# w     				#第二列TTY就是用户运行的终端
 15:57:09 up  1:05,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
testuser tty1     -                15:55   12.00s  0.02s  0.01s vim ttt
root     pts/0    192.168.200.1    14:51    0.00s  0.07s  0.00s w
root     pts/1    192.168.200.1    15:19    3:28   0.01s  0.00s bash
[root@test1 ~]# ps -u testuser -l	#查看用户的进程
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
4 S   500   1333   1322  0  80   0 - 27075 wait   tty1     00:00:00 bash
0 S   500   1359   1333  0  80   0 - 35890 poll_s tty1     00:00:00 vim
[root@test1 ~]# pkill -t tty1		#杀掉终端正在运行的进程
[root@test1 ~]# ps -u testuser -l	#vim进程没了
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
4 S   500   1333   1322  0  80   0 - 27075 n_tty_ tty1     00:00:00 bash
[root@test1 ~]# pkill -9 -t tty1	#强行杀掉tty1终端(踢掉用户)
[root@test1 ~]# ps -u testuser -l
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
[root@test1 ~]# w					#tty1终端没了
 15:58:17 up  1:06,  2 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.200.1    14:51    0.00s  0.08s  0.00s w
root     pts/1    192.168.200.1    15:19    4:36   0.01s  0.00s bash
4.1.4.2.3 通过用户名终止进程
[root@test1 ~]# w
 16:08:24 up  1:16,  3 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
testuser tty1     -                16:01    4.00s  0.03s  0.02s -bash
root     pts/0    192.168.200.1    14:51    0.00s  0.09s  0.00s w
root     pts/1    192.168.200.1    15:19   14:43   0.01s  0.00s bash
[root@test1 ~]# ps -u testuser -l    #查看用户的进程信息
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
4 S   500   1387   1366  0  80   0 - 27076 n_tty_ tty1     00:00:00 bash
0 T   500   1430   1387  0  80   0 - 35883 signal tty1     00:00:00 vim
[root@test1 ~]# pkill -u testuser    #杀掉指定用户所有进程
[root@test1 ~]# ps -u testuser -l    #成功
F S   UID    PID   PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S   500   1175   1174  0  80   0 - 27076 wait   pts/1    00:00:00 bash
0 S   500   1210   1175  0  80   0 - 27076 n_tty_ pts/1    00:00:00 bash
4 S   500   1387   1366  0  80   0 - 27076 n_tty_ tty1     00:00:00 bash
4.1.5 top - 实时显示系统中各个进程的资源占用状况
4.1.5.1 使用方式
参数选项 解释说明
-a 将进程按照使用内存排序
-b 以批处理的模式显示进程信息,输出结果可以传递给其他程序或写入到文件中。在这种模式下,top命令不会接受任何输入,一直运行直到达到-n选项设置的阈值,或者按Ctrl+C等组合键终止程序
-c 显示进程的整个命令路径,而不是只显示命令名称
-d 指定每两次屏幕信息刷新之间的时间间隔
-H 指定这个可以显示每个线程的情况,否则就是进程的总的状态
-i 不显示闲置或者僵死的进程信息
-n top输出信息更新的次数,完成后将退出top命令
-p 显示指定的进程信息
4.1.5.2 举例说明
4.1.5.2.1 显示进程信息
[root@test1 ~]# top        #使用top命令通常不接任何参数
top - 16:40:31 up  1:48,  3 users,  load average: 0.00, 0.00, 0.00
Tasks:  77 total,   1 running,  76 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   152112k used,   852300k free,    11312k buffers
Swap:  2031608k total,        0k used,  2031608k free,    42304k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
     1 root      20   0 19232 1536 1256 S  0.0  0.2   0:00.76 init                      
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.00 kthreadd                  
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 migration/0               
     4 root      20   0     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/0
  • 第一行,任务队列信息,同uptime命令的执行结果
    • 16:40:31 当前系统时间
    • up 1:48 系统已经运行了1小时48分
    • 3 users 当前有2个用户登录系统
    • load average:0.00, 0.00, 0.00 load average后面三个数分别是1分钟、5分钟、15分钟的平均负载情
  • 第二行,Tasks为任务(进程)。从上面的信息可以看出,系统现在共有77个进程,其中处于运行状态的有1个,76个在休眠(sleep),stoped状态0个,zombie状态(僵尸)的有0个
  • 第三行,CPU状态信息
    • 0.0%us 用户空间占用CPU的百分比
    • 0.0%sy 内核空间占用CPU的百分比
    • 0.0%ni 改变过优先级的进程占用CPU的百分比
    • 100.0%id 空闲CPU百分比
    • 0.0%wa I/O等待占用CPU的百分比
    • 0.0%hi 硬中断(Hardware IRQ)占用CPU的百分比
    • 0.0%si 软中断(Software Interrupts)占用CPU的百分比
    • 0.0%st 虚拟机占用CPU的百分比
  • 第四行,内存状态
    • 1004412k total 物理内存总量
    • 152112k used 使用中的内存总量
    • 852300k free 空闲内存总量
    • 11312k buffers 缓冲的内存量
  • 第五行,swap交换分区信息
    • 2031608k total 交换区总量
    • 0k used 使用的交换区总量
    • 2031608k free 空闲交换区总量
    • 42304k cached 缓存的内存量
  • 第六行,空行
  • 第七行开始,给出的是各进程(任务)的状态监控
    • PID 进程id
    • USER 进程所有者
    • PR 进程优先级
    • NI nice值,负值表示高优先级,正值表示低优先级。
    • VIRT 进程使用的虚拟内存总量,单位kb。
    • RES 进程使用的、未被换出的物理内存大小,单位为kb。
    • SHR 共享内存大小,单位为kb
    • S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    • %CPU 上次更新到现在的CPU时间占用百分比
    • %MEM 进程使用的物理内存百分比
    • TIME+ 进程使用的CPU时间总计,单位1/100秒
    • COMMAND 进程名称(命令名/命令行)

补充:
1)计算真正可用的内存数为:第四行的free+第四行的buffers+第五行的cached。
2)在对内存进行监控时,要时刻关注top命令里第五行swap交换分区的used,如果这个数值还在不断地变化,则说明内核正在不断进行内存和swap的数据交换,这表示内存真的不够用了或者程序运行有内存溢出问题。
3)在top基本视图中,按键盘数字“1”,可监控每个逻辑CPU的状况,显示多核不同核CPU的信息。
4)直接用top无任何参数的方式查看会非常占用系统的资源。可以使用top -b -n1 > test的方式将数据重定向到文件里,再进行查看。

4.1.5.2.2 将进程按照使用内存排序
[root@test1 ~]# top -a    #使用参数-a将进程按照使用内存排序
top - 18:07:36 up 42 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 164 total,   1 running, 163 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   153948k used,   850464k free,    10296k buffers
Swap:  2031608k total,        0k used,  2031608k free,    37868k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
  1236 root      20   0 98.0m 4036 3056 S  0.0  0.4   0:00.20 sshd                     
  1209 postfix   20   0 81524 3424 2544 S  0.0  0.3   0:00.01 qmgr                     
  1202 root      20   0 81272 3400 2496 S  0.0  0.3   0:00.03 master                   
  1208 postfix   20   0 81352 3380 2504 S  0.0  0.3   0:00.03 pickup  
4.1.5.2.3 以批处理模式显示进程信息
[root@test1 ~]# top -b        #使用参数-b可以看到命令执行结果不停地向下刷新
......
  1229 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  1231 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  1233 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  1235 root      20   0  4064  576  496 S  0.0  0.1   0:00.00 mingetty                 
  1236 root      20   0 98.0m 4036 3056 S  0.0  0.4   0:00.22 sshd                     
  1243 root      18  -2 12344 2580  516 S  0.0  0.3   0:00.00 udevd                    
  1244 root      18  -2 12344 2584  516 S  0.0  0.3   0:00.00 udevd                    
  1248 root      20   0  105m 1876 1520 S  0.0  0.2   0:00.04 bash                     
  1301 root      20   0 17384  668  452 S  0.0  0.1   0:00.00 anacron                  
  1318 root      20   0 15032 1340  984 R  0.0  0.1   0:00.01 top                      
^C  #退出使用快捷键Ctrl+C
4.1.5.2.4 显示进程的完整路径
[root@test1 ~]# top -c #使用参数-c显示进程的整个命令路径。
top - 18:19:38 up 54 min,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 164 total,   1 running, 163 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   154196k used,   850216k free,    10316k buffers
Swap:  2031608k total,        0k used,  2031608k free,    37904k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
     1 root      20   0 19232 1484 1220 S  0.0  0.1   0:00.98 /sbin/init               
     2 root      20   0     0    0    0 S  0.0  0.0   0:00.01 [kthreadd]               
     3 root      RT   0     0    0    0 S  0.0  0.0   0:00.00 [migration/0]
4.1.5.2.5 其他使用补充
//设置执行top命令后的信息刷新时间
[root@test1 ~]# top -d 3			#使用参数-d指定更新周期为3秒,也就是说命令结果每隔3s刷新一次

//设置执行top命令后的信息刷新次数
[root@test1 ~]# top -n 2			#使用参数-n指定更新次数为2次,也就是说命令结果刷新两次后终止退出,-n参数可以和-b参数配合使用

//将top输出结果的全部信息输出到文件中
[root@test1 ~]# top -b -n1 > test	#以批处理方式,就刷新1次数据重定向到文件里
[root@test1 ~]# cat test | wc -l
171
[root@test1 ~]# top -n1 > test		#如果不是批处理方式,数据量少
[root@test1 ~]# cat test | wc -l
28

//显示指定的进程信息
[root@test1 ~]# top -p 1126			#使用-p选项显示指定进程号的信息
top - 18:31:18 up  1:06,  1 user,  load average: 0.00, 0.00, 0.00
Tasks:   1 total,   0 running,   1 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   154032k used,   850380k free,    10448k buffers
Swap:  2031608k total,        0k used,  2031608k free,    38060k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
  1126 root      20   0 66604 1184  468 S  0.0  0.1   0:00.00 sshd 

//显示指定用户的信息
[root@test1 ~]# top -u testuser		#使用-u参数显示指定用户的进程信息
top - 18:33:05 up  1:08,  2 users,  load average: 0.00, 0.00, 0.00
Tasks: 165 total,   1 running, 164 sleeping,   0 stopped,   0 zombie
Cpu(s):  0.0%us,  0.0%sy,  0.0%ni,100.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   1004412k total,   160388k used,   844024k free,    10796k buffers
Swap:  2031608k total,        0k used,  2031608k free,    41696k cached
   PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                 
  1384 testuser  20   0  105m 1896 1528 S  0.0  0.2   0:00.01 bash 
  1403 testuser  20   0  140m 3968 2684 S  0.0  0.4   0:00.01 vim   
4.1.6 nohup - 用户退出系统进程继续工作
4.1.6.1 使用方式
  • nohup可以让程序以后台挂起的方式运行,被运行程序的输出信息将不会显示到终端,而是写入到当前目录的nohup.out文件中。如果当前目录的nohup.out文件不可写,则输出重定向到$HOME/nohup.out文件中。
4.1.6.2 举例说明
[root@test ~]# cd test/
[root@test test]# nohup ping www.baidu.com   	#让当前执行的进程始终运行,关闭界面也不消失
nohup: ignoring input and appending output to `nohup.out'
^C[root@test test]# ls
nohup.out  test
[root@test test]# cat nohup.out 				#命令的执行记录会被记录在当前目录下的nohup.out中
PING www.a.shifen.com (61.135.169.125) 56(84) bytes of data.
64 bytes from 61.135.169.125: icmp_seq=1 ttl=128 time=4.22 ms
64 bytes from 61.135.169.125: icmp_seq=2 ttl=128 time=4.28 ms
64 bytes from 61.135.169.125: icmp_seq=3 ttl=128 time=4.20 ms
64 bytes from 61.135.169.125: icmp_seq=4 ttl=128 time=4.21 ms
64 bytes from 61.135.169.125: icmp_seq=5 ttl=128 time=4.16 ms
64 bytes from 61.135.169.125: icmp_seq=6 ttl=128 time=4.11 ms
64 bytes from 61.135.169.125: icmp_seq=7 ttl=128 time=4.22 ms
64 bytes from 61.135.169.125: icmp_seq=8 ttl=128 time=4.18 ms
64 bytes from 61.135.169.125: icmp_seq=9 ttl=128 time=4.21 ms
--- www.a.shifen.com ping statistics ---
9 packets transmitted, 9 received, 0% packet loss, time 8508ms
rtt min/avg/max/mdev = 4.114/4.203/4.285/0.097 ms
4.1.7 strace - 跟踪进程的系统调用
4.1.7.1 使用方式
  • strace是Linux环境下的一款程序调试工具,用于检查一个应用程序所使用的系统调用以及它所接收的系统信息。strace会追踪程序运行时的整个生命周期,输出每一个系统调用的名字、参数、返回值和执行所消耗的时间等
参数选项 解释说明
-c 统计每一个系统调用所执行的算时间、次数和出错的次数等
-d 输出strace关于标准错误的调试信息
-f 跟踪目标进程,以及目标进程创建的所有子进程@
-ff 如果提供-o filename,则将所有进程的跟踪结果输出到相应的filename.pid中,pid是各进程的进程号
-i 输出系统调用的入口指针
-q 禁止输出关于脱离的消息
-r 输出每一个系统调用的相对时间
-t 在输出中的每一行前加上时间信息。例如:16:45:28
-tt 在输出中的每一行前加上时间信息,精确到微秒。例如11:18:59.759546@
-ttt 在输出中的每一行前加上时间信息,精确到微秒,而且时间表示为UNIX时间戳。例如1486111461.650434
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量、文件stat结构等打印出来
-x 以十六进制形式输出非标准字符串
-xx 所有字符串以十六进制形式输出
-o filename 将strace的输出写入文件filename
-p pid 指定要跟踪的进程pid,要同时跟踪多个pid,重复多次-p选项即可@
-s strsize 指定输出的字符串的最大长度,默认为32.并没有将文件名视为字符串,默认全部输出
-u username 以username的UID和GID执行所跟踪的命令

输出过滤器

参数选项 解释说明
-e expr 输出过滤器,通过表达式,可以过滤掉你不想要的输出@
-e trace=open 表示只跟踪open调用而-e trace!=open表示跟踪除open外所有
-e trace=file 只跟踪与文件操作有关的系统调用
-e trace=process 只跟踪与进程有关的系统调用
-e trace=network 只跟踪与网络有关的系统调用
-e trace=signal 只跟踪与系统信号有关的系统调用
-e trace=desc 只跟踪与文件描述符有关的系统调用
-e trace=ipc 只跟踪与进程通信有关的系统调用
4.1.7.2 举例说明
4.1.7.2.1 排查Nginx 403 forbidden错误
[root@nginx tmp]# strace -tt -f -o /tmp/test.txt /usr/local/nginx/sbin/nginx     #f参数跟踪目标进程,以及目标进程创建的所有子进程,-tt参数在输出中的每一行前加上时间信息,-o将跟踪内容输出到文件里。
[root@nginx tmp]# cat test.txt 
3824  05:37:14.300486 prctl(PR_SET_DUMPABLE, 1) = 0
3824  05:37:14.300498 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
3824  05:37:14.300518 epoll_create(512) = 8
3824  05:37:14.300535 eventfd2(0, 0)    = 9
3824  05:37:14.300549 epoll_ctl(8, EPOLL_CTL_ADD, 9, {EPOLLIN|EPOLLET, {u32=7095968, u64=7095968}}) = 0
3824  05:37:14.300569 mmap(NULL, 233472, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f73714f7000
3824  05:37:14.300607 brk(0x1fa5000)    = 0x1fa5000
3824  05:37:14.300693 epoll_ctl(8, EPOLL_CTL_ADD, 6, {EPOLLIN|0x2000, {u32=1901031440, u64=140133798998032}}) = 0
3824  05:37:14.300712 close(3)          = 0
3824  05:37:14.300724 epoll_ctl(8, EPOLL_CTL_ADD, 7, {EPOLLIN|0x2000, {u32=1901031664, u64=140133798998256}}) = 0
3824  05:37:14.300742 epoll_wait(8,     #epoll_wait表示等待连接访问,因此后面的输出都是和前一次访问有关。

先将test.txt文件的内容清空,然后模拟去访问nginx

[root@nginxt tmp]# cat test.txt 
{{EPOLLIN, {u32=1901031440, u64=140133798998032}}}, 512, 4294967295) = 1
3824  05:57:59.271342 accept4(6, {sa_family=AF_INET, sin_port=htons(64469), sin_addr=inet_addr("192.168.0.254")}, [16], SOCK_NONBLOCK) = 3
3824  05:57:59.271383 epoll_ctl(8, EPOLL_CTL_ADD, 3, {EPOLLIN|EPOLLET|0x2000, {u32=1901031888, u64=140133798998480}}) = 0
3824  05:57:59.271401 epoll_wait(8, {{EPOLLIN, {u32=1901031888, u64=140133798998480}}}, 512, 60000) = 1
3824  05:57:59.271423 recvfrom(3, "GET / HTTP/1.1\r\nHost: 192.168.0."..., 1024, 0, NULL, NULL) = 308         #recvfrom接收到get请求
3824  05:57:59.271483 stat("/usr/local/nginx/html/www/index.html", 0x7fff69246350) = -1 ENOENT (No such file or directory)     #查看index.html文件不存在
3824  05:57:59.271506 stat("/usr/local/nginx/html/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
3824  05:57:59.271525 stat("/usr/local/nginx/html/www/index.htm", 0x7fff69246350) = -1 ENOENT (No such file or directory)     #查看index.htm文件不存在
#下面向用户返回403错误,并写入错误日志
3824  05:57:59.271546 write(5, "2018/01/14 05:57:59 [error] 3824"..., 200) = 200
3824  05:57:59.271587 writev(3, [{"HTTP/1.1 403 Forbidden\r\nServer: "..., 155}, {"\r\n403 Forbidd"..., 116}, {"<hr><center>nginx/1.10.2</center"..., 53}], 3) = 324
3824  05:57:59.271674 write(4, "192.168.0.254 - - [14/Jan/2018:0"..., 151) = 151
3824  05:57:59.271693 setsockopt(3, SOL_TCP, TCP_NODELAY, [1], 4) = 0
3824  05:57:59.271708 recvfrom(3, 0x1f3e190, 1024, 0, 0, 0) = -1 EAGAIN (Resource temporarily unavailable)
3824  05:57:59.271722 epoll_wait(8, 
#从上面的日志输出中,可得知是因为2个文件不存在导致的403错误,因此检查配置文件就很容易发现问题。
    server {
        listen       80;
        server_name  www.test.com;
        location / {
            root   html/www;
            index  index.html index.htm;        #这里缺少了设置首页文件
        }
    }
</code></pre> 
  <h6>4.1.7.2.2 只跟踪与文件操作有关的系统调用(使用过滤器)</h6> 
  <pre><code>[root@nginx tmp]# strace -tt -f -e trace=file -o /tmp/test.txt /usr/local/nginx/sbin/nginx
[root@nginx tmp]# cat test.txt 
3860  06:28:42.306924 stat("/usr/local/nginx/html/www/index.html", 0x7fff3ce39670) = -1 ENOENT (No such file or directory)
3860  06:28:42.306973 stat("/usr/local/nginx/html/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
3860  06:28:42.306994 stat("/usr/local/nginx/html/www/index.htm", 0x7fff3ce39670) = -1 ENOENT (No such file or directory)
</code></pre> 
  <h6>4.1.7.2.3 通过pid跟踪进程</h6> 
  <pre><code>[root@nginx tmp]# /usr/local/nginx/sbin/nginx   #启动nginx服务
[root@nginx tmp]# pgrep nginx -l
3873 nginx  #nginx的master进程
3874 nginx  #nginx的worker进程
[root@nginx tmp]# strace -tt -f -e trace=file -p 3874   #使用-p参数,只跟踪worker进程,结果更加精简
Process 3874 attached - interrupt to quit
06:49:38.629248 stat("/usr/local/nginx/html/www/index.html", 0x7fffbd4e7fc0) = -1 ENOENT (No such file or directory)
06:49:38.629329 stat("/usr/local/nginx/html/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
06:49:38.629353 stat("/usr/local/nginx/html/www/index.htm", 0x7fffbd4e7fc0) = -1 ENOENT (No such file or directory)
</code></pre> 
  <h6>4.1.7.2.4 跟踪系统调用统计</h6> 
  <pre><code>[root@nginx tmp]# strace -c /usr/local/nginx/sbin/nginx     #使用-c参数为进程所有的系统调用做一个统计分析
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
100.00    0.000047          47         1           clone
  0.00    0.000000           0        29           read
  0.00    0.000000           0        31           open
  0.00    0.000000           0        33           close
  0.00    0.000000           0         6           stat
  0.00    0.000000           0        28           fstat
  0.00    0.000000           0         1           lseek
  0.00    0.000000           0        61           mmap
  0.00    0.000000           0        36           mprotect
  0.00    0.000000           0         7           munmap
  0.00    0.000000           0         6           brk
  0.00    0.000000           0        14           rt_sigaction
  0.00    0.000000           0         1           rt_sigprocmask
  0.00    0.000000           0         1           ioctl
  0.00    0.000000           0         2           pread
  0.00    0.000000           0         2         2 access
  0.00    0.000000           0         5           socket
  0.00    0.000000           0         4         4 connect
  0.00    0.000000           0         1           bind
  0.00    0.000000           0         2           listen
  0.00    0.000000           0         1           setsockopt
  0.00    0.000000           0         1           execve
  0.00    0.000000           0         2           uname
  0.00    0.000000           0         3           fcntl
  0.00    0.000000           0         5         5 mkdir
  0.00    0.000000           0         3           getrlimit
  0.00    0.000000           0         1           geteuid
  0.00    0.000000           0         1           statfs
  0.00    0.000000           0         1           arch_prctl
  0.00    0.000000           0         2         1 futex
  0.00    0.000000           0         1           epoll_create
  0.00    0.000000           0         1           set_tid_address
  0.00    0.000000           0         1           set_robust_list
------ ----------- ----------- --------- --------- ----------------
100.00    0.000047                   294        12 total
</code></pre> 
  <h6>4.1.7.2.5 重定向输出</h6> 
  <pre><code>[root@nginx tmp]# strace -c -o /tmp/test.txt /usr/local/nginx/sbin/nginx #-o选项将strace的结果输出到文件中
[root@nginx tmp]# cat test.txt 
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
  -nan    0.000000           0        29           read
  -nan    0.000000           0        31           open
  -nan    0.000000           0        33           close
  -nan    0.000000           0         6           stat
</code></pre> 
  <h6>4.1.7.2.6 对系统调用进行计时</h6> 
  <pre><code>[root@nginx tmp]# /usr/local/nginx/sbin/nginx -s stop
[root@nginx tmp]# strace -T /usr/local/nginx/sbin/nginx		 #使用-T将每个系统调用所花费的时间打印出来,每个调用的时间花销在调用行最右边的尖括号里
execve("/usr/local/nginx/sbin/nginx", ["/usr/local/nginx/sbin/nginx"], [/* 24 vars */]) = 0 <0.000075>
brk(0)                                  = 0x1055000 <0.000003>
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fbbf84f6000 <0.000004>
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory) <0.000005>
open("/etc/ld.so.cache", O_RDONLY)      = 3 <0.000004>
fstat(3, {st_mode=S_IFREG|0644, st_size=15441, ...}) = 0 <0.000003>
mmap(NULL, 15441, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fbbf84f2000 <0.000003>
close(3)                                = 0 <0.000003>
open("/lib64/libdl.so.2", O_RDONLY)     = 3 <0.000005>
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340\r\0\0\0\0\0\0"..., 832) = 832 <0.000003>
fstat(3, {st_mode=S_IFREG|0755, st_size=19536, ...}) = 0 <0.000003>
mmap(NULL, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fbbf80d4000 <0.000004>
mprotect(0x7fbbf80d6000, 2097152, PROT_NONE) = 0 <0.000004>、
</code></pre> 
  <h5>4.1.8 ltrace - 跟踪进程调用库函数</h5> 
  <h6>4.1.8.1 使用方式</h6> 
  <blockquote> 
   <p>ltrace能够跟踪进程的库函数调用,它会显现出调用了哪个库函数,而strace则是跟踪进程的每个系统调用</p> 
  </blockquote> 
  <table> 
   <thead> 
    <tr> 
     <th>参数选项</th> 
     <th align="left">解释说明</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>-c</td> 
     <td align="left">统计库函数每次调用的时间,最后程序退出时打印摘要</td> 
    </tr> 
    <tr> 
     <td>-C</td> 
     <td align="left">解码低级别名称(内核级)为用户级名称</td> 
    </tr> 
    <tr> 
     <td>-d</td> 
     <td align="left">打印调试信息</td> 
    </tr> 
    <tr> 
     <td>-e expr</td> 
     <td align="left">输出过滤器,通过表达式,可以过滤掉你不想要的输出@</td> 
    </tr> 
    <tr> 
     <td>-e printf</td> 
     <td align="left">表示只查看printf函数调用</td> 
    </tr> 
    <tr> 
     <td>-f</td> 
     <td align="left">跟踪子进程</td> 
    </tr> 
    <tr> 
     <td>-o filename</td> 
     <td align="left">将ltrace的输出写入文件filename</td> 
    </tr> 
    <tr> 
     <td>-p pid</td> 
     <td align="left">指定要跟踪的进程pid@</td> 
    </tr> 
    <tr> 
     <td>-r</td> 
     <td align="left">输出每一个调用的相对时间</td> 
    </tr> 
    <tr> 
     <td>-S</td> 
     <td align="left">显示系统调用</td> 
    </tr> 
    <tr> 
     <td>-t</td> 
     <td align="left">在输出中每一行前加上时间信息。例如 16:45:28</td> 
    </tr> 
    <tr> 
     <td>-tt</td> 
     <td align="left">在输出中每一行前加上时间信息。例如 11:18:59.759546</td> 
    </tr> 
    <tr> 
     <td>-ttt</td> 
     <td align="left">在输出中每一行前加上时间信息,精确到微妙,而且时间表示为UNIX时间戳。</td> 
    </tr> 
    <tr> 
     <td>-T</td> 
     <td align="left">显示每次调用所花费时间</td> 
    </tr> 
    <tr> 
     <td>-u username</td> 
     <td align="left">以username的UID和GID执行所跟踪的命令</td> 
    </tr> 
   </tbody> 
  </table> 
  <h6>4.1.8.2 举例说明</h6> 
  <p><strong>(1)ltrace使用</strong></p> 
  <pre><code>[root@nginx tmp]# ltrace /usr/local/nginx/sbin/nginx    	#ltrace后面直接接上要检测的命令语句
memcpy(0x1d5b7b0, "www.test.com", 17)                              = 0x1d5b7b0
memcpy(0x1d5b7c1, "/usr/local/nginx/", 17)                              = 0x1d5b7c1
malloc(2048)                                                            = 0x1d55530
memset(0x1d55530, '\000', 68)                                           = 0x1d55530
memset(0x1d55530, '\000', 70)                                           = 0x1d55530
memset(0x1d55530, '\000', 72)                                           = 0x1d55530
memset(0x1d55530, '\000', 74)                                           = 0x1d55530
memset(0x1d55530, '\000', 76)                                           = 0x1d55530
memset(0x1d55530, '\000', 78)                                           = 0x1d55530
memset(0x1d55530, '\000', 80)                                           = 0x1d55530
memset(0x1d55530, '\000', 82)                                           = 0x1d55530
memset(0x1d55530, '\000', 84)                                           = 0x1d55530
memset(0x1d55530, '\000', 86)                                           = 0x1d55530
......
sigemptyset(0x7fffb75519f8)                                             = 0
sigaction(17, 0x7fffb75519f0, NULL)                                     = 0
sigemptyset(0x7fffb75519f8)                                             = 0
sigaction(31, 0x7fffb75519f0, NULL)                                     = 0
sigemptyset(0x7fffb75519f8)                                             = 0
sigaction(13, 0x7fffb75519f0, NULL)                                     = 0
fork()                                                                  = 3962
[pid 3961] exit(0 <unfinished ...>
[pid 3961] +++ exited (status 0) +++
</code></pre> 
  <p><strong>(2)通过pid跟踪进程调用库函数</strong></p> 
  <pre><code>[root@nginx tmp]# pgrep -l nginx
3967 nginx
3968 nginx          #nginx的worker进程的pid号
[root@nginx tmp]# ltrace -p 3968        使用-p指定进程号
__errno_location()                                                      = 0x7f0a392e1768
gettimeofday(0x7fff8f684cd0, NULL)                                      = 0
memcpy(0x6b281f, "14", 2)                                               = 0x6b281f
memcpy(0x6b2826, "2018", 4)                                             = 0x6b2826
memcpy(0x6b282b, "12", 2)                                               = 0x6b282b
memcpy(0x6b282e, "28", 2)                                               = 0x6b282e
memcpy(0x6b2831, "30", 2)                                               = 0x6b2831
localtime_r(0x7fff8f684c88, 0x7fff8f684d20, 0x48400a, 12339, 0x7fff8f684b52) = 0x7fff8f684d20
memcpy(0x6b22fc, "2018", 4)                                             = 0x6b22fc
memcpy(0x6b2302, "1", 1)                                                = 0x6b2302
memcpy(0x6b2304, "14", 2)                                               = 0x6b2304
memcpy(0x6b2308, "7", 1)                                                = 0x6b2308
memcpy(0x6b230a, "28", 2)                                               = 0x6b230a
memcpy(0x6b230d, "30", 2)                                               = 0x6b230d
memcpy(0x6b2f91, "14", 2)                                               = 0x6b2f91
memcpy(0x6b2f98, "2018", 4)                                             = 0x6b2f98
memcpy(0x6b2f9e, "7", 1)                                                = 0x6b2f9e
memcpy(0x6b2fa0, "28", 2)                                               = 0x6b2fa0
memcpy(0x6b2fa3, "30", 2)                                               = 0x6b2fa3
memcpy(0x6b2fa8, "5", 1)                                                = 0x6b2fa8
memcpy(0x6b2faa, "0", 1)                                                = 0x6b2faa
memcpy(0x6b364e, "2018", 4)                                             = 0x6b364e
memcpy(0x6b3654, "1", 1)                                                = 0x6b3654
memcpy(0x6b3656, "14", 2)                                               = 0x6b3656
memcpy(0x6b365a, "7", 1)                                                = 0x6b365a
memcpy(0x6b365c, "28", 2)                                               = 0x6b365c
memcpy(0x6b365f, "30", 2)                                               = 0x6b365f
memcpy(0x6b3663, "5", 1)                                                = 0x6b3663
memcpy(0x6b3666, "0", 1)                                                = 0x6b3666
memcpy(0x6b3cb4, "14", 2)                                               = 0x6b3cb4
memcpy(0x6b3cb8, "7", 1)                                                = 0x6b3cb8
memcpy(0x6b3cba, "28", 2)                                               = 0x6b3cba
memcpy(0x6b3cbd, "30", 2)                                               = 0x6b3cbd
epoll_wait(8, 0x2639990, 512, 0xffffffff, 0x7fff8f684b52
</code></pre> 
  <h3>5. 网络相关</h3> 
  <h4>5.1 tcpdump - 监听网络流量</h4> 
  <h5>5.1.1 使用方式</h5> 
  <table> 
   <thead> 
    <tr> 
     <th>参数选项</th> 
     <th align="left">解释说明</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>-A</td> 
     <td align="left">以ASCII码的方式显示每一个数据包(不会显示数据包中链路层的头部信息)。在抓取包含网页数据的数据包时,可方便查看数据</td> 
    </tr> 
    <tr> 
     <td>-c <数据包数目></td> 
     <td align="left">接收到指定的数据包数目后退出命令@</td> 
    </tr> 
    <tr> 
     <td>-e</td> 
     <td align="left">每行的打印输出中将包含数据包的数据链路层头部信息</td> 
    </tr> 
    <tr> 
     <td>-i <网络接口></td> 
     <td align="left">指定要监听数据包的网络接口@</td> 
    </tr> 
    <tr> 
     <td>-n</td> 
     <td align="left">不进行DNS解析,加快显示速度@</td> 
    </tr> 
    <tr> 
     <td>-nn</td> 
     <td align="left">不将协议和端口数字等转换成名字@</td> 
    </tr> 
    <tr> 
     <td>-q</td> 
     <td align="left">以快速输出的方式运行,此选项仅显示数据包的协议概要信息,输出信息较短@</td> 
    </tr> 
    <tr> 
     <td>-s <数据包大小></td> 
     <td align="left">设置数据包抓取长度,如果不设置则默认为68字节,设置为0则自动选择合适的长度来抓取数据包</td> 
    </tr> 
    <tr> 
     <td>-t</td> 
     <td align="left">在每行输出信息中不显示时间戳标记</td> 
    </tr> 
    <tr> 
     <td>-tt</td> 
     <td align="left">在每行输出信息中显示无格式的时间戳标记</td> 
    </tr> 
    <tr> 
     <td>-ttt</td> 
     <td align="left">显示当前行与前一行的延迟</td> 
    </tr> 
    <tr> 
     <td>-tttt</td> 
     <td align="left">在每行打印的时间戳之前添加日期</td> 
    </tr> 
    <tr> 
     <td>-ttttt</td> 
     <td align="left">显示当前行与第一行的延迟</td> 
    </tr> 
    <tr> 
     <td>-v</td> 
     <td align="left">显示命令执行的详细信息</td> 
    </tr> 
    <tr> 
     <td>-vv</td> 
     <td align="left">显示比-v选项更加详细的信息</td> 
    </tr> 
    <tr> 
     <td>-vvv</td> 
     <td align="left">显示比-vv选项更加详细的输出</td> 
    </tr> 
   </tbody> 
  </table> 
  <h5>5.1.2 举例说明</h5> 
  <h6>5.1.2.1 不加参数运行tcpdump命令监听网络</h6> 
  <pre><code>[root@nginx ~]# tcpdump #默认情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
05:12:45.464963 IP localhost.ssh > localhost.50832: Flags [P.], seq 898292388:898292596, ack 861396487, win 317, length 208
05:12:45.465055 IP localhost.50832 > localhost.ssh: Flags [.], ack 208, win 523, length 0
05:12:45.465215 IP localhost.57595 > localhost.domain: 4104+ PTR? 254.0.168.192.in-addr.arpa. (44)
05:12:45.467851 IP localhost.domain > localhost.57595: 4104 1/0/0 PTR localhost. (67)
05:12:45.467906 IP localhost.57067 > localhost.domain: 107+ PTR? 233.0.168.192.in-addr.arpa. (44)
05:12:45.469444 IP localhost.domain > localhost.57067: 107 1/0/0 PTR localhost. (67)
05:12:45.469504 IP localhost.34192 > localhost.domain: 2703+ PTR? 1.0.168.192.in-addr.arpa. (42)
05:12:45.621206 IP localhost.ssh > localhost.50832: Flags [P.], seq 3120:3280, ack 1, win 317, length 160
05:12:45.621258 IP localhost.50832 > localhost.ssh: Flags [.], ack 3280, win 524, length 0
05:12:45.636742 IP localhost.ssh > localhost.50832: Flags [P.], seq 3280:3536, ack 1, win 317, length 256
05:12:45.643843 IP localhost.50832 > localhost.ssh: Flags [P.], seq 1:65, ack 3536, win 523, length 64
05:12:45.643889 IP localhost.ssh > localhost.50832: Flags [P.], seq 3536:3696, ack 65, win 317, length 160
^C              #tcpdump命令在运行期间可以使用组合Ctrl+C终止程序
29 packets captured     #最后三行就是按CTRL+C后输出的监听到的数据包汇总信息
32 packets received by filter
0 packets dropped by kernel
</code></pre> 
  <h6>5.1.2.2 精简输出信息</h6> 
  <pre><code>[root@nginx ~]# tcpdump -q  #默认情况下,tcpdump命令的输出信息较多,为了显示精简的信息,可以使用-q选项
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
05:33:01.438200 IP localhost.ssh > localhost.50832: tcp 208
05:33:01.479036 IP localhost.50832 > localhost.ssh: tcp 0
05:33:01.494539 IP localhost.ssh > localhost.50832: tcp 176
05:33:01.510460 IP localhost.ssh > localhost.50832: tcp 112
05:33:01.510907 IP localhost.50832 > localhost.ssh: tcp 0
05:33:01.525789 IP localhost.ssh > localhost.50832: tcp 176
05:33:01.541450 IP localhost.ssh > localhost.50832: tcp 112
05:33:01.541548 IP localhost.50832 > localhost.ssh: tcp 0
05:33:01.557049 IP localhost.ssh > localhost.50832: tcp 176
05:33:01.574173 IP localhost.ssh > localhost.50832: tcp 112
05:33:01.574486 IP localhost.50832 > localhost.ssh: tcp 0
05:33:01.583765 IP localhost.50832 > localhost.ssh: tcp 64
05:33:01.583857 IP localhost.ssh > localhost.50832: tcp 176
^C
24 packets captured
26 packets received by filter
0 packets dropped by kernel

[root@nginx ~]# tcpdump -c 5    #使用-c选项指定监听的数据包数量,这样就不需要使用Ctrl+C了
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
05:34:24.515192 IP localhost.ssh > localhost.50832: Flags [P.], seq 898300004:898300212, ack 861398503, win 317, length 208
05:34:24.515301 IP localhost.50832 > localhost.ssh: Flags [.], ack 208, win 519, length 0
05:34:24.515445 IP localhost.60389 > localhost.domain: 26412+ PTR? 254.0.168.192.in-addr.arpa. (44)
05:34:24.518180 IP localhost.domain > localhost.60389: 26412 1/0/0 PTR localhost. (67)
05:34:24.518247 IP localhost.38804 > localhost.domain: 7473+ PTR? 233.0.168.192.in-addr.arpa. (44)
5 packets captured
10 packets received by filter
0 packets dropped by kernel
</code></pre> 
  <h6>5.1.2.3 监听指定网卡收到的数据包</h6> 
  <pre><code>[root@nginx ~]# tcpdump -i eth0   #使用-i选项可以指定要监听的网卡
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
05:46:06.865643 IP localhost.ssh > localhost.50832: Flags [P.], seq 898335828:898336036, ack 861403175, win 317, length 208
05:46:06.865721 IP localhost.50832 > localhost.ssh: Flags [.], ack 208, win 524, length 0
05:46:06.865876 IP localhost.37090 > localhost.domain: 16313+ PTR? 254.0.168.192.in-addr.arpa. (44)
^C
49 packets captured
52 packets received by filter
0 packets dropped by kernel
</code></pre> 
  <p><strong>命令结果说明:</strong></p> 
  <ul> 
   <li class="task-list-item"> 05:46:06.865643:当前时间,精确到微妙</li> 
   <li class="task-list-item"> IP localhost.ssh > localhost.50832:从主机localhost的SSH端口发送数据到localhost的50832端口,“>”代表数据流向</li> 
   <li class="task-list-item"> Flags [P.]:TCP包中的标志信息,S是SYN标志的缩写,F(FIN),P(PUSH),R(RST),“.”(没有标记)。</li> 
   <li class="task-list-item"> seq:数据包中的数据的顺序号。</li> 
   <li class="task-list-item"> ack:下次期望的顺序号</li> 
   <li class="task-list-item"> win:接收缓存的窗口大小</li> 
   <li class="task-list-item"> length:数据包长度</li> 
  </ul> 
  <h6>5.1.2.4 监听指定主机的数据包</h6> 
  <pre><code>[root@nginx ~]# tcpdump -n -c 5 host 192.168.0.254    #使用-n选项不进行DNS解析,加快显示速度。监听指定主机的关键字为host,后面直接接主机名或IP地址即可。本行命令的作用是监听所有192.168.0.254的主机收到的和发出的数据包
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
06:18:59.812585 IP 192.168.0.233.ssh > 192.168.0.254.50832: Flags [P.], seq 898389300:898389508, ack 861410071, win 317, length 208
06:18:59.812763 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 208, win 524, length 0
06:18:59.813478 IP 192.168.0.233.ssh > 192.168.0.254.50832: Flags [P.], seq 208:496, ack 1, win 317, length 288
06:18:59.814441 IP 192.168.0.233.ssh > 192.168.0.254.50832: Flags [P.], seq 496:672, ack 1, win 317, length 176
06:18:59.814534 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 672, win 522, length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel

[root@nginx ~]# tcpdump -n -c 5 src host 192.168.0.254    #只监听从192.168.0.254发出的数据包,即源地址为192.168.0.254,关键字为src(source,源地址)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
06:19:45.439633 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 898393156, win 522, length 0
06:19:45.511489 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 161, win 521, length 0
06:19:45.589521 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 321, win 520, length 0
06:19:45.667712 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 481, win 520, length 0
06:19:45.733979 IP 192.168.0.254.50832 > 192.168.0.233.ssh: Flags [.], ack 641, win 519, length 0
5 packets captured
6 packets received by filter
0 packets dropped by kernel

[root@nginx ~]# tcpdump -n -c 5 dst host 192.168.0.254    #只监听192.168.0.254收到的数据包,即目标地址为192.168.0.254,关键字为dst(destination,目的地)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:21:33.783811 IP 192.168.0.233.ssh > 192.168.0.254.55962: Flags [P.], seq 1885784800:1885785008, ack 322191067, win 317, length 208
18:21:33.785709 IP 192.168.0.233.ssh > 192.168.0.254.55962: Flags [P.], seq 208:400, ack 1, win 317, length 192
18:21:33.786677 IP 192.168.0.233.ssh > 192.168.0.254.55962: Flags [P.], seq 400:576, ack 1, win 317, length 176
18:21:33.787676 IP 192.168.0.233.ssh > 192.168.0.254.55962: Flags [P.], seq 576:752, ack 1, win 317, length 176
18:21:33.788684 IP 192.168.0.233.ssh > 192.168.0.254.55962: Flags [P.], seq 752:928, ack 1, win 317, length 176
5 packets captured
5 packets received by filter
0 packets dropped by kernel
</code></pre> 
  <h6>5.1.2.5 监听指定端口的数据包</h6> 
  <pre><code>[root@nginx ~]# tcpdump -nn -c 5 port 22  #-nn不进行DNS解析,不将端口转换成服务名字, port指定监听端口
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:27:25.472624 IP 192.168.0.233.22 > 192.168.0.254.55962: Flags [P.], seq 1886385856:1886386064, ack 322195131, win 317, length 208
18:27:25.472764 IP 192.168.0.254.55962 > 192.168.0.233.22: Flags [.], ack 208, win 522, length 0
18:27:25.473731 IP 192.168.0.233.22 > 192.168.0.254.55962: Flags [P.], seq 208:496, ack 1, win 317, length 288
18:27:25.474746 IP 192.168.0.233.22 > 192.168.0.254.55962: Flags [P.], seq 496:672, ack 1, win 317, length 176
18:27:25.474836 IP 192.168.0.254.55962 > 192.168.0.233.22: Flags [.], ack 672, win 520, length 0
5 packets captured
5 packets received by filter
0 packets dropped by kernel
</code></pre> 
  <h6>5.1.2.6 监听指定协议的数据包</h6> 
  <pre><code>[root@nginx ~]# tcpdump -n -c 5 arp   #监听arp协议数据包,因此表达式直接写arp即可
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:29:08.056959 ARP, Request who-has 192.168.0.111 tell 192.168.0.1, length 46
18:29:08.978765 ARP, Request who-has 192.168.0.111 tell 192.168.0.1, length 46
18:29:09.900334 ARP, Request who-has 192.168.0.111 tell 192.168.0.1, length 46
18:29:10.822093 ARP, Request who-has 192.168.0.111 tell 192.168.0.1, length 46
18:29:12.050836 ARP, Request who-has 192.168.0.111 tell 192.168.0.1, length 46
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[root@nginx ~]# tcpdump -n -c 5 icmp  #监听icmp数据包(想要查看下面的监控数据,可以使用其他机器ping本机即可)
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
18:30:55.576828 IP 192.168.0.254 > 192.168.0.233: ICMP echo request, id 1, seq 19956, length 40
18:30:55.576844 IP 192.168.0.233 > 192.168.0.254: ICMP echo reply, id 1, seq 19956, length 40
18:30:56.578427 IP 192.168.0.254 > 192.168.0.233: ICMP echo request, id 1, seq 19958, length 40
18:30:56.578445 IP 192.168.0.233 > 192.168.0.254: ICMP echo reply, id 1, seq 19958, length 40
18:30:57.582167 IP 192.168.0.254 > 192.168.0.233: ICMP echo request, id 1, seq 19960, length 40
5 packets captured
6 packets received by filter
0 packets dropped by kernel
</code></pre> 
  <blockquote> 
   <p>常见的协议关键字有ip,arp,icmp,tcp,udp等类型</p> 
  </blockquote> 
  <h6>5.1.2.7 利用tcpdump抓包详解tcp/ip连接和断开过程的案例</h6> 
  <p><strong>使用tcpdump对tcp数据进行抓包</strong></p> 
  <pre><code>[root@nginx www]# tcpdump tcp port 80 or dst 192.168.0.114 -i eth0 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
#抓包分析:三次握手过程
22:38:18.564320 ARP, Reply 192.168.0.233 is-at 00:0c:29:a8:ca:50, length 28 
#发送了一个ARP响应包给目标MAC地址,告知对方本机的MAC地址
22:38:18.564418 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [S], seq 3675775834, win 14600, options [mss 1460,sackOK,TS val 4294710555 ecr 0,nop,wscale 6], length 0 
#IP为192.168.0.114(client)通过临时端口52367向本机192.168.0.233(server)的80监听端口发起连接,client的初始包序号为3675775834,滑动窗口大小为14600字节(即TCP接收缓冲区的大小,用于TCP拥塞控制),mss大小为1460(即可接收的最大包长度),[S]=[SYN](发起连接标志)
22:38:18.564434 IP 192.168.0.233.http > 192.168.0.114.52367: Flags [S.], seq 2909831439, ack 3675775835, win 14480, options [mss 1460,sackOK,TS val 15157720 ecr 4294710555,nop,wscale 6], length 0
#Server的响应连接,同时带上上一个包的ack信息(为client端的初始包序号+1,即3675775835,也就是server端下次等待接收这个包序号的包,用于TCP字节流的顺序控制。Server端的初始包序号为2909831439,mss也是1460)
22:38:18.564541 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [.], ack 1, win 229, options [nop,nop,TS val 4294710556 ecr 15157720], length 0
#Client端再次确认,tcp三次握手完成。“.”表示没有任何标识
</code></pre> 
  <p><strong>数据传输过程:</strong></p> 
  <pre><code>22:38:18.564654 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [P.], seq 1:169, ack 1, win 229, options [nop,nop,TS val 4294710557 ecr 15157720], length 168
#Client端发请求包,包长度是168字节。[P]=[push](传送数据标志)
22:38:18.564658 IP 192.168.0.233.http > 192.168.0.114.52367: Flags [.], ack 169, win 243, options [nop,nop,TS val 15157720 ecr 4294710557], length 0  #Server端回应Client端表示收到请求,并确认已经收到了之前的168字节
22:38:18.564707 IP 192.168.0.233.http > 192.168.0.114.52367: Flags [P.], seq 1:237, ack 169, win 243, options [nop,nop,TS val 15157720 ecr 4294710557], length 236    #Server回包,包长度236字节
22:38:18.564755 IP 192.168.0.233.http > 192.168.0.114.52367: Flags [P.], seq 237:258, ack 169, win 243, options [nop,nop,TS val 15157720 ecr 4294710557], length 21
22:38:18.564773 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [.], ack 237, win 245, options [nop,nop,TS val 4294710557 ecr 15157720], length 0
22:38:18.564818 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [.], ack 258, win 245, options [nop,nop,TS val 4294710557 ecr 15157720], length 0
</code></pre> 
  <p><strong>4次挥手过程:</strong></p> 
  <pre><code>22:38:18.564946 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [F.], seq 169, ack 258, win 245, options [nop,nop,TS val 4294710557 ecr 15157720], length 0  
#Client端发送关闭连接请求,F=FIN(断开连接标志)
22:38:18.564956 IP 192.168.0.233.http > 192.168.0.114.52367: Flags [F.], seq 258, ack 170, win 243, options [nop,nop,TS val 15157720 ecr 4294710557], length 0
#Server端回应并确认了Client端的断开连接请求,并且也发送了FIN标志关闭。(只有当服务器传输未完成时,此处才会出现两次挥手,如果Clinet发起断开请求时,服务器已经传输数据完成,则此处服务端会直接回应关闭标志FIN)
22:38:18.565022 IP 192.168.0.114.52367 > 192.168.0.233.http: Flags [.], ack 259, win 245, options [nop,nop,TS val 4294710557 ecr 15157720], length 0
#Clinet端响应ack,关闭连接的四次挥手完成
</code></pre> 
  <h4>5.2 nmap - 网络探测工具和安全/端口扫描器</h4> 
  <h5>5.2.1 使用方式</h5> 
  <table> 
   <thead> 
    <tr> 
     <th>参数选项</th> 
     <th align="left">解释说明</th> 
    </tr> 
   </thead> 
   <tbody> 
    <tr> 
     <td>-sS</td> 
     <td align="left">TCP同步扫描(TCP SYN)@</td> 
    </tr> 
    <tr> 
     <td>-sT</td> 
     <td align="left">TCP连接扫描</td> 
    </tr> 
    <tr> 
     <td>-sn</td> 
     <td align="left">不进行端口扫描,只检查主机正在运行。该选项与老版本的-sP相同@</td> 
    </tr> 
    <tr> 
     <td>-sU</td> 
     <td align="left">扫描UDP端口</td> 
    </tr> 
    <tr> 
     <td>-sV</td> 
     <td align="left">探测服务版本信息</td> 
    </tr> 
    <tr> 
     <td>-Pn</td> 
     <td align="left">只进行扫描,不ping主机</td> 
    </tr> 
    <tr> 
     <td>-PS</td> 
     <td align="left">使用SYN包对目标主机进行扫描。默认是80端口,也可以指定端口,格式为-PS22或-PS22-25,80,113,1050,35000,记住PS和端口号之间不要有空格</td> 
    </tr> 
    <tr> 
     <td>-PU</td> 
     <td align="left">使用udp ping扫描端口</td> 
    </tr> 
    <tr> 
     <td>-O</td> 
     <td align="left">激活对TCP/IP指纹特征(fingerprinting)的扫描,获得远程主机的标志,也就是操作系统类型</td> 
    </tr> 
    <tr> 
     <td>-v</td> 
     <td align="left">显示扫描过程中的详细信息@</td> 
    </tr> 
    <tr> 
     <td>-S</td> 
     <td align="left">设置扫描的源IP地址</td> 
    </tr> 
    <tr> 
     <td>-g port</td> 
     <td align="left">设置扫描的源端口</td> 
    </tr> 
    <tr> 
     <td>-oN</td> 
     <td align="left">把扫描的结果重定向到文件中</td> 
    </tr> 
    <tr> 
     <td>-iL filename</td> 
     <td align="left">从文件中读取扫描的目标</td> 
    </tr> 
    <tr> 
     <td>-p <端口></td> 
     <td align="left">指定要扫描的端口,可以是一个单独的端口,也可以用逗号分隔开多个端口,或者使用“-”表示端口范围@</td> 
    </tr> 
    <tr> 
     <td>-n</td> 
     <td align="left">不进行DNS解析,加快扫描速度@</td> 
    </tr> 
    <tr> 
     <td>-exclude</td> 
     <td align="left">排除指定主机</td> 
    </tr> 
    <tr> 
     <td>-excludefile</td> 
     <td align="left">排除指定文件中的主机</td> 
    </tr> 
   </tbody> 
  </table> 
  <h5>5.2.2 举例说明</h5> 
  <h6>5.2.2.1 查看主机当前开放的端口</h6> 
  <pre><code>[root@nginx ~]# nmap 192.168.0.1  #直接接目标主机,默认会扫描1~1000端口

Starting Nmap 5.51 ( http://nmap.org ) at 2018-02-28 08:23 EST
Nmap scan report for localhost (192.168.0.1)
Host is up (0.014s latency).        #目标主机正在运行
Not shown: 999 closed ports         #999个端口关闭
PORT   STATE SERVICE
80/tcp open  http                   #开放的80端口http服务
MAC Address: CC:B2:55:DF:3C:83 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.37 seconds
</code></pre> 
  <h6>5.2.2.2 扫描主机的指定端口</h6> 
  <pre><code>[root@nginx ~]# nmap -p 1024-65535 192.168.0.1    #-p选项指定扫描范围

Starting Nmap 5.51 ( http://nmap.org ) at 2018-02-28 08:26 EST
Nmap scan report for localhost (192.168.0.1)
Host is up (0.039s latency).
Not shown: 64511 closed ports
PORT     STATE SERVICE
1780/tcp open  unknown
MAC Address: CC:B2:55:DF:3C:83 (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 17.46 seconds
</code></pre> 
  <h6>5.2.2.3 扫描局域网内所有的IP</h6> 
  <pre><code>[root@nginx ~]# nmap 192.168.0.0/24   #使用网段的格式扫描局域网

Starting Nmap 5.51 ( http://nmap.org ) at 2018-02-28 08:29 EST
Nmap scan report for localhost (192.168.0.1)
Host is up (0.0072s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http
MAC Address: CC:B2:55:DF:3C:83 (Unknown)

Nmap scan report for localhost (192.168.0.129)
Host is up (0.092s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
80/tcp open  http
MAC Address: F0:FE:6B:69:5B:1E (Unknown)

Nmap scan report for localhost (192.168.0.133)
Host is up (0.33s latency).
All 1000 scanned ports on localhost (192.168.0.133) are closed
MAC Address: BC:3D:85:FE:3F:DA (Unknown)

Nmap scan report for localhost (192.168.0.233)
Host is up (0.0000010s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap scan report for localhost (192.168.0.254)
Host is up (0.00016s latency).
Not shown: 992 closed ports
PORT      STATE SERVICE
135/tcp   open  msrpc
139/tcp   open  netbios-ssn
443/tcp   open  https
445/tcp   open  microsoft-ds
902/tcp   open  iss-realsecure
912/tcp   open  apex-mesh
5678/tcp  open  rrac
10000/tcp open  snet-sensor-mgmt
MAC Address: 30:B4:9E:74:1B:3B (Unknown)

Nmap done: 256 IP addresses (5 hosts up) scanned in 19.27 seconds

[root@nginx ~]# nmap -sn 192.168.0.0/24   #使用-sn选项不扫描端口

Starting Nmap 5.51 ( http://nmap.org ) at 2018-02-28 08:32 EST
Nmap scan report for localhost (192.168.0.1)
Host is up (0.0027s latency).
MAC Address: CC:B2:55:DF:3C:83 (Unknown)
Nmap scan report for localhost (192.168.0.233)
Host is up.
Nmap scan report for localhost (192.168.0.254)
Host is up (0.000071s latency).
MAC Address: 30:B4:9E:74:1B:3B (Unknown)
Nmap done: 256 IP addresses (3 hosts up) scanned in 2.56 seconds

[root@nginx ~]# nmap -sn 192.168.0.232-234    #使用这种地址范围进行扫描

Starting Nmap 5.51 ( http://nmap.org ) at 2018-02-28 08:34 EST
Nmap scan report for localhost (192.168.0.233)
Host is up.
Nmap done: 3 IP addresses (1 host up) scanned in 0.81 seconds
</code></pre> 
  <h6>5.2.2.4 探测目标主机的服务和操作系统的版本</h6> 
  <pre><code>[root@nginx ~]# nmap -O -sV 192.168.0.1

Starting Nmap 5.51 ( http://nmap.org ) at 2018-02-28 08:43 EST
Nmap scan report for localhost (192.168.0.1)
Host is up (0.0037s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE VERSION
80/tcp open  http    Linksys wireless-G WAP http config (Name D-Link Wireless N Router DIR-600M)
MAC Address: CC:B2:55:DF:3C:83 (Unknown)
Device type: general purpose
Running: Linux 2.4.X
OS details: Linux 2.4.18 - 2.4.35 (likely embedded)
Network Distance: 1 hop
Service Info: Device: WAP

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.93 seconds
</code></pre> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1716036687253024768"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(linux常用,linux,运维,服务器,容器)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1939876750855041024.htm"
                           title="C++ 第四阶段 STL 容器 - 第七讲:详解 std::vector 与 std::deque —— 动态数组与双端队列的深度解析" target="_blank">C++ 第四阶段 STL 容器 - 第七讲:详解 std::vector 与 std::deque —— 动态数组与双端队列的深度解析</a>
                        <span class="text-muted"></span>

                        <div>目录一、std::vector与std::deque概述二、std::vector详解1.核心特性2.常用函数解析3.动态扩容机制三、std::deque详解1.核心特性2.常用函数解析3.性能优势四、std::vector与std::deque对比五、性能优化建议1.std::vector优化2.std::deque优化六、常见陷阱与解决方案1.std::vector的扩容陷阱2.迭代器失效问题</div>
                    </li>
                    <li><a href="/article/1939871082148327424.htm"
                           title="告别GPU焦虑:如何在纯CPU服务器上,打造高性能Embedding服务?" target="_blank">告别GPU焦虑:如何在纯CPU服务器上,打造高性能Embedding服务?</a>
                        <span class="text-muted">ezl1fe</span>
<a class="tag" taget="_blank" href="/search/embedding/1.htm">embedding</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a>
                        <div>Hi,大家好,我是ezl1fe。最近接手一个项目,要求在纯CPU服务器上部署Embedding模型服务。兄弟们都懂,GPU它香啊,但它也贵啊!很多时候,咱只能在有限的资源里想办法。一开始,我们图方便,直接从HuggingFace上拉了当时效果最好的BAAI/bge-m3模型,用transformers库一把梭。结果呢?部署到一台8核16G的服务器上,精度是高,但性能也是真的“感人”,单个请求响应要</div>
                    </li>
                    <li><a href="/article/1939870452474245120.htm"
                           title="【C++ STL】 容器——unordered_set详解" target="_blank">【C++ STL】 容器——unordered_set详解</a>
                        <span class="text-muted">RichardK.</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/STL/1.htm">STL</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a>
                        <div>在C++标准库(STL)中,unordered_set是一个无序集合,它底层采用哈希表实现,提供快速的查找、插入和删除操作。与set不同,unordered_set不会自动排序元素,而是依据哈希函数存储元素,因此其操作的时间复杂度通常为O(1)。1.unordered_set的基本特点底层实现:基于哈希表(通常是哈希桶+链表或开放地址法)。元素唯一性:不允许存储重复元素。无序存储:元素的存储顺序不</div>
                    </li>
                    <li><a href="/article/1939869444775931904.htm"
                           title="C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set" target="_blank">C++ 第四阶段 STL 容器 - 第五讲:详解 std::set 与 std::unordered_set</a>
                        <span class="text-muted">程序员弘羽</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B%E4%BB%8E%E5%85%A5%E9%97%A8%E5%88%B0%E5%85%A5%E5%9C%9F%E8%BF%9E%E8%BD%BD/1.htm">C++从入门到入土连载</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%93%88%E5%B8%8C%E7%AE%97%E6%B3%95/1.htm">哈希算法</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a>
                        <div>目录一、std::set与std::unordered_set概述二、std::set详解1.核心特性2.常用函数解析3.自定义比较函数三、std::unordered_set详解1.核心特性2.常用函数解析3.自定义哈希与比较函数四、性能对比与优化建议1.性能对比表2.优化建议五、常见陷阱与解决方案1.修改std::set中的元素2.std::unordered_set的rehash3.自定义类</div>
                    </li>
                    <li><a href="/article/1939866672064163840.htm"
                           title="实践篇:09-构建标准化的 OS 基础镜像" target="_blank">实践篇:09-构建标准化的 OS 基础镜像</a>
                        <span class="text-muted">企鹅侠客</span>
<a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/dockerfile/1.htm">dockerfile</a><a class="tag" taget="_blank" href="/search/%E9%95%9C%E5%83%8F/1.htm">镜像</a><a class="tag" taget="_blank" href="/search/docker%E6%9E%84%E5%BB%BA%E5%9F%BA%E7%A1%80%E9%95%9C%E5%83%8F/1.htm">docker构建基础镜像</a>
                        <div>在设计篇:04-Dockerfile设计原则与镜像管理规范中,我们探讨了镜像逻辑分层策略,其中系统层(OSLayer)是整个体系的基石。本篇将指导你如何选择合适的Linux发行版作为基础,并构建一个标准化、精简且安全的系统层镜像,为后续的所有应用镜像打下坚实基础。如何选择基础OS镜像?选择合适的基础OS镜像至关重要,它直接影响后续镜像的大小、安全性、稳定性和构建效率。以下是几种常见选择及其特点:主</div>
                    </li>
                    <li><a href="/article/1939860753372737536.htm"
                           title="AlpineLinux安装docker" target="_blank">AlpineLinux安装docker</a>
                        <span class="text-muted">山岚的运维笔记</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%8F%8A%E4%BD%BF%E7%94%A8/1.htm">运维及使用</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E5%AE%B9%E5%99%A8/1.htm">容器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>或许你在docker中使用AlpineLinux的镜像使用得多,但是有没有想过在AlpineLinux上安装Docker来使用呢?默认情况下,Docker包位于社区仓库中,因此在使用包管理来安装docker之前建议更换为国内源,并开启社区仓库的链接。下面的操作是在root用户下运行的,如果要使用非root用户,请先确保该用户有sudo的权限配置为国内源并开启社区源:修改AlpineLinux的仓库</div>
                    </li>
                    <li><a href="/article/1939855208830005248.htm"
                           title="linux常用基础命令_新" target="_blank">linux常用基础命令_新</a>
                        <span class="text-muted">脚大江山稳</span>
<a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>常用命令查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touch创建文件夹查找文件/文件名/大小查找查看文件内容cat/more删除文件或文件夹管道符|过滤grep命令echo命令输出内容重</div>
                    </li>
                    <li><a href="/article/1939848405622779904.htm"
                           title="分享一些 SQL 优化工具" target="_blank">分享一些 SQL 优化工具</a>
                        <span class="text-muted">王宇帆avalanche</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a>
                        <div>一、数据库自带的性能监控和分析工具MySQL:MySQLEnterpriseMonitor:这是MySQL官方推出的一款企业级监控工具,它提供了全面的数据库性能监控和管理功能。功能特点:可以实时监控MySQL服务器的各种关键性能指标,如查询响应时间、吞吐量、连接数、缓存命中率等。它还能深入分析SQL查询的执行计划,帮助用户找出性能瓶颈和优化点。通过直观的图形界面,管理员可以轻松了解数据库的运行状态</div>
                    </li>
                    <li><a href="/article/1939845253691404288.htm"
                           title="离线安装 Docker 和 Docker Compose 教程" target="_blank">离线安装 Docker 和 Docker Compose 教程</a>
                        <span class="text-muted">海洋猿</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E5%8E%9F%E7%94%9F/1.htm">云原生</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a>
                        <div>一、离线安装(一)安装Docker下载Docker安装包访问Docker官方静态安装包页面:https://download.docker.com/linux/static/stable/x86_64/Indexoflinux/static/stable/x86_64/解压安装包并移动文件tar-xvfdocker-27.1.0.tgzmvdocker/*/usr/bin/将Docker注册为sy</div>
                    </li>
                    <li><a href="/article/1939837691373875200.htm"
                           title="日志-解决Linux因target is busy无法卸载硬盘/分区的问题 - PHP持续占用分区" target="_blank">日志-解决Linux因target is busy无法卸载硬盘/分区的问题 - PHP持续占用分区</a>
                        <span class="text-muted">Rudon滨海渔村</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/mount/1.htm">mount</a><a class="tag" taget="_blank" href="/search/umount/1.htm">umount</a>
                        <div>效果图写在前面此次遇到的问题是,php-fpm持续占用设备/mnt/disk1,强制杀死php所有进程后,依然会自动产生新的进程再次霸占分区,导致设备无法卸载umount。思路是解决谁在不停的捣乱。步骤核心:挂载文件系统到指定的目录mount/dev/sdb/mnt/xxx卸载已挂载的文件系统‌,支持通过设备名或挂载点指定目标umount/dev/sdb查看占用此设备的所有进程:fuser-mv/</div>
                    </li>
                    <li><a href="/article/1939835928449183744.htm"
                           title="16014.rtsp推流服务器" target="_blank">16014.rtsp推流服务器</a>
                        <span class="text-muted">guangshui516</span>
<a class="tag" taget="_blank" href="/search/16000-Linux/1.htm">16000-Linux</a><a class="tag" taget="_blank" href="/search/%E7%BB%BC%E5%90%88%E7%AF%87/1.htm">综合篇</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>1ubuntu20.04搭建rtsp服务器,easyplayer进行拉流在images/stream1文件下存储了5张图片,作为咱们得原料,运行rtsp服务器,即可。#include#include#include</div>
                    </li>
                    <li><a href="/article/1939833912016564224.htm"
                           title="Linux——搭建嵌入式Linux开发环境步骤总结(虚拟机、Ubuntu、JDK、库文件、GCC)" target="_blank">Linux——搭建嵌入式Linux开发环境步骤总结(虚拟机、Ubuntu、JDK、库文件、GCC)</a>
                        <span class="text-muted">Winter_world</span>
<a class="tag" taget="_blank" href="/search/%E6%90%AD%E5%BB%BA%E5%B5%8C%E5%85%A5%E5%BC%8FLinux%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83/1.htm">搭建嵌入式Linux开发环境</a><a class="tag" taget="_blank" href="/search/%E8%99%9A%E6%8B%9F%E6%9C%BAUbuntu/1.htm">虚拟机Ubuntu</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85JDK/1.htm">安装JDK</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85%E5%BA%93%E6%96%87%E4%BB%B6/1.htm">安装库文件</a><a class="tag" taget="_blank" href="/search/GCC%E7%89%88%E6%9C%AC%E6%9B%B4%E6%96%B0/1.htm">GCC版本更新</a>
                        <div>目录0前言1主机软件环境2Linux系统下安装编译组件3Linux系统下安装库文件和JDK0前言回顾一直以来做的嵌入式项目方向,从如ST的单片机裸机开发,SOC开发,到STM32裸机开发,基于uCOSII的开发,基于freeRTOS的开发等,在实时操作系统层面的应用开发停留了一段时间了,一直想再突破下自我,去年做了一个基于工控机方案的Linux系统应用开发项目,对于Linux一直没有系统性的学习整</div>
                    </li>
                    <li><a href="/article/1939828617471127552.htm"
                           title="如何搭建基于RK3588的边缘服务器集群?支持12个RK3588云手机" target="_blank">如何搭建基于RK3588的边缘服务器集群?支持12个RK3588云手机</a>
                        <span class="text-muted">XMAIPC_Robot</span>
<a class="tag" taget="_blank" href="/search/ARM%2BFPGA/1.htm">ARM+FPGA</a><a class="tag" taget="_blank" href="/search/AI%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">AI服务器</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>以下是基于RK3588搭建边缘服务器集群的完整实施方案,涵盖硬件选型、集群架构、软件部署及优化要点:️‌一、硬件集群架构设计‌‌节点基础配置‌‌核心单元‌:单节点采用RK3588核心板(4×A76@2.4GHz+4×A55@1.8GHz),集成6TOPSNPU及Mali-G610GPU,支持LPDDR4X内存(4~32GB)及eMMC/SATA/TF卡多级存储611。‌扩展接口‌:通过100Pin</div>
                    </li>
                    <li><a href="/article/1939825719471304704.htm"
                           title="OpenKyLin开源操作系统——银河麒麟" target="_blank">OpenKyLin开源操作系统——银河麒麟</a>
                        <span class="text-muted"></span>

                        <div>openKylin操作系统是由openKylin社区主导开发的一款根社区桌面操作系统,适用于X86、ARM、RISC-V等主流架构的台式电脑、笔记本电脑、平板和嵌⼊式设备。在内核、基础库、应用软件等方面均采用领先的版本,是麒麟商业版本的技术上游,与商业版本路线一致、协同发展。同时,openKylin社区版还将融合各类创新技术应用,汇聚行业力量,共同推动Linux行业创新发展!版本特性openKyl</div>
                    </li>
                    <li><a href="/article/1939816515473829888.htm"
                           title="电容器保护测控装置:原理与功能解析" target="_blank">电容器保护测控装置:原理与功能解析</a>
                        <span class="text-muted"></span>

                        <div>电容器保护测控装置是电容补偿系统的核心设备,适用于非直接接地或小电阻接地系统。其采用保护测控一体化设计,集成通信接口,支持组屏或就地安装,实现对并联电容器组的全方位监控与故障防护。电容器保护测控装置通过多维度保护逻辑(电流/电压/零序/非电量)、高精度测控及强抗干扰设计,保障电容补偿系统安全运行。一、核心保护原理1.电流类保护三段式定时限过流保护动作逻辑:任一相电流>定值且持续>延时时间→跳闸出口</div>
                    </li>
                    <li><a href="/article/1939816261655523328.htm"
                           title="为什么一定要用云服务器而不用物理机?" target="_blank">为什么一定要用云服务器而不用物理机?</a>
                        <span class="text-muted">云资源服务商冰儿</span>
<a class="tag" taget="_blank" href="/search/%E4%BA%91%E8%AE%A1%E7%AE%97/1.htm">云计算</a><a class="tag" taget="_blank" href="/search/%E9%98%BF%E9%87%8C%E4%BA%91/1.htm">阿里云</a><a class="tag" taget="_blank" href="/search/%E8%85%BE%E8%AE%AF%E4%BA%91/1.htm">腾讯云</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>随着云计算技术的发展,越来越多的企业正在考虑将业务迁移到云端。在这个过程中,选择合适的云服务提供商及其产品变得至关重要。本文将以阿里云的弹性计算服务(ECS)为例,结合实测数据,与传统物理服务器进行成本、性能和安全性的全面对比,帮助企业更好地理解云服务的优势,并做出明智的选择。成本效益分析阿里云ECS:按需付费:用户可以根据实际使用的资源量来支付费用,避免了前期高额的硬件采购成本。节省维护费用:无</div>
                    </li>
                    <li><a href="/article/1939815503958700032.htm"
                           title="基于C#的OPCServer应用开发,引用WtOPCSvr.dll" target="_blank">基于C#的OPCServer应用开发,引用WtOPCSvr.dll</a>
                        <span class="text-muted"></span>

                        <div>操作流程:1.引入WtOPCSvr.dll文件2.注册服务:使用UpdateRegistry方法注册,注意关闭应用时使用UnregisterServer取消注册。3.初始化服务:使用InitWTOPCsvr初始化4.使用CreateTag方法,创建标签5.读写参数使用下面三个方法:StartUpdateTagsUpdateTagEndUpdateTags6.当发生客户端写操作的时候,服务器执行下面</div>
                    </li>
                    <li><a href="/article/1939812734363299840.htm"
                           title="用html代码制作一个表单页面,HTML网页表单制作详细讲解" target="_blank">用html代码制作一个表单页面,HTML网页表单制作详细讲解</a>
                        <span class="text-muted">weixin_39747975</span>
<a class="tag" taget="_blank" href="/search/%E7%94%A8html%E4%BB%A3%E7%A0%81%E5%88%B6%E4%BD%9C%E4%B8%80%E4%B8%AA%E8%A1%A8%E5%8D%95%E9%A1%B5%E9%9D%A2/1.htm">用html代码制作一个表单页面</a>
                        <div>表单是一个网站和访问者开展互动的窗口,我们现在就给大家介绍一下表单的一些基本知识和表单美化方法。初识表单表单可以用来在网页中发送数据,特别是经常被用在联系表单-用户输入信息然后发送到Email中。表单本身是没有什么用的。这需要编一个程序来处理输入表单中的数据。这也超出了本站指南的范围。如果使用网络服务器来放置HTML,你能够自助地找到一些简单的教程,开发一个服务器端的程序使一个发送到Email的表</div>
                    </li>
                    <li><a href="/article/1939809833725259776.htm"
                           title="银河麒麟服务器迁移运维管理平台(接口文档)" target="_blank">银河麒麟服务器迁移运维管理平台(接口文档)</a>
                        <span class="text-muted">RZer</span>
<a class="tag" taget="_blank" href="/search/%E9%BA%92%E9%BA%9F%E8%BD%AF%E4%BB%B6/1.htm">麒麟软件</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/Kylinsoft/1.htm">Kylinsoft</a>
                        <div>银河麒麟高级服务器操作系统V10系统管理员手册文章目录CVE下发接口获取CVE接口获取主机接口获取批次接口获取父日志接口获取子日志接口CVE下发接口功能描述:CVE下发接口调用接口URL:/cve/issue接口类型:POST请求头:API-KEY:your_API_key(内容为APIKey值,需要通过登陆平台,在个人信息处获取)参数:参数名类型含义targetType字符串传入类型(二选一):</div>
                    </li>
                    <li><a href="/article/1939808950132207616.htm"
                           title="华为云挂载磁盘及初始化数据盘(Linux)_华为服务器怎么挂载硬盘" target="_blank">华为云挂载磁盘及初始化数据盘(Linux)_华为服务器怎么挂载硬盘</a>
                        <span class="text-muted">36氪(36Kr)频道首页</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a>
                        <div>Select(defaultp):pPartitionnumber(1-4,default1):接下来每步均使用默认值,直接按“Enter”。Partitionnumber(1-4,default1):Firstsector(2048-209715199,default2048):Usingdefaultvalue2048Lastsector,+sectorsor+size{K,M,G}(2048</div>
                    </li>
                    <li><a href="/article/1939808950731993088.htm"
                           title="Linux 超大规模数据盘初始化技巧" target="_blank">Linux 超大规模数据盘初始化技巧</a>
                        <span class="text-muted">我是峰迹</span>
<a class="tag" taget="_blank" href="/search/Linux%E8%BF%90%E7%BB%B4/1.htm">Linux运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a>
                        <div>在处理超大规模数据盘时,Linux系统管理员需要掌握一些高效的初始化技巧,以确保数据盘的性能和稳定性。本文将详细介绍如何使用fdisk和parted工具进行数据盘的初始化,包括分区创建、格式化以及挂载等步骤。使用fdisk进行数据盘初始化查看当前硬盘及分区情况首先,使用fdisk-l命令查看当前系统中所有的硬盘及分区情况,这有助于了解当前的存储资源分布。fdisk-l创建新分区使用fdisk对指定</div>
                    </li>
                    <li><a href="/article/1939808444634689536.htm"
                           title="Linux系统管理:服务器运维与安全防护" target="_blank">Linux系统管理:服务器运维与安全防护</a>
                        <span class="text-muted">教IT的小王A</span>
<a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a>
                        <div>Linux系统管理:服务器运维与安全防护Linux系统管理:服务器运维与安全防护一、Linux系统管理基础系统架构与组成是一种自由和开放源代码的类UNIX操作系统,它是基于POSIX和UNIX的多用户、多任务操作系统。Linux的核心是Linux内核,其基本组成部分包括Shell、文件系统、系统库等。常用Linux命令文件与目录管理在Linux系统中,文件和目录的管理是非常重要的,例如用户常用的l</div>
                    </li>
                    <li><a href="/article/1939807308682948608.htm"
                           title="Linux 系统管理:高效运维与性能优化" target="_blank">Linux 系统管理:高效运维与性能优化</a>
                        <span class="text-muted">代码老y</span>
<a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a>
                        <div>一、Linux系统管理基础(一)用户与权限管理用户和权限管理是Linux系统管理的基础。通过合理配置用户和权限,可以确保系统的安全性和稳定性。用户管理使用useradd、usermod和userdel命令管理用户账户。使用passwd命令设置用户密码。使用groups和gpasswd命令管理用户组。权限管理使用chmod命令设置文件和目录的权限。使用chown和chgrp命令更改文件和目录的所有者</div>
                    </li>
                    <li><a href="/article/1939795707800121344.htm"
                           title="阿里云服务器 配置frp实现Ubuntu台式机电脑内网穿透" target="_blank">阿里云服务器 配置frp实现Ubuntu台式机电脑内网穿透</a>
                        <span class="text-muted">涛歌依旧fly</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/frp/1.htm">frp</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F/1.htm">内网穿透</a><a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</a><a class="tag" taget="_blank" href="/search/%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">云服务器</a>
                        <div>起因实验室一台Ubuntu20.04的台式机电脑,我想用我的Win10笔记本远程连接它,用它的高性能,在Ubuntu的环境下来跑代码,这样比较方便。编程环境即可具有便携、性能。两者兼得,而且我的笔记本看来很舒服,毕竟2.8k,90分辨率。需要使用内网穿透技术,我的Ubuntu处于内网,需要挂载到云服务器上,云服务器具有公网ip和域名。这样外网就可以访问我的内网ubuntu电脑。图来自:https:</div>
                    </li>
                    <li><a href="/article/1939793818601713664.htm"
                           title="vue-31(Nuxt.js 中的数据获取:asyncData和fetch)" target="_blank">vue-31(Nuxt.js 中的数据获取:asyncData和fetch)</a>
                        <span class="text-muted">清幽竹客</span>
<a class="tag" taget="_blank" href="/search/VUE/1.htm">VUE</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>Nuxt.js中的数据获取:asyncData和fetchNuxt.js为您的应用程序提供了强大而便捷的数据获取方式,尤其是在处理服务器端渲染(SSR)时。数据获取的两个主要方法是asyncData和fetch。了解每种方法的细微差别以及何时使用它们,对于构建高效和性能卓越的Nuxt.js应用程序至关重要。本课将深入探讨这些方法的细节,探索它们的功能、用例和差异。理解asyncDataasyncD</div>
                    </li>
                    <li><a href="/article/1939790539700367360.htm"
                           title="架构轻巧的kokoro 文本转语音模型" target="_blank">架构轻巧的kokoro 文本转语音模型</a>
                        <span class="text-muted">skywalk8163</span>
<a class="tag" taget="_blank" href="/search/%E8%BD%AF%E7%A1%AC%E4%BB%B6%E8%B0%83%E8%AF%95/1.htm">软硬件调试</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E5%AA%92%E4%BD%93/1.htm">多媒体</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Kokoro是一个具有8200万个参数的开放权重TTS模型。尽管其架构轻巧,但它提供了与较大型号相当的质量,同时速度更快,更具成本效益。使用Apache许可的权重,Kokoro可以部署在从生产环境到个人项目的任何地方。官网:hexgrad/kokoro:https://hf.co/hexgrad/Kokoro-82M现在我们来实践下KokoroLinux下安装使用安装库pipinstall-qko</div>
                    </li>
                    <li><a href="/article/1939789151545126912.htm"
                           title="使用linux命令上传、下载文件(使用sz与rz命令)" target="_blank">使用linux命令上传、下载文件(使用sz与rz命令)</a>
                        <span class="text-muted">星梦客</span>
<a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a>
                        <div>sz:弹出窗口,选择下载路径,下载到指定路径rz:弹出一个文件选择窗口,从本地选择文件上传到Linux服务器先安装:yuminstalllrzszsz用法:#可同时指定多个同级文件名sz文件夹下所有文件szdir/*rz用法:cd到指定目录输入rz回车后,弹出窗口,一次可指定多个文件</div>
                    </li>
                    <li><a href="/article/1939778567768436736.htm"
                           title="现代C++ 文件系统库" target="_blank">现代C++ 文件系统库</a>
                        <span class="text-muted">mxpan</span>
<a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a><a class="tag" taget="_blank" href="/search/c%2B%2B/1.htm">c++</a>
                        <div>一、std::filesystem的前世今生C++11之前,文件系统操作依赖于平台特定的API(如Windows的CreateFile或POSIX的open),缺乏统一接口。C++17正式将std::filesystem纳入标准库,该库最初由Boost.Filesystem演化而来,提供了跨平台的文件系统操作能力。核心优势:跨平台兼容性:一次编写,支持Windows、Linux、macOS等主流平</div>
                    </li>
                    <li><a href="/article/1939774110833897472.htm"
                           title="HTTP代理:网络世界的智能中转站" target="_blank">HTTP代理:网络世界的智能中转站</a>
                        <span class="text-muted"></span>

                        <div>在互联网信息高速流动的时代,HTTP代理作为一种基础却强大的网络工具,正在各类网络活动中扮演着越来越重要的角色。它就像一位经验丰富的网络向导,不仅能够优化访问路径,还能在用户与目标网站之间建立起安全屏障,让网络体验更加流畅和安全。HTTP代理最基本的功能是作为网络请求的中转站。当用户通过代理访问网站时,请求首先发送到代理服务器,再由代理服务器向目标网站获取数据。这种间接访问的方式带来了多重优势:一</div>
                    </li>
                    <li><a href="/article/1939771510361223168.htm"
                           title="16.6 《3分钟扩容20实例!LanguageMentor容器化部署实战:高并发下的负载均衡与自动扩展方案》" target="_blank">16.6 《3分钟扩容20实例!LanguageMentor容器化部署实战:高并发下的负载均衡与自动扩展方案》</a>
                        <span class="text-muted">少林码僧</span>
<a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4/1.htm">运维</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E6%A8%A1%E5%9E%8B/1.htm">语言模型</a><a class="tag" taget="_blank" href="/search/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0/1.htm">机器学习</a><a class="tag" taget="_blank" href="/search/langchain/1.htm">langchain</a><a class="tag" taget="_blank" href="/search/llama/1.htm">llama</a>
                        <div>LanguageMentorAgent容器化部署与发布:高并发场景下的负载均衡与自动扩展关键词:KubernetesHPA,AWSAutoScaling,会话亲和性,监控指标,滚动更新1.高并发场景下的架构挑战LanguageMentor作为对话式Agent需要处理多用户同时在线会话,容器化部署需解决两个核心问题:</div>
                    </li>
                                <li><a href="/article/36.htm"
                                       title="ASM系列四 利用Method 组件动态注入方法逻辑" target="_blank">ASM系列四 利用Method 组件动态注入方法逻辑</a>
                                    <span class="text-muted">lijingyao8206</span>
<a class="tag" taget="_blank" href="/search/%E5%AD%97%E8%8A%82%E7%A0%81%E6%8A%80%E6%9C%AF/1.htm">字节码技术</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/1.htm">动态代理</a><a class="tag" taget="_blank" href="/search/ASM/1.htm">ASM</a>
                                    <div>        这篇继续结合例子来深入了解下Method组件动态变更方法字节码的实现。通过前面一篇,知道ClassVisitor 的visitMethod()方法可以返回一个MethodVisitor的实例。那么我们也基本可以知道,同ClassVisitor改变类成员一样,MethodVIsistor如果需要改变方法成员,注入逻辑,也可以</div>
                                </li>
                                <li><a href="/article/163.htm"
                                       title="java编程思想 --内部类" target="_blank">java编程思想 --内部类</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%86%85%E9%83%A8%E7%B1%BB/1.htm">内部类</a><a class="tag" taget="_blank" href="/search/%E5%8C%BF%E5%90%8D%E5%86%85%E9%83%A8%E7%B1%BB/1.htm">匿名内部类</a>
                                    <div>内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅 
  
1,内部类的创建  内部类是创建在类中的 
 
package com.wj.InsideClass;

/*
 * 内部类的创建
 */
public class CreateInsideClass {

	public CreateInsideClass(</div>
                                </li>
                                <li><a href="/article/290.htm"
                                       title="web.xml报错" target="_blank">web.xml报错</a>
                                    <span class="text-muted">crabdave</span>
<a class="tag" taget="_blank" href="/search/web.xml/1.htm">web.xml</a>
                                    <div>web.xml报错 
  
The content of element type "web-app" must match "(icon?,display- 
 name?,description?,distributable?,context-param*,filter*,filter-mapping*,listener*,servlet*,s</div>
                                </li>
                                <li><a href="/article/417.htm"
                                       title="泛型类的自定义" target="_blank">泛型类的自定义</a>
                                    <span class="text-muted">麦田的设计者</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%B3%9B%E5%9E%8B/1.htm">泛型</a>
                                    <div>   为什么要定义泛型类,当类中要操作的引用数据类型不确定的时候。 
采用泛型类,完成扩展。 
  例如有一个学生类 
    
Student{
  Student(){
   System.out.println("I'm a student.....");
  }
} 
 有一个老师类 
  
</div>
                                </li>
                                <li><a href="/article/544.htm"
                                       title="CSS清除浮动的4中方法" target="_blank">CSS清除浮动的4中方法</a>
                                    <span class="text-muted">IT独行者</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a>
                                    <div>清除浮动这个问题,做前端的应该再熟悉不过了,咱是个新人,所以还是记个笔记,做个积累,努力学习向大神靠近。CSS清除浮动的方法网上一搜,大概有N多种,用过几种,说下个人感受。 
1、结尾处加空div标签 clear:both      1   2   3   4      
.div 
1 
{ 
background 
: 
#000080 
; 
border 
: 
1px   
s</div>
                                </li>
                                <li><a href="/article/671.htm"
                                       title="Cygwin使用windows的jdk 配置方法" target="_blank">Cygwin使用windows的jdk 配置方法</a>
                                    <span class="text-muted">_wy_</span>
<a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a><a class="tag" taget="_blank" href="/search/windows/1.htm">windows</a><a class="tag" taget="_blank" href="/search/cygwin/1.htm">cygwin</a>
                                    <div>1.[vim /etc/profile] 
   JAVA_HOME="/cgydrive/d/Java/jdk1.6.0_43"  (windows下jdk路径为D:\Java\jdk1.6.0_43) 
   PATH="$JAVA_HOME/bin:${PATH}" 
   CLAS</div>
                                </li>
                                <li><a href="/article/798.htm"
                                       title="linux下安装maven" target="_blank">linux下安装maven</a>
                                    <span class="text-muted">无量</span>
<a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E8%A3%85/1.htm">安装</a>
                                    <div>Linux下安装maven(转)  1.首先到Maven官网 
下载安装文件,目前最新版本为3.0.3,下载文件为 
apache-maven-3.0.3-bin.tar.gz,下载可以使用wget命令; 
 
2.进入下载文件夹,找到下载的文件,运行如下命令解压 
  tar -xvf  apache-maven-2.2.1-bin.tar.gz  
解压后的文件夹</div>
                                </li>
                                <li><a href="/article/925.htm"
                                       title="tomcat的https 配置,syslog-ng配置" target="_blank">tomcat的https 配置,syslog-ng配置</a>
                                    <span class="text-muted">aichenglong</span>
<a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/http%E8%B7%B3%E8%BD%AC%E5%88%B0https/1.htm">http跳转到https</a><a class="tag" taget="_blank" href="/search/syslong-ng%E9%85%8D%E7%BD%AE/1.htm">syslong-ng配置</a><a class="tag" taget="_blank" href="/search/syslog%E9%85%8D%E7%BD%AE/1.htm">syslog配置</a>
                                    <div>1) tomcat配置https,以及http自动跳转到https的配置 
    1)TOMCAT_HOME目录下生成密钥(keytool是jdk中的命令) 
     keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit</div>
                                </li>
                                <li><a href="/article/1052.htm"
                                       title="关于领号活动总结" target="_blank">关于领号活动总结</a>
                                    <span class="text-muted">alafqq</span>
<a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a>
                                    <div>关于某彩票活动的总结 
具体需求,每个用户进活动页面,领取一个号码,1000中的一个; 
活动要求 
1,随机性,一定要有随机性; 
2,最少中奖概率,如果注数为3200注,则最多中4注 
3,效率问题,(不能每个人来都产生一个随机数,这样效率不高); 
4,支持断电(仍然从下一个开始),重启服务;(存数据库有点大材小用,因此不能存放在数据库) 
 
解决方案 
1,事先产生随机数1000个,并打</div>
                                </li>
                                <li><a href="/article/1179.htm"
                                       title="java数据结构 冒泡排序的遍历与排序" target="_blank">java数据结构 冒泡排序的遍历与排序</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>java的冒泡排序是一种简单的排序规则 
  
冒泡排序的原理:  
         比较两个相邻的数,首先将最大的排在第一个,第二次比较第二个 ,此后一样; 
        针对所有的元素重复以上的步骤,除了最后一个 
  
  
例题;将int array[] </div>
                                </li>
                                <li><a href="/article/1306.htm"
                                       title="JS检查输入框输入的是否是数字的一种校验方法" target="_blank">JS检查输入框输入的是否是数字的一种校验方法</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/js/1.htm">js</a>
                                    <div>如下是JS检查输入框输入的是否是数字的一种校验方法: 
<form method=post target="_blank">
   数字:<input type="text" name=num onkeypress="checkNum(this.form)"><br>
</form>
</div>
                                </li>
                                <li><a href="/article/1433.htm"
                                       title="Test注解的两个属性:expected和timeout" target="_blank">Test注解的两个属性:expected和timeout</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/JUnit/1.htm">JUnit</a><a class="tag" taget="_blank" href="/search/expected/1.htm">expected</a><a class="tag" taget="_blank" href="/search/timeout/1.htm">timeout</a>
                                    <div>JUnit4:Test文档中的解释: 
  The Test annotation supports two optional parameters. 
  The first, expected, declares that a test method should throw an exception. 
  If it doesn't throw an exception or if it </div>
                                </li>
                                <li><a href="/article/1560.htm"
                                       title="[Gson二]继承关系的POJO的反序列化" target="_blank">[Gson二]继承关系的POJO的反序列化</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/POJO/1.htm">POJO</a>
                                    <div>父类 
  
  
package inheritance.test2;

import java.util.Map;

public class Model {
    private String field1;
    private String field2;

    private Map<String, String> infoMap</div>
                                </li>
                                <li><a href="/article/1687.htm"
                                       title="【Spark八十四】Spark零碎知识点记录" target="_blank">【Spark八十四】Spark零碎知识点记录</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a>
                                    <div>1. ShuffleMapTask的shuffle数据在什么地方记录到MapOutputTracker中的 
ShuffleMapTask的runTask方法负责写数据到shuffle map文件中。当任务执行完成成功,DAGScheduler会收到通知,在DAGScheduler的handleTaskCompletion方法中完成记录到MapOutputTracker中 
  
   </div>
                                </li>
                                <li><a href="/article/1814.htm"
                                       title="WAS各种脚本作用大全" target="_blank">WAS各种脚本作用大全</a>
                                    <span class="text-muted">ronin47</span>
<a class="tag" taget="_blank" href="/search/WAS+%E8%84%9A%E6%9C%AC/1.htm">WAS 脚本</a>
                                    <div>   http://www.ibm.com/developerworks/cn/websphere/library/samples/SampleScripts.html 
   无意中,在WAS官网上发现的各种脚本作用,感觉很有作用,先与各位分享一下 
    
获取下载 
这些示例 jacl 和 Jython 脚本可用于在 WebSphere Application Server 的不同版本中自</div>
                                </li>
                                <li><a href="/article/1941.htm"
                                       title="java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句" target="_blank">java-12.求 1+2+3+..n不能使用乘除法、 for 、 while 、 if 、 else 、 switch 、 case 等关键字以及条件判断语句</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/switch/1.htm">switch</a>
                                    <div>借鉴网上的思路,用java实现: 
 




public class NoIfWhile {

	/**
	 * @param args
	 * 
	 * find x=1+2+3+....n
	 */
	public static void main(String[] args) {
		int n=10;
		int re=find(n);
		System.o</div>
                                </li>
                                <li><a href="/article/2068.htm"
                                       title="Netty源码学习-ObjectEncoder和ObjectDecoder" target="_blank">Netty源码学习-ObjectEncoder和ObjectDecoder</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a>
                                    <div>Netty中传递对象的思路很直观: 
Netty中数据的传递是基于ChannelBuffer(也就是byte[]); 
那把对象序列化为字节流,就可以在Netty中传递对象了 
相应的从ChannelBuffer恢复对象,就是反序列化的过程 
 
Netty已经封装好ObjectEncoder和ObjectDecoder 
 
先看ObjectEncoder 
ObjectEncoder是往外发送</div>
                                </li>
                                <li><a href="/article/2195.htm"
                                       title="spring 定时任务中cronExpression表达式含义" target="_blank">spring 定时任务中cronExpression表达式含义</a>
                                    <span class="text-muted">chicony</span>
<a class="tag" taget="_blank" href="/search/cronExpression/1.htm">cronExpression</a>
                                    <div>一个cron表达式有6个必选的元素和一个可选的元素,各个元素之间是以空格分隔的,从左至右,这些元素的含义如下表所示: 
代表含义            是否必须 允许的取值范围         &nb</div>
                                </li>
                                <li><a href="/article/2322.htm"
                                       title="Nutz配置Jndi" target="_blank">Nutz配置Jndi</a>
                                    <span class="text-muted">ctrain</span>
<a class="tag" taget="_blank" href="/search/JNDI/1.htm">JNDI</a>
                                    <div>1、使用JNDI获取指定资源: 
 

var ioc = {
    dao : {
        type :"org.nutz.dao.impl.NutDao",
        args : [ {jndi :"jdbc/dataSource"} ]
    }
}
 
以上方法,仅需要在容器中配置好数据源,注入到NutDao即可. </div>
                                </li>
                                <li><a href="/article/2449.htm"
                                       title="解决 /bin/sh^M: bad interpreter: No such file or directory" target="_blank">解决 /bin/sh^M: bad interpreter: No such file or directory</a>
                                    <span class="text-muted">daizj</span>
<a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a>
                                    <div>在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。 
  
分析:这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。 
解决: 
1)在windows下转换: 
利用一些编辑器如UltraEdit或EditPlus等工具</div>
                                </li>
                                <li><a href="/article/2576.htm"
                                       title="[转]for 循环为何可恨?" target="_blank">[转]for 循环为何可恨?</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E5%91%98/1.htm">程序员</a><a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6/1.htm">读书</a>
                                    <div>  
Java的闭包(Closure)特征最近成为了一个热门话题。 一些精英正在起草一份议案,要在Java将来的版本中加入闭包特征。 然而,提议中的闭包语法以及语言上的这种扩充受到了众多Java程序员的猛烈抨击。 
不久前,出版过数十本编程书籍的大作家Elliotte Rusty Harold发表了对Java中闭包的价值的质疑。 尤其是他问道“for 循环为何可恨?”[http://ju</div>
                                </li>
                                <li><a href="/article/2703.htm"
                                       title="Android实用小技巧" target="_blank">Android实用小技巧</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/android/1.htm">android</a>
                                    <div>1、去掉所有Activity界面的标题栏 
  修改AndroidManifest.xml   在application 标签中添加android:theme="@android:style/Theme.NoTitleBar" 
  
2、去掉所有Activity界面的TitleBar 和StatusBar  
  修改AndroidManifes</div>
                                </li>
                                <li><a href="/article/2830.htm"
                                       title="Oracle 复习笔记之序列" target="_blank">Oracle 复习笔记之序列</a>
                                    <span class="text-muted">eksliang</span>
<a class="tag" taget="_blank" href="/search/Oracle+%E5%BA%8F%E5%88%97/1.htm">Oracle 序列</a><a class="tag" taget="_blank" href="/search/sequence/1.htm">sequence</a><a class="tag" taget="_blank" href="/search/Oracle+sequence/1.htm">Oracle sequence</a>
                                    <div>转载请出自出处:http://eksliang.iteye.com/blog/2098859 
1.序列的作用 
 
 序列是用于生成唯一、连续序号的对象 
 一般用序列来充当数据库表的主键值 
 
2.创建序列语法如下: 
  
create sequence s_emp
start with 1      --开始值
increment by 1    --増长值
maxval</div>
                                </li>
                                <li><a href="/article/2957.htm"
                                       title="有“品”的程序员" target="_blank">有“品”的程序员</a>
                                    <span class="text-muted">gongmeitao</span>
<a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a>
                                    <div>完美程序员的10种品质   
  
 完美程序员的每种品质都有一个范围,这个范围取决于具体的问题和背景。没有能解决所有问题的 
  
完美程序员(至少在我们这个星球上),并且对于特定问题,完美程序员应该具有以下品质: 
  1. 才智非凡- 能够理解问题、能够用清晰可读的代码翻译并表达想法、善于分析并且逻辑思维能力强 
  
(范围:用简单方式解决复杂问题)   
 </div>
                                </li>
                                <li><a href="/article/3084.htm"
                                       title="使用KeleyiSQLHelper类进行分页查询" target="_blank">使用KeleyiSQLHelper类进行分页查询</a>
                                    <span class="text-muted">hvt</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/.net/1.htm">.net</a><a class="tag" taget="_blank" href="/search/C%23/1.htm">C#</a><a class="tag" taget="_blank" href="/search/asp.net/1.htm">asp.net</a><a class="tag" taget="_blank" href="/search/hovertree/1.htm">hovertree</a>
                                    <div>本文适用于sql server单主键表或者视图进行分页查询,支持多字段排序。KeleyiSQLHelper类的最新代码请到http://hovertree.codeplex.com/SourceControl/latest下载整个解决方案源代码查看。或者直接在线查看类的代码:http://hovertree.codeplex.com/SourceControl/latest#HoverTree.D</div>
                                </li>
                                <li><a href="/article/3211.htm"
                                       title="SVG 教程 (三)圆形,椭圆,直线" target="_blank">SVG 教程 (三)圆形,椭圆,直线</a>
                                    <span class="text-muted">天梯梦</span>
<a class="tag" taget="_blank" href="/search/svg/1.htm">svg</a>
                                    <div>SVG <circle>   SVG 圆形 - <circle> 
<circle> 标签可用来创建一个圆: 
下面是SVG代码: 
<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
  <circle cx="100" c</div>
                                </li>
                                <li><a href="/article/3338.htm"
                                       title="链表栈" target="_blank">链表栈</a>
                                    <span class="text-muted">luyulong</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a>
                                    <div>
public class Node {
	private Object object;
	private Node next;

	public Node() {
		this.next = null;
		this.object = null;
	}

	public Object getObject() {
		return object;
	}

	public</div>
                                </li>
                                <li><a href="/article/3465.htm"
                                       title="基础数据结构和算法十:2-3 search tree" target="_blank">基础数据结构和算法十:2-3 search tree</a>
                                    <span class="text-muted">sunwinner</span>
<a class="tag" taget="_blank" href="/search/Algorithm/1.htm">Algorithm</a><a class="tag" taget="_blank" href="/search/2-3+search+tree/1.htm">2-3 search tree</a>
                                    <div>  
Binary search tree works well for a wide variety of applications, but they have poor worst-case performance. Now we introduce a type of binary search tree where costs are guaranteed to be loga</div>
                                </li>
                                <li><a href="/article/3592.htm"
                                       title="spring配置定时任务" target="_blank">spring配置定时任务</a>
                                    <span class="text-muted">stunizhengjia</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/timer/1.htm">timer</a>
                                    <div>最近因工作的需要,用到了spring的定时任务的功能,觉得spring还是很智能化的,只需要配置一下配置文件就可以了,在此记录一下,以便以后用到: 
  
  
//------------------------定时任务调用的方法------------------------------
    /**
     * 存储过程定时器
    */
    publi</div>
                                </li>
                                <li><a href="/article/3719.htm"
                                       title="ITeye 8月技术图书有奖试读获奖名单公布" target="_blank">ITeye 8月技术图书有奖试读获奖名单公布</a>
                                    <span class="text-muted">ITeye管理员</span>
<a class="tag" taget="_blank" href="/search/%E6%B4%BB%E5%8A%A8/1.htm">活动</a>
                                    <div>ITeye携手博文视点举办的8月技术图书有奖试读活动已圆满结束,非常感谢广大用户对本次活动的关注与参与。 
 
 
8月试读活动回顾: 
http://webmaster.iteye.com/blog/2102830 
 
 
本次技术图书试读活动的优秀奖获奖名单及相应作品如下(优秀文章有很多,但名额有限,没获奖并不代表不优秀): 
 
 
《跨终端Web》 
 
 
 
 gleams:http</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>