Linux 编程基础
上QQ阅读APP看书,第一时间看更新

1.4.2 Linux常用各种命令

1.man及info帮助命令

使用Linux操作系统时,可以使用man命令获得帮助。首先我们获得关于man如何使用的帮助。在终端中输入命令:

[cosmos@localhost ~]$ man man

然后下面是关于man命令的帮助:

man(1)                       man(1)

NAME

man - format and display the on-line manual pages

SYNOPSIS

man [-acdf Fhk Ktw W] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-B browser] [-H htmlpager] [-S section_list] [section] name ...

DESCRIPTION

man formats and displays the on-line manual pages.If you specify section, man only looks in that section of the manual.name is normally the name of the manual page, which is typically the name of a command, function, or file.However, if name contains a slash (/) then man interprets it as a file specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz.

See below for a description of where man looks for the manual page files.

MANUAL SECTIONS

The standard sections of the manual include:

关于man命令,我们常用的格式如下:

man [ 参数选择] [节号] 命令

这里的节号指从哪一节查找该命令的相关信息。节号及其含义主要见表1.1。

表1.1 man文档的章节

其中,参数-a表示从所有的man文档章节中查找,然后从找到的第一个开始显示。-k参数表示从所有的man文档中按照所指定的关键字进行查找。下面介绍几种man命令使用实例。

(1)man write命令。在终端中输入如下命令:

[cosmos@localhost ~]$ man write

得到如下结果:

WRITE(1) Linux Programmer's Manual WRITE(1)

NAME

write - send a message to another user

SYNOPSIS

write user [ttyname]

DESCRIPTION

Write allows you to communicate with other users, by copying lines from your terminal to theirs.

When you run the write command, the user you are writing to gets a message of the form:

Message from yourname@yourhost on yourtty at hh:mm ...

Any further lines you enter will be copied to the specified user’s terminal.If the other user wants to reply, they must run write as well.

When you are done, type an end-of-file or interrupt character.The other user will see the message EOF indicating that the conversation is over.

从中可以看出该命令从第一节找到关于write用户命令的帮助信息。

(2)man 2 write命令。在终端下输入man 2 write命令:

[cosmos@localhost ~]$ man 2 write

得到如下结果:

WRITE(2) Linux Programmer’s Manual WRITE(2)

NAME

write - write to a file descriptor

SYNOPSIS

#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

DESCRIPTION

write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd.

The number of bytes written may be less than count if, for example, there is insufficient space on the underlying physical medium, or the RLIMIT_FSIZE resource limit is encountered (see setrlimit(2)), or the call was interrupted by a signal handler after having written less than count bytes.(See also pipe(7).)

For a seekable file (i.e., one to which lseek(2)may be applied, for example, a regular file) writing takes place at the current file offset, and the file offset is incremented by the number of bytes actually.

该命令返回了系统调用write的帮助内容。第一行结果中write(2)括号中的2表示从man文档的第二节关于系统调用的文档中获得的信息。

(3)man -a write命令,执行该命令后,man返回文档中所有的关于该命令write的信息,从第一节到所有的包含该命令的节号。当第一个显示完后,输入q命令,系统自动显示下一个该命令的信息。

(4)man -k write命令。在终端下输入man -k write命令:

[cosmos@localhost ~]$ man -k write

得到如下结果。

xt Utils::Miniperl [] (3) - write the C code for perlmain.c

Pod::Simple::Subclassing [] (3) -- write a formatter as a Pod::Simple subclass

_llseek []     (2) - reposition read/write file offset

aio_write []    (3) - asynchronous write

aio_write []    (3p) - asynchronous write to a file (REALTIME)

amidi []      (1) - read from and write to ALSA Raw MIDI ports

bzero []      (3) - write zero-valued bytes

cdrdao []     (1) - reads and writes CDs in disc-at-once mode

cksum []      (1p) - write file checksums and sizes

creat []      (3p) - create a new file or rewrite an existing one

date []      (1p) - write the date and time

echo []      (1p) - write arguments to standard output

encoding []    (3) - allows you to write your script in non-ascii or non-utf8

其中,第一列是命令或者系统调用的名称,中间的(2)或者(3)表示man文档的第几节,最后一列是关键字出现的地方。这样可以帮助我们找出与关键字有关的系统调用。

同样,info命令也能为我们提供命令相关的详细信息。GNU项目将它的大部分在线文档按照Info格式发布,可通过Info阅读器读取,info命令就是这样一种阅读器。它可通过链接和交叉引用来浏览Info帮助文档,它可直接跳转到相关章节而不用像man命令那样一页一页往下翻。进入info命令后,输入q退出,输入h获得使用info命令的帮助。主要使用方法如下:

q     退出info命令

m     跳到指定菜单,info文件中菜单以*开头。

Up     光标向上移动一行

Down    光标向下移动一行

DEL    光标向上翻动一屏

SPC    光标向下翻动一屏

Home    光标跳到当前节点的开始

End    光标跳到当前节点的末尾

TAB    光标跳到下一个超链接(这里的超链接连接到另外一个节点)

RET(回车) 跳到当前光标下面超链接的地方

info命令用法:

[cosmos@localhost ~]$ info command

例如我们输入info gcc命令。

2.文件系统管理命令

使用Linux操作系统的过程中,对文件及目录的管理操作是必不可少的。这些操作包括新建、浏览、编辑、修改、删除等。这里介绍一些常用和基本的命令,可用man和info查阅更详细和更完整的手册。

(1)ls命令:显示文件信息命令。

功能:ls命令显示关于文件(任何类型的文件,包括目录)的信息。默认情况下,如果参数的文件类型为目录,则只显示该目录的内容;如果为普通文件,显示文件的名称。同时,文件按照字母顺序分列显示在终端上。

语法:

ls [选项] [文件名/目录名]

描述:下面是ls的几种常用用法,更多信息请用命令man ls或者info ls查阅。ls -l命令显示文件或者目录下的文件的详细信息,包括文件类型及权限、连接数、文件所有者及所有者所属的组、文件大小、最后访问日期、时间及名称。假设当前目录结构如图1.14所示:

图1.14 当前目录下的目录结构

输入[cosmos@localhost ~]$ ls -l c*命令显示

chapter6:

总计 24

-rwxrwxr-x.1 cosmos cosmos 5996 08-18 10:27 rotate

-rwxrwxr-x.1 cosmos cosmos 5422 08-15 23:28 rotate2

-rw-rw-r--.1 cosmos cosmos 670 08-15 23:28 rotate2.c

-rw-rw-r--.1 cosmos cosmos 928 08-18 10:27 rotate.c

chapter10:

总计 0

chapter11:

总计 116

-rwxwxr-x.1 cosmos cosmos 9353 09-01 02:30 mysort

ls -l c*命令的含义表示显示当前目录下以c开头的文件或者目录的详细信息,上面就是返回的结果,ls命令分别显示了所有以c开头的目录下文件的详细信息。这里的*是文件名称匹配符,表示可以匹配任意字符串。另外,ls命令中-a参数表示显示所有文件,包括以.开头的隐藏文件,d列出所有目录的信息。参数也可以一起使用。如下例所示。

[cosmos@localhost ~]$ ls -al

总计 240

drwx------.41 cosmos cosmos  4096 09-23 10:04 .

drwxr-xr-x. 3 root root   4096 07-14 18:19 ..

-rw-rw-r--. 1 cosmos cosmos    0 08-20 17:04 aa.c

-rw-rw-r--. 1 cosmos cosmos    5 08-13 01:19 a.c

-rw-------. 1 cosmos cosmos  12003 09-23 09:33 .bash_history

(2)pwd命令。

功能:显示用户的当前工作目录。

语法:

pwd

描述:pwd命令显示当前目录在文件系统层次中的位置。

例如:

[cosmos@localhost ~]$ pwd

/home/cosmos

(3)cd命令。

功能:切换目录。

语法:

cd 目录名称

描述:cd除了有切换目录的功能外,还有一个功能就是不管在哪个目录内,只要输入cd命令,不用接任何参数,就可回到用户主目录内。例如:cd /usr/bin 表示从当前目录进入/usr/bin目录。cd ~表示进入用户的主目录,例如当前用户的主目录为/home/cosmos。cd命令也返回到用户主目录。cd -命令表示进入上次更改目录之前的目录。比如用户由目录a 进入a下面的子目录b后,在当前目录下执行cd -,则重新进入a目录。用户的主目录是指Linux操作系统为每个用户在/home目录下面以用户名称新建的目录。下面是cd命令执行实例。

[cosmos@localhost ~]$ pwd      //显示当前所在目录

/home/cosmos

[cosmos@localhost ~]$ cd /usr/bin  //执行cd命令切换到/usr/bin目录

[cosmos@localhost bin]$ pwd     //显示当前所在目录,发现切换成功

/usr/bin

[cosmos@localhost bin]$ cd ~     //进入用户主目录 /home/cosmos

[cosmos@localhost ~]$ pwd      //进入用户主目录成功

/home/cosmos

[cosmos@localhost ~]$ cd a      //进入目录a

[cosmos@localhost a]$ cd b      //进入目录a下面的子目录b

[cosmos@localhost b]$ pwd      //查看是否成功

/home/cosmos/a/b           //发现已经成功进入a/b目录

[cosmos@localhost b]$ cd -      //进入上次切换目录之前的目录

/home/cosmos/a            //重新进入a目录

[cosmos@localhost a]$ pwd

/home/cosmos/a

[cosmos@localhost a]$

(4)目录管理命令。

功能:创建目录和删除目录。

语法:

mkdir [参数] 目录名称

rmdir [参数] 目录名称

描述:mkdir命令表示在当前目录中建立一个新目录,rmdir表示删除指定的目录。使用rmdir时,要确保目录内已无任何文件或者目录,否则命令不成功。-p 表示递归删除或者创建目录。mkdir –p linux/doc/fedora/表示首先在当前目录下创建linux目录,其子目录是doc,doc内又有一个子目录fedora。删除时,若子目录删除后其父目录为空,则将一同删除。比如rmdir -p parent/child表示删除parent目录中的child目录,若parent也为空,则parent目录也将被删除。下面演示如何使用mkdir、rmdir命令及-p参数。

[cosmos@localhost a]$ ls

[cosmos@localhost a]$ mkdir -p linux/doc/fedora/

[cosmos@localhost a]$ ls -R linux //这里-R参数表示递归显示目录信息直到无子目录为止

linux:

doc

linux/doc: //linux目录下的子目录doc

fedora

linux/doc/fedora:

[cosmos@localhost a]$ rmdir -p linux/doc/fedora //先删除fedora空目录,之后doc目录变成了空目录,然后也被删除,之后linux变成空目录,然后将linux也删除

[cosmos@localhost a]$ ls

[cosmos@localhost a]$

(5)删除文件工具rm。

功能:rm是用来删除一个或多个文件的工具,并且能用于删除非空目录。也可以使用参数-rf强制删除一个非空目录。

rm的语法格式:

rm [参数选项] file1 file2 ......

rm [参数选项] dir1 dir2 dir3 ......

rm命令的主要常用参数包括如下几点:

-f表示不显示警告或提示信息直接删除,用时需要小心,如果不确定,则不要使用该参数;

-i表示删除文件时,显示警告信息并提示用户是否删除,若用户输入y表示删除,输入n则不删除;

-r或-R表示可以递归删除整个目录(包括子目录及目录下的所有文件)。下面为rm命令使用实例。

[cosmos@localhost a]$ rm -i fedora.c

rm:是否删除普通文件“fedora.c”? n //提示用户是否删除该文件

假如需要删除mydir目录及所有下级目录和文件,并且mydir或者其子目录不为空,可用-r参数和-i参数的组合。若想终止rm命令,可按Ctrl+C组合键退出rm。我们首先用rmdir命令尝试删除整个mydir目录。

[cosmos@localhost a]$ rmdir mydir

rmdir: failed to remove “mydir”:目录非空

[cosmos@localhost a]$ rm -ir mydir

rm:是否进入目录“mydir”? y

rm:是否进入目录“mydir/a”? y

rm:是否删除普通文件“mydir/a/fedora.c”? y

rm:是否删除目录“mydir/a”? y

rm:是否删除目录“mydir”? y

如果不需要任何警告信息删除mydir及其目录下的所有文件及子目录,可以用-r和-f参数的组合。

[cosmos@localhost a]# rm -rf mydir

(6)文件名修改命令mv。

功能:文件更名或搬移。

语法:

mv 原文件名或目录名新文件名或目录名

描述:mv命令通常被用来移动文件。它主要有如下几种用法:

mv filename1 filename2将名称为filename1的文件改名为filename2并删除原文件。mv filename1 path/filename2 则将名称为filename1的文件移动到path路径下并改名为filename2并删除原文件。mv filename path只是将文件移动到path路径下而不做改名并删除原文件。新文件名或目录名不能与当前文件名(或目录名)同名。

例如,把现在所在的目录中的netscape文件移到/usr内,可用:

[cosmos@localhost a]#mv netscape /usr

[cosmos@localhost a]# mv netscape nets //将netscape重命名为nets

[cosmos@localhost a]#mv netscape /usr/nets//将netscape重命名为nets并移动到目录/usr。

(7)文件复制命令cp。

功能:将源文件或目录复制到目标文件或目录。

语法:

cp [参数选项] 源文件或目录目标文件或目录

常用参数:

-f删除已存在的目标文件,也就是说强制覆盖已经存在的目标文件。

-i在覆盖已存在的目标文件之前先给出警告提示,用户输入y确认覆盖,n取消覆盖。

描述:在使用cp时,一定要有目的文件或目录,另外在cp中也可以使用通配符,像“*”、“?”等。例如,我们要将目录/mydir内的所有文件(但不包括隐藏文件),复制至根目录下的tmp内,其命令为:

[cosmos@localhost a]cp /mydir/* /tmp    //第一次执行

[cosmos@localhost a] cp -i /mydir/* /tmp  //第二次执行,这里使用参数-i

cp:是否覆盖“/tmp/fedora1.c”? y

cp:是否覆盖“/tmp/fedora2.c”? y

cp:是否覆盖“/tmp/fedora3.c”? y

cp:是否覆盖“/tmp/fedora.c”? y

(8)显示文件内容命令cat。

功能:显示及连接文件内容的工具。

语法:

cat [参数选项] [文件]...

实例1:显示文件内容。

[cosmos@localhost a]cat -n /etc/profile //对/etc目录中的profile的所有的行(包括空白行)进行编号输出显示;-n参数表示对输出的所有行编号

1 # /etc/profile

2

3 # System wide environment and startup programs, for login setup

4 # Functions and aliases go in /etc/bashrc

5

6 pathmunge () {

7

实例2:将多个文件连接。cat file1 file2 > file3命令将file1和file2的内容输入file3中。file1、file2内容分别为:

file1内容           file2内容

aaaaaaaaaa          dddddddddddddd

bbbbbbbbb          eeeeeeeeeeeeeeee

cccccccccc          fffffffffffffffffffffff

执行上述命令并显示file3的内容过程如下:

[cosmos@localhost home]# cat file1 file2 > file3

[cosmos@localhost home]# cat file3

aaaaaaaaaa

bbbbbbbbbb

cccccccccc

dddddddddddddd

eeeeeeeeeeeeee

ffffffffffffff

(9)显示文件的more命令。

功能:more是最常用的工具之一,可以显示输出文件内容,然后根据终端窗口的大小进行分页显示,还能显示已经显示的内容占文件所有内容的百分比。

语法:

more [参数选项] [文件]

例如,采用more查看配置文件/etc/profile

[cosmos@localhost home]more /etc/profile

如果文件内容较长,在分页显示时,可输入q退出more命令。more本身有很多控制命令,在显示文件的时候允许前翻和后翻等操作。more命令的执行情况如图1.15所示。从图中可看出more在一页无法显示全部内容时,可停下来等待用户输入之后再继续显示,同时,还可显示内容已经被显示的比例。

图1.15 more命令的执行

(10)显示文件的less命令。

功能:less 命令也是对文件或其他输出进行分页显示的工具,功能极其强大。与more命令相似,可以前翻、后翻。

语法:

less [参数选项] 文件

cat、more、less 3个命令都可以显示文件内容,但也有如下一些特点:

• 这3个命令均具有查看文件内容之功能。

• cat命令一次显示所有文件内容,而后两者可与用户交换以方便用户查看。

• cat命令还具有合并文件之功能。

• less允许用户后翻查看已经阅读过的内容;less并未在一开始就读入文件所有内容,因此其在查看文件时比VI速度快。

• less比more支持更多的控制命令。

(11)查找文件命令find。

功能:搜寻文件与目录。

语法:

find pathname -options [-print -exec -ok ...]

描述:将文件系统内符合条件的文件列出来。用户可以通过选项指定文件名称、类别、时间、大小、权限等。find命令的参数[-print -exec -ok ]的含义分别为:

pathname表示find命令查找的目录路径。例如.表示当前目录,/表示系统根目录。

-print表示find命令将匹配的文件输出到标准输出。

-exec表示find命令对匹配的文件执行该参数所给出的Shell命令。相应命令的形式为'command' {}\;,注意{}和\;之间的空格及反斜杠后面的分号。

-ok和-exec的作用相同,但是以一种更为安全的模式执行参数所给出的Shell命令,在执行每一个命令之前,将会给出提示,让用户来确定是否执行。

例如,在当前目录及其子目录下查找所有扩展文件名是c的文件:

[cosmos@localhost chapter2]$ find .-name "*.c"

./2.6.c

./aa.c

另外,将当前目录及子目录下面扩展文件名是c的文件详细信息显示出来,可用如下命令:

[cosmos@localhost chapter2]$ find .-name "*.c" -exec ls -l {} \;

-rw-rw-r--.1 cosmos cosmos 851 07-21 00:23 ./2.6.c

-rw-rw-r--.1 cosmos cosmos 33 07-21 00:22 ./aa.c

(12)grep命令。

功能:在文件中查找指定的字符串。

语法:

grep [参数选项] 模式匹配串 文件名

grep根据所指定的正则表达式从指定的文件中(如果没有指定就从标准输入)搜索,将其所在行输出。下面是几种常用用法。

在file1文件中寻找printf字符串所在的行。

[cosmos@localhost chapter2]$ grep printf 2.6.c

printf("%c");

printf("the first read is %s",buffer);

在file1文件中查找不包含printf字符串的行并显示行号。这里-v表示查找与所指定模式不匹配的行。-n显示所在行号。

[cosmos@localhost chapter2]$ grep -v -n printf 2.6.c

1:#include <stdio.h>

2:#include <unistd.h>

3:#include <errno.h>

4:#include <fcntl.h>

……

3.系统及用户管理命令

(1)shutdown 关机命令。

功能:安全地关闭或重启Linux系统。

语法:

shutdown [选项] [时间][警告信息]

主要的参数:

-r 关机后重新启动系统。

-h 关闭系统后或者暂停或者关机。

-k 并不真正关机,只是发出警告信息以及禁止登录。

-c 取消已经运行的shutdown程序,这时不需要time参数,只有警告信息这个参数。

[cosmos@localhost chapter2]$ shutdown –h now表示系统立即关机并且断掉电源。

(2)系统时间命令date。

功能:显示和设置系统的日期和时间。

语法:

date

[cosmos@localhost chapter2]$ date

2009年 09月 25日星期五 08:51:44 CST

(3)who命令。

功能:查看当前在线的用户情况。

语法:

who

[cosmos@localhost chapter2]$ who

cosmos tty1 2009-09-25 07:31 (:0)

cosmos pts/0 2009-09-25 07:43 (:0.0)

(4)文件权限修改命令chmod。

功能:用来改变文件或目录权限的命令,但只有文件的拥有者和超级权限用户root有此能力。我们可以通过“change mode”的缩写理解该命令。

语法:

chmod [选项] 模式文件名称

实例:将文件a.txt设为所有人皆可读取及修改。

[cosmos@localhost chapter2]$ ls -l a.txt

-rw-rw-r--.1 cosmos cosmos 12 09-25 09:20 a.txt

由上面可以看出,默认情况下,a.txt文件只有文件所有者及与文件所有者同组的用户拥有读写权限,其他用户只有读的权限。这里,文件模式的表示有两种方式,第一种为助记语法,第二种为八进制表示法。

[cosmos@localhost chapter2]$ chmod a+w a.txt

[cosmos@localhost chapter2]$ ls -l a.txt

-rw-rw-rw-.1 cosmos cosmos 12 09-25 09:20 a.txt

命令中的a表示对所有的用户执行该操作。另外,u表示文件的拥有者,g表示与该文件的拥有者属同一组的用户,o表示其他用户。+、-分别表示增加和删除权限。权限类型主要有:读(r)、写(w)、执行(x)。例如,将所有其他用户的写权限取消,可执行命令 chmod o-w a.txt。

[cosmos@localhost chapter2]$ chmod o-w a.txt

[cosmos@localhost chapter2]$ ls -l a.txt

-rw-rw-r--.1 cosmos cosmos 12 09-25 09:20 a.txt

文件的用户权限属性可用9位表示,每位可用0或者1表示,1表示具有对应的权限,0表示没有该权限,如图1.16所示。

图1.16 文件权限

一般可将对应的三位二进制码转换为8进制,如文件拥有者的权限为111表示具有读写执行权限,其对应的八进制表示为7,而具有读与执行权限的101的八进制表示为5等。因此,chmod 777 a.txt表示所有的用户拥有读写执行权限。

[cosmos@localhost chapter2]$ ls -l a.txt

-rw-rw-r--.1 cosmos cosmos 12 09-25 09:20 a.txt

[cosmos@localhost chapter2]$ chmod 777 a.txt

[cosmos@localhost chapter2]$ ls -l a.txt

-rwxrwxrwx.1 cosmos cosmos 12 09-25 09:20 a.txt

下面是关于chmod用法的一个例子。假定demo.c最初具有这样的权限rwxrwxrwx,连续操作见表1.2。

表1.2 chmod用法

(5)修改文件拥有者命令chown。

功能:改变文件拥有者。

语法:

chown 新的所有者的用户账号 文件或目录名称

描述:如果有一个名为linux的文件,其拥有者为owner1,若要将该文件的所有者改为owner2,则可用chown来完成此功能,当改变完文件拥有者之后,owner1对此文件的权限只能根据该文件的属性而决定。例如,如果owner1与owner2同属一个组,则其权限由该文件的组权限属性决定,否则,由其他用户权限属性决定。我们可以通过“change owner”的缩写理解该命令。

[root@localhost chapter2]# ls -l aa.c

-rw-rw-r--.1 cosmos cosmos 33 07-21 00:22 aa.c

[root@localhost chapter2]# chown root aa.c

[root@localhost chapter2]# ls -l aa.c

-rw-rw-r--.1 root cosmos 33 07-21 00:22 aa.c

(6)修改密码命令。

功能:当前用户修改密码。

用法:

passwd

用户在重复输入新的密码两次后,即可成功修改密码。

4.磁盘管理命令

(1)du命令

功能:查看目录占用空间大小命令。该命令逐级进入指定目录下的每一个子目录,并显示该目录占用文件系统数据块的情况。我们可以利用“disk usage”理解该命令。

语法:

du [选项] [文件名称]

参数-a表示也可以统计文件的大小,如果不用该参数则表示只统计目录大小。

[root@localhost chapter2]# du

24 .

[root@localhost chapter2]# du -a

4  ./a.txt

4  ./2.6.c

8  ./2.6

4  ./aa.c

24

(2)df命令

功能:显示磁盘的使用率及剩余空间。

语法:

df [可选参数]

例如,df -k 显示系统所配置的每一个磁盘当前被占用的空间大小。

[root@localhost chapter2]# df

文件系统     1K-块    已用   可用   已用%          挂载点

/dev/sda3    4436044  3396164 994856  78% /

/dev/sda1    198337   21253  166844  12% /boot

tmpfs      158156   464   157692  1% /dev/shm

/dev/sr0     54230   54230  0    100% /media/VMware Tools-7.9.3

5.进程管理命令

(1)ps命令

功能:查询正在执行的进程。

语法:

ps [可选参数]

描述:ps命令提供Linux系统中正在发生的事情的一个快照,能显示正在执行进程的进程号、发出该命令的终端、所使用的CPU时间以及正在执行的命令。

例如,$ps aux 显示所有包含其他使用者的进程。

这里参数a显示所有用户的所有进程(包括其他用户);u按用户名和启动时间的顺序来显示进程;x 显示用户控制的进程,当与a一起使用时,显示所有的进程。

[cosmos@localhost chapter2]$ ps aux

USER   PID %CPU %MEM  VSZ RSS TTY  STAT START TIME COMMAND

root    1 0.0 0.1  2012 620 ?   Ss 07:28 0:03 /sbin/init

root    2 0.0 0.0    0  0 ?   S< 07:28 0:00 [kthreadd]

root    3 0.0 0.0    0  0 ?   S< 07:28 0:00 [migration/0]

root    4 0.0 0.0    0  0 ?   S< 07:28 0:00 [ksoftirqd/0]

(2)kill命令

功能:向正在执行的进程发送指定的信号。

语法:

kill [参数] 进程ID集合

常用的参数:-l列出系统中的信号名称;-s signal确定被发送的信号,该信号可以是信号名称或者数字。例如,kill -9 PID表示无条件销毁进程号为PID的进程。当然我们还可以发送其他信号比如^C、^Z、Quit等。这里的9就是指下例信号列表中的SIGKILL信号。

[cosmos@localhost chapter2]$ kill -l

(1) SIGHUP  (2) SIGINT  (3) SIGQUIT (4) SIGILL  (5) SIGTRAP

(6) SIGABRT (7) SIGBUS  (8) SIGFPE  (9) SIGKILL (10) SIGUSR1

(11) SIGSEGV (12) SIGUSR2 (13) SIGPIPE (14) SIGALRM (15) SIGTERM

其中的进程ID可以有如下5种情况:

n>0   具有进程号n的进程将会收到信号。

0    当前进程组中的所有进程将会收到信号。

-1    所有进程号大于1的进程将会收到信号。

-n    这里n>1,在进程号n中的所有进程将会收到信号。

commandname 通过调用该命令名称的进程都将会收到信号,这是因为同一个程序可以运行多次,从而产生不同的进程。

(3)pstree命令

该命令可以以树的形式显示进程之间的父子关系,例如:

pstree

init─┬─anacron

├─apmd

├─atd

├─bdflush

├─crond

├─kswapd

├─kupdated

├─login───bash───pstree

├─mdrecoveryd

├─5*[mingetty]

├─portmap

├─rpc.statd

├─2*[sendmail]

├─sshd

├─syslogd

└─xinetd

从中可看出所有进程都是init的子进程,而其中bash是login的子进程,而pstree命令又是bash的子进程。

(4)进程的启动

启动一个进程主要有如下两种方式。

①手工启动

a.前台启动:在终端中直接输入命令启动程序,在该方式下,该程序独占该终端,此时,无法再输入新的命令直到该程序执行结束。

b.后台启动:在命令后输入“&”操作符,例如cp oldfile/backup/newfile &,此时如果文件较大,则文件复制在后台继续操作,而执行该命令的终端用户可继续输入其他命令。

②调度启动

at:在指定时刻执行指定的命令序列。

cron:周期性执行指定程序。

cron命令可周期性地执行任务,而at只能在指定时间执行一次任务。cron可实现任务的自动化周期执行,它通过/etc/crontab配置文件或者crontab命令实现。在执行cron功能之前,首先必须确定crond进程是否启动,可通过命令ps -ef|grep crond查找当前系统是否已经启动crond进程,如果未启动,可通过如下命令实现对该进程的启动、停止、重启和重新加载。

/sbin/service crond start

/sbin/service crond stop

/sbin/service crond restart

/sbin/service crond reload

crontab文件的一个实例如下所示:

SHELL=/bin/bash

PATH=/sbin:/bin:/usr/sbin:/usr/bin

MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给该账号

HOME=/ //使用者运行的路径,这里是根目录

#每小时执行/etc/cron.hourly内的脚本

* * * * * user-name command to be executed

前面的5个*代表不同的周期,其含义分别如下:

第1个表示分钟,数值为0~59的任意整数;

第2个表示小时,数值为0~23的任意整数;

第3个表示日期,数值为1~31的任意整数;

第4个表示月份,数值为1~12的任意整数;

第5个表示星期,数值为0~7的任意整数,0或7代表星期日。

下面给一些具体的示例:

0 6 * * * root echo "Good morning." //表示在每天早上的6点在屏幕上输出“Good morning.”

5 * * * * root ls 指定每小时的第5分钟执行一次ls命令

30 5 * * * root ls 指定每天的 5:30执行ls命令

30 7 8 * * root ls 指定每月8号的7:30执行ls命令

30 5 8 6 * root ls 指定每年的6月8日5:30执行ls命令

下面来看at的用法。at命令的用法如下:

at [参数][时间]

其具体功能为:在一个指定的时间执行一个指定任务,只能执行一次,且需要开启atd进程。可通过命令ps -ef | grep atd 搜索进程atd是否正在运行。如果没有运行,可通过命令/etc/init.d/atd start or restart启动atd进程。at命令的主要参数如下:

-m 当指定的任务被完成之后,将给用户发送邮件,即使没有标准输出。

-I atq的别名。

-d atrm的别名。

-v 显示任务将被执行的时间。

-c 打印任务的内容到标准输出。

-V 显示版本信息。

-q<列队>使用指定的列队。

-f<文件>从指定文件读入任务而不是从标准输入读入。

-t<时间参数>以时间参数的形式提交要运行的任务。

下面通过几个实例介绍at命令的用法。

实例1:三天后的下午5点执行/bin/ls。

命令:

at 5pm+3 days

输出:

[cosmos@localhost~]#at 5pm+3 days

at>/bin/ls          //输入要执行的命令

at> <EOT>          //结束at命令

job 7 at 2013-01-08 17:00  //at命令的结果,表示在何时执行任务

实例2:明天17点钟,输出时间到指定文件内。

命令:

at 17:20 tomorrow

输出:

[cosmos@localhost~]#at 17:20 tomorrow

at>date>/root/2013.log

at><EOT>

job at 2013-01-06 17:20

实例3:计划任务设定后,在没有执行之前可用atq命令来查看系统没有执行的工作任务。atq可以“at queue”的意思来理解,表示尚在队列等待执行的任务。

命令:

atq

输出:

[cosmos@localhost~]#atq //输出尚未执行的任务 ,其中,第一行的8和第二行的7表示任务的编号

8 2013-01-06 17:20 a cosmos

7 2013-01-08 17:00 a cosmos

[cosmos@localhost ~]#

实例4:删除已经设置的任务。

命令:

atrm 7 //表示删除编号为7的任务。可以“at rm”的意思来理解该命令,其中at表示待执行的任务,rm表示删除

输出:

[cosmos@localhost ~]# atq

8   2013-01-06 17:20 a cosmos

7   2013-01-08 17:00 a cosmos

[cosmos@localhost ~]# atrm 7

[cosmos @localhost ~]# atq

8   2013-01-06 17:20 a cosmos //编号为7的任务已经被删除

[cosmos @localhost ~]#

实例5:显示已经设置的任务内容。

命令:

at -c 8 //表示显示编号为8的任务的主要内容

输出:

[cosmos @localhost ~]# at -c 8

#!/bin/sh

# atrun uid=0 gid=0

# mail cosmos 0

umask 22

date >/root/2013.log

[cosmos @localhost ~]#