本节书摘来自异步社区《linux c编程从入门到精通》一书中的第1章,第1.4节,作者:宋磊 , 程钢著,更多章节内容可以访问云栖社区“异步社区”公众号查看
在shell中,用户需要通过使用适当的命令来完成相应的操作,本小节将介绍linux中的部分常用命令。
1.4.1 文件操作命令
文件操作是linux系统里最基本也是最常用的操作,本节列举了linux中经常执行的一些普通文件操作命令。
1.显示文件列表
显示指定工作目录中所包含内容的命令是ls。要说明的是,ls命令列出的是文件的名字,而不是文件的内容。该命令的使用方式如下。
<code>ls [选项] [文件目录列表]</code>
ls命令中的常用选项如表1.2所示。
由于linux支持多种文件类型,每一类用一个字符来表示,具体说明如表1.3所示。
文件类型后的字符表示文件的权限,权限由3个字符串组成,这3个字符串分别表示该文件所有者的权限、组中其他人的权限和系统中其他人的权限。每个字符串又由3个字符组成,依次表示对文件的读(用字符r表示)、写(用字符w表示)和执行(用字符x表示)权限。当用户没有相应的权限时,该权限的对应位置用短线“-”来表示。 例如:
<code>drwxr-x---</code>
表示的含义是:d表示该文件是目录;目录拥有者的权限是rwx(表示有读、写和执行权限);组中其他人对该目录的权限是r-x(表示有读和执行权限,没有写权限),系统中其他人对该目录的权限是---(表示读、写和执行权限都没有)。
【例1.3】是一个使用“ls”命令来显示当前根目录下文件列表的应用实例。
【例1.3】ls查看文件列表应用实例。
【例1.4】是一个使用“ls”命令查看非当前目录下文件列表的应用实例。
【例1.4】ls查看非当前目录下文件列表。
【例1.5】是一个用长格式查看根目录下usr子目录下的内容的应用实例。
【例1.5】ls长格式查看应用实例。
用长格式查看目录内容时,每行表示一个文件或目录的信息。每行信息依次为文件类型与权限、连接数、文件属主、文件属组、文件大小、建立或最近修改的时间、名字。
查找文件
在linux系统中,可以使用find命令来查找文件,标准使用格式如下。
find [目录列表] [匹配标准]
find命令有两个参数,即目录列表和匹配标准,其说明如下。
目录列表:希望查询文件或文件集的目录列表,目录间用空格分隔。
匹配标准:希望查询的文件的匹配标准或说明,详细的说明如表1.4所示。
【例1.6】是在目录“home/alloeat/chapter4exam/”中查找exam5lseek.c文件,命令及响应如下所示。
【例1.6】find查找特定文件的应用实例。
当要查找某个文件而不知道该文件的全名时,只要知道这个文件包含的若干字母,就可以用查找命令以及通配符进行查找。
【例1.7】是一个在/dev目录下,查找包含“usb”字符串的文件的应用实例。
【例1.7】find查找包含特定字符串文件应用实例。
3.显示文本文件内容
显示文本文件内容的命令是cat命令,用来将文件的内容显示到终端上。该命令的使用方式如下。
cat [选项] 文件列表
cat命令中的选项详细说明如表1.5所示。
【例1.8】是使用cat命令来显示c语言文件exam5lseek.c的应用实例,在每一行之前加上了行编号。
【例1.8】cat命令显示文件内容应用实例。
cat命令还可以用于将两个文件连接到一起,并将结果放到另外一个文件中去。【例1.9】给出了一个将一个c语言文件和一个文本文件连接起来将其内容存放到一个新的文本文件中去的实例。
【例1.9】用cat连接文件应用实例。
查找文件内容
查找文件内容的命令是grep命令。该命令的使用方式如下。
<code>grep [选项] [查找模式] [文件名1,文件名2,……]</code>
grep命令选项的说明如表1.6所示。
【例1.10】是在【例1.6】所给出的c语言文件中查找printf字符串的实例。
【例1.10】grep查找字符串应用实例。
5.排序
sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被看作是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。该命令的使用方式如下。
<code>sort [选项] 文件</code>
sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。
sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。默认情况下以整行为关键字,按ascii字符顺序进行排序。
sort命令中的选项说明如表1.7所示。
【例1.11】是一个使用sort命令对文件中各行进行排序后输出的应用实例。
【例1.11】使用sort命令文件排序输出应用实例。
6.比较有序文件
如果想对两个有序的文件进行比较,可以使用comm命令。该命令的使用方式如下。
<code>comm [-123 ] file1 file2</code>
comm命令是对两个已经排好序的文件进行比较。其中file1和file2是已排序的文件。comm读取这两个文件,然后生成3列输出:仅在file1中出现的行;仅在file2中出现的行;在两个文件中都存在的行。如果文件名用“-””,则表示从标准输入读取。选项 1、2 或 3 不显示相应的列。例如:
comm -12:只显示在两个文件中都存在的行。
comm -23:只显示在第一个文件中出现而未在第二个文件中出现的行。
comm -123:则什么也不显示。
7.文件内容比较
diff命令的功能为逐行比较两个文本文件,列出其不同之处。它对给出的文件进行系统的检查,并显示出两个文件中所有不同的行,不要求事先对文件进行排序。该命令的使用方式如下。
<code>diff [选项] file1 file2</code>
diff命令告诉用户,为了使两个文件file1和file2一致,需要修改它们的哪些行。如果用 “- ”表示 file1或 file2,则表示标准输入。如果file1或file2是目录,那么diff将使用该目录中的同名文件进行比较。通常,输出由下述形式的行组成。
字母(a、d和c)之前的行号(n1,n2)是针对file1 的,其后面的行号(n3,n4)是针对 file2 的。字母 a、d 和 c 分别表示附加、删除和修改操作。
在上述形式的每一行的后面跟随受到影响的若干行,以 “<” 开头的行属于第一个文件,以 “>” 开头的行属于第二个文件。
diff 能区别块、字符设备文件以及管道文件(fifo),diff不会把它们与普通文件进行比较。
如果 file1 和 file2 都是目录,则 diff 会产生很多信息。如果一个目录中只有一个文件,则产生一条信息,指出该目录路径名和其中的文件名。
diff命令的选项说明如表1.8所示。
注意:diff命令常常用于对比文件经过修改前后的异同。
8.文件复制命令
linux中的cp命令用于复制文件或目录,该命令是最重要的文件操作命令,该命令的使用方式如下。
<code>cp [选项] 源文件或目录 目标文件或目录</code>
cp命令把指定的单个源文件复制到目标文件,或把多个源文件复制到目标目录中。
cp命令的选项说明如表1.9所示。
注意:如果指定的目标文件名是一个已存在的文件名时,用 cp 命令复制文件后,这个文件就会被新复制的源文件覆盖。因此,为防止用户在不经意的情况下用cp命令破坏另一个文件,在使用 cp 命令复制文件时,最好使用-i选项。
9.移动和重命名文件
在linux系统中,移动文件可使用mv命令。mv命令还可修改文件名,即把源文件以一个新文件名移动到另一个新的目录中去。该命令的使用方式如下。
mv命令的选项说明如表1.10所示。
10.文件内容统计
wc命令的功能为统计指定文件中的字节数、字数和行数, 并将统计结果显示输出。该命令使用方式如下。
<code>wc [选项] 文件列表</code>
wc命令统计给定文件中的字节数、字数和行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所有指定文件的总统计数。字是由空格字符分开的最大字符串。
wc命令的选项说明如表1.11所示。
【例1.12】是一个使用wc命令来统计c语言文件信息的应用实例。
【例1.12】使用wc命令统计文件信息应用实例。
1.4.2 目录操作命令
linux系统以文件目录的方式来组织和管理系统中的所有文件。所谓文件目录就是将所有文件的说明信息采用树型结构组织起来,即常说的目录。
linux的目录结构等相关知识将在第4章中进行详细介绍,本小节将介绍对目录进行操作的命令。
1.创建目录
在linux系统中建立新目录的命令是mkdir。该命令的使用方式如下。
<code>mkdir [选项] 目录</code>
mkdir命令的选项说明如表1.12所示。
【例1.13】是一个使用mkdir命令在当前目录中建立一个dir3目录,并且将其权限设置为只有文件拥有者才能读写和执行的应用实例。
【例1.13】使用mkdir命令创建目录应用实例。
2.删除目录
与创建目录对应的是删除目录,rmdir 命令用来删除目录。一般情况下要删除的目录必须为空目录,如果所给的目录不为空,系统会报告错误。该命令的使用方式如下。
<code>rmdir [选项] 目录列表</code>
rmdir命令的选项说明如表1.13所示。
3.显示当前工作目录
显示当前工作目录的命令是pwd命令,该命令的使用方式如下。
<code>pwd</code>
【例1.14】是一个使用pwd命令来显示当前工作目录的应用实例。
【例1.14】使用pwd命令显示当前工作目录应用实例。
4.改变当前工作目录
在linux系统中使用cd命令改变当前工作目录。该命令的使用方式如下。
<code>cd [directory]</code>
该命令将当前目录改变至directory所指定的目录。若没有指定directory,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。该命令可以使用通配符。
【例1.15】是一个使用cd命令在多个目录路径下切换的应用实例。
【例1.15】使用cd命令切换目录路径应用实例。
5.链接文件的命令
链接文件的命令是ln命令,该命令在文件之间创建链接。这种操作实际上是给系统中已有的某个文件指定另外一个可用于访问它的名称。对于这个新的文件名,可以为之指定不同的访问权限,以控制对信息的共享和安全性的问题。如果链接指向目录,用户就可以利用该链接直接进入被链接的目录,而不用输入一长串的路径名。而且,即使删除这个链接,也不会破坏原来的目录。该命令的使用方式如下。
<code>ln [选项] 源文件或目录 [链接名]</code>
ln命令的选项说明如表1.14所示。
链接有两种,一种被称为硬链接(hard link),另一种被称为符号链接(symbolic link)。硬链接的意思是一个文件可以有多个名称。而符号链接的方式则是产生一个特殊的文件,该文件的内容是指向另一个文件的位置。建立硬链接时,链接文件和被链接文件必须位于同一个文件系统中,并且不能建立指向目录的硬链接。而对符号链接,则不存在这个问题。默认情况下,ln产生硬链接。
注意:linux的链接类似于windows中的快捷方式。
6.改变文件或目录权限
在linux系统中,用户设定文件权限,控制其他用户不能访问、修改文件。但在系统应用中,有时需要让其他用户使用某个原来其不能访问的文件或目录,这时就需要重新设置文件的权限,使用的命令是chmod命令。并不是谁都可改变文件和目录的访问权限,只有文件和目录的所有者才有权限修改其权限,另外超级用户可对所有文件或目录进行权限设置。该命令的使用方式如下。
<code>chmod [who] [+ | - | =] [mode] 文件名</code>
chmod命令中的操作对象who可是表1.15中的任何一个选项或者它们的组合。
chmod函数的操作符号说明如表1.16所示。
mode 所表示的权限可以是表1.17中字母的任意组合。
表1.17 chmod 命令mode选项说明
文件和目录的权限还可用八进制数字模式来表示。首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限, 2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。例如,如果想让某个文件的属主有读,写两种权限,需要把4(可读)+2(可写)=6(读/写)。
数字设定法的一般形式如下。
<code>chmod [mod] 文件名</code>
【例1.16】是一个使用chmod命令来修改文件chmodtest.txt的权限的实例。
【例1.16】使用chmod命令修改文件权限应用实例。
设定文件chmodtest.txt的属性为:文件属主(u)增加执行权限,与文件属主同组用户(g)和其他用户(o)增加读权限。
7.改变文件或目录的属主和属组
chown命令用来更改某个文件或目录的属主和属组。这个命令也很常用。例如,root用户把自己的一个文件拷贝给用户alloeat,为了让用户alloeat能够存取这个文件,root用户应该把这个文件的属主设为alloeat。否则,用户alloeat无法存取这个文件。该命令的使用方式如下。
<code>chown [选项] 用户或组 文件</code>
chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户id。组可以是组名或组id。文件是以空格分开的要改变权限的文件列表,支持通配符。chown命令的选项说明如表1.18所示。
1.4.3 其他常用命令
在linux的实际使用中,通常还会涉及一些其他的命令,本小节对这些命令进行简要的介绍。
1.帮助命令
对于绝大部分linux终端用户和c语言程序员而言,经常需要查询一些命令或者函数具体使用方法,此时可以使用linux自带的man帮助命令。
只要在命令man后,输入想要获取帮助的命令的名称(例如ls),man就会列出一份完整的说明,其内容包括命令语法、各选项的意义以及相关命令等。该命令使用方式如下。
<code>man [选项] 命令名称</code>
man命令的常用选项说明如表1.19所示。
【例1.17】是使用man命令显示“ls”命令和“exit”函数使用方法的部分内容。
【例1.17】man帮助命令应用实例。
以下为exit函数的帮助手册。
注意:在man的帮助页面上,可以使用“q”快捷键退出帮助页,可以使用向上翻页、向下翻页等快捷键进行翻页。man命令对于c语言程序员而言相当重要,读者应该重视并且经常使用这个命令。
2.shell帮助命令
help命令用于查看所有shell命令。用户可以通过该命令寻找shell命令的用法,只需在所查找的命令后输入help命令,就可以看到所查命令的内容了。例如,输入cd –help便可查看cd命令的使用方法。
info命令用来获取相关命令的详细使用方法,例如,info ls可以获取如何使用ls的详细信息。
【例1.18】是在ubuntu 12.04发行版自带shell中使用help命令的实例。
【例1.18】help命令应用实例。
3.文件查找命令
和find命令不同,whereis命令用来定位可执行文件、源代码文件、帮助文件在文件系统中的位置。例如,最常用的ls命令在/bin目录中。如果希望知道某个命令在哪一个目录中,可以用whereis命令来查询。该命令的使用方式如下。
<code>whereis [选项] 命令名</code>
whereis命令的常用选项说明如表1.20所示。
【例1.19】是一个使用whereis命令来查找“ls”命令位置的应用实例。
【例1.19】whereis查找命令应用实例。
4.切换当前用户命令
linux是一种多用户操作系统,如果所有用户共享一个账号,会造成许多麻烦。因此在linux中每个用户都有自己的账号,各个用户的账号可以根据需要分配不同的权限。linux提供了与之相关的用户操作命令。
su命令用来切换用户身份,该命令的使用方式如下。
<code>su [选项] user</code>
除root外,其他用户切换身份时,需输入密码。su命令的常用选项说明如表1.21所示。
sudo命令用来以系统管理员的身份执行指令,该命令的使用方式如下。
<code>sudo [选项] 命令</code>
以系统管理者的身份执行指令,也就是说,经由sudo所执行的指令就好像是 root 亲自执行。sudo命令的常用选项说明如表1.22所示。
【例1.20】是一个使用sudo命令来切换当前用户的实例。
【例1.20】使用sudo命令切换当前用户的应用实例。
5.关机和重启命令
由于linux是多用户、多任务的操作系统,因此在切断计算机电源之前,必须先关闭linux系统。决不能不执行关机进程就切断计算机电源,这样做会导致保存在内存缓冲区的磁盘数据来不及写回磁盘,从而破坏文件系统。本节介绍一下与关机和重启计算机有关的命令。
shutdown 命令可以安全地关闭或重启linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据 同步工作。该命令使用方式如下。
<code><a>shutdown</a></code>
[选项] [时间] [警告信息]
shutdown命令的常用选项说明如表1.23所示。
halt 是最简单的关机命令,其实际上是调用shutdown -h 命令。执行halt时,杀死应用进程,文件系统写操作完成后就会停止内核。该命令的使用方式如下。
<code>halt [选项]</code>
halt命令的常用选项说明如表1.24所示。
注意:halt命令同样需要超级用户权限。
reboot命令用来重新启动计算机。该命令的使用方式如下。
<code>reboot [选项]</code>
reboot命令的常用选项说明如表1.25所示