《Linux与UNIX Shell编程指南》
学习笔记
学习笔记之《Linux与UNIX Shell编程指南》
第1章 文件安全与权限
用户组,权限,文件的关系图
属主(u) (+/-) r w x 所 有 (a) 同组(g) (+/-) r w x 文件或文件夹 (+/-) r w x 其它组(o)
查看文件权限 #ls –l Total xx -rwxr-xr-x 1 root root 3245 Aug 5 09:12 msg rwx:文件属主权限这是前面三位 r-x:同组用户权限这是中间三位 r-x:其他用户权限这是最后三位 1 该文件硬链接的数目 root 文件的属主。
root 文件的属主root所在的缺省组(也叫做r o o t ) 3578 用字节来表示的文件长度,记住,不是K字节 Aug 5 09:12 文件的更新时间 msg 文件名
第 1 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
1.1 符号模式
chmod [who] operator [permission] filename who的含义是: u 文件属主权限。 g 同组用户权限。 o 其他用户权限。
a 所有用户(文件属主、同组用户及其他用户)。 operator的含义: + 增加权限。 - 取消权限。 = 设定权限。 permission的含义: r 读权限。 w 写权限。 x 执行权限。
s 文件属主和组set -ID。 t 粘性位*。
l 给文件加锁,使其他用户无法访问。
u,g,o 针对文件属主、同组用户及其他用户的操作
示例:
chmod o+w admin
1.2 绝对模式
chmod 命令绝对模式的一般形式为: chmod [mode] file
R(读) 4 W(写) 2 X(执行) 1 0400 文件属主可读 0010 同组用户可执行 0200 文件属主可写 0004 其他用户可读 0100 文件属主可执行 0002 其他用户可写 0040 同组用户可读 0001 其他用户可执行 0020 同组用户可写 示例:
chmod 400 xx chmod 755 xx
第 2 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
1.3 其他命令
chown: 转交属主 chgrp: 转交用户组
id: 查看用户组 umask: 设定文件创建时的缺省模式
1.4 小结
了解并熟悉了文件的基本权限、用户、组之间的一些区别与联系,文件与文件夹之间对执行与读权限的细微区别,对文件安全有了充分的认识。
第2章 使用find 和 xargs
1.1 find 命令参数
名称 -name -perm -prune -user -group -mtime -n +n -nogroup -nouser -newer file1 ! file2 -type 解释 按照文件名查找文件 按照文件权限来查找文件 不在指定的目录中查找 按照文件属主来查找文件 按照文件所属的组来查找 按照文件的更改时间来查找 查找无有效所属组的文件 查找无有效属主的文件 查找更改时间比文件file1新但比文件file2旧的文件 不能与-depth同用 备注 - n表示文件更改时间距现在n天以内,+ n表示文件更改时间距现在n天以前 该文件所属的组在/e tc/groups中不存在 该文件的属主在/etc/passwd中不存在 查找某一类型的文件 b - 块设备文件 d - 目录 c - 字符设备文件 p - 管道文件 l - 符号链接文件 f - 普通文件 带有c时表示文件长度以字节计 -size n[c] 查找文件长度为n块的文件 -depth -fstype -mount -follow -cpio 在查找文件时,首先查找当前目录中的文件,然后再在其子目录中找 查找位于某一类型文件系统中的文件 查找文件时不跨越文件系统m o u n t点 如果f i n d命令遇到符号链接文件,就跟踪至链接所指向的文件 对匹配的文件使用c p i o命令,将这些文件备份到磁带设备中 第 3 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
1.2 find 与 exec
当匹配到一些文件以后,可能希望对其进行某些操作,这时就可以使用 –exec 选项。 exec选项后面跟随着所要执行的命令,然后是一对儿{ },一个空格和一个\\,最后是一个分号。
如: find . –type f –exec ls –l {} \\; 1.3 find 与 xargs
xargs 命令同find命令一起使用是为了避免 exec与find 一起使用时产生“参数列太长”或“参数列溢出”错误.
如: find . –name “*.jsp” –print | xargs echo “” > result.txt; 1.4 小结
find命令是一个非常优秀的工具,它可以按照用户指定的准则来匹配文件。使用exec和xargs可以使用户对所匹配到的文件执行几乎所有的命令而避免去写shell命令。
第3章
1.1 前言
后台执行命令
cron 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月 中的不同时段运行。 At at 使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或 高峰负荷时间段运行。
& 使用它在后台运行一个占用时间不长的进程。
Nohup 使用它在后台运行一个命令,即使在用户退出时也不受影响。
1.2 cron和crontab
每一个用户都可以有一个crontab文件, crontab的命令允许用户提交、编辑或删除相应的作业。
crontab 的格式:
分< >时< >日< >月< >星期< >要运行的命令,其中< >表示空格。 示例: 30 21 * * * /apps/bin/cleanup.sh
Crontab [-u user] -e -l -r
-u 用户名
-e 编辑crontab文件
-l 列出crontab文件中的内容 -r 删除crontab文件
提交任务命令: crontab 任务文件
第 4 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
备份任务文件: crontab -l > $HOME/mycron(文件具体路径)
建议:不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件
1.3 at命令
向cron提交作业,在稍后的时间运行.
At格式:
at [-f script] [-m -l -r] [time] [date]
其中,
-f script 是所要提交的脚本或命令 -l 列出当前所有等待运行的作业。
-r 清除作业。需提供相应的作业标识(ID) -m 作业完成后给用户发邮件 time at命令的时间格式可以是H、HH.HHMM、HH:MM或H:M,其中H和M分别是小时和分钟。还可以使用a.m.或p.m.。
date日期格式可以是月份数或日期数,而且at命令支持today、tomorrow关键词。 如: at 9am tomorrow
1.4 &命令
在后台运行作业,它不会占据终端, 结果会输出到屏幕上,应该使用重定向输出
如: find /usr -name \"*.asp\" -print > asp.txt 2>&1 &
1.5 nohup命令
此命令的好处是: 在退出帐户时该进程还不会结束,还可以继续执行作业
nohup格式:
nohup command &
1.6 小结
了解并熟悉了有关后台运行作业的一些命令,掌握了各种命令之间的联系与区别,特别是在不同的情况下,应该使用不同的命令。对与批量的作业应该使用shell脚本来执行,对于大工作量的任务应该在系统负荷较低时进行执行。
第4章 文件名置换
此章的重点主要为掌握 ./*/?/[...]/[!..] ,鉴于之前的正则表达式基础,此章就此带过。
第 5 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
第5章 shell输入与输出
此章的重点为: echo, read,cat,tee,管道与文件重定向
1.1 echo命令
echo命令可以显示文本行或变量,或者把字符串输入到文件
常用功能: \\c 不换行 \\f 进纸 \ 跳格 \\n 换行
示例:# echo -e \"what is you name: \\c\" # read name
注意unix与linux系统的区别,linux系统需要带-e参数
把字符串输入到文件:
# echo \"what is you name\" > a.txt 追加:
# echo \"my name is jack\" >> a.txt
1.2 read命令
使用read语句从键盘或文件的某一行文本中读入信息,并将其赋给一个变量,类似C语言中的scanf函数.
示例: 读入一个值到变量name中 # read name # jack
# echo $jack //进行输出 # jack
1.3 cat命令
用它来显示文件内容,创建文件,显示控制字符
cat命令的一般形式为:
cat [options] filename1 ... filename2 ...
示例:
显示a.txt(b.txt)?里面的内容 # cat a.txt b.txt
第 6 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
将 a.txt 内容加到b.txt中 # cat a.txt >> b.txt
1.4 管道
可以通过管道把一个命令的输出传递给另一个命令作为输入 一般形式为: 命令1 |命令2 示例:
# ls |grep httpd
将ls 查找到的结果输给grep当作输入,进行查找httpd关键字
1.5 tee命令
te命令作用:能在输出的同时,将其存入一个文件 它的一般形式为: tee -a files
其中,- a表示追加到文件末尾 结合上面的几个命令给出一个示例:
# find /usr/jsp -name \"[a-z][0-9].jsp\" -printl |tee -a jsp.data
1.6小结
对输入输出的命令还需进一步熟悉与练习,特别是它们之间的联系,对文件重定向方面的知识目前还不是很清楚,还得多看些资料。
第6章
1.1 &&
第6章命令执行顺序
&&左边的命令(命令1)返回真(即返回0,成功被执行)后,&&右边的命令(命令2)才能够被执行;换句话说,“如果这个命令执行成功&&那么执行这个命令”
此命令和C,C++,java中的命令是一制,要区别的地方是高级语言中真为1,假为0
1.2 ||
||的作用有一些不同。如果| |左边的命令(命令1)未执行成功,那么就执行| |右边的命令(命令2);或者换句话说,“如果这个命令执行失败了|| 那么就执行这个命令,如果这个命令执行成功了|| 那么就不执行这个命令”
此命令和高级语言中有些区别
第 7 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
1.3 ()和{ }
通过()和{},可以把几个命令合在一起执行,如: (命令1;命令2;命令3) 或
{命令1;命令2;命令3}
如果使用{}来代替(),那么相应的命令将在子shell而不是当前shell中作为一个整体被执行,只有在{ }中所有命令的输出作为一个整体被重定向时,其中的命令才被放到子shell中执行,否则在当前shell执行
1.4 小结
由于拥有高级语言的基础,此类伪命令比较容易理解与记忆
第7章
1.1 前言
正则表达式介绍
正则表达式使用范围很广,在javascript,java等高级语言中,甚至编译器,算法学中也经常使用,功能非常强大。
1.2 学习方法体会
由于正则表达式比较庞大,在此就不一一的介绍用法,在学习过程中我推荐几个学习资料和网址及工具
资料: jdk1.6API中类java.util.regex.Pattern 有详细的介绍及用法 网址: W3cSchool中RegExp 对象参考手册
http://www.w3cschool.cn/jsref_obj_regexp.html 工具: Eclipse正则表达式插件 Regex Util
安装地址:http://regex-util.sourceforge.net/update/
第 8 页 共 10 页
学习笔记之《Linux与UNIX Shell编程指南》
在学习过程中,成本最低,效果最好的方法是写js,一个编辑器,一个网页就可以实现几乎所有的正则规则。
第8章 grep 家族
第 9 页 共 10 页
因篇幅问题不能全部显示,请点此查看更多更全内容