#《快乐的 Linux 命令行》

#alias

alias用来创建别名,可以把多个命令放在同一行,命令之间用;分隔。

1
alias name='command1; command2; command3...'

在创建别名的时候,应该用type来测试一下这个别名有没有被用过。

删除别名,使用unalias命令。

在命令行里定义的别名,shell关闭之后就会消失。

#标准输入、输出和错误

Unix下万物皆文件,默认情况下,标准输出标准错误都连接到屏幕,即stdoutstderr标准输入连接到键盘上,即stdin

#标准输出重定向

使用>重定向符后接文件名将标准输出重定向到除屏幕以外的另一个文件:

1
command > filename
1
2
3
onns@DESKTOP-5JJP7PL:~$ ls -l /usr/bin > ls-output.txt
onns@DESKTOP-5JJP7PL:~$ ls -l ls-output.txt
-rw-r--r-- 1 onns onns 44260 Nov 9 12:56 ls-output.txt
1
2
3
4
onns@DESKTOP-5JJP7PL:~$ ls -l /bin/usr > ls-output.txt
ls: cannot access '/bin/usr': No such file or directory
onns@DESKTOP-5JJP7PL:~$ ls -l ls-output.txt
-rw-r--r-- 1 onns onns 0 Nov 9 12:59 ls-output.txt

ls程序不把它的错误信息输送到标准输出

而且,当我们使用>重定向符来重定向输出结果时,目标文件总是从开头被重写

快速清空一个文件内容或者创建一个新的空文件

1
> ls-output.txt

使用>>操作符,将导致输出结果添加到文件内容之后,即追加。如果文件不存在,文件会被创建。

#标准错误重定向

stdinstdoutstderrshell内部被称为文件描述符012

1
ls -l /bin/usr 2> ls-error.txt

2>要紧挨着,不然会报错:

1
2
3
onns@DESKTOP-5JJP7PL:~$ ls -l /bin/usr 2 > ls-error.txt
ls: cannot access '/bin/usr': No such file or directory
ls: cannot access '2': No such file or directory

如果想要把标准输出和标准错误一起重定向,有两种方法,老方法:

1
ls -l /bin/usr > ls-output.txt 2>&1

标准错误的重定向必须总是出现在标准输出重定向之后。

1
2
3
4
5
6
7
8
9
onns@DESKTOP-5JJP7PL:~$ ls -l /bin/usr > ls-output.txt # 错误还是会输出到标准输出
ls: cannot access '/bin/usr': No such file or directory
onns@DESKTOP-5JJP7PL:~$ cat ls-output.txt # 文件里没有东西
onns@DESKTOP-5JJP7PL:~$ ls -l /bin/usr > ls-output.txt 2>&1 # 正确写法
onns@DESKTOP-5JJP7PL:~$ cat ls-output.txt # 文件内容正常
ls: cannot access '/bin/usr': No such file or directory
onns@DESKTOP-5JJP7PL:~$ ls -l /bin/usr 2>&1 > ls-output.txt # 标准错误的重定向必须总是出现在标准输出重定向之后
ls: cannot access '/bin/usr': No such file or directory
onns@DESKTOP-5JJP7PL:~$ cat ls-output.txt

第二种方法是&>

1
2
3
4
onns@DESKTOP-5JJP7PL:~$ cat ls-output.txt
onns@DESKTOP-5JJP7PL:~$ ls -l /bin/usr &> ls-output.txt
onns@DESKTOP-5JJP7PL:~$ cat ls-output.txt
ls: cannot access '/bin/usr': No such file or directory

/dev/null文件是系统设备,叫做位存储桶,它可以接受输入,并且对输入不做任何处理。
可以把不需要的东西输出给垃圾桶:

1
ls -l /bin/usr 2> /dev/null