批量装机工具cobbler简介及其安装使用
前言:如果仅有几台机器的话,使用U盘或者光盘装起来还不是很费事,一旦数量到了一定程度,使用手动方法就是一件费时费力的事,PXE+kistart就可以解决这个问题,降低难度,加快速度,而cobbler更优于PXE+kistart的解决方案,难度甚至降到普通的修补匠都可以胜任的工作(cobbler的英译意思,夸张了),总的来说,降低工作中的复杂度是一件非常有意义的事情,它相比它的前辈,它的优越之处在哪里呢?它的功能是如何实现的呢?下面我们来简单的介绍一下:
Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。Cobbler是较早前的kickstart的升级版,优点是比较容易配置,还自带web界面比较易于管理。
在搭建过程中借鉴了CSDN惨绿少年、linux公社Masuri、博客园linuxliu等同仁的技术文章,在此表示感谢!基于其各自的表达内容所长与不足,撰文对cobbler的搭建与使用进行介绍,如有不足,欢迎指正:
一、基本环境准备:
1.测试平台:vmware workstation之上的linux系统,配置如下图,值得注意的是,我选择了NAT的网络模式。在同仁的文章中,有使用主机模式来进行测试的,这样做也可以,但安装软件包的时候,就需要修改网卡配置和更换虚拟机的网络模式,是非常麻烦的。
2.修改NAT网络模式的dhcp服务,将其关闭,自己搭建的dhcp服务器的ip地址池与NAT模式的网段相同,这样既可以完成测试,也不需要进行ip的更换等操作,网关与DNS也可以由虚拟网络编辑器来承担,非常的方便。我的NAT网络是网关与DNS为192.168.249.2,虚拟网络编辑器的地址池为192.168.249.128-192.168.249.254,所以本地的dhcp配置可以避开这个范围。
关闭虚拟网络编辑器的dhcp功能,虚拟网络编辑器的地址池如图:
3.系统环境准备:
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.6. (Core)
[root@localhost ~]# uname -r
3.10.-957.21..el7.x86_64
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl stop NetworkManager
[root@localhost ~]# ifconfig ens33 | awk 'NR==2 {print $2}' 192.168.249.10
[root@localhost ~]# cat /etc/selinux/config | awk 'NR==7'
SELINUX=disabled
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=a76470a8-756d-4726-b527-aa321f621586
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.249.10
NETMASK=255.255.255.0
GATEWAY=192.168.249.2
4.更换yum源为阿里源
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# rm -rf *
[root@localhost yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost yum.repos.d]# yum makecache
ok,到此环境基本准备完成!
二、组件安装:
1.安装基本的工具:
[root@localhost ~]# yum -y install wget net-tools curl epel-release
2.安装功能组件:
[root@localhost ~]# yum install cobbler cobbler-web dhcp tftp-server pykickstart httpd rsync xinetd -y #安装完成了检查一下,这些包一个都不能少
3.修改cobbler主配置文件:
[root@localhost ~]# sed -i 's/^server: 127.0.0.1/server: 192.168.249.10/' /etc/cobbler/settings #修改server的IP为本地的IP
[root@localhost ~]# sed -i 's/^next_server: 127.0.0.1/next_server: 192.168.249.10/' /etc/cobbler/settings #修改tftp的ip为本地的IP
[root@localhost ~]# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings #启用dhcp
[root@localhost ~]# sed -i 's#yes#no#' /etc/xinetd.d/tftp #启用tftp [root@localhost ~]# sed -i 's/pxe_just_once: 0/pxe_just_once: 1/' /etc/cobbler/settings #修改参数,防止系统循环安装
4.先启动http与cobbler:
[root@localhost ~]# systemctl start httpd cobblerd
5.生成通过cobbler服务安装系统的默认root密码,并替换(会出现一串加密字符,把字符添加到cobbler主配置文件相应的位置):
[root@localhost ~]# openssl passwd - -salt '' ''
$$$wOSEtcyiP2N/IfIl15W6Z0
6.下载cobbler引导操作系统的必须文件:
[root@localhost ~]# cobbler get-loaders
task started: --02_220712_get_loaders
task started (id=Download Bootloader Content, time=Mon Sep :: )
downloading https://cobbler.github.io/loaders/README to /var/lib/cobbler/loaders/README
downloading https://cobbler.github.io/loaders/COPYING.elilo to /var/lib/cobbler/loaders/COPYING.elilo
downloading https://cobbler.github.io/loaders/COPYING.yaboot to /var/lib/cobbler/loaders/COPYING.yaboot
downloading https://cobbler.github.io/loaders/COPYING.syslinux to /var/lib/cobbler/loaders/COPYING.syslinux
downloading https://cobbler.github.io/loaders/elilo-3.8-ia64.efi to /var/lib/cobbler/loaders/elilo-ia64.efi
downloading https://cobbler.github.io/loaders/yaboot-1.3.17 to /var/lib/cobbler/loaders/yaboot
downloading https://cobbler.github.io/loaders/pxelinux.0-3.86 to /var/lib/cobbler/loaders/pxelinux.0
downloading https://cobbler.github.io/loaders/menu.c32-3.86 to /var/lib/cobbler/loaders/menu.c32
downloading https://cobbler.github.io/loaders/grub-0.97-x86.efi to /var/lib/cobbler/loaders/grub-x86.efi
downloading https://cobbler.github.io/loaders/grub-0.97-x86_64.efi to /var/lib/cobbler/loaders/grub-x86_64.efi
*** TASK COMPLETE ***
PS:我在做的时候,这一步报错了,说是python文件不完整,实际上呢,根本原因是第三步修改/etc/cobbler/settings时,server与next-server对应的IP不是本地ens33网卡的IP,这一步只要网络没有问题,IP地址没有问题,是不会报错的。
7.修改dhcp文件,配置本地dhcp地址池。
这一步呢,基本上没有问题,但一般出问题就在这里,启动之后status查看dhcp服务的状态,如果错误那么就需要排查,先关闭networkmanager服务,且一般网卡/网口只留一个,dhcp服务的网关与dns由虚拟网络编辑器来提供,子网掩码也是正常的24/0,虚拟网络编辑器的地址池为192.168.249.128-192.168.249.254,所以我们避开这个网段。
8.同步cobbler的配置到dhcp服务。
[root@localhost ~]# cobbler sync
task started: --02_221653_sync
task started (id=Sync, time=Mon Sep :: )
running pre-sync triggers
cleaning trees
removing: /var/lib/tftpboot/grub/images
copying bootloaders
trying hardlink /var/lib/cobbler/loaders/pxelinux. -> /var/lib/tftpboot/pxelinux.
trying hardlink /var/lib/cobbler/loaders/menu.c32 -> /var/lib/tftpboot/menu.c32
trying hardlink /var/lib/cobbler/loaders/yaboot -> /var/lib/tftpboot/yaboot
trying hardlink /usr/share/syslinux/memdisk -> /var/lib/tftpboot/memdisk
trying hardlink /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi
trying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi
copying distros to tftpboot
copying images
generating PXE configuration files
generating PXE menu structure
rendering DHCP files
generating /etc/dhcp/dhcpd.conf
rendering TFTPD files
generating /etc/xinetd.d/tftp
cleaning link caches
running post-sync triggers
running python triggers from /var/lib/cobbler/triggers/sync/post/*
running python trigger cobbler.modules.sync_post_restart_services
running: dhcpd -t -q
received on stdout:
received on stderr:
running: service dhcpd restart
received on stdout:
received on stderr: Redirecting to /bin/systemctl restart dhcpd.service running shell triggers from /var/lib/cobbler/triggers/sync/post/*
running python triggers from /var/lib/cobbler/triggers/change/*
running python trigger cobbler.modules.manage_genders
running python trigger cobbler.modules.scm_track
running shell triggers from /var/lib/cobbler/triggers/change/*
*** TASK COMPLETE ***
9.基本的配置就是这些,然后重启下这些组件服务,并配置开机启动,然后使用cobbler自带的工具命令检查一下配置。
[root@localhost ~]# systemctl restart httpd cobblerd xinetd rsyncd tftp dhcpd
[root@localhost ~]# systemctl enable httpd cobblerd xinetd rsyncd tftp dhcpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/cobblerd.service to /usr/lib/systemd/system/cobblerd.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
Created symlink from /etc/systemd/system/sockets.target.wants/tftp.socket to /usr/lib/systemd/system/tftp.socket.
Created symlink from /etc/systemd/system/multi-user.target.wants/dhcpd.service to /usr/lib/systemd/system/dhcpd.service.
[root@localhost ~]# cobbler check
The following are potential configuration items that you may want to fix:
1 : debmirror package is not installed, it will be required to manage debian deployments and repositories
2 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
Restart cobblerd and then run 'cobbler sync' to apply changes.
#这两个问题:1是debian系统,2是fence系统,说明我们的配置没有问题
10.挂载镜像,之前呢,我们已经将镜像挂载到了系统本地,现在先把镜像挂载到/mnt目录下,然后再将mnt目录导入cobbler的目录位置:
[root@localhost ~]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost ~]# cobbler import --path=/mnt/ --name=CentOS-7.6--x86_64 --arch=x86_64
task started: --02_222411_import
task started (id=Media import, time=Mon Sep :: )
#因为镜像文件比较大,所以需要较长的时间。
# --path 镜像路径
# --name 为安装源定义一个名字
# --arch 指定安装源是32位、64位、ia64, 目前支持的选项有: x86│x86_64│ia64
# 安装源的唯一标示就是根据name参数来定义,本例导入成功后,安装源的唯一标示就是:CentOS-7.1-x86_64,如果重复,系统会提示导入失败
11.检查一下镜像:
[root@localhost ~]# cobbler list
distros:
CentOS-7.6--x86_64 profiles:
CentOS-7.6--x86_64 systems: repos: images: mgmtclasses: packages: files:
ok,镜像也没有问题,然后呢,我们就可以使用cobbler来进行无人值守安装。
12.检测结果:
PS:这个界面的内容我们是可以手动调整的,配置文件为/etc/cobbler/pxe/pxedefault.template
ok,没有问题,同一网络模式下可以看到centos的镜像,并且也从dhcp服务中获取到了ip地址,选择镜像安装的话,就没有问题了,安装好之后的密码就是我们之前设置的123456。这个虚拟机,我们可以保留着,如果需要进行批量装机的话,我们可以选择网络模式为桥接,然后将本地虚拟机的IP修改为192.168.249.2即可,网关服务由本地网卡来承担,dns的话,就没有办法了,毕竟我们只是想装系统而已。
三、使用KS进行定制化安装。
1.在安装系统的时候,像分区,安装基础软件包这些个工作量也不小,但我们可以使用ks文件来进行定制化的安装,在导入第一个镜像的时候,在/var/lib/cobbler/kickstarts/目录下会生成sample_end.ks文件,这个文件就是安装系统时的默认配置文件,我们可以进行修改,来完成自己的个性化配置,配置文件详解如下:
关键字 | 含义 |
---|---|
install |
告知安装程序,这是一次全新安装,而不是升级upgrade 。 |
url --url=" " |
通过FTP 或HTTP 从远程服务器上的安装树中安装。url --url="http://10.0.0.7/CentOS-6.7/" url --url ftp://<username>:<password>@<server>/<dir> |
nfs |
从指定的NFS 服务器安装。nfs --server=nfsserver.example.com --dir=/tmp/install-tree |
text| graphical |
tesxt:使用文本模式安装。 graphical:在图形模式下根据kickstart执行安装,默认该选项 |
lang |
设置在安装过程中使用的语言以及系统的缺省语言。lang en_US.UTF-8 |
keyboard |
设置系统键盘类型。keyboard us |
zerombr |
清除mbr 引导信息。 |
bootloader |
系统引导相关配置。bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" --location= ,指定引导记录被写入的位置.有效的值如下:mbr (缺省),partition (在包含内核的分区的第一个扇区安装引导装载程序)或none (不安装引导装载程序)。--driveorder ,指定在BIOS 引导顺序中居首的驱动器。--append= ,指定内核参数.要指定多个参数,使用空格分隔它们。 |
network |
为通过网络的kickstart 安装以及所安装的系统配置联网信息。network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6 --bootproto=[dhcp/bootp/static] 中的一种,缺省值是dhcp 。bootp 和dhcp 被认为是相同的。static 方法要求在kickstart 文件里输入所有的网络信息。network --bootproto=static --ip=10.0.0.100 --netmask=255.255.255.0 --gateway=10.0.0.2 --nameserver=10.0.0.2 请注意所有配置信息都必须在一行上指定,不能使用反斜线来换行。 --ip= ,要安装的机器的IP 地址.--gateway= ,IP地址格式的默认网关.--netmask= ,安装的系统的子网掩码.--hostname= ,安装的系统的主机名.--onboot= ,是否在引导时启用该设备.--noipv6= ,禁用此设备的IPv6 .--nameserver= ,配置dns 解析. |
timezone |
设置系统时区。timezone --utc Asia/Shanghai |
authconfig |
系统认证信息。authconfig --enableshadow --passalgo=sha512 设置密码加密方式为 sha512 启用shadow 文件。 |
rootpw |
root 密码 |
clearpart |
清空分区。clearpart --all --initlabel --all 从系统中清除所有分区,--initlable 初始化磁盘标签 |
part |
磁盘分区。 --ondisk,指明使用的磁盘 |
firstboot |
负责协助配置redhat一些重要的信息。firstboot --disable |
selinux |
关闭selinux 。selinux --disabled |
firewall |
关闭防火墙。firewall --disabled |
logging |
设置日志级别。logging --level=info |
reboot |
设定安装完成后重启,此选项必须存在,不然kickstart显示一条消息,并等待用户按任意键后才重新引导,也可以选择halt 关机。 |
以一个ks.cfg 文件为例
- install
- url --url="http://10.0.0.7/CentOS-6.7/"
- text
- lang en_US.UTF-
- keyboard us
- zerombr
- bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
- network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS6
- timezone --utc Asia/Shanghai
- authconfig --enableshadow --passalgo=sha512
- rootpw --iscrypted $$X20eRtuZhkHznTb4$dK0BJByOSAWSDD8jccLVFz0CscijS9ldMWwpoCw/ZEjYw2BTQYGWlgKsn945fFTjRC658UXjuocwJbAjVI5D6/
- clearpart --all --initlabel
- part /boot --fstype=ext4 --asprimary --size=
- part swap --size=
- part / --fstype=ext4 --grow --asprimary --size=
- firstboot --disable
- selinux --disabled
- firewall --disabled
- logging --level=info
- reboot
- %packages
- @base
- @compat-libraries
- @debugging
- @development
- tree
- nmap
- sysstat
- lrzsz
- dos2unix
- telnet
- %post
- wget -O /tmp/optimization.sh http://*.*.*.*/ks_config/optimization.sh &>/dev/null
- /bin/sh /tmp/optimization.sh
- %end
配置文件中的%packages指的是安装系统时,安装的软件包,截止到%end,%post指的是系统安装完成后执行的命令,一般的命令或者脚本都是在这个范围里,有的ks文件还会有%pre,它的意思是在系统安装前执行的命令,因为系统尚未安装,所以能够执行的命令也是非常少的,所以呢基本的命令或者脚本都是放在%post这个区间来做。
这里再给大家介绍两个命令:
[root@localhost kickstarts]# cobbler profile report #查看镜像对应的ks配置文件
Name : CentOS-7.6--x86_64
TFTP Boot Files : {}
Comment :
DHCP Tag : default
Distribution : CentOS-7.6--x86_64
Enable gPXE? :
Enable PXE Menu? :
Fetchable Files : {}
Kernel Options : {}
Kernel Options (Post Install) : {}
Kickstart : /var/lib/cobbler/kickstarts/sample_end.ks
Kickstart Metadata : {}
Management Classes : []
Management Parameters : <<inherit>>
Name Servers : []
Name Servers Search Path : []
Owners : ['admin']
Parent Profile :
Internal proxy :
Red Hat Management Key : <<inherit>>
Red Hat Management Server : <<inherit>>
Repos : []
Server Override : <<inherit>>
Template Files : {}
Virt Auto Boot :
Virt Bridge : xenbr0
Virt CPUs :
Virt Disk Driver Type : raw
Virt File Size(GB) :
Virt Path :
Virt RAM (MB) :
Virt Type : kvm
[root@localhost kickstarts]# cobbler profile edit --name=CentOS-7.6--x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks.cfg #为镜像配置默认的ks文件
至于ks文件,可以使用kickstart的图形化工具来生成,工具安装命令如下:
[root@localhost ~]# yum install system-config-kickstart
使用教程如下,在图形化界面输入system-config-kickstart:
PS:使用cobbler安装的机器,内存不能少于2G,否则就会报错,至于其他的配置,如果是虚拟情况,也尽量配置高点。
四、Cobbler-web配置管理与报错解决:
1.先说报错吧,安装后web访问https://192.168.249.10/cobbler_web,结果出现了报错,如下:
2.在网上找了下,果然不止我一个人遇到了这个问题,解决方法如下:
[root@localhost ~]# wget https://bootstrap.pypa.io/get-pip.py
[root@localhost ~]# python get-pip.py
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, . Please upgrade your Python as Python 2.7 won'of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/eport
Collecting pip
Downloading https://files.pythonhosted.org/packages/30/db/9e38760b32e3e7f40cce46dd5fb107b8c73840df38f0046d8e6514e675a1/p
|████████████████████████████████| .4MB 57kB/s
Collecting wheel
Downloading https://files.pythonhosted.org/packages/00/83/b4a77d044e78ad1a45610eb88f745be2fd2c6d658f9798a15e384b7d57c9/wheel-0.33.6-py2.py3-none-any.whl
Installing collected packages: pip, wheel
Successfully installed pip-19.2. wheel-0.33.
[root@localhost ~]# pip install Django==1.8.
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, . Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7. More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
Collecting Django==1.8.
Downloading https://files.pythonhosted.org/packages/a7/a2/f4e7926062f5c61d98e87b9d0365ca1a0fab6be599dbea90ce2fab27f395/Django-1.8.9-py2.py3-none-any.whl (6.2MB)
|████████████████████████████████| .2MB 56kB/s
Installing collected packages: Django
Found existing installation: Django 1.11.
Uninstalling Django-1.11.:
Successfully uninstalled Django-1.11.
Successfully installed Django-1.8.
[root@localhost ~]# systemctl restart httpd cobblerd
ok,果然解决了问题,在此感谢51CTO JasonMingHao 博主:
访问的账号密码为:cobbler/cobbler(没错,账号密码都一样)
3.管理选项详解:
咳咳,坦白了,这张图是我盗来的,再次感谢CSDN惨绿少年博主,具体的操作功能和命令行的操作实际上是一致的,具体的操作使用web端感觉也就那样子,都习惯命令行了,ok,cobbler教程到此结束,如有不足,欢迎私信,一起进步!
最后:附上文章的参考链接
https://www.linuxidc.com/Linux/2018-03/151347.htm
https://www.linuxidc.com/Linux/2019-05/158647.htm
https://www.cnblogs.com/linuxliu/p/7668048.html
https://blog.csdn.net/admin_root1/article/details/78911718
https://blog.51cto.com/13746824/2148981
https://blog.whsir.com/post-3157.html
批量装机工具cobbler简介及其安装使用的更多相关文章
- 安装批量装机工具cobbler过程
首先想到的自然是yum install cobbler,结果找不到这个包,又懒得去官网下源码安装,于是乎想到增加第三方yum源,之后继续yum install cobbler,搞定. 然后启动cobb ...
- 高并发 多线程批量ping工具 nbping简介和使用
nbping 简介 nbping是为解决局域网大批量IP实例或主机探活,采用go协程并发处理,可以自定义并发的协程数量和输出结果.效率远高于现有的批量ping工具. nbping具备如下特性 - 支持 ...
- Gerrit - 代码评审工具Gerrit简介与安装
1 - 前言 Code Review 代码评审是指在软件开发过程中,对源代码的系统性检查,改进代码质量,查找系统缺陷,保证软件总体质量和提高开发者自身水平. 简单的说,Code Review是用来确认 ...
- 【转】Mac端包管理工具——Homebrew简介及安装
Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...
- cobbler简介+安装
(介绍部分的内容部分是借鉴网上的非原创) 回顾pxe+kickstart PXE PXE(preboot execute environment,预启动执行环境) PXE启动原理: 当计 ...
- 批量Linux 网络安装环境建立工具cobbler/kickstart
批量Linux 网络安装环境建立工具网络安装服务器套件: Cobbler(Red Hat 2008年发布的项目) Kickstart(Red Hat08年前项目,相关脚本令人望而却步,现 ...
- Linux下批量管理工具pssh安装和使用
Linux下批量管理工具pssh安装和使用 pssh工具包 安装:yum -y install pssh pssh:在多个主机上并行地运行命令 pscp:把文件并行地复制到多个主机上 prsync:通 ...
- Linux装机利器Cobbler安装配置
Linux装机利器Cobbler安装配置 2011-05-27 15:31:05 分类: LINUX 一.安装环境 centos 5.4 关掉iptables 关掉 selinux selinux ...
- 数据采集工具Telegraf:简介及安装
接着上一篇博客:InfluxDB简介及安装,这篇博客介绍下Linux环境下Telegraf安装以及其功能特点... 官网地址:influxdata 官方文档:telegraf文档 环境:CentOS7 ...
随机推荐
- selenium处理弹窗
处理登录弹窗:https://www.cnblogs.com/TD1900/p/11938573.html #定位弹窗 ale = driver.switch_to.alert #处理方式 ale.a ...
- LRU算法与增强
概要本文的想法来自于本人学习MySQL时的一个知识点:MySQL Innodb引擎中对缓冲区的处理.虽然没有仔细研究其源码实现,但其设计仍然启发了我. 本文针对LRU存在的问题,思考一种增强算法来避免 ...
- 东拼西凑完成一个“前端框架”(4) - Tabs页
目录 东拼西凑完成一个后台 "前端框架" (1) - 布局 东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架&q ...
- js打乱数组排序
用到的知识点:Math.random()//用于打乱数组索引 random() 方法可返回介于 0(包含) ~ 1(不包含) 之间的一个随机数. var arr=[1,2,3,4,5,6]; for( ...
- pv操作与信号量详解
对于信号量,可以认为是一个仓库,有两个概念,容量和当前的货物个数. P操作从仓库拿货,如果仓库中没有货,线程一直等待,直到V操作,往仓库里添加了货物,为了避免P操作一直等待下去,会有一个超时时间. V ...
- wc命令统计目录下所有文件行数
想统计一下最近一个项目的代码行数,一个一个文件统计显然不是程序员的思维,wc命令可以统计一个文本的行数,结合find命令可以实现我的需求(注意符号):
- Redis有哪几种数据类型
Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). String(字符串) string 是 redi ...
- CSS | 圣杯布局、双飞翼布局 | 自适应三栏布局
圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式.两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局 虽然两者的实现方法略有差异,不过都遵循了以下要点: 1.两侧宽度固定 ...
- 《Java基础知识》Java包装类,拆箱和装箱
虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备“对象”的特性——不携带属性.没有方法可调用. 沿用它们只是为了迎合人类根深蒂固的习惯, ...
- sessionstorage中存储JSON数据
在web开发时,可能经常会用到sessionstorage存储数据,存储单个字符串数据变量时并不困难 var str = 'This is a string'; sessionstorage.setI ...