Linux基本命令(五)

2021年11月20日 阅读数:1
这篇文章主要向大家介绍Linux基本命令(五),主要内容包括基础应用、实用技巧、原理机制等方面,希望对大家有所帮助。

************************part 1: 系统启动*********************
1.系统的启动流程
    -->power on
    -->bios(basic input output system),加电自检
    -->看看mbr
    -->grub | lilo
    -->内核(vmlinuz-2.6.32-71.el6.i686) | initrdxxxx.img(RHEL5)   initramfs-2.6.32-71.el6.i686.img(RHEL6)
    -->init          -->启动一个超级进程
    -->/etc/inittab        -->肯定runlevel
    -->/etc/rc.sysinit(主机名,ip,检查磁盘,挂载文件系统) --/etc/rc.sysinit -> rc.d/rc.sysinit:/etc/rc.sysinit是/etc/rc.d/rc.sysinit的软连接
    -->/etc/rc.d/rcX.d/    -->启动运行级别X的脚本
    -->/etc/rc.local  --/etc/rc.local -> rc.d/rc.local:/etc/rc.local是/etc/rc.d/rc.local的软连接

2.经典/etc/inittab
#
# inittab       This file describes how the INIT process should set up
#               the system in a certain run-level.
#
# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
#               Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)        --关机
#   1 - Single user mode                --单用户
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)        --无网络,无NFS
#   3 - Full multiuser mode    --字符模式,彻底多用户模式
#   4 - unused            --保留
#   5 - X11            --图形
#   6 - reboot (Do NOT set initdefault to this)        --重启
#
id:5:initdefault:        <--肯定runlevel

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit    <--初始化操做系统的基本东西:主机名,ip,检查磁盘,挂载文件系统

l0:0:wait:/etc/rc.d/rc 0        <--对应不一样运行级别
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now    <--ctl+alt+del实现重启

# When our UPS tells us power has failed, assume we have a few minutes
# of power left.  Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly. 
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"        <--UPS

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"


# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1    <--终端
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:respawn:/etc/X11/prefdm -nodaemon    <--图形界面

3. id:runlevel:action:process
    --id:        -->两个字符的特殊符号
    --runlevel    -->运行级别,,0,6不能设置成initdefault,生产环境经常使用3
    --action    -->动做
        initdefault    -->指出系统启动了,从哪一个runlevel启动
        sysinit        -->system initialization
        wait        -->加入启动了一个wait的process,别的process在它结束前,没法运行
        respawn        -->程序在结束后,会被从新启动,登陆的命令
        ctraltdel    -->接收ctr+alt+del快捷键
    --process    -->执行什么命令

4. 启动级别    3    5
    4.1 /etc/rc.d/rc X
    4.2 ll /etc/rc.d
        drwxr-xr-x. 2 root root  4096  8月 26 17:55 init.d
        -rwxr-xr-x. 1 root root  2617  9月  2 2010 rc
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc0.d
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc1.d
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc2.d
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc3.d
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc4.d
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc5.d
        drwxr-xr-x. 2 root root  4096  8月 27 19:44 rc6.d
        -rwxr-xr-x. 1 root root   220  9月  2 2010 rc.local
        -rwxr-xr-x. 1 root root 19088  9月  2 2010 rc.sysinit

    4.3 /etc/rc.d/init.d/    -->服务的脚本   /etc/init.d/和它内容相同
    4.4 /etc/rc.d/rcX.d/       -->里面的文件是/etc/rc.d/init.d/内脚本的软连接
        S    -->start    开机自动启动
        K    -->Kill     开机不自动启动
        数字    -->启动|关闭时的序号
    4.5 本身定义脚本方式
        /etc/rc.d/init.d/     -->脚本的真实文件   
        /etc/rc.d/rcX.d/      -->创建相应的软连接

5. 几个关键文件
    /etc/issue            -->本地登陆终端的提示信息
        [root@study1 init.d]# cat /etc/issue
        Red Hat Enterprise Linux Server release 6.0 (Santiago)
        Kernel \r on an \m

    /etc/issue.net            -->net下登陆终端的提示信息
        [root@study1 init.d]# cat /etc/issue.net
        Red Hat Enterprise Linux Server release 6.0 (Santiago)
        Kernel \r on an \m

    /etc/motd            -->登陆成功后的提示信息,默认为空

6. RHEL6的boot
    SysVInit(redhat9 rhel5)    -->    upstart(rhel6)
    SysV-style:
    System V init examines the /etc/inittab file for an :initdefault: entry, which tells init whether there is a default runlevel. If there is no default runlevel, then the user is dumped to a system console, where a runlevel must be entered manually.
   
    Upstart is an event-based replacement for the traditional init daemon — the method by which several Unix-like computer operating systems perform tasks when the computer is started. It was written by Scott James Remnant, a former employee of Canonical Ltd.
    启动速度比SysVInit要快,基于事件的启动模式

**************************part 2: 服务管理**************************
1.手动的打开|关闭服务,查看服务的状态
    1.1 service命令
        service httpd status     --查看状态
        service httpd start     --打开
        service httpd stop     --关闭
        service httpd restart     --重启
        service dhcpd configtest --测试dhcpd.conf文件写的对不对
        service --status-all
   
    1.2 /etc/init.d/command option  --使用绝对路径服务名称启动
        /etc/init.d/dhcpd start
   
    1.3 /etc/rc.d/init.d/command option
        /etc/rc.d/init.d/dhcpd start

    1.4 每一个服务里面的两行基本信息
        [root@study1 ~]# cat /etc/rc.d/init.d/atd
        #!/bin/sh
        #
        # atd Starts/stop the "at" daemon
        #
        # chkconfig:   345 95 5

        chkconfig: 345 95 5    --三个数字:运行级别,启动序号,关闭序号
        description:    xxxxxx  --描述信息
        [root@study1 ~]# ll /etc/rc.d/rc3.d/
        lrwxrwxrwx. 1 root root 13  8月 26 17:46 S95atd -> ../init.d/atd
        [root@study1 ~]# ll /etc/rc.d/rc0.d/
        lrwxrwxrwx. 1 root root 13  8月 26 17:46 K05atd -> ../init.d/atd

    1.5 chkconfig
        (1) chkconfig --list | grep servicename      --查×××的开机启动状况
        [root@study1 ~]# chkconfig --list|grep vsftpd
        vsftpd             0:关闭    1:关闭    2:关闭    3:关闭    4:关闭    5:关闭    6:关闭

        (2) chkconfig servicename on|off
            默认只改变2345四个级别服务的状态
       
        (3) chkconfig --level 35  servicename on|off
            指定具体的级别
        [root@study1 ~]# chkconfig --level 235 vsftpd on
        [root@study1 ~]# chkconfig --list|grep vsftpd
        vsftpd             0:关闭    1:关闭    2:启用    3:启用    4:关闭    5:启用    6:关闭

        (4) chkconfig --del atd
            让chkconfig看不到atd这个服务
            此时,仍能执行  chkconfig atd --level 4 on|off,执行chkconfig后,使用chkconfig --list查看atd从新出现

        (5) chkconfig --add atd
            让chkconfig看到atd这个服务

        (6) chkconfig 会改动/etc/rc.d/rcX.d/里面脚本的软连接的名字:K->S, S->K, 变变数(启动序号 关闭序号)

2.图形化的配置方法
    2.1 ntsysv    当前这个runlevel的状态
        --空格选中|取消
        --F1,简单帮助
    安装包:ntsysv-1.3.47-1.el6.i686

    2.2 ntsysv --level 35     改变指定级别的状态

    2.3 runlevel    --看当前的runlevel
    [root@study1 ~]# runlevel
    N 5


    2.4 一台服务器,不用的服务关闭掉,开机快一点

*************************part 3: 磁盘配额*************************
功能:限制用户|组可以使用的block和inode数

1.应用场合
    web服务器    针对web空间进行限制
    邮件服务器    邮件的空间进行限制
    文件服务器    可以使用的文件空间
    www.unix-center.net   限制用户可以使用的文件系统的大小

2.磁盘配额的使用规范
    2.1 只能对分区设置  *
    2.2 内核必须支持磁盘配额(quota)
    2.3 只能限制普通用户,对root是无效的

3.quota的限制
    3.1 block    --容量
    3.2 inode    --文件的数量

    3.3 软限制    --能够违反(违反的时候会警告?),若是超过宽恕的天数,软-->硬,默认为7天
    3.4 硬限制    --绝对不可以违反规则
   
4.制做磁盘配额的步骤
    4.1分区
        fdisk  /dev/sda
        partprobe
        mkfs -t ext3 /dev/sdaxx
    4.2挂载
        (1)手动
            mkdir /quota   
            mount -t ext3 -o usrquota,grpquota /dev/sda23 /quota     *必定在挂载时指定grpquota,usrquota
        (2)开机自动
            vi /etc/fstab
            /dev/sda23   /quota   ext3   default,usrquota,grpquota, 1 2
        (3)mount查看
            /dev/sda23 on /quota type ext3 (rw,usrquota,grpquota)
    4.3配置quota: quotacheck
        quotacheck -caugv
            -c create
            -a all partation
            -u user
            -g group
            -v verbose
        检查文件系统,在/quota那个路径下生成了两个文件
    4.4设置用户|组的配额
        useradd newuser1
        groupadd newgrp1
        useradd newuser2 -g newgrp1
       
        edquota -u newuser1    --配置用户的qouta
        edquota -g newgrp1    --配置组的quota
        edquota -t --定义graceful time
    4.5启用|关闭quota
        quotaon    -vug /quota    --启用用户,组配额
          quotaon -vu  /quota    --启用用户配额
        quotaoff -vug /quota    --关闭用户,组配额
    4.6测试quota
        root-->chmod a+w /quota
        su newuser1
        dd if=/dev/zero bs=5M count=1  of=/quota/a
        dd if=/dev/zero bs=5M count=1  of=/quota/b
        dd if=/dev/zero bs=5M count=1  of=/quota/c
        dd if=/dev/zero bs=5M count=1  0f=/quota/d  -->超过了硬限制,因硬限制设置为20MB
    4.7查看quota
        repquota -uv /quota
        repquota -avug  /quota     -->查看全部用户和组的配额状况(使用了多少,还剩多少)

**************************part 4:计划任务管理*****************
0.应用场合
    0.1 每月的固定的某一天某一时刻,作备份
    0.2 按期搜索软件生成的文件,删除这些文件(每周一8:00)

1.at    --定制一次的计划
    1.1 确认包有没有安装
        rpm -qa | grep at
        yum -y install at
    1.2 提交任务
        at now +3min   --从如今开始,3分钟之后作的事情
        ctrl+d      -->输入执行的命令后按此键结束
       
        at 17:30    --若是时间在当前系统时间后,当天执行
        at 12:30    --若是时间在当前系统时间前,后一天执行

        at -t 2012-1-1 8:00 --指定2012-1-1 8:00作的事情
   
        at now +3min -f myBash.sh     -->-f指定执行的脚本
    1.3 查看任务
        (1)命令的查询方法
            atq
            at -l
       
        (2)/var/spool/at
            ***这个路径下存放的是未执行的at任务的信息文件
            ***cat axxxx最后几行里有你提交任务的信息
            ***at -c  jobid    至关于上一行的功能
    1.4 删除任务
        atq       --确认job的id
        atrm id    --删除id对应的job
        at -d id    --同上,删除对应的job
    1.5 开启|关闭atd
        chkconfig --level 35 atd on
        service atd start
    1.6 at的权限设置
        /etc/at.deny    --这个文件中出现的用户名不容许使用at,参考/etc/at.allow
        /etc/at.allow    --容许这个文件中出现的用户使用at
       
2.crontab    --定制周期的计划
    2.0 特色:循环的;当前时间周期过了,就等下一个周期
   
    2.1 确认包有没有安装
        rpm -qf `which crontab`   --查询安装包名称
        yum -y install cronie
        安装包:cronie-1.4.4-2.el6.i686
    2.2 查看cronie包的内容
        /etc/cron.d        --系统默认计划的任务
        /etc/cron.d/0hourly    --系统每个小时作的任务   
        /etc/cron.deny        --拒绝用户不能使用crontab的文件
        /etc/pam.d/crond    --pam(可插拔认证模块)相关的文件
        /etc/rc.d/init.d/crond    --启动的脚本
        /etc/sysconfig/crond    --服务的配置文件
        /usr/bin/crontab    --管理crontab的命令
        /usr/sbin/crond        --后台的进程
        /var/spool/cron/<username> --提交crontab任务的用户的文件
   
    2.3 查看|修改crond的状态
        service crond stauts   --查看当前crond的运行状态
        service crond restart  --重启crond服务
        chkconfig --level 35 crond on     --设置运行级别3和5开机启动crond

    2.4 提交做业
        crontab -e    --以当前用户的身份来计划任务
        corntab -u <username> -e --以特定的用户来计划任务,只有root能这么作
        crontab -l    --查询当前用户的计划任务
        crontab -u <username> -l --查看特定用户的计划任务,只有root能这么作
    2.5 配置文件的格式
        # .---------------- minute (0 - 59)
        # |  .------------- hour (0 - 23)
        # |  |  .---------- day of month (1 - 31)
        # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
        # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
        # |  |  |  |  |
        # *  *  *  *  *  command to be executed
           
        -    --链接符    5-7
        /    --每        */1
        ,    --间隔        1,3,5

        * * * * *    --每分钟
        */1 * * * *    --每分钟
        00 22  1 1 *    --每一年1月1号的22:00
        00 08,10,14 10 1 * --每一年1月10号08:00,10:00,14:00
        * * * * 1,3,5    --每周的1,3,5
        00 08 11-14 * * --每个月的11-14号8:00

********************************part 5:配置内核*************************
    www.kernel.org     -->3.0.3

    1.内核编译
        1.1内核裁剪
        1.2打补丁
        1.3添加新功能/新模块
   
    2.确认内核版本
        uname -a
        uname -r    --查看内核版本
        cat /etc/redhat-release
    [root@study1 ~]# cat /etc/redhat-release
    Red Hat Enterprise Linux Server release 6.0 (Santiago)

    3.内核的组成
        /boot/vmlinuz-xxxxxx    --内核的核心
        /lib/modules/<version>    --内核的模块文件
        /boot/initramfs-xxxxx.img    --虚拟的根文件系统,放在内存中,gzip压缩的
        /boot/config-xxx    --内核的配置文件

        看看initramfs*.img的内容
        gunzip < /boot/initramfs*.img > /tmp/file.img
        mkdir /tmp/img_dir
        cd /tmp/img_dir
        cpio -i --make-directories < /tmp/file.img
       
    4.编译内核
        4.1 www.kernel.org    -->2.6.39.4   
        4.2 解压缩
            cd /usr/local/src
            cp kernle.tar.bz2 ./
            tar xjvf kernel.tar.bz2
        4.3 配置(4种方法)
            cp /boot/config-2.6.32*   /usr/local/src/linux-2.6.39/.config        --用系统已有的配置文件生成一个配置文件
            make config       --问答模式的配置
            make menuconfig --字符图形界面,ncurses
                yum -y install ncurses-devel
            make xconfig    --图像界面的,QT
                yum -y install qt-devel
           
            M    以模块的方式编译进内核
            *    直接编译到内核
            空白    不是用

        4.4 编译
            make

        4.5 安装模块
            make modules_install    -->把模块的东西拷贝到/lib/modules/version/
       
        4.6 安装内核
            make install        -->vmlinuz-version -->/boot
        [root@study1 linux-3.0.3]# make install
sh /usr/src/linux-3.0.3/arch/x86/boot/install.sh 3.0.3 arch/x86/boot/bzImage \
        System.map "/boot"
ERROR: modinfo: could not find module iwlcore
ERROR: modinfo: could not find module snd_hda_codec_nvhdmi
ERROR: modinfo: could not find module snd_hda_codec_intelhdmi
ERROR: modinfo: could not find module i2c_core

        4.7 确认安装是否成功
        #ls /boot    -->vmlinuz-version, initramfs-version*.img
        #ls /lib/modules/<version>    -->2.6.39
        #cat /boot/grub/grub.conf
            root (hd0,0)
            kernel /vmlinuz-2.6.39.4 ro root=/dev/mapper/GLSvg-GLSroot rd_LVM_LV=GLSvg/GLSroot rd_LVM_LV=GLSvg/GLSswap rd_NO_LUKS rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
            initrd /initramfs-2.6.39.4.img
            <--确认存在这三段内容node