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}' 工作流程, 读入有'\n'换行符分割的一条记录, 然后记录按指定分隔符划分区域, 默认分隔符是空格, $0所有域, $1第一个区域,类推

    cat /etc/passwd | awk -F ':' '{print $1 "\t"$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 'g\o\{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\n"
  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
posted @ 2013-11-13 18:43  神之一招  阅读(495)  评论(0编辑  收藏  举报