15
计算机五大部件:
运算器、控制器:CPU,存储器:RAM,输入设备\输出设备
寄存器:CPU暂时存储器
I/O:硬盘
程序
INPUT设备
OUTPUT设备
系统设定(系统需要设定以下内容)
默认输出设备:标准输出,STDOUT,用1来表示
默认输入设备:标准输入,STDIN,用0来表示
标准错误输出:STDERR, 用2来表示
输入设备:提供数据的,像硬盘鼠标,键盘,网卡
标准输入:键盘
标准输出和错误输出:显示器
I/O重定向:
我们用>来表示:输出重定向 :覆盖输出
>>附加,追加输出
我们用<来表示:输入重定向
[root@www ~]# ls -l /etc/passwd > /tmp/haha/1.txt
[root@www ~]# cat /tmp/haha/1.txt
-rw-r--r--. 1 root root 1205 Aug 23 22:00 /etc/passwd
我们的Linux有很多开关
用set来实现开和关某一些功能(这里说到这个set是因为假如有一个文档他里面内容很重要,你用了输出重定向覆盖了,那就很惨,所以可以设定用set定义开关来防止这种错误)
help set查看这些命令
-C If set, disallow existing regular files to be overwritten
by redirection of output.
set -C:禁止对已经存在文件使用覆盖重定向
+C:关闭上述功能
如果要强制覆盖输出,则使用>|来实现,否则就上图一样,不能够覆盖输出
记住:我们的Linux中,错误的输出和正确的输出是不同的数据流
我们要重定向错误输出,用2>;而2>>附加,追加错误输出
注意的是,2>和2>>只能指向错误输出,不是错误输出的不理会
[root@www ~]# ls /varv/ 2> /tmp/haha/1.txt
[root@www ~]# cat /tmp/haha/1.txt
ls: cannot access /varv/: No such file or directory
上图中是错误正确输出路径,如果输出的文件一样,就可以用&>
&>:重定向“标准输出”或者“错误输出”到同一个文件。
但是不能使用&>>
输入重定向
我们命令查看文件的时候默认就带了给命令一个输入重定向的(但不是所有的都给了一个输入重定向,如tr命令)
[root@www ~]# cat < /etc/fstab
# Created by anaconda on Fri Aug 21 19:26:07 2015
下面就是tr命令不能后面跟文件,但是可以输入重定向给tr
<<:Here Document此处生成文档(所以一般将一个文件输入重定向的话,谁不会用<<的)
[root@www var]# cat >> /home/linan/.bashrc << EOF
> alias cls=clear
> EOF
[root@www ~]# cat << END
> hello
> what is your name
> END
hello
what is your name
以下这个例子:这种方式可以在脚本中生成一个文件的(下面可以看到,屏幕中就没有打印文档内容,而是直接写入了文档)
[root@www ~]# cat >> /tmp/haha/1.txt << EOF
> The firsh line.
> The second line.
> EOF
[root@www ~]# cat /tmp/haha/1.txt
The firsh line.
The second line.
所以这里如果想某一个文件输入东西就可以用cat >>,可以不用echo
什么是管道(组合小命令,完成负责任务):
管道:前一个命令的输出,作为后一个命令的输入 ,并且可以以此类推
命令1 | 命令2 | 命令3 | ...
[root@www ~]# echo "linan" | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@www ~]# cut -d: -f3 /etc/passwd | sort -n
0
1
2
一、tee
tee - read from standard input and write to standard output and files
既能输出到屏幕一份,又能保存在文件中一份
可以输出到其他的终端,可以将输入的信息以文件的形式存储起来
[root@www ~]# wc -l /etc/passwd | cut -d' ' -f1
26
[root@www var]# cat >> /home/linan/.bashrc << EOF
> alias cls=clear
> EOF
[root@www var]# cat /home/linan/.bashrc
alias cls=clear
16
一、grep,egrep,fgrep
文本查找文本检索的需要:
grep:Global Research
根据模式搜索文本,并将符合模式的“文本行”显示出来。
模式pattern:文本字符和正则表达式的“元字符”组合而成的匹配条件
[root@www ~]# grep 'root' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
grep [options] PATTERN [file...]
-i忽略大小写
--color显示的“匹配的”用颜色显示;可以在/etc/bashrc中加入alias
-v:显示没有被模式匹配到的行
-o:只显示被模式匹配到的字符串,其他不匹配的不显示
grep下的索引是正则表达式---注意跟我们之前的glob检索的*?不相同
正则表达式:Regular EXPression,REGEXP
我们之前讲到glob的时候有以下几个常用的
*:任意长度的任意字符
?:任意单个字符的
[]:表示匹配指定范围内的任意单个字符
[^]:表示不匹配指定范围外的任意单个字符
其中[]和[^]和正则表达式是一样的意思的,我们字符串都是写在[][^]里面的,如[[:digit:]]
而grep的正则表达式表示的意思完全不一样,
正则表达式如下:
.:表示匹配任何单个字符的
*:匹配其前面的字符任意次
如a*b,表示*前面的a可以任何多次,但是像acb是不可以的
\?:匹配其前面的字符1次或者0次
.*:表示任意长度的任意字符,如a.*b表示,前面是a,后面是b,中间是啥都可以
[]:表示匹配指定范围内的任意单个字符
[^]:表示不匹配指定范围外的任意单个字符
[root@www ~]# grep '[[:digit:]]$' /etc/inittab 表示结尾是数字的
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
匹配匹数(贪婪模式)
匹配个数:
有部分匹配,而不是全部匹配才会显示出来的,所以这个是grep的特性
grep本身的意思就是做部分匹配的
另外指定次数的方法
花括号默认是命令行展开,所以下面这个\是转义字符来的。
以下看到\的都是转义字符,如\( 和\)
\{m,n\}:匹配其前面的字符至少m次,至多n次
如grep ‘a\{1,3\}’ test.txt
表示匹配文件test.txt中a至少1次,至多3次的行
位置牟定
^:牟定行首,此字符后面的任何内容必须在行首
[root@www ~]# grep "^r..t" /etc/passwd
root:x:0:0:root:/root:/bin/bash
$:牟定行尾,此字符前面的任何内容必须在行尾
如以bash结尾的行bash$
^$:表示空白行
字符集合:
[:digit:] , [:lower:] , [:upper:] , [:punct:] , [:space:] , [:alpha:] ,[:alnum:]
这只是字符集合,所以如果我们要引用的时候,还得加多一个方括号,因为这是属于正则表达式[]和[^]内部的内容
[root@www ~]# grep '[[:digit:]]$' /etc/inittab
# 5 - X11
匹配单词的一个grep的选项(Linux中以字母开始,字母结尾的都是当做一个单词,如a55b,而a:b不是,以为:是特殊字符)
\<或者\b:牟定词首,其后面的任意字符必须作为单词首部出现
\>或者\b:牟定词尾,其前面的任意字符必须作为单词尾部出现
方便理解的话,就是大于小于号对着谁,就是对谁生效,像“root\>”这个大于号对着root,就是说root必须作为单词尾部出现,当然用\b更好
\<root\> 就是表示root必须是个单词。
就是找一个单词中就是root
[root@www tmp]# grep "root\>" 1.t
root very administrator
mroot is a girl
最后一个元字符
分组:
\(\)
\(ab\)* ,这是分组,表示的是ab一个整体,也很好理解分组的意思,只要有ab的行就可以被匹配到
[root@www ~]# grep "\(ro\)." /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
星号修饰的说前面任意字符的,说的就是ab一个整体。
\1:第一个左括号以及与之对应的右括号所包括的所有内容,前面的是love,后面的\1引用前面的也就要是love
\2:
\3:
本文出自 “malinux学习” 博客,谢绝转载!