工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表全部文章

虚拟主机用户ftp和apache用户文件互操作及删除等解决方法

这个问题以前遇到过,也设置过,但时间久了也就忘了,再GG到这篇文章,作个记录了

 

近来用linux虚拟主机学习了一下linux下的权限比较高级一点的权限管理,当我们使用PHP程序的时候,在安装好以后,如果你想删除整个目录,你会发现apache用户生成了一些文件,ftp的用户不能删除.

其实这是有办法解决的。

方法1.用户组控制方法
先给所有的虚拟主机主机中的虚拟用户(ftp用户)加入到apache这个组.然后设置umask为002.这样用户和组都有读写执行权限。这个是比较容易的方法.但不安全。不同的用户可以删除对方的文件,因为是同一个组,组有读写执行的权限.

方法2.使用linux高级的权限管理acl。

对一个目录设置二重权限,除了用户本身的用户组,在加入apache对他要读写执行的权限.
这样用户就能删除apache生成的文件.但为别人的组,别的虚拟用户他没法删除.

下面我们就来看看第二种的控制方法

linux系统里面,并不是只能为所有者,同组用户和其他用户这三类人分配一个文件(目录)的权限,你还可以指定其他的用户或者组,不过有个前提,挂载分区的时候加上acl选项,比如:
mount /dev/hda1 /home -o acl。

然后你可以使用
setfacl -m u:ftp:rwx /home/ftp/www
命令来给ftp用户分配/home/ftp/www目录的所有权限

如果你要/home/ftp/www/下面新建的目录和文件也有同样的权限
setfacl -d -m u:ftp:rwx /home/ftp/www

设置默认的权限,这个命令还可以实现多个用户的不同权限的控制,比如
setfacl -m u:ftp:rwx /home/www;
setfacl -m u:tmp:r-x /home/www;
ftp用户拥有所有权限,tmp用户拥有只读权限。

你还可以设置mask的值:
setfacl -m m::rwx /home/www;

这样,新建的你就可以让虚拟主机的用户和apache用户都有权限操作文件和目录了,比如apache用户的用户名是apache,虚拟主机的用户名是vmuser,目录是/home/vmuser/www,可以使用以下的命令:
setfacl -m u:vmuser:rwx /home/vmuser/www;
setfacl -m u:apache:rwx /home/vmuser/www;
setfacl -d -m u:vmuser:rwx /home/vmuser/www;
setfacl -d -m u:apache:rwx /home/vmuser/www;
setfacl -m m::rwx /home/vmuser/www;
setfacl -d -m m::rwx /home/vmuser/www;

这样,在安装PHP程序的时候,就不会提示你apache的用户没有权限写文件,而你想删除一个目录的时候,也不会因为下面有apache用户生成的文件而不能删除了。当然这个办法有点局限就是基本上只有ext2和ext3分区格式能用,其他的,比如xfs,jfs等不能直接使用,修改后才能使用

Linux下关注硬盘的健康状态

smartmontools
CentOS 5.3默认安装,smartmontools-5.38-2.el5.i386,可以执行rpm -q smartmontools或yum info smartmontools或yum list smartmontools查看。
使用方法:
命令行执行smartctl -h查看帮助信息,更详细的帮助信息可以通过man smartctl命令获得。
smartctl -i /dev/sda //查看硬盘的基本信息
smartctl -H /dev/sda //查看硬盘的健康状态
smartctl -c /dev/sda //查看smart功能,如错误记录、离线盘面扫描、自检所需时间等信息。
smartctl -l selftest /dev/sda //查看上一次硬盘selftest结果
smartctl -l error /dev/sda //查看最近5条错误记录
smartctl -t TEST //执行磁盘测试,TEST为所要执行的测试名,如offline, short, long
smartctl -X //退出磁盘测试
smartctl -A /dev/sda //查看厂商数据

几种硬盘自检功能的说明:
1、offline
2、short
3、long
4、select,N-M
5、select,N+SIZE
6、conveyance

在执行硬盘自检的过程中如何监视进度:
如果smart -c /dev/sda命令返回的信息有说"Suspend Offline collection upon new command",那么可以通过执行smart -c /dev/sda在"Self-test execution status:"这一项来跟踪自检的进度;否则若"Abort Offline collection upon new command",则在自检的过程中不能执行其他命令,否则自检过程将被终止。

关于执行自检测试的模式:
-C选项:对于short/long以及ATA硬盘的conveyance/selective自检,-C选项表示执行captive mode自检,对应于SCSI硬盘的foregroud mode。

其他:
smartd一个守护进程,收集分析磁盘的SMART参数,并可以根据设定将其发给指定用户。通常可以用来监视硬盘状态,当存在危险情况时提醒用户备份数据。
配置文件:/etc/smartd.conf

PHP使用mail函数发送邮件 UTF8编码时标题会乱码

PHP程序使用mail()函数发送邮件的时候,标题中文的话会出现乱码。

解决方法:

先用函数base64_encode() — 使用 MIME base64 对数据进行编码

标题字符串前加编码类型例如: =?UTF-8?B?

标题字符串后加:?=

邮件header说明Content-type — 防止邮件正文也乱码

举例:

以下为引用的内容:

 $to         = 'xinple@example.com';
$subject  = "=?UTF-8?B?".base64_encode('邮件标题')."?=";
$headers  = 'MIME-Version: 1.0' . "rn";
$headers .= 'Content-type: text/html; charset=utf-8' . "rn";
// Additional headers
$headers .= 'To: Xinple <xinple@example.com>' . "rn";
$headers .= 'From: Admin <admin@example.com>' . "rn";
$headers .= 'Reply-To: Xinple <xinple@example>' . "rn";
mail($to, $subject, $message, $headers);

有关Mysql Errno:24的解决方案

100710 10:35:49 [ERROR] /www/servers/mysql/libexec/mysqld: Can't open file: './ix/ecm_sessions.frm' (errno: 24)
100710 10:35:49 [ERROR] /www/servers/mysql/libexec/mysqld: Can't open file: './ix/ecm_sessions.frm' (errno: 24)
100710 10:35:49 [ERROR] /www/servers/mysql/libexec/mysqld: Can't open file: './ix/ecm_sessions.frm' (errno: 24)

A.2.17. 文件未找到

如果遇到“ERROR '...'未发现(errno: 23)”无法打开文件:... (errno: 24)”,或来自MySQL的具有errno 23errno 24的其它错误,它表示未为MySQL服务器分配足够的文件描述符。你可以使用perror实用工具来了解错误编号的含义:

shell> perror 23
错误代码23:文件表溢出
shell> perror 24
错误代码24:打开文件过多
shell> perror 11
错误代码11:资源暂时不可用

这里的问题是,mysqld正试图同时打开过多的文件。你可以通知mysqld不要一次打开过多文件,或增加mysqld可用文件描述符的数目。

要想通知mysqld将一次打开的文件控制在较小的数目上,可降低table_cache系统变量的值(),从而减少表高速缓冲(默认值为64)。降低max_connections的值也能降低打开文件的数目(默认值为100)。

要想更改mysqld可用的文件描述符的数目,可在mysqld_safe上使用“--open-files-limit”选项或设置(自MySQL 3.23.30开始)open_files_limit系统变量。请参见5.3.3节,“服务器系统变量”。设置这些值的最简单方式是在选项文件中增加1个选项。请参见4.3.2节,“使用选项文件”。如果mysqld的版本较低,不支持设置打开文件的数目,可编辑mysqld_safe脚本。在脚本中有1个注释掉的行ulimit -n 256。你可以删除#’字符取消对该行的注释,更改数值256,以设置mysqld可用的文件描述符数目。

“--open-files-limit”ulimit能够增加文件描述符的数目,但最高不能超过操作系统限制的数目。此外还有1个“硬”限制,仅当以根用户身份启动mysqld_safemysqld时才能覆盖它(请记住,在该情况下,还需使用“--user”选项启动服务器,以便在启动后不再以根用户身份继续运行)。如果需要增加操作系统限制的对各进程可用文件描述符的数目,请参阅系统文档。

注释:如果运行tcsh shellulimit不工作!请求当前限制值时,tcsh还能通报不正确的值。在该情况下,应使用sh启动mysqld_safe

来自mysql手册 http://dev.mysql.com/doc/refman/5.1/zh/problems.html

 

此次修改了 max_connections,将其原来的500减小到200,正常

问题的原因,可能是其它人修改了配置,开始时连mysql都启动不了,在日志里,有比较多的如

100710 10:08:58 [ERROR] /www/servers/mysql-5.1.47/libexec/mysqld: Table './mysql/db' is marked as crashed and last (automatic?)
repair failed 

100710 10:08:58 [ERROR] Fatal error: Can't open and lock privilege tables: Table './mysql/db' is marked as crashed and last (aut
omatic?) repair failed

开始以为是mysql的数据表文件坏了,且又修复不了,便重新安装了份mysql的库文件,再恢复相关的用户表,后可以启动了,但仍很多上面提示的 Can't open file,再google后,再调整,正常

 

使用ultraiso制作linux u盘安装盘

将光盘镜像文件.iso用ultraiso打开

 

选择 启动光盘 菜单

 

选择 写入硬盘映像 选项

 

选择硬盘驱动器 即U盘所在盘符

 

选择写入方式,usb-zip,不行的话也可以试试其他选项。

 

写入完毕后,就可以使用U盘启动电脑,当成光盘安装程序了。

 

前提,电脑要支持usb-zip启动。

Linux系统中打开文件数量的查看和设置方法

ulimit -n 4096

    也就是限制用户的最大文件打开数为4096个
    在网上查了关于怎么查看文件打开数的文章大致有两种说法
    /proc/sys/fs/file-nr
    该文件与 file-max 相关,它有三个值:
    已分配文件句柄的数目[来源[url]www.iocblog.net[/url]]
    已使用文件句柄的数目
    文件句柄的最大数目
    该文件是只读的,仅用于显示信息。
    查看所有进程的文件打开数
    lsof |wc -l
    查看某个进程打开的文件数
    lsof -p pid |wc -l
 
系统设置--ulimit
语  法:ulimit [-aHS][-c <core文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小>][-t <CPU时间>][-u <程序数目>][-v <虚拟内存大小>]

补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源。

参  数:
  -a  显示目前资源限制的设定。 
  -c <core文件上限>  设定core文件的最大值,单位为区块。 
  -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
  -f <文件大小>  shell所能建立的最大文件,单位为区块。 
  -H  设定资源的硬性限制,也就是管理员所设下的限制。 
  -m <内存大小>  指定可使用内存的上限,单位为KB。 
  -n <文件数目>  指定同一时间最多可开启的文件数。 
  -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
  -s <堆叠大小>  指定堆叠的上限,单位为KB。 
  -S  设定资源的弹性限制。 
  -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
  -u <程序数目>  用户最多可开启的程序数目。 
  -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。
 
 
Linux系统的文件句柄数量问题
linux下面部署应用的时候,有时候会遇上socket/file: can‘t open so many files的问题,其实linux是有文件句柄限制的(就像winxp?),而且默认不是很高,一般都是1024,作为一台生产服务器,其实很容易就达到这个数量,因此我们需要把这个值改大一些。
 
  大概知道ulimit这个命令是相关的,上google搜索了一下,大多数说的很含糊,也没有统一说一下,经过两个小时看了不少文章终于弄清楚ulimit相关的一些配置问题。
 
  我们可以用ulimit -a来查看所有限制值,我只关心文件句柄数量的问题
 
  open files (-n) 1024
 
  这个就是限制数量
 
  这里,有很多ulimit的文章都说的很含糊,究竟这个1024是系统的限制,还是用户的限制呢。其实,这个是用户限制来的,完整的说法,应该是当前用户准备要运行的程序的限制。
 
  1、这个限制是针对单个程序的限制
 
  2、这个限制不会改变之前已经运行了的程序的限制
 
  3、对这个值的修改,退出了当前的shell就会消失
 
  比如说,我先运行了一个程序a,然后通过ulimit修改了限制为2048,然后运行b,然后退出了shell再登录,然后运行c.那就只有b可以打开2048个句柄。
 
  如果我们需要改变整体的限制值,或者我们运行的程序是系统启动的,应该怎么处理呢
 
  其中一个方法,是想ulimit修改命令放入/etc/profile里面,但是这个做法并不好
 
  正确的做法,应该是修改/etc/security/limits.conf
 
  里面有很详细的注释,比如
 
  * soft nofile 2048
 
  * hard nofile 32768
 
  就可以将文件句柄限制统一改成软2048,硬32768
 
  这里涉及另外一个问题,什么是软限制,什么是硬限制
 
  硬限制是实际的限制,而软限制,是warnning限制,只会做出warning
 
  其实ulimit命令本身就有分软硬设置,加-h就是硬,加-s就是软
 
  默认显示的是软限制,如果修改的时候没有加上的话,就是两个一起改
 
  配置文件最前面的一位是domain,设置为星号代表全局,另外你也可以针对不同的用户做出不同的限制
 
  修改了,重新登录用ulimit一开就立刻生效了,不过之前启动过的程序要重新启动才能使用新的值。我用的是centos,似乎有些系统需要重启才能生效。
 
  ulimit其实就是对单一程序的限制
 
  那系统总限制呢
 
  其实是在这里,/proc/sys/fs/file-max
 
  可以通过cat查看目前的值,echo来立刻修改
 
  另外还有一个,/proc/sys/fs/file-nr
 
  只读,可以看到整个系统目前使用的文件句柄数量
 
  查找文件句柄问题的时候,还有一个很实用的程序lsof 
  可以很方便看到某个进程开了那些句柄
 
  也可以看到某个文件/目录被什么进程占用了。

查找最耗iowait的进程

/etc/init.d/syslog stop
echo 1 > /proc/sys/vm/block_dump
dmesg | egrep "READ|WRITE|dirtied" | egrep -o '([a-zA-Z]*)' | sort | uniq -c | sort -rn | head

echo 0 > /proc/sys/vm/block_dump
/etc/init.d/syslog start

Maatkit是非常不错的mysql管理工具

Maatkit是非常不错的mysql管理工具,网络评价非常不错。包含以下主要工具:
1、mk-table-checksum 检查主从表是否一致的有效工具
2、mk-table-sync 有效保证表一致的工具,不必重载从表而能够保证一致。
3、mk-visual-explain  exlpain解释工具
4、mk-heartbeat 主从同步的监视工具,能够给出从落后于主多少
5、mk-parallel-dump 多线程的mysqldump工具
6、mk-parallel-restore 多线程的表回复工具
7、mk-query-profiler 查询检测分析工具
8、mk-deadlock-logger 死锁的记录工具,支持innodb
9、mk-duplicate-key-checker key侦测工具
10、mk-show-grants 权限管理显示工具
11、mk-slave-restart slave的检测和重启工具
12、mk-slave-delay slave delay replication 的工具
13、mk-slave-prefetch  This tool implements Paul Tuckfield’s famous“oracle” algorithm to read ahead of the slave SQL thread in the relaylogs, rewriting queries as SELECT and executing them to warm theslave’s caches. This can help an I/O-bound slave SQL thread run fasterunder some