程序:指令+数据
读入数据:Input
输出数据:Output
打开的文件都有一个fd:filedescripter(文件描述符)
标准输入:keyboard,0
标准输出:monitor,1
标准错误输出:monitor,2
I/O重定向:改变标准位置
输出重定向:command>new_pos,command >>new_pos
>:覆盖重定向,目标文件中的原有内容会被清除。
>>: 增加重定向,新内容会追加至新目录文件尾部。
ls /etc > /tmp/etc.out会新建/tmp/etc.out文件并保存ls /etc的结果
#set –C:禁止将内容覆盖输出至已有文件中,在使用>会报错。
强制覆盖:>
ls /etc > /tmp/etc.out
-bash: /tmp/etc.out: cannot overwrite existing file
使用>>即可,追加。
#set +C:
2>:覆盖重定向错误输出数据流。
2>>:追加重定向错误输出数据流。
标准输出和错误输出各自定向至不同位置:
command>/path/to/file.out2> /path/to/err.r.out
失败了报错至/path/to/err.r.out
cat /etc/ssss 2> /tmp/issue.txt
/etc/ssss是不存在的目录,执行cat /etc/ssss会报错,是错误输出流,加上2就可以把错误输出流重定向到/tmp/issue.txt。
合并标准输出和错误输出为同一个数据流进行重定向:
&>:覆盖重定向
&>>:追加重定向
command > /pth/to/file.txt 2> &1
command >> /pth/to/file.txt 2>> &1
输入重定向:<
tr命令:转换或删除字符串
tr [OPTION] … SET1[SET2]
tr abc ABC </etc/fstab会把/etc/fstab打印并把abc转成ABC
HERE Documentation:<<
#cat << EOF
#cat >/path/to/somefile << EOF
管道:
command1|command2 |command3 |…
最后一个命令会在当前shell进程的子shell进程中进行。
echo"$PATH" | tr 'a-z' 'A-Z'
echo"$PATH"查看环境变量。
echo"$PATH" |tee /tmp/path.out | tr 'a-z' 'A-Z'
将环境变保存至/tmp/path.out,并将a-z转换成A-Z显示。
注意/tmp/path.out中还是a-z
练习:1.将/etc/passwd文件中的前五行转换为大写保存至/tmp/passsws.out文件中。
head-n 5 /etc/passwd | tr 'a-z' 'A-Z' > /tmp/passwd.out
2.将登陆至当前系统上的用户的前三位的信息转换为大写后保存至/tmp/who.out文件中。
who | tail -n 3 |tr 'a-z' 'A-Z' > /tmp/who.out
文本操作工具:wc,cut,sort,uniq
wc命令:wc - printnewline, word, and byte counts for each file
wc/etc/passwd
-l:lines
-w:words
-c:characters
cut命令:
cut[OPTION]…[FILE]…
-d:delimiter:指明分隔符
-f:fileds:
#:第#个字段
#,#[,#]:离散的多个字段,例如1,3,6
#-#:连续的多个字段,例如1-6
混合使用:1-3,7
--output-delimiter=string
sort命令:
sort[OPTION] …FILE…
-f:忽略字符大小写
-r:逆序
-t:字段分隔符
-k:以指定字段为标准排序
-n:以数值大小进行排序
-u:uniq,排序后去重
unique命令:
unique[OPTION]…[FILE]…
-c:显示每行重读出现的次数
-d:仅显示重复过的行
-u:仅显示不曾重复的行
连续且完全相同为重复