Allen Guo

Keep it sharp


  • Home

  • About

  • IT • Internet

  • Life • Dream

  • Archives

程序员入行之素养(五):一生万物、万物归一(命令行“删除”电脑资料)

发表于 2019-01-18 | 更新于 2020-04-27 | 分类于 IT , 预备课

删除文件

rm命令

rm 删除文件或目录

▷ A. 删除文件

1
rm /samples/culture/banyuan.txt

▷ B. 验证删除成功与否

1
cat /samples/culture/banyuan.txt

系统返回如下输出结果,表示rm操作成功:

cat: /samples/culture/banyuan.txt : No such file or directory

▷ C. 删除文件前确认

为谨慎起见,如果删除文件时想系统给出提示,用户确认后再决定删除与否,可以使用-i参数,运行命令:

1
rm -i /samples/langs/web.html

系统返回如下结果,输入Y或者N确认删除或不删除:

remove /samples/langs/web.html

删除目录

rm命令

rm 删除文件或目录。 删除目录也使用rm命令,只是后面的的参数不同(-d或-r等)。

▷ A. 删除目录

1
rm -d /samples/web/orm

如果什么也没有返回,表明操作成功。

▷ B. 验证删除成功与否

1
ls /samples/web/orm

系统返回如下输出结果,表示rm操作成功:

ls: /samples/web/orm: No such file or directory

▷ C. 删除非空目录

如果删除的目录下存在子目录或文件,执行rm -d会给出错误提示,如:

1
2
3
4
5
6
rm -d /samples/web/build
```

>rm: /samples/web/build: Directory not empty

自然的想法是倒过来依序删除目标目录下的文件和子目录,然后再重新执行目标目录的删除。有一种更简单的方法是:使用-r参数,将直接将把目标目录及其下的所有子目录和文件删除:

rm -r /samples/web/build

1
2
3
4
5
6
7
8
9
如果命令执行正确,将不显示任何输出结果。

到这里,敏锐的读者可能已经想到:如果同时应用多个命令参数会有什么的结果?比如rm -ir ...,不妨自己行做个实验。

注:有些版本Mac系统运行rm时,默认给出确认提示(即:默认启用了-i),所以如果想取消确认提示,可以使用-f提示,-f不但支持文件,也支持目录。

**▷ D. 删除多个文件或目录**

rm命令后面说明多个 文件或目录全路径即可,如:

rm -f /samples/web/framework/expressjs.pdf f /samples/web/framework/springio.pdf

1
2

有个更简便的方法达到同样的目的,即使用正则表达式(Regular Expression),如:

rm -rf /samples/web/.pdf
`
“
“ 是正则表达式的规则之一,表示任意字符,上面命令行的含义是:删除 /samples/web/ 目录下名字满足”任意字符加上.pdf字符”的条目。举一反三,find命令也是支持正则表达式的。

程序员入行之素养(五):一生万物、万物归一(命令行“创建”电脑资料)

发表于 2019-01-17 | 更新于 2020-04-27 | 分类于 IT , 预备课

创建目录

★ mkdir 命令

mkdir 用来创建目录

▷ A. 创建目录”/samples/bigdata”

1
mkdir /samples/bigdata

如果命令运行正确,则什么也不返回。

▷ B. 验证目录是否被正确创建

1
ls -l /samples/

输出结果如下:

1
2
3
4
5
6
7
8
drwxr-xr-x  6 AllenGuo  staff  192  4  3 23:05 basic
drwxr-xr-x 2 AllenGuo staff 64 4 3 23:31 bigdata
drwxr-xr-x 4 AllenGuo staff 128 4 3 18:06 culture
drwxr-xr-x 2 AllenGuo staff 64 4 3 23:09 important
drwxr-xr-x 8 AllenGuo staff 256 4 3 18:26 langs
drwxr-xr-x 7 AllenGuo staff 224 4 3 22:58 os
drwxr-xr-x 8 AllenGuo staff 256 4 3 22:06 web
drwxr-xr-x 3 AllenGuo staff 96 4 3 21:02 历史

“bigdata” 这一行是新增的条目,第一个字母是d,表示这是一个目录。

▷ C. 级联创建目录
如果想创建 /samples/database/rdb 目录(假设 /samples/database 不存在),通常要依序执行命令:

1
2
mkdir /samples/database
mkdir /samples/database/rdb

不过,你可以使用-p参数,直接说明要创建最深层次的目录,mkdir会自动依次建立依赖的父目录,如:

1
mkdir -p /samples/database/rdb

创建文件

大家可能都有过写Word文档文件的经验,在图形操作系统下这不是什么问题,但是在简陋的命令行窗口里,创建文件就不是件容易的事了。我们这里仅展示文本文件的创建。

★ echo 命令

echo 一般是向控制台(窗口)输出文字(用’或”括起来)。但是,如果结尾添加>符号,后面指定文件全路径,则可以创建该文件,文件内容即为>符号前面的字符串。

▷ A. 创建mysql.txt

1
echo 'MySQL is a open-source database'>/samples/database/rdb/mysql.txt

如果命令运行正确,则什么也不返回。

▷ B. 检查文件是否正确创建

1
cat /samples/database/rdb/mysql.txt

返回输出结果如下,表明文件创建完全正确:

MySQL is a open-source database

★ touch 命令

touch 创建一个空文件

用 touch 创建一个名字为 oracle.txt 的文件到 /samples/database/rdb/ 目录

1
touch /samples/database/rdb/oracle.txt

再用cat命令查看 oracle.txt ,如果什么也没返回(没有任何报错信息),即证明该文件存在,并且内容为空。

程序员入行之素养(五):一生万物、万物归一(命令行“读”电脑资料)

发表于 2019-01-16 | 更新于 2020-04-27 | 分类于 IT , 预备课

现在开始漫游计算机。想象一下你正走进都柏林的圣三一学院图书馆,面对浩瀚的知识海洋,为了找到自己需要的资料,需要经过如下步骤:

  1. 确定你要寻找的资料名称
  2. 拿到资料目录,查出资料的所在位置
  3. 打开目标位置的资料阅读

1. 确定你要寻找的资料名称

假设要找的文件是 banyuan.txt

2. 拿到资料目录,查出资料的所在位置

此目录非彼目录,这里说的资料目录实际是资料名称(文件名和目录名)列表。英文表达为Catalog而不是Directory。

★ ls 命令

ls 是Mac操作系统自带的一个命令行程序,用于列出指定目录下文件和子目录。

当然,一切命令行操作的前置操作是:打开终端软件。终端窗口也称控制台(Console),在控制台输入命令文字后,按↩(回车键)使运行。

在控制台输入ls命令:

1
ls /

输出结果如下:

1
Applications  Users  dev  Library  Volumes  etc  net  tmp  Network  bin  home  opt  sbin  usr  System  cores  private  server  var

命令行输入的文字串第一个空格后面的字符串,称之为程序的参数,用来调整程序的具体行为。ls 后面的字符串即 / 为ls命令的参数。
上面命令的具体含义是:查看 / 目录下第一级文件和子目录名称(不包含子目录及下面的文件),逻辑结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/
├── Applications
├── Library
├── Network
├── System
├── Users
├── Volumes
├── bin
├── cores
├── dev
├── home
├── net
├── opt
├── private
├── sbin
├── server
├── tmp
├── usr
└── var

如果你想查看整个计算机硬盘里的资料目录,可以运行带-R参数的ls命令,不过这个命令的运行时间可能很长,因为资料目录实在太大,你可以随时按 ⌃ + C 快捷键(⌃是CONTROL键)停止命令的运行:

1
ls -R /

下面摘取了部分输出结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
...
/usr:
bin lib libexec local sbin share standalone

/usr/bin:
as dns-sd jarsigner neqn renice topsyscall

/usr/lib:
PN548_API.dylib libbsm.dylib libexpat.dylib libnetsnmp.5.dylib libsasl2.dylib

/usr/lib/groff:
groffer site-tmac
...

虽然很丑陋,不像前文那么友好的树状图,但终究是罗列出来了一个完整的目录。

因为电脑上的资料实在太多,即便仅展示资料目录也庞大和琐碎得象一本书,而且文件名不象图书馆里的资料那样有约定的分类编号,上述方法实际很少有人使用。通常都是依照目录的层级渐进查找资料。

比如,如果预先知道目标资料在/samples的某个更深层次的子目录,可以先运行命令:

1
ls -l /samples

返回 /samples 目录下的文件和第一级子目录:

1
2
3
4
5
6
7
drwxr-xr-x  6 AllenGuo  staff  192  4  3 23:05 basic
drwxr-xr-x 4 AllenGuo staff 128 4 3 18:06 culture
drwxr-xr-x 2 AllenGuo staff 64 4 3 23:09 important
drwxr-xr-x 8 AllenGuo staff 256 4 3 18:26 langs
drwxr-xr-x 7 AllenGuo staff 224 4 3 22:58 os
drwxr-xr-x 8 AllenGuo staff 256 4 3 22:06 web
drwxr-xr-x 3 AllenGuo staff 96 4 3 21:02 历史

这里增加了 -l 参数,可以让列出的文件或目录竖排排版,将条目的诸多属性追加到条目的左侧,上述结果里每行第一个字母d(Directory)表示每个条目都是目录,从而确定计算机 /samples 目录下原来有三个子目录,推测 banyuan.txt 可能在 /samples/culture 目录,继续运行命令:

1
ls -l /samples/culture

返回 /samples/culture 目录下的文件和子目录:

1
-rw-r--r--@ 1 AllenGuo  staff  39  4  3 18:06 banyuan.txt

结果里每行(其实就一行)第一个字符是-,表示该条目是文件(File)。果然,banyuan.txt 位于 /samples/culture 目录。也可以说:banyuan.txt 的全路径是 /samples/culture/banyuan.txt

提示:只有预期 /samples 目录下的文件和子目录不是很庞大的时候,才使用上文介绍的-R参数,可以一步到位扫到目标文件所在的位置。

小技巧: 输入 ls -l /samples/cul 时突然忘记了”文化”这个英文单词后面的字符,按 TAB 键试试看,会有小惊喜。

★ find 命令

find 说明文件或目录名特征信息,在指定的目录下搜索。

有没有一种类似搜索引擎(百度)的更直接的资料检索方法,只要输入“banyuan.txt”,就可以找到目标资料?试试find:

1
find /samples -name 'banyuan.txt'

上面的例子含义是:在 /samples 目录下(包含所有子目录)搜索名字为 banyuan.txt 的文件或目录。再次提醒:这里find后面一串字符 /samples -name ‘banyuan.txt’ 是find程序的参数。

执行后输出结果如下:

1
/samples/culture/banyuan.txt

这是搜索到的文件的全路径,即得出结论:banyuan.txt 位于 /samples/culture/ 目录。

思考:不管三七二十一,如果find命令指定目标搜索目录是 / , 那么不就可以在整个计算机硬盘里搜索资料了吗?不错,但是尽量不要这样做,因为这会使搜索时间大大变长。

3. 阅读资料

★ cat 命令

cat 显示指定文件的内容,后面第一个参数是文件的全路径名。注意,cat只能显示 纯文本 文件(图片文件无能为力)。

1
cat /samples/culture/banyuan.txt

上面的含义是,显示 /samples/culture/banyuan.txt 文件的内容。

输出结果如下:

1
半圆学社是持续学习的践行者

上面的文字正是 banyuan.txt 文件里内容。

4. 更好用的tree命令

★ tree 命令

tree 用友好的树形结构列出该计算机的资料目录(Catalog)。

tree不是Mac操作系统自带的命令行程序,也称为外部命令,需要依靠HomebrewHomebrew软件来安装。这个工具也将是入学半圆后第一个要学习的软件。同学,要不要现在挑战一下?

一旦安装好tree之后,输入命令(请注意及时按 ⌃ + C快捷键停止命令的运行,因为整个计算机的资料目录太大了☠):

1
tree -N /

上面命令的含义是:查看 / 目录下所有子目录和文件的名称列表(即:Catalog), -N 参数能确保目录或文件名里中文正确显示。

输出部分结果如下图所示:
Terminal

因为计算机上的资料太庞大。可以采用类似ls命令渐进法,输入:

1
tree -N /samples

这将仅显示 /samples 目录下的子目录和文件,输出结果如下:

Terminal

缩小了搜索范围,将更快地返回资料目录。怎么样,tree工具还不错吧?

扩展名 阅读上面的文件名,会发现一个共同的特点,它们都以.后面加几个字符结尾。我们称之为文件扩展名。这么做的主要目的是分类文件,比如 全球通史.docx 以 .docx 结尾,我们很容易就知道,该文件应该是Word文档。用 访达 查看该文件,它会显示出一个Word图标,如果系统安装了Office,轻敲该文件还会自动地打开关联的Word软件。所以,建议制作文档命名时,总是给文件命名以合适的扩展名。

程序员入行之素养(五):一生万物、万物归一(命令行“更新”电脑资料)

发表于 2019-01-15 | 更新于 2020-04-27 | 分类于 IT , 预备课

更新目录

★ mv命令

mv 对给定的目录或文件更名或移动

▷ A. 更名目录”/samples/langs” 为 “/samples/languages”

1
mv /samples/langs /samples/languages

如果命令运行正确,则不返回任何输出结果。

▷ B. 验证更名成功与否

  1. 输入命令:
    1
    ls -l /samples/langs

返回输出结果如下:

1
ls: /samples/langs: No such file or directory

  1. 输入命令:
    1
    ls /samples/languages

返回输出结果如下:

1
c.pdf  css.pdf  java  python.pdf

思考:languages和Languages是一个目录吗?

在Mac和Window操作系统里,文件和目录名不区分大小写,所以是一个目录。但是,Linux和Unix系列操作系统则区分大小写。未来大家写的程序分发到Unix Like系统里的场合很多,建议大家养成不使用大小写字符区分文件和目录的习惯。

mv命令不但可以更改目录名,其实对文件名同样使用,这个大家自己去实验。

更新文件

★ echo命令

echo 组合>>参数追加文本到目标文件

▷ A. echo组合>>符号

这里,我们要学习如何对文件的内容进行更新操作。

前文创建的 /samples/database/rdb/mysql.txt 有内容 “MySQL is a open-source database”,现在我们运行命令:

1
echo 'but it is not free.'>>/samples/database/rdb/mysql.txt

这将追加>>符号前面双引号里的文字内容到mysql.txt(文件里原来的内容保留)。

▷ B. 验证mysql.txt内容是否更新

1
cat /samples/database/rdb/mysql.txt

返回如下输出结果:

MySQL is a open-source database
but it is not free.

▷ C. 不合法的命令

现在想在mysql.txt里再追加一行文字:MySQL isn’t Free.,仍然使用echo命令:

1
echo 'MySQL isn't Free.'>>/samples/database/rdb/mysql.txt

结果屏幕会显示>符号,光标停留在>后面

1
2
3
4
5
6
7
8
MagicLife:/ banyuan$ echo 'MySQL isn't Free.'>>/samples/database/rdb/mysql.txt
> ▌
```
合法的命令执行完一般是显示程序执行结果,然后回到提示符下(我的电脑是MagicLife:/ banyuan$,每个人依用户名不同,提示有所不同),可以继续输入下一条命令。

上述提示表明前面的命令行不完整(合法),因为你既无法看到echo命令的的返回结果。也不能输入下一条命令,怎么办呢?简单按 ***\^ + C*** (^是CTRL键)强制放弃当前程序的执行,回到提示符下。

仔细看echo命令后面用 ***'*** (单引号)包裹起来的字符串本身也有一个单引号,这将让echo命令无所适从,它无法判定哪个单引号表示字符串的结束还是文字内容本身的 ***'*** 。还记得前文说echo后面的字符串可以 ***'*** 或者 ***"*** 包裹吗?因此,可以修改后的echo命令如下:

echo “MySQL isn’t Free.”>>/samples/database/rdb/mysql.txt

1
2
3
4
5
6

**▷ D. 字符转义**

现在 ***'*** 换成了 ***"*** ,可以在文本里包含'字符了。思考一下,如果字符串本身包含一个"怎么办呢?比如想在mysql.txt里追加一行文本: ***Hi guys, " is a special character.***

这就需要在文本 **" is a ...** 的 ***"*** 前面添加一个\字符进行转义,让echo明确理解 ***"*** 不是字符串的包裹,而是的的确确的双引号字符。因此,修改后的echo命令如下:

echo “Hi guys, \” is a special character.”>>/samples/database/rdb/mysql.txt

1
返回输出结果如下:

MySQL is a open-source database
but it is not free.
MySQL isn’t Free.
Hi guys, “ is a special character.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


### ★ vim命令
**▷ 没人使用echo编辑文字**

大家都有过写Word文件的的体验吧?通过它的图形化界面,一切都是那么理所当然:创建文件,编辑文件使加粗文字、插入图片,存储文件...

反观echo的局限则太多,首先它只能用来编辑文字,而且貌似也无法容易地修改文字(上面的例子都在用>>来追加文字)。

那么命令行下有没有可以易用的文字编辑软件(命令)呢?有,这个就是大名鼎鼎的vi,包括它的升级版[![](https://img-camp.banyuan.club/prep/vim-logo.png?x-oss-process=image/resize,w_30/sharpen,100)](https://www.vim.org/) 也都内置在Mac系统中。虽然半圆入学考试暂时不要求vi的使用,但是它确是接下来操作Linux服务器软件——必知必会!

## 移动/复制文件或目录
### ★ mv命令
>**mv** 移动给定的目录或文件

**▷ A. 移动目录**

如果依次实验完前面的例子,当前 /samples 文件目录结构如下(部分):

/samples/
├── database
│ └── rdb
│ ├── mysql.txt
│ └── oracle.txt
…
├── os
│ ├── linux-guide.jpg
│ ├── linux-introduction.docx
│ ├── mac os.html
│ └── unix
│ ├── unix-intro.pdf
│ └── what-is-bash.pdf
……

1
2

运行mv命令:

mv /samples/database /samples/os

1
2

文件目录结构将变更为:

/samples/
…
├── os
│ ├── database
│ │ └── rdb
│ │ ├── mysql.txt
│ │ └── oracle.txt
│ ├── linux-guide.jpg
│ ├── linux-introduction.docx
│ ├── mac os.html
│ └── unix
│ ├── unix-intro.pdf
│ └── what-is-bash.pdf

…

1
2
3
4
5
6
7
对比一下上述变化,能理解mv移动目录的用法了吗?

**▷ B. 移动文件**

同理,移动文件到指定目录留给大家自己实践:试试将 **/samples/os/unix/what-is-bash.pdf** 移动到 **/samples/web** 目录?

最后让我们试试下面的命令:

mv /samples/os/linux-introduction.docx /samples/os/linux-intro.docx

1
再运行ls命令检查上面操作成功与否:

ls -l /samples/os

1
返回输出结果:

drwxr-xr-x 4 AllenGuo staff 128 4 3 22:15 database
-rw-r--r--@ 1 AllenGuo staff 28113 4 3 18:20 linux-guide.jpg
-rw-r--r--@ 1 AllenGuo staff 17183 4 3 18:22 linux-intro.docx
-rw-r--r--@ 1 AllenGuo staff 1469 4 3 18:25 mac os.html
drwxr-xr-x 4 AllenGuo staff 128 4 3 23:01 unix

1
2
3
4
5
6
7
8

咦?linux-introduction.docx 文件不见了,取而代之的是 linux-intro.docx,这就是文件名更名操作嘛!

### ★ cp命令
>**cp** 复制存在的目录或文件

**▷ A. 复制文件**
当前目录结构:

/samples/
…
├── basic
│ ├── algorithm.pdf
│ ├── compiling.pdf
│ └── math
│ └── linear.algebra.pdf
├── [important]
…

1
2

如果 /samples/basic/math/linear.algebra.pdf 是份重要的文件,想复制到 **/samples/important** 目录,执行命令如下:

cp /samples/basic/math/linear.algebra.pdf /samples/important

1
操作后文件目录结构如下:

/samples/
…
├── basic
│ ├── algorithm.pdf
│ ├── compiling.pdf
│ └── math
│ └── linear.algebra.pdf
├── [important]
│ └── linear.algebra.pdf
…

1
2
3
4

**▷ B. 复制目录**

接前面的实验:复制 /samples/basic 目录下的文件和子目录到目标目录,但保持原目录结构:

cp -r /samples/basic /samples/important

1
操作后目录结构如下:

/samples/
├── [basic]
│ ├── algorithm.pdf
│ ├── compiling.pdf
│ └── [math]
│ └── linear.algebra.pdf
├── [important]
│ ├── linear.algebra.pdf
│ └── [basic]
│ ├── algorithm.pdf
│ └── compiling.pdf
│ └── [math]
│ └── linear.algebra.pdf
…

1
2

为了方便实验,先删除上面复制出来的 /samples/important/basic 的目录,再执行cp命令,不过这次cp命令参数中 **源目录路径** 最后多了 **/** ,如下:

cp -r /samples/basic/ /samples/important

1
操作后目录结构如下:

/samples/
├── [basic]
│ ├── algorithm.pdf
│ ├── compiling.pdf
│ └── [math]
│ └── linear.algebra.pdf
├── [important]
│ ├── algorithm.pdf
│ ├── compiling.pdf
│ ├── linear.algebra.pdf
│ └── [math]
│ └── linear.algebra.pdf

1
2
3
注意到差异了吗?源目录路径中最后一级目录 **basic** 本身没有被创建到目标目录,仅按源目录布局复制了其子目录和文件。

**提示**:rm命令的-i -f参数对于cp同样适用,大家可以亲自去试试。另外,前面用过的几乎所有命令如果不带参数,都会返回该命令的用法,比如:

cp

1
屏幕返回输出结果:

usage: cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file target_file
cp [-R [-H | -L | -P]] [-fi | -n] [-apvXc] source_file … target_directory
`

程序员入行之素养(五):一生万物、万物归一(命令行与计算机资料)

发表于 2019-01-15 | 更新于 2020-04-27 | 分类于 IT , 预备课

笔者根据个人二十年从业经验,总结了在开始编程之前,应系统性地准备一系列工作,形成了“程序员入行必备之素养”系列。谨此,献给有志于从事软件开发职业的浩浩青年。

这是本系列文章唯一有专业技术要求的一篇,但是,没那么遥不可及。计算机好比一个图书馆,无论作为计算机专业人员还是业余爱好者,都要学会如何存取计算机这个大图书馆。

简单说,Mac电脑用户必须熟练使用 访达(Finder) 来存取计算机里的数据资料(与 访达 对应的Windows软件叫 文件管理器)。
Finder

文件和目录概念

电脑里所有的资料都存在一个名字叫硬盘的硬件设备里,断电后数据不会丢失。计算机采用了图书馆类似的概念:把数据组织成 文件(File) 和 目录(Directory) 放在硬盘里。

文件之于目录,犹如图书之于书架。和图书馆有所不同的是,计算机里文件和目录是一个二维的树型结构,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[/]
|_[samples]
|_ [计算机专业]
| |_ 编译原理.pdf
| |_ 核心Java卷I.pdf
| |_ C语言程序设计.pdf
|_ [教育理念]
| |_ 半圆文化.txt
|_ [文科]
|_ [历史教育]
|_ 全球通史.docx
|_ 中国古代简史.pdf
|_ 中国近代史1840-1949.txt
|_ 中国史纲要.html

上图用 [] 扩起来的条目是目录,即资料所在的位置,其他条目则是文件,是资料本身。

下面是几个重要的有关目录的概念:

  • 根目录(Root)
    名字为 / 的目录是计算机的 根目录,就像图书馆的大门口,一切资料的位置都要循着 / 目录去定位和检索。比如,可以说:“编译原理.pdf” 这份资料位于 /samples/计算机专业 目录;“全球通史.docx” 的位于 /samples/文科/历史教育 目录。

  • 子目录(Sub)
    相比之下,“文科” 、“计算机专业” 是 / 和 samples 的子目录(Sub),“历史教育” 是 “文科” 的子目录。

  • 父目录(Parent)
    反之,“文科” 是 “历史教育” 的父目录,/ 是所有目录的父目录。

文件 “全球通史.docx” 存在于 /samples/文科/历史教育 目录下,我们把 /文科/历史教育/全球通史.docx 称为该文件的全路径(Path)。描述文件或目录的路径时,每个条目之间用 / 分隔。

命令行工具

对于专业选手,除了要熟练用 访达 存取文件和目录,还必须学会使用 命令行 完成同样的操作。

相信大家都很熟悉在Windows系统里点击QQ、Word图标启动程序;启动程序的另一种方式是:通过输入相应的程序名(约定的文字),敲击回车键来启动程序的运行,我们称之为命令行操作。

Terminal Mac系统使用 终端(Terminal) 进行 命令行 操作,点按桌面相应图标即可启动终端,也可以通过 Spotlight(还记得快捷键⌘ + 空格吗?) 输入文字 terminal 后敲击回车键快速打开终端。

Terminal

例子准备

为方便实验,我们精心准备了一个例子,目录和文件名主要用英文表示,具体结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/samples/
├── [basic]
│ ├── algorithm.pdf
│ ├── compiling.pdf
│ └── [math]
│ └── linear.algebra.pdf
├── [culture]
│ └── banyuan.txt
├── [important]
├── [langs]
│ ├── c.pdf
│ ├── css.pdf
│ ├── [java]
│ │ ├── core-java-i.pdf
│ │ ├── core-java-ii.pdf
│ │ └── java8-guide.pdf
│ ├── python.pdf
│ └── web.html
├── [os]
│ ├── linux-guide.jpg
│ ├── linux-introduction.docx
│ ├── mac os.html
│ └── [unix]
│ ├── unix-intro.pdf
│ └── what-is-bash.pdf
├── [web]
│ ├── apache.pdf
│ ├── [build]
│ │ └── webpack4.jpg
│ ├── [framework]
│ │ ├── expressjs.pdf
│ │ └── springio.pdf
│ ├── nginx.pdf
│ └── [orm]
└── [历史]
└── 中国古代简史.pdf

请点击 samples.zip 下载并解压缩,并将其拖动到 / 目录(根目录)下。

为完成该操作,首先需要使用 访达(Finder) 定位到 / 目录,打开 访达(Finder),窗口左侧有一个 Macintosh HD,点击后,右侧主窗口显示的即是 / 目录,如下图所示:

注:如果 Finder 窗口左侧没有看到 Macintosh HD 怎么办?

打开 Finder 菜单:前往->电脑(或者按快捷键 ⌘ + ⇧ + C),拖动右侧窗口的 Macintosh HD 到左侧窗口 位置 下面。

其次,你要知道你下载的 samples.zip 位于下载 目录, 访达(Finder) 窗口左侧有个 下载,点击后在右侧主窗口看到samples.zip,将解压缩的 samples 目录复制到 / ,复制时系统弹出对话框,要求输入Mac用户的密码(这个在你安装Mac系统时,系统分配给你的用户和密码),输入密码后,例子准备工作就做好了。

接下来我们就以前面图示的文件和目录为例,一起实践吧!

一个悖论是:我只有Windows没有Mac电脑,所以无法实践命令行操作;不实践命令行操作我无法通过入学面试;不入学半圆我就没有Mac电脑(入学半圆就送全新Mac电脑)。 即便如此,你仍然要读完接下来的内容,在最后,我们列出了Windows下命令行操作的对应方法和规则,祝你能从Mac的操作教程中汲取灵感,更好地在Windows下展开实践。

程序员入行之素养(四):好记性不如烂笔头(怎样记读书笔记)

发表于 2019-01-12 | 更新于 2020-04-27 | 分类于 IT , 预备课

笔者根据个人二十年从业经验,总结了在开始编程之前,应系统性地准备一系列工作,形成了“程序员入行必备之素养”系列。谨此,献给有志于从事软件开发职业的浩浩青年。

○ 需要记读书笔记吗?
○ 电子的还是纸质?
○ 易于创作、易于传播!
○ 在哪里创作?

能用纯文本写的知识,绝不用Word来写!

这句话的涵义在于:知识应易于创作,纯文本就是用键盘码出来的字。一个轻巧的文本编辑器就可以书写;如果用Word,你很可能纠缠于各种文本格式调整,甚至心中暗暗得意呢。但此时你已经偏离写作很远了;

能用HTML(网页)传播的知识,绝不用其他途径!

这句话的涵义在于:知识应易于传播, 每台个人电脑和每部现代手机都内置了浏览器软件,只要获知网页的URL地址就可以访问网页里的内容了。反观用Word书写的文档传播给他人时,阅读者还必须下载并安装Office之类的软件才能查看Word。

HTML文件通过浏览器阅读,也是用纯文本书写,接近完美。

初识Markdown

但对于作为读书笔记的记录方法,HTML仍然不够简洁,否则软件专业培训就不会有一门课叫”网页制作“了。结论是:使用Markdown书写笔记文档,写完后编译成网页(HTML)供自己或分享给他人阅读。

下面让我们快速浏览一下Markdown的书写格式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
## 初探HTML
顾名思义,HTML是一种标记语言。其标记以应用于文档内容(例如文本)的元素为其存在形式。

## 初探CSS
CSS(层叠样式表)用来规定HTML文档的呈现形式(外观和格式编排)。

### 定义和应用样式
CSS样式由一条或多条以分号隔开的样式声明组成。每条声明包含着一个CSS属性和该属性的值,二者以冒号分隔。下面是一条简单的CSS样式。

```
background-color:grey; color:white;
```

### CSS中的颜色
颜色在网页中的作用非常重要。在CSS中设置颜色有好几种方法。

**CSS颜色选编**

|颜色名称|十六进制|十进制|
|---|---|---|
|black|#000000|0,0,0|
|silver|#C0C0C0|192,192,192|
|gray|#808080|128,128,128|

## 初探JavaScript
JavaScript过得挺不容易。出生不顺,青春期更满是苦涩。直到近年来,它才开始树立起一种实用的灵活语言的形象。JavaScript能做的事很多,尽管它还称不上完善,但也值得认真对待。
> **Atwood定律**: "任何可以使用JavaScript来编写的应用,并最终也会由JavaScript编写。"

通过Markdown编译工具翻译成HTML后如下显示:

Markdown格式极其收敛,只用了有限的几个语法标注,就可以做出上图这种简洁的书写效果,让作者专注于内容创作本身。任何Markdown无能为力的格式,都可以直接混合书写HTML(HTML无所不能)。不过,你应该总是把格式美化工作留到创作结束的时候。

云笔记工具

有道云笔记 可能不是最好的Markdown编辑器,但是它是最好的支持Markdown格式编辑的云笔记软件。

有道云笔记有可视化添加Markdown语法的操作按钮,有即时网页预览功能。另外,之所以称为“云”笔记,是因为可以随时随地通过手机、电脑、网页等多种方式编辑和分享笔记内容。你应该总是在移动设备上安装有道云笔记。

学习未知领域的知识,特别是对于系统性的知识,学习过程中有大量的实践总结和归纳、还有存疑处,都应记录到云笔记软件里,常常整理回顾,直到知识已经深深烙印在脑海里,把那些毫无价值的笔记内容再删除掉,使笔记内容总是有效。

根据个人喜好你也可以选择大象笔记、为知笔记等其他云笔记软件,甚至直接注册登陆 jianshu.com 网站(支持Markdown),将愿意公开的内容发布到网站上分享给大众。

学习Markdown

Markdown是什么

  • Markdown是Aaron Swartz 跟John Gruber共同设计的排版语言。
  • Markdown的目标是实现「易读易写」。
  • Markdown 语法的目标是:成为一种适用于网络的书写语言。
  • Markdown 不是想要取代 HTML,
  • Markdown 的理念是,能让文档更容易读、写和随意改。
  • HTML 是一种发布的格式,Markdown 是一种书写的格式。

Markdown扩展

Markdown由John Gruber发布在https://daringfireball.net ,也可以浏览Markdown中文网 快速了解Markdown的所有基本语法。

Markdown基础功能尚不完备,因此衍生了一系列版本,用于扩展Markdown的功能(如表格、脚注、内嵌HTML等等),Markdown增强版中比较有名的有Markdown Extra、MultiMarkdown、 Maruku等。这些衍生版本要么基于工具如,如Pandoc、有道云笔记(前文提及);要么基于网站,如GitHub和Wikipedia。它们在语法上基本兼容,但增强的语法使渲染效果更生动。

好用的Markdown工具

有道云笔记 可以用Markdown格式记录笔记。其实编辑和编译Markdown的工具很多,Macdown 值得一试;对于Windows用户,推荐安装 typora。如果你坚持用Sublime Text,插件Markdown Preview小巧轻便。

程序员入行之素养(三):寻根问题、追本溯源(如何检索专业知识)

发表于 2019-01-08 | 更新于 2020-04-27 | 分类于 IT , 预备课

笔者根据个人二十年从业经验,总结了在开始编程之前,应系统性地准备一系列工作,形成了“程序员入行必备之素养”系列。谨此,献给有志于从事软件开发职业的浩浩青年。

如果你有传统文献检索的经验,互联网时代,不过就是把检索的方法搬到计算机上,由于这正是计算机的擅长的领域,往往检索到的相关结果极其庞杂。因此,如何辨别这些结果的好坏、找出最有价值部分,才是我们本文要阐述的。

总是尝试用搜索引擎搜索未知的知识,是一个必须养成的习惯。上图表示搜索结果从上到下权重依次降低,应尽可能选择权威的信息进行使用。

假设导师刚分配一个你未知计算机领域的课题:“同学们,去了解下DocBook,下个月我们将使用它来书写论文”,想想你会怎么做?看下面的学习过程:

尝试搜索

如果你对DocBook一无所知,我想直觉的反应就是打开搜索引擎网站,输入:”什么是DocBook“,如果你正在使用百度,以下就是搜索结果:

结果总是优先呈现自家的”百度百科”(如果采用科学上网,wikipedia.org 上DocBook的词条可能更被优先展现)。不论哪个百科,你很快获得一种印象:百科是个宝库,对世界上很多词条给以正规的、通俗的阐述,百科大致相当于一次文献,参考价值自然不错。

继续向下翻阅搜索结果,如果某个相关标题看起来更易懂,当然也可以点进去看看。但是,这往往需要你仔细甄别目标网站的知名度、作者的水准,有可能作者对问题的表述很业余甚至是错的,耽误了大家宝贵的学习时间,甚至误入歧途。

知乎是一个更专业的问答网站,你可以直接进入该网站搜索docbook相关词条或提问,往往能得到更专业回答。

追本溯源

计算机技术起源西方,大多用英语阐述,不妨去掉关键字里的中文,直接搜索”DocBook”试试,百度搜索结果如下:

如果关键字涉及某种专业技术,通常第一个搜索结果都是这个技术的官方网站。观察上图显示的第一个搜索结果,对应网址是:https://docbook.org ,从名字上看,貌似该知识的发源。不过打开之后,第一感觉是卖书的,貌似不太符合一般”官方”的格调…

仔细阅读官网页面上不的文字(上图所示),里面有句话:

The definitive guide is the official documentation for DocBook.
…
but it is still available online.
《DocBook权威指南》是DocBook的官方文档 … 你仍然可以从 https://docbook.org/tdg/ 获取…

误会误会,是李逵不是李鬼。打开在线文档,名副其实的一本书的内容。看来这个知识可能需要系统地去学习啊。不过当务之急是先快速地了解基础概念才对,点击”What is DocBook”链接,里面又说:”DocBook由OASIS维护…”。 进入OSASIS网站,里面清楚地阐述DocBook的发展历史,演进方法,当前最新标准是5.1,打开最新标准文档,里面一句话总结了概念:

DocBook is a general purpose [XML] schema particularly well suited to books and papers about computer hardware and software (though it is by no means limited to these applications).
DocBook是一个XML Schema,特别适合于书写计算机领域的书和论文(但不限于此)。

连环新名词在计算机专业知识学习中是常见的,如果不幸你还不了解XML,那将不得不开展另一个学习线索,这里就此打住。不过到这里,终于还是理解了DocBook基本概念:它原来是用来写书的。

小试牛刀

”Word可以写书、网页也可以写书,DocBook为什么被推崇?“ 带着问题去学习,很自然地就会去深入文档了。一旦理解其理念后(原来DocBook格式的文档更容易交换和传播啊),一定是跃跃欲试、摩拳擦掌了。

官网Wiki页面,里面罗列了庞杂的书写工具(软件),挨个试着下载、安额和使用它们,直到找到最顺手的,赶快来试一试吧。下图是我用XMLmind XML Editor制作的一本书的样例:

严肃地学习一个计算机专业知识、特别是系统性的知识,”追本溯源”是必须养成的思维习惯:”找到知识的起源——原文出处、官方网站,读第一手资料”。前文提到的百科、知乎等主要是中文阐述、通俗简短,其全面性、权威性往往不足,只能作为一个辅助手段,用来快速了解问题的概貌。

程序员入行之素养(二):天下武功、唯快不破(成为一名优秀的打字员)

发表于 2019-01-05 | 更新于 2020-04-27 | 分类于 IT , 预备课

“首先是一名打字员,然后才是一名程序员”,输入速度是一名程序员必备的基本修养。

效率提升

你打字速度越快,你就:

  • 可以更快地写出问题解决方案的“骨架”;
  • 可以做更多地编码尝试;
  • 可以有更多的时间思考;
  • 可以与团队成员更公平地分担工作。

潜在的力量

想象一下你去参加面试的情景,坐在电脑前做题,如果你键步如飞,作为面试官会怎样看待你:

  • 小伙子貌似很机智(Smart);
  • 做事看起来干净利落、很专业(Professional);

倘若,为了输入一个小小的数学表达式,你不断地低头寻找符号在键盘上的位置时,面试官可能已经不耐烦了:

  • 马上还有事,我没有时间等他完成了;
  • 如果团队招募这样一个慢吞吞的人,对其他成员是不是不公平;
  • 算了,让Susan接待一下,真的来不及了,我去开会了。

阿特伍德的忠告

杰夫•阿特伍德(Jeff Atwood)

杰夫•阿特伍德(Jeff Atwood) 是Stack Overflow 创始人之一。他的文章We Are Typists First, Programmers Second 非常值得一读,可以作为”输入速度应成为程序员的基本修养”的一个佐证。

怎样练习

30 WPM(每分钟30英文单词)是入学半圆学社的最低要求。如果你没有达到这个门槛要求,可以使用Type Fu打字软件来练习。

为了提高打字速度,首先你要保证使用正确的指法(最好使用笔记本电脑,不用小键盘上的数字)。

其次,选择一款优秀的打字软件,用起来有一种“爽”气,清脆的仿机械键盘咔哒声,难度级别的自动调整等都能给打字者实时反馈激励,事半功倍。每天练习半个小时,一周之后,你一定会发现自己的功力大增。

使用正版软件是程序员的美德!Type Fu是收费软件,如果你只是想临时试用它的Mac本地应用,这里有一个临时下载,试用后请立即删除。

注:前面提及 30 WPM是以Type Fu软件为参照,选择Random,LEVEL 49(最高等级)的作为统计基准。
如果你当前使用Windows系统,又没有预算,可以下载 金山打字通(个人版) 来练习,也是个不错的软件。

程序员入行之素养(一):工欲善其事、必先利其器(Mac Style)

发表于 2019-01-03 | 更新于 2020-04-27 | 分类于 IT , 预备课

笔者根据个人二十年从业经验,总结了在开始编程之前,应系统性地准备一系列工作,形成了“程序员入行必备之素养”系列。谨此,献给有志于从事软件开发职业的浩浩青年。

Mac笔记本电脑

首先你需要有一台Mac笔记本电脑,相信这是你程序员生涯最好的开始。尽管全中国家庭都在使用微软公司的Windows,但你即将工作的组织安装的服务器99%的可能是Linux操作系统。没错,世界上使用最广泛的操作系统竟然是Linux,而和Linux系统最相像的图形操作系统就是苹果公司的macOS。

macOS起源于Unix FreeBSD,这使得它与开源世界无缝对接,开发和部署C、Pyton、PHP、Java到Linux服务器体验极其平滑。

熟练macOS操作

同开车一样,想找到熟练驾驭Mac电脑的感觉,一定有一个走合期间过渡,这需要你保持对未知事物的好奇心,自己多实践、多鼓捣。

这里我给出两个使用Mac习惯的忠告:

  • 不要用鼠标,完全用触控板替代
  • 能用快捷键就不要用触控板操作

通常,一台新的Mac电脑开箱后,对触控板作如下设置使操作更顺滑:

  • 系统偏好设置->触控板->光标点按,勾选”轻点来点按”;
  • 系统偏好设置->辅助功能->鼠标与触控板->触控板选项,勾选”启动拖移”,选择三指拖移

然后,你就可以开始熟悉macOS操作习惯了,最少掌握:

  • macOS的Launchpad + 桌面 ≈ Windows系统的桌面,macOS支持多个桌面;
  • 能熟练通过”访达(Finder)”检索文件和目录;
  • 创建苹果账号;
  • 安装和卸载软件(官网下载和App Store下载);
    • 从App Store(苹果公司官方商店)下载安装;
    • 从软件官网下载安装;
  • 搜罗macOS下Windows同类软件替代品。

如果你惰于自己研究,可以购买《苹果Mac OS X El Capitan 10.11完全手册》 ,也许能加速系统性地了解macOS。

安装基础工具

Mac电脑开箱后通常就具备了基本日常办公工具。如邮件、日历、Office套件:Pages、Numbers、Keynote(对应MS Office),Keynote是一个极优秀的幻灯片制作软件,应熟练和习惯用它来替代Office PPT。中国用户特有的微信、QQ则需要自己安装。

不过,我们这里不是讨论日常办公的软件,而是专注于准程序员必备的几个基本工具:

  • Sublime Text 纯文本编辑器
  • Google Chrome 网页浏览器
  • 有道云笔记 记读书笔记
  • 有道词典 拯救你的英语
  • Type Fu 很酷的打字软件

为了学习能多管齐下,手机也应安装:

  • 有道云笔记
  • 有道词典
  • YoMail 邮件客户端 ,苹果手机 Arimail 体验更佳

这些软件如此基础和重要么?不必问,后面文章的逻辑会解释。如果你已经迫不及待想试用各种macOS应用,去小众软件翻一翻,里面有不错的软件推荐。

触控板和快捷键(Cheat Sheet)

触控板和键盘好比你手中的方向盘,要熟练到什么程度都不为过。

触控板

  • 单指轻敲:同鼠标左键
  • 双指轻敲:同鼠标右键
  • 双指推动:滑动窗口(上下左右均可滑动)
  • 三指拖动:
    • 如果光标位于文本区域,从当前光标位置选中到三只拖动的位置;
    • 如果光标在窗口BAR处,则拖动窗口(反复拖动,松手再拖动)
  • 四指推拉:平铺所有应用窗口->层叠显示所有应用窗口->仅显示当前应用窗口
  • 五指扩大/缩小:显示桌面->显示当前应用窗口->显示显示应用(从大到小)

快捷键

先熟悉下每个符号对应的键盘的表示:

⌘(command)- ⌘键更类似于Windows下的CTRL键。
⌥(option)
⇧(shift)
⇪(caps lock)
⌃(control)
↩(return)

全局快捷键

  • 长按关机键:强制关机
  • ⌘ + W:关闭当前窗口
  • ⌘ + Q:退出当前应用(注:访达不可退出)
  • ⌘ + TAB:切换打开的应用
  • ⌃ + 空格:切换输入法
  • ⌘ + ⇧ + 3: 全屏截图
  • ⌘ + ⇧ + 4: 选择截图
  • ⌘ + 空格:打开Spotlight应用,输入应用程序名,快速打开
  • ⌘ + ,:打开当前应用的偏好设置

访达(Finder)快捷键

  • 轻敲触控板选中文件或目录
  • ⌘ + ⌥ + 空格:打开访达
  • ⌘ + ↓:选中目录,按该组合进入目录;选中文件,按该组合用默认关联程序打开该文件
  • ⌘ + ↑:在当前位置,按该组合回到上级目录
  • ↩:选中文件或目录,按回车键,修改名字,修改完,再次按回车键,完成修改
  • ⇧ + ↑/↓:选中一个文件或目录,按住⇧,再不断按上下箭头选择多个文件或目录
  • 触控板三指拖拉:在访达的某个位置(目录)中,在空白处使用触控板三指拖拉可以选中文件或子目录
  • ⌘ + A:选中当前窗口所有文本
  • ⌘ + C:选中文件和目录复制到到剪贴板
  • ⌘ + V:进入目标位置(目录),把剪贴板的内容复制进去
  • ⌘ + ⌥ + V:进入目标位置(目录),把剪贴板的内容剪切过去(同移动)
  • ⌘ + ⇧ + N:创建一个新的目录
  • ⌘ + DELETE:选中文件或目录,按该组合删除之
  • ⌘ + ⇧ + G:直接输入目标文件和目录的绝对路径,按回车键直接进入
  • ⌘ + Z:不小心误操作(比如:不小心删除文件到垃圾桶),可以按此组合键回退

应总是开启”显示文件扩展名”,打开Finder的”偏好设置”->”高级”,勾选“显示所有文件扩展名”。

Sublime Text快捷键

文件操作

  • ⌘ + N:新建文件
  • ⌘ + O:打开文件或目录
  • ⌘ + S:存储当前编辑的文件
  • ⌘ + ⇧ + G:打开文件或目录时,直接输入目标文件和目录的绝对路径,按回车键进入相应目录。

查找替换

  • ⌘ + F:在当前文件搜索文本
  • ⌘ + ⌥ + F:在当前文件搜索和替换文本
  • ⌘ + ⇧ + F:在指定目录下的文件搜索,并可以替换文本

文本选择和编辑

  • ⌘ + ⌥ + 触控板点选|拖选:先按住⌘ + ⌥,再拖拉或点选触控板,选择多列,同时编辑操作
  • ⌘ + ←/↑/→/↓:按住⌘ + 上下左右键,分别定位到页首、页尾、行首、行末
  • ⌥ + ←/→:按住⌥ + 左右键,在当前行调到上或下一段文本
  • ⇧ + ←/↑/→/↓:按住⇧ + 上下左右键,选择文本
  • ⌥ + ⇧ + ←/→:按住⌥ + ⇧ + 左右键,选择上或下一段文本
  • ⌘ + A:选中当前窗口所有文本
  • ⌘ + C:复制选中的文本到剪贴板
  • ⌘ + V:把剪贴板的内容粘贴到光标位置
  • ⌘ + Z:误操作按此组合键回退

Mac自带的终端ls命令下文件与文件夹颜色单一的调整

发表于 2018-11-03 | 更新于 2020-04-27 | 分类于 IT

macOS自带的终端是款非常好用的ssh工具,但ls命令下文件与文件夹都是单一的颜色,为了更好区分,作出修改。
终端默认背景颜色为白色,(终端->偏好设置->描述文本),可修改背景颜色与字体大小。
运行下面的命令:

1
2
3
4
5
echo "echo export LS_OPTIONS='--color=auto'" # 如果没有指定,则自动选择颜色">>~/.bash_profile
echo "export CLICOLOR='Yes' #是否输出颜色">>~/.bash_profile
echo "export LSCOLORS='CxfxcxdxbxegedabagGxGx' #指定颜色">>~/.bash_profile

source ~/.bash_profile

ls目录颜色修改到这就ok了。其中绿色为文件夹。

详细说下LSCOLORS=’CxfxcxdxbxegedabagGxGx’中的值代表的意思,这22个字母2个字母一组分别指定一种类型的文件或者文件夹显示的字体颜色和背景颜色。从第1组到第11组分别指定的文件或文件类型为:

1
2
3
4
5
6
7
8
9
10
11
directory #  文件夹目录
symbolic link
socket
pipe
executable
block special
character special
executable with setuid bit set
executable with setgid bit set
directory writable to others, with sticky bit
directory writable to others, without sticky bit

下面是颜色的字母对照:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
a 黑色
b 红色
c 绿色
d 棕色
e 蓝色
f 洋红色
g 青色
h 浅灰色
A 黑色粗体
B 红色粗体
C 绿色粗体
D 棕色粗体
E 蓝色粗体
F 洋红色粗体
G 青色粗体
H 浅灰色粗体
x 系统默认颜色

所以,如果我们想把文件夹目录显示成红色,就可以把LSCOLORS设置为bxfxaxdxcxegedabagacad就可以了。

绿色粗体’CxfxcxdxbxegedabagGxGx’
蓝色粗体’ExfxcxdxbxegedabagGxGx’

123

Guoguolong

30 日志
7 分类
17 标签
GitHub E-Mail
© 2020 Guoguolong
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Gemini v7.1.1