标签:
2015-09-06虚拟机网络设置.wmv:
curl 获取在命令行显示的网页
dhclient 分配ip地址
ifdown eth0 关闭网卡eth0
ifup eh0 开启网卡eth0
ifconfig -a 查看所有网卡设备
service network restart
dhclient 获取ip命令
rout -n 查看网关
命令行光标移动快捷键:
Ctrl+a 移动光标到行首
Ctrl+e 移动光标到行尾
linux里面root为最高权限用户
centos 进入命令行 ctrl+alt+f2
在命令行下 Ctrl+Alt+F2进入图形界面
安装php时缺少的库:
yum install -y libxml2-devel openssl openssl-devel bzip2 bzip2-devel libpng libpng-devel freetype freetype-devel curl-devel libjpeg-devel
linux系统运行级别
命令:init[0123456]
运行级别
0:关机
1:单用户
2:多用户状态没有网络服务
3:多用户状态有网络服务
4:系统未使用保留给用户
5:图形界面
6:系统重启
常用运行级别是3和5,要修改默认的运行级别可改文件/etc/inittab的id:5:initdefault:这一行中的数字
通过历史记录简化操作:
!! 重复前一个命令
!字符 重复前一个以“字符”开头的命令
!?abc 重复之前包含abc的命令
!-n 重复n个命令之前的那个命令
linux配置ip
vi /etc/sysconfig/network-scripts/ifcfg-eth0
配置如下内容
DEVICE=eth0
HWADDR=00:0C:29:16:08:DD
TYPE=Ethernet
UUID=0884c1cf-6613-4c57-9a81-fa27b9723fb1
ONBOOT=no
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.1.177
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
保存退出,service network restart 重启网络命令。
Centos普通用户设置sudo权限
登陆root用户执行visudo命令
找到 root ALL=(ALL) ALL下 在下面增加:
centos ALL=(ALL) ALL
查看centos版本
登陆root帐户,输入 cat /etc/redhat-release,即可显示系统版本
输入 uname -r ,可以查询内核版本。
查看安装的软件包
输入 cat -n /root/install.log,可显示系统安装时所安装的软件包列表。(需要root权限)
获取搜狐源
wget
基本的语法是:wget [参数列表] URL
wget -r http://place.your.url/here
这个命令会按照递归的方法,下载服务器上所有的目录和文件,实质就是下载整个网站。这个命令一定要小心使用,因为在下载的时候,被下载网站指向的所有地址 同样会被下载,因此,如果这个网站引用了其他网站,那么被引用的网站也会被下载下来!基于这个原因,这个参数不常用。可以用-l number参数来指定下载的层次。例如只下载两层,那么使用-l 2。
要是您想制作镜像站点,那么可以使用-m参数,例如:wget -m http://place.your.url/here
这时wget会自动判断合适的参数来制作镜像站点。此时,wget会登录到服务器上,读入robots.txt并按robots.txt的规定来执行。
wget -c http://the.url.of/incomplete/file
使用断点续传要求服务器支持断点续传。-t参数表示重试次数,例如需要重试100次,那么就写-t 100,如果设成-t 0,那么表示无穷次重试,直到连接成功。-T参数表示超时等待时间,例如-T 120,表示等待120秒连接不上就算超时。
3、批量下载。
如果有多个文件需要下载,那么可以生成一个文件,把每个文件的URL写一行,例如生成文件download.txt,然后用命令:wget -i download.txt
这样就会把download.txt里面列出的每个URL都下载下来。(如果列的是文件就下载文件,如果列的是网站,那么下载首页)
经验:执行系统服务时,需要使用root权限才能执行成功如:service network restart
搭建lamp环境
linux jobs
fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z 可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs 查看当前有多少在后台运行的命令
四。fg 将后台中的命令调至前台继续运行,如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg 将一个在后台暂停的命令,变成继续执行,如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
jobs -l 查看后台任务详细信息
kill PIDnumber 杀掉进程
jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;
进程的挂起
后台进程的挂起:
在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;
在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;
当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;
前台进程的挂起:ctrl+Z
进程的终止
后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num
方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid
前台进程的终止:
ctrl+c
kill的其他作用
kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。
SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。 kill -SIGKILL pid kill -SIGKILL pid kill -SIGKILL pid
一、linux系统初讲
2.0单用户模式
reboot 重启 3秒后按任意键
e 移动光标,e键进入编辑模式
选中第二行 按e后,将光标移至最后添加 1 或s 或single。然后回车,最后按b启动,就进入了单用户模式
runlevel 输入命令 runlevel显示单用户模式
passwd 修改root用户密码
reboot 重启root密码已修改
2.1救援模式
将虚拟机启动设置为:虚拟机>电源>启动时进入bios。保存退出
然后设置启动顺序 将boot 里cdrom 设为第一项
进入centos 启动模式选择第三项 rescue installed system 回车
选择语言
选择键盘模式 us默认
是否设置网络
2.3ls命令
ls 查看当前目录下的文件
ll 查看当前目录下的文件详细信息
ll -h 查看当前目录下的文件详细信息以M为单位显示文件大小
二、系统精讲
1.1创建和删除目录
mkdir -pv /tmp/1/2/3 创建父目录 -p: parents 父目录 -v: 可视化
rmdir 234 (非空目录不能删)
rmdir /tmp/1/2/3
tree /tmp/1 查看tmp/1 目录的结构 tree查看目录结构
rmdir -pv /tmp/1/2/3 删除目录(支持删除子目录非空的) -p: parents 父目录 -v: 可视化
1.2rm命令
rm -f 强制 -i 安全位 提示 是否删除 -r 删除目录加上-r(如果不加-r删除目录内有目录,提示会略过目录,不会删目录,只会删目录里的文件) -v可视化
常用 -i -r -f
rm -fr 123 删除目录没有提示
rm -rfv 123 不会提示
1.3cp命令
cp 拷贝文件 (在同一目录下需改变文件名)
cp -rv 111 222 (拷贝目录加-r选项) -v:可视化
df -h 查看分区
1.4移动和重命名mv
rename 重命名
mv 123 -i:安全位 -v:可视化 没有-r选项
1.5文件查看命令
cat 查看文件从头开始内容 -A:查看文件中隐藏的符号
tac 从尾部开始读取内容。
more 从头开始显示,一屏一屏的往下翻(空格键),一行一行的往下翻(Enter);但不可以往上翻
less 从头开始显示,一屏一屏的往下翻(空格键),一行一行的往下翻(Enter);按方向键可以一行一行往上往下翻,按pageup ,pagedn,可以一屏一屏往上或往下翻。小j键可以往下行翻。小k键可以往上行翻。Ctrl+b 往上翻屏 ,Ctrl+f 往下翻屏,小g最前一行,大G最后一行。/搜索关键词 小n键往后跳,往前找大写N。?搜索关键词 小n往上跳,大N往下跳。
head 查看一个文件的前十行 -2:表示查看文件的前二行
tail 查看文件的末尾十行 -3:表示只看最后三行
tail -f 动态查看后十行 不退出,按Enter键往下行翻(当被查看文有变化时,动态的显示出来)
1.6文件和目录属性
- 表示普通文件
d 表示目录
c 字符设备
b 块设备
l 软连接(快捷方式)
s socket
p 管道
所有者,所属组,其他人
rwx rwx rwx
421 421 421
ls -i 印出每个文件的 inode 号
第二字段 文件硬链接数或目录子目录数
第三个字段 文件所有者
第四个字段 文件所属组
第五个字段 文件大小(如果是文件夹则表示文件夹大小)
第六字段 文件创建 月 日 时
第九字段 文件名
1.7chmod命令
chmod 更改文件权限
r=4 w=2 x=1
chmod u=rwx,g=r--,o=r-- 1.txt (分别代表所有者,所属组,其他人)
chmod u-x 1.txt 将1.txt 文件的所有者执行权限去掉
chmod u+x,g+w,o-r 1.txt 将1.txt文件所有者加执行,所属组加写,其他去掉可读
chmod a+r 1.txt 将1.txt的所有人加上可读
chmod -R 700 111 -R:将111目录下的所有子目录子文件继承111目录的权限711
umask 用来规定默认文件的权限 0022 后三位表示 --- -w- -w-
新建目录755
文档 644
linux下的目录必须有x权限;目录为777权限,减umask得到目录默认755权限;文档没有执行权限为666权限,减umask得到文档默认为644权限。
计算权限
1.8chown命令
chown 全称 change owner。 更改文件的所有者或所属组
chown ken 111.txt 更改111.txt所有者为ken
chown :users 111.txt 更改111.txt所属组为users
chown ken:users 111.txt 更改111.txt所有者为ken,所属组为users
chown ken.users 111.txt 更改111.txt所有者为ken,所属组为users(和上面效果一样)
chown -R ken:users 111/ 将当前目录111下的所有的目录和文件的所有者和所属组改为ken users
1.9chattr文件隐藏属性
lsattr 查看特殊属性(特殊权限)
lsattr -R 可以把当前目录下的子文件子目录列出来,子目录下的子文件子目录都列出来(逐层查看文件的隐藏属性)
lsattr -d 只查看目录本身特殊属性
chattr +a 12.txt +a:表示该文件只能追加,不能修改删除,也不能更改文件名
chattr -a 12.txt -a:表示解除该12.txt文件的限制
chattr +i 12.txt 比+a更严谨,不能追加,不能修改删除,也不能更改文件名 (不能做任何操作)
chattr -i 12.txt 解除该12.txt的限制
2.0特殊权限之suid
set_uid 限制于可二进制格式 可执行文件,注意给普通非二进制文件加setuid不起作用 命令:chmod u+s 可执行二进制文件名
which passwd
chmod u+s /tmp/ls 给普通用户添加ls的临时root 权限,
该文件user属主对应的 rwx 有x权限 就显示小s ,没有x权限就显示大S
2.1特殊权限之sgid
set_gid sgid可以让执行该文件的用户临时以该文件属组身份去执行,于set_uid不同是可作用于目录与文件
set_uid=4 set_gid=2 stick_bit=1
2.2特殊权限之sticky
stick_bit 防删除位
一个文件是否可更改,不在于文件本身的属性,而在于文件的父目录属性是否可rwx
更改文件后,所属组和所有者都改变为被更改者
当一个目录的权限为其他人可读可写可执行的时候,那么其他人就可以删除这个目录下的任何文件,包括root
chmod o+t . 把当前目录改为其他用户不可删除
小t的时候,其他用户可读可写可执行,大T的时候其他用户可读可写不可执行
2.3find搜索命令
which 搜索一个命令的位置
find /root/dir/ -name "ken" 在/root/dir/下搜索ken文件
find /root/dir/ -type f 在/root/dir/下搜索文件
find /root/dir/ -type d 在/root/dir/下搜索目录
find /root/dir/ -type b 在/root/dir/下搜索Blok
find /root/dir/ -type c 在/root/dir/下搜索字符设备
find /tmp/ -mtime +10 大于十天 (单位是天)
find /tmp/ -mtime -10 小于十天
find /tmp/ -mtime -365 一年以内
find /tmp/ -mmin -5 5分钟以内
find /tmp/ -mmin +5 大于五分钟
find /tmp/ -atime
find /tmp/ ctime
find /tmp/ -type f -name ken 在/tmp/下查找文件ken
ls -li 查看文件inode
find / -inum inode_number 用inode号码查找文件
find /var/log/ -type f -mtime +30 |xargs rm 将三十天以前的日志删掉
find /tmp/ -type f |xargs -i mv {} {}.bak
2.4三个时间属性
mtime 创建和修改时间
atime 访问时间
ctime 更改文件所有者或所属组时更改文件编号(inode改变这个时间就会变)
stat filename 可以查看文件的三个时间
touch filename 更新三个时间
当更改ctime时 atime 和mtime不一定会改变,
用vim修改了一下文件,那么三个time都会变(修改后要保存)
使用命令echo "111111" >> 1.txt 会更改1.txt ctime 和mtime、
2.5软链接和硬链接
find /etc/ -type l
in -s 软链接,目录和文件都可以做,可跨分区
in 硬链接,inode号不变,不可跨分区(只能在同一各分区下做),目录硬链接不可以做
命令:
ln -s log2013.log link2013
输出:
[root@localhost test]# ll
-rw-r--r-- 1 root bin 61 11-13
06:
03 log2013.log
[root@localhost test]# ln -s log2013.log link2013
[root@localhost test]# ll
lrwxrwxrwx 1 root root 11 12-07
16:
01 link2013 -> log2013.log
-rw-r--r-- 1 root bin 61 11-13
06:
03 log2013.log
说明:
为log2013.log文件创建软链接link2013,如果log2013.log丢失,link2013将失效
2.6用户名文件
cat /etc/passwd/
root:x:0:0:root:/root:/bin/bash 每字段代表: 用户名 密码 uid gid 说明 家目录 shell
将一个用户设置为不能登录
2.7密码文件
cat /etc/shadow
root:$6$alMmEBkwlbfl2J/h$F/QEcBOuE0yjI4WV5Lw4BHJz8w0EoE9zh.MLx4dEg6yUGQKFCdaLBPf4C.8EBFqkVOM0QTZ3qrOiH3dp18gyB0:16719:0:99999:7:::
bin:*:15980:0:99999:7::: *:表示该用户锁定
sshd:!!:16719:::::: !!:表示该账户还没有密码
每字段代表:
用户名
密码
上次更改密码的天数(从1970年的1月1日到更改密码时的那一天)
还需过几天才可以改密码 密码要过多少天后到期(默认99999天)
密码到期前多少天发警告
账号的实效期限(到期后过多少天锁定账号 默认为空)
账号的生命周期(账号可以用多久)
保留值
2.8增加和删除用户组
groupadd ken 添加用户组
tail /etc/group 查看组文件
ken:x:500: 每个字段表示: 组名 组密码 组id
tail /etc/gshadow 查看组密码
!!表示无密码 (组默认没密码)
groupadd -g 512 ken 设置组id
groupdel 删除组
2.9增加和删除用户
useradd ken
tail /etc/passwd
useradd -u 505 -g grp2 user1 创建用户添加用户id和组id
id user1 查看user1的用户id,组id,
useradd -u 508 -g 500 -d /home/user3 -s /sbin/mologin user3 给用户添加家目录,和shell
useradd -M -s /sbin/nologin user3
userdel user3 删除这个用户的时候并不会删除这个用户的家目录
userdel -r user1 删除用户并且删除用户家目录
useradd -s /sbin/nologin mysql 创建用户
linux在创建用户是将用户默认的shell指定为/sbin/nologin即可阻止用户登录,命令为
useradd user -s /sbin/nologin,其中-s指定用户的默认shell
如果用户已经存在于系统,用root身份修改/etc/passwd文件,将要阻止的用户的shell改为/sbin/nologin,如下所示
user:x:502:502::/home/user:/sbin/nologin
3.0usermod修改用户属性
usermod 更改用户组
usermod -g 512 ken 将ken的用户组更改为512
useradd -u 506 -g 502 -G 512 user3 -G:指定用户扩展组
usermod -L ken 锁定用户不让登陆
usermod -U ken 解锁用户
3.1passwd修改用户密码
passwd root登陆时后面没有参数为更改root密码
passwd username 更改普通用户密码
yum install -y expect
mkpasswd 生成密码随机字符串
mkpasswd -l 12
passwd --stdin ken 更改ken的密码
echo "1"|passwd --stdin ken 设定ken密码
3.2su切换用户
id 查看当前用户
whomi 查看当前用户
su 切换用户
su ken 切换至ken ,环境变量并没有切换
echo $PATH
su -ken 环境变量切换
su - 切换至root
su - -c "mkdir /tmp/321432" ken 临时以ken的身份执行某个命令
su - -c "ls -ld /tmp/321432" ken
3.3sudo详解
sudo 命令在权限不够的情况下切换用户
visudo 编辑可以执行sudo的用户
sudo passwd 更改root密码
3.4df命令
df 查看系统分区,-h:自动容量单位显示,-K:以k为单位显示,-m:以M为单位,-i:查看inode
free 查看交换分区
3.5du命令
du 查看目录大小
du -m /etc
du -h /etc -h:自动容量单位显示,-sh:查看一个文件的大小
du -sh filename 查看一个文件占用磁盘空间的大小
du -sh * 查看当前目录所有文件大小
ls -lb filename 查看一个文件本身的大小
3.6fdisk命令
fdisk -l 查看磁盘所有分区状况
fdisk 磁盘名 磁盘分区
一块硬盘最多可分4个主分区,如果想分第五个区,可把其中一个主分区换成扩展分区,然后在扩展分区内建逻辑分区。扩展分区+主分区≤4
n 新建分区
w 保存退出
3.7磁盘格式化mke2fs
cat /etc/filesystems 查看文件系统
mkfs. 按Tab键补全
mkfs.ext4 /dev/sdb5 格式化sdb5为ext4文件系统
3.8磁盘挂载与卸载
mount /dev/sdb5 /mnt/ 挂载/dev/sdb5/到/mnt下
umount /home/
ls /home/
3.9分区表fstab
cat /etc/fstab
vi /etc/fstab
UUID 分区标识
blkid 获取磁盘分区标识
defaults 挂载选项
/etc/rc.local 开机加载配置文件
mount -a 自动加载配置文件的所有配置
mount 查看挂载的选项
三、linux系统提高
1.1vim介绍
yum install -y vim-enhanced 安装vim
vi与vim的区别:打开shell文件后vim显示颜色区分,vi只是全黑色
sut nu 显示行号
1.2vim一般模式下光标移动
vim 一般模式 编辑模式 命令模式
Ctrl+f 一屏一屏往下翻
Ctrl+b 一屏一屏往上翻
pgup
pgdn
gg 光标跳到文档第一行
shift+g 光标跳到文档最后一行
^ 光标跳到行首(或者数字0)
$ 光标跳到行尾(或者数字1)
number + G 将光标跳到指定行
number + 光标方向命令键 向指定方向移动number个位置
1.3vim一般模式下复制剪切粘贴
x 向后一个一个删除
shift+x 向前一个一个删除
number + x 向后删number个字符
dd 删除一行(剪切)
p 粘贴在光标的下面
shift+p 粘贴在光标的上面
u 撤销(最多回退50次)
Ctrl+r 前进
yy 复制
v 可视
1.4vim编辑模式
i 在光标之前插入模式
I 光标到行首插入
a 在光标之后插入模式
A 光标到行尾插入
o 在光标下一行插入
O 在光标上一行插入
1.5vim命令行模式
:wq 保存退出
:w 保存
:q 退出
:q! 强制退出
:set nu 显示行号
:set nonu 不显示行号
:/ (?) 搜索关键词
n 进入搜索后下(上)跳
N 进入搜索后上(下)跳
:/1,20s/IPTABLES/iptables/g g:全局替换
:/1,$s/IPTABLES/iptables/g 1-$:全文
:/%s/IPTABLES/iptables/g
:noh1 取消高亮显示
1.6gzip讲解
gzip filename 压缩文件
du -sh filename 查看文件大小
gzip -1 压缩级别,压缩比例最小,压缩速度最快
gzip -9 压缩比例最大,压缩最慢。(默认是gzip -6)
gzip -d filename.gz 解压缩
zcat filename.gz 查看gzip压缩文件内容
1.7bzip2讲解
大多数情况下bzip2压缩的文件更小些
bzip2 filename 压缩文件bzip2
bzip2 filename.bz2 解压bz2压缩文件
gzip bzip2 都不能压缩目录
bzcat filename.bz2 查看bzip2压缩文件内容
bzcat 默认压缩级别是9
1.8zip和unzip
yum install zip unzip 安装zip压缩和解压缩工具
yum install xz bzip2 gzip
zip filename 压缩文件
unzip filename.zip 解压文件(在压缩后不会删除原文件,可以同时压缩多个目录和文件)
zip -r 可以压缩目录
1.9xz压缩和解压缩
xz gzip bzip2 三者相差不大
xz filename 压缩文件
xz -d filename.xz 解压缩
xzcat filename.xz 查看xz压缩文件内容
xz 压缩级别和bzip2一样(1-9)
2.0tar打包工具详解
tar -cvf c:create创建;v:可视化 ;f:file
tar -cvf 1.tar 111 222 123.gz 打包多个文件(打包不会改变文件大小)
du -sh 1.tar 查看文件大小
du -sh 111 222 123.gz 查看多个文件大小
tar -xvf 1.tar 解包
tar -C /tmp/ xvf 1.tar 解包到指定目录
2.1tar打包和压缩并用
tar 支持 gzip bzip2 xz 三种格式进行打包
tar -zcvf 1.tar.gz 111 222 打包并压缩多个文件
du -sh 1.tar.gz 查看文件大小
tar -zxvf 1.tar.gz 解压打包压缩文件(压缩包不会删除)
tar -tf 1.tar.gz 查看打包压缩文件列表
tar -C /tmp/ -zxvf 1.tar.gz 指定打包压缩路径
tar -jcvf 1.tar.bz2 111 222 打包使用bz2格式压缩
tar -Jcvf 1.tar.xz 111 222 打包使用xz格式压缩
tar -jxvf 1.tar.bz2 解包bz2压缩格式
tar -Jxvf 1.tar.xz 解包xz压缩格式
tar -tf 1.tar.bz2 查看打包bz2压缩文件内容
tar -tJf 1.tar.xz 查看打包xz压缩文件内容
tar --exclude 12.txt -cvf 111.tar 111 打包一个目录下所有文件,排除单个文件(12.txt)
tar --exclude 12.txt --exclude aming -cvf 111.tar 111 打包一个目录下所有文件,排除多个文件
2.2rpm安装和卸载
rpm == RedHat package manager
mount /dev/cdrom /mnt/
cd /mnt/
ls
cd packages/
ls
包名 版本号1主版本,5次版本 el6:红帽企业版6;i686:32位
noarch:表示不区分32位64位
rpm -ivh 包名 i:install v:可视化 h:进度
rpm -e 包名 卸载rpm
rpm -ivh --nodeps 包名 强制安装RPM包(忽略依赖关系)
rpm -Uvh 包名 升级包
2.3rpm查询
rpm -qa 查询已安装rpm包
rpm -q 包名 把一个包全部显示出来(包名不可以简写)
rpm -qa |grep ‘vim*‘ 查询已安装是否包含vim
rpm -qi 包名 i:info 查看一个包详细信息
rpm -ql 包名 l:list 查看一个包安装的文件列表
rpm -qf 文件路径 f:file 查看一个文件是哪个rpm包安装
which vim 查看vim是在哪个目录
rpm -qf /usr/bin/vim 查看vim路径是哪个包安装的
rpm -qf `which vim` 反引号:显示引号内执行的结果
rpm -ivh ‘http://xxxxxx.xxxx.xxx‘ 远程安装rpm包
2.4yum工具详解
yum list 列出yum源中的所有RPM包(网络资源)
vim /etc/yum.repos.d/CentOS-Base.repo 修改源配置文件
yum list |grep vim 查询yum仓库中的vim包(搜索rpm包),已安装过包前显示@
yum list |grep -i mcrypt 查询yum仓库中的mcrypt包(-i:不区分大小写),搜索yum扩展源epel
yum install 包名 使用yum安装rpm包
yum search ‘vim‘ 在yum源中搜索一个rpm包
yum install -y vim-enhanced 安装vi省略问答默认是
yum remove vim-enhanced yum卸载rpm包
yum update 包名 yum升级rpm包
yum update;yum upgrade 升级系统中所有的rpm包
yum grouplist 列出已安装过和未安装套件
LANG=en 将语言设置成英文
LANG=zh_CN.UTF-8 将语言设置成中文
yum groupinstall 套件名
yum groupremove 套件名
2.5搭建本地yum仓库
cp -r yum.repos.d/ yum.repos.d.bak 备份yum配置文件
cd yum.repos.d;ls
rm -rf Centos-Base.repo
yum list 显示本地yum源
vim CentOS_Media.repo 做本地yum源
gpgcheck:是否检测
enabled:是否生效
gpgkey:不要
2.6yum如何下载rpm包到本地
yum install -y yum-plugin-downloadonly 安装yum下载rpm包工具
yum list |grep download 搜索
yum install vim-enhanced --downloadonly --downloaddir=/tmp/ (适用于未安装过)
yum reinstall vim-enhanced --downloadonly --downloaddir=/tmp/ reinstall:重新安装(适用于已安装过)
首先查看本机安装的yum包都有哪些?
[root@test~]# rpm -qa |grep yum
如果安装了此包:yum-utils-1.1.30-14.el6.noarch
假如要下载samba安装包,执行如下命令:
[root@localhost ~]# yumdownloader samba
2.7源码编译安装
源码包安装时先看INSTALL 和 README
/usr/local/src/ 源码包下载存放路径
tar -jxvf http*.bz2
./configure --prefix=/usr/local/apache2 /usr/local/:常用安装源码包路径
echo $?
make
echo $?
make install
ls /usr/local/apache/
四、Shell编程入门
1.1shell特性
history 命令历史(默认只保存1000条)
echo $HISTSIZE 输出1000(此变量为history保存条数)
!! 上一条命令
!$ 前一个命令历史的参数
!c 命令历史中以c开头离得最近的命令
alias 查看取别名的命令
alias aaa=‘cat 1.txt‘
unalias
wc 取行数
> 正向重定向(覆盖写)
>> 追加写
< 反向重定向
2> 错误重定向,把错误信息重定向到文件里
2>> 追加错误重定向
Ctrl+z 暂停掉
jobs 查看运行的任务
+ 优先级高
fg 2(1)
bg 后台
1.2shell变量
env 系统相关变量
set 系统环境变量(比env多,包含env)
`` 反引号:使用一个命令的结果
export 声明全局变量
a=lskd
unset $a 销毁变量
1.3系统和用户的环境变量配置文件
/etc/profile 环境变量文件HOSTSIZE,HISTSIZE,PATH,HOME,SHELL (系统相关环境变量)
/etc/bashrc (系统相关环境变量)
/etc/profile.d/ (自定义环境变量脚本.sh存放位置)
用户家目录 家目录环境变量配置文件
.bash_logout 用户退出时执行脚本
.bash_profile 和/etc/profile 大致一样,针对用户自身定义的环境变量
.bashrc 定义命令别名,当用户打开新bash或者登陆时执行的文件
export 全局声明
vim /etc/profile.d/path.sh
/etc/bashrc
/etc/profile.d/path.sh
source /etc/profile 自动加载/etc/profile.d/下的所有.sh文件
1.4shell中的特殊符号
*| 通配符
# 注释符
; 结束符
& 后台运行
\[] 中括号[]:或 例:ls [12].txt ;ls [1-3].txt
1.5cut命令
cut -d: -f 3,4,5 /etc/passwd -d:指定分隔符 -f:取段
cut -c 1-10 /etc/passwd
cut -d: -f -c
1.6sort命令
sort filename 按照ascll码表排序
sort -t: -k3 -n /etc/passwd -t:指定分隔符
sort -u filename 排序去重复
sort -n filename 按数字从小到大排序
sort -nr filename 按数字从大到小排序
sort -un filename 去重复且把多个字符串显示一个(去掉-n选项后可全部显示)
1.7wc命令
wc -l filename 查看一个文件的行数
wc -l filename filename 查看多个文件的行数
wc -w filename 统计单词数,以空格为分隔符
wc -m filename 查看文件字符数
wc -l filename 查看文件的行数
1.8uniq和tee命令
uniq 去重复
uniq -c 可计算重复的次数
sort filename | uniq -c 先排序,再去重
| tee filename(空文件) 覆盖重定向,并在屏幕输出,需搭配管道命令使用
1.9tr和split命令
tr 替换字符
ls *.txt | tr ‘a-z‘ ‘A-Z‘ 将小写文件后缀替换为大写
echo ‘dfsfsafsdf‘ |tr ‘a-f‘ ‘A-F‘ 将小写转换为大写a-f A-F(tr后面替换的字符一 一对应)
split 切割大文件
split -b 50m filename 按大小分割文件(指定50m分割文件)
split -b 100 filename 按大小分割文件(指定100b分割文件,默认单位为b)
split -l 10 filename 按行数分割文件(指定10行分割文件)
split -b 100 filename word_ 为分割出的文件指定前缀
2.0shell中连接符(并且、和、或者)
ls a && ls b (逻辑与,如果前面的命令为真,才会执行后面命令,如为假,则不会执行后面的命令)
ls a || ls b (逻辑或,如果前面的命令为真,则不会执行后面的命令;如为假,才会执行后面的命令)
2.1grep过滤-1
grep egrep sed awk
grep 过滤除指定行
grep ‘root‘ /etc/passwd
grep --color ‘root‘ /etc/passwd 将查找字符以红色标出
grep -c word filename 查询所有行包含指定字符出现的行数
grep -v word filename 查询所有行不包含指定字符出现的行数
grep -n word filename 显示行号
grep -n -A 2 word filename 显示匹配行,并显示匹配行下指定行数(2行)
grep -n -B 2 word filename 显示匹配行,并显示匹配行上指定行数(2行)
grep -n -C 2 word filename 显示匹配行,并显示匹配行上下指定行数(2行)
grep -r word dirname 遍历目录文件查找指定字符
grep -rh word dirname 不显示文件名,匹配文件
2.2grep过滤-2
grep ‘[aN]‘ filename 查找包含a或N的行
grep ‘[0-9]‘ filename 查找包含数字的行
grep -v ‘[a-zA-Z]‘ filename 查找不包含大小写的行
grep ‘^[a-z]‘ filename 匹配小写字母开头的行
grep ‘[^a-z]‘ filename 匹配不包含字母的行
grep ‘[^$]‘ filename 匹配空行
grep -v ‘[^$]‘ filename 匹配空行以外的行
grep ‘[r.o]‘ filename 匹配r(任一字符 )o的行
grep ‘[r*o]‘ filename 匹配r(一个或多个)o的行
待补充(正则)
2.3grep过滤-3
grep -E === egrep
待补充(正则)
2.4sed命令-1
sed 比grep强大,但是不能颜色显示
sed -n ‘10‘p filename 打印第n行,p:print
sed -n ‘1-10‘p filename 打印第一到10行
sed -n ‘/root/‘p filename 打印包含‘root‘的行
sed -n ‘/r.o/‘p filename 匹配r(任一字符 )o的行
sed -n ‘/r*o/‘p filename 匹配r(一个或多个)o的行
2.5
2.6
2.7
2.8
五、linux平台运维管理
1.1查看系统负载命令
w load average:1分钟之内系统的平均负载(1分钟进程数),5分钟(5分钟平均进程数),15分钟内
uptime 获取负载值
1.2vmstat详解
vmstat -1 1s显示一次
vmstat 1 5
1.3top动态查看负载
top 3s一次动态显示出当前主机运行情况,前一行与vmstat一样
pid 进程编号(ls /proc;此目录里目录名对应进程号)
user 用户
PR
NI 进程优先级
VIRT 虚拟内存
top -bn1 一次性显示出来(静态显示)
SHR 共享内存
top -d 1 -c 1s刷新一次,COMMAND显示的更全点
1.4sar命令
sar -n DEV 查看网卡流量
sar -n DEV 1 10 1s显示一次,一次显示10次
yum install -y sysstat 安装sar命令
ls /var/log/sa/ 查看网络流量历史(18天)
sar -n DEV -f /var/log/sa/sa22/ 查看具体某天的流量历史文件
sar -q 查看系统历史负载
sar -b 1 10 可以查看当前的磁盘io状态
sar -p 1 10 可以查看cpu的使用情况
1.5free查看内存
free 查看内存状况kb
free -m 以M为单位
buffers 数据将要写到磁盘中去的,还在内存占用
cached 从磁盘取出放到内存,这部分空间
free第二行 = buffer + cached
1.6ps查看进程
VSZ 虚拟内存大小
RSS 实际内存大小(内存使用量)
TTY 启动地方
STAT S:表示休眠;
s:表示主进程;
<:优先级高;N:表示次进程低优先级;+:前台运行的进程;R:runing运行中;L:在内存锁定;l:多线程进程;Z:僵尸进程;x已死掉进程;T:暂停进程;D:不能中断的进程
START 启动时间
TIME 占用cpu时间
CANMAND 进程名称
1.7netstat查看端口
netstat -lnp 查看监听端口
netstat -an tcpip,socket都显示出来
netstat -an|grep -ic estab 查看某一时刻服务器的连接数(并发数)
1.8抓包工具tcpdump和tsshark
yum install tcpdump
tcpdump -nn
(待补充)
1.9防火墙selinux
cat /etc/selinux/config 查看selinux配置
(待补充)
2.0iptables详解-1
netfilter----iptables
iptables -nvL 查看有那些规则
iptables -F 清除规则
表 列 规则
iptables -t filter -nvL 指定表名,filter表下的规则(filter[较常用],nat,mangle。三个表)
filter INPUT OUTPUT 列
iptables -t filter -I INPUT -p tcp --dport 80 -s 192.168.1.177 -j REJECT 插入规则不允许192.168.1.177访问 (-I:在表上面增加)
iptables -t filter -nvL 在不指定标明的时候默认是filter表
iptables -t filter -D INPUT -p tcp --dport 80 -s 192.168.1.177 -j REJECT 删除规则
iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.177 -j REJECT 添加规则(-A:在表下面增加)
相同规则的时候表上面的规则先生效
2.1iptables详解-2
iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.177 -j DROP 不接收包
iptables -t filter -A INPUT -p tcp --dport 80 -s 192.168.1.177 -j ACCEPT
iptables -z 清空规则计数器
iptables -F 清空规则(只针对filter表)
iptables -t nat -nvL 查看nat下的所有表
iptables -t filter -A INPUT -p tcp --dport 80(端口号可省略) -s 192.168.1.177 -j REJECT
service iptables restart; 重启iptables服务(重启后新添加的iptables会失效)
service iptables save; 保存新添加的iptables
cat /etc/sysconfig/iptables; iptables配置保存路径
iptables-save > 1.ipt 防火墙规则备份
iptables -F
service iptables save; 清空规则并保存
2.2iptables详解-3
1.filter 定义允许或者不允许的
2.nat 定义地址转换的
3.mangle功能:修改报文原数据
这五个位置也被称为五个钩子函数(hook functions),也叫五个规则链。
1.PREROUTING (路由前)
2.INPUT (数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
这是NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链。
对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT
对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING
而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。
input 进来
output 出去
FORWARD (转发。iptables中有几个表,分别针对不同的目的,有本地输入、本地产生的输出、转发等。。。FORWARD这个表,用于控制转发行为,也就是说根据定义的规则,决定对从外边来到 另一个地方去的包是丢弃、PASS还是怎么处理。)
filter 指定来源ip拒绝
iptables -t filter -nvL 查看所有规则
nat 网络地址转换
iptables -t nat -nvL
PREROUTING 改变的是数据包过来的的时候目标ip地址
POSTROUTING 在数据包出去之前改变原ip(私网ip)
mangle 给数据包打标记
iptables -t mangle -nvL
2.3iptables详解-4
filter 表 INPUT OUTPUT
iptables -A INPUT 增加input
iptables -D INPUT 删除input
iptables -P -P的作用是定义链的默认规则
四:详解COMMAND:
1.链管理命令(这都是立即生效的)
-P :设置默认策略的(设定默认门是关着的还是开着的)
iptables -P INPUT (DROP|ACCEPT) 默认是关的/默认是开的
比如:
iptables -P INPUT DROP 这就把默认规则给拒绝了。并且没有定义哪个动作,所以关于外界连接的所有规则包括Xshell连接之类的,远程连接都被拒绝了。
-F: FLASH,清空规则链的(注意每个链的管理权限)
iptables -t nat -F PREROUTING
iptables -t nat -F 清空nat表的所有链
-N:NEW 支持用户新建一个链
iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。
-X: 用于删除用户自定义的空链
使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了
-E:用来Rename chain主要是用来给用户自定义的链重命名
-E oldname newname
-Z:清空链,及链中默认规则的计数器的(有两个计数器,被匹配到多少个数据包,多少个字节)
iptables -Z :清空
2.规则管理命令
-A:追加,在当前链的最后新增一个规则
-I num : 插入,把当前规则插入为第几条。
-I 3 :插入为第三条
-R num:Replays替换/修改第几条规则
格式:iptables -R 3 …………
-D num:删除,明确指定删除第几条规则
3.查看管理命令 “-L”
附加子命令
-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。
-v:显示详细信息
-vv
-vvv :越多越详细
-x:在计数器上显示精确值,不做单位换算
--line-numbers : 显示规则的行号
-t nat:显示所有的关卡的信息
五:详解匹配标准
1.通用匹配:源地址目标地址的匹配
-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
IP | IP/MASK | 0.0.0.0/0.0.0.0
而且地址可以取反,加一个“!”表示除了哪个IP之外
-d:表示匹配目标地址
-p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)
-i eth0:从这块网卡流入的数据
-o eth0:从这块网卡流出的数据
2.扩展匹配
2.1隐含扩展:对协议的扩展
-p tcp :TCP协议的扩展。一般有三种扩展
--dport XX-XX:指定目标端口,不能指定多个非连续端口,只能指定单个端口,比如
--dport 21 或者 --dport 21-23 (此时表示21,22,23)
--sport:指定源端口
--tcp-fiags:TCP的标志位(SYN,ACK,FIN,PSH,RST,URG)
2.必须为1的标志位
--tcpflags syn,ack,fin,rst syn = --syn
表示检查这4个位,这4个位中syn必须为1,其他的必须为0。所以这个意思就是用于检测三次握手的第一次包的。对于这种专门匹配第一包的SYN为1的包,还有一种简写方式,叫做--syn
-p udp:UDP协议的扩展
--dport
--sport
-p icmp:icmp数据报文的扩展
--icmp-type:
echo-request(请求回显),一般用8 来表示
所以 --icmp-type 8 匹配请求回显数据包
echo-reply (响应的数据包)一般用0来表示
2.2显式扩展(-m)
扩展各种模块
-m multiport:表示启用多端口扩展
之后我们就可以启用比如 --dports 21,23,80
六:详解-j ACTION
常用的ACTION:
DROP:悄悄丢弃
一般我们多用DROP来隐藏我们的身份,以及隐藏我们的链表
REJECT:明示拒绝
ACCEPT:接受
DNAT
SNAT
MASQUERADE:源地址伪装
REDIRECT:重定向:主要用于实现端口重定向
MARK:打防火墙标记的
RETURN:返回
(policy ACCEPT 804K packets,402M bytes) 接受的包数据量
ACCEPT (接受)
DROP (落下,丢下)
REJECT (拒绝,驳回)
iptables -P INPUT DROP (危险:请注意这条语句的参数,是-P ,-P的作用是定义链的默认规则,也就是通过所有规则后还没有匹配到的数据包,将按照默认规则来执行。
-P DROP后,只有满足定义了ACCEPT规则的包才能通行,其他的包都按照默认的DROP干掉了。)
2.4cron计划任务
2.5系统服务
yum install -y ntsysv 安装系统管理服务软件
ntsysv 打开管理界面,设置完后需重启系统才能生效
chkconfig --list 查看所有系统服务
chkconfig --
0-6 0:关机;1:单用户模式;23;4:6重启
chkconfig 服务名 off 关闭服务,控制级别2、3、、4、5
chkconfig 服务名 on 开启服务,控制级别2、3、、4、5
chkconfig --level 34 服务名 on 将某服务的34级别开启
chkconfig --add 添加系统服务
chkconfig --del 删除系统服务
/etc/init.d 系统服务所在目录
2.6linux日志
/var/log/messages
/etc/logrotate.conf 日志切割文件
kill pid 杀死进程
kill -9 强制杀死进程
dmesg 查看某个硬件出现问题
2.7xargs和exec详解
find /var/log/ -type f -mtime +10 查看10天以前的日志
find /var/log/ -type f -mtime +10 -exec cp {} {}.bak \; 重命名一些文件以.bak后缀(-exec是find的一个选项)
find /var/log/ -type f -mtime +10 | xargs -i cp {} {}.1 重命名一些文件以.1后缀(使用管道达到效果)
2.8screen命令
nohup
yum install -y screen
screen 新窗口执行命令,ctrl+a+d(展示退出)(虚拟终端)
screen -ls 查看screen
screen -r screenid 进入screen某一进程
2.1curl命令
curl -I 网站地址 不看源代码,查看状态
curl -x 代理
curl -IV 网址 显示详细信息
curl -O 文件网址 下载文件 (文件名为下载的名称)
curl -o 文件名 文件网址 下载文件需重命名
3.0rsync格式
rsync 拷贝数据(可增量拷贝)
rsync -av ip地址:/tmp/1.txt /tmp/ 将远程文件拉到本地
rsync -av /tmp/1.txt ip:/tmp/ 将本地文件推到远程
(待补充)
3.1rsync常用选项
rsync -a
3.2rsync选项详解
六、LAMP架构搭建与优化
1.1Mysql安装
cat /usr/local/mysql/bin/mysqlbug|grep configuore mysql查看编译参数
1、安装
查看有没有安装过:
yum list installed mysql*
rpm -qa | grep mysql*
查看有没有安装包:
yum list mysql*
安装mysql客户端:
yum install mysql
安装mysql 服务器端:
yum install mysql-server mysql-devel
2、启动&&停止
数据库字符集设置
mysql配置文件/etc/my.cnf中加入default-character-set=utf8
启动mysql服务:
service mysqld start或者/etc/init.d/mysqld start
开机启动:
chkconfig -add mysqld,查看开机启动设置是否成功chkconfig --list | grep mysql*
mysqld 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
停止:
service mysqld stop
3、登录
创建root管理员:
mysqladmin -u root password 123456
如果root已经设置过密码,采用如下方法
./mysqladmin -u root password oldpass ‘123456’
登录:
mysql -u root -p输入密码即可。
忘记密码:
service mysqld stop
mysqld_safe --user=root --skip-grant-tables
mysql -u root
use mysql
update user set password=password("new_pass") where user="root";
flush privileges;
4、远程访问
开放防火墙的端口号
mysql增加权限:mysql库中的user表新增一条记录host为“%”,user为“root”。
5、Linux MySQL的几个重要目录
数据库目录
/var/lib/mysql/
配置文件
/usr/share /mysql(mysql.server命令及配置文件)
相关命令
/usr/bin(mysqladmin mysqldump等命令)
启动脚本
/etc/rc.d/init.d/(启动脚本文件mysql的目录)
编译安装二进制包安装mysql
修改mysql的root用户密码,root初始密码为空的:执行命令:./bin/mysqladmin -u root password ‘密码‘
1.2Apache编译安装
cat /usr/local/apache2/build/config.nice 查看apache编译参数
apachectl -v 查看apache版本
apachectl -l 查看apache运行模式 q
tar jxf httpd-2.2.31.tar.bz2
./configure --prefix=/usr/local/apache2 --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --with-pcre (apache配置选项)
make
make install
配置参数详解:
--with-included-apr (httpd软件依赖的包,能够跨平台运作linux win unix mac)
--enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared (动态共享的模式安装)
--with-pcre (正则相关的库)
/usr/local/apache2/bin/apachectl start 启动apache
/usr/local/apache2/modules/ apache动态模块加载路径
/usr/local/apache2/bin/apachectl -M 查看apache加载模块(动态和静态模块)
/usr/local/apache2/bin/apachectl -l 查看apache加载模块(静态)
/usr/local/apache2/bin/apachectl -t 查看apache配置文件有无错误
/usr/local/apache2/bin/apachectl graceful 重新加载配置文件
# cp /usr/local/apache/bin/apachectl /etc/init.d/httpd
如果想把apache服务加入到开机自启,可以修改服务启动脚本:
# vim /etc/init.d/httpd
在第二行下添加:# chkconfig:235 85 15
# description: This is apache server!
# vim /etc/httpd/httpd.conf
安装Apache2.4.7版本。
下载地址为:http://mirrors.sohu.com/apache/
tar zxvf httpd-2.4.7.tar.gz #解压文件
cd httpd-2.4.7 #进入目录
./configure --prefix=/usr/local/apache2/ --sysconfdir=/usr/local/apache2/etc --with-included-apr --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared #编译参数
错误
configure: error:Bundled APR requested but not found at./srclib/.
tar zxvf apr-1.4.6.tar.gz #解压apr包
tar -zxvf apr-util-1.4.1.tar.gz #解压apr-util包
cp -r /lamp/apr-1.4.6 /lamp/httpd-2.4.7/srclib/apr
cp -r /lamp/apr-util-1.4.1 /lamp/httpd-2.4.7/srclib/apr-util # 然后把两个包复制到httpd-2.4.7/srclib/ 里面并且取消版本号。
错误:
configure: error: in `/lamp/httpd-2.4.7/srclib/apr‘:
configure: error: no acceptable C compiler found in $PATH
See `config.log‘ for more details
configure failed for srclib/apr
yum -y install gcc-c++ #安装 gcc
错误:
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
tar zxvf pcre-8.34.tar.gz
[root@localhost lamp]# cd pcre-8.34
[root@localhost pcre-8.34]# ./configure && make && make install
错误
checking whether to enable mod_deflate... configure: error: mod_deflate has been requested but can not be built due to prerequisite failures
yum -y install openssl-devel
把上面4个错误解决后。重新 ./configure 参数编译 无问题就执行
make
make install
/usr/local/apache2/bin/apachectl start # 启动apache
启动完后用以下命令检查apache是否正常启动,
ps aux |grep httpd
netstat -an |grep :80
如果不能启动 请清空防火墙规格。关闭selinux
iptables -F
service iptables save
通过浏览器输入地址访问:http://192.168.137.30 (我服务器的地址) 。若能显示“It works”表明apache正常工作。
设置Apache系统开机是自动开启。
vim /etc/rc.d/rc.local
增加一行 把下面增加进去。
/usr/local/apache2/bin/apachectl start
1.3 Apache的mpm工作模式
/usr/local/apache2/bin/apachectl -l
prefork.c 子进程 (进程模式,占用内存大,高并发异常时不影响其他进程)
worker 线程(线程模式,占用内存小,高并发异常时影响其他线程)
event 线程形式比worker好些 性能(线程模式,占用内存小,高并发异常时影响其他线程 )
ps aux|grep httpd 主进程 小写s
./configgure --help | grep A3 ‘with-mpm‘ 查看apache编译参数(mpm参数)
--with-mpm=worker 在配置安装的时候指定apache,mpm为线程形式
1.4php编译安装-安装顺序在最后
安装php5.5版本。
tar zxvf php-5.5.9.tar.gz #解压php安装包
cd php-5.5.9 #进入php文件
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif --disable-ipv6 --with-mcrypt=/usr/local/libmcrypt/ #编译参数
错误configure: error: xml2-config not found. Please check your libxml2 installation.yum install -y libxml2-devel错误configure: error: Please reinstall the BZip2 distribution
yum install -y bzip2 bzip2-devel错误
configure: error: jpeglib.h not found.
yum install libjpeg-devel -y
错误
configure: error: png.h not found.
yum install libpng-devel -y
错误
configure: error: freetype-config not found.
yum install -y freetype freetype-devel
错误
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
tar zxvf mcrypt-2.6.8.tar.gz #提示mcrypt包没有安装。安装mcrypt包 又依赖依赖 libmcrypt, mhash 这两个包。
1.首先编译安装 libmcrypt, mhash, mcrypt 二进制源码包。
下载libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8
./configure --prefix=/usr/local/related/libmcrypt
make
make install
安装 libltdl,也在libmcrypt源码包里面
cd libmcrypt-2.5.8 /libltdl
./configure --enable-ltdl-install
make
make install
下载mhash-0.9.9.9.tar.gz
tar zxvf mhash-0.9.9.9
cd mhash-0.9.9.9
./configrue --prefix
make
make install
这两个包安装完。然后在安装mcrypt包。
安装mcrypt
tar zxvf mcrypt-2.6.8.tar.gz
LD_LIBRARY_PATH=/usr/local/libmcrypt/lib:/usr/local/lib ./configure --with-libmcrypt-prefix=/usr/local/libmcrypt #编译参数
make
make install
#mcrypt 没有安装完成。这是php模块。需要等php安装完成之后。在继续安装。
把以上的依赖关系解决完了之后在继续安装PHP
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-libxml-dir --with-gd --with-jpeg-dir --with-png-dir --with-freetype-dir --with-iconv-dir --with-zlib-dir --with-bz2 --with-openssl --with-mcrypt --enable-soap --enable-gd-native-ttf --enable-mbstring --enable-sockets --enable-exif --disable-ipv6 --with-mcrypt=/usr/local/libmcrypt/
make
make install
生成php.ini
cp /lamp/php-5.5.9/php.ini-production /usr/local/php/etc/php.ini
apache结合php
Apache的主配置文件为 :/usr/local/apache2/etc/httpd.conf #参数编译的时候指定到/usr/local/apache2/etc/ 这个目录下。
vim /usr/local/apache2/etc/httpd.conf
找到AddType application/x-gzip .gz .tgz 这一行在下面增加
AddType application/x-httpd-php .php
找到:<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
将中间一样的内容改为:DirectoryIndex index.html index.htm index.php
修改完成后保存退出。
启动前检测apache的配置文件是否正常。
/usr/local/apache2/bin/apachectl -t
如果显示“Syntax OK” 表示正常。
启动apache
/usr/local/apache2/bin/apachectl start
检测是否启动成功。
netstart -lnp |grep httpd
/usr/local/apache2/bin/apachectl graceful 加载apache配置文件 不用重启
/usr/local/apache2/bin/apachectl -t 查看php配置文件是否正常
/usr/local/php/bin/php -i |more 能查看php安装信息。。./configure 内容 等等
cat /usr/local/apache2/build/config.nice 查看apache 安装的编译代码
cat /usr/local/mysql/bin/mysqlbug |grep -i confi 参看musql安装的编译参数
1.5测试php解析
Linux下查看Nginx、Napache、MySQL、PHP的编译参数的命令如下:
1、nginx编译参数:
#/usr/local/nginx/sbin/nginx -V
2、apache编译参数:
# cat /usr/local/apache/build/config.nice
3、php编译参数:
# /usr/local/php/bin/php -i |grep configure
4、mysql编译参数:
# cat /usr/local/mysql/bin/mysqlbug|grep configure
1.6安装Discuz
下载discuz-utf-8版本
编辑 vim /usr/local/apache2/conf/httpd.conf
编辑 vim/usr/local/apache2/conf/extra/httpd-vhosts.conf
ServerAdmin 管理员邮件
DocumentRoot 指定web目录
ServerName 服务器名称
ServerAlias 服务器别名
vim /etc/hosts
将 Deny from all改为Allow from all
ps aux |grep httpd 查看哪个用户运行apache
更改discuz程序目录所有者和所属组
vim /etc/profile.d/path.sh
source 重新加载配置文件
create databases discuz 创建数据库
grant all on discuz.* to ‘ken‘@‘localhost‘ identified by ‘ken‘; 赋予用户权限
1.登录mysql
#mysql -u root -p
2.新增用户
insert into mysql.user(Host,User,Password) values("localhost","xxx",password("***"));\
注释:xxx为新建用户名,***为用户密码
3.执行该句后,还需要刷新权限表
flush privileges;
4.赋予用户权限
grant all on ttt.* to xxx@localhost identified by "***";
注意:ttt为数据库名,当然你也可以填* 为所有数据库
5.赋予权限,还需要再刷新权限表
flush privileges;
6.通过sql语句查询出新增结果
select user,host,password from mysql.user;
7.mysql 查看所有用户
select * from mysql.user
select * from mysql.user \G; 当表的列太多现实不正常时,\G横项显示
1.7apache用户认证
用vim打开/usr/local/apache2/conf/extra/httpd-vhosts.conf文件
<Directory /data/www/abc/>
AllowoVerride Authconfig
Authname "ni hao xian sheng"
AuthType Basic
AuthUserfile /data/.htpasswd
Require valid-user
</Directory>
然后从新加载一下apache就可以le
1.## 这里设置的目录为真实目录,并非虚拟目录
2. AllowOverride AuthConfig 为允许认证
3. AuthType 认证类型 Basic 由 mod_auth 提供
4. AuthName 这里定义的内容将在 web 弹出的登陆框中显示
5. AuthUserFile 定义认证文件路径 ,不要放在可能被下载到的地方
6. Require user 定义允许访问的用户
配置完这一步接下来建立验证文件
Htpsswd -c /data/.htpasswd ken(如果要在添加一个用户的话不加c选项)
New password:
Re-type new password:
|
1.8默认虚拟主机
配置默认虚拟主机
用vim打开/usr/local/apache2/conf/extra/httpd-vhosts.conf
<VirtualHost *:80>
DocumentRoot "/tmp/123"
ServerName www.23.com
#ServerAlias www.meiqianzenmeweihuganqing.com
#ErrorLog "logs/dummy-host.example.com-error_log"
#CustomLog "logs/dummy-host.example.com-access_log" common
</VirtualHost>
指定一个不存在的目录DocumentRoot 在/tmp/下创建123 (防止起启动的时候报错) /tmp/然后在降低文件的的权限 chmod 600 /tmp/123这样就不会访问到的,其目的是为了安全、只允许指定的域名访问。
<VirtualHost *:80>
DocumentRoot "/tmp/123"
serverName 234.com
</VirtualHost>
mkdir /tmp/123 创建空目录
chmod 600 /tmp/123 更改目录权限
apache 默认虚拟主机就是第一个
铭哥,看下我理解的对不对.\n视频里演示禁止访问虚拟主机; 在这个虚拟主机配置里写入了两个选项,第一个为默认的访问,里面把指定的目录/tmp/123权限设置为600,并且域名是随便设置的.当windows端浏览器输入的域名凡是指向到虚拟主机配置文件里默认访问的都会因为deamon用户没有/tmp/123权限而出现403的访问错误; 而在浏览器输入的域名解析指向到配置文件里第二个访问地址的, 因为deamon对指定目录有足够权限,所以能正常访问.
位置在第一个的虚拟主机,为默认的主机,凡是域名指向过来,都会解析到这个来。所以,当有一个新的站点想在服务器上跑的时候,需要额外去配置一个新的虚拟主机配置段
1.9域名301跳转
301域名跳转的配置
用vim /usr/local/apache2/conf/extra/httpd-vhosts.conf中进行配置
<VirtualHost *:80>
ServerName www.xxx.com
ServerAlias www.yyy.com
DocumentRoot /var/www/html/aminglinux
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.aaa.com$(条件)
RewriteRule ^(.*)$ http://www.yyy.com$1 [R=permanent,L]或[R=301,L](规则)301永久从定向302临时重定向L表示结束了
</IfModule>
</VirtualHost>
多域名时在条件后面加[OR]或者的意思
在linux中用curl进行测试命令格式 curl -xip 域名 -I
301 域名永久重定向跳转时为了让搜索引擎更快的找到
302 域名临时重定向
2.0apache日志切割
将Errorlog 和Customlog 设为绝对路径
按天分割apache访问日志:CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/test.com-access_%Y%m%d_log 86400" common
date -s "2016-01-03 01:01:00" 设置时间
2.1apache不记录指定文件类型日志
SetEnvIf Request_URI ".*\.gif$" image-request
SetEnvIf Request_URI ".*\.jpg$" image-request
SetEnvIf Request_URI ".*\.png$" image-request
SetEnvIf Request_URI ".*\.bmp$" image-request
SetEnvIf Request_URI ".*\.swf$" image-request
SetEnvIf Request_URI ".*\.js$" image-request
SetEnvIf Request_URI ".*\.css$" image-request
CustomLog "|/usr/local/apache2/bin/rotatelogs -l /usr/local/apache2/logs/oem.discuz.com-access_%Y%m%d.log 86400" combined
env=!image-request
2.2apache配置静态缓存
curl -x127.0.0.0:80 ‘http://www.test.com/static/image/common/logo.png‘ -I
<IfModule mod_expires.c>
ExpiresActive On
ExpiresDefault A86400
ExpiresByType image/x-icon A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/css A2592000
ExpiresByType image/gif A604800
ExpiresByType image/png A604800
ExpiresByType image/jpeg A604800
ExpiresByType text/plain A604800
ExpiresByType application/x-shockwave-flash A604800
ExpiresByType video/x-flv A604800
ExpiresByType application/pdf A604800
ExpiresByType text/html A900
</IfModule>
2.3apache配置防盗链
位置一般情况下在 /usr/local/apache/conf/httpd.conf
或者apache 2.2 的 /usr/local/apache2/conf/extra/httpd-vhost.conf
添加
SetEnvIfNoCase Referer "^http://www.ccvita.com" local_ref
SetEnvIfNoCase Referer "^http://ccvita.com" local_refSetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
(Allow : 允许(白名单) Deny:拒绝 )
还一种写法,是用正则的,这种写法在各个版本的apache比较通用。
写法是
SetEnvIfNoCase Referer "^http://.*\.yourdomin\.com" local_ref
SetEnvIfNoCase Referer ".*\.yourdomin\.com" local_ref
SetEnvIfNoCase Referer "^$" local_ref
<filesmatch "\.(txt|doc|mp3|zip|rar|jpg|gif)">
Order Allow,Deny
Allow from env=local_ref
</filesmatch>
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qianling3439/archive/2009/02/05/3864248.aspx
2.4apache访问控制
Order (排序:设置执行顺序) 可以选择 先执行allow 还是 deny
2.5apache禁止解析php
针对于 /data/www/data 目录
1.将php引擎关闭
2.filesmatch 将所有ip禁止访问,只允许127.0.0.1
2.6apache禁止指定user_agent、
设置禁止curl 和 chrome 访问
用curl 设置user_agent模拟chrome访问
2.7apache通过rewirte限制某个目录
2.8php.ini配置文件详解
php -i 可以查看php.ini文件所在路径loaded Configuretion File => php.ini路径
; php.ini 的作为注释符号
# shell 的注释符号
disable_function = (禁用的函数)
php错误级别:
php错误日志输出配置
open_basedir = /data/www/discuz:/tmp (防止入侵者访问系统重要目录,此处限制只能访问/data/www/discuz或者/tmp)
在apache虚拟主机配置openbasedir (与直接在php.ini里修改的好处是:可以区分不同的虚拟主机)
2.9php扩展模块如何安装
php -i |grep php.ini
在php源码包目录下, 找到/usr/local/src/php-5.3.27/ext/gd ext目录为存放动态加载模块的安装包
进入需要的包后如:cd gd
使用php工具/usr/local/php/bin/phpize 生成configure
此时在gd目录生成了configure安装文件
./configure --with-php-config=/usr/local/php/bin/php-config 固定配置
make
make install
php -m 查看php加载哪些模块
extension_dir php动态模块库的存放路径(在php.ini中可以指定extension_dir 所在目录)
php -i |grep extension_dir 查看extension_dir目录(扩展模块目录)
grep ‘^extension=‘ /usr/local/php/etc/php.ini 查看哪些模块是动态加载的
在php.ini中添加动态模块
此处,程序会在extension_dir中寻找curl.so文件,找不到会报错
3.0mysql配置讲解
/etc/my.cnf mysql配置文件
Key_buffer_size = 256M 存储缓冲区大小
Table_open_cache = 256 打开表的数量
mysql连接数
查询超过1s 记录 mysql慢查询Mysql调优帖子地址
3.1mysql的root密码重置
mysqladmin -uroot -p(空可省) password ‘ken‘
忘记密码编辑配置文件:vim /etc/my.cnf 添加一行 skip-grant
直接登录
使用mysql库:use mysql
更新root用户密码: update user set password=password(‘ken‘) where user=‘root‘
3.2mysql登陆
mysql -uroot -h192.168.1.177 -P3306 -p123456 mysql远程登陆,-u用户名 ,-h指定host,-P指定端口,-p密码
3.3mysql常用操作-1
mysql -uroot -p123456;
show databases; 查看所有数据库
use mysql 选择数据库(可不加分号,其他时候需加分号;)
select database() 查看自身所在哪个数据库
select user(); 查看用户
select version(); 查看版本号
show tables; 查看所有表
desc tablename; 查看表结构(字段,是否非空,主键)
show create table tablename\G; 查看某个表是如何创建的
insert into tablename values ‘‘ 插入表数据
delete from tablename where clonename=‘cloneid‘ 删除表数据
truncate table tablename 清空表数据
drop table tablename 删除表
3.5mysql备份与恢复
mysqldump mysql备份工具
mysqldump -uroot -pken mysql > /data/mysql.sql 选项依次是:用户名 密码 数据库名 重定向文件名
mysql -uroot -pken discuz < /data/mysql.sql 利用反向重定向恢复数据库
数据库表文件默认对应在 /data/mysql/mysql/ 下的.frm .MYD .MYI myisam存储引擎
mysqldump -uroot -pken mysql user > /data/user.sql 备份数据表
mysql -uroot -pken mysql < /data/user.sql 利用反向重定向恢复数据表(不需要加表名)
六、LNMP架构搭建与优化
1.1php编译安装
1.4nginx启动脚本和配置文件
在/usr/local/conf/nginx/nginx.conf 目录下写入脚本文件,然后去掉server部分,添加外部引入语句: include vhost/*.conf;
保存退出在当前目录下创建vhost文件夹,vhost目录下创建default.conf,并将访问目录设置成一个(nginx用户)不可访问的目录,作为默认虚拟主机,防止误解析。去掉php解析部分代码(设置默认虚拟主机后php解析没有用了)
创建test.conf虚拟主机配置文件
注意第一个为默认虚拟主机 root:/tmp/www; deny all 做限制解析
1.5php-fpm配置文件
php-fpm.conf 和 php.ini 前者是php服务配置文件,后者是php全局配置文件
/usr/local/php/etc/php-fpm.conf
1.6常见502问题解决
Permission denied 不可读
在php-fpm.conf文件中添加下面两行
listen.owner = nobody
listen.group = nobody
php-fpm -t 查看配置是否正确
1.7nginx用户认证
curl -x127.0.0.1:80 uken:1 www.test.com/admin.php 使用curl的用户名密码登陆访问控制的文件,-u用户名:后跟密码,x指定ip
打红线部分为nginx解析php的代码
1.8nginx域名跳转
直接在server_name 后添加如:
301重定向语句
if ($host !=‘www.test.com‘)
{
}
1.9nginx不记录指定文件类型日志
在nginx虚拟主机配置文件root /data/www 下一行添加访问日志路径: access_log /tmp/access.log combined_realip;
然后再添加不记录指定文件类型日志如下:
2.0nginx日志切割
vim /usr/local/sbin/nginx_logrotate.sh
#!/bin/bash
d=`date -d "-1 day" +%F`
[-d /tmp/nginx_log] || mkdir /tmp/nginx_log
mv /tmp/access.log /tmp/nginx_log/$d.log
/etc/init.d/nginx reload > /dev/null
cd /tmp/nginx_log/
gzip -f $d.log
gzip -f 如果日志已经压缩过,使用-f选项可以强制压缩覆盖不提醒
2.1nginx配置静态文件过期时间
location ~ \.(js|css)
{
access_log off;
expires 2h;
}
2.2nginx配置防盗链
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|rar|zip|gz|bz2)$
{
access_log off;
expires 15d;
valid_referers none bloked *.test.com *.aaa.com;
if ($invalid_referer)
{
return 403;
}
}
测试:curl -e "http://baidu.com/erwds" -I -x192.168.1.178:80 ‘http://test.com/static/image/logo.png
curl -e选项可以指定referer
2.3nginx的访问控制
location ~ .*admin\.php$ {
allow 127.0.0.1;
deny all;
include fastcgi_parems;
fastcgi_pass unix:/tmp/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www$fastcgi_script_name;
}
curl -x192.168.1.178 指定来源ip
白名单和黑名单
2.4nginx禁止指定user_agent
if ($http_user_agent ~ ‘curl|baidu|1111‘)
{
return 403;
}
测试curl -A "fsdjlksdfbaidu" -x192.168.1.178:80 test.com -I curl -A选项指定user_agent
2.5nginx代理详解
vim proxy.conf
upstream ken {
server 61.135.169.125:80;
server 61.135.169.121:80;
}
server {
listen 80;
server_name baidu.com www.baidu.com;
location / {
proxy_set_header Host $host;
}
}
(待整理)
七、linux常用服务部署与优化
1.1nfs部署和优化-1
NFS == network file system
yum install -y nfs-utils rpcbind 客户端与服务端通信rpcbind
vim /etc/exports
写入:/mnt 192.168.1.177(rw,sync) 选项rw可读可写,ro可读
/etc/init.d/rpcbind start
/etc/init.d/nfs start
在客户端安装:yum install -y nfs-utils
showmount -e 192.168.1.178
mount -t nfs 192.168.1.178:/mnt /opt
df -h 查看磁盘使用情况
2.2nfs部署和优化-2
/mnt 192.168.1.177(rw,sync,all_squash,anonuid=500,anongid=500)
客户端执行:umount /opt/ (出现:umount.nfs: /opt: device is busy 加上-l选项:umount -l /opt/ )
重新挂载:mount -t nfs -onolock,nfsvers=3 192.168.1.178:/mnt /opt (-o:不加锁,nfsvers指定版本)
2.7mysql主从配置-1
replication 主从也叫AB复制(把主的日志复制到从上,从根据日志将数据复制,从而的达到两个数据库数据保持一致)。
需要把A操作的动作记录下来,然后把数据推到从上去。
rm rf /usr/local/mysql 删除旧版本mysql
cd /usr/local/src 下载源码包保存路径
3.5iredmail安装
iRedmail:postfix 发邮件 dovecot 收邮件 apache mysql openldap policyd amavisd
roundcube awstat fail2ban iRedAdmin
cd patches
sed -i ‘s/iredmail.org/106.187.51.47/g‘ get_all.sh
cd ..
sh iRedMail.sh
阿铭linux笔记
标签:
原文地址:http://www.cnblogs.com/zhaofuyun/p/5122332.html