Linux学习笔记(二)

上一个实在是太多了,然而这篇就有点少….还剩下一丢丢
看完马上进入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 / pkill
kill -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]
把进程放入后台的方式:

  1. 命令后面加&,这种方式会在后台执行
  2. 命令执行后按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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ find . -name 'my*' -ls

# 搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
# atime 文件访问时间
# ctime 改变文件属性
# mtime 修改文件内容
$ find . -type f -mmin -10

# 查找没有所有者的文件
$ find /root -nouser
# 按照所有者去搜索
$ find /root -user root
# 当前目录下,大于25k的文件 M 默认单位是扇区
$ find . -size +25k
# -a 表示and ;-o 表示or ,搜索大于25k小于10m的文件
# -exec 和 {}\; 是固定写法,前面的搜出来的交给ls -lh执行,显示详细信息
$ find . -size +25k -a -size -10M -exec ls -lh {} \;

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

你可能需要魔法上网~~