1、FAT的文件系统经常需要进行碎片整理,那么EXT文件系统是否需要磁盘整理?
(1)什么是碎片整理:经常听到的碎片整理就是文件写入的block太过于离散了,此时文件的读取性能将会变得很差,这个时候通过碎片整理将同一个文件所属的block汇合在一起,这样数据的读取比较容易。
(2)由于Ext系统是索引式文件系统,基本上不太需要进行碎片整理的,但如果文件系统使用太久,经常删除/编辑/新增文件是。那么还是可能会造成文件数据太过于离散的问题,此时或许需要进行碎片整理一下的。
2、Ext2文件系统能够支持的最大磁盘容量与最大单一文件容量是有限的吗?
是有限制的,由于索引式文件系统的要看索引能存放的数量和每个block的大小,所以默认的Ext2系统的文件大小限制如下:
Block大小 |
1KB
|
2KB
|
4KB
|
最大单一文件限制
|
16GB
|
256GB
|
2TB
|
最大文件系统总容量
|
2TB
|
8TB
|
16TB
|
原则上,block的大小与数量在格式化完就不能在改变了。除非重新格式化或者利用resize2fs等命令更改文件系统大小,否则inode与block固定后就不再变动。
3、inode要记录的数据非常多(文件大小,atime,mtime,ctime,flag,pointer,owner,group,访问模式),但是偏偏又只有128bytes而已,而inode记录一个block号码要花掉4byte,假设我一个文件有400M且每一个block为4kb时,那么至少也需要10万条block的记录。inode哪有这么多可记录的信息?(见鸟哥P202)
为此系统很聪明的将inode记录block号码的区域定义为12个直接、一个间接、一个双间接与一个3间接记录区;
假若我们用1k的block来说明,
12个直接指向:12*1K=12K
间接:256*1K=256K
双间接:256*256*1K=...
三间接:256*256*256*1K=...
总额:12+256+256*256+256*256*256=16GB
4、superblock是记录整个文件系统相关信息的地方,没有Superblock,就没有这个文件系统了。
他记录的主要信息有:
block与inode的总量
未使用与已使用的inode/block数量
block与inode的大小(block为1k,2k,4k, inode为128bytes)
文件系统的挂载时间、最近一次写入数据的时间、最近一次检验磁盘的时间等文件系统的相关信息;
一个validbit数值,若此文件系统已被挂载,咋valid bit为0,若为被挂载则valid bit为1
superblock是非常重要的,因为我们这个文件系统的基本信息很多时间都写在这里
如果superblock死掉了,你的文件系统可能就需要花费很多时间去挽救。
每个blockgroup都可能含有superblock。但是我们也说一个文件系统应该仅有一个superblock而已,那是怎么一回事呢?事实上除了第一个blockgruop内会含有superblock之外,后续的blockgroup不一定含有superblock,而若含有superblock则该superblock主要是作为第一个blockgroup内superblock的备份了,这样可以进行superblock的救援。
5、在ext2文件系统创建一个目录时会发生什么呢?
在新建一个目录时,ext2分分配一个inode与至少一块block给该目录。
其中inode是记录该目录的相关权限与属性,并可记录分配到的那块block号码;
而block则是记录在这个目录下的文件名与该文件名占用inode号码数据。
另外,请注意:目录并不只会占用一个block而已,也就是说:在目录下面的文件数如果太多而导致一个block无法容纳其下所有的文件名与inode对照表时,Linux会给予该目录多一个block来记录相关的数据。
6、分区大小与读取效率问题
如果文件系统太大,当一个文件分别记录在最前面与最后面的block号码中,此时会造成磁盘的机械手臂移动幅度过大,也会造成数据读取性能低。而且磁头在搜寻整个文件系统时,也会花费比较多的时间。因此,分区的规划并不是越大越好,而是真的要针对你的主机用途来进行规划才行。
7、同一文件系统的某个inode只会对应到一个文件内容而已,因此我们可以通过判断inode号码来确认不同文件名是否为相同的文件。
8、系统将常用的文件数据放置到主存储器的缓冲区,已加速文件系统的读/写。因此,Linux 的物理内存最后都会被用光。这是正常的现象,可加速系统性能。
9、挂载点一定是目录,该目录为进入该文件系统的入口。
10、为什么不能硬链接到目录?
这是因为连接到目录时,链接的数据需要连同被链接目录下面的所有数据都建立连接,举例来说就是连接到目录时,该目录下的所有文件数据和非文件数据都要建立硬链接。而且在创建新文件时,连带的也要在另一个目录下创建一次硬链接。因此造成环境相当大的复杂度。目前硬链接对于目录暂时还是不支持的。
11、符号链接是单向的,硬链接是双向的~~。。。
12、linux目录配置
事实上,FHS(Filesystem Hierarchy Standard)针对目录树架构仅定义出三层目录下面应该放置什么数据而已,如下;
/(root,根目录):与开机系统有关
/usr(Unix software resource
):与软件安装/执行有关
/var(variable):与系统运作过程有关
- 根目录(/):根目录所在分区越小越好,且应用程序锁安装的软件最好不要与根目录放在同一个分区内,保持根目录越小越好。如此不但性能较好,根目录所在的文件系统也较不容易发生问题。
- /bin:系统有很多放置执行文件的目录,但/bin比较特殊。因为/bin放置的是在单用户维护模式下还能够被操作的命令。在/bin下面的命令可以被root与一般帐号所使用,只要有cat,chmod,chown,date,mv,cp,bash等常用的命令。
- /boot:这个目录主要在放置开机会使用到的文件,包括Linux内核文件以及开机菜单与开机所需配置的文件等。Linux kernel常用的文件名为vmlinux,如果使用的是grub这个引导装载程序,则还会存在/boot/grub这个目录。
- /dev:在Linux系统上任何设备与接口都是以文件的形式存在于这个目录当中的。你只要通过访问这个目录下的某个文件,就等于访问某个设备。
- /etc:系统主要的配置文件几乎都放置在这个目录内,例如人员的帐号密码文件、各种服务器的起始文件等。一般来说,这个目录下的各文件属性是可以让一般用户查阅的,但是只有root有权利修改。FHS建议不要放置可执行文件在这个目录中。比较重要的有:
- /etc/init.d/:所有的服务的默认启动脚本都是放在这里的,例如要启动或者关闭iptable的话:“/etc/inint.d/iptables start", "/etc/init.d/iptables stop"
- /etc/xinetd.d/:这就是所谓的super daemon管理的各项服务的配置文件目录。
- /etc/X11/:与X window有关的各种配置文件都在这里,尤其是xorg.conf这个XServer的配置文件
- /lib:系统的函数库非常多,而/lib放置的则是在开机时会用到的函数库,以及在/bin或者/sbin下面的命令会调用的函数库而已。
- /mnt:如果想要暂时的挂载某些额外的设备,一般建议你可以放置到这个目录中。
- /opt:这个是给第三方软件放置的目录。
- /sbin:Linux有非常多的命令是用来设置系统环境的,这些命令只有root才能够利用来设置系统,其他用户最多只能用来查询而已。放在/sbin下面的为开机过程中所需要的,里面包括了开机、修复、还原系统所需要的命令。至于某些服务器软件程序,一般放置到/usr/sbin/当中。至于本机自行安装的软件所产生的系统执行文件,则放置到/usr/local/sbin当中了。常见的命令包括:fdisk,fsck,ifcofig,init,mkfs等。
- /tmp:这是让一般用户或者是正在执行的程序暂时放置文件的地方。这个目录是任何人都能够访问,所以你需要定期清理一下。当然,重要的数据不可放置在此目录。因为FHS建议在开机时,应该将/tmp目录下的数据都清除。
- /lost+found:这个目录是使用标准的ext2/ext3文件系统格式才会产生的一个目录,目的在于当文件系统发生错误时,将一些丢失的片段放置到这个目录下。这个目录通常会在分区的最顶层存在。
- /proc:这个目录本身是一个虚拟文件系统。他放置的数据都是在内存中的,例如系统内核、进程、外部设备的状态即网络状态等。因为这个目录下的数据都是在内存中的,所以本身不占任何硬盘空间。比较重要的文件例如:“/proc/cpuinfo”"/proc/dma" "/proc/interrupts" "/proc/ioports" "/proc/net/*"等
- /sys:这个目录其实跟/proc非常类似,也是一个虚拟的文件系统,主要也是记录与内核相关的信息。包括目前已加载的内核模块和内核检测到的硬件设备信息等。这个目录同样不占硬盘容量。
- /usr
- /usr/X11R6/:为X window系统重要的数据放置的目录,之所以取名为X11R6是因为最后的X版本为第11版,且改版的第6次释出之意。
- /usr/bin/:绝大部分的用户可是使用命令都放置在这里,请注意它与/bin的不同之处(是否与开机过程有关)
- /usr/include/:C/C++等程序语言的头文件与包含文件放置处,当我们以tarball方式安装某些数据时,会使用到里头的许多包含文件。
- /usr/lib/:包含各应用软件的函数库、目标文件、以及不被一般用户惯用的执行文件或脚本。某些软件会提供一些特殊的命令来进行服务器的设计,这些命令也不会经常被系统管理员操作,那就会被摆放到这个目录下。要注意的是,如果你使用的是X86_64的linux系统,那可能就会有/usr/lib64/目录产生。
- /usr/local/:系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录,这样会比较便于管理。
- /usr/sbin/:非系统正常运行所需要的系统命令。最常见的就是某些网络服务器软件的服务命令(daemon)
- /usr/share/:放置共享文件的地方,在这个目录下放置的数据几乎是不分硬件架构均可读取的数据,因为几乎都是文本文件嘛!在次目录下还有这些子目录:
- /usr/share/man
- /usr/share/doc
- /usr/share/zoneinfo
- /usr/src/:一般源码建议放置到这里,src有source的意思。至于内核的源码则建议放置到/usr/src/linux目录下
- /var:如果/ usr是安装时hi占用较大硬盘容量的目录,那么/var就是在系统运行后才会渐渐占用硬盘容量的目录。因为/var目录主要是针对常态性变动的文件,包括缓存,登录文件以及某些软件运行锁产生的文件,包括程序文件或者例如MySQL数据库的文件等。
- /var/cache/:应用程序本身运行过程中会产生一些暂存文件
- /var/lib/:程序本身执行的过程中, 需要使用到的数据文件放置的目录。在此目录下各自的软件应该要有各自的目录。举例来说,MySQL的数据库放置到/var/lib/mysql/,而rpm的数据库则存放到/var/lib/rpm目录下。
- /var/lock/:某些设备或者是文件资源一次只能被一个应用程序所使用,如果同时有两个程序使用该设备时,就可能产生一些错误的状况,次因就得要将该设备上锁,已确保该设备只会给单一软件所使用。
- /var/log/:这是登录文件放置的目录。里面较重要的文件如"/var/log/message","/var/log/wtmp"
- /var/mail/: 放置个人电子邮件信箱的目录,不过这个目录也被放置到/var/spool/mail/目录中,通常这两个目录是互为链接文件。
- /var/run/:某些程序或者是服务启动后,会将它们的PID放置在这个目录下。
- /var/spool/:这个目录通常放置一些队列数据,所谓的“队列”就是排队等待其他程序使用的数据啦!这些数据被使用 通常会被删除。
13、建立符号链接文件的时候要注意:
ln -s 1 2
如果当前目录先只有1目录,而既没有2命令的目录也有命名为2的文件,则2中则被新建为一个内容为“1”的链接文件。
如果当前目录下有2为名的文件时,则该指令执行不成功,提示2文件已存在,符号文件创建失败。
如果当前目录下有2为名的目录时,则该指令会在2目录下新建一个内容为“1”的符号链接文件。且新建的链接文件名也为"1";
14、或许你已经发现,当我们以hard link进行文件的连接时,可以发现,在ls -l所显示的第二字段会增加1,那么请教,如果新建目录时,他默认的链接数量会是多少?
让我们来想一想,一个空目录里会存些什么,就是存在.与..这两个东西。那么当我们新建一个新目录名称为/tmp/testing时,基本上会有三个东西,那就是:
- /tmp/testing
- /tmp/testing/.
- /tmp/testing/..
而其中的/tmp/testing与/tmp/testing/.实际上是一样的,都代表新建的目录。而/tmp/testing/..则代表/tmp这个目录,所以说,当我们新建一个新的目录时,新的目录的连接数为2,而上层目录的链接数则会增加1。
15、如果我们想要在系统里新增一块磁盘时,应该有哪些动作要做呢?
- 对磁盘进行分区,已新建可用的分区
- 对该分区进行格式化,已创建系统可用的文件系统
- 若想要仔细一些,则可对刚才新建好的文件系统进行检验
- 在Linux系统上,需要创建挂载点(也即是目录),并将它挂载上来
16、需要特别留意的是:fdisk没有办法处理大于2TB以上的磁盘分区,因为虽然Ext3文件系统已经支持达到16TB的以上的硬盘,但是分区命令却无法支持。时至今日所有的硬盘价格大跌,磁盘也经常达到单块1TB之上,若加上磁盘阵列,高于2TB的磁盘系统应该会很常见,此时你就得使用parted这个命令了。
17、如果你要用来挂载的目录里面不是空的,那么挂载了文件系统之后,原目录下的东西就会暂时消失。举个例子来说,假设你的/home原本是与根目录在同一个文件系统中,下面原本就有/home/test和/home/vbird两个目录,然后你想要添加新的硬盘,并且直接挂载在/home下面,那么当你挂载上新的分区时,则/home目录显示的是新分区内的数据,至于原先的test与vbird这两个目录就会暂时被隐藏掉了,并不是被覆盖掉,而是暂时隐藏了起来,等到新分区被卸载之后,/home原本的内容就会再次显示出来。
18、与光驱不同的是,你挂载了软盘后竟然还是可以退出软盘,不过,如此一来,你的文件系统将会有莫名其妙的问题发生,整个Linux最重要的就是文件系统,而文件系统是直接挂载到目录树伤透,几乎任何命令或多或少使用到目录树的数据结构,因此你当然不可以随意将光盘/软盘拿出来,所以,软盘也请卸载之后再推出,这是很重要的一点。
19、整个目录树最重要的地方就是根目录了,所以根目录根本就不能被卸载的!问题是,如果你的挂载参数要改变,或者根目录出现“只读”状态时,如何重新挂载呢?最可能的方式就是重新启动。不过我们也可以用命令:mount -o remount,XX;
请注意:要重新挂载时,这是个非常重要的机制。尤其是当你进入当单用户维护模式时,你的根目录常会被系统挂载为只读,这个时候这个命令就太重要了
20、我们可以利用mount来将整个目录挂载到另外一个目录去,这并不是挂载文件系统,而是额外的挂载某个目录的方法,虽然下面的方法也可以使用symboliclink来连接,不过在某些不支持符号链接的程序运行中,还是要通过这样的方法才行。
21、既然能够挂载DVD的镜像文件,那么我们能不能制作出一个打文件,然后将这个文件格式化后挂载呢?这是一个有趣的操作,而且还能够帮助我们解决很多系统的分区不良的情况。举例来说,如果当初在分区时,你只有分出一个根目录,假设你已经没有多余的空间可以进行额外的分区。偏偏根目录的空间还很大,此时你就能够制作出一个打文件,然后将这个文件挂载,如此依赖感觉上你就多了一个分区,用途非常广泛。
22、对于swap,鸟哥这样说:
说实话,swap在目前的桌面计算机中,存在的意义不大,这是因为目前的x_86主机所含的内存实在都太大了(一般入门级至少也都有512M
)所以,我们的Linux系统大概都用不到swap。不过针对服务器或者是工作站这些常年上线的系统来说的话,那么无论如何,swap还是需要创建的。
因为swap主要的功能是当物理内存不够时,将某些在内存中所占的程序暂时移动到swap当中,让物理内存可以被需要的程序来使用,另外,如果你的主机支持电源管理模式,也就是说,你的Linux主机系统可以进入“休眠”模式的话,那么运行当中的程序状态则会被记录到swap去,以作为“唤醒”主机的状态依据。另外,有某些程序在运行时,本来就会利用swap的特性来存放一些数据段,所以swap还是需要创建的,只是不需要太大。
不过,swap在被创建时,是由限制的:
在内核2.4.10版本以后,单一swap已经没有2G的限制了
但是最多还是最多仅能够创建32个swap
而且,由于目前的x86_64最大内存寻址到64GB,因此swap总量最大也是仅能达64GB就是了。
依然还是听模糊虚拟内存和swap的关系的
23、 boot sector 与 super block的关系
在过去的非常多的文章中都写到引导装载程序是安装到super block内的,但是我们由官方的How to文件知道,boot sector(启动扇区)是独立出来的,并非安装到superblock中的。
在讨论这个问题之前,首先说明两点:
superblock大小为1024bytes
superblock前面需要保留1024下来,以让引导装载程序可以安装。
分析上述两点我们知道boot sector应该会有1024bytes的大小,但是整个文件系统主要是依据block大小来决定的。因此要讨论boot sector与super block的关系时,不得不将block的大小拿出来讨论:
如果block大小刚好是1024的话,那么boot sector与superblock各会占用掉一个block
如果block大于1024的话,那么superblock将会在0号,其实superblock只有1024bytes,但是为了不浪费更多的空间,因此第一个block中不仅有superblock而且我们将boot sector放置于superblcok前面的1024bytes。所以,super仅占有了1024~2047之间的空间。而0~1023就保留给boot sector使用。我们可以说你将引导装载程序安装到superblcok所在的block号码中,就是0号,但事实上还是安装到启动扇区的保留区域中,所以说,以前的文章说引导装载程序可以安装到superblock内也不能算全错,但比较正确的说法,应该是安装到该文件系统最前面的1024bytes内的区域,就是启动扇区这样比较好。
24、 记忆几个常见的压缩文件名:
*.z:compress程序压缩的文件
*.gz:gzip程序压缩的文件
*.bz2:bzip2程序压缩的文件
*.tar:tar程序打包的数据,并没有经过压缩过
*.tar.gz:tar程序打包的文件,其中经过gzip的压缩
*.tar.bz2:tar程序打包的文件,其中经过bzip2的压缩
25、在tar命令中,我们发现一件很有趣的事情,那就是每个文件名都没了根目录了。
那为什么要去掉根目录呢?主要是为了安全,我们使用tar备份的数据可能会需要解压缩回来使用,在tar所记录的文件名那就是解压缩后的实际文件名。如果去掉了根目录,假设你将备份数据在/tmp中解开,那么解压缩后的文件名就会变成/tmp/...。但是如果你解压缩后的文加名就会是绝对路径,即解压缩后的数据一定会被放置到/...中去,如此一来,你的原本的/...下面的数据就会被备份数据所覆盖过去了。
如果加上-P参数,那么文件名内的根目录就会存在。不过,毕竟很多时候,我们备份是为了要未来追踪问题用个的,到不一定需要还原到原本的系统中。所以拿去根目录后,备份数据的应用就会比较有弹性,也比较安全。
26、查找文件
在Linux下面也有相当优异的查找命令。通常find不恨常用,因为速度慢!通常我们都是先使用whereis或者locate来检查,如果真的找不到了,才以find 来查找。为什么呢?
因为whereis和locate是利用数据库来查找数据的,所以速度相当快,而且没有实际查询硬盘,比较节省时间。
27、特殊应用:利用管道命令与数据流
在tar的使用中,有一种方式最特殊,那就是通过标准输入输出的数据流重定向,以及管道命令的方式,将待处理的文件一边打包一边解压缩到目标目录下去。
#将/etc整个目录一边打包一边在/tmp解开
cd /tmp
tar -cvf - /etc | tar -xvf -
#这个操作是有点像cp -r /etc /tmp.
#要主要的地方在于输出文件变成-,而输入文件也变成-,又有一个|存在。
#这分别代表standard input,
standard output与管道命令
#简单的想法中,你可以将-想成是内存中的一个设备(缓冲区)
28、 tar可以用来备份关键数据,而dd则可以用来备份整块分区或者整块硬盘,如果要将数据填回到文件系统中,可能要考虑原本的文件系统才能成功。
新分区出来的分区不需要经过格式化,因为dd可以将原本旧的分区中扇区表面的数据整个复制过来。当然来同superblock,boot sector,meta data等全部也会复制过来。
未来你如果想要构建两块一模一样的磁盘时,只需要执行:"dd if=/dev/sda of=/dev/sdb",就能够让两块磁盘一模一样,设置/dev/sdb不需要分区与格式化,因为该命令还可以将/dev/sda内的所有数据,包括MBR与分区表也复制到/dev/sdb中。
29、shell与bash概念
如上图所示,操作系统的角色图,我们可以发现,应用程序其实是在最外层,就如同鸡蛋的外壳一样,因此这个也就被称呼为shell。
其实shell的功能只是提供用户操作系统的一个接口,因此这个shell需要可以调用其他软件才好,如man,chmod,chown,vi,fdisk,mkfs等命令,这些命令都是独立的应用程序,但是我们可以通过shell来操作这些应用程序,让这些应用程序调用内核来运行所需的工作。
也就是说,只要能够操作应用程序的接口能够称为shell,狭义的shell指的是命令行方面的软件,包括本上要介绍的bash等。
广义的shell则包括图形界面的软件,因为图形界面其实也能够操作各种应用程序来调用内核工作。
30、Linux为什么要使用bash作为默认的shell呢?bash主要的几个特点:
- 命令记忆能力
- 命令与文件不全功能
- 命令别名设置功能
- 作业控制、前台、后台控制
- 程序脚本
- 在DOS年代还记得将一堆命令写在一起的所谓的“批处理文件”吧?在Linux下面的shell script则可以发挥更为强大的功能,可以将你平时管理系统常需要执行的连续命令写成一个文件,该文件并且可以通过交互的方式来进行主机的检测工作。也可以通过shell提供的环境变量及相关命令进行设计。整个设计下来几乎就是一个小型的程序语言了。该scrip t 的功能真的是超乎我的想象。以前在DOS下需要程序语言来写的东西,在Linux下面可以使用简单的shell script就可以帮你完成。
- 通配符
31、什么是变量?
简单的说就是让某个特定的字符串代表不固定的内容。
讲得更简单一些,我们可以用一个简单的“字眼”来替代另一个比较复杂的或者是容易变动的数据。
这最大的好处就是“方便”。
32、什么是内核文件?
当某些进程发生错误时,系统可能会将该进程在内存中的信息写成文件(排错用),
这样文件就被成为内核文件(core file)。
33、我们在Linux磁盘文件系统中提到过,单一文件系统能够支持的单一文件大小与block的大小有关。例如block size为1024bytes时,单一文件可达16GB的容量,但是我们可以用ulimit来限制用户可以创建的文件大小。利用ulimit -f就可以设置了。单位是KB。
34、 同一帐号同时多次登陆的history写入问题
有些朋友在联系Linux的时候喜欢同时开好几个bash接口(同一身份开启多个终端),这些bash的身份都是root。这样会有~/.bash_history的写入问题吗?
想一想,因为这些bash在同时以root身份登录,因此所有的bash都有自己的1000笔记录在内存中,因为等到注销时才会更新记录文件,所以最后注销的那个bash才是最后写入的数据,如此一来其他的bash的命令操作就不会记录下来了。
由于多重登录有这样的问题,所以很多朋友度习惯单一bash登录,在用作业控制来切换不同的工作。这样才能将所有曾经执行过的命令记录下来,也方便将来系统管理员进行命令的调试。
35、我们已经谈过相对路径与绝对路径的问题,以及alias与bash的内置命令。现在我们知道系统里面其实有不少的ls命令,或者是包括内置的echo命令,那么来想一想,如果一个命令被执行时,到底是那一个ls被拿来运行?
基本上,命令的运行的顺序可以这样看:
1、以相对路径/绝对路径执行命令,例如,“/bin/ls”,"./ls";
2、由alias找到该命令来执行;
3、由bash内置(builtin)的命令来执行;
4、通过$PATH这个变量的顺序找到的第一个命令来执行。
36、什么是数据流重定向?
数据流重定向就是将某个命令执行后应该输出到屏幕上的数据传输到其他的地方。
37、管道命令虽然简单,但是需要注意的地方也要牢记:
管道命令仅会处理standard output,对于standard error output会予以忽略
管道命令必须要能够接受来自前一个命令的数据成为standard input继续处理才行
38、什么是正则表达式?
正则表达式就是处理字符串的方法,是一个标准,只要bash支持正则,我们就可以方便的利用它的格式来高效匹配。
所以,正则不是一个程序,不是一种命令,而是一种格式,一种协议,一种标准。
39、什么是shell script ?
shello script 是利用shell的功能所写的一个“程序”,这个程序是使用纯文本文件将一些shell 的语法与命令写在里面,搭配正则表达式、管道命令与数据重定向等功能,以达到我们所想要的处理目的。
40、shell script 很重要的几个作用:
- 自动化管理
- 追踪与管理系统
- 简单入侵检测
- 连续命令
- 数据处理
41、你要知道:
虽然是shell script号称是程序,但实际上,shell script处理数据的速度上是不太够的。
因为shell script用的是外部的命令与bash shell的一些默认工具,所以,它常常会去调用外部的函数库
因此,命令周期上面当然比不上传统的程序语言。
所以,shell script用在系统管理上面是很好的一项工具,但是用在处理大量数值运算上,就不够好了,
因为shell script的速度慢,且使用的CPU资源较多,造成主机资源的分配不良。
我们通常利用shell script来处理服务器的检测,倒是没有进行大量运算的需求。
42、在鸟哥的系统中,/bin/sh的链接文件是/bin/bash*, 而在我的ubuntu14.04系统中/bin/sh 默认为/bin/dash*的链接文件。这就导致我们同样的"sh [filename]"命令,而所得到的结果不一样。
【我已用su账户修改了sh的链接文件。】
43、在利用shell script 写计算程序的时候,有提到:
bash里头默认仅支持整数的数据而已
44、大开眼界:
script的执行方式的区别
- sh script:该script都会使用一个新的bash环境来执行脚本内的命令。也就是说,使用这种执行方式时,其实script是在子进程的bash内执行的。
- ./script:同上
- source script:source对script的执行方式与上两种方式不同,使用这种方式执行的script会在父进程中执行,一次各项操作都会在原本的bash中生效。因此,在不注销系统而要让某些写入~/.bashrc的设置生效时,需要使用“source ~/.bashrc”,而不能使用“sh ~/.bashrc”.
45、你需要知道:
其实在bash当中使用一个等号与两个等号的结果是一样的。不过在一般的惯用程序的写法中,一个等号代表“变量的设置”,两个等号则是代表“逻辑判断”,由于我们在中括号内重点在于“判断”而非“设置变量”,因此鸟哥建议咱们还是使用两个等号较佳。
46、其实Linux主机并不会直接认识你的“帐号名称”的,它仅认识ID(ID就是一组号码)。由于计算机仅仅认识0与1.所以主机对于数字比较有概念;至于帐号只是为了让人们容易记忆而已。而你的ID与帐号的对应关系就在/etc/passwd当中。linux说实在话,他真的只认识代表你身份的号码而已。
47 每个用户都至少取得两个ID,一个是用户ID,一个是用户组ID。