前言

一些 linux 和 shell 的小细节记录

1、清理cache

1
2
3
4
5
6
7
8
仅清除页面缓存(PageCache)
sync; echo 1 > /proc/sys/vm/drop_caches

清除目录项和inode
sync; echo 2 > /proc/sys/vm/drop_caches

清除页面缓存,目录项和inode
sync; echo 3 > /proc/sys/vm/drop_caches

2、crontab定时任务取值范围

文件/etc/crontab中每行任务的描述格式如下:

1
2
3
4
5
6
7
8
minute hour day month dayofweek command

minute - 从0到59的整数 
hour - 从0到23的整数 
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(可用as ls /proc >> /tmp/proc或 执行自定义脚本的命令)

前面五个*号代表五个数字,数字的取值范围和含义如下:

分钟 (0-59)
小時(0-23)
日期(1-31)
月份(1-12)
星期(0-6) //0代表星期天

3、删除乱码文件

3.1 linux下删除乱码文件名

1
2
1. ls -i 列出文件的节点ID, 如: 123456789 
2. find ./ -inum 123456789 -print -exec rm -rf {} \; 

3.2 批量删除

1
for n in 123456789 987654321; do find . -inum $n -exec rm -f {} \; done 

4、shell中$参数含义

1
2
3
4
5
6
7
8
$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表
$* 是以一个单字符串显示所有向脚本传递的参数,与位置变量不同,参数可超过9个
$$ 是脚本运行的当前进程ID号
$? 是显示最后命令的退出状态,0表示没有错误,其他表示有错误

5、查找

5.1 查找某类型文件下包含的字符块

1
2
3
4
5
6
7
8
9
[root@qm app]# grep loading.gif  ./css/*.css

./css/index.css:.d-loading { height:32px; text-align:left; text-indent:-999em; overflow:hidden; background:url(http://img1.qmsdstatic.com/mres/res/base/images/loading.gif) no-repeat center center; }

./css/index.css:.loading {   width:100%;    height:56px;    position: fixed;    top:50%;  text-indent: 0px;       line-height:56px;    color:#fff;    padding-left:60px;    font-size:15px;    background: #000 url(http://img1.qmsdstatic.com/mres/res/base/images/loading.gif) no-repeat 40% 50%;  text-align: center;   opacity: 0.7;    z-index:9999;    -moz-border-radius:20px;    -webkit-border-radius:20px;    border-radius:20px;    filter:progid:DXImageTransform.Microsoft.Alpha(opacity=70);  }

./css/index.css:.lazy { background: url("http://img1.qmsdstatic.com/mres/res/base/images/loading.gif") no-repeat center center; display: block;}

[root@qm app]# 

5.2 查找文件名称

find ./ -name "loading.gif"

6、linux系统的TimeZone

使用Centos,遇到本地时间对不上,直接敲命令:date -s “2014-12-25 15:15:15"是立即生效了,但是重启后,系统时间还是原来的。 后面经过查找资料,做个小结.
我的Centos是安装在虚拟机上。在虚拟机有分系统时间和硬件时间。修改了其一是没有办法奏效,必须两者都更改。

1
2
3
4
5
6
1.date {查看目前本地的时间}
2.hwclock --show {查看硬件的时间}
3.如果硬件的时间是对不上,那就对硬件的时间进行修改、
4.hwclock --set --date '014-12-15 15:15:15' {设置硬件时间}
5.hwclock --hctosys {设置系统时间和硬件时间同步}
6.clock -w {保存时钟}

7.最后在通过重启,init 6 快速重启后,查看系统时间是否真正生效!!!!

 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
[root@qm-wap1 ~]# tzselect 
Please identify a location so that time zone rules can be set correctly.
Please select a continent or ocean.
 1) Africa
 2) Americas
 3) Antarctica
 4) Arctic Ocean
 5) Asia
 6) Atlantic Ocean
 7) Australia
 8) Europe
 9) Indian Ocean
10) Pacific Ocean
11) none - I want to specify the time zone using the Posix TZ format.
#? 5
Please select a country.
 1) Afghanistan          18) Israel            35) Palestine
 2) Armenia          19) Japan            36) Philippines
 3) Azerbaijan          20) Jordan            37) Qatar
 4) Bahrain          21) Kazakhstan        38) Russia
 5) Bangladesh          22) Korea (North)        39) Saudi Arabia
 6) Bhutan          23) Korea (South)        40) Singapore
 7) Brunei          24) Kuwait            41) Sri Lanka
 8) Cambodia          25) Kyrgyzstan        42) Syria
 9) China          26) Laos            43) Taiwan
10) Cyprus          27) Lebanon            44) Tajikistan
11) East Timor          28) Macau            45) Thailand
12) Georgia          29) Malaysia            46) Turkmenistan
13) Hong Kong          30) Mongolia            47) United Arab Emirates
14) India          31) Myanmar (Burma)        48) Uzbekistan
15) Indonesia          32) Nepal            49) Vietnam
16) Iran          33) Oman            50) Yemen
17) Iraq          34) Pakistan
#? 9
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

    China
    Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Local time is now:    Thu Oct 20 20:34:58 CST 2016.
Universal Time is now:    Thu Oct 20 12:34:58 UTC 2016.
Is the above information OK?
1) Yes
2) No
#? 1

You can make this change permanent for yourself by appending the line
    TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai
[root@qm-wap1 ~]# 
[root@qm-wap1 ~]# vi /etc/profile    增加    export TZ='Asia/Shanghai' 
[root@qm-wap1 ~]# date -R Thu, 20 Oct 2016 12:41:17 +0000
[root@qm-wap1 ~]# . /etc/profile    使环境变量生效
[root@qm-wap1 ~]# date -R Thu, 20 Oct 2016 20:41:35 +0800

7、调整文件句柄数

7.1 查看进程开发的文件句柄数量

1
2
3
lsof -n | awk '{print $2}' | sort | uniq -c | sort -nr | more

ps -aef | grep 进程号

7.2 修改系统的文件句柄数

1
2
3
4
5
6
7
8
root登录服务器
vi /etc/security/limits.conf

* hard nofile 65535 或 * - nofile 65535

vi .profile  添加 ulimit -n 65535

. ~/.profile

7.3 修改系统内核参数

linux TIME_WAIT过多的解决方法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
查看TCP状态:netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
查看SOCKET状态:cat /proc/net/sockstat
TIME_WAIT状态的socket一般需要等到2msl时间后,socket才会被回收。
修改(添加)系统内核参数:/etc/sysctl.conf
#改系統默认的TIMEOUT时间
net.ipv4.tcp_fin_timeout=2
#启重用,允许将TIME-WAIT sockets重新用于新的TCP连接 默认为0表示关闭
net.ipv4.tcp_tw_reuse=1
#开启TCP连接中TIME-WAIT sockets的快速回收 默认为0 表示关闭
net.ipv4.tcp_tw_recycle=1
使新增参数生效:sysctl -p

8、监控参数

 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
[root@qm ~]# vmstat 2 10
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0 258952 17992080 309016 8748008    0    0     5     3    0    0  1  0 99  0  0    
 3  0 258952 17992072 309016 8747976    0    0     0    26 2895  710 17  0 83  0  0    
 2  0 258952 17992196 309016 8747976    0    0     0     0 2481  598 17  0 83  0  0    
 2  0 258952 17991824 309016 8747976    0    0     0    18 2916  684 18  0 81  0  0    
 2  0 258952 17992196 309016 8747976    0    0     0   132 2989  731 19  0 80  1  0    
 3  0 258952 17991948 309016 8747980    0    0     0    10 3630  905 22  0 78  0  0    
 3  0 258952 17991700 309016 8747980    0    0     0    38 3170  796 21  0 78  0  0    
 2  0 258952 17991204 309016 8747948    0    0     0   364 2576  685 17  0 82  1  0    
 2  0 258952 17991204 309016 8747948    0    0     0    16 2939  647 17  0 83  0  0    
 3  0 258952 17991328 309016 8747948    0    0     0     0 2768  651 17  0 83  0  0    
[root@qm ~]#  iostat
Linux 2.6.32-358.el6.x86_64 (qm.web10)     2016年04月26日     _x86_64_    (12 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.91    0.00    0.03    0.06    0.00   99.00

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               2.51       122.19        72.73 7081933849 4215403284
dm-0              0.58         1.76         4.39  101952970  254331472
dm-1              7.14       120.27        68.10 6970687410 3946930248

可以用iostat/iotop查看具体的io状况