命令行笔记
Linux笔记


命令
ls 打印当前目录的列表
- ls -la -l让当前目录的文件呈列表显示,a列出所有文件,包括隐藏文件
- ls -lh 列出文件和目录,并显示大小(human-readable)
cat 文件名 查看文件内容?:连接文件并打印到标准输出设备上
tee 文件名追加内容<>重定向:tee < a > b把a写到b中cd 目录 进入该目录
- cd .. 进入当前目录的上一级目录
pwd 输出当前路径
echo 字符串输出
mkdir 创建目录
mv 重命名或移动文件
cp 拷贝文件
man 命令 查看操作手册
head -n file 查看文件的前n行
tail -n 文件路径 查看文件的末n行
wc -l 文件路径: 统计文件内容的行数。-h表示lines,行数。wc -w 文件路径: 统计文件内容的单词数,依据空格来判断单词数量。-w表示words,单词数。wc -c 文件路径:统计文件的字节数。-c表示bytes,字节数。ps -ef :查看服务器进程信息。-e 列出全部进程, f 显示全部的列
top:查看服务器的进程占的资源(q指令退出)M: 将结果按内存从高到低进行降序排列
P: 表示将结果按照CPU使用率从高到低进行降序排列;
1: 当服务器拥有多个cpu的时候可以使用“1”快捷键来切换是否展示显示各个cpu的详细信息;t: 树形显示
du -sh 文件路径:查看文件的真实大小find 路径 -name *.conf:查询指定路径下以.conf结尾的文件reboot:重启计算机w: 查看ssh连接到本机的情况find / -name +文件名搜索文件locate 文件名搜索文件watch -n 1 ls -lha实时显示命令执行结果sudo susudo !!!!代表上一条命令
etc/environment环境变量表unset name删除环境变量
tree -L 1 /一级,树形,列出根目录管道命令仅仅处理stdout,对于stderr 会予以忽略,可以使用set -o pipefail 设置 shell遇到管道错误退出
lsof查看端口netstate -napt查看端口gcc x.c -o x 对x.c进行编译
./a.out 执行a.out
wc -l f.txt查看文件f.txt有多少行head -n 10 f.txt查看f.txt的前十行tail -n 5 f.txt查看f.txt的后五行
touch b.jpg创建文件b.jpgrm b.jpg删除b.jpgman ls 查看ls的手册,常见的
man文档部分包括:- Section 1: User Commands - 用户命令
- Section 2: System Calls - 系统调用
- Section 3: C Library Functions - C标准库函数
- Section 4: Devices and Special Files - 设备和特殊文件
- Section 5: File Formats and Conventions - 文件格式和约定
- Section 6: Games and Fun Stuff - 游戏和娱乐内容
- Section 7: Miscellaneous Information - 杂项信息
- Section 8: System Administration Commands - 系统管理命令
ls –help 查看ls参数的简要说明
file 文件名查看文件类型diff 文件1 文件2比较两个文件是否相同apt update更新本地的数据库缓存apt show 包显示包信息apt remove 包删除包信息apt upgrade 包自动安装更新压缩包:打包+压缩


第一列
root表示该文件的拥有者,必须在/etc/passwd里面,可以用chown改变- chown [-R] 账号名称 文件或目录
- chown [-R] 账号名称:用户组名称 文件或目录
第二列表示所属用户组,必须在
/etc/group里面,可以使用chown和chgrp改变sudo useradd xxxsudo su xxx
Docker
参考:https://yeasy.gitbook.io/docker_practice/
docker pull name获取镜像docker ps查看运行的容器docker logs查看容器标准输出docker stop id命令来停止容器docker info查看docker信息docker images查看本地镜像docker container ls -a查看所有容器docker run -dit ubuntu创建镜像docker exec -it 69d1 bash进入镜像,从这里exit不会导致镜像结束
进程的使用
./fork & 让可执行程序fork在后台执行,&:让程序在后台执行
ps查看在后台运行的程序ps -ufu显示当前用户的所有进程,f显示进程之间的关系ps | grep fork查看是否有名为fork的进程依然存在
kill 给进程发各种信号
kill -9 {PID}终止某个进程pkillpkill -9 fork避免不同终端PID不同的问题
ctrl+z把当前命令放入后台,并暂停jobs查看当前在后台的命令fg %num将后台的命令调至前台bg %num将后台暂停的进程在后台执行kill %num终止命令编号为numd的进程
shell小工具
一个据说更好的shell:
zshman简洁版:
tldrtldr ls
在终端查看图片:
sudo apt-get install imagemagickdisplay nihao.png
MySQL美化:
mycli
tmux

新建会话
tmux new -s session_name分离会话
tmux detach或Ctrl+b d查看所有会话
tmux ls接入会话
tmux attach -t session_name切换会话
tmux switch -t session_name杀死会话
tmux kill-session session_name重命名会话
tmux rename-session -t session_name新建窗口
ctrl+b c切换窗口
ctrl+b numctrl+b pctrl+b n
窗口划分
ctrl+b "上下ctrl+b %左右ctrl+b +↑↓←→切换pane
SSH连接虚拟机
全是重点!!!
不连接root用户,只连接普通用户,比如szl,所以.ssh/config里面的user应该填szl
ip填写这个:

报错:
- ip可以ping通,但ssh不能直接连
root@192.168.912.132,只能连szl@192.168.912.132
1
2[22:23:20.608] Terminating local server
[22:23:20.611] Resolver error: Error: Connecting with SSH timed out- ip可以ping通,但ssh不能直接连
卸载&安装:
停止使用:
sudo systemctl stop ssh卸载:
sudo apt-get remove ssh-server和sudo apt-get remove ssh-client安装:
sudo apt-get install ssh-server和sudo apt-get install ssh-client启动ssh:
sudo systemctl start ssh查看ssh状态:
sudo service ssh status
传送文件
把本地目录传送到远程机器
1
scp -r D:\wenjian\Code\Python\Django_module szl@192.168.192.132:/home/szl/桌面/database-lab/lab4/dj远程机器上下载目录到本地
1
scp -r szl@192.168.192.132:/home/szl/桌面/database-lab/lab4/dj D:\wenjian\Code\Python\Django_module数据从向右流动
C语言工程开发
1.多模块程序
回忆一下,在刚开始学习 C 语言的时候,我们曾经学习过,当我们的程序只有一个main.c文件时,我们可以在命令行中通过
1 | |
对单个代码文件进行编译,生成可执行文件program,并且通过./program运行编译生成的程序。在我们之前的课程中,计蒜客的学习系统也帮你进行了这样的操作。
相比于单个文件、单一功能的程序,当程序有多个模块时,问题就开始变得复杂了。我们对每一个模块会首先编译出每个模块对应的*.o目标代码文件(relocatable object file),例如:
1 | |
会将我们的一个set.c文件编译成一个set.o的目标代码文件。请注意,这里的-c表示生成目标代码文件。-o与之前单文件的时候一样,在它之后我们会写明被生成的文件的名称。
当我们完成了每一个独立模块的编译并获得它们的目标代码文件后,我们可以将我们的主程序的目标代码文件与他们链接在一起。例如:
1 | |
将目标代码文件set.o和others.o与main.o在链接在一起,并且输出了 可执行文件(excutable file)program。
我们依然可以通过./program运行编译生成的程序。
当我们将一个程序写在多个文件中时,每一个文件中的变量和函数默认都是只有文件内的部分才可以访问的。但是有一些特殊的全局变量、类型定义、函数可能会需要在多个文件中被使用。
这时候,我们可以将这类的内容单独写成一个 头文件(header file),并且将全局变量、类型定义、函数声明写到头文件中。
对于一个文件set.c,习惯上它的头文件会被命名为set.h。在所有需要用set.h中全局变量、类型定义、声明的函数的文件中,用
1 | |
将对应的头文件引入。在这里的引入头文件方式和引入系统库头文件的方式很类似,只不过这里用的是引号""而不是尖括号<>。
由于头文件里也可以引入头文件,因此我们可能事实上多次引入同一个文件,比如我们引入1.h和2.h,且1.h也引入2.h,这时因为2.h被引入了两次,就有可能出现重复的声明。为了解决这个问题,我们在2.h中定义一个宏,在2.h的最开始判断这个宏是否被定义过,如果被定义过,就跳过2.h整个文件的内容。
这里我们将会用到两个新的预处理指令#ifndef xxx和#endif,它们成对出现且#ifndef在前,作用是如果这时并未已定义xxx宏,则这对#ifndef xxx, #endif之间的内容有效。(其中xxx可以替换为任意宏名)
这样2.h可以写为类似于如下的内容:
1 | |
细心的同学已经发现,如果在程序中尚未引入2.h的位置定义了xxx宏,则#include "2.h"中的声明并不会被引入,因此我们不应该在此使用xxx这种平凡的名字。实际上,我们一般会采用一个与头文件名相关的名字来代替xxx,比如一个常用的代码风格里,这个宏的名字形式为工程名_路径名_文件名_H_。
2.Makefile
在前面学习多模块程序的时候,我们需要先把每个模块的代码都生成为目标代码文件,然后再将目标代码文件联编成一个可执行文件。如果每一次编译都要输入这么多命令,是不是很复杂呢?如果每次修改一点点内容就需要重新编译整个工程,是不是很浪费时间呢?
为了解决所遇到的问题,方便开发,我们使用一个叫做make的命令,它可以读取Makefile文件,并且根据Makefile中的规则描述把源文件生成为可执行的程序文件。
最基本的Makefile中包含了一系列形式如下的规则。请注意,每一条规则的命令前,必须要有一个制表符\t。
1 | |
例如,我们可以写一条规则:
1 | |
表示生成的文件是目标代码文件array.o,它依赖于array.c和array.h。当我们在命令行中执行make array.o时,根据这一规则,如果array.o不存在或者array.c与array.h至少之一比array.o更新,就会执行gcc -c -o array.o array.c。
我们把上述代码保存为Makefile,与array.c和array.h放在同一目录,在那个目录里执行make array.o就能看到效果。注意:Makefile里的除当前目录隐藏文件外的第一个目标会成为运行make不指定目标时的默认目标。
1 | |
在Makefile有多条规则时,如果我们希望只生成其中一个,我们可以在make命令后加上需要生成的目标的名称。例如,在这里我们可以执行make main.o、make array.o或make main。当我们执行make main时,make命令发现array.o和main.o不存在,就会根据以它们为目标的规则先生成它们。
很多时候,你会需要将.o为后缀的目标代码文件和可执行的程序文件删除,完全从头进行编译。那么我们可以写一条clean规则,例如:
1 | |
按照预期,当我们执行make clean就可以删除array.o、main.o和main了。事实真的这样吗?
细心的同学已经发现,这时如果已经存在clean文件,rm命令就不会执行了。为了解决这个问题,我们通过一个特殊的方法告诉make这个名为clean的规则在clean存在的时候仍然有效。
1 | |
.PHONY用于声明一些伪目标,伪目标与普通的目标的主要区别是伪目标不会被检查是否存在于文件系统中而默认不存在且不会应用默认规则生成它。
在Makefile中我们还可以使用它的变量和注释。
1 | |
上面这个例子已经是一个较为完整的Makefile了。以#开头的是我们的注释,我们在这里用注释说明了我们定义的Makefile变量的用途。CC变量定义了编译器,CFLAGS变量标记了编译参数,MAINOBJS变量记录了main依赖的目标文件。定义的变量可以直接通过$(变量名)进行使用。
3.命令行参数
1 | |
在这里,main函数有两个参数,第一个参数是整数型,会传入命令行参数的个数,程序运行时就可以接收到。第二个参数是char **,其中储存了用户从命令行传递进来的参数。
如果我们的程序可执行文件名为main,则在命令行中输入./main hello world我们会得到argc为 3,argv[0]为./main,argv[1]为hello,argv[2]为world。如果有更多参数也可以以此类推。
我们不难发现,命令行参数默认都是空格分隔,但是如果我们希望包含空格的一个字符串作为参数,我们则需要在输入参数时用引号将其包裹起来。
如果我们的程序可执行文件名为main,则在命令行中输入./main "hello world" is my greet我们会得到argc为 5,argv[0]为./main,argv[1]为hello world,argv[2]为is,argv[3]为my,argv[4]为greet。
任何被接收到的argv参数都可以被当做正常的字符串在代码里使用。在很多程序的设计中,我们会需要根据接收到的参数来决定程序的执行方式,这时候,学会使用argc和argv就显得很重要了。在之后的课程中,你也会需要运用这一块的知识,一定要学明白喔。
4.文件操作
在之前的课程中,我们学习、设计的所有程序都是从标准输入进行读取、向标准输出进行写出的,操作系统为我们准备好了标准输入、标准输出的界面。在这节课中,我们将要学习如何从文件中进行读取、如何向文件进行写入。
在读文件的时候我们需要先有一个可以让我们访问到文件的 文件指针(file pointer),它是一个FILE类型的指针。
我们可以通过下面的方式声明一个文件指针。
1 | |
这时候,如果我们希望对一个文件进行操作,我们需要先使用
1 | |
将文件指针和文件关联起来,其中第一个参数是一个字符串,对应了我们希望访问的文件路径。第二个参数是访问模式,它可以是表示只读模式的"r",也可以是表示只写模式的"w",还可以是在文件末尾追加的"a"。
当我们将文件指针和文件关联起来后,我们就可以通过fgetc(fp);获得当前指针之后位置的一个字符了,每获得一个字符,指针会向后移动一个字符(如果到达文件尾部则会返回EOF)。
我们这时通过fputc('c', fp);的方式将字符'c'写入到fp关联的文件内了。
了解到这些信息后,我们就可以实现将一个文件复制到另一个文件内的函数了,例如:
1 | |
这个函数接收的两个参数都是文件指针。这个函数会通过一个可读模式的文件指针逐字符地读取,并且通过一个可写模式的文件指针逐字符地将所有字符写出,从而起到复制文件内容的作用。
你需要注意,在给文件指针进行命名的时候,要避开 stdin、stdout 和 stderr 这三个名称。因为这三个名称其实已经用于标准输入、标准输出、标准错误的文件指针。
你可能会问了,那我们看到的 stdin、stdout 和 stderr 的这三个文件指针可以直接使用吗?回答是肯定的。
我们是通过 fgetc(stdin); 获得来自标准输入的字符,也可以通过 fputc(ch, stdout); 或 fputc(ch, stderr); 将变量 ch 中的字符输出到标准输出或标准错误中的。
除了fgetc和fputc之外,我们还可以使用fscanf和fprintf函数。这两个函数都很像我们已经很熟悉的scanf和printf函数,只是不过,scanf和printf 可以被看作 fscanf和fprintf 的特例。
我们使用 fscanf 从文件指针in_fp进行读取时,可以写成:
1 | |
而如果我们写
1 | |
这将完全与下面直接使用 scanf 的方式等价。
1 | |
类似地,我们使用fprintf向文件指针out_fp进行写出时,可以写成:
1 | |
而如果我们写
1 | |
这将完全与下面直接使用 printf 的方式等价。
1 | |
在使用文件并且确定不再继续使用后,我们要通过下面所示的方式将文件指针fp与文件的关联断开。你可以将它视为和fopen相反的一个操作。
1 | |
如果你不在程序中使用fclose,程序正常结束时,程序会为所有打开的文件调用fclose。
stdin、stdout 其实也是可以被打开的文件指针,如果你觉得用不到的话,其实也是可以使用 fclose 将他们关闭掉的。你可以自己试一试,关闭 stdin、stdout 会对我们以前写过的程序带来什么样的影响呢?
Missing Semester笔记
1.Shell
chmod 777 文件修改权限grep string fail查找字符串,-R可递归进行
2.Shell 工具和脚本
find . -name src -type d1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
作用:在当前目录查找名为src的目录
可用参数:
+ `-name <name>`
+ `-path '*/test/*.py'` 查找所有路径中包含test的文件
+ `-type f/d`查找文件、目录
+ `-mtime -1` 查找前一天修改的所有文件
+ `-size +500k/-10M` 查找大于500k的文件 / 小于10M的文件
+ `-exec rm {} \;` 删除查找到的所有文件
+ history 输出历史命令
+
#### homework
3. ```shell
#!/bin/bash
marco(){
export MARCO=$(pwd)
echo "path: $MARCO "
}
polo(){
cd "$MARCO"
}
#!/bin/bash i=0 while true; do i=$(( i+1 )) n=$(( RANDOM % 100 )) if [[ n -eq 42 ]]; then echo "Something went wrong" >&2 echo "The error was using magic numbers" echo "after $i times, $STDOUT, $STDERR" exit 1 fi echo "Everything went according to plan" done1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
> 参考链接:https://zhuanlan.zhihu.com/p/102176365,https://www.runoob.com/linux/linux-shell.html
+ `.sh`文件第一行:`#!/bin/bash`
+ 执行`.sh文件`:`./hello.sh`
| 类型 | 作用域 | 声明方式 | 规范 |
| ---------- | -------------------- | ------------------ | ---------------------------- |
| 自定义变量 | 当前shell | = | 字符串、整型、浮点型、日期型 |
| 环境变量 | 当前shell及其子shell | export、declare -x | |
| 系统变量 | 所有shell | 启动加载 | |

+ `declare [-/+]选项 变量泵`
+ a 数组
+ i 整型
+ x 环境变量
+ r 只读变量
+ p 用于显示类型
**位置参数变量**
- `$n :$0 代表命令本身、$1-$9代表第1到9个参数,10以上参数用花括号,如 ${10}`。
- $?:从上一条命令中获取错误代码
- $_:上一个命令的最后一个参数
- $* :命令行中所有参数,且把所有参数看成一个整体。
- $@ :命令行中所有参数,且把每个参数区分对待。
- $# :所有参数个数。
- 单引号会忽略逃逸字符
- $$进程ID
- 
**注意**
+ `=`两侧不能加空格,否则就是命令
+
+ `''`中的字符串不考虑转义,`""`中的字符串会转义
+ `mkdir -p /1/2/3` 递归创建目录,不会抛出错误
+ `$(ls)` 先执行ls,执行结果替换$(ls)
+ 在bash中进行比较时,尽量使用双方括号 `[[ ]]` 而不是单方括号 `[ ]`
+ 命令支持`? *`通配符
+ 支持`{}`按行自动展开
```sh
convert image.{png,jpg}
# 会展开为
convert image.png image.jpg
+
分支控制















3.Vim
几种模式:
- 主要:
normal,按esc即可进入normal模式 - i: insert
- r: replace
- v: visual
- sfift + v: visual line
- ctrl + v: visual block
:command line
快捷键:
tabnew: 新窗口help instruction: 查看帮助sq: 新窗口qa: 关闭所有窗口hjkl: 左上右下移动词:
w(下一个词),b(词初),e(词尾)行:
0(行初),^(第一个非空格字符),$(行尾)屏幕:
H(屏幕首行),M(屏幕中间),L(屏幕底部)翻页:
Ctrl-u(上翻),Ctrl-d(下翻)o在当前光标下面重开一行并切换为INSERT模式O上方u撤销上一步(undo)- Ctrl+r 重做(redo)
d删除 {移动命令}- 例如,
dw删除词,de删除到词尾,d$删除到行尾,d0删除到行头。 c删除并更改:删除后进入INSERT模式
- 例如,
按两次会作用于整行
c删除单个字符r替换单个字符y复制,z粘贴/向下搜索?向上搜索.重复上一步~修改大小写
vimtutor
- Ctrl + g 显示文档信息
- G 移动到文档最后一行
- gg第一行
- 数字 + G:跳转到指定的行数
s/old/new(/g)(全局)用new替换old:! + command进行命令行操作
官方讲义:
移动
多数时候你会在正常模式下,使用移动命令在缓存中导航。在 Vim 里面移动也被称为 “名词”, 因为它们指向文字块。
- 基本移动:
hjkl(左, 下, 上, 右) - 词:
w(下一个词),b(词初),e(词尾) - 行:
0(行初),^(第一个非空格字符),$(行尾) - 屏幕:
H(屏幕首行),M(屏幕中间),L(屏幕底部) - 翻页:
Ctrl-u(上翻),Ctrl-d(下翻) - 文件:
gg(文件头),G(文件尾) - 行数:
:{行数}<CR>或者{行数}G({行数}为行数) - 杂项:
%(找到配对,比如括号或者 /* */ 之类的注释对) - 查找:f , F ,t ,T
- 查找/到 向前/向后 在本行的{字符}
,/;用于导航匹配
- 搜索:
/{正则表达式},n/N用于导航匹配
编辑
i进入插入模式
- 但是对于操纵/编辑文本,不单想用退格键完成
O/o在之上/之下插入行d{移动命令}改变 {移动命令} - 例如, `cw` 改变词 - 比如 `d{移动命令}` 再 `i`1
2
3
4
5
6
7
删除 {移动命令}
- 例如, `dw` 删除词, `d$` 删除到行尾, `d0` 删除到行头。
- ```plaintext
c{移动命令}x删除字符(等同于dl)s替换字符(等同于xi)可视化模式 + 操作
- 选中文字,
d删除 或者c改变
- 选中文字,
u撤销,<C-r>重做y复制 / “yank” (其他一些命令比如d也会复制)p粘贴更多值得学习的: 比如
~改变字符的大小写
修饰语
你可以用修饰语改变“名词”的意义。修饰语有 i,表示“内部”或者“在内“,和 a, 表示”周围“。
ci(改变当前括号内的内容ci[改变当前方括号内的内容da'删除一个单引号字符串, 包括周围的单引号
vim配置
esc映射为capslk:
在
C:\Users\Administer\AppData\Roaming\Code\User\keybindings.json中添加一句``1
2
3
4{
"key": "capslock",
"command": "extension.vim_escape"
}
5.命令行环境
ssh myserver journalctl查看系统日志Ctrl-C的作用是发出一个SIGINT信号,用来中断程序。但程序可以忽略SIGINT信号,这是我们可以用Ctrl+\来发出SIGQUIT。1
2
3
4
5
6
7
8
9
10
11
12#!/bin/python3
import signal, time
def handler(signum, time):
print("\nI got a SIGINT, but I am not stopping")
signal.signal(signal.SIGINT, handler)
i = 0
while True:
time.sleep(.1)
print("\r{}".format(i), end="")
i += 1暂停:
Ctrl+Z发出SIGTSTP命令加
&后缀会自动放入后台执行
FFmpeg笔记
格式转换
1 | |
视频裁剪
1 | |
- 参数:
-i : source
-ss:start time
-t :duration
-c :video,audio codec
注意:原视频只能为mp4、mkv
音视频混流
1 | |
注意:这里输入可以是其他类型的文件
字幕视频合并
1 | |
Git
笔记
初始
- 配置的三级作用域:
--global作用于当前user,存储在用户目录的.gitconfig文件中--local仅作用于当前仓库- 查看配置信息
git config -l
- 初始化一个工作区:
git init git add:把文件修改添加到暂存区git commit -m "message":把暂存区所有内容提交到当前分支git remote add name git@github.com:Asxjdb/first.git:关联远程仓库并指定别名namegit status -s:查看状态
分支
git branch 分支名:创建新分支git branch -d main删除分支git switch 分支名:切换分支git merge branch111: 把branch111分支合并到当前分支(共同的父结点)git rebase branch111:把当前分支线性合并到branch111上git checkout HEAD^/git checkout HEAD~1在当前分支上移动HEAD标签git branch -f main HEAD~3让分支指向另一个提交:把main分支强制指向HEAD的第三父级git revert main:撤回main分支的一个提交
版本回退
git log
远程
- 连接
git remote add origin git@github:Asxjdb/cpu.git - 拉取
git pull origin main - 查看本地、远程所有分支
git branch -a - 删除远程分支
git push origin -d main - 创建远程分支并推送
git push -u origin master - 强制推送
git push -f
计蒜客课件
笔记
使用Git分支与版本切换
git branch查看现有分支git branch <分支名>创建分支git branch -d <分支名>删除分支git checkout <分支名> / git switch <分支名>切换分支git checkout -b <分支名> / git switch -c <分支名>创建并切换到分支git stash储藏当前工作目录现场git stash pop恢复到最近储藏的现场git stash list查看所以储藏的现场git stash apply stash@{0}恢复到指定的储藏现场git stash drop stash@{0}删除储藏指定位置中的指定现场


















实践
- 使用
git status这个命令来查看工作目录中有哪些文件进行过操作 




git checkout -b dev==创建并切换到dev分支==git push origin dev==将dev分支推送到远端仓库==git branch -d 参数 分支名==删除本地分支==git push origin --delete suanshu==删除远端仓库的suanshu分支==git branch -a==查看本地和仓库的所有分支==
Git的远端仓库交互
git remote add origin <远端仓库url>关联本地仓库和远端版本库git push origin develop将本地修改推到远端git pull origin master将远端的修改拉到本地- 拉取和推送
git fetch拉取(全部分支)更新不更新工作目录git pull拉取(全部分支)更新并根据本地分支对应分支更新工作目录git pull origin <分支名>从远端origin的指定分支进行拉取git push推动更新git push origin <分支名>向远端origin的指定分支名分支进行推送

git branch创建分支git checkout切换到指定的版本(或通过分支指定的版本)git merge完成合并:将一个分支的修改应用到当前分支
Git协作之rebase策略











Git仓库配置



Git分支与版本切换
















操作系统
来源:https://segmentfault.com/a/1190000039073637
蓝色的表示文件夹,白色的表示文件,绿色表示拥有所有权限,红色表示压缩包。
- bin : 全称binary(二进制),该目录中存储的都是一些二进制文件,文件都是可以被运行的。
- boot: 这里存放一些启动linux时使用的核心文件,包括一些连接文件以及镜像文件。
- dev :该目录中主要存放的是外接设备,例如盘,其他的光盘等。其中的外接设备不能直接被使用,需要挂载(类似Windows下的分配盘符)
- etc: 主要存储系统管理所需的一些配置文件。
- home: 表示“家”,存储除了root用户以外其他所有用户,类似于Windows下的user/用户。在linux中,每个用户都有自己的家目录,一般该目录名以用户的账号命名。
- /bin 可执行二进制文件的目录,如常用的命令 ls、tar、mv、cat 等实际上都是一些小的应用程序
- /home 普通用户的主目录,对应Windows下的C:/Users/用户名/
- /root root用户的主目录(root用户是具有最高权限的用户,之后会讲)
- /boot 内核文件的引导目录, 放置 linux 系统启动时用到的一些文件
- /sbing 超级用户使用的指令文件
- /tmp 临时文件目录,一般用户或正在执行的程序临时存放文件的目录,任何人都可以访问,重要数据不可放置在此目录下。
- /dev 设备文件目录,在Linux中万物皆文件,实际上你插入的U盘等设备都会在dev目录下生成一个文件,我们可以很方便地通过文件IO方式去操作外设,对嵌入式开发极为友好。
- /lib 共享库,系统使用的函数库的目录,程序在执行过程中,需要调用一些额外的参数时需要函数库的协助。
- /usr 第三方 程序目录
- /etc 配置程序目录,系统配置文件存放的目录
- /var 可变文件,放置系统执行过程中经常变化的文件
- /opt 用户使用目录,给主机额外安装软件所摆放的目录。
SQL
语句
基本
进入MySQL
1
mysql -u root -p 111查看有哪些库
1
show databases;查看某一库中的表单
1
2use sakila; // 使用指定表单
show tables; // 查看sakila数据库中的表单查看表单中的列/ 字段/ 属性/ 数据项
1
desc payment;导出到文件
1
2select * from 19info, grade where 19info.`学号` = grade.`学号` into outfile '/var/lib/mysql/baoyan19'
注意只能导出到 /var/lib/mysql/baoyan19这个文件夹从文件导入
1
2load data infile '/your/file/path/country' into table country
追加到country中,country需要有属性名查看当前数据库
1
select database();查看当前用户
1
select user();单行注释
1
2-- 要有一个空格
# 空格合并
1
group_conc
DDL
create: table, view, index
drop: table, view, index
alter: table
alter
1 | |
删除表
1
DROP TABLE table_name;
视图
创建
1
2create view view_name [列名]
as 子查询
安全
静态约束
1 | |
例:
1 | |
断言
1 | |
触发器
1 | |
拓展
- 第三方工具
mycli:支持SQL语法高亮、自动补全,- 使用方式:
mycli -uroot -p111
- 使用方式:
机场


个人博客
https://fluid-dev.github.io/hexo-fluid-docs/
hexo g生成静态网页hexo s本地预览效果hexo d上传到githubhexo g -d生成静态网页后直接上传githubhexo new file_name新建博客
文件解析:
scaffolds/post.md:博客的自动生成部分
格式
- 题目用四级标题
- 分类用三级标题
书写流程
hexo new "blog_name"新建文章使用
typora打开博客文件(方便添加图片、利于书写)typora配置
写完后,在
vscode中打开博客文件,ctrl+F2选中所有图片的第一段URL,删除。效果如下:hexo g生成hexo s在本地打开hexo d上传