I/O重定向和管道
内存包括操作系统os和app运行内存
app运行内存=指令+数据
读入数据:input
读出数据:output
打开的文件都有一个fd:file descriptor(文件描述符)
Linux给程序三种I/O设备:
标准输入stdin -0 默认接收来自终端窗口的输入
标准输出stdout -1 默认输出到终端窗口
标准错误stderr -2 默认输出到终端窗口
三种标准描述符固定 , 其他文件文件描述符随机
当程序ps不显示路径可使用查看编号的方式查找真实路径:
进入相应编号文件用ll查看即可看到口令对应的路径
shell也属于一个程序,每个shell窗口都对应一个编号
echo $$ 查看当前所在shell的编号
ll /proc/$$/fd (fd 设备)
ll /dev/st* (默认情况下最后对应的都是终端窗口)
重定向 redirect
标准输出
格式: 命令 操作符号 文件名
1> 或> 把输出stdout重定向文件(可重定向设备终端,文件可新创建文件)
2> 把stderr重定向到文件
&> 把所有的输出重定向到文件
如果文件已经存在,文件内容会被覆盖
touch和> 创建新文件的区别:
touch 新建文件不会覆盖以前文件信息
> 新建文件会将以前文件信息覆盖,清零文件
cat /dev/null > 文件 清空文件
echo命令本身有换行字节
如果错误重定向的是提示,只是提示被重定向隐藏了,还可以继续操作。
ls /data /err(标准输出和错误输出都有)
ls /data/err >/data/stdout.log 2> /data/stderr.log (分别输出到两个文件)
ls /data /err &> /data/all.log (信息全部输出到一个文件)
ls /data /err > /data/all.log 2>&1
>> 追加内容,不覆盖原文件内容(2>> 追加stderr重定向到文件)
( ) 合并多个命令的输出
(ls ;hostname)
{ls;hostname;} (区别,花括号每个命令后边都要带分号)
管道符|
seq 1 10 生成数字序列1-10
seq -s+ 1 10 生成数字1+..+10
seq -s+ 1 10 | bc
管道符只支持标准输出,不支持标准错误的输出,可利用2>&1 或|&实现
ls /data /err 2>&1 | tr 'a-z' 'A-Z'
LS /data /err |& tr 'a-z' 'A-Z'
cat命令 既需要标准输入,也可以标准输出
cat > file ctrl +d 正常退出
单行重定向:
回车一次,重定向一次 人工交互
cat > cat.log
多行重定向:<<终止词 EOF
一次写多行,一次性提交
cat > cat2.log <<EOF(结束符,可为随意符号 结束时结束符为单独一行)
PS2 变量:影响多行重定向的提示符 PS2=“ ”
mail 邮件
yum -y install postfix(安装邮件)(mailx)
systemctl start postfix(启用服务)
ss -ntl (查看服务)
mail -s 标题 账号
mail -s test liu 按 Ctrl +d 正常退出
echo " " | mail -s 标题 邮箱
mail (收邮件)
ping www.baidu.com (ping是否与百度可以联网)
mailrc 邮件配置文件(登录邮箱qq,打开腾讯邮箱,点击设置,账号,imapsmtp服务,下方提示生成授权码
授权码用来Linux密码发邮件)
标准输入
<
tr 标准输入 转换和删除字符
tr ‘135’ ‘abc’ 把135转换成abc
tr ‘123’ ‘abcd’ d没有对应关系,不会转换
tr ‘1234’ ‘abc’ 4没有对应关系,用最后字母c代替转换
tr -t ‘1234’ ‘abc’ 不用最后字符做转换,只转换对应字符
tr ‘a-z’ ‘A-Z’
tr '[:lower:]' '[:upper:]'
tr -d 删除属于第一字符的字符集
tr -s 连续多个字符进行压缩,成一个字符
tr -t 将第一个字符集对应的字符转化为第二个字符集对应的字符
tr -c 取字符集的补集
tr -dc 删除除了选取得字符
ll /dev/urandom (随机字符文件)
tr -dc '[:alnum:]' < /dev/urandom (删除除了字母和数字之外的字符)
例
echo {1..100} | tr ' ' +|bc
echo {1..100} | tr ' ' '\n'^C
hexdump -c win.txt (转换格式)
tr -d '\015' < win.txt > linux.txt (\015 代表回车 \r)
tr '\n' '\n\r' <linux.txt > win2.txt (\012 代表换行 \n)
2&>1 :
1&>2 : 将标准错误归到标准输出
rev 字符串倒过来输出
echo "FBI Waring" |rev rev 字符实现串倒过来输出
面试:四个重定向方式有错误?
tee 命令 可以重定向多个目标
可以同时查看和记录输出
复杂管道的故障排除
tee -a 追加字符串
passwd 修改口令
Passwd 用户名(交互式)输两次口令
passwd --stdin 用户名 修改读取口令(用于管道)
echo 口令 |passwd --stdin 用户名