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

Unix风格的目录结构一般使用一个目录名列表并用正斜杠分隔来表示,这样咱们能够结合ls命令:ruby

$ 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目录最终都是根目录/(读做斜杠)的子目录,斜杠暗示领导和分隔。注意: 将反斜杠错用为正斜杠会带来许多痛苦,要严格避免这种错误。code

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

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

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'没有成功。
get

图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的差异是什么?(若是有的话)it

相关文章
相关标签/搜索