一、文件系统(二)
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