linux

10

find命令

例如   find  /root/data  -type  f  -exec ls -l {} \;   当然也可以将-exec换成 xargs

那么上面的命令等价于这个命令   find  /root/data  -type  f  | xargs  ls  -l

反斜线的使用 指的是让有意义的字符还原成本来的含义,相当于脱掉马甲。比如.代表当前目录   如果在.前加上\  即\.表示就是一个点.

 

删除一个目录中的所有文件,但保留一个指定的文件

find  /root/data/  -type  f  ! -name 'bb.txt'  | xargs rm -f   结果为在文件夹data中所有的文件被删除,只保留了bb.txt文件

 

示例:打印文件中的内容,不显示文件中oldboy内容

比如test.txt文件中的内容为:

jsdfafasf
sdlfsdf1325234234
oldboy

方法1、使用grep命令:grep  -v  'oldboy' test.txt

 方法2、使用sed命令:sed  -n  '/oldboy/d'  test.txt   这里的test.txt内容不会变,只是打印输出的结果去除了oldboy,-n表示不按sed命令的默认输出格式,还可以用-i让文件test.txt按输出的结果              更改文件内容(即sed -i  '/oldboy/d' test.txt)

 

 

 

seq 

seq   1  3输出为纵向打印

1

2

3

如果想横向打印,那么用-s 加上分割符   seq   -s   '#'  1 3   输出为:1#2#3

输出1到10的奇数,那么就要用到步长   seq   1 2 10  这里的2位步长  输出结果为:1 3 5 7  9

 

从文件中取多少多少行的话,一般用sed方法,当然还可以使用head和tail的组合方法,比如从文件test.txt中取20到30行

grep '30' -B 10 test.txt或者grep '20' -A 10 test.txt或者grep '25' -C 5 test.txt

sed  -n  '20,30p'  test.txt     -----------这个方法比较高大上

head  -30  test.txt  |tail  -11   ---------------这个方法比较low

当然也可以使用awk方法   awk  '{if (NR>19 && NR<31) printf $1"\n"}' test.txt   ------------------这个方法也很高大上

 

awk  过滤文件内容(取列)  awk -F '分隔符' '{print $1}'  文件   分隔符默认是空格  可以使用-F来指定分隔符,-F可以指定多个分隔符(比如-F ', '表示以,号和空位分隔符)   $1表示第一列  $2第二列  $NF表示最后一列  $(NF-1)表示倒数第二列$0表示正行

比如   awk   -F  ':'  '{print  $1"---" $NF}'  /etc/passwd   输出类似为:root---/bin/bash

利用awk取pc的ip地址最快捷的方法为: ifconfig  eth0|awk -F '[: ]+' 'NR==2 {print $4}'

 

sed替换   这个方法很重要

格式为:sed  's#被替换内容#替换成的内容#g'  文件

比如  sed  -i  's#oldboy#oldgirl#g'  test.txt

 

{}作用为生成字符或者数字序列

比如一条命名生成一百个文件夹     mkdir  stu{001..100}

 

优化linux远程SSH连接

可以通过vim来修改配置文件,一个一个修改,也可以将下面的代码块复制到sshd_config配置文件中即可。

####sshd change start#2017-8-24##
Port 52113
PermitRootLogin no
PermitEmptyPasswords no
UseDNS no
GSSAPIAuthentication no
ListenAddress 192.168.1.101
####sshd change end#2017-8-24##

当然也可以用sed命令来修改sshd_config配置文件

sed -ir '13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no\nListenAddress 192.168.1.101'  sshd_config

 sed注意事项:()是扩展正则表达式的元字符,sed软件默认识别基本正则表达式,想要使用扩展正则需要使用\转义,即\(\)。sed使用-r选项则可以识别扩展正则表达式,此时使用\(\)反而会出错。

[root@oldboy ~]# chkconfig --list|grep "3:on"|grep -vE "sshd|crond|network|rsyslog|sysstat"|awk '{print $1}'|sed -r  's#^(.*)#chkconfig \1 off#g'|bash

 

调整字符集:

[root@goser001 ~]# cat /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@goser001 ~]# sed -i 's#LANG="en_US.UTF-8"#LANG="zh_CN.UTF-8"#g' /etc/sysconfig/i18n 
[root@goser001 ~]# cat /etc/sysconfig/i18n                                      LANG="zh_CN.UTF-8"
SYSFONT="latarcyrheb-sun16"
[root@goser001 ~]# source /etc/sysconfig/i18n 
[root@goser001 ~]# echo  $LANG
zh_CN.UTF-8

 

服务器时间同步

要让服务器显示正确的时间,应该让服务器和网络上公认的时间服务器定时同步

[root@goser001 ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1'>>/var/spool/cron/root

 

历史记录

#更改历史记录的条数位5
export HISTSIZE=5

#更改个人配置文件中的历史记录
export HISTFILESIZE=5

#查看个人配置文件中的历史记录
cat ~/.bash_history

#清空历史记录
history -c

 当然如果要让历史记录修改生效,应该加入到配置文件中,比如 echo 'export HISTSIZE=5'>>/etc/profile    source  /etc/profile

连接超时时间   echo  'export TMOUNT=300' >>/etc/profile     source  /etc/profile

 

文件描述符的概念:

1、表示形式为整数数字,一般使用范围为0~65535.

2、进程使用的时候会占用文件描述符(标示打开的文件)

查看文件描述符大小

ulimit -n

调整文件描述符的大小

echo '*            -        nofile         65535'>>/etc/security/limits.conf

ctrl + d重新连接后生效

 

linux内核优化,主要对web服务、网站访问的性能优化

打开配置文件vim  /etc/sysctl.conf,在配置文件的最后添加如下内容

net.ipv4.tcp_max_tw_buckets = 36000 
net.ipv4.tcp_fin_timeout = 2
net.ipv4.ip_local_port_range = 4000	65000 
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_tw_recycle = 1
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120

用sysctl -p   是配置生效

 

隐藏linux版本信息

>/etc/issue

设置登录的提示信息‘

vim  /etc/motd

vim /etc/motd

RHEL 5.8 release
welcome to my  linux test_server

 

锁定重要的系统文件防止篡改

$例如锁定下面的系统文件
chattr  +i  /etc/passwd  /etc/shadow  /etc/group  /etc/gshadow

#解除文件的锁定
chattr  -i  /etc/passwd  /etc/shadow  /etc/group  /etc/gshadow

  

为grub引导菜单加密码保护

#生成grub引导的md5密码
[root@goser001 ~]# /sbin/grub-md5-crypt

#拷贝密码到/etc/grub.conf配置文件中
#password --md5 $1$Gu.NU/$hme164URc/aaZ6UqKziZx.

#放在grub.conf配置文件的12和14行之间
12 splashimage=(hd0,0)/grub/splash.xpm.gz
13 hiddenmenu
14 password --md5 $1$Gu.NU/$hme164URc/aaZ6UqKziZx.
15 title CentOS 6 (2.6.32-504.el6.x86_64)
16         root (hd0,0)

 

禁ping服务器的icmp设置

不过这个命令生产商基本上不用,防止ping的方法主要用iptable防火墙来设置

echo 'net.ipv4.icmp_echo_ignore_all=1'>>/etc/sysctl.conf 

让后用sysctl -p使设置生效

 

linux软件下载的yum库更换,因为yum默认安装的软件是从centos官方下载的的,速度比较慢。所以要将yum下载的地址源更换成国内的,比如阿里云、搜狗、网易163等,下面以阿里云镜像为例

首先先备份默认的yum源

cd /etc/yum.repos.d/
cp CentOS-Base.repo  CentOS-Base.repo.oldboy.bak

然后打开阿里云镜像网站http://mirrors.aliyun.com/  选择centos  后面的help,这时候会跳转到yum源的下载地址http://mirrors.aliyun.com/help/centos

选择wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo命令到linux的/etc/yum.repos.d/目录中下载

[root@goser001 yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

下载好后此时yum源更改完成!

 

tree查看目录结构

tree  -Ld  1 /  -L表示层级   数字1表示1层级

 

man命令的注意事项

man命令不仅可以对命令做手册帮助,也可以对配置文件做手册帮助

比如 man  sshd_config  对配置文件查看手册帮助

 

修改主机名

1,、先hostname  goser手动修改

2、在配置文件中修改,这样才能永久生效   vi  /etc/sysconfig/network  中将HOSTNAME=goser

 

磁盘开机自动挂载

先测试生成一个块文件

dd if=/dev/zero of=/opt/sdb1 bs=4906 count=100

格式化这个测试块文件

mkfs.ext4  /opt/sdb1

挂载到/mnt目录

mount -t ext4 -o loop,noatime,noexec /opt/sdb1 /mnt

df查看挂载情况

df  -h

如果手动这样挂载没问题,那么接下来用/etc/fstab来配置开机自动挂载

先卸载umount /mnt

配置/etc/fstab文件

UUID=e27475d3-f7b5-4053-94ce-3b1d6b3acb24 /                       ext4    defaul
ts        1 1
UUID=a981f6b9-3db7-4178-9b5a-d6306d34adec /boot                   ext4    defaul
ts        1 2
UUID=8f0bead9-2788-4b73-ba4e-92e900fcf6ad swap                    swap    defaul
ts        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/opt/sdb1               /mnt                    ext4    loop,noatime,noexec
0 0

然后重启reboot

重启好后检查挂载情况 df -h

当然也可以不用/etc/fstab来配置开机自动挂载,也可以通过/etc/rc.local将挂载命令mount -t ext4 -o loop,noatime,noexec /opt/sdb1 /mnt 添加开机自启动文件中

 

全局配置文件  /etc/profile  

这个配置文件的作用为存储环境变量,别名等 如 echo 'export HISTSIZE=5'>>/etc/profile ,这个全局配置文件的配置对所有用户生效

如果只是对自己的环境变量的配置生效的话,应该配置个人的配置文件,个人配置的路径为:~/.bashrc_profile

而/etc/profile.d/目录里存放的是开机启动后自动运行的shell程序,当让在终端重新登陆也会自动执行

 

 

find根据时间查找的时间的表现图

比如查找/test/目录的修改时间为4天以前的文件夹删除:find  /test  -type  d  -mtime +4|xargs rm -rf 

 

tar打包和解压

tar  zcvf  a.tar.gz  /data    对/data目录整体打包

tar  zcvf  a.tar.gz  --exclude=data/oldboy.txt  --exclude=data/goser.tar.gz  /data   对/data目录中的oldboy.txt和oldboy.tar.gz文件除外打包

tar  zcvfX  a.tar.gz  paichu.txt  /data  这里的X意思是对目录/data中的文件在在paichu.txt中的话排除打包

tar  xf  a.tar.gz>/dev/null    解压

tar  xf  a.tar.gz  -C  /tmp/>/dev/null   解压到/tmp目录中

-P  这个大P尽量不要用,表示的是全路径打包或解压   这可能导致源目录被覆盖

p  小p保存属性

 

cut命令

切割的意思,简单的取列命令 -d指定分隔符   -f数字  表示取第几列   -c按字符取

比如:cut -d " "  -f3,6  goser.txt

 

查看文件系统信息

dumpe2fs   /dev/sda3|less

这个命令只能查看ext2 ext3 ext4类型的系统信息

 

索引节点信息(ls -lhi查看)

 文件的删除原理

当文件的i_link硬链接为0并且i_count引用计数为0的时候,表示这个文件已被删除

例如df -h查看磁盘使用情况的时候,磁盘的使用率为100%,这时候可能是日志文件(比如acounting.log)把磁盘写满了,于是删除了这个日志文件,再用df -h查看时磁盘依然是满的,但是这个日志文件确实被删除了,这个时候就要检查这个文件被服务进程占用了,也就是说i_count这时候不为0,重启占用这个文件的服务进程问题解决。

对于这个被删除的文件,但是依然有进程占用的话,用lsof  | grep del来查看占用这个删除文件的进程

发生这种情况下,最好不要手动直接删除这个日志文件,而用>accounting.log来清空这个日志文件的内容就行了,同时还保留着这个文件的i_Link

 

软连接

创建软链接的源文件是需要存在的,要创建的软链接文件是不能存在的,是要用ln命令创建的。

目录可以创建软链接,但不可创建硬链接

 

显示友好的长格式时间  ls  -l --time-style=long-iso

[root@goser ~]# ll  --time-style=long-iso
总用量 44
-rw-------. 1 root root  1056 2017-09-05 21:37 anaconda-ks.cfg
-rw-r--r--. 1 root root 21682 2017-09-05 21:37 install.log
-rw-r--r--. 1 root root  5890 2017-09-05 21:36 install.log.syslog
-rw-r--r--  1 root root     0 2017-09-09 21:45 test.txt
-rw-r--r--. 1 root root   473 2017-05-11 00:42 电影下载地址.txt

 

查看文件或文件系统的状态   用stat

[root@goser ~]# stat  install.log
  File: "install.log"
  Size: 21682           Blocks: 56         IO Block: 4096   普通文件
Device: 803h/2051d      Inode: 130308      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2017-09-08 21:59:37.500444254 +0800
Modify: 2017-09-05 21:37:05.157999543 +0800
Change: 2017-09-09 22:14:29.554697425 +0800

 

注意:目录的block存放目录下的文件名和子目录名 ,目录的inode存放的是目录的属性信息。目录的block一般的大小为4k(也就是一个单元的block)

 

linux里面的正则表达式,主要对三剑客命令的正则(grep,sed,awk),对于其他的命令没有正则的概念

 

 

文件和目录如何给权限,安全临界点为:

目录   755   root  root 

文件   644   root  root

为什么root用户默认创建的文件权限为644,目录权限是755;而普通用户创建的目录权限为775 ,文件权限为664,这是由linux的配置文件/etc/bashrc来控制的

通过umask来查看umask的值

[root@goser ~]# sed -n '65,69p' /etc/bashrc 
    if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
       umask 002
    else
       umask 022
    fi

所以root用户默认创建的目录权限为(777-022)755,文件的权限(666-022)644;同理普通用户也是这样。

 

为什么普通用户可以修改自己的登录密码

我们知道修改密码用passwd  用户名  ,修改完成后/etc/shadow文件会发生变化。

但是查看shadow文件的属性信息时其他用户却没有修改这个文件的权限

[root@goser ~]# ll  /etc/shadow
---------- 1 root root 1034 9月  10 13:30 /etc/shadow

那为什么普通用户修改密码shadow文件会发生变化呢,这是由于命令文件passwd的属性信息有suid,当普通用户执行这个命令的时候是临时调用root权限去修改shadow文件

[root@goser ~]# ll  `which passwd`
-rwsr-xr-x. 1 root root 30768 2月  22 2012 /usr/bin/passwd

如果把这个suid去掉的话,那么普通用户就无法再修改密码了

所以在生产环境中如果有需求可以对有suid的命令文件做去掉suid的操作,这可以看做生产环境中的系统的一个优化,比如禁止普通用户的su命令、mount命令、ping命令等

通过查看来查看linux系统中有suid的命令文件,来选择地去除suid

[root@goser ~]# find / -type f -perm 4755|xargs ls  -l
find: “/proc/2806/task/2806/fd/5”: 没有那个文件或目录
find: “/proc/2806/task/2806/fdinfo/5”: 没有那个文件或目录
find: “/proc/2806/fd/5”: 没有那个文件或目录
find: “/proc/2806/fdinfo/5”: 没有那个文件或目录
-rwsr-xr-x. 1 root root  77336 10月 15 2014 /bin/mount
-rwsr-xr-x. 1 root root  40760 9月  26 2013 /bin/ping
-rwsr-xr-x. 1 root root  36488 9月  26 2013 /bin/ping6
-rwsr-xr-x. 1 root root  34904 10月 15 2014 /bin/su
-rwsr-xr-x. 1 root root  53472 10月 15 2014 /bin/umount
-rwsr-xr-x. 1 root root  10272 10月 15 2014 /sbin/pam_timestamp_check
-rwsr-xr-x. 1 root root  34840 10月 15 2014 /sbin/unix_chkpwd
-rwsr-xr-x. 1 root root  54240 1月  30 2012 /usr/bin/at
-rwsr-xr-x. 1 root root  66352 10月 15 2014 /usr/bin/chage
-rwsr-xr-x. 1 root root  51784 11月 23 2013 /usr/bin/crontab
-rwsr-xr-x. 1 root root  71480 10月 15 2014 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root  36144 10月 15 2014 /usr/bin/newgrp
-rwsr-xr-x. 1 root root  30768 2月  22 2012 /usr/bin/passwd
-rwsr-xr-x. 1 root root  22544 10月 15 2014 /usr/bin/pkexec
-rwsr-xr-x. 1 abrt abrt  10296 10月 16 2014 /usr/libexec/abrt-action-install-debuginfo-to-abrt-cache
-rwsr-xr-x. 1 root root 257824 10月 15 2014 /usr/libexec/openssh/ssh-keysign
-rwsr-xr-x. 1 root root  14368 10月 15 2014 /usr/libexec/polkit-1/polkit-agent-helper-1
-rwsr-xr-x. 1 root root   9000 10月 16 2014 /usr/sbin/usernetctl

 

 

注意:打包要在需要打包的目录的上级目录下打包   这样就不会出现打包的时候打印多余的信息

 

检查自定义的定时任务是否正确(查看定时日志)

可以用tail -f /var/log/cron*来查看定时任务输出的格式是否正确,如果这个任务有问题的话,那么任务执行后的语法是有问题的,那么这时候就要修改了

 

date

date 后可以跟%F %Y %m  %d  %y  %H %M %S   

后面加参数 -d的时候可以跟 day  hour min  sec

例如  date  +%F-%H  -d  "3day"

[root@goser ~]# date  +%F
2017-09-10
[root@goser ~]# date  +%F-%H  -d  "3day"
2017-09-13-22
[root@goser ~]# 

 

linux中的命令行快捷方式

Ctrl + a   切换到命令行开头

Ctrl + e   切换到命令行末尾

Ctrl + c   终止当前命令

Ctrl + d   退出当前shell

Ctrl + l    清楚屏幕内容  相当于clear方法

Ctrl + u   清楚(剪切)命令行当前光标之前的内容

Ctrl + k   清楚(剪切)命令行当前光标之后的内容

Ctrl + r   查找

Ctrl + shift +c   复制选中的内容  ---------ctrl + insert

Ctrl + shift +v   粘贴内容     -------shift + insert

 

/etc/login.defs配置文件的作用

改配置文件是用来定义创建用户时需要的一些用户的配置信息。如创建用户时是否需要家目录,UID和GID的范围,用户及密码的有效期等。

比如创建用户时,用户的家目录的权限为什么是700  这是由于这个配置文件中的UMASK=007    所以创建的用户的家目录的权限为777-077=700

还要一个配置文件在useradd创建用户的时候赋予的默认值/etc/default/useradd

 

useradd  创建用户的时候可以指定参数有:-d 指定家目录   -M 表示创建用户的时候无家目录  -s 指定shell环境   -c 对创建的用户说明  -e 表示过期日期(-e '2017/09/12'  用户)

    -u 指定UID  -g 加入到指定的组   -G 加入到指定的多个组

usermod 当然对于创建好的用户还可以对其修改 :配合的参数同上

查看用户的过期时间用chage  -l  用户

 

非交换环境下给普通用户设置密码

echo  123456|passwd  --stdin  用户     给用户设置密码为123456

passwd 参数有   -w  警告    -n 密码最小修改天数   -x 密码最大修改天数  -e密码过期日期  -l 锁定密码修改   -u 解除密码修改锁定

 

查看当前系统登录的用户信息命令:w   who  users  last  lastlog  id  groups

 

在开机启动的时候用oldboy用户执行一个脚本,这样做的好处是,用普通用户运行的脚本安全性得到了提高,这里su - 从root切换到oldboy的时候用-c来指定用户执行脚本命令

比如在/etc/rc.local中添加  su - oldboy  -c  "/bin/sh  /server/scripts/test.sh"

 

sudo的原理

当普通用户操作sudo的时候,首先要用 ll /var/db/sudo/中查找是否有这个用户对用的时间戳,如果这个用户上次用过sudo命令正确操作过,那么这个时间戳就会存在,如果这个用户对应的

时间戳过期了,再用sudo命令操作的话就要输入这个用户自己的密码。当用户时间戳没有过期或者用户输入的自己的密码正确后就会在/etc/sudoers的配这文件中查找是否有sudo 对应的操作命令,如果有权限则通过,同时在/var/db/sudo/中更新时间戳;如果没有权限,则输出没有权限的提示并退出。

如果普通用户想查看root管理员给自己的分配的sudo权限,用sudo -l命令

如果/etc/suders配置文件被修改了,建议修改后应检查此配置文件的语法是否错误。用visudo -c来检查。如果语法错误,那么用户sudo是无法操作的

 

查看DNS解析过程   比如访问百度的情况下,查看DNS的解析过程

[root@goser ~]# dig @8.8.8.8  www.baidu.com  +trace

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> @8.8.8.8 www.baidu.com +trace
; (1 server found)
;; global options: +cmd
.                       215735  IN      NS      d.root-servers.net.
.                       215735  IN      NS      j.root-servers.net.
.                       215735  IN      NS      k.root-servers.net.
.                       215735  IN      NS      c.root-servers.net.
.                       215735  IN      NS      m.root-servers.net.
.                       215735  IN      NS      h.root-servers.net.
.                       215735  IN      NS      g.root-servers.net.
.                       215735  IN      NS      a.root-servers.net.
.                       215735  IN      NS      e.root-servers.net.
.                       215735  IN      NS      f.root-servers.net.
.                       215735  IN      NS      b.root-servers.net.
.                       215735  IN      NS      l.root-servers.net.
.                       215735  IN      NS      i.root-servers.net.
;; Received 228 bytes from 8.8.8.8#53(8.8.8.8) in 117 ms

com.                    172800  IN      NS      a.gtld-servers.net.
com.                    172800  IN      NS      b.gtld-servers.net.
com.                    172800  IN      NS      c.gtld-servers.net.
com.                    172800  IN      NS      d.gtld-servers.net.
com.                    172800  IN      NS      e.gtld-servers.net.
com.                    172800  IN      NS      f.gtld-servers.net.
com.                    172800  IN      NS      g.gtld-servers.net.
com.                    172800  IN      NS      h.gtld-servers.net.
com.                    172800  IN      NS      i.gtld-servers.net.
com.                    172800  IN      NS      j.gtld-servers.net.
com.                    172800  IN      NS      k.gtld-servers.net.
com.                    172800  IN      NS      l.gtld-servers.net.
com.                    172800  IN      NS      m.gtld-servers.net.
;; Received 491 bytes from 193.0.14.129#53(193.0.14.129) in 257 ms

baidu.com.              172800  IN      NS      dns.baidu.com.
baidu.com.              172800  IN      NS      ns2.baidu.com.
baidu.com.              172800  IN      NS      ns3.baidu.com.
baidu.com.              172800  IN      NS      ns4.baidu.com.
baidu.com.              172800  IN      NS      ns7.baidu.com.

;; Received 201 bytes from 192.33.14.30#53(192.33.14.30) in 20432 ms

www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns4.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns2.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns5.a.shifen.com.
a.shifen.com.           1200    IN      NS      ns1.a.shifen.com.
;; Received 228 bytes from 220.181.38.10#53(220.181.38.10) in 32 ms

  

已知一个端口,如何查看这个端口被什么服务占用

比如查看52113端口

[root@goser ~]# lsof -i :52113
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     905   root    3u  IPv4   9718      0t0  TCP 192.168.1.101:52113 (LISTEN)
sshd    4482   root    3r  IPv4  39807      0t0  TCP 192.168.1.101:52113->192.168.1.3:saphostctrls (ESTABLISHED)
sshd    4485 oldboy    3u  IPv4  39807      0t0  TCP 192.168.1.101:52113->192.168.1.3:saphostctrls (ESTABLISHED)

当然还可以用netstat -lntup|grep 52113来查看端口对应的进程

[root@goser ~]# netstat  -lntup|grep 52113
tcp        0      0 192.168.1.101:52113         0.0.0.0:*                   LISTEN      905/sshd 

  

 sudo命令的日志审计

1、首先定义sudo日志审计的日志文件

[root@goser ~]# echo  "Defaults       logfile=/var/log/sudo.log">>/etc/sudoers

检查sudoers文件的语法visudo -c

2、定义系统日志的记录文件rsyslog

[root@goser ~]# echo  "local2.debug      /var/log/sudo.log">>/etc/rsyslog.conf

重启rsyslog服务,生成日志文件sudo.log

[root@goser ~]# /etc/init.d/rsyslog restart

3、普通用户用sudo命令检测日志文件sudo.log中是否有记录

普通用户操作sudo

[oldboy@goser ~]$ sudo  su -
this is my test env

root用户检查日志文件内容

[root@goser ~]# cat /var/log/sudo.log 
Sep 12 10:04:59 : oldboy : TTY=pts/0 ; PWD=/home/oldboy ; USER=root ;
    COMMAND=/bin/su -

从日志文件中的内容可以看出,日志文件记录了普通用户的sudo命令的操作

 上面的日志审计只是在本机上做审计,最好的方式应该将此审计日志实时的推送到一台集中式的日志审计服务器上。

 

vi编辑器中的常用的快捷命令:

gg  光标移到首行

shift +g 光标移到到尾行

数字+gg  光标移到指定的数字的行

shift + ^   光标移到行首

shift+ $  光标移到到行尾

dd     删除光标所在的当前行

u       退回到上次操作前的状态    回滚到操作前的意思

o        在光标所在行下生成新的一行

yy       复制光标所在的行

数字+yy   复制光标所在的行到下面数字指定的行

p     黏贴剪切板中的数据到光标所在的行

/字符串    搜索字符串    n  向下查找   -N 向上查找

替换 的方式为

:g/被替换的内容/s//需替换成的内容/g

 

free  -m来显示系统的内存使用情况

buffers   数据写入的缓存区,rsyn  将缓存区的数据flush到硬盘

cashe    数据读入缓存区,从硬盘读取数据到cashe缓存区 

[root@goser ~]# free   -m
             total       used       free     shared    buffers     cached
Mem:           980        697        283          0         70        459
-/+ buffers/cache:        168        812
Swap:          511          0        511

这里的内存大小不是 mem:后面的283,而是812

 

计算磁盘的大小

扇区大小(512)*扇区数*磁道数(柱面数)*磁头数=硬盘容量大小

例如

[root@goser ~]# fdisk  -l  /dev/sda

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000132b6  

计算的磁盘容量大小为:512*63*1305*255

[root@goser ~]# echo '512*63*1305*255'|bc
10733990400

计算的结果和fdisk -l 查看硬盘的大小基本上相同

 磁盘分区命令fdisk -cu /dev/sdb

最后再用partprobe  /dev/sdb   通知系统分区表的变化,这样就不需要重启系统了

如果磁盘容量大于2T的话,这时候就无法用fdisk 来分区了  只能用parted来分区

parted分区命令为

分区前将模式改成gpt,可以用交互式模式分区,也可以使用非交互式分区方式。下面的命令做非交互式分区

parted /dev/sdb mklabel  gpt  yes    

parted /dev/sdb mkpart primary ext4 0 10 Ignore

parted /dev/sdb mkpart primary linux-swap 11 20 Ignore

parted /dev/sdb mkpart logical  ext4 21 30 Ignore

parted /dev/sdb p

parted分区是实时生效的,不需要做额外的保存,退出分区操作自动保存。不想fdisk 命令分区的时候退出先w保存后才生效

做完分区后就可以格式化分区了(格式化生成inode和block)

mkfs.ext4  /dev/sdb1

格式化后会有一个提示如下:

This filesystem will be automatically checked every 36 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

意思是每隔180天要自动检查挂载,提示用Use tune2fs -c or -i to override.取消 

tune2fs -c -1  /dev/sdb1

格式化后就可以挂载分区到挂载点了,可以用mount命令挂载,推荐在fstab配置文件中挂载

mount  /dev/sdb1  /mnt

mount  -a   表示对fstab配置文件中配置的挂载进行挂载

这样分区就可以正常使用了。。。。

 

查看linux系统支持的文件系统命令

[root@lnmp01 ~]# ll /lib/modules/`uname -r`/kernel/fs/ 
total 132
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 autofs4
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 btrfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 cachefiles
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 cifs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 configfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 cramfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 dlm
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 ecryptfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 exportfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 ext2
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 ext3
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 ext4
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 fat
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 fscache
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 fuse
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 gfs2
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 jbd
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 jbd2
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 jffs2
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 lockd
-rwxr--r--. 1 root root 19944 Oct 15  2014 mbcache.ko
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 nfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 nfs_common
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 nfsd
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 nls
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 squashfs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 ubifs
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 udf
drwxr-xr-x. 2 root root  4096 Sep  5 21:35 xfs

  

fstab修改错误导致文件系统无法启动故障修复

在救援模式或维护模式下,用mount -o remount,rw /   然后修改fstab

同理如果系统出现只读模式,用mount -o remount,rw /修复

 

scp远程拷贝文件,是一种全量拷贝,如果要进行增量拷贝用rsync

如:scp -P22 -rp /tmp/ root@192.168.1.104:/tmp/    将本地文件拷贝到远端,同样也可以将远端文件拷贝到本地  

这里的参数:-r  递归包含拷贝目录   -p保持属性    -P表示指定的端口

 

linux下邮件发送的两种常见方法

方式一、启postfix服务,这种方式发很可能会被屏蔽掉,不建议用这种方式。

  /etc/init.d/postfix start

  发邮件

  mail -s oldboy 3900000@qq.com < /etc/hosts

方式二、领用第三方的邮件服务器发送邮件

  比如在/etc/mail.rc中配置163邮件服务器为媒介来发送邮件

set from=ceshi@163.com smtp=smtp.163.com
set smtp-auth-user=ceshi smtp-auth-password=abcdefg123 smtp-auth=login

  发邮件

  mail -s oldboy 3900000@qq.com < /etc/hosts

方式二的发送邮件基本上没问题,测试都很正常,建议使用此方法。

 

已知端口号查对应的服务是什么 

[root@lnmp01 ~]# grep "3306" /etc/services 
mysql           3306/tcp                        # MySQL
mysql           3306/udp                        # MySQL

 

创建辅助ip

ip addr add  192.168.1.100/24  dev  eth0

 

sort 和uniq 

sort 为文件内容排序,-u表示排序的同时去重,这个参数使用只是对相邻的行去重,而不是相同的内容的整体去重;-r参数表示按倒序排序,默认是正序;-t表示以什么作为分隔符,这个参数常和-k(第几列)参数配合使用

例如:如文件test.txt中的ip的第三列和第四类按倒序排列

192.168.12.1
192.168.1.134
192.168.1.12
192.168.12.13
192.168.10.1
192.168.10.12
192.168.1.9
192.168.12.11

使用命令为:sort -t. -k3.1,3.2nr -k4.1,4.3nr test.txt   结果为:

[root@mysqlserver ~]# sort -t. -k3.1,3.2nr -k4.1,4.3nr test.txt 
192.168.12.13
192.168.12.11
192.168.12.1
192.168.10.12
192.168.10.1
192.168.1.134
192.168.1.12
192.168.1.9

uniq  对相邻的相同内容的行去重,但不是对整个文件中内容相同的行去重。-c参数表示对相邻的内容行去重并记数。

示例:统计ip在文件test.txt中的数量

[root@mysqlserver ~]# cat test.txt 
192.168.10.1 adfsfsf
192.168.10.2 fgfgsd
192.168.10.9  dmofsfa
192.168.10.1  dsadfmodf
192.168.10.2  nisadfa
192.168.10.8  modfsaf
192.168.10.9  mo23sdfa
192.168.10.8  mofsaf
192.168.10.2  234msdfa

统计方法一:

[root@mysqlserver ~]# awk '{print $1}' test.txt |sort |uniq  -c|sort -rn
      3 192.168.10.2
      2 192.168.10.9
      2 192.168.10.8
      2 192.168.10.1

统计方法二:

[root@mysqlserver ~]# awk  '{S[$1]++}END{for(k in S) print S[k],k}' test.txt |sort -rn
3 192.168.10.2
2 192.168.10.9
2 192.168.10.8
2 192.168.10.1

  

找回并修改mysql单实例root密码  ,用--skip-grant-tables。先停掉mysql,然后用--skip-grant-tables跳过授权表,这时候进入的时候直接输入mysql就可以了,这时候进入mysql命令操作界面,对root设置密码即可

[root@mysqlserver ~]# /etc/init.d/mysqld stop  

[root@mysqlserver ~]# mysqld_safe --skip-grant-tables --user=mysql &

mysql

对于多实例找回并修改root密码的方法为:

[root@moremysql ~]# mysqladmin -uroot -p123456 -S /data/3306/mysql.sock shutdown

[root@moremysql ~]# mysqld_safe --defaults-file=/data/3306/my.cnf --skip-grant-tables &

[root@moremysql ~]# mysql -S /data/3306/mysql.sock 

mysql> update mysql.user set password=PASSWORD('goser123') where user='root' and host='localhost';

mysql> flush privileges;

 

数据库中查看字符集  mysql> show character set;

查看创建的数据库详情:  mysql> show  create  database wordpress;

创建表userinfo:

CREATE TABLE `userinfo` (
  id int(23) not null auto_increment primary key,
  `name` int(32) NOT NULL,
  `age` tinyint(2) NOT NULL,
  `address` varchar(128) DEFAULT NULL,
  key index_name(name)
);

查看创建的表详情:mysql> show  create  table userinfo;

查看表结构:desc  userinfo;

对表的某个字段添加索引:mysql> alter table userinfo  add index  age_index (age); 删除索引的话:mysql> alter table userinfo  drop index  age_index;

查看表的索引字段:show  index from  userinfo \G

创建数据库时制定字符集:mysql> create database goser  character set  utf8 COLLATE utf8_general_ci;  如果安装mysql的时候制定了字符集utf8,那么创建数据库时可以不制定字符集

查看当前所在的数据库: select  database();

查看数据库的版本: select  version();

查看当前数据库用户:select user();

删除多余的账号:drop  user  'root'@'::1';   如果host主机是大写或特殊字符的话要用delete才能删除

对一个用户授予root一样的权限要用with grant option  : grant all on *.* to  'goser'@'host_ip' identified by '123456' with grant option;

查看一个用户所拥有的权限:show  grants for   'goser'@'host_ip' ;

回收用户的部分权限:mysql> REVOKE INSERT,delete,update ON *.* FROM 'goser'@'host_ip'; 

 

 

对字段的前N个字符创建普通索引

当遇到表中比较大的列时,列内容的前N个字符在所有内容中已经接近唯一时,这时可以对列的前N个字符创建索引,而无需对整个列建立索引,
这样可以节省创建索引占用的系统空间,以及降低读取和更新维护索引消耗的系统资源。

mysql> create  index addr_index on userinfo(address(10));  


mysql> show index from userinfo\G
*************************** 4. row ***************************
        Table: userinfo
   Non_unique: 1
     Key_name: addr_index
 Seq_in_index: 1
  Column_name: address
    Collation: A
  Cardinality: 0
     Sub_part: 10
       Packed: NULL
         Null: YES
   Index_type: BTREE

  当然也可以使用alter命令来修改:

mysql> alter table userinfo add  index  addr_index(address(10));

mysql> show index  from  userinfo\G

  

关于联合索引具有前缀特性,一般应将经常查询的字段放在联合索引的前面,因为联合索引查询的规则是这样的

比如有A B C三个字段需要做联合索引,如果他们做联合索引的顺序是ABC,那么查询规则为:

A或AB或ABC,

而对于B或BC或C或AC这样是不可以的。

创建联合索引:mysql> create index age_addr_index on userinfo(age,address(10));

 

插入数据可以一次插入多个,这个比较有效率

比如:insert into userinfo  vlues(1,'goser',22,'sh'),(2,'tomashi',30,'bj');

 

select查询范围:

比如:select  id,name  from  userinfo  limit  2,8  表示打印出从第二行记录开始打印8行记录,不包含第二行记录

select  id,name from userinfo where  id>1 and  id<10 oder by id desc 表示按id在1到10之间的记录按降序打印出来,还可对打印的记录导入到linux文件中

比如  select  id,name from userinfo where  id>1 and  id<10 oder by id desc intooutfile '/tmp/a.,txt'; 表示将打印的记录导入到文件a.txt中。这样就可以在linux系统环境中来使用这个文件了。

 

************这个很重要,在数据库查询调优很重要。。

explain用来检查语句的执行计划,比如select查询效率如何,有没有用索引查询。。等

mysql> explain  select  * from userinfo where  name='goser'\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: userinfo
         type: ref
possible_keys: index_name
          key: index_name
      key_len: 4
          ref: const
         rows: 2

用explain就可以对执行的语句进行查看,语句执行很慢那么有可能是where 后面的字段没有用索引,这时候加上索引就行了。

 

抓慢查询

在mysql命令外面执行show full processlist;这样抓慢查询的效果比较好

比如:mysql -uroot -p123456  -e "show full processlist;" |grep -i select   隔2秒执行一次这个命令,如果有些select语句执行这个命令后还存在,说明

这个select查询是慢的,然后再用explain检查这个select语句的执行计划,看有些字段是否由索引,加索引就解决了。

当然也可以用慢查询的分析工具 mysqlsla来做日常slow.log日志分析

 

清空整个表记录

mysql>truncate  table 表名     这个命令类似于delete from  表名;

区别:truncate 删除记录速度更快。直接清空对应数据的物理文件;而delete删除记录速度慢,逻辑清除,按行删。

 

多库备份一定要加-B :加上-B不仅备份的时候有create database语句和use database,还可让备份多库的时候区分多库是数据库而不是一个库后面都是表

例如:mysqldump -uroot -p123456  -B  class  student score |gzip>shchool.sql.gz   如果没有-B的话,那么除了class外student score库都被认为是表来备份

当然也可以分库备份,也就是一个一个备份,根据企业实际情况来备份

单表备份,在备份的时候需要在指定库后加上表   如:mysqldump -uroot -p123456    class  info>class_info.sql 这时候就不要加-B了,如果备份表的时候加-B,那么表就当库备份了

多表备份,在库后跟多个表名就行了  mysqldump -uroot -p123456    class  info  shool>class_shool_info.sql 

只备份表结构用-d  :mysqldump -uroot -p123456   -d  class  info>class_info.sql  表示只备份info表的表结构,内容没有备份

只备份表的内容-t  :mysqldump -uroot -p123456   -t  class  info>class_info.sql  表示只备份info表的表内容,表结构没有备份

--single-transaction :备份的时候可以加这个参数,类似于-x锁表,但它又不同于-x ,用它备份的时候不锁表,数据库表还是可读写的,不过这个参数只支持innodb引擎,-x支持所有引擎。

xtrabackup物理备份工具:全被和增量。数据大于50G用,小于50G用mysqldump就行了

show variables; 查看mysql服务配置参数信息,例如配置文件中的参数生效情况

show  status;  查看当前会话的数据库状态信息,比如sql查询数,insert数,delete数等。。

 

mysql线程过多的问题解决办法:

在命令行输入:set global wait_timeout = 60;  set  interactive_timeout = 60;

在配置文件中设置:

[mysqld]

wait_timeout = 120

interactive_timeout = 120

 

mysql生产场景常用的重要命令小结

show  full  processlist  ----------------------------查看正在执行的完整sql语句,完整显示

set global  key_buffer_size = 32777218 ---------------------设置索引的缓存大小,不重启数据库直接生效,重启数据库失效,所以要在配置文件中也要设置key_buffer_size = 32777218 这个值尽量设置大些

show  global status  -----------------------------查看整个数据库运行状态信息,很重要,要分析并做好监控。

show  engine innodb status  --------------------显示innodb引擎的性能状况

 

echo -e 处理特殊字符

若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
比如  echo  '\t aaa'输出为\t aaa   如果加上-e   echo -e  '\t aaa' 那么输出的就为:         aaa
 
seq -w表示和参数后面的数字同宽  比如:seq -w  10  输出为:
01
02
03
....
 
 
取随机5位字符,从第三个字符开始到第六个字符,最后一个是第八位字符
echo  $RANDOM|md5sum|cut -c 3-6,8   可能的结果为:3311e      这里的-c :以字符为单位进行分割。
随机数生成还可以用:openssl rand -base64 数字   比如:openssl rand -base64  8  生成的随机数可能为:b0B7q9MgnBKm
时间随机数:date +%s%N   可能的随机数为:1505725297022342682
head产生随机数:head /dev/urandom|cksum     可能的随机数为:2747372516 1481
用uuid生成随机数:cat  /proc/sys/kernel/random/uuid     生成的随机数可能为:380d48d4-e5d6-4762-9945-8eeb74bd941a
 
 
chpasswd批量创建密码,前提是已经创建了用户,而且在文件中书写格式为:用户名:密码
比如:文件password.log文件中内容为
zhangsan:123
lisi:456
那么对这些用户创建密码:chpasswd<password.log就可以了
 
 
shell 调试方式 :可以在命令行调试,也可以在脚本文件中对部分内容进行调试
命令行调试:sh   -x  test.sh
脚本文件中对部分内容的调试:用set
set -x     设置调试
touch  file.log
set +x    取消调试
 也可以用echo  变量和输出的内容;exit 方式来部分测试
如果是在window上编写的脚本,放到linux环境下执行的话,可能会报错,这时候应该对脚本做格式化处理,用dos2unix来格式化操作 dos2unix  test.sh
 
 
系统性能监视高级命令:
内存监视:top sar vmstat  iostat mpstat free
cpu监视:top sar vmstat  iostat mpstat
IO监视:sar vmstat  iostat mpstat
进程监视:ipcs strace lstrace lsof 
负载:uptime
 
centos7更改网卡名称为eth0方法:
1、cd /etc/sysconfig/network-scripts/
2、mv ifcfg-eno16777736 ifcfg-eth0
3、vim  ifcfg-eth0的网卡设备名称修改成DEVICE="eth0"   NAME="eth0"
4、配置grub   vim /etc/default/grub   修改部分为:GRUB_CMDLINE_LINUX="crashkernel=auto id.lvm.lv=centos/root "net.ifnames=0 biosdevname=0" rd.lvm.lv=centos/swap rhgb quiet"
  或者在安装的centos7的时候光标选择install centos7然后按tab健输入net.ifnames=0 biosdevname=0就行了
5、运行命令grub2-mkconfig -o /boot/grub2/grub.cfg 来重新生成GRUB配置并更新内核参数。
6、重新启动机器,启动完之后网卡名称就变成了Eth0
 
centos7修改主机名:hostnamectl  set-hostname  要设置的主机名
 
snmp监控主机的系统运行状况
被监控端只要安装net-snmp 
yum  install  net-snmp  -y
 监控端安装net-snmp-utils即可
yum install  net-snmp-utils  -y 

然后在被监控端编辑snmpd.conf配置文件,添加如下内容

cd  /etc/snmp/
mv  snmpd.conf  snmpd.conf.bak

vim  snmpd.conf
#这里的ip地址为被监控端的ip地址
rocommunity     goser   192.168.182.170

#修改完snmp的配置文件后,重启snmp使配置生效
systemctl  restart  snmpd

这样在监控端就可以使用安装的net-snmp-utils包时生成的工具来操作、监控被监控端的系统运行状况。比如监控被监控端的负载情况如下:

[root@linux-node1 snmp]# snmpwalk -v2c  -c  goser  192.168.182.170  1.3.6.1.4.1.2021.10.1.3
UCD-SNMP-MIB::laLoad.1 = STRING: 0.00
UCD-SNMP-MIB::laLoad.2 = STRING: 0.01
UCD-SNMP-MIB::laLoad.3 = STRING: 0.05 

snmp常用的oid如下:

服务器负载:
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3

CPU信息:
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0

内存使用:
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0

硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1

系统运行时间:
.1.3.6.1.2.1.1.3.0

SNMP System Group:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
sysLocation 1.3.6.1.2.1.1.6
sysServices 1.3.6.1.2.1.1.7

SNMP Interfaces Group:
ifNumber 1.3.6.1.2.1.2.1
ifTable 1.3.6.1.2.1.2.2
ifEntry 1.3.6.1.2.1.2.2.1
ifIndex 1.3.6.1.2.1.2.2.1.1
ifDescr 1.3.6.1.2.1.2.2.1.2
ifType 1.3.6.1.2.1.2.2.1.3
ifMtu 1.3.6.1.2.1.2.2.1.4
ifSpeed 1.3.6.1.2.1.2.2.1.5
ifPhysAddress 1.3.6.1.2.1.2.2.1.6
ifAdminStatus 1.3.6.1.2.1.2.2.1.7
ifOperStatus 1.3.6.1.2.1.2.2.1.8
ifLastChange 1.3.6.1.2.1.2.2.1.9
ifInOctets 1.3.6.1.2.1.2.2.1.10
ifInUcastPkts 1.3.6.1.2.1.2.2.1.11
ifInNUcastPkts 1.3.6.1.2.1.2.2.1.12
ifInDiscards 1.3.6.1.2.1.2.2.1.13
ifInErrors 1.3.6.1.2.1.2.2.1.14
ifInUnknownProtos 1.3.6.1.2.1.2.2.1.15
ifOutOctets 1.3.6.1.2.1.2.2.1.16
ifOutUcastPkts 1.3.6.1.2.1.2.2.1.17
ifOutNUcastPkts 1.3.6.1.2.1.2.2.1.18
ifOutDiscards 1.3.6.1.2.1.2.2.1.19
ifOutErrors 1.3.6.1.2.1.2.2.1.20
ifOutQLen 1.3.6.1.2.1.2.2.1.21
ifSpecific 1.3.6.1.2.1.2.2.1.22

SNMP IP Group
ipForwarding 1.3.6.1.2.1.4.1
ipDefaultTTL 1.3.6.1.2.1.4.2
ipInReceives 1.3.6.1.2.1.4.3
ipInHdrErrors 1.3.6.1.2.1.4.4
ipInAddrErrors 1.3.6.1.2.1.4.5
ipForwDatagrams 1.3.6.1.2.1.4.6
ipInUnknownProtos 1.3.6.1.2.1.4.7
ipInDiscards 1.3.6.1.2.1.4.8
ipInDelivers 1.3.6.1.2.1.4.9
ipOutRequests 1.3.6.1.2.1.4.10
ipOutDiscards 1.3.6.1.2.1.4.11
ipOutNoRoutes 1.3.6.1.2.1.4.12
ipReasmTimeout 1.3.6.1.2.1.4.13
ipReasmReqds 1.3.6.1.2.1.4.14
ipReasmOKs 1.3.6.1.2.1.4.15
ipReasmFails 1.3.6.1.2.1.4.16
ipFragsOKs 1.3.6.1.2.1.4.17
ipFragsFails 1.3.6.1.2.1.4.18
ipFragCreates 1.3.6.1.2.1.4.19
ipAddrTable 1.3.6.1.2.1.4.20
ipAddrEntry 1.3.6.1.2.1.4.20.1
ipAdEntAddr 1.3.6.1.2.1.4.20.1.1
ipAdEntIfIndex 1.3.6.1.2.1.4.20.1.2
ipAdEntNetMask 1.3.6.1.2.1.4.20.1.3
ipAdEntBcastAddr 1.3.6.1.2.1.4.20.1.4
ipAdEntReasmMaxSize 1.3.6.1.2.1.4.20.1.5

SNMP ICMP Group
icmpInMsgs 1.3.6.1.2.1.5.1
icmpInErrors 1.3.6.1.2.1.5.2
icmpInDestUnreachs 1.3.6.1.2.1.5.3
icmpInTimeExcds 1.3.6.1.2.1.5.4
icmpInParmProbs 1.3.6.1.2.1.5.5
icmpInSrcQuenchs 1.3.6.1.2.1.5.6
icmpInRedirects 1.3.6.1.2.1.5.7
icmpInEchos 1.3.6.1.2.1.5.8
icmpInEchoReps 1.3.6.1.2.1.5.9
icmpInTimestamps 1.3.6.1.2.1.5.10
icmpInTimestampReps 1.3.6.1.2.1.5.11
icmpInAddrMasks 1.3.6.1.2.1.5.12
icmpInAddrMaskReps 1.3.6.1.2.1.5.13
icmpOutMsgs 1.3.6.1.2.1.5.14
icmpOutErrors 1.3.6.1.2.1.5.15
icmpOutDestUnreachs 1.3.6.1.2.1.5.16
icmpOutTimeExcds 1.3.6.1.2.1.5.17
icmpOutParmProbs 1.3.6.1.2.1.5.18
icmpOutSrcQuenchs 1.3.6.1.2.1.5.19
icmpOutRedirects 1.3.6.1.2.1.5.20
icmpOutEchos 1.3.6.1.2.1.5.21
icmpOutEchoReps 1.3.6.1.2.1.5.22
icmpOutTimestamps 1.3.6.1.2.1.5.23
icmpOutTimestampReps 1.3.6.1.2.1.5.24
icmpOutAddrMasks 1.3.6.1.2.1.5.25
icmpOutAddrMaskReps 1.3.6.1.2.1.5.26

SNMP TCP Group:
tcpRtoAlgorithm 1.3.6.1.2.1.6.1
tcpRtoMin 1.3.6.1.2.1.6.2
tcpRtoMax 1.3.6.1.2.1.6.3
tcpMaxConn 1.3.6.1.2.1.6.4
tcpActiveOpens 1.3.6.1.2.1.6.5
tcpPassiveOpens 1.3.6.1.2.1.6.6
tcpAttemptFails 1.3.6.1.2.1.6.7
tcpEstabResets 1.3.6.1.2.1.6.8
tcpCurrEstab 1.3.6.1.2.1.6.9
tcpInSegs 1.3.6.1.2.1.6.10
tcpOutSegs 1.3.6.1.2.1.6.11
tcpRetransSegs 1.3.6.1.2.1.6.12
tcpConnTable 1.3.6.1.2.1.6.13
tcpConnEntry 1.3.6.1.2.1.6.13.1
tcpConnState 1.3.6.1.2.1.6.13.1.1
tcpConnLocalAddress 1.3.6.1.2.1.6.13.1.2
tcpConnLocalPort 1.3.6.1.2.1.6.13.1.3
tcpConnRemAddress 1.3.6.1.2.1.6.13.1.4
tcpConnRemPort 1.3.6.1.2.1.6.13.1.5
tcpInErrs 1.3.6.1.2.1.6.14
tcpOutRsts 1.3.6.1.2.1.6.15

SNMP UDP Group
udpInDatagrams 1.3.6.1.2.1.7.1
udpNoPorts 1.3.6.1.2.1.7.2
udpInErrors 1.3.6.1.2.1.7.3
udpOutDatagrams 1.3.6.1.2.1.7.4
udpTable 1.3.6.1.2.1.7.5
udpEntry 1.3.6.1.2.1.7.5.1
udpLocalAddress 1.3.6.1.2.1.7.5.1.1
udpLocalPort 1.3.6.1.2.1.7.5.1.2

SNMP Group:
snmpInPkts 1.3.6.1.2.1.11.1
snmpOutPkts 1.3.6.1.2.1.11.2
snmpInBadVersions 1.3.6.1.2.1.11.3
snmpInBadCommunityNames 1.3.6.1.2.1.11.4
snmpInBadCommunityUses 1.3.6.1.2.1.11.5
snmpInASNParseErrs 1.3.6.1.2.1.11.6
NOT USED 1.3.6.1.2.1.11.7
snmpInTooBigs 1.3.6.1.2.1.11.8
snmpInNoSuchNames 1.3.6.1.2.1.11.9
snmpInBadValues 1.3.6.1.2.1.11.10
snmpInReadOnlys 1.3.6.1.2.1.11.11
snmpInGenErrs 1.3.6.1.2.1.11.12
snmpInTotalReqVars 1.3.6.1.2.1.11.13
snmpInTotalSetVars 1.3.6.1.2.1.11.14
snmpInGetRequests 1.3.6.1.2.1.11.15
snmpInGetNexts 1.3.6.1.2.1.11.16
snmpInSetRequests 1.3.6.1.2.1.11.17
snmpInGetResponses 1.3.6.1.2.1.11.18
snmpInTraps 1.3.6.1.2.1.11.19
snmpOutTooBigs 1.3.6.1.2.1.11.20
snmpOutNoSuchNames 1.3.6.1.2.1.11.21
snmpOutBadValues 1.3.6.1.2.1.11.22
NOT USED 1.3.6.1.2.1.11.23
snmpOutGenErrs 1.3.6.1.2.1.11.24
snmpOutGetRequests 1.3.6.1.2.1.11.25
snmpOutGetNexts 1.3.6.1.2.1.11.26
snmpOutSetRequests 1.3.6.1.2.1.11.27
snmpOutGetResponses 1.3.6.1.2.1.11.28
snmpOutTraps 1.3.6.1.2.1.11.29
snmpEnableAuthenTraps 1.3.6.1.2.1.11.30
snmp常用的oid

 

cpu监控命令有 top  mpstat  vmstat 使用这些命令需要安装软件包为:yum  install  sysstat -y    安装完这个包后会生成命令有mpstat vmstat  iostat等

  cpu监控的触发点一般设置为:用户态:65%到70%     内核态:30%到35%    空闲:0%到5%

内存监控命令有:  free  -m   vmstat     监控触发点一般为:80%

磁盘监控的命令有: df  -h    iostat   iotop   ,这个iotop命令需要安装这个工具包:yum install  iotop  -y

 

 检测网站的性能

1、站长工具:http://ping.chinaz.com/

2、奇云测:http://ce.cloud.360.cn/task

 

 vip地址永久生效方法:

进入网卡配置目录:cd  /etc/sysconfig/network-scriripts/下

复制一个物理网卡的配置文件:cp   ifcfg-eth0   ifcfg-eth0:1

修改 ifcfg-eth0:1的ip地址改成vip地址,DEVICE=eth0:1即可,最后重启网络服务:/etc/init.d/network  restart  这样vip地址生效,而且vip地址的配置永久生效(即使设备重启)

 

为什么Linux命令行下按下退格键它不删除光标前的字符却会输入乱码

问题:可是按下退格键会输入乱码,变成mynsme^H了, 按下退格键它不删除光标前的字符啊,怎么回事...

解决方式为:ctrl+backspace即可

 

 centos7输入命令的时候命令不能补全的解决办法,这是因为没有安装bash-completion包,安装即可

centos7查看服务的开机启动项使用命令:systemctl   list-unit-files

 

让历史记录记录日期时间和操作者:

[root@master base]# export HISTTIMEFORMAT="%F %T `whoami` => "

查看history,这时候格式如下:

  299  2018-06-12 21:53:06 root => vim  grains 
  300  2018-06-12 21:53:15 root => salt  -G "web:nginx"  test.ping
  301  2018-06-12 21:53:26 root => mv  grains grain
  302  2018-06-12 21:53:29 root => salt  -G "web:nginx"  test.ping

  

将historyj记录输入的命令记录到message日志文件中

export PROMPT_COMMAND='{ msg=$(history 1 | { read x y ; echo $y ;});logger "[euid=$(whoami)]":$(who am i):[`pwd`]" $msg";}'  

输入一个命令查看message日志内容增加如下:

[root@master base]# ls 
[root@master base]# tail   /var/log/messages
Jun 12 22:42:24 master root: [euid=root]:root pts/0 2018-06-12 21:22 (192.168.1.4):[/var/salt/base] 2018-06-12 22:42:24 root => ls

  

查看一个命令执行所消耗的时间,使用time命令,比如查看curl命令所用的时间

[root@linux-node1 ~]# time  curl -I baidu.com
HTTP/1.1 200 OK
Date: Wed, 11 Jul 2018 08:17:25 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
。。。。。。。
。。。。。

real    0m0.127s
user    0m0.026s
sys     0m0.012s

  

 shell中使用[]和[[]]的区别:在[[]]中可以使用&&  || >  < 而在[]中就不可以使用这个逻辑运算符。如果想在[]中使用跟[[]]中使用的&& ||功能,可以在[]中使用 -a(and)  -o(or)

[root@linux-node1 ~]# [ -e /etc/hosts -a -f /etc/hosts ] && echo 1||echo 0      1
[root@linux-node1 ~]# [ -e /etc/hosts && -f /etc/hosts ] && echo 1||echo 0   
-bash: [: missing `]'
0
#使用两个中括号就可以使用&& || < > 逻辑运算符了
[root@linux-node1 ~]# [[ -e /etc/hosts && -f /etc/hosts ]] && echo 1||echo 0
1

 

在shell中,[]中的字符串或字符串变量要加双引号,如果不加可能导致shell脚本运行后达不到预期结果,比如 [ -f "$file" ] && echo 1 || echo 0

还有在[]中两个字符串或字符串变量的比较最好在比较符两侧有空格,比如[ "file1" == "file2" ] && echo 1 || echo 0

 

centos  在做git  clone的时候报如下错误,比如

[root@linux-node6 tools]# git  clone  https://github.com/happyfish100/libfastcommon.git
Initialized empty Git repository in /tools/libfastcommon/.git/
error:  while accessing https://github.com/happyfish100/libfastcommon.git/info/refs

fatal: HTTP request failed

解决办法为:

[root@linux-node6 tools]# yum update -y nss curl libcurl  

  

 

posted @ 2017-09-05 12:11  goser  阅读(279)  评论(0编辑  收藏  举报