├── .gitignore ├── 01.0.md ├── 01.1.md ├── 01.2.md ├── 02.0.md ├── 02.1.md ├── 03.0.md ├── 03.1.md ├── 03.2.md ├── 04.0.md ├── 04.1.md ├── 04.2.md ├── 04.3.md ├── 04.4.md ├── 04.5.md ├── 04.6.md ├── 05.0.md ├── 05.1.md ├── 06.0.md ├── 07.0.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_store -------------------------------------------------------------------------------- /01.0.md: -------------------------------------------------------------------------------- 1 | # 1 Mac下更好用的终端命令程序 2 | 3 | iTerm2是一款MacOS系统下的terminal emulator(终端模拟器) 4 | 5 | 它带来了许多你经常需要并且方便使用的特性 6 | 7 | ## link 8 | 9 | * [目录](README.md) 10 | 11 | * 下一节: [安装iTerm2](01.1.md) 12 | -------------------------------------------------------------------------------- /01.1.md: -------------------------------------------------------------------------------- 1 | # 1.1 安装iTerm2 2 | 3 | 安装iTerm2非常简单,只需要访问iTerm2的官方网址,点击官方的下载链接,下载安装即可。 4 | 5 | 官方网址: 6 | 7 | ```url 8 | https://www.iterm2.com/index.html 9 | ``` 10 | 11 | 下载地址: 12 | 13 | ```url 14 | https://www.iterm2.com/downloads.html 15 | ``` 16 | 17 | ## link 18 | 19 | * [目录](README.md) 20 | 21 | * 上一节[Mac下更好用的终端命令程序](01.0.md) 22 | 23 | * 下一节[iTerm2的常用快捷键](01.2.md) 24 | -------------------------------------------------------------------------------- /01.2.md: -------------------------------------------------------------------------------- 1 | # iTerm2的常用快捷键 2 | 3 | 1. cmd + q: 退出iTerm2 4 | 2. cmd + t: 新建tab 5 | 3. cmd + n: 新建窗口(不常用) 6 | 4. cmd + d: 窗口切分 7 | 5. cmd + w: 关闭一个窗口 8 | 6. cmd + shift + [ : 选择左边的窗口 9 | 7. cmd + shift + ] : 选择右边的窗口 10 | 11 | ## link 12 | 13 | * [目录](README.md) 14 | 15 | * 上一节[安装iTerm2](01.1.md) 16 | 17 | * 下一节[Homebrew-macOS缺失的软件包管理器](02.0.md) 18 | -------------------------------------------------------------------------------- /02.0.md: -------------------------------------------------------------------------------- 1 | # Homebrew-macOS缺失的软件包管理器 2 | 3 | Homebrew,像linux下的apt,rpm等,是macOS系统下的方便,强大,易用的包管理工具 4 | 5 | Homebrew是一款自由及开放源代码的软件包管理系统,用以简化Mac OS X系统上的软件安装过程,最初由马克斯·霍威尔(Max Howell)写成。该包管理器在Ruby on Rails社区广为人知,因其可扩展性得到了一致好评。 6 | 7 | 你可以使用Homebrew方便的安装许多Mac下的常用程序。 8 | 9 | ## link 10 | 11 | * [目录](README.md) 12 | 13 | * 上一节[安装iTerm2](01.2.md) 14 | 15 | * 下一节[安装Homebrew](02.1.md) -------------------------------------------------------------------------------- /02.1.md: -------------------------------------------------------------------------------- 1 | # 安装Homebrew 2 | 3 | Homebrew的官网 4 | 5 | ```url 6 | https://brew.sh/index_zh-cn.html 7 | ``` 8 | 9 | 安装 Homebrew 10 | 11 | ```bash 12 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 13 | ``` 14 | 15 | 安装好homebrew后,有兴趣的同学可以安装一下cakebrew。 16 | 17 | `cakebrew`是为了方便管理homebrew的包的一款App 18 | 19 | ## link 20 | 21 | * [目录](README.md) 22 | 23 | * 上一节[Homebrew-macOS缺失的软件包管理器](02.0.md) 24 | 25 | * 下一节[Zsh-一款功能强大的shell软件](03.0.md) -------------------------------------------------------------------------------- /03.0.md: -------------------------------------------------------------------------------- 1 | # Zsh-一款功能强大的shell软件 2 | 3 | `Zsh`是一款功能强大终端(shell)软件,既可以作为一个交互式终端,也可以作为一个脚本解释器。它在兼容`Bash`的同时 (默认不兼容,除非设置成 emulate sh) 还有提供了很多改进 4 | 5 | * 更高效 6 | * 更好的自动补全 7 | * 更好的文件名展开(通配符展开) 8 | * 更好的数组处理 9 | * 可定制性高 10 | 11 | ## link 12 | 13 | * [目录](README.md) 14 | 15 | * 上一节[安装Homebrew](02.1.md) 16 | 17 | * 下一节[Zsh的安装](03.1.md) -------------------------------------------------------------------------------- /03.1.md: -------------------------------------------------------------------------------- 1 | # Zsh的安装 2 | 3 | 使用brew安装zsh非常的方便 4 | 5 | ```bash 6 | brew install zsh zsh-completions 7 | ``` 8 | 9 | 执行`zsh --version`验证`zsh`是否安装成功 10 | 11 | ```bash 12 | >zsh --version 13 | zsh 5.3.1 (x86_64-apple-darwin16.3.0) 14 | ``` 15 | 16 | ## link 17 | 18 | * [目录](README.md) 19 | 20 | * 上一节[Zsh-一款功能强大的shell软件](03.0.md) 21 | 22 | * 下一节[oh-my-zsh的安装](03.2.md) -------------------------------------------------------------------------------- /03.2.md: -------------------------------------------------------------------------------- 1 | # oh-my-zsh的安装 2 | 3 | `oh-my-zsh`是一款`zsh`的配置框架。相当于别人提供的`zsh`配置方式。因此可以直接通过安装`oh-my-zsh`来实现`zsh`的配置 4 | 5 | ## 安装前准备条件: 6 | 7 | * 首先确保已经安装了`zsh`,打开terminal,执行`zsh --version` 8 | * `curl` 或者 `wget`已经被安装 9 | 10 | 在终端中执行`curl`或者`wget`来确定两种程序是否被安装 11 | 12 | 如果没有被安装,执行 13 | 14 | ```bash 15 | brew install curl 16 | ``` 17 | 18 | 或者 19 | 20 | ```bash 21 | brew install wget 22 | ``` 23 | 24 | ## 安装方式 25 | 26 | ### 通过curl安装 27 | 28 | ```bash 29 | sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 30 | ``` 31 | 32 | ### 通过wget安装 33 | 34 | ```bash 35 | sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)" 36 | ``` 37 | 38 | oh-my-zsh已经安装完成了。 39 | 40 | 对于初学者来说,尽管oh-my-zsh提供了许多插件和主题,但使用默认的配置就已经很方便了,所以大家可以不用关系要怎么修改oh-my-zsh的配置。 41 | 42 | ## link 43 | 44 | * [目录](README.md) 45 | 46 | * 上一节[Zsh的安装](03.1.md) 47 | 48 | * 下一节[基本的文件操作命令](04.0.md) 49 | -------------------------------------------------------------------------------- /04.0.md: -------------------------------------------------------------------------------- 1 | # 基本的文件操作命令 2 | 3 | 本章节将为大家介绍Mac(或者linux)系统下常用的关于文件操作的终端命令 4 | 5 | ## link 6 | 7 | * [目录](README.md) 8 | 9 | * 上一节[oh-my-zsh的安装](03.2.md) 10 | 11 | * 下一节[相对路径和绝对路径](04.1.md) -------------------------------------------------------------------------------- /04.1.md: -------------------------------------------------------------------------------- 1 | # 相对路径和绝对路径 2 | 3 | ## 绝对路径 4 | 5 | 路径的写法一定由根目录/发起,例如:/usr/share/doc 6 | 7 | ## 相对路径 8 | 9 | 路径的写法不是由/写起,例如由/usr/share/doc要到/usr/share/man下面时,可以写成"cd ../man",这就是相对路径的写法。相对路径意指相对于目前工作目录的路径。 10 | 11 | ## 相对路径和绝对路径的对比 12 | 13 | 相对路径提供了一种能够快速在各个路径之间跳转的方式。 14 | 15 | 绝对路径提供了一种精确的文件定位的方式。 16 | 17 | ## link 18 | 19 | * [目录](README.md) 20 | 21 | * 上一节[基本的文件操作命令](04.0.md) 22 | 23 | * 下一节[目录的相关操作](04.2.md) 24 | -------------------------------------------------------------------------------- /04.2.md: -------------------------------------------------------------------------------- 1 | # 目录的相关操作 2 | 3 | 大家可以想到哪些常用的目录的操作命令呢?例如创建目录,删除目录之类的。还有得先知道的,就是有哪些比较特殊的目录呢?举例来说,下面这些就是比较特殊的目录,要记下来: 4 | 5 | ``` 6 | . 代表此层目录 7 | .. 代表上一层目录 8 | - 代表前一个工作目录 9 | ~ 代表“目前用户身份”所在的主文件夹 10 | ~account 代表account这个用户的主文件夹(account是个账号名称) 11 | ``` 12 | 13 | 需要注意的是,在所有的目录下面都存在两个目录,分别是"."和"..",分别代表此层和上层目录的意思。 14 | 15 | >根目录下"."和".."代表的是同一个目录 16 | 17 | ## 常见的处理目录的命令 18 | 19 | * cd: 切换目录 20 | * pwd: 显示当前目录 21 | * mkdir: 新建一个新的目录 22 | * rmdir: 删除一个空的目录 23 | 24 | ### cd(切换目录) 25 | 26 | * 当我们登录我们的Mac时,打开terminal后,所在的目录为当前用户的主目录。下面我们使用主目录下/tmp这个目录,演示cd的使用方法: 27 | 28 | cd [相对路径或者绝对路径] 29 | 30 | 打开terminal执行下面的几条命令: 31 | 32 | ```bash 33 | cd /tmp 34 | 进入根目录下/tmp目录 35 | 36 | cd ~ 37 | 回到主目录 38 | 39 | cd - 40 | 回到/tmp目录 41 | 42 | cd . 43 | 目录不变 44 | 45 | cd .. 46 | 回到上层目录,这里的上层目录不再是当前用户主目录,而是系统的根目录,因为/tmp目录是整个系统的临时目录 47 | 48 | cd ~ 49 | 回到用户根目录 50 | ``` 51 | 52 | >/tmp目录为系统临时目录,系统会定期的自动清空该文件夹。 53 | 54 | >我们使用的zsh,具有文件补齐的功能,你要经常利用[Tab]键快速完整的输入目录。这是一种好习惯,可以避免你按错键输入错字 55 | 56 | * cd 是Change Directory的缩写,这是用来切换工作目录的命令。注意,目录名称与cd命令之间存在一个空格 57 | 58 | ### pwd(显示目前所在的目录) 59 | 60 | 在根目录下执行: 61 | 62 | ```bash 63 | cd ~ 64 | 回到根目录 65 | 66 | pwd 67 | 显示当前路径 68 | 69 | cd /tmp 70 | 71 | pwd 72 | ``` 73 | 74 | >通过上面也可以发现/tmp并不在用户的根目录下 75 | 76 | ### mkdir(新建新目录) 77 | 78 | 在用户根目录下执行 79 | 80 | ```bash 81 | mkdir [-mp] 目录名称 82 | 83 | 参数: 84 | -m: 配置文件的权限,直接设置不需要看默认权限(unmask) 85 | -p: 帮助你直接将所需要的目录(包括上层目录)递归创建起来(常用) 86 | 87 | 范例:请到/tmp 下面尝试创建数个新目录看看: 88 | 89 | cd /tmp 90 | 91 | mkdir test <==创建一个名为test的新目录 92 | 93 | mkdir test1/test2/test3/test4 <== 没有办法直接创建此目录 94 | 95 | mkdir -p test1/test2/test3/test4 <== 目录创建成功 96 | ``` 97 | 98 | * 建议大家少使用-p这个参数来创建目录,因为担心你打错字,那么目录就变得乱七八糟的了 99 | 100 | ### rmdir(删除"空"目录) 101 | 102 | rmdir [-p] 目录名称 103 | 104 | -p: 连同上层"空的"目录也一起删除 105 | 106 | ```bash 107 | cd /tmp 108 | 109 | ls -l <== 看看有多少目录存在 110 | 111 | rmdir test <==可直接删除掉,没问题 112 | 113 | rmdir test1 <== 因为尚有内容,所以无法删除 114 | 115 | rmdir -p test1/test2/test3/test4 116 | 117 | ls -l <== 显示结果中,test和test1不见了 118 | 119 | # 利用-p 这个参数,立刻就可以将test1/test2/test3/test4 一次删除 120 | # 不过要注意的是,这个rmdir仅能"删除空的目录" 121 | ``` 122 | 123 | * 如果要删除一个包含内容的目录要怎么办呢? 这个时候就需要使用"rm -r test"了 124 | 125 | ## link 126 | 127 | * [目录](README.md) 128 | 129 | * 上一节[相对路径和绝对路径](04.1.md) 130 | 131 | * 下一节[查看文件与目录](04.3.md) 132 | -------------------------------------------------------------------------------- /04.3.md: -------------------------------------------------------------------------------- 1 | # 查看文件与目录 2 | 3 | ```bash 4 | ls [-aAdfFhilnRSt] 目录名称 5 | 6 | ls [--color={never, auto, always}] 目录名称 7 | 8 | ls [--full-time] 目录名称 9 | 10 | 参数: 11 | 12 | -a: 全部的文件,连同隐藏文件(开头为`.`的文件)一起列出来(常用) 13 | -A: 列出全部的文件(连同隐藏文件,但不包括`.`与`..`这两个目录) 14 | -d: 仅列出目录本身,而不是列出目录内的文件数据(常用) 15 | -f: 直接列出结果,而不是进行排序(ls默认会以文件名排序) 16 | -F: 根据文件,目录等信息给予附加数据结构,例如: 17 | *: 代表可执行文件;/:代表目录;=:代表socket文件;|:代表FIFO文件 18 | -h: 将文件容量以人类易读的方式(例如 GB,KB等)列出来 19 | -i: 列出inode号码(很少使用) 20 | -l: 列出长数据串,包含文件的属性与权限等数据(常用) 21 | -n: 列出UID与GID,而非用户与用户组的名称(很少使用) 22 | -r: 将排序结果反向输出 23 | -R: 连同子目录内容一起列出来,等于该目录下的所有文件都会显示出来 24 | -S: 以文件容量大小排序,而不是文件名排序 25 | -t: 依时间排序,而不是用文件名 26 | ``` 27 | 28 | 在Mac和linux系统中,ls命令可能是最常被执行的命令。因为我们随时都要知道文件或者目录的相关信息。不过我们的系统中的文件所记录的信息实在是太多了,ls没有需要全部都列出来。所以当你执行ls时,默认显示的只有非隐藏文件的文件名,以文件名进行排序以及文件名代表的颜色显示。 29 | 30 | 31 | ```bash 32 | 范例一:将主文件夹下的所有文件列出来 33 | 34 | ls -al ~ 35 | 36 | 范例二:承上题,不显示颜色,但在文件名末显示出该文件名代表的类型(type) 37 | 38 | ls -alF ~ 39 | 40 | 范例三:将文件容量以人类易读的方式(例如 GB,KB等)列出来 41 | 42 | ls -alh ~ 43 | ``` 44 | 45 | 无路如何,ls最常被使用的功能还是那个-l的参数。为此,很多系统在默认情况中,已经将`ll`设置为`ls -l`的意思了。也就是说,当你在终端中执行`ll`,就等于是执行`ls -l`。 46 | 47 | ls -l 显示的格式如下: 48 | 49 | ```bash 50 | -rw-r--r-- 1 zhangguojin wheel 58K 10 12 20:22 wifi.log 51 | ``` 52 | 53 | |文件权限|连接数|文件所有者|文件所属用户组|文件大小|文件最后修改时间|文件名| 54 | |---|---|---|---|---|---|---| 55 | |-rw-r--r--|1|zhangguojin|wheel|58K|10 12 20:22|wifi.log| 56 | 57 | 第一个字符代表这个文件是“目录,文件或链接文件等” 58 | 59 | * 若是[d]则是目录 60 | * 若是[-]则是文件 61 | * 若是[l]则是软连接文件 62 | 63 | ```bash 64 | cd /tmp 65 | 66 | touch testln <== 创建一个名为testln的文件 67 | 68 | ln -s testln testlnsoft <== 为testln文件创建软链接testlnsoft 69 | 70 | ll 71 | ``` 72 | 73 | ln是一个很有意义的命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。 74 | 75 | 我们通常使用软链接的形式,使用方式为:`ln -s [源文件或目录] [目标文件或目录]` 76 | 77 | ## link 78 | 79 | * [目录](README.md) 80 | 81 | * 上一节[目录的相关操作](04.2.md) 82 | 83 | * 下一节[复制,删除与移动](04.4.md) 84 | -------------------------------------------------------------------------------- /04.4.md: -------------------------------------------------------------------------------- 1 | # 复制,删除与移动 2 | 3 | ## cp(复制文件或目录) 4 | 5 | 要复制文件,请使用`cp(copy)`这个命令即可。不过,cp这个命令的用途还有很多。除了单纯复制之外,还可以创建连接文件(就是快捷方式),对比两文件的新旧而予以更新,以及复制整个目录等功能呢。但是,本书仅涉及了如何使用cp这个命令进行复制文件或者目录。 6 | 7 | * cp(复制文件或目录) 8 | 9 | ```bash 10 | cp [-adfilprsu] 源文件(source) 目标文件(destination) 11 | cp [options] source1 source2 source3 .... directory 12 | 13 | 参数: 14 | -a: 相当于`-pdr`的意思,保留文件的结构和属性(不包括文件夹) 15 | -d: 若源文件为连接文件的属性(link file),则复制连接文件属性而非文件本身 16 | -f: 为强制(force)的意思,若目标文件已经存在且无法开启,则删除后再尝试一次 17 | -i: 若目标文件(destination)已经存在时,在覆盖时会先询问操作的进行(常用) 18 | -l: 进行硬链接(hard link)的连接文件创建,而非复制文件本身 19 | -p: 连同文件的属性一起复制过去,而非使用默认属性(备份常用) 20 | -r: 递归持续复制,用于目录的复制行为(常用) 21 | -s: 复制成为符号链接文件(symbolic link),即“快捷方式”文件 22 | -u: 若destination比source旧才更新destination 23 | 24 | 最后需要注意的是,如果源文件有两个以上,则最后一个目的文件一定要是“目录”才行 25 | ``` 26 | 27 | ```bash 28 | # 范例一: 将主文件下的.bashrc文件复制到/tmp下,并更名为bashrc 29 | 30 | cp ~/.bashrc /tmp/bashrc 31 | 32 | cp -i ~/.bashrc /tmp/bashrc 33 | 34 | # 重复做两次操作,由于/tmp下面已经存在bashrc了,加上-i参数后, 35 | # 则在覆盖前会询问用户是否确定,可以按下n(否)或者y(是)来二次确认 36 | ``` 37 | 38 | ```bash 39 | # 范例二:在/tmp目录下创建/test/test1/test2/test3目录,将/test2目录复制到/tmp目录下 40 | 41 | cd /tmp 42 | 43 | mkdir -p ./test/test1/test2/test3 44 | 45 | cp -r test/test1/test2 test2 46 | 47 | ls 48 | ``` 49 | 50 | >`-r`参数在目录复制过程中经常使用,能够递归的将文件夹内部的内容复制到目标文件夹 51 | 52 | * rm(移除文件或者目录) 53 | 54 | ```bash 55 | rm [-fir] 文件或者目录 56 | 57 | 参数: 58 | -f: 就是force的意思,忽略不存在的文件,不会出现警告信息 59 | -i: 互动模式,在删除前会询问用户是否操作 60 | -r: 递归删除,最常用在目录的删除了,`这是非常危险的参数!!!` 61 | ``` 62 | 63 | ```bash 64 | cd /tmp 65 | 66 | rm -r test <== 将cp命令的范例二中的test目录删除 67 | 68 | touch test.txt <== touch 命令能够创建一个空文件 69 | 70 | ls <== 查看刚刚创建的文件 71 | 72 | rm -i test.txt 73 | # 输入n:不删除,y:删除 74 | ``` 75 | 76 | >注意,删除任何文件的时候,一定要确认该文件是可以被删除的。误删文件对程序员来说是很致命 77 | 78 | * mv (移动文件与目录,或重命名) 79 | 80 | ```bash 81 | mv [-fiu] source destination 82 | mv [options] source1 source2 source2 source3 .... directory 83 | 84 | 参数: 85 | -f: force 强制的意思,如果目标文件已经存在,不会询问而直接覆盖 86 | -i: 若目标文件(destination)已经存在时,就会询问是否覆盖 87 | -u: 若目标文件已经存在,且source比较新,才会更新(update) 88 | ``` 89 | 90 | ```bash 91 | # 范例一:将某个文件移动到某个目录中 92 | cd /tmp 93 | 94 | touch testmv.txt <== 创建名为testmv.txt的文件 95 | 96 | mkdir mvtest 97 | 98 | mv testmv.txt mvtest 99 | # 将某个文件移动到某个目录去,就是这样做 100 | 101 | # 范例二:将刚才的目录名称重命名为mvtest2 102 | mv mvtest mvtest2 103 | 104 | # 范例三:再创建两个文件,移动到/tmp/mvtest2 105 | touch testmv1 106 | touch testmv2 107 | 108 | mv testmv1 testmv2 mvtest2 109 | # 注意这边,如果有多个源文件或者目录,则最后一个目标文件一定是“目录” 110 | # 意思是说,将所有的数据移动到该目录的意思 111 | ``` 112 | 113 | `mv`就是move,移动的意思。当你要移动文件或者目录的时候,这个命令就很重要。同样,你也可以使用`-u`(update)来测试新旧文件,看看是否需要移动。另外一个用途就是“更改文件名”,我们可以很轻易的使用mv来更改一个文件的文件名。 114 | 115 | ## link 116 | 117 | * [目录](README.md) 118 | 119 | * 上一节[查看文件与目录](04.3.md) 120 | 121 | * 下一节[文件的内容查阅](04.5.md) 122 | -------------------------------------------------------------------------------- /04.5.md: -------------------------------------------------------------------------------- 1 | # 文件的内容查阅 2 | 3 | 如果我们要查阅一个文件的内容时,该如何是好呢?下面给大家介绍几个常用的查看文件命令的命令。 4 | 5 | * cat: 由第一行开始显示文件内容 6 | * nl: 显示的时候顺便显示行号 7 | * more: 一页一页的显示文件内容 8 | * less: 与more类似 9 | * head: 只看头几行 10 | * tail: 只看结尾几行 11 | 12 | ## 直接查看文件内容 13 | 14 | 直接查看一个文件的内容可以使用cat, tac, nl这几个命令 15 | 16 | * cat(concatenate[串联]) 17 | 18 | ```bash 19 | cat [-AbEnTv] 20 | 参数: 21 | -A: 相当于-vET的整合参数,可列出一些特殊字符,而不是空白而已 22 | -b: 列出行号,仅针对非空白行做行号显示,空白行不标行号 23 | -E: 将结尾的断行字符$显示出来 24 | -n: 打印出行号,连同空白行也会有行号,与-b的参数不同(常用) 25 | -T: 将[Tab]按键以^I显示出来 26 | -v: 列出一些看不出来的特殊字符 27 | ``` 28 | 29 | ```bash 30 | # 范例一:查看某个文件的内容 31 | 32 | echo "一句话证明你是海迷" >> testcat <== 创建一个名为testcat的文件,同时,向文件写入内容 33 | 34 | echo "我是要成为海贼王的男人" >> testcat <== 向该文件追加写入内容 35 | 36 | cat testcat 37 | 一句话证明你是海迷 38 | 我是要成为海贼王的男人 39 | 40 | # 承上,如果想打印行号呢 41 | cat -n testcat 42 | 1 一句话证明你是海迷 43 | 2 我是要成为海贼王的男人 44 | ``` 45 | 46 | >cat比较适合查看,大小较小的文件内容,像一些配置文件 47 | 48 | * nl(添加行号打印) 49 | 50 | ```bash 51 | nl [-bnw] 文件 52 | 参数: 53 | -b: 指定行号指定的方式,主要有两种 54 | -b a: 表示无论是否为空行,也同样列出行号(类似 cat -n) 55 | -b t: 如果有空行,空的那一行不要列出行号(默认值) 56 | -n: 列出行号的表示方法,主要有三种 57 | -n ln: 行号在屏幕的最左方显示 58 | -n rn: 行号在自己字段的最右方显示,且不加0 59 | -n rz: 行号在自己字段的最右方显示,且加0 60 | -w: 行号字段占用的位数 61 | ``` 62 | 63 | ```bash 64 | nl testcat 65 | ``` 66 | 67 | nl实际上很少使用,这里就不再赘述了 68 | 69 | ## 翻页查看文件内容 70 | 71 | * more (一页一页的翻动) 72 | 73 | ```bash 74 | cd /tmp 75 | 76 | cp /var/log/wifi.log . <== 将wifi.log复制到/tmp目录下 77 | 78 | more wifi.log 79 | ``` 80 | 81 | 如果more后面的文件内容行数大于屏幕输出的行数时,就会以分页的形式显示文件内容。在more这个程序运行过程中,你有几个按键可以按的: 82 | 83 | * 空格键(Space): 代表向下翻一页 84 | * Enter: 代表向下滚动一行 85 | * :f : 立即显示出文件名以及目前显示的行数 86 | * q: 退出 87 | * b或者ctrl-b : 代表往回翻页 88 | * /字符串: 向下查询字符串这个关键字 89 | 90 | 输入了/之后,光标就会跑到最下面一行,并且等待你的输入,你输入了字符串并按下[Enter]后,more就会开始向下查询该字符串,而重复查询同一字符串,可以直接按下n即可。最后,不想要看了,就按下q即可离开more 91 | 92 | * less (一页一页翻动) 93 | 94 | 功能与more几乎一样,就不再介绍了 95 | 96 | ## 数据选取 97 | 98 | 我们可以对输出的数据做一个简单的选取,那就是取出前面(head)与取出后面(tail)文字的功能。不过,要注意的是,head与tail都是以“行”为单位来进行选取的。 99 | 100 | * head(取出前面几行) 101 | 102 | ```bash 103 | head [-n number] 文件 104 | 参数: 105 | -n: 后面接数字,代表显示几行的意思 106 | 107 | # head默认显示文件的前10行,若要显示20行,就得指定参数n的值为20 108 | ``` 109 | 110 | ```bash 111 | cd /tmp 112 | 113 | head three_days_to_see.txt <== 显示了文件前10行的内容 114 | 115 | head -n 20 three_days_to_see.txt <== 显示文件的前20行的内容 116 | ``` 117 | 118 | * tail(取出后面几行) 119 | 120 | ```bash 121 | tail [-n number] 文件 122 | 参数: 123 | -n: 后面接数字,代表显示几行的意思(常用) 124 | -f: 持续检测文件的内容变化(常用) 125 | ``` 126 | 127 | ## link 128 | 129 | * [目录](README.md) 130 | 131 | * 上一节[复制,删除与移动](04.4.md) 132 | 133 | * 下一节[文件的创建](04.6.md) 134 | -------------------------------------------------------------------------------- /04.6.md: -------------------------------------------------------------------------------- 1 | # 文件的创建 2 | 3 | 前面大家已经学会如何利用mkdir创建文件夹,那么如何利用命令行创建一个文件呢?下面将会为大家介绍一个新命令touch 4 | 5 | * touch(创建文件) 6 | 7 | ```bash 8 | touch [-acdmt] 文件名 9 | 参数: 10 | -a: 仅修改访问时间 11 | -c: 仅修改文件的时间,若该文件不存在则不创建新文件 12 | -d: 后面可以接欲修改的日期而不是目前的日期,也可以使用--data="日期或者时间" 13 | -m: 仅修改mtime 14 | -t: 后面可以接欲修改的时间而不用目前的时间,格式为[YYMMDDhhmm] 15 | ``` 16 | 17 | ```bash 18 | touch testtouch <== 创建一个名为testtouch的文件 19 | ``` 20 | 21 | ## link 22 | 23 | * [目录](README.md) 24 | 25 | * 上一节[文件的内容查阅](04.5.md) 26 | 27 | * 下一节[环境变量](05.0.md) -------------------------------------------------------------------------------- /05.0.md: -------------------------------------------------------------------------------- 1 | # 环境变量 2 | 3 | 在所有`Unix`和类`Unix`系统中,环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,它包含了一个或者多个应用程序所将要使用到的信息。 4 | 5 | ok,介绍了环境变量的概念,我们知道查看文件属性的命令ls的完整文件名为:/bin/ls(这是绝对路径),那你会不会觉得很奇快:“为什么我可以在任何地方执行ls这个命令呢?”这就是因为环境变量PATH的帮助。 6 | 7 | 当我们在执行一个命令的时候,举例来说“ls”好了,系统会按照PATH的设置去每个PATH定义的目录下查询文件名为ls的可执行文件,如果在PATH定义的目录中含有多个文件名为ls的可执行文件,那么先查询到的同名命令先被执行。 8 | 9 | 在Mac(以及Linux)下,环境变量是存储在`PATH`的变量里面。可以通过在终端中输入`echo $PATH`命令查看当前的环境变量 10 | 11 | 现在,让我们执行`echo $PATH`这个命令查看本机的环境变量 12 | 13 | ```bash 14 | echo $PATH 15 | ``` 16 | 17 | `PATH`(一定是大写)这个变量的内容是由一堆目录所组成的,每个目录中间用冒号(:)来隔开,每个目录是有“顺序“之分的。 18 | 19 | ## link 20 | 21 | * [目录](README.md) 22 | 23 | * 上一节[文件的创建](04.6.md) 24 | 25 | * 下一节[一个有趣的demo](05.1.md) -------------------------------------------------------------------------------- /05.1.md: -------------------------------------------------------------------------------- 1 | # 一个有趣的demo 2 | 3 | 本节我会通过一个简单的demo,帮助大家理解环境变量的概念 4 | 5 | ## demo的介绍 6 | 7 | 自己实现一个hello命令。在终端中输入`hello`,执行结果会输出`Hello World!` 8 | 9 | ## demo 10 | 11 | 1. 编写一个极端简单的shell脚本 12 | 13 | 让我们打开编辑器,在编辑器中输入一下文本: 14 | 15 | ```bash 16 | #!/bin/bash 17 | # This is our first script. 18 | echo 'Hello World!' 19 | ``` 20 | 21 | 保存文件名为`hello` 22 | 23 | 对于脚本的最后一行,我们应该相当熟悉,仅仅是一个带有一个字符串的echo命令。对于第二行,在shell脚本中,`#`开头的代表是注释 24 | 25 | 2. 在/tmp目录下,创建bin文件夹,并将上一步创建的hello文件复制到/tmp/bin目录下 26 | 27 | ```bash 28 | chmod -R 777 ./hello <== 修改刚刚创建的hello文件为可执行文件 29 | 30 | cd /tmp 31 | 32 | mkdir bin 33 | 34 | ln -s /Users/zhangguojin/hello hello 35 | ``` 36 | 37 | 3. 将/tmp/bin目录配置到环境变量下 38 | 39 | ```bash 40 | vi .zshrc <== 使用shift+g 跳转到文件的末尾 41 | 42 | # 在.zshrc文件的最后一行添加 43 | export PATH=$PATH:/tmp/bin 44 | ``` 45 | 46 | 4. 在终端中执行hello命令 47 | 48 | ```bash 49 | hello 50 | Hello world! 51 | ``` 52 | 53 | 在本节中,我们学会了创建一个叫hello的命令。借助这个demo,相信大家已经对环境变量的工作方式有一定的了解了 54 | 55 | ## link 56 | 57 | * [目录](README.md) 58 | 59 | * 上一节[环境变量](05.0.md) 60 | 61 | * 下一节[命令与文件的查询](06.0.md) 62 | -------------------------------------------------------------------------------- /06.0.md: -------------------------------------------------------------------------------- 1 | # 命令与文件的查询 2 | 3 | 有时候,我需要快速的定位某个文件或者某个字符串的位置,以便我们能快速的对其进行编辑。此时,就得用到一些查询命令将要编辑的文件的路径找出来,这样才能修改或者查看 4 | 5 | ## 脚本文件名的查询 6 | 7 | * which (寻找“执行文件”) 8 | 9 | ```bash 10 | which [-a] command 11 | 参数: 12 | -a: 将所有PATH目录中可以找到的命令均列出,而不只第一个被找到的命令名称 13 | ``` 14 | 15 | ```bash 16 | which ifconfig 17 | ``` 18 | 19 | 这个命令时根据`PATH`这个环境变量所规范的路径去查询“执行文件”的文件名。所以,重点是找出执行文件而已!且which后面接的是完整文件名。若加上-a参数,则可以列出所有的可以找到的同名执行文件,而非仅显示一个而已。 20 | 21 | * whereis 22 | 23 | ```bash 24 | whereis [-bmsu] 文件或目录名 25 | 参数: 26 | -b: 只着二进制格式的文件 27 | -m: 只找在说明文件manual路径下的文件 28 | -s: 只找source源文件 29 | -u: 查找不在上述三个选项当中的其他特殊文件 30 | ``` 31 | 32 | ```bash 33 | whereis ifconfig 34 | ``` 35 | 36 | whereis是一个很方便又快速的查找命令。常用在我们定位某些运行环境的安装目录中,例如:你想知道本机的java安装在哪个目录下了,你可以通过执行`whereis java`找到 37 | 38 | ## 普通文件的查询 39 | 40 | 下面,我想给大家介绍一下如何在Mac系统下快速的查找文件。 41 | 42 | 虽然,系统原生提供了`find`命令,用来给大家查询文件使用,但是find命令比较复杂而且效率低,速度慢。因此我推荐大家在Mac系统下使用`ack`或者`ag(the_silver_searcher)`进行文件搜索 43 | 44 | * ack 45 | 46 | 1. 安装ack程序 47 | 48 | 第二章中,介绍了Homebrew,我们将使用Homebrew来安装ack 49 | 50 | ```bash 51 | brew install ack 52 | ``` 53 | 54 | 2. 使用ack进行搜索 55 | 56 | `按文件名搜索` 57 | 58 | ```bash 59 | ack -lg test.js <== 搜索文件名中包含test.js的文件 60 | ``` 61 | 62 | `按字符串搜索` 63 | 64 | ```bash 65 | ack test <== 搜索出所有包含test字符串的地方 66 | 67 | ack -l test <== 搜索所有包含test字符串的文件 68 | ``` 69 | 70 | * ag(又名the_silver_searcher) 71 | 72 | 1. 安装ag程序 73 | 74 | 使用brew安装ag 75 | 76 | ```bash 77 | brew install the_silver_searcher 78 | ``` 79 | 80 | 2. 使用ag进行搜索 81 | 82 | `按文件名搜索` 83 | 84 | ```bash 85 | ag -g Dockerfile <== 搜索所有文件名中包含Dockerfile的文件 86 | 87 | ag -g Dockerfile ./programFile <== 在目录./programFile下搜索文件名包含Dockerfile的文件 88 | ``` 89 | 90 | `按字符串搜索` 91 | 92 | ```bash 93 | ag docker <== 搜索出所有包含docker字符串的地方 94 | 95 | ag -l docker <== 搜索所有包含docker字符串的文件 96 | ``` 97 | 98 | ## link 99 | 100 | * [目录](README.md) 101 | 102 | * 上一节[一个有趣的demo](05.1.md) 103 | 104 | * 下一节[Mac下常用开发软件推荐](07.0.md) -------------------------------------------------------------------------------- /07.0.md: -------------------------------------------------------------------------------- 1 | # Mac下常用开发软件推荐 2 | 3 | ## 文档相关 4 | 5 | 1. [Dash](https://kapeli.com/dash):API文档查看工具 6 | 2. [Quiver](http://happenapps.com/):程序员最好用的笔记软件 7 | 8 | ## 编辑器 9 | 10 | 1. [vscode](https://code.visualstudio.com/):很好用的代码编辑器(很好的支持js,golang,python,ruby语言) 11 | 2. [Atom](https://atom.io/):很好用的轻量的代码编辑器 12 | 3. [Sublime Text](https://www.sublimetext.com/):前端工程师的最爱 13 | 4. [TextMate](https://macromates.com/):文本编辑器,可以替代系统原生的文本编辑器 14 | 15 | ## 工具软件 16 | 17 | 1. [SourceTree](https://www.sourcetreeapp.com/):免费的GIT GUI软件 18 | 2. [Studio 3T](https://studio3t.com/):The IDE for MongoDB 19 | 3. [Medis](http://getmedis.com/):Beautiful Management Application for Redis 20 | 4. [Sequel Pro](https://www.sequelpro.com/):sql数据库的GUI管理软件 21 | 5. [Postman](https://www.getpostman.com/):请求模拟工具 22 | 23 | ## link 24 | 25 | * [目录](README.md) 26 | 27 | * 上一节[命令与文件的查询](06.0.md) -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mac(linux)下常用命令行介绍 2 | 3 | * 1. [Mac下更好用的终端命令程序](01.0.md) 4 | - 1.1. [安装iTerm2](01.1.md) 5 | - 1.2. [iTerm2的常用快捷键](01.2.md) 6 | * 2. [Homebrew-macOS缺失的软件包管理器](02.0.md) 7 | - 2.1. [安装Homebrew](02.1.md) 8 | * 3. [Zsh-一款功能强大的shell软件](03.0.md) 9 | - 3.1. [Zsh的安装](03.1.md) 10 | - 3.2. [oh-my-zsh的安装](03.2.md) 11 | * 4. [基本的文件操作命令](04.0.md) 12 | - 4.1. [相对路径和绝对路径](04.1.md) 13 | - 4.2. [常见的目录相关操作](04.2.md) 14 | - 4.3. [查看文件与目录](04.3.md) 15 | - 4.4. [复制,删除与移动](04.4.md) 16 | - 4.5. [文件的内容查阅](04.5.md) 17 | - 4.6. [文件的创建](04.6.md) 18 | * 5. [环境变量](05.0.md) 19 | - 5.1. [一个有趣的demo](05.1.md) 20 | * 6. [命令与文件的查询](06.0.md) 21 | * 7. [Mac下常用开发软件推荐](07.0.md) --------------------------------------------------------------------------------