本章节主要内容为:命令基础知识、目录操作命令、文件操作命令、文件权限操作、重定向和管道、进程与控制作业命令、基本网络命令、gcc 编译。
注:本Linux新人培训教程以中兴新支点服务器操作系统(CGSL)为例。
熟悉在命令行界面下工作对使用和管理 CGSL 操作系统提供了极大的方便,本章介绍在 CGSL 系统中进行 Shell 操作的基本知识。
1.1.基础知识 主要介绍关于 CGSL 系统中 Shell 及文件和目录的基础知识。 1.1.1.文件命令 CGSL 下文件名的最大长度可以是 256 个字符,通常由字母、数字、“.”(点号)、“_”(下划线)和“-”(减号)组成。文件名中不能含有“/”符号,因为“/”在 Linux 目录树中表示根目录或路径中的分隔符(如同 DOS 中的“\”)。 Linux 系统中支持文件名中的通配符,具体如下: 星号(*):匹配零个或多个字符; 问号(?):匹配任何一个字符; [ab1A-F]:匹配任何一个列举在集合中的字符。本例中,该集合是 a、b、l 或任何一个从 A 到 F 的大写字符。 1.1.2.路径 操作系统查找文件所经过的路径称为路径名。使用当前目录下的文件时可以直接引用文件名;如果要使用其他目录下的文件,就必须指明该文件在哪个目录之中。 按查找文件的起点不同可以分为两种路径:绝对路径和相对路径。从根目录开始的路径称为绝对路径,从当前所在目录开始的路径称为相对路径。 与 DOS 相同,每个目录下都有代表当前目录的“.”文件和代表当前目录父目录的“..”文件,相对路径名一般就是从“..”开始。 提示:在 Linux 目录树中,表示根目录或者路径中的分隔符是“/”。 1.1.3.文件类型 CGSL 系统支持以下文件类型:普通文件、目录文件、设备文件、命名管道文件、套接字文件以及符号链接文件。 普通文件:包括文本文件、数据文件、可执行的二进制程序等。 目录文件:简称目录,CGSL 中把目录看成是一种特殊的文件,利用它构成文件系统的分层树型结构。每个目录文件中至少包括两个文件,“..”表示上一级目录,“.”表示该目录本身。 设备文件:设备文件是一种特别文件,CGSL 系统利用它们来标识各个设备驱动器,内核使用它们与硬件设备通信。有两类特别设备文件:字符设备和块设备。 命名管道文件:用于系统进程通信的文件。 套接字文件:套件字文件类似于命名管道文件,用于网络通讯之间进行通信的文件。 符号链接:一种特殊文件,它们存放的数据是文件系统中通向某个文件的路径。当使用符号链接文件时,系统自动地访问所保存的这个路径。 1.1.4.目录结构 通过对系统目录组织结构的了解,可以在进行文件操作和系统管理时方便地知道所要的东西在什么地方。 CGSL 的文件系统采用分层的树形目录结构。即在一个根目录(通常用“/”表示),含有多个下级子目录或文件;子目录中又可含有更下级的子目录或者文件的信息,这样一层一层地延伸下去,构成一棵倒置的树。树中的“根”与“杈”代表的是目录或称为文件夹,而“叶子”则是一个个的文件。 下面列出了主要的系统目录及其简单描述: /bin:存放普通用户可以使用的命令文件。目录 /usr/bin 也可用来贮存用户命令。 /sbin:一般用于存放非普通用户使用的命令(有时普通用户也可能会用到)。目录 /usr/sbin 中也包括了许多系统命令。 /etc:系统的配置文件。 /root:系统管理员(root 或超级用户)的主目录。 /usr:包括与系统用户直接相关的文件和目录,一些主要的应用程序也保存在该目录下。 /home:用户主目录的缺省位置,保存了用户文件(用户自己的配置文件、文档、数据等)。 /dev:设备文件。在 CGSL 中设备以文件形式表现,从而可以按照操作文件的方式简便地对设备进行操作。 /mnt:文件系统的缺省挂载点。一般用于安装移动介质、其它文件系统(如 DOS)的分区、网络共享文件系统或任何可安装文件系统。 /lib:包含许多由/bin 和/sbin 中的程序使用的共享库文件。目录/usr/lib/中含有更多用于用户程序的库文件。 /boot:包括内核和其它系统启动时使用的文件。 /var:包含一些经常改变的文件。例如假脱机(spool)目录、文件日志目录、锁文件、临时文件等等。 /proc:操作系统的内存映像文件系统,是一个虚拟的文件系统(没有占用磁盘空间)。当您查看它们时,看到的是内存里的信息,这些文件有助于了解系统内部信息。 /opt:存放可选择安装的文件和程序。主要由第三方开发者用于安装和卸装他们的软件包。 /tmp:用户和程序的临时目录。 /lost + found:在系统修复过程中恢复的文件。 1.1.5.Shell 简介 用户在命令行下工作时,不是直接同操作系统内核打交道,而是由命令解释器接受命令,分析后再传给相关的程序。进入 CGSL 环境时系统将自动启动相应的 Shell,Shell 是一种命令行解释程序,它提供用户与操作系统之间的接口。CGSL 下默认的 Shell 是 bash。bash 命令的基本格式如下: 命令名【选项】【参数1】【参数2】… 其中方括号括起的部分表明该项对命令而言是可选的。 【选项】 :对命令有特别定义,一般以“-”开始,多个选项可用一个“-”连起来,如 ls -l -a与 ls -la相同。 【参数】 :提供命令运行的信息,或者是命令执行过程中所使用的文件名。 提示:输入用户名、口令、命令名与文件名时一定要区分大小写,因为大小写字母在 Linux 系统中代表不同的含义。 提示:在命令、选项和参数之间要用空格隔开,连续的空格会被 Shell 解释为单个空格。 键入命令 在 Shell 提示符下输入相应的命令,然后按回车键确认,Shell 会读取该命令并执行。如果系统找不到输入的命令,会显示:“command not found”,这时需要检查键入命令的拼写及大小写是否正确。 使用分号(;)可以将两个命令隔开,这样可以实现在一行中输入多个命令。命令的执行顺序和输入的顺序保持一致。 命令补齐 当要输入的命令目录很深或命令中的文件名很长时,只要按一下<Tab>键,系统会在可能的命令或文件名中找到相匹配的项,自动帮您补齐。如果有一个以上的文件符合输入的字符串,不能补齐时,可以按两下<Tab>键,系统将把所有符合的文件名列出来。 历史记录 Shell 会把过去输入过的命令记忆下来,只要按上下方向键,就可以选择以前输入过的命令了。 有了以上基础,可以运行下面列出的几个简单命令来实际使用一下: clear :刷新屏幕; date :在屏幕上显示日期和时间; echo :将字符或字符串回显到标准输出上; cal :显示月份和日历。 1.1.6.系统帮助 CGSL 具有强大的系统和网络功能,数量众多的实用工具软件和大量复杂的操作命令。 为了帮助用户顺利进行操作,系统提供了多种多样的联机帮助信息以便用户随时查询。 联机手册 通过 man 命令使用联机用户手册,系统可以显示任何命令的联机帮助信息。man 命令的语法格式为: #man [ [ [-c ] [-t ] [Section] ] | [-k | -f ] ] [-F] [-m] [ -MPath ] [ -r ] [ -a ] Title 1.其中选项及意义如下: -a 显示所有匹配项。 -c 显示使用 cat 命令的手册信息。 -f 显示在关键字数据库中仅与作为最终参数给定的命令名相关的项。可以输入多个命令名,中间用空格隔开。 -F 只显示首个匹配项。 -k 显示关键字数据库中包含与作为最终参数给定的字符匹配的标题的字符串的每一行。 -m 只在 MANPATH 或 -M 中指定的路径中搜索。 -M Path 更改 man 命令搜索手册信息的标准位置。路径是用冒号隔开的路径的列表,其中,可以使用以下特殊符号: %D 联机帮助页的缺省 AIX® 路径。 %L 与当前语言环境的 LC_MESSAGES 类别相对应的特定于语言环境的目录位置。 %L 与当前 LC_MESSAGES 类别的首 2 个字符相对应的特定于语言环境的目录位置。 -r 手册信息的远程搜索。如果出于某个原因,远程搜索失败,则 man 将执行本地搜索以获取请求的联机帮助页。 -t 使用 troff 命令格式化手册信息。如果在超文本信息基中查找到手册页面,则忽略该标志。 如果为 Section 参数指定一个段,则 man 命令在手册页面的该段中搜索 Title 参数指定的标题。 Section 参数的值可以是1到8的阿拉伯数字或字母。 1 表示用户命令和守护程序。 2 表示系统调用和内核服务。 3 表示子例程。 4 表示特殊文件、设备驱动程序和硬件。 5 表示配置文件。 6 表示游戏。 7 表示杂项命令。 8 表示管理命令和守护程序。 2.man 的一些常用参数和用法: #man -a cmd 打开所有领域内的同名帮助,例如 man -a fam,您首先会进入一个 fam(1M)的命令版 fam 帮助,您再按 q 键 就会进入 FAM(3X),库函数版的帮助 #man -aw cmd 显示所有 cmd 的所有手册文件的路径,如 man -aw fam 就是 /usr/share/man/man1/fam.1m.gz /usr/share/man/man3/fam.3x.gz man 领域代号 cmd 直接指定特定领域内搜索手册页,如 man 3 fam 直接进入库函数版的帮助 指定手册文件的搜索路径,如 man -M /home/mysql/man mysql 显示的就是您安装的 mysql 的帮助,而不是系统自带的旧版 mysql 的帮助 #man -M cmd 也可以将内容重定向到一个文本文件内: #man cmd | col -b > cmd.txt 新开一个 shell 窗口(或在原窗口 shell> LANG=en_US.UTF-8) shell>man /usr/share/man/zh/man1/mplayer.1.gz man 的配置文件/etc/man.config 如果您不想每次 man cmd 都要用 -M 指定路径,那么可以通过修改配置文件,添加内容如 MANPATH /home/mysql/man man 在各领域的搜索次序可以通过修改,但一般不推荐修改。 MANSECT 1:8:2:3:4:5:6:7:9:tcl:n:l:p:o 常用的Linux 系统帮助手册按章节分类,位于/usr/share/man 目录下。 3.应用实例 要显示关于 grep 命令的信息,请输入: #man grep 要显示关于 rpc_$register 库例程的信息,请输入: #man rpc_\$register 要显示包含“mkdir”字符串的所有项(等同于 apropos 命令),请输入: #man -k mkdir 要显示/usr/share/man 或 /usr/share/man/local路径中的所有与ftp命令相关的物件,请输入: #man -M /usr/share/man:/usr/share/man/local ftp 要显示所有匹配项,输入以下命令: #man -a Title 只要显示首个匹配项,输入以下命令: #man -F Title 只要在 MANPATH 或 -M 中指定的路径中搜索,输入以下命令: #man -m -M PATH Title 要在用户定义的 PATH 中搜索,输入以下命令: #man -M PATH Title
1.2.目录操作命令 1.2.1.查看目录 查看目录内容的命令是 ls ,它默认显示当前目录的内容,可以在命令行参数的位置给出一个或多个目录名,从而可以查看这些目录。命令的语法格式为: #ls [OPTION]… [FILE]… ls 命令常用的选项如下: -a :列出所有文件,包括那些以“.”开头的文件; -d :如果后面接的是一个目录,那么使用该参数只输出该目录的名称; -l :使用长格式显示文件条目,包括连接数目、所有者、大小、最后修改时间、权限等; 其它选项及相关详细说明请参见 ls 命令的 man 手册:man ls。 1.2.2.改变工作目录 进入一个目录,或者说改变当前工作目录使用 cd 命令,其命令的语法格式为: #cd DIRECTORY cd 命令带有唯一的一个参数,即表示目标目录的路径名(相对路径名或绝对路径名)。 利用点点(..)把工作目录向上移动一级目录:cd.. 为了从系统中的任何地方返回到用户主目录,可以使用不带任何参数的 cd 命令。 1.2.3.创建目录 使用 mkdir 命令创建一个目录或多个目录。其命令的语法格式为: #mkdir [OPTION] DIRECTORY mkdir 命令常用的选项如下: -p:当指定目录存在时不会报错,并根据需要一并创建其父目录。 #mkdir -p DIRECTORY/SUBDIRECTORY 其它选项及相关详细说明请参见 mkdir 命令的 man 手册:man mkdir 1.2.4.删除目录 rmdir 命令从目录中删除一个或多个空的子目录,语法格式如下: #rmdir [OPTION]… DIRECTORY… 子目录被删除之前应该是空目录,如果该目录中仍有其它文件,那么就不能用 rmdir 命令把它删除。当前的工作目录必须在被删除目录之上,不能是被删除的目录本身,也不能是被删除目录的子目录。 rmdir 命令常用的选项如下: -p 选项:递归地删除指定的目录及其父目录。例如: #rmdir -p a/b/c 将删除 a 目录,则相当于执行: #rmdir a/b/c a/b a 提示:rmdir 命令只能删除空目录。使用 rm -r 命令可以删除非空目录,参见后续章节中的 rm 命令介绍。 1.2.5.显示当前目录 命令 pwd 可以显示用户当前在目录树中的位置。如: #pwd /root 表示用户当前所在的目录是/root。
1.3.文件操作命令 1.3.1.显示文本文件 CGSL 系统中,如下的命令常用以显示文本文件。 cat 命令 cat 命令把文件串连接后传到标准输出(通常是屏幕)上显示出来。该命令的一般语法是: #cat [OPTION] [FILE]… 常用选项如下: -n :显示输出行的编号。 -b :只对非空输出行进行编号。 其它选项及相关详细说明请参见该命令的 man 手册:man cat more 命令 more 命令显示文件内容,每次显示一屏。其语法是: #more [OPTION]… [FILE]… 可在每个屏幕的底部出现一个提示信息,给出至今已显示的该文件的百分比。 如下交互式命令可控制显示结果: 按<space>键,显示文本的下一屏内容。 按<Enter>键,只显示文本的下一行内容。 按斜线符(/),接着输入一个模式,可以在文本中寻找下一个相匹配的模式。 按 h 键,显示帮助屏,该屏上有相关的帮助信息。 按 b 键,显示上一屏内容。 按 q 键,退出 more 命令。 相关其它详细信息请参见相应的 man 手册:man more less 命令 less 命令显示文件内容,其语法是: #less [OPTION]…[FILE]… less 命令用于控制显示结果的交互式命令与 vi 编辑器中的交互式命令一致,详细请参见 vim 实用程序相关章节的介绍。 相关其它详细信息请参见相应的 man 手册:man less head 命令 其命令语法如下: #head [OPTION]…[FILE]… head 命令在屏幕上显示指定文件前多少行和前多少个字节等,这是由-c 或者-n 选项决定的。 相关其它详细信息请参见相应的 man 手册:man head tail命令 其命令的语法如下: #tail [OPTION]…[FILE]… 在屏幕上显示指定文件末尾的若干行或若干字节,这是由-c 或者-n 选项决定的;或者从指定行号开始显示,直至该文件的末尾。 相关其它详细信息请参见相应的 man 手册:man tail 1.3.2.更新文件访问和修改时间 可以利用该命令更新对文件的访问和修改时间,且可以用来创建空文件。其语法如下: #touch [OPTION]… [FILE]… 不存在的文件名被当作空文件创建。已存在文件的时间标签会更新为当前的时间(默认方式),而数据将原封不动地保留下来。 相关其它详细信息请参见相应的 man 手册:man touch 1.3.3.拷贝文件 使用 cp 命令拷贝文件。可以使用cp命令把一个源文件拷贝到一个目标文件,或者把一系列文件拷贝到一个目标目录中。其语法是: #cp [OPTION]…SOURSE DEST 如果目标文件是目录文件,那么把源文件拷贝到这个目录中,而文件名保持不变;如果目标文件不是目录文件,那么源文件就拷贝到该目标文件中,后者原有的内容将被破坏,但文件名不变。 常用选项如下: -r,-R :拷贝目录。 -a :保持源文件的所有属性。 其它选项及相关详细说明请参见该命令的 man 手册:man cp 1.3.4.移动和重命名文件 mv 命令用来移动文件或对文件重命名。该命令的语法为: #mv [OPTION] SOURSE DEST 下表是源和目标分别为文件或目录时的简单说明:
1.3.5.删除文件 用 rm 命令删除不需要的文件和目录。该命令的语法为: #rm [OPTION]… FILE… 常用选项如下: -r 选项:可以删除目录。当一个目录被删除时,所有文件和子目录都将被删除。 其它选项及相关详细说明请参见该命令的 man 手册:man rm 警告:这是个非常危险的命令,需慎用! 1.3.6.文件链接 CGSL 操作系统具有为一个文件起多个名字的功能,称为链接。这样只要对一个文件修改,就可以完成对所有目录下相应链接文件的修改。 ln 命令用来创建链接,常用语法为: #ln [OPTION]… [-T] TARGET LINK_NAME #ln [OPTION]…TARGET… DIRECTORY 其中 TARGET 为被链接的目标文件,LINK_NAME 为链接文件名,DIRECTORY 为链接文件被存放的目录。 文件链接有两种形式,即硬链接和符号链接。 硬链接 默认情况下,ln 命令创建硬链接。 一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件链接数为 1。ln 命令会增加链接数,rm 命令会减少链接数。一个文件除非链接数为 0,否则不会物理地从文件系统中被删除。 对硬链接有如下限制:不能对目录文件作硬链接,不能在不同的文件系统之间作硬链接。 符号链接 符号链接也称软链接,是将一个路径名链接到一个文件,事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名。另一个文件是实际包含所有数据的文件。所有读写文件内容的命令,当它们被用于符号链接时,将沿着链接方向前进去访问实际的文件。 如果给 ln 命令加上s选项,则建立符号链接。如下命令创建到 target 文件的符号链接文件 link: #ln -s target link 符号链接没有硬链接的限制,可以对目录文件作符号链接,也可以在不同文件系统之间作符号链接。 相关详细说明请参见该命令的 man 手册:man ln 1.3.7.文件内容比较 比较文本文件 diff 命令用于比较文本文件,并显示两个文件的不同。其一般格式是: #diff [options] from-file to-file 如果两个文件完全一样,则不显示任何输出。如果有区别,就会分段显示两个文件的区别。 相关详细说明请参见该命令的 man 手册:man diff 比较数据文件 cmp 命令比较任何两个包含正文或数据的普通文件。其一般语法为: #cmp [-l | -s] file1 file2 [skip1 [skip2]] 由于二进制数据不能显示到屏幕上,cmp 命令只是简单的报告从哪一个字节开始出现不同。 相关详细说明请参见该命令的 man 手册:man cmp 1.3.8.查找文件 find 命令 find 命令用来查找文件和目录的位置。该命令的语法为: #find [-H] [-L] [-P] [path…] [expression] 其中,常用的选项有: find 命令的最基本的用法就是列出指定目录下的所有文件和子目录: #find /usr -name :按文件名查找。 如:下面的命令将查找/usr 目录下名称为 linux 的目录和文件: #find /usr –name ‘linux’ -size :按文件大小查找。 例如,下面的命令将查找/usr 目录下等于 100k 的文件: #find /usr -size 100k -user :按文件主查找。 -type :按文件类型查找。常见的类型有: b 块特别文件 C 字符特别文件 f 普通文件 l 符号链接文件 d 目录文件 其它选项及相关详细说明请参见该命令的 man 手册:man find locate 命令 locate 是一个使用方便且查询速度极快的文件和目录查找命令。该命令的语法为: #locate [OPTION]… PATTERN… 使用 locate 命令的前提是要先创建一个用于定位文件或目录位置的 mlocate 数据库,而且该数据库应是时时更新的,这样才可以保证 locate 查找结果的准确性。 updatedb 命令用户创建和更新 mlocate 数据库,需要以 root 用户身份执行此命令。 #updatedb 数据库创建后就可以查找文件了。例如,要查找所有关于 telnet 命令的文件。可以使用: #locate telnet locate 命令将在其数据库中检查所有匹配于 telnet 的文件和目录并在屏幕上显示结果。相关详细说明请参见该命令的 man 手册:man locate。 1.3.9.在文件中查找文本 grep 命令用来在文本文件中查找指定模式文本,并在标准输出上显示包括给定文本所有行。grep 命令的语法为: #grep [options] PATTERN [FILE…] 常用选项如下: -i 选项:匹配文本时不区分大小写。 -r 选项:在目录及其子目录下的所有文件中查找。 例如,下面的命令将在/etc 目录及其子目录下的所有文件中查找所有包含“hello word”文本的行,且不区分大小写: #grep -ri ‘hello world’ /etc 其它选项及相关详细说明请参见该命令的 man 手册:man grep
1.4.文件权限操作 在多用户操作系统中,出于安全性的考虑,需要给每个文件和目录加上访问权限,严格地规定每个用户的权限。同时,用户可以为自己的文件赋予适当的权限,以保证他人不能修改和访问。 1.4.1.改变文件主 Linux 为每个文件都分配了一个文件所有者,称为文件主,对文件的控制取决于文件主或超级用户(root)。文件或目录的创建者对创建的文件或目录拥有特别使用权。 文件的所有关系是可以改变的,chown 命令用来更改某个文件或目录的所有权。chown 命令的语法格式是: #chown [OPTION]… [OWNER][:[GROUP]] FILE… 用户可以是用户名或用户 ID。文件是以空格分开的要改变权限的文件列表,可以用通配符表示文件名。 如下命令将/home/test 文件的文件主修改为 root 用户。 #chown root /home/test 如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。 1.4.2.改变文件用户组 在 Linux 下,每个文件又同时属于一个用户组。当创建一个文件或目录,系统会赋予它一个用户组关系,用户组的所有成员都可以使用此文件或目录。 文件用户组关系的标志是 GID 。文件的 GID 只能由文件主或超级用户(root)来修改。chgrp 命令可以改变文件的 GID ,其语法格式为: #chgrp [OPTION]…GROUP FILE… 其中 group 是用户组 ID。文件名是以空格分开的要改变属组的文件列表,它支持通配符。 1.4.3.文件权限设置 Linux 系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。 访问权限规定三种不同类型的用户: 文件主(owner) 同组用户(group) 可以访问系统的其他用户(others) 访问权限规定三种访问文件或目录的方式: 读(r) 写(w) 可执行或查找(x) 当用 ls -l 命令或 l 命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。其中各位的含义如下:
文件访问权限 读权限(r) 只允许指定用户读其内容,而禁止对其做任何的更改操作。将所访问的文件的内容作为输入的命令都需要有读的权限。例如:cat、more 等。 写权限(w) 允许指定用户打开并修改文件。例如命令 vi、cp 等。 执行权限(x) 指定用户将该文件作为一个程序执行。 目录访问权限 读权限(r) 可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许 Shell 使用文件扩展名字符列出相匹配的文件名。 写权限(w) 允许从目录中删除或添加新的文件,通常只有目录主才有写权限。 执行权限(x) 允许在目录中查找,并能用 cd 命令将工作目录改到该目录。 1.4.4.改变文件权限 1.4.4.1.以符号模式改变权限 chmod 用于改变文件或目录的访问权限。用户可以用它控制文件或目录的访问权限。只有文件主或超级用户 root 才有权用 chmod 改变文件或目录的访问权限。 chmod 命令的语法为: #chmod [OPTION]… key FILE… key 由以下各项组成: 【who】 【操作符号】 【mode】 其中,操作对象 who 可以是下述字母中的任一个或者它们的组合: u user ,表示用户,即文件或目录的所有者。 g group ,表示同组用户,即与文件属主有相同组 ID 的所有用户。 o others ,表示其他用户。 a all ,表示所有用户,它是系统默认值。 操作符号可以是: + 添加某个权限 - 取消某个权限 = 赋予给定权限并取消其他所有权限(如果有的话) mode 所表示的权限可用相关权限标识的任意组合,常用的权限标识有: r 可读 w 可写 x 可执行 s 在文件执行时把进程的属主或组ID 置为该文件的文件属主 u 与文件属主拥有一样的权限 g 与和文件属主同组的用户拥有一样的权限 o 与其他用户拥有一样的权限 这三部分必须按顺序输入。可以用多个 key,但必须以逗号间隔。 如下命令添加/home/testfile 文件的同组用户的可执行权限: #chmod g+x /home/testfile 1.4.4.2.以绝对方式改变权限 通常也可以用 chmod 命令配以不同类型的 key 直接设置权限。这时以数字代表不同的权限。这里 key 可以包括三个(或三个以上)的数字,每个数字表示对不同类型用户的权限。 数宇表示的属性的含义: 0 表示禁止该权限,l 表示可执行权限,2 表示可写权限,4 表示可读权限,然后将其相加。所以数字属性的格式应为 3 个从 0 到 7 的八进制数,其顺序是(u)(g)(o)。 通常,key 是以三位八进制数字出现的,第一位表示用户权限,第二位表示组权限,第三位表示其他用户权限。 例如,要使文件 myfile 的文件主和同组用户具有读写权限,但其他用户只可读,可以用以下命令指定权限: #chmod 664 myfile 1.4.5.默认权限 默认情况下,系统将创建的普通文件的权限设置为-rw-r-r--,即文件主对该文件可读可写(rw),而同组用户和其他用户都只可读;同样,在默认配置中,将每一个用户主目录的权限都设置为drwx------,即只有文件主对该目录可读、写和可查询(rwx),即用户不能读其他用户目录中的内容。 用户可以修改新建文件的默认存取权限,如使用如下命令: #umask u = rwx , g = , o = 它会在创建新文件时给文件主以全部权限,而同组用户及其他用户没有任何权限。
1.5.重定向和管道 执行一个 Shell 命令行通常会自动打开三个标准文件,即标准输入文件(stdin ) ,通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件通常都对应终端的屏幕。进程从标准输入文件中得到数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。 下面以 cat 命令为例,cat 命令的功能是从命令行给出的文件中读取数据,并将这些数据直接送到标准输出。例如,使用以下命令: #cat config 将会把文件 config 的内容依次显示到屏幕上。但是,如果 cat 的命令行中没有参数,它就会从标准输入中读取数据,并将其送到标准输出。例如: #cat Hello world Hello world 直接使用标准输入/输出文件存在以下问题: l、数据从标准终端输入时,输入的数据只能用一次,下次再想用这些数据时就需要重新输入;而且在终端上输入时,若输入有误修改起来也不方便; 2、输出到终端屏幕上的信息只能看不能修改。用户无法对输出的内容进行更多处理,如将输出作为另一命令的输入进行进一步的处理等。 为了解决上述问题,Linux 系统为输入、输出的传送引入了另外两种机制,即输入/输出重定向和管道。 1.5.1.输入重定向 输入重定向是指把命令(或可执行程序)的标准输入重定向到指定的文件中。也就是说,输入可以不是来自于键盘,而来自一个指定的文件。 例如,命令 wc 统计指定文件包含的行数、单词数和字符数。如果仅在命令行上键入: #wc wc 将等待用户的输入,从键盘键入的所有文本都出现在屏幕上,但并没有结果,直至按下<Ctrl + D> ,wc 才将命令结果写在屏幕上。 如果给出一个文件名作为 wc 命令的参数,wc 将返回该文件所包含的行数、单词数和字符数。 另一种把/etc/passwd 文件内容传给 wc 命令的方法是重定向 wc 的输入。输入重定向的一般形式为: #command < filename 可以用下面的命令把 wc 命令的输入重定向为/etc/passwd 文件: wc < /etc/passwd 20 23 726 大多数命令都以参数的形式在命令行指定输入文件的文件名,所以输入重定向并不经常使用。尽管如此,当使用一个不接受文件名作为输入参数的命令,或需要的输入内容存在于一个文件里时,就能用输入重定向解决问题。 1.5.2.输出重定向 输出重定向是指把命令(或可执行程序)的标准输出或标准错误输出重新定向到指定文件中。这样,该命令的输出就不显示在屏幕上,而是写入到指定文件中。 输出重定向比输入重定向更常用。例如,如果某个命令的输出很多,在屏幕上不能完全显示,那么将输出重定向到一个文件中,然后再用文本编辑器打开这个文件,就可以查看输出信息;如果想保存一个命令的输出,也可以使用这种方法。还有,输出重定向可以用于把一个命令的输出当作另一个命令的输入。 输出重定向的一般形式为: #command > filename 例如: #ls > directory.out #cat directory.out chl.doc ch2.doc ch3.doc chimp config mail /test/ 将 ls 命令的输出保存为一个名为 directoryout 的文件。 提示:如果>符号后的文件已存在,那么这个文件将被覆盖。 为避免输出重定向中指定文件只能存放当前命令的输出重定向的内容,Shell 提供了输出重定向的一种追加手段。 输出追加重定向与输出重定向的非常相似,区别仅在于输出追加重定向的功能是把命令(或可执行程序)的输出结果追加到指定文件的最后,而该文件原有内容不被破坏。 如果要将一条命令的输出结果追加到指定文件的后面,可以使用追加重定向操作符“> >”。形式为: #command >> filename 例如: #ls *.doc > > directory.out #cat directory.out chl.doc chZdoc ch3doc chimp config mail / test / chl.doc ch2.doc ch3.doc 和程序的标准输出重定向一样,程序的错误输出也可以重新定向。使用符号2>(或追加符号2> >)表示对错误输出设备重定向。例如下面的命令: #ls /usr/tmp 2> err.file 可在屏幕上看到程序的正常输出结果,但又将程序的任何错误信息送到文件err.file 中,以备将来检查用。 还可以使用另一个输出重定向操作符(& >)将标准输出和错误输出同时送到同一文件中。例如: #ls /usr/tmp &> output.file 利用重定向将命令组合在一起,可实现系统单个命令不能提供的新功能。例如使用下面的命令序列,即统计了/usr/bin 目录下的文件个数。 #ls /usr/bin > /tmp/dir #wc -w < /tmp/dir 459 1.5.3.管道 将一个程序或命令的输出作为另一个程序或命令的输入有两种方法,一种是通过一个临时文件将两个命令或程序结合在一起,例如上节例子中的/tmp/dir 文件将 ls 和 wc 命令联在一起;另一种是 Linux 所提供的管道功能,这种方法比前一种方法更方便。 管道可以把一系列命令连接起来,这意味着第一个命令的输出会作为第二个命令的输入通过管道传给第二个命令,第二个命令的输出又会作为第三个命令的输入,以此类推。显示在屏幕上的是管道行中最后一个命令的输出。 通过使用管道符“|”来建立一个管道行。用管道重写上面的例子: #ls /usr/bin | wc -w 1789 再如: #cat sample.txt | grep “High” | wc -l 管道将 cat 命令的输出送给 grep 命令。grep 命令在输入里查找单词 High,grep 命令的输出则是所有包含单词 High 的行,这个输出又被送给 wc 命令,wc 命令统计出输入中的行数。假设 sample.txt 文件的内容如下: Things to do today : Low:Go grocery shopping High:Return movie High:Clear level 3 in Alien vs Predator 那么该管道行的结果是 2。
1.6.进程与控制作业命令 1.6.1.用 ps 命令查看系统中的进程 可以用 ps 命令观察进程状态,它会把当前瞬间进程的状态显示出来。可以根据显示的信息确定哪个进程正在运行,某个进程是被挂起,还是遇到了某些困难,进程已运行了多久,进程正在使用的资源,进程的相对优先级,以及进程的标识号(PID)。这些信息对用户很有用,对于系统管理员来说更为重要。 ps 命令的一般用法是: #ps [OPTION] 如果不带任何选项,ps 命令列出每个与您的当前 Shell 有关的进程的 PID。结果如下: PID TTY TIME CMD 596 pts / 0 00 : 00 : 00 bash 627 pts / 0 00 : 00 : 00 vi 628 pts / 0 00 : 00 : 00 ps 其中,各字段的含义如下: PID :进程标识号 TTY :开始该进程的终端号 TIME :报告进程累计使用的 CPU 时间 CMD :正在执行的进程名 要获得一个完整的进程信息列表,常用带有下列选项的 ps 命令: #ps aux 或 #ps -ef 它除了列出以上字段以外,还列出 CPU 使用率(% CPU ) ,内存使用率(% MEM ) ,虚拟映像大小(SIZE)、驻留数据集大小(RSS )、终端号(TTY )、状态(STAT)等字段。其它选项及相关详细说明请参见该命令的 man 手册:man ps 1.6.2.top 命令 top 命令用于读入计算机系统的信息,这些信息包括当前的系统数据和进程的状态等。输入 top 命令后,屏幕输出如下:
图 1 top 命令 图中的每一列显示了系统的详细信息,图中开头几行的信息含义如下: Uptime: 显示当前时间、自上次启动系统开始过去的时间、激活用户的数目以及在过去 l、5 和 15 分钟之内的 CPU 平均占用情况。 Process: 显示了系统所有的进程,并把进程按挂起、运行、创建和停止分类。 CPU States: 统计被用户和系统占用的当前 CPU 的状态。 Mem: 统计当前内存的占用状态。 Swap: 统计了 swap 区域的占用情况。 在 top 命令中显示了进程的列表,其中包括的内容有:PID、用户、优先级、nice 参数、所需的内存信息(SIZE、RSS、SHARE)、状态(STAT)、CPU占用的百分比、占用的内存信息、已用的训算机时间和各目的程序调用(COMMAND )等。 其它选项及相关详细说明请参见该命令的 man 手册:man top 1.6.3.用 kill 命令终止进程 运行过程中,可能在某一时刻,系统中有的进程出现了问题,不能正常运行,但也不能正常退出。这时可以使用 kill 命令终止进程的执行,释放这些进程占用的系统资源,常用的 kill 命令的格式为: #kill [-s signal | -p ] [-a] [--] pid… #kill -l [signal] 命令的选项和参数的意义如下: pid 给出了需要结束的进程的PID,可以通过命令 ps 获得进程的PID 。在命令 kill 中可以一次列出许多的进程 PID。 -s signal 是一个可选参数,用来给出发给进程的信号。在默认情况下,命令 kill 给进程发 TERM 信号,该信号将通知进程退出。如果进程不接收该信号,可以通过参数 -9 强行结束进程。 -l 该参数要求 kill 命令列出它可以发给进程的所有信号。 其它选项及相关详细说明请参见该命令的 man 手册:man kill。
1.7.基本网络命令 CGSL 具有强大的网络功能,提供了丰富的网络应用程序,完全支持 TCP/IP 协议。在网络环境下,可以进行远程注册、远程命令调用、传送文件等操作。本节介绍了几个基本的网络操作命令。 1.7.1.基本的网络配置命令 1.7.1.1.ifconfig 可以使用 ifconfig 命令来配置并查看网络接口的配置情况。 例如: 1.配置 eth0 的 IP 地址,同时激活该设备。 #ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up 2.配置 eth0 别名设备 eth0:1 的 IP 地址,并添加路由。 #ifconfig eth0:1 192.168.1.3 #route add -host 192.168.1.3 dev eth0:1 3.激活设备。 #ifconfig eth0 up 4.禁用设备。 #ifconfig eth0 down 5.查看指定的网络接口的配置。 #ifconfig eth0 6.查看所有的网络接口配置。 #ifconfig -a 1.7.2.ping ping 命令用来确定网络上的主机是否可到达和到达速率。ping 命令的格式为: #ping [OPTION] host 例如: #ping ywnz.com #ping -c4 192.168.1.12 ping 命令将大小固定的数据包发送给对方,并要求对方返回。当终止 ping 命令时,会显示一些统计数据。通过数据判断是否返回以及返回时间,用户可以确定对方是否可到达,是否开机,以及网络延时时间。按<Ctrl + C>中断。 1.7.2.1.route 可以使用 route 命令来配置并查看内核路由表的配置情况。 例如: 1.添加到主机的路由。 #route add -host 192.168.1.2 dev eth0:0 #route add -host 10.20.30.148 gw 10.20.30.40 2.添加到网络的路由。 #route add -net 10.20.30.40 netmask 255.255.255.248 eth0 #route add -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 #route add -net 192.168.1.0/24 eth1 3.添加默认网关。 #route add default gw 192.168.1.1 4.查看内核路由表的配置。 #route 5.删除路由。 #route del -host 192.168.1.2 dev eth0:0 #route del -host 10.20.30.148 gw 10.20.30.40 #route del -net 10.20.30.40 netmask 255.255.255.248 eth0 #route del -net 10.20.30.48 netmask 255.255.255.248 gw 10.20.30.41 #route del -net 192.168.1.0/24 eth1 #route del default gw 192.168.1.1 1.7.2.2.traceroute 可以使用 traceroute 命令显示数据包到达目的主机所经过的路由。 例如: #traceroute ywnz.com 1.7.2.3.netstat 可以使用 netstat 命令来显示网络状态信息。 例如: 1.显示网络接口状态信息。 #netstat -i 2.显示所有监控中的服务器的 Socket 和正使用 Socket 的程序信息。 #netstat -lpe 3.显示内核路由表信息。 #netstat -r #netstat -nr 4.显示 TCP/UDP 传输协议的连接状态。 #netstat -t #netstat -u 1.7.2.4.hostname 可以使用 hostname 命令来更改主机名。例如: #hostname myhost 使用 hostname 命令设置的主机名是临时的,在系统重启将失效。 1.7.2.5.arp 可以使用 arp 命令来配置并查看arp缓存。例如: 1.查看 arp 缓存。 #arp 2.添加一个 IP 地址和 MAC 地址的对应记录。 #arp -s 192.168.33.15 00:60:08:27:CE:B2 3.删除一个 IP 地址和 MAC 地址的对应缓存记录。 #arp -d 192.168.33.15 1.7.3.telnet telnet 命令是一种远程登录工具,只要拥有合法的注册名和口令,就能像使用本地机器一样访问远程计算机了。telnet 也允许用户通过输入注册名和口令从远程网点登录到自己的计算机上,从而通过网络或电话线完成检查电子邮件、编辑文件和运行程序等操作。但是 telnet 只能在字符终端方式下工作,不支持图形用户界面。 telnet 的基本用法是: #telnet [OPTION] IP [host [port]] 命令键入后,telnet 即会启动一个远程会话,本命令可使用的选项参数主要有 -d:启动调试功能 -a:自动注册 -n tracefile:打开跟踪程序,把跟踪程序数据保存在 tracefile 中 -e escape_char:将会话的转义字符设置为 escape_char -l user:把用户名发送给远程系统,以便自动注册。本参数自动包括 -a 参数 port:指出与远程系统连接的端口号,如不指定,将连接到缺省端口 成功地连接到远程计算机上后,telnet 就显示登录信息,并提示用户输入注册名与口令,如注册成功,就可以开始工作了。 提示:缺省版本未开启 telnet 和 ftp 服务,需另行启动该服务。 1.7.4.ftp FTP(文件传输协议)是在 TCP/IP 网络计算机之间传输文件的简单而有效的办法。ftp 命令的功能是在本地机和远程机之间传送文件。它允许用户传输 ASCII 文件和二进制文件。在 ftp 会话过程中,用户可以通过使用 ftp 客户程序连接到另一台计算机上。用户可以在目录中上下移动、列出目录内容、把文件从远程机拷贝到本地机上、把文件从本地机传输到远程系统中。前提当然是您必须在本地和远程文件系统中具有进行这些操作的权限。 ftp 命令的基本格式如下: #ftp [OPTION] [host] 可以用 help 命令取得可供使用的命令清单,也可以在 help 命令后面指定具体的命令名称,获得这条命令的说明。 ls:列出远程机的当前目录 cd:在远程机上改变工作目录 lcd:在本地机上改变工作目录 ascii:设置文件传输方式为 ASCll 模式 binary:设置文件传输方式为二进制模式 close:终止当前的 ftp 会话 hash:每次传输完数据缓冲区中的数据后就显示一个 # 号 get(mget):从远程机传送指定文件到本地机 put(mput):从本地机传送指定文件到远程机 open:连接远程 ftp 站点 quit:断开与远程机的连接并退出 ftp ?:显示本地帮助信息 !:转到 Shell 中 1.7.5 finger 使用 finger 命令来查询系统用户的信息,该命令的基本格式为: #finger [-lmsp] [usr…] [usr@host…] 运行 finger 命令后会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录 Shell 等信息,查询远程机上的用户信息时,就需要的用户名后面加上“@主机名”的方式。
1.8.gcc 编译 gcc(GNU project C and C++ compiler)是 Linux 下最主要的编译工具,功能强大、结构灵活,可以用来编译 C/C++、FORTRAN、JAVA、OBJC、ADA 等语言的程序,可根据需要选择安装支持的语言。 用法:gcc [选项] 文件名... 常用选项: --version 显示编译器版本信息 -E 仅作预处理,不进行编译、汇编和链接 -S 编译到汇编语言,不进行汇编和链接 -c 编译、汇编到目标代码,不进行链接 -o <文件> 输出到<文件> -Wall 显示附加的警告信息 -Werror 将所有警告当成错误 -g 显示错误信息以便调试(调试标记) -O 使用编译优化编译程序。级别可为 1~3,级别越大优化效果越好,但编译时间越长 -fPIC 表示编译为位置独立的代码,达到真正代码段共享的目的 -shared 指定生成动态连接库,不用该标志外部程序无法连接 -L 链接依赖库 gcc 的编译过程分为四个过程,即预处理、编译、汇编和连接。例如,编译文件 test.c,那么整个过程如下: 1.预处理: # gcc -E test.c -o test.i 或 # gcc -E test.c 2.编译: # gcc -S test.i -o test.s 3.汇编: # gcc -c test.s -o test.o 4.链接: # gcc test.o -o test 5.将 test.o 文件生成静态库: # ar -rv libtest.a test.o 6.将 test.c 文件生成一个动态库: # gcc -fPIC -shared -o libtest.so test.c
相关主题 |