Unix风格的目录结构通常使用一个目录名列表并用正斜杠分隔来表示,这样我们可以结合ls命令:

$ ls /Users/mhartl/ruby

或者

$ ls /usr/local/bin

正如图20,这些表示对应的目录在一个分层的文件系统,图上意思即使mhartl是Users的子目录,而ruby是mhartl的子目录。

图20:文件夹或目录间的对应

当谈起这些目录时根据规范会有不同: 像/Users/mhartl的用户目录可以读作'斜杠 users斜杠mhartl'或者'斜杠users mhartl',省略原来的斜杆在发音时很常见,比如系统目录,'/usr/local/bin',发音可能是'user local bin'.由于所有的Unix目录最终都是根目录/(读作斜杠)的子目录,斜杠暗示领导和分隔。注意: 将反斜杠错用为正斜杠会带来许多痛苦,要严格避免这种错误。

对一个特殊的用户来说最重要的目录是home目录,在我的macOS系统上是/Users/mhartl,对应我的用户名(mhartl)。home目录可以被指定为绝对路径,如/Users/mhartl,也可以使用home目录的简写,即波浪线符号~(用shift加反撇号输入, 在多数键盘中位于数字1的左边)。所以在图20中显示的两种路径都是一样的:/Users/mhartl/ruby/projects与/ruby/projects一样。(有趣地是,使用波浪符号代替Home目录的原因仅是因为在早先的一些键盘中"Home"键和""键是同一个。)

除了用户目录,每个Unix系统都有程序必须的系统目录用于计算机正常操作。修改系统文件或目录需要管理员权限,也叫root.(这里的"root"与上面提到的根目录没有关系。)管理员的权限太大,所以以root身份登录对文件可以轻易操作不太好;相反,要以root身份执行任务通常使用sudo命令。(Box 11)

Box11. “sudo 让我TODO======”

sudo 让普通用户拥有超级管理员权限。例如, 尝试在系统目录/opt目录中创建一个文件,如下:

$ touch /opt/foo

touch: /opt/foo: Permission denied

因为普通用户没有权限修改/opt,所以命令执行失败了,但若加上sudo命令就可以执行成功:

$ sudo touch /opt/foo

Password:

正如上面显示的, 输入sudo之后,我们被提示输入用户密码,如果正确输入并且用户被赋予sudo的特权(在大多数桌面Unix系统上),那么命令会被成功执行。如图21中,开始这个模式被否认,只有使用了sudo后才能成功执行,这是计算时的共同话题。

为了验证该文件真的被创建了,可以用ls检查:

$ ls -l /opt/foo

-rw-r--r-- 1 root wheel 0 Jul 23 19:13 /opt/foo

注意普通用户可以在系统目录里ls文件(不需要sudo)而且root的名字也在列表中,表示管理员拥有该文件。(第二个术语wheel的意思有一点模糊,但是你可以在管理员这个网站上学习它。)

为了删除刚刚创建的文件,需要再次回到管理员状态:

$ rm -f /opt/foo

rm: /opt/foo: Permission denied

$ sudo !!

$ !ls

ls: /opt/foo: No such file or directory

上面的示例中第一次执行rm失败了,所以再运行sudo !!,该命令运行sudo接着之前的命令,紧跟着我们使用!ls,该命令执行了前一条ls的命令(Box9).

在英语发音中像sudo !!没有任何意义,这在语言交流时非常重要。正如Box9中提及到的,!!读作"bang bang".然而sudo读作'SOO-doo'或'SOO-doh'.两种发音都很常见。因此,我更喜欢将'sudo !!'读作"SOO-doo bang bang".

顺便提下,su在sudo原本的意义中是'super-user',但是后来被扩展使用了, 现在通常认做是'substitute user'(代替用户)。sudo因此就是“substitute user do”(代替用户执行)的结合,即默认地用户代替管理员。由于管理员可以做任何事,在图21中的命令‘sudo make me a sandwich’成功执行了,而'make me a sandwich'没有成功。

图21: “[Sandwich](https://m.xkcd.com/149/)”(from [xkcd](https://xkcd.com/))sudo 行为的幽默

练习

1.写下你对目录~/foo/bar的发音单词。

2.在/Users/bill/sonnets该文件中,哪个是home目录?哪个是用户名?在这个等级结构中哪个是最深的目录?

3.对于一个用户名为bill的用户,/Users/bill/sonnets和~/sonnets的差别是什么?(如果有的话)

4.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—目录结构的更多相关文章

  1. 4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—目录

    我们已经学习过许多处理文件的Unix工具,现在是时候来学习目录了,也就是文件夹(图20).正如我们所见,许多在文件中的开发思想也适用于目录,但同样也有许多区别.

  2. 4.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)—链接到目录

    在4.2章中我们已经会用cd进入到指定的目录中.这是导航最常见的用途之一,但是它还有几个值得关注的用途.第一个是使用cd ..(读作'see-dee 点点')返回当前目录级别的上一级: $ pwd / ...

  3. 2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——操作文件

    已经学习了基本的命令,现在是时候学习操作文件了,这也是命令行的重要任务.还是基于本教程的事先规定,本教程是入门级的,不要求熟悉类似编辑文本的程序(这些文本编辑程序,将在下个系列教程中介绍, Learn ...

  4. 1.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——运行终端

    终端是个允许我们运行命令行的程序,运行命令前,先打开它.在MacOS系统上,可以使用macOS应用 Spotlight来打开终端窗口,Spotlight也有其他两种方式触发,一种是键入⌘␣(comma ...

  5. 1.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——手册页

    我们运行的命令行程序,通常在技术上称作shell, 它包含了一个非常强大(也很神秘)的工具,我们将用它来学习更多可用的命令.这个工具本身就是个称作'man'的命令('manual'的简写).它的参数是 ...

  6. 3.1《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——下载文件

    首先,为了不手动创建一个长文件(这太麻烦了),我们将使用强大的curl(有时也写作"cURL")工具从网上下载一个文件,这个命令可以让命令行与URL交互.尽管这不是Unix核心命令 ...

  7. 2.3《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——重命名,复制,删除

    最常用的文件操作除了将文件列出来外,就应该是重命名,复制,删除了.正如将文件列出来一样,大多数现代操作系统为这些任务提供了用户图形界面,但是在许多场景中,用命令行还是会更方便. 使用mv命令重命名一个 ...

  8. 1.2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——开始第一条命令

    现在开始准备运行我们的第一条命令了,在屏幕上打印'hello'.(字符打印的地方被称为'标准输出',通常指的是屏幕,很少指真的物理打印机设备).这条命令就是echo,这条命令的参数是想要输出的字符串或 ...

  9. 1.4《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——编辑命令

    在编辑模式中,命令行包括几个重复之前命令的功能.这些以及其他很多命令功能时常设计键盘上的特殊键,所以给出Table 1作为参考,给出了许多键在典型的Macintosh键盘上的标记符号.若你的键盘不太一 ...

随机推荐

  1. 从零开始学习html(八)CSS选择器——上

    一.什么是选择器? <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...

  2. sqlserver配置实践

    对于一套新的sqlserver服务器,我们首先要对它做一些必要的优化配置,确保在生产上比较长的时间段内可以比较稳定的,良好的运行. 新的sqlserver服务器上安装的sqlserver版本,可以选择 ...

  3. Oracle 中 流程控制函数 decode用法

    函数介绍 DECODE函数是ORACLE PL/SQL的功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其它数据库厂商的SQL实现还没有此功能. DECODE有什么用途呢?先构造一 ...

  4. Chrome Inspect调试stetho出现空白的解决方法

    stetho可以使用chrome调试webview,有网友反映国内不行,亲测了一下是有解决方法的: Chrome://inspect 打开后会发现stetho的页面: 点击inspect,如果没有Fa ...

  5. echart参数设置——曲线图

    { title: { text: '请求返回码分布', subtext: '实时数据' }, tooltip: { trigger: 'axis', position: function (point ...

  6. .NET 控制Windows文件和目录访问权限研究(FileSystemAccessRule)

    前一段时间学习了.net 控制windows文件和目录权限的相关内容,期间做了一些总结.想把这方面的研究跟大家分享,一起学习.其中不免得有些用词不太标准的地方,希望大家留言指正,我加以修改. 首先,我 ...

  7. [20180327]行迁移与ITL浪费.txt

    [20180327]行迁移与ITL浪费.txt --//生产系统遇到的一个问题,增加一个字段到表结构,修改数据字典,导致出现行迁移,而更加严重的是没有修改pctfree值,--//以后的业务操作,依旧 ...

  8. [20170914]tnsnames.ora的管理.txt

    [20170914]tnsnames.ora的管理.txt --//昨天朋友讲tnsnams.ora的内容太长了,而且许多不需要的.管理不方便.我记得以前写[20150409]tnsnames.ora ...

  9. gridview导excel及解决导出中文乱码的方法

    要全部展示数据,所以导出时要先将翻页取消,重新绑定数据:gridview的allowpaging属性设置为false,然后databind()一下 <%@ Page Language=" ...

  10. webApi core2 DI通过代码来获取容器里面已注入的对象

    请求服务 来自 HttpContext 的一次 ASP.NET 请求中可用的服务通过 RequestServices 集合公开的. 请求服务将你配置的服务和请求描述为应用程序的一部分.当你的对象指定依 ...