当时学习《鸟哥的Linux私房菜-基础学习篇》记录的点

时间:2019-05-20 15:26:27   收藏:0   阅读:134

1.当执行一个指令的时候,举例来说【ls】,系统会依照PATH的设定去每个PATH定义的目录下搜寻文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先搜寻到的同名指令先被执行!

2.使用echo $PATH可以查看那些目录被定义了。echo 有【显示、印出】的意思,而PATH 前面加上的 $ 表示后面接的是变量。

3.shell script 是利用shell 的功能所写的一个【程序program】,这个程序是使用纯文本文件,将一些shell的语法与指令(含外部指令)写在里面,搭配正规表示法、管线命令与数据流重导向等功能,已达到我们所想要的处理目的。

4.干嘛学些shell scripts (1)自动化管理的重要依据;每天要进行的任务有:查询登入档、追踪流量、监控用户使用主机状态、主机各项硬设备状态、主机软件更新查询等等。(2)追踪与管理系统的重要工作。(3)简单入侵检测功能。(4)连续指令单一化。(5)简单的数据处理。(6)跨平台支持与学习历程较短。

5.(1)指令的执行时从上而下、从左到右的分析与执行;(2)指令、选项与参数间的多个空白都会被忽略掉;(3)空白行也将被忽略掉,并且【tab】按键所推开的空白同样视为空格键;(4)如果读取到一个Enter符号(CR),就尝试开始执行改行(或该串)命令;(5)至于如果一行的内容太多,则可以使用【\Enter】来延伸至下一行;(6)【# 】可作为批注!任何加在# 下面的资料将全部被视为批注文字而被忽略。

6.养成良好的script 撰写习惯,在每个script的文件头除记录好:(1)script的功能;(2)script的版本信息;(3)script的作者与联系方式;(4)script的版权宣告方式;(5)script的History(历史记录);(6)script内特殊的指令,使用【绝对路径】的方式来下达;(7)script运转时需要的环境变量预先宣告与设定;(8)撰写script 的工具最好使用vim 而不是vi,因为vim会有额外的语法检验机制。此外,在较为特殊的程序代码部分,建议加上批注说明。

7.利用判断符号 []。因为中括号用在很多地方,包括通配符与正规表示法等等,所以如果要在bash的语法当中使用中括号作为shell的判断式时,必须要注意中括号的两端需要有空格符来分割。(1)在中括号[]内的每个组件都需要有空格键来分割;(2)在中括号内的变数,最好都以双引号括起来;(3)在中括号内的变数,最好都以单或者双引号括起来。

8.条件判断式 (1)利用if…then ;(2)利用case…esac 判断;(3)利用funcation功能。

9.循环(loop)(1)while do done,until do done(不定循环);(2)for…do…done(固定循环);(3)for…do…done 的数值处理。

10.每个登入的使用者至少都会取得两个ID,一个是使用者ID(User ID,简称UID)、一个是群组ID(Group ID,简称GID)。

11.当你输入账号后,系统是怎么处理的那? (1)先找寻/etc/passwd 里面是否有你输入的账号?如果没有则跳出,如果有的话则将该账号对应的UID与GID(在/etc/group中)读出来,另外,该账号的家目录与shell设定也一并读出;(2)再来则是核对密码表,这是Linux会进入 /etc/shadow 里面找出对应的账号与UID,然后核对一下你刚输入的密码与里头的密码是否相符。(3)如果一切都OK的话,就会进入shell 控管的阶段。

12. /etc/passwd 文件结构  每一行都代表一个账号,有几行就代表有几个账号在你的系统中。不过需要特别留意的是,里头有很多账号本来就是系统正常运作所必须的,我们可以简称为系统账号,例如 bin.daemon,adm,nobody等等,这些账号请不要随意的杀掉。

13.新增与移除使用者:useradd,相关配置文件,passwd,usermod,userdel。

14.使用了useradd 建立了账号之后,在预设的情况下,该账号是暂时被封锁的,也就是说,该账号是无法登入的。直接给他设定新密码就好了。

15.Linux 开发商先在固定的硬件平台与操作系统平台上面将需要安装或升级的软件编译好,然后将这个软件的所有相关文件打包成为一个特殊格式的文件,在这个文件内还包含了预先侦测系统与相依软件的脚本,并提供记载该软件提供的所有文件信息等。最终将这个软件文件释放出来。客户端取得这个文件后,只要透过特定的指令来安装,那么该软件文件就会依照内部的脚本来侦测相依的前驱软件是否存在,若安装的环境符合要求,就会开始安装。安装完成后还会将该软件的信息写入软件管理机制中,以达成未来可以进行升级、移除等动作。

16.RPM 全名 是【Red-Hat Package Manager】简称则为RPM。顾明思议,当初这个软件管理的机制是由Red Hat 这家公司发展出来的。RPM 是以一种数据库记录的方式来将你所需要的软件安装到你的Linux系统的一套管理机制。

17.RPM 最大的特点就是将你要安装的软件先编译过,并且打包成为RPM机制的包装文件,透过包装好的软件里头默认的数据库记录,记录这个软件要安装的 时候必须具备的相依属性软件,当安装在你的Linux主机时,RPM会先依照软件里头的数据查询Linux主机的相依属性软件是否满足,如满足则予以安装,若不满足则不予安装。并且安装的时候将软件的信息写入RPM的数据库中,以便未来的查询、验证和反安装。

18.SRPM 是Source RPM 的意思,也就是这个RPM文件里面含有原始码。特别注意的是,这个SRPM 所提供的软件内容【并没有经过编译】,它所提供的是原始码。

19.SRPM的扩展名是以***.src.rpm 这种格式来命名的。

20.SRPM 虽然内容是原始码,但是他仍然还有该软件所需要的相依性软件说明、以及所有RPM文件所提供的数据。同时,他与RPM不同的是,他也提供了参数配置文件(就是configure 与makefile).所以,如果我们下载的是SRPM,那么要安装该软件时,就必须要(1)先将已该文件以RPM管理的方式编译,此时SRPM会被编译成为RPM文件;(2)然后将编译完成的RPM文件安装到Linux系统中。

21.RPM 文件必须要在相同的Linux 环境下才能够安装,而SRPM既然是原始码的格式,自然我们就可以透过修改SRPM内的参数配置文件,然后重新编译产生能适合我们Linux环境的RPM文件。

22.透过档名可以知道 软件名称 – 版本信息 –释放版本次数—操作硬件平台。

23.RPM 有以下的有点:(1)RPM内含已经编译过的程序与配置文件等数据,可以让用户免除重新编译的困扰;(2)RPM 在安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;(3)RPM 文件本身提供软件版本信息、相依属性软件名称、软件用途说明、软件所含文件等信息,便于了解软件;(4)RPM 管理的方式使用数据库记录RPM文件的相关参数,以便于升级、移除、查询与验证。

24.YUM 机制:CentOS (1)先将释放出来的软件放置到YUM服务器内(2)然后分析这些软件的相依属性问题,将软件内的记录信息写下来(header)。然后再将这些信息分析后记录成软件相关性的列表。这些列表数据与软件所在的本机或网络位置可以称呼为容器或软件仓库或软件库(repository)。当客户端有软件安装的需求时,客户端主机会主动的向网络上面的yum 服务器的软件库网址下载清单列表,然后透过列表的数据与本机RPM数据库已存在的软件数据相比较,就能够一口气安装所需要的具有相依属性的软件了。

25.所以软件仓库内的列表会记载每个文件的相依属性关系,以及所有文件的网络位置(URL)! 由于记录了详细的软件网络位置,所以有需求的时候,当然就会自动的从网络下载该软件。

26.基本上rpm 这个指令真的就剩下查询与检验的功能,所以,查询与检验还是要学的,至于安装,透过yum就好了。

27.使用RPM来升级很简单,就是以-Uvh 或者-Fvh 来升级即可。-Uvh 后面接的软件即使没有安装过,则系统将予以直接安装;若后面接的软件有安装过旧版,则系统自动更新;-Fvh 如果后面接的软件并未安装到你的Linux 系统上,则该软件不会被安装,亦即只有已安装到你Linux 系统的软件才会被升级。

28.验证(Verify)的功能主要在于提供系统管理员一个有用的管理机制,作用的方式是【使用/var/lib/rpm底下的数据库内容来比对目前Linux系统的环境下的所有软件文件】,也就是说,当你有数据不小心遗失,或者是因为你误杀了某个软件的文件,或者是不小心不知道修改了哪一个软件的文件内容,可以使用这个简单的方法来验证一下原本的文件系统。

29.在Linux系统上面,一个文件能不能被执行看的是有没有可执行的那个权限(具有 x permission),不过,Linux 系统上真正认识的可执行文件其实是二进制文件(binary program)。

30.函式库 就 类似子程序的角色,可以被呼叫来执行的一段功能函数。

31.可以使用make 这个指令的相关功能来进行编译过程的指令简化了。  当执行make 时,make 会在当前的目录下搜寻Makefile(or makefile) 这个文本文件,而Makefile 里面则记录了原始码如何编译的详细信息! make 会自动的判别原始码是否经过变动了。

32.一般来说,侦测程序会侦测的数据大约有低下这些:(1)是否有适合的编译程序可以编译本软件的程序代码;(2)是否已经存在本软件所需要的函式库,或其他需要的相依软件;(3)操作系统平台适合适合本软件,包括Linux的核心版本;(4)核心的表头定义档(header include)是否存在(驱动程序必须要的侦测)。

33.所谓的源代码,其实就是一些写满了程序代码的纯文本文件。

34.由于我们的原始文件有时并非仅只有一个文件,所以我们无法直接进行编译。这个时候就需要先产生目标文件,然后再以连接制作成为binnary可执行文件。

35.gcc 为Linux 上面最标准的编译程序,这个gcc 是由GNU 计划所维护的。

36.make 有这些好处:(1)简化编译时所需要下达的指令;(2)若在编译完成之后,修改了某个原始码文件,则make 仅会针对被修改了的文件进行编译,其他的object file 不会被更动;(3)最后可以依照相依性来更新(update)执行档。

37.事实上很多在Linux平台上面发展的软件的原始码,原本就是以gcc 为底来设计的。

38.一般来说,以Tarball 方式释放出来的软件当中,为了简化编译的流程,通常都是配合前几个小节提到的make 这个指令来依据目标文件的相依性来进行编译的。

39.很多的软件在发展的时候都是直接取用系统核心提供的函式库与include文件的,这样才可以与这个系统兼容。

40.几乎每个软件都会提供联机帮助的服务,那就是 info 与 man 的功能。

41.我们会发现软件的内容大致上是摆在etc,lib,bin,man等目录当中,分别代表【配置文件、函式库、执行档、联机帮助档】。

42.Diff 这个指令 可以将【两个文件之间的差异性列出来】。

43.很多的软件之间都会互相取用彼此提供的函式库来进行特殊功能的运转。例如很多需要验证身份的程序都习惯利用PAM这个某块提供的验证机制来实作,而很多网络联机机制则习惯利用SSL函式库来进行联机加密的机制。

44.函式库依照是否被编译到程序内部而分为动态和静态函式库。

45.静态函式库的特色:(1)扩展名:这类的函式库通常扩展名为libxxx.a的类型; (2) 编译行为:这类函式库在编译的时候会直接整合到执行程序当中,所以利用静态函式库编译成的文件会比较大一些;(3)独立执行的状态:这类函式库的最大优点,就是编译成功的可执行文件可以独立执行,而不需要再向外部要求读取函式库的内容。(4)升级难易度: 虽然执行档可以独立执行,但因为函式库是直接整合到执行档中,因此若函式库升级时,整个执行档必须要重新编译才能将新版的函式库整合到程序中,也就是说,在升级方面,只要函式库升级了,所有将此函式库纳入的程序都需要重新编译。

46.动态函式库的特色:(1) 扩展名:这类函式库通常扩展名为libxxx.so.(2)编译行为:与静态函式库被整个捉到程序中不同的,动态函式库在编译的时候,在程序里面只有一个【指向(Pointer)】的位置而已。也就是说,动态函式库的内容并没有被整合到执行档中,而是当执行档要使用到函式库的机制时,程序才会去读取函式库来使用。由于执行文件当中仅具有指向动态执行函式库所在的指标而已,并不包含函式库的内容。

47.独立执行的状态: 这类型的函式库所编译出来的程序不能被独立执行,因为当我们使用到函式库的机制时,程序才会去读取函式库,所以函式库文件【必须要存在】才行,而且,函式库的【所在目录也不能改变】,因为我们的可执行文件里面仅有【指标】。(4)升级难易度:当函式库升级后,执行档根本不需要进行重新编译,因为执行档会直接指向新的函式库文件。

48.如何判断某个可执行的binnary文件含有什么动态函式库呢?很简单,利用ldd 就可以了。

49.Service几个常见的状态:

*active(running):正有一只或多只程序正在系统中执行。
*active(exited):仅执行一次就正常结束的服务,目前并没有任何程序在系统中执行。
*active(waiting):正在执行当中,不过还在等待其他的事件才能继续处理。
*inactive:这个服务目前没有运转的意思。

50.重启网卡: service network restart

51.直接关闭防火墙

systemctl stop firewalld.service

禁止firewall开机启动

systemctl disable firewalld.service

52.Linux Swap 空间释放

Swap意思是交换分区,通常我们说的虚拟内存,是从硬盘中划分出的一个分区。当物理内存不够用的时候,内核就会释放缓存区(buffers/cache)里一些长时间不用的程序,然后将这些程序临时放到Swap中,也就是说如果物理内存和缓存区内存不够用的时候,才会用到Swap。

主要使用的命令是:

swapoff -a; 和 swapon -a;

注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大

 

  

----个人学习笔记

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!