• Linux面试题完整修订附加答案


    册一:

    1、Linux挂载Winodws共享文件夹

    第一步:先在Windows上创建一个共享目录
            Windows系统IP是172.16.18.56;共享文件夹:E: est 
          第二步:在linux中运行如下命令:
           mount -t cifs -o username=user,password=pass //172.16.18.56/test /mnt
           注:/mnt是linux上的目录。user是Windows系统的用户名,pass是Windows系统的密码; 
          其中-t表示要挂载的类型,cifs是微软提供远程访问的一个协议

    另一解:

    # mount -t cifs //1.1.1.254/ok /var/tmp/share/ -o username=administrator,password=yourpass

    2、查看http的并发请求数及其TCP连接状态:

    netstat -n | awk ‘/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}’

    3.用tcpdump嗅探80端口的访问看看谁最高

    tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F”.” ‘{print $1″.”$2″.”$3″.”$4}’ | sort | uniq -c | sort-nr |head -20

    4、统计指定目录的文件个数

    find / -type f | wc -l

    详解:

    ls -l /var/log|grep “^-”|wc -l 
          统计文件夹:
          ls -l /var/log|grep “^-d”|wc -l

    5、查看IP连接数

    netstat -n | awk ‘/^tcp/ {print $5}’| awk -F: ‘{print $1}’ | sort | uniq -c | sort -rn

    6、shell下32位随机密码生成

    tr -dc ~\`!@#$\%^&*()-\_+=|\?/.>\,<a-za-z0-9_ <=”" dev=”" urandom|head=”" -c=”" 32|xargs

    详解:

    cat /dev/urandom | head -1 | md5sum | head -c 32 >> /pass
          将生成的32位随机数 保存到/pass文件里了

    7、统计出apache的access.log中访问量最多的5个IP

    cat access_log | awk ’{print $1}’ | sort | uniq -c | sort -n -r | head -5

    8、如何查看二进制文件的内容

    [root@new55 ~]# echo /etc/passwd | hexdump -C <== 规范的十六进制和ASCII码显示(Canonical hex+ASCII display )

    详解:

    一般通过hexdump命令 来查看二进制文件的内容。
          hexdump -C XXX(文件名) -C是参数 不同的参数有不同的意义
          -C 是比较规范的 十六进制和ASCII码显示
          -c 是单字节字符显示
          -b 单字节八进制显示
          -o 是双字节八进制显示
         -d 是双字节十进制显示
         -x 是双字节十六进制显示等

    9、ps aux 中VSZ代表什么意思 RSS代表什么

    aux

    a 显示所有与终端相关的进程,由终端发起的.

    x 显示所有与终端无关的进程.

    u 显示用户导向的用户列表.

    VSZ: 虚拟内存集,进程占用的虚拟内存空间

    RSS :物理内存集,进程战用实际物理内存空间.

    S 可中断的睡眠态

    R 运行态

    D 不可中断的睡眠态

    T 停止态

    Z 僵死态

    10、检测并修复/dev/hda5

    e2fsck -p /dev/hda5

    详解:

    若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查,用法:fsck -P /dev/hda5

    11、Linux开机启动顺序

    启动顺序:

    POST(加电自检)–>由BIOS决定启动设备次序–>MBR(bootloader)–>解压kernel,加载Kernel到内存–>加载init进程(/etc/inittab)

    详解:

    bios-mbr-kernel-rc.d-kernel module-rc*.d

    12、符号链接和硬链接的区别

    硬链接:不同路径的文件指定的是同一个inode

    硬链接不能跨分区存在

    硬链接不能链接到目录(要避免循环引用)

    删除硬链接只会减少文件被硬链接的次数,源文件不会动.

    软链接:是一个独立的文件,有自己独立的inode

    引用的是路径本身,不是inode

    删除软链接,跟源文件没任何关系

    软链接没有存储任何数据,只是存储了访问文件的另一种路径.

    软链接可以对目录创建,也可以跨分区

    源文件被删除,软连接将不可用.

    详解:

    ln
          ln -s
          符号连接就相当于快捷方式
         硬连接就相当于映射

    13、保存当前磁盘分区的分区表

    # sfdisk -d /dev/sdb >/etc/sdbpar.bak 保存分区表

    # sfdisk /dev/sdb

    14、检测并自动修复文件系统

    e2fsck – check a Linux ext2/ext3 file system

    -B 指定块大小

    -f 强制检测.

    -p 自动修复文件系统

    15、手动安装grub

    手动安装grub

    # grub-install –root-directory=(指定boot目录) DEVICE

    或者

    grub

    grub>root (hd0,0)

    grub>setup (hd0)

    详解:

    在操作系统启动过程中有 一个很重要的引导程序——MBR。MBR是由三段组成的其中最重要的两段:是由446个字
    节组成的boot locader(引导加载器),和64个字节的分区表。在MBR的446字节也就是boot locader这段程序对于引导操作系统
    很重要。Linux中有两种boot locader可选,一种是LILO,一种就是GRUB。LILO现在已不用了。现在主要是使用GRUB来引导。现
    在我们来介绍一下GRUB。
       GRUB是两段式的引导,第一阶段称为stage1,是存放在MBR中,主要来引导第二阶段stage2 这段主要放在/boot/grub/中的执
    行程序,主要是grub.conf这个文件。下面就介绍两种GRUB的安装
       第一种是:当grub.conf这个文件不存在了,我们可以手动编辑。当系统重新启动时会出现一个grub的提示界面;而我们并
    不知道系统是在哪个磁盘中,这时我们可以用一命令来试着来找一下,grub>find (hd0,0)/ 用Tab键来查看是否有一个内核版
    本,如果有则是在这个磁盘中,反之则查找下一个。找到后可在grub>后输入:root (hd0,0)第二步是在grub>后输入kernel 后
    面跟上内核的版本,例如:kernel /vimlinuz-2.6.18-64.el5 ro root=/dev/vol0... quit。第三步是initrd,例如:
    grub>initrd /initrd 后面与内核版本相对应。最后是grub>boot 也就是重新启动。启动后在/boot/grub建立一个grub.conf 
    这样我们的grub就安装成功了。
       第二种方式:当grub被破坏掉了。例如我们执行命令#dd if=/dev/zero of=/dev/sda bs=220 count=1 执行后MBR中的boot 
    locader 就被删掉了。那我们怎样来重装grub呢?这里有两个方法。第一种就是:找一个系统光盘,从光盘启动紧急救援模式
    来修复grub。第二种方式就是安装grub到一个磁盘上。其过程是:
       第一步是:在一个磁盘上重新化分一个分区,大约有100M左右,
       第二步是:把这个分区格式化,#mount ext3 /dev/sdb1
       第三步是:创建一目录。#mkdir /mnt/boot 并把上面的分区挂载到这个目录上#mount /dev/sdb1 /mnt/boot
       第四步是:创建目录#mkdir /mnt/boot/grub
       第五步是:进入到原操作系统i386-redhat目录中,并复制目录下所有文件。               #cd /usr/share/grub/i386-redhat
                #cp ./* /mnt/boot/grub
       第六步是:回原目录并卸载光盘#cd #umount /dev/sdb1
       第七步是:执行grub命令#grub 会出现一个grub界面。逐步输入。
                grub>root (hd1,0)
                grub>setup (hd1)
                grub>quit
       经过这七步后我们的grub就成功的安装在了一个新的磁盘上,我们可以新建一个虚拟机并用这个磁盘,启动后就可以看到
    grub来引导的界面。

    16、改内核参数

    # sysctl

    -p 不用重启系统,让内核重读/etc/sysctl.conf文件

    -a 显示所有内核参数及其正在使用的值.

    -w 临时设置/etc/sysctl.conf参数 sysctl -w net.ipv4.ip_froward=0

    详解:

    由于Linux的内核参数信息都存在内存中,因此可以通过命令直接修改,并且修改后直接生效。但是,当系统重新启动后,原来
    设置的参数值就会丢失,而系统每次启动时都会自动去/etc/sysctl.conf文件中读取内核参数,因此将内核的参数配置写入这
    个文件中,是一个比较好的选择。
      首先打开/etc/sysctl.conf文件,查看如下两行的设置值,这里是:
      kernel.shmall = 2097152
      kernel.shmmax = 4294967295 如果系统默认的配置比这里给出的值大,就不要修改原有配置。同时在/etc/sysctl.conf文
    件最后,添加以下内容:
      fs.file-max = 6553600 
      kernel.shmmni = 4096 
      kernel.sem = 250 32000 100 128 
      net.ipv4.ip_local_port_range = 1024 65000 
      net.core.rmem_default = 4194304 
      net.core.rmem_max = 4194304 
      net.core.wmem_default = 262144 
      net.core.wmem_max = 262144 
      这里的“fs.file-max = 6553600”其实是由“fs.file-max = 512 * PROCESSES”得到的,我们指定PROCESSES的值为
    12800,即为“fs.file-max =512 *12800”。
      sysctl.conf文件修改完毕后,接着执行“sysctl -p”使设置生效。
      [root@localhost ~]# sysctl -p 常用的内核参数的含义如下。
      kernel.shmmax:表示单个共享内存段的最大值,以字节为单位,此值一般为物理内存的一半,不过大一点也没关系,这里
    设定的为4GB,即“4294967295/1024/1024/1024=4G”。
      kernel.shmmni:表示单个共享内存段的最小值,一般为4kB,即4096bit.
      kernel.shmall:表示可用共享内存的总量,单位是页,在32位系统上一页等于4kB,也就是4096字节。
      fs.file-max:表示文件句柄的最大数量。文件句柄表示在Linux系统中可以打开的文件数量。
      ip_local_port_range:表示端口的范围,为指定的内容。
      kernel.sem:表示设置的信号量,这4个参数内容大小固定。
      net.core.rmem_default:表示接收套接字缓冲区大小的缺省值(以字节为单位)。
      net.core.rmem_max :表示接收套接字缓冲区大小的最大值(以字节为单位)
      net.core.wmem_default:表示发送套接字缓冲区大小的缺省值(以字节为单位)。
      net.core.wmem_max:表示发送套接字缓冲区大小的最大值(以字节为单位)。

    17、在指定范围内取随机数

    在指定范围内取随机

    echo $[$RANDOM%39] 对39进行取余,余数肯定是39以内的数字.

    详解:

    #!/bin/bash

    #author:ligths
          declare -i number=$RANDOM%39+1
          echo $number
          注:
          #! /bin/sh 是指此脚本使用/bin/sh来解释执行,#!是特殊的表示符,其后面根的是此解释此脚本的shell的路径。          
    $bash  $表示系统提示符,$ 表示此用户为普通用户,超级用户的提示符是#,bash是shell的一种,是linux下最常用的一种
    shell,$bash的意思是执行一个子shell,此子shell为bash。

    18、限定apache每秒钟连接数为1,峰值为3

    # iptables -A INPUT -d 172.16.100.1 -p tcp –dport 80 -m limit –limit 1/second –limit-burst 3 -j ACCEPT

    19、FTP主动与被动模式

    主动模式

    1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接)

    2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口)

    3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口)

    4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口)

    被动模式

    1. 从任何大于1024的端口到服务器的21端口(客户端初始化的连接)

    2. 服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)

    3. 从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)

    4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
    客户端与服务端建立连接,经过TCP三次握手,连接建立完成之后,客户端就可以通过建立的连接通道向服务器发送命令了,服务器根据客户端的命令,向客户端发送数据,发送数据的时候,服务端会再跟客户端建立一个TCP连接,用于专门的传输数据,这个连接就是数据连接。

    数据连接有两种工作模式:主动模式和被动模式

    主动模式指的是服务器是主动的

    被动模式指的是服务器是被动的

    主动模式:

    服务器端自动打开20号端口,即数据传输端口。主动的去连接客户端的命令端口+1的端口。当数据传输完成后,数据连接自动断开。

    被动模式:

    服务器端向客户端通知自己打开的端口,通知客户端来连接自己的数据端口,客户端使用命令端口+1的端口,去连接服务器端的数据端口。被动模式下,服务器的数据连接端口使用的是一个随机端口。主动模式服务端使用的是20端口。

    20、显示/etc/inittab中以#开头,且后面跟一个或多个空白字符,而后又跟了任意非空白字符的行;

    # grep “^#[[:space:]]{1,}.{1,}” /etc/inittab

    21、显示/etc/inittab中包含了:一个数字:(即两个冒号中间一个数字)的行;

    # grep “:[0-9]{1}:” /etc/inittab

    22、怎么把自己写的脚本添加到服务里面,即可以使用service命令来调用

    #!/bin/bash

    # chkconfig: – 90 10

    # description: just a test

    echo “Hello,$1″

    # mv test /etc/init.d/

    # chmod +x /etc/init.d/test

    # chkconfig –add test

    # service test start

    //可以看到Hello,start表示成功

    23、写一个脚本,实现批量添加20个用户,用户名为user1-20,密码为user后面跟5个随机字符

    [root@localhost tmp]# cat Useradd.sh

    #!/bin/bash

    #description: useradd

    for i in `seq 1 20`

    do

    pwd=$(cat /dev/urandom | head -1 | md5sum | head -c 5)

    useradd user$i

    echo “user$i$pwd” | passwd –stdin user$i

    echo user$i user$i$pwd” >> userinfo.txt

    done

    24、写一个脚本,实现判断192.168.1.0/24网络里,当前在线的IP有哪些,能ping通则认为在线

    #!/bin/bash

    for ip in `seq 1 255`

    do

    {

    ping -c 1 192.168.1.$ip > /dev/null 2>&1

    if [ $? -eq 0 ]; then

    echo 192.168.1.$ip UP

    else

    echo 192.168.1.$ip DOWN

    fi

    }&

    done

    wait

    25、写一个脚本,判断一个指定的脚本是否是语法错误;如果有错误,则提醒用户键入Q或者q无视错误并退出其它任何键可以通过vim打开这个指定的脚本;

    [root@localhost tmp]# cat checksh.sh

    #!/bin/bash

    read -p “please input check script-> ” file

    if [ -f $file ]; then

    sh -n $file > /dev/null 2>&1

    if [ $? -ne 0 ]; then

    read -p “You input $file syntax error,[Type q to exit or Type vim to edit]” answer

    case $answer in

    q | Q)

    exit 0

    ;;

    vim)

    vim $file

    ;;

    *)

    3. exit 0

    4.

    ;;

    esac

    fi

    else

    echo “$file not exist”

    exit 1

    fi

    26、写一个脚本:

    1、创建一个函数,能接受两个参数:
         1)第一个参数为URL,即可下载的文件;第二个参数为目录,即下载后保存的位置;
         2)如果用户给的目录不存在,则提示用户是否创建;如果创建就继续执行,否则,函数返回一个51的错误值给调用脚本;
         3)如果给的目录存在,则下载文件;下载命令执行结束后测试文件下载成功与否;如果成功,则返回0给调用脚本,否则,返回52给调用脚本;

    [root@localhost tmp]# cat downfile.sh

    #!/bin/bash

    url=$1

    dir=$2

    download()

    {

    cd $dir >> /dev/null 2>&1

    if [ $? -ne 0 ];then

    read -p “$dir No such file or directory,create?(y/n)” answer

    if [ "$answer" == "y" ];then

    mkdir -p $dir

    cd $dir

    wget $url 1> /dev/null 2>&1

    if [ $? -ne 0 ]; then

    return “52″

    fi

    else

    return “51″

    fi

    fi

    }

    download $url $dir

    echo $?

    27、代码如下:

    #!/bin/bash

    #Author: MOS

    #Script name: funPart.sh

    #Date & Time: 2012-10-10/12:20:53

    #Version: 1.0.1

    #Description:

    # Disk_Mod(){

    #使用if匹配模式,使用for循环判断是否存在,如果有,则取其绝对路径,跳出循环,如果不匹配或文件不存在,跳出函数,返回66

    if [[ -n $1 && $1 =~ "/dev/sd[a-z]” ]];

    then local Darray=(`ls /dev/sd[a-z]`)

    for i in ${Darray[*]};do

    [[ "$i" == "$1" ]] && Sd=$i && break

    done

    else

    return 66

    fi

    #当匹配成功,进入选择,告诉用户,是否继续,输错的话进入无限循环,当用户选择Y,则清空目标分区,且跳出while循环

    while :;do

    read -p “Warning!!!This operation will clean $Sd data. Next=y,Quit=n [y|n]: ” Choice

    case $Choice in

    y)

    dd if=/dev/zero of=$Sd bs=512 count=1 &> /dev/null && break || return 67 ;; n)

    exit 88 ;;

    *)

    echo “Invalid choice,please choice again.” ;;

    esac

    done

    #使用echo传递给fdisk进行分区,如果此命令失败,则跳转出去,错误值68,需要注意的是,有时候这个返回值很诡异,笔者之前成功与否都是返回的1,后来重启之后,就好了,如果慎重的话,可以对创建的分区,进行判断,不过就需要使用其他工具截取相关字段了,虽有些小麻烦,但无大碍 echo -e “n p 1 +100M n p 2 +1024M w ”|fdisk /dev/sdb &> /dev/null || return 68 #格式化之前,让内核重新读取磁盘分区表,值得注意的是,有的系统版本,使用partprobe无效,譬如笔者的环境是rhel5.8,而rhel6.0以后,这个命令就很危险了,而使用partx -a /dev/sdb则效果更好…此项需慎重,如果格式化失败,则告知把失败的分区定义成变量,且跳出函数,并带出错误值69

    `partprobe` Part=`fdisk -l /dev/$Sd|tail -2|cut -d” ” -f1`

    for M in ${Part[*]};do

    ! mke2fs -j $M &> /dev/null && ErrorPart=$M && return 69

    done

    return 0

    }

    #下面代码,调用函数,接收函数返回值,根据返回值进行判断哪里出错。

    Disk_Mod $1

    Res=$?

    [ $Res -eq 0 ] && exit 0

    [ $Res -eq 66 ] && echo “Error! Invalid input.”

    [ $Res -eq 67 ] && echo “Error! Command -> dd <- Faild.”

    [ $Res -eq 68 ] && echo “Error! Command -> fdisk <- Faild.”

    [ $Res -eq 69 ] && echo “Error! Command -> mke2fs <- Faild.”

    册二:

    1.站点根目录下查找是否被放置webshell木马根据语句判断是不是PHP木马脚本
    # find /storage/www/ -name "*.php" | xargs grep -in --color "eval("
    # grep -i --include='*.php' -r systems*( /storage/www/
    2.统计访问日志中来自同ip出现的次数分析盗链、攻击、机器人
    # cat access.log |awk '{print $1}'| sort | uniq -c |sort -rn
    3.分析出现次数最多的ip对网站的具体数据访问情况
    # grep -e IP access.log > filename
    # cat filename |awk '{print $8}'|sort|uniq -c|sort -rn
    4.访问次数最多的文件或页面,取前20
    # cat access.log|awk '{print $11}'|sort|uniq -c|sort -nr|head -20
    5.列出传输最大的几个exe文件(分析下载站的时候常用)
    # cat access.log |awk '($7~/.exe/){print $10 " " $1 " " $4 " " $7}'|sort -nr|head -20
    6.列出输出大于200000byte(约200kb)的exe文件以及对应文件发生次数
    # cat access.log |awk '($10 > 200000 && $7~/.exe/){print $7}'|sort -n|uniq -c|sort -nr|head -100
    7.如果日志最后一列记录的是页面文件传输时间,则有列出到客户端最耗时的页面
    # cat access.log |awk '($7~/.php/){print $NF " " $1 " " $4 " " $7}'|sort -nr|head -100
    8.列出最最耗时的页面(超过60秒的)的以及对应页面发生次数
    # cat access.log |awk '($NF > 60 && $7~/.php/){print $7}'|sort -n|uniq -c|sort -nr|head -100
    9.列出传输时间超过 30 秒的文件
    # cat access.log |awk '($NF > 30){print $7}'|sort -n|uniq -c|sort -nr|head -20
    10.统计网站流量(G)
    # cat access.log |awk '{sum+=$10} END {print sum/1024/1024/1024}'
    11.统计404的连接
    # awk '($9 ~/404/)' access.log | awk '{print $9,$7}' | sort
    12. 统计http status.
    # cat access.log |awk '{counts[$(9)]+=1}; END {for(code in counts) print code, counts[code]}'
    # cat access.log |awk '{print $9}'|sort|uniq -c|sort -rn
    13.查找挂马内容进行批量清除
    # find /webbase/ -type f -exec grep 'www.800816.com.cn' -l {} ;
    # sed -i "s/body{.*www.800816.com.cn.*}//g" `grep www.800816.com.cn -rl ./`
    14.批量转换GBK为UTF-8文件编码
    # find default -type d -exec mkdir -p utf/{} ;
    # find default -type f -exec iconv -f GBK -t UTF-8 {} -o utf/{} ;
    15.find查找文件的时候怎么避开多个文件目录
    # find /usr/sam (-path /usr/sam/dir1 -o -path /usr/sam/file1 ) -prune -o -name "*.txt" -print
    16.查看tcp的并发请求数及其TCP连接状态:
    # netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
    # netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn
    # netstat -n | awk '/^tcp/ {++state[$NF]}; END {for(key in state) print key," ",state[key]}'
    # netstat -n | awk '/^tcp/ {++arr[$NF]};END {for(k in arr) print k," ",arr[k]}'
    # netstat -n |awk '/^tcp/ {print $NF}'|sort|uniq -c|sort -rn
    # netstat -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
    17.查找请求数前20的IP(常用于查找攻来源)
    # netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20
    # netstat -ant |awk '/:80/{split($5,ip,":");++A[ip[1]]}END{for(i in A) print A[i],i}' |sort -rn|head -n10
    18.查看有多少个活动的php-cgi进程
    # netstat -anp | grep php-cgi | grep ^tcp | wc -l
    19.查找较多time_wait连接
    # netstat -n|grep TIME_WAIT|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20
    20.找查较多的SYN连接
    # netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr | more
    21.根据端口列进程
    # netstat -ntlp | grep 80 | awk '{print $7}' | cut -d/ -f1
    22.抓包用来防止80端口被人攻击时可以分析数据
    # tcpdump -c 10000 -i eth0 -n dst port 80 > /root/pkts
    23.用tcpdump嗅探80端口的访问看看谁最高
    # tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr |head -20
    24.查看是哪些蜘蛛在抓取内容。
    # /usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | grep -i -E 'bot|crawler|slurp|spider'
    25.按域统计流量
    # zcat squid_access.log.tar.gz| awk '{print $10,$7}' |awk 'BEGIN{FS="[ /]"}{trfc[$4]+=$1}END{for(domain in trfc){printf "%s %d ",domain,trfc[domain]}}'
    26.查看数据库执行的sql
    # /usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i 'SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL'
    27.将匹配Root一行中no替换成yes
    # sed -i '/Root/s/no/yes/' /etc/ssh/sshd_config
    28.去掉第一列
    # awk '{for(i=2;i<=NF;i++) if(i!=NF){printf $i" "}else{print $i} }' list
    29.按内存从大到小排列
    # ps -e -o "%C : %p : %z : %a"|sort -k5 -nr
    30.按cpu利用率从大到小排列
    # ps -e -o "%C : %p : %z : %a"|sort -nr
    31.怎样知道某个进程在哪个CPU上运行
    # ps -eo pid,args,psr
    32.清除僵死进程。
    # ps -eal | awk '{ if ($2 == "Z") {print $4}}' | kill -9
    33.查看硬件制造商
    # dmidecode -s system-product-name
    34.查找占用磁盘IO最多的进程

    # wget -c http://linux.web.psi.ch/dist/scientific/5/gfa/all/dstat-0.6.7-1.rf.noarch.rpm
    # dstat -M topio -d -M topbio
    35.检查I/O使用率(%util)是否超过100%
    # iostat -x 1 2
    36.磁盘空间,检查是否有分区使用率(Use%)过高(比如超过90%) 如发现某个分区空间接近用尽,可以进入该分区的挂载点,用以下命令找出占用空间最多的文件或目录:
    # df -h
    # du -cks * | sort -rn | head -n 10
    37.CPU负载检查前三个输出值是否超过了系统逻辑CPU的4倍。
    # cat /proc/loadavg
    38.CPU的数量
    # cat /proc/cpuinfo |grep -c processor
    39.检查网络流量(rxbyt/s, txbyt/s)是否过高
    # sar -n DEV
    40.每隔1秒显示一下网络流量
    # watch -n 1 "/sbin/ifconfig eth0 | grep bytes"
    41.批量覆盖目录下的文件不用确定是否执行
    # cp -rf /svn/wwwroot /wwwroot
    42.调试命令
    # strace -p pid
    43.跟踪指定进程的PID
    # gdb -p pid
    44.查看当前进程打开了多少个文件句柄
    lsof -n |awk ‘{print $2}’|sort|uniq -c |sort -nr|more

      册三:

    ls –l a 列出所有命令
     
    cd      进入当前目录
     
    cd..     上级目录
     
    cd. 当前目录
     
    cat      显示文件内容
     
    echo+内容 > 文件名  (写内容)
     
    mkdir     创建新目录
     
    mkdir –p   一次创建目录及子目录
     
    mkdir “ “   创建带空格的目录
     
    rmdir       删除空目录
     
    rm –rf      删除不为空的目录
     
    rm –r       不提示删除(递归
     
    file        查看文件类型
     
    touch      创建文件更改时间
     
    cp       复制文件
     
    mv      文件到目录移动或生命名
     
    find (.)-name  文件名     查找文件
     
    more     查找更多命令(可翻页)
     
    less      分页、反复阅读
     
    head     显示文件头部
     
    tail      显示文件尾部
     
    ls /media/cdrom/    读取光盘内容
     
    fdisk –l      列出所有的存储设备
     
    ls/dev/cdrom –l    查看磁盘分区
     
    mount –t +光盘格式/设备/设备放在哪个目录去读(光盘的挂载)
     
    umount /mnt (目录名) 卸载(不能卸载使用中的)
     
    eject     弹出       eject –t    收回
     
    mount  -o  loop  -t      可直接持载到文件系统中直接使用
     
    adduser    添加用户
     
    passwd(用户)    修改用户密码
     
    userdel  -r  删除用户
     
    usermod     修改用户属性  -L  锁定   -U  解锁
     
    groupadd    添加用户组
     
    groupdel      删除组
     
    usermod –g +人名    加入组
     
    chmod       更改用户操作权限
     
    chown       修改文件的属主和属组
     
    第三章
     
    :e +文件名    打开另一个文件夹
     
    :e! +文件名    不保存打开另文件夹,放弃修改
     
    :r +文件名     切换到另一个文件夹
     
    :w +文件名     另存为个文件
     
    :q     未修改退出
     
    :wq    保存并退出
     
    :q!     不保存强制退出
     
    :m,ny     第m行到时第n 行复制
     
    :s/old/new   替换(当前行的第一个)
     
    :s/old/new/g   行内全部替换
     
    :m,ns/old/new   在m-n行区域内替换
     
    :%s/old/new/g   整个文件内替换
     
    :s/old/new/c     提示 确认
     
    :args         显示多文件信息
     
    :next      : prev     前后切换多文件
     
    :first   :prev(!)    定位首尾文件
     
    :ctrl +^     快速文件切换
     
    ^ 跳转到行首 $ 跳转到行尾
     
    W 光标所在的后一个单词的首字母 b 前一个单词的首字母
     
    e 后一个单词的尾字母 1G 跳到文件首行
     
    G 尾行 #G 跳到第#行
     
    i 当前光标处插入 a 光标后插入
     
    A 行末插入 o 下面插入新行
     
    O 上面插入新行 cw 删除光标所在单词尾部字符
     
    c$ 删除光标到行尾的字符 c^ 光标前到行首的字符
     
    Home 跳转行首 End  跳转到行尾
     
    Page up 向上翻页 Page Down 向下翻页
     
    Backspace 删除光标前字符 Delete 删除光标位置
     
    x 删除光标外单个字符 dd 删除所在行
     
    dw 删除光标前字符到单词尾 de 删除当前字符到行尾
     
    d$ 删除当前字符到行尾 d^ 删除字符到行首
     
    J 合并当前行和下一行内容 dd+p 剪切
     
    u 取消最近一次的操作 U 取消所有操作
     
    Ctrl+R 对U命令的撤消进行恢复 yy 复制整行
     
    yw 复制当前光标到单词尾字符 y$ 复制光标到行尾
     
    y^ 复制光标到行首 P 粘贴
     
    / 自上而下的查找 ?  自下而上的查找
     
    第四章
     
    Bash的主要功能
     
    方便的命令编辑环境
     
    有补全功能
     
    查看历史功能
     
    别名功能
     
    查看功能
     
    自定义功能键
     
    丰富了变量类命令与控制结构
     
    shell 变量
     
    Ctrl+D 注销修改的环境,
     
    set  查看环境
     
    常用的环境变量:
     
    USER 显示当前用户的登录名称
     
    UID 显示当胆用户号
     
    SHELL 表示当前用户的登录shell
     
    HOME 表示法前用户的登录目录
     
    PATH 当前用户的命令搜索路径
     
    PS1 用户主提示符
     
    PS2 用户辅提示符默认为“>”
     
    环境变量的配置文件:
     
    /etc/bashrc    /etc/profile   全局
     
    /.bash_profile    /.bashrc 用户
     
     预定义变量
     
    $# 位置参数的数量
     
    $* 位置参数的内容
     
    $? 命令执行后返回的状态,0为正确,非常感谢为错误
     
    $$ 当前的进程号
     
    $! 后台运行的最后一个进程号
     
    $0 当前执行的进程名
     
    用户自定义变量
     
    export 输出变量为全局变量
     
    unset 清除用户的变量
     
    Ctrl +U    删除当前光标到行首
     
    Ctrl + K    删除当前光标到行尾
     
    history     查看命令历史
     
    history – c   清除历史命令
     
    命令别名保存在  /etc/profile.d/
     
    alias       查盾命令别名
     
    alias name=value……   定义命令别名
     
    unalias –a    取消所有的别名
     
    wc    计算文件中的字符数,单词数和行数
     
    输入重定向       “<”
     
    输出重定向       “>”
     
    错误重定向       “2>”
     
    累加             “>>”
     
    错误累加         “2>>”
     
    输出和错误输出重定向     “&>”
     
    管道符    “|”    例:|more   |grep  
     
     第五章
     
    Linux中的基本命令放在/bin和/sbin
     
    Linux应用程序的可执行文件放在/usr/bin和/usr/sbin
     
    变通执行程序放在/usr/bin 
     
    服务器执行程序在/usr/sbin
     
    应用程序配置文件在/etc下
     
    应用程序文档文件在/usr/share/doc
     
    手册页文件在/usr/share/man
     
    rpm –q 查询
     
    rpm –qa 查询所有软件包
     
    rpm –qa | grep   查包含某字符的包
     
    rpm –qi 查询详细信息
     
    rpm –ql  查询文件列表
     
    rpm –qf + 绝对路经 查所属的软件包
     
    rpm – qpi  指定查询没安装过的包的详细信息
     
    rpm –qpl  显示包含的东西
     
    prm –i 安装RPM软件包
     
    rpm –ivh 安装RPM软件包同时显示详细信息
     
    rpm – e  卸载软件包
     
    rpm -U 升级软件包
     
    编译应用程序前的准备工作
     
    确认系统中已经安装了编译环境
     
    rpm –qa | grep gcc
     
    下载prozilla程序的源代码安装包文件
     
    wget 网址
     
    释放已下载的源代码软件包文件
     
    tar jxf +软件包名称
     
    编译前的配置
     
    ./configure –prefix=程序安装目录的绝对路径
     
    编译与安装
     
    make   编译
     
    make install    安装
     
    启动包管理程序    system-config-packages
     
    第六章
     
    Linux 系统中的运行级别
     
    0 关机 1 单用户模式
     
    3 多用户模式 4 未分配
     
    5 图形登录的多用户模式 6 重启
     
    runlevel   显示系统当前运行级别
     
    init       改变运行级别
     
    chkconfig –list    查看服务启动状态
     
    chkconfig –level    设置服务启动状态
     
    ps –aux       查看静态进程
     
    top          查看动态进程
     
    pstree        查看进程树
     
    Ctrl+Z       把当前运行的进程调入后台
     
    jobs         查盾后台的进程
     
    fg  [后台进程号]   将后台的进程恢复到前台运行
     
    kill [-9]  PID     终止进程
     
    killall  进程名    终止改名的所有进程
     
    service crond starus     查询服务状态
     
    service crond stop      停止服务
     
    service crond start      启动服务
     
    service crond restart     重启服务
     
    crontab  -l            查看用户cron任务
     
    crontab               编辑任务
     
    crontab  -e            用vi编辑器编辑任务
     
    crontab  -r             清空任务
     
    设置磁盘配额的步骤
     
    修改”fstab”文件 vi /etc/fstab  在需要配置quota的分区装载设置中添加”usrquota””grpquota”选项
     
    重新挂载文件系统 reboot
     
    创建配额文件 quotacheck –cmug +分区
     
    设置配额 edquota –u      edquota –g 
     
    查看配额 quota –u       quota –g
     
    quotacheck –mfvug /   检测
     
    edquota –t            限制时间
     
    tar cf tar文件名 归档文件 tar czf tar.gz文件名 压缩备份文件
     
    tar tf tar文件名 查看归档文件 tar tzf tar.gz文件名 查看压缩备份文件
     
    tar xf tar文件名 释放tar备份文件 tar xzf tar.gz文件名 恢复压缩的tar备份文件
     
    tar xf tar文件名 –C 目录名 恢复归档文件到指定目录 tar xzf tar.gz 文件名 –C 目录名 恢复压缩归档文件到指定目

     
    第七章
     
    普通用户
     
    /sbin/ifconfig 用户查看网络接口设备及ip地址
     
    /sbin/ifconfig  eth0 查看指定网络接口信息
     
    /sbin/ifconfig –a 查看所有风格接口信息
     
    /sbin/route 查看主机路由信息
     
    ping /traceroute + 地址 杳看连通性
     
    ping –c 数量 地址 ping 几次
     
    hostname    查看主机名
     
    nslookup     显示当前默认的DNS
     
    dhclient      自动获得IP地址
     
    ifconfig eth0 IP地址 netmask make地址       配置ip地址
     
    route del default gw 网关                   删除默认网关路由
     
    route add default gw 网关     添加默认网关
     
    netconfig          使用工具进行网络配置
     
    service network resrart         重启接口服务
     
    /etc/init.d/network             重启接口服务
     
    ifdown +网络接口名           停用网络接口
     
    ifup +网络接口名              启用网络接口
     
     
     
        
                    
    /etc/sysconfig/network-scripts/ifcfg-eth0 网络接口配置文件
     
    /etc/sysconfig/network  主机名配置文件
     
    /etc/hosts 主机名解析文件
     
    /etc/resolv.conf 域名服务器配置文件
     
    第八章
     
    rpm –q nfs-utils portmap      查询是否安装软件包nfs-utlis 和portmap 
     
    服务器NFS的配置文件保存在/etc/exports
     
    exports 文件的格式:
     
    nfs 共享目录名称  客户端主机地址  设置选项
     
    例:      /var/ftp              *            (sync,ro)
     
    客户端主机地址:指定IP地址、指定域定、指定网段、指定域下、所有主机
     
    设置选项:sync同步、ro只读、rw读写
     
    service 服务程序名称 starus      查看服务器状态
     
    service portmap/nfs restart/srart/stop          重启/启动/关闭服务
     
    showmount –help      帮助信息
     
    showmount           显示主机的NFS 服务器信息
     
    showmount –e         显示NFS服务器的输出目录列表
     
    showmount –d         显示NFS服务器中被挂载的共享目录
     
    showmount –a    显示服务器客户机被挂载的共享目录
     
    exportfs –rv           重新输出所有目录
     
    exportfs –auv          停止输出所有目录
     
    exportfs –av           启用输出所有目录
     
    mount –t nfs NFS服务器地址:共享目录  本地挂载点         挂载NFS共享目录
     
    mount | grep mnt 显示挂开的共享目录
     
    umount /mnt/    卸载共享目录
     
    /etc/fstab        系统自动挂载
     
    cp -dpr /media/cdrom/ * /var/ftp/pub/       网络安装

  • 相关阅读:
    awk命令使用整理
    oracle pl/sql中record和%rowtype整理
    expect实现非交互下的ssh连接, expect简单使用整理
    shell通配符, 变量, shell作用域, $#@*等说明
    python之爬虫(三) Urllib库的基本使用
    python之爬虫(二)爬虫的原理
    python之爬虫--番外篇(一)进程,线程的初步了解
    Python之Web框架
    Python之爬虫
    Django【进阶篇 】
  • 原文地址:https://www.cnblogs.com/wanghuaijun/p/6168698.html
Copyright © 2020-2023  润新知