• Linux 总结1


    ============================= 一般 =========================================
    chown -R oracle:oinstall u01/ @ chown -R .oinstall u01/
    chmod -R 744 u01/ @ chmod u=rwx,g=rx,o=r u01/ @ chmod u+x u01/ ( 注意u=rwx,g=rx,o=r之间不能有空格)
    chgrp -R oinstall u01/
    cd
    pwd
    mkdir -p u01/oracle
    rmdir -p u01/oracle
    cp -a abc @ cp -fr abc
    rm -fri

    mv -fiu 源文件, 目的地
    basename
    dirname
    head head -3 aa  另一种截取方法 tail + 7 aa | head 4 ( tail 是正向显示 7 行以后的内容 )
    tail tail -3 aa  head 和 tail 一起使用, 截取中间行, 例如截取7-10行, head -10 aa | tail -4
    umask -S
    设置特殊权限, SUID, SGID, SBIT(只针对目录有效)  chmod u+s, chmod g+s, chmod o+s
    su - oracle
    file aa
    which (show shell command)
    whereis (源码, 命令)
    type (命令类型)
    date +%Y%m%d
    cal 10 2009 ( month, year )
    shutdown -h now @ shutdown -r +5 @ shutdown -r 10:35, shutdown -c
    poweroff
    ls ls -alF @ ls -d @ ll -R @ ll -t 时间倒叙
    ifconfig
    ping
    cat cat -n aa
    tac tac aa
    nl  nl aa
    more
    dumpe2fs -h /dev/sda1
    df df -h df -ih
    du du -h du -sh
    目录->文件名->inode->datablock( 从根目录开始这样做, 其中根目录的inode为2 )
    ln makefile ../makefile
    ln -s makefile /tmp/asd ( 如果目标和快捷方式在同一个文件夹下, 就不需要指定路径, ln -s 20.txt 10, 如果想指定路径, 那么源文件必须使用绝对路径, 例如 ln -s /tmp/20.txt xx/ 表示为 /tmp/20.txt 这个源文件(绝对路径) 在xx这个目录下建立一个符号连接, 没有指定连接名, 那么就会给源文件同名 )    
    dd if=/etc/zero of=/newdisk/aloop bs=1M count=512
    mkfs -t ext3 /newdisk/aloop
    mount -o loop /newdisk/aloop /media/cdrom/
    history
    sort sort +4 ( 第4列正向排序 ) @ sort +4 -r ( 第4列逆向排序 )
    cut df | cut -d " " -f1 @ cut -c 10-20 ( 10 至 20 列 )
    awk '/good/' aa.txt  ( awk 将文本逐行读入, 以空格为默认分隔符将每行切片, 切片的部分再进行各种分析 )

        awk '{pattern + action}' {filenames} 其中 pattern 为数据中查找内容, action表示找到匹配后所执行的一系列指令, 花括号不需要在程序中出现, 

        但它们用于根据特定的模式对一系列指令进行分组, pattern就是表示正则表达式, 用斜杠括起来, awk执行方式如下:

        awk -F 分隔符 'command' input-files

        可以在脚本中执行awk,也可以把要执行的命令放在一个脚本中, 执行

        last -n 5, last -n 5 | awk '{print $1}' 工作流程, 读入有' '换行符分割的一条记录, 然后记录按指定分隔符划分区域, 默认分隔符是空格, $0所有域, $1第一个区域,类推

        cat /etc/passwd | awk -F ':' '{print $1 " "$7}'

        cat /etc/passwd | awk -F ':' 'BEGIN {print "name,shell"} {print &1","$7}END{print "blue,/bin/nosh"}' 从begin执行到end结束

        awk -F: '/root/' /etc/passwd
    groups 查看群组情况, 切换有效群组 newgrp usergroup
    useradd useradd oracle -g oinstall -G dba -d /home
    passwd  passwd oracle
    usermod 与 useradd 类似设置
    userdel userdel -r 连同家目录一起删除
    id id nobody
    finger finger oracle 可以查看到上次登录信息
    groupadd oinstall
    groupdel oinstall
    groupmod groupmod -n ooo oinstall
    who
    lastlog
    uniq
    wc

    write: 只能发给单独的用户, write root [tty], 例如 write root pts/1 进入说话界面, ctrl+d退出, 再比如 write root pts/2

    mesg n 关闭通话, mesg y 打开通话

    wall “hello” 广播

     
    tr tr -d ':' @ tr -s 'a' 'x'   cat a.txt | tr -s 'a' 'x'
    & vi aa &
    fg / bg fg fg 1 ( 1 为 job no. ) vi aa & 可以把 aa 放到背景下工作, 但是, 注意这个有别于排程, 这个还是在你当前的环境下, bash里, 也就是说, 当你关闭了连接, 在背景下工作的内容也没有了, 通过下边的命令jobs可以看到你目前中在使用的工作内容, 主要的目的就是把工作放到背景下, 让你可以同时做几项工作. 个人感觉 bg 这个命令没什么用, fg 还有些用, 另外下边的kill 命令, 如果kill 的是 job no. 则必须加 % 号, 即 kill -1 %1
    jobs
    kill -1,9,15 %jobno. 直接数字表示PID ( 1重新读取, 9强制删除, 15一般退出 )
    ps ps -ef @ ps -l @ ps -axjf ( 内存情况 )
    top ( 实时监控 内存 CPU 使用情况 )
    free -m ( 内存情况 )
    uname -a ( 核心情况 )
    netstat -tlnp ( 网络情况 )
    vmstat ( 内存, IO 等所有资源使用情况 )
    fuser -uv /proc ( 查看某个文件夹谁正在使用 )
    lsof lsof -u oracle +d /u01 ( 档案被开启情况 )
    rpm -qa 查看某个包是否安装 rpm -ivh 安装包 rpm -Uhv 更新包

    ===================================== =========================================

    touch


        ll --time=atime(查看读取时间) @ ll --time=ctime(权限等属性被修改时间) @ ll(文件被修改时间)
        权限等被修改时间无法修改, 除非你真正的修改属性, 那么该时间会变成你修改时的当前时间
        -c 不会创建文件, 修改 读取时间和文件修改时间 touch -c -t 1201010101 aa
        -t 个人比较喜欢这个格式, 分别是年月日小时分钟秒, 每个都是2位数
        -m 只change 修改时间, touch -m -t 1201010101 aa
        -a 只change 读取时间, touch -a -t 1201010101 aa

    find [path][option][action]

        -mtime +4 -4 4
        -newer file  find . -newer /tmp/tmp1 -not newer /tmp/tmp2
        -name find . -name law.src @ find . -name 'la?.src'
        -user find . -maxdepth 1 -user oracle
        -type find . -maxdepth 1 -type f -or -type -d | wc -l
        -size find . -size + $((300*1024))k
        -perm 权限  find . -maxdepth 1 -perm 755
        -maxdepth   find . -maxdepth 1 -name test
        -group find . -maxdepth 1 -group oinstall
        find /oracle/arc -mtime 5 -exec rm -fr {} 等于 find /oracle/arc -mtime 5 | xargs rm –rf

    新增加磁盘内容


        1. 对磁盘进行分割, 建立可用的partition
        2. 对partiton 进行格式化(format), 建立系统可用的文件系统(filesystem)
        3. 可选的, 对刚刚建立的文件系统进行检查
        4. 挂在该文件系统, 挂在到目录
        fdisk -l 查看整个磁盘内容, 比如几个磁盘, 空间, 分配等
        fdisk 常用内容 d delete, n add, p print, q quit, w write, m show menu (1-3 为primary 分区, 4 extention 分区 )
        分区完, 需要重启, ( 使用 mount 命令可以确认目前文件系统的类型, ext2 还是 ext3 等等 )
        mkfs -t ext3 /dev/sda3 ( 格式化新的分区 )
        省略检查
        mount /dev/sda3 /newdisk
        mount -o remount,rw,auto /  ( 重新挂载根目录 )
        umount -f /dev/sds3 或 /newdisk ( 装置名或挂载点都可以 )
        设置开机自动挂载, 不用每次手动挂载 /etc/fstab, /etc/mtab
        修改 /etc/fstab 增加 /dev/sda3 /newdisk ext3 default 1 2 (装置名, 挂载点, 文件系统类型, 文件系统参数, 是否被dump, 是否fsck检查 )

    压缩与打包

        gzip -v abc.txt @ zcat abc.gz @ gzip -dv abc.gz
        bzip2 -v abc.txt @ bzcat abc.bz2 @ bzip2 -dv abc.bz2 @ bzip2 -vk abc.txt
        tar -cjv -f aa.tar.bz2 aa @ tar -tjv -f aa.tar.bz2 @ tar -xjv -f aa.tar.bz2
        tar -czv -f aa.tar.gz aa @ tar -tzv -f aa.tar.gz @ tar -xzv -f aa.tar.bz2
        tar -xjv -f aa.tar.bz2 -C /newdisk/tt
        tar -cjv -f aa.tar.bz2 aa bb cc ( 多个文件和目录可以一起打包 )
        tar -cjv -f tt.tar.bz2 tt --exclude=aa ( 打包文件夹, 但是不包括文件夹内的aa文件 )

    正则表达式, 单独列出, 练习

       
        [] 中的某一个都可以 grep 't[ae]st' aa.txt
        grep '[^g]oo' 有oo 且前边不是g
        grep '[^a-z]oo' 有oo 且前边不是小写字母
        [:lower] [:upper:] [:alnum:] [:digit:] [:alpha:]
        ^ $  grep -n '^t' a.txt  grep -n 'o$' a.txt
        . 表示任意字符  grep -n 'g..d' a.txt
        * 重复前一个0到无穷多次 grep 'oo*' a.txt 注意这可不是说必须有2个o,因为第2个O与*结合了, 他们可以是0到无穷
        多个O, 所以该表达式理解为最少有一个O.
        {} 限定连续的范围 grep -n 'go{2,5}' regular.txt ( 注意这里需要转义字符,另外,在搜索的过程中,
        例如: 你想搜索的是 2-5个,但是,程序搜索时,发现一个字符串满足后,就显示出来,所以6个以上的o也有可能显示出来,所以需要一个尾符号, grep -n 'go{2,5}g' regular.txt
        sed '1,2a asdf' test.txt ( 在1,2行末尾添加 asdf )
        sed '1,2d' test.txt ( 删除1,2 行 )
        sed '1,2s/old/new/g' test.txt( 在1-2行中, 替换满足条件内容 )

    例行工作排程


        at (可以脱离终端, 在服务器背景下运行, 比如你远程连接Linux, 但是只要一断开, 那么你的程序也就没有了)
        /etc/at.allow 与 /etc/at.deny 限制是否可以使用 at 命令
        服务是否启动, ps -ef | grep atd | grep -v grep, 如果没启动, /etc/init.d/atd start 启动, chkconfig atd on 开机自动启动
        时间格式 HH:MM 或 HH:MM YYYY-MM-DD 04:00 2013-11-11 或 now + 5 minutes 或 04pm + 3 days
        at now + 5 minutes 进入 at , 输入排程之后 ctrl+d 退出

        atq 查看排程列表, atrm 删除排程 atrm 1 ( 等于 at -d 1 )
        at -c 1 详细查看第1个排程内容, at -d 1 取消第一个排程
        crontab ( 重复执行 )
        /etc/cron.allow 和 /etc/cron.deny
        服务是否启动, ps -ef | grep cron | grep -v grep, 如果未启动 service crond start.
        crontab -e 编辑, crontab -r 删除整个任务, crontab -l 查看
        设置循环 分钟    小时    日期    月份    周    指令
                 0-59    0-23    1-31    1-12    0-7   
                 * 代表任意时刻
                 , 表示时间间隔 3,6 表示3点和6点
                 - 时间间隔 3-6 表示 3 4 5 6
                 /n 例如 /5 表示每5分钟
        例如: */5 * * * * echo "hello"  每个5分钟, 最开始的* 和 /5 是一起的, 表示时间里每间隔5分钟

    系统服务


        服务名后面带d的就是daemon, 每个service都有对应的 daemon, daemon 就是实现service的, 例如 atd
        另外服务要与 port 端口对应
        /etc/services ( daemon 与 port 对应)
        /etc/init.d/* ( 启动脚本放置处 )
        各种服务, 启动, 状态, 关闭 等 例如 /etc/init.d/syslog status @ /etc/init.d/syslog restart
        事实上, 在linux中, 要打开或关闭port,就需要启动或关闭某个服务

    bash & 重定向


        bash 支持通配符 * ? [] [-] [^], 当指令过长时, 可以执行换行( 同时也是转义字符)
        当定义变量时需要先执行某个命令时, 用 $(), 例如 dbtest=$(uname)oracle , 注意: 这是小括号
        如果要扩充变量, 因为默认情况下变量值都是字符串的, 所以可以使用字符串进行扩展, 例如 PATH="$PATH":/home 或者 PATH=${PATH}:/home, 注意: 这是大括号, 大括号的作用是将变量值带出, 而不是只显示变量名
        unset ddd 取消变量
        bash 可以进入子 bash
        set 显示所有的环境变量, 包括 PATH 等等
        环境变量会被子bash所继承
        declare -a -i -r -x  declare -a var, var[1]=1, var[2]=2 可以单独取消数组元素或取消整个数组 unset var, unset var[1]
        stty -a 是用来查看bash 设置的, 注意与 set 的区别. 比如你编辑 sqlplus 的退格, 可以使用 stty erase backspace( 键盘上的退格键 )
        重定向:
        标准输入 stdin, 代码 0, 使用 < 或 << ( 其中 << 表示要读取结束字符) 将原本需要键盘输入的数据改为由档案(file)内容代替
        标准输出 stdout, 代码 1, 使用 > 或 >> ( 其中 >> 表示不覆盖, 继续接着输出 )
        标准错误输出 stderr, 代码为2, 使用 2> 或 2>>
        cat >filename <abc 表示本来要将输入的内容重定向到filename, 现在有档案abc代替输入
        cat >filename <<"eof" 表示当输入eof 这个字符串时才表示输入完成
        ls > filename, ls >> filename, 将本来由屏幕输出的内容, 重定向输出到文件中
        ls >filename 2<err, ls >>filename, 2>>err 其中err也是一个filename
        ls >filename 2>&1, ls >>filename 2>&1 将错误和正确的都写入一个文件, 注意文件内并没有区别那些事由正确的写入, 那些是由错误的写入
        多个指令, 例如, cd / ; ls , 因为指令执行后, 会有结果状态返回, 所以可以添加一些逻辑进去
        ls /tmp/abc || mkdir /tmp/abc ( 如果第一个指令执行成功, 那么就不会执行第2个指令, 所以语义是, 如果目录存在, 就不创建了, 直接显示 )
        ls /tmp/abc && mkdir /tmp/abc/aa ( 如果第一个执行成功, 那么才可以执行第2个指令, 所以语义是, 如果目录存在, 就在该目录里创建一个子目录 )
        | 管线命令, 前一个命令的输出内容被后一个命令所读取, 管线命令只接受 stdout 而忽略 stderr
        xargs 可以读取 stdin 内容, 剖析, xargs 命令左边部分就是将要作为 stdin, 注意, 左边部分是其他命令的标准输出 stdout, 右边部分表示要利用这个stdin 而执行的命令, 例如: ll xargs cut -d "" f1
        即 前一个命令执行的结果作为一个参数, xargs 右边命令依赖这个参数来执行, 右边的命令将这个参数作为标准输入, 注意这个 | grep 不一样, 比如 ls | grep aa, 貌似也是讲前边的结果作为参数, 但是
        这个命令的实际意义是, 执行前边的命令, 有一个 stdout, 在这个 stdout的基础之上截取一部分, 而 xargs 前边命令根后边命令没有关系, 后边命令只要前边命令执行的结果作为参数, 就好比 前一个命令查看这个班级
        所有的优秀学生, 共100个, 然后截取出所有是男生的, 而 xargs 是以这100个优秀学生为参数, 可以查找出这100个优秀学生的父母名字.

    shellscript


        要修改档案的可执行权限, 然后 ./文件名来执行, 也可以使用绝对路径执行, 或者将路径添加到 PATH, 无论是直接下达命令(绝对路径或相对路径)或者是使用 bash 或 sh , 例如 bash ex.sh 来执行, 都会创建一个子bash
        这样, 在shellscript脚本中创建的变量, 并不会在运行的bash(父bash)中被定义, 即shellscirpt 会创建一个子 bash 来执行这个脚本, 执行完后会返回到父bash中, 但是变量结果等等就全部没有了.
        但是, 如果你使用 source或. 来执行脚本, 例如 source ex.sh, 那么, 这个脚本就会父bash本身执行, 所以在脚本中定义的所有变量, 都有效.
        数值计算, 方法 declare -i total=$fisrtNum*$secondNum 或者还可以使用 total=$(($firstNum*$secondNum))
        判断, test -e -f -d -L -r -w -x -u -g -s
        文件之间判断 test file1 -nt file2, test file1 -ot file2, test file1 -ef file2
        数值之间判断 test n1 -eq n2, test n1 -ne n2, test n1 -gt n2, test n1 -lt n2, test n1 -ge n2, test n1 -le n2
        字符串之间判断 test -z string 判断是否为空, 如果是空返回true, test -n string 判断是否为非空, 如果为非空返回 true, test str1=str2, test str1!=str2
        多重判断 -a and, -o or, ! 取反, 例如 test -f filename -a -x filename, test ! -x file ( 如果file不具备可执行权限, 返回true)
        [] 等于 test, 也可以进行判断, 例如 [ -z "HOME" ] && echo "null" || echo "yes", 注意, 使用中括号作为判断是, 中括号里边两端要有空格
        在中括号内每个组件都需要有空格键来分隔, 在中括号内的变量最好使用 "$value" 的形式, 在中括号内的常量, 最好使用'',或""号括起来, 另外中括号比较常用在 if then fi 中.
        shellscript 脚本参数, /path/to/scriptname op1 op2 op3 op4, 其中 $0是脚本名, 第一个参数是 $1, 以此类推. $#: 参数个数 $@: "$1""$2""$3""$4"
        shift 2 表示拿掉最前面的 2 个参数, 当然这里不包括 $0,
        条件判断 if, 可以利用 && 与, || 或
        script 好的例子在 /etc/init.d 这个目录下, 全部是系统要运行的脚本, 可以查看
        debug
        sh [-nvx] script.sh, -n 不执行script, 只检查语法, -v 在执行script前, 先将script内容打印到屏幕上, -x 也是将内容显示在屏幕上, 其中还有每条指令执行后的结果, +后边的是指令
        函数, 由于脚本的运行方式是自上而下, 所以函数要放在上边, 类似 C 语言, 注意在函数体内也有内建变量, 跟shellscirpt本身的重名, 就是 $0 函数本身, $1 第一个参数, $2第2个参数, 等等, 所以在函数内部的
        $1表示的函数的第一个参数, 就类似其他语言函数内部的变量如果跟外边变量重名, 那么会屏蔽掉外部变量.
        代码式样, 参看相关如下:

       1:  #!/bin/bash
       2:  # File: shellscript.sh
       3:  # -----------------------------
       4:  # Description: This a test shellscript program
       5:  # History    : Created, 2013-11-23
       6:  # Author     : Leon
       7:  # 
       8:   
       9:  # function
      10:  function printit() {
      11:      echo -n "Your choice is "
      12:  }
      13:  # create date file 
      14:  echo -e "hello world!a
    "
      15:  read -p "Please input your name:" yourname
      16:  fileuser=${yourname}
      17:  filename=${fileuser:-"filename"}
      18:  date1=$(date --date='2 days ago' +%Y%m%d)   # 20131121
      19:  date2=$(date --date='1 days ago' +%Y%m%d)   # 20131122
      20:  date3=$(date +%Y%m%d)
      21:  file1=${filename}${date1}
      22:  file2=${filename}${date2}
      23:  file3=${filename}${date3}
      24:  touch ${file1}
      25:  touch "$file2"
      26:  touch "$file3"
      27:   
      28:  # compute number
      29:  read -p "please input the First number:" firstNum
      30:  read -p "please input the Second number:" secondNum
      31:  total=$(($firstNum*secondNum))
      32:  echo "The Multiple result is: $total"
      33:   
      34:  # judge, test, []
      35:  read -p "Please input(Y/N):" yn
      36:  [ "$yn" == "Y" -o "$yn" == "y" ] && echo "ok, continue." 
      37:  [ "$yn" == "N" -o "$yn" == "n" ] && echo "No, try again."
      38:   
      39:  # argument
      40:  echo "The script name is -> $0"
      41:  echo "total parameter qty -> $#"
      42:  echo "Whole parameter -> $@" 
      43:   
      44:  shift 2
      45:  echo "The script name is -> $0"
      46:  echo "total parameter qty -> $#"
      47:  echo "Whole parameter -> $@" 
      48:   
      49:  shift 1
      50:  echo "The script name is -> $0"
      51:  echo "total parameter qty -> $#"
      52:  echo "Whole parameter -> $@" 
      53:   
      54:  # if
      55:  if [ "$yn" == "y" ] || [ "$yn" == "Y" ] ; then
      56:      echo "yes again"
      57:  fi
      58:   
      59:  if [ "$yn" == "y" ] || [ "$yn" == "Y" ] ; then
      60:      echo "yes again"
      61:  elif [ "$yn" == "n" ] || [ "$yn" == "N" ] ; then
      62:      echo "No again"
      63:  else
      64:      echo "nothing"
      65:  fi
      66:   
      67:  case "$1" in
      68:  "hello")
      69:      echo "the first argument is Hello !"
      70:      ;;
      71:  "hi")
      72:      echo "the first argument is Hi !"
      73:      ;;
      74:  "good")
      75:      echo "the first argument is good !"
      76:      ;;
      77:  *)
      78:      echo "the first argument is Others !"
      79:      ;;
      80:  esac
      81:   
      82:  case $1 in
      83:  "one")
      84:      printit; echo $1 | tr 'a-z' 'A-Z'
      85:      ;;
      86:  "two")
      87:      printit; echo $1 | tr 'a-z' 'A-Z'
      88:      ;;
      89:  *)
      90:      echo "Usage $0 {one|two|three}"
      91:      ;;
      92:  esac
      93:   
      94:  # loop
      95:   
      96:  # it will execute by true
      97:  while [ "$yn" != "yes" -a "$yn" != "YES" ]
      98:  do
      99:      read -p "Please input yes/YES to stop loop 1 :" yn
     100:  done
     101:   
     102:  # it will execute by false
     103:  until [ "$yn" == "eee" -o "$yn" == "EEE" ]
     104:  do
     105:      read -p "Please input yes/YES to stop loop 2 :" yn
     106:  done
     107:   
     108:  declare -i i=0
     109:  while [ "$i" -lt 100 ] 
     110:  do
     111:  i=$((i+1))
     112:  done
     113:   
     114:  read -p "is this result 100 about i" test
     115:   
     116:  echo $i
     117:   
     118:  # we don't need define animal
     119:  for animal in dog cat elephant
     120:  do
     121:      echo "There are ${animal}s..."
     122:  done
     123:   
     124:  read -p "is these all animal" test
     125:   
     126:  # seq main the step by step from 1 to 100
     127:  for inum in $(seq 1 100)
     128:  do
     129:      echo "$inum"
     130:  done
     131:   
     132:  read -p "is these number is 100" test 
     133:  # like c language, for loop
     134:  nu=100
     135:  s=0
     136:  for ((i=1; i<=$nu; i=i+1))
     137:  do
     138:      s=$(($s+$i))
     139:  done
     140:  echo "The result of '1+2+3...$nu' is ==> $s"
     141:   
     142:  exit 0
  • 相关阅读:
    MSSQL2008 R2 数据库展开报错:值不能为空 参数名:viewInfo
    疑似Windows server自动更新引发的sqlserver宕机
    SQL SERVER 数据库被标记为“可疑”的解决办法
    SQL SERVER日志中报错:等待闩锁时出现超时:类 log_manager
    sqlserver服务因登陆失败无法启动1069
    sqlserver事务日志增长过快
    SQL Server – “Could not connect because the maximum number of ‘1’ user connections has already been reached.”
    SQL SERVER 2012评估期过期
    sqlserver服务启动失败1067
    SQL Server 检测到基于一致性的逻辑 I/O 错误 pageid 不正确(应为 1:10202320,但实际为 0:0)
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3421964.html
Copyright © 2020-2023  润新知