当前位置: 首页 > news >正文

linux -shell原理与运用

1---shell的工作方式和功能

shell的工作方式:

shell本身也是一个应用程序,存储在/bin 或者是/user/bin中

登录的时候 会根据/etc/passwd文件载入shell默认执行

shell启动后,就会显示命令提示符,等待用户输入命令

命令的逻辑:

首先会判断时内部命令还是外部命令,如果是内部命令就会由shell直接去执行,如果时外部命令就会创建子进程,然后调用磁盘上的程序执行

shell的功能:

环境控制:允许用户定制环境来满足对应的需要

后台处理:再前台处理事务的同时,后台执行程序

脚本执行环境:编程完成复杂任务再shell中执行程序

命令执行:解释所有输入的字符,分析命令,处理通配符并重定向符号

文件名替换:先进行文件名替换后,在执行程序

输入输出重定向:shell完成输入输出的重定向

管道:符号|:将程序连接起来一起完成复杂的任务

echo信息输出

常用的选项:

-n 禁止换行

-e 解释\ 引导的转义序列,转义序列需要””包裹

常见的转义序列:

\a:警铃

\b:回退

\n:回车

\r:回车,但是不换行

\c:禁止换行

\t:水平制表符

\v:垂直制表符

如果需要按照原样输出,就需要使用””包裹内容

元字符:

在shell中有特殊含义

? * [] < > | $ & `

\ “ ‘:这三个可以用来消除特殊含义,当然这3个也是元字符

2---:shell的变量

环境变量:用于配置和定义系统或用户环境的变量

         在shell启动的时候被船舰并赋予初始值  ,后续用户也可以定义新的环境变量or修改环境变量

局部变量:用户根据需求自己创建并且复制的变量,可以定义,修改,删除他们

set:

查看当前环境的shell变量

赋值方法:变量名=变量值

通常局部变量用小写,环境变量用大写字母

(默认类型时字符串)

修改和赋值一样

访问:

$ 变量名

可以使用””包裹来实现变量和常量一起打印

删除变量:

unset 变量名

变量的使用

$all=-ali

$ls $all 就是ls -ali

重要的环境变量:

作用:影响shell的行为和用户的工作环境

赋值:启动的时候根据配置文件赋值

值的修改:

一个是临时修改,作用于当前的会话

一个是永久的修改,在全局or个人的配置文件中去修改

重要的一些环境变量

在PATH中加入

$PATH=$PATH:/usr/mybin

如果修改了$HOME 就会导致pwd的路径发生变化

PS1=’提示符’

PS1的常见转义序列:

PS2:区别其他行和第一行的区别:

默认>

SHELL:shell的完整路径

PWD:当前工作目录的绝对路径

3--:输入输出重定向:


一般从标准输入设备获得输入,

将输出的信息输出到标准输出设备上

将错误信息输出到标准出错设备上

shell可以将这里的所有信息,重定向到指定的位置

1:输入重定向

命令:<  和  <<

命令 < 文件

前提条件:命令需要输入数据,并且能够从标准输入设备读入数据

比如(**可以,而**则不可以)

将文件作为输入,执行命令

cat < xxxx

cat xxxxx

虽然他们的展示内容一样,但是他们的原理不一样

cat < test.txt:是把文件内容重定向给 cat 命令的标准输入。

cat test.txt:是让 cat 命令直接读取文件

命令 << 分界符

输入内容

分界符

将两个分界符中间的内容作为输入

2:输出重定向

命令:>  和  >>

命令格式 : 命令 > />> 文件

他们的区别:第一个是覆盖重定向,第二个是追加重定向

如果文件不存在,他们都会创建一个文件,然后将内容输出

3:标准错误重定向

2>

命令格式: 命令 2>  文件

4:重定向的组合使用

命令格式: 命令 < 输入文件 > 输出文件

         把输入文件作为输入,然后把结果放到输出文件

          命令 < 输入文件 > 输出文件 2> 错误信息文件

         同上,只是把错误信息保存到错误信息文件

比如cat命令

第一个abc是用户输入,第二个abc是cat回显

--1:把filea的内容给cat,然后把cat内容输出到fileb

--2:把filea,fileb,filec的内容给cat,然后把cat内容输出到fileall

--3:向文件filea中追加内容(需要ctrl + D 结束)

--4:把下一次END之前的所有内容输出到filea

5:连接输入输出

元字符 | : 把一个命令的输出传递给下一个作为输入

命令格式: 命令1|命令2

管道:命令行中实现进程间通信的机制

1,创建管道,创建一个缓冲区,用于存储第一个命令的输出

2,命令的执行,命令1执行后将其的输出写入管道

3,数据的传递,命令2接受管道的数据作为输入

4,关闭管道,命令1执行完后,关闭管道的写入端,命令2读取完毕后关闭读取端

命令流水线:

多个命令组合,

--:统计当前ls目录的文件个数

--:``引起来的先执行,将当前用户的数量作为输入,把echo的内容输出到loginUsers中

--:查看21-50行

-6:复制输出

tee

命令格式: tee [选项] [文件名]

-a: 表示使用append,将数据追加到指定文件,而不是覆盖

--:把ls结果同时输出(覆盖)到文件Isoutput 和 屏幕上

--:把ps结果同时输出(覆盖)到文件ps1 ,ps2 和 屏幕上

--:把echo结果同时输出(追加)到文件status 和 屏幕上

4--:SHELL的其他的元字符:

` :用于命令执行的元字符

先执行被`包裹的命令,然后替换到原来的命令中

echo - e (启动反斜杠转义)结合 \ 表示没有完成输入

第二行的第一个>是提示符,等待继续输入,第二个>是输出重定向,把echo的内容输出到文件LIST

; :在一个命令行中分割多个命令,shell从左向右执行

命令格式:命令1;命令2;.....

将ls输出到filelist,把date输出到datetime,最后显示当前的路径

() : 命令编组,把几个命令编组执行

可以把一组命令的结果进行重定向

&:后台运行

对应的前台执行会封锁键盘,但是后台就不会

--:把data在后台排序,然后重定向到sorted

输出的是作业号和进程标识符

--:多个命令在后天执行,输出的是作业号和进程标识符

从左到右分配作业号吗?

我们可以通过fg %作业号,把后台作业拉到前台

我们也可以通过kill,对进程进行操作

5--:进程相关的命令

sleep:

执行该命令的进程延迟执行

命令格式 sleep 数字 [s/m/h/d]

ps:

显示进程的详细信息

命令格式 ps [选项]

PID:进程ID

TTY:控制进程的终端号

TIME:进程已经运行的时间(s)

CMD:命令名

选项:

-e : 显示系统的所有进程信息

-f : 显示信息的完整列表 (包括完整的命令行)

kill:

终止进程,发送信号给指定的进程,进行进程间的通信

命令格式: kill [- signal] PID

这里的signal可以通过 kill -l 来查看

比如:

终止信号:

-SIGTERM 和 -15等效 温和的正常方式关闭进程 ,也是kill的默认方式

-9 强制关闭进程

用户只能终止自己的进程,管理员才能终止任何用户的进程

6--:SHELL的配置文件:

启动和使用过程中需要通过执行配置文件来对用户的环境进行定制

这个配置文件中包含了各种命令和设置,用于定义环境变量,别名,函数等等

用户选用的shell的不同,配置文件也不同,下面是bash shell的配置

常用的配置文件

系统级别的配置文件

/etc/profile: 设置系统整体环境和自启动重新,登录的时候执行

/etc/bashrc: 设置系统整体函数与缩写,打开bash的时候执行

用户级别配置文件

~/.bash_profile 设置登录用户的bash环境 执行~/.bashrc

~/.bashrc      设置当前用户的bash环境

~/.bash_logout  设置用户退出bash时执行的配置

登录shell和非登录shell

登录shell会先/etc/profile 然后 ~/.bash_profile,~/.bashrc ,/etc/bashrc.

登出执行~/.bash_logout

非登录shell会执行~/.bashrc 然后 /etc/bashrc

export 内部命令,将局部变量提升为全局变量

语法格式:export 变量名=值

          export 变量名

局部变量只能在定义其的shell中使用,子shell不可见不可用

全局变量当前shell和子shell都可见可用

alias:内部命令,为常用命令定义一个别名

设置别名

alias 别名 = 命令 设置别名

查看别名

alias 显示定义了的别名

取消别名

unalias 别名

7--:linux进程管理:

进程的概念:

进程是程序在操作系统中的动态执行实例

它是一个程序在其执行过程中所占用的资源的集合

作用:

操作系统进行资源分配和调度的基本单位

管理方式:

在linux系统中,进程通过内核来创建和管理进程

进程的创建和管理:

创建:
fork() or exec()来创建

资源的分配:

内核为新进程分配内存和CPU时间片

task_struct 结构体:

相当于进程控制块(PCB),里面包含了PID,状态,资源指针,调度信息,安全上下文等等

管理方式:通过红黑树or链表组织,由系统统一管理

进程生命周期的内核的操作:
1:进程的创建:

分配task_struct;
内核为新的进程分配task_struct 并且初始化,复制and共享父进程的资源,确保进程的独立运行

加入进程调度队列:

将心的task_struct 插入到进程调度队列中

分配PID:
内核为新进程分配唯一的PID,采用位图or循环分配机制管理PID

2:进程调度

遍历可运行队列,调度器遍历可运行队列的task_struct

选择目标进程:根据调度策略选择合适的进程

切换CPU上下文:通过context_switch()来切换上下文

3:进程终止
设置退出状态:调用exit(),将状态设置为EXIT_ZOMBIE,但是资源还米有回收

释放资源:父进程调用wait()之后,释放task_struct和对应的资源

解析命令date:

fork()命令:

shell调用fork()生成了子进程,子进程继承父进程的上下文后,内核为其分配PID,并将task_struct加入到任务队列

exec()命令:
子进程调用execve(“/bin/date”)加载date程序,父进程调用wait()进入阻塞状态

运行和退出:

子进程调用date,输出日期和时间,当命令执行完毕后,子进程调用exit(),父进程通过wait()获取子进程的退出状态并释放资源

http://www.xdnf.cn/news/312751.html

相关文章:

  • 人工智能任务24-AI学习中的模型训练中稀疏化参数与稀疏损失函数,以及实战项目应用
  • TruPlasma Match匹配器软件通快霍廷格TruPlasma Match100613 (G2)1024/13 (G2) RF Matchbox
  • 功率因数校正(PFC):原理、调节及关键波形分析
  • 大学之大:伯明翰大学2025.5.6
  • 一周学会Pandas2 Python数据处理与分析-Pandas2数据类型转换操作
  • langchain4j接入ollama本地大模型
  • 深入理解分布式锁——以Redis为例
  • APP自动化测试(一)
  • 《让内容“活”起来:Flutter社交应用瀑布流布局的破界实践》
  • 信息论06:信息增益——量化不确定性的艺术与科学
  • 深度学习:图神经网络GNN、GCN及其在推荐系统的应用
  • MUX-vlan
  • 设备与驱动:I/O设备模型
  • Selenium模拟人类行为,操作网页的方法(全)
  • 简单面试提问
  • LIO-Livox
  • 攻防世界 反应釜开关控制
  • 室内烟雾明火检测数据集VOC+YOLO格式2469张2类别
  • 【JEECG】BasicTable单元格编辑,插槽添加下拉组件样式错位
  • 模板模式 VS 建造者模式
  • SQL报错注入
  • AI-02a5a2.神经网络的学习
  • OrcaFex11.5
  • 颠覆监测体验!WM102无线温湿度记录仪开启智能物联新时代
  • 生成式人工智能技术在高校心理健康服务中的应用; 希尔的三阶段助人理论:探索、领悟和行动
  • AI预测3D新模型百十个定位预测+胆码预测+去和尾2025年5月6日第70弹
  • 传输层UDP协议
  • 开发搭载OneNet平台的物联网数据收发APP的设计与实现
  • Vue3中的package.json依赖是否有更新
  • 探索编程世界:从“爱编程的小黄鸭”B站账号启航