mit 6.NULL
1 课程概览与 shell
cd - 返回进入此目录之前所在目录
find用法:Linux find 命令
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来: # find . -name "*.c" 将当前目录及其子目录中的所有文件列出: # find . -type f 将当前目录及其子目录下所有最近 20 天内更新过的文件列出: # find . -ctime 20
grep用法:Linux grep 命令
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设 grep 指令会把含有范本样式的那一列显示出来。
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: grep test *file
2 Shell 工具和脚本
视频英语口音听不懂,直接看note
shebang:
在计算领域中,Shebang(也称为 Hashbang )是一个由井号和叹号构成的字符序列 #! ,其出现在文本文件的第一行的前两个字符。 在文件中存在 Shebang 的情况下,类 Unix 操作系统的程序加载器会分析 Shebang 后的内容,将这些内容作为解释器指令,并调用该指令,并将载有 Shebang 的文件路径作为该解释器的参数。
例如,以指令#!/bin/sh开头的文件在执行时会实际调用/bin/sh程序(通常是 Bourne shell 或兼容的 shell,例如 bash、dash 等)来执行。这行内容也是 shell 脚本的标准起始行。
由于 # 符号在许多脚本语言中都是注释标识符,Shebang 的内容会被这些脚本解释器自动忽略。 在 # 字符不是注释标识符的语言中,例如 Scheme,解释器也可能忽略以 #! 开头的首行内容,以提供与 Shebang 的兼容性。
#!/usr/bin/env python 有什么用?
当你执行 env python 时,它其实会去 env | grep PATH 里(也就是 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin )这几个路径里去依次查找名为python的可执行文件。 那么对于这两者,我们应该使用哪个呢? 个人感觉应该优先使用 #!/usr/bin/env python,因为不是所有的机器的 python 解释器都是 /usr/bin/python 。
查看命令如何使用
最常用的方法是为对应的命令行添加-h 或 --help 标记。另外一个更详细的方法则是使用man 命令。man 命令是手册(manual)的缩写,它提供了命令的用户手册。
有时候手册内容太过详实,让我们难以在其中查找哪些最常用的标记和语法。 TLDR pages 是一个很不错的替代品,它提供了一些案例,可以帮助您快速找到正确的选项。
查找 shell 命令
history 命令允许您以程序员的方式来访问shell中输入的历史命令。这个命令会在标准输出中打印shell中的里面命令。如果我们要搜索历史记录,则可以利用管道将输出结果传递给 grep 进行模式搜索。 history | grep find 会打印包含find子串的命令。
函数 marco 和 polo
我喜欢用fish而不是bash,故我使用fish的格式编写函数
Fish Shell 精简手册
Fish for bash users
source命令是一个内置的shell命令,用于从当前shell会话中的文件读取和执行命令。source命令通常用于保留、更改当前shell中的环境变量。简而言之,source一个脚本,将会在当前shell中运行execute命令。
#!/usr/bin/env fish
function marco
set -gx MARCO (pwd)
end
function polo
cd $MARCO
end
# Define $PAGER global and exported, # so this is like ``export PAGER=less`` set -gx PAGER less # Define $alocalvariable only locally, # like ``local alocalvariable=foo`` set -l alocalvariable foo
find / -name "*.html" | xargs -d 'n' zip test.zip
find . -type f -print0 | xargs -0 ls -lt | head -30 #抄的 xargs -0:items are separated by a null, not whitespace; ls -t sort by modification time, newest first -l use a long listing format
编辑器 (Vim)
了解基本用法即可,我用vscode
:q 退出(关闭窗口)
:w 保存(写)
:wq 保存然后退出
数据整理
太复杂了,应该用不到,看点简单的就成
sed命令进行正则匹配替换
seq 10 | sort -r --numeric-sort # 倒序输出10个数
awk用于处理文本
awk '{print $1}' test.sh



