linux 杂记
nginx:
语法规则:
~ 开头表示区分大小写的正则匹配
~* 开头表示不区分大小写的正则匹配
!~和!~*分别为区分大小写不匹配及不区分大小写不匹配 的正则
/ 通用匹配,任何请求都会匹配到。
#设置expires缓存
location ~.*\.(jpg|png|jpeg)$ {
expires 30d;
}
#设置不被防问的目录
location ~ ^/(application|library|var)/ {
deny all;
}
vsftpd 连接非常慢:
vsftpd域名反向解析导致,修改本机dns或者vsftpd.conf里添加:reverse_lookup_enable=NO(有的vsftpd版本可能不支持)
pad数据回收linux自动更新:
更新文件命名:updateV01.sh
nginx url请求转发:
location /gettime {
proxy_pass http://172.16.0.1:8061/ServerHttpListener.ashx;
}
当客户端请求localhost/gettime时,服务器请求http://172.16.0.1:8061/ServerHttpListener.ashx,并将请求结果返回。、
nginx防盗链:
location ~ \.(jpe?g|png|gif)$ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
alid_referers指令包含允许访问资源的网站列表,不在列表中请求的返回403.
none - 匹配没有Referer的HTTP请求(Matches the requests with no Referer header).表示空的来路,即在浏览器里直接打开的。
blocked - 请求有Referer ,但是被防火墙或者代理服务器修改,去掉了https://或http:// (Matches the requests with blocked Referrer header).表示被防火墙标记过的来路。
*.mydomain.com - 匹配mysite.com的所有二级域名(Matches all the sub domains of mydomain.com. Since v0.5.33, * wildcards can be used in the server names).
禁止访问某个目录下所有文:
location /images/ {
valid_referers none blocked mysite.com *.mysite.com; //referer中不包含这里配置的网站的,返回403或rewrite
if ($invalid_referer) {
return 403;
rewrite ^/ http://www.mysite.com/;
}
}
=============================================================================================
dd 生成文件:
dd if=/dev/zero of=hello.tar.gz bs=1M count=50
日志的统计:
cat /home/log/access.log | awk '{print $7}' | uniq -w 18 | wc -l //uniq -w 18 :从第18个字符开始,不作为去重的依据
cat access.log | awk '{print $7}' | uniq -w 18 | grep -v '^$'| awk -F '-' '{print $2}' | sort |uniq -c //去重、排序、统计重复行数 grep -v'^$'去掉空行
自定义yum源:
[base]
name=123
baseurl=file:///opt/
enabled=1
gpgcheck=0
if [ "$user" != "root" ] || [ "$ip" != 192.168.1.9 ]
==============================================================================================
mysql:
>delete from user表 where user='xlh_users'
>insert into mysql库.user表(Host,User,Password) values("localhost","xlh_uesrs",password("w2xlh_cmsfa3sdh")); //创建账户
>grant all privileges on xlh_cms.* to xlh_uesrs@localhost identified by 'w2xlh_cmsfa3sdh'; //创建新用户并授权
>select database();//查看当前库
>grant select on database.table to user@localhost;
>update mysql.user set password=password('新密码') where User="test" and Host="localhost"; //修改密码
mysqladmin -u root password 'xlh@CMS' //修改root密码
mysqldump -u root -p 123456 dbname >dbname.sql
mysqldump跨主机备份:
#mysqldump -uroot -p123 databasename | mysql -hip -uroot -p123 -C databasename(提前创建)
若要求完整性,可以先关闭所有打开的表并加锁,再备份:
>flush tables with read lock;
然后mysqldump。。。
>unlock tables; 释放锁
> alter table wz_content_share add message varchar(100); 增加字段
>create user 'mysql'@'%' identified by 'mysqLdxlH^%'; 添加用户
远程连接mysql服务器失败,“RROR 1130 (HY000): Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server”。
原因:数据库不允许远程连接
修改:从本机登录mysql,然后 >update user set host='%' where user='xlh_user;然后 >flush privileges;
GRANT ALL PRIVILEGES ON *.* TO 'xlh_uesrs'@'%' IDENTIFIED BY 'w2xlh_cmsfa2sdh' WITH GRANT OPTION; //允许xlh_uesrs用户以w2xlh_cmsfa2sdh为密码从任何机器远程连接mysql
> grant select on database.table to 'username'@'%'; //授权用户对某表有可读权限
mysql5.7中,将mysql.user表中的password字段改成了authentication_string。
mysql乱码:
1、确保服务器数据库编码为utf8:
修改mysql.cnf:
[mysqld]添加:
character_set_server = utf8
init_connect = 'SET NAMES utf8'
collation_server = utf8_general_ci
[client]添加:
default-character-set = utf8
查看mysql编码:
mysql> show variables like 'character_set_%';
导入sql文件:
mysql -uroot -proot --default-chatacter-set=utf8
然后导入
===============================================================================================
用zip命令对文件加密压缩和解压:
压缩:
方法1:zip -re filename.zip filename 回车,输入2次密码
方法2:zip -rP passwork filename.zip filename passwork是要输入的密码
解压:
方法1:unzip filename.zip 按提示输入密码
方法2:unzip -P passwork filename.zip passwork是要解压的密码,这个不会有提示输入密码的操作
用tar和openssl对文件加密压缩和解压:
压缩:
tar -zcvf - hello|openssl des3 -salt -k 123456 | dd of=hello.tar.gz //将hello压缩为hello.tar.gz,密码为123456
解压:
dd if=hello.tar.gz |openssl des3 -d -k 123456|tar zxf - //注意最后的 - ,表示释放所有的文件
===============================================================================================
apache主机配置:
多域名:
配置多主机之前,启用 ServerName www.example.com:80 和 NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin root@xilehan.com
DocumentRoot /home/www/www
ServerName ifecms.xilehang.com
<Directory /home/www/www>
Options FollowSymLinks
AllowOverride Options FileInfo
Order allow,deny
Allow from all
php_admin_value open_basedir /home/www/:/tmp/
DirectoryIndex index.php index.html
</Directory>
ErrorLog "| /usr/sbin/rotatelogs /home/logs/%m_%d_xilehang.com-error_log 86400 480"
CustomLog "| /usr/sbin/rotatelogs /home/logs/%m_%d_xilehang-access_log 86400 480" common
</VirtualHost>
<VirtualHost *:80>
ServerAdmin root@xilehang.com
DocumentRoot /home/shareco
ServerName www.shareco.com.cn
ServerAlias www.sharecovip.com www.sharecovip.cn www.sharecovip.net www.shareco.club
<Directory /home/shareco>
Options FollowSymLinks
AllowOverride Options FileInfo
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
</VirtualHost>
若是多端口号的,如有8001和9001,需要在配置文件中添加:listen 8001 listen 9001
新安装apache,访问页面报错:/var/www/ifc/.htaccess: Option MultiViews not allowed here,
解决:将虚拟主机里的 “AllowOverride Options FileInfo” 修改为 “AllowOverride All”即可。
================================================================================================
Ipython基本使用:
!+shell命令
%run+脚本文件
%paste:复制后,在ipython中输入该魔术命令回车后就会粘贴。
%reset:清除interactive命名空间,释放内存。
%logstart:打开日志记录,可以记录所有的输入,包括之前的。
%logoff:关闭日志。
‘_’和‘__’分别保存两个最近的输出结果。
‘_i10’表示第十行的输入,‘_10’表示第十行的输出。
$+变量名
程序执行错误中断后,执行%debug定位异常发生位置。
=================================================================================================
hadoop集群免密码ssh登录:
服务器A:
将/etc/ssh/ssh_config中的 #StrictHostKeyChecking ask 改为 StrictHostKeyChecking no (远程连接时,禁止询问确认)
生成公钥和私钥:ssh-keygen
在家目录的.ssh目录下生成id_rsa和id_rsa.pub(若没有.ssh目录,可手动创建)
在.ssh目录下手动创建authorized_keys文件,设置权限为600
将id_rsa.pub文件内容拷贝到服务器B上的authorized_keys文件中
服务器B:
将B服务器生成的id_rsa.pub内容粘贴到A服务器的authorized_keys文件中。
操作同服务器A。
即:将自身生成的公钥id_rsa.pub内容分别粘贴到其他服务器的authorized_keys中(authorized_keys文件可以存放多个id_rsa.pub内容)
A免密码登陆B:
1、在A机器中生成公钥和私钥
2、将A中的公钥(id_rsa.pub)内容拷贝到B机器.ssh目录下的authorized_keys文件中 (没有.ssh目录可以手动创建,在用户家目录中)
3、设置权限:
chmod 700 /home/username/.ssh/
chmod 600 /home/username/.ssh/*
4、A本地配置服务器基本信息(适用于非22端口)
在本地.ssh/目录下创建config文件,内容如下:
Host 200 HostName 192.168.0.200 Port 1234 User ahaii IdentityFile ~/.ssh/id_rsa
配置完成。
==========================================================================================================================
命令行安装kvm:
确认cpu支持虚拟化:egrep '(vmx|svm)' --color=always /proc/cpuinfo
安装kvm:
yum install kvm kmod-kvm qemu libvirt python-virtinst
确认kvm模块加载:lsmod | grep kvm。若没有,则需执行:modprobe kvm-intel (或者kvm-amd)
创建虚拟机网卡配置文件ifcfg-br0:
cp ifcfg-eth0 ifcfg-br0
ifcfg0br0:
DEVICE=br0
TYPE=Bridge
修改物理机网卡配置文件ifcfg-eth0:
添加:BRIDGE=br0
virt-install 创建虚拟机:
virt-install --connect qemu:///system --name centos1 --ram 2000 --vcpus=2 --disk path=/home/centos1.img,size=50 --accelerate --cdrom=/home/Centos.iso --vnc --noautoconsole --os-type linux --os-variant generic26 --network=bridge:br0 --hvm
windows安装:
virt-install --connect qemu:///system --name Windows --ram 2000 --vcpus=2 --disk path=/home/vm/Windows2008r2.img,size=200 --accelerate --cdrom=/home/cn_windows2008r2.iso --vnc --noautoconsole --os-type windows --os-variant win2k8 --network=bridge:br0 --hvm
报错:"ERROR Guest name'centos1' is already in use"
执行virsh undefine cetnos1 报错:"error:Refusing to undefine while domain managed save image exists"
执行"virsh undefine centos1 --managed -save"
注:每启动一个kvm虚拟机的安装任务,系统中就会启动一个qemu-kvm进程。
使用ubuntu通过vnc连接客户机:
ubunut安装virt-manager:sudo apt-get install virt-manager
运行:sudo virt-manager启动
新建ssh连接到物理机(物理机和虚拟机同一个ip),连接成功后可以看到该物理机下运行的虚拟机,右键选择虚拟机选择打开,即开始安装虚拟机系统。
在物理机执行virsh 然后list可以列出正在运行的虚拟机
关闭虚拟机:
virsh shutdown centos1,若无效,需要在虚拟机里安装acpid服务(yum install acpid -y),然后重启虚拟机。
克隆虚拟机:
virt-clone -o centos1 -n centos2 -f /home/centos2.img(根据centos1,克隆centos2,在/home/下生成centos2.img)
卸载virbr0网卡:
1、virsh net-destroy default
2、virsh net-undefine default
3、service libvirtd restart
kvm创建快照:
首先关闭虚拟机
#格式转换
qemu-img convert -f raw Hadoop2-1.img -O qcow2 Hadoop2-1.qcow2 &
#修改虚拟机配置文件,将格式raw改为qcow2,文件名Hadoop2-1.img改为Hadoop2-1.qcow2
virsh edit Hadoop2-1
raw->qcow2
Hadoop2-1.img->Hadoop2-1.qcow2
#创建快照
virsh snapshot-create Hadoop2-1
#查看快照
virsh snapshot-list Hadoop2-1
#根据配置文件生成虚拟机,并启动:有 xxx.xml文件和源文件
virsh create xxx.xml
#恢复暂停状态的虚拟机
virsh resume kvm_name
====================================================================================================
install mysql 5.5:
1、install cmake:
cd cmake-2.8.5
./bootstrap
make
make insall
2、install mysql 5.5.21
yum install ncurses-devel (报错后安装的,需要删除CMakeCache.txt,然后重新cmake)
groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql
cd mysql-5.5.21
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/home/mysql/ -DSYSCONFDIR=/etc -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAUL_CHARSET=utf8
make
make install
初始化:
/usr/local/mysql/
chown -R mysql:mysql .
./scripts/mysql_install_db --user=mysql --datadir=/home/mysql/ --basedir=/usr/local/mysql/
cp support-files/my-huge.cnf /etc/my.cnf
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
chmod 755 mysqld
service mysqld start
#mysql远程连接慢:
配置文件里添加:skip-name-resolve
---------------------------------------------------
nagios安装配置:
(默认已有LNMP环境)
nagios服务端安装配置:
参考:http://addcn.blogbus.com/logs/110904533.html
nagios客户端安装配置:
yum install openssl openssl-devel
useradd -s /sbin/nologin nagios
1、安装 nagios-plugins
./configure
make
make install
chown nagios.nagios /usr/local/nagios/
chown -R nagios.nagios /usr/local/nagios/libexec/
2、安装nrpe
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
vim /usr/local/nagios/etc/nrpe.cfg
allowed_hosts=nagios服务端IP
启动:
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
检测:
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
报错:
CHECK_NRPE: Error - Could not complete SSL handshake.
解决:
yum install xinetd
serice xinetd start
杀掉nrpe进程,重启:/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d
nagios服务端安装nrpe:
./configure
nake all
make install-plugin
连接客户端测试:/usr/local/nagios/libexec/check_nrpe -H 客户端IP
服务端添加被监控主机:
添加被监控主机配置文件:
cp /usr/local/nagios/etc/objects/localhost.cfg /usr/local/nagios/etc/objects/103.103.103.103.cfg
chown nagios.nagios 103.103.103.103.cfg
将 103.103.103.103.cfg文件的localhost改成103.103.103.103
/usr/local/nagios/etc/nagios.cfg
添加:
cfg_file=/usr/local/nagios/etc/objects/103.103.103.103.cfg
重启nagios服务:/etc/init.d/nagios restart
ftp连接慢:
解决:
reverse_lookup_enable=NO
nagios插件返回值级别:
插件返回值 | 服务状态 | 主机状态 |
---|---|---|
0 | 正常(OK) | 运行(UP) |
1 | 告警(WARNING) | 运行(UP)或宕机(DOWN)/不可达(UNREACHABLE)* |
2 | 紧急(CRITICAL) | 宕机(DOWN)/不可达(UNREACHABLE) |
3 | 未知(UNKNOWN) | 宕机(DOWN)/不可达(UNREACHABLE) |
Linux 中文件名编码的问题:
从windows向linux上传中文名字的文件后,在linux中显示乱码,修改一下文件名编码即可:
安装convmv:
yum install convmv
更改文件名编码:
convmv -f GBK -t UTF-8 --notest *.png #将gbk编码格式转换为utf8
1、关于iptables基于ip地址的nat转发:
将内网172.16.0.0网段转换成连接外网的192.168.0.103,eth0为192段ip地址的网卡。
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth0 -j SNAT --to 192.168.0.103
保存iptables配置并重启:
/sbin/service iptables save
service iptables restart
2、关于iptables基于端口的nat转发:
将所有对103.103.103.103:8009端口的请求转发到内网172.16.0.36的8009端口上
iptables -t nat -A PREROUTING --dst 103.103.103.103 -p tcp --dport 8009 -j DNAT --to-destination 172.16.0.36:8009
iptables -t nat -A POSTROUTING --dst 172.16.0.36 -p tcp --dport 8009 -j SNAT --to-source 103.103.103.103
==============================================================
linux挂载大于2T的硬盘:
使用parted
parted /dev/sdx
mklabel gpt
unit TB 设置TB为单位
mkpart primary 0 4 创建一个4T的分区
print 查看分区
quit
mkfs.ext4 /dev/sdx1