首页 > 其他分享 >运维基础

运维基础

时间:2023-01-11 15:11:06浏览次数:57  
标签:运维 etc 基础 jumpserver nginx zabbix ansible yum

阿里云镜像:https://developer.aliyun.com/mirror/

centos上有很多第三方的软件,yum需要安装epel源,才能进行下载

# 查看进程
ps -ef
# 查看端口
netstat -tunlp
# CURL
linux通过curl命令 访问网站通不通  -I 拿到服务器信息
# rpm 查询软件安装目录
rpm -ql nginx | grep index 
# vim 全部清空
dG 

nginx

源码安装的好处是,可以指定安装目录,配置文件,更加可控,而yum安装的是固定目录

# 源代码编译安装
具体查看博客园我的关注

虚拟主机的概念就是在web服务里的一个独立的网站站点,这个站点对应独立的域名(IP),具有独立的程序和资源目录,可以独立的对外提供服务。这个独立的站点配置是在nginx.conf中使用server{}代码块标签来表示一个虚拟主机。Nginx支持多个server{}标签,即支持多个虚拟主机站点

Nginx + 两台tomcat 实现负载均衡

Nginx部署在其中一台就可以

# 创建nginx用户不创建家目录 -M 是不创建家目录 -s /sbin/nologin 是不需要登录
useradd -s /sbin/nologin -M nginx
# 编译安装nginx
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-pcre

make && make install

tips:

模块 说明
--with-http_realip_module 此模块支持显示真实来源ip地址,主要用户nginx做前端负载均衡服务器使用
--with-http_gzip_static_module 这个模块指定压缩
--with-pcre 此模块支持rewrite功能

修改conf文件

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
        }

改为:

# 添加1
upstream tomcats{
	server 192.168.1.201:8080;
	server 192.168.1.202:8080;
}
server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
        	# 添加2
        	proxy_pass http://tomcats;
            root   html;
            index  index.html index.htm;
        } 
# 检查配置语法
nginx -t
# 重新加载
nginx -s reload

然后在tomcat下创建一个jsp

print time <%=new java.util.Date()%> 0000
# 另一个tomcat后面写1111

访问tomcat会随机显示0000 1111说明负载均衡成功了

如何把nginx服务设置为开机启动:

创建 /etc/init.d/nginx 通过这个文件中的命令对nginx进行操作start、stop、reload

在Nginx官网上的NGINX Init Scripts选择启动脚本,我这里是CentOS系统,选择 Red Hat NGINX Init Script, 将脚本拷贝到/etc/init.d/nginx

https://www.nginx.com/resources/wiki/start/topics/examples/initscripts/

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# chkconfig:   - 85 15
# description:  NGINX is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /etc/nginx/nginx.conf
# config:      /etc/sysconfig/nginx
# pidfile:     /var/run/nginx.pid

# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0

nginx="/usr/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/etc/nginx/nginx.conf"

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

lockfile=/var/lock/subsys/nginx

make_dirs() {
   # make required directories
   user=`$nginx -V 2>&1 | grep "configure arguments:.*--user=" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -`
   if [ -n "$user" ]; then
      if [ -z "`grep $user /etc/passwd`" ]; then
         useradd -M -s /bin/nologin $user
      fi
      options=`$nginx -V 2>&1 | grep 'configure arguments:'`
      for opt in $options; do
          if [ `echo $opt | grep '.*-temp-path'` ]; then
              value=`echo $opt | cut -d "=" -f 2`
              if [ ! -d "$value" ]; then
                  # echo "creating" $value
                  mkdir -p $value && chown -R $user $value
              fi
          fi
       done
    fi
}

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    make_dirs
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    sleep 1
    start
}

reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $prog -HUP
    retval=$?
    echo
}

force_reload() {
    restart
}

configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

tips:记得要修改路径

nginx文件 本机路径 脚本路径
nginx执行文件 /opt/nginx1-12/sbin/nginx /usr/sbin/nginx
nginx.conf配置文件 /opt/nginx1-12/conf/nginx.conf /etc/nginx/nginx.conf

配置好init.d就可以使用命令控制nginx

service nginx start &
service nginx stop

下面配置开机启动

方式一:在/etc/rc.local中配置

可以将此命令加入到rc.local文件中,这样开机的时候nginx就默认启动了

vi /etc/rc.local

加入一行 /etc/init.d/nginx start 保存并退出,下次重启会生效

方式二:将nginx配置成自启动的服务

chmod a+x /etc/init.d/nginx 
chkconfig --add /etc/init.d/nginx
chkconfig nginx on
chkconfig nginx --list

ansible

ansible管理机器

yum install ansible

rpm -ql ansible|grep -E '^/etc/|^/usr/bin'
/etc/ansible
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles
/usr/bin/ansible
/usr/bin/ansible-config
/usr/bin/ansible-connection
/usr/bin/ansible-console
/usr/bin/ansible-doc
/usr/bin/ansible-galaxy
/usr/bin/ansible-inventory
/usr/bin/ansible-playbook


ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Jun 28 2022, 15:30:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]

ansible被管理机器

yum install libselinux-python

ansible管理方式

  • 传统的输入ssh密码
# 备份原始配置文件
cp /etc/ansible/ansible.cfg{,.ori}
# 配置文件hosts追加被管理机器
vim /etc/ansible/hosts
[chen]
192.168.76.83
# 然后就可以使用ansible远程执行命令了
ansible chen -m command -a 'hostname' -k -u root
# 但是会报错,因为管理机器没有ssh过被管理机器 ~/.ssh/known_hosts 文件中没有这个目标机器的指纹、需要ssh一下,就可以了

# 可以将密码信息配置到hosts文件,就不用每次输入密码了
# ansible_host ansible_port ansible_user ansible_ssh_pass
[chen]
192.168.76.83 ansible_port=22 ansible_user=root ansible_ssh_pass=123456
# 就不需要 -k 和 -u 了
ansible chen -m command -a 'hostname'
# 但是这样十分不安全,密码是明文的
  • 密钥管理
# 比起ssh密码管理更加安全
# 生成密钥
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
# 分发公钥
ssh-copy-id [email protected]
#可以执行ansible hosts文件也不需要明文的ssh密码
ansible chen -m command -a 'hostname'

分发公钥的脚本

#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=123456
Key_Path=~/.ssh/id_rsa.pub
for ip in 83
do
	sshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.76.$ip
done
# 非交互式分发需要使用sshpass指定ssh密码,通过-o StrictHostKeyChecking跳过ssh连接确认信息

ansible command 模块 不支持变量 特殊符号

# 列出所有ansible支持的模块
ansible-doc -l
# 查看模块具体用法
ansible-doc -s command
# chdir 切换到目录
ansible chen -m command -a "pwd chdir='/tmp'"
# creates 有这个文件跳过
ansible chen -m command -a "pwd chdir='~' creates='book.sql'"
# removes 没有这个文件跳过
ansible chen -m command -a "pwd chdir='~' removes='xbook.sql'"

shell 模块 支持特殊符号

# 带管道符
ansible chen -m shell -a "ps -ef|grep vim|grep -v grep"

script模块

ansible chen -m script -a "脚本路径"

监控

# 基础设施监控
ipmitool
# 存储监控
df 
fdisk
iotop
# cpu 监控
lscpu
uptime
top
htop
glances
# 内存
free
# 网络
iftop

# 应用监控
mysql redis nginx python php-fpm


zabbix5.0需要php7版本以上

# 取ip 注意是单引号
ifconfig ens33 | awk 'NR==2{print $2}'
# 关闭防火墙 需要重启linux才能生效
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
# 查看剩余内存 最好4个g
free -m
# 获取zabbix的下载源
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# 执行之后 yum源会多一个 zabbix.repo
ls /etc/yum.repos.d/
CentOS-Base.repo  epel.repo  repo_bak  zabbix.repo
# 更换zabbix.repo源为阿里的 -i 是不显示结果的意思
sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
# yum清空缓存
yum clean all
yum makecache
# 安装zabbix
yum install -y zabbix-server-mysql zabbix-agent
# 安装scl 可以让系统安装多个版本的软件,而不会影响系统依赖环境
yum install centos-release-scl -y
# 编辑zabbix.repo 将[zabbix-frontend] 的enable改为1

# 安装zabbix 前端环境 而且安装到的是scl环境
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
# 安装zabbix所需的数据库mariadb
yum install mariadb-server -y
systemctl enable --now mariadb
# 初始化数据库
mysql_secure_installation
# 添加数据库用户
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by '123456';
grant all privileges on zabbix.* to zabbix@localhost;
#导入数据
zcat /usr/share/doc/zabbix-server-mysql-5.0.30/create.sql.gz|mysql -uzabbix -p123456 zabbix
#配置zabbixserver连接mysql

sed -i.ori '124a DBPassword=123456' /etc/zabbix/zabbix_server.conf
#检查一下是否修改成功
grep '^DBPassword' /etc/zabbix/zabbix_server.conf
# 修改php配置文件中的时区
sed -i.ori '25a php_value[date.timezone] = Asia/Shanghai' /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
# 检查一下
grep timezone /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
# 启动zabbix服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm 
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm 
# 浏览器访问
http://192.168.76.169/zabbix

被监控机器的安装,用于数据采集

# 安装zabbix-agent2 使用golang语言编写的 老的是用c语言写的agent
# 注意时间正确
yum install ntpdate -y
ntpdate -u ntp.aliyun.com
# 时区的统一
mv /etc/localtime{,.bak}
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 配置好zabbix的yum源 参考服务端的
yum install -y zabbix-agent2
# 查看文件
vim /etc/zabbix/zabbix_agent2.conf
ls -l /usr/sbin/zabbix_agent2
# 启动
systemctl enable --now zabbix-agent2
netstat -lnp|grep -v grep|grep zabbix
# 修改配置文件,先来看一下配置
grep -Ev '^#|^$' /etc/zabbix/zabbix_agent2.conf 
hostnamectl set-hostname zabbix-agent01
sed -i 's/Server=127.0.0.1/Server=192.168.76.169/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/Hostname=Zabbix server/Hostname=zabbix-agent01/' /etc/zabbix/zabbix_agent2.conf
# 重启zabbix
systemctl restart zabbix-agent2

测试连通性

# 服务端安装zabbix-get
yum install zabbix-get -y
# 测试命令
zabbix_get -s 192.168.76.88 -p 10050 -k "system.cpu.load[all,avg1]"
0.000000
zabbix_get -s 192.168.76.88 -p 10050 -k "agent.ping"
1
zabbix_get -s 192.168.76.88 -p 10050 -k "system.hostname"

解决乱码问题

# 服务端安装一个字体
yum install wqy-microhel-fonts -y
\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc  /usr/share/fonts/dejavu/DejaVuSans.ttf

跳板机&堡垒机

jumperserver 是python3编写的,旧版本是python3

准备

python =3.6.x
mysql server > 5.6 or mariadb > 5.6 在centos7上,mysql由于收费了,开源社区就诞生了mariadb
redis 数据库


部署jumpserver,初始化环境

# 1. 环境初始化,关闭防火墙
iptables -F
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
systemctl disable --now firewalld
# 2.配置yum源,以及epel源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
yum makecache
# 3.安装依赖软件
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet al psmisc nethoge glances bc ntpdate openldap-devel

yum install -y git python-pip gcc automake autoconf python-devel sshpass readline-devel 
# 4.修改系统字符集
localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf

部署mysql

# 部署数据库mysql5.6
wget https://downloads.mysql.com/archives/get/p/23/file/MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar

tar -xf MySQL-5.6.49-1.el7.x86_64.rpm-bundle.tar -C ./mysql56_rpm/
yum localinstall ./*.rpm
# 修改配置文件
vim /etc/my.cnf
:%s/mariadb/mysql/g
# 查看生成的密码
cat ~/.mysql_secret
# 进入mysql 
# 修改密码
mysqladmin -uroot -pxOvD6WhA1rJCgh_Y password 123456
# 或者
update mysql.user set passowrd=password('123456') where user='root'
# 创建数据库
create database jumpserver default charset 'utf8';
# 创建用户
create user 'jumpserver'@'%' identified by '123456';
# 授权
grant all privileges on jumpserver.* to 'jumpserver'@'%' identified by '123456';
flush privileges

部署python3.6

# 1.下载python3.6源代码
wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz
tar -xvf Python-3.6.10.tgz
# 安装依赖
yum install zlib zlib-devel openssl openssl-devel -y

# 编译安装
./configure --prefix=/opt/python36
make && make install

# 配置环境变量
vim /etc/profile
追加
PATH="/opt/python36/bin:$PATH"
source /etc/profile
echo $PATH

python3创建虚拟环境

# 创建python运行虚拟环境virtualenv
# 目的是有很多python项目,防止不同项目之间依赖冲突,为每一个项目做一个虚拟环境
# python3是一个解释器,还有一个工具叫pip3,这是给python3安装模块的

# 安装virtualenv
pip3 install virtualenv
# 如果提示缺少ssl,得删掉编译安装的python3,安装openssl工具,再重新安装python3
vim /etc/profile # 删除环境变量
rm -rf python36
yum install openssl openssl-devel -y
# 根据上面的笔记重新解压编译安装python3

# 安装virtualenv
pip3 install virtualenv -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
# 使用虚拟环境,再创建出一个python3解释器
# 进入python3的安装目录
virtualenv --python=python3 新的解释器名字(例如jmp_venv1)

# 激活虚拟环境,进入虚拟环境目录,默认修改了环境变量
source activate # python3 默认就修改为虚拟环境的了


# 去激活,环境变量就还原了,这个命令是隐藏的
deactivate

redis 缓存型数据库

# 1. 安装redis的形式
rpm包手动安装,需要手动解决依赖,不推荐使用
yum自动化安装,适合软件调试学习使用,安装自动解决依赖,很好用
源代码编译安装redis
# 2. 选择yum自动化安装即可
# 配置好yum源
yum install redis -y
# 使用
redis-cli

jumpserver 手动的后台部署

# 安装依赖
yum install -y bash-completion vim lrzsz wget expect net-tools nc nmap tree dos2unix htop iftop iotop unzip telnet al psmisc nethoge glances bc ntpdate openldap-devel
# 下载安装包进行安装
wget https://github.com/jumpserver/jumpserver/releases/download/v2.1.0/jumpserver-v2.1.0.tar.gz
tar -zxf jumpserver-v2.1.0.tar.gz
ln -s /root/jumpserver-v2.1.0 /root/jumpserver

# 安装运行所需模块
# 先激活虚拟环境,在虚拟环境下安装模块
source /opt/python36/bin/jmp_venv1/bin/activate
pip3 install -r /root/jumpserver/requirements/requirements.txt


如何修改pip的下载源

mkdir ~.pip
vim ~.pip/pip.conf
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com
:x

或者

pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/

修改配置文件

# 生成密钥
if [ "$SECRET_KEY" = "" ]; then SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`; echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc;echo $SECRET_KEY; else echo $SECRET_KEY; fi

# 生成BOOTSTRAP_TOKEN
if [ "$BOOTSTRAP_TOKEN" = "" ]; then BOOTSTRAP_TOKEN=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`; echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc;echo $BOOTSTRAP_TOKEN; else echo $BOOTSTRAP_TOKEN; fi

# 编辑配置文件
cp config_example.yml config.yml
# vim 将密钥信息和数据库密码修改
sed -i 's/SECRET_KEY:/SECRET_KEY: CAbxbYZQAsoMo76l84Ckwn3yGyjpxxen5GaMjNbbZUH01E1KlE/' config.yml
sed -i 's/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: KQziHFKNgHxmlb9S/' config.yml
# 注意数据库密码要带引号
grep -Ev '^#|^$' config.yml

对python程序进行数据库迁移

# 生成jumpserver数据库表信息
python3 /root/jumpserver/apps/manage.py makemigrations
python3 /root/jumpserver/apps/manage.py migrate
# 启动后台项目
/root/jumpserver/jms start -d
# 通过 http://192.168.76.169:8080/ 可以访问到堡垒机后台

部署koko/coco组件

# 之前使用python写的叫coco,现在使用go语言改成了koko,提供ssh和websocket接口
wget https://github.com/jumpserver/koko/releases/download/v2.1.0/koko-v2.1.0-linux-amd64.tar.gz
tar -zxf koko-v2.1.0-linux-amd64.tar.gz
ln -s koko-v2.1.0-linux-amd64 koko
cp config_example.yml config.yml
echo $BOOTSTRAP_TOKEN
vim config.yml
# 启动koko
./koko -d
ps -ef|grep koko
tail -f koko/data/logs/koko.log

搭建guacamole的时候没成功,手动部署这个有点难

jumpserver一键部署

# 默认会安装到 /opt/jumpserver-installer-v2.21.0 目录,如果类似ubuntu提示没权限,请加上sudo即可
curl -sSL https://github.com/jumpserver/jumpserver/releases/download/v2.21.0/quick_start.sh | bash
cd /opt/jumpserver-installer-v2.21.0

# 启动,如果权限问提,同意前面加上sudo即可。
./jmsctl.sh start

# 停止
./jmsctl.sh down

# 卸载
./jmsctl.sh uninstall

# 帮助
./jmsctl.sh -h

>>> 安装完成了
1. 可以使用如下命令启动, 然后访问
cd /opt/jumpserver-installer-v2.21.0
./jmsctl.sh start

2. 其它一些管理命令
./jmsctl.sh stop
./jmsctl.sh restart
./jmsctl.sh backup
./jmsctl.sh upgrade
更多还有一些命令, 你可以 ./jmsctl.sh --help 来了解

3. Web 访问
http://192.168.76.169:80
默认用户: admin  默认密码: admin

4. SSH/SFTP 访问
ssh -p2222 [email protected]
sftp -P2222 [email protected]

5. 更多信息
我们的官网: https://www.jumpserver.org/
我们的文档: https://docs.jumpserver.org/

jumpserver的使用

https://www.jumpserver.org/video.html

# 客户机添加跳板机的input规则,执行下面两行,只允许跳板机ssh到它
iptables -A INPUT -s 跳板机的ip -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT

标签:运维,etc,基础,jumpserver,nginx,zabbix,ansible,yum
From: https://www.cnblogs.com/bagdje/p/17043825.html

相关文章

  • MySql基础-笔记2 -数据库创建、删除、选择等操作
    在MySql数据库基础1-Windows下安装配置图文教程的基础上,我们来了解如何对数据库进行操作,比如常见的创建数据库、删除数据库、选择数据库等;(目录)1、连接数据库简单的方......
  • JDBC1 - 基础
    JDBC-技术路线接口在开发中的作用、驱动配置、JDBC编程六步、Statement完成增、删、改、连接数据库的信息在属性资源文件中配置、安装PowerDesigner、设计用户表、State......
  • UE基础知识
    一、基础概念Lod:根据摄像机距离对模型网格体进行面数的优化产生形变MipMap:解决远处贴图闪硕的问题,在UE5中制作贴图资产时尽量做到2的n次方*2的n次方Nanite:场......
  • UML基础: 第 4 部分 - 部署圖 (Deployment Diagram)
    部署圖用於可視化部署軟件組件的系統物理組件的拓撲(topology)。部署圖用於描述系統的靜態部署視圖。部署圖由節點及其關係組成。部署圖的目的術語部署本身描述了該圖的目......
  • 整除与同余基础
    欧几里得算法鉴于后面有很多和\(\gcd\)相关的东西,拿这个起手,顺便规定\((a,0)=(0,a)=a\)。在群论意义下,对于\(\gcd\)操作,\(1\)是零元,我们这么规定是让\(0\)做......
  • linux基础:2、前期必备知识、系统运行命令、快捷方式命令、目录结构相关命令、文件与文
    linux基础一、前期必备知识1、命令提示符[root@jasonNB~]#root:表示用户名信息@:分隔符jasonNB:主机名称~:表示所处目录位置,默认为家目录......
  • Java基础语法1
    Java基础语法1注释、标识符、关键字注释Comments注释并不会被执行,是给我们写代码的人看的。书写注释是个非常好的习惯,平时就要注意规范单行注释//多行注释/*......
  • CAN总线基础
    CAN总线(一)原文出处:http://www.cnblogs.com/jacklu/p/4729638.html嵌入式的工程师一般都知道CAN总线广泛应用到汽车中,其实船舰电子设备通信也广泛使用CAN,随着国家对......
  • 【FPGA基础】同步复位与异步复位
    一、何时何处需要复位参考Xilinx官方文档《UltraFastDesignMethodologyGuideforFPGAsandSoCs(UG949)》:Xilinx器件具有专用的全局置位/复位信号(global......
  • 区块链特辑——solidity语言基础(四)
    Solidity语法基础学习七、事件:事件Event·日志(log),是用来快速索引并查询过往资料的手段。·而solidity是透过“事件”在区块链上写下日志,使用者或由触发的事件所产生的......