Presentation is loading. Please wait.

Presentation is loading. Please wait.

第三章 Linux常用命令.

Similar presentations


Presentation on theme: "第三章 Linux常用命令."— Presentation transcript:

1 第三章 Linux常用命令

2 第3章 Linux常用命令 与UNIX操作系统相同,Linux系统提供了大量的命令。利用命令可以有效地完成大量的工作,如文件操作、目录操作、进程管理、文件权限设定、软盘使用等。 所以,在Linux系统上工作,离不开使用系统提供的命令。我们将在这一章中学习Linux的一些常用命令的功能、格式和用法。 由于命令比较多,而只有常练习才能熟练使用,所以要求大家在上机时将每一个命令都充分练习。

3 3.1 Linux shell 3.1.1 什么是shell Shell在linux中的地位
实际上,替我们工作的是“硬件” ,而控制硬件的是“核心” ,而使用者正是利用“Shell” 控制一些 kernel 提供的 “工具 (Utility)” 来操控硬件替我们工作。

4 3.1 Linux shell 3.1.2 bash简介 各种Linux环境都安装了多种shell,它们各有优势,最常用的是sh、csh、bash、ksh等,其中bash是Red Hat Linux的默认shell,红旗Linux的默认shell也是bash。 bash shell是向下兼容的,并且容纳了许多其他shell好的特征,是一种功能全面的shell。另外,bash可以使用方向键查阅以往的命令;在忘了命令名时还可向系统求助使用命令补齐功能等,此外bash在shell编程时也很优秀。 当使用shell时,是在一个包含环境变量的环境中运行的,这些环境变量是在起始注册目录和/etc目录的各种资源文件中定义的。

5 3.1 Linux shell 3.1.2 命令行解释程序 当用户进入Linux环境时,系统自动启动相应的shell。shell是一种命令行解释程序,负责用户和操作系统的沟通。在提示符下输入的每个命令都先由shell解释,再传给Linux内核执行。通过shell,可以启动、挂起、停止甚至编写程序。 不同的shell下的提示符存在差异,如csh用‘%’,bash用‘$’,但对于root用户通常都是‘#’。 若想了解用的是哪种shell,可通过键入ps命令查询得到。 在shell下进入系统默认的桌面系统可以键入命令startx。

6 默认情况下,FC在安装时设置为启动后进入图形化的用户登录界面,“应用程序”-“附件”-“终端”
3.1 Linux shell 3.1.3 启动进入shell 默认情况下,FC在安装时设置为启动后进入图形化的用户登录界面,“应用程序”-“附件”-“终端” 设置直接进入字符终端界面,则要对文件/etc/inittab中“id: 5:initdefault:”一行进行修改,5代表图形界面,3代表字符终端界面,保存文件后,重启系统即可 在命令方式下进入图形方式:startx 在命令方式退出系统:logout shutdown等命令

7 3.2 系统安全性 作为一个多用户、多任务的操作系统,考虑到信息本身的性质以及用户对系统的需求和使用方式也不同,所以Linux系统有一个登录过程,即对想要访问系统的用户进行识别和验证。这个过程也称为注册。相对的,用户在离开机器之前,需要退出系统。localhost login : password: 系统将会显示默认提示符’$’(root用户是’#’)。 作为一种安全机制,每个用户都应该有自己的口令。恰当的选择或修改口令是至关重要的一项工作。

8 3.2 系统安全性 3.2.1 用户认证 当系统管理员建立帐户时,注册名将和用户标识号(UID)和用户组标志号(GID)关联在一起,分别对应用户名和组名。 用户名与用户ID号是唯一对应的。 组名是将用户根据不同需求分为小组的组标识。组中成员可共享信息。一个用户可以属于不同组。 超级用户:即root用户,UID为0,超级用户拥有最高权限。 用id命令可查看到当前用户的用户信息(包括用户名、UID、组名、GID、以及所属其他组名称)。

9 3.2 系统安全性 3.2.2 修改口令 Linux的安全特性可以允许用户控制自己的口令。 口令的要求:
口令至少包含8个字符,包括数字、字母以及符号。 口令不能用姓名、别名、短语以及词汇从前向或从后向前的形式等。 不同机器应采用不同口令,也不要用机器名作为口令。 不要重复使用老口令以及非保密的口令。 口令不要以任何形式告诉他人也不要与他人共用口令。 要选择自己能记住的口令,如忘记就无法恢复。

10 3.2 系统安全性 3.2.2 修改口令 利用passwd命令更改口令 需要以下三个步骤: 输入passwd 用户名
输入老口令,系统验证无误后提示输入新口令。 输入新口令,如合法提示再输入一遍,如两遍一致则口令更改成功,否则系统会提示重复以上步骤。 -d 关闭使用者的密码认证功能,用户在登录时将不再需要输入密码

11 3.2 系统安全性 3.2.3 良好的保密习惯 一般来说,在你离开计算机工作台之前应退出系统,即使只离开一会儿。操作系统会测量出你的机器的空转时间,如果超出限制,系统会自动将用户退出。 锁住终端对话,通过lock命令来操作,具体形式为输入lock,输入两次自定义口令(可以使用任何字符串),可以将终端锁定30分钟或设定时间,如要使用必须输入口令。在图形界面下,可以由Accessories文件夹中激活lock图标也可达到锁定显示器的效果。 退出系统,通过exit命令可以退出。在图形界面下在file菜单中选择exit,也可达到同样效果。

12 补充 掌握Linux的目录结构 Linux的目录结构与Windows不同,而且在Windows下看不到Linux的目录,反过来,Linux也看不到Windows下的目录。Linux下各目录的含义如下: 目录名称 意 义 /vmlinuz 该目录中存放的是系统内核 /bin 该目录中存放Linux的常用命令,在有的版本中是一些和根目录下相同的目录。 /boot 该目录下存放的都是系统启动时要用到的程序,当用lilo引导Linux时,会用到这里的一些信息 /dev 该目录包含了Linux系统中使用的所有外部设备,它实际上是访问这些外部设备的端口,你可以访问这些外部设备,与访问一个文件或一个目录没有区别。例如在系统中键入“cd /dev/cdrom”,就可以看到光驱中的文件;键入“cd /dev/mouse”即可看鼠标的相关文件。

13 /cdrom 该目录在刚安装系统时是空的,你可以将光驱文件系统挂在这个目录下, 例如“mount /dev/cdrom /cdrom” /etc 该目录存放了系统管理时要用到的各种配置文件和子目录,例如网络配置文件、文件系统、X系统配置文件、设备配置信息、设置用户信息等。 /sbin 该目录用来存放系统管理员的系统管理程序。 /home 如果建立一个名为“xx”的用户,那么在/home目录下就有一个对应的“/home/xx”路径,用来存放该用户的主目录。 /lib 该目录用来存放系统动态连接共享库,几乎所有的应用程序都会用到该目录下的共享库 /lost+found 该目录在大多数情况下都是空的。但当突然停电、或者非正常关机后,有些文件就临时存放在这里。 /mnt 该目录在一般情况下也是空的,你可以临时将别的文件系统挂在该目录下。 /proc 可以在该目录下获取系统信息,这些信息是在内存中由系统自己产生的 /root 如果你是以超级用户的身份登录的,这个就是超级用户的主目录 /tmp 用来存放不同程序执行时产生的临时文件 /usr 用户的很多应用程序和文件都存放在该目录下

14 3.3 使用命令 使用系统命令是和Linux操作系统交流的最直接的方式。bash提供了几百个系统命令,虽然这些命令的功能不同,但它们的使用方式、命令格式和规则都是统一的。 Linux命令大全

15 3.3 使用命令-命令帮助 Man 如果在Linux命令行模式下遇到不会用的命令,你可以打#man [command]得到该命令的帮助
Help 如果想知道一个命令有哪些参数、开关,可以打#command --help来得到。 Info info程序是GNU的超文本帮助系统,格式 #info [-f][-o][-h][命令名称] 注意 linux中的参数输入形式和dos不一样,在命令后面应该打一个空格,然后打"-",最后再跟一个或多个参数;另外linux下大小写是有区别的!

16 3.3 使用命令-命令格式 bash命令都具有相同的命令格式: 说明: 命令名 [选项] [参数1] [参数2]…
(1)命令名由小写的英文字母组成,往往是表示相应功能的英文单词的缩写,如date、who、cp等命令; (2)格式中方括号中的部分表示该项是可选的; (3)选项是对命令的特别定义,以“-”开始,多个选项时可用一个“-”连起来,如ls -l -a和ls -la相同。 (4)命令行的参数提供命令运行的信息或者是命令执行过程中所使用的文件名。

17 3.3 使用命令-命令格式 (5)如果命令行中没有提供参数,命令将从标准输入文件(即键盘)接收数据,输出结果显示在标准输出文件(即显示器)上。错误信息显示在标准错误输出文件(显示器)上。可通过重定向功能对文件进行重定向。 (6)命令在正常执行后会返回一个0值,表示执行成功;如果命令执行过程中出错,没有完成全部工作,则返回一个非0值(在shell中可通过$?查看)。 (7)Linux操作系统的联机帮助对每个命令的准确语法都作了说明,可用$man [命令名] 查看。

18 3.3 使用命令-键入命令 $echo This Line is too long to fit \ >on one line
在shell提示符下,可以输入相应的命令。输入后,必须按下回车键确认。shell会读取该命令并执行,执行完成后屏幕会显示新的提示符。 shell命令可以识别大小写,只有小写的是Linux命令。 如果系统找不到你输入的命令,会显示反馈信息,“Command not Found”。 如果一个命令太长超过一行,要在第一行末尾键入“\”字符并回车,这时下一行将用“>”作为提示符,可以接着写命令。如例: 在命令与选项和参数之间要用空格或制表符隔开,连续的空格会shell被解释为单个空格。

19 3.3 使用命令-修改命令行的错误 输入命令时,可以使用多个空格符,但是拼写和语法必须是准确的。如果在命令行中出现拼写错误,在回车之前可以有下述两种修改方式: 用Backspace键从后向前删除有错误的字符,再键入正确的命令字符串。 用Ctrl+U键可以删除光标所在的命令行。命令多于一行时也只删除当前行。 shell提供了许多控制符及特殊字符,用来简化命令行的输入。 如果在命令行中使用一对单引号,shell将不解释被单引号引起的内容。 分号可以将两个命令隔开,这样可以实现在一行中输入多个命令。命令将会按序执行。 例如:$who;date;id

20 3.3 使用命令-转义字符与通配字符 转义字符指的是在shell中有特殊含义的字符 < > | ; ! ? * [ ] $ \ “ ‘ ` ~ ( ) { } ^ 通配字符是转义字符的子集,用来查找匹配文件名 ? * [] [ - ] [ ! ] 例如:使用?可以匹配一个字符,使用*可以匹配多个字符

21 3.4 通信命令 Linux系统中的命令有几百个,涉及到文件操作、进程管理、设备管理和使用、系统维护、网络配置等方方面面。下面介绍一些简单的shell命令。 注意掌握各命令的功能,常用选项及特点。

22 3.4 通信命令 Linux提供许多方式让用户相互通信,它允许以文本的方式发送及接收信息。 1. Write命令
功能:使用write实用程序向已登录注册的另一个用户发送一条报文,当对方也使用write命令时,双方之间就建立了通信。 格式:write [用户名] [终端名] 注意:ctrl+c退出write命令 2. Talk命令 功能:把用户终端上的信息一行一行的发送给另一个用户 3. Mesg命令 功能:设定允许或拒绝接收由其他用户发来的write和talk通信信息。 4. Wall广播式消息发送 1)#wall 注意ctrl+D结束 2)#wall < 文件名 3)#wall “信息内容”

23 3.5 简单命令 一般格式 echo [-n] STRING 说明
命令的功能是在屏幕上显示命令行中所给出的字符串STRING。该命令往往用于shell脚本中,作为一种输出提示信息的手段。 选项 -n 表示输出字符串之后光标不换行。 注意事项 可以用引号将参数括起来,也可以不加引号。如果用引号将参数括起来,则字符串按原样输出。如果不用引号括起来,则字符串中各个单词作为字符串输出,各单词间以一个空格隔开。

24 3.5 简单命令 3.5.1 echo命令 示例 (1)$echo ‘This is a command.’
(3)$echo -n ‘Enter data->’ Enter data->$

25 date命令用于在屏幕上显示或设置系统的日期和时间。 一般格式 date [选项] [+格式控制字符]
3.5 简单命令 3.5.2 date命令 date命令用于在屏幕上显示或设置系统的日期和时间。 一般格式 date [选项] [+格式控制字符] date [选项] [MMDDhhmm[[CC]YY][.ss]] 说明 如果没有选项和参数,将直接显示系统当前的日期和时间。如果指定显示日期的格式,将按照指定的格式显示当前的日期和时间。

26 3.4 简单命令 3.5.2 date命令 选项 -d,--date=STRING 显示由字符串STRING指定的时间。不是“now”。
-s,--set=STRING 设定由字符串STRING指定的时间。 -u,--universal 显示或设定格林威治时间(默认为本地时间)。 --help 在标准输出(即显示器)上输出帮助信息并且退出。 --version 在标准输出上输出版本信息并且退出。

27 格式控制字符串是控制日期和时间输出格式的字符串,这部分通常用单引号括起来。例如:
3.5 简单命令 3.5.2 date命令 格式控制字符串 格式控制字符串是控制日期和时间输出格式的字符串,这部分通常用单引号括起来。例如: date’+Today is %D,and now is %r’ 其中%D和%r是格式控制字符串,其余是普通字符串。 每个格式控制字符串由%和一个字母组成,它们可以采用以下形式的字符串来表示日期和时间的格式。

28 3.5 简单命令 3.5.2 date命令 时间表示形式: %H 用00,01,02,…,23的形式表示小时;
%I 用00,01,02,…,12的形式表示小时; %k 用0,1,2,…,23的形式表示小时; %l 用1,2,3,…,12的形式表示小时; %M 用00,01,02,…,59的形式表示分钟; %p 显示出本地时间的AM(上午)或PM(下午); %r 用hh:mm:ss AM/PM(即小时:分钟:秒 上/下午)的形式表示时间; %s 从1970年1月1日0时0分0秒到此刻所经历的秒数; %S 用00,01,02,…,60的形式表示秒; %T 用hh:mm:ss的形式表示时间(24小时制); %Z 时区

29 3.5 简单命令 3.5.2 date命令 日期表现形式: %a Sun,Mon,…,Sat的缩写形式表示星期几;
%A 用Sunday,Monday,…Saturday的全称形式表示星 期几; %b 用Jan,Feb,…,Dec的缩写形式表示月份; %B 用January,February,…,December的全称形式表示月份; %c 用如:Sat Jul 28 12:30:00 CST 2001所示的形式表示本地日期和时间; %d 用01,02,…,31的形式表示每月的第几日; %D 用mm/dd/yy(即月/日/年)的形式表示日期; %h 等效于%b;

30 3.5 简单命令 3.5.2 date命令 %j 用001,002,…,366的形式表示一年的第几天;
%m 用01,02,…,12的形式表示月份; %w 用0,1,…,6的形式表示是一个星期的第几天(0表示星期天); %W 显示指定日期是在一年中的第几个星期(00..53),星期一表示一周的第一天; %x 等效于%D; %y 用00,01,…,99的形式表示年份的后两位数字; %Y 用四位数字表示年份(如2001)。

31 3.5 简单命令 [MMDDhhmm[[CC]YY][.ss]]的含义 MM 月份 DD 日期 hh 小时 mm 分钟
3.5.2 date命令 [MMDDhhmm[[CC]YY][.ss]]的含义 MM 月份 DD 日期 hh 小时 mm 分钟 CC 年份的前两位(可选项) YY 年份的后两位(可选项) ss 秒数(可选项) 注意:只有超级用户才有权设置或修改系统时间(启动系统时从CMOS中读出)。另外,Linux对命令、参数和选项是区分大小写的。

32 3.5 简单命令 示例 (1)显示现在的日期和时间: $date ‘+Today is %D,and now is %r ’
Today is 02/20/04,and now is 下午 03:56:39 (2)显示前天的时间: $date -u -date ‘2 days ago’ :00:02 CST 2004 (3)设置系统时间为下午4点30分 #date -s 16:30:00 Jan 20 16:30:00 CST 2004 (4)设置系统时间为2004年2月1日: #date -s

33 格式:cal [-jy] [month [year] ]
3.5 简单命令 3.5.3 cal命令 cal命令用来显示日历。 格式:cal [-jy] [month [year] ] cal命令可以显示公元1~9999年中的任意一年或者任意一个月的日历。如果不带参数则显示当前月份的日历。 选项: -j 显示儒略日期,即将一个月中的日号按照一年中是第多少天来显示。 -y 显示本年度的日历。

34 如果在cal命令后面只有一个参数,则该参数被解释为年份,如有两个参数,前一个表示月份,第二个表示年份,两参数间需留有空格。
3.5 简单命令 3.5.3 cal命令 注意事项: 如果在cal命令后面只有一个参数,则该参数被解释为年份,如有两个参数,前一个表示月份,第二个表示年份,两参数间需留有空格。 表示年份的参数必须使用年份的完全形式,不能简写,如简写会有歧义。月份可以用英文缩写形式,如cal Feb 2004 示例: $cal $cal $cal –j

35 3.5 简单命令 3.5.4 bc命令 Bc是一个用于进行简单的算术运算的计算器,在命令行方式下,直接键入运算表达式即可得到计算机结果
Bc进入,quit退出 用于更改用户的密码,只有root用户有权限使用此命令 3.5.5 passwd命令

36 3.5 简单命令 3.5.6 who命令 显示当前已注册到系统的所有用户名、所有终端名和注册到系统的时间。 一般格式
whoami 说明: who命令将列出所有正在使用系统的用户,而whoami命令列出使用该命令的当前用户的相关信息。

37 3.5 简单命令 3.5.6 who命令 选项: -H 打印各列的标题 -m 仅显示与stdin(标准输入)相关的主机名和用户名。
-q 显示所有注册用户名和注册用户数目。 示例 (1)列出所有正在使用系统的用户: $who root tty Jun :52 fan tty Jun :11 (2)列出当前用户的相关信息 $who am i fan tty Jun :11

38 清除屏幕上的信息,它类似于DOS中的CLS命令。清屏后,提示符移到屏幕的左上角。 一般格式为: $clear
3.5 简单命令 3.5.7 clear命令 清除屏幕上的信息,它类似于DOS中的CLS命令。清屏后,提示符移到屏幕的左上角。 一般格式为: $clear

39 3.5 文件概念和文件类型 当你使用Linux命令对文件进行操作时,就可以访问存储在一个结构化环境中的信息。所有这些信息都存放在一个分层的结构中,你可以方便且有条不紊的管理你的数据。重要的是,你不仅应学会如何访问这些数据,而且学会如何控制对信息的访问。对文件和目录进行管理和维护可能是每个用户最经常的工作。

40 磁盘上的文件系统是层次结构的,由若干目录和子目录组成,最上层的目录称为根(root)目录,用“/”表示。
3.5 文件概念和文件类型 3.5.1 文件系统概念 磁盘上的文件系统是层次结构的,由若干目录和子目录组成,最上层的目录称为根(root)目录,用“/”表示。 文件与目录的定义 (1)文件系统:它是磁盘上有特定格式的一片区 域,操作系统通过文件系统可以方便的查询和访问其中所包含的磁盘块。 (2)文件:文件系统中存储数据的一个命名的对象。一个文件可以是空文件,但是它仍为操作系统提供了其他信息。

41 3.5 文件概念和文件类型 3.5.1 文件系统概念 (3)目录:其中包含许多文件项目的一类特殊文件。目录支持文件系统的层次结构。文件系统中的每个文件都被登记在一个(或多个)目录中。 (4)子目录:被包含在一个目录中的目录。包含目录的目录称为父目录。除了root目录外,所有的目录都是子目录,并且有它们的父目录。root目录是自己的父目录。 (5)文件名:用来标识文件的字符串,它保存在一个目录文件项中。

42 3.5 文件概念和文件类型 3.5.1 文件系统概念 (6)路径名:由斜线字符(/)结合在一起的一个或多个文件名的集合。路径名指定一个文件在分层树型结构(即文件系统)中的位置。 (7)用ls命令可以列出当前工作目录中所包含的文件和子目录的名字。 (8)文件名按照ASCII码顺序列出:以数字开头文件名列前,然后是以大写字母开头的文件名,最后是以小写字母开头的文件名。 注意:查看文件系统要使用一个参看点目录,它就称为当前工作目录。

43 文件是Linux操作系统处理信息的基本单位。所有软件都组织文件。
3.5 文件概念和文件类型 3.5.1 文件系统概念 文件结构 文件是Linux操作系统处理信息的基本单位。所有软件都组织文件。 (1)文件的成分:无论文件是一个程序、一个文档、一个数据库,也可以是一个目录,操作系统都会赋予它同样的结构(包括索引节点和数据)。

44 3.5 文件概念和文件类型 3.5.1 文件系统概念 (2)命名文件:文件名保存在目录文件中。Linux的文件名几乎可以由ASCII的任意组合构成,文件名最长为255个字符。另外有些使用惯例: 文件名应尽量简单,并且反映出文件的内容。14 除斜线和空字符外,文件名可以包含任意的ASCII字符。 习惯上允许使用下划线和句点符来区别文件的类型,使文件名更易读;应避免使用一些字符,见教材P32。 同类文件应使用相同的后缀或扩展名。 Linux系统区分文件名的大小写。 以“.”开头的文件名是隐含文件。

45 (3)文件名扩展字符:为了能一次处理多个文件,shell提供了几个特别字符,称为文件名扩展字符(通配符)。通过使用文件名扩展字符可以:
3.5 文件概念和文件类型 3.5.1 文件系统概念 (3)文件名扩展字符:为了能一次处理多个文件,shell提供了几个特别字符,称为文件名扩展字符(通配符)。通过使用文件名扩展字符可以: 让shell查询与特别格式相符的文件名。 用作命令参数的文件或目录的缩写。 以简短的标记访问长文件名。 可以用于任意的命令行。

46 文件名扩展字符 星号(*) 与0个或多个任意的字符相匹配。例如a*可以代表abc,a324jtr或a。
星号匹配的是当前目录下的所有文件,但以点开头的隐含文件除外。 .*只与隐含文件匹配。 问号(?) 问号只与任意一个的字符匹配。你可以使用多个问号来匹配相同数量的字符。如file?与文件file1,file2,filed匹配,但不与file,file12匹配。而name.???与文件name.exe,name.aaa匹配,但不与name.dd匹配。

47 文件名扩展字符 方括号([ ]): 方括号与问号相似,只与一个字符相配。它们的区
别在于问号与任意一个字符相配,而方括号只与括号中列出的字符之一匹配。例如letter[123]只与letter1,letter2,letter3匹配,其余的不匹配。 可用短横线代表一个范围内的字符,而不用一一列出。如letter[1-3]是letter[123]的简写形式。但注意范围内的字符都必须按升序排列。方括号中可以列出多个范围,如[A-Za-z]可以与任意大小写的字符匹配。 方括号中如果以!开始,表示不与!后的字符匹配。 所有通配符可以混合使用,如[!A-Z]*.?

48 Linux操作系统支持以下文件类型:普通文件、目录文件、设备文件以及符号链接文件。
3.5 文件概念和文件类型 3.5.2 文件类型 Linux操作系统支持以下文件类型:普通文件、目录文件、设备文件以及符号链接文件。

49 3.5 文件概念和文件类型 3.5.2 文件类型 1.普通文件: 普通文件也称常规文件,包含各种长度的字符串。核心对这些数据没有进行结构化,只是作为有序的字符序列把它提交给应用程序。应用程序自己组织和解释这些数据,通常把它们归并为下述类型之一: 文本文件:它是由ASCII字符构成。例如,信件、报告和称为脚本的命令文本文件。 数据文件:它由来自应用程序的数字型和文本型数据构成。例如电子表格、数据库以及字处理文档。 可执行的二进制程序:它由机器指令和数据构成。例如系统命令。 可以使用file命令来确定指定文件的类型。

50 每个目录的第一项都表示目录本身,并以‘.’作为它的文件名。每个目录的第二项的名字是‘..’,表示该目录的父目录。
3.5 文件概念和文件类型 3.5.2 文件类型 2.目录文件: 目录文件是一种特殊文件,利用它可以构成文件系统的分层树型结构,与普通文件一样,目录文件也包含数据,但差别在于核心对这些数据加以结构化,即它是对成对的“I节点号/文件名”构成的列表。 每个目录的第一项都表示目录本身,并以‘.’作为它的文件名。每个目录的第二项的名字是‘..’,表示该目录的父目录。 通过使用ls命令可以察看当前目录下的文件以及目录情况。具体参数见教材P34。

51 3.5 文件概念和文件类型 3.5.2 文件类型 3.设备文件: 设备文件是一种特殊文件,除了存放在文件I节点中的信息外,它们不包含任何数据。系统利用它们来标识各个设备驱动器,核心使用它们与硬件设备通信。有两类特别设备文件,分别对应不同的设备驱动器: 字符设备:最常用的设备类型,允许I/O传送任意大小的数据,取决于设备本身的容量。使用这种接口的设备包括终端、打印机以及鼠标。 块设备:这类设备利用核心缓冲区的自动缓存机制,缓冲区进行I/O传送总是以1KB为单位。使用这种接口的设备包括硬盘、软盘和RAM盘。 通过tty命令可以查看当前使用终端的文件名。

52 3.5 文件概念和文件类型 3.5.2 文件类型 4.符号链接文件 符号链接文件是一种特殊文件,它们提供对其他文件的参照。它们存放的数据是文件系统中通向文件的路径。当时用符号链接文件时,核心自动的访问所保存的这个路径。

53 用户经常观看文件的内容,拷贝文件、删除文件、移动文件、比较文件,查找文件等,下面介绍Linux系统提供的常用文件操作命令。
3.6 文件操作命令 用户经常观看文件的内容,拷贝文件、删除文件、移动文件、比较文件,查找文件等,下面介绍Linux系统提供的常用文件操作命令。 有关文件操作命令在常用命令中占很大比重。

54 cat命令连接文件并打印(显示)到标准输出设备上。cat经常用来显示文件的内容,类似于DOS下的TYPE命令。
3.6 文件操作命令 3.6.1 有关文件显示命令 cat命令 cat命令连接文件并打印(显示)到标准输出设备上。cat经常用来显示文件的内容,类似于DOS下的TYPE命令。 一般格式:cat [选项] 文件 说明:该命令有两项功能,其一是用来显示文件的内容。它依次读取由参数“文件”所指明的文件,将它们的内容输出到标准输出上。其二是连接两个或多个文件,如命令cat f1 f2>f3将把文件f1和f2的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件f3中。

55 -b,--number-noblank 从一开始对所有非空输出行进行编号; -e 等于-vE;
3.6 文件操作命令 3.6.1 有关文件显示命令 选项: -b,--number-noblank 从一开始对所有非空输出行进行编号; -e 等于-vE; -n,--number 从一开始对所有输出行进行编号; -s,--squeeze-blank 将多个相邻的空行合并成一个空行; -t 等于-vT;

56 3.6 文件操作命令 3.6.1 有关文件显示命令 -v,--show-nonprinting 把非显示字符显示出来。控制字符被显示成^X(Ctrl+X)形式,这里X是随Ctrl键一起按下的键,例如Ctrl+M被显示成为^M。Del字符被显示为^?;非ASCII字符被显示为M-x,这里x是低7位所确定的字符。 加了-v之后,-T和-E选项才起作用。其中,-T将TAB显示为“-I”,-E在每行的末尾加一个$符。 -A,--show-all 等于-vET。 --help 打印该命令用法,并退出,其返回码表示成功。 --version 在标准输出上显示版本信息,然后退出。

57 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。
3.6 文件操作命令 3.6.1 有关文件显示命令 注意:当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。 为了控制滚屏,可以按Ctrl+S组合键,停止滚屏;按Ctrl+Q键可以恢复滚屏。 按Ctrl+C(中断)键可以中止该命令的执行,并且返回到shell提示符状态。

58 3.6 文件操作命令 示例 在屏幕上显示文件m1.c的内容: $cat m1.c
3.6.1 有关文件显示命令 示例 在屏幕上显示文件m1.c的内容: $cat m1.c 在屏幕上显示出m1.c的内容,并且将其中的非显示字符也一同显示出来: $cat –A m1.c 同时显示文件m1.c和m2.c的内容: $cat m1.c m2.c 将文件m1.c和m2.c合并后放入文件ma.c中: $cat m1.c m2.c >ma.c

59 3.6 文件操作命令 more命令 more命令显示文件内容,每次显示一屏。 一般格式:more [选项] 文件
3.6.1 有关文件显示命令 more命令 more命令显示文件内容,每次显示一屏。 一般格式:more [选项] 文件 说明:该命令一次显示一屏文本,满屏后显示停下来,并且在每个屏幕的底部出现一个提示信息,给出至今已显示的该文件的百分比:-More-(xx%)。 可以用下列不同的方法作下一步选择: 按space键,显示文本的下一屏内容。 按Enter键,只显示文本的下一行内容。

60 按下斜线符(/),接着输入一个模式,可以在文本
3.6 文件操作命令 3.6.1 有关文件显示命令 按下斜线符(/),接着输入一个模式,可以在文本 中寻找下一个相匹配的模式。 按H键,先是帮助屏,该屏上有相关的帮助信息。 按B键,显示上一屏内容。 按Q键,推出more命令。 选项: -num 这个选项指定一个整数,表示一个屏幕显示多少 行。 -d 在每屏的底部显示以下更友好的提示信息: --More-- (XX%)[Press space to continue,’q’ to quit.] 而且若用户按键时有错误,则显示[Press ‘h’ for instructions.]信息,而不是简单地报警。

61 3.6 文件操作命令 -l more命令通常把^L(换页符)当作一个特殊字符,在显示出包含该字符的行之后暂停。
3.6.1 有关文件显示命令 -l more命令通常把^L(换页符)当作一个特殊字符,在显示出包含该字符的行之后暂停。 -f 按逻辑行进行计算,而不是按屏幕上显示的行计算,即一个逻辑长行可能在两行或多行上出现,但是只 按一行计算。 -p 不滚屏,在显示下一屏之前先清屏。 -c 作用基本上与-p相同。 -s 文件中连续的空白行压缩成一个空白行显示。 -u 取消下线符。 +/ 改选项后随的模式(pattern)指定显示每个文件之前进行搜索的字符串。 +num 从行号num开始。 more命令在执行过程中还用到一些基本vi编辑器的交 互式命令。

62 显示文件more_1的内容,但在显示之前先清屏,并且在屏幕的最下方显示完整的百分比。
3.6 文件操作命令 3.6.1 有关文件显示命令 示例 显示文件more_1的内容,但在显示之前先清屏,并且在屏幕的最下方显示完整的百分比。 $more -dc more_1 显示文件more_1的内容,每10行显示1次,而且在显示之前先清屏。 $more -c -10 more_1

63 用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less命令,应按Q键。
3.6 文件操作命令 3.6.1 有关文件显示命令 less命令 与more命令一样,less命令也用来分屏显示文件的内容。但是二者存在差别:less命令允许用户向前或向后浏览文件,而more命令只能向前看。 用less命令显示文件时,用PageUp键向上翻页,用PageDown键向下翻页。要退出less命令,应按Q键。

64 3.6 文件操作命令 3.6.1 有关文件显示命令 head命令 一般格式:head [选项] file
选项: -c,--bytes=SIZE 显示前面SIZE个字节。 -n,--Lines=NUMBER NUMBER的值指明显示文件前面多少行。 -q,-quiet,--silent 不显示给定文件的标题。 -v,--verbose 始终显示给定文件的标题。

65 显示文件m1.c的内容,并且给出文件名标题: $head –v m1.c 显示文件m1.c的内容,但不列出文件名标题:
3.6 文件操作命令 3.6.1 有关文件显示命令 示例: 显示文件more_1的前5行: $head -5 more_1 显示文件m1.c的内容,并且给出文件名标题: $head –v m1.c 显示文件m1.c的内容,但不列出文件名标题: $head –q m1.c

66 tail命令在屏幕上显示文件的末尾若干行。 一般格式:tail [选项] [file] …
3.6 文件操作命令 3.6.1 有关文件显示命令 tail命令 tail命令在屏幕上显示文件的末尾若干行。 一般格式:tail [选项] [file] … 说明:tail命令在屏幕上显示指定文件的末尾10行。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名是“-”,则读取标准输入。

67 -c,--bytes=N 输出最后N个字节。 -f 当文件增长时输出附加的数据。 -n, - -lines=N 输出最后的N行,默认10行。
3.6 文件操作命令 3.6.1 有关文件显示命令 选项: -c,--bytes=N 输出最后N个字节。 -f 当文件增长时输出附加的数据。 -n, - -lines=N 输出最后的N行,默认10行。 -q,-quite,--silent 不输出包含给定文件名的标题。 -v,--verbose 始终输出包含给定文件名的标题。

68 3.6 文件操作命令 3.6.1 有关文件显示命令 注意: 如果表示字节或行数的N值之前有一个“+”号,则从文件开头的第N项开始显示,而不是显示文件的最后N项。N值后面可以有后缀:b表示512,k表示1024,m表示 。

69 显示文件more_1的内容,从第120行至文件末尾。 $tail +120 more_1 显示文件m1.c的最后10个字符。
3.6 文件操作命令 3.6.1 有关文件显示命令 示例: 显示文件more_1的最后10行。 $tail more_1 显示文件more_1的内容,从第120行至文件末尾。 $tail +120 more_1 显示文件m1.c的最后10个字符。 $tail –c 10 m1.c

70 说明:通过该命令指定不同的选项,它可以以十进制、八进制、十六进制和ASCII码显示文件。
3.6 文件操作命令 3.6.1 有关文件显示命令 od命令 数据文件是普通文件,但它们包含非打印字符,即这些字符在终端或者控制台的屏幕上无法显示。一般情况下,通过程序可以看到数据文件,程序知道如何处理文件中的二进制数据。你也可以使用od命令在终端屏幕上显示数据文件。 一般格式:od [选项] 文件… 说明:通过该命令指定不同的选项,它可以以十进制、八进制、十六进制和ASCII码显示文件。

71 3.6 文件操作命令 选项: -A 指定表示文件位移值的基数,包括: d 十进制 o 八进制(系统默认) x 十六进制 n 不打印位移值
3.6.1 有关文件显示命令 选项: -A 指定表示文件位移值的基数,包括: d 十进制 o 八进制(系统默认) x 十六进制 n 不打印位移值

72 -t 设置显示数据时使用的格式,主要有以下参数: c ASCII字符或转义序列 d 有符号的十进制数 f 浮点数 o 八进制数
3.6 文件操作命令 3.6.1 有关文件显示命令 -t 设置显示数据时使用的格式,主要有以下参数: c ASCII字符或转义序列 d 有符号的十进制数 f 浮点数 o 八进制数 u 无符号的十进制数 x 十六进制数

73 od命令的默认显示方式是八进制,但更有价值的信息输出是用ASCII码和十六进制组合的方式。
3.6 文件操作命令 3.6.1 有关文件显示命令 注意: 除了选项c之外,其他选项后面都可以带一个十进制数n,用来指定每个显示值所包含的字节数。例如,要显示16位的无符号整数,可以用“u2”,32位的有符号整数可用“u4”。 od命令的默认显示方式是八进制,但更有价值的信息输出是用ASCII码和十六进制组合的方式。

74 将文本文件/etc/mtab用十六进制形式显示: $od -Ax /etc/mtab 以ASCII代码形式显示文件/etc/mtab的内容:
3.6 文件操作命令 3.6.1 有关文件显示命令 示例: 将文本文件/etc/mtab用十六进制形式显示: $od -Ax /etc/mtab 以ASCII代码形式显示文件/etc/mtab的内容: $od -tc /etc/mtab

75 3.6 文件操作命令 3.6.1 有关文件显示命令 touch命令 可以利用命令和实用程序来创建文件,如文本编辑器,它们专门用于把有用的数据放入文件中。然而,有时你可能只需要仅有文件名的文件,即空文件。Linux系统提供的touch命令可以修改指定文件的时间标签或者创建一个空文件。 一般格式: touch [选项] 文件名…

76 3.6 文件操作命令 3.6.1 有关文件显示命令 说明: touch命令将会修改指定文件的时间标签,把已存在文件的时间标签更新为系统当前的时间(默认方式);它们的数据将原封不动地保留下来。如果该文件尚未存在,则建立一个空的新文件。

77 选项: 3.6 文件操作命令 -a 仅改变指定文件的存取时间。 -c 不创建新文件。 -m 仅改变指定文件的修改时间。
3.6.1 有关文件显示命令 选项: -a 仅改变指定文件的存取时间。 -c 不创建新文件。 -m 仅改变指定文件的修改时间。 -t STAMP 使用STAMP指定的时间标签,而不是系统当前的时间。STAMP的格式是[[CC]YY]MMDDhhmm[.ss],其中,CC表示年份的前两位,YY表示年份的后两位,MM表示月份,DD表示日期,hh表示小时,mm表示分钟,ss表示秒。

78 注意:建立文件时必须保证当前目录下不存在与要建立文件同名的文件,如果有将不会创建新文件而是修改该文件的时间标签更新为系统当前的时间。
3.6 文件操作命令 3.6.1 有关文件显示命令 示例: 在当前目录下建立一个空文件ex2: $touch ex2 注意:建立文件时必须保证当前目录下不存在与要建立文件同名的文件,如果有将不会创建新文件而是修改该文件的时间标签更新为系统当前的时间。

79 练 习 1、显示系统时间 2、显示当前日期,形如2005-03-15 3、今天是本年度的第几周? 4、10天前的日期是? 5、显示今年的日历
练 习 1、显示系统时间 2、显示当前日期,形如2005-03-15 3、今天是本年度的第几周? 4、10天前的日期是? 5、显示今年的日历 6、将系统时间修改为2006年1月1日 7、清屏

80 练 习 8、用vi建立新文件a1,内容如书上P36 m1.c。 9、用vi建立新文件a2,内容为“I am a girl.”
练 习 8、用vi建立新文件a1,内容如书上P36 m1.c。 9、用vi建立新文件a2,内容为“I am a girl.” 10、连接a1、a2两个文件,新文件名为a。使 用cat命令来显示文件a的内容,并练习cat的其他选项。 11、根据ls命令的帮助信息建立新文件b。使 用more显示文件b的内容,但在显示之前先清屏,每15行显示一次。

81 练 习 12、再使用less命令显示b文件内容,试比较两者有什么不同。
练 习 12、再使用less命令显示b文件内容,试比较两者有什么不同。 13、显示a文件的前两行,要求显示给定文件的标题。再试试显示a文件的前2个字符。 14、显示b文件的倒数10行。 15、将b文件从第10行开始显示。 16、使用touch命令创建空文件c,利用ls命令查看之。再将其修改时间改为当前时间。

82 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 grep命令 该命令用来在文本文件中查找指定模式的词或短语,并在标准输出上显示包括给定字符串模式的所有行。该命令组包含三个命令:grep、egrep和fgrep命令。grep命令一次只能搜索一个指定的模式;egrep命令可以使用扩展的字符串模式进行搜索;fgrep命令是快速的搜索命令,它检索固定字符串,但不识别正则表达式(正则表达式是在模式匹配中涉及到的正文模式。一个正则表达式可以匹配一个或多个字符串,如file*)。

83 grep [选项][查找模式][文件名1,文件名2…] egrep [选项][查找模式][文件名1,文件名2…]
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 一般格式: grep [选项][查找模式][文件名1,文件名2…] egrep [选项][查找模式][文件名1,文件名2…] fgrep [选项][查找模式][文件名1,文件名2…]

84 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 说明: 这组命令在指定文件中搜索特定模式以及定位特定主题等方面用途很大。要搜索的模式就被看作是一些关键词,查看指定的文件中是否包含这些关键词。这三个命令的功能相似,但由于可搜索的模式不同,因此在功能强弱上有所差别。 如果没有指定文件,它们就从标准输入中读取。正常情况下,每个匹配的行被显示到标准输出上。如果要搜索的文件不止一个,则在每一行输出之前加上文件名。

85 -b 在输出的每一行前面显示包含匹配字符串的行在文件中的位置,用字节偏移量来表示。 -c 只显示文件中包含匹配字符串的行的总数。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 选项: -E 将查找模式看成是扩展的正则表达式。 -F 将查找模式看成是单纯的字符串。 -b 在输出的每一行前面显示包含匹配字符串的行在文件中的位置,用字节偏移量来表示。 -c 只显示文件中包含匹配字符串的行的总数。 -i 匹配比较时不区分字母的大小写。 -r 以递归方式查询目录下的所有子目录中的文件。

86 -n 在输出包含匹配模式的行之前,加上该行的行号(文件首行的行号为1)。 -v 只显示不包含匹配字符串的文本行。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 -n 在输出包含匹配模式的行之前,加上该行的行号(文件首行的行号为1)。 -v 只显示不包含匹配字符串的文本行。 -x 只显示与整个行都严格匹配的行。 -e expreesion 用expression所指定的模式进行精确的模式匹配。 -f expfile 将expfile文件中的文本行作为检索的字符串模式,检索其中所有的模式。

87 在命令名之后先输入搜索的模式,然后是要搜索的文件。 在文件名列表中可以使用通配符,如“*”等。 要查找目录的子目录中的文件,应使用-r选项。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 注意事项: 在命令名之后先输入搜索的模式,然后是要搜索的文件。 在文件名列表中可以使用通配符,如“*”等。 要查找目录的子目录中的文件,应使用-r选项。 如果在搜索模式的字符串中包含空格,应用单引号把模式字符串括起来。 利用选项-f可以大批的在文件中搜索字符串。

88 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 示例:
在口令文件 /etc/passwd 中查找包含mengqc的所有行: $grep -F mengqc /etc/passwd 在mengqc目录和子目录下的所有文件中查找字符串“printf”出现的次数: $grep -r ‘print’ mengqc 在文件f1和f2中查找包括“main”或者“printf”的所有行,不管首字母的大小写: $grep -E ‘[Mm]ain|[Pp]rintf’ f1 f2 或者 $grep -i ‘main|printf’ f1 f2

89 3.6 文件操作命令 补充 正则表达式 正则表达式就是处理字串的方法,他是以行为單位,来进行字串处理的行为,他透过一些特殊符号的辅助,可以让使用者轻易的达到搜寻/取代某特定字串的处理程序! 例如: 要查找VBird 或 Vbird ,方法是忽略大小寫?或者是分別以 VBird 及 Vbird 搜尋兩遍? 在 /etc/rc.d/目录下查找具有 mail 这个关键词,当然可以一个目录一个目录的打开, 然后去搜寻 mail 这个关键词。如果了解正则表达式的相关技巧,那么只要一行指令。 『grep 'mail' /etc/rc.d/*』

90 ^word word$ . \ RE* RE 字符 意义与范例 待搜寻的字符串(word)在行首!
范例:grep -n '^#' ex1.txt 搜寻行首为 # 开始的那一行! word$ 待搜寻的字符串(word)在行尾! 范例:grep -n '!$' ex1.txt 将行尾为 ! 的那一行打印出来! . 代表『任意一个』字符,一定是一个任意字符! 范例:grep -n 'e.e' ex1.txt 搜寻的字符串可以是 (eve) (eae) (eee) (e e), 但不能仅有 (ee) !亦即 e 与 e 中间『一定』仅有一个字符,而空格符也是字符! \ 跳脱字符,将特殊符号的特殊意义去除! 范例:grep -n \' ex1.txt 搜寻含有单引号 ' 的那一行! RE* 重复零个或多个的前一个 RE 字符 范例:grep -n 'ess*' ex1.txt 找出含有 (es) (ess) (esss) 等等的字符串,注意,因为 * 可以是 0 个,所以 es 也是符合带搜寻字符串。另外,因为 * 为重复『前一个 RE 字符』的符号, 因此,在 * 之前必须要紧接着一个 RE 字符喔!例如任意字符则为 『.*』 !

91 RE 字符 意义与范例 \{n,m\} 连续 n 到 m 个的『前一个 RE 字符』,若为 \{n\} 则是连续 n 个的前一个 RE 字符,若是 \{n,\} 则是连续 n 个以上的前一个 RE 字符! 范例:grep -n 'go\{2,3\}g' ex1.txt 在 g 与 g 之间有 2 个到 3 个的 o 存在的字符串,亦(goog)(gooog) [] 字符集合的 RE 特殊字符的符号 [list] 范例:grep -n ‘g[ld]’ ex1.txt 搜寻含有 (gl) 或 (gd) 的那一行~ 需要特别留意的是,在 [] 当中『谨代表一个待搜寻的字符』。 [ch1-ch2] 范例:grep -n '[0-9]' ex1.txt 搜寻含有任意数字的那一行!需特别留意,在字符集合 [] 中的减号 - 是有特殊意义的,他代表两个字符之间的所有连续字符!但这个连续与否与 ASCII 编码有关, 因此,您的编码需要设定正确(在 bash 当中,需要确定 LANG 与 LANGUAGE 的变量是否正确!) 例如所有大写字符则为 [A-Z]。[^] 范例:grep -n 'oo[^t]' ex1.txt 搜寻的字符串可以是 (oog) (ood) 但不能是 (oot) ,那个 ^ 在 [] 内时, 代表的意义是『反向选择』的意思~例如,我不要大写字符,则为 [^A-Z] ~ 但是,需要特别注意的是,如果以 grep -n [^A-Z] ex1.txt 来搜寻, 却发现该档案内的所有行都被列出,为什么?因为这个 [^A-Z] 是『非大写字符』的意思, 因为每一行均有非大写字符,例如第一行的 "Open Source" 就有 p,e,n,o.... 等等的小写字符, 以及双引号 (") 等字符,所以当然符合 [^A-Z] 的搜寻!

92 练 习 grep -n 'the' ex1.txt 1、显示u盘上ex1.txt文件的内容 2、查询该文件中包括“the”字符串的行
练 习 1、显示u盘上ex1.txt文件的内容 2、查询该文件中包括“the”字符串的行 grep -n 'the' ex1.txt 3、查询该文件中不包括“the”字符串的行,并统计 grep -vn 'the' ex1.txt 4、ls -l * 的含义是?ls -l a*的含义是? 正则表达式中,我们要找到满足上述要求的文件,其表示方式是? ls | grep -n '^a.*'

93 为了要简化整个指令操作,我们可以了解 一下使用范围更广的延伸型正规表示法的 表示式 。 3.6 文件操作命令
补充 延伸正则表达式 为了要简化整个指令操作,我们可以了解 一下使用范围更广的延伸型正规表示法的 表示式 。 例如,我們要去除空白行與行首為 # 的行列, 使用的是: grep -v '^$' ex1.txt | grep -v '^#‘ 使用延伸型的正規表示法,我們可以簡化為: egrep -v '^$|^#' ex1.txt

94 + ? | () 重复『一个或一个以上』的前一个 RE 字符
意义与范例 重复『一个或一个以上』的前一个 RE 字符 范例:egrep -n 'go+d‘ regular_express.txt 搜寻 (god) (good) (goood)... 等等的字符串。 那个 o+ 代表『一个以上的 o 』所以,上面的执行成果会将第 1, 9, 13 行列出来。 『零个或一个』的前一个 RE 字符 范例:egrep -n ‘go?d’ regular_express.txt 搜寻 (gd) (god) 这两个字符串。 那个 o? 代表『空的或 1 个 o 』所以,上面的执行成果会将第 13, 14 行列出来。 有没有发现到,这两个例子( 'go+d' 与 'go?d' )的结果集合与 'go*d' 相同 | 用或( or )的方式找出数个字符串 范例:egrep -n 'gd|good' regular_express.txt 搜寻 gd 或 good 这两个字符串 () 找出『群组』字符串 范例:egrep -n ‘g(la|oo)d’ regular_express.txt 搜寻 (glad) 或 (good) 这两个字符串。此外,这个功能还可以用来作为『多个重复群组』的判别:echo 'AxyzxyzxyzxyzC' | egrep 'A(xyz)+C‘ 上面的例子当中,意思是说,我要找开头是 A 结尾是 C ,中间有一个以上的 "xyz" 字符串的意思~

95 在目录结构中搜索满足查询条件的文件,并执行指定的操作。 一般格式: find [路径…] [表达式]
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 find命令 在目录结构中搜索满足查询条件的文件,并执行指定的操作。 一般格式: find [路径…] [表达式] 说明:这是GNU版本的find命令。find命令从每个给定的文件名开始向下搜索目录树,根据运算符优先级的规则,从左至右依次计算给定的表达式。

96 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 以“-”、“(”、“)”、“,”或“!”开头的第一个参数被看作是表达式的开头。在它们之前的任何参数都被看作是搜索路径;而在它们之后的任何参数都被看成是表达式的其余部分。如果没有给出路径,就使用当前目录;如果没有给出表达式,就用表达式“-print”。 搜索路径是目录,它是find命令执行搜索工作的起点,即将从这个目录开始,递归的搜索其所有的子目录,查找满足查询条件表达式的文件。默认值是系统当前工作目录。

97 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 表达式: 表达式由选项(它们对整个操作起作用,而不是仅处理特定的文件)、测试和操作三部分组成,分别由运算符分开。当运算符被省略时,就默认是“-and(与)”。如果表达式不包括除“-prune”之外的任何操作,就对所有找到的文件执行-print操作。

98 -depth 处理本目录之前的每个目录的内容。 -follow 不参照符号链接,意味着在目录树结构中没有下面的“叶子”。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 选项: -depth 处理本目录之前的每个目录的内容。 -follow 不参照符号链接,意味着在目录树结构中没有下面的“叶子”。 -maxdepth levels 从命令行给定的路径参数开始,向下搜索至多levels级。“maxdepth 0”表示仅对命令行中给出的参数进行设定的测试和操作。 -mindepth levels 对小于levels的级别都作任何测试和操作。“-mindepth 1”表示处理除命令行参数以外的所有文件。

99 3.6 文件操作命令 测试。可以指定的数字参数如下: +n 表示大于n -n 表示小于n n 表示等于n
3.6.2 匹配、排序及显示指定内容的命令 测试。可以指定的数字参数如下: +n 表示大于n -n 表示小于n n 表示等于n -amin n 查找n分钟以前被访问过的所有文件。 -cmin n 查找n分钟以前文件状态被修改过的所有文件。 -mmin n 查找n分钟以前文件内容被修改过的所有文件。 -atime n 查找n天以前被访问过的所有文件。 -ctime n 查找n天以前文件状态被修改过的所有文件。 -mtime n 查找n天以前文件内容被修改过的所有文件。

100 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 -name ‘字符串’ 查找文件名中包含给定字符串的所有文件,字符串内可以有通配符“*”,“?”,“[ ]”,但它们不能匹配以“.”开头的文件名。 -group ‘用户组名’ 查找属于指定用户组的所有文件。 -user ‘用户名’ 查找属于指定用户的所有文件。 -type x 查找类型为x的文件,x可以是下列字符之一: b 块设备文件 c 字符设备文件 d 目录文件 p 命名管道 f 普通文件 l 符号链接文件 s socket(套接字)文件

101 -ok 命令名 { } 对符合条件的文件执行由“命令名”指定的Linux命令。与exec不同的是,它会询问用户是否要执行该命令。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 操作: -exec 命令{ };对符合条件的文件执行由“命令”指定的Linux命令。所有后随的参数都被看成是“命令”的参数,直至遇到结尾的分号。{ }表示命令的参数就是所找到的文件。命令的末尾必须以“\;”结束。 -ok 命令名 { } 对符合条件的文件执行由“命令名”指定的Linux命令。与exec不同的是,它会询问用户是否要执行该命令。 -ls 列出所有找到的文件。

102 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令
-fprintf 文件名 将所有找到的文件的名字写到由“文件名”指定的文件中。如果这个文件不存在,就以此名建一个新文件。 -print 在标准输出设备上显示所有找到的文件的名字。 -printf 格式字符串 功能与 -print类似,但要按照“格式字符串”所限定的格式来输出文件名。“格式字符串”的写法与C语言中printf函数的“格式字符串”相同。 -prune 如果没有给出-depth,则为真,不从当前目录开始向下查找;如果给出-depth,则为假,不起作用。

103 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 运算符: (表达式) 作用是优先执行该表达式。
!表达式 如果该表达式为假,则“!表达式”为真。 -not 表达式 与“!表达式”相同。 表达式1 表达式2 表示“与”的关系,即如果表达式1为假,则不计算表达式2。 表达式1 -a 表达式2 与“表达式1 表达式2”作用相同。 表达式1 -o 表达式2 表示“或”的关系,即如果表达式1真,则不计算表达式2。

104 查找当前目录中所有以main开头的文件,并显示这些文件的内容:
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 示例: 查找当前目录中所有以main开头的文件,并显示这些文件的内容: $find -maxdepth 1 -name ‘main*’ -exec cat {} \; 查找当前目录中所有以m开头的、后随一个字母或数字的.c文件,并交互式的显示某些文件的内容。 $find -maxdepth 1 -name ‘m?.c’ ok cat { } \;

105 列出当前目录中文件名以“txt”结尾的、10天之前被修改过的文件。 $find -name ‘*.txt’ -ctime +10 -ls
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 列出当前目录中文件名以“txt”结尾的、10天之前被修改过的文件。 $find -name ‘*.txt’ -ctime ls 删除当前目录下所有一周之内没有被访问过的a.out或*.o文件: $find . \ (-name a.out -o -name ‘*.o’\) -atime exec rm { } \;

106 练 习 1、寻找文件名为testing的文件 2、寻找文件名包含test的文件 3、寻找一天前新增的目录和文件
练 习 1、寻找文件名为testing的文件 2、寻找文件名包含test的文件 3、寻找一天前新增的目录和文件 4、寻找/dev目录下,属性为b的文件 5、find /etc –name ‘*httpd*’ 由于 find 在寻找资料的时候相当的耗硬盘! 所以没事不要使用 find 。有更好的指令可以 取代,那就是 whereis 与 locate!

107 Whereis与locate 格式 :Whereis [-bmsu] whereis passwd whereis –b passwd
-b 只找binary目录 例子: whereis passwd whereis –b passwd 格式 :locate [目录名] locate root

108 为何搜寻的速度会比 find 快这么多?是因为Linux
系统会将系统内的所有档案都记录在一个数据库档 案里面,而当使用 whereis 或者locate 时,都会以 此数据库档案的内容为准,因此,有的时后你还会 发现使用这两个命令时,会找到已经被删除的文件! 这就是因为他是一个『数据库』档案! 另外,基本上 Linux 每天会针对 Linux 主机 进行 updatedb (就是那一个数据库档案啰!)的 动作,你可以在 /etc/cron.weekly/slocate.cron 这个 档案找到相关的机制。当然,也可以直 接使用 /usr/bin/updatedb 来更新数据库档案呢!

109 3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 sort命令 sort命令用来对文本文件的各行进行排序。 一般格式:
排序比较是依据从输入文件的每一行中提取的一个或多个排序关键字进行的。排序关键字定义了用来排序的最小的字符序列。按照默认,排序关键字的顺序由系统使用的字符集决定。

110 -m 如果文件列表中的文件已经排好序,则对这些文件统一进行合并,不做排序。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 选项: -m 如果文件列表中的文件已经排好序,则对这些文件统一进行合并,不做排序。 -c 检查给定的文件是否已排好序,若没有,则显示一个出错消息,不做排序。 -u 与-c选项一起用,严格的按顺序检查;与-m一起用,对排序后的重复行只输出一行。 -o 文件名——将排序输出放到该文件名所指定的文件中。如果该文件不存在,则创建一个新文件。

111 -d 按字典顺序排序,比较时仅字母、数字有意义。 -f 忽略字母的大小写。 -i 忽略非打印字符。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 改变排序规则的选项主要有: -d 按字典顺序排序,比较时仅字母、数字有意义。 -f 忽略字母的大小写。 -i 忽略非打印字符。 -M 规定月份的比较次序是(未知)<“JAN”<“FEB”<…<“DEC”。 -r 按逆序排序。默认排序输出是按升序排序。

112 -b 比较关键字时忽略前导的空白符(空格或制表符)。 -t 字符 将指定的“字符”作为字段间的分隔符。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 -k n1[,n2] 指定从文本行的第n1字段开始至第n2字段(不包括n2字段)中间的内容作为排序关键字。如果没有n2,则关键字是从第n1个字段到行尾的所有字段。n1和n2可以是小数形式,如“x.y”,x表示第x字段,y表示第x字段中的第y个字符。字段和字符的位置都是从1开始算起的。 -b 比较关键字时忽略前导的空白符(空格或制表符)。 -t 字符 将指定的“字符”作为字段间的分隔符。

113 $head more_1>more_h10(将文件more_1的前10行定向到文件more_h10中) $sort more_h10
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 示例: 对more_h10文件排序: $head more_1>more_h10(将文件more_1的前10行定向到文件more_h10中) $sort more_h10 以第3个字段作为排序关键字,对文件more_h10排序。 $sort -k 2,3 more_h10

114 3.6 文件操作命令 uniq命令 该命令显示文件中所有不重复的行。 一般格式: uniq [选项] 文件
3.6.2 匹配、排序及显示指定内容的命令 uniq命令 该命令显示文件中所有不重复的行。 一般格式: uniq [选项] 文件 说明:uniq命令读取输入文件,并比较相邻的行、去掉重复的行,只留下其中的一行。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用“-”表示,则从标准输入上读取。

115 -c 显示输出时,在每行的行首上加上该行在文件中出现的次数。 -d 只显示重复行。 -u 只显示文件中不重复的行。
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 选项: -c 显示输出时,在每行的行首上加上该行在文件中出现的次数。 -d 只显示重复行。 -u 只显示文件中不重复的行。 -N 比较时忽略文本行中前N个字段与每个字段前的空白,只对每行后面的字段进行比较。 +N 比较时忽略文本行中前N个字符,只对每行后面的字符进行比较。

116 显示文件more10中不重复的行,从第2个字段的第2个字符开始比较: $uniq -u -1+1 more10
3.6 文件操作命令 3.6.2 匹配、排序及显示指定内容的命令 示例: 显示文件ex3中不重复的行: $cat ex3 $uniq -u ex3 显示文件more10中不重复的行,从第2个字段的第2个字符开始比较: $uniq -u -1+1 more10

117 comm命令用来对两个已排序文件进行逐行比较。 一般格式: comm [-123] file1 file2
3.6 文件操作命令 3.6.3 比较文件内容的命令 comm命令 comm命令用来对两个已排序文件进行逐行比较。 一般格式: comm [-123] file1 file2 说明:comm命令对两个已经排好序的文件进行比较。其中,file1和file2是已经排好序的文件。comm从这两个文件中读取正文行,进行比较,最后生成三列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“-”,则表示从标准输入读取。

118 -123 选项1、2和3分别表示不显示comm输出中的第1列、第2和第3列。 示例
3.6 文件操作命令 3.6.3 比较文件内容的命令 选项: -123 选项1、2和3分别表示不显示comm输出中的第1列、第2和第3列。 示例 用comm命令对文件m1.c和m2.c进行比较,并且只显示它们共有的行。 $comm -12 m1.c m2.c

119 diff命令可以比较两个文件,并显示它们的不同。它比comm命令完成更复杂的检查,并且不要求两个文件预先排好序。
3.6 文件操作命令 3.6.3 比较文件内容的命令 diff命令 diff命令可以比较两个文件,并显示它们的不同。它比comm命令完成更复杂的检查,并且不要求两个文件预先排好序。 一般格式: diff [选项] file1 file2 说明:该命令逐行比较两个文件,列出他们的不同之处,并且告诉用户,为了两个文件一致,需要修改它们的哪些行。如果两个文件完全一样,则该命令不显示任何输出。

120 3.6 文件操作命令 3.6.3 比较文件内容的命令 该命令输出的一般形式如下: n1 a n3,n4 n1,n2 d n3
n1,n2 c n3,n4 这些行类似ed命令把文件file1转换成文件file2。字母(a,d和c)之前的行号(n1,n2)是针对文件file1的,其后面的行号(n3,n4)是针对文件file2的。字母a表示附加,字母d表示删除,字母c表示修改。 在上述形式的每一行的后面跟随受到影响的若干行,以“<”打头的行属于文件file1,以“>”打头的行属于文件file2。 diff命令能区分块特别文件、字符特别文件以及FIFO(管道文件),不会把它们与普通文件进行比较。

121 -b 忽略行尾的空格,而字符串中的空白符都看作相等的。 -c 输出格式是带上下文的三行格式。 -C n 输出格式是有上下文的n行格式。
3.6 文件操作命令 3.6.3 比较文件内容的命令 选项: -b 忽略行尾的空格,而字符串中的空白符都看作相等的。 -c 输出格式是带上下文的三行格式。 -C n 输出格式是有上下文的n行格式。 -e 输出一个合法的ed脚本。 -r 当文件file1和file2都是目录时,递归比较找到的各子目录。 示例 见教材P48

122 作 业 在linux操作系统下,建立如上图所示目录结构:
作 业 ff aa monkey.c mm.o a.out maina.c bb ex3 mainb.c 在linux操作系统下,建立如上图所示目录结构: 其中aa、bb、ff为目录,其他均为文件,mm.o与a.out两文件的内容分别为课本P47页m1.c和m2.c的内容。(提示:建立目录命令为mkdir,建立文件用vi)。 试完成下列各题:

123 1、 查找ff下所有以m开头的文件(包括其下的子目录);
2、 查找aa下a.out文件或*.o文件,并显示其内容; 3、 利用more_1文件的后15行,在bb目录下新建ex15文件; 4、 将ex15文件降序排列的内容放入文件sort_ex15中; 5、 显示mm.o和a.out两文件内容不同的行; 6、 将aa下所有以c结尾的文件复制到ff目录下; 7、 将bb目录下的mainb.c移动到aa目录下,文件名改为new_mainb.c; 8、 删除bb目录; 9、 统计mm.o文件的字节数、字数、行数 10、完成课后P82 11、13、15题

124 cp命令将原文件或目录拷贝到目标文件或目录中。 一般格式: cp [选项] 源文件或目录 目标文件或目录
3.6 文件操作命令 3.6.4 复制、移动、删除文件的命令 cp命令 cp命令将原文件或目录拷贝到目标文件或目录中。 一般格式: cp [选项] 源文件或目录 目标文件或目录 说明:如果源文件是普通文件,则该命令把它拷贝到指定的目标文件;如果是目录,就需要使用“-r”选项,将整个目录下所有的文件和子目录都复制到目标位置。

125 -a 该选项通常在拷贝目录时使用。它递归的将源目录下的所有子目录及其文件都复制到目标目录,并且保留文件链接和文件属性不变。
3.6 文件操作命令 3.6.4 复制、移动、删除文件的命令 选项: -a 该选项通常在拷贝目录时使用。它递归的将源目录下的所有子目录及其文件都复制到目标目录,并且保留文件链接和文件属性不变。 -d 拷贝时保留文件链接。 -f 覆盖已经存在的目标文件,并且不给出提示。 -i 与-f选项不同,在覆盖目标文件之前先给出提示,要求用户予以确认。回答y,将覆盖目标文件。交互式拷贝。

126 -p 除复制源文件的内容外,还将其修改时间和存取权限也复制到新文件中。 -r 将源目录下的所有文件及其各级子目录都复制到目标位置。
3.6 文件操作命令 3.6.4 复制、移动、删除文件的命令 -p 除复制源文件的内容外,还将其修改时间和存取权限也复制到新文件中。 -r 将源目录下的所有文件及其各级子目录都复制到目标位置。 -l 不做拷贝,创建指向源文件的链接文件,链接文件名由目标文件给出。

127 3.6.4 复制、删除和移动文件的命令 注意:cp命令复制一个文件,而源文件保持不变!
如果将一个文件拷贝到一个目标文件中,而目标文件已经存在,则目标文件的内容将被破坏。 此命令中所有参数既可以是绝对路径名,也可以是相对路径名。通常会用到(.)或(..)的形式。例如下面的命令将指定文件拷贝到当前目录下: cp ../mary/Homework/assign . 所有目标文件指定的目录必须是已经存在的,cp命令不能创建目录。 如果没有文件拷贝的权限,则系统会显示出错信息。

128 3.6.4 复制、删除和移动文件的命令 示例: 将文件more_1拷贝到目录/usr/mengqc/tmp下,并改名为exam1:
$cp more_1 /usr/mengqc/tmp/exam1 将目录/usr/mengqc下的所有文件及其子目录拷贝到目录/usr/liuzh中: $cp -r /usr/mengqc /use/liuzh 交互式的将目录/usr/mengqc中以m打头的所有.c文件拷贝到目录/usr/liuzh中: $cp -i /usr/mengqc/m.c /usr/liuzh

129 3.6.4 复制、删除和移动文件的命令 rm命令 可以用该命令删除不需要的文件和目录。 一般格式: rm [选项] 文件列表
说明:该命令可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除。对于链接文件,只是删除整个链接文件,而原有文件保持不变。

130 3.6.4 复制、删除和移动文件的命令 选项: -d 删除目录,不管它是否为空(仅超级用户可用)。
-f 忽略不存在的文件,并且不给出提示信息。 -r 递归的删除指定目录及其下属的各级子目录、相应的文件。 -i 交互式的删除文件。

131 3.6.4 复制、删除和移动文件的命令 注意: 使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真的删除。 rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求逐一确定是否要删除。这时,必须键入y或按Y+Enter键才能删除文件。如果仅按Enter或其他字符,文件不会被删除。

132 3.6.4 复制、删除和移动文件的命令 示例: 交互式删除当前目录下的文件test和example: $rm -i test example
删除当前目录下除隐含文件外的所有文件和子目录: $rm -r *

133 3.6.4 复制、删除和移动文件的命令 mv命令 mv命令用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。 一般格式:
mv [选项] source target 说明:source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件,则目标文件的内容将被覆盖。 mv命令可以用来将源文件移至一个目标文件,或是将一组文件移至一个目标目录。

134 3.6.4 复制、删除和移动文件的命令 源文件被移至目标文件有两种不同的结果:
如果目标文件是到某一目录文件的路径,源文件会被移到此目录下,且文件名不变。 如果目标文件不是目录文件,则源文件名(只能有一个)会变为此目标文件名,并覆盖已存在的同名文件。如果源文件和目标文件在同一个目录下,mv的作用就是改文件名。 当目标文件是目录文件时,源文件和目录参数可以有很多个,则所有的源文件都会被移至目标文件。所有移到该目录下的文件都将保留以前的文件名。

135 3.6.4 复制、删除和移动文件的命令 选项: -i 交互式操作。如果源文件与目标文件或目录中的文件同名,则询问用户是否覆盖目标文件。用户输入“y”表示覆盖,输入“n”表示取消移动。这样可以避免误覆盖。 -f 与-i相反,它禁止交互作用。在覆盖已有的目标文件时不给任何提示。

136 3.6.4 复制、删除和移动文件的命令 示例: 将文件ex3改名为new1: $mv ex3 new1
将目录/usr/mengqc中的所有文件移至当前目录(用“.”表示)中: $mv /usr/mengqc/* .

137 3.6.5 文件内容统计命令 wc 一般格式: wc [选项] 文件…
字是由空格符隔开的最大字符串。 wc输出列的顺序和数目不受选项顺序和数目的影响,总是按以下格式显示,并且每项只占一列: 行数 字数 字节数 文件名

138 3.6.5 文件内容统计命令 选项: -c 统计字节数 -l 统计行数 -w 统计字数
注意:如果命令行中没有给出文件名,则输出中不出现文件名。

139 3.6.5 文件内容统计命令 示例: 统计文件ex1和ex2的字节数、字数和行数: $wc -lcw ex1 ex2
$wc ex1 ex2

140 作 业 在linux操作系统下,建立如上图所示目录结构:
作 业 ff aa monkey.c mm.o a.out maina.c bb ex3 mainb.c 在linux操作系统下,建立如上图所示目录结构: 其中aa、bb、ff为目录,其他均为文件,mm.o与a.out两文件的内容分别为课本P47页m1.c和m2.c的内容。(提示:建立目录命令为mkdir,建立文件用vi)。 试完成下列各题:

141 1、 查找ff下所有以m开头的文件(包括其下的子目录);
2、 查找aa下m开头的文件或*.out文件,并显示其内容; 3、 利用more_1文件的后15行,在bb目录下新建ex15文件; 4、 将ex15文件降序排列的内容放入文件sort_ex15中; 5、 显示mm.o和a.out两文件内容不同的行; 6、 将aa下所有以c结尾的文件复制到ff目录下; 7、 将bb目录下的mainb.c移动到aa目录下,文件名改为new_mainb.c; 8、 删除bb目录; 9、 统计mm.o文件的字节数、字数、行数 10、完成课后P82 11、13、15题

142 3.6.6 命令的输入和输出 计算机的所有活动都涉及到输入、处理数据和输出结果三个过程。计算机提供输入或输出的途径有多种,使用不同的设备。在Linux中,将这些设备都作为文件来看待。 标准I/O文件 系统为每个进程自动打开三个标准文件,即标准输入、标准输出和标准错误输出。系统为这三个标准文件分别规定了文件描述字,它们分别是0,1,2。

143 3.6.6 命令的输入和输出 标准输入(stdin)。在默认情况下,标准输入文件指终端键盘。程序会像读取其他文件一样,从键盘读取输入。
标准输出(stdout)。在默认情况下,标准输出文件是指终端屏幕。程序会像处理其他文件一样在终端上写输出。 标准错误输出(stderr)。标准错误输出是程序用来报错和显示诊断信息的设备。默认情况下,标准错误输出文件也是指终端屏幕。一个程序会像处理其他文件一样在终端屏幕上写出错误信息。

144 3.6.6 命令的输入和输出 文件重定向 在Linux系统下,由于标准输入和输出是由shell建立的,所以shell也可以重新指定输入源和输出的目标,即输入输出重定向。通过这项功能可以实现:从一个普通文件中或另一个设备上获得输入;将输出定向到另一个普通文件,而不是终端屏幕。 (1)输出重定向: 有三类重定向:重定向标准输出、重定向标准错误输出和合并输出。

145 3.6.6 命令的输入和输出 重定向标准输出。输出重定向可以让你将一个命令的输出保存到一个文件中。在命令行上用重定向符号“>”可以重定向标准输出。 可以随时对文件进行重定向,只要在命令行上连续键入重定向符号和文件名即可。因为shell最终会在命令执行前检查命令行中是否有I/O重定向。 例如:$ls -l /usr/tmp >dir1 的结果是将/usr/tmp下的目录的长格式列表送到当前目录下的文件dir1中,不在终端屏幕上显示出来。

146 3.6.6 命令的输入和输出 若重定向文件不存在,shell首先会生成该文件,然后重定向输出到该文件。若该文件已经存在,并且用户有使用它的权限,则文件原来的内容会被新输出的内容所替代。 注意:在“>”之前无命令的命令行中执行I/O重定向,shell会生成长度为0的文件(即空文件)或删除已存在的文件内容。 另外,shell是在命令执行前就设置好了I/O重定向,而正在执行的命令自己是不知道已发生重定向的。

147 3.6.6 命令的输入和输出 重定向标准错误输出:标准错误输出重定向与标准输出重定向方式一样,使用重定向操作符“>”。
注意:必须在“>”前指定一个文件描述字2;否则,系统会认为是1(即标准输出)。 利用标准错误输出重定向可以将出错信息和诊断信息保存到指定文件中。 合并输出:通常情况下,系统将标准输出和标准错误输出分别对待,你可以按照上面的方法分别进行重定向的操作。但有时,可能希望在同一命令行中对这两个标准输出进行重定向。 利用“&>”可以将标准输出和标准错误输出同时重定向。

148 3.6.6 命令的输入和输出 (2)附加重定向:用重定向操作符“>”进行重定向操作时会破坏已经存在的文件的内容,有时,需要将一条命令的输出附加到已有文件的末尾,这时,可以使用附加重定向操作符“>>”。一般格式为 命令>>文件名或 命令 1>>文件名 附加标准错误输出重定向格式为 命令 2>>文件名 例见教材P54 (3)输入重定向:输出重定向可以让应用程序使用一个文件作为它的输入,而不是从键盘上获取数据。 在命令行中用输入重定向操作符“<”可以重定向标准输入,格式为 命令 <文件名 或 命令 0<文件名 可以在“<”之前指明一个文件描述字,其间不需要空格。默认情况下,为文件描述字0,即标准输入。 标准输入重定向stdin不像stdout和stderr重定向那样普遍使用,因为许多命令是直接打开命令文件的。

149 3.6.6 命令的输入和输出 管道、过滤器与tee命令
(1)管道:很多情况下,需要将一个程序的输出作为另一条命令的输入。这时往往可以通过一个临时文件将两个命令结合在一起。但在Linux下,不需要使用临时文件就能将两条命令高效的结合在一起,这种机制称为管道(Pipe)。 管道用“|”作为重定向操作符。其使用形式为: 命令1 | 命令2 将命令1的标准输出重定向到命令2的标准输入。

150 3.6.6 命令的输入和输出 由“|”操作符隔开的若干命令组成的序列称为管道线。
例如,命令$ls | wc -l将把当前目录中的内容直接送给wc -l命令,由后者统计出有多少行. 注意:标准错误输出(stderr)不能通过管道重定向。 另外,管道命令不限于将两条命令结合在一起,任何数目的命令都可以用管道操作符将相邻的一对命令结合在一起。这样第一条命令的输出成为第二条命令的输入,第二条命令的输出又成为第三条命令的输入…。

151 3.6.6 命令的输入和输出 (2)过滤器:在管道线中,有一类程序能够从标准输入(或文件)读取信息,然后检查和处理数据,并产生结果,输出至标准输出(或文件),这类程序称为过滤器(Filter)。Linux系统中有不同类型的过滤器。一些过滤器用行编辑命令输出一个被编辑的文件;另外一些过滤器是按给定模式在文件中寻找、并输出与这种模式相匹配的部分数据;还有一些执行字处理操作,检测一个文件中的格式,输出一个格式化的文件。过滤器可以相互连接,因此,一个过滤器的输出可能是另一个过滤器的输入。

152 3.6.6 命令的输入和输出 过滤器的工作过程一般是:首先读取标准输入,然后对输入信息进行某些变换(相当于过滤),再将结果输出,如wc,sort等命令。 许多过滤器是为了读取标准输入设计的,而且只有在命令行中没有其他文件名时才能实现。如果命令中指明了文件名,则首先打开该文件。 管道线中的命令除了第一个和最后一个不一定是过滤器外,其他的命令必须是过滤器。

153 3.6.6 命令的输入和输出 (3)tee命令:tee命令来源于“T”的读音,它的功能与“T”型管相似,数据从一端流入,从另一端的两端输出。tee命令将管道功能用到了顶点,它可以读取标准输入并将其同时写到标准输出和指定的文件中。 一般格式: tee [选项] [文件…] 选项: -a 附加到给定的文件中,并不覆盖原有的内容。 -i 忽略中断信号。 注意:如果指定文件不存在,则tee命令会创建它。如果指定文件已存在,则tee会破坏它的内容。如果要将前面命令输出的内容加在指定文件内容的后面,需用-a选项。 示例: cat /etc/passwd | head –5 | tee myfile

154 3.7 目录及其操作命令 Linux系统中,除根目录(root)外,所有文件和目录都包含在相应的目录文件中。下面介绍Linux系统的目录结构及主要的操作命令。

155 3.7.1 目录结构 Linux文件系统采用带链接的树形目录结构,即只有一个根目录(通常用“/”表示),其中含有下级子目录或文件的信息;子目录中又可含有更下级的子目录或者文件的信息……这样一层一层的延伸下去,构成一棵倒置的树。 在目录树中,根节点和中间节点(用圆圈表示)都必须是目录,而文件只能作为“叶子”出现。当然,目录也可以是叶子。

156 3.7.1 目录结构 1.用户主目录 当注册进入系统时,你的主目录就是你的当前工作目录。主目录往往位于/home目录之下,并且与你的注册名相同,如/home/meng。

157 3.7.1 目录结构 2.路径名 迄今为止,你所看到的文件仅是你的主目录下的文件。其实可以利用路径名来访问在层次结构文件系统中任何地方的文件和目录。 为了访问文件,你必须告诉系统它们在什么地方,即保存在那个目录下。路径名描述了文件系统中通向任意文件的路径。 有两种路径名:绝对路径名和相对路径名。当为命令指定文件名时,要指定两种路径形式的一种,不管有多长多复杂。

158 3.7.1 目录结构 (1)绝对路径名:在Linux操作系统中,每一个文件有唯一的绝对路径名,它是沿着层次树、从根目录开始、到达相应文件的所有目录名连接而成,各目录名之间以斜线符“/”隔开。 绝对路径名总是以(/)开头,它表示根目录。如果要访问的文件在当前工作目录上,使用绝对路径路径名往往是最简便的方法。 绝对路径名也称全路径名。使用pwd命令可以在屏幕上显示出当前工作目录的绝对路径名。

159 3.7.1 目录结构 (2)相对路径名:相对路径名利用当前工作目录的路径指定一个文件。为了访问你当前工作目录或任意子目录中的文件,可以使用相对路径名。 相对路径名不能以斜线“/”开头。 为了访问在当前工作目录中和当前工作目录之上的文件,可以在相对路径名中使用特殊目录名——点(.)和点点(..)。 在每个目录中都有..目录文件。 利用../的形式表示父目录可以连续使用,直至根目录。

160 3.7.1 目录结构 (3)正确使用路径名:在什么情况下使用绝对路径名,什么情况下使用相对路径名,取决于那种方式是否涉及到更少的目录,也就是往往有更少的键盘输入。 例如当前目录是/etc/conf/cf.d,需要访问系统口令文件/etc/passwd: 使用绝对路径名是/etc/passwd,使用相对路径名是../../passwd。 绝对路径名涉及目录只有2个,而相对路径名涉及的目录有3个,所以此时绝对路径名更有效。‘ 如果不清楚当前工作目录与其他目录的关系,最好使用绝对路径名。

161 3.7.2 创建和删除目录的命令 mkdir命令 mkdir命令用来创建目录。 一般格式:mkdir [选项] dirname
说明:该命令创建由dirname命名的目录。如果该目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。

162 3.7.2 创建和删除目录的命令 选项: -m 数字 对新建目录设置存取权限,存取权限用八进制数字表示。
-p 可一次建立多个目录,即如果为新建目录所指定的路径中有些父目录尚不存在,此选项可以自动建立它们。 注意:在创建文件时,不要把所有的文件都存放在你的主目录中,可以创建子目录,通过它们来有效地组织你的文件。

163 3.7.2 创建和删除目录的命令 最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。 在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含你所有的数据库文件;另一个子目录应包含你的电子表格文件;还有一个子目录应包含你的文字处理文档,等等。 目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一的指定一个目录。

164 3.7.2 创建和删除目录的命令 示例: 在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问:
$mkdir -m 700 /usr/meng/test 在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问: $mkdir -p -m 750 bin/os_1

165 数字法设定权限 我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。 u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

166 3.7.2 创建和删除目录的命令 删除目录 当目录不再被使用时或者磁盘空间已达到使用限定值,就需要从文件系统中删除失去使用价值的目录。
利用rmdir命令可以从一个目录中删除一个或多个空的子目录。 一般格式:rmdir [选项] dirname 说明:该命令从一个目录中删除一个或多个子目录,其中dirname表示目录名。如果dirname中没有指定路径,则删除当前目录下由dirname指定的目录;如果dirname中包含路径,则删除指定位置的目录。删除目录时也必须具有对其父目录的写权限。

167 3.7.2 创建和删除目录的命令 选项: -p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果有非空的目录,则该目录保留下来。 注意:子目录被删除之前应该是空目录。即该目录中的所有文件必须用rm命令全部删除。如果该目录中仍有其他文件,那么就不能用rmdir命令删除。 另外,你当前的工作目录必须在被删除目录之上,不能是被删除目录本身,也不能是被删除目录的子目录。

168 3.7.2 创建和删除目录的命令 虽然还可以用选项-r的rm命令递归的删除一个目录中的所有文件和该目录本身,但是这样做存在很大的危险性。
示例: 删除子目录os_1和其父目录bin: $cd /usr/meng/test $rmdir -p bin/os_1

169 3.7.3 改变工作目录和显示目录内容的命令 cd命令 cd命令用来改变工作目录。 一般格式:cd [dirname]
说明:如果想访问另外一个目录下的若干文件,比如你的子目录下的文件,往往更简单的方法是:把你的当前目录改到那个目录上去,然后从新的工作目录出发去访问那些文件。请注意,你可以把工作目录改到你的个人目录以外的目录上。

170 3.7.3 改变工作目录和显示目录内容的命令 使用cd命令可以改变当前工作目录,它带有唯一的一个参数,即表示目标目录的路径名(相对路径或绝对路径)。 利用..形式可以把工作目录向上移动两级目录:cd ../.. 为了从系统中的任何地方返回到你的主目录,可以使用不带任何参数的cd命令。 如果你给cd命令提供的参数是普通文件名或是一个不存在的目录,或者是你无权使用的一个目录,那么系统将显示一个出错信息。

171 3.7.3 改变工作目录和显示目录内容的命令 示例: 将当前目录改到/usr/liu: $cd /usr/liu
将当前目录改到用户的主目录: $cd 将当前目录向上移动一级: $cd ..

172 3.7.3 改变工作目录和显示目录内容的命令 pwd命令 pwd命令显示出当前工作目录的绝对路径。 一般格式:pwd

173 3.7.3 改变工作目录和显示目录内容的命令 ls命令 ls命令列出指定目录的内容。 一般格式:ls [选项] [目录或文件]
说明:如果给出的参数是目录,该命令将列出其中所有子目录与文件的信息;如果给出的参数是文件,将列出有关该文件属性的一些信息。默认情况下,输出条目按字母顺序排列。如果没有给出参数,将显示当前目录下所有子目录和文件的信息。

174 3.7.3 改变工作目录和显示目录内容的命令 选项: -a 显示指定目录下所有子目录和文件,包括隐藏文件。
-b 当文件名中包含不可显示的字符时,则用/ddd(三位八进制数)形式显示该字符。 -c 按文件的修改时间排序。 -C 分成多列显示各项。 -d 如果参数是目录,则只显示它的名字。往往与-l选项一起使用以得到目录的详细信息。

175 3.7.3 改变工作目录和显示目录内容的命令 -F 在列出的文件名后面加上不同的符号,以区分不同类型的文件。可以附加的符号有: / 表示目录
* 表示可执行文件 @ 表示符号链接文件 | 表示管道文件 = 表示socket文件 -i 在输出的第一列显示文件的I节点号。 -l 以长格式显示文件的详细信息。输出的信息分成多列,它们依次是“ 文件类型与权限、链接数、文件主、文件组、文件大小、建立或最近修改的时间、文件名”。例如: -rw-r--r mengqc group Jul csh1

176 3.7.3 改变工作目录和显示目录内容的命令 表示文件类型的字符有: - 普通文件 d目录 b块设备文件 c字符设备文件 l 符号链接文件
在表示文件类型之后有9个字符,用来表示文件的存取权限。各权限用以下字符表示:

177 3.7.3 改变工作目录和显示目录内容的命令 r 读 w 写 x 执行,对于目录表示可访问
s 当文件被执行时,把该文件的UID或GID赋予进程的UID或GID。 t 设置了粘着标志位。若该文件是目录,在该目录中的文件只能被超级用户、文件主删除。若它是可执行的文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快的装入该文件。- 表示没有设置权限。 对于符号链接文件,在最后“文件名”字段显示的形式是:符号链接文件名->目标文件的路径名

178 3.7.3 改变工作目录和显示目录内容的命令 对于设备文件,其“文件大小”字段显示的信息是设备的主、次设备号。
在列表的第一行给出了该目录的总块数,其中包含了间接块。 -L 如果指定的名称是一个符号链接文件,则显示链接所指向的文件。 -m 输出按字符流格式,文件跨页显示,以逗号隔开。 -n 输出格式与-l选项相同,只是在输出中文件主和文件组使用相应的UID号和GID号来表示,而不是实际的名称。

179 3.7.3 改变工作目录和显示目录内容的命令 -o 与-l选项相同,只是不显示组用户信息。
-p -q 将文件名中的不可显示字符用?代替。 -r 按逆序显示ls命令的输出结果。默认时,ls命令以文件名的字典顺序排列。如果指定按时间属性排序,则最近建立的文件排在前面,而时间最久的排在后面。 -R 递归地显示指定目录的各个子目录中的文件。 --color=never     :不要显示颜色 --color=always    :均显示颜色 --color=auto      :由系统自行判断

180 3.7.3 改变工作目录和显示目录内容的命令 -s 给出每个目录项所用的块数,包括间接块。
-t 按修改时间的新旧排序,最新的优先。当两个文件的修改时间相同时,则按文件名的字典顺序排序。该选项可以与选项-c或-u一起使用,这时的排序取决于-c或-u选项。默认时使用-c。 -u 按文件最近一次的存取时间排序,最近者优先。这时的ls -l命令列出的将是文件最近一次的存取时间。 -x 按行显示出各排序项的信息。

181 3.7.3 改变工作目录和显示目录内容的命令 示例: 列出当前目录的内容,并标出文件的属性: $ls -F
按多列形式列出目录/usr/meng的内容: $ls -C /usr/meng 以长列表格式列出当前目录的内容,包括隐藏文件和它们的I节点号。 $ls -lai

182 3.7.4 链接文件的命令 Linux具有为一个文件取多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样你只要对一个目录下的该文件修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给他们指定不同的存取权限,以控制对信息的共享和增强安全性。 文件链接有两种形式:硬链接和符号链接。

183 3.7.4 链接文件的命令 硬链接 建立硬链接时,是在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。见教材P63 创建硬链接后,已经存在的文件的I节点号会被多个目录文件项使用。 一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为1。

184 3.7.4 链接文件的命令 默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会物理地从文件系统删除。 对硬链接有如下限制: (1)不能对目录文件作硬链接。 (2)不能在不同的文件系统之间作硬链接,即链接文件和被链接文件必须位于同一个文件系统中。

185 3.7.4 链接文件的命令 符号链接 符号链接也称为软链接。是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名,另一个文件是实际包含所有数据的文件。所有读写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。 与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同I节点号;而硬链接并没有建立新文件。

186 3.7.4 链接文件的命令 符号链接没有硬链接的限制,可以对目录文件作符号链接,也可以在不同文件系统之间作符号链接。
用ln -s命令建立符号链接时,最好源文件用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,若当前工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。 符号链接保持了链接与源文件或目录之间的区别: (1)删除源文件或目录,只删除了数据,不删除链接。一旦以同样文件名创建了源文件,链接将继续只向该文件的新数据。

187 3.7.4 链接文件的命令 (2)在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。
(3)符号链接的大小是其链接文件的路径名中的字节数。 (4)当用ls -l命令列出文件时,可以看到符号链接名后有一个箭头指向源文件或目录,例如:lrwxrwxrwx … 14 Jun 20 10:20 /etc/motd->/orginal_file 其中表示“文件大小”的数字“14”恰好说明源文件名由14个字符构成。

188 3.7.4 链接文件的命令 ln命令 ln命令用来创建链接。 一般格式:ln [选项] 源文件 [目标文件]
说明:链接的对象可以是文件,也可以是目录。如果链接文件指向目录,用户就可以利用该链接直接进入被链接的目录而不用给出到达该目录的一长串路径。即使删除这个链接,也不会破坏原来的目录。 选项: -s 建立符号链接,而不是硬链接。 注意:符号链接文件不是一个独立的文件,它的许多属性依赖与源文件,所以给一个符号链接文件设置存取权限是没有意义的。

189 3.7.4 链接文件的命令 示例: 将目录/usr/mengqc/mub1下的文件m2.c链接到目录/usr/liu下的文件a2.c。
$ln mub1/m2.c /usr/liu/a2.c 在执行ln命令之前,目录/usr/liu中不存在a2.c文件。执行ln之后,在/usr/liu目录中才有a2.c这一项,表明m2.c和a2.c链接起来,利用ls -l命令可看到链接数的变化。

190 3.7.4 链接文件的命令 在目录/usr/liu下建立一个符号链接abc,使它指向目录/usr/mengqc/mub1:
$ln -s /usr/mengqc/mub1 /usr/liu/abc 执行该命令后,/usr/mengqc/mub1代表的路径将存放在名为/usr/liu/abc的文件中。 [注意]在你的 /usr/liu底下的 abc 这个目录中的所有文件其实都是 /usr/mengqc/mub1里面的东西,所以你如果进入 /usr/liu/abc內删除文件的话,等于是将 /usr/mengqc/mub1 內的文件删除了。

191 3.7.5 改变文件或目录存取权限的命令 使用文件命令对文件进行操作的前提是拥有相应的权限,下面将介绍如何控制这些权限。 1.用户和权限
改变文件或目录存取权限的命令 使用文件命令对文件进行操作的前提是拥有相应的权限,下面将介绍如何控制这些权限。 1.用户和权限 (1)文件主:Linux为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主唯一的注册名。对文件的控制取决于文件主或超级用户。 文件或目录的创建者对创建的文件或目录拥有特别使用权, 文件的所有关系是可以改变的,你可以将文件或目录的所有权转让给其他用户,但只有文件主或root才有权改变文件的所有关系。 文件的所有权标志是用户ID(UID)。

192 改变文件或目录存取权限的命令 chown命令更改某个文件或目录的所有权。例如:超级用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,超级用户应该把这个文件的属主设为xu,否则用户xu无法存取这个文件。 如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。 系统管理员经常使用chown命令,在将文件拷贝到另一个用户的目录下以后,让用户拥有使用该文件的权限。

193 3.7.5 改变文件或目录存取权限的命令 (2)用户组:Linux下,每个文件又同时属于某个用户组。
改变文件或目录存取权限的命令 (2)用户组:Linux下,每个文件又同时属于某个用户组。 当创建一个文件或目录时,系统会赋予它一个用户组关系,用户组的所有成员都可以使用此文件或目录。 文件用户组关系的标志是GID。 文件的GID只能由文件主或超级用户来修改。 chgrp命令可以改变文件的GID。

194 改变文件或目录存取权限的命令 (3)存取权限:Linux系统中的每个文件和目录都有存取许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。 Linux系统中规定了4种不同类型的用户: 文件主(owner)。 同组用户(group)。 可以访问系统的其他用户(others)。 超级用户(root),具有管理系统的特权。 存取权限规定3种访问文件或目录的方式: 读(r)、写(w)、可执行或查找(x)。 当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的存取权限。见教材P65。

195 改变文件或目录存取权限的命令 (4)文件存取权限:读权限表示只允许指定用户读取相应文件的内容,而禁止对它做任何的更改操作。将所访问的文件的内容作为输入的命令都需要有读的权限,如cat、more、cp等。 写权限表示只允许指定用户打开并修改文件,如命令vi、cp等。 执行权限表示允许指定用户将该文件作为一个程序执行。

196 3.7.5 改变文件或目录存取权限的命令 (5)目录存取权限:在ls命令后加上-d选项,可以了解目录文件的使用权限。
改变文件或目录存取权限的命令 (5)目录存取权限:在ls命令后加上-d选项,可以了解目录文件的使用权限。 读权限表示可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许shell使用文件扩展名字符列出相匹配的文件名。 写权限表示允许你从目录中删除或添加新的文件,通常只有目录主才有写权限。 执行权限表示允许你在目录中查找,并能用cd命令将工作目录改到该目录。

197 3.7.5 改变文件或目录存取权限的命令 2.chmod命令 chmod命令用于改变或设置文件或目录的存取权限。
改变文件或目录存取权限的命令 2.chmod命令 chmod命令用于改变或设置文件或目录的存取权限。 只有文件主或超级用户才有权用chmod命令改变文件或目录的存取权限。 根据表示权限的方式不同,该命令有两种用法:以符号模式改变权限和以绝对方式改变权限。 (1)以符号模式改变权限。 一般格式:chmod key 文件名 说明:key由以下各项组成: [who] [操作符号] [mode]

198 3.7.5 改变文件或目录存取权限的命令 其中,操作对象who可以是下述字母中的任意个或者它们的组合:
改变文件或目录存取权限的命令 其中,操作对象who可以是下述字母中的任意个或者它们的组合: u 表示用户user,即文件或目录的所有者。 g 表示同组group用户,即与文件属主有相同组ID的所有用户。 o 表示其他others用户。 a 表示所有all用户。它是系统默认值。 操作符号可以是: + 添加某个权限 - 取消某个权限 = 赋予给定权限并取消其他所有权限

199 3.7.5 改变文件或目录存取权限的命令 mode 所表示的权限可用下述字母的任意组合 r 可读 w 可写 x 可执行
改变文件或目录存取权限的命令 mode 所表示的权限可用下述字母的任意组合 r 可读 w 可写 x 可执行 X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x(可执行)属性。 s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式u+s设置文件的用户ID位,g+s设置组ID位。 t 保存程序的文本到交换设备上 u 与文件属主拥有一样的权限 g 与和文件属主同组的用户拥有一样的权限 o 与其他用户拥有一样的权限。

200 3.7.5 改变文件或目录存取权限的命令 示例: 将文件ex1的权限改为所有用户都有执行权限: $chmod a+x ex1
改变文件或目录存取权限的命令 示例: 将文件ex1的权限改为所有用户都有执行权限: $chmod a+x ex1 将文件ex1的权限重新设置为文件主可以读和执行,组用户可以执行,其他用户无权访问。 $chmod u=r,ug=x ex1

201 3.7.5 改变文件或目录存取权限的命令 (2)以绝对方式改变权限 一般格式:chmod mode 文件名
改变文件或目录存取权限的命令 (2)以绝对方式改变权限 一般格式:chmod mode 文件名 说明:用绝对方式设置或改变文件的存取权限就是用数字1和0表示9个权限位,置为1表示有相应权限,置为0表示没有相应权限。例如,某个文件的存取权限是,文件主有读、写和执行的权限,组用户有读和执行的权限,其他用户仅有读的权限。用符号模式表示是rwxr-xr--,用二进制数字表示是 。

202 改变文件或目录存取权限的命令 为了记忆和表示方便,通常将这9位二进制数用等价的3个从0到7的八进制数表示,即从右到左,3个二进制数换成一个八进制数。这样,上述二进制数就等价于八进制数754。 就是说,mode是以3位八进制数字出现的,第一位表示文件主权限,第二位表示组用户权限,第三位表示其他用户权限。 示例: 使文件ex1的文件主和同组用户具有读写权限,但其他用户只可读: $chmod 664 ex1 练习见教材P67。

203 3.7.5 改变文件或目录存取权限的命令 2.umask命令 umask命令用来设置限制新建文件权限的掩码。 一般格式:umask mode
改变文件或目录存取权限的命令 2.umask命令 umask命令用来设置限制新建文件权限的掩码。 一般格式:umask mode 说明:当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码mode来限制文件的权限。用户可以通过再次执行umask来改变默认值,新的权限将会把旧的覆盖掉。

204 改变文件或目录存取权限的命令 利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消: umask u=,g=w,o=rwx 执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。 注意:操作符=在umask命令和chmod命令中的作用恰恰相反。在chmod中利用它来设置指定的权限,而其余权限则被删除;但在umask命令中,它将在原有权限的基础上删除指定的权限。

205 改变文件或目录存取权限的命令 也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755;如果该文件原来的初始化权限是666,那么该文件的权限将变为644。 可以使用下面的命令检查新创建文件的默认权限: umask -s 选项-s表示以字符形式显示当前的掩码。 如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是022。

206 3.7.6 改变用户组和文件主的命令 1.chgrp命令 chgrp命令用来改变文件或目录所属的用户组。
说明:该命令用来改变指定文件所属的用户组。其中组名可以使用户组的ID,也可以是用户组的组名。文件名可以是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户,则不能改变该文件的组。

207 3.7.6 改变用户组和文件主的命令 选项: -R 递归的改变指定目录及其下面的所有子目录和文件的用户组。 示例:
将/usr/mengqc及其子目录下的所有文件的用户组改为mengxin: $chgrp -R mengxin /usr/mengqc

208 3.7.6 改变用户组和文件主的命令 2.chown命令 chown命令改变某个文件或目录的所有者和所属的组。
说明:该命令可以向某个用户授权,使它变成文件的所有者或者改变文件所属的组。用户可以是用户名或用户ID。文件名可以是由空格分开的文件列表,在文件名中可以包含通配符。

209 3.7.6 改变用户组和文件主的命令 选项: -R 递归式地改变指定目录及其所有子目录、文件的文件主。 -v 详细列出该命令所作的工作。
注意:只有文件主和超级用户才可以使用该命令。 示例:将目录/usr/mengqc及其下面的所有文件、子目录的文件主改成liu: $chown -R liu /usr/mengqc

210 3.7.6 改变用户组和文件主的命令 例如你 copy 一个档案给 vbird ,但是因为你的身份是 root ,所以你 copy 过去的档案 vbird 可能不能使用,因此你需要将档案的拥有人改成 vbird 才可以!如下: cp .bashrc /home/vbird /home/vbird vbird]# chown vbird .bashrc 那如果想要将整个目录下的档案都改变拥有者与拥有群组呢?可以下达 chown  -R  username:groupname  directory  (ex> chown -R root:root /root)

211 3.8 文件压缩命令 为了数据的安全,用户经常需要对计算机系统中的数据进行备份,例如保存在磁带或软盘上。如果直接保存数据会占用很大空间,所以经常压缩备份文件,以便节省存储空间。另外,通过网络传输文件时也可以减少传输时间。以后需要利用存放在这些文件中的数据时,必须先将它们解压缩,恢复成原来的样子。

212 3.8.1 gzip命令 gzip命令用于对文件进行压缩和解压缩。 一般格式:gzip [选项] 压缩(解压缩)文件名
说明:gzip用LZ77编码减少命名文件的大小。通常,源代码和英文之类的文本能压缩60%~70%。被压缩文件的扩展名是.gz,并且保持原有的存取权限、访问与修改时间。如果不指定文件,或者文件名为“-”,则将标准输入为标准输出。 压缩文件可以用gzip -d恢复成原始形式。

213 3.8.1 gzip命令 选项: -c 将输出写到标准输出上,并保留原有文件。 -d 将被压缩的文件进行解压缩。
-l 对每个压缩文件,列出以下字段: compressed size:压缩文件的大小。 uncompressed size:未压缩文件的大小。 ratio:压缩比(未知时为0.0%) uncompressed_name:未压缩文件的名字。

214 3.8.1 gzip命令 -r 递归的查找指定目录并压缩(解压缩)其中的所有文件。 -t 测试,检查压缩文件的完整性。
-v 对每个压缩文件和解压缩文件,显示其文件名和压缩比 -num 用指定的数字num调整压缩速度,其中-1或--fast表示最快的压缩方法(低压缩比),-9或--best表示最慢的压缩方法(高压缩比)。系统默认值为-6。

215 3.8.1 gzip命令 示例: 把/usr/mengqc目录下的每个文件都压缩成.gz文件: $cd /usr/mengqc
把上面压缩的文件进行解压缩,并列出详细的信息: $gzip -dv * 详细列出上面每个压缩文件的信息,但是不执行解压缩: $gzip -l * 对/usr/mengqc目录下的文件进行快速压缩,并显示其压缩比: $gzip -v --fast *

216 3.8.2 unzip命令 在Linux系统中,unzip命令对WinZip各式的压缩文件进行解压缩。这种各式的压缩文件带有后缀.zip。
说明:对于在Linux系统中用zip命令得到的压缩文件和在MS Windows下利用压缩工具winzip压缩的文件,在Linux环境下可以用unzip命令解压缩。 选项: -x 文件列表——解压缩文件,但对文件列表中所指定的文件并不作解压缩。 -v 查看压缩文件中的内容,但不做解压缩。 -t 检查压缩文件的完整性。

217 3.8.2 unzip命令 -d 目录——把压缩文件解压缩后放到指定的目录中。 -z 只显示压缩文件的注释。 -n 不覆盖已经存在的文件。
-o 允许覆盖已经存在的文件。 -j 废除压缩文件原来的目录结构,将所有文件解压缩之后放到同一目录之下。 示例: 将压缩文件chapter1.zip在当前目录下解压缩: $unzip chapter1.zip 查看压缩文件目录,但不做解压缩: $unzip -v chapter1.zip

218 Compress命令 这是用来压缩及解压缩文件名为 .Z 的压缩文件。要注意的是,用 compress 压缩的时候,会将原文件杀掉而变成文件名为 .Z 的文件,例如你压缩一个名为 bird.test 的文件,则压缩完成后只会剩下 bird.test.Z 这个压缩文件!当然,解压缩的时候也是一样的,压缩文件不见了,只有剩下被解压缩的文件。

219 Tar命令 这是一个很棒的压缩指令,这个指令可以配合 gzip 来进行整个目录的压缩!例如有一个名为 bird 的目录要被你整合成一个文件,你可以使用:tar  -xvf  *.tar  *(其中 * 为你所要整合的目录名称)。 /root]# tar  -cvf  bird.tar  bird  <==只有将目录转成一个文件,没有压缩 /root]# tar  -zcvf  bird.tar.gz  bird <==压缩一整个目录成为 .tar.gz 文件

220 Tar命令 上面这个例子的 bird.tar 只是将 bird 这个目录整个拷贝成为一个文件而已,并没有压缩,而 bird.tar.gz 则是将 bird 这个目录压缩成为一个档案!基本上,我们都是使用 -zcvf 来压缩一整个目录的!而如果是要解压缩呢?由于有没有压缩所下的参数并不相同,所以针对两种档案也是有两种参数的组合: /root]# tar  -xvf  bird.tar /root]# tar  -zxvf  bird.tar.gz 【注意】,用 compress 及 gzip 压缩及解压缩的时候,会将原文件取代掉!而使用 tar 来压缩及解压缩的时候,原文件将会与产生文件同时存在!通常我们都是使用 tar 来进行压缩或解压缩的!(当然,你还是可以使用 compress 及 gzip 来压缩一个大的文件!)

221 3.9 联机帮助命令 Linux系统中有大量的命令,而且许多命令又有众多选项或参数,要想全部记住它们相当困难。对大多数用户来说,也没有必要这样做,但Linux系统提供了联机帮助手册,另用它可以方便的查看所有命令的完整说明,包括命令用法、各选项的意义以及相关命令等。

222 3.9.1 man命令 man命令格式化并显示某一命令的联机帮助手册页。 一般格式:man [选项] 命令名 说明:manual,“手册”。
联机手册中,常用的命令说明格式如下: Name 部分表示命令的名称和用法。 Synopsis 显示命令的语法格式。 Description 部分描述命令的详细用法及每个选项的功能。 Return Value 描述函数返回值的类型包括错误类型。 Example 部分给出命令执行方式的典型示例。 See Also 部分说明命令的其他方面或对命令的其他解释。 Warning 部分描述使用命令时可能会遇到的特殊问题。 Bugs 列出任何已知的缺点及隐含的错误。

223 3.9.1 man命令 通过man命令,可以显示系统中各个命令的用法。它将命令名称为参数。
如果你在命令行参数中制定了指定命令名称,该命令会显示关于这条命令的手册页。 如果没有指定命令名称,该命令会显示所有的手册页。 如果只想获得对系统某一部分使用的帮助,可以用适当的缩写形式指定你需要获得的某一方面的信息。如硬盘的缩写hd。

224 3.9.1 man命令 选项: -M 路径 指定查找man手册页的路径。 -P 命令 指定显示手册所使用的分页程序。
-S 章节 指定查找手册页的章节列表。详见P72。 -a 显示所有的手册页,而不是只显示第一处找到的。 -d 这个选项主要在检查时使用。如果用户加入了新的手册页,就可以用这个选项检查手册页的安装情况。 -D 既显示手册页内容,也显示检查信息。 -f 只显示出命令的功能而不显示其中详细地说明文件。 -w 不显示手册页,只显示将被格式化和显示的文件所在的位置。

225 3.9.2 help命令 help命令用来查看所有shell内置命令的帮助信息。 一般格式:help 命令
说明:shell是Linux的命令解释程序,它对接受的命令进行解释并予以执行。有些命令构造在shell内部,从而在shell环境内部执行。这种命令称为shell内置命令(也称为内部命令)。 用户可以利用shell命令来查看shell内置命令的用法。 如果help命令后面不带任何参数,则显示help命令的用法,列出shell的内置命令列表。 例如:$help cd

226 3.10 有关进程管理的命令 Linux是一个多用户多任务的操作系统。这意味着多个用户可以同时使用一个操作系统,而每个用户又可以同时运行多个命令。命令的执行是通过进程实现的。“进程”是Linux系统中一个重要的概念。本节就简要介绍进程的概念以及常用的进程管理命令。

227 进程的定义 简单的说,进程是一个程序或任务的执行过程。例如,在提示符后输入一个命令或可执行文件的名字,按下Enter键,就开始执行这个命令了。在操作系统中为了执行这个命令,往往要创建相应的进程。通过进程的活动来完成一个预定的任务。其实,在Linux中,通常执行任何一个命令都会创建一个或多个进程,即命令是通过进程实现的。当进程完成了预期的目标,自行中止时,该命令也就执行完了。不但用户可以创建进程,系统程序也可以创建进程。可以说,一个运行着的操作系统就是由许许多多的进程组成的。

228 进程的定义 通过键入程序名,便开始运行一个程序。也可以通过shell命令文件来运行程序。运行着的程序表现为一个或多个进程,它们与系统的许多部分进行交互作用。一个进程可以对文件进行访问,可以管理其在内存中的信息,也可以把信息发送到打印机、显示器或其他设备上。操作系统还会把某些信息附加在进程上,以便系统能跟踪和管理它们。

229 进程的定义 虽然进程是程序的执行过程,进程不能脱离程序而单独存在,但进程又与程序截然不同。进程的内涵比程序要多:一个程序只是一个静态的指令集,而进程却是动态的;进程间是并发的,而程序本身并没有并发性;进程是分配资源的单位,在运行过程中使用系统的资源,而系统并不以程序来分配资源。另外,一个程序可以启动多个进程,反过来一个进程在运行中会调用多个程序。

230 3.10.2 ps命令 ps命令用来查看当前系统中运行的进程的信息。 一般格式:ps [选项]

231 3.10.2 ps命令 选项: -a 显示系统中与tty相关的所有进程的信息。 -e 显示所有进程的信息。 -f 显示进程的所有信息。
-l 以长格式显示进程信息。 -r 只显示正在运行的进程。 -u显示面向用户的格式(包括用户名、CPU即内存使用情况等信息)。 -x 显示所有终端上的进程信息。

232 3.10.2 ps命令 示例: 列出每个与你的当前shell有关的进程的基本信息: $ps 显示系统中所有进程的全面信息: $ps -ef
显示所有终端上所有用户的有关进程的所有信息: $ps -aux

233 3.10.3 kill命令 kill命令用来终止一个进程的运行。 一般格式:kill [-s 信号|-p][-a] 进程号…
kill -l[信号] 说明:通常,终止一个前台进程可以使用Ctrl+C键;但是对于一个后台进程就需用kill命令来终止。kill命令是通过向进程发送指定的信号来结束相应进程。默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行杀掉该进程。

234 3.10.3 kill命令 选项: -s 指定需要发送的信号,既可以是信号名(如kill),也可以是对应信号的号码(如9)。
-p 指定kill命令只是显示进程的pid,并不真正发出结束信号。 -l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。

235 kill命令 注意事项: (1)kill命令可以带信号号码选项,也可以不。如果没有信号号码,kill命令就会发出终止信号,这个信号可以被进程捕获,使得进程在退出之前可以清理并释放资源。也可以用kill向进程发送特定的信号。例如:kill ,它的效果等同于在前台运行PID为123的进程时按下Ctrl+C键。但是,普通用户只能使用不带signal参数的kill命令或最多使用-9信号。

236 kill命令 (2)kill可以带有进程ID号作为参数。当用kill向这些进程发送信号时,你必须是这些进程的主人。如果试图撤销一个你没有权限撤销或不存在的进程,就会得到一个错误信息。 (3)可以向多个进程发信号或终止它们。 (4)当kill成功地发送了信号后,shell会在屏幕上显示出进程的终止信息。有时这个信息不会马上显示,只有当按下Enter键使shell的命令提示符再次出现时,才会显示出来。

237 kill命令 (5)应注意,信号使进程强行终止。这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已是采用kill信号(9),因为进程不能首先捕获它。 要撤销所有的后台作业,可以键入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来中止所有由当前shell启动的进程,是个有效的方法。

238 3.10.3 kill命令 示例: 一般可以用kill命令来终止一个已经挂死的进程或者一个陷入死循环的进程。首先执行以下命令:
$find / -name core -print>/dev/null 2>&1& 这是一条后台命令,执行时间较长。现在决定终止该进程。为此,运行ps命令来查看该进程对应的PID。例如,该进程对应的PID是1651,现在可用kill命令杀死这个进程: $kill 1651 再用ps命令查看进程状态时,就可以看到find进程已经不存在了。

239 3.10.4 sleep命令 sleep命令的功能是使进程暂停一段时间。 一般格式:sleep 时间值
说明:“时间值”参数以秒为单位,即让进程暂停有时间所指定的秒数。此命令大多用于shell程序设计中,使两条命令执行时间停顿指定的时间。 示例:下面的命令行使进程先暂停100秒,然后查看用户mengqc是否在系统中: $sleep 100;who | grep ‘mengqc’

240 3.11 软盘操作命令 fdformat命令

241 作业及练习 书面 P82 1、4、11、20 上机练习 2、3、5、7、8、9、10


Download ppt "第三章 Linux常用命令."

Similar presentations


Ads by Google