格式1:chmod [-R] {[ugoa][+-=][rwxst]} 文件名或目录名
格式2:chmod [-R] {[ugoa][+-=][ugo]} 文件名或目录名
说明
-R 如果操作对象为目录,则递归地对该目录下的所有子目录实施权限设置
{}内的内容称为一个模式,可以指定多个模式,多个模式之间用逗号分隔
第一个选项表示要赋予权限的用户
u 表示属主 user
g 表示属组 group
o 表示其他用户 other
a 表示所有用户 all
第二个选项表示要进行的操作
+ 表示增加权限
- 表示删除权限
= 表示分配权限,同时将原有权限删除
第三个选项是要分配的权限
r 读取
w 写入
x 执行
示例:
chmod go-r testfile
chmod u+x testfile
chmod u-x,go+r tesffile
将属组权限设置为与属主相同
chmod g=u testfile
对其他用户添加属主具有的权限
chmod o+u testfile
通过数值设定权限
权限 二 八
--- 000 0 没有权限
--x 001 1 允许执行
-w- 010 2 允许写入
-wx 011 3 允许执行和写入
r-- 100 4 允许读取
r-x 101 5 允许执行和读取
rw- 110 6 允许写入和读取
rwx 111 7 允许执行写入和读取
chmod -R 775 /u01
chmod 660 /u01
文件的属主和属组
chown
chown [-R] <用户[:组]> <文件或目录>
-R 如果操作对象是目录,则递归地对该目录下所有子目录实施目录设置,要单独修改属组,可以使用下面
的格式:
chown [-R] <:属组> <文件或目录>
切换为超级用户
su -
将文件 testfile 的属主 修改为 oracle
[test@asm ~]$ mkdir maomi
[test@asm ~]$ ls -lt
total 4
drwxrwxr-x 2 test test 4096 Feb 14 17:05 maomi
[test@asm ~]$ su - root
Password:
[root@asm ~]# chown -R oracle:oinstall /home/test/maomi
[test@asm ~]$ ls -lt
total 4
drwxrwxr-x 2 oracle oinstall 4096 Feb 14 17:05 maomi
chown :oinstall testfile
chown oracle:oinstall testfile
chown -R oracle:oinstall /u01
umask
用户可以使用 umask 命令设置文件的缺省生成掩码。缺省的生成掩码可以告诉系统在创建文件或目录时不应赋予其哪些权限。如果用户将 umask 命令放在环境配置文件 .bash_profile 中就可以控制所有新建的文件或目录的访问权限
umask 命令的格式为:
umask [u1u2u3]
其中 u1 表示不允许属主拥有的权限;u2 表示的是不允许同组用户拥有的权限;u3表示的是不允许其他用户拥有的权限
可以使用不带任何参数或带-S 参数的命令来查看当前文件的缺省生成掩码:
[test@asm ~]$ umask
0002
[test@asm ~]$ su - oracle
Password:
[oracle@asm ~]$ umask
0022
[oracle@asm ~]$ umask -S
u=rwx,g=rx,o=rx
[oracle@asm ~]$ umask -S
u=rwx,g=rx,o=rx
[oracle@asm ~]$ mkdir maomi
[oracle@asm ~]$ ls -l maomi
total 0
[oracle@asm ~]$ ls -l | grep maomi
drwxr-xr-x 2 oracle oinstall 4096 Feb 14 17:15 maomi
转载请注明出处及原文链接,拒绝盗转
在开始这个系列文章之前,我先介绍一下该线上系统的用途以及MySQL服务器的架构。
一、线上系统介绍
该系统是一个面向律师事务所、会计师事务所(德勤)、大型企业(如IBM,GM)、高校(浙大)以及个人提供大陆地区法规、案例及相关新闻评论的信息检索及浏览系统,主要提供信息检索、订阅及在线浏览服务。
系统使用主要PHP语言开发,数据分析及处理部分使用Java和Python;
此外数据检索使用了HP的“绯闻”不少的Autonomy以及Sphinx;
除此之外系统还使用了Smarty,Jquery和ExtJS;
二、MySQL服务器架构
两台性能较好内存较大的数据库做Master-Master,使用MySQL mmm做管理及监控(监控另外还用了Nagios,Zabbix),其中一台数据库M1用作前台的DML操作,另外一台数据库M2用作CMS录入数据使用。
此外有两台Slave,其中S1用于搜索引擎(Autonomy和Sphinx)fetch数据使用,另外一台Slave数据库S2用于数据分析、数据处理及数据备份;
总体上来说,运行稳定,偶尔出现过的复制Duplicate key也是由于代码写的有问题导致的。
但是,随着用户访问量及数据量从去年10月份开始暴涨,数据库的performance正逐渐成为整个系统的主要性能瓶颈;所以老板决定了——加机器,做读写分离
鉴于代码比较乱,在代码层引入读写分离及load balance的成本较大,所以我们考虑使用Proxy工具来实现;
主要的两个选择是:1.MySQL proxy;2.Amoeba;两个工具目前都没找到线上使用实例(如果您知道的话,烦请告知一下,不胜感激!!)
虽然从文档、维护等各方面考虑最后决定使用MySQL proxy,但是因为MySQL proxy仍然处于alpha 0.8.3版本,而且MySQL手册上的“MySQL Proxy is currently an Alpha release and should not be used within production environments”却使得我一直很忐忑。
但路是人走出来了,硬着头皮上了
待续....
二、SET命令
三、格式控制命令
四、配置环境脚本
************************************
替换变量
************************************
一、替换变量
1.当我们在SQL*Plus中执行命令时,可以使用替换变量,让用户每次执行语句前,为语句传送不同的数据。例如:
gyj@OCM> select * from t1 where id=&id;
Enter value for id: 1 --Oracle首先让我们输入id的值,此处输入1
old 1: select * from t1 where id=&id
new 1: select * from t1 where id=1
ID NAME
---------- ----------
1 gyj1
在你输入值后,Oracle将&id换为你所输入的值,然后,按你所输入的值执行。这就是替换变量。同样的一条语句,你可以每次输入不同的值,返回的就是不同的结果。其实替换变量类似于编程语言中的变量的简单形式。
2.一条语句中,可以有多个替换变量,而且,一条语句中,除了开头第一个单词,语句中的任何一部分,都可以是替换变量。比如:
gyj@OCM> select * from t1 where &a &b &c;
Enter value for a: id
Enter value for b: =
Enter value for c: 1
old 1: select * from t1 where &a &b &c
new 1: select * from t1 where id = 1
ID NAME
---------- ----------
1 gyj1
(显示结果和上面一样)
3.除了语句的第一个单词外,我甚至可以将整个语句,都定为替换变量:
gyj@OCM> select &a &b &c &d &e &f &g;
Enter value for a: *
Enter value for b: from
Enter value for c: t1
Enter value for d: where
Enter value for e: id
Enter value for f: =
Enter value for g: 1
old 1: select &a &b &c &d &e &f &g
new 1: select * from t1 where id = 1
ID NAME
---------- ----------
1 gyj1
注意,SELECT一定不可以是替换变量。语句中第一个单词不可以是替换变量,其他部分都可以。因此替换变量的使用是非常灵活的。
4.对于字符型的数据,要注意单引号的问题,我想显示姓名等于某个人的行,可以使用如下语句:
gyj@OCM> select * from t1 where name='&n';
Enter value for n: gyj1
old 1: select * from t1 where name='&n'
new 1: select * from t1 where name='gyj1'
ID NAME
---------- ----------
1 gyj1
注意:我在’&n’外加的有单引号,那么,我在为n输入值时,就不必再gyj1的外面,加单引号。
如果&n的外面,我没有加单引号的话,如下:
gyj@OCM> select * from t1 where name=&n;
Enter value for n: 'gyj1'
old 1: select * from t1 where name=&n
new 1: select * from t1 where name='gyj1'
ID NAME
---------- ----------
1 gyj1
(显示结果同上)
注意: &n外面没有单引号,那么在输入gyj1时,就要在gyj1之外,加单引号。
二、替换变量的定义和取消
我们可以使用define 变量 = 值 ,事先定义替换变量。如SQL> define a=1 ,这条语句后面可以加“;”,也可以不加“;”号。
定义变量后,可以在任何地方通过&a来引用变量,如:
gyj@OCM> define a=1
gyj@OCM> select * from t1 where id=&a;
old 1: select * from t1 where id=&a
new 1: select * from t1 where id=1
ID NAME
---------- ----------
1 gyj1
和以前使用替换变量相比,少了“输入 a 的值: ”,这次,a的值在前面已经用define定义过了,不必再输入。
变量a可以返复使用,直到使用undefine 变量 命令取消它。下面试一下。
我先用如下语句输出a的值:
gyj@OCM> select &a from dual;
old 1: select &a from dual
new 1: select 1 from dual
1
----------
1
a的值目前还存在。在使用时,不须先为a输入值。下面我取消a。
SQL> undefine a
取消之后,我再次执行和上面同样的命令,输出a的值:
gyj@OCM> undefine a
gyj@OCM> select &a from dual;
Enter value for a:
(这次要求我输入a的值了,因为a已经被取消)
还一点要说明一下,就是替换变量只针对一个会话,在A会话中定义的值的变量,在B会话访问不到它的值。下面我们试一下:
在会话1:SQL> define a=1
在会话1:SQL> select &a from dual;
old 1: select &a from dual
new 1: select 1 from dual
1
----------
1
已经可以使用变量a了。下面换到会话2:
在会话2:SQL> select &a from dual;
输入 a 的值:(要求你重新为a输入值,在会话1中为变量定义的值,在会话2中访问不到)
三、“&&”与替换变量:
一个“&”(念and)号的替换变量,如果以前没有Define定义过。在本次使用完后,将自动取消。而双“&&”号的替换变量,在本次使用完后,输入的值将一直保持,直到用Undefine取消为止。测试如下:
gyj@OCM> select &&a from dual;
Enter value for a: 1
old 1: select &&a from dual
new 1: select 1 from dual
1
----------
1
第一次为&&a输入值为1,再次显示a的值,无论是select &&a from dual; 还是select &a from dual; 都不需要再为a输入值。直到undefine。
四、SET VERIFY ON | OFF
在替换变量使用过程中,每次都会显示一个“原值”,然后显示被命令替换成了“新值”,使用SET VERIFY,可以打开或关闭这个提示信息。默认状态是打开。我把它关闭看看效果:
SQL> set verify off
说明一下,普通的命令,在结尾处都应有一个“;”分号,而Define、Undefine和SET开头的命令,这些命令专门针对SQL*Plus,在其他环境中不能使用。这些专属于SQL*Plus的命令,不必在结尾处加分号。当然如果结尾加分号了,也不会报错。
我已经把SET VERIFY设为了OFF,再使用一次a变量:
gyj@OCM> set verify off
gyj@OCM> select &a from dual;
1
----------
1
果然,没有了“原值”,“新值”这样的提示信息。像SET VERIFY这样的用来设置SQL*Plus状态的命令,还有很多,我们下面介绍。
*************************************
SET命令
*************************************
一、SET和SHOW命令
在SQL*Plus中,有一些状态变量,控制一些命令的输出格式,例如,VERIFY就是一个状态变量。它控制在使用替换变量时,是否显示的替换有关的提示性信息。我们可以使用SET命令,可以针对某一会话,设置SQL*Plus的状态变量。改变的状态只针对发出SET命令的会话,对其他会话没有任何的影响。使用SHOW命令,可以显示状态变量当前的取值。例如:
gyj@OCM> show verify
verify OFF
我显示了VERIFY状态变量的当前值,它的值是OFF。除了VERIFY之外,我们再说几个比较常用的状态变量。
二、FEEDBACK 回馈信息
gyj@OCM> show FEEDBACK;
FEEDBACK ON for 6 or more rows
gyj@OCM> select * from t1;
ID NAME
---------- ----------
2 gyj2
3 gyj3
4 gyj4
5 gyj5
6 gyj6
1 gyj1
6 rows selected.
最后有个“已选择6行”,这个信息,被称为回馈信息。而FEEDBACK,就是针对这个信息的。它的初始值是6。就是当你显示出来的行数大于等6时,才会显示这个回信息。
下面我显示一个5行的表:
gyj@OCM> delete from t1 where id=6;
1 row deleted.
gyj@OCM> commit;
Commit complete.
gyj@OCM> select * from t1;
ID NAME
---------- ----------
2 gyj2
3 gyj3
4 gyj4
5 gyj5
1 gyj1
没有回馈信息。因为显示的行数没有达到要求的6。
下面我们把这个状态变量设制的小