linux shell commands

#实用性linux命令


##shell cmd

###1. top

###2. ps


###1. top
topCmd

  1. top - 17:26:23 up 19 days, 3:47 1 user, load average: 0.09, 0.25, 0.24

    • 17:26:23, 当前时间
    • up 19 days, 3:47,系统运行时间,19天,3小时47分钟
    • 1 user, 当前登录用户数
    • load average: 0.09,0.25,0.24,系统负载,任务队列的平均长度。3个值分别为,1分钟,5分钟,15分钟前到现在的平均值.
  2. Tasks: 82 total, 1 running, 81 sleeping, 0 stopped, 0 zombie

    • Tasks: 进程相关数据
    • 82 total 进程总数
    • 1 running, 正在运行的进程数
    • 81 sleeping, 睡眠的进程数
    • 0 stopped, 停止的进程数
    • 0 zombie, 僵尸进程数
  3. Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0..0%hi, 0.0%si, 0.0%stopped

    • Cpu(s): cpu相关数据,cpu占用百分比
    • 0.2%us, 用户空间占用cpu百分比
    • 0.2%sy, 内核空间占用cpu百分比
    • 0.0%ni, 用户进程空间内改变过优先级的进程占用cpu百分比
    • 99.7%id, 空闲cpu百分比
    • 0.0%wa, 等待输入输出的cpu时间百分比
    • 0.0%hi, 硬件中断占用cpu百分比
    • 0.0%si, 软件中断占用cpu百分比
    • 0.0%st, 盗取时间(超级监视器服务其他cpu时,虚拟cpu等待的时间)
  4. Mem: 3921112k total, 3670576k userd, 250536k free, 142524k buffers

    • Mem: 物理内存使用量
    • 3921112k total : 物理内存总量
    • 3670576k used: 使用量
    • 250536k free: 空闲内存总量
    • 142524k buffers: 用作内核缓存的内存量
  5. Swap: ok total, ok used, ok free, 1401036k cached

    • Swap: 交换区
    • 0k total: 使用的交换区总量
    • 0k used: 空闲的交换区总量
    • 1401036k cached: 缓冲的交换区总量。 内存中的内容被换出到交换区,而后又被换入到内存,
      但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。
      相应的内存再次被换出时可不必再对交换区写入。
  6. 其他

    • PID :进程id
    • PPID :父进程id
    • RUSER :real user name
    • UID: 进程所有者的用户id
    • USER: 进程所有者的用户名
    • GROUP: 进程所有者的组名
    • TTY: 启动进程的终端名。
    • PR: 优先级
    • NI: nice值,负值表示表示高优先级。
    • P: 最后使用的CPU,仅在多cpu环境下有意义
    • %CPU: 上次更新到现在的cup时间占用百分比
    • TIME: 进程使用的CPU时间总计,单位秒
    • TIME+: 进程使用的cpu时间总计,单位1/100秒
    • %MEM: 进程使用的物理内存百分比
    • VIRT: 进程使用的虚拟内存总量,单位kb.VIRT=Swap+RES
    • SWAP: 进程实用的虚拟内存中,被换出的大小,单位kb
    • RES: 进程使用的,为被换出的物理内存大小,单位kb,RES=CODE+DATA
    • CODE: 可执行代码占用的内存大小,单位kb
    • DATA: 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
    • SHR:共享内存大小,单位kb
    • nFLT: 页面错误次数
    • nDRT: 最后一次写入到现在,被修改过的页面数
    • 进程状态:
      S=睡眠,D=不可中断的睡眠状态,R=运行,T=跟踪/停止,Z=僵尸进程
    • COMMAND: 命令名
    • WCHAN: 若该进程在睡眠,则显示睡眠中的系统函数名
    • Flags: 任务标志.

2. ps

  • ps -aux | grep redis | grep -v grep
    显示进程名称包含redis的进程,显示进程名称不包含grep的进程。

Software Construction

#Software Construction



##软件开发平面图

####构建活动中的具体任务

  • 验证有关的基础工作已经完成.因此构建活动才得以顺利的进行下去。
    如,需求分析
  • 确定如何测试所写的代码
  • 编码实现
  • 代码的单元测试,代码的集成测试,已经代码评审
  • 代码格式化合注释
  • 调整代码,让他更快,更省资源
    软甲开发平面图

##软件构建活动与非构建活动

  1. ###非构建活动
    ####1.1 管理
    ####1.2 需求分析
    ####1.3 用户界面设计
    ####1.4 系统测试
    ####1.5 维护

  2. ###构建活动
    ####2.1 详细设计
    ####2.2 编码实现
    ####2.3 调试
    ####2.4 集成
    ####2.5 开发者测试


##你对如何进行构建的理解程度,决定了你这名程序员的优秀程度。

  1. 明确需求分析,关键点,在未开始构建之前,就已经知道构建之后是什么样子了(包括如何使用,如何扩展等等).

  2. 构建之中,系统核心功能为主干,需要先明确以及验证是否达到需求目标。而后完善功能细节。

    • 存在于世界上的任何逻辑,都依托于某种最基本的东西。
    • 比如,盖房子需要先打地基,研发汽车需要合适的发动机,等等。软件模块间的数据流动,需要先明确接口。
    • 一个软件模块,必定基于某种技术为主干。而后在此主干上细化和实现功能分支。及需要开发一个最小原形来验证,设计的合理性以及可行性。
    • 基于以上验证,进行功能的开发,so easy.
    • 随着开发,如果感觉到,实现越来越复杂,以及不确定性。此刻需要考虑到重构。软甲结构的调整。
  3. 构建中的哲学,无论什么模块或系统,在编码和调试过程中,需要的是

    • 随着时间的推移,随着整个模块/系统的完成度越来越高,程序员会感到各种功能实现越发容易。而非越来越难.
      如果越来简单,开发越容易,那么至少软件架构合理,易于维护。
      如果越到越难,开发越艰难,那么我么是时候重构代码.重新设计一下模块结构.

##软件中的隐喻

  1. ####你对隐喻有多理解,也决定了你对软开发有多理解

  2. ####常见隐喻

    1. Software Penmanship: Writing Code 软件中的书法:写作代码
    2. Software Farming: Growing a System 软件的耕作法:培植系统
    3. Software Oyster Farming: System Accretion 软件的牡蛎养殖观点: 系统生长

      • 你需要学会如何一次为软件系统增加一个小部分
        增量的(incremental),迭代的(iterative),自适应的(adaptive),演进的(evolutionary)
      • 在进行增量式开发时,我们先做出软件系统的一个尽可能简单的,能够运行的版本,它不必接受真实
        的输入,也无须对数据进行真正的处理,更不用产生真实的输,它仅仅需要构建一个足够强壮的骨架
        支撑起未来开发的真实系统。对于你标志出来的每一个真实功能,可能仅仅需要调用虚假类(dummy classes).
      • 这个最基本的起点,就像牡蛎开始孕育珍珠的那颗细小沙粒。
        在骨架形成之后,你要一点点在其上附着肌肉和皮肤。将骨架中虚假的类,一点点替换。完成整个构建。
        你一次次增加一小段代码,直到得到一个完全可以工作的系统.
    4. Software Construction: Building Software 软件构建:建造软件

      • 更复杂的结构,需要更加仔细的规划
        在2.3的基础上,增加更详尽的计划。体检计划,运筹帷幄,然后在行动
      • 精心的计划,并非意味着事无巨细的计划或者过度计划,你可以把房屋机构性的支撑(structural support)
        规划清楚,而在日后再决定使用木地板还是地毯。
    5. Applying Software Techniques: The Intellectual Toolbox 应用软件技术:智慧工具箱

      • 技术并不是规矩,它只是分析工具。
    6. Combining Metaphors 组合各个隐喻

      • 隐喻是一种启发式方法而不是算法,因此他们彼此并不排斥。
      • 使用隐喻有是件说不清楚的事情,你需要适当的引申它的含义,才能从其蕴含的深刻启发中受益。
    7. KeyPoints

      • 隐喻是启示不是算法,因此他们往往有一点随意。
      • 隐喻把软件开发过程和你熟悉的活动联系在一起,帮助你更好的理解。
      • 有些隐喻别其他一些隐喻更加贴切。
      • 通过把软件的构建过程比喻成房屋的建设过程,我们可以发现,仔细的准备是必要的,而大型项目和
        小型项目之间也是有差别的。
      • 通过把软件开发中的实践比作是智慧工具箱中的工具,我们有发现,每位程序员都有许多
        工具,因地制宜的选择正确工具,但并不存在于一个能适应所有工作的工具,因地制宜的选择正确工具,
        是成为能有效变成的程序员的关键。
      • 不同隐喻彼此并不排斥,应当使用对你最有益处的某种隐喻组合。
    8. Software is like a War.逐步推进,知己知彼,关键节点打通。
      然而,战争关键节点往往是地理位置,它是已知的。软件开发的关键节点需要经验和反复验证。



引用书籍:

###1. CODE COMPLETE 代码大全

Python3.x和Python2.x差别

区别

  1. print
    3.x: print(info) 必须带()
    2.x: print info 可要可不要()

  2. 类别名
    3.x:

    def __str__(self):
        pass
    

    2.x:

    def __unicode__(self):
        pass
    
  3. 字符集
    3.x: 默认unicode, py文件格式为utf-8格式即可
    2.x: ansic默认,中文需要 u’中文’ 形式来实现。并且在py文件中显示声明 utf-8

django


##使用django开发游戏web管理后台
为什么需要这个web后台:运行时修改游戏服务器内容。比如活动开启,黑名单。。。
在修改服务器数据时,做一些输入的限制性操作。即使你在地铁上也能够通过手机
随时了解服务器的运行状况。
使用方式:web后台修改mysql数据后,通知GameServer重新载入mysql配置文件。
web后台在GameServer运行期间,增加,删除,修改GameServer中的数据。



  • 环境搭建。
    apache2.4
    Django1.8
    python3.3.3
    mod_wsgi.so模块,
    mysql
  • Django admin与GameServer服务器交互,http协议实现交互
  • Django 与mysql交互,Django自带admin管理(增删改)
  • 使用Django的template进行交互UI展示(特定交互UI实现)
  • 部署相关

###完成后看上去像是这样子

  1. webUI后台,login,logout,config,userinfo,restore(从mysql回滚数据到GameServer)
    是webUI和GameServer交互的入口,根据需求任意增加

    图片

  2. django的admin后台,用来操作mysql数据库

    图片
    图片


##Django和GameServer之间的交互

  • 使用http协议,与GameServer之间进行数据交互。
  • python的相关教程。Python3.x与python2.x差异,在使用过程中可以体会得到
    python教程

##Django和MySql之间的交互


##代码路径

  1. scut框架
    https://github.com/guccang/Scut
    从scutgame官方fork过来的代码,用于更新scutgame框架错误
  2. 服务器逻辑代码服务器逻辑代码
    https://github.com/guccang/scutlogic
    服务器逻辑代码,写的action逻辑
  3. webUI
    https://github.com/guccang/django-GM-tools.git

##环境搭建

  1. apache/django/python版本选择问题

    • apache部署的时候需要用到,生产环境的mod_wsgi.so
      因此需要根据mod_wsgi.so的支持来选择apache和python的版本。

    • apache2.4 下载的地址:官方网站只提供了源码下载,不提供二进制安装文件。
      以下是apache官方推荐的下载地址之一,也是wsgi官方链接推荐的下载地址。
      http://www.apachelounge.com/download/
      copy xxxx.whl 到 apache2.4 modual目录下
      配置apache2.4各种目录

    • apache2.4对应的运行环境下载的地址:使用vc2015编译的apache2.4,需要安装对应的运行时vs环境
      http://www.microsoft.com/en-us/download/details.aspx?id=48145

    • apache2.4上述路径下载玩apache后。是一个包含所有apache组建的文件夹。然后需要安装apache服务
      到windows中区。
      进入apache bin目录。httpd -k install

    • mod_wsgi官方网址:http://www.modwsgi.org/
      找到mod_wsgi.so的windows下载的地址现在(2015/8/13)是:
      http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
      找得到如下whl文件下载地址:
      mod_wsgi-4.4.13+ap24vc10-cp33-none-win_amd64.whl
      mod_wsgi-4.4.13+ap24vc10-cp33-none-win32.whl
      ap24=apache2.4
      cp33=python3.3.x
      win_amd64=windows os 64
      win32=windows os 32

    • 根据自己的环境找到对应的whl文件。
      目前win64的只找到了python3的版本,没有python2.7。
      因此python版本选择为3.3.32
      apache选择apache2.4
      pc是windows10,64位,选则win_amd64.whl
      最后选择结果:mod_wsgi-4.4.13+ap24vc10-cp33-none-win_amd64.whl

    • whl文件。
      使用pip 安装whl文件
      pip install whl完整路径
      会将mod_wsgi.so文件下载下来。
      mod_wsgi.so下载的地址:
      http://www.modwsgi.org/
      http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi
      pip install xxxx.whl

  2. python下载的地址:

  3. django 安装
    pip install django

  4. mysqldb安装
    http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient

####至此搭建环境所需的所有东西都齐全了。apache2.4 python3.3.3


##部署问题

  1. apache + wsgi + django
    apache配置wsgi相关
    apache配置django静态文件路径
    django配置静态文件搜集路径

    无法载入css,img,js相关静态文件问题: apache配置 config

    LoadModule wsgi_module modules/mod_wsgi.so
    WSGIScriptAlias / C:/Python33/src/mysite/mysite/wsgi.py
    WSGIPythonPath C:/Python33/src/mysite
    <Directory C:/Python33/src/mysite/mysite>
    <Files wsgi.py>
        Require all granted
        Require ip 127.0.0.1
    </Files>
    </Directory>
    

    这个目录是django 配置的静待资源根目录。 有这个后,再加上django配置,就可以顺利的找到css,img,js相关文件。

    Alias /static/ C:/Python33/src/mysite/mysite/static/
    <Directory C:/Python33/src/mysite/mysite/static/>
        Require all granted
    </Directory>
    
  2. setting配置
    django部署后,css、js、图片都无法显示。
    setting.py 设置:

    STATIC_URL = '/static/'
    STATIC_ROOT = 'c:/Python33/src/mysite/mysite/static/'
    

    其他不变即可。
    运行 python manage.py collectstatic
    将app的static文件夹下的所有资源放到STATIC_ROOT之下

  3. 数据库修改后同步
    数据表重建:数据库模型修改后同步给开发服务器。
    数据库model和view、template不同,修改后无法及时同步。
    python makemigrations
    python migrate

    数据表导出,将连接的数据库的所有表导出到models_all.py文件中
    python manage.py inspectdb > models_all.py

  4. 运行时网站反应速度慢
    使用apache自带的工具启动apache服务。

  5. BUG

    • 1264 - Out of range value adjusted for column ‘ID’ at row 1
      byte类型 mysql tinyint 有符号
      mysql默认有符号,应该改为无符号。
    • 将apache bin的目录弄错了。导致httpd.cfg 读取别的,修改无用

git log


1
git reflog
  • 作用:显示所有HEAD改变历史
  • HEAD改变条件有
  • git commit命令
  • 分支切换
  • git merge命令
  • …待补充

1
git log
  1. 作用: 查看提交历史

  2. 参数:

    • -p 按补丁格式显示每个更新之间的差异。
    • –stat 显示每次更新的文件修改统计信息。
    • –shortstat 只显示 –stat 中最后的行数修改添加移除统计。
    • –name-only 仅在提交信息后显示已修改的文件清单。
    • –name-status 显示新增、修改、删除的文件清单。
    • –abbrev-commit 仅显示 SHA-1 的前几个字符,而非所有的 40 个字符。
    • –relative-date 使用较短的相对时间显示(比如,“2 weeks ago”)。
    • –graph 显示 ASCII 图形表示的分支合并历史。
    • –pretty 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式)。
  3. 常用参数:

    • git log -p // -p表示显示,提交历史的差异部分。
    • git log -n // n为数字,表示显示n条git 提交数据。没有-p 不会显示提交历史。比较整洁。
    • git log –stat // –stat 仅仅显示,增改行数的统计。
    • git log –graph // 图形化显示分支提交数据
  4. 格式化参数:

    • git log –pretty=oneline // 表示log数据在一行显示,和整洁。
    • git log –pretty=format:”%h - %an, %ar : %s” // format参数,后面接占位符。
选项         说明
%H            提交对象(commit)的完整哈希字串
%h            提交对象的简短哈希字串
%T            树对象(tree)的完整哈希字串
%t            树对象的简短哈希字串
%P            父对象(parent)的完整哈希字串
%p            父对象的简短哈希字串
%an            作者(author)的名字
%ae            作者的电子邮件地址
%ad            作者修订日期(可以用 -date= 选项定制格式)
%ar            作者修订日期,按多久以前的方式显示
%cn            提交者(committer)的名字
%ce            提交者的电子邮件地址
%cd            提交日期
%cr            提交日期,按多久以前的方式显示
%s            提交说明

win8.1 update to win10,vs2013 bug



  1. windows8.1更新到windows10后
    vs2013bug无法创建项目,已有项目无法编译。提示如下错误。
    未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService...匹配的导出。
    
    图1
  2. AppData\Roaming\Microsoft\VisualStudio\12.0\ActivityLog.xml相关错误。
    图2

  3. 解决办法:删除ComponentModelCache文件夹内所有文件。

    Remove ComponentModelCache folder content.
    %AppData%\..\Local\Microsoft\VisualStudio\12.0\ComponentModelCache
    

vs 自定义注释/代码段



  1. 代码段管理:
    创建一个snippet文件,导入到vs中。键入自定义字符后,tab键两次,自动生成注释/代码段。
    snippet是讲一个key 与一段字符关联(可以使注释,可以是代码)
    如~~vs中输入tryf,两次tab后直接输出

    1
    2
    3
    4
    5
    6
    try 
    {
    }
    finally
    {
    }
  2. 自定义文件注释模板
    vs中输入guccangFC ,tab键2次,自动生成如下注释。

    1
    2
    3
    4
    5
    6
    7
    8
    /****************************************************************************
    File: AutoTest.cs
    Desc: Automated testing
    Date: 2015-7-27
    Author: guccang
    URL: http://guccang.github.io
    Email: guccang@126.com
    ****************************************************************************/
  3. 对应的snippet文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<?xml version="1.0" encoding="utf-8"?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">
<Header>
<Title>FileComment</Title>
<Shortcut>guccangFC</Shortcut>
<Description>FileComment 语句的代码段</Description>
<Author>guccang</Author>
<SnippetTypes>
<SnippetType>Expansion</SnippetType>
<SnippetType>SurroundsWith</SnippetType>
</SnippetTypes>
</Header>

<Snippet>
<Declarations>
<Literal>
<ID>Name</ID>
<ToolTip>文件名</ToolTip>
<Default>fileName</Default>
</Literal>

<Literal>
<ID>License</ID>
<ToolTip>授权</ToolTip>
<Default>MIT</Default>
</Literal>

<Literal>
<ID>Author</ID>
<ToolTip>作者</ToolTip>
<Default>guccang</Default>
</Literal>

<Literal>
<ID>Date</ID>
<ToolTip>日期</ToolTip>
<Default>2015-7-21 11:11:11</Default>
</Literal>

<Literal>
<ID>Desc</ID>
<ToolTip>描述</ToolTip>
<Default>添加文件描述</Default>
</Literal>

<Literal>
<ID>URL</ID>
<ToolTip>url</ToolTip>
<Default>http://guccang.github.io</Default>
</Literal>

<Literal>
<ID>Email</ID>
<ToolTip>Email</ToolTip>
<Default>guccang@126.com</Default>
</Literal>


</Declarations>

<Code Language="csharp">
<![CDATA[
/****************************************************************************
File: $Name$
Desc: $Desc$
Date: $Date$
Author: $Author$
URL: $URL$
Email: $Email$
****************************************************************************/
$selected$ $end$]]>
</Code>

</Snippet>
</CodeSnippet>
</CodeSnippets>
  1. 将上述文件保存为fileComment.snippet , snippet文件扩展名
    打开vs导入snippet文件。
    vs-工具-代码段管理
    图片

  2. 参考资料
    [官方]https://msdn.microsoft.com/zh-cn/library/ms165394(v=vs.120).aspx
    博客01
    博客02
    博客03

fork me on GitHub


  1. 点击进入github
    选择喜欢的fork me on GitHub,粘贴代码

    <a href="https://github.com/you"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/82b228a3648bf44fc1163ef44c62fcc60081495e/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png"></a>
    
  2. 修改代码href跳转url为你想跳转的页面。

    <a href="https://github.com/guccang"><img style="position: absolute; top: 0; left: 0; border: 0;" src="https://camo.githubusercontent.com/82b228a3648bf44fc1163ef44c62fcc60081495e/68747470733a2f2f73332e616d617a6f6e6177732e636f6d2f6769746875622f726962626f6e732f666f726b6d655f6c6566745f7265645f6161303030302e706e67" alt="Fork me on GitHub" data-canonical-src="https://s3.amazonaws.com/github/ribbons/forkme_left_red_aa0000.png"></a>
    
  3. 将代码粘贴到如下文件中

    themes\landscape\layout\index.ejs
    
Fork me on GitHub