tools

返回主页

工具链(实用主义)

Linux基础技能

实用主义至上,遇到不常见指令/操作可以查手册、查网页。

(Read The Friendly Mamual , Search The Friendly Web , Read The Fucking Source Code !)

Linux基本命令

 

ls(list directory contents)

用于显示指定工作目录下之内容(列出目前工作目录所含的文件及子目录)。

ls 命令还可以使用通配符进行模式匹配,例如 * 表示匹配任意字符,? 表示匹配一个字符,[...] 表示匹配指定范围内的字符。

 

cd (change directory)

用于改变当前工作目录的命令,切换到指定的路径

~ 也表示为 home 目录 的意思, . 则是表示目前所在的目录, .. 则表示目前目录位置的上一层目录。

切换到上级目录:使用 .. 表示上级目录,可以通过连续多次使用 .. 来切换到更高级的目录。

切换到用户主目录(home):使用 ~ 表示当前用户的主目录,可以使用 cd 命令直接切换到主目录。

切换到上次访问的目录:使用 cd - 可以切换到上次访问的目录。

 

cp(copy file)

主要用于复制文件或目录

用户使用该指令复制目录时,必须使用参数 -r 或者 -R

 

 

mkdir(make directory)

用于创建目录 -p 确保目录名称存在,不存在的就建一个

 

 

rm(remove)

用于删除一个文件或者目录

删除文件可以直接使用rm命令,若删除目录则必须配合选项"-r"

删除当前目录下的所有文件及目录,命令行为:

 

 

mv(move file)

用来为文件或目录改名、或将文件或目录移入其它位置

将源文件名 source_file 改为目标文件名 dest_file (重命名)

将文件 source_file 移动到目标目录 dest_directory 中

目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory

 

 

cat(concatenate)

命令用于连接文件并打印到标准输出设备上

-n 或 --number:由 1 开始对所有输出的行数编号。

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

清空 /etc/test.txt 文档内容:

cat 也可以用来制作镜像文件。例如要制作软盘的镜像文件,将软盘放好后输入:

相反的,如果想把 image file 写到软盘,输入:

 

 

常用技能和连招

 


 

tmux

功能 (1)分屏 (2)允许断开Terminal连接后,继续运行进程

tmux 结构: 一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane

tmux: session 0: window 0: pane 0 pane 1 pane 2 ... window 1 window 2 ... session 1 session 2 ...

tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。

(原生 tmux 应该是 Ctrl + b 作为引导手势)


 

vim (vim组合技)

功能: (1) 命令行模式下的文本编辑器。 (2) 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。 (3) 使用方式:vim filename 如果已有该文件,则打开它。 如果没有该文件,则打开个一个新的文件,并命名为filename

 

模式: (1) 一般命令模式 默认模式。命令输入方式:类似于打游戏放技能,按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。 (2) 编辑模式 在一般命令模式里按下i,会进入编辑模式。 按下ESC会退出编辑模式,返回到一般命令模式。 (3) 命令行模式 在一般命令模式里按下 : / ? 三个字母中的任意一个,会进入命令行模式。命令行在最下面。 可以查找、替换、保存、退出、配置编辑器等。

 

组合技等切记区分大小写

异常处理: 每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。 如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种: (1) 找到正在打开该文件的程序,并退出 (2) 直接删掉该swp文件即可

 



 

Shell

概论

shell是我们通过命令行与操作系统沟通的语言。

shell脚本可以直接在命令行中执行,也可以将一套逻辑组织成一个文件,方便复用。

Linux中常见的shell脚本有很多种,常见的有:(注意:不同版本,略有区别!使用时注意RTFM!)

Linux系统中一般默认使用bash,所以接下来讲解bash中的语法。 文件开头需要写#! /bin/bash,指明bash为脚本解释器。

新建一个test.sh文件,内容如下:

 

运行方式

 

注释

单行注释

多行注释

 

变量

定义变量

定义变量,不需要加$符号,例如:

 

使用变量

使用变量,需要加上$符号,或者${}符号。花括号是可选的,主要为了帮助解释器识别变量边界。

 

只读变量

使用 readonly 或者 declare 可以将变量变为只读。

 

删除变量

unset可以删除变量。

 

变量类型

  1. 自定义变量(局部变量)----------- 子进程不能访问的变量

  2. 环境变量(全局变量)------------- 子进程可以访问的变量

 

自定义变量改成环境变量:

环境变量改为自定义变量:

 

字符串

字符串可以用单引号,也可以用双引号,也可以不用引号。

单引号与双引号的区别:

获取字符串长度

提取子串

 

默认变量

文件参数变量

在执行shell脚本时,可以向脚本传递参数。$1是第一个参数,$2是第二个参数,以此类推。特殊的,$0是文件名(包含路径)。例如:

创建文件test.sh:

然后执行该脚本:

其它参数相关变量

 

数组

数组中可以存放多个不同类型的值,只支持一维数组,初始化时不需要指明数组大小。数组下标从0开始。

定义 数组用小括号表示,元素之间用空格隔开。例如:

也可以直接定义数组中某个元素的值:

读取数组中某个元素的值

读取整个数组

数组长度(真*元素个数)

 

expr命令

expr命令用于求表达式的值,格式为:

表达式说明:

 

字符串表达式

 

返回STRING的长度

CHARSET中任意单个字符在STRING中最前面的字符位置,下标从1开始。如果在STRING中完全不存在CHARSET中的字符,则返回0

返回STRING字符串中从POSITION开始,长度最大为LENGTH的子串。如果POSITION或LENGTH为负数,0或非数值,则返回空字符串。

e.g.

 

整数表达式

expr支持普通的算术操作,算术表达式优先级低于字符串表达式,高于逻辑关系表达式。

 

逻辑关系表达式(短路原则)

 

read命令

read命令用于从标准输入中读取单行数据。当读到文件结束符时,exit code为1,否则为0。

参数说明

 

echo命令

用于输出字符串

命令格式:

显示普通字符串

显示转义字符(注意只能使用双引号,如果使用单引号,则不转义)

显示变量

显示换行

显示不换行

显示结果定向至文件

原样输出字符串,不进行转义或取变量(用单引号)

显示命令的执行结果

 

printf命令

printf命令用于格式化输出,类似于C/C++中的printf函数。

默认不会在字符串末尾添加换行符。

命令格式:

用法示例:

 

test命令与判断符号[]

逻辑运算符&&和||

 

test命令

在命令行中输入man test,可以查看test命令的用法。

test命令用于判断文件类型,以及对变量做比较。

test命令用exit code返回结果,而不是使用stdout。0表示真,非0表示假

&& || 短路实现 if - else

 

文件类型判断

文件权限判断

整数间的比较

字符串比较

多重条件判定

 

判断符号[]

[]与test用法几乎一模一样,更常用于if语句中。另外[[]]是[]的加强版,支持的特性更多。

注意:

e.g.

 

判断语句

if…then形式 类似于C/C++中的if-else语句。

单层if 命令格式:

 

单层if-else 命令格式

 

多层if-elif-elif-else

 

case…esac形式

类似于C/C++中的switch语句。

 

循环语句

 

 

 

 

 

 

 

break命令

跳出当前一层循环,注意与C/C++不同的是:break不能跳出case语句

 

continue命令

跳出当前循环。

 

死循环的处理方式

 

 

函数

bash中的函数类似于C/C++中的函数,但return的返回值与C/C++不同,返回的是exit code,取值为0-255,0表示正常结束。

如果想获取函数的输出结果,可以通过echo输出到stdout中,然后通过$(function_name)来获取stdout中的结果。

函数的return值可以通过$?来获取。

 

命令格式

函数的输入参数

在函数内,dollar1表示第一个输入参数,dollar2表示第二个输入参数,依此类推。

注意:函数内的$0仍然是文件名,而不是函数名。

 

函数内的局部变量

可以在函数内定义局部变量,作用范围仅在当前函数内。

可以在递归函数中定义局部变量。

命令格式:

 

exit命令

exit命令用来退出当前shell进程,并返回一个退出状态;使用$?可以接收这个退出状态。

exit命令可以接受一个整数值作为参数,代表退出状态。如果不指定,默认状态值是 0。

exit退出状态只能是一个介于 0~255 之间的整数,其中只有 0 表示成功,其它值都表示失败。

E.g.

 

文件重定向

每个进程默认打开3个文件描述符:

 

重定向命令列表

输入和输出重定向

 

同时重定向stdin和stdout

创建bash脚本:

创建input.txt,里面的内容为:

3 4

执行命令:

 

引入外部脚本

类似于C/C++中的include操作,bash也可以引入其他文件中的代码。

语法格式:

示例:

创建test1.sh,内容为:

然后创建test2.sh,内容为:

执行及结果:

 



 

SSH

SSH登录

基本用法

远程登录服务器:

user: 用户名 hostname: IP地址或域名

第一次登录时会提示:

输入yes,然后回车即可。 这样会将该服务器的信息记录在~/.ssh/known_hosts文件中。

然后输入密码即可登录到远程服务器中。

 

默认登录端口号为22。如果想登录某一特定端口:

 

配置文件

创建文件 ~/.ssh/config。

然后在文件中输入:

之后再使用服务器时,可以直接使用别名myserver1、myserver2。

 

密钥登录

创建密钥:

然后一直回车即可。

执行结束后,~/.ssh/目录下会多两个文件:

id_rsa:私钥 id_rsa.pub:公钥

之后想免密码登录哪个服务器,就将公钥传给哪个服务器即可。

例如,想免密登录myserver服务器。则将公钥中的内容,复制到myserver中的~/.ssh/authorized_keys文件里即可。

也可以使用如下命令一键添加公钥

 

执行命令

命令格式:

 

SCP传文件

基本用法

命令格式:

将source路径下的文件复制到destination中

 

一次复制多个文件:

 

复制文件夹:

 

指定服务器的端口号:

注意: scp的-r -P等参数尽量加在source和destination之前。

 

配置其他服务器的vim和tmux

 

验证git

 



 

Git

一个推荐的学习平台 (Learn Git Branchinghttps://learngitbranching.js.org/?locale=zh_CN

#超详细# linux下 使用 Git 将代码上传到指定分支_linux git 上传到一个分支-CSDN博客


 

git基本概念

工作区:仓库的目录。工作区是独立于各个分支的。 暂存区:数据暂时存放的区域,类似于工作区写入版本库前的缓存区。暂存区是独立于各个分支的。 版本库:存放所有已经提交到本地仓库的代码版本 版本结构:树结构,树中每个节点代表一个代码版本。

 

 

git常用命令

本地操作

分支操作

云端操作