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

《深度剖析Linux 系统 Shell 核心用法与原理_666》

1. 管道符的用法

查找当前目录下所有txt文件并统计行数

# 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l

在/etc目录下查找包含"network"的文件并统计数量

# 使用find命令查找文件,并通过grep查找包含特定字符串的文件,最后统计文件数量 find /etc -type f -exec grep -l "network" {} \; | wc -l

2. 更改Ubuntu自带的软件源

备份原软件源文件

# 使用sudo提升权限,复制文件到备份位置 sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup

使用vim打开软件源文件
sudo提升权限,使用vim编辑器打开软件源文件 sudo vim /etc/apt/sources.list
替换为清华源地址

# 修改文件内容,替换为清华源地址 # 清华源地址示例:deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse

更新软件源

# 更新软件包列表以应用新的源配置 sudo apt-get update

3. 在线下载软件的指令

下载并安装

# 安装指定软件包 sudo apt-get install software-name

下载安装包

# 下载指定软件包但不安装 sudo apt-get download software-name

卸载(完全卸载)

# 卸载软件包及其配置文件 sudo apt-get remove software-name --purge

4. 软件包的命名规范

示例解释

sl_5.02-1_amd64.deb # sl: 软件名 # 5.02-1: 版本号 # amd64: 架构 # deb: 扩展名,表示Debian/Ubuntu格式的软件包

5. 离线安装(dpkg)

# 使用dpkg安装本地deb包 sudo dpkg -i package-name.deb

# 卸载软件包(保留配置文件) sudo dpkg -r package-name # 卸载软件包及其配置文件 sudo dpkg -P package-name

6. 通配符

匹配一个字符

# ?匹配单个字符,如a?.txt匹配a1.txt、a2.txt等 ls a?.txt

匹配一个或多个字符

# *匹配任意数量的字符,如*.txt匹配所有扩展名为txt的文件 ls *.txt

匹配指定范围字符

# []匹配指定范围内的字符,如[a-z].txt匹配以小写字母开头的txt文件 ls [a-z].txt

7. find以文件名为条件进行查找

# 在指定路径下查找文件名为file-name的文件 find /path -name "file-name"

8. a.out的文件类型(file)

# 使用file命令查看文件类型 file a.out

9. grep

# 在文件中查找包含特定字符串的行 grep "string" file-name

10. cut

# 使用cut命令按分隔符提取字段 cut -d delimiter -f field file-name

11. 软链接文件和硬链接文件的创建、注意事项

软链接

# 创建软链接,源文件可以不在同一文件系统 ln -s source-file target-link # 注意事项:软链接指向的是源文件的路径,如果源文件移动或删除,链接将失效

硬链接

# 创建硬链接,源文件必须在同一文件系统 ln source-file target-link # 注意事项:硬链接指向的是源文件的inode,即使源文件删除,硬链接仍然有效

12. 关机和重启的指令

关机

# 立即关机 sudo shutdown -h now # 或者使用poweroff命令 sudo poweroff

重启

# 立即重启 sudo shutdown -r now # 或者使用reboot命令 sudo reboot

13. 权限的操作chmod(字母和八进制)、chown

修改所属组和其他用户权限
字母表示法

# 给所属组添加写权限,给其他用户添加读权限 chmod g+w,o+r 1.c

八进制表示法

# 设置文件权限为664 (rw-rw-r--) chmod 664 1.c

修改文件所有者和所属组

# 修改文件所有者和所属组 sudo chown user:group file-name

14. 磁盘的操作:从连接到虚拟机到挂载的全过程

查看磁盘设备

# 列出所有磁盘设备 sudo fdisk -l

对磁盘进行分区

# 使用fdisk工具对磁盘进行分区 sudo fdisk /dev/sdb

格式化分区

# 将分区格式化为ext4文件系统 sudo mkfs.ext4 /dev/sdb1

创建挂载点

# 创建挂载点目录 sudo mkdir /mnt/newdisk

挂载磁盘

# 将分区挂载到指定目录 sudo mount /dev/sdb1 /mnt/newdisk

15. tar指令(打包并压缩、拆包并解压缩)

打包并压缩
tar.gz格式

# 打包并压缩为tar.gz格式 tar -zcvf archive.tar.gz file1 file2 directory1

tar.bz2格式

# 打包并压缩为tar.bz2格式 tar -jcvf archive.tar.bz2 file1 file2 directory1

拆包并解压缩
tar.gz格式

# 解压tar.gz文件 tar -zxvf archive.tar.gz

tar.bz2格式

# 解压tar.bz2文件 tar -jxvf archive.tar.bz2

16. 压缩工具的对比

gzip vs bzip2 vs xz
  • gzip:速度快,压缩比适中。
  • bzip2:压缩比更高,速度较慢。
  • xz:压缩比最高,速度最慢。

17. 用户操作

修改sudoers文件

# 使用visudo安全地编辑sudoers文件 sudo visudo # 添加或修改用户权限,例如允许user执行某些命令而无需密码 user ALL=(ALL) NOPASSWD:ALL

修改用户信息(修改用户的家目录)

# 修改用户的家目录 sudo usermod -d /new/home/directory username

18. 内核的五大功能

  • 进程管理:负责创建、调度和销毁进程。
  • 内存管理:管理物理内存和虚拟内存。
  • 文件系统管理:提供文件系统的接口。
  • 设备管理:管理硬件设备。
  • 网络管理:处理网络通信。

19. C语言的外部参数

int argc, const char *argv[]
#include <stdio.h>int main(int argc, const char *argv[]) 
{// argc表示命令行参数的数量,argv是参数数组printf("Number of arguments: %d\n", argc);for (int i = 0; i < argc; i++) {printf("Argument %d: %s\n", i, argv[i]);}return 0;
}
示例解释
// argv[0]是程序名称,argv[1]及之后是命令行参数
printf("%d\t%c\n", *(argv[1]+2)-*argv[2], *(argv[0]+2));
// *(argv[1]+2)表示argv[1]的第三个字符,*argv[2]表示argv[2]的第一个字符
// 计算两个字符的ASCII差值,并打印结果
argv指向说明
argv[0]指向程序名称。
argv[1]及之后指向命令行参数。
字符指针数组元素取值解释
*(argv[1]+2)表示argv[1]的第三个字符。
*argv[2]表示argv[2]的第一个字符。
argv指向说明
  • argv[0]指向程序名称。
  • argv[1]及之后指向命令行参数。
字符指针数组元素取值解释
  • *(argv[1]+2)表示argv[1]的第三个字符。
  • *argv[2]表示argv[2]的第一个字符。

20. shell变量

# 定义变量 variable_name=value

21. 访问变量的方式

# 使用echo命令访问变量 echo $variable_name

22. 命令置换符的使用

# 将命令输出赋值给变量 result=$(command)

23. 数组

什么是稀疏数组
  • 稀疏数组是指数组中大部分元素为空或零,只有少量元素有实际值。
获取所有外部参数和数组中所有元素

# 获取所有外部参数 "$@" # 获取数组中所有元素 "${array[@]}"

获取外部参数个数和数组中元素个数

# 获取外部参数个数 "$#" # 获取数组中元素个数 "${#array[@]}"

24. 修改PATH的三种方式

终端生效

# 修改当前终端的PATH环境变量 PATH=$PATH:/new/path

单个用户生效

# 修改单个用户的PATH环境变量 echo "PATH=\$PATH:/new/path" >> ~/.bashrc source ~/.bashrc

所有用户生效

# 修改所有用户的PATH环境变量 sudo echo "PATH=\$PATH:/new/path" >> /etc/profile sudo source /etc/profile

25. #!/bin/bash

#!/bin/bash # shebang行,指定bash解释器

26. (( ))

书写

((expression))

获取运算结果

((a=5+3)) echo $a

支持幂运算

((result=2**3)) echo $result

27. expr(指令)

按位与和按位或示例

expr 5 & 3 expr 5 \| 3

关系运算示例

expr 5 \> 3 expr 5 \< 3 expr 5 != 3

字符串运算示例
# 匹配运算
expr match "hello" 'h\([a-z]*\)'
# 截取子串
expr substr "hello" 2 3
# 查找返回下标
expr index "hello" "e"
# 求长度
expr length "hello"

28. shell中if的格式

if [ condition ]; then# do something
elif [ another_condition ]; then# do something else
else# do something else
fi

29. test指令

整数判断示例

if [ 5 -gt 3 ]; then echo "5 is greater than 3" fi

字符串判断示例

if [ "hello" = "hello" ]; then echo "Strings are equal" fi

文件判断示例

if [ -f "file.txt" ]; then echo "File exists" fi

30. while循环

test表达式示例

while [ condition ]; do # do something done

31. for循环

C风格格式示例

for ((i=0; i<5; i++)); do echo $i done

另一种格式示例

for i in 1 2 3 4 5; do echo $i done

字符串列表示例

for var in string1 string2 string3; do echo $var done

32. case···in

格式示例
case $var invalue1)# do something;;value2)# do something else;;*)# default case;;
esac
;; *)解释
  • ;;表示结束一个case分支。
  • *)表示默认分支,当没有匹配到任何case时执行。
常量值可以重复示例

case $var in value1|value2) # do something ;; *) # default case ;; esac

33. select···in

打印选项示例

select var in option1 option2 option3; do echo "You selected $var" break done

和case···in结合示例
select var in option1 option2 option3; docase $var inoption1)echo "Selected option1";;option2)echo "Selected option2";;option3)echo "Selected option3";;*)echo "Invalid option";;esacbreak
done

34. continue n

for i in 1 2 3 4 5; do if [ $i -eq 3 ]; then continue 1 fi echo $i done

35. 函数

定义格式

function_name() { # function body }

参数获取

function_name() { local arg1=$1 local arg2=$2 # use arguments }

返回值接收

function_name() { echo "return value" } result=$(function_name) echo $result

修饰变量的关键字
  • local:定义局部变量。
  • global:默认全局变量。

36. Makefile

是什么
  • Makefile是一个描述编译规则的文件,用于自动化编译过程。
由什么构成
  • 目标(target)、依赖(dependencies)、命令(commands)。
一条规则的特点
  • 目标通常是生成的文件,依赖是生成目标所需的文件,命令是生成目标的具体步骤。
Makefile重新编译文件的依据
  • Make根据文件的时间戳来决定是否需要重新编译。
伪目标的作用
  • 伪目标不会生成实际文件,通常用于执行特定任务,如清理、安装等。
四版Makefile
  • GNU Makefile、BSD Makefile、CMakeLists.txt、Rakefile等。

37. gdb调试

流程
  • 启动gdb、加载程序、设置断点、运行程序、检查变量、继续执行。
gdb调试core文件有什么作用
  • core文件记录了程序崩溃时的状态,gdb可以通过core文件分析程序崩溃的原因。

38. 知识点思维导图

相关文章:

《深度剖析Linux 系统 Shell 核心用法与原理_666》

1. 管道符的用法 查找当前目录下所有txt文件并统计行数 # 使用管道符将ls命令的结果传递给wc命令进行行数统计 ls *.txt | wc -l 在/etc目录下查找包含"network"的文件并统计数量 # 使用find命令查找文件&#xff0c;并通过grep查找包含特定字符串的文件&#xf…...

索提诺比率(Sortino Ratio):更精准的风险调整收益指标(中英双语)

索提诺比率&#xff08;Sortino Ratio&#xff09;&#xff1a;更精准的风险调整收益指标 &#x1f4c9;&#x1f4ca; &#x1f4cc; 什么是索提诺比率&#xff1f; 在投资分析中&#xff0c;我们通常使用 夏普比率&#xff08;Sharpe Ratio&#xff09; 来衡量风险调整后的…...

minio作为K8S后端存储

docker部署minio mkdir -p /minio/datadocker run -d \-p 9000:9000 \-p 9001:9001 \--name minio \-v /minio/data:/data \-e "MINIO_ROOT_USERjbk" \-e "MINIO_ROOT_PASSWORDjbjbjb123" \quay.io/minio/minio server /data --console-address ":90…...

一周学会Flask3 Python Web开发-Jinja2模板访问对象

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 如果渲染模板传的是对象&#xff0c;如果如何来访问呢&#xff1f; 我们看下下面示例&#xff1a; 定义一个Student类 cla…...

RAGS评测后的数据 如何利用influxdb和grafan 进行数据汇总查看

RAGS(通常指相关性、准确性、语法、流畅性)评测后的数据能借助 InfluxDB 存储,再利用 Grafana 进行可视化展示,实现从四个维度查看数据,并详细呈现每个问题对应的这四个指标情况。以下是详细步骤: 1. 环境准备 InfluxDB 安装与配置 依据自身操作系统,从 InfluxDB 官网下…...

第25周JavaSpringboot实战-电商项目 4.商品分类管理

商品分类模块开发笔记 模块功能概述 实现分类数据的 增删改查 功能核心难点&#xff1a; 分类的父子级目录结构递归实现多级分类查找列表展示顺序控制&#xff08;从父级向子级递归&#xff09; 接口说明 后台接口 1. 添加分类 请求地址: /admin/category/add 请求方法: …...

C语言--正序、逆序输出为奇数的位。

题目&#xff1a; 采用正序和逆序分别输出为奇数的位。例如输入12345&#xff0c;正序输出135&#xff0c;逆序输出531 代码&#xff1a; #include <stdio.h>void printOddDigits(int num) {int res 0;int divider 10;while (num / divider > 10) {divider * 10;…...

C#快速调用DeepSeek接口,winform接入DeepSeek查询资料 C#零门槛接入DeepSeek C#接入DeepSeek源代码下载

下载地址<------完整源码 在数字化转型加速的背景下&#xff0c;企业应用系统对智能服务的需求日益增长。DeepSeek作为先进的人工智能服务平台&#xff0c;其自然语言处理、图像识别等核心能力可显著提升业务系统的智能化水平。传统开发模式下&#xff0c;C#开发者需要耗费大…...

H13-821 V3.0 HCIP 华为云服务架构题库

华为云上哪个服务能够用于收集来自主机和云服务的日志数据&#xff0c;并通过海量日志数据的分析与处理帮助开发或运维人员进行问题定位和分析&#xff1f; A&#xff1a;云监控服务 B&#xff1a;云日志服务 C&#xff1a;云审计服务 D&#xff1a;对象存储服务 答案&#xff…...

Linux主机用户登陆安全配置

Linux主机用户登陆安全配置 在Linux主机上进行用户登录安全配置是一个重要的安全措施&#xff0c;可以防止未经授权的访问。以下是如何创建用户hbu、赋予其sudo权限&#xff0c;以及禁止root用户SSH登录&#xff0c;以及通过ssh key管理主机用户登陆。 创建用户hbu 使用具有…...

提升数据洞察力:五款报表软件助力企业智能决策

概述 随着数据量的激增和企业对决策支持需求的提升&#xff0c;报表软件已经成为现代企业管理中不可或缺的工具。这些软件能够帮助企业高效处理数据、生成报告&#xff0c;并将数据可视化&#xff0c;从而推动更智能的决策过程。 1. 山海鲸报表 概述&#xff1a; 山海鲸报表…...

Linux | man 手册使用详解

注&#xff1a;本文为 “Linux man 手册” 相关文章合辑。 略作重排。 man 手册常用命令 1. 查看和搜索手册页 查看特定软件包的手册页&#xff0c;并使用 grep 命令过滤出包含特定关键字的行&#xff1a; man <package> | grep <keyword>在整个系统的手册页中…...

安全见闻4

今天学了Windows操作系统和驱动程序的相关知识 Windows注册表 注册表是windows系统中具有层次结构的核心数据库 储存的数据对windows 和Windows上运行的应用程序和服务至关重要。注册表时帮助windows控制硬件、软件、用户环境和windows界面的一套数据文件。 打开注册表编辑器…...

项目实战--网页五子棋(匹配模块)(4)

上期我们完成了游戏大厅的前端部分内容&#xff0c;今天我们实现后端部分内容 1. 维护在线用户 在用户登录成功后&#xff0c;我们可以维护好用户的websocket会话&#xff0c;把用户表示为在线状态&#xff0c;方便获取到用户的websocket会话 package org.ting.j20250110_g…...

P8716 [蓝桥杯 2020 省 AB2] 回文日期

1 题目说明 2 题目分析 暴力不会超时&#xff0c;O(n)的时间复杂度&#xff0c; < 1 0 8 <10^8 <108。分析见代码&#xff1a; #include<iostream> #include<string> using namespace std;int m[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};// 判断日期…...

如何在视频中提取关键帧?

在视频处理中&#xff0c;提取关键帧是一项常见的任务。下面将介绍如何基于FFmpeg和Python&#xff0c;结合OpenCV库来实现从视频中提取关键帧的功能。 实现思路 使用FFmpeg获取视频的关键帧时间戳&#xff1a;FFmpeg是一个强大的视频处理工具&#xff0c;可以通过命令行获取…...

為什麼使用不限量動態住宅IP採集數據?

在瞭解“不限量動態住宅IP數據採集”之前&#xff0c;我們需要先搞清楚什麼是“動態住宅IP”。簡單來說&#xff0c;動態IP是一種會定期變化的IP地址&#xff0c;通常由互聯網服務提供商&#xff08;ISP&#xff09;分配給家庭用戶。與固定IP&#xff08;靜態IP&#xff09;不同…...

Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用

在Go中使用Viper将YAML配置绑定到结构体时&#xff0c;主要依赖 mapstructure 标签&#xff08;而非 json 或 yaml 标签&#xff09;实现字段名映射。 --- ### 1. **基础绑定方法** 使用 viper.Unmarshal(&config) 或 viper.UnmarshalKey("key", &subConfi…...

OpenIPC开源FPV之Adaptive-Link安装

OpenIPC开源FPV之Adaptive-Link安装 1. 源由2. 介绍2.1 天空端安装2.2 地面端安装 3. 问题汇总3.1 安装脚本问题3.2 网络安装问题3.3 非SSC30KQ/SSC338Q硬件3.4 代码疑问 4. 总结5. 后续 1. 源由 鉴于飞行过程&#xff0c;发现一些马赛克现象&#xff0c;且60FPS桌面30FPS的录…...

[杂学笔记]OSI七层模型作用、HTTP协议中的各种方法、HTTP的头部字段、TLS握手、指针与引用的使用场景、零拷贝技术

1.OSI七层模型作用 物理层&#xff1a;负责光电信号的传输&#xff0c;以及将光电信号转化为二进制数据数据链路层&#xff1a;主要负责将收到的二进制数据进一步的封装为数据帧报文。同时因为数据在网络中传递的时候&#xff0c;每一个主机都能够收到报文数据&#xff0c;该层…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...