日历

2019年十二月
« 11月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近评论

    linux企业应用

    Bash Shell的内置命令

    :—-扩展参数列表,执行重定向操作
    .—-读取并执行指定文件中的命令(在当前 shell 环境中)
    alias—-为指定命令定义一个别名
    bg—-将作业以后台模式运行
    bind—-将键盘序列绑定到一个 readline 函数或宏
    break—-退出 for、while、select 或 until 循环
    builtin—-执行指定的 shell 内建命令
    caller—-返回活动子函数调用的上下文
    cd—-将当前目录切换为指定的目录
    command—-执行指定的命令,无需进行通常的 shell 查找
    compgen—-为指定单词生成可能的补全匹配
    complete—-显示指定的单词是如何补全的
    compopt—-修改指定单词的补全选项
    continue—-继续执行 for、while、select 或 until 循环的下一次迭代
    declare—-声明一个变量或变量类型。
    dirs—-显示当前存储目录的列表
    disown—-从进程作业表中刪除指定的作业
    echo—-将指定字符串输出到 STDOUT
    enable—-启用或禁用指定的内建shell命令
    eval—-将指定的参数拼接成一个命令,然后执行该命令
    exec—-用指定命令替换 shell 进程
    exit—-强制 shell 以指定的退出状态码退出
    export—-设置子 shell 进程可用的变量
    fc—-从历史记录中选择命令列表
    fg—-将作业以前台模式运行
    getopts—-分析指定的位置参数
    hash—-查找并记住指定命令的全路径名
    help—-显示帮助文件
    history—-显示命令历史记录
    jobs—-列出活动作业
    kill—-向指定的进程 ID(PID) 发送一个系统信号
    let—-计算一个数学表达式中的每个参数
    local—-在函数中创建一个作用域受限的变量
    logout—-退出登录 shell
    mapfile—-从 STDIN 读取数据行,并将其加入索引数组
    popd—-从目录栈中删除记录
    printf—-使用格式化字符串显示文本
    pushd—-向目录栈添加一个目录
    pwd—-显示当前工作目录的路径名
    read—-从 STDIN 读取一行数据并将其赋给一个变量
    readarray—-从 STDIN 读取数据行并将其放入索引数组
    readonly—-从 STDIN 读取一行数据并将其赋给一个不可修改的变量
    return—-强制函数以某个值退出,这个值可以被调用脚本提取
    set—-设置并显示环境变量的值和 shell 属性
    shift—-将位置参数依次向下降一个位置
    shopt—-打开/关闭控制 shell 可选行为的变量值
    source—-读取并执行指定文件中的命令(在当前 shell 环境中)
    suspend—-暂停 Shell 的执行,直到收到一个 SIGCONT 信号
    test—-基于指定条件返回退出状态码 0 或 1
    times—-显示累计的用户和系统时间
    trap—-如果收到了指定的系统信号,执行指定的命令
    type—-显示指定的单词如果作为命令将会如何被解释
    typeset—-声明一个变量或变量类型。
    ulimit—-为系统用户设置指定的资源的上限
    umask—-为新建的文件和目录设置默认权限
    unalias—-刪除指定的别名
    unset—-刪除指定的环境变量或 shell 属性
    wait—-等待指定的进程完成,并返回退出状态码

    有Bash就有的命令,就是内置命令。相比外部命令,内建命令提供了更高的性能,但 Shell 中包含的内建命令越多,消耗的内存就会越大,而有些命令几乎永远也不会用到。

    linux企业应用

    Imports“自己写的函数/模块等DLL”中指定的命名空间或类型不包含任何公共成员,或者找不到该命名空间或类型

    很久不做软件开发了,这几天用visual statio 2017 ,windows2010环境,想写一个小程序,老是报错,弄的我很无奈,毕竟,将近10年没有软件开发了,无奈。
    以前写的一些函数,在新的环境下就是报错,排查了好久,今天终于搞明白了。
    找到自己写的DLL,查看my project,找到“应用程序”,目标框架是”.NET Framework4″,而自己写的程序对应的目标框架是“.NET Framework 4 Client Profile”,两者不一致,所以老是报错:Imports“自己写的函数/模块等DLL”中指定的命名空间或类型不包含任何公共成员,或者找不到该命名空间或类型。
    将自己写的程序对应的目标框架也修改为“.NET Framework 4”,问题就解决了。

    linux企业应用

    爬取网页视频,解析m3u8文件

    m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般存在服务器的内存中),通过m3u8解析出来路径,然后去请求。m3u8网址的获得可以参照网上的方法,这里先不说了。
    比如网址:
    HD%u9ad8%u6e05%24https%3A%2F%2Fyouku.com-l-youku.com%2F20190207%2F20335_d1f19bfb%2Findex.m3u8
    是经过加密的,规则:
    所有以 %xx 十六进制形式编码的字符都用 ASCII 字符集中等价的字符代替。
    以 %uxxxx 格式(Unicode 字符)编码的字符用十六进制编码 xxxx 的 Unicode 字符代替。
    比如上面链接的“HD%u9ad8%u6e05%24”代表“HD高清$”,不是链接的一部分,因此我们忽略即可。
    下面的代码是将上面提到的m3u8地址进行2次key的替换,代码是在windows10 + visualstadio2017环境下运行的。
    也可以参照这个网址:https://blog.csdn.net/qq_39797956/article/details/88076404

    继续阅读 爬取网页视频,解析m3u8文件(一)

    linux企业应用

    Linux 无法本地登录解决方法

    今天一个客户说新分的服务器无法登录了,后台一看测试了一下,确实是无法登录了。
    重启进入但用户模式,执行:history > history.txt
    查看history.txt,发现修改过/etc/pam.d/login文件,该文件下面新添加2行:
    session required /lib/security/pam_limits.so
    session required pam_limits.so
    在centos6.7中,pam_limits.so在/lib64/security/目录下,/lib/security目录下没有pam_limits.so这个文件了
    所以重启后,导致

    账号无法登录。将lib修改为lib64,即目录修改正确后,重启,用户可以登录了。

    linux企业应用

    在线工具--把C#代码、VB.NET代码 互转

    有不少朋友在网上找资料时经常会遇到想要VB.NET的代码,但却只有C#的代码。

    自己改又改不大来!

    本人不经意发现有一个在线工具,使用方便。

    支持:C#—> VB.NET

    VB.NET—>C#

    地址(C#—> VB.NET):

    http://www.developerfusion.co.uk/utilities/convertcsharptovb.aspx

    地址( VB.NET—>C#):

    http://www.developerfusion.co.uk/utilities/convertvbtocsharp.aspx

     

    测试了一下,上面这个一直转圈圈,还是下面这个好用:

    http://converter.telerik.com/

    linux企业应用

    linux版vcsa(vcenter)根目录使用率100%导致系统服务无法启动

    今天重启vcenter,结果发现系统服务无法启动。重启2次vcsa,都提示很多服务没有启动完成。而且提示空间不足。系统启动完成后,使用vsphere client登录,提示503 service unavailable,解决方法简单记录如下:
    1、 F2进入系统,设置可以shell登录系统
    2、 ALT+F2,进入shell界面,输入shell.set –enabled True,再输入shell,进入shell命令执行界面;
    3、 执行df –h命令看看到底哪个文件分区用完了。确定是“根”目录
    4、 cd /var/log/audit,执行命令ls –lh,查看目录下各文件的大小,audit.log竟然有4.8G,我的根分区才12G好嘛
    5、 清理audit.log文件,但是不删除该文件,使用如下命令:truncate -s 0 audit.log
    6、 重启vcenter的所有服务
    service-control –stop –all
    service-control –start –all
    7、vsphere client可以登录了。

    以上是ESXi6.0系统对应处理方法,其他的不知道适用不适用。

    linux企业应用

    Vmware平台迁移虚拟机到72%,卡死不动的处理

    ESXi6.0系统和对应平台迁移虚拟机,迁移到72%后,虚拟机就没有任何动静了。
    解决方法:到机房,按F2输入用户名和密码后,登录主机,选择Troubleshooting 选择Restart Management Agents回车,等大约5分钟,Management Agents重启完成。
    再次迁移虚拟机,迁移成功。
    迁移到72%后,虚拟机就没有任何动静了,实际上是Management Agents出问题了。将近假死,还没有假死。

    linux企业应用

    Linux 假死现象

    什么是假死现象
    所谓假死现象,是指 Linux 内核 Alive,但是其上的某个或所有操作的响应变得很慢的现象。

    具体比较常见的现象有如下几种:
    1、能 Ping 通访问的服务器。
    2、系统负载非常的高。
    3、SSH 不能登陆或者登陆比较慢。
    4、服务器上提供的服务都不能正常响应,比如:不能访问系统上部署的 Web 服务器所提供的页面。
    5、在系统上做任何其它操作都没有反应或者反应较慢。

    假死现象并不是经常出现
    Linux 作为一个多任务操作系统,要把系统忙死,忙到 SSH 都连不上去也不是那么容易的。尤其是现在的系统还有 FD 保护、进程数保护、最大内存保护之类的机制。
    你可以尝试 Fork 很多进程,系统会变得很慢,但是 SSH 通常还是能连上去的;你可以尝试分配很多内存,但是内存多到一定程度 Linux 的 OOM 机制的 Killer 进程就会杀掉你的进程,来保证其它服务能正常工作。

    假死现象是如何出现的
    有一个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的 Fork,并且在子进程里面 Sleep(100)。
    也就是说,当主进程不停 Fork 的时候,很快会把系统的物理内存用完。当物理内存不足时候,系统会开始使用 Swap。那么当 Swap 不足时会触发 OOM 机制的 Killer 进程来杀掉多余进程。
    当 OOM 机制的 Killer 进程杀掉了子进程,主进程会立刻 Fork 新的子进程,并再次导致内存用完并再次触发 OOM 机制的 Killer 进程杀掉子进程,于是就进入死循环。而且 OOM Killer 进程是系统底层优先级很高的内核线程,此时也参与到这个死循环中,长此以往系统资源就会被消耗殆尽。
    系统出现假死现象后,为何还能 Ping 通但又无法建立新的网络连接
    系统出现假死现象后,服务器还可以 Ping 通,但是无法建立新的网络连接。比如:SSH 无法连上去。这是由于 Ping 是在 Linux 系统底层 ( Kernel )处理的,并没有参与进程调度。而 SSHD 是要参与进程调度,但是优先级没 OOM 机制的 Killer 进程高。这样就会一直得不到系统调度,从而始终无法正确的提供服务来与 SSH 客户端建立新的连接。

    Linux 出现假死现象,我们应该怎么办?
    为什么要费那么大的力气把服务器搞死呢?我们知道假死是怎么产生的即可,这样可以针对假死的原因进行预防。 其实假死的情况很少发生,通常只有代码出现 Bug 很多的情况或者某个服务进程未正确配置的情况下才会出现。
    建议使用 nice 命令将 SSHD 的进程优先级调高,这样当系统内存紧张时,还能勉强登陆服务器进行调试,然后分析故障。

    linux企业应用

    禁止了 WordPress 5.0 的 Gutenberg 块编辑器,改为经典编辑器

    WordPress 5.0 的 Gutenberg 块编辑器太折腾人了,一点都不好用,不习惯,不喜欢。

    可以修改wp-includes下的function.php文件,在php函数内也就是<?php  下找个合适的位置加入以下代码:

    //禁止 WordPress5.0 使用 Gutenberg 块编辑器
    add_filter(‘use_block_editor_for_post’, ‘__return_false’);
    remove_action( ‘wp_enqueue_scripts’, ‘wp_common_block_scripts_and_styles’ );

    就可以了。

    linux企业应用

    Python写一个安卓APP一(搭建环境)

    安装kivy的大体步骤:
    1、python -m pip install –upgrade pip wheel setuptools
    2、Ensure you have the latest pip and wheel:
    python -m pip install –upgrade pip wheel setuptools
    python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew 这个文件太大,我用下面的方法进行安装的,这个命令也执行了,可以找到下载地址,然后根据这个地址,下载安装文件。下载kivy.deps.gstreamer,地址:https://files.pythonhosted.org/packages/aa/92/d8dc5a29864d44d4c28169b222f7371a77ee087bf918e0a6d1a3084d9deb/kivy.deps.gstreamer-0.1.13-cp37-cp37m-win_amd64.whl
    安装kivy.deps.gstreamer,在cmd命令行下:
    pip install kivy.deps.gstreamer-0.1.13-cp37-cp37m-win_amd64.whl
    3、For Python 3.5 only we additionally offer angle which can be used instead of glewand can be installed with:
    python -m pip install kivy.deps.angle
    4、Install kivy:安装kivy
    python -m pip install kivy
    (Optionally) Install the kivy examples:安装kivy examples
    python -m pip install kivy_examples

    在Geany下新建一个py文件,输入下面的内容:运行成功就可以了。

    #导入App,然后让TestApp这个类继承
    from kivy.app import App
    #导入一个Button,运维有这个button,当你点击的时候才会有所反应
    from kivy.uix.button importButton

    #定义类,名字必须是xxxApp
    class TestApp(App):
    #build一个Button
    def build(self):
    #返回一个Button,文字内容是“Hello,kivy”
    return Button(text=’Hello,kivy’)

    #运行,因为继承了App,所以才有的run这个方法
    TestApp().run()

    linux企业应用

    python写的一个大乐透蓝区杀号算法,能准就好了

    随便写了一个大乐透蓝区杀号的代码,不准。就当写代码的练习了。

    import urllib.request
    import csv
    import numpy as np
    import pandas as pd

    #将最新一期大乐透的数据下载下来,根据上一起大乐透蓝区的号,计算下一期蓝区可选的号。 #大乐透历史数据是txt格式的,先保存到txt文本中,然后再保存到csv文件中,如果能直接将下载的数据保存到csv文件就更好了。

    print(“downloading with requests”)

    #大乐透历史数据连接如下:

    url = ‘http://e.17500.cn/getData/dlt3.TXT’
    txtfile = urllib.request.urlopen(url)
    data = txtfile.read()
    filepath = ‘d:\dlt3.txt’
    with open(filepath,’wb’) as f:
    f.write(data)

    #将大乐透历史数据写入到csv中

    csvfile = ‘d:\dlt3.csv’
    data_txt = np.loadtxt(filepath,dtype=str,usecols=None)

    #DataFrame会给数据加上行号,

    data_txtDF = pd.DataFrame(data_txt,index=None, columns=None)
    data_txtDF.to_csv(csvfile,sep=’,’,columns=None,header=False)

    def lan_jisuan(row,mo,hongQuZuiDuo):
    #先将CSV文件中的字符数值转换为整型数值
    rowValue = []
    for i in row:
    rowValue.append(int(i))
    #蓝区的号码
    lan_qu = [1,2,3,4,5,6,7,8,9,10,11,12]
    #蓝区杀号:根据上期蓝区2个号计算
    #1、两个号的和+3,如果大于12,则取模10
    #2、两个号的差
    #3、两个号相乘,如果大于12,则取模10
    #4、根据红区5个号,最小值+1,如果大于12,则取模
    he = int(rowValue[5]) + rowValue[6] + 3
    if he > 12:
    he = he % mo
    if he == 0:
    he = mo
    if he in lan_qu:
    lan_qu.remove(he)

    if rowValue[5] > rowValue[6]:
        cha = rowValue[5] - rowValue[6]
    else:
        cha = rowValue[6] - rowValue[5]
    if cha in lan_qu:
        lan_qu.remove(cha)
    
    chengji = rowValue[6] * rowValue[5]
    if chengji > 12:
        chengji = chengji % mo
    if chengji == 0:
        chengji = mo
    if chengji in lan_qu:
        lan_qu.remove(chengji)
    
    zuixiaoshu = min(rowValue[0:5]) + 1
    if zuixiaoshu > 12:
        zuixiaoshu = zuixiaoshu % mo
    if zuixiaoshu == 0:
        zuixiaoshu = mo
    if zuixiaoshu in lan_qu:
        lan_qu.remove(zuixiaoshu)
    
    if hongQuZuiDuo in lan_qu:
        lan_qu.remove(hongQuZuiDuo)
    
    print(lan_qu)
    print('\n')

    with open(csvfile) as csvfile:
    mLines = csvfile.readlines()
    targetLine = mLines[-1]
    shangYiQi=targetLine.split(‘,’)

    hongqu = []
    for row in range(-10,0):
        targetLine = mLines[row]
        a=targetLine.split(',')[3:8]
        for value in a:
            hongqu.append(int(value))
    #print("五分区,最近十期出的多的去掉,出的最多的数是: ")
    hongQuZuiDuo = max(hongqu,key=hongqu.count)
    
    #设置模的值为10,这个mo的取值,根据个人经验来。
    mo = 10
    print("当模 = 10,蓝区可选号码为:")
    lan_jisuan(shangYiQi[3:10],mo,hongQuZuiDuo)
    linux企业应用

    VMware 6.0虚拟机迁移磁盘文件变成flat.vmdk的问题记录,待解决

    因业务需求,需要对存储A上的虚拟机迁移到存储B上,按照经验,白天业务繁忙期,迁移速度大约为2TB/小时,但是这台1TB的虚拟机竟然迁移了3个多小时,最后弹出错误提示:对象已删除或未完全创建。这个错误以前真没有见过。
    经查看存储A上依然有该虚拟机的目录,该目录下只有该虚拟机对应的vmdk文件:VM_name.vmdk,存储B上该虚拟机对应的目录下有vmdk文件,但是名字变成了:VM_name-flat.vmdk,且图标和虚拟机名.vmdk的图标也不一样。各后缀文件名参照下面。
    而且该虚拟机关机后VM_name-flat.vmdk就变成了VM_name.vmdk,再开机就变成了VM_name-flat.vmdk。此问题先观察,待解决。
    另外,还迁移了一台虚拟机,3T的置备延迟置零磁盘,迁移用时40分钟左右,从存储C迁移到存储D,最后弹出错误提示:对象已删除或未完全创建。经核实,存储C上没有该虚拟机对应的目录,存储D上对应的该虚拟机目录下,vmdk文件正常。记录一下。

    配置文件———-VM_name.vmx
    交换文件———-VM_name.vswp vmx_VM_name.vswp
    BIOS文件———-VM_name.nvram
    日志文件———-VM_name.log
    模板文件———-VM_name.vmtx
    裸设备映射文件—-VM_name-rdm.vmdk
    磁盘描述符文件—-VM_name.vmdk
    磁盘数据文件——VM_name-flat.vmdk
    挂起状态文件——VM_name.vmss
    快照数据文件——VM_name.vmsd
    快照状态文件——VM_name-Snapshot.vmsn
    快照磁盘文件——VM_name-###.delta.vmdk
    快照活动内存文件–VM_name-Snapshot#.vmdk


    linux企业应用

    Python报错:module 'pygal' has no attribute 'Worldmap'

    在《Python编程:从入门到实践》书中的一个项目用到pygal.Worldmap,但是报错:module ‘pygal’ has no attribute ‘Worldmap’,提示pygal已经没有Worldmap模块,解决方法如下:

    在windows命令行中运行下面语句(注意pip3/pip)
    pip install pygal_maps_world

    在代码文件中将:
    import pygal
    wm=pygal.Worldmap()
    修改为:
    import pygal
    wm = pygal.maps.world.World()
    就可以了

    linux企业应用

    Python报错:ImportError: No module named 'pygal.i18n'

    在《Python编程:从入门到实践》书中的一个项目用到pygal.i18n获取国别码,但是一直报错:ImportError: No module named ‘pygal.i18n’,提示pygal已经没有i18n模块,网上查了一下要改用pygal_maps_world.i18n,解决方法如下:

    在windows命令行中运行下面语句(注意pip3/pip)
    pip install pygal_maps_world

    在代码文件中将:
    from pygal.i18n import COUNTRIES
    修改为就可以了:
    from pygal_maps_world.i18n import COUNTRIES

    linux企业应用

    OraclRAC迁移中遇到的问题

    简单描述
    2台oracle做RAC需要共享9T的空间,因为oracle识别的硬盘不能大于2T,故,每个硬盘设置为1.9T。
    平台上每个lun大小为8T,所以共享的9T空间在2个lun上。
    oracleRAC1:系统盘500G在LUN 1上,5个1.9T的厚置备磁盘,在LUN 1上3块,在LUN 2上2块
    OracleRAC2:系统盘500G在LUN 2上,共享lun 1上的3块盘,和LUN 2上的2块盘,共享盘添加顺序和OracleRAC1上的顺序一致。
    问题:
    因存储电源故障,需要更新电源模块并升级微码,需要将上述OracleRAC迁移到另一套没有故障的存储上。
    操作步骤:
    1、关机,编辑OracleRAC2虚拟机,将共享磁盘从虚拟机中移除(千万不要选择从虚拟机中移除并从磁盘删除文件)。移除完成后,将虚拟机迁移到LUN 4上。
    2、迁移OracleRAC1虚拟机,迁移中,将LUN1上的3块磁盘选择LUN3,将LUN2上的2块磁盘选择LUN4,由于迁移磁盘较大,总共10T,用时5个小时左右。
    3、编辑OracleRAC2虚拟机,按照OracleRAC1中的共享磁盘顺序,依次添加上。
    4、因该过程用时较多,迁移完成已是晚上11点左右,所以将2台服务器启动,确认业务正常后下班。
    存在问题:
    第二天查看2台OracleRAC虚拟机的状态,发现OracleRAC1占用了3个LUN,LUN 1,LUN 3,LUN 4,状态不正常,OracleRAC2占用LUN 3和LUN 4的磁盘空间,属于正常现象。经核查,发现OracleRAC1的vmx文件和log文件没有迁移到LUN3上。
    解决方法:
    1、OracleRAC1关机,在client中,右键该虚拟机,选择“从清单中移除”
    2、浏览LUN1存储,找到OracleRAC1的文件夹,将关于虚拟机的vmx和几个log文件下载到本地磁盘上
    3、将下载到本地的vmx文件和log文件上传到LUN3存储上OracleRAC1的目录下,右键vmx,将该虚拟机添加到清单中
    4、启动OracleRAC1,业务正常,占用磁盘在LUN3和LUN4,一切恢复正常了。

    linux企业应用

    自动草稿

    linux企业应用

    ubuntu16.04修改网卡名称,配置静态IP

    ubuntu16.04也像Centos7一样不使用eth来命名了,如果还想像传统一样使用eth,需要修改配置文件了。
    步骤如下:

    1. 修改grub文件:
      $ sudo vim /etc/default/grub

      GRUB_CMDLINE_LINUX=””
      改为:
      GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0″
    2. 更新配置,重新生成启动文件:
      $ sudo grub-mkconfig -o /boot/grub/grub.cfg
    3. 修改静态ip
      $ sudo vim /etc/network/interfaces
      在末尾添加:
      auto eth0
      iface eth0 inet static
      address IP
      netmask NETMASK
      gateway GATEWAY
    4. 重启服务:
      $ /etc/init.d/networking restart 或者用下面的命令
      $ sudo systemctl restart networking.service
    linux企业应用

    TypeError: argument 1 must be 2-item sequence, not int

    书上代码有需要改进的地方
    screen=pygame.display.set_mode(1200,800)运行的时候回报错TypeError: argument 1 must be 2-item sequence, not int,改成下面的就好了:
    screen_width=800
    screen_height=600
    screen=pygame.display.set_mode((screen_width,screen_height),0,32)

    完整代码如下:
    import sys
    import pygame

    def run_game():
    pygame.init()
    screen_width=800
    screen_height=600
    screen=pygame.display.set_mode((screen_width,screen_height),0,32)
    pygame.display.set_caption(“Alien Invasion”)

    while True:
        for event in pygame.event.get():
            if event.type ==pygame.QUIT:
                sys.exit()
        pygame.display.flip()

    run_game()

    linux企业应用

    python3.7.2 + pygame1.9.4实现游戏《外星人入侵》

    下载的pygame库名中cp27代表python2.7,其它同理。
    我现在的python版本是3.7.2,所以按照道理,应该去下面的网址https://www.lfd.uci.edu/~gohlke/pythonlibs/
    Pygame, a library for writing games based on the SDL library.

    pygame-1.9.4-cp27-cp27m-win32.whl
    pygame-1.9.4-cp27-cp27m-win_amd64.whl
    pygame-1.9.4-cp35-cp35m-win32.whl
    pygame-1.9.4-cp35-cp35m-win_amd64.whl
    pygame-1.9.4-cp36-cp36m-win32.whl
    pygame-1.9.4-cp36-cp36m-win_amd64.whl
    pygame-1.9.4-cp37-cp37m-win32.whl
    pygame-1.9.4-cp37-cp37m-win_amd64.whl

    我的电脑是64位的,所以下载了最后一个个,同理,如果你们的电脑是32位的请下载对应的版本。
    https://bitbucket.org/pygame/pygame/downloads/ 这个网址里,我暂时没有下载到3.7.2对应的版本。
    下载后终于安装成功了:
    D:\TensorFlow\python_work>pip install pygame-1.9.4-cp37-cp37m-win_amd64.whl
    Processing d:\tensorflow\python_work\pygame-1.9.4-cp37-cp37m-win_amd64.whl
    Installing collected packages: pygame
    Successfully installed pygame-1.9.4
    You are using pip version 19.0.2, however version 19.0.3 is available.
    You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.

    linux企业应用

    文件权限导致ssh无法启动、启动后无法连接

    今天一个客户的linux连接不上了,启动的时候有一个错误一闪而过,没能看清,重启完成后,telnet IP 22端口没通。进入操作系统,telnet -tlunp | grep sshd,也没有sshd的影子,service sshd start,提示错误如下:
    Starting sshd: /var/empty/sshd must be owned by root and not group or world-writable.      [FAILED]
    根据上面的提示,这个是权限的问题
    可采取以下几步解决
    chown   -R   root.root    /var/empty/sshd
    chmod 744 /var/empty/sshd
    service sshd restart
    提示sshd重启成功,但是提示了很多信息,没有拍照,只记住了一点:ssh_host_rsa_key too open,而且使用putty无法登录系统。进入/etc/ssh目录,发现该目录下所有文件都可执行,感觉不对,找同样的一台linux,对照着,将所有文件权限修改,再用putty连接系统,连接成功。