从零开始Linux基础教程之命令的使用.docx
- 文档编号:6005416
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:11
- 大小:22.41KB
从零开始Linux基础教程之命令的使用.docx
《从零开始Linux基础教程之命令的使用.docx》由会员分享,可在线阅读,更多相关《从零开始Linux基础教程之命令的使用.docx(11页珍藏版)》请在冰豆网上搜索。
从零开始Linux基础教程之命令的使用
从零开始:
Linux基础教程之命令的使用
介绍bash
shell
如果您使用过Linux系统,那么您知道当登录时,将会看到像这样的提示符:
$
您所看到的特殊的提示符可能看起来很不一样。
它可能包含系统的主机名、当前的工作目录名,或者两者都有。
但是不管这个特殊的提示符看起来像什么,有一件事是肯定的。
打印出这个提示符的程序叫“shell”,极有可能您的特殊的shell是一个叫bash的程序。
您在运行bash吗?
您可以通过输入下面的命令来检查您是否正在运行bash:
$echo$SHELL
/bin/bash
如果上面的命令行报错或者不会类似地响应我们的示例,那么您可能正在运行一个不同于bash的shell。
关于bash
Bash是“Bourne-againshell”的首字母缩写,它是大多数Linux系统缺省的shell。
shell的任务是执行您的命令,使您能够与Linux系统进行交互。
当您输完命令,您可以通知shell执行exit或logout命令,在此您将返回到登录提示符。
顺便提一下,您还可以通过在bash提示符下按control-D来注销。
使用“cd”
您可能已经发现,目不转睛地盯着bash提示符可不是世界上最让人感到有劲的事。
那么,让我们来开始用bash来浏览我们的文件系统。
在提示符下,输入下面的命令(不包括$):
$cd/
我们只告诉bash您想在/(也称为根目录)中工作;系统上的所有目录形成一棵树,/被认为是这棵树的顶部,或者是根。
cd设置当前您正在工作的目录,也称为“当前工作目录”。
路径
要看bash的当前工作目录,您可以输入:
$pwd
/
在上面的示例中,cd的/参数叫做路径。
它告诉cd我们要转到什么地方。
特别是,/参数是一个绝对路径,意味着它指定了相对于文件系统树的根的位置。
绝对路径这里有几个其它的绝对路径:
/dev
/usr
/usr/bin
/usr/local/bin
您可以看到,所有绝对路径有一个共同点就是,它们都以/开头。
通过路径/usr/local/bin,我们告诉cd进入/目录,接着进入这个目录之下的usr目录,然后再进入local和bin。
绝对路径总是通过是否以/开头来判断。
相对路径
另一种路径叫相对路径。
在Bash中,cd以及其它命令总是解释那些相对于当前目录的路径。
相对路径绝不会以/开头。
这样,如果我们在/usr中:
$cd/usr
那么,我们可以使用相对路径来转到/usr/local/bin目录:
$cdlocal/bin
$pwd
/usr/local/bin
使用“..”
相对路径还可以包含一个或多个..目录。
..目录是指向父目录的专门目录。
那么,继续前面的示例:
$pwd
/usr/local/bin
$cd..
$pwd
/usr/local
您可以看到,现在我们的当前目录是/usr/local。
我们能够“后退”到相对于我们所在的当前目录的一个目录。
此外,我们还可以将\\\\\"..\\\\\\"添加到一个现有的相对路径中,使我们可以进入与我们已在目录并排的目录,例如:
$pwd
/usr/local
$cd../share
$pwd
/usr/share
相对路径示例
相对路径可以变得相当复杂。
这里有几个示例,所有的都没有显示出结果的目标路径。
请试着推断一下,输入这些命令后,您最终将会转到什么地方:
$cd/bin
$cd../usr/share/zoneinfo
$cd/usr/X11R6/bin
$cd../lib/X11
$cd/usr/bin
$cd../bin/../bin
现在,试验一次,看看您的推断是否正确。
理解“.”
在我们结束cd的介绍之前,我们还需要讨论一些更多的内容。
首先,还有另一个叫.的专门的目录。
它表示“当前目录”。
然而该目录不为cd命令使用,它通常用来执行一些当前目录中的程序,如下所示:
$./myprog
在上面的示例中,驻留在当前工作目录中的myprog可执行文件将被执行。
cd和主目录
如果我们想要转到主目录,我们可以输入:
$cd
没有参数,cd将转到主目录,对于超级用户来说是/root,对于一般用户来说通常是
/home/username。
但是,如果我们想要指定一个主目录中的文件,将会怎样呢?
可能我们想要将一个文件参数传给myprog命令。
如果该文件在主目录中,我们可以输入:
$./myprog/home/drobbins/myfile.txt
但是,使用像这样的绝对路径并不总是很方便。
幸好,我们可以使用~(代字符)字符来完成同样的事:
$./myprog~/myfile.txt
其他用户的主目录Bash将把单独的~扩展为指向主目录,然而您还可以用它来指向其他用户的主目录。
例如,如果我们想要引用fred的主目录中的名为fredsfile.txt的文件,可以输入:
$./myprog~fred/fredsfile.txt
使用Linux命令
介绍\"ls\"
现在,我们将快速地看一看ls命令。
很可能,您已经很熟悉ls,并且知道只输入ls本身将列出当前工作目录的内容:
$">[b]通过指定-a选项,您可以看到目录中的所有文件,包括隐藏文件—那些以.开头的文件。
您可以在下面的示例中看到,ls-a将显示.和..专门的目录链接:
$">[b]递归和索引节点清单。
您可以使用-d来查看目录本身,而您还可以用-R来完成相反的工作—不仅只查看一个目录内部,而且要递归地查看该目录内所有的目录内部!
我们将不会有对应该选项的任何示例输出(因为它一般占很大的篇幅),但是为了感觉一下它是怎样工作的,您可以试几个ls-R和ls-Rl命令。
最后,ls的-i选项可以用来在清单中显示文件系统对象的索引节点号:
$ls-i/usr
1409X11R6314258i686-linux
43090libexec13394sbin
1417bin1513i686-pc-linux-gnu
5120local13408share
8316distfiles1517include
776man23779src
43doc1386info93892portage
36737ssl
70744gentoo-x861585lib5132
portage.old784tmp
理解索引节点,第1部分
文件系统的每个对象都分配到一个独一无二的索引,叫做索引节点号。
这可能看起来微不足道,但是理解索引节点对于理解许多文件系统操作来说很重要。
例如,请考虑出现在每个目录中的.和..链接。
为了完全理解..目录实际上是什么,我们将先来看一看/usr/local的索引节点号:
$ls-id/usr/local
5120/usr/local
/usr/local
目录有一个5120索引节点号。
现在,我们来看一看/usr/local/bin/..的索引节点号:
$ls-id/usr/local/bin/..
5120/usr/local/bin/..
您可以看到,/usr/local/bin/..具有和/usr/local相同的索引节点号!
这就是我们抓住的问题的实质。
过去,我们认为/usr/local是这个目录本身。
现在,我们发现索引节点5120实际上是这个目录,并且我们发现了指向该索引节点的两个目录条目(叫做“链接”)。
/usr/local和/usr/local/bin/..都链接到索引节点5120。
虽然索引节点5120只在磁盘中的一地方存在,但是多个目录条目都链接到它上面。
事实上,通过使用ls-dl命令,我们可以看到索引节点5120被引用的总次数
$ls-dl/usr/local
drwxr-xr-x8rootroot240Dec2220:
57/usr/local
如果我们看一看从左起的第二栏,我们可以看到目录/usr/local(索引节点5120)被引用了8次。
在我的系统中,引用该索引节点的不同路径有这些:
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
使用Linux命令
mkdir
我们来快速地看一看mkdir命令,它可以用来创建新目录。
下面的示例创建了三个新目录:
tic、tac和toe,都在/tmp下:
$cd/tmp
$mkdirtictactoe
缺省情况下,mkdir不会为您创建父目录;邻接的上一元素的完整路径必须存在。
因此,如果您想要创建目录won/der/ful,您将需要发出三个单独的mkdir命令:
$mkdirwon/der/ful
mkdir:
cannotcreatedirectory
`won/der/ful':
Nosuchfileordirectory
$mkdirwon
$mkdirwon/der
$mkdirwon/der/ful
mkdir-p
然而,mkdir有一个很方便的-p选项,该选项告诉mkdir创建所有缺少的父目录,如下所示:
$mkdir-peasy/as/pie
总之,非常简单。
要学习更多关于mkdir命令的知识,请输入manmkdir来阅读手册页。
除cd(它内置在bash中)之外,这几乎适用于这里所涉及的所有命令(比如manls)。
touch
现在,我们将要快速地看一看cp和mv命令,这些命令用来复制、重命名以及移动文件和目录。
为了开始该概述,我们将首先用touch命令在/tmp中创建一个文件:
$cd/tmp
$touchcopyme
如果文件存在,touch命令将更新文件的“mtime”(请回想ls-l输出中的第六栏)。
如果文件不存在,那么将创建一个新的空文件。
现在您应该有一个大小为零的/tmp/copyme文件。
echo和重定向
既然文件存在,我们来把一些数据添加到文件中。
我们可以使用echo命令来完成,它带有自己参数,并且把这些参数打印到标准输出。
首先,单独的echo命令是这样的:
$echo\"firstfile\"
firstfile
带有输出重定向的同样的echo命令为:
$echo\"firstfile\">copyme
大于符号告诉shell将echo的输出写到名为copyme的文件中。
如果该文件不存在,将创建这个文件;如果该文件存在,将覆盖这个文件。
通过输入ls-l,我们可以看到copyme文件为10个字节长,因为它包括firstfile这个词和换行符:
$ls-lcopyme
-rw-r--r--1rootroot10Dec2814:
13copyme
cat和cp
为了在终端显示文件的内容,要使用cat命令:
$catcopyme
firstfile
现在,我们可以使用cp命令的基本调用来由原始的copyme文件创建copiedme文件:
$cpcopymecopiedme
通过观察,我们发现它们确实是相互独立的文件;它们的索引节点号不同:
$ls-icopymecopiedme
648284copiedme650704copyme
mv
现在,我们来用“mv”命令将“copiedme”重命名为“movedme”。
其索引节点号将仍然是同一个;但是,指向该索引节点的文件名将改变。
$mvcopiedmemovedme
$ls-imovedme
648284movedme
只要目标文件和源文件驻留在同一文件系统上,被移动的文件的索引节点号就将仍然不变。
在本教程系列的第3部分,我们将进一步看一下文件系统。
创建链接和删除文件
硬链接
当谈及目录条目和索引节点之间关系时,我们提到了链接这个术语。
Linux实际有两种链接。
到此为止我们所讨论的这种链接叫硬链接。
一个给定的索引节点可以有任意数目的硬链接,该索引节点一直存在于文件系统,直到所有的硬链接消失。
可以使用ln命令来创建新的硬链接
$cd/tmp
$touchfirstlink
$lnfirstlinksecondlink
$ls-ifirstlinksecondlink
15782firstlink15782secondlink
您可以看到,硬链接工作于索引节点级别,指向特殊的文件。
在Linux系统上,硬链接有几个局限性。
第一,您只能给文件建立硬链接,而不能给目录建立硬链接。
的确如此;即便.和..是系统给目录创建的硬链接,也不允许您(“root”用户也不行)创建任何您自己的硬链接。
硬链接的第二个局限性是它们不能跨文件系统。
这意味着,如果您的/和/usr存在于不同的文件系统,您不能创建从/usr/bin/bash到/bin/bash的链接。
符号链接
实际上,符号链接(symboliclink,或“symlinks”)比硬链接更常用到。
符号链接是一种专门的文件类型,在这种文件类型中,链接通过名称引用另一个文件,而不是直接引用索引节点。
符号链接不阻止文件被删除;如果目标文件消失,那么符号链接仅仅是不可用,或“被破坏”。
通过将-s选项传给ln,可以创建符号链接。
$ln-ssecondlinkthirdlink
$ls-lfirstlinksecondlinkthirdlink
-rw-rw-r--2agriffisagriffis0Dec3119:
08firstlink
-rw-rw-r--2agriffisagriffis0Dec3119:
08secondlink
lrwxrwxrwx1agriffisagriffis10Dec3119:
39thirdlink->secondlink
在ls-l输出中,可以用三种方式区分符号链接和一般文件。
第一,请注意第一栏包含一个l字符的输出表明是符号链接。
第二,符号链接的大小是目标文件(本例是secondlink)的字符数。
第三,输出的最后一栏显示目标文件名。
符号链接通常比硬链接更灵活。
您可以给任何类型的文件系统对象(包括目录)创建符号链接。
又因为符号链接的实现是基于路径的(而不是索引节点),所以创建指向另一个文件系统上的对象的符号链接是完全可行的。
但是,这一事实也使符号链接理解起来很复杂。
请考虑我们想要在/tmp中创建一个指向/usr/local/bin的链接的情况。
我们应该输入:
$ln-s/usr/local/binbin1
$ls-lbin1
lrwxrwxrwx1rootroot14Jan115:
42bin1->/usr/local/bin
或者还可以输入:
$ln-s../usr/local/binbin2
$ls-lbin2
lrwxrwxrwx1rootroot16Jan115:
43bin2->../usr/local/bin
您可以看到,两个符号链接都指向同一目录。
但是,如果我们的第二个符号链接在任何时刻被移动到另一个目录,由于相对路径的缘故,它将遭到“破坏”。
$ls-lbin2
lrwxrwxrwx1rootroot16Jan115:
43bin2->../usr/local/bin
$mkdirmynewdir
$mvbin2mynewdir
$cdmynewdir
$cdbin2
bash:
cd:
bin2:
Nosuchfileordirectory
因为/tmp/usr/local/bin这个目录不存在,我们不能再把目录转到bin2;换句话说,bin2现在被破坏了。
由于这个原因,有时避免用相对路径信息来创建符号链接是个好主意。
但是,在许多情况下,相对的符号链接很管用。
请考虑一个示例,在这个示例中您想要给/usr/bin中的一个程序创建一个别名:
#ls-l/usr/bin/keychain
-rwxr-xr-x1rootroot10150Dec1220:
09/usr/bin/keychain
作为root用户,您可能想要给“keychain”创建一个别名,比如“kc”。
在这个示例中,我们有root访问权,由bash提示符改变为“#”可以证明。
我们之所以需要root访问权是因为一般用户不能在/usr/bin中创建文件。
作为root用户,我们可以像下面这样给keychain创建一个别名:
#cd/usr/bin
#ln-s/usr/bin/keychainkc
当这个解决方法起作用时,如果我们想要把两个文件都移到/usr/local/bin时,它将会出现问题。
#mv/usr/bin/keychain
/usr/bin/kc/usr/local/bin
因为在符号链接中,我们使用了绝对路径,而我们的kc符号链接仍然指向/usr/bin/keychain,它已不存在了——另一个被破坏的符号链接。
符号链接中的相对路径和绝对路径都各具优点,您应该使用适合于您的特殊应用的路径类型。
一般情况下,相对路径或绝对路径都能工作得很好。
在这种情况下,下面的示例将起作用:
#cd/usr/bin
#ln-skeychainkc
#ls-lkc
lrwxrwxrwx1rootroot8Jan512:
40kc->keychain
rm
既然我们知道怎样使用cp、mv和ln,现在我们该学习怎样把对象从文件系统中删除了。
通常,这用rm命令来完成。
要删除文件,只需在命令行中指定它们:
$cd/tmp
$touchfile1file2
$ls-lfile1file2
-rw-r--r--1rootroot0Jan116:
41file1
-rw-r--r--1rootroot0Jan116:
41file2
$rmfile1file2
$ls-lfile1file2
ls:
file1:
Nosuchfileordirectory
ls:
file2:
Nosuchfileordirectory
rmdir
要删除目录,您有两种选择。
您可以删除目录中所有的对象,然后使用rmdir来删除目录本身:
$mkdirmydir
$touchmydir/file1
$rmmydir/file1
$rmdirmydir
rm和目录
或者,您可以使用rm命令的recursiveforce选项来告诉rm删除您指定的目录以及目录中包含的所有对象:
$rm-rfmydir
一般情况下,rm-rf是删除目录树的首选方法。
在使用rm-rf时要十分小心,因为它的功能可以被很好地利用,也可能会因使用不当造成恶果。
介绍通配符
在您日常的Linux使用中,有很多时候您可能需要一次对多个文件系统对象执行单一操作(比如rm)。
在这些情况下,在命令行中输入许多文件通常让人感到厌烦,为了解决这个问题,您可以利用Linux内置的通配符支持。
这种支持也叫做“globbing”(由于历史原因),允许您通过使用通配符模式一次指定多个文件。
Bash和其它Linux命令将通过在磁盘上查找并找到任何与之匹配的文件来解释这种模式。
因此,如果在当前工作目录中,您有从file1到file8的文件,那么您可以输入下面的命令来删除这些文件:
$rmfile[1-8]
或者,如果您只想要删除文件名以file开头的所有文件,您可以输入:
$rmfile*
理解不匹配
或者,如果您想要列出/etc中以g开头的所有文件系统对象,您可以输入:
$ls-d/etc/g*
/etc/gconf/etc/ggi/etc/gimp/etc/gnome
/etc/gnome-vfs-mime-magic/etc/gpm
/etc/group/etc/group-
现在,如果您指定了没有任何文件系统对象与之匹配的模式,会怎么样呢?
在下面的示例中,我们试图列出/usr/bin中以asdf开头并且以jkl结尾的所有文件:
$ls-d/usr/bin/asdf*jkl
ls:
/usr/bin/asdf*jkl:
Nosuchfileordirectory
这里是对所发生情况的说明。
通常,当我们指定一种模式时,该模式与底层系统上的一个或多个文件匹配,bash以空格隔开的所有匹配对象的列表来替换该模式。
但是,当模式不能找到匹配对象时,bash将不理会参数、通配符等等,保留原样。
因此,当“ls”不能找到文件/usr/bin/asdf*jkl时,它会报错。
此处的有效的规则是:
glob模式只在与文件系统中的对象匹配时才可以进行扩展。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 从零开始 Linux 基础教程 命令 使用