工作,学习,生活,这里将会有一些记录. 备用域名:http://meisw.wdlinux.cn 注册 | 登陆
浏览模式: 标准 | 列表分类:linux

top信息

Tasks: 29 total 进程总数
1 running 正在运行的进程数
28 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3% us 用户空间占用CPU百分比
1.0% sy 内核空间占用CPU百分比
0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
98.7% id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0% hi   硬件中断
0.0% si   软件中断

Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
该数值即为这些内容已存在于内存中的交换区的大小。
相应的内存再次被换出时可不必再对交换区写入。

进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
序号 列名 含义
a PID 进程id
b PPID 父进程id
c RUSER Real user name
d UID 进程所有者的用户id
e USER 进程所有者的用户名
f GROUP 进程所有者的组名
g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
h PR 优先级
i NI nice值。负值表示高优先级,正值表示低优先级
j P 最后使用的CPU,仅在多CPU环境下有意义
k %CPU 上次更新到现在的CPU时间占用百分比
l TIME 进程使用的CPU时间总计,单位秒
m TIME+ 进程使用的CPU时间总计,单位1/100秒
n %MEM 进程使用的物理内存百分比
o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
r CODE 可执行代码占用的物理内存大小,单位kb
s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
t SHR 共享内存大小,单位kb
u nFLT 页面错误次数
v nDRT 最后一次写入到现在,被修改过的页面数。
w S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
x COMMAND 命令名/命令行
y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
z Flags 任务标志,参考 sched.h

aria2 — Linux 下的BT高速下载工具

aria2 是 Linux 下一个不错的高速下载工具。由于它具有分段下载引擎,所以支持从多个地址或者从一个地址的多个连接来下载同一个文件。这样自然就大大加快了文件的下载速 度。aria2 也具有断点续传功能,这使你随时能够恢复已经中断的文件下载。除了支持一般的 http(s) 和 ftp 协议外,aria2 还支持 BitTorrent 协议。这意味着,你也可以使用 aria2 来下载 torrent 文件。

安装 aria2

aria2 目前已被包含到许多 Linux 发行版中,因此你可以通过所用的系统直接加以安装。例如,在 Debian/Ubuntu 中,你可以在终端执行如下指令来安装 aria2:

sudo apt-get install aria2

如果你使用 Fedora Core,那么可以使用下列命令:

sudo yum install aria2

你也可以获取 aria2 的源代码,自行编译安装。当前 aria2 的最新版本为aria2-1.10.8.tar.gz,可从这里下载。

aria2 的使用方法

aria2 是命令行程序,使用非常简单。

  • 一般使用 使用 aria2 下载文件,只需在命令后附加地址即可。如: aria2c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2
  • 分段下载 利用 aria2 的分段下载功能可以加快文件的下载速度,对于下载大文件时特别有用。为了使用 aria2 的分段下载功能,你需要在命令中指定 s 选项。如: aria2c -s 2 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2 这将使用 2 个连接来下载该文件。s 后面的参数值介于 1~5 之间,你可以根据实际情况选择。
  • 断点续传 在命令中使用 c 选项可以断点续传文件。如: aria2c -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.6.tar.bz2
  • 下载 torrent 文件 你也可以使用 aria2 下载 BitTorrent 文件。如: aria2c -o gutsy.torrent http://cdimage.ubuntu.com/daily-live/current/gutsy-desktop-i386.iso.torrent

关于 aria2 的更多用法,可以通过 man aria2c 查阅。

如何在Linux终端下进行BT下载

1)Linux下有许多软件可以从终端进行BT下载。rtorrent 可能是其中最使用简单而且使用范围广的。下载时,你只需要向他提供简单的种子文件地址而不需要下载整个种子文件。比如:rtorrent <torrent文件地址>
rtorrent是高度自定义化的。默认情况下,你可以编辑位于~.rtorrent.rc的配置文件来对它进行设置。你也可以用这样的命令:rtorrent -n -o import=~/自定义.rc来为rtorrent指定你自己的自定义设置文件。
一些特殊情况下你可以使用自己的设置文件,而默认情况下rtorrent不加载设置文件。
在线程中暂停和恢复下载:session = ~/Download/session
为新的下载监视目录:schedule = watch_directory,10,10,load_start=~/Download/watch/*.torrent
在下载结束后移动文件:on_finished = move_complete,”execute=mv,-u,$d,get_base_path=,~/Download/ ;d.set_directory=~/Download/”
到达上传限额后停止上传:schedule = ratio,60,60,”stop_on_ratio=200,50M,300”
完整的选项和下载请看下面的网站:http://libtorrent.rakshasa.no/
2)另一个重要的BT下载工具Transmission也有命令行版本。使用transmission下载文件,你需要提供已下载的种子文件,而不像rtorrent那样只提供一个链接。比如:transmissioncli /home/pays/Desktop/test.torrent
此外,你可以使用-d和-u选项自定义下载和上传的速度限制。Transmission为Debian准备的命令行版本可以从这里下载:http://packages.debian.org/unstable/net/transmission-cli
3)命令行下载BT的的三个选择是ctorrent。虽然它在2006年就停止研发了,不过在多数时候仍然可以正常工作。它使用和transmission的命令行版本类似的命令格式,比如:ctorrent /home/pays/Desktop/test.torrent你可以从ctorrent的网站来了解它的更多信息:http://ctorrent.sourceforge.net/

kernel panic - not syncing : nmi watchdog

修改方法:
/etc/sysctl.conf文件中加入
kernel.panic = 30 #panic错误中自动重启,等待时间为30秒
kernel.sysrq = 1 #激活Magic SysRq! 否则,键盘鼠标没有响应

硬盘操作查看工具 iotop

如果你知道有程序在磨你的硬盘,但是你又不能确定是哪一个程序在磨你的硬盘,那么就用 iotop来帮助你吧。

在Ubuntu里安装命令是: sudo apt-get install iotop

安装好之后在终端输入:iotop就可以了

下面来说一具体运用:

可以用左右箭头操作,按 r 是相反方向,按 o 是动态切换

用法 iotop -参数

–version 查看版本信息的

-h, –help 查看帮助信息的

-o, –only 只显示在划硬盘的程序
-b, –batch 批量处理 用来记录日志的

-n NUM  设定循环几次

-d SEC, –delay=SEC  设定显示时间间隔

VI常用实用命令学习

#:   是指常用的命令

一般模式:光标移动
h 或 ->     光标向左移动一个字符
------------------------------------------------------------
l 或 <-     光标向右移动一个字符
------------------------------------------------------------
k 或 向上方向键    光标向上移动一个字符
------------------------------------------------------------
j 或 向下方向键    光标向下移动一个字符
------------------------------------------------------------
Ctrl+f         #  屏幕向前翻动一页
--------------------------------------------------------
Ctrl+b         #  屏幕向后翻动一页
--------------------------------------------------------
Ctrl+d     屏幕向前翻动半页
--------------------------------------------------------
Ctrl+u     屏幕向后翻动半页
--------------------------------------------------------
+     光标移动到非空格符的下一列
------------------------------------------------------------------
-     光标移动到非空格符的上一列
-------------------------------------------------------------------
n    按下数字键后再按空格键,光标会向右移动这一行的n个字符。
     (例如20,则光标会向右移动20个字符)
----------------------------------------------------------------------------------------------
0        #   (这是数字0)移动到这一行的第一个字符处
-----------------------------------------------------------------------------
$        #   移动到这一行的最后一个字符处
--------------------------------------------------------------------
H     光标移动到这个屏幕最上方的那一行
------------------------------------------------------------------------
M     光标移动到这个屏幕中央的那一行
----------------------------------------------------------------------
L     光标移动到这个屏幕最下方的那一行
------------------------------------------------------------------------
G        #   移动到这个文件的最后一行
----------------------------------------------------------------
nG     移动到这个文件的第n行。
     例如20G,则会移动到这个文件的第20行(可配合:set nu)
----------------------------------------------------------------------------------------------
n       #   光标向下移动n行
-------------------------------------------------------


一般模式:查找与替换

/word        #   在光标之后查找一个名为word的字符串
--------------------------------------------------------------------------
?word     在光标之前查找一个名为word的字符串
--------------------------------------------------------------------------
:n1,n2s/word1/word2/g      #   在第n1与n2行之间查找word1这个字符串,并将该字符串替换为word2
----------------------------------------------------------------------------------------------------
:1,$s/word1/word2/g      #   从第一行到最后一行查找word1字符串,并将该字符串替换为word2
--------------------------------------------------------------------------------------------------
:1,$s/word1/word2/gc      #   从第一行到最后一行查找word1字符串,并将该字符串替换为word2,
     且在替换前显示提示符让用户确认(confirm)
---------------------------------------------------------------------------------------------------


一般模式:删除、复制与粘贴

x,X        #   x为向后删除一个字符,X为向前删除一个字符
--------------------------------------------------------------------------------
nx     向后删除n个字符
-------------------------------------------------------
dd        #   删除光标所在的那一整行 
--------------------------------------------------------------
ndd        #   删除光标所在列的向下n列,例如,20dd则是删除20列
---------------------------------------------------------------------------------------
d1G     删除光标所在行到第一行的所有数据
------------------------------------------------------------------------
dG     删除光标所在行到最后一行的所有数据
--------------------------------------------------------------------------
yy        #   复制光标所在行
------------------------------------------------------
nyy        #   复制光标所在列的向下n列,例如,20yy则是复制20列
---------------------------------------------------------------------------------------
y1G     复制光标所在列到第一列的所有数据
------------------------------------------------------------------------
yG     复制光标所在列到最后一列的所有数据
--------------------------------------------------------------------------
p,P        #   p为复制的数据粘贴在光标下一行,P为粘贴在光标上一行
------------------------------------------------------------------------------------------
J     将光标所在列与下一列的数据结合成一行
-----------------------------------------------------------------------------
u        #   恢复前一个动作
------------------------------------------------------

 

编辑模式:

i,I        #   插入:在当前光标所在处插入输入的文字,已存在的字符会向后退
--------------------------------------------------------------------------------------------------
a,A        #   添加:由当前光标所在处的下一个字符开始输入,已存在的字符会向后退
-------------------------------------------------------------------------------------------------------
o,O        #   插入新的一行:从光标所在处的下一行行首开始输入字符
------------------------------------------------------------------------------------------
r,R        #   替换:r会替换光标所指的那一个字符;R会一直替换光标所指的文字,直到按下Esc为止
------------------------------------------------------------------------------------------------------
Esc        #   退出编辑模式,回到一般模式
------------------------------------------------------------------


命令行模式:

:w        #   将编辑的数据写入硬盘文件中
------------------------------------------------------------------
:w!     若文件属性为只读,强制写入该文件
------------------------------------------------------------------------
:q        #   退出vi
----------------------------------------------
q!     若曾修改过文件,又不想保存,使用!为强制退出不保存文件
---------------------------------------------------------------------------------------------
:wq        #   保存后退出,若为:wq!,则为强制保存后退出
---------------------------------------------------------------------------------
:w[filename]    将编辑数据保存为另一个文件(类似另存为新文档):x也是保存
------------------------------------------------------------------------------------
:r[filename]    在编辑的数据中,读入另一个文件的数据,亦即将filename这个文件内容加到光标所在行的后面
------------------------------------------------------------------------------------------------------
:set nu     显示行号,设定之后,会在每一行的前面显示该行的行号
------------------------------------------------------------------------------------------
:set nonu    与set nu相反,为取消行号
----------------------------------------------------------------
n1,n2w[filename]   将n1到n2的内容保存为filename这个文件
----------------------------------------------------------------------------

ngrep

find 手册

find相关命令和参数的相关说明

 find - 在目录层次中寻找文件
参数说明:
-daystart 
                从今天也不从24小时之前开始计量时间(对 -amin,
                 -atime, -cmin, -ctime, -mmin, 和-mtime有效)。

        -depth
                先搜索目录的内容再搜索目录本身。

        -follow
                不检索符号链接。意即 -noleaf。

               


        -help, --help
                列出find的命令行用法的概要,然后返回

        -maxdepth levels
                在命令行下目录的最大深度级别(非负整数),'-maxdepth 0'
                意味着只在命令行参数中应用检测和事件。

        -mindepth levels
                小于指定数字(非负整数)的深度级别的目录层次将不应用检
                测和事件。'-mindepth 1'意味着除了当前的命令行参数外
                将搜索所有的文件。
       
        -mount
                在其它文件系统中不进入目录。

        -noleaf
                不优化假如某一个目录里包含少于两个以下的子目录。这个选
                项在那些不遵循UNIX文件系统链界约定的文件系统中用,像
                CD-ROM,MS-DOS或AFS卷加载点上。在UNIX文件系统中,每个
                目录有至少两个硬链接,它的名字和'.'。它的子目录(假如有)
                各自有一个'..'链接到它本身。在FIND检索一个目录时,在统
                计其子目录少于两个,意味着将不需要在进行下去了。只需要
                检索一下这个目录名;这在检索速度上是个有意义的提高。

        -version, --version
                显示FIND的版本号,终止程序。

        -xdev 在其它文件系统中不进入目录。
说明:
        用下边的格式可以指定数字参数

        +n      比n大。
        -n      比n小。
        n       恰好是n。



        -amin n
                文件最后一次访问是在n分钟前。

        -anewer file
                文件最后访问时间比指定的file修改时间更晚。 -anewer会
                受到-follow的影响当在命令行中-follow在-anewer之前时。

        -atime n
                文件最后一次访问是n*24小时前。

        -cmin n
                文件的状态的改变是在n分钟前。

        -cnewer file
                文件状态的改变比指定的file状态的改变时间更晚。-cnewer
                会受到-follow的影响当命令行中-follow在-cnewer之前时。

        -ctime n
                文件状态的改变时间是在n*24小时前。

        -empty 文件是空的,它是一个正规的文件或目录。

        -false  总是假。

        -fstype type
                文件是type类型。在不同的unix系统中有多种不同的文件系
                统类型。在一些不同版本的unix中有效的文件类型有:ufs,
                 4.2, 4.3, nfs, tmp, mfs, S51k, S52k.你可以用
                -printf加上%F指示来看你的文件系统的类型。

        -gid n 文件的数字型组ID是n.

        -group gname
                文件属于组gname(允许数字型的gname).

        -ilname pattern
                 同-lname, 但是匹配是大小些不区分的.

        -iname pattern
                同-name,但是匹配是大小些不区分的。举个例子,这个通配符
                'fo*'和'f??'匹配文件名'Foo', 'FOO', 'foo', 'fOo',等
                等。

        -inum n
                文件的i结点数是n.
     


        -ipath pattern
                同 -path, 但是匹配大小写不区分。

        -iregex pattern
                同 -regex, 但是匹配大小写不区分.

        -links n
                文件有n个链结。

        -lname pattern
                文件是个符号链结内容匹配shell通配符pattern。元字符
                '/'或'.'不能区别对待。

        -mmin n
                文件的数据最后一次被编辑是在n分钟前.

        -mtime n
                文件的数据最后一次被编辑是在n*24小时前.

        -name pattern
                基本的文件名(起始的目录已经检测过了)匹配shell通配符
                pattern.元字符('*', '?', 和'[]')不能匹配一个以'.'
                开头的文件名。忽略在它下边的目录或文件,用-prune;参看
                -path描述中的例子。

        -newer file
                文件最后编辑时间比指定的file晚
                -newer会受到-follow的影响当在命令行中-follow在-newer
                之前时。

        -nouser
                没有用户符合文件的数字型用户ID.

        -nogroup
                没有组符合文件的数字型组ID.

        -path pattern
                文件名匹配shell通配符pattern.元字符不能区分'/'和'.';
                因此,像例子

                        find . -path './sr*sc'

                将列出一个目录条目'./src/misc'(假如它存在的话).
                忽略整个目录树,用-prune比检测树中的每一个文件要好一
                些。举个例子,跳过'src/emacs'和它下边的所有文件,列出
                其它发现的文件,执行下边的命令:

                        find . -path './src/emacs' -prune -o -print



                             



        -perm mode
                文件的访问权限位恰好是mode(八进制或符号).符号模式用
                模式0做为开始。

        -perm -mode
                文件的所有访问权限位mode都设了。

        -perm +mode
                文件的一些访问权限位mode设了。

        -regex pattern
                文件匹配规则的表达式通配符。这是一个在整个路径中的
                匹配,而不是一个检索。举个例子,匹配一个'./fubar3'
                文件名的文件,你应该用规则的表达式'.*bar.'或'.*b.*3',
                 而不是'b.*r3'.

        -size n[bckw]
                文件占用n个单元空间。在缺省时或n后边跟着字符b时,这个
                单元是512字节的块,n后边跟着c是字节,n后边跟着k是千字节,
                n后边跟着w是两个字节的词.文件大小不能计算间接的块,但是
                能计算很少的没能实际分配大小的文件。

        -true 总是真

        -type c
                文件是类型c:
                b       块(缓冲)设备.
                c       字符设备.
                d       目录.
                p       有名管道(FIFO).
                f       规则文件.
                l       符号链结.
                s       插座.

        -uid n 文件的数字型用户ID是n.

        -used n
                文件的最后访问时间是在它的状态改变时间的n天前.






                               



        -user uname
                文件是属于名为uname(数字型ID也可)的用户。
        -xtype c
                这一项是和-type相同的除非文件是一个符号链结。
                若是符号链结:假如 -follow 没有给出,若这个文件链结
                的是类型为c的文件,则返回真;假如给了-follow选项,若c
                为'l',则返回真.对于符号链结, -xtype检测链结的文件类
                型,-type不做这样的检测。



事件


        -exec command ;
                执行命令;返回的状态值为零则为真。所有在这之后的参数
                都是command的参数,直到遇到';'.字符串'{}'将被当前的
                文件名代替,作为当前命令的参数,并不是象一些版本FIND
                一样是个单独存在的一个参数,这些语句应该被转义(用'\')
                或被引用,以此来保护他们被SHELL展开。这个命令将在起始
                目录被执行。

        -fls file
                值为真;同 -ls 但像 -fprint一样将输出写向文件file

        -fprint file
                值为真;输出整个文件名到文件file中.当find运行时file不
                存在,它将被建立;若存在,原来的文件内容将被删掉。也可以
                用名为"/dev/stdout"和"/dev/stderr"的文件,它们分别指
                的时是标准输出和标准错误。

        -fprint0 file
                值为真;同 -printf 但是将像 -fprint 一样将输出写像文
                件file.

        -ok command
                同 -exec但是先问用户(在标准输入);假如应答不是以'y'或
                'Y'开头,将不执行command,返回假。

        -print  值为真;在标准输出上输出整个文件名,并加一个新行。

        -print0
                值为真;在标准输出上输出整个文件名,并加一个空字符。这
                将允许



                                        6


                其它程序能正确的处理在FIND输出中包含新行的文件名。

        -printf format

                值为真。通过解释转义字符'\'和指示字符'%',格式化输出
                到标准输出上.空间宽度和精度能像c函数'printf'一样被
                指定。不像 -print, -printf不能在字符串的末尾自动加
                一个新行。这些转义和指示字符是:

                \a      鸣声.

                \b      退格键.

                \c      马上停止格式输出,输出到标准输出上。

                \f      换页符.

                \n      行符.

                \r      回车符.

                \t      水平制表符.

                \v      竖直制表符.

                \      反斜线.

                一个'\'字符后跟着其它字符将被视为普通字符,它们都将
                被输出。

                %%      符号'%'.

                %a      在格式输出中通过调用c函数'ctime'返回文件的
                        最后访问时间。

                %AK     用K指定的格式输出文件的最后访问时间。K可以
                        是'@'或者C函数'strftime'函数的一个指示。有
                        效的K值列在下边;它们不一定在所有的系统中都
                        有效,主要取决于这些系统中'strftime'函数的
                        异同。

                        @       从Jan.   1,  1970,  00:00 GMT到
                                现在的秒数。

                        时间域:

                        H       点钟 (00..23).




                        I       点钟 (01..12).

                        k       点种 ( 0..23).

                        l       点钟 ( 1..12).

                        M       分钟 ( 00.59).

                        p       本地的上午或下午.

                        r       时间,12小时格式 (hh:mm:ss[AP]M).

                        S       秒钟 (00.61).

                        T       时间,24小时格式 (hh:mm:ss).

                        X       本地的时间表示 (H:M:S).

                        Z       时区 (举例来说,EDT(美国东部时区)),或没
                                有表示没有可决定的时区。

                        日期域:

                        a       本地缩写的星期名 (Sun..Sat).

                        A       本地完全的星期名,不定长 (Sunday..Saturday).

                        b       本地缩写的月份名 (Jan...Dec).

                        B       本地完全的月份名,不定长 (January...December).

                        c       本地的日期和时间 (Sat Nov 04 12:02:33 EST 1989).

                        d       当月的哪一天 (01..31).

                        D       日期 (mm/dd/yy).

                        h       同 b.

                        j       当年的哪一天 (001..366).

                        m       月份 (01..12).

                        U       当年的星期数,用星期日做为一星期的第一天 (00..53).

                        w       星期的哪一天

                        W       当年的星期数,用星期一做为一星期的第一天 (00..53).



                        x       本地的日期表示法 (mm/dd/yy).

                        y       当年的最后两位数 (00..99).

                        Y       年份 (1970...).

                %b      用512字节的块计算的文件的大小(上舍入)。

                %c      用C函数'ctime'返回的文件状态的最后改变时间。

                %Ck     被k指定的文件状态的最后改变时间,k与%A后的k相同.

                %d      文件在目录树中的深度;0意味着文件在命令行参数中.

                %f      不带目录的文件名(只有最后的元素).

                %F      这个文件所在的文件系统类型名;这个值能被 -fstype用。

                %g      文件的组名,若组无名则是组ID.

                %G      文件的数字组ID.

                %h      文件的主目录 (除了最后的元素).

                %H      命令行参数若文件在命令行参数中找到.

                %i      文件的i节点数 (10进制格式).

                %k      用1K字节的块计算文件的大小(上舍入)。

                %l      符号链接的目标(假如文件不是一个符号链接则返回一个
                        空字符串).

                %m      文件的访问权限位 (八进制)

                %n      文件的硬链接数

                %p      文件名.

                %P      用在命令行参数之下发现的文件名代替文件名.



                %s      用字节计算的文件大小.

                %t      用C函数'ctime'返回的文件的最后编辑时间。

                %Tk     被k指定格式的文件的最后编辑时间,k与%A后的k相同.

                %u      文件的用户名,若没有则输出用户数字ID.   

                %U      文件的数字ID.   

                字符'%'后跟着另外的字符将被丢弃(但是其它的字符将输出).

        -prune  假如 -depth 没指定,值为真;不进入当前的目录。
                若 -depth 给定,值为假;没作用.

        -ls     值为真;用 'ls -dils'格式在标准输出中列出当前目录的文件。
                块记数单位是1k字节,除非 设定了POSIXLY_CORRECT环境变量,
                将用512字节作为单位。



操作符


        列出优先级顺序
       
        ( expr )
                强制优先.

        ! expr  假如expr为假则为真.

        -not expr
                同 ! expr.

        expr1 expr2
                和操作(默认); 假如expr1值是假expr2不能鉴定。

        expr1 -a expr2
                同 expr1 expr2.

        expr1 -o expr2
                与操作;假如expr1值是真expr2不能鉴定。

        expr1 -or expr2
                同 expr1 -o expr2