Linux进程管理和启动流程方法

一、计算用户id总和 使用while read line和/etc/passwd,计算用户id总和。
#!/bin/bash# 初始化用户id和总和变量uid=0sum=0while read line; do # 从 /etc/passwd 文件中提取用户id uid=$(echo $line | cut -d':' -f3) # 将用户id添加到总和中 sum=$((sum + uid))done < /etc/passwd# 输出id总和echo 用户id总和为:$sum 上面的脚本首先定义了两个变量 uid 和 sum,分别用于存储当前行的用户id和所有用户id的总和。然后使用 while 循环逐行读取 /etc/passwd 文件的内容,每次循环提取当前行的第三个字段,也就是用户id,并将它加到总和变量中。最后输出所有用户id的总和。
需要注意的是,脚本执行需要 root 权限才能读取 /etc/passwd 文件。如果没有权限,则需要使用其他方式获取用户列表。
二、数组/字符串处理/高级变量 总结索引数组和关联数组,字符串处理,高级变量使用及示例。
索引数组和关联数组 在bash中,数组是一种数据结构,可以用来存储一组值。bash中支持两种类型的数组:索引数组和关联数组。
# 定义一个索引数组my_array=(apple banana orange)# 访问数组中的元素echo ${my_array[0]} # 输出 appleecho ${my_array[1]} # 输出 bananaecho ${my_array[2]} # 输出 orange 索引数组:索引数组是按照数字索引访问元素的数组类型。在bash中,索引从0开始。可以使用下标语法获取数组元素的值。例如:
关联数组:关联数组是一种根据键名(字符串)访问元素的数组类型。定义关联数组时需要使用声明 -a。可以使用键名访问数组元素的值。例如:
# 定义一个关联数组declare -a my_arraymy_array[红]=苹果my_array[黄]=雪梨my_array[橙]=橘子# 访问数组中的元素echo ${my_array[红]} # 输出 苹果echo ${my_array[黄]} # 输出 雪梨echo ${my_array[橙]} # 输出 橘子 需要注意的是,bash的版本需要在 4.0 及以上才支持关联数组。
字符串处理 bash中有很多内置的字符串处理工具和技巧,可以对字符串进行各种操作。以下是一些 bash 中常用的字符串处理函数和示例:
${#string} 可以获得字符串的长度:
my_string=hello, worldecho ${#my_string} # 输出 12 ${stringlength} 可以截取子字符串,其中 start 是子字符串开始的位置, length 是子字符串的长度:
my_string=hello, worldecho ${my_string5} # 输出 helloecho ${my_string5} # 输出 world ${string#substring} 可以从字符串的开头删除指定的子字符串,其中 substring 是要删除的子字符串:
my_string=hello, worldecho ${my_string#hello, } # 输出 world ${string%substring} 可以从字符串的末尾删除指定的子字符串,其中 substring 是要删除的子字符串:
my_string=hello, worldecho ${my_string%world} # 输出 hello, ${string/find/replace} 可以将字符串中的所有指定子字符串 find 替换为 replace:
my_string=hello, worldecho ${my_string/world/there} # 输出 hello, there ${string//find/replace} 可以将字符串中的所有指定子字符串 find 替换为 replace,并且不止替换一次:
my_string=hello, worldecho ${my_string//l/l} # 输出 hello, world 高级变量 在 bash 中,更加高级的变量设置方式可以让我们更加灵活地控制变量的使用。下面我将介绍一些常见的高级变量赋值方式:
${parameter:=word}:当变量 parameter 不存在时,将其赋值为 word。
echo my_var is ${my_var:=default}# 输出 my_var is defaultecho my_var is ${my_var}# 输出 my_var is default ${parameter:+word}:当变量 parameter 存在时,将其赋值为 word。
my_var=valueecho my_var is ${my_var:+default}# 输出 my_var is defaultecho my_var is ${my_var}# 输出 my_var is value ${parameter:?error message}:如果变量 parameter 不存在或者为空,则显示错误信息 error message 并退出脚本的执行。
echo my_var is ${my_var:?variable not set}# 在 my_var 为空或未定义时,输出 variable not set 并退出 bash 中的变量间接引用是一种非常有用的技巧,它允许我们使用一个变量的值作为另一个变量的名称来引用它。这个技巧可以用在很多场景中,比如说根据运行时参数来动态引用变量。
在 bash 中,变量间接引用可以通过 ${!varname} 的语法来实现。其中 varname 为一个变量名,通过 $ 和 {} 来包围表示这是一个变量名的表达式。${!varname} 表示按照 varname 变量中存储的名称引用另一个变量。
下面是一个例子:
#!/bin/bashvar1=hellovar2=worldvarname=var1echo ${!varname}, ${var2}! # 输出 hello, world! 在这个例子中,我们首先定义了两个变量 var1 和 var2,然后将 varname 设为 var1,表示我们希望引用 var1 这个变量。在输出中,我们使用 ${!varname} 引用了 var1 这个变量,从而得到了输出 hello, world!。
需要注意的是,即使 varname 存储的变量名称是不存在的,${!varname} 表达式依然会被展开,并且其结果为空字符串。因此,在使用变量间接引用时应该特别小心,避免因为引用了不存在的变量而产生不可预测的结果。
三、求随机数大小 求10个随机数的最大值与最小值。
#!/bin/bashdeclare -i min maxdeclare -a numsfor ((i=0;i /etc/pki/ca/serial 生成ca私钥
cd /etc/pki/ca/(umask 066; openssl genrsa -out private/cakey.pem 2048) 生成ca自签名证书
openssl req -new -x509 -key /etc/pki/ca/private/cakey.pem -day 3650 -out /etc/pki/ca/cacert.pem-new:生成新证书签署请求-x509:专用于ca生成自签证书-key:生成请求用到的私钥文件-days n:证书的有效期限-out /path/to/somecertfile:证书的保存路径 用户生成私钥和证书申请
#生成私钥文件(umask 066;openssl genrsa -out /data/app1/app1.key 2048)#生成证书申请文件openssl req -new -key /data/app1/app1.key -out /data/app1/app1.csr ca 颁发证书
openssl ca -in /data/app1/app1.csr -out /etc/pki/ca/certs/app1.crt -days 1000 十八、加密算法 总结对称加密和非对称加密算法和用openssl签发证书步骤。
对称加密 对称加密:加密和解密使用同一个密钥
特性:
加密、解密使用同一个密钥,效率高;
将原始数据分割成固定大小的块,逐个进行加密
缺陷:
密钥过多
密钥分发
数据来源无法确认
常见对称加密算法:
des:data encryption standard,56bits
3des:
aes:advanced (128, 192, 256bits)
blowfish,twofish
idea,rc6,cast5
非对称加密 非对称加密:密钥是成对出现
公钥:public key,公开给所有人,主要给别人加密使用
私钥:secret key,private key 自己留存,必须保证其私密性,用于自已加密签名
特点:用公钥加密数据,只能使用与之配对的私钥解密;反之亦然
功能:
数据加密:适合加密较小数据,比如: 加密对称密钥
数字签名:主要在于让接收方确认发送方身份
缺点:
密钥长,算法复杂
加密解密效率低下
常见算法:
rsa:由 rsa 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件块的长度也是可变的,可实现加密和数字签名
dsa(digital signature algorithm):数字签名算法,是一种标准的 dss(数字签名标准)
ecc(elliptic curves cryptography):椭圆曲线密码编码学,比rsa加密算法使用更小的密钥,提供相当的或更高等级的安全
openssl签发证书 建立私有ca:
openca:openca开源组织使用perl对openssl进行二次开发而成的一套完善的pki免费软件
openssl:相关包 openssl和openssl-libs
证书申请及签署步骤:
生成证书申请请求
ra核验
ca签署
获取证书
#安装包[root@rocky86 ~]# yum install openssl-libs#查看配置文件[root@rocky86 ~]# cat /etc/pki/tls/openssl.cnf#安装包[root@ubuntu ~]# apt install libssl-dev#查看配置文件[root@ubuntu ~]# cat /etc/ssl/openssl.cnf 配置文件部分内容说明
[ ca_default ]dir = ./democa #所有与证书相关的文件目录,在实际使用时此处要进行修改certs = $dir/certs #颁发的证书文件目录crl_dir = $dir/crl #吊销的证书文件database = $dir/index.txt #证书索引文件new_certs_dir = $dir/newcerts #新颁发的证书目录certificate = $dir/cacert.pem #ca机构自己的证书serial = $dir/serial #证书编号文件,下一个证书编号,16进制crlnumber = $dir/crlnumber #存放当前crl编号的文件crl = $dir/crl.pem #ca证书吊销列表文件private_key = $dir/private/cakey.pem #ca证书的私钥[ policy_match ]countryname = matchstateorprovincename = matchorganizationname = matchorganizationalunitname = optionalcommonname = suppliedemailaddress = optional 匹配策略,指用此ca颁发证书时,证书的相关字段与ca的值的匹配规则
匹配规则
说明
match
要求申请填写的信息跟ca设置信息必须一致
optional
可有可无,跟ca设置信息可不一致
supplied
必须填写这项申请信息
创建私有ca 1、创建ca所需要的文件
#创建相关目录[root@ubuntu ~]# mkdir -pv /etc/pki/ca/{certs,crl,newcerts,private}[root@ubuntu ~]# tree /etc/pki/ca//etc/pki/ca/├── certs├── crl├── newcerts└── private4 directories, 0 files 2、 生成ca私钥
[root@ubuntu ~]# cd /etc/pki/ca/[root@ubuntu ca]# openssl genrsa -out private/cakey.pem 2048 3、生成ca自签名证书
[root@ubuntu ca]# openssl req -new -x509 -key /etc/pki/ca/private/cakey.pem -days3650 -out /etc/pki/ca/cacert.pemyou are about to be asked to enter information that will be incorporatedinto your certificate request.what you are about to enter is what is called a distinguished name or a dn.there are quite a few fields but you can leave some blankfor some fields there will be a default value,if you enter '.', the field will be left blank.-----country name (2 letter code) [au]:cn #国家代码state or province name (full name) [some-state]:beijing #省/州locality name (eg, city) []:beijing #城市organization name (eg, company) [internet widgits pty ltd]:magedu #公司/单位organizational unit name (eg, section) []:m54 #部门common name (e.g. server fqdn or your name) []:www.magedu.org #域名email address []: #邮箱-new #生成新证书签署请求-x509 #专用于ca生成自签证书-key #生成请求时用到的私钥文件-days n #证书的有效期限-out /path/to/somecertfile #证书的保存路径#查看证书[root@ubuntu ca]# cat /etc/pki/ca/cacert.pem-----begin certificate-----miidszccapugawibagiuriyd0tw4qqffpbh1nudkh3zlwquwdqyjkozihvcnaqelbqawatelmakga1uebhmcq04xedaobgnvbagmb2jlawppbmcxedaobgnvbacmb2jlawppbmcxdzanbgnvbaombm1hz2vkdtemmaoga1uecwwdbtu0mrcwfqydvqqdda53d3cubwfnzwr1lm9yzzaefw0ymza1mjixmzmwmzfafw0zmza1mtkxmzmwmzfamgkxczajbgnvbaytaknomrawdgydvqqidadizwlqaw5nmrawdgydvqqhdadizwlqaw5nmq8wdqydvqqkdaztywdlzhuxddakbgnvbasma201ndexmbuga1ueawwod3d3lm1hz2vkds5vcmcwggeima0gcsqgsib3dqebaquaa4ibdwawggekaoibaqcjauax6qgco1gbbwefyhtib/unq7k4l1mgbjvflv9mccsufazczllidrb5hppegptjhjgxrfs6imndvrvwon9gklmv/bdpjkudk7a3lokweohu+i0o2xnp2zz1ahdguve1vhhoqa/ayzktgnbucjaekr0u3/gohljvb652t7/g13yur9xrlaljiyk+icdvdbvd2apro6w3ivkurhhlq3fsnwli6moucdxfts7ttqdbu1gulmo5znzffhxlnunpjf5rtvsd8l7mbvjrvedbayyp9iwv0vmlntsz0bdrntaglbxi18w2nb6lgskqhvic2j0u59gk5bvz0lvgbvexmqm1agmbaagjuzbrmb0ga1uddgqwbbrejmymzwwjjt1ptwmj3/casxikejafbgnvhsmegdawgbrejmymzwwjjt1ptwmj3/casxikejapbgnvhrmbaf8ebtadaqh/ma0gcsqgsib3dqebcwuaa4ibaqbjz2hty/ulouyvlvf+7imbtowyckddrb1p26hrhipcl+njzp5qfn662po4lczxrk1oqv7oobjvlotuj5evmz3jzf4dgk54e6jpvqp6sjnh0gofbqjx0bro5fizbbz6yvedxpqm5x11rhs+ejmeu2bu4qct9pz08m1zhp+qjmjbpxhxd8ouu+yu4fyftde24nyqntklffjcyjl4wo210cxyhotve8dtwfosuvqur49ifzw1upxxqtp6eizw4k+sv9afaeii+u4fngdis2q3c+gpn276v1mrcqnwgrdfx/whvr0aso9wvoqtnb9lm+ueqn61oj+agxgkujbattanyos/-----end certificate-----#查看证书[root@ubuntu ca]# openssl x509 -in /etc/pki/ca/cacert.pem -noout -textcertificate:data:version: 3 (0x2)serial number:44:8c:9d:d1:35:b8:aa:a7:df:a5:b8:75:36:e7:64:1f:76:4b:59:05signature algorithm: sha256withrsaencryptionissuer: c = cn, st = beijing, l = beijing, o = magedu, ou = m54, cn =www.magedu.orgvaliditynot before: may 22 13:30:31 2023 gmtnot after : may 19 13:30:31 2033 gmtsubject: c = cn, st = beijing, l = beijing, o = magedu, ou = m54, cn =www.magedu.orgsubject public key info:public key algorithm: rsaencryptionpublic-key: (2048 bit)............#导到windows中查看[root@ubuntu ca]# sz /etc/pki/ca/cacert.pemhttps://country-code.cl/ #国家代码 申请证书并颁发证书 1、为需要使用证书的主机生成生成私钥
[root@ubuntu ca]# openssl genrsa -out /data/test.key 2048 2、为需要使用证书的主机生成证书申请文件
#注意:默认要求国家,省,公司名称三项必须和ca一致[root@ubuntu ca]# openssl req -new -key /data/test.key -out /data/test.csryou are about to be asked to enter information that will be incorporatedinto your certificate request.what you are about to enter is what is called a distinguished name or a dn.there are quite a few fields but you can leave some blankfor some fields there will be a default value,if you enter '.', the field will be left blank.-----country name (2 letter code) [au]:cnstate or province name (full name) [some-state]:beijinglocality name (eg, city) []:beijingorganization name (eg, company) [internet widgits pty ltd]:mageduorganizational unit name (eg, section) []:m54-classcommon name (e.g. server fqdn or your name) []:www.m54.magedu.comemail address []:please enter the following 'extra' attributesto be sent with your certificate requesta challenge password []:an optional company name []: 3、用ca签署证书并将证书颁发给请求者
#创建索引文件[root@ubuntu ca]# touch /etc/pki/ca/index.txt#创建序号文件[root@ubuntu ca]# echo 0f > /etc/pki/ca/serial#签发证书[root@ubuntu ca]# openssl ca -in /data/test.csr -out /etc/pki/ca/certs/test.crt -days 100using configuration from /usr/lib/ssl/openssl.cnfcheck that the request matches the signaturesignature okcertificate details:serial number: 15 (0xf)validitynot before: may 22 13:56:23 2023 gmtnot after : aug 30 13:56:23 2023 gmtsubject:countryname = cnstateorprovincename = beijingorganizationname = mageduorganizationalunitname = m54-classcommonname = www.m54.magedu.comx509v3 extensions:x509v3 basic constraints:ca:falsex509v3 subject key identifier:13:7e:49:68:5e5f:23:68127eb5:90:020c:64x509v3 authority key identifier:44:8c0c6c:23:25:3d:4f03:09f0:80:4b:12:0a:12certificate is to be certified until aug 30 13:56:23 2023 gmt (100 days)sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]ywrite out database with 1 new entriesdata base updated#查看[root@ubuntu ca]# tree /etc/pki/ca//etc/pki/ca/├── cacert.pem├── certs│ └── test.crt├── crl├── index.txt├── index.txt.attr├── index.txt.old├── newcerts│ └── 0f.pem├── private│ └── cakey.pem├── serial└── serial.old4 directories, 9 files#原来是0f,加1后变成10[root@ubuntu ca]# cat /etc/pki/ca/serial10#v 表示有效,230830 表示2023年8月30日过期,0f 表示证书编号[root@ubuntu ca]# cat /etc/pki/ca/index.txtv 230830135623z 0f unknown /c=cn/st=beijing/o=magedu/ou=m54-class/cn=www.m54.magedu.com 4、查看证书中的信息:
#根据编号查看状态[root@ubuntu ca]# openssl ca -status 0fusing configuration from /usr/lib/ssl/openssl.cnf0f=valid (v)[root@ubuntu ca]# openssl x509 -in /etc/pki/ca/certs/test.crt -noout -textcertificate:data:version: 3 (0x2)serial number: 15 (0xf)signature algorithm: sha256withrsaencryptionissuer: c = cn, st = beijing, l = beijing, o = magedu, ou = m54, cn =www.magedu.orgvaliditynot before: may 22 1323 2023 gmtnot after : aug 30 1323 2023 gmtsubject: c = cn, st = beijing, o = magedu, ou = m54-class, cn =www.m54.magedu.comsubject public key info:public key algorithm: rsaencryptionpublic-key: (2048 bit)............ 如果证书申请文件中的配置项与ca机构的匹配规则不一致,将无法签发证书
吊销证书 在客户端获取要吊销的证书的 serial
[root@ubuntu ca]# openssl x509 -in /etc/pki/ca/certs/test.crt -noout -serial -subjectserial=0fsubject=c = cn, st = beijing, o = magedu, ou = m54-class, cn =www.m54.magedu.com 在ca上,根据客户提交的 serial 与 subject 信息,对比检验是否与 index.txt 文件中的信息一致,吊销证书:
[root@ubuntu ca]# openssl ca -revoke /etc/pki/ca/certs/test.crtusing configuration from /usr/lib/ssl/openssl.cnfrevoking certificate 0f.data base updated[root@ubuntu ca]# cat /etc/pki/ca/index.txtr 230830135623z 230522141008z 0f unknown/c=cn/st=beijing/o=magedu/ou=m54-class/cn=www.m54.magedu.com 指定第一个吊销证书的编号,注意:第一次更新证书吊销列表前,才需要执行
[root@ubuntu ca]# echo 01 > /etc/pki/ca/crlnumber 更新证书吊销列表
[root@ubuntu ca]# openssl ca -gencrl -out /etc/pki/ca/crl.pemusing configuration from /usr/lib/ssl/openssl.cnf 查看crl文件:
[root@ubuntu ca]# openssl crl -in /etc/pki/ca/crl.pem -noout -textcertificate revocation list (crl):version 2 (0x1)signature algorithm: sha256withrsaencryptionissuer: c = cn, st = beijing, l = beijing, o = magedu, ou = m54, cn =www.magedu.orglast update: may 22 1400 2023 gmtnext update: jun 21 1400 2023 gmtcrl extensions:x509v3 crl number:............ centos7 创建自签名证书 [root@centos7 certs]# cd /etc/pki/tls/certs[root@centos7 certs]# makethis makefile allows you to create:............examples:make server.keymake server.csrmake server.crtmake stunnel.pemmake genkeymake certreqmake testcertmake server.crt serial=1make stunnel.pem extra_flags=-sha384make testcert days=600#根据目录中的 makefile 来执行不同操作[root@centos7 certs]# lsca-bundle.crt ca-bundle.trust.crt make-dummy-cert makefile renew-dummy-cert[root@centos7 certs]# cat makefileutf8 := $(shell locale -c lc_ctype -k | grep -q charmap.*utf-8 && echo -utf8)days=365keylen=2048............#centos8中没有该makefile,可以scp过去使用
openssh 免密认证是通过使用公钥、私钥实现的。在 openssh 中,客户端和服务器端都会有一对密钥:私钥和公钥。
首先在客户端生成一对密钥(ssh-keygen)
并将客户端的公钥ssh-copy-id复制到服务端
当客户端再次发送一个连接请求,包括ip、用户名
服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的ip和用户,就会随机生成一个字符穿,例如:13579
服务端将使用客户端复制过来的公钥进行加密,然后发送给客户端
得到服务端发来的消息后,客户端会使用私钥进行解密,然后解密后的字符串发送给服务端
服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

人工智能可以如何改造制造业
5G技术将为医疗领域带来全方位的改革
生动有趣地学习Linux操作系统
神速!iOS10.2越狱还没来,iOS10越狱彩虹Emoji短信攻击漏洞就被修复了
Satechi直连式AirPods无线充电扩展坞 没有延长线
Linux进程管理和启动流程方法
家电业的低迷态势仍在持续 预计冰洗产品将在二季度成“重灾区”
苹果一家独大,华为手机市场还有多少机会?
iPhone12ProMax什么时候能到货?
如何在MIPS64 Release 6 CPU上运行QEMU的Linux SMP
AI智能客服机器人能帮企业做什么
远场透镜天线型反射衰减测量系统
评论:PC或将灭绝吗?
如何使用Python进行数学建模
多波段光传输系统基本架构 单波400G系统研究进展
为什么加拿大迟迟未正式表态是否禁用华为
联想官宣乐檬K12系列将于12月9日正式发布
Niantic Labs凭借《Pokemon GO》上榜十大游戏开发商
通用汽车与特斯拉在自动驾驶安全机制上的博弈
MC34063或MC33063接成标准的DC—DC