安装
在虚拟机中选择Other Linux 2.6 xkernel //2.6的内核,支持centOS 5.5
linux分区
最多分三个主分区,有一个扩展分区,从扩展分区中分逻辑分区
分区最多支持4个主分区,即使有剩余空间也无法再分区,所以最多分三个主分区。
第一个主分区:/dev/sda1 (服务器中第一块scsi硬盘中的第一个主分区)
#s 指的scsi硬盘 [#h ide硬盘]
#d disk磁盘
#a 服务器中的第一块磁盘
#1 第一块磁盘中的第一个主分区
//扩展
/dev/hdb4 服务器中第二块ide硬盘中的第四个主分区
/dev/sda5 服务器中第一块scsi硬盘中第一个逻辑分区
三分区分法:
/dev/sda1 /boot #放启动文件 #1G即可
/dev/sda2 / #根目录 #挂载点,文件系统选择ext3
swap分区 #swap分区,虚拟内存系统(内存不足时充当内存扩展)#物理内存1x-2x之间
/boot分区可以不用分,可以直接挂载在根目录分区
根和/swap分区必须要分
lvm逻辑卷管理(linux默认分区法)
/dev/vg00/lv00 / 根分区 80G #lv00是逻辑卷,逻辑卷分区可以自动扩容
/dev/vg00/lv01/ #swap分区
/dev/sda /boot分区
VMware 版本选择(跟所装的linux内核向对应)
Red Hat Enterprise Linux 5
Other Linux2.6.x kernel
网卡配置
不选择DHCP,因为虚拟环境中没有DHCP服务器
IP地址 子网掩码
192.168.100.1 255.255.255.0
软件安装选择
选自定义软件包安装customer
development(开发工具) development tools(把其中的开发工具全部选择)
IP地址与子网掩码的关系
-----与运算------
192.168.100.1
11000000 10101000 1001000 00000001
255.255.255.0
11111111 11111111 1111111 00000000
-------------------------
11000000 10101000 1100100 00000000
结果:192.168.100.0 网段号
linux启动安装过程中的配置:
1、iptables防火墙
2、selinux防火墙
3、不要创建普通用户
进入系统以后:
==============================================
1、修改ip: 安装前配置的ip是无法生效的,修改网卡的配置文件,把onboot=yes,设置计算机每次重启都读取这个文件,这样ip才能生效
vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO(启动协议)=static(手动配置)
IPADDR=192.168.100.1
NETMASK=255.255.255.0
ONBOOT=yes
配置好后要让配置文件生效,方法:
1)、init6 #计算机重启的命令
2)、service network restart #重启服务
2、设置计算机每次启动是从三级别启动:
原因:常用启动级别3级别(从字符界面启动),5级别(从图形界面启动),蓝色界面按下a,输入级别,再输入个a,继续启动
命令:
vi /etc/inittab
id:3:initdefault
:wq
3、history -c #清空历史命令
4、init 0 #把计算机关机
5、做快照
==========================================
让linux和win进行通信,windows远程登录linux系统:
1、 让两台计算机网卡设置同一个模式,把两台计算机连到同一个网段,同时连到同一个交换机,方法:两 块网卡模式必须相同
2、 把ip与子网掩码配置到同一个网段
测试两台计算机的连通性:
1、ping192.168.100.1
reply from ... ... ttl=64 #连通状态
request timed out #无连通状态
远程连接软件
1、putty #远程登录linux
2、winscp #远程传输文件
snippets(vim工具)
linux查看ip工具ifconfig eth0
第二讲Linux 命令
网络配置注意事项:
1、不要把两块网卡的ip设置到同一个网段
2、只能有一块网卡有网关
Pc属于路由设备,所以它也遵守上面的规则
Linux排错:
1、系统日志->/var/log/messages
2、应用程序日志->var/log/httpd/access.log
3、通讯日志->tcpdump -i eth0 (从网卡eth0上抓取数据) #tcp/ip协议
Linux用户:
1、root 超级用户
2、系统用户 应用程序的进程执行者
3、普通用户 后期用来登陆测试的用户
Linux根目录:
1、bin
所有用户都能执行的指令
2、dev
底层的物理设备都会显示在这儿,如果使用的话需要挂载,即映射
计算机里底层的硬件设备标示,硬件设备只有映射后才能使用
将dev下的hdc(光驱)映射到media目录下,然后进行访问
mount /dev/hdc /media/
df命令,查看linux 中的映射表
3、home
普通用户的家目录,宿主目录
比如/home/user1,普通用户user1的家目录
4、sbin
只有root用户才能执行的命令
5、proc
内存镜像文件(不要直接存储与修改)
6、var
日志所在的目录
7、boot
系统内核和镜像文件所在目录(启动文件)
8、etc
配置文件所在的地方
9、lib
库文件所在的地方(类似win中的dll文件所在处)
10、media
挂载光盘的空目录
11、mnt
测试空目录
12、root
root用户的家目录
13、usr
/usr/bin 所有用户都能执行的指令
/usr/sbin root用户才能执行的指令
14、selinux linux防火墙
常用命令
! 后跟命令名,可以查看最近调用该命令的详细信息
文件权限(用户与用户组):
rwxr-xr-x root root other (对应了3类人群的3种权限)
用户 组 组里除了root外的其他用户
7 5 5
chown user1:user1 file #该变所有者和所属组(:前面为所有者,:后面为所属组)
chown root file
chown :root file
创建的目录普遍比文件要多个x权限,因为目录需要可执行,才能进入查看
umask #权限掩码(最好不要修改)
#目录->755
#文件->644
rwx 读、写、执行
rwx 111 421=>7
r-x 101 401=>5
rw- 110 420=>6
r-- 100 4
权限人群:
user 所有者
group 所属组
other 其他人
all 所有人
chmod 755 dir #对文件或者目录设置权限
chmod 644 file
chmod a+x file #给所有人加一个执行权限
chmod a-x file #给所有人减一个执行权限
chmod g+x file #对所属组
bc
计算器
ctrl+c
强制退出当前命令行
ifconfig -a 能查看所有网卡信息,包括隐藏网卡,linux中禁用网卡是将其隐藏
ifconfig eth0 douw/up(关闭开启网卡)
ls
查看当前目录下的文件
-l 查看文件的属性
-a 查看目录下所有文件,包括隐藏文件(.或..开头的文件)
-h 查看文件的大小,换算单位
-d 查看目录属性
-R 递归查看
ls -lSh 查看当前目录下的文件,从大到小排列(S从大到小倒序排序,s从小到大排序)
man
查看命令的帮助手册
ls --help
查看ls的参数(简短的帮助)
ls -h
cd 切换目录
cd - 切换至最近切换过的目录
特殊目录
. 当前目录
.. 上级目录
~ 回到当前用户的家目录(cd同样可以快速回到当期用户家目录)
文件操作
touch file #创建一个文件
touch file{1..100} #{}集合操作符 使用..指定范围
rm -rf #删除一个文件
rm -rf * #删除当前目录下所有的文件(无法删除隐藏文件)
!rm #调用历史中最近一次以rm开头的指令
cp file /mnt/ #复制一个文件到测试目录mnt/下
mv file /mnt/ #移动一个文件
cat file #查看文件内容
cat file |wc -l #查看文件有多少行
cat file |wc -c #查看有多少字符
more file #查看并分页显示
ln -s file /root/linkfile.exe #创建file的快捷方式(s指源)
创建一个20M的文件
dd if=/dev/zero of=file1 bs=1M count=20(zero是一个设备,具有无限大的空间)
目录操作
mkdir test #创建一个目录
mkdir -p test2/test3/test4 #递归创建目录
tree test2 #递归查看文件和目录(树形结构显示)
rm -rf test #删除一个目录
cp test /mnt #复制test目录到mnt下(无法成功)
cp -r test /mnt/ #递归的复制
cp -r test/ /mnt/ #将test下所有文件拷贝到mnt下,包括隐藏文件(cp -r test/*是无法拷贝隐 藏文件的)
mv test /mnt #移动test目录到mnt下
rsync -a test /mnt #将test拷贝到/mnt下
rsync -a test/ /mnt #将test下所有文件拷贝到/mnt下
rsync的功能比cp功能更强大,能够迁移整个操作系统
查询搜索操作
which #一般用来搜索执行程序,命令
which mv
which touch
which ls
find #有目的的查找特定文件
find /etc/ -namehttpd.conf
find /etc/ -namehttpd* 查找以httpd开头的文件
find /etc/ -name*conf 查找以conf结尾的文件
find /etc -nameinittab -exec ls -l {} \;使用大括号进行向后引用,将查找出来的结果传递给后续命令(有些命令必须在后面跟文件名,比如rm -rf)
find ./ -useruser1 -exec rm -rf {} \; 把从root下查找到的所有者是user1的文件删除掉
grep #从文件中搜索包含linux的行
cat file |grep"php" 搜索file中包含php的行
cat file |grep -i"very" -i是忽略大小写搜索
cat/etc/passwd|grep -E 使用正则进行匹配
压缩包
创建gz压缩文件
tar czffile.tar.gz file1 (c创建,zf代表gz结尾的压缩文件) 压缩
tar xzffile.tar.gz 解压(把c换成x)
tar cjffile.tar.bz2 file 创建
tar xjffile.tar.bz2 解压
zip services.zip/etc/services 压缩zip文件
zip -r test.zip/test 压缩zip目录
unzip test.zip 解压
vim编辑器的使用
vim是vi的增强版本,比如语法和函数高亮显示等
d$从光标处删除到行结尾
d^从光标处删除到行开头
linux共有7个终端,第七个终端是图形界面终端
当一个终端崩溃时,可以使用alt+(F1-F6)启动6个字符界面
ctrl+s暂停一个终端
ctrl+q继续一个终端
linux启动过程:
BIOS->mbr->grub->linux内核->init->/etc/inittab->3->/etc/rc.d/rc.sysinit->时钟,主机名,网卡,分区挂载->/etc/rc.d/rc3.d/->启动一系统进程->进入登录窗口->登录
1.bios
2.mbr
3./etc/grub.conf
#/boot/grub/grub.conf
#linux系统内核文件
#linux系统内核文件在/boot/vmlinuz-*
4./boot/initrd*
#系统镜像文件,把init启动起来
4.init
#是计算机启动的第一个进程,后期的工作都由它来完成,它的pid是1
5./etc/inittab
#id:3:initdefault
6./etc/rc.d/rc.sysinit
#时钟
#主机名
#分区挂载
7./etc/fstab
#/dev/hdc /media iso9660 defaults 0 0
#光盘自动挂载
#检测/etc/fstab新添加的未被挂载的分区:mount-a
8.查看进程
ps -ef
9.查看端口
netstat -tunpl |grep :80
10.把3级别下的httpd改成以s开头
chkconfig httpd on
#2,3,4,5级别下都启动
chkconfig --level 3 httpd on
#apache只在3级别下为s开头,随机启动
11.查看进程在不同的级别下分别为on或off
chkconfig --list httpd
12.linux中系统级别
0 关机
1 单用户模式,比如:破解密码
2 字符界面,但是nfs这些网络设置
3 字符界面
4 未被使用
5 图形界面
6 重启
附加知识:
1.nc
nc -l 20000
#开启20000端口
nc localhost 20000
#连接localhost这台计算机的20000端口
2.sendmail
#本系统的默认邮件服务器
#chkconfig sendmail off #2,3,4,5为off
#service sendmail stop #关闭sendmail邮件服务
#不用邮件服务器的就关闭它
3.查看本系统邮件
创建一个20000端口
nc -l 20000
穿过20000端口连接计算机nc localhost 20000
软件包的安装
第4课2012年5月28日
Linux软件包安装:
分为两部分:1、rpm包安装,2、源码包安装
源代码的安装方法所有系统都能支持,rpm包偏向于红帽和centos系统
查看进程命令
pstree |grep httpd
源码包的安装:
1、../configure #生成配置文件(生成Makefile文件,该文件是配置地图)
2、make #编译,通过gcc把c代码编译成执行程序
3、make install #安装,把执行程序拷贝到相应的目录下
rpm(red hat project manager)包安装(如何安装、卸载)
rpm -vih httpd-2.2.3-43.el5.centos.i386.rpm
rpm制作过程:
1、制作Makefile文件
2、编译
3、封装到rpm包中,等待用户去安装这个rpm包
rpm包安装
1、rpm -vih httpd-2.2.3-43.el5.centos.i386.rpm
#-i install
#-v 可视化安装
#-h 百分比进度条
#如果rpm有依赖性的话
--nodeps 截断依赖性
--force 强制安装
2、rpm -qa
#查看系统中已经安装了的所有rpm软件包
rpm -qa |grep vsftpd*
#查看系统中是否已经安装vsftpd rpm包
3、rpm -qlhttp-i386
#查看某安装包安装文件所在路径
主要查看3个文件:1)、配置文件
2)、执行程序(一般是二进制文件,启动该文件需要考虑pid分配,端口号等许多问题)
3)、服务脚本(控制执行程序的参数)
4、/etc/rc.d/init.d 去该文件下找启动配置文件
vi vsftpd 通过vi打开该配置文件
vi /etc/vsftpd.conf
./vsftpd start 启动vsftpd程序
5、反查看
rpm -qf vsftpd.conf
#查看某文件是由哪个软件包安装的
6、卸载
rpm -e vsftpd-2.0.5-16.e15_4.1
#包名来自=>rpm -qa |grephttpd
卸载回出现依赖性问题:
#rpm -e vsftpd-2.0.5-16.e15_4.1 --nodeps
rpm依赖性:
1、安装A包,首先先得安装B包,安装B包首先先得安装C包。
使用yum源来安装(解决了rpm安装的依赖性):
(1)、准备光盘挂载
mount /dev/hdc /media
(2)、光盘重启自动挂载
vi /etc/fstab
/dev/hdc /media iso9660 defaults 0 0
(3)、yum源设置
1)、cd /etc/yum.repos.d/
2)、mv CentOS-Base.repo CentOS-Base.repo.bak
3)、vi CentOS-Media.repo
[c5-media]
name=CentOS-&releasever - Media
baseurl=file:///media
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
4)、查看yum源中包含php的rpm包
yum list |grep php*
5)、yum安装
yum -y install php*(-y参数代表yes)
#全自动安装php*开头的rpm包
6) 、yum卸载
yum -y remove dovecot*
yum clean all #清除yum下载缓存
源码包安装
在生成配置地图文件的时候检测错误
1、生成配置文件
源码包一般安装在/usr/local下与包名有关的文件夹下
./configure --prefix=/usr/local/apache2
2、编译
如果环境里没有gcc编译器 运行: yum -y install gcc*
make ->C代码编译成二进制程序
3、安装
make install ->把二进制程序拷贝到/usr/local/apache2/下
安装apache源代码(源码包:httpd-2.2.9.tar.gz):
1、把源码包httpd-2.2.9.tar.gz解压
tar xzf http-2.2.9.tar.gz
cd然后检查有没有configure脚本
2、生成配置文件
./configure--prefix=/usr/local/apache2
3、编译
make
4、安装
make install
5、cd/usr/local/apache2/
进入安装目录
6、启动apache
/usr/local/apache2/bin/apachectlrestart
7、查进程
ps -ef|grephttpd
8、查端口
netstat -tunpl|grep :80
单用户和救援模式:
1、linux用户密码破解
启动时(grub界面,按两下a键),在启动模式输入1,进入单用户模式,可以以root身份进入
passwd root修改密码
init6(重启)| init3(直接跳到3级别)
2、防止破解
加grub密码,防止进入grub
vi/etc/grub.conf =>/boot/brub/grub.conf(编辑这个链接文件)
在任意地方加上password 123456(加上多行password,启动时就得输入多次密码)
然后平稳重启
3、救援模式
grub密码丢失的情况下进行救援模式
在重启时,按esc,从光驱启动,按F5键,或是输入linux rescue
修改grub.conf
然后reboot重启(init命令在此模式下无法使用)
用户和权限
第5课2012年5月29
1、用户
切换登陆用户:
(1)、切换多个终端登录测试
(2)、su - user1(-保留用户所有文件),su最好以root用户执行,其他普通用户才能正常读写
使用exit依次退出
2、目录和文件
3、权限(读写执行)
与用户有关的操作:
1、添加用户
useradd user1
2、删除用户
userdel -r user1(-r参数将用户彻底删掉,将用户相关文件全部删除,当下次再创建该用户时不会出现错误)
3、修改密码
passwd user1
4、与用户有关的文件(最主要的四个)
/etc/passwd 用户账号信息
uid为0是超级管理员,500为普通用户开始值
/etc/shadow 用户密码
/etc/group 用户组容器
/home/user1 用户家目录
usermod -s /bin/bash username激活添加的账户
组:
1、添加组
groupadd grp1
2、删除组
groupdel grp1
用户与组的关系:
1、如何把用户加入组(选择第3种方法)
(1)、#usermod -g grp1 user1(将创建user1时user1的所属组删除并加入grp1组)
(2)、#usermod -G grp2 user2(将user2加入grp2,user2原本所属组保留,将用户删除组时有问题)
(3)、gpasswd -a user3 grp3 (将用户user3加入grp3组)
-a add
gpasswd -d user3 grp3 (将用户user3从grp3组中删除)
-d delete
2、如何查看组内用户
cat /etc/group
3、如何查看用户属于哪些组
id user1
权限分配(掌握acl方法):
setuid setgid t位 #这3个位组成权限里的第一个值如0777的0
4 2 1 4755
所有者s位 所有组s位 其他人t位
1、chmod
chmod 777 test
2、chown
chownuser1:user1 test
chown :user1 -Rtest #递归的修改所属组,使其下级目录也修改
3、setuid(设置文件所有者uid),对可执行文件使用才有意义
一般只针对执行程序设置,s位是什么意思?
chmod u+s/bin/touch #touch命令创建的文件有s
chmod u+s/bin/su
chmod 4755/bin/su
关于s位:ll /bin/su
# -rwsr-xr-x 1 root root 23968 ...... /bin/su
当s位存在时说明,任何一个有执行权限的用户都可以使用su命令,而且是以root用户身份在执行(如su切换用户后passwd也是以root身份使用,就有执行权限了,而user1切换uesr2时无法执行passwd,则无法输入密码)
删除s位:chmod u-s /bin/su
4、setgid #目录的所属组可以往下继承
chmod g+s test
chown :user1 -Rweb #web下创建的文件所属组全部为user1,无论多少层目录,但是新建的文件所属组又会变为原来的组
5、t位(设置other位) #所有人共享一块空间,只能对自己创建的文件进行修改删除
如果不设置t位的话,虽然每个用户只能读自己的文件或目录,但是无法限制删除的权限
chmod 757 web
#other有所有权限时,自己只能删除修改自己的东西
chmod o+t web
chmod 1757 web
6、sudo(选择第一种方法) #对执行过程(如命令)或执行程序设置权限,要用sudo来授权
(1)、visudo
对组设置使用%组名,对用户直接输入用户名,‘,’分割权限
使用被设置命令时,将命令路径补全,然后前面加上sudo
user1 localhost=/usr/sbin/useradd,/usr/sbin/userdel
#user1 localhost=/usr/sbin/useradd user4,/usr/sbin/userdel user4
测试:
sudo /usr/sbin/useradd user4
#第一次需要输入user1的密码,是有时效性的
(2)、vi /etc/sudoer
7、acl(访问控制列表)
(1)、设置acl权限
setfacl -m u:user1:r-- web #setf(file)acl -m(modify)
setfacl -m u:user2:rw- web
setfacl -m u:user3:rwx web
添加默认权限(当创建下级文件时,有同样的设置)
setfacl -m d:u:user3:rwx web
(2)、删除acl权限
setfacl -b web #将web下所有后面添加权限删除
setfacl -x u:user1 web #只删除web 中user1的权限
(3)、查看acl权限
getfacl web #获取web文件的acl列表
acl怎样解决权限的继承问题
setfacl -m u:user1:rwx -R web #设置user1对web下所有文件具有rwx权限,但是对新建的目录或文件不起作用
setfacl -m d:u:user1:rwx -R web #设置user1对web下所有文件默认具有rwx权限,新建文件或目录同样起作用
[root@localhost /]# getfacl web
# file: web
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@localhost /]# getfacl web4(web4为web下级目录)
# file: web4
# owner: root
# group: root
user::rwx
user:user1:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:user1:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
服务进程
linux服务,进程,端口:
应用程序
/usr/sbin/httpd
服务脚本
/etc/rc.d/init.d/httpd
服务
chkconfig --list httpd #查看httpd在不同级别启动情况
chkconfig httpd on #设置httpd服务在2345级别下运行
chkconfig httpd off #关闭httpd服务2345界别的运行
chkconfig --level 3 httpd on #设置httpd服务3级别启动
service httpd start #启动httpd应用程序
service httpd stop #关闭httpd应用程序
service httpd restart #重启httpd应用程序
如何将apche设置为开机自动运行
vi /etc/rc.local
加上/usr/local/apache2/bin/apchectl start
cd /etc/init.d
vi httpd
里面有一行#chkconfig: - 85 15 ,该行表示了httpd服务的启动级别为85(比较靠后,启动稍晚),关闭级别为15(比较靠前,关闭稍早)
进入/etc/rc3.d里面有许多的服务脚本,有S(开始)开头的,有K(停掉)开头的
进程
查看进程
ps -ef |gerp httpd #进程表
pstree - p|grep test #进程树
top #类似win的任务管理器,能看到cpu、内存使用率,按q 键退出
free #查看计算机内存
./test.sh & #将程序后台执行
结束进程
kill -9 pid号
killall httpd(进程名)
pkill httpd(进程名)
端口
netstat -tunpl |grep :80 #查看80端口
netstat -tunpl |grep httpd #查看httpd服务的端口
netstat -tun #查看当前活跃的连接
计算机端口:1-65535个
nc -l 20000 #新建20000端口
nc localhost 20000 #连接20000端口
telnet 192.168.255.1 20000 #用telnet登陆192.168.255.1上的20000端口
文件系统
df -h 查看磁盘空间(带有换算单位功能)
df -Th 带文件格式的查看方法
stat filename #查看filename的文件状态
查看内存:
1、free -k 或free -m(以m为单位打印) 或free -g
要点内容:
1、crontab 任务计划
2、硬盘分区、挂载
3、quota磁盘配额
crontab 任务计划
1、新建任务计划
crontab -e #edit
*****echo"aaaaaaaa" >>/tmp/file1
2、关于crontab语法:
时间 *代表每,5个*代表每分钟
执行命令 将执行程序写上全路径
3、时间
* * * * *共5个位置,依次为分、时、日、月、周
30 17 * * * 每天下午5:30
00 00 * * * 每天晚上00:00
00 00 * * 1-5 周一到周五的每天晚上00:00
* /5 * * * * 每隔5分钟
00 00 * * 1,3,5 周一、周三和周五的晚上00:00
4、命令
要将路径写全
如:在linux不写全路径时某些命令不能执行
/sbin/ 或 /usr/sbin/ 必须加全路径
/bin 或 /usr/bin 不用加全路径
*****echo"aaaaaaaa" >>/tmp/file1
5、查看任务计划
crontab -l #list
6、删除任务计划
crontab -r #remove
linux中的重定向(大于号前面一定要写空格):
> 覆盖式的写入
>> 追加
实时查看一个文件(规律变化的文件):
1、tail 默认查看文件后十行
tail -2 查看文件后2行
tail -f /tmp/file1 实时跟踪一个文件
#cd/var/log/httpd
#tail -faccess_log #实时查看apache访问日志
2、head 默认查看文件前十行
head -2 查看文件前2行
watch -n1 #1秒钟刷新一次,实时跟综任何一个指令或文件,n后面为秒数
watch -n1 ps -ef |head -10 #每秒钟刷新进程前10行
磁盘分区、格式化和挂载使用
先分扩展分区,然后进行逻辑分区
1、查看硬盘分区
fdisk -l #list
2、对硬盘进行分区
一个硬盘只能有4个主分区,一个系统可以有多个。新加入的硬盘直接加入扩展分区
fdisk /dev/sdb
m 帮助
n 新建分区(e扩展分区,p主分区,l逻辑分区,先分扩展分区才能出现逻辑分区)
p 查看分区
w 保存现有分区结构
t 改变分区文件系统(默认 83--linux默认支持的ext3文件系统;8e--lvm 逻辑卷;fd--raid 磁盘阵列),在文件系统选择步骤选择83作为逻辑分区的文件系统
d 删除分区
extention
logical
primarypartition
3、partprobe
分区完成后,输入此命令,让所有的软件都能知道这个新分区,并且知道文件系统
4、fdisk -l
Device Boot Start End Blocks Id System
/dev/sdb1 1 1044 8385898+ 5 Extended
/dev/sdb5 1 13 104359+ 83 Linux
将要格式化的为逻辑分区sdb5
5、分区格式化
a、mkfs.ext3 /dev/sdb5
#把/dev/sdb5格式化成ext3文件系统
mount /dev/sdb5 /mnt #将sdb5挂载到mnt目录
被挂载的目录最好应该为空,不然挂载前该目录中的文件在挂载后将消失
b、保障重启还能生效:
vi /etc/fstab
/dev/sdb5 /mnt ext3 defaults 0 0
c、mount -a
加载/etc/fstab挂载表,没有挂载的会进行重新挂载,可以测试磁盘挂载语句(防止语句错误,无法启动系统)
d、df -T
#查看已挂载的分区(打印分区格式)
quota磁盘配额(只能对分区,配额是分区的属性)
做配额要看清给哪个分区做配额,只对指定分区有效
配额分类: 空间配额 blocks
文件数配额 inodes
1、给分区加磁盘配额属性
vi /etc/fstab(分区表)
修改/dev/VolGroup00/LogVo100 / ext3 defaults,usrquota 1 1
2、分区属性生效的方法:
a、重启电脑或mount -o remount / #把分区进行重挂载
3、首先准备用户
useradd user1
4、扫描配额名单表
quotacheck -cmug / #创建并扫描用户和组配额表放到根分区
5、对用户设置配额
每一种配额方式都有:软限制和硬限制
硬限制要大于软限制
edquota -u user1
blocks已使用空间
inodes已使用文件数
soft 软限制
hard 硬限制
#Disk quotas for user user1 (uid 500):
# Filesystem blocks soft hard inodes soft hard
# /dev/mapper/VolGroup00-LogVol00 32 0 0 10 0 0
hard值一定要大于soft值
f1、查看用户配额
quota #用户自己查看配额
quota -u user1
g1、启动配额
quotaon -aug #-a为所有的,-ug用户和组
h1、测试配额
du -sh test #查看目录大小
ls test/ |wc -l #查看目录下文件个数
i、文件配额
useradd user2
quotacheck -cmufg /
edquota -u user2
quotaon -aug
j、注意事项:
一定要搞清楚设置配额的分区
k、新分区不支持acl属性
手动加上
vi /etc/fstab
/dev/sdb5 /mnt ext3 defaults,acl 0 0 #将acl加入启动项
mount -o remount /dev/sdb5 #重新挂载/dev/sdb5
#查看分区挂载属性(rw,acl,usrquota,noexec)
对于5.4以前的系统:
useradd user2
quotaoff -aug #关闭配额
quotacheck -cmufg /
edquota -u user2
quotaon -aug
shell 编程
shell编程需要学习的语种:
shell语法
awk编程 #作用:截取坐标
例: df |awk 'NR==3{print int($4)}'截取df命令输出结果中第3行第4列内容
cat /etc/passwd |awk -F: '{print "username:”$1"=>uid:"$3}'
perl编程
python编程
/etc/bashrc #系统中定义常量的文件,可以将命令别名定义在这里,这样每个用户都可以使用
history
存放位置:~/.bash_history
命令历史history
history查看命令历史
history -c清楚命令历史
alias
存放位置:~/.bashrc
alias [别名] #查看命令别名
alias 别名='实际执行的命令' #设置命令别名
unalias 别名 #取消已设置的命令别名
输入输出
echo 'aaa' >file1 #将aaa输入到file1
echo 'bbb'>> file1 #将bbb追加到file1中
ls > file1
aaaaaa > file1
对于脚本中不想使用的输出,可以将其输出到黑洞设备内,如
pstree |grepmysqld &>/dev/null
小脚本(判断进程是否开启,如果未开启则重启进程)
pstree |grephttpd &>/dev/null
if [ &? -ne 0]
then
service mysqldrestart
fi
管道操作符号 |
$?测试上一条语句是否成功,0为--执行成功,非零--语句失败
#开头的行为注释行,
第一行#!/bin/bash标示所用解析器,
第二行写脚本名#test.sh
引号:
' 不解析变量
" 解析变量
` 将命令执行的结果输出给变量
脚本执行的时候必须加上可执行权限
chmod a+x ./test.sh
shell变量:
全局变量
echo $PATH
=>/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin #以上:分隔的目录都为命令存放目录
echo $HISTSIZE
echo $PS1 #
PS1="==>" #改变linux命令提示符
局部变量
位置变量
预定义变量
全局变量
PATH
HISTSIZE
PS1
PS2
局部变量
1、定义变量 //定义时没有$,输出时有$
str="helloworld!!" #等号前后没空格
str='helloworld'
2、输出变量
echo $str
3、删除变量
unset str
4、查看变量
set
5、查看全局变量
env
6、把局部变量变成全局变量
export str
位置变量(一般是$0-$9,$0代表脚本本身)
#!/bin/bash
#test.sh
for loop in $1$2 $3 $4 $5 #此处为位置变量
do
echo $loop
sleep 1 #休眠1秒
done
调用 ./test.sh a b c d e f
预定义变量
$? 判断上一次命令执行是否成功
$# 给脚本传递的参数个数
$* 传递了哪些参数
for loop in $*
do
echo $loop
sleep 1
done
for loop in $#
do
echo $loop
sleep 1
done
echo "参数个数:${#}" #集合操作符写在$后面
for loop in $*
do
echo $loop
sleep 1
done
linux中数学运算
expr 1 + 1
expr 1 \* 1 #1X1
如何实现$i++
数学自增:
let i++
let i--
expr 1 + 1
expr 1 \* 1 # *在linux代表模糊查询,需要转义
i=10
i=`expr $i + 1` #$i自增1
str=`ls`
echo $str
键盘输入
read -p"please input yourname:" name
echo $name
运行脚本后,在屏幕上输入name,后面代码中可以直接调用$name
条件测试
1、文件测试(操作符前后有空格,文件路径前后有空格)
[ -d /etc ]&& echo "yes" #测试文件是否是目录
[ -f /etc/passwd] && echo "yes" #测试是否是文件
-e #测试目录或文件是否存在
-r #测试当前用户是否有权限读取
-w #测试当前用户是否有权限写入
-x #测试当前用户是否可执行该文件
-L #测试是否为符号连接文件
2、整型测试(操作符前后有空格)
-eq 等于 (Equal)
-ne 不等于 (Not Equal)
-gt 大于 (Greater Then)
-lt 小于 (Lesser Then)
-le 小于或等于 (Lesser or Equal)
-ge 大于或等于 (Greater or Equal)
3、字符串比较
[ 字符串1 = 字符串2 ] #是否等于
[ 字符串1 != 字符串2 ] #是否不等于
[ -z 字符串 ] #字符串内容为空
4、逻辑测试
-a或&&:逻辑与
-o或||: 逻辑或
!: 逻辑否
if条件语句--单分支
if 条件测试命令
then
fi
if 磁盘已用空间>80%
then 报警
fi
#!/bin/bash
#if
read -p "username:" name
if[$name ]
awk
df |awk '$0~/mapper/{print $0}' #第一行第一列
-F: 以:作为字符分隔符
NR 行数
NF 字段数
df |awk 'NR==3{print $4}' #打印第三行第四列
df |awk 'NR==3{print int($4)}' #打印出df的结果中第三行第四列并转整
$num=`df |awk 'NR==3{print int($4)}'`
if [ $num -ge 20 ]
then
echo "/分区超过20%,now is ${num}%"
fi
for((i=0;i<10;i++))
do
echo $i
done
循环添加100个用户
#!/bin/bash
for((i=1;i<=100;i++))
do
echo "startuseradd ...."
useradd"user${i}"
echo"-------------------"
echo "startpasswd ......"
echo 123456|passwd --stdin user$i &>/dev/null
done
echo "用户添加完毕,密码初始化为123456"
i=1;
while [ $i -le 100 ]
do
userdel -r user$i
let i++
done
case $1 in
start)
echo "start...."
;;
stop)
echo"stop...."
;;
restart)
echo"restart...."
;;
reload)
echo"reload...."
;;
*) #默认
echo"bbb"
;;
esac
function menu(){
echo"aaaaaaa"
}
menu
菜单实例
function menu(){
cat <<end
1) aaaaaaaaaaaaaa
2) bbbbbbbbbbbb
3) ccccccccccccccc
4) quit
end
}
while :
do
menu
read -p "please you input 1|2|3|4:" opts
case $opts in
1)
echo"aaaaaaaaaaaaaa"
;;
2)
echo"bbbbbbbbbb"
;;
3)
echo"cccccccccccc"
;;
4)
exit
;;
esac
done
shift 输入的参数列表第一个参数出栈
shell脚本应用示例
示例1:周五17:30清理FTP服务器的公共共享目录
检查 /var/ftp/pub/ 目录,将其中所有子目录及文件的详细列表、当时的时间信息追加保存到 /var/log/pubdir.log 日志文件中,然后清空该目录
[root@localhost~]#vi/opt/ftpclean.sh
#!/bin/bash
date >>/var/log/pubdir.log
ls -lhR/var/ftp/pub >> /var/log/pubdir.log
rm -rf/var/ftp/pub/*
[root@localhost~]#crontab-e
30 17 * * 5/opt/ftpclean.sh
示例2:
每隔3天对数据库目录做一次完整备份
统计/var/lib/mysql 目录占用的空间大小、查看当前的日期,并记录到临时文件 /tmp/dbinfo.txt 中,将 /tmp/dbinfo.txt 文件、/var/lib/mysql目录进行压缩归档,备份到/opt/dbbak/目录中,备份后的包文件名中要包含当天的日期信息, 最后删除临时文件/tmp/dbinfo.txt
[root@localhost~]# vi /opt/dbbak.sh
#!/bin/bash
DAY=`date +%Y%m%d`
SIZE=`du -sh/var/lib/mysql`
echo "Date:$DAY" >> /tmp/dbinfo.txt
echo "DataSize: $SIZE" >> /tmp/dbinfo.txt
cd /opt/dbbak
tar zcvfmysqlbak-${DAY}.tar.gz /var/lib/mysql /tmp/dbinfo.txt
rm -f/tmp/dbinfo.txt
[root@localhost~]# crontab -e
55 23 */3 * * /opt/dbbak.sh
网络设置
Packet Tracer 5.0 by Cisco Systems(思科交换机模拟软件)
0.0.0.0代表所有ip地址
linux网络设置:
1)主机名修改
临时:hostname server1
永久:vi/etc/sysconfig/network
HOSTNAME=server1
查看:hostname
2)修改ip地址
临时:ifconfig eth0 192.168.200.1
永久:vi/etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.100.1
NETMASK=255.255.255.0
查看:ifconfig eth0
查看所有接口:ifconfig -a
3)网关
临时:route add default gw 192.168.100.1 #gw gateway
永久:vi /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=192.168.100.100
查看:route -n
4) 服务器
永久:vi /etc/resolv.conf
nameserver 8.8.8.8
网络OSI七层模型:
七层 应用层
六层 表示层
五层 会话层
四层 传输层 源端口-目的端口
三层 网络层 源ip-目的ip (地址和名字) ->发送一个arp广播(arp病毒)
二层 数据链路层 源mac-目的mac (身份证号码)
一层 物理层
nfs文件共享
nfs服务器:
实验环境:linux > linux
server设置过程:
1、安装软件
yum -y install nfs*
2、修改配置文件
vi /etc/exports
/share *(sync,rw) //*代表所有的人,可以用ip地址段表示
/share *|192.168.100.0/24(sync,rw|ro) #sync磁盘同步
# *代表所有ip地址,24代表子网掩码255.255.255.0
#ro 只读
3、启动服务
service nfs restart
服务随机启动:
chkconfig nfs on
#2,3,4,5级别下启动
在客户端测试连接前关闭服务器的防火墙:
iptables
查看:iptables -L
删除:iptables -F
service iptables save
selinux
查看:sestatus
禁用:vi /etc/selinux/config
SELINUX=disabled
分配权限(系统权限),让客户端nfsnobody用户能够创建文件
setfacl -m d:u:nfsnobody:rwx -R share/
客户机重启后还能挂载:
vi /etc/fstab
192.168.100.1:/share /mnt nfs defaults 0 0#测试umount /mnt mount -a df
client:
查看nfs文件夹
showmount -e 192.168.100.1
挂载服务器共享文件夹
mount 192.168.100.1:/share /mnt
smb文件共享
在win下开发linux上挂的网站需要用到该技术
samba文件共享:
1、安装软件
yum -y installsamba*
在CnetOS5.5版本中输入--skip-broken #跳过无法解决依赖性包的安装
2、修改配置文件
rpm安装的apache网站根目录:
/var/www/html
#找到以home开头的行,复制,粘贴为web
vi/etc/samba/smb.conf
[web] #共享名
path=/var/www/html #共享路径
browseable=yes #可浏览
writable=yes #可写
3、创建samba用户(特殊,系统里面必须有个跟samba同名的用户,而且此用户无密码)
useradd user1
smbpasswd -a user1 //输入两次密码 #将用户user1加入samba用户
权限设置
chmod o+w html/ #不精准的方法
setfacl -md:u:user1:rwx -R html/ #acl方法
service smbstart 启动服务
win下开发linux网站的配置
要注意:设置samba用户为apache,httpd服务用户也为apache
win在linux下开发需要将user1改为apache
smbpasswd -a apache
setfacl -mu:apache:rwx -R /var/www/html/
setfacl -md:u:apache:rwx -R /var/www/html/
win下删除远程登录用户(win下存储用户缓存的方式,导致用户缓存很难清除,需要用一下方法)
net use /delete *
使用mkdir创建文件时,要注意权限参数没有双引号(brophp框架创建文件命令有问题)
4、启动服务
service smb restart
client:
linux ->
mount //192.168.100.1/web /mnt -o username=user1 #-o option选项
windows ->
1、\\192.168.100.1\web
2、映射网络驱动器(\\192.168.100.1\web => z:)
ftp文件服务器
ftp服务器主要用来软件发布使用
server:
1、安装软件
yum -y install vsftpd*
2、修改配置文件
vi /etc/vsftpd/vsftpd.conf
anon_upload_enable=yes #使匿名用户可以上传
anon_mkdir_write_enable=yes #使匿名用户创建文件夹
anon_other_write_enable=yes #使匿名用户具有修改删除权限
3、启动服务
service vsftpd restart
chkconfig vsftpd on //下次重启系统,服务随机启动
ftp根目录:
/var/ftp/pub/
设置权限chmod o+w pub/ #默认服务用户为ftp
setfacl
查进程:
pstree |grep vsftpd
client:
ie -- ftp://192.168.100.1
dos -- ftp 192.168.100.1
匿名用户:ftp
密码:空
可以使用linux内的普通用户在win的ftp端登陆,上传文件至用户家目录,如:/home/user1
匿名用户上传:
修改配置文件 vi /etc/vsftpd/vsftpd.conf
去掉anon_upload_enable=YES的注释
匿名用户创建文件夹:anon_mkdir_write_enable=yes
匿名用户修改文件名:anon_other_write_enable=yes
ssh文件传输
linux的ssh两大功能:
1、远程登录
ssh192.168.100.1
2、远程传输
a、scp file1192.168.100.1:/root/ #拷贝file1至远程服务器
b、rsync -a -essh file1 192.168.100.1:/root/
rsync本身是一种远程传输技术,只是让其沿着ssh安全隧道传输
不要口令登录或远程传输:
1、客户端生成一对钥匙
ssh-keygen -t rsa 然后连续回车
/root/.ssh/id_rsa #私钥
/root/.ssh/id_rsa.pub#公钥
2、把自己的公钥传到服务器的相应目录下/root/.ssh/authorized_keys
ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.100.1
3、ssh 192.168.100.1 #此时不再要口令了
两种远程传输方式:
1、ssh file1192.168.100.1:/root/ 将file1拷贝到192.168.100.1的/root/下
2、rsync -a -essh file1 192.168.100.1:/root/
ssh验证方法:
1、口令验证
2、密钥验证
密码学:
1、对称加密
2、非对称加密
3、单向不可逆加密 md5
非对称加密(原理:一把钥匙--私钥配多把锁--公钥):
1、网银
2、安全的网站
1、服务器把公钥交给用户,用户到服务器的数据是通过这把锁加密的
2、用户把自己的锁交给服务器,让服务器拿用户的锁加密数据然后传输,用户使用自己的私钥去解开
crontab和ssh配合备份网站文件
crontab -e
00 02 * * * tarczf /tmp/html.tar.gz /var/www/html #压缩
30 02 * * * rsync-a -e ssh /tmp/html.tar.gz 192.168.100.1:/tmp #传输
dns域名服务器
作用:把域名转成ip地址
三大类dns服务器:缓存dns服务器;主dns服务器;从dns服务器
1、dns查询方式
2、缓存dns服务器
3、主dns服务器
4、从dns服务器
域名的结构(标准的域名后面有一个.):
www.baidu.com. #主机名
baidu.com . #域名
. 13台dns根域
缓存dns服务器:
通过向其他域名服务器查询获得域名->IP地址记录将域名查询结果缓存到本地,提高重复查询时的速度
server:
1、安装软件
yum -y install bind* #安装主服务器需要的软件
2、修改配置文件
配置文件和解析数据库:
/var/named/chroot/
etc #配置文件
var #解析数据文件
设置缓存dns服务器
yum -y install caching-nameserver*
配置文件和解析文件如何配合:
named.caching-nameserver.conf #访问控制文件
named.rfc1912.zones #dns配置文件
3、启动服务
需求:假设一台dns服务器,解析baidu.com,这个域下有几个域名:
2、mp3.baidu.com
3、ftp.baidu.com
1、安装软件
yum -y installbind* caching*
2、修改访问控制文件
vi/var/named/chroot/etc/named.caching-nameserver.conf
1)localhost=>any
2)127.0.0.1=>any
3、修改配置文件
正向解析-baidu.z
反响解析-baidu.f
4、创建baidu.z和baidu.f
cd/var/named/chroot/var/var/named
设置缓存dns服务器
yum -y installcaching-nameserver*
配置文件和解析文件:
named.caching-nameserver.conf //访问控制文件
named.rfc1912.zones //dns配置文件
需求:架设一台dns服务器,解析baidu.com,这个域名下有一下域名:
2、mp3.baidu.com
3、ftp.baidu.com
主dns服务器步骤
1、安装软件
yum -y install bind* caching*
2、修改访问控制文件
vi/var/named/chroot/etc/named.caching-nameserver.conf
将localhost全部替换为any,将127.0.0.1全部替换为any
3、修改配置文件
//正向解析-baidu.z
zone"baidu.com" IN {
type master;
file "baidu.z";
allow-update { none; };
};
//反向解析-baidu.f
zone"100.168.192.in-addr.arpa" IN {
type master;
file "baidu.f";
allow-update { none; };
};
4、创建baidu.z和baidu.f
寻找合适的配置文件做为模版named.local(var/named/chroot/var/named/)
cp named.localbaidu.z
vi baidu.z
:%s/localhost/baidu.com/g
//baidu.z内容
$TTL 86400
@ IN SOA baidu.com.root.baidu.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400) ; Minimum
IN NS ns1.baidu.com.
IN NS ns2.baidu.com. //从dns设置
ns1 IN A 192.168.100.1
ns2 IN A 192.168.100.2 //从dns设置
www IN A 192.168.100.1
mp3 IN A 192.168.100.2
//baidu.f内容
$TTL 86400
@ IN SOA baidu.com.root.baidu.com. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS ns1.baidu.com.
IN NS ns2.baidu.com. //从dns设置
1 IN PTR ns1.baidu.com.
1 IN PTR ns2.baidu.com. //从dns设置
1 IN PTR www.baidu.com.
2 IN PTR mp3.baidu.com.
5、重启服务
service named restart
6、测试
出现错误,查看日志信息tail/var/log/message
错误原因,是/var/named/chroot/var/named/baidu.z 和baidu.f的权限有问题
解析文件的权限配置:
chown :namedbaidu.*
pingwww.baidu.com
7、再次重启服务
service named restart
dns解析记录类型:
1)IN internet
2)A 从域名到ip
3)NS 本域里面负责域名解析的dns服务器
4)PTR 从ip到域名的解析记录(反向解析时才能看到)
5)SOA 权威解析记录(负责一个域内的最权威的那台主dns服务器)
从dns服务器
1、安装软件:
yum -y install bind* caching*
2、修改访问控制文件
vi /var/named/chroot/etc/named.caching-nameserver.conf
将localhost全部替换为any,将127.0.0.1全部替换为any
3、修改配置文件
vi /var/named/chroot/etc/named.caching-nameserver.conf
//正向解析-baidu.z
zone"baidu.com" IN {
type slave;
file "slaves/baidu.z";
masters { 192.168.100.1; };
};
//反向解析-baidu.f
zone"100.168.192.in-addr.arpa" IN {
type slave;
file "slaves/baidu.f";
masters { 192.168.100.1; };
};
修改主服务器的baidu.z和baidu.f,增加上从服务器的ip
4、从主服务器复制得到baidu.z和baidu.f
查看从服务器的/var/named/chroot/var/named/slaves,同步成功后会出现baidu.z和baidu.f
5、测试
ping www.baidu.com
ping -a 192.168.100.1
host 192.168.100.1
host 192.168.100.2
主从同步的测试
1、主服务器解析文件:
1997022701:serial //一定要比从服务器大才行
2、重启主服务器从跟着同步
service named restart
3、设置windows网卡的首先和备用dns服务器
4、设置主从dns服务器-ping和nslookup
主从服务器无法同步的解决办法
主DNS需要在辅助DNS的chroot文件夹中有写权限。然后在辅助DNS上重启named服务,主DNS会把相应的ZONE文件直接传递到辅助DNS上
在从服务器上输入chown =R named.named chroot/
lamp环境编译
准备工作
1、编译之前防火墙要关闭
关闭SELinux,允许防火墙80端口访问
sestatus (linux防火墙)
vi/etc/selinux/config
SELINUX=disabled *若安装时没有禁用SELinux,将enforcing改为disabled
修改后需重新启动Linux方可生效
关闭防火墙Netfilter/iptables
iptables -F *如果没有禁用防火墙,默认80端口禁止访问
service iptablessave 防火墙策略写到/etc/sysconfig/iptables,以后计算机重启再加载这个文 件时,防火墙策略就会永久清空.
2、环境里一定要有gcc
编辑yum配置文件
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak #将该文件设为备份
vi /etc/yum.repos.d/CentOS-Media.repo
准备光盘挂载
mount /dev/hdc/media
依次安装gcc、gcc-c++
yum -y installgcc*
3、卸载系统之前有的Apache、MySQL和PHP的RPM,或是将原有的服务停止
service httpdstop
service mysqldstop
卸载RPM包的Apache、MySQL、PHP
rpm–e http-1.2.3.rpm --nodeps #截断这个rpm包的依赖性
yum remove httpd
yum remove mysql
编译安装
*每个源码包配置编译安装完成后,确认安装目录是否生成安装文件
./configure后面不指定prifix和其他一些属性时,默认是安装在系统路径,在/usr/local/bin下能找到该软件的bin,当其他软件安装过程中需要用到该软件,若没指定寻找路径,就会到/usr/local/bin/去调用
准备语句
tar xzf file.tar.gz #解开gz压缩文件
tar xjf file.tar.bz2 #解开bz2压缩文件
源码包放在/lamp下 mkdir /lamp
编译以后的文件放在/usr/local
安装libxml2(php编译时需要使用)
cd/lamp/libxml2-2.6.30
./configure--prefix=/usr/local/libxml2/
make && make install //make成功后再执行make install
安装libmcrypt (加密,认证)
cd/lamp/libmcrypt-2.5.8
./configure--prefix=/usr/local/libmcrypt/
make &&make install
*需要调用gcc-c++编译器,未安装会报错
安装libltbl,也在libmcrypt源码目录中,非新软件
cd/lamp/libmcrypt-2.5.8/libltdl
./configure --enable-ltdl-install
make
makeinstall
安装zlib
cd /lamp/zlib-1.2.3
./configure #未指定安装目录,安装到系统指定目录/usr/local下的对 应目录,如bin将进入系统的bin,lib将进入系统的lib,这 种情况的配置文件,当软件安装完成后,会自动加入系统的 环境变量,可以直接调用
make &&make install
安装libpng
cd /lamp/libpng-1.2.31
./configure--prefix=/usr/local/libpng/
make &&make install
64为系统提示错误/usr/bin/ld: /usr/local/lib/libz.a(compress.o): relocation R_X86_64_32against `a local symbol' can not be used when
解决方法重新安装zlib
cd zlib-1.2.3
./configure
vim Makefile 找到CFLAGS=-O3 –DUSE_MMAP加上-fPIC
安装jpeg6
mkdir /usr/local/jpeg6
mkdir /usr/local/jpeg6/bin
mkdir /usr/local/jpeg6/lib
mkdir /usr/local/jpeg6/include
mkdir -p /usr/local/jpeg6/man/man1
cd /lamp/jpeg-6b
./configure --prefix=/usr/local/jpeg6--enable-shared --enable-static
make && make install
*--enable-shared与--enable-static参数分别为建立共享库和静态库使用的libtool
64位系统出错
./libtool–mode=compile gcc -O2 -I. -c ./jcapimin.c
make:./libtool: Command not found
make: *** [jcapimin.lo] Error 127
需要更新libtool到最新版本
#cp/usr/share/libtool/config/config.sub .
#cp /usr/share/libtool/config/config.guess .
安装freetype
cd/lamp/freetype-2.3.5
./configure --prefix=/usr/local/freetype/
make
makeinstall
安装autoconf
cd /lamp/autoconf-2.6.1
./configure
make && make install
安装gd库
mkdir /usr/local/gd2
cd/lamp/gd-2.0.35
#png错误,修改方法:
vi gd_png.c
把#include “png.h”替换
#include "/usr/local/libpng/include/png.h"
#如果不做修改,phpinfo()显示出的png的支持为disable
./configure --prefix=/usr/local/gd2/--with-jpeg=/usr/local/jpeg6/ --with-freetype=/usr/local/freetype/--with-png=/usr/local/libpng/
#word中两行以上的命令,要在记事本中消除换行格式才能粘贴到linux命令行
Make
#如果出现错误,把上面的两步重新执行一次.
makeinstall
* 若前面配置zlib时没有指定安装目录,gd配置时不要添加--with-zlib=/usr/local/zlib/参数
php5以上需要2.1以上版本的gd库
安装apache
cd /lamp/httpd-2.2.9
make
make install
启动Apache测试:
/usr/local/apache2/bin/apachectl restart
查看进程:
ps -le | grep httpd
查看apache模块:
/usr/local/apache2/bin/apachectl –l
#share 动态模块或动态库文件
Php5 rewrite
#static 静态模块或表态库文件
Server-status
Userdir
Virtual host
测试:
http://192.168.100.1/index.html
“itworks”
设置Apache随机启动
Vi /etc/rc.local
/usr/local/apache2/bin/apachectl restart
安装ncurses
使用1方法或2方法均可
1.yum –y install ncurses*
2.源代码编译:
cd /lamp/ncurses-5.6
./configure --with-shared --without-debug--without-ada --enable-overwrite
make
make install
* 若不安装ncurses编译MySQL时会报错
* --without-ada参数为设定不编译为ada绑定,因进入chroot环境不能使用ada ;--enable-overwrite参数为定义把头文件安装到/tools/include下而不是/tools/include/ncurses目录
重点是将ncurses-devel安装上去,在系统安装时选中开发工具,则ncurses-5.5-24.20060715是安装好的,缺少一个ncurses-devel.i386包
安装MySQL
useradd mysql
* 添加用户组mysql ,将mysql用户默认组设置为mysql用户组
cd /lamp/mysql-5.1.59
./configure --prefix=/usr/local/mysql--without-debug --enable-thread-safe-client --with-pthread --enable-assembler--enable-profiling --with-mysqld-ldflags=-all-static--with-client-ldflags=-all-static --with-client-ldflags=-ltinfo--with-extra-charsets=all --with-plugins=all --with-mysqld-user=mysql--without-embedded-server --with-server-suffix=-community--with-unix-socket-path=/tmp/mysql.sock
make
makeinstall
* --with-extra-charsets=all参数为安装所有字符集
#如果不行的话,make clean 后再make ;make install,这样去试一下,默认是不支持innodb存储引擎的.其中--with-plugins=all可以把innodb加载进来.
拷贝配置文件模板
1.cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
修改MySQL配置文件
1.[client]
default-character-set=utf8
#客户端字符集
#连接字符集
2.[ mysqld]
character-set-server = utf8
#服务器字符集
#数据库字符集
collation-server = utf8_general_ci
#服务器,库,表的校验字符集
#default-storage-engine=innodb #看情况决定是否更改此处
#把默认的表引擎改为innodb
* 生成MySQL配置文件
重启服务
杀进程 pkill mysqld
启动 /usr/local/mysql/bin/mysqld_safe--user=mysql &
Setfacl –m u:mysql:rwx–R /usr/local/mysql
Setfacl –m d:u:mysql:rwx –R /usr/local/mysql
安装数据库* 用acl来让mysql用户对/usr/local/mysql有所有权限
/usr/local/mysql/bin/mysql_install_db--user=mysql
* 创建数据库授权表
启动MySQL服务
1.用原本源代码的方式去使用和启动mysql
/usr/local/mysql/bin/mysqld_safe--user=mysql &
2.重启以后还要生效:
Vi /etc/rc.local
/usr/local/mysql/bin/mysqld_safe--user=mysql &
4./usr/local/mysql/bin/mysqladmin-uroot password kkk
#给mysql用户root加密码.密码为kkk
/usr/local/mysql/bin/mysql -u root -pkkk test
mysql>show databases;
mysql>use test
mysql>show tables;
#进入mysql以后用set来改密码.
mysql> exit
登录MySQL客户端控制台设置指定root密码
安装libiconv
./configure--prefix=/usr/local/libiconv
安装php
编译前确保系统已经安装了libtool和libtool-ltdl软件包,若没有安装使用yum或rpm安装下:
yum install libtool*
yum install libtool-ltdl*
cd/lamp/php-5.2.6
./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-jpeg-dir=/usr/local/jpeg6/--with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/--with-gd=/usr/local/gd2/ --with-iconv=/usr/local/libiconv --with-mcrypt=/usr/local/libmcrypt/--with-mysqli=/usr/local/mysql/bin/mysql_config --enable-soap--enable-mbstring=all --enable-sockets
* 若前面配置zlib时没有指定安装目录,PHP配置时不要添加--with-zlib-dir=/usr/local/zlib/参数
若在gd部分一直编译不过去,可以尝试yum install php-gd,然后--with-gd的时候省略掉路径
make
make install
------------php5.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-jpeg-dir=/usr/local/jpeg6/ --with-png-dir=/usr/local/libpng/--with-freetype-dir=/usr/local/freetype/ --with-gd=/usr/local/gd2/--with-mcrypt=/usr/local/libmcrypt/--with-mysqli=/usr/local/mysql/bin/mysql_config --with-xpm-dir=/usr/lib64 --with-iconv=/usr/local/libiconv --with-zlib --with-bz2--enable-zip --enable-soap --enable-mbstring=all --enable-sockets
php5.6.30安装配置
’./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-jpeg-dir=/usr/local/jpeg6/' \
'--with-png-dir=/usr/local/libpng/' \
'--with-freetype-dir=/usr/local/freetype/'\
'--with-gd=/usr/local/gd2/' \
'--with-mcrypt=/usr/local/libmcrypt/' \
'--with-mysqli=/usr/local/mysql/bin/mysql_config'\
'--with-xpm-dir=/usr/lib64' \
'--with-iconv=/usr/local/libiconv' \
'--with-zlib' \
'--with-bz2' \
'--enable-zip' \
'--enable-soap' \
'--enable-mbstring=all' \
'--enable-sockets' \
’--enable-opcache’ \
生成php.ini(php的配置文件)
cp /lamp/php-5.2.6/php.ini-dist /usr/local/php/etc/php.ini
测试apache与php的连通性,看apache是否能解析php文件
让apache支持php代码 :
vi/usr/local/apache2/etc/httpd.conf
AddTypeapplication/x-httpd-php .php .phps
DirectoryIndex index.html index.php 添加PHP默认主页类型
重启Apache服务:
/usr/local/apache2/bin/apachectl restart
测试:vi /usr/local/apache2/htdocs/test.php
<?php
phpinfo();
?>
通过浏览器测试:
编译安装memcache模块
tar zxvf memcache-2.2.5.tgz
cd memcache-2.2.5
/usr/local/php/bin/phpize //专为php添加模块使用
./configure--with-php-config=/usr/local/php/bin/php-config
make && make install
编译安装 PDO_MYSQL
tar zxvf /lamp/PDO_MYSQL-1.0.2.tgz
cd /lamp/PDO_MYSQL-1.0.2/
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config--with-pdo-mysql=/usr/local/mysql
make && make install
如果出现找不到mysql.c的错误,ln -s/usr/local/mysql/include/mysql/* /usr/local/include/
修改php.ini
设置模块的目录:
extension_dir ="/usr/local/php//lib/php/extensions/no-debug-non-zts-20060613/"
extension=memcache.so;
extension=pdo_mysql.so;
修改php文件生效:
/usr/local/apache2/bin/apachectl restart
#安装Zend加速器
cd /lamp/ZendOptimizer-3.2.6-linux-glibc21-i386
./install.sh
#安装memcache源代码
http://memcached.googlecode.com/files/memcached-1.4.10.tar.gz
首先安装依赖包libevent
Yum –y install libevent*
#主包已经安装,别忘记安装libevent-devel*,不然./configure过不去
Tar xzf /lamp/memcached-1.4.10.tar.gz
Cd /lamp/memcached-1.4.10
./configure --prefix=/usr/local/memcache
Make && make install
Useradd memcache
#因为系统不能用root运行memcache软件
/usr/local/memcache/bin/memcached -umemcache& #后台运行
Netstat –tunpl|grep :11211
telnet 192.168.10.1 11211
stats
写入自启动:
Vi /etc/rc.local
/usr/local/memcache/bin/memcached –umemcache&
#如何杀掉后台进程,用kill%1,查看进程用jobs
#安装brocms源码
主要是为了测试lamp环境编译是否成功,主要测试以下几个地方:
1. pdo
2. pdo-mysql
3. memcache
#要注意memcache,因为它有两个源代码包,一个是php驱动库包(memcache-2.2.5.tgz),另一个是memcache主程序源代码包(memcached-1.4.10.tar.gz);
Apache服务器配置
apache基本知识
/usr/local/apache2/ #apache主目录
/usr/local/apache2/htdocs #网站根目录
/usr/local/apache2/bin/httpd #执行程序
/usr/local/apache2/bin/apachectl #服务脚本
/usr/local/apache2/logs/access_log #访问日志
/usr/local/apache2/logs/error_log #错误日志
/usr/local/apache2/etc/httpd.conf #主配置文件
/usr/local/apache2/etc/extra/ #模板配置文件
index.html #默认首页
apache配置文件
ServerRoot "/usr/local/apache2" #apache的主目录
Listen 80 #在所有接口上监听80端口
LoadModulephp5_module #动态加载php5模块或库文件
User daemon #httpd进程的执行者,httpd进程创建文件的所有者
=>ps -ef |grep httpd
Group daemon #httpd进程创建的文件的所属组
ServerAdmin you@example.com #管理员邮箱
ServerName www.example.con:80 #apache主机名
192.168.100.1:80
DocumentRoot "usr/local/apache2//htdocs" #网站根目录
#apache的目录权限
<Directory/>
<Directory>
#apache控制系统中/目录权限,拒绝所有人访问的,权限是服务权限
<Directory"/usr/local/apache2//htdocs">
Options Indexes FollowSymLinks
AllowOverride None
Order deny,allow
#Deny from all #可以设置先拒绝后允许,标准配置方法
Allow from all
<Directory>
网站根目录的权限控制
Errorlog"log/error_log" #错误日志
Customlog"logs/access_log" common #访问日志所在的地方
AddTypeapplication/x-httpd-php .php
#支持php脚本,而且能够调用LoadMoudle中的php模块去解析php脚本
ErrorDocument404 /missing.html #当页面不存在时显示这个文件
apache个人主页
vi/usr/local/apache2/etc/httd.conf
UserDirpublic_html
<Directory
useradd user1 #准备user1用户
su - user1
mkdirpublic_html
echo user1>public_html/index.html
httpd://192.168.100.1/~user1 #测试
#注意系统权限
setfacl -mu:apache:rwx -R /home
setfacl -md:u:apache:rwx -R /home
apache虚拟目录
作用:
空间扩展
vi /usr/local/apache2/etc/httpd.conf
apache目录访问控制(针对目录的访问控制)
1.options
indexes
#开启网站列表页。文件下载效果,做测试时使用,网站上线时要将其关闭。
multiviews
#多视图,试探性的填补后缀,有安全问题:当web目录下有个web.html,如果直接 输入web,将直接打开web.html,那么web目录就无法进入
followsymlinks
#能够看到快捷方式
2.allowoverride #用户授权和重写规则
all
#/web/uploads中去找一个文件.htaccess文件,这个文件中一般写:用户授权和重写规则
none
3.order
order allow,deny #先允许后拒绝,后面的权限优先
4.allow
allow from all #允许所有
5.deny
deny from all #拒绝所有
apache用户授权
1.vi .htaccess #创建.htaccess用户授权文件
2.生成密码文件.htpasswd
3.重启apache并测试
apache虚拟主机
#一台服务器上可以放多个网站--每个网站都有一个域名
技术背景:
1.同一台服务器,不同的ip,相同端口
2.相同ip,不同端口
3.相同ip,相同端口,不同域名(需要apache的支持)
apache重写功能-rewrite
目的: 1、搜索引擎收录
2、网站升级时,做页面跳转
http://localhost/index.php?id=1 #收录效果不好
http://localhost/index_1.html #收录效果好
http://localhost/index/id/1
http://localhost/index_2.html
配置
1、vi /usr/local/apache2/etc/httpd.conf
做重写功能时,在配置文件中网站设置的options中加入followsymlinks,关掉multiviews可以解决权限问题
2、vi /baidu/.htaccess #将.htaccess写在网站根目录
apache监控功能->server-status
SetHandlerserver-status
apache cgi网关程序(shell脚本|python脚本|shtml技术)
shtml技术是在linux的.s文件中嵌套html语句或cgi脚本
1.放网页:
cd/usr/local/apache2/cgi-bin/
vi index.cgi
iptables防火墙
1. 防火墙过滤(osi七层模型)
在iptables服务器两块网卡的OSI模型中5一条链的应用位置
nat->network address translation
2. snat技术 基于源地址的地址转换技术
3. pat技术 基于端口的地址转换技术(可以绑定拨号服务器的网卡端口,省去修改规则的麻烦)
4. dnat技术--路由器上做端口转换
源端口
1024-65535之间的端口
一台电脑端口1-65535个端口
标准端口:1-1024
非标端口:1024-65535
私有网段
iptables:
1. 表
2. 链 与链有关的全部大写
3. 规则
4.动作 与动作有关的全部大写
三个表
Filter:用于设置包过滤 input、output、forward链放入此表
NAT:用于设置地址转换 prerouting、postrouting、output链放入此表
Mangle:用于设置网络流量整形等应用 5个链都可以在
链:
1. input 来访问防火墙服务器本身
2. output 从防火墙发出去的数据
3. forward 穿过防火墙去其他地方
沿防火墙服务器路由管道访问外网,从内到外,从外到内,都要过forward
当需要让一台linux服务器做路由器时,需要打开其路由管道:
echo1 > /proc/sys/net/ipv4/ip_forward (/proc下的文件是计算机临时配置,重启就丢失)
4. prerouting =>dnat =>把目的公用ip转成公司内部私有ip
数据包准备进来,从2层到3层之间,准备进入路由层之前时
5. postrouting =>snat =>把私有ip改成公司拨号的公用ip
数据包准备出去,从3层到2层之间,刚刚越过路由层时
防火墙环境配置
配置ip
xp 192.168.100.254(vm1)
iptables 左侧192.168.100 .1(vm1) 右侧200.168.100.1(vm2)
web server 200.168.100.254(vm2)
测试是否通路
先iptables机器ping两侧机器
内部xp与外部的web之间本身是通不了的
1、添加xp网关192.168.100.1
2、添加web的网关route add default gw200.168.100.1
3、打开iptables的路由通路
echo 1 >/proc/sys/net/ipv4/ip_forward #可以写入启动项/etc/rc.local
需求1:
不让xp通过防火墙去访问外部的web的web页面(只是阻止对80端口的访问)
iptables -t(表) filter -A(追加) FORWARD -s(源) 192.168.100.254 -d(目的)200.168.100.254 -p tcp --dport(所阻止的目的端口) 80 -jDROP(丢弃)
需求2:
iptables可以ping通web,但是web不能ping通iptables
iptables -t filter -A INPUT -s200.168.100.254 -p icmp --icmp-type echo-request -j DROP
需求3:
通过防火墙机器让公司内部的xp可以去外部上网
iptables -t nat -A POSTROUTING -s192.168.100.0/24 -o eth1 -j SNAT --to 200.168.100.1
需求4:
保障每天公司内部的员工都可以上网,不用每天去加一条snat(将ip绑定到端口上,和端口的ip保持一致)
iptables -t nat -A POSTROUTING -s192.168.100.0/24 -o eth1 -j MASQUERADE
需求5:
让公司外部的人可以访问公司内部的私有web服务器
(xp 去掉网关,web 加上网关,左侧为外部上网用户,右侧为内部web服务器)
iptables -t nat -A PREROUTING -d 200.168.100.1(左侧链接外网网卡ip) -j DNAT --to 192.168.100.254(内部服务器ip)
语法:iptables 表链 规则 动作 #与链和动作有关的全部大写,其他小写
表:
-t filter|nat|mangle 不写表的话就默认对多有表的链进行操作
链:
-L 查看链内的规则 --line-numbers -n
--line-numbers 显示编号
-n 总是显示destination的ip地址
-F 清除链内的规则
-X 删除自定义链
-A 在链的最后追加一条规则
-I 在链的最前面插入一条规则
iptables -I INPUT 3 -s 192.168.100.254 -j DROP
-E 改变链名
-D 删除链内的规则(可以定向删除某条)
iptables -D INPUT 3
-R 替换链内规则
iptables -R INPUT 3 -s 192.168.100.250 -j DROP
-P 修改policy ACCEPT,链的默认动作
规则:
-s 源ip
-d 目的ip
-p tcp --sport|--dport 源端口|目的端口
-p icmp --icmp-type echo-request|echo-reply ping请求(8)和回应(0)
-i 进入的网卡
-o 出去的网卡
动作:
-j
DROP 丢弃
ACCEPT 默认是接受
REJECT 拒绝
SNAT 源IP地址转换技术
DNAT 目的IP地址转换结束
MASQUERADE 内部ip端绑定网卡使用(pat技术)
REDIRECT 重定向
保证防火墙服务器重启后策略还在
service iptables save #将防火墙策略加入系统启动项
零散知识点
strings 读取二进制文件头,如strings /bin/cp
ls -lR #递归的查看目录中的文件
如何验证/etc/rc.local是否配置正确?
source/etc/rc.local #测试启动加载文件配置是否正确 /etc/rc.local
apache是进程管理还是线程管理?
apache是进程管理,apache以后的方向是进程带线程管理
线程管理:并发性好,不稳定,分配内存快,回收内存慢
进程管理:进程之间不相关,一个进程挂掉,其他进程不受其影响,进程数量可以自己 调,回收内存快,稳定性好
面试注意:403(权限)、304等错误‘
主机厂商常见的技术:
虚拟主机,vps,vmware的esx
如何重启服务(mysql为例)
1、杀掉进程
pkill mysqld
2、启动
./mysqld_safe--use=mysql & #&符号指的是后台运行
source /etc/rc.local //模拟启动过程,检测其中的设置是否能正常启动
pkill mysqld //关闭进程
netstat -tunpl |grep :3306 //查看端口
平滑重启kill -HUP pid
如果想要更改配置而不需停止并重新启动服务,请使用该命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。
mysql
远程连接MySql数据库时:
ERROR 1045(28000): Access denied for user 'root'@'localhost' (using password: YES)
远程连接被拒绝;
解决方法:
MySQL> useMySQL;
Database changed
MySQL> grant all privileges on *.* to ‘yourUser’@'%' identified by ‘yourPassword’;
Query OK, 0 rows affected (0.00 sec)
*.*标示所有数据库下的所有表,’*’.*标示数据库*下的所有表
MySQL> grant all on *.* to ‘yourUser’@'%' identified by ‘yourPassword’;
Query OK, 0 rows affected (0.00 sec)
%号出可以填写允许访问的IP地址或者主机名,%标示所有的IP
Flush privileges;
Query OK, 0 rows affected (0.00 sec)
Mysql> exit;