Post

Linux Tool

Some basic knowledge about Linux and git

常用命令

  • man(手册)
  • pwd(路径)
  • cd
    1
    2
    3
    
    cd -- #返回上级目录
    cd ~ #切换到主目录
    cd 路径 # 切换到对应路径
    
  • mv(重命名文件或移动文件)
    1
    2
    
    mv  文件 目标文件名 # 重命名 
    mv  文件 -t 目标路径   #移动
    
  • cp(拷贝文件)
    1
    
    cp -r 移动文件夹 目标文件夹 
    
  • mkdir
    1
    
    mkdir 对应文件名
    
  • chmod
    1
    2
    
    chmod 777 file #改变对应文件的权限
    chmod ugo+r file #所有人都可读文件 
    
  • ln
    1
    
    ln -s file_path Link_name #符号链接 s表示symbol
    
  • j
    autojump 快速跳转工具,能够根据最近常用的文件夹调整
    1
    
    j 文件夹
    
  • tldr
    man功能类似,但是更加清楚
    1
    
    tldr 工具
    

    输入流和输出流

>输入流,<输出流
对于输入和输出进行重定向,将某个文件里进行输出或将某个文件进行输入

1
2
3
echo hello > hello.txt
cat hello.txt 
# 将echo的输出重定向至hello.txt,并输出hello.txt文件内容

管道

通过管道我们可以将一个程序的输出和另一个程序的输入连接起来

1
ls -l | tail -n10 #打印最后10个文件属性

Shell脚本基本语言

$bar访问变量中储存的数值

1
2
3
4
5
foo=bar
echo "$foo"
# 打印 bar
echo '$foo'
# 打印 $foo

函数

1
2
3
4
mcd () {
    mkdir -p "$1"
    cd "$1"
}

其中 $1 表示第一个变量
bash中一些特殊的变量

  • $0 - 脚本名
  • $1$9 - 脚本的参数。 $1 是第一个参数,依此类推。
  • $@ - 所有目标文件
  • $# - 参数个数
  • $? - 前一个命令的返回值
  • $$ - 当前脚本的进程识别码
  • !! - 完整的上一条命令,包括参数。常见应用:当你因为权限不足执行–命令失败时,可以使用 sudo !! 再尝试一次。
  • $_ - 上一条命令的最后一个参数。如果你正在使用的是交互式 shell,你可以通过按下 Esc 之后键入 . 来获取这个值。
  • $< - 第一个依赖文件
  • $^ - 所有依赖文件

执行命令 - $(cmd) 将输出结果替换 $cmd

1
for file in $(ls)

通配符
通常使用 ?* 来匹配一个或任意一个字符如foo*则代表foo1foo2foo3等等
花括号
当你有一系列的指令,其中包含一段公共子串时,可以用花括号来自动展开这些命令。这在批量移动或转换文件时非常方便。

1
2
3
4
5
6
7
8
mkdir foo bar

# 下面命令会创建 foo/a, foo/b, ... foo/h, bar/a, bar/b, ... bar/h 这些文件
touch {foo,bar}/{a..h}
touch foo/x bar/y
# 比较文件夹 foo 和 bar 中包含文件的不同
diff <(ls foo) <(ls bar)

  • export
    export可新增,修改或删除环境变量,供后续执行的程序使用
    1
    2
    
    # 将/tmp/hello的路径加入到PATH,从而可以在任何地方直接使用hello命令。
    export PATH=$PATH:/tmp/hello
    

    Git

版本控制系统(Version System System, VCS)是一类用于追踪源代码(或其他文件、文件夹)改动的工具。
Git 拥有一个经过精心设计的VCS模型,这使其能够支持版本控制所需的所有特性,例如维护历史记录、支持分支和促进协作。

不带链接的图片

Git Fuction

  • git init
    创建一个git的仓库,其数据会存放在一个名为 .git 的目录下
  • git status
    显示当前的仓库状态
  • git log
    显示历史日志
  • git log --all --graph --decorate
    可视化历史记录(有向无环图)
  • git diff <filename>
    显示与暂存区文件的差异
  • git diff <revison> <filename>
    显示某个文件两个版本之间的差异
  • git checkout <revison>
    显示HEAD和目前的分支
  • git branch
    显示分支
  • git branch <name>
    创建分支
  • git checkout -b <name>
    创建分支并切换到分支
  • git merge <revision>
    合并到当前分支

Git的进阶用法

1
2
3
4
5
6
7
8
9
10
11
git rm --cached -rf <filename>
# 删除working tree 中commit的文件  -r 递归删除 -f force 
git submodule deinit 
# submodule 类似项目中的子项目
# deinit 删除某一个子项目
# submodule 可以有着独立的缓存
git reset 
# 对于commit的缓存进行回述
# -- soft index 和 working tree 都不会改变
# -- mixed index 改变 working tree 不该变
# -- hard index 和 working tree 都会改变

慎用git reset --hard

1
2
3
4
5
6
git config
# 用来配置提交用户属性
# --list 可以看到config的一些属性
# 一些使用的功能
git config remote.origin.url xxx
# 修改url

.gitignore文件 通常配置一些上传需要忽略的文件(如一些配置文件,保护一些隐私)

This post is licensed under CC BY 4.0 by the author.