Linux-查看系统配置常用命令

在工作中我们经常会用linux系统作为服务器来部署我们的项目或者执行我们的程序任务,但是一般项目或者任务在执行之前就所在的运行环境有一定的硬性要求,这个时候就需要我们知道自己手里的服务器具体的底层参数是什么?服务器是什么版本?多少个cpu?多少的内存等等各种关键指标,以供我们对自己的程序或者项目的发布部署做出前期的预研和环境判断。

1、通过命令查看系统参数

# 列表中是常用到的可以查看系统相关参数的命令
# uname -a # 查看内核/操作系统/CPU信息
# head -n 1 /etc/issue # 查看操作系统版本
# cat /proc/cpuinfo # 查看CPU信息
# hostname # 查看计算机名
# lspci -tv # 列出所有PCI设备
# lsusb -tv # 列出所有USB设备
# lsmod # 列出加载的内核模块
# env # 查看环境变量 资源
# free -m # 查看内存使用量和交换区使用量
# df -h # 查看各分区使用情况
# du -sh # 查看指定目录的大小
# grep MemTotal /proc/meminfo # 查看内存总量
# grep MemFree /proc/meminfo # 查看空闲内存量
# uptime # 查看系统运行时间、用户数、负载
# cat /proc/loadavg # 查看系统负载 磁盘和分区
# mount | column -t # 查看挂接的分区状态
# fdisk -l # 查看所有分区
# swapon -s # 查看所有交换分区
# hdparm -i /dev/hda # 查看磁盘参数(仅适用于IDE设备)
# dmesg | grep IDE # 查看启动时IDE设备检测状况 网络
# ifconfig # 查看所有网络接口的属性
# iptables -L # 查看防火墙设置
# route -n # 查看路由表
# netstat -lntp # 查看所有监听端口
# netstat -antp # 查看所有已经建立的连接
# netstat -s # 查看网络统计信息 进程
# ps -ef # 查看所有进程
# top # 实时显示进程状态 用户
# w # 查看活动用户
# id # 查看指定用户信息
# last # 查看用户登录日志
# cut -d: -f1 /etc/passwd # 查看系统所有用户
# cut -d: -f1 /etc/group # 查看系统所有组
# crontab -l # 查看当前用户的计划任务 服务
# chkconfig –list # 列出所有系统服务
# chkconfig –list | grep on # 列出所有启动的系统服务 程序
# rpm -qa # 查看所有安装的软件包
各种基本系统参数查看命令

2、根据系统文件查看系统参数

proc/cpuinfo文件分析: 在Linux系统中,提供了proc文件系统显示系统的软硬件信息。如果想了解系统中CPU的提供商和相关配置信息,则可以通过/proc/cpuinfo文件得到。本文章针对该文件进行简单的总结。

基于不同指令集(ISA)的CPU产生的/proc/cpuinfo文件不一样
基于X86指令集CPU的/proc/cpuinfo文件包含如下内容:
processor  : 0
vendor_id  :GenuineIntel
cpu family  :6
model    :26
model name :Intel(R) Xeon(R) CPU           E5520  @ 2.27GHz
stepping    :5
cpu MHz    :1600.000
cache size  : 8192 KB
physical id  :0
siblings    :8
core id     : 0
cpu cores   :4
apicid         :0
fpu       :yes
fpu_exception :yes
cpuid level   : 11
wp      :yes
flags      : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx rdtscp lm constant_tsc ida nonstop_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr popcnt lahf_lm
bogomips   :4522.12
clflush size  :64
cache_alignment  : 64
address sizes    : 40 bits physical, 48 bits virtual
power management :
以上输出项的含义如下:
processor :系统中逻辑处理核的编号。对于单核处理器,则课认为是其CPU编号,对于多核处理器则可以是物理核、或者使用超线程技术虚拟的逻辑核
vendor_id :CPU制造商      
cpu family :CPU产品系列代号
model   :CPU属于其系列中的哪一代的代号
model name:CPU属于的名字及其编号、标称主频
stepping   :CPU属于制作更新版本
cpu MHz   :CPU的实际使用主频
cache size   :CPU二级缓存大小
physical id   :单个CPU的标号
siblings       :单个CPU逻辑物理核数
core id        :当前物理核在其所处CPU中的编号,这个编号不一定连续
cpu cores    :该逻辑核所处CPU的物理核数
apicid          :用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
fpu             :是否具有浮点运算单元(Floating Point Unit)
fpu_exception  :是否支持浮点计算异常
cpuid level   :执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
wp             :表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
flags          :当前CPU支持的功能
bogomips   :在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
clflush size  :每次刷新缓存的大小单位
cache_alignment :缓存地址对齐单位
address sizes     :可访问地址空间位数
power management :对能源管理的支持,有以下几个可选支持功能:
  ts:  temperature sensor
  fid:   frequency id control
  vid:  voltage id control
  ttp:  thermal trip
  tm:
  stc:
  100mhzsteps:
  hwpstate:
  
CPU信息中flags各项含义:
fpu: Onboard (x87) Floating Point Unit
vme: Virtual Mode Extension
de: Debugging Extensions
pse: Page Size Extensions
tsc: Time Stamp Counter: support for RDTSC and WRTSC instructions
msr: Model-Specific Registers
pae: Physical Address Extensions: ability to access 64GB of memory; only 4GB can be accessed at a time though
mce: Machine Check Architecture
cx8: CMPXCHG8 instruction
apic: Onboard Advanced Programmable Interrupt Controller
sep: Sysenter/Sysexit Instructions; SYSENTER is used for jumps to kernel memory during system calls, and SYSEXIT is used for jumps: back to the user code
mtrr: Memory Type Range Registers
pge: Page Global Enable
mca: Machine Check Architecture
cmov: CMOV instruction
pat: Page Attribute Table
pse36: 36-bit Page Size Extensions: allows to map 4 MB pages into the first 64GB RAM, used with PSE.
pn: Processor Serial-Number; only available on Pentium 3
clflush: CLFLUSH instruction
dtes: Debug Trace Store
acpi: ACPI via MSR
mmx: MultiMedia Extension
fxsr: FXSAVE and FXSTOR instructions
sse: Streaming SIMD Extensions. Single instruction multiple data. Lets you do a bunch of the same operation on different pieces of input: in a single clock tick.
sse2: Streaming SIMD Extensions-2. More of the same.
selfsnoop: CPU self snoop
acc: Automatic Clock Control
IA64: IA-64 processor Itanium.
ht: HyperThreading. Introduces an imaginary second processor that doesn’t do much but lets you run threads in the same process a  bit quicker.
nx: No Execute bit. Prevents arbitrary code running via buffer overflows.
pni: Prescott New Instructions aka. SSE3
vmx: Intel Vanderpool hardware virtualization technology
svm: AMD “Pacifica” hardware virtualization technology
lm: “Long Mode,” which means the chip supports the AMD64 instruction set
tm: “Thermal Monitor” Thermal throttling with IDLE instructions. Usually hardware controlled in response to CPU temperature.
tm2: “Thermal Monitor 2″ Decrease speed by reducing multipler and vcore.
est: “Enhanced SpeedStep”
根据以上内容,我们则可以很方便的知道当前系统关于CPU、CPU的核数、CPU是否启用超线程等信息。
查询系统具有多少个逻辑核:cat /proc/cpuinfo | grep “processor” | wc -l
查询系统CPU的物理核数:cat /proc/cpuinfo | grep “cpu cores” | uniq
查询系统CPU是否启用超线程:cat /proc/cpuinfo | grep -e “cpu cores”  -e “siblings” | sort | uniq
  输出举例:
    cpu cores    : 6
    siblings     : 6
  如果cpu cores数量和siblings数量一致,则没有启用超线程,否则超线程被启用。
查询系统CPU的个数:cat /proc/cpuinfo | grep “physical id” | sort | uniq | wc -l
查询系统CPU是否支持某项功能,则根以上类似,输出结果进行sort, uniq和grep就可以得到结果。
proc/cpuinfo文件分析

3、小试牛刀

总核数 = 物理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

# 查看CPU信息(型号)
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
# 查看内 存信息
cat /proc/meminfo

机器学习-拉普拉斯平滑(Laplacian smoothing)

零概率和拉普拉斯修正

拉普拉斯平滑(Laplacian smoothing) 是为了解决零概率的问题。拉普拉斯是一个人名,他是法国数学家,并且最早提出用 加1 的方法来估计没有出现过的现象的概率。

零概率问题:在计算事件的概率时,如果某个事件在观察样本库(训练集)中没有出现过,会导致该事件的概率结果是0。这是不合理的,不能因为一个事件没有观察到,就被认为该事件一定不可能发生(即该事件的概率为0)。至于可能出现零概率问题的情况在贝叶斯定理实现是容易出现。

理论假设:假定训练样本很大时,每个分量x的计数加1造成的估计概率变化可以忽略不计,但可以方便有效的避免零概率问题。

举一个例子?来说明一下,如下图,有很多的“0”值,如何把零值影响规避掉呢?

零概率问题

previous : P(wi | wi-1) = c(wi-1, wi) / c(wi)
using smoothing: P(wi | wi-1) = ( c(wi-1, wi) + 1 ) / (c(wi-1) + V)
Then we can ensure that the p will not be zero. Now we can estimate this mothed.
We can use the Reconsitituted formula: c(wi-1, wi) = P(wi | wi-1) * c(wi-1) = ( c(wi-1, wi) + 1 ) / (c(wi-1) + V) * c(wi-1).

总结:分子加一,分母加V,V代表类别数目。
拉普拉斯修正后的数据

再进一步总结就如下:

总结拉普拉斯

场景举栗子:

假设在文本分类中,有3个类:C1、C2、C3。
在指定的训练样本中,某个词语K1,在各个类中观测计数分别为0,990,10。
则对应K1的概率为0,0.99,0.01。

显然C1类中概率为0,不符合实际。

于是对这三个量使用拉普拉斯平滑的计算方法如下:
  1/1003 = 0.001,991/1003=0.988,11/1003=0.011
  
在实际的使用中也经常使用加 λ(0≤λ≤1)来代替简单加1。如果对N个计数都加上λ,这时分母也要记得加上N*λ

朴素贝叶斯分类器(Naive Bayesian Classifier)浅谈

In probability theory and statisticsBayes’ theorem (alternatively Bayes’ law or Bayes’ rule; recently Bayes–Price theorem[1]:44, 45, 46 and 67), named after the Reverend Thomas Bayes, describes the probability of an event, based on prior knowledge of conditions that might be related to the event.[2] For example, if the risk of developing health problems is known to increase with age, Bayes’ theorem allows the risk to an individual of a known age to be assessed more accurately (by conditioning it on their age) than simply assuming that the individual is typical of the population as a whole.
One of the many applications of Bayes’ theorem is Bayesian inference, a particular approach to statistical inference. When applied, the probabilities involved in the theorem may have different probability interpretations. With Bayesian probability interpretation, the theorem expresses how a degree of belief, expressed as a probability, should rationally change to account for the availability of related evidence. Bayesian inference is fundamental to Bayesian statistics.

摘自维基百科

上文的翻译请各位童鞋自行解决,简单总一下贝叶斯定律是一种计算概率的公式,这个概率的计算考虑了与随机事件相关的因素;一句话就是它所阐述了后验概率的获得方法

朴素贝叶斯模型发源于古典数学理论,有着坚实的数学基础,以及稳定的分类效率;对大数量训练和查询时具有较高的速度,即使使用超大规模的训练集,针对每个项目通常也只会有相对较少的特征数,并且对项目的训练和分类也仅仅是特征概率的数学运算而已;对小规模的数据表现很好,能个处理多分类任务,适合增量式训练(即可以实时的对新增的样本进行训练);对缺失数据不太敏感,算法也比较简单,常用于文本分类;朴素贝叶斯对结果解释容易理解。

闪亮的贝叶斯定理

预备知识点一:

指数定律
对数特性
贝叶斯定理的数学公式

c表示的是随机事件发生的一种情况。x表示的就是证据(evidence)/状况(condition),泛指与随机事件相关的因素。

  • P(c|x):在x的条件下,随机事件出现c情况的概率。(后验概率)
  • P( c ):(不考虑相关因素)随机事件出现c情况的概率。(先验概率)
  • P(x|c):在已知事件出现c情况的条件下,条件x出现的概率。(后验概率)
  • P(x):x出现的概率。(先验概率)

一般情况下,我们在实际的问题当中,我们想获得的核心结果其实也就是P(c|x),举个现实的栗子?场景来对应P(c|x)的话就可以是这样的:

X 代表一个话,如“我喜欢这部手机”,而 C 表示的是这句话的情感,如“积极”,”消极”–> 那么P(c|x) 表示的就是 “我喜欢这部手机” 是“积极/消极” 的概率有多大。

而从计算上来说,我们需要同时知道P( c ),P(x|c)和P(x)才能算出目标值P(c|x)。“而P(x)对于是c无关的,而且作为共同的分母,在我们计算c的各种取值的可能性时并不会对各结果的相对大小产生影响,因此可以忽略”。(这段话是什么意思呢?用下边的例子说明)

比如c可取值c 1 , c 2 , c 3,并假设已知

p(c1)=o, p(c2)=p, p(c3)=q,P(x|c1)=a, P(x|c2)=b, P(x|c3)=c, p(x)=m

那么最后计算p(c|x)时,分别会得到结果

条件分布

由于p(c_1|x)+p(c_2|x)+p(c_3|x)的和一定为1,固我们可以得到o a + p b + q c = m oa+pb+qc=moa+pb+qc=m,而即使m的值预先不知道也没关系,因为oa,pb,qc的值都是可以计算出来的,m自然也就得到了。所以略掉了P(x)后,最后难点也就落在了计算P(x|c)与P( c )上,而这两个概率分布是必须要通过我们手上有的数据集来进行估计的。

p(c)的获得其实也较为简单:假设我们有了一个数据集D,计算D中c的各个情况出现的频率即可。比如计算P(c1),直接用c1情况出现次数在所有情况中所占的比例值即可–>例如“喜欢”这个词在”积极”情感词的情况下出现了5词,而积极词总量是10000, 那么P(c1)=5/10000(这里用到了大数定律:当训练集包含充足的独立同分布样本时,P(c)可通过各类样本出现的频率来进行估计。)

但是,获得p(x|c)就略显困难,因为x往往包含多个相关因素(是一个多种因素构成的向量),即它可能有多个需要考虑的属性值:x=(x1,x2,x3,…,xn);任一xi都代表了所有相关因素中的其中一个。当x是一个向量时,我们若要计算P(x|c),实际上就是要计算P ( x 1 , x 2 , x 3 , . . . , x n ∣ c )这个理论上也是可以利用我们的数据集D来进行估计的,但是现实情况是,n的值往往非常大(属性非常多),而我们的数据集往往不能保证我们的样本包含了属性值的所有可能组合(假设每个属性都是二值属性,那么就有2n种属性组合)。那么很多p(x|c)我们估计得到的值就是0。然而这些样本很可能仅仅是我们的数据集中没包含到,即“未被观测到”,但不代表它们现实中“出现概率为0”。于是这就给我们计算出真实合理的目标p(c|x)值造成了障碍。

这个时候朴素贝叶斯的“朴素”就要来发挥作用了,我们为了能够获得合理的p(x|c)的值,采用了“很不科学”的属性条件独立性假设

“朴素”贝叶斯

由于朴素贝叶斯分类器在这种naive的假设下仍能在实际问题中取得比较好的效果,因此这个假设的不合理性在某些情况下也就可以不用特别计较了。

贝叶斯分类准则
贝叶斯例子讲解
先验概率
离散属性贝叶斯计算
贝叶斯例子结果

当然以上都是最简单的入门讲解,朴素贝叶斯也有很多的变种,有兴趣的同学可以去自行搜索相关的资料,笔者也会在后期文章中慢慢补充

  • Tree augmented Bayesian Classifier(TAN)
  • Bayesian Network augmented Bayesian Classifier(BAN)
  • Semi-Naive Bayesian Classifiers(SNBC)
  • Multidimensional Bayesian Network Classifiers(MBC)
  • Bayesian chain classifiers(BCC)