LINUX学习记录

news/2024/10/31 0:18:40/

回顾系列:两天的时间(2023.2.24-2023.2.25)重新学了遍Linux基础课,收获非常多,以前只会一些简单的Linux命令,对shell,git,管道,复杂Linux命令都不熟悉,学完之后终于是入门Linux了。


Tmux 和 Vim


  1. Tmux

    1. 前缀符号(默认是 ctrl + b, y总修改了配置文件改成了 ctrl + a) + a (attach) 可以重新打开之前的 tmux 窗口。前缀符 + d 可以挂起 tmux 窗口。

    2. 在 Acterminal中向外复制时,需要退出tmux进入bash,然后选中,ctrl + insert + fn(本机) 复制,shift + insert + fn(本机) 粘贴 (或是 ctrl + v)。

    3. 前缀符 + s 可以查看所有的session。

    4. bash 的配置文件是 .bashrc

    5. Vim

    6. Vim的配置文件是家目录下的 .vimrc

      1. cd 命令可以直接进入环境变量 $HOME 的目录,也就是家目录。
      2. echo $HOME 输出HOME的值
    7. 复制粘贴,需要 前缀符 + [ ,然后选中,前缀符 + ] 粘贴。

    8. gg (光标移动到第一行) , G (光标移动到最后一行) 。 gg=G 可以格式化代码 (后者命令模式下输入:set paste 设置粘贴模式,取消代码的缩进)

    9. v (选中文本),d(删除选中的文本),y(复制选中的文本)。dd(删除当前行),yy(复制当前行)。ggvGd 删除全文,ggvGy复制全部文本。

Shell编程


  1. ipython3 中使用! 自动将这一行解释为 shell脚本。

  2. 字符串可以用单引号,双引号,或者不引。

    1. 单引号与双引号的区别:

      单引号中的内容会原样输出,不会执行、不会取变量;
      双引号中的内容可以执行、可以取变量;

      name=yxc  # 不用引号
      echo 'hello, $name \"hh\"'  # 单引号字符串,输出 hello, $name \"hh\"
      echo "hello, $name \"hh\""  # 双引号字符串,输出 hello, yxc "hh"
      
  3. 参数说明
    $#代表文件传入参数个数。
    $*所有参数,使用空格隔开的字符串
    $@每个参数,各自用双引号括起来的字符串
    $$脚本当前运行的PID
    $?上一条命令的 exit code , 0表示正常退出,非0为异常
    $(command)返回 command 命令的stdout (可嵌套)
    `command`返回 command 命令的stdout (不可嵌套)
    $0,$1,$2…$0 是文件名(包含路径), $$ i 表示第 i 个参数。
  4. 通过上个表格,有 Shell 中,$ 表示取值,# 表示个数,* 和 @ 表示取全部

  5. 读取数组中某个元素的值 ${array[index]}

  6. `expr $a + $b` 很难用,符号注意要转义,一般不用Shell计算。

  7. if 语句

    a=3
    b=4if [ "$a" -lt "$b" ] && [ "$a" -gt 2 ]
    thenecho ${a}在范围内
    fi
    
  8. 循环语句

    for ((expression; condition; expression))
    do语句1语句2
    donefor ((i=1; i<=10; i++)) // 双括号里边可以用c++的写法。
    doecho $i
    done
    -------------------------------------------------
    for var in val1 val2 val3
    do语句1语句2...
    donefor i in a 2 cc
    doecho $i
    done
    
  9. 用 Shell写递归函数时,记得函数内部要用局部变量,不然可能出错。有一道练习题。

  10. source 命令通常用于保留、更改当前shell中的环境变量。

管道、环境变量与常用命令


  1. 管道(管道类似于文件重定向,可以将前一个命令的stdout重定向到下一个命令的stdin)和Shell结合就有了自动化运维,非常的方便。

    find . -name '*.py' | xargs cat | wc -l

    翻译:统计当前目录下所有以 .py 结尾的文件,将输出结果作为 cat 的参数,运行之后,统计所有的行数。

  2. 配置 PATH 环境变量的时候,都是向最后写入,因为Shell是逐行执行的,会覆盖之前的内容。

    如果想新加一个环境变量, export PATH=/xxx/xxx:$PATH , 环境变量是用 : 隔开的。

  3. ps aux 查看进程,kill -9 pid 杀进程,(可能出现那个进程不应该用 -9 参数杀死,而不能杀掉的情况)

  4. 文件权限(10个字符)第一个表示类型,然后每3各一组,r(read,w(write,x(execute。

  5. find /path/to/directory/ -name '*.py' 搜索某个文件路径下的所有*.py文件

  6. wc -l:统计行数
    wc -w:统计单词数
    wc -c:统计字节数

  7. ag xxx:搜索当前目录下的所有文件,检索xxx字符串
  8. grep xxx:从stdin中读入若干行数据,如果某行中包含xxx,则输出该行;否则忽略该行。 文件检索过滤。
  9. xargs:将stdin中的数据用空格或回车分割成命令行参数
  10. tar:压缩文件
    tar -zcvf xxx.tar.gz /path/to/file/*:压缩(把/path/to/file/* 文件压缩成 xxx.tar.gz 文件)
    tar -zxvf xxx.tar.gz:解压缩

  11. diff xxx yyy:查找文件xxx与yyy的不同点

Git (原理就是SCP)


  1. 工作区:仓库目录,写代码的地方,独立的。
  2. 暂存区:将工作区写入版本库之前的缓冲区,独立的。
  3. 版本库:存放所有提交到本地仓库的代码
  4. 版本结构:每个节点表示一个代码版本。

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


  1. ssh user@hostname 登录服务器。

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

  2. 给要登录的服务器配置别名:~/.ssh/config (~ 和 直接cd 都是进入家[$HOME]目录)

    Host myserver1
    HostName IP地址或域名
    User 用户名

  3. 配置免密登录,想免密码登录哪个服务器,就将公钥传给哪个服务器即可。将公钥的内容复制到~/.ssh/authorized_keys

  4. 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需要换成自己配置的别名

镜像:

  1. docker pull ubuntu:20.04:拉取一个镜像
  2. docker images:列出本地所有镜像
  3. docker image rm ubuntu:20.04docker rmi ubun tu:20.04:删除镜像ubuntu:20.04
  4. docker [container] commit CONTAINER IMAGE_NAME:TAG:创建某个container的镜像
  5. docker save -o ubuntu_20_04.tar ubuntu:20.04:将镜像ubuntu:20.04导出到本地文件ubuntu_20_04.tar中
  6. docker load -i ubuntu_20_04.tar:将镜像ubuntu:20.04从本地文件ubuntu_20_04.tar中加载出来

容器:

  1. docker [container] create -it ubuntu:20.04:利用镜像ubuntu:20.04创建一个容器。
  2. docker ps -a:查看本地的所有容器
  3. docker [container] start CONTAINER:启动容器
  4. docker [container] stop CONTAINER:停止容器
  5. docker [container] restart CONTAINER:重启容器
  6. docker [contaienr] run -itd ubuntu:20.04:创建并启动一个容器
  7. docker [container] attach CONTAINER:进入容器
    先按Ctrl-p,再按Ctrl-q可以挂起容器
  8. docker [container] exec CONTAINER COMMAND:在容器中执行命令

http://www.ppmy.cn/news/28215.html

相关文章

命令执行漏洞 | iwebsec

文章目录1 靶场环境2 命令执行漏洞介绍3 靶场练习01-命令执行漏洞02-命令执行漏洞空格绕过03-命令执行漏洞关键命令绕过04-命令执行漏洞通配符绕过05-命令执行漏洞base64编码绕过4 命令执行漏洞危害01-读写系统文件02-执行系统命令03-种植恶意木马04-反弹shellpython反弹shellp…

[11]云计算|简答题|案例分析|云交付|云部署|负载均衡器|时间戳

升级学校云系统我们学校要根据目前学生互联网在线学习、教师教学资源电子化、教学评价过程化精细化的需求&#xff0c;计划升级为云教学系统。请同学们根据学校发展实际考虑云交付模型包含哪些&#xff1f;云部署采用什么模型最合适&#xff1f;请具体说明。9月3日买电脑还是租…

【Linux】调试工具gdb的使用

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;前言在前文&#xff0c;我们已经讲解了vim工具以及gcc/g的使用&#xff0c;我们可以进行编写代码以及编译代码了&#xff0c;但是还没有学习如何在Linu…

【Servlet篇】Response对象详细解读

文章目录Response 继承体系Response 设置响应数据设置响应行数据设置响应头数据设置响应体数据Response 重定向Response 响应字符数据Response 响应字节数据Response 继承体系 前面说到&#xff0c;我们使用 Request 对象来获取请求数据&#xff0c;使用 Response 对象来设置响…

HDMI协议介绍(四)--Video

目录 视频格式 RGB444 YUV444 YUV422 YUV420 Color Depth Video控制信号 Pixel Repetition HDMI支持多种视频格式和分辨率。以hdmi1.4和2.0协议来说&#xff0c;视频格式支持RGB444、YUV444、YUV422和YUV420&#xff0c;其中RGB444和YUV444一般都是要求支持的。 视频格式…

tun驱动之open

tun驱动对应的设备文件是&#xff1a;/dev/net/tun&#xff0c;其详细信息如下&#xff1a; crw-rw-rw- 1 root root 10, 200 2月 26 08:05 tun 主次设备号的定义如下&#xff1a; #define MISC_MAJOR 10 #define TUN_MINOR 200 由于tun驱动属于misc设备驱动&#xff0c;因此用…

Java 主流日志工具库

日志系统 java.util.logging (JUL) JDK1.4 开始&#xff0c;通过 java.util.logging 提供日志功能。虽然是官方自带的log lib&#xff0c;JUL的使用确不广泛。 JUL从JDK1.4 才开始加入(2002年)&#xff0c;当时各种第三方log lib已经被广泛使用了JUL早期存在性能问题&#x…

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…