这个附录是一个超快的命令行入门,你可以在一两天内读完这部分内容,这里不会教你命令行的高级应用。
这个附录会教你如何使用命令行来让你的计算机完成一些任务。作为一个快速入门,它的详细程度和我写的别的教程自然无法相比。它只是为了让你拥有基本足够的能力,从而可以开始像真正的程序员一样使用计算机。读完这个附录以后,你将学会命令行使用者每天接触的大部分基本命令,而且你将能基本理解目录以及一些别的概念。
我给你的唯一一个建议是:废话少说,动手把这些都录入进去。
话是刻薄了点儿,但这就是你需要做的。如果你对命令行有一种非理性的恐惧,克服恐惧的唯一办法就是废话少说,和它斗到底。
你不会把自己的计算机弄坏。你不会被抓起来关到微软总部的底下秘密监牢里。你的朋友不会笑话你是个计算机呆子。所有那些害怕命令行的理由,你都忽略掉吧。
为什么呢?因为如果要学习编程,你就必须学习命令行。编程语言是控制计算机的进阶方式,命令行则算是编程语言的小弟。一旦越过这道坎,你就可以继续学习编程,并且你会感觉到,你买的这台沉甸甸的机器总算真正属于你了。
最好的办法是照下面的方法来做。
在做每一个练习的过程中都重复上述步骤,记录你遇到的问题,然后回头尝试回答自己的问题。等你完成之后,你对命令行的了解将大大超过自己的预期。
在一切开始之前先提醒你一下,我会马上让你开始记一些东西。这是让你上手的最快方法。对某些人来说,记东西是很痛苦的一件事情。这就需要你披荆斩棘,坚持到底。学东西的时候记是一个很重要的技能,所以你要克服自己的恐惧。
现在告诉你怎样记东西。
还有一些别的记忆技巧,比如你可以把要记的东西写在一张纸上,然后贴在浴室的墙上。当你洗澡的时候,你可以试着不看答案回想你的学习内容,如果在哪里卡住了,你可以瞟一眼答案刷新一下记忆。
如果每天都照着上面的步骤做,你应该在一周或者最多一个月的时间内记住这些东西。一旦记忆的工作完成了,其他的一切就更容易了,这也是记的目的。记不是为了让你理解抽象概念,而是让你把细节印在大脑里,下次遇到时就不用去想它了。一旦你记住了这些基础知识,它们就不再会是你学习更高级的抽象概念的阻碍了。
这个附录将带领你做以下3件事情。
对于这个练习,你的目的是打开自己的终端并确认它能正常工作,以便继续学习下去。
准备好你的Terminal、shell或PowerShell,设置好,以便快速访问,知道它在工作。
macOS
对于macOS你要做的具体如下。
这样你就打开了Terminal,而且处在dock里,以便你可以快速访问。
Linux
如果你已经在使用Linux,那我就可以假设你已经知道如何找到Terminal了。在你的窗口管理器(window manager)里搜寻名字像“Shell”或者“Terminal”的东西就可以了。
Windows
Windows 下我们将使用PowerShell。人们以前用的是一个叫cmd.exe
的程序,不过和PowerShell比起来它的可用性差很多。如果你用的是Windows 7及以上版本的系统,就照下面的做。
如果你装的不是Windows 7,那应该认真考虑一下升级事宜。如果你实在不想升级,那就试着从微软公司的下载中心安装一下PowerShell吧。在线搜索,找到“powershell downloads”。这得靠你自己了,因为我没有装Windows XP,写不出安装流程来,不过希望Windows XP下的PowerShell的使用体验也是一样的。
你学会了如何打开你的终端,这是继续这个附录所必需的。
警告
如果你有一个挺聪明而且懂Linux的朋友,在他让你用bash之外的shell时,那你应该忽略他的建议。我教你的是bash,就是这样。他们会说zsh会让你的IQ长30个点,并且让你在股票市场上赚得百万,别理他就是了。你的目标只是学会足够的技能,在你这个技能等级上,使用哪个shell其实不会影响什么。还要警告你的就是,躲开IRC以及那些“黑客”常去的地方。他们会教你一些破坏你的计算机的命令并以此为乐。例如,这条经典的命令
rm -rf /
,千万别输这条命令!离他们远点,如果你需要帮助,就找你能信任的人,别去网上随便找。
这个练习有一个很大的“更多任务”部分。其他练习没这么多的额外任务要做,我只是要让你通过记忆的方式向自己灌输这个附录的其余知识。相信我,这会让你后面的学习变得非常顺畅。
Linux/macOS
用索引卡片写下列出来的所有命令,一张卡片写一条,正面写下命令的名字,背面写下命令的定义。每天一边学习一边继续这个附录的后续内容。
pwd
:打印工作目录。hostname
:计算机在网络中的名称。mkdir
:创建目录。cd
:更改目录。ls
:列出目录中的内容。rmdir
:删除目录。pushd
:推入目录。popd
:弹出目录。cp
:复制文件或目录。mv
:移动文件或目录。less
:逐页查看文件。cat
:打印整个文件。xargs
:执行参数。find
:寻找文件。grep
:在文件中查找内容。man
:阅读手册。apropos
:寻找恰当的手册页面。env
:查看你的环境。echo
:打印一些参数。export
:导出/设定一个新的环境变量。exit
:退出shell。sudo
:成为超级用户root,危险命令!Windows
如果你用的是Windows,下面是你要学习的命令。
pwd
:打印工作目录。hostname
:计算机在网络中的名称。mkdir
:创建目录。cd
:更改目录。ls
:列出目录中的内容。rmdir
:删除目录。pushd
:推送目录。popd
:弹出目录。cp
:复制文件或目录。robocopy
:更可靠的复制命令。mv
:移动文件或目录。more
:逐页查看文件。type
:打印整个文件。forfiles
:在一大堆文件上面运行一条命令。dir -r
:寻找文件。select-string
:在文件中查找内容。help
:阅读手册。helpctr
:寻找恰当的手册页面。echo
:打印一些参数。set
:导出/设定一个新的环境变量。exit
:退出shell。runas
:成为超级用户root,危险命令!不停地练习,直到你能做到:看到一条命令,就能立即说出它的功能;反过来也能说出实现每个功能所需的命令。通过这样的方式你可以为自己建立术语表,不过如果你觉得烦,也别强迫自己在上面花太多时间。
pwd
)这个练习将让你学会如何使用pwd
命令来打印你的工作目录。
接下来我要教你如何阅读我展示给你的这些终端“会话”。你不需要将这里列出的所有的东西都键入终端,只要键入其中的一部分内容而已。
$
(Unix)或者>(Windows),它们只是命令行终端会话的一个标记。$ pwd
,就需要键入pwd
再敲一次回车键。$
或者>
提示。这些是输出内容,你的输出内容和我的应该是一样的。让我们先试一个命令,看看你有没有弄明白。
练习2 Linux/macOS会话
$ pwd
/Users/zedshaw
$
练习2 Windows会话
PS C:\Users\zed> pwd
Path
----
C:\Users\zed
PS C:\Users\zed>
警告
为了节省空间同时让你将精力集中在重要的命令细节上面,本附录将把命令行一开始的部分(如上面的
PS C:\Users\zed
)省略掉,只留下一个小小的>
部分。这意味着,你的命令行和这里看到的会有一点儿不同,不过这是正常的,你无须担心。记住,从现在开始,我只通过>来告诉你这是一个命令行提示符。对于Unix命令行提示符也一样,不过Unix有点儿不一样,人们习惯使用$
来表示命令提示符。
你的命令行和我的看上去不一样,你的可能在$
前面显示了你的用户名以及计算机名。Windows下看上去也会不一样,不过关键的基本格式都是下面这样的。
pwd
。你正好还学会了pwd
的功能,它的意思是“打印工作目录”。目录是什么东西?就是文件夹。文件夹和目录是同一个东西,这两个词可以互相替换。如果你打开文件浏览器,通过图形界面寻找文件,那你就是在访问文件夹。这些文件夹和我们后面要用到的目录完全是一回事儿。
pwd
,每次键入都念一遍“print working directory”。在学习的过程中,你也许会迷失在命令行里。你也许不知道自己所处的位置或者某个文件的位置,然后就不知道接下来怎么做。为了解决这个问题,我将教你键入一个不迷失的命令。
迷失的原因通常是你键入了一些命令,然后就不知道自己最后跑到哪个目录下了。这时你应该做的是键入pwd
打印出你的当前目录,然后你就知道自己的位置了。
接下来你需要一个回到安全位置(也就是你的home目录)的方法。很简单,键入cd ~
就可以了。
也就是说,如果你迷失了,就键入:
pwd
cd ~
第一个命令pwd
告诉你你当前所处的位置,第二个命令cd ~
将你带回home目录。
使用pwd
和cd ~
弄清楚自己所处的位置,然后回到home目录。确保自己总在正确的目录里。
你学会了在迷路后怎样回家。
mkdir
)这个练习将让你学会怎样使用mkdir
命令来创建新目录(文件夹)。
记住:你需要先回到home目录!执行pwd
命令,然后在做这个练习之前用cd ~
回到home目录。在做这个附录的所有练习之前都要先回到home目录。
练习4 Linux/macOS会话
$ pwd
s cd~
$ mkdir temp
$ mkdir temp/stuff
$ mkdir temp/stuff/things
$ mkdir -p temp/stuff/things/orange/apple/pear/grape
$
练习4 Windows会话
> pwd
> cd~
> mkdir temp
Directory: C:\Users\zed
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:02 AM temp
> mkdir temp/stuff
Directory: C:\Users\zed\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:02 AM stuff
> mkdir temp/stuff/things
Directory: C:\Users\zed\temp\stuff
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM things
> mkdir temp/stuff/things/orange/apple/pear/grape
Directory: C:\Users\zed\temp\stuff\things\orange\apple\pear
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM grape
>
这是我唯一一次列出了pwd
和cd ~
命令。它们在每个练习中都应出现。
现在我们键入了好几条命令。这些命令是使用mkdir
的不同方法。mkdir
的功能是什么呢?它是用来创建目录(make directory)的。不该问这个问题吧?你应该已经通过索引卡记住这些了才对。如果不知道这一条,就说明你需要继续在索引卡上下功夫。
创建目录是什么意思?目录又可以叫作“文件夹”,它们是一回事儿。你上面所做的是在逐层深入地创建目录,目录有时又叫“路径”,这里相当于是说“先到temp
,再到stuff
,然后到things,这就是我要到的地方。”这是给计算机发出的一系列方向,告诉计算机你想要把某个东西放到计算机硬盘的某个文件夹(目录)里。
警告
本附录中我使用斜杠(
/
)来表示路径,因为所有的计算机都是这么做的。不过,Windows用户应该知道,反斜杠(\
)也可以实现同样的功能,别的Windows用户可能认为这才是正常的用法。
temp
下面再创建20个别的目录,深度可以各不相同,然后用文件浏览器检查你创建的目录。mkdir "I Have Fun"
。cd
变到一个你可以控制的工作目录下,试试创建temp
目录,如果你用Windows的话,桌面是个不错的选择。cd
)这个练习将教会你如何使用cd
命令来更改目录。
我再教你一遍终端会话的方法。
$
(Unix)和>
(Windows)是不需要录入的。$
或>
后面的内容后需要敲回车键。如果你看到$ cd temp
,你需要键入的就是cd temp
,然后敲回车键。$
或者>
提示符。pwd
然后用cd ~
回到你的起始位置。练习5 Linux/macOS会话
$ cd temp
$ pwd
~/temp
$ cd stuff
$ pwd
~/temp/stuff
$ cd things
$ pwd
~/temp/stuff/things
$ cd orange/
$ pwd
~/temp/stuff/things/orange
$ cd apple/
$ pwd
~/temp/stuff/things/orange/apple
$ cd pear/
$ pwd
~/temp/stuff/things/orange/apple/pear
$ cd grape/
$ pwd
~/temp/stuff/things/orange/apple/pear/grape
$ cd ..
$ cd ..
$ pwd
~/temp/stuff/things/orange/apple
$ cd ..
$ cd ..
$ pwd
~/temp/stuff/things
$ cd ../../..
$ pwd
~/
$ cd temp/stuff/things/orange/apple/pear/grape
$ pwd
~/temp/stuff/things/orange/apple/pear/grape
$ cd ../../../../../../../
$ pwd
~/
$
练习5 Windows会话
> cd temp
> pwd
Path
----
C:\Users\zed\temp
> cd stuff
> pwd
Path
----
C:\Users\zed\temp\stuff
> cd things
> pwd
Path
----
C:\Users\zed\temp\stuff\things
> cd orange
> pwd
Path
----
C:\Users\zed\temp\stuff\things\orange
> cd apple
> pwd
Path
----
C:\Users\zed\temp\stuff\things\orange\apple
> cd pear
> pwd
Path
----
C:\Users\zed\temp\stuff\things\orange\apple\pear
> cd grape
> pwd
Path
----
C:\Users\zed\temp\stuff\things\orange\apple\pear\grape
> cd ..
> cd ..
> cd ..
> pwd
Path
----
C:\Users\zed\temp\stuff\things\orange
> cd ../..
> pwd
Path
----
C:\Users\zed\temp\stuff
> cd ..
> cd ..
> cd temp/stuff/things/orange/apple/pear/grape
> cd ../../../../../../../
> pwd
Path
----
C:\Users\zed
>
你在上一个练习中创建了不少的目录,现在你所做的就是通过cd
命令在它们之间往来。在上面的终端会话中,我通过使用pwd
来检查自己所在的位置,所以,要记住别把pwd
的输出也当作要键入的东西。例如,第三行有一条~/temp
,但这只是pwd
的输出而已,别把它也键入了。
你应该还看到我可以使用..
移动到目录的上一层。
在图形界面计算机上学习使用命令行界面(command line interface,CLI)很重要的一部分,就是弄明白命令行和图形界面是如何互相配合工作的。我开始使用计算机的时候,GUI还不存在,所有的事情都要通过DOS命令窗口(CLI)来完成。后来计算机越变越强大,人人都能用到图形界面了。对我来说,将命令行界面的目录和图形界面的文件夹匹配起来很容易理解。
然而现在大部分人都不理解命令行界面、路径和目录这些概念。其实这些东西也很难学会,只有不停地学习和使用CLI,才会有一天豁然开朗,将所有在GUI下做的事情都和在CLI下要做的对应起来了。
早日理解的办法是花一些时间来通过图形界面的文件浏览器来寻找目录,然后通过命令行去访问它们,这就是你接下来要做的。
cd
到apple
目录。temp
目录,不过不要退得太远了。cd
到你的“home目录”的方法。cd
到你的Documents目录,然后通过你的图形文件浏览器(Finde、Windows浏览器等)找到这个目录。cd
到你的Downloads目录,然后通过文件浏览器找到这个目录。cd
到这个目录。I Have Fun
的文件夹,你就可以使用cd "I Have Fun"
这条命令。ls
)这个练习中你将学会如何用ls
命令列出目录中的内容。
开始之前,确认你已经到了temp
的上一级目录。如果不确定现在在哪个目录里,就用pwd
找出来。
练习6 Linux/macOS会话
$ cd temp
$ ls
stuff
$ cd stuff
$ ls
things
$ cd things
$ ls
orange
$ cd orange
$ ls
apple
$ cd apple
$ ls
pear
$ cd pear
$ ls
$ cd grape
$ ls
$ cd ..
$ ls
grape
$ cd ../../../
$ ls
orange
$ cd ../../
$ ls
stuff
$
练习6 Windows会话
> cd temp
> ls
Directory: C:\Users\zed\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM stuff
> cd stuff
> ls
Directory: C:\Users\zed\temp\stuff
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM things
> cd things
> ls
Directory: C:\Users\zed\temp\stuff\things
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM orange
> cd orange
> ls
Directory: C:\Users\zed\temp\stuff\things\orange
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM apple
> cd apple
> ls
Directory: C:\Users\zed\temp\stuff\things\orange\apple
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM pear
> cd pear
> ls
Directory: C:\Users\zed\temp\stuff\things\orange\apple\pear
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM grape
> cd grape
> ls
> cd ..
> ls
Directory: C:\Users\zed\temp\stuff\things\orange\apple\pear
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM grape
> cd ..
> ls
Directory: C:\Users\zed\temp\stuff\things\orange\apple
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM pear
> cd ../../..
> ls
Directory: C:\Users\zed\temp\stuff
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM things
> cd ..
> ls
Directory: C:\Users\zed\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM stuff
>
ls
命令列出了你当前所在目录的内容。你可以看到,我使用了cd
变更到不同的目录,然后列出里边的内容,这样我就知道接下来该到哪个目录中去了。
ls
命令有很多的选项,后面我们介绍help
命令的时候你会学习到如何获得关于这些选项的帮助。
temp
目录中试一下ls -lR
命令。dir -R
完成。cd
进入别的目录中,然后通过ls
看看里边有什么。ls
和pwd
找出你所在的位置,然后通过cd
到达你的目的目录即可。rmdir
)在这个练习中你将学会怎样删除一个空目录。
练习7 Linux/macOS会话
$ cd temp
$ ls
stuff
$ cd stuff/things/orange/apple/pear/grape/
$ cd ..
$ rmdir grape
$ cd ..
$ rmdir pear
$ cd ..
$ ls
apple
$ rmdir apple
$ cd ..
$ ls
orange
$ rmdir orange
$ cd ..
$ ls
things
$ rmdir things
$ cd ..
$ ls
stuff
$ rmdir stuff
$ pwd
~/temp
$
警告
如果在macOS上做
rmdir
并且遇到你确定是空目录但它拒绝删除该目录的情况,实际上在这个目录中有一个名为.DS_Store
的文件。这种情况下,键入rm -rf
即可(用实际的目录名代替)。
练习7 Windows会话
> cd temp
> ls
Directory: C:\Users\zed\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:03 AM stuff
> cd stuff/things/orange/apple/pear/grape/
> cd ..
> rmdir grape
> cd ..
> rmdir pear
> cd ..
> rmdir apple
> cd ..
> rmdir orange
> cd ..
> ls
Directory: C:\Users\zed\temp\stuff
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:14 AM things
> rmdir things
> cd ..
> ls
Directory: C:\Users\zed\temp
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/17/2011 9:14 AM stuff
> rmdir stuff
> pwd
Path
----
C:\Users\zed\temp
> cd ..
>
我现在将命令混到了一起,因此你要集中精力确认键入完全一样。你的每一个错误都是不够集中精力导致的。如果你发现自己犯了很多错误,那就休息一会儿,或者今天就别接着学习了,等明天再鼓足精神继续。
在这个示例中你学会了如何删除一个目录。这很容易,你只要到你要移除的目录的上一级,然后键入rmdir
(将
替换成你要删除的目录的名称)即可。
pushd
和popd
)在这个练习中你将学会如何使用pushd
保存当前位置并转到一个新位置,以及如何通过popd
回到先前保存的位置下去。
练习8 Linux/macOS会话
$ cd temp
$ mkdir -p i/like/icecream
$ pushd i/like/icecream
~/temp/i/like/icecream ~/temp
$ popd
~/temp
$ pwd
~/temp
$ pushd i/like
~/temp/i/like ~/temp
$ pwd
~/temp/i/like
$ pushd icecream
~/temp/i/like/icecream ~/temp/i/like ~/temp
$ pwd
~/temp/i/like/icecream
$ popd
~/temp/i/like ~/temp
$ pwd
~/temp/i/like
$ popd
~/temp
$ pushd i/like/icecream
~/temp/i/like/icecream ~/temp
$ pushd
~/temp ~/temp/i/like/icecream
$ pwd
~/temp
$ pushd
~/temp/i/like/icecream ~/temp
$ pwd
~/temp/i/like/icecream
$
练习8 Windows会话
> cd temp
> mkdir i/like/icecream
Directory: C:\Users\zed\temp\i\like
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 12/20/2011 11:05 AM icecream
> pushd i/like/icecream
> popd
> pwd
Path
----
C:\Users\zed\temp
> pushd i/like
> pwd
Path
----
C:\Users\zed\temp\i\like
> pushd icecream
> pwd
Path
----
C:\Users\zed\temp\i\like\icecream
> popd
> pwd
Path
----
C:\Users\zed\temp\i\like
> popd
>
如果你用到这些命令,那你就非常接近程序员阵营了。这些命令非常好用,所以我非教你不可。这些命令可以让你临时跑到某个不同的目录中,然后再回到之前的目录,并且方便地在两个目录之间切换。
pushd
命令会将你所在的当前目录“推送”(push)到一个列表中以供后续使用,然后让你转到另一个目录中。它的意思大致是:“记住我现在的位置,然后到这个地方去。”
popd
命令会将你上次推送的目录从列表中“弹出”(pop),然后让你回到这个被“弹出”的目录。
最后,在Unix中有点儿不同,如果运行时不添加任何参数,它就会让你在当前目录和你上一次推送的目录之间切换,这种方法可以让你很方便地在两个目录之间切换。不过PowerShell中这样做是不灵的。
i/like/icecream
这一系列目录,然后自己创建一些目录,在它们之间切换。pushd
和popd
的输出的意义。有没有发现它的工作模式有点儿像一个栈?mkdir –p
(在Linux/macOS中)会创建一个完整的多层目录,即使中间目录不存在也能成功。这也是我创建这个练习一开始所做的事情。本文摘自受大众喜欢的《笨办法学Python 3》
[美] 泽德·A.肖(Zed A.Shaw) 著,王巍巍 译
在本书中,你将通过完成52个精心设计的习题来学会Python语言。阅读这些习题,照着录入代码(不要复制和粘贴!),修正自己的错误,观察程序的运行。在这个过程中,你将学会计算机的工作原理,知道怎样的程序才算是好程序,以及如何读、写和思考代码。作者还提供了5个多小时的视频,教你如何破坏、修正和调试代码,整个过程就像一边做题一边直播一样。一开始会很难,但很快你就会上手,并且会感觉很棒!
本书适合以下人群阅读
● 零编程经验的初学者
● 了解一两门编程语言的初级人员
● 多年未写过代码的转岗专业人员
● 有丰富的编程经验,想通过快速、简单的速成课程了解Python 3的专业人员