zoukankan      html  css  js  c++  java
  • Linux 总结2


                                               
    cd                                            
    pwd                                           
    mkdir -p a/b/c                                           
    rmdir -p a/b/c                                           
    basename /tmp/aaa                                           
    dirname /tmp/aaa                                           
    head -3                                           
    tail -3                                           
    umask -S                                           
    su - oracle                                           
    shutdown -h now, shutdown -r +5, shutdown -r 10:35, shutdown -c                                           
    poweroff                                           
    ls   ls -Srh ( 查看大小,size)   ll -t ( 按照时间排序 )                                      
    ifconfig                                           
    ping                                           
    cat                                           
    more                                           
    history                                           
    passwd                                           
    id                                           
    who                                           
    lastlog                                           
    uniq        ls | uniq                                   
    wc        ls | wc                                   
    uname –a                                           
                                               


                                               
    chown        chown -R abc:abc test_folder/  chown -R ,abc test_folder/( 只改变组 )                                   
    chgrp        chgrp -R abc test_folder/                                   
    chmod        chmod -R 777 test_folder/ chmod -R u=rwx,g=rw,o=r test_folder/                                   
            chmod -R a+x test_folder/ 特殊权限 chmod u+s,r+s,o+s test_folder/                                   
                                               


                                               
    cp    cp 命令含有粘贴的含义    cp -a test_folder/ abc/                                   
            cp -fr test_folder/ abc/                                   
    rm        rm -rf    rm -ri                               
                                               


                                               
    file    针对文件    file aa                                   
    whereis    针对命令    whereis cd                                   
    which    针对命令    which cd                                   
    type    针对命令(bash别名)    type cd                                   


                                               
                                               
    dumpe2fs        dumpe2fs -h /dev/sda1                                   
    df        df - h                                   
    du        du --max-depth=1 -h                                   
                                               


                                               
    ln    实体链接, 所有路径都可以    ln aa bb                                   
    ln -s    符号链接 源文件必须使用绝对路径,(同一个文件夹下边可以不指定路径)                                       
            ln -s /tmp/test_folder/aa ../bb                                   
                                               


                                               
    touch aa    mtime为修改时间, atime为读取时间, ctime为修改属性时间    ll --time=atime, ll --time=ctime, ll                                   
            touch -c -t '1201011010' aa ( 修改aa读取和修改时间为 12年1月1日10点10分 )                                   
            touch -m -t '1201011010' aa ( 修改aa 的修改时间为 12年1月1日10点10分)                                   
            touch -a -c '1201011010' aa ( 修改aa 的读取时间为 12年1月1日10点10分)                                   
                                               


                                               
    find    find path -option [-print] [-exec command] {} ;    find . -maxdepth 1 -name aa                                   
            find . -maxdepth 1 -perm 777                                   
            find . -maxdepth 1 -user root                                   
            find . -maxdepth 1 -group root                                   
            find . -maxdepth 1 -mtime(atime, ctime) -4(+4, 4)( +4 4天以前, -4 4天以内, 4 刚好之前的第4天                                    
            find . -nogroup                                   
            find . -nouser                                   
            find . -newer f1                                   
            find . -type b/d/c/p/l/f   #块设备,目录,字符设备, 管道, 符号链接, 普通文件                                find . -type d   
            find . -maxdepth 1 -size +4096(4096, -4096) #+大于4096, -4096小于4096, 4096等于4096                                   
            find . -name "*.txt"                                   
            find . -name "[A-Z]*"                                   
            find . -name "[a-z][a-z][0-9][0-9].txt" -print                                   
            find . -type f -exec ls -l {} ;                注意最后必须要有个分号;                   
            find . -mtime + 5 -exec rm -rf {} ; 等于 find . -mtime + 5 | xargs rm -rf                                    


                                               
    fdisk -l                                   
    fdisk    fdisk 根据提示进行分区, fdisk /dev/sda    其中, 提示如下:        前4个partition默认为主分区, 所以可以是P+P+P+E, 这种类型                           
            d 删除一个分区                                   
            m 返回主菜单                                   
            n 新建一个分区        可以使用 +50(K,M,G) 来限制分区的大小                           
            p 打印已经分区情况                                   
            t 确定分区的类型                                   
            q 退出不保存                                   
            w 退出并保存                                   
        格式化    mkfs -t ext3 /dev/sda3                                   
        挂载    mount /dev/sda3 /newdisk                                   
        卸载    umount /dev/sda3 或者 umount /newdisk                                   
        设置启动自动挂载, /etc/fstab    编辑 /etc/fstab, /dev/sda3 /newdisk ext3 defaults 1 2                                   
                                               
        扩展分区中的 逻辑分区, 无法在 /dev 中显示 ? (只要关闭 linux, 就会出现)    然后, 逻辑分区的挂载等情况和主分区一样                                   
                                               
        生成一整块存储空间, 可以被当做分区挂载    dd if=/dev/zero of=./xxx bs=1M count=1024                                   
        格式化刚刚的块    mkfs -t ext3 xxx                                   
        挂载刚才生成的块    mount -o xxx /dd_disk                                   
        卸载刚刚的    umount /dd_disk                                   


                                               
                                               
    sort + 4 -r  sort 是对文本文档进行排序的, 不适用于类似 ls 等查询结构的情况.                                         
    cut    截取, 类似urtalEdit 一样, 一列一列的    df | cut -d " " -f1                                   
            df | cut -c 10-20                                   
    tr        cat file | tr -d 'x' >new_file                                   
            cat file | tr -s 'a' 'b' >new_file                                   
            tr -s 'a' 'b' <stat.txt >stat.tmp                                   
                                               


                                                                                         
    groups     查看所属的组, 第一个为有效组                                       
    useradd        useradd -g oinstall -G dba -d /home/oracle                                   
    usermod        usermod -g oinstall -G dba -d /home/abc                                   
    userdel        userdel oracle                                   
    finger    查看系统里用户情况    finger oracle                                   
    groupadd        groupadd xxx                                   
    groupmod        groupmod -n ooo xxx( 更名,-n是-name的意思)                                   
                                               


                                               
    sed    文本处理工具,本身是一个管道命令, 主要是以行为单位处理, 可以根据行    常用option:-n slient                                   
        进行 替换, 删除, 新增, 选取 等工作    常用option: -f 直接将sed动作写在一个文档内 -f filename                                   
        sed[-nefri] command 输入文本    常用option:  -i直接修改读取档案内容,而不是输出到屏幕                                   
            a 新增, c取代, d删除, i插入, p打印, s搭配正则表达式                                   
            sed '2d' abc        删除abc文件的第2行                           
            sed '2,$d' abc        删除abc文件的第2行到最后一行                           
            sed '/test/'d abc        删除文件所有包含test的行                           
            sed '1,2a asdf' abc            在abc文件的1-2行增加 asdf                       
            sed '1,2s/old/new/g' abc            替换abc文件中的1,2行new->old                       
            sed 's/被替换内容/要替换内容/g' file          

    sed 的处理单位是一整行                         


                                               
                                               
    awk    使用方法    awk '{pattern + action}' {filenames}                                   
        调用方式 3 种    1. 命令行 awk [-F field-separator] 'command' imput-files                                   
            2. awk 脚本 这种可以把所有的awk命令放到一个文件中, 并把文件头改为 #!/bin/awk                                   
            3. 将所有的 awk 命令插入到一个单独文件, 然后调用. Awk -f awk-script-file input-files                                   
            last -n 5 | awk '{print $1}'                                   
        流程    读入有' '换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键".                                   
            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"}'                                   
        流程    先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,                                   
            随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。                                   
            awk -F ':' '/root/' /etc/passwd  搜索包含 root 的行, 支持正则表达式                                   
        awk 编程, 用; 分隔执行语句    awk '{count++; print &0;} END{print "user count is", count}' /etc/passwd                                   
        编程借鉴了c语言的, if语句, for循环 等等               

    awk 的处理单位是, 一行在内部按照分隔符要求, 分出的区域                        


                                               
                                               
    fg/bg    进程的前端和后端, 不同于排程 fg/bg %1    vi abc &                                   
    jobs    直接显示目前的job情况    kill -1 -9 -15 %1(job no.)                                   
    kill    1重新读取, 9强制停止, 15正常方式结束    kill -9 10633( 10633是pid)                                   
    ps    ps -ef, ps -l, ps -afjx(树)                                       
    top                                           
    free                                           
    vmstat                                           
    netstat    netstat -tlnp                                       
    rpm        rpm -qa 1023.rpm        查看包                           
            rpm -ivh *.rpm        安装包                           
            rpm -Uvh *.rpm        更新包                           


                                               
                                               
    gzip    压缩    gzip -v abc.txt, zcat abc.gz, gzip -dv abc.gz                                   
    bzip2    压缩    bzip2 -v abc.txt, bzcat abc.bz2, bzip2 -dv abc.bz2, bzip2 -kv abc.txt                                   
    tar    打包    tar -czv -f abc.tar.gz aa/ abc.txt                                   
        查看    tar -tzv -f abc.tar.gz                                   
        解压    tar -xzv -f abc.tar.gz -C /tmp/test --exclude abc.txt                                   
        打包    tar -cjv -f abc.tar.bz2 aa/ abc.txt                                   
        查看    tar -tjv -f abc.tar.bz2                                   
        解压    tar -xjv -f abc.tar.bz2 -C /tmp/test --exclude abc.txt                                   


                                               
                                               
    正则表达式    [] 中的某一个    grep '[ae]st' aa.txt            ast','est'                       
        [^g]不包括g的    grep '[^g]oo'        有连续oo, 前边不包括g                           
        [:lower:][:upper:][:digit:][:alumn:](字母,数字)[:alpha:](字母)                                       
        ^ 没在中括号内表示行头                                       
        $ 表示行尾                                       
        . 代表任意一个字符                                       
        * 重复前一个字符, 0个~N个    *前边字符实际上已经于*结合                                   
        转义字符, 可以将特殊字符转义成普通字符                                       
        {} 限定连续范围    grep -n 'o{2,5} regular.txt                这样搜索的话, gooooooooo也会被搜索出来, 因为搜索时只要满足条件就不继续搜索了.                   
        {} 增加开头结尾限制    grep -n 'go{2,5}g' regular.txt                g开头,g结尾                   


                                               
                                               
    例行工作排程    可以脱离终端机的bash, 后台运行    at now + 3 minutes, 进入at界面, 输入命令, 例如 echo “hello,world", 然后ctrl+d 退出                                   
    at    一个时间点执行的排程    at 10:30 2013-12-20             at now + 3 days                       
    atq    查看一个时间点执行的排程的计划                                       
    atrm    删除, 注意rm本来就是linux中的删除命令, atrm 所以是排程删除    atrm 11    11 是排程号                               
    at -c    查看排程的具体内容    at -c 11                                   
    crontab    循环执行的排程, 其实就是一个档案记录的修改, 增加一行就是增加一个排程    crobtab -e -l -r                                   
        这个档案就是 /etc/crontab 和 /var/spool/cron(crontab 修改的内容 )                                       
        crontab -u[username] [-l -e r ]    其中 -u 只有root才可以, 帮助其他用户建立排程                                   
        分钟 小时 日期 月 周 指令    其中 -e 表示编辑                                   
        其中 * 代表任何    其中 -l 表示查看                                   
        其中 , 代表时间段, 0 3,6 表示只有3 和 6 这两个小时执行    其中 -r 表示删除                                   
        其中 - 代表时间间隔 0 3-6 表示3到6点, 3,4,5,6                                       
        其中 /n 表示每个, 第一个字段用 /5 表示每个5分钟                                       
        系统每分钟都会读取 /etc/crontab 与 /var/spool/cron 内容                                       
        其中 /etc/crontab 分为每小时, 每天,每周,每月                                       


                                               
                                               
    系统服务    /etc/services(服务对应端口)                                       
        /init.d/atd restart, status, stop 等( 各种服务的启动, 关闭等等 )    oracle 启动时自动启动可能用到                                   
                                               


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

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

    wall “hello” 广播


    bash

    bash 支持通配符 * ? [] [-] [^], 当指令过长时, 可以执行换行( 同时也是转义字符)

    当定义变量时,需要先执行某个命令时, 用 $(), 例如 dbtest=$(uname)oracle , 注意: 这是小括号, 要先执行小括号里的命令

    如果要扩充变量, 因为默认情况下变量值都是字符串的, 所以可以使用字符串进行扩展, 例如 PATH="$PATH":/home 或者 PATH=${PATH}:/home, 注意: 这是大括号, 大括号的作用是将变量值带出, 而不是只显示变量名(前边一定是双引号)

    unset ddd 取消变量
    bash 可以进入子 bash
    set 显示所有的环境变量, 包括 PATH 等等( 个人感觉是对bash环境的设定)

    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 将错误和正确的都写入一个文件, 注意文件内并没有区别那些事由正确的写入, 那些是由错误的写入 ( 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 而执行的命令, 例如: || xargs cut -d "" f1

    即 前一个命令执行的结果作为一个参数, xargs 右边命令依赖这个参数来执行, 右边的命令将这个参数作为标准输入.


    shellscript

    执行方法

    1. 修改档案的可执行权限, 然后 ./档案名 ( 也可以使用绝对路径+档案名)

    2. 使用 bash 或 sh 来执行, 例如 bash ex.sh

    这两种执行方法都会创建一个子bash, 来执行,这样, 在shellscript脚本中创建的变量, 并不会在运行的bash(父bash)中被定义, 即shellscirpt 会创建一个子 bash 来执行这个脚本, 执行完后会返回到父bash中, 但是变量结果等等就全部没有了.

    3. 但是, 如果你使用 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 中.

    关于档案名的文件类型判断

    -e 判断档案是否存在 (常用)

    -f 该档案是否为file (常用)

    -d 该档案是否为文件夹 (常用)

    关于档案权限判断

    -r 是否存在可读权限 (常用)

    -w 是否存在可写权限 (常用)

    -x 是否存在可执行权限 (常用)

    两个档案之间的比较

    -nt file1 是否比 file2 新

    -ot file1 是否比 file2 旧

    -ef file1 是否与 file2 为同一个档案, 在 hardlink 时用

    两个整数的之间的判断

    -eq 两数值相等

    -ne 两数值不等

    -gt n1 > n2

    -lt n1 < n2

    -ge n1 >= n2

    -le n1 <= n2

    判断字符串数据

    -z string 判断是否为空串, 如果为空串返回 true

    -n string 判断是否为非空串

    string1 = string2 判断是否为相等

    string1 != string 判断是否为不等

    多重条件判断

    -a 逻辑与, 例如 test -r filename -a -x filename

    -o 逻辑或

    ! 逻辑非, 例如 test ! -x file 当不具有执行权限时, 返回 true

    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 也是将内容显示在屏幕上, 其中还有每条指令执行后的结果, +后边的是指令

    其中的 –x 很好用( 可实现单步跟踪 )

    函数, 由于脚本的运行方式是自上而下, 所以函数要放在上边, 类似 C 语言,

    注意在函数体内也有内建变量, 跟shellscirpt本身的重名, 就是 $0 函数本身, $1 第一个参数, $2第2个参数, 等等,

    所以在函数内部的$1表示的函数的第一个参数, 就类似其他语言函数内部的变量如果跟外边变量重名, 那么会屏蔽掉外部变量.

    代码式样, 参看相关如下:

    #!/bin/bash

    # File: shellscript.sh

    # -------------------------------

    # Description: just test

    # History: Copied, 2013-12-23

    # Author: Leon

    #

    # 函数

    function printint() {

      echo –n “your choice is “

    }

    # 打印hello world

    echo –e “hello world!a '”

    # 读入数据, –p 表示提示

    read –p “please input your name:” yourname

    fileuser=${yourname}

    filename=${fileuser:-“filename”}

    date1=$(date –date=’2 days ago’ +%Y%m%d) # 要先执行小括号里的命令

    date2=$(date –date=’1 days ago’ +%Y%m%d) # 要先执行小括号里的命令

    date3=$(date +%Y%m%d)

    file1=${filename}${date1}

    file2=${filename}${date2}

    file3=${filename}${date3}

    touch ${file1}

    touch “$file2”

    touch “$file3”

    # 数值计算

    read –p “please input the first number:” firstNum

    read –p “please input the secod number:'” secondNum

    total=$(($firstNum*$secondNum)) 

    # test

    read –p “please input (y/n")” yn

    [ “$yn” == “y” –o “$yn” == “Y” ] && echo “ok, continue”  # 注意[]里的空格

    # argument

    echo “$0”

    echo “$#”

    echo “$@”

    echo “$1”

    # 删除参数

    shift 2 # 除了0以外, 删除1-2 连个参数

    shift 1 # 在刚才基础上, 再删除一个参数

    # if

    if [ ”&yn == “n” ] || [ “&yn” == “N” ] ; then  # 因为规定一行只能写一个命令, 所有要加分号在 then 之前

      echo “NO”

    fi

    if ; then

      something

    elif ; then

      something

    else

      others

    fi

    # case

    case “$1” in

    “hello”)

      echo “hello”

      ;;

    “hi”)

      echo “hi”

      ;;

    *)

      echo “ok”

      ;;

    esac

    # loop

    while [ “$yn” != “yes” –a “$yn” != “YES”]

    do

      read –p “please input yes/no” yn

    done

    until [ “$yn” == “eee” –o “$yn” == “EEE” ]

    do

      read –p “please input something” yn

    done

    declare –i i=0

    while [ “$i” –lt 100 ]

    do

      i=$((i+1))

    done

    # for ( 我们不需要定义循环变量, 例如下边的 animal

    for animal in dog cat elephant

    do

      echo “There are ${animail}s”

    done

    # seq main the step by steup from 1 to 100

    for inum in $(seq 1 100)

    do

      echo ”$inum“

    done

    for ((i=1; i<=$num; i=i+1))

    do

      s=$(($s+$i))

    done

    exit 0


    备份与还原 

     

  • 相关阅读:
    [BZOJ4755][JSOI2016]扭动的回文串(manacher+Hash)
    十二省联考2019部分题解
    [BZOJ2959]长跑(LCT+并查集)
    [BZOJ4541][HNOI2016]矿区(平面图转对偶图)
    笛卡尔树
    [CF896C]Willem, Chtholly and Seniorious(珂朵莉树)
    [BZOJ4349]最小树形图
    [BZOJ1858][SCOI2010]序列操作(线段树)
    [PA2014]Parking
    [PA2014]Budowa
  • 原文地址:https://www.cnblogs.com/moveofgod/p/3483817.html
Copyright © 2011-2022 走看看