第3部分:监测进程等
第4章高级shell命令—linux系统管理命令
4.1 监测程序【跟踪运行在系统中的程序】
4.1.1 探查进程
ps命令可以输出运行在系统上的所有程序的许多信息。默认只会显示当前控制台下的属于当前用户的进程。

PID表示process ID进城的ID,终端(TTY)及该进程使用CPU的时间。
ps支持三种不同的类型的命令行参数。
unix风格参数,前面加单破折号:


举个例子:ps -ef
其中UID表示启动这些进程的用户。PID表示进程的ID。PPID表示父进程的进程号。C:进程生命周期中CPU利用率。STIME表示进程启动时系统的时间。TTY表示启动时终端的设备。TIME表示运行进程需要的累计CPU时间

eg:ps -l

F:表示内核分配给进程的系统标识。S:表示进程的状态(O正在运行;S表示正在运行;R表示可运行,正等待运行;Z表示僵化,进程已经结束,父进程不存在;T表示停止)。PRI进程的优先级(数字越大优先级越低)。ADDR进程的内存地址。SZ:如果进程被换出,所需要交换空间的大致大小。WCHAN:进程休眠的内核函数的地址。
此处省略BSD\GNU长参数。
4.1.2实时监测进程【观察频繁换进换出的内存的进程趋势----top命令显示实时进程信息】
这里top时是在不断刷新的。
输出的第一部分是系统概况。显示当前的时间、系统的运行时间、登录的用户数以及系统的平均负载功率(有3个值,最近1分钟、5分钟、15分钟的平均负载)越大说明系统的负载越大。如果最近15分钟的负载都很高就说明系统不太好了。
第二行是进程概要,top输出把进程称作任务。有多少在运行、休眠、停止、僵化。
第三行是CPU使用情况,物理内存。
第四行是针对系统的交换空间。
PID、USER:进程属主的名字。PR进程优先级。NI进程的谦让程度。VIRT进程占用的虚拟内存总量。RES:进程占用的物理内存总量。SHR进程和其他进程共享的内存总量。S进程序的状态。%CPU的时间比例。%MEM使用内存占可用内存的比例。TIME+表示进程启动到目前CPU的总时间。COMMAND:进程所对应的命令名称,启动的程序名。
可选选项-f(允许选择输出进行排序)、-d(设置刷新时间)、-q(退出)、

4.1.3结束进程
在linux中有两个命令可以向运行中的进程发出进程信号。两个为kill和killalll第一个kill只可以使用进程ID停止运行。
eg:kill 2980。强制终止可使用-s参数。之后可以使用ps、top来查看
第二个是killall命令,需要属主或者root,支持通过进程名来终止,也支持通配符。
4.2监测磁盘空间----监控系统盘的使用情况,管理存储媒介,介绍管理移动存储设备的命令
4.2.1 挂载存储媒体到虚拟目录
在Linux中只有一个虚拟目录,使用新的存储空间需要挂载到虚拟目录之下,大部分可以自动挂载。
1】mount命令,默认会输出当前系统所有的挂载设备。
包括媒体设备的文件名,媒体挂载到虚拟目录的挂载点,文件系统类型,已挂载媒体文件的访问状态。
eg:mount -t type device directory------------------这里新版本有改动
type:vfat是window长文件系统,u盘会格式化为这个系统,而CD需要格式化为iso9660文件系统。
device directory定义了挂载存储设备的设备文件的位置以及挂载点在虚拟目录中的位置。
mount的可选参数:


-o参数允许在挂载文件系统时添加一些以逗号分隔的额外选项。
ro:只读形式挂载
rw:读写形式挂载
user:允许普通用户挂载文件系统
check=none:挂载文件系统随时不进行完整性校验
loop:挂载一个文件
2】umonut命令:拆卸一个可移动设备,一般在拔出存储设备时需要先拆卸
eg:umount [directory | device ]
支持通过挂载点或者设备文件来拆卸指定设备。设备有程序在使用时,则不允许拆卸。
4.2.2 df命令-查看设备还有多少磁盘空间
eg:df
包含以下输出:设备文件的位置、能容纳多少个1024字节大小的块,已使用多少个1024字节大小的块,还有多少多少个1024字节大小的块可用。已用空间占比多少,设备挂载到哪个挂载点。
配合-h来使用,显示输出磁盘空间按照用户易读的形式,


4.2.3使用du命令---可以显示某个特定文件夹(目录)的磁盘使用情况
可用来判断某个文件夹下是否有超大型文件。
默认会显示当前文件夹下的所有文件、目录、子目录的磁盘使用情况。
输出左边的数值时每个文件或者文件夹的占用的磁盘块数。列表是从目录层级的最底部开始的,按照文件、子目录、目录逐渐向上的。
通常配合参数 -c\-g\-s
-c显示所有已列出文件总的大小
-h按用户易读的格式输出大小,单位为k、m、G
-s显示每个输出参数的统计
4.3 处理数据文件
4.3.1排序数据
sort命令—对数据排序,会按照默认语言(a-z)的排序规则对文本中的数据行排序。
格式:sort -M 文件名
当输入时数字时,需要使用-n来配合使用,此时会按照从小到大排列。
当输入时月份时,需使用-M
其他参数

其中-t 、-k参数在对按照字段分隔的数据进行排序。-t指定字段分隔符,-可指定排序的字段

此时数据按照第三个字段,用户id的数值排序。
-n也常用在排序数值时,这里用到管道,稍后再说

4.3.2搜索数据—grep
格式:grep [options] pattern [file]
这个命令会在输出指定的文件中查找包含匹配指定模式的字符的行。输出包含输出指定模式的行。
eg:grep three my
其他参数:
反向搜索(-v),输出不包含该匹配模式的行。eg:grep -v t my
显示匹配模式的行所在的行号(-n)eg:grep -n t my
显示有多少行含有匹配模式(-c)eg:grep -c my
指定多个匹配模式可以使用(-e)eg:grep -e t -e f my(显示有t、f所有的行)
还有正则表达【以后再说】,还有egrep
4.3.3压缩数据[类似2345压缩]

推荐使用gzip。gzip压缩文件、gzcat用来查看压缩的文本文件的内容。gunzip解压文件。还可以使用通配符批量压缩文件。
4.3.4归档数据—标准归档工具tar
tar function [options] object1 object2 …

下面是能和tar一起使用的参数命令

实例:


第5章理解shell
本章需要搞清楚shell进程与系统之间的关系
5.1 shell的父子关系
父shell:用于登录某个虚拟控制器终端或在GUI中运行仿真器是所使用的默认交互shell。父shell提供CLI(command line interface CLI)
子shell(subshell):在CLI提示符后输入/bit/bash或者其他等效命令时,会创建一个新的shell子进程。
识别子进程,使用前面学到的ps -f命令来查看,查看PID和PPID之间的关系,如果下一个进程的PPID是前一个进程的PID,那么这个进程就是子进程。eg:

可以观察上图中的PPID和PID之间的关系。
还可以使用ps -forest命令来展示子shell之间的关系。下面附上bash的命令行参数。

同时exit可以退出子shell
5.1.1 进程列表
非进程列表:在一行中指定要依次显示的一系列命令,在每个命令之间添加分号【;】即可。eg:

将上面个的命令用圆括号【()】括起来即表示为进程列表。eg:

NOTE:说明括号的加入使命令列表变成了进程列表,生成一个子shell来执行对应的命令。
进程列表是命令分组中一种,还有一种是在进程列表的()后面加上分号放入花括号{}中。eg:
{(ls ;pwd; cd my; ls;pwd);}…这里未验证
使用echo $BASH_SUBSHELL 命令可以产看是否生成了子shell。若生成则返回大于0的数,为0则没有。
5.1.2 其它子shell用法
1.后台模式:在后台模式中可以处理命令的同时让出CLI,供他用。例如sleep,希望进程等待(睡眠的)秒数。
eg:sleep 10 -----将会话暂停10s
若将其进入后台模式,在命令末尾加上& 。
可以使用ps -f命令来查看后台的进程。PID会变成粗体。还可以使用jobs命令来显示后台作业信息。jobs可以显示当前后台模式中所有用户的进程(作业)。
eg:jobs 还可以使用jobs -l显示PID
2.将进程列表置入后台
同上加入&即刻
子shell优点: 在CLI中运用子shell的创造性方法之一就是将进程列表置入后台模式。你既可以在子shell中进行繁重的处理工作,同时也不会让子shell的I/O受制于终端。也可使用tar来后台备份文件
3.协程
同时做两件事情,后台生成子shell,在子shell中执行命令。使用coproc命令进行。eg:coproc sleep 10
5.2 理解shell内建命令
内建命令和非内建(外部命令)命令两部分。
5.2.1 外部命令(文件系统命令)
这个命令不是shell命令。
5.2.2 内建命令
history命令。eg:history ,,,通常保存1000条命令。还可以使用!!来重复上一条命令。eg:!!
还可以唤醒history列表中的任何一项,使用序号即可。
eg:$ history
$ !22 唤醒编号为22的命令
第6章配置环境变量
本章主要知识点:识别系统环境变量(全局变量)和非系统环境变量(局部变量)。设置自定义环境变量,删除环境变量。设置PATH环境变量路径。定位系统环境变量。
6.1什么是环境变量
环境变量用来存储与shell会话和工作环境的信息。分为内部环境变量(全局)和外部环境变量(局部)。
6.1.1查看全局环境变量
全局变量含义:对于所有的shell全部都适用,无国界,全国性变量无条件服从。即所有进程的父shell和子shell都适用。
如何识别:系统环境变量变量名都是以大写字母开头的。使用env或者printenv。二者的区别就是,env不可以用来显示单个的环境变量。

还可以使用echo $HOME 来显示单个环境变量,但是必须添加$符号。
6.1.2局部环境变量(只在定义中的进程中可使用,退出进程就失效了)
分两种一种是系统的局部环境变量和自定义的环境变量(小写字母开头)。
使用set命令查看,但是会显示局部变量和全局变量及用户自定义变量,排序方式为字母顺序。
即显示范围上来看set>printenv>env
6.2设置自定义用户变量并引用
6.2.1设置局部用户自定义变量
步骤:设置自定义用户环境变量my_variable 为Hello
$ echo $my_variable
$ my_variable=Hello
$
$ echo $my_variable
hello
但是如果赋值给变量的值含有空格的话需要使用单引号或者双引号。
$ my_variable="Hello my friend"或者$ my_variable='Hello my friend'
还有变量名和等号还有所附的值之间没有空格。
设置之后只可以在单个shell中使用,其他的shell中不可以使用。
父shell设置了,子shell是不可以使用的。
5.2.2设置全局变量自定义变量
方法:创建一个局部变量然后把它导出到全局变量中。
$ my_variable="You are my angle"
$
$export my_variable
$echo $my_variable
You are my angle
$
$bash
$
$ echo $my_variable
You are my angle
$exit
$
$ echo $my_variable
You are my angle
还有就是在子shell中修改了全局变量,退出子shell后在父shell中的全局变量值是不会变的,改变仅在子shell中可使用。在子shell中不可以使用export来修改父shell中的自定义环境变量。
6.3删除环境变量
使用unset来进行删除自定义的环境变量,这里不需要使用$。
$echo my_variable
you are my angle
$unset my_variable
$
$echo my_variable
什么时候使用$,对环境变量进行操作时不使用$,如果使用环境变量需要使用$,但是printenv除外。
但是如果在子shell中删除了全局环境变量,但是在父shell还是有效的。
总之:在子shell的任何操作只能在子shell中有效。
6.4默认的shell环境变量
系统的默认环境变量非常多,不在赘述。
6.5设置PATH环境变量
PATH环境变量定义了用于进行命令和程序查找的目录。

通过观察上述路径可以发现,目录使用冒号分隔。如果程序没有包括在PATH变量中时,不使用绝对路径的话,shell是没法找到的。
如果shell中找不到指定的命令或者程序,会产生下面的

解决方法就是保证PATH环境包含了所存放的应用程序的目录。
下面介绍添加路径的方法,引用用来的PATH的值,然后在这个字符串后添加新目录。
eg:

PATH也是环境变量同样也是需要export的。
6.6定位系统环境变量
6.6.1登录shell的一些内容

逐个介绍5个文件:
第一个/ect/profile

使用cat 打开后,有一个文件是/ect/bash.bashrc的文件。
第二个:$HOME中的启动文件:提供一个用户专属的启动文件来定义用户所用到环境变量。
省略的内容:交互式shell、非交互式shell
6.6.2 环境变量持久化:创建自定义永久性全局变量和局部变量。
在/etc/ profile.d目录中创建一个.sh结尾的文件。
6.7数组变量:即给某个环境变量设置多个值,将其放在括号里,值与值之间分开。


删除可以,但是位置还在。
第7章 Linux文件权限
本章主要掌握的内容是文件权限、用户组的概念、如何分享文件。
7.1简述Linux 的安全性
用户ID(UID)是创建用户时分配的用户ID。
7.1.1文件路径:/etc/passwd文件
用来存放用户的登录名匹配到对应的UID值。其中root是系统的管理元分配的固定UID值是0。还有很多系统账户。因为后台的每一个应用都需要用一个系统用户账户登录到linux系统上。而且500以下的的UID值全部为系统账户值。部分/etc/passwd信息。


7.1.2/etc/shadow文件、7.1.3添加新用户、7.1.4删除用户。其余本小节内容略去,见书上126页。
7.1.5修改用户,书上130页(略去本小节内容)

7.2使用Linux用户组
7.2.1/etc/group文件
每个组都有其组ID叫做GID。同样也是低于500的用户值。添加一个用户到某个组首先要先创建组。
7.2.2创建新的组

还可以这样来创建

创建了一个组叫做shared,并且添加两个组员rich和test。这里来使用usermod -G会将组员添加到组里面面。组关系要在用户登出后重新登录才可以生效。
7.2.3修改组
使用groupmod来修改组的GID和组名称。

7.3理解文件权限
7.3.1使用文件权限符

解释一下符号意思:
|
-代表文件 |
r表示可读 |
|
|
d代表目录 |
w表示可写 |
|
|
l代表链接 |
x表示对象是可执行的 |
|
|
c代表字符型设备 |
||
|
b代表块设备 |
||
|
n代表网络设备 |

还有就是,对象的属主的权限、组员的权限、其他用户的权限,在这里文件myprog有下面三组权限,用户和用户组都为rich。-表示没有这个权限。
7.3.2默认文件权限
umask命令用来设置所创建文件的和目录默认权限。例子如下所示:

下面说明0022的意思。第一位为粘着位,后三位为表示文件或者目录对应的mask八进制值。

umask是掩码。文件全权限值为666(读写权限),目录是777(读、写、执行权限)
umask值====文件(目录)权限---八进制的umask值
7.4改变安全性设置(修改文件的或者目录的属主、组及目录的执行权限)
7.4.1改变权限
使用chmod命令改变文件或者目录的安全性设置。
chmod options mode file
方法一:eg:$ chmod 760 newfile

这里和umask可不一样。
方法二:在符号模式下指定权限格式
[ugoa…][+ - =][rwxXstoug…]
第一个方括号定义权限作用的对象
u:用户g:组o:其他a:上述所有
第二个方括号表示在现有的权限基础增加的权限或者移除。
第三个方括号表示作用到设置上的权限。


7.4.2改变所属关系
使用chown改变文件属主,chgrp改变文件的属组。
chown格式:chown options owner[.group] file


这里指用户名和组名一样。
chgrp可以改变文件或者目录的默认属组。

7.5共享文件
通过组来共享文件

SGID可以强制在一个共享目录下创建新文件都属于这个目录的属组。通过chmod来设置。


第八章管理文件系统【这部分暂时忽略】
8.1 linux文件系统
最流行的文件系统是ext3和ext4
8.2 操作文件系统
8.3逻辑卷管理
第九章安装软件程序
9.1包管理基础
PMS数据库记录了这个包括系统上安装了什么软件包、每个包安装了什么文件、每个已安装的软件包的版本。
9.2基于debian的系统
9.2.1aptitude管理软件包
打开方式:shell中输入aptitude,按下回车
显示某个特定包的详细信息aptitude show package_name ,这些信息来源系统未安装的包,来源于软件仓库。

看到某个特定软件包相关的所有文件的列表。使用dpkg,会显示软件包的全部文件。
dpkg -L ,package_name
还可查找某个特定文件属于那个软件包。
dpkg –search absolute_file_name..必须使用绝对文件路径

9.2.2用aptitude安装软件包
安装软件,首先要确定准备安装的软件包名称,使用aptitude。
aptitude search package_name
搜索完了就该安装了。
使用:aptitude install package_name 命令
eg:sudo aptitude install package_name
9.2.3使用aptitude更新软件
利用aptitude safe-upgrade
也可以使用 aptitude full/dist-upgrade后两个命令不会检查包与包之间的依赖关系。
9.2.3用aptitude卸载软件
要想只删除软件包而不删除数据和配置文件,可以使用aptitude的remove选项。要删除软件包和相关的数据和配置文件,可用purge选项。
$ sudo aptitude purge wine

查看是否删除,可以使用search
9.2.5 aptitude仓库【略】
9.3基于Red Hat的系统
9.3.1列出已安装包
yum list installed
通过一条简单的命令查看包是否已安装
# yum list xterm
如果需要找出系统上的某个特定文件属于哪个软件包。yum provides file_name
yum会分别查找三个仓库:base、updates和installed。从其中两个仓库中得到的答案都是:该文件是yum软件包提供的!
9.3.2用yum安装软件
yum install package_name
9.3.3 用yum 更新软件
要列出所有已安装包的可用更新,输入如下命令:
yum list updates
9.3.4 用yum 卸载软件
需要决定是否保留软件包的数据和配置文件。
只删除软件包而保留配置文件和数据文件,就用如下命令:
yum remove package_name
要删除软件和它所有的文件,就用erase选项:
yum erase package_name
9.3.5 处理损坏的包依赖关系
有时在安装多个软件包时,某个包的软件依赖关系可能会被另一个包的安装覆盖掉。这叫作损坏的包依赖关系(broken dependency)。
如果系统出现了这个问题,先试试下面的命令:
yum clean all
然后试着用yum命令的update选项。有时,只要清理了放错位置的文件就可以了。
如果这还解决不了问题,试试下面的命令:
yum deplist package_name
这个命令显示了所有包的库依赖关系以及什么软件可以提供这些库依赖关系。一旦知道某个包需要的库,你就能安装它们了。
如果这样仍未解决问题,还有最后一招:
yum update --skip-broken
--skip-broken选项允许你忽略依赖关系损坏的那个包,继续去更新其他软件包。
第十章使用vim
10.1 vim编辑器
10.1.1 检查vim软件包
$ alias vi
-bash: alias: vi: not found
$
$ which vi
/usr/bin/vi
$
$ ls -l /usr/bin/vi
lrwxrwxrwx 1 root root 20 Apr 22 12:39
/usr/bin/vi -> /etc/alternatives/vi
$
$ ls -l /etc/alternatives/vi
lrwxrwxrwx 1 root root 17 Apr 22 12:33
/etc/alternatives/vi -> /usr/bin/vim.tiny
$
$ ls -l /usr/bin/vim.tiny
-rwxr-xr-x 1 root root 884360 Jan 2 14:40
/usr/bin/vim.tiny
$
$ readlink -f /usr/bin/vi
/usr/bin/vim.tiny
安装一个vim基础包
$ sudo apt-get install vim
10.1.2 vim基础
$ vim myprog.c 启动vim编辑器
两种操作模式:普通模式和插入模式
按下i即可进入插入模式



10.1.3编辑数据
插入模式下,向缓冲区插入数据。

10.1.4 复制和粘贴
dd删除一行数据
复制命令y(yank)
yw复制一个单词,y$表示复制到行尾
复制后把光标移动到想要粘贴的地方,然后按下p即可。

10.1.5查找和替换
按下/,光标会换到消息行,输入要查找的文本后,按下回车键。

--------------------------以下为预备役-----------------------------------
grep:搜索文本文件
grep -n 显示匹配行及行号
grep -v 显示不包含匹配文本的所有行(取反的意思)
grep -i 或略大小写
grep ^a 行首,搜寻以a开头的行
grep ke$ 行尾,搜寻ke结束的行
六、其他(暂时缺少)【看视频!!】
1、echo
2、> 输出覆盖原有的内容、>>、表示追加到已有文件的末尾
3、管道 |
第二节远程管理常用命令
一、关机/重启
shutdown
shutdown -r 重新启动 eg:shutdown -r now 重新启动操作系统
shutdown now 现在关机
shutdown 22:33在22:33关机
shutdown +10 系统10min后关机
shutdown -c 取消之前的关机计划
二、查看配置网卡信息
ifconfig:(congfigure a network interface):查看/配置计算机网卡信息
ping 11.111.11.11 检测目标ip地址是否正常
ping 127.0.0.1 检测本地网卡工作是否正常
三、远程登陆和复制文件
ssh 用户名@ip (secure shell) ---【关机/重新启动】
scp(secure copy)用户名@ip:文件名或路径用户名@ip:文件名或路径---【远程复制文件】
(1)域名、端口号
服务器端口号
SSH服务器 22
Web服务器 80
HTTPS 443
FTP服务器 21
(2)SSH客户端的简单使用
ssh [-p port] user@remote
user:远程机器上的用户名,不指定用户默认是当前用户
remote:远程机器的地址。可以是IP/域名,或者是别名
port:SSH Server是监听端口,不指定默认是22
如果远程端口不是22,则使用-p来指定端口
三、scp (secure copy) 远程拷贝文件
指定端口是大写的 -P
scp -r 选择传送文件夹
第三节用户权限相关命令
一、基本概念
chmod:修改用户/组对文件/文件夹的权限
chmod +/-rwx 文件名|文件夹名
超级用户:root用户系统的维护和管理,具有所有权限
sudo (su:substitute user),表示另外一个用户的身份,默认是root,使用sudo需要输入密码,5分钟内有效,超时需要重新输入
二、组管理
创建组和删除组需要用到sudo
groupadd添加组
groupdel删除组
cat/etc/group 确认组信息
chgrp -R 组名文件/目录名递归修改文件/目录的所属组
组信息保存在/etc/group
/etc是用来保存系统配置信息的目录
-----------------这里停止,原文中10--03
三、用户管理
创建用户/删除用户/修改其他用户密码都需要使用sudo进行
四、修改权限
浙公网安备 33010602011771号