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. 【代码笔记】Web-ionic tab(选项卡)

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  2. 导入数据到MongoDB中

    import sys import json import pymongo import datetime from pymongo import MongoClient client = Mongo ...

  3. CloudSim源代码学习——云数据中心(Datacenter)

    package org.cloudbus.cloudsim; import java.text.DecimalFormat;//十进制 import java.util.ArrayList; impo ...

  4. K邻近分类算法

    # -*- coding: utf-8 -*- """ Created on Thu Jun 28 17:16:19 2018 @author: zhen "& ...

  5. 基于VMware Workstation在Windows Server 2008 R2上搭建SQL Server 2012高可用性组(AlwaysOn Group)测试环境(二)

    接上篇: 以SERVER02为例,将服务器加入域,并安装故障转移群集:(SERVER02-SERVER-04操作相同)

  6. 【HANA系列】SAP HANA XS使用Data Services查询CDS实体【二】

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Dat ...

  7. CSS| 框模型-border

    CSS 边框属性

  8. Mysql基础之 ALTER命令

    ALTER命令: 作用:当我们修改数据库的列属性.列名称.表名等,要使用ALTER命令 教程: 1.首先是我们创建一个数据库以及一张表 mysql> create table exercise( ...

  9. ES5数组的遍历方式

    /* 遍历数组 */ var arr=[1,2,3,43,55,66,77,99]; /* 遍历数组 function(item,index) */ arr.forEach(function(item ...

  10. IO流(字节流,字符流,缓冲流)

    一:IO流的分类(组织架构) 根据处理数据类型的不同分为:字节流和字符流 根据数据流向不同分为:输入流和输出流   这么庞大的体系里面,常用的就那么几个,我们把它们抽取出来,如下图:   二:字符字节 ...