Linux中的应用工具 Linux中的应用工具分为三种:交互工具,过滤器,编辑器 输入:过滤器的数据来源 输出:过滤器的数据去向 重定向:标准输入、输出与错误输出,都可用特定符号改变数据来源或去向。
标准输入、标准输出、标准错误输出,例: [root@redhat root]# ls -l /dev/std* lrwxrwxrwx 1 root root 17 2011-10-25 /dev/stderr -> ../proc/self/fd/2 lrwxrwxrwx 1 root root 17 2011-10-25 /dev/stdin -> ../proc/self/fd/0 lrwxrwxrwx 1 root root 17 2011-10-25 /dev/stdout -> ../proc/self/fd/1 以上分别人标准输入(stdin(0))、标准输出(stdout(1))、标准错误输出(stderr(2)),所指向的文件。
输入重定向: 使用"<"来重定向输入源,大多数据工具都会以其后的文件名作为输入源,例: [root@redhat a]# cat test.txt HELLO WORLD ! I AM LUOWEI ! WELCOME TO LINUX'S WORLD ! [root@redhat a]# tr 'A-Z' 'a-z' < test.txt 将test.txt文件中的内容中的大写改变成小写输出 hello world ! i am luowei ! welcome to linux's world ! [root@redhat a]#
从当前文档输入:使用 << 让系统将一次键盘的全部输入,先送入虚拟的"当前文档",再一次性输入。 需要一对字母、符号或字符串作为起始终结符。可以选择任意符号作为起始终结标识符。例: [root@redhat a]# cat test2.txt [root@redhat a]# cat > test2.txt <<! > this is test. > writted by luowei ! > ! [root@redhat a]# cat test2.txt this is test. writted by luowei ! [root@redhat a]#
输出重定向: 例: [root@redhat a]# ls -l > test3.txt 将输出的内之余输出到test3.txt文件中 [root@redhat a]# cat test3.txt 总用量 20 drwxrwxr-- 2 root root 4096 10月 25 00:32 a_dir drwxr-xr-x 2 root root 4096 10月 25 00:32 b_dir -rw-rw-r-- 1 root root 34 10月 25 01:14 test2.txt -rw-r--r-- 1 root root 0 10月 25 01:17 test3.txt -rw-r--r-- 1 root root 206 10月 25 01:04 test.txt 请尝试执行'ls --help'来获取更多信息。 [root@redhat a]# ls --help >>test3.txt [root@redhat a]# cat test3.txt 把输出的内容追加到test3.txt 总用量 20 drwxrwxr-- 2 root root 4096 10月 25 00:32 a_dir drwxr-xr-x 2 root root 4096 10月 25 00:32 b_dir -rw-rw-r-- 1 root root 34 10月 25 01:14 test2.txt -rw-r--r-- 1 root root 0 10月 25 01:17 test3.txt -rw-r--r-- 1 root root 206 10月 25 01:04 test.txt 用法:ls [选项]... [文件]... 列出<文件>的信息 (默认为目前的目录)。 如果不指定 -cftuSUX 或 --sort 任何一个选项,则根据字母大小排序。
长选项必须用的参数在使用短选项时也是必须的。 -a, --all 不隐藏任何以 . 字符开始的项目 -A, --almost-all 列出除了 . 及 .. 以外的任何项目 …………. [root@redhat a]# ls-l 2>test.txt 将标准错误输出到文件中,在">"符号前加个"2" [root@redhat a]# cat test.txt -bash: ls-l: command not found [root@redhat a]# su - luowei [luowei@redhat luowei]$ find /etc -name passwd > stdout find: /etc/sysconfig/pgsql: 权限不够 find: /etc/default: 权限不够 find: /etc/httpd/conf/ssl.crl: 权限不够 find: /etc/httpd/conf/ssl.crt: 权限不够 find: /etc/httpd/conf/ssl.csr: 权限不够 find: /etc/httpd/conf/ssl.key: 权限不够 find: /etc/httpd/conf/ssl.prm: 权限不够 find: /etc/cups/certs: 权限不够 [luowei@redhat luowei]$ cat stdout /etc/passwd /etc/pam.d/passwd [luowei@redhat luowei]$ find /etc -name passwd 2>stderr /etc/passwd /etc/pam.d/passwd [luowei@redhat luowei]$ cat stderr find: /etc/sysconfig/pgsql: 权限不够 find: /etc/default: 权限不够 find: /etc/httpd/conf/ssl.crl: 权限不够 find: /etc/httpd/conf/ssl.crt: 权限不够 find: /etc/httpd/conf/ssl.csr: 权限不够 find: /etc/httpd/conf/ssl.key: 权限不够 find: /etc/httpd/conf/ssl.prm: 权限不够 find: /etc/cups/certs: 权限不够 [luowei@redhat luowei]$
双重定向输入输出 例: [luowei@redhat luowei]$ find /etc -name passwd 2> stderr > stderr > stdout [luowei@redhat luowei]$ cat stderr find: /etc/sysconfig/pgsql: 权限不够 find: /etc/default: 权限不够 find: /etc/httpd/conf/ssl.crl: 权限不够 find: /etc/httpd/conf/ssl.crt: 权限不够 find: /etc/httpd/conf/ssl.csr: 权限不够 find: /etc/httpd/conf/ssl.key: 权限不够 find: /etc/httpd/conf/ssl.prm: 权限不够 find: /etc/cups/certs: 权限不够 [luowei@redhat luowei]$ cat stdout /etc/passwd /etc/pam.d/passwd [luowei@redhat luowei]$ ls stderr stdout test.txt [luowei@redhat luowei]$
将正确定的输出信息与错误的信息输出到同一个地方(文件) [luowei@redhat luowei]$ find /etc -name passwd &> allout [luowei@redhat luowei]$ cat allout find: /etc/sysconfig/pgsql: 权限不够 /etc/passwd find: /etc/default: 权限不够 /etc/pam.d/passwd find: /etc/httpd/conf/ssl.crl: 权限不够 find: /etc/httpd/conf/ssl.crt: 权限不够 find: /etc/httpd/conf/ssl.csr: 权限不够 find: /etc/httpd/conf/ssl.key: 权限不够 find: /etc/httpd/conf/ssl.prm: 权限不够 find: /etc/cups/certs: 权限不够
使用 &> 也可所有的输入都送到同一个地方 [luowei@redhat luowei]$ find /etc -name passwd &> allout > allout 2>&1 [luowei@redhat luowei]$
管道 使用 | 将前现代战争过滤器的输出直接送入后一个过滤器的输入。 例: 允许多重管道 注意管道前过滤器的输出与管道后过滤器的输入数据类型匹配。 例: [root@redhat root]# ls -l /etc |more 列出目录并实现翻页的效果 [root@redhat root]# ls -l /etc |more |grep fstab 使用多重管道 拷贝 [root@redhat root]# echo "hello" > filea [root@redhat root]# cat filea hello [root@redhat root]# touch fileb [root@redhat root]# cat < filea > fileb 把filea里的内容拷贝到fileb [root@redhat root]# cat fileb hello [root@redhat root]# 将多个文件的内容输出合并到同一个文件 [root@redhat root]# cat filea;cat fileb 查看两个文件的内容 hello hello [root@redhat root]# cat filea fileb > file 将filea与fileb的内容输出到file [root@redhat root]# cat file hello hello [root@redhat root]# echo "hello luowei" > fileb [root@redhat root]# cat file* > file 将当前目录下以file打头的文件内容输出到file cat: file: input file is output file [root@redhat root]# cat file hello hello luowei [root@redhat root]#
|