重定向
什么是重定向?
将原本要输出在屏幕中的内容,重新定向输出到指定的文件或设备中。
** 为什么要使用重定向?**
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
[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
持续学习