OS-Lab0

一.GIT 的常规操作

常规操作也是我自己平时常用的几个命令, 学自于 pro git 这本书中

一.git 基本使用

  1. clone现有仓库

    1
    git clone URL  (URL支持git,ssh,http,https等各种协议)
  2. git中文件的各个状态

    • unstaged - git仓库中没有此文件的相关记录
    • modified - git仓库中有这个文件的记录,并且此文件当前有改动
    • staged - 追加,删除或修改的文件被暂时保存,这些追加,删除和修改并没有提交到git仓库
    • commited - 追加或修改的文件被提交到本地git仓库(git仓库中大部分都是这种文件,所以git status不显示这些文件)
  3. 查看git仓库中各文件状态

    1
    git status
  4. 初始化一个仓库

    1
    git init

    在当前文件夹下生成.git目录,完成初始化,此时此文件夹下的所有文件处于unstaged状态

  5. 追加文件

    1
    git add test.c

    test.c的文件变为staged状态,其他文件还是unstaged状态

    5.1 追加文件的结果1 - 恢复为原先状态(变为unstaged)

    1
    git rm --cache test.c

    5.2 追加文件的结果2 - 提交到git仓库(变为commited)

    1
    git commit -m "my message"
  6. 修改文件

    1
    echo "aaa"  >> test.c

    test.c的状态变为modified

    6.1 修改文件的结果1

    1
    git add test.c  (暂时保存修改的内容,即变为staged)

    下面有2条路可以选择:
    6.1.1 取消刚才的暂时保存

    1
    git reset test.c  (状态变回modified)

    6.2.2 将暂存的修改提交到git仓库

    1
    git commit -m "my message"

    6.2 修改文件的结果2

    1
    git checkout test.c  (将test.c恢复为git仓库中的最新版本,即变为commited状态,test.c的内容和5.2节一样)
  7. 删除文件
    7.1 从git仓库和磁盘上删除文件

    1
    git rm test.c  (当前目录中删除了test.c,在git仓库中暂时删除了test.c,相当于staged状态)

    7.1.1 从git仓库中删除test.c

    1
    git commit -m "my message"  (git仓库以后不再维护test.c)

    7.1.2 删错了,恢复刚才的操作

    1
    git reset HEAD test.c  (恢复到删除前的状态,当前目录中已删除的test.c也恢复了,test.c仍文commited状态)

    7.2 仅从git仓库中删除文件

    1
    git rm --cache test.c (当前目录中没有删除了test.c,仅在git仓库中暂时删除了test.c,相当于staged状态)

    7.2.1 从git仓库中删除test.c

    1
    git commit -m "my message"  (git仓库以后不再维护test.c,但是当前目录中仍然有test.c)

    7.2.2 删错了,恢复刚才的操作

    1
    git reset HEAD test.c  (和7.1.2一样)

    7.3 误删除后的恢复
    如果删除了一个文件,并且commit之后发现删错了。也可以恢复,

    1
    2
    3
    git log  (查看各次的提交信息)
    git checkout commit号 (恢复到未删除前的commint号,此时删除的文件也恢复到磁盘上了)
    git checkout master (备份好删除的文件后,再回到最新状态)

二.git 远程仓库

  1. 查看远程仓库
    1.1 简单查看-所有仓库

    1
    git remote (只能查看远程仓库的名字)

    1.2 查看更多内容-所有仓库

    1
    git remote -v (远程仓库的名字及git地址)

    1.3 查看单个仓库的信息

    1
    git remote show [remote-name]
  2. 新建远程仓库

    1
    2
    git remote add [shortname] [url]
    ex. git remote add mc git://www.host.com/gitdir/mycode.git
  3. 修改远程仓库

    1
    git remote rename [oldnanme] [newname]
  4. 删除远程仓库

    1
    git remote rm [remote-name]
  5. 远程仓库的数据
    5.1 获取数据

    1
    2
    git fetch [remote-name] (获取仓库的所有更新,但是不自动合并当前分支)
    git pull (获取仓库的所有更新, 并且自动合并到当前分支)

    5.2 上传数据

    1
    2
    git push [remote-name] [branch-name]
    ex. git push origin master

三.git 分支

  1. 查看和切换分支

    1
    2
    3
    4
    5
    git branch (查看所有的分支及当前处于哪个分支)
    git branch -v (查看所有的分支的详细信息)
    git branch --merged (查看已经合并的分支)
    git branch --no-merged (查看还没合并的分支)
    git checkout [branch-name] (切换到某个分支)
  2. 新建分支

    1
    2
    git branch [branch-name]  (新建一个分支)
    git branch -b [branch-name] (新建一个分支并切换到这个分支上)
  3. 合并分支

    1
    2
    3
    4
    git merge [branch-name]
    ex. 将分支btest合并到主分支master
    git checkout master
    git merge btest

    merge时有冲突的文件会列出来,需要手动合并

    将冲突手动解决后,再次用 git status来查看是否还有 unmerged的文件。
    如果没有冲突的文件,就可以 git commit 来提交这次合并了。

  4. 删除分支

    1
    2
    git branch -d [branch-name]
    或者 git branch -D [branch-name] (强制删除某个还未合并的分支)
  5. 远程分支相关
    5.1 新建远程分支

    1. git checkout [local_branch] (首先进入想要上传的分支)
    2. git remote add [remote_repo] [remote_branch]
      (这里的[remote_branch]是远程分支的名字,一般和[local_branch]同名,
      [remote_repo]是远程仓库的名字)

    5.2 向远程分支推送数据

    1
    git push [remote_repo] [remote_branch]

    5.3 删除远程分支

    1
    git push [remote_repo] :[remote_branch] (注意远程分支前有个":")

二.shell 变量的定义,赋值,运算

一、变量类型

1.1、自定义变量

1.定义变量

1
2
3
不能使用纯数字命名,不能使用横杠命名	
变量名=变量值
[root@localhost ~]# name=erha

2.引用变量

1
$变量名 或者 ${变量量名}

3.查看变量值

1
2
3
echo	$变量量名
[root@localhost ~]# echo $name
erha

4.取消变量

1
2
[root@localhost ~]# unset  name
[root@localhost ~]# echo $name

5.作⽤用范围
仅在当前shell中有效

1.2、系统环境变量
1
2
$1	$2	$3	$4	$5	$6 ...
#$1代表向脚本内传递的第一个位置参数,$2代表第二个,依次类推。
1.3、预定义变量
1
2
3
4
5
6
$0	脚本⽂文件名 	
$* $@ 所有的参数
$# 参数的个数
$$ 当前进程的 PID
$! 上一个后台进程的 PID
$? 上一个命令的返回值 0 表示成功

小脚本

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# cat var.sh 
#!/bin/bash
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "第三个参数:$3"
echo "第四个参数:$4"
echo "所有参数为:$*"
echo "参数个数为:$#"
echo "当前进程ID为:$$"
echo "上一个进程ID为:$!"
echo "当前脚本名称为:$0"
echo "当前脚本执行结果:$?"

执行如下

1
2
3
4
5
6
7
8
9
10
11
[root@localhost ~]# sh var.sh 1 2 3 4 5 
第一个参数:1
第二个参数:2
第三个参数:3
第四个参数:4
所有参数为:1 2 3 4 5
参数个数为:5
当前进程ID为:8875
上一个进程ID为:
当前脚本名称为:var.sh
当前脚本执行结果:0

二、变量赋值

2.1、直接赋值
1
2
[root@localhost ~]# name=huahua
#注意等号两边不能有空格
2.2、从键盘读入
1
2
3
4
5
[root@localhost ~]# read 参数 变量名
可选参数
-p :提示信息
-t :等待时间
-n :读入字符数

小脚本

1
2
3
4
5
6
7
8
9
解压文件到指定位置
[root@localhost ~]# cat tr.sh
#!/bin/bash
read -p "请输入要解压的文件,及解压目录:" src dst
if [ -e $src ];then
tar -zxvf $src -C $dst
else
echo "没有该文件..."
fi
2.3、强引用与弱引用
1
2
3
4
5
6
7
8
"" :弱引用,特殊字符依旧有特定含义。
[root@localhost ~]# age=18
[root@localhost ~]# echo "$age"
18

'' :强引用,所有字符被当作普通字符处理。
[root@localhost ~]# echo '$name'
$name
2.4、命令执行结果引用
1
2
3
4
5
6
7
8
9
`` :反引号,不过容易与引号混淆。
[root@localhost ~]# t1=`date +%F`
[root@localhost ~]# echo $t1
2020-01-20

$():$加小括号,不容易混淆,一般使用这种方式较多
[root@localhost ~]# t2=$(date +%F)
[root@localhost ~]# echo $t2
2020-01-20

三、数学运算

3.1、整数运算(expr)
1
2
3
4
5
6
7
8
9
10
11
12
13
加 减 乘 除 取余
+ - \* / %

[root@localhost ~]# expr 1 + 1
2
[root@localhost ~]# expr 1 - 1
0
[root@localhost ~]# expr 1 \* 1
1
[root@localhost ~]# expr 1 / 1
1
[root@localhost ~]# expr 1 % 1
0
3.2、整数运算($(()))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加 减 乘 除 取余 幂运算
+ - * / % **

[root@localhost ~]# echo $((1 + 2))
3
[root@localhost ~]# echo $((1 - 2))
-1
[root@localhost ~]# echo $((1 * 2))
2
[root@localhost ~]# echo $((1 / 2))
0
[root@localhost ~]# echo $((1 % 2))
1
[root@localhost ~]# echo $((1 ** 2))
1
3.3、整数运算($[])
1
2
3
4
5
6
7
8
9
10
11
$(())类似
[root@localhost ~]# echo $[1+2]
3
[root@localhost ~]# echo $[1-2]
-1
[root@localhost ~]# echo $[1*2]
2
[root@localhost ~]# echo $[1/2]
0
[root@localhost ~]# echo $[1**2]
1
3.4、整数运算(let)
1
2
3
4
5
6
加 减 乘 除 取余 幂运算
+ - * / % **

[root@localhost ~]# let nu=2**4
[root@localhost ~]# echo $nu
16
3.5、小数运算
1
2
3
可以使用bc命令
[root@localhost ~]# echo "1.1"+"2.3"|bc
3.4

三.vim实用笔记

一、vim实用基础配置

配置出了可以通过命令实现外,也可以将set内容添加到vim配置文件/etc/vim/vimrc中,当然,添加到vimrc就不需要在set前面加”:”了。

1、设置显示行号可以使用命令 ”:set number”

2、文件自动保存,”:set autowrite”

3、实用配置列表:

因为这些配置实在太多,就不一一列举了,总结和摘录了一个常用的配置表,可以直接复制粘贴到vimrc配置文件中(“符号后面的都会被识别为注释):

syntax on “ 自动语法高亮,其实vim7.3版本语法默认是高亮的

colorscheme evening” 一种好看的配色方案

set shiftwidth=4 “ 设定 << 和 >> 命令移动时的宽度为 4个字符

set tabstop=4 “ 设定 tab 长度为 4个字符

filetype plugin indent on “ 开启插件

set ignorecase “ 搜索时忽略大小写

set incsearch “ 即刻显示当前输入的搜索结果

set hlsearch “ 高亮搜索结果

set noerrorbells “ 关闭错误信息响铃

set autochdir “ 自动切换当前目录为当前文件所在目录

filetype indent on “自动缩进

set autoindent shiftwidth=n “修正缩进,ctrl+T或ctrl+D或者>>、<<均对应n个字符缩进

二、vim查找功能

1、最基础的查找:

状态,直接按 / 键。然后输入要查找的内容。下一个查找结果按n。如果查找的内容带有符号‘.*[]^%/n?~$ ,则添加转义字符方式“ \ ”再进行查找即可。

2、精确查找:

比如说我要确切地找到一个单词“top”。则按 / 键,然后输入如下内容:

/<top>

其实它的意思是,搜索以top开头,并以top结尾的单词。所以如果我们希望查找以top开头的所有单词:

/<top

以top结尾的单词:

/top>

3、跨文件查找字符:

比如,在进行某个文件的编辑时,我希望找到当前工作目录中所有含有”include”字符串的cpp文件:

“:grep include *.cpp”


OS-Lab0
http://example.com/2022/07/16/OS-Lab0/
作者
Wei Xia
发布于
2022年7月16日
许可协议