命令行笔记
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 su
sudo !!
!!
代表上一条命令
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.jpg
rm b.jpg
删除b.jpg
man 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 xxx
sudo 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 -uf
u
显示当前用户的所有进程,f
显示进程之间的关系ps | grep fork
查看是否有名为fork的进程依然存在
kill 给进程发各种信号
kill -9 {PID}
终止某个进程pkill
pkill -9 fork
避免不同终端PID不同的问题
ctrl+z
把当前命令放入后台,并暂停jobs
查看当前在后台的命令fg %num
将后台的命令调至前台bg %num
将后台暂停的进程在后台执行kill %num
终止命令编号为numd的进程
shell小工具
一个据说更好的shell:
zsh
man简洁版:
tldr
tldr ls
在终端查看图片:
sudo apt-get install imagemagick
display 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 num
ctrl+b p
ctrl+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 d
1
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" done
1
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 | 启动加载 | |
![image-20230808201017745](image-20230808201017745.png)
+ `declare [-/+]选项 变量泵`
+ a 数组
+ i 整型
+ x 环境变量
+ r 只读变量
+ p 用于显示类型
**位置参数变量**
- `$n :$0 代表命令本身、$1-$9代表第1到9个参数,10以上参数用花括号,如 ${10}`。
- $?:从上一条命令中获取错误代码
- $_:上一个命令的最后一个参数
- $* :命令行中所有参数,且把所有参数看成一个整体。
- $@ :命令行中所有参数,且把每个参数区分对待。
- $# :所有参数个数。
- 单引号会忽略逃逸字符
- $$进程ID
- ![image-20230808201751902](image-20230808201751902.png)
**注意**
+ `=`两侧不能加空格,否则就是命令
+
+ `''`中的字符串不考虑转义,`""`中的字符串会转义
+ `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
:关联远程仓库并指定别名name
git 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,删除。效果如下:![](111111111.png)
hexo g
生成hexo s
在本地打开hexo d
上传