第六章 重定向
重定向前言
本章我们将要探讨命令行最酷的功能- I/O 重定向。
I/O 是输入/输出 (input/output) 的缩写。这个功能可以把命令行的输入的重定向为从文件中获取内容,也可以把命令行的输出结果重定向到文件中。
如果我们将多个命令行关联起来,将形成非常强大的命令-管道。
本章的主要命令:
cat: 合并文件
sort: 对文本进行排序
uniq: 报告或删除文件中的重复的行
wc: 打印文件中的换行符、字和字节的个数
grep: 打印匹配行
head: 输出文件的第一部分内容
tail: 输出文件的最后一部分内容
tee: 读取标准输入的数据,并将其内容输出到标准输出和文件中
标准输入、标准输出和标准错误基本介绍
目前为止,我们使用过的很多程序生成不同种类的输出。
这些输出通常包含两种类型。一种是程序运行的结果,即该程序生成的数据;另一种是状态和错误信息,表示程序当前的运行情况。
比如输入 ls 命令,屏幕上将显示它的运行结果以及它的相关错误信息。
与 UNIX 系统一切都是文件的思想一致,类似 ls 的程序实际上把它们 ...
第五章 命令的使用
第五章 命令的使用前言
本章中介绍的命令如下:
type: 说明如何解释命令名
which: 显示会执行哪些可执行程序
man: 显示命令的手册页
apropos: 显示一系列合适的命令
info: 显示命令的info条目
whatis: 显示一条命令的简述
alias: 创建一条命令的别名
命令类型
可执行程序
可执行程序就像在 /usr/bin 目录里看到的所有文件一样。
在该程序类别中,程序可以编译为二进制文件,比如 C、C++ 语言编写的程序,也可以是 Shell、Perl、Python、Ruby 等脚本语言编写的程序。
shell 内置命令
bash 支持许多在内部称之为 shell builtin 的内置命令。
shell 函数
shell 函数是合并到环境变量中的小型 shell 脚本。
alias 命令
我们可以在其他命令的基础上定义自己的命令。
识别命令基本介绍
能够准确地识别我们使用的命令是上述 4 种命令类型中的哪一种是很有用的。
type - 显示命令的类型
type 命令是一个 shell 内置命令,可 ...
第四章 操作文件与目录
第四章 操作文件与目录前言
本章将介绍如下命令:
cp: 复制文件和目录
mv: 移动或重命名文件和目录
mkdir: 创建目录
rm: 移除文件和目录
ln: 创建硬链接和符号连接
以上 5 个命令属于最常使用 Linux 命令之列,可用来操作文件与目录。
坦率地说,使用图形文件管理器来执行一些由这些命令执行的任务要容易多。使用文件管理器,我们可以将文件从一个目录拖放到另一个目录,我们可以剪切和粘贴文件,我们可以删除文件。
使用命令行程序的原因是其具有强大的功能和灵活的操作。
虽然使用图形文件管理器能轻松实现简单的文件操作,但是对于复杂的任务,使用命令行程序更容易完成。
例如,将所有 HTML 文件从一个目录复制到目标目录,要完成这个任务,使用文件管理器则相当困难,而使用命令行则很容易。1cp -u *.html destination
通配符
基本介绍
在开始使用命令之前,我们需要介绍一个使命令行如此强大的 shell 特性
由于 shell 需要经常使用文件名,因此它提供了一些特殊字符来帮助你快速指定一组文件名,这些特殊字符称为通配符
通配符 (也叫文件名替 ...
第三章 Linux 基本系统
Linux 基本系统前言
既然已经知道了如何在文件系统中跳转,是时候开始 Linux 操作系统之旅了。
在开始之前,我们要先学习一些对研究 Linux 系统很有帮助的命令。
ls: 列出目录内容
file: 确定文件类型
less: 查看文件内容
ls 命令的乐趣基本介绍
有充足的理由证明, ls 命令很可能是用户最常用的命令。
通过 ls 命令可以查看目录内容,确定各种重要文件和目录的属性。
我们已经看到,只需输入 ls 命令,即可查看当前工作目录中包含的一系列文件和子目录。12[me@linuxbox ~]$ lsDesktop Documents Music Pictures Public Templates Videos
除了当前工作目录之外,我们还可以指定要显示的,如下所示。123[me@linuxbox ~]$ ls /usrbin games kerberos libexec sbin srcetc include lib local share tmp
我们甚至可以指定多个目录。下面这个例子就列出了用户主目录(由符号 ~ 表示)和 & ...
第二章 导航.md
导航前言
除了在命令行进行输入操作之外,我们首先需要学习的是如何在 Linux 系统中导航文件系统。
本章将介绍下述命令:
pwd: 查看当前工作目录
cd: 改变目录
ls: 列出目录内容
理解文件系统树
与 Windows 相同,类 UNIX 操作系统也是以称之为分层目录结构的方式来组织文件的。
这意味着文件是在树形结构的目录(有时在其他系统中称为文件夹)中进行组织的,该树形结构目录可能包含文件和其他目录。
文件系统的第一个目录叫做根目录,它包含了文件和子目录。子目录里包含了更多的文件和子目录,依此类推。
需要注意的是,在 Windows 系统中,每个存储设备都有一个独立的文件系统树。而在类 UNIX 系统中,如 Linux ,无论多少驱动器或储存设备与计算机相连,通常只有一个文件系统树。
根据系统管理员的设置,存储设备将会挂载到文件系统树的不同位置,系统管理员要负责系统的维护。
当前工作目录
可能大部分人都熟悉用于表示文件系统树的图形文件管理器,需要注意的是,树通常是倒立显式的。也就是说,顶部是根目录,依次向下排列是子目录。
然而,由于命令行没有图像,若是要浏览文件系统树 ...
第一章 Shell 是什么
Shell 是什么终端仿真器
当谈到命令行时,我们实际上指的是 shell 。
shell 是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序。
几乎所有的 Linux 发行版都是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序。
几乎所有的 Linux 的发行版都提供 shell 程序,该程序来自于称之为 bash 的 GNU 项目。
bash 是 Bourne Again Shell 的首字母缩写, Bourne Again Shell 基于这样一个事实,即 bash 是 sh 的增强版本,而 sh 是最初的 UNIX shell 程序,由 Steve Bourne 编写。
当使用图形用户界面时,需要另一种叫做终端仿真器(terminal emulator)的程序与 shell 进行交互。
在 KDE 环境下使用的是 konsole ,而在 GNOME 环境下使用 gnome-terminal ,但是在桌面菜单上很可能将它们简单地统称为终端。
在 Linux 系统中,还有许多其他的终端仿真器可以使用,但是它们基本上都做同样的事情:让用户访问 shell 。
因为 ...
第十六讲 Git rebase
Git rebase基本介绍
rebase:变基,意即改变分支的根基
rebase 作用:从某种程度上来说,rebase 与 merge 可以完成类似的工作,不过两者的工作方式有着显著的差异
Git rebase 操作12git checkout branch_namegit rebase branch_new_name
Git merge 操作和 Git rebase 操作的区别: 两者结果内容一样,过程和操作方式完全不一样。
Git rebase 操作会修改提交历史,会让提交历史变成一条直线。
Git rebase 原理:实际上是将一个分支的修改内容应用到里另外一个分支上,不断的应用,所以提交历史变成一条直线。
Git rebase 注意事项
rebase 过程中也会出现冲突
解决冲突后,使用 git add 添加,然后执行如下命令:1git rebase --continue
接下来 Git 会继续应用余下的补丁
任何时候都可以通过如下命令终止 rebase ,分支会恢复到 rebase 开始前的状态1git rebase --abort
Git rebase 最佳实践
...
第十五讲 Git subtree 与 Git cherry-pick
Git subtree 与 Git cherry-pickGit subtree
Git submodule 如果在主项目修改依赖项目会造成很多问题,Git subtree 和 Git submodule 解决问题一样,Git subtree 可以解决针对双向修改。
新建 git_subtree_parent 和 git_subtree_children 两个工程(远程仓库),其中 git_subtree_children 是子工程。
在本地创建仓库 git_subtree_parent 和 git_subtree_children
在本地创建的仓库 git_subtree_parent 新建文件 parent.txt ,将修改纳入暂存区,并进行提交
配置远程仓库 git_subtree_parent 信息
将本地的 git_subtree_parent 提交推送到远程 git_subtree_parent 中
在本地创建的仓库 git_subtree_children 新建 children.txt,将修改纳入暂存区,并进行提交
配置远程仓库 git_subtree_childr ...
第十四讲 Git 裸库与 Git submodule
Git 裸库与 Git submoduleGit 裸库
没有工作区的 Git 仓库(一般在服务器端)
创建裸库命令1git init --bare # 没有工作区
Git submodule
项目的相互协作(多模块开发-项目的依赖)
准备工作
在 GitHub 上创建仓库 git_parent 和 git_children
在本地创建仓库 git_parent 和 git_children
在本地创建的仓库 git_parent 新建文件 parent.txt ,将修改纳入暂存区,并进行提交
配置远程仓库 git_parent 信息
将本地的 git_parent 提交推送到远程 git_parent
在本地创建的仓库 git_children 新建 submodule.txt ,将修改纳入暂存区,并进行提交
配置远程仓库 git_children 信息
将本地的 git_children 提交推送到远程 git_children
在本地创建的仓库 git_children 新建 hello.txt ,将修改纳入暂存区,并进行提交
将本地的 git_children 提交推送到远 ...
第十三讲 Git gc
Git gcgit 垃圾收集
git 垃圾收集主要用于做一些文件压缩,将分散在不同地方的文件给合并到一起,对一些对象通过一些手段将其所占体积减少。(git gc 实际开发中使用很少,因为很多时候 git 后台自动运行)
进入本地仓库1cd repository_name
进入 refs 目录1cd refs
进入 heads 目录123cd headslscat branch_name # 查看本地分支内容
进入 remotes/origin 目录12cd remotes/origincat branch_name # 查看远程分支内容
进入 tags 目录12cd tagscat v1.0 # 查看标签内容
运行 git gc 命令1git gc # 文件压缩(git gc 实际上把 refs 目录下的所有文件被打包到 pached-refs 目录下,增加新的提交信息,则该信息还是在 refs 的目录下)
git 每次提交的对象保存到 .git/objects/info 的 packs 文件中(进行压缩后 .git/objects/i ...