linux输入输出重定向及案例

重定向

什么是重定向?

将原本要输出在屏幕中的内容,重新定向输出到指定的文件或设备中。
** 为什么要使用重定向?**

1.备份时,我们需要知道备份的结果

2.屏幕上输出信息,比较重要的时候,我们想要保存下来

3.定时任务,我们需要知道结果

4.执行命令时,明知道会报错,我们会使用重定向,将结果 放入 /dev/null

5.执行命令时,正确 结果和错误 结果会同时输出,将正确结果输出到常规日志,将错误结果输出到错误日志

重定向的分类

  • 标准输入
  • 标准输出
名称 文件描述符 作用
标准输入(stdin) 0 通常键盘(其他输入命令的终端设备)
标准输出(stdout) 1 默认输出到屏幕
错误输出(stderr) 2 默认输出到屏幕
文件名(filename) 3+ -
[root@localhost ~]# ll /dev/std*
lrwxrwxrwx 1 root root 15 3月  25 10:36 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx 1 root root 15 3月  25 10:36 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx 1 root root 15 3月  25 10:36 /dev/stdout -> /proc/self/fd/1

[root@localhost ~]# ll /proc/121169/fd/
总用量 0
lrwx------ 1 root root 64 4月   7 11:28 0 -> /dev/pts/3
lrwx------ 1 root root 64 4月   7 11:28 1 -> /dev/pts/3
lrwx------ 1 root root 64 4月   7 11:27 2 -> /dev/pts/3
lr-x------ 1 root root 64 4月   7 11:28 3 -> /var/log/messages

输出重定向

/dev/null

/dev/pts/0

/dev/pts/1

/tmp/zls.txt

/root/1.txt

类型 符号 用途 备注
标准覆盖输出重定向 1> 将命令执行的正确结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) 通常‘>‘即可,1可以不写,默认就是1
标准追加输出重定向 >> 将命令执行的正确结果,输出到指定文件的末尾(不覆盖原有内容) -
错误覆盖输出重定向 2> 将命令执行的错误结果默认输出的位置,修改为指定的文件或者终端(覆盖原有内容) -
错误追加输出重定向 2>> 将命令执行的错误结果,输出到指定文件的末尾(不覆盖原有内容) -
标准输入重定向 0< 将命令中接收输入内容由默认的键盘,改为命令或者文件 通常‘<‘即可0可以写也可以不写,默认0
标准输入追加重定向 0<< 将命令中接收输入内容由默认的键盘,改为命令或者文件 -
# 标准覆盖输出重定向
[root@localhost ~]# echo wxx>/tmp/1.txt

[root@localhost ~]# cat /tmp/1.txt
wxx

[root@localhost ~]# echo 321>/tmp/2.txt

[root@localhost ~]# cat /tmp/2.txt

[root@localhost ~]# echo wxx1>/tmp/3.txt
[root@localhost ~]# cat /tmp/3.txt
wxx1
**标准追加输出重定向**

标准追加输出重定向

[root@localhost ~]# echo 456 >> /var/log/messages
[root@localhost ~]# echo 123 >> /var/log/messages

**错误输出重定向**

错误输出重定向

[cdx@localhost ~]$ find /etc/ -type d

**将标准输出和错误输出都输出到相同的文件中**

将标准输出和错误输出都输出到相同的文件中

[cdx@localhost ~]$ find /etc/ -type d > /tmp/100.txt 2>&1

[cdx@localhost ~]$ find /etc/ -type d &> /tmp/101.txt

**将错误输出,重定向到黑洞**

将错误输出,重定向到黑洞

[root@localhost ~]# ls / /ooo 2>/dev/null

**脚本中使用重定向**

脚本中使用重定向

!/bin/bash

. /etc/init.d/functions

read -p "请输入要检测的IP:" IP

ping -c1 -W1 $IP &>/dev/null

if [ \(? -eq 0 ];then action "\)IP" /bin/true >> /tmp/IP_OK.txt
else
action "$IP" /bin/false >> /tmp/IP_FAILD.txt
fi

输入重定向

[root@localhost ~]# mail -s "$(date +%F-%T)_test" 11111@qq.com < /etc/passwd

linux输入输出重定向及案例
linux输入输出重定向及案例
linux输入输出重定向及案例
linux输入输出重定向及案例
linux输入输出重定向及案例

[root@localhost opt]# echo -e "111\n222\n333" > file1.txt
[root@localhost opt]# cat file1.txt
111
222
333
[root@localhost opt]# echo ‘
1111
2222
3333
4444
‘ > file2.txt

[root@localhost opt]# cat >> 1.txt <<EOF
> aaa
> bbb
> ccc
> ddd
> EOF

[root@localhost opt]# cat >> 2.txt
111
222
333
444

Ctrl + d 结束


cat <<EOF
+--------------------------+
| vmware manager           |
+--------------------------+
| by wxx                   |
+--------------------------+
| 1. Install KVM           |
| 2. Install or Reset C6.5 |
| 3. Install or Reset C7.4 |
| 5. Instqll or Reset W7   |
| 6. Remove all            |
| q. quit                  |
+--------------------------+
EOF


[root@localhost opt]# cat <<EOF
> 1.install  mysql
> 2.install nginx
> 3.intsall php
> 4.install tomcat
> 5.install redis
> EOF
1.install  mysql
2.install nginx
3.intsall php
4.install tomcat
5.install redis
# 两条命令同时重定向
[root@localhost opt]# (ls ; date) > 1.txt

 (while :; do date; sleep 2; done) &>date.txt &
 
 #如果不希望某些命令的执行对当前 shell 环境产生影响,请在subshell中执行
 [root@localhost ~]# (cd /boot; ls)

管道技术

管道操作符号:|,叫做管道符
作用:将管道符左边命令的标准输出,交给管道符右边命令的标准输入来处理
用法:cmd1|cmd2|cmd3| cmd4...

# 取出passwd文件中,uid最大的前五个
[root@localhost ~]# sort -nr -k 3 -t ‘:‘ /etc/passwd|head -5
# 统计出passwd文件中,所有用户的shell种类
[root@localhost ~]# awk -F: ‘{print $7}‘ /etc/passwd|sort |uniq|wc -l
6
[root@localhost ~]# hostname -I
10.0.0.200
[root@localhost ~]# ifconfig |awk ‘NR==2{print $2}‘
10.0.0.200
sed
awk
grep

组合:sed awk
grep awk

10种方法,取IP
# 取出 磁盘已使用 百分比
[root@localhost ~]# df -h|awk ‘{print $5}‘|awk -F ‘%‘ ‘{print $1}‘
已用
9
0
0
1
0
24
5
0
1
# tee 和 重定向的区别
tee会将输出结果显示在屏幕上
[root@zls ~]# date > date.txt 
[root@zls ~]# date |tee date.txt
#xargs:将管道前面的结果当成管道后面命令的参数
[root@localhost opt]# find /etc/ -name ‘*.conf‘|xargs cp -t /tmp/

十种方式取ip

十种方法取ip
[root@wzh ~]# ifconfig|awk ‘NR==2 {print $2}‘
10.0.0.200
[root@wzh ~]# ifconfig|sed -nr ‘2s#.*et (.*) ne.*#\1#gp‘
10.0.0.200 
[root@wzh ~]# ifconfig|grep -w ‘broadcast‘|cut -d ‘ ‘ -f10
10.0.0.200
[root@wzh ~]# ifconfig|sed -n ‘2p‘|awk ‘{print $2}‘
10.0.0.200
[root@wzh ~]# ifconfig|grep -w ‘broadcast‘|sed -r ‘s#.*et (.*) ne.*#\1#g‘
10.0.0.200
[root@wzh ~]# ifconfig |head -2|tail -1|cut -d ‘ ‘ -f10
10.0.0.200
[root@wzh ~]# ifconfig|grep -w ‘broadcast‘|cut -c 14-24
10.0.0.200 
[root@wzh ~]# ifconfig|awk ‘NR==2‘|cut -d ‘t‘ -f2|cut -d ‘n‘ -f1
 10.0.0.200
 [root@wzh ~]# ifconfig|sed -n ‘2p‘|grep -o ‘[0.-9]*‘|head -1
10.0.0.200
[root@wzh ~]# ifconfig|sed -n ‘2p‘|cut -d ‘ ‘ -f10
10.0.0.200

练习题

01.复制/etc/passwd文件到当前目录下,把文件中的:替换成#,不能使用sed和vim命令。
cp /etc/passwd ./
 tr ‘:‘ ‘#‘ < ./passwd

02.改变文件所有者的命令是?
chown
03.新建一个1.txt文件,文件内容如下
[root@centos7 ~]# cat >>1.txt <<eof
> 1123
> 1122
> 112233
> 321
> 3306
> 8080
> 80
> 23
> 21
> 8081
> 8082
> 8085
> eof
1123
1122
112233
321
3306
8080
80
23
21
8081
8082
8085
04.接03题,显示1.txt第3行到第10行的内容(三种方法)
[root@centos7 ~]# head 1.txt|tail -7
[root@centos7 ~]# awk ‘NR==3,NR==10‘ 1.txt
[root@centos7 ~]# sed -n ‘3,10p‘ 1.txt
05.接03题,显示1.txt第3行和第10行的内容(两种方法)
[root@centos7 ~]# awk ‘NR==3;NR==10‘ 1.txt
[root@centos7 ~]# sed -n ‘3p;10p‘ 1.txt
06.执行命令echo "I am qiandao,my qq is 1716141363">/oldboy/oldboy.txt,
[root@wzh ~]# echo "I am qiandao,my qq is 1716141363">/oldboy/oldboy.txt
[root@wzh ~]# cat /oldboy/oldboy.txt
I am qiandao,my qq is 1716141363

现在需要从文件中过滤出“qiandao”和“1176494252”字符串,请给出命令?(最少三种方法)
[root@wzh ~]# egrep -o ‘qiandao||1716141363‘ /oldboy/oldboy.txt
qiandao
1716141363
[root@wzh ~]# awk -F ‘[ ,]‘ ‘{print $3,$7}‘ /oldboy/oldboy.txt
qiandao 1716141363
[root@wzh ~]# sed -r ‘s#.*am (.*)(,.*)s(.*)#\1\3#g‘ /oldboy/oldboy.txt
qiandao 1716141363
07.接上题,如果需要从文件中过滤出“qiandao,1176494252”字符串,请再给出命令?
[root@wzh ~]# egrep -o ‘qiandao,|1716141363‘ /oldboy/oldboy.txt 
qiandao,
1716141363

08.用什么命令可以测试另外一台服务器的某个端口是打开的
telnet
09.简述 > 和 >> 符号作用,以及两个符号之间区别
1.> 输出重定向符号 作用:将前面的内容输出到文件中并且覆盖原文件内容
2.>> 追加重定向符号 作用:在原有文件的基础上追加新内容
区别>会覆盖原文件>>是追加在文件底部不覆盖
10.vim中把所有的oldboy替换为oldgirl 给出命令
:%s#oldboy#oldgirl#g
11.管道符号的含义说明   |
作用:将管道符左边命令的标准输出,交给管道符右边命令的标准输入来处理
12.如何创建一个系统用户,创建完成如何进行切换用户,切换完毕如何确认查看
[root@wzh ~]# useradd w
[root@wzh ~]# su - w
虚拟机ip 10.0.0.200
[w@wzh ~]$ whoami
w

13.如何实现每次系统启动自动备份/oldboy/oldboy.txt文件,并且备份操作完在/oldboy/info.log中有备份操作提示信息
vim /etc/rc.local	
\cp /oldboy/oldboy.txt{,.bak} && echo oldboy.txt back is ok >> /oldboy/info.log
14.查找/app/logs下7天以前的log文件并删除(请使用xargs)
find /app/logs/ -type f -mtime +7 |xargs rm -f
15.将/etc目录下大于100k的文件移动至/tmp下 (请使用xargs)
 find /etc/ -type f -size +100k|xargs -i mv {} /tmp/
16.如何查看/var/log/目录下的文件数
find /var/log/ -type f |wc -l
17.硬链接可以作为源文件的备份文件,为什么还要cp命令进行备份(说明硬链接原理)
相同inode号的文件互为硬链接
cp是两个文件,硬链接实际是一个文件
18.linux系统中文件属性信息都包含什么
inode节点号
文件类型和权限
硬链接数
属主和属组
文件的大小
最后修改时间
文件或目录名
19.请说明利用管道命令和xargs命令结合是, 命令执行的原理过程
xargs将参数列表转换成小块分段传递给其他命令
读入stdin的数据转换为参数添加至命令后面
让一些不支持管道的命令可以使用管道
| 把前面命令的标准输出交给管道后面命令的标准输入
20.如何创建一个新的oldgirl用户,并且需要给用户设置密码,并且采用免交互方式创建密码
useradd oldgirl
echo ‘123‘|passwd --stdin oldgirl
21.把/etc/passwd文件中的第5到第15行的内容保存到/oldboy/test.txt中,(不低于三种方法)
mkdir /oldboy
touch /oldboy/test.txt
awk ‘NR==5,NR==15‘ /etc/passwd > /oldboy/test.txt
sed -n ‘5,15p‘ /etc/passwd > /oldboy/test.txt
 head -15 /etc/passwd|tail -10 > /oldboy/test.txt
22.说一说你知道的vim里面的命令并写出意思。(不低于10个)
gg :将光标移动到文件的开头 ,ngg就是移至n行行首
dd  :  删除一行,(删除多行 ndd dnd :n为数字 + p = 剪切)
D   :  将光标之后的内容都删除
u   :   撤销
$(shift+4) : 将光标移动至行尾
^(shift+6)  :  将光标移动至行首
dG   : 删除光标以下的所有内容(包括光标所在行)
yy :  复制,复制n 行,nyy ,yny
 p :  粘贴(光标所在行的下一行)
 R :  多个字符替换(按ESC退出替换)
23.删除oldboy.txt文件中的所有空行,有的空行里面存在tab键和空格(两种方法)
sed -ri ‘/^[ \t]*$/d‘ oldboy.txt
awk ‘!/^[ \t]*$/‘ oldboy.txt
24.快速返回到上一次所在的目录的命令为(cd - )
25.给test.sh文件加上执行权限
touch test.sh
chmod +x test.sh
26.将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式
将/home/stud1/wang目录做归档压缩,压缩后生成wang.tar.gz文件,并将此文件保存到/home目录下,实现此任务的tar命令格式
27.用shell在/usr/local下建立20个子目录xunlei1-xunlei20,再在这个子目录下分别建255个子目录dir1-dir255再在255个子目录下创建10000个文件xunlei1.html-xunlei10000.html
mkdir -p /usr/loca/xunlie{1..20}/dir{1..255}/

 touch   /usr/loca/xunlie{1..20}/dir{1..255}/xunlei{1..10000}.html  
28.linux如何得知服务器的的运行时长?
uptime
29.rm命令修改了别名信息的文件/etc/profile,但还是不能直接删除信息,是什么原因,并写出和别名设置相关的文件及路径信息
家目录中的文件配置优于/etc目录文件的配置
/etc/profile
/etc/bashrc

设置别名或变量可以全局生效
~/.bash_profile
~/.bashrc

设置别名或变量只是相应用户生效
  
在家目录中有文件中设置了别名
/etc/profile -->/etc/bashrc-->~/.bashrc--> ~/.bash_profile
30.linux运维工程师都需要具备哪些职业素质?
人品
7*24
持续学习

linux输入输出重定向及案例

上一篇:linux用户管理增删改查


下一篇:MySql 已用的命令