标准输入(stdin 0),标准输出(stdout 1),标准错误(stderr 2)
重定向标准输出
ls -l /usr/bin > test.txt //标准输出至文件test.txt,写之前先清空文件。
ls -l /usr/bin >> test.txt //追加写入至文件。
重定向标准错误
ls -l /usr/bin 2> test.error.txt
重定向标准输出和标准错误至同一文件
ls -l /usr/bin > test.txt 2>&1 //重定向标准输出至文件text.txt,然后把标准错误重定向到标准输出。
// or
ls -l /usr/bin &> test.txt
位存储桶(a bit bucket) /dev/null
ls -l /usr/bin 2> /dev/null //把不需要的输出直接丢掉。
cat 拷贝单个/多个文件内容至标准输出(屏幕)
cat test.txt error.txt
cat // 不接文件名,默认标准输出为键盘,标准输出为屏幕,输入一行,立刻会打印一行。
cat > test.txt // 默认标准输入为键盘,标准输出为test.txt,可以直接键盘写入文件。
insert first line
insert second line
CTRL+D 终止输入作为文件EOF
cat test.txt // 打印文件内容
管道线(pipelines)
命令可以从标准输入读取数据,然后再把数据输送到标准输出,命令的这种能力被一个 shell 特性所利用,这个特性叫做管道线。使用管道操作符 “|”(竖杠),一个命令的标准输出可 以管道到另一个命令的标准输入:
command1 | command2 //注意管道线连接的是两个命令
过滤器
管道线经常用来对数据完成复杂的操作。有可能会把几个命令放在一起组成一个管道线。通常,以这种方式使用的命令被称为过滤器。过滤器接受输入,以某种方式改变它,然后输出它。
ls /bin /usr/bin | sort | less //先排序再输出
ls /bin /usr/bin | sort | uniq | less // 先排序,后去除重复列,再输出。
ls /bin /usr/bin | sort | uniq -d | less //先排序,后找到重复列,然后输出。 “-d” 参数取出重复项。
wc - 打印行数(lines -l),单词数(words -m),字节数(bytes -c),字符数(character -m)。
wc test.txt
20 64664 455454 test.txt
wc -lmbc test.txt
grep 正则匹配查找
ps aux | grep nginx -ab10 // -ab 显示关键字上下10行内容
ps aux | grep -v nginx // -v 取反,及只打印不包含nginx关键字的行
ps aux | grep -i nginx // -i 匹配时忽略大小写
head/tail 打印头尾10行数据
head -n 100 text.txt
tail -n 500 text.txt
tail -f text.txt // 不停打印写入的新日志。
tee -从 Stdin 读取数据,并同时输出到 Stdout 和文件
为了和我们的管道隐喻保持一致,Linux 提供了一个叫做 tee 的命令,这个命令制造了一 个 “tee”,安装到我们的管道上。tee 程序从标准输入读入数据,并且同时复制数据到标准输出 (允许数据继续随着管道线流动)和一个或多个文件。当在某个中间处理阶段来捕捉一个管道 线的内容时,这很有帮助。这里,我们重复执行一个先前的例子,这次包含 tee 命令,在 grep 过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt:
ls /usr/bin | tee ls.txt | grep zip
bunzip2
bzip2
....