class-4 Linux文件系统(二)及IO重定向

时间:2021-03-27 05:32:42

一、文件系统(二)

  1、文件通配符

       作用:可以批量的选择出符合要求的文件或目录

        *  匹配零个或多个字符

         ?  匹配任何单个字符

         ~  当前用户家目录

        ~username  用户家目录

[root@6 /]# cd ~lvasu
[root@6 lvasu]# ls

        ~+  当前工作目录

        ~- 前一个工作目录

            # ls  ~-/issue

     [root@6 ~]# ls  a    anaconda-ks.cfg  install.log         x       模板  图片  下载  桌面abc  df               install.log.syslog  公共的  视频  文档  音乐[root@6 ~]# ls ~+                           ##表示当前工作目录a    anaconda-ks.cfg  install.log         x       模板  图片  下载  桌面abc  df               install.log.syslog  公共的  视频  文档  音乐[root@6 ~]# cd /[root@6 /]# lsbin   dev  home  lib64       media  mnt  opt   root  selinux  sys      tmp  varboot  etc  lib   lost+found  misc   net  proc  sbin  srv      testdir  usr[root@6 /]# ls ~-                           ## 表示前一个工作目录a    anaconda-ks.cfg  install.log         x       模板  图片  下载  桌面abc  df               install.log.syslog  公共的  视频  文档  音乐

        [0-9] 匹配一个数字范围

        [a-z] :大写和小写字母

        [A-Z] :大写字母

       [wxc] 匹配列表中的任何的一个字符

       [^wxc]  匹配列表中的所有字符以外的字符

root@6 ~]# touch a{1..4}[root@6 ~]# lsa   a2  a4   anaconda-ks.cfg  install.log         x       模板  图片  下载  桌面a1  a3  abc  df               install.log.syslog  公共的  视频  文档  音乐[root@6 ~]# ls a[1-4]a1  a2  a3  a4

       预定义的字符类: :#man 7 glob

          [:digit:] :任意数字,相当于0-9

          [:lower:] :任意小写字母

          [:upper:]:  任意大写字母

          [:alpha:]:  任意大小写字母

          [:alnum:] :任意数字或字母

          [:space:] :空格

          [:punct:] :标点符号

[root@7 ~]# touch fa fA fb fB fc fC fd fD[root@7 ~]# ls f[a-z]fa  fA  fb  fB  fc  fC  fd  fD[root@7 ~]# ls f[A-Z]fA  fb  fB  fc  fC  fd  fD[root@7 ~]# ls f[a-Z]fa  fA  fb  fB  fc  fC  fd  fD[root@7 ~]# ls f[A-z]fA  fb  fB  fc  fC  fd  fD

2、创建空文件和刷新时间

     touch 命令:      无法使用globbing

               touch [OPTION]... FILE...

    -a: 变 仅改变 atime

    -m: 变 仅改变 mtime

    -t :STAMP:

          [[CC]YY]MMDDhhmm[.ss]

[root@6 ~]# touch -at 1506010800.00 a1[root@6 ~]# touch -mt 1406010800.00 a1[root@6 ~]# stat a1 File: "a1" Size: 0         Blocks: 0          IO Block: 4096   普通空文件Device: 802h/2050dInode: 2752743     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2015-06-01 08:00:00.000000000 +0800Modify: 2014-06-01 08:00:00.000000000 +0800Change: 2016-07-28 20:27:20.517989998 +0800[root@6 ~]# touch -t 1906010800.00 a1   #-t命令修改a、m时间[root@6 ~]# stat a1 File: "a1" Size: 0         Blocks: 0          IO Block: 4096   普通空文件Device: 802h/2050dInode: 2752743     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2019-06-01 08:00:00.000000000 +0800Modify: 2019-06-01 08:00:00.000000000 +0800Change: 2016-07-28 20:29:05.724988876 +0800

    -c:  如果文件不存在,则不予创建

[root@6 ~]# touch -c a5[root@6 ~]# lsa   a2  a4   anaconda-ks.cfg  install.log         x       模板  图片  下载  桌面a1  a3  abc  df               install.log.syslog  公共的  视频  文档  音乐

    # touch f?   已存在的文件刷新时间

[root@6 ~]# stat a1File: "a1"Size: 0         Blocks: 0          IO Block: 4096   普通空文件Device: 802h/2050dInode: 2752743     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2016-07-28 20:12:06.179989457 +0800Modify: 2016-07-28 20:12:06.179989457 +0800Change: 2016-07-28 20:12:06.179989457 +0800[root@6 ~]# touch a1[root@6 ~]# stat a1File: "a1" Size: 0         Blocks: 0          IO Block: 4096   普通空文件Device: 802h/2050dInode: 2752743     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2016-07-28 20:17:46.504989721 +0800Modify: 2016-07-28 20:17:46.504989721 +0800Change: 2016-07-28 20:17:46.504989721 +0800

    touch {a..d}  

[root@7 ~]# touch {a-d}[root@7 ~]# ls{a-d}            fa  fb  fc  fd  initial-setup-ks.cfg  模板  图片  下载  桌面anaconda-ks.cfg  fA  fB  fC  fD  公共

   无法使用globbing

[root@6 ~]# touch b[1-3][root@6 ~]# lsanaconda-ks.cfg  install.log         x       模板  图片  下载  桌面b[1-3]           install.log.syslog  公共的  视频  文档  音乐

    3、复制文件和目录cp

         CP是较常用的复制命令

        3.1、使用格式:

    1、cp [OPTION]... [-T] SOURCE DEST

    2、cp [OPTION]... SOURCE... DIRECTORY

    3、cp [OPTION]... -t DIRECTORY SOURCE...

    4、cp SRC DEST

          源文件是文件时:

              当目标不存在时,则新建一个文件,并将内容复制到目标文件中。

              当目标存在时,

                如果目标是一个普通文件,则将源文件的内容复制到目标文件中

                如果目标是一个目录文件,则在目录下 创建一个和源文件相同的文件,同样将源文件的内容复制到目标文件中

    5、cp SRC... DEST

          SRC... :多个文件

               目标必须存在,且为目录

    6、cp SRC DEST

         源文件是目录:此时使用选项:-r

             如果目标不存在:则创建指定目录,复制源文件目录中所有文件至目标目录中;

             如果目标目录存在:

                      如果是文件:报错

                      如果目标是目录:复制内容

       3.2、cp 常用选项

     -i :交互式

     -r, -R:  递归复制目录及内部的所有内容;

     -a:  归档,相当于-dR --preserv=all

     -d :--no-dereference --preserv=links 不复制原文件,只复制链接名

 保留连接属性

[root@7 testdir]# ls -l stderr /root/stderr-rw-------. 1 root root  0 7月  28 11:49 /root/stderrlrwxrwxrwx. 1 root root 15 7月  27 10:56 stderr -> /proc/self/fd/2[root@7 testdir]# cp -d stderr /boot/std       ##保留链接属性[root@7 testdir]# ls -l stderr /boot/stdlrwxrwxrwx. 1 root root 15 7月  28 11:54 /boot/std -> /proc/self/fd/2lrwxrwxrwx. 1 root root 15 7月  27 10:56 stderr -> /proc/self/fd/2

     --preserv[=ATTR_LIST]

    mode:          权限

    ownership:   属主属组

    timestamp:

    links

    xattr          附加属性  

    context       注释

    al

[root@6 ~]# cp --preserv=mode b /testdir/bcp:是否覆盖"/testdir/b"? y[root@6 ~]# ls -l /testdir/b a-rw-r--r--. 1 root root 49 7月  28 17:51 a-rw-r--r--. 1 root root 49 7月  29 09:39 /testdir/b[root@6 ~]# cp --preserv=timestamp b /testdir/bcp:是否覆盖"/testdir/b"? y[root@6 ~]# stat /testdir/b a File: "/testdir/b" Size: 49        Blocks: 8          IO Block: 4096   普通文件Device: 803h/2051dInode: 13          Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2016-07-29 09:35:27.631995848 +0800Modify: 2016-07-28 17:51:21.980993419 +0800Change: 2016-07-29 09:40:29.380996431 +0800 File: "a" Size: 49        Blocks: 8          IO Block: 4096   普通文件Device: 802h/2050dInode: 2752661     Links: 1Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)Access: 2016-07-29 09:35:27.631995848 +0800Modify: 2016-07-28 17:51:21.980993419 +0800Change: 2016-07-29 09:31:38.572996510 +0800

 当要使用多个参数,中间用,逗号隔开

[root@6 ~]# touch a[root@6 ~]# cp --preserv=timestamp,mode  a /testdir/a[root@6 ~]# ls a /testdir/aa  /testdir/a[root@6 ~]# ll a /testdir/a-rw-r--r--. 1 root root 0 7月  29 10:18 a-rw-r--r--. 1 root root 0 7月  29 10:18 /testdir/a

     -p:  等同--preserv=mode,ownership,timestamp

     -v: --verbose -v: --verbose

     -f: --force

     -n:如果已存在的文件,则不执行操作

         # cp  --preserv=mode,links

   

4、命令别名

    1、显示当前shell 进程所有可用的命令别名

            #alias

[root@6 ~]# alias   ls='ls /'[root@6 ~]# lsbin   dev  home  lib64    media  mnt  opt   root  selinux  sys   testdir  usrboot  etc  liblost+found  misc   net  proc  sbin  srv      test  tmp      var[root@6 ~]# unalias ls[root@6 ~]# lsab     install.log.syslog  公共的  视频文档  音乐anaconda-ks.cfg  install.log  x 模板 图片下载  桌面

    2、定义别名NAME ,其相当于执行命令VALUE; ;

         #alias NAME='VALUE'

    3、在命令行中定义的别名,仅对当前shell 进程有效

    4、如果想永久有效,要定义在配置文件中

         仅对当前用户:~/.bashrc

         对所有用户有效:/etc/bashrc

    5、编辑配置给出的新配置不会立即生效;

    6、bash 进程重新读取配置文件:

         source /path/to/config_file. /path/to/config_file

    7、撤消别名:unalias

         8、unalias [-a] name [name ...]

    9、如果别名同原命令同名,如果要执行原命令,可使用

    “\COMMAND”

    ‘COMMAND’

      /PATH/COMMAND :外部命令

 [root@6 sysconfig]# type lsls is aliased to `ls --color=auto'[root@6 sysconfig]# cd[root@6 ~]# \lsa   a2a4   anaconda-ks.cfg  install.log x 模板图片  下载  桌面a1  a3abc  df     install.log.syslog  公共的  视频文档  音乐[root@6 ~]# 'ls'a   a2a4   anaconda-ks.cfg  install.log x 模板图片  下载  桌面a1  a3abc  df     install.log.syslog  公共的  视频文档  音乐[root@6 ~]# "ls"a   a2a4   anaconda-ks.cfg  install.log x 模板图片  下载  桌面a1  a3abc  df     install.log.syslog  公共的  视频文档  音乐[root@6 ~]# /bin/lsa   a2a4   anaconda-ks.cfg  install.log x 模板图片  下载  桌面a1  a3abc  df     install.log.syslog  公共的  视频文档  音乐

5、移动和重命名文件

    mv [OPTION]... [-T] SOURCE DEST

    mv [OPTION]... SOURCE... DIRECTORY

    mv [OPTION]... -t DIRECTORY SOURCE...

    常用选项: -i:  交互式

                      -f:  强制

[root@6 ~]# ls /testdir1  2  3  4  a  b  c  lost+found  sysconfig  VMware Tools[root@6 ~]# ls /test[root@6 ~]# mv /testdir/{1..4}  /test[root@6 ~]# ls /test1  2  3  4[root@6 ~]# touch a{1..3}[root@6 ~]# lsa1  a3               install.log         x       模板  图片  下载  桌面a2  anaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐[root@6 ~]# mv -t /testdir/ a{1..3}[root@6 ~]# lsanaconda-ks.cfg  install.log.syslog  公共的  视频  文档  音乐install.log      x                   模板    图片  下载  桌面[root@6 ~]# ls /testdira1  a2  a3  lost+found  sysconfig  VMware Tools

6、删除

    1、rm [OPTION]... FILE...

       常用选项:

    -i:  交互式

    -f:  强制删除

    -r:  递归

    --no-preserve-root

      例: #rm -rf /

[root@6 ~]# \rm  -i a1rm: 无法删除"a1": 没有那个文件或目录[root@6 ~]# \rm  -i /testdir/a1rm:是否删除普通空文件 "/testdir/a1"?y[root@6 ~]# rm -f /testdir/a[2-3][root@6 ~]# ls /testdir/lost+found  sysconfig  VMware Tools

7、目录操作

    1、 tree  显示目录树

    -d:  只显示目录

    -L level :指定显示的层级数目

    -P pattern:  只显示由指定pattern 匹配到的 路径

[root@6 ~]# mkdir -p b/c/d/[root@6 ~]# tree bb└── c   └── d2 directories, 0 files[root@6 ~]# tree -d bb└── c   └── d2 directories[root@6 ~]# tree  -P c.├── b│   └── c│       └── d├── \345\205\254\345\205\261\347\232\204├── \346\250\241\346\235\277├── \350\247\206\351\242\221├── \345\233\276\347\211\207├── \346\226\207\346\241\243├── \344\270\213\350\275\275├── \351\237\263\344\271\220└── \346\241\214\351\235\24211 directories, 0 files[root@6 ~]# tree  -L 2.├── a├── anaconda-ks.cfg├── b│   └── c├── install.log├── install.log.syslog├── x -> ../dev/rtc├── \345\205\254\345\205\261\347\232\204├── \346\250\241\346\235\277├── \350\247\206\351\242\221├── \345\233\276\347\211\207├── \346\226\207\346\241\243├── \344\270\213\350\275\275├── \351\237\263\344\271\220└── \346\241\214\351\235\242   ├── gnome-terminal.desktop   └── ZI]7F[9~$4[}PW1O9YCMF}4.gif10 directories, 7 files[root@6 ~]# tree  -L 1.├── a├── anaconda-ks.cfg├── b├── install.log├── install.log.syslog├── x -> ../dev/rtc├── \345\205\254\345\205\261\347\232\204├── \346\250\241\346\235\277├── \350\247\206\351\242\221├── \345\233\276\347\211\207├── \346\226\207\346\241\243├── \344\270\213\350\275\275├── \351\237\263\344\271\220└── \346\241\214\351\235\2429 directories, 5 files

    2、mkdir  创建目录

    -p:  存在于不报错,且可自动创建所需的各目录;

    -v:  显示详细信息

    -m MODE:  创建目录时直接指定权限;

[root@6 ~]# mkdir -vp s/c/d/mkdir: 已创建目录 "s"mkdir: 已创建目录 "s/c"mkdir: 已创建目录 "s/c/d/"[root@6 ~]# tree ss└── c   └── d2 directories, 0 files

3、rmdir  删除空目录

-p:  递归删除父空目录

-v:  显示详细信息

[root@6 ~]# rmdir -pv  b/c/d/rmdir: 正在删除目录 "/b/c/d/"rmdir: 正在删除目录 "/b/c"rmdir: 正在删除目录 "/b"

4、rm -r  递归删除目录树

[root@6 ~]# rm -vr brm:是否进入目录"b"? yrm:是否进入目录"b/c"? yrm:是否删除目录 "b/c/d"y已删除目录:"b/c/d"rm:是否删除目录 "b/c"?y已删除目录:"b/c"rm:是否删除目录 "b"?y已删除目录:"b"

8、索引节点

    索引节点是一个磁盘分区或一个文件系统中存放文件的唯一编号,系统通过inode号就可以找到我们需要的文件。

    每个分区或文件系统都会各自维护一张inode表,因此不同分区或文件系统中会存在相同inode号的文件。

    1、 inode (index node )表中包含文件系统所有文件列表

    2、一个节点 (索引节点)是在一个表项,包含有关文件的信息

         ( 元数据  ),包括:

    *文件类型,权限,UID ,GID

    *链接数(指向这个文件名路径名称个数)

    *该文件的大小和不同的时间戳

    *指向磁盘上文件的数据块指针

    *有关文件的其他数据

    # for id in {1..204800};    do touch f$id:       echo f$id is created;   done


      # df -i 查看inode号

      # ls -i  查看inode号

  8.1目录

    目录中存放的是文件inode号和名字的列表

    1、文件引用一个是 inode号

    2、系统是通过文件名来引用一个文件

    3、一个目录是目录下的文件名和文件inode 号之间的映射

  8.2  inode的大小及inode表

         inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

         inode除了占用磁盘空间,inode号数量也是有限的。如果inode号占满后,系统也会报错。

[root@6 ~]# df -iFilesystem      Inodes  IUsed   IFree IUse% Mounted on/dev/sda2      3203072 107481 3095591    4% /tmpfs           125517      4  125513    1% /dev/shm/dev/sda1        51200     38   51162    1% /boot/dev/sda3      1281120   4113 1277007    1% /testdir/dev/sr0             0      0       0     - /media/CentOS_6.8_Final

   

8.3  inode 表存放信息及工作原理

    基本信息:属性信息,属主,文件大小,时间戳,指针(直接指针,双重指针,多重指针)

     以32位文件系统为例

         4KB   *1024  4MB   *1024  4TB

    元数据:inode table  

    数据内容: 数据块

    inode table  中包含一条条文件的记录信息,每条记录信息会包含该文件的元数据以及1-12的数据块直接指针,链接数据块。

    间接指针:1-12个数据数据块直接指针分别指向一个数据块,每个数据块中存放的是间接指针,指针指向数据块。

    双重间接指针:1-12个数据数据块直接指针分别指向一个数据块,每个数据块中存放的是间接指针,指向的数据块中依然存放的是双重间接指针,数据指针指向的是数据块。

8.4、cp 和inode     本质迁移数据,在数据区写入文件,并且会获得一个inode号,在inode表中和文件名关联并生成一个新条目。

    1、在 在 CP的命令:

    分配一个空闲的inode 号,在inode 表中生成新条目

    在目录中创建一个目录项,将名称与inode 编号关联

    拷贝数据生成新的文件

     rm 和inode     本质上数据区并不会删除数据,将该数据块标记为空。将inode表中该文件的条目删除,释放一个inode空间。

    1、rm  命令:

    链接数递减,从而释放的inode 号可以被重用

    把数据块放在空闲列表中6

    删除目录项

    数据实际上不会马上被删除,但当另一个文件使用数据块时将被覆盖。

    2、如果mv 命令的目标和源在相同的文件系统,作为mv 命令

    用新的文件名创建对应新的目录项

    删除旧目录条目对应的旧的文件名

    不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

    3、如果目标和源在一个不同的文件系统,mv 相当于cp 和rm

    4、如果mv 命令的目标和源在相同的文件系统,作为mv  命令

    用新的文件名创建对应新的目录项

    删除旧目录条目对应的旧的文件名

    不影响inode表(除时间戳)或磁盘上的数据位置:没有数据被移动!

    5、如果目标和源在一个不同的文件系统,mv 相当于cp 和rm

9、链接文件

    链接文件有硬链接和符号链接两种,硬链接文件通俗的讲是源文件复制的重命名文件,软连接文件通俗的讲是指向源文件的指针文件。

 9.1硬链接

    1、创建硬链接会增加额外的记录项以引用文件

    2、 对应于同一文件系统上一个物理文件

    3、每个目录引用相同的 inode 号

    4、创建时链接数递增;目录下创建文件,目录的硬链接会增加

    5、删除文件时:

    rm 命令递减计数的链接

    文件要存在,至少有一个链接数

    当链接数为零时,该文件被删除

    6、不能跨越驱动器或分区,无法对目录创建硬链接

    7、语法 :

          ln filename [linkname ]

 9.2符号(或软)链接

    1、 一个符号链接指向另一个文件

    2、 ls - l的显示链接的名称和引用的文件

    3、 一个符号链接的内容是它引用文件的名称

    4、 可以对目录进行

    5、 可以跨分区

    6、 指向的是另一个文件的路径;其大小为指向的路径字符串的长度;不增加或减少目标文件inode 的引用计数;

    7、 语法:

    8、 ln -s  filename [linkname]  

        软连接文件

         原始文件的路径

          相对路径    相对于软链接文件的路径,而不是相对于当前工作目录  

 9.3 区别

            (1)与源文件的关系不同,硬链接原文件&链接文件公用一个inode号,说明他们是同一个文件,而软链接原文件&链接文件拥有不同的inode号,表明他们是两个不同的文件

            (2)文件属性不同的,软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;

            (3)链接数目是不同的,软链接的链接数目不会增加;

            (4)文件大小是不同的,硬链接文件显示的大小是跟原文件是一样的,这用强调,因为是等同的嘛,而这里软链接显示的大小与原文件就不同了,通常远小于源文件。

10.确定文件内容

    1、  文件可以包含多种类型的数据

    2、 检查文文件类型,然后确定适当的开放命令或应用程序使用

    3、 file [options] <filename>...

    Option:

[root@6 ~]# file aa: empty

-b 列出文件辨识结果时,不显示文件名称。

[root@6 testdir]# file -b aempty

-c详细显示指令执行过程,便于排错或分析程序执行形

[root@6 ~]# file -c acontoffsettypeopcodemaskvaluedesc

-f 列出文件中文件名的文件类型

[root@6 testdir]# file -f a/testdir/a.zip  :      cannot open `/testdir/a.zip  ' (No such file or directory)/testdir/b  :          cannot open `/testdir/b  ' (No such file or directory)/testdir/lost+found  : cannot open `/testdir/lost+found  ' (No such file or directory)/testdir/sysconfig  :  cannot open `/testdir/sysconfig  ' (No such file or directory)/testdir/VMware Tools: directory:                      cannot open `' (No such file or directory)[root@6 testdir]# cat a/testdir/a.zip  /testdir/b  /testdir/lost+found  /testdir/sysconfig  /testdir/VMware Tools

-F 使用指定分隔符号替换输出文件名后默认的”:” 分隔符

[root@6 testdir]# file -F w aaw ASCII text[root@6 testdir]# file aa: ASCII text

-i 输出mime 类型的字符串

[root@6 testdir]# file -i aa: application/x-empty; charset=binary[root@6 testdir]# file -i bb: application/x-symlink; charset=binary[root@6 testdir]# file -i a.zipa.zip: text/plain; charset=us-ascii

-L 查看对应软链接对应文件的文件类型

[root@6 testdir]# lsa  a.zip  b  lost+found  sysconfig  VMware Tools[root@6 testdir]# file -L bb: ASCII text

-z 尝试去解读压缩文件的内容

[root@6 testdir]# file -z a.zipa.zip: ASCII text

--help 显示命令在线帮助

二、标准I/O和 和 管道

1、标准输入和输出

     程序:指令+ 数据

    读入数据:Input

    输出数据:Output

     打开的文件都有一个fd: file descriptor ( 文件描述符)

     Linux 给程序提供三种I/O 设备

    标准输入(STDIN )-0 默认接受来自键盘的输入

    标准输出(STDOUT )-1 默认输出到终端窗口

    标准错误(STDERR )-2 默认输出到终端窗口

    /O 重定向:改变默认位置

 

2、把输出和错误重新定向到文件

     STDOUT 和STDERR 可以被重定向到文件:

         命令 操作符号 文件名

            支持的操作符号包括:

    >  把STDOUT 重定向到文件

    2> 把STDERR 重定向到文件

    &> 把所有输出重定向到文件

[root@6 testdir]# ls . xxx > a 2> b[root@6 testdir]# cat a.:aa.zipblost+foundsysconfigVMware Tools[root@6 testdir]# cat bls: 无法访问xxx: 没有那个文件或目录[root@6 testdir]# ls . xxx &> c[root@6 testdir]# cat cls: 无法访问xxx: 没有那个文件或目录.:aa.zipbclost+foundsysconfigVMware Tools



    >  文件内容会被覆盖

    # set -C:  禁止将内容覆盖 已有文件, 但可追加

    强制覆盖:>|

    # set +C:  允许覆盖

[root@6 testdir]# cat a.:aa.zipblost+foundsysconfigVMware Tools[root@6 testdir]# set +C[root@6 testdir]# ls / > a[root@6 testdir]# cat abinbootdevetchomeliblib64lost+foundmediamiscmntnetoptprocrootsbinselinuxsrvsystesttestdirtmpusrvar[root@6 testdir]# set -C[root@6 testdir]# ls /dev > a-bash: a: cannot overwrite existing file


>> 原有内容基础上,追加内容

[root@6 testdir]# cat bls: 无法访问xxx: 没有那个文件或目录[root@6 testdir]# ls . >> b[root@6 testdir]# cat bls: 无法访问xxx: 没有那个文件或目录aa.zipbclost+foundsysconfigVMware Tools

#>f    生成f文件

[root@6 testdir]# >w[root@6 testdir]# lsa  a.zip  b  c  lost+found  sysconfig  VMware Tools  w


3、把输出和错误重新定向到文件

2>:  覆盖重定向错误输出数据流;

2>>:  追加重定向错误输出数据流;

标准输出和错误输出各自定向至不同位置:

COMMAND > /path/to/file.out 2> /path/to/error.out

合并标准输出和错误输出为同一个数据流进行重定向:

&> :覆盖重定向

&>> :追加重定向

COMMAND > /path/to/file.out 2> &1  (顺序很重要)

COMMAND >> /path/to/file.out 2>> &1

find /etc -name passwd 2> /dev/null

( ) :合并多个程序的STDOUT

    ( cal 2007 ; cal 2008 ) > all.txt

[root@6 testdir]# cat aaa.ziplost+foundsysconfigVMware Toolswbinbootdevetchomeliblib64lost+foundmediamiscmntnetoptprocrootsbinselinuxsrvsystesttestdirtmpusrvar