├── README.md ├── chap01.引言.md ├── chap02.什么是SHELL.md ├── chap03.浏览文件系统.md ├── chap05.操作文件和目录.md └── chap04.探究操作系统.md /README.md: -------------------------------------------------------------------------------- 1 | # TLCL 学习笔记 2 | 3 | The Linux Command Line 是 William Shotts 所写的一本关于 Linux 命令行的开源书籍,你可以通过下面的链接下载 PDF 版本阅读,也可以浏览由 [好奇猫团队](http://haoqicat.com/about/team) 翻译的中文版。 4 | 5 | - [The Linux Command Line](http://linuxcommand.org/tlcl.php) (PDF) 6 | - [The Linux Command Line 中文版](http://billie66.github.io/TLCL/book/zh/) 7 | - [The Linux Command Line 中英双语版](http://billie66.github.io/TLCL/book/) 8 | 9 | 这里是我阅读这本书时的一些学习笔记。 10 | -------------------------------------------------------------------------------- /chap01.引言.md: -------------------------------------------------------------------------------- 1 | - 了解不同的用户界面 2 | + CLI 3 | + GUI 4 | + Graphical user interfaces make easy tasks easy, while command line interfaces make difficult tasks possible. 5 | 6 | - 整体结构 7 | + Learning The Shell - 命令的组成、浏览文件系统、命令行编辑、命令的帮助文档。 8 | + Configuration And The Environment - 配置文件。 9 | + Common Tasks And Essential Tools - 通过命令行处理日常任务。 10 | + Writing Shell Scripts - 学习 Shell 脚本编程。 11 | 12 | - Linux vs. GNU/Linux 13 | 14 | - Linux Torvalds vs. Richard Stallman 15 | + 了解这两个传奇人物的生平事迹 16 | 17 | -------------------------------------------------------------------------------- /chap02.什么是SHELL.md: -------------------------------------------------------------------------------- 1 | - 什么是命令行(command line)? 2 | + command line == shell 3 | + bash - Bourne Again SHell 4 | + 在 GUI 环境下使用终端模拟 shell 5 | * terminal emulator 6 | * KDE: konsole, GNOME: gnome-terminal 7 | 8 | - 命令提示符的一般格式:`[用户名@机器名 当前目录]$` ,最后一个字符也有可能是 `#` ,代表有 root 权限。 9 | 10 | - 使用键盘的上下键访问命令的历史,默认情况下 Linux 保存最近的 500 条命令。 11 | - 使用键盘的左右键编辑命令。 12 | 13 | - X Window System 具有一种快速复制粘贴的功能:使用鼠标选择一段文本,然后单击鼠标中键即可复制并粘贴该文本。 14 | 15 | - 注意不要使用 Ctrl-c 和 Ctrl-v 来复制粘贴。 16 | 17 | - 了解窗口的聚焦策略(focus policy) 18 | + click to focus 19 | + focus follows mouse 20 | 21 | - 开始尝试一些简单命令: 22 | + date - 显示系统当前时间和日期 23 | + cal - 显示当前月份的日历 24 | + df - 查看磁盘剩余空间 25 | + free - 显示空闲内存的数量 26 | 27 | - 关闭终端的窗口或使用 exit 命令退出终端程序 28 | 29 | - 如果系统上没有终端程序可用,可以使用虚拟终端(virtual terminal or virtual console) 30 | + 一共有 6 个虚拟终端运行在后台,可以使用快捷键 Ctrl-Alt-F1 ~ Ctrl-Alt-F6 访问 31 | + 使用快捷键 Alt-F1 ~ Alt-F6 在虚拟终端之间切换 32 | + 使用快捷键 Alt-F7 回到桌面环境 -------------------------------------------------------------------------------- /chap03.浏览文件系统.md: -------------------------------------------------------------------------------- 1 | - 了解 Linux 操作系统中的目录结构 2 | + LFHS - Linux Filesystem Hierarchy Standard 3 | + Windows 下每个单独的设备都对应一个独立的树结构,而在 Linux 下只有一个树结构,其他的设备可以被挂载(mount)到树的某个节点上 4 | + 可以将目录的树型结构类比成一颗倒置的树,最顶部的是树的根(root) 5 | 6 | - pwd 命令 7 | + print working directory - 显示当前目录 8 | + 当用户第一次进入终端时,默认当前目录为用户的家目录(home directory) 9 | 10 | - ls 命令 11 | + list - 列出一个目录包含的文件及子目录 12 | 13 | - cd 命令 14 | + change the working directory - 更改当前工作目录 15 | + 命令格式为:`cd pathname`,其中 `pathname` 可以是绝对路径,也可以相对路径 16 | * 绝对路径:`cd /usr/bin` 17 | * 相对路径:`cd ../bin` 或者 `cd ./bin` 18 | - 了解两个特殊符号:`.` 代表当前目录,`..` 代表当前目录的父目录 19 | - 注意 `./` 可以省略,所以 `cd ./bin` 可以简写为 `cd bin` 20 | + cd 命令的快捷键 21 | * `cd` - 将当前工作目录改为家目录 22 | * `cd -` - 切换到之前的工作目录 23 | * `cd ~username` - 切换到用户 username 的家目录 24 | 25 | - Linux 下的文件注意事项 26 | + 以 "." 开头的文件为隐藏文件,使用 `ls -a` 才可以看到这些文件 27 | + Linux 的文件名是区分大小写的 28 | + Linux 没有文件扩展名(file extension)这样的概念 29 | + 尽管 Linux 对文件名中的标点符号没有做特别的限制,但是最好只使用 "."、"-"、"_" 这几个标点,尤其重要的是,不要在文件名中使用空格! -------------------------------------------------------------------------------- /chap05.操作文件和目录.md: -------------------------------------------------------------------------------- 1 | ### 通配符(wildcard 或 globbing) 2 | 3 | - `*` - 匹配任意多个字符 4 | - `?` - 匹配任意一个字符 5 | - `[characters]` - 匹配任意一个集合中的字符 6 | - `[!characters]` - 匹配任意一个不属于集合中的字符 7 | - `[[:class:]]` - 匹配某一类字符,常见的类如下: 8 | + `[:alnum:]` 9 | + `[:alpha:]` 10 | + `[:digit:]` 11 | + `[:lower:]` 12 | + `[:upper]` 13 | 14 | *注意:请勿使用字符范围,譬如 `[a-z]` 或 `[A-Z]` ,应该使用 `[[:class:]]` 这种表示法代替。* 15 | 16 | ### 创建目录 17 | 18 | - 命令格式:`mkdir directory...` 19 | - 可同时创建多个目录:`mkdir dir1 dir2 dir3` 20 | 21 | ### 复制文件和目录 22 | 23 | - 命令格式 24 | + `cp item1 item2` 25 | + `cp item... directory` 26 | - 常用选项 27 | + `-a, --archive` - 连同文件属性一起复制 28 | + `-i, --interactive` - 覆盖已有文件时提示 29 | + `-r, --recursive` - 递归复制子目录下的所有内容 30 | + `-u, --update` - 只有当文件在目标位置不存在或者比目标文件更新时才复制 31 | + `-v, --verbose` - 显示详细信息 32 | 33 | ### 移动和重命名文件 34 | 35 | - 命令格式 36 | + `mv item1 item2` 37 | + `mv item... directory` 38 | - 常用选项(和 cp 类似) 39 | + `-i --interactive` 40 | + `-u --update` 41 | + `-v --verbose` 42 | 43 | ### 删除文件和目录 44 | 45 | - 命令格式:`rm item...` 46 | - 常用选项 47 | + `-i, --interactive` 48 | + `-r, --recursive` 49 | + `-f, --force` - 忽略不存在文件,不提示错误信息 50 | + `-v, --verbose` 51 | 52 | ### 创建链接 53 | 54 | - 硬链接:`ln file link` 55 | - 软链接(符号链接):`ln -s item link` 56 | - 硬链接的局限性: 57 | + 不能关联它所在文件系统之外的文件 58 | + 不能关联一个目录 59 | - 软链接是个特殊的文件,包含指向目标文件的指针(类似于 Windows 下的快捷方式);而硬链接其实就是目标文件本身。 60 | - 将文件想象成两部分:文件名和文件内容,当创建一个硬链接时,实际上是创建一个新的文件名部分,所有的文件名部分都指向相同的文件内容部分。 61 | - 删除软链接时,软链接文件被删,真实文件不变;删除硬链接时,文件的硬链接数减一,当文件的硬链接数为零时,删除真实文件。 62 | - 使用 `ls -i` 命令,了解 `inode` 的概念。 -------------------------------------------------------------------------------- /chap04.探究操作系统.md: -------------------------------------------------------------------------------- 1 | ### 命令的一般格式 2 | 3 | 一般情况下,命令的格式如下: 4 | 5 | ``` 6 | command -options arguments 7 | ``` 8 | 9 | 其中,`-options` 可以是像 `-o` 这样的短格式,也可以是 `--long-options` 这样的长格式。 10 | 多个短格式选项也可以合并在一起,如:`-ab` 表示 `-o -b` 。 11 | 12 | 例子:`ls -lt --reverse` 13 | 14 | ### ls 命令 15 | 16 | - ls - 显示当前目录下的所有文件和子目录 17 | - ls dir1 dir2 ... - 同时显示多个目录 18 | - ls -l - 以长格式输出(long format) 19 | 20 | #### ls 命令的常用选项 21 | 22 | - `-a, --all` - 显示所有文件,包括隐藏文件 23 | - `-d, --directory` - 默认情况下,ls 命令显示目录下的内容,而不是目录本身,可以使用这个选项和 `-l` 查看指定目录的详细信息 24 | - `-F, --classify` - 在文件名后添加一个标识符来区分不同类型的文件 25 | - `-h, --human-readable` - 将文件大小转换为方便人类阅读的格式,譬如:13.2 MB 这种格式 26 | - `-l` - 以长格式输出 27 | - `-r, --reverse` - 反向显示 28 | - `-S` - 以文件大小排序 29 | - `-t` - 以文件的修改时间排序 30 | 31 | #### 长格式 32 | 33 | 一个长格式的例子如下: 34 | 35 | ``` 36 | -rw-r--r-- 1 root root 3576296 2007-04-03 11:05 Experience ubuntu.ogg 37 | ``` 38 | 39 | 每一列代表的意义如下: 40 | 41 | - `-rw-r--r--` - 第一个字符代表文件类型(- 表示文件,d 表示目录),后面分别是文件所有者、文件所属组、其他人访问这个文件的权限。 42 | - `1` - 该文件硬链接的个数 43 | - `root` - 文件所有者名称 44 | - `root` - 文件所属组名称 45 | - `3576296` - 文件大小,单位字节 46 | - `2007-04-03 11:05` - 文件的最后修改时间 47 | - `Experience ubuntu.ogg` - 文件名 48 | 49 | ### file 命令 50 | 51 | - 使用 `file filename` 确定文件类型 52 | 53 | ### less 命令 54 | 55 | - 使用 `less filename` 查看文本类型的文件内容 56 | - 了解 `more` 命令 和 `pagers` 程序 57 | - Less is More 58 | 59 | #### less 快捷键 60 | 61 | - `Page Up or b` - 向上一页 62 | - `Page Down or space` - 向下一页 63 | - `Up Arrow` - 向上一行 64 | - `Down Arrow` - 向下一行 65 | - `G` - 跳到文件结尾 66 | - `1G or g` - 跳到文件开头 67 | - `/charaters` - 搜索 68 | - `n` - 向后搜索下一个 69 | - `h` - 帮助 70 | - `q` - 退出 71 | 72 | ### Linux Filesystem Hierarchy Standard 73 | 74 | - `/` - 根目录 75 | - `/bin` - 包含系统启动时必须的一些程序 76 | - `/boot` - 包含 linux kernel、intial RAM disk image 和 boot loader 77 | + /boot/grub/grub.conf 78 | + /boot/grub/menu.lst 79 | + /boot/vmlinuz 80 | - `/dev` - 包含所有系统识别的设备节点 81 | - `/etc` - 包含所有系统范围内的配置文件 82 | + /etc/crontab 83 | + /etc/fstab 84 | + /etc/passwd 85 | - `/home` - 用户家目录 86 | - `/lib` - 包含系统程序所使用的共享类库 87 | - `/lost+found` 88 | - `/media` - 可移动设备的自动挂载点 89 | - `/mnt` - 可移动设备的手动挂载点 90 | - `/opt` - 用于安装可选的软件,譬如一些商业程序 91 | - `/proc` - 它是个虚拟文件系统,包含的文件都是系统内核的一些信息 92 | - `/root` - root 用户的家目录 93 | - `/sbin` - 包含一些用于执行关键系统任务的二进制程序 94 | - `/tmp` - 临时文件 95 | - `/usr` - 应该是 Linux 系统下最大的一个目录,包含用户使用的一些常规文件 96 | + `/usr/bin` 97 | + `/usr/lib` 98 | + `/usr/local` 99 | + `/usr/sbin` 100 | + `/usr/share` 101 | + `/usr/share/doc` 102 | - `/var` - 包含一些动态的内容,譬如,数据库、spool 文件、邮件等 103 | + `/var/log` - 日志文件 104 | 105 | ### 链接文件 106 | 107 | - 硬链接 108 | - 软链接(符号链接) 109 | 110 | 符号链接文件格式如下,注意第一个字符为 `l`,文件名部分会显示出链接到的真实文件。参考[后面的章节](https://github.com/aneasystone/the-notes-of-tlcl/blob/master/chap05.%E6%93%8D%E4%BD%9C%E6%96%87%E4%BB%B6%E5%92%8C%E7%9B%AE%E5%BD%95.md#创建链接)。 111 | 112 | ``` 113 | lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so 114 | ``` --------------------------------------------------------------------------------