Linux基础


Linux

用于学习记录
CentOS 7 版
持续更新


C++编译运行

g++ test.cpp -o test
./test

Python解析运行

python test.py

S1 概述

1.1 介绍

是一套免费使用和自由传播的类 Unix 操作系统,有众多以其为内核的发行版,例如Ubuntu、CentOS等。

1.2 应用场景

  • linux下开发项目
  • linux运维工程师
  • linux嵌入式工程师
  • 服务器领域、嵌入式领域(免费、稳定、高效、小)

1.3 Linux 分区介绍

  1. Boot引导分区
  2. Swap交换分区
  3. Root根分区

1.4 虚拟机网络连接的3种方式

1.4.1 桥接模式

VMnet0

桥接模式就是将主机网卡与虚拟的网卡利用虚拟网桥进行通信。类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。
ip与外部系统配置在同一网段,虚拟系统可以和外部系统相互通讯,但容易造成ip冲突(255数量限制)。

桥接模式
桥接模式

1.4.2 NAT模式

VMnet8

网络地址转换模式,可以配置跟外部系统不同的网段,解决ip冲突问题,此时在本机系统生成虚拟网卡,用来跟外部系统通讯。

NAT模式
NAT模式
可见NAT模式下主机更像是虚拟机们的"路由器",通过VMnet8虚拟网卡为虚拟机分发地址。所以虚拟机和主机不再同一网段下,可以理解为主机是虚拟机的"上级",这也就是为什么桥接模式没有VMnet0这个虚拟网卡,因为桥接模式下的虚拟机和主机是"平等"的,共用同一个路由器

1.4.3 主机模式

VMnet1

仅主机模式可有看成是NAT模式去除了虚拟NAT设备,然后使用VMware Network Adapter VMnet1虚拟网卡连接VMnet1虚拟交换机来与虚拟机通信的,Host-Only模式将虚拟机与外网隔开,使得虚拟机成为一个独立的系统,只与主机相互通讯。

img

S2 Vi/Vim

2.1 常用的3种模式

img

2.1.1 正常模式

vim 打开的文件就直接进入正常模式,通过方向键来移动光标

2.1.2 插入模式

正常模式下,输入i即可进入插入模式

2.1.3 命令行模式

先按esc退出插入模式,输入:即可进入命令模式,再输入wq即可。wq代表写入并退出、q代表退出、q!代表强制退出保存。

2.2 常用快捷键

详细快捷键

2.2.1 正常模式

  1. yy:复制当前行
  2. dd:删除当前行
  3. p:粘贴
  4. G:最末行
  5. gg:最初行
  6. u:撤销上一动作
  7. shift+g:快速定位行号(前面先输入具体行号)

2.2.2 命令行模式

  1. 单词:查找输入的单词
  2. n:查找下一个
  3. set nu:显示行号
  4. set nonu:取消显示行号
  5. nu:当前行号

S3 命令语句

指令快查--菜鸟教程

3.1 关机、重启、同步

3.1.1 关机

  1. shutdown:默认1min后关机
  2. shutdown -h 2:2min后关机
  3. shutdown -h now:立刻关机
  4. halt:同上

3.1.2 重启

  1. shutdown -r now:立刻重启
  2. reboot:同上

3.1.3 同步

  1. sync:将内存数据同步到硬盘

3.2 用户和组操作

用户和组相关文件夹

3.2.1 用户

  1. su - 用户名:切换账号
  2. logout:退出当前账号(图形界面无效)
  3. useradd 用户名:添加账户(默认在 /home 下新建用户文件夹)
  4. useradd -d /home/文件夹名 用户名:在指定文件夹下添加用户
  5. passwd 用户名:给指定用户添加密码
  6. userdel 用户名:删除用户,但保留home下目录
  7. userdel -r 用户名:湮灭用户
  8. id 用户名:查询用户信息
  9. whoami:显示最开始登录的用户信息

3.2.2 组

  1. groupadd 组名:新增组
  2. groupdel 组名:删除组
  3. useradd -g 组名 用户名:在特定的组名添加指定用户(不指定组的话自动个人一组,组名与用户名相同)
  4. usermod -g 组名 用户名:修改用户的组

3.3 运行级别

运行级别

  1. init 级别数:切换级别模式
  2. systemctl get-default:查看默认运行级别
  3. systemctl set-default XXX.target:设置默认级别为XXX

3.4 文件目录指令

  1. pwd:显示当前绝对路径

  2. ls 选项 目标:显示目标内容
    选项:-a:显示隐藏;-l:按行显示

  3. cd:切换目录指令
    cd ~:返回当前用户的home目录(root用户返回root目录)
    cd ..:返回上一级

  4. mkdir 选项 目录名:创建单级目录
    选项:-p:创建多级目录

  5. rmdir 目录名:删除空目录

  6. rm -rf 目标:强制递归删除目标(-r:递归、f:强制)

  7. cp 源 目标:复制
    cp -r 源 目标:整体复制

  8. mv 源 目标:重命名 & 移动

  9. cat 文件:不可修改地查看文件内容
    cat -n 文件:显示行号查看

  10. touch:修改文件或目录的时间属性,若文件不存在则新建文件

  11. echo:输出内容到Console

  12. ln -s 源 软连接名:软连接,类似快捷方式

  13. date:时间

  14. cal:日历

  15. find 目标 选项
    查询选项

  16. locate:定位文件路径(首次使用前要updatedb

  17. grep:过滤查找
    grep指令

  18. gzip:压缩成.gz

  19. gunzip:解压.gz文件

  20. zip:压缩成.zip

  21. unzip:解压.zip

  22. tar:压缩、解压.tar.gz
    tar指令

  23. rpm:(redhat package manager)软件包操作

  24. yum:( Yellow dog Updater, Modified)一个前端软件包管理器,基于rpm可以从指定服务器自动下载rpm包,并处理依赖关系,Ubuntu是apt(Advanced Packaging Tool)

3.5 权限管理

rwx权限

r=4 ; w=2 ; x=1 (4\6\7)

chmod:修改权限

u:user ;
g:group ;
o:other ;
a:all

3.6 定时

crontab:定时触发,周期执行
at:一次性定时触发


S4 磁盘与分区

4.1 原理介绍

Linux采用了一种叫“挂载”(mount)的方法,将磁盘的分区挂载到文件系统的目录上,在系统中访问这个目录就相当于访问这个分区了。

4.2 实现过程

  • 重启识别到硬盘后,进行硬盘分区
  • 分区格式化
  • 分区挂载

4.3 指令

  1. lsblk--(list block):查看所有设备挂载情况
  2. lsblk -f
  3. fdisk 磁盘硬件目录:增加磁盘
  4. mkfs:分区格式化
  5. mount:挂载
  6. umount:卸载

S5 网络

5.1 网络配置

配置IP:

1.DHCP方法: 自动获取,但是ip不固定,不能作为服务器
2.设置页面配置
3.配置文件静态修改:vi etc/sysconfig/network-scripts/ifcfg-ens33


S6 Shell编程

6.1 什么是shell,为什么学

Shell 是一个命令行解释器,它为用户提供了一个向Linux kernel发送请求的界面系统级程序,种类很多。
通常说的Shell是指“Shell脚本”(shell script),这跟Shell不是一个概念,是一种为Shell编写的脚本程序
img

6.2 脚本语法格式

  • #!/bin/bash开头,bash是shell的一种,国内一般都是用bash

  • #!为约定标记,告诉系统这个脚本用什么解释器执行,用那周shell

  • #为单行注释

  • :<<EOF
      注释内容...
      注释内容...
      注释内容...
      EOF
    

    为多行注释,其中EOF可以用别的符号代替,但是结尾必须于其一致

6.3 脚本执行(需要x权限)

  1. 相对路径: ./脚本名.sh
  2. 绝对路径:绝对路径/脚本名.sh
  3. sh执行:(可以没有x权限)sh 脚本名.sh

6.4 Shell变量

分为系统变量用户自定义变量

6.4.1 系统变量

$HOME, $PWD, $SHELL, $USER

6.4.2 用户自定义变量

  • 定义变量:变量=值,注意不能有空格
  • 撤销变量:unset 变量
  • 静态变量:readonly 变量=值,此变量不可撤销
  • 使用变量:$变量&${变量},注意$符号,{}为好习惯

6.4.3 字符串

  • 单引号

    1. 变量无效
    2. 不可出现转义字符
  • 拼接字符串

    $str1 $str2
    
  • 截取字符串
    截取index为1-4的

    ${str:1:4}             
    
  • 字符串长度

    # 二者等价
    ${#string}
    ${#string[0]}
    

6.4.4 数组

arr=(v1 v2 v3)

获取数组中所有元素

${arr[@]}
${arr[*]}

${#arr[@]}  #获取数组长度

6.5 运算符

原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

$((运算表达式))
$[运算表达式]
`expr 运算表达式`       #注意是`

6.5.1 算数运算符

例如a=10,b=20

运算符 说明 举例
+ 加法 `expr $a + $b` 结果为 30。
- 减法 `expr $a - $b` 结果为 -10。
* 乘法 `expr $a \* $b` 结果为  200。
/ 除法 `expr $b / $a` 结果为 2。
% 取余 `expr $b % $a` 结果为 0。
= 赋值 a=$b 把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。注意格式
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

6.5.2 关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

如果使用 ((...)) 作为判断语句,大于和小于可以直接使用 ><

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

6.5.3 文件测试运算符

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

其他检查符:

  • -S: 判断某文件是否 socket。
  • -L: 检测文件是否存在并且是一个符号链接。

6.6 传递参数

$0表示执行的文件名(包括文件路径)
$n表示脚本执行的第n个参数

6.7 流程控制

6.7.1 if fi

if condition
then
    command1 
    command2
    ...
    commandN 
fi

#写在一行
if condition ; then command1 ; fi

6.7.2 if else fi

if condition
then
    command1 
    command2
    ...
    commandN
else
    command
fi

6.7.3 if elif else fi

if condition1
then
    command1
elif condition2 
then 
    command2
else
    commandN
fi

6.7.4 for done

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

6.7.5 while done

while condition
do
    command
done

6.7.6 until done

直至条件为 true 时停止。

until condition
do
    command
done

6.7.7 case esac

case 值 in
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
*)
    command1
    ;; #类似default
esac

6.8 函数

1、可以带function fun() 定义,也可以直接fun() 定义,不带任何参数。
2、参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值。 return后跟数值n(0-255


S7 守护进程

在使用net6开发Linux程序时,除了AspNet Core项目外,如果是开发的一个不带Web界面,只是后台运行的控制台程序的话,默认发布到Linux系统时,如果是以start-stop-daemon方式(守护进行方式)启动运行的话,默认是不行的,程序会自动终止,因为在Linux下dotnet程序运行是以会话的方式。
————————————————
版权声明:本文为CSDN博主「CodingPioneer」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zlbdmm/article/details/125188914

利用supervisor创建守护进程

posted @ 2022-09-30 13:02  LASER_06  阅读(33)  评论(0)    收藏  举报