linux
Download
Skip this Video
Download Presentation
Linux 操作系统

Loading in 2 Seconds...

play fullscreen
1 / 100

Linux 操作系统 - PowerPoint PPT Presentation


  • 135 Views
  • Uploaded on

Linux 操作系统. 主讲: 裘江南 Qiu\_jn@163.net 助教: 王福利 4707983. 第 3 章 Linux 的基本命令. 本章要点. 文件系统的结构 文件的所有权和权限 基本命令 vi 的使用 软件包的安装和加载 启动过程.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Linux 操作系统' - robert


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
linux

Linux操作系统

主讲:裘江南Qiu_jn@163.net

助教:王福利4707983

3 linux
第3章 Linux的基本命令

本章要点

  • 文件系统的结构
  • 文件的所有权和权限
  • 基本命令
  • vi的使用
  • 软件包的安装和加载
  • 启动过程
3 2 linux 1
linux文件系统控制文件和目录中的信息以何种方式存在磁盘及其他辅助介质上。它控制每个用户可以访问何种信息及如何访问。因此它是增强linux系统安全性的最基本的工具之一。 存储在linux文件系统中的信息被安排成目录和文件的树形结构。树形结构由在一个总目录中的目录和子目录构成,总目录被称之为根目录(root)。每一个目录内可以包含子目录和其他项目,如文件、指向其他文件系统的指针(符号链接)、表示设备的逻 辑名称(如/dev/tty)以及其他的类型(proc等).

文件:linux系统中每一个用户可访问的事物均可以被表示为文件系统中的一个“文件”——包括进程和网络连接。每一个文件至少具有一个文件名,一个拥有者,以及访问权限 和其他的属性。这些属性被存放在文件系统的i节点(index node)上,这是基本文件系统的条目。i节点存放除文件名外有关文件系统的任何东西。只有文件名存放在目录内,并通过指针与i节点联系。

文件名是文件的标识,它由字母、数字、下划线和圆点组成的字符串来构成。用户应该选择有意义的文件名。Linux要求文件名的长度限制在255个字符以内。

3.2 Linux的文件系统简介(1)

3 2 linux 2
Linux系统中有四种基本的文件类型:

1. 普通文件 普通文件是用户最经常面对的文件。它又分为文本文件和二进制文件。

1)文本文件:这类文件以文本的ASCII码形式存储在计算机中。它是以"行"为基本结构的一种信息组织和存储方式。

2)二进制文件:这类文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们,只有通过相应的软件才能将其显示出来。二进制文件一般是可执行程序、图形、图像、声音等等。

2. 目录文件 设计目录文件的主要目的是用于管理和组织系统中的大量文件。它存储一组相关文件的位置、大小等与文件有关的信息。目录文件往往简称为目录。

3. 设备文件 设备文件是Linux系统很重要的一个特色。Linux系统把每一个I/O设备都看成一个文件,与普通文件一样处理,这样可以使文件与设备的操作尽可能统一。从用户的角度来看,对I/O设备的使用和一般文件的使用一样,不必了解I/O设备的细节。设备文件可以细分为块设备文件和字符设备文件。前者的存取是以一个个字符块为单位的,后者则是以单个字符为单位的。

4.链接文件 给系统中已有的某个文件指定另外一个可用于访问它的名称

3.2 Linux的文件系统简介(2)

3 2 linux 3
目录:目录是文件系统中的一个专门的条目。一个目录实际上是文件名和i节点的列表。文件名可以由任意字符的字符串组成,但不能包含/和null字符。 与文件名相联系的是数字指针,它实际上是一个i节点在磁盘上的索引。一个i节点包 含文件系统中一个文件条目的信息。 目录中只包含文件名和i节点索引数,不存放任何需要保护的信息,其作用类似一个文件名与i节点之间的映射关系的简单的关系数据库。多个文件可以指向同一个i节点。 同样多个目录也可以指向同一个i节点。 rm不一定能真正删除一个文件,当i节点的连接值为0时才真正删除文件。 每一个目录都包含有. 和 ..两个目录。

I. 工作目录与用户主目录

  从逻辑上讲,用户在登录到Linux系统中之后,每时每刻都“处在”某个目录之中,此目录被称作工作目录或当前目录(Working Directory)。用户主目录是系统管理员增加用户时建立起来的(以后也可以改变),每个用户都有自己的主目录,不同用户的主目录一般互不相同。 通常与用户的登录名相同。用户可以通过一个“~”字符来引用自己的主目录。

例如 cat ~/class/software_1

II. 路径

路径又分相对路径和绝对路径。 绝对路径是指从"根"开始的路径,也称为完全路径;相对路径是从用户工作目录开始的路径。

3.2 Linux的文件系统简介(3)

3 2 linux 11
Linux系统通过目录将系统中所有的文件分级、分层组织在一起,形成了Linux文件系统的树型层次结构。

/ This is the root directory. This is where the whole tree starts.

/bin This directory contains executable programs which are needed in single user mode and to bring the system up or repair it.

/boot Contains static files for the boot loader. This directory only holds the files which are needed during the boot process. The map installer and configuration files should go to /sbin and /etc.

/dev Special or device files, which refer to physical devices.(mknod)

/dos If both MS-DOS and Linux are run on one computer, this is a typical place to mount a DOS file system.

/etc Contains configuration files which are local to the machine. Some larger software packages, like X11,can have their own subdirectories below /etc.Site-wide configuration files may be placed here or in /usr/etc. Nevertheless, programs should always look for these files in /etc and you may have links for these files to /usr/etc.

3.2 Linux目录结构(1)

3 2 linux 21
/etc/skel When a new user account is created, files from this directory are usually copied into the user's home directory.

/etc/X11 Configuration files for the X11 window system.

/home On machines with home directories for users, these are usually beneath this directory, directly or not. The structure of this directory depends on local admininstration decisions.

/lib This directory should hold those shared libraries that are necessary to boot the system and to run the commands in the root filesystem.

/mnt is a mount point for temporarily mounted filesystems

/proc This is a mount point for the proc filesystem, which provides information about running processes and the kernel.This pseudo-file system is described in more detail in proc(5).

/sbin Like /bin, this directory holds commands needed to boot the system, but which are usually not executed by normal users.

/tmp This directory contains temporary files which may be deleted with no notice, such as by a regular job or at system boot up.

3.2 Linux目录结构(2)

3 2 linux 31
/usr This directory is usually mounted from a separate partition. It should hold only sharable, read-only data, so that it can be mounted by various machines running Linux.

/usr/X11R6 The X-Window system, version 11 release 6.

/usr/X11R6/bin Binaries which belong to the X-Windows system;often, there is a symbolic link from the more traditional /usr/bin/X11 to here.

/usr/X11R6/lib Data files associated with the X-Windows system.

/usr/X11R6/lib/X11 These contain miscellaneous files needed to run X;Often, there is a symbolic link from /usr/lib/X11 to this directory.

/usr/X11R6/include/X11 Contains include files needed for compiling programs using the X11 window system. Often, there is a symbolic link from /usr/inlcude/X11 to this directory.

/usr/bin This is the primary directory for executable programs. Most programs executed by normal users which are not needed for booting or for repairing the system and which are not installed locally should be placed in this directory.

3.2 Linux目录结构(3)

3 2 linux 4
/usr/bin/X11 is the traditional place to look for X11 executables; on Linux, it usually is a symbolic link to /usr/X11R6/bin.

/usr/dict This directory holds files containing word lists for spell checkers.

/usr/etc Site-wide configuration files to be shared between several machines may be stored in this directory.However, commands should always reference those files using the /etc directory. Links from files in /etc should point to the appropriate files in /usr/etc.

/usr/include Include files for the C compiler.

/usr/include/X11 Include files for the C compiler and the X-Windows system. This is usually a symbolic link to /usr/X11R6/include/X11.

/usr/include/asm Include files which declare some assembler functions.This used to be a symbolic link to /usr/src/linux/include/asm.

/usr/include/linux This contains information which may change from system release to system release and used to be a symbolic link to /usr/src/linux/include/linux to get at operating system specific information.

3.2 Linux目录结构(4)

3 2 linux 5
/usr/include/g++ Include files to use with the GNU C++ compiler.

/usr/lib Object libraries, including dynamic libraries, plus some executables which usually are not invoked directly. More complicated programs may have whole subdirectories there.

/usr/lib/X11 The usual place for data files associated with X programs, and configuration files for the X system itself. On Linux, it usually is a symbolic link to /usr/X11R6/lib/X11.

/usr/lib/gcc-lib contains executables and include files for the GNU C compiler, gcc(1).

/usr/lib/groff Files for the GNU groff document formatting system.

/usr/lib/uucp Files for uucp(1).

/usr/lib/zoneinfo Files for timezone information.

/usr/local This is where programs which are local to the site typically go.

/usr/local/bin Binaries for programs local to the site go there.

/usr/local/doc Local documentation

3.2 Linux目录结构(5)

3 2 linux 6
/usr/local/etc Configuration files associated with locally installed programs go there.

/usr/local/lib Files associated with locally installed programs go there.

/usr/local/info Info page associated with locally installed program go there.

/usr/local/man Manpages associated with locally installed programs go there.

/usr/local/sbin Locally installed programs for system admininstration.

/usr/local/src Source code for locally installed software.

/usr/man Manpages go in there, into their subdirectories.

/usr/man//man[1-9] These directories contain manual pages which are in source code form. Systems which use a unique language and code set for all manual pages may omit the substring.

/usr/sbin This directories contains program binaries for system admininstration which are not essentail for the boot process, for mounting /usr, or for system repair.

/usr/share This directory contains subdirectories with specific application data, that can be shared among different architectures of the same OS.

3.2 Linux目录结构(6)

3 2 linux 7
/usr/src Source files for different parts of the system, included with some packages for reference purposes. Don't work here with your own projects, as files below /usr should be read-only except when installing software.

/usr/src/linux This has always been the traditional place where kernel sources were unpacked. This was important on systems that /usr/include/linux was a symlink here.You should probably use another directory for building the kernel now.

/usr/tmp An alternative place to store temporary files; This should be a link to /var/tmp. This link is present only for compatibility reasons and shouldn't be used.

/var This directory contains files which may change in size, such as spool and log files.

/var/adm This directory is superseded by /var/log and should be a symbolic link to /var/log.

/var/backups This directory is used to save backup copies of important system files.

/var/catman/cat[1-9] These directories contain preformatted manual pages according to their manpage section.

3.2 Linux目录结构(7)

3 2 linux 8
/var/lock Lock files are placed in this directory.The naming convention for device lock files is LCK.. where is the device's name in the filesystem. The format used is that of HDU UUCP lock files, i.e. lock files contain a PID as a 10-byte ASCII decimal number, followed by a newline character.

/var/log Miscelanous log files.

/var/preserve This is where vi(1) saves edit sessions so they can be restored later.

/var/run Run-time variable files, like files holding proceidentifiers (PIDs) and logged user information (utmp). Files in this directory are usually cleared when the system boots.

/var/spool Spooled (or queued) files for various programs.

/var/spool/at Spooled jobs for at(1).

/var/spool/cron Spooled jobs for cron(1).

/var/spool/lpd Spooled files for printing.

3.2 Linux目录结构(8)

3 2 linux 9
/var/spool/mail Users' mailboxes.

/var/spool/smail Spooled files for the smail(1) mail delivery program.

/var/spool/news Spool directory for the news subsystem.

/var/spool/uucp Spooled files for uucp(1).

/var/tmp Like /tmp, this directory holds temporary files stored for an unspecified duration.

3.2 Linux目录结构(9)

/ 根目录 /bin 系统最小命令集

/sbin 为系统管理员所用 /dev 设备文件目录 /etc 关键的启动文件和配置文件 /home 用户主目录 /lib C编译器的例程库 /mnt 挂用其它文件系统的目录 /proc 所有运行中进程的映像 /root root用户根目录 /tmp 每次重启均会消失的临时文件 /usr/bin 可执行文件

/usr/doc linux How-to /usr/etc 系统维护命令 /usr/games 游戏,一样很精彩 /usr/include C 程序头文件 /usr/info 版本信息 /usr/lib 标准的 UNIX 程序支持文件 /usr/local 本地目录 /usr/man 在线手册 /usr/src 源文件目录

3 3 1
Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

$ ls -l

total 1772

-rw-r--r-- 1 qiujn qiujn 745559 Mar 6 2001 anonftp-3.0-9.i386.rpm

-rw-rw-r-- 1 qiujn qiujn 15167 Mar 26 01:59 l

-rw-rw-r-- 1 root root 154806 Oct 6 14:20 wget-1.5.3-4.i386.rpm

文件的类型:

  • - 表示普通文件。
  • b 表示块设备文件
  • c 表示字符设备文件
  • d 表示目录
  • l 表示符号链接

文件的访问权限:

  • r(读):表示只允许读其内容。
  • w(写):表示允许对其做任何的更改操作。
  • x(执行):表示允许将该文件作为一个程序执行。
  • - : 没有设置权限。

3.3 文件的所有权和权限(1)

3 3 2
s :当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组 ID)。
  • t :设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,在该文件执行后,指向其正文段(程序的代码)的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。

目录的访问权限:

  • r(读):表示可以列出目录中有那些文件。
  • w(写):表示可以在该目录中添加删除文件。
  • x(执行):可以进入,列出该目录中下的文件的相关内容,r和x共用。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为:

  • 文件属主的读、写和执行权限。
  • 与属主同组的用户的读、写和执行权限。
  • 系统中其他用户的读、写和执行权限。

3.3 文件的所有权和权限(2)

3 3 3
可以利用chmod、chown、chgrp命令来更改一个文件的访问权限。

chmod 命令:用于改变文件或目录的访问权限。有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

1. 文字设定法

chmod [who] [+ | - | =] [mode] 文件名  

  • 操作对象who可是下述字母中的任一个或者它们的组合:

u 表示“用户(user)”,即文件或目录的所有者。

g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。

o 表示“其他(others)用户”。

a 表示“所有(all)用户”。它是系统默认值。

  • 操作符号可以是:

+ 添加某个权限。

- 取消某个权限。

= 赋予给定权限并取消其他所有权限(如果有的话)。

3.3 文件的所有权和权限(3)

3 3 4
设置mode所表示的权限可用下述字母的任意组合:

r 可读。

w 可写。

x 可执行。

X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。

s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。

t 保存程序的文本到交换设备上。

u 与文件属主拥有一样的权限。

g 与和文件属主同组的用户拥有一样的权限。

o 与其他用户拥有一样的权限。

  • 文件名:以空格分开的要改变权限的文件列表,支持通配符。

例如:

chmod g+r,o+r example

3.3 文件的所有权和权限(4)

3 3 5
2. 数字设定法

属性的含义: 0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限, 然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。8进制的文件属性

4000 SUID

2000 SGID

1000 sticky

0400 -r--------

0200 --w-------

0100 ---x------

0040 ----r-----

0020 -----w----

0010 ------x---

0004 -------r–

0002 --------w-

0001 ---------x

数字设定法的一般形式为:

chmod [mode] 文件名

$ chmod 644 mm.txt

-rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt

3.3 文件的所有权和权限(5)

3 3 6
chgrp命令:改变文件或目录所属的组。

  语法:chgrp [选项] group filename

  该命令改变指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。

  该命令的各选项含义为:

- R 递归式地改变指定目录及其下的所有子目录和文件的属组。

  例1:$ chgrp - R book /opt/local /book

chown 命令:更改某个文件或目录的属主和属组。

  语法:chown [选项] 用户或组 文件

  说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。

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

- R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。

- v 显示chown命令所做的工作。

  例1:把文件shiyan.c的所有者改为wang。

$ chown wang shiyan.c

  例2:把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users。

$ chown - R wang.users /his

3.3 文件的所有权和权限(6)

3 4 1
mkdir命令:创建一个目录(类似DOS下的md命令)。

  语法:mkdir [选项] dirname

  说明:该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中 (dirname的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或 文件名称。

  命令中各选项的含义为:

- m 对新建目录设置存取权限。也可以用chmod命令设置。

- p 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后, 系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。

 例如:在当前目录中建立inin 和inin下的/mail目录,也就是连续建两个目录。

$ mkdir - p - m 700 ./inin/mail/

  该命令的执行结果是在当前目录中创建嵌套的目录层次inin /mail,权限设置为只 有文件主有读、写和执行权限。

3.4 目录的创建与删除命令(1)

3 4 2
rmdir 命令:删除空目录。

  语法:rmdir [选项] dirname

  说明:dirname表示目录名。该命令从一个目录中删除一个或多个子目录项。需要 特别注意的是,一个目录被删除之前必须是空的。(注意,rm - r dir命令可代替 rmdir,但是有很大危险性。)删除某目录时也必须具有对父目录的写权限。

  命令中各选项的含义为:

- p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应 的信息。

  例如:

$ rmdir - p /usr/xu/txt 将/usr/xu/txt目录删除。

  改变工作目录、显示目录内容命令

3.4 目录的创建与删除命令(2)

3 4 3
cd 命令 :改变工作目录。

  语法:cd [directory]

  说明:该命令将当前目录改变至directory所指定的目录。若没有指定directory, 则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。

  该命令可以使用通配符

  例如:假设用户当前目录是:/home/xu,现需要更换到/home/xu/pro目录中,

$ cd pro

pwd 命令:用户可以执行pwd命令来显示工作目录。

语法:pwd

  说明:此命令显示出当前工作目录的绝对路径。

  例:

$ pwd /home/xu 显示的路径名为/home/xu,每个目录名都用“/”隔开,根目录以开头的“/”表 示。

3.4 目录的创建与删除命令(3)

3 4 4
ls 命令:ls是英文单词list的简写,其功能为列出目录的内容。该命令类似于DOS下的dir命令。

  语法:ls [选项] [目录或是文件]

  默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。

  命令中各选项的含义如下:

- a 显示指定目录下所有子目录与文件,包括隐藏文件。

- A 显示指定目录下所有子目录与文件,包括隐藏文件。但不列出“.”和 “..”。

- b 对文件名中的不可显示字符用八进制逃逸字符显示。

- c 按文件的修改时间排序。

- C 分成多列显示各项。

- d 如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使 用,以得到目录的详细信息。

- f 不排序。该选项将使lts选项失效,并使aU选项有效。

- F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记 “@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。

- i 在输出的第一列显示文件的i节点号。

3.4 目录的创建与删除命令(4)

3 4 5
- l 以长格式来显示文件的详细信息。这个选项最常用。

  每行列出的信息依次是:文件类型与权限、链接数、文件属主、文件属组、文件大小、建立或最近修改的时间、名字。

 对于符号链接文件,显示的文件名之后有“-> ”和引用文件路径名。

 对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。

  目录中的总块数显示在长格式列表的开头,其中包含间接块。

total 28

lrwxrwxrwx 1 root root 2 Feb 2 2001 rview -> vi

-rwxr-xr-x 1 root root 47260 Jul 13 2000 sed

drwxr-xr-x 2 root root 2048 Feb 2 2001 bin

brw-rw---- 1 root disk 3, 1 Aug 24 2000 hda1

- L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。

- m 输出按字符流格式,文件跨页显示,以逗号分开。

- n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和 GID号来表示,而不是实际的名称。

- o 与l选项相同,只是不显示拥有者信息。

- p 在目录后面加一个“/”。

- q 将文件名中的不可显示字符用“?”代替。

- r 按字母逆序或最早优先的顺序显示输出结果。

3.4 目录的创建与删除命令(5)

3 4 6
- R 递归式地显示指定目录的各个子目录中的文件。

- s 给出每个目录项所用的块数,包括间接块。

- t 显示时按修改时间(最近优先)而不是按名字排序。若文件修改时间相同,则按字典顺序。修改时间取决于是否使用了c或u选顶。缺省的时间标记是最后一次修改时间。

- u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。即将-t的时间 标记修改为最后一次访问的时间。

- x 按行显示出各排序项的信息。

 例1:用长格式列出某个目录下所有的文件包括隐藏文件和它们的i节点号。并把文 件属主和属组以UID号和GID号的形式显示。

$ 1s -1ainF /home/xu tota1 584 399672

drwxr-xr-x l2 0 0 l024 Nov 30 22:07 ./ 333907

drwxr-xr-x 15 9999 99 l024 Ju1 29 07:08 ../ 39980l

-rw------- l 0 0 0 Jun 2 2:09 .Xauthority 399679

-rw-r--r-- 1 505 l00 4343 Jul 29 22:20 .bash-hist0ry 30l763

drwxr----- 2 505 100 l024 May 17 06:36 .e1m/ ……

3.4 目录的创建与删除命令(6)

3 5 1
cp命令  将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的copy命令。  语法: cp [选项] 源文件或目录 目标文件或目录  该命令的各选项含义如下:- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。- d 拷贝时保留链接。- f 删除已经存在的目标文件而不提示。 - i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。

- p 复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。- l 不作拷贝,只是链接文件。 需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。$ cp - i exam1.c /usr/wang/shiyan1.c若不希望重新命名,可以使用下面的命令:$ cp exam1.c /usr/ wang/$ cp - r /usr/xu/ /usr/liu/将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中。

3.5 文件的复制、删除和移动 (1)

3 5 2
mv命令   用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。  语法:mv [选项] 源文件或目录 目标文件或目录  命令中各选项的含义为:- I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答y或n,这样可以避免误覆盖文件。- f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示,指定此选项后,i选项将不再起作用。如果所给目标文件(不是目录)已存在,此时该文件的内容将被新文件覆盖。为防止用户在不经意的情况下用mv命令破坏另一个文件,建议用户在使用mv命令移动文件时,最好使用i选项。需要注意的是,mv与cp的结果不同。mv好象文件“搬家”,文件个数并末增加,而cp对文件进行复制,文件个数增加了。  例1:将/usr/xu中的所有文件移到当前目录(用“.”表示)中:$ mv /usr/xu/ * .  例2:将文件wch.txt重命名为wjz.doc $ mv wch.txt wjz.doc

3.5 文件的复制、删除和移动 (2)

3 5 3
rm命令

该命令的功能为删除一个目录中的一个或多个文件或目录,它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件,只是删除了链接,原有文件均保持不变。  语法:rm [选项] 文件…

说明:如果没有使用- r选项,则rm不会删除目录。  该命令的各选项含义如下:- f 忽略不存在的文件,从不给出提示。- r 指示rm将参数中列出的全部目录和子目录均递归地删除。- i 进行交互式删除。  使用rm命令要格外小心。为了防止误删的情况发生,可以使用rm命令中的 i选项来确认要删除的每个文件。如果用户输入y,文件将被删除。如果输入任何其它东西,文件将被保留。在下一个例子中,用户要删除文件test和example。然后会被要求对每个文件进行确认。用户最终决定删除example文件,保留test文件。$ rm -i test exampleRemove test ?nRemove example ?y

3.5 文件的复制、删除和移动 (3)

3 6 1
1.cat命令:

功能1:在标准输出上显示文件。

  语法:cat [ - 选项 ] 文件

cat命令中各个选项的含义为:

- v 用一种特殊形式显示控制字符,LFD与TAB除外。

  加了- v选项后,- T和- E选项将起作用。其中:

- T 将TAB显示为“Ù I”。该选项需要与- v选项一起使用。即如果没有使用- v选项,则这个选项将被忽略。

- E 在每行的末尾显示一个$符。该选项需要与- v选项一起使用。

- u 输出不经过缓冲区。

- A 等于- vET。

- t 等于- vT。

- e 等于- vE。

  例1:$ cat - A exam2.txt (如果文件中含有特殊字符的话,一并显示。)

功能2:连接两个或多个文件

  说明:该命令功能之二是用来将两个或多个文件连接起来。

  例2:$ cat file1 file2 > file3

3.6 显示文件内容命令(1)

3 6 2
2.more命令

  功能:在终端屏幕按屏显示文本文件。

  语法: more [ - 选项 ] 文件

  说明: 该命令一次显示一屏文本,显示满之后,停下来,并在终端底部打印出- - More- - ,系统还将同时显示出已显示文本占全部文本的百分比,若要继续显示,按回车或空格键即可。

more命令中各个选项的含义为:

- p 显示下一屏之前先清屏。

- c 作用同- p基本一样。

- d 在每屏的底部显示更友好的提示信息:

- - More- - (XX%)[Press space to contiune , ‘q’ to quit . ]

  而且若用户输入了-个错误命令则显示出错信息,而不是简单地鸣响终端。

- l 不处理< Ctrl+l >(换页符)。如果没有给出这个选项,则more命令在显示了一个包含有< Ctrl+l >字符的行后将暂停显示,并等待接收命令。

- s 文件中连续的空白行压缩成一个空白行显示。

3.6显示文件内容命令(2)

3 6 3
  执行中的命令

more在显示完一屏内容之后,将停下来等待用户输入某个命令。下表列出了more指令在执行中用到的一些常用命令。

b B 回到上次搜索的地方 q或Q 退出more。  = 显示当前行号。

v 在当前行启动/usr/bin/vi对之进行编辑修改。

h 显示各命令的帮助信息。

i/pattern 查找匹配该模式的第i行。预设值为1。

in 查找符合表达式的倒数i行。预设值为1。

! 或 :! 在子shell中执行命令。i:n 在命令行中指定了多个文件名的情况下,可用此命令使之显示第i个文件,若i过大(出界),则显示文件名列表中的最后一个文件。

i:p 在命令行中指定了多个文件名的情况下,可用此命令使之显示倒数第i个文件。若i过大(出界),则显示第一个文件。

i:f 显示当前文件的文件名和行数。

·重复上次键入的命令。

例1:显示一个文件的内容,要求每十行显示一次,且显示之前先清屏。$ more - c - 10 example1.c

3.6显示文件内容命令(3)

3 6 4
3.less命令

less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既可以向前(b)又可以向后(z)翻阅文件。

4.head命令:用head命令只显示文件或标准输入的头几行。

  语法:head [- n ] 文件

  功能:显示指定文件的前若干行。

  说明:该命令显示每个指定文件的前面n行。若没有给出n值,缺省设置为10。如果没有指定文件,head就从标准输入读取。

例如显示文件example.c的前3行。

$ head - 3 example.c

5.tail命令:如果用户想查看文件的尾部,可以使用tail命令。

  语法:tail [+ / - num ] [参数] 文件

  说明:该命令显示一个文件的指定内容。它把指定文件的指定显示范围内的内容显示在标准输出上。如果没有给定文件名,则使用标准输入文件。

tail命令中各个选项的含义为:

  +num 从第num行以后开始显示。

- num 从距文件尾num行处开始显示。如果省略num参数,系统默认值为10。

  例如:将显示文件example的最后4行 

$ tail -4 example

3.6显示文件内容命令(4)

3 6 5
6.od命令

  用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

  语法:od [选项] 文件…

  命令中各选项的含义:

- A 指定地址基数,包括:

d 十进制

o 八进制(系统默认值)

x 十六进制

n 不打印位移值

- t 指定数据的显示格式,主要的参数有:

c ASCII字符或反斜杠序列

d 有符号十进制数

f 浮点数

o 八进制(系统默认值为02)

u 无符号十进制数

x 十六进制数

  除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。od命令系统默认的显示方式是八进制。

od - Ax - tcx1 wh5

3.6显示文件内容命令(5)

3 7 1
1.grep、fgrep 和 egrep命令这组命令以指定模式搜索文件,并通知用户在什幺文件中搜索到与指定的模式匹配的字符串,并打印出所有包含该字符串的文本行,在该文本行的最前面是该行所在的文件名。
  • grep命令一次只能搜索一个指定的模式,Grep命令的搜索功能比fgrep强大;
  • egrep命令检索扩展的正则表达式(包括表达式组和可选项);
  • fgrep命令检索固定字符串,它不识别正则表达式,是快速搜索命令。

语法:grep [选项] [查找模式] [文件名1,文件名2,……] egrep [选项] [查找模式] [文件名1,文件名2,……] fgrep [选项] [查找模式] [文件名1,文件名2,……]这组命令各选项的含义为:- E 每个模式作为一个扩展的正则表达式对待。- F 每个模式作为一组固定字符串对待(以新行分隔),而不作为正则表达式。- b在输出的每一行前显示包含匹配字符串的行在文件中的字节偏移量。- c 只显示匹配行的数量。- i 比较时不区分大小写。- h 在查找多个文件时,指示grep不要将文件名加入到输出之前。

3.7 文件内容查询命令 (1)

3 7 2
l 显示首次匹配串所在的文件名并用换行符将其隔开。当在某文件中多次出现匹配串时,不重复显示此文件名。- n 在输出前加上匹配串所在行的行号(文件首行行号为1)。- v 只显示不包含匹配串的行。- x 只显示整行严格匹配的行。- e expression 指定检索使用的模式。用于防止以“-”开头的模式被解释为命令选项。- f expfile 从expfile文件中获取要搜索的模式,
  • 例1:grep命令在文件example中搜索模式“text file”。$ grep ’text file’ example例2:搜索并显示所有包含goto语句的代码行:
  • $ grep goto *.c例3 从文件mypats中读取要搜索的模式。$ cat mypatseditorcreate$ grep -f mypats exam

3.7 文件内容查询命令 (2)

3 7 3
2.find命令  功能:在目录结构中搜索文件,并执行指定的操作。  语法:find 起始目录 寻找条件 操作  说明:find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件的文件并对之采取相关的操作。该命令提供的寻找条件可以是一个用逻辑运算符not、and、or组成的复合条件:

1)and:与,用“-a”表示,是缺省选项,如:find –name ’tmp’–xtype c -user ’inin’ 2)or:或,用“-o”表示。如:$ find –name ’tmp’–o –name ’mina*’ 3)not:,用“!”表示。如:$ find ! –name ’tmp’

需要说明的是:当使用很多的逻辑选项时,可以用括号把这些选项括起来。为了避免Shell本身对括号引起误解,在话号前需要加转义字符“\”来去除括号的意义。例:$ find \(–name ’tmp’–xtype c -user ’inin’ \) 寻找条件有以下选项:首先,下列各个选项中的n值可以有三种输入方式,假设n为20,则:+20 表示20以后(21,22,23等)-20 表示20以前(19,18,17等)20 表示正好是20

3.7 文件内容查询命令 (3)

3 7 4
i. 以名称和文件属性查找- name ’字符串’ 查找文件名匹配所给字符串的所有文件,字符串内可用通配符*、?、[ ]。- lname ’字符串’ 查找文件名匹配所给字符串的所有符号链接文件,字符串内可用通配符*、?、[ ]。-gid n 查找属于ID号为n的用户组的所有文件。-uid n 查找属于ID号为n的用户的所有文件。-group ’字符串’ 查找属于用户组名为所给字符串的所有的文件。-user ’字符串’ 查找属于用户名为所给字符串的所有的文件。-empty 查找大小为0的目录或文件。-path ’字符串’ 查找路径名匹配所给字符串的所有文件,字符串内可用通配符*、?、[ ]。-perm 权限 查找具有指定权限的文件和目录,权限的表示可以如711,644。-size n[bckw] 查找指定文件大小的文件,n后面的字符表示单位,缺省为b。-type x 查找类型为x的文件,x为下列字符之一:(b 块设备文件、c 字符设备文件、d 目录文件、p 命名管道(FIFO)、f 普通文件、l 符号链接文件、s socket文件)-xtype x 与-type基本相同,但只查找符号链接文件。

3.7 文件内容查询命令 (4)

3 7 5
ii. 以时间为条件查找- amin n 查找n分钟以前被访问过的所有文件。- atime n 查找n天以前被访问过的所有文件。- cmin n 查找n分钟以前文件状态被修改过的所有文件。- ctime n 查找n天以前文件状态被修改过的所有文件。- mmin n 查找n分钟以前文件内容被修改过的所有文件。- mtime n 查找n天以前文件内容被修改过的所有文件。iii. 可执行的操作- exec 命令名称 {} 对符合条件的文件执行所给的Linux命令,而不询问用户是否需要执行该命令。{}表示命令的参数即为所找到的文件;命令的末尾必须以“\;”结束。- ok 命令名称 { } 对符合条件的文件执行所给的Linux 命令,与exec不同的是,它会询问用户是否需要执行该命令。- ls 详细列出所找到的所有文件。- fprintf 文件名 将找到的文件名写入指定文件。- print 在标准输出设备上显示查找出的文件名。- printf 格式 格式的写法请参考有关C语言的书。  例1:查找当前目录中所有以main开头的文件,并显示这些文件的内容。$ find . - name ‘main*’ - exec more {} \;

3.7 文件内容查询命令 (5)

3 7 6
例2:删除当前目录下所有一周之内没有被访问过的a .out或*.o文件。$ find . \(- name a.out - o - name ‘*.o’\)- atime +7 - exec rm {} \;说明:\(和\)表示括号(),其中的“\”称为转义符。 “- name a.out”是指要查找名为a.out的文件;“- name ‘*.o’”是指要查找所有名字以.o结尾的文件。这两个- name之间的- o表示逻辑或(or),即查找名字为a.out或名字以.o结尾的文件,find在当前目录及其子目录下找到这佯的文件之后,再进行判断,看其最后访问时间是否在7天以前(条件-atime +7),若是,则对该文件执行命令rm(- exec rm{ }\;)。其中{}代表当前查到的符合条件的文件名,\;则是语法所要求的。

3.locate命令locate命令用于查找文件,它比find命令的搜索速度快,它需要一个数据库,这个数据库由每天的例行工作(crontab)程序来建立。当我们建立好这个数据库后,就可以方便地来搜寻所需文件了。该命令的一般形式为:locate 相关字例如:查找相关字issue $ locate issue /etc/issue /etc/issue.net /usr/man/man5/issue.5 /usr/man/man5/issue.net.5

3.7 文件内容查询命令 (6)

3 8 1
1)磁盘空间管理df命令  功能:检查文件系统的磁盘空间占用情况。

  语法:df [选项]  该命令各个选项的含义如下:-a 显示所有文件系统的磁盘使用情况,包括0块的文件系统,如/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% /第1列是代表文件系统对应的设备文件的路径名;第2列给出分区包含的数据块(1024字节)的数目;第3,4列分别表示已用的和可用的数据块数目。清单中Use%列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的安装点。

3.8 磁盘管理 (1)

3 8 2
du命令du的英文原义为“disk usage”,统计目录(或文件)所占磁盘空间的大小。  语法:du [选项] [Names…]  该命令的各个选项含义如下:-s 对每个Names参数只给出占用的数据块总数。-a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。-b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。-k 以1024字节为单位列出磁盘空间使用情况。-c 最后再加上一个总计(系统缺省设置)。-l 计算所有的文件大小,对硬链接文件,则计算多次。-x 跳过在不同文件系统上的目录不予统计。 例1:列出各目录所占的空间(以块为单位),但不列出每个文件所占的空间。$ du l ./dev 38 ./var 48 .  可在du命令中加-s选项来取得总数:du –s /mnt

3.8 磁盘管理 (2)

3 8 3
2)磁 盘 操 作dd命令  功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。

  语法:dd [选项]if =输入文件(或设备名称)。of =输出文件(或设备名称)。ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。skip = blocks 跳过读入缓冲区开头的ibs*blocks块。obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。cbs = byte 一次转换bytes字节。count=blocks 只拷贝输入的blocks块。conv = ASCII(把EBCDIC码转换为ASCIl码)

,ebcdic,ibm,block,ublock,ucase,lcase,notrunc,swab,noerror,sync    例1:要把一张软盘的内容拷贝到另一张软盘上:$ dd if =/dev/fd0 of = /tmp/tmpfile $ dd if = /tmp/tmpfile of =/dev/fd0

3.8 磁盘管理 (3)

3 8 4
fdformat 命令  软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作,然后可以用tar、dd、cpio等命令存储数据,也可以在软盘上建立可安装的文件系统。  功能:低级格式化软盘  语法:format [-n] device  说明:该命令的作用是对软盘进行格式化。-n 软盘格式化后不作检验。device 指定要进行格式化的设备,通常是下述设备之一:/dev/fd0d360/dev/fd0h1200/dev/fd0D360/dev/fd0H360/dev/fd0D720/dev/fd0H720/dev/fd0h360/dev/fd0h720/dev/fd0H1440

3.8 磁盘管理 (4)

3 9 1
Sort命令   语法:sort [选项] 文件  说明:对文件中所有的行进行排序。如不指定输入文件或使用“-”,则表示来自标准输入。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。改变缺省设置的选项有:- m 若给定文件已排好序,合并文件。- c 检查文件是否已排好序,若未排好序,则打印出错信息,并以状态值1退出。- u 对排序后认为相同的行只留其中一行。- o 输出文件 将排序输出写到输出文件中而不是标准输出。改变缺省排序规则的选项主要有:- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。- f 将小写字母与大写字母同等对待。- I 忽略非打印字符。- M 作为月份比较:“JAN”<“FEB”<¼ <“DEC”。- r 按逆序输出排序结果。+posl -pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。- b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。- t separator 指定字符separator作为字段分隔符。

3.9 文本处理命令 (1)

3 9 2
  例1 用sort命令对text文件排序。请注意,text的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词首字符处继续进行比较。

3.9 文本处理命令 (2)

$ cat textvegetable soupfresh vegetablesfresh fruitlowfat milk

$ sort textfresh fruitfresh vegetableslowfat milkvegetable soup

 例2 以第2个字段作为排序关键字对文件example的内容进行排序。

$ sort +1-2 example

例3 对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。$ sort -r -o outfile +1.0 -1.1 example 例4 sort排序常用于在管道中与其它命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给sort进行排序,排序关键字是第6个至第8个字段。$ ls - l | sort +5 - 7

3 9 3
uniq命令

  语法:uniq [选项] 文件  说明:这个命令读取输入文件,并比较相邻的行。在正常情况下,第二个及以后更多个重复行将被删去,行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“-”表示,则从标准输入读取。  该命令各选项含义如下:、- c 在显示中每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。- d 只显示重复行。- u 只显示文件中不重复的各行。-n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串,彼此由制表符和空格隔开(字段从0开始编号)。+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)。- f n 与- n相同,这里n是字段数。- s n 与+n相同,这里n是字符数。 例1 显示文件example中不重复的行。uniq - u example例2 显示文件example中不重复的行,从第2个字段的第2个字符开始做比较。 uniq - u - 1 +1 example

3.9 文本处理命令 (3)

3 9 4
wc命令  语法:wc [选项] 文件…  说明:该命令统计给定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。Wc同时也给出所有指定文件的总统计数。字是由空格字符区分开的最大字符串。  该命令各选项含义如下:- c 统计字节数。- l 统计行数。- w 统计字数。  这些选项可以组合使用。输出列的顺序和数目不受选项的顺序和数目的影响。总是按下述顺序显示并且每项最多一列。行数、字数、字节数、文件名.如果命令行中没有文件名,则输出中不出现文件名。 例1:$ wc - lcw file1 file24 33 file17 52 file211 11 85 total  省略任选项-lcw,wc命令的执行结果与上面一样。

3.9 文本处理命令 (4)

3 10 1
Comm命令  语法:comm [- 123 ] file1 file2  说明:该命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“-”,则表示从标准输入读取。选项1、2或3抑制相应的列显示。例如comm -12就只显示在两个文件中都存在的行;comm - 23只显示在第一个文件中出现而未在第二个文件中出现的行;comm - 123则什幺也不显示。  例1:对文件myfile1和myfile2进行比较

3.10 文件比较命令 (1)

$cat myfile2#include main( ){float i, j ,z ;i=10 ; j=5 ; z= i + j ;printf(“z=%f\n”,z); }

$ cat myfile1main( ){float a,b, i, j ,z ;a=i=10 ; b=j=5 ; z= i + j ;printf(“z=%d\n”,z); }

$ comm - 12 myfile1 myfile2main( ){z= i + j ;}就只显示文件myfile1和myfile2中共有的行。

3 10 2
Diff命令它比comm命令完成更复杂的检查。不要求事先对文件进行排序。  语法:diff [选项] file1 file2  说明:该命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用“-”表示file1或fiie2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。diff各选项的含义如下:- b 忽略行尾的空格,而字符串中的一个或多个空格符都视为相等。

- r 当file1和file2是目录时,递归作用到各文件和目录上。

- c 采用上下文输出格式(提供三行上下文)。- C n 采用上下文输出格式(提供n行上下文)。- e 产生一个合法的ed脚本作为输出。

3.10 文件比较命令 (2)

$ diff m1.c m2.c3,5 c 3,6printf(“Hello!\n”);}<5>3 int n,m;>4 n=10 ;>5 printf ( “% d \ n ” , m = n * 10);>6 }把文件m1.c的3至5行改成m2.c

的3至6行后,两个文件相同。

$ cat m1.c

1 main( ){printf(“Hello!\n”);}5

$ cat m1.c

1 main()2 {3 int n , m ;4 n= 10 ;5 printf ( “% d \ n ” , m = n * 10);6 }

slide51
ln命令  该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,我们可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。如果链接指向目录,用户就可以利用该链接直接进入被链接的目录而不用打一大堆的路径名。而且,即使我们删除这个链接,也不会破坏原来的目录。  语法:ln [选项] 目标 [链接名]ln [选项] 目标 目录有两种链接:
  • 硬链接(Hard Link)
  • 符号链接(Symbolic Link)   建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情下,ln产生硬链接。
  • 例1:用户为当前目录下的文件lunch创建了一个符号链接/home/xu。$ ln - s lunch /home/xu

3.11 文件链接命令

3 12 linux dos
Linux系统提供了一组称为mtools的可移植工具,可以让用户轻松地从标准的DOS软盘上读、写文件和目录。它们对DOS和Linux环境之间交换文件非常有用。它们是不具备共同的文件系统格式的系统之间交换文件的有力手段。对于一个MS-DOS的软盘,只要把软盘放在软驱中,就可以利用mtools提供的命令来访问软盘上的文件。mtools的主要命令如下:mcd 目录名 改变MSDOS目录;mcopy 源文件 目标文件 在MSDOS和Unix之间复制文件;mdel 文件名 删除MSDOS文件;mdir 目录名 显示MSDOS目录;mformat 驱动器号 在低级格式化的软盘上创建MSDOS文件系统;rnlabel 驱动器号 产生MSDOS卷标;mmd 目录名 建立MSDOS目录;mrd 目录名 删除MSDOS目录;mren 源文件 目标文件 重新命名已存在的MSDOS文件;mtype 文件名 显示MSDOS文件的内容。这些命令和对应的不加 m的 MSDOS命令非常相似。例1:在Linux环境下看DOS盘最上层的目录的内容:$ mdir a:例2:将DOS盘上的文件复制到当前目录下。$ mcopy a:\htca.doc

3.12 在Linux环境下运行DOS命令

3 13 1
1)标准输入与输出  执行一个shell命令行时通常会自动打开三个标准文件:
  • 标准输入文件(stdin),通常对应终端的键盘;
  • 标准输出文件(stdout),通常对应终端的屏幕;
  • 标准错误输出文件(stderr),通常对应终端的屏幕;

例1 cat命令读取abc数据,并将这些数据直接送到标准输出:$ cat abc例2 cat中没有参数,它就会从标准输入中读取数据,并将其送到标准输出:$ catHello worldBye$直接使用标准输入/输出文件存在以下问题:输入数据从终端输入时,用户费了半天劲输入的数据只能用一次。下次再想用这些数据时就得重新输入。而且在终端上输入时,若输入有误修改起来不是很方便。输出到终端屏幕上的信息只能看不能动。我们无法对此输出作更多处理,如将输出作为另一命令的输入进行进一步的处理等。为了解决上述问题,Linux系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。

3.13 标准输入/输出和重定向 (1)

3 13 2
2)输入重定向  输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不来自键盘,而来自一个指定的文件。所以说,输入重定向主要用于改变一个命令的输入源,特别是改变那些需要大量输入的输入源。输入重定向的一般形式为:命令<文件名。 例2 给出一个文件名作为wc的参数,返回该文件包含的行数、单词数和字符数。$ wc /etc/passwd20 23 726 /etc/passwd例2 另一种把/etc/passwd文件内容传给wc命令的方法是重定向wc的输入。

$ wc < /etc/passwd20 23 726例3 另一种输入重定向称为here文档,它告诉shell当前命令的标准输入来自命令行。here文档的重定向操作符使用<<。它将一对分隔符(本例中用delim表示)之间的正文重定向输入给命令。

$ wc<good afternoon

>delim1 2 15 当要使用一个不接受文件名作为输入参数的命令,而需要的输入内容又存在一个文件里时,就能用输入重定向解决问题。

3.13 标准输入/输出和重定向 (2)

3 13 3
3)输出重定向  输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。也可输出重定向可以用于把一个命令的输出当作另一个命令的输入。

输出重定向的一般形式为:命令>文件名。例1 将ls命令的输出保存为一个名为directory.out的文件

$ ls > directory.out注:如果>符号后边的文件已存在,那么这个文件将被重写。shell提供了输出重定向的一种追加手段。可以使用追加重定向操作符>>。形式为:命令>>文件名。例2:$ ls *.doc>>directory.out程序的错误输出也可以重新定向。使用符号2>(或追加符号2>>)表示对错误输出设备重定向。

例3:可在屏幕上看到ls的正常输出结果,又将任何错误送到文err.file中。 $ ls /usr/tmp 2> err.file也可使用另一个输出重定向符(&>),将标准输出和错误输出送到同一文件中。例4:$ ls /usr/tmp &> output.file例5:统计了/usr/bin目录下的文件个数。

$ ls /usr/bin > /tmp/dir $ wc –w < /tmp/dir459

3.13 标准输入/输出和重定向 (3)

3 13 4
4)管 道

  管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出(如果命令行中未使用输出重定向)。通过使用管道符“|”来建立一个管道行。

例1:用管道重写上面的例子:$ ls /usr/bin|wc -w1789例2:$ cat sample.txt|grep “High”|wc -l5)命令替换  命令替换和重定向有些相似,但区别在于命令替换是将一个命令的输出作为另外一个命令的参数。常用命令格式为:command1 `command2`其中,command2的输出将作为command1的参数。需要注意的是这里的`符号,被它括起来的内容将作为命令执行,执行后的结果作为command1的参数。例1:$ cd `pwd`该命令将pwd命令列出的目录作为cd命令的参数。

3.13 标准输入/输出和重定向 (4)

3 14 1
当用户对于一个命令不会用或是不太了解时,就请使用联机帮助命令。

man命令

它格式化并显示在线手册页。包括语法、各选项的意义及相关命令等。  一般形式为:man [选项] 命令名称。  命令中各选项的含义分别为:-M 路径 指定搜索man手册页的路径,通常这个路径由环境变量MANPATH预设,如果在命令行上指定另外的路径,则覆盖MANPATH的设定。-P 命令 指定所使用的分页程序,缺省使用/usr/bin/less–is,在环境变量MANPAGER中预设。-S 章节 由于一个命令名称可能会有很多类别,章节说明如下:

3.14 在线帮助 (1)

5 配置文件的解释6 游戏程序的命令7 其它的软件或是程序的命令和有关系统维护的命令

1 一般使用者的命令2 系统调用的命令3 C语言函数库的命令4 有关驱动程序和系统设备的解释

-a 显示所有的手册页,而不是只显示第一个。-d 这个选项主要在检查时使用,如果用户加入了一个新的文件,就可以用这个选项检查是否出错,这个选项并不会列出文件内容。-f 只显示出命令的功能而不显示其中详细的说明文件。

-k 在Whatis数据库中查找关键词,等同于apropos。

3 14 2
-w 不显示手册页,只显示将被格式化和显示的文件所在位置。

例如:查看cd命令的使用方法。$man ls

LS(1) FSF LS(1)

NAME

ls - list directory contents

SYNOPSIS

ls [OPTION]... [FILE]...

DESCRIPTION

List information about the FILEs (the current directory by

default). Sort entries alphabetically if none of -cftuSUX

nor --sort.

-a, --all

do not hide entries starting with .

:

可以按q键退出man命令。

3.14 在线帮助 (2)

3 14 3
help命令help命令用于查看所有Shell命令。用户可以通过该命令寻求Shell命令的用法,只需在所查找的命令后输入help命令,就可以看到所查命令的内容了。例1:查看od命令的使用方法。$ od –helpwhereis命令  这个程序的主要功能是寻找一个命令所在的位置。例如,我们最常用的ls命令,它是在/bin这个目录下的。

  该命令的一般形式为: whereis [选项] 命令名。  该命令中各选项的含义分别为:b 只查找二进制文件m 查找主要文件s 查找来源u 查找不常用的记录文件例1:查找ls命令在什幺目录下。$ whereis lsls:/bin/ls /usr/man/man1/ls.1 info命令

用来查看命令的GNU项目的Info pages页,它采用Textinfo文件系统,有取代man的趋势。如:info ls

3.14 在线帮助 (3)

3 15 1
Linux是一个多任务的操作系统,系统上同时运行着多个进程,正在执行的一个或多个相关进程称为一个作业。多用户是指多个用户可以在同一时间使用计算机系统;多任务是指Linux可以同时执行几个任务,它可以在还未执行完一个任务时又执行另一项任务。使用作业控制,用户可以同时运行多个作业,并在需要时在作业之间进行切换。下面将介绍进程管理及作业控制的命令,包括启动进程、查看进程、调度作业的命令。

进程及作业的概念

Linux系统上所有运行的东西都可以称之为一个进程。每个用户任务、每个系统管理守护进程,都可以称之为进程。Linux用分时管理方法使所有的任务共同分享系统资源。进程的一个比较正式的定义是:在自身的虚拟地址空间运行的一个单独的程序。进程与程序是有区别的,进程不是程序,虽然它由程序产生。程序只是一个静态的指令集合,不占系统的运行资源;而进程是一个随时都可能发生变化的、动态的、使用系统运行资源的程序。而且一个程序可以启动多个进程。

进程和作业的概念也有区别。一个正在执行的进程称为一个作业,而且作业可以包含一个或多个进程,尤其是当使用了管道和重定向命令。  例如“ls -l|more”

这个作业就同时启动了两个进程。  作业控制指的是控制正在运行的进程的行为。但是使用作业控制,用户可以同时运行多个作业。

3.15 进程管理及作业控制 (1)

3 15 2
三种不同类型的进程:
  • 交互进程:由一个shell启动的进程。交互进程既可以在前台运行,也可以在后台运行。
  • 批处理进程:这种进程和终端没有联系,是一个进程序列。
  • 监控进程(也称守护进程):Linux系统启动时启动的进程,并在后台运行。   上述三种进程各有各的作用,使用场合也有所不同。

启动进程  键入需要运行的程序的程序名,执行一个程序,其实也就是启动了一个进程。在Linux系统中每个进程都具有一个进程号,用于系统识别和调度进程。启动一个进程有两个主要途径:手工启动和调度启动。

  • 手工启动:由用户输入命令,直接启动一个进程。又可以分为很多种:

1)前台启动:手工启动一个进程的最常用的方式。如 ls –l 2)后台启动:当该进程甚为耗时,且用户也不急着需要结果的时候。如:$ ls –l >myfile &

4513$  从后台启动进程其实就是在命令结尾加上一个&号。键入命令以后,出现一个数字,这个数字就是该进程的编号,也称为PID,然后就出现了提示符。用户可以继续其它工作。

实际上这两种启动方式有个共同的特点,就是新进程都是由当前shell这个进程产生的。

3.15 进程管理及作业控制 (2)

3 15 3
调度启动 要使用自动启动进程的功能,就需要掌握以下几个启动命令。at命令at命令可以只指定时间,也可以时间和日期一起指定。语法格式: at [-V] [-q 队列] [-f 文件名] [-mldbv] 时间 at -c 作业 [作业...]   下面对命令中的参数进行说明: -V 将标准版本号打印到标准错误中。-q queue 使用指定的队列。队列名称是由单个字母组成,合法的队列名可以由a-z或者A-Z。a队列是at命令的默认队列。-m 作业结束后发送邮件给执行at命令的用户。-f file 使用该选项将使命令从指定的file读取,而不是从标准输入读取。-l atq命令的一个别名。该命令用于查看安排的作业序列,它将列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。 -c 将命令行上所列的作业送到标准输出。

3.15 进程管理及作业控制 (3)

3 15 4
例1: 指定在今天下午5:30执行某命令。假设现在时间是中午12:30,1999年2月24日,其命令格式如下:at 5:30pm at 17:30 at 17:30 today at now + 5 hours at now + 300 minutes at 17:30 24.2.99 at 17:30 2/24/99 at 17:30 Feb 24对于at命令来说,需要定时执行的命令是从标准输入或者使用-f选项指定的文件中读取并执行的。

例2:$ at -f work 4pm + 3 days 在三天后下午4点执行文件work中的作业。 $ at -f work 10am Jul 31 在7月31日上午10点执行文件work中的作业。 在任何情况下,超级用户都可以使用这个命令。对于其它用户来说,是否可以使用就取决于两个文件:/etc/at.allow和/etc/at.deny。如果etc/at.allow文件存在的话,那么只有在其中列出的用户才可以使用at命令;如果该文件不存在,那么将检查/etc/at.deny文件是否存在,在这个文件中列出的用户均不能使用该命令。如果两个文件都不存在,那么只有超级用户可以使用该命令。

3.15 进程管理及作业控制 (4)

3 15 5
例4:找出所有以txt为后缀名的文件,并且进行打印。打印结束后给用户foxy发出邮件通知取件。指定时间为十二月二十五日凌晨两点。首先键入:$ at 2:00 12/25/99然后系统出现at>提示符,等待用户输入需要执行的命令序列:at> find / -name “*.txt”|lprat> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy所有指令序列输入完毕后,使用组合键结束at命令的输入。这时候屏幕将出现如下信息:warning:command will be executed using /bin/sh.job 1 at 2002-04-10 02:00

例5:上面的例子可以修改如下:将命令序列写入到文件/tmp/printjob,语句为:$ at -f /tmp/printjob 2:00 12/25/99当然也可以采用以下命令:$ at< /tmp/printjob 2:00 12/25/99

3.15 进程管理及作业控制 (5)

3 15 6
batch命令batch 用低优先级运行作业,该命令几乎和at命令的功能完全相同,唯一的区别在于,at命令是在指定时间,很精确的时刻执行指定命令;而batch却是在系统负载较低,资源比较空闲的时候执行命令。该命令适合于执行占用资源较多的命令。batch命令的语法格式也和at命令十分相似:

batch [-V] [-q 队列] [-f 文件名] [-mv] [时间]

具体的参数解释请参考at命令。一般地说,不用为batch命令指定时间参数,因为batch本身的特点就是由系统决定执行任务的时间,如果用户再指定一个时间,就失去了本来的意义。 例1: $ batchat> find / -name *.txt|lprat> echo “foxy:All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy现在这个命令就会在合适的时间运行了,运行完后会发回一个信息。而batch和at命令都将自动转入后台,所以启动的时候也不需要加上&符号。

3.15 进程管理及作业控制 (6)

3 15 7
cron命令 前面介绍的两条命令都会在一定时间内完成一定任务,但是要注意它们都只能执行一次。也就是说,当指定了运行命令后,系统在指定时间完成任务,一切就结束了。

但是在很多时候需要不断重复一些命令,这时候就需要使用cron命令来完成任务了。实际上,cron命令是不应该手工启动的。cron命令在系统启动时就由一个shell脚本自动启动,进入后台(所以不需要使用&符号)。一般的用户没有运行该命令的权限,虽然超级用户可以手工启动cron,不过还是建议将其放到shell脚本中由系统自行启动。首先cron命令会搜索/var/spool/cron目录,寻找以/etc/passwd文件中的用户名命名的crontab文件,被找到的这种文件将载入内存。  例如一个用户名为foxy的用户,它所对应的crontab文件就应该是/var/spool/cron/foxy。cron命令还将搜索/etc/crontab文件,这个文件是用不同的格式写成的。cron启动以后,它将首先检查是否有用户设置了crontab文件,如果没有就转入“休眠”状态,释放系统资源。所以该后台进程占用资源极少。它每分钟“醒”过来一次,查看当前是否有需要运行的命令。命令执行结束后,任何输出都将作为邮件发送给crontab的所有者,或者是/etc/crontab文件中MAILTO环境变量中指定的用户。  上面简单介绍了一些cron的工作原理,但是cron命令的执行不需要用户干涉;需要用户修改的是crontab中要执行的命令序列。

3.15 进程管理及作业控制 (7)

3 15 8
crontab命令crontab命令用于安装、删除或者列出用于驱动cron后台进程的表格。也就是说,用户把需要执行的命令序列放到crontab文件中以获得执行。每个用户都可以有自己的crontab文件。

下面说明如何创建一个crontab文件。在/var/spool/cron下的crontab文件不可以直接创建或者直接修改。crontab文件是通过crontab命令得到的。现在假设有个用户名为foxy,需要创建自己的一个crontab文件。

1)首先可以使用任何文本编辑器建立一个新文件,然后向其中写入需要运行的命令和要定期执行的时间。然后存盘退出。假设该文件为/tmp/test.cron。

2)然后使用crontab命令来安装这个文件,使之成为该用户的crontab文件。

crontab test.cron

这样一个crontab 文件就建立好了。可以转到/var/spool/cron目录下面查看,发现多了一个foxy文件。这个文件就是所需的crontab 文件。用more命令查看该文件的内容可以发现文件头有三行信息:#DO NOT EDIT THIS FILE -edit the master and reinstall.#(test.cron installed on Mon Feb 22 14:20:20 1999)#(cron version --$Id:crontab.c,v 2.13 1994/01/17 03:20:37 vivie Exp $)

3.15 进程管理及作业控制 (8)

3 15 9
crontab命令的语法格式如下:crontab [-u user] file crontab [-u user]{-l|-r|-e}

第一种格式用于安装一个新的crontab文件,安装来源就是file所指的文件,如果使用“-”符号作为文件名,那就意味着使用标准输入作为安装来源。-u 如果使用该选项,也就是指定了是哪个具体用户的crontab 文件将被修改。如果不指定该选项,crontab将默认是操作者本人的crontab ,也就是执行该crontab 命令的用户的crontab文件将被修改。

-l 在标准输出上显示当前的crontab。-r 删除当前的crontab文件。-e 使用viSUAL或者EDITOR环境变量所指的编辑器编辑当前的crontab文件。当结束编辑离开时,编辑后的文件将自动安装。

3.15 进程管理及作业控制 (9)

3 15 10
例1: # crontab -l #列出用户目前的crontab。 10 6 * * * date 0 */2 * * * date 0 23-7/2,8 * * * date 在crontab文件中如何输入需要执行的命令和时间。该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:minute hour day-of-month month-of-year day-of-week commands

这些项都不能为空,必须填入。如果用户不需要指定其中的几项,那么可以使用*代替。因为*是统配符,可以代替任何字符,所以就可以认为是任何时间,也就是该项被忽略了。下面给出了每项的合法范围:minute 00-59 hour 00-23,其中00点就是晚上12点 day-of-month 01-31 month-of-year 01-12 day-of-week 0-6,其中周日是0   这样用户就可以往crontab 文件中写入无限多的行以完成无限多的命令。其它所有时间域都支持列举,每两个时间值中间使用逗号分隔。

3.15 进程管理及作业控制 (10)

3 15 11
例2:5,15,25,35,45,55 16,17,18 * * * command表示任意天任意月,其实就是每天的下午4点、5点、6点的5 min、15 min、25 min、35min、45 min、55 min时执行命令。

例3:在每周一,三,五的下午3:00系统进入维护状态,重新启动系统。那么在crontab文件中就应该写入如下字段:

00 15 * * 1,3,5 shutdown -r +5

然后将该文件存盘为foxy.cron,再键入crontab foxy.cron安装该文件。例4:每小时的1分执行用户目录下的bin/account这个指令:1 * * * * bin/account

例5:每天早晨3:20执行用户目录下如下所示的两个指令(每个指令以;分隔):

20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)

例6 每年的一月和四月,4号到9号的3:12和3:55执行/bin/rm -fexpire.1st这个指令,并把结果添加在mm.txt这个文件之后(mm.txt文件位于用户自己的目录位置)。

12,55 3 4-9 1,4 * /bin/rm -f expire.1st>>mm.txt

3.15 进程管理及作业控制 (11)

3 15 12
进程的挂起及恢复命令bg、fg

作业控制允许将进程挂起并可以在需要时恢复进程的运行,被挂起的作业恢复后将从中止处开始继续运行。只要按可挂起当前的前台作业。例1$ cat > text.file[1] + stopped cat > text.file$ jobs[1]+ stopped cat > text.file使用jobs命令可以显示shell的作业清单,包括具体的作业、作业号以及作业当前所处的状态。恢复进程执行时,有两种选择:用fg命令将挂起的作业放回到前台执行;用bg命令将挂起的作业放到后台执行。例2: 用户正在使用Emacs,突然需要查看系统进程情况。其命令格式为:$ bg emacs$ ps –x$ fg emacs

3.15 进程管理及作业控制 (12)

3 16 1
要对进程进行管理,首先就要知道现在的进程情况。

who命令  主要用于查看当前在线用户情况。who命令的常用语法格式如下:who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--message] [--mesg] [--version] [--writable] [file] [ami]不使用任何选项时,who命令将显示以下三项内容:login name:登录用户名;terminal line:使用终端设备;login time:登录到系统的时间。 下面对who命令的常用参数进行说明。-m 和“who am i”的作用一样,显示运行该程序的用户名。-q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其它任何选项。-s 忽略。主要是用于和其它版本的who命令兼容。-i,-u,--idle 显示该用户的“发呆”时间。其中“.”代表在前1秒仍然处于活动状态;“old”则表示该用户空闲已经超过了24小时。-H,--heading 显示一行列标题。who命令输出常用标题说明:USER:用户登录帐号;LINE:用户登录使用终端;LOGIN-TIME:用户登录时间;IDLE:用户空闲时间,即未进行操作的时间;PID:用户登录shell的进程ID;FROM:用户网络地址。

3.16 进程查看(1)

3 16 2
-w,-T,--mesg,--message,--writable 和-s选项一样,在登录帐号后面显示一个字符来表示用户的信息状态:+:允许写信息;-:不允许写信息;?:不能找到终端设备。--help 在标准输出上显示帮助信息。--version 在标准输出上显示版本信息。例1: 查看登录到系统的用户情况$ whoroot tty1 Mar 17 13:49foxy tty2 Mar 17 13:49root tty3 Mar 17 13:49bbs ttyp0 Mar 17 13:49 (river.net)例2: 查看登录用户的详细情况,键入:$ who -uHUSER LINE LOGIN-TIME IDLE FROMroot tty1 Mar 17 13:49 . foxy tty2 Mar 17 13:49 00:01root tty3 Mar 17 13:49 00:01bbs ttyp0 Mar 17 13:49 00:01 (river.net)其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。

3.16 进程查看(2)

3 16 3
w命令 该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计据相对who命令来说更加详细和科学。

  语法格式如下:

w -[husfV] [user]  下面对参数进行说明:-h 不显示标题。-u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。-s 使用短模式。不显示登录时间、JCPU和PCPU时间。-f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。-V 显示版本信息。User 只显示指定用户的相关情况。

3.16 进程查看(3)

3 16 4
例1: 显示当前登录到系统的用户的详细情况$ w2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06USER TTY FROM LOGIN@ IDLE JCPU PCPU WHATroot tty1 2:49pm 0:00s 0.56s 0.10s wfoxy tty2 2:49pm 1:09 0.42s 0.42s bashroot tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net

w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。

注:

JCPU时间:是和该终端(tty)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。

PCPU时间:是指当前进程(即在WHAT项中显示的进程)所占用的时间。

3.16 进程查看(4)

3 16 5
ps命令  使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。ps命令最常用的还是用于监控后台进程的工作情况。  该命令语法格式如下:

ps [选项]  下面对命令选项进行说明:-e 显示所有进程。-f 全格式。-h 不显示标题。-l 长格式。-w 宽输出。a 显示终端上的所有进程,包括其它用户的进程。r 只显示正在运行的进程。x 显示没有控制终端的进程。

u 显示用户名和进程的开始时间。

e 显示进程的环境变量。ps最常用的三个参数是u、a、x。

3.16 进程查看(5)

3 16 6
例1 以root身份登录系统,查看当前进程状况$ psPID TTY TIME COMMAND5800 ttyp0 00:00:00 bash5835 ttyp0 00:00:00 ps可以看到,显示的项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程的命令行输入)。可以使用u选项来查看进程所有者及其它一些详细信息,如下所示:$ ps uUSER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMANDtest 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bashtest 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u  在bash进程前面有条横线,意味着该进程便是用户的登录shell,所以对于一个登录用户来说带短横线的进程只有一个。还可以看到%CPU、%MEM两个选项,前者指该进程占用的CPU时间和总时间的百分比;后者指该进程占用的内存和总内存的百分比。在这种情况下看到了所有控制终端的进程;但是对于其它那些没有控制终端的进程还是没有观察到,所以这时就需要使用x选项。使用x选项可以观察到所有的进程情况。

3.16 进程查看(6)

3 16 7
例2: 下面是使用x选项的例子:$ ps xPID TTY STAT TIME COMMAND5800 ttyp0 S 0:00 -bash5813 ttyp1 S 0:00 -bash5921 ttyp0 S 0:00 man ps5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz | /5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz5924 ttyp0 S 0:00 /usr/bin/less -is5941 ttyp1 R 0:00 ps x   可以发现突然一下子就多出了那么多的进程。这些多出来的进程就是没有控制终端的进程。前面看到的所有进程都是test 用户自己的。其实还有许多其它用户在使用着系统,自然也就对应着其它的很多进程。如果想对这些进程有所了解,可以使用a选项来查看当前系统所有用户的所有进程。经常使用的是aux组合选项,这可以显示最详细的进程情况。

3.16 进程查看(7)

3 16 8
例3$ ps auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 1 0.0 0.0 1136 64 ? S Nov25 0:02 init [3]root 2 0.0 0.0 0 0 ? SW Nov25 0:00 [kflushd]root 3 0.0 0.0 0 0 ? SW Nov25 0:03 [kupdate]root 4 0.0 0.0 0 0 ? SW Nov25 0:00 [kpiod]root 5 0.0 0.0 0 0 ? SW Nov25 0:00 [kswapd]root 163 0.0 0.1 1628 332 ? S Nov25 0:02 sshdroot 173 0.0 0.0 1324 200 ? S Nov25 0:00 syslogdroot 181 0.0 0.0 1420 0 ? SW Nov25 0:00 [klogd]daemon 191 0.0 0.1 1160 312 ? S Nov25 0:00 /usr/sbin/atdroot 201 0.0 0.1 1348 492 ? S Nov25 0:00 crondroot 212 0.0 0.0 1292 68 ? S Nov25 0:00 inetd……  在显示的最前面是其它用户的进程情况,可以看到有root、daemon等用户以及他们所启动的进程。在上面的例子中,介绍了ps命令最常见的一些选项和选项组合,用户可以根据自己的需要选用。

3.16 进程查看(8)

3 16 9
top命令top命令和ps命令的基本作用是相同的,显示系统当前的进程和其它状况;top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。  该命令的语法格式:top [-] [d delay] [q] [c] [s] [S] [i]d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。S 指定累计模式。s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。i 使top不显示任何闲置或者僵死进程。c 显示整个命令行而不只是显示命令名

3.16 进程查看(9)

3 16 10
top命令显示的项目很多,默认值是每5秒更新一次。显示的各项目为:uptime:该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。Processes:自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等种类。进程和状态显示可以通过交互命令t来实现。CPU states:显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。

Mem:内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。Swap:交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。PID:每个进程的ID。PPID:每个进程的父进程ID。UID:每个进程所有者的UID 。USER:每个进程所有者的用户名。PRI:每个进程的优先级别。NI:该进程的优先级值。

3.16 进程查看(10)

3 16 11
SIZE: 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。TSIZE:该进程的代码大小。对于内核进程这是一个很奇怪的值。 DSIZE:数据和堆栈的大小。TRS:文本驻留大小。D:被标记为“不干净”的页项目。LIB:使用的库页的大小。对于ELF进程没有作用。RSS:该进程占用的物理内存的总数量,单位是KB。SHARE:该进程使用共享内存的数量。 STAT:该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。TIME:该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。

%CPU该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。

%MEM该进程占用的物理内存占总内存的百分比。COMMAND:该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。

3.16 进程查看(11)

3 16 12
下面介绍在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

<空格> 立即刷新显示。

Ctrl+L 擦除并且重写屏幕。

h或者? 显示帮助画面,给出一些简短的命令总结说明。

k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。

i 忽略闲置和僵死进程。这是一个开关式命令。

q 退出程序。

r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。

S 切换到累计模式。

s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

3.16 进程查看(12)

3 16 13
f 或者F 从当前显示中添加或者删除项目。

o 或者O 改变显示项目的顺序。

l 切换显示平均负载和启动时间信息。

m 切换显示内存信息。

t 切换显示进程和CPU状态信息。

c 切换显示命令名称和完整命令行。

M 根据驻留内存大小进行排序。

P 根据CPU使用百分比大小进行排序。

T 根据时间/累计时间进行排序。

W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

3.16 进程查看(13)

3 16 14
例1 键入top命令查看系统状况$ top1:55pm up 7 min, 4 user, load average:0.07,0.09,0.0629 processes:28 sleeping, 1 running, 0 zombie, 0 stoppedCPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idleMem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buffSwap: 33228K av, 0K used, 33228K free, 11820K cachedPID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread312 root 1 0 636 636 488 S 0 0.0 1.6 0:00 telnet第一行:当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行进程情况:进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行CPU状态:用户占用、系统占用、优先进程占用、闲置进程占用。第四行内存状态:平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态:平均可用交换容量、已用容量、闲置容量、高速缓存容量。下面就是和ps相仿的各进程情况列表了。

3.16 进程查看(14)

3 17 1
kill命令  当需要中断一个前台进程的时候,通常是使用组合键;但是对于一个后台进程恐怕就不是一个组合键所能解决的了,这时就必须求助于kill命令。该命令可以终止后台进程。kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号,那么默认值为TERM(15)信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用kill(9)信号了,该信号是不能被捕捉的。  命令的语法格式有以下两种方式:kill [-s 信号 | -p ] [ -a ] 进程号 ... kill -l [信号] -s 指定需要送出的信号。既可以是信号名也可以对应数字。-p 指定kill命令只是显示进程的pid,并不真正送出结束信号。-l 显示信号名称列表,它们定义在/usr/include/linux/signal.h文件中

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 17) SIGCHLD

18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN

22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ

26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO

30) SIGPWR 31) SIGSYS 32) SIGRTMIN

3.17 进程调度(1)

3 17 2
例1: 在执行一条find指令时由于时间过长,决定终止该进程。首先应该使用ps命令来查看该进程对应的PID,键入ps,显示如下:PID TTY TIME COMMAND285 1 00:00:00 -bash287 3 00:00:00 -bash289 5 00:00:00 /sbin/mingetty tty5345 1 00:00:00 find / -name foxy.jpg348 1 00:00:00 ps  可以看到该进程对应的PID是345,现在使用kill命令来终止该进程。键入:# kill 345  有时候可能会遇到这样的情况,某个进程已经挂死或闲置,使用kill命令却杀不掉。这时候就必须发送信号9,强行关闭此进程。当然这种“野蛮”的方法很可能会导致打开的文件出现错误或者数据丢失之类的错误。所以不到万不得已不要使用强制结束的办法。如果连信号9都不响应,那恐怕就只有重新启动计算机了。#kill –9 345重新启动进程:

#kill –HUP 345

3.17 进程调度(2)

3 17 3
killall命令

以名字方式来杀死进程,杀死该命令指定的所有实例。

命令的语法格式:

killall [-egiqvw] [-signal] 进程名

killall –l

-e 对于很长的名字, 要求准确匹配. 如果一个命令名长于 15 个字符, 则可能不能用整个名字 (溢出了). 在这种情况下, killall 会杀死所有匹配名字前 15 个字符的所有进程. 有了 -e 选项,这样的记录将忽略. 如果同时指定了 -v 选项, killall 会针对每个忽略的记录打印一条消息.

-g 杀死属于该进程组的进程. kill 信号给每个组只发送一次, 即使同一进程组中包含多个进程.

-i 交互方式,在杀死进程之前征求确认信息.

-l 列出所有已知的信号名.

-q 如果没有进程杀死, 不会提出抱怨.

-v 报告信号是否成功发送.

-V 显示版本信息.

-w 等待所有杀的进程死去. killall 会每秒检查一次是否任何被杀的进程仍然存在, 仅当都死光后才返回. 注意: 如果信号被忽略或没有起作用, 或者进程停留在僵尸状态, killall 可能会永久等待.

例1:#killall myprom.pl

3.17 进程调度(3)

3 17 4
nohup命令  理论上,我们一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如您正在编辑一个很长的程序,但是您下班或是有事需要先退出系统,这时您又不希望系统把您编辑那么久的程序结束掉,希望退出系统时,程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续执行。一般这些进程我们都是让它在后台执行,结果则会写到用户自己的目录下的nohup.out这个文件里(也可以使用输出复位向,让它输出到一个特定的文件)。例1:$ nohup sort sales.dat &这条命令告诉sort命令忽略用户已退出系统,它应该一直运行,直到进程完成。利用这种方法,可以启动一个要运行几天甚至几周的进程,而且在它运行时,用户不需要去登录。nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出复位向,则只有错误信息放在nohup.out文件中。

3.17 进程调度(4)

3 17 5
nice命令

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

nice[-nadjustment][-adjustment][--adjustment=adjustment]

[--help][--version][command[arg...]]-nadjustment,-adjustment,--adjustment=adjustment皆为将该原有优先序的增加adjustment--help显示求助讯息 --version显示版本资讯 例1:将ls的优先序加10并执行: nice +10 ls 注意:优先序(priority)为操作系统用来决定CPU分配的参数,Linux使用『回合制(round-robin)』的演算法来做CPU排程,优先序越高,所可能获得的CPU时间就越多。

3.17 进程调度(5)

3 17 6
renice命令renice命令允许用户修改一个正在运行进程的优先权。利用renice命令可以在命令执行时调整其优先权。

其格式如下:

$ renice -number PID

其中,参数number与nice命令的number意义相同。注:(1) 用户只能对自己所有的进程使用renice命令。(2) root用户可以在任何进程上使用renice命令。(3) 只有root用户才能提高进程的优先权。

3.17 进程调度(6)

3 18 vi 1
用户在使用计算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工作都离不开编辑器。Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,便于用户学习和使用。

vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,足见其生命力之强,而强大的生命力是其强大的功能带来的。vi简介vi是“visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。

vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。vi没有菜单,只有命令,且命令繁多。vi有三种基本工作模式:命令模式、文本输入模式和末行模式。

3.18 文本编辑器vi (1)

3 18 vi 2
命令模式  任何时候,不管用户处于何种模式,只要按一下键,即可使vi进入命令模式;进入vi编辑器时,默认处于该模式下。  在该模式下,用户可以输入各种合法的vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是vi的合法命令,vi会响铃报警。文本输入模式  在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键即可。末行模式

在vi中,命令通常是单个键,如i。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在屏幕的最后一行显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,vi自动回到命令模式。  可按键,或用退格键将输入的命令全部删除之后,再按一下退格键,即可使vi回到命令模式下。

3.18 文本编辑器vi (2)

3 18 vi 3
Vi编辑器的三种工作模式之间的转换如下:

3.18 文本编辑器vi (3)

如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。

3 18 vi 4
1. vi的启动和退出

1)vi的启动

  • vi
  • vi file1
  • vi + file1 定位在最后一行
  • vi +N file1
  • vi +/string file1

2) vi的退出(即可切换到末行模式)

  • :w 或 :w filename
  • :wq
  • :x 或 :ZZ
  • :q! 或 :quit

2. vi的基本命令

1)插入

  • i---光标前插入
  • a---光标后插入
  • o---行下新增一空行
  • I---插于行首
  • A---插于行尾
  • O---行上新增一空行

3.18 文本编辑器vi (4)

3 18 vi 5
2)移动光标
  • hjkl---左、下、上、右
  • Ctrl+b ---往前一页
  • Ctrl+f ---往后一页
  • G ---移到文件最后
  • w ---移到下个 word 的开头
  • b ---跳至上个 wore 的开头

3)删除

  • x ---删除所在位置的一个字符
  • #x --- 5x 表示删除 5 个字符
  • dd --- 删除光标所在之行
  • #dd --- 例,5dd 表删除自光标算起之 5 行
  • :1,#d ---删除行1至行#的文字
  • X ---删除所在前面一个字符
  • D ---删除至行尾

4)更改

  • cw ----更改光标处之字到此一单字之字尾处
  • c#w ----例,c3w表更改 3 个字
  • cc ----修改行
  • C ----替换到行尾

3.18 文本编辑器vi (5)

3 18 vi 6
5)取代
  • r----取代光标处之字符
  • R----取代字符直到按 ESC 为止

6)复制

  • yw----拷贝光标处之字到字尾至缓冲区
  • P ----把缓冲区之资料贴在所在行的后
  • p ----把缓冲区之资料贴在所在行的前
  • yy----拷贝光标所在之行至缓冲区
  • #yy----5yy,拷贝光标所在之处以下5行至缓冲区

7)复原

u ----undo,复原至上一动作

8)跳至指定之行

g ----列出行号,及相关信息

8)重复上一个命令

.

3. vi的末行模式基本命令

使用前请先按 ESC 键确定在命令模式下按 ':' 或 '/' 或 '?' 叁键即可进入末行模式

1)列出行号

:set nu

3.18 文本编辑器vi (6)

3 18 vi 7
2)寻找字串
  • /word ( 由首至尾寻找 ),按 n 可往下继续找
  • ?word ( 由尾至首寻找 ),按 N 可往前继续找

3)跳行

:100 --- 可跳至第 100 行

4)替换字符串

:1,$ s/pattern1/pattern2/g

例1:从文件第一行至文件尾将大写A全部替换成小写

:1,$s /A/a/g

为精确查找和替换字符串可加入如下:

^ ---- 匹配行首 $ ---- 匹配行尾

\< ---- 匹配词首 \> ---- 匹配词尾

. ---- 匹配任意字符

4. 编辑多个文件

1)将一个文件插入另一个文件

:r filename

1)编辑多个文件

vi file1 file2 file3

通过 :n 文件名 切换

3.18 文本编辑器vi (7)

3 19 emacs
emacs 是功能强大的文本编辑器。它允许你同时打开多个文件。要进入 emacs ,只要直接键入这个命令即可,你可以直接加上文件名,开启某个文件编辑。如果没有指定文件名,emacs 会开启一个空文档。

进入emacs后,emacs 根据终端的大小(一般是80X24)自动调整,分成叁个区域:主窗口(Window),系统模式(mode line )及回应区(echo area ),后两者将会固定在画面的最底下两行。在每个工作状态emacs都会开一个缓冲区来执行这个工作。Emacs 每多开一个文件,多启动一种功能模式 ( 读 news、 email 等 ) 便会多开一个buffer,你可在各个buffer之间自由切换。退出emacs 很简单,<Ctrl-x>再按<Ctrl-c>就可以了,Emacs 会询问你修改过的文件是否存文件,已启动的 buffer 是否中止。你也可以用 Ctrl-z 暂时离开 emacs 再 fg 回来。

要学 emacs,推荐使用emacs在线上tutorial,按<ctrl-h>,再按<t>,这篇 tutorial 就会出现在你面前。

在emacs里,操作方式有两种,一是命令列,如<end-of-line>,<scroll-up>,另一种则是控制功能键,这两者是各自独立的,所有的操作功能都有相对应的命令列,而很多常用的命令列都有相对应的控制键,以方便使用。离开emacs的<ctrl-x ctrl-c>和暂停 emacs 回到 UNIX shell 的<Ctrl-z>便都是控制功能键。<Ctrl-x Ctrl-c>的对应命令列是<save-buffers-kill-Emacs>,<Ctrl-z>则为<suspend-Emacs>大小写必须区分清楚。

3.19 文本编辑器Emacs

slide100

思考题

什么是文件系统? linux文件系统主要有哪两种?

Linux系统中有哪四种基本的文件类型?

什么是工作目录与用户主目录?

认识Linux文件系统的树型层次结构,了解主要目录的作用。

理解Linux系统中文件和目录的权限管理,采用何种方法进行权限和属主管理?

什么是文件链接?主要有哪两种链接方式?

执行一个shell命令行时通常会自动打开哪三个标准文件?

什么是输入重定向、输出重定向和管道?熟悉它们的使用方法。

man由哪些章节组成?

什么是进程?Linux系统中有哪三种不同类型的进程?进程启动有哪几种方式?

熟悉课件中的各类Linux系统的基本命令。上机练习课件中的例子。

vi有哪三种基本工作模式?怎样进行切换?熟悉vi的基本命令。

ad