linux笔记

时间
....编号
........类别
............命令
................参数
....................详解

LInux基础学习笔记 2016年6月02日10:38:53
/****************************************************************begin**************************************************************************/
一.Linux达人养成计划I
001.Linux简介
01-01.Linux简介
a.版本:发行版和内核版
b.官网:https://www.kernel.org/
c.Linux 起源于 Minix,而 Minix 又源于 Unix。 Minix 是一位教授为了方便授课,所以购买了一个 Unix 操作系统,仿照着Unix开发了自己的操作系统 Minix ,
并且公开源代码。但是这位教授不打算商业化,也不打算更新,没接受任何更新,因为它的目的仅仅是授课。Linus 在 1991 年开发了 Linux。 Linux 依然开源
免费,且不断更新。Minix 和 Linux 以前流行都很广,但是 Minix 不更新,所以 Linux 影响力比较强大。Linux 在服务器端占有率十分高,因为它安全稳定。
字符界面也比图形界面在速度和安全方便更加强;
01-02.开源软件简介
a.开源软件:
1.使用自由:绝大多数开源软件免费
2.研究自由:可以获得软件源代码
3.散步及改良的自由:可以自由传播、改良甚至销售
b.Mysql+apache+php+linux是常见的网站开发架构平台。
c.常用开源软件:阿帕奇、NGINX(相较于apache占用服务器资源更少、更高的并发访问量)、MySql、php、samba、mongoDB、python等。
d.开源软件:使用自由(绝大多数开源软件免费)、研究的自由(可以获得软件源代码)、散布及改良的自由(可以自由传播、改良甚至销售)
01-03.Linux应用领域
a.嵌入式应用
b.基于linux的企业服务器
c.android手机的底层是Linux系统,苹果手机的底层是unix系统,Nokia和WinPhone手机底层是Windows系统;
d.www.netcraft.com 查看全球服务器系统使用百分比,其中百分之80网站后台是linux(apache和ngnix);
01-04.字符界面的优势
a.字符界面占用系统资源少-节省系统资源
b.字符界面减少了出错、被攻击的可能性-容错性高
002.Linux系统安装
02-01.系统分区-分区与格式化
a.主分区只能有4个,是由硬盘的结构决定,每个扇区512字节,其中446字节,64字节;
b.扩展分区最多只能有一个,主分区加扩展分区最多有4个;
c.逻辑分区盘符一定从5开始,逻辑分区除去软盘分区A,B,主分区1(一般就是操作系统)C,理论上可以有23个(剩余23个字母);
d.格式化的根本目的是为了写入新的文件系统,而不是单纯的删除数据;
e.Linux格式化主要做了两件事:
1.把整个分区分成等大小的数据块;
2.在分区列表中,记录一个二维表格,记录每个文件的ID号(其实一般不称ID号,我们成为i节点,即inode)、修改时间、权限、文件保存位置
02-01.系统分区-分区设备文件名及挂载
a.硬盘分区:1,2,3,4只能是主分区或者扩展分区,不会是逻辑分区,逻辑分区都是从5开始;
b.Windows只要分区之后就可以直接自动分配盘符,Linux中所有的都是文件,包括用户等等;
c.Linux 分区,格式化,起设备文件名,分配盘符(Linux中成为挂载点),挂载(盘符,目录即为挂载点);
003.命令基本格式和文件处理命令
03-01.文件操作命令
a.ls [选项] [参数]
a 查看所有文件
d 查看目录属性
h 人性化显示文件大小
i 显示文件note(编号)
l 列表方式显示文件
b.ls -adhil /etc/
c.ll=ls -l
03-02.目录处理命令
a.cd [选项] [参数]
. 进入当前目录
.. 返回上一级目录
- 进入上次目录
~ 同空格
空格 返回根目录
pwd 查看当前目录所在位置
touch abc 创建一个空文档
mkdir bols 创建一个目录
mkdir -p japan/cangls 递归创建目录
rm -r,-rf /japan 是否删除目录/文件,强制删除目录
cp -r,-a /japan 复制目录,复制文件所有属性
mv 空 剪切目录和文件,在同一个目录下时重命名文件,否则为剪切
03-03.常见目录作用
a.目录名 作用
/ 根目录
/bin 存放必要的命令
/boot 存放内核以及启动所需的文件等
/dev 存放设备文件
/etc 存放系统的配置文件
/home 用户文件的主目录,用户数据存放在其主目录中
/lib 存放必要的运行库
/mnt 存放临时的映射文件系统,我们常把软驱和光驱挂装在这里的floppy和cdrom子目录下。
/proc 存放存储进程和系统信息
/root 超级用户的主目录
/sbin 存放系统管理程序
/tmp 存放临时文件的目录
/usr 包含了一般不需要修改的应用程序,命令程序文件、程序库、手册和其它文档。
/var 包含系统产生的经常变化的文件
03-04.软链接和硬链接
a.ln -s 绝对路径下文件 要创建链接的路径
b.硬链接删除仍然可以通过相同的硬链接找到数据,软链接如果底层数据被删除,则无法再通过软链接找到数据
c.修改软链接,原文件也被修改,软链接与硬链接的区别,软链接的id 号与原文件不同,硬链接的id 号与原文件相同,软链接跟window 的快捷方式原理一样
d.软链接第三个参数一定要写绝对路径
软链接第三个参数一定要写绝对路径
软链接第三个参数一定要写绝对路径
重要的事情说三遍
004.文件搜索命令
04-01.文件搜索命令locate
a.locate 功能单一,只搜索文件名;
b.locate 搜索后台数据库文件,但其不是时时更新;
c.updatedb 更新数据库;
e.find 通常遍历文件,耗费资源,速度慢;
04-02.命令搜索命令
a.whereis 命令名
-b 只查找可执行文件w
-m 只查找帮助文件
b.which
具备whereis的功能,可以搜索到命令的别名;
04-03.find命令
a.find 查找范围查找文件
find / -name install.log
find /root -nouser
find /var/log -mtime +10 10天前修改的文件
find /var/log -atime -10 10天内访问的文件
find /var/log -ctime 10 10天当天改变文件属性
find /home -iname 不区分大小写
find /home -size 30k 等于30k的文件
find /home -size +22k 大于22k的文件
find /home -size -25M 小于25M的文件 k小写 M 大写
find /root -inum 2333 i节点为2333的文件
find /home -size +100k -a -size -10M -exec ls -lh {} \; 大于100k小于10M的文件
b.检索条件
* 任意字符
? 任意一个字符
[] []内任意一个字符
mtime 按照时间查找
iname 按照名字查找
size 按大小查找
inum 按node查找
04-04.grep命令
a.文件中搜索字符串的命令grep
-i 忽略大小写
-v 排除指定字符串
b.find与grep区别
1.find:在系统中搜索符合条件的文件名,使用通配符(完全)匹配
2.grep:在文件当中搜索符合条件的字符串,使用正则表达式(包含)匹配
005.帮助命令
05-01.帮助命令
a.man + 命令名称
b.man -f 命令 等于 whatis 命令
c.查看命令拥有哪个级别的帮助:
1:查看命令的帮助<br>
2:查看可被内核调用的函数的帮助<br>
3:查看函数和函数库的帮助<br>
4: 查看特殊文件的帮助(主要是/dev目录)<br>
5:查看配置文件的帮助<br>
6:查看游戏的帮助<br>
7:查看其他杂项的帮助<br>
8:查看系统管理员可用的命令<br>
9:查看和内核相关文件的帮助
05-02.其它帮助命令
a.查看shell内部命令:命令+(--help)
1.先whereis+命令:查看是否有可执行文件,判断是否是shell内部命令;
2.help + 命令 查看帮助
3.info + 命令 查看详细帮助命令
b.只要通过whereis能找到命令的位置,这个命令就是后来安装的,例如ls;如果找不到命令的位置,这个命令就是shell自带的,例如cd。
而所谓的找到找不到,是指的whereis之后,有没有/bin/ls 或者sbin/....这类的内容出现。如果有,就是找到了。
006.压缩命令
06-01.常见压缩格式<一>
a..zip .gz .bz2 .tar.gz .tar.bz2
b.zip
1.zip 压缩文件名 源文件
2.-r 压缩目录
c.gzip
1.gzip 源文件 #压缩为.gz格式的压缩文件,源文件会消失
2.gzip -c 源文件 > 压缩文件 #压缩为.gz格式,源文件保留
3.gzip -r 目录 #压缩目录下所有子文件,但是不能压缩目录
4.gunzip 压缩名 #解压缩
d.bzip2
1.bzip2 源文件 #压缩为.bzip2不保留源文件
2.-k #压缩之后保留源文件,#bzip不能压缩目录
3.bunzip2 #解压缩,-k保留源文件
06-01.常见压缩格式<二>
a.压缩总结:
1.zip、bz2、gz格式,用来压缩文件时差不多。但是压缩目录时,后面2者乏力。所以,可以先把目录打包成.tar,然后对tar进行bz2压缩或者gz压缩。解压时,当然是先解压成tar包
然后把包拆开。所以,.tar.gz和.tar.bz2这两个格式的产生,是为了解决gz和bz2对于目录进行压缩时的不方便而发明的。
2.z是gz, j是bz2 ,c是打包,x是拆包;
007.关机与重启命令
07-01.重启
shutdown -r 05:32
07-02.关机
shutdown -h now
07-03.查看系统运行级别
runlevel
07-04.退出登录用户
logout
008.其它常用命令
08-01.挂载命令
a.挂载命令(可理解为分配盘符)
b.查询与自动挂载
1.mount 查询系统中已挂载的设备
2.mount -a 依据配置文件/etc/fstab的内容,自动挂载
c.挂载命令的格式
1.mount [-t 文件系统] [-o特殊选项] 设备 文件名 挂载点
d.挂载光盘

1.mkdir /mnt/cdrom/ #建立挂载点,空目录都可以
2.mount -t iso9660 /dev/sr0 /mnt/cdrom/
或mount /dev/sr0 /mnt/cdrom/ #挂载光盘
e.卸载光盘
1.umount 设备文件名或挂载点
2.umount /mnt/cdrom/或umount /dev/sr0
f.挂载U盘
1.fdisk -l #查看设备文件名
2.mount -t vfat /dev/sdb1 /mnt/usb/ #vfat指的是fat32文件系统,#Linux默认不支持NTFS文件系统的
08-02.用户登录查看命令
a.who 命令
1.只能看到用户名,登录终端,登录时间
b.last命令
1.查询当前登录和过去登录的用户信息
2.实际是读取/var/log/wtmp文件
c.lastlog命令
1.查询所有用户上次登录时间
2.实际是读取/var/log/lastlog文件数据
009.Shell基础
09-01.shell概述
a.Shell定义
1.Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至时编写一些程序。
2.Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释执行的脚本语言,在Shell中可以直接调用Linux系统命令。
b.Shell分类
1.Bourne Shell:主文件名为sh
2.C Shell:BSD版的Unix
3.两种语法类型有Bourne和C,彼此不兼容。Bourne家族主要包括sh,ksh,Bash(Linux标准Shell),psh,zsh;C家族主要包括:csh,tcsh
echo $SHELL 查看Shell
Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell
vi /etc/shells
09-02.脚本执行方式
a.赋予指向权限,直接运行
1.chmod 755 hello.sh
2../hello.sh #相对路径方式执行
b.通过Bash调用执行脚本
1.bash hello.sh
09-03.别名与快捷键
a.快捷键
1.ctrl+c强制终止当前命令
2.ctrl+l清屏
3.ctrl+a把光标移动到句首
4.ctrl+e把光标移动到句尾
5.ctrl+u删除该行命令
6.ctrl+z把命令放入后台
7.ctrl+r在历史命令中搜索
b.别名
1.alias //查看系统中所有的命令别名;
2.unalias 别名 //删除别名;
3.alias 别名 = '原命令' //设定命令别名(临时生效,一旦重启则失效;
09-04.历史命令
a.历史命令
history [选项] [历史命令保存文件]
选项
-c 清空历史命令
-w 把缓存中的历史命令写入历史命令保存文件~/.bash_history
#历史命令默认保存1000条,如果不够可以修改环境变量进行配置/etc/profile HISTSIZE
#使用上下箭头调用以前的历史命令
#使用"!n"重复执行第n条历史命令
#使用"!!"重复执行上一条命令
#使用"!字符串"重复执行以该字符串开头的命令
b.命令和文件补全 Tab键
命令补全依赖PATH环境变量
09-05.输出重定向
a.标准输入输出
1.键盘 /dev/stdin 0 标准输入
2.显示器 /dev/sdtout 1 标准输出
3.显示器 /dev/sdterr 2 标准错误输出
b.输出重定向
命令 > 文件 以覆盖的方式,把命令的正确输出输出到指定的文件或设备当中
命令 >> 文件 以追加的方式,把命令的正确输出输出到指定的文件或设备当中
标准错误输出重定向:
错误命令 2>文件 以覆盖的方式,把命令的错误输出输出到指定的文件或设备当中
错误命令 2>>文件 以追加的方式,把命令的错误输出输出到指定的文件或设备当中
正确输出和错误输出同时保存
命令 > 文件 2>&1 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中
命令 >> 文件 2>&1 以追加的方式,把正确输出和错误输出都保存到同一个文件中
命令 &>文件 以覆盖的方式,把正确输出和错误输出都保存到同一个文件中
命令 &>>文件 以追加的方式,把正确输出和错误输出都保存到同一个文件中
命令>>文件1 2>>文件2 把正确输出追加到文件1中,错误输出追加到文件2中
#/dev/null 文件黑洞
c.输入重定向
1.wc [选项] [文件名] ctrl+d结束输入
-c:统计字节数
-w:统计单词数
-l:统计行数
2.命令 < 文件把文件作为命令的输入
09-06.管道符
a.多命令顺序执行
1.; 多个命令顺序执行
2.&& 前一个命令正确执行,后一个命令才会执行
3.|| 前一个命令错误,执行后一个命令
b.管道符
1.命令1 | 命令2
2.命令1的正确输出作为命令2的输入
09-07.通配符
a.通配符(文件名或者目录名)
1.? 匹配任意一个字符
2.* 匹配0个或任意多个字符
3.[] 匹配括号中任意一个字符
4.[-]匹配括号中任意一个字符,-代表一个范围
5.[^]匹配不是括号中任意一个字符
b.Bash中其他特殊符号
1.'' 单引号,在单引号中左右的特殊符号,如$,&都没有特殊含义
2."" 双引号,在双引号中左右的特殊符号都没有特殊含义,但是“$”,"`","\"是例外。拥有“调用变量的值”,“引用命令”和“转义符”的特殊含义
3.`` 反引号,反引号括起来的内容是系统命令,在Bash中会先执行它。和$()作用一样。
4.$() 用来引用系统命令
5.# 在Shell脚本中,#开头的行代表注释
6.$ 用于调用变量的值,如需要调用变量name的值时,需要用$name的方式得到变量的值
7.\ 转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出"$"符号
二.Linux达人养成计划II
001.VIM文本编辑器
01-01.VIM文本编辑器概述
01.Visual Interface (可视化接口) 类似 windows 中的记事本
02.VIM 是 VI 的升级版本
2-1) VIM 支持多级撤销
2-2) VIM 可以跨平台运行, VI 只可以运行在unix内核的系统中, VIM 则还可以运行在windows中
2-3) VIM 支持语法高亮, 关键字被用颜色标注
2-4) VIM 支持图形界面
01-02.VIM文本编辑器的操作模式
01.输入模式:双击d删除一整行内容
02.命令模式:esc和i键之间来回切换命令模式和编辑模式;
03.底行模式:保存、退出等;(也属于命令模式)
04.vim abc :默认为命令模式无法输入文本——> "i"——>由命令模式转为输入模式——>"ESC"——>切换为底行模式——>":wq"——>"Enter"正确保存——>可以用cat abc查看
05.vim abc :创建abc文件(假如文件不存在则创建abc,如果存在则打开文件abc),此时还不能进行编辑,输入“i”,进入编辑模式,编辑结束,按esc退出编辑,进入底行模式,再输入“:wq”,保存退出。
06.常用命令
底行模式常用指令
- :w 保存
- :q 退出
- :! 强制执行
- :wq 保存退出
- :q! 忽略修改,强制退出
01-03.VIM文本编辑器的命令模式
01.vim 文件名:光标定位到文件的第一行。
02.vim + 文件名:将光标定位到文件最后一行。
03.vim + 行号 文件名:将光标定位到文件该行,如果行号超出范围值,定位到最后一行。
04.vim +/xxx 文件名:将光标定位到指定单词“xxx”第一次出现的行号,可以通过n切换到下一次出现的行数。
05.vim 文件名1 文件名2 文件名3:一次打开或创建多个文件,通过:n 切换到下一个文件,输入:N或者:prev切换到上一个文件。
01-04.底行模式和命令模式常用指令
01.底行模式常用指令
:w 保存
:q 退出
:! 强制退出
:wq 保存退出
:num 将光标快速定位到num行
/xxx 将光标向后搜索xxx字符串,定位到xxx第一次出现的位置
?xxx 将光标向前搜索xxx字符串,定们到xxx第一次出现的位置
dd 删除光标所在行
o 在光标所在行的下方插入一行并切换到输入模式
yy 复制光标所在的行
p 在光标所在行的下方粘贴
P 在光标所在行的上方粘贴
02.命令模式常用指令
h 光标左移
j 光标下移
k 光标上移
l 光标右移
ctrl+f 向下翻页(front)
ctrl+b 向上翻页(back)
ctrl+d 向下翻半页(down)
ctrl+u 向上翻半页(up)
03.最简单的是在普通模式下,用 ZZ 来保存并退出,用 ZQ 不保存退出。直接按,要大写。
如果你是指如何退出插入模式,那么是按 <Esc> 来回到普通模式。
002.磁盘管理
02-01.磁盘管理基本命令
01.df查看磁盘分区的使用状况
-l仅显示本地磁盘(默认0
-a显示所有文件系统的磁盘使用情况,包括比如/proc/
-h以1024进制计算最合适的单位显示磁盘容量
-H以1000进制计算最合适的单位显示磁盘容量
-T显示磁盘分区类型
-t显示指定类型文件系统的磁盘分区(类型如ext4,ext3) df -th ext4
-x不显示指定类型文件系统的磁盘分区(与 -t参数互逆)
02.du统计磁盘上的文件大小
-b以byte为单位统计文件
-k以KB为单位统计文件
-m以MB为单位统计文件
-h以1024进制计算最合适的单位显示磁盘容量
-H以1000进制计算最合适的单位显示磁盘容量
-s指定统计目标(如指定某个文件夹)
例1:du -s /root/ 统计/root/文件夹下的文件大小
例2:如du -sb *.zip 统计当前文件夹下.zip文件的大小以byte为单位显示
例3:du -sb *.zip /root/ 统计/root/文件夹下.zip文件大小以byte为单位显示

注意:-b,-k -m统计的结果是四舍五入的,都为整数。
-h,-H统计结果更为精确。
02-02.硬盘分区和格式化
第一:主分区和扩展分区总数不能超过4个。
第二:扩展分为去最多只能有一个。
第三:扩展分区不能直接存取数据。
02-03.在VM虚拟机中添加硬盘
01.虚拟机添加新硬盘
首先需要将虚拟机关机poweroff/halt/init 0/shutdown -h now
然后如图所示的操作:首先打开【编辑虚拟机设置】
然后点击下面的【添加】选项——添加硬盘...
02.服务器添加新硬盘:
添加硬盘要关闭系统(关机)
有些服务器的主板支持热插拔(即:不关闭服务器的情况下,连接新的硬件)
02-04.MBR分区
01.查看磁盘分区信息
fdisk -l
fdisk +磁盘设备路径,进入分区模式
然后输入m可以查看帮助信息,
输入n,就可以添加分区
02.创建分区
硬盘分区工具 "fdisk"命令
使用fdisk分区需要跟一些参数
分区操作:
1.fdisk /dev/sdb 进入sdb硬盘分区模式
2.输入m查看命令帮助信息
3.输入n给硬盘添加一个新的分区
4.第一个分区分主分区,输入p;不输,默认是主分区
5.给分区指定编号,1-4是预留给主分区或者扩展分区的
Partition number( 1-4,defautl 1):
6.给这个分区指定扇区发起始和终止位置
扇区的起始位置: First sector (2048 - 16777215,default 2048):
不输入默认2048
扇区的终止位置:Last sector,+sectors or +size{K,M,G}{2048-16777215,default 16777215}:
给3000M的空间,自己换算终止位置<br>
7.Command(m for help):输入p查看已经分好的区
8.Command(m for help):输入n 继续添加分区
9.Select(Default p):输入 e 添加扩展分区
10.Partition number(1-4,default 2):指定分区编号,默认为2
11.First sector(6146048-16777215,default 6146048):指定扇区的起始位置,默认是6146048
12.Last sector,+sectors or +size{K,M,G}(6146048-16777215,default 16777215):
指定扇区的终止位置,剩下的所有空间都给扩展分区,也就是默认的16777215
13.Command(m for help):扩展分区不能直接使用,需要添加逻辑分区,输入n
p primary(1 primary, 1 extended, 2 free)
l logical(numbered from 5)扩展分区只能有一个,不能给分扩展分区了,所以显示的是逻辑分区,5代表分区的编号从5开始

删除分区: 输入d,随后输入删除的分区号,(逻辑分区是在拓展分区之内的,如果删除的拓展分区,随之而然的逻辑分区也被删除)
写入分区:输入w,直接就是保存并生效了;
02-05.GPT分区
fdisk只能给硬盘做MBR分区
parted既能给硬盘做MBR分区,又能做GPT分区
1.输入parted命令,启动parted分区工具
2.输入help查看帮助信息
3.切换分区目标磁盘,输入select /dev/sdc
4.给目标硬盘指定分区表的类型,然后才能给硬盘添加分区,输入mklable命令,
(如果使用MBR分区,输入mklabel msdos;使用GPT分区,输入mklabel gpt)
5.输入print 查看当前分区详情;输入print all命令,查看所有分区详情,
6.parted分区操作模式:①交互模式(使用提问模式选择) ②命令模式
01.交互模式添加分区:
添加分区指令:输入mkpart命令
输入分区名称,
File system type?[ext2]?选择分区系统类型(默认ext2),
Start?分区从第几MB开始:从0开始
End?结束位置:2000MB
Ignore/Cancel?(4K对齐,对硬盘分区很重要,为了达到最佳性能,分出1-2000MB空间,让数据块对齐)
输入Cancel取消

02.命令模式添加分区:
mkpart test(分区名称) 2000(开始位置2000MB) 3000(结束位置MB)
注意:使用命令模式添加分区的时候,分区名称是不可以省略的
删除分区:rm 3(分区编号)
unit GB命令:使用GB给分区指定开始和结束位置
quit 命令: 退出分区工具
02-06.分区的格式化
1.parted命令可以完成格式化,但是parted支持的文件系统比较有限,所以用mkfs命令。
2.因为磁盘在linux中是作为文件存在的,所以可以通过ls -l /dev/sdb*来查看磁盘设备。
3.要格式化某磁盘的两种命令;
①mkfs.ext3(文件系统类型) /dev/sdb1(路径设备)
②mkfs -t ext4 /dev/sdb2 (效果与上一致)
4.MBR磁盘中的拓展分区不可以格式化,只有主分区与逻辑分区才能格式化;
5.gpt格式化后,fdisk无法查看 要用parted print查看
02-07.挂载分区
1.没有挂载无法使用,分区默认的挂载目录是/mnt/目录(必须存在);
要挂在到imooc目录下,要新建这个目录:mkdir -p /mnt/imooc
2.挂载命令:mount /dev/sdb1 /mnt/挂载目录
3.卸载命令:umount /mnt/挂载目录
003.用户管理
03-01.用户和用户组概念
用户:使用操作系统的人( Linux允许多用户同时使用 )
用户组:具有相同系统权限的一组用户

/etc/group 存储当前系统中所有用户组信息
group : x : 1 : abc,def,xyz
组名:组密码占位符:组编号:用户列表
组编号:0是root 1到499 属于 系统预留的组编号(分配给安装的软件和服务)

/etc/gshadow 存储当前系统中用户组的密码信息
Group : * : :abc,def
组名:组密码:组的管理者:用户列表

/etc/passwd 存储当前系统中所有用户的信息
user:x:123:456:xxxxxxxx:/home/user:/bin/bash
用户名:密码占位符:用户编号:用户组编号:用户注释信息:用户主目录:shell类型

/etc/shadow 存储当前系统中所有用户的密码信息与 /etc/passwd 对应
user:passw:::::
03-02.用户和用户组的基本命令
01.用户基本命令:
1. useradd 用户名 //添加用户,所在用户组与用户名同名
2. useradd -g 组名 用户名 //添加用户,指定其所在的组
3. useradd -d 目录 用户名 //添加用户,制定其用户的家目录,没有指定所在组时,默认用户名就为用户组名
4. usermod -c 注释信息 用户名 //为指定用户名添加注释
5. usermod -l 新用户名 旧用户名 //更改用户名
6. usermod -d 目录 用户名 //更改用户个人文件夹的路径
7. usermod -g 新用户组 用户名 //更改指定用户的所属组
8. userdel 用户名 //删除用户,但是不删除用户个人文件夹里的文件
9. userdel -r 用户名 //删除用户并且删除用户个人文件夹里的文件
02.用户组基本命令:
1. groupadd 组名 //添加用户组
2. groupadd -g 组编号 组名 //添加用户组并指定组编号
3. groupmod -n 新组名 原组名 //更改用户组名称
4. groupmod -g 组编号 组名 //更改用户组编号
5. groupdel 组名 //删除用户组
03.其它命令
只允许root,禁止其他普通账号登录
在etc目录下创建一个nologin文件(文件内容无关紧要)
touch /etc/nologin
03-03.用户和用户组进阶命令
passwd -l 用户名 //锁定用户
passwd -u 用户名 //解锁
passwd -d 用户名 //清除密码登录
gpasswd -a 用户名 附属组 //给用户添加附属组
gpasswd -d 用户名 附属组 //把用户从附属组中删除
newgrp 组名 //把用户的组切换到附属组 这时候就需要用户组密码
useradd -g group1 -G group2,group3... 用户名 //为用户同时指定主用户组和附属用户组
gpasswd 用户名 //更改组密码,回车会有相应的提示操作
03-04.其它命令
id 用户名//显示指定用户信息,包括用户编号、用户编号、主要组编号及名称、附属组列表
su 用户名 //切换到其他用户下
su 后面什么也不接//表示切换到root用户下
whoami//显示当前登录用户名
groups 用户名 //显示用户所在的所有组,包括主要组和附属组
chfn 用户名 //设置用户资料,依次输入用户资料
finger 用户名 //显示用户详细资料
三.Linux网络管理
001.网络基础
01-01.ISO/OSI七层模型简介
1.ISO:国际标准组织
2.OSI是Open System Interconnection的缩写,意为开放式系统互联
3.OSI 七层模型:
7 应用层 - APDU 应用协议数据单元
6 表示层 - PPDU 表示协议数据单元
5 会话层 - SPDU 会话协议数据单元
4 传输层 - TPDU 传输协议数据单元
3 网络层 - 报文
2 数据链路层 - 帧
1 物理层 - 比特
上3层为用户提供服务,下4层为实际数据传递提供服务。
数据发送时从上到下,接收数据时从下到上。
数据链路层,帧主要保存硬件(网卡) MAC 地址。
网络层,报文中封装有 IP 地址。
MAC 地址负责局域网通信,IP 地址负责外网通信
01-02.ISO/OSI七层模型详解
物理层:设备之间的比特流的传输、物理接口、电气特性等 网线、网卡
电气特性:网线总共,8跟线。只有1、3、2、6四根线用来传输数据。现在的超五类接口还是这样
数据链路层:成帧,用MAC地址访问媒介,错误检测与修正
成帧目地,在数据包中写入MAC地址,源和目的地的MAC地址
网络层:提供逻辑地址,选路
写入IP地址,源和目的地IP
选择经过哪些路径传输数据
传输层:可靠与不可靠的传输、传输前的错误检测、流控(流量控制)
确定传输协议是否可靠
TCP:传输控制协议 可靠,传送的数据一定不丢
UDP:用户数据报协议 更快,但是可能会丢失数据
用来确定端口号 (IP学校,端口号学生)
w:80, M:25(发送端口),110(接受端口) f:21
每种传输协议,都有65536个端口
会话层:对应用回话的管理、同步
表示层:数据的表示形式,特定功能的实现如-加密,压缩
应用层:用户接口
数据是通过IP外网来传递,但是还是需要MAC地址,来通过局域网一个一个的传递
01-03.TCP/IP协议4层模型
1.应用层(对应OSI应用层、表示层、会话层)
为用户提供所需要的各种服务,例如:FTP、Telnet、DNS、SMTP等

2.传输层(对应OSI传输层)
为应用层实体提供端到端的通信功能,保证了数据包的顺序传送及数据的完整性。
该层定义了两个主要的协议:传输控制协议(TCP)和用户数据报协议(UDP)。

3.网际互联层(对应OSI网络层)
主要解决主机到主机的通信问题,该层有三个主要协议:网际协议(IP)、互联网组管理协议(IGMP)和互联网控制报文协议(ICMP)

4.网络接口层(对应OSI数据链路层、物理层)
负责监视数据在主机和网络之间的交换,地址解析协议(ARP)工作在此层。
01-04.IP地址详解
不是所有的IP都能用
分为A、B、C、D、E五类
D、E不对民用组织开放,我们不能使用
判断四组IP中第一个数 1、128、192来判断是ABC哪类IP
127这个网段,只有一个ip 127.0.0.1,代表当前计算机自己
A 1 ~ 126
A类用第一个数来代表不同的网段
不同的网段之间的通信,需要使用路由器(跨网络通信)
同一个网段中通信,只需要使用交换机就行
后3个数,代表同一个网段中的不同的主机
2的24次方-2 1.0.0.0代表网络本身,不能分配, 1.255.255.255代表当前网络的广播地址也不能分配
B 128 ~ 191
前两个数代表同一个网段 128.0 ~ 191.255 191.224和191.254不是同一个网络
后两个数代表网段中的不同的主机
C 192 ~ 223 最大是到223
前三个数代表不同的网段

每个网络有多少个主机,是用子网掩码来确定的,IP是不能确定的
每个IP都有一个标准的子网掩码
私有IP地址范围是不需要花钱的,用作内网IP,可以有效的节约公有IP,但是这些IP是不能直接访问公有IP的
需要和公网IP进行转换才能访问
公有IP需要花钱买
01-05.子网掩码
IP地址:
A类地址:1.0.0.0--126.255.255.255 私有IP地址:10.0.0.0--10.255.255.255
B类地址:128.0.0.0--191.255.255.255 私有IP地址:172.16.0.0--172.31.255.255
C类地址:192.0.0.0--223.255.255.255 私有地址:192.168.0.0--192.168.255.255
DE地址不是可用IP
1.0.0.0代表网络本身,1.255.255.255代表广播

子网掩码:与IP地址不可单独使用
A类地址255.0.0.0 B类地址255.255.0.0 C类地址255.255.255.0
子网掩码用于确定不同的网络以及主机,255即代表不同的网络,0对应的代表不同的主机
子网掩码中要求所有的1都是连续的,所有1 之间不可以有0
例如:IP地址:172.16.2.121 子网掩码:255.255.255.0
网络地址=172.16.2.0 主机地址=172.16.2.1-172.16.2.254 广播地址=172.16.2.255 其中172.16.2代表网络号,121代表主机,三个255表示前24位表示网络号,后八位为主机号
网络地址计算方式:IP地址与子网掩码进行 与 运算的结果就是网络地址
广播地址:子网掩码有多少位是0,就将IP地址后多少位全部换为1
只要子网掩码中1连续,就可以随意指定子网掩码
01-06.端口作用
1.IP地址:门牌号 ,通过ip确定对方服务器的位置
端口号(16位):收件人,在对方服务器众多服务中找出所要访问的具体哪个服务。
2.TCP、UDP包头(图2,3)
3.常见端口号(图1)
4.查看本机启用的端口:netstat -an
选项:
-a :查看所有连接和监听端口
-n :显示IP地址和端口号,而不显示域名和服务名

端口状态:
listen 监听 established 该连接正在存在 close_wait time_wait
UDP的状态列为空:没有握手,直接发。不需要监听。
服务器处的端口号一定是固定的,而发起连接的客户机会被随机分配一个端口号。
5.常见端口号(图1)
FTP(文件传输协议): 端口号 21
SSH(安全shell协议): 端口号 22
telnet(远程登录协议): 端口号 23
DNS(域名系统): 端口号 53
http(超文本传输协议): 端口号 80
SMTP(简单邮件传输协议): 端口号 25
POP3(邮局协议3代): 端口号 110
01-07.DNS作用
1.hosts文件做静态解析,优先级高于DNS解析。

2.DNS负责将域名解析为IP地址,或者把IP地址转换为域名。
过程:客户机向DNS服务器发送查询IP请求——>DNS服务器查询到web服务器的IP告知用户——>用户访问web服务器。

3.域名空间结构:
3.1根域:.
3.2顶级域(一级域):包括组织域和地区域
gov 政府;edu 教育部门;com 商业部门;org 民间团体;net 网络服务机构;mil 军事部门...
cn 中国;hk 香港;jp 日本;Uk 英国;au 澳大利亚...
3.3二级域:企业或个人自行购买的(imooc /microsoft/ibm/sina)
主机名/三级域:申请完二级域后自己定义的(www/news)

三级域+二级域+顶级域组成完整域名空间
4.DNS查询过程(以www.imooc.com.cn为例):
DNS客户机——>本地域名服务器——>根DNS服务器——>cn服务器——>com.cn服务器——>imooc.com.cn——>本地域名服务器——>DNS客户机——>web服务器www.imooc.com.cn

递归查询:客户机对本地域名服务器查询的机制,必须反馈准确值(要么成功要么失败)
迭代查询:本地域名服务器分别对各级域名服务器的查询机制,不一定反馈准确值
01-08.网关作用
1.网关作用:是一种充当转换重任的服务器或路由器
MAC:网卡地址,48位主要是用来进行局域网通信
交换机(数据链路层)是低层设备,不认识IP(网络层),只认识MAC地址
只能在同一个局域网内交换数据,同一个网段
路由器是在不同的网关进行数据交换:网关
网关:计算机的硬件设备,一般是路由器,也可以是服务器,然后在服务器上搭建路由功能
具有路由功能的网络设备
2.网关作用
1)网关在所有内网计算机访问的不是本网段的数据包时使用,只要不是局域网内交换数据就一定要经过网关,即网关分开内网和外网
2)把内网Ip转公网Ip(),公网Ip转内网Ip
3.网关作用:Gateway
交换机:内网,局域网数据交换Mac地址
路由器:不同网络间交换IP地址
网关作用:a.网关在所有内网计算机访问的不是本网段数据报时候使用
b.网关负责将内网IP转换为公网IP,公网IP转换为内网IP
c.想要访问公网一定要有网关以及DNS服务器
002.网络配置
02-01.IP地址配置
1、ifconfig:临时配置IP地址(测试时使用),而且可以查看ip地址
eg:配置临时IP:ifconfig eth0 192.168.254.200 netmask 255.255.255.0
eth0 第一块网卡
lo是Loopback的缩写,表示本地回环网卡,地址为:127.0.0.1,没有实际的意义。ping通它,只是表示当前网络协议是正常的。
2、setup:永久配置IP地址。 REDHAT公司自己开发的工具;
3、修改网络配置文件;
4、图形界面配置IP地址;(NO 服务器)
****配置完成重启: service network restart****
02-02.使用文件配置IP地址
1.网卡信息文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0
2.主机名文件 vi /etc/sysconfig/network hostname命令
3.DNS文件 vi /etc/resolv.conf
网卡信息文件内容相关说明:
1、大小写敏感:左侧名称都为大写,右侧值都是小写
2、若自动获取IP,必须局域网内有DHCP服务器存在(dhcp:自动获取,none和static:不自动获取)。若指定自动获取IP,则只写标蓝色的几行即可,标黑色的行可以省略。
3、Redhat6或centOS6以后的操作系统,ONBOOT默认是no。因此,若用setup工具修改了IP地址,则记着ONBOOT需要改为yes,否则使用ifconfig查看时,看不到对应的eth0网卡。
4、uuid是唯一识别码,当克隆机器后,每台机器的uuid都一样,会造成每台机器都无法上网,需要修改一下。
02-03.使用文件配置IP地址
虚拟机网络参数配置
(1)配置LinuxIP地址
[root@localhost ~]# setup
修改并配置IP地址
(2)启动网卡
[root@localhost ~] vi /etc/sysconfig/network-scripts/ifcfg-eth0
把 ONBOOT = no
改为 ONBOOT = yes

重启网络服务 service network restart
(3)修改UUID(如果这是一台克隆/复制出来的机子则必须进行这个步骤,否则可以省去)
1)vi /etc/sysconfig/network-scripts/ifcfg-eth0
#删除MAC地址行
2)rm -rf /etc/udev/rules.d/70-persistent-net.rules
#删除网卡和MAC地址绑定文件
3)重启动系统
(4)设置虚拟机网络连接方式
1.桥接模式:通过物理机的真实网卡进行通信,若选此项,则虚拟机需要配置与物理机相同的网关,缺点是需要占用真实网段的一个IP地址。这种模式更适用于实验,因为这种模式不仅可以与你的物理机可以通信还可以与同一局域网的其他主机通信,还可以访问公网。
2.NAT模式:在windows中(物理机中)是以VMware8虚拟网卡进行通信。这种模式只能与你自己的主机通信,不能与局域网的其他主机通信,但是可以通过物理的网卡访问公网。
3.仅主机模式:在windows中(物理机中)是以VMware1虚拟网卡进行通信。这种模式只能与你自己的主机通信,不能与局域网的其他主机通信,只能与自己的物理机通信,并且不能上公网。

切记:在选择桥接模式之后,需要选择桥接的网卡(即需要确定虚拟机需要通过哪个真实网卡连接网络),一般的虚拟机都是自动桥接,但是这种方式真的跟不靠谱**,所以你需要自己选择,如果你是通过有线接入网络,则选择有线桥接,若是通过无线接入网络,则通过无线接入。
(5)修改桥接网卡
003.网络命令
03-01.网络环境查看命令
1.ifconfig命令
查看与临时配置网络状态,但无法查看网关和DNS。

2.关闭与启动网卡
ifdown 网卡设备名 #禁用该网卡设备
ifup 网卡设备名 #启用该网卡设备

3.查询网络状态
netstat 选项
选项:一般为tuln或an
-t:列出TCP协议端口
-u:列出UDP协议端口
-n:不使用域名与服务名,而使用IP地址和端口号
-l:仅列出在监听状态的网络服务
-a:列出所有的网络连接

统计计算机建立的远程连接数:netstat -an | grep ESTABLISHED | wc -l

netstat -rn #查看网关
选项:
-r:列出路由表,功能和route命令一致。

4.route命令
route -n #查看路由列表(可以看到网关)

5.域名解析命令
nslookup [主机名或IP] #进行域名与IP地址解析

nslookup
>server #本地设定的DNS的地址
>exit #退出
03-02.网络测试命令
1.ping命令
ping [选项] ip或域名 #探测指定IP或域名的网络状况
选项:
-c 次数:指定ping包的次数

2.telnet命令
telnet [域名或IP] [端口] #远程管理与端口探测命令,明文传递

telnet 192.168.0.252 80

3.traceroute
traceroute [选项] IP或域名 #路由跟踪命令

选项:
-n 使用IP,不使用域名,速度更快
和ping一样都是利用的ICMP协议(Internet Control Message Protocol)Internet控制报文协议
家用网络,大多数结点都禁止ping,就是*,可以根据路由来分析哪些结点出现了问题
4.wget命令
wget http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz #下载命令

5.tcpdump命令 抓包
tcpdump -i eth0 -nnX port 21
选项:
-i:指定网卡接口
-nn:将数据包中的域名与服务转为IP和端口
-X:以十六进制和ASCII码显示数据包内容
port:指定监听的端口
ftp也是明文:用来上传下载文件,默认是不允许用户登陆的
http都是明文,一旦截获了数据包,就能直接获取里面的数据
https才是加密的
【详细抓包内容如下:
1.在虚拟机中输入service vsftpd start 开启ftp服务
2.再输入 netstat -tlun 查看端口号21是否开启
3.用cat /etc/passwd查看有哪些用户,为某一用户设置一个密码:passwd 用户名user1
4.tcpdump -i eth0 -nnX port21 回车等着
5.用window的dos命令窗口下登录ftp地址:ftp 192.168.198.xx回车输入用户名和秘密即可抓包
6.在虚拟机下可以看见抓包的内容:登录的用户名和密码】
004.远程登录工具
04-01.SSH协议原理
SSH命令
ssh 用户名@ip :若当前用户名和要登录的用户名一样,则可以省略,直接输入ssh ip 即可。

scp命令是linux和linux之间远程传递文件最简单最安全的方式。( SCP = Secure Copy Protocol )
scp 源文件 目标文件(当copy目录时,使用-r参数)
下载文件:scp [-r] 用户名@ip:文件路径 本地路径
上传文件:scp [-r] 本地文件 用户名@ip:上传路径
libran
非对称加密算法示意图:可以把要传输的数据比喻成圆柱体,圆柱体的两端分别是自己的公钥和对方的公钥,任何一方都可以通过自己的密码+密钥打开圆柱体的一面,从而看到传输的信息。

加密算法:
①对称加密算法:
采用单钥密码系统的加密方法,同一个密钥可以同时用作信息得加密和解密,这种加密方法称之为对称加密,也称之为密钥加密;

②非对称加密算法:
非对称加密算法(symmetric cryptographic algorithm)又名“公开密钥加密算法”,非对称加密算法需要两个密钥:公开密钥(plublickey)和私有密钥(privatekey)

SSH命令:
①ssh 用户名@IP //远程管理指定的linux服务器;
②使用ssh远程连接计算机时,下载的对方密钥存储在本地当前用户的家目录中,名为.ssh的隐藏文件中;
③scp [-r] 用户名@IP:文件路径 本地路径 //下载文件;
④scp [-r] 本地文件 用户名@IP:上传路径 //上传文件;
⑤-r:如果上传或下载的是对象是目录,则需要加-r,文件则不需要加-r;
04-02.远程登录工具SecureCRT
SecureCRT远程管理工具设置选项:
normal font :新宋体
字符集:GB2312中文
caracter encding:utf-8(国际编码)
04-03.Xshell和WinSCP工具
01.Xshell是一个远程管理服务器的软件,主要是在Windows上操作远程的linux服务器;
02.winSCP是一个远程传输文件的软件,传输软件的工具。
03.Xshell的使用
1.安装。
2.属性选择
常规-->名称随便写、协议选择SSH、主机填写远程连接的IP地址。
winSCP工具:通过网络进行数据传递,使用的是SFTP协议(超级强大)
四.Linux软件安装
001.概述
01-01.字符界面下安装软件:
1、软件包管理简介
2、rpm命令管理
3、yum在线管理
4、源码包管理
5、脚本安装包
002.软件包管理简介
02-01.源码包
1.源码包
a.源码包优点:
①开源,如果有足够的能力,可以修改源代码;
②可以自由选择所需的功能;
③软件是编译安装,所以更加适合自己的系统,更加稳定、效率更高;
④卸载方便;
b.源码包缺点:
①安装过程步骤较多,尤其安装较大的软件集合时(如LAMP环境搭建),容易出现拼写错误;
②编译过程时间较长,安装比二进制安装时间长;
③因为是编译安装,安装过程中一旦报错新手很难解决;
2.脚本安装包:
所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可以执行脚本实现一键安装。但实际安装的还是源码包和二进制包
①优点:安装简单、快捷;
②缺点:完全丧失了自定义性;
3.二进制包(RPM包)
a.二进制包的优点:
①包管理系统简单,只通过几个命令就可以实现包的安装、升级、查询和卸载;
②安装速度比源码包安装快的多;
b.二进制包的缺点:
①经过编译,不再可以看到源代码;
②功能选择不如源码包灵活;
③依赖性;
4.LAMP(LNMP)
Linux+Apache(Ngix)+Mysql/MariaDB+Perl/PHP/Python一组常用来搭建动态网站或者服务器的开源软件开源软件,本身都是各自独立的程序,
但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个强大的Web应用程序平台。
02-02.rpm包和脚本安装包
1.源码包(还需要自己编译)
源码包的运行效率高
2.二进制包(已经编译好:rpm包,系统默认包)
RPM 是 Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理;
在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用。
3.脚本安装包:大牛将我们在安装上述两种包的过程中手动输入的命令的过程写成脚本,我们双击执行即可,省去手动输入的麻烦。
脚本安装包:所谓的脚本安装包,就是把复杂的软件包安装过程写成了程序脚本,初学者可
以执行程序脚本实现一键安装。
优点:安装简单、快捷(和Windows下安装软件时的一键安装很类似。)
缺点:完全丧失了自定义性。(在Windows下,我们没办法再更改安装路径。)
003.rpm命令管理
03-01.rpm包命名规则
1.rpm包名规则(栗子)
http-2.2.15-15.el6.centos.1.i686.rpm
--a.软件包名
--b.软件版本
--c.软件发布次数
--d.适合的Linux平台
--e.适合的硬件平台
--f.包扩展名
2.RPM命令管理
1、RPM包的来源:所有RPM包都在系统光盘的Packages目录中
2、RPM包命名规则:软件包名-软件版本-软件发布的次数-适合的Linux平台-适合的硬件平台-包扩展名
3、RPM包依赖性:
a、树形依赖:a->b->c 解决方法:从后往前安装
b、环形依赖:a->b->c->a 解决方法:放在一条命令中安装即可
c、模块依赖:库文件依赖,库也叫模块,就是linux当中的函数,它有一个典型的特征,就是以【.so.数字】结尾,它依赖的其实是一个文件,而不是软件包。
该文件藏身在某一个软件包当中;我们只要将该文件所在的软件包安装上,该文件也就安装了。
解决方法:登录www.rpmfind.net网站,输入库文件名称查询到对应的rpm包,然后安装即可。
4、yum在线安装:可以方便的解决依赖文件,一条命令就可以帮用户从网上(本地也可以)找到安装包进行安装。
注:RedHat的yum是收费服务,而CentOS的yum是免费服务。
03-02.安装命令
1.rpm安装
rpm -ivh
-i(install) 安装
-v(verbose) 显示详细信息
-h(hash) 显示进度
--nodeps 不检测依赖性
2.rpm命令管理
在正式环境中,安装时必须检测依赖性,否则即使安装成功也无法正常使用。因此,选项【--nodeps】不能加。
linux就两种软件包,一个是源码包,一个是rpm包,没有yum软件包。yum安装的就是rpm包。yum其实就是rpm包的在线安装方法。
虽然,yum可以安装和卸载,但是不能对rpm包进行查询和校验。查询和校验的话,还是要用rpm命令的。
3.安装Apache的步骤:
1、rpm -ivh apr-1.3.9-3.el6_1.2.i686.rpm
2、rpm -ivh apr-util-1.3.9-3.el6_0.1.i686.rpm
3、rpm -ivh apr-util-ldap-1.3.9-3.el6_0.1.i686.rpm
4、rpm -ivh httpd-tools-2.2.15-15.el6.centos.1.i686.rpm
5、rpm -ivh httpd-2.2.15-15.el6.centos.1.i686.rpm
6、rpm -ivh httpd-manual-2.2.15-15.el6.centos.1.i686.rpm 文档包
7、rpm -ivh apr-devel-1.3.9-3.el6_1.2.i686.rpm -----
完成主包、manual包、tools包。差devel包
4.包全名与包名
包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径
包名:操作已经安装的软件包时,使用包名,是搜索/var/lib/rpm/中的数据库
03-03.升级与卸载
1.rpm升级
rpm -Uvh 包全名
参数选项:-U(upgrade) 升级
其他参数都和安装一样
2.rpm卸载
rpm -e 包名
选项:-e(erase) 卸载
--nodeps 不检查依赖
3.RPM包安装位置
a.RPM包安装的时候,都是安装在了默认的位置(这个位置都是包的作者定的),所以位置不统一,比较混乱。因此,RPM提供了卸载命令,卸载时只需要提供包名即可,不用关心安装在了什么地方。
(若安装的是源码包,就没这些问题,只要把软件包目录删掉即可)
b.所有已安装的rpm包都保存在【/var/lib/rpm/】目录下的__db.00n数据库中,如下所示:
[root@CentOS6 Packages]# ls /var/lib/rpm/*db*
/var/lib/rpm/__db.001 /var/lib/rpm/__db.002 /var/lib/rpm/__db.003 /var/lib/rpm/__db.004
c.我们在任何目录都可以输入卸载命令执行卸载操作,卸载的时候,不需要打包全名,只要打上包名即可(linux会自动去上面的数据库中查找),
另外,卸载的时候也有依赖问题,和安装的时候顺序相反。和安装一样一定要解决依赖性.
03-04.rpm包查询
1.查询是否安装:rpm -q 包名
(查询包是否安装,query) rpm -qa (查询所有已经安装的rpm包,all)
2.查询软件包详细信息:rpm -qi 包名
(查询软件信息,information) rpm -qip 包名 (查询未安装包信息,package)
3. 查询包中文件安装位置:rpm -ql 包名
(l , list,列表) rpm -qlp 包名 (查询未安装包信息,package)
4.查询系统文件属于哪个RPM包:rpm -qf 系统文件名
(查询系统文件属于哪个软件包,file)
5.查询软件包的依赖性:rpm -qR 包名
(-R 查询软件包的依赖性 ,requires ) rpm -qRp 包名 (-p 查询未安装包信息 ,package)

03-05.rpm包校验
1.rpm包校验命令
rpm -V(大写V) 已安装的包名
V(verify):校验指定RPM包中的文件;
##!!该命令执行之后,如果没有任何回馈信息,则表示该文件一切正常!!
验证内容中的8个信息得具体内容如下:
①S:文件大小是否改变;
②M:文件的类型或文件的权限(rwx)是否被改变;
③5:文件MD5校验和是否改变(可以看成文件内容是否改变)
④D:设备的主从代码是否改变;
⑤L:文件路径是否改变;
⑥U:文件的属主(所有者)是否改变;
⑦G:文件的属组是否改变;
⑧T:文件的修改时间是否改变;
文件类型:
①c:配置文件(config file)
②d:普通文档(documentation)
③g:“鬼”文件(ghost file),很少见,就是该文件不应该被这个RPM包 包含;
④L:授权文件(license file)
⑤r:描述文件(read me)
2.rpm包中文件提取
rpm2cpio 包全名 cpio -idv .文件绝对路径
--> 前面的【.】代表当前路径,不能省略。【文件绝对路径】和包里文件的绝对路径对应,也就是告诉了cpio要去包里提取哪个文件。
注:cpio只知道提取文件,并不知道要从什么地方提取文件,因此我们通常要使用【】管道符或【<】输入重定向告诉cpio我们应该从什么设备去取出文件。
①-rpm2cpip //将rpm包转换为cpio格式的命令;
②-cpip //是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件;
使用输入重定向的cpio命令格式:
cpio 选项 < [文件设备]
①-i:copy-in模式,还原;
②-d:还原时自动新建目录;
③-v:显示还原过程;
004.yum在线安装
04-01.yum源文件
1.Yum在线安装
1、yum的优点:将所有软件包放到官方服务器上,当进行yum在线安装时,可以自动解决依赖性问题。(rpm缺点:安装过程中,rpm包依赖性太强)
2、redhat的yum在线安装需要付费,centOS不需要。
3、在【/etc/yum.repos.d/】目录中,默认有4个yum源文件,其中【CentOS-Base.repo】是基本yum源文件,如果我们能上网,那它是默认生效的,而其他的都是默认不生效的。
4、[base]:名字可以随便起。
5、name:名字也是随便起。
6、mirrorlist和baseurl一个是主站点,一个是辅助站点,这两个有一个就行。可以找一个163或清华大学的yum源更换。
7、enabled:默认最后一个容器不生效,其他容器都生效。
8、gpgcheck:一般都要开启,开启后安装时会验证rpm包是否是官方的,以保证系统安全。
9、gpgkey:默认系统安装后,在目录【/etc/pki/rpm-gpg】下都会存在数字证书。注:前面的【file://】表示文件协议,后面的【/etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6】是数字证书的位置
2.yum源文件
vi /etc/yum.repos.d/*.repo
①[base]:容器名称,一定要放在[]中;
②name:容器说明,可以自己随意填写;
③mirrorlist:镜像站点,这个可以注释掉;
④baseurl:yum源服务器的地址。默认是CentOS官方的yum源服务器,是可以使用的,如果你觉得慢可以改成你喜欢的yum源地址;
⑤enabled:此容器是否生效,如果不写或写成enabled=1都是生效,写成enabled=0就是不生效;
⑥gpgcheck:如果是1是指RPM的数字证书生效,如果是0则不生效;(真实环境中,最好启用)
⑦gpgkey:数字证书的公钥文件保存位置。不用修改;
04-02.光盘yum源搭建
1、挂载光盘
mkdir /media或mnt/cdrom:建立挂载点;
mount /dev/cdrom /media或mnt/cdrom:挂载光盘;
2、使网络yum源失效:
cd/etc/yum.repos.d/:进入yum源目录;
mv CentOS-Base.repo CentOS-Base.repo.bak:修改Yum源文件后缀名,使其失效;(判断yum源是根据后缀名repo来实现的,修改后缀名则可以使该yum源失效)
3、使光盘yum源生效:
vim CentOS-Media.repo
baseurl=file:///mnt或media/cdrom:地址为光盘挂载地址,如果有多余的光盘挂载点,需要注释掉不存在或不需要使用的光盘挂在地址;
enabled=1:把enabled=0改为enabled=1,使该yum源配置生效;
4、命令:yum list:该命令可验证目前使用的yum源有哪些可用的rpm包;
04-03.yum命令(上)
常用yum命令:
1.查询
>yun list --查询所有可用软件包列表
>yum search 关键字 --搜索服务器上所有和关键字相关的包
2.安装
>yum -y install 包名 (-y 自动回答yes)
yum安装只写包名即可! eg:yum -y install gcc --c语言编译器
04-04.yum命令(下)
1.升级:
①yum -y update 包名 //会升级linux 所有程序 包括内核
⑴-update:升级;
⑵-y:自动回答yes;
2.卸载:
②yum -y remove 包名
⑴-remove:卸载;
⑵-y:自动回答yes;
!!!服务器使用最小化安装,用什么软件安装什么,尽量不要卸载!!!
3.yum软件组管理命令
yum grouplist:列出所有可用的软件列表;
yum groupinstall 软件组名:安装指定软件组,组名可以由grouplist查询出来;
yum gourpremove 软件组名:卸载指定软件组;
005.源码包安装
05-01.源码包与RPM包区别
1.源码包是不能使用【service】命令来启动服务,因为源码包的安装位置由用户指定,放在哪并不统一。
而rpm包安装后,通常都是放在【/etc/rc.d/init.d】目录中的,而【service】命令执行时,会自动搜索该目录,所以rpm包安装的服务可以使用【service】命令。
2.安装位置不同
1).rpm包安装位置不用指定,源码包安装位置必须指定。源码包没有卸载命令。卸载时直接删除文件夹即可。源码包默认启动方法/usr/local/apache2/bin/apachetl start
2).rpm包启动方式两种 service XXXX start(red hat 系列专属) 或 /etc/rc.d/init.d/xxx start
源码包不能用第一种。
综上所述,安装位置不同,启动方法是有区别的。
3.使用绝对路径启动程序的方法是通用的,通常软件包中会写上启动程序的方法的。
4.如果将源码包安装后的启动程序复制到【/etc/rc.d/init.d】目录中,则也是可以使用【service】命令执行的。
5.安装位置
RPM包默认安装位置:
/etc/:配置文件安装目录;
/usr/bin/:可执行的命令安装目录;
/usr/lib/:程序所使用的函数库保存位置;
/usr/share/doc:基本的软件使用手册保存位置;
/usr/share/man/:帮助文件保存位置;

源码包必须指定安装位置、因为源码包是没有卸载命令的,靠删除安装目录来卸载程序;
安装在指定位置当中,一般是/usr/local/软件名/
05-02.源码包安装过程(上)
1.源码包安装:
1、由于源码都是c语言写的,所以要先安装c语言编译器:gcc
2、从官方网站下载源码包,若是下载到了windows上面,可以使用winSCP传到linux上。
注:若已安装了二进制包,则源码包也是可以继续安装的,因为两者安装目录不一样。但是,并不建议这样做,因为端口会冲突。
2.查看正在监听的tcp/udp端口
***netstat -tlun
***查找网络连接信息和系统开启的端口号
使用 -t 选项列出 TCP 协议的连接
使用 -l 选项列出正在监听的套接字
使用 -u 选项列出 UDP 协议的连接
使用 -n 选项禁用域名解析功能
05-03.源码包安装过程(下)
1.源码包安装过程(源码包的安装过程和安装顺序是固定的)
下面以安装apache2为例,解压缩后的目录为【httpd-2.2.31】:
1、安装时必须进入到解压缩后的目录【httpd-2.2.31】中;
2、执行【./configure】命令,该命令用于软件配置与检查(基本上每个源码包都会有该命令,即使个别的没有该命令,也会提供相关替代命令),它有以下几点功能:
a、定义需要的功能选项;
b、检测系统环境是否符合安装要求;
c、把a中定义好的功能选项和b中检测系统环境的信息都写入Makefile文件,用于后续的编辑。(后续的【make】和【make install】命令都会依赖该文件)
执行命令【./configure --prefix=/usr/local/apache2】,该命令用于指定安装位置为:【/usr/local/apache2】(其中的【apache2】目录不需要提前创建,【make install】命令执行时会自动创建)。
命令执行后,会在当前目录生成Makefile文件。
3、执行【make】命令,编译源码(这一步通常比较耗时);
4、执行【make install】命令,安装程序,此时会创建【/usr/local/apache2】目录。
注:
如果命令执行过程中发生终止,并且出现error、warn或no提示,则表明出错,否则,一切正常。
若执行【./configure】或【make】命令时出现错误,是不需要删除【/usr/local/apache2】目录的,因为程序还没有真正安装。只需要执行【make clean】命令即可,该命令用于清除缓存、临时文件等,使安装环境恢复到未安装状态。
若执行【make install】命令时报错,则需要删除【/usr/local/apache2】目录,并且执行【make clean】命令才行。
2.Apache服务开启与关闭
源码包和rpm包不冲突,是两个独立的Apache,要运行其一,必须关闭另一个。
开启与关闭命令也不同,安装路径不同,编辑网页显示路径也不同
1./usr/local/apache2/bin/apachetl stop
第1条命令是关闭源码包的服务
2.service httpd start
第2条命令是开启rpm包的服务
3.vim /var/www/html/index.html
第3条命令是编辑rpm所装的Apache的网页内容
4.service httpd stop
第4条命令是关闭rpm包的服务
5./usr/local/apache2/bin/apachetl start
第5条命令是开启源码包的服务
注:
源码包安装后的apache2的默认首页为【/usr/local/apache2/htdocs/index.html】。
而rpm包安装后的apache2的默认首页为【/var/www/html/index.html】,当该文件不存在时,会自动跳转到【/var/www/error/noindex.html】页面。
006.脚本安装包
06-01.脚本安装包(上)
1.脚本安装包:
linux中安装包只有rpm包和源码包,所谓一键安装包(脚本安装包),实际上还是安装的源码包与rpm包,只是把安装过程写成了脚本;
优点:简单,快速,方便;
缺点:
1.不能定义安装软件的版本;
2.不能定义所需要的软件功能;
3.源码包的优势几乎完全丧失;
2.LNMP配置
Nginx:一款请来高年级的额Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,由俄国公司在2004年发布;
Nginx可以支持更大的并发连接量(同时访问量);
Apache默认的最大并发量为400个、一旦改到2K以上,则需要进行测试,避免出现故障;
Nginx无需进行测试则可以将并发量调整到5W,

安装LAMP/LNMP的时候,建议关闭SELinux;
SELinux关闭方式:
vi /etc/selinux/config
将SELINUX=enforcing改为disabled,也就是关闭SELINUX;(更改此服务,需要重启服务器)
3.以安装lnmp为例
1、停止mysql httpd
2 yum正常
3 关闭selinux 防火墙
配置/etc/selinux/config
4 下载lnmp lnmp.org
06-02.脚本安装包(下)
1.ps aux 查看进程
2.pkill -9 php-fpm 强制结束进程
五.Linux权限管理之基本权限
001.课程概述
01-01.权限对文件和目录作用
1.r:可以查询目录下文件名
2.w:修改目录结构权限
3.x:可以进入目录
002.文件基本权限
02-01.权限的设定
a.修改文件权限方法:(假设文件名aa)
1.chmod u+x aa //给拥有者u增加x权限
2.chmod u+x,g+w aa //给拥有者u增加x权限,所属组增加写权限
3.chmod u-x aa //给拥有者取消x权限
4.chmod u=rwx aa //给拥有者u的权限是rwx
5.chmod u=rwx,g=rw aa //给拥有者u的权限是rwx,给所属组权限是rw
6.chmod a=rw aa //给u,g,o权限都设置为rw
7.chmod 755 aa //aa的权限为rwx r_x r_x
b.文件基本权限****
-rw-r--r-- 第一个-表示文件类型(-文件 d目录 l软链接文件)rw-(u所有者) r--(g所属组) r--(o其他人)
r读 w写 x执行
chmod命令 修改文件权限模式
chmod [选项] 模式 文件名
chmod u+x user.sh 给user用户添加执行权限,只有user才可以执行
chmod g+w,o+w user.sh 给用户组以及其他用户添加写权限
chmod u-x,g-w,o-w user.sh 将刚刚赋予的权限全部删掉
chmod a=rwx user.sh chmod u=rwx,g=rw user.sh 用 = 可以直接赋予权限,用a直接给所有人赋予权限
权限也可以用数字表示:r---4 w---2 x---1
rwxr-xr-x 就可以用755表示
chmod 755 user.sh
再改为普通的文件权限-rw-r--r-- 就可以 chmod 644 user.sh
常用权限:777最高权限 644常用文件权限 755执行权限
02-02.权限的作用
1.权限对文件的作用:
·r:读取文件内容(cat more head tail);
·w:编辑、新增、修改文件内容(vi echo)【但是不包含删除文件】;
·x:可执行;
2.要删除文件需要有上一级文件的写权限。
因为文件的权限对应的是它内部子文件的权限,而非是这个目录的权限。 linux中,一切皆文件,读写也是文件的读写权限。
3.为什么有文件有写权限不代表有删权限?
因为文件名存在目录储存块(block)里(Linux中一切皆文件),文件中的数据存在文件数据储存块里,要删除文件,意味着要删除文件名,而文件名储存位置在更高一级(目录中),所以没有删除权限。要想进行删除操作,必须对目录储存块进行操作
文件夹----》文件----》文件数据
权限对文件的作用
rwx读写执行到底能干嘛呢?
r:读取文件内容(cat/more/head/tail)
w: 编辑、新增、修改文件内容(vi/vim/echo)(echo 内容 >>/> 文件名)
虽然w是写权限,但是不包含删除文件。
02-03.权限对目录的作用
1.权限作用
r:可以查询目录下文件名(ls)
w:具有修改目录结构的权限。如新建文件和目录,删除此目录下的文件和目录,重命名此目录下文件和目录,剪切(touch rm mv cp)
x:可以进入目录(cd)
对文件来讲;最高权限是 x
对目录来讲:最高权限是 w
对目录来讲,只有0 5 7 权限成立,只有进入目录1才可以有执行2,
其他权限没有意义,而且目录的最高权限是w,权限是对下一层内容来说的
2.默认权限
a.文件默认644
b.文件夹默认是744
02-04.其它权限命令
1.修改文件所有者:chown 用户名 文件名
2.修改文件所属组:chgrp 组名 文件名
3.同时改变所有者和所属组:chown 用户名:用户名 文件名
所有者:所属组
4.分配权限核心原则:在最小权限下能够实现要求
003.默认权限
03-01.文件默认权限
1.windows
windows中的文件默认权限全部从上一级继承而来。
2.linux
linux中查看默认权限umask
0022 第一位0特殊权限,默认权限为0022(此为root用户等)
注:其他用户[UID>199]默认权限是0002,在/etc/profile下可以看见

文件的默认权限:
·文件默认不能建立为执行文件,必须手工赋予执行权限;
·所以文件默认权限最大为666;
·默认权限需要换算字母再相减;
·建立文件之后的默认权限,为666减去umask值;

目录的默认权限:
·目录默认权限最大为777
·默认权限需要换算字母再相减;
·建立文件之后的默认权限,为777减去umask值;
·例如:
- 目录默认最大权限为777,umask值等于022
· -rwxrwxrwx 减去 ------w--w- 等于 -rwxr-xr-x

修改umask值
·临时修改:
- umask umask值

·永久修改:
- vi /etc/profile
六.Linux权限管理之特殊权限
001.ACL权限
01-01.简介与开启
(1)用途
ACL是Access Control List的缩写,主要的目的是在提供传统的owner,group,others的read,write,execute权限之外的局部权限设定。
ACL可以针对单个用户,单个文件或目录来进行r,w,x的权限设定,特别适用于需要特殊权限的使用情况。
(2)开启
查看分区ACL权限是否开启:
· dumpe2fs -h /dev/sda5
dumpe2fs命令是查询指定分区详细文件系统信息的命令;
选项:
-h:仅显示超级块中信息,而不显示磁盘块组的详细信息;

1.临时开启分区ACL权限
· mount -o remount,acl / ###重新挂载根分区,并挂在加入ACL权限;

2.永久开启分区ACL权限:
·vi /etc/fstab
··在默认文件系统后加上acl即可
----例如UUID=24f28fc6-717e-4bcd-a5f7-32b959024e26 / ext4 defaults,acl 0 1
·mount -o remount /
----重新挂载文件系统或重启动系统,使修改生效;
01-02.查看与设定
1.getfacl 文件名 //查看acl权限;
2.setfacl 选项 文件名 //设定ACL权限的命令;
选项:
-m:设定ACL权限;
-x:删除指定的ACL权限;
-b:删除所有的ACL权限;
-d:设定默认ACL权限;
-k:删除默认ACL权限;
-R:递归设定ACL权限;
3.为用户设定ACL权限
setfacl -m u:用户名:权限(rwx) 文件名

4.为用户组设定ACL权限
setfacl -m g:组名:权限(rwx) 文件名
01-03.最大权限与删除
最大有效权限mask(使用命令getfacl 文件名显示的结果中倒数第二排会出现mask这个词)mask是用来指定最大有效权限的。
如果我给用户赋予了acl权限,是需要和mask的权限“相与”才能得到用户的真正权限。相与是计算机中的术语,皆真方为真,有假便为假。
(例:某文件所有者为tony,chmod赋予的普通权限为7,而acl赋予tony的权限为5,则acl权限会高于chmod权限)
1.修改mask值的命令 setfacl -m m:rx 文件
2.删除acl权限的命令
setfacl -x u:用户名 文件 (删除指定用户的acl权限)
setfacl -x g:组名 文件 (删除指定用户组的acl权限)
setfacl -b 文件 (删除所有的acl权限)
01-04.默认权限与递归权限
1.mask 指定最大有效权限,如果给用户赋予ACL权限,是需要和mask权限相与才能得到用户真正的权限
修改最大有效权限
setfacl -m m:rx 文件名,使用m:权限格式
setfacl -x u:用户名 文件名 ,删除指定用户的ACL权限
setfacl -x g:组名 文件名,删除指定用户组的ACL权限
尽量少用acl权限,因为可能会权限溢出。
a.默认acl权限:把这个目录下以后所创建的所有文件都赋予某些权限。<br>
setfacl -m d(default的缩写):u:user1 目录名<br>
b.递归权限:在赋予目录权限的同时将权限赋予此文件夹下面的子文件权限<br>
setfacl -m u:user1 -R 目录名
2.权限溢出:由于权限对于目录和文件的作用都不一样,所以对目录赋予权限时可能导致对文件也赋予不该有的权限,比如目录需要执行权限(以便可以进入),
但是不应该给文件赋予执行权限,但是还是给文件赋予了执行权限,这样就权限溢出了。
002.sudo权限
02-01.sudo权限(上)
1.超级用户提供sudo权限给下面的普通用户
命令:
a)在root用户下,visudo,拉到最底行,写上canglaos ALL=(ALL) /sbin/shutdown -r now,赋予普通用户重启命令,写的越详细越好,保存退出。
b)然后在普通用户模式下面,sudo -l ,输入密码,然后sudo /sbin/shutdown -r now,执行命令。
PS:【如果是用户组要赋予权限,则在用户组前面加%号即可】、

2.普通用户可以执行sudo赋予的命令
3.sudo -l 查看可用的sudo的命令
4.普通用户执行超级命令的时候必须要加 sudo 命令的绝对路径
例如 sudo /sbin/shutdown -r now
02-02.sudo权限(下)
1.sudo操作对象是系统命令,与其他修改 文件 的权限的命令不同
user1 ALL=/usr/sbin/useradd #赋予user1添加用户的权限
user1 ALL=/usr/bin/passwd #赋予user1更改密码的权限
user1 ALL=/bin/vi #赋予user1使用vi更改任意文件的权限(包括/etc/shadow阔怕!)
(会造成严重后果, 在运行该权限时,是root身份,甚至能更改root密码)

加强版
user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
可以更改任意字母的用户密码, 用户名不能为空(如果空,则代表更改当前用户密码,而此时身份为root),用户名不能为root
003.不可改变位权限
03-01.不可改变位权限
为了完善SBIT权限的缺陷
1.不可改变位权限:chattr
命令格式 charrt[+-=][选项] 文件名/目录名
+:增加权限
-:删除权限
=:等于某权限
[选项]:
i:将此文件锁定
如果对文件设置i属性,那么不允许对文件进行删除,改名也不能添加和修改数据;
如果对目录设置i属性,那么只能修改目录下文件的数据,但不能建立和删除文件。

a:冻结此文件
如果对文件设置a属性,那么只能在文件中增加数据,但不能删除也不能修改数据;
如果对目录设置a属性,那么只允许在目录中建立和修改文件,但不允许删除。
(添加内容只能用 echo >>输出重定向到文件中;vi不行,因为不能判断是修改还是增删内容)
2.查看文件系统属性:lsattr 选项 文件名
选项
-a 显示所有文件和目录
-d 仅列出目录本身的属性,而不是子文件的
七.Linux中的计划任务
001.课程背景
01-01.课程背景
crontab定时任务工具
工作中的应用:
每分钟:系统运行状态检查
每天凌晨:对过去一天的业务数据进行统计
每个星期:日志文件备份
每个月:数据库进行备份
002.Crontab简介
02-01.Crontab是什么
Crontab是什么?
1.Crontab是一个用于设置周期性执行任务的工具;
2.周期性执行的任务我们称为Cron Job;
3.周期性执行的任务列表我们称为Cron Table。
4.Crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。
让重复的任务自动化执行,提高大家工作效率。
003.Crontab实践
03-01.Crontab时间内容简介
1.远程工具putty
2.安装并检查Corntab服务
3.Crontab组成
4.Crontab日志
5.Crontab常见错误
03-02.相关工具putty介绍
putty工具
1)一个免费的易用的SSH连接工具
2)http://www.putty.org/
03-03.安装并检查Crontab服务
1.检查cron服务:
1)检查Crontab工具是否安装:crontab -l;
2)检查crond服务是否启动:service crond status
2.安装cron:
1)yum install vixie-cron;
2)yum install crontabs
注1:yum在线安装(网络源安装,不是光盘安装(不全))
注2:安装成功后,①crontab -e进入类似vim编辑器的界面,Esc—>:wq保存退出即可
②再用crontab -l查看,不报错即安装成功。
③再启动service crond start服务。
④最后可通过service crond status查看crond服务的状态
03-04.案例实现
1.crontab -e ##建立新的cron job
2.crontab -l ##查看cron job
3.tail -f 不断刷新显示目标文件的最后部分到标准输出(动态刷新,ctrl+c退出)
4.tail -3 显示最后三行
5.栗子
eg1: */1 * * * * date>> /tmp/log.txt #每分钟打印当前时间到一个日志文件中
03-05.Crontab的基本组成
1.crond 系统服务
2.配置文件
3.配置工具crontab
03-06.Crontab的配置文件格式
* * * * * commad
| | | | |——————————>星期0~7
| | | |————————————>月份1~12
| | |——————————————>日期1~31
| |————————————————>小时0~23
|——————————————————>分钟0~59
1.*表示任何时候都匹配
可以用“A,B,C”表示A或B或C时执行命令
可以用A-B 表示A到B之间时执行命令
可以用*/A 表示每A分钟【小时等】执行一次命令
2.栗子
eg1.每晚的21:30重启apache
30 21 * * * service httpd restart

eg2.每月1,10,22日的4:45重启apache
45 4 1,10,22 * * service httpd restart

eg3.每月1-10日的4:45重启apache
45 4 1-10 * * service httpd restart

eg4.每隔两分钟重启apache
*/2 * * * * service httpd restart
1-59/2 * * * * service httpd restart(奇数分钟重启)

eg5.每晚11-早上7点之间,每隔一个小时重启apache
* 23-7/1 * * * service httpd restart

eg6.每天18:00-23:00之间每隔30分钟重启apache
0,30 18-23 * * * service httpd restart
0-59/30 18-23 * * * service httpd restart
03-07.Crontab工具的使用
crontab -help //查看crontab命令帮助
crontab -e -u user1 //为用户user1创建crontab命令
crontab -l -u user1 //查看用户user1的crontab命令
tail -f /var/log/cron //查看log文件
03-08.Crontab的日志
/var/log/cron 保存着所有的crontab的操作
/var/spool/mail/ 下也会以邮件的方式发送日志信息
004.Crontab常见错误
04-01.Crontab常见错误之环境变量
crontab常见错误:
1、环境变量:不可引用环境变量
2、命令行双引号中使用%时,未加反斜线
3、第三和第五个域之间执行的是“或”操作
4、分钟设置误用
04-02.Crontab常见错误之命令操作
1、test 表达式 测试后面的表达式是否真实,但必须加空格(如果不加空格,那么该命令恒为正确的)
例如: test 1 = 0 如果结果是0 ,那么是正确的(与C语言相反)
2.通过echo $?来查看上一次的执行结果。
2、date +%w 这个是显示今天是星期几
3、需要注意的是在crontab文件中,%需要进行转义
04-03.Crontab常见错误之分钟设置误用
分钟设置误用
两小时运行一次date命令
错误:
* 0,2,4,6,8,10,12,14,16,18,20,22 * * * date
正确:
0 */2 * * * date
04-04.Crontab常见错误之总和案例解析
1.sleep 数字s 表示后面的程序等待数秒钟。
2.一行命令可以用分号分割
eg:执行时间缩短到秒级,crontab两条命令的比较
*/1 * * * * date >> /tmp/date.log
*/1 * * * * sleep 30s;date >> /tmp/date
3.crontab最小时间是1分钟,控制1分钟执行多次
本应该是同时执行,但第二条被推迟了30s执行,效果就是1分钟执行了2次
*/1 * * * * date>>/root/test/half.log
*/1 * * * * sleep 30s;date>>/root/test/half.log
八.Linux服务管理
001.简介与分类
01-01.课程简介与系统运行级别
1.系统默认级别的配置文件:
vim /etc/inittab
最后一行的id:5:initdefault:
显示的当前的开机启动的运行级别:运行级别为5,也就是图形界面
2.LINUX 有7个运行级别:0-6
0:关机
1:单用户
2:不完整的命令行
3:命令行
4:系统保留
5:图形化
6:重启

运行级别命令:
runlevel #查看运行级别命令
init 运行级别 #修改运行级别命令
系统默认运行级别的修改在/etc/inittab文件下
id:3:initdefault ##修改成哪个数字,系统开机后直接进入哪个运行级别
注:不能设置成0和6,否则,系统无法进入
01-02.服务分类
查询已安装的服务
1.RPM包安装的服务
chkconfig --list
#查看服务自启动状态,可以看到所有RPM包安装的服务
yum -y install xinetd a安装xinetd的服务
xinetd的服务越来越少,常规服务只剩rsync ,作用远程同步 支持本地复制,或者与其他SSH、rsync主机同步。也就是网络备份

2.源码包安装的服务
查看服务安装的位置,一般是/usr/local下
01-03.启动与自启动
1.服务启动:
在当前系统中让服务运行,并提供功能
2.服务自启动:
让服务在系统开机或重启之后,随着系统的启动而自动启动服务
01-04.查询已安装的服务
1.RPM安装服务和源码包安装服务的区别:就是安装位置不同
>源码包安装在知道位置,一般是/usr/local
>RPM包安装在默认位置中
01-05.服务与端口
1.网络层--->传输层--->运用层
实际干的事如下
具体运用要传送数据--->告诉传输层用什么形式传送数据---->通过ip寻址----->找到地址则开始传输数据(就是传输层干的活,分tcp和udp)---->把数据传给某个具体的运用(通过端口来传递)
注:传输层分tcp面向连接协议,udp用户数据报协议,说白就是一个要先建立连接在进行传送,然后还要维护该连接;一个拿来直接扔出去,不建立连接

查看已安装服务: chkconfig --list(启动自启动)
查看已启动服务: netstat -tulnp(进程号)
查看所有服务情况:netstat -an
2.查询系统中开启的服务 netstat -tlunp
t列出tcp数据
u列出 udp数据
l正在监听的网络服务(不包含已经连接的网络服务)
n用端口号来显示
p pid
002.RPM包服务管理
02-01.独立的服务管理1
1./usr/目录是Unix System Resource,即Unix系统资源的缩写
2.服务的管理:
/usr/local(linux常用的安装位置)
RPM包安装默认位置
/etc/init.d/:启动脚本位置
/etc/sysconfig/:初始化环境配置文件位置
/etc/: 配置文件位置
/var/lib/:服务产生的数据放在这里
/var/log/:日志
02-02.独立的服务管理2
独立服务的自启动
①chkconfig [--level 运行级别] [独立服务名] [onoff]
chkconfig --level 2345 httpd on
#使得apache服务以后开机自启动,但现在有没有开启不确定
chkconfig httpd off
#关闭apache服务的开机自启动

②修改/etc/rc.d/rc.local文件
加入:/etc/init.d/httpd start使得apache服务开机启动(推荐这种方法)

③使用ntsysv命令
注:1,3本质为同一种方法 2为另一种方法 为防止两次自启动选其一
02-03.基于xinetd服务的管理
1.安装xinetd
yum -y install xinetd
2.xinetd服务的启动
- 可以先查看rsync的端口号 grep rsync /etc/services
- vi /etc/xinetd.d/这里拥有所有基于xinetd的服务都在这个文件中
把文件中的disable改成这个disable(不能)=no
-重启xinetd服务:service xinetd restart
3.xinetf服务的自启动
a.chkconfig rsync on ##xinetd服务自启动
b.ntsysv
注:xinetd自启动=启动 所有2/3操作一项即可
003.源码包服务管理
03-01.源码包服务管理
1.源码包安装服务的启动
使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。不过源码包的安装说明有启动脚本的方法
比如/usr/local/apache2/bin/apachectl start

2.源码包服务的自启动
vi /etc/rc.d/rc.local加入下面这行话:
/usr/local/apache2/bin/apachectl start(标准启动命令)

3.让源码包服务被服务管理命令识别
a.--被servic命令管理启动,可以做软连接ln-s,或者拷贝apache源码包启动文件
ln -s /usr/local/apache2/bin/apachectl /etc/rc.d/init.d/apache
b.--让源码包服务被chkconfig自启动,如图
【此前,要先查看ls /etc/rc3.d文件下,即运行级别3下的启动顺序和关闭顺序】
在/etc/rc.d/init.d/apache文件下添加两句
#chkconfig:35 86 76 //后面两个数字是启动顺序和关闭顺序,不能与rc3.d下的重复
#description:source package apache //任意说明
然后chkconfig --add apachectl就可以了
004.课程总结
04-01.服务管理总结
1.http://img.mukewang.com/5791b64e0001c95a12800720.jpg
九.Linux系统管理
001.进程管理
01-01.进程管理的作用
1.判断服务器健康状态;
2.查看系统中所有进程;
3.杀死进程。
01-02.进程的查看PS命令
1.ps aux
2.ps -le(可以查看系统进程的优先级)
3.pstree -p 查看进程PID,pstree -u查看所属用户
4.logout退出
5.start是启动时间,TIME是当前的进程占用cpu的时间,(耗费资源)
6.stat是进程的状态,绝大多数是S,是sleep休眠状态,R是运行状态,s是包含子进程,l是后台执行。
01-03.进程的查看top命令
1.查看系统健康状态
主要重要的是平均负载,CPU空闲率,内存的空闲
buffer 缓冲 加速写入
cashed 缓存 加速读出
Swap(交换分区),类似于Windows的虚拟内存,就是当内存不足的时候,把一部分硬盘空间虚拟成内存使用,从而解决内存容量不足的情况。

2.top(默认3s刷新一次)
top -d 1 1秒刷新
top -b -n 1 > /root/top.log 写入日志
3.top命令运行后交互命令
?或h 帮助文档
P :CPU使用率排序
M :内存使用率排序
N :PID排序
q :退出
01-04.杀死进程
①kill -l 查看可用进程信号
常用信号:1 SIGHUP #重新读取配置文件,但是不会清除出登录用户,平滑重启(#kill -HUP/-1 1523)
9 SIGKILL #强制终止(#kill -9 2236)
②killall httpd ; killall -i httpd #i交互,即每个都问一次(按照进程名杀死进程)
③pkill -9 -t pts/1 #t按照终端号TTY杀死进程(-9和-t不能写反)
④ #w 查看在线用户
⑤只有root能剔除在线用户
01-05.修改进程优先级
ps -le 下可以看到
PRI代表Priority, NI代表Nice.这两个值都是优先级,数字越小代表进程优先级越高
1. nice 命令
nice [选项] 命令
#nice命令可以给 【新执行的命令】 直接赋予NI值,但不能修改已经存在进程的NI值
[选项]:
-n NI值: 给命令赋予NI值
例子:nice -n -5 service httpd start

2.renice 命令
renice [优先级] PID
#renice命令是修改 【已经存在进程】 的NI值的命令
例子:renice -10 1525
002.工作管理
02-01.工作管理简介
1. 把linux的程序放到后台去管理:jobs;为什么要把进程放入后台运行:比如说mysql就需要放入后台运行:关于工 作管理需要注意的事项:
1.当前的登录终端,只能管理当前终端的工作,而不能管理其他登录终端的工作
2.放入后台的命令必须可以持续运行一段时间,这样我们才能捕捉和操作这个工作
3.放入后台执行的命令不能和前台用户有交互或需要前台输入,否则放入后台只能暂停,而不能执行
02-02.工作管理方法
1.把进程放入后台
①tar -zcf etc.tar.gz /etc & #在命令后加个&,把命令放在后台执行
②top #ctrl+z放在后台暂停
2.查看后台的工作
jobs [-l]
-l:显示工作的PID
+代表最后一个放入的进程
-代表倒二个放入的进程
3.fg %工作号 #把后台暂停的工作回复到前台执行
4.bg %工作号 #把后台暂停的工作回复到后台执行
注1:%可以省略,但要注意工作号和PID的区别
注2:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
top、vi之类放在后台也是暂停的
因为一个需要用户来查看进程健康状态,一个需要用户写入
压缩、解压缩、cp、mv、find之类可以放在后台
所以,想要让这个命令在后台运行,首先,不能与用户有交互。其次,它要运行一段时间
02-03.后台命令脱离终端
后台命令脱离登录终端执行的方法,即使关掉终端,也继续运行
1.把需要后台执行的命令加入/etc/rc.local文件。开机自动运行
2.使用系统定时任务,让系统在指定的时间执行某个后台命令
3.使用nohup命令
nohup命令:
语法:nohup [命令] &
绝大多数的程序,除了像mysql这样的服务。绝大多数的服务,当你把终端关闭后,它正在运行的后台程序全部都会终止,原因是,当你关闭终端的时候,
系统会默认发出sighup这个信号把你正在运行的程序终止掉。所以要让后台程序脱离终端使用,就必须使用nohup命令。第一种方法更简单。
003.系统资源查看
03-01.系统资源查看
1.查看CPU命令 cat /proc/cpuinfo
2.uptime命令 #显示系统的启动时间和平均负载,即top第一行
3.vmstat命令监控系统资源
vmstat [刷新延时 刷新次数]
eg: vmstat 1 3
4.uname
-a:查看所有信息
-r:查看内核版本
-s:查看内核名称
>. file /bin/ls (判断系统位数)
>. lsb_release -a (查看发行版本)
>. lsof [选项] 列出进程打开或使用的文件信息
- lsof | more #查看系统所有进程调用的文件
- lsof /sbin/init #查看某个文件被那个进程调用
- lsof -c httpd #查看httpd 进程调用了哪些文件
- lsof -u root #查看root用户调用了哪些文件名称
004.系统定时任务
04-01.at一次执行
1.确定at安装chkconfig --list |grep atd
启动at服务:service atd restart
2.atf访问控制
>如果系统中有/etc/at.allow文件(白名单),那么只有在此名单下的用户可以使用at命令;
>如果系统中没有/etc/at.allow文件,只有/etc/at.deny文件(黑名单),那么在此名单下的用户不能使用at命令【对root不起作用】
>如果系统这两个文件都不存在,那么只有root用户可以使用at命令
3.at命令
4.例子1
at now +2 minutes #在两分钟后执行(内容在下一行写,必须写绝对路径)
at> /root/hello.sh #执行hello.sh脚本,写错可以用ctrl+删除键删除。写完后enter,按ctrl+d保存退出
5.atq #查询当前服务器上的at工作
atq [工作号] #删除指定的at任务
6.[root@localhost ~]# at now +5 minutes
at> /root/hello.sh #使用回车然后ctrl+d保存
at> <EOT>
job 6 at 2016-10-17 18:24

[root@localhost ~]# atq #查看有哪些at任务在执行
6 2016-10-17 18:24 a root
[root@localhost ~]# at -c 6 #通过工作号查询具体的at工作
#!/bin/sh
# atrun uid=0 gid=0
# mail root 0
umask 22
HOSTNAME=localhost.localdomain; export HOSTNAME
SSH_CLIENT=192.168.0.165\ 12147\ 22; export SSH_CLIENT
SSH_TTY=/dev/pts/0; export SSH_TTY
USER=root; export USER
...
${SHELL:-/bin/sh} << 'marcinDELIMITER3cae07a6'
/root/hello.sh

[root@localhost ~]# atrm 6 #删除at任务


[root@localhost ~]# at 21:30 2016-11-2 #在指定的时间重启系统
at> /bin/sync #将内存数据同步到硬盘
at> /sbin/shutdown -r now
04-02.crontab循环定时任务(上)
1.crontab循环定时任务
>.访问控制与at类似
>.crontab命令
* crontab [选项]
*
* -e : 编辑crontab定时任务
* -I : 查询crontab任务
* -r : 删除当前用户所有的crontab任务

* 格式为*****执行的任务
*
* 第一个*表示一个小时的第几分钟 0-59
* 第二个*表示一天当中的第几个小时 0-23
* 第三个*表示一月当中的第几天 1-31
* 第四个*表示一年中的第几个月 1-12
* 第五个* 表示一周中的星期几 0-7(0与7代表周日)

* 特殊符号意义
*
* * : 代表任何时间,如第一个* 代表每分钟执行一次
* , : 代表不连续的时间,如:0 8,12,16 * * *代表每天的8点0分/12点0分/16点0分执行
* - : 代表连续时间, "0 5 * * * 1-6"代表每周一到周六5点执行
* */n : 代表每个多久执行一次,"*/10 * * * *"表示每10钟执行一次
>注意

* 星期几与几号最好不要连用
* 六个选项都不能为空,必须填写
* 最小有效时间为分钟,最大有效时间为月
* 定时任务中的命令最好使用绝对路径
04-03.系统的crontab设置
crontab -e:用vi编辑器编写命令
格式: * * * * * command
1、crontab五个星号的意义,其中第三个和四五尽量不要一起使用,如果一起使用则是或的关系
2、crontab后面的命令要用绝对路径(脚本中的命令也尽量要用绝对路径)

要想不锁定用户执行,需要写入 /etc/crontab文件内,比上文多一个用户的option
* * * * * user-name command to be executed

系统定时任务:
1. 把需要定时的执行的脚本复制到/etc/cron.{daily.weekly...}中的任意一个(推荐)
2.直接修改 /etc/crontab配置文件
04-04.anacron配置及总结
1.anacron是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行
2.anacron 会检测/etc/cron.{daily.weekly...}中的文件是否在系统关机的过程中错过的定时任务
/var/spool/anacron/con.{daily.weekly…}内存最后一次crontab的时间,如果当前时间到记录的时间差大于指定的差值,证明有命令漏执行
十.shell基础
001.shell编程之变量
01-01.shell概述
1. 不管是PHP ,还是JAVA ,它是用来编写应用程序的,或是网站; JAVA主要是实现服务端程序。
而shel编程,它是一个脚本语言。它不需要执行编译过程之后再执行;它是编译过程放在执行过程中,所以,执行时间要慢,
2. SHELL,主要是帮助管理员,简化管理操作。
01-02.Bash变量与变量分类
shell中变量类型只有一种类型,就是字符串类型,a=123,a是字符串类型,值是"123",而不是整型123
什么是变量与变量分类
1.用户自定义变量 局部变量
>变量自定义的
2.环境变量 全局变量
>这种变量中主要保存的是和系统操作环境相关的数据,变量可以自定义,但是对系统生效的环境变量名
和变量作用是固定的
3.位置参数变量
>这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
4.预定义变量
>是Bash中一景定义好的变量,变量名不能自定义,变量作用也是固定的
按存储数据分类
字符串型
整形
浮点型
日期型
变量是计算机内存的单元
e.g:
x=5 or x=10
变量名必须以字母或下划线开头,名字中间只能由字幕、数字和下划线组成
变量名的长度不得超过255个字符
变量名在有效的范围内必须是唯一的
在Bash中,变量的默认类型都是字符串类型的 这点尤其要注意
01-03.用户自定义变量
set 查看系统中所有已经定义的变量 赋值变量的单引号直接输出。双引号会把解析他
unset 删除变量 unset x 不是unset $x
变量两边不能加空格
echo $a,如果变量a为空或者变量不存在,则会打印空行,可以先在前面使用set -u再查询。如果这个变量没有设置,则会报错。不会打印空行
shell变量叠加,变量都是字符串类型,x=123,x="$x"456,x=123456;或者x=${x}456;
01-04.bash环境变量
shell变量的分类,用户变量为局部变量,在当前shell中有效;环境变量为全局变量,在当前shell和其子shell中有效,
set 查看所有变量
env 查看环境变量

对系统生效的环境变量名和作用都是固定的
export 变量名=变量值 就是定义环境变量
常用的环境变量
HOSTNAME:主机名
SHELL:当前的shell
TERM:终端环境
HISTSIZE:历史命令条数
SSH_CLIENT:当前操作环境是用ssh连接的,这里记录客户端的ip
SSH_TTY:ssh连接的终端时pts/1
USER:当前登录的用户
PATH:系统搜索的常用命令路径
变量叠加PATH="$PATH":/root -- 重启会失效
通过修改文件

了解PS1的环境变量 命令提示符的设置
\d 显示日期 格式"星期 月 日"
\H 显示完成的主机名 默认:localhost.localdomain
\t 显示24小时制时间 格式 "HH:MM:SS"
\A 显示24小时制时间 格式 "HH:MM"
\u 显示当前用户名
\w 显示当前所在目录的完整名称
\W 显示当前所在目录的最后一个目录
\$ 提示符,root用户显示的提示符是"#" 普通用户显示的"$"
默认的PS1是这样的
[\u@\h \W]\$ echo $PS1 比如会输出[root@localhost ~]#


PS2 环境变量 如果有的命令很长 这时你可以在没敲完的命令后面 加 \ 他会等待你继续敲入剩下的命令,比如:
ls \ 换行输入命令
01-05.bash语系变量
shell编程之变量-语系变量
语系,语言,国际化

locale #查询当前系统语言
-LANG :定义系统主语系的变量
-LC_ALL:定义整体语系的变量

e.g:
>locale
>echo $LANG
>echo $LC_ALL

>local -a | more #所有语系环境

查询系统默认的语系环境

>cat /etc/sysconfig/i18n

LANG="zh_CN.UTF-8"
如要支持中文 需要安装中文字体和中文语系

如果使用第三方远程登录,则正确设置语系,就能显示中文

如果使用纯字符洁面 必须使用第三方插件

01-06.位置参数变量
$n #n为数字,$0代表命令 本身,$1-$9是传入的第一到第九个参数,10以上用大括号${10]
$* #这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体,(循环一遍)
$@ #这个变量也代表命令行中所有的参数,不过$@把每个参数区别对待(输入几个参数循环几遍)
$# #这个变量代表命令行中所有参数的个数(输入几个参数 输出统计)
01-07.预定义变量
shell编程之变量-预定义变量
$? 最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令的正确执行;如果这个变量的值为非0, 则证书上一个命令执行不正确。
$$ 当前进程的进程号(PID)
$! 后台运行的最后一个进程的进程号(PID)
>ls && grep 'l'

> echo $$
1499
>ps aux | grep 1499

2.接收键盘输入
read [选项][变量名]
-选项
-p "提示信息" :在等待read输入时,输出提示信息
-t 秒数:read命令会一直等待用户输入,指定等待时间
-n 字符数:read命令只接受指定的字符数
-s:隐藏输入的数据,适用于机密信息的输入
002.shell编程之运算符
01-01.概述及declare命令
1.declare 声明变量类型
declare [+/-][选项] 变量名
-: 给变量设定类型属性
+:取消变量的类型属性
-a:将变量声明为数组型
-i:将变量声明为整数型(integer)
-x:将变量声明为环境变量
-r:将变量声明为只读变量
-p:显示指定变量的被声明的类型
比如:
aa=11
bb=22
declare -i cc=$aa+$bb
echo $cc
比如数组:
movie[0]=aa
movie[1]=bb
declare -a movie[2]=cc
echo ${movie[*]} #查看数组所有元素
01-02.shell编程之数值运算方法
1.运算方法
1、用expr和let
aa=11
bb=22
dd=$(expr $aa + $bb)
或let dd=$aa+$bb
2、用$(())或$[],一般用$(()),因为如果用$[]容易搞混
aa=11
bb=22
ff=$(($aa+$bb))
gg=$[$aa+$bb]
01-03.shell编程之变量测试
1.变量测试:
用于变量推测与预算,仅限于shell语言
比如:
x=${y-2} # 进行测试
echo $x # 输出2 因为变量y不存在
2.变量的测试符,只做了解,需要用到的时候在学。
003.shell编程之环境变量配置文件

004.shell编程之正则表达式

005.shell编程之条件判断与流程控制

十一.shell实战

转载于:https://www.cnblogs.com/g710jiablue/p/6229202.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值