LINUX学习记录
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
回顾系列两天的时间2023.2.24-2023.2.25重新学了遍Linux基础课收获非常多以前只会一些简单的Linux命令对shellgit管道复杂Linux命令都不熟悉学完之后终于是入门Linux了。
Tmux 和 Vim
-
Tmux
-
前缀符号(默认是
ctrl + b
, y总修改了配置文件改成了ctrl + a
) +a attach
可以重新打开之前的 tmux 窗口。前缀符 +d
可以挂起 tmux 窗口。 -
在 Acterminal中向外复制时需要退出tmux进入bash然后选中
ctrl + insert + fn(本机)
复制shift + insert + fn(本机)
粘贴 或是ctrl + v
。 -
前缀符 + s
可以查看所有的session。 -
bash 的配置文件是
.bashrc
-
Vim
-
Vim的配置文件是家目录下的
.vimrc
。cd
命令可以直接进入环境变量$HOME
的目录也就是家目录。echo $HOME
输出HOME的值
-
复制粘贴需要
前缀符 + [
然后选中前缀符 + ]
粘贴。 -
gg (光标移动到第一行) , G (光标移动到最后一行) 。
gg=G
可以格式化代码 后者命令模式下输入:set paste
设置粘贴模式取消代码的缩进 -
v (选中文本)d删除选中的文本y复制选中的文本。dd删除当前行yy复制当前行。
ggvGd
删除全文ggvGy
复制全部文本。
-
Shell编程
-
ipython3
中使用!
自动将这一行解释为shell
脚本。 -
字符串可以用单引号双引号或者不引。
-
单引号与双引号的区别
单引号中的内容会原样输出不会执行、不会取变量
双引号中的内容可以执行、可以取变量name=yxc # 不用引号 echo 'hello, $name \"hh\"' # 单引号字符串输出 hello, $name \"hh\" echo "hello, $name \"hh\"" # 双引号字符串输出 hello, yxc "hh"
-
-
参数 说明 $# 代表文件传入参数个数。 $* 所有参数使用空格隔开的字符串 $@ 每个参数各自用双引号括起来的字符串 $$ 脚本当前运行的PID $? 上一条命令的 exit code
, 0表示正常退出非0为异常$(command) 返回 command
命令的stdout (可嵌套)`command` 返回 command
命令的stdout (不可嵌套)$0,$1,$2… $0 是文件名(包含路径), $$ i 表示第 i 个参数。 -
通过上个表格有 Shell 中$ 表示取值# 表示个数* 和 @ 表示取全部
-
读取数组中某个元素的值
${array[index]}
-
`expr $a + $b` 很难用符号注意要转义一般不用Shell计算。
-
if 语句
a=3 b=4 if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ] then echo ${a}在范围内 fi
-
循环语句
for ((expression; condition; expression)) do 语句1 语句2 done for ((i=1; i<=10; i++)) // 双括号里边可以用c++的写法。 do echo $i done ------------------------------------------------- for var in val1 val2 val3 do 语句1 语句2 ... done for i in a 2 cc do echo $i done
-
用 Shell写递归函数时记得函数内部要用局部变量不然可能出错。有一道练习题。
-
source 命令通常用于保留、更改当前shell中的环境变量。
管道、环境变量与常用命令
-
管道(管道类似于文件重定向可以将前一个命令的
stdout
重定向到下一个命令的stdin
)和Shell结合就有了自动化运维非常的方便。find . -name '*.py' | xargs cat | wc -l
翻译统计当前目录下所有以
.py
结尾的文件将输出结果作为 cat 的参数运行之后统计所有的行数。 -
配置
PATH
环境变量的时候都是向最后写入因为Shell是逐行执行的会覆盖之前的内容。如果想新加一个环境变量,
export PATH=/xxx/xxx:$PATH
, 环境变量是用:
隔开的。 -
ps aux
查看进程kill -9 pid
杀进程可能出现那个进程不应该用 -9 参数杀死而不能杀掉的情况 -
文件权限10个字符第一个表示类型然后每3各一组rreadwwritexexecute。
-
find /path/to/directory/ -name '*.py'
搜索某个文件路径下的所有*.py文件 -
wc -l统计行数
wc -w统计单词数
wc -c统计字节数 -
ag xxx
搜索当前目录下的所有文件检索xxx字符串 -
grep xxx从stdin中读入若干行数据如果某行中包含xxx则输出该行否则忽略该行。 文件检索过滤。
-
xargs将stdin中的数据用空格或回车分割成命令行参数
-
tar压缩文件
tar -zcvf xxx.tar.gz /path/to/file/*压缩把/path/to/file/* 文件压缩成 xxx.tar.gz 文件
tar -zxvf xxx.tar.gz解压缩 -
diff xxx yyy查找文件xxx与yyy的不同点
Git 原理就是SCP
- 工作区仓库目录写代码的地方独立的。
- 暂存区将工作区写入版本库之前的缓冲区独立的。
- 版本库存放所有提交到本地仓库的代码
- 版本结构每个节点表示一个代码版本。
1.先配置git的用户名和邮箱
git config --global user.name xxx
设置全局用户名信息记录在~/.gitconfig文件中
git config --global user.email xxx@xxx.com
设置全局邮箱地址信息记录在~/.gitconfig文件中
2.git init
将当前目录配置成git仓库信息记录在隐藏的.git文件夹中
常用的
git add XX 将当前目录的XX文件添加到暂存区
git add . 将所有待加入暂存区的文件加入暂存区
git status查看仓库状态
git commit -m "给自己看的备注信息"将暂存区的内容提交到当前分支
git log查看当前分支的所有版本
git reflog查看HEAD指针的移动历史包括被回滚的版本
git reset --hard HEAD^ 或 git reset --hard HEAD~将代码库回滚到上一个版本
git reset --hard HEAD^^往上回滚两次以此类推
git reset --hard HEAD~100往上回滚100个版本
git reset --hard 版本号回滚到某一特定版本
首先需要将本地服务器的公钥./ssh/id_ras.pub文件传给云服务器如果本地没有ssh就生成一个。
必须先将本地仓库和远程仓库关联才能传
git remote add origin git@git.acwing.com:xxx/XXX.git将本地仓库关联到远程仓库
git push -u (第一次需要-u以后不需要)将当前分支推送到远程仓库
git clone git@git.acwing.com:xxx/XXX.git将远程仓库XXX下载到当前目录下
git pull 将远程仓库的代码拉到本地。
SSH
-
ssh user@hostname 登录服务器。
user用户名
hostnameIP地址或者域名 -
给要登录的服务器配置别名
~/.ssh/config
(~
和 直接cd
都是进入家[$HOME]目录)Host myserver1
HostName IP地址或域名
User 用户名 -
配置免密登录想免密码登录哪个服务器就将公钥传给哪个服务器即可。将公钥的内容复制到
~/.ssh/authorized_keys
-
ssh 后边也可以执行命令ssh user@hostname command 再配合Shell 实现管理多服务器的运维。
DOCKER 实战地址
docker 包含两个概念一个是镜像一个是容器。镜像就类似ISO文件容器就是ISO文件的一个实例。
docker的特点在于一个服务器可以有多个镜像每个镜像又可以创建多个容器每个容器又可以重新打包成镜像然后迁移到别的机器上。
比如我在acterminal登录配置了4个免密登录其中myserver是我的阿里云服务器django是阿里云服务器下的一个镜像django的端口和阿里云acs不同。这样就从 a->b->c变成了a->c
创建好一个容器之后会给我们root权限一般新建一个工作用户
adduser acs # 创建用户acs
usermod -aG sudo acs # 给用户acs分配sudo权限
然后给新用户acs配置别名和免密登录需要设置一下acs用户的密码再把配置文件通过scp传过去这样工作环境就一致了。
scp .bashrc .vimrc .tmux.conf server_name: # server_name需要换成自己配置的别名
镜像
docker pull ubuntu:20.04
拉取一个镜像docker images
列出本地所有镜像docker image rm ubuntu:20.04
或docker rmi ubun tu:20.04
删除镜像ubuntu:20.04docker [container] commit CONTAINER IMAGE_NAME:TAG
创建某个container的镜像docker save -o ubuntu_20_04.tar ubuntu:20.04
将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中docker load -i ubuntu_20_04.tar
将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来
容器
docker [container] create -it ubuntu:20.04
利用镜像ubuntu:20.04创建一个容器。docker ps -a
查看本地的所有容器docker [container] start CONTAINER
启动容器docker [container] stop CONTAINER
停止容器docker [container] restart CONTAINER
重启容器docker [contaienr] run -itd ubuntu:20.04
创建并启动一个容器docker [container] attach CONTAINER
进入容器
先按Ctrl-p再按Ctrl-q可以挂起容器docker [container] exec CONTAINER COMMAND
在容器中执行命令