对于初学者而言本系列文章许多内容都很新颖而更有经验 Linux 用户可能会发现本教程是使他们基本 Linux 技能“炉火纯青”有效途径
介绍 bash
shell
如果您使用过 Linux 系统那么您知道当登录时将会看到像这样提示符:
您所看到特殊提示符可能看起来很不样它可能包含系统主机名、当前工作目录名或者两者都有但是不管这个特殊提示符看起来像什么有件事是肯定打印出这个提示符叫“shell”极有可能您特殊 shell 是个叫 bash
您在运行 bash 吗?
您可以通过输入下面命令来检查您是否正在运行 bash:
如果上面命令行报错或者不会类似地响应我们举例那么您可能正在运行个区别于 bash shell
有关 bash
Bash 是“Bourne-again shell”首字母缩写它是大多数 Linux 系统缺省 shellshell 任务是执行您命令使您能够和 Linux 系统进行交互当您输完命令您可以通知 shell 执行 exit 或 logout 命令在此您将返回到登录提示符顺便提下您还可以通过在 bash 提示符下按 control-D 来注销
使用“cd”
您可能已经发现目不转睛地盯着bash提示符可不是世界上最让人感到有劲事那么让我们来开始用 bash 来浏览我们文件系统在提示符下输入下面命令(不包括 $):
我们只告诉 bash 您想在 /(也称为根目录)中工作;系统上所有目录形成棵树/ 被认为是这棵树顶部或者是根cd设置当前您正在工作目录也称为“当前工作目录”
路径
要看 bash 当前工作目录您可以输入:
在上面举例中cd / 参数叫做路径它告诉 cd 我们要转到什么地方特别是/ 参数是个绝对路径意味着它指定了相对于文件系统树根位置绝对路径这里有几个其它绝对路径:
您可以看到所有绝对路径有个共同点就是它们都以/开头通过路径/usr/local/bin我们告诉 cd 进入 / 目录接着进入这个目录的下usr目录然后再进入 local 和 bin绝对路径总是通过是否以 / 开头来判断
相对路径
另种路径叫相对路径在 Bash 中cd 以及其它命令总是解释那些相对于当前目录路径相对路径绝不会以 / 开头这样如果我们在 /usr 中:
那么我们可以使用相对路径来转到 /usr/local/bin 目录:
使用“..”
相对路径还可以包含个或多个 .. 目录.. 目录是指向父目录专门目录那么继续前面举例:
您可以看到现在我们当前目录是 /usr/local我们能够“后退”到相对于我们所在当前目录个目录此外我们还可以将 \\\\\"..\\\\\\" 添加到个现有相对路径中使我们可以进入和我们已在目录并排目录例如:
相对路径举例
相对路径可以变得相当复杂这里有几个举例所有都没有显示出结果目标路径请试着推断下输入这些命令后您最终将会转到什么地方:
现在试验次看看您推断是否正确
理解“.”
在我们结束 cd 介绍的前我们还需要讨论些更多内容首先还有另个叫 . 专门目录它表示“当前目录”然而该目录不为 cd 命令使用它通常用来执行些当前目录中如下所示:
cd 和主目录
如果我们想要转到主目录我们可以输入:
/home/username但是如果我们想要指定个主目录中文件将会怎样呢?可能我们想要将个文件参数传给 myprog 命令如果该文件在主目录中我们可以输入:
使用 Linux 命令
介绍 \" ls \"
现在我们将快速地看看 ls 命令很可能您已经很熟悉 ls并且知道只输入 ls 本身将列出当前工作目录内容: $">[b]通过指定 -a 选项您可以看到目录中所有文件包括隐藏文件 — 那些以 . 开头文件您可以在下面举例中看到ls -a 将显示 . 和 .. 专门目录链接:$">[b]递归和索引节点清单
您可以使用 -d 来查看目录本身而您还可以用 -R 来完成相反工作 — 不仅只查看个目录内部而且要递归地查看该目录内所有目录内部!我们将不会有对应该选项任何举例输出(它般占很大篇幅)但是为了感觉下它是怎样工作您可以试几个 ls -R 和 ls -Rl 命令最后ls -i 选项可以用来在清单中显示文件系统对象索引节点号:
文件系统每个对象都分配到个独无 2索引叫做索引节点号这可能看起来微不足道但是理解索引节点对于理解许多文件系统操作来说很重要例如请考虑出现在每个目录中 . 和 .. 链接为了完全理解 .. 目录实际上是什么我们将先来看看 /usr/local 索引节点号:
现在我们发现索引节点 5120实际上是这个目录并且我们发现了指向该索引节点两个目录条目(叫做“链接”)/usr/local 和 /usr/local/bin/..都链接到索引节点 5120虽然索引节点 5120 只在磁盘中地方存在但是多个目录条目都链接到它上面事实上通过使用 ls -dl 命令我们可以看到索引节点 5120 被引用总次数
mkdir
我们来快速地看看 mkdir 命令它可以用来创建新目录下面举例创建了 3个新目录:tic、tac 和 toe都在 /tmp 下:
然而mkdir有个很方便-p选项该选项告诉mkdir创建所有缺少父目录如下所示:
touch
现在我们将要快速地看看 cp 和 mv 命令这些命令用来复制、重命名以及移动文件和目录为了开始该概述我们将首先用 touch 命令在 /tmp 中创建个文件:
echo 和重定向
既然文件存在我们来把些数据添加到文件中我们可以使用echo命令来完成它带有自己参数并且把这些参数打印到标准输出首先单独 echo 命令是这样:
为了在终端显示文件内容要使用 cat 命令:
现在我们可以使用 cp 命令基本来由原始 copyme 文件创建 copiedme 文件:
通过观察我们发现它们确实是相互独立文件;它们索引节点号区别:
mv
现在我们来用“mv”命令将“copiedme”重命名为“movedme”其索引节点号将仍然是同个;但是指向该索引节点文件名将改变
只要目标文件和源文件驻留在同文件系统上被移动文件索引节点号就将仍然不变在本教程系列第 3 部分我们将进步看下文件系统
创建链接和删除文件
硬链接
当谈及目录条目和索引节点的间关系时我们提到了链接这个术语Linux 实际有两种链接到此为止我们所讨论这种链接叫硬链接个给定索引节点可以有任意数目硬链接该索引节点直存在于文件系统直到所有硬链接消失可以使用 ln 命令来创建新硬链接
您可以看到硬链接工作于索引节点级别指向特殊文件在 Linux 系统上硬链接有几个局限性第您只能给文件建立硬链接而不能给目录建立硬链接确如此;即便 . 和 .. 是系统给目录创建硬链接也不允许您(“root”用户也不行)创建任何您自己硬链接
硬链接第 2个局限性是它们不能跨文件系统这意味着如果您 / 和 /usr 存在于区别文件系统您不能创建从 /usr/bin/bash 到 /bin/bash 链接
实际上符号链接(symbolic link或“symlinks”)比硬链接更常用到符号链接是种专门文件类型在这种文件类型中链接通过名称引用另个文件而不是直接引用索引节点符号链接不阻止文件被删除;如果目标文件消失那么符号链接仅仅是不可用或“被破坏”
通过将 -s 选项传给 ln可以创建符号链接
在 ls -l 输出中可以用 3种方式区分符号链接和般文件第请注意第栏包含个 l 输出表明是符号链接第 2符号链接大小是目标文件(本例是 secondlink)数第 3输出最后栏显示目标文件名
符号链接通常比硬链接更灵活您可以给任何类型文件系统对象(包括目录)创建符号链接又符号链接实现是基于路径(而不是索引节点)所以创建指向另个文件系统上对象符号链接是完全可行但是这事实也使符号链接理解起来很复杂请考虑我们想要在/tmp中创建个指向/usr/local/bin链接情况我们应该输入:
或者还可以输入:
您可以看到两个符号链接都指向同目录但是如果我们第 2个符号链接在任何时刻被移动到另个目录由于相对路径缘故它将遭到“破坏”
/tmp/usr/local/bin这个目录不存在我们不能再把目录转到bin2;换句话说bin2 现在被破坏了
由于这个原因有时避免用相对路径信息来创建符号链接是个好主意但是在许多情况下相对符号链接很管用请考虑个举例在这个举例中您想要给 /usr/bin 中个创建个别名:
作为 root 用户您可能想要给“keychain”创建个别名比如“kc”在这个举例中我们有 root 访问权由 bash 提示符改变为“#”可以证明我们的所以需要 root 访问权是般用户不能在 /usr/bin 中创建文件作为 root 用户我们可以像下面这样给 keychain 创建个别名:
当这个解决思路方法起作用时如果我们想要把两个文件都移到 /usr/local/bin 时它将会出现问题
在符号链接中我们使用了绝对路径而我们kc符号链接仍然指向/usr/bin/keychain它已不存在了——另个被破坏符号链接符号链接中相对路径和绝对路径都各具优点您应该使用适合于您特殊应用路径类型般情况下相对路径或绝对路径都能工作得很好在这种情况下下面举例将起作用:
既然我们知道怎样使用 cp、mv 和 ln现在我们该学习怎样把对象从文件系统中删除了通常这用 rm 命令来完成要删除文件只需在命令行中指定它们:
rmdir
要删除目录您有两种选择您可以删除目录中所有对象然后使用 rmdir 来删除目录本身:
rm 和目录
或者您可以使用 rm 命令 recursive force选项来告诉rm删除您指定目录以及目录中包含所有对象:
般情况下rm -rf 是删除目录树首选思路方法在使用 rm -rf 时要十分小心它功能可以被很好地利用也可能会因使用不当造成恶果
介绍通配符
在您日常 Linux 使用中有很多时候您可能需要次对多个文件系统对象执行单操作(比如 rm)在这些情况下在命令行中输入许多文件通常让人感到厌烦为了解决这个问题您可以利用 Linux 内置通配符支持这种支持也叫做“globbing”(由于历史原因)允许您通过使用通配符模式次指定多个文件
Bash 和其它 Linux 命令将通过在磁盘上查找并找到任何和的匹配文件来解释这种模式因此如果在当前工作目录中您有从 file1 到 file8 文件那么您可以输入下面命令来删除这些文件:
或者如果您只想要删除文件名以 file 开头所有文件您可以输入:
理解不匹配
或者如果您想要列出 /etc 中以 g 开头所有文件系统对象您可以输入:
现在如果您指定了没有任何文件系统对象和的匹配模式会如何样呢?在下面举例中我们试图列出 /usr/bin 中以 asdf 开头并且以 jkl 结尾所有文件:
这里是对所发生情况介绍说明通常当我们指定种模式时该模式和底层系统上个或多个文件匹配bash 以空格隔开所有匹配对象列表来替换该模式
但是当模式不能找到匹配对象时bash 将不理会参数、通配符等等保留原样因此当“ls”不能找到文件 /usr/bin/asdf*jkl 时它会报错此处有效规则是:glob 模式只在和文件系统中对象匹配时才可以进行扩展
最新评论