显示标签为“Linux”的博文。显示所有博文
显示标签为“Linux”的博文。显示所有博文

2008年11月12日星期三

grep命令介绍

◎grep -- print lines matching a pattern (将符合样式的该行列出)

◎语法: grep [options]
PATTERN [FILE...]
grep用以在file内文中比对相对应的部分,或是当没有指定档案时,
由标准输入中去比对。 在预设的情况下,grep会将符合样式的那一行列出。

此外,还有两个程式是grep的变化型,egrep及fgrep。
其中egrep就等同於grep -E ,fgrep等同於grep -F 。

◎参数
1. -A NUM,--after-context=NUM
除了列出符合行之外,并且列出後NUM行。

ex: $ grep -A 1 panda file
(从file中搜寻有panda样式的行,并显示该行的後1行)

2. -a或--text
grep原本是搜寻文字档,若拿二进位的档案作为搜寻的目标,
则会显示如下的讯息: Binary file 二进位档名 matches 然後结束。

若加上-a参数则可将二进位档案视为文字档案搜寻,
相当於--binary-files=text这个参数。

ex: (从二进位档案mv中去搜寻panda样式)
(错误!!!)
$ grep panda mv
Binary file mv matches
(这表示此档案有match之处,详见--binary-files=TYPE )
$
(正确!!!)
$ grep -a panda mv

3. -B NUM,--before-context=NUM
与 -A NUM 相对,但这此参数是显示除符合行之外
并显示在它之前的NUM行。

ex: (从file中搜寻有panda样式的行,并显示该行的前1行)
$ grep -B 1 panda file

4. -C [NUM], -NUM, --context[=NUM]
列出符合行之外并列出上下各NUM行,预设值是2。

ex: (列出file中除包含panda样式的行外并列出其上下2行)
(若要改变预设值,直接改变NUM即可)
$ grep -C[NUM] panda file

5. -b, --byte-offset
列出样式之前的内文总共有多少byte ..

ex: $ grep -b panda file
显示结果类似於:
0:panda
66:pandahuang
123:panda03

6. --binary-files=TYPE
此参数TYPE预设为binary(二进位),若以普通方式搜寻,只有2种结果:
1.若有符合的地方:显示Binary file 二进位档名 matches
2.若没有符合的地方:什麽都没有显示。

若TYPE为without-match,遇到此参数,
grep会认为此二进位档案没有包含任何搜寻样式,与-I 参数相同。

若TPYE为text, grep会将此二进位档视为text档案,与-a 参数相同。

Warning: --binary-files=text 若输出为终端机,可能会产生一些不必要的输出。

7. -c, --count
不显示符合样式行,只显示符合的总行数。
若再加上-v,--invert-match,参数显示不符合的总行数。

8. -d ACTION, --directories=ACTION
若输入的档案是一个资料夹,使用ACTION去处理这个资料夹。
预设ACTION是read(读取),也就是说此资料夹会被视为一般的档案;
若ACTION是skip(略过),资料夹会被grep略过:
若ACTION是recurse(递),grep会去读取资料夹下所有的档案,
此相当於-r 参数。

9. -E, --extended-regexp
采用规则表示式去解释样式。

10. -e PATTERN, --regexp=PATTERN
把样式做为一个partern,通常用在避免partern用-开始。

11. -f FILE, --file=FILE
事先将要搜寻的样式写入到一个档案,一行一个样式。
然後采用档案搜寻。
空的档案表示没有要搜寻的样式,因此也就不会有任何符合。

ex: (newfile为搜寻样式档)
$grep -f newfile file

12. -G, --basic-regexp
将样式视为基本的规则表示式解释。(此为预设)

13. -H, --with-filename
在每个符合样式行前加上符合的档案名称,若有路径会显示路径。

ex: (在file与testfile中搜寻panda样式)
$grep -H panda file ./testfile
file:panda
./testfile:panda
$

14. -h, --no-filename
与-H参数相类似,但在输出时不显示路径。

15. --help
产生简短的help讯息。

16. -I
grep会强制认为此二进位档案没有包含任何搜寻样式,
与--binary-files=without-match参数相同。

ex: $ grep -I panda mv

17. -i, --ignore-case
忽略大小写,包含要搜寻的样式及被搜寻的档案。

ex: $ grep -i panda mv

18. -L, --files-without-match
不显示平常一般的输出结果,反而显示出没有符合的档案名称。

19. -l, --files-with-matches
不显示平常一般的输出结果,只显示符合的档案名称。

20. --mmap
如果可能,使用mmap系统呼叫去读取输入,而不是预设的read系统呼叫。
在某些状况,--mmap 能产生较好的效能。 然而,--mmap
如果运作中档案缩短,或I/O 错误发生时,
可能造成未定义的行为(包含core dump),。

21. -n, --line-number
在显示行前,标上行号。

ex: $ grep -n panda file
显示结果相似於下:
行号:符合行的内容

22. -q, --quiet, --silent
不显示任何的一般输出。请参阅-s或--no-messages

23. -r, --recursive
递地,读取每个资料夹下的所有档案,此相当於 -d recsuse 参数。

24. -s, --no-messages
不显示关於不存在或无法读取的错误讯息。

小: 不像GNU grep,传统的grep不符合POSIX.2协定,
因为缺乏-q参数,且他的-s 参数表现像GNU grep的 -q 参数。
Shell Script倾向将传统的grep移植,避开-q及-s参数,
且将输出限制到/dev/null。

POSIX: 定义UNIX及UNIX-like系统需要提供的功能。

25. -V, --version
显示出grep的版本号到标准错误。
当您在回报有关grep的bugs时,grep版本号是必须要包含在内的。

26. -v, --invert-match
显示除搜寻样式行之外的全部。

27. -w, --word-regexp
将搜寻样式视为一个字去搜寻,完全符合该"字"的行才会被列出。

28. -x, --line-regexp
将搜寻样式视为一行去搜寻,完全符合该"行"的行才会被列出。

2008年11月11日星期二

Linux系统下运行命令时CTRL+Z的作用

Linux系统下运行命令时CTRL+Z的作用

  命令运行时使用CTRL+Z,强制当前进程转为后台,并使之停止。

  1. 使进程恢复运行(后台)

  (1)使用命令bg

  Example:

  zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv01

  *这里使用CTRL+Z,此时serv01是停止状态*

  [1]+ Stopped ./tcpserv01

  zuii@zuii-desktop:~/unp/tcpcliserv$ bg

  [1]+ ./tcpserv01 & *此时serv01运行在后台*

  zuii@zuii-desktop:~/unp/tcpcliserv$

  (2)如果用CTRL+Z停止了几个程序呢?

  Example:

  zuii@zuii-desktop:~/unp/tcpcliserv$ jobs

  [1]- Running ./tcpserv01 &

  [2]+ Stopped ./tcpcli01 127.0.0.1

  zuii@zuii-desktop:~/unp/tcpcliserv$ bg %1

  bash: bg:任务 1 已转入后台 *后台运行*

  2. 使进程恢复至前台运行

  Example:

  zuii@zuii-desktop:~/unp/tcpcliserv$ ./tcpserv04

  [1]+ Stopped ./tcpserv04

  zuii@zuii-desktop:~/unp/tcpcliserv$ fg

  。/tcpserv04

  总结:

  (1) CTRL+Z停止进程并放入后台

  (2) jobs 显示当前暂停的进程

  (3) bg %N 使第N个任务在后台运行(%前有空格)

  (4) fg %N 使第N个任务在前台运行

  默认bg,fg不带%N时表示对最后一个进程操作!

df 命令 linux磁盘管理命令

linux磁盘管理命令--df

功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:df [选项]

说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。

该命令各个选项的含义如下:

-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。

-k 以k字节为单位显示。

-i 显示i节点信息,而不是磁盘块。

-t 显示各指定类型的文件系统的磁盘空间使用情况。

-x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。

-T 显示文件系统类型。

 

例1:列出各文件系统的磁盘空间使用情况。

$ df

Filesystem 1 K-blocks Used Available Use% Mounted on

/dev/hda2 1361587 1246406 44823 97% /

df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列给出分区包含的数据块(1024字节)的数目;第3,4

列分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供

系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use% 列表示普通用户空间使用的百分比,

即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的安装点。

 

例2:列出各文件系统的i节点使用情况。

$ df -ia

Filesystem Inodes IUsed IFree Iused% Mounted on

/dev/ hda2 352256 75043 277213 21% /

none 0 0 0 0% /proc

localhost:(pid221) 0 0 0 0% /net

 

例3:列出文件系统的类型。

$ df -T

Filesystem Type 1K-blocks Used Available use% Mounted on

/dev/hda2 ext2 1361587 1246405 44824 97% /

本例中的文件系统是ext2类型的。

nohup命令详解

使用nohup让程序永远后台运行

Unix/Linux下一般比如想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
/usr/local/mysql/bin/mysqld_safe --user=mysql &

但是加入我们很多程序并不象mysqld一样做成守护进程,可能我们的程序只是普通程序而已,一般这种程序使用 & 结尾,但是如果终端关闭,那么程序也

会被关闭。但是为了能够后台运行,那么我们就可以使用nohup这个命令,比如我们有个test.php需要在后台运行,并且希望在后台能够定期运行,那么就

使用nohup:
nohup /root/test.php &

  提示:

  [~]$ appending output to nohup.out

  嗯,证明运行成功,同时把程序运行的输出信息放到当前目录的 nohup.out 文件中去。

  附:nohup命令参考

  nohup 命令

  用途:不挂断地运行命令。

  语法:nohup Command [ Arg ... ] [ & ]

   描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中

的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。

   无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定

向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指

定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

  退出状态:该命令返回下列出口值:

  126 可以查找但不能调用 Command 参数指定的命令。

  127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。

  否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。

nohup命令及其输出文件

  nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之

后继续运行相应的进程。nohup就是不挂起的意思( n ohang up)。

该命令的一般形式为:nohup command &

使用nohup命令提交作业

如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:
nohup command > myout.file 2>&1 &

在上面的例子中,输出被重定向到myout.file文件中。

使用 jobs 查看任务。

使用 fg %n 关闭。

另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。

bg 命令

如果已启用作业控制,则 bg 命令通过将暂挂的作业作为后台作业运行,可在当前环境中恢复执行这些作业。
如果指定的作业已经在后台运行,bg 命令不起作用并成功退出。
如果未提供 JobID 参数,bg 命令会使用最近暂挂的作业。
使用 bg 命令将作业放入后台,使该作业的进程标识在当前 shell 环境中被知晓。
bg 命令输出显示作业号和与该作业相关的命令。作业号可与 waitfg

kill 命令一起使用,
只要在作业号前加上 %(百分号)前缀。例如:kill %3。
使用 Ctrl-Z 按键顺序就可以暂挂作业。使用 bg 命令就可在后台重新启动该作业。
当作业无需终端输入且作业输出被重定向至非终端文件时,这么做是有效的。
如果后台作业具有终端输出,可输入以下命令强制停止该作业:
stty tostop
输入以下命令可停止后台作业:
kill -s stop JobID
/usr/bin/bg 命令在自己的命令执行环境中操作时无效,因为该环境没有可处理的暂挂作业。如同以下示例所示:
Command | xargs bg
每个 /usr/bin/bg 命令在不同环境中运行并且无法共享父 shell 的作业理解。
由于此原因,bg 命令作为 Korn Shell 或 POSIX shell(经常是内置的)实行。

tail 命令

用途

从指定点开始将文件写到标准输出。
语法
标准语法

tail [ -f ] [ -c Number | -n Number | -m Number | -b Number | -k Number ] [ File ]
要以逆序显示行

tail [ -r ] [ -n Number ] [ File ]
描述

tail 命令从指定点开始将 File 参数指定的文件写到标准输出。如果没有指定文件,则会使用标准输入。 Number 变量指定将多少单元写入标准输出。

Number 变量的值可以是正的或负的整数。如果值的前面有 +(加号),从文件开头指定的单元数开始将文件写到标准输出。如果值的前面有 -(减号),

则从文件末尾指定的单元数开始将文件写到标准输出。如果值前面没有 +(加号)或 -(减号),那么从文件末尾指定的单元号开始读取文件。

Number 变量用于确定计数的起点的单元类型由 -b、-c、-k、-m 以及 -n 标志确定。如果没有指定其中的任何一个标志,那么 tail 命令就会读取指定文

件的最后十行,并将其写到标准输出。这与在命令行输入 -n 10 是相同的。

-m 标志在单字节和双字节字符环境中提供了一致的结果。当输入是包含多字节字符的文本文件时应谨慎使用 -c 标志,因为产生的输出可能不从字符边界

开始。
标志

-b Number 从 Number 变量表示的 512 字节块位置开始读取指定文件。
-c Number 从 Number 变量表示的字节位置开始读取指定文件。
-f 如果输入文件是常规文件或如果 File 参数指定 FIFO(先进先出),那么 tail 命令不会在复制了输入文件的最后的指定单元后终止,而是继续

从输入文件读取和复制额外的单元(当这些单元可用时)。如果没有指定 File 参数,并且标准输入是管道,则会忽略 -f 标志。tail -f 命令可用于监

视另一个进程正在写入的文件的增长。
-k Number 从 Number 变量表示的 1KB 块位置开始读取指定文件。
-m Number 从 Number 变量表示的多字节字符位置开始读取指定文件。使用该标志提供在单字节和双字节字符代码集环境中的一致结果。
-n Number 从 Number 变量表示的行位置开始读取指定文件。
-r 从文件末尾以逆序方式显示输出。-r 标志的缺省值是以逆序方式打印整个文件。如果文件大于 20,480 字节,那么 -r 标志只显示最后的

20,480 字节。

-r 标志只有与 -n 标志一起时才有效。否则,就会将其忽略。
退出状态

该命令返回下列的退出值:
0 成功完成。
>0 出现错误。
示例

1. 要显示 notes 文件的最后十行,输入:

tail notes

2. 要指定从 notes 文件末尾开始读取的行数,输入:
tail -n 20 notes
3. 要从第 200 字节开始,每次显示一页 notes 文件,输入:
tail -c +200 notes | pg
4. 要跟踪文件的增长,输入:
tail -f accounts
这显示 accounts 文件的最后十行。tail 命令继续显示添加到 accounts 文件中的行。显示会一直继续,直到您按下 Ctrl-C 按键顺序来停止。

文件

/usr/bin/tail 包含 tail 命令。

linux rm命令详解

用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除

。对于链接文件,只是断开了链接,原文件保持不变。\r

rm命令的一般形式为:\r

rm [选项] 文件…

如果没有使用- r选项,则rm不会删除目录。

该命令的各选项含义如下:\r

- f 忽略不存在的文件,从不给出提示。

- r 指示rm将参数中列出的全部目录和子目录均递归地删除。\r

- i 进行交互式删除。

使用rm命令要小心。因为一旦文件被删除,它是不能被恢复的。了防止这种情况的发生,可以使用i选项来逐个确认要删除的文件。如果用户输入y,文件

将被删除。如果输入任何其他东西,文件则不会删除。

2008年11月10日星期一

国际观点:鼓励未来的程序员

今天我在BBC新闻网站上看到了这篇有趣的文章,是关于英国游戏产业的,英国是如何一直在发展他们能力范围之上的游戏产业。这个问题总是被推向那些伴随着BBC Micro,ZX-81等的计算机长大的那一代人身上。那时候的计算机通常会有一个内置的BASIC解释器,你需要使用它来运行磁带或磁盘程序。

幸亏这些本地居民和便宜的计算机,英国多年来在游戏市场都占据强有力的地位。程序员通过进入杂志的列表开始了解编程,进而一步一步开始写自己的游戏代码。那时候的机器明显是比现在的机器要难用,但却是文档齐全,更具有编程文化——如果你想要使用,你至少需要学习少数命令。

现在,与今年的这篇文章比较一下,这篇文章就显得很压抑。很少人在学习编程,学校在全神贯注地教学生如何使用Word和Excel。难怪很多人都不愿意考虑去试一试OpenOffice!

我现在将近30岁,在9或10岁的时候拥有了我的第一个计算机(Amstrad CPC 6128)。所以我认为我是处于伴随着第一代计算机长大的那一代人的末梢儿。像很多其他人一样,我按照电话本大小的手册书里的指南去编写程序,建立一个地址本应用程序,花费几个小时键入程序,同时调试来自杂志的游戏。

90年代被认为是计算机产业的一个糟糕时期,尽管计算机网络是出现于这个时代。Commodore沉没,Apple也只是死里逃生,在短短几年之内,Windows开始占据桌面统治地位,其它的几乎都消失了。

Windows毋庸置疑在使计算机更易使用方面做出了杰出贡献(其实我不喜欢承认这件事情,我是一个Linux用户),同时还提供了写信,制作电子表格,到后来的网络冲浪等一些了不起的功能。一定程度上来说,它使计算机变成了一个黑匣子,使人们对学习编码不感兴趣。

同时,游戏控制台开始占据更大的游戏市场。一些流派(如RTS即时战略),已经在家庭计算机上占有了很强的地位,而且现在仍然如此。平台游戏如Mario和Sonic游戏渐渐退去舞台。所以,像过去那种为了玩游戏买计算机,然后开始编程的情况已经很少见了。

现在,如果你买一台Windows PC,没有任何方式会鼓励你用它编程序。没有任何种类的指导,也没有BASIC解释器(或者任何其它解释器)。现在的PC杂志似乎没有做任何鼓励人们学习编程的事情,我觉得这有一些悲哀。

拥有一台Windows计算机,在我看来,你实际上应该从它开始对编程产生兴趣,应该知道你对它感兴趣,你可以使用它作为一个编程平台。我的意思是,它并不会鼓励你学习特定的编程语言。据我所知,微软的操作系统到目前为止还不包括任何编程工具。

让人感到受挫的是,他们其实已经有了近乎完美的编程工具,以Visual Studio Express Edition的形式。我希望人们能学习一种开源语言而不是依靠Windows,但我更希望看见人们能首先被鼓励编程。为什么微软的Windows操作系统不能包含至少一种Visual Studio Express Edition IDE(我预期他们大概主张Visual Basic,尽管那不是我的首选),以及一个用户手册(打印或pdf版本)?他们可以在桌面上放置一个链接“开始学习编程!”,让人们在好奇心的驱使下自然而然地去学习。如果人们不喜欢,他们可以删除它,那不是很好。事实上,现在你不得不到微软的网站上去寻找它。他们应该鼓励人们去学习他们的软件,并为之开发更好的应用。

我认为在很多方面,Apple做的更好。通过在OS X的每一个拷贝中包含Xcode IDE,伴随计算机同时提供了一个有力的编程工具。而且,OS X本质上来说是Unix的一种形式,很适合编程用。但是,事实上,Xcode不是预安装的,意味着它不是默认安装的,使得使用性变小,人们可能会出于好奇心而安装它。同时,尽管XCode确实装载了文档,但却没有包含任何“初学者向导”,看起来像是只为那些已经成为程序员的人提供的。他们应该明确地做更多能鼓励人们开始编程的事情。所以,我再一次感觉到像Windows,OS X都是很少的努力来鼓励人们开始学习编程。

另外一个Apple和微软的共同点是,他们过于强调IDE而不是文本编辑器。我曾经短暂地试过使用Visual Studio Express Edition,也试过Xcode,我同意这种观点,就是IDE是你开始编程的最后一个选择。学习一个全新且复杂的应用程序,同时学习编程,对大多数人来说都有些困难,但任何人都会使用基本的文本编辑器。甚至是更复杂的,如Vim(我个人喜欢的)也远比使用大多数IDE容易得多。毫无疑问IDE提供了大量特征供用户体验,但当某人开始他编程第一步时,却是极其不应该选择的。

有一件事情让我喜欢Linux超过OS X和Windows。目前,在某些流行套件如Ubuntu中,你实际上不需要为日常作业而使用终端,现在有一个很强的文化在做这件事情,你可以使用它来解决问题。我认为部分原因是由于主要支持来源于论坛,对某个人来说,很容易就可以给你粘贴一个命令,粘贴到终端,然后告诉你“点击这里,然后这里,然后这里……”。同时,bash shell比Windows的配对产品更有力。总的来说,可能会存在一个学习曲线,使用bash通常是完成一项任务的最快、最方便的方法。从使用 bash,通过编辑文本文件改变设置,然后到编写shell脚本或是学习使用Perl或Python编程并不是很困难的事情。很多套件包含语言的同时也会包含大量文档。同时,Linux中使用的语言几乎是一成不变的,可以使用一个简单的文本编辑器而不是强迫你去学习使用某个IDE,我感觉这让他们更容易理解。

但是,我还是感觉甚至是Linux也可以做跟多鼓励人们学习编程的事情。我不得不想做的最后一件事情是,当人们不想学习编程的时候强制他们去学习。但我认为我们不应该采取更多的措施去鼓励新程序员。可能只是手头/home目录下的一个pdf文件,叫做“学习编程”的就足够了。

最近,我开始学习Python。很快地我就开始喜欢学习它了。它可能比BASIC更强大,但我发现它正如入门容易那样简单。过去我曾学过Perl和 Java,发现学习一个新语言或多或少会有点困难,但Python让我感到很惊讶。所以一个新计算机应该包含一种理想的语言。OS X和大部分Linux套件已经包含了Python。我找不到任何微软的产品不包含它的理由。只需要添加一到两个pdf指南,放在那里。如果处于某种理由他们不想使用Python,我们当然还可以为初学者提供其他好的语言。

还有其他可以让人们对编程产生兴趣的方法吗?我们应该推动哪种语言?我们是否应该鼓励他们使用IDE,或者使用像Vim这样的文本编辑器?欢迎给出你的答案!

网站统计