首页 第四章 并行计算机的操作系统及编程环境

第四章 并行计算机的操作系统及编程环境

举报
开通vip

第四章 并行计算机的操作系统及编程环境第4章 并行计算机的操作系统及编程环境 本章介绍Linux 的基本使用,以及在Linux 操作系统上进行程序开发的简单知识。本章的目的是帮助读者迅速掌握使用Linux 操作系统进行工作的基本知识,内容基本来源于所讨论的软件及工具的文档。 可以认为,Linux 是一个小型的、适合于个人计算机的UNIX 操作系统。这里假设读者对于计算机的基本使用已经相当熟悉,比如能够非常熟练地使用Windows操作系统完成日常工作,并且具有程序设计的基本能力,能够读懂、编写C 语言程序。本章将在此基础上讲述Linux 操作系统的使...

第四章 并行计算机的操作系统及编程环境
第4章 并行计算机的操作系统及编程环境 本章介绍Linux 的基本使用,以及在Linux 操作系统上进行程序开发的简单知识。本章的目的是帮助读者迅速掌握使用Linux 操作系统进行工作的基本知识,内容基本来源于所讨论的软件及工具的文档。 可以认为,Linux 是一个小型的、适合于个人计算机的UNIX 操作系统。这里假设读者对于计算机的基本使用已经相当熟悉,比如能够非常熟练地使用Windows操作系统完成日常工作,并且具有程序设计的基本能力,能够读懂、编写C 语言程序。本章将在此基础上讲述Linux 操作系统的使用以及在Linux操作系统下编程的基本知识。 4.1 LINUX操作系统简介 现代操作系统为用户提供两个基本的功能,第一是使计算机更容易使用,用户使用的是操作系统提供的虚拟机而无须与计算机硬件直接打交道。第二是可让用户共享硬件资源。多任务操作系统为每个进程分配要执行的工作,为每个进程分配内存和系统资源,在一个进程中,至少要分配一个执行的线程或一个可执行单元。现代操作系统还支持在程序内部对多线程进行控制,因此并行处理可以进程内多线程的方式进行。 由于当前流行的并行计算机主要由结点上安装Linux 操作系统的PC Cluster 构成,所以了解Linux 操作系统的一些基本知识有助于有效地使用它们。linux 最初是由芬兰赫尔辛基大学计算机系大学生Linus Torvalds 在从1990 年底到1991 年的几个月中陆续编写的,1993年,Linus 决定转向GPL 版权(可免费使用)。一些软件公司如Red Hat、InfoMagic 等适时推出以Linux 为核心的操作系统版本,大大地推动了Linux 的商品化。 linux 的主要特点是,开放性、标准化、多用户、多任务,Linux 可以连续运行数月、数年而无须重新启动,一台Linux 服务器支持100-300 个用户毫无问题。Linux 向用户提供三种界面:用户命令界面、系统调用界面和图形用户界面。Linux 一般由四个部分组成:内核、Shell、文件系统和实用工具。内核是运行程序和管理磁盘、打印机等硬件设备的核心程序。它从用户那里接受命令并把命令送到内核去执行。Shell 是系统的用户界面,提供了系统与内核进行交互操作的一种接口。它接受用户输入的命令,并把它送到内核去执行。实际上Shell 是一个命令解释器,Shell 有自己的编程语言,它允许用户编写由Shell 命令组成的程序。 每个Linux 系统的用户可以拥有自己的用户界面和Shell,用以满足他们自己专门的Shell需要。同Linux 一样,Shell 也有多种不同的版本。目前主要有下列版本的Shell:Bourne Shell(贝尔实验室开发)、Bash(GNU 的Bourne Again Shell,是GNU 操作系统上默认的Shell)、Korn Shell(对Bourne Shell 的发展,大部分与Bourne Shell 兼容)、C Shell(Sun 公司Shell的BSD 版本)。 Linux 实用工具可以分为三类:编辑器、过滤器、交互程序。 Linux 的内核版本是在Linus 领导下的开发小组开发出的系统内核的版本号。一般说来,以序号的第二位为偶数的版本表明这是一个可以使用的稳定的版本。一些组织和厂商将Linux 的系统内核与应用程序和文档包装起来,并提供一些安装界面和系统设定的管理工具,这样就构成了一个发行套件。 Linux操作系统的下载和安装读者可以参考附录1。 4.2 进程的概念和进程间的通信 现代UNIX 操作系统中,与消息传递并行程序设计密切相关的一个重要概念便是进程(process)。正是由于多个进程之间的相互通信,才决定了各类消息传递并行程序设计平台的出现。本节主要介绍进程和进程间通信的基本概念。 (1) 进程 进程(process)可表示成四元组(P,C,D, S),其中P是程序代码、C 是进程的控制状态、D 是进程的数据、S 是进程的执行状态。任何进程总和程序联系在一起,程序一旦在具体操作系统环境中投入运行,就变成了进程。各个进程拥有独立的执行环境,其中包括内存中数据和指令地址空间、程序计数器、寄存器、栈空间、文件系统、I/O 设备等,并在操作系统的控制、管理、保护和调度下,在不同的时刻,动态地申请和占有计算资源。特别地,称进程的内存地址空间为该进程的局部内存空间。 进程具有两个明显的特征:一个是资源特征,包括那些程序执行所必需的计算资源,例如程序代码、内存地址空间、文件系统、I/O设备、程序计数器、寄存器、栈空间等;另一个是执行特征,包括那些在进程执行过程中动态改变的特征,例如指令路径(即进程执行的指令序列)、进程的控制与执行状态等。进程的资源特征反映了进程是资源拥有的最小单元,而执行特征反映了进程是操作系统调度的基本单元。即使是同一个程序,不同的程序执行也将产生不同的进程,因为这些进程拥有完全不同的执行特征。 任何进程,在执行过程中,均涉及如下几种状态: 非存在状态:进程依赖的程序还没有投入运行; 就绪状态:进程由其父进程(例如,操作系统的内核进程或Shell进程,或其他应用程序进程)调入并准备运行; 运行状态:进程占有CPU 和其他必需的计算资源,并执行指令; 挂起状态:由于CPU 或其他必需的计算资源被其他进程占有,或必需等待某类事件的发生,进程转入挂起状态,以后一旦条件满足,由操作系统唤醒并转入就绪状态; 退出状态:进程正常结束或因异常退出而被废弃。 只对消息传递并行程序设计感兴趣的读者,了解以上的进程概念就够了,有关进程的详细定义,将涉及到进程的映像、进程的执行模式、进程的现场活动、进程描述符和进程控制等诸多方面的知识。 (2) 进程间的通信 多个进程可同时存在于同一台处理机中,拥有独立的执行环境,在操作系统的调度下,分时共享计算机资源。但是,它们拥有的内存指令和数据地址空间必须互不相交,且每个进程只能访问自己的局部内存空间。如果一个进程执行的某条指令要求访问该进程局部内存空间之外的内存地址单元,则隐含该进程的程序存在错误,而进程的执行可能会中断。当然,位于不同处理机中的多个进程也拥有独立的执行环境,在各自操作系统的调度下,占有各自的计算机资源。 无论位于同一台处理机,还是位于不同处理机,进程始终是操作系统资源调度的基本单位,且各个进程不能直接访问其他进程的局部内存空间。但是,现代操作系统提供基本的系统调用函数,允许位于同一台处理机或不同处理机的多个进程之间相互交流信息,具体表现为三种形式:通信、同步和聚集。 通信:进程间的数据传递称为进程间通信。在同一台处理机中,通信可以通过读/写操作系统提供的共享数据缓存区来实现;在不同处理机中,通信可以通过网络传输数据来实现。特别地,称两个进程之间传递的数据为消息,称这种操作为消息传递。显然,消息传递可以在同一台处理机的多个进程之间发生,也可以在不同处理机的多个进程之间发生。 同步:同步是使位于相同或不同处理机中的多个进程之间相互等待的操作,它要求进程的所有操作均必须等待到达某一控制状态之后才进行。其实,同步也是进程之间相互通信的一种方式。 聚集(或归约):聚集将位于相同或不同处理机中的多个进程的局部结果综合起来,通过某种操作,例如求最大值、最小值、累加和,产生一个新的结果,存储在某个指定的或者所有的进程的变量中。其实,聚集也是进程间相互通信的一种形式。 在以后的讨论中,为了方便,将进程间相互操作的三种形式:通信、同步和聚集,统称为进程间通信,而操作的具体数据对象为消息,具体操作为消息传递。 进程间通信的具体实现大体可以分为两类: (1)在共享存储环境中,通过读/写操作系统提供的共享数据缓存区来实现; (2)在分布式存储网络环境中,通过网络通信来实现。但是,无论哪种形式,实现的具体细节对并行编程的用户都是屏蔽的,用户看到的均是统一的应用程序接口(API)。 在以后各章消息传递MPI 并行编程的详细介绍中,读者将会逐步深入地理解进程间通信各种形式的具体含义。 4.3 LINUX常用命令 下面介绍Linux 系统的一些基本命令。在介绍这些命令的同时,将顺便介绍一些Linux 操作系统的基本概念。Linux 系统中提供了非常丰富的命令用于完成各种任务,同时也提供许多途径获取信息,来了解这些命令的功能与使用 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 。 1. pwd 该命令显示当前工作目录。任何时候,用户都有一个当前目录的概念。刚登录进系统的时候,当前目录是用户的家目录。许多命令的执行结果会和当前目录有关系,所以知道当前目录非常重要。 [rli@arena local]$ pwd /usr/local shell提示符:如[rli@arena local]$- 其中rli为用户名;arena为主机名; local是当前目录;$提示符的一部分(普通用户)。 [用户名@主机名 当前目录]$ 管理员提示符:[root@arena tmp]# 2. cd 改变当前目录。使用该命令可以在整个文件系统中穿梭,在不同的位置做不同事情。请看下面的例子: [rli@arena rli]$ cd /usr/share/texmf/tex/latex [rli@arena latex]$ pwd /usr/share/texmf/tex/latex [rli@arena latex]$ cd /usr/local [rli@arena local]$ pwd /usr/local [rli@arena local]$ cd - #“-”回到上一次所在的目录 [rli@arena latex]$ pwd /usr/share/texmf/tex/latex [rli@arena latex]$ cd ~/src/appl #“~” 表示用户的家目录 [rli@arena appl]$ pwd /home/rli/src/appl [rli@arena appl]$ cd #“cd” 也是回到家目录 [rli@arena rli]$ pwd /home/rli [rli@arena rli]$ cd .. #“..” 表示当前目录的上一级目录 [rli@arena home]$ pwd /home 上例中,“cd -” 回到上一次所在的目录。“~” 表示用户的家目录。单独一个“cd” 也是回到家目录。“..” 表示当前目录的上一级目录。“.”指的就是当前目录。 3. ls ls 来自于英文单词list。默认情况下ls 会列出当前目录下的文件和子目录名,请看下面的例子: [rli@arena rli]$ ls # 列出当前目录下的文件和目录 bak bin data doc include lib src tmp 进一步,可以用-l 选项来让ls 显示更多的信息: [rli@arena rli]$ ls –l # 列出当前目录下的文件和目录的细节信息 total 268 drwxr-xr-x 5 rli users 8192 11月27 20:22 bak drwxrwxr-x 2 rli users 4096 11月2 14:17 bin drwxrwxr-x 4 rli users 4096 10月5 13:52 data drwxr-xr-x 13 rli users 4096 10月17 10:19 doc drwxrwxr-x 2 rli users 4096 4月15 2003 include drwxrwxr-x 2 rli users 4096 4月20 2003 lib drwxr-xr-x 11 rli users 4096 11月21 13:27 src lrwxrwxrwx 1 rli users 4 4月22 2003 tmp -> /tmp 上面的输出中包含了许多重要的信息与概念,下面详细解释一下。在Linux 系统中,所有的东西都被处理成一个文件,包括硬盘上真正的文件、目录、硬件设备,等等。上面的输出中,第一列的第一个字符给出文件的类型,这里,除了tmp 是“l” 以外,其余都是“d”。d表示目录,而l 表示符号链接。除了d 和l 外,文件类型还可以是 -、s、b、c 和p,分别表示普通文件、具有SUID 属性的文件、块设备、字符设备和管道。 Linux 是一个多用户的操作系统,系统中的每个文件都有属主(owner),即拥有该文件的用户。大部分系统文件的属主是超级用户,普通用户无权修改它们。每个文件除了有属主以外,还有一个用户组的属性。默认情况下,文件的组就是属主的默认组。这样,对于一个文件来说,系统上的所有用户被分成三类:第一类是该文件的属主,第二类是该文件的用户组中的用户,第三类是所有其他用户。在上面的输出中,第三列是属主(rli),第四列是文件的用户组(users)。对一个文件的访问权限描述,也相应分成三个部分,在上面的输出中,第一列除第一个字符外的其余9 个字符用于描述不同用户对文件的访问权限,它们每三个字符构成一组,共三组,分别表示属主、用户组成员和其他用户对该文件的访问权限。每组三个字符依次是r (read, 表示读的权限)、w (write, 表示写的权限) 和x (execute, 表示执行权限),如果具有该权限,则显示相应的字符,如果不具有该权限,则显示一个短横线 - 。比如上面输出行, drwxrwxr-x 4 rli users 4096 10月5 13:52 data 表示对于目录data,用户rli 有读、写和执行权限,users 组中的用户有读、写和执行权限,而其他用户只有读和执行权限,没有写权限。对于一个目录而言,具有执行权限意味着可以进入该目录。 上面的输出结果中第一行表示目录中所有文件所占的空间。其余行的各列依次是权限位、硬链接数、属主名、组名、文件大小、最后修改时间和文件名。ls 还有很多其他用法,下面是一些例子: [rli@arena rli]$ ls /usr # 列出目录/usr 下的文件和目录 bin doc games include lib local sbin src X11 dict etc i486-linux-libc5 kerberos libexec man share tmp X11R6 [rli@arena rli]$ ls -l data/*.dat # 列出目录data 下*.dat 文件的细节信息 -rw-r--r-- 1 rli users 15415 5月8 2003 data/u_h_comform.dat -rw-r--r-- 1 rli users 238736 8月16 22:27 data/u_h.dat 可以看到,可以在ls 命令后面指定要列出的文件或目录名。与Windows或MSDOS 中类似,可以在文件或目录名中使用通配符“*” 和“?”,前者匹配任意字符串,后者匹配任意单个字符。在Linux 系统中,通配符的使用比在Windows 或MSDOS 中更加灵活,例如,可以用“ls -l */*/*/*.dat” 列出所有第三级子目录下以“.dat” 为扩展的文件。 4. echo 显示命令行参数。该命令将命令行参数原封不动地显示出来。如: [rli@arena rli]$ echo ABC ABC [rli@arena rli]$ _ 这条命令看似没用,实际上非常有用。与输出重定向结合,可用来将特定内容写入文件;在shell 文件中,可用来输出信息;利用管道,可以为其他命令提供输入。后面的例子中经常会用到它。 5. file 确定一个文件大致的类型与性质。如 [rli@arena rli]$ file src # 看看src 是什么 src: directory # 哦,是一个目录 [rli@arena rli]$ file /dev/pts/0 # 那么这个是什么? /dev/pts/0: character special (136/0) # 这是一个特殊字符设备 [rli@arena rli]$ file /etc/rc.d/rc.sysinit # 这个文件是Bash 脚本文件 /etc/rc.d/rc.sysinit: Bourne-Again Shell script text executable 6. man 获取在线帮助。该命令取自英文单词“manual” (手册) 的开头,是获取命令帮助最为简单有效的手段。当对任何一条命令、函数、甚至关键词有疑问的时候,可以试试用man 命令加上相应命令、函数的名称或关键词,看是否有相关的帮助信息。例如,“man man” 给出man 命令本身的帮助信息: [rli@arena rli]$ man man man(1) man(1) NAME man - format and display the on-line manual pages manpath - determine user's search path for man pages SYNOPSIS man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-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. OPTIONS -C config_file ... ... [rli@arena rli]$ man ls # 获得ls 的帮助 阅读帮助信息时,可以用空格键向下翻页,用Ctrl-B 向上翻页,用字母“q” 退出帮助信息的阅读。当终端类型配置正确时,也可以用 以及箭头键来上下翻页或滚屏。 Linux 的各种在线帮助被分成了不同类别,参看表4.1。例如,可以用“man 3 scanf” 来查找C 的库函数scanf 的帮助。如果不知道一个关键字的确切类别,但是又有多个类别包含该关键字,可以考虑使用“-a” 选项,它使得man 列出所有类别中关于该关键字的帮助信 表4.1 LINUX 常用在线帮助分类 级别 所包含的帮助类型 1 可执行文件和shell命令 2 系统调用 3 库函数 4 /dev中的设备 5 配置文件 6 游戏 7 宏包 8 管理员命令 9 非标准的内核进程 n 其它 息。例如,类别“n”、“1” 和“3” 中均有关于“read” 的帮助信息,可以用“man -a read” 将所有关于read 的帮助信息找出来。 在man 打印出来的帮助信息中,开始是命令或关键字的名称和一个简单描述(NAME),紧跟着是它的语法(SYNOPSIS),然后是其功能的详细介绍(DESCRIPTION),最后是命令行参数和选项的描述(OPTIONS)。常常还有一个叫做SEE ALSO 的部分,列出和该命令相关的其他命令或关键字。 在阅读本章内容时,应该用man 命令阅读遇到的每条命令的在线帮助。在线帮助中的描述清晰准确,并且非常完整,通常是关于该命令最权威的资料。man 不但提供各种命令的帮助信息,还有所有的库函数的开发文档,系统的结构说明等等内容。Linux 系统中除了传统的man 格式的在线帮助之外,还有info格式的帮助文档。info 格式的帮助文档通常比man 更详尽。下面是用info ls 命令浏览ls 手册时的屏幕抓图: File: coreutils.info, Node: ls invocation, Next: dir invocation, Up: Directory listing `ls`: List directory contents ============================= The `ls' program lists information about files (of any type, including directories). Options and file arguments can be intermixed arbitrarily, as usual. For non-option command-line arguments that are directories, by default `ls' lists the contents of directories, not recursively, and omitting files with names beginning with `.'. For other non-option arguments, by default `ls' lists just the file name. If no non-option argument is specified, `ls' operates on the current directory, acting --zz-Info: (coreutils.info.gz)ls invocation, 48 lines --Top--------------------- *** Footnotes appearing in the node ``ls invocation'' *** (1) If you use a non-POSIX locale (e.g., by setting `LC_ALL' to `en_US'), then `ls' may produce output that is sorted differently than you're accustomed to. In that case, set the `LC_ALL' environment variable to `C'. -----Info: *Footnotes*, 7 lines --All------------------------------------------- Welcome to Info version 4.2. Type C-h for help, m for menu item. 在使用info 的时候,可以用p、u、f 等键以类似于浏览网页的方式进行阅读,用? 键可以得到关于这些快捷键的帮助。很多情况下,也可以用上下翻页、箭头等键浏览。 7. mkdir 创建一个新目录 [rli@arena rli]$ ls bak bin data doc include lib src tmp [rli@arena rli]$ mkdir newdir # 建立一个名为newdir 的目录 [rli@arena rli]$ ls bak bin data doc include lib newdir src tmp 8. rm 删除文件或目录 [rli@arena rli]$ touch newfile # 建立一个新的空文件newfile [rli@arena rli]$ ls bak bin data doc include lib newdir newfile src tmp [rli@arena rli]$ rm newfile # 删除文件newfile [rli@arena rli]$ ls bak bin data doc include lib newdir src tmp [rli@arena rli]$ rm -rf newdir # 删除文件newdir [rli@arena rli]$ ls bak bin data doc include lib src tmp 上面在rm 命令的后面加了-rf 参数,这是一种危险的使用方式。参数“-r” 表示按照目录树递归操作,“-f” 表示不做任何提示强制删除目录下的任何文件及子目录。进行这类操作时一定要非常小心,并且避免使用通配符,以免误删有用的文件或目录。 9. cp 拷贝目录或文件。它可以为一个文件建立一份新的拷贝,或者将一个或者多个文件拷贝到一个目标目录中。如果希望整个拷贝一个目录的话,可以使用-R、-r 或-a 选项。对许多命令而言,-R 选项表示按照目录树进行递归操作。 [rli@arena tmp]$ cp /home/rli/src/test.c. [rli@arena tmp]$ ls -l total 4 -rw-r--r-- 1 rli users 449 7月17 15:22 test.c 10. mv 移动目录或者文件。它将文件或者目录移动成为一个新的文件或者目录,或移动到另外一个目录中。请看一些例子: [rli@arena tmp]$ cp /home/rli/src/test.c. [rli@arena tmp]$ ls -l total 4 -rw-r--r-- 1 rli users 449 7月17 15:22 test.c [rli@arena tmp]$ mkdir test_dir [rli@arena tmp]$ mv test.c test_dir [rli@arena tmp]$ ls -l test_dir total 4 -rw-r--r-- 1 rli users 449 7月17 15:22 test.c [rli@arena tmp]$ cp -R test_dir ~ [rli@arena tmp]$ ls -l ~/test* total 4 -rw-r--r-- 1 rli users 449 7月17 15:24 test.c Linux 中没有类似于Windows 或MSDOS 中的rename 命令,后者的功能可以通过mv 命令来实现。 11. ln 为文件或目录建立链接(link)。Linux 系统中,一个文件或目录的链接对应于Windows 中的“快捷方式”,本质上相当于一个文件或目录具有多个名字。链接分硬链接和软链接(也叫符号链接) 两种。合理使用链接往往可以方便许多系统及文件的管理工作。默认情况下,ln 命令创建硬链接。如果希望创建符号链接,则应该加上“-s” 选项。一个文件的硬链接必须与原来的文件位于同一文件系统内(硬盘的同一个分区),而符号链接则无此限制。下面是创建一个目录的符号链接的例子: [rli@arena rli]$ ln -s ../../usr/include inc [rli@arena rli]$ ls -l inc lrwxrwxrwx 1 root root 7 7月17 15:45 inc -> ../../usr/include 注意,如果一个符号链接的对象包含的是相对路径(即路径名不是以“/” 开头),则该对象的位置是相对于符号链接所在的目录而言的。例如在上例中,假设当前目录是/home/rli,则inc 实际所指的对象为/home/rli/../../usr/include,即/usr/include。 12. touch 改变文件的最后修改时间。该命令将文件的最后修改时间设置成为现在,或者任意(通过选项) 指定的时间。该命令也常被用来创建一个新的空文件。 13. cat,more,less,lv,head,tail 查看文件内容。这些命令用不同方式显示文本文件的内容。cat将输入文件的内容连接起来输出到标准输出;more 将输入文件分屏交互地显示出来;less 是对more 功能的增强;head 显示输入文件的头十行或指定数目的行;tail 显示输入文件的最后十行或指定数目的行。这些命令支持一个或多个输入文件名做为参数。当不给出输入文件名时,它们会从标准输入,默认情况下是用户的键盘,读入内容,这种情况下需要用Ctrl-D 来结束输入: [rli@arena rli]$ cat > tmp.txt This is a tmp file. I use it to check how cat works. (Ctrl-D) [rli@arena rli]$ cat tmp.txt This is a tmp file. I use it to check how cat works. 上面第一个命令中使用了一个“>” 符号,这叫做重定向,它将本来应该输出到屏幕的内容转到了文件“tmp.txt” 中。后面会详细介绍有关重定向的内容。 用more 显示文件时,文件的内容会一页一页的显示,按回车键屏幕下滚一行,按空格键下翻一页,按Ctrl-B 可以回翻一页。less比more 更加方便,可以使用上下箭头、 等键,而且能够搜索文档(按“/” 键加搜索内容)。要注意的是,less 不能正确显示汉字,如果想显示包含汉字的内容的话,可以用程序lv 替代less。head 显示文件开头的内容,默认情况下显示10 行。tail 则显示文件尾部的内容,默认也是10 行。命令tail 还有一个非常有用的选项-f,它会自动检测文件的改动,实时显示文件新增加的内容。 14. chmod,chgrp,chown 修改文件属性。chmod 修改文件的权限位,chgrp 修改文件所属的组,chown 则修改文件的属主。在用ls -l 列出文件的细节信息时可以看到每个文件的属性,包括属主、组以及权限。这几个命令就是对这些属性进行修改的工具。下面是chmod 命令的例子: [rli@arena rli]$ ls -l newfile -rw-rw-r-- 1 rli users 0 7月18 14:34 newfile [rli@arena rli]$ chmod a+x newfile # 赋予所有用户执行权限 [rli@arena rli]$ ls -l newfile -rwxrwxr-x 1 rli users 0 7月18 14:34 newfile [rli@arena rli]$ chmod 654 newfile # 使用八进制方式修改权限 [rli@arena rli]$ ls -l newfile -rw-r-xr-- 1 rli users 0 7月18 14:34 newfile chmod 命令修改文件访问权限时可以用文本或八进制两种方式来描述。使用文本描述方式时,其语法为[ugoa][+-][rwx],其中第一部分表示修改哪部分用户的权限,字母“u”、“g”、“o” 和“a” 分别表示属主、用户组、其他用户和所有用户,第二部分表示增加(+) 还是去除(-) 相应的权限,而第三部分则表示是读(r)、写(w) 还是执行权限(x)。比如g+w 表示加上组中用户的写权限,o-x 表示去除其他用户的执行权限。如果只想增加或去除目录的执行权限(表示是否允许进入),但不希望改变普通文件的执行权限,可以用大写的“X”。例如,“chmod a+X *” 会将当前目录中的所有子目录加上执行权限,但不改变普通文件的执行权限。 使用文本方式修改文件属性,命令比较容易读懂,而使用八进制方式修改文件属性则更加快捷。chmod 命令用三个8 进制数来表示三类用户的权限,分别对应属主、用户组和其他用户,可读加4,可写加2,可执行加1,如果是去除权限就减去相应位上的数。例如,上例中,“chmod 654 newfile” 等价于命令“chmod uo-x,g-w newfile”。 使用chown 和chgrp 修改属主和组的例子如下: [root@arena rli]# chgrp ftp newfile # 注意ftp 是系统上的一个组 [root@arena rli]# ls -l newfile -rwxr-xr-- 1 rli ftp 0 7月18 11:42 newfile [root@arena rli]# chown root newfile [root@arena rli]# ls -l newfile -rwxr-xr-- 1 root ftp 0 7月18 11:42 newfile 注意这里需要以超级用户,即root 的身份进行操作。 如果希望同时修改整个目录中所有文件和子目录的属性,可以使用选项-R。 Linux 中的文件或者目录除了拥有上面这些属性外,还可以定义一些叫做attribute 的特性,它们在表4.2 中列出。命令chattr 和lsattr 用于修改和查看这些特性,帮助用户更好地控制机器上的文件和目录。比如一些系统目录是不许修改其中的文件的,可以给这些目录加上i 特性。合理使用这些特性有助于增强系统的安全性。 表4.2 LINUX文件特性 表示特性的字母 特性的含义 a 写操作的时候只能添加,不能删除现有的内容 c 内核会自动对文件进行压缩 i 不能删除,移动,连接,写入 s 文件删除时,磁盘空间也会清理干净 S 修改是直接写入磁盘,而不是 15. ps,kill,nice,renice,top 查看和管理进程。直接使用ps 命令可以看到现在正在运行的进程的信息;使用kill 可以向某个进程发一个信号,通常用于改变进程的运行状态或杀死进程;使用nice 和renice 可以调整进程的优先级别,从而使得机器能够集中精力于更重要的进程;top 则是一个交互式的查看系统状况的工具。请看下面的例子: [rli@arena rli]$ ps -u rli 1170 ? 00:00:00 fetchmail 5734 ? 00:00:00 .Xclients-defau 5782 ? 00:00:19 scim 5785 ? 00:00:00 ssh-agent 5786 ? 00:00:08 fvwm 5804 ? 00:00:01 FvwmPager 5805 ? 00:00:17 FvwmTaskBar 5806 ? 00:00:00 FvwmAnimate 5810 ? 00:00:01 xscreensaver 7218 ? 00:00:09 emacs 7283 ? 00:00:00 xterm 7285 pts/2 00:00:00 bash 7317 pts/2 00:00:00 ps 7318 pts/2 00:00:00 sh 上例显示了用户rli 所有的进程。其中可以看到窗口管理器的一些进程,该用户在用fetchmail 检查邮件,用Emacs 编辑器进行编辑(事实上编辑的正是本章的排版源文件),并且还启动了一个模拟终端xterm 来运行命令ps -u rli。下面用kill 来杀掉邮件检查程序fetchmail: [rli@arena rli]$ kill -9 1170 [rli@arena rli]$ ps -u rli 5734 ? 00:00:00 .Xclients-defau 5782 ? 00:00:19 scim 5785 ? 00:00:00 ssh-agent 5786 ? 00:00:08 fvwm 5804 ? 00:00:01 FvwmPager 5805 ? 00:00:17 FvwmTaskBar 5806 ? 00:00:00 FvwmAnimate 5810 ? 00:00:01 xscreensaver 7218 ? 00:00:09 emacs 7283 ? 00:00:00 xterm 7285 pts/2 00:00:00 bash 7317 pts/2 00:00:00 ps 7318 pts/2 00:00:00 sh 命令kill 向指定进程发送一个信号(signal),上例中的信号是“9”(KILL),表示强制进程终止。在指定信号时,既可用信号值,如“-9”,“-15” 等,也可用信号的名称,如“-KILL”、“-TERM” 等。当不指定信号时,默认信号为TERM,该信号通常终止进程的运行。表4.3 列出了不同信号的意义。信号可以是系统产生的,例如当发生某种异常(常见的有浮点溢出、非法内存访问等) 或事件时,也可以由一个进程发送给另一个进程。大部分信号能够被进程捕获,进程可以自行决定如何处理这些信号。但是9 (KILL) 是不能被捕获的,进程会立即终止。因此,除非有必要,通常应该用“kill -TERM” 来杀死进程,以便进程在退出前完成一些必要的清理和善后的工作。 nice 命令用于在启动进程时指定它的优先级别。普通用户只能降低进程的优先级别(这是命令名nice 的含义),而系统管理员可以调高进程的优先级。其语法为“nice -n 调整值[命令[参数]]”,所启动的进程会按照调整后的优先级运行。如果希望改变一个正在运行的进程的优先级,则需要用renice 命令。 top 用于交互地监视系统的状态。运行命令时,屏幕就会成为一个字符界面的窗口,在中间分列显示系统各方面的情况,同时还可以进行一些交互操作。 表4.3 LINUX常用信号 信号名称 信号值 含义 HUP 1 挂起(HangUp),挂断中断时产生。 INT 2 中断(Interrupt),按Ctri-C时产生。 QUIT 3 退出(Quit),按Ctri-/时产生。 BUS 7 总线错误。 KILL 9 强制性立即错误(KILL) SEGV 11 段错误(非法内存操作)。 TERM 15 一般性终止。 CONT 18 继续(Continue) STOP 19 暂停(STOP),按Ctri-Z时产生。 16. &,nohup 在后台运行程序。当运行一个比较花时间、而又不是非常急迫的程序时,可以把它放到后台去运行,只要在命令后面加上一个“&”就可以了。如果希望在后台程序运行的同时退出系统(logout),可以用nohup 命令来运行程序,避免从系统退出时程序被HUP 信号杀掉: [rli@arena rli]$ big_job & [rli@arena rli]$ ps | grep big_job 1173 ? 00:00:08 big_job [rli@arena rli]$ nohup even_bigger_job & [1] 2341 [rli@arena rli]$ nohup: appending output to `nohup.out' 用nohup 运行的命令会自动将它的输出定向到文件nohup.out 中。 17. fg,bg,jobs 控制前台或者后台程序的运行。fg 命令将一个后台运行的进程转到前台运行,bg 则是使得一个进程在后台运行。在nohup 的例子中,命令提交后系统会返回信息“[1] 2341”,表示后台运行的命令的进程号为2341,而它在当前终端里的作业号是1。如果希望将作业转到前台来运行,只需使用命令“fg %1”。在fg 命令中,还可以用字符串来指定作业,比如“%s*r” 表示命令行能够匹配上字符串“s*r” 的进程。 按Ctrl-Z 键,可以将正在前台运行的进程放到睡眠状态而将控制权交还给当前的shell。随后后在命令行使用bg 命令将使得该进程在后台继续运行。 命令jobs 显示出当前shell 中的所有作业及状态(“Running”、“Stopped” 等)。所显示的作业中带有“+” 号者为当前作业。fg、bg等命令中如果不指定作业,则其操作对象为当前作业。 18. find,locate 搜索文件。find 命令在指定目录中查找文件: [rli@arena rli]$ find /usr/share -name latex.ltx find: /usr/share/ssl/CA: 权限不够 /usr/share/texmf/tex/latex/base/latex.ltx [rli@arena rli]$ 上例查找目录/usr/share 下名为latex.ltx 的文件。在查找过程中,如果命令遇到用户没有权限进入的目录,系统会给出相应的信息。命令locate 也用于查找文件。当指定的目录中子目录、文件很多时,find 的运行会非常慢,这时,使用locate 来查找往往会快得多。例如: [rli@arena rli]$ locate latex.ltx /usr/share/texmf/ptex/platex/base/platex.ltx /usr/share/texmf/tex/latex/base/latex.ltx /usr/share/texmf/tex/latex/carlisle/mylatex.ltx [rli@arena rli]$ locate 的工作原理是当计算机空闲时预先搜索文件系统,将文件信息保存在一个数据库中。当用户查找文件时,它直接查找数据库,而不是到硬盘中去搜索,因此速度很快。通常,locate 会在机器最可能空闲时,如后半夜,更新自己的数据库。如果计算机经常处于关闭状态的话,则locate 可能找不到机会更新自己的数据库,从而导致查询的结果不对。 19. grep 寻找文本中的特定信息。例如,如果想在名为ftp_log 的日志文件中找到有哪些是来自于北京大学(IP 地址为162.105.x.x 形式)的服务请求,可以使用下面的命令: grep '162\.105\.' ftp_log 下面是另外一个例子 [rli@arena rli] grep "北京大学" doc/* 它列出子目录doc 下面所有包含“北京大学” 字样的文件及相应行的内容。除grep 外,还有egrep、fgrep 和zgrep 等命令,它们共同构成了grep 命令家族。这些命令用正则表达式描述查找的字符串。关于正则表达式将在后面介绍。 20. cut 分列处理文本。通过指定分隔符号来将句子分列,然后将指定的列提取出来。这条命令用来处理文本简单而方便。后面还会介绍更加复杂的用于文本处理的工具,如sed、awk 等。下面是几个cut的例子: [rli@arena rli]$ cat > tmp.txt ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin (Ctrl-D) [rli@arena rli]$ cut -d ":" tmp.txt -f2,5 x:FTP User [rli@arena rli]$ cut -d ":" tmp.txt -f3-6 14:50:FTP User:/var/ftp [rli@arena rli]$ cut -d "s" tmp.txt -f2 er:/var/ftp:/ 21. tr 对文本中的字符进行替换。该命令将标准输入流中的字符进行一些简单的替换、缩并或者是删除操作。比如在Windows 下编辑的文件转到Linux 下时,每一行末尾都有一个“^M” 字符,十分难看,还会导致有些程序不能正确处理。用下面的命令可以将文件中的“^M”去掉: cat source_file | tr -d '\r' > dest_file 该例中,选项“-d”表示删除输入文本中的指定字符,“\r”代表字符“^M”(ASCII 字符13)。 22. who,whoami,id,w 命令who 和w 显示出当前登录的所有用户的信息,whoami 和id 则显示出当前用户的信息。 23. mount,umount,df 这些命令分别用来挂载、卸载文件系统和显示当前挂载的文件系统。Linux 系统中可以同时使用多个文件系统,它们物理上可以位于不同的硬盘、硬盘分区或存储媒介上(如光盘、移动硬盘等)。在Linux 系统中,最主要的文件系统称为根文件系统(root filesystem),即包含根目录的文件系统。其他文件系统都被挂接在根文件系统的某级子目录中。这样,不论实际有多少个文件系统同时在使用,从逻辑结构上看整个文件系统依然是一个单一的树型结构。这一点和Windows 系统有很大的不同。在Windows 系统中,不同文件系统被映射成不同的逻辑分区,如C:、D: 等,每个逻辑分区构成一个独立的树型结构。 在Linux 系统中,挂载一个文件系统时,必须将它挂载到一个已有的子目录上,该子目录称为该文件系统的挂载点。当一个文件系统挂载成功后,挂载点中原有的内容变得不可见,取代它们的是新挂载的文件系统中的内容。 挂载一个文件系统的命令是mount,而卸载一个文件系统的命令是umount。这两条命令只有超级用户才有权力运行。当一个文件系统卸载后,挂接点下面原有的内容又会重新暴露出来。命令df 则显示出当前挂载的所有文件系统。当卸载一个文件系统时,如果其中的文件或目录被正在运行的进程使用,则系统将拒绝卸载该文件系统。此时,需先终止使用该文件系统的进程,然后再执行卸载操作。命令lsof 列出当前打开的所有文件及打开文件的进程,通过它结合grep 命令可以找出到底哪些进程在使用欲卸载的文件系统。 系统配置文件/etc/fstab 中定义了系统启动时自动挂载的文件系统。当然,系统启动过程中必须首先挂载根文件系统,然后才能在其上挂载其他文件系统。做为例子,下面列出的是是作者机器上的/etc/fstab 文件中的部分内容: /dev/hda4 / ext3 defaults 1 1 /dev/hda5 /home ext3 defaults 1 2 /dev/fd0 /mnt/floppy auto noauto,owner,kudzu 0 0 /dev/sda1 /mnt/usb auto noauto,users 0 0 /dev/cdrom /mnt/cdrom auto noauto,owner 0 0 其中,第一列是文件系统所使用的设备(硬盘分区、软驱、光驱、USB盘等) 或文件,第二列是挂载点,后面几列分别是文件系统类型,挂载选项,最后两个数字分别说明是否进行dump 备份标识和启动时对文件系统进行检查,这里就不详细解释了。上面列出的第一行就是根文件系统,它对应着硬盘hda 上的第4 个分区(/dev/hda4)。第二行是用户家目录所在的文件系统(在硬盘的第5 个分区上)。后面三行分别是软盘驱动器、U 盘和光驱的挂载信息,由于使用了选项“noaut
本文档为【第四章 并行计算机的操作系统及编程环境】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_048223
暂无简介~
格式:doc
大小:260KB
软件:Word
页数:22
分类:互联网
上传时间:2011-11-29
浏览量:16