重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
标准出错也定位到这个文件中
创新互联是一家专业提供大姚企业网站建设,专注与网站设计制作、成都网站建设、H5场景定制、小程序制作等业务。10年已为大姚众多企业、政府机构等服务。创新互联专业网站设计公司优惠进行中。
2代表标准出错,如果文件不存在,如果不加上21则会打印出错信息,
加上以后就不会打印了,也进入那个文件了
1代表标准输出定向到的地方,这句相当于
cat cities cities.copy 2 cities.copy
或者
cat cities 1 cities.copy 2 cities.copy
或者
cat cities 2 cities.copy 1 2
0:标准输入,1:标准输出,2:标准出错
1.列出文件清单命令:ls
ls命令能够列出当前目录下的所有内容。ls 命令的执行方式为:
# ls [-选项] [文件名或者目录名]
进入到Linux命令行中后,我们至少要知道当前所处的位置有哪些内容,这些信息就可以使用ls命令来获得。
在Linux中,ls命令是最常使用的命令之一,因为在命令行下要随时查看目录内容。如果不加任何选项的话,ls命令仅列出当前目录下的文件和目录名,例如,想要查看/etc目录下的内容,可以使用下列命令:
# ls /etc
如果想要列出当前目录下所有文件,则可以使用下列命令:
# ls -a
2、cat命令
功能:在标准输出上显示文件。
语法:cat [-vTEuAte] 文件
例子: cat example.txt
cat -A exam2.txt
cat file1 file2 file2
3、more命令
功能:在终端屏幕按屏显示文本文件。
语法: more [-pcdls] 文件
例子: more example.c
more -dc example.c
more -c -10 example.c
4、less命令
less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既
可以向前又可以向后翻阅文件。
5、head命令
功能:显示指定文件的前若干行。缺省设置为显示10行
语法:head [-n] 文件
例子: head example.c
head -3 example.c
6、tail命令
功能:显示指定文件的末尾若干行。缺省设置为显示10行
语法:tail [+ / - num ] [参数] 文件
+num 从第num行以后开始显示。- num 从距文件尾num行处开始显示。
例子: tail example.c
tail -4 example.c
7、grep、fgrep和egrep命令
功能:
这组命令以指定模式搜索文件,并通知用户在什么文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。grep命令一次只能搜索一个指定的模式;egrep命令检索扩展的正则表达式(包括表达式组和可选项);fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。
语法:
grep [-EFbcihlnvxef] [查找模式] [文件名1,文件名2,……]
egrep [选项] [查找模式] [文件名1,文件名2,……]
fgrep [选项] [查找模式] [文件名1,文件名2,……]
例子: grep "text file" example
grep data *
grep goto *.c
1 /dev/null 21
对于/dev/null设备一般不存在附加的说法,虽然这么写没错。一般写成:
1/dev/null 21
1/dev/null 含义是把标准输出重定向到/dev/null,其实就是屏蔽标准输出。
21 是把标准错误重定向到标准输出,也就是fprintf(stderr, "error msg");的信息会被打印到stdout上。
结合起来就是屏蔽所有输出信息。
至于为什么采用,以及这些符号,我也不清楚,前两者还算直观,这个我也是理解不能。
可以查看sh实现源码,通过代码了解这些符号的实现,希望注释中能有一些蛛丝马迹描述为什么采用这个符号。
一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
文件描述符为0,小于号表示数据由文件流入命令
usage:
命令 file
#加入输入重定向,对输入文件进行计数
wc -l /etc/passwd
文件描述符为1,大于号表述数据由命令流入文件
所以: echo "hello" t.log 也可以写成 echo "hello" 1 t.log
会把文件的内容清空,再输入到新的文件
会把当前内容保持不变,然后在下一行进行追加
2 错误重定向,如果当前命令产生了错误,会把错误重定向到文件中,而不会打印到屏幕
无论内容正确还是错误都会把文件输出到文件中。
stderr的文件描述符为2,Unix程序会向stderr流中写入错误信息。
默认情况下, command file 将stdout 重定向到 file, command file 将stdin 重定向到 file。
如果希望 stderr 重定向到 file,可以这样写:
$ command 2file
如果希望 stderr 追加到 file 文件末尾,可以这样写:
$ command 2file 2 表示标准错误文件(stderr)
如果希望将 stdout 和 stderr 合并后重定向到 file,可以这样写:
$ command file 21 或者 $ command file 21
如果希望对 stdin 和 stdout 都重定向,可以这样写:
$ command file1 file2
command 命令将 stdin 重定向到 file1,将 stdout 重定向到 file2。
含义:将标准错误输出 重定向到 标准输出。
符号是一个整体,不可分开,分开后就不是上述含义了。
比如有些人可能会这么想:2是标准错误输入,1是标准输出,是重定向符号,那么"将标准错误输出重定向到标准输出"是不是就应该写成"21"就行了?是这样吗? 如果是尝试过,你就知道21的写法其实是将标准错误输出重定向到名为"1"的文件里去了
bash环境作了如下实验:
[root@s253
~]#
balabala
-bash:
balabala:
command
not
found
[root@s253
~]#
balabala
/dev/null
[root@s253
~]#
balabala
/dev/null
21
[root@s253
~]#
balabala
/dev/null
21
[root@s253
~]#
两条命令等价。
网友给出ksh和bash对比
/home/lee#echo
$0
-ksh
/home/lee#ls
abc
/dev/null
21
/home/lee#ls
abc
/dev/null
ls:
abc:
没有那个文件或目录
[1]
1524
[1]
Done
(1)
ls
--color=tty
abc
/home/lee#bash
/home/lee#echo
$0
bash
/home/lee#ls
abc
/dev/null
21
/home/lee#ls
abc
/dev/null
显然在ksh就不一样了,所以推荐使用/dev/null
21
27
后记:
21
和
的解释
Linux的IO输入输出有三类
Standard
Input
代码
Standard
Output
代码
1
Standard
Error
代码
2
ls
thereisno
1
out.txt
标准输出重定向
也可以不加1写成
ls
thereisno
out.txt
ls
thereisno
2
out.txt
标准错误重定向
ls
thereisno
out.txt
21
把错误定向到标准输出,然后统一重定向
ls
thereisno
out.txt
所有IO重定向(中的可以代表任意,0,1,2,3……)