Linux操作命令总结(六)
1.文件描述符
标准输入 standard input 0 <,<<
标准输出 standard output 1 >,>>
标准错误输出 standard error output 2 2>,2>>
2>&1 将标准错误输出重定向到标准输出
command >/dev/null 2>&1 将标准输出和标准错误输出均重定向到/dev/null 。其中,/dev/null相当于一个只读文件,如果尝试从/dev/null读取内容是什么也读不到的,所有写入/dev/null的内容都会丢失。
2.&
当作业在前台运行时,终端会被作业占据。可以在命令后面加上&,让作业在后台运行,作业在后台运行还是会将结果输出到当前终端界面上,如果作业在后台运行过程中,有大量信息需要进行输出,则可以将输出内容重定向到某个文件中。
不要将需要与用户进行交互的命令放在后台执行,否则这个作业会一直处于等待状态。
command > out.file 2>&1 & 将command在后台执行,且将标准输出和标准错误输出均重定向到out.file
3.nohup
使用&可以将command在后台执行,但是如果当前控制台终端被关闭退出账户时,运行在后台的作业就会停止运行。如果需要在退出账户后,作业仍旧在后台继续执行,可以使用nohup,即no hang up
nohup command & 进程在用户退出登录后仍旧继续执行,原程序的的标准输出被自动改向到当前目录下的nohup.out文件。
nohup command > out.file 2>&1 & 进程在用户退出登录后仍旧继续执行,,将标准输出和标准错误输出均指定了重定向文件out.file。
注意:使用nohup及&使command在后台运行并在退出当前账户时,仍然作业在后台执行,需要保证账户是使用exit正常退出终端的。否则,后台运行的作业会停止。
4.curl
curl是一个利用URL规则在命令行下的文件传输工具,可以说是一个强大的http命令行工具,支持文件的上传和下载。
curl http://www.baidu.com 访问百度并将返回的信息显示到终端中。 通常可以用来测试某个Linux服务是否可以到达某一个网站
curl http://www.baidu.com >> baidu.html 将返回的网页信息保存到baidu.html
curl -o /dev/null -s -w %{http_code} www.baidu.com 获取访问网页返回的响应码
curl -c cookie.txt http://www.baidu.com 将访问网页返回的cookie信息放到文件cookie.txt中
5.source
读入指定目录的shell文件并依次执行文件中所有语句,通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录。
source /etc/profile 若修改了/etc/profile,使其立即生效。
source读取并执行指定文件中的语句,是在当前的shell或者说当前的终端里,没有建立新的子shell,所有新建、改变的变量在当前的终端中有效。
6. sh与./
sh a.sh 在当前终端的基础上要重新建立一个子shell,在子shell中执行脚本中的内容,这个子shell继承父shell即当前终端的环境变量,而子shell中改变的变量不会被带回父shell,除非使用export
./ a.sh 需要具有a.sh的执行权限,在当前shell或者说当前的终端执行脚本。
sh与source均不需要脚本的执行权限,而./需要脚本的执行权限
7.export
将变量设置为环境变量或者说全局变量,使其它在当前终端获取该变量或者使用sh xx.sh执行过程中建立的子shell中仍然可以获取该变量。
a.sh
#!/bin/sh
var='beijing'
export var
b.sh
#!/bin/sh
echo $var
8.top
监控Linux的系统状况,如CPU、内存总体情况,各进程的CPU、内存等使用情况。top监控的最小单位是进程。
18:06:05 当前系统时间
13 min 系统已经运行的时间,格式为时:分
1 user 当前有1个用户登录到本Linux系统
load average : 0.00, 0.05, 0.08 系统在最近的1分钟、5分钟、15分钟的负载情况。 这些load average系统负载数据是每隔5秒钟检查一次活跃的进程数,按照特定算法计算出来的。如果这些系统平均负载数据除以CPU处理器的核心的数量,若结果高于5,则表明系统在超负荷运转。
Tasks
129 total 系统当前总的进程数
1 running 系统当前处于运行状态的进程数
128 sleeping 系统当前处于休眠状态的进程数
0 stopped 系统当前处于停止状态的进程数
0 zimbie 系统当前处于僵尸状态的进程数
Cpu(s)
0.3%us 用户空间占用CPU的百分比
0.3%sy 内核空间占用CPU的百分比
0.0%ni 改变过优先级的进程占用CPU的百分比
99.0%id 空闲CPU百分比
0.0%wa IO等待占用CPU的百分比
0.0%hi 硬中断占用CPU百分比
0.3%si 软中断占用CPU百分比
Mem
1938548k total 物理内存总量
700560k used 已使用的内存总量。即纳入内核管控的内存总量,这些纳入内核管控的内存总量不一定都在使用中。其中还包括过去被使用但现在不再使用,而可以被重复使用的内存,这些内存不会被归还到free中。因此,free的内存总量会越来越少,但也不必为此过于担心。
1237988k free 空闲内存总量。即未纳入内核管控的内存总量
29688k buffers 缓存内存总量
Swap
2736124k total 交换空间总量
0k used 已使用的交换空间总量。 在进行内存监控时,需要关注本参数值的变化。若已使用交换空间在不断变化,说明内核在不断进行内存和swap的数据交换 ,即说明真正的内存已不够用了。
2736124k free 空闲交换空间总量
326256k cached 缓冲交换空间总量
Linux服务器当前的可用内存近似值计算公式=Mem(free)+Mem(buffers)+Swap(cached)
进程相关
PID 进程id
USER 进程所有者
PR 进程优先级
NI 负值表示高优先级,正值表示低优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
RES 进程使用的未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb。
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小
S 进程状态。R:运行状态 S:睡眠状态 D:不可中断的睡眠状态 T:跟踪状态 Z:僵尸状态
%CPU 上次更新到现在的CPU时间占用百分比。默认进入top后,各个进程按照CPU的占用量来由高到低排序。
%MEM 进程使用的物理内存百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
COMMAND 进程名称
由于top命令监控的最小单位是进程,若关心的是更为细节的Java线程数或客户连接数。则可使用下面指令,通过调整grep的参数,来进行更加细致的监控
ps -eLf | grep java | wc -l 监控java线程数
netstat -n | grep tcp | grep 端口号 | wc -l 监控网络客户连接数
在系统根目录/proc中,每一个数据目录的名字都是运行中的进程PID,进入任一个PID进程目录,可以通过其中文件或目录来观察进程的各项运行指标,如task目录就是用来描述进程中的线程的。因此,也可使用下面一行指令来获取指定进程的线程数量。
ls /proc/PID/task | wc -l
9.uptime
记录当前系统在过去1分钟、5分钟、15分钟的平均负载。
01:06:11 当前系统时间
4:03 系统已经运行的时间,格式为时:分
2 users 当前有2个用户登录到本Linux系统
load average : 0.00, 0.00, 0.00 系统在最近的1分钟、5分钟、15分钟的负载情况。 假设Linux系统存在一个单核的处理器,若负载数值为1.0,表示刚好在系统处理的正常承受范围内,此时已经没有剩余的资源去处理过多的任务 ,在实际情况中,系统管理员通常将其数值划设在0.70,若在实时监控中该Linux服务器的负载数值在1.0左右则需要考虑系统的性能优化问题,一旦服务器负载超过5.00,则系统已严重超负荷运转。相对于过去1分钟的负载数据,更应该关注过去5分钟、15分钟的系统负载数据。注意:在多处理器系统中,负载均值是基于内核的数量决定的,即负载数值1.0在拥有2个内核的Linux系统中表示还存在50%的剩余系统资源,而2.0才表示负载在100%。物理的处理器个数并不重要,重要的是CPU的总核心个数。
cat /proc/cpuinfo 获取Linux系统中每个处理器的信息
grep 'model name' /proc/cpuinfo | wc -l 获取当前Linux系统的核心数
10.free
free -m 以M字节为单位,显示当前内存的使用情况
上图Swap交换空间中,已使用0M,空闲2671M。在查看或者衡量Linux内存是否够用时,如果Swap的used数值很大的话,就要考虑添加物理内存了。若如上图中used为0M,则不用担心内存不够使用。