1/13: Course overview + the shell
介绍了一些shell方面的简单指令和概念,比如data
、ls
、cd
、which
、pwd
、<
、>
、>>
、echo
、mv
、curl
、man
等,如果了解linux c编程,这些应该都懂的。
列出一些我平时没有注意到的细节和指令。
- 关于文件和目录的rwx权限,进入文件夹需要x权限,以及删除文件时对当前目录需要有写权限等。
- 空格分割参数,如果想要参数包含空格,则使用""或\,比如
mkdir hello\ world
或mkdir "hello world"
cd -
回到上一个路径。echo "hello" 1> a.txt 2>b.txt
标准输出流重定向到a.txt,标准错误流重定向到b.txt- 以
curl --head --silent google.com | grep --ignore-case content-length | cut --delimiter=' ' -f2
为例,来获取输入流中自己想要的信息 - 关于
>
,(有权限执行cmd1但是无权限执行cmd2)如果sudo cmd1 > cmd2
对于cmd2的执行使用的是shell的权限而不是root的权限,可以切成root执行或者可以用cmd1 | sudo tee cmd2
xdg-open a.txt
、xdg-open a.html
根据文件格式自动使用对应的软件打开。
1/14: Shell Tools and Scripting
视频里助教的口音是真的怪,我醉了。
之前shell用的很少,很多东西都不是很熟悉了。
- shell中不能使用空格分隔的原因,如
a = 1
,被视为运行程序a,参数是= 和 1。 - 关于
''
和""
的区别
foo=bar
echo "$foo"
# prints bar
echo '$foo'
# prints $foo
- 定义函数,并加载
source mcd.sh
,调用$ mcd dirname
mcd.sh
mcd () {
mkdir -p "$1"
cd "$1"
}
$?
:上一条命令的错误代码,$_
:上一条命令的参数,$#
参数的个数,$$
当前进程号,$*
:所有参数,$@
所有参数,可以当作数组使用。
mkdir dirname
cd $_ #进入dirname
!!
上一条指令- 使用
$(cmd)
或者`cmd`
来执行指令 - shell时支持通配符的,比如
*.txt
能匹配所有后缀是.txt
的文件 - 可以用
shellcheck
来检查shell的语法和warning。 man
有时候用起来不太方便,可以试试tldr
给出更多的例子,省去google的时间。tree
指令- 介绍了find和grep等的使用,介绍了一堆方便的tools来查看管理文件。
1/15: Editors (Vim)
- normal状态下按
v
进入v模式,此时可以选中文本内容
ctrl+v
用^v
或者<C-V>
表示,此时可以选中矩形文本内容
比如按x
或d
进行删除,y
复制,p
粘贴。 - normal模式下用输入
:sp
进行分屏 e
移动到词尾,w
移动到下一个词开头,b
移动到上一个词开头。0
移动到行开头,$
移动到行结尾。^
移动到改行第一个非空字符。^u
scroll up,^d
scroll down,gg
首行,G
尾行。^R
redo