linux 下的 MegaCli & dmidecode

MegaCli & dmidecode

相关命令及其解析: 查看机器型号    # dmidecode | grep "Product" 查看厂商    # dmidecode| grep  "Manufacturer" 查看序列号    # dmidecode | grep  "Serial Number" 查看CPU信息    # dmidecode | grep  "CPU" 查看CPU个数    # dmidecode | grep  "Socket Designation: CPU" |wc –l 查看出厂日期    # dmidecode | grep "Date" 查看充电状态    # MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep "Charger Status" 显示BBU状态信息    # MegaCli -AdpBbuCmd -GetBbuStatus –aALL 显示BBU容量信息    # MegaCli -AdpBbuCmd -GetBbuCapacityInfo –aALL 显示BBU设计参数    # MegaCli -AdpBbuCmd -GetBbuDesignInfo –aALL 显示当前BBU属性    # MegaCli -AdpBbuCmd -GetBbuProperties –aALL 查看充电进度百分比    # MegaCli -AdpBbuCmd -GetBbuStatus -aALL |grep "Relative State of Charge" 查询Raid阵列数    # MegaCli -cfgdsply -aALL |grep "Number of DISK GROUPS:" 显示Raid卡型号,Raid设置,Disk相关信息      # MegaCli -cfgdsply –aALL 显示所有物理信息    # MegaCli -PDList -aALL 显示所有逻辑磁盘组信息    # MegaCli -LDInfo -LALL –aAll 查看物理磁盘重建进度(重要)    # MegaCli -PDRbld -ShowProg -PhysDrv [1:5] -a0 查看适配器个数    #MegaCli –adpCount 查看适配器时间    #MegaCli -AdpGetTime –aALL 显示所有适配器信息    #MegaCli -AdpAllInfo –aAll 查看Cache 策略设置    # MegaCli -cfgdsply -aALL |grep Polic

linux 除了screen 让进程后台运行的方法

nohup/setsid/&

如果只是临时有一个命令需要长时间运行,什么方法能最简便的保证它在后台稳定运行呢?

hangup 名称的来由

在 Unix 的早期版本中,每个终端都会通过 modem 和系统通讯。当用户 logout 时,modem 就会挂断(hang up)电话。 同理,当 modem 断开连接时,就会给终端发送 hangup 信号来通知其关闭所有子进程。

解决方法:

我们知道,当用户注销(logout)或者网络断开时,终端会收到 HUP(hangup)信号从而关闭其所有子进程。因此,我们的解决办法就有两种途径:要么让进程忽略 HUP 信号,要么让进程运行在新的会话里从而成为不属于此终端的子进程。

1. nohup

nohup 无疑是我们首先想到的办法。顾名思义,nohup 的用途就是让提交的命令忽略 hangup 信号。让我们先来看一下 nohup 的帮助信息:

NOHUP(1)                        User Commands                        NOHUP(1)

NAME
       nohup - run a command immune to hangups, with output to a non-tty

SYNOPSIS
       nohup COMMAND [ARG]...
       nohup OPTION

DESCRIPTION
       Run COMMAND, ignoring hangup signals.

       --help display this help and exit

       --version
              output version information and exit

可见,nohup 的使用是十分方便的,只需在要处理的命令前加上 nohup 即可,标准输出和标准错误缺省会被重定向到 nohup.out 文件中。一般我们可在结尾加上"&"来将命令同时放入后台运行,也可用">_filename_ 2>&1"来更改缺省的重定向文件名。 nohup 示例

[root@pvcent107 ~]# nohup ping www.ibm.com &
[1] 3059
nohup: appending output to `nohup.out'
[root@pvcent107 ~]# ps -ef |grep 3059
root      3059   <strong>984</strong>  0 21:06 pts/3    00:00:00 ping www.ibm.com
root      3067   984  0 21:06 pts/3    00:00:00 grep 3059
[root@pvcent107 ~]#

2。setsid

nohup 无疑能通过忽略 HUP 信号来使我们的进程避免中途被中断,但如果我们换个角度思考,如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了。setsid 就能帮助我们做到这一点。让我们先来看一下 setsid 的帮助信息:

SETSID(8)                 Linux Programmer’s Manual                 SETSID(8)

NAME
       setsid - run a program in a new session

SYNOPSIS
       setsid program [ arg ... ]

DESCRIPTION
       setsid runs a program in a new session.

可见 setsid 的使用也是非常方便的,也只需在要处理的命令前加上 setsid 即可。 setsid 示例

[root@pvcent107 ~]# setsid ping www.ibm.com
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     31094     <strong>1</strong>  0 07:28 ?        00:00:00 ping www.ibm.com
root     31102 29217  0 07:29 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

值得注意的是,上例中我们的进程 ID(PID)为31094,而它的父 ID(PPID)为1(即为 init 进程 ID),并不是当前终端的进程 ID。请将此例与nohup 例中的父 ID 做比较。<!-- more -->

3。&

这里还有一个关于 subshell 的小技巧。我们知道,将一个或多个命名包含在“()”中就能让这些命令在子 shell 中运行中,从而扩展出很多有趣的功能,我们现在要讨论的就是其中之一。

当我们将"&"也放入“()”内之后,我们就会发现所提交的作业并不在作业列表中,也就是说,是无法通过jobs来查看的。让我们来看看为什么这样就能躲过 HUP 信号的影响吧。 subshell 示例

[root@pvcent107 ~]# (ping www.ibm.com &amp;)
[root@pvcent107 ~]# ps -ef |grep www.ibm.com
root     16270     <strong>1</strong>  0 14:13 pts/4    00:00:00 ping www.ibm.com
root     16278 15362  0 14:13 pts/4    00:00:00 grep www.ibm.com
[root@pvcent107 ~]#

从上例中可以看出,新提交的进程的父 ID(PPID)为1(init 进程的 PID),并不是当前终端的进程 ID。因此并不属于当前终端的子进程,从而也就不会受到当前终端的 HUP 信号的影响了。

回页首

disown

场景:

我们已经知道,如果事先在命令前加上 nohup 或者 setsid 就可以避免 HUP 信号的影响。但是如果我们未加任何处理就已经提交了命令,该如何补救才能让它避免 HUP 信号的影响呢?

解决方法:

这时想加 nohup 或者 setsid 已经为时已晚,只能通过作业调度和 disown 来解决这个问题了。让我们来看一下 disown 的帮助信息:

disown [-ar] [-h] [jobspec ...]
    Without options, each jobspec is  removed  from  the  table  of
    active  jobs.   If  the -h option is given, each jobspec is not
    removed from the table, but is marked so  that  SIGHUP  is  not
    sent  to the job if the shell receives a SIGHUP.  If no jobspec
    is present, and neither the -a nor the -r option  is  supplied,
    the  current  job  is  used.  If no jobspec is supplied, the -a
    option means to remove or mark all jobs; the -r option  without
    a  jobspec  argument  restricts operation to running jobs.  The
    return value is 0 unless a jobspec does  not  specify  a  valid
    job.

可以看出,我们可以用如下方式来达成我们的目的。

灵活运用 CTRL-z

在我们的日常工作中,我们可以用 CTRL-z 来将当前进程挂起到后台暂停运行,执行一些别的操作,然后再用 fg 来将挂起的进程重新放回前台(也可用 bg 来将挂起的进程放在后台)继续运行。这样我们就可以在一个终端内灵活切换运行多个任务,这一点在调试代码时尤为有用。因为将代码编辑器挂起到后台再重新放回时,光标定位仍然停留在上次挂起时的位置,避免了重新定位的麻烦。

  • disown -h _jobspec_ 来使某个作业忽略HUP信号。

  • disown -ah 来使所有的作业都忽略HUP信号。

  • disown -rh 来使正在运行的作业忽略HUP信号。

需要注意的是,当使用过 disown 之后,会将把目标作业从作业列表中移除,我们将不能再使用jobs来查看它,但是依然能够用ps -ef查找到它。

但是还有一个问题,这种方法的操作对象是作业,如果我们在运行命令时在结尾加了"&"来使它成为一个作业并在后台运行,那么就万事大吉了,我们可以通过jobs命令来得到所有作业的列表。但是如果并没有把当前命令作为作业来运行,如何才能得到它的作业号呢?答案就是用 CTRL-z(按住Ctrl键的同时按住z键)了!

CTRL-z 的用途就是将当前进程挂起(Suspend),然后我们就可以用jobs命令来查询它的作业号,再用bg _jobspec_ 来将它放入后台并继续运行。需要注意的是,如果挂起会影响当前进程的运行结果,请慎用此方法。 disown 示例1(如果提交命令时已经用“&”将命令放入后台运行,则可以直接使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile &
[1] 4825
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile
root      4825   968  1 09:46 pts/4    00:00:00 cp -i -r testLargeFile largeFile
root      4853   968  0 09:46 pts/4    00:00:00 grep largeFile
[root@pvcent107 build]# logout

disown 示例2(如果提交命令时未使用“&”将命令放入后台运行,可使用 CTRL-z 和“bg”将其放入后台,再使用“disown”)

[root@pvcent107 build]# cp -r testLargeFile largeFile2

[1]+  Stopped                 cp -i -r testLargeFile largeFile2
[root@pvcent107 build]# bg %1
[1]+ cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# jobs
[1]+  Running                 cp -i -r testLargeFile largeFile2 &
[root@pvcent107 build]# disown -h %1
[root@pvcent107 build]# ps -ef |grep largeFile2
root      5790  5577  1 10:04 pts/3    00:00:00 cp -i -r testLargeFile largeFile2
root      5824  5577  0 10:05 pts/3    00:00:00 grep largeFile2
[root@pvcent107 build]#

硬盘上留下后门,重装系统都没用

OHM(Observe Hack Make)是一个专为黑客、制造者和那些有探究精神之人举办的国际户外露营节,为期 5 天。今年 7月31日在荷兰 Geestmerambacht 举办,有 3000 人参与。 Sprites Mods 博主 参加并在 OHM2013 公开发布一篇黑硬盘的文章中文)。原理是利用硬盘的一些智能机制,在某个位置嵌入一些信息(比如:登录信息),然后操作系统验证用户登陆时,会不自主地读取黑客预留下的用户名和密码。

Wi-Fi 是什么的缩写?

wifi1

请对照上图自测。如果你是 Level 0,阅读本文前建议先搜索并查看相关资料学习 Wi-Fi 的基本概念,本文将不涉及定义或技术上的解释。<!-- more -->

Wi-Fi 是 Wireless Fidelity 吗

一天和客户闲聊,我随口问了一句,Wi-Fi 是什么的缩写?客户是个美国人,他愣了一下,说自己不清楚,但推测应该是 wireless fidelity,和 hi-fi 结构相同。我惭愧地低下了头,作为设计师整天说 hi-fi lo-fi prototyping,怎么就没想到是 wireless fidelity 呢。但反省过后,我开始质疑(客户)了,Wi-Fi 真的是 wireless fidelity 的缩写吗?

如果去查资料,绝大多数地方提及 Wi-Fi 时都会标注 Wi-Fi 是无线保真,也就是 wireless fidelity 的缩写。但仔细去琢磨,就会觉得还是不明白,高保真低保真都可以解释通,但无线保真是什么意思呢(写到这,因查 Google 看到七夕搭鹊桥的游戏,忍不住玩了一会儿,浪费半小时)?

Wi-Fi 的由来

1999 年,Wi-Fi 联盟成立,但那时候还不叫 Wi-Fi 联盟,叫无线以太网兼容性联盟(Wireless Ethernet Compatibility Alliance),因为 Wi-Fi 一词还没有被发明出来。当时的大背景是,IEEE 定义了一系列无线网络通信的标准,也就是我们常见到的 802. 11 系列,但却没有规定如何去测试产品是否符合标准,导致 802.11 产品间的互通频频出现问题,而联盟的成立就是为了填补这一空缺。联盟还将推广符合 802.11 标准的无线网络技术作为己任,因此他们认为需要一个朗朗上口的名字来代替拗口的专业术语(呃…什么?802.11b 直接序列扩频?那是什么东西…),以便这个概念能更好地在民间扩散。

这时候,上图中出镜的联盟创始人之一 Phil Belanger,提议去找品牌咨询公司 Interbrand 来协助完成命名工作。果然,Interbrand 不负众望地想出了 Wi-Fi 这个现在已家喻户晓的名字。根据 Interbrand 在官方博客中发表的博文来看,当时的确是借鉴了 hi-fi 一词,但只是想借用 hi-fi 的高辨识度,以及简单易记的发音,并非像广为流传的那样,先想到 wireless fidelity,再缩成 Wi-Fi。

Interbrand 共提交了十三个方案,最终胜出的(由于我们都知道结局了所以毫无悬念地)是 Wi-Fi。无线以太网兼容性联盟也由此更名为 Wi-Fi 联盟。

Wireless Fidelity 的由来

下一个问题就来了,既然流传这么广泛,wireless fidelity 的存在一定是有某些缘由的(好想在此处正确使用一次高中老师反复强调的“空穴来风”一词啊)。那么罪魁祸首是谁呢?是某个不负责任的科技媒体?还是某次演讲中的无意玩笑?错,制造这一切的正是 Wi-Fi 联盟自己。这也是让他们追悔莫及的一件事。

说到 wireless fidelity,Interbrand 就会一副无辜的表情,不关我的事啊,我什么都不知道嘛。的确,wireless fidelity 从头到尾都没有出现在 Interbrand 的提案中。但在敲定 Wi-Fi 这个名字之后,Wi-Fi 联盟的部分老学究不理解何谓品牌和市场,始终不能接受一个生造出来的词没有所谓的含义,或者全称。妥协之后,Wi-Fi 联盟只得在推广 Wi-Fi 时,加上了一句标语:“无线保真的标准(Standards for Wireless Fidelity)”。Boing Boing 的这篇文章中,发表了 Phil Belanger 本人的解释。

但事实上,这个标语充满了错误。首先 Wi-Fi 自始至终都不是一个标准,Wi-Fi 联盟不会制定标准,不会与 IEEE 构成任何竞争关系。其次,wireless fidelity 只是在以 wi 和 fi 打头的词中随便提出来两个拼凑而成的,毫无意义,只会造成误解。

2000 年春夏季度,Wi-Fi 一词面世,带着那句错误的标语。但很快 Wi-Fi 联盟便意识到了这个错误,2000 年底的时候就决定撤掉所有的标语。原以为这样就会弥补过失,阻止 wireless fidelity 一词的继续流传,但由于 Wi-Fi 概念的快速扩散,wireless fidelity 也作为 Wi-Fi 的“全称”随之一传十十传百。现今,连一些业内人士也在官方发表的文件中以 wireless fidelity 解释 Wi-Fi。

关于 wireless fidelity 的文档,据说在 Wi-Fi 联盟的官网上只有两篇,是春夏季度媒体发布时的文章,保留它是为了记住那段遗憾的岁月,基本等同于“留了一张发型最傻时期的照片”(建议点上文的“据说”看一看,文章里有大量爆料,写得也很有意思)。

至于今后如何对待 wireless fidelity 一词,当然没必要暴力去除了,但 Phil Belanger 还是希望大家能帮忙忘记那条错误的标语,只记得这个漂亮的名字——Wi-Fi。

Did You Know?

  • Wi-Fi 的标准写法是大写“W”和“F”,中间用“-”连接。

  • Interbrand 除了给 Wi-Fi 起名,他们还帮微软家的搜索引擎起了个响亮的名字——Bing。关于 Interbrand 还搞出了什么名堂,可以点这里看他们长长的案例列表。

  • Interbrand 当初提交的十三个方案,除了 Wi-Fi,还包括:

  • Skybridge

  • Torchlight

  • Flyover

  • Transpeed

  • Elevate

  • Trapeze

  • Dragonfly

  • Hornet

  • 在首轮投票中,Wi-Fi 并不是最高分数,分数最高的依次为:Trapeze(飞人)、Dragonfly(蜻蜓)、Hornet(马蜂),Wi-Fi 仅排第四。

  • 从 Wi-Fi 扩展成 wireless fidelity,也就是把一个词当作缩写逆向扩展出某种含义的过程,是一种文字游戏,叫 backronym,意思和 acronym 相对。Backronym 很容易被传着传着就当真。常见的比如SOS,很多人认为是 save our souls 的缩写,但实际上是先有的易识别易操作的摩尔斯电码 · · · – – – · · ·,后选用相对应的字母组合 SOS 来表示罢了。因此 SOS 和 Wi-Fi 一样,没有任何含义,也不是什么的缩写,还真是同病相怜呐。

看到这里,原本并不了解 Wi-Fi 和 wireless fidelity 渊源的人可能要掀桌了。看了这篇文章,只得出一个结论,Wi-Fi 其实什么的缩写都不是,标题就是一个陷阱?呐,这就是冷知识的魅力所在嘛:你学到了,也无用武之地;你知道了,也没人会觉得你渊博。所以学习冷知识才是最单纯的,没什么目的可言,纯粹为了有趣才查一查写一写,结尾还可以随意升华一下全文的格调,岂不妙哉?

分析apache nginx的log

1、查看当天有多少个IP访问: awk '{print $1}' log_file|sort|uniq|wc -l

2、查看某一个页面被访问的次数:
grep "/index.php" log_file | wc -l

3、查看每一个IP访问了多少个页面:
awk '{++S[$1]} END {for (a in S) print a,S[a]}' log_file

4、将每个IP访问的页面数进行从小到大排序:
awk '{++S[$1]} END {for (a in S) print S[a],a}' log_file | sort -n

5、查看某一个IP访问了哪些页面:
grep ^111.111.111.111 log_file| awk '{print $1,$7}'

6、去掉搜索引擎统计当天的页面:
awk '{print $12,$1}' log_file | grep ^\"Mozilla | awk '{print $2}' |sort | uniq | wc -l

7、查看2009年6月21日14时这一个小时内有多少IP访问:
awk '{print $4,$1}' log_file | grep 21/Jun/2009:14 | awk '{print $2}'| sort | uniq | wc -l

8,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l

9,查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l

10,通过日志查看当天ip连接数,过滤重复:
cat access_log | grep "20/Oct/2008" | awk '{print $2}' | sort | uniq -c | sort -nr

11,当天ip连接数最高的ip都在干些什么(原来是蜘蛛):
cat access_log | grep "20/Oct/2008:00" | grep "122.102.7.212" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

12,当天访问页面排前10的url:
cat access_log | grep "20/Oct/2008:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10

13,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr

接着从日志里查看该ip在干嘛:
cat access_log | grep 122.102.7.212| awk '{print $1"\t"$8}' | sort | uniq -c | sort -nr | less

14,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20060723.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l