• Linux 介绍和命令超详细


    linux两大分支
    1.Redhat
    Centos
    2.Debian
    Ubuntu
    忘掉Windows思维方式

    分区类型
    主分区:最多只能有4个
    扩展分区:
    最多只能有1个
    主分区加扩展分区最多4个,但是逻辑分区可以多个
    不能写入数据,只能包含逻辑分区
    逻辑分区:正常写入数据和格式化
    格式化
    1.高级格式化(又称逻辑格式化),他是根据用户选定的文件系统(FAT16,FAT32,NTFS,EXT2,EXT3,EXT4)
    在磁盘的特定区域写入特定数据,在分区中划出一片用于存放文件分配表,目录表等用户文件管理的磁盘空间
    硬件设备文件名
    1.IDE硬盘 /dev/hd[a-d]
    2.SCSI/SATA/USB硬盘 /dev/sd[a-p]
    3.光驱 /dev/cdrom或/dev/sr0
    4.软盘 /dev/fd[0-1]
    5.打印机(25z针) /dev/lp[0-2]
    6.打印机(USB) /dev/usb/lp[0-15]
    7.鼠标 /dev/mouse
    分区设备文件名
    1.设备文件名
    /dev/hda1 hd->IDE硬盘 a->第一个硬盘号 1->第一个分区号
    /dev/sda1 sd->SCSI,SATA,USB硬盘 a->第一个硬盘号 1->第一个分区号
    PS: 1.主分区和拓展分区以及逻辑分区都会分配分区号
    2.当主分区不足4个的时候,如果有逻辑分区,逻辑分区的分区号都是从5开始的
    挂载(Windows称为分配盘符)
    1.必须分区
    /(根分区)
    swap分区(交换分区,内存2倍,不超过2GB)
    2.推荐分区
    /boot(启动分区,200MB)
    文件系统结构
    举例说明/(根目录)下有几个分区
    / /boot
    / /etc
    / /home
    每个分区可以指定硬盘分区
    /boot ->/dev/sda1
    /home ->/dev/sda2
    /etc ->/dev/sda3
    / ->/dev/sda4(根分区也可以指定一个分区)
    密码原则
    1.复杂性
    八位字符以上,大小写字母,数字,符号
    不能是英文单词
    不能是和用户相关的内容
    2.易记忆性 flzx_3QC(飞流直下三千尺)
    3.时效性
    安装软件包选择
    Desktop(桌面)
    Minimal Desktop(最小化桌面)
    Minimal(最小化)
    Basic Server(基本服务器)
    Database Server(数据库服务器)
    WebServer(网页服务器)
    Virtual Host(虚拟主机)
    software development workstation(软件开发工作站)
    安装日志
    /root/install.log 存储了安装在系统中的软件包及其版本信息
    /root/install.log.syslog 存储了安装过程中留下的事件记录
    /root/anaconda-ks.cfg 以Kickstart配置文件格式记录安装过程中设置的选项信息
    ps: linux超级管理员账号为root
    其他新增用户在/home目录下的同名用户目录
    远程登录
    1.桥接模式(会占用主机同网段的一个IP)
    2.NAT模式(与主机共享一个IP)
    3.仅主机模式(与主机共享的专用网络)
    网卡配置
    1.lo网卡(本地网卡,回环网卡,本机通信和测试用的)

    ifconfig命令(查看ip地址,配置ip,新增网卡)
    配置一个新网卡
    ifconfig eth0 192.168.1.2
    ps:
    eth0 网卡名称
    192.168.1.2 网卡的IP地址
    上面的ifconfig配置是临时的,重启后失效
    ifconfig eth0:1 192.168.1.1
    eth0:1 网卡多加一个IP,一个网卡可以有多个IP
    df命令(分区情况查看)
    初学者建议
    1.Linux严格区分大小写
    2.Linux中所有内容以文件形式保存,包括硬件
    1.硬盘文件是/dev/sd[a-p]
    2.光盘文件是/dev/sr0等
    3.Linux不靠扩展名区分文件类型,但有习惯性文件约定俗成的文件格式
    压缩包:*.gz,*.bz2,*.tar.bz2,*.tgz等等
    二进制软件包:rpm
    网页文件:*.html,*.php
    配置文件:*.conf
    4.Linux所有的存储设备都必须挂在之后才能使用,包括硬盘,U盘和光盘
    5.Windows下的程序不能直接在Linux中安装和运行
    服务器管理和维护建议
    1.目录介绍
    1./bin/ 存放系统命令的目录,普通用户和超级用户都可以执行,不过存在/bin下的命令在单用户模式下也可以执行
    2./sbin/ 保存和系统环境设置相关的命令,只有超级用户可以使用命令进行系统环境,但是有些指令可以允许普通用户查看
    3./usr/bin/ 存放系统命令的目录,普通用户超级用户都可以执行,这些命令和系统启动无关,在单用户模式下不能执行(单用户类似Windows的安全模式)
    4./usr/sbin/ 存放根文件系统不必要的系统管理命令,例如多数服务器程序,只有超级用户可以使用
    5./boot/ 系统启动目录,保存系统启动相关的文件,如内核文件和启动引导程序(grub)文件等
    6./dev/ 设备文件保存位置,Linux中所有内容以文件形式保存,包括硬件,这个目录就是用来保存所有硬件设备文件的
    7./etc/ 配置文件保存位置,系统内所有采用默认安装方式(rpm安装)的服务的配置文件都保存在这个目录,如账号和密码,服务器启动脚本,常用服务配置文件
    8./home/ 普通用户的家目录,建议每个用户时,每个用户要用一个默认登录位置,如用户user1的家目录就是/home/user1
    9./lib/ 系统调用的函数库保存位置
    10./lost+found/ 当系统以外崩溃或机器意外关机,而产生的一些文件碎片放在这里,当系统启动的过程中fsck工具会检测这里,并修复已经损坏的文件系统,
    这个目录只在每个分区中出现
    11./media/ 挂载目录,系统建议是用来挂载媒体设备的,例如软盘和光盘
    12./mnt/ 挂载目录,早期Linux中只有这一个挂载目录,并没有细分,现在这个目录系统建议挂载额外设备,如U盘,移动硬盘和其他操作系统的分区
    13./misc/ 挂载目录,系统建议用来挂载NFS服务的共享目录
    14./apt/ 第三方安装的软件保存位置,这个目录就是放置和安装其他软件的位置和/usr/local目录差不多
    15./proc/ 虚拟文件系统,该目录中数据不保存到硬盘当中,而是保存在内存当中,例如/proc/cpuinfo是保存CPU信息,/proc/devices是保存设备驱动的列表
    /proc/filesystems是保存文件系统列表的,/proc/net是保存网络协议信息的
    16./sys/ 虚拟文件系统,和/proc目录相似,都是保存在内存当中的,主要保存内核信息
    17./root/ 超级管理员的家目录
    18./srv/ 服务数据目录,一些系统服务启动之后,可以在这个目录中保存所需的数据
    19./tmp/ 临时目录,存放系统临时文件的目录,该目录下所有用户都可以访问和写入,不建议存放重要数据,建议每次开机都清理一下
    20./usr/ 系统软件资源目录,注意不是user缩写,而是Unix Software Resource的缩写,存放的不是用户数据,而是存放系统资源目录
    21./var/ 动态数据保存位置,主要保存缓存,日志以及软件运行所产生的的文件
    2.服务器注意事项
    1.远程服务器不允许关机,只能重启
    2.重启时应该关闭服务
    3.不要在服务器访问高峰运行高负载命令
    4.远程配置防火墙时不要把自己提出服务器
    5.指定合理的密码规范并定期更新
    6.合理分配权限
    7.定期备份重要数据和日志
    Linux常用命令
    1.命令格式与文件目录处理命令
    命令格式: 命令 [-选项][参数]
    例如:ls -la /etc
    说明:
    1.个别命令使用不遵循此格式
    2.当有多个选项时,可以写在一起
    3.简化选项与完整选项
    -a 等于 --all
    目录处理命令:ls
    命令名称:ls
    命令英文原意:list
    命令路劲:/bin/ls
    执行权限:所有用户
    功能描述:显示目录文件
    语法:ls 选项[-ald][文件或目录]
    -a 显示所有文件,包括隐藏文件
    -l 详细信息显示
    -d 查看目录属性
    -rw-r--r--
    -文件类型(-二进制文件 d目录 l软连接文件)
    rw- r-- r--
    u所有者 g所属组 o其他人
    r读 w写 x执行
    目录处理命令:mkdir
    命令名称:mkdir
    命令英文原意:make directories
    命令路劲:/bin/mkdir
    执行权限:所有用户
    功能描述:创建新目录
    语法:mkdir -p [目录名]
    -p 递归创建
    目录处理命令:cd
    命令名称:cd
    命令英文原意:change directory
    命令路劲:shell内置命令
    执行权限:所有用户
    功能描述:切换目录
    语法:cd [目录名]
    cd .. 回到上一级目录
    目录处理命令:pwd
    命令名称:pwd
    命令英文原意:print working directory
    命令路劲:/bin/pwd
    执行权限:所有用户
    功能描述:显示当前目录
    语法:pwd
    目录处理命令:rmdir
    命令名称:rmdir
    命令英文原意:remove empty directories
    命令路劲:/bin/rmdir
    执行权限:所有用户
    功能描述:删除空目录
    语法:rmdir [目录名]
    目录处理命令:cp
    命令名称:cp
    命令英文原意:copy
    命令路劲:/bin/cp
    执行权限:所有用户
    功能描述:复制文件或目录
    语法:cp -rp [原文件或者-可以是多个] [目标目录]
    -r 复制目录
    -p 保留文件属性
    目录处理命令:mv
    命令名称:mv
    命令英文原意:move
    命令路劲:/bin/mv
    执行权限:所有用户
    功能描述:剪切文件,改名
    语法:mv [原文件或目录] [目标目录]
    目录处理命令:rm
    命令名称:rm
    命令英文原意:remove
    命令路劲:/bin/rm
    执行权限:所有用户
    功能描述:删除文件或目录
    语法:rm -rf [文件或目录]
    -r 删除目录
    -f 强制执行
    文件处理命令:touch
    命令名称:touch
    命令英文原意:touch
    命令路劲:/bin/touch
    执行权限:所有用户
    功能描述:创建文件
    语法:touch [文件名-可多个]
    touch program files
    创建program 和 files文件
    touch "program files"
    创建program files文件
    文件处理命令:cat
    命令名称:cat
    命令英文原意:touch
    命令路劲:/bin/cat
    执行权限:所有用户
    功能描述:显示文件内容
    语法:cat -n [文件名]
    -n 显示行号
    文件处理命令:tac
    命令名称:tac
    命令英文原意:tac
    命令路劲:/bin/tac
    执行权限:所有用户
    功能描述:显示文件内容(反向列示)
    语法:tac [文件名]
    文件处理命令:more
    命令名称:more
    命令英文原意:more
    命令路劲:/bin/more
    执行权限:所有用户
    功能描述:分页显示文件内容(不可向上翻页)
    语法:more [文件名]
    空格或f 翻页
    enter 换行
    q或Q 退出
    文件处理命令:less
    命令名称:less
    命令英文原意:less
    命令路劲:/bin/less
    执行权限:所有用户
    功能描述:分页显示文件内容(可向上翻页)
    语法:less [文件名]
    空格或f 翻页
    enter 换行
    q或Q 退出
    /关键词 搜索(按n匹配下一行)
    文件处理命令:head
    命令名称:head
    命令英文原意:head
    命令路劲:/bin/head
    执行权限:所有用户
    功能描述:显示文件前几行
    语法:head -n 20 [文件名]
    -n 指定行数(不加n只显示前10行)
    文件处理命令:tail
    命令名称:tail
    命令英文原意:tail
    命令路劲:/bin/tail
    执行权限:所有用户
    功能描述:显示文件最后几行
    语法:tail -n 20 [文件名]
    -n 指定行数(不加n只显示后10行)
    -f 动态显示文件末尾的日志
    链接命令:ln
    命令名称:ln
    命令英文原意:link
    命令路劲:/bin/ln
    执行权限:所有用户
    功能描述:生成软连接文件
    语法:ln -s [原文件] [目标文件]
    -s 创建软连接(类似Windows快捷方式,不加-s就是硬链接,删除硬链接原文件也会被删除,内容也同步更新,i节点也一样)
    硬链接特性:
    1.具有copy -p的同时还是同步更新
    2.通过i节点识别
    3.不能跨分区
    4.不能针对目录使用
    2.权限管理命令
    命令名称:chmod
    命令英文原意:change the permissions mode of a file
    命令路劲:/bin/chmod
    执行权限:所有用户
    功能描述:改变文件或目录权限
    语法:chmod [{ugoa}{+-=}{rwx}][文件或目录] u指的是所属者 g指的是所属组 o指的是其他人 a指的是所有人
    [mode=421][文件或目录] 4指的是r 2指的是w 1指的是x 如果是0就是没有权限
    -R 递归修改
    举例:
    chmod u+x anaconda-ks.cfg
    chmod u-rx anaconda-ks.cfg
    chmod u=wr anaconda-ks.cfg
    chmod 777 anaconda-ks.cfg
    chmod 755 anaconda-ks.cfg
    chmod -R 755 anaconda-ks.cfg
    PS:r读权限 对于文件就是可以查看文件的内容 对于文件夹就是可以列出目录中的内容
    w写权限 对于文件就是可以修改文件的内容 对于文件夹就是可以在目录中创建,删除文件
    x执行全选 对于文件就是可以执行文件 对于文件夹就是可以进入目录
    只有root用户和文件的所有者才能改变文件的权限
    命令名称:chown
    命令英文原意:change file ownership
    命令所在路径:/bin/chown
    执行权限:所有用户
    功能描述:改变文件或目录的所有者
    语法:chown [用户] [文件或目录]
    命令名称:chgrp
    命令英文原意:change file group ownership
    命令所在路径:/bin/chgrp
    执行权限:所有用户
    功能描述:改变文件或目录的所属组
    语法:chgrp [用户组] [文件或目录]
    命令名称:umask
    命令英文原意:the user file-creation mask
    命令所在路径:/bin/umask
    执行权限:所有用户
    功能描述:显示,设置文件的缺省权限
    语法:umask [-S]
    -S 以rwx形式显示新文件的缺省权限
    PS:不加-S是显示结果 如:0022
    0特殊权限
    umask 022 --- -w- -w-
    默认文件的缺省权限自动去掉x(为了系统安全)
    计算方式:(一种逻辑与)
    示例1
    全码 777 rwx rwx rwx
    umask 022 --- -w- -w-
    实际 755 rwx r-x r-x(目录) rwx r-- r--(文件)
    示例2
    全码 777 rwx rwx rwx
    实际 700 rwx --- ---(目录) rw- --- ---(文件)
    umask 077 --- rwx rwx
    3.文件搜索命令
    命令名称:find
    命令英文原意:find
    命令所在路径:/bin/find
    执行权限:所有用户
    功能描述:文件搜索
    语法:find [搜索范围] [匹配条件]
    -name 区分大小名称搜索
    -iname 不区分大小写名称搜索
    -size +n -n n +n是大于多少数据块 -n是小于多少数据块 n是等于多少数据块
    -user 根据所有者查找
    -group 根据所属组查找
    -min +n -n n 文件被访问时间(分钟)
    -cmin +n -n n 文件属性被更改时间(分钟)(分钟)
    -mmin +n -n n 文件内容被修改时间(分钟)
    -a 两个条件同时满足
    -o 两个条件满足其中一个即可
    -type f d l f是文件 d是目录 l是链接
    -exec/-ok 命令 {} ; 在查找的列表中执行其他命令
    -inum 根据i节点查找
    示例:
    find /etc -name init 精准匹配/etc目录下名称是init
    find /etc -name *init* 模糊匹配/etc目录下名称是init
    find /etc -name *init 匹配/etc目录下名称是init结尾的
    find /etc -name init* 匹配/etc目录下名称是init开头的
    find /etc -name init??? 匹配/etc目录下名称是init开头后又出现三个字符的

    find /etc -size +20480 查找/etc目录下大于204800数据块(100MB)的的文件 1数据块 = 512字节 =0.5K 100MB=102400KB=204800数据块
    find /etc -min -5 查找/etc目录下五分钟内被访问的文件

    find /etc -size +163840 -a -size -204800 查找/etc目录大于163840数据块(80MB)并且小于204800数据块(100MB)的文件

    find /etc -name init -exec/-ok ls -l {} ; 查找类表后再执行其他命令,-ok是每个文件进行确认动作

    find -inum 261968 -exec rm -rf {} ; 查找i节点是261968并执行删除,查找i节点用ls -i
    命令名称:locate
    命令英文原意:locate
    命令所在路径:usr/bin/locate
    执行权限:所有用户
    功能描述:在文件资料库中查找文件
    语法:locate [文件名]
    -i不区分大小写
    示例:
    locate init
    PS: 如果还没有收录到资料库可以执行updatedb实时手动收录
    locate不会收录/temp临时目录
    命令名称:which
    命令英文原意:which
    命令所在路径:usr/bin/which
    执行权限:所有用户
    功能描述:搜索命令所在目录及别名信息
    语法:which 命令
    示例:
    which ls
    命令名称:whereis
    命令英文原意:whereis
    命令所在路径:usr/bin/whereis
    执行权限:所有用户
    功能描述:搜索命令所在目录及帮助文档路径,检索出来的1是命令 5是配置文件
    语法:whereis 命令
    示例:
    whereis ls
    命令名称:grep
    命令英文原意:grep
    命令所在路径:bin/grep
    执行权限:所有用户
    功能描述:在文件中搜寻字符串匹配的进行并输出
    语法:grep -iv [指定字符串] [文件]
    -i 不区分大小写
    -v 排除指定字符串
    示例:
    grep mysql /etc/config.json 查找/etc目录下的config.json文件中包含mysql的所有行
    grep -i mysql /etc/config.json 查找/etc目录下的config.json文件中包含mysql的所有行不区分大小写
    grep -v # /etc/config.json 查找/etc目录下的config.json文件中不包含#的行
    grep -v ^# /etc/config.json 查找/etc目录下的config.json文件中不包含#开头的行
    4.帮助命令
    命令名称:man
    命令英文原意:manual
    命令所在路径:usr/bin/manual
    执行权限:所有用户
    功能描述:获取帮助信息,查看功能其实是配合more less功能来使用
    语法:man [命令或配置文件]
    示例:
    man ls
    man services
    命令名称:whatis
    命令英文原意:whatis
    命令所在路径:usr/bin/whatis
    执行权限:所有用户
    功能描述:查看命令的简短信息
    语法:whatis 命令
    示例:
    whatis ls
    命令名称:apropos
    命令英文原意:apropos
    命令所在路径:usr/bin/apropos
    执行权限:所有用户
    功能描述:查看配置文件简短信息的简短信息
    语法:apropos 配置文件
    示例:
    apropos inittab
    PS:指令 --help 查看指令选项说明
    info 和man差不多
    help 命令 查看shell内置命令的帮助
    5.用户管理命令
    命令名称:userad
    命令英文原意:userad
    命令所在路径:usr/bin/userad
    执行权限:root
    功能描述:添加新用户
    语法:userad 用户名
    示例:
    userad hudingwen
    命令名称:passwd
    命令英文原意:passwd
    命令所在路径:usr/bin/passwd
    执行权限:所有用户
    功能描述:设置用户密码
    语法:passwd 用户名
    示例:
    passwd hudingwen
    命令名称:who
    命令英文原意:who
    命令所在路径:usr/bin/who
    执行权限:所有用户
    功能描述:查看登录用户信息
    语法:who
    PS:
    第一列是登录名
    第二列是登录终端:tty是本地终端 pts远程终端
    第三列是登录时间(远程终端后面还会显示远程登录IP地址)
    命令名称:w
    命令英文原意:w
    命令所在路径:usr/bin/w
    执行权限:所有用户
    功能描述:查看登录用户信息(详细版)和查看负载信息
    语法:w
    命令名称:uptime
    命令英文原意:uptime
    命令所在路径:usr/bin/uptime
    执行权限:所有用户
    功能描述:服务器运行时间明细
    语法:uptime
    6.文件解压缩命令
    命令名称:gzip
    命令英文原意:gzip
    命令所在路径:/bin/gzip
    执行权限:所有用户
    功能描述:压缩文件(只能压缩文件,不保留原文件)
    语法:gzip [文件]
    PS:
    压缩后的格式为.gz
    命令名称:gunzip
    命令英文原意:gunzip
    命令所在路径:/bin/gunzip
    执行权限:所有用户
    功能描述:解压文件(只能压缩文件,不保留原文件)
    语法:gunzip [文件] == gzip -d [文件]
    命令名称:tar
    命令英文原意:tar
    命令所在路径:/bin/tar
    执行权限:所有用户
    功能描述:打包目录
    语法:tar 选项[-zcvf -zcvf -ztvf] [压缩后的文件名] [目录]
    -c打包 -x解包
    -v显示详细信息
    -f指定文件名
    -z打包同时压缩
    -t查看
    PS:压缩后的文件格式:.tar.gz
    命令名称:zip
    命令英文原意:zip
    命令所在路径:/usr/bin/zip
    执行权限:所有用户
    功能描述:压缩文件和目录(压缩后不会删原文件)
    语法:zip 选项[-r] [压缩后的文件名] [文件或目录]
    -r 压缩目录
    PS:
    压缩后的格式为.zip
    命令名称:unzip
    命令英文原意:unzip
    命令所在路径:/usr/bin/unzip
    执行权限:所有用户
    功能描述:解压缩(压缩后不会删原文件)
    语法:unzip [压缩文件]
    命令名称:bzip2
    命令英文原意:bzip2
    命令所在路径:/usr/bin/bzip2
    执行权限:所有用户
    功能描述:压缩文件(压缩比例高 一般压缩大文件)
    语法:bzip2 [选项-k] [文件]
    -产生压缩文件后保留原文件
    PS:
    压缩后的格式为.bz2
    命令名称:bunzip2
    命令英文原意:bunzip2
    命令所在路径:/usr/bin/bunzip2
    执行权限:所有用户
    功能描述:解压缩文件
    语法:bunzip2 [选项-k] [压缩文件]
    -产生压缩文件后保留原文件
    7.网络命令
    命令名称:write
    命令英文原意:write
    命令所在路径:/usr/bin/write
    执行权限:所有用户
    功能描述:给用户发信息
    语法:write 用户名
    PS:发完后,Ctrl+D保存结束才会发布成功,如果人不在线发布会不成功
    命令名称:wall
    命令英文原意:write all
    命令所在路径:/usr/bin/wall
    执行权限:所有用户
    功能描述:给所有用户发消息
    语法:wall [信息]
    PS:发完后,Ctrl+D保存结束才会发布成功,如果人不在线发布会不成功
    命令名称:ping
    命令英文原意:ping
    命令所在路径:/bin/ping
    执行权限:所有用户
    功能描述:测试网路连通性
    语法:ping IP
    -c n ping的次数
    命令名称:ifconfig
    命令英文原意:interface network
    命令所在路径:/sbin/ifconfig
    执行权限:所有用户
    功能描述:查看和临时设置网卡信息
    语法:ifconfig [网卡名] [IP地址]
    命令名称:lastlog
    命令英文原意:lastlog
    命令所在路径:/sbin/lastlog
    执行权限:所有用户
    功能描述:查看用户最后登录信息
    语法:lastlog
    命令名称:traceroute
    命令英文原意:traceroute
    命令所在路径:/sbin/traceroute
    执行权限:所有用户
    功能描述:显示数据包到主机间的路劲
    语法:traceroute [域名或IP]
    命令名称:netstat
    命令英文原意:netstat
    命令所在路径:/bin/netstat
    执行权限:所有用户
    功能描述:显示网络相关信息
    语法:netstat [选项]
    -t 查询TCP协议
    -u 查询UDP协议
    -l 监听
    -r 路由
    -n 显示IP地址和端口
    -a 所有
    命令名称:setup(Redhat专用)
    命令英文原意:setup
    命令所在路径:/sbin/setup
    执行权限:所有用户
    功能描述:设置网络
    语法:setup
    命令名称:mount
    命令英文原意:mount
    命令所在路径:/bin/mount
    执行权限:所有用户
    功能描述:挂载命令
    语法:mount [-t 文件系统] 设备文件名 挂载点(挂载路径)
    示例:mount -t iso9660 /dev/sr0 /mnt/cdrom
    命令名称:umount
    命令英文原意:umount
    命令所在路径:/bin/umount
    执行权限:所有用户
    功能描述:卸载命令
    语法:umount [设备文件名或者挂载点]
    8.关机命令
    命令名称:shutdown
    命令英文原意:shutdown
    命令所在路径:/bin/shutdown
    执行权限:所有用户
    功能描述:关机命令
    语法:shutdown [选项] 时间
    -c 取消前一个关机命令
    -h 关机
    -r 重启=reboot
    示例:
    shutdown -r now
    PS: 其他关机命令:
    halt
    poweroff
    init 0
    reboot
    init 6
    0关机 1单用户 2不完全多用户,不含NFS服务 3完全多用户 4未分配 5图形界面 6重启
    修改系统默认运行级别 cat /etc/inittab id:3:initdefault;
    查询当前系统运行级别
    退出登录用户:logout
    9.文本编辑器
    vim常用操作
    语法:vim 文件名
    操作指令
    插入命令
    a 在光标所在字符后插入
    A 在光标所在行尾插入
    i 在光标所在字符前插入
    I 在光标所在行首插入
    o 在光标下插入新行
    O 在光标上插入新行
    编辑模式(:)
    命令模式(没有:)
    :set nu 设置行号
    :set nonu 取消行号
    :wq 保存退出
    gg 到第一行
    G 到最后一行
    nG 到第n行
    :n 到第n行
    $ 移至行尾
    0 移至行首
    x 删除当前光标所在处字符
    nx 删除光标所在处后n个字符
    dd 删除光标所在行,ndd删除n行
    dG 删除光标所在行到文件末尾内容
    D 删除光标所在处到行尾内容
    :n1,n2d 删除指定行,删除n1行到n2行的内容
    yy 复制当前行
    nyy 复制当前行以下n行
    dd 剪切当前行
    ndd 剪切当前行以下n行
    p 粘贴在当前光标所在行下
    P 粘贴在当前光标所在行上
    r 替换当前光标的字符
    R 从光标所在处开始替换字符,按ESC结束
    u 取消上一步操作
    :/string 搜索指定字符串,按n搜索下一个匹配字符,搜索忽略大小写:set ic 恢复大小写:set ic no
    :%s/old/new/g 全文替换指定字符串
    :n1,n2s/old/new/g 在一定范围内替换指定字符串
    :w 保存修改
    :w 文件名 另存为指定文件
    :wq 保存退出
    ZZ 快捷键,保存修改并退出
    :q! 不保存退出
    :wq! 强制保存修改并退出(文件所有者及root可使用)
    进阶:
    :r 文件名 把文件内容导入到当前光标处
    :! 命令 在编辑时可以执行其他命令
    :r !命令 把当前执行命令的内容导入到当前光标处
    :map ^P I#<ESC> 定义快捷键,意思是按住Ctrl+P
    :n1,n2s/^/#/g 指定行的行首添加注释符号
    :ab mymail hudingwen@qq.com 定义替换,当输入mymail回车后自动输入hudingwen@qq.com
    10.软件包分类
    源码包(安装时间长)
    脚本安装包
    优点:
    开源,如果有足够能力,可以修改源代码
    可以自由选择所需的功能
    软件是编译安装,所以更加适合自己的系统,更加稳定也效率更高
    卸载方便
    缺点:
    安装过程步骤较多,尤其安装较大的软件集合是(如LAMP环境搭建),容易出现拼写错误
    编译过程时间较长,安装比二进制安装时间长
    因为是编译安装,安装过程中一旦报错新手很难解决
    二进制包(RPM包,系统默认包)(安装时间短)(不能看到源代码)
    优点:
    包管理系统简单,只通过几个命令就可以实现包的安装,升级,查询和卸载
    安装速度比源码包安装快的多
    缺点:
    经过编译,不再可以看到源代码
    功能选择不如源码包灵活
    依耐性
    RPM包管理-rpm命令管理
    rpm包命名原则
    httpd-2.2.15-15.el6.centos.1.i686.rpm
    httpd 软件包名
    2.2.15 软件版本
    15 软件发布的次数
    el6.centos 适合的Liunx平台
    i686 适合的硬件平台
    rpm rpm包扩展名
    rpm包依赖
    树形依赖: a->b->c
    安装顺序 c b a
    卸载顺序 a b c
    环形依赖: a->b->c->a
    用一条命令同时安装三个既可解决环形依赖
    模块依赖:模块依赖查询网站:www.rpmfind.com
    安装与卸载
    包全名:
    操作的包是没有安装的软件包时,使用包全名.而且要注意路径
    包名:
    操作已经安装的软件包是,使用包名.是搜索/var/lib/rpm/的数据库
    RPM安装:
    格式:
    rpm -ivh 包全名
    -i(install) 安装
    -v(verbose) 显示详细信息
    -h(hash) 显示进度
    --nodeps 不检测依赖(做实验用)
    示例:
    rpm -ivh httpd-2.2.15-15.el6.centos.1.i686.rpm
    RPM包升级
    格式:
    rpm -Uvh 包全名
    -U(upgrade) 升级
    RPM包卸载
    格式:
    rpm -e 包名
    -e(erase) 卸载
    RPM查询包是否安装
    格式:
    rpm -q 包名
    -q(query) 查询
    -a(all) 查询所有(不需要跟包名)
    RPM查询详细信息
    格式:
    rpm -i 包名
    -i(information) 查询软件信息
    -p(package) 查询未安装包信息(包全名)
    RPM包中文件安装位置
    格式:
    rpm -ql 包名
    -l(list) 列表
    RPM查询系统文件属于哪个RPM包
    格式:
    rpm -qf 系统文件名
    -f(file) 查询的系统文件名
    RPM查询软件包的依赖性
    格式:
    rpm -qR 包名
    -R(requires) 查询软件包的依赖性
    -p(package) 查询未安装包信息(跟包全名)
    RPM包校验
    格式:
    rpm -V 包名
    -V(verify) 校验指定RPM包中的文件
    PS:返回提示
    S 文件大小是否改变
    M 文件的类型或文件的权限是否改变
    文件类型:
    c 配置文件 config file
    d 普通文件 documentation
    g "鬼"文件,很少见,不应该被RPM包含 ghost file
    l 授权文件 license file
    r 描述文件 read me
    5 文件MD5检验是否改变,可查看内容是否改变
    D 设备的中,从代码是否改变
    L 文件路径是否改变
    U 文件的所有者是否改变
    G 文件的所属组是否改变
    T 文件的修改时间是否改变
    RPM包中文件提取
    rpm2cpio 包全名 | cpio -idv .文件绝对路径
    cpio 选项<[文件|设备]
    -i copy-in 还原
    -d 还原时自动新建目录
    -v 显示还原过程
    复现问题:
    1.误删除ls命令
    mv /bin/ls /temp
    2.查询ls命令属于哪个软件包
    rpm -qf /bin/ls
    3.提取原包中ls
    rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
    4.还原ls
    cp /root/bin/ls /bin/
    RPM包管理-yum命令管理
    1.使用setup(Redhat专用)
    2.修改配置文件,IP地址配置
    1.vi /etc/sysconfig/network-scripts/ifconfig-eth0
    把ONBOOT="no"改为ONBOOT="yes"启动网卡
    2.重启网络服务
    service network restart
    3.网络yum源
    vi /etc/yum.repos.d/CentOS-Base.repo
    [base] 容器名称,一定要放在[]中
    name 容器说明,可以随便写
    mirrorlist 镜像站点,这个可以注释掉
    baseurl 我们的yum源服务器地址.默认是Centos官方的yum原服务器.也可以改成自己喜欢的yum源地址
    enable 次容器是否生效,默认是1生效,不生效就是0
    gpgcheck 如果是1是只RPM的数字证书生效,如果0则不生效
    gpgkey 数字证书的公钥文件保存地址,不用修改
    4.常用yum命令
    yum list
    查询所有可用软件包列表
    yum search 关键词
    搜索服务器上所有和关键词相关的包
    yum -y install 包名
    安装所需软件包
    选项:
    install 安装
    -y 自动回答yes
    yum -y update 包名
    升级所需软件包
    选项:
    update 升级(不加包名就是升级服务器所有软件,容易出现问题,无法开机等问题)
    -y 自动回答yes
    yum -y remove 包名
    卸载所需软件包
    选项:
    remove 卸载(此命令不完全,卸载时会卸载依赖包,所以安装时最小安装即可,尽量不卸载)
    -y 自动回答yes
    yum grouplist
    列出可用的软件包组
    yum groupinstall 软件组名
    安装指定软件包组
    yum groupremove 软件组名
    卸载指定软件包组
    5.光盘yum源搭建
    1.挂载光盘
    mount /dev/sr0 /media/cdrom
    2.让在线yum源失效(改后缀名就好了)
    mv CentOS-Base.repo CentOS-Base.repo.bak
    mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
    mv CentOS-Vault.repo CentOS-Vault.repo.bak
    3.修改光盘yum源文件
    vim CentOS-Media.repo
    修改内容:
    1.改yum地址为本地磁盘
    baseurl=file:///media/cdrom (光盘地址,前后不能有空格)
    ps:其他挂载地址注释掉,不然一直报错,但不影响使用
    2.启用光盘yum源
    enable=1
    源码包和RPM包的区别
    安装之前的区别:概念上的区别
    安装之后的区别:安装位置不同
    RPM包安装位置
    绝大多数数默认安装位置
    /etc/ 配置文件安装目录
    /usr/bin/ 可执行的命令安装目录
    /usr/lib/ 程序所用的函数库保存位置
    /usr/share/doc/ 基本的软件使用手册保存位置
    /usr/share/man/ 帮助文件保存位置
    源码包安装位置
    /usr/local/软件包/
    安装位置不同带来的影响
    RPM包安装的服务可以用系统服务管理命令(service)来管理,例如RPM包安装的Apache的启动方法
    绝对地址:
    /etc/rc.d/init.d/httpd star
    服务命令:
    service http start(Redhat专用)
    源码包安装的服务不能被服务管理命令管理,只能用绝对路径进行服务管理
    /usr/local/apache2/bin/apachectl start
    源码包安装
    安装准备
    安装C语言编译器
    下载源码包
    mirror.bit.edu.cn/apache/httpd/
    安装注意事项
    源代码保存位置:/usr/local/src/
    软件包安装位置:/usr/local/
    如何确定安装过程中报错
    安装过程停止
    并出现error,warning,no等提示
    下载好安装软件压缩包
    解压后并进入软件源码包
    ./configure 软件包配置和检测
    定义所需要的的功能选项
    检测系统环境是否符合安装要求
    巴定壕的功能选项和检测系统环境的信息都写入Makefile文件,用于后续编辑
    命令:
    配置
    ./configure --prefix=/usr/local/apache2
    编译:
    make
    清理:
    make clean
    安装
    make install
    卸载:
    直接删除安装目录
    脚本安装包:
    脚本安装包并不是独立的软件包类型,常见安装的是源码包
    是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装
    非常类似Windows下软件的安装方式
    Webmin的作用
    Webmin是一个基于Web的Linux系统管理界面,你可以通过图形化的方式设置用户账号,Apache,DNS,文件共享等服务
    安装方式:
    下载软件
    https://sourceforge.net/projects/webadmin/files/webmin/
    11.用户和用户组管理
    用户文件
    /etc/passwd
    第1字段:用户名称
    第2字段:密码标志(如果没有,本地登录就可以直接登录)
    第3字段:UID(用户ID)
    0 超级用户
    1-499 系统用户(伪用户)
    500-65535 普通用户
    第4字段:GID(用户初始组)
    第5字段:用户说明
    第6字段:家目录
    普通用户:/home/用户名
    超级用户:/root/
    第7字段:登录之后的shell
    初始组和附加组
    初始组:就是指用户已登录就立刻拥有这个用户组的相关权限,每个用户初始组只能有一个,一般就是这个用户的用户名相同的组名组为这个用户的初始组
    附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个
    shell是什么?
    shell就是linux的命令解释器
    在/etc/passwd当中,除了标准的shell是/bin/bash之外,还可以写如:/sbin/nologin
    影子文件
    /etc/shadow
    第1字段:用户名
    第2字段:加密密码(SHA512)
    如果是!!或者*代表没有密码
    第3字段:密码最后一次修改日期,使用1970-1-1号作为标准时间,每过一天时间戳加1
    第4字段:两次密码的修改间隔时间(和第3字段相比)
    第5字段:密码有效期(和第3字段相比)
    第6字段:密码修改到期前的警告天使(和第5字段相比)
    第6字段:密码过期后的宽限天数(和第5字段相比)
    0:代表密码过期后立即失效
    -1:则代表密码永远不会失效
    第7字段:账号失效时间
    要用时间戳表示
    第9字段:保留
    时间戳换算:
    把时间换算成日期
    date -d "1970-01-01 16066 days"
    把日期换算成时间戳
    echo $(($(date --date="2020-11-04" +%s)/86400+1))
    组信息文件
    /etc/group
    第1字段:组名
    第2字段:组密码标志
    第3字段:GID
    第4字段:组中附加用户
    组密码文件
    /etc/gshadow
    第1字段:组名
    第2字段:组密码(一般不推荐,会降低系统安全性)
    第3字段:组管理员用户名
    第4字段:组中附加用户
    用户家目录
    普通用户:/home/用户名,所有者和所属组都是此用户,权限是700
    超级用户:/root/,所有者和所属组都是root用户,权限是500
    用户的邮箱
    /var/spool/mail/用户名/
    用户模板目录(添加用户时默认从这里拷贝文件到用户的家目录)
    /etc/skel/
    用户添加
    格式:
    useradd [选项] 用户名
    -u UID,手动指定用户的UID号
    -d 家目录,手动指定用户的家目录
    -c 用户说明,手动指定用户的说明
    -g 组名,手动指定用户的初始组
    -G 组名,手动指定用户的附加组
    -shell 手动指定用户的登录shell,默认是/bin/bash
    用户默认值文件
    /etc/default/useradd
    GROUP=100 用户默认组
    HOME=/home 用户家目录
    INACTIVE=-1 密码过期宽限天数
    EXPIRE= 密码失效时间
    SHELL=/bin/bash 默认shell
    SKEL=/etc/skel 模板目录
    CREATE_MAIL_SPOOL=yes 是否建立邮箱
    /etc/login.defs
    MAIL_DIR /var/spool/mail 邮件存放路劲
    PASS_MAX_DAYS 99999 密码有效期
    PASS_MIN_DAYS 0 密码修改间隔时间
    PASS_MIN_LEN 5 密码最小位数
    PASS_WARN_AGE 7 密码到期警告
    UID_MIN 500 最小用户ID
    UID_MAX 60000 最大用户ID
    GID_MIN 500 最小用户组ID
    GID_MAX 60000 最大用户组ID
    CREATE_HOME yes 创建家目录
    UMASK 077 目录权限
    USERGROUPS_ENAB yes
    ENCRYPT_METHOD SHA512 加密模式
    密码修改
    格式:
    passwd [选项] 用户名
    -S 查询用户密码的密码状态,近root用户可用
    -l 暂时锁定用户,仅root用户可用
    -u 解锁用户,仅root用户可用
    --stdin 可以通过管道符输出的数据作为用户的密码
    echo "123" | passwd --stdin username
    修改用户信息
    格式:
    usemod [选项] 用户名
    -u UID,手动指定用户的UID号
    -c 用户说明,手动指定用户的说明
    -G 组名,手动指定用户的附加组
    -L 临时锁定用户
    -U 解锁用户
    查询用户密码状态
    格式:
    chage [选项] 用户名
    -l 列出用户的详细密码状态
    -d 日期,修改密码最后一次更改日期
    -m 天数,两次密码修改间隔
    -M 天数,密码有效期
    -W 天数,密码过期前警告天数
    -I 密码过期后宽限天数
    -E 账号失效时间
    删除用户
    格式:
    userdel [-r] 用户名
    -r 删除用户的同时删除用户的家目录
    手工删除用户:
    vi /etc/passwd
    vi /etc/shadow
    vi /etc/group
    vi /etc/gshadow
    rm -rf /var/spool/mail/用户名
    rm -rf /home/用户名
    查看用户ID
    格式:
    id 用户名
    切换用户
    格式:
    su [选项] 用户名
    - 选项只能使用"-"时,代表连带用户的环境变量一起切换
    -c 仅执行一次命令,而不切换用户身份
    查看用户环境变量
    格式:
    env
    用户组管理
    添加:
    格式:
    groupadd [选项] 组名
    -g GID,手动指定ID
    修改:
    格式:
    groupmod [选项] 组名
    -g GID,修改组ID
    -n 新组名,修改组名
    删除:
    格式:
    groupdel 组名
    把用户加入某组或从某组删除
    格式:
    gpasswd 选项 组名
    -a 用户名 把用户加入组
    -d 用户名 吧用户从组中删除
    12.权限管理
    ACL权限
    简介
    由于默认的系统权限不能满足时,需要特殊权限分配,和windows的权限分配类似
    开启
    临时生效:
    mount -o remount,acl /
    永久生效:
    1.修改fstab文件(开启启动挂载配置)
    vim /etc/fstab
    挂载根分区的default改成default,acl
    2.重新挂载文件系统或重启生效
    mount -o remount /
    查看ACL
    格式:
    getfacl 文件名
    设定ACL
    格式:
    setfacl 选项 文件名
    -m 设定ACL权限
    -x 删除指定的ACL权限
    -b 删除所有的ACL权限
    -d 设定默认的ACL权限
    -k 删除默认的ACL权限
    -R 递归设定ACL权限
    示例:
    给人设定权限
    setfacl -m u:用户名:权限rwx 文件路径
    给组设定权限
    setfacl -m g:组名:权限rwx 文件路径
    设置最大有效权限mask
    用来预防最大权限,可以防止在赋给用户权限时给与权限过大的情况发生
    格式:
    setfacl -m m:权限rwx 文件路径
    删除ACL权限
    删除整个ACL权限
    setfacl -b 文件路径
    删除指定用户或组的ACL权限
    setfacl -x u:用户 文件路径
    setfacl -x g:组名 文件路径
    递归ACL权限(当前目录以及目录下的所有文件)
    格式:
    setfacl -m u:用户名:权限rwx -R 文件路径
    -R 递归修改ACL权限
    默认ACL权限(新建的文件或子目录都会继承这个目录的权限)
    格式:
    setfacl -m d:u:用户名:权限rwx 文件路径
    文件特殊权限
    SetUID
    只有可以执行的二进制程序才能设定SUID权限
    命令执行者要对该程序拥有x(执行)权限
    命令执行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
    SetUID权限只有在改程序执行过程中有效,也就是说身份改变只有在程序执行过程中有效
    例如:passwd指令
    ll /usr/bin/passwd
    他的权限是 -rwsr-xr-x 其中所属主执行权限是s,组和其他有x执行权限,如果当前文件有问题rws会变成rwS大写的,提醒用户
    设定SetUID的方法(危险)
    4代表SUID
    chmod 4755 文件名
    chmod u+s 文件名
    ps: 关键目录应该严格控制写权限,比如"/" ,"usr" 等等
    用户的密码设置要严格遵守密码三原则
    对系统中默认应该具有的SetUID权限文件做一列表,定时检测有没有之外的文件被设置了SetUID权限
    SetGID
    设定SetGID的方法
    2代表SGID
    chmod 2755 文件名
    chmod g+s 文件名
    针对二进制文件
    只有可以执行的二进制程序才能设定SGID权限
    命令执行者要对该程序拥有x(执行)权限
    命令执行在执行程序的时候,组身份升级为该程序文件的属组
    SetUID权限同样只在该程序执行过程中有效,SetGID同样适用
    例如:locate指令
    ll /usr/bin/locate
    他的权限是 -rwx--s-x 其中所属组执行权限是s,组和其他有x执行权限,如果当前文件有问题rws会变成rwS大写的,提醒用户
    针对目录的作用
    普通用户必须对此目录拥有r和x权限,才能进入此目录
    普通用户在此目录中的有效组会变成此目录的属组
    若普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的属组
    Sticky BIT
    设定SBIT的方法
    1代表SBIT
    chmod 1755 文件名
    chmod o+t 文件名
    取消SBIT的方法
    chmod 755 文件名
    chmod o-t 文件名
    SBIT粘着位作用
    粘着位目前只对目录有效
    普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
    如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其他用户建立的文件.
    一旦赋予了粘着位,处了root用户可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户对的文件
    例如:
    /temp/目录中的权限drwxrwxrwt. 中的t就是粘着位
    文件系统属性权限
    格式:
    chattr [+-=] [选项] 文件或目录名
    + 增加权限
    - 删除权限
    = 等于某权限
    选项:
    i
    对于文件
    不允许对文件进行删除,改名,也不能添加任何数据,只能查看内容(root也不能操作)
    对于目录
    只能修改目录下的文件的数据,但不能建立或删除文件
    a
    对于文件
    只能在文件中增加数据,但是不能修改也不能删除数据
    对于目录
    只能在目录建立和修改文件,但不允许删除
    示例:
    chattr +i 文件名
    查看文件系统属性
    格式:
    lsattr 选项 文件名
    -a 显示所有文件和目录
    -d 若目标是目录,仅列出目录本身的属性,而不是子文件
    sudo权限
    root把本来只能用超级用户执行的命令赋予普通用户执行
    sudo的操作对象是系统命令
    命令:
    编辑权限命令:
    visudo
    实际修改的是/etc/sudoers文件

    添加权限示例:
    限制某用户可以执行重启命令
    格式:(路径是写绝对路径)
    用户名 ALL=/sbin/shutdown -r now
    使用方法
    格式:
    sudo /sbin/shutdown -r now
    ps:不要给普通用户赋予vi此类命令的权限
    14.文件系统管理
    分区和文件系统
    分区类型:
    主分区:总共最多只能分四个
    扩展分析:只能有一个,也算主分区的一种,也就是说主分区加扩展分区最多有四个.但是扩展分区不能存储数据和格式化,必须在划分成逻辑分区才能使用
    逻辑分区:逻辑分区是在扩展分区划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘Linux最多支持11个逻辑分区
    分区表示方法:
    方法1:
    主分区1 sda1
    主分区2 sda2
    主分区3 sda3
    扩展分区 sda4
    逻辑分区1 sda5
    逻辑分区2 sda6
    逻辑分区3 sda7

    方法2:(逻辑分区是从sda5开始)
    主分区1 sda1
    扩展分区 sda2
    逻辑分区1 sda5
    逻辑分区2 sda6
    逻辑分区3 sda7
    文件系统
    ext2:
    是ext文件系统的升级版本,Red Hat linux7.2版本以前的系统默认都是ext2文件系统,1993年发布,最大支持16TB的分区和最大2TB的文件
    ext3:
    是ext3文件系统是ext2文件系统的升级版本,最大区别就是带日志功能,在系统突然停止时提高文件系统的可靠性,其他不变
    ext4:
    它是ext3文件系统的升级版,ext4在性能,伸缩性和可能性方面进行了大量改进,并向下兼容,
    支持最大1EB文件系统和16TB文件,无线数量子目录,Extent连续数据块概念,多块分配,延迟分配,持久预分配,快速FSCK,
    日志校验,无日志模式,在线碎片整理,inode增强,默认启用barrier等
    文件系统常用命令:
    文件系统查看命令
    df [选项] [挂载点]
    -h 人性化显示
    -a 显示所有的文件系统信息,包括特殊的文件系统,如/proc,/sysfs
    -T 显示文件系统类型
    -m 以MB单位显示容量
    -k 以KB单位显示容量,默认为KB
    统计目录或文件大小
    du [选项] [目录或文件名]
    -a 显示每个子文件的磁盘占用量,默认只统计目录的磁盘占用量
    -h 人性化显示
    -s 只统计占用量,而不列出子目录和子文件的占用量
    示例:
    一般用于查询目录占用磁盘空间
    du -sh [文件或目录]
    du和df的区别
    df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的文件已经删除了,但是程序并没有释放空间)
    du命令是面向文件的,只会计算文件或目录的占用空间
    ps:linux定时重启让系统恢复到最佳状态
    文件系统修复命令
    fsck [选项] 分区设备文件名
    -a 不显示用户提示,自动修复文件系统
    -y 自动修复,和-a作用一样,不过有些文件系统只支持-y
    显示磁盘状态命令
    dumpe2fs 分区设备文件名
    查询命令
    查询系统中已挂载的设备
    mount [-l]
    -l 会显示卷标名
    根据配置文件/etc/fstab的内容,自动挂载
    mount -a
    挂载命令格式
    mount [-t 文件系统] [-L 卷标名] [-o 特殊选线] 设备文件名 挂载点
    -t 文件系统 加入文件系统类型来指定挂载的类型,可以是ext3,ext4 等文件系统
    -L 卷标名 挂载指定卷标的分区,而不是安装设备文件名挂载
    -o 特殊选项 可以指定挂载的额外选型
    挂载光盘
    建立挂载点
    mkdir /media/cdrom
    挂载光盘
    mount /dev/cdrom /media/cdrom(是sr0的硬链接)
    mount /dev/sr0 /media/cdrom
    卸载命令
    umount 设备文件名或挂载点
    挂载U盘
    查看U盘设备文件名
    fdisk -l
    找到U盘设备名,挂载U盘
    mount -t vfat /dev/sdb1 /media/usb/
    ps:
    linux默认是不支持NTFS文件系统
    linux中识别U盘的fat16格式为fat,fat32识别vfat
    支持Windows的NTFS文件系统
    方法1:内核编译(用得太少,工作量太大)
    方法2:第三方插件
    下载NTFS-3G插件
    mount -t ntfs-3g 分区设备文件名 挂载点
    fdisk分区
    fdisk分区命令过程
    查看新硬盘
    fdisk -l
    新建一个分区
    fdisk /dev/sdb
    进入指令后可输入的参数
    a 设置可引导标记
    b 编辑bsd磁盘标签
    c 设置DOS操作系统兼容标记
    d 删除一个分区
    l 显示已知的文件系统类型
    m 帮助菜单
    n 建立分区(常用)
    o 建立空白DOS分区
    p 显示分区列表(常用)
    q 不保存退出
    s 新建空白SUN磁盘标签
    t 改变一个分区的系统ID
    u 改变显示记录单位
    v 验证分区表
    w 保存退出
    x 附加功能(仅专家)
    重新读取分区表信息
    partprobe
    格式化分区
    mkfs -t ext4 /dev/sdb1
    创建分区
    mkdir /disk1
    mount /dev/sdb1 /disk1
    分区自动挂载与fstab文件修复
    /etc/fstab文件
    第一字段:分区设备文件名或UUID(硬盘通用唯一识别码-dumpe2fs -h 分区设备名)
    第二字段:挂载点
    第三字段:文件系统名称
    第四字段:挂载参数
    第五字段:指定分区时分被dump备份,0代表不备份,1代表每天备份,2代表不定期备份(在每个分区的lost+found)
    第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测优先级,那么当然1的优先级比2高
    修改后,先挂载尝试,防止重启系统重启失败
    mount -a
    当重启挂载失败提示后,依然可以登录root,但是此时系统是只读,我们需要重新挂载读写权限(仅限于根分区没有挂载失败的情况下)
    mount -o remount,rw /
    15.shell
    shell基础
    什么是shell?
    shell是一个命令解释器,它为用户提供了一个向linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至是编写一些程序.
    shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强.shell是解释执行语言,在shell中可以直接调用linux命令
    类别
    shell分为两种主要语法类型
    Bourne家族:sh,ksh,Bash,psh,zsh
    C家族:csh,tcsh
    两种类型不兼容,一般我们都是B家族shell的Bash
    Bash:
    Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本shell
    Linux中到底支持哪些shell?
    /etc/shells
    shell执行方式
    echo输出命令
    格式:
    echo [选项] [输出内容]
    -e 支持反斜线控制的字符转换
    \ 输出本身
    a 输出警告音
     退格键(向左删除一个字符)
    c 取消输出行末的换行符,和"-n"选项一致
    e ESCAPE键
    f 换页符
    换行符
    回车符
    制表符(也就是tab键)
    v 垂直制表符
    nnn 按照八进制ASCII码表输出字符,其中0是数字零,nnn是三位八进制数
    xhh 按照十六进制ASCII码表输出字符,其中hh是两位十六进制数
    颜色输出:
    echo -e "e[1;31m abcd e[0m"
    30m 黑色
    31m 红色
    32m 绿色
    33m 黄色
    34m 蓝色
    35m 洋色
    36m 青色
    37m 白色
    第一个脚本
    vi hello.sh
    #!/bin/bash
    #我的第一个脚本
    #作者:胡丁文
    echo -e "我是输出内容"
    执行
    赋予权限直接执行:
    chmod 755 hello.sh
    ./hello.sh
    通过调用bash执行脚本(不需要有执行权限)
    bash hello.sh
    转换window编写的命令
    dos2unix 文件名
    历史命令
    格式:
    history [选项] [历史命令保存文件]
    -c 清空历史命令
    -w 把缓存中历史命令写入历史命令文件~/.bash_history
    默认保存1000条记录
    /etc/profile
    HISTSIZE=1000
    执行历史命令
    1.上下箭头调用以前的命令
    2."1n"重复执行第n条历史命令
    3."!!"重复执行上一条命令
    4."!字符串"重复执行最后一条一该字符串开头命令
    命令不全:
    在bash中,命令与文件不全是非常方便的,按住tab键会自动进行不全,如果不出现可能有多个匹配,此时需要再按住一下tab
    命令别名
    格式:
    alias 别名="原命令"
    查询有哪些别名:
    alias
    命令执行顺序:
    1.第一顺位执行用绝对路径或相对路径执行的命令
    2.第二顺位执行别名
    3.第三顺位执行bash的内部命令
    4.第四顺位执行按照$PATH环境变量定义的目录查找顺序找到的第一个命令
    获取环境变量路劲:
    echo $PATH
    别名永久生效:
    vi /root/.bashrc
    删除别名:
    unalias 别名
    bash常用快捷键
    ctrl+A 把光标移动到命令开头
    ctrl+E 把光标移动到命令结尾
    ctrl+C 终止当前命令
    ctrl+L 清屏
    ctrl+U 删除或剪切光标之前的字符
    ctrl+K 删除或剪切光标之后的内容
    ctrl+Y 粘贴之前剪切的内容
    ctrl+R 在历史命令中搜索,按下ctrl+R之后,就会出现搜索界面,只要输入搜索内容就会从历史命令中搜索
    ctrl+D 退出当前终端
    ctrl+Z 暂停,并放入后台,这个快捷键牵扯工作管理的内容,后面了解
    ctrl+S 暂停屏幕输出
    ctrl+Q 恢复屏幕输出
    输出重定向
    标准输入输出
    设备 设备文件名 文件描述符 类型
    键盘 /dev/stdin 0 标准输入
    显示器 /dev/sdtout 1 标准输出
    显示器 /dev/sdterr 2 标准错误输出
    输出重定向
    类型 符号 作用
    标准输出重定向 命令 > 文件 以覆盖的方式输出到文件中
    标准输出重定向 命令 >> 文件 以追加的方式输出到文件中
    标准错误输出重定向 命令 2> 文件 以覆盖的方式输出到文件中
    标准错误输出重定向 命令 2>> 文件 以追加的方式输出到文件中
    正确输出和错误输出同时保存
    命令 > 文件 2>&1 以覆盖的方式输出到文件中
    命令 >> 文件 2>&1 以追加的方式输出到文件中
    命令 &> 文件 以覆盖的方式输出到文件中
    命令 &>> 文件 以追加的方式输出到文件中
    命令 >> 文件1 2>>文件2 正确追加到文件1,错误追加到文件2
    输出内容丢到垃圾箱
    ls &>/dev/null
    输入重定向(不常用,了解)
    wc [选项] [文件名]
    -c 统计字节数
    -w 统计单次数
    -l 统计行数
    示例:
    wc < test
    多命令顺序执行
    多命令执行符号 格式 作用
    ; 命令1;命令2 多个命令顺序执行,命令之间没有任何联系
    && 命令1&&命令2 逻辑与,当命令1正确执行,命令2才会执行;当命令1不正确执行,名2不执行
    || 命令1||命令2 逻辑或,当命令1不正确执行,命令2才会执行;当命令1正确执行,命令2才不会执行
    示例:
    date;dd if=原文件 of=目标文件 bs=字节数 count=个数;date
    date;dd if=/dev/zero of=/root/test bs=1k count=100000;date
    管道符:|
    命令1 | 命令2
    命令1的正确输出作为命令2的操作对象
    示例:
    ll /etc | less
    netstat -an | grep "ESTABLISHED""
    搜索内容命令:
    grep [选项] "搜索的内容"
    -i 忽略大小写
    -n 输出行号
    -v 反向查找
    --color=auto 搜索出的关键词用颜色显示
    通配符与其他特殊符号
    通配符
    ? 匹配任意一个字符
    * 匹配0个或任意多个任意字符,也就是匹配任何内容
    [] 匹配中括号中任意一个字符.例如[abc]代表一定匹配一个字符a或b或c
    [-] 匹配中括号中任意一个字符,-代表一个范围.例如[a-z]代表匹配一个小写字母
    [^] 逻辑非,表示匹配不是中括号内的一个字符.例如:[^0-9]代表匹配一个不是数字的字符
    示例:
    rm -rf *
    ls ?abc
    ls [0-9]*
    ls [^0-9]*
    base其他常用特殊符号
    '' 单引号,单引号中所有特殊符号都没有含义
    "" 双引号,在双引号中特殊符号都没有特殊含义,但是$,\,`(反引号)例外,拥有调用变量的值,引用命令和转义的特殊含义
    `` 反引号,反引号括起来的内容是系统命令,在bash中会先执行他,和$()作用一样,不过推荐使用$(),因为反引号非常容易看错
    $() 反引号作用一样,用来引用系统命令
    # 代表注释
    $ 用于调用变量的值,如果调用变量name的值时,需要用到$name的方式得到变量的值
    转义符,跟在之后的特殊符号将失去特殊符号的意义
    什么是shell变量?
    变量是计算机内容的单元,其中存放的值可以改变.当shell脚本需要保存一些信息时,
    如果一个文件名或是一个数字,就把它存放在一个变量中.每个变量有一个名字,所以很容易引用它.
    使用变量可以保存有用信息,使系统获取用户相关设置,变量也可以用户保存暂时信息
    变量设置规则:
    变量名称可以由字母,数字和下划线组成,但不能以数字开头
    在base中,变量的默认类型都是字符串型,如果要进行数值运算,则必须指定变量类型为数值型
    变量用登号连接值,登号左右两侧不能有空格,如果有空格必须用单引号或双引号包括
    在变量的值中,可以使用""转义符
    如果需要增加变量的值,那么可以进行变量值得叠加,不过变量需要用双引号包含"$变量名"或$(变量名)包含
    如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
    name=$(date)
    echo name
    环境变量名建议大写,便于区分
    变量分类
    用户自定义变量
    自定义的变量名
    name="123"
    echo $name
    变量叠加
    aa=123
    aa="$aa"456
    aa=${aa}789
    echo $aa
    环境变量
    这种变量中主要保存的是和操作系统环境相关的数据
    相对于用户自定义变量只在当前shell生效,而环境变量会在当前shell和这个shell的所有子shell当中生效.
    如果环境变量写入相应配置文件,那么这个环境变量就会在所有shell中生效
    定义环境变量:
    export 变量名=变量值
    查询系统变量
    env
    系统查找命令的路径
    echo $PATH
    PATH变量叠加
    PAHT="$PATH":/root/sh
    定义系统提示符的变量(控制台)
    PS1
    d 显示日期,格式为"星期 月 日"
    h 显示简写的主机名,如默认主机名"localhost"
    显示24小时制时间,格式为"HH:MM:SS"
    T 显示12小时制时间,格式为"HH:MM:SS"
    A 显示24小时制时间,格式为"HH:MM"
    u 显示当前用户
    w 显示当前用户所在目录的完整路径
    W 显示当前用户所在目录的最后一个目录
    # 执行的第几个命令
    $ 提示符,如果是root用户会显示提示符为"#",如果是普通用户会显示提示符为"$"
    示例:
    PS1='[u@ W]$ '
    位置参数变量(也是预定义变量的一种)
    这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
    $n n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
    示例:
    #!/bin/bash
    echo $0
    echo $1
    echo $2
    echo ${10}
    示例:
    #!/bin/bash
    num1=$1
    num2=$2
    sum=$(($num1 + $num2))
    echo $sum
    如果要数值计算,要在$(())中计算
    $* 这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体
    示例:
    for i in "$*"
    do
    echo "parameters is:$i"
    done
    $@ 这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待(和@*相比较,$@可以理解成一个数组,而@*是所有参数拼接成的一个字符串)
    示例:

    for i in "$@"
    do
    echo "parmeters is:$i"
    done

    $# 这个变量代表命令行中所有的参数的个数
    接收键盘输入
    read [选项] [变量名]
    -p "提示信息" 在等待read输入时,输出提示信息
    -t 秒数 read指令会在一直等待用户输入,使用此选项可以指定等待时间
    -n 字符数 read命令只能接收指定的字符数,就会执行
    -s 隐藏输入的数据,适用于机密信息输入
    示例:
    read -t 30 -p "请输入你的姓名:" name
    read -t 30 -s -p "请输入你的年龄:" age
    read -t 30 -n 1 -p "请随意输入:" txt

    预定义变量
    在bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的
    $? 最后一次执行的命令返回装填,如果这个变量的值为0,证明上一个命令正确执行;如果这个变量非0,则上一个命令执行不正确,具体是哪个数,由系统自己来决定.
    示例:
    echo $?
    $$ 当前进程的进程号PID
    $! 后台运行的最后一个进程的进程号PID
    查看系统所有变量
    set
    删除变量
    unset 变量名
    bash数值运算和运算符
    declare声明变量类型
    declare [+/-][选项] 变量名
    - 给变量设定类型属性
    + 取消变量的类型属性
    -i 将变量声明为整数型(integer)
    -x 将变量声明为环境变量(功能和 "export 变量" 一样)
    -p 显示指定变量的被声明的类型
    数值运算
    方法1:
    declare -i cc=$变量名1+$变量名2
    方法2:(expr或let)
    变量名=$(expr $变量名1 + $变量名2)
    方法3:(推荐使用)
    格式:$((运算式))或$[运算式]
    ps:$(命令)单括号是执行命令,双括号是运算式
    变量名=$(($变量名1 + $变量名2))
    运算符:+-*/等等...
    主要考虑优先级的计算
    环境变配置文件
    source命令:主要是配置的环境变量立即生效
    格式1:
    source 配置文件
    格式2
    . 配置文件
    主要配置文件:(~指的是家目录,~只对当前用户生效,定义到越后面的变量优先级越高)读取的先后顺序从上往下
    /etc/profile
    /etc/profile.d/*.sh
    ~/.bash_profile
    ~/.bashrc
    /etc/bashrc
    其他配置文件和登录信息
    注销时生效的系统环境变量配置文件
    ~/.bash_logout
    其他配置文件
    历史命令
    ~/bash_history
    shell登录信息
    本地终端欢迎信息(登录前)
    /etc/issue
    转义符 作用
    d 显示当前系统日期
    s 显示操作系统名称
    l 显示登录的终端号,这个比较常用
    m 显示硬件体系结构,如i386,i686等
    显示主机名
    o 显示域名
    显示内核版本
    显示当前系统时间
    u 显示当前登录用户的序列号
    远程终端欢迎信息(登录前)
    /etc/issue.net
    转义符在/etc/issue.net文件中不能使用
    是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入"Banner /etc/issue.net"行才能显示(记得重启SSH服务:service sshd restart)
    登陆后欢迎信(登录后)
    不管是本地还是远程,都可以显示此欢迎信息
    正则表达式
    正则表达式与通配符区别
    正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep,awk,sen等命令可以支持正则表达式
    通配符用来匹配符合条件的文件名,通配符是完全匹配. ls,find,cp这些命令不支持正则表达式.所以只能使用shell自己的通配符来进行匹配
    基础正则表达式
    元字符 作用
    * 前一个字符匹配0次或任意多次
    . 匹配除了换行符外任意一个字符
    ^ 匹配行首,例如^hello会匹配以hello开头的行
    $ 匹配行尾,丽日hello$会匹配以hello结尾的行
    [] 匹配中括号中指定的任意一个字符,只匹配一个字符
    [^] 匹配中括号中以外的任意一个字符,只匹配一个字符
    转义符,用于取消特殊符号的含义取消
    {n} 表示前面的字符恰好出现n次,例如 [0-9]{4} 匹配一个四位数
    {n,} 表示前面的字符不小于n次,例如 [0-9]{2,}匹配至少两位的数
    {n,m} 表示前面的字符恰至少出现n次,最多出现m次,例如[a-z]{6,9}匹配6到9位数的小写字母
    字符截取命令
    cut字段提取命令(列提取,grep是行提取,一般cut也是配饰grep使用的)
    格式:
    cut [选项] 文件名
    -f 列号 提取第几列
    -d 分隔符 按照指定分隔符分割列(默认是制表符,tab键)
    示例:获取linux的可登录用户(除了root用户外)
    cat /etc/passwd | grep /bin/bash | grep -v root | cut -d ":" -f 1
    printf命令(经常用于awk截取命令中使用,能直接跟文件名也不能跟管道符使用)
    格式:
    printf '输出类型和输出格式' 输出内容
    输出类型:
    %ns 输出字符串,n是数字指代输出几个字符
    %ni 输出证书,n是数字指代输出几个数字
    %m.nf 输出浮点数,m和n是数字,指代输出的整数位数和小数位数.如%8.2f代表输出8位数,其中2位是小数,6位是整数
    输出格式:
    a 发出警告音
     退格键
    f 清除屏幕
    换行
    回车,也就是Enter键
    水平输出退格键,也就是tab键
    v 垂直输出退格键,也就是tab键
    示例:
    printf %s 1 2 3 4 5 6
    printf %s %s %s 1 2 3 4 5 6 #如果%s没有用''括起就会输出第二和第三个%s
    printf '%s %s %s' 1 2 3 4 5 6
    printf '%s %s %s ' 1 2 3 4 5 6
    printf %s $(cat test)
    awk命令:
    格式:
    awk '条件1{动作1}条件2{动作2}...' 文件名
    条件(Pattern):
    一般使用关系表达式作为条件
    x > 10 判断变量x是否大于10
    x >= 10 大于等于
    x <= 10 小于等于
    动作(Action):
    格式化输出
    流程控制语句
    示例:检测磁盘占用大于百分之80
    df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1
    BEGIN(要读取第一行)
    awk 'BEGIN{print "test"} {print $1}' /etc/passwd
    awk 'BEGIN{FS=":"} {print $1 " " $3}' /etc/passwd
    END
    awk 'BEGIN{FS=":"} {print $1 " " $3}END{print "ok"}' /etc/passwd
    FS内置变量(标志分割符号)
    关系运算符(取passwd中UID大0的)
    awk 'BEGIN{FS=":"}$3>0{print $1 " " $3}' /etc/passwd
    sed命令:
    sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器
    sed主要是用来将数据进行提取,替换,删除,新增的命令
    相对于vi 是可以通过管道接收数据对数据进行操作
    格式:
    sed [选项] '[动作]' 文件名
    选项:
    -n 一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则会把经过sed命令处的行输出到屏幕
    -e 允许对输入数据应用多条sed命令编辑
    -i 用sed的修改结果直接修改读取数据的文件而不是由屏幕输出
    动作:
    a 追加,在当前行后添加一行或多行,添加多行时,除最后一行外,每行末尾需要用"" 代表数据未完结
    c 行替换,用c后面的字符串替换原数据行,替换对行时,除最后一行外,每行末尾需要用"" 代表数据未完结
    i 插入,在当期行前插入一行或多行,插入多行时,出最后一行外,每行末尾需要用"" 代表数据未完结
    d 删除,删除指定的行
    p 打印,输出指定行
    s 字符替换,用一个字符串替换另一个字符串.格式为"行范围s/旧字符串/新字符串/g"
    示例:
    获取指定行
    sed -n '2p' test
    删除指定行
    sed '2,40d' test
    在指定行追加
    sed '2a hello' test
    在指定行插入
    sed '2i hello' test
    sed '2i hello world' test
    替换指定行
    sed '2c nodata' test
    字符串替换(加上-i会修改至文件)
    sed 's/旧字符串/新字符串/g' 文件名
    sed '1s/x/b/g' test
    字符处理命令
    排序命令
    sort [选项] 文件名
    -f 忽略大小写
    -n 以数值型进行排序,默认使用字符串排序
    -r 反向排序
    -t 指定分隔符,默认是分隔符是制表符
    -k n[,m] 按照指定的字段范围排序,从第n字段开始,字段结束(默认是到行尾)
    示例:
    sort /etc/passwd -n -t ":" -k 3,3 #通过用户的UID进行顺序排序
    统计命令
    wc [选项] [文件名]
    -l 只统计行数
    -w 只统计单词书
    -m 只统计字符数
    条件判断
    文件存在判断
    方法1:
    test -e /etc/passwd
    方法2:
    [ -e /etc/passwd ] #两边要有空格
    -d 判断目录
    -e 判断文件或目录
    -f 判断文件
    -r 读权限
    -w 写权限
    -z 执行权限
    结果?
    通过echo $?
    如果是0说明存在,如果非0,则不存在.
    通过另一种方式判断:
    test -e /etc/passwd && echo "yes" || echo "no"
    [ -e /etc/passwd ] && echo "yes" || echo "no"
    两个文件之间的比较[]
    [文件1 -nt 文件2] 判断文件1是否比文件2新
    [文件1 -ot 文件2] 判断文件1是否比文件2旧
    [文件1 -ef 文件2] 判断文件1和文件2Inode节点是否一致
    两个整数之间比较[]
    [整数1 -eq 整数2] 整数1是否等于整数2
    [整数1 -ne 整数2] 整数1是否不等于整数2
    [整数1 -gt 整数2] 整数1是否大于整数2
    [整数1 -lt 整数2] 整数1是否小于整数2
    [整数1 -ge 整数2] 整数1是否大于等于整数2
    [整数1 -le 整数2] 整数1是否小于等于整数2
    字符串的判断[]
    [-z 字符串] 判断字符串是否为空?
    [-n 字符串] 判断字符串是否为非空?
    [字符串1 == 字符串2] 判断字符串1是否和字符串2相等?
    [字符串1 != 字符串2] 判断字符串1和字符串2是否不相等?
    多重判断
    判断1 -a 判断2 逻辑与,判断1和判断2都成立,最终结果才是为真
    判断1 -o 判断2 逻辑或,判断1和判断2有一个成立,最后结果就为真
    ! 判断 逻辑非,是原始判断取反
    流程判断
    if语句:
    单分支if条件语句
    if [ 条件判断式 ];then
    程序
    fi

    if [ 条件判断式 ]
    then
    程序
    fi
    示例:
    判断服务磁盘利用率是否低于百分白纸
    #!/bin/bash
    #检测磁盘利用率是否大于百分之80?
    rate=$(df -h | grep sda5 | awk '{print $5}' | cut -d "%" -f 1)
    echo $rate
    if [ $rate -le 80 ]
    then
    echo "sd5 is not full!"
    fi
    echo "ok"
    双分支if条件语句
    if [ 条件判断式 ]
    then
    条件成立时,执行的程序
    else
    条件不成立时,执行的另一个程序
    fi
    示例:
    备份mysql
    #!/bin/bash
    #备份mysql数据库
    #同步系统时间
    ntpdate asia.pool.ntp.org &>/dev/null
    #把当前系统时间以ymd的形式赋给变量curdate
    curDate=$(date +%y%m%d)
    mysqlSize=$(du -sh /etc)
    if [ ! -d /tmp/dbbak ]
    then
    mkdir /tmp/dbbak
    fi
    cd /tmp/dbbak
    echo "Date : $curDate" > /tmp/dbbak/dbinfo.txt
    echo "DAta size : $mysqlSize" >> /tmp/dbbak/dbinfo.txt
    tar zcf mysql-lib-$curDate.tar.gz /etc dbinfo.txt &>/dev/null
    rm -rf dbinfo.txt
    示例2:
    判断Apache服务器是否启动?
    #!/bin/bash
    #判断Apache是否启动成功?

    echo "star checking httpd" >> /tmp/auto.log
    port=$(nmap -sT 127.0.0.1 | grep tcp | grep http | awk '{print $2}')
    echo "get http State : $port" >> /tmp/auto.log
    if [ "$port" == "open" ]
    then
    echo "$(date) httpd is ok" >> /tmp/auto.log
    else
    service httpd start &>/dev/null
    echo "$(date) restart httpd!!" >> /tmp/auto.log
    fi
    多分支if条件语句
    if [ 条件判断式 ]
    then
    当前条件判断式1成立时,执行程序1
    elif [ 条件判断式2 ]
    then
    当条件判断式2成立时,执行程序2
    else
    当所有条件都不成立时,最后执行此程序
    fi
    case语句
    case $变量名 in
    "值1")
    如果变量的值等于值1,则执行程序1
    ;;
    "值2")
    如果变量的值等于值2,则执行程序2
    ;;
    *)
    如果变量的值都不不等于以上值,则执行此程序
    ;;
    for循环
    for 变量 in 值1 值2 值3 ...
    do
    程序
    done
    示例:

    #!/bin/bash
    #批量解压缩
    ls *.tar.gz > ls.log
    for i in $(cat ls.log)
    do
    tar -zxf $i &>/dev/null
    done
    rm -rf ls.log
    语法2:
    for((初始值;循环控制条件;变量变化))
    do
    程序
    done
    示例:(一般用于数值)
    #!/bin/bash
    #从1加到100
    s=0
    for((i=1;i<=100;i=i+1))
    do
    s=$(($s+$i))
    done
    echo "1-100: $s"
    while循环
    while循环是不定循环,也称为条件循环.只要条件条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止.
    while [ 条件判断式 ]
    do
    程序
    done
    示例:
    #!/bin/bash
    #值小于100
    i=1
    s=0
    while [ "$i" -le 100 ]
    do
    s=$(($s+$i))
    i=$(($i+1))
    done
    echo "this sum is : $s"
    until循环
    与while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序.一旦循环条件成立,则终止循环.
    16.Linux服务管理
    Linux服务
    两种服务
    RPM包默认安装的服务
    独立的服务
    基于xinetd服务
    源码包安装的服务
    启动与自启动
    服务启动:就是在当前系统中让服务运行,并提供功能
    服务自启动:自启动是让服务在系统开机或重启之后,随着时间的启动而自动启动服务.
    查询已安装的服务
    RPM包安装的服务
    查看服务自启动状态,可以看到所有RPM包安装的服务
    chkconfig --list
    查看正在运行的程序:
    ps -aux
    源码包安装的服务
    查看服务安装位置,一般是/usr/local/下
    区别:
    源码包安装至指定位置,一般是/usr/local
    RPM包安装在默认位置中
    服务脚本(一般通用):
    /etc/init.d/ 启动脚本位置
    /etc/sysconfig/ 初始化环境配置文件
    /etc/ 配置文件位置
    /etc/xinetd.conf xinetd配置文件
    /etc/xinetd.d/ 基于xinetd服务的启动脚本
    /var/lib/ 服务产生的数据放在这里
    /var/log/ 日志
    独立服务的启动
    /etc/init.d/独立服务名 start|stop|restart|status
    service 独立服务名 start|stop|restart|status (RedHat专用)
    独立服务的自启动
    方法1:
    chkconfig [--level 运行级别] [独立服务名] [on|off]
    方法2:
    修改/etc/rc.d/rc.local文件
    方法3:
    使用ntsysv命令管理自启动(RedHat专用)
    基于xinetd服务管理(了解)
    源码包安装服务的启动
    使用绝对路径调用启动脚本来启动,不同的源码包的启动脚本不用.可以查看源码包的安装说明,查看启动脚本的方法
    源码包的自启动:
    修改/etc/rc.d/rc.local文件
    如果要通过service启动源码包,把源码包启动文件链接到 /etc/init.d/独立服务名
    源码包加入chkconfig
    源码包启动文件添加内容:
    #chkconfig: 35 86 76
    #description: my project
    添加自启识别:
    chkconfig --add 独立服务名
    删除:
    chkconfig --del 独立服务名
    17.进程管理
    进程简介
    进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都是自己的地址空间,并占用一定的系统资源
    进程管理的作用
    判断服务器健康状态
    top [选项]
    -d 秒数 刷新时间,系统默认3秒
    ?或h 显示交互模式的帮助
    P 以CPU使用率排序,默认就是此选项
    M 以内存的使用率排序
    N 以PID排序
    q 退出top
    字段说明:
    第一行:任务队列信息
    12:26:45 系统当前时间
    up 1 day,13:32 系统运行时间,本机运行1天13小时32分
    2 users 当前登录两个用户
    load average 0.00 0.00 0.00 系统在之前1分钟,5分钟,15分钟,的平均负载,一般认识小于1时,负载较小.如果大于1,系统已经超出负荷
    第二行:进程信息
    Tasks: 95total 系统中进程总数
    1 running 系统正在运行的进程数
    94 sleeping 睡眠的进程
    0 stopped 正在停止的进程
    0 zombie 僵尸进程,如果不是0,需要手工检测僵尸进程
    第三行:CPU信息
    Cpu(s) 0.1%us 用户模式占用的CPU百分比
    0.1%sy 系统模式占用的CPU百分比
    0.0%ni 改变过优先级的用户进程占用CPU百分比
    99.7id 空闲CPU的CPU百分比
    0.1%wa 等待输入/输出的进程的占用CPU百分比
    0.0%hi 硬中断请求服务占用的CPU百分比
    0.1%si 软终端请求服务占用的CPU百分比
    0.0%st st(steal time)虚拟时间百分比,就是当有虚拟机是,虚拟CPU等待时间CPU的时间百分比
    第四行:物理内存信息
    Men: 625344k total 物理内存的总量,单位KB
    571504k used 已使用的物理内存数量
    53840k free 空闲的物理内存数量
    65800k buffers 作为缓冲的内存数量
    第五行:交换分区(swap)信息
    同上四行
    查看系统中所有进程
    ps aux 查看系统中所有进程,使用BSD操作系统格式
    ps -le 查看系统中所有进程,使用Linux标准命令格式
    字段说明:
    USER 该进程是由哪个用户山上的
    PID 进程的ID号
    %CPU 该进程占用CPU资源的百分比,占用越高,进程约消耗资源
    %MEM 该进程占用物理内容的百分之,占用越高,进程约消耗资源
    VSZ 该进程占用虚拟内容的大小,单位KB
    RSS 该进程占用示例物理内存的大小,单位KB
    TTY 该进程是在哪个终端中运行的.其中tty1-tty7代表本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端.pts/0-255代表虚拟终端
    STAT 进程状态,常见状态有:R:运行,S:睡眠,T:停止状态,s:包含子进程,+:位于后台
    START 进程的启动时间
    TIME 该进程占用CPU的运算时间,注意不是系统时间
    COMMAND 产生该进程的命令名
    杀死进程(进程终止)
    查看可用的进程信号
    kill -l
    kill 命令
    重启进程
    kill -1 进程号
    强制杀死进程
    kill -9 进程号
    killall命令
    killall [选项][信号] 进程名
    -i 交互式,询问是否杀死某个进程
    -I 忽略大小写
    pkill命令(和killall功能相似,杀进程还可以踢用户)
    pkill [选项][信号] 进程名
    -t 按照终端号踢出用户
    查看进程树
    pstree [选项]
    -p 显示进程的PID
    -u 显示进程的所属用户
    工作管理
    把进程放入后台,末尾加&即可放入后台(无界面)
    tar -zcf ect.tar.gz /etc & 我们也可以按下ctrl+z把当前的压缩任务放入后台
    把进程放入后台,末尾加&即可放入后台(有界面)
    top 在有界面的交互的情况下放入后台就没意义了
    在top执行过程中,按下ctrl+z快捷键
    查看后台额工作
    jobs [-l]
    -l 显示工作的PID
    ps: "+"号代表最近一个放入后台的工作,也是恢复时默认恢复的工作.
    "-"号代表倒数第二个放入后台的工作
    将后台暂停的工作台恢复到前台执行
    fg %工作号
    %工作号 %号可以省略,但是注意工作号和PID的区别
    bg %工作号
    ps: 后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到前台
    系统资源查看
    监控系统资源,类似与top和ps
    vmstat [刷新延时 刷新次数]
    开机时内核检测信息
    dmesg
    dmesg | grep CPU
    查看内存使用状态
    free [-b|-k|-m|-g]
    -b/k/m/g 单位
    缓存和缓冲的区别
    简单来说缓存(cache)是用来加速数据从硬盘中"读取"的,而缓冲(buffer)是用来加速数据"写入"硬盘的
    查看CPU信息
    cat /proc/cpuinfo
    查看系统运行时间和平均负载,top和w也可以看到
    uptime
    查看系统和内核相关信息
    uname [选项]
    -a 查看系统所有相关信息
    -r 查看内核版本
    -s 查看内核名称
    判断当前系统的位数
    file /bin/ls
    查看当前Linux发行版本
    lsb_release -a
    列出进程打开或使用的文件信息
    lsof [选项]
    -c 字符串 只列出以字符串开头的进程打开的文件
    -u 用户名 只列出某个用户的进程打开的文件
    -p pid 列出某个PID进程打开的文件
    系统定时任务
    crond服务管理与访问控制
    手动启动:
    service crond restart
    chkconfig crond on
    crontab命令:
    crontab [选项]
    -e 编辑crontab定时任务
    -l 查询crontab任务
    -r 删除当前用户所有的crontab任务
    编辑crontab命令
    crontab -e
    格式: * * * * * 执行的任务(最小识别到分钟,不精确秒,他不一定是每分钟的第一秒执行的,只要在这分钟就可能触发)
    第一个 * 几分
    第二个 * 几时
    第三个 * 几号
    第四个 * 几月
    第五个 * 星期几
    特殊符号:
    * 代表任何时间
    , 代表不连续时间
    - 代表连续的时间范围
    */n 代表每隔多久执行一次
    ps:crontab中的%有含义,如果要用到%请加转义转义符
    18.日志管理
    日志管理简介
    在Centos 6.x中日志服务已经由rsysylog取代了原先的syslogd服务.rsyslogd日志服务更加先进,功能更多.但是不论该服务的使用,还是日志文件的格式其实都是和syslogd服务相兼容的.
    rsyslogd的特点
    基于TCP网络协议传输日志信息
    更安全的网络传输协议
    有日志消息的及时分析框架
    后台数据库
    配置文件可以写简单的逻辑判断
    与syslogd配置文件相兼容
    常用日志的组作用
    /var/log/cron 记录系统定时任务相关的日志
    /var/log/cups 记录打印信息的日志
    /var/log/dmesg 记录系统在开机时内核自检的信息,dmesg命令直接查看内核自检信息
    /var/log/btmp 记录错误登录的日志,这个文件是二进制文件,不能直接vi查看,而是使用lastb命令查看
    /var/log/lastlog 记录系统中所有用户最后一次的登录时间的日志.这个文件也是二进制文件,不能直接vi,而要使用lastlog命令查看
    /var/log/mailog 邮件日志
    /var/log/message 系统重要消息日志,系统出问题后首先检查的就是这个日志文件
    /var/log/secure 记录验证和授权方面的信息,只要涉及账号和密码的程序都会被记录.
    /var/log/wtmp 永久记录所有用户登录,注销信息,同时记录系统的启动,重启,关机事件.(也是二进制文件,需要用last命令查看)
    /var/run/utmp 记录当前已经登录的用户信息,这个文件会随用户的登录和注销而不断变化,只记录当前用户信息.同时这个文件不能直接vi,而要使用w,who,users等命令来查询
    处理系统默认日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中
    var/log/httpd RPM包安装的Apache服务的默认日志目录
    var/log/mail RMP包安装的邮件服务的额外日志目录
    rsyslogd日志服务
    基本日志格式包含以下四列
    事件产生的时间
    发生事件的服务器的主机名
    产生事件服务名或程序名
    事件的具体信息
    配置文件/etc/rsyslog.conf
    authpri.* /var/log/secure
    连接符号
    "*" 代表所有日志,所有的日志等级都记录
    "." 代表只有后面的的等级高的(包含该等级)日志都记录下来
    ".=" 代表只记录所需等级,其他等级都不记录
    ".!" 代表不等于,也就是除了该等级的日志外,其他日志都记录
    日志等级
    debug 调试日志
    info 基本通知信息
    notice 普通信息,但有一定的重要性
    warning 警告信息,但是还不会影响到服务或系统的运行
    err 错误信息,一般达到err级别的信息,就会影响系统或服务的运行了
    crit 临界状况信息,比err等级还要严重
    alert 警告状态信息,比crit还要严重,必须立即采取行动
    emerg 疼痛等级信息,系统已经无法使用了
    日志记录位置
    日志文件的绝对路径 如/var/log/secure
    系统设备文件 如/dev/lp0
    转发给远程主机 如@192.168.1.111:80
    用户名 如root
    忽略或丢弃 如~
    日志轮替
    日志分割
    日志命名
    logrotate配置文件
    daily 日志的轮替周期是每天
    weekly 日志的轮替周期是每周
    monthly 日志的轮替周期是每月
    ......
    logrotate命令
    logrotate [选项] 配置文件名
    如果此命名没有选项,则会按照配置文件中的条件进行日志轮替
    日志轮替
    -v 显示日志轮替的过程
    -f 强制进行日志轮替,不管日志的轮替条件是否已经符合,强制配置文件中所有的日志进行轮替
    Apache 日志加入轮替
    vi /etc/logrotate.conf
    /user/local/apache2/logs/access_log{
    daily
    create
    rotate 30
    }
    19.启动管理
    系统运行级别:
    0 关机
    1 单用户模式,想象成windows的安全模式,主要用户系统修复
    2 不完全的命令模式,不含NFS服务
    3 完全的命令模式,就是标准字符串界面
    4 系统保留
    5 图形界面
    6 重启
    查看系统运行级别命令:
    runlevel
    改变运行级别命令:
    init 运行级别
    系统默认运行级别
    vim /etc/inittab
    系统启动流程:
    BIOS->MBR->MBR启动引导程序
    ->单系统直接启动->加载内核
    ->多系统->调用其他分区启动扇区中的引导程序->加载内核
    ->内核解压缩并自检->找到initramfs->建立仿真根目录->加载驱动->挂载真正系统根目录->/sbin/init
    .....
    grub中分区表示
    硬盘 分区 Linux中设备文件名 Grub中设备文件名
    第一快SCSI硬盘 第一个主分区 /dev/sda1 hd(0,0)
    第二个主分区 /dev/sda2 hd(0,1)
    扩展分区 /dev/sda3 hd(0,2)
    第一个逻辑分区 /dev/sda5 hd(0,4)
    第二快SCSI硬盘 第一个主分区 /dev/sdb1 hd(1,0)
    第二个主分区 /dev/sda2 hd(1,1)
    扩展分区 /dev/sdb3 hd(1,2)
    第一个逻辑分区 /dev/sdb5 hd(1,4)
    grub配置文件
    /etc/grub.conf
    default=0 默认启动第一个系统
    timeout=5 等待时间,默认是5秒
    splashimage=(0,0)/grub/splash.xpm.gz
    这里是指定grub启动时背景图像文件的保存位置的
    hiddenmenu 隐藏菜单
    title Centos(2.6)
    title就是标题的意思
    root(0,0)
    是指启动程序的保存分区
    kernel /.....
    定义内核加载时的选项
    initrd /initramfs-...img
    指定了initramfs内存文件系统镜像文件的所在文职
    20.备份与恢复
    linux系统需要备份的数据
    /root/目录
    /home/目录
    /var/spool/mail/目录
    /var/目录
    其他目录(日志文件)
    安装服务的数据
    Apache需要备份的数据
    配置文件
    网页主目录
    日志文件
    mysql需要备份的数据
    源码包安装的mysql: /usr/local/mysql/data
    RPM包安装的mysql: /var/lib/mysql/
    备份策略
    完全备份(恢复方便)
    完全备份就是指把所有需要的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录
    增量备份(恢复麻烦)
    每次备份都备份今天新增的数据
    差异备份
    每次备份都跟第一次完全备份相比新增的数据
    dump和restore命令
    dump命令:
    dump [选项] 备份之后的文件名 原文件或目录
    -level 就是我们说的0-9个备份级别
    -f 文件名 指定备份之后的文件名
    -u 备份成功之后,把备份时间记录在/etc/dumpdates文件
    -v 显示备份过程中更多的输出信息
    -j 调用bzlib库压缩备份文件,其实就是把备份文件压缩为.bz2格式
    -W 显示允许被dump的分区的备份等级和备份时间
    示例:
    备份分区
    备份完整的boot分区
    dump -0uj -f /root/boot.bak.bz2 /boot/
    查看备份时间
    cat /etc/dumpdates
    复制日志文件到/boot分区
    cp intall.log /boot/
    增量备份
    dump -1uj -f /root/boot.bak1.bz2 /boot/
    查看备份时间和备份等级
    dump -W
    ps:
    备份文件只能完整备份,目录才能增量备份
    restore命令:
    restore [模式选项] [选项]
    模式选项:
    -C 比较备份数据和实际数据的变化
    -i 进入交互模式,手工选择需要恢复的文件
    -t 查看模式,用户查看备份文件中拥有哪些数据
    -r 还原模式,用户数据还原
    选项:
    -f 指定备份文件的文件名
    示例:
    比较当前目录下的文件和备份文件的差异
    restore -C -f 备份文件
    恢复
    restore -r -f 备份文件1
    restore -r -f 备份文件2

  • 相关阅读:
    Layui的一些心得
    Oracle工具PLSQL
    .NET开发中 springMVC+NHibernate注入失败的几个常见错误
    配置好运行后Error creating context 'spring.root': Could not load type from string value
    css样式添加错误导致烦扰
    Oracle时间与系统不同步,TimeStampService
    前端入门10-JavaScript语法之对象
    前端入门9-JavaScript语法之运算符
    前端入门8-JavaScript语法之数据类型和变量
    前端入门7-JavaScript语法之相关术语
  • 原文地址:https://www.cnblogs.com/Lxxv5/p/14209712.html
Copyright © 2020-2023  润新知