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