[dmtsai@study ~]$
ll ~/rootfile
<==
有
个
新
档
被½立了!
-
rw
-
rw
-
r
--
. 1 dmtsai dmtsai 1078 Jul 9 18:51
/home/dmtsai/rootfile
怪了!屏幕怎么会完全没有数据呢?这是因为原本『
ll /
』所显示的数据已经被重新导向到
~/rootfile
文件中了!
那个
~/rootfile
的档名可以随便你取。如果你下达『
cat ~/rootfile
』那就可以看到原本
应该在屏幕上面的数据啰。
如果我再次下达:『
ll /home > ~/rootfile
』后,那个
~/rootfile
文件的
内容变成什么?
他½变成『½有
ll /home
的数据』而已!咦!原本的『
ll /
』数据就不见了吗?是
的!因为该文件的½立方式是:
1.
该文件
(
本例中是
~/rootfile)
若不存在,系统会自动的½他½立起来,但是
2.
当这个文件存在的时候,那么系统就会先½这个文件内容清空,然后再½数据写入!
3.
也就是若以
>
输出到一个已存在的文件中,那个文件就会被覆盖掉啰!
那如果我想要½数据累加而不想要½旧的数据删除,那该如何是好?利用两个大于的符号
(>>)
就好
啦!以上面的范例来说,你应该要改成『
ll / >> ~/rootfile
』即可。
如此一来,当
(1) ~/rootfile
不存
在时系统会主动½立这个文件;
(2)
若该文件已存在,
则数据会在该文件的最下方累加½去!
上面谈到的是
standard output
的正确数据,那如果是
standard error output
的错误数据呢?那就透过
2>
及
2>>
啰!同样是覆盖
(2>)
与累加
(2>>)
的特性!我们在刚刚才谈到
stdout
代码是
1
而
stderr
代码是
2
,
所以这个
2>
是很容易理½的,而如果½存在
>
时,则代表预设的代码
1
啰!
也就是说:
.
1>
:以覆盖的方法½『正确的数据』输出到指定的文件或装置上;
.
1>>
:以累加的方法½『正确的数据』输出到指定的文件或装置上;
.
2>
:以覆盖的方法½『错误的数据』输出到指定的文件或装置上;
.
2>>
:以累加的方法½『错误的数据』输出到指定的文件或装置上;
要注意喔,『
1>>
』以及『
2>>
』中间是没有空格的!
OK
!有些概念之后让我们继续聊一聊这家
伙怎么应用吧!
当你以一般身份执行
find
这个指令的时候,由于权限的问题可能会产生一些错误信
息。例如执行『
find / -name testing
』时,可能会产生类似『
find: /root: Permission denied
』之类的讯
息。
例如底下这个范例:
范例二:利用一般身份
账号
搜
寻
/home
底下是否有名
为
.bashrc
的
文件
存在
[dmtsai@study ~]$
find /home
-
name .bashrc
<==
身份是
dmtsai
喔!
find: '/home/arod': Permission denied
<== Standard error output
find: '/home/alex': Permission denied
<== Standard error output
/home/dmtsai/.bashrc
<== Standard output
由于
/home
底下还有我们之前½立的账号存在,那些账号的家目录你当然不能½入啊!所以就会有
错误及正确数据了。
好了,那么假如我想要½数据输出到
list
这个文件中呢?执行『
find /home
-name .bashrc > list
』
会有什么½果?呵呵,你会发现
list
里面存了刚刚那个『正确』的输出数据,
至于屏幕上还是会有错误的讯息出现呢
!伤脑½!如果想要½正确的与错误的数据分别存入不同的文
件中需要怎么做?