CentOS 5和6的启动流程:
Linux:kernel+rootfs
kernel:进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能
rootfs:
glibc
库:函数集合,function,调用接口
过程调用:procedure
函数调用:function
程序
内核设计流派:
单内核设计:Linux
把所有功能集成于同一个程序
微内核设计:Windows,Solaris
每种功能使用一个单独子系统实现
Linux内核特点:
支持模块化:.ko
支持模块的动态装载和卸载:
组成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:
CentOS 5 :/boot/initrd-VERSION-release.img
CentOS 6 :/boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release
CentOS 系统启动流程:
POST:加电自检
ROM:CMOS
BIOS:Basic Input and Output System
ROM+RAM
BOOT Sequence:
按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备
BootLoader:引导加载器,程序
Windows:ntloader
Linux:
LILO:LInux LOader
GRUB:GRand Uniform Bootloader
GRUB 0.x:GRUB Legacy
GRUB 1.x:GRUB2
功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到内存的特定空间中,解压展开,并把系统控制权移交给内核
MBR:
446:bootloader
64:fat
2:55AA
GRUB:
bootloader:1st stage
disk:2nd stage
kernel:
自身初始化
探测可识别到的所有硬件设备
加载硬件驱动程序(有可能会借助于ramdisk加载驱动)
以只读方式挂载根文件系统
运行用户空间的第一个应用程序/sbin/init
init程序的类型:
SysV:init,CentOS 5
配置文件:/etc/inittab
Upstart:init,CentOS 6
配置文件:/etc/inittab,/etc/init/*.conf
Systemd:systemd,CentOS 7
配置文件:/usr/lib/systemd/system,/etc/systemd/system
ramdisk:
内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问
ramdisk --> ramfs
CentOS 5:initrd,工具程序:mkinitrd
CentOS 6:initramfs,工具程序:mkinitrd,dracut
系统初始化:
POST --> BootSequence(BIOS) --> Bootloader(MBR) --> kernel(ramdisk) -->rootfs(只读) --> init
/sbin/init
CentOS 5:
运行级别:为了系统的运行或维护等应用目的而设定
0-6:7个级别
0:关机
1.单用户模式(root,无需登录),single,维护模式
2.多用户模式,会启动网络功能,但不会启动NFS:维护模式
3.多用户模式,正常模式:文本界面
4.预留级别:可同3级别
5.多用户模式,正常模式:图形界面
6.重启系统
默认级别:
3,5
切换级别:
init #
查看级别:
runlevel
who -r
配置文件:/etc/inittab
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait:切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别:process省略
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
...
l6:6:wait:/etc/rc.d/rc 6
说明:rc 0 --> 意味着读取/etc/rc.d/rc0.d/
K*:K##*:##运行次序,数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*:S##*:##运行次序,数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
for srv in /etc/rc.d/rc0.d/K*;do
$srv stop
done
for srv in /etc/rc.d/rc0.d/S*;do
$srv start
done
chkconfig命令:
查看服务在所有级别的启动或关闭设定情形:
chkconfig [--list] [name]
添加:
SysV的服务脚本放置于/etc/rc.d/init.d (/etc/init.d)
chkconfig --add name
#!/bin/bash
#
#chkconfig: LLLL nn nn
删除:
chkconfig --del name
修改其指定的链接类型:
chkconfig [--level levels] [--type type] name <on|off|reset>
--level LLLL:指定要设置的级别;省略时表示2345
注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本,因此,不变或不需写为服务脚本放置于/etc/rc.d/init.d目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中
/etc/rc.d/rc.sysinit:系统初始化脚本
1.设置主机名
2.设置欢迎信息
3.激活udev和selinux
4.挂在/etc/fstab文件中定义的文件系统
5.检测根文件系统,并以读写方式重新挂载根文件系统
6.设置系统时钟
7.激活swap设备
8.根据/etc/stsctl.conf文件设置内核参数
9.激活lvm及software raid设备
10.加载额外设备的驱动程序
11.清理操作
总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本,完成系统初始化 --> 关闭对应需要关闭的服务,启动需要启动服务 --> 设置登录终端
CentOS 6:
init程序为:upstart,其配置文件
/etc/inittab,/etc/init/*.conf
注意:/etc/init/*.conf文件语法,遵循upstart配置文件语法格式
博客作业:系统启动流程
启动系统时,设置其运行级别为1
GRUB(Boot Loader):
grub:GRand Unified Bootloader
grub 0.x:grub legacy
grub 1.x:grub 2
grub legacy:
stage1:mbr
stage1_5:mbr之后的扇区,让stage1中的BootLoader能识别stage2所在的分区上的文件系统
stage2:磁盘分区(/boot/grub)
配置文件:/boot/grub/grub.conf <-- /etc/grub.conf
stage2及内核等通常放置于一个基本磁盘分区:
功用:
1.提供菜单,并提供交互式接口
e:编辑模式,用于编辑菜单
c:命令模式,交互式接口
2.加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
3.为菜单提供保护机制
为编辑菜单进程认证
为启用内核或操作系统进行认证
如何识别设备:
(hd#,#)
hd#:磁盘编号,用数字表示,从0开始编号
#:分区编号,用数字表示,从0开始编号
(hd0,0)
grub的命令行接口:
help:获取帮助列表
help KEYWORD:详细帮助信息
find (hd#,#)/PATH/TO/SOMEWHERE
root (hd#,#):设置根分区
kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件,额外还可以添加许多内核支持使用的cmdline参数
例如:init=/path/to/init,selinux=0
initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk
boot:引导启动选定的内核
手动在grub命令行接口启动系统:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件:/boot/grub/grub.conf
配置项:
default=#:设定默认启动的菜单项,菜单项(title)编号从0开始
timeout=#:指定菜单项等待选项选择的时长
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径
hiddenmenu:隐藏菜单
password [--md5] STRING:菜单编辑认证
title TITLE:定义菜单项标题,可出现多次
root (hd#,#):grub查找stage2及kernel文件所在设备分区,为grub的根
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件
password [--md5] STRING:启动选定的内核或操作系统时进行认证
grub-md5-crypt:生成加密的密码
进入单用户模式:
1.编辑grub菜单(选定要编辑的title,而后使用e命令)
2.在选定的kernel后附加
1,s,S或single都可以
3.在kernel所在行,键入b命令
安装grub:
1.grub-install
grub-install --root-directory=ROOT /dev/DISK
2.grub
grub> root(hd#,#)
grub> setup(hd#)
练习:
1.新加硬盘,提供直接单独运行bash系统
2.破坏本机grub stage1,而后在救援模式下修复
3.为grub设置保护功能
Linux kernel:
单内核体系设计,但充分借鉴了微内核设计体系的优点,为内核引入模块化机制
内核组成部分:
kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE
kernel object:内核对象,一般放置于/lib/modules/VERSION-RELEASE/
[ ]:N
[M]:M
[*]:Y
辅助文件:ramdisk
initrd
initramfs
运行中的内核:
uname命令:
uname - print system information
uname [OPTION]...
-n:显示节点名称
-r:显示VERSION-RELEASE
模块:
lsmod命令:
显示由核心已经装载的内核模块
显示的内容来自:/proc/modules
modinfo命令:
显示模块的详细描述信息
modinfo [ -k kernel ]  [ modulename|filename... ]
-n:只显示模块文件路径
-p:显示模块参数
-a:author
-d:description
-l:license
modprobe命令:
装载或卸载内核模块
modprobe [ -C config-file ] [ modulename ] [ module parameters... ]
配置文件:/etc/modprobe.conf ,/etc/modprobe/*.conf
modprobe [ -r ] modulename...
depmod命令:
内核模块依赖关系文件及系统信息映射文件的生成工具
装载或卸载内核模块:
insmod
insmod [ filename ]  [ module options... ]
rmmod
rmmod [ modulename ]
/proc目录:
内核把内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出
参数:
只读:输出信息
可写:可接受用户指定"新值"来实现对内核某功能或特性的配置
/proc/sys
1.sysctl命令用于查看或设定此目录中诸多参数
sysctl -w path.to.parameter=VALUE
2.echo命令通过重定向的方式也可以修改大多数参数的值
echo "VALUE" > /path/to/parameter
sysctl命令:
配置文件:/etc/sysctl.conf
1.设置某参数
sysctl -w parameter=VALUE
2.通过读取配置文件设置参数
sysctl -p [/path/to/conf_file]
内核中的路由转发:
/proc/sys/net/ipv4/ip_forward
常用的几个参数:
net.ipv4.ip_forward
vm.drop_caches
kernel.hostname
/sys目录:
sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以调优的,用于调整硬件工作特性
udev通过此路径下输出的信息动态为各设备创建所需要设备文件;udev是运行用户空间程序;专用工具:udevadmin,hotplug
udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下
ramdisk文件的制作:
1.mkinitrd命令
为当前正在使用的内核重新制作ramdisk文件
mkinitrd initramfs-$(uname -r).img $(uname -r)
2.dracut命令
为当前正在使用的内核重新制作ramdisk文件
dracut /boot/initramfs-$(uname -r).img $(uname -r)
编译内核:
前提:
1.准备好开发环境
2.获取目标主机上硬件设备的相关信息
3.获取到目标主机系统功能的相关信息,例如要启动的文件系统
4.获取内核源代码包
www.kernel.org
准备开发环境:
包组:
Server Platform Development
Development tools
目标主机硬件设备相关信息:
CPU:
cat /proc/cpuinfo
x86info -a
lscpu
PCI设备:
lspci
-v
-vv
lsusb
-v
-vv
lsblk
了解全部硬件设备信息
hal-device
简单依据模板文件的制作过程:
tar xf linux-3.10.105.tar.xz -C /usr/src
cd /usr/src
ln -sv linux-3.10.105 linux
cd linux
cp /boot/config-$(uname -r) ./.config
make menuconfig
screen
make -j #
make modules_install
make install
init 6
练习:编译好并启用 
回顾:内核组成部分,内核编译
内核组成部分:
核心,模块
核心:/boot/vmlinuz-VERSION-RELEASE
模块:/lib/modules/VERSION-RELEASE
模块管理的相关命令:
lsmod,modinfo,modprobe [-r],insmod,rmmod,depmod
内核编译:
[ ]
[*]
[M]
Linux内核编译(2):
编译内核的步骤:
1.配置内核选项
1.make config:基于命令行以遍历的方式去配置内核中可配置的每个选项
2.make menuconfig:基于curses的文本窗口界面
3.make gconfig:基于GTK开发环境的窗口界面
4.make xconfig:基于Qt开发环境的窗口界面
支持全新配置模式进行配置:
1.make defconfig:基于内核为目标平台提供的默认配置进行配置
2.make allnoconfig:所有选项均回答为no
2.编译
make [-j #]
如何只编译内核中的一部分功能:
1.只编译某子目录中的相关代码
cd /usr/src/linux
make dir/
2.只编译一个特定的模块:
cd /usr/src/linux
make dir/file.ko
例如:只为e1000编译驱动
make drivers/net/ethernet/intel/e1000/e1000.ko
如何交叉编译内核:
编译的目标平台与当前平台不相同:
make ARCH=arch_name
要获取特定目标平台的使用帮助:
make ARCH=arch_name help
如何在已经执行过编译操作的内核源码树做重新编译:
事先清理操作:
make clean:清理大多数编译生成的文件,但会保留config文件等
make mrproper:清理所有编译生成的文件,config及某些备份文件
make distclean:mrproper,patches以及编辑器备份文件
screen命令:
打开新的screen
screen
退出并关闭screen:
exit
剥离当前screen:
ctrl+a,d
显示所有已经打开的screen:
screen -ls
恢复某screen
screen -r [SESSION]
CentOS系统安装:
BootLoader --> kernel(initramfs) --> rootfs --> /sbin/init
anaconda安装程序:
tui:基于curses的文本窗口
gui:图形窗口
CentOS的安装程序启动过程:
MBR:boot.cat
stage2:isolinux/isolinux.bin
配置文件:isolinux/isolinux.cfg
每个对应的菜单选项:
加载内核:isolinux/vmlinuz
向内核传递参数:append initrd=initrd.img ...
装载根文件系统,并启动anaconda
默认启动GUI接口
若是显式指定使用TUI接口:
向内核传递"text"参数即可
boot:linux text
注意:上述内容一般应位于引导设备,而后续的anaconda及其安装用到的程序包等有几种方式可用:
本地光盘
本地硬盘
ftp server:yum repository
http server:yum repository
nfs server
如果想手动指定安装源:
boot: linux method
anaconda应用的工作过程:
安装前配置阶段:
安装过程使用的语言
键盘类型
安装目标存储设备:
basic storage
特种设备:iSCSI
设定主机名
配置网络接口
设定分区方式及MBR的安装位置
语言
时区
管理员密码
创建普通用户
选定要安装的程序包
安装阶段:
在目标磁盘创建分区,执行格式化操作等
将选定的程序包安装至目标位置
安装BootLoader
首次启动:
iptables
selinux
core dump
anaconda的配置方式:
1.交互式配置方式
2.通过读取事先给定的配置文件自动完成配置
按特定语法给出的配置选项:
kickstart文件:
安装引导选项:
boot:
text:文本安装方式
method:手动指定使用的安装方法
与网络相关的引导选项:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR
与远程访问功能相关的引导选项:
vnc
vncpassword='PASSWORD'
指明kickstart文件的位置:
ks=
DVD drive: ks=cdrom:/PATH/TP/KICKSTART_FILE
Hard dirve: ks=hd:/device/drectory/KICKSTART_FILE
HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
启动紧急救援模式:
rescue
官方文档: Installation Guide
kickstart文件的格式:
命令段:指明各种安装前配置,如键盘类型等
程序包段:指明要安装的程序包组或程序包,不安装的程序包等
%packages
@grou_name
package
-package
%end
脚本段:
%pre:安装前脚本
运行环境:运行于安装介质上的微型Linux环境
%post:安装后脚本
运行环境:安装完成的系统
命令段中的命令:
必给命令:
auth:认证方式
BootLoader:BootLoader的安装位置及相关配置
keyboard:设定键盘类型
lang:语言类型
part:创建分区
rootpw:指明管理员的密码
timezone:时区
可选命令:
install OR upgrade
text:文本安装界面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安装完成后为系统创建新用户
url:指明安装源
创建kickstart文件的方式:
1.直接手动编辑
依据模板修改
2.可使用创建工具:system-config-kickstart (CentOS 6)
检查ks文件的语法错误:ksvalidator
ksvalidator /PATH/TO/KICKSTART_FILE
创建引导光盘:
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso myiso/
回顾:CentOS系统安装
kickstart文件:
命令段
必备:authconfig,bootloader...
可选:firewall,selinux...
程序包段
%packages
@group_name
package
-package
%end
脚本段
%pre
...
%end
%post
...
%end
创建工具:system-config-kickstart
语法检查:ksvalidator
安装过程如何获取kickstart文件:
DVD:cdrom:/PATH/TO/KS_FILE
HTTP:http://
SELinux:
SELinux:secure enhanced linux,工作于Linux内核中
DAC:自主访问控制
MAC:强制访问控制
SELinux有两种工作级别:
strict:每个进程都受到selinux的控制
targeted:仅有限个进程受到selinux控制
只监控容易被入侵的进程
sandbox:
subject operation object
subject:进程
object:进程,文件
文件:open,read,write,close,chown,chmod
subject:domain
object:type
SELinux为每个文件提供了安全标签,也为进程提供了安全标签
user:role:type
user:SELinux的user
role:角色
type:类型
SELinux规则库:
规则:哪种域能访问哪种或者哪些种类型内文件
配置SELinux:
SELinux是否启用:
给文件重新打标:
设定某些布尔特性:
SELinux的状态:
enforcing:强制,每个受限的进程都必然受限
permissive:启用,每个受限的进程违规操作不会被禁止,但会被记录于审计日志
disabled:关闭
相关命令:
getenforce:获取selinux当前状态
setenforce 0|1
0:设置为permissive
1:设置为enforcing
此设定:重启系统后无效
配置文件:/etc/sysconfig/selinux,/etc/selinux/config
SELinux={disable|enforcing|permissive}
给文件重新打标:
chcon
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
-R:递归打标
还原文件的默认标签:
restorecon [-R] /path/to/somewhere
布尔型规则:
getsebool
setsebool
getsebool命令:
getsebool [-a]  [boolean]
setsebool命令:
setsebool [-P] boolean value | bool1=val1 bool2=val2 ...
bash脚本编程:
编程语言:
数据结构
顺序执行
选择执行
条件测试
运行命令或[[ EXPRESSION ]]
执行状态返回值
if
case
循环执行
将某代码段重复运行多次
重复运行多少次?
循环次数事先已知
循环次数事先未知
必须有进入条件和退出条件 
for,while,until
函数:结构化编程及代码重用  
function
for循环语法:
for NAME in LIST;do
循环体
done
列表生成方式:
1.整数列表
{start..end}
$(seq start [[step]end])
2.glob
/etc/rc.d/rc3.d/K*
3.命令
通过ping命令探测172.16.250.1-254范围内的所有主机的在线状态
#!/bin/bash
net='192.168.1'
uphosts=0
downhosts=0
for i in {1..200};do
ping -c 1 -w 1 ${net}.${i} &> /dev/null
if [ $? -eq 0 ];then
echo "${net}.${i} is up."
let uphosts++
else
echo "${net}.${i} is down."
let downhosts++
fi
done
echo "up hosts:$uphosts"
echo "down hosts:$downhosts"
while循环:
while CONDITION;do
循环体
done
CONDITION:循环控制条件,进入循环之前,先做一次判断,每一次循环之后会再次做判断
条件为true,则执行一次循环;直到条件测试状态为false终止循环
因此:CONDITION一般应该有循环控制变量;而此变量的值会在循环体不断地被修正
示例:求100以内正整数之和
#!/bin/bash
declare -i i=0
declare -i sum=0
while [ $i -le 100 ];do
let sum+=$i
let i++
done
echo $sum

马哥Linux SysAdmin学习笔记(三)的更多相关文章

  1. 马哥Linux SysAdmin学习笔记(二)

    Linux网络属性管理: 局域网:以太网,令牌环网 Ethernet:CSMA/CD 冲突域 广播域 MAC:media access control地址 48bit: 24bits 24bits  ...

  2. 马哥Linux SysAdmin学习笔记(一)

    Linux入门 Linux系统管理: 磁盘管理,文件系统管理 RAID基础原理,LVM2 网络管理:TCP/IP协议,Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...

  3. 马哥Linux SysAdmin学习笔记(四)

    sed:编辑器 sed:Stream EDitor,行编辑器 用法: sed [option]... 'script' inputfile... script: '地址命令' 常用选项: -n:不输出 ...

  4. 马哥Linux base学习笔记

     介绍课程: 中级: 初级:系统基础 中级:系统管理.服务安全及服务管理.shell脚本 高级: MySQL数据库: Cache & storgae 集群: Cluster   lb: 4la ...

  5. linux初级学习笔记三:linux操作系统及常用命令,及如何复制和移动文件!(视频序号:02_4)

    本节学习的命令:cp,mv,install,du,read 本节学习的技能:文件的移动与复制 cp( copy):复制和移动文件 cp SRC DEST -r:递归复制一个目录及其目录中的所有文件 - ...

  6. Linux命令学习笔记目录

    Linux命令学习笔记目录 最近正在使用,linux,顺便将用到的命令整理了一下. 一. 文件目录操作命令: 0.linux命令学习笔记(0):man 命令 1.linux命令学习笔记(1):ls命令 ...

  7. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  8. Linux内核学习笔记二——进程

    Linux内核学习笔记二——进程   一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器 ...

  9. muduo网络库学习笔记(三)TimerQueue定时器队列

    目录 muduo网络库学习笔记(三)TimerQueue定时器队列 Linux中的时间函数 timerfd简单使用介绍 timerfd示例 muduo中对timerfd的封装 TimerQueue的结 ...

随机推荐

  1. SpringCloud(六)分布式事务

    在分布式系统中,分布式事务基本上是绕不开的, 分布式事务是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上 .其实就可以简单理解成在分布式系统中实现事务 ...

  2. Elasticsearch中最重要的文档CRUD要牢记

    Elasticsearch文档CRUD要牢记 转载参考:https://juejin.im/post/5ddbf298e51d4523053c42e7 在Elasticsearch中,文档(docum ...

  3. MacBook读写移动硬盘

    在MacBook上插入移动硬盘,只能读取,不能写入.这是因为移动硬盘的格式是NTFS,MacBook不支持写入,有三种方法: 1. 改变移动硬盘的格式,格式化为可以读写的exFAT等格式,但存储的文件 ...

  4. 一文彻底掌握Apache Hudi的主键和分区配置

    1. 介绍 Hudi中的每个记录都由HoodieKey唯一标识,HoodieKey由记录键和记录所属的分区路径组成.基于此设计Hudi可以将更新和删除快速应用于指定记录.Hudi使用分区路径字段对数据 ...

  5. 【ProLog - 4.0 List】

    [简介] 列表是Prolog编程中常用的一种重要的递归数据结构 列表是一个有限的元素序列 实例: 所有Prolog术语都可以是列表的元素,一个非空的List应该含有两个元素:头元素(Head)和尾元素 ...

  6. Install Tensorflow object detection API in Anaconda (Windows)

    This blog is to explain how to install Tensorflow object detection API in Anaconda in Windows 10 as ...

  7. Appium 自动化测试框架:关键字驱动+数据驱动

    1. 关键字驱动框架简介 2. 框架结构说明 3. 框架代码实现 action 包  page_action.py business_process 包 case_process.py data_so ...

  8. linux too many open files 问题总结

    问题描述: kubernetes 集群使用promtail收集日志,发现一段时间有些机器日志收集不到查看promtail日志出现以下报错: error="filetarget.fsnotif ...

  9. CentOS7 常用基础操作

    系统目录结构了解 CentOS系统中没有磁盘的概念,一切皆文件,/目录下的的一个个文件夹目录就相当于磁盘了,这里简单记录几个常用的目录以及对应的作用: dev:Linux一切皆文件,包括硬件也进行了文 ...

  10. 2021最新版Dubbo-admin+Zookeeper安装教程

    安装程序包 这是写教程时收集好的文件,可直接点击下载,也可以跟着步骤自行下载:https://hanzhe.lanzous.com/ihna9jzcsze Zookeeper下载地址,任选其一点击下载 ...