top命令

监控系统的运行状态,并且可以按照cpu、内存、执行时间进行排序。

第一行中,03:30:22是当前时间,up 39 min是系统运行的运行了多长时间,1 user指出了当前有几个用户登录到系统,load average指的是系统负载,这后面的三个值分别是1分钟,5分钟,15分钟的系统负载平均值。

如果仅仅需要第一行中的信息,可以使用uptime命令。

第二行中,Task指出了当前系统有多少个进程,以及各种状态的进程统计信息。

第三行是%Cpu(s),代表了CPU占用比例,其中:

us 用户模式(user mode)

sy 系统模式(system mode)

ni 优先值(low priority user mode(nice))

id 空闲CPU百分比(idle task)

wa 等待输入输出的CPU事件百分比(I/O waiting)

hi servicing IRQs

si servicing soft IRQs

st steal (time given to other DomU instances)

ni是优先值(nice value),也就是任务的优先值。优先值为负数,则说明任务有更高的优先级,正数值说明任务有更低的优先级,该值为0意味着进程都优先级没有调整。

最后两行为内存信息,前者Mem为物理内存占用信息,后者Swap为交换分区占用信息。

使用-M参数可以更加友好的显示内存占用信息。默认是以kb展示的,看起来比较费劲,使用-M之后会根据数值大小,以G/M为单位展示。

最下面是进程的信息区域:

PID 进程的PID

USER 用户名,任务属主

PR 任务的优先级

NI 优先值

VIRT 虚拟映像(kb),任务当前使用的虚拟内存数量

RES 常驻物理内存占用量,RES=CODE+DATA

SHR 共享内存大小(kb)

S 进程状态(D-不可中断的睡眠,R-运行,S-睡眠,T-停止,Z-僵尸进程)

%CPU CPU使用量

%MEM 内存使用量

TIME+ CPU时间,百分之一

COMMAND 程序名称

pgrep/pkill 命令

根据名称或者其它属性查询(发送信号)进程信息。

pgrep命令根据提供的条件查询进程的pid,查询条件是and方式的,对于同一个选项,使用『,』分隔可以按照or方式查询。

pgrep -u root sshd # 查询进程名为sshd,并且属主是root的进程

pgrep -u root,daemon # 查询属主是root或者daemon的进程

pkill 使用与pgrep类似,不过它不是用来查询进程pid,而是给进程发送信号,默认会发送 SIGTERM信号。

例如:

$ pgrep -u root named # 查找named进程的pid

$ pkill -HUP syslogd # 告诉syslogd重新读取配置文件

要查看有哪些信号可用,可以使用kill -l列出所有的信号以及其数值。

except命令

send 发送一个字符串给进程。

expect 等待来自进程返回的字符串。

spawn 开始一个命令。

实现控制台SSH直接登陆Linux服务器

#!/usr/bin/expect

set timeout 20

set ip "IP地址"

set user "用户名"

set password "密码"

spawn ssh "$user\@$ip"

expect "$user@$ip's password:"

send "$password\r"

interact

pstack命令

pstack是一个shell脚本,用于打印正在运行的进程的栈跟踪信息,它实际上是gstack的一个链接。

该命令只需要提供一个参数,进程的pid即可。

$ sudo pstack $(pgrep -uroot php-fpm)

[sudo] password for guanyy:

#0 0x000000380d8e86f3 in __epoll_wait_nocancel () from /lib64/libc.so.6

#1 0x00000000007ec4a4 in fpm_event_epoll_wait ()

#2 0x00000000007e1517 in fpm_event_loop ()

#3 0x00000000007dc887 in fpm_run ()

#4 0x00000000007e3bd8 in main ()

pstack是gdb的一部分,如果系统没有pstack命令,使用yum搜索安装gdb即可。

strace命令

strace命令用于跟踪系统调用和信号。主要用于诊断,调试程序,使用该命令能够打印出进程执行的系统调用信息。

在 Mac 下使用dtruss命令代替

找出应用程序启动时读取的配置文件

$ strace php 2>&1 | grep php.ini

open("/usr/local/bin/php.ini", O_RDONLY) = -1 ENOENT (No such file or directory)

open("/usr/local/lib/php.ini", O_RDONLY) = 4

lstat64("/usr/local/lib/php.ini", {st_mode=S_IFLNK|0777, st_size=27, ...}) = 0

readlink("/usr/local/lib/php.ini", "/usr/local/Zend/etc/php.ini", 4096) = 27

lstat64("/usr/local/Zend/etc/php.ini", {st_mode=S_IFREG|0664, st_size=40971, ...}) = 0

这里的2>&1 是将标准错误输出重定向到标准输出。

查找为什么程序没有打开指定文件

$ strace -e open,access 2>&1 |grep your-filename

-e参数指定了一个限定表达式用于指定要跟踪的事件和如何跟踪它们。

[qualifier=][!]value1[,value2]...

这里的qualifier可选值为: trace, abbrev, verbose, raw, signal, read, write。默认的qualifier是trace。

查看进程正在执行什么操作

root@dev:~# strace -p 15427

Process 15427 attached - interrupt to quit

futex(0x402f4900, FUTEX_WAIT, 2, NULL

Process 15427 detached

-p指定了strace跟踪的进程的pid,这样就避免了每次执行strace时需要重启程序。

查看进程的哪些操作比较耗时

root@dev:~# strace -c -p 11084

Process 11084 attached - interrupt to quit

Process 11084 detached

% time seconds usecs/call calls errors syscall

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

94.59 0.001014 48 21 select

2.89 0.000031 1 21 getppid

2.52 0.000027 1 21 time

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

100.00 0.001072 63 total

-c参数用于统计进程做了哪些系统调用,调用的时间统计等,并对这些信息做一个汇总显示。

查看为什么xxx无法连接到服务器

$ strace -e poll,select,connect,recvfrom,sendto nc www.news.com 80

sendto(3, "\\24\\0\\0\\0\\26\\0\\1\\3\\255\\373NH\\0\\0\\0\\0\\0\\0\\0\\0", 20, 0, {sa_family=AF_NETLINK, pid=0, groups=00000000}, 12) = 20

connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)

connect(3, {sa_family=AF_FILE, path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)

...

nc命令

该命令用于创建任意的TCP/UDP连接或者是监听连接。

建立一个基本的C/S模型(文件远程复制)

在Server1上,使用nc命令创建一个服务端:

server1 $ nc -l 1234

在Server2上,使用nc作为客户端连接到server1

server2 $ nc server1的IP地址 1234

这样就建立起一个简单的C/S连接,在server2中输入任何内容,在server1都可以接受到(同步显示)。

上面的例子可以改造实现文件远程发送

server1 $ nc -l 1234 > filename.out

在server2上

server2 $ nc server1的IP地址 1234 < filename.in

-l 指定了nc应该作为server端监听指定的端口

模拟HTTP请求

# echo -n "GET / HTTP/1.0\r\n\r\n" | nc php.net 80

HTTP/1.1 400 Bad Request

Server: nginx/1.6.2

Date: Tue, 16 Dec 2014 08:09:35 GMT

Content-Type: text/html

Content-Length: 172

Connection: close

400 Bad Request

400 Bad Request


nginx/1.6.2

端口扫描

端口扫描的作用还是比较大的,使用nc可以方便的进行端口扫描。

# nc -z letv.com 1-100

Connection to letv.com 22 port [tcp/ssh] succeeded!

Connection to letv.com 80 port [tcp/http] succeeded!

这里的1-100指定了扫描的端口范围,-z参数告诉nc命令只报告开放的端口。

默认nc命令发送的是tcp请求,通过指定参数-u可以发送udp请求。

目录传输

下面例子中,将server2的phpredis-master目录拷贝到server1。

server1:

# nc -l 1234|tar zxvf -

server2:

# tar zcvf - phpredis-master|nc server1的IP地址 1234

pstree命令

该命令用于显示进程树,以树的形式显示正在运行的进程,树的根节点是指定的pid(忽略则为init进程)。

[root@cdn ~]# pstree -p $(pgrep -uroot php-fpm)

php-fpm(5445)─┬─php-fpm(5446)

├─php-fpm(5447)

├─php-fpm(5448)

├─php-fpm(7540)

├─php-fpm(21639)

└─php-fpm(24727)

ss命令

ss命令用于显示socket的统计信息。

显示socket的汇总信息

-s选项用于显示汇总信息。

# ss -s

Total: 247 (kernel 290)

TCP: 214 (estab 68, closed 130, orphaned 0, synrecv 0, timewait 130/0), ports 135

Transport Total IP IPv6

* 290 - -

RAW 0 0 0

UDP 11 7 4

TCP 84 81 3

INET 95 88 7

FRAG 0 0 0

查看所有打开的网络端口

-l选项用于列出当前正在监听的socket。

# ss -l

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 127.0.0.1:smux *:*

LISTEN 0 128 127.0.0.1:9000 *:*

LISTEN 0 50 *:3306 *:*

LISTEN 0 1024 :::11211 :::*

使用ss -pl可以查看使用网络端口的进程名称,这里的-p选项用于显示进程信息。

# ss -pl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN 0 128 127.0.0.1:smux *:* users:(("snmpd",1256,8))

LISTEN 0 50 *:3306 *:* users:(("mysqld",17651,10))

LISTEN 0 1024 :::11211 :::* users:(("memcached",1849,34))

LISTEN 0 1024 *:11211 *:* users:(("memcached",1849,33))

LISTEN 0 511 127.0.0.1:6379 *:* users:(("redis-server",1403,4))

使用ss -pl|grep 端口号查看端口被那个进程占用。

显示所有的TCP/UDP Socket

参数-a(--all)用于显示所有的socket,-t指的是TCP, -u是UDP, -w是RAW, -x是UNIX。

# ss -t -a

# ss -u -a

# ss -w -a

# ss -x -a

w/who命令

w命令用于查看当前哪些用户登录到系统和他们正在做什么,who命令仅用于查看哪些用户登录系统。

# w

15:39:08 up 126 days, 22:35, 3 users, load average: 0.02, 0.05, 0.02

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/0 10.58.92.228 13:29 1:35m 0.03s 0.03s -bash

root pts/1 10.58.93.56 10:32 5:06m 0.00s 0.00s -bash

root pts/4 10.58.88.20 12:29 0.00s 0.20s 0.00s w

# who

root pts/0 2014-12-18 13:29 (10.58.92.228)

root pts/1 2014-12-18 10:32 (10.58.93.56)

root pts/4 2014-12-18 12:29 (10.58.88.20)

iostat

报告CPU的统计信息,设备、分区、网络文件系统(NFS)的I/O统计信息。

# iostat

Linux 2.6.32-903.279.9.1.el6.x86_64 (localhost) 2014年12月18日 _x86_64_ (2 CPU)

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

0.35 0.00 0.34 0.42 0.15 98.74

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn

vda 4.01 0.35 56.76 3866731 622586087

dm-0 3.29 0.09 26.33 989378 288796192

dm-1 3.45 0.05 27.60 554922 302727584

dm-2 0.32 0.21 2.83 2296845 31060799

这里对几个性能指标进行解释:

tps 每秒发送的I/O请求数

Blk_read/s 每秒读取的block数

Blk_wrtn/s 每秒写入的block数

Blk_read 读取的block数

Blk_wrtn 写入的block数

通过指定-d参数可以设定自动按照指定时间间隔显示统计信息。例如,下列命令每隔2s显示一次。

$ iostat -d 2

iptraf 命令:实时网络统计

交互式的IP网络实时监控工具,图形化界面,比较方便。

# iptraf

界面如下:

linux配置文件方式创建st01,实用linux命令(一)相关推荐

  1. 红旗linux shell方式下配置声卡的命令是:,‘红旗杯’linux大赛——基础知识2

    1. 在chmod 命令中,-v参数的作用是: A. 详细说明组的变化 *B. 详细说明权限的变化 C. 改变本目录及其所有子目录的文件的权限 D. 在文件的权限确实改变时进行详细的说明 2. 为了显 ...

  2. 红旗linux shell方式下配置声卡的命令是:,linux基础知识1

    1. 在chmod 命令中,-v参数的作用是: A. 详细说明组的变化 *B. 详细说明权限的变化 C. 改变本目录及其所有子目录的文件的权限 D. 在文件的权限确实改变时进行详细的说明 2. 为了显 ...

  3. 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解

    Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...

  4. linux 目录下创建子目录,在 Linux 下用 mkdir 命令来创建目录和子目录

    了解了用 ls 命令在目录中列出条目后,现在我们要学习在 Linux 系统下创建目录.在 Linux 下,我们可以使用 mkdir 命令.Mkdir 是"make directory&quo ...

  5. linux虚拟机如何创建文件夹,Linux虚拟机命令如何创建新的文件和文件夹

    满意答案 qwsa1221 2015.07.15 采纳率:45%    等级:12 已帮助:11177人 Linux系统中创建新文件一般用touch命令,比如创建名字为newTxt的文本文件用 tou ...

  6. linux按时间创建文件夹,Linux命令创建日期文件夹或者文件

    touch 命令:用于创建文件 mkdir 命令:用于创建文件夹 date 命令:获取系统时间 关于date获取系统时间选项 * %Y:年 * %m:月 * %d:日 * %H:小时 * %M:分钟 ...

  7. linux nfs spec,创建 NFS Ubuntu Linux 服务器卷 - Azure Kubernetes Service | Microsoft Docs

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 在 Azure Kub ...

  8. linux配置文件重新加载失败,linux下为什么每次修改完配置文件之后都需要重新加载配置文件...

    解释了 linux下为什么每次修改完配置文件之后都需要重新加载配置文件 目录一.关于inode 二.inode的作用 二.为什么每次修改完服务器配置文件之后,都需要重新加载一下配置文件? 一.关于in ...

  9. Linux中fdisk创建扩展分区,linux fdisk创建分区

    在这个时候,你应该在你的硬盘上有大量可用作 Slackware 分区的未分区空间. 现在你已经准备好了创建你的 Linux 根分区.你可以用 Linux 版的 fdisk 来做到这一点. 为了给一个硬 ...

最新文章

  1. 争取做一个良性循环的程序员
  2. DIV+CSS星号(*)选择器
  3. 只使用了符号的Ruby程序
  4. VC内存泄露检查工具:Visual Leak Detector
  5. Visual Studio Online,带来四种开发模式,未来已来。
  6. ElasticSearch 索引、更新和删除数据
  7. [转贴]原创控件代码共享--日期选择控件
  8. 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
  9. fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_48.lib'
  10. 计算机专业课系列之四:漫谈操作系统之虚拟内存
  11. burpsuite_pro的使用
  12. 初识视觉SLAM:用相机解决定位和建图问题
  13. 深入了解 HTML 5
  14. 课程设计第一次实验总结
  15. 容器化部署之看板工具: Wekan
  16. Windows数字签名 数字签名(代码签名)流程
  17. Matplotlib系列(八):嵌入Python Qt界面
  18. 名帖329 王羲之 草书《游目帖》
  19. 蚂蚁金服推出区块链服务应用,用于跟踪稻米质量
  20. 怎样才能掌握好计算机知识,简析怎样才能上好计算机课

热门文章

  1. XML配置型工业条码打印、标签打印(POSTEK)解决方案
  2. 精通C语言Java怎么样_作为一个优秀的程序员,真的需要精通C语言吗?
  3. 为什么getfield找不到我的属性_原神珠钿舫船夫在哪里?原神珠钿舫船夫位置 为什么找不到?...
  4. KMP(Knuth-Morris-Pratt)算法
  5. Tagging Testing for Android, iOS and Web
  6. C#构造函数和析构函数
  7. 班迪录屏软件的安装使用教程,非常简单有手就行(手动滑稽)
  8. 如何用python画函数图像_使用python的pyplot绘制函数实例
  9. (六)MkDocs学习——部署文档
  10. 电涡流传感器\330851-02-00-030-10-00-05\本特利