Press "Enter" to skip to content

月与灯依旧 Posts

Ubuntu系统更改CPU频率

在Ubuntu 12.04系统上更改CPU频率,涉及到的内核参数值为scaling_governor

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 
performance

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors 
conservative ondemand userspace powersave performance 

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 
3101000 3100000 2900000 2700000 2500000 2300000 2100000 1900000 1700000 1600000 
sudo apt-get install cpufrequtils

相关参数
$ cpufreq-selector -h
  -c, --cpu           CPU Number
  -g, --governor      Governor
  -f, --frequency     Frequency in KHz

试着调整一下
$ sudo cpufreq-selector -c 0 -g performance

看看结果
$ cat /proc/cpuinfo | grep MHz
cpu MHz		: 3101.000
cpu MHz		: 1600.000
cpu MHz		: 1600.000
cpu MHz		: 1600.000

设置开机自动调整
$ sudo vim /etc/rc.local     #加入如下四行
sudo cpufreq-selector -c 0 -g performance
sudo cpufreq-selector -c 1 -g performance
sudo cpufreq-selector -c 2 -g performance
sudo cpufreq-selector -c 3 -g performance

万恶的Ubuntu,竟然不支持sudo echo xx > file。

2 Comments

CentOS 6安装配置LDAP

一,什么是LDAP

随着全国信息化建设的不断深入,各企事业单位都陆续开发出了针对本单位实际应用的多个管理信息系统。但各应用系统的开发大多沿袭传统的开发模式,即每个应用系统都有各自独立的用户认证模块,并使用独立的认证机制在各自的数据库中进行用户认证。这种用户认证模式有很多弊端:
1,传统的开发模式大多是基于关系数据库的用户认证信息管理模型,读取速度慢,可移植性差;
2,用户在每个应用系统中都必须存储用户名和密码等认证信息,这样会使用户认证信息在多个应用系统的数据库中重复放置,造成大量的数据冗余;
3,这种认证模式给用户认证信息的维护管理和用户的使用造成诸多不便。例如,用户需要更改自己的认证信息时,就必须逐个在所有的应用系统中进行更改,若有遗漏,就会造成数据的不一致;
4,每个应用系统都必须有各自独立的用户认证模块,这将造成重复开发;
5,由于没有单点登录功能,用户在使用不同的应用系统之时,必须重复登录。
基于以上几点,不难发现,传统开发模式的诸多弊端已经严重影响了WEB应用系统的性能和使用的方便性。

二,LDAP目录服务简介

目录服务是一种专门的数据库,可以用来保存描述性的、基于属性的信息,就像大多数人熟悉的各种各样的目录,像电话簿、黄页,电视指南、购物目录和图书馆卡片目录。听起来像是数据库一样,但“目录”与数据库并不相同,目录的大部分操作为读操作,可以针对大量的查找或者搜索操作进行快速的响应。它们可以具有大范围复制信息的功能,以便提高可用性和可靠性,同时缩短响应时间。

假如你的应用程序要写入大量的数据,你应该考虑选择使用数据库来实现。目录仅支持相对简单的事务处理。相反,数据库被设计成处理大量的各种各样的事务处理。假如你的应用要求这种重负荷的事务支持,你该选择数据库而不是目录。在另一方面,假如你的应用不要求这样的大负荷事务处理,而是偶尔的写一些简单的事务信息。这时,目录是理想的选择。它会更有效,更简单。

Leave a Comment

Linux Shell之数组

一,数组定义

定义方法1
arr=(1 2 3 4 5) #用空格分开

定义方法2
array
array[0]="a"
array[1]="b"
array[2]="c"

定义方法3
str=“a b c”
array=($str)

二,数组调用及遍历

${#array[@]}      #获取数组的长度
echo ${array[@]}  #遍历数组(输出数组全部元素)
array[0]=5        #向数组的某个元素赋值
echo ${array[@]:1:2}  #输出array[0]和array[1]的值
echo ${array[@]:2}    #输出数组第三个元素以后的值
echo ${array[@]::2}   #输出数组下标小于2的值
$ echo ${#array[3]}   #取得元素3的长度
unset array    #清除array
array=         #清空array的值


遍历(For循环法)
for i in ${arr[@]}
do
    echo $i
done

遍历(For循环法2)
for ((i=0;i<${#array[@]};i++))
do
   echo ${array[$i]}
done

遍历(while循环法)
len=${#arr[@]}
i=0
while [ $i -lt $len ]
do
echo ${arr[$i]}
let i++
done

每隔30秒,查找名为ndh2nds的进程,找出其pid,修改/proc/$pid/oom_score_adj的值,防止该进程被OOM机制杀掉

#!/bin/bash

while :
do
  list=`ps -ef | grep -i ndh2nds | grep -v 'grep ' | awk '{print $2}'`
  array=($list)
  for pid in ${array[@]}
  do
    score=`cat /proc/$pid/oom_score_adj`
    echo oom_score_adj of pid $pid is $score
    if [ $score -ge 0 ]; then
      echo -100 > /proc/$pid/oom_score_adj
      echo changed oom_score_adj of pid $pid to `cat /proc/$pid/oom_score_adj`
    fi
  done
sleep 30
done
Leave a Comment

Linux Shell之括号用法

一,单小括号()
1,命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开,最后一个命令可以没有分号,各命令和括号之间不必有空格。
2,命令替换。等同于`cmd`,shell扫描一遍命令行,发现了$(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令。有些shell不支持,如tcsh。
3,用于初始化数组。如:array=(a b c d)

二,双小括号(( ))
1,整数扩展。这种扩展计算是整数型的计算,不支持浮点型。((exp))结构扩展并计算一个算术表达式的值,如果表达式的结果为0,那么返回的退出状态码为1,或者 是”假”,而一个非零值的表达式所返回的退出状态码将为0,或者是”true”。若是逻辑判断,表达式exp为真则为1,假则为0。
2,只要括号中的运算符、表达式符合C语言运算规则,都可用在$((exp))中,甚至是三目运算符。作不同进位(如二进制、八进制、十六进制)运算时,输出结果全都自动转化成了十进制。如:echo $((16#5f)) 结果为95 (16进位转十进制)
3,单纯用 (( )) 也可重定义变量值,比如 a=5; ((a++)) 可将 $a 重定义为6
4,双括号中的变量可以不使用$符号前缀。括号内支持多个表达式用逗号分开。

#判断大小
if ($i<5)  
if [ $i -lt 5 ]  
if [ $a -ne 1 -a $a != 2 ]  
if [ $a -ne 1] && [ $a != 2 ]  
if [[ $a != 1 && $a != 2 ]]  

#输出数0到4  
for i in $(seq 0 4);do echo $i;done  
for i in `seq 0 4`;do echo $i;done  
for ((i=0;i<5;i++));do echo $i;done  
for i in {0..4};do echo $i;done  
Leave a Comment

Linux之setfacl权限配置

查看setfacl版本

$ setfacl --version
setfacl 2.2.49

查看文件系统是否开启acl权限控制

$ tune2fs -l /dev/sda3 | grep option
Default mount options: acl

开启acl支持

方法一:修改mount选项
$ mount -o remount,acl /dev/vda3 /mnt/acltest
$ vim /etc/fstab
/dev/vda3 /mnt/acltest ext4 defaults,acl 0 0

方法二:使用tune2fs修改文件系统信息
$ tune2fs -o acl /dev/vda3 开启文件系统的acl选项
$ tune2fs -o ^acl /dev/vda3 取消文件系统的acl选项

给某个用户设置权限

$ setfacl -m u:joe:rx dir

给某个组设置权限

$ setfacl -m g:aclgp1:rx dir

取消某项权限

$ setfacl -x g:aclgp1 dir
Leave a Comment

使用UEFI模式安装Windows7

最近入了个微星 H81-E43的主板,在安装系统的时候遇到了问题,BIOS中只能设定uefi和legacy共存,不能设定legacy only。
legacy是传统BIOS,uefi是传统BIOS的升级版。在UEFI模式下安装的系统(只支持64为系统且磁盘分区必须为gpt格式,不支持32位),只能用UEFI模式引导。

注意事项
1,目前UEFI/GPT仅仅支持64位系统启动安装;
2,UEFI/GPT下安装的win7 x64不能用常用的软激活激活,只能通过刷BIOS激活或者正版激活码激活;
3,GPT是为大容量硬盘而生的,不大于2T的硬盘理论上不建议使用GPT分区,如果主板可以设定legacy only,还是老老实实使用MBR格式吧

BIOS设置
1,打开UEFI支持
把“Boot mode”项设为“UEFI only”;如果有“Lunch CSM”选项,将其设为“Enabled”。
2,关闭安全引导(假如有的话)
进入“Security”-“Secure Boot”,将其设为 “Disabled”。这是Windows8新引入的安全机制,不关闭不能安装其它操作系统。

安装步骤

1 Comment

国内一线IT公司运维工程师试题

最近面试了许多公司的运维工程师岗位,博主再一次深深感受到了Linux就业者的难处。Linux这个东西牵扯的方面太多了,而大部分公司只能用到其中的某一两个方面,假设你没有涉及过这一两个方面的话,那么就只能over了,所以Linux从业者的路其实比较窄。
去A公司面试,会问你云计算,虚拟化方面的问题,
去B公司面试,会问你RAID、IPMI方面的问题,
去C公司面试,会问你Shell、Python方面的问题,
去D公司面试,会问你kernel、编译方面的问题……
去E公司面试,会问你Hadoop、MapReduce方面的问题……

这一两个月来,面试过大大小小不下数十家IT公司了,其中不乏一些国内顶尖的互联网公司(如百度等),下面列举一些曾经把我难倒的问题。这些问题里,有的我已经知道答案,有的至今无解。想走Linux运维工程师的你,不妨也来试试吧。

需要说明的是,本篇博文的标题是“国内一线IT公司运维工程师试题”,因此下面列出的这些都是我认为有些深度的题目,而实际上在面试的过程中,有些不太知名的公司,题目会简单许多,例如写一些简单的Shell脚本,描述一下Linux的启动过程等,这些问题我都没有列出来。。

假设有某日志文件:
08:35:04 1 98.35.12.254 visited some thing.
10:20:09 6 199.198.25.4 visited some thing.
12:05:25 8 35.27.8.16 visited some thing.
……
16:30:55 3 128.99.33.64 visited some thing.
已知第一列是时间,第二列是随机的数字,第三列是客户端IP,第四列是一些文字。

1,请筛选出下午14:00以后,访问最频繁(访问次数最多)的三个客户端IP,可以写脚本实现;(百度,蓝汛)

3 Comments