1.重定向:
程序 = 指令 + 数据
重定向:在程序中,数据如何输入?又如何输出?
数据输入:键盘 -- 标准输入,但是并不是唯一输入方式
-- stdin
例如:添加用户的代码 给一个user.txt文本,文本里有1000个用户
useradd.sh < user.txt
< 标准输入重定向
重定向分为:标准输入、标准输出、标准错误
while line;do
循环体 $line
done < /etc/passwd
数据输出:显示器 -- 标准输出,但并不是唯一输出方式
ls /etc/ > a.txt
fd文件表示符 0-9 ----相当于给文件分类;
被定义的文件标识符0:标准输出 1:标准输入 2:标准错误
常见重定向符号
1.标准输出
>:覆盖重定向 ,很危险
set -C去掉C的功能,C的功能为覆盖重定向的功能 set+C把关闭的功能开启
>|:强制重定向,在覆盖重定向功能关闭的时候,也可以
>>:追加重定向
cat a.txt | more
2.标准输入
< :
tr abc ABC < /etc/passwd > /etc/passwd.bak 把abc替换成ABC,单个字符进行替换
<<:将多行数据同时输入
cat >> a.txt <<EOF
>1
>2
>3
>EOF
3.错误输出
2> 2>>
不需要输出内容,只需要输出状态:
ls /etc/ > /dev/null 2> /dev/null
if [$? -eq 0];then
循环体
fi
&> &>> == 2&>1
ls /etc/ &>/dev/null 不管结果正确不正确,结果都重定向到null
2.管道符
command1|command2|command3|......
第一个命令的执行结果交给后一条命令来执行
【Linux思想:结合小功能实现大功能】
free -m | grep "^Mem" | cut -d ' ' -f19
free -m | grep "^Mem" | awk '{print $3}'
find 【目录】 -name ab* -type f -perm 600 -mtime +7 | xargs rm -rf
tee 一路输入,两路输出 覆盖
tee /tmp/tee.out 即在屏幕输出一次,又保存到文件里
练习:
将/etc/passwd文件中的前5行内容转换为大写后保存至/tmp/passwd.out文件中
head -5 /etc/passwd | tr [a-z] [A-Z] > /tmp/passwd.out
将登录至当前系统上用户信息汇总的后3位信息转换为大写后保存至/tmp/who.out文件中
who | tail -3 | cut -d' ' -f1 | tr [[:lower:]] [[:upper:]] | tee/tmp/who.out
tail 查看文件尾部多少行(默认是10行)
-n tail -n 5 ==tail -5
-f 实时查看文件更新内容
head 查看文件头部多少行(默认10行)
-n head -n 5==head -5
3.文本处理工具
wc
word count 统计文本文件中的字符个数
用法:wc -【】 filename
-l 行
-w 字
-c 大小
-m 字符
cut
从一个本文文件中提取文本列
用法:cut -d" " -f fileds
cut -c 字符区间
-d 后面接分割字符,与-f一起使用
-f 依据-d分成的数段,用-f是取第几段的意思
-c 以字符的单位取出固定字符区间
--output-delimiter=" "
分割用:输出用制表符tab
cut -d":" -f1,3 --output-delimeter=" " /etc/passwd
【cut的局限性:1、-d指定分隔符不能同时指定多个 2、不能做高级的格式化输出;所以要熟练掌握awk】
sort 排序命令
-n 按照数字大小排列
-r 逆序
-n 排序后去重
uniq 去重
连续且相同的才被视为重复
建议先排序再去重
-c 统计某些字符重复的次数
-i 忽略大小写的不同
-n 只显示不重复的行