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还是主移动端 主移动端的话…...

【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...

dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
深入浅出Diffusion模型:从原理到实践的全方位教程
I. 引言:生成式AI的黎明 – Diffusion模型是什么? 近年来,生成式人工智能(Generative AI)领域取得了爆炸性的进展,模型能够根据简单的文本提示创作出逼真的图像、连贯的文本,乃至更多令人惊叹的…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

CSS3相关知识点
CSS3相关知识点 CSS3私有前缀私有前缀私有前缀存在的意义常见浏览器的私有前缀 CSS3基本语法CSS3 新增长度单位CSS3 新增颜色设置方式CSS3 新增选择器CSS3 新增盒模型相关属性box-sizing 怪异盒模型resize调整盒子大小box-shadow 盒子阴影opacity 不透明度 CSS3 新增背景属性ba…...

leetcode_69.x的平方根
题目如下 : 看到题 ,我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历,我们是整数的平方根,所以我们分两…...

未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...