Shell 命令备忘¶
约 1824 个字 45 行代码 预计阅读时间 7 分钟
基本命令¶
在路径中,. 表示的是当前目录,而 .. 表示上级目录:
文件权限:drwxrwxr-x 第一个字符 d 表示是一个文件夹。然后接下来的九个字符,每三个字符构成一组。 (rwx). 它们分别代表了文件所有者(Owner),用户组(Group) 以及其他所有人(Others)具有的权限。其中 - 表示该用户不具备相应的权限。
最简单的重定向是 < file 和 > file。这两个命令可以将程序的输入输出流分别重定向到文件
使用 >> 来向一个文件追加内容。
| 操作符允许我们将一个程序的输出和另外一个程序的输入连接起来
| 命令 | 详细 |
|---|---|
| cd | change directory:切换目录 |
| ls | 列出当前目录,-l 带详细参数 |
| pwd | print working directory:显示当前工作目录 |
| mv | 用于重命名或移动文件 |
| cp | 拷贝文件 |
| rm | 删除文件,-r 可以递归删除 |
| mkdir | make directory:创建文件夹 |
| tree | 目录结构 |
| broot | 更加便捷的目录结构 |
man command_name |
返回command_name的用户手册 |
which command_name |
返回与command_name关联的可执行文件的路径 |
Shell 脚本¶
Bash中的字符串通过' 和 "分隔符来定义,但是它们的含义并不相同。以'定义的字符串为原义字符串,其中的变量不会被转义,而 "定义的字符串会将变量值进行替换。
Bash中的字符串通过' 和 "分隔符来定义,但是它们的含义并不相同。以'定义的字符串为原义字符串,其中的变量不会被转义,而 "定义的字符串会将变量值进行替换。
退出码可以搭配 &&(与操作符)和 ||(或操作符)使用,用来进行条件判断,决定是否执行其他程序。它们都属于短路运算符(short-circuiting) 同一行的多个命令可以用;分隔。
- 通配符 - 当你想要利用通配符进行匹配时,你可以分别使用
?和*来匹配一个或任意个字符。例如,对于文件foo,foo1,foo2,foo10和bar,rm foo?这条命令会删除foo1和foo2,而rm foo*则会删除除了bar之外的所有文件。 - 花括号
{}- 当你有一系列的指令,其中包含一段公共子串时,可以用花括号来自动展开这些命令。这在批量移动或转换文件时非常方便。
convert image.{png,jpg}
# 会展开为
convert image.png image.jpg
cp /path/to/project/{foo,bar,baz}.sh /newpath
# 会展开为
cp /path/to/project/foo.sh /path/to/project/bar.sh /path/to/project/baz.sh /newpath
# 也可以结合通配使用
mv *{.py,.sh} folder
# 会移动所有 *.py 和 *.sh 文件
# 下面命令会创建foo/a, foo/b, ... foo/h, bar/a, bar/b, ... bar/h这些文件
touch {foo,bar}/{a..h}
注意,脚本并不一定只有用 bash 写才能在终端里调用。比如说,这是一段 Python 脚本,作用是将输入的参数倒序输出:
内核知道去用 python 解释器而不是 shell 命令来运行这段脚本,是因为脚本的开头第一行的 shebang。
在 shebang 行中使用 env 命令是一种好的实践,它会利用环境变量中的程序来解析该脚本,这样就提高来您的脚本的可移植性。env 会利用我们第一节讲座中介绍过的PATH 环境变量来进行定位。 例如,使用了env的shebang看上去时这样的#!/usr/bin/env python。
查找文件¶
1. fd 命令¶
fd 是一个简单、快速和用户友好的 find 替代品。它有更简单的语法和色彩输出,而且默认忽略 .gitignore 中的文件。
注意:在 Ubuntu 中,fd 命令实际上被命名为 fdfind,以避免与另一个名为 fd 的已存在软件包冲突。因此,你应该使用 fdfind 而不是 fd 来运行该程序。如果你希望将 fdfind 命令改为 fd,你可以通过创建一个别名来实现。
常用命令和示例:
- 搜索当前目录及子目录中的所有
.rs文件:
- 在指定目录中搜索所有
.py文件:
-
忽略大小写搜索文件:
--I选项使搜索变为不区分大小写。 -
搜索并执行命令(例如,搜索
-.log文件并删除它们):-X选项后跟命令(这里是rm),对搜索结果执行该命令。 -
结合使用正则表达式:
- 这会搜索所有以.txt或.md结尾的文件,文件名只包含字母。
2. find 命令¶
find 命令的基本语法是:
常用命令和示例:
-
搜索当前目录中的所有文件和目录:
-
在指定目录中搜索所有
.txt文件:/path/to/directory是你想要搜索的目录。-type f表示你只对文件感兴趣。-name "*.txt"限定了文件名必须以.txt结尾。
-
搜索大于 50MB 的文件:
/表示从根目录开始搜索。-size +50M表示搜索大于 50MB 的文件。
-
删除所有
.tmp文件:-delete动作会删除所有匹配的文件。
-
基于修改时间搜索文件(例如,过去 7 天内修改的文件):
-mtime -7表示搜索在过去 7 天内修改过的文件。
查找内容¶
1. rg (Ripgrep) 命令¶
rg 或 Ripgrep 是一个现代的文本搜索工具,它速度非常快,并默认递归地搜索。
安装:sudo apt-get install ripgrep
常用命令和示例:
-
在当前目录及子目录中搜索文本:
Ripgrep 默认递归搜索,这将在当前目录及其所有子目录中搜索
search_pattern。-A参数用于指定在匹配到的行后显示的附加行数,即上下文行数。 -
在指定目录中搜索文本:
-
只显示匹配的文件名:
-l选项只会列出含有匹配文本的文件名。 -
搜索所有不匹配的行(反向搜索):
-v选项会显示所有不包含search_pattern的行。filename是rg命令中用于指定搜索范围的参数,可以是单个文件、多个文件,甚至是目录的路径。 -
搜索匹配特定文件模式的文件:
-g选项可以指定一个 glob 模式,仅在匹配该模式的文件中进行搜索。
2. grep 命令¶
grep 是一个经典的命令行工具,用于在文件或者标准输入中搜索与正则表达式匹配的行。
常用命令和示例:
-
在文件中搜索文本:
这个命令会在filename文件中搜索含有search_pattern的所有行。 -
递归搜索目录中的所有文件:
-r选项让grep递归地搜索指定目录及其子目录中的所有文件。 -
显示匹配行的行号:
-n 选项会在输出中包含每个匹配行的行号。
-
只打印匹配的文件名,而不是匹配的内容:
-l选项只列出含有匹配文本的文件名。 -
在搜索中排除特定文件:
--exclude选项可以用来排除符合模式的文件。
Vim¶
用于normal mode的一些符号和命令
常用符号
| 符号 | 详细 |
|---|---|
| j | 下 |
| k | 上 |
| / | 搜索模式 |
| w | word:词 |
| 0 | 跳到行初 |
| $ | 跳到行尾 |
| gg | 跳到文件头 |
| G | 跳到文件尾 |
常用命令
| 命令 | 详细 |
|---|---|
| /ac | 从当前位置找到第一个 ac,摁 n 下一个 |
. |
重复上一次的命令 |
| dd | 删除当前行 |
| d$ | 删除到行尾 |
| dG | 删除到文件尾 |
| ggdG | 删除所有 |
| o | open a new line:在当前行之下插入行 |
| 5j | 向下移动5行 |
| 5k | 向上移动5行 |
Created: January 21, 2024