急需一种电路元器件符号大全,如图,a处常态低电平0v,要求当a处输出很短时间(0.3s

命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。linux命令在系统中有两种类型:内置Shell命令和Linux命令。

说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案)

-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行

说明:变换工作目录至 dirName. 其中 dirName 表示法可为绝对路径或相对路径。若目录名称省略,则变换至使用者的 home directory (也就是刚 login 时所在的目录)。另外,"~" 也表示为 home directory 的意思,"." 则是表示目前所在的目录,"" 则表示目前目录位置的上一层目录。

跳到目前目录的上上两层:

说明:Linux/Unix 的档案存取权限分为三级:档案拥有者,群组,其他。利用 chmod 可以藉以控制档案如何被他人所存取。

mode:权限设定字串,格式如下:[ugoa…][[+-=][rwxX]…][,…],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。

+ 表示增加权限,- 表示取消权限,= 表示唯一设定权限。

r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。

-c:若该档案权限确实已经更改,才显示其更改动作

-f:若该档案权限无法被更改也不要显示错误讯息

-v:显示权限变更的详细资料

-R:对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)

范例 :将档案 file1.txt 设为所有人皆可读取:

将档案 file1.txt 设为所有人皆可读取:

将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入:

将 ex1.py 设定为只有该档案拥有者可以执行:

将目前目录下的所有档案与子目录皆设为任何人可读取:

说明:Linux/Unix 是多人多工作业系统,所有的档案皆有拥有者。利用 chown 可以将档案的拥有者加以改变。一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

user:新的档案拥有者的使用者 IDgroup:新的档案拥有者的使用者群体(group)-c:若该档案拥有者确实已经更改,才显示其更改动作-f:若该档案拥有者无法被更改也不要显示错误讯息-h:只对于连结(link)进行变更,而非该 link 真正指向的档案-v:显示拥有者变更的详细资料-R:对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)--help:显示辅助说明--version:显示版本

将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 lamport:

说明:将一个档案拷贝至另一档案,或将数个档案拷贝至另一目录。

-a 尽可能将档案状态,权限等资料都照原状予以复制。

-r 若 source 中含有目录名,则将目录下之档案亦皆依序拷贝至目的地。

-f 若目的地已经有相同档名的档案存在,则在复制前先予以删除再行复制。

将档案 aaa 复制(已存在),并命名为 bbb:

将所有的C语言程式拷贝至 Finished 子目录中:

说明:显示每行从开头算起 num1 到 num2 的文字。

将档案系统内符合 expression 的档案列出来。你可以指要档案的名称,类别,时间,大小,权限等不同资讯的组合,只有完全相符的才会被列出来。

expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

-mount, -xdev:只检查和指定目录在同一个档案系统下的档案,避免列出其它档案系统中的档案

你可以使用 ( ) 将运算式分隔,并使用下列运算。

将目前目录及其子目录下所有延伸档名是 c 的档案列出来。

将目前目录其其下子目录中所有一般档案列出

将目前目录及其子目录下所有最近 20 分钟内更新过的档案列出

less 的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 允许使用者往回卷动

以浏览已经看过的部份,同时因为 less 并未在一开始就读入整个档案,因此在遇上大型档案的开启时,会比一般的文书编辑器(如 vi)来的快速。

说明:Linux/Unix 档案系统中,有所谓的连结(link),我们可以将其视为档案的别名,而连结又可分为两种:硬连结(hard link)与软连结(symbolic link),硬连结的意思是一个档案可以有多个名称,而软连结的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。硬连结是存在同一个档案系统中,而软连结却可以跨越不同的档案系统。

ln source dist 是产生一个连结(dist)到 source,至于使用硬连结或软链结则由参数决定。

不论是硬连结或软链结都不会将原本的档案复制一份,只会占用非常少量的磁碟空间。

-f:链结时先将与 dist 同档名的档案删除-d:允许系统管理者硬链结自己的目录-i:在删除与 dist 同档名的档案时先进行询问-n:在进行软连结时,将 dist 视为一般的档案-s:进行软链结(symbolic link)-v:在连结之前显示其档名-b:将在链结时会被覆写或删除的档案进行备份-S SUFFIX:将备份的档案都加上 SUFFIX 的字尾-V

locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的资料库,之后当寻找时就只需查询这个资料库,而不必实际深入档案系统之中了。在一般的 distribution 之中,资料库的建立都被放在 contab 中自动执行。

一般使用者在使用时只要用

的型式就可以了。 参数:

建立资料库,-u 会由根目录开始,-U 则可以指定开始的位置。

将排除在寻找的范围之外。

如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的权限资料。

将特定的档案系统排除在外,例如我们没有到理要把 proc 档案系统中的档案放在资料库中。

安静模式,不会显示任何错误讯息。

使用正规运算式 做寻找的条件。

显示程式的版本讯息 范例:

说明:显示指定工作目录下之内容(列出目前工作目录所含之档案及子目录)。

-a 显示所有档案及目录 (ls内定将档案名或目录名称开头为"."的视为隐藏档,不会列出)

-l 除档案名称外,亦将档案型态,权限,拥有者,档案大小等资讯详细列出

-r 将档案以相反次序显示(原定依英文字母次序)

-t 将档案依建立时间之先后次序列出

-F 在列出的档案名称后加一符号;例如可执行档则加 "*", 目录则加 "/"

-R 若目录下有档案,则以下之档案亦皆依序列出

列出目前工作目录下所有名称是 s 开头的档案,愈新的排愈后面:

将 /bin 目录以下所有目录及档案详细资料列出:

列出目前工作目录下所有档案及目录;目录于名称后加 "/", 可执行档于名称后加 "*":

说明:类似 cat ,不过会以一页一页的显示方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h .

参数:-num 一次显示的行数

-l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能

-f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)

-p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容

-c 跟 -p 相似,不同的是先显示内容再清除其他旧资料

-s 当遇到有连续两行以上的空白行,就代换为一行的空白行

-u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)

+/ 在每个档案显示前搜寻该字串(pattern),然后从该字串之后开始显示

fileNames 欲显示内容的档案,可为复数个数

more -s testfile 逐页显示 testfile 之档案内容,如有连续两行以上空白行则以一行空白行显示。

说明:将一个档案移至另一档案,或将数个档案移至另一目录。

参数:-i 若目的地已有同名档案,则先询问是否覆盖旧档。

将所有的C语言程式移至 Finished 子目录中:

说明:删除档案及目录。

-i 删除前逐一询问确认。

-f 即使原档案属性设为唯读,亦直接删除,无需逐一确认。

-r 将目录及以下之档案亦逐一删除。

删除所有C语言程式档;删除前逐一询问确认:

将 Finished 子目录及子目录中所有档案删除:

使用权限:于目前目录有适当权限的所有使用者

说明: 删除空的目录。

参数: -p 是当子目录被删除后使它也成为空目录的话,则顺便一并删除。

将工作目录下,名为 AAA 的子目录删除:

在工作目录下的 BBB 目录中,删除名为 Test 的子目录。若 Test 删除后,BBB 目录成为空目录,则 BBB 亦予删除。

将一个档案分割成数个。而从 INPUT 分割输出成固定大小的档案,其档名依序为 PREFIXaa, PREFIXab…;PREFIX 预设值为 `x.若没有 INPUT 档或为 `-,则从标准输入读进资料。

SIZE 值为每一输出档案的大小,单位为 byte.

每一输出档中,单行的最大 byte 数。

NUMBER 值为每一输出档的列数大小。

于每个输出档被开启前,列印出侦错资讯到标准错误输出。

显示辅助资讯然后离开。

列出版本资讯然后离开。

因 Postgres 允许表格大过你系统档案的最大容量,所以要将表格 dump 到单一的档案可能会有问题,使用 split进行档案分割。

touch 指令改变档案的时间记录。 ls -l 可以显示档案的时间记录。

a 改变档案的读取时间记录。

m 改变档案的修改时间记录。

c 假如目的档案不存在,不会建立新的档案。与 --no-create 的效果一样。

f 不使用,是为了与其他 unix 系统的相容性而保留。

r 使用参考档的时间记录,与 --file 的效果一样。

d 设定时间与日期,可以使用各种不同的格式。

t 设定档案的时间记录,格式与 date 指令相同。

最简单的使用方式,将档案的时候记录改为现在的时间。若档案不存在,系统会建立一个新的档案。

将 file 的时间记录改为 5 月 6 日 18 点 3 分,公元两千年。时间的格式可以参考 date 指令,至少需输入 MMDDHHmm ,就是月日时与分。

说明:at 可以让使用者指定在 TIME 这个特定时刻执行某个程式或指令,TIME 的格式是 HH:MM其中的 HH 为小时,MM 为分钟,甚至你也可以指定 am, pm, midnight, noon, teatime(就是下午 4 点锺)等口语词。

如果想要指定超过一天内的时间,则可以用 MMDDYY 或者 MM/DD/YY 的格式,其中 MM 是分钟,DD 是第几日,YY 是指年份。另外,使用者甚至也可以使用像是 now + 时间间隔来弹性指定时间,其中的时间间隔可以是 minutes, hours, days, weeks?

另外,使用者也可指定 today 或 tomorrow 来表示今天或明天。当指定了时间并按下 enter 之后,at 会进入交谈模式并要求输入指令或程式,当你输入完后按下 ctrl+D 即可完成所有动作,至于执行的结果将会寄回你的帐号中。

-m:即使程式/指令执行完成后没有输出结果, 也要寄封信给使用者

-f file:读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入

-l:列出所有的指定 (使用者也可以直接使用 atq 而不用 at -l)

-d:删除指定 (使用者也可以直接使用 atrm 而不用 at -d)

-v:列出所有已经完成但尚未删除的指定

显示日历。若只有一个参数,则代表年份(1-9999),显示该年的年历。年份必须全部写出:``cal 89\ 将不会是显示 1989 年的年历。使用两个参数,则表示月份及年份。若没有参数则显示这个月的月历。

1752 年 9 月第 3 日起改用西洋新历,因这时大部份的国家都采用新历,有 10 天被去除,所以该月份的月历有些不同。在此之前为西洋旧历。

-m:以星期一为每周的第一天方式显示。

-j:以凯撒历显示,即以一月一日起的天数显示。

cal:显示本月的月历。

cal -m:以星期一为每周的第一天方式,显示本月的月历。

cal -jy:以一月一日起的天数显示今年的年历。

crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

-e:执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

-r:删除目前的时程表

-l:列出目前的时程表

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

每月每天每小时的第 0 分钟执行一次 /bin/ls:

当程式在你所指定的时间执行后,系统会寄一封信给你,显示该程式执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可。

date 可以用来显示或设定系统的日期与时间,在显示方面,使用者可以设定欲显示的格式,格式设定为一个加号后接数个标记,其中可用的标记列表如下:

%T:直接显示时间 (24 小时制)

%c:直接显示日期与时间

%U:一年中的第几周 (0053) (以 Sunday 为一周的第一天的情形)

%w:一周中的第几天 (06)

%W:一年中的第几周 (0053) (以 Monday 为一周的第一天的情形)

%y:年份的最后两位数字 (00.99)

若是不以加号作为开头,则表示要设定时间,而时间格式为 MMDDhhmm[[CC]YY][.ss],其中 MM 为月份,DD 为日,hh 为小时,mm 为分钟,CC 为年份前两位数字,YY 为年份后两位数字,ss 为秒数

-u:显示目前的格林威治时间

显示时间后跳行,再显示目前日期:

显示日期与设定时间(12:34:56):

当你不希望出现无意义的 0 时(比如说 ),则可以在标记中插入 - 符号,比如说 date +%-H:%-M:%-S 会把时分秒中无意义的 0 给去掉,像是原本的 08:09:04 会变为 8:9:4.另外,只有取得权限者(比如说 root)才能设定系统时间。

当你以 root 身分更改了系统时间之后,请记得以 clock -w 来将系统时间写入 CMOS 中,这样下次重新开机时系统时间才会持续抱持最新的正确值。

说明:sleep 可以用来将目前动作延迟一段时间

其中 s 为秒,m 为 分钟,h 为小时,d 为日数

显示目前时间后延迟 1 分钟,之后再次显示时间:

使用权限: 所有使用者

time 指令的用途,在于量测特定指令执行时所需消耗的时间及系统资源等资讯。例如 时间,记忆体,输入输出等等。需要特别注意的是,部分资讯在 Linux 上显示不出来。这是因为在 Linux 上部分资源的分配函式与 time 指令所预设的方式并不相同,以致于 time 指令无法取得这些资料。

设定结果输出档。这个选项会将 time 的输出写入 所指定的档案中。如果档案已经存在,系统将覆写其内容。

配合 -o 使用,会将结果写到档案的末端,而不会覆盖掉原来的内容。

以 FORMAT 字串设定显示方式。当这个选项没有被设定的时候,会用系统预设的格式。不过你可以用环境变数 time 来设定这个格式,如此一来就不必每次登入系统都要设定一次。

表示换行。每一项资料要用 % 做为前导。如果要在字串中使用百分比符号,就用。(学过C语言的人大概会觉得很熟悉)

time 指令可以显示的资源有四大项,分别是:

E 执行指令所花费的时间,格式是:[hour]:minute:second.请注意这个数字并不代表实际的 CPU 时间。

e 执行指令所花费的时间,单位是秒。请注意这个数字并不代表实际的 CPU 时间。

S 指令执行时在核心模式(kernel mode)所花费的时间,单位是秒。

U 指令执行时在使用者模式(user mode)所花费的时间,单位是秒。

P 执行指令时 CPU 的占用比例。其实这个数字就是核心模式加上使用者模式的 CPU 时间除以总时间。

M 执行时所占用的实体记忆体的最大值。单位是 KB

t 执行时所占用的实体记忆体的平均值,单位是 KB

K 执行程序所占用的记忆体总量(stack+data+text)的平均大小,单位是 KB

p 执行程序的自有堆叠(unshared stack)的平均大小,单位是 KB

X 执行程序间共享内容(shared text)的平均值,单位是 KB

Z 系统记忆体页的大小,单位是 byte.对同一个系统来说这是个常数

F 此程序的主要记忆体页错误发生次数。所谓的主要记忆体页错误是指某一记忆体页已经置换到置换档(swap file)中,而且已经分配给其他程序。此时该页的内容必须从置换档里再读出来。

R 此程序的次要记忆体页错误发生次数。所谓的次要记忆体页错误是指某一记忆体页虽然已经置换到置换档中,但尚未分配给其他程序。此时该页的内容并未被破坏,不必从置换档里读出来

W 此程序被交换到置换档的次数

c 此程序被强迫中断(像是分配到的 CPU 时间耗尽)的次数

w 此程序自愿中断(像是在等待某一个 I/O 执行完毕,像是磁碟读取等等)的次数

I 此程序所输入的档案数

O 此程序所输出的档案数

k 此程序所收到的信号 ( Signal )数量

C 执行时的参数以及指令名称

这个选项会自动把显示格式设定成为:

这么做的目的是为了与 POSIX 规格相容。

这个选项会把所有程式中用到的资源通通列出来,不但如一般英文语句,还有说明。对不想花时间去熟习格式设定或是刚刚开始接触这个指令的人相当有用。

我们可以获得执行 ps -aux 的结果和所花费的系统资源。如下面所列的资料:

使用权限: 所有使用者

说明: uptime 提供使用者下面的资讯,不需其他参数:

系统开机运转到现在经过的时间

最近一分钟,五分钟和十五分钟的系统负载

参数: -V 显示版本资讯。

说明:更改使用者 shell 设定

使用权限: 所有使用者

说明:finger 可以让使用者查询一些其他使用者的资料。会列出来的资料有:

单行显示。这个选项只显示登入名称,真实姓名,终端机名称,闲置时间,登入时间,办公室号码及电话号码。如果所查询的使用者是远端伺服器的使用者,这个选项无效。

范例:下列指令可以查询本机管理员的资料:

说明:显示系统开机以来获是从每月初登入者的讯息

tty 限制登入讯息包含终端机代号

这个命令都不会就不要干算了!呵呵我也不在这里多费笔墨耽误大家美好青春了^_^

说明:用来更改使用者的密码

-d 关闭使用者的密码认证功能, 使用者在登入时将可以不用输入密码, 只有具备 root 权限的使用者方可使用。

-S 显示指定使用者的密码认证种类, 只有具备 root 权限的使用者方可使用。

使用权线:所有使用者都可使用

说明:显示系统中有那些使用者正在上面,显示的资料包含了使用者 ID,使用的终端机,从那边连上来的,上线时间,呆滞时间,CPU 使用量,动作等等。

-u:不要显示使用者的动作/工作

-s:使用简短的格式来显示

-f:不要显示使用者的上线位置

senil 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时,它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能,在 mailinglist 中,我们可能会创造一个叫

下面命令会做相同的事,

mail 不仅只是一个指令, mail 还是一个电子邮件程式,不过利用 mail 来读信的人应该很少吧!对于系统管理者来说 mail 就很有用,因为管理者可以用 mail 写成 script ,定期寄一些备忘录提醒系统的使用者。

v 列印出讯息,例如送信的地点,状态等等。 (verbose)

将信件送给一个或以上的电子邮件地址,由于没有加入其他的选项,使用者必须输入标题与信件的内容等。而 user2 没有主机位置,就会送给邮件伺服器的 user2 使用者。

说明 : 决定是否允许其他人传讯息到自己的终端机介面

y:允许讯息传到终端机介面上。

n:不允许讯息传到终端机介面上 .

如果没有设定,则讯息传递与否则由终端机界面目前状态而定。

改变目前讯息设定,改成不允许讯息传到终端机介面上:

sendmail 会使用一个在 /etc/aliases 中的档案做使用者名称转换的动作。当 sendmail 收到一个要送给 xxx 的信时,它会依据 aliases档的内容送给另一个使用者。这个功能可以创造一个只有在信件系统内才有效的使用者。例如 mailing list 就会用到这个功能,在 mailinglist 中,我们可能会创造一个叫

参数:没有任何参数。 范例:

下面命令会做相同的事,

说明:与其他使用者对谈

person:预备对谈的使用者帐号,如果该使用者在其他机器上,则可输入 person@machine.name

ttyname:如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息

与现在机器上的使用者Rollaend对谈,此时 Rollaend 只有一个连线:

注意:若萤幕的字会出现不正常的字元,试着按 ctrl+l 更新萤幕画面。

wall 会将讯息传给每一个 mesg 设定为 yes 的上线使用者。当使用终端机介面做为标准传入时, 讯息结束时需加上 EOF (通常用 Ctrl+D)?

传讯息"hi" 给每一个使用者:

说明:传讯息给其他使用者

user:预备传讯息的使用者帐号

ttyname:如果使用者同时有两个以上的 tty 连线,可以自行选择合适的 tty 传讯息

接下来就是将讯息打上去,结束请按 ctrl+c

接下来就是将讯息打上去,结束请按 ctrl+c

注意:若对方设定 mesg n,则此时讯席将无法传给对方

说明:kill 送出一个特定的信号 (signal) 给行程 id 为 pid 的行程根据该信号而做特定的动作, 若没有指定, 预设是送出终止 (TERM) 的信号

-l (signal):列出所有可用的信号名称

说明:以更改过的优先序来执行程式, 如果未指定程式, 则会印出目前的排程优先序, 内定的 adjustment 为 10, 范围为 -20 (最高优先序) 到 19 (最低优先序)

将 ls 的优先序加 1 并执行:

将 ls 的优先序加 10 并执行:

注意:优先序 (priority) 为作业系统用来决定 CPU 分配的参数,Linux 使用『回合制(round-robin)』的演算法来做 CPU 排程,优先序越高,所可能获得的 CPU时间就越多。

说明:显示瞬间行程 (process) 的动态

ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

-w 显示加宽可以显示较多的资讯

-au 显示较详细的资讯

-aux 显示所有包含其他使用者的行程

au(x) 输出格式:

%MEM: 占用的记忆体使用率

VSZ: 占用的虚拟记忆体大小

RSS: 占用的记忆体大小

STAT: 该行程的状态:

D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)

Z: 不存在但暂时无法消除

W: 没有足够的记忆体分页可分配

<: 高优先序的行程

L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O)

说明:将所有行程以树状图显示, 树状图将会以 pid (如果有指定) 或是以 init 这个基本行程为根 (root) ,如果有指定使用者 id , 则树状图会只显示该使用者所拥有的行程

-a 显示该行程的完整指令及参数, 如果是被记忆体置换出去的行程则会加上括号

-c 如果有重覆的行程名, 则分开列出 (预设值是会在前面加上 *

说明:重新指定一个或多个行程(Process)的优先序(一个或多个将根据所下的参数而定)

-u user 重新指定行程拥有者为 user 的行程的优先序

注意:每一个行程(Process)都有一个唯一的 (unique) id?

说明:即时显示 process 的动态

q:没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行

c:切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S:累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来

s:安全模式,将交谈式指令取消, 避免潜在的危机

i:不显示任何闲置 (idle) 或无用 (zombie) 的行程

n:更新的次数,完成后将会退出 top

b:批次档模式,搭配 "n" 参数一起使用,可以用来将 top 的结果输出到档案内

显示更新十次后退出 ;

使用者将不能利用交谈式指令来对行程下命令:

将更新显示二次的结果输入到名称为 top.log 的档案里:

-f 快速模式/尚未完成

-i 互动模式/ 每个动作将要被确认

-v 详细输出/ 列出所选择程序的资讯

-w 智能警告讯息/ 尚未完成

-n 没有动作/ 显示程序代号

参数:选择程序的规则可以是, 终端机代号,使用者名称,程序代号,命令名称。

-c 命令名称 可使用的讯号:

以下列出已知的讯号名称,讯号代号,功能。

名称 (代号) 功能/ 描述

TSTP 停止 /产生与内容相关的行为

TTIN 停止 /产生与内容相关的行为

TTOU 停止 /产生与内容相关的行为

CONT 从新启动 /如果在停止状态则从新启动,否则忽略

PWR 忽略 /在某些系统中会离开

SYS 核心 /或许尚未实作

EMT 核心 /或许尚未实作

停止所有在 PTY 装置上的程序

其他相关的命令: kill

### 从位置处抓取字串

### 1.比方说要把目录下所有的大写档名换为小写档名?

似乎有很多方式,"tr"是其中一种:

### 3.去掉不想要的字串

reset 其实和 tset 是一同个命令,它的用途是设定终端机的状态。一般而言,这个命令会自动的从环境变数,命令列或是其它的组态档决定目前终端机的型态。如果指定型态是 ? 的话,这个程式会要求使用者输入终端机的型别。

由于这个程式会将终端机设回原始的状态,除了在 login 时使用外,当系统终端机因为程式不正常执行而进入一些奇怪的状态时,你也可以用它来重设终端机o 例如不小心把二进位档用 cat 指令进到终端机,常会有终端机不再回应键盘输入,或是回应一些奇怪字元的问题。此时就可以用 reset 将终端机回复至原始状态。选项说明:

将终端机类别显示在萤幕上,但不做设定的动作。这个命令可以用来取得目前终端机的类别。

将删除一行的字元设成 ch

不要做设定的动作,如果没有使用选项 -Q 的话,erase,中断及删除字元的目前值依然会送到萤幕上。

不要显示 erase,中断及删除字元的值到萤幕上。

将终端机类别印在萤幕上。

将设定 TERM 用的命令用字串的型式送到终端机中,通常在 .login 或 .profile 中用

让使用者输入一个终端机型别并将终端机设到该型别的预设状态。

将设定用的字串显示在萤幕上

compress 是一个相当古老的 unix 档案压缩指令,压缩后的档案会加上一个 .Z 延伸档名以区别未压缩的档案,压缩后的档案可以以 uncompress 解压。若要将数个档案压成一个压缩档,必须先将档案 tar 起来再压缩。由于 gzip 可以产生更理想的压缩比例,一般人多已改用 gzip 为档案压缩工具。

c 输出结果至标准输出设备(一般指荧幕)

f 强迫写入档案,若目的档已经存在,则会被覆盖 (force)

v 将程式执行的讯息印在荧幕上 (verbose)

b 设定共同字串数的上限,以位元计算,可以设定的值为 9 至 16 bits .由于值越大,能使用的共同字串就 越多,压缩比例就越大,所以一般使用预设值 16 bits (bits)

将压缩后的资料输出后再导入 target.dat.Z 可以改变压缩档名。

-b 的值越大,压缩比例就越大,范围是 9-16 ,预设值是 16 .

使用权限: 所有使用者

lpd 是一个常驻的印表机管理程式,它会根据 /etc/printcap 的内容来管理本地或远端的印表机。/etc/printcap 中定义的每一个印表机必须在 /var/lpd 中有一个相对应的目录,目录中以 cf 开头的档案表示一个等待送到适当装置的印表工作。这个档案通常是由 lpr 所产生。

lpr 和 lpd 组成了一个可以离线工作的系统,当你使用 lpr 时,印表机不需要能立即可用,甚至不用存在。lpd 会自动监视印表机的状况,当印表机上线后,便立即将档案送交处理。这个得所有的应用程式不必等待印表机完成前一工作。

-l: 将一些除错讯息显示在标准输出上。

这个程式通常是由 /etc/rc.d 中的程式在系统启始阶段执行。

-- 显示列表机贮列中未完成的工作 用法

lpq 会显示由 lpd 所管理的列表机贮列中未完成的项目。

范例 1. 显示所有在 lp 列表机贮列中的工作

使用权限: 所有使用者

将档案或是由标准输入送进来的资料送到印表机贮列之中,印表机管理程式 lpd 会在稍后将这个档案送给适当的程式或装置处理。lpr 可以用来将料资送给本地或是远端的主机来处理。参数:

-- 将一个工作由印表机贮列中移除 用法

尚未完成的印表机工作会被放在印表机贮列之中,这个命令可用来将常未送到印表机的工作取消。由于每一个印表机都有一个独立的贮列,你可以用 -P 这个命令设定想要作用的印列机。如果没有设定的话,会使用系统预设的印表机。

这个命令会检查使用者是否有足够的权限删除指定的档案,一般而言,只有档案的拥有者或是系统管理员才有这个权限。

将第 1011 号工作由预设印表机中移除

使用权限: 所有使用者

对指定的软碟机装置进行低阶格式化。使用这个指令对软碟格式化的时候,最好指定像是下面的装置:

如果使用像是 /dev/fd0 之类的装置,如果里面的磁碟不是标准容量,格式化可能会失败。在这种情况之下,使用者可以用 setfdprm 指令先行指定必要参数。

-n 关闭确认功能。这个选项会关闭格式化之后的确认步骤。

将磁碟机 A 的磁片格式化成 1.4MB 的磁片。并且省略确认的步骤。

使用权限: 所有使用者

在已经做过低阶格式化的磁片上建立 DOS 档案系统。如果在编译 mtools 的时候把 USE_2M 的参数打开,部分与 2M 格式相关的参数就会发生作用。否则这些参数(像是 S,2,1,M)不会发生作用。

-s 每一磁轨的磁区数

-F 将磁碟格式化为 FAT32 格式,不过这个参数还在实验中。

-I 设定 FAT32 中的版本号。这当然也还在实验中。

-S 磁区大小代码,计算方式为 sector = 2^(大小代码+7)

-c 磁丛(cluster)的磁区数。如果所给定的数字会导致磁丛数超过 FAT 表的限制,mformat 会自动放大磁区数。

-M 软体磁区大小。这个数字就是系统回报的磁区大小。通常是和实际的大小相同。

-a 如果加上这个参数,mformat 会产生一组 Atari 系统的序号给这块软碟。

-X 将软碟格式化成 XDF 格式。使用前必须先用 xdfcopy 指令对软碟作低阶格式化的动作。

-C 产生一个可以安装 MS-DOS 档案系统的磁碟影像档(disk image)。当然对一个实体磁碟机下这个参数是没有意义的。

-H 隐藏磁区的数目。这通常适用在格式化硬碟的分割区时,因为通常一个分割区的前面还有分割表。这个参数未经测试,能不用就不用。

-r 根目录的大小,单位是磁区数。这个参数只对 FAT12 和 FAT16 有效。

-B 使用所指定的档案或是设备的开机磁区做为这片磁片或分割区的开机磁区。当然当中的硬体参数会随之更动。

-k 尽量保持原有的开机磁区。

-0 第 0 轨的资料传输率

-A 第 0 轨以外的资料传输率

这样会用预设值把 a: (就是 /dev/fd0)里的磁碟片格式化。

使用权限: 所有使用者

说明: 建立 DOS 档案系统。 device 指你想要建立 DOS 档案系统的装置代号。像是 /dev/hda1 等等。 block_count 则是你希望配置的区块数。如果 block_count 没有指定则系统会自动替你计算符合该装置大小的区块数。

-c 建立档案系统之前先检查是否有坏轨。

-l 从得定的档案中读取坏轨记录。

-F 指定 FAT 表的大小,通常是 12 或是 16 个位元组。12 位元组通常用于磁碟片,16 位元组用于一般硬碟的分割区,也就是所谓的 FAT16 格式。这个值通常系统会自己选定适当的值。在磁碟片上用 FAT16 通常不会发生作用,反之在硬碟上用 FAT12 亦然。

-i 指定 Volume ID.一般是一个 4 个位元组的数字,像是 2e203a47 .如果不给系统会自己产生。

-m 当使用者试图用这片磁片或是分割区开机,而上面没有作业系统时,系统会给使用者一段警告讯息。这个参数就是用来变更这个讯息的。你可以先用档案编辑好,然后用这个参数指定,或是用

这样系统会要求你直接输入这段文字。要特别注意的是,档案里的字串长度不要超过 418 个字,包括展开的跳栏符号(TAB)和换行符号(换行符号在 DOS 底下算两个字元!)

-n 指定 Volume Name,就是磁碟标签。如同在 DOS 底下的 format 指令一样,给不给都可以。没有预设值。

-r 指定根目录底下的最大档案数。这里所谓的档案数包括目录。预设值是在软碟上是 112 或是 224 ,在硬碟上是 512.没事不要改这个数字。

-s 每一个磁丛(cluster)的磁区数。必须是 2 的次方数。不过除非你知道你在作什么,这个值不要乱给。

Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意义的,您不是第一个为此困惑的人,当然,也不会是最后一个:)

如果您喜欢撒哈拉,喜欢它令人窒息的温柔、梦幻般的寂寥还有张扬恣肆的旷远,您大可在第一个 u,后面带些嗡嗡声: oom-boon-too。

Ubuntu的中文发音大约为: 乌班图

Ubuntu这个单词源自非洲,意谓“班图精神”────谁都不是一座孤岛,自成一体。每个人都包孕于人类,因他人存在而存在,因他人幸福而幸福。

Linux中没有注册表这个概念。安装软件,理论上讲,只要拷贝所有相关文件,并运行它的主程序就可以了。

按照传统,一个软件通常分别拷贝到同级目录下的 bin、etc、lib、share等文件夹。

Share        程序运行所需要的其它资源,例如图标、文本。这部分文件是专有的,不需要共享;而且目录结构相对复杂,混放在一起比较混乱,所以单独存放。

还有一些软件,占用一个单独的目录,所有的资源都在这个目录中。类似于Windows下的绿色软件,不推荐在Linux系统下这样作。

* 执行时,系统找不到可执行文件(搜索所有路径,资源开销过大,是不现实的),需要定位其位置,像这样 /home/user/bin/可执行文件 ,不够方便。

* 许多系统软件需要协作运行,配置文件分别保存,定位它们非常麻烦

* 如果程序使用的库文件,像图形库文件,都单独存放,那么磁盘空间的浪费会非常严重。

有一些大型软件,或者您布署的重要应用,您可以将它们单独安装在一个文件夹下。(通常源码安装支持这种方式,将在 软件安装 部分介绍)

Linux下没有类似 注册表 的系统,系统和软件都可以通过纯文本的配置文件进行设置。

事实上,图形界面的配置工具,通常就是以图形界面的方式修改配置文件,适合设置一些比较简单的程序。如果软件有几千个可以配置的选项,全部作成菜单,想象一下……开始发抖吧……

图形界面的配置工具,可以看作特定配置文件专用编辑器。您一样可以使用通用文本编辑器来编辑配置文件,比如 Nano、Gedit、Knote、Vim或者Emacs等等。不考虑阅读、修改配置文本占用的时间,直接修改配置文件甚至更迅速。

如果只是要修改某一常用选项,而且时常修改,比如主机的IP地址。使用文本编辑器,您要找到相应的配置文件,还要在配置文件中找到相应的选项,会浪费掉您的时间和耐性。

图形配置工具经常会受各种因素制约,比如网络服务器中不提供图形服务,图形界面不够稳定……这时,您可以使用命令行的配置工具来完成这些工作。

例如: 修改主机IP地址,可以使用ifconfig这个程序,执行下面的命令:

;———————————-使用 ; 将多个命令连结起来,则表示任务按顺序执行

&&——————————使用 && 将多个命令连结起来,则表示只有前面的命令执行成功,后面的命令才能得以执行

“———————————–`<命令>` ,如果一个命令中包含以 “ (Esc键下方的按键)括起来的子命令,那么子命令将被优先执行,执行结果被代入上一级命令继续执行,例如创建一个以当前时间命名的文件:

APT系统主要包括 apt-get 和 apt-cache 等命令。通常是复合命令,包含若干个子命令。

说明:建议您经常使用 sudo apt-get update 命令来更新您的软件信息数据库

由于各种意外,APT系统可能会出现问题,使用如下命令,尝试进行修复:apt-get -f install

对于绝大多数软件,我们建议您使用APT系统来安装它。在少数情况下,例如某软件没有以deb包的格式发布,或者需要定制适合自己的软件,您可以通过编译源代码的方式安装它。

首先需要下载软件的源码包,并且将它解包为一些源代码文件。并了便于管理,建议将下载的源码包移动到 /usr/local/src/ 目录下,并在这里解包。

2、Firefox根据预设动作,将这些消息识别为 “打开链接 ”

3、Firefox向域名服务器请求 链接 “”。域名服务器将这个请求转换为 “/” 和 IP地址/”显示在地址栏(向Xserver发送请求,在地址栏位置显示这个地址)

5、Firefox向地址 ”,具体内容如下:

输入焦点在地址栏的范围内,“”,回车

Xserver并不能直接判断焦点,而是这样:

1、Xserver向WM发送位置和点击的信息,WM根据当前的“焦点策略”确定激活(最上层)的窗口为Firefox

2、Xserver将Firefox显示在最上层,高亮显示它的标题栏

4、Firefox判断当前焦点后,显示一个闪动的文字输入光标

那么,“窗口管理器”到底能作些什么呢?其实它所作的一切都是管理窗口。例如:

上看到一套欧洲某天文台的天文学软件,只有Linux版!

当然了,Linux下功能强大的软件大多是命令行的,图形界面的程序只能视觉上强大,外强中干!建议您多使用man这个命令来查询各类软件的使用方法,它排版美观,格式工整,语法简明,意韵流畅,实在是学习英语难得的教材。

如果您指的是系统的美观程度。Gnome默认效果我认为与Windows处于同一水平线,而KDE的效果就要略好一点,很多高手用FVWM可以作出让人眼花瞭乱的效果来……而Novell的XGL,更是可以用“惊艳”来形容。

如果您指的是操作,这属于“易于上手难于精通”与“难于上手易于精通”两种理念的冲撞。

当然了,我指的精通主要针对效率而言。如果您经常玩Blizzard出品的游戏,您对于“易于上手难于精通”这种理念或许相当了解,甚至非常欣赏。

不过这一理念只适用于竞技游戏!竞技游戏要球能够吸引大量的玩家,所以要易于上手。但是竞技游戏是为竞技而生的,所以不可能人人是高手 ────事实上高手只是一小部分人!

而操作系统是给人们来用的,最好人人都成为高手,所以易于精通是很重要的……当然最好也能够易于上手。但是考虑到效率的问题,这很难解决……

Linux怎么占用这么多内存?

Linux会最大程度的利用物理内存,避免使用交换空间;而不是尽量的回收内存,使用页面文件。

又因为Linux系统的内存管理非常优秀,程序退出时可以高效的回收内存,所以更加没有必要在程序运行时就回收内存!

因此,Linux系统表面看来内存开销很大,实际上系统运行是很稳定的──Linux不会时而流畅,时而瘫痪。事实上,在正常情况下,它运行是非常流畅的。

  正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。

  许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

  正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

  正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符串。 [1] 

  正则表达式的“鼻祖”或许可一直追溯到科学家对人类神经系统工作原理的早期研究。美国新泽西州的Warren McCulloch和出生在美国底特律的Walter Pitts这两位神经生理方面的科学家,研究出了一种用数学方式来描述神经网络的新方法,他们创造性地将神经系统中的神经元描述成了小而简单的自动控制元,从而作出了一项伟大的工作革新。

在1951 年,一位名叫Stephen Kleene的数学科学家,他在Warren McCulloch和Walter Pitts早期工作的基础之上,发表了一篇题目是《神经网事件的表示法》的论文,利用称之为正则集合的数学符号来描述此模型,引入了正则表达式的概念。正则表达式被作为用来描述其称之为“正则集的代数”的一种表达式,因而采用了“正则表达式”这个术语。

之后一段时间,人们发现可以将这一工作成果应用于其他方面。Ken Thompson就把这一成果应用于计算搜索算法的一些早期研究,Ken Thompson是 Unix的主要发明人,也就是大名鼎鼎的Unix之父。Unix之父将此符号系统引入编辑器QED,然后是Unix上的编辑器ed,并最终引入grep。Jeffrey Friedl 在其著作《Mastering Regular Expressions (2nd edition)》(中文版译作:精通正则表达式,已出到第三版)中对此作了进一步阐述讲解,如果你希望更多了解正则表达式理论和历史,推荐你看看这本书。

Hazel开发的、为很多现代工具所使用的库。正则表达式的第一个实用应用程序即为Unix中的 qed 编辑器。

  然后,正则表达式在各种计算机语言或各种应用领域得到了广大的应用和发展,演变成为计算机技术森林中的一只形神美丽且声音动听的百灵鸟。

以上是关于正则表达式的起源和发展的历史描述,如今正则表达式在基于文本的编辑器和搜索工具中依然占据着一个非常重要的地位。

在最近的六十年中,正则表达式逐渐从模糊而深奥的数学概念,发展成为在计算机各类工具和软件包应用中的主要功能。不仅仅众多UNIX工具支持正则表达式,近二十年来,在WINDOWS的阵营下,正则表达式的思想和应用在大部分 Windows 开发者工具包中得到支持和嵌入应用!从正则式在Microsoft Visual Basic 6 或 Microsoft VBScript到.NET Framework中的探索和发展,WINDOWS系列产品对正则表达式的支持发展到无与伦比的高度,几乎所有 Microsoft 开发者和所有.NET语言都可以使用正则表达式。如果你是一位接触计算机语言的工作者,那么你会在主流操作系统(*nix[Linux,

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:

举例简单说明NFA与DFA工作的区别:

比如有字符串this is yansen’s blog,正则表达式为 /ya(msen|nsen|nsem)/ (不要在乎表达式怎么样,这里只是为了说明引擎间的工作区别)。 NFA工作方式如下,先在字符串中查找 y 然后匹配其后是否为 a ,如果是 a 则继续,查找其后是否为 m 如果不是则匹配其后是否为 n (此时淘汰msen选择支)。然后继续看其后是否依次为 s,e,接着测试是否为 n ,是 n 则匹配成功,不是则测试是否为 m 。为什么是 m ?因为 NFA 工作方式是以正则表达式为标准,反复测试字符串,这样同样一个字符串有可能被反复测试了很多次!

而DFA则不是如此,DFA会从 this 中 t 开始依次查找 y,定位到 y ,已知其后为 a ,则查看表达式是否有 a ,此处正好有 a 。然后字符串 a 后为 n ,DFA依次测试表达式,此时 msen 不符合要求淘汰。nsen 和 nsem 符合要求,然后DFA依次检查字符串,检测到sen 中的 n 时只有nsen 分支符合,则匹配成功!

由此可以看出来,两种引擎的工作方式完全不同,一个(NFA)以表达式为主导,一个(DFA)以文本为主导!一般而论,DFA引擎则搜索更快一些!但是NFA以表达式为主导,反而更容易操纵,因此一般程序员更偏爱NFA引擎! 两种引擎各有所长,而真正的引用则取决与你的需要以及所使用的语言!

(摘自《正则表达式之道》)

正则表达式 [2]  由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我们下面会给予解释。

在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"testing123"等字符串,但是不能匹配"Testing"。

要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。

将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。

匹配输入字行首。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。

匹配输入行尾。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。

匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。*等价于{0,}。

匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。

匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”。?等价于{0,1}。

n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。

n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。

mn均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o为一组,后三个o为一组。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。

当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少地匹配所搜索的字符串,而默认的贪婪模式则尽可能多地匹配所搜索的字符串。例如,对于字符串“oooo”,“o+”将尽可能多地匹配“o”,得到结果[“oooo”],而“o+?”将尽可能少地匹配“o”,得到结果

匹配除“\n”和"\r"之外的任何单个字符。要匹配包括“\n”和"\r"在内的任何字符,请使用像“[\s\S]”的模式。

匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“\(”或“\)”。

非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分时很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。

非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。

非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。

非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。这个地方不正确,有问题

匹配x或y。例如,“z|food”能匹配“z”或“food”(此处请谨慎)。“[zf]ood”则匹配“zood”或“food”。

字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。

负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。

字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。

注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.

负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

匹配一个单词的边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;“\b1_”可以匹配“1_23”中的“1_”,但不能匹配“21_3”中的“1_”。

匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。

匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。

匹配一个数字字符。等价于[0-9]。grep 要加上-P,perl正则支持

匹配一个非数字字符。等价于[^0-9]。grep要加上-P,perl正则支持

匹配一个换页符。等价于\x0c和\cL。

匹配一个换行符。等价于\x0a和\cJ。

匹配一个回车符。等价于\x0d和\cM。

匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。

匹配一个制表符。等价于\x09和\cI。

匹配一个垂直制表符。等价于\x0b和\cK。

匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。

匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。

匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。

匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。

标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。

标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若nm均为八进制数字(0-7),则\nm将匹配八进制转义值nm

如果n为八进制数字(0-7),且ml均为八进制数字(0-7),则匹配八进制转义值nml

匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(&copy;)。

小写 p 是 property 的意思,表示 Unicode 属性,用于 Unicode 正表达式的前缀。中括号内的“P”表示Unicode 字符集七个字符属性之一:标点字符。

M:标记符号(一般不会单独出现);

Z:分隔符(比如空格、换行等);

S:符号(比如数学符号、货币符号等);

N:数字(比如阿拉伯数字、罗马数字等);

*注:此语法部分语言不支持,例:javascript。

匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。
将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。

最简单的元字符是点,它能够匹配任何单个字符(注意不包括换行符)。假定有个文件test.txt包含以下几行内容:

我们可以使用grep命令来测试我们的正则表达式,grep命令使用正则表达式去尝试匹配指定文件的每一行,并将至少有一处匹配表达式的所有行显示出来。命令

在test.txt文件中的每一行中搜索正则表达式r.t,并打印输出匹配的行。正则表达式r.t匹配一个r接着任何一个字符再接着一个t。所以它将匹配文件中的rat和rut,而不能匹配Rotten中的Rot,因为正则表达式是大小写敏感的。要想同时匹配大写和小写字母,应该使用字符区间元字符(方括号)。正则表达式[Rr]能够同时匹配R和r。所以,要想匹配一个大写或者小写的r接着任何一个字符再接着一个t就要使用这个表达式:[Rr].t。

要想匹配行首的字符要使用抑扬字符(^)——有时也被叫做插入符。例如,想找到text.txt中行首"he"打头的行,你可能会先用简单表达式he,但是这会匹配第三行的the,所以要使用正则表达式^he,它只匹配在行首出现的he。

有时候指定“除了×××都匹配”会比较容易达到目的,当抑扬字符(^)出方括号中时,它表示“排除”,例如要匹配he ,但是排除前面是t or s的情形(也就是the和she),可以使用:[^st]he。

可以使用方括号来指定多个字符区间。例如正则表达式[A-Za-z]匹配任何字母,包括大写和小写的;正则表达式[A-Za-z][A-Za-z]* 匹配一个字母后面接着0或者多个字母(大写或者小写)。当然我们也可以用元字符+做到同样的事情,也就是:[A-Za-z]+ ,和[A-Za-z][A-Za-z]*完全等价。但是要注意元字符+ 并不是所有支持正则表达式的程序都支持的。关于这一点可以参考后面的正则表达式语法支持情况。

要指定特定数量的匹配,要使用大括号(注意并不是所有扩展正则表达式的实现都支持大括号。此外,根据具体的实现,您可能需要先使用反斜杠对其进行转义。)。想匹配所有10和100的实例而排除1和 1000,可以使用:10\{1,2\} 或 10{1, 2},这个正则表达式匹配数字1后面跟着1或者2个0的模式。在这个元字符的使用中一个有用的变化是忽略第二个数字,例如正则表达式0\{3,\} 或 0{3,} 将匹配至少3个连续的0。

将所有方法foo(a,b,c)的实例改为foo(b,a,c)。这里a、b和c可以是任何提供给方法foo()的参数。也就是说我们要实现这样的转换:

下面这条替换命令能够实现这一方法:

让我们把它打散来加以分析。写出这个表达式的基本思路是找出foo()和它的括号中的三个参数的位置。第一个参数是用这个表达式来识别的::([^,]*),我们可以从里向外来分析它:

[^,] 除了逗号之外的任何字符

[^,]* 0或者多个非逗号字符

([^,]*) 将这些非逗号字符标记为\1,这样可以在之后的替换模式表达式中引用它

([^,]*), 我们必须找到0或者多个非逗号字符后面跟着一个逗号,并且非逗号字符那部分要标记出来以备后用。

正是指出一个使用正则表达式常见错误的最佳时机。为什么我们要使用[^,]*这样的一个表达式,而不是更加简单直接的写法,例如:.*,来匹配第一个参数呢?设想我们使用模式.*来匹配字符串"10,7,2",它应该匹配"10,"还是"10,7,"?为了解决这个两义性(ambiguity),正则表达式规定一律按照最长的串来,在上面的例子中就是"10,7,",显然这样就找出了两个参数而不是我们期望的一个。所以,我们要使用[^,]*来强制取出第一个逗号之前的部分。

这个表达式我们已经分析到了:foo\(([^,]*),这一段可以简单的翻译为“当你找到foo(就把其后直到第一个逗号之前的部分标记为\1”。然后我们使用同样的办法标记第二个参数为\2。对第三个参数的标记方法也是一样,只是我们要搜索所有的字符直到右括号。我们并没有必要去搜索第三个参数,因为我们不需要调整它的位置,但是这样的模式能够保证我们只去替换那些有三个参数的foo()方法调用,在foo()是一个重载(overloading)方法时这种明确的模式往往是比较保险的。然后,在替换部分,我们找到foo()的对应实例,然后利用标记好的部分进行替换,是把第一和第二个参数交换位置。

正则表达式语法支持情况

awk是支持该语法的,只是要在命令

四个字符是所有语言都支持的正则表达式,所以这四个是基础的正则表达式。正则难理解因为里面有一个等价的概念,这个概念大大增加了理解难度,让很多初学者看起来会懵,如果把等价都恢复成原始写法,自己书写正则就超级简单了,就像说话一样去写你的正则了:

  等价是等同于的意思,表示同样的功能,用不同符号来书写。

  ?等价于匹配长度{0,1}  *等价于匹配长度{0,}   +等价于匹配长度{1,}  \d等价于[0-9]

  常用运算符与表达式:

  ^ 开始  () 域段  [] 包含,默认是一个字符长度  [^] 不包含,默认是一个字符长度  {n,m} 匹配长度   . 任何单个字符(\.

这些都是简写的,完全可以用[]和{}代替,在(?:)(?=)(?!)(?<=)(?<!)(?i)(*?)(+?)这种特殊组合情况下除外。  初学者可以忽略?,*,+,\d,\w一些简写标示符,学会了基础使用再按表自己去等价替换

【1】 正则表达式应用——替换指定内容到行尾

【2】 正则表达式应用——数字替换

【3】 正则表达式应用——删除每一行行尾的指定字符

【4】 正则表达式应用——替换带有半角括号的多行

【5】 正则表达式应用——删除空行

【6】 正则表达式应用——实例应用

【1】正则表达式应用——替换指定内容到行尾

希望每次遇到“abc”,则替换“abc”以及其后到行尾的内容为“abc efg”

即上面的文本最终替换为:

① 在替换对话框,查找内容里输入“abc.*”,替换内容输入为“abc efg”

② 同时勾选“正则表达式”复选框,然后点击“全部替换”按钮

其中,符号的含义如下:

“.” =匹配任意字符

“*” =匹配0次或更多

注意:其实就是正则表达式替换,这里只是把一些曾经提出的问题加以整理,单纯从正则表达式本身来说,就可以引申出成千上万种特例。

【2】正则表达式应用——数字替换

在替换对话框里面,勾选“正则表达式”复选框;

“替换为:”里面输入“[\1\2\3]”,不含引号

范围为你所操作的范围,然后选择替换即可。

实际上这也是正则表达式的使用特例,“[0-9]”表示匹配0~9之间的任何特例,同样“[a-z]”就表示匹配a~z之间的任何特例

上面重复使用了“[0-9]”,表示连续出现的三个数字

括号用来选择原型,进行分组,替换时要用

“\1”代表第一个“[0-9]”对应的原型,“\2”代表第二个“[0-9]”对应的原型,依此类推

“[”|“]”为单纯的字符,表示添加“[”或“]”,如果输入“其它\1\2\3其它”,则替换结果为:

相关内容还有很多,可以自己参考正则表达式的语法仔

【3】正则表达式应用——删除每一行行尾的指定字符

因为这几个字符在行中也是出现的,所以肯定不能用简单的替换实现

需要删除每行末尾的“345”

这个也算正则表达式的用法,其实仔细看正则表达式应该比较简单,不过既然有这个问题提出,说明对正则表达式还得有个认识过程,解决方法如下

在替换对话框中,启用“正则表达式”复选框

在查找内容里面输入“345$”

这里“$”表示从行尾匹配

如果从行首匹配,可以用“^”来实现,不过 EditPlus 有另一个功能可以很简单的删除行首的字符串

b. 编辑-格式-删除行注释

c. 在弹出对话框里面输入要清除的行首字符,确定

【4】正则表达式应用——替换带有半角括号的多行

几百个网页中都有下面一段代码:

我想把它们都去掉,可是找了很多search & replace的软件,都是只能对“一行”进行操作。

EditPlus 打开几百个网页文件还是比较顺畅的,所以完全可以胜任这个工作。

具体解决方法,在 Editplus 中使用正则表达式,由于“(”、“)”被用做预设表达式(或者可以称作子表达式)的标志,所以查找

时会提示查找不到,所以也就无法进行替换了,这时可以把“(”、“)”使用任意字符标记替代,即半角句号:“.”。替换内容为

在替换对话框启用“正则表达式”选项,这时就可以完成替换了

对( ) 这样的特殊符号,应该用\( \)来表示,这也是很标准的regexp语法,可以写为

【5】正则表达式应用——删除空行

启动EditPlus,打开待处理的文本类型文件。

①、选择“查找”菜单的“替换”命令,弹出文本替换对话框。选中“正则表达式”复选框,表明我们要在查找、替换中使用正则表达式。然后,选中“替换范围”中的“当前文件”,表明对当前文件操作。

②、单击“查找内容”组合框右侧的按钮,出现下拉菜单。

③、下面的操作添加正则表达式,该表达式代表待查找的空行。(技巧提示:空行仅包括空格符、制表符、回车符,且必须以这三个符号之一作为一行的开头,并且以回车符结尾,查找空行的关键是构造代表空行的正则表达式)。

直接在"查找"中输入正则表达式“^[ \t]*\n”,注意\t前有空格符。

(1)选择“从行首开始匹配”,“查找内容”组合框中出现字符“^”,表示待查找字符串必须出文本中一行的行首。

(2)选择“字符在范围中”,那么在“^”后会增加一对括号“[]”,当前插入点在括号中。括号在正则表达式中表示,文本中的字符匹配括号中任意一个字符即符合查找条件。

(3)按一下空格键,添加空格符。空格符是空行的一个组成成分。

(4)选择“制表符”,添加代表制表符的“\t”。

(5)移动光标,将当前插入点移到“]”之后,然后选择“匹配 0 次或更多”,该操作会添加星号字符“*”。星号表示,其前面的括号“[]”内的空格符或制表符,在一行中出现0个或多个。

(6)选择“换行符”,插入“\n”,表示回车符。

④、“替换为”组合框保持空,表示删除查找到的内容。单击“替换”按钮逐个行删除空行,或单击“全部替换”按钮删除全部空行(注意:EditPlus有时存在“全部替换”不能一次性完全删除空行的问题,可能是程序BUG,需要多按几次按钮)。

【6】 正则表达式应用——实例应用

19.只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。

20.只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。

评注:可用来匹配大多数年月日信息。

评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)

28.匹配空白行的正则表达式:\n\s*\r

评注:可以用来删除空白行

评注:网上流传的版本太糟糕,上面这个也仅仅能匹配部分,对于复杂的嵌套标记依旧无能为力

30.匹配首尾空白字符的正则表达式:^\s*|\s*$

评注:可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式

评注:网上流传的版本功能很有限,上面这个基本可以满足需求

评注:表单验证时很实用

评注:中国邮政编码为6位数字

评注:提取ip地址时有用

不同的语言(如PHP和JAVA)、相同语言的不同类库(如来自Sun的Java Regular Expression类库跟Apache Jakarta的正则表达式类库)间,用法会有所差别,在使用的时候,要注意这些差别。

用于查找在某些内容(但并不包括这些内容)之前或之后的东西,也就是说它们像\b,^,$那样用于指定一个位置,这个位置应该满足一定的条件(即断言),因此它们也被称为零宽断言。最好还是拿例子来说明吧:

假如你想要给一个很长的数字中每三位间加一个逗号(当然是从右边加起了),你可以这样查找需要在前面和里面添加逗号的部分:((?<=\D)\D{3})+\b,用它对xxxxxxxxxx进行查找时结果是xxxxxxxxx

下面这个例子同时使用了这两种断言:(?<=\s)\d+(?=\s)匹配以空白符间隔的数字(再次强调,不包括这些空白符)

断言用来声明一个应该为真的事实。正则表达式中只有当断言为真时才会继续进行匹配。

如果我们只是想要确保某个字符没有出现,但并不想去匹配它时怎么办?例如,如果我们想查找这样的单词--它里面出现了字母q,但是q后面跟的不是字母u,我们可以尝试这样:

\b\w*q[^u]\w*\b匹配包含后面不是字母u的字母q的单词。但是如果多做测试(或者你思维足够敏锐,直接就观察出来了),你会发现,如果q出现在单词的结尾的话,像Iraq,Benq,这个表达式就会出错。这是因为[^u]总要匹配一个字符,所以如果q是单词的最后一个字符的话,后面的[^u]将会匹配q后面的单词分隔符(可能是空格,或者是句号或其它的什么),后面的\w*\b将会匹配下一个单词,于是\b\w*q[^u]\w*\b就能匹配整个Iraq fighting。负向零宽断言能解决这样的问题,因为它只匹配一个位置,并不消费任何字符。,我们可以这样来解决这个问题:\b\w*q(?!u)\w*\b。

零宽度负预测先行断言(?!exp),断言此位置的后面不能匹配表达式exp。例如:\d{3}(?!\d)匹配三位数字,而且这三位数字的后面不能是数字;\b((?!abc)\w)+\b匹配不包含连续字符串abc的单词。

同理,我们可以用(?<!exp),零宽度负回顾后发断言来断言此位置的前面不能匹配表达式exp:(?<![a-z])\d{7}匹配前面不是小写字母的七位数字。

一个更复杂的例子:(?<=<(\w+)>).*(?=<\/\1>)匹配不包含属性的简单HTML标签内里的内容。(?<=<(\w+)>)指定了这样的前缀:被尖括号括起来的单词(比如可能是<b>),然后是.*(任意的字符串),最后是一个后缀(?=<\/\1>)。注意后缀里的\/,它用到了前面提过的字符转义,将”/“转义;\1则是一个反向引用,引用的正是捕获的第一组,前面的(\w+)匹配的内容,这样如果前缀实际上是<b>的话,后缀就是</b>了。整个表达式匹配的是<b>和</b>之间的内容(再次提醒,不包括前缀和后缀本身)。

我要回帖

更多关于 电路元器件 的文章

 

随机推荐