上一个实在是太多了,然而这篇就有点少….还剩下一丢丢
看完马上进入shell编程啦~~
进程管理
进程管理主要就是查看和杀死吧,哈哈….
检测系统是否健康很重要
查看进程-ps
查看进程用的ps命令,一般使用ps aux
或者ps -le
可以看到所有进程信息,前一种是没有-
的,当然就算加上也不影响执行,会有行报错,原因是沿用了以前的BSD系列
ps列出来的是当时一瞬间的进程列表,不会时时刷新,然后是说下几个标识:
- VSZ:使用的虚拟内存
- RSS:使用的物理内存
- TTY:在那个终端机运作,显示?的一般是系统启动的,不是由终端启动的,ty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的就是远程登陆了
- STAT:进程的状态
- START:进程启动的日期
- TIME:进程使用CPU的时间
然后再详细说下状态这一栏,它是用英文字母作为标志,常用的各个的表示意思为:
- R:正在运行
- D:不可中断
- S:睡眠状态,可被某些信号唤醒
- T:该程序目前正在侦测或者是停止了
- Z:僵尸进程,该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
- X:死掉的进程(一般不会看到)
- +:位于后台的进程组
- l:多线程
- s:包含子进程
- <:高优先级
- N:低优先级
- L:有些页被锁进内存
了解了上面的这些基本就能看懂了。
然后可以使用pstree
来查看进程的树结构,加个-p
可以展开来看,就是会比较多。
另外补充一个命令:lsof(list open files),这是一个列出当前系统打开文件的工具,在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件;感觉这个会比较有用!
例如你可以查看占用指定端口的程序:lsof -i:8080
查看进程-top
top命令是个好东西,默认3秒刷新一次,当然是可以自己设定的,但是这个工具比较吃资源,所以3秒就可以了.
top命令前面会列出系统的状态信息,主要就是看这些啦
第一行:当前时间,系统已运行时间,登陆用户数,以及1分钟、5分钟、15分钟的负载情况。需要注意的是,系统负载最好不要超过你CPU的核心数,这当然也是个经验值,还要视具体情况
第二行:进程的一些信息,都看得懂
第三行:CPU的相关状态,us就是用户占用的资源,sy就是系统占用的资源,关键是看id空闲百分比,一般这个不要低于20%
第四行:内存的一些信息,总的、使用的、空闲的、缓存的
第五行:交换分区的信息,同内存差不多,最后一个是缓冲的
第四行中使用中的内存总量(used)指的是现在系统内核控制的内存数,空闲内存总量(free)是内核还未纳入其管控范围的数量。
纳入内核管理的内存不见得都在使用中,还包括过去使用过的现在可以被重复利用的内存,内核并不把这些可被重新使用的内存交还到free中去,因此在linux上free内存会越来越少,但不用为此担心。
关于缓存和缓冲区,其实都是在内存,缓存简单说就是把那些频繁从硬盘读的数据先存在内存中,以加快读取的速度;而缓冲相反,把需要往硬盘写的数据先存起来,最后一起写入硬盘,这样避免在硬盘频繁读写的时候加重其的负载
所以,如果真的要算可用内存,应该是free的加上缓冲和缓存区的大小
还有,top命令执行后是处于交换状态的,比如按q可以退出,c是显示完整的命令,M根据内存排序,P根据cpu进行排序,T就是根据时间排序
杀死进程
杀进程可用3个命令:kill / killall / pkillkill -l
可以查看它的信号,比如9是强制结束,1是平滑重启(不会中断用户的连接),15是默认的正常结束
举个例子,比如平滑重启某个进程:kill -HUP id
或者kill -1 id
都可以
至于killall是杀死一类进程,按照进程名,kill只能杀死单个进程
pkill可以按照终端号进行“踢人”,pkill -9 -t xx
关于优先级
其实一般也用不到,了解下
NI一般就是指优先级 范围是:-20到19 普通用户只能0-19
配合上面的进程管理命令,有个公式:PRI(最终值) = PRI(原始值) + NI
至于设置优先级,可以使用nice -n [-5] cmd
但是不能修改已经存在的进程
如果非要修改存在的进程,那么使用renice [-10] id
不过优先级无论怎么设,我们一般是感觉不出来的,CPU的速度太快了….
后台管理
查看后台列表:jobs [-l]
把进程放入后台的方式:
- 命令后面加&,这种方式会在后台执行
- 命令执行后按ctrl + z,这种方式放入后台会暂停
需要说下的是,只要是要交互的比如vi、top无论你用那种方式放入后台,都是暂停状态
恢复(工作号在jobs查看):fg (%)工作号
恢复到前台执行,%可省略bg (%) 工作号
后台暂停状态恢复到后台执行
如果工作号省略那就是执行最后一个加入的,带有+
标识的,-
是倒数第二个
这种方式后台会随终端的关闭而关闭,如果想不让他关闭那就需要加个nohup命令,类似:nohup cmd &
系统资源查看
其实用top足够了,不过下面的几个资源占用可能小点vmstat 1 3
每隔1秒刷新,共3次
硬件状态:dmesg
查看内存情况:free -m
查看CPU信息:cat /proc/cpuinfo
以及top的精简版?:uptime
查看内核:uname -a
可通过查看系统命令来判断系统是多少位的:file cmd
文件被谁调用:lsof | more
[-c
:进程被谁调用;-u
被那个用户调用]
搜索命令
find命令
find是最常见和最强大的查找命令,你可以用它找到任何你想找的文件。也就是会遍历系统文件,如果是很大的范围比如/
那就非常的消耗系统资源了,是完全匹配,常用的通配符有*、?、[]
$ find <指定目录> <指定条件> <指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
举个栗子
1 | 搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。 |
locate命令
locate命令其实是find -name
的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb)
,这个数据库中含有本地所有文件信息。
Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
比如:$ locate -i ~/m
就是搜索用户主目录下,所有以m开头的文件,并且忽略大小写
whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。如:$ whereis grep
which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。如:$ which grep
grep文本搜索
Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep 全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。
grep 可用于 shell 脚本,因为 grep 通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
前面已经说过它可以用于管道符过滤,类似这样:cat test.txt | grep "lock"
还有一个很爽的作用是从多个文件中查找关键词:grep -rn "hello,world!" *
下面就说一下参数的作用:
* : 表示当前目录所有文件,也可以是某个文件名
-r: 是递归查找
-n:是显示行号,在显示符合样式的那一行之前,标示出该行的列数编号
-R:查找所有文件包含子目录
-i:忽略大小写
-s:不显示错误信息
-c :计算找到 ‘搜寻字符串’ 的次数(列数)
-v:显示不包含匹配文本的所有行
-l:列出文件内容符合指定的样式的文件名称
-L:列出文件内容不符合指定的样式的文件名称
-F:将样式视为固定字符串的列表
-G:将样式视为普通的表示法来使用
文件上传
一般来说,linux 服务器大多是通过 ssh 客户端来进行远程的登陆和管理的,使用 ssh 登陆 linux 主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地。
使用之前记得安装 lrzsz 包:yum -y install lrzsz
常用的命令有两个:
- sz:将选定的文件发送(send)到本地机器
- rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)
rz,sz 是便是 Linux/Unix 同 Windows 进行 ZModem 文件传输的命令行工具(不支持文件夹),当然需要客户端支持,Xshell 和 SecureCRT 都是支持的。
注意:
单独用 rz 会有两个问题:上传中断、上传文件变化(md5不同),解决办法是上传是用 rz -be
,并且去掉弹出的对话框中“Upload files as ASCII”前的勾选。
详情参考:http://blog.csdn.net/k346k346/article/details/71515740
其他
补充个命令w,可以查看当前连接的终端,配合pkill使用很爽
/bin/sync
把内存的数据向硬盘转移
设置环境变量:编辑 /etc/profile
输入 G 跳转到最后一行,加上环境变量就行了
最后使用 source /etc/profile
让其生效
通过 id name
可以查看用户的基本信息,组 id 之类的
评论框加载失败,无法访问 Disqus
你可能需要魔法上网~~