分类目录归档:shell

top命令详解

参数:

-b  以批量模式运行,但不能接受命令行输入;
-c 显示命令行,而不仅仅是命令名;
-d N  显示两次刷新时间的间隔,比如 -d 5,表示两次刷新间隔为5秒;
-i 禁止显示空闲进程或僵尸进程;
-n NUM  显示更新次数,然后退出。比如 -n 5,表示top更新5次数据就退出;
-p PID 仅监视指定进程的ID;PID是一个数值;
-q  不经任何延时就刷新;
-s  安全模式运行,禁用一些效互指令;
-S 累积模式,输出每个进程的总的CPU时间,包括已死的子进程;


交互式命令键位:

space  立即更新;
c 切换到命令名显示,或显示整个命令(包括参数);
f,F 增加显示字段,或删除显示字段;
h,? 显示有关安全模式及累积模式的帮助信息;
k 提示输入要杀死的进程ID,目的是用来杀死该进程(默人信号为15)
i 禁止空闲进程和僵尸进程;
l 切换到显法负载平均值和正常运行的时间等信息;
m 切换到内存信息,并以内存占用大小排序;
n  提示显示的进程数,比如输入3,就在整屏上显示3个进程;
o,O 改变显示字段的顺序;
r 把renice 应用到一个进程,提示输入PID和renice的值;
s 改变两次刷新时间间隔,以秒为单位;
t 切换到显示进程和CPU状态的信息;
A 按进程生命大小进行排序,最新进程显示在最前;
M 按内存占用大小排序,由大到小;
N 以进程ID大小排序,由大到小;
P 按CPU占用情况排序,由大到小
S 切换到累积时间模式;
T  按时间/累积时间对任务排序;
W 把当前的配置写到~/.toprc中;

 

top监控工具可以显示CPU占用率为前几位的进程,并提供CPU的实时活动情况

语法及参数说明

usage: top -hvbcisqS -d delay -p pid -n iterations
参数 说明
-s time 设置屏幕刷新的延时,单位为秒,默认值5秒
-d count 设置屏幕刷新的次数,刷新显示完count次后退出
-q 如果经过nice授权,使用-q可以使top运行的更快一些
-u 用显示User ID代替username,提高命令运行速度
-h 当系统由多个CPU时,个别CPU的状态信息被隐藏,只显示平均状态值
-n number 设置每一屏幕显示的进程数目,number值超过进程最大数目,则设置无效
-f filename 输出重定向到给定的文件名,默认为16个进程信息

屏幕控制命令

当有多个屏幕内容显示时,可以用到下面的命令

键盘命令

参数 说明
j 如果不是最后的屏幕显示,按下j键可以切换到下一屏幕
k 如果不是最初的屏幕显示,按下k键可以切换到前一屏幕
t 按下k键可以切换到最初的屏幕
q 退出top命令的执行,可以在任何时候键入q键即可

显示信息描述 

顺序显示下面三个常规的信息

  1. 系统信息:
     14:50:01  up 83 days, 10 min,  0 users,  load average: 0.75, 0.86, 0.86
    164 processes: 160 sleeping, 4 running, 0 zombie, 0 stopped
    CPU states:  cpu    user    nice  system    irq  softirq  iowait    idle
               total   38.3%    0.0%   19.4%   0.0%     0.0%    0.7%   41.5%
               cpu00   70.8%    0.0%   26.2%   0.0%     0.0%    0.0%    2.9%
               cpu01   51.4%    0.0%   33.0%   0.0%     0.0%    0.9%   14.5%
               cpu02   25.2%    0.0%   17.4%   0.0%     0.0%    0.0%   57.2%
               cpu03    5.8%    0.0%    0.9%   0.0%     0.0%    1.9%   91.2%
    

    首部的几行显示系统的几个信息,其中包括:

    + system:系统名和当前日期.

    + Load averages:1分钟、5分钟和15分钟内运行的负载平均数

    一般来说只要每个CPU的当前活动进程数不大于

    3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题

    + 最近一次更新时存在的进程总数,并分别列出run(运行)、sleep(睡眠)、idle(停止)和zomb(‘僵尸’)状态的进程数

    + CPU state:用户占用时间的百分比、系统占用CPU时间的百分比、被nice命令改变优先级的任务占用的CPU时间百分比、以及CPU空闲时间的百分比。(被nice命令改变优先级的任务仅指那些nice值为负的任务)。花费在被nice命令改变优先级的任务上的时间也将被计算在系统和用户时间内,因此整个时间加起来可能会超过百分之百

    + avg:活动进程的平均值 (仅当多处理器系统时列出).

  2. 内存信息
    Mem:  4115792k av, 4056080k used,   59712k free,       0k shrd,    7072k buff
                       2950040k actv,  263064k in_d,   82612k in_c
    Swap: 8289500k av,  119824k used, 8169676k free                 3517880k cached
    

    Memory:关于内存使用情况的统计,包括实际(real)内存的活动值/总值,虚拟(virtual)内存的使用值/总值,剩余的内存。

  3. 进程信息
      PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME CPU COMMAND
    26359 oracle    16   0  687M 686M  685M S     0.5 17.0  16:42   0 oracle
    25427 oracle    16   0  504M 503M  502M S     0.5 12.5   1:25   3 oracle
     1605 oracle    24   0 10516 9.9M  8848 S     0.1  0.2   0:00   3 oracle
     1607 oracle    24   0 10500 9.8M  8832 S     0.1  0.2   0:00   1 oracle
        1 root      15   0   492  460   436 S     0.0  0.0  25:58   1 init
        2 root      RT   0     0    0     0 SW    0.0  0.0   0:00   0 migration/0
        3 root      RT   0     0    0     0 SW    0.0  0.0   0:00   1 migration/1
        4 root      RT   0     0    0     0 SW    0.0  0.0   0:00   2 migration/2
        5 root      RT   0     0    0     0 SW    0.0  0.0   0:00   3 migration/3
        6 root      15   0     0    0     0 SW    0.0  0.0   0:00   1 keventd
        7 root      34  19     0    0     0 SWN   0.0  0.0   0:00   0 ksoftirqd/0
        8 root      34  19     0    0     0 SWN   0.0  0.0   0:00   1 ksoftirqd/1
    

    列出系统里每一个处理器的信息,当信息在一个屏幕内无法显示时,会被分成多个屏幕显示,可以前面提到l,k和t命令查看

    • CPU:处理器号(仅当多处理器系统时列出)
    • TTY:终端名
    • PID:进程号
    • USERNAME:用户名
    • PRI:任务的优先级
    • NICE:任务的nice值,一个具有较低值的进程在系统上将具有优先权。可以通过改变nice值提高某些进程速度,但是这实际上是一种交易,因为那些nice值被升高的进程此时将运行得很慢。
    • NI是Nice值,PR是优先权,Nice值是进程的一个属性,PR是根据NICE排序的,规则是NICE越小PR越前(小,优先权更大),如果NICE相同则进程gid或者uid是root的优先权更大
    • SIZE:任务的代码加上数据再加上栈空间的大小。
    • RES:任务使用的物理内存的总数量。
    • STATE:任务的状态
    • TIME:自任务开始时使用的总CPU时间,单位为秒,如153:43,对应是153秒43毫秒
    • %WCPU:进程的CPU利用率权重百分比
    • %CPU:进程的原始的CPU利用率百分比,自上一次屏幕刷新以来任务占用CPU 时间的份额
    • COMMAND:启动进程的命令名。如果名字太长而不能在一行显示时,它将被截短

.bashrc文件

.bashrc - The individual per-interactive-shell startup file.

主要用于保存一些设置,如命令别名、路径等等。登陆linux启动bash时首先会去读取~/.bash_profile文件,.bash_profile文件中显式调用.bashrc,这样设置就生效了。

下面是个例子:
 # User specific aliases and functions
 PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
 LANG=zh_CN.GBK
 export PATH LANG

 alias rm='rm -i'
 alias ls='/bin/ls -F --color=tty --show-control-chars'

shell预定义常量

  $# 位置参数的数量。

  $* 所有位置参数的内容。

  $? 命令执行后返回的状态。

  $$ 当前进程的进程号。

  $! 后台运行的最后一个进程号。

  $0 当前执行的进程名。

shell if 语法

if” 表达式 如果条件为真则执行then后面的部分: 
if ….; then 
…. 
elif ….; then 
…. 
else 
…. 
fi
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件
是否存在及是否可读等等… 
通常用” [ ] “来表示条件测试。注意这里的空格很重要。要确保方括号的空格。 
[ -f "somefile" ] :判断是否是一个文件 
[ -x "/bin/ls" ] :判断/bin/ls是否存在并有可执行权限 
[ -n "$var" ] :判断$var变量是否有值 
[ "$a" = "$b" ] :判断$a和$b是否相等 ,注意“=”和变量之间要有空格
[ -z "$var" ]  字符串的长度为0则为真
[ -w FILE ]    文件存在且为可写则为真
[ -s FILE ]    文件存在且大小不为0则为真
[ -d FILE ]    FILE存在且为一个目录为真
执行man test可以查看所有测试表达式可以比较和判断的类型。 
直接执行以下脚本: 
#!/bin/sh 
if [ "$SHELL" = "/bin/bash" ]; then 
echo “your login shell is the bash (bourne again shell)” 
else 
echo “your login shell is not bash but $SHELL” 
fi 

cat << EOF

在shell中,文件分界符(通常写成EOF,你也可以写成FOE或者其他任何字符串)紧跟在<<符号后,意思是分界符后的内容将被当做标准输入传给<<前面的命令,直到再次在独立的一行遇到这个文件分界符(EOF或者其他任何字符,注意是独立一行,EOF前面不能有空格)。通常这个命令是cat,用来实现一些多行的屏幕输入或者创建一些临时文件。

1、最简单的用法
root@ribbonchen-laptop:~# cat<<EOF
> ha
> haha
> hahaha
> EOF
输出:
ha
haha
hahaha
2、把输出追加到文件
root@ribbonchen-laptop:~# cat<<EOF>out.txt
> ha
> haha
> hahaha
> EOF
root@ribbonchen-laptop:~# cat out.txt
ha
haha
hahaha
3、换一种写法
root@ribbonchen-laptop:~# cat>out.txt<<EOF
> ha
> haha
> hahaha
> EOF
root@ribbonchen-laptop:~# cat out.txt
ha
haha
hahaha
4、cat>filename,创建文件,并把标准输入输出到filename文件中,以ctrl+d作为输入结束
root@ribbonchen-laptop:~# cat>filename
ha
haha
hahaha
root@ribbonchen-laptop:~# cat filename
ha
haha
hahaha

shell export命令作用

用户登录到Linux系统后,系统将启动一个用户shell。在这个shell中,可以使用shell命令或声明变量,也可以创建并运行shell脚本程序。运行shell脚本程序时,系统将创建一个子shell。

此时,系统中将有两个shell,一个是登录时系统启动的shell,另一个是系统为运行脚本程序创建的shell。当一个脚本程序运行完毕,脚本shell将终止,返回到执行该脚本之前的shell。从这种意义上来说,用户可以有许多 shell,每个shell都是由某个shell(称为父shell)派生的。在子shell中定义的变量只在该子shell内有效。如果在一个shell脚本程序中定义了一个变量,当该脚本程序运行时,这个定义的变量只是该脚本程序内的一个局部变量,其他的shell不能引用它,要使某个变量的值可以在其他shell中被改变,可以使用export命令对已定义的变量进行输出。export命令将使系统在创建每一个新的shell时,定义这个变量的一个拷贝。这个过程称之为变量输出。

export 功能说明:设置或显示环境变量。
语  法:export [-fnp][变量名称]=[变量设置值]
补充说明:在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅限于该次登陆操作。
参  数:
-f  代表[变量名称]中为函数名称。
-n  删除指定的变量。变量实际上并未删除,只是不会输出到后续指令的执行环境中。
-p  列出所有的shell赋予程序的环境变量。

shell脚本命令集锦

cd “$(dirname “$0″)”  :回到脚本所在目录,$0为当前脚本路径

export var_name       : 将变量改为全局声明

pushd  dir_path          : 切换到dir_path路径上

popd :                       回到前一次的路径

source filename:   在当前进程中执行filename文件中的各个命令,而不是另起子进程

clear:                      清屏