Shell 学习笔记

Introduction to Shell for Data Science Course 学习笔记 ~

一、操作文件和目录

本章简要介绍了 Unix Shell 。了解如何在 Shell 中移动以及如何创建,修改和删除文件和文件夹。

1. Shell 与图形界面比较

Shell 和图形界面都是向操作系统发出命令的接口。

2. 查看当前位置

文件系统(filesystem)管理文件和目录(文件夹)。每个绝对路径都是从根目录开始直到当前文件或目录。

  • 查看当前位置:pwd (print working directory)

3. 查看文件和目录

查看当前目录下的文件可使用 ls ,后面可带有一个参数(文件或文件夹)指定查看的文件或文件夹。

  • 查看当前目录下的文件和文件夹: ls (listing)

4. 绝对路径和相对路径

在 Unix 中,如果路径开头以 / 开头的为绝对路径,否则是相对路径。

5. 移动到另一个目录

  • 移动到另一个目录:cd (change directory)

6. 返回上级目录

  • 返回上级目录:cd ..
  • 返回当前目录:cd .
  • 返回主目录:cd ~

7. 复制文件

如果 original.txx 是现有文件,复制后文件名为 duplicate.txt ,复制文件的操作为 cp original.txt duplicate.txt (copy)。如果同名,则会被覆盖。若复制后文件在同一目录,使用 backup 代替相同的目录路径和/或文件名。

8. 移动文件

使用 cp 复制文件,使用 mv 移动文件。把 autumn.csvwinter.csv 移动到上一级目录:mv autumn.csv winter.csv .. (move)。

9. 重命名文件

mv 也可以用来重命名文件。

  • 重命名文件:mv course.txt new-course.txt

10. 删除文件

使用 rm 删除文件。和 cp 一样,可以同时处理多个文件,只需要 rm 后面加上多个文件名。rm 操作不可恢复。

  • 删除文件:rm first.txt second.txt(remove)

11. 创建和删除目录

mv 处理目录和处理文件的方式相同。使用 rmdir 可以删除一个空目录,如果非空,则需要添加 -r 参数。

  • 删除目录:rmdir
  • 创建目录:mkdir

二、操作数据

本章将向你展示如何使用文件中的数据。

1. 查看文件内容

  • 查看文件内容:cat(concatenate)

2. 逐个查看文件内容

  • 查看多个文件:less 紧跟多个文件名
  • 退出::q
  • 下一个文件::n
  • 上一个文件::p

3. 查看文件开头

  • 查看文件的前 10 行:head

4. 自动补全

输入开头几个字母之后,按 Tab 键自动补全。若有多个匹配,则显示所有可选项。

5. 控制命令的作用

Shell 允许通过给 head 一个 flag 来改变行为。
显示前 3 行,运行 head -n 3

6. 列出目录下的所有内容

ls 一个 flag -R(recursive)显示所有内容。flag -F 在所有目录后面添加 / ,在所有可执行程序后面添加 *

7. 获取命令帮助

获取命令帮助使用 man(manual)。 man 自动调用 less ,使用空格键翻阅,使用 :q 退出。

8. 从文件中选择列

head 选择文件的头几行, tail 选择文件后几行。 cut 选择文件的列。

9. 重复命令

使用上下箭头循环返回使用过的命令,使用左右箭头来编辑命令,使用回车键运行命令。

使用 history 打印所有使用过的命令列表,并且前面有一个序号。使用 ! 加序号或命令来重新运行该命令。

10. 选择包含特定值的行

grep 加特定值,后跟一个或多个文件名,然后打印包含特定值的所有行。 grep 常用的 flag:

  • -c:打印匹配行的计数
  • -h:搜索多个文件时不打印文件名
  • -i:忽略大小写
  • -l:打印包含匹配项的文件名
  • -n:打印匹配行的行号
  • -v:反转匹配,即仅显示不匹配的行

三、结合工具

Unix Shell 的真正威力不在于各个命令,而在于它们如何轻松地组合起来做新事物。本章将向你展示如何使用此功能选择所需的数据,并介绍用于排序值和删除重复项的命令。

1. 将命令的输出存储在文件中

使用重定向(redirection)将任何命令的输出保存在文件中。

将输出存储在文件中:>

2. 将命令的输出作为输入

重定向可以作为中间变量使用。

3. 结合命令的更好方法

使用重定向组合命令有两个缺点:

  • 留下许多中间文件
  • 产生最终结果的命令分散在几行历史中

可以使用管道(pipe)来解决这两个问题。管道符号 | 表示左侧命令的输出作为右侧命令的输入。

4. 组合多个命令

管道可以组合多个命令

5. 计算文件中的字数

使用 wc (word count)打印文件的字符、单词和行的个数。也可以使用 -c-w-l 单独打印。

6. 一次指定多个文件

使用通配符 *

7. 其他的通配符

  • ?:匹配单个字符
  • [...]:匹配括号内的任一个字符
  • {...}:匹配括号内的任何逗号分隔的字符

8. 文本排序

sort 对数据进行排序,默认是按字母表进行排序,使用 flag -n-r 分别按数字排序和反转排序。使用 -b 忽略开头的空格,使用 -f 忽略大小写。

9. 删除重复行

删除相邻重复行使用 uniq。、

10. 保存管道的输出

使用重定向 >

11. 停止正在运行的程序

使用 Ctrl-C

四、批量处理

大多数 Shell 命令会一次处理多个文件。本章将向你展示如何使自己的管道做到这一点。在此过程中,你将看到 Shell 如何使用变量来存储信息。

1. 环境变量

与其他程序一样,Shell 将信息存储在变量中。其中一些称为环境变量(environment variables),它的名称通常以大写字母书写:

变量名 含义
HOME 用户主目录 /home/itroger
PWD 当前目录 pwd 命令相同
SHELL 正在使用的 Shell 程序 /bin/bash
USER 用户 ID itroger

获取完整列表,结合管道使用 set

2. 打印变量的值

  • 直接打印字符:echo
  • 打印变量的值:echo,变量名前加 $

3. Shell 变量

创建 Shell 变量,只需为变量名使用 = 赋值。= 两边不能有空格。

4. 多次重复命令

Shell 变量可以用在循环(loops)以实现多次重复命令:

1
for filetype in gif jpg png; do echo $filetype; done

将输出:

1
2
3
gif
jpg
png

5. 为每个文件重复一次命令

使用通配符 *

6. 记录一组文件的名称

把所有文件名放在一个变量中

7. 单个循环中运行多个命令

  • 使用管道
  • 使用分号

8. 文件名包含空格

需要使用单引号或双引号

五、创建新工具

历史记录允许你通过几次击键重复操作,而管道允许你组合现有命令以创建新命令。在本章中,你将看到如何更进一步创建自己的新命令。

1. 编辑文件

使用 nano ,打开文件以进行编辑,可以使用组合键执行操作:

  • Ctrl-K:剪切一行
  • Ctrl-U:粘贴一行
  • Ctrl-O:保存文件( O 代表输出)
  • Ctrl-X:退出编辑器

2. 记录刚做的事情

  • 运行 history
  • 管道操作 tail -n 10
  • 重定向 figure-5.history

3. 保存命令

  • 保存命令在 .sh 文件中
  • 执行命令,使用 bash

4. 将文件名传递给脚本

使用 $@ 表示脚本中的参数

5. 处理单个参数

$@ 类似,Shell 可以使用 $1$2 来引用特定的命令行参数。

6. 在 Shell 脚本中编写循环

可以使用分号或换行,不必缩进。
使用 # 表示注释。

-------------本文结束 感谢您的阅读-------------
您的支持将鼓励我继续创作!