2008年1月21日星期一

Oracle学习笔记20080118

做个rman的backup脚本,发觉对shell研究不是很深,纯建立脚本以后chmod a+x backup.ramn后,还差点,转战shell下,虽然一直想把shell好好用,但是好像没什么进展。
今天开始看shell 当然首先出现的还是ls,最常用的是ls -l,ls -la包含的信息:
total 4232:该目录中所有文件所占的空间。
- r w x r- x r- x:这是该文件的权限位。
前面的横杠有:
d 目录。
l 符号链接(指向另一个文件)。
s 套接字文件。
b 块设备文件。
c 字符设备文件。
p 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
如果除去最前面的横杠,这里一共是9个字符,他们对应9个权限位。通过这些权限位,可以设定用户对文件的访问权限。这9个字符可以分组:
r w x:文件属主权限 这是前面三位r- x:同组用户权限 这是中间三位r- x:其他用户权限 这是最后三位
1 该文件硬链接的数目。
root 文件的属主。root 文件的属主r o o t所在的缺省组(也叫做r o o t )。
3578 用字节来表示的文件长度,记住,不是K字节!Oct 14 04:44 文件的更新时间。
dmesg 文件名。
- rw- r-- r-- 文件类型为普通文件 文件属主可以读、写 同组用户可以读
其他用户可以读r-- --- --- 文文件属主可读,但不能写或执行
r-- r-- --- 文文件属主和同组用户(一般来说,是文件属主所在的缺省组)可读
r-- r-- r- - 文任何用户都可读,但不能写或执行
rwx r-- r- - 文文件属主可读、写、执行,同组用户和其他用户只可读
rwx r-x --- 文文件属主可读、写、执行,同组用户可读、执行
rwx r-x r- x 文文件属主可读、写、执行,同组用户和其他用户可读、执行
rw- rw- --- 文文件属主和同组用户可读、写
rw- rw- r- - 文文件属主和同组用户可读、写,其他用户可读
rw- rw- --- 文文件属主和同组用户及其他用户读可以读、写,慎用这种权限设置,因为任何用户都可以写入该文件

chmod [who] operator [permission]
filenamewho的含义是:
u 文件属主权限。g 同组用户权限。o 其他用户权限。a 所有用户(文件属主、同组用户及其他用户)。
operator的含义:
+ 增加权限。- 取消权限。= 设定权限。
permission的含义:r 读权限。w 写权限。x 执行权限。s 文件属主和组set-ID。t 粘性位*。l 给文件加锁,使其他用户无法访问。

chmod应用举例
chmod a-x myfile rw- rw- rw- 收回所有用户的执行权限
chmod og-w myfile rw- r-- r- - 收回同组用户和其他用户的写权限
chmod g+w myfile rw- rw- r- - 赋予同组用户写权限
chmod u+x myfile rwx rw- r- - 赋予文件属主执行权限
chmod go+x myfile rwx rwx r- x 赋予同组用户和其他用户执行权限

同时可以用绝对模式八进制数含义八进制数含义
0400文件属主可读0010同组用户可执行0200文件属主可写0004其他用户可读0100文件属主可执行0002其他用户可写0040同组用户可读0001其他用户可执行0020同组用户可写
相应的权限表示应为644,它的意思就是:0400+0200 (文件属主可读、写) = 0600
0040 (同组用户可读) = 0040 0004 (其他用户可读) = 0004 0644

chmod绝对值命令的列子
chmod 666 rw- rw- rw- 赋予所有用户读和写的权限
chmod 644 rw- r-- r-- 赋予所有文件属主读和写的权限,所有其他用户读权限
chmod 744 rwx r-- r-- 赋予文件属主读、写和执行的权限。所有其他用户读的权限
chmod 664 rw- rw- r-- 赋予文件属主和同组用户读和写的权限,其他用户读权限
chmod 700 rwx --- --- 赋予文件属主读、写和执行的权限
chmod 444 r-- r-- r-- 赋予所有用户读权限

目录栏rwx
可以列出该目录中的文件
可以在该目录中创建或删除文件
可以搜索或进入该目录

权限文件
属主同组用户其他用户drwx rwx r-x ( 775 ) 读、写、执行 读、写、执行 读、执行
drwx r-x r-- ( 754 ) 读、写、执行 读、执行 读drwx r-x r-x ( 755 ) 读、写、执行 读、执行 读、执行suid/guidsuid/guid所存在的意思是,例如,当某个用户执行了关于root建立的脚本或可执行文件,那个该用户就自动获得了在执行脚本时的root权限。所以要慎用。
想要查找含有suid的文件登录进入/bin或/sbin$ ls -l grep '^...s'
上面的命令是用来查找suid文件的;$ ls -l grep '^...s..s'

如果想要对文件login设置suid,它当前所具有的权限为 rwx rw- r-- (741),需要在使用chmod命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为 rws rw- r--。
$ chmod 4741 logit

chmod 4755 rws r-x r-x 文文件被设置了suid,文件属主具有读、写和执行的权限,所有其他用户具有读和执行的权限
chmod 6711 rws --s --s 文文件被设置了suid和guid,文件属主具有读、写和执行的权限,所有其他用户具有执行的权限
chmod 4764 rws rw- r-- 文文件被设置了suid,文件属主具有读、写和执行的权限,同组用户具有读和执行的权限,其他用户具有读权限还可以这样

chmod u+s 于是该文件的权限将变为:rws r-x r-x
chmod -R -h owner file

-R选项意味着对所有子目录下的文件也都进行同样的操作。-h选项意味着在改变符号链接文件的属主时不影响该链接所指向的目标文件。chgrp 一样,但是修改的是用户组查看自己的组用group或者id,group user查看user的组(貌似ubuntu下面group不行,还是用id)

umask可以用umask命令查看,在ubuntu环境下载/etc/profile因为在最下面,不是一般都能看到该命令的一般形式为:umask nnn其中nnn为umask置000-777。
umask 文件 目录
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0

例如,对于umask值002,相应的文件和目录缺省创建权限是什么呢?
第一步,我们首先写下具有全部权限的模式,即777(所有用户都具有读、写和执行权限)。
第二步,在下面一行按照umask值写下相应的位,在本例中是002。
第三步,在接下来的一行中记下上面两行中没有匹配的位。这就是目录的缺省创建权限。稍加练习就能够记住这种方法。
第四步,对于文件来说,在创建时不能具有文件权限,只要拿掉相应的执行权限比特即可。

这就是上面的例子,其中umask值为002:
1) 文件的最大权限 rwx rwx rwx (777)
2) umask值为002 - - - - - - -w-
3) 目录权限 rwx rwx r-x (775) 这就是目录创建缺省权限
4) 文件权限 rw- rw- r-- (664) 这就是文件创建缺省权限

下面是另外一个例子,假设这次umask值为022:
1) 文件的最大权限 rwx rwx rwx (777)
2) umask值为022 --- -w- -w-
3) 目录权限 rwx r-x r-x (755) 这就是目录创建缺省权限
4) 文件权限 rw- r-- r-- (644) 这就是文件创建缺省权限

umask值 目 录 文 件
022 755 644
027 750 640
002 775 664
006 771 660
007 770 660

该命令的一般形式为:ln [-s] source_path target_path

第二章停电了 -、- 重新来

Find命令的一般形式为:
find pathname -options [-print -exec -ok]让我们来看看该命令的参数:
pathname find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录。
-print find命令将匹配的文件输出到标准输出。
-exec find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为 'comm -and' {} \;,注意{ }和\;之间的空格。
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的 shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

find命令有很多选项或表达式,每一个选项前面跟随一个横杠 -。
让我们先来看一下该命令的主要选项,然后再给出一些例子。
-name 按照文件名查找文件。
-perm 按照文件权限来查找文件。
-prune 使用这一选项可以使find命令不在当前指定的目录中查找,如果同时使用了 - depth选项,那么- prune选项将被find命令忽略。
-user 按照文件属主来查找文件。
-group 按照文件所属的组来查找文件。
-mtime -n +n 按照文件的更改时间来查找文件,-n表示文件更改时间距现在n天以内,+n表示文件更改时间距现在n天以前。
Find命令还有-atime和-ctime选项,但它们都和-mtime选项相似,所以我们在这里只介绍-mtime选项。
-nogroup 查找无有效所属组的文件,即该文件所属的组在/etc/groups中不存在。
-nouser 查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。
-newer file1 ! file2 查找更改时间比文件file1新但比文件file2旧的文件。
-type 查找某一类型的文件,诸如:b - 块设备文件。d - 目录。c - 字符设备文件。p - 管道文件。l - 符号链接文件。f - 普通文件。
-size n[c] 查找文件长度为n块的文件,带有c时表示文件长度以字节计。
-depth 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。-fstype 查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。
-mount 在查找文件时不跨越文件系统mount点。
-follow 如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。
-cpio 对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

使用name选项文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用。可以使用某种文件名模式来匹配文件,记住要用引号将文件名模式引起来。
不管当前路径是什么,如果想要在自己的根目录$HOME中查找文件名符合*.txt的文件,使用~作为'pathname参数,波浪号~代表了你的$HOME目录。
$ find ~ -name "*.txt" -print想要在当前目录及子目录中查找所有的‘*.txt’文件,可以用:
$ find . -name "*.txt" -print想要的当前目录及子目录中查找文件名以一个大写字母开头的文件,可以用:$ find . -name "[A-Z]*" -print想要在/ e t c目录中查找文件名以h o s t开头的文件,可以用:$ find /etc -name "host*" -print想要查找$HOME目录中的文件,可以用:$ find ~ -name "*" -print 或find . -print要想让系统高负荷运行,就从根目录开始查找所有的文件。如果希望在系统管理员那里保留一个好印象的话,最好在这么做之前考虑清楚!
$ find / -name "*" -print如果想在当前目录查找文件名以两个小写字母开头,跟着是两个数字,最后是* .txt的文件,下面的命令就能够返回名为ax37.txt的文件:$ find . -name "[a-z][a-z][0--9][0--9].txt" -print
使用perm选项如果希望按照文件权限模式来查找文件的话,可以采用-perm选项。
你可能需要找到所有用户都具有执行权限的文件,或是希望查看某个用户目录下的文件权限类型。在使用这一选项的时候,最好使用八进制的权限表示法。为了在当前目录下查找文件权限位为755的文件,即文件属主可以读、写、执行,其他用户可以读、执行的文件,可以用:$ find . -perm 755 -print如果希望在当前目录下查找所有用户都可读、写、执行的文件(要小心这种情况),我们可以使用find命令的-perm选项。在八进制数字前面要加一个横杠 -。
在下面的命令中-perm代表按照文件权限查找,而‘007’和你在chmod命令的绝对模式中所采用的表示法完全相同。$ find . -perm -007 -print
忽略某个目录$ find /apps -name "/apps/bin" -prune -o -print如果希望按照文件属主查找文件,可以给出相应的用户名。例如,在$HOME目录中查找文件属主为dave的文件,可以用:$ find ~ -user dave -print在/etc目录下查找文件属主为uucp的文件:$ find /etc -user uucp -print为了查找属主帐户已经被删除的文件,可以使用-nouser选项。这样就能够找到那些属主在/etc/passwd文件中没有有效帐户的文件。在使用-nouser选项时,不必给出用户名;find命令能够为你完成相应的工作。例如,希望在/ home目录下查找所有的这类文件,可以用:$ find /home -nouser -printgroup和nogroup在用法上和user和nouser一样
希望在系统根目录下查找更改时间在5日以内的文件,可以用:$ find / -mtime -5 -print为了在/var/adm目录下查找更改时间在3日以前的文件,可以用:$ find /var/adm -mtime +3 -print
查找比某个文件新或旧的文件同时列出这些文件$ find -newer newest_file_name ! -newer oldest_file_name -exec ls -l {} \;
如果要在/etc目录下查找所有的目录,可以用:$ find /etc -type d -print为了在当前目录下查找除目录以外的所有类型的文件,可以用:$ find . ! -type d -print为了在/etc目录下查找所有的符号链接文件,可以用:$ find /etc -type l -print为了在当前目录下查找文件长度大于1 M字节的文件,可以用:$ find . -size +1000000c -print为了在/home/apache目录下查找文件长度恰好为100字节的文件,可以用:$ find /home/apache -size 100c -print为了在当前目录下查找长度超过1 0块的文件(一块等于5 1 2字节),可以用:$ find . -size +10 -print在下面的例子中,f i n d命令从文件系统的根目录开始,查找一个名为cON.FI LE的文件。它将首先匹配所有的文件然后再进入子目录中查找。$ find / -name "CON.FILE" -depth -print为了在/logs目录中查找更改时间在5日以前的文件并删除它们,可以用:$ find logs -type f -mtime +5 -exec rm {} \;为了查找/var/logs目录中更改时间在7日以前的普通文件,并删除它们,可以用:$ find /var/logs -type f -mtime +7 -exec rm {} \;'$ find /logs -name 'admin.log[0-9][0-9][0-9]-atime +7 -exec rm {} \;为了查找当前文件系统中的所有目录并排序,可以用:$ find . -type d -print -local -mount sort
下面的例子在整个系统中查找内存信息转储文件 (core dump),然后把结果保存到/tmp/core.log 文件中:$ find . -name "core" -print xargs echo "" >/tmp/core.log$ find . -name "*.XC" -mount -print下面的例子在/apps/audit目录下查找所有用户具有读、写和执行权限的文件,并收回相应的写权限:$ find /apps/audit -perm -7 -print xargs chmod o-w在下面的例子中,我们用grep命令在所有的普通文件中搜索device这个词:$ find / -type f -print xargs grep "device"在下面的例子中,我们用grep命令在当前目录下的所有普通文件中搜索DBO这个词:$ find . -name \*-type f -print xargs grep "DBO"注意,在上面的例子中,\用来取消find命令中的*在shell中的特殊含义。
神速的看完了第二章,第三章开始名词解释:
cron 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。
At at命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。& 使用它在后台运行一个占用时间不长的进程。Nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。
crontab的域为了能够在特定的时间运行作业,需要了解 crontab文件每个条目中各个域的意义和格式。下面就是这些域:
第1列 分钟1~5 9
第2列 小时1~2 3(0表示子夜)
第3列 日1~3 1
第4列 月1~1 2
第5列 星期0~6(0表示星期天)
第6列 要运行的命令

crontab条目举例这里有crontab文件条目的一些例子:
30 21* * * /apps/bin/cleanup.sh上面的例子表示每晚的2 1 : 3 0运行/apps/bin目录下的cleanup.sh。
45 4 1,10,22 * * /apps/bin/backup.sh上面的例子表示每月1、10、22日的4 : 4 5运行/apps/bin目录下的backup.sh。
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;上面的例子表示每周六、周日的1:10运行一个find命令。
0,30 18-23 * * * /apps/bin/dbcheck.sh上面的例子表示在每天18:00至23:00之间每隔30分钟运行/apps/bin目录下的db check.sh。
0 23 * * 6 /apps/bin/qtrend.sh上面的例子表示每星期六的11:00pm运行/apps/bin目录下的qtrend.sh。

crontab命令的一般形式为:Crontab [-u user] -e -l -r其中:-u 用户名。-e 编辑crontab文件。-l 列出crontab文件中的内容。-r 删除crontab文件。

没有评论: