Ubuntu-设置固定-IP-最简单的方法

因为鼠标共享软件需要使用网络连接,台式机的 IP 总是变化导致笔记本每次重启都要重新配置 IP,所以我给 ubuntu 设置了固定 IP,方法很简单,直接在系统设置里面配置就可以了。 1. 查看默认网络配置打开系统「Setting」,打开「Network」: 我连接的有线网络: 启动终端,「ifconfig」查看下掩码: 这里记录下你的配置,后续要用到: IPv4:ip 地址Default Route:网关地址Mask:255.255.255.0DNS:我这有 2 个DNS2. 手动添加固定 IP打开 Network 的 「Setting」,界面可能不太一样: 点击「IPv4」,Address 选项设置为「Manual」手动模式,其他配置如下: 设置一个静态的 IP,为了防止与其他同学的电脑冲突,我设置了 210 的地址,即:192.168.0.210,建议你也设置一个 200+ 的地址其他的 Netmask、Gateway、DNS 跟之前一样配置好后点击右下角的「Apply」,然后重启电脑就 ok 了!

June 16, 2020 · 1 min · jiezi

树莓派烧写Ubuntu20

默认用户名密码:ubuntu ubuntu输入完毕后,按照提示重置ubuntu的密码即可。

June 16, 2020 · 1 min · jiezi

如何限制-windwos-wsl内存和cpu使用率

Windows Build 19041和更高版本中可用 您可以通过将.wslconfig文件放入用户文件夹的根目录来配置全局WSL选项:C:\Users\<yourUserName>\.wslconfig.这是一个示例.wslconfig文件: [wsl2]kernel=C:\\temp\\myCustomKernelmemory=4GB # 将WSL 2中的VM内存限制为4 GBprocessors=2 #使WSL 2 VM使用两个虚拟处理器

June 2, 2020 · 1 min · jiezi

Windows10家庭版搭建WSL加Docker的开发环境

前言WSL也就是win10更新的一个对开发者比较友好的点了,它并不是虚拟机,而是一个模拟环境,并不能支持Linux中的各种操作,但是和windows交互非常方便,消耗很低,所以对我这种菜鸟来说做开发和测试比较合适。docker的好处这边也就不说了,可以去了解一下(主要是因为我也是第一次用- -),这篇文章主要是将如何安装,对原理和概念的东西不会解释。 其实我要搭建这样的开发环境的原因比较简单,主要是下面两个原因:1.公司的服务器上的服务就是Linux加docker的模式,我要模拟这样的的结构方便测试和开发,正好学习一下2.我的开发环境是windows的,我希望借助docker和WSL,把我的开发环境搞得干净一点(为啥不直接用Linux系统呢,只是因为我觉得一个电脑双系统受不了..) 安装WSLwin10商店里面就可以直接安装,这里的坑只有一个,就是要开启Linux子系统服务 安装Docker这里的坑就比较多了,希望我踩的坑能对你有帮助环境:win10家庭版 在WSL里面安装Docker参考博客:https://yeasy.gitbooks.io/docker_practice/install/参照上面文章里面Ubuntu的安装方法安装完成之后,启动docker sudo service docker start这里就会报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?说的意思就是连接不到守护线程,虽然我也不知道这个守护线程是干嘛的,然后找到了一个国外小哥的博客:https://medium.com/@sebagomez/installing-the-docker-client-on-ubuntus-windows-subsystem-for-linux-612b392a44c4最关键点就是你在WSL里面装docker,必须先安装Docker For Windows在你的系统上。OK,那我们就去安装这个呗。去官网上面下载。https://docs.docker.com/docker-for-windows/install/然后你就会发现安装不上,因为docker不支持win10家庭版...有些博客里面会说用docker toolbox的东西代替,这里我不建议用,反正我没代替成功。解决办法第一步:修改注册表,让安装程序误以为我们是win10 pro定位到HKEY_LOCAL_MACHINEsoftwareMicrosoftWindows NTCurrentVersion修改EditionId的值为Professional然后还有要开启Hyper-v服务,这个东西在win10家庭版里面也是没有的,所以我们需要安装。 pushd “%~dp0”dir /b %SystemRoot%servicingPackagesHyper-V.mum >hyper-v.txt for /f %%i in (‘findstr /i . hyper-v.txt 2^>nul’) do dism /online /norestart /add-package:"%SystemRoot%servicingPackages%%i" del hyper-v.txt Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL 将上面的复制到.cmd文件中,然后用管理员运行,安装完毕之后重启电脑,在 安装和启用windows功能 中打开hyper-v服务,启动docker for windows。这时候我们再回到上面没有启用守护线程的问题然后回到ubuntun,输入 echo "export DOCKER_HOST=localhost:2375" >> ~/.bash_profiledocker version也就是告诉docker,他的守护线程接口,docker version检查是否启动成功 ...

November 3, 2019 · 1 min · jiezi

ValueError-Unable-to-determine-SOCKS-version

Try   export all_proxy="socks5://10.3.100.207:8080"     if you want to use socks proxy. Else   export all_proxy=""       for no proxy. Hope This works. :D 国内的教程确实垃圾

November 3, 2019 · 1 min · jiezi

ubuntu配置阿里云源

ubuntu配置阿里云源换成国内最快的阿里云源 第一步:备份原来的源文件cd /etc/apt/ 然后会显示下面的源文件sources.list 输入命令 sudo cp sources.list sources.list.bak 就是将sources.list备份到sources.list.bak 第二步:替换源阿里云源的文件 deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##测试版源 deb http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # 源码 deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse ##测试版源 deb-src http://mirrors.aliyun.com/ubuntu/ xenial-proposed main restricted universe multiverse # Canonical 合作伙伴和附加 deb http://archive.canonical.com/ubuntu/ xenial partner deb http://extras.ubuntu.com/ubuntu/ xenial main 替换并保存 sudo gedit sources.list打开文件,替换成阿里云文件即可 ...

November 2, 2019 · 1 min · jiezi

Ubuntu-1804-下配置-MySQL-Server

Ubuntu 18.04 下配置 MySQL ServerMySQL是一个免费且广泛使用的开源关系数据库。如果您知道自己需要数据库但对所有可用选项知之甚少,那么这是一个不错的选择。安装MySQL sudo apt-get update sudo apt-get install mysql-server启动MySQL服务安装完成后,您可以通过运行以下命令来启动数据库服务。如果该服务已启动,则会显示一条消息,通知您该服务已在运行: systemctl start mysql重启时启动要确保在重新引导后启动数据库服务器,请运行以下命令: systemctl enable mysql跨权使用mysql sudo mysql(用于忘记root密码时配置MySQL)添加数据库用户当应用程序使用root用户连接到数据库时,它们通常具有超出所需权限的权限。您可以添加应用程序可用于连接到新数据库的用户。 添加新的用户: 这里以user:yang,password:yang 为例允许本地IP访问localhost的MySQL数据库 use mysql; select host,user from user; +-----------+------------------+ | host | user | +-----------+------------------+ | localhost | debian-sys-maint | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ mysql> create user 'yang'@'localhost' identified by 'yang'; select host,user from user; +-----------+------------------+ | host | user | +-----------+------------------+ | localhost | debian-sys-maint | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | | localhost | yang | +-----------+------------------+允许外网IP访问数据库,所有的IP都可以访问该数据库 mysql> create user 'yang'@'%' identified by 'yang';创建完成后,刷新 mysql> flush privileges;用户授权更改用户赋权,并刷新授权 mysql> GRANT ALL PRIVILEGES ON *.* TO 'yang'@'%' IDENTIFIED BY 'yang' WITH GRANT OPTION; mysql> flush privileges;开启外网访问权限开启MySQL远程访问 sudo ufw allow mysql查看3306端口是否对外开放 netstat -an | grep 3306 tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN如果显示如上,说明mysql端口目前只监听本地连接127.0.0.1。然后需要修改mysql的配置文件 ...

November 2, 2019 · 2 min · jiezi

ubuntu-19-git安装与入门

1 安装安装方式主要有两种,即通过Apt和source: 1.1 通过Apt安装:官网上提供的命令是: $ sudo add-apt-repository ppa:git-core/ppa1 中间暂停时,按回车键Enter继续安装。 $ sudo apt-get update$ sudo apt-get install git  12安装下载完成后,可以使用下面的命令行,确认git的版本: $ git --version 1 1.2 通过Source安装首先,安装一些git依赖的软件: $ sudo apt-get install build-essential libssl-dev libcurl4-gnutls-dev libexpat1-dev gettext unzip1安装完成后,可以在GitHub上公布的Git Project,选择Tags中的最新版本2.7.2: 复制下压缩文件的下载链接(Downloads按钮鼠标右键): 使用命令行下载: $ wget https://github.com/git/git/ar... -O git.zip1解压,并路径转换到git下: $ unzip git.zip$ cd git-*12编译源码: $ make prefix=/usr/local all$ sudo make prefix=/usr/local install12编译完成后,同样可以利用上述的语句查看git版本。 如果,后面还想继续更新,可以这样: $ git clone https://github.com/git/git.git1访问的链接(URL)可以在上述的GitHub项目中拷贝: 然后像上面一样,编译源码: $ make prefix=/usr/local all$ sudo make prefix=/usr/local install12就会在git安装位置重装和重编译新的版本(会将旧版本覆盖掉)。 ...

November 2, 2019 · 1 min · jiezi

Linux-查看某个用户组的所有用户Python实现

code# encoding: utf-8# author: walker# date: 2017-07-31# summary: Linux 查看某个用户组的所有用户# filename: group_users.pyimport sys #打印某个组的所有成员def ShowGroupUsers(group_name): group_id = 'err' users = '' with open('/etc/group') as f: for line in f: line = line.strip() vec = line.split(':') if vec[0] == group_name: group_id = vec[2] users = vec[3] if group_id == 'err': print('not find %s in /etc/group') return False with open('/etc/passwd') as f: for line in f: line = line.strip() vec = line.split(':') if vec[3] == group_id: users += ',' + vec[0] user_set = set(filter(lambda x:x, users.split(','))) users = ','.join(sorted(list(user_set))) print('%s(%s) users: %s' % (group_name, group_id, users)) return Trueif __name__ == '__main__': ShowGroupUsers(sys.argv[1])使用python group_users.py groupX

October 17, 2019 · 1 min · jiezi

Linux-用户管理相关命令walker

相关文件口令文件(/etc/passwd)中的登录项有7个以冒号分隔的字段组成,依次是:登录名:加密口令:用户ID:组ID:注释字段:起始目录:shell程序加密口令存放在 /etc/shadow 中。组文件(/etc/group)将组名映射为数值的组ID,其中4个字段依次是:# 注意用户列表为空时并不代表改组没有用户组名称:组密码:组ID:该组用户列表(以逗号分隔)用户相关创建用户# ubuntuuseradd walker -m -g sudo -s /bin/bash# CentOSuseradd walker -m -g wheel -s /bin/bash# -m :创建 /home 下用户目录# -g sudo :将此用户加入 sudo 组# -s /bin/bash :设置默认 shell 为 /bin/bash删除用户userdel -rf testUser创建或修改用户密码passwd walker查看用户登录日志。last #默认读取 /var/log/wtmp(登录成功的日志) lastb #默认读取 /var/log/btmp(登录失败的日志)lastlog # 读取 /var/log/lastlog(所有用户最近一次登录登录成功的日志)查看当前用户 shellecho $SHELL查看当前登录用户。who am iwhoamiwhow用户组相关查看用户所属组。id walker更改基本组。usermod -g groupA walker更改附加组。usermod -G groupB walker添加附加组usermod -a -G groupB walker查看某个用户组的所有用户OTHER修改主机名:编辑 /etc/hostname 。sudo 很慢?在 /etc/hosts 添加 hostname 到 127.0.0.1 的映射。本文出自 walker snapshot

October 17, 2019 · 1 min · jiezi

Linux-系统资源查看walker

OS 版本lsb_release -auname -acat /proc/version系统资源概览top内存free -hcat /proc/meminfo磁盘# 磁盘容量及分区状况(不能查看未挂载分区)df -Th# 磁盘容量及分区状况(可以查看未挂载分区)sudo fdisk -lsudo lsblk -f# /lib 目录大小du -sh /lib # /lib 子目录大小du -sh /lib/*CPU#查看CPU信息cat /proc/cpuinfo# 查看CPU型号cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数# 查看物理CPU个数cat /proc/cpuinfo| grep "physical id"| sort| uniq| wc -l# 查看每个物理CPU中core的个数(即核数)cat /proc/cpuinfo| grep "cpu cores"| uniq# 查看逻辑CPU的个数cat /proc/cpuinfo| grep "processor"| wc -l本文出自 walker snapshot

October 17, 2019 · 1 min · jiezi

关于-SUID-SGID-和-Stickywalker

SUIDSet-user IdentificationSUID 属性只能运用在可执行文件上,当用户执行该执行文件时,会临时拥有该可执行文件所有者的权限。示例# 查找具有 SUID 的文件root@qhost:/home/walker# sudo find / -perm /4000walker@qhost:~$ ll /bin/su -rwsr-xr-x 1 root root 40128 May 17 2017 /bin/su*walker@qhost:~$ ll /usr/bin/sudo-rwsr-xr-x 1 root root 136808 Jul 4 2017 /usr/bin/sudo*walker@qhost:~$ ll /usr/bin/passwd -rwsr-xr-x 1 root root 54256 May 17 2017 /usr/bin/passwd*walker@qhost:~$ stat --format=%a /usr/bin/passwd4755SGIDSet-group identificationSGID 属性可以应用在目录或可执行文件上。当SGID属性应用在目录上时,该目录中所有建立的文件或子目录的拥有组都会是该目录的拥有组。示例# 查找具有 SGID 的目录或文件root@qhost:/home/walker# sudo find / -perm /2000# 目录root@qhost:/home/walker# ll -d /var/cache/mandrwxr-sr-x 28 man root 4096 Oct 11 06:25 /var/cache/man/# 可执行文件walker@qhost:~$ ll -H /usr/bin/write -rwxr-sr-x 1 root tty 14752 Mar 1 2016 /usr/bin/write*Stickysticky Bit,saved-text bit,粘着位/粘滞位,也被称作防删除位。Sticky 属性只能应用在目录,当目录拥有 Sticky 属性所有在该目录中的文件或子目录无论是什么权限只有文件或子目录所有者和root用户能删除。示例# 查找具有 sticky 的目录root@qhost:/home/walker# sudo find / -perm /1000walker@qhost:~$ ll -d /tmpdrwxrwxrwt 14 root root 4096 Oct 11 09:53 /tmp/本文出自 walker snapshot

October 17, 2019 · 1 min · jiezi

Ubuntu1804-安装MySQL以及设置远程访问

安装MySQL$ sudo apt-get install mysql-server$ sudo apt install mysql-client$ sudo apt install libmysqlclient-dev检查是否安装成功 $ netstat -tap | grep mysql若安装成功会有如下输出 注意: 如果出现command not found: netstat,请先安装 net-tools,然后再检查是否成功: sudo apt-get install net-tools设置远程访问编辑MySQL的配置文件 $ vim /etc/mysql/mysql.conf.d/mysqld.cnf 把下面的内容注释 bind-address = 127.0.0.1以root权限进入MySQL命令行,执行开启权限命令,本示例中MySQL中用户与密码皆为root grant all on *.* to root@'%' identified by 'root' with grant option;flush privileges;重启MySQL $ sudo /etc/init.d/mysql restart

October 14, 2019 · 1 min · jiezi

Nginx简易入门

Nginx的简介"Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡。"-----官方介绍Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP/POP3/SMTP代理服务器;nginx可作为一个HTTP服务器进行网站的发布处理,另外nginx可以作为反向代理进行负载均衡的实现。 优点 支持海量高并发:采用IO多路复用epoll。官方测试Nginx能够支持5万并发链接,实际生产环境中可以支撑2-4万并发连接数。内存消耗少:在主流的服务器中Nginx目前是内存消耗最小的了,比如我们用Nginx+PHP,在3万并发链接下,开启10个Nginx进程消耗150M内存。免费使用可以商业化:Nginx为开源软件,采用的是2-clause BSD-like协议,可以免费使用,并且可以用于商业。配置文件简单:网络和程序配置通俗易懂,即使非专业运维也能看懂。在Ubuntu 18.04 上安装Nginx安装 sudo apt-get updatesudo apt-get install nginx 调整防火墙 Nginx在安装时将自己注册为ufw服务,这使得Nginx可以直接访问Nginx。 在测试Nginx之前,需要调整防火墙软件以允许访问该服务。 列出应用配置文件: sudo ufw app list 如上图,Nginx有三种配置文件可用: Nginx Full :此配置文件打开端口80(正常,未加密的网络流量)和端口443(TLS / SSL加密流量)Nginx HTTP :此配置文件仅打开端口80(正常,未加密的网络流量)Nginx HTTPS :此配置文件仅打开端口443(TLS / SSL加密流量)建议您启用最严格的配置文件,该配置文件仍将允许您配置的流量。 由于我们尚未在本指南中为我们的服务器配置SSL,因此我们只需要允许端口80上的流量。 启用: sudo ufw allow 'Nginx HTTP'验证更改: sudo ufw status正常情况下会输出如下: 但是,也有可能出现以下情况: 解决方法: sudo ufw enable检查你的Web服务器 systemctl status nginx 正如上面所见,服务已经成功启动。 在浏览器测试 在浏览器地址栏输入你的服务器IP地址。如果在本地安装,可输入 localhost,你的浏览器会显示nginx的欢迎页面。 Nginx配置文件解读进入/etc/nginx目录,打开nginx.conf文件 #运行用户user www-data; #worker_processes定义了nginx对外提供web服务时的worder进程数。最优值取决于许多因素,包括(但不限于)CPU核的数量、存储数据#的硬盘数量及负载模式。#不能确定的时候,将其设置为可用的CPU内核数将是一个好的开始(设置为“auto”将尝试自动检测它)。worker_processes auto; #进程pid存放位置pid /run/nginx.pid; #包含的子配置项位置和文件include /etc/nginx/modules-enabled/*.conf; # 事件模块events { # worker_connections设置可由一个worker进程同时打开的最大连接数 worker_connections 768; # multi_accept 告诉nginx收到一个新连接通知后接受尽可能多的连接。 # multi_accept on;}# http核心模块http { ## # Basic Settings ## # sendfile 是否启动高效传输文件模式 #sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据. # 如果这个参数不开启, 会先在用户空间(Nginx进程空间)申请一个buffer, 用read函数把数据从磁盘读到 #cache, # 再从cache读取到用户空间的buffer, 再用write函数把数据从用户空间的buffer写入到内核的buffer, # 最后到tcp socket. 开启这个参数后可以让数据不用经过用户buffer, 默认off. sendfile on; # tcp_nopush必须在sendfile开启模式才有效, 告诉Nginx在一个数据包里发送所有头文件, 而不一个接一个 # 发送, 默认off. tcp_nopush on; # tcp_nodelay 告诉Nginx不要缓存数据, 而是一段一段的发送, 当需要及时发送数据时, 就应该开启这个功 能, 这样发送一小块数据信息时就能够立即得到返回值, 默认on. tcp_nodelay on; # keepalive_timeout 给客户端分配keep-alive链接超时时间。服务器将在这个超时时间过后关闭链接。 # 我们将它设置低些可以让ngnix持续工作的时间更长。 keepalive_timeout 65; # 影响散列表的冲突率, types_hash_max_size越大, 就会消耗更多的内存, 但散列key的冲突率会降低, # 检索速度就更快. types_hash_max_size越小, 消耗的内存就越小, 但散列key的冲突率可能上升 types_hash_max_size 2048; # 是否显示版本号, 若不显示, 浏览器访问时抓包, 查看HTTP响应的Server头没有版本号, 默认on # server_tokens off; # 保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size # 所控制, 若Nginx给出需要增大hash max size或hash bucket size的提示, 那么首要的是增大前一个参数 # 的大小. # server_names_hash_bucket_size 64; # server_names_hash_max_size 512; # 若为off, 则会以当前服务器的IP地址进行拼接URL. 若为on, 则会首先查找server_name, # 若没有找到, 则会查找请求头的HOST字段, 若还是没有, 则以当前服务器的IP进行拼接, 默认on. # server_name_in_redirect off; # 设定MIME类型, 类型由mime.type文件定义. include /etc/nginx/mime.types; default_type application/octet-stream; ## # SSL Settings ## ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE ssl_prefer_server_ciphers on; ## # Logging Settings ## # 每一个访问请求的记录位置 access_log /var/log/nginx/access.log; # Nginx错误信息的记录位置 error_log /var/log/nginx/error.log; ## # Gzip Settings ## # 是否启动Gzip gzip on; # 和HTTP头有关系, 加个vary头, 给代理服务器用的, 有的浏览器支持压缩, 有的不支持, # 为了避免浪费不支持的也压缩, 根据客户端的HTTP头来判断, 是否需要压缩. # gzip_vary on; # Nginx作为反向代理的时候该参数起作用, 根据某些请求和应答来决定是否在对代理请求的应答启用Gzip压缩, # 是否压缩取决于请求头中的"Via"字段, 指令中可以同时指定多个不同的参数, 可选值值为: # off - 关闭所有的代理结果数据的压缩 # expired - 启用压缩,如果header头中包含 "Expires" 头信息 # no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息 # no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息 # private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息 # no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息 # no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息 # auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息 # any - 无条件启用压缩 # 默认为off. # gzip_proxied any; # Gzip压缩比, 值为1~9, 1的压缩比最小处理速度最快, 9的压缩比最大但处理最慢(传输快但比较消耗CPU) # gzip_comp_level 6; # 设置系统获取几个单位的缓存用于存储Gzip的压缩结果数据流, 4 8k代表: 按照原始数据大小以8k为单位的4倍 # 申请内存. # gzip_buffers 16 8k; # 识别HTTP的协议版本, 99.99%的浏览器都支持1.1, 所以可以不用设这个值, 保持系统默认即可, 默认1.1. # gzip_http_version 1.1; # 匹配MIME类型进行压缩 # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; ## 虚拟主机设置 # Virtual Host Configs ## # Nginx的配置很灵活, 支持include配置文件, 如果我们的域名都配置到nginx.conf, 那么这个文件就会比较 # 乱,也影响管理和阅读, 所以直接拆分出来, 分成不同的配置文件. include /etc/nginx/conf.d/*.conf; # 加载一个外部的配置文件, sites-enabled文件夹下只有一个default文件, # 这个外部的配置文件就是负责我们Nginx的默认代理, 也就是server块的配置. include /etc/nginx/sites-enabled/*;}#配置邮件服务器#mail {# # See sample authentication script at:# # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript# # 指定Nginx提供邮件服务时, 用于HTTP认证的服务地址# # auth_http localhost/auth.php;# # 指定现有客户端上的POP3协议的扩展# # pop3_capabilities "TOP" "USER";# # 指定现有客户端上的IMAP协议的扩展# # imap_capabilities "IMAP4rev1" "UIDPLUS";# # server {# # 指定邮件服务器监听的IP地址和端口# listen localhost:110;# # 指定虚拟机支持的加密协议# protocol pop3;# # 是否开启邮件代理# proxy on;# }# # server {# # 指定邮件服务器监听的IP地址和端口# listen localhost:143;# # 指定虚拟机支持的加密协议# protocol imap;# # 是否开启邮件代理# proxy on;# }#}进入 /etc/nginx/sites-available 目录,打开default文件 ...

October 13, 2019 · 5 min · jiezi

NAT唯一五元组选取

使用iptable进行nat设置时,可以使用如下扩展选项: # SNAT 源地址转换,用在 POSTROUTING、INPUT 链--to-source [<ipaddr>[-<ipaddr>]][:port[-port]]--random # 映射到随机端口号,--random-fully # 映射到随机端口号(PRNG 完全随机化)--persistent # 映射到固定地址# DNAT 目的地址转换,用在 PREROUTING、OUTPUT 链--to-destination [<ipaddr>[-<ipaddr>]][:port[-port]]--random # 映射到随机端口号--persistent # 映射到固定地址在内核中有如下几个标志与上面的选项对应: /* 指定了IP范围 */#define NF_NAT_RANGE_MAP_IPS (1 << 0)/* 指定了端口具体范围 */#define NF_NAT_RANGE_PROTO_SPECIFIED (1 << 1)/* 范围随机,使用secure_port函数进行源端口计算,对应于--random */#define NF_NAT_RANGE_PROTO_RANDOM (1 << 2)/* 映射到固定地址,同一个客户端使用相同的源地址,对应于--persistent */#define NF_NAT_RANGE_PERSISTENT (1 << 3)/* 完全随机,对应于--random-fully */#define NF_NAT_RANGE_PROTO_RANDOM_FULLY (1 << 4)//上面几个标志有些可以组合使用//随机标志#define NF_NAT_RANGE_PROTO_RANDOM_ALL \ (NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PROTO_RANDOM_FULLY)//范围标志#define NF_NAT_RANGE_MASK \ (NF_NAT_RANGE_MAP_IPS | NF_NAT_RANGE_PROTO_SPECIFIED | \ NF_NAT_RANGE_PROTO_RANDOM | NF_NAT_RANGE_PERSISTENT | \ NF_NAT_RANGE_PROTO_RANDOM_FULLY)构建nat信息 netfilter在两个地方会构建nat信息。一个是在命中nat规则后构建nat信息,另外一个是relate连接会构建nat信息,在expect函数中。构建nat信息都是使用函数nf_nat_setup_info进行构建,两者的差异在于range参数。后者由iptable规则设置,前者由help函数确定。nat会修改连接跟踪,仅仅修改应答方向。 ...

October 8, 2019 · 7 min · jiezi

ROS安装教程Ubuntu1804ROS-melodic

本教程主要是演示如何安装ROS,所使用的系统是Ubuntu 18.04。 以下分为三部分: 更改apt源按照ROS官网给出的安装教程进行安装测试是否安装成功1. 更改apt源百度搜索清华源,然后单击页面右下角的使用帮助,然后划到最下面找到ubuntu,此时页面如图: 然后我们将编辑框中的文字复制,按下Ctrl+Alt+T打开终端,在终端下输入sudo gedit /etc/apt/sources.list打开sources.list文件,删除文件内容,并将刚才复制的内容粘贴进去,然后在终端下输入sudo apt-get update。 2. 按照ROS官网给出的安装教程进行安装然后我们打开ROS安装教程,选择Ubuntu,等待页面加载完成后就可以按照步骤来完成安装。 步骤1.1我没有进行1.1步骤,但最后也是安装成功了。 步骤1.2在这一步要点击Mirror链接,进入后选择一个国内的源,防止更新速度太慢。我选择了USTC这个源。 步骤1.3~1.7在完成步骤1.2之后,步骤1.3~1.7只需要按照页面指导进行完成即可,不过要注意的是有可能因为网络原因更新速度较慢,可以尝试使用手机热点来改善。 3. 测试是否安装成功在完成步骤1.1~1.7之后,如果没有出现其它问题,那么正常来说,你已经成功安装了ROS,下面我们运行一个简单的程序来测试ROS是否安装成功。 打开一个终端在终端下输入roscore,这句命令主要是启动ros的核心程序。 然后再新建一个终端,输入rosrun turtle_sim turtlesim_node。 如果成功弹出了以上的窗口。祝贺你!证明你已经成功安装了ROS。 视频ROS安装教程 以上的安装过程我录制了一个视频,如果只看文字还不明白的话,可以对照着视频进行安装。

October 4, 2019 · 1 min · jiezi

ROS编写第一个发布器Publisher

在上一篇文章中我们安装好了ROS环境。本篇文章我们将熟悉ROS中的一些概念(Concept),并尝试使用C++来实现一个发布器(Publisher)和一个订阅器(Subscriber)。 该文章是个人学习ROS的过程记录,参考的书是中文版《ROS机器人编程:原理与应用》,英文版为A Systematic Approach to Learning Robot Programming with ROS,该书代码托管在作者wsnewman的github上,感谢作者的辛苦付出。 该篇文章分为以下几个部分: ROS概念在ROS中实现一个发布器运行你的发布器1. ROS我仅仅列举了几个本篇文章将会涉及到的概念,这些概念的定义来源于ROS Wiki,有兴趣可以进一步深入了解。 1.1 ROS 文件系统主要是介绍在ROS中的文件组织方式,类似于Python中包(Package)的文件组织形式。 Packages: ROS包是ROS中程序的主要组织单元,在一个包中可能包含一系列相关的节点(nodes),ROS依赖库,配置文件等等。ROS包是你可以编译及发行的最小单元了,大部分时候你执行编译操作时便是在编译包。Package.xml: 主要是用来描述包,提供关于包的一些信息,包括包名称,版本,简述,版权信息,依赖等等。消息类型:对话题(topic)中的消息进行定义,以便发布器/订阅器都能正确编码/解码字节流。1.2 ROS概念节点(Nodes): 节点就是可执行文件,该可执行文件可能是你使用roscpp或者rospy创建的。Master: 在上一篇文章中我们运行过命令roscore该命令的作用之一就是启动ROS Master,Master主要是提供名称注册与解析,以便每个节点可以通过名称来找到另外的节点。消息(message):节点通过消息来完成彼此之间的交流,消息是一个类似于struct的数据结构,其中可能包含几个字段。举个例子:在路径/opt/share/melodic/share/std_msgs/msg(如果你是像我上篇文章中那样安装的)中,你可以看到许多的消息定义,打开一个比如说ColorRGBA.msg,内容如下: float32 r;float32 g;float32 b;float32 a;话题(topic): 话题由话题名(topic name)表示,你可以把它想象为一个邮箱,发布器认为我只需要把消息投放到邮箱里就行了,而订阅器认为我只需要去这个邮箱拿消息就行了,因为节点交流的本质是传递消息,话题只是指明一个双方约定好的交流路径。整个过程可以如下的图来表示2. 在ROS中实现一个发布器2.1 创建工作区和包在编写ROS程序之前,首先要建议一个ROS工作区,之后的编写工作都将在该工作区下进行,工作区有一定的格式,你可以选择在你的home目录下创建,依次输入以下几行命令 mkdir -p ~/catkin_ws/src # 创建工作区cd ~/catkin_ws/src # 进入工作区# catkin_create_pkg package_name(包名称) dependencies(依赖)catkin_create_pkg my_minimal_node roscpp std_msgs #新建一个ROS包 创建完成以后,我们可以看到在目录my_minimal_node下多了两个文件(package.xml ,CMakeLists.txt)和两个文件夹(src, include)。 其中的package.xml便是之前提到的ROS包配置文件,描述关于包的信息。CMakeLists.txt是用来配置编译过程,这是本篇文章所主要使用的两个文件。 2.2 修改package.xml首先我们来修改package.xml,在编辑器中打开该文件,可以看到文件中包含了大量的注释,这些注释都是来指导你该如何书写该文件。 一般说来我们应该包括<name>,<version>,<description>,<maintanner>,<license>,<author>,<build_depend>,<build_export_depend>, <exec_depend>便可以了,这部分大家可以按照自己的信息进行修改。 修改后的package.xml类似于下面的内容,当然你也可以不修改,对于这一篇内容来说,这无关紧要。 <?xml version="1.0"?><package format="2"> <name>my_minimal_node</name> <version>0.1.0</version> <description>The my_minimal_node package</description> <maintainer email="gnc@todo.todo">gnc</maintainer> <license>MIT</license> <author email="sharku">Jane Doe</author> <buildtool_depend>catkin</buildtool_depend> <build_depend>roscpp</build_depend> <build_depend>std_msgs</build_depend> <build_export_depend>roscpp</build_export_depend> <build_export_depend>std_msgs</build_export_depend> <exec_depend>roscpp</exec_depend> <exec_depend>std_msgs</exec_depend></package>2.3 编写第一个简单的ROS程序-发布器进入到目录~/catkin_ws/src/my_minimal_node/下,在该目录下的src文件夹创建minimal_publisher.cpp,内容如下,代码内容也可以在文章最开始给出的github中找到。 ...

October 4, 2019 · 2 min · jiezi

ROS编写第一个订阅器Subscriber

在上一篇文章中,我们实现了第一个ROS程序—发布器(publisher),然而在上一篇文章的最后我们也注意到,尽管我们的程序非常小,但占据的CPU资源却非常多。 这是因为在发布器的while循环里没有执行必要的sleep操作,使得发布器一直以最高速率运行,长时间占用CPU。 本篇文章分为以下两部分: 在发布器中加入sleep调用使发布器的频率稳定在1Hz实现一个订阅器(Subscriber)1. 发布器加入sleep事实上,我们所需要做的只有两行工作,首先创建一个ros::Rate对象,然后在while循环里调用该对象的.sleep()函数即可。 修改后完整的代码如下: #include <ros/ros.h>#include <std_msgs/Float64.h>int main(int argc, char **argv) { ros::init(argc, argv, "minimal_publisher"); // 初始化节点名 ros::NodeHandle n; // // ++++ ros::Rate s_timer(1.0); // 参数1.0代表发布频率即1.0Hz // ++++ ros::Publisher my_publisher_object = n.advertise<std_msgs::Float64>("topic1", 1); // 创建一个发布器,调用advertise通知ROS Master话题名称以及话题类型 //"topic1" 是话题名 // 参数 "1" 是queue_size,表示缓冲区大小 std_msgs::Float64 input_float; // 创建一个发布器将要使用的消息变量 // 该消息定义在: /opt/ros/indigo/share/std_msgs // 在ROS中发布的消息都应该提前定义,以便订阅者接收到消息后该如何解读 // Float64消息的定义如下,其中包含一个数据字段data: // float64 data input_float.data = 0.0; // 设置数据字段 // 程序所要做的工作将在下面的循环里完成 while (ros::ok()) { // 该循环没有sleep,因此将一直处于运行状态,不断消耗CPU资源 input_float.data = input_float.data + 0.001; //每循环一次+0.01 my_publisher_object.publish(input_float); // 发布消息到对应的话题 // ++++ s_timer.sleep(); // 在这里调用sleep函数可以让程序在这里 // 停止一段时间以便达到要求的发布频率 // ++++ }}将修改后的发布器重新进行编译,然后按照和上篇文章一样依次运行: ...

October 4, 2019 · 1 min · jiezi

Linux常用指令以及入门介绍

Linux - 稳定、安全、多并发section1:**内容介绍 ***基础: - 入门、vm和Linux安装、目录结构; - Linux Shortcut keys: -- CTRL+A/E行首行尾; -- ctrl+U/k:擦除光标到行首/行尾; -- CTRL+Y:回退擦除的文本;***实际操作: - 远程登录(xshell xftp)|vi和vim编辑器|开机、重启、用户登录注销|用户管理 - 实用指令|定时任务调度|磁盘分区、挂载|网络配置|进程管理|RPM和YUM***python定制 - python专业开发平台Ubuntu、python开发环境、APT软件管理和远程登录**学习方向 ***Linux运维工程师***Linux嵌入式工程师-驱动开发***Linux下开发项目:Java、python、bigdata、PHP、c/c++**应用领域 ***个人桌面领域***服务器领域***嵌入式领域**进阶之路 ***基本操作命令:文件操作(rm,mkdir,chmod,chown)、vi/vim使用、Linux用户管理***linux各种配置:环境变量、网络配置、服务配置;***搭建相关语言的开发环境(java、python);***shell脚本编写,Linux服务器维护;[必会]***安全设置,防止攻击,保障运行,系统调优;√***深入了解Linux系统[对内核有研究],熟练大型网站应用架构组成,熟悉各环节的部署和维护;√**学习方法 ***高效愉快学习;***先整体框架,再细节;***指令;***"know how,know why"***"做中学"***适当囫囵吞枣***重点实际操作section2:Linux基础** Linux介绍 ***操作系统,免费,开源,安全,高效,稳定,处理高并发强悍,企业级项目部署到Linux/Unix服务器运行;***创始人:Linus Torvalds - Linux kernel;吉祥物:企鹅 - Tux;***主要发行版:内核基础上包装定制,Centos、Redhat[Redhat公司]|Ubuntu|Suse、openSuse[欧洲]|红旗Linux***主要操作系统:Windows、Android、iOS、macOS、车载系统、Linux等***Linux和Unix: - Ken Tompson|Dennis Richres 贝尔实验室 > B语言|C语言|Unix > Minix > Linux[GNU计划的一部分] - Richard Stallman:GNU计划 --- 人机互动 > application > GNU shell > OS[linux kernel] > hardware - Linux:GNU/Linux < Minix**VM和Linux(CentOS)的安装 ...

September 11, 2019 · 5 min · jiezi

G术图书0-TAoC

The Art of Community "社区艺术" 最早是从 weibo 的编辑朋友处得知的, 四年前!!! 现在已经快第三版出来了,当时是第一版以CC 协议开放下载的,于是非常坚定的全部打印出来 ~ 394页!全E文的图书! 在去四川参与 TEDx1Kg 的乡村演讲活动路上看完了第一遍; 好书! 为什么好呢?! <!--more--> 首先是真实的经验的总结,作者是 Ubuntu 社区的专职大妈~社区经理(勉强要翻译其职责的话); 什么是 Ubuntu ?! 你确信你不是火星人?! 好吧,简单的说,Ubuntu 是这个星球上可以说发展速度最快的一款Linux 发行版了,也应该是以易用性为目标,并作的最好的一种开源操作系统.从诞生以来就以每年两个版本的高速进化着,快速替代了各种其它 Linux 的发行版, 成为给普通人使用的 Linux 的代名词. 现在已经发展成为支持几十种语言,有十多万开发者的宏大开放技术社区. 这样一个技术社区的管理经验,当然够得上 艺术 两字. 当然,书的内部也实在丰富到,第二版,原文图书已经 574页! 因为,互联网在发展,社区在发展,社区的管理思想/手段/渠道/方式,也都在发展. 这书的好,主要是以下几个方面: 有理论! 将作者多年,多个社区的管理经验,分析,抽象出了一整套社区管理的思想,以及检验方式; 有实践! 针对社区发展中,各种困境/问题/挑战,都进行了详细的阐述,说明了原因,应对方案; 有案例! 专门设立了章节,综合介绍的所有社区管理思想,针对各种社区的实际事例,进行了分析汇诊! 唯一的问题,就是啰嗦! 这可能是全球社区管理员的通病! 任何一个问题,越解释越多,从各种角度,尝试对同一个问题进行解释/说明再说明,唯恐表述不清,引发误解,而误解的解除要比一条信息的传达难不知道多少倍.... 珠海GDG 刚刚成立不到半年,相比 Ubuntu 以及其它技术社区都太娇嫩. 虽然,大妈们很早就注意到了类似社区管理的好书; 但是,知难行易! 所以,推荐此书,给想成为社区大妈,或是想理解社区,或是不理解社区当前行为,或是等等其它任何理由,关注了珠海GDG 短信的好人们... 直接从国外先行者身上直接吸收营养吧!!!

September 10, 2019 · 1 min · jiezi

IDC是什么

IDC:互联网数据中心,是电信部门利用已有的互联网通信线路、贷款资源,建立标准化的电信专业级机房环境,为企业、政府提供服务器托管、服务器租用以及相关增值等方面服务。IDC是全球协作的特定设备网络,用来在Internet网络基础上加速信息的传递,简称机房。正规的IDC公司必须具备有通信管理局发放的互联网数据中心业务许可的IDC证件,由于目前国内ICD行业有90%以上的企业没有相关证件,因此他们就不具备为客户提供此类服务的许可,客户选择他们风险相对较高。华信网通本着诚信发展,创新及服务为本,在全国有多家数据中心运营,可供客户选择的范围较大,以高性价比的绝对优势为用户提供服务。华信网通基于运营多年的IDC数据中心主机托管、主机租用、云主机、虚拟主机、传输链路及与多数据中心间的光纤链路互通优势,具备快速部署能力,及自有的客户多资源管理运营平台,致力于为互联网公司和传统行业公司提供高效、可靠、安全的一站式服务。华信网通已经获得工业和信息化部《互联网数据中心》IDC/ISP、许可证、且同时提交等保三级、ISO27001、ISO9001等经营许可证牌照及资质。网址:https://huaxinnetcom.com

September 10, 2019 · 1 min · jiezi

Ubuntu中更改默认的root用户密码以及怎样修改用户密码

新安装的Ubuntu系统中默认的root用户密码是多少?该怎么修改?如题,相信许多刚接触Ubuntu系统的新手大多会遇到这个问题,那么我们该如何解决这个问题呢?Ubuntu在安装过程中并没有让我们设置root用户密码,但当我们需要获取root用户的权限时,就会让我们输入root用户的密码,如下图,这就搞得我们一头雾水了。当初我们安装系统的时候只是设置好了一个用户名和用户的密码,并没有设置root用户密码啊,该怎么输入呢?你可能会抱着试一试的心态,输入自己创建的用户的密码,结果当然是密码错误了!!! 原因:未设置之前,Ubuntu中默认的root密码是随机的,即每次开机都会有一个新的root密码,所以此时的root用户密码并不确定;解决方法:Ubuntu中打开终端(ctrl + alt + t),输入sudo passwd,如下图,然后重复两次你要设置的root密码,然后就会提示密码已更新了; 测试是否设置成功:控制台中输入su root,然后输入刚才设置好的root密码,测试是否修改成功,成功后如下图所示; 修改指定用户的密码首先需要切换到root用户下,输入sudo su,然后输入上面改好的root用户密码即可切换到root用户; 然后输入passwd 用户名,输入需要修改的新密码,重复两次即可,此时变回提示用户身份验证令牌已成功更新; 欢迎关注微信公众号:村雨1943;创作不易,未经同意,转载请注明出处~

September 8, 2019 · 1 min · jiezi

docker常用指令详解

指令详解从远程仓库拉取镜像//docker image pull library/hello-world默认从library拉取可以省略docker image pull hello-world查看镜像列表docker image ls运行一个docker的镜像,产生一个容器实例//运行docker run hello-world//echo会在shell打印一段文字,起提示作用Hello world检查本地是否存在指定的镜像,不存在就从公有仓库下载利用镜像创建并启动一个容器分配一个文件系统,并在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去从地址池配置一个 ip 地址给容器执行用户指定的应用程序执行完毕后容器被终止查看容器// 列出本机正在运行的容器docker container ls// 列出本机所有容器,包括终止运行的容器docker container ls --all启动一个可交互的容器docker run -t -i ubuntu:14.04 /bin/bashdocker run 命令,并启动名称为ubuntu:14.04的容器 。-t 表示在新容器内指定一个伪终端或终端-i表示允许我们对容器内的 (STDIN) 进行交互。可以将-t -i缩减为-it好记我们在容器内还指定了一个新的命令: /bin/bash 。这将在容器内启动 bash shell,这是一个交互程序注意":"后面为TAG,如果没有指定默认就为latest所以当容器(container)启动之后,我们会获取到一个命令提示符: root@af8bae53bdd3:/#这代表我们已经进入了容器内部 启动守护进程,后台一直运行容器docker run -d ubuntu:14.04//注意-d和-it同时使用,-it会无效,-d需要返回一个容器id端口映射,挂载数据卷,命名容器docker run -d --name=ant_web_pro -v /宿主机绝对路径:/容器内目录 -p docker外部端口:docker内部端口 nginx-P: 随机端口映射,容器内部端口随机映射到主机的高端口-p: 指定端口映射,格式为:主机(宿主)端口:容器端口--name="nginx-lb": 为容器指定一个名称;--volume , -v: 绑定一个卷如果是容器里的目录不存在,两者都会自动创建-v $PWD/目录:/容器内目录 $PWD表示当前文件夹当你在容器容器内部改变数据卷是其实软连接到了外部,数据直接在宿主机改变查看数据卷docker volume ls启动已终止的容器容器可以通过run新建一个来运行,也可以重新start已经停止的container,但start不能够再指定容器启动时运行的指令,因为docker只能有一个前台进程。容器stop(或Ctrl+D)时,会在保存当前容器的状态之后退出,下次start时保有上次关闭时更改。而且每次进入attach进去的界面是一样的,与第一次run启动或commit提交的时刻相同。 docker start $CONTAINER_IDdocker stop $CONTAINER_IDdocker restart $CONTAINER_ID退出容器exit进入容器docker exec -it ant-design-pro_web /bin/bash//docker exec -it 64b9ded82141 bash (可以是id) 删除一个或多个container、image(rm、rmi)// 删除容器docker rm <container_id/contaner_name>// 删除所有停止的容器docker rm $(docker ps -a -q)// 删除镜像docker rmi <image_id/image_name ...>commit 容器,创建新镜像我们期望能定制自己的镜像,在里面安装一些基础环境(比如上文中的 node),然后制作出自己要的基础镜像。 ...

September 7, 2019 · 1 min · jiezi

Docker-Swarms-跨主机集群搭建

解决的问题想要在多台物理实体机或虚拟机,而不是一台机器上构建集群。由于使用windows10 + VirtualBox,并在VirtualBox中安装linux系列系统,并卡在文档"docker-machine create --driver virtualbox myvm1"的读者搭建环境搭建时间:2019.8.16设备系统:windows10虚拟软件:VirtualBox虚拟系统:Ubuntu 18.04 LTS 参考博客感谢以下博客在问题解决中提供的帮助JerryWangSAP --- 错误消息 This computer doesn't have VT-X/AMD-v enabled向上的路 --- docker跨主机通信方式四 docker-machine 背景为什么我会想到要在多台物理实体主机或虚拟机搭建来搭建集群呢?原因有两个:单台设备性能极限以及灾备。第一条原因很好理解,单台设备的算力是有限的。而灾备的考虑点并不是容器内的服务宕机,而是物理范畴的灾备。国内可靠性达到99.99%的云服务供应商不时出事的新闻时常会听到,但两个或以上云服务上同时出事的情况呢? 理论分析一下,以99.99%作为标准,这个数字乍一看却是有种万无一失的感觉,但实际算下来,一年的宕机时间是:52.56分钟.如果将服务同时放在两个供应商上呢?一年里两家云服务供应商同时宕机导致的理论宕机时间为:0.31秒。当然这只是个理论分析,只是在这种理论下,相同预算时,购买分布在2个或多个云服务提供商的主机会不会是一种更好的选择呢? 思路Docker文档在Swarms部分通过"docker-machine create --driver virtualbox myvm1"命令宿主系统内创建虚拟节点,但该命令在本就已经是由虚拟机创建的ubuntu系统内是无法执行成功的,参见JerryWang的Blog。解决这个问题的方法有很多,更换虚拟机软件、双系统、Mac等都可行,但受限于某些客观原因,并且想要尝试跨主机构建集群,因此采用了一下解决方案:在VirtualBox虚拟出3套ubuntu系统:A、B、C。其中将A等价为教程中的数组操作系统,B、C等价为教程中宿主操作系统中的两个节点。通过联通A、B、C来达到与教程在该处相同的效果,同时也是实现了跨主机集群的搭建。 具体步骤在主机A中预先装好docker(参见官网教程!), B、C虚拟机只需要安装ssh服务器即可。(此处B、C可以为云服务供应商的虚拟主机)使用以下指令获取B、C虚拟机的IP地址。 ifconfig // 若信息过长使用 ifconfig >> output 输出大文件里使用vim打开查看B、C主机配置ssh允许直接使用root帐号登录:在/etc/ssh/sshd_config文件内,添加 PermitRootLogin yes在A中执行以下命令生成密钥文件(此步骤开始的所有操作都只需在A中完成) ssh-keygen将公钥复制到B、C ssh-copy-id IP //执行两次,分别将IP替换为B、C的IP使用一下指令验证是否配置成功 ssh IP //成功后使用logout推出登录使用以下指令在A中给B、C安装docker。(同时也将建立起A与B、C的链接) // docker文档到此处前并没有要求安装docker-machine,常见官方文档安装// 此命令需要执行两次,分别使用B、C的IP,NodeName官方文档分别命名为了:myvm1 、myvm2,此处我命名为docker1、docker2docker-machine create -d generic --generic-ip-address=IP NodeName使用以下指令检查连接是否建立完成 docker-machine ls解释说明以上步骤实现的效果就可以将独立的多台物理主机或位于不同平台的虚拟机实现连接,同时也等效官方文档以下两条指令,后续可以无缝衔接后续教程内容docker-machine create --driver virtualbox myvm1docker-machine create --driver virtualbox myvm2关于IP,若是同我一样的场景(拥有固定IP的主机和云服务器除外),不推荐去花费时间在局域网内配置静态IP,因为还需要在/etv/netplan(ubuntu17.04以后启用的)下的配置文件里配置子网掩码、网关以及DNS服务器等,很容易出错。花费时间的性价比不高,IP有可能会发生变化,但从我实际操作来说,晚间完全足够完成练习。为什么需要在B、C中修改ssh配置文件?由于ssh默认不可使用root帐号登录,常规流程我们都属使用自己创建的帐号如:ubuntu登录,再使用sudo su切换到root帐号,但在该场景下需要需要将此登录方式开启。(毕竟这样我们没有必要再去繁琐的操作节点主机)后记最终的效果如下完成docker文档所有get-star教程的效果如下 ...

August 20, 2019 · 1 min · jiezi

FRR学习第九天完整的数据中心网络模型

网络拓扑 拓扑说明实验环境是一台16G内存的主机。上面使用vmware运行了三个虚拟机,运行的系统为ubuntu-19.04。三个虚拟机采用host-only模式连接。 spine,leaf1,leaf2三个设备均为ubuntu-19.04.上面运行了FRR程序。host1,host2,host3,host4为网络命名空间。underlay网络采用的是二层模式(局限于实验条件)整个实验是一个比例缩小的数据中心spine-leaf模型。leaf2还需要作为边界网关,使用默认路由将流量发送到公网,同时作为firewall(这里只进行了nat)。 leaf作为border和vtep的功能细化图 实验功能说明整个数据中心一个租户,使用vni:100作为租户的l3vni租户使用了三个subnet。1.1.1.0/24子网有两个虚机,分布在两个vtep下,使用10作为l2vni。2.2.2.0/24和3.3.3.0/24都只有一个虚机。5.5.5.0/24作为relay子网用于连接default-vrf和evpn-vrf。整个实验需要实现租户内所有主机互通,同时主机可以访问公网。(暂时不能实现公网访问虚机,需要申请floating-ip才可以,申请了公网IP后,可以在default-vrf中做1:1 nat实现互访)spine配置bgp evpn配置router bgp 7677 bgp router-id 192.168.59.130 bgp bestpath as-path multipath-relax neighbor fabric peer-group neighbor fabric remote-as external neighbor 192.168.59.128 peer-group fabric neighbor 192.168.59.129 peer-group fabric ! address-family l2vpn evpn neighbor fabric activate exit-address-family!leaf1配置接口配置#开启转发sudo sysctl -w net.ipv4.ip_forward=1 sudo sysctl -p#添加host1sudo ip netns add host1sudo ip link add veth1 type veth peer name eth0 netns host1sudo ip netns exec host1 ip link set lo upsudo ip netns exec host1 ip link set eth0 upsudo ip netns exec host1 ip addr add 1.1.1.1/24 dev eth0sudo ip netns exec host1 ip route add default via 1.1.1.254 dev eth0sudo ip link add br10 type bridgesudo ip link add vxlan10 type vxlan id 10 local 192.168.59.128 dstport 4789 nolearningsudo ip link set br10 upsudo ip link set veth1 upsudo ip link set vxlan10 upsudo ip link set veth1 master br10sudo ip link set vxlan10 master br10sudo ip addr add 1.1.1.254/24 dev br10sudo ip link set dev br10 address 00:00:01:02:03:10 #分布式二层网关,mac需要一致#添加host2sudo ip netns add host2sudo ip link add veth2 type veth peer name eth0 netns host2sudo ip netns exec host2 ip link set lo upsudo ip netns exec host2 ip link set eth0 upsudo ip netns exec host2 ip addr add 2.2.2.2/24 dev eth0sudo ip netns exec host2 ip route add default via 2.2.2.254 dev eth0sudo ip link add br20 type bridgesudo ip link set br20 upsudo ip link set veth2 upsudo ip link set veth2 master br20sudo ip addr add 2.2.2.254/24 dev br20#添加vni 100,作为l3vnisudo ip link add br100 type bridgesudo ip link add vxlan100 type vxlan id 100 local 192.168.59.128 dstport 4789 nolearningsudo ip link set br100 upsudo ip link set vxlan100 upsudo ip link set vxlan100 master br100 #sudo ip addr add 5.5.5.254/24 dev br100 切记,作为l3vni的svi接口不能配置IP,否则收到type-5路由不会安装。sudo ip link set dev br100 address 00:00:01:02:03:04 #这个是路由mac#添加vrfsudo ip link add evpn-vrf type vrf table 100sudo ip link set evpn-vrf upsudo ip link set br100 master evpn-vrf sudo ip link set br10 master evpn-vrf sudo ip link set br20 master evpn-vrf bgp evpn配置vrf evpn-vrf vni 100 exit-vrf!router bgp 7675 bgp router-id 192.168.59.128 bgp bestpath as-path multipath-relax neighbor fabric peer-group neighbor fabric remote-as external neighbor 192.168.59.130 peer-group fabric ! address-family l2vpn evpn neighbor fabric activate advertise-all-vni exit-address-family!router bgp 7675 vrf evpn-vrf ! address-family ipv4 unicast network 2.2.2.0/24 exit-address-family ! address-family l2vpn evpn advertise ipv4 unicast exit-address-family!注: ...

August 7, 2019 · 5 min · jiezi

Ubuntu-1804下-Hyperledger-Fabric-10-的搭建

请大家按照步骤进行,避免不必要的错误。 1.查看 apt sourcesudo vi /etc/apt/sources.list如果看到是http://cn.xxxxx之类的,那么就不用换的。但是如果其中是http://us.xxxxxx之类的,那么就是外国的。需要更换源,通过以下命令进行批量更换。 :%s/us./cn./g更换完成后输入 :wq 保存退出。之后更新源。 sudo apt-get update然后安装ssh sudo apt-get install ssh2.安装GO语言下载安装最新的go 下载、安装wget https://storage.googleapis.com/golang/go1.11.linux-amd64.tar.gz如果出现443连接错误,可采用以下方法。进入 https://golang.org/dl/ 选择最新的Linux版本下载到本地文件夹 下载之后,进入下载目录,输入以下命令进行解压安装,(我的目录名为:下载) cd 下载tar -zxvf go1.11.linux-amd64.tar.gz -C /usr/local需要注意:下载的go版本不同,需要更改版本号安装完成后,可以进入 /usr/local 下看到go文件夹。 配置环境变量编辑当前用户的环境变量,可以使用vi编辑器或gedit命令。 sudo gedit ~/.profile在文件的末尾加入以下内容 export PATH=$PATH:/usr/local/go/bin export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$PATH:$HOME/go/bin编辑保存退出后,执行以下命令使得环境变量生效 source ~/.profile输入命令查看GO版本 go version把go的目录GOPATH设置为当前用户的文件夹下,所以记得创建go文件夹 cd ~mkdir go 3.安装Docker需要提前准备安装curl,命令如下 sudo apt-get install curl1.安装Docker安装Docker也会遇到外国网络慢的问题,幸好国内有很好的镜像,推荐DaoClound,安装Docker的命令是: sudo curl -sSL https://get.daocloud.io/docker | sh如果安装失败,可尝试下面的命令 sudo curl -sSl https://get.docker.com/ | sh 安装完成后,运行以下脚本将当前用户添加到Docker的组中 ...

August 7, 2019 · 1 min · jiezi

ubuntu下使用URLOS快速安装SDCMS

关于SDCMSSDCMS(网站信息管理系统)是在Php+Mysql架构环境下开发的开源产品。SDCMS以信息为主题,通过以文字和图片标题为起点,以无限栏目分类为支撑,配合多项插件的灵活使用,以达到信息门户的远景!SDCMS设计了全新的模板引擎,用户可以通过标签的自由组合,实现更丰富多彩的页面效果。 安装SDCMS首先,我们需要安装URLOS: curl -LO www.urlos.com/siu && sh siuURLOS面板安装完成之后,登录面板,在应用市场中搜素“SDCMS”,点击安装按钮: 在基本信息项目中填写服务名称、运行节点、端口号: 在网站项目中填写域名: 在数据库项目中选择数据库,设置数据库密码: 完成以上步骤后,点击提交,等待应用自动部署完成后,在浏览器中输入域名访问页面,如果页面能正常访问,则SDCMS部署成功。 本文我们介绍了如何使用URLOS快速创建SDCMS,对URLOS感兴趣的小伙伴不妨体验一下。

July 16, 2019 · 1 min · jiezi

Ununtu安装邮件服务器

Ubuntu搭建邮件服务器此文我们使用Postfix来搭建邮箱服务器,Postifx是一个SMTP服务器。SMTP服务器也被称为MTA(message transfer agent) 一、安装postfixsudo apt-get install mailutils# mailutils是一个命令行邮箱客户端,使用它可以很方便的发送和接收邮件, mailutils里面就包含了sendmail和postfix,当然你也可以只安装postfix,postfix包含sendmail。安装postfix的时候会弹出两个配置,第一个是postfix配置类型,我们默认选择第二种:Internet Site就行,这几种配置分别表示: No configuration:表示不要做任何配置;Internet Site:表示直接使用本地SMTP服务器发送和接收邮件;Internet with smarthos: 表示使用本地SMTP服务器接收邮件,但发送邮件时不直接使用本地SMTP服务器,而是使用第三方smart host来转发邮件;Satellite system:表示邮件的发送和接收都是由第三方smarthost来完成。Local only:表示邮件只能在本机用户之间发送和接收。在第二个页面System mail name中填入你的域名,也就是邮箱地址@符号后面的域名,比如,我的邮箱地址是wangjun@bonnenuit.vip,所以我填的是bonnenuit.vip。当发件人的域名地址没有指定时,Postfix会自动将这个域名添加到发件人的地址中。 Postfix在安装过程中会生成/etc/postfix/main.cf配置文件。安装完成后Postfix会自动运行。我们可以用下面的命令查看Postfix的版本。 $ sudo postconf mail_versionmail_version = 3.3.0使用netstat来查看Postfix的监听情况: $ sudo netstat -anptlActive Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 474/systemd-resolve tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1239/cupsd tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 6995/master tcp 0 0 10.235.111.250:45970 151.101.190.217:443 ESTABLISHED 4806/snapd tcp 0 0 10.235.111.250:43748 91.189.92.19:443 ESTABLISHED 4806/snapd tcp 0 0 10.235.111.250:45960 151.101.190.217:443 ESTABLISHED 4806/snapd tcp6 0 0 ::1:631 :::* LISTEN 1239/cupsd tcp6 0 0 :::25 :::* LISTEN 6995/master Postfix的master进程监听TCP 25号端口,在发送测试邮件之前,我们最好是查看25号端口是否被防火墙或主机商屏蔽,nmap可以帮助我们扫描服务器的开放端口,在你的个人电脑上运行下面的命令。 ...

July 15, 2019 · 2 min · jiezi

这是一份儿PHPer需要的远程开发环境不依赖Windows拥抱Linux

一般情况,开发者多使用Windows系统,PHPStorm、VSCode等软件让我们离不开Windows,但是,但是多数开发者更倾向于在Linux上部署环境。那么这一份教程就诞生了。(MacOS用户可以绕行)工具PHPStormUbuntu 16.04准备工作在Windows系统上安装PHPStorm和VM虚拟机,在虚拟机中安装Ubuntu系统。 在Ubuntu安装lnmp(Linux+Nginx+MySQL+PHP)集成环境 wget http://soft.vpser.net/lnmp/lnmp1.6.tar.gz -cO lnmp1.6.tar.gz && tar zxf lnmp1.6.tar.gz && cd lnmp1.6 && ./install.sh lnmp远程部署代码打开PHPStorm,选择Create New Project from Existing Files 选择从远程服务器ftp同步项目 输入项目名,并选择要同步到本地的项目路径 自动上传操作选择如下,当你Ctrl+S时,PHPStorm会帮你上传当前修改的文件到服务器。这样会相当方便。 选择新建远程服务器 填写项目名,Type选择SFTP,填写服务器IP、用户名、密码以及远程项目所在的路径。 //linux下查看ip命令(不是Windows的ipconfig)ghost@ghost-virtual-machine:~$ ifconfig 直接点finish,PHPStorm会自动同步远程服务器的代码。 远程debug安装xdebug扩展下载、编译xdebug wget http://www.xdebug.org/files/xdebug-2.2.3.tgztar xzf xdebug-2.2.3.tgzcd xdebug-2.2.3/usr/bin/phpize./configure --with-php-config=/usr/local/php/bin/php-configmakemake install查看php安装路径下的lib 库目录是否生成了xdebug.so文件。(我的目录:/usr/local/php/lib/php/extensions/xdebug.so) 然后配置/usr/local/php/etc/php.ini文件,需要注意的是xdebug是zend扩展,zend_extension= "xdebug.so",而不是extension= "xdebug.so"。 [xdebug]zend_extension= "xdebug.so"xdebug.profiler_enable = onxdebug.default_enable = onxdebug.trace_output_dir="/tmp/xdebug"xdebug.trace_output_name = trace.%c.%pxdebug.profiler_output_dir="/tmp/xdebug"xdebug.profiler_output_name="cachegrind.out.%s"xdebug.remote_enable =1xdebug.remote_handler = "dbgp"xdebug.remote_host = 10.0.100.236 //本机的ip,不是虚拟机或者远程服务器的ipxdebug.remote_mode = "req"xdebug.remote_port = 9001如果不知道本机的ip或本机为动态ip,需要加入xdebug.remote_connect_back,将其设置为1,此时xdebug.remote_host会失效。 ...

July 14, 2019 · 1 min · jiezi

Mac下的虚拟机中Ubutu-Gnome-164-LTS系统中英文输入法的实现

本地电脑系统:Mac虚拟机:Virtualbox虚拟机中的系统:Ubutu Gnome 16.4 LTS 如何实现虚拟机中Ubutu Gnome 16.4 LTS系统中的中英文输入法切换的实现?Ubutu Gnome 16.4和Ubutu 16.4是Ubutu的两个不同的系统版本 步骤:1、安装fcitx相关输入法插件sudo apt-get install fctix-pinyin sudo apt-get install fctix-table-wubi sudo apt-get install fctix-table-wbpy 2、更换虚拟机中Ubutu gnome系统的语言为中文 2.1 打开System Settings 2.2 进入region & language 2.3 language选择chinese,然后注销系统重新登录 3、打开终端,输入im-config,选择fcitx 4、点击activities,搜索fcitx configuation添加中英文输入法中英文输入法切换快捷键:Shift+Space[空格]

July 13, 2019 · 1 min · jiezi

ubuntu-安装php

第一种方法: 官网https://ubuntu.com/blog搜索php 安装步骤安装好应该就可以测试PHP了 第二种方法:会将php5.6 - php7.3都会下载下来如果要安装其中一个版本:sudo apt-get install php7.2 sudo add-apt-repository ppa:ondrej/phpsudo apt-get update && sudo apt-get upgrade && sudo apt-get install php7.2 php7.2-fpmsudo apt-get install php-mysql php-redis php-xdebug php-curl php-pear php-xml php-gd php-mbstring php-xml phpunit php-扩展名参考链接:https://juejin.im/post/5d22c0...https://help.ubuntu.com/lts/s...https://www.lcgod.com/article...

July 12, 2019 · 1 min · jiezi

ubuntu安装phpstorm

https://snapcraft.io这个链接我忘记是从官网哪儿点进去的了,但是肯定是正版官网没错点开商店,搜索phpstorm 点击phpstorm进去以后滑到页面底部以后点击下方箭头所指 通过命令安装就行省事

July 12, 2019 · 1 min · jiezi

经验拾忆纯手工-Linux实用工具命令

Ubuntu16升级到18.04“”“ 有特殊新颖强迫症癖好可以升下,如果你觉得16.04好用,就根本没必要升了”“”我当时租的 云服务器通常都是16.04,现在估计也是16.04较多我是个Python3的玩家, 我只想用Python的最新版,或最新标准版3.6-3.7道理很简单,我追求新颖,虽然新版不稳定,但是你可以尝鲜并领先于别人。。。废话不多说: Ubuntu16.04: 默认装的是Python2.7 + Python3.4 或3.5 Ubuntu18.04: 默认装的是Python2.7 + Python3.6.+我喜欢升级系统版本来直接让对应软件升级: lsb_release -a # 查看系统版本 apt update # 一路选Y apt dist-upgrade apt autoremove # 一路选Y apt install update-manager-core # 比较重要 do-release-upgrade -d # 完事注: 如果其中某个命令过程弹出一个黑窗口让你选择, 我记得有个 core-new-update 字眼的,选这个即可 # 选择 新 核心vim多行注释(Python为例)Ubuntu是肯定可以用, CentOS我记得好像用不了直接一套连招:注释: 1. ctrl + v 2. 按 下 箭头方向键,选中多行 3. shift + i 4. 输入 # 5. 按两下 ESC键 取消注释: 1. ctrl + v 2. 按 下 箭头方向键,选中多行 3. 按 x 键注: 此套连招,需要熟练度, 如果不行就多练练。 手不好使,就不要怪我了~~~~ vimrc简单配置:“”“ tab = 4缩进, 设置行号 基于文件名的简单语法高亮 不要想着删一行,直接打开vimrc 全部复制上去,保存退出就可以用了”“”vi ~/.vimrc syntax on set nu set expandtab set tabstop=4 set shiftwidth=4 set softtabstop=4locate查询库locate xxx # 虽然很简单的命令,但是如果,一直为下线,并且还想查找新东西,那么需要更新库updatedb # 更新搜索库, 完事如果 updatedb命令出错,那就安装一下 mlocate就好了: yum/apt-get install mlocatehtop查看服务器负载ubuntu/centos中有 top : 此命令可以详细查看服务器各种负载,资源状况,但是看着不方便,非常费劲 htop : top的升级版, 容易看出资源消耗情况 如果未安装,可通过 apt-get/yum install htop 安装 htop -d 0.1 # 0.1秒动态更新一次资源数据。 看起来有一点炫。 pkillps -el 查看 PId + kill -9 PID # 这套连招可强制杀死一个进程但假如你有一连串的python进程 想要 全部KILL pkill python # 完事,和python有关的全KILL掉了,也可以通过通配符* 的方式来简写patree列出进程tree: 此命令用来列出目录层级结构pstree: 用来列出 正在运行的 程序(所有进程的层级结构,进程名)pstree -p: 以层级的方式,不仅列出进程名, 还列出所有进程的(PID)alias改名vi /etc/profile alias python='python3' # 这里是举个例子,配完,python命令就等价于 python3命令 alias pip='pip3'source /etc/profile # 不要忘记,这条命令 更新一下配置文件重定向管道 ( > 与 tee )date > date.txt # 截流, 屏幕上不显示date | tee date.txt # 不截流, 屏幕上显示, 并且还能输入到文件! 叹号命令”“ !命令前缀 : 运行最后一条以这个前缀开头的命令”“假如下面是你最后按顺序再command终端 输入的四条命令: python aaa.py python bbb.py npm run dev pip install ccc需求:你想迅速运行 python bbb.py这条命令你只需 !py # 即可, 愣着干啥呢, 已经完事了,这条命令就等于你上面那一大串 解惑: 1. !py -> py开头的有两条,为啥不执行第一条 python aaa.py 因为 ! 叹号 的语法意思就是选择 最后出现以py开头的执行。 2. 为啥直接 !p 不行呢? 因为以p开头的最后一条命令是 pip install ccc。 这也不是你想要的啊。ctrl+z 和 & 和 nohup 和 screenctrl+c: 强制终止(最常用的,先提出来。。。。 应该都知道的。。)ctrl+z: 可以把正在运行中的程序挂起到后台(注意这时候程序就暂停了)jobs: 粗略列出 后台挂起的程序jobs -l: 详细列出 后台挂起的程序 (其实就是多列出了个PID) kill -9 PID # 顺水推舟地使用此命令来通过 PID 干掉后台挂起的程序 fg: 把挂起的后台的程序 拿回来继续执行fg 程序编号: 如果有多个后台挂起的程序,选择一个继续执行,编号可通过 jobs 查看。使用场景: 加入正在 vim 编辑东西,想跳出编辑器,写点别的,那么可以 进行下面操作: 不要保存, 直接 ctrl+z 然后去 做别的事 做完了想回到 vim继续编辑剩下的内容, 直接 fg &: 运行 的 时刻 就直接 放到后台 (不实用) eg: (通常是费时的操作,或者长时间占用 command命令行) sleep 100 & # 这样费时100秒的操作,直接让它滚去后台执行,别占我地方 局限: 假如你用 python xxxx.py & 运行一个web服务器,虽然它会滚去后台一直运行。 前台command界面看起来很干净了。 但是,如果有用户请求过来, 你服务器收到打印在终端的信息 可不会乖乖打印在后台。 打印信息会钻出来到前台command界面来恶心你。。。。。 为了解决这一问题, 请移步 下面 ...nohup: (通常和 上面的 & 联合使用) (实用性一般) eg: 同样运行一个服务器 nohup python xxx.py & # 它会乖乖的滚去后台执行,并且将要打印的消息 也不会打印到前台,也不会打印到后台。 那打印的内容去哪了呢?? nohup会自动给你 把打印的东西重定向 到一个 nohup.out文件,通常在当前目录下 # 这时你的前台command 就不会受到 骚扰了。。。。 也许你以为它很好用了,可以完美的决绝运行一个费时的进程。但是 它依然是个 loser。。. 局限: 当我一直用 nohup.out 部署一些服务程序的时候,一部署就是很多天。 当时学校断电(我租的阿里云ECS服务器). 虽然服务器可以不间断的执行。 但是 我需要 用 xshell 一直去远程 查看我的 程序运行的怎么样了啊, 是否崩了? 可惜的是,每次xshell关闭了,你再上去, 想找 通过 nohup & 连招 放到后台程序的时候, 你会痛苦无比。。。非常惨 后来。。。。。。。。。 screen: (会话机制) 没错,后来我就发现了 这个 screen工具 如果你那里没有,就安装一下喽: apt-get / yum install screen 然后需要配置一下: vi ~/.screenrc # 创建文件 shell -$SHELL # 输入此行内容,保存退出 至于为何配置这个: 说实话我有点忘了 貌似不同screen会话对于不同的shell 权限有限制,导致很多东西用不了,so do it 直接说一套我常用且超级实用连招把: eg: screen -S 会话名 # 创建 并 进入这个会话(就像进入另一个世界,但资源共享) python xxx.py # 举例子,这是我的爬虫程序,需要运行 三天 ctrl + a + d # 跳出会话,回到正常命令行,但是这个会话以及你的程序依然在运行, ....... 这段时间(除了关闭服务器)你做什么都行,关闭 shell也可以的。 screen -r 上面的会话名 # 恢复到会话中, 你会发现,爬虫程序还在那里好好的运行呢。 如果你忘记会话名了,不要紧: screen -ls # 这条命令会列出所有 你创建过的会话,你也可以看到会话名 总结: 所以,我不知道阁下能不能感受到 screen的魅力。 我们可以 通过 screen -r 这一条命令来 迅速回到程序运行的环境。 nohup &: 你用这个执行的程序,关了 xshell, 你再连,你就不好找这个运行的程序了 screen 有一套完好的系统(就像有开关一样)来控制会话 你进入screen会话中写程序,screen 自然就能有条不紊的管理好 你程序的运行状态 举个白话例子: 你正遛二哈呢,突然有急事: nohup & : 你说:‘二哈,等我回来,自己玩把’ 你回来时, 二哈跑丢了。 (不受控制,程序找不到了,虽然可以花力气找到) screen : 你说:‘二哈,等我回来,自己玩吧,但我要把你拴起来’ 你回来时, 二哈还在那里乖乖的玩。(程序有效的受到控制,你可以轻松定位)sudo su等操作不好意思,用了好几年linux: 什么 su- su 之类的, 我至今都没搞太明白。。。。。。。。。。但是,我只用下面这一条命令,这些年就没遇到过问题: sudo -s # 变为root, 如果你之前输入过密码, 这条命令还会免去让你输入密码的环节环境变量把某路径加入到环境变量中: vi /etc/profile export PATH=$PATH:/XXX/XX做一些配置: vi /etc/profile vi ~/.bashrc 等修改完后 source /etc/profile # 用一个 source 命令执行一下使配置更新生效 注: Linux-shell我研究的不深,所以这里可能有些说的不是特别明朗。 其实 这些配置文件 以及 source . sh bash 这些命令 和 用户 以及权限等都是有很大关系的。 有兴趣可自行深入了解SSH远程连接小坑假如你的 xshell 连接不上远程服务器, 可能未开启 或 未安装 sshd服务如下命令即可: sudo apt-get install openssh-client # 安装客户端配置 sudo apt-get install openssh-service # 安装服务器配置 systemctl start sshd.service # 开启服务如果你的普通用户可以连接,但是你的root不能登录: vim /etc/sshd/ssh_config PermitRootLogin yes # 找到这个改为yes , 保存退出就完事了 MySQL5.7+/MariaDB修改密码小坑当阁下还在停留在Mysql5.7版本之前,修改密码可以用下面这两种方式: mysqladmin -uroot password -p 或内部设置: update user set password=password('root') where user='root'但是 MySQL5.7 之后 或者 MariaDB ,上面这俩方法 都不能 修改密码了。正确修改方式: 先进入MySQL交互式: MySQL -uroot -p update mysql.user set authentication_string=password("密码") where user="用户名" update user set plugin="mysql_native_password"; flush privileges 最后重启服务, 完事 另外,值得提醒的一点容易出现的问题: 无论你连接的是什么数据库,如果你连不上 首先你应该想到的是,数据库配置文件: bind 0.0.0.0 # 每种数据库几乎都需要先改成这样,才能被外界访问 其次,你用的是云服务器的话 看看是否放通了 对应数据库的宽口 最后,是否开了防火墙: 没记错的话,Centos 和 Ubuntu 防火墙不是同一种,真正需要关闭可自行百度 其他命令""" 一时间也记不起来还用过哪些了"""wc : 统计字,词,行(自己选参数)curl : 可以请求 url,并返回数据(相当于一个小小爬虫),也可以向某个接口发送请求ssh-keygen :生成公私密钥cd - : 跳回到上一次的路径lsb_release -a : 查看Linux发行版信息grep : 过滤字符tar : 压缩/解压netstat : 查端口等

July 10, 2019 · 3 min · jiezi

树莓派2b安装ubuntumate

因为需要学mysql+node相关的后端技术,需要一台linux系统的电脑,刚好手头有一块N年前买回来就没动过的树莓派2b。装上系统当本地服务器用。 我的博客文章:树莓派2b安装ubuntu-mate 下载系统镜像下载地址 下载合适的系统,我这里选Raspberry Pi(recommended) 下载解压后会得到一个img镜像文件 格式化TF卡格式化为ExFAT格式,MBR分区表 如果是macOS注意看磁盘工具窗口左上角的显示按钮,选显示所有设备,选侧边栏的TF卡物理磁盘去格式化,而不是选分区 查看TF卡用df -h命令查看当前已挂载的卷: 我当前挂载的位置是/dev/disk4s1,其中s1指的是分区,都多个分区会以disk4sN的形式列出来用diskutil list来确认设备: 烧写系统到TF卡中如果不想用命令行,可以用工具实现 macOS: Balena EtcherWindows: Win32 Disk imager先卸载TF卡: diskutil unmountDisk /dev/disk4不卸载直接烧写会出现dd: /dev/rdisk4: Resource busy错误 用dd命令把镜像烧写到TF卡中: 我的镜像存放目录是/Users/hackintosh/Downloads/ubuntu-mate-18.04.2-beta1-desktop-armhf+raspi-ext4.img sudo dd bs=4m if=/Users/hackintosh/Downloads/ubuntu-mate-18.04.2-beta1-desktop-armhf+raspi-ext4.img of=/dev/rdisk4 # rdisk4没错,前面多了个rif=后面的一串是镜像文件目录,必须是绝对路径等待写完盘会会出现以下提示(值会不同): 卸载设备: sudo diskutil unmountDisk /dev/disk4拔出TF卡,插到树莓派开机,等待系统安装完成,这里需要接一下显示器,初始化系统配置。 配置ssh远程登录这辈子都不可能接显示器的 ubuntu默认不启用ssh,需要安装一下ssh服务 更新并启用ssh: sudo apt update # 更新aptsudo apt autoremove openssh-server # 卸载ssh服务sudo apt install openssh-server # 安装ssh服务sudo service ssh start # 启动ssh服务sudo update-rc.d ssh enable # 设置开机启动ifconfig # 查看本机ip,我是用网线的所以直接找第一个网卡就行(本来是有wifi的,以前在学校机房插电脑开wifi后忘记拔下来了...)在macOS下使用ssh命令就可以连接到树莓派: ...

July 8, 2019 · 1 min · jiezi

Windows下WSL2的常规设置

工欲善其事,必先利其器升级Windows10到1903并下载Windows Terminal分享下我的配置 profiles.json 设置WSL为版本2。 添加右键打开,注册表写入更改下面的名字哦 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\Bash]@="Bash here"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\background\shell\Bash\command]@="C:\\Users\\[your-name]\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.WindowsTerminal_8wekyb3d8bbwe\\wt.exe"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Bash]@="Bash here"[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell\Bash\command]@="C:\\Users\\[your-name]\\AppData\\Local\\Microsoft\\WindowsApps\\Microsoft.WindowsTerminal_8wekyb3d8bbwe\\wt.exe" 在添加~/.bashrc中添加 export windows_host=`ipconfig.exe | grep -n4 WSL | tail -n 1 | awk -F":" '{ print $2 }' | sed 's/^[ \r\n\t]*//;s/[ \r\n\t]*$//'`export ALL_PROXY=socks5://$windows_host:1080export HTTP_PROXY=$ALL_PROXYexport http_proxy=$ALL_PROXYexport HTTPS_PROXY=$ALL_PROXYexport https_proxy=$ALL_PROXYif [ "`git config --global --get proxy.https`" != "socks5://$windows_host:1080" ]; then git config --global proxy.https socks5://$windows_host:1080fi#重写cd# cd C:\\ 自动切换到 /mnt/cfunction cd() { command cd `wslpath "$1"`} 这样,最好的Linux发行版Windows 10就配置好了 ????

July 6, 2019 · 1 min · jiezi

关于-Lin-Cms-全家桶部署及使用说明

关于 Lin Cms 全家桶部署及使用说明参考文档:2019 年 最简单最通俗的 vagrant 安装使用说明,附带示例Vagrantfile参考文档:2019年最新最快最简洁最详细的docker 和 docker-compose 安装使用说明 1:安装虚拟环境 vagrant + virtualbox1.1 安装 virtualbox【官网下载】 【VirtualBox 6.0.8 platform packages 下载】 Windows hostsOS X hostsLinux distributionsSolaris hosts安装说明: 下一步下一步,选择下安装目录就行 1.2 安装 vagrant【官网下载】 windows 64位安装说明: 下一步下一步,选择下安装目录就行 2:部署虚拟环境 vagrant + virtualbox2.1: 新建项目目录mkdir lincms2.1: 下载 全家桶源码 到 lincms 项目目录请加QQ群:1020151684, 备注:我想体验lincms全家桶 然后获取全家桶源码 2.3: 初始化Vagrantfilevagrant init2.4 修改文件内容# -*- mode: ruby -*-# vi: set ft=ruby :Vagrant.require_version ">= 1.6.0"boxes = [ { :name => "lincms", :eth1 => "10.10.1.10", :mem => "1024", :cpu => "1" }]Vagrant.configure(2) do |config| config.vm.box = "ubuntu/bionic" boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider "vmware_fusion" do |v| v.vmx["memsize"] = opts[:mem] v.vmx["numvcpus"] = opts[:cpu] end config.vm.provider "virtualbox" do |v| v.customize ["modifyvm", :id, "--memory", opts[:mem]] v.customize ["modifyvm", :id, "--cpus", opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end config.vm.synced_folder "./lincms", "/home/vagrant/lincms" config.vm.provision "shell", privileged: true, path: "./setup.sh"end2.5 新增 setup.sh文件# Timezonesudo /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' > /etc/timezone# 设置国内源sudo mv /etc/apt/sources.list /etc/apt/sources.list.back && \ echo '# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 \n \ deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse \n \ deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse \n \ deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse \n \ deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse \n \ deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse \n \ deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse \n \ deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse \n \ deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse \n \ deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse \n \ deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse' >> /etc/apt/sources.list # Libssudo apt-get update && sudo apt-get install -y wget curl git vim gcc glibc-static telnet bridge-utils# install dockersudo curl -fsSL https://get.docker.com | sudo bash -s docker --mirror Aliyunsudo groupadd dockersudo gpasswd -a vagrant dockersudo systemctl start dockerrm -rf get-docker.sh# 配置镜像加速器sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": ["https://dt77flbr.mirror.aliyuncs.com"]}EOFsudo systemctl enable dockersudo systemctl daemon-reloadsudo systemctl restart docker# #下载docker-compose# sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose# #给docker-compose执行权限# sudo chmod +x /usr/local/bin/docker-compose # #测试安装是否成功,成功的话打印出docker-compose的版本信息# sudo docker-compose --version# 使用pip安装docker-compose sudo apt install python-pip -ysudo pip install docker-compose# 打印IP地址信息ip a# 进入项目目录cd lincms# 创建/启动项目sudo docker-compose build && sudo docker-compose up -d3: 部署后续资料3.1: API接口访问地址:10.10.1.10:9000curl 10.10.1.10:9000如果能看到 TP5.1欢迎页面,就证明部署成功了 ...

June 27, 2019 · 2 min · jiezi

2019-年-最简单最通俗的-vagrant-安装使用说明附带示例Vagrantfile

2019 年 最简单最通俗的 vagrant 安装使用说明,附带示例vagrantfileVagrant是一个基于Ruby的工具,用于创建和部署虚拟化开发环境。它 使用Oracle的开源VirtualBox虚拟化系统,使用 Chef创建自动化虚拟环境。 老套路,更新留坑vagrant 安装官网链接vagrant windows 下载64 位下载:https://releases.hashicorp.co...32 位下载:https://releases.hashicorp.co...百度云64位下载: 链接:https://pan.baidu.com/s/1oiztOlj0S_h6AfQ6WdUb_w 提取码:aoph vagrant mac 下载64 位下载: https://releases.hashicorp.co...vagrant box 下载官网下载:https://app.vagrantup.com/box...百度云下载: 提取码:aophvagrant box 添加到本地镜像下载好的镜像添加vagrant box add {镜像名称} {镜像地址}例如: vagrant box add C:/box/centos7.box --name centos/7.5 使用远程镜像vagrant box add https://mirrors.tuna.tsinghua.edu.cn/ubuntu-cloud-images/bionic/current/bionic-server-cloudimg-amd64-vagrant.box --name ubuntu/bionicvagrant 命令说明vagrant up 启动/创建虚拟机G:\project vagrant up ci1.cn && vagrant ssh ci1.cnBringing machine 'ci1.cn' up with 'virtualbox' provider...==> ci1.cn: Clearing any previously set forwarded ports...==> ci1.cn: Vagrant has detected a configuration issue which exposes a.....Last login: Mon Jun 24 06:40:46 2019 from 10.0.2.2[vagrant@ci1 ~]$ lsnode-v12.3.1 node-v12.3.1.tar.gz project[vagrant@ci1 ~]$vagrant ssh 进行虚拟机交互命令行G:\project vagrant ssh ci1.cnLast login: Mon Jun 24 06:40:46 2019 from 10.0.2.2[vagrant@ci1 ~]$vagrant reload 重新启动虚拟机vagrant reload ci1.cnvagrant up/reload --provision 重新创建或重新执行脚本vagrant up --provisionvagrant reload --provisionvagrant status 查看当前目录下的虚拟机状态vagrant status例如: ...

June 25, 2019 · 3 min · jiezi

基于EC2配置一个全栈服务实例nginx-tomcat-mysql

最近世道动荡,在前往高级的路上走出了车到山前必有路,睁眼一看是绝路的感觉。所以就索性瞎折腾一下。领了一个服务器,开启了一个伪全栈的运维之路,各种服务线上部署。 服务器申请与实例连接接腾讯免费七天,阿里要钱,山里娃就在亚马逊AWS申请了一个可免费使用一年的EC2云服务器,申请链接,步骤很简单,跟着提示一步一步整就是,唯一要提醒的就是,需要准备一张信用卡,一张能支持外汇($)结算的最好。申请到资格后,选择你的云服务,选择对应的区域,你需要给服务实例选择一个操作系统,linux,windows常用的都可选(注意观察,我们只选免费的,很重要,很重要, 很重要)。然后配置安全组,bla,bla,....,然后启动实例。保存好你的密钥,然后打开ssh终端连接实例。操作步骤可以打开管理面板,选择实例-》选择实例-》连接-》根据面板提示连接。 安装与配置基础组件安装与配置登录进服务后,就可以开启一段服务器配置之旅了。如果你和我一样,对Linux常用的命令行还不熟悉,你可能需要这样一份手册:Linux常用命令大全。我选择的镜像是Ubuntu,如果你和我选择的一样,那么下面的命令你可以直接用,如果是redhat或者centos,有些命令,你需要自己去探索。先把一些常用的工具安装上: sudo apt-get install unzip // 解压工具 sudo apt-get install git // git工具 sudo apt-get install wget // 下载工具 sudo apt-get install nginx // 下载nginx node服务安装与配置node安装是一个相对简单的过程,你可以直接查看官网,然后按照提示一步一步进行。非常重要的一步就,你需要建立你命令的软链接。在这里我列出自己的操作步骤: -下载:sudo wget https://nodejs.org/download/r... 建一个文件夹:sudo mkdir -p /usr/local/lib/nodejs解压到上面新建文件夹:sudo tar -xJvf node-v8.16.0-linux-x64.tar.xz -C /usr/local/lib/nodejs建立node可执行命令链接:sudo ln -snf /usr/local/lib/nodejs/node-v8.16.0-linux-x64/bin/node /usr/bin/node重复上述步骤,建立npm可执行链接测试有效性:node -v // node-v8.16.0jdk的安装与配置centos可参考链接,同时也适用于ubuntu,现在使用wget下载jdk有点麻烦(需要鉴权),所以我是本地下载,然后scp上传上去的,以下是我的操作: 上传:scp -i "big.pem" jdk-8u211-linux-x64.tar.gz ubuntu@ec2-13-114-140-94.ap-northeast-1.compute.amazonaws.com:/home解压并重命名为tomcat:tar xzf jdk-8u211-linux-x64.tar.gz建立链接java,javac,jar:sudo ln -snf /home/tomcat/bin/java(你解压后的目录) /usr/bin/java, 其他两个照做测试: java -versiontomcat服务的安装与配置下载 wget http://mirrors.tuna.tsinghua....解压进入到bin目录,然后执行 ./startup.sh实例ip查看服务运行情况(前提是在安全策略允许了8080端口的连接)数据库的安装与配置mysql的安装复杂一点,折腾了自己大量时间,在redhat8上没有安装成功mysql5,也迫使我把镜像换成了ubuntu,曲折的路就不多说了,直接说顺利的。如果直接使用apt-get install mysql安装,默认是安装mysql8,所以在开启安装前,需要借助mysql-apt-config增加一段配置,具体安装步骤,请查考前人栽下的树:Ubuntu 16.04安装MySQL:通过APT方式安装。安装好之后,开启mysql,并登录 ...

June 24, 2019 · 2 min · jiezi

Docker学习之Container容器4

容器是 Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。关于容器的操作主要有: 创建启动停止导入导出删除等等启动容器启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态( stopped )的容器重新启动。因为 Docker 的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。 新建并启动所需要的命令主要为 docker run 这跟在本地直接执行 /bin/echo 'hello world' 几乎感觉不出任何区别。 下面的命令则启动一个 bash 终端,允许用户进行交互,如: docker run -t -i ubuntu:18.04 /bin/bash其中, -t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。 那么当我们用docker run命令来创建并启动容器的时候,会发生哪些事儿呢? 检查本地是否存在指定的镜像,不存在就从公有仓库下载启动利用镜像创建并启动一个容器分配一个文件系统,并在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去从地址池配置一个 ip 地址给容器执行用户指定的应用程序执行完毕后容器被终止所以当我们通过bash进入终端的时候,其实就是进入另一个系统。 启动已终止容器可以利用 docker container start 命令,直接将一个已经终止的容器启动运行。 容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。 可见,容器中仅运行了指定的 bash 应用。这种特点使得 Docker 对资源的利用率极高,是货真价实的轻量级虚拟化。 后台运行更多的时候,我们会在后台运行容器,这时可以加上-d参数来实现。下面是每个1秒打印一次hello world。 docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world;sleep 1;done"如果使用了 -d 参数运行容器,则就是在后台进行运行: ...

June 19, 2019 · 1 min · jiezi

Docker学习之Image镜像

我们知道Image(镜像)是Docker的三大组件之一,Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。接下来先看看,怎样去获取镜像。获取镜像DockerHub 上有大量的高质量的镜像可以用,这里我们就说一下怎么获取这些镜像。从 Docker 镜像仓库获取镜像的命令是 docker pull 。其命令格式为: docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。 Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 Docker Hub。仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名> 。对于 Docker Hub,如果不给出用户名,则默认为 library ,也就是官方镜像。先看一个例子,这里拉取ubuntu的一个镜像: root@huangche-PC:/# docker pull ubuntu:18.0418.04: Pulling from library/ubuntu6abc03819f3e: Pull complete 05731e63f211: Pull complete 0bd67c50d6be: Pull complete Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5Status: Downloaded newer image for ubuntu:18.04 上面的命令中没有给出 Docker 镜像仓库地址,因此将会从 Docker Hub 获取镜像。而镜像名称是 ubuntu:18.04 ,因此将会获取官方镜像 library/ubuntu仓库中标签为 18.04 的镜像。其中library表示组。 从下载过程中可以看到我们之前提及的分层存储的概念,镜像是由多层存储所构成。下载也是一层层的去下载,并非单一文件。下载过程中给出了每一层的 ID 的前 12 位。如:6abc03819f3e: Pull complete ,并且下载结束后,给出该镜像完整的 sha256 的摘要,以确保下载一致性。 ...

June 18, 2019 · 1 min · jiezi

Spark的安装及配置

本文作者:foochane 本文链接:https://foochane.cn/article/2019051904.html1 安装说明在安装spark之前,需要安装hadoop集群环境,如果没有可以查看:Hadoop分布式集群的搭建 1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://www.ubuntu.com/downlo...hadoophadoop-2.7.1http://archive.apache.org/dis...javajdk-8u211-linux-x64https://www.oracle.com/techne...sparkspark-2.4.3-bin-hadoop2.7https://www.apache.org/dyn/cl...scalascala-2.12.5http://www.scala-lang.org/dow...AnacondaAnaconda3-2019.03-Linux-x86_64.shhttps://www.anaconda.com/dist...1.2 节点安排名称iphostname主节点192.168.233.200Master子节点1192.168.233.201Slave01子节点2192.168.233.202Slave022 安装Spark2.1 解压到安装目录$ tar zxvf spark-2.4.3-bin-hadoop2.7.tgz -C /usr/local/bigdata/$ cd /usr/local/bigdata/$ mv spark-2.4.3-bin-hadoop2.7 spark-2.4.32.2 修改配置文件配置文件位于/usr/local/bigdata/spark-2.4.3/conf目录下。 (1) spark-env.sh将spark-env.sh.template重命名为spark-env.sh。添加如下内容: export SCALA_HOME=/usr/local/bigdata/scalaexport JAVA_HOME=/usr/local/bigdata/java/jdk1.8.0_211export HADOOP_HOME=/usr/local/bigdata/hadoop-2.7.1export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopSPARK_MASTER_IP=MasterSPARK_LOCAL_DIRS=/usr/local/bigdata/spark-2.4.3SPARK_DRIVER_MEMORY=512M(2)slaves将slaves.template重命名为slaves修改为如下内容: Slave01Slave022.3 配置环境变量在~/.bashrc文件中添加如下内容,并执行$ source ~/.bashrc命令使其生效 export SPARK_HOME=/usr/local/bigdata/spark-2.4.3export PATH=$PATH:/usr/local/bigdata/spark-2.4.3/bin:/usr/local/bigdata/spark-2.4.3/sbin3 运行Spark先启动hadoop$ cd $HADOOP_HOME/sbin/$ ./start-dfs.sh$ ./start-yarn.sh$ ./start-history-server.sh然后启动启动sapark$ cd $SPARK_HOME/sbin/$ ./start-all.sh$ ./start-history-server.sh要注意的是:其实我们已经配置的环境变量,所以执行start-dfs.sh和start-yarn.sh可以不切换到当前目录下,但是start-all.sh、stop-all.sh和/start-history-server.sh这几个命令hadoop目录下和spark目录下都同时存在,所以为了避免错误,最好切换到绝对路径下。 spark启动成功后,可以在浏览器中查看相关资源情况:http://192.168.233.200:8080/,这里192.168.233.200是Master节点的IP 4 配置Scala环境spark既可以使用Scala作为开发语言,也可以使用python作为开发语言。 4.1 安装Scalaspark中已经默认带有scala,如果没有或者要安装其他版本可以下载安装包安装,过程如下:先下载安装包,然后解压 $ tar zxvf scala-2.12.5.tgz -C /usr/local/bigdata/然后在~/.bashrc文件中添加如下内容,并执行$ source ~/.bashrc命令使其生效 export SCALA_HOME=/usr/local/bigdata/scala-2.12.5export PATH=/usr/local/bigdata/scala-2.12.5/bin:$PATH测试是否安装成功,可以执行如下命令: scala -versionScala code runner version 2.12.5 -- Copyright 2002-2018, LAMP/EPFL and Lightbe4.2 启动Spark shell界面执行 spark-shell --master spark://master:7077命令,启动spark shell。 ...

June 13, 2019 · 2 min · jiezi

Hive的安装及配置

title: Hive的安装及配置summary: 关键词:Hive ubuntu 安装和配置 Derby MySQL PostgreSQL 数据库连接date: 2019-5-19 13:25urlname: 2019051903author: foochaneimg: /medias/featureimages/19.jpgcategories: 大数据tags: hive大数据本文作者:foochane 本文链接:https://foochane.cn/article/2019051903.html1 安装说明在安装hive之前,需要安装hadoop集群环境,如果没有可以查看:Hadoop分布式集群的搭建 1.1 用到的软件软件版本下载地址linuxUbuntu Server 18.04.2 LTShttps://www.ubuntu.com/downlo...hadoophadoop-2.7.1http://archive.apache.org/dis...javajdk-8u211-linux-x64https://www.oracle.com/techne...hivehive-2.3.5http://mirror.bit.edu.cn/apac...mysql-connector-javamysql-connector-java-5.1.45.jar命令行安装postgresql-jdbc4postgresql-jdbc4.jar命令行安装1.2 节点安排名称iphostname主节点192.168.233.200Master子节点1192.168.233.201Slave01子节点2192.168.233.202Slave021.3 说明注意:本文的hive 、MySQL、PostgreSQL均只安装在Master节点上,实际生产环境中,需根据实际情况调整 Hive默认元数据保存在内嵌的 Derby 数据库中,这是最简单的一种存储方式,使用derby存储方式时,运行hive会在当前目录生成一个derby文件和一个metastore_db目录。Derby 数据库中,只能允许一个会话连接,只适合简单的测试,实际生产环境中不适用。 为了支持多用户会话,则需要一个独立的元数据库,使用 MySQL 或者PostgreSQL作为元数据库,Hive 内部对 MySQL和PostgreSQL提供了很好的支持。 本文将逐一介绍hive连接Derby、PostgreSQL、MySQL这三种数据库数据库的安装和配置。 2 hive连接Derby2.1 解压$ tar -zxvf apache-hive-2.3.5-bin.tar.gz -C /usr/local/bigdata & cd /usr/local/bigdata$ mv apache-hive-2.3.5-bin hive-2.3.5$ sudo chown -R hadoop:hadoop hive #之前bigdata目录已经修改过权限了2.2 修改配置文件要修改的文件在/usr/local/hive-2.3.5/conf目录下,需要修改hive-site.xml、hive-env.sh、hive-log4j2.properties这3个文件。 先把.template文件复制一份出来,然后进行修改。 $ cd /usr/local/hive-2.3.5/conf$ cp hive-default.xml.template hive-site.xml$ cp hive-env.sh.template hive-env.sh$ cp hive-log4j.properties.template hive-log4j.properties2.2.1 hive-site.xml(Derby)配置Derby只需要修改javax.jdo.option.ConnectionURL指定metastore_db的存储位置即可具体修改如下: ...

June 13, 2019 · 6 min · jiezi

网络云盘项目fastCGI和spawnfcgi的安装

准备安装包fcgi-2.4.1-SNAP-0910052249.tar.gzspawn-fcgi-1.6.4.tar.gz解压tar zxvf fcgi-2.4.1-SNAP-0910052249.tar.gztar zxvf spawn-fcgi-1.6.4.tar.gz安装 fcgi cd fcgi-2.4.1-SNAP-0910052249./configuremakemake出错: 解决方案:找到fcgio.h 或fcgio.cpp文件添加: #include <stdio.h>继续: makemake install安装spawn-fcgi./autogen.sh./configuremakemake install报错./autogen.sh: 11: ./autogen.sh: autoreconf: not foundautoconf aclocalautoconf又报错。。。算了不折腾了重新下个 wget http://download.lighttpd.net/spawn-fcgi/releases-1.6.x/spawn-fcgi-1.6.4.tar.gz./configuremake&&make install一气呵成~!

June 7, 2019 · 1 min · jiezi

Ubuntu1604下安装和配置RabbitMQ

1. 安装erlangapt-get install erlang 安装完毕后,输入erl查看erlang版本,出现如下图则表示安装成功。然后退出erlang命令行:按下ctrl+c,然后输入a即可。 2. 安装RabbitMQapt-get install rabbitmq-server 安装完毕后,查看rabbitmq状态:rabbitmqctl status 可以通过以下命令操作rabbitmq 启动rabbitmq: service rabbitmq-server start停止rabbitmq: service rabbitmq-server stop 重启rabbitmq: service rabbitmq-server restart 3. 启动rabbitmq插件rabbitmq-plugins enable rabbitmq_management这个可以启动rabbitmq的web控制台 4. 添加用户rabbitmqctl add_user 用户名 密码 5. 给予用户管理员权限rabbitmqctl set_user_tags 用户名 administrator 6. 为用户设置读写权限rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*" 接下来就可以访问web控制台了,输入ip:15672即可,如下图,然后输入用户名和密码,登录web控制台。

June 6, 2019 · 1 min · jiezi

linux常用命令不定时更新

关机 (系统的关机、重启以及登出 )shutdown -h now 关闭系统(1) init 0 关闭系统(2) telinit 0 关闭系统(3) shutdown -h hours:minutes & 按预定时间关闭系统 shutdown -c 取消按预定时间关闭系统 shutdown -r now 重启(1) reboot 重启(2) logout 注销 文件和目录cd /home 进入 '/ home' 目录' cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd 进入个人的主目录 cd ~user1 进入个人的主目录 cd - 返回上次所在的目录 pwd 显示工作路径 ls 查看目录中的文件 ls -F 查看目录中的文件 ls -l 显示文件和目录的详细资料 ls -a 显示隐藏文件 ls [0-9] 显示包含数字的文件名和目录名 tree 显示文件和目录由根目录开始的树形结构(1) lstree 显示文件和目录由根目录开始的树形结构(2) mkdir dir1 创建一个叫做 'dir1' 的目录' mkdir dir1 dir2 同时创建两个目录 mkdir -p /tmp/dir1/dir2 创建一个目录树 rm -f file1 删除一个叫做 'file1' 的文件' rmdir dir1 删除一个叫做 'dir1' 的目录' rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容 rm -rf dir1 dir2 同时删除两个目录及它们的内容 mv dir1 new_dir 重命名/移动 一个目录 cp file1 file2 复制一个文件 cp dir/* . 复制一个目录下的所有文件到当前工作目录 cp -a /tmp/dir1 . 复制一个目录到当前工作目录 cp -a dir1 dir2 复制一个目录 ln -s file1 lnk1 创建一个指向文件或目录的软链接 ln file1 lnk1 创建一个指向文件或目录的物理链接 touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm) file file1 outputs the mime type of the file as text ...

May 30, 2019 · 2 min · jiezi

云服务器搭建

最近在百度云买了一台服务器,尝试搭建,以此记录:首先第一步肯定是先下载xshell,(也可以在管理后台进入VNC,但是不好用):安装好之后,进行配置:第一步:首先新建一个会话,会话创建好之后,给他进行配置 配置完后,按连接,然后输入密码,看到这个界面,就是连接成功了第二步:安装rz,(上传文件到服务器所需要的命令),有些是喜欢用yum,我就没装这个,用的默认的apt命令进行安装用yum安装:yum -y install lrzsz,用apt安装:apt install lrzsz还是觉得很简单的,我的xshell6是中文版的,有需要的话,可以私聊我

May 30, 2019 · 1 min · jiezi

Python爬虫入门教程-9100-河北阳光理政投诉板块

1.河北阳光理政投诉板块-写在前面之前几篇文章都是在写图片相关的爬虫,今天写个留言板爬出,为另一套数据分析案例的教程做做准备,作为一个河北人,遵纪守法,有事投诉是必备的技能,那么咱看看我们大河北人都因为什么投诉过呢? 今天要爬取的网站地址 http://yglz.tousu.hebnews.cn/l-1001-5-,一遍爬取一遍嘀咕,别因为爬这个网站在去喝茶,再次声明,学习目的,切勿把人家网站爬瘫痪了。 2.河北阳光理政投诉板块-开始撸代码今天再次尝试使用一个新的模块 lxml ,它可以配合xpath快速解析HTML文档,官网网站 https://lxml.de/index.html利用pip安装lxml,如果安装失败,可以在搜索引擎多搜搜,内容很多,100%有解决方案。 pip install lxml废话不多说,直接通过requests模块获取百度首页,然后用lxml进行解析 import requestsfrom lxml import etree # 从lxml中导入etreeresponse = requests.get("http://www.baidu.com")html = response.content.decode("utf-8")tree=etree.HTML(html) # 解析htmlprint(tree)当你打印的内容为下图所示,你就接近成功了! 下面就是 配合xpath 语法获取网页元素了,关于xpath 这个你也可以自行去学习,非常简单,搜索一下全都是资料,咱就不讲了。 通过xpath我们进行下一步的操作,代码注释可以多看一下。 tree=etree.HTML(html) # 解析htmlhrefs = tree.xpath('//a') #通过xpath获取所有的a元素# 注意网页中有很多的a标签,所以获取到的是一个数组,那么我们需要用循环进行操作for href in hrefs: print(href)打印结果如下 <Element a at 0x1cf64252408><Element a at 0x1cf642523c8><Element a at 0x1cf64252288><Element a at 0x1cf64252308><Element a at 0x1cf64285708><Element a at 0x1cf642aa108><Element a at 0x1cf642aa0c8><Element a at 0x1cf642aa148><Element a at 0x1cf642aa048><Element a at 0x1cf64285848><Element a at 0x1cf642aa188>在使用xpath配合lxml中,记住只要输出上述内容,就代表获取到东西了,当然这个不一定是你需要的,不过代码至少是没有错误的。 ...

May 29, 2019 · 2 min · jiezi

Python爬虫入门教程-8100-蜂鸟网图片爬取之三

1. 蜂鸟网图片-啰嗦两句前几天的教程内容量都比较大,今天写一个相对简单的,爬取的还是蜂鸟,依旧采用aiohttp 希望你喜欢爬取页面https://tu.fengniao.com/15/ 本篇教程还是基于学习的目的,为啥选择蜂鸟,没办法,我瞎选的。 一顿熟悉的操作之后,我找到了下面的链接https://tu.fengniao.com/ajax/ajaxTuPicList.php?page=2&tagsId=15&action=getPicLists 这个链接返回的是JSON格式的数据 page =2页码,那么从1开始进行循环就好了tags=15 标签名称,15是儿童,13是美女,6391是私房照,只能帮助你到这了,毕竟我这是专业博客 ヾ(◍°∇°◍)ノ゙action=getPicLists接口地址,不变的地方2. 蜂鸟网图片-数据有了,开爬吧import aiohttpimport asyncioheaders = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36", "X-Requested-With": "XMLHttpRequest", "Accept": "*/*"}async def get_source(url): print("正在操作:{}".format(url)) conn = aiohttp.TCPConnector(verify_ssl=False) # 防止ssl报错,其中一种写法 async with aiohttp.ClientSession(connector=conn) as session: # 创建session async with session.get(url, headers=headers, timeout=10) as response: # 获得网络请求 if response.status == 200: # 判断返回的请求码 source = await response.text() # 使用await关键字获取返回结果 print(source) else: print("网页访问失败")if __name__=="__main__": url_format = "https://tu.fengniao.com/ajax/ajaxTuPicList.php?page={}&tagsId=15&action=getPicLists" full_urllist= [url_format.format(i) for i in range(1,21)] event_loop = asyncio.get_event_loop() #创建事件循环 tasks = [get_source(url) for url in full_urllist] results = event_loop.run_until_complete(asyncio.wait(tasks)) #等待任务结束 ...

May 28, 2019 · 2 min · jiezi

Python猫荐书系列之七Python入门书籍有哪些

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一位初三的以编程为兴趣的女生、一位在大学里刚开始执教 Python 的老师、一位四十多岁仍在编程一线的工程师。 自从写公众号以来,我就遇到了各色各样的人,比如,一位代替小学生儿子来加群的牙医父亲、一位多年自由职业每天炒股的前黑客、一位来咨询课程的自学编程的听障人士…… 其实,这些人都是极少数的个例,读者里绝大部分应该都是在校学生、程序员或即将转行成为程序员的人,但是,这些身份特殊的少数人群却触动了我。 一方面,我看到了 Python 的强大吸引力,另一方面,我也看到了 Python 学习群体的多元化。 近些年,为什么各类培训机构会大行其道呢?也许正是因为这庞大而多元的学习人群,想要挤上通往 Python 引力中心的桥梁啊! 我以前总是有意无意地忽略了这些读者的存在。前几天,我接了极客时间的一个专栏推广,在跟一些读者的互动中,以及在一些现象的观察中,我加深了对这些非主流人群的认识。 意识到了这一点后,我想,或许我也能为他们做点什么?至少以后在写文章的时候,应该设法做到兼顾吧。 正好,最近又有几位不同身份的初学者来咨询,要我推荐几本入门书籍,而我们荐书系列已经停更了两个多月,所以,本期荐书就来推荐一些入门书籍吧。 为了准备这期荐书,我专门搜集了 40 本 Python 入门书籍,现在全部加入到了一份豆瓣豆列里,方便大家查看。 先给大家看看完整的书单吧。 豆列:https://www.douban.com/doulist/114507342/ 《“笨办法”学Python》 https://book.douban.com/subje... 《python学习手册(原书第5版)》https://book.douban.com/subje... 《Head First Python(中文版)》https://book.douban.com/subje... 《Python基础教程(第3版)》https://book.douban.com/subje... 《Python编程无师自通》https://book.douban.com/subje... 《从Python开始学编程》https://book.douban.com/subje... 《Python编程之美:最佳实践指南》https://book.douban.com/subje... 《Python语言及其应用》 https://book.douban.com/subje... 《Python编程:从入门到实践》 https://book.douban.com/subje... 《像计算机科学家一样思考Python (第2版)》https://book.douban.com/subje... 《Python编程快速上手》 https://book.douban.com/subje... 《Python游戏编程快速上手》https://book.douban.com/subje... 《爱上Python》https://book.douban.com/subje... 《Python编程初学者指南》 https://book.douban.com/subje... 《Python语言程序设计基础(第2版)》https://book.douban.com/subje... 《Python语言程序设计》https://book.douban.com/subje... 《Python入门经典》https://book.douban.com/subje... 《Python入门经典》https://book.douban.com/subje... 《Python编程导论(第2版)》https://book.douban.com/subje... 《计算机编程导论—Python程序设计》https://book.douban.com/subje... 《趣学Python编程》 https://book.douban.com/subje... 《Python带我起飞:入门、进阶、商业实战》https://book.douban.com/subje... 《Python趣味编程入门》https://book.douban.com/subje... 《从问题到程序-用Python学编程和计算》https://book.douban.com/subje... 《跟老齐学Python》https://book.douban.com/subje... 《零基础学Python》https://book.douban.com/subje... 《Python程序设计入门到实战》https://book.douban.com/subje... 《从零开始学Python网络爬虫》https://book.douban.com/subje... 《零基础学Python图文版》https://book.douban.com/subje... ...

May 26, 2019 · 1 min · jiezi

Python爬虫入门教程-6100-蜂鸟网图片爬取之一

1. 蜂鸟网图片简介国庆假日结束了,新的工作又开始了,今天我们继续爬取一个网站,这个网站为 http://image.fengniao.com/ ,蜂鸟一个摄影大牛聚集的地方,本教程请用来学习,不要用于商业目的,不出意外,蜂鸟是有版权保护的网站。 2. 蜂鸟网图片网站分析第一步,分析要爬取的网站有没有方法爬取,打开页面,找分页 http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=1&not_in_id=5352384,5352410http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=2&not_in_id=5352384,5352410http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=3&not_in_id=5352384,5352410http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page=4&not_in_id=5352384,5352410上面的页面发现一个关键的参数page=1这个就是页码了,但是另一个比较头疼的问题是,他没有最后的页码,这样我们没有办法确定循环次数,所以后面的代码编写中,只能使用while了 这个地址返回的是JSON格式的数据,这个对爬虫来说,非常友好!省的我们用正则表达式分析了。 分析这个页面的头文件,查阅是否有反爬措施 发现除了HOST和User-Agent以外,没有特殊的点,大网站就是任性,没啥反爬,可能压根不在乎这个事情。 第二步,分析图片详情页面,在我们上面获取到的JSON中,找到关键地址 关键地址打开之后,这个地方有一个比较骚的操作了,上面图片中标注的URL选的不好,恰好是一个文章了,我们要的是组图,重新提供一个新链接 http://image.fengniao.com/slide/535/5352130_1.html#p=1 打开页面,你可能直接去找规律了,找到下面的一堆链接,但是这个操作就有点复杂了,我们查阅上述页面的源码 http://image.fengniao.com/slide/535/5352130_1.html#p=1http://image.fengniao.com/slide/535/5352130_1.html#p=2http://image.fengniao.com/slide/535/5352130_1.html#p=3....网页源码中发现了,这么一块区域 大胆的猜测一下,这个应该是图片的JSON,只是他打印在了HTML中,我们只需要用正则表达式进行一下匹配就好了,匹配到之后,然后进行下载。 第三步,开始撸代码。 3. 蜂鸟网图片写代码from http_help import R # 这个文件自己去上篇博客找,或者去github找import threadingimport timeimport jsonimport reimg_list = []imgs_lock = threading.Lock() #图片操作锁# 生产者类class Product(threading.Thread): def __init__(self): threading.Thread.__init__(self) self.__headers = {"Referer":"http://image.fengniao.com/", "Host": "image.fengniao.com", "X-Requested-With":"XMLHttpRequest" } #链接模板 self.__start = "http://image.fengniao.com/index.php?action=getList&class_id=192&sub_classid=0&page={}&not_in_id={}" self.__res = R(headers=self.__headers) def run(self): # 因为不知道循环次数,所有采用while循环 index = 2 #起始页码设置为1 not_in = "5352384,5352410" while True: url = self.__start.format(index,not_in) print("开始操作:{}".format(url)) index += 1 content = self.__res.get_content(url,charset="gbk") if content is None: print("数据可能已经没有了====") continue time.sleep(3) # 睡眠3秒 json_content = json.loads(content) if json_content["status"] == 1: for item in json_content["data"]: title = item["title"] child_url = item["url"] # 获取到链接之后 img_content = self.__res.get_content(child_url,charset="gbk") pattern = re.compile('"pic_url_1920_b":"(.*?)"') imgs_json = pattern.findall(img_content) if len(imgs_json) > 0: if imgs_lock.acquire(): img_list.append({"title":title,"urls":imgs_json}) # 这个地方,我用的是字典+列表的方式,主要是想后面生成文件夹用,你可以进行改造 imgs_lock.release()上面的链接已经生成,下面就是下载图片了,也非常简单 ...

May 26, 2019 · 1 min · jiezi

前端开发玩转-win10-linux-子系统

前言最新版 win10 已经加入了 linux 子系统功能,尝试后一周的开发后,个人感觉已经完全可以取代 macos 了,linux 环境下终端工具易用性、环境稳定性与 win10 的海量的软件相结合,再看看 PC 电脑的选择宽泛性,简直不要太赞,是时候放弃osx 选用 win10 作为 web 开发者生产力工具平台了。 参考Dev on Windows with WSL windows 10 linux子系统oh-my-zsh与Cmder配置-2018 打开 win10 linux 功能步骤1:打开程序与功能 步骤2:勾选 linux 功能并确定 安装 linux 发行版打开 win10 应用商店搜索 linux 关键字安装 ubuntu18打开 ubuntu18 应用图标根据终端提示访问网址后操作 powershell 以管理员模式启用功能再次打开 ubuntu 等待几分钟的安装ubuntu 切换为 Ali 源\cp -f /etc/apt/sources.list /etc/apt/sources.list_bak_`date +"%Y_%m_%d_%H_%M_%S"`;echo 'deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse' >/etc/apt/sources.list;apt-get updateapt-get upgrade安装 nodejssudo suapt updateapt install nodejsnode -vapt install npmnpm i -g nn lts安装 zshsudo apt-get install zsh安装 oh-my-zshsh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"修改 zsh 主题vim ~/.zshrcZSH_THEME="agnoster"启动 bash 默认进入 zshvim ~/.bashrcif test -t 1; then exec zshfi终端字体补全sudo apt-get install fonts-powerlineVSCode 配置{ "terminal.integrated.shell.windows": "C:\\Windows\\sysnative\\bash.exe", "terminal.external.windowsExec": "C:\\Windows\\sysnative\\bash.exe" }PS: 后续再把相关的图补上,上面的教程已经满足入门尝试了。 ...

May 18, 2019 · 1 min · jiezi

工具资源系列之给-windows-虚拟机装个-ubuntu

前面我们已经介绍了如何在 Windows 宿主机安装 VMware 虚拟机,这节我们将利用安装好的 VMware 软件安装 Ubuntu 系统. 前情回顾虚拟机为我们在 Windows 宿主机体验别的系统提供了可能,虚拟机的强大之处在于我们可以自由安装任意操作系统,不管是同款 Windows 还是 Linux 都可以! 关于如何安装 VMware 软件可以参考上一篇文章,这里给出 Windows 和 Mac 的安装教程. 给 windows 装个 vmware 虚拟机给 mac 装个 vmware 虚拟机下载镜像Ubuntu 操作系统下载: https://www.ubuntu.com/download这里我们选择桌面版(Ubuntu Desktop),接着选择 LTS 长期支持版进行下载安装. 按照实际需要选择适合自己的操作系统,这里选择的是 Ubuntu18 LTS ,然后选择下载. 镜像文件: ubuntu-18.04.2-desktop-amd64.iso ,其中后缀是 .iso ,千万不要解压! 不要解压! 不要解压!安装镜像准备好已下载的镜像文件: ubuntu-18.04.2-desktop-amd64.iso打开 VMware 软件,选择 文件-> 创建新的虚拟机 或者在主页中选择 创建新的虚拟机 . 总体来说,安装过程比较简单,前面相关配置按照默认值即可,后面真正安装过程可能耗费时间比较长,耐心等待安装完成. 一系列安装配置完毕后,还有最后一步配置确认操作,确认无误后点击 完成 就可以真正进行安装虚拟机了! 安装过程中需要添加用户,用于安装完毕后登陆系统. ...

May 15, 2019 · 1 min · jiezi

ubuntu下编译Hadoop

Ubuntu 下编译 Hadoop-2.9.2系统环境系统: ubuntu-18.10-desktop-amd64maven: Apache Maven 3.6.0jdk: jdk_1.8.0_201ProtocolBuffer: portoc-2.5.0OpenSSL: OpenSSL 1.1.1cmake: cmake3.12.1hadoop: hadoop-2.9.2安装所需环境# 安装各种所需依赖库$ sudo apt-get install autoconf automake libtool zlib1g-dev pkg-config libssl-dev libsnappy-dev libbz2-dev# 安装ssh-server$ sudo apt-get install ssh-server# 安装openssl$ sudo apt-get install openssl# 安装cmake$ sudo apt-get install cmake # 安装编译c++库$ sudo apt-get install g++# 安装protobuf# 下载protobuf-2.5.0$ wget https://github.com/protocolbuffers/protobuf/releases/download/v2.5.0/protobuf-2.5.0.tar.gz# 解压缩$ tar -zxvf protobuf-2.5.0.tar.gz# 进入protobuf解压缩目录配置$ ./configur --prefix=/usr/local/protoc-2.5.0# 编译安装$ make && make install# 配置到环境变量中~/.bash_profileexport PATH="/usr/local/protoc-2.5.0/bin:$PATH"编译过程中可能遇到的问题注意 libssl-dev安装换成 libssl1.0-dev版本。 我之前就是默认安转,在编译OpenSSL功能的时候一直卡主编译不通过。具体错误形式如下 ...

May 13, 2019 · 4 min · jiezi

ubuntu-crontab定时任务

cron 该命令默认安装并启动准备工作:- ubuntu下crontab的服务程序是cron,并且默认cron服务的log是没有的,我们必须手动开启- 命令:sudo vim /etc/rsyslog.d/50-default.conf- 找到cron.*那一行把注释去掉, /var/log/cron.log- 重启cron服务 sudo service cron restart每次增加新的任务之后需要重启服务命令如下: service cron start /启动服务/service cron stop /关闭服务/service cron restart / 重启服务/service cron reload /重新载入配置/查看 cron 进程 pgrep cron 返回进程idcrontab -u /设定某个用户的cron服务/crontab -l /列出某个用户cron服务的详细内容/crontab -r /删除某个用户的cron服务/crontab -e /编辑某个用户的cron服务/ 参数含义l 显示用户的Crontab文件的内容 示例: crontabl –li 删除用户的Crontab文件前给提示 示例: crontabl -rir 从Crontab目录中删除用户的Crontab文件 示例: crontabl -re 编辑用户的Crontab文件 示例: crontabl -e/etc/crontab文件语法如下: Minute Hour Day Month Dayofweek user command*/1 * * * * ubuntu cd /home/ubuntu && sh test.sh 每分钟启动一次* 0 * * * ubuntu cd /home/ubuntu && sh everyday.sh- Minute Hour Day Month Dayofweek command- Minute :分钟(0-59),表示每个小时的第几分钟执行该任务- Hour : 小时(1-23),表示每天的第几个小时执行该任务- Day : 日期(1-31),表示每月的第几天执行该任务- Month : 月份(1-12),表示每年的第几个月执行该任务- DayOfWeek : 星期(0-6,0代表星期天),表示每周的第几天执行该任务- Command : 指定要执行的命令(如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径)- “ * ” ,代表所有的取值范围内的数字;- “ / ” , 代表”每”(“*/5”,表示每5个单位);- “ - ” , 代表从某个数字到某个数字(“1-4”,表示1-4个单位);- “ , ” ,分开几个离散的数字;Tip: shell脚本中含有source命令运行时提示 source: not found 如果:ls -l /bin/sh 后显示/bin/sh -> dash 解决方案: 命令行执行:dpkg-reconfigure dash(需要root权限) 在界面中选择no 再运行ls -l /bin/sh 后显示/bin/sh -> bash

May 13, 2019 · 1 min · jiezi

Ubuntu-1804-下安装-zsh-和-ohmyzsh

一个能使你命令行变得漂亮的工具! 提示:Mac系统下是默认安装了zsh,linux没有安装,所以需要自行安装1.安装zsh apt updateapt install zsh -y2.改变默认shell为zsh chsh -s /bin/zsh3.解决chsh: PAM: Authentication failure,直接修改用户配置,把bash改成zsh sudo vim /etc/passwdroot:x:0:0:root:/root:/usr/bin/bash 4.安装Git apt install git -y5.安装oh-my-zsh官网安装oh-my-zsh是更好的去安装插件,以便提高效率 sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"安装完成,插件的安装请看我的另一篇文章 macOS-High-Sierra-10-13-3全新搭建PHP开发环境 5.1卸载oh-my-zsh如果你想卸载oh-my-zsh, 只需要执行uninstall_oh_my_zsh zsh, 从命令行运行. 这将删除本身和恢复你以前的bash或者zsh配置 uninstall_oh_my_zsh zsh 或者 sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/uninstall.sh)"

May 9, 2019 · 1 min · jiezi

Ubuntu-更改开机启动顺序

打开 /etc/default/grub 文件sudo gedit /etc/default/grub修改GRUB_DEFAULT=0更改数字设置默认启动项,0为第一项,以此类推 更新Grubsudo update-grub

May 7, 2019 · 1 min · jiezi

使用阿里源ubuntu镜像中遇到的一些问题

想切换中文环境时报出错误“software database is broken”问题如何解决? 在终端使用命令sudo apt-get install language-pack-zh-han*

May 6, 2019 · 1 min · jiezi

JDK在Win10与Ubuntu下的安装与配置

    近段时间把自己电脑(win)、虚拟机(Ubuntu)以及阿里云(ubuntu)都重置了一遍,三个地方都有用到JDK,不想之后找教程找的那么麻烦。所以就自己总结一遍,一次性把轮子造好。 环境Win10 1803 HomeUbuntu 16.04.3Ubuntu 18.04.1    其中服务器与虚拟机配置方法一致,只是目录不同,就归成Ubuntu一类好了。 Windows环境下安装下载JDK的安装程序https://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html按照步骤安装配置环境变量    此电脑--属性--编辑系统设置--环境变量 1. 新建系统变量JAVA_HOME,并在变量值选择Java的安装目录 2. 新建变量CLASSPATH,写入图中的变量值 3. 选择变量Path--编辑文本--在最后追加图中的值 验证安装是否成功    cmd下输入java -version     出现图中的输出语句即为成功 Ubuntu环境下安装下载JDK的压缩包https://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html    勾选同意协议后选择.tar.gz结尾的选项 解压到指定文件夹tar -zxvf packageName.tar.gz //packageName为jdk压缩包包名    在服务器中我是直接通过xftp的GUI进行移动,虚拟机中受限于权限,我在终端上用root打开文件管理器移动的。 配置环境变量打开etc目录下的profile或者bashrc vim /etc/profilevim ~/.bashrc    vim的安装以及基本命令可以戳此查看 在末尾追加以下信息并保存 export JAVA_HOME=/root/usr/jdk export JRE_HOME=/root/usr/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATH刷新配置文件 source /etc/profile source ~/.bashrc验证安装是否成功    终端下输入java -version     出现图中的输出语句即为成功

May 5, 2019 · 1 min · jiezi

MySQL在Win10与Ubuntu下的安装与配置

    近段时间把自己电脑(win)、虚拟机(Ubuntu)以及阿里云(ubuntu)都重置了一遍,其中本机以及阿里云都有用到MySQL,不想之后找教程找的那么麻烦。所以就自己总结一遍,一次性把轮子造好。     环境 Win10 1803 HomeUbuntu 16.04.3Windows环境下安装下载MySQL压缩包https://dev.mysql.com/downloads/mysql/解压到本地目录,并添加一个配置文件,命名为my.ini,内容如下:[mysqld] # 设置为自己MYSQL的安装目录 # 注意是双斜杆,我就入过坑basedir=D:\\MySQL# 设置为MYSQL的数据目录 # 文件夹需手动创建datadir=D:\\MySQL\\datadefault-storage-engine=INNODBcharacter-set-server=utf8[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8以管理员权限进入MySQL的bin目录d: //MySQL的安装目录盘符cd MySQL/bin安装MySQL服务mysqld --install//出现Service successfully installed即安装成功初始化日志文件mysqld --initialize --console    记住mysql反馈语句中最后一条:a temporary password is....为第八步出现的问题作铺垫。 配置环境变量;D:\MySQL\bin;//分号分隔前属性,bin目录的路径换成自己电脑的路径启动服务net start mysql登录服务器mysql -uroot -p    输入密码提示Access denied for user 'root'@'localhost' (using password: YES)<br/>    解决方法及后续步骤:解决MySQL 8.0登录Access denied for user 'root'@'localhost' (using password: YES) ubuntu环境下安装打开终端输入命令sudo apt-get install mysql-serversudo apt-get isntall mysql-clientsudo apt-get install libmysqlclient-dev    在安装过程中会让你输入密码以及确认密码,不要忘掉,那是mysql的root用户密码 检查是否安装成功sudo netstat -tap | grep mysql    若出现截图内的语句即说明安装成功     存在的一点点问题     原本我是想在ubuntu下像在win一样通过配置文件进行安装的,但是试了很久都不行最后再次重置了服务器。     如果你们有什么方法是可以的可以在评论告诉我。

May 5, 2019 · 1 min · jiezi

ubuntu终端内打开文件管理器

    近段时间在ubuntu中搭建jdk并在jdk的基础上建设Oracle数据库,遇到一个问题:常规GUI不能把文件移到usr目录下,提示permission denied。     取了一个巧,利用终端获取管理员权限后移动文件。     方法:终端输入 sudo nautilus    然后新创建的窗口默认带有管理员权限,问题就解决了。

May 5, 2019 · 1 min · jiezi

Ubuntu下安装vim以及常用命令

    众所周知,Linux与Win之间的区别是Linux需要大量的命令行操作,而有些配置文件也是在命令行中输入的。     这些操作就需要编辑器的帮助了。     我接触Ubuntu的时间不长,碰到过三个编辑器 gedit //好像是叫这个名字vi //Linux和Unix上最基本的文本编辑器vim //比vi更好用的文本编辑器安装vim    终端内输入 sudo apt-get install vim常用命令vim fileName //vim打开文件,文件需带有绝对路径i //编辑文件esc //退出编辑状态:q //不保存直接退出:wq //保存并退出! //覆盖原文件     后三个命令必须与esc配合使用,可以组合使用

May 5, 2019 · 1 min · jiezi

3类6种主流容器操作系统全比较

5月8日 晚20:30,Kubernetes Master Class在线培训第五期《Kubernetes中的日志、监控与告警》即将开播,点击链接:http://live.vhall.com/317569561 即可免费预约注册! 介 绍 容器已迅速成为现代数据中心的必要组成部分。容器可以构建在各类操作系统中,那么企业该如何选择最合适的操作系统来运行自己的容器? 在容器部署时,研发的负责人需要知道操作系统的哪些特性和功能对于正在发布的应用程序至关重要,以及是否存在需要额外考虑的其他因素(如可管理性和配置灵活性),不同企业的情况与需求不同,选择自然也不尽相同。 不同的操作系统,如何在特性和基本功能方面进行比较?这些差异如何影响它们支持应用程序的方式?这些都是我们必须考量的重要问题。本文中我们将比较三类具有代表性的操作系统: 传统的全功能操作系统通用的精简操作系统专用于容器的操作系统在每个类别中,我们都会选择两个代表性的产品,这些产品能代表这一大类中的其他全产品或发行版。 通过本文,大家将能更清楚地了解不同操作系统类型之间的差异。IT负责人们也将更好地了解到,为什么开发人员可以为容器化应用程序选择一个操作系统而不是另一个,以及为什么他们可能支持或质疑这些选择。 全功能操作系统 “全功能操作系统”是什么意思?为什么在容器部署的情况下,完整功能会很重要?本节将介绍为什么在传统服务器部署中使用的操作系统,也可能是为容器平台选择操作系统时的最佳答案。 首先要知道的是,这类操作系统的功能无疑是最齐全的。如果某个应用程序需要某个特定的特性或功能,全功能操作系统或许都能满足它。不过这种“齐全”也是有一定代价的:在存储、内存和CPU资源方面,这类操作系统对系统的要求最高。同时,这些功能还会增加操作系统的攻击面,为潜在的攻击者提供更多的角落和缝隙进行攻击。不论是价格成本还是安全风险,如果操作系统的这些功能都是应用程序需要的,那么这些成本也就很容易承担了;但如果只需要少量功能,相较之下性价比就略低。 这些功能齐全的操作系统,最适合的用例,是企业需要在单个OS实例之上的容器中部署多个不同应用程序。在这些情况下,操作系统的功能的多而全,可能是支持应用程序队列的最经济的方式。 Ubuntu Ubuntu已经成为许多企业在服务器、云甚至桌面上的默认操作系统。Canonical公司为Ubuntu提供了非常好的支持,Ubuntu提供各种可下载格式,包括支持物联网、容器、服务器或云的部署所需的实用程序包、shell、功能和功能集。 如今,Ubuntu已经开始瓜分曾经由Red Hat Linux一家独大的领域:Ubuntu一贯良好的声誉和企业级的支持,使得对于企业部署而言,它成为了一个稳妥的、“合理的”选择。不过,大家仍需记住的、很重要的一点是,不论在什么情况下,“合理的”都不意味着一定是“最好的”——它的功能齐全也意味着它的庞大,企业需要思考这种重与大是否适合自己。 CentOS 在全功能操作系统这一大类中,Ubuntu已经成为企业的一大主流选择,除此之外,CentOS则是另一个流行的、由社区驱动的开源操作系统,它是由Red Hat Enterprise Linux依照开放源代码规定释出的源代码所编译而成。 CentOS强调社区对特性和功能的贡献及支持,同时仍然建立在其Red Hat基础的稳定性上。开源不意味着CentOS不被大型组织使用——美国国家实验室和几大主流云提供商的服务器上都用着CentOS。但是Ubuntu自称拥有比CentOS更快速的更新,其中包括那些更老、但经过良好测试的软件包。 精简的操作系统 容器,尽可能地将少而精的功能汇集在一起,创建完整的应用程序。那么,这类精简的操作系统缺少“完整”Linux发行版中的哪些功能——这对您的应用程序是否重要?从另一视角来看,将应用程序部署在那些将功能剥离到极限的精简操作系统上,优势是什么? 问题的答案在于,你的应用程序究竟对操作系统有什么要求,而精简的操作系统是否能满足这些基础要求。如果没有周全的准备,在使用过程中还需要人为添加应用程序所需的各种功能和小程序,那选择这类精简操作系统可以说是失败的,因为它在大小和简单性方面的优势所剩无几。 本章节将介绍两个发行版,BusyBox和Alpine Linux,以及它们在适当的环境中可以带来的优势。这两个操作系统是相关的——Alpine是基于BusyBox的,但是二者也存在一些关键的差异,使用户会在这二者之间做出不同选择。这些差异不仅涉及具体功能及特性,还涉及支持社区和生态系统。 BusyBox BusyBox很适合容器部署,恰巧因为它在设计时没有刻意考虑容器。BusyBox被其开发人员称为“嵌入式Linux的瑞士军刀”,它作为一个单一的小型可执行文件,包含大多数嵌入式应用程序所需的所有功能。这也“迫使”它在容器技术出现之前,就可以开始采用类似容器的方法进行部署了。 BusyBox可以使用Linux或其他POSIX操作系统作为其基础进行部署,并将它们与许多常见的Linux实用程序捆绑在一起。如此一来,它成为了一个紧凑的单文件可执行文件,其中包含“完整”Linux发行版的许多功能——尽管这些完整版本中的不少其他功能选项,都以节省空间的名义,被从BusyBox中删除了。 Alpine Linux 如前所述,Alpine Linux基于BusyBox,但不论是目标还是细节,它都建立在更早期的Linux发行版上。BusyBox是因为是单一可执行文件而体积很小, 而Alpine Linux则是使用强化的内核,为其前身BusyBox的紧凑、简单的目标增加安全性。 相较于BusyBox,Alpine Linux能让开发人员更容易添加功能。它的发行版基于BusyBox和musl库之上,因此在添加功能的方便性或结构紧凑度的这些维度上,Alpine Linux一枝独秀。 Alpine Linux这是一个极限精简的操作系统,能够生成非常小的容器镜像以进行部署,而且加固的内核使其更适用于生产以及开发、部署。 容器操作系统 容器操作系统开箱即用,拥有内置的自动化和容器编排工具。它们被设计和构建为“主机”操作系统——托管Alpine和BusyBox等容器操作系统的操作系统。既然如此,为什么它们不是每个容器部署的自动选择呢? 容器操作系统的特征在于,它不仅仅是一个支持容器的软件,而是使用容器技术部署的软件。“容器一直向下”的体系结构意味部署的自定义程序更高、更灵活,从而比传统的OS部署复杂得多。另一方面,对于早期转向容器的组织,或者对于那些不一定适合容器架构的应用程序部署中,“全容器”架构并非那么容易。 对于那些寻找容器操作系统的企业而言,Rancher OS和Container Linux是两个主流的选择。本章节将介绍它们各自的优势,帮助开发人员根据自身情况做进一步选择。 RancherOS RancherOS中的每个进程都在Docker管理的单独容器中运行。对Docker的优化和依赖让RancherOS可以做到体积极小、启动极快。 除了基本的性能优势之外,RancherOS系统服务由Docker Compose定义和配置。这种依赖意味着只加载和部署应用程序所需的服务,从而进一步加速和简化部署。通过与cloud-init集成,再次简化了部署,从而实现了广泛和高速的自动配置和部署。 Container Linux CoreOS的Container Linux专为基于云的容器部署而设计。Container Linux已被Red Hat收购,针对公有云或私有云基础架构的集群部署进行了优化。 Container Linux和内核以及必要的实用程序一起,部署在单个可执行文件中,其他的实用程序和功能都部署在容器中。 Container Linux长期以来一直被广泛使用,可以在大多数公有云上部署。被Red Hat收购并没有减缓它的采用速度。Container Linux与开源许可一起分发,并拥有一个活跃的开发人员社区。 ...

April 29, 2019 · 1 min · jiezi

百度云虚拟机ubuntu164安装wordpress

基本环境的安装1.安装Apache apt-get install apache2 2.查看状态 service apache2 restart/status/start/stop 3.关闭防火墙80端口限制 ufw allow 804.安装MySQL apt-get install mysql-server mysql-client 5.查看状态 service mysql retart/status/start/stop6.关闭防火墙3306端口限制 ufw allow 33067.安装PHP apt-get install php7.0 apt-get install libapache2-mod-php7.0 apt-get install php7.0-mysql8.重启服务 service apache2 restart service mysql restart9.安装phpMyAdmin sudo apt-get install phpmyadmin 安装时:空格选择apache2,enter确定,下一步配置数据库,输入密码。10.创建phpMyAdmin快捷方式 sudo ln -s /usr/share/phpmyadmin /var/www/html 11.启用Apache mod_rewrite模块,后面修改wordpress链接时会用 sudo a2enmod rewrite 12.重启服务 service php7.0-fpm restart 提示服务没找到?不去管它service apache2 restart13.配置Apache vim /etc/apache2/apache2.conf14.添加以下信息: AddType application/x-httpd-php .php .htm .html AddDefaultCharset UTF-815.重启Apache服务 ...

April 28, 2019 · 1 min · jiezi

Docker-之-ubuntu-安装

Docker 作为一种新兴的虚拟化方式,Docker 跟传统的虚拟机方式相比具有众多的优势。Docker 可以更高效的利用系统资源、更快速的启动时间、一致的运行环境、持续交付和部署、更轻松的迁移、更轻松的维护和扩展。 博主第一次使用Docker就深深喜欢上了这种方式,一次配置,到处运行,不用再反反复复的配置环境可以说是非常的方便了。本篇博客就来说一说Docker的安装及基本使用方法,后续还会不定时的更新Docker系列博客。 对比传统虚拟机Docker是什么?Docker属于容器的一种技术封装,提供更为简单易用的使用接口,让开发运维人员可以更方便快捷的使用容器。 特性容器虚拟机启动秒级分钟级硬盘使用一般为 MB一般为 GB性能接近原生弱于系统支持量单机支持上千个容器一般几十个从上面对比来看,容器的各方面性能及特性是优于虚拟机的。 Docker 的安装Docker是一个开放源码的产品,分为 社区版(Community Edition,缩写为 CE)和 企业版(Enterprise Edition,缩写为 EE)。社区版是免费的,而企业版包含一些收费服务,一般来说个人开发者用社区版就足够了,本篇博文的教程也只是针对社区版。 安装环境及版本: 系统:ubuntu 18.04 LTSDocker 版本:18.9.05英文好的小伙伴也可以直接阅读官方文档,本文只详细介绍 Ubuntu 系统下的 Docker 安装,其他系统的安装请自行参考官方文档。 MacWindowsCentOSDebianFedoraUbuntu其他Linux版本卸载老版本一般来说Ubuntu系统中默认是不会安装Docker的,但是如果安装了老版本的话可以使用下面的命令进行卸载。 $ sudo apt-get remove docker docker-engine docker.io containerd runc安装 Docker CE安装Docker CE有多种不同的方式: 设置Docker的存储库,然后安装。这种方式便于安装及更新,也是最推荐的方式。下载DEB软件包,手动安装并完全手动管理升级。在测试和开发环境中,部分用户选择使用自动便捷脚本来安装Docker。本篇博客将介绍第一种安装方式。 设置 Docker 存储库 更新apt包索引:$ sudo apt-get update允许apt通过HTTPS使用存储库来安装软件:$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common添加Docker官方 GPG 密钥:$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -添加完成之后,使用下面命令进行验证秘钥,通过搜索指纹的最后8个字符,验证现在是否具有指纹9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88的密钥 ...

April 25, 2019 · 2 min · jiezi

开启MySQL远程访问权限-允许远程连接

环境Ubuntu 18.04MySQL5.7登陆mysql数据库mysql -uroot -p增加远程连接权限use mysql;grant all privileges on *.* to root@'%' identified by "password";flush privileges;修改MySQL配置文件vim /etc/mysql/mysql.conf.d/mysqld.cnf注释掉bind-address这行重启mysql服务service mysql restart

April 25, 2019 · 1 min · jiezi

工具资源系列之给虚拟机装个ubantu

前文我们已经讲解了如何在 mac 系统上安装虚拟机软件,这节我们接着讲解如何利用虚拟机安装 Ubuntu 镜像. 安装镜像的大致步骤基本相同,只不过是配置项略显不同而已,如果需要安装其他系统镜像,请参考另外两篇教程. 下载镜像Ubuntu 操作系统下载: https://www.ubuntu.com/download这里我们选择桌面版(Ubuntu Desktop),接着选择 LTS 长期支持版进行下载安装. 按照实际需要选择适合自己的操作系统,这里选择的是 Ubuntu18 LTS ,然后选择下载. 配置镜像准备好已下载的镜像文件: ubuntu-18.04.2-desktop-amd64.iso打开 VMware 软件,选择 文件->新建 选项开始安装镜像文件. 弹出安装配置界面,选择 从光盘或镜像中安装 选项,然后将已下载的镜像文件拖动到安装区进行识别. 识别到镜像文件后选中该文件,点击 继续 准备下一步安装. linux 快捷安装选项中配置用户信息,点击 继续 . 确认配置信息无误后,点击 完成 ,等待镜像安装... 安装镜像只因在人群中看见了 Ubuntu ,便确定了你就是我要安装的操作系统. 惊鸿一瞥,容颜出现,安装进行时. 熟悉的命令行,成功只差一步. 现在输入之前配置的账号信息,开始登陆系统,见证奇迹的时刻即将来临... 终于等到你,还好我没放弃! 小结总体来说,mac 系统安装 Ubuntu 镜像配置比较简单,基本上按照默认配置即可. 下载镜像时文件一般比较大,需要利用专门的第三方工具下载,既可以选择下载种子链接也可以直接下载.

April 21, 2019 · 1 min · jiezi

老版本Ubuntu使用指南

原本是想完美编译P563,结果需要的gcc版本可能有点旧,而恰好我又是一个弱鸡,重新编译gcc在尝试了若干次无果后,只能使用安装一下旧版本的Ubuntu,希望能够找到合适的gcc版本。首先,我使用的虚拟机是VMware Workstation 15 Plaryer。然后,在这里可以下载旧版本的ubuntu。补充一个tips,关于更改旧版本软件的源,我没有用这个部分,不确定是否可行,因为我没有升级任何apt-get中的软件,如果你有需要,可以了解一下这部分。原网页:https://www.linuxidc.com/Linu…Ubuntu普通版本支持的时间都有限,过了支持的时间,更新源都会被停用,比如Ubuntu 9.10原来的源都失效了(包括官方源,类似ustc的第 三方源,因为这些第三方源也是和官方源同步的)。因此,直接用原来的源列表是不能安装更新软件的。为了解决这个问题,Ubuntu官方专门出了一个 old-release的镜像(http://old-releases.ubuntu.com/),可以用这个源更新。比如9.10的源列表如下:deb http://old-releases.ubuntu.co… karmic main restricted universe multiversedeb http://old-releases.ubuntu.co… karmic-security main restricted universe multiversedeb http://old-releases.ubuntu.co… karmic-updates main restricted universe multiversedeb http://old-releases.ubuntu.co… karmic-proposed main restricted universe multiversedeb http://old-releases.ubuntu.co… karmic-backports main restricted universe multiversedeb-src http://old-releases.ubuntu.co… karmic main restricted universe multiversedeb-src http://old-releases.ubuntu.co… karmic-security main restricted universe multiversedeb-src http://old-releases.ubuntu.co… karmic-updates main restricted universe multiversedeb-src http://old-releases.ubuntu.co… karmic-proposed main restricted universe multiversedeb-src http://old-releases.ubuntu.co… karmic-backports main restricted universe multiverse其他Ubuntu Linux版本的只需要讲karmic改成其版本代号即可。这样过期后的版本也可以继续使用了。下边是我下载过的一些不能用的版本:Ubuntu4.10 我也下载了,叫Warty Warthog,一个非常有纪念意义的版本,当然也没能成功的安装上。Ubuntu5.04 提示我插入软盘,可是我从哪里弄软盘去…Ubuntu6.10 提示找不到ttyS0,这个也没找到解决方案,遂放弃这两个部分下边是我使用的其他可以使用的版本,附上gcc和make版本Ubuntu 7.10在这个版本中,有一个小问题,就是gcc运行的时候会提示各种缺库,所以需要安装一个东西:sudo apt-get install build-essential,这个忘了截图,安装的时候记得要把安装这个系统的.iso挂载上,才能安装,不然它会一直提示请插入CD之类的。其实就是安装完成后不要把cd移除直接开机就行也就是在这个版本下,完美编译了P563 v1.1,所以如果需要编译07年左右的软件,推荐这个版本的Ubuntu另外,这个版本下载的那个desktop版本的iso好像是live版本的,登陆进去需要双击Install进行安装。这个版本还有的问题就是无法调整窗口的大小,只能把需要的软件调整到合适的大小。到了8.10才能自动适应窗口大小,和vmtools似乎也没有关系,哈哈哈Ubuntu 8.10这个版本的需要注意的是,安装的时候不要直接就指定系统盘,选择稍后安装那个选项。因为如果直接就指定系统盘,vm从这个版本开始就有了easy install之类的,就是快速帮你安装,问题是会出现无法挂载/也就是无法挂载root的情况。只需要自己安装就可以了互传文件在上边的几个版本都无法支持vmtools,因为too old!所以问题就是没有办法传文件!在此我使用的办法是开通自己电脑的ssh服务,然后从服务器端使用scp从自己电脑传文件。因为虚拟机里下ssh-server没有成功,但是好在Ubuntu是自带ssh-client,所以可以访问其他的ssh服务器。因为我使用的是windows子系统,而我也恰好已经有了Ubuntu子系统,于是就在子系统上开通了ssh服务,这样就可以在两者之间愉快的传文件了。之后的版本Ubuntu 10.04和12.04下载了没有装,但是我觉得从10.04开始Ubuntu就已经开始变得炫酷起来了,遇到的问题可能会少很多了~ ...

April 15, 2019 · 1 min · jiezi

php 将手机号码转为国际码(preg_replace + preg_quote)

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra举例:台湾本地用户互打手机号码时,是 09XX123456,当与第三方串接需要转国际号时,需要变成 +8869XX123456,此时就可以使用此功能自由转换。str_replace_national functionfunction str_replace_national($from, $to, $content) { $from = ‘/’.preg_quote($from, ‘/’).’/’; return preg_replace($from, $to, $content, 1);}使用str_replace_national(‘0’, ‘+886’, $phone);所以他只会取代第一个「0」,将它改为 +886转回来一样原理str_replace_first functionfunction str_replace_first($from, $to, $content) { $from = ‘/’.preg_quote($from, ‘/’).’/’; return preg_replace($from, $to, $content, 4);}使用str_replace_first(’+886’, ‘0’, $phone);将 +886 取代为原本的「0」Line ID:ianmacQQ:1258554508

April 13, 2019 · 1 min · jiezi

php 设定启用 php缩写(php.ini、short_open_tag)

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra启用 php 缩写能节省一些写法,虽然没差多少,只是要是脚本多了,看起来就比较好辨识例如php 脚本一开头需要加上 php<?php // do..?>开了简写后就不用了<? // do..?>以及要 echo 资料时<?php echo $data; ?>开了简写后<?=$data;?>是不是干净多了呢!可能还有其他的简写方式,但是我没有发现~只是注意如果有使用 crontab 跑 php 脚本时,该脚本的开头还是要有 <?php 不然会无法运行喔! (原因不明)知道的人跟我说一下呦!那就开始设定简写功能吧前往你目前正在使用的 php 版本,里面会有 apache2 资料夹直接 nano 进去 php.ini$ nano /etc/php/7.X/apache2/php.ini然后找到 short_open_tag 将它改为 On 就行了short_open_tag = On别忘了 reload$ service apache2 reloadLine ID:ianmacQQ:1258554508

April 13, 2019 · 1 min · jiezi

透过 Crontab 排程备份 Mariadb (Mysql)使用 php + exec + mysqldump + gzip

本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra一开始原本是用 php 去备份资料库,但是发现会有一些问题,于是改成这种方式,直接透过 mysql 去备份,出来的格式也不会有什么问题。$ crontab -e设定每天凌晨00:00 执行0 0 * * * php /var/www/backup.phpbackup.php 脚本记得开头一定要 「<?php」,即便你有启用缩写<?php// 设定环境header(‘Content-Type: text/html; charset=utf-8’);date_default_timezone_set(‘Asia/Taipei’);// 设定保存的资料夹位置$dir = “/var/www/db/”;// 设定档名$filename = “dev-” . date(“Y-m-d-H-i-s”) . “.sql.gz”;// 设定资料库$db_host = “localhost”;$db_username = “root”;$db_password = “password”;$db_database = “db”;// 准备 cmd$cmd = “mysqldump -h {$db_host} -u {$db_username} –password={$db_password} {$db_database} | gzip > {$dir}{$filename}”;// 执行 cmdexec($cmd);header(“Content-type: application/octet-stream”);header(“Content-Disposition: attachment; filename="$filename"”);passthru(“cat {$dir}{$filename}”);?>输出时会经过 gzip 解压缩实验过原本 150MB 的 sql 压缩后为 28MBLine ID:ianmacQQ:1258554508 ...

April 13, 2019 · 1 min · jiezi

Ubuntu 安装与使用UFW防火墙

一、简介UFW(Uncomplicated Firewal)是 Ubuntu 下基于 iptables 的接口,旨在简化配置防火墙的过程。默认情况下 UFW 为关闭状态,开启时默认为拒绝所有传入链接,并允许所有传出连接。这意味着任何人尝试到达您的服务器将无法连接,而服务器内的任何应用程序能够达到外部世界。二、使用 UFW安装# 默认已安装sudo apt-get install ufw查看服务是否已启动及防火墙规则# 激活:已启动 不激活:已关闭sudo ufw status# 查看详细信息sudo ufw status verbose# 查看带编号的服务信息 [用于 remove 时的编号参数]sudo ufw status numbered开启关闭防火墙# 关闭防火墙sudo ufw disable# 启动防火墙sudo ufw enable设置默认策略# 默认禁止所有其它主机连接该主机sudo ufw default deny incoming# 默认允许该主机所有对外连接请求sudo ufw default allow outgoing设置允许连接规则# 允许 ssh 服务(服务名)sudo ufw allow ssh# 允许 ssh 服务(端口号)sudo ufw allow 22# 允许特定协议的端口访问sudo ufw allow 21/tcp# 允许特定端口范围sudo ufw allow 6000:6007/tcpsudo ufw allow 6000:6007/udp# 允许特定IP地址访问sudo ufw allow from 192.168.1.100# 允许特定范围主机(15.15.15.1 - 15.15.15.254)sudo ufw allow from 15.15.15.0/24# 允许特定范围主机访问特定端口sudo ufw allow from 15.15.15.0/24 to any port 22# 允许连接到特定的网卡sudo ufw allow in on eth0 to any port 80设置拒绝连接规则# 将 allow 替换为 denysudo ufw deny httpsudo ufw deny from 192.168.1.100删除规则# 查看所有规则并显示规则编号sudo ufw status numbered# 按编号删除sudo ufw delete allow 2# 按服务删除sudo ufw delete allow ssh重置UFW# 恢复至初始状态sudo ufw reset三、配置 UFW修改配置文件# 打开配置文件sudo vi /etc/default/ufw# 命令操作同时对IPv4和IPv6都生效IPV6=yes配置生效# 重启防火墙sudo ufw disablesudo ufw enable参考信息Linux防火墙(Ubuntu16.04防火墙)如何在Ubuntu 16.04上使用UFW设置防火墙 ...

April 11, 2019 · 1 min · jiezi

Ubuntu 系统下安装与使用SSH服务

简介SSH(Secure Shell)协议是一种在不安全的网络环境中,通过加密和认证机制,实现安全的远程访问以及文件传输等业务的网络安全协议。安全验证基于口令的安全验证只要你知道自己账号和口令,就可以登陆到远程主机基于密钥的安全验证需要依靠密钥,也就是你必须为自己创建一对密钥,并把公钥放在需要访问的服务器上。安装及配置SSH服务安装SSH服务检查 SSH 服务是否已安装# 查找 openssh-server 是否已安装dpkg -l | grep -i “openssh-server”# 查找 openssh-client 是否已安装dpkg -l | grep -i “openssh-client"安装 SSH 服务sudo apt-get install openssh-serversudo apt-get install openssh-client启动与停止 SSH 服务启动与停止 SSH 服务# 启动服务/etc/init.d/ssh start# 停止服务/etc/init.d/ssh stop判断 SSH 服务是否启动# 返回结果包含ssh说明服务已启动netstat -a | grep ssh访问 SSH 服务客户端使用非管理账户登陆# ssh 用户名@ipssh sprite@192.168.1.100设置 SSH 的配置文件打开配置文件# 默认情况下不做任何修改也是可以正常访问的sudo vi /etc/ssh/sshd_config修改默认端口# 使 sshd 服务运行在非标准端口12345上(默认监听端口:22)Port 12345# 客户端使用非标准端口登陆ssh <server addr> -p 12345使用 root 账号登陆# 网上说配置 PermitRootLogin yes 并重启,但我没有试验成功# 麻烦知道原因的朋友留言指教其余详细设置以后慢慢完善…使用SSH服务以后完善…

April 11, 2019 · 1 min · jiezi

使用Synergy搭建Mac与Ubuntu键鼠共享

先放Synergy官方链接 官网地址,土豪可直接购买,然后关闭此文章。具有探索(qiong)精神者(bi)可继续往下看:Synergy已经应用的核心功能开源,即能够正常使用,貌似ssl没有在其中,能者可fork一份自己实现,先放github链接synergy-core整个编译安装过程readme里已经写的很详尽了,这里主要列举我在编译、使用时遇到的坑mac在安装编译时,截图处改成实际sdk版本,一般是当前系统版本:在mac上开启synergy server 之前给终端加辅助功能:

April 5, 2019 · 1 min · jiezi

网络流量控制与拥塞控制详述

前言在复杂的网络通信中,网络交互在线路上产生巨大流量,由于设备性能的差异和缺陷,网络中发生像高速公路的拥塞也是很正常的,为了减少网络中数据拥塞和丢失所造成的损失,因此网络协议中采用了流量控制和拥塞控制技术.辨析流量控制:流量控制主要由通信双方设备决定,具体为发送方发送窗口和接收方接收窗口决定.一般地,发送窗口会有一定的数据缓存,所以发送方并不能发送最大窗口值数据,而接收方的接受窗口也可能存在数据缓存,于是这两个窗口决定了发送方所发送的数据量,因此称之为流量控制.拥塞控制:拥塞控制没有那么明确,总的来讲,除开发送端和接收端,其中间网络设备的通信能力,就像一个黑盒子,我们知道接收方返回的确认信息越来越慢,于是我们就猜测其中拥塞程度变大了.这就是网络出现了拥塞.流量控制首先,流量控制涉及四个窗口,即发送方和接收方各有两个(发送窗口,接收窗口),所以流量通信是四个窗口,并不是我们想象中的两个窗口哦,如图:流量控制具体流程假设窗口大小为300字节,此时已发送出序号101开始的300字节数据,窗口在框1处.假设此时接收到了接收方的确认ack=301,且窗口大小为200B(流量控制起作用了,即希望下次只发送200B数据),在此,数据并未被完全接收,因此窗口只能滑动到确认号为301的位置.如图中框2,所以窗口中的101,201缓存即被删除.此时待发数据为401和501.此时收到接收方的确认ack=601,窗口300,即窗口滑动向601,如图窗口3准备发送接下来的601,701,801.当发送方一直没收到确认或确认包窗口值为0时,会发送一个探测性数据段,返回窗口值为0时,启动超时计时器,到时后继续发送探测,若接收端发送来了窗口值不为0的数据段,则发送端开始正常发送数据.流量控制的两种算法Nagle算法发送端并不一有数据就发送,而是自己先把数据缓存起来,达到接收方窗口值一半或发送窗口最大值,就即刻发送.Clark算法接收端让发送方等待,当自己由足够的接收窗口空间时,再发送确认信息.在流量控制中,这两种算法十分重要,并且是结合使用的.TCP拥塞控制TCP拥塞控制主要依靠TCP连接双方协定的协议来减少数据的发送儿实现的.进入网络的数据大于出口时,就会发生网络拥塞.实际吞吐量和输入负荷之间的关系:1988年解决方案术语CWND:拥塞窗口大小SSTHRESH:慢启动阈值过程有一初始值SSTHRESH,并维护一拥塞窗口.慢启动:2倍速增长.拥塞避免:每次加1.阻塞后,SSTHRESH变为原来的一半.重新开始步骤2发送数据段大小:为MAX(发送窗口大小,拥塞窗口)1990年后新增方案:快速重传/快速恢复快速重传快速恢复未完待续…..

March 15, 2019 · 1 min · jiezi

java垃圾收集算法

基础背景运行时数据区域虚拟机结构图程序计数器:每个线程独有一份,用作记录编译后的class文件行号虚拟机栈:以栈帧为单位存放局部变量.Native方法栈:和虚拟机栈类似,不过,一个本地方法是这样一个方法:该方法的实现由非java语言实现,比如C语言实现。很多其它的编程语言都有这一机制,比如在C++中,你可以告知C++编译器去调用一个C语言编写的方法方法区:运行时常量池,存放编译器的字面量和符号引用,也可以在运行时动态加入.java堆:存放对象的实例,是垃圾回收的主战场,创建一个对象比如执行 new MyClass();去常量池中寻找,查看类是否被加载.如果没加载,则加载class.在java堆中分配内存空间,方式有以下两种:指针碰撞:把指针向空闲对象移动与对象占用内存大小相等的距离,使用的收集器有Serial、ParNes等空闲列表:虚拟机维护一个列表,记录可用的内存块,分配给对象列表中一块足够大的内存空间,使用的收集器有CMS等.如何分配内存,由垃圾回收器决定.内存的具体分配过程中有同步和预留空白区的方式内存分配好后,再执行init()方法,初始化实例.对象头对象头主要记录对象的hashcode,GC标记,元数据地址,以及关于对象锁的使用,年龄代,偏向线程等。hash用于快速寻找对象对象头大小32bit/64bit,由虚拟机决定实例数据区的数据类型,按照相似放在一起.对象中的访问定位方式句柄池句柄池从堆中划分由实例地址和类型数据地址构成指针可直接通过指针访问到实例对象优劣句柄的使用,方便了实例位置的改变,可以不改变引用,但是访问速度相对于指针低一些.JVM垃圾回收判断可否回收的算法1.引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1;任何时刻计数器都为0的对象就是不再被使用的,垃圾收集器将回收该对象使用的内存。可达性分析算法:通过一系列的名为GC Root的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Root没有任何引用链相连时,则该对象不可达,该对象是不可使用的,垃圾收集器将回收其所占的内存。实例的位置:java虚拟机栈(栈帧中的本地变量表)中的引用的对象。方法区中的类静态属性引用的对象。方法区中的常量引用的对象。本地方法栈中JNI本地方法的引用对象。不可达对象到死亡还需要两次标记,第一次,标记后进入F-Queue队列,第二次标记时只有finalize()中有拯救自己的方法的实例才能自救成功,比如将自己应用给其它变量.垃圾回收算法方法区的回收常量池的回收没有被引用,即可被回收class对象回收所有实例都被回收所有classLoader都被回收java.lang.class对象没有被任何地方引用,即无法在任何地方使用反射访问类.最终是否被回收,还得看JVM参数配置java堆回收算法标记清除算法: 先标记判定,再一次性清除.产生了大量碎片,且效率低下复制算法: 把可用内存划分为两块,一块用完后,就将活下来的实例放到另一块内存区.优缺点:没有了碎片化问题,但内存大小减少了一半标记整理算法: 在标记-清除算法基础上做了改进,标记阶段是相同的标记出所有需要回收的对象,在标记完成之后不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动,在移动过程中清理掉可回收的对象,这个过程叫做整理。标记-整理算法相比标记-清除算法的优点是内存被整理以后不会产生大量不连续内存碎片问题。复制算法在对象存活率高的情况下就要执行较多的复制操作,效率将会变低,而在对象存活率高的情况下使用标记整理算法效率会大大提高。分代收集算法: 根据内存中对象的存活周期不同,将内存划分为几块,java的虚拟机中一般把内存划分为新生代和年老代,当新创建对象时一般在新生代中分配内存空间,当新生代垃圾收集器回收几次之后仍然存活的对象会被移动到年老代内存中,当大对象在新生代中无法找到足够的连续内存时也直接在年老代中创建。现在的Java虚拟机就联合使用了分代复制、标记-清除和标记-整理算法.java虚拟机垃圾收集器关注的内存结构如下:新生代研究表明,新生代中98%的对象是朝生夕死的短生命周期对象,所以不需要将新生代划分为容量大小相等的两部分内存,而是将新生代分为Eden区,Survivor from和Survivor to三部分,其占新生代内存容量默认比例分别为8:1:1,其中Survivor from和Survivor to总有一个区域是空白,只有Eden和其中一个Survivor总共90%的新生代容量用于为新创建的对象分配内存,只有10%的Survivor内存浪费,当新生代内存空间不足需要进行垃圾回收时,仍然存活的对象被复制到空白的Survivor内存区域中,Eden和非空白的Survivor进行标记-清理回收,两个Survivor区域是轮换的。年老代年老代中的对象一般都是长生命周期对象,对象的存活率比较高,因此在年老代中使用标记-整理垃圾回收算法。Java虚拟机对年老代的垃圾回收称为MajorGC/Full GC,次数相对比较少,每次回收的时间也比较长。堆分配和回收策略分配优先在Eden上分配,空间不足,虚拟机发起minor GC.大对象直接进入老年代,防止折磨新生代空间.[参数设置 -XX:PretrnureSizeThreshold=[字节数]]长大后的对象进入老年代,在survivor中熬过一次,就长一岁,15岁时就进入老年代[阈值设置 -XX:MaxTenuringThreshold=[岁数]]相同年龄的对象,若大于或等于空间的一半,也直接进入老年代.附:JVM参数整理参数调优建议永久代:-XX:PermSize20M -XX:MaxPermSize20M堆大小: -Xms20M -Xmx20M新生代: -Xmn10MEden与survior比率: -XX:SurvivorRation=8让大对象直接进入老年代: -XX:PretrnureSizeThreshold=1B年龄阈值:-XX:MaxTenuringThreshold=15日志命令:参考连接

March 15, 2019 · 1 min · jiezi

改造rm命令,删除文件至回收站

rm 是我们经常使用的Linux命令之一,我会习惯于使用 rm 与 -rf 参数同时使用,将文件移除,但是这样做的话,在之后再想找回就会很麻烦。下面我们做一些调整,将rm命令的删除改为将文件移动到回收站,方便找回。具体操作如下:创建回收站位置如果是ubuntu系统,自带回收站的位置位于/.local/share/Trash/files/目录centos系统,我们自己创建一个回收站目录mkdir /.trash修改rm别名ubuntu: 找到/.bashrc文件centos: 找到~/.profile文件我本人用的是ubuntu+zsh,所以需要修改~/.zsh文件在文件最后追加如下内容:# 修改rm命令将文件删除至回收站alias rm=trashalias rl=‘ls ~/.local/share/Trash/files/’trash(){ del_date=date +%Y%m%d%H%M%S # 这里将删除时间加入到文件名后是因为mv命令不能覆盖非空目录以及不能使用文件覆盖文件夹 # 加上时间就不会有同名的文件了 mv $@ /.local/share/Trash/files/$@-${del_date}}source /.bashrc(/.profile、/.zsh) 使其生效大功告成,再使用rm命令就会将文件移动到回收站了,而且不需要添加 -rf 参数

March 11, 2019 · 1 min · jiezi

传输层TCP/IP简记

概述@Copyright图片版权归笔者所有,转载请告知.目的这篇文章能帮助大家快速回忆计算机网络体系,当然短短的文章并不能深入表述,文章并未涉及网络层和数据链路层,重点叙述了传输层.可能有所不足或错误,也谢谢大家指出,共同进步结构体系简述计算机网络协议体系结构目前有两种,一种是OSI/RM七层协议,另一种则是TCP/IP协议体系,两种体系结构对计算机网络分别划分了7和5个层次,OSI/RM是一种参考协议,当前用的主要还是TCP/IP体系.TCP/IP概述TCP/IP协议族按照层次由上到下,层层包装。顶层是应用层,里面有http,ftp,等等我们熟悉的协议。第二层则是传输层,著名的TCP和UDP协议就在这个层次。第三层是网络层,IP协议就在这里,它负责对数据加上IP地址和其他的数据以确定传输的目标。第四层是叫数据链路层,这个层次为待传送的数据加入一个以太网协议头,并进行CRC编码,为最后的数据传输做准备。再往下则是物理层了,负责网络的传输,这个层次的定义包括网线的制式,网卡的定义等等,这不是我们关注的部分,它几乎和tcp/ip协议的编写者没有任何的关系。发送协议的主机从上自下将数据按照协议封装,而接收数据的主机则按照协议从得到的数据包解开,最后拿到需要的数据。这种结构非常有栈的味道,所以也把tcp/ip协议族称为tcp/ip协议栈。详述应用层在应用层包含了不同类型的应用进程,如:telnet远程登录、FTP文件传输,qq聊天等,计算机应用直接接触的协议都放在应用层里,需要通信时,将应用层的信息按照应用层所对应的协议编写,传向下一层.例如http协议,可以初略的理解成编写成文本后通过传输层发送.如下测试图,给大家参考下.传输层传输层主要为两台主机上的应用程序提供端到端的通信服务。在TCP/IP协议族中,有两个不同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP:为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小数据块(数据段)交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时间等。由于传输层提供了高可靠性的端到端的通信服务,因此应用层可以忽略掉所有这些细节。UDP:为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种传输层协议分别在不同的网络环境与应用场合中有不同的用途。功能TCP和UDP采用16 bit的端口号来识别不同的应用程序。网络服务一般都是通过知名端口号来识别的。知名的1~1023之间的端口号由Internet号码分配机构(Internet Assigned Numbers Authority, IANA)来管理。现在IANA管理1~1023之间所有的端口号。大多数TCP/IP实现给临时端口分配1024~5000之间的端口号。大于5000的端口号是为其他服务(Internet上并不常用的服务)预留的。应用程序FTPTELNETHTTPHTTPS熟知端口号212380443如果仔细检查这些标准的简单服务以及其他标准的TCP/IP服务(如Telnet、FTP、SMTP等)的端口号时,我们发现它们都是奇数。这是因为这些端口号都是从NCP端口号派生出来的(NCP,即网络控制协议,是ARPANET的传输层协议,是TCP的前身)。NCP是单工的,不是全双工的,因此每个应用程序需要两个连接,需预留一对奇数和偶数端口号。当TCP和UDP成为标准的传输层协议时,每个应用程序只需要一个端口号,因此就使用了NCP中的奇数。TCP传输控制协议先来一张亲手绘制的美图如上,便是一个tcp数据段的数据结构图关键名词介绍序号:每个数据段中的数据部分中的每个字节都有一个序号,而当前数据段的序号则为第一个字节的序号.确认号:希望对方传过来的下一数据段的序号.窗口大小:表示本端可以接收的数据量,该量只针对数据部分的数据大小.数据偏移:因为数据段中存在可选项,因此并不知道真正的数据是从哪儿开始的,因此数据偏移记录了数据的其实位置.URG:紧急ACK:表示响应RSH:表示有数据传输RST:表示连接重置SYN:表示建立连接FIN:表示关闭连接三次握手和四次挥手先来一张三次握手图1.客户端说我要连接你,于是把请求连接的SYN字段置为1,序列号为n的清量请求数据段发送给接收方.2.接收方收到后,发送了一个请求连接字段SYN和确认字段ACK置为1,序号为m,确认号为n+1(表示我刚刚收到你的数据段序号为n,下面我希望收到n+1的数据段)的数据段给发送方.3,发起连接的一方收到确认信息后,对此确认信息进行确认,于是发送了序号为n+1,确认号为m+1的确认轻量级数据段进行确认.4.接收方收到确认信息后,此端到端的通信即创建成功.注意在请求连接时,可能会由于某种原因造成请求连接的数据中断.此时接收方有超时机制,避免长时间忙等.超时重传机制将在另外一篇文章中完整展开.若两方同时发起连接请求,此时双方互为发送方和接收方,通信依然能正常建立.四次挥手图1.客户端发起关闭连接的请求,于是发送FIN字段置为1,序号为n的数据段.2.服务端收到请求后,发送了ACK字段为1,序号为m的数据段,因为关闭客户端发送数据的连接,所以服务端不需要再收到确认了,因此无需发送确认号.3.当服务端认为自己数据传输完成了,于是发起FIN字段为1,序号为1,确认号为n+1的数据段,因为上一次客户端发送的是序号n,所以此次请求希望收到n+1的数据段.客户端收到关闭请求后,发送确认数据段.注:1.以上 称服务端和客户端有些许绝对,只是方便描述,其实可以看做发送端和接收端,即平级的.2.关闭连接也可能发生数据段丢失,因此也会引入超时重传机制.附:名词详解SYN:TCP连接的第一个包,非常小的一种数据包。 TCP首部的数据格式,如果不计任选字段,它通常是20个字节。 每个TCP段都包含源端和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接。序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32 bit的无符号数。当建立一个新的连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN(Initial Sequence Number)。因为SYN标志消耗了一个序号,该主机要发送数据的第一个字节序号为这个ISN加1。确认序:号包含发送确认的一端所期望收到的下一个序号。确认序号应当是上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。发送ACK无需任何额外代价,因为32 bit的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此,我们看到一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。TCP为应用层提供全双工服务。这意味数据能在两个方向上独立地进行传输。因此,连接的每一端必须保持每个方向上的传输数据序号。在TCP首部中有6个code bits 中的多个可同时被设置为1。含义如下:URG紧急指针(urgent pointer)有效. ACK确认序号有效。 PSH接收方应该尽快将这个报文段交给应用层。 RST重建连接。 SYN同步序号用来发起一个连接。 FIN发端完成发送任务。TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,窗口大小是一个16 bit字段,因而窗口大小最大为65535bit数据即8KB。检验和覆盖了整个的TCP报文段:包括了TCP首部和TCP数据。这是一个强制性的字段,一定是由发端计算和存储,并由收端进行验证。只有当URG标志置1时紧急指针才有效。紧急指针是一个正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。最常见的可选字段是最长报文大小,又称为MSS (Maximum Segment Size)。每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项。它指明本端所能接收的最大长度的报文段。TCP报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

March 11, 2019 · 1 min · jiezi

在TCP测试工具中发送HTTP信息

前言大家都知道,HTTP作为应用层协议,其实现主要还得感谢传输层提供端到端服务的TCP协议,TCP的三次握手和四次挥手完美的为HTTP提供稳定的传输服务.然而我们大多同学只是单纯的使用过这两种协议,今天笔者就小小尝试下在TCP测试工具中传输HTTP信息.环境及工具:Postman http测试工具SocketTool tcp测试工具一个可以接受请求及发送请求的后端服务,最好是运行在本地的源码项目,能具体查看数据信息.工具的下载地址(地址可能失效,必应上能轻松找到):Postman下载SocketTool下载开始先在本地运行一个python后端接口项目postmain测试接口改写成HTTP请求:POST /sensor/list HTTP/1.1Content-Type:application/jsonAuthorization:1.MTU1MjE5MDQ1MS41OTE4MTE3在SocketTool中创建tcp连接发送HTTP请求其中返回了响应头,头部字段.到此测试了用TCP工具发送HTTP请求的方法

March 10, 2019 · 1 min · jiezi

ubuntu源文件打不开could not open file '/etc/apt/sources.list.d/...

问题描述:WARNING:root:could not open file ‘/etc/apt/sources.list.d/sources-aliyun-0.list’解决方案:1.将/etc/apt/sources.list与/etc/apt/sources.list.d/sources-aliyun-0.list复制一份副本2.将这两个原文件内容更换为以下内容,并保存退出# deb cdrom:[Ubuntu 16.04 LTS Xenial Xerus - Release amd64 (20160420.1)]/ xenial main restricteddeb-src http://archive.ubuntu.com/ubuntu xenial main restricted #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial universedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates universedeb http://mirrors.aliyun.com/ubuntu/ xenial multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiversedeb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiversedeb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse #Added by software-propertiesdeb http://archive.canonical.com/ubuntu xenial partnerdeb-src http://archive.canonical.com/ubuntu xenial partnerdeb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricteddeb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe #Added by software-propertiesdeb http://mirrors.aliyun.com/ubuntu/ xenial-security universedeb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse3.sudo apt-get updatesudo apt-get upgrade至此 问题解决小编遇到了这个问题 查了很多资料 都没能得到有效的解决后来将这两个源文件里的内容改成一致 发现问题才得到解决如果解决不了 还请多多见谅 继续查查其他方法毕竟造成问题的原因不一样 解决方案也会有所差异祝你好运!! ...

March 9, 2019 · 1 min · jiezi

Ubuntu18.04搭建LNMP

在csdn上发布了一遍,然后又在这里发布一遍,哈哈,以下是csdn地址:https://blog.csdn.net/sinat_3… 最近闲来无事,遂下载了vmware,尝试搭建下lnmp,之前有试过搭建宝塔,lamp等,但最后结果都不怎么好,这次再次尝试搭建linux下的php开发环境,借鉴了很多网友的文章,历经千辛,搭建成功,遂将过程总结总结,分享出来。 这里是主要参考的两篇博客:快速搭建lnmp https://www.cnblogs.com/zhangbobo/p/9597446.html修改数据库密码 https://www.cnblogs.com/super-zhangkun/p/9435974.html开始 更新源 sudo apt-get update安装nginx sudo apt-get install nginx安装mysql sudo apt-get install mysql-server mysql-client这里会有个问题,有的文章说,安装过程会提示设置密码,然而。。。,这样,你将无法登录mysql,那么就这样放弃了吗?如下: cd /etc/mysql sudo cat debian.cnf 可以看到账号密码 使用这个账号密码登录mysql mysql -u :user -p :password use mysql; update user set authentication_string=PASSWORD(“密码”) where user=‘root’; update user set plugin=“mysql_native_password”; flush privileges; quit; 重启mysql /etc/init.d/mysql restart OJBK 什么?找不到debian?可以试一下find命令或者查看mysql安装位置find / debianps -ef|grep mysql 还是找不到?额,我也不知道。安装PHP 我安装的php7.2,安装前把已安装的php版本禁掉,怎么禁?百度或谷歌!!!至于想安装其他版本的PHP?看完我下面的命令,只要不是白痴应该都知道。 安装 apt install php7.2-cli 下载需要的扩展 apt install php7.2-fpm 将最后的fpm改成需要的扩展就行了 配置fpm cd /etc/php/7.2/fpm/pool.d sudo vim www.conf 找到 listen = /run/php/php7.2-fpm.sock 大概在36行,取消注释,或者修改为 listen = 127.0.0.1:9000 重启fpm sudo service php7.2-fpm restart 测试php-fpm sudo php-fpm7.2 -t // 出现successful就行了配置nginx 有点懒,直接把我写在subline里面的 Ctrl + C出来吧cd /etc/nginx/sites-enabled sudo vim default 将第一个service的 #location ~ .php$ { #} 前面的#去掉(去掉这两个就行了,其余的需要用到时再去掉) 添加( 或修改:去掉# )fastcgi_pass unix:/run/php/php7.2-fpm.sock;(与之前在fpm里面的listen一致) 坑:这时重启nginx:sudo service nginx restart 然后在 /var/www/html 里面添加 phpinfo.php 输出phpinfo();页面一片空白 做以下修改: 在fastcgi_pass 后面添加: fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; include fastcgi_params; 重启nginx 在此步骤中,如果之前步骤没出错,但是重启nginx失败,请仔细检查自己的配置文件是否缺少’;’,或者 配置的开闭 {} 之前的 # 号去除的不对 再者检查php-fpm监听路径是否正确,如果是127.0.0.1:9000,还可以通过 netstat -tlnp 检查运行情况写在最后 以上就是我搭建lnmp的全过程,比我之前搭建的宝塔和lamp要顺利点,但也是有点曲折的,凡事还是要自己亲身体验体验,才能理解里面的艰辛。这篇教程,不说多么详细吧,但是还是可以避免一些坑的产生!!!如果看了之后还是搭建不成功,我建议多看看别人的博客,了解了解linux的基础命令再来重新搭建一次,或者,使用windows和mac!最后,Enjoy It ! ...

March 6, 2019 · 1 min · jiezi

laravel-admin 文件上传阿里OSS

前言因为项目需求,需要把图片上传至阿里云 OSS,我的 Api 接口和后台项目是分开的,都使用的 laravel 框架开发,Api 接入 OSS 这里就不做讨论了,这里主要说一下 laravel-admin 上传阿里 OSS 的问题。网上的一些教程也有非常好的,但只说了使用流程,很少有说碰到的问题之类的情况,这里主要就是讲述我在 laravel-admin 接入阿里 OSS 时所遇到的一些问题,以后还有问题时,也会在这里更新。开发环境下面是我的 composer.json 内容(只列出本文需要):“require”: { “php”: “>=7.0.0”, “encore/laravel-admin”: “^1.6”, “jacobcyl/ali-oss-storage”: “^2.1”, “laravel/framework”: “5.5.*”, …}具体流程1、下载合适的第三方包在 composer.json 文件中的 require 添加 “jacobcyl/ali-oss-storage”: “^2.1”;或者直接运行 composer require jacobcyl/ali-oss-storage:^2.1 亦可。2、添加服务提供者在 config/app.php 文件下增加 Jacobcyl\AliOSS\AliOssServiceProvider::class,,如下图所示:3、在 config/filesystems.php 增加 OSS 配置信息如下:‘disks’ => [ ’local’ => [ ‘driver’ => ’local’, ‘root’ => storage_path(‘app’), ], ‘public’ => [ ‘driver’ => ’local’, ‘root’ => storage_path(‘app/public’), ‘url’ => env(‘APP_URL’).’/storage’, ‘visibility’ => ‘public’, ], ‘s3’ => [ ‘driver’ => ‘s3’, ‘key’ => env(‘AWS_ACCESS_KEY_ID’), ‘secret’ => env(‘AWS_SECRET_ACCESS_KEY’), ‘region’ => env(‘AWS_DEFAULT_REGION’), ‘bucket’ => env(‘AWS_BUCKET’), ], // 这里是新增 ‘oss’ => [ ‘driver’ => ‘oss’, ‘access_id’ => // 这里是你的 OSS 的 accessId, ‘access_key’ => // 这里是你的 OSS 的 accessKey, ‘bucket’ => // 这里是你的 OSS 自定义的存储空间名称, ’endpoint’ => ‘oss-cn-hangzhou.aliyuncs.com’, // 这里以杭州为例 ‘cdnDomain’ => ‘’, // 使用 cdn 时才需要写, https://加上 Bucket 域名 ‘ssl’ => true, // true 使用 ‘https://’ false 使用 ‘http://’. 默认 false, ‘isCName’ => false, // 是否使用自定义域名,true: Storage.url() 会使用自定义的 cdn 或域名生成文件 url,false: 使用外部节点生成url ‘debug’ => false, ], ],4、在 config/filesystems.php 更改 ‘default’ 配置信息如下:‘default’ => env(‘FILESYSTEM_DRIVER’, ‘oss’),也可以在 env 文件中定义 FILESYSTEM_DRIVER = oss 也可。5、在 config/admin.php 修改 upload 配置如下:‘upload’ => [ // Disk in config/filesystem.php. ‘disk’ => ‘oss’, // 这里就是指向 disks 下面的 oss 配置 // Image and file upload path under the disk above. ‘directory’ => [ ‘image’ => ‘images’, ‘file’ => ‘files’, ],],网上的步骤一般就是到这里了,上面的流程参考:laravel-admin 文件上传 oss;问题出现但是这时候问题就出现了, laravel-admin 本身为了开发者快速开发,本身就完成了一部分功能,当我们使用默认账号 admin 登录进去后,在后台的页面右上角和左上角都有默认的头像显示,这个默认头像是存放在本地 local 下的,在 vendor/encore/laravel-admin/resources/views/partials 下 header.blade.php 和 sidebar.blade.php 两个视图文件中显示,请看下图:header.blade.phpsidebar.blade.php而我们在 具体流程 的 5个步骤中已经把上传的配置改成了 oss 了,这时访问后台时,就会抛出一个异常:一开始我以为是 config/filesystems.php 的 default 还写成 local 会解决,但结果并没有。由于时间的原因,我还没有深入去研究,对于 laravel 框架文件上传的原理,我还是个新手,不过这里放上我的解决方法,如果有更好的解决方案,欢迎下方指正,谢谢!解决把 header.blade.php 和 sidebar.blade.php 两个视图文件中的图片的 src 改成阿里云 OSS 存放图片的路径,比如: https://xxx.oss-cn-hangzhou.aliyuncs.com/xxx/xxx/5c77a20012963.jpg ,这张图片就是你想要上传的头像图片地址。这里只是举个例子,当然这样写还是不方便,万一以后更改,还是需要找到这两个文件手动改,很麻烦,可根据自身需求进行解耦优化,这里就不做讨论了。道路阻且长,仍需不断前行!文章参考: [https://blog.csdn.net/zxdf123/article/details/82752145][6][https://blog.csdn.net/guyaofei/article/details/79918697][7] ...

March 4, 2019 · 2 min · jiezi

利用lighttpd Web引擎在Ubuntu 16.04系统中搭建网站系统

我们在Linux服务器中搭建建站系统较为多见的是利用Nginx或者是Apache,这个应该是占用大部分网站站长使用的WEB引擎。但是,也有很多网友会选择其他引擎环境的,比如我们熟知的还有Litespeed、Lighttpd,以及其他多种引擎方式。其实这些引擎方式都是可以建站使用的,而且各有优点。比如lighttpd占用资源小,适合在资源不足且需要节省资源的服务器中运行。Lighttpd提供了一个轻量级的Web服务器,它能够在比Apache等服务器使用更少内存的情况下为大型负载提供服务。 在这篇文章中将介绍如何在Ubuntu 16.04上安装和配置lighttpd Web服务器。 如果我们有喜欢的也可以参考使用到生产环境中。利用lighttpd Web引擎在Ubuntu 16.04系统中搭建网站系统第一、升级软件源和系统apt-get update && apt-get upgrade -y如果我们有必要的话可以也将当前服务器别名更换成需要的,一般我们就默认。第二、安装Lighttpd和设置apt-get install lighttpd -y直接执行脚本安装,一旦安装之后我们可以直接在浏览器输入当前服务器的IP地址,可以看到默认的界面。/etc/lighttpd/lighttpd.conf配置文件位于这里,我们可以根据实际需要开启和设置参数。在server.modules里我们可以看到列出的模块,如果是#表示禁止的,我们删除他表示开启。server.max-connections 是并发数的设置,可以调节参数。第三、创建WEB网站环境实例1、创建网站环境lighty-enable-mod simple-vhost2、重启Lighttpd生效systemctl restart lighttpd.service3、修改配置/etc/lighttpd/conf-available/10-simple-vhost.conf在当前文件设置。simple-vhost.server-root = “/var/www/html"simple-vhost.document-root = “htdocs"simple-vhost.default-host = “bandwagonhoster.com"根据需要修改成我们配置网站的参数。网站目录位于/var/www/html中。systemctl restart lighttpd.service配置完毕后重启生效。第四、虚拟机设置过程1、启动lighty-enable-mod evhost2、重启lighttpdsystemctl restart lighttpd.service3、配置文件/etc/lighttpd/conf-available/10-evhost.conf修改配置文件:evhost.path-pattern = “/var/www/html/%0/htdocs/“server.document-root = “/var/www/html/bandwagonhoster.com/htdocs"修改对应网站域名和目录。4、重启生效systemctl restart lighttpd.service第五、创建网站目录既然我们上面配置完毕文件目录后,我们还没有创建网站文件夹,这里来创建。mkdir -p /var/www/html/bandwagonhoster.com/htdocs/根据实际的域名创建,我们如果有多个域名可以一并创建多个。mkdir -p /var/www/html/{example.net/htdocs,example.org/htdocs}我们再创建软连接。ln -s /home/example-user/bandwagonhoster.com/ /var/www/html/bandwagonhoster.com第六、配置FastCGI1、安装Pythonapt-get install python2、安装Rubyapt-get install ruby3、为CGI安装PHP7apt-get install php7.0-cgi4、检查配置文件/etc/lighttpd/conf-enabled/15-fastcgi-php.conf检查:fastcgi.server += ( “.php” =>((“bin-path” => “/usr/bin/php-cgi”,“socket” => “/var/run/lighttpd/php.socket”,“max-procs” => 1,“bin-environment” => (“PHP_FCGI_CHILDREN” => “4”,“PHP_FCGI_MAX_REQUESTS” => “10000”),“bin-copy-environment” => (“PATH”, “SHELL”, “USER”),“broken-scriptfilename” => “enable”)))最后,是不是比较麻烦?如果我们只是建站应用就没有必要这样操作,确实浪费时间也没有必要。我们平时自己使用还是安装网站环境,常规的就可以。本文来自:https://bandwagonhoster.com/6… ...

March 4, 2019 · 1 min · jiezi

ubuntu18.04下VSCode通过ssh连接github实操

前言一般来说,我们从github克隆代码,有两个模式,一个是https模式,一个是ssh模式。如果我么没有建立ssh信任,是无法通过ssh模式克隆代码的。ssh模式有一个优势就是可以建立本地git工具和github服务器之间的信任,不需要使用账号密码登录,尤其是我们push origin提交服务器的时候,省去输入账号密码的步骤。场景系统:ubuntu 18.04工具:VSCode 1.31.1工具:git 2.17.1过程本地准备SSH-KEY打开终端,cd ~进入根目录,执行ssh keygen,一路回车,生成本地的SSH-KEY,在目录/home/myubuntu/.ssh下分别是id_rsa和id_rsa.pub文件。其中id_rsa.pub文件是公钥,另一个id_rsa是私钥。公约提供给服务器,私钥自己保留,在这里,服务器就是github。把SSH-KEY写入服务器登录github,访问https://github.com/settings/keys页面,主页面有两个模块SSH keys和GPG keys,我们需要使用的是SSH keys。右边页面有一个绿色按钮New SSH key,点击会出现添加栏,分别是Title和Key。把本地文件id_rsa.pub打开,可以在/home/myubuntu/.ssh下执行命令vi id_rsa.pub,完整复制粘贴到Key输入栏,Title可以随便命名,比如ubuntu key,点击下方的绿色按钮Add SSH key,保存成功。在本地终端执行命令ssh -T git@github.com,会用本地秘钥连接github主机,如果有提示You’ve successfully authenticated, but GitHub does not provide shell access.代表连接成功。这时候可以通过ssh从自己的github仓库拉取项目了。拉取数据的时候必须选择ssh地址,复制到本地终端,进入存放代码的目录,执行命令git clone git@github.com:No2015/vue-cli3-typescript.git。只有通过ssh拉取的项目才能通过ssh来控制。本地项目克隆完毕,安装依赖模块,正常运行之后。如果修改成功,可以通过命令行执行git add .、git commit -m ‘add all’,git push origin master三个命令提交代码。或者通过VSCode工具提供的快捷方式提交。因为有ssh签名的信任,账号密码都是免除了的,省事很多。结语之前搞了一小会儿,因为项目是通过https模式拉取下来的,ssh建立之后还是需要输入账号密码,折腾很长时间才发现,修改本地仓库的remote就好了,或者删除本地代码,重新通过ssh拉取新代码。修改本地仓库地址的命令是git remote set-url origin git@github.com:No2015/vue-cli3-typescript.git

March 1, 2019 · 1 min · jiezi

Vultr 教程目录

本节我们为大家介绍Vultr各方面教程,这些教程均为Vultr中文网原创教程。让您可以在20分钟内完成购买、配置服务器、搭建WordPress博客程序。一起来看吧! 手把手 图文购买教程 通过SSH管理服务器 1分钟快速搭建55 3分钟快速安装宝塔面板 5分钟快速搭建WordPress博客

February 26, 2019 · 1 min · jiezi

Ubuntu16.04安装Python3.7及其pip3并切换为默认版本

0.配置依赖环境,如果不进行这步可能会出现一些问题中间可能有多余空格,去除下再运行,一般都能安装成功,如果不能可以先更新下sudo apt-get updatesudo apt-get install zlib1g-dev libbz2-dev libssl-dev libncurses5-dev libsqlite3-dev libreadline-dev tk-dev libgdbm-dev libdb-dev libpcap-dev xz-utils libexpat1-dev liblzma-dev libffi-dev libc6-dev1.直接去官网下载你想的版本2.解压下载的包,在这之前你可以先mv你的包到指定位置解压jianjiacheng@J-computer:$ tar zxvf Python-3.7.13.进入解压目录jianjiacheng@J-computer:$ cd Python-3.7.1/4.建立安装的目录sudo mkdir -p /usr/local/python35.编译安装执行这步是后面最好加上 –enable-optimizations 会自动安装pip3及优化配置# ./configure –prefix=/usr/local/python3 –enable-optimizations# make# sudo make install6.删除软链接先执行查看版本,如果有则证明软链接已存在,需要先删去以前的再重新建立//这里表明我已有python3的软链接而没有pip3的软链接所以需要删除python3的软链接重新建立jianjiacheng@J-computer:/Python-3.7.1$ python3 -VPython 3.5.2jianjiacheng@J-computer:$ pip3 -Vbash: /usr/lib/command-not-found: /usr/bin/python3: bad interpreter: No such file or directoryrm -rf /usr/bin/python3rm -rf /usr/bin/pip37.建立新的指向python3.7的软链接#添加python3的软链接ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3#添加 pip3 的软链接ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip38.检测版本jianjiacheng@J-computer:$ python3 -VPython 3.7.1jianjiacheng@J-computer:$ pip3 -Vpip 10.0.1 from /usr/local/python3/lib/python3.7/site-packages/pip (python 3.7) ...

February 24, 2019 · 1 min · jiezi

vmware虚拟机里ubuntu无法连接到同一个子网的其他电脑解决办法

在虚拟机设置里面更改网络连接模式

February 15, 2019 · 1 min · jiezi

ubuntu 设置root用户密码并实现root用户登录

一:设置root用户密码在ubuntu中root用户的密码是随机的,所以需要我们自己起设置root用户的密码在终端命令行中执行sudo passwd这时候会提示你输入当前用户密码,输入成功之后,下面输入的就是root用户的密码这时候root用户密码就设置成功了,使用su root,然后输入刚刚输入的root用户密码就可以转到root用户下了二:实现root用户登录系统虽然我们已经设置了root用户密码,并且可以使用su root转到root用户角色下,但是当我们重新启动ubuntu系统时,使用root用户登录时,这时候会提示认证失败这是由于ubuntu默认情况下是不支持root用户登录系统的,这时候我们就需要自己来配置,是的ubuntu可以使用root用户登录系统1:修改文件/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf在ubuntu中默认是没有安装vim的,默认是使用vi编辑器,但是我不是很习惯使用vi编辑器,所以这里我安装了vimsudo apt-get install vim安装成功之后修改/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf文件sudo vim /usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf在/usr/share/lightdm/lightdm.conf.d/50-unity-greeter.conf文件中添加下面信息greeter-show-manual-login=true #手工输入登陆系统的用户名和密码all-guest=false #不允许guest登录(及游客)2:修改 /etc/pam.d/gdm-autologin文件sudo vim /etc/pam.d/gdm-autologin注释掉auth required pam_succeed_if.so user != root quiet_success这一行3:修改/etc/pam.d/gdm-password文件sudo vim /etc/pam.d/gdm-password注释掉auth required pam_succeed_if.so user != root quiet_success这一行4:修改/root/.profile文件这里注意:修改/root/.profile文件时必须用户root用户,不然的话无法修改或找不到此文件su rootvim /root/.profile将此文件中的mesg n || true修改成tty -s&&mesg n || true5:重新启动ubuntu,这时候就可以使用root用户去登录系统了

February 15, 2019 · 1 min · jiezi

解决ubuntu 远程连接问题

一:无法使用xshell远程连接ubuntu服务器1:安装openssh-serversudo apt-get install openssh-server2:配置ssh服务(这一步是为了使root用户可以使用远程连接)su rootvi /etc/ssh/sshd_config将/etc/ssh/sshd_config文件中的PermitRootLogin prohibit-password注释掉,并加上PermitRootLogin yes3:重新启动ssh服务sudo service ssh restart重新启动ssh服务之后,在进行远程连接时连接成功二:xftp找不到匹配的outgoing encryption算法在我使用xftp连接ubuntu服务器时提示找不到匹配的outgoing encryption算法原因:远端的SSH服务升级后,其对应的加密算法均作了升级、修改解决:1:在xftp上点击文件-》属性2:点击协议边上的设置按钮3:点击加密边上的编辑按钮4:给下图中红框内的选项勾中,然后点击确定5:设置完成之后重新连接,这时候就可以连接成功了

February 15, 2019 · 1 min · jiezi

ubuntu下的代理玄学问题

出于众所周知的原因,我在公司的新加坡服务器上搭了个ss服务器。然后在本地客户端,用ss+polipo实现全局代理,并在System settings->network->proxy里设置为polipo的端口,并在命令行设置了export http_proxy等等。一切完毕,代理顺利运行,google顺利进入。然后ubuntu系统可能由于几个月没关机导致有点不稳定,关机重启。重启之后,出现了一个神奇的问题:Postman不能访问localhost了。浏览器可以访问,chrome的Postman web版插件能访问,Postman客户端却不能访问。代理开着,提示polipo返回的502页面。以为是代理的问题,把代理全关掉,返回无法访问(跟没开服务一样)。于是我陷入了无限的懵逼,开始排查问题。首先怀疑是postman代理设置的问题,进入设置,并无不妥,但还是各种更改了一番设置,没效果。然后怀疑是系统代理没关干净,于是把相关脚本改了一下,把export http_proxy等注释掉,source之,没效果。怀疑polipo或者ss开机启动设置,关掉开机启动,没效果。代理进程没杀干净?netstat grep了,干净的。一脸懵逼。想起来当初出现问题的由头是重启了一下,于是又重启了一下。好了。。。玄学。。。

January 25, 2019 · 1 min · jiezi

Ubuntu安装WebDav文件共享服务器(NAS)

为了做个NAS,折腾了超久的Samba,看似简单,其实Samba的用户设置实在太繁琐,坑太深。用户权限和目录权限、甚至磁盘格式稍有不同,都会导致无法登录。实在不靠谱,实际体验也不是很稳定。所以在找Alternatives过程中,发现了这个也存在了很久的WebDav协议。不像Samba是一个微软开发的软件体系,WebDav只是一种协议,确切说是世界上最普遍的HTTP协议的一个小扩展。它不是一个软件。所以就好理解,为什么搜索不到WebDav的官网和官方安装指南了——因为没有“官方”。谁都可以开发软件支持这个协议,就像水都可以开发浏览器支持HTTP协议浏览网站一样。参考:How To Set Up WebDAV With Apache2 On Debian Etch# 安装Apache2服务器sudo apt-get install -y apache2# 开启Apache2中对WebDav协议的支持 (记住最好在用户目录下执行否则报错)cd ~sudo a2enmod davsudo a2enmod dav_fs# 创建共享目录并修改权限sudo mkdir -p /var/www/webdavsudo chown -R www-data:www-data /var/www/webdav# 创建WebDav的访问用户数据库,顺便创建用户pisudo htpasswd -c /etc/apache2/webdav.password pi# 创建guest用户#sudo htpasswd /etc/apache2/webdav.password guest# 修改用户数据库访问权限sudo chown root:www-data /etc/apache2/webdav.passwordsudo chmod 640 /etc/apache2/webdav.password# 打开默认配置文件sudo vim /etc/apache2/sites-available/000-default.conf# 全部替换为以下内容(记得先备份):Alias /webdav /var/www/webdav<Location /webdav> Options Indexes DAV On AuthType Basic AuthName “webdav” AuthUserFile /etc/apache2/webdav.password Require valid-user </Location># 重启Apache2服务器sudo systemctl restart apache2# 或sudo /etc/init.d/apache2 reload然后就可以用任意浏览器输入:http://树莓派的IP地址/webdav来访问了。注意,webdav后面没有/斜杠。网页中如果正常显示目录中的文件结构,则可以正常访问:这一步完成,我们就可以开始把这个共享文件夹映射到Mac、Windows上的本地文件夹了。磁盘映射网页里只能像FTP一样显示文件目录和下载文件。如果要正常使用,我们需要把它映射为本地目录才行:Mac上:在Finder中用CMD+K打开连接服务器选项,输入http://树莓派IP地址/webdav,输入Webdav创建过的用户名密码来完成映射。iPhone上:安装网盘访问最强的Readdle Documents,添加WebDav服务,输入信息后就可以访问。直接看文档、看视频、听歌都行。Windows上:比较麻烦的是,Win7以上默认只支持HTTPS的网络驱动器,做为HTTP的WebDav是不能连的。所以要修改Windows注册表,让它支持HTTP。方法入下:开始菜单 -> 运行 -> 输入regedit 并按回车,就打开了注册表注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters\BasicAuthLevel这个项目,把值改为2。开始菜单 -> 运行 -> 输入cmd 并按回车,打开命令行输入net stop webclient并按回车,停止网络客户端输入net start webclient并按回车,开启网络客户端然后在文件夹菜单中找到映射网络驱动器,输入网址http://树莓派IP地址/webdav或\树莓派IP地址\webdav,然后输入用户名密码,就能映射成功了。浏览器上:随便什么设备,只要是个浏览器就能支持。可以在线播放常用视频,直接打开图片浏览。但是不能上传。挂载外部磁盘(移动硬盘、U盘)和Samba一样,只要在/var/www/webdav/这个共享出来的文件夹中,创建个空目录,然后把移动硬盘用mount命令挂载到这个目录上。外部就可以访问了。使用速度和感受配置上,比Samba不知道简单到哪里去了。实验证明,速度非凡!Mac映射完成后,访问就像本地文件夹一样快,而且可以直接看视频、预览图片、支持原本各种快捷键等。还可以直接拖放文件来复制,速度也快到和本地复制文件没有区别。如果对比Samba,最明显的是看图片和视频的打开速度。Samba要等一秒以上,而WebDav几乎没有等待,或者说和本地打开文件一样速度。唯一缺点是,Windows访问的话,是很卡很卡的。稳定性上,因为是基于Apache2的,bug非常少,权限也不用傻傻分不清(和本地用户也没关系)。远程访问上(我在AWS新加坡服务器上建的WebDav),速度也相当可靠,比我访问树莓派的WebDav还快。毕竟亚马逊服务器配置高网速快。只是视频访问就没那么方便,经常卡顿、发生异常。但是也比较满意了。总结:WebDav配置方便,访问轻松,权限管理轻松,稳定,超多平台支持,完美!常见问题Apache2 Reload出错用命令sudo /etc/init.d/apache2 reload重启服务器没有反应,用命令sudo /etc/init.d/apache2 reload重新加载Apache2时也报错:[….] Reloading apache2 configuration (via systemctl): apache2.serviceJob for apache2.service failed. See ‘systemctl status apache2.service’ and ‘journalctl -xn’ for details. failed!一般来讲,很有可能是80端口被占用了,有可能是Nginx。所以要找到占用端口的服务,并关闭它。具体方法如下:# 找到所有nginx相关进程$ ps -ef |grep nginx# 按照显示出的nginx进程号逐一关闭$ sudo kill -TERM 进程号# 或$ pkill -9 nginx# 重新加载Apache2服务器$ sudo /etc/init.d/apache2 reload# 重启Apache2服务器$ sudo systemctl restart apache2Reload后成功后就会显示:这样再用浏览器尝试访问webdav服务的网址,就OK了为什么访问WebDav很慢一般来讲,无论是WebDav还是Samba,访问速度慢主要有这些因素:服务器网速不够本机客户端电脑的网速不够路由器速度有限服务器硬盘(或U盘)配置太低(转速低)服务器主机电脑配置低:CPU、内存都不足 (树莓派就是这样)客户端所在的电脑配置低所以,如果以上所有原因都不构成连接速度慢的原因的话,才需要考虑是不是WebDav软件设置和架构出了问题。 ...

January 25, 2019 · 1 min · jiezi

Ubuntu安装Samba文件共享服务器(NAS)

终于有点时间来解决下家中NAS需求了。一般自制NAS,只有选Samba。速度比FTP快,便利性比Windows文件夹共享好,设置多等等。▶参考:samba简介安装Samba$ sudo apt-get update$ sudo apt-get install samba samba-common-bin核心步骤:配置SambaSamba唯一设置的入口就算一个smb.conf文件,所有变化都依次而来,出了问题也只需要在这里找原因。配置之前先说明,这里我不打算只共享一个文件夹,而是共享树莓派连接上的所有外置硬盘。树莓派的外置硬盘默认挂载在了/media/pi目录下,每个硬盘挂载为/media/pi/drive1,/media/pi/drive2等。所以不用一个一个共享,直接把/media/pi共享就OK了。下面配置还会限制:只有pi这个用户可以访问。常用且肯定没问题的最简单配置如下:# 编辑Samba的配置文件sudo vim /etc/samba/smb.conf# 文件末尾添加这个共享文件夹的定义:[NAS]comment = NAS External drivepath = /media/pipublic = Yesbrowseable = Yeswriteable = Yesvalid users=pi其中:valid users:只允许指定的用户和用户组访问设置Samba用户名和密码这一步也至关重要,直接影响各设备的访问。注意,这个用户必须是本机已经在group和user里面都存在的用户,且必须权限设置什么的符合samba要求才行。否则会导致有些设备完全无法访问这个文件夹。之前试了自己groupadd和useradd本地用户后,又在samba里smbpasswd -a添加用户名密码,结果Mac完全访问不了,Windows也是根据系统的不同有的能访问有的不能访问。所以这里推荐用树莓派的默认用户名pi:# 输入Samba用户的访问密码sudo smbpasswd -a pi重启Samba# 推荐重启方法(可以看到自检过程)$ sudo /etc/init.d/samba restart到这一步,如果没出问题的话,就会显示成功:按照之前的配置,现在你就可以访问Samba共享文件夹了。访问方法一般访问方法如下:Windows:直接打开桌面的网络(网上邻居)-> RaspberryPi(树莓派的网络名),然后就可以看到树莓派上所有共享的文件夹和设备了。Mac: 稍微麻烦一点,在Finder中点击菜单 -> Go -> Connect to server -> 输入smb://IP地址,按照要求输入本机或树莓派的Samba用户名密码:然后可以看到,目录中和本地目录几乎没什么区别:能看预览,支持所有文件夹正常的快捷键,随意拷贝粘贴,这是FTP远不能比的。将Samba的共享目录映射到本地Windows上,直接在文件夹里点击菜单->工具->映射网络驱动器。然后选择映射出来的驱动盘字母,点击浏览,选择网络邻居里的树莓派,确定完成。就会在本地的计算机里显示出映射磁盘了。Mac上,一般在文件夹里面通过Cmd+K连接服务器后打开共享文件夹后,系统就会自动把它挂载到/Volumes/你的共享文件夹名这里。可以直接通过命令行随意访问。然后即使桌面上的文件夹关闭后,也还是可以在命令行里正常访问。多用户访问Samba我们用Samba,就肯定有多用户需求。但是多用户问题恰是Samba最麻烦的地方,如果是像我这样对Linux用户权限不熟悉的话。首先需要明了:Samba的里面添加的用户,必须是Linux已经存在的用户!而且这个用户必须有相应的权限,才行。所以多用户策略大概如下:创建Linux本机用户组,并赋予相应权限创建Linux本机的用户,并赋予相应权限创建共享文件夹,修改文件夹权限,修改文件夹所有者,改为对应的Samba用户或用户组创建与Linux用户对应的Samba用户,并创建密码在Samba配置文件里面,声明有权访问共享文件夹的用户或用户组注意:挂载的NTFS磁盘,是不支持unix体系的group和user的,所以里面的文件默认所有者和所属组都是root。要解决这个,需要在mount挂载时就指定所有者,但是也不能分别指定里面某个文件夹或目录的所有者。Samba调试Samba的自检程序testparm自动测试,并显示Samba所有的共享和定义:$ testparm列出当前所有已注册的Samba用户$ sudo pdbedit -L使用smbclient测试smbclinet是命令行客户端,需要下载安装使用:# 安装$ sudo apt-get install smbclient# 连接Samba服务器$ smbclient //192.168.1.111/share -U sambaUser01$ smb: ls如果连接成功,就会进入smb的交互shell,然后输入ls,成功列出目录,则连接完全成功。这是常用的最方便的测试方法,如果有任何一点不成功,这个连接命令都无法执行。只要这里能够正常访问,那么其它地方都没有问题。常见问题Mac上能用guest访问却不能用设置了的用户访问这个是你的Samba用户设置出了问题。有可能是Samba中定义的用户,在本机中权限不够。解决方法就是:直接用树莓派的原生用户pi,或仔细研究新创建的用户权限,添加好了再到Samba配置中设置原生用户pi以外的用户都不能访问外置磁盘尝试过多用户方案,只要不是外置磁盘,都能正常访问、读写。但是插的U盘,外置移动硬盘,除了pi用户以外全都只能进入,不能写入。就算把新建用户升级到超级用户,就算把文件目录的所有者改为新建的用户,也还是一样的。消除来自Mac的.DS_Store文件安全隐患Mac上访问远程文件夹会留下.DS_Store文件,其中包含太多信息这样很不安全。所以我们要在Mac上设置,在访问远程文件夹时不留下这个文件:$ defaults write com.apple.desktopservices DSDontWriteNetworkStores true但是以上方法不是完全生效,目前MacOS 10.12以上都不一定能生效。访问外置硬盘Permission Denied这个也是用户权限问题,配置原生pi用户就没问题了。

January 24, 2019 · 1 min · jiezi

AWS Lightsail/EC2 Ubuntu 安装桌面

低配的EC2服务器,运行桌面的话极其缓慢,打开什么都会卡半分钟,包括文件夹。看视频就更别想了。而且一般也没什么需要桌面的需求,只是玩玩,知道能GUI桌面登录就好了。主要步骤如下:第一步:先在管理后台开启默认的5901端口。第二步:安装VNC服务,如vnc4server第三步:安装桌面(xfce4, ubuntu-desktop等)第四步:配置VNC文件~/.vnc/xstartup,设置开启哪个桌面等参数第五步:重启VNC服务VNC服务:vnc4server注意:vnc4server不支持MacOS自带的vnc连接方法,需要安装RealVNC的VNC Viewer一类软件连接。安装:$ sudo apt-get install vnc4server开启/关闭VNC服务的方法:$ vncserver :1$ vncserver -kill :1另外,在使用前,必须要填写VNC的配置文件~/.vnc/xstartup(比如选择什么桌面之类,根据桌面不同配置也不同),才能正确启动。轻量版桌面:xfce4参考:How to install graphical Desktop in ec2 instance ubuntu16.04 (Linux) and access from mac$ sudo apt-get install xfce4需要配置的VNC文件是~/.vnc/xstartup文件,全部修改如下:#!/bin/sh# Uncomment the following two lines for normal desktop:# unset SESSION_MANAGER# exec /etc/X11/xinit/xinitrc#xrdb $HOME/.Xresources#xsettroot -solid grey#startxfce4&[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresourcesxsetroot -solid greyvncconfig -iconic &x-terminal-emulator -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” &#x-window-manager &sesion-manager & xfdesktop & xfce4-panel &xfce4-menu-plugin &xfsettingsd &xfconfd &xfwm4 &配置好后,重启VNC服务,即可登录。桌面很清简:默认Ubuntu桌面:ubuntu-desktop参考:阿里云ECS,Ubuntu Server 16.04安装图形界面远程控制$ sudo apt-get install ubuntu-desktop$ sudo apt-get install gnome-panel gnome-settings-daemon metacity nautilus gnome-terminal# 退出登录$ exec sh /etc/X11/xinit/xinitrc.编辑VNC配置~/.vnc/xstartup(包括选择默认桌面等):#!/bin/shexport XKL_XMODMAP_DISABLE=1unset SESSION_MANAGERunset DBUS_SESSION_BUS_ADDRESS[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresourcesxsetroot -solid greyvncconfig -iconic &gnome-panel &gnome-settings-daemon &metacity &nautilus &gnome-terminal &配置好后,重启VNC服务,即可登录。桌面非常丑,而且非常慢。客户端Mac上文件夹里自带的VNC连接,不支持打开vnc4server生成的远程桌面。所以必须要下载第三方客户端。推荐用免费简单的VNCViewer。登录的话直接在地址栏输入类似:34.231.169.129:1即可,注意ip后面有个:1 ...

January 23, 2019 · 1 min · jiezi

tomcat设置默认路径致使项目url冲突解决方法

前言tomcat作为java容器非常出色,但是依然会有一些避之不及的小坑,在此记录一笔.START问题部署多个项目后url路径冲突情景描述1.webapps下有两个项目 projectA,projectB.两个项目除开管理信息接口,其余都有安全验证机制.2.projectA由于未做前后端分离,因此静态资源也存在java项目中.在做静态资源中的接口请求时未写包名,比如登录,js代码会拼接服务器ip+端口+当前设置的url(/login),而未在/login前加上/projectA,所以在本机上测试没有问题,只有当部署的时候才会存在这样的问题.这也是个问题,下面解决.3.projectB是运行正常的项目对于情景2解决办法打开tomcat中的配置文件,在<Host>标签里添加上<Context>设置为服务器的默认访问路劲,如此便避开了包名,但此方法极不正规,不推荐使用.<Host name=“localhost” appBase=“webapps” unpackWARs=“true” autoDeploy=“true”> <!– SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html –> <!– <Valve className=“org.apache.catalina.authenticator.SingleSignOn” /> –> <!– Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern=“common” –> <Valve className=“org.apache.catalina.valves.AccessLogValve” directory=“logs” prefix=“localhost_access_log” suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" /> <Context path="" docBase="/usr/tomcat8.6/webapps/sc_edu" debug=“0” reloadable=“true”/> </Host>代码解释<Context path="" docBase="/usr/tomcat8.6/webapps/sc_edu" debug=“0” reloadable=“true”/>path和doBase一起表示指定包路径,为了简便可以直接卸载docBase中.重启tomcat,测试直接ip+port能访问到该包中的资源,然而当访问其它包中资源时,会出现url歧义.本来是想访问projectB,然而映射到projectA项目下.只是部分url会出现这样的问题.然后我们的解决方法是再装一个tomcat,只部署需要直接路径映射的项目如此便回到tomcat所在目录,cp命令拷贝$> cp -r tomcat8.5/ tomcat8.6/然后移动tomcat8.5中的projectA到tomcat8.6中.删除tomcat8.5中的<Context path="" docBase="/usr/tomcat8.6/webapps/sc_edu" debug=“0” reloadable=“true”/>在tomcat8.6中需要对service.xml做如下改动.改动 shutdown对应的port为8006,只要与tomcat8.5不同且端口不冲突就行.<Server port=“8006” shutdown=“SHUTDOWN”>改动 请求对应的端口,原则同上<Connector port=“8081” protocol=“HTTP/1.1” connectionTimeout=“20000” redirectPort=“8443” /><Host>标签中的内容复制过来的,需要修改成对应的映射路径.如此两个tomcat才能同时运行,启动与关闭互不影响.END ...

January 20, 2019 · 1 min · jiezi

linux 后台运行程序

前言一般为了程序后台运行,我们需要使用nohup命令.此时需要对程序运行时所产生的输出信息记录,因此就需要使用linux的信息输出命令START一个例子比如要让redis-server程序后台运行1.非后台运行:$> ./redis-server2.后台运行:$> nohup ./redis-server 1>/dev/null 2>1 &其中数字1代表标准输出,2代表错误信息输出,还有未使用的标准输入即数字0.1>/dev/null 2>1 &的意思是标准信息输出到空设备即不做任何处理,也不做任何显示,/dev/null也可以替换为文本文件名(如 out.log),此时标准信息就会输出到指定文件.2>1表示错误信息输出到标准输出,即输出同1>后面的位置,当然也可以直接指定新文件名(如 err.log).& 表示程序后台运行上面的命令还可简写:nohup ./redis-server >/dev/null 2>1 &即去掉标准输出数字1END记录后台运行一个程序1.先用 netstat -tln 查看端口信息2.isof -i:端口 可以找到程序进程号PID3.kill PID 可以关闭程序

January 20, 2019 · 1 min · jiezi

ubuntu多版本php切换

最近想要学习一下swoole,虽然机子上装的是php7.0,但是考虑到一些有关swoole的轮子要依赖更高版本(例如swooletw),所以就在机子上升级了php7.2,下面是在网上搜索或者自己折腾出来的一些笔记。版本升级操作(直接从7.0升级到7.2):sudo add-apt-repository ppa:ondrej/phpsudo apt-get updatesudo apt-get upgrade php# 拓展升级sudo apt-get install php7.2-mbstringsudo apt-get install php7.2-gdsudo apt-get install php7.2-domsudo apt-get install php7.2-mysqlsudo apt-get install php7.2-curl……有需要可以安装swoole: https://wiki.swoole.com/wiki/…这里建议直接用pecl install swoole安装,一步到位,如果手动编译,貌似会出现各种因为版本对应不上的问题。切换版本:# 禁用7.0版本sudo a2dismod php7.0# 启用7.2版本sudo a2enmod php7.2# 重启nginx(或apache)sudo service nginx restart如果出现ERROR: Module php7.0 does not exist! ,执行sudo apt-get install libapache2-mod-php7.0再执行上面操作这时候在浏览器查看phpinfo()应该就可以看到7.2版本了,但是命令行cli那里还是7.0,需要执行下面操作:# 切换clisudo update-alternatives –set php /usr/bin/php7.2这样在命令行执行php -v也能看到7.2版本了如果有两个版本,其实可以直接用sudo service php7.0-fpm stop/restart来进行切换,当然这只能切换php-fpm,也就是web端,命令行cli端还是不能切换的Parse error: syntax error, unexpected ‘?’, expecting variable (T_VARIABLE):升级版本后,我还折腾了php7.1,然后第二天回来启动电脑就发现所以laravel项目都报这样的错,网上搜索后知道是版本问题,但是看了下php -v没问题就是7.2,这时候打算重启php报错,以下的报错就是问题所在了:ERROR: unable to bind listening socket for address ‘127.0.0.1:9001’: Address already in use (98)大致就是端口被占用,然后php fastCGI程序启动失败解决方法:ps aux|grep php查看所有php-fpm进程,发现有个php7.1-fpm进程,拿到进程id,再kill掉就能够重启了。网上查询的解决方法是killall php-pfm这个命令,执行后只有显示 php-pfm:没有发现操作,这种方法没用,最后使用上面这种查询进程,然后根据进程id杀死进程的方法 ...

January 17, 2019 · 1 min · jiezi

周报2019-01-12

这周JS异步包括ES6 Promise写法以及ES7 Async/Await以及PromiseAPI的回顾demo,模拟异步获取token,我对什么时候Promise转换为Reject的理解还是不是很清楚React16的生命周期React所有的生命周期(包含已经废除和即将废除和新增的),学习了每个生命周期是什么时候触发以及具体是做什么用的,但是getDerivedStateFormProps 这个生命周期的应用场景以及发展趋势还不是很清楚,我写了一篇文章去总结React16 生命周期理解React Hooks学习了React 16.7-alpha.2版本中 Hooks的发展和作用,包括API的使用和自定义Hooks,掌握不熟练,暂时没有在项目中复杂的应用,我写了一个demo-hooks在这里微信小程序开始学习了,再不学就out了Ubuntu18.04的使用因为公司用Ubuntu,所以大概安装了Ubuntu上的前端开发环境,并且安装了仿MacOSX的主题,Ubuntu我不是很熟悉和喜欢,还是喜欢在Mac上开发,知乎上有Ubunut优雅使用指南,Ubuntu18.04安装mac os主题此文写得很详细了

January 12, 2019 · 1 min · jiezi

Ubuntu服务器上部署kodexplorer私有云盘

阅读目录一、准备二、下载安装xampp三、下载安装可道云kodexplorer注意:云服务器部署和普通的Ubuntu上部署有一些区别,因为云服务器上只能使用命令行,没有界面。一、准备首先,你得在阿里云上有一台云服务器,并且确定所安装的系统是什么,可通过 getconf LONG_BIT命令确定Ubuntu系统版本。整个过程在终端通过命令完成。二、下载安装xampp1.什么是xampp?XAMPP(Apache+MySQL+PHP+PERL)是一个功能强大的建站集成软件包。这个软件包原来的名字是 LAMPP,但是为了避免误解,最新的几个版本就改名为 XAMPP 了。它可以在Windows、Linux、Solaris、Mac OS X 等多种操作系统下安装使用,支持多语言:英文、简体中文、繁体中文、韩文、俄文、日文等。2.下载与操作系统版本对应的xampp找到想下载的版本,鼠标右键复制下载链接。在云服务器终端输出命令:wget -c 下载链接。这里我下载最新版本,命令为:wget -c https://www.apachefriends.org/xampp-files/5.6.35/xampp-linux-x64-5.6.35-0-installer.run下载完成后,在当前目录可以看到一个.run可执行文件,先给文件添加相应的权限,命令为:chmod +x xampp-linux-x64-5.6.35-0-installer.run3.安装xampp命令为:sudo ./xampp-linux-x64-5.6.35-0-installer.run按照要求输入Y或者按回车键就可以安装成功,它的默认安装位置为:/opt/lampp。4.启动与停止xampp(1)启动xampp,命令为:sudo /opt/lampp/xampp start在启动之后,可以在自己的电脑或手机浏览器上输入你的云服务器IP地址,就可以看到xampp的默认页面,代表你的xampp正常使用,默认端口为80。运行出现错误,可能是端口冲突,通过查看80端口和443端口(命令为netstat -ap | grep 80)使用情况,可以修改默认的80和443端口。(2)停止xampp,命令为:sudo /opt/lampp/xampp stop。三、下载安装可道云kodexplorer1.下载最新版可道云,其中有Linux获取最新版可道云的相关命令。下载命令:wget http://static.kodcloud.com/update/download/kodexplorer4.37.zip创建目录:sudo mkdir kodexplorer解压命令:unzip kodexplorer4.25.zip -d ./kodexplorer进入对应文件夹,并设置权限:cd ./kodexplorer,chmod -Rf 777 ./*2.拷贝至相应的目录命令:sudo cp -r kodexplorer/ /opt/lampp/htdocs/。进入对应文件夹,设置权限:cd /opt/lampp/htdocschmod 777 kodexplorerchmod -R 777 kodexplorer/data/3.测试是否成功重新启动xampp服务,浏览器打开“IP地址/kodexplorer/index.php”,设置管理员密码,开始使用。

January 4, 2019 · 1 min · jiezi

Ubuntu系统下,远程终端无法显示中文的问题解决

阿里云默认镜像是支持utf8的,只需要添加如下配置,并重新连接,即可支持中文显示和输入vim /etc/default/localeLC_CTYPE=“en_US.UTF-8"LC_ALL=“en_US.UTF-8"LANG=“en_US.UTF-8"或者通过语言配置工具,重新配置,选择zh_CN.UTF-8即可dpkg-reconfigure locales对于没有安装相关编码的,安装如下相关包即可:apt-get install language-pack-zh-hans zh-autoconvert zhcon

January 1, 2019 · 1 min · jiezi

laravel学习日志 - 在Ubuntu下安装homestead

更新软件源sudo apt-get update安装 VirtualBoxsudo apt-get install virtualbox安装 Vagrantsudo apt-get install vagrant如果在最后一步提示版本过低的话去官网下载安装debian版本文件,然后使用dpkg -i 文件名 的命令安装按照Homestead下载laravel-china提供的本地化Homestead Boxwget -nc -o /dev/null –restrict-file-names=nocontrol –no-check-certificate -P /tmp http://download.fsdhub.com/lc-homestead-6.1.1-2018090400.zip 2>&1解压upzip lc-homestead-6.1.1-2018090400.zip -d /tmp在解压目录运行导入命令vagrant box add metadata.json后面的没啥的跟着入门教程走就可以了。

December 26, 2018 · 1 min · jiezi

bind9的初步使用(2)

本文首发于我的博客:bind9的初步使用(2)设置局域网访问比如我的windows 10的ip地址是192.168.1.230。那么我们可以添加如下内容到/etc/bind/named.conf.options文件中。 listen-on { 192.168.1.230; 192.168.1.231; };填写完成后打开/etc/bind/named.conf.options内容如下:$ cat /etc/bind/named.conf.options options { directory “/var/cache/bind”; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0’s placeholder. // forwarders { // 114.114.114.114; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; listen-on-v6 { any; }; listen-on { 192.168.1.230; 192.168.1.231; };};重启bind9。然后在windows 10 上设置DNS为192.168.1.231和114.114.114.114。这样我们打开cmd,查看域名是否获取到了正确的ip。PS C:\Users\baogu> ping www.baoguoxiao.pro正在 Ping www.baoguoxiao.pro [192.168.1.231] 具有 32 字节的数据:来自 192.168.1.231 的回复: 字节=32 时间<1ms TTL=64来自 192.168.1.231 的回复: 字节=32 时间<1ms TTL=64来自 192.168.1.231 的回复: 字节=32 时间<1ms TTL=64来自 192.168.1.231 的回复: 字节=32 时间=1ms TTL=64192.168.1.231 的 Ping 统计信息: 数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),往返行程的估计时间(以毫秒为单位): 最短 = 0ms,最长 = 1ms,平均 = 0ms但是如果我们这边手机要连怎么办。不能每次都加ip吧。所以这里有个简单的办法。直接将上面的配置修改如下:$ cat /etc/bind/named.conf.options options { directory “/var/cache/bind”; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0’s placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; listen-on-v6 { any; }; listen-on { any; };};这样直接将ip列表修改为any。就可以接收所有的ip了。这个时候我们将bind9再次重启。首先安装一个nginx。具体的安装教程可查看我的另外一篇文章APT安装NGINX安装之后,如果访问192.168.1.231,就能看到默认的nginx页面了。手机测试每个手机是设置是不同的。我这里是iphone,版本是12.1.1。进入设置->无线局域网->在已连接的WIFI右边点击带圈的感叹号->配置DNS->选择手动。最后点击添加服务器,输入我们虚拟机的地址:192.168.1.231。这个时候我们在手机的浏览器里面输入我们之前设置的域名www.baoguoxiao.pro。就能看到我们经典的nginx主页了。这样我们就可以使用手机访问我们的电脑页面了。在调试某些情况的时候,是不是感觉会非常方便呢。泛域名设置在开发的时候,可能会出现使用多个域名的情况,但是如果每次添加域名都要设置bind9,还要重启,非常麻烦,那么有没有简单的办法呢?有,就是使用泛域名设置。废话不多说,请看如下配置:$ cat /etc/bind/zones/baoguoxiao.pro.db ; BIND data file for baoguoxiao.pro;$TTL 14400@ IN SOA ns1.baoguoxiao.pro. host.baoguoxiao.pro. (201006601 ; Serial7200 ; Refresh120 ; Retry2419200 ; Expire604800) ; Default TTL;baoguoxiao.pro. IN NS ns1.baoguoxiao.pro. ;baoguoxiao.pro. IN A 192.168.1.231 ns1 IN A 192.168.1.231www IN A 192.168.1.231这个是我们之前上一篇文章对其的设置。那么如果要设置泛域名,只需要把最后一行的www更改为就可以了。那么切换后的配置如下:$ cat /etc/bind/zones/baoguoxiao.pro.db ; BIND data file for baoguoxiao.pro;$TTL 14400@ IN SOA ns1.baoguoxiao.pro. host.baoguoxiao.pro. (201006601 ; Serial7200 ; Refresh120 ; Retry2419200 ; Expire604800) ; Default TTL;baoguoxiao.pro. IN NS ns1.baoguoxiao.pro. ;baoguoxiao.pro. IN A 192.168.1.231 ns1 IN A 192.168.1.231 IN A 192.168.1.231最后重启一下,那么泛域名设置就成功了。不早了,要去睡觉了。晚安。 ...

December 17, 2018 · 2 min · jiezi