LinuxCommandLine -- 4

I/O redirection input/output redirection
Everything is file 3个不同的文件:

  • stdin
  • stdout
  • stderr

重定向输出

标准输出

# 重定向 stdout
ls -l /usr/bin/ > ls-output.txt  # 覆盖
ls -l /usr/bin/ >> ls-output.txt  # 追加

错误输出

file descriptor: 每个文件流(file stream)都有一个数字标识。其中,前三个分别是:

  • 0: stdin
  • 1: stdout
  • 2: stderr

重定向错误输出

ls no-exist 2> ls-error.txt

# 将消息重定向到 stderr
$ cat > error.sh
#!/bin/bash
echo 'error message' >&2

$ chmod +x error.sh
$ ./error.sh
error message

# 将 stderr 重定向到 文件
$ ./error.sh 2> error.txt
同时重定向标准输出和错误输出
# 方式一:将 stdout 重定向到文件,再将 stderr 重定向到 stdout (顺序不能颠倒,适用于老版本的shell)
$ ls no-exist > ls-output.txt 2>&1


# 方式二:新版本的 bash
$ ls no-exist &> ls-output.txt
$ ls no-exist &>> ls-output.tx

/dev/null

ls message-not-wanted > /dev/null

管道

管道(pipeline):将第一个命令的输出传给第二个命令的输入

$ ls -l /usr/bin/ | less

filer

sort:

  • -r: reverse
  • -u: unique
$ ls
file_001  file_010  file_019  file_028  file_037  file_046  file_055  file_064  file_073  file_082  file_091  file_100
file_002  file_011  file_020  file_029  file_038  file_047  file_056  file_065  file_074  file_083  file_092
file_003  file_012  file_021  file_030  file_039  file_048  file_057  file_066  file_075  file_084  file_093
file_004  file_013  file_022  file_031  file_040  file_049  file_058  file_067  file_076  file_085  file_094
file_005  file_014  file_023  file_032  file_041  file_050  file_059  file_068  file_077  file_086  file_095
file_006  file_015  file_024  file_033  file_042  file_051  file_060  file_069  file_078  file_087  file_096
file_007  file_016  file_025  file_034  file_043  file_052  file_061  file_070  file_079  file_088  file_097
file_008  file_017  file_026  file_035  file_044  file_053  file_062  file_071  file_080  file_089  file_098
file_009  file_018  file_027  file_036  file_045  file_054  file_063  file_072  file_081  file_090  file_099
$
$ ls | sort | head -n 5
file_001
file_002
file_003
file_004
file_005
$
$ ls | sort -r | head -n 5
file_100
file_099
file_098
file_097
file_096

# 将两个目录的程序结合起来,排序,去除重复 -u, --unique
ls /usr/bin/ /bin/ | sort -u

uniq重复的对已排序的内容进行去重

  • uniq -d:(duplicate) 仅显示重复的内容
# 去重
$ ls /usr/bin/ /bin/ | sort | uniq
# 仅显示有重复的行
$ ls /usr/bin/ /bin/ | sort | uniq -d

wc 计算行数,单词数,字节数

$ cat > data.txt
Hello World
I am using Linux

$ wc data.txt  # lines words bytes
 2  6 29 data.txt

#最长的一行有16个字符
$ wc -L data.txt
16 data.txt

# 共有 653 个程序
$ ls /usr/bin/ | wc -l
653

grep:支持正则表达式,将每一行和 模式 (pattern) 匹配,成功则输出

  • -i:不区分大小写
  • -v:输出不匹配的项
# 查看系统中有多少软件是更压缩文件相关的
$ ls /usr/bin/ /bin/ | grep zip
gpg-zip
gunzip
gzip
gpg-zip
gunzip
gzip

  • head -n 5 data.txt:查看前5行
  • tail -n 5 data.txt:查看后5行
  • tail -f: 查看后10行,并监视文件,当有新内容时,立即显示
# 查看前5行
$ ls /usr/bin/ | head -n 5
[
addr2line
alias
apropos
ar
  • 以上的命令,当给定文件名作为参数时,命令从文件中读取内容作为输入
  • 还可以用于管道中

tee:从标准输出中读取内容,并将内容写入一个文件和标准输出

tee 通常用于捕捉管道中的内容

$ ls /usr/bin/ | tee programs.txt | grep zip
gpg-zip
gunzip
gzip

$ wc -l programs.txt
653 programs.txt

cat

cat 除了查看简单文本外,还可以...

将下载的文件拼接起来

$ ls
hi.mp3_1  hi.mp3_2  hi.mp3_3

$ cat hi.mp3_* > hi.mp3  # 系统会按顺序展开通配符

快捷的文本编辑器

#  表示 EOF,文本末尾
$ cat > hello.txt
Hello World, I am using Linux right now.

你可能感兴趣的:(LinuxCommandLine -- 4)