###请转贴时保留以下内容###### Red Hat Linux 033 实验部分 应广大RH爱好者的要求,奉献Red Hat Linux 033 实验翻译 在此感谢文华学院Linux组全体讲师和他们为翻译工作付出的努力! 登陆http://www.wenhua.org 了解RHCE认证信息 登陆http://bbs.wenhua.org 参加讨论 请提出宝贵意见Mail:kevinzou@wenhua.org KevinZ(kissingwolf) 2004.3.4 #############################Red Hat Linux 033 实验部分 试验3 文件和目录操作 估计时间: 1小时30分钟 目标: 熟悉函数、语法和一些基本的文件和目录的控制操作。练习有效地组合这些命令完成一般的用户任务. 试验的起点: 安装了Red Hat Linux可运行系统 ,有一个无特权用户student,密码:student 第一步:目录和文件组织 场景/情节 在您的home目录下有一系列的文件,您决定到时间整理一下了.您计划生成一些新的子目录,然后根据您的计划拷贝和移动这些文件到适当的目录;另外,这些文件不是都有用的,有一些是要删除掉的。
任务: 1. 以用户名student密码student在tty1上登陆。
2. 在您登陆系统以后,你将进入您的home目录.你可以使用"打印工作目录"检查这一情况 $ pwd /home/student
3.使用如下每条命令检查您是否还有文件在您的home目录下: $ ls $ ls -a $ ls –al 为什么第一和第二条命令返回不同的文件数? 第三条命令返回的在您当前的home目录下最大的文件是多少? 您的home目录下有子目录吗?
4. 您现在使用touch为以后的步骤建立文件。这种扩展在接下来的命令中是如何工作 的在以后的章节中进行讨论。现在,仅仅按照下面的行键入就行了(在集合与集合之间使用包括花括号{}和下划线的字符) $ touch __
5. 使用命令ls检查最后一条命令的结果,你会发现它在您的home目录下生成了108个 新的空文件(您不必数)。这些文件代表了您将使用的在这个步骤中的代表的数据文件。如果您看不到这些文件,向教师寻找帮助,没有这些文件,该试验后面的步骤就无法进行。
6. 为了组织您的文件,您必须先建立一些新目录,使用mkdir在您的home目录中直接 建立一些子目录: $ mkdir a_reports $ mkdir september october november december 再使用ls 检查您的工作。
7. 使用如下命令在您的一个新的目录中生成一些附加子目录 $ cd a_reports 为了切换到目录,接下来: $ mkdir 1 2 3 使用ls检查你的子目录a_reports下的名为1,2,3的三个新的子目录。
8. 首先把所有带”b”的报告从home目录中移出并且按月份分组,先验证要使用的复杂的通配符模式,是个好方法。这样做以确保它对于正确的文件进行操作。如果你打算使用这种通配符模式,您可以使用一个无害的命令来替换您的命令。 $ cd $ ls -l *dec?b? 你将看到列出了9个”december”,”b”文件,把其中的一个移到december目录中: $ mv graph_dec_b1 december 用下面的语句移动其余的: $ mv *dec?b? december 列出december目录的内容验证移动操作是否成功: $ ls -l december total 0 -rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b1 -rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b2 -rw-rw-r-- 1 student student 0 Sep 18 17:45 graph_dec_b3 -rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b1 -rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b2 -rw-rw-r-- 1 student student 0 Sep 18 17:45 memo_dec_b3 -rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b1 -rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b2 -rw-rw-r-- 1 student student 0 Sep 18 17:45 report_dec_b3
9.把其余所有带”b”的报告分别移动到各自对应的目录中: $ mv *oct?b? october $ mv *sep?b? september
10. 现在你将把”a”报告收集到它们各自对应的目录中。注意使用~代替 “你的home 目录”。通配符和模式的组合指定了您的home目录下所有以_a1结尾的文件。 $ cd a_reports $ mv ~/*_a1 1/ “september””a1”文件陈旧并且不再需要,使用echo确定您已经建立了一个只匹配该类文件的模式,然后删除它们,并且检查剩下的”a1”文件是否正确移动: $ cd 1 $ echo *sep* $ rm *sep* $ ls graph_dec_a1 graph_oct_a1 memo_nov_a1 report_dec_a1 report_oct_a1 graph_nov_a1 memo_dec_a1 memo_oct_a1 report_nov_a1
11.最后移动”a2”和”a3”报告到各自对应的目录中。为了使过程变得有趣,我们将把 它们移出当前目录,使用相对和绝对的的路径名。第一步,使用pwd确定当前目录:
$ pwd /home/student/a_reports/1
用echo检查涉及到”a2”文件的模式,然后使用绝对路径名: $ echo /home/student/*a2* $ mv /home/student/*a2* /home/student/a_reports/2 即使您当前在/home/student/a_reports/1目录下,也能把文件从/home/student移动到/home/student/a_reports/2目录中,因为您指定了文件的路径名称(在本例中为绝对路径名称)
现在使用相对路径移动“a3”文件。再一次的,首先确信模式指定的是正确的文件名称。
$ echo ../../*a3* $ mv ../../*a3* ../3
12.返回您的home目录,并且使用ls 来校验仅存在该目录中的文件都是“c”文件(例如:graph_dec_c1,graph_dec_c2,…)
13.“c1”和“c2”报告文件对于每个月来说都非常重要,并且您打算把它们备份到另外一个目录:
$ mkdir /tmp/archive $ cp report*12 /tmp/archive/
另外的,所有的对于十二月份的报告文件应该备份到/tmp/archice目录下面。注意,-i选项使得cp程序在覆盖任何文件之前进行提示:
$ cp -i report_dec* /tmp/archive/ cp: overwrite `/tmp/archive/report_dec_c1'? n cp: overwrite `/tmp/archive/report_dec_c2'? n
14.现在您备份了一些对您重要的“c”文件,您现在要删除位于您的home目录下面所有的文件。使用通配符“*c*”检查剩下的含有c的文件。您为什么不想执行命令rm *c* ? (作为提示:尝试:ls *c*) 15.删除您的home目录下的剩余*c*文件。在发出一个破坏性的命令之前我们再次使用echo命令。 $ echo *c1-3 $ rm *c1-3 $ ls a_reports december november october september
试验的结果 一个组织良好的home目录,文件放置在合理的位置,一些文件备份到了/tmp/archive目录中
第二步:决定磁盘的使用率 场景/情节 您想记录您的系统中的每一个文件系统总共有多少剩余空间。 另外,您想有一个关于哪些目录消耗了系统的多数的空间的列表。
任务 1. 使用df获取文件系统总的剩余空间,您的输出应该是类似于下面的例子(尽管输出 依赖于您的特定的安装,输出可能不同) $ df Filesystem 1k-blocks Used Available Use% Mounted on /dev/hdc2 14129568 1809728 11602096 14% / /dev/hdc1 49743 8847 38328 19% /boot none 63312 0 63312 0% /dev/shm 2.注意缺省的命令df操作是以块为单位报告信息,试用-h,-H选项,则是用 “用户可读的“形式报告 $ df -h Filesystem Size Used Avail Use% Mounted on /dev/hdc2 13G 1.8G 11G 14% / /dev/hdc1 49M 8.7M 37M 19% /boot none 62M 0 61M 0% /dev/shm $ df -H Filesystem Size Used Avail Use% Mounted on /dev/hdc2 14G 1.9G 11G 14% / /dev/hdc1 51M 9.1M 39M 19% /boot none 65M 0 64M 0% /dev/shm 这两个开关有什么不同(使用man df)? 2. 在您的home目录使用du(磁盘使用率)命令来决定您所有的文件消耗的空间。确保尝试-h选项获得更可读的输出。
第三步:检视文本文件 任务 1.我们需要一个可供我们工作的文本文件: $ cd $ cp /usr/share/dict/words . 2.使用cat显示文件: $ cat words Aarhus Aaron Ababa …输出省略…. Zulu Zulus Zurich
3.在这种情况下cat是一个坏的选择,因为很多输出快速的滚屏,试用less: $ less words Aarhus Aaron Ababa …输出省略… abiding Abidjan Abigail …输出省略… 使用less的时候,您可以向前翻页(使用b),向后翻页(使用空格键)在整个输出中,每次一屏.
4.如果你只需要快速的看看某个文件的最前几行和最后几行,你要使用head或者tail: $ head words Aarhus Aaron Ababa aback abaft abandon abandoned abandoning abandonment abandons $ tail words zoologically zoom zooms zoos Zorn Zoroaster Zoroastrian Zulu Zulus Zurich
您可以使用man帮助页面发现能使用head和tail中的哪个开关修改行号或是显示的行的相关的位置. 哪个命令你能使用显示文本的前50行?
哪个命令您能使用显示文件从第25,000行到结束的内容?
试验4 用户信息 估计时间: 30分钟 目标: 熟悉一些用户标识和帐户转换基本的控制操作。 试验的起点: 安装了Red Hat Linux可运行系统,并且是成功完成试验系统。有另外一个无特权用户visitor,密码:visitor帐户的存在。请教师检查您的系统中是否已经建立这个帐户。如果这个visitor用户帐户没有建立,按照以下步骤进行 1. 用root帐户登陆虚拟控制台。 2. 在提示符下键入以下命令 # useradd visitor 3. 现在键入 # passwd visitor Changing password for user visitor. New password: {输入visitor} BAD PASSWORD: it is based on a dictionary word Retype new password: {输入visitor} passwd: all authentication tokens updated successfully.
第一步:本地用户登陆 任务: 1. 完全从工作站中退出。确定您已经推出所有虚拟终端和X Windows系统 2. 转换到虚拟终端1(tty1)通过按:
3. 使用密码redhat进入root帐号登陆您的工作站 4. 确定指定的登陆信息,使用下列命令: # whoami # groups # id 检查这些命令的输出。 5.获取工作站当前所有登陆者信息,当前,应该只有一个用户登陆系统,按如下顺序键入的命令的输出是很有趣的。 # users # who # w 检查这些命令的输出。 6. 转换到虚拟终端2(tty2)通过按
7.以用户student,密码:student登陆你的工作站。 8.获取指定登陆者的信息,运行下列命令: $ whoami $ groups $ id 检查这些命令的输出。 9.获取工作站上当前所有登陆者的信息: $ users $ who $ w 检查这些命令的输出。 10. 转换到虚拟终端3(tty3)通过按
11. 以用户visitor,密码:visitor登陆你的工作站
12. 获取指定登陆者的信息,运行下列命令: $ whoami $ groups $ id 检查这些命令的输出。 13. 获取工作站上当前所有登陆者的信息: $ users $ who $ w 检查这些命令的输出。
步骤2:切换帐户
任务:
1. 按下如下的键切换到虚拟终端3(tty3)
2. 运行id命令来决定您的用户信息,pwd来喜爱能使您目前的工作目录 $ id $ pwd
记录结果: id=__________________________________________
pwd=_________________________________________ 3. 使用su – 来切换到root用户,运行id和pwd来获取您的当前的目录
$ su – # id # pwd
记录结果: id=__________________________________________
pwd=_________________________________________
4. 从root帐户退出,返回到visitor帐户
# exit 5. 使用不含 - 的su切换到root用户,运行pwd和id。 $ su # id # pwd
记录结果: id=__________________________________________
pwd=_________________________________________ 为什么和第3步骤的结果不同呢? 6.登出所有您在这个步骤中本地的和远程的shell。
试验6 Linux文件系统的要点 估计时间: 90分钟 目标: 深入了解linux文件系统知识,包括:创建和使用links,使用slocate和find,归档压缩文件。 试验的起点: 一个Red Hat Linux系统。
第一步:创建和使用links 任务: 1.在早些时候的试验,你已经拷贝了一个文件/usr/share/dict/words到你使用的用户student的主目录 ~/words.在这个案例里,你不需要编辑文件-拷贝一个文件到你的主目录就可以在试验的期间使用了。
2.为了要避免原始文件和副本之间的混乱。在student’s主目录中删除words的副本 $ cd $ rm words
3.虽然你可能没有在那时了解它, 这个文件/usr/share/dict/words 的副本实际上是一个软link。列出内容下面目录 /usr/share/dict的内容查看link和它的参数。 $ ls –l /usr/share/dict total 404 -rw-r—r-- 1 root root 409305 Apr 3 10:29 linux.words lrwxrwxrwx 1 root root 11 Apr 20 17:33 words ->linux.words a.你能告诉我words是一个软链接吗?
b.为什么words的文件大小是11?
c.words允许所有人访问。这和linux.words文件用什么冲突?除了root用户,其他用户能够能在linux.words上面写数据吗?
4.再一次列出文件,这次显示相应的indeds号。为什么两个文件会有相同或不同的inodes号? $ ls –I /usr/share/dict
5. 现在在你的主目录中产生两个的代号和硬链接到/usr/share/dict/linux.words: $ ln –s /usr/share/dict/linux.words soft $ ln /usr/share/dict/linux.words hard
6. 测试一下,你新建的链接两者都指到 linux.words 文件: $ head hard soft 7. 检查你所有文件的link , 然后在下面回答问题: $ ls –il hard soft $ stat had soft 报告文件大小,hard_______和soft_______. 被占用的真实的空间,hard_______和soft_______. 你怎样解释这两个link占用空间的差别。 列出链接的记数,hard_______和soft_______. 所有权,hard_______和soft_______. 文件硬链接的所有者和root用户可以完全访问,其他用户是只读权限。学生将会可以删除这个新的文件吗?为什么?
8. 更多的挑战:如果时间许可,探究一下下面的问题: a.你能创建一个目标文件并不存在的软连接吗?看看ls命令的输出能否给你一些提示。 b.你能创建一个目标文件并不存在的软连接吗? 为什么? c.你能创建一个软连接的硬连接吗? 当你尝试的时候有什么问题吗? d.在创建了几个硬连接后,你能说出哪个是更加真实的文件吗?
步骤2:使用find命令
任务:
作为student登录。设计完成find命令提出结果 查看你当前的umask。设计并且运行find命令在每下列各项被描述的结果指令里。然后写下提供的空格里。 你可能需要在在find的man page里查许找。记得你能用/stringz man page里查找。 第一个答案已经为你列出。 1.在/var/lib目录下查找所有文件其所有者是games用户的文件 $ find /var/lib –user games 2> /dev/null
2.在/var目录下查找所有文件其所有者是root用户的文件。_________________________________________________________
3.查找所有文件其所有者不是root,bin和student用户并用长格式显示(如ls –l 的显示结果)。 _________________________________________________________
4.查找/usr/bin目录下所有大小超过一百万byte的文件并用长格式显示(如ls –l 的显示结果)。 _________________________________________________________
5.对/etc/mail目录下的所有文件使用file命令. _________________________________________________________ 6.查找/tmp目录下属于student的所有普通文件,这些文件的修改时间为120分钟以前,查询结果用长格式显示(如ls –l 的显示结果)。 _________________________________________________________
7. 对于查到的上述文件,用-ok选项删除。 _________________________________________________________
步骤3:归档和压缩
情景/故事: 你的系统上的主硬盘在你使用它的时候有可怕的噪音,但是它上面有有价值的数据。自从系统在两年半以前备份过,你有决定手动备份少数几个你最紧要的文件。那 / tmp 目录里储存在不同的硬盘的分区上快怀的分区,这样你想临时的把文件备份到那里。
任务: 1. 在/home目录里,用find命令定位文件所有者是student的文件。然后将其压缩。 $ find /home –user student –exec tar rvf /tmp/backup.tar {} \;
2. 保存/etc目录下的文件到/tmp目录下: $ tar cvf /tmp/confbackup.tar /etc
3. 列出两个文件的大小 $ ls –lh /tmp/*.tar -rw-rw-r-- 1 student student 1.9M Oct 17 23:06 /tmp/backup.tar -rw-rw-r-- 1 student student 5.4M Oct 18 00:27 /tmp/confbackup.tar backup.tar文件的大小________ confbackup.tar文件的大小________
4. 使用gzip压缩你的文档。然后报告文件的大小: $ cd /tmp $ gzip –v *.tar $ ls –lh *tar* -rw-rw-r-- 1 student student 580K Oct 17 23:06 backup.tar.gz -rw-rw-r-- 1 student student 913K Oct 18 0:27 confbackup.tar.gz backup.tar.gz文件大小为____________ backup.tar.gz文件的压缩百分比________ confbackup.tar.gz文件大小为____________ confbackup.tar.gz文件的压缩百分比________
5. 先解压缩bzip2文件然后在压缩,然后比较新文件的大小: $ gunzip *.gz $ ls –lh *tar -rw-rw-r—1 1 student student 1.9M Oct 17 23:06 backup.tar -rw-rw-r—1 1 student student 5.4M Oct 18 00:27 confbackup.tar
$ bzip2 –v *tar $ ls –lh *tar -rw-rw-r—1 1 student student 510K Oct 17 23:06 backup.tar.bz2 -rw-rw-r—1 1 student student 791K Oct 18 00:27 confbackup.tar.bz2
backup.tar.bz2文件大小为____________ backup.tar.bz2文件的压缩百分比________ confbackup.tar.bz2文件大小为____________ confbackup.tar.bz2文件的压缩百分比________
6. 在传统UNIX系统,
$ rm confbackup.tar.bz2 $ tar czf test1.tgz /etc $ tar cjf test2.tbz /etc
$ file test* test1.tgz:gzip compressed data,deflated,last modified:Wed Oct 18 01:52:11 2000,os:Unix test2.tbz:bzip2 compressed data,block size = 900K
结果: 你的“重要数据”被压缩备份到/tmp目录里了。
问题答案2
2. find /var –user root –group mail 2>/dev/mull 3. find / -not –user root –not –user bin –not –user student –ls 2> /dev/null or find / ! –user root ! –user bin ! –user student –exec ls –ld {} \; 2> /dev/null
4. find /usr/bin –size +1000000c –ls 2> /dev/null 5. find /etc/maill –exec file {} \; 2 > /dev/null 6. find /tmp –user student –and –mmin +120 –and –type f –ls 2> /dev/null 7. find /tmp –user student –and –mmin +120 –and –type f –ok rm {} \;
(end) 试验7 bash Shell 估计时间: 45分钟 目标: 深入了解bash shell,包括创建定制。
试验的起点: 一个Red Hat Linux系统。
第一步:使用Aliases 任务: 1.你决定创建一个alias,当你使用cls的时候,系统能够运行clear命令清除你的屏幕。使用student身份在tty1登录,然后输入下列命令. $ alias cls=‘clear’ $ alias $ cls
2.当你重新登录的时候这个别名就丢失了。确信新的别名在用户student每次登录的时候都能够使用,可以执行一下几步。 $ cd $ vi .bashrc
查找包含下列的文字:#User specific aliases and functions 添加到你的别名命令行: alias cls=’clear’ 保存并推出。
3.测试你的改变当你注销的时候,重新登录到tty1上的时候,试下面的命令: $ alias $ cls
4.现在使用ls 的man page 去创建一个叫lr的别名,利用ls的五个开关。测试并添加你的别名到.bashrc中.这个别名能够: a)用长格式显示文件 b)显示隐含文件 c)给文件分类 d)用相反的顺序显示文件 e)按文件修改时间显示文件。
目标: 一条新的清屏命令和一条新的列文件命令。(都是别名)
步骤2:改变你的bash提示
情景/故事: 你决定定制你的bash提示以能够显示完全的路径和命令的序列号。
任务: 5. 在终端窗口,显示当前主要提示符的值。 $ echo $PS1
6. 改变你的提示符为一个字符串。 $ PS1=’Red Hat Linux ->’
7. 这个不常使用,因此恢复到有$提示符的情况下,同时加上主机名。 $ PS1=’\h $’
8. 在主机名和$符号之间插入bash表示历史纪录提示符的特殊字符 \!。
9. 查找bash 的man 手册,把当前的工作目录放入提示符中。
10. 你定制的提示符显示实例,如不同请继续修改。 station1:~ 21 $ cd /tmp station1:/tmp 22 $
11. 编辑你重新定义的PS1 到你的.bashrc,然后打开新的终端窗口看看结果如何.
步骤3:配置shell选项
情景/故事: 使用set和shopt你定制几个bash shell 。
任务: 12.以student身份登录tty1界面上.查看许多普遍的配置shell选项: $ set –o allexport off braceexpand on emacs on errexit off hashall on … output truncated …
13.察看目前ignoreeof的属性,用ctrl+d 键看是否能logout.
14.用student身份在tty1上登录,执行下面的改变,然后测试ignoreeof选项: $ set –o ignoreeof $ $ 用 “logout” 退出shell $ set +o ignoreeof $
15.当试图执行命令的时候可以看到提示信息.使用type的命令: $ type cat cat is hashed (/bin/cat) $ type cls cls is aliased to ‘clear’ $ type set shopt is a shell builtin $ type while while is a shell keyword
结果: 现在你有一个更好的shell options.
问题答案4:命令替代
1. 确定完全路径名
$ which metacity $ which .-message $ ^message^window-demo
2. 重复执行上一个包含字符串ig的命令: $ ig
3. 当一个命令在另一个命令的后面用(‘ ‘)起来的时候,bash会先执行后面的命令并把执行的结果作为第一个命令的输入. 使用这个技术,看看下面命令的执行结果. $ ls –l ‘which nautilus‘
(end) 试验8 定制图形化界面 估计时间: 15分钟 目标: 探索Red hat liunx多种多样的图形化桌面环境..
试验的起点: 一个Red Hat Linux系统。
第一步:定制窗口管理 任务: 1.在你的桌面的左边点击Red Hat图标,选择”属性”然后点击”控制中心”.Nautilus 将打开显示的可以定制你的桌面环境的窗口.
2.双击”背景”图标.点击”选择图片”按钮,可用的图片在/usr/share/backgrounds 下,有一些图片作为墙纸很漂亮;你可以在”图片选项”中选择居中拉伸.
选择一个你喜欢的,或者选”没有图片”然后你可以使用”背景风格”颜色和属性.当你完成的后,关闭”背景属性”对话框.
3. 双击”鼠标”的图标, 这个参数面板你能够调整双击的时间延迟,速度和灵敏度 .
假如你伸左撇子,你也可以在这里选择左收习惯
当完成后选择关闭”鼠标属性”对话框.
4. 打开”桌面主题”面板.你可以选择一个主题,默认的主题是”Bluecurve”.选一个你喜欢的,然后关闭这个面板.
5. 最后,打开”工具栏”,你能够选择你可以选择下列特性中的一个:显示工具条,或小的图标.然后关闭面板.
目标: Red Hat Linux的桌面环境已经按你的要求定制好了。
(end)
试验9 标准输入输出和管道 估计时间: 30分钟 目标: 熟悉Red Hat Linux中的标准输入输出和管道 试验的起点: 标准的Red Hat Linux安装
步骤1:标准输入和输出 任务:
1. 使用你熟悉的编辑器创建两个文件:
packages1.txt 应该包含以下八行:
amanda galleon metacity mozilla postgresql procinfo rpmfind squid
packages2.txt应该包含以下6行
anaconda openssh gnome-core samba sendmail xscreensaver
2. cat工具是最简单的linux过滤器,它会默认把跟在后面的参数当作文件名,并把这个文件作为输入,如果没有文件名则把标准的输入作为自己的输入,然后将它们发送到标准的输出上去。现在我们来实验一下:
$cat packages1.txt
3.
如果cat后没有参数,则它会等待标准的输入,所以当你输入cat命令后,再回车,然后什么也没有显示。输入cat后,cat命令会监视标准输入,等待输
入的到达。如果这个时候输入一些文本,再按回车,cat就会把输入的内容当作自己的输入,然后输出到标准的输出——显示器上,结束cat的命令为按下
ctrl-d,这是结束输入的标志。 $ cat 输入一些文字,然后按回车。 ^d (就是按ctrl-d)
4. 大多数的文本处理命令是执行过滤操作,他们可以读标准输入,对输入做一些动作,然后把结果发送到标准输出去。这些命令就向cat一样,只是对输入的处理不太一样。
tr命令,也是过滤器命令,如果给tr后加两个字符串做为参数,它会读取标准输入,然后把输入中包含着前一个字符串的字符变成第二个字符串,然后输出到标准输出去。
把刚才的命令换成tr,tr将把字符串中有的字符变成大写的。
$ tr 'aeiou' 'AEIOU' 输入一些文字,然后按回车。 ^d
5. 定义shell不要把命令的输出发到标准输出上,而是重定向到一个文件中,我们使用 > 来重定向
重复cat的例子重定向标准的输出到packages1.catfile,这样把输出到屏幕的东西输出到了文件中,效果就和重新copy了一份文件是一样的,cat这个输出文件,然后用diff和ls确认原文件与package1.catfile内容一样。
$ cat packages1.txt > packages1.catfile $ cat packages1.catfile $ diff packages1.txt packages1.catfile $ ls –l packages1*
6. 使用>>来重定向会把输出附加到已存在的文件的末尾。
把packages2.txt文件中的内容附加到packages1.catfile之后,然后检验结果。
$ cat packages2.txt >> packages1.catfile $ cat packages1.catfile
7. 如果输出重定向时cat没有直接跟文件名的参数,那么cat就会等待标准的输入,直到按下ctrl-d作为结束,然后把所有输入的东西重定向到这个文件中去。这样可以很容易的创建一个文本文件,
$ cat > typedin.txt This time, when text is typed at the keyboard, It is not echoed back to the screen. Instead, it is redirected to the file typedin.txt. ^d
$ ls –l typedin.txt $ cat typedin.txt
8. 使用tr取代cat,重复刚才的命令
$ tr 'aeiou' 'AEIOU' > trfile.txt This time, when text is typed at the keyboard, It is not echoed back to the screen. Instead, it is redirected to the file typedin.txt. ^d
$ ls –l trfile.txt $ cat trfile.txt
9. 使用set –o命令,确认显示出目前bash的noclobber选项是关闭状态,确认当输出重定时向你可以重写文件
$ set –o $ ls –l /tmp > trifle.txt $ ls –l trfile.txt $ cat trifle.txt
10. 使用set命令更改noclobber选项,如下操作:
$ set –o noclobber $ echo “new contents” > trfile.txt bash: trfile.txt:cannot overwrite existing file
11. cat可以接受一个文件名或者是一个输入重定向的文件,测试以下两个命令:
$ cat packages1.txt $ cat < packages1.txt
12. 但是tr不能接受文件名作为参数,它只希望输入是标准输入。
$ tr 'aeiou' 'AEIOU' < packages1.txt
13. 下面的例子中标准输入和输出都被重定向,输入还是packages1.txt文件,这回改为输出到文件packages1.trfile.txt中去了。
$ tr 'aeiou' 'AEIOU' < packages1.txt >packages1.trfile.txt $ ls –l packages1.txt packages1.trfile.txt $ cat packages1.trfile.txt 步骤2:管道
1. 把一个命令的标准输出直接传输给另一个命令作为它的标准输入,这样特殊的机制叫做管道。
如果没有管道,你要想打印你的目录中文件的列表至少要两步,还需要把没用的文件删除,(lpr命令可以把文件的内容发给默认的打印机,它的用法会在第12章讲)(注意只有当你没有打印机时可以使用以下的例子)
$ ls –l > /tmp/ls.txt $ lpr /tmp/ls.txt $ rm /tmp/ls.txt
使用管道,这些命令可以仅仅用以下短短的一条命令,将ls –l的输出直接发送给lpr作为输入,lpr也不需要别的参数。
$ ls –l | lpr
2. 管道经常的用法是一个命令产生了很多页的输出,可以把这些输出直接给less,管道左边是你的命令,右边是less,less不需要参数。(空格键是翻页,q键是退出less)
$ ls –l /usr/bin | less
步骤3:练习
答案在下面,可以使用man page来帮助你解决问题
1. 拷贝一份cal命令的man page,放在你的主目录下,取名叫cal.man。
2. 只在一行上输入什么样的命令,可以使你从键盘上输入的文本输出到打印机上
3. 怎样把/usr/bin下以c或d开头的文件列表发送到打印机上?
步骤3:练习-答案
1. man cal > cal.man 2. lpr lpr打印出以后面的参数命名的文件中的内容,如果没有参数,lpr就会从标准输入中读取,标准的输入是键盘,直到你按下ctrl-d表示键盘输入结束。 3.ls –l /usr/bin/cd* | lpr
|