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

一、文件系统(二)

1、文件通配符

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

*  匹配零个或多个字符

?  匹配任何单个字符

~  当前用户家目录

~username  用户家目录

[[email protected] /]# cd ~lvasu
[[email protected] lvasu]# ls

~+  当前工作目录

~- 前一个工作目录

# ls  ~-/issue

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

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

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

[A-Z] :大写字母

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

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

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

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

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

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

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

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

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

[:space:] :空格

[:punct:] :标点符号

[[email protected] ~]# touch fa fA fb fB fc fC fd fD
[[email protected] ~]# ls f[a-z]
fa  fA  fb  fB  fc  fC  fd  fD
[[email protected] ~]# ls f[A-Z]
fA  fb  fB  fc  fC  fd  fD
[[email protected] ~]# ls f[a-Z]
fa  fA  fb  fB  fc  fC  fd  fD
[[email protected] ~]# 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]

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

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

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

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

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

touch {a..d}

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

无法使用globbing

[[email protected] ~]# touch b[1-3]
[[email protected] ~]# ls
anaconda-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 不复制原文件,只复制链接名

保留连接属性

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

--preserv[=ATTR_LIST]

mode:          权限

ownership:   属主属组

timestamp:

links

xattr          附加属性

context       注释

al

[[email protected] ~]# cp --preserv=mode b /testdir/b
cp:是否覆盖"/testdir/b"? y
[[email protected] ~]# 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
[[email protected] ~]# cp --preserv=timestamp b /testdir/b
cp:是否覆盖"/testdir/b"? y
[[email protected] ~]# stat /testdir/b a
 File: "/testdir/b"
 Size: 49        	Blocks: 8          IO Block: 4096   普通文件
Device: 803h/2051d	Inode: 13          Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-29 09:35:27.631995848 +0800
Modify: 2016-07-28 17:51:21.980993419 +0800
Change: 2016-07-29 09:40:29.380996431 +0800
 File: "a"
 Size: 49        	Blocks: 8          IO Block: 4096   普通文件
Device: 802h/2050d	Inode: 2752661     Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2016-07-29 09:35:27.631995848 +0800
Modify: 2016-07-28 17:51:21.980993419 +0800
Change: 2016-07-29 09:31:38.572996510 +0800

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

[[email protected] ~]# touch a
[[email protected] ~]# cp --preserv=timestamp,mode  a /testdir/a
[[email protected] ~]# ls a /testdir/a
a  /testdir/a
[[email protected] ~]# 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

[[email protected] ~]# alias   ls=‘ls /‘
[[email protected] ~]# ls
bin   dev  home  lib64	    media  mnt  opt   root  selinux  sys   testdir  usr
boot  etc  lib	lost+found  misc   net  proc  sbin  srv      test  tmp      var
[[email protected] ~]# unalias ls
[[email protected] ~]# ls
a	b	     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 :外部命令

 [[email protected] sysconfig]# type ls
ls is aliased to `ls --color=auto‘
[[email protected] sysconfig]# cd
[[email protected] ~]# \ls
a   a2	a4   anaconda-ks.cfg  install.log	 x	 模板	图片  下载  桌面
a1  a3	abc  df	     install.log.syslog  公共的  视频	文档  音乐
[[email protected] ~]# ‘ls‘
a   a2	a4   anaconda-ks.cfg  install.log	 x	 模板	图片  下载  桌面
a1  a3	abc  df	     install.log.syslog  公共的  视频	文档  音乐
[[email protected] ~]# "ls"
a   a2	a4   anaconda-ks.cfg  install.log	 x	 模板	图片  下载  桌面
a1  a3	abc  df	     install.log.syslog  公共的  视频	文档  音乐
[[email protected] ~]# /bin/ls
a   a2	a4   anaconda-ks.cfg  install.log	 x	 模板	图片  下载  桌面
a1  a3	abc  df	     install.log.syslog  公共的  视频	文档  音乐

5、移动和重命名文件

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

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

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

常用选项: -i:  交互式

-f:  强制

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

6、删除

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

常用选项:

-i:  交互式

-f:  强制删除

-r:  递归

--no-preserve-root

例: #rm -rf /

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

7、目录操作

1、 tree  显示目录树

-d:  只显示目录

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

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

[[email protected] ~]# mkdir -p b/c/d/
[[email protected] ~]# tree b
b
└── c
   └── d
2 directories, 0 files
[[email protected] ~]# tree -d b
b
└── c
   └── d
2 directories
[[email protected] ~]# 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\242
11 directories, 0 files
[[email protected] ~]# 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.gif
10 directories, 7 files
[[email protected] ~]# 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\242
9 directories, 5 files

2、mkdir  创建目录

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

-v:  显示详细信息

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

[[email protected] ~]# mkdir -vp s/c/d/
mkdir: 已创建目录 "s"
mkdir: 已创建目录 "s/c"
mkdir: 已创建目录 "s/c/d/"
[[email protected] ~]# tree s
s
└── c
   └── d
2 directories, 0 files

3、rmdir  删除空目录

-p:  递归删除父空目录

-v:  显示详细信息

[[email protected] ~]# rmdir -pv  b/c/d/
rmdir: 正在删除目录 "/b/c/d/"
rmdir: 正在删除目录 "/b/c"
rmdir: 正在删除目录 "/b"

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

[[email protected] ~]# rm -vr b
rm:是否进入目录"b"? y
rm:是否进入目录"b/c"? y
rm:是否删除目录 "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号占满后,系统也会报错。

[[email protected] ~]# df -i
Filesystem      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:

[[email protected] ~]# file a
a: empty

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

[[email protected] testdir]# file -b a
empty

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

[[email protected] ~]# file -c a
cont	offset	type	opcode	mask	value	desc

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

[[email protected] 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)
[[email protected] testdir]# cat a
/testdir/a.zip  
/testdir/b  
/testdir/lost+found  
/testdir/sysconfig  
/testdir/VMware Tools

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

[[email protected] testdir]# file -F w a
aw ASCII text
[[email protected] testdir]# file a
a: ASCII text

-i 输出mime 类型的字符串

[[email protected] testdir]# file -i a
a: application/x-empty; charset=binary
[[email protected] testdir]# file -i b
b: application/x-symlink; charset=binary
[[email protected] testdir]# file -i a.zip
a.zip: text/plain; charset=us-ascii

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

[[email protected] testdir]# ls
a  a.zip  b  lost+found  sysconfig  VMware Tools
[[email protected] testdir]# file -L b
b: ASCII text

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

[[email protected] testdir]# file -z a.zip
a.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 重定向到文件

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

[[email protected] testdir]# ls . xxx > a 2> b
[[email protected] testdir]# cat a
.:
a
a.zip
b
lost+found
sysconfig
VMware Tools
[[email protected] testdir]# cat b
ls: 无法访问xxx: 没有那个文件或目录
[[email protected] testdir]# ls . xxx &> c
[[email protected] testdir]# cat c
ls: 无法访问xxx: 没有那个文件或目录
.:
a
a.zip
b
c
lost+found
sysconfig
VMware Tools

>  文件内容会被覆盖

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

强制覆盖:>|

# set +C:  允许覆盖

[[email protected] testdir]# cat a
.:
a
a.zip
b
lost+found
sysconfig
VMware Tools
[[email protected] testdir]# set +C
[[email protected] testdir]# ls / > a
[[email protected] testdir]# cat a
bin
boot
dev
etc
home
lib
lib64
lost+found
media
misc
mnt
net
opt
proc
root
sbin
selinux
srv
sys
test
testdir
tmp
usr
var
[[email protected] testdir]# set -C
[[email protected] testdir]# ls /dev > a
-bash: a: cannot overwrite existing file

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

[[email protected] testdir]# cat b
ls: 无法访问xxx: 没有那个文件或目录
[[email protected] testdir]# ls . >> b
[[email protected] testdir]# cat b
ls: 无法访问xxx: 没有那个文件或目录
a
a.zip
b
c
lost+found
sysconfig
VMware Tools

#>f    生成f文件

[[email protected] testdir]# >w
[[email protected] testdir]# ls
a  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

[[email protected] testdir]# cat a
a
a.zip
lost+found
sysconfig
VMware Tools
w
bin
boot
dev
etc
home
lib
lib64
lost+found
media
misc
mnt
net
opt
proc
root
sbin
selinux
srv
sys
test
testdir
tmp
usr
var

练习

1 、将/etc/issue 文件中的内容转换为大写后保存至/tmp/issue.out 文件中

# cat /etc/issue|tr ‘a-z‘ ‘A-Z‘ > /tmp/issue.out

[[email protected] testdir]# cat /etc/issue|tr ‘a-z‘ ‘A-Z‘ > /tmp/issue.out
[[email protected] testdir]# cat /tmp/issue.out
CENTOS RELEASE 6.8 (FINAL)
KERNEL \R ON AN \M

2 、将当前系统登录用户的信息转换为大写后保存至/tmp/who.out 文件中

# who|tr ‘a-z‘ ‘A-Z‘ > /tmp/who.out

[[email protected] testdir]# who
root     tty1         2016-07-29 08:37 (:0)
root     pts/0        2016-07-29 08:44 (:0.0)
root     pts/1        2016-07-29 08:44 (10.1.250.77)
[[email protected] testdir]# who|tr ‘a-z‘ ‘A-Z‘ > /tmp/who.out
[[email protected] testdir]# cat /tmp/who.out
ROOT     TTY1         2016-07-29 08:37 (:0)
ROOT     PTS/0        2016-07-29 08:44 (:0.0)
ROOT     PTS/1        2016-07-29 08:44 (10.1.250.77)

3 、一个linux 用户给root 发邮件,要求邮件标题为”help”,邮件正文如下:

Hello, I am  用户名,the system version is here,please help me to

check it ,thanks!操作系统版本信息

[[email protected] ~]$ echo -e "Hello, I am root,the system version is please help me to check it ,thanks! \n `cat /etc/centos-release`" | mail -s help root
[[email protected] testdir]# mail
Heirloom Mail version 12.4 7/29/08.  Type ? for help.
"/var/spool/mail/root": 4 messages 4 new
>N  1 Anacron               Thu Jul 28 15:32  17/606   "Anacron job ‘cron.daily‘ on 6.local"
N  2 Anacron               Fri Jul 29 09:26  17/606   "Anacron job ‘cron.daily‘ on 6.local"
N  3 Anacron               Sun Jul 31 16:26  17/606   "Anacron job ‘cron.daily‘ on 6.local"
N  4 [email protected]   Sun Jul 31 22:22  19/641   "help"
Message  1:
From [email protected]  Thu Jul 28 15:32:24 2016
Return-Path: <[email protected]>
X-Original-To: root
Delivered-To: [email protected]
From: Anacron <[email protected]>
To: [email protected]
Content-Type: text/plain; charset="ANSI_X3.4-1968"
Subject: Anacron job ‘cron.daily‘ on 6.localdomain
Date: Thu, 28 Jul 2016 15:32:23 +0800 (CST)
Status: R
/etc/cron.daily/mlocate.cron:
/usr/bin/updatedb: can not open `/etc/updatedb.conf‘: Permission denied

4 、将/root/下文件列表,显示成一行,并文件名之间用空格隔开。

ls /root |tr ‘\n‘ ‘\ ‘

[[email protected] ~]# ls /root |tr ‘\n‘ ‘\ ‘
a anaconda-ks.cfg install.log install.log.syslog s x 公共的 模板 视频 图片 文档 下载 音乐 桌面

5 、file1 文件 的 内容为:”1 2 3 4 5 6 7 8 9 10” 计算出所有数字的总和

[[email protected] testdir]# cat file1
1 2 3 4 5 6 7 8 9 10
[[email protected] testdir]# cat file1 |tr ‘\ ‘ ‘+‘|bc
55

6 、删除Windows 文本文件中的‘^M‘ 字符

 cat a.txt|tr -d ‘^M‘
[[email protected] 桌面]#
y name is Bob.
I am from US.[[email protected] 桌面]# cat a.txt
My name is Bob.

7 、处理字符串“xt.,l 1 jr#!$mn 2 c*/fe 3 uz 4”,只保留其中的数字和空格

# echo “xt.,l 1 jr#‘a-z‘mn2 c*/fe3 uz4”|tr -d ‘[:alpha:][:punct:]‘

  [[email protected] ~]# echo “xt.,l 1 jr#‘a-z‘mn2 c*/fe3 uz4”|tr -d ‘[:alpha:][:punct:]‘
“ 1 2 3 4”

8、将PATH变量每个目录显示在独立的一行

[[email protected] d]# pwd
/root/s/c/d
[[email protected] d]# pwd |tr ‘/‘ ‘\n‘
root
s
c
d

9、删除指定文件的空行

[[email protected] testdir]# cat w
ab

cd

ef

gh
[[email protected] testdir]# cat w |tr -s "\n"
ab
cd
ef
gh

10、将文件中每个单词(字母)显示在独立的一行,并无空行

[[email protected] testdir]# cat w
My name is Bob.I am from US.
[[email protected] testdir]# cat w| tr "[:space:]" "\n"|tr "[:punct:]" "\n"
My
name
is
Bob
I
am
from
US
时间: 2024-08-29 12:25:48

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

linux使用管道,IO重定向

程序是由数据+指令组成的,在程序设计时,默认从标准输入(standard-input)读取数据,向标准输出(standard-output)输出数据,程序执行错误则是输出至标准错误输出(standard-error) 标准输入对于的文件描述符0 输出1 错误输出2 IO重定向就是将程序本来应该0.1.2读取或者输出的数据流重定向至其它文件 >标准输出重定向 > filename ,将本来应输出至标准输出(显示器)的数据流重定向至filename的文件中,如果该文件中已有内容,则会覆盖文件内容

DAY5:linux文件系统(3)+重定向和管道+用户组赫尔权限管理(1)

7月29号,马哥linux学习第五天,学习内容主要: 一.索引节点 二.硬链接与软链接 三.重定向和管道 四.用户和用户组 一.索引节点(index node) 一个节点 (索引节点)是在一个表项,包含有关文件的信息 ( 元数据 ),包括: 文件类型,权限,UID,GID 链接数(指向这个文件名路径名称个数) 该文件的大小和不同的时间戳 指向磁盘上文件的数据块指针 有关文件的其他数据 一个目录是目录下的文件名和文件inode号之间的映射 CP命令和inode: 分配一个空闲的inode号,在in

Linux 文件系统(二)---执行过程及结构间的关系

(内核2.4.37) 一.首先,看看磁盘,超级块,inode节点在物理上整体的分布情况: (图示来自:www.daoluan.net) 对于一个分区,对应一个文件系统,一个文件系统其实本质上还是磁盘的一部分,所以可以包括多个柱面.对于柱面上的数据,主要看看inode节点位图.block位图,i节点,数据块.inode节点位图是为了记录inode节点的使用情况,之前的违章中已经说过,inode节点在文件系统安装的时候,会初始化所有的inode节点,那么形成的位图表示使用or没使用的大表.对于blo

linux下的IO重定向与管道相关的知识简析

一.bash重定向部分简单翻译 1.1.bash手册关于重定向短短的注解(因为过于经典,所以摘录出来) 我的翻译要开始毁经典啦... 参考:https://blog.csdn.net/spch2008/article/details/51433353/ https://www.cnblogs.com/lqminn/archive/2013/05/30/3108283.htmlhttps://bash.cyberciti.biz/guide/Here_stringshttps://bbs.csdn

Linux基础入门--IO重定向及管道

IO重定向及管道 一直都提到,程序:指令+数据 其实程序也有IO,数据的来源有多个地方:文件.外部 可用于输入的设备:文件(linux一切皆文件) 键盘设备.文件系统上的常规文件加载内容.网卡等: 可用于输出的设备:文件(linux一切皆文件) 显示器.文件系统上的常规文件输出保存.网卡等: 程序的数据流有三种: 输入的数据流:<-- 标准输入(stdin),是键盘: 输出的数据流:--> 标准输出(stdout),显示器: 错误输出流:  --> 错误输出(stderr),显示器: f

class-5 &nbsp; IO重定向(二)及用户组(一)

一.IO重定向(二) 1.tr 命令 tr –  转换和删除字符 tr [OPTION]... SET1 [SET2] 选项: -c 或--complerment :取字符集的补集 [[email protected] ~]#  tr -c 'abc' '1' << end > abcdefghijklmn > end abc111111111111[[email protected] ~]# -d 或--delete :删除所有属于第一字符集的字符(可以用八进位制数代替): [[

Linux基础之IO重定向及管道详解(涉及tr、tee命令)

我在刚开始接触IO重定向时,经历了由懂到不懂然后了然的过程,当然现在的我也不可能说对于IO重定向就彻底懂了,只是在解决一些问题或实现某些结果时不会因为IO重定向的问题而迷惑了.     什么叫IO重定向? 为了解释这个问题,我们要先明白什么叫IO,什么叫做程序的数据流. 什么叫IO? 在Linux或计算机领域IO指的是信息的输入和输出. 在Linux中可用于输入的设备:文件(Linux中一切皆文件) 具体包括:键盘设备.文件系统上的常规文件.网卡等. 在Linux中用于输出的设备:文件 具体包括

Linux学习笔记——管道及IO重定向

管道及IO重定向 运算器.控制器:CPU 存储器:RAM 输入/输出设备   I/O 程序:指令和数据 控制器:指令 运算器: 存储器: 地址总线:内存寻址 数据总线:传输数据 控制总线:控制指令 I/O: 程序:指令和数据 INPUT设备: OUTPUT设备: 系统设定:  默认输出设备:标准输出,STDOUT,1   默认输入设备:标准输入,STDIN,0 标准错误输出:STDERR,2 标准输入:键盘 标准错误输出:显示器 I/O重定向: linux:  >:覆盖输出 >>:追加输

攻城狮在路上(叁)Linux(二十六)--- linux文件系统的特殊查看与操作

一.boot sector 与 super block的关系: 1.boot sector用于存放引导装载程序,占用1024个字节. 2.super block的大小也为1024字节. 3.若block大小为1k,则boot sector和super block各占一个block. 4.若block大于1K(2K/4K)时,则两者都位于第一个block中. 二.磁盘空间的浪费问题:暂不考虑. 三.利用GUN的parted命令进行分区行为: 因为fdisk不支持高于2TB的分区. 命令格式: pa

[Linux 005]——IO重定向

通常在 Shell 中执行命令的时候,我们会在输入命令的下方看到执行结果,操作系统默认将命令的执行结果输出到显示器上.当然,我们也可以手动的指定输出路径,或者输入路径,这就是 I/O 重定向. 1.标准输出重定向 使用 cat 命令,命令的执行结果将会打印在屏幕中. 我们使用 > 来进行输出重定向,此时屏幕上不再打印命令执行结果了,而是将执行结果保存到了 ./target.xxx 文件中. 来看一下 ./target.xxx 文件中的内容: 2.标准输入重定向 tr 命令可以从键盘上读取标准输入