Bash Shell
大多数Linux系统默认使用的shell,bash shell 是 Bourne shell 的一个免费版本,它是最早的 Unix shell,bash还有一个特点,可以通过help命令来查看帮助。包含的功能几乎可以涵盖shell所具有的功能,所以一般的shell脚本都会指定它为执行路径。
Power Shell
PowerShell 是一种跨平台的任务自动化和配置管理框架,由命令行管理程序和脚本语言组成。 与大多数接受并返回文本的 shell 不同,PowerShell 构建在 .NET 公共语言运行时 (CLR) 的基础之上,接受并返回 .NET 对象。 这一根本上的改变引入了全新的自动化工具和方法。
C Shell
C shell 使用的是“类C”语法,csh是具有C语言风格的一种shell,其内部命令有52个,较为庞大。目前使用的并不多,已经被/bin/tcsh所取代。
Korn Shell
Korn shell 的语法与 Bourne shell 相同,同时具备了 C shell 的易用特点。许多安装脚本都使用 ksh ,ksh有42条内部命令,与bash相比有一定的限制性。
Shell是什么 ?
Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。
实际上Shell是一个命令解释器,它解释由用户输入的命令并且把它们送到内核。不仅如此,Shell有自己的编程语言用于对命令的编辑,它允许用户编写由shell命令组成的程序。Shell编程语言具有普通编程语言的很多特点,比如它也有循环结构和分支控制结构等,用这种编程语言编写的Shell程序与其他应用程序具有同样的效果。
ls 命令
ls命令用来显示目标列表,在Linux中是使用率较高的命令。ls命令的输出信息可以进行彩色加亮显示,以分区不同类型的文件。
语法
ls(选项)(参数)
选项
-a :显示所有档案及目录(ls内定将档案名或目录名称为“.”的视为隐藏,不会列出)
-A:显示隐藏文件“.”和“..”以外的所有文件
-C:多列显示输出结果,这是默认选项
-l : 单列显示输出结果,以长格式显示目录下的内容列表。输出的信息从左到右依次包括文件名,文件类型、权限模式(r-读 w-写 x-执行)、硬连接数、所有者、组、文件大小和文件的最后修改时间等;
-i :显示文件索引节点号(inode),一个索引节点代表一个文件。
参数
目录:指定要显示列表的目录,也可以是具体的文件
cat file1(文件名) :一次显示全部文件内容
more file1(文件名):分页显示,回车下一行,空格下一页
less file1(文件名):分页显示,同上,b上一页
zless file1(文件名):分页显示压缩文件
cd命令
cd 进入用户主目录
cd ~ 进入用户主目录
cd - 返回进入此目录之前所在目录
cd . . 返回上一级目录
cd . ./. . 返回上两级目录
cd !$ 把上个命令的参数作为cd 参数使用
cd / 进入根目录
cd . 当前目录
正则表达式
^ ^word :搜索以word开头的内容
$ word$ :搜索以word结尾的内容
^$ :表示空行 不是空格
. :代表且只能代表任意一个字符(不匹配空行)
\ :转义字符,让有特殊含义的字符脱掉马甲,现出原型,如.只表示小数点
* :匹配之前的字符或文本0个或多个,之前的文本或字符连续0次或多次
.*:匹配任意多个字符
括号表达式([abc][0-9][.,/] ):匹配字符集合内的任意一个字符a或b或c:[a-z]匹配所有小写字母;表示一个整体,内藏无限可能;[abc]找a或b或c可以写成[a-c]
[^abc]匹配不包含^后面的任意字符a或b或c ,是对[abc]的取反,且与^含义不同
chown chmod 命令
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成制定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户id,用户组可以是组名或组id。文件名可以是由空格分开的文件列表,在文件中可以包含通配符。
语法
chown(选项)(参数)
选项
-R:递归处理,将指定目录下的所有文件及子目录一并处理
参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
chmod命令用来变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取、写入、执行3种一般权限来区分,另有3种特殊权限可供运用。用户可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果用户对符号连接修改权限,其改变会作用在被连接的原始文件。
权限范围的表示法如下:
u(User):即文件或目录的拥有者
g(Group):即文件或目录的所属群组
o(Other):除了文件或目录拥有者或所属群组之外,其他用户皆可属于这个范围
a(All):即全部的用户,包含拥有者,所属群组及其它用户
r:读取权限,数字代号为“4”
w:写入权限,数字代号为“2”
x:执行或切换权限,数字代号为“1”
-:不具任何权限,数字代号为“0”
s:特殊功能说明:变更文件或目录的权限
gzip tar 命令
gzip命令用来压缩文件。gzip是个使用 广泛的压缩程序,文件经它压缩过后,其名称后面会多处“.gz”扩展名。gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。gzip不仅可以用来压缩大的、较少使用的文件以节省磁盘空间,还可以和tar命令一起构成Linux操作系统中比较流行的压缩文件格式。据统计,gzip命令对文本文件有60%~70%的压缩率。减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。
语法
gzip(选项)(参数)
选项
-d:解开压缩文件
-f :强行压缩文件,不理会文件名称或硬链接是否存在以及该文件是否为符号链接
硬链接符号链接不懂的详情点击这里
-l :列出压缩文件的相关信息
-r :递归处理,将指定目录下的所有文件及子目录一并处理
参数
文件列表:指定要压缩的文件列表
tar命令可以为Linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个软件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip 命令)。
语法
tar(选项)(参数)
选项
-A :新增文件到以存在的备份文件
-c :建立新的备份文件
-z :通过gzip(压缩)指令处理备份文件
-v :显示指令执行过程
-f :指定备份文件
参数
文件或目录:指定要打包的文件或目录列表
wc 命令
wc命令用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给与的文件名为“-”,则wc指令会从标准输入设备读取数据。
语法
wc(选项)(参数)
选项
-c :只显示Bytes数
-l : 只显示列数
-w :只显示字数
参数
文件:需要统计的文件列表
df du 命令
df命令用于显示磁盘分区上的可使用的磁盘空间。默认显示单位为KB。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
语法
df(选项)(参数)
选项
-a :包括全部的文件系统
-h :以可读性较高的方式显示信息(单位为KB以上的单位如MB、GB显示)
参数
文件:指定文件系统上的文件
du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的
du(选项)(参数)
选项
-a :显示目录中个别文件的大小
-c :除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
ps kill 命令
ps命令用于报告当前系统的进程状态。可以搭配kill指令随时中断、删除不必要的程序。ps命令是最基本同时也是非常强大的进程查看命令,使用该命令可以确定有哪些进行正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等,总之大部分信息都是可以通过执行命令得到的。
ps(选项)
选项
-a :显示所有终端机下执行的程序,除了阶段作业领导者之外。
a :显示现行终端机下的所有程序,包括其他用户的程序。
-A :显示所有程序。
c :列出程序时,显示每个程序真正的指令名称,而不包括路径,选项或常驻服务的标示。
由于ps命令能够支持的系统类型相当多,所以选项多的离谱!这里只列举了部分主要选项
kill命令用来删除执行中的程序或工作。kill可将指定的信息送至程序。
kill(参数)
参数:进程或作业识别号:指定要删除的进程或作业
mount 命令
mount命令用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,因为你将光盘插入cdrom中,Linux并不会自动挂载,必须使用Linux mount命令来手动完成挂载。
挂载不懂的请点击如下链接:https://blog.csdn.net/test18580/article/details/74210603
语法
mount(选项)(参数)
选项
-V:显示程序版本
-l :显示已加载的文件系统列表
-r :将文件系统加载为只读模式
-a :加载“/etc/fstab”中描述的所有文件系统
参数
设备文件名:指定要加载的文件系统所对应的设备名
加载点:指定加载点目录
alias 命令
alias命令用来设置指令的别名。我们可以使用该命令可以将一些较长的命令进行简化。使用alias时,用户必须使用单引号‘’将原来的命令引起来,防止特殊字符导致错误。
alias命令的作用只局限于该次登入的操作。若要每次登入都能够使用这些命令别名,则可将相应的alias命令存放到bash的初始化文件/etc/bashrc中
语法
alias(选项)(参数)
选项
-p :打印已经设置的命令别名
参数
命令别名设置:定义命令别名,格式为“命令别名=·实际命令·”。
set 命令
set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号“+”和“-”的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。
test 命令
test命令是shell环境中测试条件表达式的实用工具。
man 命令
man命令是Linux下的帮助命令,通过man指令可以查看Linux中的指令帮助、配置文件和编程帮助等信息
语法
man(选项)(参数)
选项
-a :在所有的man帮助手册中搜索
-p :指定内容时使用分页程序
-M:指定man手册搜索的路径
参数
数字:指定从哪本man手册中搜索帮助
关键字:指定要搜索帮助的关键字
man(1):是普通的命令
man 2 :是系统调用,如open,write之类的(通过这个,至少可以很方便的查到调用这个函数,需要加什么头文件)
man 3 :是库函数,如printf,fread
还有其他的命令详情可点击https://blog.csdn.net/vieworld177/article/details/90632173?ops_request_misc=&request_id=&biz_id=102&utm_term=Linux%20man%201%202%203&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-90632173
高层的C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程,包括四个步骤:
预处理(Preprocessing)
编译(Compilation)
汇编(Assembly)
链接(Linking)
GCC工具链介绍
通常所说的GCC是GUN Compiler Collection 的简称;是Linux系统上常用的编译工具。GCC工具链软件包括GCC、Binutils、C运行库等。
GCC
GCC(GNU C Compiler)是编译工具。本文所要介绍的将C/C++语言编写的程序转换成为处理器能够执行的二进制代码的过程即由编译器完成。
gcc命令
gcc命令使用GNU推出的基于C/C++的编译器,是开放源代码领域应用最广泛的编译器,具有功能强大,编译代码支持性能优化等特点。现在很多程序员都应用GCC,怎样才能更好的应用GCC。目前,GCC可以用来编译C/C++、FORTRAN、JAVA、OBJC、ADA等语言的程序,可根据需要选择安装支持的语言。
语法
gcc(选项)(参数)
选项
-o :指定生成的输出文件
-E :仅执行编译预处理
-S :将C代码转换为汇编代码
-wall:显示警告信息
-c :仅执行编译操作,不进行链接操作
参数
C源文件:指定C语言源代码文件
实例
常用编译命令选项
假设源程序文件名为test.c
无选项编译链接
gcc test.c
将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out
选项 -o
gcc test.c -o test
将test.c预处理、汇编、编译并链接形成可执行文件test。-o 选项用来指定输出文件的文件名
选项 -E
gcc -E test.c -o test.i
将test.c预处理输出test.i文件
选项 -S
gcc -S test.i
将预处理输出文件test.i汇编成test.s文件。
选项 -c
gcc -c test.s
将汇编输出文件test.s编译输出test.o文件。
无选项链接
gcc test.o -o test
将编译输出文件test.o链接成最终可执行文件test。
make makefile
make 命令是GNU的工程化编辑工具,用于编译众多相互关联的源代码文件,以实现工程化的管理,提高开发效率。
语法
make(选项)(参数)
选项
-f :指定“makefile”文件
-p:输出所有宏定义和目标文件描述
参数
目标:指定编译目标
知识拓展
无论是在Linux 还是在 Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install。利用make工具,我们可以将大型的开发项目分解成多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。
而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改过的部分进行编译。
因此,有效的利用make和makefile工具可以大大提高项目开发的效率。同时掌握make和makefile之后,您也不会再面对着Linux下的应用软件手足无措了。
makefile介绍
make命令执行时,需要一个makefile文件,以告诉make命令需要怎么样的去编译和链接程序。
首先,我们用一个示例来说明makefile的书写规则。以便给大家一个感性认识。这个示例来源于GNU的make使用手册,在这个示例中,我们的工程有8个C文件和3个头文件,我们要写一个makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:
makefile的规则
在讲述makefile之前,还是让我们先来粗略地看一看makefile的规则
target …:prerequisites …
command
…
…
target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Lbel),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
prerequisites就是,要生成那个target所需要的文件或是目标
command也就是make需要执行的命令。(任意的shell命令)
这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。这就是makefile的规则,也就是makefile中最核心的内容。
说到底,makefile的东西就是这样一点,不过也不尽然,这是makefile的主线和核心,但要写好一个makefile还不够,后面内容还多这呢- 。。 -~!因为此篇是复习资料,具体例子在这不细讲 ,想了解详情可以点一下链接https://blog.csdn.net/chungle2011/article/details/44854035
make是如何工作的
在默认的方式下,也就是我们只输入make命令,那么:
四个区域
一、新建代码库
#在当前目录新建一个Git代码库
git init
#新建一个目录,将其初始化为git代码库
git init [project-name]
#下载一个项目和它的整个代码历史
git clone [url]
二、增加 删除 文件
#添加指定文件到暂存区
git add [file1] [file2] …
#添加指定目录到暂存区,包括子目录
git add [dir]
#添加当前目录的所有文件到暂存区
git add .
#添加每个变化前,都会要求确认,对于同一个文件的多处变化
#可以实现分次提交
git add -p
#删除工作区文件,并且将这次删除放入暂存区
git rm [file1] [file2]…
#改名文件,并且将这个改名放入暂存区
git mv [file-original name] [file-new name]
三、代码提交
#提交暂存区到仓库区,message表示你要给该文件加的提示信息
git commit -m [message]
##提交工作区自上次commit之后的变化,直接到仓库区
git commit -a
四、分支
#列出所有本地分支
git branch
#列出所有远程分支
git branch -r
#列出所有本地分支和远程分支
git branch -a
#新建一个分支,但仍停留在当前分支
git branch [branch-name]
#新建一个分支,并切换到该分支
git checkout -b [branch]
#切换到指定分支,并更新工作区
git checkout [branch-name]
#合并指定分支到当前分支
git merge [branch]
#删除分支
git branch -d [branch-name]
服务器常用管理方式和工具
远程访问与Denyhost
安装ssh与denyhosts
配置文件 /etc/denyhosts.conf:
#系统安全日志文件,主要获取ssh信息
SECURE_LOG = /var/log/secure
#拒绝写入IP文件 hosts.deny
HOSTS_DENY = /etc/hosts.deny
#过多久后清楚已经禁止的,其中w代表周,d代表天,h代表小时,s代表秒,m代表分钟
PURGE_DENY = 4w
# denyhosts所要阻止的服务器名称
BLOCK_SERVICE = sshd
# 允许无效用户登录失败的次数
DENY_THRESHOLD_INVALID = 3
#允许普通用户登录失败的次数
DENY_THRESHOLD_VALID = 10
# 允许ROOT用户登录失败的次数
DENY_THRESHOLD_ROOT = 6
# 设定 deny host 写入到该资料夹
DENY_THRESHOLD_RESTRICTED = 1
#将deny的host或ip记录到Work_dir中
WORK_DIR = /var/lib/denyhosts
Linux文件系统
Linux系统如何支持多种文件系统?
Linux系统启动时,首先挂载根文件系统,之后可以自动或手动挂载其他的文件系统,这些文件系统要挂载到挂载点上,与虚拟文件系统(Virtual File System )和通用块设备层(General Block Device Layer)建立联系。因此,一个系统中可以同时存在不同的文件系统
什么是挂载点,挂载点的作用是?
挂载点是Linux访问磁盘的入口,能够使数据正常写入磁盘
磁盘分区
磁盘的分区主要分为基本分区(primary partion)和扩充分区(extension partion)两种,基本分区和扩充分区的数目之和不能大于四个。且基本分区可以马上被使用但不能再分区。扩充分区必须再进行分区后才能使用,也就是说它必须还要进行二次分区。那么由扩充分区再分下去的是什么呢?它是逻辑分区(logical partion),况且逻辑分区没有数量上的限制
在Linux中,每一个硬件设备都映射到一个系统的文件,对于硬盘、光驱等IDE或SCSI设备也不例外。Linux把各种IDE设备分配了一个由hd前缀组成的文件;而对于各种SCSI设备,则分配了一个由sd前缀组成的文件。
在Linux中规定,每一个硬盘设备最多能有4个主分区(其中包括扩展分区)构成,任何一个扩展分区都要占用一个主分区号码,也就是在一个硬盘中,主分区和扩展分区一共最多是4个
Linux规定了主分区(或者扩展分区)占用1至16号码中的前4个号码。以第一个IDE硬盘为例说明,主分区(或者拓展分区)占用了hda1、hda2、hda3、hda4,而逻辑分区占用了hda5到hda16等12个号码
因此,Linux下面每一个硬盘总共最多有16个分区
IDE硬盘最多有64个分区
分区表
磁盘分区表主要有两种格式,一种是限制级较多的MBR分区表,一种是较新且限制较少的GPT分区表。
1.MBR
MBR中,第一个扇区最重要,里面有主要开机记录(Master boot record,MBR)及分区表(patition table),其中主要开机记录占446 bytes,分区表占64 bytes,最多只能存储4个分区,这4个分区为主分区(Primary)和扩展分区(Extended)。其中扩展分区只有一个,它使用其他扇区用记录额外的分区表,因此通过扩展分区可以分出更多分区,这些分区称为逻辑分区
Linux也把分区当成文件,分区文件的命名方式为:磁盘文件名 + 编号 ,例如 /dev/sda1。注意,逻辑分区的编号从5开始
2.GPT
不同的磁盘有不同的扇区大小,例如512 bytes 和最新磁盘的4 k。GPT为了兼容所有磁盘,在定义扇区上使用逻辑区块地址(logical block address,LBA),LBA默认大小为512 bytes。
GPT第1个区块记录了主要开机记录(MBR),紧接着33个区块记录分区信息,并把最后的33个区块用于对分区信息进行备份。这33个区块第一个为GPT表头记录,这个部分记录了分区表本身的位置与大小和备份分区的位置,同时放置了分区表的检验码(CRC32),操作系统可以根据这个校验码来判断GPT是否正确 。若有错误,可以使用备份分区进行恢复。
GPT没有扩展分区概念,都是主分区,每个LAB可以分4个分区,因此总共可以分4*32=128个分区
MBR不支持2.2TB以上的硬盘,GPT则最多支持到233TB=8ZB
文件系统
在Unix哲学中,有一个重要的概念:一切都是文件,Linux传承了这个概念。
在Unix系统中,每个硬件都看成是一个文件,称为设备文件,用户就可以用读写文件的方式实现对硬件的访问。
根文件系统
根文件系统首先是一种文件系统
是内核启动时所挂载的第一个文件系统
内核代码的映像文件保存在根文件系统中。系统引导启动程序会在根文件系统挂载之后从中把一些初始化脚本(如rcS,inittab )和服务加载到内存中运行
文件系统和内核是完全独立的两个部分
根文件系统是加载其它文件系统的“根”
根文件系统包含系统启动时所必须的目录和关键性的文件,以及使其他文件系统得以挂载(mount)所必要的文件。
init进程的应用程序必须运行在根文件系统上
根文件系统提供了目录“/”;
/etc中的配置文件 例如:挂载分区时所依赖的信息存放于/etc/fstab这个文件中
/bin/sbin等目录下的shell命令(ls、cd 等)
/lib目录下的库文件
根文件系统常用目录
正常来说,根文件系统至少包括以下目录:
/home目录
用户目录,它是可选的,对于每个普通用户,在/home目录下都有一个以用户名命名的子目录,里面存放用户相关的配置文件
/root目录
根用户的目录,与此对应,普通用户的目录是/home下的某个子目录
/usr目录
/var目录
目录中存放可变的数据,比如spool目录(mail,news),log文件,临时文件
/proc目录
/mnt目录
临时挂载某个文件系统的挂接点,通常是空目录,也可以在里面创建一些空的子目录,比如/mnt/cdram/mnt/hda1 。用来临时挂载光盘、硬盘。
/tmp目录
存放临时文件,通常是空目录,一些程序使用该目录存储临时文件
Linux日志 /var/log
系统日志
应用日志
常见系统日志
alternatives.log:系统的一些更新替代信息记录
apport.log:应用程序崩溃信息记录
apt/history.log:使用apt-get安装卸载软件的信息记录
apt/term.log:使用apt-get时的具体操作,如package的下载打开等
auth.log:登录认证的信息记录 有的系统中是secure
boot.log:系统启动时的程序服务的日志信息
btmp:错误登录的信息记录
Consolekit/history:控制台的信息记录
dist-upgrade:dist-upgrade这种更新方式的信息记录
dmesg:启动时,显示屏幕上内核缓冲信息、与硬件有关的信息
dpkg.log:dpkg命令管理包的日志
faillog:用户登录失败详细信息记录
fontconfig.log:与字体配置有关的信息记录
kern.log:内核产生的信息记录,在自己修改内核时有很大帮助
lastlog:用户的最近信息记录
wtmp:登录信息的记录。wtmp可以找出谁正在登陆进入系统,谁使用命令显示这个文件或信息等
syslog:系统信息记录
虚拟文件系统
是一种伪文件系统(虚拟文件系统)
存储的是当前内核运行状态的一系列特殊文件
通过这些文件查看有关信息
通过更改其中某些文件可以改变内核的运行状态
Linux用户管理
用户相关文件
相关命令
用户管理
用户组管理
sudo命令
非root用户不需要知道root的密码,就可以提权到root,执行一些root才能执行的命令
服务常用端口
(HTTP):80
常见Linux应用
主流WEB服务器
1.Apache
Apache的特点是简单、速度快、性能稳定,并可做代理服务器来使用。Apache是以进程为基础的结构,进程要比线程消耗更多的系统开支,不太适合于多处理器环境,因此,在一个Apache Web站点扩容时,通常是增加服务器或扩充群集节点而不是增加处理器
2.Nginx
Nginx是一个高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP代理服务器。Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡。其拥有匹配Lighttpd的性能,同时还没有Lighttpd的内存泄漏问题,而且Lighttpd的mod_proxy也有一些问题并且很久没有更新
Nginx专为性能优化而开发,性能是其最重要的考量,实现上非常注重效率。它支持内核Poll模型,能经受高负载的考验,有报告表明能支持高达50000个并发连接数
Nginx具有很高的稳定性。其他HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器
Nginx支持热部署。它的启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动
3.IIS
IIS是一种WEB服务组件,其中包括WEB服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网络浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。它提供ISAPI(Instranet Server API)作为扩展WEB服务器功能的编程接口;同时,它还提供了一个Internet数据库连接器,可以实现对数据库的查询和更新。IIS提供了一个图形界面的管理工具,成为Internet服务管理器,可用于监视配置和控制Internet服务
4.lighttpd
lighttpd是一个具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等待点,使用fastcgi方式运行php,它会使用很少的PHP进程相应很大的并发量
守护进程
Linux Daemon(守护进程)是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。它不需要用户输入就能运行而且提供某种服务,不是对整个系统就是对某个用户程序提供服务。Linux系统的大多数服务器就是通过守护进程实现的。常见的守护进程包括系统日志进程syslogd、web服务器httpd、邮件服务器sendmail和数据库服务器mysqld等
守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关闭都保持运行。守护进程经常以超级用户(root)权限运行,因为它们要使用特使的端口(1-1024)或访问某些特殊的资源
一个守护进程的父进程是init进程,因为它真正的父进程在fork出子进程后就先于子进程exit退出了,所以它是一个由init继承的孤儿进程。守护进程是非交互式程序,没有控制终端,所以任何输出,无论是向标准输出设备stdout还是标准出错设备stderr的输出都需要特殊处理
守护进程的名称通常以d结尾,比如sshd、xinetd、crond、httpd等
apachectl命令用法
简介
apachectl命令是Apache的Web服务器前端控制工具,用以启动、关闭和重新启动Web服务器进程。
命令
启动服务
apachectl start
停止服务
apachectl stop
状态查看
apachectl status
重启
apachectl restart
systemctl命令用法
启动级别配置
由于工作需要,常常会在虚拟机中安装各类Linux系统,而绝大部分时间,我们需要的只是一个文字界面,能够通过host ssh到VM中,图形界面没必要起着,白白浪费CPU和内存,通过systemctl命令配置默认进入文字界面,只需一行
systemctl set-default multi-user.target
如果要切回图形界面,相应地:
systemctl set-default graphical.target
开机启动服务
systemctl enable***.service
停止开机启动服务
systemctl disable***.service
启动/停止/重启服务
systemctl start/stop/restart***.service
查询服务状态
systemctl status***.service
在远程机器上执行命令,类似ssh user@host“ ”
systemctl -H user@hostname
列出系统服务,-t后用tab键可以关联出所有支持的unit类型
systemctl -t service
列出所有已经加载的units的状态
systemctl -a
别名
主要配置选项
#apache软件安装的位置,主机目录
ServerRoot " /usr/local/apache"
#端口号
Port 80
#指定虚拟主机使用的IP地址
ServerName SERVER-IP
#apache放置网页的地方,里面的index.html即为连到此主机的预设首页
DocumentRoot “/usr/local/apache/htdocs”
#记录httpd父进程的进程号
PidFile “/var/run/httpd.pid”
配置虚拟主机
设置 /etc/httpd/conf/httpd.conf文件
首先,修改NameVirtualHost,设定虚拟主机的IP地址
NameVirtualHost 192.168.173.66
然后,增加如下内容
DocumentRoot /var/www/html/test1
ServerName www.test1.com
VirtualHost>
DocumentRoot /var/www/html/test2
ServerName www.test2.com
VirtualHost>
设定一个虚拟主机至少需要ServerName和DocumentRoot两项,即服务器名和虚拟机网页根目录
2.设置DNS服务器相关内容
/etc/hosts
127.0.0.1 www.test1.com
127.0.0.1 www.test2.com
/etc/host.conf
order hosts.bind
multi on
3.创建虚拟主机的根文档目录
[root@lib1 html]# mkdir /var/www/html/test1
[root@lib1 html]# mkdir /var/www/html/test2
4.检测服务器配置语法
[root@lib1 root]# apachectl configtest
Syntax Ok
说明语法正确
5.重启Apache服务器和DNS服务器
[root@lib1 root]# service named restart
[root@lib1 root]# service httpd restart
6.在浏览器上测试
FTP服务器工作模式(主/被动)
FTP协议概述
采用客户端/服务端模型,使用TCP建立连接,以明码方式传输数据
FTP在服务器和客户端之间建立两个连接:控制连接 数据连接
控制连接:主要用来发送命令和服务器的相应信息
数据连接:主要用来传输数据,如:
从客户端向服务器发送一个文件
从服务器向客户端发送一个文件
从服务器向客户端发送目录列表
控制连接的建立
服务器在21端口被动打开,等待客户端连接
客户端使用临时端口号,主动打开服务的端口21
采用两种方式工作:主动模式PORT和被动模式PASV
主动模式
1.客户机选择一个临时端口号,使用PORT命令发给服务器(通过控制连接)
2.服务器接收到客户端的端口号,并向客户机发起一个主动连接(服务器使用20端口)
注:因为端口可以任意指定,所以客户端的机器必须允许ftp服务器能够顺利连接所有端口,所以存在一定安全隐患。
被动模式
1.客户通过控制连接发送pasv命令给服务器
2.服务器将选择的数据端口发给客户端
3.服务器被动监听请求,客户端使用从服务器获得的端口号向服务器发起主动连接模式,从而建立数据连接
vsftpd的三种认证模式
1.匿名开放模式
它是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录到FTP服务器
2.本地用户模式
它是通过Linux系统本地的账户密码信息进行认证的模式,相较于匿名开放模式更安全,而且配置起来也很简单。但是若被恶意用户破解了账户的信息,就可以畅通无阻地登录FTP服务器,从而完全控制服务器
3.虚拟用户模式
它是三种模式中最安全的一种认证模式,它需要为FTP服务器单独建立用户数据库文件,虚拟出的用户进行口令验证的账户信息,而这些账户信息在服务器系统上并不存在,仅供FTP服务器进行认证使用
vsftpd.conf配置项
anonymous_enable = YES
控制是否允许匿名用户登录的选项
local_enable = YES
是否允许本地用户登录,即 /etc/passwd中用户登录
guest_enable = YES | NO
当设置为YES时启动虚拟用户模式。所有非匿名用户都被映射为一个特定的本地用户(默认值为ftp,可通过guest_username来设定),该选项默认值为NO。如,所有本地用户都被映射为ftp,登录进去后主目录也是该用户在/etc/passwd中directory一栏的设置,即/var/ftp。但当local_root有设定值时,则(仍是以用户名ftp)登录后的主目录为local_root所设定的值
限制本地用户在登录主目录
chroo_list_file = /etc/vsftpd/chroot_list
例子:
(1)限制所有的本地用户在用户主目录
chroot_local_user=YES
(2) 限制部分本地用户(zhangshan、lisi)在用户主目录,其他用户不限制
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
在/etc/vtftpd.chroot_list中加入要限制的本地用户名(zhangshan、lisi),每个用户占一行
用户登录黑名单和白名单
/etc/vsftpd/目录下有两个文件
ftpusers黑名单,ftpusers不受任何配置项的影响,它总是有效,它是一个黑名单!
该文件存放的是一个禁止访问FTP的用户列表,通常为了安全考虑,管理员不希望一些拥有过大权限的账号(比如root)登入FTP,以免通过该账号从FTP上传或下载一些危险位置上的文件从而对系统造成损坏
user_list,默认也是黑名单,在其中加入admin,发现登录失败。但是可以通过修改配置文件来使它变为白名单:
在配置文件下添加后两句,第一句配置文件默认就存在:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list
umask
umask:umask设置了用户创建文件的默认权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码
文件的默认权限是666
目录的默认权限是777
例子:
假设已知umask222求新建文件的默认权限为666-222=444
创建目录的默认权限为777-222=555