《鸟哥的私房菜》--Linux读书笔记

计算机上常用的计算单位:K、M、G、T、P

由于每个CPU的微指令集不同,架构也不一样,每次频率能够进行的工作指令数也不同,所以频率目前仅能用来比较同款CPU的速度。

所谓的外频指的是CPU与外部组件进行数据传输、运算的速度,倍频则是CPU内部用来加速工作的一个倍数,两者相乘才是CPU的频率。

超频:

所谓超频指将CPU的倍频或者外频通过主板的设定功能更改为较高频率的一种方式。但因为CPU的倍频通常在出厂时已经被 锁定而无法修改,因此较常被超频的是外频。但却因为频率并非正常速度,故可能会造成死机等问题。

32位与64位

内存与CPU的通信速度靠的是外部频率,北桥的总线称为系统总线,因为内存传输的主要信道,所以速度较快;南桥就是所谓的输入输出总线,主要用于联系硬盘、USB、网卡等 接口设备。北桥所支持的频率我们称为前端总线速度,而每次传送的位数则是总线宽度。

与总线宽度相似,CPU每次能够处理的数据量称为字组大小,字组大小依据CPU的设计而有32位与64位。我们现在所称的计算机是32或64位主要依据CPU解析的字组大小而来。

CPU等级

由于x86架构的CPU在Intel的Pentium系列后就有不统一的引脚与设计,为了将不同的种类的CPU规范等级,所以就有i386,i586,i686。

BIOS,CMOS

CMOS芯片记录了主板上的各种参数,它需要借着额外的电源来发挥记录功能,这也是为什么主板上会以一个电池的缘故。BIOS(Basic Input Output System)是一套程序,这套程序是写死到主板上面的一个内存芯片中,这个内存芯片在没有通电的时也能够将数据记录下来。

内核

内核程序所放置到内存中的区块是受保护的,并且开机后就一直常驻在内存当中。主要负责整个计算机系统相关的资源分配与管理,那我们知道其实整部计算机系统最重要的就是CPU与内存。

(1)系统调用接口

        这是为了方便程序员可以轻易地通过与内核通信,将硬件的资源进一步利用,于是需要有这个简易的接口来方便程序开发者。

(2)程序管理

       可能有很多工作正在等待CPU运算处理,内核这个时候必须能够控制这些工作,让CPU的资源做有效的分配才行。而且良好的CPU调度机制将会有效加快整体系统性能。

(3)内存管理

       通常内核会提供虚拟内存的功能,当内存不足时可以提供内存交换功能

(4)文件系统管理

(5)设备驱动

       硬件的管理是内核的主要工作之一,目前者有所谓的“可加载模块” 功能,可以驱动程序编辑成模块,就不需要重新的编译内核。

第1章

自由软件的版权GNU GPL

      "Free software" is  a matter of liberty, not price. To understand the concept, you should think of "free speech", not "free beer". "Free software" refers to the user's freedom to run, copy, distribute , study, change, and improve the software.

简而言之,GPL协议就是一个开放源代码协议,软件的初始开发者使用了GPL协议并公开软件的源程序后,后续使用该软件源程序开发软件者亦应当根据GPL协议把自己编写的源程序进行公开。GPL协议要求的关键在于开放源程序,但并不排斥软件作者向用户收费。虽然如此,很多大公司对GPL协议还是又爱又恨,爱的是这个协议项下的软件历经众多程序员千锤百炼的修改,已经非常成熟完善,恨的是必须开放自己后续的源程序,导致竞争对手也可以根据自己修改的源程序开发竞争产品。

正因大公司对GPL协议在商业上存在顾虑,因此,另两种协议被采用的更多,第一种是LGPL(亦称GPL V2)协议,可以翻译为更宽松的GPL协议。与GPL协议的区别为,后者如果只是对LGPL软件的程序库的程序进行调用而不是包含其源代码时,相关的源程序无需开源。调用和包含的区别类似在互联网网网页上对他人网页内容的引用:如果把他人的内容全部或部分复制到自己的网页上,就类似包含,如果只是贴一个他人网页的网址链接而不引用内容,就类似调用。有了这个协议,很多大公司就可以把很多自己后续开发内容的源程序隐藏起来。

第二种是BSD协议(类似的还有MIT协议)。BSD协议鼓励软件的作者公开自己后续开发的源代码,但不强求。在BSD协议项下开发的软件,原始的源程序是开放源代码的,但使用者修改以后,可以自行选择发布源程序或者二进制程序(即目标程序),当然,使用者有义务把自己原来使用的源程序与BSD协议在软件对外发布时一并发布。因为比较灵活,所以BSD深受大公司的欢迎。

更多协议:http://blog.163.com/work_laoshu/blog/static/11488577220102292153886/

 

Linux的内核版本

内核版本编号有点类似如下:

2.6.18-92.e15

主版本.次版本.释出版本-修改版本

主、次板本为奇数:开发中版本

主、次版本为偶数:稳定版本

释出版本则是在主、次版本架构不变的情况下,新增的功能累积到一定程序后所释放出的内核版本。

 

Linux distributions

Kernel+Softwares+Tools = Linux distribution

为了让所有的Linux distributions开发不至于差异太大,且让这些开发商在开发的时候有所依据,还有Linux Standard Base等标准来规范开发者,以及目录架构的File sytem Hierarchy Standard标准规范,它们唯一的差别可能就是该开发者自家所开发的管理工具以套件管理的模式。

 

第3章

各硬件设备在Linux中的文件名

在Linux系统中,每个设备都被当成一个文件来对待。

设备设备在Linux内的文件名
IDE硬盘/dev/hd[a-d]
SCSI/SATA/USB硬盘/dev/sd[a-p]
U盘与SATA相同
软驱/dev/fd[0-1]
打印机25针:/dev/lp[0-2]
USB:/dev/usb/lp[0-15]
鼠标USB: /dev/usb/mouse[0-15]
PS2: /dev/psaux
当前CD ROM/DVD ROM/dev/cdrom
当前鼠标/dev/mouse
磁带机IDE: /dev/ht0
SCSI: /dev/st0

磁盘

盘片上面又可细分出扇区与柱面两种单位,其中扇区每个为512bytes。整块磁盘的第一个扇区特别重要,它记录了两个重要的信息(1)主引导分区(MBR):可以安装引导加载程序的地方,有446bytes(2)分区表:记录整志硬盘分区的状态,有64bytes。磁盘默认的分区表仅能写入四组分区信息,这四组信息我们称为主或扩展分区。分区的最小单位为柱面。

虽然分区表只能记录四组数据,但是我们利用扩展分区的思想可以分区多于4个:利用额外的扇区来记录更多的分区信息。

总结:

(1)主分构与扩展分区最多可以有四个(磁盘的限制)

(2)扩展分区最多只能有一个(操作系统的限制)

(3)逻辑分区是由扩展分区持续切割出来的分区

(4)能够被格式化作为数据访问的分区为主分区与逻辑分区,扩展分区无法格式化。

(5)逻辑分区的数量依操作系统而不同,在Linux系统中,IDE硬盘最多有59个逻辑分区,SATA硬盘则有11个逻辑分区

 

开机流程与主引导分区

(1)BIOS是开机时计算机系统执行的第一个程序,识别第一个可开机的设备

(2)MBR:第一个可开机设备的第一个扇区的主引导分区块,内包含引导加载程序

(3)引导加载程序(boot loader):可读取内核文件来执行的软件

(4)内核文件:开始操作系统的功能

BIOS和MBR都是硬件本身会支持的功能,至于boot loader则是操作系统安装到MBR上面的一套软件,引导加载程序除了可以安装到MBR之外,还可以安装到每个分区的引导扇区。boot loader的主要任务:

(1)提供菜单:用户可以选择不同的开机选项,这也是多重引导的重要功能

(2)载入内核文件:直接指向可开机的程序区段来开始操作系统

(3)转交其他loader:将引导加载功能转交给其他loader负责

解释“多引导中为什么最好先安装Windows,后安装Linux”:

(1)Linux在安装的时候,你可以选择将引导加载程序安装到MBR或个别分区的启动扇区,而且Linux的loader可以手动设置菜单,所以你可以在Linux的boot loader里机加入Windows开机选项

(2)Windows在安装的时候,它的安装程序会主动覆盖掉MBR以及自己所在分区的启动扇区,你没有选择的机会,而且它没有让我们自己选择菜单的功能

 

挂载

所谓挂载就是利用一个目录当成进入点,将磁盘分区的数据放置在该目录下:也就是说,进入该目录就可以读取该分区的意思。由于整个Linux系统最重要的是根目录,因此根目录一定需要挂载到某个分区的。

 

 

第5章

在Linux系统中由于是多人多任务的环境,所以系统随时都有很多任务在进行,因此正确的开关机可是很重要的,不正常的关机可能会导致文件系统错乱,造成数据的毁损!这也是为什么通常我们的Linux主机都会加挂一个不断电的系统。

 

X Window与命令行模式的切换

Linux默认的情况下会提供6个terminal来让用户登录,切换的方式为:

(1)Ctrl+Alt+F1~F6:文件界面登录tty1~tty6(运行等级run level3)

(2)Ctrl+Alt+F7:图形界面桌面(运行等级run level5)

 

date

显示日期与时间的命令,

cal

显示日历的命令

bc

简单的计算器

 

重要热键Tab, Ctrl-c,Ctrl-d

(1)Tab具有“命令补全”与“文件补全”的功能,利用好tab可以避免很多输入错误

(2)Ctrl-c这个组合键是可以将正在运作中的命令中断的,如果你正在运行比较重要的命令,可别急着使用这个组合键

(3)Ctrl-d代表键盘输入结束的意思。另外,它也可以代替exit的输入。

 

man page

man是manual的简写

按键进行工作
空格键向下翻一页
PageDown向下翻一页
PageUp向上翻一页
Home到第一页
End到最后一页
/string向下查询string字符串
?string向上查询string字符串
n,N在查询时,n可以继续下一个,N可以反向继续下一下
q结束这次的man page

 

 

 

代号代表内容
1用户在shell环境中可以操作的命令或可执行文件
2系统内核可调用的函数与工具等
3一些常用的函数与函数库,大部分为C的函数库
4设备文件的说明,通常在/dev下的文件
5配置文件或者是某些文件的格式
6游戏
7惯例与协议等,例如Linux文件系统、网络协议
8系统管理员可用的管理命令
9跟kernel有关的文件

 

man page的内容也分成好几个部分。

代号内容说明
NAME简短的命令、数据名称的说明
SYNOPSIS简短的命令执行语法简介
DESCRIPTION较为完整的说明,这部分最好仔细看看
OPTIONS针对SYNOPSIS部分中,有列举的所有可用的选项说明
COMMANDS当这个程序在执行的时候,可以在程序中执行的命令
FILES这个程序或数据所使用或参考或连接到的某个文件
SEE ALSO这个命令或数据有相关的其他说明
EXAMPLE一些可愉参考的范例
BUGS是否有相关的错误

 

通常查询某个数据时是这样来查询的:

(1)先查看NAME的项目,约略看一下这个数据的意思

(2)再仔细看一下DESCRIPTION,这个部分会提到很多相关的资料与用法,从这个地方可以学到很多小细节

(3)而如果这个命令其实很熟悉,那么主要就是查询关于OPTIONS的部分了。可以知道每个选项的意义,这样就可以执行比较细部的命令内容。

(4)最后会再看一下跟这个资料有关的学有哪些东西可以使用。

(5)某些说明内容还会列举有关的文件来提供我们参考。

 

info page

与man page一下子输出一堆信息不同的是,info page则是将文件数据拆成一个一个的段落,每个段落用自己的页面来撰写,并且在各个页面中还有类似网页的“超链接”来跳到各个不同的页面中,每个独立的页面也被称为一个节点。

按键进行工作
空格键向下翻一页
PageDown向下翻一页
PageUp向上翻一页
Tab在节点之间移动,有节点的地方,通常会以“*”显示
Enter当光标在节点上面时,按下Enter可以进入该节点
B移动光标到该info界面当中的第一个节点处
E移动光标到该info界面当中的最后一个节点处
N前往下一个节点处
P前往上一个节点处
U向上移动一层
S(/)在info page当中进行查询
H显示求助菜单
命令一览表
Q结束这次的info page

 

 

其他有用的文件

放在/usr/share/doc这个目录下

 

正确的关机方法

(1)查看系统的使用状态

      如查要看目前有谁在线,可以执行who这个命令,而如果要看网络的联机状态,可以执行netstat -a这个命令,而要看后台执行的程序可以执行ps -aux这个命令。使用这些命令可以让你稍微了解主机目前的使用状态,就可以判断是否可以关机了

(2)通知在线用户关机的时刻

      可以使用shutdown的特别命令功能

shutdown可以完成如下的工作:

(1)可以自由选择关机模式:是要关机、重启或进入单用户操作模式均可

(2)可以设置关机时间:可以设置成现在立刻关机,也可以设置某一个特定的时间才关机

(3)可以自定义关机消息:在关机之前,可以将自己设置的消息传送给在线用户

(4)可以仅发出警告消息:有时有可能你要进行一些测试,而不想让其他的用户干扰,或者是明白地告诉用户某段时间要注意一下,这个时候可以使用shutdown来通知用户,但却不是真的要关机

(5)可以选择fsck检查文件系统

reboot, halt, poweroff三个命令调用的函数库都差不多,shutdown可以依据目前启动的服务来逐次关闭各服务才关机,halt却能在不理会目前系统状况下,进行硬件关机的特殊功能。

 

切换执行等级

init 0可以关机

run level 0: 关机

run level 3: 纯命令行模式

run level 5: 含有图形界面模式

run level 6: 重启

 

文件系统错误

         如果根目录没有损毁:假设发生错误的分区是/dev/sda7,那么在开机时会提示press root password or ctrl+D,这时候输入root密码登录系统,然后进行单用户维护工作,输入fsck /dev/sda7,这时屏幕会显示开始修复硬盘的消息,如果没有发现任何的错误时,屏幕会显示clear [Y,N],直接输入Y,修复完成后reboot。

       如果根目录损毁:可以将硬盘转接到另一台Linux机器上,招待fsck命令,也可使用Live CD来招待fsck

 

忘记root密码

先重启,在读秒时按下任意键,个性grub内容:在kernel得加入single,开机进入单用户模式,在这个模式下面,你会在tty1的地方不需要输入密码即可取得终端的控制权(而且还是root身份),之后就要可以用passwd修改root密码了。

注:由于Linux系统的关机、重启是很重大的系统操作,因此只有root账才能够进行,不过在某些distributions当中,它允许tty7的一般账号也可以关机与重启,但是某些distributions会要求输入root密码。

 

 

第6章  

在我们的Linux系统当中,默认的情况下所有的系统上的账号与一般身份用户,还有那个root的相关信息,都是记录在/etc/passwd这个文件内,至于个人的密码则是记录在/etc/shadow这个文件中,此外,所有的组名都记录在/etc/group内。

 

Linux文件属性

eg.

-rwx------

[文件类型] [owner读权限] [owner写权限] [owner可执行权限] [group读权限] [group写权限] [group可执行权限] [others读权限] [others写权限] [others可执行权限]

       第一个字符代表这个文件是“目录、文件或链接文件等”,若是[d]则是目录,若是[-]则是文件;若是[|]则表示为连接文件;若是[b]则表示设备文件里面的可供存储的接口设备;若是[c]则表示设备文件里面的串行端口设备。

     如果文件名之前多一个“.”,则表示这个文件为隐藏文件。

 

改变文件属性与权限

chgrp:改变文件所属用户组,不过要被改变的组名必须要在/etc/group文件内存才行。

chown:改变文件所有者,用户必须已经存在于系统中的账号,也就是在/etc/passwd这个文件中有记录的用户名称才能改变。它也可以顺便修改用户组的名称。

eg.  chown user:group file

chmod:改变文件的权限,可以使用数学或符号来进行权限的更改。

(1)数学

r:4  w:2  x:1

eg.

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1  = 7

others = --- = 0+0+ 0  = 0

chmod  770 file

如果要把一个文件变成可执行文件,并且不要让其他人修改此文件的话,那么需要-rwxr-xr-x,即是755

(2)符号

chmodu
g
o
a
+(加入)
-(除去)
=(设置)
r
w
x

u、g、o分别表示user,group,others3种身份,此外a代表all,也即全部的身份。

 

目录与文件的权限意义

      对文件而言,r、w、x针对的是内容的权限,与文件名的存在没有关系。在Windows下面一个文件具有执行能力是通过“扩展名”来判断的,但是在Linux下面,我们的文件是否能够 执行则由是否具有“x”这个权限杰决定的。另外如果拥有w权限并不代表具备删除该文件的权限。

     对于目录,重点是w权限,它表示可以(1)新建新的文件与目录(2)删除已经存在的文件和目录(不论该文件的权限如何)(3)将已存在的文件或目录进行重命名(4)转移该目录内的文件、目录位置。目录的x代表的用户能否进入该目录成为工作目录,所谓工作目录就是能否利用cd命令进入 。

 

Linux文件扩展名

     虽然Linux的文件没有所谓Windows形式的扩展名,但是我们还是希望可以通过扩展名来了解该文件是什么东西,所以有一些常见的扩展名:(1).sh脚本或批处理文件(2)*.z , *.tar, *.tar.gz, *.zip, *tgz打包过的压缩文件(3)*.html, *.php网页相关文件

 

FHS

      Linux 目录配置标准主要目的统一配置文件放置位置,规范每个特定的目录下应该放置会么样子的数据而已。事实上,FHS是根据过去的经验地直在改版。FHS针对目录树架构仅定义出三层目录下面应该放置什么数据而已(1)/ (根目录):与开机系统有关(2)/usr (UNIX software resource):与软件安装执行有关(3)/var (variable):与系统运作过程有关。

      FHS标准建议:根目录所在分区应该越小越好,且应用程序所安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较好,根目录所有的文件系统也较不容易发生问题。

FHS定义出根下面应该要有下面这些子目录存在才好

目录应放置文件内容
/bin系统有很多放置执行文件的目录,但/bin比较特殊。因为其放置的是在单用户
维护模式下还能够被操作的命令。
/boot这个目录主要在放置开机会使用到的文件,包括Linux内核文件以及开机菜单与开机所
需配置文件等。Linux kernel常用文件名为vmlinz,如果使用的是grub这个引导程序,
则还会存在/boot/grub/这个目录
/dev在Linux系统上,任何设备与接口都是文件的形式存在这个目录中的。
/etc系统主要的配置文件几乎都放置在这个目录内。一般来说,这个目录下的各文件属性
是可以让一般用户查阅的,但是只有root有权修改。FHS建议不要放置可执行文件在
这个目录中。比较重要的文件有/etc/inittab, /etc/init.d/, /etc/modprobe.conf, /etc/X11/, 
/etc/fstab, /etc/sysconfig/等。另外,其下面重要的目录有:
(1)/etc/init.d/:所有服务的默认启动脚本都放在这里
(2)/etc/xinetd.d/:这就是所谓的super daemon管理的各项服务的配置文件目录
(3)/etc/X11/:与X Window有关的各种配置文件
/home这里是系统默认的用户主文件夹
/lib系统的函数库非常多,而/lib放置的则是在开机会用到的函数库,以及在/bini或/sbin
下面的命令调用的函数库而已。尤其重要的是/lib/modules/这个目录,因为该目录
会放置内核相关的模块(驱动程序)
/media这个/media下面放置的就是可删除的设备
/mnt如果你想暂时挂载某 些额外的设备,一般建议你可以放置到这个目录中。
/opt这个是给第三方软件放置的目录
/root系统管理员的主文件夹。之所以放在这里,是因为如果进入单用户维护模式而仅挂载
根目录时,该目录就能够拥有root的主文件夹,所以我们希望root的主文件夹与根目录
放置在同一个分区
/sbinLinux有非常多的命令是用来放置系统环境的,这些命令只有root才能够利用来“设置”系统
,其他用户最多只能用来“查询”而已。
/srvsrv可以视为service的意思,是一些网络服务启动之后,这些服务所需要取用的数据目录
/tmp这是让一般用户或者正在执行的程序暂时放置文件的地方。这个目录是任何人都能够访问的
应该定期清理。

 

由于开机时只会加载根目录所在分区,所以有此目录是需要和根目录共在一个分区的:(1)/etc:配置文件(2)/bin:重要执行文件(3)/dev:所需要的设备文件(4)/lib:执行文件所需的函数库或内核所需的模块(5)/sbin:重要的系统执行文件

      /usr这个目录有点类似windows的c:\windows\和c:\Program files\这两个目录的综合体,系统刚安装完毕时,这个目录会占用最多的硬盘容量。一般来说,其下子目录建议:

目录应放置文件内容
/usr/X11R6/为X Window系统重要数据所放置的目录,之所以取名为X11R6是因为最后的X版本为第11版
,且该版的第6次释放之意
/usr/bin/绝大部分的用户可使用命令都放在这里。请注意到它与/bin的不同之处(是否与开机有关)
/usr/includec/C++等程序语言的头文件与包含文件放置处,当我们以tarball方式安装某些数据时,
会使用里头的许多包含文件
/usr/lib包含各应用软件的函数库、目标文件,以及不被一般用户惯用的执行文件或脚本。某些软件会
提供一些特殊的命令来进行服务器的设置,这些命令不会经常被系统管理员操作,那就会被放
置到这个目录中。
/usr/local系统管理员在本机自行下载安装自己下载的软件(非distribution默认提供者),建议安装
到此目录,这样会比较便于管理
/usr/sbin/非系统正常运行所需要的系统命令。
/usr/share/放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,
因为几乎都是文件文件。在此目录下常见的还有这些子目录:
(1)/usr/share/man:在线帮助文件
(2)/usr/share/doc:软件杂项的文件说明
(3)/usr/share/zoneinfo:与时区有关的时区文件
/usr/src/一般源码建议放置在这里。至于内核源码则建议放在/usr/src/linux目录下

        /var目录主要针对常态性变动的文件

目录应放置文件内容
/var/cache/应用程序本身运行过程会产生一些暂存文件
/var/lib/程序本身执行过程中,需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自
目录
/var/lock/某些设备或者文件资源一次只能被一个应用程序所使用。
/var/log/这是登录文件放置的目录。里面比较重要的文件如/var/log/messages, /var/log/wtmp
/var/mail/放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中。
通常这两个目录互为连接文件
/var/run/某些程序或者服务启动后,会将它们的PID放置在这个目录下
/var/spool/这个目录通常放置一些队列数据,这些数据被使用后通常都会被删除。

 

绝对路径与相对路径

       由根目录开始写起的文件名或目录名称,称为绝对路径。相对于当前目录的文件名写法称为相对路径,其中“.”代表当前目录,“..”代表上层目录。

 

第7章

-      代表前一个工作目录

~     代表“目前用户身份”所在的主文件夹

~account  代表account这个用户的主文件夹(account是个账号名称)

 

cd:切换目录,是Change Directory的缩写

pwd:显示当前目录,是Print Working Directory的缩写

mkdir:新建一个新的目录

rmdir:删除一个空的目录

 

关于执行文件路径的变量:$PATH

      当我们执行一个命令时,举例来说“ls”,系统会依照PATH的设置去每个PATH定义的目录下查询文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行。

(1)不同的身份用户默认的PATH不同,默认能够随意执行的命令也不同

(2)PATH是可以修改的,所以一般用户还可以通过修改PATH来执行某些位于/sbin, /usr/sbin下的命令来查询

(3)使用绝对路径或相对路径来直接指定某个命令的文件名来执行,会比查询PATH来得的正确

 

cp:复制文件或目录

rm:移除文件或目录

mv:移动文件与目录,或更名(更名也可以使用rename)

 

取得路径的文件名与目录名

      basename用于取得文件名,dirname用于取得目录名

 

文件内容查询

cat:由第一行开始显示文件内容(concatenate)

tac:从最后一行开始显示,可以看出tac是cat的倒写形式

nl:显示的时候,顺便输出行号

more:一页一页的显示文件内容。

空格键代表向下翻一页
Enter代表向下滚动一行
/string在这个显示的内容当中,向下查询string这个关键字
:f立即显示出文件名以目前显示的行数
q离开more
b或ctrl-b代表往回翻页,不过这个操作只对文件有用,对管道没用

 

less:与more类似,但是比more更好的是,它可以往前翻页

空格键向下翻一页
PageDown向下翻动一页
PageUp向上翻动一页
/string 
?string向上查询string
n重得查询下一个string
N反向的n
q 

 

head:只看头几行

tail:只看结尾几行

od:以二进制的方式读文件内容

 

 

修改文件时间或创建新文件:touch

mtime(modification time)

当该文件的“内容数据”更改时,就会更新这个时间。内容数据指的是文件的内容,而不是文件的属性或权限。

ctime(status time)

当文件的“状态”改变时,就会更新这个时间,举例来说,像是权限与属性被更改了都会更新这个时间

atime(access time)

当“该文件的内容被取用”时,就会更新这个读取时间。

默认ls显示的是该文件的mtime。

touch最常被使用的情况是:(1)创建一个空的文件(2)将某个文件日期改为当前日期(mtime和atime)

 

文件默认权限umask

umask指当前用户有新建文件或目录进候的权限默认值,其中以数字给出的结果是需要减掉的权限。

(1)若用户创建“文件”,则默认没有可执行权限,即只有rw这两个选项,也就是最大为666

(2)若用户新建“目录”,则由于x与是否能进入此目录有关,因此默认为所有权限均开放,即777。

 

文件隐藏属性chattr,lsattr

chattr命令只能在ext2,ext3的文件系统上面生效,其他的文件系统可能就无法支持这个命令。

A当设置了A这个属性时,若你有访问此文件时,他的访问时间atime将不会被修改。
可避免IO较慢的机器过度访问磁盘,这对速度较慢的计算机有帮助
S一般文件是异步写入磁盘,如果加上这个S,当你进行任何文件的修改,该修改
会同步写入磁盘中
a当设置a之后,这个文件只能增加数据,而不能删除也不能修改数据,只有root
才能设置这个权限
c这个属性设置后,将会自动将此文件压缩,在读取的时候将会自动解压缩。
d当dump程序被执行的时候,设置d属性将可使该文件不会被dump备份
i它可以一个文件不能被删除、改名,设置连接与无法写入或添加数据。对于系统
安全有相当大的帮助,只有root能设置此属性
s如果这个文件被删除,它将会被完全从这个硬盘空间中删除
u与s相反,如果文件被删除,则数据内容还存在磁盘,可以使用来找回该文件

 

文件特殊权限:SUID、SGID、SBIT

SUID

(1)当s这个标志出现在文件所有者x权限上时,此时就被称为Set UID,简称SUID的特殊权限。

(2)SUID权限仅对二进制程序有效

(3)执行者需对该程序具有x的可执行权限

(4)本权限仅在执行程序的时候(run-time)有效

(5)执行者将具有程序所有者的权限

SGID

(1)当s这个标志出现在group的x权限上时,此时就被称为Set GID,简称SGID

(2)SGID对二进制程序有用

(3)程序执行者对于该程序来说,需具备x的权限

(4)执行者在执行的时候将会获得该程序用户组的支持。

SBIT

(1)Sticky Bit目前只针对目录有效,对于文件已经没有效果了

(2)如果将A目录加上了SBIT的权限,则用户只能够针对自己创建的文件或目录进行删除、重命名、移动等操作,而无法删除他人的文件

4表示SUID

2表示SGID

1表示SBIT

 

查看文件类型file

如果你想要知道某个文件的的基本数据,且其中没有使用到动态函数库等信息,可以使用file命令

 

文件的查询

which

       寻找“执行文件”,这个命令是根据PATH这个环境变量所规范的路径去查询“执行文件”的文件名。

whereis

      寻找特定文件,因为Linux系统会将系统内的所有文件都记录在一个数据库文件里面,而当使用whereis或者locate时,都会以此数据库文件的内容为准,因此,有时你还会发现使用这两个命令,会找到已经被删除掉的文件,而且也找不到最新的刚才创建的文件。

locate

      locate寻找数据是由已创建的数据库/var/lib/mlocate里机的数据库所查找的,而数据库的创建默认是每天执行一次(不同的distributions都不同)。但是可以利用updatedb命令进行更新,updatedb命令会去读取/etc/updatedb.conf这个配置文件的设置。

find

     功能比较强大

 

第8章

super block:记录此文件系统的整体信息,包括inode、block的总量、使用量、剩余量,以及文件系统的格式与相关信息等。

inode:记录文件的属性,一个文件占用一个inode,同是记录此文件的数据所在的block号码。

block:实际记录文件的内容,若文件太大时,会占用多个block

而在FAT这种格式的文件系统中并没inode,所以FAT没有办法将这个文件的所有block在一开始就读取出来,每个block号码都记录在前一个block当中。经常听到的“碎片整理”的原因就是文件写入太过于离散了,此时文件读取性能会变得很差,这个时候可以将同一个文件所属的block汇合在一齐。

 

Ext2

因为当inode与block的数量太大进,不容易管理,因此Ext2文件系统在格式化的时候基本上是区分为多个块组(block group)的,每个块组有独立的inode、block、superblock系统。

inodetable

       inode记录的文件数据至少有下面这些:(1)该文件 的访问模式(read/write/execute)(2)该文件的所有者与组(owner与group)(3)该文件的大小(4)该文件的创建或状态修改时间(ctime)(5)最近一次读取时间(atime)(6)最近修改的时间(mtime)(7)文件的特性标志(如SUID)(8)该文件真正内容的指向

     inode大小均为128bytes,而inode记录一个block号码要花掉4byte,为此系统将inode记录block的号码区域定义为12个直接、一个间接、一个双间接和一个三间接记录区。所谓间接就是利用block来记录其他的block。

superblock

      每个block group都可能含有superblock,但是我们也说一个文件系统应该仅有一个superblock而已,事实上除了第一个block group内含有superblock之外,后续的block group不一定含有superblock,而若含有则该superblock主要是作为第一个block group内superblock的备份了,这样可以进行superblock的救援。

File system Description(文件系统描述说明)

     这个区段可以描述每个block group的开始与结束的block号码。这部分也能够通过dumpe2fs来查看。

block bitmap(块对照表)

     从block bitmap当中可以知道哪些block是空的,因此我们的系统就能够很快速地找到可以使用的空间来处理文件。

inode bitmap(inode对照表)

     记录使用与未使用的inode号码

 

ext2与目录树的关系

     ext2会分配一个inode与至少一块block给一个目录,其中inode记录该目录的相关权限与属性,而block则是记录在这个目录下的文件名与该文件名所占用的inode号码数据。当我们新建一个文件时,ext2会分配一个inode与想对于该文件大小的block数量给该文件。

     当我们想新增一个文件,此时文件系统的行为是:

(1)先确定用户对于欲添加文件的目录是否具有w和x权限,若有的话才能添加

(2)根据inode bitmap找到没有使用的inode号码,并将新文件的权限、属性写入

(3)根据block bitmap找到没有使用中的block号码,并将实际的数据写入block中,且更新inode的block指向数据。

(4)将刚才写入的inode与block数据同步更新inode bitmap与blockmpa,并更新superblock的内容

 

日志文件系统

      在文件系统中规划出一个块,该块专门记录写入或修订文件时的步骤,以简化一致性检查。

(1)预备:当系统要写入一个文件时,会先在日志记录块某个文件准备写入信息

(2)实际写入

(3)结束:在日志块记录完成了该文件的记录

这样万一数据的记录过程发生了问题,那么系统只要去检查日志记录块就可以知道哪个文件发生了问题,针对该问题做一致性检查即可,而不必针对整块文件系统去检查,这样就可以达到快速修复文件系统的能力了。

这种增加了日志功能的文件系统是ext3.

 

df:列出文件系统的整体磁盘使用量,读取的范围主要是在super block内的信息,所以这个命令显示结果的速度非常快。

du:评估文件系统的磁盘使用量(常用于评估目录所占容量),直接到文件系统内去查找所有文件数据。

 

 

连接文件ln

在Linux下面的连接文件有两种,一种是类似Windows的快捷方式功能的文件,一种是类似Windows的快捷方式功能的文件,可以让你快速连接到目标文件(或目录);另一种则是通过文件系统inode连接来产生文件名,而不是产生新文件,这种连接称为硬连接。

(1)硬连接 ,只是在某个目录下新建一条文件名连接到某个inode号码的关联记录而已,只是在某个目录下的block多写一个关连数据而已,不会耗用inode及block。不能跨文件系统,也不能连接目录(因为这种情况比较复杂,所时暂时不支持)。

(2)symbolic link(符号连接,也即是快捷方式),就是在创建一个独立的文件,而这个文件会让数据的读取指向它连接的v那个文件的文件名,由于符号连接是创建一个独立的文件,所以会占用掉inode与block。

 

fdisk:磁盘分区,

mkfs:磁盘格式化

fsck,badblocks:磁盘检验

mount,remount,umount :磁盘的挂载

 

第9章

*.Z  compress程序压缩的文件

*.gz  gzip程序压缩的文件

*.bz2  bzip2程序压缩的文件

*.tar  tar程序打包的数据,并没有压缩过

*.tar.gz  tar程序打包的文件,其中经过gzip的压缩

*.tar.bz2  tar程序打包的文件,其中经过bzip2的压缩

 

完整备份工具:dump

       这个命令除了能够针对整个文件系统备份之外,也能够仅针对目录来备份。dump的恢复使用的是restore这个命令。

 

mkisofs:新建镜像文件

cdrecord:光盘刻录工具

dd:几乎可以直接读取扇区,然后将整个设备备份成一个文件。tar可以看作用来备份关键数据,而dd则可以用来备份整块分区或整块磁盘。

 

第10章

      在Linux的世界中,绝大部分的配置文件都是以ASCII的纯文件形式存在,因此利用简单的文字编辑软件就能够修改设置了。

 

vi

有3种模式:

(1)一般模式:以vi找开一个文件就直接进入一般模式(这是默认的模式)。在这个模式中,你可以使用上下左右键来移动光标,你可以删除字符或删除整 行,也可心复制】粘贴你的文件数据。

(2)编辑模式:在一般模式中按下i、I、o、O、a、A、r、R等任何一个字母之后才会进入此模式,此时才可以进行编辑,如果想回到一般模式时,按Esc

(3)命令行模式:在一般模式下按下“:、/、?”3个中的任何一个,进入此模式,读取、保存文件及其也功能

  一般模式:

移动光标的方法作用
h或向左方向箭光标向左移动一个字符
j或向向下方向箭光标向下移动一个字符
k或向上方向箭光标向上移动一个字符
l或向右方向箭光标向右移动一个字符
30j或30+arrowDown如果想进行多次移动的话,
如下移30行
Ctrl+f=Page Down
ctrl+b=page UP
ctrl+d=1/2 page up
ctrl+u=1/2 page up
+光标移动到非空格行的下一行
-光标移动到非空格行的上一行
n<space>那个n表示“数字”,按下数字后再按空格键,光标会向右移动这一行的n
个字符,如20<space>,则光标会后移20个字符距离
0=Home
$=End
H光标移动这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕最下方那一行的第一个字符
G移动到这个文件的最后一行
nGn为数字,移到到这个文件的第n行,例如:20G则移动到这个文件的第20行
gg移动到这个文件的第一行,相当于1G
N[enter]n为数字。光标向下移动n行

 

查找与替换说明
/word向下寻找一个名称为word的字符串。
?word向上寻找一个名称为word的字符串
n这个n是英文按键,代表重复前一个查找的操作,相当于“下一个”
N与n相反,进行前一个查找操作,相当于“前一个”
:n1,n2s/word1/word2/gn1与n2为数字。在第n1与n2行之间寻找word1这个字符串,并将
该字符串替换为word2.
:1,$s/word1/word2/g从第一行到最后一行查找word1,并将word1替换为word2
:1,$s/word1/word2/gc与上条不同是在替换前显示提示字符确认是否需要替换
  

 

 

删除、复制与粘贴说明
x,X在一行,x=del,X=backspace
nxn为数字,连续向后删除n个字符
dd删除光标所在那一整行
nddn为数字,删除光标所在的向下n行
d1G删除光标所在到第一行的所有数据
dG删除光标所在到最后一行的所有数据
d$删除光标所在处到该行的最后一个字符
d0删除光标所在处到该行的最前一个字符
yy复制光标所在那一行
nyyn为数字,复制光标所在的向下n行
y1G复制光标所在行到第一行的所有数据 
yG复制光标所在行到最后一行的所有数据
y$复制光标所在处到该行的最后一个字符
y0复制光标所在处到该行的最前一个字符
p,Pp为将复制的数据在光标下一行粘贴
P为将复制的数据在光标上一行粘贴
J将光标所在行与下一行数据结合成一行
c重复删除多个数据
u复原前一个操作
ctrl+r重做上一个操作
.小数点,重复前一个操作
  

 

编辑模式说明
i,I进入插入模式;
i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入
a,A进入插入模式;
a为从目前光标的下一个字符处插入,
A为在目前所在行的最后一个字符处开始插入
o,O进入插入模式;
o为从目前光标所在的下一行处插入,
O为在目前所在行的上一行开始插入
r,R进入替换模式
r只替换光标所在那一个字符一次
R会一直替换光标所在的文字,直到按下Esc

 

命令行说明
:w将编辑的数据写入硬盘文件中
:w!若文件属性为“只读”时,强制写入该文件。不过到底能不能写入,
还是跟你对该文件的文件权限有关
:q离开vi
:q!若修改过文件,又不想存储,使用!为强制离开但不保存文件
:wq保存后离开,:wq!则为强制保存后离开
ZZ若文件没有更改过,则不保存离开,若文件已经修改,则保存后离开
:w[filename]将编辑的数据保存成另一个文件(类似saveas)
:r[filename]在编辑的数据中,读入另一个文件的数据,即将filename这个文件
内容中到光标所在行后面
:n1,n2 w[filename]将n1到n2的内容保存成filename这个文件
:!command暂时离开vi到命令行模式下执行command的显示结果。例如:
:! ls /home
:set nu显示行号,设置后,会以每一行的前缀显示该行的行号
:set nonu与set nu相反,取消行号

 

 

第11章

shell

shell的功能提供用户操作系统的一个接口,以实现与内核的通信。

在bash shell中一行命令写不下时,可以利用“\enter”进行断行。

 

变量的显示与设置:echo,unset

echo这个命令可以用来显示变量,但是在变量在被显示时,前面必须要加上字符“$”才行。

变量的设置规则:

(1)变量与变量内容以一个等号“+=”连接

(2)变量名只能是英文字母与数字,但是开头字符不能是数字。

(3)变量内容若有空格可以使用双引号或单引号将变量结合起来,但是双引号内的特殊字符如$等可以保持原本的特性

(4)可用转义字符\将特殊符号变成一般字符

(5)在一串命令中,还需要通过其他命令提供的信息,可以使用反单引号“`命令`”或“$(命令)”。

(6)若该变量需要在其他子进程执行,需要以export来使变量变成环境变量

(7)取消变量的方法“unset 变量名称”

 

env:查看环境变量

set:查看所有变量

export:自定义变量转成环境变量

read:读取来自键盘输入的变量,这个命令最常被用在shell script的编写中

declare/typeset:声明变量的类型

ulimit:用于限制用户的某些系统资源,包括可以打开的文件数据、可以使用的CPU时间、可以使用的内存总量等。

 

变量设置方式说明
${变量#关键字}若变量内容从头开始的数据符合“关键字”,则将
符合的最短数据删除
${变量##关键字}若变量内容从头开始的数据符合“关键字”,则将
符合的最长数据删除
${变量%关键字}若变量内容从尾开始的数据符合“关键字”,则将
符合的最短数据删除
${变量%%关键字}若变量内容从尾开始的数据符合“关键字”,则将
符合的最长数据删除
${变量/旧字符串/新字符串}若变量内容符合'旧字符串",则第一个旧字符串会被新字符串替换
${变量//旧字符串/新字符串}若变量内容符合"旧字符串",则全部的旧字符会被新字符串替换

 

 

命令别名设置alias, unalias

       alias的定义规则与变量定义规则几乎相同,所以只要在alias后面加上别名= '命令  参数……'

 

命令的查找顺序

(1)以相对或绝对路径招待命令

(2)由alias找到该命令来执行

(3)由bash内置的命令来执行

(4)通过$PATH这个变量的顺序找到的第一个命令来执行

 

login与non-login shell  

     login shell是指取得bash时需要完整的登录流程,non-login shell指取得bash接口的方法不需要重复的登录,如你以X Window登录Linux后,再以X的图形界面启动终端机,此时那个终端接口并没有需要再次输入账号与密码。只所以要区分这两种shell是因为它们读取的配置文件不同。

(1)/etc/profile是系统整体的设置,login shell才会读取。

(2)~/.bash-profile或~/.bash_login或~/.profile属于用户个人设置

 

终端环境设置:stty,set

 

数据流重定向

(1)标准输入:代码为0,使用<或<<;

(2)标准输出:代码为1,使用>或>>;

(3)标准错误输出:代码2,使用2>或2>>

1>:以覆盖的方法将正确的数据输出到指定的文件或设备上

1>>:以累加的方法将正确的数据输出到指定的文件或设备上

2>:以覆盖的方法将错误的数据输出到指定的文件或设备上

2>>:以累加的方法将错误的数据输出到指定的文件或设备上

 

命令执行情况说明
cmd1&&cmd2若cmd1执行完毕且正确执行,则开始执行cmd2
若cmd1执行完毕且为错误,则cmd2不执行
cmd1||cmd2若cmd1执行完毕且正确执行,则cmd2不执行
若cmd1执行完毕且为错误,则开始执行cmd2

 

cmd;cmd是一种不考虑命令相关性的连续命令执行。

 

管道命令

管道命令“|"仅能处理经由前面一个命令传来的正确信息,也就是standard ouput的信息,对于standard error并没有直接处理的能力,另外管道命令必须要能够接收来自前一个命令的数据成为standard input继续才行。其中的stdin与stdout可以利用减号来代替。

 

cut:主要用途在于将同一行里面的数据进行分解,

grep:分析一行信息,

sort:它可以帮我们进行排序,而且可以依据不同的数据类型来排序。

uniq:这个命令用来将重复的行删掉只显示一个

wc:计算输出的信息的整体数据

tee:会同时将数据流送于文件与屏幕。

tr:可以用来删除一段信息当中的文字,或者是进行文字信息的替换

split:用于切割文件

xargs:可以读入stdin的数据,并且以空格或断行字符进行分辨,将stdin的数据分割为arguments。由于很多命令并不支持管道命令,因此我们可以通过xargs来提供该命令引用standard  input之用。

 

通配符与特殊符号

符号意义 
*代表0个到无穷多个任意字符
?代表一定有一个字符
[]同样代表一定有一个在中括号内的字符
[-]若在括号有减号,代表在编码顺序内的所有字符
[^]eg.[^abc]代表一定有一个字符,只要是非a,b,c的其他字符就接受

 

第12章

通配符代表的是bash操作的一个功能,但正则表达式则是一种字符串处理的表示方式。

 

RE字符意义与范例
^word待查找的字符串在行首
word$查找的字符串在行尾
.代表一定有一个任意字符的字符
\转义字符,将特殊符号的特殊意义去除
*重得0个或无穷多个前一个字符
[list]从字符集list的RE字符里面找出想要选取的字符
[n1-n2]从字符集的RE字符里面找出想要选取的字符范围
[^list]从字符集的RE字符里面找出不要的字符串或范围
\{n,m\}连续n到m个的前一个RE字符,若为\{n\}则是连续n个前一个RE字符,
若为\{n,\}则是连续n个以上的前一个RE字符

扩展的正则表达式

RE字符意义与范例
+重复一个或一个以上的前一个RE字符
零个或一个的前一个RE字符
|用或的方式找出数个字符串
()找出组字符串
()+多个重复组的判别

 

第13章

shell script是利用shell的功能所写的一个程序,这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式、管道命令与数据流重定向等功能,以达到我们所想要的处理目的。

(1)命令的执行是从上到下,从左到右地分析与执行

(2)命令、参数间的多个空白都会被忽略掉,空白行也将被忽略掉

(3)如果读取到一个enter(CR),就尝试开始执行该行的命令

(4)如果一行的内容太多,则可以使用\enter续行

(5)#可作为批注

 

执行方法:

(1)绝对路径:eg. 使用/home/dmtsai/shell.sh来执行这个shell脚本

(2)相对路径:eg. 假设工作目录在/home/dmtsai,则使用./shell.sh来执行

(3)变量PATH的功能:将shell.sh放在PATH指定的目录内

(4)以bash进程来执行:如bash shell.sh

前3种方法需shell.sh有rx的权限,而第4种方法只要有r权限。在这几种执行方式中,script是在子进程的bash内执行的,当子进程完成后,子进程内的各项变量或操作将会结束而不会传回到父进程中。如果用source来执行脚本e.g. source shell.sh,那么就会在原进程的bash内执行。

 

利用test命令的测试功能

(1)文件类型的判断

测试标志代表意义
-e该文件名是否存在
-f该文件名是否存在且为文件
-d该文件名是否存在且为目录
-b该文件名是否存在且为一个block device设备
-c该文件名是否存在且为一个character device设备
-S该文件名是否存在且为一个Socket文件
-p该文件名是否存在且为一个FIFO文件
-L该文件是否存在且为一个连接文件

 

(2)关于文件的权限的检测

-r检测该文件名是否存在且具有“可读”权限
-w检测该文件名是否存在且具有“可写”权限
-x检测该文件名是否存在且具有"可执行"权限
-u检测该文件名是否存在且具有“SUID”权限
-g检测该文件名是否存在且具有“SGID”权限
-k检测该文件名是否存在且具有“Sticky bit”权限
-s检测该文件名是否存在且具有为“非空白文件”


(3)两个文件之间的比较

-nt判断file1是否比file2新
-ot判断file1是否比file2旧
-ef判断file1与file2是否为同一个文件,可用于判断hard link上。主要意义在于判断两个文件
是否均指向同一个inode


(4)两个整数之间的判断

-eq两数值相等
-ne两数值不等
-gtn1大于n2
-ltn1小于n2
-gen1大于等于n2
-len1小于等于n2

(5)多重条件判断

-a两个条件同时成立
-o任何一个条件成立
反向状态

 

中括号作为判断符号

由于中括号用在很多地方,所以如果要在bash的语法当中使用中括号作为shell的判断式,必须要注意中括号的两端需要有空格符来分隔。

 

shell script的默认变量

$#:代表后接的参数个数

$@:代表"$1" , "$2" , "$3" , "$4"之意,每个变量是独立的

$*:代表“$1c$2c$3c$4”,其中c为分隔符,默认为空格

 

if条件判断式

(1)

if [条件判断式]; then

       当条件判断式成立时,可以进行的命令工作内容;

fi   《==将if反过来写,结束if之意

(2)

if [条件判断式]; then

       当条件判断式成立时,可以进行的命令工作内容;

else

        当条件不成立时,可以进行的命令工作内容

fi   《==将if反过来写,结束if之意

(3)

if [条件判断式]; then

       当条件判断式成立时,可以进行的命令工作内容;

elif [条件二];then

        当条件二成立时,可以进行命令工作内容

fi   《==将if反过来写,结束if之意

 

常见网络端口号

80:www

22:ssh

21:ftp

25:mail

111:RPC(远程过程调用)

631:CUPS(打印服务功能)

 

case条件判断

case $variable in

  "第一个变量内容")

  程序段

;;

"第二个变量内容")

  程序段

;;

*)

  不包含第一个变量内容与第二个变量内容的其他程序执行段

exit 1

;;

esac

 

function功能

function(){

  程序段

}

function也是拥有内置变量的。它的内置变量与shell script很类似,函数名称代表$0,而后续的变量也是以$1,$2……来替换的。

 

while don done

while [condition]

do

      程序段落

done

 

until do done

until [condition]

do

     程序段落

done

与while相反,它说的是当condition条件成立时,就终止循环。

 

for do done

(1)

for var in con1 con2 con3 ...

do

       程序段

done

(2)

for( (初始值; 限制值; 执行步长) )

do

    程序段

done

 

第14章

当你输入账号密码后的操作流程

(1)先找寻/etc/passwd里面是否有你输入的账号,如果没有则跳出,如果有的话则将该账号对应的UID与GID(在/etc/group)读出来,另外,该账号的主文件夹与shell设置也一并读出

(2)再来则是核对密码表。这查Linux会进入/etc/shadow里面找出对应的账号与UID,然核对一下你刚才输入的密码与里面的密码是否相等。

(3)如果一切OK的话,就进入shell的控管的阶段

 

/etc/passwd文件结构

每一行代表一个账号,里面有很多本来系统账号,每一行使用“:”分隔字段,其有7个字段:

(1)账号名称

(2)密码

       因为这个文件的特性是所有有程序者可以读取,这样就很容易造成密码的窃取,所以后来这个字段的密码数据改到/etc/shadow中了,所以这里你会看到一个x。

(3)UID

ID范围该ID用户的特性
0(系统管理员)当UID是0时,代表这个账号是“系统管理员”!所以当你要让其他的账号名称也具
有root的权限时,将该账号的UID改为0即可。这也就是说,一个系统上面的系统
管理员不见得只有root。不过,不建议有多个账号的UID是0
1~499(系统账号)保留给系统使用的ID,其实除了0之外,其他的UID权限与特性并没有不一样。
由于系统上面启动的服务希望使用较小权限去执行,因此不希望使用root的身份
去执行这些服务,这些账号通常是不可登录的。
1~99:由distributions自行创建的系统账号
100~499:若用户有系统账号需求时,可以使用的账号UID
500~(可登录账号)给一般用户使用的。

(4)GID

(5)用户信息说明列

(6)主文件夹

(7)Shell

 

/etc/shadow文件结构       

(1)账号名称

(2)密码

       是经边编码的密码(加密)

(3)最近更动密码的日期

       以1970.1.1作为1而累加的日期

(4)密码不可被更动的天数

        这个限制是为了怕密码被某些人一改再改而设计的

(5)密码需要重新更的天数

(6)密码需要改期限前的警告天数

(7)密码过期后的账号宽限时间(密码失效日)              

       如果密码过期了,那么当你登录系统时,系统会强制要求你必须要重新设置密码才能登录继续使用,这就是密码过期特性。

(8)账号失效日期

      账号在此字段规定的日期之后,将无法再使用

(9)保留

 

/etc/group文件结构

(1)用户组名称

(2)用户组密码

      这个设置通常是给“用户组管理员"使用的,目前很少有这个机会设置用户组管理员。因为密码已经移入/etc/shadow,所以只会存一个x

(3)GID

(4)此用户组支持的账号名称

 

用效用户组与初始用户组

在/etc/passwd里面的第四列在的GID就是所谓的初始用户组,也就是说,当用户登录系统,立刻就会拥有的这个用户组的相关权限的意思,所以在/etc/group的第四个字段不需要写入该账号。

利用groups命令输出结果中,第一个输出的用户组即为有效有户组,使用newgrp可以切换有效有户组,但是要切换的用户组必须是你已经支持的用户组。

 

 

useradd:新建用户

passwd:密码设置

usermode:进行账号相关数据的微调

userdel:删除用户的相关数据

groupadd:新增用户组

groupmod:与usermode类似

groupdel:删除用户组

gpasswd:用户组管理员功能

 

ACL

ACL是Access Control List的缩写,主要的目的是提供传统的owner、group、others的read、write、execute权限之外的具体权限设置。ACL可以针对单一用户、单一文件或目录来进行r,w,x的权限设置,对于需要特殊权限的使用状况非常有帮助。

getfacl:取得某个文件或目录的ACL设置项目

setfacl:设置某个文件或目录的ACL项目

 

用户身份切换

(1)以"su-"直接将身份变成root即可,但是这个命令却需要root的密码,

(2)以“sudo命令”执行root的命令串,由于sudo需要事先设置妥当,且sudo需要输入用户自己的密码,因些对于多人共同管理的机器,sudo要比su来更好,至少root密码不会流出去。并不是所有的人都可以执行sudo,而是仅有/etc/sudoer内的用户才能够招待sudo。如果两次的sudo间隔超过5分钟,那就要重新输入一次你的密码。

 

特殊shell

系统账号的shell就是使用/sbin/nologin。

 

PAM

Pluggable Authentication Modules,嵌入式模块。PAM可以说是一套应用程序编程接口,它提供了一连串的验证机制,只要用户将验证阶段的需求告知PAM后 ,PAM就能够回报用户验证的结果(成功或失败)。

PAM通过一个与程序相同文件名的配置文件来进行一连串的认证需需求。eg当我们招待passwd后,这个程序调用PAM的流程是:

(1)用户开始执行/usr/bin/passwd这支程序,并输入密码

(2)passwd调用PAM模块进行验证

(3)PAM模块会到/etc/pam.d/中找寻与程序(passwd)同名的配置文件

(4)依据/etc/pam.d/passwd内的设置,引用相关的PAM模块逐步进行验证分析

(5)将验证结果回传给passwd这个程序

(6)passwd这支程序会根据PAM回传的结果决定下一个操作

 

/etc/pam.d/下的配置文件结构

其中任何以“#”开头的都是批注,而每一行都是一个独立的验证流程,每一行可以区分为三个字段:

(1)验证类型

  • auth,是authentication的缩写,所以这种类型主要用来检验用户的身份验证,常常需要密码来检验
  • account,大部分是在进行authorization,这种类型则主要在检验用户是否具有正确的权限
  • session,管理的就是用户在这次登录期间PAM所给予的环境设置。
  • password,这种类别主要用于提供验证的修订工作

这四种验证的类型 通常是有顺序的,不过也有例外。会有顺序的原因是,我们总是得要先验证身份(auth)后,系统才能够通过用户的身份给予适当的授权与权限设置(account),而且登录与注销间的环境才需设置,也才需要记录登录与注销的信息(session)。如查在运行期间需要更改密码时,才给予password的类型。

(2)验证的控制标志

  • required,此验证若成功则带有success的标志,若失败则带有failure的标志,但不论成功或失败都会继续后续的验证流程。
  • requisite,这个项目与required的最大区别在于失败的时候还要不要继续验证下去,requisite在验证失败后立刻回报原程序failure的标志
  • sufficient,若验证成功则立刻回传success给原程序,并终止后续的验证流程,若验证失败则带有failure标志并继续后续的验证流程。这与requisite正好相反
  • optinal,主要是显示信息而已,并不是用在验证方面

(3)PAM的模块与该模块的参数

/etc/pam.d/*:每个程序个别的PAM配置文件

/lib/security/* :PAM模块文件的实际放置目录

/etc/security/* :其他PAM环境的配置文件

/usr/share/doc/pam-*/ :详细的PAM说明文件

 

第15章

Quota

由于Linux是多作户、多任务的环境,所以会有多用户共同使用一个硬盘空间的情况发生,如果其中有少数几个用户大量占掉硬盘空间的话,那肯定影响其他用户的使用权限。因此管理员应该适当限制硬盘的空间给用户以妥善分配系统资源。

(1)仅能针对整个文件系统

(2)内核必须支持qutoa

(3)只对一般身份的用户有效

 

逻辑卷管理器(Logical Volume Manager)

LVM的重点在于可以弹性调整文件系统的容量,LVM可以整合多个物理分区在一起,让这些分区看起来像是一个磁盘一样,而且,还可以在将从LVM管理的磁盘当中删除某个物理分区。

(1)物理卷PV,PhysicalVolume

       我们实际分区需要调整系统标识符(System ID)成为8e(LVM的标识符),然后再经过pvcreate的命令将它转成LVM最底层的物理卷,之后才能够将这些PV加以利用。

(2)卷用户组VG,Volume Group

      所谓的LVM大磁盘就是将许多的PV整合成这个VG,所以VG就是LVM组合起来的大磁盘。因为每个VG最多仅能包含65534个PE而已,

(3)物理扩展块PE,Physical Extend

      它是整个LVM最小的存储块,也就是说,其实我们的文件数据都是由写入PE来处理的。

(4)逻辑卷LV,Logical Volume

      最终的VG还会被 切成LV,这个LV就是最可以被格式化使用的类似分区。

 

第16章

Linux工作调度的种类:at,cron

(1)at是个可以处理仅执行一次就结束调度的命令,不过要执行at时,必须要有atd这个服务的支持才行

(2)crontab这个命令所设置的工作将会循环一直进行下去。可循环的时间分为分钟、小时、每周、每月或每年等。除了可以用命令设置外,还可以编辑/etc/crontab

 

第17章

触发任何一个事件时,系统都会将它定义成为一个进程,并且给予这个进程一个ID,称为PID,同时依据触发这个进程的用户与相关属性关系,给予这个PID一组有效的权限设置。

 

fork and exec:过程调用的流程

       Linux的过程调用中通常称为fork-and-exec流程!进程都会通过父进程以复制(fork)的方式产生一个一模一样的子进程,然后被复制出来的子进程再以exec的方式来招待实际要进行的进程,最终就成为一个子进程的存在。

 

工作管理

在进行工作管理的行为中,其实每个工作都是目前bash的子进程,即彼此之间是有相关性的。我们无法以job control的方式由tty1的环境去管理tty2的bash。要进行bash的job control必须要注意到的限制是:

(1)这些工作所触发的进程必须来自你的shell子进程

(2)前台:你可以控制与执行命令的这个环境称为前台的工作

(3)后台:可以自行运行的工作,你无法使用ctrl+c终止它,可以使用bg/fg调用该工作

(4)后台中的进程不能等待terminal或shell的输入。

  • 我们在输入一个命令后,在该命令的最后面加上一人上“&”代表将命令丢到后面中
  • ctrl+z暂停可以把目前的工作放入后台
  • 利用jobs可以查看目前的后台工作状态
  • 使用fg可以将后台工作拿到前台来处理
  • 使用bg可以让工作在后台下的状态变成运行中
  • kill可以结束后台工作

进程管理

查阅进程可以利用静态的ps或者动态的top,还能以pstree来查阅程序树之间的关系。

(1)ps -l

  • F:代表这个进程标志,说明这个进程的权限
  • S:代表这个进程的状态,主要的状态有:R,正在运行中;S,睡眠状态;D,不可唤醒的睡眠状态,可能是在等待IO;T,停止状态;Z,僵尸状态,进程已经终止但却会法删除至内存外
  • UID/PID/PPID
  • C:代表CPU的使用率,单位%
  • PRI/NI:Priority、Nice的缩写,代表此进程的CPU所执行的优先级,数值越小代表该进程越快被CPU执行。
  • ADDR/SZ/WCHAN:ADDR是kernel function,指出该进程在内存的哪个部,如果是个running的进程,一般显示"-";SZ代表此进程用掉多少内存;WCHAN表示目前进程是否运行中
  • TTY
  • TIME:使用掉的CPU时间
  • CMD:造成此程序的触发进程的命令为何

(2)ps aux

  • USER:该进程属于哪个用户账号
  • PID
  • %CPU:该进程用掉的CPU资源百分比
  • %MEM
  • VSZ:用掉的虚拟内存量
  • RSS:占用的固定内存量
  • TTY
  • STAT:该进程目前的状态,与ps -l的S标识相同
  • START
  • TIME
  • COMMAND

(3)nice

PRI(new)=PRI(old)+nice

  • nice值的可调整范围为-20~19
  • root可随意调用自己的或他人的进程的nice值
  • 一般用户可有调整自己进程的nice值,且范围为0~19

free:查看内存使用情况

uname:查看系统与内核的相关信息

uptime:查看系统启动时间与工作负载

netstat:跟踪网络

dmesg:分析内核产生的信息

vmstat:检测系统资源变化

 

第18章  

daemon的主要分类

(1)stand_alone:此daemon可以自行单独启动服务,stand alone的daemon响应速度较快

(2)super daemon:一个特殊的daemon来统一管理

 

daemon的启动脚本与启动方式

(1)/etc/init.d/*:启动脚本放置处

系统上几乎所有的服务启动脚本都放置在这里。

(2)/etc/sysconfig/*:各服务的初始化环境配置文件

几乎所有的服务都会将初始化的一些参数设置写入到这个目录上

(3)/etc/xinetd.conf和/etc/xinetd.d/*

super daemon的主要配置文件为/etc/xinetd.conf,不过因为super daemon只是一个统一的管理机制,它所管理的其他daemon的设置则写在/etc/xinetd.d/*里面

(4)/etc/*:各服务各自的配置文件

(5)/var/lib/*:一些会产生数据的服务会将它的数据写入到/var/lib/目录下

(6)/var/run/*:各服务的程序的PID记录处

 

第19章

Linux常见的日志文件名

日志文件的权限通常是设置为仅有root能够读取而已

(1)/var/log/cron

关联于crontab

(2)/var/log/dmesg

记录系统开机的时候内核检测过程所产生的各项信息

(3)/var/log/lastlog

可以记录系统上面所有的账号最近一次登录系统时的相关信息

(4)/var/log/maillog或/var/log/mail/*

主要记录sendmail(SMTP协议提供者)与dovecot(POP3协议提供者)所产生的信息

(5)/var/log/messages

几乎系统发生的错误信息(或者重要的信息)都会记录在这个文件中

(5)/var/log/secure

基本上,只要牵涉到需要输入账号密码的软件,那么当登录进都会被记录在此文件中

(6)/var/log/wtmp,/var/log/failog

记录正确登录系统者的账户信息与错误登录时所使用的账户信息

(7)/var/log/httpd/*, /var/log/news/*, /var/log/samba/*

 

第20章 

简单来说,系统启动的过程如下:

(1)加载BIOS的硬件信息与进行自我测试,并依据设置取得第一个可启动的设备

(2)读取并执行第一个启动设备内的MBR的boot loader

(3)依据boot loader的设置加载kernel,kernel会开始检测硬件与加载驱动程序

(4)在硬件驱动成功后,kernel会主动调用init进程,而init会取得run-level信息

(5)init执行/etc/rc.d/rc.sysinit文件来准备软件执行的操作环境

(6)init执行run-level的各个服务的启动

(7)init执行/etc/rc.d/rc.local文件

(8)init招待终端机模拟程序mingetty来启动login进程,最后就等待用户登录

 

BIOS

bios程序会去加载CMOS的信息,并且通过CMOS内的调置取得主机的各项硬件配置,例如CPU与接口设备的通信频率,启动设备的查找顺序、硬盘的大小与类型、系统时间、各周边总线是否启动PnP(即插即用)、各接口设备的IO地址以及与CPU通信的IRQ中断的信息。BIOS还会进行开机自检(Power-on self Test,POST),然后开始进行启动设备的数据读取了。只要BIOS能够检测得到你的磁盘,那么它就有办法通过INI13这条信道来读取该磁盘的第一个扇区内的MBR。

 

boot loader

boot loader可以加载kernel与initrd,kernel会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测的硬件信息,内核文件会被放在/boot里面并且取名为/boot/vmlinuz。虚拟文件系统一般使用文件名为/boot/initrd,这个文件的特色是,它也能够通过boot loader来加载到内存中,然后这个文件会被解压缩并在内存当中仿真成一个根目录,且此仿真在内存当中的文件系统能够提供一个可执行的程序,通过该程序来加载启动过程中所需要的内核模块,通常这些模块就是USB,RAID,LVM,SCSI等文件系统与磁盘接口的驱动程序。等加载完成后,会帮助内核重新调用/sbin/init来开始后续的正常启动流程。

 

/sbin/init

最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设置、语系处理、文件系统格式及其他服务的启动等。而所有这些操作都会通过init的配置文件,即/etc/inittab来规划,而其中一个很重要的设置选项就是run level(启动执行等级)

基本上,依据有无网络与有无X Window而将run level分为7个等级:

(1)0 - halt(系统直接关机)

(2)1 - single user mode(单用户维护模式,用在系统出问题时的维护)

(3)2 - Multi-user,without NFS(类似下面的runlevel3,但无NFS服务)

(4)3 - Full multi-user mode(完整含有网络功能的纯文本模式)

(5)4 - unused (系统保留功能)

(6)5 - X11(与runlevel3类似,但加载使用X window)

(7)6 - reboot

 

/etc/rc.d/rc.sysinit

/sbin/init会利用这个脚本来设置系统环境

(1)取得网络环境与主机类型

(2)测试与挂载内存设备/proc及USB设备的/sys

(3)决定是否启动SElinux

(4)启动系统的随机数生成器

(5)设置显示于启动过程中的欢迎界面

(6)设置显示于启动过程中的欢迎往界面

(7)调协系统时间与时区设置:需要读取/etc/sysconfig/clock设置

(8)接口设备的检测与Pnp参数测试

(9)用户自定义模块的加载

(10)加载内核的相关设置

(11)设置主机名与初始化电源管理模块

(12)初始化软件磁盘阵列:主要是通过/etc/mdadm.conf来设置好的

(13)初始化LVM的文件系统功能

(14)以fsck检验磁盘的文件系统

(15)进行quota转换

(16)重新以可读写模式挂载系统磁盘

(17)启动quota功能

(18)启动系统伪随机数生成器

(19)清除启动过程当中的临时文件

(20)将启动相关信息加载/var/log/dmesg文件中

 

最后欢迎大家访问我的个人网站: 1024s

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值