1 计算机系统设定关于输入输出:
默认输出设备:标准输出,STDOUT, 用1表示
默认输入设备:标准输入, STDIN, 用0表示
标准错误输出:STDERR, 用2表示
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向概念:改变系统默认输入/出的地方
2 linux set 命令:
防止出现对重要文件覆盖
[root@h2sliver114 ~]# help set -C If set, disallow existing regular files to be overwritten by redirection of output. set -C: 禁止对已经存在文件使用覆盖重定向; 这样能防止在你 >的时候 将重要文件覆盖掉。 强制覆盖输出,则使用 >| 比如如下: [root@h2sliver114 ~]# ls > b.txt -bash: b.txt: cannot overwrite existing file set +C: 关闭上述功能
3 重定向使用到的符号:
>: 覆盖输出
>>:追加输出
2>: 重定向错误输出 (联想记忆于凡是错误的东西都是挺2的事)
2>>: 追加方式实现错误输出
&>: 重定向标准输出(正确输出)或错误输出至同一个文件(覆盖输入)
&>>: 重定向标准输出(正确输出)或错误输出至同一个文件(追加输入)
>: 覆盖输出目标文件内的内容 >>:追加输出 [root@sliver114 ~]# type set set is a shell builtin [root@sliver114 ~]# help set .... -C If set, disallow existing regular files to be overwritten by redirection of output. .... Using + rather than - causes these flags to be turned off. set -C: 禁止对已经存在文件使用覆盖重定向; 强制覆盖输出,则使用 >| set +C: 关闭上述功能 [root@sliver114 ~]# set -C [root@sliver114 ~]# ls /usr/ > /tmp/var.out -bash: /tmp/var.out: cannot overwrite existing file [root@sliver114 ~]# ls /usr/ >| /tmp/var.out 实现强制输入 [root@sliver114 ~]# cat /tmp/var.out bin etc games include .... 2>: 只能重定向错误输出 对于正常输出则无能为力 2>>: 追加方式 eg: [root@sliver114 ~]# set +C [root@sliver114 ~]# ls /varr > /tmp/var3.out 2> /tmp/err.out [root@sliver114 ~]# cat /tmp/err.out ls: /varr: No such file or directory &>: 重定向标准输出或错误输出至同一个文件 [root@sliver114 tmp]# ls /var1 &> var1.out [root@sliver114 tmp]# cat var1.out ls: /var1: No such file or directory [root@sliver114 tmp]# ls /var &> var1.out [root@sliver114 tmp]# cat var1.out account cache cvs db
关于输入重定向:
<:输入重定向 <<:Here Document(在此处生成文档) eg: [root@sliver114 tmp]# cat < /etc/fstab 将/etc/fstab的内容作为输入来取代键盘 LABEL=/ / ext3 defaults 1 1 LABEL=/boot /boot ext3 defaults 1 2 .... eg: [root@sliver114 tmp]# cat << END // 此时你用什么单词 那么下面你输入内容后 文件内容就以什么单词来结束,但是文档内容不包含这个单词,单词长以EOF或者END (EOF= end of file) > this is hello > this is world > END this is hello this is world
关于输入输出重定向组合使用的例子:
看这个输入输出重定向综合的例子,实现像文件中输入内容(觉得通过在win下创建文件然后通过ssh工具远程提交岂不是更方便。或者通过vim来创建文件并添加内容也能达到如下命令的目的) [root@sliver114 tmp]# cat >> /tmp/myfile.txt << EOF > this is my ioredirect > this is sep > EOF [root@sliver114 tmp]# cat /tmp/myfile.txt this is my ioredirect this is sep
4 关于管道:
管道:前一个命令的输出,作为后一个命令的输入
命令1 | 命令2 | 命令3 | ...
上面表示: 将命令1的输出结果作为输入流,输入到命令2中做处理,然后命令2处理的结果作为输入流输入到命令3中做处理...
案例如下:
0 字母大写 [root@sliver114 tmp]# echo 'hello world' | tr 'a-z' 'A-Z' HELLO WORLD 0.1 仅展示文件行数据 [root@sliver114 tmp]# wc -l /etc/passwd 35 /etc/passwd [root@sliver114 tmp]# wc -l /etc/passwd | cut -d' ' -f1 35 [root@sliver114 tmp]# ls -l /usr/bin | head -2 显示前两行结果 total 110584 -rwxr-xr-x 1 root root 31208 Jul 21 2011 [ 1、统计/usr/bin/目录下的文件个数; # ls /usr/bin | wc -l 2、取出当前系统上所有用户的shell,要求,每种shell只显示一次,并且按顺序进行显示; # cut -d: -f7 /etc/passwd | sort -u 3、思考:如何显示/var/log目录下每个文件的内容类型? 4、取出/etc/inittab文件的第6行; 先获取前六行 然后在获取倒数第一行 [root@sliver114 tmp]# head -6 /etc/inittab | tail -1 # Modified for RHS Linux by Marc Ewing and Donnie Barnes 5、取出/etc/passwd文件中倒数第9个用户的用户名和shell,显示到屏幕上并将其保存至/tmp/users文件中; [root@sliver114 tmp]# tail -9 /etc/passwd | head -1 | cut -d: -f1,7 | tee /tmp/test.txt apache:/sbin/nologin [root@sliver114 tmp]# cat test.txt apache:/sbin/nologin 6、显示/etc目录下所有以pa开头的文件,并统计其个数; ls -l 表示仅仅展示自身属性 并不展示自身下的孩子 这里要求仅展示以pa开头的文件 因此需要用到 -d [root@sliver114 tmp]# ls -d /etc/pa* /etc/pam.d /etc/pam_smb.conf /etc/passwd /etc/passwd.OLD /etc/pam_pkcs11 /etc/pango /etc/passwd- [root@sliver114 tmp]# ls -d /etc/pa* | wc -l 7、不使用文本编辑器,将alias cls=clear一行内容添加至当前用户的.bashrc文件中; # echo "alias cls=clear" >> ~/.bashrc