Linux命令行大全(txt+pdf+epub+mobi电子书下载)


发布时间:2020-05-28 08:58:31

点击下载

作者:[美]William E. Shotts, Jr 著

出版社:人民邮电出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

Linux命令行大全

Linux命令行大全试读:

版权信息COPYRIGHT INFORMATION书名:Linux命令行大全作者:[美]William E. Shotts, Jr 著排版:Cicy出版社:人民邮电出版社出版时间:2013-03-01ISBN:9787115307453本书由人民邮电出版社授权北京当当科文电子商务有限公司制作与发行。— · 版权所有 侵权必究 · —▶▶第一部分学习shell第1章 shell是什么

当谈到命令行时,我们实际上指的是shell。shell是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序。几乎所有的Linux发行版都提供shell程序,该程序来自于称之为bash的GNU项目。bash是Bourne Again Shell的首字母缩写,Bourne Again Shell基于这样一个事实,即bash是sh的增强版本,而sh是最初的UNIX shell程序,由Steve Bourne编写。1.1 终端仿真器

当使用图形用户界面时,需要另一种叫做终端仿真器(terminal emulator)的程序与shell进行交互。如果我们仔细查看桌面菜单,那么很可能会找到一款终端仿真器。在 KDE 环境下使用的是 konsole,而在 GNOME 环境下使用的是gnome-terminal,但是在桌面菜单上很可能将它们简单地统称为终端。在 Linux系统中,还有许多其他的终端仿真器可以使用,但是它们基本上都做同样的事情:让用户访问 shell。因为不同的终端仿真器所具有的功能特性不尽相同,因此,你可以根据自己的喜好进行选择。1.2 第一次键盘输入

现在开始吧。启动终端仿真器!运行后的终端仿真器如下所示。[me@linuxbox ~]$

这称为shell提示符,只要shell准备接受外部输入,它就会出现。在不同的发行版中,提示符的外观可能会有所差异,但是,它通常包括username@machinename,其后是当前工作目录(长度更长一些)和一个$符号。

如果shell提示符的最后一个字符是#,而不是一个$符号,那么终端会话将享有超级用户特权。这就意味着要么我们是以根用户身份登录,要么我们选择的终端仿真器可以提供超级用户(管理)特权。

假定一切工作都很顺利,接下来尝试输入一些内容。在提示符后输入一些乱码,如下所示。[me@linuxbox ~]$ kaekfjaeifj

由于这些命令没有任何意义,shell会让我们重新输入。bash: kaekfjaeifj: command not found[me@linuxbox ~]$

1.2.1 命令历史记录

如果按下向上方向指示键,将会看到先前的命令kaekfjaeifj再一次出现在提示符的后面,这称为命令历史记录。在默认情况下,大部分Linux发行版本能够存储最近输入的500个命令。按下向下方向指示键,则先前的命令消失。

1.2.2 光标移动

再次按下向上方向指示键,重新调用先前的命令,然后分别按下向左和向右方向指示键,看看如何将光标定位到命令行的任意位置。这可以让我们很容易地编辑命令。关于鼠标与焦点

尽管shell与用户的交互全部是通过键盘来完成的,但是在终端仿真器中,也可以使用鼠标。内置到X窗口系统(驱动GUI的底层引擎)中的一种机制可以支持快速的复制与粘贴技术。如果紧按鼠标左键选中一些文本并拖动鼠标(或双击选中一个词),该文本将复制到由X维护的一个缓冲区中。按下鼠标的中间按键可以将选中的文本粘贴到光标所在的位置。你可以试一下。

不要试图使用Ctrl-C和Ctrl-V在一个终端窗口内进行复制和粘贴操作,这不起作用。对于shell而言,这些组合键在很早之前就已经赋予了不同的含义,而那时微软的Windows操作系统还没有出现。

在操作上与Windows类似的图形桌面环境(很有可能是KDE或GNOME),很可能拥有自己的焦点策略(focus policy)集合,用以通过“点击来获得焦点”。这意味着,如果一个窗口需要获得焦点(成为当前窗口),只需要点击一下即可。而传统的X窗口的行为是“焦点跟随着鼠标”,也就是说,当鼠标经过窗口时,窗口就会获得焦点。因此两者是截然不同的。如果没有点击窗口,那么它不会出现在前端,但此时它可以接受输入。将焦点策略设置为“焦点跟随鼠标”的方式会使终端窗口使用起来更容易。试一试吧,试过之后,你一定会喜欢上这种方式。你可在窗口管理器的配置程序中找到该设置。1.3 几个简单的命令

在学习了键盘输入之后,我们来尝试几个简单的命令。首先是date命令,该命令显示当前系统的时间和日期。[me@linuxbox ~]$ dateThu Oct 25 13:51:54 EDT 2012

与之相关的一个命令是cal,在默认情况下,cal显示当月的日历。[me@linuxbox ~]$ cal   October 2012Su Mo Tu We Th Fr Sa  1  2  3  4  5  67  8  9 10 11 12 1314 15 16 17 18 19 2021 22 23 24 25 26 2728 29 30 31

如果想要查看磁盘驱动器当前的可用空间,可以使用df命令。[me@linuxbox ~]$ dfFilesystem      1K-blocks    Used Available Use% Mounted on/dev/sda2       15115452  5012392  9949716  34% //dev/sda5       59631908  26545424  30008432  47% /home/dev/sda1        147764    17370   122765  13% /boottmpfs          256856      0   256856  0% /dev/shm

同样,要显示可用内存,可以使用free命令。[me@linuxbox ~]$ free      total     used   free   shared   buffers   cachedMem:   513712   503976   9736       0     5312   122916-/+ buffers/cache:  375748  137964Swap:  1052248    104712  9475361.4 结束终端会话

直接关闭终端窗口或是在shell提示符下输入exit命令,即可结束终端会话。[me@linuxbox ~]$ exit幕后的控制台

即使没有运行终端仿真器,一些终端会话也会在图形桌面的后台运行。这叫做虚拟终端或是虚拟控制台。在绝大多数系统中,通过依次按下Ctrl-Alt-F1键到Ctrl-Alt-F6组合键,可以访问大部分Linux发行版中的终端会话。每当访问一次会话,就会出现登录提示符,我们可以在其中输入用户名和密码。按Alt和F1~F6键,可从一个虚拟控制台转换到另一个虚拟控制台。按Alt-F7键可返回图形桌面环境。第2章 导航

除了在命令行进行输入操作之外,我们首先需要学习的是如何在Linux系统中导航文件系统。本章将介绍下述命令。● pwd:查看当前工作目录。● cd:改变目录。● ls:列出目录内容。2.1 理解文件系统树

与Windows相同,类UNIX操作系统(比如Linux)也是以称之为分层目录结构的方式来组织文件的。这意味着文件是在树形结构的目录(有时在其他系统中称为文件夹)中进行组织的,该树形结构目录可能包含文件和其他目录。文件系统的第一个目录叫做根目录,它包含了文件和子目录。子目录里包含了更多的文件和子目录,依此类推。

需要注意的是,在Windows系统中,每个存储设备都有一个独立的文件系统树。而在类UNIX系统中,如Linux,无论多少驱动器或存储设备与计算机相连,通常只有一个文件系统树。根据系统管理员的设置,存储设备将会连接(更准确的说是“挂载”)到文件系统树的不同位置。系统管理员要负责系统的维护。2.2 当前工作目录

可能大部分人都熟悉用于表示文件系统树的图形文件管理器,如图 2-1 所示。需要注意的是,树通常是倒立显示的。也就是说,顶部是根目录,依次向下排列的是子目录。图2-1 在图形文件管理器中显示的文件系统树

然而,由于命令行没有图像,若是要浏览文件系统树,就必须使用其他方法。

假设文件系统是一个迷宫,形如一棵倒置的树,并且用户处在文件系统之中。任何时刻,我们处在单个目录中,能够看到该目录中包含的文件、去往上一级目录(称为父目录)的路径,以及下一级的各个子目录。用户所处的目录叫做当前工作目录。使用pwd(打印工作目录)命令可以显示当前工作目录。[me@linuxbox ~]$ pwd/home/me

第一次登录系统时(或是启动终端仿真器会话时),当前工作目录被设置成主目录。每个用户账号都有一个主目录,作为普通用户操作时,这是唯一一个允许用户写文件的地方。2.3 列出目录内容

使用ls命令可以列出当前工作目录的文件和目录。[me@linuxbox ~]$ lsDesktop Documents Music Pictures Public Templates Videos

实际上,可以使用ls命令列出任何目录的内容,而不仅仅是当前工作目录。同时,它还拥有一些其他有趣的功能。我们会在第3章详细讨论ls命令。2.4 更改当前工作目录

使用cd命令可以改变工作目录(即在文件系统树的位置);只需输入cd命令,然后再输入目标工作目录的路径名即可。路径名指的是沿着分枝到达目标目录的路由。路径名分为两种:绝对路径名和相对路径名。首先来谈谈绝对路径名。

2.4.1 绝对路径名

绝对路径名从根目录开始,其后紧接着一个又一个文件树分支,直到到达目标目录或文件。例如,系统里有一个目录,大多数系统程序都安装到这个目录里,该目录的路径名是/usr/bin。这就意味着根目录(在路径名中用前导斜杠来表示)中有一个目录是usr,该目录包含一个bin目录。[me@linuxbox ~]$ cd /usr/bin[me@linuxbox bin]$ pwd/usr/bin[me@linuxbox bin]$ ls...Listing of many, many files ...

可以看到,我们已经将当前工作目录改变成/usr/bin,bin目录中包含很多文件。请注意shell提示符是如何变化的。为方便起见,工作目录名通常被设置成自动显示。

2.4.2 相对路径名

绝对路径名是从根目录开始,通向目标目录,而相对路径名则是从工作目录开始的。为了实现这个目的,它通常使用一些特殊符号来表示文件系统树中的相对位置,这些特殊符号是“.”(点)和“..”(点点)。

符号“.”代表工作目录,符号“..”代表工作目录的父目录。下面演示它们是如何工作的。让我们再次将工作目录改变成/usr/bin。[me@linuxbox ~]$ cd /usr/bin[me@linuxbox bin]$ pwd/usr/bin

好的,下面来说明一下,我们希望将工作目录改变成/usr/bin的父目录,即/usr。有两种方法可以实现,一种是使用绝对路径名。[me@linuxbox bin]$ cd /usr[me@linuxbox usr]$ pwd/usr

另一种是使用相对路径名。[me@linuxbox bin]$ cd ..[me@linuxbox usr]$ pwd/usr

由于两种不同的方法产生同样的结果。那么我们究竟应该用哪一种方法呢?那就选择输入字符最少的吧。

同样,可以用两种方法将工作目录从/usr变到/usr/bin。我们可以使用绝对路径名。[me@linuxbox usr]$ cd /usr/bin[me@linuxbox bin]$ pwd/usr/bin

我们也可以使用相对路径名。[me@linuxbox usr]$ cd ./bin[me@linuxbox bin]$ pwd/usr/bin

必须在这里指出来的是,几乎在所有的情况下都可以省略“./”,因为它是隐含的。输入以下代码。[me@linuxbox usr]$ cd bin

该代码与使用相对路径名的代码具有相同效果。一般而言,如果没有指定路径名,则默认为工作目录。

2.4.3 一些有用的快捷方式

表2-1列出了一些可以快速改变当前工作目录的方法。表2-1 cd快捷方式快捷方式结果cd将工作目录改变成主目录cd-将工作目录改变成先前的工作目录将工作目录改变为username的主目录。例如,cd~bob将目usernamecd~录改变成用户bob的主目录有关文件名的一些重要说明● 以“.”字符开头的文件名是隐藏的。这仅说明ls不会列出这

些文件,除非输入ls-a。在创建用户账号时,主目录里会放置一

些隐藏文件,用来配置账号信息。仔细观察这样的文件,可以使

我们了解如何自定义工作环境。此外,一些应用程序也会将它们

的配置文件和设置文件以隐藏文件的形式放在主目录下面。● 与UNIX一样,在Linux中,文件名与命令是区分大小写的。

文件名File1和file1指向不同的文件。● 与其他一些操作系统一样,Linux没有文件扩展名的概念。

我们可以按照自己的喜好随意给文件命名。文件的内容或用途由

其他方式来决定。尽管类UNIX操作系统不使用文件扩展名来决

定文件内容或用途,但是一些应用程序却这么做了。● Linux支持长文件名,文件名可能包含了嵌入的空格和标点

符号。但是在创建文件名的过程中,仅句号、连字符和下划线是

可以使用的。更为重要的是,文件名中不要嵌入空格。文件名中

嵌入空格会使很多命令行任务的实现变得困难,在第7章中我们

就会发现这个问题。如果想要表示文件名词语间的空格,可以使

用下划线,以后我们就会知道这样的好处了。第3章 Linux系统

既然已经知道了如何在文件系统中跳转,是时候开始Linux操作系统之旅了。但是,在开始之前,我们要先学习一些对研究Linux系统很有帮助的命令。● ls:列出目录内容。● file:确定文件类型。● less:查看文件内容。3.1 ls命令的乐趣

有充分的理由证明,ls命令很可能是用户最常使用的命令。通过ls命令可以查看目录内容,确定各种重要文件和目录的属性。我们已经看到,只需输入ls命令,即可查看当前工作目录中包含的一系列文件和子目录。[me@linuxbox ~]$ lsDesktop  Documents  Music  Pictures  Public  Templates  Videos

除了当前工作目录之外,我们还可以指定要显示的目录,如下所示。me@linuxbox ~]$ ls /usrbin  games  kerberos  libexec  sbin  srcetc  include lib    local   share tmp

我们甚至可以指定多个目录。下面这个例子就列出了用户主目录(由符号“~”表示)和/usr目录的内容。[me@linuxbox ~]$ ls ~ /usr/home/me:Desktop  Documents  Music Pictures  Public  Templates  Videos/usr:bin  games  kerberos  libexec  sbin  srcetc  include  lib    local  share tmp

我们也可以改变输出格式来得到更多细节。[me@linuxbox ~]$ ls -ltotal 56drwxrwxr-x 2 me me 4096 2012-10-26 17:20 Desktopdrwxrwxr-x 2 me me 4096 2012-10-26 17:20 Documentsdrwxrwxr-x 2 me me 4096 2012-10-26 17:20 Musicdrwxrwxr-x 2 me me 4096 2012-10-26 17:20 Picturesdrwxrwxr-x 2 me me 4096 2012-10-26 17:20 Publicdrwxrwxr-x 2 me me 4096 2012-10-26 17:20 Templatesdrwxrwxr-x 2 me me 4096 2012-10-26 17:20 Videos

在命令中加上-l,我们可以将输出以长格式显示。

3.1.1 选项和参数

下面,让我们来了解一下大部分命令是如何工作的,这也是非常重要的一点。通常,命令后面跟有一个或多个选项,带有不同选项的命令其功能也不一样。此外,命令后面还会跟有一个或多个参数,这些参数是命令作用的对象。所以大部分命令看起来如下所示:command -options arguments

大部分命令使用的选项是在单个字符前加上连字符,如-l。但是,很多命令,包括GNU项目里的命令,也支持在单字前加两个连字符的长选项。而且,很多命令也允许多个短选项串在一起使用。在下面的例子中,ls命令包含了两个选项;l选项产生长格式输出,而t选项则表示以文件修改时间的先后将结果进行排序。[me@linuxbox ~]$ ls -lt

加上长选项- -reverse,则结果会以相反的顺序输出:[me@linuxbox ~]$ ls -lt --reverse

ls命令有大量可用的选项。最常用的选项如表3-1所示。表3-1 ls命令的常用选项选长选含义项项列出所有文件,包括以点号开头的文件,这些文件通常是不列出-a--all来的(比如隐藏的文件)--通常,如果指定了一个目录,ls命令会列出目录中的内容而不是目direct-d录本身。将此选项与-l选项结合使用,可查看目录的详细信息,而ory不是目录中的内容--选项会在每个所列出的名字后面加上类型指示符(例如,如果名classif-F字是目录名,则会加上一个斜杠)y--human--h以长格式列出,以人们可读的方式而不是字节数来显示文件大小readable-l使用长格式显示结果--revers-r以相反的顺序显示结果。通常,ls命令按照字母升序排列显示结果e-S按文件大小对结果排序-t按修改时间排序

3.1.2 进一步了解长列表格式

前面看到,-l选项使得ls命令以长格式显示其结果。这种格式包含了大量的有用信息。下面的例子来自Ubuntu系统。-rw-r--r-- 1 root root 3576296 2012-04-03 11:05 Experience ubuntu.ogg-rw-r--r-- 1 root root 1186219 2012-04-03 11:05 kubuntu-leaflet.png-rw-r--r-- 1 root root  47584 2012-04-03 11:05 logo-Edubuntu.png-rw-r--r-- 1 root root  44355 2012-04-03 11:05 logo-Kubuntu.png-rw-r--r-- 1 root root   34391 2012-04-03 11:05 logo-Ubuntu.png-rw-r--r-- 1 root root  32059 2012-04-03 11:05 oo-cd-cover.odf-rw-r--r-- 1 root root  159744 2012-04-03 11:05 oo-derivatives.doc-rw-r--r-- 1 root root  27837 2012-04-03 11:05 oo-maxwell.odt-rw-r--r-- 1 root root  98816 2012-04-03 11:05 oo-trig.xls-rw-r--r-- 1 root root  453764 2012-04-03 11:05 oo-welcome.odt-rw-r--r-- 1 root root  358374 2012-04-03 11:05 ubuntu Sax.ogg

再来看一下其中一个文件的不同字段,表3-2列出了这些不同字段的含义。表3-2 ls长列表字段字段含义对文件的访问权限。第一个字符表示文件的类型。在不同类型之间,开头的“-”表示该文件是一个普通文件,d表示目-rw-r-r--录。紧接着的三个字符表示文件所有者的访问权限,再接着的三个字符表示文件所属组中成员的访问权限,最后三个字符表示其他所有人的访问权限。详细解释请见第9章1文件硬链接数目。链接的内容将在本章后面讨论root文件所有者的用户名root文件所属用户组的名称32059以字节数表示的文件大小2012-04-03 上次修改文件的日期和时间11:05oo-cd-cover.文件名odf3.2 使用file命令确定文件类型

在我们探索系统的过程中,知道文件包含的内容是非常有用的。为此,我们可以使用file命令来确定文件类型。先前讲过,Linux系统中的文件名不需要反映文件的内容。例如,当我们看到picture.jpg这样一个文件名,会很自然地觉得该文件中包含一张JPEG压缩图像,但是在Linux中却没有这个必要。我们可以这样调用file命令:file filename

调用后,file命令会打印出文件内容的简短说明。例如:[me@linuxbox ~]$ file picture.jpgpicture.jpg: JPEG image data, JFIF standard 1.01

文件的种类有很多。事实上,在类UNIX操作系统(比如Linux系统)中,有个普遍的观念是“所有的东西都是一个文件”。随着课程的深入,大家会明白这句话的真谛。

尽管我们已经很熟悉系统中的许多文件,比如MP3和JPEG文件。但是也有一些文件比较含蓄,还有一些文件对我们而言相当陌生。3.3 使用less命令查看文件内容

less命令是一种查看文本文件的程序。纵观Linux系统,很多文件都含有人们可以阅读的文本。less程序为我们查看文件提供了方便。

为什么要查看文本文件呢?因为包含系统设置的多数文件(即配置文件)是以这种格式存储的,阅读这些文件有利于更好地理解系统是如何工作的。此外,系统使用的许多实际程序(称之为脚本)也是以这种格式存储的。在随后的章节中,我们将学习如何编写文本文件来修改系统设置,并编写自己的脚本,而现在我们只需看看它们的内容即可。什么是文本

有很多方式可在计算机中表达信息。所有的方式都涉及在信息与一些数字之间确立一种关系,而这些数字可以用来表达信息。毕竟,计算机只能理解数字,并且所有的数据都将转换成数值来表示。

有些表示方法非常复杂(例如压缩后的视频文件),也有一些其他方法相当简单。其中出现最早也是最简单的是ASCII文本。ASCII(发音是“As-Key”)是美国信息交换标准码的简称。这个简单的编码方案最早用于电传打字机。

文本是字符与数字之间简单的一对一映射,它非常紧凑。由50个字符构成的文本在转换为数据时,也是50个字节。这与文字处理器文档中的文本是不一样的,比如由Microsoft Word或OpenOffice.org Write创建的文档。与简单的ASCII文本相比,那些文件包含了很多用来描述结构和格式的非文本元素。而普通的ASCII文本文件仅包含字符本身和一些基本的控制代码,比如制表符、回车符和换行符。

纵观Linux系统,很多文件是以文本格式存储的,并且也有很多Linux工具来处理文本文件。甚至连Windows系统也认识到这种格式的重要性。众所周知的记事本程序就是一款普通的ASCII文本文件编辑器。

less命令的使用方式如下。less filename

一旦运行起来,less程序允许我们前后滚动文件。例如,想要查看定义了系统用户账户的文件,可输入下面的命令。[me@linuxbox ~]$ less /etc/passwd

一旦less程序运行起来,我们就可查看文件内容。如果文件不止一页,可以上下滚动文件。按Q键可退出less程序。

表3-3列出了less程序最常使用的键盘命令。表3-3 less命令命令功能PAGE UP或b后翻一页PAGE DOWN前翻一页或Spacebar向上箭头键向上一行向下箭头键向下一行G跳转到文本文件的末尾1G或g跳转到文本文件的开头/charecters向前查找指定的字符串向前查找下一个出现的字符串,这个字符串是之前所指定查n找的h显示帮助屏幕q退出less少即是多(LESS lS MORE)

设计less程序是为了替换早期UNIX中的more程序。less这个名字是对短语“less ls more”开了个玩笑,该短语是现代派建筑师和设计师们的座右铭。

less命令属于“页面调度器(pagers)”程序类,这些程序允许通过一页一页的方式,轻松浏览很长的文本文档。而more程序只允许向前翻页,使用less命令既可以前后翻页,还具有很多其他的特性。3.4 快速浏览

在Linux系统中,文件系统布局与其他类UNIX系统很相似。实际上,一个已经发布的名为Linux文件系统层次标准(Linux Filesystem Hierarchy Standard)的标准,已经详细阐述了这个设计。并不是所有Linux发行版都严格符合该标准,但大部分与之很接近。

接下来,我们将通过对文件系统的探索来找到Linux系统正常运行所依赖的基础。这将提供一个练习导航技巧的机会。此时我们会发现,很多有趣的文件都是普通的可读文本。请尝试下面的步骤。

1.使用cd命令进入一个给定的目录。

2.使用ls-l命令列出目录内容。

3.如果看到一个感兴趣的文件,使用file命令确定文件内容。

4.如果文件看起来像是一个文本,试着使用less命令浏览其内容。

注意:牢记复制与粘贴技巧!如果使用鼠标的话,可以双击文件名来复制,中键单击将其粘贴进命令行。

当我们浏览文件系统时,不要担心将文件系统的布局弄得混乱不堪。普通用户不具有管理文件系统的权限,那是系统管理员的工作!如果一条命令无法执行某些功能,那么继续选择其他命令。多花些时间浏览一下。系统是需要大家探索的。记住,Linux没有秘密可言。

表3-4只列出了一些探索到的目录,剩余的目录请大家自由地探索!表3-4 在Linux系统中找到的目录目录内容/根目录,一切从这里开始/bin包含系统启动和运行所必需的二进制文件(程序)包含Linux内核、最初的RAM磁盘映像(系统启动时,驱动程序会用到),以及启动加载程序有趣的文件:/boot• /boot/grub/grub.conf或menu.lst,用来配置启动加载程序•/boot/vmlinuz,Linux内核这是一个包含设备节点的特殊目录。“把一切当成文件”也/dev适用于设备。内核将它能够识别的所有设备存放在这个目录里/etc目录包含了所有系统层面的配置文件,同时也包含了一系列shell脚本,系统每次启动时,这些shell脚本都会打开每个系统服务。该目录中包含的内容都应该是可读的文本文件。/etc有趣的文件:尽管/etc目录中的任何文件都很有趣,但这里只列出了一些我一直喜欢的文件:• /etc/crontab,该文件定义了自动化任务运行的时间• /etc/fstab,存储设备以及相关挂载点的列表• /etc/passwd,用户账号列表在通常的配置中,每个用户都会在/home目录中拥有一个属/home于自己的目录。普通用户只能在自己的主目录中创建文件。这一限制可以保护系统免遭错误的用户行为的破坏包含核心系统程序使用的共享库文件。这与Windows系统中/lib的DLL类似每个使用Linux文件系统的格式化分区或设备,例如ext3文件系统,都会有这个目录。当文件系统崩溃时,该目录用于恢/lost+found复分区。除非系统真的发生很严重的问题,否则这个目录一直是空的在现代Linux系统中,/media目录包含可移除媒体设备的挂载/media点。比如USB驱动、CD-ROM等。这些设备在插入计算机后,会自动挂载到这个目录节点下在早期的Linux系统中,/mnt目录包含手动挂载的可移除设备/mnt的挂接点/opt目录用来安装其他可选的软件。主要用来存放可能安装/opt在系统中的商业软件/proc目录很特殊。从文件的角度来说,它不是存储在硬盘中的真正的文件系统,反而是一个Linux内核维护的虚拟文件系/proc统。它包含的文件是内核的窥视孔。该文件是可读的,从中可以看到内核是如何监管计算机的/rootroot账户的主目录该目录放置“系统”二进制文件。这些程序执行重要的系统/sbin任务,这些任务通常是为超级用户预留的/tmp是供用户存放各类程序创建的临时文件的目录。某些配/tmp置使得每次系统重启时都会清空该目录/usr目录可能是Linux系统中最大的目录树。它包含普通用户/usr使用的所有程序和相关文件/usr/bin目录中放置了一些Linux发行版安装的可执行程序。该/usr/bin目录通常会存储成千上万个程序/usr/lib/usr/bin目录中的程序使用的共享库这个/usr/local目录是并非系统发行版自带,但却打算让系统使用的程序的安装目录。由源代码编译好的程序通常安装在//usr/localusr/local/bin中。在一个新安装的Linux系统中,就存在这一个目录,但却是空目录,直到系统管理员向其中添加内容/usr/sbin包含更多的系统管理程序/usr/share目录里包含了/usr/bin中的程序所使用的全部共享数/usr/share据,这包括默认配置文件、图标、屏幕背景、音频文件等安装在系统中的大部分程序包包含一些文档文件。在/usr//usr/share/docshare/doc中,文档文件是按照软件包来组织分类的除了/tmp和/home目录之外,目前看到的目录相对来说都是静态的;也就是说,其包含的内容是不变的。而那些可能改/var变的数据存储在/var目录树里。各种数据库、假脱机文件、用户邮件等都存储在这里/var/log目录包含的日志文件,记录了各种系统活动。这些文件非常重要,并且应该时不时地监控它们。其中最有用的文/var/log件是/var/log/messages。注意,为了安全起见,在一些系统里,必须是超级用户才能查看日志文件3.5 符号链接

在浏览过程中,我们可能会看到带有如下条目的目录信息。lrwxrwxrwx 1 root root  11 2012-08-11 07:34 libc.so.6 -> libc-2.6.so

注意,该条目信息的第一个字母是l,而且看起来像是有两个文件名。这种特殊的文件叫做符号链接(又叫软链接或symlink)。在大多类UNIX系统中,一个文件很可能采用多个名字来引用。虽然这种特性的意义并不明显,但是它真的很有用。

想象这样一个场景:一个程序需要使用包含在foo文件中的一个共享资源,但foo版本变化很频繁。这样,在文件名中包含版本号会是一个好主意,因此管理员或其他相关方就能够看到安装了foo的哪个版本。这就出现一个问题。如果改变了共享资源的名称,就必须跟踪每个可能使用了该共享资源的程序,并且当安装了该资源新的版本后,都要让使用它的程序去寻找新的资源名。这听起来很没有意思。

下面就是符号链接的用武之处。假设foo的安装版本是2.6,它的文件名是foo-2.6,然后创建一个符号链接foo指向foo-2.6。这意味着,当一个程序打开foo文件时,它实际上打开的是文件foo-2.6,这样一来皆大欢喜。依赖foo文件的程序能够找到它,并且也能看到实际安装的版本。当需要升级到foo-2.7时,只需将该文件添加到系统里,删除符号链接文件foo,创建一个指向新版本的符号链接即可。这不仅解决了版本升级的问题,也可以将两种版本都保存在机器里。假如foo-2.7存在一个程序错误(都怪该死的开发商!),需要切换到旧的版本。同样,只需删除指向新版本的符号链接,重新创建指向旧版本的符号链接即可。

以上列举的目录(来源于Fedora系统的/lib目录)中显示了一个指向libc-2.6.so共享库文件的符号链接libc.so.6。也就是说,搜索文件libc.so.6的程序实际上访问的是libc-2.6.so文件。下一章我们将学习如何创建符号链接。硬链接

既然在讨论链接问题,就需要提一下另一种类型的链接,即硬链接。它同样允许文件有多个名字,但是处理的方式是不同的。下一章我们将进一步讨论符号链接与硬链接的区别。第4章 操作文件与目录

现在,我们准备好做些实际工作了!本章将介绍如下命令。● cp:复制文件和目录。● mv:移动或重命名文件和目录。● mkdir:创建目录。● rm:移除文件和目录。● in:创建硬链接和符号链接。

这5个命令属于最常使用的Linux命令之列,可用来操作文件与目录。

坦率地说,使用图形文件管理器来执行一些由这些命令执行的任务要容易得多。使用文件管理器,我们可以将文件从一个目录拖放到另一个目录,我们可以剪切和粘贴文件,我们可以删除文件。那么,为什么还要用这些命令行程序呢?

原因就在于命令行程序具有强大的功能和灵活的操作。虽然使用图形文件管理器能轻松实现简单的文件操作,但是对于复杂的任务,使用命令行程序更容易完成。例如,怎样仅因为文件在目标目录中不存在或存在旧的版本,就将所有HTML文件从一个目录复制到目标目录里呢?要完成这个任务,使用文件管理器则相当困难,而使用命令行则很容易。cp -u *.html destination4.1 通配符

在开始使用命令之前,我们需要介绍一个使命令行如此强大的shell特性。由于shell需要经常使用文件名,因此它提供了一些特殊字符来帮助你快速指定一组文件名。这些特殊字符称为通配符。通配符(也叫文件名替换)允许用户依据字符模式选择文件名。表4-1列出了通配符以及它们所选择的对象。表4-1 通配符通配符匹配项匹配任意多个字符(包括0个和1个)*匹配任一单个字符(不包括0个)?[characters]匹配任意一个属于字符集中的字符[!characters]匹配任意一个不属于字符集中的字符[[:class:]]匹配任意一个属于指定字符类中的字符

表4-2列出了最常用的字符类。表4-2 常用的字符类**字符类匹配项[:alnum:]匹配任意一个字母或数字[:alpha:]匹配任意一个字母[:digit]匹配任意一个数字[:lower:]匹配任意一个小写字母[:upper:]匹配任意一个大写字母

通配符的使用使得为文件名构建复杂的筛选标准成为可能。表 4-3 列出了一些通配符模式及其匹配内容的示例。表4-3 通配符示例**模式匹配项所有文件*g*以g开头的任一文件以b开头,中间有任意多个字符,并以.txt结尾的任一文b*.txt件Data???以Data开头,后面跟3个字符的任一文件[abc]*以abc中的任一个开头的任一文件BACKUP.[0-9][0-9]以BACKUP.开头,后面紧跟3个数字的任一文件[0-9][[:upper:]]*以大写字母开头的任一文件[![:digit:]]*不以数字开头的任一文件*[[:lower:]123]以小写字母或数字1、2、3中的任一个结尾的任一文件

通配符可以与任一个使用文件名为参数的命令一起使用,在第7章我们会进一步讨论。字符范围

如果你之前使用过其他的类UNIX环境或是读过该主题的相关书籍,可能遇到过[A-Z]或[a-z]形式的字符范围表示法。这些都是传统的UNIX表示法,在早期的Linux版本中仍然奏效。尽管它们仍然起作用,但使用时请务必小心,因为一旦配置不当,就会产生非预期的结果。目前,我们要避免使用它们,而是使用字符类。通配符在GUI中也奏效

通配符相当有用,不仅仅因为它们在命令行中使用频繁,而且在于一些图形文件管理器也支持通配符操作。● 在Nautilus(GNOME的文件管理器)中,你可以使用Edit-

>Select Pattern选择文件。仅仅输入一个用通配符表示的文件选

择模式后,则当前查看的目录中,所匹配的文件就会突出显示。● 在Dolphin和Konqueror(KDE的文件管理器)的一些版本

中,你可以直接在地址栏输入通配符。比如,如果想要在/usr/

bin目录中查找所有以小写字符u开始的文件,只需在地址栏输

入/usr/bin/u*,即可显示匹配的结果。

最初源于命令行界面的许多理念,也同样适用于图形界面。而这恰恰是使Linux系统桌面如此强大的原因之一。4.2 mkdir——创建目录

mkdir命令是用来创建目录的,格式如下。mkdir directory…

注意表示法:本书在描述命令时,如果参数后面带有3个点号(如上所示),这表示该参数重复。因此,下面这种情况:mkdir dir1

可创建单个dir1目录,而输入:mkdir dir1 dir2 dir3

可创建3个目录,分别命名为dir1、dir2和dir3。4.3 cp——复制文件和目录

cp命令用来复制文件和目录。它有两种不同的使用方式,如下所示。cp item1 item2

将单个文件或目录item1复制到文件或目录item2中。cp item… directory

将多个项目(文件或目录)复制进一个目录中。

表4-4和表4-5列出了cp常用的选项(短选项和等价的长选项)。表4-4 cp命令选项选项含义复制文件和目录及其属性,包括所有权和权限。通常来说,-a,--archive复制的文件具有用户所操作文件的默认属性在覆盖一个已存在的文件前,提示用户进行确认。如果没有-i,--interactive指定该选项,cp会默认覆盖文件递归地复制目录及其内容。复制目录时需要这个选项(或-a-r,--recursive选项)当将文件从一个目录复制到另一个目录时,只会复制那些目-u,--update标目录中不存在的文件或是目标目录相应文件的更新文件复制文件时,显示信息性消息(informative message)-v,--verbose表4-5 cp命令示例命令结果将file1复制到file2。如果file2存在,则会被file1的内容覆盖。cp file1 file2如果file2不存在,则创建file2cp –i file1 file2同上,区别在于当file2存在时,覆盖之前通知用户确认cp file1 file2 将file1和file2复制到目录dir1里。dir1必须已经存在dir1通过使用通配符,将dir1中的所有文件复制的dir2中。dir2必cp dir1/ * dir2须已经存在将dir1目录(及其内容)复制到dir2目录中。如果dir2不存cp –r dir1 dir2在,创建dir2,且包含与dir1目录相同的内容4.4 mv——移除和重命名文件

mv命令可以执行文件移动和文件重命名操作,这具体取决于如何使用它。在这两种情况下,完成操作之后,原来的文件名将不存在。mv的使用方法与cp基本相似。mv item1 item2

将文件(或目录)item1移动(或重命名)为item2,或是mv item… directory

将一个或多个条目从一个目录移动到另一个目录下。

mv命令很多选项与cp命令是共享的,如表4-6和表4-7所示。表4-6 mv选项选项含义覆盖一个已存在的文件之前,提示用户确认。如果没有指定-i,--interactive该选项,mv会默认覆盖文件将文件从一个目录移动到另一个目录,只移动那些目标目录-u,--update中不存在的文件或是目标目录里相应文件的更新文件-v,--verbose移动文件时显示信息性消息表4-7 mv示例命令结果将file1移到file2。如果file2存在,则会被file1的内容覆盖。如mv file1 file2果file2不存在,则创建file2。无论哪一种情况,file1不再存在mv –i file1 file2同上,仅当file2存在时,覆盖之前通知用户确认mv file1 file2 将file1和file2移到目录dir1下。dir1必须已经存在dir1将目录dir1(和其内容)移到目录dir2下。如果目录dir2不存mv dir1 dir2在,创建目录dir2,将目录dir1的内容移到dir2下,同时删除目录dir14.5 rm——删除文件和目录

rm命令用来移除(删除)文件和目录,如下所示。rm item…

其中,item是一个或多个文件(或目录)的名称。小心rm命令

类UNIX操作系统(如Linux)并不包含还原删除操作的命令。一旦使用rm命令,就彻底地删除了。Linux系统默认用户是明智的,并清楚自己在干什么。

rm命令与通配符在一起使用时要特别小心。来看下面这个经典的示例。假设我们只希望删除目录中的HTML文件,为此需要输入以下正确的命令:rm *.html

如果不小心在*与.html之间多打了一个空格,如下所示:rm * .html

rm 命令将会删除目录中所有文件,并提示说明目录中没有叫做.html 的文件。

提示:当rm命令与通配符一起使用时,除仔细检查输入内容外,可使用ls命令预先对通配符做出测试,这将显示欲删除的文件。紧接着,你可以按下向上方向键调用之前的命令,并使用rm代替ls。

表4-8和表4-9列出了rm命令的一些常用选项。表4-8 rm选项选项含义删除一个已存在的文件前,提示用户确认。如果没有指定这-i,--interactive个选项,rm命令会默认删除文件递归地删除目录。也就是说,如果删除的目录有子目录的话,-r,--recursive也要将其删除。要删除一个目录,则必须指定该选项忽略不存在的文件并无需提示确认。该选项会覆盖---f,--forceinteractive选项-v,--verbose删除文件时显示信息性消息表4-9 rm实例命令结果rm file1在不提示用户的情况下,删除file1rm –i file1删除file1前,提示用户确认rm –r file1 dir1删除file1、dir1以及它们的内容同上,当时在file1或dir1不存在时,rm仍会继续执行,且不提rm –rf file1 dir1示用户4.6 ln——创建链接

ln命令可用来创建硬链接或是符号链接。它的使用方式有两种。ln file link

用来创建硬链接,而ln –s item link

用来创建符号链接,这里的item可以是文件也可以是目录。

4.6.1 硬链接

硬链接是最初UNIX用来创建链接的方式,符号链接较之更为先进。默认情况下,每个文件有一个硬链接,该硬链接会给文件起名字。当创建一个硬链接的时候,也为这个文件创建了一个额外的目录条目。硬链接有两条重要的局限性。● 硬链接不能引用自身文件系统之外的文件。也就是说,链接不能

引用与该链接不在同一磁盘分区的文件。● 硬链接无法引用目录。

硬链接和文件本身没有什么区别。与包含符号链接的目录列表不同,包含硬链接的目录列表没有特别的链接指示说明。当硬链接被删除时,只是删除了这个链接,但是文件本身的内容依然存在(也就是说,该空间没有释放),除非该文件的所有链接都被删除了。

因为会经常遇到它们,了解硬链接就显得特别重要。但是现在大多使用的是符号链接,下面将会有所介绍。

4.6.2 符号链接

符号链接是为了克服硬链接的局限性而创建的。符号链接是通过创建一个特殊类型的文件来起作用的,该文件包含了指向引用文件或目录的文本指针。就这点来看,符号链接与Windows系统下的快捷方式非常相似,但是,符号链接要早于Windows的快捷方式很多年。

符号链接指向的文件与符号链接自身几乎没有区别。例如,将一些东西写进符号链接里,那么这些东西同样也写进了引用文件。而当删除一个符号链接时,删除的只是符号链接而没有删除文件本身。如果先于符号链接之前删除文件,那么这个链接依然存在,但却不指向任何文件。此时,这个链接就称为坏链接。在很多实现中,ls命令会用不同的颜色来显示坏链接,比如红色,从而显示它们的存在。

链接的概念似乎很令人迷惑,但是不要害怕。我们要经常性地使用,它们慢慢的就会清晰起来。4.7 实战演练

由于我们要做一些实际的文件操作,我们先来创建一个安全的地带,来执行文件操作命令。首先,我们需要一个工作目录。我们在主目录里创建一个目录并命名为playground。

4.7.1 创建目录

mkdir命令用来创建一个目录。为了创建playground目录,我们首先要保证当前目录是主目录,然后再创建新目录。[me@linuxbox ~]$ cd[me@linuxbox ~]$ mkdir playground

为了让我们的实战演练更有意思,我们在playground目录中新建两个目录,命名为dir1、dir2。为此,我们应先将当前的工作目录切换为playground,然后再次执行mkdir命令。[me@linuxbox ~]$ cd playground[me@linuxbox playground]$ mkdir dir1 dir2

需要注意的是,mkdir命令可以接受多个参数,从而允许我们用一个命令创建两个目录。

4.7.2 复制文件

接下来,让我们在创建的目录中放入一些数据。这一过程可通过文件复制来完成。通过使用cp命令,我们可以将/ect目录中的passwd文件复制到当前工作目录里。[me@linuxbox playground]$ cp /etc/passwd .

注意我们是如何使用当前工作目录的快捷方式的,即在命令末尾加单个句点。如果我们此时执行ls命令,将会看到我们的文件。[me@linuxbox playground]$ ls -ltotal 12drwxrwxr-x 2 me me 4096 2012-01-10 16:40 dir1drwxrwxr-x 2 me me 4096 2012-01-10 16:40 dir2-rw-r--r-- 1 me me 1650 2012-01-10 16:07 passwd

现在让我们使用-v选项,重复操作复制命令,来看看结果如何。[me@linuxbox playground]$ cp -v /etc/passwd .'/etc/passwd' -> './passwd'

cp命令再次执行复制操作,但是,这一次显示了一条简洁的信息来指明它正在执行什么操作。需要注意的是,在没有任何警告的情况下,cp命令覆盖了第一次的复制内容。cp命令会假定用户清楚自己当前的操作。加上-i(交互式)选项可以获得警告信息。[me@linuxbox playground]$ cp -i /etc/passwd .cp: overwrite './passwd'?

通过在提示符下输入y,文件就会被重写;任何其他的字符(比如,n)会使cp命令保留该文件。

4.7.3 移动和重命名文件

现在,passwd这个名字似乎没有那么有趣,而我们毕竟是在进行实战演练,因此我们给它改个名字。[me@linuxbox playground]$ mv passwd fun

现在传送fun文件,这是通过将重命名的文件移动到各个目录,然后再移动回当前目录来实现的:[me@linuxbox playground]$ mv fun dir1

首先移到目录dir1下,然后:[me@linuxbox playground]$ mv dir1/fun dir2

将文件从目录dir1移到dir2,然后:[me@linuxbox playground]$ mv dir2/fun .

再将文件fun重新移到当前工作目录下。下面来看mv命令的效果。首先,再次将数据文件移到目录dir1。[me@linuxbox playground]$ mv fun dir1

然后将目录dir1移到dir2并且使用ls命令进行确认。[me@linuxbox playground]$ mv dir1 dir2[me@linuxbox playground]$ ls -l dir2total 4drwxrwxr-x 2 me me 4096 2012-01-11 06:06 dir1[me@linuxbox playground]$ ls -l dir2/dir1total 4-rw-r--r-- 1 me me 1650 2012-01-10 16:33 fun

注意,因为目录dir2已经存在,mv命令将目录dir1移到dir2。如果dir2不存在,mv将dir1重命名为dir2。最后,我们将所有东西放回原处。[me@linuxbox playground]$ mv dir2/dir1 .[me@linuxbox playground]$ mv dir1/fun .

4.7.4 创建硬链接

现在,我们试着创建一些链接。首先是创建硬链接,我们先按照如下方式创建一些指向数据文件的链接:[me@linuxbox playground]$ ln fun fun-hard[me@linuxbox playground]$ ln fun dir1/fun-hard[me@linuxbox playground]$ ln fun dir2/fun-hard

目前有4个文件fun的实例。来看一下playground目录。[me@linuxbox playground]$ ls -ltotal 16drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir1drwxrwxr-x 2 me me 4096 2012-01-14 16:17 dir2-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-rw-r--r-- 4 me me 1650 2012-01-10 16:33 fun-hard

可以注意到,在列表中,文件fun和fun-hard的第二个字段都是4,

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载