Linux学习笔记3
建立最小linux系统【续】
书接上文,上一篇我们分析了rcS和ifconfig-eth0文件,接下来我们继续讲下去
passwd文件
之后在init.d的上一级目录etc下建立passwd文件,内容如下
root::0:0:root:/:/bin/sh bin:*:1:1:bin:/bin:daemon:*:2:2:daemon:/sbin: nobody:* :99:99:Nobody:/:
分析:
/etc/passwd 文件是Unix和类Unix系统中存储用户账户信息的文本文件,它包含了每个用户的基本信息,每一行对应一个用户账户。
每行记录包含了一系列由冒号分隔的字段,一般的格式是
用户名:密码字段:UID:GID:用户信息:家目录:shell
以第一行为例:
root::0:0:root:/:/bin/sh:
root:这是用户的用户名,代表系统管理员账户,拥有系统上的最高权限。
0:这是用户的用户ID(UID),在Unix系统中,0 通常是分配给 root 用户的。
0:这是用户的主组ID(GID),也就是用户所属的主要组的ID,通常也是0,即 root 组。
root:这是用户的注释,通常是用户的真实姓名或其他描述信息。
/:这是用户的家目录,即登录后默认所在的目录。对于 root 用户来说,一般是根目录。 /bin/sh:这是用户的默认shell,即登录后使用的命令行解释器,这里是 Bourne shell。
【注释:UID 是用来唯一标识系统中的每个用户的数字,每个用户都有一个唯一的UID。通常情况下,0号UID被分配给超级用户(如root),其他用户的UID则依次增加。
GID 是用来唯一标识系统中的每个组的数字。每个组都有一个唯一的GID。用户可以属于一个或多个组,但每个用户都有一个主组,其GID通常与用户的UID对应的GID相同。与UID类似,0号GID通常被分配给超级用户组
家目录是用户登录后的默认工作目录,每个用户都有一个独立的家目录,用于存储其个人文件、配置文件和其他相关数据。家目录对于每个用户都是私有的,只有相应的用户及超级用户(root)才有权限对该目录进行读写操作。通常,用户可以在家目录中创建子目录来组织文件,并且在登录时会自动进入到自己的家目录。】
之后修改passwd的权限
建立profile 文件
然后使用命令“vim profile”在etc 目录建立profile 文件(用于设置环境变量,提供了一个用户登录会话的初始环境配置,以确保用户可以在命令行界面中方便地进行工作和操作)
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="`id -un`"
LOGNAME=$USER
PS1='[$USER@$HOSTNAME]#'
PATH=$PATH
HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
前几行是注释,接下来我来解释一下
“ulimit -S -c 0 > /dev/null 2>&1”:
ulimit 是一个用于管理进程资源限制的实用工具,它可以帮助用户调整和控制系统资源的使用。 '-S'表示设置软限制;
'-c 0':这是指定核心文件大小的软限制为0,-c 表示核心文件大小的软限制,后面的 0 表示这个软限制的值为0
> /dev/null:这是将命令的标准输出重定向到 /dev/null,/dev/null 是一个特殊的设备文件,写入到它的内容会被丢弃,相当于把命令的输出扔掉,不显示在终端上
>& 表示将一个文件描述符的输出重定向到另一个文件描述符
【注释:软限制指的是系统中对资源的软性限制,它是可以被用户进程修改的,但不能超过硬限制(硬限制可以通过ulimit -H 命令来查看),如果软限制设置为0,表示禁止生成核心转储文件。
核心文件大小的软限制是操作系统针对进程生成核心转储文件(core dump)时设定的最大大小限制。核心转储文件是在进程遇到严重错误(比如段错误)时生成的一个包含了进程当前内存映像的文件,它可以用于调试和分析程序崩溃的原因
文件描述符是一个用于标识和操作输入/输出资源的整数值,下面有几种常见的文件描述符:
标准输入(stdin):文件描述符为 0,用于接收程序的输入数据。
标准输出(stdout):文件描述符为 1,用于输出程序的正常执行结果。
标准错误(stderr):文件描述符为 2,用于输出程序的错误消息。】
USER="`id -un`",id -un这个命令用于显示当前用户的用户名。
$ 通常表示一个变量或者环境变量的引用,当你在 shell 中输入 $ 后跟一个变量名时,shell 将会用该变量的值替换 $ 后面的内容,所以LOGNAME=$USER可以将变量 LOGNAME 的值设置为 $USER,即当前用户的用户名
PS1='[$USER@$HOSTNAME]#':设置命令提示符(Prompt String),在这个设置中,命令提示符显示当前用户名和主机名,形式为 [用户名@主机名]#
PATH=$PATH:保持 PATH 环境变量的内容不变。
HOSTNAME=`/bin/hostname`:用bin/hostname 命令获取当前主机的主机名,并将其赋值给变量 HOSTNAME
使用 export 命令将 USER、LOGNAME、PS1 和 PATH 这些变量导出到当前Shell的环境中
建立netd 文件
接下来使用“mkdir rc.d”命令在etc 目录建立文件夹rc.d,在rc.d 目录下使用命令“mkdir init.d”建立
init.d 文件夹,接着在init.d 文件夹,使用“vim netd”命令建立netd 文件
【注释:rc.d 文件夹是用于存放系统启动或服务管理相关的脚本或配置文件的目录。init.d 文件夹通常用于存放系统初始化脚本,这些脚本在系统启动时会被执行。netd 是一个服务脚本的文件名,用于启动或管理网络相关的服务】
#!/bin/sh
base=inetd
#See how we were called.
case "$1" in
start)
/usr/sbin/$base
;;
stop)
pid=`/bin/pidof $base`
if [-n "$pid" ]; then
kil1 -9 $pid
fi
;;
esac
exit0
以#!开头的语法是Shebang(也称为哈希井号、井号、pound、sharp等),后面跟着路径可以告诉操作系统使用指定的解释器来执行脚本文件。"#!/bin/sh"的意思是来指定使用Bourne shell来解释执行该脚本。
case "$1" in :是一个 case 语句,用于根据传递给脚本的参数 $1 的值执行不同的操作。如果 $1 的值是 start,启动一个名为 $base 的服务。如果 $1 的值是 stop,则使用 pidof 命令找到正在运行的服务的进程ID,并将其存储在 pid 变量中。
之后有一个条件语句,检查pid变量是否为空,如果非空,则使用 kill 命令发送信号 9 给服务的进程,以终止该进程。
【注释:
pidof 命令用于根据进程名查找进程ID
在shell脚本里面,假如base=hhhhh,那么$base就是hhhhh,是它特定的语法
】
【未完待续】
相关文章:
Linux学习笔记3
建立最小linux系统【续】 书接上文,上一篇我们分析了rcS和ifconfig-eth0文件,接下来我们继续讲下去 passwd文件 之后在init.d的上一级目录etc下建立passwd文件,内容如下 root::0:0:root:/:/bin/sh bin:*:1:1:bin:/bin:daemon:*:2:2:daemo…...
免费证件照一键换底色
最近星期天在家搞了一个小工具,在这里分享下! 废话不多说看看效果: 效果还不错,需要的可以联系我!!!!!!!!! 别的网上可都是一次五块钱这种。太贵了。。!!...
使用 FFmpeg 从音视频中提取音频
有时候我们需要从视频文件中提取音频,并保存为一个单独的音频文件,我们可以借助 FFmpeg 来完成这个工作。 一、提取音频,保存为 mp3 文件: 要使用 FFmpeg 从音视频文件中提取音频,并将 ACC 编码的音频转换为 MP3 格式࿰…...
GraphQL在现代Web应用中的应用与优势
GraphQL是一种现代的API查询语言,它在现代Web应用中得到了广泛的应用,因为它提供了一种高效、灵活且强大的方式来获取数据 GraphQL基础快速应用示例: 1. 后端设置(使用graphql-yoga) 首先,我们需要创建一…...
socket编程 学习笔记 理解
在使用socket(也就是套接字)编程的时候,其实是工作于应用层和传输层之间 如果使用的是基于TCP的socket,那每个数据包的发送的过程大致为: 数据通过socket套接字构造符合TCP协议的数据包在屏蔽底层协议的情况下&#…...
SC-Lego-LOAM建图与ndt_localization的实车实现
参考:https://blog.csdn.net/weixin_44303829/article/details/121524380 https://github.com/AbangLZU/SC-LeGO-LOAM.git https://github.com/AbangLZU/ndt_localizer.git 将建图和定位分别使用lego-loam和ndt来进行,实车上的效果非常不错,…...
vs code中如何使用git
由于本地代码有了一些储备,所以想通过网址托管形式,之前一直使用了github,但是鉴于一直被墙,无法登录账号,所以选择了国内的gitee来作为托管网站。 gitee的网址:Gitee - 基于 Git 的代码托管和研发协作平台…...
Vue项目中如何通过配置修改项目名称
Vue项目中如何通过配置修改项目名称 前言 部分vue项目中为了不直接修改 index.html 文件而使用 config 配置文件进行修改,好处就是项目配置比较集中好管理、可实现动态化修改。 具体配置和使用 项目中 index.html 配置标题名,可以看到 <title>…...
ThinkPHP5.1 创建控制器类
在ThinkPHP中,控制器是MVC模式中的核心组件之一,负责接收用户请求并处理相应的业务逻辑。在本篇技术博客中,我们将深入探讨ThinkPHP5.1中的控制器操作,包括创建控制器、路由绑定、请求参数获取等方面的知识点。 1.创建控制器 在T…...
完全背包问题(c++)
完全背包问题 当前有 N 种物品,第 i 种物品的体积是 ci,价值是 wi。 每种物品的数量都是无限的,可以选择任意数量放入背包。 现有容量为 V 的背包,请你放入若干物品,使总体积不超过 V,并且总价值尽可…...
综合性练习(验证码案例)
目录 一、需求 二、准备工作 三、约定前后端交互接口 1、需求分析 2、接口定义 四、Hutool工具介绍 1、引入依赖 2、测试使用Hutool生成验证码 五、实现服务器端代码 代码解读: 六、调整前端页面代码 七、运行测试 随着安全性的要求越来越高,…...
实用的Chrome命令 帮你打开Chrome浏览器的隐藏功能
前言 Chrome作为主力浏览器,支持相当丰富的第三方扩展,其实浏览器本身也内置了大量实用的命令。许多实用的功能并没有直接显示在Chrome的菜单上。在这篇文章中,我们将介绍几个实用的chrome:// commands。 通过下面整理的 Chrome 命令&#x…...
Linux提权--定时任务--打包配合 SUID(本地)文件权限配置不当(WEB+本地)
免责声明:本文仅做技术交流与学习... 目录 定时任务 打包配合 SUID-本地 原理: 背景: 操作演示: 分析: 实战发现: 定时任务 文件权限配置不当-WEB&本地 操作演示: 定时任务 打包配合 SUID-本地 原理: 提权通过获取计划任务执行文件信息进行提权 . 1、相对路径和…...
CSS-盒子模型
盒子模型的重要组成部分 内容区域content:width , height 内边距:内边框和内容区域的距离Padding边框线:Border外边距:Margin Border (边框线) 属性:Border 属性值:边框线粗细px 线条样式 颜色(不区分…...
WPF之页的使用
1,Page介绍。 Page直接从FrameworkElement中派生出来,WIndow从ContentControl中派生。 [Localizability(LocalizationCategory.Ignore)]public class Window : ContentControl, IWindowService{....} [ContentProperty("Content")]public class Page : Fr…...
【FFmpeg】Filter 过滤器 ② ( 裁剪过滤器 Crop Filter | 裁剪过滤器语法 | 裁剪过滤器内置变量 | 裁剪过滤器常用用法 )
文章目录 一、裁剪过滤器1、裁剪过滤器简介2、裁剪过滤器语法3、裁剪过滤器内置变量4、裁剪过滤器示例5、裁剪过滤器应用6、裁剪过滤器图示 二、裁剪过滤器常用用法1、裁剪指定像素的视频区域2、裁剪视频区域中心正方形 - 默认裁剪3、裁剪视频区域中心正方形 - 手动计算4、裁剪…...
thinkphp5 中控制器的创建和使用方法
在 ThinkPHP 5 中,控制器(Controller)是用于处理请求、执行逻辑操作并返回响应的类。以下是在 ThinkPHP 5 中创建和使用控制器的基本方法: 1. 创建控制器 在 ThinkPHP 5 中,控制器通常位于 application/index/contro…...
[Linux] 常用服务器命令(持续更新)
文件操作 # 显示文件系统的磁盘空间使用情况 df -h全局查找文件 find / -type f -iname "java"find / -name libncurses*拷贝整个文件夹 cp -r /home/a/ /home/b/ 解压,撤销解压 撤销zip解压 zipinfo -1 path/xx.zip | xargs rm -rf 撤销tar解压 tar …...
编译官方原版的openwrt并加入第三方软件包
最近又重新编译了最新的官方原版openwrt-2305(2024.3.22),此处记录一下以待日后参考。 目录 1.源码下载 1.1 通过官网直接下载 1.2 映射github加速下载 1.2.1 使用github账号fork源码 1.2.2 创建gitee账号映射github openwrt 2.编译准…...
PC适配移动端
**手机端适配** 媒体查询 组件统一样式 媒体查询写四套样式 手机 屏幕宽小于768px 平板 屏幕宽 大于等于768px 小于992px 桌面显示器 屏幕宽大于等于992px 小于1200px 大屏幕 屏幕宽大于等于1200px **页面整体及页面内容** 页面看是需要主PC还是主移动端 主移动端的话…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)
引言 在人工智能飞速发展的今天,大语言模型(Large Language Models, LLMs)已成为技术领域的焦点。从智能写作到代码生成,LLM 的应用场景不断扩展,深刻改变了我们的工作和生活方式。然而,理解这些模型的内部…...
