输出到屏幕同时保存到文件:
cat outfile | tee savefile
cat outfile > /dev/null #丢弃输出
查看CPU结构:
cat /proc/cpuinfo
Solaris操作系统下:
psrinfo -v
mpstat 可以列出多cpu负载的状态
prtconf
isainfo -b 操作系统位数
CPU使用率、内存使用率:
top、
vmstat -n 1
free
1.top 命令详解&进程管理
top 命令查看系统的资源状况
load average 表示在过去的一段时间内有多少个进程企图独占CPU
zombie 进程 :不是异常情况。一个进程从创建到结束在最后那一段时间遍是僵尸。留在内存中等待父进程取的东西便是僵尸。任何程序都有僵尸状态,它占用一点内存资源,仅仅是表象而已不必害怕。如果程序有问题有机会遇见,解决大批量僵尸简单有效的办法是重起。kill是无任何效果的
stop模式:与sleep进程应区别,sleep会主动放弃cpu,而stop是被动放弃cpu ,例单步跟踪,stop(暂停)的进程是无法自己回到运行状态的。
cpu states :
nice: 让出百分比 irq :中断处理占用
idle:空间占用百分比 iowait:输入输出等待(如果它很大说明外存有瓶颈,需要升级硬盘(SCSI))
Mem: 内存情况
设计思想:把资源省下来不用便是浪费,如添加内存后free值会不变,buff值会增大。 判断物理内存够不够,看交换分区的使用状态。
交互命令:
[Space] 立即刷新显示
[h] 显示帮助屏幕
[k] 杀死某进程。你会被提示输入进程 ID 以及要发送给它的信号。 一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
[n] 改变显示的进程数量。你会被提示输入数量。
[u] 按用户排序。
[M] 按内存用量排序。
[o][O] 改变显示项目的顺序。
[P] 根据CPU使用百分比大小进行排序。
[T] 根据时间/累计时间进行排序。
[Ctrl+L] 擦除并且重写屏幕。
[q] 退出程序。
[r] 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
[S] 切换到累计模式。
[s] 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
缩写含义:
PID 每个进程的ID
USER 进程所有者的用户名
PRI 每个进程的优先级别
NI 每个优先级的值
SIZE 进程的代码大小加上数据大小再加上堆栈空间大小的总数,单位是KB
RSS 进程占用的物理内存的总数量,单位是KB
SHARE 进程使用共享内存的数量
STAT 进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态
%CPU 进程自最近一次刷新以来所占用的CPU时间和总时间的百分比
%MEM 进程占用的物理内存占总内存的百分比
TIME 进程自启动以来所占用的总CPU时间
CPU CPU标识
COMMAND 进程的命令名称
2. ps命令列进程。
ps ax :tty值为“?”是守护进程,叫deamon 无终端,大多系统服务是此进程,内核态进程是看不到的,例木马
ps axf :看进程树,以树形方式现实进程列表 ,init是1号进程,系统所有进程都是它派生的,杀不掉
ps axm :会把线程列出来。在linux下进程和线程是统一的,是轻量级进程的两种方式。
ps axu :显示进程的详细状态。
vsz:说此进程一共占用了多大物理内存。
rss:请求常驻内存多少
ps 进程查看:
a 所有窗口和终端,包括其他用户的进程
u 面向用户(用户友好)
-w 宽格式输出
x 在僵尸进程后面 会标注
ps axf 看进程树,以树形方式现实进程列表
ps axm 会把线程列出来,在linux下进程和线程是统一的,是轻量级进程的两种方式。
ps axu 显示进程的详细状态
查看进程启动时间 ps afx -o pid,args,etime,stime|grep process
查看一个进程的CPU使用
ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu
根据进程ID查看程序的全路径
pwdx pid
也可以在 /proc/pid/cwd 进程的工作目录
/proce/pid/exe 这个进程的文件路径
3.终止进程: kill pid 本质是协商退出!(并不是强制退出)
全: kill -信号 pid
kill –KILL pid 是强制退出。
例如编写一kill杀不掉的程序
#!/bin/sh
while true j do
echo –n “.”
sleep 1
done
#!/bin/sh
trap “”15 ##捕获15号进程,kill就是15号进程
while true j do
echo -n “.”
sleep 1
done
修改进程优先级:
4.nice 命令 每个进程都有优先权,权值越小优先级越高。
nice –调整值 命令 ##范围“-20~19”
linux图形界面的优先级并不是最高的,它仅是一进程
Solaris操作系统下:
prtconf| grep -i memory
/usr/platform/`uname -m`/sbin/prtdiag
机器的部件信息及PN号
prtfru -x
IO使用率:
iostat
iostat 结果解析
[root@20081006-1724 ~]# iostat -x
Linux 2.6.9-78.ELsmp (20081006-1724) 11/20/2009
avg-cpu: %user %nice %sys %iowait %idle
0.19 0.00 0.04 0.03 99.73
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 0.05 17.60 1.46 7.72 80.69 202.57 40.34 101.29 30.87 0.01 1.06 0.37 0.34
sda1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 29.90 0.00 3.14 3.14 0.00
sda2 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 16.25 0.00 1.51 1.30 0.00
sda3 0.05 17.60 1.46 7.72 80.69 202.57 40.34 101.29 30.87 0.01 1.06 0.37 0.34
dm-0 0.00 0.00 1.46 25.28 80.32 202.26 40.16 101.13 10.57 0.36 13.56 0.13 0.34
dm-1 0.00 0.00 0.05 0.04 0.37 0.32 0.18 0.16 8.00 0.00 6.84 1.30 0.01
rrqm/s: 每秒进行 merge的读操作数目。即 delta(rmerge)/s
wrqm/s: 每秒进行 merge的写操作数目。即 delta(wmerge)/s
r/s: 每秒完成的读 I/O设备次数。即 delta(rio)/s
w/s: 每秒完成的写 I/O设备次数。即 delta(wio)/s
rsec/s: 每秒读扇区数。即 delta(rsect)/s
wsec/s: 每秒写扇区数。即 delta(wsect)/s
rkB/s: 每秒读K字节数。是 rsect/s的一半,因为每扇区大小为512字节。
wkB/s: 每秒写K字节数。是 wsect/s的一半。
avgrq-sz: 平均每次设备I/O操作的数据大小 (扇区)。即 delta(rsect+wsect)/delta(rio+wio)
avgqu-sz: 平均I/O队列长度。即 delta(aveq)/s/1000 (因为aveq的单位为毫秒)。
await: 平均每次设备I/O操作的等待时间 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio)
svctm: 平均每次设备I/O操作的服务时间 (毫秒)。即 delta(use)/delta(rio+wio)
%util: 一秒中有百分之多少的时间用于 I/O操作,或者说一秒中有多少时间 I/O队列是非空的。
即 delta(use)/s/1000 (因为use的单位为毫秒)
如果 %util 接近 100%,说明产生的I/O请求太多,I/O系统已经满负荷,该磁盘
可能存在瓶颈。
比较重要的参数
%util: 一秒中有百分之多少的时间用于 I/O操作,或者说一秒中有多少时间 I/O队列是非空的
svctm: 平均每次设备I/O操作的服务时间
await: 平均每次设备I/O操作的等待时间
avgqu-sz: 平均I/O队列长度
如果%util接近100%,表明i/o请求太多,i/o系统已经满负荷,磁盘可能存在瓶颈,一般%util大于70%,i/o压力就比较大,读取速度有较多的wait.同时可以结合vmstat查看查看b参数(等待资源的进程数)和wa参数(IO等待所占用的CPU时间的百分比,高过30%时IO压力高)。
await 的大小一般取决于服务时间(svctm)以及 I/O队列的长度和 I/O请求的发出模式。如果 svctm比较接近 await,说明 I/O几乎没有等待时间;如果 await远大于 svctm,说明 I/O队列太长,应用得到的响应时间变慢。
形象的比喻
r/s+w/s 类似于交款人的总数
平均队列长度(avgqu-sz)类似于单位时间里平均排队人的个数
平均服务时间(svctm)类似于收银员的收款速度
平均等待时间(await)类似于平均每人的等待时间
平均I/O数据(avgrq-sz)类似于平均每人所买的东西多少
I/O 操作率 (%util)类似于收款台前有人排队的时间比例
设备IO操作:总IO(io)/s = r/s(读) +w/s(写) =1.46 + 25.28=26.74
平均每次设备I/O操作只需要0.36毫秒完成,现在却需要10.57毫秒完成,因为发出的请求太多(每秒26.74个),假如请求时同时发出的,可以这样计算平均等待时间:
平均等待时间=单个I/O服务器时间*(1+2+…+请求总数-1)/请求总数
每秒发出的I/0请求很多,但是平均队列就4,表示这些请求比较均匀,大部分处理还是比较及时
svctm 一般要小于 await (因为同时等待的请求的等待时间被重复计算了),
svctm 的大小一般和磁盘性能有关,CPU/内存的负荷也会对其有影响,请求过多
也会间接导致 svctm的增加。await的大小一般取决于服务时间(svctm)以及
I/O 队列的长度和 I/O请求的发出模式。如果 svctm比较接近 await,说明
I/O 几乎没有等待时间;如果 await远大于 svctm,说明 I/O队列太长,应用
得到的响应时间变慢,如果响应时间超过了用户可以容许的范围,这时可以考虑
更换更快的磁盘,调整内核 elevator算法,优化应用,或者升级 CPU。
队列长度(avgqu-sz)也可作为衡量系统 I/O负荷的指标,但由于 avgqu-sz是
按照单位时间的平均值,所以不能反映瞬间的 I/O洪水。
每个进行的使用CPU、内存等信息,可以在 /proc/进程号/ 目录下看
网络状态:
netstat
查看文件系统打开的句柄:
lsof
一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”
我总结一下lsof指令的用法:
lsof abc.txt 显示开启文件abc.txt的进程
lsof -i :22 知道22端口现在运行什么程序
lsof -c abc 显示abc进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof +d /usr/local/ 显示目录下被进程开启的文件
lsof +D /usr/local/ 同上,但是会搜索目录下的目录,时间较长
lsof -d 4 显示使用fd为4的进程
lsof -i 用以显示符合条件的进程情况
语法: lsof -i[46] [protocol][@hostname|hostaddr][:service|port]
46 --> IPv4 or IPv6
protocol --> TCP or UDP
hostname --> Internet host name
hostaddr --> IPv4位置
service --> /etc/service中的 service name (可以不只一个)
port --> 端口号 (可以不只一个)
例子: TCP:25 - TCP and port 25
@1.2.3.4 - Internet IPv4 host address 1.2.3.4
tcp@ohaha.ks.edu.tw:ftp - TCP protocol hosthaha.ks.edu.tw service name:ftp
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
例子: lsof -i tcp@ohaha.ks.edu.tw:ftp -n
lsof -p 12 看进程号为12的进程打开了哪些文件
lsof +|-r [t] 控制lsof不断重复执行,缺省是15s刷新
-r,lsof会永远不断的执行,直到收到中断信号
+r,lsof会一直执行,直到没有档案被显示
例子:不断查看目前ftp连接的情况:lsof -i tcp@ohaha.ks.edu.tw:ftp -r
lsof -s 列出打开文件的大小,如果没有大小,则留下空白
lsof -u username 以UID,列出打开的文件
查看文件或socket的所有者:
fuser
解压rpm包:
rpm -ivh file.rpm
查找包是否被系统安装:
rpm -qal | grep file
定时控制:
crontab
at
后台运行程序:
program &
这个在控制端退出时,后台程序也被终止.
让程序始终在后台运行:
nohup program&
传文件:
scp
rysnc
设置系统内核参数:
sysctl -a 显示系统内核参数
sysctl net.core.rmem_default=131071000 设置内核网络读缓存
查看库文件信息:
file 库文件名
可以查看库文件是32位的,还是64位的
tcpdump -ieth0 ip src XXX.XXX.XXX.XXX -w a.bin -C 10 -W 20 -s 0
解析:保存到文件a.bin ,如果输出文件大于10M就轮转(比如output.bin2, ouput.bin3等),最多轮转20个文件。-s 0不限制包的字节,抓整个包
用途举例:比如想看看某个网卡是否还有流量
swapon 打开交换盘
swapoff 关闭交换盘
1.查看机器所有硬件信息:
dmidecode |more
dmesg |more
这2个命令出来的信息都非常多,所以建议后面使用"|more"便于查看
2.查看CPU信息
方法一:
Linux下CPU相关的参数保存在 /proc/cpuinfo 文件里
cat /proc/cpuinfo |more
方法二:
采用命令 dmesg | grep CPU 可以查看到相关CPU的启动信息
查看CPU的位数:
getconf LONG_BIT
3.查看Mem信息
cat /proc/meminfo |more (注意输出信息的最后一行:MachineMem: 41932272 kB)
free -m
top
4.查看磁盘信息
方法一:
fdisk -l 可以看到系统上的磁盘(包括U盘)的分区以及大小相关信息。
方法二:
直接查看
cat /proc/partitions
5.查看网卡信息
方法一:
ethtool eth0 采用此命令可以查看到网卡相关的技术指标
(不一定所有网卡都支持此命令)
ethtool -i eth1 加上 -i 参数查看网卡驱动
可以尝试其它参数查看网卡相关技术参数
方法二:
也可以通过dmesg | grep eth0 等看到网卡名字(厂家)等信息
通过查看 /etc/sysconfig/network-scripts/ifcfg-eth0 可以看到当前的网卡配置包括IP、网关地址等信息。
当然也可以通过ifconfig命令查看。
6.如何查看主板信息?
lspci
7.如何挂载ISO文件
mount -o loop *.iso mount_point
8.如何查看光盘相关信息
方法一:
插入CD光碟后,在本人的RHEL5系统里,光碟文件是 /dev/cdrom,
因此只需 mount /dev/cdrom mount_point 即可。
[root@miix tmp]# mount /dev/cdrom mount_point
mount: block device /dev/cdrom is write-protected, mounting read-only
其实仔细看一下,光驱的设备文件是 hdc
[root@miix tmp]# ls -l /dev/cdrom*
lrwxrwxrwx 1 root root 3 01-08 08:54 /dev/cdrom -> hdc
lrwxrwxrwx 1 root root 3 01-08 08:54 /dev/cdrom-hdc -> hdc
因此我们也可以这样 mount /dev/hdc mount_point
如果光驱里没放入有效光盘,则报错:
[root@miix tmp]# mount /dev/hdc mount_point
mount: 找不到介质
9.如何查看USB设备相关
方法一:
其实通过 fdisk -l 命令可以查看到接入的U盘信息,本人的U盘信息如下:
Disk /dev/sda: 2012 MB, 2012217344 bytes
16 heads, 32 sectors/track, 7676 cylinders
Units = cylinders of 512 * 512 = 262144 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 16 7676 1961024 b W95 FAT32
U盘的设备文件是 /dev/sda,2G大小,FAT32格式。
如果用户登陆的不是Linux图形界面,U盘不会自动挂载上来。
此时可以通过手工挂载(mount):
mount /dev/sda1 mount_point
以上命令将U盘挂载到当前目录的 mount_point 目录,注意挂的是 sda1 不是 sda。
卸载命令是 umount mount_point
Linux默认没有自带支持NTFS格式磁盘的驱动,但对FAT32支持良好,挂载的时候一般不需要 -t vfat 参数 。
如果支持ntfs,对ntfs格式的磁盘分区应使用 -t ntfs 参数。
如果出现乱码情况,可以考虑用 -o iocharset=字符集 参数。
可以通过 lsusb 命令查看 USB 设备信息哦:
[root@miix tmp]# lsusb
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
Bus 004 Device 002: ID 0951:1613 Kingston Technology
Bus 004 Device 001: ID 0000:0000
linux 下查看进程栈信息:
pstack <pid>
格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径`
linux sed 批量替换多个文件中的字符串
sed -i "s/oldstring/newstring/g" `grep oldstring -rl yourdir`
例如:替换/home下所有文件中的www.admin99.net为admin99.net
sed -i "s/www.admin99.net/admin99.net/g" `grep www.admin99.net -rl /home`
exp:sed -i "s/shabi/$/g" `grep shabi -rl ./`
2、自己额外附加
2.1 将文件1.txt内的文字“garden”替换成“mirGarden”
# sed -i "s/garden/mirGarden/g" 1.txt //sed -i 很简单
2.2 将当前目录下的所有文件内的“garden”替换成“mirGarden”
## sed -i "s/garden/mirGarden/g" `ls` //其实也就是ls出多个文件名而已