若是你想知道你的服务器正在作干什么,你就须要了解一些基本的命令,一旦你精通了这些命令,那你就是一个专业的 Linux 系统管理员。java
iostat命令用来显示存储系统的详细信息,一般用它来监控磁盘 I/O 的状况。要特别注意 iostat 统计结果中的 %iowait
值,太大了代表你的系统存储系统性能低下。linux
命令: iostat -m -x 1 1000ios
能够观察对应的CPU中的%iowait数据
,除此以外iostat还提供了一些更详细的I/O状态数据,好比比较重要的有:nginx
Meminfo 可以让你获取内存的详细信息,你可使用 cat 和 grep 命令来显示 meminfo 信息:web
另外你可使用 free
命令来显示动态的内存使用信息,free 只是给你大概的内存信息,而 meminfo
提供的信息更加详细。ubuntu
mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。
在多CPUs系统里,其不但能查看全部CPU的平均情况信息,并且可以查看特定CPU的信息。windows
mpstat的语法以下:mpstat [-P {|ALL}] [internal [count]]
,参数的含义以下:安全
命令:mpstat -P ALL 1 1000ruby
CPU 处理器IDbash
user 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负 进程 (usr/total)*100
nice 在internal时间段里,nice值为负进程的CPU时间(%) (nice/total)*100
system 在internal时间段里,核心时间(%) (system/total)*100
iowait 在internal时间段里,硬盘IO等待时间(%) (iowait/total)*100
irq 在internal时间段里,硬中断时间(%) (irq/total)*100
soft 在internal时间段里,软中断时间(%) (softirq/total)*100
idle 在internal时间段里,CPU除去等待磁盘IO操做外的由于任何缘由而空闲的时间闲置时间(%)(idle/total)*100
intr/s 在internal时间段里,每秒CPU接收的中断的次数intr/total)*100
CPU总的工做时间=total_cur=user+system+nice+idle+iowait+irq+softirq
total_pre=pre_user+ pre_system+ pre_nice+ pre_idle+ pre_iowait+ pre_irq+ pre_softirq
user=user_cur – user_pre
total=total_cur-total_pre
其中_cur 表示当前值,_pre表示interval时间前的值。上表中的全部值可取到两位小数点。
%iowait
列,CPU等待I/O操做所花费的时间。这个值持续很高一般多是I/O瓶颈所致使的。经过这个参数能够比较直观的看出当前的I/O操做是否存在瓶颈。
Netstat 和 ps 命令相似,是 Linux 管理员基本上天天都会用的工具,它显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等,下面是一些经常使用的参数:
Nmon, 是 Nigel's Monitor 的缩写,是一个使用很广泛的开源工具,用以监控 Linux 系统的性能。Nmon 监控多个子系统的性能数据,例如处理器的使用率、内存使用率、队列、磁盘I/O统计、网络I/O统计、内存页处理和进程信息。Nmon 也提供了一个图形化的工具:
要运行 nmon,你能够在命令行中启动它,而后选择要监控的子系统,这些子系统都对应有一个快捷键,例如输入 c 可查看 CPU 信息,m用于查看内存,d用来查看磁盘信息
等,你也能够使用 -f 命令将 nmon 的执行结果保存到一个 CSV 文件中,便于往后分析
。-----在每日的监控工做中,我发现 nmon 是我最经常使用的工具。
pmap 命令用来报告每一个进程占用内存的详细状况
,可用来看是否有进程超支了,该命令须要进程 id 做为参数
。
ps 告诉你每一个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。
一旦发现某个进程有问题,你可使用 kill 来杀掉它。
这个命令的做用,主要是能够获取到对应一个进程下的线程的一些信息。 好比你想分析一下一个java进程的一些运行瓶颈点,能够经过该命令找到全部当前Thread的占用CPU的时间,也就是这里的最后一列。
TID : 6603
,所占用的TIME时间最高。经过
printf "%x\n" 6603 首先转化成16进制
, 继续经过
jstack命令dump出当前的jvm进程的堆栈信息
。 经过
Grep命令便可以查到对应16进制的线程id信息
,很快就能够找到对应最耗CPU的代码块在哪。
简单的解释下,jstack下这一串线程信息内容:"qtp812487918-32" prio=10 tid=0x00007f69b4430000 nid=0x19cb waiting on condition [0x00007f69a5b86000]
命令: pidstat -p pid -u -d -t -w -h 1 1000
sudo apt-get install sysstat
进行安装。
监视进程的性能状况
,也能够
监视线程的性能状况
。
命令:dstat -y --tcp 1 1000
经过dstat --tcp能够比较方便的看到当前的tcp的各类状态,不须要每次netstat -nat去看
tcpdump 是一个简单、可靠的网络监控工具,用来作基本的协议分析,看看那些进程在使用网络以及如何使用网络。固然,若是你要获取跟详细的信息,你应该使用 Wireshark。
top 命令显示当前的活动进程,默认它是按消耗 CPU 的厉害程度进行排序
,每5秒钟刷新一次列表,你也能够选择不一样的排序方式,例如 m 是按内存占用方式进行排序的快捷键。
命令:top -Hp pid
能够实时的跟踪并获取指定进程中最耗cpu的线程。再用ps命令中提到的jstack方法提取到对应的线程堆栈信息。
默认状况下,Top 被调用时使用交互模式。
在此模式下,Top 无限期运行,并能够经过按键从新定义 Top 的运行方式。可是,有时你须要对 Top 的输出进行后续处理,但这在此模式下难以实现。解决方法?使用批处理模式。
命令:top -b
哈,等等,它是不断重复运行的,同交互模式同样。不用担忧,你可使用 -n 限制重复数量。因此,若是你但愿得到一次性结果,键入:
命令:top -b -n 1
这一模式的真正优点在于你能够很容易的与 at 或 cron 命令结合
。它们的结合,使得 Top 能够在特定时间对资源使用状态进行快照。例如,使用 at ,咱们能够设定 top 在一分钟以后运行。
细心的读者可能会问“在建立新任务时,为何我须要在调用 Top 以前设置环境变量 TERM?”。答案是,Top 运行时须要此变量,但“at”在定时调用时并不会保留它。同上面那样简单的设置能够确保 Top 正常运行。
如何监控制定进程
有时,咱们只对几个进程感兴趣,可能只是所有进程中的4个或5个。例如,若是你想要监测进程标识(PID)为4360和4358的进程,你须要键入:top -p 19647,10065
看起来很简单,只须要使用 -p 列出全部须要的 PID
,并使用逗号间隔或简单的屡次使用 -p便可。
另外一种多是监测拥有特定用户标识(UID)的进程
。应对此需求,你可使用 -u 或 -U 选项。假设用户“johndoe”的 UID 为500,键入:top -u taomk
或:top -U taomk
结论是,你既能够纯使用用户名,也可以使用数字 UID。“-u,-U?这二者不一样?”是的。同多数其它 GNU 工具同样,选项是大小写敏感的。-U 意味着 Top 将会搜索有效的、真实的、被保存的以及文件系统的 UID 进行匹配,而 -u 仅匹配有效的用户id。
要知道,每个 Linux 进程在运行时都是用有效用户标识(effective UID),而其中有些并不等同真实用户标识。多数状况是,对相似文件系统权限或操做系统功能这项的有效用户标识感兴趣的人将会检查它,而不是 UID。
不一样于 -p 仅用于命令行选项,-U 和 -u 均可以在交互模式中使用。
同你猜想的同样,键入‘U’或‘u’能够依据用户名过滤进程。一样的规则依然适用,‘u’为有效用户标识,‘U’为 真实/有效/保存/文件系统用户名
。你将被要求键入用户名或数字 UID。
sar命令也是Linux系统中重要的性能监测工具之一,它能够周期性地对内存和CPU使用状况进行采样
。
命令:sar -u 1 3 查看CPU使用率
命令:sar -r 1 3 查看内存使用率
命令:sar -b 1 3 查看I/O使用率
uptime 命令告诉你这台服务器从开机启动到如今已经运行了多长时间了。
同时也包含了从启动到如今服务器的平均负载状况:
你能够使用 vmstat 来监控虚拟内存
,通常 Linux 上的开发者喜欢使用虚拟内存来得到最佳的存储性能。该命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告能够用于平衡系统负载活动。系统范围内的这些统计信息(全部的处理器中)都计算出以百分比表示的平均值,或者计算其总和。
vmstat:能够查看内存,交互区分,I/O操做,上下文切换,时钟中断以及CPU的使用状况。
命令:vmstat 1 3
命令:uname -a
命令:uname -r
查看系统发行版信息###
命令:cat /etc/issue
命令:cat /proc/version
命令:cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
查看系统CPU物理核数###
命令:cat /proc/cpuinfo | grep physical | uniq -c
命令:grep "model name" /proc/cpuinfo
命令:getconf LONG_BIT
说明:当前CPU运行在64bit模式下
命令:cat /proc/cpuinfo | grep flags | grep ' lm ' | wc -l
说明:结果大于0, 支持64bit计算. lm指long mode, 支持lm则是64bit
查看物理CPU的个数:cat /proc/cpuinfo |grep "physical id"|sort |uniq| wc -l
查看逻辑CPU的个数:cat /proc/cpuinfo |grep "processor"|wc -l
查看CPU是几核:cat /proc/cpuinfo |grep "cores"|uniq
查看CPU的主频:cat /proc/cpuinfo |grep MHz|uniq
查看当前系统时间:date
修改当前系统时间:date -s "2009-07-28 15:32:00"
列出当前目录的文件树:
find . -print 2 > /dev/null | awk '!/\.$/ {for (i=1;i<NF;i++){d=length($i);if ( d < 5 && i != 1 )d=5;printf("%"d"s","|")}print "---"$NF}' FS='/'
查看用户所在哪些终端:who | awk '{print $1 "\t" $6}'
uname -a:查看内核/操做系统/CPU信息
head -n 1 /etc/issue:查看操做系统版本
cat /proc/cpuinfo:查看CPU信息
hostname:查看计算机名
lspci -tv:列出全部PCI设备
lsusb -tv:列出全部USB设备
lsmod:列出加载的内核模块
**env **:查看环境变量资源free -m:查看内存使用量和交换区使用量
df -h:查看各分区使用状况
du -sh <目录名>:查看指定目录的大小
grep MemTotal /proc/meminfo:查看内存总量
grep MemFree /proc/meminfo:查看空闲内存量
uptime:查看系统运行时间、用户数、负载
cat /proc/loadavg:查看系统负载磁盘和分区mount | column -t:查看挂接的分区状态
fdisk -l:查看全部分区
swapon -s:查看全部交换分区
hdparm -i /dev/hda:查看磁盘参数(仅适用于IDE设备)
dmesg | grep IDE:查看启动时IDE设备检测情况网络ifconfig:查看全部网络接口的属性
iptables -L:查看防火墙设置
**route -n **:查看路由表
netstat -lntp:查看全部监听端口
netstat -antp:查看全部已经创建的链接
**netstat -s **:查看网络统计信息进程ps -ef:查看全部进程
top:实时显示进程状态用户
w:查看活动用户
id <用户名>:查看指定用户信息
last:查看用户登陆日志
cut -d: -f1 /etc/passwd:查看系统全部用户
cut -d: -f1 /etc/group:查看系统全部组
crontab -l:查看当前用户的计划任务服务
chkconfig --list:列出全部系统服务
chkconfig --list | grep on:列出全部启动的系统服务程序rpm -qa:查看全部安装的软件包
shutdown命令安全地将系统关机。
有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。由于linux与windows不一样,其后台运行着许多进程,因此强制关机可能会致使进程的数据丢失
﹐使系统处于不稳定的状态﹐甚至在有的系统中会损坏硬件设备。
而在系统关机前使用shutdown命令﹐系统管理员会通知全部登陆的用户系统将要关闭。而且login指令会被冻结﹐即新的用户不能再登陆。直接关机或者延迟必定的时间才关机都是可能的﹐还可能重启。这是由全部进程〔process〕都会收到系统所送达的信号〔signal〕决定的。
这让像vi之类的程序有时间储存目前正在编辑的文档﹐而像处理邮件〔mail〕和新闻〔news〕的程序则能够正常地离开等等。
shutdown执行的工做是送信号〔signal〕给init程序﹐要求它改变runlevel。
Runlevel 0被用来停机〔halt〕﹐runlevel 6是用来从新激活〔reboot〕系统﹐而runlevel 1则是被用来让系统进入管理工做能够进行的状态﹔这是预设的﹐假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者从新开机〔reboot〕过程当中作了哪些动做﹐你能够在这个文件/etc/inittab里看到这些runlevels相关的资料。
shutdown 参数说明:
halt就是调用shutdown -h。
halt执行时﹐杀死应用进程﹐执行sync系统调用﹐文件系统写操做完成后就会中止内核。
halt 参数说明:
reboot的工做过程差很少跟halt同样﹐不过它是引起主机重启﹐而halt是关机。它的参数与halt相差很少。
init是全部进程的祖先﹐它的进程号始终为1
﹐因此发送TERM信号给init会终止全部的用户进程﹑守护进程等。shutdown 就是使用这种机制。
init定义了8个运行级别(runlevel), init 0为关机﹐init 1为重启。
关于init能够长篇大论﹐这里就再也不叙述。另外还有 telinit命令能够改变init的运行级别﹐好比﹐telinit -i S可以使系统进入单用户模式﹐而且得不到使用shutdown时的信息和等待时间。
“起初GNU/Linux系统中只有.tar.gz。用户必须本身编译他们想使用的每个程序。在Debian出现之後,人们认为有必要在系统中添加一种机制用来管理安装在计算机上的软件包。人们将这套系统称为dpkg。至此着名的‘package’首次在GNU/Linux上出现。不久之後红帽子也开始着手创建本身的包管理系统‘rpm’。
“GNU/Linux的创造者们很快又陷入了新的窘境。他们但愿经过一种快捷、实用并且高效的方式来安装软件包。这些软件包能够自动处理相互之间的依赖关系,而且在升级过程当中维护他们的配置文件。Debian又一次充当了开路先锋的角色。她独创了APT(Advanced Packaging Tool)。这一工具後来被Conectiva 移植到红帽子系统中用于对rpm包的管理。在其余一些发行版中咱们也能看到她的身影。”
"同时,apt是一个很完整和先进的软件包管理程序,使用它可让你,又简单,又准确的找到你要的的软件包, 而且安装或卸载都很简洁。
它还可让你的全部软件都更新到最新状态,并且也能够用来对ubuntu进行升级。"
"apt是须要用命令来操做的软件,不过如今也出现了不少有图形的软件,好比Synaptic, Kynaptic 和 Adept。"
wget是在Linux下开发的开放源代码的软件,做者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有如下功能和特色:
wget http://soft.deepvps/web/nginx/nginx-0.8.0.tar.gz:下载远程服务器上的文件到本身的服务器,连上传都省了,服务器不是100M就是1000M的带宽,下载一个2-3兆的MT还不是几十秒的事;
wget -c http://soft.deepvps/web/nginx/nginx-0.8.0.tar.gz:继续下载上次未下载完的文件;
1)下载整个http或者ftp站点:wget http://place.your.url/here
这个命令能够将http://place.your.url/here 首页下载下来
。使用-x会强制创建服务器上如出一辙的目录,若是使用-nd参数,那么服务器上下载的全部内容都会加到本地当前目录。
2)递归下载 :wget -r http://place.your.url/here
这 个命令会按照递归的方法,下载服务器上全部的目录和文件,实质就是下载整个网站
。这个命令必定要当心使用,由于在下载的时候,被下载网站指向的全部地址同 样会被下载,所以,若是这个网站引用了其余网站,那么被引用的网站也会被下载下来!基于这个缘由,这个参数不经常使用。能够用-l number参数来指定下载的层次。
例如只下载两层,那么使用-l 2。
3)制做镜像站点,那么可使用-m参数,例如:wget -m http://place.your.url/here
这时wget会自动判断合适的参数来制做镜像站点
。此时,wget会登陆到服务器上,读入robots.txt并按robots.txt的规定来执行。
4)断点续传,例如:wget -c http://the.url.of/incomplete/file
当文件特别大或者网络特别慢的时候,每每一个文件尚未下载完,链接就已经被切断,此时就须要断点续传。wget的断点续传是自动的,只须要使用-c参数,使用断点续传要求服务器支持断点续传
。-t参数表示重试次数,例如须要重试100次,那么就写-t 100,若是设成-t 0,那么表示无穷次重试,直到链接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒链接不上就算超时。
**5)批量下载,例如:wget -i download.txt **
若是有多个文件须要下载,那么能够生成一个文件,把每一个文件的URL写一行,例如生成文件download.txt,而后用命令:wget -i download.txt 这样就会把download.txt里面列出的每一个URL都下载下来。(若是列的是文件就下载文件,若是列的是网站,那么下载首页)
6)选择性的下载,例如:wget -m –reject=gif http://target.web.site/subdirectory
能够指定让wget只下载一类文件,或者不下载什么文件。例如:wget -m –reject=gif http://target.web.site/subdirectory 表示下载http://target.web.site/subdirectory, 可是忽略gif文件。–accept=LIST 能够接受的文件类型,–reject=LIST拒绝接受的文件类型。
7)密码和认证
wget只能处理利用用户名/密码方式限制访问的网站,能够利用两个参数:
对于须要证书作认证的网站,就只能利用其余下载工具了,例如curl。
8)利用代理服务器进行下载
若是用户的网络须要通过代理服务器,那么可让wget经过代理服务器进行文件的下载。此时须要在当前用户的目录下建立一个.wgetrc文件。文件中能够设置代理服务器:
http-proxy = 111.111.111.111:8080 ftp-proxy = 111.111.111.111:8080分别表示http的代理服务器和ftp的代理服务器。若是代理服务器须要密码则使用:
这两个参数。
使用参数–proxy=on/off 使用或者关闭代理。
附录:命令格式:
wget [参数列表] [目标软件、网页的网址]
-V,–version 显示软件版本号而后退出;
-h,–help显示软件帮助信息;
-e,–execute=COMMAND 执行一个 “.wgetrc”命令
-o,–output-file=FILE 将软件输出信息保存到文件;
-a,–append-output=FILE将软件输出信息追加到文件;
-d,–debug显示输出信息;
-q,–quiet 不显示输出信息;
-i,–input-file=FILE 从文件中取得URL;
-t,–tries=NUMBER 是否下载次数(0表示无穷次)
-O –output-document=FILE下载文件保存为别的文件名
-nc, –no-clobber 不要覆盖已经存在的文件
-N,–timestamping只下载比本地新的文件
-T,–timeout=SECONDS 设置超时时间
-Y,–proxy=on/off 关闭代理
-nd,–no-directories 不创建目录
-x,–force-directories 强制创建目录
-http-user=USER设置HTTP用户
-http-passwd=PASS设置HTTP密码
-proxy-user=USER设置代理用户
-proxy-passwd=PASS设置代理密码
-r,–recursive 下载整个网站、目录(当心使用)
-l,–level=NUMBER 下载层次
-A,–accept=LIST 能够接受的文件类型
-R,–reject=LIST拒绝接受的文件类型
-D,–domains=LIST能够接受的域名
-exclude-domains=LIST拒绝的域名
-L,–relative 下载关联连接
-follow-ftp 只下载FTP连接
-H,–span-hosts 能够下载外面的主机
-I,–include-directories=LIST容许的目录
-X,–exclude-directories=LIST 拒绝的目录
查看所属root用户进程所打开的文件类型为txt的文件:lsof -a -u root -d txt