linux配置文件方式创建st01,实用linux命令(一)
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命令(一)相关推荐
- 红旗linux shell方式下配置声卡的命令是:,‘红旗杯’linux大赛——基础知识2
1. 在chmod 命令中,-v参数的作用是: A. 详细说明组的变化 *B. 详细说明权限的变化 C. 改变本目录及其所有子目录的文件的权限 D. 在文件的权限确实改变时进行详细的说明 2. 为了显 ...
- 红旗linux shell方式下配置声卡的命令是:,linux基础知识1
1. 在chmod 命令中,-v参数的作用是: A. 详细说明组的变化 *B. 详细说明权限的变化 C. 改变本目录及其所有子目录的文件的权限 D. 在文件的权限确实改变时进行详细的说明 2. 为了显 ...
- 在linux系统中创建文件夹,Linux系统中创建文件夹命令详解
Linux系统中创建一个新的文件夹我们可以使用命令来执行,下面由学习啦小编为大家整理了Linux系统中创建文件夹命令详解,希望对大家有帮助! Linux系统中创建文件夹命令详解 一.mkdir命令使用 ...
- linux 目录下创建子目录,在 Linux 下用 mkdir 命令来创建目录和子目录
了解了用 ls 命令在目录中列出条目后,现在我们要学习在 Linux 系统下创建目录.在 Linux 下,我们可以使用 mkdir 命令.Mkdir 是"make directory&quo ...
- linux虚拟机如何创建文件夹,Linux虚拟机命令如何创建新的文件和文件夹
满意答案 qwsa1221 2015.07.15 采纳率:45% 等级:12 已帮助:11177人 Linux系统中创建新文件一般用touch命令,比如创建名字为newTxt的文本文件用 tou ...
- linux按时间创建文件夹,Linux命令创建日期文件夹或者文件
touch 命令:用于创建文件 mkdir 命令:用于创建文件夹 date 命令:获取系统时间 关于date获取系统时间选项 * %Y:年 * %m:月 * %d:日 * %H:小时 * %M:分钟 ...
- linux nfs spec,创建 NFS Ubuntu Linux 服务器卷 - Azure Kubernetes Service | Microsoft Docs
您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 在 Azure Kub ...
- linux配置文件重新加载失败,linux下为什么每次修改完配置文件之后都需要重新加载配置文件...
解释了 linux下为什么每次修改完配置文件之后都需要重新加载配置文件 目录一.关于inode 二.inode的作用 二.为什么每次修改完服务器配置文件之后,都需要重新加载一下配置文件? 一.关于in ...
- Linux中fdisk创建扩展分区,linux fdisk创建分区
在这个时候,你应该在你的硬盘上有大量可用作 Slackware 分区的未分区空间. 现在你已经准备好了创建你的 Linux 根分区.你可以用 Linux 版的 fdisk 来做到这一点. 为了给一个硬 ...
最新文章
- 争取做一个良性循环的程序员
- DIV+CSS星号(*)选择器
- 只使用了符号的Ruby程序
- VC内存泄露检查工具:Visual Leak Detector
- Visual Studio Online,带来四种开发模式,未来已来。
- ElasticSearch 索引、更新和删除数据
- [转贴]原创控件代码共享--日期选择控件
- 太赞了!智能语音技术年终报告:谢磊教授、王赟博士、罗艺博士…
- fatal error LNK1104: cannot open file 'libboost_regex-vc100-mt-gd-1_48.lib'
- 计算机专业课系列之四:漫谈操作系统之虚拟内存
- burpsuite_pro的使用
- 初识视觉SLAM:用相机解决定位和建图问题
- 深入了解 HTML 5
- 课程设计第一次实验总结
- 容器化部署之看板工具: Wekan
- Windows数字签名 数字签名(代码签名)流程
- Matplotlib系列(八):嵌入Python Qt界面
- 名帖329 王羲之 草书《游目帖》
- 蚂蚁金服推出区块链服务应用,用于跟踪稻米质量
- 怎样才能掌握好计算机知识,简析怎样才能上好计算机课
热门文章
- XML配置型工业条码打印、标签打印(POSTEK)解决方案
- 精通C语言Java怎么样_作为一个优秀的程序员,真的需要精通C语言吗?
- 为什么getfield找不到我的属性_原神珠钿舫船夫在哪里?原神珠钿舫船夫位置 为什么找不到?...
- KMP(Knuth-Morris-Pratt)算法
- Tagging Testing for Android, iOS and Web
- C#构造函数和析构函数
- 班迪录屏软件的安装使用教程,非常简单有手就行(手动滑稽)
- 如何用python画函数图像_使用python的pyplot绘制函数实例
- (六)MkDocs学习——部署文档
- 电涡流传感器\330851-02-00-030-10-00-05\本特利