标签:linux基础
一、文件系统(二)
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 /]# 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 [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 ~]# ls a 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/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 [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/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: 如果文件不存在,则不予创建
[root@6 ~]# touch -c a5 [root@6 ~]# ls a a2 a4 anaconda-ks.cfg install.log x 模板 图片 下载 桌面 a1 a3 abc df install.log.syslog 公共的 视频 文档 音乐
# touch f? 已存在的文件刷新时间
[root@6 ~]# 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 [root@6 ~]# touch a1 [root@6 ~]# 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}
[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 ~]# 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 不复制原文件,只复制链接名
保留连接属性
[root@7 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 [root@7 testdir]# cp -d stderr /boot/std ##保留链接属性 [root@7 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
[root@6 ~]# cp --preserv=mode b /testdir/b cp:是否覆盖"/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/b cp:是否覆盖"/testdir/b"? y [root@6 ~]# 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
当要使用多个参数,中间用,逗号隔开
[root@6 ~]# touch a [root@6 ~]# cp --preserv=timestamp,mode a /testdir/a [root@6 ~]# ls a /testdir/a a /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 ~]# 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 [root@6 ~]# unalias ls [root@6 ~]# 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 :外部命令
[root@6 sysconfig]# type ls ls is aliased to `ls --color=auto‘ [root@6 sysconfig]# cd [root@6 ~]# \ls a a2 a4 anaconda-ks.cfg install.log x 模板 图片 下载 桌面 a1 a3 abc df install.log.syslog 公共的 视频 文档 音乐 [root@6 ~]# ‘ls‘ a a2 a4 anaconda-ks.cfg install.log x 模板 图片 下载 桌面 a1 a3 abc df install.log.syslog 公共的 视频 文档 音乐 [root@6 ~]# "ls" a a2 a4 anaconda-ks.cfg install.log x 模板 图片 下载 桌面 a1 a3 abc df install.log.syslog 公共的 视频 文档 音乐 [root@6 ~]# /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: 强制
[root@6 ~]# ls /testdir 1 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 /test 1 2 3 4 [root@6 ~]# touch a{1..3} [root@6 ~]# ls a1 a3 install.log x 模板 图片 下载 桌面 a2 anaconda-ks.cfg install.log.syslog 公共的 视频 文档 音乐 [root@6 ~]# mv -t /testdir/ a{1..3} [root@6 ~]# ls anaconda-ks.cfg install.log.syslog 公共的 视频 文档 音乐 install.log x 模板 图片 下载 桌面 [root@6 ~]# ls /testdir a1 a2 a3 lost+found sysconfig VMware Tools
6、删除
1、rm [OPTION]... FILE...
常用选项:
-i: 交互式
-f: 强制删除
-r: 递归
--no-preserve-root
例: #rm -rf /
[root@6 ~]# \rm -i a1 rm: 无法删除"a1": 没有那个文件或目录 [root@6 ~]# \rm -i /testdir/a1 rm:是否删除普通空文件 "/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 b b └── c └── d 2 directories, 0 files [root@6 ~]# tree -d b b └── c └── d 2 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\242 11 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.gif 10 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\242 9 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 s s └── c └── d 2 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 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号占满后,系统也会报错。
[root@6 ~]# 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:
[root@6 ~]# file a a: empty
-b 列出文件辨识结果时,不显示文件名称。
[root@6 testdir]# file -b a empty
-c详细显示指令执行过程,便于排错或分析程序执行形
[root@6 ~]# file -c a cont offset type opcode mask value desc
-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 a aw ASCII text [root@6 testdir]# file a a: ASCII text
-i 输出mime 类型的字符串
[root@6 testdir]# file -i a a: application/x-empty; charset=binary [root@6 testdir]# file -i b b: application/x-symlink; charset=binary [root@6 testdir]# file -i a.zip a.zip: text/plain; charset=us-ascii
-L 查看对应软链接对应文件的文件类型
[root@6 testdir]# ls a a.zip b lost+found sysconfig VMware Tools [root@6 testdir]# file -L b b: ASCII text
-z 尝试去解读压缩文件的内容
[root@6 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 重定向到文件
&> 把所有输出重定向到文件
[root@6 testdir]# ls . xxx > a 2> b [root@6 testdir]# cat a .: a a.zip b lost+found sysconfig VMware Tools [root@6 testdir]# cat b ls: 无法访问xxx: 没有那个文件或目录 [root@6 testdir]# ls . xxx &> c [root@6 testdir]# cat c ls: 无法访问xxx: 没有那个文件或目录 .: a a.zip b c lost+found sysconfig VMware Tools
> 文件内容会被覆盖
# set -C: 禁止将内容覆盖 已有文件, 但可追加
强制覆盖:>|
# set +C: 允许覆盖
[root@6 testdir]# cat a .: a a.zip b lost+found sysconfig VMware Tools [root@6 testdir]# set +C [root@6 testdir]# ls / > a [root@6 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 [root@6 testdir]# set -C [root@6 testdir]# ls /dev > a -bash: a: cannot overwrite existing file
>> 原有内容基础上,追加内容
[root@6 testdir]# cat b ls: 无法访问xxx: 没有那个文件或目录 [root@6 testdir]# ls . >> b [root@6 testdir]# cat b ls: 无法访问xxx: 没有那个文件或目录 a a.zip b c lost+found sysconfig VMware Tools
#>f 生成f文件
[root@6 testdir]# >w [root@6 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
[root@6 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
[root@6 testdir]# cat /etc/issue|tr ‘a-z‘ ‘A-Z‘ > /tmp/issue.out [root@6 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
[root@6 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) [root@6 testdir]# who|tr ‘a-z‘ ‘A-Z‘ > /tmp/who.out [root@6 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!操作系统版本信息
[lvasu@6 ~]$ 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 [root@6 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 lvasu@6.localdomain Sun Jul 31 22:22 19/641 "help" Message 1: From root@6.localdomain Thu Jul 28 15:32:24 2016 Return-Path: <root@6.localdomain> X-Original-To: root Delivered-To: root@6.localdomain From: Anacron <root@6.localdomain> To: root@6.localdomain 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‘ ‘\ ‘
[root@6 ~]# 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” 计算出所有数字的总和
[root@6 testdir]# cat file1 1 2 3 4 5 6 7 8 9 10 [root@6 testdir]# cat file1 |tr ‘\ ‘ ‘+‘|bc 55
6 、删除Windows 文本文件中的‘^M‘ 字符
cat a.txt|tr -d ‘^M‘ [root@6 桌面]# y name is Bob. I am from US.[root@6 桌面]# 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:]‘
[root@6 ~]# echo “xt.,l 1 jr#‘a-z‘mn2 c*/fe3 uz4”|tr -d ‘[:alpha:][:punct:]‘ “ 1 2 3 4”
8、将PATH变量每个目录显示在独立的一行
[root@6 d]# pwd /root/s/c/d [root@6 d]# pwd |tr ‘/‘ ‘\n‘ root s c d
9、删除指定文件的空行
[root@6 testdir]# cat w ab cd ef gh [root@6 testdir]# cat w |tr -s "\n" ab cd ef gh
10、将文件中每个单词(字母)显示在独立的一行,并无空行
[root@6 testdir]# cat w My name is Bob.I am from US. [root@6 testdir]# cat w| tr "[:space:]" "\n"|tr "[:punct:]" "\n" My name is Bob I am from US
标签:linux基础
原文地址:http://lvpuchao.blog.51cto.com/11319327/1832922