个人表示,每次看电子档,都会从头开始读,话说会一直读不完。以前会有手抄板的读书笔记,但是不方便携带。现在就开始电子档的读书笔记吧。


1. Kernel 必须管理的事项有:

* 系统呼叫接口(system call interface)

* 行程管理(Process control)

* 内存管理(Memory mangement) : 控制整个系统的内存管理

* 档案系统管理(File system management)

* 装置的驱动(Device drivers)

2. Linux就是一个操作系统,这个操作系统里面含有最主要的Kernel以及Kernel提供的工具。他提供了一个完整的操作系统当中最底层的硬件控制与资源管理的完整架构,这个架构是沿袭Unix良好的传统来的,所以相当的稳定而功能强大。


3. GPL : General Public License 通用公共许可证

GNU's Not Unix

4. LInux的优点:

* 稳定的系统

* 免费或少许费用

* 安全性、漏洞的快速修补

* 多任务、多使用者

* 使用者与群组的规划

* 相对比较不耗资源的系统

* 适合需要小核心程序的嵌入式系统

Linux可以改进的地方:

* 没有特定的支持厂商

* 图形接口做的还不够好


5. 服务器(server):提供Internet 一种以上的网络服务的主机,

    工作站(workstation) : 基本上, 工作站可以视为仅提供一群特定人士, 作为数值分析、科学用途的机器。 工作站与服务器的差别,大概在于有没有提供Internet上面的服务而已。

    终端机(Terminal) : 就是end_user前面的那部计算机。

6. 常见授权模式

* open source: 表示软件释放时,一定伴随着原始码的释放,

7. Linux 是什么?

简单的说, Linux就是一个操作系统,或者说, LInux是操作系统最底层的核心。这个核心可以管理整个计算机硬件,让计算机硬件可以完整的运作起来,并等待使用者输入指令。最早Linux是由Torvalds在1991年写出来的,后来由于他承接了Unix的良好传统:稳定性高、多人多任务的环境设计优良、要求配备较低等优点,所以很多软件开发商在这个核心上面开发,而某些厂商将这些软件与核心整合成为可以完整安装的光盘,而成为目前大家常常听到的Linux操作系统了。


* close source:程序的核心是封闭的,优点是有专人维护。




8. 上面是POSIX?为何说Linux使用POSIX对于发展有很好的影响?

POSIX是一种标准规范,主要针对在Linux操作系统上面跑的程序进行规范。若你的操作系统符合POSIX,则符合POSIX的程序就可以在你的操作系统上面运行。Linux由于支持POSIX,因此很多Unix上的程序可以直接在Linux上运行,因此程序的移植相当简单!也让大家容易换平台,提升Linux的使用率。

9. X_Window只是Linux上面的软件,并不是一套 操作系统。

10. 什么是LDP?全名是什么?网址在哪里?

LDP是Linux Documentation Project 的缩写,内容提到的是Linux操作系统的各个How_To以及相关的说明文件如 man page等等。网站在http://www.tldp.org。

11. 各个组件或装置在Linux底下都是一个档案!

12. CPU 

外频: 是CPU与接口设备 进行数据传输/运算的速度。

倍频: 是CPU本身运算的时候加上去的一个运算速度。

CPU的频率:外频和倍频相乘。


13. BIOS:是Basic Input/Output System 


14. 各硬件置在Linux中的代号

IDE硬盘机----------     /dev/hd[a-d]

SCSI硬盘机 ——————/dev/sd[a-p]

USB随身碟 ——————   /dev/sd[a-p] (与SCSI硬盘一样)

CDROM --——————    /dev/cdrom

软盘机    —————— /dev/fd[0-1]

打印机 —————— /dev/lp[0-2]

鼠标 ——————/dev/mouse

磁带机 —————— /dev/ht0(IDE) 或 /dev/st0 (SCSI界面)


15. 选择适当的distributions,  每个版本都有比较特别适合的使用群。举例来说, Ubuntu 就比较适合桌上型计算机使用,因为他的X Window整合的很好。Red Hat Enterprise Linux 与SuSE Enterprise Linux Server 机比较适合企业的Linux主机,因为他们的系统服务整合的比较好。

16. 多重开机选单:就是在系统开机时,可以让你选择进入到哪一种操作系统的程序。

17. 在预设情况下, LInux的操作系统都是摆在/usr/ 当中, 使用者的信息都是在/home下, /var底下是记录所以预设服务器的登录档, 且mail 与WWW预设的路径也在/var下。

18. 在硬盘里面有分为两个区域,一个是放置这个硬盘的信息区,我们称为Master Boot Recorder,MBR(主要开机扇区),一个则是实际档案数据放置的地方。MBR可以说是整个硬盘最重要的地方了,因为在MBR里面记录了两个重要的东西,分别是: 开机管理程序,与磁盘分割表(partition table)。因此,只要MBR物理实体坏掉了,那么这颗硬盘就差不多要报废了!因为,如果系统找不到partition table,就无法使用这块硬盘,所以数据即使没有丢掉,但是没有MBR,呵呵,还是不能使用的啦!

19. Linux的目录配置以 树状目录  来配置,至于磁盘分割区(partition) 则需要与树状目录相配合! 请问, 在预设的情况下,在安装的时候系统会要求你一定要分割出来的两个partition为何?

就是根目录【/】与虚拟内存[Swap]

20. 一般而言,在RAM为64MB或128MB的系统中,swap要开多大?

Swap可以简单的想成是虚拟内存,通常他的建议大小为RAM的两倍,但是实际上还是得视你的主机规格配备与用途而定。约两倍的RAM,亦即为128MB或256MB,可获得较佳效能!

21. Primary——主分割 Extended——延伸分割

一颗硬盘最多可以有4个Primary+Extended的扇区,其中,Extended只能有一个。因此,你如果要分割成四块磁盘分割的话,那么最多就是可以:

P+P+P+P P+P+P+E

本身Extended是不能在任何系统上面被使用的,还需要再额外的将Extended分割成Logical(逻辑)分割才能被使用。

在Linux下,已经将partition table1-4预留下来了。

22. Linux预设的档案格式是Ext2, 但是更新的Ext3档案格式中,提供了更多的日志式记录功能。

23. 以Lilo或grub设定多重开机

24. 通常在安装Linux 的时候,最重要的就是磁盘分割了!请问:磁盘分割通常要分成几个步骤?

1. 进行磁盘分割partition

2. 进行格式 format

25. 重启 X Window?

在X Window的画面中直接按下 Alt + Ctrl + Backspace ,亦即退格键

26. 在Linux下面称文字模式为 终端机接口, terminal 或console。Linux预设的情况下,会提供六个Terminal来让使用者登入,同时,系统为了判断,会将F1~F6定义为tty1~tty6的操作接口环境。

Ctrl + Alt + F1~F6 : 文字接口登入tty1 ~tty6 终端机

Ctrl + Alt + F7 : 图形接口界面

27. [root@linux ~]# _

最左侧的root显示的是 目前使用者的账号 , 而@之后接的Linux则是 主机名称, 至于最右边的~ 则指的是目前所在的目录, #则是提示字符

提示字符方面, 在Linux当中,预设root的提示字符为#, 而一般身份使用者的提示字符为$

28. 一个称职的网络/系统管理人员,通常都会有两个账号,平时以自己的一般账号来使用Linux主机的任何资源,有需要动用到系统功能修订时,才会换身份成为root。

29. 注销Linux

[root@linux ~]# exit

30. shell 提供我们使用者一些工具,可以透过这个工具,来控制Kernel的动作

31. [root@linux ~]# command [-options] parameter1 parameter2 ...

指令         选项        参数(1)          参数(2)

说明:

0. 一行指令中第一个输入的绝对是『指令(command)』或『可执行档案』

1. command 为指令的名称,例如变换路径的指令为 cd 等等;

2. 中刮号[]并不存在于实际的指令中,而加入参数设定时,通常为 - 号,例如 -h;

有时候完整参数名称会输入 -- 符号,例如 --help;

3. parameter1 parameter2.. 为依附在 option 后面的参数,或者是 command 的参数;

4. command, -options, parameter1.. 这几个咚咚中间以空格来区分,不论空几格 shell 都视为一格;

5. 按下 [Enter] 按键后,该指令就立即执行。[Enter] 按键为 <CR> 字符,他代表着一行指令的开始启动。

6. 指令太长的时候,可以使用 \ 符号来跳脱 [Enter] 符号,使指令连续到下一行。注意! \ 后就立刻接特殊字符。

其它:

a. 在 Linux 系统中,英文大小写字母是不一样的。举例来说, cd 与 CD 并不同。

b. 更多的介绍等到 bash 时,再来详述。

31. 基础指令操作

显示日期的指令:date

[root@linux ~]#date

Thu Jun 23 11:32:02 CST 2005

[root@linux ~]# date +%Y/%m/%d

2005/06/23

[root@linux ~]# date +%H:%M

11:35

显示日历的指令:cal

[root@linux ~]# cal

June 2005      -- 显示当月的月历

cal 的语法为:

[root@linux ~]# cal [month] [year]

简单好用的计算器:bc

[root@linux ~]# bc

bc 1.06

Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation, Inc.

This is free software with ABSOLUTELY NO WARRANTY.

For details type `warranty'.

_<==这个时候,光标会停留在这里等待您的输入


• + 加法

• - 减法

• * 乘法

• / 除法

• ^ 指数

• % 余数

32. 几个重要的热键

Tab

• [Tab] 接在一串指令的第一个字的后面,则为命令补全;

• [Tab] 接在一串指令的第二个字以后时,则为『档案补齐』!


Ctrl + c

中断当前程序的按键


Ctrl + d

代表 键盘输入结束的意思, 也可以取代 exit 

33. man  

manual 操作说明 ,查询指令或相关档案的用法

基本上, man page 大致分成底下这几个部分:



man page 常用按键


34.  info page

Linux提供的在线 查询指令或者是档案

info page 当中可以使用的按键


35. 数据同步写入磁盘 sync

这个指令在系统关机或者重新开机之前, 最好多执行几次!

注意: 这个指令只有root可以执行

36. 关机指令 shutdown

只有root有权利关机

参数:

-t sec : -t 后面加秒数, 即 过几秒后关机的意思

-k : 不要真的关机,只是发送警告讯息出去

-r :在将系统的服务停到之后就重新开机

-h  : 将系统的服务停掉后, 立即关机

-n : 不进过init 程序,直接以shutdown 的功能来关机

-f : 关机并开机后,强制略过fsck 的磁盘检查

-F : 系统重新开机之后,强制进行fsck 的磁盘检查

-c :取消已经在进行的shutdown指令内容

注意: 时间参数务必加入,否则会跳入run_level1(单人维护的登入模式)

37. 重新开机, 关机: reboot, halt, poweroff

reboot 其实与shutdown -r now 几乎相同

38. 预设情况下,所有的系统上的账号与一般身份使用者,还有root相关信息,都记录在/ect/passwd 这个档案中。

密码记录在/ect/shadow 这个档案下

Linux所有的群组名称都记录在/ect/group 内。

39. ls : list 的意思

ls -al

40. 档案属性




第一个属性代表这个档案是【目录、档案或者连结文件等等】

*当为【d】 则是 目录

*当为【-】 则是 档案

* 当为【l】 则是 连结档(link file)

*  当为【b】则是 为装置文件里面的可供存储的接口设备

* 当为【c】则是 为装置文件里面的串行端口设备,例如鼠标、键盘


接下来的属性中,三个为一组,且均为【rwx】的三个参数的组合。

【r】 代表 可读 read

【w】代表 可写 write

【x】代表 可执行 excute

*第一组 为【拥有人的权限】

*第二组为【同群组的权限】

*第三组为【其他非本群组的权限】

注意: 【x】 与【目录】的关系相当重要,如果你在一个目录下面不能执行任何指令的话,那么自然就无法进入了。因此,需要特别留意的是,如果你想开放一个目录让一些人进来的话,请记得将该目录的【x】属性给开放啦。


41. 数字类型改变档案权限

Linux 档案的基本属性就有九个,分别是owner/group/others组别的read/write/excute属性,例如:-rwxrwxrwx ,

这九个属性是三个三个一组的!

我们可以使用数字来代表各个属性,各属性的对照表如下:

r: 4

w:2

x: 1

同一组(owner/group/others)的三个属性(r/w/x)是需要累加的,例如当属性为 -rwxrwx--- ,则是

owner = rwx = 4+2+1 = 7

group = rwx = 4+2+1 = 7

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

所以该属性的数字就是770


42. Linux 档案种类

  * 正规档案(regular file)

a. 纯文字文件(ASCII) :可以使用cat + 文件名来读取档案内容

b. 二进制文件(binary):可执行文件

c. 数据格式文件(data):  last +文件名,cat +文件读出来的是乱码

   * 目录(directory): 第一个属性是d, 如:[drwxrwxrwx]

  * 连结档(link):类似于Windows下的快捷方式,第一个属性是l, 如[lrwxrwxrwx]

  *设备与装置文件(device):在/dev目录下

a. 区块(block)设备档:就是硬盘,例如:/dev/hda1, 第一个属性为 b

b. 字符(character)设备档:串行接口设备,第一个属性为 c

  *资料接口文件(socket):第一个属性为s, 常在/var/run 目录中看到这类文件

  *文件输送文件(FIFO,pipe):目的在于解决多个程序同时存取一个档案造成的错误。第一个属性为p


43. Linux 档案副档名

.ssh

*Z, *.tar,  *.tar.gz, *.zip, *.tgz

44. 当文件名称以. 开头的话,这个档案为隐藏档

45. Linux目录配置的依据 FHS

FHS:Filesystem Hierarchy Standard

/etc :放置设定档

/bin 与/sbin: 放置可执行挡

/var/log :放置系统登录文件

/usr/share :放置共享数据

46. 目录树(directory tree)的主要特性

* 目录树的起始点为根目录(/, root)

* 每一个目录不止能使用本地端的partition 的档案系统,也可以使用网络上的filesystem。 举例来说,可以利用Network File System(NFS) 服务器挂载某特定目录等

* 每一个档案在此目录树种的文件名(包含完整路径)都是独一无二的。

47. 绝对路径:由根目录(/)开始写起的文件名或目录名称,例如/home/dmtsai/.bashrc;

相对路径:开头不是/就属于相对路径的写法,相对路径是以  您当前所在路径的相对位置来表示的

48. 特殊目录

. : 代表当前的目录,也可以使用./来表示

.. : 代表上一层目录, 也可以用../来代表

49. Tips

这个root 在LInux里面的意义真的很多很多,躲到让人真搞不懂那是啥玩意。

如果以 账号 的角度来看,所谓的root指的是 系统管理员 的身份, 

如果以 目录 的角度来看,所谓的root意即 指的是根目录,就是/

50. 根目录root(/),一般建议在根目录底下只接目录,不要只接有档案在/底下。根目录是开机的时候系统第一个挂载的partition,所以,所以开机过程会用到的档案,应该都要放置在这个partition当中。举例来说,/etc, /bin, /dev, /lib,/sbin 这五个次目录都应该要与根目录连在一起,不可独立成为某个partition。

51. /home: 这是系统预设的使用者家目录(home directory).

~ : 代表目前这个使用者的家目录

~dmtsai: 代表dmtsai 的家目录

52. Linux 的 EXT2 档案系统( inode ):

ext2 有一下特点:

* Blocks和inodes 在一开始格式化时(format)就已经固定了

* 一个partition能够容纳的档案数与iNode有关

*一般来说,每4Kbytes 的硬盘空间分配一个iNode

*一个iNode的大小为128 bytes

* Block为固定大小,目前支持1024/2048/4096 

* block越大,则损耗的硬盘空间也越多

*关于单一档案

若 block size= 1024, 最大容量为16GB, 若block size=4096, 容量最大为2TB

*关于整个partition

若 block size= 1024, 最大容量为2TB, 若block size=4096, 容量最大为32TB

* 文件名最长达255字符,完整文件名长达4096字符


53. df [-ahikHTm] [目录或文件名]

显示目前磁盘最大容许容量、已经使用掉的容量、目前所知目录已使用容量等

54. du [-ahskm] 档案或目录名称

列出档案或目录容量

当直接输入du没有加任何参数时,则du 会分析 目前所在目录 的档案与目录所占用的硬盘空间

55. ln 连结档

连结档有点类似Windows下面的快捷方式,也就是很多连结档案(link file)其实都指向同一个来源档案(source file)。

连结档分为hard link和 symbolic link两种

Hard link (硬式连结或实际连结)限制:

* 不能跨filesystem

* 不能link目录

Sysmbolic link(符号连结,亦即是快捷方式)

symbolic link就是在建立一个独立的档案,而这个档案会让数据的读取指向他link的那个档案内容。由于只是利用档案来做为指向的动作,所以,当来源档被删除之后,symbolic link的档案就会开不了,会一直说【无法开启某档案!】

[root@linux ~]# ln [-sf] 来源文件 目标文件

参数:

-s :如果 ln 不加任何参数就进行连结,那就是hard link,至于 -s 就是symbolic link

-f :如果 目标文件 存在时,就主动的将目标文件直接移除后再建立!


56. fdisk -l 查看所有partition

fdisk 只有root才可以执行。另外,使用的【装置名称】不要加数字

57. 磁盘格式化

mk32fs [-bicLj] 装置名称

58.fsck [-AtCary] 装置名称 检测与修正硬盘错误指令

59. badblocks -[svw] 装置名称 用来检查硬盘或软盘扇区有没有坏轨的指令


60. 磁盘挂载和卸载

所谓的[挂载点]则是该partition所在的目录,且在该目录下的所有目录都归在该partition所有。

mount -a

mount -[tonL] 装置名称代号 挂载点


mount -t vboxsf share/media/sf_nginx语句让windows下的share挂载到Linux下的/media/sf_nginx目录下面


61.强调一个观念,在Windows下面,磁盘分割是以A,B,C,D等等的方式来划分,然而在Linux或Unix系统之下,却是以目录来代表。也就是说,一个目录很可能就是一个扇区了。


62. 挂载软盘

使用软盘完毕之后,一定要将/media/floppy卸载之后才可以取出软盘片。不然系统会一直告诉你发生错误。而在卸载/media/floppy的时候,一定不能在该目录底下,否则会发生错误信息


63. 系统挂载的一些限制

* 根目录 / 是必须挂载的,而且一定要先于其他mount point被挂载进来

* 其他mount point必须为已建立的目录,可任意指定,但一定要遵守必须的系统目录架构原则

* 所以mount point 在同一时间内,只能挂载一次

* 所有partition在同一时间内,只能挂载一次

* 如若进行卸载,必须先将工作目录移到mount point(及其子目录)之外

64. 开机挂载/etc/fstab 及 /etc/mtab

/etc/fstab就是将我们使用mount来挂载一个装置到系统的某个挂载点,所需要下达的指令内容,将这些内容通通写到/etc/fstab里面去,让系统以开机就主动挂载


65.挂载点(mount point):一定是目录



Linux 档案和目录管理


66. 绝对路径:路径的写法[一定由根目录 / 写起 ]

相对路径:路径的写法[不是由 / 写起], 相对路径意指[相对于目前工作目录的路径]


67. . 代表此层目录

.. 代表上一层目录

- 代表前一个工作目录

~代表[ 目前使用者身份]所在的家目录

~account 代表account这个使用者的家目录


注意:根目录的顶层(..)和他自己(.)是同一个目录


68.常见处理目录的指令

cd :变换目录 cd 是change directory的缩写,就是变换工作目录

注意:目录名称与cd指令直接有一个空格

pwd: 显示目前的目录

pwd [-P]: 显示出确实的路径,而非使用连结(link)路径

pwd 是print working directory的缩写


mkdir:建立一个新的目录

mkdir: make directory

mkdir [-mp] 目录名称

-m: 设定档案的权限,直接设定,不需要看预设权限(umask)的脸色

-p:帮助你直接将所需的目录递归建立起来


rmdir: 删除一个空的目录

rmdir [-p] 目录名称

-p: 连同上层[空的] 目录也一起删掉

使用 rmdir,需要注意的是,目录要一层一层的删除才可以,而且被删除的目录里面必定不能还有其他的目录或档案!

如果要将所有目录下的东西都删掉,必须用 rm -rf 目录名称


69.文件路径的变量:$PATH

$表示后面接的是变量


70.档案与目录的检视:ls

ls [-aAdfFhilRS] 目录名称

ls [--color={none, auto, always}] 目录名称

ls [--full-time] 目录名称

ls 默认显示的只有:非隐藏档的档名、以档名进行排序及文件名代码的颜色显示


ll : 也就是ls -l 的别名


71. cp: 复制档案或目录

cp: copy

cp [-adfilprsu] 来源档( source) 目的档(destination)

cp [options] source1source2source3 ... directory

注意:如果来源档有两个以上,则最后一个目的文件一定是目录


默认条件下,cp 的来源档与目的档的权限是不同的,目的档的拥有者通常会是指令操作者本身


72. rm (移除档案或目录)

rm [-fir] 档案或目录


73. mv (移动档案或目录,或更名)

mv [-fiu] source destination

mv [options] source1 source2 source3 ... directory


在Linux才有的指令当中,有个rename,可以用来更改大量档案的档名


74. 取得路径的文件名称与目录名称

[root@localhost tmp]#basename/etc/sysconfig/network

network

[root@localhost tmp]# dirname /etc/sysconfig/network

/etc/sysconfig


75. 档案内容查阅

cat : 由第一行开始显示档案内容

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

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

more : 一页一页的显示档案内容

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

head: 只看头几行

tail : 只看尾巴几行

od : 以二进制的方式读取档案内容


76. 直接检视档案内容

直接查阅一个档案的内容可以使用 cat/tac/nl 这几个指令


cat( concatenate)

cat [-AEnTv]

cat 是concatenate(连续)的简写,主要的功能是将一个档案的内容连续的印出在屏幕上面


tac(反向列示)

cat 是由【第一行到最后一行连续显示在屏幕上】, 而tac 则是【由最后一行到第一行反向在屏幕上显示出来】


nl(添加行号打印)

nl [-bnw] 档案


77. 可翻页检视

more(一页一页翻动)

在more这个程序的运作过程中,有几个按键可以按:

空格键(space) : 代表向下翻一页

Enter :代表向下翻一行

/字符串 :代表在这个显示的内容当中,向下搜寻【字符串】

:f : 立刻显示出文件名以及目前显示的行数

q : 代表立刻离开more,不再显示该档案内容



78. less (一页一页翻动)

空格键:向下翻动一页

【pagedown】:向下翻动一页

【pageup】: 向上翻动一页

/字符串 : 向下搜寻【字符串】的功能

?字符串 : 向上搜寻【字符串】的功能

n: 重复前一个搜寻(与/ 或?有关)

N : 反向的重复前一个搜寻(与/ 或?有关)

q: 离开less 这个程序


79. 资料撷取

head (取出前面几行)

head 【-n number】 档案


tail (取出后面几行)

tail [-n number] 档案


od 非纯文件文件

od [-t TYPE] 档案



80. 修改档案时间与新置新档:touch

每个档案在Linux底下都会记录三个主要的变动时间:

* modification time(mtime):当该档案的【内容数据】变更时,就会更新这个时间!内容数据指的是档案的内容,而不是档案的属性

* status time(ctime):当档案的【状态(status)】改变时,就会更新这个时间。举例来说,像是权限与属性被改变了,就会更新这个时间

*access time(atime): 当【档案的内容被取用】时,就会更新这个读取时间(access),举例来说,我们使用cat去读取~/.bashrc,就会更新atime了


touch [-acdmt] 档案


注意的是:技术我们复制一个档案时,复制所有的属性,但是也没办法复制ctime这个属性。ctime可以记录这个档案最近的状态(status)被改变的时间。

但是档案属性中,比较重要的还是mtime, 我们常常关心的是这个档案的内容是什么时候被改动的。


touch这个指令最常被使用的情况是:

* 建立一个空的档案

* 将某个档案日期修订为目前(mtime and atime)


81.档案与目录的预设权限与隐藏权限

chown [-cfhvR] [--help] [--version] usrs [:group] file...

通过chown改变文件的拥有者和群组。在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。

chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID;文件是以空格分开的要改变权限的文件列表,支持通配符。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。


chmod 修改文件和文件夹读写执行属性


档案预设权限: umask

umask就是指定【目前使用者在建立档案或目录时候的属性默认值】

两种方式查看

* umask

* umask -S


在预设权限的属性上,目录与档案是不一样的。由于档案我们不希望他具有可执行的权利,预设情况下,档案是没有可执行(x)权限的。因此:

* 若使用者建立为【档案】则预设【没有可执行(x)项目】,亦即只有rw 这两个项目,也就是最大为666分,预设属性为:-rw-rw-rw-

*若使用者建立为【目录】,则由于x与是否可以进入此目录有关,因此预设为所有权限均开放,亦即为777分, 预设属性为:drwxrwxrwx


umask指的是【该默认值需要减掉的权限】!


82. 档案隐藏属性

chattr(设定档案隐藏属性)

chattr [+-=] [ASacdistu] 档案或目录名称


最重要的是+i 这个属性,他可以让一个档案无法被改动


lsattr(显示档案隐藏属性)

lsattr [-aR] 档案或目录


档案特殊权限:SUID/SGID/Sticky Bit

Set UID 简称 SUID

SUID仅可以用在【二进制档案(binary-file)】上,SUID因为是程序在执行的过程中拥有档案拥有者的权限,因此,它仅可用于binary file


Set GID 简称SGID

SGID可以用在档案和目录

*档案: 如果SGID是设定在binary file上,则不论使用者是谁,在执行该程序的时候,他的有效群组(effective group)将会变成该程序的群组所有人(group id)

* 目录:如果SGID是设定在A目录上,则在该A目录内所建立的档案或目录的group,将会是此A目录的group


Sticky Bit

SBit目前只针对于目录有效。

SBit对于目录的作用是:在具有SBit的目录下,使用者若在该目录下具有w及x的权限,则当使用者在该目录下建立档案或目录时,只有档案拥有者与root才有权利删除


4 为SUID

2 为SGID,

1 为Sticky bit


83. 档案类型:file

如果想知道某个档案的基本数据,例如是属于ASCII或者是data档案,或者是binary,且其中有没有使用到动态函式库(share library)等信息,用file指令


84. 档案的搜寻

find 直接搜寻硬盘,速度慢。 whereis 与locate是利用数据库来搜寻数据,速度快


which(寻找【执行挡】)

which [-a] command


whereis(寻找特定档案)

whereis [-bmsu] 档案或目录名


Linux系统会将系统内的所有档案都记录在一个数据库档案里面,而当使用whereis或locate时,都会以此数据库档案的内容为准


locate

locate filename(档案的部分名称)


find 查找档案

find [path] [option] [action]



第十二章

档案的压缩与打包


85. 常见压缩档案的副档名

*.Z :compress 程序压缩的档案

*.bz2 :bzip2程序压缩的档案

*.gz : gzip程序压缩的档案

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

*.tar.gztar程序打包的数据,其中并且经过gzip 的压缩


86. gzip , zcat

gzip [-cdt#] 档名

zcat 档名.gz

gzip 是用来压缩与解压附档名为*.gz的指令。所以看到*.gz的档案时,就应该知道是经由gzip这个程序压缩的。

另外gzip也提供压缩比的服务

zcat 是用来读取压缩文件数据内容的指令。

由于gzip这个压缩指令主要是想要用来取代compress的,所以compress的压缩档案也可以使用gzip来解开

zcat 这个指令可以同时读取compress与gzip的压缩档


87. bzip2, bzcat

bzip2 [-cdz] 档名

bzcat 档名.bz2

档案名称为 .bz, .bz2, .tbz, .tbz2等等,可以尝试使用bzip2来解看看。

也可以使用bunzip2这个指令来取代 bzip2 -d


88. tar [-cxtzjvfpPN] 档案与目录...

tar可以将整个目录或者指定的档案都整合成一个档案

tar用来作备份是很重要的指令

默认情况下,如果是以【绝对路径】来建立打包档案,那么tar会自动的将/拿掉。


89. dd

dd if="input_file" of="output_file" bs="block_size" count="number"


第十三章 vi处理器


90. 基本上vi 共分为三种模式,分别是【一般模式】、【编辑模式】与【指令列命令模式】

*使用vi进入一般模式

vi test.txt

*按下i进入编辑模式

在一般模式中,只要按下I, o, a等字符,就可以进入编辑模式

*按下【ESC】回到一般模式

* 在一般模式中按下 :wq存储后离开vi


91. 常见快捷键

一般模式:搜寻与取代

/word: 向光标之下寻找一个字符串名称为word的字符串。

?word:向光标之上寻找一个字符串名称为word的字符串。

n: 这个n是英文按键。代表【重复前一个搜寻的动作】

N: 这个N是英文按键,与n相反,为【反向】进行前一个搜寻动作


进入编辑模式

i , I : 插入, 在目前的光标所在处插入输入之文字,已存在的文字会向后退。

i 为【从目前光标所在处插入】, I为【在目前所在行的第一个非空格符处开始插入】


a, A :

a为【从目前光标所在的下一个字符处开始插入】

A为【从光标所在行的最好一个字符处开始插入】


o, O:

o为【在目前光标所在的下一行处插入新的一行】

O为【在目前光标所在处的上一行插入新的一行】


r, R:取代

r会取代光标所在的那一个字符

R会一直取代光标所在的文字,知道按下ESC为止


指令列命令模式

:w将编辑的数据写入硬盘档案中

:w!若档案属性为只读时,强制写入该档案

:q离开vi

:q!若曾修改过档案,又不想储存,使用!为强制离开不储存档案

:wq储存后离开,若为:wq! 则为强制储存后离开


注意:感叹号!在vi当中,常常具有【强制】的意思


92. 区块选择的按键意义

v字符选择,会将光标经过的地方反白选择

V行选择,会将光标经过的行反白选择

ctrl+v区块选择,可以用长方形的方式选择资料

y将反白的地方复制

d将反白的地方删除

p粘贴


93.多档案编辑的按键

:n编辑下一个档案

:N编辑上一个档案

:files列出目前这个vim的开启的所有档案


94. vim 多窗口功能

:sp [filename] 开启一个新窗口,如果有加filename,表示在新窗口开启一个新档案,否则表示两个窗口为同一档案内容(同步显示)

Ctrl+wj按键的按法是:先按下Ctrl不放,再按下w后放开所有的按键,然后再按下j,则光标可移动到下方的窗口

Ctrl+wk同上,不过光标移动到上面的窗口

Ctrl+wq其实就是 :q结束离开。



95. vim环境设定参数

:set nu设定行号,取消的话,就是 set nonu

:set showmode就是是否显示--INSERT--之类的字眼在左下角的状态列



96. DOS与Linux的断行字符

在DOS使用的断行字符为^M$, 我们称为CR与LF两个字符。

在Linux底下,仅有LF($)字符


格式

dos2unix [-kn] file [newfile]

unix2dos [-kn] file [newfile]



第十四章认识BASH SHell

97. 狭义的说,在Linux中,所谓的shell就是指bash 这个文字模式的shell。广义的shell也可以是KDE之类的图形接口控制软件。

Bourne Again SHell 简称bash


98. 命令编修能力(类似DOS的doskey 功能)

注意:~/.bash_history 记录的是前一次登入以前所执行过的指令,而至于这一次登入所执行的指令都被暂存在暂内存中,当你成功的注销系统后,该指令记忆才会记录到.bash_history中


99. 命令与档案补全功能

[Tab]接在一串指令的第一个字的后面,则为命令补全

[Tab]接在一串指令的第二个字的后面,则为档案补全


100. bash shell 的内建命令:type

type [-tpa] name

type 显示name是外部指令还是bash内建的指令

type也可以用来作为类似which指令的用途,找指令用的


101. 指令的下达

command [-options] parameter1 parameter2 ...

中括号[] 并不存在实际的指令中,而加入参数设定时,通常为-号,例如-h;

有时候完整参数名称会输入--符号,例如--help

按下【Enter】按键后,该指令就立即执行,[Enter]按键为<CR>字符,它代表着一行指令的开始启动

指令太长的时候,可以使用\符号来跳脱[Enter]符号,使指令连续到下一行,注意:\后就立即接特殊字符


102. 变量的取用与设定:echo, 变量设定规则:unset

利用echo这个指令来取用变量。变量在被取用时,前面必须要加上$才行。或者以${variable}


通常大写字符为系统预设变量,自行设定变量可以使用小写字符,方便判断

取消变量的方法为:unset 变量名称

父程序的自订变量是无法在子程序内使用的。但是通过export将变量变成环境变量后,就能够在子程序底下使用


单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符,而不会有特殊符号


在一串指令中,符号(`)(也就是~下面的符号) 之内的指令将会被先执行,而其执行出来的结果将作为外部的输入信息


103. 观察目前shell环境下所有变量 set

104. $ 代表所谓的PID(process ID)

? 上个执行的指令所回传的值


105. 自订变量成环境变量 :export 变量


106. 语系档案变量查看 locale


107. 变量的有效范围

*当启动一个shell,操作系统分配一记忆区块给shell使用,此区域之变量可以让子程序存取

* 利用export功能,可以让变量的内容写到上述的记忆区块当中(环境变量)

* 当加载另一个shell时(亦即启动子程序,而离开原本的父程序了),子shell可以将父shell的环境变量所在的记忆区块导入直接的环境变量区块当中


108. read [-pt] variable

读取来自键盘输入的变量


109. declare/typeset 宣告变量的属性

declare [-aixr] variable


110. 与档案系统及程序的限制关系: ulimit

ulimit [-SHacdflmnpstuv] [配额]


111. 变量名称后面如果接了两个##,表示在##后面的字符串取[最长的]那一段,如果仅有一个#,表示取[最小的那一段]


112. [.] 这个路径

[..] 上一层路径


113. 万用字符与特殊字符

*万用字符,代表0个或多个字符(或数字)

?万用字符,代表【一定有】一个字母

#批注

\跳脱符号,将【特殊字符后万用字符】还原成一般字符

;连续性命令的界定

~使用者的家目录

$变量之前需要加的变量取代值

/路径分割符号


组合按键

ctrl+C终止目前的目录

Ctrl+D输入结束EOF

Ctrl+M就是Enter

Ctrl+S暂停屏幕的输出

Ctrl+Q恢复屏幕的输出

Ctrl+U在提示字符下,将整列命令删除

Ctrl+Z暂停目前的目录


114. 数据流重导向 redirect

数据流重导向就是将某个指令执行后应该要出现在屏幕上的数据,给他传输到其他的地方


传送指令为:

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

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

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


115. 命令执行的判断依据: ;,&& , ||

; 指令与指令之间利用分号隔开,这样一来,分号前的指令执行完后,就会立刻接着执行后面的指令

&& 当&& 前面的指令执行结果为正确,就可以接着执行后续的指令,否者就略过

||当||前面的指令有错误的时候,后面的指令才会被执行


ls /tmp/vbirding不存在时,回传一个非0的数值


考点:

command1 && command2 || command3


116. 管线命令(pipe)

管线命令界定符:|

| 这个管线命令仅能处理经由前面一个指令传来的正确信息,也就是stdout的信息,对stderr没有直接处理能力


117. 撷取命令:cut , grep


cut -d '分隔字符' -f fields

cut -c 字符区间

将一段信息的某一段给他切出来,处理的信息是以行为单位

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


grep

grep [-acinv] '搜寻字符串' filename

grep是分析一行信息,若当中有我们所需的信息,那么就将该行拿出来


118. 排序命令:sort, wc, uniq

sort [-fbMnrtuk] [file or stdin]


uniq [-ic]

配合排序后的档案处理


wc [-lwm]

计算输出信息的整体数据


双向重导向:tee

同时将数据流分送到档案与屏幕

tee [-a] file


119. 字符换命令:tr, col, join, paste, expand

tr [-ds] SET1 ...

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


档案中^I 的符号,就是tab


col [-x]

用来简单的处理将tab 按键替换为空格键


join [-ti12] file1 file2

主要处理在两个档案中,有“相同数据”的那一行,将他加在一起


paste [-d] file1 file2

直接将两行贴在一起,中间以tab隔开


expand [-t] file

将tab键成空格键


行首的代表标志为^


分割命令:split

split [-bl] file PREFIX

将大档案依据档案大小或行数进行分割成小档案


120. 关于减号-的用途

在管线命令中,常常会使用前一个指令的stdout作为这次的stdin,该stdin与stdout可以利用减号-来替代


第十五章 正规表示法 regular expression , RE


121. 简单的说,正归表示法就是处理字符串的方法,它是以行为单位,来进行字符串的处理行为,他透过一些特殊符号的辅助,可以让使用者轻易的达到 搜寻/取代 某特定字符串的处理程序


正规表示法基本上是一种表示法,主要工具程序支持这种表示法,那么该工具程序就可以用来作为正规表示法的字符串处理只用。


122. 以grep 撷取字符串

grep [-acinv] '搜寻字符串' filename


利用[]来搜寻集合字符

[] 里面不论有几个字符,都代表某一个字符

^ 反向选择

小写英文[a-z]

大写英文[A-Z]

数字[0-9]

字符串是数字与英文[a-zA-Z0-9]


行首与行尾字符 ^$

^字符,在字符集合符号(括号[])之内与之外是不同的。在[]内代表【反向选择】,在[]之外则代表定位在行首的意义

$ 行尾字符


任意一个字符. 与重复字符*

[.]代表【绝对有一个任意字符】

【*】代表的是【重复0个或多个前面的RE字符】

【o*】代表的是【拥有空字符或一个o以上的字符】

【.*】代表零个或多个任意字符


限定连续RE字符范围{}

{} 的符号在shell是有特殊意义的,因此,必须要使用跳脱字符

\{n,m\} 连续n到m个【前一个RE字符】

若为\{n\} 则是连续n个的前一个RE字符

若为\{n,\} 则是连续n个以上的前一个RE字符


注意:【正规表示法的特殊字符】与一般在指令列输入指令的【万用字符】并不相同



123. 延伸正规表示法

grep支持的是基础型的正规表示法,而egrep支持延伸正规表示法

egrep 是grep -E的命令别名


延伸型正规表示法特殊符号

+ 重复【一个或一个以上】的前一个RE字符

? 【零个或一个】前一个RE字符

| 用或(or)的方式找出数个字符串

()找出【群组】字符串


124. 格式化打印:printf

printf '打印格式' 时间内容


125. diff

diff 就是用在对比两个档案之间的差异,一般用在ASCII纯文字文件的对比上

diff [-bBi] from-file to-file


cmp [-s] file1 file2

diff 主要是以行为单位对比,cmp则是以位为单位对比


126. patch

patch -pN < patch_file

将旧的档案升级为新的档案



十六章 学习shell scripts


127. 什么是shell script

shell script就是shell脚本


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


shell scripts可以简单的被看成是批次档,也可以被说成是一个程序语言


shell 脚本注意事项:

*指令与参数间的多个空白会被忽略掉

* 空白行会被忽略掉,并且【tab】也是不会被理会的

* 如果读取到一个Enter符号(CR),就尝试开始执行该行命令

* 至于如果一行的内容太多,则可以使用\[Enter] 来延伸至下一行

* 此外,使用最多的#可做为批注。任何加在#后面的字,将全部被视为注释而被忽略


执行shell脚本方法

* 将shell.sh 加上可读 与执行(rx)的权限,然后就能以./shell.sh

* 直接以 sh shell.sh 的方式来直接执行


128. test指令的测试功能


129. 判断符号 []

* 在中括号[]内的每个组件都需要有空格键来分隔

* 在中括号内的变量,最好都以双引号来设定

* 在中括号内的常数,最好都以单引号或双引号来设定


130. 条件判断式

if [条件判断式]; then

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

fi



if [条件判断式]; then

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

else

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

fi


131. 常见端口与网络服务

80: WWW

22: ssh

21: ftp

25:mail



netstat -tuln 获取目前主机启动的服务


132. 利用case... esac 判断

case $变量名称 in

"第一个变量内容")

程序段

;;

"第二个变量内容")


程序段

;;

*)

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

exit 1

;;

esac


133. $变量 有两种获取方式

* 直接下达式, 利用【script.sh variable】的方式来直接给变量内容

* 交互式: 通过read指令来让使用者输入变量的内容


134. function功能


function fname(){

程序段

}


function 也拥有内建变量,他的内建变量与shell  script 类似。函数名称表示$0, 而后续的变量也是以$1, $2...来取代


135. while do done, until do done

while [condition]

do 

程序段落

done


until [condition]

do

程序段落

done


136.  for ... do...done

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

do

程序段

done


for后面的括号内的三串内容意义为:

*初始值:某个变量在循环当中的起始值

* 限制值:当变量的值在这个限制值的范围内,就继续进行循环

* 执行步阶:每做一次循环时,变量的变化值


137. shell script的追踪与debug

sh [-nvx] scripts.sh


十七章

Linux账号与身份管理


138.使用者识别  UID GID

UID 使用者id , User ID 

GID 群组ID, group id


139. 账号管理最重要的两个档案就是 /etc/passwd /etc/shadow


/etc/passwd

每一行都代表一个账号,有几行就代表有几个账号在你的系统中

需要特别留意的是,里面很多账号本来就是系统中必须要的,可以称为 系统账号,例如bin


每一行都用[:] 分隔开,共有7个,分别是

1. 账号名称

2. 密码,x表示密码已被移动到/etc/shadow 中

3. UID

当UID为0时, 代表这个账号是 系统管理员

1-499 保留给系统使用的ID,一般来说,1-99会保留给系统预设的账号,另外100-499则保留给一些服务来使用

500-65535 一般使用者使用

5. GID

6. 使用者信息说明栏

7. 家目录

8. shell


/etc/shadow

同样以:作为分隔符,共有9个字段

1. 账号名称,必须要与/etc/passwd相同

2. 密码, 经过编码过后的密码,  如果在密码栏的第一个字符为[*] 或者是[!], 表示这个账号并不会被用来登入的意思

3. 最近更改密码的日期

4. 密码不可被改动的天数

5. 密码需要重新变更的天数。 如果设为99999,表示密码不需要重新输入

6. 密码需要变更期限前的警告期限

7. 密码过期的恕限时间

8. 账号失效日期

9. 保留


140. 初始群组(initial group)当使用者一登入系统,立刻就拥有这个群组的相关权限

有效群组(effective group) :输入groups命令, 第一个输出的群组就是有效群组


newgrp groupname 变更有效群组


141. 新增使用者

useradd [-u UID] [-g initial_group] [-G other_group] -[Mm] [-c 说明栏] [-d home ] [-s shell] username


使用useradd 建立账号后,在预设的情况下,该账号是暂时被封锁的。也就是说,该账号是无法登入的。


142. passwd [useraccount]

设定账号密码


如果使用者的密码不见了,root可以帮助他们进行密码的修改,而不需要知道旧密码

也只有root可以随便设定密码,即使该密码并不符合系统的密码验证要求


143. usermod [-cdegGlsuLU] username

是系统管理员root用来管理账号身份的相关数据的


144. userdel [-r] username

删除使用者账号


在删除账号之前,先find / -user username 查出整个系统内属于username的档案,然后再加以 删除


useradd, usermod, userdel ,都是系统管理员所能够使用的指令


145. 一般使用者功能 

chsh [-ls]

更改使用者的shell


chfn [-foph]

更改使用者的相关信息,基本不用


finger [-s] username

查询使用者的信息


id [username]

查询某人或自己的相关UID GID 等信息


146. groupadd [-g gid] [-r]

新增群组


groupmod [-g gid] [-n group_name]

修改群组


groupdel [groupname]

删除群组


147. passwd [-lunxwS] username

设置使用者密码


148. su [-lcm] [username]

su - : 表示该使用者想要变换身份成root

如果su 没有加上-的话,那么很多原本使用者的相关设定会继续存在

这个指令一定要知道root的密码


exit :离开su的环境


这个su指令可以让你在不同的使用者之间切换身份,当su后面没有加上使用者账号时,那么预设就是以root作为你切换的那个身份,这个指令的最大的用途也在于此


su -l username :切换到一般的用户


149. sudo [-u [username|#uid]] command

sudo 输入的是当前使用者的密码,而不是欲切换称为他的那个身份的密码。前提是当前使用者在/etc/sudoers


visudo 

一定要用visudo 去编辑/etc/sudoers, visudo必须要使用root的身份来执行


【aifang ALL=(ALL) ALL】

代表的意思是:

使用者账号 登入的主机=(可以变换的身份) 可以下达的命令

上一行的意义是:aifang这个使用者,不论来自何方,他可以变换成任何LInux本机上面的所以账号,并执行所有的指令


150. 使用者信箱

mail username@localhost -s "邮件标题"

寄信

mail

收信


第十八章

Linux磁盘配额(quota)


151. Linux中,使用来作为硬盘空间管理的就是所谓的quota

quota只能针对整个partition进行整体的磁盘配额,无法针对某个目录进行磁盘配额


第十九章

例行性命令的建立


152. Linux工作排程的种类:at, cron

 at: 这个工作仅执行一次就从Linux系统中的排程中取消

 cron: 这个工作将持续例行性的做下去


第二十章

程序与资源管理


153. 在Linux系统中,触发任何一个事件时,系统都会将他定义为一个程序,并且给予这个程序一个ID,称为PID,同时依据启发这个程序的使用者与相关属性关系,给予这个PID一组有效的权限设定

154. job control 工作管理:当我们登入系统取得bash shell之后,在单一终端机接口下同时进行多个工作的行为管理

155. 进行工作管理的行为中,其实每个工作都是目前bash的子程序,亦即彼此之间是有相关性的。我们无法以job control的方式由tty1 的环境去管理tty2的bash


156. 前景(foreground):你可以控制的这个工作成为前景的工作

背景(background):在内存内可以自行运作的工作,你无法直接控制他,除非以bg/fg等指令将该工作呼叫出来


157. 直接将指令丢到背景中执行:&

将目前的工作丢到背景中暂停:Ctrl+z


158. 观察目前的背景工作状态:jobs [-lrs]


159. 将背景工作拿到前景来处理:fg %jobnumber

160. 让工作在背景下进行:bg


161. 管理背景当中的工作:kill

kill -signal %jobnumber

signal :

-1:重新读取一次参数的设定档(类似reload)

-2:代表与由键盘输入ctrl+c 同样的动作

-9: 立刻强制删除一个工作

-15:以正常的程序方式终止一项工作


162. 

静态查询系统正在运行的程序:ps

ps aux

ps -lA

ps axjf

PPID :父进程ID

VSZ: 该process使用掉的虚拟内存量KB

RSS: 该process占用的固定的内存量KB

如果某个程序的cmd后面还接上<defunct> ,就代表该程序是僵尸程序


163. top 持续监测整个系统的程序工作状态 

top [-d] |top [-bnp]

 一般用来找出最消耗CPU的那个程序


164. pstree 查找程序相关性

pstree [-Aup]


165. 程序的删除

kill后面必须要加上PID


killall [-iIe] [command name]

将系统当中所有以某个指令名称启动的程序全部删除


166. 系统资源的观察

free [-b|-k|-m|-g] [-t]


uname [-asrmpi]

查看系统核心版本、主要硬件平台已经CPU类型等信息


uptime

显示系统开机多久


netstat -[atunlp]

网络监控


168. /proc/* 代表的意义

基本上,目前主机上面各个程序的PID都是以目录的形态存在于/proc当中


第二十一章

开机关机流程与loader


169. 开机管理程序:boot loader

170. BIOS: basic input output system

171. boot loader 是载入Kernel的重要工具

172. 在安装多系统时,最好先安装Windows再安装LInux,因为若先安装Linux,则后续安装Windows时,会强制将MBR的boot loader覆盖掉。

173. 测试与安装grub

grub-install [--root-directory=DIR] INSTALL_DEVICE


第二十二章

原始码与Tarball套件管理员


174. 当执行make时,make会在当前目录下搜寻makefile(Makefile) 这个文件,而makefile里面则记录了原始码如何编译的详细信息

175. gcc 是Linux上面最标准的编译器

gcc -c hello.c

仅将原始码编译为目标文件,并不制作连结等功能


gcc -0  -c hello.c 

在编译的时候,依据作业环境给予最佳化执行速度


在进行binary file制作时,将连结的函数库与相关的路径填入

gcc sin.c -lm -L/usr/lib -I/usr/include

#-lm 指的是libm.so 或libm.a 这个函式库档案

# -L 后面接的路径是刚刚上面那个函式库的搜寻目录

# -I 后面接的是原始码内的include档案之所在目录


将编译的结果输出成某个特定档名

gcc -o hello hello.c

# -o 后面接的是要输出的binary  file档名


在编译的时候,输出较多的讯息说明

gcc -o hello hello.c -Wall

# 加入-Wall之后,程序的编译会变的较为严谨一点

#所以警告信息会显示出来


我们通常称-Wall或-0这些非必要的参数为 旗标(FLAGS),有时候也称CFLAGS


176. make 的好处

* 简化编译时所需要下达的指令

* 若在编译完成之后,修改了某个原始码档案,则make仅会针对被修改了的档案进行编译,其他的object file不会被更改

* 最后可以依据相依性来更新(update)执行挡

177. makefile基本语法

target:目标文件1 目标文件2

Tab gcc -o 欲建立的执行文件 目标文件1 目标文件2

注意:命令行必须要以tab按键作为开头


在makefile中#代表注释

TAb需要在命令行的第一个字符

target与相依档案(就是目标文件)之间以:隔开


变量的基本语法:

* 变量与变量内容以=隔开,同时两边可以具有空格

* 变量左边不可以有Tab

* 变量与变量内容在=两边不能有:

* 习惯上,变量最好是大写字母为主

* 使用变量时,以${变量} 或$(变量)

* 在shell的环境变量是可以被套用的


环境变量使用规则:

* make指令后面加上的环境变量为优先

* makefile里面指定的环境变量第二

* shell 原本具有的环境变量第三


特殊变量

$@ :目前的target


178. 通常建议将自己安装的套件放置在/usr/local下,原始码则建议放置在/usr/local/src下


179. patch -p数字 < patch_file

更新原始记录


第二十三章

rpm 与srpm 套件管理员


180. rpm : Red Hat Package Manager  套件管理程序

rpm 是以一种数据库记录的方式来将你所需的套件安装到你的Linux主机的一套管理程序

rpm最大的特点是:将要安装的套件先编译过并且打包好了,通过包装好的套件里预设的数据库记录,记录这个套件要安装的时候必须要的相依属性模块,当安装在你的Linux主机时,rpm会先依照套件里面的记录数据查询Linux主机的相依属性套件是否满足,若满足则予以安装,若不满足则不予安装。


181. srpm : Source rpm  ,它提供的套件内容并没有经过编译


182. rpm -ivh package_name

安装指令


183. rpm升级与更新

-Uvh : 后面接的套件即使没有安装过,则系统将予以直接安装;若后面接的套件有安装过的旧版,则系统自动更新至新版

-Fvh: 如果后面接的套件并未安装到系统上,则该套件不会被安装;亦即只有安装至系统内的套件会被升级


184. rpm 查询

rpm -qa 

rpm -q[licdR] 已安装的套件名称

rpm -qf 已存在于系统上的某个档案

rpm -qp[licdR] 未安装的某个文件名称


-q : 仅查询,后面接的套件名称是否有安装


185. rpm验证与数位签章

rpm -Va

rpm -V 已安装的套件名称

rpm -Vp 某个rpm档案的档名

rpm -Vf 在系统上的某个档案

 -V: 后面加的是套件名称,若该套件所含的档案被修改过,才会列出来


186. rpm 反安装与重建数据库

反安装就是解除安装。 解安装的过程一定是要由最上层往下解除


rpm -e 套件名称  

解安装套件

rpm --rebuilddb 

重建数据库


第二十四章

认识系统服务 daemons


187. daemon : 就是一个在背景当中执行的程序

daemon通常是负责系统上面的某个服务,好让系统可以接受来自使用者或者网络client的要求,而加以工作


188. daemon 的主要分类,依据daemon的启动与管理方式

* stand_alone : 独立的启动。 该daemon启动后,就直接常驻在内存当中,优点是快速响应

* super daemon: 这种服务的启动方式则是由统一的一个daemon来负责唤起该服务。优点是当没有数据封包来的时候,不会一直占据系统资源

super daemon可以分为multi-threaded 和single-threaded

189. daemon的命名规则

服务的名称被建立后,被挂上Linux使用时,通常在服务的名称之后会加上一个d。

我们使用ps或top来观察程序时,会发现很多xxxd的程序,通常是一些daemon程序


190. daemon的启动方式:service

service [service name] (start|stop|restart...)

service name: 亦即需要启动的服务名称,需要与/etc/init.d对应

事实上,在Linux系统中国,要【开或关某个port】,就是需要启动或关闭某个服务。因此,只要找出某个port对应的服务,程序对应的服务,进而启动或关闭它,那么那个经由该服务而启动的port,自然就会关闭


191. 观察系统启动服务

netstat -tulp

找出系统开启的网络服务


netstat -lnp

找出所有监听网络的服务


192. 设定开机后立即启动服务的方法

chkconfig --list

chkconfig [--add|--del] [service_name]

chkconfig --level [0123456] [service_name] [on|off]


--list:仅将目前的各项服务状态列出来

--add : 增加一个服务给chkconfig来管理,该service name必须在/etc/init.d/内

--level:设定某个服务在该level下启动或关闭


第二十五章

认识与分析登录档


193. dmesg 

查询核心信息

194. last -n number

last -f filename

last 预设读取/var/log/wtmp

195. lastlog

读取/var/log/lastlog内的信息。显示目前系统上的所有账号最近登入的世界


第二十六章

Linux备份策略


第二十七章

X Window 简易设定介绍


196. X Window 仅是Linux系统内的一个软件

197. X Window System 具有优良的X Server /X Client 设计系统。

X  Server:主要负责的是屏幕画面的绘制与显示

X Client:主要负责的是事件的处理

X Window System 其实就是X Server + X client 


第二十八章

Linux 硬件侦测与维护


第二十九章

Linux核心编程与管理


198. 重新编译Kernel的最主要目的是 想让系统变的更稳

199. uname -r

查看Kernel版本

2.6.18-238.el5

[主版本号].[次版本].[释放版本(realese)]-[修改版本]


相同的主次版本,代表他使用的函式库是差不多的


主次版本中,依据【次版本】的奇偶数,分为

*如果次版本是奇数的话,表示它是一个测试性质功能的核心版本

* 如果次版本是偶数的话,表示是稳定版


200. make menuconfig 

类似单模式的方式来进行核心参数的挑选


201. Kernel编译流程

* make clean

* make bzImage

* make modules


第三十章

一些基础的Linux问题



第二部分

Linux架站文件


第一章

序言


第二章

架构之前所需的技能分析


第三章

网络基础概念


202. 网线RJ_45 接头

568A:白绿 绿 白橙 蓝 白蓝 橙 白棕 棕

568B:白橙 橙 白绿 蓝 白蓝 绿 白棕 棕

并行线: 两个接头都为A时称为并线,用在连结主机网卡与集线器之间

跳线:一边为A一边为B, 用在连结两部主机的网卡


203. 集线器:hub

hub 就是网络共享媒体,仅将所有来自pc的frame再次送出去给所有的pc

204. 交换机:switch

switch 每个端口平分带宽


205. OSI(open system interconnection) 七层网络协议

物理层(physical layer):传输比特流

数据链路层(data-link layer): 将比特流合成帧

网络层(network layer): 

进行逻辑地址寻址,实现不同网络之间的路径选择。 协议有: ICMP IGMP IP(IPV4 IPV6) ARP RARP

传输层(transport layer):数据封包,数据包的传送

协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层

会话层(session layer):建立、管理、终止会话

表示层(presentation layer):数据的表示、安全、压缩,格式有,JPEG、ASCll、DECOIC、加密格式等

应用层(application layer):网络服务与最终用户的一个接口,协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP


206. 在Linux底下网卡的设备代号一般是eth0

ifconfig eth0

查看网卡卡号

网卡卡号就是HWaddr


arp -n 

查询网卡对应的IP地址,也可以说是网关


207. ARP 协议:地址解析协议,根据IP地址获取mac地址的一个TCP/IP协议

arp -[nd] hostname

arp -s hostname(IP) hardware_address


208. ipv4 ip地址为32位

ip 地址中又分为网络号和主机号。同一个物理网段内,主机ip具有相同的网络号,唯一的主机号


209. ipv4 ip地址可以分为3类。

A类: 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> 网络号开头是0

B类:10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===>网络号开头是10

C类:110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx ===> 网络号开头是110


十进制表示:

A类: 0.xx.xx.xx ~ 126.xx.xx.xx

B类: 128.xx.xx.xx ~ 191.xx.xx.xx

C类: 192.xx.xx.xx ~ 223.xx.xx.xx


127.xx.xx.xx 用来作loopback


210. 私有ip

A类:10.0.0.0 ~ 10.255.255.255

B类: 172.16.0.0 ~ 172.31.255.255

C类: 192.168.0.0 ~ 192.168.255.255


211. TTL : time to live 存活时间

表示ip数据包的存活时间,范围是0-255. 当这个ip数据包通过一个路由器时,TTL就会减1,当TTL为0时,这个包就会被丢弃

222. 每部主机都有自己的路由表

223. gateway/router :网关/路由功能就是负责不同网段之间的封包递(ip forwarder),由于路由器具有ip forwader的功能,并且具有管理路由的能力,所以可以将来自不同网段之间的封包进行转递的功能

224. route [-n]

查看路由表


225. 三次握手

ACK(acknowledge):若为1代表这个封包为响应封包

SYN(synchronous): 若为1,表示发送端希望双方建立同步联机,通常带有SYN标志的封包表示主动要连接到对方的意思


三次握手流程:

* 封包发起

客户端随机取用一个大于1024的port, 在TCP表头中,SYN=1, ,并且记下发送出联机封包给服务器端的序号Seq=10001.

* 封包接受与确认封包传送

当服务器接收到这个封包,并且确定要接收这个封包后,发送SYN=1, ACK=1, ack=10001+1=10002, Seq=20001的封包给客户端

*发送确认封包

客户端收到来自服务器端的ACK后,就能确认之前请求的封包被正确接收了,接下来如果客户端也同意与服务器建立联机,就会再次发送一个确认包ACK=1,ack=20001+1=20002

*取得最后确认

若一切顺利,在服务端收到带有ACK=1,ack=20002的封包后,建立联机


第四章

局域网络架构简介与Linux版本选择


226. 局域网:Local Area Network

广域网:Wide Area Network 。局域网之外的环境都称为广域网


227. 服务器提供的网络服务越单纯越好


第五章

连上Internet


第六章

Linux常用网络指令介绍


228. ifconfig {interface} {up|down}  <== 观察与启动接口

ifconfig interface {options} <== 设定与修改接口

ifconfig 主要是可以手动的启动、观察与修改网络接口的相关参数,可以修改的参数很多,包括IP参数已经MTU等等都是可以修改的。


lo : loopback

229. ifup {interface}

ifdown {interface}

实时手动修改一些网络接口参数


230. route [-nee]

route add [-net|-host] [网络或主机] netmask [mask] [gw|dev]

route del [-net|-host] [网络或主机] netmask [mask] [gw|dev]

路由修改

gateway 显示0.0.0.0表示该路由是直接由本机传送,亦即可以通过局域网的MAC直接传送


231. ip [option] [动作] [指令]


关于装置接口(device)的相关设定:ip link

ip [-s] link show <== 单纯的查阅该装置相关的信息

ip link set [device] [动作与参数]


关于额外的ip相关设定:ip address

ip address与OSI七层协议的网络层相关,主要是设定与ip有关的各项参数


ip address show <== 就是查阅IP参数

ip address [add|del] [IP参数] [dev 装置名] [相关参数]


关于路由的相关设定:ip route

ip route show <== 单纯的显示出路由的设定

ip route [add|del] [IP或网域] [via gateway] [dev 装置]


232. ping [-bcstnM] IP

ping主要透过ICMP封包来进行整个网络的状况报告


233. traceroute [-nwig] IP

追踪两部主机之间通过的各个节点(node)通信状况的好坏


234. netstat -[rn]  <== 与路由有关的参数

netstat -[antulpc] <== 与网络接口有关的参数

netstat 输出主要分为两大部分,分别是TCP/IP的网络接口部分,已经传统的Unix socket部分


235. host [-a] hostname [server]

查看某个主机名称的IP


236. nslookup [-query=[type]] [hostname|IP]

用来作为IP与主机名称对应的检查


237. 远程联机指令

远程联机就是在不同的计算机之间进行登入的情况。可以通过Telnet,ssh或者是ftp等协议进行远程主机的登入


238. telnet [host|IP] [port]

telnet 是早期在个人计算机上连结到服务器主机上的一个软件,但是Telnet本身的数据在传送的时候是使用明码(原始的数据,没有加密),所以数据在Internet上的时候,会比较危险

除了连结到服务器和BBS上之外, Telnet还可以用来连结到某个port(服务)上。


239. ftp [-p] [host|IP] [port]


240. wget [option] [网址]

进行网页数据的取得


241. tcpdump [-nn] [-i 接口] [-w 存储档名] [-c 次数] [-Ae] [-qX] [-r档案] [所欲获取的数据内容]

tcpdump 必须使用root的身份执行

不但可以分析封包的流向,连封包的内容也可以监听


第七章

Linux网络侦错


第八章

主机基本安全之一:限制Linux对外联机的端口


242. 服务端所启用的port其实是由某些网络服务(program)所启动的。

客户端启动的port是随机产生的,主要是开启在大于1024以上的端口,这个端口也是由某个软件所产生的。

所谓的监听是某个服务程序会一直常驻在内存当中,所以该程序启动的port就会一直存在


243. 预设情况下,我们的主机会有65535个port

244.只有root才能启动保留的port

在小于1024的port,都是需要以root的身份才能启动的,这些port主要是用于一些常见的通信服务

245. 大于1024的port用于client端

这些port几乎都是随机使用的

246. 没有所谓的port的安全性

因为port的启用是由服务软件所造成的。也就是说,真正影响网络安全的并不是port,而是启动port的那个软件(程序)


247. 观察port

netstat:在本机上以自己的程序检测自己的port

nmap: 通过网络的侦测软件辅助,可侦测非本机上的其他网络主机,但有违法之虞


248. nmap [扫描类型] [扫描参数] [hosts地址与范围]


nmap localhost

使用预设参数扫描本机所启用的port


249. 一般正常的Linux系统环境下,服务的启动与管理重要有:

stand alone  :就是直接执行该服务的执行挡,让该执行文件直接加载到内存当中运行。用这种方式来启动可以让该服务具有较快响应的优点

super daemon:用一个超级服务作为总管,来管理一些网络服务。这种方式启动的网络服务在响应上速度会比较慢,但设定完毕后需要重新以[/etc/init.d/xinetd restart]来重新启动才行


第九章

主机基本安全之二:Linux在线自动升级


250. 自动升级机制

yum

CentOS 与Fedora所常见的自动升级机制,透过FTP或WWW来进行在线升级以及在线直接安装套件


251. CentOS的yum 自动升级

CentOS主要是以RPM来作为套件的管理机制,RPM本身有一些表头数据记录了这个套件本身的信息,包括了相依属性之类的信息。yum 就是通过分析这些RPM套件的表头数据,并且将这些表头数据事先记录下来,当使用者要求升级或者是安装的时候,yum就会通过分析这些表头数据来决定下载的档案,这些下载的档案当然包括了相依属性的套件。所以说,yum已经主动克服了套件之间的属性相依问题


yum 动作:

* 先由设定档判断yum server所在处

* 连接到yum server后,先下载新的RPM档案的表头数据

* 分析比较使用者所欲安装/升级的档案,并提供使用者确认

* 下载使用者选择的档案到系统中的/var/cache/yum,并进行实际安装


252. 必须使用root的身份来执行root

253. yum 的安装、升级、移除、查询等功能

yum [option] [工作项目] [套件]


yum search : 搜寻某个套件或者是重要关键字

yum installl 软件名:安装一个软件

yum clean packages:下载安装完成后清除安装包

yum -y update :整体更新


254. 安装套件群组的功能

yum grouplist: 列出所有可使用的套件组

yum groupinfo "Development Tools":列出套件组内所有的套件名

yum groupinstall "Development Tools": 安装套件组



第十章

路由器Router设定


255. route -n

查看本机路由表

 256. 路由器的功能:递网络封包

路由器会分析来源端封包的IP表头,找出目标的IP后,通过路由器本身的路由表将这个封包向下一个目标传送。


257. 路由器最简单的功能:

连接两个不同的网段


第十一章

认识网络安全


第十二章

Linux防火墙与NAT主机


258. 防火墙最重要的任务是:

* 切割被信任(如子网络)与不被信任(如Internet)的网段

* 划分出可提供Internet的服务与必须被保护的服务

* 分析出可接受与不可接受的封包状态

259. proxy:代理服务器

代理服务器仅是代表Client端去向Internet要求数据


260. IP filter:封包过滤机制

261. 防火墙除了可以保护防火墙机制(iptables)本身所在的那部主机之外,还可以保护防火墙后面的主机或PC


第十三章

申请合法的主机名称


262. DNS:Domain Name System  域名系统

263. ISP : Internet service provider 互联网服务提供商

动态DNS主机服务:

* client 端每次开机或者是重新拨接,并取得一个新的IP之后,会向DNS Server端提出请求,希望Server端变更主机名称与IP的对应(这个步骤在每个主要的ISP都有提供适当的program来提供给client使用)

* Server端接受Client端的要求后,会先去查询Client提供的账号密码是否正确,正确之后就会立即修改Server本身对于你的主机名称的设定值


第十四章

远程联机服务器 Telnet /SSH /VNC/  XDMCP/ RSH



264. 远程联机服务

Telnet 明码传输,不安全

root不能直接以Telnet连接上主机


265. SSH服务器

SSH : Secure SHell protocol 

SSH协议预设提供两个服务器功能:

* 一个就是类似Telnet的远程联机使用shell的服务器,亦即是俗称的ssh

* 另一个就是类似FTP服务的sftp-server ,提供更安全的FTP服务


266. 每一部SSH服务器主机都可以使用RSA 加密方式来产生一个1024bit的RSA key,这个RSA 的加密方式,主要就是用来产生公钥与私钥的演算方法

*当每次SSH daemon(sshd)启动时,就会产生一支768 bit 的公钥(或称为server key)存放在server中

* 若有client端的ssh联机需求传送来时,那么server就会将这一支公钥传给client,此时client也会比对一下这支公钥的正确性。

* 在client接受这个768 bit的server key后,client自己也会随机产生一支256 bit的私钥(host key), 并且以加密的方式将server key 与host  key整合成一对完整的key pair,并且将这对key pair 也传给server

* 之后,server与Client在这次的联机当中,就以这一对1024的key pair 来进行数据的传递


267. ssh account@hostname

直接登入到对方主机


注意:如果直接以 ssh hostname 这个指令来连接到hostname这个主机时,则进入hostname 这个主机的账号名称将会是目前你所在的这个环境中的使用者账号


268. SSH FTP: sftp


269. Linux client : scp  复制档案

scp  档案   目标主机/档案

将本机数据上传到远程主机上


scp 远程主机/档案   .

将数据由远程主机下载到本机上


270. 制作不用密码可立即登入的ssh用户

* 先在client上面建立public key 跟private key , 利用指令ssh-keygen 这个命令

* 将private key放在client上面的家目录,亦即$HOME/.ssh/, 并且修改权限为仅有该user 可读的状态

* 将public key 放在任何一个你想要用来登入的主机的server端的某user 的家目录内的.ssh/里面的认证档案即可


271. ssh-keygen -t rsa 

生成key pair 


第十五章

简易NFS服务器设定


272. NFS:Network  FileSystem

它最大的功能就是可以透过网络,让不同的机器,不同的操作系统,可以彼此分享个别的档案,所以可以简单的将它看做一个file server


273. RPC:Remote Procedure Call 远程过程调用协议


第十六章

简易DHCP服务器设定


274. DHCP:Dynamic Host Configuration Protocol


第十七章

简易DNS服务器设定


275. DNS: Domain Name System 域名系统

276. DNS 是以类似树状目录的形态来进行名称的管理

277. DNS系统主要的功能是在译hostname与IP

278. 由hostname去寻找出IP的程序称为 正解

279. 一个正反解的设定就是一个zone(区域)

每一个zone都有一个设定档,而规定这些设定档档名的,是/etc/named.conf, 新版的Linux Distribution中,这个设定档放在/var/named/chroot

280. BIND: Berkeley Internet Name Domain


P1230