⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000004.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;fd;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;off_t&nbsp;length;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;chsize&nbsp;(fd,&nbsp;length);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endif&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#endif&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;Why&nbsp;doesn't&nbsp;find's&nbsp;&quot;{}&quot;&nbsp;symbol&nbsp;do&nbsp;what&nbsp;I&nbsp;want?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>3.4)&nbsp;&nbsp;&nbsp;&nbsp;为什麽执行&nbsp;find&nbsp;时所使用的&nbsp;{}&nbsp;符号无法达到我预期的结果?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Find&nbsp;指令有一个&nbsp;-exec&nbsp;的选项会针对每一个找到的档案执行一个特殊&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的指令。Find&nbsp;会把出现{}的地方置换成目前找到的档案名称。因此,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也许有一天您会使用&nbsp;find&nbsp;指令对每一个档案执行某个指令,或者对&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个目录执行某个指令。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;/path&nbsp;-type&nbsp;d&nbsp;-exec&nbsp;command&nbsp;{}/\*&nbsp;\;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;希望&nbsp;find&nbsp;能依序执行以下指令:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;directory1/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;directory2/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不幸的是,find&nbsp;只会展开自成一体的&nbsp;{}&nbsp;token;如果&nbsp;{}&nbsp;跟其他字元相连&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;的话(如:{}/*),那麽find将不会以您所想的方式展开&nbsp;{},&nbsp;而是转换为以&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;下命令&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;{}/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;{}/*&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;也许您可以把它当成&nbsp;bug,&nbsp;也可以把它看成是故意设计的特异功能。但我们&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;可不愿被目前这个特异功能干扰。所以要怎样避免这个问题呢?其中一种做&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;法是写一个小小的&nbsp;shell&nbsp;script,名称就叫做&nbsp;./doit&nbsp;好了,其内容如下:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;&quot;$1&quot;/*&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那麽您就可以把原来的命令行改写为&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;/path&nbsp;-type&nbsp;d&nbsp;-exec&nbsp;./doit&nbsp;{}&nbsp;\;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果您想省掉&nbsp;./doit&nbsp;这个&nbsp;shell&nbsp;script,&nbsp;可以这麽写:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;/path&nbsp;-type&nbsp;d&nbsp;-exec&nbsp;sh&nbsp;-c&nbsp;'command&nbsp;$0/*'&nbsp;{}&nbsp;\;&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(这种写法可行的原因是&nbsp;&quot;sh&nbsp;-c&nbsp;'command'&nbsp;A&nbsp;B&nbsp;C&nbsp;...&quot;指令当中,$0会展开为&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A,&nbsp;$1会展开为B,&nbsp;依此类推)&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;或者您也可以略施小计使用&nbsp;sed&nbsp;来造出您想执行的指令行:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;/path&nbsp;-type&nbsp;d&nbsp;-print&nbsp;|&nbsp;sed&nbsp;'s:.*:command&nbsp;&amp;/*:'&nbsp;|&nbsp;sh&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果您想减少&nbsp;command&nbsp;的执行次数,您可以先检查看看系统中有没有&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xargs&nbsp;这个指令,&nbsp;xargs会从标准输入一次读取一行,并且把这些读入的资料&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;合并至一个命令行内。您可以写成以下命令行:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;find&nbsp;/path&nbsp;-print&nbsp;|&nbsp;xargs&nbsp;command&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这样会使以下指令执行一次或多次:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;command&nbsp;file1&nbsp;file2&nbsp;file3&nbsp;file4&nbsp;dir1/file1&nbsp;dir1/file2&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;很不幸地,这并不是完美无缺或者万无一失的解法,输入&nbsp;xargs&nbsp;的文字行&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;必须以换行字元结尾,所以当档案名称当中有奇怪的字元(如换行字元)时,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xargs就会因此而混淆。&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;How&nbsp;do&nbsp;I&nbsp;set&nbsp;the&nbsp;permissions&nbsp;on&nbsp;a&nbsp;symbolic&nbsp;link?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>3.5)&nbsp;&nbsp;我要如何改变一个&nbsp;symbolic&nbsp;link&nbsp;的&nbsp;permission&nbsp;呢?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这个问题没有意义,因为&nbsp;symbolic&nbsp;link的&nbsp;permission&nbsp;根本不代表什麽。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;那个&nbsp;link&nbsp;所指过去的档案的&nbsp;permission&nbsp;才有意义。&nbsp;<BR>&nbsp;<BR>------------------------------&nbsp;<BR>&nbsp;<BR>Subject:&nbsp;How&nbsp;do&nbsp;I&nbsp;&quot;undelete&quot;&nbsp;a&nbsp;file?&nbsp;<BR>Date:&nbsp;Thu&nbsp;Mar&nbsp;18&nbsp;17:16:55&nbsp;EST&nbsp;1993&nbsp;<BR>&nbsp;<BR>3.6)&nbsp;&nbsp;我要如何&nbsp;&quot;undelete&quot;&nbsp;一个档案?&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;某年某月的某一天,要删除&nbsp;&quot;*.foo&quot;&nbsp;却一不小心打成了&nbsp;&quot;rm&nbsp;*&nbsp;.foo&quot;,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;结果发现竟把&nbsp;&quot;*&quot;&nbsp;都删除了。真的是欲哭无泪啊!可是你也只好把这当成&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;是成长的代价了。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当然一个称职的系统管理员应当会定期做备份。先问一问你的系统管理员看&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;你不小心删除的档案是不是有备份起来。如果没有的话,嗯,继续往下看吧!&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;不管你是不是真的要删除一个档案,当你下了&nbsp;&quot;rm&quot;&nbsp;以後,档案就不见了。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在你&nbsp;&quot;rm&quot;&nbsp;一个档案,系统就不再记得你的档案是用了硬碟中的哪些&nbsp;block&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;了。更糟糕的是,当系统要用到更多的硬碟空间时,就优先取用这些刚放出&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;来的&nbsp;block。不过天底下没有不可能的事。理论上说,若你在下了&nbsp;&quot;rm&quot;&nbsp;後,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;马上把系统&nbsp;shutdown,资料是就得回来的。不过,你得找一个对系统非常&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;熟悉且肯花费数小时至数天的时间来帮你做这件事专家才行。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当你不小心&nbsp;&quot;rm&quot;&nbsp;了一个档案後,第一个反应或许是为什麽不用一个&nbsp;alias&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;或在&nbsp;sh&nbsp;中的&nbsp;function&nbsp;将&nbsp;&quot;rm&quot;&nbsp;&nbsp;取代掉,当你下&nbsp;&quot;rm&quot;&nbsp;只把档案搬到一个&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;垃圾桶之类的地方呢?那如果不小心杀错档案就可以挽救,只是要定期清一&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;清垃圾桶就好了。有两个理由。第一,大多数的人不认为这是一个好的做法。&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这麽做的话你会太依赖你的&nbsp;&quot;rm&quot;,有一天到了一个正常的系统中把正常的&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;rm&quot;&nbsp;当成你的&nbsp;&quot;rm&quot;&nbsp;来用,那可能会死得很惨。第二,你会发现你花费了&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;许多不必要的时间在处理垃圾桶里的东西。所以对一个初学者而言呢,用&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;rm&quot;&nbsp;的&nbsp;-i&nbsp;选项应该就够了。&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你有大无畏的精神的话,那好吧,就给你个简单的答案。写一个名为&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;can&quot;&nbsp;的指令,功用是将档案移到垃圾桶里。在&nbsp;csh(1)&nbsp;中,将以下的东西&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;放进&nbsp;&quot;.login&quot;&nbsp;里:&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;can&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'mv&nbsp;\!*&nbsp;~/.trashcan'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;junk&nbsp;file(s)&nbsp;to&nbsp;trashcan&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;mtcan&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'rm&nbsp;-f&nbsp;~/.trashcan/*'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;irretrievably&nbsp;empty&nbsp;trash&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(&nbsp;!&nbsp;-d&nbsp;~/.trashcan&nbsp;)&nbsp;mkdir&nbsp;~/.trashcan&nbsp;&nbsp;#&nbsp;ensure&nbsp;trashcan&nbsp;exists&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果你想要每次&nbsp;logout&nbsp;时都把垃圾桶清乾净,那就把&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;-f&nbsp;~/.trashcan/*&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;进&nbsp;&quot;.logout&quot;&nbsp;里。若你用的是&nbsp;sh&nbsp;或是&nbsp;ksh,那自己试试著写写看吧!&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MIT&nbsp;的雅典娜计画(Project&nbsp;Athena)作出了一套有&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;delete/undelete/expunge/purge&nbsp;的软体。这套软体可以完全取代&nbsp;&quot;rm&quot;&nbsp;而又提&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;供&nbsp;undelete&nbsp;的功能。这个软体曾&nbsp;post&nbsp;在&nbsp;comp.sources.misc(volume&nbsp;17,&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;issue&nbsp;023-025)。&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -