漆黑如夜的终端上,那星星闪闪的命令行光标,正指引着你去往那神秘莫测的壳(shell)。可能当你的老教授正在终端里敲击着一行夹杂着各种奇怪符号和字母的one-liner,你暗暗地在心里笑着他们不懂得拥抱新时代,可那回车时的一声脆响,你恍惚地看见屏幕上飞速闪过了些什么,当屏幕静止的时候,你的问题解决了。可真正令你的笑容僵住的,是你并不知道刚刚发生了什么,像是看了一个近景魔术。
Backgroud Facts:
- 文件夹(folder)和目录(directory/dir)简单来指的是同一个概念,即可以包含文件或指引你找到其他文件的这么个东西.
- 若想真正学好一种工具及其背后的原理,绝对绝对不建议使用其GUI版本. ex. Github Desktop, Intellij内置的version control, FileZilla, CyberDuck, etc. 这些东西确实很好用, 但是在学习阶段确是利大于弊.
- 所谓根目录(root directory, '/'), 简单来说就是你所有文件的最最最上层的那个目录.
- 一般来说你一打开本地终端或者登陆到了另一个系统, 你会身处在你的home目录, 即 /home/you_user_name/
- 待续
在UBC上CPSC免不了知道这些指令,这些指令在Linux和Mac上都可以用,一般来说不需要额外安装个啥. 因为学校的作业大多是以Linux为背景, 所以不建议使用Windows的Command或者Powershell. (如果不是非GUI不用的话, 用Windows的同学们也不是非要用学校推荐的的X开头的工具系列, 现在正常来说都是win10了吧,有个程序叫Windows Linux Subsystem, 在Microsoft Store里就有, 然后你就拥有了一个Linux系统了. 在这个系统里,你的硬盘(C, D, E...)会被放到/mnt/下面. 举个例子,如果你想找到你桌面的文件, 它们会在/mnt/c/Users/you_user_name/Desktop/).
ssh ssc_username@remote.students.cs.ubc.ca
登录到学校Linux系统, 替换你自己的ssc_username. 你的作业只会在这种系统上来评分,所以记得交之前要放上来测试. 要退出可以用logout或者exit.
scp local_file_path ssc_username@remote.students.cs.ubc.ca:~/
用来上传本地的文件到学校Linux机上, 替换local_file_path为你想上传的文件. 若要上传文件夹则需要在scp后加-r.
- 反之
scp file_to_save_path ssc_username@remote.students.cs.ubc.ca:~/file_to_download
则是从学校系统中下载file_to_download到你自己的local_file_path. 注意, 上传下载都会自动覆盖目的地的同名文件.
mkdir dir_name
创建一个名为dir_name的文件夹. 若要一口气创建一串文件夹, 可以用mkdir -p cp313/a3/code
, 会创建一个三层的文件夹.
mv old_name new_name
这个指令不光可以移动文件(夹), 还可以重命名文件(夹), 即把名为old_name的文件改为new_name.
ls
,ls -l
, ls -la
. 列出当前目录(文件夹)下的文件. 加上了-l会显示更丰富的信息, -a则会显示以.开头的隐藏文件, 比如.git这个目录.
cd path_to_your_dst
去往path_to_your_dst这个目录. ex. cd ~/cs213/a4
, 则会将你带去你的home(~)目录下cs213里的a4这个目录中. 这个指令会带你寻找诗和远方.
- 若想快速查看一个文件的内容可用
cat fileName
.
head fileName
和tail fileName
可与于快速查看一个文件的开头和结尾.
单独分出来一块讲git. 首先GitHub和git不是一个东西, git是一套版本管理(version control)的协议, 而GitHub是一个支持这种协议的一个类似仓库一样的存在, 你通过git来和GitHub交流. 同样支持git的还有学校自己的stash. 接下来讲的都是如何用cli来使用git.
什么是branch?
其实就是字面意思, 树干, 即分支. 每个git project会默认有一个master branch, 可以理解为一棵树的主干, 而其他branch则是从主干中长出的枝干, 一开始和它的主干有一样的东西, 但随后可能渐行渐异. 为什要有这种操作呢? 一般是希望很多成员可以同时开发, 每个branch有着不同而又独立的新的内容, 最后在把新的内容merge回master. 但是很难说各个branch之间会完全独立, 所以最后merge时会出现冲突, 即merge conflict. 这时需要决定保留那些新的内容, 便可化解.
什么是commit?
commit当名词来讲是提交, 提交什么呢? 提交对文件的改动, 比如说你在一个文件里加了一句话, 删了一个词, 或者创建了, 删除了一个文件. 那commit当作动词来讲便是是提交这些改动或者说记录下来这些改动. 每次commit都会先存在本地, 记录了谁, 在什么时间, 做了哪些具体的改动. 之后可选择将这次commit上传到远程的服务器(GitHub, Stash), 此行为便是push.
- 要想使用git, 必须身处一个有.git的目录里.
ls -a
,如果看到了.git, 再继续.没看到的话,说明没有正确的下载或者什么原因误删了.git.
- 要下载一个git project的话,
git clone repo_url
, repo_url一般会像https://github.com/kulga/flarummanagement.git这样以.git结尾.
git status
会告诉你在上一次commit之后你有哪些文件层面的改变.
git diff fileName
会显示这个文件和上次commit的有什么具体内容上的改变. 若不加fileName则显示全部改动, 如果改动内容多的话, 有可能需要按q来退出.
5.