linux常用命令

Linux命令培训完整手册

整理:徐林林
2018年01月11日

目录
1 核心命令 5
1.1学习目标 5
1.2文件与目录操作 5
1.2.1文件与目录操作之基本操作 5
1.2.1.1 pwd 5
1.2.1.2 ls 5
1.2.1.3 cd 6
1.2.1.4 mkdir 6
1.2.1.5 rmdir 6
1.2.1.6 touch 6
1.2.1.7 mv 6
1.2.1.8 cp(非常重要) 6
1.2.1.9 rm 6
1.2.2文件与目录操作之文件编辑 6
1.2.2.1 vi(非常重要) 7
1.2.2.2 sed 7
1.2.3文件与目录操作之文件目录属性修改 7
1.2.3.1 chmod(非常重要) 7
1.2.3.2 chown 7
1.2.3.3 chgrp 7
1.2.3.4 file 7
1.2.3.5 lsattr 7
1.2.4文件与目录操作之文件处理与内容查看 7
1.2.4.1 ln 8
1.2.4.2 cat 8
1.2.4.3 more 8
1.2.4.3 less 8
1.2.4.4 head 8
1.2.4.5 tail 8
1.2.5文件与目录操作之文件目录查找与比较 8
1.2.5.1 find(非常重要) 8
1.2.5.2 diff 8
1.2.5.3 which 9
1.2.5.4 whereis 9
1.2.6文件与目录操作之文件目录压缩与打包 9
1.2.6.1 tar(非常重要) 9
1.2.6.2 gzip 9
1.2.6.3 gunzip 9
1.2.6.4 zip 9
1.2.6.5 unzip 9
1.2.7文件与目录操作之文件内容过滤、分割与合并等相关 9
1.2.7.1 grep(非常重要) 9
1.2.7.2 join 10
1.2.7.3 split 10
1.2.7.4 wc 10
1.2.7.5 sort 10
1.2.7.6 join 10
1.2.8文件与目录操作之文件传输 10
1.2.8.1 ftp(重要) 10
1.2.8.1 rcp 10
1.3其他管理类、监控类命令 11
1.3.1进程与作业管理 11
1.3.1.1 ps 11
1.3.1.2 kill 11
1.3.1.3 & 11
1.3.1.4 nohup 11
1.3.1.5 crontab 11
1.3.2用户组管理 11
1.3.2.1 useradd/adduser 11
1.3.2.2 passwd 11
1.3.2.3 userdel 12
1.3.2.4 su 12
1.3.2.5 sudo 12
1.3.2.6 groupadd 12
1.3.2.6 groups 12
1.3.2.7 id 12
1.3.3网络管理相关 12
1.3.3.1 ifconfig 12
1.3.3.3 netconfig 12
1.3.3.3 netstat 13
1.3.3.4 ping 13
1.3.3.5 hostname/host 13
1.3.4软件包管理相关 13
1.3.4.1 rpm 13
1.3.4.1 yum 13
1.3.5系统监控相关 13
1.3.5.1 free 13
1.3.5.2 top 13
1.3.5.3 vmstat 13
1.3.5.4 iostat 14
1.3.5.5 time 14
1.3.6其他相关 14
1.3.6.1 read 14
1.3.6.2 set/unset 14
1.3.6.3 ulimit 14
1.3.6.4 history 14
1.3.6.5 alias 14
1.3.6.6 help/man 14
2 Shell编程 15
2.1学习策略 15
2.2Shell编程核心语法 15
2.2.1输入与输出 15
2.2.1.1 标准输入 15
2.2.2熟悉各种引号 15
2.2.2.1 单引号 ‘’ 15
2.2.2.2 双引号 “” 16
2.2.2.3 反引号 ` 16
2.2.2.4 反斜杠\ 16
2.2.3各种变量 16
2.2.3.1 环境变量 16
2.2.3.2 本地变量 16
2.2.3.3 特殊变量 16
2.2.3.4 位置变量 16
2.2.4条件测试 16
2.2.4.1 数字比较 17
2.2.4.2 字符串比较 17
2.2.4.3 文件属性测试 17
2.2.4.4 组合测试 17
2.2.5控制结构 17
2.2.5.1 分支结构if 17
2.2.5.2 分支结构case 17
2.2.5.3 循环结构while 17
2.2.5.4 循环结构for 17
2.2.5.5 循环结构until 18
2.2.5.6 break语句 18
2.2.5.7 continue语句 18
2.2.6正则表达式+grep、awk、sed三大命令 18
2.2.6.1 正则表达式基础 18
2.2.6.2 正则表达式+grep命令 18
2.2.6.3 正则表达式+awk命令 18
2.2.6.4 正则表达式+sed命令 18
2.2.7shell函数 18
2.2.7.1 shell函数基础 18
2.2.8shell脚本框架—综合案例 19
2.2.8.1 shell脚本框架 19
2.2.9.1 综合案例与典型面试题 19
3 Linux环境搭建 20
3.1学习策略 20
3.2LAMP/LNMP类型环境搭建,拿ECSHOP/Discuz论坛举例 20
3.2.1Linux安装Apache 20
3.2.1.1 解压安装包 20
3.2.1.2 解压安装包 20
3.2.1.3 解压安装包 20
3.2.1.4 解压安装包 20

1 核心命令
1.1学习目标
核心目标:熟悉Linux、Unix(HP-UNIX、IBM AIX、Sun Solaris) 本质他们的核心命令集大同小异。
笔试目标:考一些常用的核心命令,尤其以文件操作为主 vi、chmod、ln、 find、grep、awk、sed、系统管理:df、ps、top、free、用户管理:adduser、
userdel等。一些简单的shell编程(知识点)
面试目标:环境搭建:LNMP/LAMP(源码安装tar、./configure、make、make install)、rpm安装、卸载、升级等、Linux安装oracle、可执行文件,如linux安装java、Linux安装weblogic、websphere等。
工作目标:基本命令、环境搭建、shell编程、跟性能相关(监控相关命令或者linux Shell工具,比如nmon)
职业发展:linux后台自动化测试(精通shell编程)

1.2文件与目录操作
文件与目录操作是Linux最基本也是最关键的操作,一定要非常熟练操作。
1.2.1文件与目录操作之基本操作
1.2.1.1 pwd (print working directory)

功能说明:显示工作目录。
语  法:pwd
补充说明:执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称。

举 例:pwd

上例中,当前目录为 /root,使用root用户登录系统,默认的工作目录是/root
1.2.1.2 ls
功能说明:列出目录内容。
语  法:ls [-1aAcdF] [文件或目录]
补充说明:执行ls指令可列出目录的内容,包括文件和子目录的名称。
参  数:只列出常用参数
-1 每列仅显示一个文件或目录名称。
-a或–all 下所有文件和目录。
-A或–almost-all 显示所有文件和目录,但不显示现行目录和上层目录。
-c 以更改时间排序,显示文件和目录。
-d或–directory 显示目录名称而非其内容。
-F或–classify 在执行文件,目录,Socket,符号连接,管道名称后面,各自加上"*","/","=","@","|"号。
举 例:

1.2.1.3 cd
功能说明:切换目录。
语  法:cd [目的目录]
补充说明:cd指令可让用户在不同的目录间切换,但该用户必须拥有足够的权限进入目的目录。
举 例:

1.2.1.4 mkdir
功能说明:建立目录
语  法:mkdir [-p] [-m <目录属性>] [目录名称]
补充说明:mkdir可建立目录并同时设置目录的权限。
参  数:
-m<目录属性>或–mode<目录属性> 建立目录时同时设置目录的权限。
-p或–parents 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录。
举 例:

1.2.1.5 rmdir
功能说明:删除空目录。
语  法:rmdir [-p] [目录]
补充说明:当有空目录要删除时,可使用rmdir指令。
参  数:
-p或–parents 删除指定目录后,若该目录的上层目录已变成空目录,则将其一并删除。
举 例:

1.2.1.6 touch
功能说明:改变文件或目录时间,也可以创建一个空文件。
语  法:touch [-a] [-d <日期时间>] [-r <参考文件或目录>] [-t <日期时间>] [文件或目录]
补充说明:使用touch指令可更改文件或目录的日期时间,包括存取时间和更改时间。
参  数:常用参数
 -a只更改存取时间。
 -d<时间日期>  使用指定的日期时间,而非现在的时间。
 -r<参考文件或目录>  把指定文件或目录的日期时间,统统设成和参考文件或目录的日期时间相同。
 -t<日期时间>  使用指定的日期时间,而非现在的时间。
举 例:

1.2.1.7 mv
功能说明:移动或更名现有的文件或目录。
语  法:mv [-bfi] [源文件或目录] [目标文件或目录]
补充说明:mv可移动文件或目录,或是更改文件或目录的名称。
参  数:
 -b或–backup  若需覆盖文件,则覆盖前先行备份。
 -f或–force  若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文 件或目录。
 -i或–interactive  覆盖前先行询问用户。
举 例:
修改文件名,如下图,把testbak.txt 文件修改为testbak

修改文件名,如下图,把test.txt 文件修改为testbak,加-f表示覆盖原来的testbak文件,如下图:

使用mv把zelin目录移动到zelinbak目录下:

1.2.1.8 cp(非常重要)
功能说明:复制文件或目录。
语  法:cp [-bfipPrR] [源文件或目录][目标文件或目录] [目的目录]
补充说明:cp指令用在复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,而最后的目的地并非是一个已存在的目录,则会出现错误信息。
参  数:
 -b或–backup  删除,覆盖目标文件之前的备份,备份文件会在字尾加上一个备份字符串。
 -f或–force  强行复制文件或目录,不论目标文件或目录是否已存在。
 -i或–interactive  覆盖既有文件之前先询问用户。
 -p或–preserve  保留源文件或目录的属性。
 -P或–parents  保留源文件或目录的路径。
 -r  递归处理,将指定目录下的文件与子目录一并处理。
举 例:

1.2.1.9 rm
功能说明:删除文件或目录。
语  法:rm [-firv] [文件或目录…]
补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数"-r",否则预设仅会删除文件。
参  数:
 -f或–force  强制删除文件或目录。
 -i或–interactive  删除既有文件或目录之前先询问用户。
 -r或-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -v或–verbose  显示指令执行过程。
举 例:

1.2.2文件与目录操作之文件编辑
1.2.2.1 vi(非常重要)
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。
由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

1.2.2.1.1 vi的基本概念
  基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行/末行模式(last line mode),各模式的功能区分如下:
1) 命令行模式(command mode)
  控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insertmode下,或者到 last line mode。
2) 插入模式(Insert mode)
  只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。
3) 底行/末行模式(last line mode)
  将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。
不过一般我们在使用时把vi简化成两个模式,就是将底行/末行模式(last linemode)也算入命令行模式command mode)。
1.2.2.1.2 vi基本操作
a) 进入vi
  在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:
  # vi myfile
如下图:

不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到 「插入模式(Insert mode)」再说吧!
b) 切换至插入模式(Insert mode)编辑文件
  在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。 如下图

c) Insert 的切换 

您目前处于「插入模式(Insert mode)」,就能输入文字了,然后想要保存,就要先按一下「ESC」键转到「命令行模式(command mode)」
d) 退出vi及保存文件
  在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)

1.2.2.1.3 进入vi的命令
vi filename:打开或新建文件,并将光标置于上次打开的行
vi +n filename:打开文件,并将光标置于第n行首

vi + filename:打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

1.2.2.1.4 移动光标类【只列出常用】命令模式下
h :光标左移一个字符
l :光标右移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
space:光标右移一个字符
Backspace:光标左移一个字符
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾(光标要开始在首行)
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
: 光 标 移 至 当 前 行 尾 1.2.2.1.5 命 令 模 式 转 插 入 模 式 , 相 关 插 入 命 令 下 面 蓝 色 部 分 i 到 R 常 考 , 常 被 问 到 。 i : 在 光 标 前 I : 在 当 前 行 首 a : 光 标 后 A : 在 当 前 行 尾 o : 在 当 前 行 之 下 新 开 一 行 O : 在 当 前 行 之 上 新 开 一 行 r : 替 换 当 前 字 符 R : 替 换 当 前 字 符 及 其 后 的 字 符 , 直 至 按 E S C 键 s : 从 当 前 光 标 位 置 处 开 始 , 以 输 入 的 文 本 替 代 指 定 数 目 的 字 符 S : 删 除 指 定 数 目 的 行 , 并 以 所 输 入 文 本 代 替 之 n c w 或 n C W : 修 改 指 定 数 目 的 字 n C C : 修 改 指 定 数 目 的 行 1.2.2.1.6 命 令 模 式 删 除 相 关 命 令 n d w 或 n d W : 删 除 光 标 处 开 始 及 其 后 的 n − 1 个 字 d 0 : 删 至 行 首 d :光标移至当前行尾 1.2.2.1.5 命令模式转插入模式,相关插入命令 下面蓝色部分 i 到 R 常考,常被问到。 i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行 1.2.2.1.6 命令模式删除相关命令 ndw或ndW:删除光标处开始及其后的n-1个字 d0:删至行首 d 1.2.2.1.5iRiIaAoOrRESCsSncwnCWnCC1.2.2.1.6ndwndWn1d0d:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
1.2.2.1.7 搜索及替换命令(重要)
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换

1.2.2.1.8 最后行方式命令(重要)
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 copy n3:将n1行到n2行之间的内容拷贝到第n3行下

:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command

:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行

1.2.2.1.9 命令模式下复制、黏贴类(重要)
  yw:将光标所在之处到字尾的字符复制到缓冲区中。
  yw:复制#个字到缓冲区
  yy:复制光标所在行到缓冲区。
nyy:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。
p:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。
u:将缓冲取消操作
1.2.2.1.10 选项相关
:set all:列出所有选项设置情况
:set term:设置终端类型
:set ignorecase:在搜索中忽略大小写
:set number:或者 :set nu:显示行号
:set nonumber:或者 :set nonu:取消显示行号
1.2.3文件与目录操作之文件目录属性修改
1.2.3.1 chmod(非常重要)
功能说明:变更文件或目录的权限。
语  法:chmod [-Rv] [ugoa]+/-/=<权限设置…>] [文件或目录…]
chmod [-Rv] [数字代号] [文件或目录…]
chmod [-Rv] [–reference=<参考文件或目录>] [文件或目录…]
补充说明:在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。权限范围的表示法如下:
 u:User,即文件或目录的拥有者。
 g:Group,即文件或目录的所属群组。
 o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。
 a:All,即全部的用户,包含拥有者,所属群组以及其他用户。
 有关权限代号的部分,列表于下:
 r:读取权限,数字代号为"4"。
 w:写入权限,数字代号为"2"。
 x:执行或切换权限,数字代号为"1"。
 -:不具任何权限,数字代号为"0"。

-R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -v或–verbose  显示指令执行过程。
 --reference=<参考文件或目录>  把指定文件或目录的权限全部设成和参考文件或目录的权限相同
举 例:
下面第一条命令:chmod u+x testa 表示给testa文件的属主用户添加执行权限
下面第二条命令:chmod go+w testa 表示给testa文件的同组和其他用户添加执行权限。
下面第三条命令:chmod a-w testa 表示给testa文件删除所有用户可写权限

1.2.3.2 chown
功能说明:变更文件或目录的拥有者或所属群组。
语  法:chown [-Rv] [拥有者.<所属群组>] [文件或目录…]
或chown [-Rv] [.所属群组] [文件或目录…]
或chown [-Rv] [–reference=<参考文件或目录>] [文件或目录…]
补充说明:在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chown指令去变更文件与目录的拥有者或所属群组,设置方式采用用户名称或用户识别码皆可,设置群组则用群组名称或群组识别码。
参  数:
 -R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -v或–version  显示指令执行过程。
 --reference=<参考文件或目录>  把指定文件或目录的拥有者与所属群组全部设成和参考文件或目 录的拥有者与所属群组相同。
举 例:

1.2.3.3 chgrp
功能说明:变更文件或目录的所属群组。
语  法:chgrp [-Rv] [所属群组] [文件或目录…]
或 chgrp [-Rv] [–reference=<参考文件或目录>] [文件或目录…]
补充说明:在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
参  数:
 -R或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -v或–verbose  显示指令执行过程。
 --reference=<参考文件或目录>  把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同。
举 例:

1.2.3.4 file
功能说明:辨识文件类型。
语  法:file [-bLvz] [-f <名称文件>] [文件或目录…]
补充说明:通过file指令,我们得以辨识该文件的类型。
参  数:
 -b  列出辨识结果时,不显示文件名称。
 -f<名称文件>  指定名称文件,其内容有一个或多个文件名称呢感,让file依序辨识这些文件,格式为每列一个文件名称。
 -L  直接显示符号连接所指向的文件的类别。
 -v  显示版本信息。
 -z  尝试去解读压缩文件的内容。
举 例:

1.2.3.5 chattr
功能说明:改变文件属性。
语  法:chattr [-RV] [+/-/=<属性>] [文件或目录…]
补充说明:这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
 a:让文件或目录仅供追加用途。
 b:不更新文件或目录的最后存取时间。
 c:将文件或目录压缩后存放。
 d:将文件或目录排除在倾倒操作之外。
 i:不得任意更动文件或目录。
 s:保密性删除文件或目录。
 S:即时更新文件或目录。
 u:预防以外删除。
参  数:
 -R 递归处理,将指定目录下的所有文件及子目录一并处理。
 -v<版本编号> 设置文件或目录版本。
 -V 显示指令执行过程。
 +<属性> 开启文件或目录的该项属性。
 -<属性> 关闭文件或目录的该项属性。
 =<属性> 指定文件或目录的该项属性。
举 例:

1.2.4文件与目录操作之文件处理与内容查看
1.2.4.1 ln
功能说明:连接文件或目录。
语  法:ln [-finsv] [源文件或目录] [目标文件或目录]
补充说明:ln指令用在连接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
参  数:
 -f或–force  强行建立文件或目录的连接,不论文件或目录是否存在。
 -i或–interactive  覆盖既有文件之前先询问用户。
 -n或–no-dereference  把符号连接的目的目录视为一般文件。
 -s或–symbolic  对源文件建立符号连接,而非硬连接。
 -v或–verbose  显示指令执行过程。
举 例:

1.2.4.2 cat
功能说明:把档案串连接后传到基本输出(屏幕或加 > fileName 到另一个档案)
使用方式:cat [-参数] [文件名…]
参 数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting
举 例:

1.2.4.3 more/less
都可以分屏查看文件内容,使用回车键显示下一行,使用空格键显示下一屏,不同的是less可以返回。
1.2.4.4 head/tail
显示文件的前几行和后几行,典型用法有以下两种
显示文件前10行,如下:
[root@localhost sh]# head -10 test.txt
[root@localhost sh]# head -n 10 test.txt
显示文件后10行,如下:
[root@localhost sh]# tail -10 test.txt
[root@localhost sh]# tail -n 10 test.txt
1.2.5文件与目录操作之文件目录查找与比较
1.2.5.1 find(非常重要)
功能说明:查找文件或目录。
语  法:find [目录] [-参数 参数值] [-exec <执行指令> {} ;]
补充说明:find指令用于查找符合条件的文件。任何位于参数之前的字符串都将被视为欲查找的目录。
参  数:
 -amin<分钟>  查找在指定时间曾被存取过的文件或目录,单位以分钟计算。
 -atime<24小时数>  查找在指定时间曾被存取过的文件或目录,单位以24小时计算。
 -cmin<分钟>  查找在指定时间之时被更改的文件或目录。
 -ctime<24小时数>  查找在指定时间之时被更改的文件或目录,单位以24小时计。
 -depth  从指定目录下最深层的子目录开始查找。
 -empty  寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录。
 -exec<执行指令>  假设find指令的回传值为True,就执行该指令。
 -group<群组名称>  查找符合指定之群组名称的文件或目录。
 -maxdepth<目录层级>  设置最大目录层级。
 -mindepth<目录层级>  设置最小目录层级。
 -mmin<分钟>  查找在指定时间曾被更改过的文件或目录,单位以分钟计算。
 -mtime<24小时数>  查找在指定时间曾被更改过的文件或目录,单位以24小时计算。
 -name<范本样式>  指定字符串作为寻找文件或目录的范本样式。
 -ok<执行指令>  此参数的效果和指定"-exec"参数类似,但在执行指令之前会先询问用户,若回答"y"或"Y",则放弃执行指令。
 -perm<权限数值>  查找符合指定的权限数值的文件或目录。
 -print  假设find指令的回传值为True,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称之前皆有"./“字符串。
 -size<文件大小>  查找符合指定的文件大小的文件。
 -type<文件类型>  只寻找符合指定的文件类型的文件。
 -user<拥有者名称>  查找符合指定的拥有者名称的文件或目录。
 -xtype<文件类型>  此参数的效果和指定”-type"参数类似,差别在于它针对符号连接检查。
-regex<范本样式>  指定字符串作为寻找文件或目录的范本样式。
举 例:

1.2.5.2 diff
功能说明:比较文件的差异。
语  法:diff [-abBcdqru] [-<行数>] [-C <行数>] [文件或目录1] [文件或目录2]
补充说明:diff以逐行的方式,比较文本文件的异同处。所是指定要比较目录,则diff会比较目录中相同文件名的文件,但不会比较其中子目录。
参  数:
 -a或–text  diff预设只会逐行比较文本文件。
 -b或–ignore-space-change  不检查空格字符的不同。
 -B或–ignore-blank-lines  不检查空白行。
 -c  显示全部内文,并标出不同之处。
 -C<行数>或–context<行数>  与执行"-c-<行数>"指令相同。
 -i或–ignore-case  不检查大小写的不同。
 -q或–brief  仅显示有无差异,不显示详细的信息。
 -r或–recursive  比较子目录中的文件。
 -u,-U<列数>或–unified=<列数>  以合并的方式来显示文件内容的不同。
举 例:

1.2.5.3 which
功能说明:查找文件。
语  法:which [文件…]
补充说明:which指令会在环境变量$PATH设置的目录里查找符合条件的文件。
参  数:
举 例:

1.2.5.4 whereis
功能说明:查找文件。
语  法:whereis [-bfu] [-B <目录>]
补充说明:whereis指令会在特定目录中查找符合条件的文件。这些文件的属性应属于原始代码,二进制文件,或是帮助文件。
参  数:
 -b  只查找二进制文件。
 -B<目录>  只在设置的目录下查找二进制文件。
 -f  不显示文件名前的路径名称。 Centos不支持
 -u  查找不包含指定类型的文件。
举 例:

1.2.6文件与目录操作之文件目录压缩与打包
1.2.6.1 tar(非常重要)
功能说明:打包归档文件/备份文件。
语  法:tar [-参数] [文件或目录…]
补充说明:tar命令可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
参  数:
-A或–catenate 新增归档文件到已存在的归档文件。
-c或–create 建立新的备份文件。
-f<备份文件>或–file=<备份文件> 指定备份文件。
-k或–keep-old-files 解开备份文件时,不覆盖已有的文件。
-m或–modification-time 还原文件时,不变更文件的更改时间。
-p或–same-permissions 用原来的文件权限还原文件。
-r或–append 新增文件到已存在的备份文件的结尾部分。
-t或–list 列出备份文件的内容。
-u或–update 仅置换较备份文件内的文件更新的文件。
-v或–verbose 显示指令执行过程。
-x或–extract或–get 从备份文件中还原文件。
-z或–gzip或–ungzip 通过gzip指令处理备份文件。
-Z或–compress或–uncompress 通过compress指令处理备份文件。
–delete 从备份文件中删除指定的文件。
举 例:

1.2.6.2 gzip
功能说明:压缩文件。
语  法:gzip [-dlqtv] [–best/fast] [文件]
或 gzip [-dlqtv] [-<压缩效率>] [–best/fast] [目录]
补充说明:gzip是个使用广泛的压缩程序,文件经它压缩过后,其名称后面会多出".gz"的扩展名。
参  数:
 -d或–decompress或----uncompress  解开压缩文件。
 -l或–list  列出压缩文件的相关信息。
 -q或–quiet  不显示警告信息。
 -r或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -t或–test  测试压缩文件是否正确无误。
 -v或–verbose  显示指令执行过程。
 -<压缩效率>  压缩效率是一个介于1-9的数值,预设值为"6",指定愈大的数值,压缩效率就会愈高。
 --best  此参数的效果和指定"-9"参数相同。
 --fast  此参数的效果和指定"-1"参数相同。
举 例:

1.2.6.3 gunzip
功能说明:解压文件。
语  法:gunzip [-lLqrtv] [文件]
补充说明:gunzip是个使用广泛的解压缩程序,它用于解开被gzip压缩过的文件,这些压缩文件预设最后的扩展名为".gz"。事实上gunzip就是gzip的硬连接,因此不论是压缩或解压缩,都可通过gzip指令单独完成。
参  数:
 -l或–list  列出压缩文件的相关信息。
 -L或–license  显示版本与版权信息。
 -q或–quiet  不显示警告信息。
 -r或–recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -t或–test  测试压缩文件是否正确无误。
 -v或–verbose  显示指令执行过程。
举 例:

1.2.6.4 zip
功能说明:压缩文件。
语  法:zip [-参数] [压缩文件] [文件或目录]
补充说明:zip是个使用广泛的压缩程序,文件经它压缩后会另外产生具有".zip"扩展名的压缩文件。
参  数:
-b<工作目录> 指定暂时存放文件的目录。
-c 替每个被压缩的文件加上注释。
-d 从压缩文件内删除指定的文件。
-q 不显示指令执行过程。
-r 递归处理,将指定目录下的所有文件和子目录一并处理。
-t<日期时间> 把压缩文件的日期设成指定的日期。
-u 更换较新的文件到压缩文件内。
-v 显示指令执行过程或显示版本信息。
-z 替压缩文件加上注释。
-<压缩效率> 压缩效率是一个介于1-9的数值。
举 例:

1.2.6.5 unzip
功能说明:解压缩zip文件
语  法:unzip [-参数] [.zip文件] [-d <目录>]
补充说明:unzip为.zip压缩文件的解压缩程序。
参  数:
-f 更新现有的文件。
-l 显示压缩文件内所包含的文件。
-t 检查压缩文件是否正确。
-u 与-f参数类似,但是除了更新现有的文件外,也会将压缩文件中的其他文件解压缩到目录中。
-v 执行是时显示详细的信息。
-o 不必先询问用户,unzip执行后覆盖原有文件。
-q 执行时不显示任何信息。
-d<目录> 指定文件解压缩后所要存储的目录。
举 例:

1.2.7文件与目录操作之文件内容过滤、分割与合并等相关
1.2.7.1 grep(非常重要,在shell编程部分详解)
shell编程部分再详细讲解,见【2.2.6.2 正则表达式+grep命令】章节
1.2.7.2 join
功能说明:将两个文件中,指定栏位内容相同的行连接起来。
语  法:join [-i] [-a<1或2>] [-e<字符串>] [-o<格式>] [-t<字符>] [-v<1或2>] [-1<栏位>] [-2<栏位>] [文件1] [文件2]
补充说明:找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
参  数:
-a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
-e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
-i或–igore-case 比较栏位内容时,忽略大小写的差异。
-o<格式> 按照指定的格式来显示结果。
-t<字符> 使用栏位的分隔字符。
-v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
-1<栏位> 连接[文件1]指定的栏位。
-2<栏位> 连接[文件2]指定的栏位。
举 例:

1.2.7.3 split
功能说明:切割文件。
语  法:split [-<行数>][-b <字节>][-C <字节>][-l <行数>][要切割的文件][输出文件名]
补充说明:split可将文件切成较小的文件,预设每1000行会切成一个小文件。
参  数:
 -<行数>或-l<行数>  指定每多少行就要切成一个小文件。
 -b<字节>  指定每多少字就要切成一个小文件。
 -C<字节>  与-b参数类似,但切割时尽量维持每行的完整性。
 [输出文件名]  设置切割后文件的前置文件名,split会自动在前置文件名后再加上编号。
举 例:

1.2.7.4 wc
功能说明:计算字数。
语  法:wc [-clw] [文件…]
补充说明:利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。
参  数:
-c或–bytes或–chars 只显示Bytes数。
-l或–lines 只显示列数。
-w或–words 只显示字数。
举 例:

1.2.7.5 sort
功能说明:将文本文件内容加以排序。
语  法:sort [-参数][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>
补充说明:sort可针对文本文件的内容,以行为单位来排序。
参  数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-m 将几个排序好的文件进行合并。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-k 指定列
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
举 例:

1.3其他管理类、监控类命令
通过与金卫信测试部门负责人、运维负责人以及相关管理团队的电话以及当面等方式沟通交流,结合行业服务经验分析,获取了如下的现状以及需求:
1.3.1进程与作业管理
1.3.1.1 ps (非常重要)
功能说明:报告程序/进程状况。
语  法:ps [-参数] [–width <每列字符数>]
补充说明:ps是用来报告程序执行状况的指令,您可以搭配kill指令随时中断,删除不必要的程序/进程。
参  数:部分常用
 -a 显示所有终端机下执行的程序,除了阶段作业领导者之外。
 -A 显示所有程序。
 -e 此参数的效果和指定"A"参数相同。
 -f 显示UID,PPIP,C与STIME栏位。
 u  以用户为主的格式来显示程序状况。
 x  显示所有程序,不以终端机来区分。
-o 自定义格式输出
举 例:
[root@localhost sh]# ps -ef --width 30
[root@localhost sh]# ps -eo “pid,pcpu,pmem,rss,vsz,comm”
PID %CPU %MEM RSS VSZ COMMAND
1 0.0 0.0 620 2176 init
2 0.0 0.0 0 0 migration/0
1.3.1.2 kill
功能说明:删除执行中的程序或工作。
语  法:kill [-s <信息名称或编号>][程序] 或 kill [-l <信息编号>]
补充说明:kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的编号可利用ps指令或jobs指令查看。
参  数:
 -l <信息编号>  若不加<信息编号>选项,则-l参数会列出全部的信息名称。
 -s <信息名称或编号>  指定要送出的信息。
 [程序]  [程序]可以是程序的PID或是PGID,也可以是工作编号。
举 例:

1.3.1.3 &
当在前台运行某个作业时,终端被该作业占据;可以在命令后面加上& 实现后台运行。
使用格式:命令 > 文件 2>&1 &
使用说明:表示把命令执行的结果信息,包括正常输出与异常输出合并输出到文件,并在后台执行。
举 例:
[root@localhost sh]# vmstat 5 100 >vmstat.out 2>&1 &
表示在后台执行vmstat命令,把命令标准输出与错误输出核定输出到文件vmstat.out中。
1.3.1.4 nohup
使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户时),作业就会停止运行。nohup命令可以在你退出帐户之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。该命令的一般形式为:
使用格式:nohup 命令 > 文件 2>&1 &
举 例:
[root@localhost sh]# nohup vmstat 5 100 >vmstat.out 2>&1 &

1.3.1.5 crontab
循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。
crontab文件的含义:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:
minute hour day month week command
其中:
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
在以上各个字段中,还可以使用以下特殊字符:
星号():代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如
/10,如果用在minute字段,表示每十分钟执行一次。

二、crond服务
1、安装crontab:[默认已经安装,就不需要再安装了]
yum install crontabs
2、服务操作说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
3、查看crontab服务状态:
service crond status
4、手动启动crontab服务:
service crond start
5、查看crontab服务是否已设置为开机启动,执行命令:
ntsysv
6、加入开机自动启动:如果没有可以使用如下命令加入
chkconfig –level 35 crond on

三、crontab命令详解
1.命令格式:
crontab [-u user] file
crontab [-u user] [ -e | -l | -r ]
2.命令功能:
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。
3.命令参数:
-u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。
file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。
-r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。
-i:在删除用户的crontab文件时给确认提示。
4.常用方法:
1)、创建一个新的crontab文件
在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$ HOME目录下的. profile文件,在其中加入这样一行:
EDITOR=vi; export EDITOR
然后保存并退出。不妨创建一个名为 cron的文件,其中是用户名,例如, rootcron 。在该文件中加入如下的内容。

2)、提交rootcron文件
现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。
同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即root)。
3)、列出crontab文件
为了列出crontab文件,可以用:

你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对crontab文件做一备份:
这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。
4)、 编辑crontab文件
如果希望添加、删除或编辑crontab文件中的条目,而E D I TO R环境变量又设置为v i,那么就可以用v i来编辑crontab文件,相应的命令为:
可以像使用v i编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。
现在让我们使用前面讲过的crontab -l命令列出它的全部信息:
5)、删除crontab文件
要删除crontab文件,可以用:
[root@localhost sh]# crontab -r
6). 恢复丢失的crontab文件
如果不小心误删了crontab文件,假设你在自己的$ H O M E目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/,其中是用户名。如果由于权限问题无法完成拷贝,可以用:
[root@localhost sh]# crontab -r
[root@localhost sh]# crontab rootcron
[root@localhost sh]# crontab -l
12 22 * * * ls -al /sh
16 22 * * * ls -al /
其中,是你在$ H O M E目录中副本的文件名。
我建议你在自己的$ H O M E目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。
5、典型案例腾讯面试题:
某系统管理员需要每天做一定的重复工作,编制一个解决方案:
(1)、从下午 4:50 删除/abc 目录下的全部子目录和全部文件;
50 16 * * * rm –rf /abc
(2)、从早上 8:00~下午 6:00每小时读取/xyz目录下x1,文件中每行第一个域的全部数据加入到/backup目录下的 back01.txt文件内;
0 8-18 * * awk ‘{print $1}’ /xyz/x1 > /backup/back01.txt
(3)、每逢周一下午 5:50 将/data目录下的所有目录和文件归档并压缩为文件backup.tar.gz;
50 17 * * 01 tar -zcvf /backup/backup.tar.gz /data
6、其他典型面试题:
实例1:每1分钟执行一次command
命令:* * * * * command
实例2:每小时的第3和第15分钟执行
命令:3,15 * * * * command
实例3:在上午8点到11点的第3和第15分钟执行
命令:3,15 8-11 * * * command
实例4:每隔两天的上午8点到11点的第3和第15分钟执行
命令:3,15 8-11 /2 * * command
实例5:每个星期一的上午8点到11点的第3和第15分钟执行
命令:3,15 8-11 * * 1 command
实例6:每晚的21:30重启smb
命令:30 21 * * * /etc/init.d/smb restart
实例7:每月1、10、22日的4 : 45重启smb
命令:45 4 1,10,22 * * /etc/init.d/smb restart
实例8:每周六、周日的1 : 10重启smb
命令:10 1 * * 6,0 /etc/init.d/smb restart
实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb
命令:0,30 18-23 * * * /etc/init.d/smb restart
实例10:每星期六的晚上11 : 00 pm重启smb
命令:0 23 * * 6 /etc/init.d/smb restart
实例11:每一小时重启smb
命令:
/1 * * * /etc/init.d/smb restart
实例12:晚上11点到早上7点之间,每隔一小时重启smb
命令:
23-7/1 * * * /etc/init.d/smb restart
1.3.2用户组管理
1.3.2.1 useradd/adduser
功能说明:建立用户帐号。
语  法:useradd [-mMnr][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ][-u ][用户帐号] 或 useradd -D [-b][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-s ]
补充说明:useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd文本文件中。
参  数:
 -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。 
 -d<登入目录>  指定用户登入时的启始目录。
 -D  变更预设值.
 -e<有效期限>  指定帐号的有效期限。
 -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
 -g<群组>  指定用户所属的群组。
 -G<群组>  指定用户所属的附加群组。
 -m  自动建立用户的登入目录。
 -M  不要自动建立用户的登入目录。
 -n  取消建立以用户名称为名的群组.
 -r  建立系统帐号。
 -s   指定用户登入后所使用的shell。
 -u  指定用户ID。
举 例:

1.3.2.2 passwd
功能说明:设置密码。
语  法:passwd [-dklS][-u <-f>][用户名称]
补充说明:passwd指令让用户可以更改自己的密码,而系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
参  数:
-d  删除密码。本参数仅有系统管理者才能使用。
-f  强制执行。
-k  设置只有在密码过期失效后,方能更新。
-l  锁住密码。
-s  列出密码的相关信息。本参数仅有系统管理者才能使用。
-u  解开已上锁的帐号。
举 例:

1.3.2.3 userdel
功能说明:删除用户帐号。
语  法:userdel [-r][用户帐号]
补充说明:userdel可删除用户帐号与相关的文件。若不加参数,则仅删除用户帐号,而不删除相关文件。
参  数:
-f  删除用户登入目录以及目录中所有文件。
举 例:

1.3.2.4 su
功能说明:变更用户身份。
语  法:su [-lmp] [-s ] [用户帐号]
补充说明:su可让用户暂时变更登入的身份。变更时须输入所要变更的用户帐号与密码。
参  数:
 -l或–login  改变身份时,也同时变更工作目录,以及HOME,SHELL,USER,LOGNAME。此外,也会变更PATH变量。
 -m,-p或–preserve-environment  变更身份时,不要变更环境变量。
 -s或–shell=  指定要执行的shell。
 [用户帐号]  指定要变更的用户。若不指定此参数,则预设变更为root。
举 例:

1.3.2.5 sudo
功能说明:以其他身份来执行指令。
语  法:sudo [-bhHp][-s ][-u <用户>][指令] 或 sudo [-klv]
补充说明:sudo可让用户以其他的身份来执行指定的指令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
参  数:
 -b  在后台执行指令。
 -h  显示帮助。
 -H  将HOME环境变量设为新身份的HOME环境变量。
 -k  结束密码的有效期限,也就是下次再执行sudo时便需要输入密码。
 -l  列出目前用户可执行与无法执行的指令。
 -p  改变询问密码的提示符号。
 -s  执行指定的shell。
 -u<用户>  以指定的用户作为新的身份。若不加上此参数,则预设以root作为新的身份。
 -v  延长密码有效期限5分钟。
举 例:

[root@localhost ~]# visudo -f /etc/sudoers
添加一行,如下图
xulinlin ALL=(ALL) ALL

1.3.2.6 groupadd
功能说明:新增群组。
语  法:groupadd [群组名称]
举例说明:
[root@localhost sh]# groupadd zelin
1.3.2.7 groups
功能说明:显示用户所属的组。
语  法:groups [用户名]
举例说明:
[root@localhost sh]# groups xulinlin
1.3.2.8 id
功能说明:显示用户的ID,以及所属群组的ID。
语  法:id [-gGnru] [用户名称]
补充说明:id会显示用户以及所属群组的实际与有效ID。若两个ID相同,则仅显示实际ID。若仅指定用户名称,则显示目前用户的ID。
参  数:
 -g或–group  显示用户所属群组的ID。
 -G或–groups  显示用户所属附加群组的ID。
 -n或–name  显示用户,所属群组或附加群组的名称。
 -r或–real  显示实际ID。
 -u或–user  显示用户ID。
举例说明:
[root@localhost sh]# id xulinlin
1.3.2.9 groupdel
功能说明:删除群组。
语  法:groupdel [群组名称]
补充说明:需要从系统上删除群组时,可用groupdel指令来完成这项工作。倘若该群组中仍包括某些用户,则先移除用户,然后再删除组。
举例说明:
[root@localhost sh]# groupdel zelin

1.3.3网络管理相关
1.3.3.1 ifconfig
功能说明:显示或设置网络设备。
语  法:ifconfig [网络设备][参数][<hw<网络设备类型><硬件地址>][netmask<子网掩码>][IP地址]
补充说明:ifconfig可设置网络设备的状态,或是显示目前的设置。
常用参数:
-a 查看所有网卡状态
down 关闭指定的网络设备。
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
netmask<子网掩码> 设置网络设备的子网掩码。
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
up 启动指定的网络设备。
[IP地址] 指定网络设备的IP地址。
[网络设备] 指定网络设备的名称。
举例说明:

eth0表示第一块网卡,其中HWaddr表示网卡的物理地址,可以看到目前这个网卡的物理地址(MAC地址)是00:0C:29:D3:39:1E。
inet addr用来表示网卡的IP地址,此网卡的IP地址是192.168.195.128,广播地址Bcast: 192.168.195.255,掩码地址Mask: 255.255.255.0。
lo是表示主机的回环地址,这个一般是用来测试一个网络程序,但又不想让局域网或外网的用户能够查看,只能在此台主机上运行和查看所用的网络接口。比如把 httpd服务器的指定到回环地址,在浏览器输入127.0.0.1就能看到你所架WEB网站了。但只是您能看得到,局域网的其它主机或用户无从知道。
第一行:连接类型:Ethernet(以太网)HWaddr(硬件mac地址)。
第二行:网卡的IP地址、子网、掩码。
第三行:UP(代表网卡开启状态)RUNNING(代表网卡的网线被接上)MULTICAST(支持组播)MTU:1500(最大传输单元):1500字节。
第四、五行:接收、发送数据包情况统计。
第七行:接收、发送数据字节数统计信息。

1、 启动关闭指定网卡:
打开网卡
ifconfig eth0 up
关闭网卡
[root@localhost sh]# ifconfig eth0 down
ifconfig eth0 up为启动网卡eth0,ifconfig eth0 down为关闭网卡eth0。ssh登陆linux服务器操作要小心,关闭了就不能开启了,除非你有多网卡。
2、为网卡配置和删除IPv6地址:
ifconfig eth0 add 33ffe:3240:800:1005::2/64 #为网卡eth0配置IPv6地址
ifconfig eth0 del 33ffe:3240:800:1005::2/64 #为网卡eth0删除IPv6地址
3、用ifconfig修改MAC地址:
ifconfig eth0 hw ether 00:AA:BB:CC:DD:EE

4、配置IP地址:
[root@localhost ~]# ifconfig eth0 192.168.2.10
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0
[root@localhost ~]# ifconfig eth0 192.168.2.10 netmask 255.255.255.0 broadcast 192.168.2.255
1.3.3.3 netconfig
功能说明:设置网络环境。
语  法:netconfig
补充说明:这是Slackware发行版内附程序,它具有互动式的问答界面,让用户轻易完成网络环境的设置。特别说明 Centos5.1默认没有安装此命令。
1.3.3.3 netstat
功能说明:显示网络状态。
语  法:netstat [-参数] [-A<网络类型>] [–ip]
补充说明:利用netstat指令可让你得知整个Linux系统的网络情况。
主要参数:
-a或–all 显示所有连线中的Socket。
-A<网络类型>或–<网络类型> 列出该网络类型连线中的相关地址。
-c或–continuous 持续列出网络状态。
-e或–extend 显示网络其他相关信息。
-g或–groups 显示多重广播功能群组组员名单。
-h或–help 在线帮助。
-i或–interfaces 显示网络界面信息表单。
-l或–listening 显示监控中的服务器的Socket。
-n或–numeric 直接使用IP地址,而不通过域名服务器。
-o或–timers 显示计时器。
-p或–programs 显示正在使用Socket的程序识别码和程序名称。
-r或–route 显示Routing Table。
-s或–statistice 显示网络工作信息统计表。
-t或–tcp 显示TCP传输协议的连线状况。
-u或–udp 显示UDP传输协议的连线状况。
-v或–verbose 显示指令执行过程。
–ip或–inet 此参数的效果和指定"-A inet"参数相同。
举例说明:

1.3.3.4 ping
功能说明:检测主机。
语  法:ping [-参数] [-c<完成次数>] [-i<间隔秒数>] [-s<数据包大小>] [-t<存活数值>] [主机名称或IP地址]
补充说明:执行ping指令会使用ICMP传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。
参  数:
-c<完成次数> 设置完成要求回应的次数。
-f 极限检测。
-n 只输出数值。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
举例说明:

1.3.3.5 hostname
CentOS修改主机名(hostname)
需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常。首先切换到root用户。
/etc/sysconfig/network
用任一款你喜爱的编辑器打开该文件,里面有一行 HOSTNAME=localhost.localdomain (如果是默认的话),修改 localhost.localdomain 为你的主机名。
/etc/hosts
打开该文件,会有一行 127.0.0.1 localhost.localdomain localhost 。其中 127.0.0.1 是本地环路地址, localhost.localdomain 是主机名(hostname),也就是你待修改的。localhost 是主机名的别名(alias),它会出现在Konsole的提示符下。将第二项修改为你的主机名,第三项可选。
将上面两个文件修改完后,并不能立刻生效。如果要立刻生效的话,可以用 hostname your-hostname 作临时修改,它只是临时地修改主机名,系统重启后会恢复原样的。但修改上面两个文件是永久的,重启系统会得到新的主机名。

1.3.4软件包管理相关
1.3.4.1 rpm
基础性需求
1.3.4.1 yum
基础性需求
1.3.5系统监控相关
1.3.5.1 free
功能说明:显示内存状态。
语  法: free [-bkmot] [-s <间隔秒数>]
补充说明:free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。
参  数:
 -b  以Byte为单位显示内存使用情况。
 -k  以KB为单位显示内存使用情况。
 -m  以MB为单位显示内存使用情况。
 -o  不显示缓冲区调节列。
 -s<间隔秒数>  持续观察内存使用状况。
 -t  显示内存总和列。
举例说明:

1.3.5.2 top
功能说明:显示,管理执行中的程序。
语  法:top [bciqsS][d <间隔秒数>][n <执行次数>]
补充说明:执行top指令可显示目前正在系统中执行的程序,并通过它所提供的互动式界面,用热键加以管理。
参  数:
 b  使用批处理模式。
 c  列出程序时,显示每个程序的完整指令,包括指令名称,路径和参数等相关信息。
 d<间隔秒数>  设置top监控程序执行状况的间隔时间,单位以秒计算。
 i  执行top指令时,忽略闲置或是已成为Zombie的程序。
 n<执行次数>  设置监控信息的更新次数。
 q  持续监控程序执行的状况。
 s  使用保密模式,消除互动模式下的潜在危机。
 S  使用累计模式,其效果类似ps指令的"-S"参数。
举例说明:
[root@localhost sh]# top -d 5 -n 5
1.3.5.3 vmstat
vmstat 能够提供进程,内存,分页,块I/O,traps和CPU活动相关信息。vmstat 命令可以显示平均值或实际取样值。使用频率和取样时间等参数启用
模式
命令参数
-V 显示版本
-n 只在开始时显示一次各字段名称
-a 显示活跃和非活跃内存
-d 显示磁盘相关统计信息
-D 以表格的形式显示磁盘信息
-p 显示指定磁盘分区相关信息
-s 显示内存相关统计信息及多种活动数量
delay:刷洗时间间隔。如果不指定,只显示一条结果
count:刷新次数,如不指定刷新次数,但不指定刷新时间间隔,默认为无穷
-t 显示统计信息的同时打印出时间,该参数和上面的参数同时使用
-S 指定单位显示,如,k,K,m,M
二 命令信息详解

注释:vmstat输出结果中第一行展示的是自最后一次启动以来的平均值,所以此行可以忽略。
输出栏位如下:
Process(procs)
r:等待运行时间的进程数
b:处于不可中断睡眠状态的进程数
w: 被交换出去的看一下的进程数。此数是由linux 计算得出的,但是Linux 并不好进交换空间
Memory
swpd:虚拟内存使用量(KB)
free:空闲内存量(KB)
buffer:用作buffer的内存量(KB)
cache:用作cache的内存量(KB)
Swap
si:从硬盘交换到内存的数量(KBps)
so:交换到硬盘的内存量(KBps)
IO
bi:发送到块设备的块的数量(block/s)
bo: 从块设备获取的块的数量(block/s)
System
in: 每秒钟的中断数量,包括时钟中断
cs:每秒钟上下文交换的数量
CPU(整个CPU时间的百分比)
us:花费在非内核代码的CPU 时间 (用户时间,包括Nice时间)
sy:花费在内核代码的CPU 时间(系统时间)
id:空闲时间
wa:IO等待时间
标准情况下r和b值
r<5,b≈0
如果user%+sys%< 70%,表示系统性能较好;如果user%+sys%>=85%,表示系统性能比较糟糕
user%表示CPU处在用户模式下的时间百分比。
sys%表示CPU处在系统模式下的时间百分比。
2 Shell编程
2.1学习策略
学习好Shell编程的方法,九大关键
1、 熟悉各种文件操作相关的命令
2、 熟悉输出输出,如命令 1>文件名 2>&1
3、 熟悉各种引号,如单引号’ 、双引号" 、反引号` 、反斜杠
4、 熟悉环境变量、本地变量、特殊变量、位置变量
5、 熟悉条件测试相关 test 命令 或 []
6、 shell结构:if、case、while、for、until、break、continue
7、 熟悉正则表达式+awk、sed、grep
8、 熟悉基本的shell函数
9、一个清晰的编程思路
2.2Shell编程核心语法
学习好一门编程语言,最重要的是先学会一门编程语言的核心语法,然后结合语法学会一种解决具体问题的思路。
shell 是一个命令解释器.是介于操作系统 kernel 与用户之间的一个绝缘层.准确地说,它也是一一种强力的计算机语言.一个 shell 程序,被称为一个脚本,是一种很容易使用的工具,它可以通过将系统调用,公共程序,工具,和编译过的二进制程序粘合在一起来建立应用.事实上,所有的 UNIX命令和工具再加上公共程序,对于 shell 脚本来说,都是可调用的.如果这些你还觉得不够,那么shell 内建命令,比如 test 与循环结构,也会给脚本添加强力的支持和增加灵活性.Shell 脚本对于管理系统任务和其它的重复工作的例程来说,表现的非常好,根本不需要那些华而不实的成熟紧凑的程序语言。
简单的说shell就是一个包含若干行Shell或者Linux命令的文件。对于一次编写,多次使用的大量命令,就可以使用单独的文件保存下来,以便日后使用。
shell简单、灵活、高效,特别适合处理一些系统管理方面的小问题
shell可以实现自动化管理,让系统管理员的工作变得容易、简单、高效
shell可以把一些经常需要用的命令或者操作,以文件的形式存储起来,每一次调用即可,不用重复的键入命令
shell脚本可移植性好,在unix/linux系统中可灵活移植,几乎不用任何设置就能正常运行
shell脚本可轻松方便读取和修改源代码,不需要编译掌握shell可以帮你解决一些故障问题,比如脚本引起的故障问题
掌握shell是一个中级以上系统工程师必需要会的
掌握shell是你系统管理进阶的必经之路
掌握shell是你面试更高级职位的一块敲门砖。
2.2.1输入与输出
在shell脚本中,可以用几种不同的方式读入数据:可以使用标准输入—缺省为键盘,或者指定一个文件作为输入。对于输出也是一样:如果不指定某个 文件作为输出,标准输出总是和终端屏幕相关联。如果所使用命令出现了什么错误,它也会缺省输出到屏幕上,如果不想把这些信息输出到屏幕上,也可以把这些信 息指定到一个文件中。
2.2.1.1 echo
使用echo命令可以显示文本行或变量,或者把字符串输入到文件。它的一般形式为:
echo string
echo命令有很多功能,其中最常用的是下面几个:
\c 不换行。
\f 进纸。
\t 跳格。
\n 换行。
必须使用-e选项才能使转义符生效
举例:

2.2.1.2 read
可以使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量。如果只指定了一个变量,那么read将会把所有的输入赋给该变量,直至遇到第一个文件结束符或回车。
举例:

2.2.1.3 cat
cat 是一个简单而通用的命令,可以用它来显示文件内容,创建文件,还可以用它来显示控制字符。在使用cat命令时要注意,它不会在文件分页符处停下来;它会一 下显示完整个文件。如果希望每次显示一页,可以使用more命令或把cat命令的输出通过管道传递到另外一个具有分页功能的命令中。
2.2.1.4 管道
可以通过管道把一个命令的输出传递给另一个命令作为输入。管道用竖杠|表示。它的一般形式为:
命令1 |命令2
其中|是管道符号。
2.2.1.5 tee
tee命令作用可以用字母T来形象地表示。它把输出的一个副本输送到标准输出,另一个副本拷贝到相应的文件中。如果希望在看到输出的同时,也将其存入一个文件,那么这个命令再合适不过了。
2.2.1.6 标准输入、输出和错误
当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。
下面就是这些文件描述符及它们通常所对应的文件名:
文件 文件描述符
输入文件—标准输入 0
标准输入是文件描述符0。它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出。
输出文件—标准输出 1
标准输出是文件描述符1。它是命令的输出,缺省是屏幕,也可以是文件。
错误输出文件—标准错误 2
标准错误是文件描述符2。这是命令错误的输出,缺省是屏幕,同样也可以是文件。你可能会问,为什么会有一个专门针对错误的特殊文件?这是由于很多人喜欢把错误单独保存到一个文件中,特别是在处理大的数据文件时,可能会产生很多错误。
2.2.1.6 重定向
在执行命令时,可以指定命令的标准输入、输出和错误,要实现这一点就需要使用文件重定向。下表列出了最常用的重定向组合,并给出了相应的文件描述符。在 对标准错误进行重定向时,必须要使用文件描述符,但是对于标准输入和输出来说,这不是必需的:
常用文件重定向命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command > filename 2>&1 把标准输出和标准错误一起重定向到一个文件中
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准输出重定向到一个文件中(追加)
command >> filename 2>&1 把标准输出和标准错误一起重定向到一个文件中(追加)
command < filename >filename2 把command命令以filename文件作为标准输入,以filename2文件作为标准输出
command < filename 把command命令以filename文件作为标准输入
command << delimiter 把从标准输入中读入,直至遇到delimiter分界符
典型例子:
1、 重定向标准输出:

2、 重定向标准输入:

3、 重定向标准错误:
这样所有的错误输出都输送到了/dev/null,不再出现在屏幕上。

4、 结合使用标准输出和标准错误:
一个快速发现错误的方法就是,先将输出重定向到一个文件中,然后再把标准错误重定向到另外一个文件中。下面给出一个例子:

5、 合并标准输出和标准错误:
在合并标准输出和标准错误的时候,切记shell是从左至右分析相应的命令的。

2.2.2熟悉各种引号
2.2.2.1 单引号 ‘’ 和双引号 “”
首先,单引号和双引号,都是为了解决中间有空格的问题。
因为空格在linux中时作为一个很典型的分隔符,比如string1=this is astring,这样执行就会报错。为了避免这个问题,因此就产生了单引号和双引号。他们的区别在于,单引号将剥夺其中的所有字符的特殊含义,而双引号中的’ ′ ( 参 数 替 换 ) 和 ′ ‘ ′ ( 命 令 替 换 ) 是 例 外 。 所 以 , 两 者 基 本 上 没 有 什 么 区 别 , 除 非 在 内 容 中 遇 到 了 参 数 替 换 符 '(参数替换)和'`'(命令替换)是例外。所以,两者基本上没有什么区别,除非在内容中遇到了参数替换符 和命令替换符`。单引号会把所有字符当成普通字符:

2.2.2.3 反引号 `
这个东西的用法,和 ( ) 类 似 的 。 在 执 行 一 条 命 令 时 , 会 先 将 其 中 的 ‘ ‘ , 或 者 是 ()类似的。在执行一条命令时,会先将其中的 ``,或者是 ()() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行。反引号的功能是命令替换,将反引号中的字符串做为命令来执行,我们在用shell编程时经常用的到 将系统命令的执行结果赋给一个变量。

思考题,如果要计算a*b?该如何计算呢?
2.2.2.4 反斜杠
反斜杠的作用是将特殊符号字符的特殊含义屏蔽掉,使其还是原字符:

2.2.3各种变量
2.2.3.1 环境变量
1、显示某一环境变量
[root@linuxlearn sh]# echo $PATH
/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
2、设置一个环境变量的方法:
可以通过配置文件来添加环境变量的文件 (需要通过 source 配置文件名或者 . 配置文件名 命令来重新读取和执行文件使得这次改动生效)
/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。设置环境变量主要就是修改这个文件。

/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量
~/.bash_profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变游戏量,执行用户的.bashrc文件。/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取
/etc/rc.local:自动执行的脚本
3、直接运行export命令定义变量【只对当前shell(BASH)有效(临时的)】
4、使用 env 命令将显示所有的环境变量

5、使用 unset 来清除环境变量
6、使用 readonly 设置环境变量为只读

注意:环境变量设置为只读后不能修改和删除
2.2.3.2 本地变量
本地变量在用户现在的shell生命期的脚本中使用。例如,本地变量file-name取值为loop.doc,这个值只在用户当前shell生命期有意义。如果在shell中启动另一个进程或退出,此值将无效。这个方法的优点就是用户不能对其他的shell或进程设置此变量有效。
使用变量时,如果用花括号将之括起来,可以防止shell误解变量值,尽管不必一定要这样做,但这确实可用。要设置一本地变量,格式为:
$ variable-name=value 或 $ {variable-name=value}
注意,等号两边可以有空格。如果取值包含空格,必须用双引号括起来。shell变量可以用大小写字母。
2.2.3.3 特殊变量
$*:获取当前执行的shell的所有参数,将所有的命令行参数视为单个字符串
$#:获取当前shell命令行中参数的总个数
$@:这个程序的所有参数"$1" “$2” “$3” “…”,这是将参数传递给其它程序的最佳方式,因为它会保留所有内嵌在每个参数里的任何空白
∗ 与 *与 @的区别:
$*将命令行的所有参数视为一个字符串:"$1$2$3…"
$@将命令行的每个参数视为单个的字符串:"$1" “$2” “$3” …
获取状态变量:
$$:获取当前的shell进程号
$?:获取执行上一个指令的返回值(0为成功,非零为失败),可以对上一个命令执行是否成功进行判断。
: 在 此 之 前 执 行 的 命 令 或 脚 本 的 最 后 一 个 参 数 2.2.3.4 位 置 变 量 位 置 变 量 用 来 保 存 脚 本 的 参 数 信 息 , _:在此之前执行的命令或脚本的最后一个参数 2.2.3.4 位置变量 位置变量用来保存脚本的参数信息, 2.2.3.4n 获取当前执行脚本的第n个参数,n=1…9, 0 , 为 当 前 脚 本 名 。 如 果 n 大 于 9 , 使 用 0,为当前脚本名。如果n大于9,使用 0n9使{10}
#!/bin/sh
echo “演示位置变量”
echo -e “第一个参数是 : $1”
echo -e “第二个参数是 : $2”
echo -e “第三个参数是 : $3”
echo -e “第四个参数是 : $4”
echo -e “第五个参数是 : $5”
echo -e “第六个参数是 : $6”
echo -e “第七个参数是 : $7”
echo -e “第八个参数是 : $8”
echo -e “第九个参数是 : $9”
echo -e “第十个参数是 : $10”
echo -e "第十个参数是 : 10 " 2.2.4 条 件 测 试 对 文 件 、 字 符 串 和 数 字 使 用 t e s t 命 令 。 对 数 字 和 字 符 串 使 用 e x p r 命 令 。 e x p r 命 令 测 试 和 执 行 数 值 输 出 。 使 用 最 后 退 出 状 态 命 令 {10}" 2.2.4条件测试 对文件、字符串和数字使用test命令。 对数字和字符串使用expr命令。 expr命令测试和执行数值输出。使用最后退出状态命令 10"2.2.4使test使exprexpr使退?可测知test和expr,二者均以0表示正确,1表示返回错误。
格式:test condition或者[ test condition ]
2.2.4.1 数字比较

2.2.4.2 字符串比较

2.2.4.3 文件属性测试

2.2.4.4 组合测试
测试文件状态是否为OK,但是有时要比较两个文件状态。shell提供三种逻辑操作完成此功能。
-a 逻辑与,操作符两边均为真,结果为真,否则为假。
-o 逻辑或,操作符两边一边为真,结果为真,否则为假。
! 逻辑否,条件为假,结果为真。

2.2.5控制结构
2.2.5.1 分支结构if
if、then、else语句提供条件测试。测试可以基于各种条件。例如文件的权限、长度、数值或字符串的比较。这些测试返回值或者为真(0),或者为假(1)。基于此结果,可以进行相关操作。case语句允许匹配模式、单词或值。一旦模式或值匹配,就可以基于这个匹配条件作其他声明。
最普通的if语句是:
if条件
then 命令
fi
使用i f语句时,必须将t h e n部分放在新行,否则会产生错误。如果要不分行,必须使用命
令分隔符。本书其余部分将采取这种形式。现在简单i f语句变为:
if 条件;then
命令
fi
注意,语句可以不这样缩排,但建议这样做,因为可以增强脚本的清晰程度。

if语句测试条件,测试条件返回真(0)或假(1)后,可相应执行一系列语句。i f语句结构对错误检查非常有用。其格式为:
if 条件1
then 命令1
elif 条件2
then 命令2
else 命令3
f i if 条件1;then
命令1
elif 条件2;then
命令2
else
命令3
f i
让我们来具体讲解i f语句的各部分功能。
if 条件1 如果条件1为真
then 那么
命令1 执行命令1
elif 条件2 如果条件1不成立
then 那么
命令2 执行命令2
else 如果条件1,2均不成立
命令3 那么执行命令3
fi 完成

2.2.5.2 分支结构case
case语句为多选择语句。可以用 case语句匹配一个值与一个模式,如果匹配成功,执行相匹配的命令。case语句格式如下:
case “$1” in
模式1)
命令1
;;
模式2)
命令2
;;
*)
其他命令
;;
esac
case工作方式如上所示。取值后面必须为单词 i n,每一模式必须以右括号结束。取值可以:
1、为变量或常数。匹配发现取值符合某一模式后,其间所有命令开始执行直至;;。
取值将检测匹配的每一个模式。一旦模式匹配,则执行完匹配模式相应命令后不再继续其他模式。
如果无一匹配模式,使用星号 *捕获该值,再接受其他输入。
模式部分可能包括元字符,与在命令行文件扩展名例子中使用过的匹配模式类型相同,即:

  • 任意字符。
    ? 任意单字符。
    […] 类或范围中任意字符。
    注意:
    1.模式字符串中可以使用通配符
    2.如果一个模式字符串中包含多个模式,那么各模式之间应以竖线(|)隔开,表各模式是“或”的关系,即只要给定字符串与其中一个模式相配,就会执行其后的命令列表。
    3.各模式字符串应是唯一的,不应重复出现,并且要合理安排它们的出现顺序,例如,不应将“”作为头一个模式字符串,因为“”可以与任何字符串匹配,若第一个出现,就不会再检查其他模式了。
    4.case语句以关键字case开头,以关键字esac结束。
    5.case的退出(返回)值是整个结构中最后执行的命令的退出值。若没有执行任何命令,则退出值为0。
    举例:

2.2.5.3 循环结构while
w h i l e循环用于不断执行一系列命令,也用于从输入文件中读取数据,其格式为:
while [ 条件测试 ]
do
循环体
done

虽然通常只使用一个命令,但在 while和do之间可以放几个命令。命令通常用作测试条件。
只有当命令的退出状态为 0时,do和done之间命令才被执行,如果退出状态不是 0,则循环终止。
命令执行完毕,控制返回循环顶部,从头开始直至测试条件为假。
举例:

#!/bin/sh
sum=0
i=1
while [ $i -le 100 ]
do
#循环累加
sum=expr $sum + $i
i=expr $i + 1
done
#输出最后的累加值
echo “1+2+…100最终结果是: $sum”
2.2.5.4 循环结构for
f o r循环一般格式为:
for 变量名in列表
do
命令1
命令2
done
当变量值在列表里, for循环即执行一次所有命令,使用变量名访问列表中取值。命令可为任何有效的shell命令和语句。
变量名为任何单词。 in列表用法是可选的,如果不用它, for循环使用命令行的位置参数。
in列表可以包含替换、字符串和文件名,列表可以自定义,也可以通过命令返回值生成,下面是一些常用例子。

#!/bin/sh
#for_i
for loop in 1 2 3 4 5 6 7 8 9
do
echo $loop
done
if [ $# != 1 ] ; then
echo "Usage : basename $0 " >/dev/null 2>&1
fi
2.2.5.5 循环结构until
until循环中,只要条件不为真,就执行do和done之间的循环命令,或者说,在until循环中,一直执行do和done之间的循环命令,直到条件为真;–避免生成死循环。
2.2.5.6 break语句
基础性需求

2.2.5.7 continue语句
continue:跳过循环体中在其之后的语句,会返回到本循环层的开头,进行下一次循环。
–语法:continue[n],其中,n表示从包含continue语句的最内层循环体向外跳到第几层循环,默认值为1,循环层数是由内向外编号。

2.2.6正则表达式+grep、awk、sed三大命令
2.2.6.1 正则表达式基础
一、正则表达式的概念及特点:
  正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,
这个“规则字符串”用来表达对字符串的一种过滤逻辑。规定一些特殊语法表示字符类、数量限定符和位置关系,然后用这些特殊语法和普
通字符一起表示一个模式,这就是正则表达式(Regular Expression)。
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
  1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”);
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点:
  1. 灵活性、逻辑性和功能性非常的强;
  2. 可以迅速地用极简单的方式达到字符串的复杂控制。
  3. 对于刚接触的人来说,比较晦涩难懂。
  由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到
Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。
二、正则表达式有四部分组成:
1、字符类:下面列出常用的

2、 数量限定符

3、 位置限定符

4、 其他特殊字符

2.2.6.2 正则表达式+grep命令
相信grep是UNIT和LINUX中使用最广泛的命令之一。grep(全局正则表达式版本)允许对文本文件进行模式查找。如果找到匹配模式, grep打印包含模式的所有行。grep支持基本正则表达式,也支持其扩展集。grep有三种变形,即:
grep:标准grep命令,本章大部分篇幅集中讨论此格式。
egrep:扩展grep,支持基本及扩展的正则表达式,但不支持\ q模式范围的应用,与之相对应的一些更加规范的模式,这里也不予讨论。
fgrep:快速grep。允许查找字符串而不是一个模式。不要误解单词fast,实际上它与grep速度相当。
2.2.6.3 正则表达式+awk命令
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入(stdin)、一个或多个文件,或其它命令的输出。它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk有很多内建的功能,比如数组、函数等,这是它和C语言的相同之处,灵活性是awk最大的优势。
1、awk脚本是由模式和操作组成的。
1.1、模式可以是以下任意一个:
/正则表达式/:使用通配符的扩展集。
关系表达式:使用运算符进行操作,可以是字符串或数字的比较测试。
模式匹配表达式:用运算符(匹配)和!(不匹配)。
BEGIN语句块、pattern语句块、END语句块:参见awk的工作原理
1.2、操作由一个或多个命令、函数、表达式组成,之间由换行符或分号隔开,并位于大括号内,主要部分是:
变量或数组赋值
输出命令
内置函数
控制流语句
awk脚本基本结构
awk ‘BEGIN{ print “start” } pattern{ commands } END{ print “end” }’ file
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,例如:
awk ‘BEGIN{ i=0 } { i++ } END{ print i }’ filename
awk “BEGIN{ i=0 } { i++ } END{ print i }” filename

awk的工作原理
awk ‘BEGIN{ commands } pattern{ commands } END{ commands }’
第一步:执行BEGIN{ commands }语句块中的语句;
第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
第三步:当读至输入流末尾时,执行END{ commands }语句块。
BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。
1.3、awk内置变量(预定义变量)
说明:[A][N][P][G]表示第一个支持变量的工具,[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk
$n 当前记录的第n个字段,比如n为1表示第一个字段,n为2表示第二个字段。
$0 这个变量包含执行过程中当前行的文本内容。
[N] ARGC 命令行参数的数目。
[G] ARGIND 命令行中当前文件的位置(从0开始算)。
[N] ARGV 包含命令行参数的数组。
[G] CONVFMT 数字转换格式(默认值为%.6g)。
[P] ENVIRON 环境变量关联数组。
[N] ERRNO 最后一个系统错误的描述。
[G] FIELDWIDTHS 字段宽度列表(用空格键分隔)。
[A] FILENAME 当前输入文件的名。
[P] FNR 同NR,但相对于当前文件。
[A] FS 字段分隔符(默认是任何空格)。
[G] IGNORECASE 如果为真,则进行忽略大小写的匹配。
[A] NF 表示字段数,在执行过程中对应于当前的字段数。
[A] NR 表示记录数,在执行过程中对应于当前的行号。
[A] OFMT 数字的输出格式(默认值是%.6g)。
[A] OFS 输出字段分隔符(默认值是一个空格)。
[A] ORS 输出记录分隔符(默认值是一个换行符)。
[A] RS 记录分隔符(默认是一个换行符)。
[N] RSTART 由match函数所匹配的字符串的第一个位置。
[N] RLENGTH 由match函数所匹配的字符串的长度。
[N] SUBSEP 数组下标分隔符(默认值是34)。
举例说明:
打印每一行的第二和第三个字段:
[root@linuxlearn sh]# awk '{ print $2,KaTeX parse error: Expected 'EOF', got '}' at position 3: 3 }̲' test.txt 统计文件…VAR ‘{ print VARIABLE }’
10000
[root@linuxlearn sh]#
作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同。awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等)和一些用于对字符串进行操作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外,awk中允许进行多种测试,作为样式匹配,还提供了模式匹配表达式(匹配)和!(不匹配)。作为对测试的一种扩充,awk也支持用逻辑运算符。

操作符 描述 操作符 描述
< 小于 >= 大于等于
<= 小于等于 ~ 匹配正则表达式
== 等于 !~ 不匹配正则表达式
!= 不等于

【案例3】:比较域
1.打印awkfile文件中含有Brown的行信息

awk ‘$0 ~/Brown/’ awkfile

2.打印awkfile文件中第三域中含有48的行信息

awk ‘{if($3~/48/) print $0}’ awkfile

3.打印awkfile文件中第三域中只有48的行信息

awk ‘$3==“48” {print $0}’ awkfile

4.打印awkfile文件中第四个域等于Brown-2的行信息

awk ‘$4!=“Brown-2” {print $0}’ awkfile

awk ‘{if($6<$7) print $0 “$1 Try better at the next time”}’ awkfile

awk ‘{if($6<=$7) print $1}’ awkfile

复合模式或复合操作符用于形成复杂的逻辑操作,复杂程度取决于编程者本人。有必要
了解的是,复合表达式即为模式间通过使用下述各表达式互相结合起来的表达式:
&& AND : 语句两边必须同时匹配为真。
|| O R:语句两边同时或其中一边匹配为真。
! 非求逆
【案例】:
1.打印awkfile文件中第一个域为Johmn而且第四域为Yello-2的行信息

awk ‘{if($1==“Johmn” && $4==“Yello-2”) print $0}’ awkfile

  1. 打印awkfile文件第四域为Brown-2或Yello-2的行信息

awk ‘{if($4==“Brown-2” || $4==“Yello-2”) print $0}’ awkfile

设置字段定界符
默认的字段定界符是空格,可以使用-F “定界符” 明确指定一个定界符:
awk -F ‘:’ '{ print $NF } ’ /etc/passwd

2.2.6.4 正则表达式+sed命令
sed是一个非交互性文本流编辑器。它编辑文件或标准输入导出的文本拷贝。标准输入可
能是来自键盘、文件重定向、字符串或变量,或者是一个管道的文本。sed可以做些什么呢?
别忘了,vi也是一个文本编辑器。sed可以随意编辑小或大的文件,有许多sed命令用来编辑、
删除,并允许做这项工作时不在现场。sed一次性处理所有改变,因而变得很有效,对用户来讲,最重要的是节省了时间。

基本sed编辑命令
p 打印匹配行
= 显示文件行号
a \ 在定位行号后附加新文本信息
i \ 在定位行号后插入新文本信息
d 删除定位行
c \ 用新文本替换定位文本
s 使用替换模式替换相应模式
r 从另一个文件中读文本
w 写文本到一个文件
q 第一个模式匹配完成后推出或立即推出
l 显示与八进制A S C I I代码等价的控制字符
{ } 在定位行执行的命令组
n 从另一个文件中读文本下一行,并附加在下一行
g 将模式2粘贴到/pattern n/
y 传送字符
n 延续到下一输入行;允许跨行的模式匹配语句

【案例】:
打印输出until_who文件第二行信息

sed -n ‘2p’ until_who

打印输出until_who文件的第1到第3行信息

sed -n ‘1,4p’ until_who

打印输出until_who文件中含有who单词的行信息

sed -n '/who/'p until_who

匹配元字符$前,必须使用反斜线\屏蔽其特殊含义

sed -n '/$/'p until_who

显示整个文件

sed -n ‘1,$p’ until_who

匹配任意字符

sed -n '/.*who/'p until_who

2.2.7shell函数
2.2.7.1 shell函数基础
shell允许将一组命令集或语句形成一个可用块,这些块称为shell函数。
函数由两部分组成:
函数标题。
函数体。
标题是函数名。函数体是函数内的命令集合。标题名应该唯一;如果不是,将会混淆结
果,因为脚本在查看调用脚本前将首先搜索函数调用相应的s h e l l。
定义函数的格式为:
函数名()
{
命令1
. . .
}
或者
函数名(){
命令1
. . .
}
两者方式都可行。如果愿意,可在函数名前加上关键字function,这取决于使用者。
function 函数名()
{ …
}
可以将函数看作是脚本中的一段代码,但是有一个主要区别。执行函数时,它保留当前
shell和内存信息。此外如果执行或调用一个脚本文件中的另一段代码,将创建一个单独的
shell,因而去除所有原脚本中定义的存在变量。
2.2.8shell脚本框架—综合案例
2.2.8.1 shell脚本框架

2.2.9.1 综合案例与典型面试题
1.写一个脚本(fileprocess.sh)完成如下功能:
根据用户选择开关分别支持如下功能,
如果执行fileprocess.sh ADD path filename 则新建一个文件,名字为filename,
如果执行fileprocess.sh DEL path filename 则删除一个文件,
如果fileprocess.sh QUE path filename 则按此名字来查找。
特别要求,这三大功能需要用函数来实现,另外需要考虑容错性)。
2.写一个脚本(monitor.sh)用来监控机器对CPU和内存以及磁盘的消耗,能完成两大主要功能:
(1)
如果输入monitor.sh MEM,则监控内存的消耗,
如果输入monitor.sh CPU 则监控机器CPU的消耗。
如果输入monitor.sh DISK 则监控机器磁盘的利用率。
(2)
如果输入monitor.sh MEM 进程名,则按进程名监控内存的消耗,
如果输入monitor.sh CPU 进程名,则按进程名监控CPU的消耗。
3. 添加一个新组为class01,然后,添加属于这个组的30个用户,用户名的形式为stdXX,其中,XX从 01到 30?
3 Linux环境搭建
3.1学习策略
先学习好前面的基础,多实践、多出错,多解决具体问题。
3.2LAMP/LNMP类型环境搭建,拿ECSHOP/Discuz论坛举例
1、请先确认你所安装的 Linux 系统中是否已经安装了Apache、MySQL、PHP,如果安装请先卸载。查看是否安装(Apache为例)

注:rpm -qa 是查看本机中已经安装的所有软件。 grep httpd 是过滤出与 httpd(apache) 有关的软件。注:grep php 是查看 PHP;grep mysql 是查看 MySQL
如果执行完命令后出现空,那么说明机器中没有安装 Apache 软件,如果出现诸如下情况说明已经安装。
如果如上图所示的那样,那么就需要把这三个软件都卸载了。
卸载命令如上图:注:–nodeps 是强制卸载
2、请保证你的 Linux 系统中安装了 gcc、g++ 编译器
检查是否安装很简单,也可以是rpm –qa命令。
如果没有也没关系,安装 gcc、g++ 的方法十分简单
安装gcc:
yum -y install gcc
安装g++:
yum install gcc-c++
3、将所有的软件(大部分都是 tar 包)包上传到 /software/lamp 底下。

4、编译安装软件包介绍
在 Linux 系统安装每个源代码软件包的过程如下:
△ 配置(configure)
△ 编译(make)如果出错,需要先make clean
△ 安装(make install)
3.2.1 Linux安装Apache
安装顺序:1、解压;2、进入 libxml 目录;3、配置参数./configure(包括安装路径;依赖软件;安装功能等);4、编译make;5、安装make install。注:所有软件包安装类似。
./configure 为软件包配置参数命令,–prefix 表示指定的安装目录,大部分目录若不在会自动创建,个别不会,需要我们手动创建。
1、 解压:

2、 进入目录:cd
3、 配置:

./configure --prefix=/usr/local/apache2 --sysconfdir=/etc/httpd --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-static-support
./configure 中的参数说明:
–sysconfdir=/etc/httpd 指定Apache服务器的配置文件(httpd.conf等文件)存放位置
–with-included-apr 使用捆绑APR/APR-Util的副本
–enable-so 以动态共享对象(DSO)编译
–enable-deflate=shared 缩小传输编码的支持
–enable-expires=shared 期满头控制
–enable-rewrite=shared 基于规则的URL操控
–enable-static-support 建立一个静态链接版本的支持
4、 编译与安装:make && make install

5、 检查安装是否成功
测试 Apache 服务器
1、检查 /usr/local/ 下是否出现 apache2 目录;
2、检查 /etc/ 目录下面是否出现 httpd 目录,即里面是否有 httpd.conf 文件、extra目录等内容
3、开启 apache 服务器
[root@localhost httpd-2.2.17]# /usr/local/apache2/bin/apachectl start
stop(关闭)、restart(重启)
4、查看 apache 服务器是否启动,即查看 80 端口是否启动
[root@gamejzy httpd]# netstat -tnl|grep 80
执行完命令,出现如下所示,表示已经启动

5、在浏览器中访问:

3.2.2 Linux安装MySQL
1、建立一个组名叫 mysql
[root@localhost lamp]# groupadd mysql
2、建立一个用户名叫mysql,让他属于mysql组
[root@localhost lamp]# useradd -g mysql mysql
3、解压文件:
[root@localhost lamp]# tar zxvf mysql-5.0.21.tar.gz
4、切换到目录
[root@localhost lamp]# cd mysql-5.0.21
6、 配置
[root@localhost mysql-5.0.21]#./configure --prefix=/usr/local/mysql --with-extra-charsets=all
–with-extra-charsets=all 安装MySQL 所有的字符集
注意 在 ./configure 的时候如果出现如下错误

原因:缺少ncurses安装包。
6、编译与安装
[root@localhost mysql-5.0.21]# make && make install
MySQL安装完成之后,设置一些内容,这些内容非常繁琐,但是又非常关键的,希望大家耐心学习。
1、设置配置文件 my.cnf,放在 /etc/ 目录下
[root@localhost mysql-5.0.21]# cp support-files/my-medium.cnf /etc/my.cnf
2、初始化数据库文件,安装完 MySQL 之后,并不会出现 MySQL 的数据文件及数据存放位置
首先切换到 MySQL 的安装目录下
[root@localhost mysql-5.0.21]# cd /usr/local/mysql
3、使用 bin 目录下的 mysql_install_db 进行初始化数据库文件,并使用上面建的 mysql 用户
[root@localhost mysql]# bin/mysql_install_db --user=mysql
运行完之后,会发现 MySQL 安装目录中会多一个 var 目录,里面放置的就是数据库文件,包括我们已经建的数据库都会放置在这个目录里面。
4、设置 MySQL 安装目录权限
改变目录下的所有文件和目录的拥有者为 root
[root@localhost mysql]# chown -R root .
改变 var 目录的拥有者为 mysql 用户
[root@localhost mysql]# chown -R mysql ./var/
改变所有目录和文件的用户组为 mysql 组
[root@localhost mysql]# chgrp -R mysql .
5、启动 MySQL
[root@localhost mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
& 表示在后台启动
这时,使用 netstat -tnl,如果看见 3306 端口,那么说明启动成功
[root@localhost mysql]# netstat -tnl
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
6、设置权限,如果我们现在直接使用 bin 目录下的 mysql 命令,那么就能登录
[root@gamejzy mysql]# bin/mysql
这样就太危险了!因此需要设置权限。
先登录进 MySQL 中,使用 SQL 命令删除主机不是“localhost” 的用户名(MySQL 中的用户都mysql库中的user表),只留允许本机登录的账号。
mysql> delete from mysql.user where Host != ‘localhost’;
刷新授权表
mysql> flush privileges;
设置允许本机进入 MySQL 的 root 用户的密码
mysql> set password for ‘root’@‘localhost’=password(‘123456’);
注:设置的密码必须记住,不然就进不去 MySQL 数据库了。
到这步的时候,我们的 root 用户,就已经设置了密码(密码为’123456’),我们可以测试一下,键入“exit”退出MySQL
这时登录 MySQL 数据库的命令不能是 bin/mysql 那么简单,应该如下:
[root@localhost mysql]# bin/mysql
ERROR 1045 (28000): Access denied for user ‘root’@‘localhost’ (using password: NO)
[root@localhost mysql]# bin/mysql -h 127.0.0.1 -u root -p123456
-h 指定主机名
-u 用户名
-p 密码
7、关闭 MySQL 数据库服务器
[root@gamejzy mysql]# bin/mysqladmin -u root -p shutdown
这里的是 root 用户是 MySQL 中的用户,执行后会提示你输入密码,Enter password:
输入密码,回车即可关闭数据库。
8、加入到开机默认启动
[root@gamejzy mysql]# echo “/usr/local/mysql/bin/mysqld_safe --user=mysql &” >> /etc/rc.d/rc.local
3.2.3 Linux安装PHP
3.2.3.1 安装libxml
安装顺序:1、解压;2、进入 libxml 目录;3、配置参数(包括安装路径;依赖软件;安装功能等);4、编译;5、安装。注:所有软件包安装类似
./configure 为软件包配置参数命令,–prefix 表示指定的安装目录,大部分目录若不在会自动创建,个别不会,需要我们手动创建。

3.2.3.2 安装libmcrypt
1、解压:
[root@localhost lamp]# tar zxvf libmcrypt-2.5.8.tar.gz
2、切换目录
[root@localhost lamp]# cd libmcrypt-2.5.8
3、配置
[root@localhost libmcrypt-2.5.8]# ./configure --prefix=/usr/local/libmcrypt
4、编译与安装
[root@localhost libmcrypt-2.5.8]# make && make install
3.2.3.3 安装zlib
1、解压:
[root@localhost lamp]# tar jxvf zlib-1.2.3.tar.bz2
2、切换目录
[root@localhost lamp]# cd zlib-1.2.3
3、配置
[root@localhost zlib-1.2.3]# ./configure
4、编译与安装
[root@localhost zlib-1.2.3]# make && make install
3.2.3.4 安装libpng
1、解压:
[root@localhost lamp]# tar zxvf libpng-1.2.31.tar.gz
2、切换目录
[root@localhost lamp]# cd tempdir
[root@localhost tempdir]# ls -al
total 12
drwxr-xr-x 3 root root 4096 Jan 13 00:10 .
drwxr-xr-x 5 root root 4096 Jan 13 00:10 …
drwxrwxr-x 7 xulinlin xulinlin 4096 Jun 23 2011 libpng-1.2.31
[root@localhost tempdir]# cd libpng-1.2.31
3、配置
[root@localhost libpng-1.2.31]# ./configure --prefix=/usr/local/libpng
4、编译与安装
[root@localhost libpng-1.2.31]# make && make install
3.2.3.5 安装jpeg6
1、解压:
[root@localhost lamp]# tar zxvf jpegsrc.v6b.tar.gz
2、新建相关目录这个软件配置的时候不会自动创建目录,需要我们手动创建
[root@localhost lamp]# mkdir /usr/local/jpeg6
[root@localhost lamp]# mkdir /usr/local/jpeg6/bin
[root@localhost lamp]# mkdir /usr/local/jpeg6/lib
[root@localhost lamp]# mkdir /usr/local/jpeg6/include
[root@localhost lamp]# mkdir -p /usr/local/jpeg6/man/man1
3、切换目录
[root@localhost lamp]# cd jpeg-6b
4、配置
[root@localhost jpeg-6b]# ./configure --prefix=/usr/local/jpeg6/ --enable-shared --enable-static
说明:
–enable-shared 建立共享库使用的GNU的libtool
–enable-static 建立静态库使用的GNU的libtool
5、编译与安装
[root@localhost jpeg-6b]# make && make install
3.2.3.6 安装freetype
1、解压:
[root@localhost lamp]# tar zxvf freetype-2.3.5.tar.gz
2、切换目录
[root@localhost lamp]# cd freetype-2.3.5
3、配置
[root@localhost freetype-2.3.5]# ./configure --prefix=/usr/local/freetype
4、编译与安装
[root@localhost freetype-2.3.5]# make && make install
3.2.3.7 安装autoconf
1、解压:
[root@localhost lamp]# tar zxvf autoconf-2.13.tar.gz
2、切换目录
[root@localhost lamp]# cd autoconf-2.13
3、配置
[root@localhost autoconf-2.13]# ./configure
4、编译与安装
[root@localhost autoconf-2.13]# make && make install
3.2.3.8 安装gd
1、解压:
[root@localhost lamp]# tar zxvf gd-2.0.33.tar.gz
2、切换目录
[root@localhost lamp]# cd gd-2.0.33
3、配置
[root@localhost gd-2.0.33]#./configure --prefix=/usr/local/gd2 --with-jpeg=/usr/local/jpeg6/ --with-png=/usr/local/libpng/ --with-freetype=/usr/local/freetype/

4、编译与安装
[root@localhost gd-2.0.33]# make && make install
3.2.3.9 正式安装php
1、解压:
[root@localhost lamp]# tar zxvf php-5.3.5.tar.gz
2、切换目录
[root@localhost lamp]# cd php-5.3.5
3、配置
[root@localhost php-5.3.5]# ./configure \
–prefix=/usr/local/php \
–with-config-file-path=/usr/local/php/etc \
–with-apxs2=/usr/local/apache2/bin/apxs \
–with-mysql=/usr/local/mysql/ \
–with-libxml-dir=/usr/local/libxml2/ \
–with-png-dir=/usr/local/libpng/ \
–with-jpeg-dir=/usr/local/jpeg6/ \
–with-freetype-dir=/usr/local/freetype/ \
–with-gd=/usr/local/gd2/ \
–with-mcrypt=/usr/local/libmcrypt/ \
–with-mysqli=/usr/local/mysql/bin/mysql_config \
–enable-soap \
–enable-mbstring=all \
–enable-sockets
参数说明:
–with-config-file-path=/usr/local/php/etc 指定PHP5配置文件存入的路径
–with-apxs2=/usr/local/apache2/bin/apxs 告诉PHP查找Apache 2的地方
–with-mysql=/usr/local/mysql/ 指定MySQL的安装目录
–with-libxml-dir=/usr/local/libxml2/ 告诉PHP放置libxml2库的地方
–with-png-dir=/usr/local/libpng/ 告诉PHP放置libpng库的地方
–with-jpeg-dir=/usr/local/jpeg6/ 告诉PHP放置jpeg库的地方
–with-freetype-dir=/usr/local/freetype/ 告诉PHP放置freetype库的地方
–with-gd=/usr/local/gd2/ 告诉PHP放置gd库的地方
–with-mcrypt=/usr/local/libmcrypt/ 告诉PHP放置libmcrypt库的地方
–with-mysqli=/usr/local/mysql/bin/mysql_config 变量激活新增加的MySQLi功能
–enable-soap 变量激活SOAP和Web services支持
–enable-mbstring=all 使多字节字符串支持
–enable-sockets 变量激活socket通讯特性

出现如下报错:
解决方法:
cd /usr/local/mysql/lib/mysql/
ln -s libmysqlclient.so.15.0.0 libmysqlclient_r.so
4、编译与安装
[root@localhost php-5.3.5]# make &&¡make install
编译和安装,时间会比较长,耐心等待吧!

5、配置文件:设置 php.ini 配置文件
[root@localhost php-5.3.5]# cp php.ini-development /usr/local/php/etc/php.ini
注:/usr/local/php/etc 是在配置的时候指定的位置
6、和Apache整合
先打开 Apache 的配置文件 httpd.conf
[root@localhost php-5.3.5]# vi /etc/httpd/httpd.conf
会发现文件中有这么条内容
LoadModule php5_module modules/libphp5.so
这就说明 PHP 已经加载到 Apache 服务器中了,我们所要做的是告诉 Apache 服务器,哪些后缀名使用 PHP 解析
在 vi 编辑器中搜索“AddType application/x-compress .Z”
在后面添加一条:AddType application/x-httpd-php .php

修改后的效果如下图
保存并退出,重启 Apache
[root@gamejzy php-5.3.19]# /usr/local/apache2/bin/apachectl stop
[root@gamejzy php-5.3.19]# /usr/local/apache2/bin/apachectl start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值