一、Linux是多用户多任务的分时操作系统
多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。
多用户多任务操作系统允许多个用户共享使用同一台计算机的资源,即在一台计算机上连接许多台终端机,终端机可以没有自己的CPU与内存,只有键盘与显示器,每个用户都通过各自的终端机使用这台计算机的资源。
操作系统管理多个用户的请求和多个任务。大多数系统都只有一个CPU和一个主存,但一个系统可能有多个二级存储磁盘和多个输入/输出设备。操作系统管理这些资源并在多个用户间共享资源,当一个用户提出一个请求时,会造成一种假象,好象系统只被该用户独自占用。而实际上操作系统监控着一个等待执行的任务队列。操作系统根据每个任务的优先级为每个任务分配合适的时间片,每个时间片大约都有零点几秒,虽然看起来很短,但实际上已经足够计算机完成成千上万的指令集。每个任务都会被系统运行一段时间,然后挂起,系统转而处理其他任务;过一段时间以后再回来处理这个任务,直到某个任务完成,从任务队列中去除。
那么,多个用户之间如何实现资源的分配:Linux进程将拥有一套完整的资源集,所有的进程共享一套计算机硬件资源。内存采取虚拟内存技术,虚拟内存和物理内存之间存在一一映射;CPU采用分时(时间片 )技术;I/O设备采用I/O复用技术(类似于多道程序系统原理)等等。
二、关于GNU计划与开源协议
(一)GNU计划
又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带一份《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。即“反版权”(或称Copyleft)概念
GNU包含3个协议条款:GPL,LGPL,GFDL
(二)最常用的几种开源协议
- GPL (GNU General Public License) :GNU通用公共许可协议
- LGPL (GNU Lesser General Public License) :GNU宽通用公共许可协议
- BSD (Berkeley Software Distribution) :伯克利软件分发许可协议
- MIT (Massachusetts Institute of Technology):MIT许可协议之名源自麻省理工学院,又称“X许可协议”或“X11许可协议”
- Apache (Apache License) :Apache许可协议
- MPL (Mozilla Public License) :Mozilla公共许可协议
1.GPL
GNU通用公共许可协议是一个被广泛使用的自由软件许可协议条款,GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利:
- 可自由复制
你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。 - 可自由分发
在你的网站提供他人下载,拷贝到U盘送人。 - 可以用来盈利
你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。 - 可自由修改
如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
Linux就是采用了GPL协议。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
2.LGPL
GNU 还有另外一种协议,叫做GNU宽通用公共协议,它对产品所保留的权利比 GPL 少,总的来说,LGPL 适合那些用于非 GPL 或非开源产品的开源类库或框架。因为GPL要求包含有部分GPL授权代码的软件以GPL方式发布,这样开发者就无法在收费的专属软件里使用GPL授权代码。 LGPL正好解决了这一问题:它不要求其它使用LGPL授权代码的软件以LGPL方式发布。注意:LGPL有一特点是LGPL软件可以被转换成GPL。这种特性对于在GPL库或应用程序中直接使用LGPL程序有一定程度之帮助。
3.BSD
BSD 在软件分发方面的限制比别的开源协议(如 GNU GPL)要少。该协议有多种版本,最主要的版本有两个,新 BSD 协议与简单 BSD 协议,这两种协议经过修正,都和 GPL 兼容,并为开源组织所认可。
新 BSD 协议在软件分发方面,除需要包含一份版权提示和免责声明之外,没有任何限制。另外,该协议还禁止拿开发者的名义为衍生产品背书,但简单 BSD 协议删除了这一条款。
4.MIT
MIT 协议可能是几大开源协议中最宽松的一个,核心条款是:该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版 权和许可提示。
这意味着:
你可以自由使用,复制,修改,可以用于自己的项目。
可以免费分发或用来盈利。
唯一的限制是必须包含许可声明。
MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。
5.Apache
Apache 协议 2.0 和别的开源协议相比,除了为用户提供版权许可之外,还有专利许可,对于那些涉及专利内容的开发者而言,该协议最适合。
Apache 协议还有以下需要说明的地方:
- 永久权利
一旦被授权,永久拥有。 - 全球范围的权利
在一个国家获得授权,适用于所有国家。 - 授权免费,且无版税
前期,后期均无任何费用。 - 授权无排他性
任何人都可以获得授权 - 授权不可撤销
一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。
分发代码方面包含一些要求,主要是,要在声明中对参与开发的人给予认可并包含一份许可协议原文。
6.MPL
MPL既是得到自由软件基金会承认的自由软件许可证,也是得到开放源代码促进会承认的开源软件许可证。MPL允许在其授权下的源代码与其他授权的文件进行混合,包括私有许可证。但在MPL授权下的代码文件必须保持MPL授权,并且保持开源。这样的条款让MPL既不像MIT和BSD那样允许派生作品完全转化为私有,也不像GPL那样要求所有的派生作品,包括新的组件在内,全部必须保持GPL。通过允许在派生项目中存在私有模块,同时保证核心文件的开源,MPL同时激励了商业及开源社区来参与帮助开发核心软件。
使用MPL授权的软件并不受专利的限制,其可以自由使用,修改,并可自由的重新发布。带有专利代码的版本仍然可以使用,转让,甚至出售,但未经许可则不能修改代码。此外,MPL并不授予用户对于开发者商标的使用权。
为了满足MPL的条款限制,用户必须负担一些“责任”,主要是关于散发使用MPL授权的软件。用户必须确保重新散发的软件所有源代码均以MPL授权,即使是以可执行文件的方式提供或是与其他使用专有软件授权的源代码结合也一样。但若跟以GNU通用公共许可协议、GNU宽通用公共许可证、Affero通用公共许可证授权的源代码结合则是例外。此时开发者则可选用以上三种更加严格的条款来授权
三、获取命令帮助
(一)内部命令与外部命令
命令必须遵循特定格式规范: windows上都是exe, msi, 对于linux而言是ELF格式
[root@admin ~]# file /bin/ls
/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=aaf05615b6c91d3cbb076af81aeff531c5d7dfd9, stripped
#linux标准基础linux standards base,可执行的,X86-64的版本是1 ,动态连接的可执行文件
注意:这个路径一定要给一个可执行文件的路径,不是随便给的,file
是一个命令,用来查看一个文件的内容格式的类型
简单来说,在linux系统中有存储位置的命令为外部命令;没有存储位置的为内部命令,可以理解为内部命令嵌入在linux的shell中,所以看不到。
type命令:来判断到底为内部命令还是外部命令
[root@admin ~]# type help #查看help命令的内外类型
help is a shell builtin #可以看到help为内部命令
[root@admin ~]# type passwd #查看passwd这条命令是否存在
passwd is /usr/bin/passwd #可以看到passwd的存储位置,因此存在且为外部命令
[root@admin ~]# type cd
cd is a shell builtin #cd为内部命令
shell程序是独特的程序,负责解析用户提供的命令;
给shell一个命令后,shell会按照空格切割成片,按照特定格式和方式去解析
Shell在解析命令的时候,第一个功能就是要想办法找到这个命令,我们键入在最左侧的命令的是如何找到的,在内部提供了一个环境变量,在众多的环境变量中有一个叫做PATH.
环境变量:
PATH:从哪些路径中查找用户键入的命令字符串所对应的命令文件;
[root@admin ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#查找次序:自左而右;
#例如: ls lss报错
#如果碰巧在第一个路径,第三个路径下都有ls 那么以第一个为准
#这个指的是外部命令,才是有执行路径的
#PATH:从哪些路径中查找用户键入的命令字符串所对应的命令文件;
(二)获取帮助的途径
1、help命令
功能:help命令用于显示shell内部命令的帮助信息。
help命令只能显示shell内部命令的帮助信息,而linux系统中绝大多数命令是外部命令,所以help命令的作用非常有限。而对于外部命令的帮助信息可以使man命令或者info命令查看。
格式:
查看内部命令的用法:help
[参数] 内部命令
常用选项:
-d 输出每个命令的简短描述
-s 输出短格式的帮助信息
-m 以伪man手册的格式显示帮助信息
①显示cd命令的帮助信息
[root@admin bin]# help cd
②以短格式显示cd命令的帮助信息
[root@admin ~]# help -s cd
cd: cd [-L|[-P [-e]]] [dir]
③输出cd命令的简短描述
[root@admin ~]# help -d cd
cd - Change the shell working directory.
④ 以伪man手册格式输出cd命令的帮助信息
[root@admin bin]# help -m cd
2、"- -help"选项
大多数外部命令都可以使用–help来获取帮助,如果这个命令没有–help选项,则会显示简单的命令
格式:command --help
#查看外部命令cat的用法
[root@admin bin]# cat --help
3、man命令
以全屏显示在线帮助
格式:man command
热键:q键退出,方向键移动光标
翻屏:
空格键:向文件尾翻一屏;
b: 向文件首部翻一屏;
Ctrl+d:向文件尾部翻半屏;
Ctrl+u:向文件首部翻半屏;
回车键:向文件尾部翻一行;
k: 向文件首部翻一行;
G:跳转至最后一行;
#G: 跳转至指定行;
1G:跳转至文件首部;
文本搜索:
/keyword:从文件首部向文件尾部依次查找;不区分字符大小写;
?keyword:从文件尾部向文件首部依次查找;
n: 与查找命令方向相同;
N: 与查找命令方向相反;
一般用man查看一个命令的帮助文档的时候,可以通过whatis
命令查看一下该命令在man帮助文档中的入口,一条命令可能有多个man手册页入口(注:在使用whatis的时候如果linux计算机开机70分钟,那么你可以自己随意使用了,如果linux计算机刚刚启动,那么需要执行makewhatis命令来编译一下,否则无法使用whatis命令)
对应入口数字所表示的含义了:
1:用户指令 2:系统 3:程序库 4:设备 5:文件系统
6:游戏 7:其它 8:系统指令 9:内核指令
一般用到的项为:1,5,8
格式:whatis command
[root@admin ~]# whatis rm
rm (1p) - remove directory entries
rm (1) - remove files or directories
[root@admin]# whatis passwd
passwd (1) - update user's authentication tokens
passwd (5) - password file
passwd [sslpasswd] (1ssl) - compute password hashes
再用man查询rm或者passwd命令的时候,可以输入:
man 5 passwd //在入口为文件系统去查询passwd的帮助文档
man 1 passwd //在入口为用户指令去查询passwd的帮助文档
man 1/1p rm
也可以直接写:
man rm //常用写法
man passwd
4、info命令
另一种在线帮助,和man功能类似,都加详细,有不同主题之间的中转功能
格式:info command
[root@admin ~]# info rm //rm的详细信息
[root@admin ~]# info passwd //查看命令的详细信息
#q键退出,热键同man命令下的
一般用help ,–help,足够man来补充,info用的很少
5、百度,谷歌
6、官方手册
http://docs.redhat.com Enterprise Linux (5/6/7)
http://www.mysql.com docs
四、 Linux文本编辑工具 vi/vim
vi编辑器是所有Unix及Linux系统下标准的编辑器,它相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。对Unix及linux系统的任何版本,vi编辑器是完全相同的。
(一)vi/vim编辑器
①vi是Visual Interface的缩写,即 可视化接口
②vim是vi iMprove的缩写,即 vi的增强版(具有语法着色功能),在后面的实例中将介绍Vim的使用。
为什么学vi?
1)所有的Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器则不一定会存在;
2)很多个别软件的编辑接口都会主动呼叫 vi (例如未来会谈到的 crontab, visudo, edquota 等指令);
3)vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法癿正确性,方便程序设计;
4)因为程序简单,编辑速度相当快速。
系统自带教程:vimtutor
[root@admin ~]# vimtutor
在我们最小化安装的系统中,默认是没有安装vim编辑器的,我们需要安装后才能使用
[root@admin ~]# yum install vim -y
#这里要注意的是在安装前建议先执行命令 yum update 更新系统包,防止系统包与仓库下载的包之间不匹配
(二) vim的模式及模式间切换
简单来说vim的模式有3种,命令模式、输入模式、末行模式。如果再细分可以分为5种,多一个可视化模式和查询模式,实际上这两种包括在末行模式中了。
下图为各模式之间的切换:
1.进入命令模式
当使用vim/vi编辑器打开一个文件后便进入命令模式。
例如:[root@admin ~]# vim /etc/passwd
命令模式下的热键用法:
注:在命令模式下,除了使用方向键上下左右移动光标外,还可以使用h(向左移动)j(向下移动)k(向上移动)l(向右移动)来移动光标
2.命令模式进入到 输入模式
从命令模式进入到 输入模式,以何种方式进行输入:
- 新增 (append)
a键 :从光标所在位置後面开始新增资料,光标後的资料随新增资料向後移动。
A键: 从光标所在列最後面的地方开始新增资料。 - 插入 (insert)
i键: 从光标所在位置前面开始插入资料,光标後的资料随新增资料向後移动。
I 键:从光标所在列的第一个非空白字元前面开始插入资料。 - 开始 (open)
o 键:在光标所在列下新增一列并进入输入模式。
O键: 在光标所在列上方新增一列并进入输入模式
3.输入模式切换到末行模式:
无法直接从输入模式到末行模式。先按下 Esc键后切换到命令模式,这时输入:便进入末行模式。再根据你需要进行的操作输入以下命令:
而后回车执行,便完成操作,退出vim编辑器
4.末行模式到命令模式
只需删除所有末行模式输入的命令即可
5.输入模式到命令模式
按Esc键即可
6.末行无法直接到输入模式
必须先从末行模式到命令模式,再从命令模式到输入模式
7.命令模式到末行模式
先输入:再根据需要输入对应命令
五、shell之bash
(一)什么是shell?
管理整个计算机硬件其实是操作系统的内核,这个内核是需要被保护的。所以我们一般用户就只能通过shell来跟内核沟通,以让内核完成我们所想要实现的任务。
在讨论shell之前,先来了解一下计算机的运行情况!举个例子:当你要计算机播放出音乐的时候,计算机需要什么:
- 硬件:当然就是需要你的硬件有声卡设备,否则怎么会有声音
- 内核管理:操作系统的内核可以支持这个芯片组,当然还需要提供芯片的驱动程序
- 应用程序:需要用户输入发出声音这个命令
- 这就是基本的输出声音所需要的步骤,也就是说,你必须要输入一个命令,硬件才会通过你执行的命令来工作。那么硬件如何知道你执行的命令?那就是内核(kernel)的管理工作了,也就是说,我们必须要通过shell将我们输入的命令与内核沟通,好让内核可以以控制硬件来正确无误地工作。
操作系统其实是一组软件,由于这组软件在控制整个硬件与管理系统的活动监测,如果这组软件能被用户随意操作,若用户应用不当,将会使得整个系统崩溃,因为操作系统管理的就是整个硬件功能,所以当然不能够随意被一些没有管理能力的终端用户随意使用。
可我们总是需要让用户使用操作系统的,所以就有了在操作系统上面发展的应用程序。用户可以通过应用程序来指挥内核,让内核完成我们所需要的硬件任务。根据操作系统图例来看,我们发现应用程序其实就是在最外层,就如同鸡蛋的外壳一样,因此这个被称为壳程序(shell)
也就是说,只要能够操作应用程序的软件都能称为壳程序。狭义的壳程序指的是命令行方面的软件,包括接下来要讲的bash等,广义的壳程序则包括图形用户界面模式的软件。
总结:Shell其实是一个有特殊功能的程序,主要是提供用户与内核交互操作的一个接口。它的位置介于用户界面和内核之间,工作流程是接收用户输入的命令并且进行解释(转换为计算机可以理解的机械码),然后将命令送入内核去执行。我们一般通过ssh远程登录系统并且打开shell,也有一些是直接在图形界面上直接打开终端的方式打开shell。后者主要用于ubuntu系统中。
(二)都有哪些shell?
目前流行的shell有sh、ash、bash、ksh、csh、zsh等,使用不同的shell的原因在于它们各自都有自己的特点。
bash是目前大多数Linux系统默认使用的shell 全名是BourneAgain Shell,一共有40个命令。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
用户可以通过查看 /etc/shells 文件中的内容来查看自己主机当中当前有哪些种类的Shell,命令如下(以下是在 CentOS Linux 7.8中查看信息的结果):
[root@admin ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
可以看到有两个shell,一个是bash(bash是sh的增强版本),一个是sh
使用下面的命令来查看Linux系统当前正在使用的Shell 类型:
echo $SHELL
[root@admin ~]# echo $SHELL
/bin/bash
(三)Linux bash基础特性
1.补全
命令补全:
shell程序在接收到用户执行命令的请求,分析完成之后,最左侧的字符串会被当作命令; 查找内部命令; 根据PATH环境变量中设定的目录,自左而右逐个搜索目录下的文件名;
给定的打头字符串如果能惟一标识某命令程序文件,则直接补全; 不能惟一标识某命令程序文件,再击[Tab]键一次,会给出列表
如果我们忘记了某个命令的全拼,只知道开头几个字母,那就可以使用命令补全功能。敲出开头几个字母,敲击一次[Tab]键,如果能唯一标识则直接补全,不能直接补全那就再敲击一次[Tab]键,会列出以这几个字母开头的所有命令
比如passwd这个命令,我们只记得是pa开头,敲击一次未补全,敲击两次就有如下效果:
[root@admin ~]# pas
passwd paste
路径补全:
和命令机制不一样。在给定的起始路径下,以对应路径下的打头字串来逐一匹配起始路径下的每个文件:
[Tab]一次,如果能惟一标识,则直接补全;
否则,再一次[Tab],会给出列表;
2.快捷键
ctrl+c 终止前台运行的程序 //ping 192.168.0.152
ctrl+d 退出 等价exit
ctrl+l 清屏
ctrl+a 光标移到命令行的最前端 //编辑命令
ctrl+e 光标移到命令行的后端 //编辑命令
ctrl+u 删除光标前所有字符 //编辑命令
ctrl+k 删除光标后所有字符 //编辑命令
ctrl+r 搜索历史命令,利用关键词
3.命令历史
历史命令:shell进程会在其会话中保存此前用户提交执行过的命令
作用:提高工作效率;查看系统上执行过的命令;可以根据历史命令来排查故障电脑可能出现问题的原因;也可用于监控用户的操作行为并记录下来便于审计。
可以通过输入history
来查看之前输入过的命令:
当然,历史命令也存在一定的安全隐患:如果用户执行过这样的命令echo "123" | passwd --stdin dxk
(明文修改用户dxk的密码)这样就保存在历史命令中,其他人可以通过查看历史命令查看到这样的信息,这是不安全的。那么我们可以通过改变历史命令的保存容量避免这样的隐患。
[root@admin ~]# history
我们可以看到之前输入过的命令都被一一记录下来并且是按照用户的执行顺序依次记录的。但是这样查看只能看到本次开机之前使用过的命令,而想看到我们这次开机后使用过的命令就可以使用键盘上的方向键:上下键来查看,而我们本次开机后所有的命令将在下次开机后使用history命令才能查看到(即历史命令不会立即写入.bash_history文件中,而是在bash退出时才会写入,所以我们通过history
查看到的历史命令都是登陆本次bash之前所记录的)
我们发现在每次退出登陆又登陆进去时,这些历史命令都会存在,不会消失,说明这些历史命令并不是在内存中存储的,它一定是在外存上的某个文件之中,那么究竟是在哪个文件中?同时我们发现对于操作同一主机的不同用户所保存的历史命令都不一样,这又是为什么?保存历史命令的容量是多少,怎么查看或修改 呢?
因为每次查看历史命令都是只能查看到当前用户所执行的以往的命令,那么保存这些历史命令的文件对于每个用户都会有一个,各个用户之间分别有自己的保存文件。
①历史命令存储于各个用户家目录下的.bash_history文件中
[dxk@admin ~]$ cat /home/dxk/.bash_history
[root@admin ~]# cat /root/.bash_history
②查看历史命令的保存容量(HISTSIZE环境变量)
[root@admin ~]# echo $HISTSIZE
1000 #系统默认是保存1000条历史命令
③修改历史命令的保存容量
#修改历史命令的保存容量为2000
[root@admin ~]# HISTSIZE=2000
但是这样修改只是临时的,重启服务器或退出重新登陆后,就会失效又还原到系统默认值1000。
要想一直生效,就和配置PS1变量一样,要将修改后的HISTSIZE变量写入到环境变量配置文件中。具体如何操作参照PS1变量的设置。
注意:如果只是对当前用户生效那么就需要写入到当前用户家目录下的.bashrc文件中,如果是要对所有用户生效就要写道/etc/profile文件中
④history命令用法:
⑤历史命令添加时间戳
历史命令的默认显示方式为:序号+命令,如果我们还想看到每条命令执行的 时间要怎么做呢?
将命令HISTTIMEFORMAT="%Y-%m-%d &H:%M:%S "
写入到环境变量文件中即可。(这里的时间格式可以自己定,%T的显示效果和 &H:%M:%S 是一样的 ,即也可以这样写HISTTIMEFORMAT="%Y-%m-%d %T ")
这里我写入到/etc/profile文件中,对所有用户都生效
编辑此文件将HISTTIMEFORMAT="%Y-%m-%d &H:%M:%S "
写入并保存:
[root@admin ~]# vim /etc/profile
pathmunge /usr/local/sbin
else
pathmunge /usr/local/sbin after
pathmunge /usr/sbin after
fi
HOSTNAME=`/usr/bin/hostname 2>/dev/null`
HISTSIZE=1000
HISTTIMEFORMAT="%Y-%m-%d %T "
if [ "$HISTCONTROL" = "ignorespace" ] ; then
export HISTCONTROL=ignoreboth
else
export HISTCONTROL=ignoredups
fi
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
@
:wq
加载此文件:
[root@admin ~]# source /etc/profile
输入命令history
查看效果:
203 2020-07-07 17:43:46 history
204 2020-07-07 17:49:57 vim /etc/profile
205 2020-07-07 17:51:37 source /etc/profile
206 2020-07-07 17:53:03 history
[root@admin ~]#
⑥实例
功能:实时追踪用户行为审计
第一步:将以下实现该功能的代码写入环境变量文件/etc/profile文件中
if [ ! -d /usr/local/domob/record/${
LOGNAME} ]
then
mkdir -p /usr/local/domob/record/${
LOGNAME}
chmod 300 /usr/local/domob/record/${
LOGNAME}
fi
export HISTORY_FILE="/usr/local/domob/record/${LOGNAME}/.bash_history" export PROMPT_COMMAND='{ date "+%Y-%m-%d %T ##### $(who am i |awk "{print \$1\" \"\$2\" \"\$5}") #### $(history 1 | { read x cmd; echo "$cmd"; })"; } >>$HISTORY_FILE'
保存并退出
第二步: 加载此文件
source /etc/profile
第三步:设置权限
chmod 777 /usr/local/domob/records/
chmod +t /usr/local/domob/records/
效果:将所有用户以 ” 用户名 +使用的命令+命令使用所对应时间+IP地址 “ 这样的格式将使用过的命令保存在/usr/local/domob/record/${LOGNAME}
文件中,完成所有用户的监控和审计功能